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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
# Minimal niri desktop for enzo — deliberately separate from ../../profiles/desktop.nix
# so the laptop can grow on its own terms. Add to it (or switch to the shared
# profile) whenever you want more.
{ pkgs, ... }:
{
# --- Session / login ---
programs.niri.enable = true;
programs.dconf.enable = true;
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";
TTYReset = true;
TTYVHangup = true;
TTYVTDisallocate = true;
};
# --- Graphics ---
hardware.graphics.enable = true;
# --- Audio (playback only; no rtkit/jack — enzo isn't for recording).
# If you ever hear dropouts under load, add: security.rtkit.enable = true;
services.pulseaudio.enable = false;
services.pipewire = {
enable = true;
alsa.enable = true;
pulse.enable = true;
};
# --- Fonts (minimal) ---
# TODO move to common
fonts = {
enableDefaultPackages = true;
packages = with pkgs; [
noto-fonts
nerd-fonts.symbols-only
adwaita-fonts
];
fontconfig = {
enable = true;
defaultFonts = {
monospace = [ "Adwaita Mono" ];
};
};
};
environment.sessionVariables = {
XCURSOR_THEME = "Adwaita";
XCURSOR_SIZE = "24";
};
# Cursor theme referenced by XCURSOR_THEME / niri's xcursor-theme. Without this
# package the Adwaita cursor files aren't on disk, so named shapes (e.g. the
# link "pointer"/hand) fail to load and the cursor never changes on hover.
environment.systemPackages = [ pkgs.adwaita-icon-theme ];
# --- User: groups + niri essentials ---
users.users.hwebs.extraGroups = [
"audio"
"input"
];
# Firefox customizations. The native NixOS module has no profile/userChrome
# support (that's Home Manager); instead `preferences` are delivered as a
# Firefox enterprise policy (etc/firefox/policies/policies.json), so they
# apply to every profile without managing one. preferencesStatus = "default"
# means these seed the defaults but stay overridable in the UI.
#
# This covers dark chrome, blank home/new-tab, and hiding the bookmarks
# toolbar. Fully removing the nav/tab toolbars needs userChrome.css, which
# this module can't ship — would require Home Manager or an activation hack.
programs.firefox = {
enable = true;
preferencesStatus = "default";
preferences = {
# Dark theme (UI chrome + toolbars)
"ui.systemUsesDarkTheme" = 1;
"browser.theme.content-theme" = 0;
"browser.theme.toolbar-theme" = 0;
# Blank home page + blank new tab
"browser.startup.homepage" = "about:blank";
"browser.startup.page" = 0; # 0 = blank on startup
"browser.newtabpage.enabled" = false;
# Hide the bookmarks toolbar
"browser.toolbars.bookmarks.visibility" = "never";
};
};
users.users.hwebs.packages = with pkgs; [
ghostty # terminal
fuzzel # launcher
swaybg # wallpaper
xwayland-satellite # run X11 apps under niri
mako # notifications
libnotify # notify-send
yambar # text status bar
gnupg # gpg
pinentry-gnome3 # passphrase prompt for the gpg agent
];
# --- GPG ---
# Agent + a GTK pinentry (works under niri). enableSSHSupport is left off so
# gpg-agent doesn't hijack the ssh-agent socket for your existing SSH key;
# turn it on only if you sign in via a GPG auth subkey.
programs.gnupg.agent.enable = true;
# --- Console / greeter font (HiDPI panel) ---
# The eDP panel is high-density, so the kernel VT and tuigreet render with a
# tiny 8x16 font. A large Terminus bitmap font makes the TTY and the greeter
# legible; earlySetup applies it from initrd so it's big from the first frame.
# Sizes: ter-v{16,18,20,22,24,28,32}n — bump/drop to taste.
console = {
earlySetup = true;
packages = [ pkgs.terminus_font ];
font = "ter-v32n";
};
}
|