fix(sway): add possibility to not install swaylock package

Useful when using home-manager on third-party distribution. Swaylock
from nixpkgs become unable to unlock session because PAM
incompatibilities.
This commit is contained in:
Yorick Barbanneau 2025-08-24 22:45:13 +02:00
parent a359d8c06e
commit c1ee8f9d50
Signed by: ephase
GPG key ID: 246042E52B41FFCF
4 changed files with 18 additions and 7 deletions

View file

@ -13,6 +13,16 @@ in
description = "configure laptop mode"; description = "configure laptop mode";
}; };
swaylock.useNullPackage = mkOption {
type = types.bool;
default = false;
description = ''
Use null package to not install swaylock with Nix
Useful when using Home-Manager on third-party distribution to avoid
problem with PAM
'';
};
wallpapers = { wallpapers = {
lockscreen = mkOption { lockscreen = mkOption {
type = types.str; type = types.str;

View file

@ -76,7 +76,7 @@ in
"${mod}+Alt+k" = "kill"; "${mod}+Alt+k" = "kill";
"${mod}+Alt+c" = "reload"; "${mod}+Alt+c" = "reload";
"${mod}+Alt+Backspace" = "exec swaynag -t warning -m 'Exit sway?' -B 'Yes' 'swaymsg exit'"; "${mod}+Alt+Backspace" = "exec swaynag -t warning -m 'Exit sway?' -B 'Yes' 'swaymsg exit'";
"${mod}+Alt+l" = "exec ${pkgs.swaylock}/bin/swaylock"; "${mod}+Alt+l" = if cfg.swaylock.useNullPackage then "exec swaylock" else "exec ${pkgs.swaylock}/bin/swaylock";
# Manage windows placement # Manage windows placement
"${mod}+b" = "splith"; "${mod}+b" = "splith";
"${mod}+v" = "splitv"; "${mod}+v" = "splitv";

View file

@ -21,11 +21,11 @@ in
events = [ events = [
{ {
event = "before-sleep"; event = "before-sleep";
command = "${pkgs.swaylock}/bin/swaylock -f"; command = if cfg.swaylock.useNullPackage then "swaylock" else "${pkgs.swaylock}/bin/swaylock";
} }
{ {
event = "lock"; event = "lock";
command = "${pkgs.swaylock}/bin/swaylock -f"; command = if cfg.swaylock.useNullPackage then "swaylock" else "${pkgs.swaylock}/bin/swaylock";
} }
]; ];
}; };

View file

@ -6,9 +6,10 @@ in
{ {
config = mkIf config.modules.desktop.sway.enable { config = mkIf config.modules.desktop.sway.enable {
programs.swaylock = { programs.swaylock = {
package = if cfg.swaylock.useNullPackage then null else pkgs.swaylock;
enable = true; enable = true;
settings = { settings = {
image = "${cfg.wallpapers.lockscreen}"; image = if cfg.wallpapers.lockscreen != "" then "${cfg.wallpapers.lockscreen}" else false;
scaling = "center"; scaling = "center";
color = "000000"; color = "000000";
indicator-radius = 70; indicator-radius = 70;