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