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 = [ "udiskie -anv" ]; }
77 { command = [ "mako" ]; }
78 { command = [ "waybar" ]; }
79 { command = [ "/usr/bin/lxqt-policykit-agent" ]; }
80 { command = [ "wl-paste --watch cliphist store" ]; }
81 ];
82 environment = {
83 DISPLAY = ":0";
84 };
85 };
86 };
87
88 nixpkgs.config.allowUnfree = true;
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
110 htop
111 zellij # terminal multiplexer
112 # --- ESSENTIAL HYPRLAND ECOSYSTEM TOOLS ---
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 slurp # For selecting a region for screenshots
120 grim # For taking screenshots
121 pavucontrol # GUI for PulseAudio/PipeWire volume control
122 fd
123 ripgrep
124 yazi
125 gh
126 signal-desktop
127 xwayland-satellite # for running x11 apps
128 nixfmt-rfc-style # nix formatter
129 nil # nix language server
130 atac # postman-like TUI
131 rsync # file sync utility
132 udiskie # for mounting external drives
133 darktable # photo editing
134 zoxide
135 chromium
136 claude-code
137 nautilus # file browser
138 xdg-desktop-portal-gnome # gnome gui stuff
139 sqlitebrowser
140 gnome-characters # symbol picker
141
142 # --- FONTS ARE IMPORTANT ---
143 noto-fonts
144 noto-fonts-cjk-sans
145 noto-fonts-emoji
146 font-awesome # For icons in waybar, etc.
147 nerd-fonts.jetbrains-mono
148 # --- POLKIT AGENT (for 1Password GUI, etc.) ---
149 lxqt.lxqt-policykit # Lightweight polkit agent
150 ];
151
152 services.udiskie = {
153 enable = true;
154 tray = "auto";
155 automount = true;
156 };
157
158 programs.zen-browser.enable = true;
159 # programs.swww.enable = true;
160 programs.zoxide = {
161 enable = true;
162 enableFishIntegration = true;
163 };
164
165 programs.obs-studio = {
166 enable = true;
167 plugins = with pkgs.obs-studio-plugins; [
168 wlrobs
169 obs-backgroundremoval
170 obs-pipewire-audio-capture
171 ];
172 };
173
174 # Program configurations
175 programs.git = {
176 enable = true;
177 userName = "seanaye";
178 userEmail = "hello@seanaye.ca";
179 extraConfig = {
180 init.defaultBranch = "main";
181 };
182 };
183 programs.jujutsu = {
184 enable = true;
185 settings.user = {
186 email = "hello@seanaye.ca";
187 name = "Sean Aye";
188 };
189 };
190
191 programs.home-manager.enable = true;
192
193 programs.fish = {
194 enable = true;
195 interactiveShellInit = ''
196 set fish_greeting
197 '';
198 };
199
200 programs.starship = {
201 enable = true;
202 enableFishIntegration = true;
203 };
204
205 catppuccin = {
206 enable = true;
207 flavor = "frappe";
208 };
209
210 programs.alacritty = {
211 enable = true;
212 settings = {
213 window = {
214 decorations = "none";
215 };
216 };
217
218 };
219
220 programs.helix = {
221 enable = true;
222 settings = {
223 editor = {
224 bufferline = "multiple";
225 file-picker = {
226 hidden = false;
227 git-ignore = true;
228 };
229 cursor-shape = {
230 insert = "bar";
231 normal = "block";
232 select = "underline";
233 };
234 line-number = "relative";
235 cursorline = true;
236 auto-format = true;
237 end-of-line-diagnostics = "hint";
238 soft-wrap = {
239 enable = true;
240 };
241 lsp = {
242 display-inlay-hints = true;
243 display-messages = true;
244 display-progress-messages = true;
245 };
246 inline-diagnostics = {
247 cursor-line = "hint";
248 };
249 };
250 keys = {
251 normal = {
252 esc = [
253 "keep_primary_selection"
254 "collapse_selection"
255 ];
256 };
257
258 };
259 };
260 languages = {
261 language = [
262 {
263 name = "nix";
264 auto-format = true;
265 formatter = {
266 command = "${pkgs.nixfmt-rfc-style}/bin/nixfmt";
267 };
268 }
269 {
270 name = "rust";
271 auto-format = true;
272 formatter = {
273 command = "${pkgs.rustfmt}/bin/rustfmt --edition 2024";
274 };
275 indent = {
276 tab-width = 4;
277 unit = "t";
278 };
279 }
280 ];
281 };
282 };
283
284 # Session variables
285 home.sessionVariables = {
286 EDITOR = "hx";
287 VISUAL = "hx";
288 SUDO_EDITOR = "hx";
289 NIXOS_OZONE_WL = "1";
290 QT_QPA_PLATFORM = "wayland;xcb";
291 QT_WAYLAND_DISABLE_WINDOWDECORATION = "1";
292 SDL_VIDEODRIVER = "wayland";
293 XDG_CURRENT_DESKTOP = "Niri";
294 XDG_SESSION_TYPE = "wayland";
295 SSH_AUTH_SOCK = "~/.1password/agent.sock";
296 };
297
298 # Set the state version for Home Manager
299 home.stateVersion = "25.05";
300}