50 lines
1.3 KiB
Nix
50 lines
1.3 KiB
Nix
{ pkgs, lib, config, ... }:
|
|
let
|
|
cfg = config.services.lock-action;
|
|
dbus-monitor = "${pkgs.dbus}/bin/dbus-monitor";
|
|
awk = "${pkgs.gawk}/bin/awk";
|
|
ssh-add = "${pkgs.openssh}/bin/ssh-add";
|
|
action-script = pkgs.writeScript "action-script" ''
|
|
export DBUS_SESSION_BUS_ADDRESS="$(systemctl --user show-environment | ${awk} -F= '/^DBUS_SESSION_BUS_ADDRESS/ {print $(NF-1) "=" $NF}')"
|
|
export SSH_AUTH_SOCK="$(systemctl --user show-environment | ${awk} -F= '/^SSH_AUTH_SOCK/ {print $NF}')"
|
|
|
|
echo $DBUS_SESSION_BUS_ADDRESS
|
|
echo $SSH_AUTH_SOCK
|
|
|
|
${dbus-monitor} --session "type='signal',interface='org.freedesktop.ScreenSaver'" | \
|
|
while read x; do
|
|
case "$x" in
|
|
*"boolean true"*)
|
|
echo "Screen Locked";
|
|
${ssh-add} -D
|
|
/run/wrappers/bin/sudo -K
|
|
esac
|
|
done
|
|
|
|
'';
|
|
in
|
|
{
|
|
options = {
|
|
services.lock-action = {
|
|
enable = lib.mkEnableOption "Enable lock actions";
|
|
};
|
|
};
|
|
config = lib.mkIf cfg.enable {
|
|
systemd.user.services.lock-action = {
|
|
enable = true;
|
|
script = ''
|
|
${action-script}
|
|
'';
|
|
|
|
environment = {
|
|
DBUS_SESSION_BUS_ADDRESS = "fake";
|
|
SSH_AUTH_SOCK = "fake";
|
|
};
|
|
|
|
wants = [ "graphical-session.target" ];
|
|
partOf = [ "graphical-session.target" ];
|
|
after = [ "graphical-session.target" ];
|
|
};
|
|
};
|
|
}
|