me like nix
0

Configure Feed

Select the types of activity you want to include in your feed.

1{ 2 pkgs, 3 inputs, 4 config, 5 ... 6}: 7 8{ 9 # Import the home-manager modules you want to use 10 imports = [ 11 inputs.catppuccin.homeModules.catppuccin 12 inputs.niri.homeModules.niri 13 inputs.zen-browser.homeModules.beta 14 ]; 15 16 programs.niri = { 17 enable = true; 18 settings = { 19 window-rules = [ 20 { 21 geometry-corner-radius = { 22 top-left = 5.0; 23 top-right = 5.0; 24 bottom-left = 5.0; 25 bottom-right = 5.0; 26 }; 27 clip-to-geometry = true; 28 draw-border-with-background = false; 29 } 30 ]; 31 layout = { 32 struts = { 33 top = 0; 34 bottom = 0; 35 left = 8; 36 right = 8; 37 }; 38 gaps = 8; 39 }; 40 gestures = { 41 hot-corners = { 42 enable = false; 43 }; 44 }; 45 binds = { 46 "Mod+d".action.spawn = "fuzzel"; 47 "Mod+e".action.spawn = "bemoji"; 48 "Mod+n".action.spawn = "networkmanager_dmenu"; 49 "Mod+a".action.spawn = "alacritty"; 50 "Mod+h".action = { 51 focus-column-left = { }; 52 }; 53 "Mod+j".action = { 54 focus-workspace-down = { }; 55 }; 56 "Mod+k".action = { 57 focus-workspace-up = { }; 58 }; 59 "Mod+l".action = { 60 focus-column-right = { }; 61 }; 62 "Mod+Shift+h".action = { 63 move-column-left = { }; 64 }; 65 "Mod+Shift+j".action = { 66 move-window-down-or-to-workspace-down = { }; 67 }; 68 "Mod+Shift+k".action = { 69 move-window-up-or-to-workspace-up = { }; 70 }; 71 "Mod+Shift+l".action = { 72 move-column-right = { }; 73 }; 74 "Mod+Down".action = { 75 move-workspace-down = { }; 76 }; 77 "Mod+Up".action = { 78 move-workspace-up = { }; 79 }; 80 "Mod+p".action = { 81 show-hotkey-overlay = { }; 82 }; 83 "Mod+o".action = { 84 toggle-overview = { }; 85 }; 86 "Mod+q".action = { 87 close-window = { }; 88 }; 89 "Mod+s".action = { 90 screenshot = { 91 show-pointer = true; 92 }; 93 }; 94 "Mod+1".action = { 95 set-column-width = "100%"; 96 }; 97 "Mod+2".action = { 98 set-column-width = "50%"; 99 }; 100 "XF86MonBrightnessDown".action.spawn = [ 101 "brightnessctl" 102 "set" 103 "5%-" 104 ]; 105 "XF86MonBrightnessUp".action.spawn = [ 106 "brightnessctl" 107 "set" 108 "+5%" 109 ]; 110 }; 111 outputs = { 112 # External monitor - primary display at position (0, 0) 113 "DP-5" = { 114 scale = 2.0; 115 mode = { 116 width = 5120; 117 height = 2160; 118 refresh = 120.0; 119 }; 120 position = { 121 x = 0; 122 y = 0; 123 }; 124 }; 125 "DP-1" = { 126 scale = 2.0; 127 mode = { 128 width = 5120; 129 height = 2160; 130 refresh = 120.0; 131 }; 132 position = { 133 x = 0; 134 y = 0; 135 }; 136 }; 137 "DP-2" = { 138 scale = 2.0; 139 mode = { 140 width = 5120; 141 height = 2160; 142 refresh = 120.0; 143 }; 144 position = { 145 x = 0; 146 y = 0; 147 }; 148 }; 149 "DP-7" = { 150 scale = 2.0; 151 mode = { 152 width = 5120; 153 height = 2160; 154 refresh = 120.0; 155 }; 156 position = { 157 x = 0; 158 y = 0; 159 }; 160 }; 161 # Laptop display - secondary display positioned underneath 162 "eDP-1" = { 163 scale = 1.5; 164 mode = { 165 width = 2560; 166 height = 1600; 167 refresh = 165.0; 168 }; 169 position = { 170 x = 0; 171 y = 1080; # Position underneath the external monitor (2160 / 2 scale = 1080 logical height) 172 }; 173 }; 174 }; 175 spawn-at-startup = [ 176 { command = [ "xwayland-satellite" ]; } 177 { command = [ "swww-daemon" ]; } 178 { command = [ "mako" ]; } 179 { command = [ "quickshell" "-p" "${./quickshell/shell.qml}" ]; } 180 { command = [ "wl-paste --watch cliphist store" ]; } 181 ]; 182 environment = { 183 DISPLAY = ":0"; 184 }; 185 }; 186 }; 187 188 # Allow unfree packages 189 nixpkgs.config.allowUnfree = true; 190 191 nixpkgs.config.permittedInsecurePackages = [ 192 "libsoup-2.74.3" 193 ]; 194 195 # Quickshell status bar (QML config in ./quickshell/shell.qml) 196 197 programs.ssh = { 198 enable = true; 199 enableDefaultConfig = false; 200 matchBlocks = { 201 "*" = { 202 extraOptions = { 203 IdentityAgent = "${config.home.homeDirectory}/.1password/agent.sock"; 204 }; 205 }; 206 }; 207 }; 208 209 programs.awscli = { 210 enable = true; 211 settings = { 212 "default" = { 213 region = "us-east-1"; 214 }; 215 }; 216 }; 217 218 # All your user-specific packages 219 home.packages = with pkgs; [ 220 helix 221 git 222 jujutsu # jj-cli 223 htop 224 zellij # terminal multiplexer 225 alacritty 226 fuzzel # Application launcher 227 bemoji # emoji picker 228 networkmanager_dmenu # network picker for fuzzel 229 quickshell # Status bar (QML-based) 230 mako # Notification daemon 231 swww # For setting wallpapers 232 cliphist # Clipboard history manager 233 pavucontrol # GUI for PulseAudio/PipeWire volume control 234 fd 235 ripgrep 236 yazi # tui file browser 237 gh # github cli 238 signal-desktop 239 xwayland-satellite # for running x11 apps 240 nixfmt-rfc-style # nix formatter 241 nil # nix language server 242 atac # postman-like TUI 243 trippy # network analyzer 244 rsync # file sync utility 245 udiskie # for mounting external drives 246 darktable # photo editing 247 zoxide 248 chromium 249 claude-code 250 nautilus # file browser 251 sqlitebrowser 252 gnome-characters # symbol picker 253 sendme # file transfer 254 desktop-file-utils # for managing .desktop files 255 flyctl # fly.io cli 256 vscode-json-languageserver 257 gnome-network-displays 258 doppler # secret management 259 rainfrog # db tui 260 loupe # image viewer 261 glycin-loaders # various format loaders for loupe 262 docker-compose 263 discord 264 prismlauncher # minecraft launcher 265 atuin 266 267 # --- FONTS ARE IMPORTANT --- 268 # Berkeley Mono is the main system font, keeping JetBrains and Font Awesome for icons 269 font-awesome 270 noto-fonts 271 noto-fonts-cjk-sans 272 noto-fonts-color-emoji 273 nerd-fonts.jetbrains-mono 274 nerd-fonts.symbols-only 275 # --- POLKIT AGENT (for 1Password GUI, etc.) --- 276 lxqt.lxqt-policykit # Lightweight polkit agent 277 ]; 278 279 services.udiskie = { 280 enable = true; 281 tray = "auto"; 282 automount = true; 283 }; 284 285 catppuccin = { 286 enable = true; 287 flavor = "frappe"; 288 }; 289 290 programs.fuzzel.enable = true; 291 292 programs.direnv.enable = true; 293 294 programs.zellij = { 295 enable = true; 296 settings = { 297 keybinds = { 298 unbind = [ 299 "Ctrl q" 300 "Ctrl o" 301 ]; 302 normal = { 303 "bind \"Ctrl m\"" = { 304 SwitchToMode = "Session"; 305 }; 306 }; 307 }; 308 pane_frames = false; 309 ui = { 310 pane_frames.hide_session_name = true; 311 }; 312 }; 313 }; 314 315 programs.zen-browser.enable = true; 316 # programs.swww.enable = true; 317 programs.zoxide = { 318 enable = true; 319 enableFishIntegration = true; 320 }; 321 322 programs.obs-studio = { 323 enable = true; 324 plugins = with pkgs.obs-studio-plugins; [ 325 obs-backgroundremoval 326 ]; 327 }; 328 329 # Program configurations 330 programs.git = { 331 enable = true; 332 settings = { 333 user = { 334 name = "seanaye"; 335 email = "hello@seanaye.ca"; 336 }; 337 init.defaultBranch = "main"; 338 }; 339 }; 340 programs.jujutsu = { 341 enable = true; 342 settings = { 343 user = { 344 email = "hello@seanaye.ca"; 345 name = "Sean Aye"; 346 }; 347 signing = { 348 sign-all = true; 349 behavior = "own"; 350 backend = "ssh"; 351 key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDCIqgZ7kedxo+mOW7YG73Vp3zel3h180y3GKvHtRsXfGlpIIvRDy7pgCBQ4AGXYD4y78URQmFohYSAPqCPOPaWcU2un3XG9KvCzEsHmsbskPonitUmCiKvrKkb6oW4jCBtd7AEtBn+AiajAQFtPZ7NN2Df3AmTypvR6Irg7R+nxnfc9NTIHmGvxSDyWcbb4pguL20sctUSqGL6xGh8q/bqhdOThSimM+z9bEUNxK/5rPhwkNniMrp4pJcUrUiAh5/4DiRFG6KT+oeg+/myoz/Z1sPvAs7u/8JDQI4RshRD8Hu0oTkRBN6Hxj478q2SXbeBUZlD6IdjP3RhGpmSecoDdtWqKbpuV3eVRtQtba3KL86GBeV/bugaOdJ1Aud+1SOFJreAAuvxzMMKT+cdQZk6oOPP148DA/No+mDm/2S43lcdCXh79wA6YRAmKQ8jmZxTCtPutrvuZK1rguvvUlEoG/vhdNHh7eDa4Td07V6bjCRPUl8qk/e4M0E3pwsTlZc="; 352 }; 353 }; 354 }; 355 356 programs.home-manager.enable = true; 357 358 programs.fish = { 359 enable = true; 360 interactiveShellInit = '' 361 set fish_greeting 362 # Set 1Password SSH agent socket 363 set -gx SSH_AUTH_SOCK ${config.home.homeDirectory}/.1password/agent.sock 364 # Load 1Password CLI plugins 365 if test -f ~/.config/op/plugins.sh 366 source ~/.config/op/plugins.sh 367 end 368 # Initialize atuin shell history 369 atuin init fish | source 370 371 function y 372 set tmp (mktemp -t "yazi-cwd.XXXXXX") 373 yazi $argv --cwd-file="$tmp" 374 if read -z cwd < "$tmp"; and [ -n "$cwd" ]; and [ "$cwd" != "$PWD" ] 375 builtin cd -- "$cwd" 376 end 377 rm -f -- "$tmp" 378 end 379 ''; 380 functions = { 381 s3edit = '' 382 set file (basename $argv[1]) 383 set tmpfile /tmp/$file 384 aws s3 cp $argv[1] $tmpfile 385 and $EDITOR $tmpfile 386 and aws s3 cp $tmpfile $argv[1] 387 ''; 388 }; 389 }; 390 391 programs.starship = { 392 enable = true; 393 enableFishIntegration = true; 394 }; 395 396 programs.alacritty = { 397 enable = true; 398 settings = { 399 window = { 400 decorations = "none"; 401 opacity = 0.9; 402 }; 403 font = { 404 normal = { 405 family = "BerkeleyMono Nerd Font"; 406 style = "Regular"; 407 }; 408 size = 12.0; 409 }; 410 }; 411 412 }; 413 414 programs.helix = { 415 enable = true; 416 settings = { 417 editor = { 418 bufferline = "multiple"; 419 file-picker = { 420 hidden = false; 421 git-ignore = true; 422 }; 423 cursor-shape = { 424 insert = "bar"; 425 normal = "block"; 426 select = "underline"; 427 }; 428 line-number = "relative"; 429 cursorline = true; 430 auto-format = true; 431 end-of-line-diagnostics = "hint"; 432 soft-wrap = { 433 enable = true; 434 }; 435 lsp = { 436 display-inlay-hints = true; 437 display-messages = true; 438 display-progress-messages = true; 439 }; 440 inline-diagnostics = { 441 cursor-line = "hint"; 442 }; 443 }; 444 keys = { 445 normal = { 446 esc = [ 447 "keep_primary_selection" 448 "collapse_selection" 449 ]; 450 }; 451 452 }; 453 }; 454 languages = { 455 456 language-server.rust-analyzer = { 457 config = { 458 check = { 459 command = "clippy"; 460 }; 461 checkOnSave = true; 462 cargo = { 463 allFeatures = true; 464 }; 465 }; 466 }; 467 language-server.deno-lsp = { 468 command = "deno"; 469 args = [ "lsp" ]; 470 config.deno.enable = true; 471 }; 472 473 language = [ 474 { 475 name = "html"; 476 formatter = { 477 command = "prettier"; 478 args = [ 479 "--parser" 480 "html" 481 ]; 482 }; 483 } 484 { 485 name = "nix"; 486 auto-format = true; 487 formatter = { 488 command = "${pkgs.nixfmt-rfc-style}/bin/nixfmt"; 489 }; 490 } 491 { 492 name = "kotlin"; 493 auto-format = true; 494 } 495 { 496 name = "rust"; 497 auto-format = true; 498 formatter = { 499 command = "rustfmt"; 500 args = [ 501 "--edition" 502 "2024" 503 ]; 504 }; 505 indent = { 506 tab-width = 4; 507 unit = "t"; 508 }; 509 } 510 { 511 name = "astro"; 512 auto-format = true; 513 formatter = { 514 command = "npx"; 515 args = [ 516 "prettier" 517 "--plugin" 518 "prettier-plugin-astro" 519 "--parser" 520 "astro" 521 ]; 522 }; 523 } 524 { 525 name = "json"; 526 auto-format = true; 527 } 528 { 529 name = "just"; 530 auto-format = true; 531 formatter = { 532 command = "just"; 533 args = [ 534 "--justfile" 535 "/dev/stdin" 536 "--dump" 537 ]; 538 }; 539 } 540 { 541 name = "toml"; 542 auto-format = true; 543 formatter = { 544 command = "taplo"; 545 args = [ 546 "format" 547 "-" 548 ]; 549 }; 550 } 551 # { 552 # name = "typescript"; 553 # roots = [ 554 # "deno.json" 555 # "deno.jsonc" 556 # ]; 557 # file-types = [ 558 # "ts" 559 # "tsx" 560 # ]; 561 # auto-format = true; 562 # language-servers = [ "deno-lsp" ]; 563 # } 564 ]; 565 }; 566 }; 567 568 dconf.settings = { 569 "org/gnome/desktop/interface" = { 570 color-scheme = "prefer-dark"; 571 enable-hot-corners = false; 572 }; 573 }; 574 575 # Font rendering configuration 576 fonts.fontconfig = { 577 enable = true; 578 defaultFonts = { 579 monospace = [ "BerkeleyMono Nerd Font" ]; 580 sansSerif = [ "Noto Sans" ]; 581 serif = [ "Noto Serif" ]; 582 }; 583 }; 584 585 # Cursor configuration 586 home.pointerCursor = { 587 name = "Adwaita"; 588 package = pkgs.adwaita-icon-theme; 589 size = 16; 590 x11.enable = true; 591 gtk.enable = true; 592 }; 593 594 # Session variables 595 home.sessionVariables = { 596 EDITOR = "hx"; 597 VISUAL = "hx"; 598 SUDO_EDITOR = "hx"; 599 SSH_AUTH_SOCK = "${config.home.homeDirectory}/.1password/agent.sock"; 600 }; 601 602 # Set the state version for Home Manager 603 home.stateVersion = "25.05"; 604}