mirror of
https://github.com/nix-community/home-manager.git
synced 2024-12-14 11:57:55 +00:00
home-environment: fix activation on new style profiles
When using the new style profiles we get conflicts when trying to replace the old `home-path` derivation. To avoid this conflict we delete the old `home-path` before the install. Unfortunately, `nix profile` does not yet have a equivalent for `nix-env --set` and we have to do this hackish workaround. See https://github.com/NixOS/nix/issues/6349 for the associated issue in Nix. Fixes #2848
This commit is contained in:
parent
c728307482
commit
ccc9164b76
1 changed files with 17 additions and 2 deletions
|
@ -592,22 +592,37 @@ in
|
|||
''
|
||||
else
|
||||
''
|
||||
function nixReplaceProfile() {
|
||||
local oldNix="$(which nix)"
|
||||
|
||||
nix profile list \
|
||||
| { grep 'home-manager-path$' || test $? = 1; } \
|
||||
| awk -F ' ' '{ print $4 }' \
|
||||
| cut -d ' ' -f 4 \
|
||||
| xargs -t $DRY_RUN_CMD nix profile remove $VERBOSE_ARG
|
||||
|
||||
$DRY_RUN_CMD $oldNix profile install $1
|
||||
}
|
||||
|
||||
if [[ -e "$nixProfilePath"/manifest.json ]] ; then
|
||||
INSTALL_CMD="nix profile install"
|
||||
INSTALL_CMD_ACTUAL="nixReplaceProfile"
|
||||
LIST_CMD="nix profile list"
|
||||
REMOVE_CMD_SYNTAX='nix profile remove {number | store path}'
|
||||
else
|
||||
INSTALL_CMD="nix-env -i"
|
||||
INSTALL_CMD_ACTUAL="$DRY_RUN_CMD nix-env -i"
|
||||
LIST_CMD="nix-env -q"
|
||||
REMOVE_CMD_SYNTAX='nix-env -e {package name}'
|
||||
fi
|
||||
|
||||
if ! $DRY_RUN_CMD $INSTALL_CMD ${cfg.path} ; then
|
||||
if ! $INSTALL_CMD_ACTUAL ${cfg.path} ; then
|
||||
echo
|
||||
_iError $'Oops, Nix failed to install your new Home Manager profile!\n\nPerhaps there is a conflict with a package that was installed using\n"%s"? Try running\n\n %s\n\nand if there is a conflicting package you can remove it with\n\n %s\n\nThen try activating your Home Manager configuration again.' "$INSTALL_CMD" "$LIST_CMD" "$REMOVE_CMD_SYNTAX"
|
||||
exit 1
|
||||
fi
|
||||
unset INSTALL_CMD LIST_CMD REMOVE_CMD_SYNTAX
|
||||
unset -f nixReplaceProfile
|
||||
unset INSTALL_CMD INSTALL_CMD_ACTUAL LIST_CMD REMOVE_CMD_SYNTAX
|
||||
''
|
||||
);
|
||||
|
||||
|
|
Loading…
Reference in a new issue