74 lines
2.2 KiB
Nix
74 lines
2.2 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
...
|
|
}:
|
|
with lib; let
|
|
cfg = config.services.yubikey-touch-detector;
|
|
in {
|
|
options.services.yubikey-touch-detector = {
|
|
enable =
|
|
mkEnableOption
|
|
"a tool to detect when your YubiKey is waiting for a touch";
|
|
|
|
package = mkOption {
|
|
type = types.package;
|
|
default = pkgs.yubikey-touch-detector;
|
|
defaultText = "pkgs.yubikey-touch-detector";
|
|
description = ''
|
|
Package to use. Binary is expected to be called "yubikey-touch-detector".
|
|
'';
|
|
};
|
|
|
|
socket.enable =
|
|
mkEnableOption "starting the process only when the socket is used";
|
|
|
|
extraArgs = mkOption {
|
|
type = types.listOf types.str;
|
|
default = ["--libnotify"];
|
|
defaultText = literalExpression ''[ "--libnotify" ]'';
|
|
description = ''
|
|
Extra arguments to pass to the tool. The arguments are not escaped.
|
|
'';
|
|
};
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
home.packages = [cfg.package];
|
|
|
|
# Service description licensed under ISC
|
|
# See https://github.com/maximbaz/yubikey-touch-detector/blob/c9fdff7163361d6323e2de0449026710cacbc08a/LICENSE
|
|
# Author: Maxim Baz
|
|
systemd.user.sockets.yubikey-touch-detector = mkIf cfg.socket.enable {
|
|
Unit.Description = "Unix socket activation for YubiKey touch detector service";
|
|
Socket = {
|
|
ListenFIFO = "%t/yubikey-touch-detector.sock";
|
|
RemoveOnStop = true;
|
|
SocketMode = "0660";
|
|
};
|
|
Install.WantedBy = ["sockets.target"];
|
|
};
|
|
|
|
# Same license thing for the description here
|
|
systemd.user.services.yubikey-touch-detector = {
|
|
Unit = {
|
|
Description = "Detects when your YubiKey is waiting for a touch";
|
|
Requires =
|
|
optionals cfg.socket.enable ["yubikey-touch-detector.socket"];
|
|
};
|
|
Service = {
|
|
ExecStart = "${cfg.package}/bin/yubikey-touch-detector ${
|
|
concatStringsSep " " cfg.extraArgs
|
|
}";
|
|
Environment = ["PATH=${lib.makeBinPath [pkgs.gnupg]}"];
|
|
Restart = "on-failure";
|
|
RestartSec = "1sec";
|
|
};
|
|
Install.Also =
|
|
optionals cfg.socket.enable ["yubikey-touch-detector.socket"];
|
|
Install.WantedBy = ["default.target"];
|
|
};
|
|
};
|
|
}
|