summaryrefslogtreecommitdiff
path: root/modules/nixos/personal/user.nix
blob: 78c6765f4e7c65887a3ad8d23de68a63d3ccd62f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
{ config, lib, ... }@extraArgs:

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 = 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 = (extraArgs.homeSpecialArgs or {}) // {
        osConfig = lib.mkDefault config;
      };
    };
  });
}