swaylock: attempt to avoid infinite recursion (#899)

Although the initial pull request was approved [1], a conversation
on Matrix suggests that infinite recursion is indeed possible in
certain cases [2].

[1]: https://github.com/danth/stylix/pull/875
[2]: https://matrix.to/#/!FBhBUKKFkbUIElLvaF:danth.me/$yZz3nJYu9RgaN3736fxF1xY0BfzceGRSsvpiXSq6go4
This commit is contained in:
Daniel Thwaites 2025-02-24 19:07:51 +00:00 committed by GitHub
parent 359084aae6
commit 9d433a6b1a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -37,7 +37,16 @@ in
})
];
options.stylix.targets.swaylock = {
enable = config.lib.stylix.mkEnableTarget "Swaylock" true;
enable =
config.lib.stylix.mkEnableTarget "Swaylock"
# When the state version is older than 23.05, Swaylock enables itself
# automatically if `settings != {}` [1]. Therefore, Swaylock theming
# shouldn't be enabled by default for such state versions, to avoid
# inadvertently installing Swaylock when it's not desired.
#
# [1]: https://github.com/nix-community/home-manager/blob/5cfbf5cc37a3bd1da07ae84eea1b828909c4456b/modules/programs/swaylock.nix#L12-L17
(lib.versionAtLeast config.home.stateVersion "23.05");
useWallpaper = config.lib.stylix.mkEnableWallpaper "Swaylock" true;
};
@ -47,13 +56,12 @@ in
config.stylix.enable
&& config.stylix.targets.swaylock.enable
&& pkgs.stdenv.hostPlatform.isLinux
# Avoid inadvertently installing the Swaylock package by preventing the
# Home Manager module from enabling itself when 'settings != {}' and the
# state version is older than 23.05 [1].
# Adding `&& config.programs.swaylock.enable` here may lead to infinite
# recursion, due to the default value depending on `settings != {}`
# when the state version is older than 23.05 [1], and the content of
# this module affecting that default.
#
# [1]: https://github.com/nix-community/home-manager/blob/5cfbf5cc37a3bd1da07ae84eea1b828909c4456b/modules/programs/swaylock.nix#L12-L17
&& config.programs.swaylock.enable
)
{
programs.swaylock.settings =