blob: 2dff000d3eab7f2d51ceda60d7872236bf073d66 (
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.sound.enable "sound"
++ lib.optional config.networking.networkmanager.enable
"networkmanager";
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK4wGbl3++lqCjLUhoRyABBrVEeNhIXYO4371srkRoyq qaristote@latitude-7490"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEvPsKWQXX/QsFQjJU0CjG4LllvUVZme45d9JeS/yhLt qaristote@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;
};
};
});
}
|