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