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