This commit is contained in:
Robert Helgesson 2020-09-04 16:02:05 +02:00
commit a063b73d5c
No known key found for this signature in database
GPG key ID: 36BDAA14C2797E89
10 changed files with 87 additions and 6 deletions

View file

@ -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>

View file

@ -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

View file

@ -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 { })

View file

@ -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";
};
}

View file

@ -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);
};
}

View file

@ -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
]);
}

View file

@ -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'
'';
};
}

View file

@ -0,0 +1 @@
{ targets-darwin = ./darwin.nix; }