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