{ config, lib, ... }: let cfg = config.services.nix-cache-login; in { options.services.nix-cache-login = { enable = lib.mkEnableOption "nix-cache-login automatic token refresh"; package = lib.mkOption { type = lib.types.package; description = "The nix-cache-login package to use."; }; refreshInterval = lib.mkOption { type = lib.types.ints.positive; default = 900; description = '' How often to attempt token refresh, in seconds. If no valid session exists, the service logs an error and retries on the next interval. Run {command}`nix-cache-login` to log in. ''; example = 1800; }; }; config = lib.mkIf cfg.enable { nix.settings.netrc-file = "${config.xdg.configHome}/nix/netrc"; home.packages = [ cfg.package ]; systemd.user.services.nix-cache-login = { Unit.Description = "Nix cache login - refresh access token"; Service = { Type = "oneshot"; ExecStart = "${cfg.package}/bin/nix-cache-login refresh"; }; }; systemd.user.timers.nix-cache-login = { Unit.Description = "Nix cache login - periodic token refresh"; Timer = { OnBootSec = "2min"; OnUnitActiveSec = "${toString cfg.refreshInterval}s"; }; Install.WantedBy = [ "timers.target" ]; }; launchd.agents.nix-cache-login = { enable = true; config = { ProgramArguments = [ "${cfg.package}/bin/nix-cache-login" "refresh" ]; StartInterval = cfg.refreshInterval; RunAtLoad = true; ProcessType = "Background"; StandardOutPath = "${config.home.homeDirectory}/Library/Logs/nix-cache-login.log"; StandardErrorPath = "${config.home.homeDirectory}/Library/Logs/nix-cache-login.log"; }; }; }; }