me like nix
0

Configure Feed

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

1{ pkgs, inputs, ... }: 2 3{ 4 # Import the home-manager modules you want to use 5 imports = [ 6 inputs.catppuccin.homeModules.catppuccin 7 inputs.niri.homeModules.niri 8 inputs.zen-browser.homeModules.beta 9 ]; 10 11 # Niri window manager settings, now controlled by the imported module 12 programs.niri = { 13 enable = true; 14 settings = { 15 window-rules = [ 16 { 17 geometry-corner-radius = { 18 top-left = 12.0; 19 top-right = 12.0; 20 bottom-left = 12.0; 21 bottom-right = 12.0; 22 }; 23 clip-to-geometry = true; 24 draw-border-with-background = false; 25 } 26 ]; 27 layout = { 28 struts = { 29 top = 0; 30 bottom = 0; 31 }; 32 }; 33 gestures = { 34 hot-corners = { 35 enable = false; 36 }; 37 }; 38 binds = { 39 "Mod+d".action.spawn = "fuzzel"; 40 "Mod+e".action.spawn = "bemoji"; 41 "Mod+n".action.spawn = "networkmanager_dmenu"; 42 "Mod+a".action.spawn = "alacritty"; 43 "Mod+h".action = { 44 focus-column-left = { }; 45 }; 46 "Mod+j".action = { 47 focus-workspace-down = { }; 48 }; 49 "Mod+k".action = { 50 focus-workspace-up = { }; 51 }; 52 "Mod+l".action = { 53 focus-column-right = { }; 54 }; 55 "Mod+Shift+h".action = { 56 move-column-left = { }; 57 }; 58 "Mod+Shift+j".action = { 59 move-window-down-or-to-workspace-down = { }; 60 }; 61 "Mod+Shift+k".action = { 62 move-window-up-or-to-workspace-up = { }; 63 }; 64 "Mod+Shift+l".action = { 65 move-column-right = { }; 66 }; 67 "Mod+Down".action = { 68 move-workspace-down = { }; 69 }; 70 "Mod+Up".action = { 71 move-workspace-up = { }; 72 }; 73 "Mod+p".action = { 74 show-hotkey-overlay = { }; 75 }; 76 "Mod+o".action = { 77 toggle-overview = { }; 78 }; 79 "Mod+q".action = { 80 close-window = { }; 81 }; 82 "Mod+s".action = { 83 screenshot = { 84 show-pointer = true; 85 }; 86 }; 87 "Mod+1".action = { 88 set-column-width = "100%"; 89 }; 90 "Mod+2".action = { 91 set-column-width = "50%"; 92 }; 93 "XF86MonBrightnessDown".action.spawn = [ 94 "brightnessctl" 95 "set" 96 "5%-" 97 ]; 98 "XF86MonBrightnessUp".action.spawn = [ 99 "brightnessctl" 100 "set" 101 "+5%" 102 ]; 103 }; 104 outputs = { 105 "DP-1" = { 106 scale = 2.0; 107 }; 108 "DP-2" = { 109 scale = 2.0; 110 }; 111 "DP-7" = { 112 scale = 2.0; 113 }; 114 "DP-5" = { 115 scale = 2.0; 116 }; 117 }; 118 spawn-at-startup = [ 119 { command = [ "xwayland-satellite" ]; } 120 { command = [ "swww-daemon" ]; } 121 { command = [ "mako" ]; } 122 { command = [ "waybar" ]; } 123 { command = [ "wl-paste --watch cliphist store" ]; } 124 ]; 125 environment = { 126 DISPLAY = ":0"; 127 }; 128 }; 129 }; 130 131 # Allow unfree packages 132 nixpkgs.config.allowUnfree = true; 133 134 nixpkgs.config.permittedInsecurePackages = [ 135 "libsoup-2.74.3" 136 ]; 137 138 programs.waybar = { 139 enable = true; 140 settings = { 141 mainBar = { 142 height = 8; 143 spacing = 0; 144 145 modules-left = [ 146 "custom/media" 147 ]; 148 149 modules-center = [ 150 "clock" 151 ]; 152 153 modules-right = [ 154 "mpd" 155 "pulseaudio" 156 "network" 157 "power-profiles-daemon" 158 "cpu" 159 "memory" 160 "temperature" 161 "backlight" 162 "sway/language" 163 "battery" 164 "battery#bat2" 165 "custom/power" 166 ]; 167 168 "keyboard-state" = { 169 numlock = true; 170 capslock = true; 171 format = "{name} {icon}"; 172 format-icons = { 173 locked = " "; 174 unlocked = " "; 175 }; 176 }; 177 178 mpd = { 179 format = "{stateIcon} {consumeIcon}{randomIcon}{repeatIcon}{singleIcon}{artist} - {album} - {title} ({elapsedTime:%M:%S}/{totalTime:%M:%S}) {songPosition}|{queueLength} {volume}% "; 180 format-disconnected = "Disconnected "; 181 format-stopped = "{consumeIcon}{randomIcon}{repeatIcon}{singleIcon}Stopped "; 182 unknown-tag = "N/A"; 183 interval = 5; 184 consume-icons = { 185 on = " "; 186 }; 187 random-icons = { 188 off = "<span color=\"#f53c3c\"></span> "; 189 on = " "; 190 }; 191 repeat-icons = { 192 on = " "; 193 }; 194 single-icons = { 195 on = "1 "; 196 }; 197 state-icons = { 198 paused = ""; 199 playing = ""; 200 }; 201 tooltip-format = "MPD (connected)"; 202 tooltip-format-disconnected = "MPD (disconnected)"; 203 }; 204 205 idle_inhibitor = { 206 format = "{icon}"; 207 format-icons = { 208 activated = " "; 209 deactivated = " "; 210 }; 211 }; 212 213 tray = { 214 spacing = 10; 215 }; 216 217 clock = { 218 format = "{:%d-%m-%Y %H:%M}"; 219 tooltip-format = "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>"; 220 format-alt = "{:%Y-%m-%d %H:%M:%S}"; 221 }; 222 223 cpu = { 224 format = "{usage}% "; 225 tooltip = false; 226 }; 227 228 memory = { 229 format = "{}% "; 230 }; 231 232 temperature = { 233 critical-threshold = 80; 234 format = "{temperatureC}°C {icon}"; 235 format-icons = [ 236 "" 237 "" 238 "" 239 ]; 240 }; 241 242 backlight = { 243 format = "{percent}% {icon}"; 244 format-icons = [ 245 "" 246 "" 247 "" 248 "" 249 "" 250 "" 251 "" 252 "" 253 "" 254 ]; 255 }; 256 257 battery = { 258 states = { 259 warning = 30; 260 critical = 15; 261 }; 262 format = "{capacity}% {icon}"; 263 format-full = "{capacity}% {icon}"; 264 format-charging = "{capacity}% "; 265 format-plugged = "{capacity}% "; 266 format-alt = "{time} {icon}"; 267 format-icons = [ 268 "" 269 "" 270 "" 271 "" 272 "" 273 ]; 274 }; 275 276 "battery#bat2" = { 277 bat = "BAT2"; 278 }; 279 280 "power-profiles-daemon" = { 281 format = "{icon}"; 282 tooltip-format = "Power profile: {profile}\nDriver: {driver}"; 283 tooltip = true; 284 format-icons = { 285 default = ""; 286 performance = ""; 287 balanced = " "; 288 power-saver = " "; 289 }; 290 }; 291 292 network = { 293 format-wifi = "{essid} ({signalStrength}%) "; 294 format-ethernet = "{ipaddr}/{cidr} "; 295 tooltip-format = "{ifname} via {gwaddr} "; 296 format-linked = "{ifname} (No IP) "; 297 format-disconnected = "Disconnected "; 298 format-alt = "{ifname}: {ipaddr}/{cidr}"; 299 }; 300 301 pulseaudio = { 302 format = "{volume}% {icon} {format_source}"; 303 format-bluetooth = "{volume}% {icon} {format_source}"; 304 format-bluetooth-muted = " {icon} {format_source}"; 305 format-muted = " {format_source}"; 306 format-source = "{volume}% "; 307 format-source-muted = " "; 308 format-icons = { 309 headphone = ""; 310 hands-free = ""; 311 headset = ""; 312 phone = ""; 313 portable = ""; 314 car = ""; 315 default = [ 316 "" 317 " " 318 " " 319 ]; 320 }; 321 on-click = "pavucontrol"; 322 }; 323 324 "custom/media" = { 325 format = "{icon} {text}"; 326 return-type = "json"; 327 max-length = 40; 328 format-icons = { 329 spotify = " "; 330 default = "🎜 "; 331 }; 332 escape = true; 333 exec = "$HOME/.config/waybar/mediaplayer.py 2> /dev/null"; 334 }; 335 336 "custom/power" = { 337 format = " "; 338 tooltip = false; 339 menu = "on-click"; 340 menu-file = "${./waybar/power_menu.xml}"; 341 menu-actions = { 342 shutdown = "shutdown"; 343 reboot = "reboot"; 344 suspend = "systemctl suspend"; 345 hibernate = "systemctl hibernate"; 346 }; 347 }; 348 }; 349 }; 350 style = builtins.readFile ./waybar/style.css; 351 }; 352 353 programs.ssh = { 354 enable = true; 355 extraConfig = '' 356 Host * 357 IdentityAgent ~/.1password/agent.sock 358 ''; 359 }; 360 361 programs.awscli = { 362 enable = true; 363 settings = { 364 "default" = { 365 region = "us-east-2"; 366 }; 367 }; 368 }; 369 370 # All your user-specific packages 371 home.packages = with pkgs; [ 372 helix 373 git 374 jujutsu # jj-cli 375 htop 376 zellij # terminal multiplexer 377 alacritty 378 fuzzel # Application launcher 379 bemoji # emoji picker 380 networkmanager_dmenu # network picker for fuzzel 381 waybar # Status bar (highly recommended) 382 mako # Notification daemon 383 swww # For setting wallpapers 384 cliphist # Clipboard history manager 385 pavucontrol # GUI for PulseAudio/PipeWire volume control 386 fd 387 ripgrep 388 yazi # tui file browser 389 gh # github cli 390 signal-desktop 391 xwayland-satellite # for running x11 apps 392 nixfmt-rfc-style # nix formatter 393 nil # nix language server 394 atac # postman-like TUI 395 trippy # network analyzer 396 rsync # file sync utility 397 udiskie # for mounting external drives 398 # darktable # photo editing 399 zoxide 400 chromium 401 claude-code 402 nautilus # file browser 403 sqlitebrowser 404 gnome-characters # symbol picker 405 sendme # file transfer 406 desktop-file-utils # for managing .desktop files 407 flyctl # fly.io cli 408 vscode-json-languageserver 409 gnome-network-displays 410 doppler # secret management 411 rainfrog # db tui 412 413 # --- FONTS ARE IMPORTANT --- 414 noto-fonts 415 noto-fonts-cjk-sans 416 noto-fonts-emoji 417 font-awesome # For icons in waybar, etc. 418 nerd-fonts.jetbrains-mono 419 # --- POLKIT AGENT (for 1Password GUI, etc.) --- 420 lxqt.lxqt-policykit # Lightweight polkit agent 421 ]; 422 423 services.udiskie = { 424 enable = true; 425 tray = "auto"; 426 automount = true; 427 }; 428 429 catppuccin = { 430 enable = true; 431 flavor = "frappe"; 432 }; 433 434 programs.fuzzel.enable = true; 435 436 programs.direnv.enable = true; 437 438 programs.zellij = { 439 enable = true; 440 settings = { 441 keybinds = { 442 unbind = [ "Ctrl q" ]; 443 }; 444 pane_frames = false; 445 ui = { 446 pane_frames.hide_session_name = true; 447 }; 448 }; 449 }; 450 451 programs.zen-browser.enable = true; 452 # programs.swww.enable = true; 453 programs.zoxide = { 454 enable = true; 455 enableFishIntegration = true; 456 }; 457 458 programs.obs-studio = { 459 enable = true; 460 plugins = with pkgs.obs-studio-plugins; [ 461 obs-backgroundremoval 462 ]; 463 }; 464 465 # Program configurations 466 programs.git = { 467 enable = true; 468 userName = "seanaye"; 469 userEmail = "hello@seanaye.ca"; 470 extraConfig = { 471 init.defaultBranch = "main"; 472 }; 473 }; 474 programs.jujutsu = { 475 enable = true; 476 settings.user = { 477 email = "hello@seanaye.ca"; 478 name = "Sean Aye"; 479 }; 480 }; 481 482 programs.home-manager.enable = true; 483 484 programs.fish = { 485 enable = true; 486 interactiveShellInit = '' 487 set fish_greeting 488 # Load 1Password CLI plugins 489 if test -f ~/.config/op/plugins.sh 490 source ~/.config/op/plugins.sh 491 end 492 ''; 493 functions = { 494 s3edit = '' 495 set file (basename $argv[1]) 496 set tmpfile /tmp/$file 497 aws s3 cp $argv[1] $tmpfile 498 and $EDITOR $tmpfile 499 and aws s3 cp $tmpfile $argv[1] 500 ''; 501 }; 502 }; 503 504 programs.starship = { 505 enable = true; 506 enableFishIntegration = true; 507 }; 508 509 programs.alacritty = { 510 enable = true; 511 settings = { 512 window = { 513 decorations = "none"; 514 opacity = 0.9; 515 }; 516 }; 517 518 }; 519 520 programs.helix = { 521 enable = true; 522 settings = { 523 editor = { 524 bufferline = "multiple"; 525 file-picker = { 526 hidden = false; 527 git-ignore = true; 528 }; 529 cursor-shape = { 530 insert = "bar"; 531 normal = "block"; 532 select = "underline"; 533 }; 534 line-number = "relative"; 535 cursorline = true; 536 auto-format = true; 537 end-of-line-diagnostics = "hint"; 538 soft-wrap = { 539 enable = true; 540 }; 541 lsp = { 542 display-inlay-hints = true; 543 display-messages = true; 544 display-progress-messages = true; 545 }; 546 inline-diagnostics = { 547 cursor-line = "hint"; 548 }; 549 }; 550 keys = { 551 normal = { 552 esc = [ 553 "keep_primary_selection" 554 "collapse_selection" 555 ]; 556 }; 557 558 }; 559 }; 560 languages = { 561 language-server.rust-analyzer = { 562 config = { 563 check = { 564 command = "clippy"; 565 }; 566 checkOnSave = true; 567 cargo = { 568 allFeatures = true; 569 }; 570 }; 571 }; 572 language = [ 573 { 574 name = "nix"; 575 auto-format = true; 576 formatter = { 577 command = "${pkgs.nixfmt-rfc-style}/bin/nixfmt"; 578 }; 579 } 580 { 581 name = "kotlin"; 582 auto-format = true; 583 } 584 { 585 name = "rust"; 586 auto-format = true; 587 formatter = { 588 command = "rustfmt"; 589 args = [ 590 "--edition" 591 "2024" 592 ]; 593 }; 594 indent = { 595 tab-width = 4; 596 unit = "t"; 597 }; 598 } 599 { 600 name = "astro"; 601 auto-format = true; 602 formatter = { 603 command = "npx"; 604 args = [ 605 "prettier" 606 "--plugin" 607 "prettier-plugin-astro" 608 "--parser" 609 "astro" 610 ]; 611 }; 612 } 613 { 614 name = "json"; 615 auto-format = true; 616 } 617 { 618 name = "just"; 619 auto-format = true; 620 formatter = { 621 command = "just"; 622 args = [ 623 "--justfile" 624 "/dev/stdin" 625 "--dump" 626 ]; 627 }; 628 } 629 { 630 name = "toml"; 631 auto-format = true; 632 formatter = { 633 command = "taplo"; 634 args = [ 635 "format" 636 "-" 637 ]; 638 }; 639 } 640 ]; 641 }; 642 }; 643 644 dconf.settings = { 645 "org/gnome/desktop/interface" = { 646 color-scheme = "prefer-dark"; 647 enable-hot-corners = false; 648 }; 649 }; 650 651 # Session variables 652 home.sessionVariables = { 653 EDITOR = "hx"; 654 VISUAL = "hx"; 655 SUDO_EDITOR = "hx"; 656 SSH_AUTH_SOCK = "~/.1password/agent.sock"; 657 }; 658 659 # Set the state version for Home Manager 660 home.stateVersion = "25.05"; 661}