{ lib, pkgs, config, ...}:
let
  inherit (lib) concatStrings concatStringsSep mapAttrsToList; # mkEnableOption mkOption types isDerivation isType hasAttr ;
  inherit (builtins) toString;
  inherit (pkgs.pseudofile) dir symlink;
#  inherit (pkgs) busybox;
  passwd-file  =
    let lines =  mapAttrsToList (name: u: "${name}:${if u ? passwd  then u.passwd else "!!"}:${toString u.uid}:${toString u.gid}:${u.gecos}:${u.dir}:${u.shell}\n" )
      config.users;
    in concatStrings lines;
  group-file =
    let lines = mapAttrsToList
      (name: {gid, usernames ? []}:
        "${name}:x:${toString gid}:${concatStringsSep "," usernames}\n" )
      config.groups;
    in concatStrings lines;
in {
  config = {
    filesystem = dir {
      etc = dir {
        passwd = { file = passwd-file; };
        group = { file = group-file; };
      };
    };
  };
}