/ modules / nixos / myusers.nix
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  }