63 lines
1.8 KiB
Nix
63 lines
1.8 KiB
Nix
{
|
|
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";
|
|
};
|
|
};
|
|
};
|
|
}
|