summaryrefslogtreecommitdiff
path: root/modules/nixos/personal/user.nix
blob: ea0ce8cd2aa601a6c9a514bce18d1c0c906007c1 (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
52
53
54
55
56
57
58
59
60
61
62
{
  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.networking.networkmanager.enable "networkmanager";
        openssh.authorizedKeys.keys = with config.personal.lib.publicKeys.ssh; [
          latitude-7490
          precision-3571
        ];
      };

      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;
          stylix.targets.emacs.enable = false;
        };
        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;
        };
      };
    }
  );
}