summaryrefslogtreecommitdiff
path: root/profiles/desktop.nix
blob: 5a47f964177eb52c244c53056bfcdcf411abe2ea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# Shared desktop base: the niri graphical session, login manager, dark theme,
# audio, graphics, a browser, common desktop tools, and a font base. Imported by
# every graphical machine; per-host extras live in machines/<host>/desktop.nix.
#
# Deliberately username-agnostic (enzo uses hwebs, kusanagi uses henz), so this
# file sets NO users.users.*: shared desktop tools go to environment.systemPackages
# and per-user groups live in the machine files.
{ pkgs, ... }:

{
  # --- Session / login ---
  programs.niri.enable = true;
  programs.dconf.enable = true;

  # Tell the desktop it's in dark mode. Apps read light/dark from
  # xdg-desktop-portal's Settings interface (org.freedesktop.appearance
  # color-scheme). This dconf default is the value the portal serves.
  programs.dconf.profiles.user.databases = [
    {
      settings."org/gnome/desktop/interface".color-scheme = "prefer-dark";
    }
  ];

  # Serve color-scheme from the *gtk* portal backend, not gnome. The niri module
  # routes Settings to xdg-desktop-portal-gnome (its default), but that backend
  # relies on gnome-settings-daemon — absent under bare niri — so it reports
  # "no preference" and web content (Firefox's prefers-color-scheme) stays light
  # even though GTK chrome follows the dark GTK theme. xdg-desktop-portal-gtk
  # reads the dconf color-scheme above directly, so pinning Settings to it makes
  # the portal actually report dark and content follows. This key merges into
  # the niri module's xdg.portal.config.niri.
  xdg.portal = {
    extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
    config.niri."org.freedesktop.impl.portal.Settings" = "gtk";
  };

  # login screen
  services.greetd = {
    enable = true;
    settings.default_session = {
      command = "${pkgs.tuigreet}/bin/tuigreet --time --remember --cmd niri-session";
      user = "greeter";
    };
  };
  # Let tuigreet write its cache (for --remember).
  systemd.services.greetd.serviceConfig = {
    Type = "idle";
    StandardInput = "tty";
    StandardOutput = "tty";
    StandardError = "journal"; # Better for debugging
    TTYReset = true;
    TTYVHangup = true;
    TTYVTDisallocate = true;
  };

  # --- Audio (playback base; kusanagi adds rtkit/jack/32-bit for pro audio) ---
  services.pulseaudio.enable = false;
  services.pipewire = {
    enable = true;
    alsa.enable = true;
    pulse.enable = true;
  };

  # --- Graphics ---
  hardware.graphics.enable = true;

  # --- GPG agent (kusanagi adds enableSSHSupport) ---
  programs.gnupg.agent.enable = true;

  # --- Firefox: blank home/new-tab and no bookmarks toolbar, as an enterprise
  # policy (no profile to manage). Dark theme is not configured here — it comes
  # from the portal above, which Firefox honors for both chrome and web content.
  programs.firefox = {
    enable = true;
    preferencesStatus = "default";
    preferences = {
      "browser.startup.homepage" = "about:blank";
      "browser.startup.page" = 0; # 0 = blank on startup
      "browser.newtabpage.enabled" = false;
      "browser.toolbars.bookmarks.visibility" = "never";
    };
  };

  # --- Common desktop tools (system-wide to stay username-agnostic) ---
  environment.systemPackages = with pkgs; [
    ghostty # terminal — required to actually use the GUI
    fuzzel # launcher
    swaybg # wallpaper
    xwayland-satellite # run X11 apps under niri
    mako # notifications
    libnotify # notify-send
    gnupg # gpg
    pinentry-gnome3 # passphrase prompt for the gpg agent
  ];

  # --- Fonts (base) ---
  # Common packages + fontconfig; each machine sets its own defaultFonts (the
  # monospace family differs) and any extra font packages.
  fonts = {
    enableDefaultPackages = true;
    fontconfig.enable = true;
    packages = with pkgs; [
      noto-fonts
      nerd-fonts.symbols-only
      adwaita-fonts
    ];
  };
}