{ pkgs, lib, config, ... }: let enabled = config.mod.hyprlock.enable; hyprlandEnabled = config.mod.hyprland.enable; in { options = { mod.hyprlock = { enable = lib.mkEnableOption "enable hyprlock module"; dpmsTimeout = lib.mkOption { description = "timeout in seconds before DPMS is turned on"; type = lib.types.str; default = "10"; }; }; }; config = lib.mkIf enabled { home-manager.users.alex = { programs.hyprlock = { enable = true; settings = { general = { hide_cursor = true; }; background = [ { color = "rgb(000000)"; } ]; input-field = [ { size = "250, 50"; position = "0, 0"; halign = "center"; valign = "center"; outline_thickness = 2; dots_center = true; fade_on_empty = true; placeholder_text = ""; } ]; }; }; wayland.windowManager.hyprland = lib.mkIf hyprlandEnabled { settings = { bind = let pause-music = "${pkgs.playerctl}/bin/playerctl -a pause"; dpmsTimeout = config.mod.hyprlock.dpmsTimeout; dpms-lock = pkgs.writeShellScript "dpms-lock" '' ${pkgs.swayidle}/bin/swayidle \ timeout ${dpmsTimeout} "${pkgs.hyprland}/bin/hyprctl dispatch dpms off" \ resume "${pkgs.hyprland}/bin/hyprctl dispatch dpms on" & ${pkgs.hyprlock}/bin/hyprlock && ${pkgs.procps}/bin/pkill swayidle ''; in [ "$mod, x, exec, ${pause-music}; ${dpms-lock}" "$mod SHIFT, x, exec, ${pause-music}; ${pkgs.hyprlock}/bin/hyprlock & sleep 0.5; systemctl suspend" ]; }; }; }; security = { polkit.enable = true; pam.services.hyprlock = {}; }; }; }