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}