aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Helgesson <robert@rycee.net>2020-09-04 16:02:05 +0200
committerRobert Helgesson <robert@rycee.net>2020-09-04 16:02:17 +0200
commita063b73d5cf2d741f5f873897974d1a4c3e36d3d (patch)
tree535b273147ad5a6832b9b41c5400e5e60cd9706e
parentbfc66df13dc941361f5af92eaf88f2ea5db39722 (diff)
parentd3aee544b686a72b2bb7eeb379f72c6b6b2665b7 (diff)
Merge PR #1460
-rw-r--r--doc/installation.xml17
-rw-r--r--flake.nix2
-rw-r--r--modules/modules.nix1
-rw-r--r--modules/targets/darwin.nix14
-rw-r--r--nix-darwin/default.nix34
-rw-r--r--tests/default.nix4
-rw-r--r--tests/modules/targets-darwin/darwin.nix20
-rw-r--r--tests/modules/targets-darwin/default.nix1
-rw-r--r--tests/modules/targets-linux/default.nix (renamed from tests/modules/targets/default.nix)0
-rw-r--r--tests/modules/targets-linux/generic-linux.nix (renamed from tests/modules/targets/generic-linux.nix)0
10 files changed, 87 insertions, 6 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/flake.nix b/flake.nix
index 697f66ac8e6..2d53d603a61 100644
--- a/flake.nix
+++ b/flake.nix
@@ -4,6 +4,8 @@
outputs = { self, nixpkgs }: rec {
nixosModules.home-manager = import ./nixos;
+ darwinModules.home-manager = import ./nix-darwin;
+
lib = {
homeManagerConfiguration = { configuration, system, homeDirectory
, username
diff --git a/modules/modules.nix b/modules/modules.nix
index b4eb4d4027c..08c978b177d 100644
--- a/modules/modules.nix
+++ b/modules/modules.nix
@@ -189,6 +189,7 @@ let
(loadModule ./services/xscreensaver.nix { })
(loadModule ./services/xsuspender.nix { condition = hostPlatform.isLinux; })
(loadModule ./systemd.nix { })
+ (loadModule ./targets/darwin.nix { condition = hostPlatform.isDarwin; })
(loadModule ./targets/generic-linux.nix { condition = hostPlatform.isLinux; })
(loadModule ./xcursor.nix { })
(loadModule ./xresources.nix { })
diff --git a/modules/targets/darwin.nix b/modules/targets/darwin.nix
new file mode 100644
index 00000000000..0d434234bbb
--- /dev/null
+++ b/modules/targets/darwin.nix
@@ -0,0 +1,14 @@
+{ config, lib, pkgs, ... }:
+
+{
+ config = lib.mkIf pkgs.stdenv.hostPlatform.isDarwin {
+ # Install MacOS applications to the user environment.
+ home.file."Applications/Home Manager Apps".source = let
+ apps = pkgs.buildEnv {
+ name = "home-manager-applications";
+ paths = config.home.packages;
+ pathsToLink = "/Applications";
+ };
+ in "${apps}/Applications";
+ };
+}
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);
};
}
diff --git a/tests/default.nix b/tests/default.nix
index 02afd5a2518..b44e4185fcc 100644
--- a/tests/default.nix
+++ b/tests/default.nix
@@ -69,6 +69,8 @@ import nmt {
./modules/programs/zplug
./modules/programs/zsh
./modules/xresources
+ ] ++ lib.optionals pkgs.stdenv.hostPlatform.isDarwin [
+ ./modules/targets-darwin
] ++ lib.optionals pkgs.stdenv.hostPlatform.isLinux [
./meta # Suffices to run on one platform.
./modules/misc/debug
@@ -93,6 +95,6 @@ import nmt {
./modules/services/window-managers/i3
./modules/services/window-managers/sway
./modules/systemd
- ./modules/targets
+ ./modules/targets-linux
]);
}
diff --git a/tests/modules/targets-darwin/darwin.nix b/tests/modules/targets-darwin/darwin.nix
new file mode 100644
index 00000000000..511ae87fd98
--- /dev/null
+++ b/tests/modules/targets-darwin/darwin.nix
@@ -0,0 +1,20 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+
+ darwinTestApp = pkgs.runCommandLocal "target-darwin-example-app" { } ''
+ mkdir -p $out/Applications
+ touch $out/Applications/example-app
+ '';
+
+in {
+ config = {
+ home.packages = [ darwinTestApp ];
+
+ nmt.script = ''
+ assertFileExists 'home-files/Applications/Home Manager Apps/example-app'
+ '';
+ };
+}
diff --git a/tests/modules/targets-darwin/default.nix b/tests/modules/targets-darwin/default.nix
new file mode 100644
index 00000000000..479f586eef3
--- /dev/null
+++ b/tests/modules/targets-darwin/default.nix
@@ -0,0 +1 @@
+{ targets-darwin = ./darwin.nix; }
diff --git a/tests/modules/targets/default.nix b/tests/modules/targets-linux/default.nix
index e13617ccb74..e13617ccb74 100644
--- a/tests/modules/targets/default.nix
+++ b/tests/modules/targets-linux/default.nix
diff --git a/tests/modules/targets/generic-linux.nix b/tests/modules/targets-linux/generic-linux.nix
index d9bb85b651a..d9bb85b651a 100644
--- a/tests/modules/targets/generic-linux.nix
+++ b/tests/modules/targets-linux/generic-linux.nix