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