Compare commits
	
		
			45 Commits
		
	
	
		
			e5d5847b89
			...
			installer
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 820bb2de5b | |||
| 7d3ad52a44 | |||
| 2cdb98e898 | |||
| b717b1ceb4 | |||
| f31ce61c2b | |||
| aec22942f7 | |||
| fc8676c3bb | |||
| 2915e42a1d | |||
| 5783d3a51e | |||
| 2fe94bba23 | |||
| 4b42960d26 | |||
| 56e9abf945 | |||
| 4e2c2f92f0 | |||
| caa208b288 | |||
| 9e6f885c17 | |||
| d8ca87bfd8 | |||
| e9467e0cc7 | |||
| 6c98ef8944 | |||
| 18981e240b | |||
| df7e5953eb | |||
| 71d1c3f9c2 | |||
| 1453a755c3 | |||
| 970af805e9 | |||
| 383e9a9b1e | |||
| 26a16d0629 | |||
| 208de7654e | |||
| f577e7d58a | |||
| 6130ee73be | |||
| 5d827aa00c | |||
| 173ffc0044 | |||
| b113f2f48d | |||
| 7c67eaff21 | |||
| d1f1b84e82 | |||
| e3cb2adbb6 | |||
| 736c406eb5 | |||
| 8e9b750ac8 | |||
| 51c5578840 | |||
| e174af45f6 | |||
| 198e7188bd | |||
| 571f8f1504 | |||
| 64c3fe682c | |||
| 7c05b6158f | |||
| c9ab90547f | |||
| 63d929c8e8 | |||
| bbb87a2d69 | 
| @@ -6,7 +6,7 @@ on: | |||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   check: |   check: | ||||||
|     name: Check, build and cache Nix flake |     name: Check, build and cache nixfiles | ||||||
|     runs-on: ubuntu-22.04 |     runs-on: ubuntu-22.04 | ||||||
|     steps: |     steps: | ||||||
|       - uses: actions/checkout@v4 |       - uses: actions/checkout@v4 | ||||||
| @@ -25,15 +25,23 @@ jobs: | |||||||
|             extra-trusted-public-keys = nix-cache.nul.ie-1:BzH5yMfF4HbzY1C977XzOxoPhEc9Zbu39ftPkUbH+m4= |             extra-trusted-public-keys = nix-cache.nul.ie-1:BzH5yMfF4HbzY1C977XzOxoPhEc9Zbu39ftPkUbH+m4= | ||||||
|  |  | ||||||
|       - name: Check flake |       - name: Check flake | ||||||
|         run: nix flake check |         run: nix flake check --no-build | ||||||
|       - name: Build the world |  | ||||||
|         id: build |  | ||||||
|         run: | |  | ||||||
|           path=$(nix build --no-link .#ci.x86_64-linux --json | jq -r .[0].outputs.out) |  | ||||||
|           echo "path=$path" >> "$GITHUB_OUTPUT" |  | ||||||
|  |  | ||||||
|       - name: Push to cache |       - name: Build (and cache) the world | ||||||
|  |         id: build | ||||||
|         env: |         env: | ||||||
|           HARMONIA_SSH_KEY: ${{ secrets.HARMONIA_SSH_KEY }} |           HARMONIA_SSH_KEY: ${{ secrets.HARMONIA_SSH_KEY }} | ||||||
|         run: | |         run: | | ||||||
|           ci/push-to-cache.sh "${{ steps.build.outputs.path }}" |           nix eval --json --apply "builtins.attrNames" .#ci.x86_64-linux | jq -cr '.[]' | while read job; do | ||||||
|  |             echo "::group::Build $job" | ||||||
|  |             nix build --no-link .#ci.x86_64-linux."$job" | ||||||
|  |             echo "::endgroup::" | ||||||
|  |  | ||||||
|  |             echo "::group::Cache $job" | ||||||
|  |             ci/push-to-cache.sh "$(nix eval --raw .#ci.x86_64-linux."$job")" | ||||||
|  |             echo "::endgroup::" | ||||||
|  |           done | ||||||
|  |  | ||||||
|  |           echo "Building and caching CI derivation" | ||||||
|  |           nix build --no-link .#ciDrv.x86_64-linux | ||||||
|  |           UPDATE_PROFILE=1 ci/push-to-cache.sh "$(nix eval --raw .#ciDrv.x86_64-linux)" | ||||||
|   | |||||||
| @@ -24,6 +24,10 @@ jobs: | |||||||
|             extra-substituters = https://nix-cache.nul.ie |             extra-substituters = https://nix-cache.nul.ie | ||||||
|             extra-trusted-public-keys = nix-cache.nul.ie-1:BzH5yMfF4HbzY1C977XzOxoPhEc9Zbu39ftPkUbH+m4= |             extra-trusted-public-keys = nix-cache.nul.ie-1:BzH5yMfF4HbzY1C977XzOxoPhEc9Zbu39ftPkUbH+m4= | ||||||
|  |  | ||||||
|  |       - name: Set up vars | ||||||
|  |         id: setup | ||||||
|  |         run: | | ||||||
|  |           echo "short_rev=$(git rev-parse --short HEAD)" >> "$GITHUB_OUTPUT" | ||||||
|       - name: Build installer ISO |       - name: Build installer ISO | ||||||
|         run: | |         run: | | ||||||
|           nix build .#nixfiles.config.nixos.systems.installer.configuration.config.my.buildAs.iso |           nix build .#nixfiles.config.nixos.systems.installer.configuration.config.my.buildAs.iso | ||||||
|   | |||||||
| @@ -22,8 +22,10 @@ path="$1" | |||||||
| echo "Pushing $path to cache..." | echo "Pushing $path to cache..." | ||||||
| nix copy --no-check-sigs --to "$STORE_URI" "$path" | nix copy --no-check-sigs --to "$STORE_URI" "$path" | ||||||
|  |  | ||||||
| echo "Updating profile..." | if [ -n "$UPDATE_PROFILE" ]; then | ||||||
| remote_cmd nix-env -p "$REMOTE_STORE"/nix/var/nix/profiles/nixfiles --set "$path" |   echo "Updating profile..." | ||||||
|  |   remote_cmd nix-env -p "$REMOTE_STORE"/nix/var/nix/profiles/nixfiles --set "$path" | ||||||
|  |  | ||||||
| echo "Collecting garbage..." |   echo "Collecting garbage..." | ||||||
| remote_cmd nix-collect-garbage --delete-older-than 30d |   remote_cmd nix-collect-garbage --delete-older-than 60d | ||||||
|  | fi | ||||||
|   | |||||||
| @@ -77,7 +77,12 @@ in | |||||||
|       name = "build-n-switch"; |       name = "build-n-switch"; | ||||||
|       category = "tasks"; |       category = "tasks"; | ||||||
|       help = "Shortcut to nixos-rebuild for this flake"; |       help = "Shortcut to nixos-rebuild for this flake"; | ||||||
|       command = ''doas nixos-rebuild --flake . "$@"''; |       command = '' | ||||||
|  |         # HACK: Upstream changes in Git + Nix makes this necessary | ||||||
|  |         # https://github.com/NixOS/nix/issues/10202 | ||||||
|  |         doas git config --global --add safe.directory "$PWD" | ||||||
|  |         doas nixos-rebuild --flake . "$@" | ||||||
|  |       ''; | ||||||
|     } |     } | ||||||
|     { |     { | ||||||
|       name = "run-vm"; |       name = "run-vm"; | ||||||
| @@ -115,29 +120,17 @@ in | |||||||
|       help = "Build home-manager configuration"; |       help = "Build home-manager configuration"; | ||||||
|       command = ''nix build "''${@:2}" ".#homeConfigurations.\"$1\".activationPackage"''; |       command = ''nix build "''${@:2}" ".#homeConfigurations.\"$1\".activationPackage"''; | ||||||
|     } |     } | ||||||
|     { |  | ||||||
|       name = "update-inputs"; |  | ||||||
|       category = "tasks"; |  | ||||||
|       help = "Update flake inputs"; |  | ||||||
|       command = '' |  | ||||||
|         args=() |  | ||||||
|         for f in "$@"; do |  | ||||||
|           args+=(--update-input "$f") |  | ||||||
|         done |  | ||||||
|         nix flake lock "''${args[@]}" |  | ||||||
|       ''; |  | ||||||
|     } |  | ||||||
|     { |     { | ||||||
|       name = "update-nixpkgs"; |       name = "update-nixpkgs"; | ||||||
|       category = "tasks"; |       category = "tasks"; | ||||||
|       help = "Update nixpkgs flake inputs"; |       help = "Update nixpkgs flake inputs"; | ||||||
|       command = ''update-inputs nixpkgs-{unstable,stable,mine,mine-stable}''; |       command = ''nix flake update nixpkgs-{unstable,stable,mine,mine-stable}''; | ||||||
|     } |     } | ||||||
|     { |     { | ||||||
|       name = "update-home-manager"; |       name = "update-home-manager"; | ||||||
|       category = "tasks"; |       category = "tasks"; | ||||||
|       help = "Update home-manager flake inputs"; |       help = "Update home-manager flake inputs"; | ||||||
|       command = ''update-inputs home-manager-{unstable,stable}''; |       command = ''nix flake update home-manager-{unstable,stable}''; | ||||||
|     } |     } | ||||||
|     { |     { | ||||||
|       name = "update-installer"; |       name = "update-installer"; | ||||||
| @@ -145,5 +138,15 @@ in | |||||||
|       help = "Update installer tag (to trigger new release)"; |       help = "Update installer tag (to trigger new release)"; | ||||||
|       command = ''git tag -f installer && git push -f origin installer''; |       command = ''git tag -f installer && git push -f origin installer''; | ||||||
|     } |     } | ||||||
|  |     { | ||||||
|  |       name = "deploy-multi"; | ||||||
|  |       category = "tasks"; | ||||||
|  |       help = "Deploy multiple flakes at once"; | ||||||
|  |       command = '' | ||||||
|  |         for f in $@; do | ||||||
|  |           deploy "$O" $f | ||||||
|  |         done | ||||||
|  |       ''; | ||||||
|  |     } | ||||||
|   ]; |   ]; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -11,7 +11,7 @@ in | |||||||
|  |  | ||||||
|     NIX_USER_CONF_FILES = toString (pkgs.writeText "nix.conf" |     NIX_USER_CONF_FILES = toString (pkgs.writeText "nix.conf" | ||||||
|       '' |       '' | ||||||
|         experimental-features = nix-command flakes ca-derivations repl-flake |         experimental-features = nix-command flakes ca-derivations | ||||||
|         connect-timeout = 5 |         connect-timeout = 5 | ||||||
|         fallback = true |         fallback = true | ||||||
|         ${lib.my.c.nix.cache.conf} |         ${lib.my.c.nix.cache.conf} | ||||||
| @@ -24,6 +24,7 @@ in | |||||||
|     coreutils |     coreutils | ||||||
|     nixVersions.stable |     nixVersions.stable | ||||||
|     rage |     rage | ||||||
|  |     wireguard-tools | ||||||
|     (pkgs.writeShellScriptBin "deploy" '' |     (pkgs.writeShellScriptBin "deploy" '' | ||||||
|       exec ${deploy-rs.deploy-rs}/bin/deploy --skip-checks "$@" |       exec ${deploy-rs.deploy-rs}/bin/deploy --skip-checks "$@" | ||||||
|     '') |     '') | ||||||
|   | |||||||
							
								
								
									
										370
									
								
								flake.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										370
									
								
								flake.lock
									
									
									
										generated
									
									
									
								
							| @@ -8,14 +8,14 @@ | |||||||
|           "ragenix", |           "ragenix", | ||||||
|           "nixpkgs" |           "nixpkgs" | ||||||
|         ], |         ], | ||||||
|         "systems": "systems_8" |         "systems": "systems_7" | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1707830867, |         "lastModified": 1723293904, | ||||||
|         "narHash": "sha256-PAdwm5QqdlwIqGrfzzvzZubM+FXtilekQ/FA0cI49/o=", |         "narHash": "sha256-b+uqzj+Wa6xgMS9aNbX4I+sXeb5biPDi39VgvSFqFvU=", | ||||||
|         "owner": "ryantm", |         "owner": "ryantm", | ||||||
|         "repo": "agenix", |         "repo": "agenix", | ||||||
|         "rev": "8cb01a0e717311680e0cbca06a76cbceba6f3ed6", |         "rev": "f6291c5935fdc4e0bef208cfc0dcab7e3f7a1c41", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
| @@ -24,36 +24,10 @@ | |||||||
|         "type": "github" |         "type": "github" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "attic": { |  | ||||||
|       "inputs": { |  | ||||||
|         "crane": "crane", |  | ||||||
|         "flake-compat": "flake-compat", |  | ||||||
|         "flake-utils": "flake-utils", |  | ||||||
|         "nixpkgs": [ |  | ||||||
|           "nixpkgs-unstable" |  | ||||||
|         ], |  | ||||||
|         "nixpkgs-stable": [ |  | ||||||
|           "nixpkgs-stable" |  | ||||||
|         ] |  | ||||||
|       }, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1720542474, |  | ||||||
|         "narHash": "sha256-aKjJ/4l2I9+wNGTaOGRsuS3M1+IoTibqgEMPDikXm04=", |  | ||||||
|         "owner": "zhaofengli", |  | ||||||
|         "repo": "attic", |  | ||||||
|         "rev": "6139576a3ce6bb992e0f6c3022528ec233e45f00", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "zhaofengli", |  | ||||||
|         "repo": "attic", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "boardie": { |     "boardie": { | ||||||
|       "inputs": { |       "inputs": { | ||||||
|         "devshell": "devshell", |         "devshell": "devshell", | ||||||
|         "flake-utils": "flake-utils_3", |         "flake-utils": "flake-utils_2", | ||||||
|         "nixpkgs": [ |         "nixpkgs": [ | ||||||
|           "nixpkgs-unstable" |           "nixpkgs-unstable" | ||||||
|         ], |         ], | ||||||
| @@ -76,17 +50,17 @@ | |||||||
|     "borgthin": { |     "borgthin": { | ||||||
|       "inputs": { |       "inputs": { | ||||||
|         "devshell": "devshell_2", |         "devshell": "devshell_2", | ||||||
|         "flake-utils": "flake-utils_6", |         "flake-utils": "flake-utils_5", | ||||||
|         "nixpkgs": [ |         "nixpkgs": [ | ||||||
|           "nixpkgs-mine" |           "nixpkgs-mine" | ||||||
|         ] |         ] | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1692446555, |         "lastModified": 1732994213, | ||||||
|         "narHash": "sha256-Uzl8TiGKVBCjwYhkprSwbcu8xlcQwnDNIqsk9rM+P9w=", |         "narHash": "sha256-3v8cTsPB+TIdWmc1gmRNd0Mi0elpfi39CXRsA/2x/Oo=", | ||||||
|         "owner": "devplayer0", |         "owner": "devplayer0", | ||||||
|         "repo": "borg", |         "repo": "borg", | ||||||
|         "rev": "44a3dc19b014ebc8d33db0b3e145ed7bfc9a0cb7", |         "rev": "795f5009445987d42f32de1b49fdeb2d88326a64", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
| @@ -96,39 +70,12 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "crane": { |     "crane": { | ||||||
|       "inputs": { |  | ||||||
|         "nixpkgs": [ |  | ||||||
|           "attic", |  | ||||||
|           "nixpkgs" |  | ||||||
|         ] |  | ||||||
|       }, |  | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1717025063, |         "lastModified": 1725409566, | ||||||
|         "narHash": "sha256-dIubLa56W9sNNz0e8jGxrX3CAkPXsq7snuFA/Ie6dn8=", |         "narHash": "sha256-PrtLmqhM6UtJP7v7IGyzjBFhbG4eOAHT6LPYOFmYfbk=", | ||||||
|         "owner": "ipetkov", |         "owner": "ipetkov", | ||||||
|         "repo": "crane", |         "repo": "crane", | ||||||
|         "rev": "480dff0be03dac0e51a8dfc26e882b0d123a450e", |         "rev": "7e4586bad4e3f8f97a9271def747cf58c4b68f3c", | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "ipetkov", |  | ||||||
|         "repo": "crane", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "crane_2": { |  | ||||||
|       "inputs": { |  | ||||||
|         "nixpkgs": [ |  | ||||||
|           "ragenix", |  | ||||||
|           "nixpkgs" |  | ||||||
|         ] |  | ||||||
|       }, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1708794349, |  | ||||||
|         "narHash": "sha256-jX+B1VGHT0ruHHL5RwS8L21R6miBn4B6s9iVyUJsJJY=", |  | ||||||
|         "owner": "ipetkov", |  | ||||||
|         "repo": "crane", |  | ||||||
|         "rev": "2c94ff9a6fbeb9f3ea0107f28688edbe9c81deaa", |  | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
| @@ -162,18 +109,18 @@ | |||||||
|     }, |     }, | ||||||
|     "deploy-rs": { |     "deploy-rs": { | ||||||
|       "inputs": { |       "inputs": { | ||||||
|         "flake-compat": "flake-compat_2", |         "flake-compat": "flake-compat", | ||||||
|         "nixpkgs": [ |         "nixpkgs": [ | ||||||
|           "nixpkgs-unstable" |           "nixpkgs-unstable" | ||||||
|         ], |         ], | ||||||
|         "utils": "utils" |         "utils": "utils" | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1718194053, |         "lastModified": 1727447169, | ||||||
|         "narHash": "sha256-FaGrf7qwZ99ehPJCAwgvNY5sLCqQ3GDiE/6uLhxxwSY=", |         "narHash": "sha256-3KyjMPUKHkiWhwR91J1YchF6zb6gvckCAY1jOE+ne0U=", | ||||||
|         "owner": "serokell", |         "owner": "serokell", | ||||||
|         "repo": "deploy-rs", |         "repo": "deploy-rs", | ||||||
|         "rev": "3867348fa92bc892eba5d9ddb2d7a97b9e127a8a", |         "rev": "aa07eb05537d4cd025e2310397a6adcedfe72c76", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
| @@ -184,7 +131,7 @@ | |||||||
|     }, |     }, | ||||||
|     "devshell": { |     "devshell": { | ||||||
|       "inputs": { |       "inputs": { | ||||||
|         "flake-utils": "flake-utils_2", |         "flake-utils": "flake-utils", | ||||||
|         "nixpkgs": "nixpkgs" |         "nixpkgs": "nixpkgs" | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
| @@ -203,7 +150,7 @@ | |||||||
|     }, |     }, | ||||||
|     "devshell-tools": { |     "devshell-tools": { | ||||||
|       "inputs": { |       "inputs": { | ||||||
|         "flake-utils": "flake-utils_11", |         "flake-utils": "flake-utils_9", | ||||||
|         "nixpkgs": "nixpkgs_4" |         "nixpkgs": "nixpkgs_4" | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
| @@ -222,7 +169,7 @@ | |||||||
|     }, |     }, | ||||||
|     "devshell_2": { |     "devshell_2": { | ||||||
|       "inputs": { |       "inputs": { | ||||||
|         "flake-utils": "flake-utils_5", |         "flake-utils": "flake-utils_4", | ||||||
|         "nixpkgs": "nixpkgs_3" |         "nixpkgs": "nixpkgs_3" | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
| @@ -241,17 +188,16 @@ | |||||||
|     }, |     }, | ||||||
|     "devshell_3": { |     "devshell_3": { | ||||||
|       "inputs": { |       "inputs": { | ||||||
|         "flake-utils": "flake-utils_7", |  | ||||||
|         "nixpkgs": [ |         "nixpkgs": [ | ||||||
|           "nixpkgs-unstable" |           "nixpkgs-unstable" | ||||||
|         ] |         ] | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1713532798, |         "lastModified": 1728330715, | ||||||
|         "narHash": "sha256-wtBhsdMJA3Wa32Wtm1eeo84GejtI43pMrFrmwLXrsEc=", |         "narHash": "sha256-xRJ2nPOXb//u1jaBnDP56M7v5ldavjbtR6lfGqSvcKg=", | ||||||
|         "owner": "numtide", |         "owner": "numtide", | ||||||
|         "repo": "devshell", |         "repo": "devshell", | ||||||
|         "rev": "12e914740a25ea1891ec619bb53cf5e6ca922e40", |         "rev": "dd6b80932022cea34a019e2bb32f6fa9e494dfef", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
| @@ -261,22 +207,6 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "flake-compat": { |     "flake-compat": { | ||||||
|       "flake": false, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1673956053, |  | ||||||
|         "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", |  | ||||||
|         "owner": "edolstra", |  | ||||||
|         "repo": "flake-compat", |  | ||||||
|         "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "edolstra", |  | ||||||
|         "repo": "flake-compat", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "flake-compat_2": { |  | ||||||
|       "flake": false, |       "flake": false, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1696426674, |         "lastModified": 1696426674, | ||||||
| @@ -293,90 +223,6 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "flake-utils": { |     "flake-utils": { | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1667395993, |  | ||||||
|         "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", |  | ||||||
|         "owner": "numtide", |  | ||||||
|         "repo": "flake-utils", |  | ||||||
|         "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "numtide", |  | ||||||
|         "repo": "flake-utils", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "flake-utils_10": { |  | ||||||
|       "inputs": { |  | ||||||
|         "systems": "systems_9" |  | ||||||
|       }, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1705309234, |  | ||||||
|         "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=", |  | ||||||
|         "owner": "numtide", |  | ||||||
|         "repo": "flake-utils", |  | ||||||
|         "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "numtide", |  | ||||||
|         "repo": "flake-utils", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "flake-utils_11": { |  | ||||||
|       "inputs": { |  | ||||||
|         "systems": "systems_10" |  | ||||||
|       }, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1709126324, |  | ||||||
|         "narHash": "sha256-q6EQdSeUZOG26WelxqkmR7kArjgWCdw5sfJVHPH/7j8=", |  | ||||||
|         "owner": "numtide", |  | ||||||
|         "repo": "flake-utils", |  | ||||||
|         "rev": "d465f4819400de7c8d874d50b982301f28a84605", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "numtide", |  | ||||||
|         "repo": "flake-utils", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "flake-utils_12": { |  | ||||||
|       "inputs": { |  | ||||||
|         "systems": "systems_11" |  | ||||||
|       }, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1705309234, |  | ||||||
|         "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=", |  | ||||||
|         "owner": "numtide", |  | ||||||
|         "repo": "flake-utils", |  | ||||||
|         "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "numtide", |  | ||||||
|         "repo": "flake-utils", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "flake-utils_13": { |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1667395993, |  | ||||||
|         "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", |  | ||||||
|         "owner": "numtide", |  | ||||||
|         "repo": "flake-utils", |  | ||||||
|         "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "numtide", |  | ||||||
|         "repo": "flake-utils", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "flake-utils_2": { |  | ||||||
|       "inputs": { |       "inputs": { | ||||||
|         "systems": "systems" |         "systems": "systems" | ||||||
|       }, |       }, | ||||||
| @@ -394,7 +240,40 @@ | |||||||
|         "type": "github" |         "type": "github" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "flake-utils_3": { |     "flake-utils_10": { | ||||||
|  |       "inputs": { | ||||||
|  |         "systems": "systems_10" | ||||||
|  |       }, | ||||||
|  |       "locked": { | ||||||
|  |         "lastModified": 1705309234, | ||||||
|  |         "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=", | ||||||
|  |         "owner": "numtide", | ||||||
|  |         "repo": "flake-utils", | ||||||
|  |         "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26", | ||||||
|  |         "type": "github" | ||||||
|  |       }, | ||||||
|  |       "original": { | ||||||
|  |         "owner": "numtide", | ||||||
|  |         "repo": "flake-utils", | ||||||
|  |         "type": "github" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "flake-utils_11": { | ||||||
|  |       "locked": { | ||||||
|  |         "lastModified": 1667395993, | ||||||
|  |         "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", | ||||||
|  |         "owner": "numtide", | ||||||
|  |         "repo": "flake-utils", | ||||||
|  |         "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", | ||||||
|  |         "type": "github" | ||||||
|  |       }, | ||||||
|  |       "original": { | ||||||
|  |         "owner": "numtide", | ||||||
|  |         "repo": "flake-utils", | ||||||
|  |         "type": "github" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "flake-utils_2": { | ||||||
|       "inputs": { |       "inputs": { | ||||||
|         "systems": "systems_2" |         "systems": "systems_2" | ||||||
|       }, |       }, | ||||||
| @@ -412,7 +291,7 @@ | |||||||
|         "type": "github" |         "type": "github" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "flake-utils_4": { |     "flake-utils_3": { | ||||||
|       "inputs": { |       "inputs": { | ||||||
|         "systems": "systems_3" |         "systems": "systems_3" | ||||||
|       }, |       }, | ||||||
| @@ -430,7 +309,7 @@ | |||||||
|         "type": "github" |         "type": "github" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "flake-utils_5": { |     "flake-utils_4": { | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1642700792, |         "lastModified": 1642700792, | ||||||
|         "narHash": "sha256-XqHrk7hFb+zBvRg6Ghl+AZDq03ov6OshJLiSWOoX5es=", |         "narHash": "sha256-XqHrk7hFb+zBvRg6Ghl+AZDq03ov6OshJLiSWOoX5es=", | ||||||
| @@ -445,7 +324,7 @@ | |||||||
|         "type": "github" |         "type": "github" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "flake-utils_6": { |     "flake-utils_5": { | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1667395993, |         "lastModified": 1667395993, | ||||||
|         "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", |         "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", | ||||||
| @@ -460,16 +339,31 @@ | |||||||
|         "type": "github" |         "type": "github" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "flake-utils_7": { |     "flake-utils_6": { | ||||||
|       "inputs": { |       "inputs": { | ||||||
|         "systems": "systems_6" |         "systems": "systems_6" | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1701680307, |         "lastModified": 1731533236, | ||||||
|         "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", |         "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", | ||||||
|         "owner": "numtide", |         "owner": "numtide", | ||||||
|         "repo": "flake-utils", |         "repo": "flake-utils", | ||||||
|         "rev": "4022d587cbbfd70fe950c1e2083a02621806a725", |         "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", | ||||||
|  |         "type": "github" | ||||||
|  |       }, | ||||||
|  |       "original": { | ||||||
|  |         "owner": "numtide", | ||||||
|  |         "repo": "flake-utils", | ||||||
|  |         "type": "github" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "flake-utils_7": { | ||||||
|  |       "locked": { | ||||||
|  |         "lastModified": 1659877975, | ||||||
|  |         "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", | ||||||
|  |         "owner": "numtide", | ||||||
|  |         "repo": "flake-utils", | ||||||
|  |         "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
| @@ -480,7 +374,7 @@ | |||||||
|     }, |     }, | ||||||
|     "flake-utils_8": { |     "flake-utils_8": { | ||||||
|       "inputs": { |       "inputs": { | ||||||
|         "systems": "systems_7" |         "systems": "systems_8" | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1710146030, |         "lastModified": 1710146030, | ||||||
| @@ -497,12 +391,15 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "flake-utils_9": { |     "flake-utils_9": { | ||||||
|  |       "inputs": { | ||||||
|  |         "systems": "systems_9" | ||||||
|  |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1659877975, |         "lastModified": 1709126324, | ||||||
|         "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", |         "narHash": "sha256-q6EQdSeUZOG26WelxqkmR7kArjgWCdw5sfJVHPH/7j8=", | ||||||
|         "owner": "numtide", |         "owner": "numtide", | ||||||
|         "repo": "flake-utils", |         "repo": "flake-utils", | ||||||
|         "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", |         "rev": "d465f4819400de7c8d874d50b982301f28a84605", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
| @@ -540,16 +437,16 @@ | |||||||
|         ] |         ] | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1719827415, |         "lastModified": 1732466619, | ||||||
|         "narHash": "sha256-pvh+1hStXXAZf0sZ1xIJbWGx4u+OGBC1rVx6Wsw0fBw=", |         "narHash": "sha256-T1e5oceypZu3Q8vzICjv1X/sGs9XfJRMW5OuXHgpB3c=", | ||||||
|         "owner": "nix-community", |         "owner": "nix-community", | ||||||
|         "repo": "home-manager", |         "repo": "home-manager", | ||||||
|         "rev": "f2e3c19867262dbe84fdfab42467fc8dd83a2005", |         "rev": "f3111f62a23451114433888902a55cf0692b408d", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
|         "id": "home-manager", |         "id": "home-manager", | ||||||
|         "ref": "release-23.11", |         "ref": "release-24.11", | ||||||
|         "type": "indirect" |         "type": "indirect" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
| @@ -560,11 +457,11 @@ | |||||||
|         ] |         ] | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1720734513, |         "lastModified": 1732884235, | ||||||
|         "narHash": "sha256-neWQ8eNtLTd+YMesb7WjKl1SVCbDyCm46LUgP/g/hdo=", |         "narHash": "sha256-r8j6R3nrvwbT1aUp4EPQ1KC7gm0pu9VcV1aNaB+XG6Q=", | ||||||
|         "owner": "nix-community", |         "owner": "nix-community", | ||||||
|         "repo": "home-manager", |         "repo": "home-manager", | ||||||
|         "rev": "90ae324e2c56af10f20549ab72014804a3064c7f", |         "rev": "819f682269f4e002884702b87e445c82840c68f2", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
| @@ -574,11 +471,11 @@ | |||||||
|     }, |     }, | ||||||
|     "impermanence": { |     "impermanence": { | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1719091691, |         "lastModified": 1731242966, | ||||||
|         "narHash": "sha256-AxaLX5cBEcGtE02PeGsfscSb/fWMnyS7zMWBXQWDKbE=", |         "narHash": "sha256-B3C3JLbGw0FtLSWCjBxU961gLNv+BOOBC6WvstKLYMw=", | ||||||
|         "owner": "nix-community", |         "owner": "nix-community", | ||||||
|         "repo": "impermanence", |         "repo": "impermanence", | ||||||
|         "rev": "23c1f06316b67cb5dabdfe2973da3785cfe9c34a", |         "rev": "3ed3f0eaae9fcc0a8331e77e9319c8a4abd8a71a", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
| @@ -611,7 +508,7 @@ | |||||||
|     }, |     }, | ||||||
|     "nixGL": { |     "nixGL": { | ||||||
|       "inputs": { |       "inputs": { | ||||||
|         "flake-utils": "flake-utils_9", |         "flake-utils": "flake-utils_7", | ||||||
|         "nixpkgs": [ |         "nixpkgs": [ | ||||||
|           "nixpkgs-unstable" |           "nixpkgs-unstable" | ||||||
|         ] |         ] | ||||||
| @@ -648,11 +545,11 @@ | |||||||
|     }, |     }, | ||||||
|     "nixpkgs-mine": { |     "nixpkgs-mine": { | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1721079763, |         "lastModified": 1732985787, | ||||||
|         "narHash": "sha256-mlzukvwgiBm9Q8BedrZagnTcsDTXYKaFCf38KiSrsMc=", |         "narHash": "sha256-6rSJ9L4QywpHLi/xvpOHdTuPm6/eOJcXxnYzDbP3U1k=", | ||||||
|         "owner": "devplayer0", |         "owner": "devplayer0", | ||||||
|         "repo": "nixpkgs", |         "repo": "nixpkgs", | ||||||
|         "rev": "b4cd56e5afee2cec3e1feca912680539cbb51403", |         "rev": "a28c46933ef5038fb7a2dd483b85152a539c7969", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
| @@ -664,11 +561,11 @@ | |||||||
|     }, |     }, | ||||||
|     "nixpkgs-mine-stable": { |     "nixpkgs-mine-stable": { | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1720987393, |         "lastModified": 1732985894, | ||||||
|         "narHash": "sha256-aq1reu43552gD+QRyxAMlimAX9+YbGpAIyw82jg0eWY=", |         "narHash": "sha256-YYuQQCcSF6KjgtAenZJiBmqt5jqP3UvYgC424VQ+22s=", | ||||||
|         "owner": "devplayer0", |         "owner": "devplayer0", | ||||||
|         "repo": "nixpkgs", |         "repo": "nixpkgs", | ||||||
|         "rev": "154ab603fb2b794b437f233853aeb3c75f101049", |         "rev": "e0a3f4e2bbc5f7b681e344b389dcbab23f2e92a8", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
| @@ -680,26 +577,26 @@ | |||||||
|     }, |     }, | ||||||
|     "nixpkgs-stable": { |     "nixpkgs-stable": { | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1720535198, |         "lastModified": 1732824227, | ||||||
|         "narHash": "sha256-zwVvxrdIzralnSbcpghA92tWu2DV2lwv89xZc8MTrbg=", |         "narHash": "sha256-fYNXgpu1AEeLyd3fQt4Ym0tcVP7cdJ8wRoqJ+CtTRyY=", | ||||||
|         "owner": "NixOS", |         "owner": "NixOS", | ||||||
|         "repo": "nixpkgs", |         "repo": "nixpkgs", | ||||||
|         "rev": "205fd4226592cc83fd4c0885a3e4c9c400efabb5", |         "rev": "c71ad5c34d51dcbda4c15f44ea4e4aa6bb6ac1e9", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
|         "id": "nixpkgs", |         "id": "nixpkgs", | ||||||
|         "ref": "nixos-23.11", |         "ref": "nixos-24.11", | ||||||
|         "type": "indirect" |         "type": "indirect" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "nixpkgs-unstable": { |     "nixpkgs-unstable": { | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1720768451, |         "lastModified": 1732758367, | ||||||
|         "narHash": "sha256-EYekUHJE2gxeo2pM/zM9Wlqw1Uw2XTJXOSAO79ksc4Y=", |         "narHash": "sha256-RzaI1RO0UXqLjydtz3GAXSTzHkpb/lLD1JD8a0W4Wpo=", | ||||||
|         "owner": "NixOS", |         "owner": "NixOS", | ||||||
|         "repo": "nixpkgs", |         "repo": "nixpkgs", | ||||||
|         "rev": "7e7c39ea35c5cdd002cd4588b03a3fb9ece6fad9", |         "rev": "fa42b5a5f401aab8a32bd33c9a4de0738180dc59", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
| @@ -774,7 +671,7 @@ | |||||||
|     }, |     }, | ||||||
|     "poetry2nix": { |     "poetry2nix": { | ||||||
|       "inputs": { |       "inputs": { | ||||||
|         "flake-utils": "flake-utils_4", |         "flake-utils": "flake-utils_3", | ||||||
|         "nix-github-actions": "nix-github-actions", |         "nix-github-actions": "nix-github-actions", | ||||||
|         "nixpkgs": "nixpkgs_2", |         "nixpkgs": "nixpkgs_2", | ||||||
|         "systems": "systems_4", |         "systems": "systems_4", | ||||||
| @@ -797,35 +694,35 @@ | |||||||
|     "ragenix": { |     "ragenix": { | ||||||
|       "inputs": { |       "inputs": { | ||||||
|         "agenix": "agenix", |         "agenix": "agenix", | ||||||
|         "crane": "crane_2", |         "crane": "crane", | ||||||
|         "flake-utils": "flake-utils_10", |         "flake-utils": "flake-utils_8", | ||||||
|         "nixpkgs": [ |         "nixpkgs": [ | ||||||
|           "nixpkgs-unstable" |           "nixpkgs-unstable" | ||||||
|         ], |         ], | ||||||
|         "rust-overlay": "rust-overlay" |         "rust-overlay": "rust-overlay" | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1718869541, |         "lastModified": 1731774781, | ||||||
|         "narHash": "sha256-smhpGh1x/8mNl+sFL8SbeWnx0bK4HWjmdRA3mIwGjPU=", |         "narHash": "sha256-vwsUUYOIs8J6weeSK1n1mbZf8fgvygGUMsadx0JmG70=", | ||||||
|         "owner": "yaxitech", |         "owner": "devplayer0", | ||||||
|         "repo": "ragenix", |         "repo": "ragenix", | ||||||
|         "rev": "8a254bbaa93fbd38e16f70fa81af6782794e046e", |         "rev": "ec4115da7b67c783b1091811e17dbcba50edd1c6", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
|         "owner": "yaxitech", |         "owner": "devplayer0", | ||||||
|  |         "ref": "add-rekey-one-flag", | ||||||
|         "repo": "ragenix", |         "repo": "ragenix", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "root": { |     "root": { | ||||||
|       "inputs": { |       "inputs": { | ||||||
|         "attic": "attic", |  | ||||||
|         "boardie": "boardie", |         "boardie": "boardie", | ||||||
|         "borgthin": "borgthin", |         "borgthin": "borgthin", | ||||||
|         "deploy-rs": "deploy-rs", |         "deploy-rs": "deploy-rs", | ||||||
|         "devshell": "devshell_3", |         "devshell": "devshell_3", | ||||||
|         "flake-utils": "flake-utils_8", |         "flake-utils": "flake-utils_6", | ||||||
|         "home-manager-stable": "home-manager-stable", |         "home-manager-stable": "home-manager-stable", | ||||||
|         "home-manager-unstable": "home-manager-unstable", |         "home-manager-unstable": "home-manager-unstable", | ||||||
|         "impermanence": "impermanence", |         "impermanence": "impermanence", | ||||||
| @@ -840,21 +737,17 @@ | |||||||
|     }, |     }, | ||||||
|     "rust-overlay": { |     "rust-overlay": { | ||||||
|       "inputs": { |       "inputs": { | ||||||
|         "flake-utils": [ |  | ||||||
|           "ragenix", |  | ||||||
|           "flake-utils" |  | ||||||
|         ], |  | ||||||
|         "nixpkgs": [ |         "nixpkgs": [ | ||||||
|           "ragenix", |           "ragenix", | ||||||
|           "nixpkgs" |           "nixpkgs" | ||||||
|         ] |         ] | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1708740535, |         "lastModified": 1725675754, | ||||||
|         "narHash": "sha256-NCTw235XwSDbeTAtAwg/hOeNOgwYhVq7JjDdbkOgBeA=", |         "narHash": "sha256-hXW3csqePOcF2e/PYnpXj72KEYyNj2HzTrVNmS/F7Ug=", | ||||||
|         "owner": "oxalica", |         "owner": "oxalica", | ||||||
|         "repo": "rust-overlay", |         "repo": "rust-overlay", | ||||||
|         "rev": "9b24383d77f598716fa0cbb8b48c97249f5ee1af", |         "rev": "8cc45e678e914a16c8e224c3237fb07cf21e5e54", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
| @@ -865,7 +758,7 @@ | |||||||
|     }, |     }, | ||||||
|     "sbt": { |     "sbt": { | ||||||
|       "inputs": { |       "inputs": { | ||||||
|         "flake-utils": "flake-utils_13", |         "flake-utils": "flake-utils_11", | ||||||
|         "nixpkgs": "nixpkgs_5" |         "nixpkgs": "nixpkgs_5" | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
| @@ -885,7 +778,7 @@ | |||||||
|     "sharry": { |     "sharry": { | ||||||
|       "inputs": { |       "inputs": { | ||||||
|         "devshell-tools": "devshell-tools", |         "devshell-tools": "devshell-tools", | ||||||
|         "flake-utils": "flake-utils_12", |         "flake-utils": "flake-utils_10", | ||||||
|         "nixpkgs": [ |         "nixpkgs": [ | ||||||
|           "nixpkgs-unstable" |           "nixpkgs-unstable" | ||||||
|         ], |         ], | ||||||
| @@ -935,21 +828,6 @@ | |||||||
|         "type": "github" |         "type": "github" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "systems_11": { |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1681028828, |  | ||||||
|         "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", |  | ||||||
|         "owner": "nix-systems", |  | ||||||
|         "repo": "default", |  | ||||||
|         "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "nix-systems", |  | ||||||
|         "repo": "default", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "systems_2": { |     "systems_2": { | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1681028828, |         "lastModified": 1681028828, | ||||||
|   | |||||||
							
								
								
									
										28
									
								
								flake.nix
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								flake.nix
									
									
									
									
									
								
							| @@ -7,17 +7,18 @@ | |||||||
|     devshell.inputs.nixpkgs.follows = "nixpkgs-unstable"; |     devshell.inputs.nixpkgs.follows = "nixpkgs-unstable"; | ||||||
|  |  | ||||||
|     nixpkgs-unstable.url = "nixpkgs/nixos-unstable"; |     nixpkgs-unstable.url = "nixpkgs/nixos-unstable"; | ||||||
|     nixpkgs-stable.url = "nixpkgs/nixos-23.11"; |     nixpkgs-stable.url = "nixpkgs/nixos-24.11"; | ||||||
|     nixpkgs-mine.url = "github:devplayer0/nixpkgs/devplayer0"; |     nixpkgs-mine.url = "github:devplayer0/nixpkgs/devplayer0"; | ||||||
|     nixpkgs-mine-stable.url = "github:devplayer0/nixpkgs/devplayer0-stable"; |     nixpkgs-mine-stable.url = "github:devplayer0/nixpkgs/devplayer0-stable"; | ||||||
|  |  | ||||||
|     home-manager-unstable.url = "home-manager"; |     home-manager-unstable.url = "home-manager"; | ||||||
|     home-manager-unstable.inputs.nixpkgs.follows = "nixpkgs-unstable"; |     home-manager-unstable.inputs.nixpkgs.follows = "nixpkgs-unstable"; | ||||||
|     home-manager-stable.url = "home-manager/release-23.11"; |     home-manager-stable.url = "home-manager/release-24.11"; | ||||||
|     home-manager-stable.inputs.nixpkgs.follows = "nixpkgs-stable"; |     home-manager-stable.inputs.nixpkgs.follows = "nixpkgs-stable"; | ||||||
|  |  | ||||||
|     # Stuff used by the flake for build / deployment |     # Stuff used by the flake for build / deployment | ||||||
|     ragenix.url = "github:yaxitech/ragenix"; |     # ragenix.url = "github:yaxitech/ragenix"; | ||||||
|  |     ragenix.url = "github:devplayer0/ragenix/add-rekey-one-flag"; | ||||||
|     ragenix.inputs.nixpkgs.follows = "nixpkgs-unstable"; |     ragenix.inputs.nixpkgs.follows = "nixpkgs-unstable"; | ||||||
|     deploy-rs.url = "github:serokell/deploy-rs"; |     deploy-rs.url = "github:serokell/deploy-rs"; | ||||||
|     deploy-rs.inputs.nixpkgs.follows = "nixpkgs-unstable"; |     deploy-rs.inputs.nixpkgs.follows = "nixpkgs-unstable"; | ||||||
| @@ -34,9 +35,6 @@ | |||||||
|     sharry.inputs.nixpkgs.follows = "nixpkgs-unstable"; |     sharry.inputs.nixpkgs.follows = "nixpkgs-unstable"; | ||||||
|     borgthin.url = "github:devplayer0/borg"; |     borgthin.url = "github:devplayer0/borg"; | ||||||
|     borgthin.inputs.nixpkgs.follows = "nixpkgs-mine"; |     borgthin.inputs.nixpkgs.follows = "nixpkgs-mine"; | ||||||
|     attic.url = "github:zhaofengli/attic"; |  | ||||||
|     attic.inputs.nixpkgs.follows = "nixpkgs-unstable"; |  | ||||||
|     attic.inputs.nixpkgs-stable.follows = "nixpkgs-stable"; |  | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|   outputs = |   outputs = | ||||||
| @@ -51,7 +49,7 @@ | |||||||
|       ... |       ... | ||||||
|     }: |     }: | ||||||
|     let |     let | ||||||
|       inherit (builtins) mapAttrs replaceStrings; |       inherit (builtins) mapAttrs replaceStrings elem; | ||||||
|       inherit (lib) mapAttrs' filterAttrs nameValuePair recurseIntoAttrs evalModules; |       inherit (lib) mapAttrs' filterAttrs nameValuePair recurseIntoAttrs evalModules; | ||||||
|       inherit (lib.flake) flattenTree eachDefaultSystem; |       inherit (lib.flake) flattenTree eachDefaultSystem; | ||||||
|       inherit (lib.my) mkDefaultSystemsPkgs flakePackageOverlay; |       inherit (lib.my) mkDefaultSystemsPkgs flakePackageOverlay; | ||||||
| @@ -95,7 +93,6 @@ | |||||||
|             inputs.ragenix.overlays.default |             inputs.ragenix.overlays.default | ||||||
|             inputs.deploy-rs.overlay |             inputs.deploy-rs.overlay | ||||||
|             (flakePackageOverlay inputs.home-manager-unstable system) |             (flakePackageOverlay inputs.home-manager-unstable system) | ||||||
|             inputs.attic.overlays.default |  | ||||||
|           ]; |           ]; | ||||||
|         })) |         })) | ||||||
|         pkgsFlakes; |         pkgsFlakes; | ||||||
| @@ -107,6 +104,16 @@ | |||||||
|             pkgsLibOverlay |             pkgsLibOverlay | ||||||
|             myPkgsOverlay |             myPkgsOverlay | ||||||
|           ]; |           ]; | ||||||
|  |  | ||||||
|  |           config = { | ||||||
|  |             # RMS forgive me... | ||||||
|  |             # Normally this is set modularly, but sometimes we need to use other pkgs | ||||||
|  |             allowUnfreePredicate = p: elem (lib.getName p) [ | ||||||
|  |               "widevine-cdm" | ||||||
|  |               "chromium-unwrapped" | ||||||
|  |               "chromium" | ||||||
|  |             ]; | ||||||
|  |           }; | ||||||
|         })) |         })) | ||||||
|         pkgsFlakes; |         pkgsFlakes; | ||||||
|  |  | ||||||
| @@ -197,8 +204,9 @@ | |||||||
|         systems' = mapAttrs' (n: v: nameValuePair "system-${n}" v) systems; |         systems' = mapAttrs' (n: v: nameValuePair "system-${n}" v) systems; | ||||||
|         packages' = mapAttrs' (n: v: nameValuePair "package-${n}" v) packages; |         packages' = mapAttrs' (n: v: nameValuePair "package-${n}" v) packages; | ||||||
|       in |       in | ||||||
|         pkgs.linkFarm "ci" (homes' // systems' // packages' // { |         homes' // systems' // packages' // { | ||||||
|           inherit shell; |           inherit shell; | ||||||
|         }); |         }; | ||||||
|  |       ciDrv = pkgs.linkFarm "ci" ci; | ||||||
|     })); |     })); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { lib, pkgs, config, ... }: | { lib, pkgs', pkgs, config, ... }: | ||||||
| let | let | ||||||
|   inherit (lib) genAttrs mkIf mkMerge mkForce; |   inherit (lib) genAttrs mkIf mkMerge mkForce mapAttrs mkOptionDefault; | ||||||
|   inherit (lib.my) mkBoolOpt'; |   inherit (lib.my) mkBoolOpt'; | ||||||
|  |  | ||||||
|   cfg = config.my.gui; |   cfg = config.my.gui; | ||||||
| @@ -39,10 +39,11 @@ in | |||||||
|       { |       { | ||||||
|         home = { |         home = { | ||||||
|           packages = with pkgs; [ |           packages = with pkgs; [ | ||||||
|  |             xdg-utils | ||||||
|  |  | ||||||
|             font.package |             font.package | ||||||
|             (nerdfonts.override { |             nerd-fonts.sauce-code-pro | ||||||
|               fonts = [ "DroidSansMono" "SourceCodePro" ]; |             nerd-fonts.droid-sans-mono | ||||||
|             }) |  | ||||||
|             noto-fonts-emoji |             noto-fonts-emoji | ||||||
|  |  | ||||||
|             grim |             grim | ||||||
| @@ -62,6 +63,8 @@ in | |||||||
|             neofetch |             neofetch | ||||||
|             cmatrix |             cmatrix | ||||||
|             doomsaver |             doomsaver | ||||||
|  |  | ||||||
|  |             xournalpp | ||||||
|           ]; |           ]; | ||||||
|         }; |         }; | ||||||
|  |  | ||||||
| @@ -76,7 +79,7 @@ in | |||||||
|           alacritty = { |           alacritty = { | ||||||
|             enable = true; |             enable = true; | ||||||
|             settings = { |             settings = { | ||||||
|               import = [ ./alacritty-xterm.toml ]; |               general.import = [ ./alacritty-xterm.toml ]; | ||||||
|  |  | ||||||
|               font = { |               font = { | ||||||
|                 size = font.size; |                 size = font.size; | ||||||
| @@ -95,6 +98,7 @@ in | |||||||
|               background_opacity = "0.65"; |               background_opacity = "0.65"; | ||||||
|               tab_bar_edge = "top"; |               tab_bar_edge = "top"; | ||||||
|               shell_integration = "no-sudo"; |               shell_integration = "no-sudo"; | ||||||
|  |               font_features = "${font.name} -liga"; | ||||||
|             }; |             }; | ||||||
|           }; |           }; | ||||||
|  |  | ||||||
| @@ -160,6 +164,19 @@ in | |||||||
|               }; |               }; | ||||||
|               Install.RequiredBy = [ "sway-session.target" ]; |               Install.RequiredBy = [ "sway-session.target" ]; | ||||||
|             }; |             }; | ||||||
|  |  | ||||||
|  |             activate-linux = { | ||||||
|  |               Unit = { | ||||||
|  |                 Description = "Linux activation watermark"; | ||||||
|  |                 After = "graphical-session.target"; | ||||||
|  |                 PartOf = "graphical-session.target"; | ||||||
|  |               }; | ||||||
|  |               Service = { | ||||||
|  |                 Type = "simple"; | ||||||
|  |                 ExecStart = "${pkgs.activate-linux}/bin/activate-linux"; | ||||||
|  |               }; | ||||||
|  |               Install.RequiredBy = [ "graphical-session.target" ]; | ||||||
|  |             }; | ||||||
|           }; |           }; | ||||||
|         }; |         }; | ||||||
|  |  | ||||||
| @@ -169,6 +186,7 @@ in | |||||||
|             wl-clipboard |             wl-clipboard | ||||||
|             wev |             wev | ||||||
|             wdisplays |             wdisplays | ||||||
|  |             swaysome | ||||||
|  |  | ||||||
|             pavucontrol |             pavucontrol | ||||||
|             libsecret |             libsecret | ||||||
| @@ -191,9 +209,36 @@ in | |||||||
|         xsession.preferStatusNotifierItems = true; |         xsession.preferStatusNotifierItems = true; | ||||||
|         wayland = { |         wayland = { | ||||||
|           windowManager = { |           windowManager = { | ||||||
|             sway = { |             sway = | ||||||
|  |             let | ||||||
|  |               cfg = config.wayland.windowManager.sway.config; | ||||||
|  |               mod = cfg.modifier; | ||||||
|  |  | ||||||
|  |               renameWs = pkgs.writeShellScript "sway-rename-ws" '' | ||||||
|  |                 focused_ws="$(swaymsg -t get_workspaces | jq ".[] | select(.focused)")" | ||||||
|  |                 focused_num="$(jq -r ".num" <<< "$focused_ws")" | ||||||
|  |                 focused_name="$(jq -r ".name" <<< "$focused_ws")" | ||||||
|  |                 placeholder="$(sed -E 's/[0-9]+: //' <<< "$focused_name")" | ||||||
|  |  | ||||||
|  |                 name="$(rofi -dmenu -p "rename ws $focused_num" -theme+entry+placeholder "\"$placeholder\"")" | ||||||
|  |                 if [ -n "$name" ]; then | ||||||
|  |                   swaymsg rename workspace "$focused_name" to "$focused_num: $name" | ||||||
|  |                 fi | ||||||
|  |               ''; | ||||||
|  |               clearWsName = pkgs.writeShellScript "sway-clear-ws-name" '' | ||||||
|  |                 focused_ws="$(swaymsg -t get_workspaces | jq ".[] | select(.focused)")" | ||||||
|  |                 focused_num="$(jq -r ".num" <<< "$focused_ws")" | ||||||
|  |                 focused_name="$(jq -r ".name" <<< "$focused_ws")" | ||||||
|  |  | ||||||
|  |                 swaymsg rename workspace "$focused_name" to "$focused_num" | ||||||
|  |               ''; | ||||||
|  |             in | ||||||
|  |             { | ||||||
|               enable = true; |               enable = true; | ||||||
|               xwayland = true; |               xwayland = true; | ||||||
|  |               extraConfigEarly = '' | ||||||
|  |                 set $mod ${mod} | ||||||
|  |               ''; | ||||||
|               config = { |               config = { | ||||||
|                 input = { |                 input = { | ||||||
|                   "type:touchpad" = { |                   "type:touchpad" = { | ||||||
| @@ -208,31 +253,95 @@ in | |||||||
|  |  | ||||||
|                 modifier = "Mod4"; |                 modifier = "Mod4"; | ||||||
|                 terminal = "kitty"; |                 terminal = "kitty"; | ||||||
|                 keybindings = |                 keybindings = mapAttrs (k: mkOptionDefault) { | ||||||
|                   let |                   "${mod}+Left" = "focus left"; | ||||||
|                     cfg = config.wayland.windowManager.sway.config; |                   "${mod}+Down" = "focus down"; | ||||||
|                     mod = cfg.modifier; |                   "${mod}+Up" = "focus up"; | ||||||
|                   in |                   "${mod}+Right" = "focus right"; | ||||||
|                   lib.mkOptionDefault { |  | ||||||
|                     "${mod}+d" = null; |  | ||||||
|                     "${mod}+l" = "exec ${doomsaver}/bin/doomsaver"; |  | ||||||
|                     "${mod}+x" = "exec ${cfg.menu}"; |  | ||||||
|                     "${mod}+Shift+x" = "exec rofi -show drun"; |  | ||||||
|                     "${mod}+q" = "kill"; |  | ||||||
|                     "${mod}+Shift+q" = "exec swaynag -t warning -m 'bruh you really wanna kill sway?' -b 'ye' 'systemctl --user stop graphical-session.target && swaymsg exit'"; |  | ||||||
|                     "${mod}+Shift+d" = ''exec grim - | swappy -f -''; |  | ||||||
|                     "${mod}+Shift+s" = ''exec grim -g "$(slurp)" - | swappy -f -''; |  | ||||||
|                     "${mod}+Shift+e" = "exec rofi -show emoji"; |  | ||||||
|                     # Config for this doesn't seem to work :/ |  | ||||||
|                     "${mod}+c" = ''exec rofi -show calc -calc-command "echo -n '{result}' | ${pkgs.wl-clipboard}/bin/wl-copy"''; |  | ||||||
|  |  | ||||||
|                     "XF86AudioRaiseVolume" = "exec ${pkgs.pamixer}/bin/pamixer -i 5"; |                   "${mod}+Shift+Left" = "move left"; | ||||||
|                     "XF86AudioLowerVolume" = "exec ${pkgs.pamixer}/bin/pamixer -d 5"; |                   "${mod}+Shift+Down" = "move down"; | ||||||
|                     "XF86AudioPlay" = "exec ${pkgs.playerctl}/bin/playerctl play"; |                   "${mod}+Shift+Up" = "move up"; | ||||||
|                     "XF86AudioPause" = "exec ${pkgs.playerctl}/bin/playerctl pause"; |                   "${mod}+Shift+Right" = "move right"; | ||||||
|                     "XF86AudioNext" = "exec ${pkgs.playerctl}/bin/playerctl next"; |  | ||||||
|                     "XF86AudioPrev" = "exec ${pkgs.playerctl}/bin/playerctl previous"; |                   "${mod}+b" = "splith"; | ||||||
|                   }; |                   "${mod}+v" = "splitv"; | ||||||
|  |                   "${mod}+f" = "fullscreen toggle"; | ||||||
|  |                   "${mod}+a" = "focus parent"; | ||||||
|  |  | ||||||
|  |                   "${mod}+s" = "layout stacking"; | ||||||
|  |                   "${mod}+w" = "layout tabbed"; | ||||||
|  |                   "${mod}+e" = "layout toggle split"; | ||||||
|  |  | ||||||
|  |                   "${mod}+Shift+space" = "floating toggle"; | ||||||
|  |                   "${mod}+space" = "focus mode_toggle"; | ||||||
|  |  | ||||||
|  |                   "${mod}+1" = "workspace number 1"; | ||||||
|  |                   "${mod}+2" = "workspace number 2"; | ||||||
|  |                   "${mod}+3" = "workspace number 3"; | ||||||
|  |                   "${mod}+4" = "workspace number 4"; | ||||||
|  |                   "${mod}+5" = "workspace number 5"; | ||||||
|  |                   "${mod}+6" = "workspace number 6"; | ||||||
|  |                   "${mod}+7" = "workspace number 7"; | ||||||
|  |                   "${mod}+8" = "workspace number 8"; | ||||||
|  |                   "${mod}+9" = "workspace number 9"; | ||||||
|  |                   "${mod}+0" = "workspace number 10"; | ||||||
|  |  | ||||||
|  |                   "${mod}+Shift+1" = | ||||||
|  |                     "move container to workspace number 1"; | ||||||
|  |                   "${mod}+Shift+2" = | ||||||
|  |                     "move container to workspace number 2"; | ||||||
|  |                   "${mod}+Shift+3" = | ||||||
|  |                     "move container to workspace number 3"; | ||||||
|  |                   "${mod}+Shift+4" = | ||||||
|  |                     "move container to workspace number 4"; | ||||||
|  |                   "${mod}+Shift+5" = | ||||||
|  |                     "move container to workspace number 5"; | ||||||
|  |                   "${mod}+Shift+6" = | ||||||
|  |                     "move container to workspace number 6"; | ||||||
|  |                   "${mod}+Shift+7" = | ||||||
|  |                     "move container to workspace number 7"; | ||||||
|  |                   "${mod}+Shift+8" = | ||||||
|  |                     "move container to workspace number 8"; | ||||||
|  |                   "${mod}+Shift+9" = | ||||||
|  |                     "move container to workspace number 9"; | ||||||
|  |                   "${mod}+Shift+0" = | ||||||
|  |                     "move container to workspace number 10"; | ||||||
|  |  | ||||||
|  |                   "${mod}+Shift+minus" = "move scratchpad"; | ||||||
|  |                   "${mod}+minus" = "scratchpad show"; | ||||||
|  |  | ||||||
|  |                   "${mod}+Return" = "exec ${cfg.terminal}"; | ||||||
|  |                   "${mod}+r" = "mode resize"; | ||||||
|  |                   "${mod}+d" = null; | ||||||
|  |                   "${mod}+l" = "exec ${doomsaver}/bin/doomsaver"; | ||||||
|  |                   "${mod}+q" = "kill"; | ||||||
|  |                   "${mod}+Shift+c" = "reload"; | ||||||
|  |                   "${mod}+Shift+q" = "exec swaynag -t warning -m 'bruh you really wanna kill sway?' -b 'ye' 'systemctl --user stop graphical-session.target && swaymsg exit'"; | ||||||
|  |  | ||||||
|  |                   # rofi | ||||||
|  |                   "${mod}+x" = "exec ${cfg.menu}"; | ||||||
|  |                   "${mod}+Shift+x" = "exec rofi -show drun"; | ||||||
|  |                   "${mod}+Shift+e" = "exec rofi -show emoji"; | ||||||
|  |                   # Config for this doesn't seem to work :/ | ||||||
|  |                   "${mod}+c" = ''exec rofi -show calc -calc-command "echo -n '{result}' | ${pkgs.wl-clipboard}/bin/wl-copy"''; | ||||||
|  |                   "${mod}+Shift+r" = "exec ${renameWs}"; | ||||||
|  |                   "${mod}+Shift+n" = "exec ${clearWsName}"; | ||||||
|  |  | ||||||
|  |                   # Screenshots | ||||||
|  |                   "${mod}+Shift+d" = ''exec grim - | swappy -f -''; | ||||||
|  |                   "${mod}+Shift+s" = ''exec grim -g "$(slurp)" - | swappy -f -''; | ||||||
|  |  | ||||||
|  |                   "XF86MonBrightnessDown" = "exec ${pkgs.brightnessctl}/bin/brightnessctl set 5%-"; | ||||||
|  |                   "XF86MonBrightnessUp" = "exec ${pkgs.brightnessctl}/bin/brightnessctl set +5%"; | ||||||
|  |  | ||||||
|  |                   "XF86AudioRaiseVolume" = "exec ${pkgs.pamixer}/bin/pamixer -i 5"; | ||||||
|  |                   "XF86AudioLowerVolume" = "exec ${pkgs.pamixer}/bin/pamixer -d 5"; | ||||||
|  |                   "XF86AudioPlay" = "exec ${pkgs.playerctl}/bin/playerctl play"; | ||||||
|  |                   "XF86AudioPause" = "exec ${pkgs.playerctl}/bin/playerctl pause"; | ||||||
|  |                   "XF86AudioNext" = "exec ${pkgs.playerctl}/bin/playerctl next"; | ||||||
|  |                   "XF86AudioPrev" = "exec ${pkgs.playerctl}/bin/playerctl previous"; | ||||||
|  |                 }; | ||||||
|                 keycodebindings = { |                 keycodebindings = { | ||||||
|                   # keycode for XF86AudioPlayPause (no sym for some reason) |                   # keycode for XF86AudioPlayPause (no sym for some reason) | ||||||
|                   "172" = "exec ${pkgs.playerctl}/bin/playerctl play-pause"; |                   "172" = "exec ${pkgs.playerctl}/bin/playerctl play-pause"; | ||||||
| @@ -241,6 +350,9 @@ in | |||||||
|                 menu = "rofi -show run"; |                 menu = "rofi -show run"; | ||||||
|                 bars = mkForce [ ]; |                 bars = mkForce [ ]; | ||||||
|               }; |               }; | ||||||
|  |               extraConfig = '' | ||||||
|  |                 include ${./swaysome.conf} | ||||||
|  |               ''; | ||||||
|  |  | ||||||
|               swaynag = { |               swaynag = { | ||||||
|                 enable = true; |                 enable = true; | ||||||
| @@ -291,6 +403,7 @@ in | |||||||
|             diff-so-fancy.enable = true; |             diff-so-fancy.enable = true; | ||||||
|             userEmail = "jackos1998@gmail.com"; |             userEmail = "jackos1998@gmail.com"; | ||||||
|             userName = "Jack O'Sullivan"; |             userName = "Jack O'Sullivan"; | ||||||
|  |             lfs.enable = true; | ||||||
|             extraConfig = { |             extraConfig = { | ||||||
|               pull.rebase = true; |               pull.rebase = true; | ||||||
|             }; |             }; | ||||||
| @@ -298,11 +411,13 @@ in | |||||||
|  |  | ||||||
|           waybar = import ./waybar.nix { inherit lib pkgs config font; }; |           waybar = import ./waybar.nix { inherit lib pkgs config font; }; | ||||||
|           rofi = { |           rofi = { | ||||||
|  |             package = pkgs.rofi-wayland; | ||||||
|             enable = true; |             enable = true; | ||||||
|             font = "${font.name} ${toString font.size}"; |             font = "${font.name} ${toString font.size}"; | ||||||
|             plugins = with pkgs; [ |             plugins = with pkgs; (map (p: p.override { rofi-unwrapped = rofi-wayland-unwrapped; }) [ | ||||||
|               rofi-calc |               rofi-calc | ||||||
|               rofi-emoji |             ]) ++ [ | ||||||
|  |               rofi-emoji-wayland | ||||||
|             ]; |             ]; | ||||||
|             extraConfig = { |             extraConfig = { | ||||||
|               modes = "window,run,ssh,filebrowser,calc,emoji"; |               modes = "window,run,ssh,filebrowser,calc,emoji"; | ||||||
| @@ -317,7 +432,7 @@ in | |||||||
|  |  | ||||||
|           chromium = { |           chromium = { | ||||||
|             enable = true; |             enable = true; | ||||||
|             package = (pkgs.chromium.override { enableWideVine = true; }).overrideAttrs (old: { |             package = (pkgs'.unstable.chromium.override { enableWideVine = true; }).overrideAttrs (old: { | ||||||
|               buildCommand = '' |               buildCommand = '' | ||||||
|                 ${old.buildCommand} |                 ${old.buildCommand} | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										66
									
								
								home-manager/modules/gui/swaysome.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								home-manager/modules/gui/swaysome.conf
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,66 @@ | |||||||
|  | # Use (un)bindcode or (un)bindsym, depending on what you used in your main sway config file. | ||||||
|  | # The `--no-warn` setting is only added to shortcuts that exist in the default config. You may want to add or remove | ||||||
|  | # that flag on some bindings depending on your config. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # Change focus between workspaces | ||||||
|  | bindsym $mod+Alt+1 exec "swaysome focus 1" | ||||||
|  | bindsym $mod+Alt+2 exec "swaysome focus 2" | ||||||
|  | bindsym $mod+Alt+3 exec "swaysome focus 3" | ||||||
|  | bindsym $mod+Alt+4 exec "swaysome focus 4" | ||||||
|  | bindsym $mod+Alt+5 exec "swaysome focus 5" | ||||||
|  | bindsym $mod+Alt+6 exec "swaysome focus 6" | ||||||
|  | bindsym $mod+Alt+7 exec "swaysome focus 7" | ||||||
|  | bindsym $mod+Alt+8 exec "swaysome focus 8" | ||||||
|  | bindsym $mod+Alt+9 exec "swaysome focus 9" | ||||||
|  | bindsym $mod+Alt+0 exec "swaysome focus 0" | ||||||
|  |  | ||||||
|  | # Focus workspace groups | ||||||
|  | bindsym --no-warn $mod+1 exec "swaysome focus-group 1" | ||||||
|  | bindsym --no-warn $mod+2 exec "swaysome focus-group 2" | ||||||
|  | bindsym --no-warn $mod+3 exec "swaysome focus-group 3" | ||||||
|  | bindsym --no-warn $mod+4 exec "swaysome focus-group 4" | ||||||
|  | bindsym --no-warn $mod+5 exec "swaysome focus-group 5" | ||||||
|  | bindsym --no-warn $mod+6 exec "swaysome focus-group 6" | ||||||
|  | bindsym --no-warn $mod+7 exec "swaysome focus-group 7" | ||||||
|  | bindsym --no-warn $mod+8 exec "swaysome focus-group 8" | ||||||
|  | bindsym --no-warn $mod+9 exec "swaysome focus-group 9" | ||||||
|  | bindsym --no-warn $mod+0 exec "swaysome focus-group 0" | ||||||
|  |  | ||||||
|  | # Move containers between workspaces | ||||||
|  | bindsym $mod+Alt+Shift+1 exec "swaysome move 1" | ||||||
|  | bindsym $mod+Alt+Shift+2 exec "swaysome move 2" | ||||||
|  | bindsym $mod+Alt+Shift+3 exec "swaysome move 3" | ||||||
|  | bindsym $mod+Alt+Shift+4 exec "swaysome move 4" | ||||||
|  | bindsym $mod+Alt+Shift+5 exec "swaysome move 5" | ||||||
|  | bindsym $mod+Alt+Shift+6 exec "swaysome move 6" | ||||||
|  | bindsym $mod+Alt+Shift+7 exec "swaysome move 7" | ||||||
|  | bindsym $mod+Alt+Shift+8 exec "swaysome move 8" | ||||||
|  | bindsym $mod+Alt+Shift+9 exec "swaysome move 9" | ||||||
|  | bindsym $mod+Alt+Shift+0 exec "swaysome move 0" | ||||||
|  |  | ||||||
|  | # Move containers to other workspace groups | ||||||
|  | bindsym --no-warn $mod+Shift+1 exec "swaysome move-to-group 1" | ||||||
|  | bindsym --no-warn $mod+Shift+2 exec "swaysome move-to-group 2" | ||||||
|  | bindsym --no-warn $mod+Shift+3 exec "swaysome move-to-group 3" | ||||||
|  | bindsym --no-warn $mod+Shift+4 exec "swaysome move-to-group 4" | ||||||
|  | bindsym --no-warn $mod+Shift+5 exec "swaysome move-to-group 5" | ||||||
|  | bindsym --no-warn $mod+Shift+6 exec "swaysome move-to-group 6" | ||||||
|  | bindsym --no-warn $mod+Shift+7 exec "swaysome move-to-group 7" | ||||||
|  | bindsym --no-warn $mod+Shift+8 exec "swaysome move-to-group 8" | ||||||
|  | bindsym --no-warn $mod+Shift+9 exec "swaysome move-to-group 9" | ||||||
|  | bindsym --no-warn $mod+Shift+0 exec "swaysome move-to-group 0" | ||||||
|  |  | ||||||
|  | # Move focused container to next output | ||||||
|  | bindsym $mod+Alt+Right exec "swaysome next-output" | ||||||
|  | # Move focused container to previous output | ||||||
|  | bindsym $mod+Alt+Left exec "swaysome prev-output" | ||||||
|  |  | ||||||
|  | # Move focused workspace group to next output | ||||||
|  | bindsym $mod+Shift+Alt+Right exec "swaysome workspace-group-next-output" | ||||||
|  | # Move focused workspace group to previous output | ||||||
|  | bindsym $mod+Shift+Alt+Left exec "swaysome workspace-group-prev-output" | ||||||
|  |  | ||||||
|  | # Init workspaces for every screen | ||||||
|  | exec "swaysome init 1" | ||||||
|  |  | ||||||
| @@ -27,7 +27,7 @@ rec { | |||||||
|  |  | ||||||
|   kernel = { |   kernel = { | ||||||
|     lts = pkgs: pkgs.linuxKernel.packages.linux_6_6; |     lts = pkgs: pkgs.linuxKernel.packages.linux_6_6; | ||||||
|     latest = pkgs: pkgs.linuxKernel.packages.linux_6_9; |     latest = pkgs: pkgs.linuxKernel.packages.linux_6_12; | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|   nginx = rec { |   nginx = rec { | ||||||
| @@ -135,6 +135,9 @@ rec { | |||||||
|         v4 = subnet 8 3 all.v4; |         v4 = subnet 8 3 all.v4; | ||||||
|         v6 = subnet 4 3 all.v6; |         v6 = subnet 4 3 all.v6; | ||||||
|       }; |       }; | ||||||
|  |       qclk = { | ||||||
|  |         v4 = subnet 8 4 all.v4; | ||||||
|  |       }; | ||||||
|  |  | ||||||
|       cust = { |       cust = { | ||||||
|         v4 = subnet 8 100 all.v4; # single ip for routing only |         v4 = subnet 8 100 all.v4; # single ip for routing only | ||||||
| @@ -170,6 +173,10 @@ rec { | |||||||
|       jam-ctr = host 3 prefixes.cust.v4; |       jam-ctr = host 3 prefixes.cust.v4; | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|  |     qclk = { | ||||||
|  |       wgPort = 51821; | ||||||
|  |     }; | ||||||
|  |  | ||||||
|     firewallForwards = aa: [ |     firewallForwards = aa: [ | ||||||
|       { |       { | ||||||
|         port = "http"; |         port = "http"; | ||||||
| @@ -220,6 +227,23 @@ rec { | |||||||
|         dst = aa.simpcraft-oci.internal.ipv4.address; |         dst = aa.simpcraft-oci.internal.ipv4.address; | ||||||
|         proto = "udp"; |         proto = "udp"; | ||||||
|       } |       } | ||||||
|  |  | ||||||
|  |       { | ||||||
|  |         port = 15636; | ||||||
|  |         dst = aa.enshrouded-oci.internal.ipv4.address; | ||||||
|  |         proto = "udp"; | ||||||
|  |       } | ||||||
|  |       { | ||||||
|  |         port = 15637; | ||||||
|  |         dst = aa.enshrouded-oci.internal.ipv4.address; | ||||||
|  |         proto = "udp"; | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       { | ||||||
|  |         port = qclk.wgPort; | ||||||
|  |         dst = aa.qclk.internal.ipv4.address; | ||||||
|  |         proto = "udp"; | ||||||
|  |       } | ||||||
|     ]; |     ]; | ||||||
|  |  | ||||||
|     fstrimConfig = { |     fstrimConfig = { | ||||||
| @@ -243,7 +267,7 @@ rec { | |||||||
|       "stream" |       "stream" | ||||||
|     ]; |     ]; | ||||||
|     routersPubV4 = [ |     routersPubV4 = [ | ||||||
|       "80.111.122.16" |       "109.255.31.155" | ||||||
|       "109.255.252.63" |       "109.255.252.63" | ||||||
|     ]; |     ]; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -248,8 +248,8 @@ rec { | |||||||
|   in |   in | ||||||
|   { |   { | ||||||
|     trivial = prev.trivial // { |     trivial = prev.trivial // { | ||||||
|       release = "24.07:u-${prev.trivial.release}"; |       release = "24.12:u-${prev.trivial.release}"; | ||||||
|       codeName = "Diffed"; |       codeName = "Epic"; | ||||||
|       revisionWithDefault = default: self.rev or default; |       revisionWithDefault = default: self.rev or default; | ||||||
|       versionSuffix = ".${date}.${revCode self}:u-${revCode pkgsFlake}"; |       versionSuffix = ".${date}.${revCode self}:u-${revCode pkgsFlake}"; | ||||||
|     }; |     }; | ||||||
|   | |||||||
| @@ -106,7 +106,7 @@ in | |||||||
|                   { |                   { | ||||||
|                     matchConfig.Name = "as211024"; |                     matchConfig.Name = "as211024"; | ||||||
|                     networkConfig.IPv6AcceptRA = mkForce false; |                     networkConfig.IPv6AcceptRA = mkForce false; | ||||||
|                     routes = map (r: { routeConfig = r; }) [ |                     routes = [ | ||||||
|                       { |                       { | ||||||
|                         Destination = lib.my.c.colony.prefixes.all.v4; |                         Destination = lib.my.c.colony.prefixes.all.v4; | ||||||
|                         Gateway = allAssignments.estuary.as211024.ipv4.address; |                         Gateway = allAssignments.estuary.as211024.ipv4.address; | ||||||
| @@ -123,7 +123,7 @@ in | |||||||
|                         Table = "ts-extra"; |                         Table = "ts-extra"; | ||||||
|                       } |                       } | ||||||
|                     ]; |                     ]; | ||||||
|                     routingPolicyRules = map (r: { routingPolicyRuleConfig = r; }) [ |                     routingPolicyRules = [ | ||||||
|                       { |                       { | ||||||
|                         IncomingInterface = "tailscale0"; |                         IncomingInterface = "tailscale0"; | ||||||
|                         To = lib.my.c.colony.prefixes.all.v6; |                         To = lib.my.c.colony.prefixes.all.v6; | ||||||
|   | |||||||
| @@ -80,7 +80,7 @@ in | |||||||
|               }; |               }; | ||||||
|             }; |             }; | ||||||
|  |  | ||||||
|             "ts.${pubDomain}" = { |             "hs.${pubDomain}" = { | ||||||
|               locations."/" = { |               locations."/" = { | ||||||
|                 proxyPass = "http://localhost:${toString config.services.headscale.port}"; |                 proxyPass = "http://localhost:${toString config.services.headscale.port}"; | ||||||
|                 proxyWebsockets = true; |                 proxyWebsockets = true; | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ let | |||||||
|   inherit (lib.my.c.britway) prefixes domain; |   inherit (lib.my.c.britway) prefixes domain; | ||||||
|  |  | ||||||
|   # Can't use overrideAttrs because we need to override `vendorHash` within `buildGoModule` |   # Can't use overrideAttrs because we need to override `vendorHash` within `buildGoModule` | ||||||
|   headscale = (pkgs.headscale.override { |   headscale' = (pkgs.headscale.override { | ||||||
|     buildGoModule = args: pkgs.buildGoModule (args // rec { |     buildGoModule = args: pkgs.buildGoModule (args // rec { | ||||||
|       version = "0.23.0-alpha12"; |       version = "0.23.0-alpha12"; | ||||||
|       src = pkgs.fetchFromGitHub { |       src = pkgs.fetchFromGitHub { | ||||||
| @@ -41,21 +41,20 @@ in | |||||||
|     services = { |     services = { | ||||||
|       headscale = { |       headscale = { | ||||||
|         enable = true; |         enable = true; | ||||||
|         package = headscale; |  | ||||||
|         settings = { |         settings = { | ||||||
|           disable_check_updates = true; |           disable_check_updates = true; | ||||||
|           unix_socket_permission = "0770"; |           unix_socket_permission = "0770"; | ||||||
|           server_url = "https://ts.${pubDomain}"; |           server_url = "https://hs.${pubDomain}"; | ||||||
|           database = { |           database = { | ||||||
|             type = "sqlite3"; |             type = "sqlite3"; | ||||||
|             sqlite.path = "/var/lib/headscale/db.sqlite3"; |             sqlite.path = "/var/lib/headscale/db.sqlite3"; | ||||||
|           }; |           }; | ||||||
|           noise.private_key_path = "/var/lib/headscale/noise_private.key"; |           noise.private_key_path = "/var/lib/headscale/noise_private.key"; | ||||||
|           prefixes = with lib.my.c.tailscale.prefix; { inherit v4 v6; }; |           prefixes = with lib.my.c.tailscale.prefix; { inherit v4 v6; }; | ||||||
|           dns_config = { |           dns = { | ||||||
|             # Use IPs that will route inside the VPN to prevent interception |             # Use IPs that will route inside the VPN to prevent interception | ||||||
|             # (e.g. DNS rebinding filtering) |             # (e.g. DNS rebinding filtering) | ||||||
|             restricted_nameservers = { |             nameservers.split = { | ||||||
|               "${domain}" = pubNameservers; |               "${domain}" = pubNameservers; | ||||||
|               "${lib.my.c.colony.domain}" = with allAssignments.estuary.base; [ |               "${lib.my.c.colony.domain}" = with allAssignments.estuary.base; [ | ||||||
|                 ipv4.address ipv6.address |                 ipv4.address ipv6.address | ||||||
| @@ -69,7 +68,6 @@ in | |||||||
|             }; |             }; | ||||||
|             magic_dns = true; |             magic_dns = true; | ||||||
|             base_domain = "ts.${pubDomain}"; |             base_domain = "ts.${pubDomain}"; | ||||||
|             override_local_dns = false; |  | ||||||
|           }; |           }; | ||||||
|           oidc = { |           oidc = { | ||||||
|             only_start_if_oidc_is_available = true; |             only_start_if_oidc_is_available = true; | ||||||
| @@ -89,7 +87,7 @@ in | |||||||
|         interfaceName = "tailscale0"; |         interfaceName = "tailscale0"; | ||||||
|         extraUpFlags = [ |         extraUpFlags = [ | ||||||
|           "--operator=${config.my.user.config.name}" |           "--operator=${config.my.user.config.name}" | ||||||
|           "--login-server=https://ts.nul.ie" |           "--login-server=https://hs.nul.ie" | ||||||
|           "--netfilter-mode=off" |           "--netfilter-mode=off" | ||||||
|           "--advertise-exit-node" |           "--advertise-exit-node" | ||||||
|           "--advertise-routes=${advRoutes}" |           "--advertise-routes=${advRoutes}" | ||||||
|   | |||||||
| @@ -252,10 +252,10 @@ in | |||||||
|                   }; |                   }; | ||||||
|                   ipv6Prefixes = [ |                   ipv6Prefixes = [ | ||||||
|                     { |                     { | ||||||
|                       ipv6PrefixConfig.Prefix = prefixes.vms.v6; |                       Prefix = prefixes.vms.v6; | ||||||
|                     } |                     } | ||||||
|                   ]; |                   ]; | ||||||
|                   routes = map (r: { routeConfig = r; }) [ |                   routes = [ | ||||||
|                     { |                     { | ||||||
|                       Destination = prefixes.ctrs.v4; |                       Destination = prefixes.ctrs.v4; | ||||||
|                       Gateway = allAssignments.shill.routing.ipv4.address; |                       Gateway = allAssignments.shill.routing.ipv4.address; | ||||||
| @@ -264,10 +264,12 @@ in | |||||||
|                       Destination = prefixes.ctrs.v6; |                       Destination = prefixes.ctrs.v6; | ||||||
|                       Gateway = allAssignments.shill.internal.ipv6.address; |                       Gateway = allAssignments.shill.internal.ipv6.address; | ||||||
|                     } |                     } | ||||||
|  |  | ||||||
|                     { |                     { | ||||||
|                       Destination = allAssignments.shill.internal.ipv4.address; |                       Destination = allAssignments.shill.internal.ipv4.address; | ||||||
|                       Gateway = allAssignments.shill.routing.ipv4.address; |                       Gateway = allAssignments.shill.routing.ipv4.address; | ||||||
|                     } |                     } | ||||||
|  |  | ||||||
|                     { |                     { | ||||||
|                       Destination = lib.my.c.tailscale.prefix.v4; |                       Destination = lib.my.c.tailscale.prefix.v4; | ||||||
|                       Gateway = allAssignments.shill.routing.ipv4.address; |                       Gateway = allAssignments.shill.routing.ipv4.address; | ||||||
| @@ -276,6 +278,11 @@ in | |||||||
|                       Destination = lib.my.c.tailscale.prefix.v6; |                       Destination = lib.my.c.tailscale.prefix.v6; | ||||||
|                       Gateway = allAssignments.shill.internal.ipv6.address; |                       Gateway = allAssignments.shill.internal.ipv6.address; | ||||||
|                     } |                     } | ||||||
|  |                     { | ||||||
|  |                       Destination = prefixes.qclk.v4; | ||||||
|  |                       Gateway = allAssignments.shill.routing.ipv4.address; | ||||||
|  |                     } | ||||||
|  |  | ||||||
|                     { |                     { | ||||||
|                       Destination = prefixes.jam.v6; |                       Destination = prefixes.jam.v6; | ||||||
|                       Gateway = allAssignments.shill.internal.ipv6.address; |                       Gateway = allAssignments.shill.internal.ipv6.address; | ||||||
| @@ -320,10 +327,10 @@ in | |||||||
|                 }; |                 }; | ||||||
|                 ipv6Prefixes = [ |                 ipv6Prefixes = [ | ||||||
|                   { |                   { | ||||||
|                     ipv6PrefixConfig.Prefix = prefixes.mail.v6; |                     Prefix = prefixes.mail.v6; | ||||||
|                   } |                   } | ||||||
|                 ]; |                 ]; | ||||||
|                 routes = map (r: { routeConfig = r; }) [ |                 routes = [ | ||||||
|                   { |                   { | ||||||
|                     Destination = prefixes.mail.v4; |                     Destination = prefixes.mail.v4; | ||||||
|                     Scope = "link"; |                     Scope = "link"; | ||||||
| @@ -343,10 +350,10 @@ in | |||||||
|                 }; |                 }; | ||||||
|                 ipv6Prefixes = [ |                 ipv6Prefixes = [ | ||||||
|                   { |                   { | ||||||
|                     ipv6PrefixConfig.Prefix = prefixes.darts.v6; |                     Prefix = prefixes.darts.v6; | ||||||
|                   } |                   } | ||||||
|                 ]; |                 ]; | ||||||
|                 routes = map (r: { routeConfig = r; }) [ |                 routes = [ | ||||||
|                   { |                   { | ||||||
|                     Destination = prefixes.darts.v4; |                     Destination = prefixes.darts.v4; | ||||||
|                     Scope = "link"; |                     Scope = "link"; | ||||||
|   | |||||||
| @@ -164,11 +164,9 @@ in | |||||||
|                     }; |                     }; | ||||||
|                     wireguardPeers = [ |                     wireguardPeers = [ | ||||||
|                       { |                       { | ||||||
|                         wireguardPeerConfig = { |                         PublicKey = "7N9YdQaCMWWIwAnW37vrthm9ZpbnG4Lx3gheHeRYz2E="; | ||||||
|                           PublicKey = "7N9YdQaCMWWIwAnW37vrthm9ZpbnG4Lx3gheHeRYz2E="; |                         AllowedIPs = [ allAssignments.kelder.estuary.ipv4.address ]; | ||||||
|                           AllowedIPs = [ allAssignments.kelder.estuary.ipv4.address ]; |                         PersistentKeepalive = 25; | ||||||
|                           PersistentKeepalive = 25; |  | ||||||
|                         }; |  | ||||||
|                       } |                       } | ||||||
|                     ]; |                     ]; | ||||||
|                   }; |                   }; | ||||||
| @@ -278,47 +276,51 @@ in | |||||||
|                     }; |                     }; | ||||||
|                     ipv6Prefixes = [ |                     ipv6Prefixes = [ | ||||||
|                       { |                       { | ||||||
|                         ipv6PrefixConfig.Prefix = prefixes.base.v6; |                         Prefix = prefixes.base.v6; | ||||||
|                       } |                       } | ||||||
|                     ]; |                     ]; | ||||||
|                     routes = map (r: { routeConfig = r; }) (flatten |                     routes = flatten ([ | ||||||
|                       ([ |                       { | ||||||
|                         { |                         Destination = prefixes.vip1; | ||||||
|                           Destination = prefixes.vip1; |                         Gateway = allAssignments.colony.routing.ipv4.address; | ||||||
|                           Gateway = allAssignments.colony.routing.ipv4.address; |                       } | ||||||
|                         } |                       { | ||||||
|                         { |                         Destination = prefixes.vip3; | ||||||
|                           Destination = prefixes.vip3; |                         Gateway = allAssignments.colony.routing.ipv4.address; | ||||||
|                           Gateway = allAssignments.colony.routing.ipv4.address; |                       } | ||||||
|                         } |                       { | ||||||
|                         { |                         Destination = prefixes.darts.v4; | ||||||
|                           Destination = prefixes.darts.v4; |                         Gateway = allAssignments.colony.routing.ipv4.address; | ||||||
|                           Gateway = allAssignments.colony.routing.ipv4.address; |                       } | ||||||
|                         } |                       { | ||||||
|                         { |                         Destination = prefixes.cust.v6; | ||||||
|                           Destination = prefixes.cust.v6; |                         Gateway = allAssignments.colony.internal.ipv6.address; | ||||||
|                           Gateway = allAssignments.colony.internal.ipv6.address; |                       } | ||||||
|                         } |  | ||||||
|  |  | ||||||
|                         { |                       { | ||||||
|                           Destination = lib.my.c.tailscale.prefix.v4; |                         Destination = lib.my.c.tailscale.prefix.v4; | ||||||
|                           Gateway = allAssignments.colony.routing.ipv4.address; |                         Gateway = allAssignments.colony.routing.ipv4.address; | ||||||
|                         } |                       } | ||||||
|                         { |                       { | ||||||
|                           Destination = lib.my.c.tailscale.prefix.v6; |                         Destination = lib.my.c.tailscale.prefix.v6; | ||||||
|                           Gateway = allAssignments.colony.internal.ipv6.address; |                         Gateway = allAssignments.colony.internal.ipv6.address; | ||||||
|                         } |                       } | ||||||
|                       ] ++ |  | ||||||
|                       (map (pName: [ |                       { | ||||||
|                         { |                         Destination = prefixes.qclk.v4; | ||||||
|                           Gateway = allAssignments.colony.routing.ipv4.address; |                         Gateway = allAssignments.colony.routing.ipv4.address; | ||||||
|                           Destination = prefixes."${pName}".v4; |                       } | ||||||
|                         } |                     ] ++ | ||||||
|                         { |                     (map (pName: [ | ||||||
|                           Destination = prefixes."${pName}".v6; |                       { | ||||||
|                           Gateway = allAssignments.colony.internal.ipv6.address; |                         Gateway = allAssignments.colony.routing.ipv4.address; | ||||||
|                         } |                         Destination = prefixes."${pName}".v4; | ||||||
|                       ]) [ "vms" "ctrs" "oci" ]))); |                       } | ||||||
|  |                       { | ||||||
|  |                         Destination = prefixes."${pName}".v6; | ||||||
|  |                         Gateway = allAssignments.colony.internal.ipv6.address; | ||||||
|  |                       } | ||||||
|  |                     ]) [ "vms" "ctrs" "oci" ])); | ||||||
|                   } |                   } | ||||||
|                 ]; |                 ]; | ||||||
|  |  | ||||||
| @@ -327,7 +329,7 @@ in | |||||||
|                   { |                   { | ||||||
|                     matchConfig.Name = "as211024"; |                     matchConfig.Name = "as211024"; | ||||||
|                     networkConfig.IPv6AcceptRA = mkForce false; |                     networkConfig.IPv6AcceptRA = mkForce false; | ||||||
|                     routes = map (r: { routeConfig = r; }) [ |                     routes = [ | ||||||
|                       { |                       { | ||||||
|                         Destination = lib.my.c.home.prefixes.all.v4; |                         Destination = lib.my.c.home.prefixes.all.v4; | ||||||
|                         Gateway = lib.my.c.home.vips.as211024.v4; |                         Gateway = lib.my.c.home.vips.as211024.v4; | ||||||
| @@ -339,10 +341,8 @@ in | |||||||
|                   matchConfig.Name = "kelder"; |                   matchConfig.Name = "kelder"; | ||||||
|                   routes = [ |                   routes = [ | ||||||
|                     { |                     { | ||||||
|                       routeConfig = { |                       Destination = allAssignments.kelder.estuary.ipv4.address; | ||||||
|                         Destination = allAssignments.kelder.estuary.ipv4.address; |                       Scope = "link"; | ||||||
|                         Scope = "link"; |  | ||||||
|                       }; |  | ||||||
|                     } |                     } | ||||||
|                   ]; |                   ]; | ||||||
|                 }; |                 }; | ||||||
| @@ -407,6 +407,7 @@ in | |||||||
|                       ip6 daddr ${aa.valheim-oci.internal.ipv6.address} udp dport { 2456-2457 } accept |                       ip6 daddr ${aa.valheim-oci.internal.ipv6.address} udp dport { 2456-2457 } accept | ||||||
|                       ip6 daddr ${aa.waffletail.internal.ipv6.address} udp dport 41641 accept |                       ip6 daddr ${aa.waffletail.internal.ipv6.address} udp dport 41641 accept | ||||||
|                       ip6 daddr ${aa.simpcraft-oci.internal.ipv6.address} udp dport 25565 accept |                       ip6 daddr ${aa.simpcraft-oci.internal.ipv6.address} udp dport 25565 accept | ||||||
|  |                       ip6 daddr ${aa.enshrouded-oci.internal.ipv6.address} udp dport { 15636-15637 } accept | ||||||
|                       return |                       return | ||||||
|                     } |                     } | ||||||
|                     chain filter-routing { |                     chain filter-routing { | ||||||
|   | |||||||
| @@ -153,6 +153,7 @@ in | |||||||
|             simpcraft IN AAAA ${allAssignments.simpcraft-oci.internal.ipv6.address} |             simpcraft IN AAAA ${allAssignments.simpcraft-oci.internal.ipv6.address} | ||||||
|             simpcraft-staging IN A ${assignments.internal.ipv4.address} |             simpcraft-staging IN A ${assignments.internal.ipv4.address} | ||||||
|             simpcraft-staging IN AAAA ${allAssignments.simpcraft-staging-oci.internal.ipv6.address} |             simpcraft-staging IN AAAA ${allAssignments.simpcraft-staging-oci.internal.ipv6.address} | ||||||
|  |             enshrouded IN A ${assignments.internal.ipv4.address} | ||||||
|  |  | ||||||
|             mail-vm IN A ${net.cidr.host 0 prefixes.mail.v4} |             mail-vm IN A ${net.cidr.host 0 prefixes.mail.v4} | ||||||
|             mail-vm IN AAAA ${net.cidr.host 1 prefixes.mail.v6} |             mail-vm IN AAAA ${net.cidr.host 1 prefixes.mail.v6} | ||||||
|   | |||||||
| @@ -35,6 +35,11 @@ in | |||||||
|           ]; |           ]; | ||||||
|           url = "https://git.${pubDomain}"; |           url = "https://git.${pubDomain}"; | ||||||
|           tokenFile = config.age.secrets."gitea/actions-runner.env".path; |           tokenFile = config.age.secrets."gitea/actions-runner.env".path; | ||||||
|  |           settings = { | ||||||
|  |             runner = { | ||||||
|  |               timeout = "8h"; | ||||||
|  |             }; | ||||||
|  |           }; | ||||||
|         }; |         }; | ||||||
|       }; |       }; | ||||||
|     }; |     }; | ||||||
|   | |||||||
| @@ -47,10 +47,10 @@ in | |||||||
|         }; |         }; | ||||||
|         ipv6Prefixes = [ |         ipv6Prefixes = [ | ||||||
|           { |           { | ||||||
|             ipv6PrefixConfig.Prefix = prefixes.jam.v6; |             Prefix = prefixes.jam.v6; | ||||||
|           } |           } | ||||||
|         ]; |         ]; | ||||||
|         routes = map (r: { routeConfig = r; }) [ |         routes = [ | ||||||
|           { |           { | ||||||
|             Destination = prefixes.jam.v4; |             Destination = prefixes.jam.v4; | ||||||
|             Scope = "link"; |             Scope = "link"; | ||||||
|   | |||||||
| @@ -50,11 +50,6 @@ in | |||||||
|                   group = "matrix-synapse"; |                   group = "matrix-synapse"; | ||||||
|                 }; |                 }; | ||||||
|  |  | ||||||
|                 "chatterbox/syncv3.env" = { |  | ||||||
|                   owner = "matrix-syncv3"; |  | ||||||
|                   group = "matrix-syncv3"; |  | ||||||
|                 }; |  | ||||||
|  |  | ||||||
|                 "chatterbox/mautrix-whatsapp.env" = { |                 "chatterbox/mautrix-whatsapp.env" = { | ||||||
|                   owner = "mautrix-whatsapp"; |                   owner = "mautrix-whatsapp"; | ||||||
|                   group = "mautrix-whatsapp"; |                   group = "mautrix-whatsapp"; | ||||||
| @@ -80,32 +75,21 @@ in | |||||||
|               matrix-synapse.extraGroups = [ |               matrix-synapse.extraGroups = [ | ||||||
|                 "mautrix-whatsapp" |                 "mautrix-whatsapp" | ||||||
|               ]; |               ]; | ||||||
|               matrix-syncv3 = { |  | ||||||
|                 isSystemUser = true; |  | ||||||
|                 uid = uids.matrix-syncv3; |  | ||||||
|                 group = "matrix-syncv3"; |  | ||||||
|               }; |  | ||||||
|             }; |  | ||||||
|             groups = { |  | ||||||
|               matrix-syncv3.gid = gids.matrix-syncv3; |  | ||||||
|             }; |             }; | ||||||
|  |             groups = { }; | ||||||
|           }; |           }; | ||||||
|  |  | ||||||
|           systemd = { |           systemd = { | ||||||
|             network.networks."80-container-host0" = networkdAssignment "host0" assignments.internal; |             network.networks."80-container-host0" = networkdAssignment "host0" assignments.internal; | ||||||
|             services = { |             services = { } // (genAttrs [ "mautrix-whatsapp" "mautrix-meta-messenger" "mautrix-meta-instagram" ] (_: { | ||||||
|               matrix-sliding-sync.serviceConfig = { |  | ||||||
|                 # Needs to be able to read its secrets |  | ||||||
|                 DynamicUser = mkForce false; |  | ||||||
|                 User = "matrix-syncv3"; |  | ||||||
|                 Group = "matrix-syncv3"; |  | ||||||
|               }; |  | ||||||
|             } // (genAttrs [ "mautrix-whatsapp" "mautrix-meta-messenger" "mautrix-meta-instagram" ] (_: { |  | ||||||
|               # ffmpeg needed to convert GIFs to video |               # ffmpeg needed to convert GIFs to video | ||||||
|               path = with pkgs; [ ffmpeg ]; |               path = with pkgs; [ ffmpeg ]; | ||||||
|             })); |             })); | ||||||
|           }; |           }; | ||||||
|  |  | ||||||
|  |           # TODO/FIXME: https://github.com/NixOS/nixpkgs/issues/336052 | ||||||
|  |           nixpkgs.config.permittedInsecurePackages = [ "olm-3.2.16" ]; | ||||||
|  |  | ||||||
|           services = { |           services = { | ||||||
|             netdata.enable = true; |             netdata.enable = true; | ||||||
|             matrix-synapse = { |             matrix-synapse = { | ||||||
| @@ -193,20 +177,10 @@ in | |||||||
|                 app_service_config_files = [ |                 app_service_config_files = [ | ||||||
|                   "/var/lib/heisenbridge/registration.yml" |                   "/var/lib/heisenbridge/registration.yml" | ||||||
|                   config.age.secrets."chatterbox/doublepuppet.yaml".path |                   config.age.secrets."chatterbox/doublepuppet.yaml".path | ||||||
|                   "/var/lib/mautrix-whatsapp/whatsapp-registration.yaml" |  | ||||||
|                 ]; |                 ]; | ||||||
|               }; |               }; | ||||||
|  |  | ||||||
|             }; |             }; | ||||||
|             matrix-sliding-sync = { |  | ||||||
|               enable = true; |  | ||||||
|               createDatabase = false; |  | ||||||
|               environmentFile = config.age.secrets."chatterbox/syncv3.env".path; |  | ||||||
|               settings = { |  | ||||||
|                 SYNCV3_BINDADDR = "[::]:8009"; |  | ||||||
|                 SYNCV3_SERVER = "http://localhost:8008"; |  | ||||||
|               }; |  | ||||||
|             }; |  | ||||||
|  |  | ||||||
|             heisenbridge = { |             heisenbridge = { | ||||||
|               enable = true; |               enable = true; | ||||||
| @@ -285,10 +259,12 @@ in | |||||||
|                       avatar = "mxc://maunium.net/ygtkteZsXnGJLJHRchUwYWak"; |                       avatar = "mxc://maunium.net/ygtkteZsXnGJLJHRchUwYWak"; | ||||||
|                     }; |                     }; | ||||||
|                   }; |                   }; | ||||||
|                   meta.mode = "messenger"; |                   network = { | ||||||
|  |                     mode = "messenger"; | ||||||
|  |                     displayname_template = ''{{or .DisplayName .Username "Unknown user"}} (FBM)''; | ||||||
|  |                   }; | ||||||
|                   bridge = { |                   bridge = { | ||||||
|                     username_template = "fbm2_{{.}}"; |                     username_template = "fbm2_{{.}}"; | ||||||
|                     displayname_template = ''{{or .DisplayName .Username "Unknown user"}} (FBM)''; |  | ||||||
|                     personal_filtering_spaces = true; |                     personal_filtering_spaces = true; | ||||||
|                     delivery_receipts = true; |                     delivery_receipts = true; | ||||||
|                     management_room_text.welcome = "Hello, I'm a Messenger bridge bot."; |                     management_room_text.welcome = "Hello, I'm a Messenger bridge bot."; | ||||||
| @@ -331,10 +307,12 @@ in | |||||||
|                       avatar = "mxc://maunium.net/JxjlbZUlCPULEeHZSwleUXQv"; |                       avatar = "mxc://maunium.net/JxjlbZUlCPULEeHZSwleUXQv"; | ||||||
|                     }; |                     }; | ||||||
|                   }; |                   }; | ||||||
|                   meta.mode = "instagram"; |                   network = { | ||||||
|  |                     mode = "instagram"; | ||||||
|  |                     displayname_template = ''{{or .DisplayName .Username "Unknown user"}} (IG)''; | ||||||
|  |                   }; | ||||||
|                   bridge = { |                   bridge = { | ||||||
|                     username_template = "ig_{{.}}"; |                     username_template = "ig_{{.}}"; | ||||||
|                     displayname_template = ''{{or .DisplayName .Username "Unknown user"}} (IG)''; |  | ||||||
|                     personal_filtering_spaces = true; |                     personal_filtering_spaces = true; | ||||||
|                     delivery_receipts = true; |                     delivery_receipts = true; | ||||||
|                     management_room_text.welcome = "Hello, I'm an Instagram bridge bot."; |                     management_room_text.welcome = "Hello, I'm an Instagram bridge bot."; | ||||||
|   | |||||||
| @@ -8,5 +8,6 @@ | |||||||
|     ./object.nix |     ./object.nix | ||||||
|     ./toot.nix |     ./toot.nix | ||||||
|     ./waffletail.nix |     ./waffletail.nix | ||||||
|  |     ./qclk | ||||||
|   ]; |   ]; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -94,6 +94,14 @@ in | |||||||
|           }; |           }; | ||||||
|         }; |         }; | ||||||
|  |  | ||||||
|  |         nixpkgs.config.permittedInsecurePackages = [ | ||||||
|  |           # FIXME: This is needed for Sonarr | ||||||
|  |           "aspnetcore-runtime-wrapped-6.0.36" | ||||||
|  |           "aspnetcore-runtime-6.0.36" | ||||||
|  |           "dotnet-sdk-wrapped-6.0.428" | ||||||
|  |           "dotnet-sdk-6.0.428" | ||||||
|  |         ]; | ||||||
|  |  | ||||||
|         services = { |         services = { | ||||||
|           netdata.enable = true; |           netdata.enable = true; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -71,14 +71,12 @@ in | |||||||
|               RouteTable = routeTable; |               RouteTable = routeTable; | ||||||
|             }; |             }; | ||||||
|             wireguardPeers = [ |             wireguardPeers = [ | ||||||
|  |               # AirVPN NL | ||||||
|               { |               { | ||||||
|                 # AirVPN NL |                 Endpoint = "2a00:1678:1337:2329:e5f:35d4:4404:ef9f:1637"; | ||||||
|                 wireguardPeerConfig = { |                 PublicKey = "PyLCXAQT8KkM4T+dUsOQfn+Ub3pGxfGlxkIApuig+hk="; | ||||||
|                   Endpoint = "2a00:1678:1337:2329:e5f:35d4:4404:ef9f:1637"; |                 PresharedKeyFile = config.age.secrets."${pskFile}".path; | ||||||
|                   PublicKey = "PyLCXAQT8KkM4T+dUsOQfn+Ub3pGxfGlxkIApuig+hk="; |                 AllowedIPs = [ "0.0.0.0/0" "::/0" ]; | ||||||
|                   PresharedKeyFile = config.age.secrets."${pskFile}".path; |  | ||||||
|                   AllowedIPs = [ "0.0.0.0/0" "::/0" ]; |  | ||||||
|                 }; |  | ||||||
|               } |               } | ||||||
|             ]; |             ]; | ||||||
|           }; |           }; | ||||||
| @@ -94,7 +92,7 @@ in | |||||||
|               matchConfig.Name = "vpn"; |               matchConfig.Name = "vpn"; | ||||||
|               address = [ "10.182.97.37/32" "fd7d:76ee:e68f:a993:735d:ef5e:6907:b122/128" ]; |               address = [ "10.182.97.37/32" "fd7d:76ee:e68f:a993:735d:ef5e:6907:b122/128" ]; | ||||||
|               dns = [ "10.128.0.1" "fd7d:76ee:e68f:a993::1" ]; |               dns = [ "10.128.0.1" "fd7d:76ee:e68f:a993::1" ]; | ||||||
|               routingPolicyRules = map (r: { routingPolicyRuleConfig = r; }) [ |               routingPolicyRules = [ | ||||||
|                 { |                 { | ||||||
|                   Family = "both"; |                   Family = "both"; | ||||||
|                   SuppressPrefixLength = 0; |                   SuppressPrefixLength = 0; | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
| let | let | ||||||
|   inherit (builtins) mapAttrs toJSON; |   inherit (builtins) mapAttrs toJSON; | ||||||
|   inherit (lib) mkMerge mkDefault genAttrs flatten concatStringsSep; |   inherit (lib) mkMerge mkDefault genAttrs flatten concatStringsSep; | ||||||
|   inherit (lib.my.c) pubDomain; |   inherit (lib.my.c) pubDomain home; | ||||||
|   inherit (lib.my.c.nginx) proxyHeaders; |   inherit (lib.my.c.nginx) proxyHeaders; | ||||||
|   inherit (config.networking) domain; |   inherit (config.networking) domain; | ||||||
|  |  | ||||||
| @@ -35,7 +35,6 @@ let | |||||||
|       # For clients |       # For clients | ||||||
|       (mkWellKnown "matrix/client" (toJSON { |       (mkWellKnown "matrix/client" (toJSON { | ||||||
|         "m.homeserver".base_url = "https://matrix.nul.ie"; |         "m.homeserver".base_url = "https://matrix.nul.ie"; | ||||||
|         "org.matrix.msc3575.proxy".url = "https://matrix-syncv3.nul.ie"; |  | ||||||
|       })) |       })) | ||||||
|     ]; |     ]; | ||||||
|   }; |   }; | ||||||
| @@ -182,10 +181,6 @@ in | |||||||
|         ]; |         ]; | ||||||
|         useACMEHost = pubDomain; |         useACMEHost = pubDomain; | ||||||
|       }; |       }; | ||||||
|       "matrix-syncv3.${pubDomain}" = { |  | ||||||
|         locations."/".proxyPass = "http://chatterbox-ctr.${domain}:8009"; |  | ||||||
|         useACMEHost = pubDomain; |  | ||||||
|       }; |  | ||||||
|  |  | ||||||
|       "element.${pubDomain}" = |       "element.${pubDomain}" = | ||||||
|       let |       let | ||||||
| @@ -396,6 +391,28 @@ in | |||||||
|         }; |         }; | ||||||
|         useACMEHost = pubDomain; |         useACMEHost = pubDomain; | ||||||
|       }; |       }; | ||||||
|  |  | ||||||
|  |       "pront.${pubDomain}" = mkMerge [ | ||||||
|  |         { | ||||||
|  |           locations."/" = mkMerge [ | ||||||
|  |             { | ||||||
|  |               proxyPass = "http://stream-hi.${home.domain}:5000"; | ||||||
|  |               proxyWebsockets = true; | ||||||
|  |               extraConfig = proxyHeaders; | ||||||
|  |             } | ||||||
|  |             (ssoLoc "generic") | ||||||
|  |           ]; | ||||||
|  |           locations."~* ^/webcam/(.*)" = mkMerge [ | ||||||
|  |             { | ||||||
|  |               proxyPass = "http://stream-hi.${home.domain}:5050/$1$is_args$args"; | ||||||
|  |               extraConfig = proxyHeaders; | ||||||
|  |             } | ||||||
|  |             (ssoLoc "generic") | ||||||
|  |           ]; | ||||||
|  |           useACMEHost = pubDomain; | ||||||
|  |         } | ||||||
|  |         (ssoServer "generic") | ||||||
|  |       ]; | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|     minio = |     minio = | ||||||
|   | |||||||
| @@ -216,7 +216,7 @@ in | |||||||
|  |  | ||||||
|             atticd = { |             atticd = { | ||||||
|               enable = false; |               enable = false; | ||||||
|               credentialsFile = config.age.secrets."object/atticd.env".path; |               environmentFile = config.age.secrets."object/atticd.env".path; | ||||||
|               settings = { |               settings = { | ||||||
|                 listen = "[::]:8069"; |                 listen = "[::]:8069"; | ||||||
|                 allowed-hosts = [ "nix-cache.${pubDomain}" ]; |                 allowed-hosts = [ "nix-cache.${pubDomain}" ]; | ||||||
| @@ -237,7 +237,7 @@ in | |||||||
|  |  | ||||||
|             harmonia = { |             harmonia = { | ||||||
|               enable = true; |               enable = true; | ||||||
|               signKeyPath = config.age.secrets."nix-cache.key".path; |               signKeyPaths = [ config.age.secrets."nix-cache.key".path ]; | ||||||
|               settings = { |               settings = { | ||||||
|                 priority = 30; |                 priority = 30; | ||||||
|               }; |               }; | ||||||
|   | |||||||
							
								
								
									
										115
									
								
								nixos/boxes/colony/vms/shill/containers/qclk/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								nixos/boxes/colony/vms/shill/containers/qclk/default.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,115 @@ | |||||||
|  | { lib, ... }: | ||||||
|  | let | ||||||
|  |   inherit (lib.my) net; | ||||||
|  |   inherit (lib.my.c.colony) domain prefixes qclk; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   nixos.systems.qclk = { config, ... }: { | ||||||
|  |     system = "x86_64-linux"; | ||||||
|  |     nixpkgs = "mine"; | ||||||
|  |     rendered = config.configuration.config.my.asContainer; | ||||||
|  |  | ||||||
|  |     assignments = { | ||||||
|  |       internal = { | ||||||
|  |         name = "qclk-ctr"; | ||||||
|  |         inherit domain; | ||||||
|  |         ipv4.address = net.cidr.host 10 prefixes.ctrs.v4; | ||||||
|  |         ipv6 = { | ||||||
|  |           iid = "::a"; | ||||||
|  |           address = net.cidr.host 10 prefixes.ctrs.v6; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  |       qclk = { | ||||||
|  |         ipv4 = { | ||||||
|  |           address = net.cidr.host 1 prefixes.qclk.v4; | ||||||
|  |           gateway = null; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     configuration = { lib, pkgs, config, assignments, ... }: | ||||||
|  |     let | ||||||
|  |       inherit (lib) concatStringsSep mkMerge mkIf mkForce; | ||||||
|  |       inherit (lib.my) networkdAssignment; | ||||||
|  |  | ||||||
|  |       apiPort = 8080; | ||||||
|  |  | ||||||
|  |       instances = [ | ||||||
|  |         { | ||||||
|  |           host = 2; | ||||||
|  |           wgKey = "D7z1FhcdxpnrGCE0wBW5PZb5BKuhCu6tcZ/5ZaYxdwQ="; | ||||||
|  |         } | ||||||
|  |       ]; | ||||||
|  |       ipFor = i: net.cidr.host i.host prefixes.qclk.v4; | ||||||
|  |     in | ||||||
|  |     { | ||||||
|  |       config = { | ||||||
|  |         environment = { | ||||||
|  |           systemPackages = with pkgs; [ | ||||||
|  |             wireguard-tools | ||||||
|  |           ]; | ||||||
|  |         }; | ||||||
|  |  | ||||||
|  |         my = { | ||||||
|  |           deploy.enable = false; | ||||||
|  |           server.enable = true; | ||||||
|  |  | ||||||
|  |           secrets = { | ||||||
|  |             key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC1kcfvahYmSk8IJKaUIcGkhxf/8Yse2XnU7Qqgcglyq"; | ||||||
|  |             files = { | ||||||
|  |               "qclk/wg.key" = { | ||||||
|  |                 group = "systemd-network"; | ||||||
|  |                 mode = "440"; | ||||||
|  |               }; | ||||||
|  |             }; | ||||||
|  |           }; | ||||||
|  |  | ||||||
|  |           firewall = { | ||||||
|  |             udp.allowed = [ qclk.wgPort ]; | ||||||
|  |             extraRules = '' | ||||||
|  |               table inet filter { | ||||||
|  |                 chain input { | ||||||
|  |                   iifname management tcp dport ${toString apiPort} accept | ||||||
|  |                 } | ||||||
|  |                 chain forward { | ||||||
|  |                   iifname host0 oifname management ip saddr { ${concatStringsSep ", " lib.my.c.as211024.trusted.v4} } accept | ||||||
|  |                 } | ||||||
|  |               } | ||||||
|  |               table inet nat { | ||||||
|  |                 chain postrouting { | ||||||
|  |                   iifname host0 oifname management snat ip to ${assignments.qclk.ipv4.address} | ||||||
|  |                 } | ||||||
|  |               } | ||||||
|  |             ''; | ||||||
|  |           }; | ||||||
|  |         }; | ||||||
|  |  | ||||||
|  |         systemd = { | ||||||
|  |           network = { | ||||||
|  |             netdevs."30-management" = { | ||||||
|  |               netdevConfig = { | ||||||
|  |                 Name = "management"; | ||||||
|  |                 Kind = "wireguard"; | ||||||
|  |               }; | ||||||
|  |               wireguardConfig = { | ||||||
|  |                 PrivateKeyFile = config.age.secrets."qclk/wg.key".path; | ||||||
|  |                 ListenPort = qclk.wgPort; | ||||||
|  |               }; | ||||||
|  |               wireguardPeers = map (i: { | ||||||
|  |                 PublicKey = i.wgKey; | ||||||
|  |                 AllowedIPs = [ (ipFor i) ]; | ||||||
|  |               }) instances; | ||||||
|  |             }; | ||||||
|  |             networks = { | ||||||
|  |               "30-container-host0" = networkdAssignment "host0" assignments.internal; | ||||||
|  |  | ||||||
|  |               "30-management" = networkdAssignment "management" assignments.qclk; | ||||||
|  |             }; | ||||||
|  |           }; | ||||||
|  |         }; | ||||||
|  |  | ||||||
|  |         services = { }; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
| @@ -99,6 +99,8 @@ in | |||||||
|             }; |             }; | ||||||
|  |  | ||||||
|             borgbackup.jobs.vaultwarden = { |             borgbackup.jobs.vaultwarden = { | ||||||
|  |               readWritePaths = [ "/var/lib/borgbackup" "/var/cache/borgbackup" ]; | ||||||
|  |  | ||||||
|               paths = [ vwData ]; |               paths = [ vwData ]; | ||||||
|               repo = "zh2855@zh2855.rsync.net:borg/vaultwarden2"; |               repo = "zh2855@zh2855.rsync.net:borg/vaultwarden2"; | ||||||
|               doInit = true; |               doInit = true; | ||||||
|   | |||||||
| @@ -86,7 +86,7 @@ in | |||||||
|             interfaceName = "tailscale0"; |             interfaceName = "tailscale0"; | ||||||
|             extraUpFlags = [ |             extraUpFlags = [ | ||||||
|               "--operator=${config.my.user.config.name}" |               "--operator=${config.my.user.config.name}" | ||||||
|               "--login-server=https://ts.nul.ie" |               "--login-server=https://hs.nul.ie" | ||||||
|               "--netfilter-mode=off" |               "--netfilter-mode=off" | ||||||
|               "--advertise-exit-node" |               "--advertise-exit-node" | ||||||
|               "--advertise-routes=${advRoutes}" |               "--advertise-routes=${advRoutes}" | ||||||
|   | |||||||
| @@ -140,10 +140,10 @@ in | |||||||
|                     }; |                     }; | ||||||
|                     ipv6Prefixes = [ |                     ipv6Prefixes = [ | ||||||
|                       { |                       { | ||||||
|                         ipv6PrefixConfig.Prefix = prefixes.ctrs.v6; |                         Prefix = prefixes.ctrs.v6; | ||||||
|                       } |                       } | ||||||
|                     ]; |                     ]; | ||||||
|                     routes = map (r: { routeConfig = r; }) [ |                     routes = [ | ||||||
|                       { |                       { | ||||||
|                         Destination = lib.my.c.tailscale.prefix.v4; |                         Destination = lib.my.c.tailscale.prefix.v4; | ||||||
|                         Gateway = allAssignments.waffletail.internal.ipv4.address; |                         Gateway = allAssignments.waffletail.internal.ipv4.address; | ||||||
| @@ -152,6 +152,11 @@ in | |||||||
|                         Destination = lib.my.c.tailscale.prefix.v6; |                         Destination = lib.my.c.tailscale.prefix.v6; | ||||||
|                         Gateway = allAssignments.waffletail.internal.ipv6.address; |                         Gateway = allAssignments.waffletail.internal.ipv6.address; | ||||||
|                       } |                       } | ||||||
|  |  | ||||||
|  |                       { | ||||||
|  |                         Destination = prefixes.qclk.v4; | ||||||
|  |                         Gateway = allAssignments.qclk.internal.ipv4.address; | ||||||
|  |                       } | ||||||
|                     ]; |                     ]; | ||||||
|                   } |                   } | ||||||
|                 ]; |                 ]; | ||||||
| @@ -211,6 +216,7 @@ in | |||||||
|                   }; |                   }; | ||||||
|                   toot = {}; |                   toot = {}; | ||||||
|                   waffletail = {}; |                   waffletail = {}; | ||||||
|  |                   qclk = {}; | ||||||
|                 }; |                 }; | ||||||
|               in |               in | ||||||
|               mkMerge [ |               mkMerge [ | ||||||
|   | |||||||
| @@ -52,6 +52,7 @@ in | |||||||
|       valheim-oci = 2; |       valheim-oci = 2; | ||||||
|       simpcraft-oci = 3; |       simpcraft-oci = 3; | ||||||
|       simpcraft-staging-oci = 4; |       simpcraft-staging-oci = 4; | ||||||
|  |       enshrouded-oci = 5; | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|     configuration = { lib, pkgs, modulesPath, config, assignments, allAssignments, ... }: |     configuration = { lib, pkgs, modulesPath, config, assignments, allAssignments, ... }: | ||||||
| @@ -66,6 +67,7 @@ in | |||||||
|  |  | ||||||
|           ./valheim.nix |           ./valheim.nix | ||||||
|           ./minecraft |           ./minecraft | ||||||
|  |           # ./enshrouded.nix | ||||||
|         ]; |         ]; | ||||||
|  |  | ||||||
|         config = mkMerge [ |         config = mkMerge [ | ||||||
|   | |||||||
							
								
								
									
										35
									
								
								nixos/boxes/colony/vms/whale2/enshrouded.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								nixos/boxes/colony/vms/whale2/enshrouded.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | |||||||
|  | { lib, config, allAssignments, ... }: | ||||||
|  | let | ||||||
|  |   inherit (lib) concatStringsSep; | ||||||
|  |   inherit (lib.my) dockerNetAssignment; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   config = { | ||||||
|  |     virtualisation.oci-containers.containers = { | ||||||
|  |       enshrouded = { | ||||||
|  |         image = "sknnr/enshrouded-dedicated-server@sha256:f163e8ba9caa2115d8a0a7b16c3696968242fb6fba82706d9a77a882df083497"; | ||||||
|  |  | ||||||
|  |         environment = { | ||||||
|  |           SERVER_NAME = "UWUshrouded"; | ||||||
|  |           # SERVER_IP = "::"; # no IPv6?? :( | ||||||
|  |           TZ = "Europe/Dublin"; | ||||||
|  |         }; | ||||||
|  |         environmentFiles = [ config.age.secrets."whale2/enshrouded.env".path ]; | ||||||
|  |  | ||||||
|  |         volumes = [ | ||||||
|  |           "enshrouded:/home/steam/enshrouded/savegame" | ||||||
|  |         ]; | ||||||
|  |  | ||||||
|  |         extraOptions = [ | ||||||
|  |           ''--network=colony:${dockerNetAssignment allAssignments "enshrouded-oci"}'' | ||||||
|  |         ]; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     my = { | ||||||
|  |       secrets.files = { | ||||||
|  |         "whale2/enshrouded.env" = {}; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
| @@ -123,6 +123,7 @@ in | |||||||
|           within = "12H"; |           within = "12H"; | ||||||
|           hourly = 48; |           hourly = 48; | ||||||
|         }; |         }; | ||||||
|  |         readWritePaths = [ "/var/lib/borgbackup" "/var/cache/borgbackup" ]; | ||||||
|  |  | ||||||
|         # Avoid Minecraft poking the files while we back up |         # Avoid Minecraft poking the files while we back up | ||||||
|         preHook = rconCommand "save-off"; |         preHook = rconCommand "save-off"; | ||||||
|   | |||||||
| @@ -36,7 +36,7 @@ in | |||||||
|           cpu = { |           cpu = { | ||||||
|             amd.updateMicrocode = true; |             amd.updateMicrocode = true; | ||||||
|           }; |           }; | ||||||
|           opengl.extraPackages = with pkgs; [ |           graphics.extraPackages = with pkgs; [ | ||||||
|             intel-media-driver |             intel-media-driver | ||||||
|           ]; |           ]; | ||||||
|           bluetooth.enable = true; |           bluetooth.enable = true; | ||||||
| @@ -75,6 +75,8 @@ in | |||||||
|               }; |               }; | ||||||
|             }; |             }; | ||||||
|           }; |           }; | ||||||
|  |  | ||||||
|  |           binfmt.emulatedSystems = [ "aarch64-linux" "armv7l-linux" ]; | ||||||
|         }; |         }; | ||||||
|  |  | ||||||
|         fileSystems = { |         fileSystems = { | ||||||
| @@ -152,6 +154,10 @@ in | |||||||
|  |  | ||||||
|         nix = { |         nix = { | ||||||
|           gc.automatic = false; |           gc.automatic = false; | ||||||
|  |           settings = { | ||||||
|  |             experimental-features = [ "recursive-nix" ]; | ||||||
|  |             system-features = [ "nixos-test" "benchmark" "big-parallel" "kvm" "recursive-nix" ]; | ||||||
|  |           }; | ||||||
|         }; |         }; | ||||||
|  |  | ||||||
|         systemd = { |         systemd = { | ||||||
|   | |||||||
| @@ -56,6 +56,7 @@ in | |||||||
|             enable = true; |             enable = true; | ||||||
|             openFirewall = true; |             openFirewall = true; | ||||||
|             unifiPackage = pkgs.unifi8; |             unifiPackage = pkgs.unifi8; | ||||||
|  |             mongodbPackage = pkgs.mongodb-6_0; | ||||||
|           }; |           }; | ||||||
|         }; |         }; | ||||||
|       }; |       }; | ||||||
|   | |||||||
| @@ -227,7 +227,7 @@ in | |||||||
|                   networkConfig = networkd.noL3; |                   networkConfig = networkd.noL3; | ||||||
|                   extraConfig = '' |                   extraConfig = '' | ||||||
|                     [CAKE] |                     [CAKE] | ||||||
|                     Bandwidth=235M |                     Bandwidth=490M | ||||||
|                     RTTSec=50ms |                     RTTSec=50ms | ||||||
|                     PriorityQueueingPreset=besteffort |                     PriorityQueueingPreset=besteffort | ||||||
|                     # DOCSIS preset |                     # DOCSIS preset | ||||||
| @@ -251,7 +251,7 @@ in | |||||||
|                     extraConfig = '' |                     extraConfig = '' | ||||||
|                       [CAKE] |                       [CAKE] | ||||||
|                       Parent=root |                       Parent=root | ||||||
|                       Bandwidth=24M |                       Bandwidth=48M | ||||||
|                       RTTSec=50ms |                       RTTSec=50ms | ||||||
|                     ''; |                     ''; | ||||||
|                   } |                   } | ||||||
| @@ -276,7 +276,7 @@ in | |||||||
|                   { |                   { | ||||||
|                     matchConfig.Name = "as211024"; |                     matchConfig.Name = "as211024"; | ||||||
|                     networkConfig.IPv6AcceptRA = mkForce false; |                     networkConfig.IPv6AcceptRA = mkForce false; | ||||||
|                     routes = map (r: { routeConfig = r; }) [ |                     routes = [ | ||||||
|                       { |                       { | ||||||
|                         Destination = lib.my.c.colony.prefixes.all.v4; |                         Destination = lib.my.c.colony.prefixes.all.v4; | ||||||
|                         Gateway = allAssignments.estuary.as211024.ipv4.address; |                         Gateway = allAssignments.estuary.as211024.ipv4.address; | ||||||
| @@ -301,7 +301,7 @@ in | |||||||
|  |  | ||||||
|               { |               { | ||||||
|                 "60-lan-hi" = { |                 "60-lan-hi" = { | ||||||
|                   routes = map (r: { routeConfig = r; }) [ |                   routes = [ | ||||||
|                     { |                     { | ||||||
|                       Destination = elemAt routersPubV4 otherIndex; |                       Destination = elemAt routersPubV4 otherIndex; | ||||||
|                       Gateway = net.cidr.host (otherIndex + 1) prefixes.hi.v4; |                       Gateway = net.cidr.host (otherIndex + 1) prefixes.hi.v4; | ||||||
|   | |||||||
| @@ -170,8 +170,8 @@ in | |||||||
|               hostname = "${otherName}.${config.networking.domain}"; |               hostname = "${otherName}.${config.networking.domain}"; | ||||||
|               server = net.cidr.host (otherIndex + 1) prefixes.hi.v4; |               server = net.cidr.host (otherIndex + 1) prefixes.hi.v4; | ||||||
|             }} |             }} | ||||||
|             ${elemAt routers 0} IN AAAA ${net.cidr.host 1 prefixes.hi.v6} |             ${elemAt routers 0} IN AAAA ${allAssignments."${elemAt routers 0}".as211024.ipv6.address} | ||||||
|             ${elemAt routers 1} IN AAAA ${net.cidr.host 2 prefixes.hi.v6} |             ${elemAt routers 1} IN AAAA ${allAssignments."${elemAt routers 1}".as211024.ipv6.address} | ||||||
|             boot IN CNAME river-hi.${config.networking.domain}. |             boot IN CNAME river-hi.${config.networking.domain}. | ||||||
|  |  | ||||||
|             @ IN NS ns1 |             @ IN NS ns1 | ||||||
|   | |||||||
| @@ -43,6 +43,38 @@ | |||||||
|           }; |           }; | ||||||
|         }; |         }; | ||||||
|  |  | ||||||
|  |         services = { | ||||||
|  |           mjpg-streamer = { | ||||||
|  |             enable = true; | ||||||
|  |             inputPlugin = "input_uvc.so"; | ||||||
|  |             outputPlugin = "output_http.so -w @www@ -n -p 5050"; | ||||||
|  |           }; | ||||||
|  |           octoprint = { | ||||||
|  |             enable = true; | ||||||
|  |             host = "::"; | ||||||
|  |             extraConfig = { | ||||||
|  |               plugins = { | ||||||
|  |                 classicwebcam = { | ||||||
|  |                   snapshot = "/webcam/?action=snapshot"; | ||||||
|  |                   stream = "/webcam/?action=stream"; | ||||||
|  |                   streamRatio = "4:3"; | ||||||
|  |                 }; | ||||||
|  |               }; | ||||||
|  |               serial = { | ||||||
|  |                 port = "/dev/ttyACM0"; | ||||||
|  |                 baudrate = 115200; | ||||||
|  |               }; | ||||||
|  |               temperature.profiles = [ | ||||||
|  |                 { | ||||||
|  |                   bed = 60; | ||||||
|  |                   extruder = 215; | ||||||
|  |                   name = "PLA"; | ||||||
|  |                 } | ||||||
|  |               ]; | ||||||
|  |             }; | ||||||
|  |           }; | ||||||
|  |         }; | ||||||
|  |  | ||||||
|         systemd.network = { |         systemd.network = { | ||||||
|           netdevs = { |           netdevs = { | ||||||
|             "25-lan" = { |             "25-lan" = { | ||||||
|   | |||||||
| @@ -26,7 +26,7 @@ in | |||||||
|  |  | ||||||
|       config = { |       config = { | ||||||
|         # Hardware acceleration for Jellyfin |         # Hardware acceleration for Jellyfin | ||||||
|         hardware.opengl = { |         hardware.graphics = { | ||||||
|           enable = true; |           enable = true; | ||||||
|           extraPackages = with pkgs; [ |           extraPackages = with pkgs; [ | ||||||
|             vaapiIntel |             vaapiIntel | ||||||
| @@ -78,6 +78,14 @@ in | |||||||
|           }; |           }; | ||||||
|         }; |         }; | ||||||
|  |  | ||||||
|  |         nixpkgs.config.permittedInsecurePackages = [ | ||||||
|  |           # FIXME: This is needed for Sonarr | ||||||
|  |           "aspnetcore-runtime-wrapped-6.0.36" | ||||||
|  |           "aspnetcore-runtime-6.0.36" | ||||||
|  |           "dotnet-sdk-wrapped-6.0.428" | ||||||
|  |           "dotnet-sdk-6.0.428" | ||||||
|  |         ]; | ||||||
|  |  | ||||||
|         services = { |         services = { | ||||||
|           transmission = { |           transmission = { | ||||||
|             enable = true; |             enable = true; | ||||||
|   | |||||||
| @@ -73,14 +73,12 @@ in | |||||||
|               RouteTable = routeTable; |               RouteTable = routeTable; | ||||||
|             }; |             }; | ||||||
|             wireguardPeers = [ |             wireguardPeers = [ | ||||||
|  |               # AirVPN IE | ||||||
|               { |               { | ||||||
|                 # AirVPN IE |                 Endpoint = "146.70.94.2:1637"; | ||||||
|                 wireguardPeerConfig = { |                 PublicKey = "PyLCXAQT8KkM4T+dUsOQfn+Ub3pGxfGlxkIApuig+hk="; | ||||||
|                   Endpoint = "146.70.94.2:1637"; |                 PresharedKeyFile = config.age.secrets."${pskFile}".path; | ||||||
|                   PublicKey = "PyLCXAQT8KkM4T+dUsOQfn+Ub3pGxfGlxkIApuig+hk="; |                 AllowedIPs = [ "0.0.0.0/0" "::/0" ]; | ||||||
|                   PresharedKeyFile = config.age.secrets."${pskFile}".path; |  | ||||||
|                   AllowedIPs = [ "0.0.0.0/0" "::/0" ]; |  | ||||||
|                 }; |  | ||||||
|               } |               } | ||||||
|             ]; |             ]; | ||||||
|           }; |           }; | ||||||
| @@ -97,7 +95,7 @@ in | |||||||
|               matchConfig.Name = "vpn"; |               matchConfig.Name = "vpn"; | ||||||
|               address = [ "10.161.170.28/32" "fd7d:76ee:e68f:a993:b12d:6d15:c80a:9516/128" ]; |               address = [ "10.161.170.28/32" "fd7d:76ee:e68f:a993:b12d:6d15:c80a:9516/128" ]; | ||||||
|               dns = [ "10.128.0.1" "fd7d:76ee:e68f:a993::1" ]; |               dns = [ "10.128.0.1" "fd7d:76ee:e68f:a993::1" ]; | ||||||
|               routingPolicyRules = map (r: { routingPolicyRuleConfig = r; }) [ |               routingPolicyRules = [ | ||||||
|                 { |                 { | ||||||
|                   Family = "both"; |                   Family = "both"; | ||||||
|                   SuppressPrefixLength = 0; |                   SuppressPrefixLength = 0; | ||||||
|   | |||||||
| @@ -121,8 +121,7 @@ in | |||||||
|  |  | ||||||
|             samba = { |             samba = { | ||||||
|               enable = true; |               enable = true; | ||||||
|               enableNmbd = true; |               settings = { | ||||||
|               shares = { |  | ||||||
|                 storage = { |                 storage = { | ||||||
|                   path = "/mnt/storage"; |                   path = "/mnt/storage"; | ||||||
|                   browseable = "yes"; |                   browseable = "yes"; | ||||||
| @@ -131,6 +130,8 @@ in | |||||||
|                   "directory mask" = "0775"; |                   "directory mask" = "0775"; | ||||||
|                 }; |                 }; | ||||||
|               }; |               }; | ||||||
|  |  | ||||||
|  |               nmbd.enable = true; | ||||||
|             }; |             }; | ||||||
|             samba-wsdd.enable = true; |             samba-wsdd.enable = true; | ||||||
|  |  | ||||||
| @@ -180,12 +181,10 @@ in | |||||||
|                   }; |                   }; | ||||||
|                   wireguardPeers = [ |                   wireguardPeers = [ | ||||||
|                     { |                     { | ||||||
|                       wireguardPeerConfig = { |                       PublicKey = "bP1XUNxp9i8NLOXhgPaIaRzRwi5APbam44/xjvYcyjU="; | ||||||
|                         PublicKey = "bP1XUNxp9i8NLOXhgPaIaRzRwi5APbam44/xjvYcyjU="; |                       Endpoint = "${allAssignments.estuary.internal.ipv4.address}:${toString lib.my.c.kelder.vpn.port}"; | ||||||
|                         Endpoint = "${allAssignments.estuary.internal.ipv4.address}:${toString lib.my.c.kelder.vpn.port}"; |                       AllowedIPs = [ "0.0.0.0/0" ]; | ||||||
|                         AllowedIPs = [ "0.0.0.0/0" ]; |                       PersistentKeepalive = 25; | ||||||
|                         PersistentKeepalive = 25; |  | ||||||
|                       }; |  | ||||||
|                     } |                     } | ||||||
|                   ]; |                   ]; | ||||||
|                 }; |                 }; | ||||||
| @@ -213,7 +212,7 @@ in | |||||||
|                   address = with assignments.estuary; [ |                   address = with assignments.estuary; [ | ||||||
|                     (with ipv4; "${address}/${toString mask}") |                     (with ipv4; "${address}/${toString mask}") | ||||||
|                   ]; |                   ]; | ||||||
|                   routingPolicyRules = map (r: { routingPolicyRuleConfig = r; }) [ |                   routingPolicyRules = [ | ||||||
|                     { |                     { | ||||||
|                       Family = "both"; |                       Family = "both"; | ||||||
|                       SuppressPrefixLength = 0; |                       SuppressPrefixLength = 0; | ||||||
|   | |||||||
| @@ -14,7 +14,7 @@ | |||||||
|           cpu = { |           cpu = { | ||||||
|             intel.updateMicrocode = true; |             intel.updateMicrocode = true; | ||||||
|           }; |           }; | ||||||
|           opengl.extraPackages = with pkgs; [ |           graphics.extraPackages = with pkgs; [ | ||||||
|             intel-media-driver |             intel-media-driver | ||||||
|           ]; |           ]; | ||||||
|           bluetooth.enable = true; |           bluetooth.enable = true; | ||||||
| @@ -177,7 +177,7 @@ | |||||||
|               programs = { |               programs = { | ||||||
|                 fish = { |                 fish = { | ||||||
|                   shellAbbrs = { |                   shellAbbrs = { | ||||||
|                     tsup = "doas tailscale up --login-server=https://ts.nul.ie --accept-routes"; |                     tsup = "doas tailscale up --login-server=https://hs.nul.ie --accept-routes"; | ||||||
|                   }; |                   }; | ||||||
|                 }; |                 }; | ||||||
|               }; |               }; | ||||||
|   | |||||||
| @@ -35,7 +35,7 @@ let | |||||||
|       system = null; |       system = null; | ||||||
|  |  | ||||||
|       # Put the inputs in specialArgs to avoid infinite recursion when modules try to do imports |       # Put the inputs in specialArgs to avoid infinite recursion when modules try to do imports | ||||||
|       specialArgs = { inherit inputs pkgsFlakes pkgsFlake allAssignments; inherit (cfg) systems; }; |       specialArgs = { inherit self inputs pkgsFlakes pkgsFlake allAssignments; inherit (cfg) systems; }; | ||||||
|  |  | ||||||
|       # `baseModules` informs the manual which modules to document |       # `baseModules` informs the manual which modules to document | ||||||
|       baseModules = |       baseModules = | ||||||
|   | |||||||
| @@ -61,8 +61,8 @@ | |||||||
|           }; |           }; | ||||||
|  |  | ||||||
|           networking = { |           networking = { | ||||||
|             # Will be set dynamically |             # Will be set dynamically, but need something to satisfy `/etc/os-release` stuff | ||||||
|             hostName = ""; |             hostName = "installer"; | ||||||
|             useNetworkd = false; |             useNetworkd = false; | ||||||
|           }; |           }; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| { lib, pkgsFlake, pkgs, pkgs', inputs, config, ... }: | { lib, pkgsFlake, pkgs, pkgs', self, inputs, config, ... }: | ||||||
| let | let | ||||||
|   inherit (lib) mkIf mkDefault mkMerge; |   inherit (lib) mkIf mkDefault mkMerge; | ||||||
|   inherit (lib.my) mkDefault'; |   inherit (lib.my) mkDefault'; | ||||||
| @@ -12,7 +12,6 @@ in | |||||||
|     inputs.impermanence.nixosModule |     inputs.impermanence.nixosModule | ||||||
|     inputs.ragenix.nixosModules.age |     inputs.ragenix.nixosModules.age | ||||||
|     inputs.sharry.nixosModules.default |     inputs.sharry.nixosModules.default | ||||||
|     inputs.attic.nixosModules.atticd |  | ||||||
|   ]; |   ]; | ||||||
|  |  | ||||||
|   config = mkMerge [ |   config = mkMerge [ | ||||||
| @@ -41,6 +40,7 @@ in | |||||||
|  |  | ||||||
|       nix = { |       nix = { | ||||||
|         package = pkgs'.mine.nix; |         package = pkgs'.mine.nix; | ||||||
|  |         channel.enable = false; | ||||||
|         settings = with lib.my.c.nix; { |         settings = with lib.my.c.nix; { | ||||||
|           trusted-users = [ "@wheel" ]; |           trusted-users = [ "@wheel" ]; | ||||||
|           experimental-features = [ "nix-command" "flakes" "ca-derivations" ]; |           experimental-features = [ "nix-command" "flakes" "ca-derivations" ]; | ||||||
| @@ -127,6 +127,9 @@ in | |||||||
|         }; |         }; | ||||||
|       }; |       }; | ||||||
|  |  | ||||||
|  |       environment.etc = { | ||||||
|  |         "nixos/flake.nix".source = "/run/nixfiles/flake.nix"; | ||||||
|  |       }; | ||||||
|       environment.systemPackages = with pkgs; mkMerge [ |       environment.systemPackages = with pkgs; mkMerge [ | ||||||
|         [ |         [ | ||||||
|           bash-completion |           bash-completion | ||||||
| @@ -142,7 +145,10 @@ in | |||||||
|         fish.enable = mkDefault true; |         fish.enable = mkDefault true; | ||||||
|         # TODO: This is expecting to look up the channel for the database... |         # TODO: This is expecting to look up the channel for the database... | ||||||
|         command-not-found.enable = mkDefault false; |         command-not-found.enable = mkDefault false; | ||||||
|         vim.defaultEditor = true; |         vim = { | ||||||
|  |           enable = true; | ||||||
|  |           defaultEditor = true; | ||||||
|  |         }; | ||||||
|       }; |       }; | ||||||
|  |  | ||||||
|       services = { |       services = { | ||||||
| @@ -209,14 +215,35 @@ in | |||||||
|             # python.d plugin script does #!/usr/bin/env bash |             # python.d plugin script does #!/usr/bin/env bash | ||||||
|             path = with pkgs; [ bash ]; |             path = with pkgs; [ bash ]; | ||||||
|           }; |           }; | ||||||
|  |  | ||||||
|  |           nixfiles-mutable = { | ||||||
|  |             description = "Mutable nixfiles"; | ||||||
|  |             serviceConfig = { | ||||||
|  |               Type = "oneshot"; | ||||||
|  |               RemainAfterExit = true; | ||||||
|  |             }; | ||||||
|  |  | ||||||
|  |             path = with pkgs; [ util-linux ]; | ||||||
|  |             script = '' | ||||||
|  |               nixfilesDir="${self}" | ||||||
|  |  | ||||||
|  |               mkdir -p /run/nixfiles{,/.rw,/.work} | ||||||
|  |               mount -t overlay overlay -o lowerdir="$nixfilesDir",upperdir=/run/nixfiles/.rw,workdir=/run/nixfiles/.work /run/nixfiles | ||||||
|  |               chmod -R u+w /run/nixfiles | ||||||
|  |             ''; | ||||||
|  |             preStop = '' | ||||||
|  |               umount /run/nixfiles | ||||||
|  |               rm -rf /run/nixfiles | ||||||
|  |             ''; | ||||||
|  |  | ||||||
|  |             wantedBy = [ "multi-user.target" ]; | ||||||
|  |           }; | ||||||
|         }; |         }; | ||||||
|       }; |       }; | ||||||
|     } |     } | ||||||
|     (mkIf config.services.kmscon.enable { |     (mkIf config.services.kmscon.enable { | ||||||
|       fonts.fonts = with pkgs; [ |       fonts.fonts = with pkgs; [ | ||||||
|         (nerdfonts.override { |         nerd-fonts.sauce-code-pro | ||||||
|           fonts = [ "SourceCodePro" ]; |  | ||||||
|         }) |  | ||||||
|       ]; |       ]; | ||||||
|     }) |     }) | ||||||
|   ]; |   ]; | ||||||
|   | |||||||
| @@ -12,7 +12,7 @@ in | |||||||
|  |  | ||||||
|   config = mkIf cfg.enable { |   config = mkIf cfg.enable { | ||||||
|     hardware = { |     hardware = { | ||||||
|       opengl.enable = mkDefault true; |       graphics.enable = mkDefault true; | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|     systemd = { |     systemd = { | ||||||
| @@ -53,6 +53,8 @@ in | |||||||
|           SUBSYSTEM=="usb", ATTR{idVendor}=="057e", MODE="0664", GROUP="wheel" |           SUBSYSTEM=="usb", ATTR{idVendor}=="057e", MODE="0664", GROUP="wheel" | ||||||
|           # FT |           # FT | ||||||
|           SUBSYSTEM=="usb", ATTR{idVendor}=="0403", MODE="0664", GROUP="wheel" |           SUBSYSTEM=="usb", ATTR{idVendor}=="0403", MODE="0664", GROUP="wheel" | ||||||
|  |           # /dev/player0 | ||||||
|  |           SUBSYSTEM=="usb", ATTR{idVendor}=="6969", MODE="0664", GROUP="wheel" | ||||||
|         ''; |         ''; | ||||||
|       }; |       }; | ||||||
|     }; |     }; | ||||||
|   | |||||||
| @@ -44,10 +44,8 @@ let | |||||||
|       toString (mesh.baseMTU - overhead); |       toString (mesh.baseMTU - overhead); | ||||||
|  |  | ||||||
|       bridgeFDBs = mapAttrsToList (n: peer: { |       bridgeFDBs = mapAttrsToList (n: peer: { | ||||||
|         bridgeFDBConfig = { |         MACAddress = "00:00:00:00:00:00"; | ||||||
|           MACAddress = "00:00:00:00:00:00"; |         Destination = peer.addr; | ||||||
|           Destination = peer.addr; |  | ||||||
|         }; |  | ||||||
|       }) otherPeers; |       }) otherPeers; | ||||||
|     }; |     }; | ||||||
|   }; |   }; | ||||||
|   | |||||||
| @@ -5,10 +5,19 @@ let | |||||||
|  |  | ||||||
|   cfg = config.my.netboot; |   cfg = config.my.netboot; | ||||||
|  |  | ||||||
|  |   ipxe = pkgs.ipxe.overrideAttrs (o: rec { | ||||||
|  |     version = "1.21.1-unstable-2024-06-27"; | ||||||
|  |     src = pkgs.fetchFromGitHub { | ||||||
|  |       owner = "ipxe"; | ||||||
|  |       repo = "ipxe"; | ||||||
|  |       rev = "b66e27d9b29a172a097c737ab4d378d60fe01b05"; | ||||||
|  |       hash = "sha256-TKZ4WjNV2oZIYNefch7E7m1JpeoC/d7O1kofoNv8G40="; | ||||||
|  |     }; | ||||||
|  |   }); | ||||||
|   tftpRoot = pkgs.linkFarm "tftp-root" [ |   tftpRoot = pkgs.linkFarm "tftp-root" [ | ||||||
|     { |     { | ||||||
|       name = "ipxe-x86_64.efi"; |       name = "ipxe-x86_64.efi"; | ||||||
|       path = "${pkgs.ipxe}/ipxe.efi"; |       path = "${ipxe}/ipxe.efi"; | ||||||
|     } |     } | ||||||
|   ]; |   ]; | ||||||
|   menuFile = pkgs.runCommand "menu.ipxe" { |   menuFile = pkgs.runCommand "menu.ipxe" { | ||||||
|   | |||||||
| @@ -5,7 +5,15 @@ let | |||||||
|  |  | ||||||
|   cfg = config.my.nvme; |   cfg = config.my.nvme; | ||||||
|   nvme-cli = pkgs.nvme-cli.override { |   nvme-cli = pkgs.nvme-cli.override { | ||||||
|     libnvme = pkgs.libnvme.overrideAttrs (o: { |     libnvme = pkgs.libnvme.overrideAttrs (o: rec { | ||||||
|  |       # TODO: Remove when 1.11.1 releases (see https://github.com/linux-nvme/libnvme/pull/914) | ||||||
|  |       version = "1.11.1"; | ||||||
|  |       src = pkgs.fetchFromGitHub { | ||||||
|  |         owner = "linux-nvme"; | ||||||
|  |         repo = "libnvme"; | ||||||
|  |         rev = "v${version}"; | ||||||
|  |         hash = "sha256-CEGr7PDOVRi210XvICH8iLYDKn8S9bGruBO4tycvsT8="; | ||||||
|  |       }; | ||||||
|       patches = (if (o ? patches) then o.patches else [ ]) ++ [ ./libnvme-hostconf.patch ]; |       patches = (if (o ? patches) then o.patches else [ ]) ++ [ ./libnvme-hostconf.patch ]; | ||||||
|     }); |     }); | ||||||
|   }; |   }; | ||||||
|   | |||||||
| @@ -147,6 +147,15 @@ in | |||||||
|             "/var/lib/systemd" |             "/var/lib/systemd" | ||||||
|  |  | ||||||
|             { directory = "/root/.cache/nix"; mode = "0700"; } |             { directory = "/root/.cache/nix"; mode = "0700"; } | ||||||
|  |             # Including these unconditionally due to infinite recursion problems... | ||||||
|  |             { | ||||||
|  |               directory = "/etc/lvm/archive"; | ||||||
|  |               mode = "0700"; | ||||||
|  |             } | ||||||
|  |             { | ||||||
|  |               directory = "/etc/lvm/backup"; | ||||||
|  |               mode = "0700"; | ||||||
|  |             } | ||||||
|           ]; |           ]; | ||||||
|           files = [ |           files = [ | ||||||
|             "/etc/machine-id" |             "/etc/machine-id" | ||||||
| @@ -260,18 +269,6 @@ in | |||||||
|         my.tmproot.persistence.config.files = |         my.tmproot.persistence.config.files = | ||||||
|           concatMap (k: [ k.path "${k.path}.pub" ]) config.services.openssh.hostKeys; |           concatMap (k: [ k.path "${k.path}.pub" ]) config.services.openssh.hostKeys; | ||||||
|       }) |       }) | ||||||
|       (mkIf config.services.lvm.enable { |  | ||||||
|         my.tmproot.persistence.config.directories = [ |  | ||||||
|           { |  | ||||||
|             directory = "/etc/lvm/archive"; |  | ||||||
|             mode = "0700"; |  | ||||||
|           } |  | ||||||
|           { |  | ||||||
|             directory = "/etc/lvm/backup"; |  | ||||||
|             mode = "0700"; |  | ||||||
|           } |  | ||||||
|         ]; |  | ||||||
|       }) |  | ||||||
|       (mkIf (config.security.acme.certs != { }) { |       (mkIf (config.security.acme.certs != { }) { | ||||||
|         my.tmproot.persistence.config.directories = [ |         my.tmproot.persistence.config.directories = [ | ||||||
|           { |           { | ||||||
| @@ -539,6 +536,21 @@ in | |||||||
|           } |           } | ||||||
|         ]; |         ]; | ||||||
|       }) |       }) | ||||||
|  |       (persistSimpleSvc "octoprint") | ||||||
|  |       (mkIf (config.services.borgbackup.jobs != { }) { | ||||||
|  |         my.tmproot.persistence.config.directories = [ | ||||||
|  |           "/var/lib/borgbackup" | ||||||
|  |           "/var/cache/borgbackup" | ||||||
|  |         ]; | ||||||
|  |  | ||||||
|  |         services.borgbackup.package = pkgs.borgbackup.overrideAttrs (o: { | ||||||
|  |           makeWrapperArgs = o.makeWrapperArgs ++ [ | ||||||
|  |             "--set-default BORG_BASE_DIR /var/lib/borgbackup" | ||||||
|  |             "--set-default BORG_CONFIG_DIR /var/lib/borgbackup/config" | ||||||
|  |             "--set-default BORG_CACHE_DIR /var/cache/borgbackup" | ||||||
|  |           ]; | ||||||
|  |         }); | ||||||
|  |       }) | ||||||
|     ])) |     ])) | ||||||
|   ]); |   ]); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -82,6 +82,10 @@ in | |||||||
|       # NOTE: As the "outermost" module is still being evaluated in NixOS land, special params (e.g. pkgs) won't be |       # NOTE: As the "outermost" module is still being evaluated in NixOS land, special params (e.g. pkgs) won't be | ||||||
|       # passed to it |       # passed to it | ||||||
|       home-manager.users.${user'.name} = mkAliasDefinitions options.my.user.homeConfig; |       home-manager.users.${user'.name} = mkAliasDefinitions options.my.user.homeConfig; | ||||||
|  |  | ||||||
|  |       systemd.services.nixfiles-mutable.script = '' | ||||||
|  |         chown -R ${user'.name} /run/nixfiles | ||||||
|  |       ''; | ||||||
|     } |     } | ||||||
|     (mkIf (cfg.passwordSecret != null) { |     (mkIf (cfg.passwordSecret != null) { | ||||||
|       my = { |       my = { | ||||||
|   | |||||||
| @@ -8,7 +8,6 @@ in | |||||||
|   vfio-pci-bind = callPackage ./vfio-pci-bind.nix { }; |   vfio-pci-bind = callPackage ./vfio-pci-bind.nix { }; | ||||||
|   librespeed-go = callPackage ./librespeed-go.nix { }; |   librespeed-go = callPackage ./librespeed-go.nix { }; | ||||||
|   # modrinth-app = callPackage ./modrinth-app { }; |   # modrinth-app = callPackage ./modrinth-app { }; | ||||||
|   glfw-minecraft = callPackage ./glfw-minecraft { }; |  | ||||||
|   chocolate-doom2xx = callPackage ./chocolate-doom2xx { }; |   chocolate-doom2xx = callPackage ./chocolate-doom2xx { }; | ||||||
|   windowtolayer = callPackage ./windowtolayer.nix { }; |   windowtolayer = callPackage ./windowtolayer.nix { }; | ||||||
|   swaylock-plugin = callPackage ./swaylock-plugin.nix { }; |   swaylock-plugin = callPackage ./swaylock-plugin.nix { }; | ||||||
|   | |||||||
| @@ -1,6 +0,0 @@ | |||||||
| { lib, glfw-wayland-minecraft, ... }: |  | ||||||
| glfw-wayland-minecraft.overrideAttrs (o: { |  | ||||||
|   patches = [ |  | ||||||
|     ./suppress-wayland-errors.patch |  | ||||||
|   ]; |  | ||||||
| }) |  | ||||||
| @@ -1,43 +0,0 @@ | |||||||
| diff --git a/src/wl_window.c b/src/wl_window.c |  | ||||||
| index 7c509896..db9a6451 100644 |  | ||||||
| --- a/src/wl_window.c |  | ||||||
| +++ b/src/wl_window.c |  | ||||||
| @@ -2115,25 +2115,21 @@ void _glfwSetWindowTitleWayland(_GLFWwindow* window, const char* title) |  | ||||||
|  void _glfwSetWindowIconWayland(_GLFWwindow* window, |  | ||||||
|                                 int count, const GLFWimage* images) |  | ||||||
|  { |  | ||||||
| -    _glfwInputError(GLFW_FEATURE_UNAVAILABLE, |  | ||||||
| -                    "Wayland: The platform does not support setting the window icon"); |  | ||||||
| +    fprintf(stderr, "!!! Ignoring Error: Wayland: The platform does not support setting the window icon\n"); |  | ||||||
|  } |  | ||||||
|   |  | ||||||
|  void _glfwGetWindowPosWayland(_GLFWwindow* window, int* xpos, int* ypos) |  | ||||||
|  { |  | ||||||
|      // A Wayland client is not aware of its position, so just warn and leave it |  | ||||||
|      // as (0, 0) |  | ||||||
| - |  | ||||||
| -    _glfwInputError(GLFW_FEATURE_UNAVAILABLE, |  | ||||||
| -                    "Wayland: The platform does not provide the window position"); |  | ||||||
| +    fprintf(stderr, "!!! Ignoring Error: Wayland: The platform does not provide the window position\n"); |  | ||||||
|  } |  | ||||||
|   |  | ||||||
|  void _glfwSetWindowPosWayland(_GLFWwindow* window, int xpos, int ypos) |  | ||||||
|  { |  | ||||||
|      // A Wayland client can not set its position, so just warn |  | ||||||
|   |  | ||||||
| -    _glfwInputError(GLFW_FEATURE_UNAVAILABLE, |  | ||||||
| -                    "Wayland: The platform does not support setting the window position"); |  | ||||||
| +    fprintf(stderr, "!!! Ignoring Error: Wayland: The platform does not support setting the window position\n"); |  | ||||||
|  } |  | ||||||
|   |  | ||||||
|  void _glfwGetWindowSizeWayland(_GLFWwindow* window, int* width, int* height) |  | ||||||
| @@ -2359,8 +2355,7 @@ void _glfwRequestWindowAttentionWayland(_GLFWwindow* window) |  | ||||||
|   |  | ||||||
|  void _glfwFocusWindowWayland(_GLFWwindow* window) |  | ||||||
|  { |  | ||||||
| -    _glfwInputError(GLFW_FEATURE_UNAVAILABLE, |  | ||||||
| -                    "Wayland: The platform does not support setting the input focus"); |  | ||||||
| +    fprintf(stderr, "!!! Ignoring Error: Wayland: The platform does not support setting the input focus\n"); |  | ||||||
|  } |  | ||||||
|   |  | ||||||
|  void _glfwSetWindowMonitorWayland(_GLFWwindow* window, |  | ||||||
| @@ -1,16 +0,0 @@ | |||||||
| -----BEGIN AGE ENCRYPTED FILE----- |  | ||||||
| YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFpCM2U2USBQMEJB |  | ||||||
| VVhIL2ViVUx1Ym9IbFV1UW52NjZYMmJlYmpjY0RuMzhiclJVS0ZnCkY5dEZHTHlC |  | ||||||
| K29uamorWWNJSVV0VlVJNG1VNm9GQ3VPdldJRDNSODVoOVUKLT4gWDI1NTE5IEM0 |  | ||||||
| UVQvLzFYRTRRMldWSnNnd3V3aXJTeS8vZ1hkdENYVHk1QVVaQVEyQnMKVmN4OUFH |  | ||||||
| WCtVSW9tREV5RExycnFJejk5UW91dzd5Rm8vcFBTT0ZCdytFWQotPiBCPC0lLTJW |  | ||||||
| LS1ncmVhc2UgRSBjOlg5a0pdQSBSb2YKN0pkalY4VlFDMm8vZzJpQUV4TmdSRHA2 |  | ||||||
| dnB4UzJaWTRXeDdmKzFrUGVMSEFlbFhlNFFycFRQU005d1I2Si9VUQpHbDVxcGxn |  | ||||||
| SVdjZzduSGluYlZnY3lmZmtnOWJYKzkydDhKU0VCNmNvV0EKLS0tIGdaUkpGNy9P |  | ||||||
| Y3BGVGVJenJkTG51c3Z3WFU0eTFXT09pSVFseGRLMmxJVU0KhH9EjbL0zv821Yox |  | ||||||
| FXc54SXGEkq97qPi3xIoPydWd3FbIuftAhe0xPFGfUOO5/zDni4h+PoNJs2hnkOK |  | ||||||
| kHhxtaOj1S6RulI/eYLK/fJjl2aRrTaRFN0TGhFwz5X8HOQe2+Qrq/9wT7pyzOFU |  | ||||||
| LsMwe71OhTjA5XrBTawU9QkWjPx2LZyb/WEkzlLOCGoHTUm4X03xY/1UeHVYZt2k |  | ||||||
| wbLses0JHK1h2ttWnO5y68LovZWJqFdIjoCCkgfo0nNUD5i+e51xEju9OBJMngj+ |  | ||||||
| LnPb6YCqFh4Fxy09WORD0A== |  | ||||||
| -----END AGE ENCRYPTED FILE----- |  | ||||||
| @@ -1,12 +1,13 @@ | |||||||
| -----BEGIN AGE ENCRYPTED FILE----- | -----BEGIN AGE ENCRYPTED FILE----- | ||||||
| YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFZGY3c1ZyB1YlJt | YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFZGY3c1ZyBRQlp2 | ||||||
| UDI5MStrbTBGNzZhMTdvTm5wczBRdXd1dlFSYitOTmpMcytXdHlBCkR5aHpSSWRJ | ajRjbFlJcnYxY1ViYmxLS0hWcTIzdTM4aXpzRkNER3NDVEp1UkdnCkNkQUkzWlZh | ||||||
| OWp2RzlNZFRFUkxoOTZzcTQ1VDVuYmxKbTQrS29pR1gyb28KLT4gWDI1NTE5IDVz | Qy9RdmIrdEtRZk5aNDI2ajVCNDZvQ3VCcGpha1QwUHMxamcKLT4gWDI1NTE5IHc5 | ||||||
| aEJyU3R0Z0Njd283QjVJK1gvRUxFVllYdStEbElPSG9yNmc2TnZaemsKaVFNOEd5 | bzhCNVFvalpaa3Frc0U3UE5GT0V3Y0MySGdBeHNTdzBNMWJtTnNmeDAKOS9KTSs1 | ||||||
| L3hNVlFSUGhoMUxPSE5tK0JUU1FnMGtRNXkvODl0bmNiY0F5RQotPiBwdiR3UD8t | eitCUHNlSnBMSWVkOEdaSEt4MFRoTTVsVldnNnoyNk5hRStORQotPiBzZzNrSyVj | ||||||
| Z3JlYXNlIGpBbSNeVSBMYVogdFxFZicgTiNDOgpJQnNyMFEKLS0tIEdDZ3oxbDZ0 | LWdyZWFzZSBgTiBxXlosJTYlYiBBYyZVIy03Cm96UFpTSGR1S25UVzExTnZNRFdB | ||||||
| VkxETUVnSHRuTDFjTGVYSE9jcWhWT2RCOExDeitKcmZ4TXMKyClXNLb/8j0JtKrc | L0UzR1FKSzA5VXYva1EKLS0tIEM1QXFXcFJPUEJRTmJVK25jNFM2eUkzd3VSaVpJ | ||||||
| OQ2Fd4Ej16Pe8aEfHmwd1VT/XKyE9bOYE4tY5wAhGYLbO6A3SxzeKlZPvfKA4/el | MW0wTTlDZGFmMFhBMVEKRHzl+MWwD1N16bywVC9LFKmLTJeTVLww0pa20th9HEhE | ||||||
| dCh8mOBvBMV9m/RYvjux7mCQNzXiq38IVYE+BqD9fJIXw2iGMDwpYOmz2J+41CMd | AePSzNsp2xUhESxBDmQDjS3E+s88oCd0D8y3pFmV4Nmf2yPNxbMu8gPVvNmhLAFA | ||||||
| EiuA1Ms2OlELFw== | UR6aTjnfUFJpIXQgPgTncT99kF1YPgF0/X5hqe1DjZneRRTLgPp83me2cF43RDqf | ||||||
|  | C4QhJWaqKf8ofqNKfqxvmcKmXNhJG1KEokMyKqPzaw== | ||||||
| -----END AGE ENCRYPTED FILE----- | -----END AGE ENCRYPTED FILE----- | ||||||
|   | |||||||
							
								
								
									
										13
									
								
								secrets/qclk/wg.key.age
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								secrets/qclk/wg.key.age
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | |||||||
|  | -----BEGIN AGE ENCRYPTED FILE----- | ||||||
|  | YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFpiTEpXQSBPQjFB | ||||||
|  | R3p6OGZYOTlZcHV0djlnY2tPTVk2SDNaazM2Nm0vMytSTWJ0THo4CnNSUW4zR2Vo | ||||||
|  | V3hsVVFIOEhRM1ZpSnVmcmd6WFhKdGVNQk9IYlRoZFBGUjgKLT4gWDI1NTE5IDJs | ||||||
|  | NzlrMXQ5Ty9sdTkwNFpUVnp5MWlucUJLZWtWbGpMd1NTZm1UendPa0EKeWVTa2p6 | ||||||
|  | ejROR29UYU5GcWlxb1hjWnV6V1BOK29pL2pZRFVUZkU5NU9EUQotPiBfPk5oe0Fq | ||||||
|  | LWdyZWFzZSA2Jy1xCnhpYThsOVlMWTZEWVFYemlvQ1lKZlVnc0xnT29WVEtXUHF1 | ||||||
|  | SDJ1TmJ0Qmg0R1o2UTBFanAwcXVpbGtKR21UbXoKYVNUTXVweDhQUmU2TzFOc1M4 | ||||||
|  | Z3d6YjdIT29meHVUU0tTV2NnSkljcgotLS0gRFRZNlc3cmRVS25wU0ZZeEpKNmZS | ||||||
|  | Q1YxQkcyOGRDQ0VMSC9Ec2xka2NMOAppbDQ9/xJxLUc0OuOFq4b6r+fYCB4hm4ZB | ||||||
|  | aEF8B3csbjrIHoboxCNaYGNh1DibseZaaWygsDfMbAmbRw2xvBNgI/oq2/RjSda9 | ||||||
|  | dZm+1A== | ||||||
|  | -----END AGE ENCRYPTED FILE----- | ||||||
| @@ -1,16 +1,14 @@ | |||||||
| -----BEGIN AGE ENCRYPTED FILE----- | -----BEGIN AGE ENCRYPTED FILE----- | ||||||
| YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IERMTWVGZyB4Y2th | YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IERMTWVGZyByYlJn | ||||||
| ZnZhNE42ZjJSWGx2OWQyY3lxeGc4eDdReHl1bDFXSGVnR2Q4TFhFCnRGLzJpWDVT | aERLcEhadS9jVUlyUmgxWEk5K0U2cE9WUlhCc0ZXbzhDRnZLTERvCmo2Vy9XeFhq | ||||||
| NmN3bElxZmpYMEhPQnBtODYyTHJPTmFpaVppL1JkODFRVVEKLT4gc3NoLWVkMjU1 | NTcwdG5PZjlDb1JIM3BYWEVzMlBFWHFmRWt2dkF2OEQ2TDQKLT4gc3NoLWVkMjU1 | ||||||
| MTkgT0VxTXNnIGlyMmlTV1Fvd3lXNFI1ZHdGNnk0R0RCN2ZOV3ExZHFLd2k3QnUr | MTkgT0VxTXNnIHROaUlGUExERTZFaU5QL3dBcFpQVWNobGQwSEZ1YTU3NXJkekRi | ||||||
| T2hyUTgKMzhlZEZ2alVnM1RHWW1xUE1FQXJlQjc0S0EyYmxscURKQWtybEFWdTA4 | c0RUMGsKUHg4V0hIdFJ0aGxwOTFhaVB6MUdVWE0wUFgrMjI2am5uZlhWL09ObjhB | ||||||
| TQotPiBYMjU1MTkgVDVkYmwzQTg0TDNnNVloeEtuS2R6OW42MFBNSys3bzVuSHY3 | VQotPiBYMjU1MTkgTWwyQjZjcUFYQ01KUHpoajRrVkpZd0czSzVrMTZxdjVHaHRh | ||||||
| OHpIMi9UNAplbmE3MTZCQ3U2VHVLL1ZQSkd4YnM4a0xnSmpuRnFxcUlnT1lESDMr | bERCSjBqSQpYOXJibDZPM2Z6bkNCSGpMRExZT21UTzU0N0RiT2FNM0l3N1pnRkl6 | ||||||
| MDU0Ci0+ICZUZShrPi1ncmVhc2UgSjIxRCA/U34Kd1ZFb1ZPTFJVeWs2bk1Tbktn | WUJBCi0+IE0qLWdyZWFzZSB6TDVwIGRiQm0gajFFIEVqUXcKU3pEOFBqRVQ0dDZi | ||||||
| aW1mUXRIWkthb0JFcnlCdHRmRFZ6Zm9CbnNtWmNZUytoR2w5M28xMUViamNtQQpO | REszS1h0T2FnOFF6cHBrN2xtOHdEQkIrCi0tLSBTM3EwNHhDaEo1eldDOTN5dzQz | ||||||
| b2poelZ6cjY5ZUZjSnBJem1zeGlSQmUrQ1dUNyt6Mm5aZzNiSkt4S2tuT0JTdWRx | Q3Rpeno1K25KRU15L01wU21tczNmdlVJCqHBdFLovtLJGH9IY86pvc3xhpoLnfI/ | ||||||
| ZGJvQ1gwR0h5QWtpRUlPClRCSQotLS0gT1BLSmFaRS84V1BKNVMrSG9rMUZMZWZY | OVAF5RdpR9T2oNCr3oAiVURkPocYXLHnbjZhLKoj3uDoSZAE52VN9l05jhyX1wwY | ||||||
| SlUvWnozb21JZmtPQkJVc1VTQQpuOl0YXqAckAY7DmUrZGjzFg1m6zmNKE2KBcin | /Vfnp48kP8xfbQ== | ||||||
| sd/Dn+pZpkPk/OID6XwCRTDJB6saD5mLMPooKAYYz0oEy1UA9z+S/Xn1E4X1yktV |  | ||||||
| FQDy0wQ= |  | ||||||
| -----END AGE ENCRYPTED FILE----- | -----END AGE ENCRYPTED FILE----- | ||||||
|   | |||||||
| @@ -1,69 +1,72 @@ | |||||||
| -----BEGIN AGE ENCRYPTED FILE----- | -----BEGIN AGE ENCRYPTED FILE----- | ||||||
| YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IERMTWVGZyBnQUpP | YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IERMTWVGZyBVUDR4 | ||||||
| cDBxeFZBWmVlclJZdkRWOHhnK29DRzBHQ2I1ekJGeDk3WlZpenc0CmhLMVcwbGFH | Um1XS00yUDFIRnYyZzg2KzYzanBIMWFNTmV1MVF6ei8rZDBiTXowCnBBRFEyQU14 | ||||||
| YzBHY1BEb2ZHK0FtZHEyUmw1UFVSaEsyMnR5cVUrZ1pWZXMKLT4gc3NoLWVkMjU1 | ZU5MdSt0NnRJdUMyMyt6dVlOWHBqUnkvRWNmMjNRUENKeTgKLT4gc3NoLWVkMjU1 | ||||||
| MTkgM2JCM1pnIGVuVWVnYmFmWUt4bjlwNU5oVXcvTTJZTllMTk1yQTU4YTVjYlVl | MTkgM2JCM1pnIHFyc2laWnBTQU0rcThOamJTcEtlUGNsSW8reTc2eTJjbVBkZlJu | ||||||
| dHh1WG8KdXBPeWdpNlYrUkJXeGVpTXlqWWhlTlJBQVduR3JhSDRqWmJuSkRjNDl2 | cXEzbUUKcmFrTEVjaXY2a0lJNEtCWXNjTUsxNENkSWZmZUJhRm5ydWZ6WlJ1aDdR | ||||||
| VQotPiBzc2gtZWQyNTUxOSBxKzBYY3cgSzFXb0g2cUxGbUxxa291cVUvK01ZRUF2 | RQotPiBzc2gtZWQyNTUxOSBxKzBYY3cgRVBuOEJ4K0NRVjdLdFhIU2Y3ZGQwL3F4 | ||||||
| QW5iZDA0MG9ORXlSNVBheDZtbwoyWlhIUHo0TDJWeTNOdzUzVTI3QVZVY0pEczZQ | clFjMVNsOWNvTU8wVlRoNG5CZwpycFRlMzFjZ0drN0t5QXpoMkJ4aERMYkxVSFhU | ||||||
| MXE0OVpNSktkTExWcHowCi0+IHNzaC1lZDI1NTE5IFpCM2U2USAwMkg3cmZQcTdD | STJTdUNzeWtkUmFMTHVBCi0+IHNzaC1lZDI1NTE5IFpCM2U2USBBRUhnNlNzbDVX | ||||||
| WnhPbjlmU2M3RnU5MHE4NERBUDNzVVB2Q29OeG1iR1dNCnVna1VRVTdxMHgxczk4 | Q1ArRENrZzBrNkhhSUd5dEZnM2oxRUtmYWx2L1NtbG53ClZIalNsaUNBUUtKWGpT | ||||||
| aGdiZ1VhWlNsVGhrc2ZXdFNzVU92T1dxbW4rK3MKLT4gc3NoLWVkMjU1MTkgajY3 | dTM3VExldm0xRXJoSWZ0SU4vdWk5SDlZTEFPczQKLT4gc3NoLWVkMjU1MTkgajY3 | ||||||
| RlhRIFFocTlvTTlJbXdKZkdqd2NlRHM3b0E0TFozTXBkWlBXa1JYWWhmM3Q4d1kK | RlhRIGR0VkhtNWxCK2xSYUNlS2hhdzRldEVZRDQwNmVnN0dtRTdOamFSM1Jqek0K | ||||||
| YitLd00xUGJReElHNm9DMFhmUGh2WFF3WDJGYW1ueXlpcEQyVWhqZUduYwotPiBz | YS9uWGMyY3JzeUZCWkhLTzk4d1dxT0NkbEQ3UnlWOStCdUh0bkg3K2N3TQotPiBz | ||||||
| c2gtZWQyNTUxOSBjMFROYVEgRHhtOU1iWTduQVdjRCtRNWRMMU14a3p4V2gvek9s | c2gtZWQyNTUxOSBjMFROYVEgYXJhZUdOeEphOGxkMTZmamJxdmMrTElkYkFScVA3 | ||||||
| M202c2NoU0Q5ZTVIOAp5UEt0MnZ1VTZ0anVUeldSV1lBVHZvQU1CRUsrV0pHRjlw | alExSC9TVTJzeUFqNApsZXo1cC9wdnp3Zml4bG52ekFHMEUyU29acFFJeU1VN3Mr | ||||||
| enJFdEVPR0tzCi0+IHNzaC1lZDI1NTE5IG44Q3BVdyAzcWk4bnozcTN0eFgwYlQr | ZlorWC9VWDZzCi0+IHNzaC1lZDI1NTE5IG44Q3BVdyBTenhVdjNncGxudDJ2Y3lw | ||||||
| dzRHekdmTlM4Wkdyd1p4Ujh4WnhJVnh5bEJVCkRnd0xlWkdXNE9BN0x0MjZyMDhM | K0JIOFJDd2VVQzFkWGc1STROdFZqbnUrYlJnCk5MTWxRYVRPcUFjMmdySEJ5Rndy | ||||||
| YlU2OVNzTnZvZGhjSE1uMWlkMUo0T2MKLT4gc3NoLWVkMjU1MTkgakk4UkFnIDFa | TzdnNGErNnBRa1dTSFVFekxQUitOYTAKLT4gc3NoLWVkMjU1MTkgakk4UkFnIGtL | ||||||
| QlhjWm9tZ05oYmNuanRvTkVOSUVJa09xUVFaeE41WDVRZlE3SHFZU3MKYWtkcEFP | c1psRWRRN1hNZUNiVHFmR3JGVm1jUWJtdm91ZVR6M01zNmhGdW9pRTAKNGpwek8w | ||||||
| bkMyMytEcnVjOHZ0SVJaT3lhQmZ0amxXVVV5Qy9NTml4TWNWQQotPiBzc2gtZWQy | QkRnSkZXUjhEMEpPaUdkeGwxZDRGbTRSMjg1Z1pMdEVSaTJEdwotPiBzc2gtZWQy | ||||||
| NTUxOSBoTWE0bncgMGhKOHJCQTBsNng1U0FZbjVDZWUrVzFPQmJGUEhqTlJLS0Zn | NTUxOSBoTWE0bncgYmRqR1FRaDdQQ09ZZHQwWmQxVUJ2QWdLYjdoRlNLU09GYUNi | ||||||
| NEdPYW9TQQpCUytPOUZ6ZkhUcCtHTHQ2WmJqWjQ5MWFuaGFPRVg0SktPVGlEUEha | ajJhMWx5QQo3ZWFNWjMvTzNxSXJjeTY5cTNMWmk0K0IzZ053Mmd6T1hhaVFTVVBj | ||||||
| Q2JNCi0+IHNzaC1lZDI1NTE5IGV5cTNkZyBrTXFLcU1oQnBtZjFuV3Q1VkpLcEt5 | NHBrCi0+IHNzaC1lZDI1NTE5IGV5cTNkZyBXbUdJKzdMZDF1NW1pTi94aUtjNGpo | ||||||
| aDBmY0pGb0FNMG9Sek5lTUhTWkdzCmtGanpyWXJNZDJqVjdEd1dHQk1Qc1Qyd3d4 | aGVLbno0RzE1MXlURTJJQ3hRb1dVClg5K2FwRHBvcXIwVUl1U21GSnJsSmJmMGZN | ||||||
| VTJKZHhpb2xzc1NYdjZoL1kKLT4gc3NoLWVkMjU1MTkgN1dROVBBIGs2ajVzVHE4 | cmdBcmRiRERzcjJmZzV4Q2sKLT4gc3NoLWVkMjU1MTkgN1dROVBBIEIrays1YUJN | ||||||
| U2Z4TmdYQTFGL0RCL0YvNnNmTEdJNEkwTXQzR3JxbWlTVzQKUzl5aVlJTHRUbEpi | TkRMS01oVzQyZEJuSjFPTTV4YkZSMDdTV0UvZE4rZ1U3SFEKWEZSL0g0dmFnelJC | ||||||
| MEFKdmNSWWpHQUl3U01QaXgrUm1rTVNKL3JRSnYyRQotPiBzc2gtZWQyNTUxOSBn | S3VGZDlaTHhJQ3NaaEc2aUsvRmdKdjRNZ1VXMExmQQotPiBzc2gtZWQyNTUxOSBn | ||||||
| U3hQMFEgdXAzU0NRU2J0WlJCRDFha3U3UXAreDFKb2gvVk5sTWt2L3RiWW1xUUps | U3hQMFEgODNUUEg4M0hLL3RSUXk4M3dGV0tZNjJXQWxabmxLanF0Slc0WWMyUkNo | ||||||
| QQpvemtsNGVDUStHTnRlVVV1dHBUNys4Mm9tVlUxdG9CejkxQ3FXeEVPcWc0Ci0+ | bwpCMGlaZDdodk4zeDROczVFc0FxM25qMFdicWZZSVpjb2tiT081bUVUTGFzCi0+ | ||||||
| IHNzaC1lZDI1NTE5IFZGY3c1ZyByQXlBUFhKT1VqUWhlcnVUak5VZVB4VnlXeHQ1 | IHNzaC1lZDI1NTE5IFZGY3c1ZyBKanVnSDI0bUhvS3RVbzdSc0s2TmQzSVdEczRF | ||||||
| ZG9iS2tHOW9iblBnTmdJCmhJU2RSU200MEJWaDF6bnU2NktZK3ZPNFVKS1hIejBq | eU1CazZPM094eEt1ZGp3Cm1HWGluLzhoRUtNRDZOcVJDVUR1R3dneHNHa1M1VGpH | ||||||
| WW42L0Zqb1hzMjAKLT4gc3NoLWVkMjU1MTkgaGtidHZnIGpVM3h2SjJNSTNPWUFw | YWF3TDQ5cS9saFUKLT4gc3NoLWVkMjU1MTkgaGtidHZnIHJLN2dJQnA4eGo5SnU3 | ||||||
| VFVqOHRjUm81RGRNQUNsU1NOcXZGaDMyMUp1bTAKQjIzY3lxeWxodWtxbDNyamkv | SkttSlM2YXNERXJOYjc1Tlo4NnhFakdYT0dqUWMKQllrZm83NHJrYmtWaytCc1VI | ||||||
| Y1hjcTc2NDNyMEMxNkkxUHluaGx3YWppUQotPiBzc2gtZWQyNTUxOSBldDJ6cFEg | aVhESUtYeHpoT0JmdStSRURMZ0JldlQwYwotPiBzc2gtZWQyNTUxOSBldDJ6cFEg | ||||||
| ZEZYQVN4TFkvQlBwSTVzNS9RVER3Wjk4NnZFa3J0OGFhQnNSMUcvUkZVbwppR3BM | d3NnSXpMRzU0QjBBL0c4SGw5Znl6d3hRdWxvbHdXZCtIeVdnU1F6MFVVQQpiQjVX | ||||||
| UGNoWFQza0RYQVZOcE5Ea21tYTJpMFp6UUVoMFh3Ym14dGJUUldFCi0+IHNzaC1l | TSsycGZqMVNWajZHcFkyN2JwY2RqcGRlNitRWXgxWnN5TzlpU1lRCi0+IHNzaC1l | ||||||
| ZDI1NTE5IFpOcUlvZyBXSEhQNXRMaVBsMi9QUnZBUVNWU1RjdkRjSEF1ZGtVa1hM | ZDI1NTE5IFpiTEpXQSB3VmFwR2ZqR2p4OXlpSnQrbExqTktkaEJ4emxLM2ZZbGdx | ||||||
| RnVocFRqeTNBCmVGWDhndHZ6VGFXZW1BR0VKQ0dPYXVQc0RBbmJtaFl6RlEzWDhI | U0drOWtxUGprClgyYnd1M1NQem1rZkxwUk5tVXBLNGVDMFVjNjc5Lys4N0RsajZN | ||||||
| VmxWUjQKLT4gc3NoLWVkMjU1MTkgcUxqcXlRIFZSYkNlNDRTa0lwbGE3MXRZeWo0 | eG9LeEEKLT4gc3NoLWVkMjU1MTkgWk5xSW9nIFl3QUlPNnVHNXNwQ2sxRUEycFda | ||||||
| UDJnSGJDRDR3bkFPWEE1cTNwN0hPbncKU2grdG92aG5NRk9zTzd4RTAzVEo1NmlQ | TkJsUmx0dCtRdnRVRVAzY3pPbm1LM0EKbVZDMHBSOFBiMFVQbkxHOGpkQjhrbDRJ | ||||||
| dE9JdXVCa3luUWtTNXhlUjhBYwotPiBzc2gtZWQyNTUxOSBCYVFsUmcgaHREazZj | YUN0M2JPOW1PbjVtQURaUnVFbwotPiBzc2gtZWQyNTUxOSBxTGpxeVEgUXc5TUxn | ||||||
| SmVubFlQS01WeTJ0N1NLWjBYMlFVUms1djg4Z0c5ZWQrdFJRRQpLYjhuOFVBamJR | YXk2ai9EbHdVeFVsUk96bHZIRFdlcDFqYkxLQ3FJaFBQVG93bwpTSFJ5dmJiN2tt | ||||||
| MlVkTGxTMFl4YWloZDc1bTJqL2hOVG9VME5SdU51R0JrCi0+IHNzaC1lZDI1NTE5 | TVlLUlBhb3VmSG8zVHNYdC9HVjcwN3JUVVVWN3BFUkhvCi0+IHNzaC1lZDI1NTE5 | ||||||
| IHMrcVJmZyBwL3NwQjhHT2JzalVCMnVjQ1RCVXdmZkVEK1hka2U1V2VSMFhqeStM | IEJhUWxSZyAxYkNsekljV0s1ZWR2eVZnSk9Oc2QvWjE2a2dMaldDYzJRU0FWUVE0 | ||||||
| OG5vClNiVVpUQ3NpWjhLNkQxUEVxWlpEVllST2RCamFTU1R3SXdnSWEzZHJucUkK | Z0FvCnk5UlhrT0ZaK3FXTThVY0RKZlE0d0FTajJLRCtSNWdvWjd5V3hZNEg4dUkK | ||||||
| LT4gc3NoLWVkMjU1MTkgNjJKY2NBIG5iUTE4MjlTT2VoUXBuTkZPVXhHMVJVck1N | LT4gc3NoLWVkMjU1MTkgcytxUmZnIHA5cGpXWlMvTlVreDNremhCa1FDUlFVYk45 | ||||||
| SmNGdmJvOUFwL0dpZTRoVG8KbVMveEg2aG02V0ZDdGlpMlptYUY4TjM2S2RPVGFN | OHhjaUhYTWZVa3dySzNLeW8KNXZnZzFPNC8zMExuMG4yUTJFMDgxTFdGdDZ6VVl1 | ||||||
| Rnd5ai9zZXBxQXBJYwotPiBzc2gtZWQyNTUxOSAvaHgvZEEgQjNGMWUrMm9ZMHBT | WEFGUC9zNVgrd2RRdwotPiBzc2gtZWQyNTUxOSA2MkpjY0EgMG51elJWRWRDNzRM | ||||||
| ZDlFVVpLNm5lQVpaSy9WVlMrUGVDS2IvSmdWbHN3UQpscXFvZnVUVXRISHBKMjBP | SERza2RiNFBoOHc1eCt0SWtmUy90dGl0VEd6QTJENApodnNBM1FkUlZ2ZjB6b1Np | ||||||
| dGVyOU4xV3d6dFhQZGJOY0E2NnhFSjduaUVFCi0+IHNzaC1lZDI1NTE5IFd6TEdI | QWNXdjVoNFlsa0NOQWp6TUw2TVQrU3VNRlVZCi0+IHNzaC1lZDI1NTE5IC9oeC9k | ||||||
| QSBMa2k0V3ZvZ01oVmdBd0RlZ0NNSWYzZjI1disyL21lelFxdWE4UzJqTzBRCkll | QSBxdlhXM3Rqb3J4YjVDUzdhUUVYQlFvSTJjZXA5MHBYY0NXWVR0VzllR2hzCkU2 | ||||||
| VHBvZFB2T0pFRWlsOVdpQ3ZQTnZEaW4rUzlWQWp1aTJwSzgrcEc0bnMKLT4gc3No | K2xCY2tGeEJjK1dMYkhCZ29pR3EzYndWUXF4bWorNC83d1E3U3luMFUKLT4gc3No | ||||||
| LWVkMjU1MTkgSEovSjdBIE5YVC84RG5wT0pHb3E1YUJaTS84VzVrNlNWSVdSd1ZJ | LWVkMjU1MTkgV3pMR0hBIGg1MjIydFM3YlM3aWVFR0h4TytwRWxYWTVkTXN4VkdW | ||||||
| Y1FEbUlGV3NqMjgKYThMSHdzQkZxSWlLS3NnM25uVXRnMGN6MEdheHFNN1liV0lZ | TnJ0bXQ0WTduQUEKemtad2lsTTlPUEtUaVpFLzNPVFhqd3VpeWJWbDFyayt2VVhy | ||||||
| bk1JTmtVdwotPiBzc2gtZWQyNTUxOSBPRXFNc2cgSkx3QlNMTUFLQThDRkdweWxX | Q0FSb01rRQotPiBzc2gtZWQyNTUxOSBISi9KN0EgTkdKZUx2U1NTODZzTlpJb2xT | ||||||
| eEhLNHRheGZycFdIWXRjLzNSZmFOTUZqVQpKYS9FSS9FQkdheGQ2OVpaT1Y2MGRG | VFptQ3hWOS9BMCsyZXdsM3ErMXhtaHlFQQoyUnp3RW81VUh6OVRQcGhJOXYxNXRR | ||||||
| Y1l5OXJZWnRETkowM3dzNDYrQUVRCi0+IHNzaC1lZDI1NTE5IC9FSlh2ZyBHeTI5 | NHNGT3ZIU2ZQb2c5aEg0UmhRcG13Ci0+IHNzaC1lZDI1NTE5IE9FcU1zZyBLMi9r | ||||||
| cmowT2xDU2EyNjV1djEyOXM1b1Myd2RCbmU2YjJ5ZFNKVk1UYkR3Ck9ad1RReFNM | bmFyTnBCU1lsdUpDWTJsd3ltRzAxZmw5eDNqVUtjMkR0OGF1dVRjCndrNmVHcmYy | ||||||
| U3JWSTdKV2FLbVIzaGIzR1BDN09UME83aGxsUkxpOU1PbE0KLT4gWDI1NTE5IG9z | c0lQOFM5SjBjN1ZqZXk1Vkk3RzA0b3JtaWZrdDBmdmFrYXcKLT4gc3NoLWVkMjU1 | ||||||
| VHgwWXhINTZndXpTSXdGMmdkdFpPRy8rQlJZUldDeFBVcUNvbUQrMm8KUytDdm5z | MTkgL0VKWHZnIEV6eVNrNEZvVWhPMXppeFpmSEt1Y2NqcmtUOXAxQ1lOWVdtcnlm | ||||||
| bTJTUnFwQnVkWXRrNkIrVnp4OTdZMUJqMkNnVVdGS0tJMjJiawotPiAoRCciTWs7 | R3B3VFEKVXJJRWlmOFVHZ3hyWWhLZE03VlNlM0M4ejFDYjM1b1c0YWhMMVcrRXlH | ||||||
| LWdyZWFzZSBHPWFYZC1lCjNiejRKNTB1cUlzc1FtanlLQ1AwNmhUTkNuZHptLzBK | bwotPiBYMjU1MTkgUkRPY2JrSGZYeGNVWldVbTAzbkdtbHdUS1hoZXg2R2JEOGtC | ||||||
| My9FZi9uVUd0ZlR1d04zS3BjVFJHZDR1cmNmNWx0YjcKQmdLbk16UW9DRE12UnVy | ckZSOWV3TQpGejNQOUlxb05oWE9hRWdjbzI2a0NKVkpHMG1PMWlMWVZpYkVQNlpx | ||||||
| Y2twSS8KLS0tIDhENUJrVVQ2RWR0MTlhbksxODZYUWpnZFJJTTFWcnpoenEzVVpJ | c2xRCi0+ICwlLDsrbWYtZ3JlYXNlIE8mcz1jaywgeiJbOE9FeyAjXFl4Ugo1c2VM | ||||||
| SDlJTkUKjRfkdYqpB50PeibFrP5Xl930/HjYfKNpFGS7n2i8dwtVC/hFem8GshQJ | THdsOFlhODVMV3JsYzY3QU5Hb1BJTHBWNFEvalRHN3lXQlBBZFVvQXRIdXpXYVpU | ||||||
| NwgE1/GIPq5gKVRKaVYLaQIKCrRZl9+SDTPQB4HcKKxOD/gW0cshXyjIqiY30keZ | b0NLRG40WWhMQ2hDCnZyS1d6SGxGekIzWUs2Uk5XSFRscTIrTTEwNzJKMExGcG5m | ||||||
| ThF1h3sZbOkyGwNg/RGUFihEy+dZ7o/rpDKMAVkPzSFEN0fnS5N9GpJkuTIH074w | UWR0MWtBNnk4bDBYYStVQzFwZDlWRzRDNXJVZm0KajVrCi0tLSBkQ044Z3A5R0dt | ||||||
| dA== | S0htaUZaSzdPOTNCcXZrSWFVVHlTZk0zejBuT21yQzFBCo6rc9fznstf3eXBRUA8 | ||||||
|  | 73MZAYqSnJ5wVMrYrwGfT9lXvKbHCOvkgjUI6Ieo0nuw+aZpXoV3t9HfZv62UEll | ||||||
|  | ZZVu+ieRCZqOOqZKKZ3TCP24vdXun8Tu+3YK8fyn88QSRH/0ZMnqI9FXbtsUhsF8 | ||||||
|  | 2o7m7Fn48B0nVKy16HZyBsksknAuZCkfS/JOkgI= | ||||||
| -----END AGE ENCRYPTED FILE----- | -----END AGE ENCRYPTED FILE----- | ||||||
|   | |||||||
							
								
								
									
										12
									
								
								secrets/whale2/enshrouded.env.age
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								secrets/whale2/enshrouded.env.age
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | -----BEGIN AGE ENCRYPTED FILE----- | ||||||
|  | YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IC9FSlh2ZyBQc3dL | ||||||
|  | bkttTXJPWnZzYVJ6OUc2cjJvZWJLWHk2QXYvRU9TL3RBTmFmQ1dNClRtaUwvcDJa | ||||||
|  | c3h6eXpPR3dKSVZDVHJzNjR4b0Y5K3Zadk5vTkZiZS9RYkEKLT4gWDI1NTE5IE9R | ||||||
|  | Y0g2bEJsNmdLaVJteDJaakFMZEdxRU55N2pNbzhkakxuRVFmdVN0ajQKZXZrRHdu | ||||||
|  | WFFwMUFkUmJQbm9ONlFRWGdMWmtsWHlOaWVjMGtMdVM1YmdoUQotPiAwIm5PWS1n | ||||||
|  | cmVhc2UgUUosbyl4CkFIWDA4L3YwOFBYVUFMZnB6U3VkNFJQVFlEMThVeTV4bHlu | ||||||
|  | QmF2TFBobmtJS1hERUtSZld2UEZyb29nNEdGdWEKenliMmhQL1VrY2dFS3VzSEZB | ||||||
|  | dm1jT2xOQkxnbCtBV21WT3ZMVjl0WEpPWQotLS0gckNCZEp3VU56eTFFR1ZzbTc3 | ||||||
|  | WTRIcVZGY0Z1YlNUS3l0cWJ1TW5YUjF6SQoqTDq/up9Q3tQnNJdsnfiwYqA5LW6G | ||||||
|  | nKJXGbpnt3dpXxv/1+KRgF6pVKVQtyNFncQW7SC6K4uFw7iv6A== | ||||||
|  | -----END AGE ENCRYPTED FILE----- | ||||||
		Reference in New Issue
	
	Block a user