mirror of
https://github.com/nix-community/home-manager.git
synced 2026-01-11 09:29:41 +08: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:
committed by
Austin Horstman
parent
7500458e85
commit
004753ae6b
@@ -149,6 +149,9 @@ in
|
||||
if [[ -e "$targetPath" && ! -L "$targetPath" && -n "$HOME_MANAGER_BACKUP_EXT" ]] ; then
|
||||
# The target exists, back it up
|
||||
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!"
|
||||
fi
|
||||
|
||||
|
||||
@@ -33,8 +33,10 @@ for sourcePath in "$@" ; do
|
||||
elif [[ ! -L "$targetPath" && -n "$HOME_MANAGER_BACKUP_EXT" ]] ; then
|
||||
# Next, try to move the file to a backup location if configured and possible
|
||||
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'")
|
||||
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
|
||||
warnEcho "Existing file '$targetPath' is in the way of '$sourcePath', will be moved to '$backup'"
|
||||
fi
|
||||
|
||||
@@ -28,6 +28,7 @@ in
|
||||
${lib.optionalString (
|
||||
cfg.backupFileExtension != null
|
||||
) "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"}
|
||||
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 {
|
||||
type = types.attrs;
|
||||
default = { };
|
||||
|
||||
@@ -7,15 +7,18 @@
|
||||
}:
|
||||
|
||||
let
|
||||
|
||||
inherit (lib) mkIf;
|
||||
cfg = config.home-manager;
|
||||
|
||||
serviceEnvironment =
|
||||
lib.optionalAttrs (cfg.backupFileExtension != null) {
|
||||
HOME_MANAGER_BACKUP_EXT = cfg.backupFileExtension;
|
||||
}
|
||||
// lib.optionalAttrs cfg.verbose { VERBOSE = "1"; };
|
||||
serviceEnvironment = lib.mkMerge [
|
||||
(mkIf cfg.verbose { VERBOSE = "1"; })
|
||||
|
||||
(mkIf (cfg.backupFileExtension != null) {
|
||||
HOME_MANAGER_BACKUP_EXT = cfg.backupFileExtension;
|
||||
})
|
||||
|
||||
(mkIf cfg.overwriteBackup { HOME_MANAGER_BACKUP_OVERWRITE = "1"; })
|
||||
];
|
||||
in
|
||||
{
|
||||
imports = [ ./common.nix ];
|
||||
@@ -41,7 +44,7 @@ in
|
||||
];
|
||||
};
|
||||
}
|
||||
(lib.mkIf (cfg.users != { }) {
|
||||
(mkIf (cfg.users != { }) {
|
||||
systemd.services = lib.mapAttrs' (
|
||||
_: usercfg:
|
||||
let
|
||||
|
||||
Reference in New Issue
Block a user