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 inputs.agenix.homeManagerModules.default 15 ]; 16 17 # All your user-specific packages 18 home.packages = with pkgs; [ 19 helix 20 git 21 jujutsu # jj-cli 22 htop 23 iotop 24 ncdu 25 youtube-tui 26 yt-dlp # youtube-tui and mpv need this to resolve YouTube URLs 27 zellij # terminal multiplexer 28 alacritty 29 inputs.fsel.packages.${pkgs.system}.default # App launcher / fuzzy finder 30 bemoji # emoji picker 31 networkmanager_dmenu # network picker for fuzzel 32 quickshell # Status bar (QML-based) 33 inputs.kaleidux.packages.${pkgs.system}.default # Dynamic wallpaper daemon 34 (import ../../packages/cclip.nix { inherit pkgs; }) # Clipboard history manager 35 pavucontrol # GUI for PulseAudio/PipeWire volume control 36 playerctl # MPRIS media player control 37 (element-desktop.override { 38 commandLineArgs = "--password-store=gnome-libsecret"; 39 }) 40 fd 41 ripgrep 42 yazi # tui file browser 43 gh # github cli 44 gh-dash # github dashboard TUI 45 diffnav # git diff viewer 46 signal-desktop 47 xwayland-satellite # for running x11 apps 48 nixfmt # nix formatter 49 nil # nix language server 50 atac # postman-like TUI 51 trippy # network analyzer 52 rsync # file sync utility 53 udiskie # for mounting external drives 54 darktable # photo editing 55 zoxide 56 chromium 57 claude-code 58 nautilus # file browser 59 sqlitebrowser 60 gnome-characters # symbol picker 61 sendme # file transfer 62 desktop-file-utils # for managing .desktop files 63 flyctl # fly.io cli 64 vscode-json-languageserver 65 gnome-network-displays 66 rainfrog # db tui 67 loupe # image viewer 68 glycin-loaders # various format loaders for loupe 69 docker-compose 70 discord 71 mangohud 72 prismlauncher # minecraft launcher 73 fastfetch 74 inputs.agenix.packages.${pkgs.system}.default # agenix CLI 75 age-plugin-yubikey # Yubikey support for agenix 76 # --- FONTS ARE IMPORTANT --- 77 # Berkeley Mono is the main system font, keeping JetBrains and Font Awesome for icons 78 font-awesome 79 noto-fonts 80 noto-fonts-cjk-sans 81 noto-fonts-color-emoji 82 nerd-fonts.jetbrains-mono 83 nerd-fonts.symbols-only 84 # --- POLKIT AGENT (for 1Password GUI, etc.) --- 85 lxqt.lxqt-policykit # Lightweight polkit agent 86 ]; 87 88 programs.niri = { 89 enable = true; 90 settings = { 91 window-rules = [ 92 { 93 geometry-corner-radius = { 94 top-left = 5.0; 95 top-right = 5.0; 96 bottom-left = 5.0; 97 bottom-right = 5.0; 98 }; 99 clip-to-geometry = true; 100 draw-border-with-background = false; 101 } 102 ]; 103 debug = { 104 honor-xdg-activation-with-invalid-serial = { }; 105 }; 106 layout = { 107 focus-ring = { 108 width = 2; 109 active.color = "#8caaee"; 110 inactive.color = "#414559"; 111 }; 112 struts = { 113 top = -6; 114 bottom = -6; 115 left = 0; 116 right = 0; 117 }; 118 gaps = 8; 119 }; 120 gestures = { 121 hot-corners = { 122 enable = false; 123 }; 124 }; 125 binds = { 126 "Mod+d".action.spawn = [ 127 "alacritty" 128 "-e" 129 "sh" 130 "-c" 131 "while fsel --detach; do :; done" 132 ]; 133 "Mod+c".action.spawn = [ 134 "alacritty" 135 "-e" 136 "fsel" 137 "--cclip" 138 ]; 139 "Mod+e".action.spawn = "bemoji"; 140 "Mod+n".action.spawn = "networkmanager_dmenu"; 141 "Mod+a".action.spawn = "alacritty"; 142 "Mod+h".action = { 143 focus-column-left = { }; 144 }; 145 "Mod+j".action = { 146 focus-workspace-down = { }; 147 }; 148 "Mod+k".action = { 149 focus-workspace-up = { }; 150 }; 151 "Mod+l".action = { 152 focus-column-right = { }; 153 }; 154 "Mod+Shift+h".action = { 155 move-column-left = { }; 156 }; 157 "Mod+Shift+j".action = { 158 move-window-down-or-to-workspace-down = { }; 159 }; 160 "Mod+Shift+k".action = { 161 move-window-up-or-to-workspace-up = { }; 162 }; 163 "Mod+Shift+l".action = { 164 move-column-right = { }; 165 }; 166 "Mod+Down".action = { 167 move-workspace-down = { }; 168 }; 169 "Mod+Up".action = { 170 move-workspace-up = { }; 171 }; 172 "Mod+p".action = { 173 show-hotkey-overlay = { }; 174 }; 175 "Mod+o".action = { 176 toggle-overview = { }; 177 }; 178 "Mod+q".action = { 179 close-window = { }; 180 }; 181 "Mod+f".action = { 182 toggle-window-floating = { }; 183 }; 184 "Mod+Shift+f".action = { 185 switch-focus-between-floating-and-tiling = { }; 186 }; 187 "Mod+m".action = { 188 fullscreen-window = { }; 189 }; 190 "Mod+s".action = { 191 screenshot = { 192 show-pointer = true; 193 }; 194 }; 195 "Mod+1".action = { 196 set-column-width = "100%"; 197 }; 198 "Mod+2".action = { 199 set-column-width = "50%"; 200 }; 201 "Mod+Minus".action = { 202 set-column-width = "-10%"; 203 }; 204 "Mod+Equal".action = { 205 set-column-width = "+10%"; 206 }; 207 "Mod+Shift+q".action = { 208 quit = { }; 209 }; 210 "Mod+Shift+r".action.spawn = [ 211 "systemctl" 212 "--user" 213 "restart" 214 "quickshell.service" 215 ]; 216 "XF86AudioPlay".action.spawn = [ 217 "playerctl" 218 "play-pause" 219 ]; 220 "XF86AudioStop".action.spawn = [ 221 "playerctl" 222 "stop" 223 ]; 224 "XF86AudioNext".action.spawn = [ 225 "playerctl" 226 "next" 227 ]; 228 "XF86AudioPrev".action.spawn = [ 229 "playerctl" 230 "previous" 231 ]; 232 "XF86MonBrightnessDown".action.spawn = [ 233 "brightnessctl" 234 "set" 235 "5%-" 236 ]; 237 "XF86MonBrightnessUp".action.spawn = [ 238 "brightnessctl" 239 "set" 240 "+5%" 241 ]; 242 }; 243 outputs = { 244 # External monitor - primary display at position (0, 0) 245 "DP-5" = { 246 scale = 2.0; 247 mode = { 248 width = 5120; 249 height = 2160; 250 refresh = 120.0; 251 }; 252 position = { 253 x = 0; 254 y = 0; 255 }; 256 }; 257 "DP-1" = { 258 scale = 2.0; 259 mode = { 260 width = 5120; 261 height = 2160; 262 refresh = 120.0; 263 }; 264 position = { 265 x = 0; 266 y = 0; 267 }; 268 }; 269 "DP-2" = { 270 scale = 1.0; 271 mode = { 272 width = 5120; 273 height = 2160; 274 refresh = 120.0; 275 }; 276 position = { 277 x = 0; 278 y = 0; 279 }; 280 }; 281 "DP-6" = { 282 scale = 2.0; 283 mode = { 284 width = 5120; 285 height = 2160; 286 refresh = 120.0; 287 }; 288 position = { 289 x = 0; 290 y = 0; 291 }; 292 }; 293 "DP-7" = { 294 scale = 2.0; 295 mode = { 296 width = 5120; 297 height = 2160; 298 refresh = 120.0; 299 }; 300 position = { 301 x = 0; 302 y = 0; 303 }; 304 }; 305 # Laptop display - secondary display positioned underneath 306 "eDP-1" = { 307 scale = 1.5; 308 mode = { 309 width = 2560; 310 height = 1600; 311 refresh = 165.0; 312 }; 313 position = { 314 x = 0; 315 y = 1080; # Position underneath the external monitor (2160 / 2 scale = 1080 logical height) 316 }; 317 }; 318 }; 319 spawn-at-startup = [ 320 { command = [ "xwayland-satellite" ]; } 321 { command = [ "cclipd" ]; } 322 ]; 323 environment = { 324 DISPLAY = ":0"; 325 }; 326 }; 327 }; 328 329 # Allow unfree packages 330 nixpkgs.config.allowUnfree = true; 331 332 nixpkgs.config.permittedInsecurePackages = [ 333 "libsoup-2.74.3" 334 ]; 335 336 # Download wallpapers at activation time (skips dead URLs gracefully) 337 home.activation.downloadWallpapers = 338 let 339 wallpapers = import ./wallpapers.nix; 340 downloads = builtins.concatStringsSep "\n" ( 341 map (wp: '' 342 if [ ! -f "$DIR/${wp.filename}" ]; then 343 echo "Downloading ${wp.filename}..." 344 ${pkgs.curl}/bin/curl -fsSL -o "$DIR/${wp.filename}" ${ 345 builtins.replaceStrings [ "\"" ] [ "\\\"" ] wp.url 346 } || echo "WARNING: Failed to download ${wp.filename}, skipping" 347 fi 348 '') wallpapers 349 ); 350 in 351 config.lib.dag.entryAfter [ "writeBoundary" ] '' 352 DIR="${config.home.homeDirectory}/Pictures/Wallpapers" 353 mkdir -p "$DIR" 354 ${downloads} 355 ''; 356 357 # Kaleidux wallpaper daemon config 358 xdg.configFile."kaleidux/config.toml".text = '' 359 [global] 360 monitor-behavior = "independent" 361 video-ratio = 50 362 sorting = "loveit" 363 transition-time = 1000 364 365 [any] 366 path = "${config.home.homeDirectory}/Pictures/Wallpapers" 367 duration = "15m" 368 transition = { type = "fade" } 369 ''; 370 371 # Quickshell status bar 372 xdg.configFile."quickshell" = { 373 source = ./quickshell; 374 recursive = true; 375 }; 376 377 systemd.user.services.kaleidux = { 378 Unit = { 379 Description = "Kaleidux dynamic wallpaper daemon"; 380 After = [ "graphical-session.target" ]; 381 PartOf = [ "graphical-session.target" ]; 382 }; 383 Service = { 384 ExecStart = "${inputs.kaleidux.packages.${pkgs.system}.default}/bin/kaleidux-daemon"; 385 Restart = "on-failure"; 386 RestartSec = 2; 387 }; 388 Install = { 389 WantedBy = [ "graphical-session.target" ]; 390 }; 391 }; 392 393 systemd.user.services.quickshell = { 394 Unit = { 395 Description = "QuickShell status bar"; 396 After = [ "graphical-session.target" ]; 397 PartOf = [ "graphical-session.target" ]; 398 }; 399 Service = { 400 ExecStart = "${pkgs.quickshell}/bin/quickshell"; 401 Restart = "on-failure"; 402 RestartSec = 2; 403 }; 404 Install = { 405 WantedBy = [ "graphical-session.target" ]; 406 }; 407 }; 408 409 systemd.user.services.quickshell-reload = { 410 Unit = { 411 Description = "Reload QuickShell on wake or display change"; 412 After = [ 413 "quickshell.service" 414 "graphical-session.target" 415 ]; 416 PartOf = [ "graphical-session.target" ]; 417 }; 418 Service = { 419 Type = "simple"; 420 ExecStart = "${pkgs.writeShellScript "quickshell-reload" '' 421 LOCKFILE="/tmp/quickshell-reload.lock" 422 423 do_restart() { 424 ( 425 ${pkgs.util-linux}/bin/flock -xn 200 || exit 0 426 sleep 2 427 ${pkgs.systemd}/bin/systemctl --user restart quickshell.service 428 sleep 3 429 ) 200>"$LOCKFILE" 430 } 431 432 # Sleep/wake monitor 433 ${pkgs.dbus}/bin/dbus-monitor --system \ 434 "type='signal',interface='org.freedesktop.login1.Manager',member='PrepareForSleep'" 2>/dev/null | \ 435 while IFS= read -r line; do 436 if [[ "$line" == *"boolean false"* ]]; then 437 do_restart 438 fi 439 done & 440 441 # Display hotplug monitor 442 ${pkgs.systemd}/bin/udevadm monitor --property --subsystem-match=drm 2>/dev/null | \ 443 while IFS= read -r line; do 444 if [[ "$line" == *"HOTPLUG=1"* ]]; then 445 do_restart 446 fi 447 done & 448 449 wait 450 ''}"; 451 Restart = "on-failure"; 452 RestartSec = 5; 453 }; 454 Install = { 455 WantedBy = [ "graphical-session.target" ]; 456 }; 457 }; 458 459 programs.ssh = { 460 enable = true; 461 enableDefaultConfig = false; 462 matchBlocks = { 463 "*" = { 464 identityFile = [ 465 "${config.home.homeDirectory}/.ssh/id_ed25519_sk_rk" 466 "${config.home.homeDirectory}/.ssh/id_rsa.pub" 467 ]; 468 }; 469 }; 470 }; 471 472 programs.awscli = { 473 enable = true; 474 settings = { 475 "default" = { 476 region = "us-east-1"; 477 }; 478 }; 479 }; 480 481 services.udiskie = { 482 enable = true; 483 tray = "never"; 484 automount = true; 485 }; 486 487 services.mako = { 488 enable = true; 489 settings = { 490 border-radius = 8; 491 border-size = 2; 492 padding = "12"; 493 margin = "12"; 494 font = "BerkeleyMono Nerd Font 11"; 495 on-button-left = "invoke-default-action"; 496 on-button-right = "dismiss"; 497 }; 498 }; 499 500 catppuccin = { 501 enable = true; 502 flavor = "frappe"; 503 }; 504 505 programs.direnv.enable = true; 506 507 programs.atuin = { 508 enable = true; 509 enableFishIntegration = true; 510 daemon.enable = true; 511 settings = { 512 filter_mode_shell_up_key_binding = "session"; 513 }; 514 }; 515 516 programs.zellij = { 517 enable = true; 518 settings = { 519 keybinds = { 520 unbind = [ 521 "Ctrl q" 522 "Ctrl o" 523 ]; 524 normal = { 525 "bind \"Ctrl m\"" = { 526 SwitchToMode = "Session"; 527 }; 528 }; 529 }; 530 pane_frames = false; 531 show_startup_tips = false; 532 ui = { 533 pane_frames.hide_session_name = true; 534 }; 535 }; 536 }; 537 538 xdg.configFile."zellij/layouts/split.kdl".text = '' 539 layout { 540 tab { 541 pane size="50%" 542 pane split_direction="vertical" size="50%" { 543 pane 544 pane 545 } 546 } 547 } 548 ''; 549 550 xdg.configFile."gh-dash/config.yml".text = '' 551 prSections: 552 - title: My Pull Requests 553 filters: is:open author:@me 554 - title: Review Requested 555 filters: is:open review-requested:@me 556 issuesSections: 557 - title: My Issues 558 filters: is:open author:@me 559 pager: 560 diff: diffnav 561 keybindings: 562 prs: 563 - key: T 564 name: enhance 565 command: >- 566 zellij run -- gh enhance -R {{.RepoName}} {{.PrNumber}} 567 ''; 568 569 programs.zen-browser.enable = true; 570 # programs.swww.enable = true; 571 programs.zoxide = { 572 enable = true; 573 enableFishIntegration = true; 574 }; 575 576 programs.obs-studio = { 577 enable = true; 578 plugins = with pkgs.obs-studio-plugins; [ 579 obs-backgroundremoval 580 ]; 581 }; 582 583 # Program configurations 584 programs.mpv = { 585 enable = true; 586 scripts = [ pkgs.mpvScripts.mpris ]; 587 config.af = "loudnorm=I=-16:TP=-1.5:LRA=11"; 588 }; 589 xdg.configFile."youtube-tui" = { 590 source = ./youtube-tui; 591 recursive = true; 592 force = true; 593 }; 594 programs.git = { 595 enable = true; 596 settings = { 597 user = { 598 name = "seanaye"; 599 email = "hello@seanaye.ca"; 600 }; 601 init.defaultBranch = "main"; 602 commit.gpgSign = true; 603 gpg.format = "ssh"; 604 user.signingKey = "sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIOIgEteUEW06dnBHe2z8vNLwz2iMKe8bba6JgMmOUpcBAAAABHNzaDo= sean@framework16"; 605 gpg.ssh.allowedSignersFile = "${config.home.homeDirectory}/.ssh/allowed_signers"; 606 diff.tool = "diffnav"; 607 difftool.prompt = false; 608 "difftool \"diffnav\"".cmd = "diffnav \"$LOCAL\" \"$REMOTE\""; 609 }; 610 }; 611 programs.jujutsu = { 612 enable = true; 613 settings = { 614 user = { 615 email = "hello@seanaye.ca"; 616 name = "Sean Aye"; 617 }; 618 ui."diff-formatter" = ":git"; 619 signing = { 620 sign-all = true; 621 behavior = "own"; 622 backend = "ssh"; 623 key = "${config.home.homeDirectory}/.ssh/id_ed25519_sk_rk"; 624 backends.ssh.allowed-signers = "${config.home.homeDirectory}/.ssh/allowed_signers"; 625 }; 626 }; 627 }; 628 xdg.configFile."jj/conf.d/diffnav.toml".text = '' 629 [[--scope]] 630 --when.commands = ["diff", "show"] 631 [--scope.ui] 632 pager = "diffnav" 633 ''; 634 635 programs.home-manager.enable = true; 636 637 programs.fish = { 638 enable = true; 639 shellAliases = { 640 agenix = "agenix -i ~/.config/agenix/yubikey-identity.txt"; 641 }; 642 interactiveShellInit = '' 643 set fish_greeting 644 # Set 1Password SSH agent socket 645 set -gx SSH_AUTH_SOCK ${config.home.homeDirectory}/.1password/agent.sock 646 # Load 1Password CLI plugins 647 if test -f ~/.config/op/plugins.sh 648 source ~/.config/op/plugins.sh 649 end 650 # Auto-launch zellij if not already inside a session 651 if not set -q ZELLIJ 652 zellij 653 else 654 fastfetch --logo small 655 end 656 657 function y 658 set tmp (mktemp -t "yazi-cwd.XXXXXX") 659 yazi $argv --cwd-file="$tmp" 660 if read -z cwd < "$tmp"; and [ -n "$cwd" ]; and [ "$cwd" != "$PWD" ] 661 builtin cd -- "$cwd" 662 end 663 rm -f -- "$tmp" 664 end 665 ''; 666 functions = { 667 s3edit = '' 668 set file (basename $argv[1]) 669 set tmpfile /tmp/$file 670 aws s3 cp $argv[1] $tmpfile 671 and $EDITOR $tmpfile 672 and aws s3 cp $tmpfile $argv[1] 673 ''; 674 }; 675 }; 676 677 programs.starship = { 678 enable = true; 679 enableFishIntegration = true; 680 }; 681 682 programs.alacritty = { 683 enable = true; 684 settings = { 685 terminal.shell.program = "fish"; 686 window = { 687 decorations = "none"; 688 opacity = 0.9; 689 }; 690 font = { 691 normal = { 692 family = "BerkeleyMono Nerd Font"; 693 style = "Regular"; 694 }; 695 size = 12.0; 696 }; 697 }; 698 699 }; 700 701 programs.helix = { 702 enable = true; 703 settings = { 704 editor = { 705 bufferline = "multiple"; 706 file-picker = { 707 hidden = false; 708 git-ignore = true; 709 }; 710 cursor-shape = { 711 insert = "bar"; 712 normal = "block"; 713 select = "underline"; 714 }; 715 line-number = "relative"; 716 cursorline = true; 717 auto-format = true; 718 end-of-line-diagnostics = "hint"; 719 soft-wrap = { 720 enable = true; 721 }; 722 lsp = { 723 display-inlay-hints = true; 724 display-messages = true; 725 display-progress-messages = true; 726 }; 727 inline-diagnostics = { 728 cursor-line = "hint"; 729 }; 730 }; 731 keys = { 732 normal = { 733 esc = [ 734 "keep_primary_selection" 735 "collapse_selection" 736 ]; 737 }; 738 739 }; 740 }; 741 languages = { 742 743 language-server.rust-analyzer = { 744 config = { 745 check = { 746 command = "clippy"; 747 }; 748 checkOnSave = true; 749 cargo = { 750 allFeatures = true; 751 }; 752 }; 753 }; 754 language-server.deno-lsp = { 755 command = "deno"; 756 args = [ "lsp" ]; 757 config.deno.enable = true; 758 }; 759 760 language = [ 761 { 762 name = "html"; 763 formatter = { 764 command = "prettier"; 765 args = [ 766 "--parser" 767 "html" 768 ]; 769 }; 770 } 771 { 772 name = "nix"; 773 auto-format = true; 774 formatter = { 775 command = "${pkgs.nixfmt}/bin/nixfmt"; 776 }; 777 } 778 { 779 name = "kotlin"; 780 auto-format = true; 781 } 782 { 783 name = "rust"; 784 auto-format = true; 785 formatter = { 786 command = "rustfmt"; 787 args = [ 788 "--edition" 789 "2024" 790 ]; 791 }; 792 indent = { 793 tab-width = 4; 794 unit = "t"; 795 }; 796 } 797 { 798 name = "astro"; 799 auto-format = true; 800 formatter = { 801 command = "npx"; 802 args = [ 803 "prettier" 804 "--plugin" 805 "prettier-plugin-astro" 806 "--parser" 807 "astro" 808 ]; 809 }; 810 } 811 { 812 name = "json"; 813 auto-format = true; 814 } 815 { 816 name = "just"; 817 auto-format = true; 818 formatter = { 819 command = "just"; 820 args = [ 821 "--justfile" 822 "/dev/stdin" 823 "--dump" 824 ]; 825 }; 826 } 827 { 828 name = "toml"; 829 auto-format = true; 830 formatter = { 831 command = "taplo"; 832 args = [ 833 "format" 834 "-" 835 ]; 836 }; 837 } 838 # { 839 # name = "typescript"; 840 # roots = [ 841 # "deno.json" 842 # "deno.jsonc" 843 # ]; 844 # file-types = [ 845 # "ts" 846 # "tsx" 847 # ]; 848 # auto-format = true; 849 # language-servers = [ "deno-lsp" ]; 850 # } 851 ]; 852 }; 853 }; 854 855 dconf.settings = { 856 "org/gnome/desktop/interface" = { 857 color-scheme = "prefer-dark"; 858 enable-hot-corners = false; 859 }; 860 }; 861 862 # Font rendering configuration 863 fonts.fontconfig = { 864 enable = true; 865 defaultFonts = { 866 monospace = [ "BerkeleyMono Nerd Font" ]; 867 sansSerif = [ "Noto Sans" ]; 868 serif = [ "Noto Serif" ]; 869 }; 870 }; 871 872 # Cursor configuration 873 home.pointerCursor = { 874 name = "Adwaita"; 875 package = pkgs.adwaita-icon-theme; 876 size = 16; 877 x11.enable = true; 878 gtk.enable = true; 879 }; 880 881 # Session variables 882 home.sessionVariables = { 883 EDITOR = "hx"; 884 VISUAL = "hx"; 885 SUDO_EDITOR = "hx"; 886 SSH_AUTH_SOCK = "${config.home.homeDirectory}/.1password/agent.sock"; 887 SSH_ASKPASS = "${pkgs.openssh-askpass}/bin/gnome-ssh-askpass3"; 888 SSH_ASKPASS_REQUIRE = "prefer"; 889 }; 890 891 # SSH allowed signers for commit signature verification 892 home.file.".ssh/allowed_signers".text = '' 893 hello@seanaye.ca ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDCIqgZ7kedxo+mOW7YG73Vp3zel3h180y3GKvHtRsXfGlpIIvRDy7pgCBQ4AGXYD4y78URQmFohYSAPqCPOPaWcU2un3XG9KvCzEsHmsbskPonitUmCiKvrKkb6oW4jCBtd7AEtBn+AiajAQFtPZ7NN2Df3AmTypvR6Irg7R+nxnfc9NTIHmGvxSDyWcbb4pguL20sctUSqGL6xGh8q/bqhdOThSimM+z9bEUNxK/5rPhwkNniMrp4pJcUrUiAh5/4DiRFG6KT+oeg+/myoz/Z1sPvAs7u/8JDQI4RshRD8Hu0oTkRBN6Hxj478q2SXbeBUZlD6IdjP3RhGpmSecoDdtWqKbpuV3eVRtQtba3KL86GBeV/bugaOdJ1Aud+1SOFJreAAuvxzMMKT+cdQZk6oOPP148DA/No+mDm/2S43lcdCXh79wA6YRAmKQ8jmZxTCtPutrvuZK1rguvvUlEoG/vhdNHh7eDa4Td07V6bjCRPUl8qk/e4M0E3pwsTlZc= 894 hello@seanaye.ca sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAILdilHXHdAP/V8Zq28EzHKtLAMMaFPu4+1det2N50QfhAAAABHNzaDo= sean@framework16 895 ''; 896 897 # Yubikey identity for agenix (not secret - just a reference to the hardware key) 898 home.file.".config/agenix/yubikey-identity.txt".text = '' 899 # Serial: 26930059, Slot: 1 900 # Name: agenix 901 # Recipient: age1yubikey1qw64ag5lzvn9ekrflu5ruj4a6ucycscl6ctk39fjzf76jptsay39z442pxv 902 AGE-PLUGIN-YUBIKEY-1304E5QVZZD74FKSP8FMCT 903 ''; 904 905 # Same identity for sops (expects keys at this path by default) 906 home.file.".config/sops/age/keys.txt".text = '' 907 # Serial: 26930059, Slot: 1 908 # Name: agenix 909 # Recipient: age1yubikey1qw64ag5lzvn9ekrflu5ruj4a6ucycscl6ctk39fjzf76jptsay39z442pxv 910 AGE-PLUGIN-YUBIKEY-1304E5QVZZD74FKSP8FMCT 911 ''; 912 913 # yubikey sudo access 914 home.file.".config/Yubico/u2f_keys".text = '' 915 sean:2HY//CedY0ZSrKf57lT7abxG8+8bkPyxCfp/0HMlk/il/5W8pn4R5xLiZDcJtvL85U24h9IEIxa4CS22mpaDSA==,gcD/dpLdwvUFcGGPHS4qNsarH4lOEy1AJAT7zoC6BPlFRUYEa8DpVVKFTcvT6PotjnSHSrWWGb/f3U2k2jIOIw==,es256,+presence 916 ''; 917 918 # Set the state version for Home Manager 919 home.stateVersion = "25.05"; 920}