129 lines
3.7 KiB
Nix
129 lines
3.7 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
...
|
|
}:
|
|
let
|
|
cfg = config.services.displayManager.lemurs;
|
|
settingsFormat = pkgs.formats.toml { };
|
|
in
|
|
{
|
|
options.services.displayManager.lemurs = {
|
|
enable = lib.mkEnableOption "" // {
|
|
description = ''
|
|
Whether to enable lemurs, a customizable TUI display/login manager.
|
|
|
|
::: {.note}
|
|
For Wayland compositors, your user must be in the "seat" group.
|
|
:::
|
|
'';
|
|
};
|
|
|
|
package = lib.mkPackageOption pkgs "lemurs" { };
|
|
|
|
settings = lib.mkOption {
|
|
type = settingsFormat.type;
|
|
default = { };
|
|
example = lib.literalExpression ''
|
|
{
|
|
do_log = true;
|
|
}
|
|
'';
|
|
description = ''
|
|
Configuration for lemurs, provided as a Nix attribute set and automatically
|
|
serialized to TOML.
|
|
See [lemurs configuration documentation](https://github.com/coastalwhite/lemurs/blob/main/extra/config.toml) for available options.
|
|
'';
|
|
};
|
|
|
|
vt = lib.mkOption {
|
|
type = lib.types.ints.positive;
|
|
default = 2;
|
|
description = ''
|
|
The virtual console (tty) that lemurs should use.
|
|
'';
|
|
};
|
|
};
|
|
config = lib.mkIf cfg.enable {
|
|
assertions = [
|
|
{
|
|
assertion = !config.services.displayManager.autoLogin.enable;
|
|
message = ''
|
|
lemurs doesn't support auto login.
|
|
'';
|
|
}
|
|
];
|
|
|
|
security.pam.services.lemurs = {
|
|
unixAuth = true;
|
|
startSession = true;
|
|
# See https://github.com/coastalwhite/lemurs/issues/166
|
|
setLoginUid = false;
|
|
enableGnomeKeyring = lib.mkDefault config.services.gnome.gnome-keyring.enable;
|
|
};
|
|
|
|
environment.systemPackages = [ cfg.package ];
|
|
|
|
services = {
|
|
dbus.packages = [ cfg.package ];
|
|
# Required for wayland with setLoginUid = false;
|
|
seatd.enable = true;
|
|
xserver = {
|
|
# To enable user switching, allow lemurs to allocate displays dynamically.
|
|
display = null;
|
|
};
|
|
displayManager = {
|
|
enable = true;
|
|
execCmd = "exec ${lib.getExe cfg.package} --config ${settingsFormat.generate "config.toml" cfg.settings}";
|
|
# set default settings
|
|
lemurs.settings =
|
|
let
|
|
desktops = config.services.displayManager.sessionData.desktops;
|
|
in
|
|
{
|
|
tty = lib.mkDefault cfg.vt;
|
|
system_shell = lib.mkDefault "${pkgs.bash}/bin/bash";
|
|
initial_path = lib.mkDefault "/run/current-system/sw/bin";
|
|
x11 = {
|
|
xauth_path = lib.mkDefault "${pkgs.xorg.xauth}/bin/xauth";
|
|
xserver_path = lib.mkDefault "${pkgs.xorg.xorgserver}/bin/X";
|
|
xsessions_path = lib.mkDefault "${desktops}/share/xsessions";
|
|
xsetup_path = lib.mkDefault config.services.displayManager.sessionData.wrapper;
|
|
};
|
|
wayland.wayland_sessions_path = lib.mkDefault "${desktops}/share/wayland-sessions";
|
|
};
|
|
};
|
|
};
|
|
|
|
systemd.services.display-manager = {
|
|
unitConfig = {
|
|
Wants = [ "systemd-user-sessions.service" ];
|
|
After = [
|
|
"systemd-user-sessions.service"
|
|
"getty@tty${toString cfg.vt}.service"
|
|
"plymouth-quit-wait.service"
|
|
];
|
|
Conflicts = [ "getty@tty${toString cfg.vt}.service" ];
|
|
};
|
|
serviceConfig = {
|
|
Type = "idle";
|
|
# Defaults from lemurs upstream configuration
|
|
StandardInput = "tty";
|
|
TTYPath = "/dev/tty${toString cfg.vt}";
|
|
TTYReset = "yes";
|
|
TTYVHangup = "yes";
|
|
# Clear the console before starting
|
|
TTYVTDisallocate = true;
|
|
};
|
|
# Don't kill a user session when using nixos-rebuild
|
|
restartIfChanged = false;
|
|
};
|
|
};
|
|
|
|
meta.maintainers = with lib.maintainers; [
|
|
nullcube
|
|
stunkymonkey
|
|
];
|
|
}
|