myusers.nix
1 # List of users for darwin or nixos system and their top-level configuration. 2 { 3 lib, 4 pkgs, 5 flake, 6 config, 7 ... 8 }: 9 let 10 inherit (flake.inputs) self; 11 mapListToAttrs = 12 m: f: 13 lib.listToAttrs ( 14 map (name: { 15 inherit name; 16 value = f name; 17 }) m 18 ); 19 in 20 { 21 options.myusers = lib.mkOption { 22 type = lib.types.listOf lib.types.str; 23 description = "List of usernames"; 24 defaultText = "All users under ./configuration/users are included by default"; 25 default = 26 let 27 dirContents = builtins.readDir (self + /configurations/home); 28 fileNames = builtins.attrNames dirContents; # Extract keys: [ "mfarabi.nix" ] 29 regularFiles = builtins.filter (name: dirContents.${name} == "regular") fileNames; # Filter for regular files 30 baseNames = map (name: builtins.replaceStrings [ ".nix" ] [ "" ] name) regularFiles; # Remove .nix extension 31 in 32 baseNames; 33 }; 34 35 config = { 36 # For home-manager to work. 37 # https://github.com/nix-community/home-manager/issues/4026#issuecomment-1565487545 38 users.users = mapListToAttrs config.myusers ( 39 name: 40 lib.optionalAttrs pkgs.stdenv.isDarwin { 41 home = "/Users/${name}"; 42 } 43 // lib.optionalAttrs pkgs.stdenv.isLinux { 44 isNormalUser = true; 45 shell = pkgs.zsh; 46 47 extraGroups = [ 48 "dialout" 49 ]; 50 } 51 ); 52 53 home-manager = { 54 backupFileExtension = "hm-bak"; 55 users = mapListToAttrs config.myusers (name: { 56 imports = [ 57 (self + /configurations/home/${name}.nix) 58 # ] 59 # ++ lib.optionals pkgs.stdenv.isLinux [ 60 # flake.inputs.stylix.homeModules.stylix 61 ]; 62 }); 63 }; 64 }; 65 }