mirror of
https://github.com/nix-community/home-manager
synced 2024-12-25 11:19:47 +01:00
atuin: configure daemon using systemd and launchd
This commit is contained in:
commit
92e644a95e
1 changed files with 124 additions and 39 deletions
|
@ -5,11 +5,13 @@ with lib;
|
||||||
let
|
let
|
||||||
|
|
||||||
cfg = config.programs.atuin;
|
cfg = config.programs.atuin;
|
||||||
|
daemonCfg = cfg.daemon;
|
||||||
|
|
||||||
tomlFormat = pkgs.formats.toml { };
|
tomlFormat = pkgs.formats.toml { };
|
||||||
|
|
||||||
|
inherit (pkgs.stdenv) isLinux isDarwin;
|
||||||
in {
|
in {
|
||||||
meta.maintainers = [ maintainers.hawkw ];
|
meta.maintainers = [ maintainers.hawkw maintainers.water-sucks ];
|
||||||
|
|
||||||
options.programs.atuin = {
|
options.programs.atuin = {
|
||||||
enable = mkEnableOption "atuin";
|
enable = mkEnableOption "atuin";
|
||||||
|
@ -94,11 +96,24 @@ in {
|
||||||
Whether to enable Nushell integration.
|
Whether to enable Nushell integration.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
daemon = {
|
||||||
|
enable = mkEnableOption "Atuin daemon";
|
||||||
|
|
||||||
|
logLevel = mkOption {
|
||||||
|
default = null;
|
||||||
|
type =
|
||||||
|
types.nullOr (types.enum [ "trace" "debug" "info" "warn" "error" ]);
|
||||||
|
description = ''
|
||||||
|
Verbosity of Atuin daemon logging.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config = let flagsStr = escapeShellArgs cfg.flags;
|
config = let flagsStr = escapeShellArgs cfg.flags;
|
||||||
in mkIf cfg.enable {
|
in mkIf cfg.enable (mkMerge [
|
||||||
|
{
|
||||||
# Always add the configured `atuin` package.
|
# Always add the configured `atuin` package.
|
||||||
home.packages = [ cfg.package ];
|
home.packages = [ cfg.package ];
|
||||||
|
|
||||||
|
@ -138,5 +153,75 @@ in {
|
||||||
source ${config.xdg.cacheHome}/atuin/init.nu
|
source ${config.xdg.cacheHome}/atuin/init.nu
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
}
|
||||||
|
|
||||||
|
(mkIf daemonCfg.enable (mkMerge [
|
||||||
|
{
|
||||||
|
assertions = [
|
||||||
|
{
|
||||||
|
assertion = versionAtLeast cfg.package.version "18.2.0";
|
||||||
|
message = ''
|
||||||
|
The Atuin daemon requires at least version 18.2.0 or later.
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
{
|
||||||
|
assertion = isLinux || isDarwin;
|
||||||
|
message =
|
||||||
|
"The Atuin daemon can only be configured on either Linux or macOS.";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
programs.atuin.settings = { daemon = { enabled = true; }; };
|
||||||
|
}
|
||||||
|
(mkIf isLinux {
|
||||||
|
programs.atuin.settings = { daemon = { systemd_socket = true; }; };
|
||||||
|
|
||||||
|
systemd.user.services.atuin-daemon = {
|
||||||
|
Unit = {
|
||||||
|
Description = "Atuin daemon";
|
||||||
|
Requires = [ "atuin-daemon.socket" ];
|
||||||
|
};
|
||||||
|
Install = {
|
||||||
|
Also = [ "atuin-daemon.socket" ];
|
||||||
|
WantedBy = [ "default.target" ];
|
||||||
|
};
|
||||||
|
Service = {
|
||||||
|
ExecStart = "${lib.getExe cfg.package} daemon";
|
||||||
|
Environment = lib.optionals (daemonCfg.logLevel != null)
|
||||||
|
[ "ATUIN_LOG=${daemonCfg.logLevel}" ];
|
||||||
|
Restart = "on-failure";
|
||||||
|
RestartSteps = 3;
|
||||||
|
RestartMaxDelaySec = 6;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.user.sockets.atuin-daemon = {
|
||||||
|
Unit = { Description = "Atuin daemon socket"; };
|
||||||
|
Install = { WantedBy = [ "sockets.target" ]; };
|
||||||
|
Socket = {
|
||||||
|
ListenStream = "%h/.local/share/atuin/atuin.sock";
|
||||||
|
SocketMode = "0600";
|
||||||
|
RemoveOnStop = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
})
|
||||||
|
(mkIf isDarwin {
|
||||||
|
launchd.agents.atuin-daemon = {
|
||||||
|
enable = true;
|
||||||
|
config = {
|
||||||
|
ProgramArguments = [ "${lib.getExe cfg.package}" "daemon" ];
|
||||||
|
EnvironmentVariables =
|
||||||
|
lib.optionalAttrs (daemonCfg.logLevel != null) {
|
||||||
|
ATUIN_LOG = daemonCfg.logLevel;
|
||||||
|
};
|
||||||
|
KeepAlive = {
|
||||||
|
Crashed = true;
|
||||||
|
SuccessfulExit = false;
|
||||||
|
};
|
||||||
|
ProcessType = "Background";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
})
|
||||||
|
]))
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue