home-manager.autoUpgrade: add module

Home Manager upgrade service that periodically updates your Nix
channels before running `home-manager switch`.
This commit is contained in:
pinage404 2021-07-05 22:59:19 +02:00 committed by Robert Helgesson
parent fb939d1acf
commit 418ae217dd
No known key found for this signature in database
GPG key ID: 36BDAA14C2797E89
7 changed files with 99 additions and 0 deletions

3
.github/CODEOWNERS vendored
View file

@ -292,6 +292,9 @@
/modules/services/gromit-mpx.nix @pjones
/tests/modules/services/gromit-mpx @pjones
/modules/services/home-manager-auto-upgrade.nix @pinage404
/tests/modules/services/home-manager-auto-upgrade @pinage404
/modules/services/hound.nix @adisbladis
/modules/services/imapnotify.nix @nickhu

View file

@ -193,4 +193,10 @@
githubId = 9267430;
name = "Philipp Mildenberger";
};
pinage404 = {
name = "pinage404";
email = "pinage404@gmail.com";
github = "pinage404";
githubId = 6325757;
};
}

View file

@ -185,6 +185,7 @@ let
./services/gpg-agent.nix
./services/grobi.nix
./services/gromit-mpx.nix
./services/home-manager-auto-upgrade.nix
./services/hound.nix
./services/imapnotify.nix
./services/kanshi.nix

View file

@ -0,0 +1,69 @@
{ config, lib, pkgs, ... }:
let
cfg = config.services.home-manager.autoUpgrade;
homeManagerPackage = pkgs.callPackage ../../home-manager {
path = config.programs.home-manager.path;
};
in {
meta.maintainers = [ lib.hm.maintainers.pinage404 ];
options = {
services.home-manager.autoUpgrade = {
enable = lib.mkEnableOption ''
the Home Manager upgrade service that periodically updates your Nix
channels before running <code>home-manager switch</code>'';
frequency = lib.mkOption {
type = lib.types.str;
example = "weekly";
description = ''
The interval at which the Home Manager auto upgrade is run.
This value is passed to the systemd timer configuration
as the <code>OnCalendar</code> option.
The format is described in
<citerefentry>
<refentrytitle>systemd.time</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry>.
'';
};
};
};
config = lib.mkIf cfg.enable {
assertions = [
(lib.hm.assertions.assertPlatform "services.home-manager.autoUpgrade" pkgs
lib.platforms.linux)
];
systemd.user = {
timers.home-manager-auto-upgrade = {
Unit.Description = "Home Manager upgrade timer";
Install.WantedBy = [ "timers.target" ];
Timer = {
OnCalendar = cfg.frequency;
Unit = "home-manager-auto-upgrade.service";
Persistent = true;
};
};
services.home-manager-auto-upgrade = {
Unit.Description = "Home Manager upgrade";
Service.ExecStart = toString
(pkgs.writeShellScript "home-manager-auto-upgrade" ''
echo "Update Nix's channels"
${pkgs.nix}/bin/nix-channel --update
echo "Upgrade Home Manager"
${homeManagerPackage}/bin/home-manager switch
'');
};
};
};
}

View file

@ -143,6 +143,7 @@ import nmt {
./modules/services/git-sync
./modules/services/gpg-agent
./modules/services/gromit-mpx
./modules/services/home-manager-auto-upgrade
./modules/services/kanshi
./modules/services/lieer
./modules/services/pantalaimon

View file

@ -0,0 +1,18 @@
{ config, ... }:
{
config = {
services.home-manager.autoUpgrade = {
enable = true;
frequency = "00:00";
};
nmt.script = ''
serviceFile=home-files/.config/systemd/user/home-manager-auto-upgrade.service
assertFileExists $serviceFile
timerFile=home-files/.config/systemd/user/home-manager-auto-upgrade.timer
assertFileExists $timerFile
'';
};
}

View file

@ -0,0 +1 @@
{ home-manager-auto-upgrade-basic-configuration = ./basic-configuration.nix; }