summaryrefslogtreecommitdiffstats
path: root/tv/3modules/slock.nix
diff options
context:
space:
mode:
Diffstat (limited to 'tv/3modules/slock.nix')
-rw-r--r--tv/3modules/slock.nix78
1 files changed, 0 insertions, 78 deletions
diff --git a/tv/3modules/slock.nix b/tv/3modules/slock.nix
deleted file mode 100644
index a08303215..000000000
--- a/tv/3modules/slock.nix
+++ /dev/null
@@ -1,78 +0,0 @@
-with import ./lib;
-{ config, pkgs, ... }: let
- cfg = config.tv.slock;
-in {
- options.tv.slock = {
- enable = mkEnableOption "tv.slock";
- package = mkOption {
- default = pkgs.writeDashBin "slock" ''
- set -efu
- display=''${DISPLAY#:}
- service=slock-$LOGNAME@$display.service
- exec ${pkgs.systemd}/bin/systemctl start "$service"
- '';
- type = types.package;
- };
- user = mkOption {
- type = types.user;
- };
- };
- config = mkIf cfg.enable {
- security.polkit.extraConfig = /* js */ ''
- polkit.addRule(function(action, subject) {
- if (action.id === "org.freedesktop.systemd1.manage-units" &&
- subject.user === ${toJSON cfg.user.name} &&
- /^slock-${cfg.user.name}@[0-9]+\.service$/.test(action.lookup("unit")) ) {
- return polkit.Result.YES;
- }
- });
- '';
- systemd.services."slock-${cfg.user.name}@" = {
- conflicts = [
- "picom@%i.target"
- ];
- environment = {
- DISPLAY = ":%I";
- LD_PRELOAD = pkgs.runCommandCC "slock-${cfg.user.name}.so" {
- passAsFile = ["text"];
- text = /* c */ ''
- #include <shadow.h>
- #include <unistd.h>
-
- static struct spwd entry = {
- .sp_namp = "",
- .sp_pwdp =
- ${toC config.users.users.${cfg.user.name}.hashedPassword},
- .sp_lstchg = 0,
- .sp_min = 0,
- .sp_max = 0,
- .sp_warn = 0,
- .sp_inact = 0,
- .sp_expire = 0,
- .sp_flag = 0,
- };
-
- extern struct spwd *getspnam(const char *name) { return &entry; }
- extern int setgroups(size_t size, const gid_t *list) { return 0; }
- extern int setgid(gid_t gid) { return 0; }
- extern int setuid(uid_t uid) { return 0; }
- '';
- } /* sh */ ''
- gcc -Wall -shared -o $out -xc "$textPath"
- '';
- };
- restartIfChanged = false;
- serviceConfig = {
- ExecStart = "${pkgs.slock}/bin/slock";
- ExecStopPost =
- "+${pkgs.systemd}/bin/systemctl start xsession@%i.target";
- OOMScoreAdjust = -1000;
- Restart = "on-failure";
- RestartSec = "100ms";
- StartLimitBurst = 0;
- SyslogIdentifier = "slock";
- User = cfg.user.name;
- };
- };
- };
-}