Skip to content

Commit 7f02ff8

Browse files
authored
Merge pull request #44 from yunfachi/feat/homeManagerUser-per-host
lib/configurations: add homeManagerUser to host options
2 parents 39e9a7b + de48a45 commit 7f02ff8

File tree

6 files changed

+47
-18
lines changed

6 files changed

+47
-18
lines changed

docs/src/configurations/structure.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
- `home-manager` (home-manager): used to override home-manager in your configuration, equivalent to `inputs.denix.inputs.home-manager.follows`. Defaults to `inputs.home-manager`.
99
- `nix-darwin` (nix-darwin): used to override nix-darwin in your configuration, equivalent to `inputs.denix.inputs.nix-darwin.follows`. Defaults to `inputs.nix-darwin`.
1010
- `homeManagerNixpkgs` (nixpkgs): used in the `pkgs` attribute of the `home-manager.lib.homeManagerConfiguration` function in the format: `homeManagerNixpkgs.legacyPackages.${host :: homeManagerSystem}`. Defaults to the `nixpkgs` provided in the function arguments.
11-
- `homeManagerUser` (string): the username, used in `home-manager.users.${homeManagerUser}` and for generating the Home Manager configuration list.
11+
- `useHomeManagerModule` (boolean): whether to include the Home Manager module in the NixOS and Nix-Darwin configurations. Defaults to `true`; can be overridden per host via `delib.host :: useHomeManagerModule`.
12+
- `homeManagerUser` (string): the username, used in `home-manager.users.${homeManagerUser}` and for generating the Home Manager configuration list. Can be overridden per host via `delib.host :: homeManagerUser`.
1213
- `moduleSystem` ("nixos", "home", and "darwin"): specifies which module system the configuration list should be generated for - NixOS, Home Manager, or Nix-Darwin.
1314
- `paths` (listOf string): paths to be imported; add hosts, rices, and modules here. Defaults to `[]`.
1415
- `exclude` (listOf string): paths to be excluded from importing. Defaults to `[]`.
@@ -27,6 +28,7 @@ delib.configurations rec {
2728
home-manager = inputs.home-manager;
2829
nix-darwin = inputs.nix-darwin;
2930
homeManagerNixpkgs = nixpkgs;
31+
useHomeManagerModule = true;
3032
homeManagerUser = "sjohn";
3133
moduleSystem = "nixos";
3234
paths = [./modules ./hosts ./rices];

docs/src/hosts/structure.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
## Function Arguments {#function-arguments}
44
- `name`: a string representing the host name.
5-
- `useHomeManagerModule`: whether to include the Home Manager module in the NixOS and Nix-Darwin configurations of this host. Defaults to `true`.
5+
- `useHomeManagerModule`: whether to include the Home Manager module in the NixOS and Nix-Darwin configurations of this host. Defaults to the value of `delib.configurations :: useHomeManagerModule`, which itself defaults to `true`.
6+
- `homeManagerUser`: the username, used in `home-manager.users.${homeManagerUser}` and for generating the Home Manager configuration list. Defaults to `delib.configurations :: homeManagerUser`.
67
- `homeManagerSystem`: a string used in the `pkgs` attribute of the `home-manager.lib.homeManagerConfiguration` function, which is used in the [`delib.configurations`](/configurations/introduction) function as `homeManagerNixpkgs.legacyPackages.${homeManagerSystem}`.
78
- `myconfig`: sets its value to `config.${myconfigName}` if `config.${myconfigName}.host` matches the current host.
89
- `nixos`: sets its value to `config` if `moduleSystem` is `nixos` and `config.${myconfigName}.host` matches the current host.
@@ -26,6 +27,7 @@ delib.host {
2627
name = "";
2728
2829
useHomeManagerModule = true;
30+
homeManagerUser = "sjohn";
2931
3032
# homeManagerNixpkgs.legacyPackages.${homeManagerSystem}
3133
homeManagerSystem = "x86_64-linux";

docs/src/ru/configurations/structure.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
- `home-manager` (home-manager): используется для переопределения home-manager в вашей конфигурации, аналогично `inputs.denix.inputs.home-manager.follows`. По умолчанию `inputs.home-manager`.
99
- `nix-darwin` (nix-darwin): используется для переопределения nix-darwin в вашей конфигурации, аналогично `inputs.denix.inputs.nix-darwin.follows`. По умолчанию `inputs.nix-darwin`.
1010
- `homeManagerNixpkgs` (nixpkgs): используется в атрибуте `pkgs` функции `home-manager.lib.homeManagerConfiguration` в формате: `homeManagerNixpkgs.legacyPackages.${host :: homeManagerSystem}`. По умолчанию используется `nixpkgs` из аргументов этой функции.
11-
- `homeManagerUser` (string): имя пользователя, используется в `home-manager.users.${homeManagerUser}` и для генерации списка конфигураций Home Manager.
11+
- `useHomeManagerModule` (boolean): добавлять ли модуль Home Manager в конфигурации NixOS и Nix-Darwin. По умолчанию `true`; значение можно переопределить в каждом хосте через `delib.host :: useHomeManagerModule`.
12+
- `homeManagerUser` (string): имя пользователя, используется в `home-manager.users.${homeManagerUser}` и для генерации списка конфигураций Home Manager. Значение можно переопределить в каждом хосте через `delib.host :: homeManagerUser`.
1213
- `moduleSystem` (`"nixos"`, `"home"` и `"darwin"`): указывает, для какой модульной системы должен быть создан список конфигураций - NixOS, Home Manager или Nix-Darwin.
1314
- `paths` (listOf string): пути, которые будут импортированы; добавьте сюда хосты, райсы и модули. По умолчанию `[]`.
1415
- `exclude` (listOf string): пути, которые будут исключены из импортирования. По умолчанию `[]`.
@@ -27,6 +28,7 @@ delib.configurations rec {
2728
home-manager = inputs.home-manager;
2829
nix-darwin = inputs.nix-darwin;
2930
homeManagerNixpkgs = nixpkgs;
31+
useHomeManagerModule = true;
3032
homeManagerUser = "sjohn";
3133
moduleSystem = "nixos";
3234
paths = [./modules ./hosts ./rices];

docs/src/ru/hosts/structure.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
## Аргументы функции {#function-arguments}
44
- `name`: строка, представляющая имя хоста.
5-
- `useHomeManagerModule`: добавлять ли модуль Home Manager в конфигурации NixOS и Nix-Darwin этого хоста. По умолчанию `true`.
5+
- `useHomeManagerModule`: добавлять ли модуль Home Manager в конфигурации NixOS и Nix-Darwin этого хоста. По умолчанию `delib.configurations :: useHomeManagerModule`, который, в свою очередь, по умолчанию `true`.
6+
- `homeManagerUser`: имя пользователя, используется в `home-manager.users.${homeManagerUser}` и для генерации списка конфигураций Home Manager. По умолчанию `delib.configurations :: homeManagerUser`.
67
- `homeManagerSystem`: строка, используемая в атрибуте `pkgs` функции `home-manager.lib.homeManagerConfiguration`, которая используется в функции [`delib.configurations`](/ru/configurations/introduction) в виде `homeManagerNixpkgs.legacyPackages.${homeManagerSystem}`.
78
- `myconfig`: устанавливает её значение в `config.${myconfigName}`, если `config.${myconfigName}.host` соответствует текущему хосту.
89
- `nixos`: устанавливает её значение в `config`, если `moduleSystem` равен `nixos` и `config.${myconfigName}.host` соответствует текущему хосту.
@@ -26,6 +27,7 @@ delib.host {
2627
name = "";
2728
2829
useHomeManagerModule = true;
30+
homeManagerUser = "sjohn";
2931
3032
# homeManagerNixpkgs.legacyPackages.${homeManagerSystem}
3133
homeManagerSystem = "x86_64-linux";

lib/configurations/default.nix

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
# Home Manager
2727
homeManagerNixpkgs ? nixpkgs,
2828
homeManagerUser ? null, # not default value!
29+
useHomeManagerModule ? true,
2930
isHomeManager ? null, # TODO: DEPRECATED since 2025/05/05
3031
# Dev
3132
mkConfigurationsSystemExtraModule ? {
@@ -66,6 +67,7 @@
6667
config,
6768
moduleSystem,
6869
useHomeManagerModule,
70+
homeManagerUser,
6971
currentHostName ? null,
7072
}: let
7173
extendedDelib = delib.recursivelyExtend (
@@ -81,6 +83,8 @@
8183
config
8284
myconfigName
8385
currentHostName
86+
useHomeManagerModule
87+
homeManagerUser
8488
;
8589
};
8690

@@ -111,13 +115,24 @@
111115
mkSystem = {
112116
moduleSystem,
113117
useHomeManagerModule,
118+
homeManagerUser,
114119
homeManagerSystem,
115120
currentHostName,
121+
isInternal ? false,
116122
internalExtraModules ? (moduleSystem_: []),
117-
}:
118-
if !topArgs ? homeManagerUser && useHomeManagerModule
119-
then abort "Please specify 'delib.configurations :: useHomeManagerModule'. Valid values are true and false."
123+
} @ args:
124+
if homeManagerUser == null && (useHomeManagerModule || moduleSystem == "home")
125+
then abort "Please specify 'delib.configurations :: homeManagerUser' or 'delib.host :: homeManagerUser'."
120126
else let
127+
useHomeManagerModule =
128+
if isInternal
129+
then topArgs.useHomeManagerModule or true
130+
else args.useHomeManagerModule;
131+
homeManagerUser =
132+
if isInternal
133+
then topArgs.homeManagerUser or null
134+
else args.homeManagerUser;
135+
121136
extensionsModules = builtins.concatMap (extension: extension.modules) extensions;
122137
nixosSystem = nixpkgs.lib.nixosSystem {
123138
specialArgs =
@@ -126,9 +141,9 @@
126141
${denixLibName} = mkDenixLib {
127142
config = nixosSystem.config;
128143
moduleSystem = "nixos";
129-
inherit currentHostName useHomeManagerModule;
144+
inherit currentHostName useHomeManagerModule homeManagerUser;
130145
};
131-
inherit useHomeManagerModule; # otherwise it's impossible to make config.home-manager optional when not useHomeManagerModule.
146+
inherit useHomeManagerModule homeManagerUser; # otherwise it's impossible to make config.home-manager optional when not useHomeManagerModule.
132147
};
133148
modules =
134149
(internalExtraModules "nixos")
@@ -144,9 +159,9 @@
144159
${denixLibName} = mkDenixLib {
145160
config = homeSystem.config;
146161
moduleSystem = "home";
147-
inherit currentHostName useHomeManagerModule;
162+
inherit currentHostName useHomeManagerModule homeManagerUser;
148163
};
149-
inherit useHomeManagerModule; # otherwise it's impossible to make config.home-manager optional when not useHomeManagerModule.
164+
inherit useHomeManagerModule homeManagerUser; # otherwise it's impossible to make config.home-manager optional when not useHomeManagerModule.
150165
};
151166
pkgs = homeManagerNixpkgs.legacyPackages.${homeManagerSystem};
152167
modules = (internalExtraModules "home") ++ extraModules ++ files ++ extensionsModules;
@@ -158,9 +173,9 @@
158173
${denixLibName} = mkDenixLib {
159174
config = darwinSystem.config;
160175
moduleSystem = "darwin";
161-
inherit currentHostName useHomeManagerModule;
176+
inherit currentHostName useHomeManagerModule homeManagerUser;
162177
};
163-
inherit useHomeManagerModule; # otherwise it's impossible to make config.home-manager optional when not useHomeManagerModule.
178+
inherit useHomeManagerModule homeManagerUser; # otherwise it's impossible to make config.home-manager optional when not useHomeManagerModule.
164179
};
165180
# FIXME: is this really necessary?
166181
# pkgs = ...;
@@ -189,9 +204,11 @@
189204
// (mkSystem {
190205
# TODO: maybe add moduleSystem = "empty", which "apply" would skip entirely*?
191206
moduleSystem = "nixos";
192-
useHomeManagerModule = true; # FIXME
207+
useHomeManagerModule = topArgs.useHomeManagerModule; # FIXME
208+
homeManagerUser = "user";
193209
homeManagerSystem = "x86_64-linux"; # just a plug; FIXME
194210
currentHostName = null;
211+
isInternal = true;
195212
internalExtraModules = _: [mkConfigurationsSystemExtraModule];
196213
}).config.${
197214
myconfigName
@@ -209,7 +226,7 @@
209226

210227
system = mkSystem {
211228
inherit moduleSystem;
212-
inherit (host) useHomeManagerModule homeManagerSystem;
229+
inherit (host) useHomeManagerModule homeManagerUser homeManagerSystem;
213230
currentHostName = host.name;
214231
internalExtraModules = moduleSystem: let
215232
apply = mkApply moduleSystem host.useHomeManagerModule;
@@ -240,7 +257,7 @@
240257
configurations = let
241258
mkHostAttrs = riceName: rice: hostName: host:
242259
lib.optionalAttrs (!rice.inheritanceOnly or false) {
243-
"${lib.optionalString (moduleSystem == "home") "${homeManagerUser}@"}${hostName}${
260+
"${lib.optionalString (moduleSystem == "home") "${host.homeManagerUser}@"}${hostName}${
244261
lib.optionalString (riceName != null) "-${riceName}"
245262
}" = mkHost {
246263
inherit host;

lib/configurations/host.nix

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
myconfigName,
55
config,
66
currentHostName,
7+
useHomeManagerModule,
8+
homeManagerUser,
79
...
810
}: {
911
host = {
@@ -14,7 +16,8 @@
1416
darwin ? {},
1517
shared ? {},
1618
# to avoid overwriting
17-
# useHomeManagerModule ? true,
19+
# useHomeManagerModule ? null,
20+
# homeManagerUser ? null,
1821
# homeManagerSystem ? null,
1922
# rice ? null,
2023
...
@@ -69,7 +72,8 @@
6972
hostSubmoduleOptions = with delib.options; {
7073
name = noDefault (strOption null);
7174

72-
useHomeManagerModule = boolOption true;
75+
useHomeManagerModule = boolOption useHomeManagerModule;
76+
homeManagerUser = noNullDefault (strOption homeManagerUser);
7377
homeManagerSystem = description (noDefault (strOption null)) "Passed to the `homeManagerConfiguration` as `nixpkgs.legacyPackages.<homeManagerSystem>`";
7478

7579
myconfig = attrsOption {};

0 commit comments

Comments
 (0)