diff --git a/modules/modules.nix b/modules/modules.nix index aa1d2e744..cdfb90804 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -394,6 +394,7 @@ let ./services/taffybar.nix ./services/tahoe-lafs.nix ./services/taskwarrior-sync.nix + ./services/tldr-update.nix ./services/trayer.nix ./services/trayscale.nix ./services/twmn.nix diff --git a/modules/programs/tealdeer.nix b/modules/programs/tealdeer.nix index 6cf1160ec..6efc5aa3a 100644 --- a/modules/programs/tealdeer.nix +++ b/modules/programs/tealdeer.nix @@ -80,6 +80,11 @@ in { See for more information. ''; }; + + enableAutoUpdates = mkEnableOption "Auto updates" // { + default = true; + example = false; + }; }; config = mkIf cfg.enable { @@ -89,5 +94,10 @@ in { mkIf (cfg.settings != null && cfg.settings != { }) { source = tomlFormat.generate "tealdeer-config" cfg.settings; }; + + services.tldr-update = mkIf cfg.enableAutoUpdates { + enable = true; + package = pkgs.tealdeer; + }; }; } diff --git a/modules/services/tldr-update.nix b/modules/services/tldr-update.nix new file mode 100644 index 000000000..47be1ab24 --- /dev/null +++ b/modules/services/tldr-update.nix @@ -0,0 +1,50 @@ +{ config, lib, pkgs, ... }: +let cfg = config.services.tldr-update; +in { + meta.maintainers = [ lib.maintainers.perchun ]; + + options.services.tldr-update = { + enable = lib.mkEnableOption '' + Automatic updates for the tldr CLI + ''; + + package = lib.mkPackageOption pkgs "tldr" { example = "tlrc"; }; + + period = lib.mkOption { + type = lib.types.str; + default = "weekly"; + description = '' + Systemd timer period to create for scheduled {command}`tldr --update`. + + The format is described in {manpage}`systemd.time(7)`. + ''; + }; + }; + + config = lib.mkIf cfg.enable { + systemd.user.services.tldr-update = { + Unit = { + Description = "Update tldr CLI cache"; + Documentation = "https://tldr.sh/"; + }; + + Service = { + Type = "oneshot"; + ExecStart = '' + ${lib.getExe cfg.package} --update + ''; + }; + }; + + systemd.user.timers.tldr-update = { + Unit.Description = "Update tldr CLI cache"; + + Timer = { + OnCalendar = cfg.period; + Persistent = true; + }; + + Install.WantedBy = [ "timers.target" ]; + }; + }; +} diff --git a/tests/default.nix b/tests/default.nix index 98531f856..792c99951 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -370,6 +370,7 @@ in import nmtSrc { ./modules/services/swayosd ./modules/services/sxhkd ./modules/services/syncthing/linux + ./modules/services/tldr-update ./modules/services/trayer ./modules/services/trayscale ./modules/services/twmn diff --git a/tests/modules/services/tldr-update/default.nix b/tests/modules/services/tldr-update/default.nix new file mode 100644 index 000000000..f67047037 --- /dev/null +++ b/tests/modules/services/tldr-update/default.nix @@ -0,0 +1 @@ +{ tldr-update = ./tldr-update.nix; } diff --git a/tests/modules/services/tldr-update/tldr-update.nix b/tests/modules/services/tldr-update/tldr-update.nix new file mode 100644 index 000000000..90daeed12 --- /dev/null +++ b/tests/modules/services/tldr-update/tldr-update.nix @@ -0,0 +1,21 @@ +{ config, ... }: + +{ + config = { + home.stateVersion = "24.11"; + + services.tldr-update = { + enable = true; + package = config.lib.test.mkStubPackage { outPath = "@tldr@"; }; + period = "monthly"; + }; + + nmt.script = '' + serviceFile=$(normalizeStorePaths home-files/.config/systemd/user/tldr-update.service) + assertFileContent "$serviceFile" ${./tldr-update.service} + + timerFile=$(normalizeStorePaths home-files/.config/systemd/user/tldr-update.timer) + assertFileContent "$timerFile" ${./tldr-update.timer} + ''; + }; +} diff --git a/tests/modules/services/tldr-update/tldr-update.service b/tests/modules/services/tldr-update/tldr-update.service new file mode 100644 index 000000000..69adaebac --- /dev/null +++ b/tests/modules/services/tldr-update/tldr-update.service @@ -0,0 +1,8 @@ +[Service] +ExecStart=@tldr@/bin/dummy --update + +Type=oneshot + +[Unit] +Description=Update tldr CLI cache +Documentation=https://tldr.sh/ diff --git a/tests/modules/services/tldr-update/tldr-update.timer b/tests/modules/services/tldr-update/tldr-update.timer new file mode 100644 index 000000000..26b6326a0 --- /dev/null +++ b/tests/modules/services/tldr-update/tldr-update.timer @@ -0,0 +1,9 @@ +[Install] +WantedBy=timers.target + +[Timer] +OnCalendar=monthly +Persistent=true + +[Unit] +Description=Update tldr CLI cache