aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Berbiche <nic.berbiche@gmail.com>2020-08-27 13:57:56 -0400
committerRobert Helgesson <robert@rycee.net>2020-09-04 15:00:00 +0200
commitbd4c2b06515fb7cdef9dda19bccd47f37aa66324 (patch)
treedb92de3ce6edac2f35859b1dd60a65a424a8680a
parent1f34c048b3b5e6aad099b0a4931752939bbe30e6 (diff)
nix-darwin: add missing options
Add useGlobalPkgs, verbose and backupFileExtension support
-rw-r--r--doc/installation.xml17
-rw-r--r--nix-darwin/default.nix34
2 files changed, 46 insertions, 5 deletions
diff --git a/doc/installation.xml b/doc/installation.xml
index 4c5d1f735bb..3e1f75abb59 100644
--- a/doc/installation.xml
+++ b/doc/installation.xml
@@ -313,5 +313,22 @@ home-manager.useUserPackages = true;
value in the future.
</para>
</note>
+
+ <note>
+ <para>
+ By default, Home Manager uses a private <literal>pkgs</literal> instance
+ that is configured via the <option>home-manager.users.&lt;name&gt;.nixpkgs</option> options.
+ To instead use the global <literal>pkgs</literal> that is configured via
+ the system level <option>nixpkgs</option> options, set
+ </para>
+<programlisting language="nix">
+home-manager.useGlobalPkgs = true;
+</programlisting>
+ <para>
+ This saves an extra Nixpkgs evaluation, adds consistency, and removes the
+ dependency on <envar>NIX_PATH</envar>, which is otherwise used for
+ importing Nixpkgs.
+ </para>
+ </note>
</section>
</chapter>
diff --git a/nix-darwin/default.nix b/nix-darwin/default.nix
index ce6105d4b12..12d02174332 100644
--- a/nix-darwin/default.nix
+++ b/nix-darwin/default.nix
@@ -10,11 +10,12 @@ let
hmModule = types.submoduleWith {
specialArgs = { lib = extendedLib; };
- modules = [(
- {name, ...}: {
+ modules = [
+ ({ name, ... }: {
imports = import ../modules/modules.nix {
inherit pkgs;
lib = extendedLib;
+ useNixpkgsModule = !cfg.useGlobalPkgs;
};
config = {
@@ -24,8 +25,8 @@ let
home.username = config.users.users.${name}.name;
home.homeDirectory = config.users.users.${name}.home;
};
- }
- )];
+ })
+ ];
};
in
@@ -38,6 +39,24 @@ in
<option>users.users.‹name?›.packages</option> option.
'';
+ useGlobalPkgs = mkEnableOption ''
+ using the system configuration's <literal>pkgs</literal>
+ argument in Home Manager. This disables the Home Manager
+ options <option>nixpkgs.*</option>
+ '';
+
+ backupFileExtension = mkOption {
+ type = types.nullOr types.str;
+ default = null;
+ example = "backup";
+ description = ''
+ On activation move existing files by appending the given
+ file extension rather than exiting with an error.
+ '';
+ };
+
+ verbose = mkEnableOption "verbose output on activation";
+
users = mkOption {
type = types.attrsOf hmModule;
default = {};
@@ -77,7 +96,12 @@ in
system.activationScripts.postActivation.text =
concatStringsSep "\n" (mapAttrsToList (username: usercfg: ''
echo Activating home-manager configuration for ${username}
- sudo -u ${username} -i ${usercfg.home.activationPackage}/activate
+ sudo -u ${username} -i ${pkgs.writeShellScript "activation-${username}" ''
+ ${lib.optionalString (cfg.backupFileExtension != null)
+ "export HOME_MANAGER_BACKUP_EXT=${lib.escapeShellArg cfg.backupFileExtension}"}
+ ${lib.optionalString cfg.verbose "export VERBOSE=1"}
+ exec ${usercfg.home.activationPackage}/activate
+ ''}
'') cfg.users);
};
}