mirror of
https://github.com/nix-community/home-manager.git
synced 2025-11-08 19:46:05 +01:00
home-manager-auto-upgrade: add flake support (#8053)
Adds the ability for the auto-upgrade service to update a Nix flake instead of Nix channels. This is controlled by a new `useFlake` boolean option. When enabled, the service will run `nix flake update` in the directory specified by the `flakeDir` option. `flakeDir` defaults to the standard Home Manager configuration directory (`~/.config/home-manager`), making this feature work out-of-the-box for most users. The path is passed to the upgrade script via an environment variable in the systemd service unit.
This commit is contained in:
parent
2a9969b39c
commit
255b6a0ef2
4 changed files with 70 additions and 7 deletions
12
modules/misc/news/2025/10/2025-10-25_15-45-39.nix
Normal file
12
modules/misc/news/2025/10/2025-10-25_15-45-39.nix
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
time = "2025-10-25T14:45:39+00:00";
|
||||||
|
condition = true;
|
||||||
|
message = ''
|
||||||
|
The home-manager auto-upgrade service now supports updating Nix flakes.
|
||||||
|
|
||||||
|
Enable this by setting `services.home-manager.autoUpgrade.useFlake = true;`.
|
||||||
|
|
||||||
|
The flake directory can be configured with `services.home-manager.autoUpgrade.flakeDir`,
|
||||||
|
which defaults to the configured XDG config home (typically `~/.config/home-manager`).
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
|
@ -15,7 +15,23 @@ let
|
||||||
|
|
||||||
autoUpgradeApp = pkgs.writeShellApplication {
|
autoUpgradeApp = pkgs.writeShellApplication {
|
||||||
name = "home-manager-auto-upgrade";
|
name = "home-manager-auto-upgrade";
|
||||||
text = ''
|
text =
|
||||||
|
if cfg.useFlake then
|
||||||
|
''
|
||||||
|
set -e
|
||||||
|
if [[ ! -f "$FLAKE_DIR/flake.nix" ]]; then
|
||||||
|
echo "No flake.nix found in $FLAKE_DIR." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "Changing to flake directory $FLAKE_DIR"
|
||||||
|
cd "$FLAKE_DIR"
|
||||||
|
echo "Update flake inputs"
|
||||||
|
nix flake update
|
||||||
|
echo "Upgrade Home Manager"
|
||||||
|
home-manager switch --flake .
|
||||||
|
''
|
||||||
|
else
|
||||||
|
''
|
||||||
echo "Update Nix's channels"
|
echo "Update Nix's channels"
|
||||||
nix-channel --update
|
nix-channel --update
|
||||||
echo "Upgrade Home Manager"
|
echo "Upgrade Home Manager"
|
||||||
|
|
@ -47,6 +63,20 @@ in
|
||||||
{manpage}`systemd.time(7)`.
|
{manpage}`systemd.time(7)`.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
useFlake = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "Whether to use 'nix flake update' instead of 'nix-channel --update'.";
|
||||||
|
};
|
||||||
|
|
||||||
|
flakeDir = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
default = "${config.xdg.configHome}/home-manager";
|
||||||
|
defaultText = lib.literalExpression ''"''${config.xdg.configHome}/home-manager"'';
|
||||||
|
example = "/home/user/dotfiles";
|
||||||
|
description = "The directory of the flake to update.";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -70,7 +100,10 @@ in
|
||||||
|
|
||||||
services.home-manager-auto-upgrade = {
|
services.home-manager-auto-upgrade = {
|
||||||
Unit.Description = "Home Manager upgrade";
|
Unit.Description = "Home Manager upgrade";
|
||||||
Service.ExecStart = "${autoUpgradeApp}/bin/home-manager-auto-upgrade";
|
Service = {
|
||||||
|
ExecStart = "${autoUpgradeApp}/bin/home-manager-auto-upgrade";
|
||||||
|
Environment = lib.mkIf cfg.useFlake [ "FLAKE_DIR=${cfg.flakeDir}" ];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -2,4 +2,5 @@
|
||||||
|
|
||||||
lib.optionalAttrs pkgs.stdenv.hostPlatform.isLinux {
|
lib.optionalAttrs pkgs.stdenv.hostPlatform.isLinux {
|
||||||
home-manager-auto-upgrade-basic-configuration = ./basic-configuration.nix;
|
home-manager-auto-upgrade-basic-configuration = ./basic-configuration.nix;
|
||||||
|
home-manager-auto-upgrade-flake-configuration = ./flake-configuration.nix;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
{
|
||||||
|
services.home-manager.autoUpgrade = {
|
||||||
|
enable = true;
|
||||||
|
frequency = "daily";
|
||||||
|
useFlake = true;
|
||||||
|
flakeDir = "/tmp/my-flake";
|
||||||
|
};
|
||||||
|
|
||||||
|
nmt.script = ''
|
||||||
|
serviceFile="home-files/.config/systemd/user/home-manager-auto-upgrade.service"
|
||||||
|
assertFileExists "$serviceFile"
|
||||||
|
assertFileRegex "$serviceFile" "FLAKE_DIR=/tmp/my-flake"
|
||||||
|
|
||||||
|
scriptPath=$(grep -oP 'ExecStart=\K.+' "$TESTED/$serviceFile")
|
||||||
|
assertFileRegex "$scriptPath" "nix flake update"
|
||||||
|
'';
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue