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