89ec004f59
In my case I'd like to be able to add `-m last` to `cage` to make sure that the login form from regreet isn't displayed half on my external monitor and half on my laptop screen, but on the last connected monitor only. That's basically the issue described in #226586, though it's not a proper fix since the login form is shown on one monitor only.
88 lines
2.7 KiB
Nix
88 lines
2.7 KiB
Nix
{ lib
|
|
, pkgs
|
|
, config
|
|
, ...
|
|
}:
|
|
let
|
|
cfg = config.programs.regreet;
|
|
settingsFormat = pkgs.formats.toml { };
|
|
in
|
|
{
|
|
options.programs.regreet = {
|
|
enable = lib.mkEnableOption null // {
|
|
description = lib.mdDoc ''
|
|
Enable ReGreet, a clean and customizable greeter for greetd.
|
|
|
|
To use ReGreet, {option}`services.greetd` has to be enabled and
|
|
{option}`services.greetd.settings.default_session` should contain the
|
|
appropriate configuration to launch
|
|
{option}`config.programs.regreet.package`. For examples, see the
|
|
[ReGreet Readme](https://github.com/rharish101/ReGreet#set-as-default-session).
|
|
|
|
A minimal configuration that launches ReGreet in {command}`cage` is
|
|
enabled by this module by default.
|
|
'';
|
|
};
|
|
|
|
package = lib.mkPackageOptionMD pkgs [ "greetd" "regreet" ] { };
|
|
|
|
settings = lib.mkOption {
|
|
type = lib.types.either lib.types.path settingsFormat.type;
|
|
default = { };
|
|
description = lib.mdDoc ''
|
|
ReGreet configuration file. Refer
|
|
<https://github.com/rharish101/ReGreet/blob/main/regreet.sample.toml>
|
|
for options.
|
|
'';
|
|
};
|
|
|
|
cageArgs = lib.mkOption {
|
|
type = lib.types.listOf lib.types.str;
|
|
default = [ "-s" ];
|
|
example = lib.literalExpression
|
|
''
|
|
[ "-s" "-m" "last" ]
|
|
'';
|
|
description = lib.mdDoc ''
|
|
Additional arguments to be passed to
|
|
[cage](https://github.com/cage-kiosk/cage).
|
|
'';
|
|
};
|
|
|
|
extraCss = lib.mkOption {
|
|
type = lib.types.either lib.types.path lib.types.lines;
|
|
default = "";
|
|
description = lib.mdDoc ''
|
|
Extra CSS rules to apply on top of the GTK theme. Refer to
|
|
[GTK CSS Properties](https://docs.gtk.org/gtk4/css-properties.html) for
|
|
modifiable properties.
|
|
'';
|
|
};
|
|
};
|
|
|
|
config = lib.mkIf cfg.enable {
|
|
services.greetd = {
|
|
enable = lib.mkDefault true;
|
|
settings.default_session.command = lib.mkDefault "${pkgs.dbus}/bin/dbus-run-session ${lib.getExe pkgs.cage} ${lib.escapeShellArgs cfg.cageArgs} -- ${lib.getExe cfg.package}";
|
|
};
|
|
|
|
environment.etc = {
|
|
"greetd/regreet.css" =
|
|
if lib.isPath cfg.extraCss
|
|
then {source = cfg.extraCss;}
|
|
else {text = cfg.extraCss;};
|
|
|
|
"greetd/regreet.toml".source =
|
|
if lib.isPath cfg.settings
|
|
then cfg.settings
|
|
else settingsFormat.generate "regreet.toml" cfg.settings;
|
|
};
|
|
|
|
systemd.tmpfiles.rules = let
|
|
group = config.users.users.${config.services.greetd.settings.default_session.user}.group;
|
|
in [
|
|
"d /var/log/regreet 0755 greeter ${group} - -"
|
|
"d /var/cache/regreet 0755 greeter ${group} - -"
|
|
];
|
|
};
|
|
}
|