71 lines
2.2 KiB
Nix
71 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" ];
|
|
};
|
|
};
|
|
}
|