{ config , lib , pkgs , ... }: with lib; let cfg = config.my.services.neverest; toml = pkgs.formats.toml { }; in { options.my.services.neverest = { enable = mkEnableOption "neverest"; package = mkPackageOption pkgs "neverest" { }; frequency = mkOption { type = types.str; default = "hourly"; description = '' How often to run neverest when `services.neverest.enable = true`. This value is passed to the systemd timer configuration as the onCalendar option. See {manpage}`systemd.time(7)` for more information about the format. ''; }; settings = mkOption { inherit (toml) type; default = { }; apply = toml.generate "config.toml"; }; }; config = mkIf cfg.enable { home-manager.users.moritz = { xdg.configFile."neverest/config.toml".source = cfg.settings; home.packages = [ cfg.package ]; systemd.user.timers.neverest = { Unit.Description = "Run neverest"; Timer = { OnCalendar = cfg.frequency; Persistent = true; RandomizedDelaySec = "10m"; }; Install.WantedBy = [ "timers.target" ]; }; systemd.user.services.neverest = { Unit = { Description = "CLI to synchronize, backup and restore emails"; }; Service = { # Lower CPU and I/O priority Nice = 19; IOSchedulingClass = "best-effort"; IOSchedulingPriority = 7; IOWeight = 100; ExecStart = '' ${lib.getExe cfg.package} synchronize ''; }; }; }; age.secrets.email = { file = ../../secrets/email.age; owner = "1000"; }; }; }