diff --git a/doc/installation.xml b/doc/installation.xml index 52119886..9c5d24b3 100644 --- a/doc/installation.xml +++ b/doc/installation.xml @@ -225,6 +225,23 @@ home-manager.useUserPackages = true; become the default value in the future. + + + + By default, Home Manager uses a private pkgs instance + that is configured via the options. + To instead use the global pkgs that is configured via + the system level options, set + + +home-manager.useGlobalPkgs = true; + + + This saves an extra Nixpkgs evaluation, adds consistency, and removes the + dependency on NIX_PATH, which is otherwise used for + importing Nixpkgs. + +
nix-darwin module diff --git a/modules/misc/news.nix b/modules/misc/news.nix index 0f0c2ac1..cc2892e8 100644 --- a/modules/misc/news.nix +++ b/modules/misc/news.nix @@ -1351,6 +1351,21 @@ in '--description', '--on-event', and more. ''; } + + { + time = "2020-03-07T13:11:43+00:00"; + condition = hostPlatform.isLinux; + message = '' + The NixOS module has a new option: 'home-manager.useGlobalPkgs'. + + This enables using the system configuration's 'pkgs' + argument in Home Manager. + + To learn more, see the installation section of the manual + + https://rycee.gitlab.io/home-manager/#sec-install-nixos-module + ''; + } ]; }; } diff --git a/modules/modules.nix b/modules/modules.nix index 9d741016..263c1176 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -5,6 +5,9 @@ # Whether to enable module type checking. , check ? true + +# If disabled, the pkgs attribute passed to this function is used instead. +, useNixpkgsModule ? true }: with lib; @@ -27,7 +30,7 @@ let (loadModule ./misc/gtk.nix { }) (loadModule ./misc/lib.nix { }) (loadModule ./misc/news.nix { }) - (loadModule ./misc/nixpkgs.nix { }) + (loadModule ./misc/nixpkgs.nix { condition = useNixpkgsModule; }) (loadModule ./misc/numlock.nix { condition = hostPlatform.isLinux; }) (loadModule ./misc/pam.nix { }) (loadModule ./misc/qt.nix { }) @@ -170,11 +173,14 @@ let modules = map (getAttr "file") (filter (getAttr "condition") allModules); pkgsModule = { - config._module.args.baseModules = modules; - config._module.args.pkgs = lib.mkDefault pkgs; - config._module.check = check; - config.lib = lib.hm; - config.nixpkgs.system = mkDefault pkgs.system; + config = { + _module.args.baseModules = modules; + _module.args.pkgs = lib.mkDefault pkgs; + _module.check = check; + lib = lib.hm; + } // optionalAttrs useNixpkgsModule { + nixpkgs.system = mkDefault pkgs.system; + }; }; in diff --git a/nixos/default.nix b/nixos/default.nix index f4e417bd..4f7f1868 100644 --- a/nixos/default.nix +++ b/nixos/default.nix @@ -15,6 +15,7 @@ let imports = import ../modules/modules.nix { inherit pkgs; lib = extendedLib; + useNixpkgsModule = !cfg.useGlobalPkgs; }; config = { @@ -45,6 +46,12 @@ in { option. ''; + useGlobalPkgs = mkEnableOption '' + using the system configuration's pkgs + argument in Home Manager. This disables the Home Manager + options + ''; + backupFileExtension = mkOption { type = types.nullOr types.str; default = null;