home-manager: point <home-manager> to project root
Before this path would point to the modules path. Using the project root instead makes it possible to set `<home-manager>` to point to a downloadable archive of Home Manager. This should make it significantly easier to install and keep Home Manager up to date. To match this change we also deprecate the Home Manager option programs.home-manager.modulesPath and instead ask users to use programs.home-manager.path
This commit is contained in:
parent
5605e46acb
commit
bf3a8c6383
16
default.nix
16
default.nix
|
@ -1,2 +1,14 @@
|
||||||
# Simply defer to the home-manager script derivation.
|
{ pkgs ? import <nixpkgs> {} }:
|
||||||
import ./home-manager
|
|
||||||
|
rec {
|
||||||
|
home-manager = import ./home-manager {
|
||||||
|
inherit pkgs;
|
||||||
|
path = ./.;
|
||||||
|
};
|
||||||
|
|
||||||
|
install =
|
||||||
|
pkgs.runCommand
|
||||||
|
"home-manager-install"
|
||||||
|
{ propagatedBuildInputs = [ home-manager ]; }
|
||||||
|
"";
|
||||||
|
}
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
{ pkgs
|
{ pkgs
|
||||||
|
|
||||||
# Extra path to the Home Manager modules. If set then this path will
|
# Extra path to Home Manager. If set then this path will be tried
|
||||||
# be tried before `$HOME/.config/nixpkgs/home-manager/modules` and
|
# before `$HOME/.config/nixpkgs/home-manager` and
|
||||||
# `$HOME/.nixpkgs/home-manager/modules`.
|
# `$HOME/.nixpkgs/home-manager`.
|
||||||
, modulesPath ? null
|
, path ? null
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
|
|
||||||
modulesPathStr = if modulesPath == null then "" else modulesPath;
|
pathStr = if path == null then "" else path;
|
||||||
|
|
||||||
in
|
in
|
||||||
|
|
||||||
|
@ -24,8 +24,7 @@ pkgs.stdenv.mkDerivation {
|
||||||
--subst-var-by bash "${pkgs.bash}" \
|
--subst-var-by bash "${pkgs.bash}" \
|
||||||
--subst-var-by coreutils "${pkgs.coreutils}" \
|
--subst-var-by coreutils "${pkgs.coreutils}" \
|
||||||
--subst-var-by less "${pkgs.less}" \
|
--subst-var-by less "${pkgs.less}" \
|
||||||
--subst-var-by MODULES_PATH '${modulesPathStr}' \
|
--subst-var-by HOME_MANAGER_PATH '${pathStr}'
|
||||||
--subst-var-by HOME_MANAGER_EXPR_PATH "${./home-manager.nix}"
|
|
||||||
'';
|
'';
|
||||||
|
|
||||||
meta = with pkgs.stdenv.lib; {
|
meta = with pkgs.stdenv.lib; {
|
||||||
|
|
|
@ -40,13 +40,13 @@ function setConfigFile() {
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
function setHomeManagerModulesPath() {
|
function setHomeManagerNixPath() {
|
||||||
local modulesPath
|
local path
|
||||||
for modulesPath in "@MODULES_PATH@" \
|
for path in "@HOME_MANAGER_PATH@" \
|
||||||
"$HOME/.config/nixpkgs/home-manager/modules" \
|
"$HOME/.config/nixpkgs/home-manager" \
|
||||||
"$HOME/.nixpkgs/home-manager/modules" ; do
|
"$HOME/.nixpkgs/home-manager" ; do
|
||||||
if [[ -e "$modulesPath" ]] ; then
|
if [[ -e "$path" || "$path" =~ ^https?:// ]] ; then
|
||||||
export NIX_PATH="$NIX_PATH${NIX_PATH:+:}home-manager=$modulesPath"
|
export NIX_PATH="$NIX_PATH${NIX_PATH:+:}home-manager=$path"
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
@ -54,7 +54,7 @@ function setHomeManagerModulesPath() {
|
||||||
|
|
||||||
function doBuildAttr() {
|
function doBuildAttr() {
|
||||||
setConfigFile
|
setConfigFile
|
||||||
setHomeManagerModulesPath
|
setHomeManagerNixPath
|
||||||
|
|
||||||
local extraArgs="$*"
|
local extraArgs="$*"
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ function doBuildAttr() {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
nix-build \
|
nix-build \
|
||||||
"@HOME_MANAGER_EXPR_PATH@" \
|
"<home-manager/home-manager/home-manager.nix>" \
|
||||||
$extraArgs \
|
$extraArgs \
|
||||||
--argstr confPath "$HOME_MANAGER_CONFIG" \
|
--argstr confPath "$HOME_MANAGER_CONFIG" \
|
||||||
--argstr confAttr "$HOME_MANAGER_CONFIG_ATTRIBUTE"
|
--argstr confAttr "$HOME_MANAGER_CONFIG_ATTRIBUTE"
|
||||||
|
|
|
@ -9,7 +9,7 @@ with pkgs.lib;
|
||||||
|
|
||||||
let
|
let
|
||||||
|
|
||||||
env = import <home-manager> {
|
env = import <home-manager/modules> {
|
||||||
configuration =
|
configuration =
|
||||||
let
|
let
|
||||||
conf = import confPath;
|
conf = import confPath;
|
||||||
|
|
|
@ -370,6 +370,46 @@ in
|
||||||
chosen version.
|
chosen version.
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
time = "2017-10-23T22:54:33+00:00";
|
||||||
|
condition = config.programs.home-manager.modulesPath != null;
|
||||||
|
message = ''
|
||||||
|
The 'programs.home-manager.modulesPath' option is now
|
||||||
|
deprecated and will be removed on November 24, 2017. Please
|
||||||
|
use the option 'programs.home-manager.path' instead.
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
time = "2017-10-23T23:10:29+00:00";
|
||||||
|
condition = !config.programs.home-manager.enable;
|
||||||
|
message = ''
|
||||||
|
Unfortunately, due to some internal restructuring it is no
|
||||||
|
longer possible to install the home-manager command when
|
||||||
|
having
|
||||||
|
|
||||||
|
home-manager = import ./home-manager { inherit pkgs; };
|
||||||
|
|
||||||
|
in the '~/.config/nixpkgs/config.nix' package override
|
||||||
|
section. Attempting to use the above override will now
|
||||||
|
result in the error "cannot coerce a set to a string".
|
||||||
|
|
||||||
|
To resolve this please delete the override from the
|
||||||
|
'config.nix' file and either link the Home Manager overlay
|
||||||
|
|
||||||
|
$ ln -s ~/.config/nixpkgs/home-manager/overlay.nix \
|
||||||
|
~/.config/nixpkgs/overlays/home-manager.nix
|
||||||
|
|
||||||
|
or add
|
||||||
|
|
||||||
|
programs.home-manager.enable = true;
|
||||||
|
|
||||||
|
to your Home Manager configuration. The latter is
|
||||||
|
recommended as the home-manager tool then is updated
|
||||||
|
automatically whenever you do a switch.
|
||||||
|
'';
|
||||||
|
}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,19 @@ in
|
||||||
programs.home-manager = {
|
programs.home-manager = {
|
||||||
enable = mkEnableOption "Home Manager";
|
enable = mkEnableOption "Home Manager";
|
||||||
|
|
||||||
|
path = mkOption {
|
||||||
|
type = types.nullOr types.str;
|
||||||
|
default = null;
|
||||||
|
example = "$HOME/devel/home-manager";
|
||||||
|
description = ''
|
||||||
|
The default path to use for Home Manager. If this path does
|
||||||
|
not exist then
|
||||||
|
<filename>$HOME/.config/nixpkgs/home-manager</filename> and
|
||||||
|
<filename>$HOME/.nixpkgs/home-manager</filename> will be
|
||||||
|
attempted.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
modulesPath = mkOption {
|
modulesPath = mkOption {
|
||||||
type = types.nullOr types.str;
|
type = types.nullOr types.str;
|
||||||
default = null;
|
default = null;
|
||||||
|
@ -25,17 +38,28 @@ in
|
||||||
path does not exist then
|
path does not exist then
|
||||||
<filename>$HOME/.config/nixpkgs/home-manager/modules</filename>
|
<filename>$HOME/.config/nixpkgs/home-manager/modules</filename>
|
||||||
and <filename>$HOME/.nixpkgs/home-manager/modules</filename>
|
and <filename>$HOME/.nixpkgs/home-manager/modules</filename>
|
||||||
will be attempted.
|
will be attempted. DEPRECATED: Use
|
||||||
|
<varname>programs.home-manager.path</varname> instead.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
|
assertions = [{
|
||||||
|
assertion = cfg.path == null || cfg.modulesPath == null;
|
||||||
|
message = "Cannot simultaneously use "
|
||||||
|
+ "'programs.home-manager.path' and "
|
||||||
|
+ "'programs.home-manager.modulesPath'.";
|
||||||
|
}];
|
||||||
|
|
||||||
home.packages = [
|
home.packages = [
|
||||||
(import ../../home-manager {
|
(import ../../home-manager {
|
||||||
inherit pkgs;
|
inherit pkgs;
|
||||||
inherit (cfg) modulesPath;
|
path =
|
||||||
|
if cfg.modulesPath != null
|
||||||
|
then "$(dirname ${cfg.modulesPath})"
|
||||||
|
else cfg.path;
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue