diff options
Diffstat (limited to 'modules/nixos/personal')
| -rw-r--r-- | modules/nixos/personal/user.nix | 47 |
1 files changed, 37 insertions, 10 deletions
diff --git a/modules/nixos/personal/user.nix b/modules/nixos/personal/user.nix index 0d1585e..0cb308a 100644 --- a/modules/nixos/personal/user.nix +++ b/modules/nixos/personal/user.nix @@ -1,22 +1,49 @@ -{ config, lib, ... }: +{ config, lib, ... }@extraArgs: -let cfg = config.personal.user; +let + cfg = config.personal.user; + importedHomeManager = extraArgs ? home-manager; in { + imports = lib.optional importedHomeManager + extraArgs.home-manager.nixosModules.home-manager; + options.personal.user = { enable = lib.mkEnableOption "main user"; name = lib.mkOption { type = lib.types.str; default = "qaristote"; }; + homeManager = { enable = lib.mkEnableOption "home-manager"; }; }; - config.users.users."${cfg.name}" = lib.mkIf cfg.enable { - isNormalUser = true; - extraGroups = [ "wheel" ] ++ lib.optional config.sound.enable "sound" - ++ lib.optional config.networking.networkmanager.enable "networkmanager"; - openssh.authorizedKeys.keys = [ - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK4wGbl3++lqCjLUhoRyABBrVEeNhIXYO4371srkRoyq qaristote@latitude-7490" - ]; + config = lib.mkIf cfg.enable ({ + users.users."${cfg.name}" = { + isNormalUser = true; + extraGroups = [ "wheel" ] ++ lib.optional config.sound.enable "sound" + ++ lib.optional config.networking.networkmanager.enable + "networkmanager"; + openssh.authorizedKeys.keys = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK4wGbl3++lqCjLUhoRyABBrVEeNhIXYO4371srkRoyq qaristote@latitude-7490" + ]; + }; - }; + assertions = let + missingArgAssertion = name: { + assertion = lib.hasAttr name extraArgs || !cfg.homeManager.enable; + message = + "attribute ${name} missing: add it in lib.nixosSystem's specialArgs, or set config.personal.user.homeManager.enable to false"; + }; + in [ + (missingArgAssertion "homeModules") + (missingArgAssertion "home-manager") + ]; + } // lib.optionalAttrs (importedHomeManager && extraArgs ? homeModules) { + home-manager = lib.mkIf cfg.homeManager.enable { + users."${cfg.name}".imports = extraArgs.homeModules; + useGlobalPkgs = lib.mkDefault true; + useUserPackages = lib.mkDefault true; + # TODO fix this: only config.personal options seem to be passed (or not ?) + extraSpecialArgs.osConfig = lib.mkDefault config; + }; + }); } |
