{ 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 = false; placeholder_text = ""; } ]; }; }; wayland.windowManager.hyprland = lib.mkIf hyprlandEnabled { settings = { bind = let pause-music = "${pkgs.playerctl}/bin/playerctl -a pause"; dpmsTimeout = config.mod.hyprlock.dpmsTimeout; dpmsOff = pkgs.writeShellScript "dpms-off" '' ${pkgs.hyprland}/bin/hyprctl dispatch 'hl.dsp.dpms({ action = "off" })' ''; dpmsOn = pkgs.writeShellScript "dpms-on" '' ${pkgs.hyprland}/bin/hyprctl dispatch 'hl.dsp.dpms({ action = "on" })' ''; dpms-lock = pkgs.writeShellScript "dpms-lock" '' ${pkgs.swayidle}/bin/swayidle \ timeout ${dpmsTimeout} ${dpmsOff} \ resume ${dpmsOn} & ${pkgs.hyprlock}/bin/hyprlock; ${pkgs.procps}/bin/pkill swayidle ''; in [ { _args = [ "SUPER + x" (lib.generators.mkLuaInline ''hl.dsp.exec_cmd("${pause-music}; ${dpms-lock}")'') ]; } { _args = [ "SUPER + SHIFT + x" (lib.generators.mkLuaInline ''hl.dsp.exec_cmd("${pause-music}; ${pkgs.hyprlock}/bin/hyprlock & sleep 0.5; systemctl suspend")'' ) ]; } ]; }; }; }; security = { polkit.enable = true; pam.services.hyprlock = {}; }; }; }