-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnixos.nix
124 lines (84 loc) · 2.92 KB
/
nixos.nix
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
{ lib }: let
inherit (builtins) baseNameOf listToAttrs;
inherit (lib) nixosSystem;
inherit (lib.custom) mkUnfreePkgs mkPath;
# Retrieves the profile of a user.
getProfile = userPath : let
# Import the profile of the user.
profilePath = mkPath userPath "profile.nix" "For user '${baseNameOf userPath}': Each user must define a 'profile.nix' file.";
profile = (import profilePath);
in profile;
# Generates entries for each system user.
mkSystemUsers = users: {
users.users = (listToAttrs (map (userPath: let
# The profile of the current user.
profile = getProfile userPath;
in {
name = profile.username;
value = {
name = profile.username;
description = profile.fullName;
isNormalUser = true;
} // profile.systemUserOverride;
}) users));
};
# Generates entries for each home manager user.
mkHomeUsers = homeUsers: (listToAttrs (map (userPath: let
# The profile of the current user.
profile = getProfile userPath;
in {
name = profile.username;
value = {
_module.args.profile = profile;
imports = [ userPath ];
};
}) homeUsers));
in {
# Creates a host from the given arguments.
mkHost = { hostPath, system, self, users, inputs, lib, nixpkgs, unstablepkgs, home-manager, extraNixosModules ? [ ] }: let
inherit (lib) nixosSystem;
inherit (lib.custom) fromJSON';
# The path where all the source code is located.
rootPath = ../.;
configsPath = "${rootPath}/configs";
# The package sets.
pkgs = mkUnfreePkgs nixpkgs { inherit system; };
upkgs = mkUnfreePkgs unstablepkgs { inherit system; };
# Resources used within NixOS configurations.
nixosModules = (import "${rootPath}/modules/nixos");
nixSystemRegistry = {
nix = { registry = (fromJSON' "${rootPath}/registry.json"); };
};
nixosUsers = mkSystemUsers users;
nixosSpecialArgs = {
inherit inputs configsPath pkgs upkgs;
customPkgs = self.packages.${system};
presetsPath = "${rootPath}/presets/nixos";
};
# Resources used within Home Manager configurations.
homeManagerModules = (import "${rootPath}/modules/home-manager");
homeManagerUsers = mkHomeUsers users;
homeManagerSpecialArgs = {
inherit inputs configsPath pkgs upkgs;
customPkgs = self.packages.${system};
presetsPath = "${rootPath}/presets/home-manager";
};
in nixosSystem {
inherit system lib;
specialArgs = nixosSpecialArgs;
modules = nixosModules ++ extraNixosModules ++ [
hostPath
nixSystemRegistry
nixosUsers
home-manager.nixosModules.home-manager {
home-manager = {
useGlobalPkgs = true;
useUserPackages = true;
users = homeManagerUsers;
sharedModules = homeManagerModules;
extraSpecialArgs = homeManagerSpecialArgs;
};
}
];
};
}