me like nix
1# This is the configuration for your user 'sean'
2{ pkgs, inputs, ... }:
3
4{
5 # Import the home-manager modules you want to use
6 imports = [
7 inputs.catppuccin.homeModules.catppuccin
8 inputs.niri.homeModules.niri
9 inputs.zen-browser.homeModules.beta
10 ];
11
12 # Niri window manager settings, now controlled by the imported module
13 programs.niri = {
14 enable = true;
15 settings = {
16 layout = {
17 struts = {
18 top = 0;
19 bottom = 0;
20 };
21 };
22 gestures = {
23 hot-corners = {
24 };
25 };
26 binds = {
27 "Mod+d".action.spawn = [
28 "wofi"
29 "--show"
30 "drun"
31 "--prompt"
32 "Search..."
33 ];
34 "Mod+a".action.spawn = "alacritty";
35 "Mod+h".action = {
36 focus-column-left = { };
37 };
38 "Mod+j".action = {
39 focus-workspace-down = { };
40 };
41 "Mod+k".action = {
42 focus-workspace-up = { };
43 };
44 "Mod+l".action = {
45 focus-column-right = { };
46 };
47 "Mod+p".action = {
48 show-hotkey-overlay = { };
49 };
50 "Mod+o".action = {
51 toggle-overview = { };
52 };
53 "Mod+q".action = {
54 close-window = { };
55 };
56 "Mod+s".action = {
57 screenshot = {
58 show-pointer = true;
59 };
60 };
61 "Mod+1".action = {
62 set-column-width = "100%";
63 };
64 "Mod+2".action = {
65 set-column-width = "50%";
66 };
67 };
68 outputs = {
69 "DP-1" = {
70 scale = 2.0;
71 };
72 };
73 spawn-at-startup = [
74 { command = [ "xwayland-satellite" ]; }
75 { command = [ "swww-daemon" ]; }
76 { command = [ "udiskie -anv" ]; }
77 { command = [ "mako" ]; }
78 { command = [ "waybar" ]; }
79 { command = [ "/usr/bin/lxqt-policykit-agent" ]; }
80 { command = [ "wl-paste --watch cliphist store" ]; }
81 ];
82 environment = {
83 DISPLAY = ":0";
84 };
85 };
86 };
87
88 nixpkgs.config.allowUnfree = true;
89
90 xdg.configFile."waybar/config.jsonc".source = ./waybar/config.jsonc;
91 programs.waybar = {
92 enable = true;
93
94 style = ''
95
96 * {
97 font-family: FantasqueSansMono Nerd Font;
98 font-size: 14px;
99 min-height: 0;
100 }
101
102 #waybar {
103 background: transparent;
104 color: @text;
105 margin: 4px 4px;
106 }
107
108 #workspaces {
109 border-radius: 1rem;
110 margin: 4px;
111 background-color: @surface0;
112 margin-left: 1rem;
113 }
114
115 #workspaces button {
116 color: @lavender;
117 border-radius: 1rem;
118 padding: 0.4rem;
119 }
120
121 #workspaces button.active {
122 color: @sky;
123 border-radius: 1rem;
124 }
125
126 #workspaces button:hover {
127 color: @sapphire;
128 border-radius: 1rem;
129 }
130
131 #custom-music,
132 #tray,
133 #backlight,
134 #clock,
135 #battery,
136 #pulseaudio,
137 #network,
138 #power-profiles-daemon,
139 #cpu,
140 #memory,
141 #temperature,
142 #custom-lock,
143 #custom-power {
144 background-color: @surface0;
145 padding: 0.5rem 1rem;
146 margin: 4px 0;
147 }
148
149 #clock {
150 color: @blue;
151 border-radius: 0px 1rem 1rem 0px;
152 margin-right: 1rem;
153 }
154
155 #battery {
156 color: @green;
157 }
158
159 #battery.charging {
160 color: @green;
161 }
162
163 #battery.warning:not(.charging) {
164 color: @red;
165 }
166
167 #backlight {
168 color: @yellow;
169 }
170
171 #backlight, #battery {
172 border-radius: 0;
173 }
174
175 #pulseaudio {
176 color: @maroon;
177 border-radius: 1rem 0px 0px 1rem;
178 margin-left: 1rem;
179 }
180
181 #custom-music {
182 color: @mauve;
183 border-radius: 1rem;
184 }
185
186 #custom-lock {
187 border-radius: 1rem 0px 0px 1rem;
188 color: @lavender;
189 }
190
191 #custom-power {
192 margin-right: 1rem;
193 border-radius: 0px 1rem 1rem 0px;
194 color: @red;
195 }
196
197 #tray {
198 margin-right: 1rem;
199 border-radius: 1rem;
200 }
201 '';
202 };
203
204 programs.ssh = {
205 enable = true;
206 extraConfig = ''
207 Host *
208 IdentityAgent ~/.1password/agent.sock
209 '';
210 };
211
212 # All your user-specific packages
213 home.packages = with pkgs; [
214 helix
215 git
216 jujutsu
217 htop
218 zellij # terminal multiplexer
219 # --- ESSENTIAL HYPRLAND ECOSYSTEM TOOLS ---
220 alacritty
221 wofi # Application launcher (or pkgs.rofi-wayland)
222 waybar # Status bar (highly recommended)
223 mako # Notification daemon
224 swww # For setting wallpapers
225 cliphist # Clipboard history manager
226 slurp # For selecting a region for screenshots
227 grim # For taking screenshots
228 pavucontrol # GUI for PulseAudio/PipeWire volume control
229 fd
230 ripgrep
231 yazi
232 gh
233 signal-desktop
234 xwayland-satellite # for running x11 apps
235 nixfmt-rfc-style # nix formatter
236 nil # nix language server
237 atac # postman-like TUI
238 rsync # file sync utility
239 udiskie # for mounting external drives
240 darktable # photo editing
241 zoxide
242 chromium
243 claude-code
244 nautilus # file browser
245 xdg-desktop-portal-gnome # gnome gui stuff
246 sqlitebrowser
247
248 # --- FONTS ARE IMPORTANT ---
249 noto-fonts
250 noto-fonts-cjk-sans
251 noto-fonts-emoji
252 font-awesome # For icons in waybar, etc.
253 nerd-fonts.jetbrains-mono
254 # --- POLKIT AGENT (for 1Password GUI, etc.) ---
255 lxqt.lxqt-policykit # Lightweight polkit agent
256 ];
257
258 services.udiskie = {
259 enable = true;
260 tray = "auto";
261 automount = true;
262 };
263
264 programs.zen-browser.enable = true;
265 # programs.swww.enable = true;
266 programs.zoxide = {
267 enable = true;
268 enableFishIntegration = true;
269 };
270
271 # Program configurations
272 programs.git = {
273 enable = true;
274 userName = "seanaye";
275 userEmail = "hello@seanaye.ca";
276 extraConfig = {
277 init.defaultBranch = "main";
278 };
279 };
280 programs.jujutsu = {
281 enable = true;
282 settings.user = {
283 email = "hello@seanaye.ca";
284 name = "Sean Aye";
285 };
286 };
287
288 programs.home-manager.enable = true;
289
290 programs.fish = {
291 enable = true;
292 interactiveShellInit = ''
293 set fish_greeting
294 '';
295 };
296
297 programs.starship = {
298 enable = true;
299 enableFishIntegration = true;
300 };
301
302 catppuccin = {
303 enable = true;
304 flavor = "frappe";
305 };
306
307 programs.alacritty = {
308 enable = true;
309 settings = {
310 window = {
311 decorations = "none";
312 };
313 };
314
315 };
316
317 programs.helix = {
318 enable = true;
319 settings = {
320 editor = {
321 bufferline = "multiple";
322 file-picker = {
323 hidden = false;
324 git-ignore = true;
325 };
326 cursor-shape = {
327 insert = "bar";
328 normal = "block";
329 select = "underline";
330 };
331 line-number = "relative";
332 cursorline = true;
333 auto-format = true;
334 end-of-line-diagnostics = "hint";
335 soft-wrap = {
336 enable = true;
337 };
338 lsp = {
339 display-inlay-hints = true;
340 display-messages = true;
341 display-progress-messages = true;
342 };
343 inline-diagnostics = {
344 cursor-line = "hint";
345 };
346 };
347 keys = {
348 normal = {
349 esc = [
350 "keep_primary_selection"
351 "collapse_selection"
352 ];
353 };
354
355 };
356 };
357 languages = {
358 language = [
359 {
360 name = "nix";
361 auto-format = true;
362 formatter = {
363 command = "${pkgs.nixfmt-rfc-style}/bin/nixfmt";
364 };
365 }
366 {
367 name = "rust";
368 auto-format = true;
369 formatter = {
370 command = "${pkgs.rustfmt}/bin/rustfmt --edition 2024";
371 };
372 indent = {
373 tab-width = 4;
374 unit = "t";
375 };
376 }
377 ];
378 };
379 };
380
381 # Session variables
382 home.sessionVariables = {
383 EDITOR = "hx";
384 VISUAL = "hx";
385 SUDO_EDITOR = "hx";
386 NIXOS_OZONE_WL = "1";
387 QT_QPA_PLATFORM = "wayland;xcb";
388 QT_WAYLAND_DISABLE_WINDOWDECORATION = "1";
389 SDL_VIDEODRIVER = "wayland";
390 XDG_CURRENT_DESKTOP = "Niri";
391 XDG_SESSION_TYPE = "wayland";
392 SSH_AUTH_SOCK = "~/.1password/agent.sock";
393 };
394
395 # Set the state version for Home Manager
396 home.stateVersion = "25.05";
397}