1{ lib, config, pkgs, user, ... } @ inputs:
2
3with lib;
4let
5 inherit (import ../../lib/theme.nix inputs) cursorTheme defaultFont iconTheme gtkTheme kvantumTheme;
6 cfg = config.modules.desktop;
7in {
8 options.modules.desktop.session = {
9 enable = mkOption {
10 default = cfg.enable;
11 example = true;
12 description = "Whether to enable session and desktop environment.";
13 type = types.bool;
14 };
15 };
16
17 config = mkIf cfg.session.enable {
18 users.users."${user}".extraGroups = [ "video" ];
19
20 boot = {
21 plymouth.enable = true;
22 initrd.verbose = mkDefault false;
23 consoleLogLevel = 0;
24 };
25
26 environment.sessionVariables = {
27 GSK_RENDERER = mkDefault "ngl";
28 QT_QPA_PLATFORM = mkDefault "wayland;xcb";
29 GDK_BACKEND = mkDefault "wayland,x11,*";
30 SDL_VIDEODRIVER = mkDefault "wayland,x11";
31 NIXOS_OZONE_WL = mkDefault "1";
32 };
33
34 services = {
35 greetd = {
36 enable = true;
37 settings = {
38 terminal.vt = 1;
39 default_session.command = let
40 hyprConfig = pkgs.writeTextFile {
41 name = "hyprland-greeter.conf";
42 text = ''
43 source=${toString cfg.hyprland.configFile}
44 exec-once = ${getExe config.programs.regreet.package}; hyprctl dispatch exit
45 animations {
46 enabled = false
47 }
48 '';
49 };
50 in escapeShellArgs [
51 "${pkgs.dbus}/bin/dbus-run-session"
52 "${getExe pkgs.hyprland}"
53 "-c" (toString hyprConfig)
54 ];
55 };
56 };
57 upower.enable = true;
58 gvfs.enable = true;
59 logind.settings.Login = {
60 powerKey = "suspend";
61 powerKeyLongPress = "poweroff";
62 lidSwitch = "suspend";
63 };
64 };
65
66 programs = {
67 regreet = {
68 enable = true;
69 inherit cursorTheme iconTheme;
70 font = defaultFont;
71 theme = gtkTheme;
72 settings.GTK.application_prefer_dark_theme = true;
73 };
74 };
75
76 security.polkit.enable = true;
77 };
78}