@jaspermayone.com's dotfiles

stringzzzz

+390 -24
+7
.claude/settings.local.json
··· 1 + { 2 + "permissions": { 3 + "allow": [ 4 + "mcp__plugin_github_github__get_file_contents" 5 + ] 6 + } 7 + }
+79 -24
flake.lock
··· 225 225 "type": "github" 226 226 } 227 227 }, 228 + "flake-utils_5": { 229 + "inputs": { 230 + "systems": "systems_7" 231 + }, 232 + "locked": { 233 + "lastModified": 1731533236, 234 + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", 235 + "owner": "numtide", 236 + "repo": "flake-utils", 237 + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", 238 + "type": "github" 239 + }, 240 + "original": { 241 + "owner": "numtide", 242 + "repo": "flake-utils", 243 + "type": "github" 244 + } 245 + }, 228 246 "gomod2nix": { 229 247 "inputs": { 230 - "flake-utils": "flake-utils_3", 248 + "flake-utils": "flake-utils_4", 231 249 "nixpkgs": [ 232 250 "tangled", 233 251 "nixpkgs" ··· 291 309 ] 292 310 }, 293 311 "locked": { 294 - "lastModified": 1767850628, 295 - "narHash": "sha256-D3QzdIT11J66I4mzwmIpAGLzPAcbCS2VaKN8fmOe6+E=", 312 + "lastModified": 1767910483, 313 + "narHash": "sha256-MOU5YdVu4DVwuT5ztXgQpPuRRBjSjUGIdUzOQr9iQOY=", 296 314 "owner": "nix-community", 297 315 "repo": "home-manager", 298 - "rev": "8c8a16d41353a174767c38b962359b51a56ca02e", 316 + "rev": "82fb7dedaad83e5e279127a38ef410bcfac6d77c", 299 317 "type": "github" 300 318 }, 301 319 "original": { ··· 438 456 }, 439 457 "nixpkgs-unstable": { 440 458 "locked": { 441 - "lastModified": 1767767207, 442 - "narHash": "sha256-Mj3d3PfwltLmukFal5i3fFt27L6NiKXdBezC1EBuZs4=", 459 + "lastModified": 1768127708, 460 + "narHash": "sha256-1Sm77VfZh3mU0F5OqKABNLWxOuDeHIlcFjsXeeiPazs=", 443 461 "owner": "nixos", 444 462 "repo": "nixpkgs", 445 - "rev": "5912c1772a44e31bf1c63c0390b90501e5026886", 463 + "rev": "ffbc9f8cbaacfb331b6017d5a5abb21a492c9a38", 446 464 "type": "github" 447 465 }, 448 466 "original": { ··· 454 472 }, 455 473 "nixpkgs_2": { 456 474 "locked": { 457 - "lastModified": 1767799921, 458 - "narHash": "sha256-r4GVX+FToWVE2My8VVZH4V0pTIpnu2ZE8/Z4uxGEMBE=", 475 + "lastModified": 1768242861, 476 + "narHash": "sha256-F4IIxa5xDHjtrmMcayM8lHctUq1oGltfBQu2+oqDWP4=", 459 477 "owner": "nixos", 460 478 "repo": "nixpkgs", 461 - "rev": "d351d0653aeb7877273920cd3e823994e7579b0b", 479 + "rev": "1327e798cb055f96f92685df444e9a2c326ab5ed", 462 480 "type": "github" 463 481 }, 464 482 "original": { ··· 523 541 ] 524 542 }, 525 543 "locked": { 526 - "lastModified": 1767880626, 527 - "narHash": "sha256-YCSd8VySVSL1H+w4RksfprwJpdxRS3w9emtAV6nuIOU=", 544 + "lastModified": 1768338513, 545 + "narHash": "sha256-6NZyVH6fUaUmT/IQvIJLswhUGNgDLWTh00ZXiMT210Q=", 528 546 "owner": "nix-community", 529 547 "repo": "NUR", 530 - "rev": "af1d9e6c7be6753f2b010d8ee4f4d5985c351385", 548 + "rev": "ada81bdba085fe25c6fbd2ac9dc37df46e1082c7", 531 549 "type": "github" 532 550 }, 533 551 "original": { ··· 549 567 "nixpkgs-unstable": "nixpkgs-unstable", 550 568 "nur": "nur", 551 569 "rust-fp": "rust-fp", 570 + "strings": "strings", 552 571 "tangled": "tangled", 553 572 "tgirlpkgs": "tgirlpkgs", 554 573 "zmx": "zmx" ··· 605 624 "url": "https://sqlite.org/2024/sqlite-amalgamation-3450100.zip" 606 625 } 607 626 }, 627 + "strings": { 628 + "inputs": { 629 + "flake-utils": "flake-utils_3", 630 + "nixpkgs": [ 631 + "nixpkgs" 632 + ] 633 + }, 634 + "locked": { 635 + "lastModified": 1768339068, 636 + "narHash": "sha256-B16xAV81om3UwDzojBhCkfTWh91kEyWbK5apT8QNwzI=", 637 + "owner": "jaspermayone", 638 + "repo": "strings", 639 + "rev": "aba59361d8843e37f43b5ee79e602f3fb9c64aa8", 640 + "type": "github" 641 + }, 642 + "original": { 643 + "owner": "jaspermayone", 644 + "repo": "strings", 645 + "type": "github" 646 + } 647 + }, 608 648 "systems": { 609 649 "locked": { 610 650 "lastModified": 1681028828, ··· 695 735 "type": "github" 696 736 } 697 737 }, 738 + "systems_7": { 739 + "locked": { 740 + "lastModified": 1681028828, 741 + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 742 + "owner": "nix-systems", 743 + "repo": "default", 744 + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 745 + "type": "github" 746 + }, 747 + "original": { 748 + "owner": "nix-systems", 749 + "repo": "default", 750 + "type": "github" 751 + } 752 + }, 698 753 "tangled": { 699 754 "inputs": { 700 755 "actor-typeahead-src": "actor-typeahead-src", ··· 712 767 "sqlite-lib-src": "sqlite-lib-src" 713 768 }, 714 769 "locked": { 715 - "lastModified": 1767861033, 716 - "narHash": "sha256-cyuVJ+CoWj1xYjELE4ru6Vfiodp6XrzzLW4LuykjGIw=", 770 + "lastModified": 1768273768, 771 + "narHash": "sha256-T87j98h4T2ux5LYc/R1KjisUfv1qck65MknhGJVMEA4=", 717 772 "ref": "refs/heads/master", 718 - "rev": "f26c192595c3fd76aa70d76f35012e96438ada4e", 719 - "revCount": 1793, 773 + "rev": "3638909db6c988eef717981ee3f4950937e92836", 774 + "revCount": 1807, 720 775 "type": "git", 721 776 "url": "https://tangled.org/tangled.org/core" 722 777 }, ··· 732 787 ] 733 788 }, 734 789 "locked": { 735 - "lastModified": 1767833820, 736 - "narHash": "sha256-2BY46wCi7SEoi28/3mA9H81W71LnJ5HrmLobnQ4D1Sk=", 790 + "lastModified": 1768265362, 791 + "narHash": "sha256-BElh4ockJAFRus3K/HAYYJ1Z35eMvnOGkQPlKkzNT0w=", 737 792 "owner": "tgirlcloud", 738 793 "repo": "pkgs", 739 - "rev": "1e7bc63988a41c7bd5d2396bbfb8e676ca6eedd1", 794 + "rev": "6670f3712d97005d162243b24c3a756df422c10c", 740 795 "type": "github" 741 796 }, 742 797 "original": { ··· 765 820 }, 766 821 "zig2nix": { 767 822 "inputs": { 768 - "flake-utils": "flake-utils_4", 823 + "flake-utils": "flake-utils_5", 769 824 "nixpkgs": "nixpkgs_5" 770 825 }, 771 826 "locked": { ··· 787 842 "zig2nix": "zig2nix" 788 843 }, 789 844 "locked": { 790 - "lastModified": 1767846105, 791 - "narHash": "sha256-gFmzw9c9m+OrkCXzh9XfknTAV7RRI6NRPxuL4XcmXCY=", 845 + "lastModified": 1768006998, 846 + "narHash": "sha256-LzzQOHyv8DE6fwIlNJRxrSFMtHruFe5X3wxSQhrY9JY=", 792 847 "owner": "neurosnap", 793 848 "repo": "zmx", 794 - "rev": "18d9fc7968ac294250e22dc23cdcc27f9e505b8b", 849 + "rev": "6e6bc9ca5c33d7fe54f11def3b6d5efd6279201c", 795 850 "type": "github" 796 851 }, 797 852 "original": {
+6
flake.nix
··· 53 53 url = "github:tgirlcloud/pkgs"; 54 54 inputs.nixpkgs.follows = "nixpkgs"; 55 55 }; 56 + 57 + strings = { 58 + url = "github:jaspermayone/strings"; 59 + inputs.nixpkgs.follows = "nixpkgs"; 60 + }; 56 61 }; 57 62 58 63 outputs = ··· 68 73 tangled, 69 74 tgirlpkgs, 70 75 rust-fp, 76 + strings, 71 77 ... 72 78 }@inputs: 73 79 let
+11
home/CLAUDE.md
··· 1 + <claude-mem-context> 2 + # Recent Activity 3 + 4 + <!-- This section is auto-generated by claude-mem. Edit content outside the tags. --> 5 + 6 + ### Jan 13, 2026 7 + 8 + | ID | Time | T | Title | Read | 9 + |----|------|---|-------|------| 10 + | #339 | 4:10 PM | 🔵 | Home Manager Configuration | ~512 | 11 + </claude-mem-context>
+11
hosts/alastor/CLAUDE.md
··· 1 + <claude-mem-context> 2 + # Recent Activity 3 + 4 + <!-- This section is auto-generated by claude-mem. Edit content outside the tags. --> 5 + 6 + ### Jan 13, 2026 7 + 8 + | ID | Time | T | Title | Read | 9 + |----|------|---|-------|------| 10 + | #347 | 4:11 PM | 🟣 | Configured Two Strings Pastebin Instances on Alastor | ~337 | 11 + </claude-mem-context>
+59
hosts/alastor/configuration.nix
··· 17 17 ../../modules/bluesky-pds/default.nix 18 18 ../../modules/atuin-server 19 19 ../../modules/restic 20 + inputs.strings.nixosModules.default 20 21 inputs.tangled.nixosModules.knot 21 22 ]; 22 23 ··· 154 155 # file = ../../secrets/restic/password.age; 155 156 # mode = "400"; 156 157 # }; 158 + 159 + # Strings pastebin secrets 160 + strings-hogwarts = { 161 + file = ../../secrets/strings-hogwarts.age; 162 + mode = "400"; 163 + }; 164 + strings-witcc = { 165 + file = ../../secrets/strings-witcc.age; 166 + mode = "400"; 167 + }; 157 168 }; 158 169 159 170 # FRP tunnel server ··· 177 188 "tailscaled" 178 189 "tangled-knot" 179 190 "atuin-server" 191 + "strings-hogwarts" 192 + "strings-witcc" 180 193 ]; 181 194 remoteHosts = [ 182 195 "remus" ··· 221 234 secretsFile = config.age.secrets.knot-sync-github-token.path; 222 235 }; 223 236 237 + # Strings pastebin servers 238 + services.strings.instances = { 239 + hogwarts = { 240 + enable = true; 241 + baseUrl = "https://str.hogwarts.dev"; 242 + port = 3100; 243 + username = "jsp"; 244 + passwordFile = config.age.secrets.strings-hogwarts.path; 245 + }; 246 + witcc = { 247 + enable = true; 248 + baseUrl = "https://strings.witcc.dev"; 249 + port = 3101; 250 + username = "witcc"; 251 + passwordFile = config.age.secrets.strings-witcc.path; 252 + }; 253 + }; 254 + 224 255 # Caddy reverse proxy (with Cloudflare DNS plugin for ACME) 225 256 services.caddy = { 226 257 enable = true; ··· 234 265 Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" 235 266 } 236 267 reverse_proxy localhost:5555 { 268 + header_up X-Forwarded-Proto {scheme} 269 + header_up X-Forwarded-For {remote} 270 + } 271 + ''; 272 + }; 273 + virtualHosts."str.hogwarts.dev" = { 274 + extraConfig = '' 275 + tls { 276 + dns cloudflare {env.CLOUDFLARE_API_TOKEN} 277 + } 278 + header { 279 + Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" 280 + } 281 + reverse_proxy localhost:3100 { 282 + header_up X-Forwarded-Proto {scheme} 283 + header_up X-Forwarded-For {remote} 284 + } 285 + ''; 286 + }; 287 + virtualHosts."strings.witcc.dev" = { 288 + extraConfig = '' 289 + tls { 290 + dns cloudflare {env.CLOUDFLARE_API_TOKEN} 291 + } 292 + header { 293 + Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" 294 + } 295 + reverse_proxy localhost:3101 { 237 296 header_up X-Forwarded-Proto {scheme} 238 297 header_up X-Forwarded-For {remote} 239 298 }
+11
hosts/horace/CLAUDE.md
··· 1 + <claude-mem-context> 2 + # Recent Activity 3 + 4 + <!-- This section is auto-generated by claude-mem. Edit content outside the tags. --> 5 + 6 + ### Jan 13, 2026 7 + 8 + | ID | Time | T | Title | Read | 9 + |----|------|---|-------|------| 10 + | #333 | 4:08 PM | 🔵 | Horace Desktop Configuration | ~424 | 11 + </claude-mem-context>
+14
modules/CLAUDE.md
··· 1 + <claude-mem-context> 2 + # Recent Activity 3 + 4 + <!-- This section is auto-generated by claude-mem. Edit content outside the tags. --> 5 + 6 + ### Jan 13, 2026 7 + 8 + | ID | Time | T | Title | Read | 9 + |----|------|---|-------|------| 10 + | #352 | 4:15 PM | ✅ | Changed Default Strings CLI Host to Hogwarts Instance | ~219 | 11 + | #350 | 4:12 PM | ✅ | Added Strings CLI to Home Packages | ~196 | 12 + | #349 | " | 🟣 | Implemented Strings CLI Tool | ~473 | 13 + | #348 | " | ✅ | Added Inputs Parameter to Shell Module | ~149 | 14 + </claude-mem-context>
+11
modules/atuin-server/CLAUDE.md
··· 1 + <claude-mem-context> 2 + # Recent Activity 3 + 4 + <!-- This section is auto-generated by claude-mem. Edit content outside the tags. --> 5 + 6 + ### Jan 13, 2026 7 + 8 + | ID | Time | T | Title | Read | 9 + |----|------|---|-------|------| 10 + | #328 | 4:06 PM | 🔵 | Atuin Server Module Implementation | ~392 | 11 + </claude-mem-context>
+11
modules/bluesky-pds/CLAUDE.md
··· 1 + <claude-mem-context> 2 + # Recent Activity 3 + 4 + <!-- This section is auto-generated by claude-mem. Edit content outside the tags. --> 5 + 6 + ### Jan 13, 2026 7 + 8 + | ID | Time | T | Title | Read | 9 + |----|------|---|-------|------| 10 + | #331 | 4:07 PM | 🔵 | Bluesky PDS Module Implementation | ~451 | 11 + </claude-mem-context>
+11
modules/frps/CLAUDE.md
··· 1 + <claude-mem-context> 2 + # Recent Activity 3 + 4 + <!-- This section is auto-generated by claude-mem. Edit content outside the tags. --> 5 + 6 + ### Jan 13, 2026 7 + 8 + | ID | Time | T | Title | Read | 9 + |----|------|---|-------|------| 10 + | #329 | 4:07 PM | 🔵 | FRP Server Module Implementation | ~465 | 11 + </claude-mem-context>
+11
modules/knot/CLAUDE.md
··· 1 + <claude-mem-context> 2 + # Recent Activity 3 + 4 + <!-- This section is auto-generated by claude-mem. Edit content outside the tags. --> 5 + 6 + ### Jan 13, 2026 7 + 8 + | ID | Time | T | Title | Read | 9 + |----|------|---|-------|------| 10 + | #332 | 4:07 PM | 🔵 | Knot to GitHub Sync Service Implementation | ~474 | 11 + </claude-mem-context>
+11
modules/restic/CLAUDE.md
··· 1 + <claude-mem-context> 2 + # Recent Activity 3 + 4 + <!-- This section is auto-generated by claude-mem. Edit content outside the tags. --> 5 + 6 + ### Jan 13, 2026 7 + 8 + | ID | Time | T | Title | Read | 9 + |----|------|---|-------|------| 10 + | #336 | 4:08 PM | 🔵 | Restic Backup Module Implementation | ~497 | 11 + </claude-mem-context>
+93
modules/shell.nix
··· 4 4 lib, 5 5 pkgs, 6 6 hostname, 7 + inputs, 7 8 ... 8 9 }: 9 10 10 11 let 12 + # Strings CLI for uploading to pastebin 13 + strings-cli = pkgs.writeShellScriptBin "strings" '' 14 + #!/usr/bin/env bash 15 + # strings - CLI for strings pastebin 16 + # Usage: strings <file> or cat file | strings 17 + 18 + set -e 19 + 20 + STRINGS_HOST="''${STRINGS_HOST:-https://str.hogwarts.dev}" 21 + STRINGS_USER="''${STRINGS_USER:-}" 22 + STRINGS_PASS="''${STRINGS_PASS:-}" 23 + 24 + # Try to load credentials from file if not set 25 + if [[ -f "$HOME/.config/strings/credentials" ]]; then 26 + source "$HOME/.config/strings/credentials" 27 + fi 28 + 29 + if [ -z "$STRINGS_USER" ] || [ -z "$STRINGS_PASS" ]; then 30 + echo "Error: STRINGS_USER and STRINGS_PASS environment variables must be set" >&2 31 + echo "Or create ~/.config/strings/credentials with:" >&2 32 + echo " STRINGS_USER=youruser" >&2 33 + echo " STRINGS_PASS=yourpass" >&2 34 + exit 1 35 + fi 36 + 37 + # Determine filename and content 38 + FILENAME="" 39 + SLUG="" 40 + 41 + while [[ $# -gt 0 ]]; do 42 + case $1 in 43 + -s|--slug) 44 + SLUG="$2" 45 + shift 2 46 + ;; 47 + -h|--host) 48 + STRINGS_HOST="$2" 49 + shift 2 50 + ;; 51 + *) 52 + if [ -z "$FILENAME" ]; then 53 + FILENAME="$1" 54 + fi 55 + shift 56 + ;; 57 + esac 58 + done 59 + 60 + if [ -n "$FILENAME" ]; then 61 + if [ ! -f "$FILENAME" ]; then 62 + echo "Error: File not found: $FILENAME" >&2 63 + exit 1 64 + fi 65 + BASENAME=$(basename "$FILENAME") 66 + CONTENT=$(cat "$FILENAME") 67 + else 68 + CONTENT=$(cat) 69 + BASENAME="" 70 + fi 71 + 72 + # Build headers 73 + HEADERS=(-H "Content-Type: text/plain") 74 + [ -n "$BASENAME" ] && HEADERS+=(-H "X-Filename: $BASENAME") 75 + [ -n "$SLUG" ] && HEADERS+=(-H "X-Slug: $SLUG") 76 + 77 + # Make request 78 + RESPONSE=$(${pkgs.curl}/bin/curl -s -X POST "$STRINGS_HOST/api/paste" \ 79 + -u "$STRINGS_USER:$STRINGS_PASS" \ 80 + "''${HEADERS[@]}" \ 81 + --data-binary "$CONTENT") 82 + 83 + # Parse response 84 + URL=$(echo "$RESPONSE" | ${pkgs.gnugrep}/bin/grep -o '"url":"[^"]*"' | cut -d'"' -f4) 85 + 86 + if [ -n "$URL" ]; then 87 + echo "$URL" 88 + 89 + # Copy to clipboard if available 90 + if command -v pbcopy &> /dev/null; then 91 + echo -n "$URL" | pbcopy 92 + elif command -v xclip &> /dev/null; then 93 + echo -n "$URL" | xclip -selection clipboard 94 + elif command -v wl-copy &> /dev/null; then 95 + echo -n "$URL" | wl-copy 96 + fi 97 + else 98 + echo "Error: $RESPONSE" >&2 99 + exit 1 100 + fi 101 + ''; 102 + 11 103 # Tangled setup script for configuring git remotes 12 104 tangled-setup = pkgs.writeShellScriptBin "tangled-setup" '' 13 105 # Configuration ··· 508 600 home.packages = with pkgs; [ 509 601 # Custom scripts 510 602 tangled-setup 603 + strings-cli 511 604 512 605 # File management 513 606 tree
+11
modules/status/CLAUDE.md
··· 1 + <claude-mem-context> 2 + # Recent Activity 3 + 4 + <!-- This section is auto-generated by claude-mem. Edit content outside the tags. --> 5 + 6 + ### Jan 13, 2026 7 + 8 + | ID | Time | T | Title | Read | 9 + |----|------|---|-------|------| 10 + | #330 | 4:07 PM | 🔵 | Status Monitoring Module Implementation | ~400 | 11 + </claude-mem-context>
+11
secrets/CLAUDE.md
··· 1 + <claude-mem-context> 2 + # Recent Activity 3 + 4 + <!-- This section is auto-generated by claude-mem. Edit content outside the tags. --> 5 + 6 + ### Jan 13, 2026 7 + 8 + | ID | Time | T | Title | Read | 9 + |----|------|---|-------|------| 10 + | #335 | 4:08 PM | 🔵 | Agenix Secrets Configuration | ~483 | 11 + </claude-mem-context>
+15
secrets/secrets.nix
··· 96 96 jsp 97 97 alastor 98 98 ]; 99 + 100 + # Strings pastebin server secrets 101 + # Format: AUTH_PASSWORD=yourpassword 102 + "strings-hogwarts.age".publicKeys = [ 103 + jsp 104 + alastor 105 + ]; 106 + "strings-witcc.age".publicKeys = [ 107 + jsp 108 + alastor 109 + ]; 110 + 111 + # Strings CLI credentials (for use on client machines) 112 + # Format: STRINGS_USER=username\nSTRINGS_PASS=password 113 + "strings-cli.age".publicKeys = all; 99 114 }
secrets/strings-hogwarts.age

This is a binary file and will not be displayed.

+7
secrets/strings-witcc.age
··· 1 + age-encryption.org/v1 2 + -> ssh-ed25519 1uIO/w n/BTp2bvTrleHPfS8lPph5FOtGVMkHKFMVdr5qLrOz8 3 + Lu6hu5ole0pYO1Qc/k4U9FNsjlrNZxEBvZK9KHkgSzs 4 + -> ssh-ed25519 U0D80g L1JA4drfSkhlSFwn3aapDG1jrjVDS0dpmMJdj9p8lgE 5 + vTVh1wOobekZL7pEoovg4Tplye5kgmiT6Zzuid0zqb0 6 + --- NhmqZyoZsXfEPiFCKHcZYMSoLIafy4piJ12dGFWq/58 7 + �.4߃��S��L�*�|�fZ�$! �ʿ��E�ZqX���)h�ħ��ٕ�t��Z���N[D�