c61f94715f
Replace TTY/getty login with a graphical Wayland greeter on every host with features.swayDesktop enabled (MBP, T400, Mac Pro; not the WSL box). greetd launches ReGreet inside the cage kiosk compositor; the Sway session is listed automatically via services.displayManager.sessionPackages. Override regreet's mkDefault greetd command to export XKB_DEFAULT_LAYOUT=dvorak so the greeter password field matches the console (workstation.nix) and Sway session (home/sway.nix) layout. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
77 lines
2.3 KiB
Nix
77 lines
2.3 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
...
|
|
}:
|
|
|
|
let
|
|
cfg = config.features.swayDesktop;
|
|
in
|
|
{
|
|
options = {
|
|
features.swayDesktop.enable = lib.mkEnableOption "Enable Sway Desktop";
|
|
};
|
|
config = lib.mkIf cfg.enable {
|
|
programs.sway = {
|
|
enable = true;
|
|
wrapperFeatures.gtk = true;
|
|
extraSessionCommands = ''
|
|
# QT
|
|
export QT_QPA_PLATFORM="wayland;xcb"
|
|
export QT_QPA_PLATFORMTHEME=qt5ct
|
|
# SDL
|
|
export SDL_VIDEODRIVER=wayland
|
|
# Java
|
|
export _JAVA_AWT_WM_NONREPARENTING=1
|
|
# Misc
|
|
export CLUTTER_BACKEND=wayland
|
|
export WINIT_UNIX_BACKEND=wayland
|
|
export MOZ_ENABLE_WAYLAND=1
|
|
'';
|
|
# Core Wayland utilities. The lock screen, idle daemon, status bar and
|
|
# notification daemon are configured per-user in home/sway.nix.
|
|
extraPackages = with pkgs; [
|
|
brightnessctl
|
|
foot
|
|
grim
|
|
sway-launcher-desktop
|
|
pavucontrol
|
|
];
|
|
};
|
|
fonts.packages = with pkgs; [
|
|
noto-fonts
|
|
noto-fonts-color-emoji
|
|
font-awesome
|
|
];
|
|
|
|
# Wayland login screen (replaces console/getty login on every Sway host).
|
|
# greetd runs ReGreet inside the cage kiosk compositor; the Sway session is
|
|
# offered automatically because programs.sway registers itself via
|
|
# services.displayManager.sessionPackages. Hosts that turn off
|
|
# features.swayDesktop (e.g. EDaaS) keep plain TTY login.
|
|
programs.regreet.enable = true;
|
|
# cage reads the XKB_* environment at startup, so force the greeter onto the
|
|
# same Dvorak layout as the console (workstation.nix) and the Sway session
|
|
# (home/sway.nix) -- otherwise the password field would be QWERTY. This
|
|
# overrides the greetd command regreet sets with mkDefault.
|
|
services.greetd.settings.default_session.command =
|
|
let
|
|
greeter = pkgs.writeShellScript "regreet-cage" ''
|
|
export XKB_DEFAULT_LAYOUT=dvorak
|
|
exec ${pkgs.dbus}/bin/dbus-run-session ${lib.getExe pkgs.cage} -s -- ${lib.getExe config.programs.regreet.package}
|
|
'';
|
|
in
|
|
"${greeter}";
|
|
|
|
# Desktop portals: enables screen sharing (wlroots) and native file pickers
|
|
# for Wayland apps such as Element and Firefox.
|
|
xdg.portal = {
|
|
enable = true;
|
|
wlr.enable = true;
|
|
extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
|
|
config.common.default = "*";
|
|
};
|
|
};
|
|
}
|