mirror of
https://github.com/nix-community/home-manager.git
synced 2025-11-08 19:46:05 +01:00
home-manager: add backup overwrite option
When using the backupFileExtension option, if the backup file exists, the activation process fails. This adds an option to instead overwrite the old backup instead of failing.
This commit is contained in:
parent
7500458e85
commit
004753ae6b
5 changed files with 21 additions and 8 deletions
|
|
@ -149,6 +149,9 @@ in
|
||||||
if [[ -e "$targetPath" && ! -L "$targetPath" && -n "$HOME_MANAGER_BACKUP_EXT" ]] ; then
|
if [[ -e "$targetPath" && ! -L "$targetPath" && -n "$HOME_MANAGER_BACKUP_EXT" ]] ; then
|
||||||
# The target exists, back it up
|
# The target exists, back it up
|
||||||
backup="$targetPath.$HOME_MANAGER_BACKUP_EXT"
|
backup="$targetPath.$HOME_MANAGER_BACKUP_EXT"
|
||||||
|
if [[ -e "$backup" && -n "$HOME_MANAGER_BACKUP_OVERWRITE" ]]; then
|
||||||
|
run rm $VERBOSE_ARG "$backup"
|
||||||
|
fi
|
||||||
run mv $VERBOSE_ARG "$targetPath" "$backup" || errorEcho "Moving '$targetPath' failed!"
|
run mv $VERBOSE_ARG "$targetPath" "$backup" || errorEcho "Moving '$targetPath' failed!"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -33,8 +33,10 @@ for sourcePath in "$@" ; do
|
||||||
elif [[ ! -L "$targetPath" && -n "$HOME_MANAGER_BACKUP_EXT" ]] ; then
|
elif [[ ! -L "$targetPath" && -n "$HOME_MANAGER_BACKUP_EXT" ]] ; then
|
||||||
# Next, try to move the file to a backup location if configured and possible
|
# Next, try to move the file to a backup location if configured and possible
|
||||||
backup="$targetPath.$HOME_MANAGER_BACKUP_EXT"
|
backup="$targetPath.$HOME_MANAGER_BACKUP_EXT"
|
||||||
if [[ -e "$backup" ]]; then
|
if [[ -e "$backup" && -z "$HOME_MANAGER_BACKUP_OVERWRITE" ]] ; then
|
||||||
collisionErrors+=("Existing file '$backup' would be clobbered by backing up '$targetPath'")
|
collisionErrors+=("Existing file '$backup' would be clobbered by backing up '$targetPath'")
|
||||||
|
elif [[ -e "$backup" && -n "$HOME_MANAGER_BACKUP_OVERWRITE" ]] ; then
|
||||||
|
warnEcho "Existing file '$targetPath' is in the way of '$sourcePath' and '$backup' exists. Backup will be clobbered due to HOME_MANAGER_BACKUP_OVERWRITE=1"
|
||||||
else
|
else
|
||||||
warnEcho "Existing file '$targetPath' is in the way of '$sourcePath', will be moved to '$backup'"
|
warnEcho "Existing file '$targetPath' is in the way of '$sourcePath', will be moved to '$backup'"
|
||||||
fi
|
fi
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@ in
|
||||||
${lib.optionalString (
|
${lib.optionalString (
|
||||||
cfg.backupFileExtension != null
|
cfg.backupFileExtension != null
|
||||||
) "export HOME_MANAGER_BACKUP_EXT=${lib.escapeShellArg cfg.backupFileExtension}"}
|
) "export HOME_MANAGER_BACKUP_EXT=${lib.escapeShellArg cfg.backupFileExtension}"}
|
||||||
|
${lib.optionalString cfg.overwriteBackup "export HOME_MANAGER_BACKUP_OVERWRITE=1"}
|
||||||
${lib.optionalString cfg.verbose "export VERBOSE=1"}
|
${lib.optionalString cfg.verbose "export VERBOSE=1"}
|
||||||
exec ${usercfg.home.activationPackage}/activate --driver-version ${driverVersion} >&2
|
exec ${usercfg.home.activationPackage}/activate --driver-version ${driverVersion} >&2
|
||||||
''}
|
''}
|
||||||
|
|
|
||||||
|
|
@ -91,6 +91,10 @@ in
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
overwriteBackup = mkEnableOption ''
|
||||||
|
forced overwriting of existing backup files when using `backupFileExtension`
|
||||||
|
'';
|
||||||
|
|
||||||
extraSpecialArgs = mkOption {
|
extraSpecialArgs = mkOption {
|
||||||
type = types.attrs;
|
type = types.attrs;
|
||||||
default = { };
|
default = { };
|
||||||
|
|
|
||||||
|
|
@ -7,15 +7,18 @@
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
|
inherit (lib) mkIf;
|
||||||
cfg = config.home-manager;
|
cfg = config.home-manager;
|
||||||
|
|
||||||
serviceEnvironment =
|
serviceEnvironment = lib.mkMerge [
|
||||||
lib.optionalAttrs (cfg.backupFileExtension != null) {
|
(mkIf cfg.verbose { VERBOSE = "1"; })
|
||||||
HOME_MANAGER_BACKUP_EXT = cfg.backupFileExtension;
|
|
||||||
}
|
|
||||||
// lib.optionalAttrs cfg.verbose { VERBOSE = "1"; };
|
|
||||||
|
|
||||||
|
(mkIf (cfg.backupFileExtension != null) {
|
||||||
|
HOME_MANAGER_BACKUP_EXT = cfg.backupFileExtension;
|
||||||
|
})
|
||||||
|
|
||||||
|
(mkIf cfg.overwriteBackup { HOME_MANAGER_BACKUP_OVERWRITE = "1"; })
|
||||||
|
];
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [ ./common.nix ];
|
imports = [ ./common.nix ];
|
||||||
|
|
@ -41,7 +44,7 @@ in
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
(lib.mkIf (cfg.users != { }) {
|
(mkIf (cfg.users != { }) {
|
||||||
systemd.services = lib.mapAttrs' (
|
systemd.services = lib.mapAttrs' (
|
||||||
_: usercfg:
|
_: usercfg:
|
||||||
let
|
let
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue