pinwheel: Replace swaylock with hyprlock

Fixes black internal screen after unlocking with external monitor
disconnected, and occasional Hyprland crashes on lock.
This commit is contained in:
Alexander Heldt
2026-02-23 10:44:31 +01:00
parent 7d6785f27e
commit ac1c5c372f
3 changed files with 33 additions and 18 deletions

View File

@@ -14,7 +14,7 @@ in
nix-index.enable = false;
greetd.enable = true;
hyprland.enable = true;
swaylock.enable = true;
hyprlock.enable = true;
physlock.enable = false;
power.enable = true;

View File

@@ -5,13 +5,13 @@
...
}:
let
enabled = config.mod.swaylock.enable;
enabled = config.mod.hyprlock.enable;
hyprlandEnabled = config.mod.hyprland.enable;
in
{
options = {
mod.swaylock = {
enable = lib.mkEnableOption "enable swaylock module";
mod.hyprlock = {
enable = lib.mkEnableOption "enable hyprlock module";
dpmsTimeout = lib.mkOption {
description = "timeout in seconds before DPMS is turned on";
@@ -23,13 +23,32 @@ in
config = lib.mkIf enabled {
home-manager.users.alex = {
programs.swaylock = {
programs.hyprlock = {
enable = true;
settings = {
color = "000000";
indicator-idle-visible = false;
show-failed-attempts = true;
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 = "";
}
];
};
};
@@ -39,18 +58,18 @@ in
let
pause-music = "${pkgs.playerctl}/bin/playerctl -p spotify pause";
dpmsTimeout = config.mod.swaylock.dpmsTimeout;
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.swaylock}/bin/swaylock && ${pkgs.procps}/bin/pkill swayidle
${pkgs.hyprlock}/bin/hyprlock && ${pkgs.procps}/bin/pkill swayidle
'';
in
[
"$mod, x, exec, ${pause-music}; ${dpms-lock}"
"$mod SHIFT, x, exec, ${pause-music}; ${pkgs.swaylock}/bin/swaylock -f; systemctl suspend"
"$mod SHIFT, x, exec, ${pause-music}; ${pkgs.hyprlock}/bin/hyprlock & sleep 0.5; systemctl suspend"
];
};
};
@@ -59,11 +78,7 @@ in
security = {
polkit.enable = true;
pam.services.swaylock.text = ''
# PAM configuration file for the swaylock screen locker. By default, it includes
# the 'login' configuration file (see /etc/pam.d/login)
auth include login
'';
pam.services.hyprlock = {};
};
};
}

View File

@@ -80,7 +80,7 @@ in
path = [
pkgs.coreutils # For `cat`
pkgs.libnotify
pkgs.swaylock
pkgs.hyprlock
];
script =
@@ -103,7 +103,7 @@ in
BATTERY_STATUS=$(cat /sys/class/power_supply/${lowbat.battery}/status)
if [[ $BATTERY_STATUS = "Discharging" ]]; then
${pause-music}; ${pkgs.swaylock}/bin/swaylock -f; systemctl suspend
${pause-music}; ${pkgs.hyprlock}/bin/hyprlock & sleep 0.5; systemctl suspend
fi
fi
'';