Compare commits
40
Commits
348a1d7301
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a00773c97a | ||
|
|
6bf0bcc0ef | ||
|
|
7619bf6258 | ||
|
|
029b71d0d4 | ||
|
|
d779d275f2 | ||
|
|
0196f1fd07 | ||
|
|
6a13d843d7 | ||
|
|
8673d6193b | ||
|
|
bbdfe1e1de | ||
|
|
71486e9ab3 | ||
|
|
8a8664287f | ||
|
|
4965d42e59 | ||
|
|
03e174367d | ||
|
|
21cb84ac7a | ||
|
|
1c52f8a6b9 | ||
|
|
d9334a237d | ||
|
|
93a847c658 | ||
|
|
b9051d017e | ||
|
|
b9dcd227e8 | ||
|
|
2d816d50e0 | ||
|
|
5f951c6c12 | ||
|
|
42efe476db | ||
|
|
07e85d35ab | ||
|
|
b4ab1bde50 | ||
|
|
4e7ca2910a | ||
|
|
64a253e9e4 | ||
|
|
e4008a0beb | ||
|
|
363098c0a1 | ||
|
|
a07068a4fb | ||
|
|
ec53199532 | ||
|
|
389798c4f0 | ||
|
|
475fe50d19 | ||
|
|
0d1d846884 | ||
|
|
1d9921f1ae | ||
|
|
7388715d30 | ||
|
|
b3304c0ef5 | ||
|
|
e955ea82f3 | ||
|
|
067c00330b | ||
|
|
60e2450c66 | ||
|
|
3185a5a375 |
@@ -0,0 +1,51 @@
|
||||
name: Update zims pin
|
||||
|
||||
"on":
|
||||
schedule:
|
||||
- cron: "0 2 1 * *" # 0200 on the first of every month
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
update-flake-lock:
|
||||
runs-on: nix-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Update flake.lock
|
||||
run: nix run .#zim-updater -- --output pkgs/zim/blobs.json
|
||||
|
||||
- name: Create PR if changed
|
||||
env:
|
||||
GITEA_TOKEN: ${{ secrets.KLAATU_TOKEN }}
|
||||
GITEA_URL: https://src.thehellings.com
|
||||
REPO: greg/nixos
|
||||
run: |
|
||||
if git diff --quiet pkgs/zim/blobs.json; then
|
||||
echo "blobs.json unchanged, nothing to do"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
BRANCH="auto/update-zims-$(date +%Y%m%d)"
|
||||
git config user.email "klaatu@thehellings.com"
|
||||
git config user.name "klaatu"
|
||||
git checkout -b "$BRANCH"
|
||||
git add pkgs/zim/blobs.json
|
||||
git commit -m "chore: update zim blobs.json $(date +%Y-%m-%d)"
|
||||
|
||||
# Push branch using token auth
|
||||
git remote set-url origin "https://klaatu:${GITEA_TOKEN}@${GITEA_URL#https://}/${REPO}.git"
|
||||
git push origin "$BRANCH"
|
||||
|
||||
# Create PR via Gitea API
|
||||
curl -s -X POST \
|
||||
-H "Authorization: token ${GITEA_TOKEN}" \
|
||||
-H "Content-Type: application/json" \
|
||||
"${GITEA_URL}/api/v1/repos/${REPO}/pulls" \
|
||||
-d "{
|
||||
\"title\": \"chore: update zims $(date +%Y-%m-%d)\",
|
||||
\"head\": \"$BRANCH\",
|
||||
\"base\": \"main\",
|
||||
\"body\": \"Automated monthly zims update.\\n\\nGenerated by Gitea Actions.\",
|
||||
\"assignees\": [\"greg\"]
|
||||
}"
|
||||
@@ -1,12 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIByDCCAW+gAwIBAgIRANS+dPEH5Vqug7OWhCMmcx4wCgYIKoZIzj0EAwIwLjER
|
||||
MA8GA1UEChMISGVsbGluZ3MxGTAXBgNVBAMTEEhlbGxpbmdzIFJvb3QgQ0EwHhcN
|
||||
MjQwMjIwMjEyNzIxWhcNMzQwMjE3MjEyNzIxWjA2MREwDwYDVQQKEwhIZWxsaW5n
|
||||
czEhMB8GA1UEAxMYSGVsbGluZ3MgSW50ZXJtZWRpYXRlIENBMFkwEwYHKoZIzj0C
|
||||
AQYIKoZIzj0DAQcDQgAErZUhPfx5MpNbNVyqHDrIgUGnb6Hitl8hXlpH+kgjBzCi
|
||||
7I/+TQnl9Tc0VVNOFOYLOfBi7hV3/QudUtLGk0FKeaNmMGQwDgYDVR0PAQH/BAQD
|
||||
AgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFMZR8LDd+hNy+TmtEHvt
|
||||
zRzXboh2MB8GA1UdIwQYMBaAFAlH11TwIFGB/K75qZ3e0S+fN3JUMAoGCCqGSM49
|
||||
BAMCA0cAMEQCIBxHK6r8pMX5hrTwYKRfMmRIt44m0KtNejA2T5t09hs+AiBfvmHb
|
||||
LfoE4qoC6NgpvXorAbx+O7xkem/9svF0Ob+RsA==
|
||||
-----END CERTIFICATE-----
|
||||
@@ -1,11 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIBoTCCAUagAwIBAgIRAL/1mvE8+73nRFGsvzaaVSAwCgYIKoZIzj0EAwIwLjER
|
||||
MA8GA1UEChMISGVsbGluZ3MxGTAXBgNVBAMTEEhlbGxpbmdzIFJvb3QgQ0EwHhcN
|
||||
MjQwMjIwMjEyNzIwWhcNMzQwMjE3MjEyNzIwWjAuMREwDwYDVQQKEwhIZWxsaW5n
|
||||
czEZMBcGA1UEAxMQSGVsbGluZ3MgUm9vdCBDQTBZMBMGByqGSM49AgEGCCqGSM49
|
||||
AwEHA0IABEgNBjlT/7gmzNp9vKJvGPJn9/IizuMGVpucdrN9+J1u1ABkLNRzj5p2
|
||||
g7s3e/BG+EJnnTf/2tuq3p/wPqmQkdujRTBDMA4GA1UdDwEB/wQEAwIBBjASBgNV
|
||||
HRMBAf8ECDAGAQH/AgEBMB0GA1UdDgQWBBQJR9dU8CBRgfyu+amd3tEvnzdyVDAK
|
||||
BggqhkjOPQQDAgNJADBGAiEA/uBclcFCOpkEgAeBAVurktYB82sMdIyyDGHcjlwi
|
||||
pvkCIQC2kuZ/nXRjibeIebQIVTBskQ1LxlLxnx7zNSjtr3kFfQ==
|
||||
-----END CERTIFICATE-----
|
||||
@@ -1,54 +0,0 @@
|
||||
services:
|
||||
attic:
|
||||
container_name: attic
|
||||
image: ghcr.io/zhaofengli/attic:latest
|
||||
command: ["-f", "/attic/server.toml"]
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 8080:8080
|
||||
networks:
|
||||
attic:
|
||||
pgattic:
|
||||
volumes:
|
||||
- /mnt/all/configs/attic/server.toml:/attic/server.toml
|
||||
- /mnt/all/containers/attic/data:/attic/storage
|
||||
env_file:
|
||||
- stack.env
|
||||
depends_on:
|
||||
pgattic:
|
||||
condition: service_healthy
|
||||
healthcheck:
|
||||
test:
|
||||
[
|
||||
"CMD-SHELL",
|
||||
"wget --no-verbose --tries=1 --spider http://attic:8080 || exit 1",
|
||||
]
|
||||
interval: 15s
|
||||
timeout: 10s
|
||||
retries: 10
|
||||
start_period: 15s
|
||||
deploy:
|
||||
resources:
|
||||
reservations:
|
||||
cpus: 1.0
|
||||
|
||||
pgattic:
|
||||
container_name: pgattic
|
||||
image: postgres:17.6-alpine
|
||||
restart: unless-stopped
|
||||
ports: []
|
||||
networks:
|
||||
pgattic:
|
||||
volumes:
|
||||
- /mnt/all/containers/attic/postgres:/var/lib/postgresql/data
|
||||
env_file:
|
||||
- stack.env
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
networks:
|
||||
attic:
|
||||
pgattic:
|
||||
@@ -1,9 +0,0 @@
|
||||
services:
|
||||
pinchflat:
|
||||
image: ghcr.io/kieraneglin/pinchflat:latest
|
||||
ports:
|
||||
- "8945:8945"
|
||||
volumes:
|
||||
- "/mnt/all/configs/pinchflat:/config"
|
||||
- "/mnt/all/video/yt:/downloads"
|
||||
restart: unless-stopped
|
||||
@@ -1,19 +0,0 @@
|
||||
# Demo of rest-server with prometheus and grafana
|
||||
version: "2"
|
||||
|
||||
services:
|
||||
restserver:
|
||||
image: "restic/rest-server:0.14.0"
|
||||
volumes:
|
||||
- /mnt/all/backups:/data
|
||||
- /mnt/all/configs/certs:/certs
|
||||
environment:
|
||||
OPTIONS: >-
|
||||
--tls
|
||||
--tls-cert /certs/nas1.shire-zebra.ts.net.crt
|
||||
--tls-key /certs/nas1.shire-zebra.ts.net.key
|
||||
--path /data
|
||||
--prometheus
|
||||
--debug
|
||||
ports:
|
||||
- "30248:8000"
|
||||
Generated
+60
-203
@@ -31,11 +31,11 @@
|
||||
"treefmt-nix": "treefmt-nix"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1783231291,
|
||||
"narHash": "sha256-iaoW3Enrb51mCT4AIixKXgkb1LdI/ikpCV9sV+zmkYU=",
|
||||
"lastModified": 1783833875,
|
||||
"narHash": "sha256-G+hRtNJ/Nnr6VFMQp2UZdx/ckJDR/RJoK0Fy/yx1/YY=",
|
||||
"owner": "nix-community",
|
||||
"repo": "buildbot-nix",
|
||||
"rev": "d8a926f66587ed37df1a422205d7aeb1692700f8",
|
||||
"rev": "147af587241e2af85399402da60a4f44fdb1e5d7",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -53,11 +53,11 @@
|
||||
"stable": "stable"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1783265280,
|
||||
"narHash": "sha256-n+TVzNkFtsW+ghl7JeFJYwIbXaZ2tn/WgjVMXwlzybI=",
|
||||
"lastModified": 1783909498,
|
||||
"narHash": "sha256-T9OfLPLuh1Bf1xojlpWXwooJ6IXapxvb8GM0p3YNy8g=",
|
||||
"owner": "zhaofengli",
|
||||
"repo": "colmena",
|
||||
"rev": "e4250e61da7e007e19e8e17d8675b88ad27d6c06",
|
||||
"rev": "76ba0daa542880b730faec81f4e87efcaa63bc57",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -95,11 +95,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1783395956,
|
||||
"narHash": "sha256-AAbexQvDoK+6GFJdhY6kqjA+6ECKRkidgWxkn4gMwAA=",
|
||||
"lastModified": 1784362797,
|
||||
"narHash": "sha256-EP9b9b+OXDxHBPefFwMYCIaLq0fn3UkmrbfzbLUT7kQ=",
|
||||
"owner": "lnl7",
|
||||
"repo": "nix-darwin",
|
||||
"rev": "d5bd9cd77aea4c0a8f49e7fd85545671a208ed15",
|
||||
"rev": "b4cccbd4bc299c1f71ae185b79c3cf99aa82805c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -176,27 +176,6 @@
|
||||
}
|
||||
},
|
||||
"flake-parts_2": {
|
||||
"inputs": {
|
||||
"nixpkgs-lib": [
|
||||
"hermes",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1772408722,
|
||||
"narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-parts_3": {
|
||||
"inputs": {
|
||||
"nixpkgs-lib": [
|
||||
"nixvimunstable",
|
||||
@@ -217,7 +196,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-parts_4": {
|
||||
"flake-parts_3": {
|
||||
"inputs": {
|
||||
"nixpkgs-lib": [
|
||||
"nurpkgs",
|
||||
@@ -256,31 +235,6 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"hermes": {
|
||||
"inputs": {
|
||||
"flake-parts": "flake-parts_2",
|
||||
"nixpkgs": [
|
||||
"nixunstable"
|
||||
],
|
||||
"npm-lockfile-fix": "npm-lockfile-fix",
|
||||
"pyproject-build-systems": "pyproject-build-systems",
|
||||
"pyproject-nix": "pyproject-nix",
|
||||
"uv2nix": "uv2nix"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1784663791,
|
||||
"narHash": "sha256-bPip7Rk/5n5idLvedBXWjzuRw6cc30XGxCRJewlwwUE=",
|
||||
"owner": "nousresearch",
|
||||
"repo": "hermes-agent",
|
||||
"rev": "e2e8823f1d2de2aa95c8147d0abd105539d5daff",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nousresearch",
|
||||
"repo": "hermes-agent",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"hmunstable": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
@@ -288,11 +242,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1783436070,
|
||||
"narHash": "sha256-F80z1JoiJgZyTT5D+3siLOVzqmCEphLR7t0Ym/I2CLI=",
|
||||
"lastModified": 1784407317,
|
||||
"narHash": "sha256-iZrxHToDJWnvt+5LGAtvuQMTy1NZYlNEKbKaVtBJNcc=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "f09af49406ffad37acb6538d3207189a1a1e0b7e",
|
||||
"rev": "39411a8e12a5526d992e65bc7e3dc9a4414d6713",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -330,11 +284,11 @@
|
||||
"systems": "systems_3"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1783397047,
|
||||
"narHash": "sha256-aXPvDeF7F0sKg2MWglAtSz6h1R6a9+V7Y2k24At2Q9o=",
|
||||
"lastModified": 1784344393,
|
||||
"narHash": "sha256-yAo2ZzSIdeBZg7cOKUpQxwflL+DRYN+1DMObZk2lP2Q=",
|
||||
"owner": "Infinidoge",
|
||||
"repo": "nix-minecraft",
|
||||
"rev": "ed748d3593082a7e02d2c49b7643ecac3a7efde4",
|
||||
"rev": "7297d14c52ec8ef39c6aeff2c1818541fd030473",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -349,11 +303,11 @@
|
||||
"treefmt-nix": "treefmt-nix_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1783166611,
|
||||
"narHash": "sha256-8xyWfpItjSdMiR2bRdUf+Nj1T1Vdctgn4K7jVUyAaOk=",
|
||||
"lastModified": 1784016977,
|
||||
"narHash": "sha256-TydDba3YD2u15uS0L+PDs7lMqPopnzWggljTKDqOCSw=",
|
||||
"owner": "Mic92",
|
||||
"repo": "niks3",
|
||||
"rev": "b45810677be67de714cbb4ff53f036bdb2e5f9a0",
|
||||
"rev": "b306808bf381e7e66e33de1e9446a1be0935f4e3",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -388,11 +342,11 @@
|
||||
"nixpkgs": "nixpkgs_4"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1783370751,
|
||||
"narHash": "sha256-E+3MIMvKuo9k+K+qLQ9YXzsBzkgHuyVLnsEbN2DFfuc=",
|
||||
"lastModified": 1784310968,
|
||||
"narHash": "sha256-rkSPTePrKqs4dg+i7ZFCq93+HrClac6oSwXX927SVjA=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixos-hardware",
|
||||
"rev": "662bd6e312d2c8b212e32cb377abaee190749320",
|
||||
"rev": "779c32a00155994c86cde8213a8dd4df139d4355",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -403,11 +357,11 @@
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1782723713,
|
||||
"narHash": "sha256-oPXCU/SSUokcGaJREHibG1CBX3+s/W7orDWQOZDsEeQ=",
|
||||
"lastModified": 1783224372,
|
||||
"narHash": "sha256-8i/87eeoqiGE4yOTjwSA3Eh/ziJRQEmd/unYU+K27sk=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "b5aa0fbd538984f6e3d201be0005b4463d8b09f8",
|
||||
"rev": "d407951447dcd00442e97087bf374aad70c04cea",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -434,11 +388,11 @@
|
||||
},
|
||||
"nixpkgs-lib_2": {
|
||||
"locked": {
|
||||
"lastModified": 1783217952,
|
||||
"narHash": "sha256-lItVCcSNUiL9NlB0+VoZwhtZk+0jAnfjJjch1g7U0bM=",
|
||||
"lastModified": 1783821755,
|
||||
"narHash": "sha256-eMPX9S6MKPyUnaOgeRfrG7OKUiAlc1AlcRinMbSB0WA=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nixpkgs.lib",
|
||||
"rev": "830143f1e74a5ce8aa6cdad9c41ae84b73e8b3be",
|
||||
"rev": "228ab8523d81526e57a6ca342e1a919fb6d246a8",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -465,11 +419,11 @@
|
||||
},
|
||||
"nixpkgs_3": {
|
||||
"locked": {
|
||||
"lastModified": 1782774429,
|
||||
"narHash": "sha256-1tRFhlVVSBP2UAyJ4fWV3wRxofOZQCIWmbXJS/kQw7U=",
|
||||
"lastModified": 1783978241,
|
||||
"narHash": "sha256-7kK0Y/fIV2NTKArkd/eZGaFg+dEmgP8KDRsGK2vB5M4=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "c3db893991ef9cf1902c661c2d61249bcfb051dc",
|
||||
"rev": "a8b81d3cc8d35af7bc98694696bea61ad4f8fca7",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -494,11 +448,11 @@
|
||||
},
|
||||
"nixpkgs_5": {
|
||||
"locked": {
|
||||
"lastModified": 1783279667,
|
||||
"narHash": "sha256-/NAkDSsve+GNM0Bt6tleJdCGfsTlK89nPjkVOzZMo0s=",
|
||||
"lastModified": 1783915482,
|
||||
"narHash": "sha256-FmieJB8/OUvNxbkboi7+IGfIuSXY3nF/hZQm8kD0r50=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "f205b5574fd0cb7da5b702a2da51507b7f4fdd1b",
|
||||
"rev": "6cdc7fc76e8bf7fde9fa43a849fcaaa70e230dee",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -510,11 +464,11 @@
|
||||
},
|
||||
"nixpkgs_6": {
|
||||
"locked": {
|
||||
"lastModified": 1783224372,
|
||||
"narHash": "sha256-8i/87eeoqiGE4yOTjwSA3Eh/ziJRQEmd/unYU+K27sk=",
|
||||
"lastModified": 1784356753,
|
||||
"narHash": "sha256-12KrbMiWLcf8m7pCvAtZh1ZrgF85ZXDXvfR/fWTKy84=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "d407951447dcd00442e97087bf374aad70c04cea",
|
||||
"rev": "61b7c44c4073f0b827768aff0049561b5110ea5a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -542,32 +496,32 @@
|
||||
},
|
||||
"nixunstable": {
|
||||
"locked": {
|
||||
"lastModified": 1783224372,
|
||||
"narHash": "sha256-8i/87eeoqiGE4yOTjwSA3Eh/ziJRQEmd/unYU+K27sk=",
|
||||
"owner": "nixos",
|
||||
"lastModified": 1784700541,
|
||||
"narHash": "sha256-LcCdjhqwjFVrFTNW6tHm3KNYRrD1TA6bYRea30yIIjw=",
|
||||
"owner": "geri1701",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "d407951447dcd00442e97087bf374aad70c04cea",
|
||||
"rev": "3c598184d1f70c5d0beeea8b95d01ab0179e4ef7",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-unstable",
|
||||
"owner": "geri1701",
|
||||
"ref": "lego-v5-acme-spike",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixvimunstable": {
|
||||
"inputs": {
|
||||
"flake-parts": "flake-parts_3",
|
||||
"flake-parts": "flake-parts_2",
|
||||
"nixpkgs": "nixpkgs_5",
|
||||
"systems": "systems_4"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1783349931,
|
||||
"narHash": "sha256-aYE76ATiGBg7/cQ2dHASRq97WvNum4OOIPgZ8xIK0QI=",
|
||||
"lastModified": 1784057377,
|
||||
"narHash": "sha256-yycNej5//EsRbV10moBoh+/63vXEwZD1ZFEiRm6C9rQ=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nixvim",
|
||||
"rev": "4fd45857deecb90d2732c87e0315daa48505515e",
|
||||
"rev": "07180a087e4a00720dc0731cbcd8dec796974381",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -577,38 +531,17 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"npm-lockfile-fix": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"hermes",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1775903712,
|
||||
"narHash": "sha256-2GV79U6iVH4gKAPWYrxUReB0S41ty/Y3dBLquU8AlaA=",
|
||||
"owner": "jeslie0",
|
||||
"repo": "npm-lockfile-fix",
|
||||
"rev": "c6093acb0c0548e0f9b8b3d82918823721930fe8",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "jeslie0",
|
||||
"repo": "npm-lockfile-fix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nurpkgs": {
|
||||
"inputs": {
|
||||
"flake-parts": "flake-parts_4",
|
||||
"flake-parts": "flake-parts_3",
|
||||
"nixpkgs": "nixpkgs_6"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1783451984,
|
||||
"narHash": "sha256-pOIx6pF9DJCeGuDostAegvtmWhbX0ze0bLCzXYHkt94=",
|
||||
"lastModified": 1784417922,
|
||||
"narHash": "sha256-19XZ56wJXArMKxjY25pKXkNp/FrYHGoo+HuQtW6teSM=",
|
||||
"owner": "nix-community",
|
||||
"repo": "NUR",
|
||||
"rev": "9d0a05bf73440e7e870c011a6c16e7e8636d98fd",
|
||||
"rev": "2c806d314605495dd7fd75b5950003a062e2b47a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -617,56 +550,6 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"pyproject-build-systems": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"hermes",
|
||||
"nixpkgs"
|
||||
],
|
||||
"pyproject-nix": [
|
||||
"hermes",
|
||||
"pyproject-nix"
|
||||
],
|
||||
"uv2nix": [
|
||||
"hermes",
|
||||
"uv2nix"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1772555609,
|
||||
"narHash": "sha256-3BA3HnUvJSbHJAlJj6XSy0Jmu7RyP2gyB/0fL7XuEDo=",
|
||||
"owner": "pyproject-nix",
|
||||
"repo": "build-system-pkgs",
|
||||
"rev": "c37f66a953535c394244888598947679af231863",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "pyproject-nix",
|
||||
"repo": "build-system-pkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"pyproject-nix": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"hermes",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1772865871,
|
||||
"narHash": "sha256-/ZTSg97aouL0SlPHaokA4r3iuH9QzHVuWPACD2CUCFY=",
|
||||
"owner": "pyproject-nix",
|
||||
"repo": "pyproject.nix",
|
||||
"rev": "e537db02e72d553cea470976b9733581bcf5b3ed",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "pyproject-nix",
|
||||
"repo": "pyproject.nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"agenix": "agenix",
|
||||
@@ -674,7 +557,6 @@
|
||||
"colmena": "colmena",
|
||||
"darwin": "darwin_2",
|
||||
"flake-parts": "flake-parts",
|
||||
"hermes": "hermes",
|
||||
"hmunstable": "hmunstable",
|
||||
"minecraft": "minecraft",
|
||||
"niks3": "niks3",
|
||||
@@ -689,11 +571,11 @@
|
||||
},
|
||||
"stable": {
|
||||
"locked": {
|
||||
"lastModified": 1783021296,
|
||||
"narHash": "sha256-WYOmcI0zSkkU4VpR7xda8o0AWNC9xuqkEM7n4tKjJY8=",
|
||||
"lastModified": 1783625654,
|
||||
"narHash": "sha256-pI1244/PJfTyKhlAr2QYQC55vR6UQdnGA0rJUgtO2IQ=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "d3474199ff806484bfccd1fdef7afc27fb8d74b5",
|
||||
"rev": "a0230bd8d5cbd13893b2263918d396a2c7dd0407",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -806,41 +688,16 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"uv2nix": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"hermes",
|
||||
"nixpkgs"
|
||||
],
|
||||
"pyproject-nix": [
|
||||
"hermes",
|
||||
"pyproject-nix"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1773039484,
|
||||
"narHash": "sha256-+boo33KYkJDw9KItpeEXXv8+65f7hHv/earxpcyzQ0I=",
|
||||
"owner": "pyproject-nix",
|
||||
"repo": "uv2nix",
|
||||
"rev": "b68be7cfeacbed9a3fa38a2b5adc0cfb81d9bb1f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "pyproject-nix",
|
||||
"repo": "uv2nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"vsext": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs_7"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1783396462,
|
||||
"narHash": "sha256-0Q3WQGlhzTb6QAXnmleX55Pqn+La4lcXupW1ElN/gZI=",
|
||||
"lastModified": 1784343266,
|
||||
"narHash": "sha256-EGkegdTz2n6ESyih8s3dUuPyJQWlYfPp7U41J05g8PY=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nix-vscode-extensions",
|
||||
"rev": "98798c612761584740eed894f3ca1e1a1a856ac0",
|
||||
"rev": "472a3e862c76c64ac3ad75a24d332cb5cdd5f1bb",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -857,11 +714,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1783336371,
|
||||
"narHash": "sha256-ZisTtweyb7JUwPP54HAXE9TypT8m89dIxDI36Ak0hAs=",
|
||||
"lastModified": 1784058842,
|
||||
"narHash": "sha256-3u3tvbCIAid3Mv7RrJx13jusIEQC/HeKYhO/SUSxR3A=",
|
||||
"owner": "nix-community",
|
||||
"repo": "NixOS-WSL",
|
||||
"rev": "a9620cfa43f0c1c30a46c31ae3c6e58cdb124a14",
|
||||
"rev": "24c8dc8e0f2170e1a377be24dfadc7d9d21dc1ad",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
||||
@@ -19,10 +19,6 @@
|
||||
inputs.nixpkgs.follows = "nixunstable";
|
||||
};
|
||||
flake-parts.url = "github:hercules-ci/flake-parts";
|
||||
hermes = {
|
||||
url = "github:nousresearch/hermes-agent";
|
||||
inputs.nixpkgs.follows = "nixunstable";
|
||||
};
|
||||
hmunstable = {
|
||||
url = "github:nix-community/home-manager/master";
|
||||
inputs.nixpkgs.follows = "nixunstable";
|
||||
@@ -32,7 +28,8 @@
|
||||
nix-hardware.url = "github:nixos/nixos-hardware";
|
||||
nixpkgs-lib.url = "github:nix-community/nixpkgs.lib";
|
||||
nixvimunstable.url = "github:nix-community/nixvim/main";
|
||||
nixunstable.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||
#nixunstable.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||
nixunstable.url = "github:geri1701/nixpkgs/lego-v5-acme-spike";
|
||||
nurpkgs.url = "github:nix-community/NUR";
|
||||
vsext.url = "github:nix-community/nix-vscode-extensions";
|
||||
wsl = {
|
||||
@@ -104,7 +101,7 @@
|
||||
{
|
||||
deployment = {
|
||||
inherit (v) tags;
|
||||
targetHost = v.ts;
|
||||
targetHost = if (v ? "connectAddr") then v.connectAddr else v.nebulaIp;
|
||||
targetUser = "greg";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -13,9 +13,45 @@ def --env unlock [] {
|
||||
}
|
||||
|
||||
def nebulaIps [] {
|
||||
open ../../network.json | get hosts | items { |h, e| $e.nebulaIp? } | filter { |e| $e != null } | sort
|
||||
open /etc/nixos/network.json | get hosts | items { |h, e| $e.nebulaIp? } | where $it != null | sort
|
||||
}
|
||||
|
||||
def localIps [] {
|
||||
open /etc/nixos/network.json | get hosts | items { |h, e| $e.ip? } | where $it != null | sort
|
||||
}
|
||||
|
||||
def genNebulaCert [ --ips: string, --name: string ] {
|
||||
let public = $'~/SynologyDrive/nebula/($name).key.pub' | path expand
|
||||
let private = $'~/SynologyDrive/nebula/($name).key' | path expand
|
||||
let cert = $'/etc/nixos/secrets/nebula/($name).crt'
|
||||
let ca_cert = '~/SynologyDrive/nebula/ca.crt' | path expand
|
||||
let ca_key = '~/SynologyDrive/nebula/ca.key' | path expand
|
||||
|
||||
# Generate public key if there isn't one already
|
||||
if ( not ($public | path exists) ) {
|
||||
nebula-cert keygen -out-key $private -out-pub $public
|
||||
}
|
||||
# Clear old cert if there is one
|
||||
if ( $cert | path exists) {
|
||||
rm $cert
|
||||
}
|
||||
|
||||
# Create and sign certs
|
||||
(nebula-cert sign
|
||||
-ca-crt $ca_cert
|
||||
-ca-key $ca_key
|
||||
-name $name
|
||||
-networks $ips
|
||||
-out-crt $cert
|
||||
-in-pub $public
|
||||
)
|
||||
|
||||
# Agenix update
|
||||
cd /etc/nixos/secrets
|
||||
cat $private | agenix -e $'nebula/($name).key.age'
|
||||
}
|
||||
|
||||
|
||||
def rebuild [ $target: string = "switch" ] {
|
||||
if (uname | get operating-system) == "Darwin" {
|
||||
sudo darwin-rebuild $target
|
||||
@@ -39,7 +75,8 @@ def deploy [ $host: string, $build: string = "" ] {
|
||||
if $buildhost == "linode" or $buildhost == "genesis" {
|
||||
$buildhost = "isaiah"
|
||||
}
|
||||
nixos-rebuild switch --sudo --use-substitutes --target-host $host --build-host $buildhost
|
||||
colmena apply --on $host
|
||||
#nixos-rebuild switch --sudo --use-substitutes --target-host $host --build-host $buildhost
|
||||
}
|
||||
|
||||
def ff [ $file: string ] {
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
home.packages =
|
||||
with pkgs;
|
||||
[
|
||||
attic-client
|
||||
dig
|
||||
jqp
|
||||
kubernetes-helm
|
||||
|
||||
@@ -23,9 +23,12 @@
|
||||
mattermost-desktop
|
||||
minio-client
|
||||
mumble
|
||||
nebula
|
||||
nix-index
|
||||
adoptopenjdk-icedtea-web
|
||||
pre-commit
|
||||
prismlauncher
|
||||
rclone
|
||||
restic
|
||||
restic-browser
|
||||
tea
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
{...}: {}
|
||||
@@ -1,4 +0,0 @@
|
||||
{ ... }:
|
||||
|
||||
{
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
{ config, modulesPath, pkgs, lib, ... }:
|
||||
{
|
||||
imports = [ (modulesPath + "/virtualisation/proxmox-lxc.nix") ];
|
||||
nix.settings = { sandbox = false; };
|
||||
proxmoxLXC = {
|
||||
manageNetwork = false;
|
||||
privileged = true;
|
||||
};
|
||||
services.fstrim.enable = false; # Let Proxmox host handle fstrim
|
||||
services.openssh = {
|
||||
enable = true;
|
||||
openFirewall = true;
|
||||
settings = {
|
||||
PermitRootLogin = "yes";
|
||||
PasswordAuthentication = true;
|
||||
PermitEmptyPasswords = "yes";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -9,13 +9,9 @@
|
||||
{
|
||||
imports = [
|
||||
./hardware-configuration.nix
|
||||
top.nix-hardware.nixosModules.framework-11th-gen-intel
|
||||
top.nix-hardware.nixosModules.framework-intel-core-ultra-series1
|
||||
];
|
||||
|
||||
age.secrets = {
|
||||
compose-attic.file = ../../../secrets/compose/attic.env.age;
|
||||
};
|
||||
|
||||
boot = {
|
||||
loader = {
|
||||
systemd-boot = {
|
||||
|
||||
@@ -77,7 +77,7 @@ in
|
||||
};
|
||||
};
|
||||
firewall = {
|
||||
enable = false;
|
||||
enable = true;
|
||||
allowedUDPPorts = [
|
||||
dhcpPort
|
||||
dnsPort
|
||||
@@ -88,7 +88,7 @@ in
|
||||
80
|
||||
];
|
||||
};
|
||||
nftables.enable = false;
|
||||
nftables.enable = true;
|
||||
};
|
||||
|
||||
environment.etc."hosts.d/local".text = extraHosts;
|
||||
@@ -130,10 +130,10 @@ in
|
||||
lib.mapAttrs
|
||||
(domain: net: {
|
||||
master = true;
|
||||
file = makeZoneFile (lib'.hostsByNet net metadata.hosts) domain;
|
||||
file = makeZoneFile (lib'.hostsByNet net (metadata.hosts // metadata.external)) domain;
|
||||
})
|
||||
{
|
||||
#"shire-zebra.ts.net" = "tailscale";
|
||||
"shire-zebra.ts.net" = "tailscale";
|
||||
"nebula.thehellings.com" = "nebula";
|
||||
nebula = "nebula";
|
||||
"thehellings.lan" = "lan";
|
||||
|
||||
@@ -1,126 +0,0 @@
|
||||
{
|
||||
modulesPath,
|
||||
top,
|
||||
...
|
||||
}:
|
||||
{
|
||||
imports = [
|
||||
(modulesPath + "/virtualisation/proxmox-lxc.nix")
|
||||
top.hermes.nixosModules.default
|
||||
];
|
||||
greg = {
|
||||
nebula = {
|
||||
enable = true;
|
||||
nebulaIp = "10.157.0.8";
|
||||
};
|
||||
};
|
||||
nix.settings = {
|
||||
sandbox = false;
|
||||
};
|
||||
proxmoxLXC = {
|
||||
manageHostName = true;
|
||||
manageNetwork = false;
|
||||
privileged = true;
|
||||
};
|
||||
services = {
|
||||
fstrim.enable = false;
|
||||
hermes-agent = {
|
||||
enable = true;
|
||||
settings = {
|
||||
agent = {
|
||||
reasoning_effort = "medium";
|
||||
reasoning_overrides = {
|
||||
claude-fable = "xhigh";
|
||||
claude-opus = "high";
|
||||
};
|
||||
tool_loop_guardrails = {
|
||||
hard_stop_enabled = true;
|
||||
warnings_enabled = true;
|
||||
};
|
||||
tool_use_enforcement = "auto";
|
||||
};
|
||||
code_execution = {
|
||||
mode = "strict";
|
||||
timeout = 300;
|
||||
};
|
||||
compression = {
|
||||
enabled = true;
|
||||
protect_first_n = 3;
|
||||
protect_last_n = 5;
|
||||
target_ratio = 0.25;
|
||||
threshold = 0.75;
|
||||
};
|
||||
context_file_max_chars = 25000;
|
||||
file_read_max_chars = 100000;
|
||||
goals = {
|
||||
max_turns = 20; # Number of times Hermes tells the model to keep working towards the goal
|
||||
};
|
||||
memory = {
|
||||
memory_enabled = true;
|
||||
user_profile_enabled = true;
|
||||
write_approval = true;
|
||||
};
|
||||
quick_commands = {
|
||||
disk = {
|
||||
type = "exec";
|
||||
command = "df -h";
|
||||
};
|
||||
free = {
|
||||
type = "exec";
|
||||
command = "free -h";
|
||||
};
|
||||
restart = {
|
||||
type = "alias";
|
||||
target = "/gateway restart";
|
||||
};
|
||||
};
|
||||
skills = {
|
||||
guard_agent_created = true;
|
||||
write_approval = true;
|
||||
};
|
||||
stt = {
|
||||
enabled = true;
|
||||
echo_transcripts = true;
|
||||
provider = "local";
|
||||
local.model = "medium";
|
||||
};
|
||||
terminal = {
|
||||
backend = "local";
|
||||
};
|
||||
tool_output = {
|
||||
max_bytes = 50000;
|
||||
max_lines = 2000;
|
||||
max_line_length = 2000;
|
||||
};
|
||||
worktree = true; # Enable multiple agents in the same repo
|
||||
};
|
||||
};
|
||||
openssh = {
|
||||
enable = true;
|
||||
openFirewall = true;
|
||||
settings = {
|
||||
PermitRootLogin = "yes";
|
||||
PasswordAuthentication = true;
|
||||
PermitEmptyPasswords = "yes";
|
||||
};
|
||||
};
|
||||
wyoming.faster-whisper.servers.medium = {
|
||||
enable = true;
|
||||
device = "cpu";
|
||||
initialPrompt = ''
|
||||
The user's name is 'Greg Hellings'. The street he lives on is 'Kardinal Court'
|
||||
in 'Midlothian'. Keep these in mind as they are often misspelled.
|
||||
'';
|
||||
language = "en";
|
||||
model = "medium";
|
||||
uri = "tcp://127.0.0.1:10300";
|
||||
sttLibrary = "faster-whisper";
|
||||
};
|
||||
};
|
||||
|
||||
systemd.suppressedSystemUnits = [
|
||||
"dev-mqueue.mount"
|
||||
"sys-kernel-debug.mount"
|
||||
"sys-fs-fuse-connections.mount"
|
||||
];
|
||||
}
|
||||
@@ -185,7 +185,7 @@ in
|
||||
s3 = {
|
||||
accessKeyFile = config.age.secrets.niks3-access-key-id.path;
|
||||
bucket = "niks3";
|
||||
endpoint = "nas1.shire-zebra.ts.net:9000";
|
||||
endpoint = "nas1.shire-zebra.ts.net:30188";
|
||||
secretKeyFile = config.age.secrets.niks3-secret-access-key.path;
|
||||
useSSL = false;
|
||||
};
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
{ ... }:
|
||||
|
||||
{
|
||||
# Bootloader.
|
||||
boot = {
|
||||
loader.grub = {
|
||||
enable = true;
|
||||
device = "/dev/sda";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
# Edit this configuration file to define what should be installed on
|
||||
# your system. Help is available in the configuration.nix(5) man page
|
||||
# and in the NixOS manual (accessible by running ‘nixos-help’).
|
||||
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
# Include the results of the hardware scan.
|
||||
./hardware-configuration.nix
|
||||
./boot.nix
|
||||
./filesystem.nix
|
||||
./location.nix
|
||||
./networking.nix
|
||||
./wiki.nix
|
||||
];
|
||||
|
||||
# Define a user account. Don't forget to set a password with ‘passwd’.
|
||||
users.users.greg = {
|
||||
isNormalUser = true;
|
||||
description = "Gregory Hellings";
|
||||
extraGroups = [
|
||||
"networkmanager"
|
||||
"wheel"
|
||||
];
|
||||
packages = with pkgs; [ ];
|
||||
};
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
{ ... }:
|
||||
|
||||
let
|
||||
in
|
||||
{
|
||||
fileSystems."serve" = {
|
||||
#device = "10.42.1.4:/volume1/icdm-mysql/";
|
||||
#fsType = "nfs";
|
||||
device = "/dev/sdb1";
|
||||
fsType = "auto";
|
||||
mountPoint = "/srv";
|
||||
};
|
||||
}
|
||||
@@ -1,53 +0,0 @@
|
||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||
# and may be overwritten by future invocations. Please make changes
|
||||
# to /etc/nixos/configuration.nix instead.
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
modulesPath,
|
||||
...
|
||||
}:
|
||||
|
||||
{
|
||||
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
|
||||
|
||||
boot.initrd.availableKernelModules = [
|
||||
"xhci_pci"
|
||||
"ehci_pci"
|
||||
"ahci"
|
||||
"usbhid"
|
||||
"usb_storage"
|
||||
"sd_mod"
|
||||
];
|
||||
boot.initrd.kernelModules = [ ];
|
||||
boot.kernelModules = [ "kvm-intel" ];
|
||||
boot.extraModulePackages = [ ];
|
||||
|
||||
fileSystems."/" = {
|
||||
device = "/dev/disk/by-uuid/dab0d455-e25e-4445-8fa4-5320047d7e7b";
|
||||
fsType = "btrfs";
|
||||
options = [ "subvol=@" ];
|
||||
};
|
||||
|
||||
fileSystems."/boot" = {
|
||||
device = "/dev/disk/by-uuid/5aedbb07-5761-423b-909d-2560405eae32";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
fileSystems."/var" = {
|
||||
device = "/dev/disk/by-uuid/57968536-c29d-417d-997e-85223d1d1f65";
|
||||
fsType = "btrfs";
|
||||
};
|
||||
|
||||
swapDevices = [ { device = "/dev/disk/by-uuid/09691dce-375a-43c6-8d40-4498d20a6d9a"; } ];
|
||||
|
||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
||||
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||
# still possible to use this option, but it's recommended to use it in conjunction
|
||||
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
|
||||
networking.useDHCP = lib.mkDefault true;
|
||||
# networking.interfaces.eno1.useDHCP = lib.mkDefault true;
|
||||
# networking.interfaces.wlp2s0.useDHCP = lib.mkDefault true;
|
||||
|
||||
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
{ ... }:
|
||||
|
||||
{
|
||||
# Set your time zone.
|
||||
time.timeZone = "America/Chicago";
|
||||
|
||||
# Select internationalisation properties.
|
||||
i18n.defaultLocale = "en_US.UTF-8";
|
||||
|
||||
# Configure keymap in X11
|
||||
services.xserver.xkb = {
|
||||
layout = "us";
|
||||
variant = "";
|
||||
};
|
||||
}
|
||||
@@ -1,63 +0,0 @@
|
||||
{ ... }:
|
||||
let
|
||||
dnsHosts = builtins.concatStringsSep "\n" [ "wiki.icdm.lan 10.42.101.1" ];
|
||||
in
|
||||
{
|
||||
# If we have to do proxying in Bayonnais, we can start to work on that here
|
||||
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
|
||||
networking = {
|
||||
hostName = "icdm-root";
|
||||
useDHCP = false;
|
||||
defaultGateway = "10.42.1.1";
|
||||
nameservers = [
|
||||
"100.100.100.100"
|
||||
"10.42.1.2"
|
||||
];
|
||||
enableIPv6 = false;
|
||||
|
||||
interfaces = {
|
||||
eno1.ipv4.addresses = [
|
||||
{
|
||||
address = "10.42.101.1";
|
||||
prefixLength = 16;
|
||||
}
|
||||
{
|
||||
address = "10.77.1.2";
|
||||
prefixLength = 16;
|
||||
}
|
||||
];
|
||||
};
|
||||
# Allow traffic through
|
||||
firewall = {
|
||||
enable = true;
|
||||
allowedTCPPorts = [ 53 ];
|
||||
allowedUDPPorts = [
|
||||
53
|
||||
67
|
||||
];
|
||||
};
|
||||
|
||||
extraHosts = "${dnsHosts}";
|
||||
};
|
||||
|
||||
services.dnsmasq = {
|
||||
enable = true;
|
||||
settings = {
|
||||
domain = "icdm.lan";
|
||||
dhcp-range = [ "eno1,10.77.1.10,10.77.1.255,255.255.0.0,12h" ];
|
||||
dhcp-option = [
|
||||
"eno1,option:router,10.77.1.1"
|
||||
"eno1,option:dns-server,10.77.1.2,1.1.1.1"
|
||||
"eno1,option:domain-search,icdm.lan"
|
||||
];
|
||||
expand-hosts = true;
|
||||
log-dhcp = true;
|
||||
log-queries = true;
|
||||
# Upstream servers
|
||||
server = [
|
||||
"1.1.1.1"
|
||||
"8.8.4.4"
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
{ pkgs, ... }:
|
||||
let
|
||||
wikiHost = "wiki.icdm.lan";
|
||||
kiwixport = 8080;
|
||||
in
|
||||
{
|
||||
services.kiwix-serve = {
|
||||
enable = true;
|
||||
port = kiwixport;
|
||||
library = {
|
||||
inherit (pkgs) zim;
|
||||
};
|
||||
};
|
||||
|
||||
greg.proxies."${wikiHost}".target = "http://localhost:${toString kiwixport}";
|
||||
networking.firewall.allowedTCPPorts = [ 80 ];
|
||||
}
|
||||
@@ -47,6 +47,10 @@
|
||||
enable = true;
|
||||
extraLabels = [ "bare-metal:host" ];
|
||||
};
|
||||
vmdev = {
|
||||
enable = true;
|
||||
host = "libvirt";
|
||||
};
|
||||
};
|
||||
|
||||
networking = {
|
||||
|
||||
@@ -88,6 +88,7 @@ in
|
||||
priority = 254;
|
||||
};
|
||||
nebula.enable = true;
|
||||
proxies."buildbot.nebula.thehellings.com".target = "http://buildbot.nebula.thehellings.com:8010/";
|
||||
tailscale = {
|
||||
enable = true;
|
||||
tags = [ "home" ];
|
||||
@@ -142,12 +143,12 @@ in
|
||||
updateOutputs = false;
|
||||
};
|
||||
};
|
||||
domain = "${config.networking.hostName}.shire-zebra.ts.net:8010";
|
||||
domain = "buildbot.nebula.thehellings.com:8010";
|
||||
evalMaxMemorySize = 8192;
|
||||
evalWorkerCount = 4;
|
||||
gitea = {
|
||||
enable = true;
|
||||
instanceUrl = "https://gitea.shire-zebra.ts.net";
|
||||
instanceUrl = "https://src.thehellings.com";
|
||||
oauthId = "7ec9107d-379b-47c8-870f-1191956d0500";
|
||||
oauthSecretFile = config.age.secrets.gitea-oauthSecret.path;
|
||||
tokenFile = config.age.secrets.gitea-oauthToken.path;
|
||||
@@ -155,7 +156,7 @@ in
|
||||
webhookSecretFile = config.age.secrets.gitea-webhookSecret.path;
|
||||
};
|
||||
showTrace = true;
|
||||
#webhookBaseUrl = "http://${config.networking.hostName}.shire-zebra.ts.net:8010";
|
||||
#webhookBaseUrl = "http://${config.networking.hostName}.nebula.thehellings.com:8010";
|
||||
workersFile = config.age.secrets.gitea-buildbotWorkersFile.path;
|
||||
};
|
||||
worker = {
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
{
|
||||
config,
|
||||
metadata,
|
||||
modulesPath,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
{
|
||||
imports = [ "${modulesPath}/virtualisation/proxmox-image.nix" ];
|
||||
greg = {
|
||||
home = true;
|
||||
nebula.enable = true;
|
||||
proxies =
|
||||
let
|
||||
tgt = {
|
||||
target = "http://localhost:${config.services.uptime-kuma.settings.PORT}";
|
||||
genAliases = false;
|
||||
};
|
||||
in
|
||||
{
|
||||
"kuma.nebula.thehellings.com" = tgt;
|
||||
"kuma.thehellings.lan" = tgt;
|
||||
"kuma.shire-zebra.ts.net" = tgt;
|
||||
};
|
||||
};
|
||||
nix.settings = {
|
||||
sandbox = false;
|
||||
};
|
||||
networking = {
|
||||
defaultGateway = metadata.infra.gw;
|
||||
nameservers = [ metadata.infra.dns ];
|
||||
interfaces.ens18 = {
|
||||
useDHCP = false;
|
||||
ipv4.addresses = [
|
||||
{
|
||||
address = metadata.hosts."${config.networking.hostName}".ip;
|
||||
prefixLength = 16;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
proxmox.cloudInit.enable = false;
|
||||
services = {
|
||||
fstrim.enable = true;
|
||||
mysql = {
|
||||
enable = true;
|
||||
ensureDatabases = [
|
||||
config.services.uptime-kuma.settings.UPTIME_KUMA_DB_NAME
|
||||
];
|
||||
ensureUsers = [
|
||||
{
|
||||
name = config.services.uptime-kuma.settings.UPTIME_KUMA_DB_USERNAME;
|
||||
ensurePermissions = {
|
||||
"uptimekuma.*" = "ALL PRIVILEGES";
|
||||
};
|
||||
}
|
||||
];
|
||||
package = pkgs.mariadb;
|
||||
};
|
||||
openssh = {
|
||||
enable = true;
|
||||
openFirewall = true;
|
||||
};
|
||||
uptime-kuma = {
|
||||
enable = true;
|
||||
settings = {
|
||||
PORT = "3001"; # Default, but this allows us to explicitly use it elsewhere
|
||||
UPTIME_KUMA_DB_TYPE = "mariadb";
|
||||
UPTIME_KUMA_DB_SOCKET = "/run/mysqld/mysqld.sock";
|
||||
UPTIME_KUMA_DB_NAME = "uptimekuma";
|
||||
UPTIME_KUMA_DB_USERNAME = "uptimekuma";
|
||||
UPTIME_KUMA_DB_PASSWORD = "uptimekuma";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,34 +1,70 @@
|
||||
{
|
||||
pkgs,
|
||||
lib,
|
||||
config,
|
||||
lib,
|
||||
metadata,
|
||||
pkgs,
|
||||
pkgs',
|
||||
...
|
||||
}:
|
||||
|
||||
let
|
||||
homepage = "127.0.0.1:30080";
|
||||
nextcloudPort = 8080;
|
||||
sshPort = 2222;
|
||||
in
|
||||
{
|
||||
imports = [
|
||||
./git.nix
|
||||
./hardware-configuration.nix
|
||||
./podman.nix
|
||||
./matrix.nix
|
||||
./nextcloud.nix
|
||||
./nginx.nix
|
||||
./postgres.nix
|
||||
];
|
||||
|
||||
age.secrets = {
|
||||
acme.file = ../../../secrets/acme.age;
|
||||
nextcloudadmin = {
|
||||
file = ../../../secrets/nextcloudadmin.age;
|
||||
owner = "nextcloud";
|
||||
};
|
||||
};
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
bind
|
||||
graphviz
|
||||
nix-du
|
||||
pgloader
|
||||
podman-compose
|
||||
pkgs'.upgrade-pg-cluster
|
||||
];
|
||||
|
||||
greg = {
|
||||
backup.jobs = {
|
||||
nextcloud-bkup = {
|
||||
src = "/var/lib/nextcloud";
|
||||
dest = "nextcloud-backup";
|
||||
pre = lib.getExe (
|
||||
pkgs.writeShellApplication {
|
||||
name = "nextcloud-backup-pre";
|
||||
runtimeInputs = [ config.services.nextcloud.occ ];
|
||||
text = "nextcloud-occ maintenance:mode --on";
|
||||
}
|
||||
);
|
||||
post = lib.getExe (
|
||||
pkgs.writeShellApplication {
|
||||
name = "nextcloud-backup-post";
|
||||
runtimeInputs = [ config.services.nextcloud.occ ];
|
||||
text = "nextcloud-occ maintenance:mode --off";
|
||||
}
|
||||
);
|
||||
};
|
||||
greg-postgresql-backup = {
|
||||
src = config.services.postgresqlBackup.location;
|
||||
dest = "linode-postgres";
|
||||
};
|
||||
};
|
||||
gitea-runner = {
|
||||
enable = true;
|
||||
extraLabels = [
|
||||
labels = [
|
||||
"vps:host"
|
||||
"blog:host"
|
||||
"nixos-linode:host"
|
||||
];
|
||||
};
|
||||
home = false;
|
||||
@@ -36,20 +72,29 @@
|
||||
nebula = {
|
||||
enable = true;
|
||||
isLighthouse = true;
|
||||
};
|
||||
proxies."immich.thehellings.com" = {
|
||||
genAliases = false;
|
||||
target = "http://localhost:${builtins.toString config.services.immich-public-proxy.port}";
|
||||
ssl = true;
|
||||
unsafeRoutes = [
|
||||
{
|
||||
route = "10.42.0.0/16";
|
||||
via = metadata.hosts.genesis.nebulaIp;
|
||||
}
|
||||
];
|
||||
};
|
||||
tailscale.enable = true;
|
||||
};
|
||||
|
||||
networking = {
|
||||
networkmanager.enable = lib.mkForce false;
|
||||
hostName = "linode";
|
||||
domain = "thehellings.com";
|
||||
nameservers = [ "100.88.91.27" ];
|
||||
firewall.allowedTCPPorts = [
|
||||
sshPort
|
||||
80
|
||||
443
|
||||
];
|
||||
hostName = "linode";
|
||||
nameservers = [
|
||||
"10.157.0.2"
|
||||
"100.96.198.104"
|
||||
];
|
||||
networkmanager.enable = lib.mkForce false;
|
||||
};
|
||||
|
||||
programs.ssh.extraConfig = lib.strings.concatStringsSep "\n" [
|
||||
@@ -60,10 +105,252 @@
|
||||
" UserKnownHostsFile /dev/null"
|
||||
];
|
||||
|
||||
services = {
|
||||
immich-public-proxy = {
|
||||
enable = true;
|
||||
immichUrl = "https://immich.shire-zebra.ts.net";
|
||||
security.acme = {
|
||||
acceptTerms = true;
|
||||
defaults = {
|
||||
dnsPropagationCheck = false;
|
||||
dnsResolver = "92.123.95.3:53,92.123.94.3:53,92.123.94.2:53,92.123.95.4:53,92.123.95.2:53";
|
||||
email = "greg.hellings@gmail.com";
|
||||
extraLegoRunFlags = [ "--ipv4only" ]; # Force IPv4 only
|
||||
#server = "https://acme-staging-v02.api.letsencrypt.org/directory";
|
||||
};
|
||||
certs."thehellings.com" = {
|
||||
dnsProvider = "linode";
|
||||
environmentFile = config.age.secrets.acme.path;
|
||||
extraDomainNames = [
|
||||
"*.thehellings.com"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
services = {
|
||||
|
||||
anubis = {
|
||||
instances = {
|
||||
git = {
|
||||
enable = true;
|
||||
settings = {
|
||||
BIND = "/run/anubis/anubis-git/anubis.sock";
|
||||
COOKIE_DOMAIN = "thehellings.com";
|
||||
SERVE_ROBOTS_TXT = true;
|
||||
SLOG_LEVEL = "DEBUG";
|
||||
TARGET = "http://git.k3s.thehellings.lan";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
haproxy = {
|
||||
enable = true;
|
||||
config = ''
|
||||
global
|
||||
nbthread 4
|
||||
maxconn 80
|
||||
log /dev/log local0
|
||||
|
||||
defaults
|
||||
timeout connect 500s
|
||||
timeout client 500s
|
||||
timeout server 1h
|
||||
|
||||
listen gitsshd
|
||||
bind *:${toString sshPort}
|
||||
timeout client 1h
|
||||
mode tcp
|
||||
server git-isaiah isaiah.thehellings.lan:32222
|
||||
server git-jeremiah jeremiah.thehellings.lan:32222
|
||||
server git-zeke zeke.thehellings.lan:32222
|
||||
|
||||
frontend https
|
||||
bind *:80
|
||||
bind *:443 ssl crt ${config.security.acme.certs."thehellings.com".directory}/full.pem
|
||||
|
||||
http-request redirect scheme https unless { ssl_fc }
|
||||
http-request add-header X-Forwarded-Proto https
|
||||
|
||||
http-response replace-header ^Set-Cookie:\ (.*) Set-Cookie \1;\ Secure
|
||||
|
||||
option http-server-close
|
||||
option http-keep-alive
|
||||
|
||||
#option httplog
|
||||
#declare capture response len 80
|
||||
#http-response capture res.hdr(Location) id 0
|
||||
|
||||
use_backend git if { hdr(host) -i src.thehellings.com }
|
||||
use_backend git if { req_ssl_sni -i src.thehellings.com }
|
||||
use_backend next if { hdr(host) -i next.thehellings.com }
|
||||
use_backend next if { req_ssl_sni -i next.thehellings.com }
|
||||
use_backend matrix if { hdr(host) -i matrix.thehellings.com }
|
||||
use_backend matrix if { req_ssl_sni -i matrix.thehellings.com }
|
||||
use_backend immich if { hdr(host) -i immich.thehellings.com }
|
||||
use_backend immich if { req_ssl_sni -i immich.thehellings.com }
|
||||
use_backend web if { hdr(host) -i thehellings.com }
|
||||
use_backend web if { req_ssl_sni -i thehellings.com }
|
||||
|
||||
backend git
|
||||
mode http
|
||||
balance roundrobin
|
||||
option accept-unsafe-violations-in-http-response
|
||||
retries 3
|
||||
option forwardfor
|
||||
http-request set-header Host git.k3s.thehellings.lan
|
||||
server git-isaiah isaiah.thehellings.lan:80
|
||||
server git-jeremiah jeremiah.thehellings.lan:80
|
||||
server git-zeke zeke.thehellings.lan:80
|
||||
|
||||
backend immich
|
||||
mode http
|
||||
balance roundrobin
|
||||
option accept-unsafe-violations-in-http-response
|
||||
retries 3
|
||||
option forwardfor
|
||||
server immich-proxy 127.0.0.1:${builtins.toString config.services.immich-public-proxy.port}
|
||||
|
||||
backend matrix
|
||||
mode http
|
||||
balance roundrobin
|
||||
option accept-unsafe-violations-in-http-response
|
||||
retries 3
|
||||
option forwardfor
|
||||
http-request set-header Host matrix.k3s.thehellings.lan
|
||||
server git-isaiah isaiah.thehellings.lan:80
|
||||
server git-jeremiah jeremiah.thehellings.lan:80
|
||||
server git-zeke zeke.thehellings.lan:80
|
||||
|
||||
backend web
|
||||
mode http
|
||||
balance roundrobin
|
||||
option accept-unsafe-violations-in-http-response
|
||||
retries 3
|
||||
option forwardfor
|
||||
server web-container ${homepage}
|
||||
|
||||
backend next
|
||||
log global
|
||||
mode http
|
||||
balance roundrobin
|
||||
option accept-unsafe-violations-in-http-response
|
||||
retries 3
|
||||
option forwardfor
|
||||
#http-response replace-value Location http://localhost:${builtins.toString nextcloudPort}/(.*) https://next.thehellings.com/\2
|
||||
server nextcloud 127.0.0.1:${builtins.toString nextcloudPort}
|
||||
'';
|
||||
};
|
||||
|
||||
immich-public-proxy = {
|
||||
enable = true;
|
||||
immichUrl = "http://immich.k3s.thehellings.lan";
|
||||
};
|
||||
|
||||
logrotate = {
|
||||
enable = true;
|
||||
settings = {
|
||||
postgresBackup = {
|
||||
enable = true;
|
||||
files = "${config.services.postgresqlBackup.location}/*.gz";
|
||||
};
|
||||
postgresLog = {
|
||||
enable = true;
|
||||
files = "/var/lib/postgresql/*/log/*.log";
|
||||
compress = true;
|
||||
compresscmd = "${pkgs.xz}/bin/xz";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
nextcloud = {
|
||||
enable = true;
|
||||
package = pkgs.nextcloud33;
|
||||
appstoreEnable = true;
|
||||
hostName = "localhost";
|
||||
https = false;
|
||||
config = {
|
||||
adminpassFile = config.age.secrets.nextcloudadmin.path;
|
||||
adminuser = "greg";
|
||||
dbhost = "/run/postgresql";
|
||||
dbtype = "pgsql";
|
||||
};
|
||||
settings = {
|
||||
default_phone_region = "US";
|
||||
overwriteprotocol = "http";
|
||||
trusted_domains = [ "next.thehellings.com" ];
|
||||
trusted_proxies = [
|
||||
"localhost"
|
||||
"127.0.0.1"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
# Move to :8080 so that we can run haproxy as the primary HTTP service
|
||||
nginx.virtualHosts."${config.services.nextcloud.hostName}".listen = [
|
||||
{
|
||||
addr = "127.0.0.1";
|
||||
port = nextcloudPort;
|
||||
}
|
||||
];
|
||||
|
||||
openssh.settings.PasswordAuthentication = false;
|
||||
|
||||
postgresql = {
|
||||
enable = true;
|
||||
package = pkgs.postgresql_15;
|
||||
checkConfig = true;
|
||||
ensureDatabases = [ "nextcloud" ];
|
||||
#initialScript = pkgs.writeText "create-matrix-db.sql" ''
|
||||
# CREATE ROLE "matrix-synapse" WITH LOGIN;
|
||||
# CREATE DATABASE "synapse" WITH OWNER "matrix-synapse" TEMPLATE template0 LC_COLLATE = "C" LC_CTYPE = "C";
|
||||
# GRANT ALL PRIVILEGES ON DATABASE "synapse" TO "matrix-synapse";
|
||||
#''; # These are done manually in order to set the LC_COLLATE values properly
|
||||
ensureUsers = [
|
||||
{
|
||||
name = "nextcloud";
|
||||
ensureDBOwnership = true;
|
||||
}
|
||||
];
|
||||
settings = {
|
||||
log_connections = true;
|
||||
log_statement = "all";
|
||||
logging_collector = true;
|
||||
log_filename = "postgresql.log";
|
||||
};
|
||||
identMap = ''
|
||||
root root postgres
|
||||
'';
|
||||
};
|
||||
|
||||
postgresqlBackup = {
|
||||
enable = true;
|
||||
databases = [ "nextcloud" ];
|
||||
};
|
||||
};
|
||||
|
||||
systemd.services = {
|
||||
haproxy = {
|
||||
after = [
|
||||
"nextcloud.service"
|
||||
"network-online.target"
|
||||
];
|
||||
wants = [
|
||||
"nextcloud.service"
|
||||
"network-online.target"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
users.users.haproxy.extraGroups = [ config.security.acme.certs."thehellings.com".group ];
|
||||
|
||||
# Actually serve the content from here
|
||||
virtualisation.oci-containers = {
|
||||
backend = "podman";
|
||||
containers."homepage" = {
|
||||
image = "src.thehellings.com/greg/homepage:latest";
|
||||
ports = [ "${homepage}:80" ];
|
||||
};
|
||||
};
|
||||
virtualisation.podman = {
|
||||
enable = true;
|
||||
dockerCompat = true;
|
||||
dockerSocket.enable = true;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,148 +0,0 @@
|
||||
{ config, ... }:
|
||||
|
||||
let
|
||||
srcDomain = "src.thehellings.com";
|
||||
sshPort = 2222;
|
||||
in
|
||||
{
|
||||
greg.proxies."${srcDomain}" = {
|
||||
target = "http://unix:${config.services.anubis.instances.git.settings.BIND}";
|
||||
ssl = true;
|
||||
genAliases = false;
|
||||
extraConfig = ''
|
||||
#proxy_ssl_verify off;
|
||||
#proxy_ssl_server_name on;
|
||||
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Http-Version $server_protocol;
|
||||
proxy_set_header User-Agent $http_user_agent;
|
||||
client_max_body_size 100000m;
|
||||
|
||||
#proxy_set_header Host $host;
|
||||
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
#proxy_set_header X-Forwarded-Proto $scheme;
|
||||
#proxy_set_header X-Forwarded-Ssl on;
|
||||
|
||||
# Ultimate AI Block List v1.7 20250924
|
||||
# https://perishablepress.com/ultimate-ai-block-list/
|
||||
|
||||
if ($http_user_agent ~* "(openai\.com|\.ai|-ai|_ai|ai\.|ai-|ai_|ai=|AddSearchBot|Agentic|AgentQL|Agent\ 3|Agent\ API|AI\ Agent|AI\ Article\ Writer|AI\ Chat|AI\ Content\ Detector|AI\ Detection|AI\ Dungeon|AI\ Journalist|AI\ Legion)") {
|
||||
return 444;
|
||||
}
|
||||
if ($http_user_agent ~* "(AI\ RAG|AI\ Search|AI\ SEO\ Crawler|AI\ Training|AI\ Web|AI\ Writer|AI2|AIBot|aiHitBot|AIMatrix|AISearch|AITraining|Alexa|Alice\ Yandex|AliGenie|AliyunSec|Alpha\ AI|AlphaAI|Amazon|Amelia)") {
|
||||
return 444;
|
||||
}
|
||||
if ($http_user_agent ~* "(AndersPinkBot|AndiBot|Anonymous\ AI|Anthropic|AnyPicker|Anyword|Applebot|Aria\ AI|Aria\ Browse|Articoolo|Ask\ AI|AutoGen|AutoGLM|Automated\ Writer|AutoML|Autonomous\ RAG|AwarioRssBot|AwarioSmartBot|AWS\ Trainium|Azure)") {
|
||||
return 444;
|
||||
}
|
||||
if ($http_user_agent ~* "(BabyAGI|BabyCatAGI|BardBot|Basic\ RAG|Bedrock|Big\ Sur|Bigsur|Botsonic|Brightbot|Browser\ MCP\ Agent|Browser\ Use|Bytebot|ByteDance|Bytespider|CarynAI|CatBoost|CC-Crawler|CCBot|Chai|Character)") {
|
||||
return 444;
|
||||
}
|
||||
if ($http_user_agent ~* "(Charstar\ AI|Chatbot|ChatGLM|Chatsonic|ChatUser|Chinchilla|Claude|ClearScope|Clearview|Cognitive\ AI|Cohere|Common\ Crawl|CommonCrawl|Content\ Harmony|Content\ King|Content\ Optimizer|Content\ Samurai|ContentAtScale|ContentBot|Contentedge)") {
|
||||
return 444;
|
||||
}
|
||||
if ($http_user_agent ~* "(ContentShake|Conversion\ AI|Copilot|CopyAI|Copymatic|Copyscape|CoreWeave|Corrective\ RAG|Cotoyogi|CRAB|Crawl4AI|CrawlQ\ AI|Crawlspace|Crew\ AI|CrewAI|Crushon\ AI|DALL-E|DarkBard|DataFor|DataProvider)") {
|
||||
return 444;
|
||||
}
|
||||
if ($http_user_agent ~* "(Datenbank\ Crawler|DeepAI|Deep\ AI|DeepL|DeepMind|Deep\ Research|DeepResearch|DeepSeek|Devin|Diffbot|Doubao\ AI|DuckAssistBot|DuckDuckGo\ Chat|DuckDuckGo-Enhanced|Echobot|Echobox|Elixir|FacebookBot|FacebookExternalHit|Factset)") {
|
||||
return 444;
|
||||
}
|
||||
if ($http_user_agent ~* "(Falcon|FIRE-1|Firebase|Firecrawl|Flux|Flyriver|Frase\ AI|FriendlyCrawler|Gato|Gemini|Gemma|Gen\ AI|GenAI|Generative|Genspark|Gentoo-chat|Ghostwriter|GigaChat|GLM|GodMode)") {
|
||||
return 444;
|
||||
}
|
||||
if ($http_user_agent ~* "(Goose|GPT|Grammarly|Grendizer|Grok|GT\ Bot|GTBot|GTP|Hemingway\ Editor|Hetzner|Hugging|Hunyuan|Hybrid\ Search\ RAG|Hypotenuse\ AI|iAsk|ICC-Crawler|ImageGen|ImagesiftBot|img2dataset|imgproxy)") {
|
||||
return 444;
|
||||
}
|
||||
if ($http_user_agent ~* "(INK\ Editor|INKforall|Instructor|IntelliSeek|Inferkit|ISSCyberRiskCrawler|Janitor\ AI|Jasper|Jenni\ AI|Julius\ AI|Kafkai|Kaggle|Kangaroo|Keyword\ Density\ AI|Kimi|Knowledge|KomoBot|Kruti|LangChain|Le\ Chat)") {
|
||||
return 444;
|
||||
}
|
||||
if ($http_user_agent ~* "(Lensa|Lightpanda|LinerBot|LLaMA|LLM|Local\ RAG\ Agent|Lovable|Magistral|magpie-crawler|Manus|MarketMuse|Meltwater|Meta-AI|Meta-External|Meta-Webindexer|Meta\ AI|MetaAI|MetaTagBot|Middleware|Midjourney)") {
|
||||
return 444;
|
||||
}
|
||||
if ($http_user_agent ~* "(Mini\ AGI|MiniMax|Mintlify|Mistral|Mixtral|model-training|Monica|Narrative|NeevaBot|netEstate|Neural\ Text|NeuralSEO|NinjaAI|NodeZero|Nova\ Act|NovaAct|OAI-SearchBot|OAI\ SearchBot|OASIS|Olivia)") {
|
||||
return 444;
|
||||
}
|
||||
if ($http_user_agent ~* "(Omgili|Open\ AI|Open\ Interpreter|OpenAGI|OpenAI|OpenBot|OpenPi|OpenRouter|OpenText\ AI|Operator|Outwrite|Page\ Analyzer\ AI|PanguBot|Panscient|Paperlibot|Paraphraser\.io|peer39_crawler|Perflexity|Perplexity|Petal)") {
|
||||
return 444;
|
||||
}
|
||||
if ($http_user_agent ~* "(Phind|PiplBot|PoeBot|PoeSearchBot|ProWritingAid|Proximic|Puppeteer|Python\ AI|Qualified|Quark|QuillBot|Qopywriter|Qwen|RAG\ Agent|RAG\ Azure\ AI|RAG\ Chatbot|RAG\ Database|RAG\ IS|RAG\ Pipeline|RAG\ Search)") {
|
||||
return 444;
|
||||
}
|
||||
if ($http_user_agent ~* "(RAG\ with|RAG-|RAG_|Raptor|React\ Agent|Redis\ AI\ RAG|RobotSpider|Rytr|SaplingAI|SBIntuitionsBot|Scala|Scalenut|Scrap|ScriptBook|Seekr|SEObot|SEO\ Content\ Machine|SEO\ Robot|SemrushBot|Sentibot)") {
|
||||
return 444;
|
||||
}
|
||||
if ($http_user_agent ~* "(Serper|ShapBot|Sidetrade|Simplified\ AI|Sitefinity|Skydancer|SlickWrite|SmartBot|Sonic|Sora|Spider/2|SpiderCreator|Spin\ Rewrite|Spinbot|Stability|StableDiffusionBot|Sudowrite|SummalyBot|Super\ Agent|Superagent)") {
|
||||
return 444;
|
||||
}
|
||||
if ($http_user_agent ~* "(SuperAGI|Surfer\ AI|TerraCotta|Text\ Blaze|TextCortex|Thinkbot|Thordata|TikTokSpider|Timpibot|Tinybird|Together\ AI|Traefik|TurnitinBot|uAgents|VelenPublicWebCrawler|Venus\ Chub\ AI|Vidnami\ AI|Vision\ RAG|WebSurfer|WebText)") {
|
||||
return 444;
|
||||
}
|
||||
if ($http_user_agent ~* "(Webzio|WeChat|Whisper|WordAI|Wordtune|WPBot|Writecream|WriterZen|Writescope|Writesonic|xAI|xBot|YaML|YandexAdditional|YouBot|Zendesk|Zero|Zhipu|Zhuque\ AI|Zimm)") {
|
||||
return 444;
|
||||
}
|
||||
'';
|
||||
};
|
||||
#greg.proxies."registry.thehellings.com" = {
|
||||
#target = "https://gitea.shire-zebra.ts.net:5000";
|
||||
#ssl = true;
|
||||
#genAliases = false;
|
||||
#extraConfig = ''
|
||||
#proxy_set_header X-Forwarded-Proto https;
|
||||
#proxy_set_header X-Forwarded-Ssl on;
|
||||
#client_max_body_size 25000m;
|
||||
#'';
|
||||
#};
|
||||
|
||||
networking.firewall.allowedTCPPorts = [ sshPort ];
|
||||
|
||||
services = {
|
||||
anubis = {
|
||||
instances = {
|
||||
git = {
|
||||
enable = true;
|
||||
settings = {
|
||||
BIND = "/run/anubis/anubis-git/anubis.sock";
|
||||
COOKIE_DOMAIN = "thehellings.com";
|
||||
SERVE_ROBOTS_TXT = true;
|
||||
TARGET = "https://gitea.shire-zebra.ts.net/";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
haproxy = {
|
||||
enable = true;
|
||||
config = ''
|
||||
global
|
||||
daemon
|
||||
maxconn 20
|
||||
|
||||
defaults
|
||||
timeout connect 500s
|
||||
timeout client 500s
|
||||
timeout server 1h
|
||||
|
||||
listen gitsshd
|
||||
bind *:${toString sshPort}
|
||||
timeout client 1h
|
||||
mode tcp
|
||||
server git-isaiah isaiah.shire-zebra.ts.net:32222
|
||||
server git-jeremiah jeremiah.shire-zebra.ts.net:32222
|
||||
server git-zeke zeke.shire-zebra.ts.net:32222
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
systemd.services = {
|
||||
haproxy = {
|
||||
after = [
|
||||
"network-online.target"
|
||||
];
|
||||
wants = [
|
||||
"network-online.target"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
users.users.nginx.extraGroups = [ config.users.groups.anubis.name ];
|
||||
}
|
||||
@@ -1,70 +0,0 @@
|
||||
# Registration of new users is disabled for the public, but I can create
|
||||
# them by the following commands:
|
||||
# nix run nixpkgs.matrix-synapse
|
||||
# register_new_matrix_user -k "B9EoPr2WV9hzwc7uL2Sx1JmvCeKDEOGCpB0uginQcQtEH4wzRtkSIdo7lltrjSQa" http://localhost:8448
|
||||
{ config, ... }:
|
||||
let
|
||||
domain = "${config.networking.domain}";
|
||||
fqdn = "matrix.${domain}";
|
||||
in
|
||||
{
|
||||
greg.proxies."${fqdn}" = {
|
||||
extraConfig = ''
|
||||
error_log /var/log/nginx/debug.log debug;
|
||||
proxy_ssl_verify off;
|
||||
proxy_ssl_server_name on;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_set_header X-Forwarded-Ssl on;
|
||||
'';
|
||||
genAliases = false;
|
||||
ssl = true;
|
||||
target = "https://matrix.shire-zebra.ts.net";
|
||||
};
|
||||
services.nginx = {
|
||||
virtualHosts = {
|
||||
# Server the '.well-known' files to find the Matrix API server
|
||||
"${domain}" = {
|
||||
enableACME = true;
|
||||
forceSSL = true;
|
||||
# This is needed so that servers contacting hellings.com can find
|
||||
# the actual application server at matrix.thehellings.com
|
||||
locations."= /.well-known/matrix/server".extraConfig =
|
||||
let
|
||||
server = {
|
||||
"m.server" = "${fqdn}:443";
|
||||
};
|
||||
in
|
||||
''
|
||||
add_header Content-Type application/json;
|
||||
return 200 '${builtins.toJSON server}';
|
||||
'';
|
||||
|
||||
locations."= /.well-known/matrix/client".extraConfig =
|
||||
let
|
||||
client = {
|
||||
"m.homeserver" = {
|
||||
"base_url" = "https://${fqdn}";
|
||||
};
|
||||
"m.identity_server" = {
|
||||
"base_url" = "https://vector.im";
|
||||
};
|
||||
};
|
||||
in
|
||||
''
|
||||
add_header Content-Type application/json;
|
||||
add_header Access-Control-Allow-Origin *;
|
||||
return 200 '${builtins.toJSON client}';
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# Open networking ports for the server
|
||||
networking.firewall = {
|
||||
enable = true;
|
||||
allowedTCPPorts = [
|
||||
80
|
||||
443
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -1,58 +0,0 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
|
||||
{
|
||||
age.secrets.nextcloudadmin = {
|
||||
file = ../../../secrets/nextcloudadmin.age;
|
||||
owner = "nextcloud";
|
||||
};
|
||||
|
||||
services.nextcloud = {
|
||||
enable = true;
|
||||
package = pkgs.nextcloud33;
|
||||
appstoreEnable = true;
|
||||
hostName = "next.${config.networking.domain}";
|
||||
https = true;
|
||||
config = {
|
||||
adminpassFile = config.age.secrets.nextcloudadmin.path;
|
||||
adminuser = "greg";
|
||||
dbhost = "/run/postgresql";
|
||||
dbtype = "pgsql";
|
||||
};
|
||||
settings = {
|
||||
default_phone_region = "US";
|
||||
overwriteprotocol = "https";
|
||||
};
|
||||
};
|
||||
|
||||
services.nginx.virtualHosts."next.thehellings.com" = {
|
||||
forceSSL = true;
|
||||
enableACME = true;
|
||||
};
|
||||
|
||||
# Otherwise nginx errors looking for the nextcloud sock file
|
||||
systemd.services.nginx.after = [ "nextcloud.service" ];
|
||||
|
||||
greg.backup.jobs.nextcloud-bkup = {
|
||||
src = "/var/lib/nextcloud";
|
||||
dest = "nextcloud-backup";
|
||||
pre = lib.getExe (
|
||||
pkgs.writeShellApplication {
|
||||
name = "nextcloud-backup-pre";
|
||||
runtimeInputs = [ config.services.nextcloud.occ ];
|
||||
text = "nextcloud-occ maintenance:mode --on";
|
||||
}
|
||||
);
|
||||
post = lib.getExe (
|
||||
pkgs.writeShellApplication {
|
||||
name = "nextcloud-backup-post";
|
||||
runtimeInputs = [ config.services.nextcloud.occ ];
|
||||
text = "nextcloud-occ maintenance:mode --off";
|
||||
}
|
||||
);
|
||||
};
|
||||
}
|
||||
@@ -1,38 +0,0 @@
|
||||
{ ... }:
|
||||
let
|
||||
homepage = "127.0.0.1:30080";
|
||||
in
|
||||
{
|
||||
security.acme = {
|
||||
acceptTerms = true;
|
||||
defaults.email = "greg.hellings@gmail.com";
|
||||
};
|
||||
|
||||
services.nginx = {
|
||||
enable = true;
|
||||
|
||||
clientMaxBodySize = "25000m"; # To help with uploading container images
|
||||
# If there are recommended settings, let's use them!
|
||||
recommendedGzipSettings = true;
|
||||
recommendedOptimisation = true;
|
||||
recommendedProxySettings = true;
|
||||
recommendedTlsSettings = true;
|
||||
};
|
||||
|
||||
# Actually serve the content from here
|
||||
virtualisation.podman.enable = true;
|
||||
virtualisation.oci-containers = {
|
||||
backend = "podman";
|
||||
containers."homepage" = {
|
||||
image = "registry.thehellings.com:443/greg/homepage/gregs-homepage:latest";
|
||||
ports = [ "${homepage}:80" ];
|
||||
};
|
||||
};
|
||||
greg.proxies = {
|
||||
"thehellings.com" = {
|
||||
target = "http://${homepage}/";
|
||||
ssl = true;
|
||||
genAliases = false;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
podman-compose
|
||||
];
|
||||
|
||||
virtualisation.podman = {
|
||||
enable = true;
|
||||
dockerCompat = true;
|
||||
dockerSocket.enable = true;
|
||||
};
|
||||
}
|
||||
@@ -1,63 +0,0 @@
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
pkgs',
|
||||
...
|
||||
}:
|
||||
|
||||
{
|
||||
environment.systemPackages = [ pkgs'.upgrade-pg-cluster ];
|
||||
|
||||
services.postgresql = {
|
||||
enable = true;
|
||||
package = pkgs.postgresql_15;
|
||||
checkConfig = true;
|
||||
ensureDatabases = [ "nextcloud" ];
|
||||
#initialScript = pkgs.writeText "create-matrix-db.sql" ''
|
||||
# CREATE ROLE "matrix-synapse" WITH LOGIN;
|
||||
# CREATE DATABASE "synapse" WITH OWNER "matrix-synapse" TEMPLATE template0 LC_COLLATE = "C" LC_CTYPE = "C";
|
||||
# GRANT ALL PRIVILEGES ON DATABASE "synapse" TO "matrix-synapse";
|
||||
#''; # These are done manually in order to set the LC_COLLATE values properly
|
||||
ensureUsers = [
|
||||
{
|
||||
name = "nextcloud";
|
||||
ensureDBOwnership = true;
|
||||
}
|
||||
];
|
||||
settings = {
|
||||
log_connections = true;
|
||||
log_statement = "all";
|
||||
logging_collector = true;
|
||||
log_filename = "postgresql.log";
|
||||
};
|
||||
identMap = ''
|
||||
root root postgres
|
||||
'';
|
||||
};
|
||||
|
||||
services.postgresqlBackup = {
|
||||
enable = true;
|
||||
databases = [ "nextcloud" ];
|
||||
};
|
||||
|
||||
services.logrotate = {
|
||||
enable = true;
|
||||
settings = {
|
||||
postgresBackup = {
|
||||
enable = true;
|
||||
files = "${config.services.postgresqlBackup.location}/*.gz";
|
||||
};
|
||||
postgresLog = {
|
||||
enable = true;
|
||||
files = "/var/lib/postgresql/*/log/*.log";
|
||||
compress = true;
|
||||
compresscmd = "${pkgs.xz}/bin/xz";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
greg.backup.jobs.greg-postgresql-backup = {
|
||||
src = config.services.postgresqlBackup.location;
|
||||
dest = "linode-postgres";
|
||||
};
|
||||
}
|
||||
@@ -1,60 +0,0 @@
|
||||
# Edit this configuration file to define what should be installed on
|
||||
# your system. Help is available in the configuration.nix(5) man page
|
||||
# and in the NixOS manual (accessible by running ‘nixos-help’).
|
||||
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
# Include the results of the hardware scan.
|
||||
./hardware-configuration.nix
|
||||
];
|
||||
|
||||
# Bootloader.
|
||||
boot.loader = {
|
||||
systemd-boot.enable = true;
|
||||
efi.canTouchEfiVariables = true;
|
||||
};
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
];
|
||||
|
||||
greg = {
|
||||
home = true;
|
||||
tailscale = {
|
||||
enable = true;
|
||||
tags = [ "home" ];
|
||||
};
|
||||
};
|
||||
|
||||
networking = {
|
||||
hostName = "proxmoxtemplate"; # Define your hostname.
|
||||
# defaultGateway = {
|
||||
# address = " 10.42.1.2";
|
||||
# interface = "enp6s18";
|
||||
# };
|
||||
# interfaces = {
|
||||
# enp6s18 = {
|
||||
# ipv4.addresses = [
|
||||
# {
|
||||
# address = "10.42.1.8";
|
||||
# prefixLength = 16;
|
||||
# }
|
||||
# ];
|
||||
# };
|
||||
# };
|
||||
nameservers = [ "10.42.1.5" ];
|
||||
};
|
||||
|
||||
services.qemuGuest.enable = true;
|
||||
|
||||
system.stateVersion = "24.11"; # Did you read the comment?
|
||||
|
||||
# Define a user account. Don't forget to set a password with ‘passwd’.
|
||||
users.users.greg = {
|
||||
isNormalUser = true;
|
||||
description = "Greg Hellings";
|
||||
extraGroups = [ "wheel" ];
|
||||
packages = with pkgs; [ ];
|
||||
};
|
||||
}
|
||||
@@ -1,50 +0,0 @@
|
||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||
# and may be overwritten by future invocations. Please make changes
|
||||
# to /etc/nixos/configuration.nix instead.
|
||||
{
|
||||
lib,
|
||||
modulesPath,
|
||||
...
|
||||
}:
|
||||
|
||||
{
|
||||
imports = [
|
||||
(modulesPath + "/profiles/qemu-guest.nix")
|
||||
];
|
||||
|
||||
boot.initrd.availableKernelModules = [
|
||||
"uhci_hcd"
|
||||
"ehci_pci"
|
||||
"ahci"
|
||||
"virtio_pci"
|
||||
"virtio_scsi"
|
||||
"sd_mod"
|
||||
"sr_mod"
|
||||
];
|
||||
boot.initrd.kernelModules = [ ];
|
||||
boot.kernelModules = [ ];
|
||||
boot.extraModulePackages = [ ];
|
||||
|
||||
fileSystems."/" = {
|
||||
device = "/dev/disk/by-uuid/507251f1-efe7-448d-8de8-91ee582a9afb";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
fileSystems."/boot" = {
|
||||
device = "/dev/disk/by-uuid/7115-EFA6";
|
||||
fsType = "vfat";
|
||||
options = [
|
||||
"fmask=0077"
|
||||
"dmask=0077"
|
||||
];
|
||||
};
|
||||
|
||||
swapDevices = [ ];
|
||||
|
||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
||||
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||
# still possible to use this option, but it's recommended to use it in conjunction
|
||||
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
|
||||
networking.useDHCP = lib.mkDefault true;
|
||||
# networking.interfaces.enp6s18.useDHCP = lib.mkDefault true;
|
||||
}
|
||||
@@ -32,6 +32,10 @@
|
||||
enable = true;
|
||||
tags = [ "home" ];
|
||||
};
|
||||
vmdev = {
|
||||
enable = true;
|
||||
host = "vbox";
|
||||
};
|
||||
};
|
||||
|
||||
hardware = {
|
||||
@@ -71,10 +75,4 @@
|
||||
users.users.greg.extraGroups = [
|
||||
"podman"
|
||||
];
|
||||
|
||||
# virtualisation.virtualbox.host = {
|
||||
# enableExtensionPack = true;
|
||||
# headless = true;
|
||||
# enableWebService = true;
|
||||
# };
|
||||
}
|
||||
|
||||
@@ -1,79 +0,0 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: donetick-config
|
||||
namespace: donetick
|
||||
data:
|
||||
# Value pulled from
|
||||
# https://github.com/donetick/donetick/blob/main/config/selfhosted.yaml
|
||||
selfhosted.yaml: |-
|
||||
name: "selfhosted"
|
||||
is_done_tick_dot_com: false
|
||||
is_user_creation_disabled: false
|
||||
telegram:
|
||||
token: ""
|
||||
pushover:
|
||||
token: ""
|
||||
database:
|
||||
type: "sqlite"
|
||||
migration: true
|
||||
# these are only required for postgres
|
||||
host: "secret"
|
||||
port: 5432
|
||||
user: "secret"
|
||||
password: "secret"
|
||||
name: "secret"
|
||||
jwt:
|
||||
secret: "This is really a secure JWT secret now!"
|
||||
session_time: 168h
|
||||
max_refresh: 168h
|
||||
server:
|
||||
port: 2021
|
||||
read_timeout: 10s
|
||||
write_timeout: 10s
|
||||
rate_period: 60s
|
||||
rate_limit: 300
|
||||
cors_allow_origins:
|
||||
- "http://localhost:5173"
|
||||
- "http://localhost:7926"
|
||||
# the below are required for the android app to work
|
||||
- "https://localhost"
|
||||
- "capacitor://localhost"
|
||||
serve_frontend: true
|
||||
logging:
|
||||
level: "info"
|
||||
encoding: "json"
|
||||
development: false
|
||||
scheduler_jobs:
|
||||
due_job: 30m
|
||||
overdue_job: 3h
|
||||
pre_due_job: 3h
|
||||
email:
|
||||
host:
|
||||
port:
|
||||
key:
|
||||
email:
|
||||
appHost:
|
||||
oauth2:
|
||||
client_id:
|
||||
client_secret:
|
||||
auth_url:
|
||||
token_url:
|
||||
user_info_url:
|
||||
redirect_url:
|
||||
name:
|
||||
# Real-time configuration
|
||||
realtime:
|
||||
enabled: true
|
||||
sse_enabled: true
|
||||
heartbeat_interval: 60s
|
||||
connection_timeout: 120s
|
||||
max_connections: 1000
|
||||
max_connections_per_user: 5
|
||||
event_queue_size: 2048
|
||||
cleanup_interval: 2m
|
||||
stale_threshold: 5m
|
||||
enable_compression: true
|
||||
enable_stats: true
|
||||
allowed_origins:
|
||||
- "*"
|
||||
@@ -1,38 +0,0 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: donetick
|
||||
namespace: donetick
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: donetick
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: donetick
|
||||
spec:
|
||||
containers:
|
||||
- name: donetick
|
||||
image: donetick/donetick
|
||||
ports:
|
||||
- containerPort: 2021
|
||||
name: http
|
||||
env:
|
||||
- name: DT_ENV
|
||||
value: "selfhosted"
|
||||
- name: DT_SQLITE_PATH
|
||||
value: "/data/donetick.db"
|
||||
volumeMounts:
|
||||
- name: config
|
||||
mountPath: /config
|
||||
- name: data
|
||||
mountPath: /data
|
||||
volumes:
|
||||
- name: config
|
||||
configMap:
|
||||
name: donetick-config
|
||||
- name: data
|
||||
persistentVolumeClaim:
|
||||
claimName: donetick-data
|
||||
@@ -1,15 +0,0 @@
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: donetick-tailscale
|
||||
namespace: donetick
|
||||
spec:
|
||||
ingressClassName: tailscale
|
||||
defaultBackend:
|
||||
service:
|
||||
name: donetick
|
||||
port:
|
||||
number: 2021
|
||||
tls:
|
||||
- hosts:
|
||||
- todo
|
||||
@@ -1,9 +0,0 @@
|
||||
namespace: donetick
|
||||
|
||||
resources:
|
||||
- namespace.yaml
|
||||
- configmap.yaml
|
||||
- pvc.yaml
|
||||
- deployment.yaml
|
||||
- service.yaml
|
||||
- ingress.yaml
|
||||
@@ -1,4 +0,0 @@
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: donetick
|
||||
@@ -1,11 +0,0 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: donetick-data
|
||||
namespace: donetick
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 5Gi
|
||||
@@ -1,13 +0,0 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: donetick
|
||||
namespace: donetick
|
||||
spec:
|
||||
selector:
|
||||
app: donetick
|
||||
ports:
|
||||
- name: http
|
||||
port: 2021
|
||||
targetPort: 2021
|
||||
protocol: TCP
|
||||
@@ -1,56 +0,0 @@
|
||||
apiVersion: source.toolkit.fluxcd.io/v1
|
||||
kind: HelmRepository
|
||||
metadata:
|
||||
name: gitea
|
||||
spec:
|
||||
interval: "24h"
|
||||
url: https://dl.gitea.com/charts/
|
||||
---
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: gitea-runner
|
||||
namespace: gitea-runner
|
||||
spec:
|
||||
interval: 10m
|
||||
chart:
|
||||
spec:
|
||||
chart: actions
|
||||
version: "0.0.4"
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: gitea
|
||||
interval: "1h"
|
||||
values:
|
||||
rbac:
|
||||
create: true
|
||||
serviceAccount:
|
||||
create: true
|
||||
gitea:
|
||||
instanceURL: https://src.thehellings.com
|
||||
runnerToken:
|
||||
existingSecret: gitea-runner
|
||||
existingSecretKey: token
|
||||
imagePullSecrets:
|
||||
- name: image-pull-secrets
|
||||
config:
|
||||
runner:
|
||||
labels:
|
||||
# Ubuntu
|
||||
- "ubuntu-22.04:docker://ubuntu:22.04"
|
||||
- "ubuntu-24.04:docker://ubuntu:24.04"
|
||||
- "ubuntu-24.10:docker://ubuntu:24.10"
|
||||
# Fedora
|
||||
- "fedora-41:docker://fedora:41"
|
||||
- "fedora-42:docker://fedora:42"
|
||||
# CentOS Stream
|
||||
- "centos-stream-9:docker://quay.io/centos/centos:stream9"
|
||||
- "centos-stream-10:docker://quay.io/centos/centos:stream10"
|
||||
# Nix
|
||||
- "nix:docker://nixos/nix:latest"
|
||||
# ci-images (internal registry: src.thehellings.com/greg)
|
||||
- "ci-builder:docker://src.thehellings.com/greg/builder:latest"
|
||||
- "ci-vm-test:docker://src.thehellings.com/greg/vm-test:latest"
|
||||
- "ci-sword:docker://src.thehellings.com/greg/sword-container-builder:latest"
|
||||
- "ci-bitwarden:docker://src.thehellings.com/greg/bitwarden:latest"
|
||||
- "ci-immich:docker://src.thehellings.com/greg/immich:latest"
|
||||
@@ -1,6 +0,0 @@
|
||||
namespace: gitea-runner
|
||||
|
||||
resources:
|
||||
- namespace.yaml
|
||||
- secrets.yaml
|
||||
- chart.yaml
|
||||
@@ -1,4 +0,0 @@
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: gitea-runner
|
||||
@@ -1,18 +0,0 @@
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: gitea-runner
|
||||
namespace: gitea-runner
|
||||
spec:
|
||||
refreshInterval: 1h
|
||||
secretStoreRef:
|
||||
name: bitwarden-login
|
||||
kind: ClusterSecretStore
|
||||
target:
|
||||
name: gitea-runner
|
||||
creationPolicy: Owner
|
||||
data:
|
||||
- secretKey: token
|
||||
remoteRef:
|
||||
key: 11419680-5338-4f19-bdd9-b422007046af
|
||||
property: password
|
||||
@@ -15,7 +15,7 @@ spec:
|
||||
chart:
|
||||
spec:
|
||||
chart: gitea
|
||||
version: "12.6.0"
|
||||
version: "12.7.0"
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: gitea-repository
|
||||
@@ -35,7 +35,7 @@ spec:
|
||||
storageClass: longhorn-default
|
||||
|
||||
image:
|
||||
tag: "1.26.2"
|
||||
tag: "1.27.1"
|
||||
|
||||
replicaCount: 1
|
||||
|
||||
@@ -85,15 +85,15 @@ spec:
|
||||
DISABLE_REGISTRATION: "true"
|
||||
storage:
|
||||
STORAGE_TYPE: minio
|
||||
MINIO_ENDPOINT: "nas1.shire-zebra.ts.net:9000"
|
||||
MINIO_ENDPOINT: "nas1.shire-zebra.ts.net:30188"
|
||||
MINIO_BUCKET: gitea
|
||||
MINIO_LOCATION: us-east-1
|
||||
MINIO_LOCATION: garage
|
||||
# MINIO_ACCESS_KEY_ID: ""
|
||||
# MINIO_SECRET_ACCESS_KEY: ""
|
||||
MINIO_USE_SSL: "false"
|
||||
MINIO_INSECURE_SKIP_VERIFY: "true"
|
||||
webhook:
|
||||
ALLOWED_HOST_LIST: loopback,private,*.shire-zebra.ts.net
|
||||
security:
|
||||
ALLOWED_HOST_LIST: loopback,private,*.shire-zebra.ts.net,*.nebula.thehellings.com,*.thehellings.lan
|
||||
|
||||
metrics:
|
||||
enabled: false
|
||||
@@ -102,8 +102,8 @@ spec:
|
||||
|
||||
persistence:
|
||||
enabled: true
|
||||
storageClass: longhorn-default
|
||||
size: "50Gi"
|
||||
create: false
|
||||
claimName: gitea-new
|
||||
|
||||
# I will manage my Postgres externally
|
||||
postgresql:
|
||||
|
||||
@@ -18,12 +18,12 @@ spec:
|
||||
volumes:
|
||||
- name: gitea-data
|
||||
persistentVolumeClaim:
|
||||
claimName: gitea-shared-storage
|
||||
claimName: gitea-new
|
||||
- name: dump-staging
|
||||
emptyDir: {}
|
||||
initContainers:
|
||||
- name: gitea-dump
|
||||
image: "gitea/gitea:1.25.4"
|
||||
image: "gitea/gitea:1.27.1"
|
||||
command:
|
||||
- /bin/sh
|
||||
- "-c"
|
||||
@@ -51,12 +51,12 @@ spec:
|
||||
- |
|
||||
set -e
|
||||
# Configure mc alias for MinIO
|
||||
mc alias set nas1 http://nas1.shire-zebra.ts.net:9000 \
|
||||
mc alias set nas1 http://nas1.shire-zebra.ts.net:30188 \
|
||||
"${MINIO_ACCESS_KEY}" "${MINIO_SECRET_KEY}"
|
||||
# Upload dump to backup-gitea bucket
|
||||
DUMP_FILE=$(ls /dump-staging/gitea-dump-*.zip | head -1)
|
||||
mc cp "${DUMP_FILE}" "nas1/backup-gitea/$(basename ${DUMP_FILE})"
|
||||
echo "Uploaded $(basename ${DUMP_FILE}) to backup-gitea"
|
||||
mc cp "${DUMP_FILE}" "nas1/gitea-backup/$(basename ${DUMP_FILE})"
|
||||
echo "Uploaded $(basename ${DUMP_FILE}) to gitea-backup"
|
||||
# Set 30-day lifecycle on the bucket (idempotent)
|
||||
mc ilm rule add --expire-days 30 nas1/backup-gitea 2>/dev/null || true
|
||||
volumeMounts:
|
||||
@@ -69,10 +69,10 @@ spec:
|
||||
- name: MINIO_ACCESS_KEY
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: gitea-config
|
||||
name: gitea-backup
|
||||
key: minio_key
|
||||
- name: MINIO_SECRET_KEY
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: gitea-config
|
||||
name: gitea-backup
|
||||
key: minio_secret
|
||||
|
||||
@@ -12,3 +12,20 @@ spec:
|
||||
tls:
|
||||
- hosts:
|
||||
- gitea
|
||||
---
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: gitea-direct
|
||||
spec:
|
||||
rules:
|
||||
- host: git.k3s.thehellings.lan
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: gitea-release-http
|
||||
port:
|
||||
name: http
|
||||
|
||||
@@ -1,5 +1,32 @@
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: gitea-backup
|
||||
spec:
|
||||
target:
|
||||
name: gitea-backup
|
||||
deletionPolicy: Delete
|
||||
template:
|
||||
type: Opaque
|
||||
data:
|
||||
minio_key: "{{ .minio_key }}"
|
||||
minio_secret: "{{ .minio_secret }}"
|
||||
secretStoreRef:
|
||||
name: bitwarden-login
|
||||
kind: ClusterSecretStore
|
||||
data:
|
||||
# MinIO credentials
|
||||
- secretKey: minio_key
|
||||
remoteRef:
|
||||
key: dfb2f0c8-110d-4e96-83a7-b49c001c0897
|
||||
property: username
|
||||
- secretKey: minio_secret
|
||||
remoteRef:
|
||||
key: dfb2f0c8-110d-4e96-83a7-b49c001c0897
|
||||
property: password
|
||||
---
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: gitea-config
|
||||
spec:
|
||||
@@ -21,23 +48,14 @@ spec:
|
||||
name: bitwarden-login
|
||||
kind: ClusterSecretStore
|
||||
data:
|
||||
# MinIO credentials
|
||||
- secretKey: minio_key
|
||||
remoteRef:
|
||||
key: dcbcf704-7dce-48d7-bbd1-b3a801875b3d
|
||||
property: username
|
||||
- secretKey: minio_secret
|
||||
remoteRef:
|
||||
key: dcbcf704-7dce-48d7-bbd1-b3a801875b3d
|
||||
property: password
|
||||
# MinIO credentials for NAS1
|
||||
- secretKey: minio_nas1_key
|
||||
remoteRef:
|
||||
key: c4c66ab3-2ade-4086-9c0d-b3a80172b1ba
|
||||
key: 33e8e4e0-eb90-484c-9ec9-b3a8018077a3
|
||||
property: username
|
||||
- secretKey: minio_nas1_secret
|
||||
remoteRef:
|
||||
key: c4c66ab3-2ade-4086-9c0d-b3a80172b1ba
|
||||
key: 33e8e4e0-eb90-484c-9ec9-b3a8018077a3
|
||||
property: password
|
||||
# Postgres credentials
|
||||
- secretKey: dbuser
|
||||
|
||||
@@ -27,7 +27,7 @@ spec:
|
||||
chart:
|
||||
spec:
|
||||
chart: longhorn
|
||||
version: "1.11.2"
|
||||
version: "1.11.3"
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: longhorn
|
||||
@@ -141,6 +141,10 @@ spec:
|
||||
number: 80
|
||||
- <<: *host
|
||||
host: longhorn.kubernetes
|
||||
- <<: *host
|
||||
host: longhorn.k3s.nebula.thehellings.com
|
||||
- <<: *host
|
||||
host: longhorn.k3s.thehellings.lan
|
||||
---
|
||||
apiVersion: storage.k8s.io/v1
|
||||
kind: StorageClass
|
||||
|
||||
@@ -33,24 +33,24 @@ spec:
|
||||
access-key: "{{ .minio_key }}"
|
||||
secret-key: "{{ .minio_secret }}"
|
||||
rclone.conf: |
|
||||
[nas1minio]
|
||||
[garage]
|
||||
type = s3
|
||||
provider = Minio
|
||||
endpoint = http://nas1.shire-zebra.ts.net:9000
|
||||
endpoint = http://nas1.shire-zebra.ts.net:30188
|
||||
access_key_id = {{ .minio_key }}
|
||||
secret_access_key = {{ .minio_secret }}
|
||||
region = us-east-1
|
||||
region = garage
|
||||
secretStoreRef:
|
||||
name: bitwarden-login
|
||||
kind: ClusterSecretStore
|
||||
data:
|
||||
- secretKey: minio_key
|
||||
remoteRef:
|
||||
key: c4c66ab3-2ade-4086-9c0d-b3a80172b1ba
|
||||
key: 8fce2750-aa62-4892-b90c-b49c001f494b
|
||||
property: username
|
||||
- secretKey: minio_secret
|
||||
remoteRef:
|
||||
key: c4c66ab3-2ade-4086-9c0d-b3a80172b1ba
|
||||
key: 8fce2750-aa62-4892-b90c-b49c001f494b
|
||||
property: password
|
||||
---
|
||||
apiVersion: v1
|
||||
@@ -128,7 +128,7 @@ spec:
|
||||
--progress \
|
||||
--transfers 4 \
|
||||
--checkers 8 \
|
||||
/staging nas1minio:immich
|
||||
/staging garage:immich
|
||||
volumeMounts:
|
||||
- name: staging
|
||||
mountPath: /staging
|
||||
|
||||
@@ -32,7 +32,7 @@ spec:
|
||||
containers:
|
||||
main:
|
||||
image:
|
||||
tag: v2.7.5
|
||||
tag: v3.1.0
|
||||
env:
|
||||
DB_HOSTNAME: immich-rw
|
||||
DB_DATABASE_NAME: immich
|
||||
|
||||
@@ -22,6 +22,10 @@ spec:
|
||||
name: immich-server
|
||||
port:
|
||||
name: http
|
||||
- <<: *host
|
||||
host: immich.k3s.nebula.thehellings.com
|
||||
- <<: *host
|
||||
host: immich.k3s.thehellings.lan
|
||||
---
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
|
||||
@@ -10,7 +10,4 @@ resources:
|
||||
- immich
|
||||
- monitoring
|
||||
- pinchflat
|
||||
- smokeping
|
||||
- uptimekuma
|
||||
- donetick
|
||||
- gitea
|
||||
|
||||
@@ -13,3 +13,20 @@ spec:
|
||||
tls:
|
||||
- hosts:
|
||||
- matrix
|
||||
---
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: matrix-direct
|
||||
spec:
|
||||
rules:
|
||||
- host: matrix.k3s.thehellings.lan
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: dendrite
|
||||
port:
|
||||
number: 8008
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: smokeping
|
||||
labels:
|
||||
app: smokeping
|
||||
spec:
|
||||
replicas: 1
|
||||
strategy:
|
||||
type: Recreate
|
||||
selector:
|
||||
matchLabels:
|
||||
app: smokeping
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: smokeping
|
||||
spec:
|
||||
containers:
|
||||
- name: smokeping
|
||||
image: docker.io/linuxserver/smokeping:2.9.0
|
||||
imagePullPolicy: IfNotPresent
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 80
|
||||
protocol: TCP
|
||||
volumeMounts:
|
||||
- name: config
|
||||
mountPath: /config
|
||||
- name: data
|
||||
mountPath: /data
|
||||
env:
|
||||
- name: PUID
|
||||
value: "1000"
|
||||
- name: PGID
|
||||
value: "1000"
|
||||
- name: TZ
|
||||
value: "America/Chicago"
|
||||
#- name: MASTER_URL
|
||||
# value: "https://ping.shire-zebra.ts.net"
|
||||
# SHARED_SECRET if you want to run a cluster
|
||||
# CACHE_DIR if you need to explicitly state that
|
||||
restartPolicy: Always
|
||||
volumes:
|
||||
- name: config
|
||||
persistentVolumeClaim:
|
||||
claimName: smokeping-config
|
||||
- name: data
|
||||
persistentVolumeClaim:
|
||||
claimName: smokeping-data
|
||||
@@ -1,14 +0,0 @@
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: smokeping-tailscale
|
||||
spec:
|
||||
ingressClassName: tailscale
|
||||
defaultBackend:
|
||||
service:
|
||||
name: smokeping
|
||||
port:
|
||||
name: http
|
||||
tls:
|
||||
- hosts:
|
||||
- ping
|
||||
@@ -1,8 +0,0 @@
|
||||
namespace: smokeping
|
||||
|
||||
resources:
|
||||
- namespace.yaml
|
||||
- pvc.yaml
|
||||
- deployment.yaml
|
||||
- service.yaml
|
||||
- ingress.yaml
|
||||
@@ -1,4 +0,0 @@
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: smokeping
|
||||
@@ -1,23 +0,0 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: smokeping-config
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
storageClassName: longhorn-default
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: smokeping-data
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
storageClassName: longhorn-default
|
||||
resources:
|
||||
requests:
|
||||
storage: 25Gi
|
||||
@@ -1,15 +0,0 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: smokeping
|
||||
labels:
|
||||
app: smokeping
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- port: 80
|
||||
targetPort: http
|
||||
protocol: TCP
|
||||
name: http
|
||||
selector:
|
||||
app: smokeping
|
||||
@@ -1,38 +0,0 @@
|
||||
apiVersion: source.toolkit.fluxcd.io/v1
|
||||
kind: HelmRepository
|
||||
metadata:
|
||||
name: uptime-kuma
|
||||
namespace: uptime-kuma
|
||||
spec:
|
||||
interval: "24h"
|
||||
url: "https://helm.irsigler.cloud"
|
||||
---
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: uptime-kuma
|
||||
namespace: uptime-kuma
|
||||
spec:
|
||||
interval: 10m
|
||||
chart:
|
||||
spec:
|
||||
chart: uptime-kuma
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: uptime-kuma
|
||||
interval: "1h"
|
||||
dependsOn:
|
||||
- name: longhorn
|
||||
namespace: longhorn-system
|
||||
- name: mariadb-cluster
|
||||
namespace: mariadb-operator
|
||||
values:
|
||||
volume:
|
||||
storageClassName: longhorn-default
|
||||
image:
|
||||
tag: "2.0.2"
|
||||
externalDatabase:
|
||||
enabled: true
|
||||
hostname: mariadb-cluster.mariadb-operator.svc.cluster.local
|
||||
database: uptimekuma
|
||||
existingSecret: uptimekuma-mariadb-password
|
||||
@@ -1,15 +0,0 @@
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: uptime-kuma-tailscale
|
||||
namespace: uptime-kuma
|
||||
spec:
|
||||
ingressClassName: tailscale
|
||||
defaultBackend:
|
||||
service:
|
||||
name: uptime-kuma
|
||||
port:
|
||||
number: 3001
|
||||
tls:
|
||||
- hosts:
|
||||
- kuma
|
||||
@@ -1,7 +0,0 @@
|
||||
namespace: uptimekuma
|
||||
|
||||
resources:
|
||||
- namespace.yaml
|
||||
- secrets.yaml
|
||||
- chart.yaml
|
||||
- ingress.yaml
|
||||
@@ -1,4 +0,0 @@
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: uptimekuma
|
||||
@@ -1,27 +0,0 @@
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: uptimekuma-mariadb-password
|
||||
spec:
|
||||
target:
|
||||
name: uptimekuma-mariadb-password
|
||||
deletionPolicy: Delete
|
||||
template:
|
||||
type: kubernetes.io/basic-auth
|
||||
data:
|
||||
username: |-
|
||||
{{ .username }}
|
||||
password: |-
|
||||
{{ .password }}
|
||||
secretStoreRef:
|
||||
name: bitwarden-login
|
||||
kind: ClusterSecretStore
|
||||
data:
|
||||
- secretKey: username
|
||||
remoteRef:
|
||||
key: 4df95656-9f9c-4916-8e34-b3a200376365
|
||||
property: username
|
||||
- secretKey: password
|
||||
remoteRef:
|
||||
key: 4df95656-9f9c-4916-8e34-b3a200376365
|
||||
property: password
|
||||
@@ -62,12 +62,12 @@ in
|
||||
if cfg.cache then
|
||||
[
|
||||
#"http://chronicles.shire-zebra.ts.net:9000/binary-cache/"
|
||||
"http://nas1.shire-zebra.ts.net:9000/niks3"
|
||||
"http://niks3.nas1.shire-zebra.ts.net:30189/"
|
||||
#"http://nas1.shire-zebra.ts.net:8080/default"
|
||||
]
|
||||
else
|
||||
[
|
||||
"http://nas1.thehellings.lan:8080/default"
|
||||
"http://niks3.nas1.thehellings.lan:30189/"
|
||||
]
|
||||
)
|
||||
++ [
|
||||
|
||||
@@ -98,6 +98,19 @@ in
|
||||
inherit labels;
|
||||
inherit (cfg) name;
|
||||
enable = true;
|
||||
hostPackages = with pkgs; [
|
||||
bash
|
||||
buildah
|
||||
coreutils
|
||||
curl
|
||||
gawk
|
||||
gitMinimal
|
||||
gnused
|
||||
nix
|
||||
nodejs
|
||||
podman
|
||||
wget
|
||||
];
|
||||
url = cfg.instanceURL;
|
||||
tokenFile = config.age.secrets."gitea-runner-${host}-podman".path;
|
||||
settings = {
|
||||
|
||||
@@ -112,20 +112,22 @@ in
|
||||
keepalived = {
|
||||
enable = true;
|
||||
openFirewall = true;
|
||||
vrrpInstances.kubernetes = {
|
||||
interface = cfg.vipInterface;
|
||||
priority = cfg.priority;
|
||||
state = if (config.networking.hostName == "isaiah") then "MASTER" else "BACKUP";
|
||||
virtualIps = [
|
||||
{
|
||||
addr = "${keepaliveIp}/16";
|
||||
dev = cfg.vipInterface;
|
||||
}
|
||||
];
|
||||
virtualRouterId = 77;
|
||||
extraConfig = ''
|
||||
advert_int 1
|
||||
'';
|
||||
vrrpInstances = {
|
||||
kubernetes = {
|
||||
interface = cfg.vipInterface;
|
||||
priority = cfg.priority;
|
||||
state = if (config.networking.hostName == "isaiah") then "MASTER" else "BACKUP";
|
||||
virtualIps = [
|
||||
{
|
||||
addr = "${keepaliveIp}/16";
|
||||
dev = cfg.vipInterface;
|
||||
}
|
||||
];
|
||||
virtualRouterId = 77;
|
||||
extraConfig = ''
|
||||
advert_int 1
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
openiscsi = {
|
||||
|
||||
+13
-2
@@ -23,6 +23,13 @@ with lib;
|
||||
type = types.str;
|
||||
description = "Kernel module type to install - amd, intel, etc";
|
||||
};
|
||||
host = mkOption {
|
||||
type = types.enum [
|
||||
"libvirt"
|
||||
"vbox"
|
||||
];
|
||||
description = "Which VM hosting type to configure";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -35,7 +42,6 @@ with lib;
|
||||
nixos-generators
|
||||
packer
|
||||
swtpm
|
||||
virt-manager
|
||||
virtio-win
|
||||
xorriso
|
||||
];
|
||||
@@ -44,7 +50,7 @@ with lib;
|
||||
|
||||
# Enable the virtualisation services
|
||||
virtualisation = {
|
||||
libvirtd = {
|
||||
libvirtd = mkIf (cfg.host == "libvirt") {
|
||||
enable = true;
|
||||
onBoot = "ignore"; # Do not auto-restart VMs on boot, unless they are marked autostart
|
||||
qemu = {
|
||||
@@ -54,6 +60,11 @@ with lib;
|
||||
};
|
||||
};
|
||||
};
|
||||
virtualbox.host = mkIf (cfg.host == "vbox") {
|
||||
enable = true;
|
||||
enableExtensionPack = true;
|
||||
headless = true;
|
||||
};
|
||||
};
|
||||
|
||||
boot.extraModprobeConfig = "options kvm_${cfg.system} nested=1";
|
||||
|
||||
+70
-80
@@ -13,13 +13,6 @@
|
||||
"ip": "10.42.1.17",
|
||||
"system": "x86_64-linux"
|
||||
},
|
||||
"chronicles": {
|
||||
"ip": "10.42.1.4",
|
||||
"pubkey": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEBecZUva9OnZuXLaBun6/1ITo5f9p0YMLPD+q0egLRS",
|
||||
"external": true,
|
||||
"ts": "100.119.228.115",
|
||||
"aliases": ["s3"]
|
||||
},
|
||||
"exodus": {
|
||||
"ip": null,
|
||||
"pubkey": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFxmnCj2E9DxcnefPW+n4yCuLShxqr0p024riogdeXA3",
|
||||
@@ -35,13 +28,14 @@
|
||||
"tags": ["router", "server"],
|
||||
"nebulaIp": "10.157.0.2"
|
||||
},
|
||||
"hermes": {
|
||||
"ip": "10.42.1.18",
|
||||
"mac": "BC:24:11:EF:3B:94",
|
||||
"nebulaIp": "10.157.0.8",
|
||||
"pubkey": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILFYyzz/9i5rXprCQj9IL1ulrbQ6E9BOSeOcvf4D/b0G",
|
||||
"system": "x86_64-linux",
|
||||
"tags": ["server"]
|
||||
"gregory.hellings-mbp": {
|
||||
"external": true,
|
||||
"system": "aarch64-darwin",
|
||||
"user": "gregory.hellings"
|
||||
},
|
||||
"gregs-MacBook-Pro-16-inch-Nov-2024": {
|
||||
"external": true,
|
||||
"system": "aarch64-darwin"
|
||||
},
|
||||
"hosea": {
|
||||
"ip": "10.42.1.7",
|
||||
@@ -51,10 +45,6 @@
|
||||
"tags": ["server"],
|
||||
"nebulaIp": "10.157.0.3"
|
||||
},
|
||||
"icdm-root": {
|
||||
"external": true,
|
||||
"system": "x86_64-linux"
|
||||
},
|
||||
"isaiah": {
|
||||
"builder": true,
|
||||
"ip": "10.42.1.6",
|
||||
@@ -69,12 +59,12 @@
|
||||
"external": true,
|
||||
"system": "x86_64-linux"
|
||||
},
|
||||
"gregory.hellings-mbp": {
|
||||
"ivr": {
|
||||
"external": true,
|
||||
"system": "aarch64-darwin",
|
||||
"user": "gregory.hellings"
|
||||
"system": "aarch64-darwin"
|
||||
},
|
||||
"jeremiah": {
|
||||
"aliases": ["buildbot"],
|
||||
"builder": true,
|
||||
"ip": "10.42.1.8",
|
||||
"pubkey": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOjQjXq9WYU2Ki27BR9WwJ4ZruS/lJXbjC1b0Q42Adi0",
|
||||
@@ -84,20 +74,19 @@
|
||||
"tags": ["builder", "kube", "server"],
|
||||
"nebulaIp": "10.157.0.5"
|
||||
},
|
||||
"joel": {
|
||||
"external": true,
|
||||
"ip": "10.42.0.4",
|
||||
"ts": null
|
||||
},
|
||||
"gregs-MacBook-Pro-16-inch-Nov-2024": {
|
||||
"external": true,
|
||||
"system": "aarch64-darwin"
|
||||
"kuma": {
|
||||
"ip": "10.42.1.19",
|
||||
"nebulaIp": "10.157.0.8",
|
||||
"pubkey": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIhr+LmYMOk4Hixxew2FiAvL8sycgQvnhK8PBGjfnkJb",
|
||||
"system": "x86_64-linux",
|
||||
"tags": ["server"]
|
||||
},
|
||||
"lithic": {
|
||||
"external": true,
|
||||
"system": "aarch64-darwin"
|
||||
},
|
||||
"linode": {
|
||||
"connectAddr": "thehellings.com",
|
||||
"ip": null,
|
||||
"pubkey": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMv9Zud3kZOl86gtmkn+uj3D4kiXWDPtyUL02VVLNR4Q",
|
||||
"ts": "100.109.86.8",
|
||||
@@ -105,10 +94,6 @@
|
||||
"tags": ["public", "server"],
|
||||
"nebulaIp": "10.157.0.1"
|
||||
},
|
||||
"ivr": {
|
||||
"external": true,
|
||||
"system": "aarch64-darwin"
|
||||
},
|
||||
"MacBook-Pro.local": {
|
||||
"external": true,
|
||||
"system": "aarch64-darwin"
|
||||
@@ -117,57 +102,10 @@
|
||||
"external": true,
|
||||
"system": "aarch64-darwin"
|
||||
},
|
||||
"nas1": {
|
||||
"external": true,
|
||||
"ip": "10.42.1.14",
|
||||
"ts": "100.114.187.61"
|
||||
},
|
||||
"nixos": {
|
||||
"external": true,
|
||||
"system": "x86_64-linux"
|
||||
},
|
||||
"printer": {
|
||||
"external": true,
|
||||
"ip": "10.42.1.3"
|
||||
},
|
||||
"proxmoxtemplate": {
|
||||
"external": true,
|
||||
"system": "x86_64-linux"
|
||||
},
|
||||
"pve2": {
|
||||
"external": true,
|
||||
"ip": "10.42.1.15",
|
||||
"system": "x86_64-linux"
|
||||
},
|
||||
"pve2bmc": {
|
||||
"derp": "10.42.2.129",
|
||||
"external": true,
|
||||
"mac": "00:25:90:4b:34:e8",
|
||||
"ip": "10.42.6.2",
|
||||
"system": "ipmi"
|
||||
},
|
||||
"pve3": {
|
||||
"external": true,
|
||||
"ip": "10.42.1.16",
|
||||
"system": "x86_64-linux"
|
||||
},
|
||||
"pve3bmc": {
|
||||
"derp": "10.42.2.181",
|
||||
"external": true,
|
||||
"ip": "10.42.6.3",
|
||||
"mac": "00:25:90:4a:dc:2e",
|
||||
"system": "ipmi"
|
||||
},
|
||||
"pve4": {
|
||||
"external": true,
|
||||
"ip": "10.42.1.17",
|
||||
"system": "x86_64-linux"
|
||||
},
|
||||
"pve4bmc": {
|
||||
"external": true,
|
||||
"ip": "10.42.6.4",
|
||||
"system": "ipmi"
|
||||
},
|
||||
"wsl": {
|
||||
"external": true,
|
||||
"system": "aarch64-linux"
|
||||
@@ -182,5 +120,57 @@
|
||||
"tags": ["builder", "kube", "server"],
|
||||
"nebulaIp": "10.157.0.6"
|
||||
}
|
||||
},
|
||||
"external": {
|
||||
"chronicles": {
|
||||
"ip": "10.42.1.4",
|
||||
"pubkey": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEBecZUva9OnZuXLaBun6/1ITo5f9p0YMLPD+q0egLRS",
|
||||
"ts": "100.119.228.115",
|
||||
"aliases": ["s3"]
|
||||
},
|
||||
"hermes": {
|
||||
"ip": "10.42.1.18",
|
||||
"mac": "BC:24:11:E4:72:AB",
|
||||
"nebulaIp": "10.157.0.8",
|
||||
"pubkey": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILFYyzz/9i5rXprCQj9IL1ulrbQ6E9BOSeOcvf4D/b0G",
|
||||
"tags": ["server"]
|
||||
},
|
||||
"joel": {
|
||||
"ip": "10.42.0.4"
|
||||
},
|
||||
"k3s": {
|
||||
"aliases": ["*.k3s"],
|
||||
"ip": "10.42.5.1",
|
||||
"nebulaIp": "10.157.100.1"
|
||||
},
|
||||
"nas1": {
|
||||
"aliases": ["*.nas1"],
|
||||
"ip": "10.42.1.14",
|
||||
"ts": "100.114.187.61"
|
||||
},
|
||||
"printer": {
|
||||
"ip": "10.42.1.3"
|
||||
},
|
||||
"pve2": {
|
||||
"ip": "10.42.1.15"
|
||||
},
|
||||
"pve2bmc": {
|
||||
"ip": "10.42.6.2",
|
||||
"mac": "00:25:90:4b:34:e8"
|
||||
},
|
||||
"pve3": {
|
||||
"ip": "10.42.1.16"
|
||||
},
|
||||
"pve3bmc": {
|
||||
"ip": "10.42.6.3",
|
||||
"mac": "00:25:90:4a:dc:2e"
|
||||
},
|
||||
"pve4": {
|
||||
"ip": "10.42.1.17"
|
||||
},
|
||||
"pve4bmc": {
|
||||
"ip": "10.42.6.4",
|
||||
"mac": "00:25:90:4a:d8:2e"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+10
-6
@@ -16,12 +16,15 @@ let
|
||||
adblock_update = c ./adblock_update.nix { };
|
||||
brew = c ./homebrew.nix { };
|
||||
create_ssl = c ./create_ssl.nix { };
|
||||
dockerCompat = pkgs.runCommand "docker-compat" {
|
||||
nativeBuildInputs = [];
|
||||
} ''
|
||||
mkdir -p $out/bin
|
||||
ln -s ${pkgs.podman}/bin/podman $out/bin/docker
|
||||
'';
|
||||
dockerCompat =
|
||||
pkgs.runCommand "docker-compat"
|
||||
{
|
||||
nativeBuildInputs = [ ];
|
||||
}
|
||||
''
|
||||
mkdir -p $out/bin
|
||||
ln -s ${pkgs.podman}/bin/podman $out/bin/docker
|
||||
'';
|
||||
gcc-tune = c ./gcc-tune.nix { };
|
||||
#gen-build = c ./gen-build { };
|
||||
hms = c ./hms { };
|
||||
@@ -29,6 +32,7 @@ let
|
||||
inject = c ./inject.nix { };
|
||||
setup-ssh = c ./setup-ssh { };
|
||||
upgrade-pg-cluster = c ./upgrade-pg-cluster.nix { };
|
||||
zim-updater = c ./zim/updater.nix { };
|
||||
};
|
||||
x86Linux = {
|
||||
qemu-hook = c ./qemu-hook.nix { };
|
||||
|
||||
+28
-28
@@ -2,18 +2,18 @@
|
||||
"en": {
|
||||
"gutenberg": {
|
||||
"name": "gutenberg_en_all",
|
||||
"version": "2023-08",
|
||||
"hash": "sha256-OXmdHdsLZcW4nCUQsy7sMpUssS8NV7ztkCgS/nsISuw="
|
||||
"version": "2025-11",
|
||||
"hash": "sha256-AWd8jVVKHKssv9AgrJnryn3Wx0084NE/JmorpgPfryg="
|
||||
},
|
||||
"phet": {
|
||||
"name": "phet_en_all",
|
||||
"version": "2025-03",
|
||||
"hash": "sha256-ARuUzU2o17J2/ZedHc2acXl33dtHCbQJEb72UQUEm1Y="
|
||||
"version": "2026-05",
|
||||
"hash": "sha256-zAAq/X5rjQUiYmjMpBtWP5z3J2ZHJMmIxFKnxLAhOlA="
|
||||
},
|
||||
"wikibooks": {
|
||||
"name": "wikibooks_en_all_maxi",
|
||||
"version": "2025-10",
|
||||
"hash": "sha256-ONBh/ze1Fv2Ffm5b9vDzYS/i2cWSa4pM4MLZnozr2n8="
|
||||
"version": "2026-04",
|
||||
"hash": "sha256-wt7Zr+RkfCsFrOudMCYBADacu6IvPQDkZ6Y0VG2j9hA="
|
||||
},
|
||||
"wikipedia": {
|
||||
"name": "wikipedia_en_all_maxi",
|
||||
@@ -22,40 +22,40 @@
|
||||
},
|
||||
"wikisource": {
|
||||
"name": "wikisource_en_all_maxi",
|
||||
"version": "2025-11",
|
||||
"hash": "sha256-p1Jio+PMTZVSLIDIOBeMG3acXJg83CwQM7zIWDUyozM="
|
||||
"version": "2026-05",
|
||||
"hash": "sha256-OA4b+U8mxpcX3fst6hrMyctucYTQOlG/b4qZDiVlcf4="
|
||||
},
|
||||
"wikiversity": {
|
||||
"name": "wikiversity_en_all_maxi",
|
||||
"version": "2025-11",
|
||||
"hash": "sha256-IG/gAUdc/vHRrIWGHhw8vMJdLWwqrNbfh+SiclQRIAI="
|
||||
"version": "2026-05",
|
||||
"hash": "sha256-8mZ1CSUcF4QnDIyN0M2KedQ4pcSUCmzHBlOm93MYpCE="
|
||||
},
|
||||
"wiktionary": {
|
||||
"name": "wiktionary_en_all_nopic",
|
||||
"version": "2025-09",
|
||||
"hash": "sha256-Ghcb60qeGaSJtTKQkJoMx/XucX7Lt1XY145lD3gHlMg="
|
||||
"version": "2026-05",
|
||||
"hash": "sha256-Dwiz+viVQt0zb077R9KQRgtUtxG9ixA/DeXAkCdD4rM="
|
||||
}
|
||||
},
|
||||
"fr": {
|
||||
"gutenberg": {
|
||||
"name": "gutenberg_fr_all",
|
||||
"version": "2025-10",
|
||||
"hash": "sha256-gLHxLXJNwwcxM/mZHtoJ8ojbGQ1fugxgni/+RXccwhU="
|
||||
"version": "2026-01",
|
||||
"hash": "sha256-sGn1TeKwBK0+Er5YOJWq6g0itEm4gIGvKxv/PW0DIao="
|
||||
},
|
||||
"phet": {
|
||||
"name": "phet_fr_all",
|
||||
"version": "2025-03",
|
||||
"hash": "sha256-CSboZNTIowLLhp1u9wkxH8xmu3LvQNx5q493AOYJRIc="
|
||||
"version": "2026-05",
|
||||
"hash": "sha256-bJmchFnaPcofE/hy3ZcRggMT9osHqXwLbwMLJ+cpF28="
|
||||
},
|
||||
"wikibooks": {
|
||||
"name": "wikibooks_fr_all_maxi",
|
||||
"version": "2025-09",
|
||||
"hash": "sha256-KHCc/73L5Bd9iZ47SRV6vpI8fVM1v9hk1TpEvTro2uo="
|
||||
"version": "2026-07",
|
||||
"hash": "sha256-csI+E5UFGi42BLGWWHxQhVr5KSihCFc53KGKwo557Ck="
|
||||
},
|
||||
"wikipedia": {
|
||||
"name": "wikipedia_fr_all_maxi",
|
||||
"version": "2025-06",
|
||||
"hash": "sha256-ve7Mbh96/ObNbV/KVNYZpfLN+HdWlJ7C5LItEdVkRH0="
|
||||
"version": "2026-05",
|
||||
"hash": "sha256-YUAbGzYYr+c2RQqGjHIF9XL1kNsxDgRKnHK1H7/PtDE="
|
||||
},
|
||||
"wikisource": {
|
||||
"name": "wikisource_fr_all_maxi",
|
||||
@@ -64,25 +64,25 @@
|
||||
},
|
||||
"wikiversity": {
|
||||
"name": "wikiversity_fr_all_maxi",
|
||||
"version": "2025-09",
|
||||
"hash": "sha256-55fdtw/cRezq6nkRp6wuwkukBiqsQKdwh9QWVAgFcBI="
|
||||
"version": "2026-05",
|
||||
"hash": "sha256-nVDHtkWIOJkoiGixnA1zVR1QS58thjc12FJyagK3Ec0="
|
||||
},
|
||||
"wiktionary": {
|
||||
"name": "wiktionary_fr_all_nopic",
|
||||
"version": "2025-11",
|
||||
"hash": "sha256-P0CJptee5rDzccxyRDBzyRLuuFOcaLsJYi6DkBFUfIc="
|
||||
"version": "2026-05",
|
||||
"hash": "sha256-7UXByW2IIL0hec8RPT39jpg5IEGvRMD47hc4Y4vFkJs="
|
||||
}
|
||||
},
|
||||
"ht": {
|
||||
"phet": {
|
||||
"name": "phet_ht_all",
|
||||
"version": "2025-03",
|
||||
"hash": "sha256-bHrPzE8H7ptrP6r5wPlXSsXNlTiKxJ9KatABC4kwx+s="
|
||||
"version": "2026-05",
|
||||
"hash": "sha256-GiJ1jllhioyMYidQ7+Lcbdd9JN2yf04ZQgnO8XaGAqY="
|
||||
},
|
||||
"wikipedia": {
|
||||
"name": "wikipedia_ht_all_maxi",
|
||||
"version": "2026-04",
|
||||
"hash": "sha256-qUX0pKxIyNsWX4V6kNIsP4Z9nc6TDhwdDR0MmpDOQFs="
|
||||
"version": "2026-07",
|
||||
"hash": "sha256-InS9cMRaIv9ArlKVwKUypz56m4DgSR7Tl6XpSTMzH+o="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+167
-112
@@ -9,7 +9,7 @@ import (
|
||||
"net/http"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"reflect"
|
||||
"regexp"
|
||||
"sort"
|
||||
"strings"
|
||||
@@ -17,27 +17,144 @@ import (
|
||||
|
||||
const BASE = "https://download.kiwix.org/zim"
|
||||
|
||||
func getTypes() []string {
|
||||
return []string{
|
||||
"phet",
|
||||
"wikipedia",
|
||||
"wiktionary",
|
||||
"wikiversity",
|
||||
"wikisource",
|
||||
"wikibooks",
|
||||
"gutenberg",
|
||||
"ted",
|
||||
// ///////////////////////////////////////////////////////////////////////////
|
||||
// //////////////// THE BLOB ITSELF /////////////////////////////////////////
|
||||
// ///////////////////////////////////////////////////////////////////////////
|
||||
type Blobs struct {
|
||||
En Language `json:"en"`
|
||||
Fr Language `json:"fr"`
|
||||
Ht Language `json:"ht"`
|
||||
dirty bool
|
||||
}
|
||||
|
||||
func (b *Blobs) Populate() {
|
||||
done := make(chan bool)
|
||||
waitFor := 0
|
||||
// Launch self-populating efforts
|
||||
blobType := reflect.Indirect(reflect.ValueOf(b)).Type()
|
||||
for f := range blobType.Fields() {
|
||||
if f.IsExported() {
|
||||
//fmt.Printf("%s:\tBeginning population efforts\n", f.Name)
|
||||
waitFor += 1
|
||||
go reflect.Indirect(reflect.ValueOf(b)).
|
||||
FieldByName(f.Name).
|
||||
Addr().
|
||||
Interface().
|
||||
(*Language).
|
||||
Populate(strings.ToLower(f.Name), done)
|
||||
}
|
||||
}
|
||||
// Wait until all languages are completed
|
||||
for d := range done {
|
||||
waitFor -= 1
|
||||
if waitFor == 0 {
|
||||
fmt.Println("Completed waiting for all languages")
|
||||
close(done)
|
||||
break
|
||||
}
|
||||
b.dirty = b.dirty || d
|
||||
}
|
||||
}
|
||||
|
||||
func getLanguages() []string {
|
||||
return []string{
|
||||
"ht",
|
||||
"en",
|
||||
"fr",
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////// The Language ///////////////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
type Language struct {
|
||||
Gutenberg *Zim `json:"gutenberg,omitempty"`
|
||||
Phet *Zim `json:"phet,omitempty"`
|
||||
Ted *Zim `json:"ted,omitempty"`
|
||||
Wikibooks *Zim `json:"wikibooks,omitempty"`
|
||||
Wikipedia *Zim `json:"wikipedia,omitempty"`
|
||||
Wikisource *Zim `json:"wikisource,omitempty"`
|
||||
Wikiversity *Zim `json:"wikiversity,omitempty"`
|
||||
Wiktionary *Zim `json:"wiktionary,omitempty"`
|
||||
dirty bool
|
||||
}
|
||||
|
||||
func (l *Language) Populate(code string, done chan bool) {
|
||||
childDone := make(chan bool)
|
||||
waitFor := 0
|
||||
languageType := reflect.Indirect(reflect.ValueOf(l)).Type()
|
||||
l.dirty = false
|
||||
for f := range languageType.Fields() {
|
||||
if f.IsExported() {
|
||||
ptrPtrZim := reflect.Indirect(reflect.ValueOf(l)).
|
||||
FieldByName(f.Name)
|
||||
if ptrPtrZim.IsValid() && !ptrPtrZim.IsNil() {
|
||||
waitFor += 1
|
||||
go reflect.Indirect(ptrPtrZim).
|
||||
Addr().
|
||||
Interface().
|
||||
(*Zim).
|
||||
Populate(strings.ToLower(f.Name), code, childDone)
|
||||
} else {
|
||||
// TODO: Figure out how to set a value over the nil pointer
|
||||
// of the field, so we can auto-detect when these are available
|
||||
// in the future
|
||||
// waitFor += 1
|
||||
//z := &Zim{Name: f.Name, Version: "1999-01-01", Hash: ""}
|
||||
//ptrPtrZim.Set(reflect.ValueOf(z))
|
||||
//go z.Populate(strings.ToLower(f.Name), code, childDone)
|
||||
}
|
||||
}
|
||||
}
|
||||
// Wait until children are all done
|
||||
for d := range childDone {
|
||||
waitFor -= 1
|
||||
if waitFor == 0 {
|
||||
close(childDone)
|
||||
break
|
||||
}
|
||||
l.dirty = l.dirty || d
|
||||
}
|
||||
|
||||
//fmt.Printf("%s\tFinished populate\n", code)
|
||||
done <- l.dirty
|
||||
}
|
||||
|
||||
// ///////////////////////////////////////////////////////////////////////////
|
||||
// ////////////////////// A Single Zim ///////////////////////////////////////
|
||||
// ///////////////////////////////////////////////////////////////////////////
|
||||
type Zim struct {
|
||||
Name string `json:"name"`
|
||||
Version string `json:"version"`
|
||||
Hash string `json:"hash"`
|
||||
dirty bool
|
||||
}
|
||||
|
||||
func (z *Zim) Populate(category string, language string, done chan bool) {
|
||||
//fmt.Printf("%s:%s\tBeginning populate for\n", language, category)
|
||||
// Look for a possible Zim file
|
||||
links := getLinks(getPage(category))
|
||||
link, err := getName(links, category, language)
|
||||
if err != nil {
|
||||
fmt.Printf("%s:%s\tNo zim found\n", language, category)
|
||||
done <- false
|
||||
return
|
||||
}
|
||||
//fmt.Printf("%s:%s\tFound link: %s\n", category, language, link)
|
||||
// Extract name and version
|
||||
re := regexp.MustCompilePOSIX("^([a-zA-Z_]+)_([0-9-]+)\\.zim$")
|
||||
match := re.FindStringSubmatch(link)
|
||||
if len(match) != 3 {
|
||||
fmt.Printf("%s:%s Matches: %s", language, category, match)
|
||||
os.Exit(1)
|
||||
}
|
||||
// Check if the name and version mismatch
|
||||
if match[1] == z.Name && match[2] == z.Version {
|
||||
fmt.Printf("Skipping existing hash: %s\n", link)
|
||||
done <- false
|
||||
} else {
|
||||
z.Name = match[1]
|
||||
z.Version = match[2]
|
||||
// Fetch the Zim file, if it differs from what we currently have
|
||||
z.UpdateHash(category)
|
||||
done <- true
|
||||
}
|
||||
}
|
||||
|
||||
// Helper function to fetch the HTML of a given type page
|
||||
func getPage(t string) string {
|
||||
page, err := http.Get(fmt.Sprintf("%s/%s/", BASE, t))
|
||||
if err != nil {
|
||||
@@ -48,6 +165,7 @@ func getPage(t string) string {
|
||||
return string(pageBytes)
|
||||
}
|
||||
|
||||
// Helper function to parse out all the links from the page
|
||||
func getLinks(page string) []string {
|
||||
ret := []string{}
|
||||
|
||||
@@ -60,6 +178,7 @@ func getLinks(page string) []string {
|
||||
return ret
|
||||
}
|
||||
|
||||
// Helper function to get the most likely link for this particular entry
|
||||
func getName(links []string, t, lang string) (string, error) {
|
||||
candidates := []string{}
|
||||
prefix := fmt.Sprintf("%s_%s_all", t, lang)
|
||||
@@ -79,44 +198,39 @@ func getName(links []string, t, lang string) (string, error) {
|
||||
}
|
||||
}
|
||||
|
||||
func getHash(ch chan result, file, category, language string) {
|
||||
// TODO: Only call this if the file doesn't already have a hash
|
||||
// in the existing file
|
||||
fmt.Printf("Fetching hash for %s\n", file)
|
||||
cmd := exec.Command( "nix-prefetch-url", fmt.Sprintf("%s/%s/%s", BASE, category, file))
|
||||
// Helper function to get the hash value from the resulting link
|
||||
func (z *Zim) UpdateHash(category string) error {
|
||||
file := fmt.Sprintf("%s_%s.zim", z.Name, z.Version)
|
||||
|
||||
// First fetch the file into our local Nix store
|
||||
fmt.Printf("Fetching hash: %s\n", file)
|
||||
cmd := exec.Command("nix-prefetch-url", fmt.Sprintf("%s/%s/%s", BASE, category, file))
|
||||
out, err := cmd.Output()
|
||||
if err != nil {
|
||||
fmt.Printf("Error fetching hash for %s (category: %s, language: %s): %v\n", file, category, language, err)
|
||||
fmt.Printf("%s: ERROR fetching hash: %v\n", file, err)
|
||||
if exitErr, ok := err.(*exec.ExitError); ok {
|
||||
fmt.Printf("Command stderr: %s\n", string(exitErr.Stderr))
|
||||
}
|
||||
ch <- result{category, language, ""}
|
||||
return
|
||||
return errors.New("Error fetching file")
|
||||
}
|
||||
hash := strings.TrimSpace(string(out))
|
||||
fmt.Printf("Successfully fetched hash for %s (category: %s, language: %s)\n", file, category, language)
|
||||
ch <- result{category, language, hash}
|
||||
}
|
||||
fmt.Printf("%s: Successfully fetched raw hash\n", file)
|
||||
fmt.Printf("%s: Hash is: %s\n", file, hash)
|
||||
|
||||
func outputIsValid(o map[string]map[string]Zim) bool {
|
||||
for a := range o {
|
||||
for b := range o[a] {
|
||||
if o[a][b].Hash == "" {
|
||||
return false
|
||||
}
|
||||
// Then, convert the hash to SRI
|
||||
cmd2 := exec.Command("nix", "hash", "convert", "--to", "sri", hash, "--hash-algo", "sha256")
|
||||
out2, err2 := cmd2.Output()
|
||||
if err2 != nil {
|
||||
fmt.Printf("%s: Error converting hash to SRI: %v\n", file, err)
|
||||
if exitErr, ok := err.(*exec.ExitError); ok {
|
||||
fmt.Printf("%s: Command stderr: %s\n", file, string(exitErr.Stderr))
|
||||
}
|
||||
return errors.New("Error fetching file")
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
type result struct {
|
||||
category, language, hash string
|
||||
}
|
||||
|
||||
type Zim struct {
|
||||
Name string `json:"name"`
|
||||
Version string `json:"version"`
|
||||
Hash string `json:"hash"`
|
||||
z.Hash = strings.TrimSpace(string(out2))
|
||||
z.dirty = true
|
||||
fmt.Printf("%s: Successfully convert hash to SRI: %s", file, out2)
|
||||
return nil
|
||||
}
|
||||
|
||||
func main() {
|
||||
@@ -125,90 +239,31 @@ func main() {
|
||||
|
||||
// Determine the output file path
|
||||
var outputPath string
|
||||
if *outputFile != "" {
|
||||
outputPath = *outputFile
|
||||
} else {
|
||||
// Get the directory where updater.go is located
|
||||
execPath, err := os.Executable()
|
||||
if err != nil {
|
||||
// Fallback to current directory if we can't determine executable path
|
||||
outputPath = "blobs.json"
|
||||
} else {
|
||||
dir := filepath.Dir(execPath)
|
||||
outputPath = filepath.Join(dir, "blobs.json")
|
||||
}
|
||||
}
|
||||
outputPath = *outputFile
|
||||
|
||||
fmt.Println("Writing file to ", outputPath)
|
||||
|
||||
// Read existing cache if it exists
|
||||
cached := make(map[string]map[string]Zim)
|
||||
var blobs Blobs
|
||||
if data, err := os.ReadFile(outputPath); err == nil {
|
||||
if err := json.Unmarshal(data, &cached); err != nil {
|
||||
if err := json.Unmarshal(data, &blobs); err != nil {
|
||||
fmt.Printf("Warning: could not parse existing cache file: %v\n", err)
|
||||
} else {
|
||||
fmt.Printf("Loaded existing cache from %s\n", outputPath)
|
||||
}
|
||||
} else {
|
||||
fmt.Printf("Error reading file: %s", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
blobs.Populate()
|
||||
|
||||
output := make(map[string]map[string]Zim)
|
||||
comms := make(chan result)
|
||||
pendingHashes := 0
|
||||
|
||||
for _, t := range getTypes() {
|
||||
page := getPage(t)
|
||||
links := getLinks(page)
|
||||
for _, lang := range getLanguages() {
|
||||
if file, err := getName(links, t, lang); err == nil {
|
||||
if _, ok := output[lang]; !ok {
|
||||
output[lang] = make(map[string]Zim)
|
||||
}
|
||||
|
||||
// Check if this file already exists in cache with same name
|
||||
if cachedLang, ok := cached[lang]; ok {
|
||||
if cachedEntry, ok := cachedLang[t]; ok && cachedEntry.Name == file {
|
||||
// Reuse cached hash
|
||||
fmt.Printf("Using cached hash for %s (category: %s, language: %s)\n", file, t, lang)
|
||||
output[lang][t] = cachedEntry
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
// File is new or name has changed, fetch hash
|
||||
output[lang][t] = Zim{file, ""}
|
||||
pendingHashes++
|
||||
go getHash(comms, file, t, lang)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Only wait for results if we actually spawned goroutines
|
||||
if pendingHashes > 0 {
|
||||
hashesReceived := 0
|
||||
for r := range comms {
|
||||
if entry, ok := output[r.language][r.category]; ok {
|
||||
entry.Hash = r.hash
|
||||
output[r.language][r.category] = entry
|
||||
}
|
||||
hashesReceived++
|
||||
if hashesReceived >= pendingHashes {
|
||||
close(comms)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Verify all hashes are present
|
||||
if !outputIsValid(output) {
|
||||
fmt.Println("Warning: Some hashes are missing from the output")
|
||||
}
|
||||
ret, err := json.MarshalIndent(output, "", " ")
|
||||
ret, err := json.MarshalIndent(&blobs, "", " ")
|
||||
if err != nil {
|
||||
fmt.Printf("Error marshaling JSON: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
err = os.WriteFile(outputPath, ret, 0644)
|
||||
err = os.WriteFile(outputPath, []byte(fmt.Sprintf("%s\n", ret)), 0644)
|
||||
if err != nil {
|
||||
fmt.Printf("Error writing to file %s: %v\n", outputPath, err)
|
||||
os.Exit(1)
|
||||
|
||||
Binary file not shown.
@@ -1,39 +0,0 @@
|
||||
age-encryption.org/v1
|
||||
-> ssh-ed25519 87huqg cU4X1qZK41KRZ0pQvjGaVNDslGG9qmf0WROZIsq3WTE
|
||||
fjJ4+eYXeuTts1ZPbaB5YzhPoHi6UGewDmlzrwOeOGs
|
||||
-> ssh-ed25519 8UnW5Q Ror4AvYpT9lzfnr+LgNu3XZpRKIjocRRZHD7Zb1h5GE
|
||||
krvgjoP6tgHsEWQCWA9z2VbBdwR5TmAA+xLmXoBNUYI
|
||||
-> ssh-ed25519 UFfTmg qFTu8meX/IPp8DsbMgBX9LNRbVAeW1ge1GjMsbZwI3I
|
||||
8YGOxIvbkC02Gy6TpPvxdAJkboB6RiXyMboDgY57HGw
|
||||
-> ssh-ed25519 KbVVUw Ar4IGQSYFb+hIm8o3wI/9rgBgP4F2/W45YlUxsPnUCM
|
||||
tTPESO6d1pEumLGV+uew7IzqxdG9/EtGbb0vOfXtMRc
|
||||
-> ssh-ed25519 xNtnoA 4HBphnFMeJPSTQO3/GI7phbhW98gNALrvY3lFgBshkU
|
||||
8adXWowmuIbNruPWNTE6x1Om2JstPUrUoaS97N+bhZI
|
||||
-> ssh-ed25519 aY2AXA vmvo0o12q9meAnnAg+wDqDtkOTOFZ358ZrT5d62X2y4
|
||||
Y0qxZmOiqhBsQT5XfJtK0m47Z+dOO27bA4iWXDF1n3U
|
||||
-> ssh-ed25519 AQhf1g p0Xv0K3xtwpNmfNN9lvQ39cZw8/G6ToDHdmWbuwk1yo
|
||||
Ds1oqffX9y+WzNsznWsF+/RUTNQkZzVW6Sw8X+vuoW4
|
||||
-> ssh-ed25519 mOmPfg rfAZzFVagHhbeK3esrQ67i61HWicvMiwal09Di+3K1A
|
||||
fxjUJS+640QyJo/Bg44ci+imnc3nLKgUUKr28AjSpAE
|
||||
-> ssh-ed25519 YJiRbw 75uSheAYHchkQg64z6mo9h5SbN7jJ+wRo/89ZAhHM0w
|
||||
xaBNhUzKhx4KKYEfu0v3av7fxge3r7Jgoym4SxAgx5U
|
||||
-> ssh-ed25519 Nl/5yA W+9F2FObW6hlX7gdzXCcD+XxVJD+7zjcY6cwfg2c+nY
|
||||
QOZdYtwrlUqUh57lceLQNx4qPlFcQaak+p8w+xvm4Is
|
||||
-> ssh-ed25519 GdLgCQ XtYujNgBU7VIYy4F5Sx8Lfma2eI8xObwsWlsTWVQ4nQ
|
||||
bj0pRWsqH3FxBwSv2cWuhLZSISY9BXK2yJT7K8lzc8Q
|
||||
-> ssh-ed25519 tOH/HQ ij84H+oh2GuFQQ6u84ecs1DZWDE8PKiUo/5xShokJRg
|
||||
WKCqL+TyxHmtG4W2HqiuuBT7NWUL1X1YAkbHk7vPcTs
|
||||
-> ssh-ed25519 FpzvfQ FVbQ4Pj1Gcxi0R1QrfNbOjJExDET9cf6HJGEf3xaMFo
|
||||
b721HyfPvlsd+yAYonnFUvb9a11/NJtwPX6RSqPsvnc
|
||||
-> ssh-ed25519 2UotMw z2IdT+cIwDEpbzcdPSzZXfpYdPuShklqNfatDVLGSgM
|
||||
qM31ztK1C30tt09lQQcaP2B+k2NOxtkQBXcedx8xL5o
|
||||
-> ssh-ed25519 kdPvzQ Ee7pccj9/YeQ+kUOpmDy0gHeCCNiVP8br954ZBoO+xY
|
||||
w4JmkNKb3vIvBRY6FdB1tpdCO/I0xyrnHL/99W5UYms
|
||||
-> ssh-ed25519 onmXpg tPWNTbyC8ihTBwkj4xKPKgjONNE7X/By9064z2BEGyQ
|
||||
D6gjS7m3Dyk2BYhe5WjRAUFR3ayfsi4N6z0dklHFzWs
|
||||
-> ssh-ed25519 CnhD0g SDxHr7dhCuF4DCu0PF0EgvmPDcTYOwleqkRw2I0F4xs
|
||||
WFzD7T2pQsDDwEovp6xpVXC1Uny9ImbrIuR5fSDLj1Y
|
||||
-> ssh-ed25519 4ep2UA wmk4HIdMZ/3N9TB90WEJC9ZGXgSGPsN+4uo5P3LAwSs
|
||||
Y99wQAsjnHgOhAEGd5CzYUd+0WXA3QVvcmt8z68RR8o
|
||||
--- UR17+b75zlMoHrIalvpAmdSegLhlbNIDnqZZBAI6LUo
|
||||
Þc™Úxä=EŸÂËpÖ\”eÜ)Ñ£{š´Íû®2p=FkÑeæîẠO␍nÈ€,ƒà´�¢Ž=ÌzƒnŠ>V|(Q
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+36
-38
@@ -1,39 +1,37 @@
|
||||
age-encryption.org/v1
|
||||
-> ssh-ed25519 87huqg tRkWo/tXovX5ukc6DRiC55s28fMJvry4lgSWeGnQXHY
|
||||
G266810Co/QUFWle5j9W8P2+cfoUmZ5gEKcCNg5jw1A
|
||||
-> ssh-ed25519 8UnW5Q OqyBBxWRBBpAlS93lZ+TGl2O2NwhS5/ZsMbN/sUiUVI
|
||||
N6csZzFJUU17JEsLUVRzBhM1at00bu9rUzXE5JAML9Q
|
||||
-> ssh-ed25519 UFfTmg iuxAyKikNUPm9QJU9O8UYspvWjWe7Te26uzPN6s8yww
|
||||
VCpWZVtTwHlOC7PXk6xIezNbIMgFObavv1AFinouU40
|
||||
-> ssh-ed25519 KbVVUw pVU1pSoYn5SiePORWE9bJk+w8pn76xyhFrXi3PQJ0GE
|
||||
d8Y2dt840M954ZrqRoSeUPDjPLoM4EJwKwu4+5ehddw
|
||||
-> ssh-ed25519 xNtnoA L8MxfT93s2I42dirqXnf+VRWq26NPuZ6Ta+0vcbwYRs
|
||||
0RyuZdK1sqCpuMDVpUpJkOs8OGhjz4vojNpmInX4a9o
|
||||
-> ssh-ed25519 aY2AXA prgbsTVqCxDqX9fB1SwH0Pz3wHNNut2Kd/g2CT3pE1I
|
||||
12LcMPa0xpx3vtrmNQ0JrJa5PUCcV+jj5s4c4ttRn18
|
||||
-> ssh-ed25519 AQhf1g Tdph+xLV/TIYMxExaUo+xgqd2Cl5o+BCSEKHWhYpTio
|
||||
ecuPMlwtgIbBoZ5mucYglIamW8FqeJT4ZXs84CcSaAM
|
||||
-> ssh-ed25519 mOmPfg pmE+ZERem6G19KtQ339alV0mlSZxOdU0s/NSY9oykzQ
|
||||
i57l9Oxl4mLYquHwFIsbPtmhyjyH62MereQzNf/vvhg
|
||||
-> ssh-ed25519 YJiRbw 7Q2ue0YEapF+lK7204mDbRTOxU4BrWC/01umQw0DCCM
|
||||
+Ulv7yL+02WvDmrtlujCD7zR6V2Npm3WMqvvSyIpOH0
|
||||
-> ssh-ed25519 Nl/5yA 0FmOQ2WA+qXbhHy6WimadXJKVmgUsRBbOPsgFJ6Qtiw
|
||||
xhJkG+SSdnYgMWeJk7ciLI9bS+c403p2PqVRObk9ezA
|
||||
-> ssh-ed25519 GdLgCQ Ovn3zHYbFImNyPz07xjMDYnUCnHpejotNfVyD6olgGc
|
||||
AfF78TueIj5jnz+q7vrXyu1BZ6VN0hkTpg1LItmnCYw
|
||||
-> ssh-ed25519 tOH/HQ x9alUL3V2mHyQHt5vPIDBq+TNE0tYkJuP8KYE80VinI
|
||||
se1kqe3o8bKr1AkgH55NTPMD6ZRkdcLIIZ0YhEVkTq8
|
||||
-> ssh-ed25519 FpzvfQ W6oRWhWgbZjLrJTkFj9LJWcq3gapz6vRtdSjV4g/yzE
|
||||
GYh8HSC0mPRGRu7jT7DGx3py0Gvu/zu3BzVdXL8gU1A
|
||||
-> ssh-ed25519 2UotMw +XsUycMbAALayfAxF/SvkoWv5ubzWp/RvJcD9sWeSAY
|
||||
j3lHaEJzFk7R48RNbGNzcMs97p12n88L9WjockK1N+g
|
||||
-> ssh-ed25519 kdPvzQ X06P2aEDkUoSk0KVLZWC9DGyNnVlleeBft1xQPecDnA
|
||||
6p3jxcHePWO+cf4hnALXxaa5bN8B9AZo+qodDyK/Evc
|
||||
-> ssh-ed25519 onmXpg +9uXItde+0h/bBcSEwZ57y36bxwwoCWY2SvN1jG7rVM
|
||||
2VyLiThmzYQeDOk7TaUUslec0qvr7UMSiBTHsEpR6ss
|
||||
-> ssh-ed25519 CnhD0g feqQLfUYnakAiHJo+gWHrbd5o9WyQ/qluJ7/d/n7PGU
|
||||
g5l7RvpeBRwnFRKhAED75QC0d6DiGlFho3D5tPumiIY
|
||||
-> ssh-ed25519 4ep2UA nkc+pDUli0BTe7XoDAJEOLnBDeiekZSv7XVL3POXCTc
|
||||
iWQSdc2hWP2UvyyISoUBKOhRotPCv2ySsfmoAAOLgFM
|
||||
--- YRWXRvqVNx+YrIEW8vp0RcJLM/leQUhHD1WKnaEqprA
|
||||
$f4jAjlÚaôp@™ e¢!(°^˜rˆèJ÷¾%h¼h@37üß1š+'žª´pŸœ†ÿbÿó1,¦jÂôA´n£€X¹ð‰¤3jýÈÇ[ìÑW#E\NÑÓÖ}¤
|
||||
-> ssh-ed25519 8UnW5Q MDrURGpcaqY6DVIURK6dJs7xKCGLtFS8+hH0UCRT7G4
|
||||
qsqMoWCrssVlJ2kP1cvP9+Fj+c07iFvbFs3Cs+RYVLM
|
||||
-> ssh-ed25519 UFfTmg lTHOOV5/G7IPaYWqrAwM9Nb75//N9O1wMDFSUtyo1gI
|
||||
kEWctDmQRHNzxMIwONsZo9EEIc/wkPxqX851BO6ohYo
|
||||
-> ssh-ed25519 xNtnoA lm6OHoKNa8wB1ML5lA/xl13Xp8WUSF2UY89bP8BZP0E
|
||||
iPDWUaoViQ7faVkUf2V1MQxrklAw8lJ2KXfJZTYN2X4
|
||||
-> ssh-ed25519 aY2AXA 4E8FsRsfsEKsLNVvBRTAoxghfex8omAQcy8NKzJ17kw
|
||||
uzZQp9nVfyVH3dz0UinqZjsZ0Kft7tPVSk1EkE6NvA8
|
||||
-> ssh-ed25519 AQhf1g rgcA2UeG0s75kSpok9+VR4ixNyZUqD+8ye1TJsMMA3Q
|
||||
rfM5/54WWHrnG1qfex57tGH97lbvKM+J6TGztYOrU+c
|
||||
-> ssh-ed25519 r/3ipA 7pNJRvOFO5v2nlMPbXP9oad6jp1pPAsByfiEhdCTAWI
|
||||
Vh+iyg2P6fvNWyCS+V4087zRf+pCIBj0jsPX0DtPp0c
|
||||
-> ssh-ed25519 mOmPfg 9WuzH4QasTe0NNcIf+XSremq5GuBZoKP+7t4MJNAFA0
|
||||
5E1Rbupw8IUnTuicTubXWmwkJ2xVg5K4BpkZCsUj5UU
|
||||
-> ssh-ed25519 YJiRbw msPFM69Tuy/luxASGVA8ey77vqtvXNy7ytf2VxQWNi8
|
||||
oD5vRs439A/YT5FxkSltl1Qf56NNhiKt17++vlFvwPA
|
||||
-> ssh-ed25519 Nl/5yA C3zn641k6eFQePbp2q7dwlIu7Iiw2aU5dmSrH2HCai4
|
||||
v1/XJRKIrIgHWfFtSDaFCvOKtcIR84abUZHPjaxP5bw
|
||||
-> ssh-ed25519 GdLgCQ ZztOWiw1ao1pvJ9REB/wBuxq00uyO+JAkIWjLUMueSc
|
||||
zXSv3MauG2E2el+Yv5oocTgDQjQ1fKXLpm6y2OTyIvw
|
||||
-> ssh-ed25519 tOH/HQ /eEgAf2KH1Zgd4yQf+kzyESkvPI8GKJC0MAJl+8+WD4
|
||||
H35T+ulGSCrWAuIsZs8ISRJRj2wqpRrOGlaoq9fnN5o
|
||||
-> ssh-ed25519 FpzvfQ dRq/NtT/TxJ/k9WlaMl/PrLTvPzkhV8LpF/LxjqjGmM
|
||||
LJN8xxnNF3EcMmXKdLhc70b2Y6n9qS3A5wdFXY6hUjw
|
||||
-> ssh-ed25519 2UotMw I+kJsu4GAflSfMjzE/8+vp6AZb88OpiCREuxfAnQPis
|
||||
hRu7IbLMdc3U+NQo1PDhc+O9uyd/wJZyPtfTv9z9TvI
|
||||
-> ssh-ed25519 kdPvzQ uOLSQFzsGSNg1HsiJLCYi2Lp8pasc7H/jhUBlf6b0zg
|
||||
KbUOl2WOsc6VuAC33SjEJS3tM3o82A3QO0bA9wd0rbA
|
||||
-> ssh-ed25519 onmXpg NKdAvcN3TStWYtQeLW1oEn7+shQuuNBndHaQRAU4f1o
|
||||
vCuDnPc3tayIwDbHJneLQNoENyfA6GRpQi6+OZ34Jjc
|
||||
-> ssh-ed25519 CnhD0g Co6fy3fm8BUi2qn+xBY1X33N2m40jEM7CJhSQcLokR0
|
||||
kwrOzTRiVe1aQH/P+ua3xZNgNRZh2pfQrQl2k2Y727Q
|
||||
-> ssh-ed25519 4ep2UA /f1HxU62FqhDJyJ9fPMKiqJdw1m/UjASKuYhY5Aq8D8
|
||||
tckIOvPq3Qid9Z5ud2v9syaed/h+3GrackXKZonDYEg
|
||||
--- FHj/yA6RDV1VYPsi84z5Y3NrbfVUthwdtuRWqiKC57Q
|
||||
Õ=Â7T÷Ü`6¦K./ ¾¿àO Ö¼‰R•Pá€K…2NYqWÖ¹£®ê0v{±µi'¢žÖVûÆ!+‘|ÎÕ0¿ŽšÆ¼ú´Ìi ½†Ä?Q�Žq¢2Ô5ÖÀéŽgÜ/c_
|
||||
+37
-39
@@ -1,40 +1,38 @@
|
||||
age-encryption.org/v1
|
||||
-> ssh-ed25519 87huqg 42tvGwJ82PwlXbr+TqSz08omHABPqv1TH5plKNLLvkY
|
||||
4Xwl0lc+zSL4k1PuIO9qF1Ci8mOOWciq5yGbbqW6nLE
|
||||
-> ssh-ed25519 8UnW5Q gGcbBcV2tF2UaaYBvM/jiNH8Lc9Fl62NZIWSbNVZeX8
|
||||
1TLxRM4e4/T/q/8Bdx/W3Sg5eeq3g6aUcka2kizF1O0
|
||||
-> ssh-ed25519 UFfTmg oNyxvAIg2hYEJ6Z3r9MzuR5YgPW432T03/mcjLeLOgs
|
||||
NZOFUzuaaxwGbQDkDinSzjbFPrFETbQOEJwrgyYtKpY
|
||||
-> ssh-ed25519 KbVVUw annu9kT2zbKvaE3WwGtDGhvku/Pj8a4P5GEQLhahZiE
|
||||
RKg/owcXYN5pqsDxjlaNPg6um/7/eoXxZ5oJxxouxjE
|
||||
-> ssh-ed25519 xNtnoA tN13P6fRYHjVTmXo7w6y/ljzr/8nEqrlgZXpG5jA218
|
||||
wg4SUSCWqE3iskGPE9qJ5Ot68pcvwCi9fmE5NXZqYCI
|
||||
-> ssh-ed25519 aY2AXA VdvvL8lgjZBhflonEI96VSFgYaUX3Tfvjo148BA+Uks
|
||||
ZljFDZ61GKr24lWG8z8sKke1TpTCiSeqyd05yxNFTVo
|
||||
-> ssh-ed25519 AQhf1g jKvD41VnPGoCBEva5llD2NQo42TDnpp9M28BTBewuR8
|
||||
TSBZqNLhG/PyToBnX2kwevA35QKmKcjwcPe8/JUcywM
|
||||
-> ssh-ed25519 mOmPfg /yX7XUVozu8ZTCW9gJyoGd7EzBISb0c+i08HEsN7ODw
|
||||
e1rAICTZajIF0AaWXBATDNuqQK4GAqxEjgxvaRzDark
|
||||
-> ssh-ed25519 YJiRbw cy9m8KQln8ryxLEqx1tIoZRq4SiABQFT5IzmMlgkQjA
|
||||
P4OLv+oTFhgnLzb4YrhFdV6jreAGhXBkMCe7pb31KTw
|
||||
-> ssh-ed25519 Nl/5yA Nx8mErRdN8sIaj8ueWnDkSw5vBhfkOW5Rk2ND3gwZmY
|
||||
6elVFcWQnwmh7NvRm17+WahOkvLmQbqBBKnruHT3yp0
|
||||
-> ssh-ed25519 GdLgCQ WwKSzJsPG8vJjRjc+nkyvGKtqLvpKe3V158fRezWtzk
|
||||
mKdk9Z2wOipmc6brgNWeIbxADdkkXAFcs8E956RdHTs
|
||||
-> ssh-ed25519 tOH/HQ /CL2OxE6C8ZCfHgHTQQJmuACG5lZ8AdVpDe1YfG9mHw
|
||||
7uaalUdP5vCjsLEYdp+LREaxU3Vo0VUCVXn/H0WAa4I
|
||||
-> ssh-ed25519 FpzvfQ hE8FGN82H81RWUm+LgCuvQMWra0ulwMHuGSYTdQvc10
|
||||
Eq/btSgef+2nkQGreBhqRKAt/6CFo5ahdRbBfCO5Bv8
|
||||
-> ssh-ed25519 2UotMw mqdgTsPI9vockRACf/NdD466WkIyQvSLuEJSrT5mDwo
|
||||
hyZQCiUCu8gfVTCZ8wMxo+i+CqjhE9t+hdJrJcm1dNs
|
||||
-> ssh-ed25519 kdPvzQ fO2iL5QnWBxRFe88W488dkezFsMxJtMBc5GKACOZYjk
|
||||
NPa4r9t7lPt3mMgHjT6soAK/RWLUe70Lh5i7LwRYlgE
|
||||
-> ssh-ed25519 onmXpg 9N98xltPTCAb42chNAOb4hYr7equq0lk9nTqol3EKXU
|
||||
tdQ7FSABTifm9sHKzOVFyoEbOjS9TYS7DPsFrBqmnLo
|
||||
-> ssh-ed25519 CnhD0g 1oi9mdmL6ODCgi3pWGKEqU/QN/v41XQg7nUZiu5frWw
|
||||
zXOUj1z6Z6DKyWr2ZqyFFZGNwKkz3NdyEUqWpnl1xI0
|
||||
-> ssh-ed25519 4ep2UA RKc7+piJY2Fh4NnZGvEuAzJIMxr9NBQQBSMj3xQqrSc
|
||||
yqLK6nR4b46QPwnH9DuZ5spzIu8fQMAxmLYNtj5jAu4
|
||||
--- R87vMnH5oLHLJgD7rCGZwz6dpc/a0kpm/fi28jqVcT8
|
||||
\_UvF9‘ˆ±gøË2�Ä®Ôbá/0=íOÙµò´``lú©žµ^2&…àâWëñº‰W§¼
|
||||
Pc–�‹,™häZO'kÒ2›f'hB©ºp>¯l\›M§¤;‰òouFü ë…œ¥X)P!hÂRo]¬Ø† Ù/{—¶6Ä•÷ƒt»¢¶Á<Þ$6tá[6ÑüAéaó7œÙ–òúhiç«d´Y-jëº »_ý)£“Ò‘b˜˜ƒpɪÙ9Hå»\HBÂ6dß(}ˆ…~¨¦íåèq¡x5P{x…@ü°G�E0x&0ðYÐÆgó¤¿4•—±z‡•n•!Ù¿ªðòˆÍ�Ð{ú9
|
||||
-> ssh-ed25519 8UnW5Q 5p80c2oBsZh9KTXU+ZT2AKbbEMOKxlAouHew8KU8kns
|
||||
ZvUnyZjn/HYmxHBth7ognoHB9zsUe43Y6c084D4xdHc
|
||||
-> ssh-ed25519 UFfTmg 9ol6Gp3stU0jwPzkr9CcLLYftYTr614jBfba226E7xU
|
||||
i7CZagRKOmUn2uVmzyuCJQdbtAJoDbJZxpMNDtrH7/M
|
||||
-> ssh-ed25519 xNtnoA QZ/CQO4j7T5qC4ohLMEt0i1B8cuMGYgWOAwj6HSPDVs
|
||||
Nh30qP0yZcAw2azpFA+Pi6746+kmM5D0fZUYL1uTzmU
|
||||
-> ssh-ed25519 aY2AXA C+1SvOQKdrTk3UNOLdiHrK8e88BBztlMqE3Cofm6ZUI
|
||||
F26HpuL7HY2nsC72KDgZMbfQ9Hbmvcr/nms/d8cCjro
|
||||
-> ssh-ed25519 AQhf1g ZWLSoDJiiQswh4GyhL4P82X03SNSRnDPmZk3w5nyakU
|
||||
r6k53tUfB/J6WJuGSmU23frSkcw3jpe76d6vlIfPXcw
|
||||
-> ssh-ed25519 r/3ipA cH7gfgcgS8oRx/GKlolPIQ5WzbP+i+xGHfzjqCQ7NwI
|
||||
Tv8lSRcUitEx3oWa8hT330K8DYt+PWR2mHetY1rzCPE
|
||||
-> ssh-ed25519 mOmPfg sfr1m6QIkqpHLeunlYCc9LjVPC0XqXnH9z75IoSRgCs
|
||||
heS/IaQwkt2IQRNcKeNfsAzKGGLEdiUzQxdPll4CRt8
|
||||
-> ssh-ed25519 YJiRbw 9oF0E5s2LCHrjFozDq6GbYH8UkzSaPH/4ore75bwe24
|
||||
8PHPtU/fDDFkcEPXHAyrp7LBDHwRtTX/u29+jJCzsXQ
|
||||
-> ssh-ed25519 Nl/5yA 3xAZWLQ27UtB3kZiEbIBPlkO99ZsAD6k0oOTmXODLT4
|
||||
ia6BrKBYSe3BM728ysyBfSjwtQoev/NrTq+Bnp+z7hM
|
||||
-> ssh-ed25519 GdLgCQ otupOJf1nJV+w4BlivVEer7x4C1aEU8zIMLmLSlPiyM
|
||||
BHv9OTNsxkYBlA2sI3x3cEXjr7GSyVlaQZIGBSua4+s
|
||||
-> ssh-ed25519 tOH/HQ UnszNH3sEPqlpEuhJTzYG/gwBE7e4/P2VVRkroceZD0
|
||||
L9HBZkhn3zbOIhrkBo3ezvp/Qv8Lc/BzS57npaH+nwQ
|
||||
-> ssh-ed25519 FpzvfQ S8QZlLoN2FVpAajpsOqaEPHZGfXAr/k4ZXY8PKEiA28
|
||||
hJsIvLf77JG87Gqe0dDq16dsSKSlJZZPGbYrWv1oBlU
|
||||
-> ssh-ed25519 2UotMw kRIdExrBlEQToh6itvMGel7UIVDTEIVqb159d1CWmAI
|
||||
Bkse9A2smfngBC5WmDmes3ALMvoxeZw3ypvVBxWjWcY
|
||||
-> ssh-ed25519 kdPvzQ 4O3g6LMdWv6OiBP5mjZtWa6ERd4s3d1mawlW3ZjajjI
|
||||
HqzRVYB5Vko0x2rK1d6DHcAQdla3gsTSyTXcZNeP2c4
|
||||
-> ssh-ed25519 onmXpg grxgbmSfJvZ4lNpBOEsVUVnRXNmXe8GybiTg4BhzWBc
|
||||
po3Ka11xxQobByCWHvzj4z2MT7AYtoUEvHPkdlVcyPw
|
||||
-> ssh-ed25519 CnhD0g hwhHSq2AFrZelQtkfegSSLXbUVAERTH6yoiehI+xbHE
|
||||
sGBl0wu73Refzt/k2iM5BFw5rhFiXV+PKO6L4PrDsJE
|
||||
-> ssh-ed25519 4ep2UA aNkohdDISDwG6Tuqq9IStUqwIgC0gueGAiCh+gyDsl4
|
||||
Kl0AQrVRSfvR8X1zT4ws2paVuZdb+xI4BYFJFMbYmDg
|
||||
--- jS9nG8Wyoh+2f66Ew/ebH5LYRt73NIi+WnEJLHAoyTA
|
||||
¥¯fŸ
|
||||
ä(‹r¶OîŠërv,¸w\Rx¶€§ÂÞ¶Ü¢ÚÇrq9Γ’uŒK•j1ÂàSÚa@“¾|pÔ‰Ãy»ª«³Ga¦ƒúfJÆEDޝ•]å, ÉjÎL¿äì¼v3Œ<y(õÛûiH›™x=‡ ú:“‰/Õ`üëÏ™h{¦ñÑN Á\·Í8ЇiJóêvaT…‹÷ÊÏ'¤4xÁÖ*áÏ+¹À=6{ˆŽù‚OÝKEØ'ýøÈ=Q¦!ÿÊI#.˜{yÚIrà´èêf/Ýw��Wª—âꎿè%ÊT£ÿ�9x…#n²:MhÏèÅ–µ~3G=¼øF=;9o,ó
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,39 +1,38 @@
|
||||
age-encryption.org/v1
|
||||
-> ssh-ed25519 87huqg dA1cGGZS6hZzglVHlyxZA6HAGBtZfXYHedZLebiJuxk
|
||||
9jOUxFha5O0lOo/p09thxSrGBeABTiAtc9caKRCXvSs
|
||||
-> ssh-ed25519 8UnW5Q sT/26ON89MZLDFoMec531z4jvN4zcwtocwKpsy1agm8
|
||||
5lm9F/vDdN0do3Q02VYofWbXVv3v+POcVKe6hQBg4oM
|
||||
-> ssh-ed25519 UFfTmg mBEIRRxLahorqsYdWRfLKG3Atb0+ks3UPTLZbN/p9Qs
|
||||
DMGHYSpSQG+rhg0wB0MUJBVARCcu3fIPodQxEO/glXY
|
||||
-> ssh-ed25519 KbVVUw Pbn4kkRR1xiVeGlHqNR3oHCpqVpftztRyyTRI7jbQDs
|
||||
4Ep3S6WUDXipUdmxuWdZJGy20HWR8MeJ0qG92dkVqRo
|
||||
-> ssh-ed25519 xNtnoA tqndUQdkCW7dc/tCVRNwC1953WC8/25J+CuNz7iFXy0
|
||||
jkiSMT9RSIkhyypkhMtKMDAaZcEOfuOs8PN+Fm5RJho
|
||||
-> ssh-ed25519 aY2AXA 8c4P/cE9ISbxW1h8j9eMSJ1+Y8mId5AMj6KVW90bHTc
|
||||
Mn7nW8NRF+a/6d+Lv4RlxEkyH4GZnQjo+IrZQpjPscw
|
||||
-> ssh-ed25519 AQhf1g yGuKYOPodxketnWOUwwsec93545XHR77DdBcSt0nQh4
|
||||
78/c4+H8hGJFBkG+jHfL20W2rUSO6QeWR1s1YG9rEUE
|
||||
-> ssh-ed25519 mOmPfg U+17chXPF1QtSBBS7KIZS2ye63ZnKd55CLspwRmVSig
|
||||
nje/FT7zkwDr9/gEzyd5oFBpZ4XmmPbJq0u24eUhHeY
|
||||
-> ssh-ed25519 YJiRbw z1WWdaDEbV46mo1s7c5COi8nsse9G7kZP82+ON8WznM
|
||||
1sj1t9sM//HcTdaDJDG+sIz55jJ995qVtuE5v83q37M
|
||||
-> ssh-ed25519 Nl/5yA kZzDe+hZVtexOK2cWp+xC+avuzOTVhw++MkfdQ/1wjY
|
||||
XMfktagqBs1UE4iVPPx2rM3SnPns27m4KtqldWVFj+A
|
||||
-> ssh-ed25519 GdLgCQ CDa6LXTJhViLliv5wOTxlh1bKVVdhW08cSFggxQAdA4
|
||||
YzaJCQw5Bnh2buHVTFLCmgQ2+xta5BHvR08gwOxE4Lc
|
||||
-> ssh-ed25519 tOH/HQ 4YF1ffsWDtKw/7A17kmFOVukG9K5jGL3gzVye0FzZ3c
|
||||
BODYure5YmXASU5XhlfeksA4VqsKaKNp6Q0laeJ3z8s
|
||||
-> ssh-ed25519 FpzvfQ H+dvG6G/fEDsLqHoHW4G8c0RSPooRhRgWUzL+5igAkM
|
||||
BFe1mOGLLURn0I0LHjw4Zue+3s6Ta+GA9vCj+ZNSGpM
|
||||
-> ssh-ed25519 2UotMw lSaXW+ve24TZnJf0RXdLEJ4FfGiYNZ67LqfkrUWo8Cw
|
||||
45ZTeg1Y1P/DOa/yAbtrTLwNA897X9iuN3ZP/q0/rM0
|
||||
-> ssh-ed25519 kdPvzQ XVaKM5korb9tfFDIYs4ueREKcw8U3VGRonwp/QmLK2E
|
||||
RacYxiFK1vhTbJyfm0ffHxAq+JGFa9A5WtHWQ4iOEKg
|
||||
-> ssh-ed25519 onmXpg apxJc3hLsgsudKiXwvXE59FDMW9H8qXtlRcdhqVvzxo
|
||||
5RYr4G2YSLLSQKpgaB3g1HkcD7Xv+1Q2XKRp4SGKv5c
|
||||
-> ssh-ed25519 CnhD0g iiUwUS6wpQTXCL0qR2nUzkuG9bytZoQGI+0Xhq5O/VE
|
||||
OLhhRnnAJATapn2WGr9UepY62D6DjCaoprZqMAiisBs
|
||||
-> ssh-ed25519 4ep2UA WOSiDKxTlL97otLBmox6lvMabltrvUy8IqNsNQOCDAA
|
||||
4CY2Gq4E7iLbeqMup8mQEdOiOEbE9mWHNtwsaOOFWj0
|
||||
--- ULVOLUkx4Hzk0DLOpFgD3ypoU+vv90TnWTIaPNWxyUk
|
||||
˜iTSBý¥#õÛO×·Q¨�Ödzia¸�ÏjƒX ‡[d�ù†z¤å¢>AáúŽ*Ocî�B×ß…P°AErÐs“ø³YeföÛãœÌïÉÑù
|
||||
-> ssh-ed25519 8UnW5Q FRrvjiuNlnu4/DkwfY2K5p3MdQ5bDF3+u+JKrYiHzGw
|
||||
9dGLw4PT4OapoTW2GnoJ85GEWgO3Aepj7hl0LpPZylk
|
||||
-> ssh-ed25519 UFfTmg uMTPiCPPoVqt/3SOr+y5oKGTxpFq2UNGrwaRVmnZT1Q
|
||||
Rn7dRYCGZwYN7sCmAsne6kAuKmD6CFlGXR130ELiJCA
|
||||
-> ssh-ed25519 xNtnoA FW0dLFehc2yVvpxIDEcVWD1zHspZuvwrn2qgYltdp1Y
|
||||
1zYm+LF/8lvfEhQVr4cbyDF5CfhPu/fNBYZMQLtTrqw
|
||||
-> ssh-ed25519 aY2AXA aNRD8OIqKluKhHQZCGkW+kS71vlU2N8K6k590eLO7HM
|
||||
PZHX6fqbX0U+55MtJ2iSur7TSHFEgQBiAgpXiGlHbuU
|
||||
-> ssh-ed25519 AQhf1g cIhfdle1UsPx86LETXhB46evMenWtypO4GmL2/oLbXs
|
||||
ezwVMUSz5KbBymwnZlKuLD7RbNBJigfkb4sOpHAAnBk
|
||||
-> ssh-ed25519 r/3ipA Gt94r1I1CUMKrGQKBVgq/FLlOa7V3weD6N1rv/dVIV0
|
||||
UsBIZfHiU17IjzhcKc1kvSEIMIk7I/DizSdBGhXNwqA
|
||||
-> ssh-ed25519 mOmPfg b3/Gwqh1kik/AuBzcpqsuSuFcK0Pko3hRu32wFB/yks
|
||||
X9AXKVJ3d0IV7wkV2ZibScIV9En9uJNyUIPIk7WFKb0
|
||||
-> ssh-ed25519 YJiRbw yDkwCFtGXgS18DwqMCBied8+Jt8u2GBWuFQSrajij1s
|
||||
eSeFTNbeOT/tDb9iQo/YzThtQeMgNYmEK61o8hjG43k
|
||||
-> ssh-ed25519 Nl/5yA ee68eLzrRi35az65YmfA/WF9VliRmnlPEbGQAet91nw
|
||||
2KdTnyBTyJu8q03eH5s4oRyvhTQ6f/qvwrLabvk3C3o
|
||||
-> ssh-ed25519 GdLgCQ DAlJqI0uIBSrFpPMfl4FkrpjCO5qkzvJU/PBOWFh+XQ
|
||||
S5tkvMrTrYbOK3U3wWxLn3MuJTfrP8vUIYe6nBpixQo
|
||||
-> ssh-ed25519 tOH/HQ zQMhFkG/vkqosDn3VvzuKt4xagkUWoqE/DW6AsYtBGE
|
||||
MGQA/Jxv/YTny5CyqfQBorfwIUVPZFf/hAcUTFrX9vk
|
||||
-> ssh-ed25519 FpzvfQ d4cgnsFfo5xGDUFyT65HJ6S6vtzLmvB0eugwq6t0nGg
|
||||
0hEFjipS1Jbp6xycUsZYHzcjQVJ22JlGMUsjPCkDfbI
|
||||
-> ssh-ed25519 2UotMw C8ukSysPTKrwKCVnqjBzspXLLyJyhn2YCHcr1n0ulRg
|
||||
NErsgu49C3ElHmpsz4q+zR/0Oj+9jBPnC0BErB/48Fc
|
||||
-> ssh-ed25519 kdPvzQ oreOkf0nFgkgm5KuEjP28nbbqRZTA/b+bj7SSBmAslc
|
||||
OrQ99MlWePEk5IVeoC/X4UYLhK10oTLFrS4KqzoVOE0
|
||||
-> ssh-ed25519 onmXpg v8MQUHZj5sSu2XqiUH+8wcvEJmrGWQqs0e9evQKkzHw
|
||||
ffZTIoH8stR+ZLhoz8GjvGG61xVbv4+VkHbd25Jyc/w
|
||||
-> ssh-ed25519 CnhD0g Ja9KftQBH93zJAl8nOMQZXHbXIFIs9W4UqXwYr9gdDI
|
||||
StRE03gMP6QQ+fCuhE1Q5ptCpBrUxrWINgCrWzwSqxo
|
||||
-> ssh-ed25519 4ep2UA fbcuNM4FWkTOVSNSJGAwncdkjLN1K2Uv3dxFsnC60VU
|
||||
uVbHhoO/IXfakiYFJ4yrtReK9uvYLsj4BTILRBqbRgk
|
||||
--- dYPR49CT7omcJ7jDRNUAoc4t7az/pEg00aqPF00OlA4
|
||||
„Ï¿Ÿ ðç(C›Ø
|
||||
I'ð^¿mc¶bßH…¹«Cû�K␍0ýĉwé¯;lú¿P<üH㛬õI¿{àÈ|øª·ý Páy(Oì«81åÐß
|
||||
@@ -1,39 +1,37 @@
|
||||
age-encryption.org/v1
|
||||
-> ssh-ed25519 87huqg wEnsPg/GBsOZp/g5+Wt5U86tA3LCSuuvqK3YKU22wgg
|
||||
8H1eScTy08OWQ3Wm70UwpXkxQEJV//DDnKXO1Tsy3x8
|
||||
-> ssh-ed25519 8UnW5Q 9McAlT3KjxwW4uA8JLW/IZ95NtyU8MB5XSzwJi00D08
|
||||
jsJkSSVLMAhBrTSyjKg7q+ez6PnKdYP0GIOTG+BX6q8
|
||||
-> ssh-ed25519 UFfTmg HxnyFdoHZMYBD+RZqTCGnzVv0y6KlHdvV5obWrzzzkc
|
||||
l9LCV/K18AwxfNIaMDc3ES7TZgHzBpMwPaHY6Mpwxtc
|
||||
-> ssh-ed25519 KbVVUw cZ7aPpgdgNGg7tAmV8efvkMgVDUIyqZjc/WQMkv52Bg
|
||||
td9LF8Pp4dhz8coW/DWBdBgRkM6+FGbHzCqvrdbm9nE
|
||||
-> ssh-ed25519 xNtnoA 2Gvn1fR8ufGGBkl8u8WdIb1Lo/UxkKkUXwEzmKK/VSU
|
||||
s/4U7eALr0f8Yqk5SN5O2z0eZz8PslFZ7ikbmngvSX8
|
||||
-> ssh-ed25519 aY2AXA e6nGnQE0/UTqUX12blfWq4CpNe/QkEMnztWQHyHuxjc
|
||||
OdUQMd5+x/x6NAs0nbtr9pM7q+nF8ZybZBJD7mNNcg0
|
||||
-> ssh-ed25519 AQhf1g qvmETHVucAF76fq+UkRyoK0Kw+nYVu18jn12ragg1T0
|
||||
XEhKDlikdstmSSZOKs1Zhkm2XhtW19F4k+H+cKIvjzM
|
||||
-> ssh-ed25519 mOmPfg Qb/Yfy6jl10V0wTr/61/GbbYhkBciOx1ryYvzyTBpRo
|
||||
kHMnWdDA02C7rAyJ11JMbmJaCjKkj1fBXZqJdGES+IY
|
||||
-> ssh-ed25519 YJiRbw m58K4+oJ8ike/v8bhpGveQF6UxEBTuqjiM5UpRZUpV8
|
||||
Cq1BpdnViOmd0JwdZf2gBB2vpcafm54FIaZWOhviP6s
|
||||
-> ssh-ed25519 Nl/5yA tNzmgsTG7d5xRhX6j5iwEnxtLYz8gJQmMWzBSOqaxwQ
|
||||
WuYPgCAxhsHvXKty0dncAl9ejqF1b9ZHSFqtmOEDQAU
|
||||
-> ssh-ed25519 GdLgCQ gyuGdMzsShKl1TPOt6IrJYJ383CCK33+BXo3sELKvkc
|
||||
m02EYJ47DcH5wK+eDcvs5yyTwsH6cT8rWbf1BoGemQ8
|
||||
-> ssh-ed25519 tOH/HQ EpuIe55eq9FvBnygY1gn9o+MSU0AjxDHeIPwqGWAkDQ
|
||||
pypq4SL/0311MvwkilKPAI9Ho1gvOjsohnDwe4pDKPQ
|
||||
-> ssh-ed25519 FpzvfQ EY3I/fZxRn9qxZz5KmXjf5MDfXt9lhMmsj9ZW3nTdBE
|
||||
ktSKonkZwKcC7zvkddr8B0bg4M4pkeuukKOuZz9YauU
|
||||
-> ssh-ed25519 2UotMw P+I74r2Z6TKpTehCrstz8bvG2sWPDmcKLYOwS20Smgo
|
||||
zOGqtVouwCOiMi/D+XjitWtQGdRrfrJw3cYU5v30Kb4
|
||||
-> ssh-ed25519 kdPvzQ JdHJ0HiJUO7h+fx86QJQvlwoLWjr1SWLll+sBHfmmic
|
||||
tQQ+MEKgwYl/Ms76B1cPl8AA2HlrXqbF4cLmBdHBbck
|
||||
-> ssh-ed25519 onmXpg KXbZQecpbZQLB/4slZl3hqOXldgyqHADIy6OkdnHbTA
|
||||
GltoWSI3qht8w6Bb90K27qJdW/fB5GflCLQlnu9ffkc
|
||||
-> ssh-ed25519 CnhD0g wpoGeyLxBfk8tJkJSwWnFXhFLXrU4ezFaxWGVrnPIgI
|
||||
RVAJ8njeIBbQtHNM0hslbD8ft9VuRlqcSyyKRN9cxjA
|
||||
-> ssh-ed25519 4ep2UA Ydu1eNy1WiHw8bRwMQc29UsN6l0Kvs0MknyeNnDx4z0
|
||||
RjvAAe5nOkCHrZXn0u94NA7jWcNC9xAu9aly9tQC0q4
|
||||
--- ZVJux6CJ52ghYaSl16+PH5uUQqk0T+VkMVDOHO7HKMI
|
||||
¸ÐŽÕ%T–7]õ3¢¼D¼î·V!#NUžî~¸2·Ãc1duÁ6,¾Ÿ¿QD�DDŸ{ß'êÉÕlý¯ïñx÷%J�Ï +kõyiÝa
|
||||
-> ssh-ed25519 8UnW5Q mCwgPdwCWzi8QXME7vc1nncnCjUdhXJfHgz5CI2ppWI
|
||||
rnBpIQ9WYgFs65Rh4eMICoesrg76o46AjmtY9fTbCl4
|
||||
-> ssh-ed25519 UFfTmg EW1P9WRcH6esoNH098Vj4E+udGzKWYw+HkxaHcRpF3M
|
||||
t3AsT1kOCeDbpYotmYAFQA5/k0NA9KJ+R1DRnbLX63c
|
||||
-> ssh-ed25519 xNtnoA shOVkNxHyvKcLRYAAIW1C6UPAGiwxZl0Y7i73DkA3j0
|
||||
MgFo9Gy+24rWvIkqQKDogakf4q1nE+MTdmXg2nYMNR0
|
||||
-> ssh-ed25519 aY2AXA dXi7BYpOVSGbbxI5KOQkElq0GQj3vmbU8AA9rzqGIE0
|
||||
GlpXrUk11XX6zirXrTK3uIhLBwlTKwn4/cyCWjPBVTE
|
||||
-> ssh-ed25519 AQhf1g qV41Qx3onxW0Z91xCiUwse51OoEU7tBAi9t6MrwF8Fw
|
||||
rFXGO8JG1HE916LMS8xMLACVqHuQzP/SAgM5Ngi9tLQ
|
||||
-> ssh-ed25519 r/3ipA u1cHvRRt6JrScsmCY6PtybjU80VuU7NuRwtBW+Omc28
|
||||
ztXCVbWHTMBY/x6dDdSSPQmTWfLCGNG7xkYBtupKRQ0
|
||||
-> ssh-ed25519 mOmPfg jCT547k33Dxx8nTS/WVe+Peo1eViKVSjLumucXempBc
|
||||
X2SCtafedtleUTQoYtKN/85uUnWS3kuY9Bb90xHXXBM
|
||||
-> ssh-ed25519 YJiRbw j16MQ20JnMktKiREpNRx5qed8jXXKCAq+8b5AvkW0gM
|
||||
KovMsW55OvGyjSJuAN5M0Ga7ln0TOQoQEQKvCkODJJs
|
||||
-> ssh-ed25519 Nl/5yA oYGAT0greb0CHjptVKt1vPBhBX1KXsJAVlU4WoV0vjo
|
||||
SI4ZXY4pHqYEn2AKEX7MpcYT71LsVUGiZQd0LmwGywY
|
||||
-> ssh-ed25519 GdLgCQ rEB3gHJ+MovVDQsQd3X4pGI03itwoUGeHg7aCQ9oUms
|
||||
mAVXvwQqslqP4sm7uG9LXfNvD0XtnaB5W37esGyRsgU
|
||||
-> ssh-ed25519 tOH/HQ XPExYlY9j8DKCZwviAAgSvJ2+xpx3lUBsktfMPwo8U4
|
||||
v2PV6wtTTQINJ2XfCcA/0OpNkOHr4AER3lG73CJL7J8
|
||||
-> ssh-ed25519 FpzvfQ RRpPZ5GIdzvRimAXe1ybhxs+lV+SSigyyvEn3qmkOUg
|
||||
z7QV/M3zO3tnOO3XiabL62w7Uphs9OxARpGbND1tm1I
|
||||
-> ssh-ed25519 2UotMw JfTnR9wed+1B9Hung4FdV3Zvx8eQ+lrweFiFrhX8B2g
|
||||
k2KYxpsSoTBaHuXCCl5fBgn/jyi4KDKvg2QShU0Awpc
|
||||
-> ssh-ed25519 kdPvzQ GrUGPXTVNTMafGGfn2xA5pTIBEnEfSKmDtQ+W/QYpUU
|
||||
eDNGzwGWhnZ2kLXzDLVWJNvl6F6vZBTFZ16zrh87bxY
|
||||
-> ssh-ed25519 onmXpg LiArSCT2VCCbEE02Q9n6fsWP1VtYL7OcahnM7CJyywU
|
||||
LUKTMk2IAFpg7mPpHjBBw8NbpbgpDGnH9FCvjuF9qBw
|
||||
-> ssh-ed25519 CnhD0g H2M/9h954AS4ROeJFDfOpwU2DsACwQ/20OdGVaeGxxE
|
||||
tSMsZUT079DdPhW1yvFbk4DBlNd6Lvhk4SAarFjYfpY
|
||||
-> ssh-ed25519 4ep2UA /FZ8+q7M90Iug7/qUkpmyL3uhUz2WTBSoc2O719JhBs
|
||||
y0dpaERxrnygXbDhp6v/rIZsoKx7kv/aQI667jt+/t8
|
||||
--- K04yLmYsJIXBing2v+tijM5K1vOLQy0hWu7TItk3xCM
|
||||
‡t �Hëw’÷ìgn$c\ÑØG>T¤bÃ,z¿ì|~u§Dhs±KP©íÜ0c‹ªŒ–÷ÙþÔ{™w`ZªPODmüxOägƒ+FäCH
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,39 @@
|
||||
age-encryption.org/v1
|
||||
-> ssh-ed25519 8UnW5Q AvtCfDMZZ51gAeWxQlfxp+AEZDM/54vKlH96kU+sgn8
|
||||
IE9cWU99bJ8RJd/q1NCLwvjBozHsKNVLLxj4vX+f1nI
|
||||
-> ssh-ed25519 UFfTmg jN40d8++rmq4aJ2MY7Mb2zrj4gWV67GqHjv29QRNxjs
|
||||
jJJx3pTDSQ/0QescNSbnWmI4aJx/mvqXg7YJeYY384o
|
||||
-> ssh-ed25519 xNtnoA MJrW1Ti4mAhq3b490wLp61PTe4IhEPokfeMxSek/7QY
|
||||
AdgEkxhMRWcswzmLFzbbIKPW4a40Vlrct+ivvNGYhW0
|
||||
-> ssh-ed25519 aY2AXA 5is/WyAjC4/oqlDIxAwq/Eaw6ZV9NLtQGFnBqWBm+mo
|
||||
gadDw+GbSmtYxI7DZUIWOLaH2i67eaM1m1uJakDTg8o
|
||||
-> ssh-ed25519 AQhf1g SSk081gv31ND5QM1V0KzlFQw05Hfx0UJ2EosCAzeS0k
|
||||
wpefMRyZgwWcaP5mZBPVnL3MZ2k+L5a+ChLqRGCa/4g
|
||||
-> ssh-ed25519 r/3ipA 5FoRCnYDLxjERHPTR+vY+2Y9ewOBZoXrvy+N6wnAS3Y
|
||||
7Z+5IwEeM1iRlr/cUWt+sfv1QEOJmkvEG91xq1LmajA
|
||||
-> ssh-ed25519 mOmPfg YMuWe/N8ZOrUdSnu2blap3HP+q1XJtVaK5pSUG44RBE
|
||||
bvvZrMAGJ4hj83Kl6MYA5IXRgJidJGpYHVfqN1w3zBk
|
||||
-> ssh-ed25519 YJiRbw fOo8kP29gbO6OI6Zq2YBvcX07Wjrm0qlZv+AS7KLcVI
|
||||
7CCA1UgDtjmQi4L58TG2qVxxiDuxFm70LgOFpG18d/4
|
||||
-> ssh-ed25519 Nl/5yA MZl/ydcywiEBzU2P396An7TVnTdtclNwsoItiSiUNRQ
|
||||
upyVL3DUnmIE61NWVu0+gqaHNfmWIToOwJzLZOCsyo4
|
||||
-> ssh-ed25519 GdLgCQ dva4KwyCz99k3Ah8WibFI2ez+hUdK6wFzMLS/bQJdAI
|
||||
k5rNjS1IszxzKy3t8FFNoclyYRpkaWRgyzP5D/RAdc8
|
||||
-> ssh-ed25519 tOH/HQ AL1zBCwXkMLNQWiD8eoGbTJKI6+ja22p5NH/dHitgFU
|
||||
qJPaXsp4k5g/D0/wmcHtAAqqCeiFDpRhftXWAhxzr5o
|
||||
-> ssh-ed25519 FpzvfQ 4IOwoeQE5od8jFEqWziCF2mzqCLoxOEdUM6sFOp8Zjw
|
||||
Ea5bSCfza6i4cd8nL5p7tcoYyHC0B0V9lyuBM/PR3LI
|
||||
-> ssh-ed25519 2UotMw 942H9PoyZwAfevk1yVlTLSUTQh17U/UjGfBcbHO0EEw
|
||||
UMLFxLUf1Xv31JCyri1YcYKezAy9p/C5gc3EJMlSIvM
|
||||
-> ssh-ed25519 kdPvzQ rYlwUzY8uJIe87A/x50Al3WMnPxnvxCOEZiYOvhPwF0
|
||||
WmP5r+aWqNkmO2PQwLPdxIKIUr2BYzsU0I8U+kwhF+g
|
||||
-> ssh-ed25519 onmXpg mIhPpC8xYbbf6DK0Upag73K7k+YfCE1S+ZgCfvu1fik
|
||||
XgJ655mD/y8bWwrhjdMNH/v0J9DWJQiXVBgGTsSRr+8
|
||||
-> ssh-ed25519 CnhD0g UvRupvnJ0zqie6y891Au6EBw+1YZ1Mc3rYWOOBZH5Ho
|
||||
WMBj6BdYtIxgzSCVbqRXBIbFQhmXCPJMyLxG8OgZXAQ
|
||||
-> ssh-ed25519 4ep2UA hyu7qF9mof2QhPfgMm2Xe/xsfJVQV03UK67b05ODeRw
|
||||
tb54Ihc54Yeew4pRp0Y3aKAy9W7bpw++VeT9trHq4oQ
|
||||
--- XXv9DYSwOiHB+rSASovGULreR0ZUVPr4MYYFrH9SnSw
|
||||
7µ¾�ø—Ó½{O�¼™y�—Ì?Ma§ß³2é‰y�à£à‰§8¸E5¶jdµÀ �‚ŸBûn ôgþÞgb,NئH|
|
||||
cA,<»XFãò(Ke7þ␍Ný
|
||||
½ÁP‹Ò{&HK$
|
||||
@@ -1,39 +1,37 @@
|
||||
age-encryption.org/v1
|
||||
-> ssh-ed25519 87huqg FT8+PzbWYp1G2XqxQh/wIV9cAUxZrLIdBZ2sMC+9szk
|
||||
6TnThj3i7+q+JaJGgX9gtSOyLIqXwfqJhV7FXnffMFA
|
||||
-> ssh-ed25519 8UnW5Q PgKl4RxTUiazuCkN8RcRKCO1+XyIQzfKz4SygoFojwU
|
||||
O21D2VTrhKcz3H9yQ6v3HMg3yu6Oml6elssq4EZLOJY
|
||||
-> ssh-ed25519 UFfTmg 64GTWzZguBnlbrkI37vPO4VHGq38ewzGJbf41fmFs20
|
||||
SgbbJCitU6YS7xhyF5jvTRKgpd8JjQCn5goCDqGmP2o
|
||||
-> ssh-ed25519 KbVVUw DWHG10kp4J0uQaU2UZLORMBrOkXXWL8hl9LmOQFHvVI
|
||||
+5aIgcoPshO0m0Kkt15TmKOrw9fmYjA/CQBW78j5Rmo
|
||||
-> ssh-ed25519 xNtnoA zNpZX9ymrcO0W6FfXgmQz9VcEa97s54DYdsb3ThhWwc
|
||||
7F+/fHUNOAyFjBBEGfep9bSBQsPWehglpFoSniEYRJA
|
||||
-> ssh-ed25519 aY2AXA qZFD9Sn7wSgZCEJ/bqdh8Pr1Bcalf0NU99Tq8aFGXB4
|
||||
z9Q08OxS0sgPYMYBwJa1H8KMj3EU2nbyp3fB6+j6icM
|
||||
-> ssh-ed25519 AQhf1g B4W2oj6J9B9ktt/QchkT7kQgRWOxHfEqFDyIka7ttDo
|
||||
zAEaVCYNT+Ldk+2OMElMqN0WXCTnSgeV45f5QTocIps
|
||||
-> ssh-ed25519 mOmPfg rGWRrIHZ7Hzys2X8hlSHis6eoH6bJWZYq2BR94gYexo
|
||||
0kXY8xNmqshw4swmsIigJ3hUihlkoj8SSsLGdNB6Nbc
|
||||
-> ssh-ed25519 YJiRbw RB2Ocz6kqAY7daf/cpHazgwuqK4WL7obmN1p24X/h1k
|
||||
xV9OqnHeDJnLgmOYjbPDchp4uVlV05BwT/1eTBmXyMw
|
||||
-> ssh-ed25519 Nl/5yA QqqZ3YRVdWt0bPCCTdtYipR8/c+YEx/J1Bdy2EdfMWg
|
||||
leURB55yT6GyWO965kmBWeVwzGnHaPyGv88pcO7Yuq0
|
||||
-> ssh-ed25519 GdLgCQ r1G2p2VwiSanA5qjASjCTfunoZ+y0UhNIAxm6Z8N/E4
|
||||
tIku23bpxx0SG9iIh2h6UCWDQAq85Gj7YlMlk0Jdb2Y
|
||||
-> ssh-ed25519 tOH/HQ IJee8JIPvGwIT9c7deikAyxAd8rvq4s67B3an9htvh0
|
||||
VvGG/yilaEe8+bOqc72+rY87wv6F3Ss2b+RF5aOCOD8
|
||||
-> ssh-ed25519 FpzvfQ S6qhDcpBEdrk7ydvID0iwmoY8CBtjP6tUhax/O8ORl4
|
||||
wqkt0wEv3lXw8bpF/oMmCD7O1S2OXJJo3Y2xKhLgeD4
|
||||
-> ssh-ed25519 2UotMw AVmF4uIN2reJA2pPg1KZT84pbnG3Y5laZalJ7sdD6GY
|
||||
36Pdc0awqnlzZ13p19yqDnnikRV4NUaJ5LEMTzYzB6g
|
||||
-> ssh-ed25519 kdPvzQ UvJj47WTQTM9VEzIdX+O7s7nMfO8TLAn3fTCYQl80mE
|
||||
njyOgBl8LsaRKRRNeumQbYRHnUtT8SWtCT/RLoQ0ioo
|
||||
-> ssh-ed25519 onmXpg jeup0qoEJhTYKJBNQkNf6frrP14xf4NeSWk2b3L0wUg
|
||||
9HvGi1r/Wm2YRCpl+Bvp2t2L9q3ci/Mbg0N+5LgIz98
|
||||
-> ssh-ed25519 CnhD0g Q+Q9n6e70v2Q+4UWPznvh0dot/hjHGnIPDOLIDsNDws
|
||||
KnqhFsNIArU4JeK0Vqou4zewrO+ul0uJE6oVvTapaZg
|
||||
-> ssh-ed25519 4ep2UA 4wTgnS1jJZzww5ktip5vzsDEA9ERi8v9l1RqjrPB7x4
|
||||
t70NW6zcVLV2UXdacJ/tqxvEMS9MrumEKoy+F+UvnHE
|
||||
--- 4WejiRlNCP3hQqi2+8WD53mX/lptc0N4AbhBkw7mt5o
|
||||
—"åUÑMÄ„2Ç£%°ö×)»voŸCo|>šÐa†À†¡‹6¥äE˜ùn�OV¬©HÖäßD6i .†C¦Ýs0sÂj]Ü ªÛ¿
|
||||
-> ssh-ed25519 8UnW5Q zKwZaiVwcb3twBRyisICah2+RLb5NUStt0h3Ch7t/Tw
|
||||
9O3yKkWIOiJy6ese/ytnDRvyNbytQKDXR7HSZLNWNjY
|
||||
-> ssh-ed25519 UFfTmg erGwb0GnZV12BoEa1JYiYevuf3Uq0Tv73ObbDRvv+Tw
|
||||
a0YD87ft8y3ZTYWw38GSwbmIUHe3HW6FuaGksF5pi3I
|
||||
-> ssh-ed25519 xNtnoA KajAZC29v2JqZY+OPkeHpKv0biPJLDgnT2CN//WnjhM
|
||||
GJdu44xGefwsI0g99wuwTmWGVQD8uwIcyINRCHMb6I4
|
||||
-> ssh-ed25519 aY2AXA aQk0/BCQyyPCZCuaI8NiyjuDZBIRB+nAWZBKs+3Z8Wk
|
||||
KSZxNCGThfNjoSZh9hIRjP9o5cQ1FjZP4G7GuLbBZn8
|
||||
-> ssh-ed25519 AQhf1g 6usKpTxVUNIT92ugQl7Z8LFPFPStTgoPhEGdyXjmhwQ
|
||||
QqGWtkb4Bom4sKMrV347/jf6YptbQIm78zzNwxZN1UU
|
||||
-> ssh-ed25519 r/3ipA M77+oa8Kbvt6eGbAaq6/0oG9ggXSbYZeBOkced0F5zg
|
||||
hkEFOfMRY4iIZ31X8ty11lGkouOxHm2r/tLwPRfQ050
|
||||
-> ssh-ed25519 mOmPfg RohXdUXobV/fC3JYQ9IuVvDqdfnS2xodARJYmT1Ch3A
|
||||
VdDNZFmvud6FGSX/I1c4iKg+6uhWgslPKAk0Uf5Vhds
|
||||
-> ssh-ed25519 YJiRbw /xSl3swqNc5q0hsY+hO4nSk6PzPk9lRV7Hni/yNX4WE
|
||||
GXD3wBcBf6k1mjr14vIP58bjRWOnnVBxm1zunv7SVo0
|
||||
-> ssh-ed25519 Nl/5yA BAgdJDYBnUE0/8dR32V5D/ONiwLufRL9/9CY0YgpW1U
|
||||
aUgdT4MPYEAVjSuWm2lqr+r3xwlX35UyrbYGh5v5C6s
|
||||
-> ssh-ed25519 GdLgCQ fOAibyd4PSLdTsOM/ntG3/Jcz6TZFTlGk1oO9MLQWXc
|
||||
HNyui1pe4ZcrjHafzZtCad6Nc3MbzFu8YSMS6qae+mo
|
||||
-> ssh-ed25519 tOH/HQ oE4PbISWQe/kW2DxIkwqJKhKp/SNNa2OVje5iX21RA0
|
||||
lx0r//kRfV5df3+5cApTmpE9zxFjKoNBSguhoeHqgjQ
|
||||
-> ssh-ed25519 FpzvfQ L5a5UzaBYkaDLRKKu3z/9tou8SFmzL7615l8Ejyb23w
|
||||
Z9G1pnjjBk7H+XoNGNiBUtsZVQYiXe6/crYjUb4LIFM
|
||||
-> ssh-ed25519 2UotMw sw24R6i1jaa2t2NcPsXxeJz1FSNGY8dpTJQBPM4Y60M
|
||||
t+fZa71iWWxAqfusahrNV/Gx4RvlklnmZHgz4VsxGRk
|
||||
-> ssh-ed25519 kdPvzQ BevwDGBlvPar9elbiiFK5gnbF1qjXG4lsTSaOHdZwA4
|
||||
DBYjAo0HLsF7GzGPAw5wGate8QIpFQ2F/FNEITQqOrk
|
||||
-> ssh-ed25519 onmXpg XFXmGNe6X+JbLS6f26x8OEooWGCsSKdPXfNwFoSDknE
|
||||
zEKhchCyQN+rMBGXpnwMeOoRLDPiQSRQbHeG3V9ifLE
|
||||
-> ssh-ed25519 CnhD0g Cua/knFngt15egS+o7s848bfy9YM0/fFijrdkrreWi4
|
||||
tSj9HuyLRTiLPFlkNUHQrmY2scEBQvzYIXUuuUuYyjc
|
||||
-> ssh-ed25519 4ep2UA lZYn4isPidCnEz33aBI0Q+oONJqFy+a63slmhw2rBlo
|
||||
i0zEbwLS3kXVoqfMpdnti0UIn5pDEd7OJjX1cA2idWs
|
||||
--- H8Qm4uuJHlwWSBopEIN+ZUr0hZ5RndYYO2jQWAIDW4Q
|
||||
‘g¡CèæPÖ•ê²¢dW\@Mïs¨×þ‡[‚Á_‹ü±®¶ÁNÇžBÜïo§Í,0ƒt…d8Þ"Ÿ“Ã#¥ŽET¯t»‡h=GTOh’+Mú
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -1,39 +1,37 @@
|
||||
age-encryption.org/v1
|
||||
-> ssh-ed25519 87huqg whvk8HVYi639QPcR+0keIqsiiKQOTZYx7chqIA6itVA
|
||||
ofWFgGafX/qrEbIWhq+Nj3QmXSggoHM4jjoKw0qQ9wc
|
||||
-> ssh-ed25519 8UnW5Q u0ku0vlGo3PnDRG+WH1jim+X4WAcvHupx0LmtYiOWW8
|
||||
v2y8uAYt15OQRYJcNwabugVInSPluuECKVLuzT/Ulbk
|
||||
-> ssh-ed25519 UFfTmg jRxo/hK+Pf6TXktwkWyhKvTRhJL8yu/aUtQE2tTtkSs
|
||||
smZO57lraFgHrzITmMrX2YN+zUPmPBzMR7DTokz7vF0
|
||||
-> ssh-ed25519 KbVVUw CWyZ23afjLH+gYTd65bbFn8WsANQ9aTP+yzLTB+kfXQ
|
||||
3DwNcjOK1RN+3h11F5EW+vuQ5XWFi3YWCRH/cCk07ME
|
||||
-> ssh-ed25519 xNtnoA fVijhVsClnRApihRPJIXy8opdauQqn+U91BpOzFXs0c
|
||||
p43mj62qt3UwZIJ3sEca7KOyVLm6Cf9pESPypynDisc
|
||||
-> ssh-ed25519 aY2AXA 54bAi78JemUIoQc/Pb/8LAsJxbFpFHHIN1UcntdyXCg
|
||||
cq0NBRonzLdQdFLPLUcjvx4Il1UWVLnFsICBCqevlMQ
|
||||
-> ssh-ed25519 AQhf1g c9N1Qdzcy69F/YIELCkLL7N+bhlrrayTaVnYUCfg9Ug
|
||||
geeeJijhKWMWnFw9SM1KzXobiIRSa9KlUHALZZ96U7U
|
||||
-> ssh-ed25519 mOmPfg LZx58dG8J26Wuo170v9wAwRU4CwDeE1zFdTriT9vakg
|
||||
DHuw7aQRfZMlSB9A0i+Ky1Edk7PXBBcPaAg8y6AbmG0
|
||||
-> ssh-ed25519 YJiRbw mM+A4CrVmyP16e+LlVIBxXEs9c34ulR3sGN2uzVL5Q4
|
||||
j0csX74W7AG2icm+3tIA4jedXOFEt/OlBhFYpuY8a4o
|
||||
-> ssh-ed25519 Nl/5yA erYJzDKqw+UTMMnBJGPw8jyz4yXUBV3y9JiQbgmDUkM
|
||||
EaTzI4aqX2X9uEfn2RPIQb+m9aTr+gW2rkPuEgmDEA0
|
||||
-> ssh-ed25519 GdLgCQ +wsQawmcu8rGdV8UDDCKKDIWY3L9EZ5Fwfmbtedz1BU
|
||||
dDesLgik+S47jKjEe+UDYiMQfTgTQpcdSwnudMvyaJ0
|
||||
-> ssh-ed25519 tOH/HQ UY3eAd44x9k5wNCPjX9YIp6aat8FT/UJRExONGvPnEg
|
||||
0eZw751dXjs+BCmkQijmusvRy1ustwuX6MfIutFtu+4
|
||||
-> ssh-ed25519 FpzvfQ kLixy4M/wruC/wZh67BhRnomKyV8ui8VoYtTzwjFr0c
|
||||
+onxi4oeyZSfw7vj2LARTy9Se+BEg0PyK0Ts7cx294k
|
||||
-> ssh-ed25519 2UotMw DgMN2c+WcPSpjbJ/NOTtkBJUywVGqBOfHr7lM9AKtEs
|
||||
+7+P2Odquk8CwBrpcjtJGGHCIWMGd3JO/coRDwn4ZNc
|
||||
-> ssh-ed25519 kdPvzQ ZckKwL+D3JGoXz/XG4LVSFs5+esEQ4sBQn9cvGR1gCI
|
||||
l1psNLjdEeCKhBI6TBEqHbroyQuT52szY8leXYIdxqo
|
||||
-> ssh-ed25519 onmXpg uJ7DNclFa7PrStOsVOPS0tDLRyGHz6VQIms1eUMGVR0
|
||||
NLKFC+Q4YAongfCoVCFsdm8J+Tg1iFtG7q07VJZVX48
|
||||
-> ssh-ed25519 CnhD0g waKnwNZsusul3ApZwQAWe7G2Nnn18xnlCo4gzDh85ig
|
||||
qSwoGa5SEQ6hEDDusUTiXDbbrW7MYWLNH1LF2bCo9TQ
|
||||
-> ssh-ed25519 4ep2UA XJL0990Wn/KVL9gtbvklvPrC6WfjXpzcS+5HLdUe0F0
|
||||
o8Om0BXgLFRqFGGZxKYiYiVWndb/FB2W4HmMtkCXLqo
|
||||
--- e1pf5cHwhg79dMr7isV1uaWHdciGO4Tf4Jc3fsxgmqs
|
||||
®␍ƶ òobeZ/ˆÈ˜¥¶9␍Ëý†…�—}¦t,Ô%îÄlìœÅrÅ(ÚŸHé°[Ä�B³µ1C;[ɦ‰žDËL‚$V¥l|…Ø
|
||||
-> ssh-ed25519 8UnW5Q Z1Zt3ObMDbq7suhJb1k/O9dgrQN95vTIDu2STbO71g4
|
||||
UiyIVoagk70mtct1YxFQtUCHcGbfYhtA1QDUtfFz+eQ
|
||||
-> ssh-ed25519 UFfTmg IsYLw4pCTs1Xkels8aGAGSc6Lqx5Y8mWBpervFWsKUA
|
||||
eBFYqndg81YgePY0yEuKWDCD9LTnOxLevT7iy6m6Nfo
|
||||
-> ssh-ed25519 xNtnoA H5M7J8lYq8r5GuNNjx+1QHCtiTNw9SSWdWcpmRlTUyQ
|
||||
4N/qiG/TZoWIn2KuZwlrqxt27wB7HGtxJPxHRzeRXo4
|
||||
-> ssh-ed25519 aY2AXA wN6zKGGRfj9Uyib2+94wRnqzkltJbjn6LyOjnJGMXEk
|
||||
Rx5FQte2kyo1m05YMupG2LA6Ddzp0kAVFkoB2tpgV0w
|
||||
-> ssh-ed25519 AQhf1g ocOb67dklB9G6Pi0icJ6OuB0nvMsb3gyvSdkTulqbUI
|
||||
PEjigA1SVW19c/yyWxCNrRbxWNAowcQYbw2z9busLIY
|
||||
-> ssh-ed25519 r/3ipA vFM4wk+L8Wv04+Rry0brtnSLz/ChaNYup4VI1Fm/kmc
|
||||
Du849WnNg6E/CQ+ui4+9vFAZJ47jJ0L2o/T2Sv0j/UY
|
||||
-> ssh-ed25519 mOmPfg NrTgNtkHKFT+ZPmW4ga8DGrJk7tiDF8Lel3By8uRRic
|
||||
y39BsMv6CAjVU0EYdfMA9Z+Sc0dFG89Toz/EBvFLMYE
|
||||
-> ssh-ed25519 YJiRbw k4IxoHzHTll31zEQldtYFJLAZcoACKulR1L/ch9lRRw
|
||||
/EPni0kgRovc2cESxbAV9c8hCLXzxBqr5S8Lt4WXrqU
|
||||
-> ssh-ed25519 Nl/5yA uC1gIjNtYyoJ1bsemEJRFnBV7MAAVrV5beyDpIJj5nE
|
||||
K+n4T8IGULklGYuoCr0x3Q4sN1NZ3YwAyEORG1Y0YiI
|
||||
-> ssh-ed25519 GdLgCQ dljs/yoxh5IV8S1wjksMF3f3+xw3Tsqv3ZPj459KWjo
|
||||
SZclrcYwhgwyrG6Sg4iHjN+PbKvet3B0AcaWFlMvdpA
|
||||
-> ssh-ed25519 tOH/HQ 9zHh+cM1vXMRx3zZwfOCkyQ2eBobH50JcWIO5UmoDB0
|
||||
lEA2DAb0UuiRknrKfmKjEpHnuWpSYEWw5Qk0s1JB3bY
|
||||
-> ssh-ed25519 FpzvfQ WxXIAYo3SVayrHVhiIS0enua5l+1LHuEYLI2ZJcrVkE
|
||||
5siODJVz1gQxoZgeUfl25Koqt4ilTYIYqxOGGwyh3Gk
|
||||
-> ssh-ed25519 2UotMw 7v7u40Gn57E1M/VNNTpgFhg7nsa0JmcZvOBjJ+/Y1mc
|
||||
yT1hqZue6sN65PnKgRr/upxXQlloD5s1WS/sosBKH6k
|
||||
-> ssh-ed25519 kdPvzQ Ey8yhg4MocBop8aKb9Y5Vulz26NleTREH0O9ga8kgmw
|
||||
eGr2QQasypgk26uQVwUkgjHGjgYVtJfjb80y9fht3qo
|
||||
-> ssh-ed25519 onmXpg Gk8NZVb+7qaAdps/C5u1CG+2DIFtHFDhAu+m/43Gd2Y
|
||||
A3WMc+zyVq2ra80T8SeXWxe+eeN/SmdicoOGQJaohDQ
|
||||
-> ssh-ed25519 CnhD0g MR+oV7rqxoBN3Xkoo4FJeMpMamkbU8kAbIivnzQDDlY
|
||||
djQB7mKq8raqp2Yy/N8s1fcoQ4Xi7KoWgn0axihsPm8
|
||||
-> ssh-ed25519 4ep2UA Cxu6m1Fu9gmC6Y14Yo6nebc2tUyo6zc2RRrskhoavE8
|
||||
g56/R04ow0jremNusFjtkWahskNc4pfynVKG+C4WYIY
|
||||
--- yn/4D5+C+8iqvDcMNFOrozE6KeEjPq35cMW468nMjzk
|
||||
ôvœíJëiÀ~ö³Ä*, i¹þ®‡¸QkÌz�yµ,NcæBÔºœ•ìk—~$ᤈž2¼¤/[¹®Tª‰¥¢,þCchÁ$à
|
||||
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user