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 window-rules = [
17 {
18 geometry-corner-radius = {
19 top-left = 12.0;
20 top-right = 12.0;
21 bottom-left = 12.0;
22 bottom-right = 12.0;
23 };
24 clip-to-geometry = true;
25 }
26 ];
27 layout = {
28 struts = {
29 top = 0;
30 bottom = 0;
31 };
32 };
33 gestures = {
34 hot-corners = {
35 enable = false;
36 };
37 };
38 binds = {
39 "Mod+d".action.spawn = [
40 "wofi"
41 "--show"
42 "drun"
43 "--prompt"
44 "Search..."
45 ];
46 "Mod+a".action.spawn = "alacritty";
47 "Mod+h".action = {
48 focus-column-left = { };
49 };
50 "Mod+j".action = {
51 focus-workspace-down = { };
52 };
53 "Mod+k".action = {
54 focus-workspace-up = { };
55 };
56 "Mod+l".action = {
57 focus-column-right = { };
58 };
59 "Mod+Shift+h".action = {
60 move-column-left = { };
61 };
62 "Mod+Shift+j".action = {
63 move-window-down-or-to-workspace-down = { };
64 };
65 "Mod+Shift+k".action = {
66 move-window-up-or-to-workspace-up = { };
67 };
68 "Mod+Shift+l".action = {
69 move-column-right = { };
70 };
71 "Mod+Down".action = {
72 move-workspace-down = { };
73 };
74 "Mod+Up".action = {
75 move-workspace-up = { };
76 };
77 "Mod+p".action = {
78 show-hotkey-overlay = { };
79 };
80 "Mod+o".action = {
81 toggle-overview = { };
82 };
83 "Mod+q".action = {
84 close-window = { };
85 };
86 "Mod+s".action = {
87 screenshot = {
88 show-pointer = true;
89 };
90 };
91 "Mod+1".action = {
92 set-column-width = "100%";
93 };
94 "Mod+2".action = {
95 set-column-width = "50%";
96 };
97 "XF86MonBrightnessDown".action.spawn = [
98 "brightnessctl"
99 "set"
100 "5%-"
101 ];
102 "XF86MonBrightnessUp".action.spawn = [
103 "brightnessctl"
104 "set"
105 "+5%"
106 ];
107 };
108 outputs = {
109 "DP-1" = {
110 scale = 2.0;
111 };
112 "DP-7" = {
113 scale = 2.0;
114 };
115 };
116 spawn-at-startup = [
117 { command = [ "xwayland-satellite" ]; }
118 { command = [ "swww-daemon" ]; }
119 { command = [ "mako" ]; }
120 { command = [ "waybar" ]; }
121 { command = [ "wl-paste --watch cliphist store" ]; }
122 ];
123 environment = {
124 DISPLAY = ":0";
125 };
126 };
127 };
128
129 # Allow unfree packages
130 nixpkgs.config.allowUnfree = true;
131
132 nixpkgs.config.permittedInsecurePackages = [
133 "libsoup-2.74.3"
134 ];
135
136 xdg.configFile."waybar/config.jsonc".source = ./waybar/config.jsonc;
137 programs.waybar = {
138 enable = true;
139
140 style = builtins.readFile ./waybar/style.css;
141 };
142
143 programs.ssh = {
144 enable = true;
145 extraConfig = ''
146 Host *
147 IdentityAgent ~/.1password/agent.sock
148 '';
149 };
150
151 programs.awscli = {
152 enable = true;
153 settings = {
154 "default" = {
155 region = "us-east-2";
156 };
157 };
158 };
159
160 # All your user-specific packages
161 home.packages = with pkgs; [
162 helix
163 git
164 jujutsu # jj-cli
165 htop
166 zellij # terminal multiplexer
167 alacritty
168 wofi # Application launcher (or pkgs.rofi-wayland)
169 waybar # Status bar (highly recommended)
170 mako # Notification daemon
171 swww # For setting wallpapers
172 cliphist # Clipboard history manager
173 pavucontrol # GUI for PulseAudio/PipeWire volume control
174 fd
175 ripgrep
176 yazi # tui file browser
177 gh # github cli
178 signal-desktop
179 xwayland-satellite # for running x11 apps
180 nixfmt-rfc-style # nix formatter
181 nil # nix language server
182 atac # postman-like TUI
183 trippy # network analyzer
184 rsync # file sync utility
185 udiskie # for mounting external drives
186 # darktable # photo editing
187 zoxide
188 chromium
189 claude-code
190 nautilus # file browser
191 sqlitebrowser
192 gnome-characters # symbol picker
193 sendme # file transfer
194 desktop-file-utils # for managing .desktop files
195 flyctl # fly.io cli
196 vscode-json-languageserver
197 gnome-network-displays
198 doppler # secret management
199
200 # --- FONTS ARE IMPORTANT ---
201 noto-fonts
202 noto-fonts-cjk-sans
203 noto-fonts-emoji
204 font-awesome # For icons in waybar, etc.
205 nerd-fonts.jetbrains-mono
206 # --- POLKIT AGENT (for 1Password GUI, etc.) ---
207 lxqt.lxqt-policykit # Lightweight polkit agent
208 ];
209
210 services.udiskie = {
211 enable = true;
212 tray = "auto";
213 automount = true;
214 };
215
216 programs.direnv.enable = true;
217
218 programs.zellij = {
219 enable = true;
220 settings = {
221 keybinds = {
222 unbind = [ "Ctrl q" ];
223 };
224 ui = {
225 pane_frames = false;
226 };
227 };
228 };
229
230 programs.zen-browser.enable = true;
231 # programs.swww.enable = true;
232 programs.zoxide = {
233 enable = true;
234 enableFishIntegration = true;
235 };
236
237 programs.obs-studio = {
238 enable = true;
239 plugins = with pkgs.obs-studio-plugins; [
240 obs-backgroundremoval
241 ];
242 };
243
244 # Program configurations
245 programs.git = {
246 enable = true;
247 userName = "seanaye";
248 userEmail = "hello@seanaye.ca";
249 extraConfig = {
250 init.defaultBranch = "main";
251 };
252 };
253 programs.jujutsu = {
254 enable = true;
255 settings.user = {
256 email = "hello@seanaye.ca";
257 name = "Sean Aye";
258 };
259 };
260
261 programs.home-manager.enable = true;
262
263 programs.fish = {
264 enable = true;
265 interactiveShellInit = ''
266 set fish_greeting
267 # Load 1Password CLI plugins
268 if test -f ~/.config/op/plugins.sh
269 source ~/.config/op/plugins.sh
270 end
271 '';
272 functions = {
273 s3edit = ''
274 set file (basename $argv[1])
275 set tmpfile /tmp/$file
276 aws s3 cp $argv[1] $tmpfile
277 and $EDITOR $tmpfile
278 and aws s3 cp $tmpfile $argv[1]
279 '';
280 };
281 };
282
283 programs.starship = {
284 enable = true;
285 enableFishIntegration = true;
286 };
287
288 catppuccin = {
289 enable = true;
290 flavor = "frappe";
291 };
292
293 programs.alacritty = {
294 enable = true;
295 settings = {
296 window = {
297 decorations = "none";
298 };
299 };
300
301 };
302
303 programs.helix = {
304 enable = true;
305 settings = {
306 editor = {
307 bufferline = "multiple";
308 file-picker = {
309 hidden = false;
310 git-ignore = true;
311 };
312 cursor-shape = {
313 insert = "bar";
314 normal = "block";
315 select = "underline";
316 };
317 line-number = "relative";
318 cursorline = true;
319 auto-format = true;
320 end-of-line-diagnostics = "hint";
321 soft-wrap = {
322 enable = true;
323 };
324 lsp = {
325 display-inlay-hints = true;
326 display-messages = true;
327 display-progress-messages = true;
328 };
329 inline-diagnostics = {
330 cursor-line = "hint";
331 };
332 };
333 keys = {
334 normal = {
335 esc = [
336 "keep_primary_selection"
337 "collapse_selection"
338 ];
339 };
340
341 };
342 };
343 languages = {
344 language = [
345 {
346 name = "nix";
347 auto-format = true;
348 formatter = {
349 command = "${pkgs.nixfmt-rfc-style}/bin/nixfmt";
350 };
351 }
352 {
353 name = "kotlin";
354 auto-format = true;
355 }
356 {
357 name = "rust";
358 auto-format = true;
359 formatter = {
360 command = "rustfmt";
361 args = [
362 "--edition"
363 "2024"
364 ];
365 };
366 indent = {
367 tab-width = 4;
368 unit = "t";
369 };
370 }
371 {
372 name = "astro";
373 auto-format = true;
374 formatter = {
375 command = "npx";
376 args = [
377 "prettier"
378 "--plugin"
379 "prettier-plugin-astro"
380 "--parser"
381 "astro"
382 ];
383 };
384 }
385 {
386 name = "json";
387 auto-format = true;
388 }
389 ];
390 };
391 };
392
393 dconf.settings = {
394 "org/gnome/desktop/interface" = {
395 color-scheme = "prefer-dark";
396 enable-hot-corners = false;
397 };
398 };
399
400 # Session variables
401 home.sessionVariables = {
402 EDITOR = "hx";
403 VISUAL = "hx";
404 SUDO_EDITOR = "hx";
405 SSH_AUTH_SOCK = "~/.1password/agent.sock";
406 };
407
408 # Set the state version for Home Manager
409 home.stateVersion = "25.05";
410}