1
0
mirror of https://github.com/nix-community/home-manager synced 2024-06-01 04:23:34 +02:00

nixos,darwin: add sharedModules and extraSpecialArgs options (#1793)

This allows users of the nixos and nix-darwin module to set shared modules
for all users and extra specialArgs to be available to home-manager modules.

The latter is named extraSpecialArgs just like the argument to
modules/default.nix.
This could be confusing since the the two are independent in code,
but they do mean the same thing so I think the name fits.

Darwin can now refer to the global system configuration if used as a module
through the special `darwinConfig` argument.

Co-authored-by: Nicolas Berbiche <nicolas@normie.dev>
This commit is contained in:
Pacman99 2021-02-20 22:02:25 -08:00 committed by GitHub
parent eb3a0342a8
commit 82d6ba7003
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 43 additions and 4 deletions

View File

@ -9,7 +9,10 @@ let
extendedLib = import ../modules/lib/stdlib-extended.nix pkgs.lib; extendedLib = import ../modules/lib/stdlib-extended.nix pkgs.lib;
hmModule = types.submoduleWith { hmModule = types.submoduleWith {
specialArgs = { lib = extendedLib; }; specialArgs = {
lib = extendedLib;
darwinConfig = config;
} // cfg.extraSpecialArgs;
modules = [ modules = [
({ name, ... }: { ({ name, ... }: {
imports = import ../modules/modules.nix { imports = import ../modules/modules.nix {
@ -26,7 +29,7 @@ let
home.homeDirectory = config.users.users.${name}.home; home.homeDirectory = config.users.users.${name}.home;
}; };
}) })
]; ] ++ cfg.sharedModules;
}; };
in in
@ -55,6 +58,24 @@ in
''; '';
}; };
extraSpecialArgs = mkOption {
type = types.attrs;
default = { };
example = literalExample "{ modulesPath = ../modules; }";
description = ''
Extra <literal>specialArgs</literal> passed to Home Manager.
'';
};
sharedModules = mkOption {
type = with types; listOf (oneOf [ attrs (functionTo attrs) path ]);
default = [ ];
example = literalExample "[ { home.packages = [ nixpkgs-fmt ]; } ]";
description = ''
Extra modules added to all users.
'';
};
verbose = mkEnableOption "verbose output on activation"; verbose = mkEnableOption "verbose output on activation";
users = mkOption { users = mkOption {

View File

@ -12,7 +12,7 @@ let
specialArgs = { specialArgs = {
lib = extendedLib; lib = extendedLib;
nixosConfig = config; nixosConfig = config;
}; } // cfg.extraSpecialArgs;
modules = [ modules = [
({ name, ... }: { ({ name, ... }: {
imports = import ../modules/modules.nix { imports = import ../modules/modules.nix {
@ -34,7 +34,7 @@ let
home.homeDirectory = config.users.users.${name}.home; home.homeDirectory = config.users.users.${name}.home;
}; };
}) })
]; ] ++ cfg.sharedModules;
}; };
serviceEnvironment = optionalAttrs (cfg.backupFileExtension != null) { serviceEnvironment = optionalAttrs (cfg.backupFileExtension != null) {
@ -65,6 +65,24 @@ in {
''; '';
}; };
extraSpecialArgs = mkOption {
type = types.attrs;
default = { };
example = literalExample "{ modulesPath = ../modules; }";
description = ''
Extra <literal>specialArgs</literal> passed to Home Manager.
'';
};
sharedModules = mkOption {
type = with types; listOf (oneOf [ attrs (functionTo attrs) path ]);
default = [ ];
example = literalExample "[ { home.packages = [ nixpkgs-fmt ]; } ]";
description = ''
Extra modules added to all users.
'';
};
verbose = mkEnableOption "verbose output on activation"; verbose = mkEnableOption "verbose output on activation";
users = mkOption { users = mkOption {