{ resources, config, lib, pkgs, ... }: let cfg = config.zpha.programs.swaylock; in { options.zpha.programs.swaylock = { enable = lib.mkEnableOption "swaylock"; settings = lib.mkOption { default = { }; type = with lib.types; attrsOf (oneOf [ bool float int path str ]); }; }; config = lib.mkIf cfg.enable { zpha.programs.swaylock.settings = { # clock = true; indicator = true; ring-color = "4aa96c"; show-failed-attempts = true; fingerprint = false; command = "${lib.getExe pkgs.zpha.shaderbg} '*' --fps 10 ${resources.shaders.background1}"; # image = "/home/zaphyra/Pictures/Backgrounds/lock.png"; # scaling = "fit"; # color = "ffffaf"; }; security.pam.services.swaylock = { }; security.pam.services.swaylock-plugin = { }; services.systemd-lock-handler.enable = true; users.users.zaphyra.maid = { packages = [ pkgs.pkgs.swaylock-plugin-fprintd ]; file.xdg_config = { "swaylock/config".text = lib.concatStrings ( lib.flip lib.mapAttrsToList cfg.settings ( n: v: if v == false then "" else (if v == true then n else n + "=" + (if builtins.isPath v then "${v}" else toString v)) + "\n" ) ); }; systemd.services.swaylock = { wantedBy = [ "lock.target" ]; partOf = [ "lock.target" ]; after = [ "lock.target" ]; environment = lib.mkForce { }; unitConfig.OnSuccess = [ "unlock.target" ]; serviceConfig = { ExecStart = lib.getExe pkgs.swaylock-plugin-fprintd; Restart = "on-failure"; RestartSec = 0; }; }; }; }; }