configuration for users and groups

This commit is contained in:
Daniel Barlow 2022-09-28 21:31:15 +01:00
parent 1dbdbbbb1a
commit 6f23a45696
3 changed files with 44 additions and 2 deletions

View file

@ -10,6 +10,7 @@ let
({ lib, ... } : { config = { inherit (device) kernel; }; }) ({ lib, ... } : { config = { inherit (device) kernel; }; })
<liminix-config> <liminix-config>
./modules/s6 ./modules/s6
./modules/users.nix
] nixpkgs.pkgs; ] nixpkgs.pkgs;
squashfs = liminix.builders.squashfs config.filesystem.contents; squashfs = liminix.builders.squashfs config.filesystem.contents;
kernel = callPackage ./kernel { kernel = callPackage ./kernel {

View file

@ -33,10 +33,27 @@ in {
type = types.attrsOf types.nonEmptyStr; type = types.attrsOf types.nonEmptyStr;
}; };
}; };
groups = mkOption {
type = types.attrsOf types.anything;
};
users = mkOption {
type = types.attrsOf types.anything;
};
}; };
config = { config = {
defaultProfile.packages = with pkgs; defaultProfile.packages = with pkgs;
[ s6-init-bin busybox execline s6-linux-init s6-rc ]; [ s6-init-bin busybox execline s6-linux-init s6-rc ];
users.root = {
uid = 0; gid= 0; gecos = "Root of all evaluation";
dir = "/";
passwd = "";
shell = "/bin/sh";
};
groups.root = {
gid = 0; usernames = ["root"];
};
filesystem = dir { filesystem = dir {
bin = dir { bin = dir {
sh = symlink "${busybox}/bin/sh"; sh = symlink "${busybox}/bin/sh";
@ -57,8 +74,6 @@ in {
PATH=${lib.makeBinPath config.defaultProfile.packages} PATH=${lib.makeBinPath config.defaultProfile.packages}
export PATH export PATH
''); '');
passwd = { file = "root::0:0:root:/:/bin/sh\n"; };
group = { file = "root::0:\n"; };
}; };
proc = dir {}; proc = dir {};
run = dir {}; run = dir {};

26
modules/users.nix Normal file
View file

@ -0,0 +1,26 @@
{ 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; };
};
};
};
}