flake-update-20260505
1{
2 pkgs,
3 config,
4 ...
5}:
6{
7 imports = [
8 ./tiling-common.nix
9 ];
10
11 environment.systemPackages = with pkgs; [
12 xwayland-satellite
13 wlogout
14 ];
15
16 xdg.portal = {
17 config.niri = {
18 default = [
19 "gnome"
20 "gtk"
21 ];
22 "org.freedesktop.impl.portal.Access" = "gtk";
23 "org.freedesktop.impl.portal.Notification" = "gtk";
24 "org.freedesktop.impl.portal.Secret" = "gnome-keyring";
25 "org.freedesktop.impl.portal.FileChooser" = "gtk";
26 "org.freedesktop.impl.portal.ScreenCast" = "gnome";
27 "org.freedesktop.portal.ScreenCast" = "gnome";
28 };
29 };
30
31 # Allow swaylock to unlock the computer for us
32 security.pam.services.swaylock = {
33 text = "auth include login";
34 };
35
36 programs.niri.enable = true;
37
38 # Expose wayland-sessions to greetd so ReGreet can discover niri-session
39 systemd.services.greetd.environment.XDG_DATA_DIRS =
40 "${config.services.displayManager.sessionData.desktops}/share";
41
42 # Pre-seed ReGreet state so "Niri" is auto-selected in the session dropdown.
43 # Without this, the session combo box is populated but nothing is selected
44 # because regreet only auto-selects from cache (which is empty on first boot).
45 system.activationScripts.regreet-state.text = ''
46 if [ ! -f /var/lib/regreet/state.toml ]; then
47 mkdir -p /var/lib/regreet
48 printf 'last_user = "vincent"\n\n[user_to_last_sess]\nvincent = "Niri"\n' > /var/lib/regreet/state.toml
49 chown greeter:greeter /var/lib/regreet/state.toml
50 fi
51 '';
52
53 # ReGreet greeter (runs under cage via greetd)
54 # Unlocks gnome-keyring via PAM on login
55 programs.regreet = {
56 enable = true;
57 cageArgs = [
58 "-s"
59 "-m"
60 "last"
61 ];
62 settings = {
63 background = {
64 path = "/etc/greetd/wallpaper.jpg";
65 fit = "Cover";
66 };
67 GTK.application_prefer_dark_theme = true;
68 appearance.greeting_msg = "Welcome back!";
69 };
70 theme = {
71 name = "Arc-Dark";
72 package = pkgs.arc-theme;
73 };
74 iconTheme = {
75 name = "Arc";
76 package = pkgs.arc-icon-theme;
77 };
78 cursorTheme = {
79 name = "Qogir";
80 package = pkgs.qogir-icon-theme;
81 };
82 font = {
83 name = "JetBrains Mono";
84 package = pkgs.jetbrains-mono;
85 size = 14;
86 };
87 };
88}