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