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