Compare commits

..
Author SHA1 Message Date
kurogeek b4f9ae3f94 cursa: build sd-card image with secret injection
`clan machines build cursa --format sd-card` failed in clan-cli's
post-build secret injection:

  Expected directory /nix/store/...-nixos-image-sd-card-...img.zst/sd-card not found in build output

clan-cli assumed $out/<format>/ (only true for iso; sd-card writes
$out/sd-image/) and tried to inject into every format although only iso
has an addFilesScript. Fixed upstream in
patches/upstream-sd-card-secret-injection.patch (pending PR); until it
lands:

- shell.nix: apply patches/clan-cli-image-filepath.patch (the clan-cli
  part of the upstream change) to the devshell's clan-cli.
- modules/nixos/sd-card-image.nix: local copy of the upstream
  clan.core.image.sd-card.addFilesScript module. Writes the vars tree
  directly into the ext4 root partition with debugfs (no boot-time
  hook), verifies with cmp + e2fsck. Delete once clan-core ships it.
- cursa imports it and builds its sd-card image without disko.
2026-09-29 15:33:22 +07:00
kurogeek 6039edfac6 phonebox: stop dnsmasq trying to write leases to /dev/null
dhcp-leasefile=/dev/null logs 'failed to write /dev/null: Invalid argument'
every lease; leasefile-ro is the supported way to run without a lease file.
2026-09-29 07:46:41 +00:00
kurogeek 5066d4ee46 phonebox: arm hardware watchdog and auto-reboot on panic
mirach and almach have each hung at least twice since July with nothing in
the journal or pstore, and stayed down until someone power-cycled the board.
RuntimeWatchdogSec was 0 and kernel.panic was 0, so a hung kernel/PID1 or a
panic could never self-recover.

Arm the systemd hardware watchdog (30s) and reboot 10s after a panic on all
phonebox nodes. Watchdog resets will show up as extra entries in
journalctl --list-boots.
2026-09-29 07:46:41 +00:00
kurogeek a80202e419 flake.lock: cnx-network (ppp0 KeepConfiguration=yes) 2026-09-28 15:17:32 +07:00
kurogeek 9b0368edc6 machines/stellio: backport mt7530 .get_stats64 atomic-context fix
The MT7531 on the Flint 2 is MDIO-attached and shares the SoC MDIO bus
with the 2.5G WAN PHY. On 6.18.49 mt7530_get_stats64 takes the MDIO
mutex under the RCU read lock that /proc/net/dev readers hold; when the
WAN PHY is renegotiating (PPPoE flap) the mutex is contended, the read
sleeps in atomic context and the box oopses:

  BUG: scheduling while atomic: zerotier-one/1748/0x00000002
  mt7530_get_stats64 -> dsa_user_get_stats64 -> dev_seq_show
  Unable to handle kernel paging request at 0000afa547cef5f0

Vendor upstream 07d99587396024932e02474c3a5bede71d108454 (mainline
2026-05-04, absent from linux-6.18.y). Applies to v6.18.49 with one
fuzz-1 hunk (6.18 still exports mt7530_switch_ops).
2026-09-24 09:21:59 +00:00
kurogeek d525e63050 machines/stellio: persist the journal
Storage=volatile left nothing behind for the 2026-09-23/24 reboots: the
last persisted entry is journald stopping during the 2026-09-22 switch,
and /sys/fs/pstore is empty too. Keep the eMMC-wear intent with a 256M
cap and a 1 min sync interval matching the ext4 commit=60.
2026-09-24 09:21:46 +00:00
kurogeek 9b8d15d583 machines/stellio: a new whitehouse router that uses clanService/router from cnx-network 2026-09-23 15:31:57 +07:00
kurogeek fa95098b7e frappix: bump default_thai_company to 68f0817 (main) 2026-09-17 10:55:54 +00:00
kurogeek 0906700ad6 deneb: add default_thai_company frappe app to poyerp
Package git.b4l.co.th/newedge/default_thai_company as a frappix app
    (pkgs/frappix/default-thai-company.nix) and expose it through a new
    frappixAppsOverlay that extends the pkgs.frappix scope. Install it on
    the poyerp.newedge.house site on deneb.
2026-09-15 16:18:30 +07:00
kurogeek b9302e6192 clanService/prometheus: add mirach and almach 2026-09-11 10:53:00 +07:00
kurogeek 5cb262857e inventory/wifi: retry autoconnect and auth indefinitely
Set connection.autoconnect-retries=0 and connection.auth-retries=0 on the
NetworkManager profiles generated by the clan wifi module for buna, so a
flaky AP or slow auth never leaves the connection permanently blocked.
2026-09-09 04:15:18 +00:00
kurogeek 47e536540f flake: bump nixpkgs to fix broken prettier build
prettier 3.9.6 in nixpkgs e8be781 failed to build (stale pnpm lockfile in
binding-wasm32-wasi), breaking nix fmt. Fixed upstream in 58973d7.
2026-09-08 08:35:21 +00:00
kurogeek 282a8f8287 clanService/personal-computer: supportedFilesystems ntfs 2026-09-04 14:06:30 +07:00
kurogeek a9254c424d machines/sirius: buildPlatform.system = x86_64-linux 2026-09-04 13:43:04 +07:00
kurogeek 5961254878 machines/sirius: rm common module 2026-09-04 13:42:10 +07:00
kurogeek 9403ddbf08 clanService/headscale: adjust magic dns settings 2026-09-03 17:17:36 +07:00
kurogeek 37ff958560 inventory/auto-pull-update: limited to selected machines until a build machine is present 2026-09-03 13:58:29 +07:00
kurogeek efa4b39782 libreoffice-fresh -> libreoffice-stable 2026-09-03 12:22:15 +07:00
kurogeek e2341b7c79 inputs/nixpkgs,home-manager,clan-core,frappix, bump version 2026-09-03 12:21:00 +07:00
kurogeek dc1c94796a machines/sirius: reduce write on disk 2026-09-02 11:34:40 +07:00
kurogeek 5b07b98f40 inventory/prometheus: add buna to monitored machines 2026-08-21 12:03:34 +07:00
kurogeek 88ac5cbd83 machines/buna: use wifi 2026-08-19 14:34:34 +07:00
kurogeek 969c006f97 machines/deneb: support Thai characters 2026-08-16 14:02:41 +07:00
143 changed files with 3691 additions and 1235 deletions

No files matched your search

Generated
+230 -28
View File
@@ -38,6 +38,22 @@
"type": "github" "type": "github"
} }
}, },
"blobs": {
"flake": false,
"locked": {
"lastModified": 1604995301,
"narHash": "sha256-wcLzgLec6SGJA8fx1OEN1yV/Py5b+U5iyYpksUY/yLw=",
"owner": "simple-nixos-mailserver",
"repo": "blobs",
"rev": "2cccdf1ca48316f2cfd1c9a0017e8de5a7156265",
"type": "gitlab"
},
"original": {
"owner": "simple-nixos-mailserver",
"repo": "blobs",
"type": "gitlab"
}
},
"call-flake": { "call-flake": {
"locked": { "locked": {
"lastModified": 1687380775, "lastModified": 1687380775,
@@ -135,11 +151,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1781517972, "lastModified": 1788346295,
"narHash": "sha256-G8bIXFqifs/y62GNPwg20Ksf71raYwzmyN99gf1tXak=", "narHash": "sha256-k9Ol++FFhQuPya6ZNQwVhqZZkMvE1ytLtbdrbH5zkrI=",
"ref": "refs/heads/main", "ref": "refs/heads/main",
"rev": "7fc62d0c25c7a97d7027a9c248e21c97c9b3acc1", "rev": "b15797faeca7494a7fe5fde2691d93affa3d3e37",
"revCount": 14604, "revCount": 15239,
"type": "git", "type": "git",
"url": "https://git.clan.lol/clan/clan-core" "url": "https://git.clan.lol/clan/clan-core"
}, },
@@ -148,6 +164,36 @@
"url": "https://git.clan.lol/clan/clan-core" "url": "https://git.clan.lol/clan/clan-core"
} }
}, },
"cnx-network": {
"inputs": {
"clan-core": [
"clan-core"
],
"flake-parts": [
"flake-parts"
],
"nixos-mailserver": "nixos-mailserver",
"nixpkgs": [
"nixpkgs"
],
"treefmt-nix": [
"treefmt-nix"
]
},
"locked": {
"lastModified": 1790583225,
"narHash": "sha256-Nhgf1hptHA9pgcGN4U1wQqDg1cc3t6oCT/HCgBcRs/w=",
"ref": "refs/heads/main",
"rev": "b2749dcc6ebe5d055b691f32dd47039f745a7d0e",
"revCount": 203,
"type": "git",
"url": "https://git.b4l.co.th/B4L/cnx-network-clan"
},
"original": {
"type": "git",
"url": "https://git.b4l.co.th/B4L/cnx-network-clan"
}
},
"data-mesher": { "data-mesher": {
"inputs": { "inputs": {
"flake-parts": [ "flake-parts": [
@@ -164,11 +210,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1778718524, "lastModified": 1788308203,
"narHash": "sha256-pXLoI6Ax0EnUK6r34UM1vibVC7CfTu6j72R2692ZzPs=", "narHash": "sha256-dCOb9YIJv9I2udjqukvjlGiTyOvGnO7zVbot0PxjBGk=",
"rev": "12c552ad547d87254f33f33bddd1a2cdbeac754d", "rev": "644c49bbf121b3e256bc83ce10b5d97813d9181d",
"type": "tarball", "type": "tarball",
"url": "https://git.clan.lol/api/v1/repos/clan/data-mesher/archive/12c552ad547d87254f33f33bddd1a2cdbeac754d.tar.gz" "url": "https://git.clan.lol/api/v1/repos/clan/data-mesher/archive/644c49bbf121b3e256bc83ce10b5d97813d9181d.tar.gz"
}, },
"original": { "original": {
"type": "tarball", "type": "tarball",
@@ -249,6 +295,22 @@
"type": "github" "type": "github"
} }
}, },
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1767039857,
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
"owner": "NixOS",
"repo": "flake-compat",
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "flake-compat",
"type": "github"
}
},
"flake-parts": { "flake-parts": {
"inputs": { "inputs": {
"nixpkgs-lib": [ "nixpkgs-lib": [
@@ -357,11 +419,11 @@
"std": "std" "std": "std"
}, },
"locked": { "locked": {
"lastModified": 1782964989, "lastModified": 1787631179,
"narHash": "sha256-pU2Gye+1f+nvFleBTgXdeQfrQnKaJEuO2LT7PnsJ1p0=", "narHash": "sha256-l+Zt5XNTD0f0ChkzDJURfQlFAgANIMrGYrk51SZEJKU=",
"owner": "kurogeek", "owner": "kurogeek",
"repo": "frappix", "repo": "frappix",
"rev": "ac5e2814fc1aca188080bf6b50504cd329790e56", "rev": "fcb797886ae753b26a6e4415a7f2c19ba6adcf3b",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -370,6 +432,57 @@
"type": "github" "type": "github"
} }
}, },
"git-hooks": {
"inputs": {
"flake-compat": [
"cnx-network",
"nixos-mailserver",
"flake-compat"
],
"gitignore": "gitignore",
"nixpkgs": [
"cnx-network",
"nixos-mailserver",
"nixpkgs"
]
},
"locked": {
"lastModified": 1778507602,
"narHash": "sha256-kTwur1wV+01SdqskVMSo6JMEpg71ps3HpbFY2GsflKs=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "61ab0e80d9c7ab14c256b5b453d8b3fb0189ba0a",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "git-hooks.nix",
"type": "github"
}
},
"gitignore": {
"inputs": {
"nixpkgs": [
"cnx-network",
"nixos-mailserver",
"git-hooks",
"nixpkgs"
]
},
"locked": {
"lastModified": 1709087332,
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"haskell-flake": { "haskell-flake": {
"locked": { "locked": {
"lastModified": 1675296942, "lastModified": 1675296942,
@@ -416,11 +529,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1781557312, "lastModified": 1788355065,
"narHash": "sha256-QOIRYSUFSq7L5mY3dZymaVhcnne3tPgoR9riB0WocjA=", "narHash": "sha256-gAz5oTI7ur34CfuakQduiQd/2ZhO62Bn2XXg08nZYYQ=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "c03e4752899e55705dfa63979abd885c582a5c48", "rev": "d9d750e4fc11c10cab2da677bdd31e427f3a3a71",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -497,6 +610,35 @@
"url": "https://gti.telent.net/dan/liminix" "url": "https://gti.telent.net/dan/liminix"
} }
}, },
"matthew-hardware": {
"inputs": {
"disko": [
"clan-core",
"disko"
],
"flake-parts": [
"flake-parts"
],
"nixpkgs": [
"nixpkgs"
],
"unf": "unf"
},
"locked": {
"lastModified": 1789393925,
"narHash": "sha256-8PHRxSVWxu1ol1AIrqiP8g6t+h9fLekTgDdpgRa+sME=",
"ref": "mc/wip",
"rev": "ebee3891bc9cbec584f611b4bcdf12618da25148",
"revCount": 34,
"type": "git",
"url": "https://codeberg.org/matthewcroughan/matthew-hardware"
},
"original": {
"ref": "mc/wip",
"type": "git",
"url": "https://codeberg.org/matthewcroughan/matthew-hardware"
}
},
"microvm": { "microvm": {
"inputs": { "inputs": {
"flake-utils": "flake-utils", "flake-utils": "flake-utils",
@@ -547,11 +689,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1781242433, "lastModified": 1786845137,
"narHash": "sha256-bchLZZ3sRn740zyvD2icZSnNoTaanN0nw7l6fjVXO+E=", "narHash": "sha256-oQFip+v0luP8NIxJzmiW4Wu8bILsbFWom5l0zonl8hQ=",
"owner": "nix-darwin", "owner": "nix-darwin",
"repo": "nix-darwin", "repo": "nix-darwin",
"rev": "aabb2037edfc0f210723b72cd5f528aab5dd3f0b", "rev": "4cff07de74b50e64bdd68cd4e722ab5b6b35ee48",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -690,6 +832,31 @@
"type": "github" "type": "github"
} }
}, },
"nixos-mailserver": {
"inputs": {
"blobs": "blobs",
"flake-compat": "flake-compat",
"git-hooks": "git-hooks",
"nixpkgs": [
"cnx-network",
"nixpkgs"
]
},
"locked": {
"lastModified": 1785198005,
"narHash": "sha256-falBPi+PJtMx0vwII8L24wjDGXNZMwRiVXsw8WTXLEo=",
"owner": "simple-nixos-mailserver",
"repo": "nixos-mailserver",
"rev": "d357b9f048c5532ec81b0e0034c0b8463d5ddd46",
"type": "gitlab"
},
"original": {
"owner": "simple-nixos-mailserver",
"ref": "nixos-26.05",
"repo": "nixos-mailserver",
"type": "gitlab"
}
},
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1712920918, "lastModified": 1712920918,
@@ -707,11 +874,27 @@
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1781359544, "lastModified": 1780365719,
"narHash": "sha256-iUuzKQcyXvopYDDzFpMK5eQKP3WIJExYny2kJtbgUcE=", "narHash": "sha256-QfWfccTN+70ZQ4m2qlU9PiKfz2Yppq94058iJyARNwc=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "9f11f828c213641c2369a9f1fa31fe31557e3156", "rev": "ffa10e26ae11d676b2db836259889f1f571cb14f",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1788775869,
"narHash": "sha256-JRf1lSypbvKj6AzUZHpUA6YC1DirVuitZWOnRwcm+Ww=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "58973d74f1893afe13f5902919803a0e99da0ca4",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -752,16 +935,15 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1708640854, "lastModified": 1787579760,
"narHash": "sha256-EpcAmvIS4ErqhXtVEfd2GPpU/E/s8CCRSfYzk6FZ/fY=", "narHash": "sha256-WGhIEINOICx7bhV3WrSz0QTzv8uzaaa9AXvD1clIWpc=",
"owner": "paisano-nix", "owner": "paisano-nix",
"repo": "core", "repo": "core",
"rev": "adcf742bc9463c08764ca9e6955bd5e7dcf3a3fe", "rev": "88739c84d308876714322eb9844ede6597c1a580",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "paisano-nix", "owner": "paisano-nix",
"ref": "0.2.0",
"repo": "core", "repo": "core",
"type": "github" "type": "github"
} }
@@ -810,14 +992,16 @@
"inputs": { "inputs": {
"clan-community": "clan-community", "clan-community": "clan-community",
"clan-core": "clan-core", "clan-core": "clan-core",
"cnx-network": "cnx-network",
"devshell": "devshell", "devshell": "devshell",
"flake-parts": "flake-parts", "flake-parts": "flake-parts",
"frappix": "frappix", "frappix": "frappix",
"home-manager": "home-manager", "home-manager": "home-manager",
"import-tree": "import-tree", "import-tree": "import-tree",
"liminix": "liminix", "liminix": "liminix",
"matthew-hardware": "matthew-hardware",
"nixos-images": "nixos-images", "nixos-images": "nixos-images",
"nixpkgs": "nixpkgs_2", "nixpkgs": "nixpkgs_3",
"plasma-manager": "plasma-manager", "plasma-manager": "plasma-manager",
"treefmt-nix": "treefmt-nix" "treefmt-nix": "treefmt-nix"
} }
@@ -830,11 +1014,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1780547341, "lastModified": 1788337237,
"narHash": "sha256-Gq8KNx5A7hBB3uGJaj6eQfLDIz5YdLu92gqBcvHvoUo=", "narHash": "sha256-gkSH8VUtCo6hnysNmb9DbTuDepH2t5pv+QWjP75xKAk=",
"owner": "Mic92", "owner": "Mic92",
"repo": "sops-nix", "repo": "sops-nix",
"rev": "9ed65852b6257fbeae4355bc24ecfea307ca759a", "rev": "fbf759290e0cb0a98dfc813a4eb7d53ad1dacb57",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -985,6 +1169,24 @@
"type": "github" "type": "github"
} }
}, },
"unf": {
"inputs": {
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1779596435,
"narHash": "sha256-ztzeJVOQDhQtE0z9DwtSWL+OyoWKZrAD4gzRRvUP9ug=",
"ref": "refs/heads/main",
"rev": "4f5ab30ee524f09126b09f42f249c0aba756459d",
"revCount": 6,
"type": "git",
"url": "https://git.atagen.co/atagen/unf"
},
"original": {
"type": "git",
"url": "https://git.atagen.co/atagen/unf"
}
},
"yants": { "yants": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
+17
View File
@@ -51,6 +51,23 @@
inputs.nixos-unstable.follows = "nixpkgs"; inputs.nixos-unstable.follows = "nixpkgs";
inputs.nixos-stable.follows = "nixpkgs"; inputs.nixos-stable.follows = "nixpkgs";
}; };
matthew-hardware = {
url = "git+https://codeberg.org/matthewcroughan/matthew-hardware?ref=mc/wip";
inputs.flake-parts.follows = "flake-parts";
inputs.nixpkgs.follows = "nixpkgs";
inputs.disko.follows = "clan-core/disko";
};
# `router` clan service (site gateway: PPPoE, VLAN bridge, Kea/Blocky,
# nftables). Consumed via `module.input = "cnx-network"` in inventories/router.nix.
cnx-network = {
url = "git+https://git.b4l.co.th/B4L/cnx-network-clan";
inputs.clan-core.follows = "clan-core";
inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-parts.follows = "flake-parts";
inputs.treefmt-nix.follows = "treefmt-nix";
};
}; };
outputs = outputs =
{ {
+66 -8
View File
@@ -2,6 +2,7 @@
imports = [ imports = [
./personal-computer.nix ./personal-computer.nix
./emmie.nix ./emmie.nix
./router.nix
]; ];
clan = { clan = {
inventory = { inventory = {
@@ -16,7 +17,10 @@
"deneb" "deneb"
"bosona" "bosona"
]; ];
w = [ "sirius" ]; w = [
"sirius"
"stellio"
];
b4l = [ b4l = [
"rigel" "rigel"
"rana" "rana"
@@ -36,6 +40,7 @@
"cursa" "cursa"
"rigel" "rigel"
"vega" "vega"
"buna"
]; ];
dm-bootstrapper = [ dm-bootstrapper = [
@@ -45,6 +50,12 @@
"bosona" "bosona"
"canopus" "canopus"
]; ];
dm-pull-deploy = [
"rana"
"rigel"
"vega"
];
}; };
instances = { instances = {
@@ -181,7 +192,7 @@
} }
) )
]; ];
roles.default.tags = [ "all" ]; roles.default.tags = [ "dm-pull-deploy" ];
roles.default.settings.action = "switch"; roles.default.settings.action = "switch";
}; };
@@ -313,13 +324,28 @@
}; };
roles.server.machines."alasia".settings = { roles.server.machines."alasia".settings = {
public_url = "tailvpn.public.newedge.house"; public_url = "tailvpn.public.newedge.house";
base_domain = "tailnet.newedge.house";
advertise_routes = [ "10.0.10.0/24" ]; advertise_routes = [ "10.0.10.0/24" ];
dns = {
magic_dns = true;
base_domain = "tailvpn.newedge.house";
nameservers = [ nameservers = [
"10.0.10.82" "10.0.10.82"
"1.1.1.1" "1.1.1.1"
"8.8.8.8" "8.8.8.8"
]; ];
extra_records = [
{
name = "poyerp.newedge.house";
type = "A";
value = "10.0.10.1";
}
{
name = "glomerp.newedge.house";
type = "A";
value = "10.0.10.1";
}
];
};
}; };
}; };
@@ -489,15 +515,47 @@
exporters.smartctl = { }; exporters.smartctl = { };
exporters.zfs = { }; exporters.zfs = { };
}; };
buna.settings = {
exporters.smartctl = { };
};
mirach.settings = {
exporters.smartctl = { };
};
almach.settings = {
exporters.smartctl = { };
};
stellio.settings.exporters.smartctl = { };
}; };
}; };
wifi = { wifi =
module = { let
name = "wifi"; networks = {
input = "clan-community"; home = { };
glom = { };
};
in
{
module.name = "wifi";
module.input = "clan-community";
roles.default = {
machines."buna".settings = { inherit networks; };
extraModules = [
(
{ lib, ... }:
{
# profile names match the network attr names above;
# 0 = retry forever for both (defaults: 4 autoconnect attempts, 3 auth attempts)
networking.networkmanager.ensureProfiles.profiles = lib.mapAttrs (_: _: {
connection.autoconnect-retries = 0;
connection.auth-retries = 0;
}) networks;
}
)
];
}; };
roles.default.machines."anser".settings.networks.home = { };
}; };
}; };
+91
View File
@@ -0,0 +1,91 @@
# Site gateways: the `router` clan service from cnx-network-clan (see
# flake.nix input `cnx-network`, and that repo's modules/clan/router/README.md).
# One instance for the fleet; each site adds its gateway machine with the
# site's port / VLAN layout. `clan vars generate <gw>` then prompts for the
# PPPoE username/password.
{ lib, ... }:
let
# Admin mesh = the site's ZeroTier network. The service only opens SSH,
# metrics and iperf3 to this prefix, so the gateway must also be a peer of
# the same network (tag membership in default.nix). Prefix derivation as in
# cnx-network's modules/mesh-hosts.nix: fd + 8-byte network id + 0x9993,
# /88 covers every peer.
meshSubnet =
instance:
let
networkId = lib.fileContents ../vars/shared/zerotier-network-${instance}/network-id/value;
full = "fd" + networkId + "9993";
hextet = i: builtins.substring (i * 4) 4 full;
in
"${hextet 0}:${hextet 1}:${hextet 2}:${hextet 3}:${hextet 4}:${builtins.substring 20 2 full}00::/88";
in
{
clan.inventory.instances.router = {
module = {
name = "router";
input = "cnx-network";
};
roles.default.settings.mesh.subnet = meshSubnet "w-network";
# stellio: GL.iNet Flint 2 (GL-MT6000, MT7986a). Ports as named by the
# device tree in matthew-hardware: eth1 = the 2.5G "WAN" port, lan1 = the
# 2.5G LAN port, lan2-lan5 = the 1G LAN ports (DSA on the MT7531 switch).
roles.default.machines.stellio.settings = {
site = "white-house";
siteId = 8;
# PPPoE on the ISP's VLAN 10, as on the liminix router it replaces
# (routers/white-house); set to null if the ISP runs PPPoE untagged.
wan.interface = "end1";
wan.vlanId = 10;
# lan1 (2.5G): untagged mgmt port for on-site recovery. lan2-lan4 (1G):
# untagged client ports on lan. lan5 is the pre-cutover staging uplink:
# DHCP client into the old LAN (routers/white-house), SSH only, no VLAN
# membership; set stagingPort = null at cutover.
accessPorts = {
lan1 = "mgmt";
lan2 = "lan";
lan3 = "lan";
lan4 = "lan";
};
stagingPort = "lan5";
# Both MT7976 radios serve lan as an untagged access port, one SSID per
# band named like the GL-AR750 it stands in for ("GL-AR750" on 2.4 GHz,
# "GL-AR750-5" on 5 GHz) so clients roam over unchanged. Passphrases
# are the `wifi-GL-AR750-passphrase` / `wifi-GL-AR750-5-passphrase`
# vars prompts. Channels as on the old router. Check the band mapping
# with `iw phy` (mt7986: phy0/wlan0 = 2.4 GHz, phy1/wlan1 = 5 GHz).
wifi = {
enable = true;
countryCode = "TH";
networks = {
"GL-AR750".vlan = "lan";
"GL-AR750-5".vlan = "lan";
};
radios = {
wlan0 = {
band = "2g";
channel = 2;
wifi6 = true;
networks = [ "GL-AR750" ];
};
wlan1 = {
band = "5g";
channel = 36;
wifi6 = true;
networks = [ "GL-AR750-5" ];
};
};
};
# 10.1.<id>.0/24, router .1, DHCP pool .100-.199.
vlans = {
mgmt.id = 10;
lan.id = 20;
};
};
};
}
+1 -1
View File
@@ -19,7 +19,7 @@
"installedAt": 1765277591 "installedAt": 1765277591
}, },
"buna": { "buna": {
"installedAt": 1765343708 "installedAt": 1787123510
}, },
"rana": { "rana": {
"installedAt": 1773134236 "installedAt": 1773134236
-36
View File
@@ -1,36 +0,0 @@
{
config,
pkgs,
...
}:
let
in
{
nixpkgs.hostPlatform = {
system = "aarch64-linux";
};
clan.core.sops.defaultGroups = [ "admins" ];
clan.core.settings.name = "anser";
clan.core.settings.machine.description = "";
boot.loader.grub.enable = false;
boot.loader.generic-extlinux-compatible.enable = true;
boot.kernelModules = [
"aic8800_bsp"
"aic8800_fdrv"
];
hardware.enableRedistributableFirmware = true;
boot.kernelParams = [
"console=ttyS2,1500000n8"
"loglevel=4"
];
image.modules.sd-card.sdImage.postBuildCommands = ''
dd if=${pkgs.ubootRadxaZero3W}/u-boot-rockchip.bin of=$img conv=fsync,notrunc bs=512 seek=64
'';
}
+728 -606
View File
File diff suppressed because it is too large. Load diff
+11
View File
@@ -1,7 +1,12 @@
{ {
self,
... ...
}: }:
{ {
imports = [
self.nixosModules.sd-card-image
];
clan.core.settings.machine.description = clan.core.settings.machine.description =
"VM machine for collecting prometheus metrics and fire alerts"; "VM machine for collecting prometheus metrics and fire alerts";
@@ -11,4 +16,10 @@
system.stateVersion = "25.11"; system.stateVersion = "25.11";
clan.core.sops.defaultGroups = [ "admins" ]; clan.core.sops.defaultGroups = [ "admins" ];
image.modules.sd-card = {
disabledModules = [
./disko.nix
];
};
} }
+5
View File
@@ -25,8 +25,11 @@ in
inputs.self.overlays.frappixLibsOverlay inputs.self.overlays.frappixLibsOverlay
inputs.self.overlays.frappixPythonOverlay inputs.self.overlays.frappixPythonOverlay
inputs.self.overlays.frappixToolsOverlay inputs.self.overlays.frappixToolsOverlay
inputs.self.overlays.frappixAppsOverlay
]; ];
fonts.packages = [ pkgs.tlwg ];
clan.core.vars.generators.frappix = { clan.core.vars.generators.frappix = {
files = { files = {
sslCertificate.secret = false; sslCertificate.secret = false;
@@ -57,6 +60,7 @@ in
pkgs.frappix.hrms pkgs.frappix.hrms
pkgs.frappix.crm pkgs.frappix.crm
pkgs.frappix.posprinter pkgs.frappix.posprinter
pkgs.frappix.default_thai_company
]; ];
sites = { sites = {
"${sitename}" = { "${sitename}" = {
@@ -67,6 +71,7 @@ in
"hrms" "hrms"
"crm" "crm"
"posprinter" "posprinter"
"default_thai_company"
]; ];
}; };
}; };
+20 -8
View File
@@ -5,8 +5,6 @@
}: }:
{ {
imports = [ imports = [
self.nixosModules.common
./hardware-configuration.nix ./hardware-configuration.nix
]; ];
@@ -23,15 +21,12 @@
nixpkgs.hostPlatform = { nixpkgs.hostPlatform = {
system = "aarch64-linux"; system = "aarch64-linux";
}; };
nixpkgs.buildPlatform = {
system = "x86_64-linux";
};
system.stateVersion = "25.11"; system.stateVersion = "25.11";
services.journald.extraConfig = ''
Storage=volatile
RuntimeMaxUse=30M
RuntimeMaxFileSize=10M
'';
services.udisks2.enable = false; services.udisks2.enable = false;
nix.settings.log-lines = 25; nix.settings.log-lines = 25;
@@ -54,6 +49,23 @@
"sd_mod" "sd_mod"
]; ];
boot = {
consoleLogLevel = 0;
kernel.sysctl = {
"fs.suid_dumpable" = 0;
"kernel.core_pattern" = "/dev/null";
};
tmp = {
useTmpfs = true;
};
};
services.journald.settings.Journal.Storage = "none";
systemd = {
coredump.enable = false;
};
fileSystems."/mnt/hdd" = { fileSystems."/mnt/hdd" = {
device = "zdata/nas"; device = "zdata/nas";
fsType = "zfs"; fsType = "zfs";
+105
View File
@@ -0,0 +1,105 @@
{
config,
inputs,
lib,
pkgs,
...
}:
{
imports = [
inputs.matthew-hardware.nixosModules.mt7986a-glinet-gl-mt6000
];
# matthew-hardware's common/generic-uefi-image.nix still sets
# `image.repart.enable = true`; nixpkgs removed that option (importing
# image/repart.nix now always defines system.build.image). Declare it so the
# definition has somewhere to land. Drop once upstream stops setting it.
options.image.repart.enable = lib.mkOption {
type = lib.types.bool;
default = true;
internal = true;
};
config = {
hardware.mt7986a-glinet-gl-mt6000.enable = true;
hardware.mt7986a-glinet-gl-mt6000.zealous = true;
hardware.mt7986a-glinet-gl-mt6000.image.repart.enable = true;
nixpkgs.hostPlatform.system = "aarch64-linux";
nixpkgs.buildPlatform.system = "x86_64-linux";
system.stateVersion = "26.11";
clan.core.sops.defaultGroups = [ "admins" ];
clan.core.settings.name = "stellio";
clan.core.settings.machine.description = "Flint-2 router";
# Root is ext4 on the Flint 2's eMMC: keep steady-state writes off it.
# The journal is persistent but bounded (256M) and synced once a minute
# (the router needs logs for pppd/kea debugging and, after the Sep 2026
# unlogged reboots, for post-mortem; volatile storage left nothing).
# /tmp is tmpfs, no core dumps, and ext4 skips atime updates and
# flushes its journal every 60 s instead of 5 s so the small periodic
# writes (Kea leases, timesyncd clock, speedtest textfile, journal)
# coalesce. A power cut loses at most a minute of that state.
fileSystems."/".options = [
"noatime"
"commit=60"
];
boot.tmp.useTmpfs = true;
services.journald.settings.Journal = {
Storage = "persistent";
SystemMaxUse = "256M";
SyncIntervalSec = "1m";
};
systemd.coredump.enable = false;
# Upstream 07d9958739 (mainline 2026-05, not in linux-6.18.y). The MT7531
# switch on the Flint 2 hangs off MDIO, and mt7530_get_stats64 took the
# MDIO mutex under the RCU read lock that /proc/net/dev holds, so any
# stats reader (zerotier-one, node exporter, `ip -s link`) that raced a
# PHY access oopsed the box: "BUG: scheduling while atomic" ->
# "Unable to handle kernel paging request" on 2026-09-20 09:02 UTC.
# Drop once boot.kernelPackages moves to a kernel that carries it.
boot.kernelPatches = [
{
name = "mt7530-get-stats64-atomic";
patch = ./mt7530-get-stats64-atomic.patch;
}
];
# nixpkgs' services.blocky check runs the aarch64 blocky in a
# system.checks derivation, which an x86_64 builder without binfmt cannot
# execute (`--max-jobs 0` -> Exec format error). Validate the same YAML
# with the build host's blocky instead. Drop once cnx-network's router
# service carries this itself (router/dns: validate the Blocky config
# with the build host's binary).
services.blocky.enableConfigCheck = false;
system.checks = [
(pkgs.runCommand "check-blocky-config" { } ''
${lib.getExe pkgs.buildPackages.blocky} --config ${
(pkgs.formats.yaml { }).generate "blocky-config.yaml" config.services.blocky.settings
} validate && touch $out
'')
];
systemd.services.heartbeat-push = {
description = "Heartbeat push to uptime monitor";
serviceConfig = {
Type = "oneshot";
ExecStart = "${pkgs.curl}/bin/curl -s -o /dev/null https://uptime.b4l.co.th/api/push/X0WCHAcY5gPf1U8If7BT1FLjpacZqGZu?status=up&msg=OK&ping=";
};
};
systemd.timers.heartbeat-push = {
description = "Heartbeat push timer";
wantedBy = [ "timers.target" ];
timerConfig = {
OnBootSec = "60s";
OnUnitActiveSec = "60s";
Unit = "heartbeat-push.service";
};
};
};
}
@@ -1,4 +1,5 @@
{ inputs, ... }: { { inputs, ... }:
{
disko = { disko = {
imageBuilder = { imageBuilder = {
# Avoid double emulation to significantly speed up image building process. # Avoid double emulation to significantly speed up image building process.
@@ -8,7 +9,5 @@
inputs.nixpkgs.legacyPackages.x86_64-linux.qemu inputs.nixpkgs.legacyPackages.x86_64-linux.qemu
+ "/bin/qemu-system-aarch64 -M virt -cpu cortex-a57"; + "/bin/qemu-system-aarch64 -M virt -cpu cortex-a57";
}; };
# Default image size is 2G for a small basic CLI system.
# devices.disk.main.imageSize = "2G";
}; };
} }
@@ -0,0 +1,230 @@
From 07d99587396024932e02474c3a5bede71d108454 Mon Sep 17 00:00:00 2001
From: Daniel Golle <daniel@makrotopia.org>
Date: Sat, 2 May 2026 11:55:02 +0100
Subject: net: dsa: mt7530: fix .get_stats64 sleeping in atomic context
The .get_stats64 callback runs in atomic context, but on
MDIO-connected switches every register read acquires the MDIO bus
mutex, which can sleep:
[ 12.645973] BUG: sleeping function called from invalid context at kernel/locking/mutex.c:609
[ 12.654442] in_atomic(): 0, irqs_disabled(): 0, non_block: 0, pid: 759, name: grep
[ 12.663377] preempt_count: 0, expected: 0
[ 12.667410] RCU nest depth: 1, expected: 0
[ 12.671511] INFO: lockdep is turned off.
[ 12.675441] CPU: 0 UID: 0 PID: 759 Comm: grep Tainted: G S W 7.0.0+ #0 PREEMPT
[ 12.675453] Tainted: [S]=CPU_OUT_OF_SPEC, [W]=WARN
[ 12.675456] Hardware name: Bananapi BPI-R64 (DT)
[ 12.675459] Call trace:
[ 12.675462] show_stack+0x14/0x1c (C)
[ 12.675477] dump_stack_lvl+0x68/0x8c
[ 12.675487] dump_stack+0x14/0x1c
[ 12.675495] __might_resched+0x14c/0x220
[ 12.675504] __might_sleep+0x44/0x80
[ 12.675511] __mutex_lock+0x50/0xb10
[ 12.675523] mutex_lock_nested+0x20/0x30
[ 12.675532] mt7530_get_stats64+0x40/0x2ac
[ 12.675542] dsa_user_get_stats64+0x2c/0x40
[ 12.675553] dev_get_stats+0x44/0x1e0
[ 12.675564] dev_seq_printf_stats+0x24/0xe0
[ 12.675575] dev_seq_show+0x14/0x3c
[ 12.675583] seq_read_iter+0x37c/0x480
[ 12.675595] seq_read+0xd0/0xec
[ 12.675605] proc_reg_read+0x94/0xe4
[ 12.675615] vfs_read+0x98/0x29c
[ 12.675625] ksys_read+0x54/0xdc
[ 12.675633] __arm64_sys_read+0x18/0x20
[ 12.675642] invoke_syscall.constprop.0+0x54/0xec
[ 12.675653] do_el0_svc+0x3c/0xb4
[ 12.675662] el0_svc+0x38/0x200
[ 12.675670] el0t_64_sync_handler+0x98/0xdc
[ 12.675679] el0t_64_sync+0x158/0x15c
For MDIO-connected switches, poll MIB counters asynchronously using a
delayed workqueue every second and let .get_stats64 return the cached
values under a spinlock. A mod_delayed_work() call on each read
triggers an immediate refresh so counters stay responsive when queried
more frequently.
MMIO-connected switches (MT7988, EN7581, AN7583) are not affected
because their regmap does not sleep, so they continue to read MIB
counters directly in .get_stats64.
Fixes: 88c810f35ed5 ("net: dsa: mt7530: implement .get_stats64")
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Acked-by: Chester A. Unal <chester.a.unal@arinc9.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Link: https://patch.msgid.link/6940b913da2c29156f0feff74b678d3c526ee84c.1777719253.git.daniel@makrotopia.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
drivers/net/dsa/mt7530.c | 75 ++++++++++++++++++++++++++++++++++++++++++++++--
drivers/net/dsa/mt7530.h | 8 ++++++
2 files changed, 80 insertions(+), 3 deletions(-)
diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c
index b9423389c2ef0..44d670904ad89 100644
--- a/drivers/net/dsa/mt7530.c
+++ b/drivers/net/dsa/mt7530.c
@@ -25,6 +25,9 @@
#include "mt7530.h"
+#define MT7530_STATS_POLL_INTERVAL (1 * HZ)
+#define MT7530_STATS_RATE_LIMIT (HZ / 10)
+
static struct mt753x_pcs *pcs_to_mt753x_pcs(struct phylink_pcs *pcs)
{
return container_of(pcs, struct mt753x_pcs, pcs);
@@ -906,10 +909,9 @@ static void mt7530_get_rmon_stats(struct dsa_switch *ds, int port,
*ranges = mt7530_rmon_ranges;
}
-static void mt7530_get_stats64(struct dsa_switch *ds, int port,
- struct rtnl_link_stats64 *storage)
+static void mt7530_read_port_stats64(struct mt7530_priv *priv, int port,
+ struct rtnl_link_stats64 *storage)
{
- struct mt7530_priv *priv = ds->priv;
uint64_t data;
/* MIB counter doesn't provide a FramesTransmittedOK but instead
@@ -951,6 +953,54 @@ static void mt7530_get_stats64(struct dsa_switch *ds, int port,
&storage->rx_crc_errors);
}
+static void mt7530_stats_refresh(struct mt7530_priv *priv)
+{
+ struct rtnl_link_stats64 stats = {};
+ struct dsa_port *dp;
+ int port;
+
+ dsa_switch_for_each_user_port(dp, priv->ds) {
+ port = dp->index;
+
+ mt7530_read_port_stats64(priv, port, &stats);
+
+ spin_lock_bh(&priv->stats_lock);
+ priv->ports[port].stats = stats;
+ priv->stats_last = jiffies;
+ spin_unlock_bh(&priv->stats_lock);
+ }
+}
+
+static void mt7530_stats_poll(struct work_struct *work)
+{
+ struct mt7530_priv *priv = container_of(work, struct mt7530_priv,
+ stats_work.work);
+
+ mt7530_stats_refresh(priv);
+ schedule_delayed_work(&priv->stats_work,
+ MT7530_STATS_POLL_INTERVAL);
+}
+
+static void mt7530_get_stats64(struct dsa_switch *ds, int port,
+ struct rtnl_link_stats64 *storage)
+{
+ struct mt7530_priv *priv = ds->priv;
+ bool refresh;
+
+ if (priv->bus) {
+ spin_lock_bh(&priv->stats_lock);
+ *storage = priv->ports[port].stats;
+ refresh = time_after(jiffies, priv->stats_last +
+ MT7530_STATS_RATE_LIMIT);
+ spin_unlock_bh(&priv->stats_lock);
+ if (refresh)
+ mod_delayed_work(system_percpu_wq,
+ &priv->stats_work, 0);
+ } else {
+ mt7530_read_port_stats64(priv, port, storage);
+ }
+}
+
static void mt7530_get_eth_ctrl_stats(struct dsa_switch *ds, int port,
struct ethtool_eth_ctrl_stats *ctrl_stats)
{
@@ -3137,9 +3187,24 @@ mt753x_setup(struct dsa_switch *ds)
if (ret && priv->irq_domain)
mt7530_free_mdio_irq(priv);
+ if (!ret && priv->bus) {
+ mt7530_stats_refresh(priv);
+ schedule_delayed_work(&priv->stats_work,
+ MT7530_STATS_POLL_INTERVAL);
+ }
+
return ret;
}
+static void
+mt753x_teardown(struct dsa_switch *ds)
+{
+ struct mt7530_priv *priv = ds->priv;
+
+ if (priv->bus)
+ cancel_delayed_work_sync(&priv->stats_work);
+}
+
static int mt753x_set_mac_eee(struct dsa_switch *ds, int port,
struct ethtool_keee *e)
{
@@ -3257,6 +3322,7 @@ static int mt7988_setup(struct dsa_switch *ds)
static const struct dsa_switch_ops mt7530_switch_ops = {
.get_tag_protocol = mtk_get_tag_protocol,
.setup = mt753x_setup,
+ .teardown = mt753x_teardown,
.preferred_default_local_cpu_port = mt753x_preferred_default_local_cpu_port,
.get_strings = mt7530_get_strings,
.get_ethtool_stats = mt7530_get_ethtool_stats,
@@ -3395,6 +3461,9 @@ mt7530_probe_common(struct mt7530_priv *priv)
priv->ds->ops = &mt7530_switch_ops;
priv->ds->phylink_mac_ops = &mt753x_phylink_mac_ops;
mutex_init(&priv->reg_mutex);
+ spin_lock_init(&priv->stats_lock);
+ INIT_DELAYED_WORK(&priv->stats_work, mt7530_stats_poll);
+
dev_set_drvdata(dev, priv);
return 0;
diff --git a/drivers/net/dsa/mt7530.h b/drivers/net/dsa/mt7530.h
index 3e0090bed298d..dd33b0df3419e 100644
--- a/drivers/net/dsa/mt7530.h
+++ b/drivers/net/dsa/mt7530.h
@@ -796,6 +796,7 @@ struct mt7530_fdb {
* @pvid: The VLAN specified is to be considered a PVID at ingress. Any
* untagged frames will be assigned to the related VLAN.
* @sgmii_pcs: Pointer to PCS instance for SerDes ports
+ * @stats: Cached port statistics for MDIO-connected switches
*/
struct mt7530_port {
bool enable;
@@ -803,6 +804,7 @@ struct mt7530_port {
u32 pm;
u16 pvid;
struct phylink_pcs *sgmii_pcs;
+ struct rtnl_link_stats64 stats;
};
/* Port 5 mode definitions of the MT7530 switch */
@@ -875,6 +877,9 @@ struct mt753x_info {
* @create_sgmii: Pointer to function creating SGMII PCS instance(s)
* @active_cpu_ports: Holding the active CPU ports
* @mdiodev: The pointer to the MDIO device structure
+ * @stats_lock: Protects cached per-port stats from concurrent access
+ * @stats_work: Delayed work for polling MIB counters on MDIO switches
+ * @stats_last: Jiffies timestamp of last MIB counter poll
*/
struct mt7530_priv {
struct device *dev;
@@ -900,6 +905,9 @@ struct mt7530_priv {
int (*create_sgmii)(struct mt7530_priv *priv);
u8 active_cpu_ports;
struct mdio_device *mdiodev;
+ spinlock_t stats_lock; /* protects cached stats counters */
+ struct delayed_work stats_work;
+ unsigned long stats_last;
};
struct mt7530_hw_vlan_entry {
--
cgit 1.3.1-korg
-1
View File
@@ -1,4 +1,3 @@
# Apple Network # Apple Network
This service allows atalkd instances to connect to each other over vxlan over Yggdrasil. We need to use vxlan due to the support of broadcasting it provides. The service will form a network of star-topology vxlan using the underlying Yggdrasil network. With this vxlan network, we can have a private Apple Talk network over the internet. This service allows atalkd instances to connect to each other over vxlan over Yggdrasil. We need to use vxlan due to the support of broadcasting it provides. The service will form a network of star-topology vxlan using the underlying Yggdrasil network. With this vxlan network, we can have a private Apple Talk network over the internet.
+47 -9
View File
@@ -19,12 +19,6 @@
description = "Public URL for accessing the instance"; description = "Public URL for accessing the instance";
}; };
base_domain = lib.mkOption {
type = with lib.types; str;
default = "";
description = "Defines the base domain to create the hostnames for MagicDNS in Headscale. `base_domain` must be a FQDN, without the trailing dot. The FQDN of the hosts will be `hostname.base_domain (e.g. myhost.tailnet.example.com)";
};
advertise_routes = lib.mkOption { advertise_routes = lib.mkOption {
type = with lib.types; listOf str; type = with lib.types; listOf str;
default = [ ]; default = [ ];
@@ -32,6 +26,13 @@
example = [ "192.168.1.0/24" ]; example = [ "192.168.1.0/24" ];
}; };
dns = {
base_domain = lib.mkOption {
type = with lib.types; str;
default = "";
description = "Defines the base domain to create the hostnames for MagicDNS in Headscale. `base_domain` must be a FQDN, without the trailing dot. The FQDN of the hosts will be `hostname.base_domain (e.g. myhost.tailnet.example.com)";
};
nameservers = lib.mkOption { nameservers = lib.mkOption {
type = with lib.types; listOf str; type = with lib.types; listOf str;
default = [ default = [
@@ -41,6 +42,42 @@
description = "List of nameservers to pass to Tailscale clients"; description = "List of nameservers to pass to Tailscale clients";
example = [ "10.0.10.1" ]; example = [ "10.0.10.1" ];
}; };
magic_dns = lib.mkOption {
type = with lib.types; bool;
default = true;
description = "Whether to enable MagicDNS";
};
extra_records = lib.mkOption {
type =
with lib.types;
nullOr (
listOf (submodule {
options = {
name = lib.mkOption {
type = lib.types.str;
description = "DNS record name.";
example = "grafana.tailnet.example.com";
};
type = lib.mkOption {
type = lib.types.enum [
"A"
"AAAA"
];
description = "DNS record type.";
example = "A";
};
value = lib.mkOption {
type = lib.types.str;
description = "DNS record value (IP address).";
example = "100.64.0.3";
};
};
})
);
};
};
}; };
}; };
@@ -170,10 +207,11 @@
settings.server_url = "https://${settings.public_url}"; settings.server_url = "https://${settings.public_url}";
settings.dns = { settings.dns = {
base_domain = settings.base_domain; base_domain = settings.dns.base_domain;
override_local_dns = true; override_local_dns = true;
nameservers.global = settings.nameservers; nameservers.global = settings.dns.nameservers;
magic_dns = false; magic_dns = settings.dns.magic_dns;
extra_records = settings.dns.extra_records;
}; };
}; };
@@ -11,7 +11,7 @@
homeDirectory = lib.mkForce "/home/${username}"; homeDirectory = lib.mkForce "/home/${username}";
stateVersion = osConfig.system.stateVersion; stateVersion = osConfig.system.stateVersion;
packages = with pkgs; [ packages = with pkgs; [
libreoffice-fresh libreoffice-stable
element-desktop element-desktop
signal-desktop signal-desktop
brave brave
-12
View File
@@ -16,18 +16,6 @@
... ...
}: }:
{ {
nixpkgs.overlays = [
(final: prev: {
pythonPackagesExtensions = prev.pythonPackagesExtensions ++ [
(pyFinal: pyPrev: {
psycopg = pyPrev.psycopg.overrideAttrs (old: {
disabledTests = old.disabledTests ++ [ "test_stats_connect" ];
});
})
];
})
];
services.paperless = { services.paperless = {
enable = lib.mkDefault true; enable = lib.mkDefault true;
}; };
+5
View File
@@ -0,0 +1,5 @@
{
boot.supportedFilesystems = {
ntfs = true;
};
}
+8 -1
View File
@@ -256,6 +256,13 @@
''; '';
}; };
# Phonebox nodes are headless and unattended. Observed on mirach/almach
# (2026-07..09): hard hangs leave no journal/pstore trace and stay down
# until someone power-cycles the board. Arm the hardware watchdog so a
# hung kernel/PID1 resets itself, and reboot instead of halting on panic.
systemd.settings.Manager.RuntimeWatchdogSec = "30s";
boot.kernel.sysctl."kernel.panic" = 10;
networking.interfaces = { networking.interfaces = {
${ata-interface} = { ${ata-interface} = {
useDHCP = false; useDHCP = false;
@@ -280,7 +287,7 @@
dhcp-range = [ dhcp-range = [
"192.168.254.100,192.168.254.100,255.255.255.0,3m" "192.168.254.100,192.168.254.100,255.255.255.0,3m"
]; ];
dhcp-leasefile = "/dev/null"; leasefile-ro = true;
dhcp-option = [ dhcp-option = [
"3,192.168.254.1" "3,192.168.254.1"
]; ];
-5
View File
@@ -14,11 +14,6 @@
... ...
}: }:
{ {
nixpkgs.overlays = [
(final: prev: {
libreoffice = prev.libreoffice-fresh;
})
];
services.stirling-pdf = { services.stirling-pdf = {
enable = lib.mkDefault true; enable = lib.mkDefault true;
+5 -5
View File
@@ -10,10 +10,10 @@ in
perSystem = perSystem =
{ ... }: { ... }:
{ {
clan.nixosTests.service-stirling-pdf = { # clan.nixosTests.service-stirling-pdf = {
imports = [ ./tests/vm/default.nix ]; # imports = [ ./tests/vm/default.nix ];
#
clan.modules."@clan/stirling-pdf" = module; # clan.modules."@clan/stirling-pdf" = module;
}; # };
}; };
} }
+3
View File
@@ -9,5 +9,8 @@
think-backend-gtcm = { think-backend-gtcm = {
imports = [ ./think-backend-gtcm.nix ]; imports = [ ./think-backend-gtcm.nix ];
}; };
sd-card-image = {
imports = [ ./sd-card-image.nix ];
};
}; };
} }
+180
View File
@@ -0,0 +1,180 @@
# Local copy of the clan-core module in patches/upstream-sd-card-secret-injection.patch.
# Delete once clan-core ships clan.core.image.sd-card.addFilesScript
# (the option declaration would conflict).
{
inputs,
lib,
pkgs,
...
}:
let
parseAddFilesArgs = "${inputs.clan-core}/nixosModules/clanCore/image/parse-add-files-args.sh";
# Writes extra files straight into the ext4 root partition of an SD image
# with debugfs, so no boot-time hook is needed: the files exist on the root
# filesystem from the first boot. Runs unprivileged and without mounting.
sdCardAddFilesScript = pkgs.writeShellApplication {
name = "add-files";
runtimeInputs = with pkgs; [
coreutils
diffutils
e2fsprogs
findutils
util-linux
zstd
];
extraShellCheckFlags = [ "-x" ];
text = ''
# shellcheck source=${parseAddFilesArgs}
source ${parseAddFilesArgs}
# If no extra paths, just copy source to output
if [[ ''${#extra_paths[@]} -eq 0 ]]; then
cp -- "$source_image" "$output_image"
exit 0
fi
# The injection sandbox mounts /tmp as a RAM-backed tmpfs and a raw SD
# image is several GiB, so stage it next to the output, the only
# writable on-disk path.
workdir=$(dirname "$output_image")
img="$workdir/.$(basename "$output_image").raw"
cmds=$(mktemp)
trap 'rm -f -- "$img" "$cmds"' EXIT
case "$source_image" in
*.zst)
zstd -d -q --no-progress -o "$img" -- "$source_image"
compress=1
;;
*)
cp --no-preserve=mode -- "$source_image" "$img"
compress=0
;;
esac
chmod u+w -- "$img"
# sd-image.nix writes an MBR whose ext4 root is the (only) type-83 partition.
root_start=""
while read -r _ start type; do
if [[ "$type" == "0x83" ]]; then
root_start=$start
fi
done < <(partx --show -g -o NR,START,TYPE -- "$img")
if [[ -z "$root_start" ]]; then
echo "No Linux (type 83) root partition found in $source_image" >&2
exit 1
fi
# e2fsprogs opens a partition inside a disk image via "<file>?offset=<bytes>".
rootfs="$img?offset=$((root_start * 512))"
# Build a debugfs command script. debugfs has neither mkdir -p nor a
# recursive write, so directories are created ancestor-first ("already
# exists" errors are harmless). write copies the source mode; ownership
# is forced to root since the script runs as an unprivileged user.
declare -A made_dirs=()
written=()
emit_mkdir_p() {
local dir="$1" path="" part
IFS=/ read -ra parts <<< "$dir"
for part in "''${parts[@]}"; do
[[ -z "$part" ]] && continue
path="$path/$part"
if [[ -z "''${made_dirs[$path]:-}" ]]; then
echo "mkdir \"$path\""
made_dirs[$path]=1
fi
done
}
emit_write() {
local src="$1" dest="$2"
echo "write \"$src\" \"$dest\""
echo "sif \"$dest\" uid 0"
echo "sif \"$dest\" gid 0"
written+=("$src" "$dest")
}
for ((i = 0; i < ''${#extra_paths[@]}; i += 2)); do
local_src="''${extra_paths[i]}"
# Normalize to an absolute path without trailing slash; "/" becomes "".
target="/''${extra_paths[i+1]#/}"
target="''${target%/}"
if [[ -d "$local_src" ]]; then
emit_mkdir_p "$target"
while IFS= read -r -d "" entry; do
dest="$target/''${entry#"$local_src"/}"
if [[ -d "$entry" ]]; then
emit_mkdir_p "$dest"
elif [[ -f "$entry" ]]; then
emit_write "$entry" "$dest"
else
echo "Unsupported file type (only regular files and directories): $entry" >&2
exit 1
fi
done < <(
# Never treat our own staging/output directory as input, even if
# the caller placed it inside an extra path.
find "$local_src" -mindepth 1 -path "$workdir" -prune -o -print0
)
elif [[ -f "$local_src" ]]; then
emit_mkdir_p "$(dirname "$target")"
emit_write "$local_src" "$target"
else
echo "Extra path does not exist: $local_src" >&2
exit 1
fi
done > "$cmds"
debugfs -w -f "$cmds" "$rootfs"
# debugfs exits 0 even when commands fail: verify every file landed
# intact and the filesystem is still consistent.
for ((i = 0; i < ''${#written[@]}; i += 2)); do
if ! debugfs -R "cat \"''${written[i+1]}\"" "$rootfs" 2>/dev/null | cmp -s -- - "''${written[i]}"; then
echo "Failed to write ''${written[i+1]} into the root filesystem" >&2
exit 1
fi
done
if ! fsck_output=$(EXT2FS_NO_MTAB_OK=yes e2fsck -fn "$rootfs" 2>&1); then
echo "Root filesystem is inconsistent after injection:" >&2
echo "$fsck_output" >&2
exit 1
fi
if [[ "$compress" == 1 ]]; then
zstd -T0 -q --no-progress --rm -o "$output_image" -- "$img"
else
mv -- "$img" "$output_image"
fi
'';
};
in
{
options.clan.core.image = {
sd-card.addFilesScript = lib.mkOption {
type = lib.types.package;
default = sdCardAddFilesScript;
defaultText = lib.literalExpression "pkgs.writeShellApplication { ... }";
description = ''
Script to inject extra files into an SD card image
(`clan machines build <machine> --format sd-card`).
Files are written directly into the ext4 root partition, so they are
present from the first boot without any initrd hook. Both compressed
(`.img.zst`, the `sdImage.compressImage` default) and raw `.img`
images are supported; the output keeps the source's format.
Source `parse-add-files-args.sh` to get standardized argument parsing.
After sourcing, `$source_image`, `$output_image`, and `$extra_paths`
are available.
Accepts the following arguments:
- --source `<path>`: Path to the original built image (read-only)
- --output `<path>`: Path for the modified output image
- --extra-path `<local-source>` `<target-path>`: Repeatable, maps a local
file or directory to a target filesystem path inside the image
'';
};
};
}
+1
View File
@@ -7,5 +7,6 @@
frappixLibsOverlay = inputs.frappix.libsOverlay.x86_64-linux; frappixLibsOverlay = inputs.frappix.libsOverlay.x86_64-linux;
frappixPythonOverlay = inputs.frappix.pythonOverlay.x86_64-linux; frappixPythonOverlay = inputs.frappix.pythonOverlay.x86_64-linux;
frappixToolsOverlay = inputs.frappix.toolsOverlay.x86_64-linux; frappixToolsOverlay = inputs.frappix.toolsOverlay.x86_64-linux;
frappixAppsOverlay = import ../pkgs/frappix/overlay.nix;
}; };
} }
+165
View File
@@ -0,0 +1,165 @@
diff --git a/clan_lib/machines/build.py b/clan_lib/machines/build.py
index 00e2b16..d9ed5a1 100644
--- a/clan_lib/machines/build.py
+++ b/clan_lib/machines/build.py
@@ -98,32 +98,42 @@ def _hostplatform_unset_hint(machine: Machine, build_format: str) -> str:
)
-def _is_image_format(build_format: str) -> bool:
- """Check if the build format is an image format that supports secret injection."""
- return build_format not in ("toplevel")
+def _image_add_files_script(machine: Machine, build_format: str) -> str | None:
+ """Return the format's addFilesScript store path.
+
+ None when clan has no file-injection support for this format
+ (i.e. no `clan.core.image.<format>.addFilesScript` option), in which
+ case secret injection must be skipped rather than fail.
+ """
+ result = machine.flake.select_machine(
+ machine.name,
+ f"config.clan.core.image.?{build_format}.addFilesScript",
+ )
+ return result.get(build_format)
-def _find_image_file(build_dir: Path, build_format: str) -> Path:
- """Find the actual image file within a build output directory.
+def _find_image_file(machine: Machine, build_dir: Path, build_format: str) -> Path:
+ """Resolve the image file within an image build output directory.
- Image builds output a directory (e.g., /nix/store/...-x86_64-linux.iso/)
- containing the image file in a subdirectory named after the format
- (e.g., iso/nixos-26.05-x86_64-linux.iso).
+ Image builds output a directory whose layout is format-specific
+ (iso/nixos-….iso, sd-image/nixos-….img.zst, …). nixpkgs exposes the
+ relative location as `config.image.filePath`, attached to the image
+ derivation as `passthru.filePath`.
"""
- format_dir = build_dir / build_format
- if not format_dir.is_dir():
- msg = f"Expected directory {format_dir} not found in build output"
- raise ClanError(msg)
- files = [f for f in format_dir.iterdir() if f.is_file()]
- if len(files) != 1:
- msg = f"Expected exactly one file in {format_dir}, found {len(files)}"
+ file_path: str = machine.flake.select_machine(
+ machine.name,
+ f"config.system.build.images.{build_format}.passthru.filePath",
+ )
+ image_file = build_dir / file_path
+ if not image_file.is_file():
+ msg = f"Expected image file {image_file} not found in build output"
raise ClanError(msg)
- return files[0]
+ return image_file
def _inject_secrets_into_image(
machine: Machine,
- build_format: str,
+ add_files_script: str,
source_image_path: Path,
output_path: Path,
*,
@@ -137,7 +147,9 @@ def _inject_secrets_into_image(
secrets_target_dir = machine.secret_vars_store.get_upload_directory(machine.name)
with TemporaryDirectory(prefix="clan-build-secrets-") as tmpdir:
- base_dir = Path(tmpdir).resolve()
+ # The tree mapped to "/" inside the image lives in its own subdir so
+ # the format script never sees its own output as input.
+ base_dir = Path(tmpdir).resolve() / "root"
upload_dir = base_dir / secrets_target_dir.lstrip("/")
upload_dir.mkdir(parents=True)
@@ -153,12 +165,6 @@ def _inject_secrets_into_image(
if not any(upload_dir.iterdir()):
return False
- # Get the addFilesScript path from the NixOS config
- script_path = machine.flake.select_machine(
- machine.name,
- f"config.clan.core.image.{build_format}.addFilesScript",
- )
-
# Remove stale output from previous runs (xorriso refuses to
# write to an existing non-empty file when indev != outdev)
output = Path(output_path)
@@ -167,12 +173,12 @@ def _inject_secrets_into_image(
# Write the image into the tmpdir so the sandbox only needs
# write access to the temp directory, not the final destination.
- sandbox_output = base_dir / "output" / output.name
+ sandbox_output = base_dir.parent / "output" / output.name
sandbox_output.parent.mkdir(parents=True)
# Execute the addFilesScript; clean up partial output on failure
inject_cmd: list[str] = [
- f"{script_path}/bin/add-files",
+ f"{add_files_script}/bin/add-files",
"--source",
str(source_image_path),
"--output",
@@ -265,33 +271,40 @@ def build_machine(
if build_path and (store := nix_test_store()):
build_path = store / str(build_path).lstrip("/")
- # Post-build secret injection for image formats
+ # Post-build secret injection for image formats that support it
if (
build_path
- and _is_image_format(options.format)
+ and options.format != "toplevel"
and not options.no_secrets
and not options.dry_run
):
- # build_path is a directory; resolve the actual image file inside
- source_file = _find_image_file(build_path, options.format)
- # Output to a file next to the symlink, named after the source file
- output_file = Path.cwd() / source_file.name
-
- secrets_injected = _inject_secrets_into_image(
- machine=machine,
- build_format=options.format,
- source_image_path=source_file,
- output_path=output_file,
- use_sandbox=options.use_sandbox,
- )
- if secrets_injected:
- log.warning(
- "This image contains secret key material "
- "(age private key). Treat this image as a sensitive "
- "artifact. Do not store it on shared or public media "
- "without encryption. Securely erase after use."
+ add_files_script = _image_add_files_script(machine, options.format)
+ if add_files_script is None:
+ log.info(
+ f"Image format '{options.format}' has no addFilesScript; "
+ "skipping secret injection"
)
- build_path = output_file
+ else:
+ # build_path is a directory; resolve the actual image file inside
+ source_file = _find_image_file(machine, build_path, options.format)
+ # Output to a file next to the symlink, named after the source file
+ output_file = Path.cwd() / source_file.name
+
+ secrets_injected = _inject_secrets_into_image(
+ machine=machine,
+ add_files_script=add_files_script,
+ source_image_path=source_file,
+ output_path=output_file,
+ use_sandbox=options.use_sandbox,
+ )
+ if secrets_injected:
+ log.warning(
+ "This image contains secret key material "
+ "(age private key). Treat this image as a sensitive "
+ "artifact. Do not store it on shared or public media "
+ "without encryption. Securely erase after use."
+ )
+ build_path = output_file
return BuildResult(
machine_name=machine.name,
@@ -0,0 +1,814 @@
From 78a3a5154f42f39bdeb913526439d51cd879f67c Mon Sep 17 00:00:00 2001
From: kurogeek <kurogeek@users.noreply.github.com>
Date: Fri, 25 Sep 2026 10:37:05 +0000
Subject: [PATCH] clan machines build --format sd-card: fix image lookup, add
secret injection
`clan machines build <m> --format sd-card` failed after a successful nix
build:
Expected directory /nix/store/...-nixos-image-sd-card-...img.zst/sd-card not found in build output
Three bugs in the post-build secret injection step (clan_lib/machines/
build.py):
1. _find_image_file assumed the image lives at $out/<format>/. That only
holds for iso. nixpkgs' sd-card image writes $out/sd-image/<name>.img.zst
(nixos/modules/installer/sd-card/sd-image.nix). nixpkgs exposes the
real location as config.image.filePath, attached to every
system.build.images.<format> derivation as passthru.filePath. Use it.
2. Injection ran for every non-toplevel format and then selected
config.clan.core.image.<format>.addFilesScript, which only iso
defines. Probe with the maybe-selector and skip injection (with a log
line) when the format has no addFilesScript, instead of failing after
an expensive image build. --no-secrets is no longer needed for such
formats.
3. The tree passed as `--extra-path <dir> /` and the sandbox output
directory were the same directory, so every addFilesScript saw its
own output as input. The iso script tars the tree before xorriso
writes, so it shipped an empty /output directory in every ISO; a
script that stages a working copy of the image next to the output
would try to inject that copy into itself. Keep them as siblings:
tmpdir/root is mapped to /, tmpdir/output is the only writable path.
Even with those fixed, sd-card images shipped without the age key, so a
freshly flashed machine could not decrypt its secrets on first boot.
Add clan.core.image.sd-card.addFilesScript. Unlike the ISO (read-only
squashfs, needs an initrd hook to unpack /extra-files.tar), the SD
image's root is a plain ext4 partition, so the files are written
directly into it with debugfs: no boot-time component, no mount, no
privileges. The script locates the type-83 root partition with partx,
opens it via e2fsprogs' "<img>?offset=<bytes>" syntax, generates a
debugfs command script (mkdir ancestors, write, sif uid/gid 0), then
verifies every written file with cmp against the source and runs
e2fsck -fn, since debugfs exits 0 even when a command fails. Both
.img.zst (sdImage.compressImage default) and raw .img inputs are
handled; the output keeps the input's format. The raw image is staged
next to the output because the sandbox's /tmp is a RAM tmpfs.
checks/clan-test-sd-card mirrors clan-test-iso: generate vars, run
`clan machines build peer1 --format sd-card` through the real CLI and
injection sandbox, boot the injected image in QEMU and verify over SSH
that a generated secret is decrypted (sops-nix found the injected age
key) and that /var/lib/sops-nix/key.txt is root:root 0600. The x86_64
sd image boots via extlinux.conf, which QEMU cannot load by itself
(nixpkgs' boot-uboot-extlinux test is marked broken), so the test does
what a bootloader would: extract kernel, initrd and APPEND from /boot on
the image's root partition with debugfs and pass them to QEMU with
-kernel/-initrd/-append.
Two unit tests in clan_cli/machines/build_test.py cover the CLI fixes;
both fail on main.
---
checks/clan-test-sd-card/default.nix | 196 ++++++++++++++++++
checks/clan-test-sd-card/flake.nix | 70 +++++++
checks/flake-module.nix | 1 +
nixosModules/clanCore/image/default.nix | 1 +
.../clanCore/image/sd-card/default.nix | 179 ++++++++++++++++
pkgs/clan-cli/clan_cli/machines/build_test.py | 67 +++++-
pkgs/clan-cli/clan_lib/machines/build.py | 107 +++++-----
7 files changed, 573 insertions(+), 48 deletions(-)
create mode 100644 checks/clan-test-sd-card/default.nix
create mode 100644 checks/clan-test-sd-card/flake.nix
create mode 100644 nixosModules/clanCore/image/sd-card/default.nix
diff --git a/checks/clan-test-sd-card/default.nix b/checks/clan-test-sd-card/default.nix
new file mode 100644
index 0000000..e692242
--- /dev/null
+++ b/checks/clan-test-sd-card/default.nix
@@ -0,0 +1,196 @@
+{
+ pkgs,
+ lib,
+ nixosLib,
+ clan-core,
+ ...
+}:
+let
+ system = pkgs.stdenv.hostPlatform.system;
+ qemu-common = import (pkgs.path + "/nixos/lib/qemu-common.nix") {
+ inherit lib;
+ inherit (pkgs) stdenv;
+ };
+in
+nixosLib.runTest (
+ { config, ... }:
+ let
+ closureInfo = pkgs.closureInfo {
+ rootPaths = [
+ config.clan.test.machinesCross.${system}.peer1.config.system.build.images.sd-card.drvPath
+ config.clan.test.machinesCross.${system}.peer1.config.clan.core.image.sd-card.addFilesScript
+ config.clan.test.machinesCross.${system}.peer1.config.sops.package
+ config.clan.test.machinesCross.${system}.peer1.config.sops.gnupg.package
+ config.clan.test.systemsFile
+ config.clan.test.flakeForSandbox
+ ];
+ };
+ in
+ {
+ imports = [
+ clan-core.modules.nixosTest.clanTest
+ ];
+
+ hostPkgs = pkgs;
+
+ name = "clan-test-sd-card";
+
+ clan.test.fromFlake = ./.;
+
+ # No framework-managed nodes; the SD image VM is created dynamically
+ containers = lib.mkForce { };
+
+ testScript = ''
+ import os
+ import shutil
+ import subprocess
+ import tempfile
+ import time
+ from nixos_test_lib.nix_setup import prepare_test_flake
+ from nixos_test_lib.port import find_free_port
+
+
+ # We don't have any machines to start but this is needed, as the container
+ # driver only sets up the environment correctly for nix build if this
+ # function es executed
+ start_all()
+
+ with tempfile.TemporaryDirectory() as temp_dir:
+ flake, _ = prepare_test_flake(temp_dir, "${config.clan.test.flakeForSandbox}", "${closureInfo}")
+
+ # generate sops keys
+ print("Generating vars...")
+ subprocess.run(
+ ["${
+ clan-core.packages.${system}.clan-cli-full
+ }/bin/clan", "vars", "keygen", "--flake", str(flake), "--debug"],
+ check=True,
+ )
+
+ # Test 1: Build the SD image with clan CLI (includes secret injection)
+ print("Building SD image with clan CLI...")
+ result = subprocess.run(
+ ["${
+ clan-core.packages.${system}.clan-cli-full
+ }/bin/clan", "machines", "build", "peer1", "--format", "sd-card", "--flake", str(flake), "--debug"],
+ check=True,
+ stdout=subprocess.PIPE,
+ text=True,
+ )
+ # The last non-empty line of stdout is the injected image path
+ image_path = result.stdout.strip().splitlines()[-1]
+ print(f"Built SD image at: {image_path}")
+ assert os.path.isfile(image_path), f"SD image not found at {image_path}"
+ assert image_path.endswith(".img.zst"), f"expected a compressed image, got {image_path}"
+
+ # Test 2: Boot the image and verify secrets via SSH
+ # QEMU needs a writable raw disk (the root partition is grown on first boot)
+ disk = os.path.join(temp_dir, "disk.img")
+ subprocess.run(["${pkgs.zstd}/bin/zstd", "-d", "-q", "-o", disk, "--", image_path], check=True)
+
+ # The image boots via extlinux.conf, which QEMU cannot load by itself.
+ # Do what the bootloader would: read kernel, initrd and cmdline from
+ # /boot on the root partition and pass them to QEMU directly.
+ root_start = int(subprocess.run(
+ ["${pkgs.util-linux}/bin/partx", "--show", "-g", "-o", "START", "--nr", "2", disk],
+ check=True, capture_output=True, text=True,
+ ).stdout)
+ rootfs = f"{disk}?offset={root_start * 512}"
+ boot_dir = os.path.join(temp_dir, "boot")
+ os.mkdir(boot_dir)
+ subprocess.run(
+ ["${pkgs.e2fsprogs}/bin/debugfs", "-R", f"rdump /boot {boot_dir}", rootfs],
+ check=True, capture_output=True,
+ )
+ extlinux_dir = os.path.join(boot_dir, "boot", "extlinux")
+ entry = {}
+ with open(os.path.join(extlinux_dir, "extlinux.conf")) as f:
+ for line in f:
+ key, _, value = line.strip().partition(" ")
+ if key in ("LINUX", "INITRD", "APPEND") and key not in entry:
+ entry[key] = value
+ kernel = os.path.normpath(os.path.join(extlinux_dir, entry["LINUX"]))
+ initrd = os.path.normpath(os.path.join(extlinux_dir, entry["INITRD"]))
+ print(f"Booting kernel={kernel} initrd={initrd} append={entry['APPEND']!r}")
+
+ host_port = find_free_port()
+
+ # Prepare SSH private key
+ ssh_key = os.path.join(temp_dir, "id_ed25519")
+ shutil.copy("${../assets/ssh/privkey}", ssh_key)
+ os.chmod(ssh_key, 0o600)
+
+ qemu_cmd = [
+ *"${qemu-common.qemuBinary pkgs.qemu_test}".split(),
+ "-m", "2048",
+ "-nographic",
+ "-kernel", kernel,
+ "-initrd", initrd,
+ "-append", entry["APPEND"],
+ "-drive", f"file={disk},format=raw,if=virtio",
+ "-netdev", f"user,id=net0,hostfwd=tcp::{host_port}-:22",
+ "-device", "virtio-net-pci,netdev=net0",
+ ]
+
+ qemu_log = open(os.path.join(temp_dir, "qemu.log"), "wb")
+ qemu_proc = subprocess.Popen(
+ qemu_cmd,
+ stdin=subprocess.DEVNULL,
+ stdout=qemu_log,
+ stderr=subprocess.STDOUT,
+ )
+
+ ssh_cmd = [
+ "${pkgs.openssh}/bin/ssh",
+ "-o", "UserKnownHostsFile=/dev/null",
+ "-o", "StrictHostKeyChecking=no",
+ "-o", "ConnectTimeout=3",
+ "-p", str(host_port),
+ "-i", ssh_key,
+ "root@localhost",
+ ]
+
+ # Wait for SSH to become available by trying to connect
+ print(f"Waiting for SSH on host port {host_port}...")
+ for i in range(300):
+ if qemu_proc.poll() is not None:
+ qemu_log.close()
+ print(open(os.path.join(temp_dir, "qemu.log"), errors="replace").read())
+ raise Exception(f"QEMU exited prematurely with code {qemu_proc.returncode}")
+ ret = subprocess.run(ssh_cmd + ["true"], capture_output=True)
+ if ret.returncode == 0:
+ print(f"SSH available after {i + 1} attempts")
+ break
+ time.sleep(1)
+ else:
+ qemu_log.close()
+ print(open(os.path.join(temp_dir, "qemu.log"), errors="replace").read())
+ raise Exception(f"SSH never became available on port {host_port}")
+
+ # Verify the test-generator secret is available with the expected value
+ result = subprocess.run(
+ ssh_cmd + ["cat /run/secrets/vars/per-machine/peer1/test-generator/test-secret"],
+ check=True,
+ capture_output=True,
+ text=True,
+ )
+ actual_secret = result.stdout.strip()
+ assert actual_secret == "HongKong", f"Secret mismatch: got {actual_secret!r}, expected 'HongKong'"
+
+ # The injected age key must be root-only on the root filesystem
+ result = subprocess.run(
+ ssh_cmd + ["stat -c '%U:%G %a' /var/lib/sops-nix/key.txt"],
+ check=True,
+ capture_output=True,
+ text=True,
+ )
+ assert result.stdout.strip() == "root:root 600", f"unexpected key.txt ownership/mode: {result.stdout.strip()!r}"
+
+ print("All SD image tests passed!")
+
+ qemu_proc.terminate()
+ qemu_proc.wait()
+ qemu_log.close()
+ '';
+ }
+)
diff --git a/checks/clan-test-sd-card/flake.nix b/checks/clan-test-sd-card/flake.nix
new file mode 100644
index 0000000..94a0948
--- /dev/null
+++ b/checks/clan-test-sd-card/flake.nix
@@ -0,0 +1,70 @@
+{
+ inputs.clan-core.url = "https://__replace__";
+ inputs.nixpkgs.url = "https://__replace__";
+ inputs.clan-core.inputs.nixpkgs.follows = "nixpkgs";
+ inputs.systems.url = "https://__systems__";
+ inputs.systems.flake = false;
+
+ outputs =
+ {
+ self,
+ clan-core,
+ systems,
+ ...
+ }:
+ let
+ inherit (clan-core.inputs.nixpkgs) lib;
+
+ hostSystem = lib.head (import systems);
+
+ # Usage see: https://clan.lol/docs
+ clan = clan-core.lib.clan {
+ inherit self;
+
+ machines.peer1 =
+ { modulesPath, ... }:
+ {
+ nixpkgs.hostPlatform = hostSystem;
+
+ imports = [
+ # Required for the NixOS test driver backdoor (hvc0 shell)
+ "${modulesPath}/testing/test-instrumentation.nix"
+ ];
+
+ # The image is booted from a virtio disk in QEMU
+ boot.initrd.availableKernelModules = [
+ "virtio_pci"
+ "virtio_blk"
+ ];
+
+ # Disable vars state version generation
+ clan.core.settings.state-version.enable = true;
+
+ # Enable one secret to be generated
+ clan.core.vars.generators.test-generator = {
+ files.test-secret.secret = true;
+ script = "echo HongKong > $out/test-secret";
+ };
+
+ # Enable SSH for boot verification
+ services.openssh.enable = true;
+ services.openssh.settings.PermitRootLogin = "yes";
+ users.users.root.openssh.authorizedKeys.keys = [
+ (builtins.readFile (clan-core + "/checks/assets/ssh/pubkey"))
+ ];
+ };
+
+ inventory =
+ { ... }:
+ {
+ meta.name = "foo";
+ meta.domain = "foo";
+ machines.peer1 = { };
+ };
+ };
+ in
+ {
+ # all machines managed by Clan
+ inherit (clan.config) nixosConfigurations nixosModules clanInternals;
+ };
+}
diff --git a/checks/flake-module.nix b/checks/flake-module.nix
index b6aa02a..5ce0733 100644
--- a/checks/flake-module.nix
+++ b/checks/flake-module.nix
@@ -94,6 +94,7 @@ in
service-dummy-test = import ./service-dummy-test nixosTestArgs;
service-dummy-test-from-flake = import ./service-dummy-test-from-flake nixosTestArgs;
clan-test-iso = import ./clan-test-iso nixosTestArgs;
+ clan-test-sd-card = import ./clan-test-sd-card nixosTestArgs;
};
packagesToBuild = lib.removeAttrs self'.packages (
diff --git a/nixosModules/clanCore/image/default.nix b/nixosModules/clanCore/image/default.nix
index 7dc3b5a..6191385 100644
--- a/nixosModules/clanCore/image/default.nix
+++ b/nixosModules/clanCore/image/default.nix
@@ -2,5 +2,6 @@
{
imports = [
./iso
+ ./sd-card
];
}
diff --git a/nixosModules/clanCore/image/sd-card/default.nix b/nixosModules/clanCore/image/sd-card/default.nix
new file mode 100644
index 0000000..2ef9fee
--- /dev/null
+++ b/nixosModules/clanCore/image/sd-card/default.nix
@@ -0,0 +1,179 @@
+{
+ lib,
+ pkgs,
+ ...
+}:
+let
+ parseAddFilesArgs = builtins.path {
+ path = ../parse-add-files-args.sh;
+ name = "parse-add-files-args.sh";
+ };
+
+ # Writes extra files straight into the ext4 root partition of an SD image
+ # with debugfs, so no boot-time hook is needed: the files exist on the root
+ # filesystem from the first boot. Runs unprivileged and without mounting.
+ sdCardAddFilesScript = pkgs.writeShellApplication {
+ name = "add-files";
+ runtimeInputs = with pkgs; [
+ coreutils
+ diffutils
+ e2fsprogs
+ findutils
+ util-linux
+ zstd
+ ];
+ extraShellCheckFlags = [ "-x" ];
+ text = ''
+ # shellcheck source=${parseAddFilesArgs}
+ source ${parseAddFilesArgs}
+
+ # If no extra paths, just copy source to output
+ if [[ ''${#extra_paths[@]} -eq 0 ]]; then
+ cp -- "$source_image" "$output_image"
+ exit 0
+ fi
+
+ # The injection sandbox mounts /tmp as a RAM-backed tmpfs and a raw SD
+ # image is several GiB, so stage it next to the output, the only
+ # writable on-disk path.
+ workdir=$(dirname "$output_image")
+ img="$workdir/.$(basename "$output_image").raw"
+ cmds=$(mktemp)
+ trap 'rm -f -- "$img" "$cmds"' EXIT
+
+ case "$source_image" in
+ *.zst)
+ zstd -d -q --no-progress -o "$img" -- "$source_image"
+ compress=1
+ ;;
+ *)
+ cp --no-preserve=mode -- "$source_image" "$img"
+ compress=0
+ ;;
+ esac
+ chmod u+w -- "$img"
+
+ # sd-image.nix writes an MBR whose ext4 root is the (only) type-83 partition.
+ root_start=""
+ while read -r _ start type; do
+ if [[ "$type" == "0x83" ]]; then
+ root_start=$start
+ fi
+ done < <(partx --show -g -o NR,START,TYPE -- "$img")
+ if [[ -z "$root_start" ]]; then
+ echo "No Linux (type 83) root partition found in $source_image" >&2
+ exit 1
+ fi
+ # e2fsprogs opens a partition inside a disk image via "<file>?offset=<bytes>".
+ rootfs="$img?offset=$((root_start * 512))"
+
+ # Build a debugfs command script. debugfs has neither mkdir -p nor a
+ # recursive write, so directories are created ancestor-first ("already
+ # exists" errors are harmless). write copies the source mode; ownership
+ # is forced to root since the script runs as an unprivileged user.
+ declare -A made_dirs=()
+ written=()
+ emit_mkdir_p() {
+ local dir="$1" path="" part
+ IFS=/ read -ra parts <<< "$dir"
+ for part in "''${parts[@]}"; do
+ [[ -z "$part" ]] && continue
+ path="$path/$part"
+ if [[ -z "''${made_dirs[$path]:-}" ]]; then
+ echo "mkdir \"$path\""
+ made_dirs[$path]=1
+ fi
+ done
+ }
+ emit_write() {
+ local src="$1" dest="$2"
+ echo "write \"$src\" \"$dest\""
+ echo "sif \"$dest\" uid 0"
+ echo "sif \"$dest\" gid 0"
+ written+=("$src" "$dest")
+ }
+
+ for ((i = 0; i < ''${#extra_paths[@]}; i += 2)); do
+ local_src="''${extra_paths[i]}"
+ # Normalize to an absolute path without trailing slash; "/" becomes "".
+ target="/''${extra_paths[i+1]#/}"
+ target="''${target%/}"
+
+ if [[ -d "$local_src" ]]; then
+ emit_mkdir_p "$target"
+ while IFS= read -r -d "" entry; do
+ dest="$target/''${entry#"$local_src"/}"
+ if [[ -d "$entry" ]]; then
+ emit_mkdir_p "$dest"
+ elif [[ -f "$entry" ]]; then
+ emit_write "$entry" "$dest"
+ else
+ echo "Unsupported file type (only regular files and directories): $entry" >&2
+ exit 1
+ fi
+ done < <(
+ # Never treat our own staging/output directory as input, even if
+ # the caller placed it inside an extra path.
+ find "$local_src" -mindepth 1 -path "$workdir" -prune -o -print0
+ )
+ elif [[ -f "$local_src" ]]; then
+ emit_mkdir_p "$(dirname "$target")"
+ emit_write "$local_src" "$target"
+ else
+ echo "Extra path does not exist: $local_src" >&2
+ exit 1
+ fi
+ done > "$cmds"
+
+ debugfs -w -f "$cmds" "$rootfs"
+
+ # debugfs exits 0 even when commands fail: verify every file landed
+ # intact and the filesystem is still consistent.
+ for ((i = 0; i < ''${#written[@]}; i += 2)); do
+ if ! debugfs -R "cat \"''${written[i+1]}\"" "$rootfs" 2>/dev/null | cmp -s -- - "''${written[i]}"; then
+ echo "Failed to write ''${written[i+1]} into the root filesystem" >&2
+ exit 1
+ fi
+ done
+ if ! fsck_output=$(EXT2FS_NO_MTAB_OK=yes e2fsck -fn "$rootfs" 2>&1); then
+ echo "Root filesystem is inconsistent after injection:" >&2
+ echo "$fsck_output" >&2
+ exit 1
+ fi
+
+ if [[ "$compress" == 1 ]]; then
+ zstd -T0 -q --no-progress --rm -o "$output_image" -- "$img"
+ else
+ mv -- "$img" "$output_image"
+ fi
+ '';
+ };
+in
+{
+ options.clan.core.image = {
+ sd-card.addFilesScript = lib.mkOption {
+ type = lib.types.package;
+ default = sdCardAddFilesScript;
+ defaultText = lib.literalExpression "pkgs.writeShellApplication { ... }";
+ description = ''
+ Script to inject extra files into an SD card image
+ (`clan machines build <machine> --format sd-card`).
+
+ Files are written directly into the ext4 root partition, so they are
+ present from the first boot without any initrd hook. Both compressed
+ (`.img.zst`, the `sdImage.compressImage` default) and raw `.img`
+ images are supported; the output keeps the source's format.
+
+ Source `parse-add-files-args.sh` to get standardized argument parsing.
+ After sourcing, `$source_image`, `$output_image`, and `$extra_paths`
+ are available.
+
+ Accepts the following arguments:
+ - --source `<path>`: Path to the original built image (read-only)
+ - --output `<path>`: Path for the modified output image
+ - --extra-path `<local-source>` `<target-path>`: Repeatable, maps a local
+ file or directory to a target filesystem path inside the image
+ '';
+ };
+ };
+}
diff --git a/pkgs/clan-cli/clan_cli/machines/build_test.py b/pkgs/clan-cli/clan_cli/machines/build_test.py
index ad0caf0..b5642a0 100644
--- a/pkgs/clan-cli/clan_cli/machines/build_test.py
+++ b/pkgs/clan-cli/clan_cli/machines/build_test.py
@@ -1,8 +1,9 @@
from pathlib import Path
import pytest
-from clan_lib.errors import ClanError
+from clan_lib.errors import ClanError, CmdOut
from clan_lib.flake import Flake
+from clan_lib.machines import build as build_lib
from clan_lib.machines.build import BuildOptions, build_machine
from clan_lib.machines.machines import Machine
@@ -131,3 +132,67 @@ def test_build_machine_without_hostplatform_raises_friendly_error(
assert "nixpkgs.hostPlatform" in msg
assert "--system" in msg
assert "jon" in msg
+
+
+def test_build_machine_skips_injection_for_format_without_add_files_script(
+ tmp_path: Path,
+ monkeypatch: pytest.MonkeyPatch,
+) -> None:
+ """Formats without clan.core.image.<format>.addFilesScript (e.g. sd-card)
+ must build successfully and return the raw nix output, not fail trying
+ to locate an image file for injection.
+ """
+ build_dir = tmp_path / "out"
+ (build_dir / "sd-image").mkdir(parents=True)
+ (build_dir / "sd-image" / "nixos.img.zst").touch()
+
+ def fake_run(cmd: list[str], *_args: object, **_kwargs: object) -> CmdOut:
+ return CmdOut(
+ stdout=f"{build_dir}\n",
+ stderr="",
+ env=None,
+ cwd=tmp_path,
+ command_list=cmd,
+ returncode=0,
+ msg=None,
+ )
+
+ def fake_select_machine(_self: Flake, _machine: str, selector: str) -> object:
+ assert selector == "config.clan.core.image.?sd-card.addFilesScript"
+ return {}
+
+ def no_secrets(*_args: object, **_kwargs: object) -> object:
+ msg = "secrets must not be generated for a format without addFilesScript"
+ raise AssertionError(msg)
+
+ monkeypatch.setattr(build_lib, "get_build_target", lambda *_a, **_k: "flake#x")
+ monkeypatch.setattr(build_lib, "run", fake_run)
+ monkeypatch.setattr(build_lib, "get_machine_generators", no_secrets)
+ monkeypatch.setattr(Flake, "select_machine", fake_select_machine)
+
+ machine = Machine(name="jon", flake=Flake(str(tmp_path)))
+ result = build_machine(machine, BuildOptions(format="sd-card", no_link=True))
+
+ assert result.build_path == build_dir
+
+
+def test_find_image_file_uses_image_filepath(
+ tmp_path: Path,
+ monkeypatch: pytest.MonkeyPatch,
+) -> None:
+ """The image lives at config.image.filePath inside the build output,
+ which is not necessarily a directory named after the format
+ (sd-card -> sd-image/...).
+ """
+ image = tmp_path / "sd-image" / "nixos-image-sd-card-x86_64-linux.img.zst"
+ image.parent.mkdir()
+ image.touch()
+
+ def fake_select_machine(_self: Flake, _machine: str, selector: str) -> str:
+ assert selector == "config.system.build.images.sd-card.passthru.filePath"
+ return "sd-image/nixos-image-sd-card-x86_64-linux.img.zst"
+
+ monkeypatch.setattr(Flake, "select_machine", fake_select_machine)
+ machine = Machine(name="jon", flake=Flake(str(tmp_path)))
+
+ assert build_lib._find_image_file(machine, tmp_path, "sd-card") == image
diff --git a/pkgs/clan-cli/clan_lib/machines/build.py b/pkgs/clan-cli/clan_lib/machines/build.py
index 00e2b16..d9ed5a1 100644
--- a/pkgs/clan-cli/clan_lib/machines/build.py
+++ b/pkgs/clan-cli/clan_lib/machines/build.py
@@ -98,32 +98,42 @@ def _hostplatform_unset_hint(machine: Machine, build_format: str) -> str:
)
-def _is_image_format(build_format: str) -> bool:
- """Check if the build format is an image format that supports secret injection."""
- return build_format not in ("toplevel")
+def _image_add_files_script(machine: Machine, build_format: str) -> str | None:
+ """Return the format's addFilesScript store path.
+
+ None when clan has no file-injection support for this format
+ (i.e. no `clan.core.image.<format>.addFilesScript` option), in which
+ case secret injection must be skipped rather than fail.
+ """
+ result = machine.flake.select_machine(
+ machine.name,
+ f"config.clan.core.image.?{build_format}.addFilesScript",
+ )
+ return result.get(build_format)
-def _find_image_file(build_dir: Path, build_format: str) -> Path:
- """Find the actual image file within a build output directory.
+def _find_image_file(machine: Machine, build_dir: Path, build_format: str) -> Path:
+ """Resolve the image file within an image build output directory.
- Image builds output a directory (e.g., /nix/store/...-x86_64-linux.iso/)
- containing the image file in a subdirectory named after the format
- (e.g., iso/nixos-26.05-x86_64-linux.iso).
+ Image builds output a directory whose layout is format-specific
+ (iso/nixos-….iso, sd-image/nixos-….img.zst, …). nixpkgs exposes the
+ relative location as `config.image.filePath`, attached to the image
+ derivation as `passthru.filePath`.
"""
- format_dir = build_dir / build_format
- if not format_dir.is_dir():
- msg = f"Expected directory {format_dir} not found in build output"
- raise ClanError(msg)
- files = [f for f in format_dir.iterdir() if f.is_file()]
- if len(files) != 1:
- msg = f"Expected exactly one file in {format_dir}, found {len(files)}"
+ file_path: str = machine.flake.select_machine(
+ machine.name,
+ f"config.system.build.images.{build_format}.passthru.filePath",
+ )
+ image_file = build_dir / file_path
+ if not image_file.is_file():
+ msg = f"Expected image file {image_file} not found in build output"
raise ClanError(msg)
- return files[0]
+ return image_file
def _inject_secrets_into_image(
machine: Machine,
- build_format: str,
+ add_files_script: str,
source_image_path: Path,
output_path: Path,
*,
@@ -137,7 +147,9 @@ def _inject_secrets_into_image(
secrets_target_dir = machine.secret_vars_store.get_upload_directory(machine.name)
with TemporaryDirectory(prefix="clan-build-secrets-") as tmpdir:
- base_dir = Path(tmpdir).resolve()
+ # The tree mapped to "/" inside the image lives in its own subdir so
+ # the format script never sees its own output as input.
+ base_dir = Path(tmpdir).resolve() / "root"
upload_dir = base_dir / secrets_target_dir.lstrip("/")
upload_dir.mkdir(parents=True)
@@ -153,12 +165,6 @@ def _inject_secrets_into_image(
if not any(upload_dir.iterdir()):
return False
- # Get the addFilesScript path from the NixOS config
- script_path = machine.flake.select_machine(
- machine.name,
- f"config.clan.core.image.{build_format}.addFilesScript",
- )
-
# Remove stale output from previous runs (xorriso refuses to
# write to an existing non-empty file when indev != outdev)
output = Path(output_path)
@@ -167,12 +173,12 @@ def _inject_secrets_into_image(
# Write the image into the tmpdir so the sandbox only needs
# write access to the temp directory, not the final destination.
- sandbox_output = base_dir / "output" / output.name
+ sandbox_output = base_dir.parent / "output" / output.name
sandbox_output.parent.mkdir(parents=True)
# Execute the addFilesScript; clean up partial output on failure
inject_cmd: list[str] = [
- f"{script_path}/bin/add-files",
+ f"{add_files_script}/bin/add-files",
"--source",
str(source_image_path),
"--output",
@@ -265,33 +271,40 @@ def build_machine(
if build_path and (store := nix_test_store()):
build_path = store / str(build_path).lstrip("/")
- # Post-build secret injection for image formats
+ # Post-build secret injection for image formats that support it
if (
build_path
- and _is_image_format(options.format)
+ and options.format != "toplevel"
and not options.no_secrets
and not options.dry_run
):
- # build_path is a directory; resolve the actual image file inside
- source_file = _find_image_file(build_path, options.format)
- # Output to a file next to the symlink, named after the source file
- output_file = Path.cwd() / source_file.name
-
- secrets_injected = _inject_secrets_into_image(
- machine=machine,
- build_format=options.format,
- source_image_path=source_file,
- output_path=output_file,
- use_sandbox=options.use_sandbox,
- )
- if secrets_injected:
- log.warning(
- "This image contains secret key material "
- "(age private key). Treat this image as a sensitive "
- "artifact. Do not store it on shared or public media "
- "without encryption. Securely erase after use."
+ add_files_script = _image_add_files_script(machine, options.format)
+ if add_files_script is None:
+ log.info(
+ f"Image format '{options.format}' has no addFilesScript; "
+ "skipping secret injection"
)
- build_path = output_file
+ else:
+ # build_path is a directory; resolve the actual image file inside
+ source_file = _find_image_file(machine, build_path, options.format)
+ # Output to a file next to the symlink, named after the source file
+ output_file = Path.cwd() / source_file.name
+
+ secrets_injected = _inject_secrets_into_image(
+ machine=machine,
+ add_files_script=add_files_script,
+ source_image_path=source_file,
+ output_path=output_file,
+ use_sandbox=options.use_sandbox,
+ )
+ if secrets_injected:
+ log.warning(
+ "This image contains secret key material "
+ "(age private key). Treat this image as a sensitive "
+ "artifact. Do not store it on shared or public media "
+ "without encryption. Securely erase after use."
+ )
+ build_path = output_file
return BuildResult(
machine_name=machine.name,
--
2.54.0
+35
View File
@@ -0,0 +1,35 @@
{
buildPythonPackage,
pythonRelaxDepsHook,
flit-core,
mkAssets,
fetchFromGitea,
}:
let
version = "0.0.1";
src = fetchFromGitea {
domain = "git.b4l.co.th";
owner = "newedge";
repo = "default_thai_company";
rev = "68f08171252099920d52f5c47800d65ddf4689b3";
sha256 = "sha256-9UomP8G5K+nkAMCfn+gXbBNivLlDo0c/36FYZgHm2Cw=";
};
in
buildPythonPackage (finalAttrs: {
# pname doubles as the frappe app name (services.frappe reads app.pname)
pname = "default_thai_company";
inherit version;
pyproject = true;
src = mkAssets {
inherit (finalAttrs) pname version;
inherit src;
yarnHash = "sha256-oZgyP0hTU9bxszOVg3Bmiu6yos2d2Inc1Do8To4z8GQ=";
};
nativeBuildInputs = [
pythonRelaxDepsHook
flit-core
];
})
+9
View File
@@ -0,0 +1,9 @@
# Extends the frappix app scope with in-house frappe apps.
# Must be applied after frappixFrappeOverlay (needs prev.frappix).
final: prev: {
frappix = prev.frappix.overrideScope (
ffinal: _fprev: {
default_thai_company = ffinal.callPackage ./default-thai-company.nix { };
}
);
}
+9 -1
View File
@@ -9,7 +9,15 @@
devshells.default = { devshells.default = {
devshell = { devshell = {
packages = [ packages = [
inputs.clan-core.packages.${system}.clan-cli # Local fix until upstream lands (patches/upstream-sd-card-secret-injection.patch):
# `clan machines build --format sd-card` resolves the image via
# image.filePath, skips secret injection for formats without
# clan.core.image.<format>.addFilesScript, and stages the
# injected tree apart from the sandbox output. The sd-card
# addFilesScript itself is modules/nixos/sd-card-image.nix.
(inputs.clan-core.packages.${system}.clan-cli.overrideAttrs (old: {
patches = (old.patches or [ ]) ++ [ ./patches/clan-cli-image-filepath.patch ];
}))
]; ];
}; };
}; };
-6
View File
@@ -1,6 +0,0 @@
[
{
"publickey": "age19hn633nzg6kga9xmnfjaw06h3lkdg0sfqmt2uefp7neefy3xhyws5mf5y5",
"type": "age"
}
]
+6
View File
@@ -0,0 +1,6 @@
[
{
"publickey": "age1ez6597tgxg7xxpm6lqv30z82sa97c04afq4wlmw8qspm8pq4m33s86fxz7",
"type": "age"
}
]
-42
View File
@@ -1,42 +0,0 @@
{
"data": "ENC[AES256_GCM,data:IvMl875ImDUJ3Xs3symK/4UCo80hO1pdG6mi8KWMxpP0UMX/nT5otxEeFq7AJzs4YYMXW0K4tRL/hvt6mRRxku9vGJVAu9Vs/A0=,iv:W9v37uSJ29UwnF0rFLs8R8Hlkx8/yhZDm2e2XXOfwkA=,tag:Q81/tcyAv9HmFczKZpFmXw==,type:str]",
"sops": {
"age": [
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBNMm93WSs0N3YyeEtrczBZ\nbiszcDA3T2RNTWE0VHEreWhWVlB6ckQ0VjFFCi9teEJJNmhCSUtuZk5pVG42NEUx\nT0ZIbFZEYzBiMVV6bWFXVGZKL1NDUTgKLS0tIFhON2luYmozd1FKNTFqVVdMN1Vu\nV1UxeTJmV0J6c3N5QW9ISDhySHNJaVEK/JU/d7w+sbEz84OUnvTZSJVyC9QJ8ood\nXjkgJHsZgMsejbH7lYCzRC2TW3RT5Ua/V8UkMXdwS8xJPIwuH9c4gw==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age17d4qt0n9edq57tgcqyk8eu5mrendl59yt6z2y3a4vkq7el8krqtq6lq28g"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIER0OHEzRkZw\naXo3L1h0YjJqVnI2WWwvUGxUUk1DQVRDY0NOaTFDRE5KaEkgQVEgd0l6SlBCVW1v\neDl5N0lHYmVrajZzVzVTYjd4WVdNVjZoZVlkUEtmVXlMdyBIdmtoczF0dmhxL1py\nS1hsc0ErckdoVVB0bE02RGdCNW5raERXT1ZJMTkzNjRGNHd2T3ZSTVYrKzZlbEll\nVTZKc2JVN1B2SzRuNkpaekhwSWJQaFZVQQpCMWdaNjE3cnhVbjRyd1N3aXBncDFa\ncWdNenRQbEVoWlowTG81K1ZCbzZ3Ci0tLSBYQmFqVXQ0ZVJtOGQ3d0VyQUpUL0Nq\ndDBzd2FTemRjRnpuTzJVek1UakRzCpykqaKGjEBAzyZfGjrQLLp+/Xq54eBgfXut\ndvOlzztraSD8zSjb0wlyoAz2FsblvR1fTSsMStiOIso49PzPDQE=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpf43tgcfjm048lsqskvq34w2t4uvrm5qy6m2eg6zjj82ctca8wctgpczxvj0q4y6337uhvsxdh5j86k9h9ymautpvv2759ucwnef75ez7pa7fpkddklp40mxk2tedsp74359g0kefn5rsq0x0yss6cu4yd0h06up0rp08t6yc4l0hfa9y8jn5fkx6nk0hjhz06ykwv0fyxe7z42q683jy0"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIGpYdU9lZkJE\nNTNacUNDK3kzNHdvdEhDR3U5Q1FCUlVlM2gvVXlEN0g5aDAgQVEgZlFBRFNyWkNS\nRDJQaUJ3WWowTEcwaTk0Z0tiRHpQNmhkMTJZUlZHbHlEMCBtMzE5bzVQb1JmZkpy\nY0orbEs2RzBSVXA3UmZYZkRRanNnc2pHSnJjK1pLVmZOWGR4d0IwZjh1YXlkakRx\nTm5EMXR3ZjNHWGl0Ty8rcHpQbkcxRTZmZwo2NkVNWkN2RjBXUlQzSkhqV2kvMFYr\nS2tXbGR0bkR1RXlWSExUVmR6SlFVCi0tLSBWVDUrVTIvVE1mTms3RWlOL250NmIw\nSmdXelpqVUlTdk1LNzBobzZhME5NCvMuiIIOBmYEtKwKgaBLR2F7ggBKAeiKi5X3\n/vjRvd+dHuw7AscQGFhQFQAtQS61gmpKcbYEW6lgMlLEH/ClG7E=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqprw0vfpc8wzsu78quc777kmee54ln6nnsjrnrhl7nr33eh4kvkksqp05qqxj4kgfzrmrugrsvg7skx6ghh3q9xc0x0agthtkvy25d9eq7eklta5wf7s30hexkuyl5546rdz9ffa5tawlp5yweqkgccntw0ny540n2am3cqw3luhxkfmrp63kwr6mwplhr9u26wll48x0n3k5f60c7hg9a3"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIEtRWmZRVWpH\nd2hwVGRVQmQ1Y3JRMUp6eWVBRmZEbXRiYitpdllvNlhtRkUgQVEgZUh4S2o1R2RE\nV0svbnErTmxodXE2bUxJK3lla2lvajB3OXVwZHJtcHU5dyBKU3I4WFJnK3BOQXl0\nZDh5NTB5ZFlteFJIM2FVTVp5cmNyRXZqL1V0c0l6L0tSb0c5ZU9jbmRXMTIwb2c1\nQjZsREgzWUxaOXBUd2pQK2NncDZuUmZkZwo3VUtyRk9UNVJ3ai92UmtseXAwbzZN\nOGhlVm96L3pHV3c5d2kvaVpFU0l3Ci0tLSBsRTl3SUN0anU2OXZGVmNZVkd1ckFN\nRVVRT0pmTzR5VUpNR0lDZnd4cjZZCp6lMaOHy6xphC2YDON61ocx3yncwkqrRZGO\nQ/9bgQ5qmS1oIwJ39dZBKm7zFSL8DRDKUWV3fRAcPnZfJcZFn2w=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpyewum3q8dfcumfgec8nn958aec9f4q9aqy0k06kw5kq27d6fdqdgp0p7y4ru3n5xk90u747xevxa2af3v37e85j9g3axrmw5hdwdfh0wz22hut5vrafxsx26a7vh8fjwkymz3ramfgvvu4detztu075kmpr8l9ydqda0rnjwatdwmfgswg849p37astvld98s3nleeq575azlwc2hhpuh"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBzQ2xoK01TTFg5QmNrK01J\nTk1IZkU5RStGYmc4SWtMYm1wMEpxbno1N2xrCmxZRyt5VlBXMTlkelpqbW9hTURQ\nVFo4VUhUQUhZcklqTDR6TW9ydmlxb0UKLS0tIGdzQ2Z1ZjRIL1o0Y1liZjdCb1FG\ndmp2dEQwaGlDaEJGeTFnUDV3dU5lYkEKWZlL1rH7BDdhkLXXBJS9gtrMRlyvZCQQ\nDHLG1ZjLo1lGCHcBwzQJ7q6qCQDLlMxXJVbms/1oIktQOJ0Z3t57VQ==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1hlzrpqqgndcthq5m5yj9egfgyet2fzrxwa6ynjzwx2r22uy6m3hqr3rd06"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvRG50eGw4NDBEcnM5d3ov\nOVRlczQ2QTlkTHJGUnhRZkNNWXVOc29hU25jCkhyM3BjSHZCTVZjVy9uVmpkdXJv\nWlRETGFWSDJvRWU5R0lJRElveE1SZVkKLS0tIFV0RmRlNWJnQjVMWmlOMC9NdGxa\nZVlvRzJsR3lNNDV3YUxhOVJtN3FNZkkKf7nK9X9EM9bdSxZDrdFK4pNzoRogq1Hl\nuuAg0JVIrYQzxLnJoyQ71TYegbTdgdG2za4NTsDCBIQt7gXfC/bTvQ==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1sg0rvgyetdcqw7j2x983fh69kdkvqsngpe5x36e5920qa7fze3cqhj4wgx"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBqNXdjQnpRYjluaUdrVVhJ\ndk9pQzByS0ZSN0ZmdnQ2WktYQ2lSTktlZXhBCmROUmErbXlVSCszM1VldVViN3g5\nZUZySlhsUmxYdnZCcjJ1eWk0bDZ4NjgKLS0tIGxtdTdNNnFqUlJwOXluOEIzL25P\nL3VOeVl3djA3WGdKZlV1Wm56c3dCN1EK/r/FdrcgtKyWVnFHXNaRpVet1tOQvug2\n31/46/GTV5Ze6lN/GDcupu2a0n5ShWAy0OeC4IhKTQPZC/c7SdEqag==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1swlyyk2rzvevqawyeekv75nx2dz34zpe3xqhkqme26gcgeavy4dqrfpcd8"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBjV3J2UkM2ZXNkUzVPZHlW\nNzExUnY3UEMvd0xib3YyRWxNcHRnRzRic1VZCmtNdERhNGVrRFJYTDZCUzBvTDl6\nWS84YzFPa0VualJyb2FPcVROVkdWQ1kKLS0tIElsNm44VzlIcFVhdWpjRHNTMVh0\nNEx1MFB6NTNYWGJYNkticW10T0xTcVkK84kDLpPXz7AFWiU85NQ6i2cz+6IJAAiz\nmIIRh8ZDV0xWEsRMYjgQ/nsASZ2f/CWNKXx69OQc8i1K69cpolE3Og==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1vphy2sr6uw4ptsua3gh9khrm2cqyt65t46tusmt44z98qa7q6ymq6prrdl"
}
],
"lastmodified": "2026-07-27T06:45:50Z",
"mac": "ENC[AES256_GCM,data:8QCATjju4hNMWABf14VEiikdSpo4HMX9cir/2IFJgw6UfEj+HQvusUidCCQqDkEInGbPgQtGEhZvjkuxw+wldHcNBpquIeWKa1VWuXAgudjAt77FH4WklhOel40FwsbjNYEj9gP9IJgir6Rq3bLyhFQAcUZWZH7/ho3e89H83Sw=,iv:Q6DxVST634mpw4ZO1bjhOTeZiBunNHS0Pz6X2up300k=,tag:7Mmxo6zSPRjiXLZSpEZxrA==,type:str]",
"version": "3.13.1"
}
}
+42
View File
@@ -0,0 +1,42 @@
{
"data": "ENC[AES256_GCM,data:PdrPoAQnV9OBdwssaYfqN7tga1yUGKo2o2BzHaE2LJRDYo+Y5QFJi1vSxnT0jny4yN7fkoU9ilxYGi+sBkvtR77PescyUESta3U=,iv:KfpSaeZE8B1qBXPamhgLh4FvemjWHWMS4frJh9RWw6Y=,tag:uZ7fXNgHFXxQ4OlUurXdyw==,type:str]",
"sops": {
"age": [
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA0TkI0blpCUEYyQXlQcS9z\nRSt6andVS0poNHI1S2pWSC9tdjBOcWlCS0d3CnQ1Wmxvc2IzRlBKbFV5R0hMMmxt\najRDNlRGUnUvL1k1VUxVWlVPdFlwTTAKLS0tIFplQ3d1WWhBcUhEVG1EZ2dQdlZW\nZjVLbFJHODA1VitpZk54Q0tTekpQZ3cKwd6lFt1KJs8H04d1WeztJntDVx4+SOj0\n1Eb31GAUNHxkJMGKpOyojpwewAWRXaLybq734CsrDn2SYrcCxxwkAA==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age17d4qt0n9edq57tgcqyk8eu5mrendl59yt6z2y3a4vkq7el8krqtq6lq28g"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIFU4dXV4dkQ4\nSThRSGdRU3lIdUhEOVB6Yi9hbWg0UXJ3YTM0MHB3SkpWR28gQVEgd0l6SlBCVW1v\neDl5N0lHYmVrajZzVzVTYjd4WVdNVjZoZVlkUEtmVXlMdyBIdmtoczF0dmhxL1py\nS1hsc0ErckdoVVB0bE02RGdCNW5raERXT1ZJMTkzNjRGNHd2T3ZSTVYrKzZlbEll\nVTZKc2JVN1B2SzRuNkpaekhwSWJQaFZVQQo0VDIvQWpJNEdnK2NjV3dkbmZIWjF6\nZTZRMEVxQm5BRGlXdC9BTU1PNVpVCi0tLSBocHN0eVl4a1E3aVZhRmpGVEdZajRE\nRjlKU2VDK0pwak5LdDhoa0tsUkswCrhbCwwLHBxkvkKqXThgc45LyABYOQRhemWM\nw4k8cnCgtricI4FChhG8wNpFx1vKBJ1z7spimX+fG0AxXUIkiqQ=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpf43tgcfjm048lsqskvq34w2t4uvrm5qy6m2eg6zjj82ctca8wctgpczxvj0q4y6337uhvsxdh5j86k9h9ymautpvv2759ucwnef75ez7pa7fpkddklp40mxk2tedsp74359g0kefn5rsq0x0yss6cu4yd0h06up0rp08t6yc4l0hfa9y8jn5fkx6nk0hjhz06ykwv0fyxe7z42q683jy0"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIFljSUI5cExD\nQnVSVlFTL3ZjNW1maFRwZVVhSERlS09MaEZ2VWpLeXh1V0EgQVEgZlFBRFNyWkNS\nRDJQaUJ3WWowTEcwaTk0Z0tiRHpQNmhkMTJZUlZHbHlEMCBtMzE5bzVQb1JmZkpy\nY0orbEs2RzBSVXA3UmZYZkRRanNnc2pHSnJjK1pLVmZOWGR4d0IwZjh1YXlkakRx\nTm5EMXR3ZjNHWGl0Ty8rcHpQbkcxRTZmZwoyVlZzVlg3U1lpOTcxYzUxSXVycXNF\nalZlcTdyK3MvVFRyeVRQOGkxQXB3Ci0tLSBMMXhETlVrN0hMT2NaamRDTGxlQVpH\nNW1VZWs1QVVrVk1UcnBiWXdQVEs0Cn7aMYe+48HDHhQRDAUVVWel1mv0KZKYguzX\nOlQCqCirlzMhSRmXTYNQe4S80ecymgLBmcjvQVSitREv8mK8eeY=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqprw0vfpc8wzsu78quc777kmee54ln6nnsjrnrhl7nr33eh4kvkksqp05qqxj4kgfzrmrugrsvg7skx6ghh3q9xc0x0agthtkvy25d9eq7eklta5wf7s30hexkuyl5546rdz9ffa5tawlp5yweqkgccntw0ny540n2am3cqw3luhxkfmrp63kwr6mwplhr9u26wll48x0n3k5f60c7hg9a3"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIEhVdXUyNXZX\nT2NacThiblFjYzNFRzVKQzFaRm96aHRUR2xrTzJqV3RuSFkgQVEgZUh4S2o1R2RE\nV0svbnErTmxodXE2bUxJK3lla2lvajB3OXVwZHJtcHU5dyBKU3I4WFJnK3BOQXl0\nZDh5NTB5ZFlteFJIM2FVTVp5cmNyRXZqL1V0c0l6L0tSb0c5ZU9jbmRXMTIwb2c1\nQjZsREgzWUxaOXBUd2pQK2NncDZuUmZkZwo1N25PL2RjYUcrblF1V2t5eERmNlR6\nNlFoYXpoOTVlK2gxbFBWa3FNY21vCi0tLSBEc1lsSlA4WklTSjE1ekJNbm40bTVa\neHRRc1Y2S2diY1FIUU1wdjhwVTJVCr8/pFIR0gZNp4zAmmcKFwXHg+FlDSlLqHBr\nuWqURlbZNaAA7azU4pjt2EJC6ppcgcW85yYxVghy3v1Hb1PBW+k=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpyewum3q8dfcumfgec8nn958aec9f4q9aqy0k06kw5kq27d6fdqdgp0p7y4ru3n5xk90u747xevxa2af3v37e85j9g3axrmw5hdwdfh0wz22hut5vrafxsx26a7vh8fjwkymz3ramfgvvu4detztu075kmpr8l9ydqda0rnjwatdwmfgswg849p37astvld98s3nleeq575azlwc2hhpuh"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBtNGR5bVkwbDVUVUl2cWNY\ndStDL0I2SmtNeEd3UEs2TExKM1pFNEgwTHdBCmU5WnF0dlRGSkJ2SVpLejlsSFQr\nRTE0YVUwMGxWRGVtV3MvMHMrdW9YRlkKLS0tIGcwMnRYb2wxcE1RMDcraVljS2Nz\nTS8zZ2ErMTREWklXNVF1UnlPZ1BRb1EKe03KNmpDxrTndF6hQeuBtaW2FIb9LaCg\nXoBKHmSxeESIPunpAhWJw2YUdPJ+8Td+fAdOZCPgktaeGcYSejaZMA==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1hlzrpqqgndcthq5m5yj9egfgyet2fzrxwa6ynjzwx2r22uy6m3hqr3rd06"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA0Nno3Ung3dHNtK3V4dFdm\nbW1mWm5ZN1ZtMjBENTlmaUtHYjZvbUluZERFCkNobHV4SWY3eWVIN1h1Ry9WWWxz\nU1hIUndONjFBWEJiTUc1cU9COExHWjgKLS0tIHQ0eWpzdGYveXNRZmZHeWdSbytt\na013d3FlL29HRy82L1YrR2NBTkR4YTgKCOuq/HrqenpgwhK73vQsvG2axxdPlWrf\ngK42riDP7VLxdqbri/mPIGKiGoMLumW3OQejUc6p+e3K6y42cESuyw==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1sg0rvgyetdcqw7j2x983fh69kdkvqsngpe5x36e5920qa7fze3cqhj4wgx"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBaZ1NjdTVOemZvZXJvRWIx\neEVIRWc2NndINzNETVVTOHNqSlBGM2lDbkIwCmRtR3FiQ0JkQ0hQSTIwQWs1SHE5\neHA1OWJTVU1CSVE0NTdlQTJTOGFVWXcKLS0tIHI5M09aR0ZrTzhmUmxRS0xHNzVO\nUUIxbWt4SVE1K1R1Unk3YlBPZnpHRWMKHqE7HUK3YM+bYQWUmO3UXSokoABSbsRi\navYoaIVbMgbTcSwkK+f8aZML9cyX4juA3NbKVAnmLPPU9aEUzImncA==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1swlyyk2rzvevqawyeekv75nx2dz34zpe3xqhkqme26gcgeavy4dqrfpcd8"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBVMm5XaGEySTVtbUY1QlRk\nNGlhb2FsK3QvU0xPV2FmQ0RjcVRpZzZhbkdzClhjbE81TVA1YXJaTk5jbUR6UGF5\nMzREcit5dHVHbVcrU3IrSnZFaDlVd1UKLS0tIFNyMzd6NmpKNy9nK2FHU1BlUmdO\neThBTkZMWWNFb2M0NmhNZkd2RW5vUk0KbDNx1IUaM9akKfH+sNEVFbIxnWbHJAdu\nS7aFj0SQx9O7G26PJEPZOLBYW9qryA/XVYcEcxycEoOBMu8J50GWZQ==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1vphy2sr6uw4ptsua3gh9khrm2cqyt65t46tusmt44z98qa7q6ymq6prrdl"
}
],
"lastmodified": "2026-08-12T08:44:41Z",
"mac": "ENC[AES256_GCM,data:XCAM+Fsk/1b+YVPWWAfruny5TA+3SrDBEPmvkhzDzJofmvfPiHSSl7X6nxGSdMyEFO6EElCNUiScDmvVsISlb+Vsl9Eeqqst3dPtnbCG+uUoYaRy8B9R4Pew13ceR1Q8oKNux5J84zQKctcWCKRu5ASa7mhJWC+68+azDkd/UTc=,iv:07RbTD3ggIWsQ/0f3Bohuzpqk21LelaCqz8jMftqsHE=,tag:sps3aXc94kUtLlaEYOU1nA==,type:str]",
"version": "3.13.1"
}
}
@@ -1 +0,0 @@
../../../../../../sops/machines/anser
@@ -1,46 +0,0 @@
{
"data": "ENC[AES256_GCM,data:tUZ5LYtqBRWOfYxY3yiLiX6hIzj+72MVC6yjj7mhf3i6Iuo2ImTiJCtv9LluBbae+wXA1VSapkziGq/+00iLNYlQZhD2IPKRvG5QkjoQmEQWSldZYlij3wX4T8tmDEcK6IWSJeWU4x2Avy54OSQUOxIwPrIN4pxZwgvipnyFuyoRSpBPdfbLwc9WSd/5R9gOu0mE2RHbdV4nRVDLZ7nN1YcNsLxIebY+lWdGuQyn0yfWSm7Q+d7zxIRlhvJ29viq7SqyM9JJeO9ZFujyKamPlWwWdoSzA9zCoqMDo4UereUEIFtoa8ENwuRZ+iMu,iv:EPwm6L/aLKMjC0n4WUNPtAvZDq9tAwLKNl8bvuynpPg=,tag:5yFbIEJ4rudQM+WZZs3+pQ==,type:str]",
"sops": {
"age": [
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0WHhncUs2dlJDVHpMeGdR\nb0s1M2wxSk9VMnhsN21oaU10RDZSSUJTbFd3CldpemxScHpOREhVS0FuN0NTWEZh\nS3FpQUU4Nkp3djZ4aE5vWm1Pd21SMWsKLS0tIHBYN0Evc2k1L3I2UnZUTXVra0ZI\nSnN3YnV4QnFjN0lPN0p6cnc5M0dEVDQKQBTISXgiM61kzoJKI97pLdsgHtD3SKQ+\nHgUbfrZoMGMHzi+6FTX+USy42rX5NzD+B2goLGUSOfHbANdfnONkGQ==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age17d4qt0n9edq57tgcqyk8eu5mrendl59yt6z2y3a4vkq7el8krqtq6lq28g"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBtZmJwYjY0UDNuQ0VnMjVI\nZzZVTnp2RytEM2NQU1VoU0F3QnVmc0dKYndRCkVpYktMcUY5L3U5bm1UY1pDRzlM\nMlNCZTVCeE4vS245UDdsRFViM1hZbjQKLS0tICtBdGorT0pTM2RWMzZuWUhpM3BH\nQUpXaGpiRGpDR1lEWjRMNUYyK1p6SDAK9p/xZ4H8bvIRoVBDRuJdqBVNFekRrCHw\nYJ60rTC+hTg+shVz4DYKSOsD/bi4U6pngNbOYYcXaosXApI/UZVR9A==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age19hn633nzg6kga9xmnfjaw06h3lkdg0sfqmt2uefp7neefy3xhyws5mf5y5"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIGQxai9YZy90\nNGpjMzhWNm1DdU9OOHRvVkkrTmh2M0J0b0lWOExSVTVMRXcgQVEgd0l6SlBCVW1v\neDl5N0lHYmVrajZzVzVTYjd4WVdNVjZoZVlkUEtmVXlMdyBIdmtoczF0dmhxL1py\nS1hsc0ErckdoVVB0bE02RGdCNW5raERXT1ZJMTkzNjRGNHd2T3ZSTVYrKzZlbEll\nVTZKc2JVN1B2SzRuNkpaekhwSWJQaFZVQQpZOWVCc3oveXJNa2VkSjVJRkxVc1Mw\nNWQyazN2NXlHUjVQNWNTQ2NkKzQ4Ci0tLSAxZTI4TU0yYUxFS0xZaHYxRnh2Vkwx\ncThoTEhXSVZGVGZZWVAvVzlBYVE0CmEjqR1hUhtSqdwcBYfiXXAZaFdcbhZkTIgL\nl5m/X3KCPDW1DhE7V5L/jK4WGY/DEVubj5iJs+jgKfzf1b7Ut98=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpf43tgcfjm048lsqskvq34w2t4uvrm5qy6m2eg6zjj82ctca8wctgpczxvj0q4y6337uhvsxdh5j86k9h9ymautpvv2759ucwnef75ez7pa7fpkddklp40mxk2tedsp74359g0kefn5rsq0x0yss6cu4yd0h06up0rp08t6yc4l0hfa9y8jn5fkx6nk0hjhz06ykwv0fyxe7z42q683jy0"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJICswKzBRdXZP\nUXptS2Nkc3BIVDlrU1dmUzVEMEdjZmRXWmFTT3N2Q3ZObGsgQVEgZlFBRFNyWkNS\nRDJQaUJ3WWowTEcwaTk0Z0tiRHpQNmhkMTJZUlZHbHlEMCBtMzE5bzVQb1JmZkpy\nY0orbEs2RzBSVXA3UmZYZkRRanNnc2pHSnJjK1pLVmZOWGR4d0IwZjh1YXlkakRx\nTm5EMXR3ZjNHWGl0Ty8rcHpQbkcxRTZmZwpEcExtOStoci9xWVljbEtzamxBNUJV\nZXlCMU1FeThLODBUdGc4cDNMOTE4Ci0tLSBkMSs3dkdFSmppeDZSRWwzVXgzaThT\naW9pNjhCZ09XQ0gxSHA2Q3BqVWwwCh2/zLWar1lzR23FC3LZmnRLO3rkmxjYYBHw\n7UgCFw9UDzwrhYxgz8v+kybYJtSQBdcqSBDj+oHBdHVZ4g0rxwU=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqprw0vfpc8wzsu78quc777kmee54ln6nnsjrnrhl7nr33eh4kvkksqp05qqxj4kgfzrmrugrsvg7skx6ghh3q9xc0x0agthtkvy25d9eq7eklta5wf7s30hexkuyl5546rdz9ffa5tawlp5yweqkgccntw0ny540n2am3cqw3luhxkfmrp63kwr6mwplhr9u26wll48x0n3k5f60c7hg9a3"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIFRxK2FRdEhP\nOXorOTUvTGFyVi9vOXpuQWFJUDFkU2xBaENqdEJMZE1jV1UgQVEgZUh4S2o1R2RE\nV0svbnErTmxodXE2bUxJK3lla2lvajB3OXVwZHJtcHU5dyBKU3I4WFJnK3BOQXl0\nZDh5NTB5ZFlteFJIM2FVTVp5cmNyRXZqL1V0c0l6L0tSb0c5ZU9jbmRXMTIwb2c1\nQjZsREgzWUxaOXBUd2pQK2NncDZuUmZkZwo0aTlkNURkSEE5MUJjV29ueW9jeDVl\nbzZHSWg3NndrQ3ZndTVnaG5ueVpZCi0tLSBBbDlrSG03b2ZHWFVLdE9DaVY3bHNs\nMVNwS2w3N1pCT2MvcWtRcUtaeThBCh/+sNjdNGS4M5H1J1lXLnBREfFADgoTI8xG\ncG8c0POg3zTctbhiGj/Ilxkmqt7VXOTPc7j8f64QznJa8y/U7Vc=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpyewum3q8dfcumfgec8nn958aec9f4q9aqy0k06kw5kq27d6fdqdgp0p7y4ru3n5xk90u747xevxa2af3v37e85j9g3axrmw5hdwdfh0wz22hut5vrafxsx26a7vh8fjwkymz3ramfgvvu4detztu075kmpr8l9ydqda0rnjwatdwmfgswg849p37astvld98s3nleeq575azlwc2hhpuh"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvWU4yOUdaL2dCSTB5Tnhx\nNGdueVBIeFFkWU1oM0NKL3U1OTlMV0pwSVJjCldrcER0SjNvMCtNSXVja3VGVEhR\nYjA4Z3RLNUZUS2FBLzJGRHUzclJCTE0KLS0tIHh3bDJmSzExS3B4c0lBVnA0b2lG\nWkZDbjQxa2FJcG9SOUN3em9NNytGaEkK54p2+lei9pJtWIq8bYmPydsoWf3tb1NE\nK2SJVf/uO/GIHpL01kaePjdnvDANJJ9xmtC0UzdcAlFKPSu4bOeWBw==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1hlzrpqqgndcthq5m5yj9egfgyet2fzrxwa6ynjzwx2r22uy6m3hqr3rd06"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBnOU0xcEFwcmRSaTFMdUFY\nanFabEt0aHZjcjZsM2xvR29WVER1K1Z0Z3hNCjRoakM4QTdmcUlvRlNLVkdwR3lp\nWTE2RktEdDgrTlUvYnNNaE5UcjBGRUUKLS0tIHRyVVd5U0hSMkJvbVZJTllBVzdV\nMUxnVjFvTVhReXNIRm1MKzNNTXdLTlkK6uIT+q2LEreo2w86yQT/9BZTrEvCQrxH\nyd6Ky3QlDrF39GviD3tdPZvyhYV4ToB4gw89zE8PR40xAf2inhW8+A==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1sg0rvgyetdcqw7j2x983fh69kdkvqsngpe5x36e5920qa7fze3cqhj4wgx"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB1Uk0wUXVnb3UxSWE3eGRH\neFFIRVJDRDkwemZ0eDU3QWo4ZmVhWGxrYWx3CmFRdnRGMEl4emJSL1JWZ2IwMmF1\nWkVFU3lMU2p1ZE1pMUpEVFZ2Zkx1ZDQKLS0tIDFSWXpjcldYQnBleU4zU0JpZmxN\nWGhuZmVXUjY1VGdVYTQzbmtLUnEyVUUKqTdqSUOvd+RweI6TIGfDJ8yB17sryOgK\nEQo+JqF4/B4HWn6yAVqDclU8u/7UqOoHOmO6hUve40NqDbmCBtE+3A==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1swlyyk2rzvevqawyeekv75nx2dz34zpe3xqhkqme26gcgeavy4dqrfpcd8"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAxMnZTMGJpMzN5ZW5OdkRO\nWU8xcnhlQ1AzSHpoeitXc2V0MXFpZkc0ZFNzCmorakV0NE5WNGY1Z0Jzc3ZSL2tr\nWGtweCt6K1I4M09zL2hVRnlja1ZMOXMKLS0tIHBqUVBNMzYxU29hUXpFKzRyRGFx\ncys5UmROMTZTUTZ5UGVoQUtJb2t0VTAKIb/lergoqns5JtJCSc4dbxANj4M5/sap\nZkeb6wVOKxVu95IN2XEYv4xIVf5bQhBux3R9yZ9NYqL7f1HPHody7w==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1vphy2sr6uw4ptsua3gh9khrm2cqyt65t46tusmt44z98qa7q6ymq6prrdl"
}
],
"lastmodified": "2026-07-27T06:45:51Z",
"mac": "ENC[AES256_GCM,data:tz8Uv5ivlq/QXbHaEKuSTFF0aFLXzzeks/tHTMDnyZk74DmLXMH6uHq32zr0vKxCJE8Wj1idk+YuTCEAXZ0iiFrqSj41h/Sxy7/9zP8+/TyVorXd13h21qCus+n0MEKDRx0FH48UqJnFsighkUUmxLwTwoqxe2kbIJPMBFMHvNU=,iv:O2zTDDBSVpNDOajMfVQcCx9znMFR4HKUBq1eUEkODpE=,tag:9Qw7Wh3fPsCoJr+vr6nFEQ==,type:str]",
"version": "3.13.1"
}
}
@@ -1 +0,0 @@
../../../../../../sops/machines/anser
@@ -1,46 +0,0 @@
{
"data": "ENC[AES256_GCM,data:xTqEDXSAj6B01PEHWX4BcjrCDoIohHHKa9CdYUpFzwoXDN0aTf6kMu///cNMbopQPt7Zk75ms3ZI9rGgWZS8mcLEP2I8G3FZSEWpD8NFp3Rd/K/HnHcLH/kH9B+S0lOos8noqlDamADfUXsTB3dVXn5UL77Nai0=,iv:QwBWcf604NgxbuZzPy6c2FQd+02EtHIim8lZYqbtl00=,tag:hWggE0DiF41D3tFM8nW2ag==,type:str]",
"sops": {
"age": [
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBTdjJRdXpHVVhyeGdTRkZa\ncDBsY1dPSlVPUEdUZFkrZmNocmlucGduUlVRCk1CbTdaaXdHK1R6ZUF5MkxRL3Vu\nMnVlamVYeEtOQXVjNjczOThHcStoWHcKLS0tIFI2Q0JSVkd1czdVb1hNQ0F6YzhQ\nbTBMclBLN3dLR0ZPMENCMFQrd2hPOXcKy8OhNHyNRz+Fnyh2gjiHBgSHuATqFTgC\nI+oTgxOhApy0OFvmUIMO5cDyvHQDZrk8xUgGbTd8d58MNRj5CV1HXw==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age17d4qt0n9edq57tgcqyk8eu5mrendl59yt6z2y3a4vkq7el8krqtq6lq28g"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBPaDVNT3dEMTlNTHdYZHpQ\nb0hkQ0dBMmczRHF6dFUxUVJKTTVVNUNJOGdFCmFyVzhpTnZiY2lSbExJMUxReXU3\nZ20xSEl1L2s0ZEV2WHBnVlpPLzBad0UKLS0tIFhCdmZHNC9YOEpPZGdORDZ0M3JZ\nNXlKdWFicmxyUitjWHZnaWVmL1dvSE0KLI7B1JKoZeVXr0hkNywrSRbCG8QevGmf\ndkcF5o0KILcEG+9zHHjKdkYF2vZU1OwBxzGWyIyqPs4ZAtVucOR6OQ==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age19hn633nzg6kga9xmnfjaw06h3lkdg0sfqmt2uefp7neefy3xhyws5mf5y5"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIEF3VSs2OEl3\nSExRbmp5Qng3NzRJUTVmNE01akNjQnVKK3dIUVRHTDVyRXcgQVEgd0l6SlBCVW1v\neDl5N0lHYmVrajZzVzVTYjd4WVdNVjZoZVlkUEtmVXlMdyBIdmtoczF0dmhxL1py\nS1hsc0ErckdoVVB0bE02RGdCNW5raERXT1ZJMTkzNjRGNHd2T3ZSTVYrKzZlbEll\nVTZKc2JVN1B2SzRuNkpaekhwSWJQaFZVQQpKbG43NkM4Q29oSHpaRXVUckFONTdW\naEVuZFMzT2JOZzVEcWFxN09DMy9VCi0tLSBicDVIazJkYkFZYU12T1F2ZEtSVzhN\nL2dhUlJDa1BPQUFHbUgvcXg5ZDNVCiIh3MoR0FL4GoZ6JrdJlKnk/TPCeTLjJCra\nRruqeb0BKShSX9vz52mk83/9i7aawdEPsFzX7mM6gmKhHOSxEyA=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpf43tgcfjm048lsqskvq34w2t4uvrm5qy6m2eg6zjj82ctca8wctgpczxvj0q4y6337uhvsxdh5j86k9h9ymautpvv2759ucwnef75ez7pa7fpkddklp40mxk2tedsp74359g0kefn5rsq0x0yss6cu4yd0h06up0rp08t6yc4l0hfa9y8jn5fkx6nk0hjhz06ykwv0fyxe7z42q683jy0"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIFloeks1bit5\nWC9hZXdLMWZ5OW8vTU03M3dHek5BNDY3LzJqc2p6NGVSMXMgQVEgZlFBRFNyWkNS\nRDJQaUJ3WWowTEcwaTk0Z0tiRHpQNmhkMTJZUlZHbHlEMCBtMzE5bzVQb1JmZkpy\nY0orbEs2RzBSVXA3UmZYZkRRanNnc2pHSnJjK1pLVmZOWGR4d0IwZjh1YXlkakRx\nTm5EMXR3ZjNHWGl0Ty8rcHpQbkcxRTZmZwp0UHNZd2c5eVJSUmxrQ3gwK3lzUmVr\nSFJnbHJvYndvY2syWkprdG9aSWxBCi0tLSBlV3UrSDJZT2hjV0xoYVU0TUVSZ01a\nazc1Y253NHM4R2xVRlJ4SVdFWkpRCgAOxjQ5xv5Trz5YNRGEPSvr9lyNsBMZxEwM\nc4wPiliulHU6PjIhqOucilfI4qdlAv9GJlyDENEzQlyouWVqCKw=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqprw0vfpc8wzsu78quc777kmee54ln6nnsjrnrhl7nr33eh4kvkksqp05qqxj4kgfzrmrugrsvg7skx6ghh3q9xc0x0agthtkvy25d9eq7eklta5wf7s30hexkuyl5546rdz9ffa5tawlp5yweqkgccntw0ny540n2am3cqw3luhxkfmrp63kwr6mwplhr9u26wll48x0n3k5f60c7hg9a3"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIGZWR1pTalJr\nRGowbmQraUNPcjBKVjZFRWhlWW9jN240NnBxWktRWks3MFUgQVEgZUh4S2o1R2RE\nV0svbnErTmxodXE2bUxJK3lla2lvajB3OXVwZHJtcHU5dyBKU3I4WFJnK3BOQXl0\nZDh5NTB5ZFlteFJIM2FVTVp5cmNyRXZqL1V0c0l6L0tSb0c5ZU9jbmRXMTIwb2c1\nQjZsREgzWUxaOXBUd2pQK2NncDZuUmZkZwpNMHJTbnZTVFlxdHp5amlxTE41UDFP\nUHRTb1FoVkd6YTJjRGt1NDVEVGFzCi0tLSBjZ202UUplMjd6VnVWZS81Qk5uTndP\nZ3N6a21MUEhWS1ZqSERsaVdKdm5BCgDsnjbntpSpd4o0AXMc5TViUrRLL8jJyQ6w\n/f6hQjU4AM/en+OpME3ncX/4PhmqoeSKMGbw28Y+RnW3UQzfNSU=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpyewum3q8dfcumfgec8nn958aec9f4q9aqy0k06kw5kq27d6fdqdgp0p7y4ru3n5xk90u747xevxa2af3v37e85j9g3axrmw5hdwdfh0wz22hut5vrafxsx26a7vh8fjwkymz3ramfgvvu4detztu075kmpr8l9ydqda0rnjwatdwmfgswg849p37astvld98s3nleeq575azlwc2hhpuh"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBRWXkrTzBpNVJ1bmwyWHUv\nbVJFdmZVSjRBVGc4RDVybWVHU3BvLzJrbVhJCkdObkxpUkFzN2NZR2F5OXlXY1lz\nY2puT01HU05xWjdtYk5QeDU3Q0hWV2cKLS0tIGx4WXI5dGplZXFKaGVyUllpVGh1\nWkhuVG43N0pHUmRSYS9wdkRzZm5WemsK7kYVFkpXQlUsysLR0cC1AAQkdYjZ7cn+\nY+Lo4CJPUEwybqE9dSNvOosmqPkyXWtaIT1YmD9HunU/qoQ2lyHsKQ==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1hlzrpqqgndcthq5m5yj9egfgyet2fzrxwa6ynjzwx2r22uy6m3hqr3rd06"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB4YTFHUlFlaWc3NUdQM2Jn\nZEVEYlU2QnZQNWJaVEtMTzFOamM5Wm16WG5JClE1dXlRNHNWbm5haTlpZzA5R1NX\ndk1Xa0p1TkFaYXpra0l1cC9QTmlaV0UKLS0tIDJHa0hIbXdqWUZLM1FiUUtTdFFJ\nZ0xyRGF6T2NNVXBwamdQNG1PdjlqaWMKmzYuTZEURU0S4tQc2lZhRVVy7DPZQseZ\nA9xCWKagbB90r3WWibYEXYVgN8091diLzLijQGOkVTFIkK1EtDLtFw==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1sg0rvgyetdcqw7j2x983fh69kdkvqsngpe5x36e5920qa7fze3cqhj4wgx"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBIS2RyRllNUCtaNGZ2WGJ3\nMTkxSkI2TElsOFZGYjVQTkgvUjVNeTRPMEhJClVFNDBpL1NLL2g0S2RwNVRncHRt\nSUx3NXUwc01NOHNHVHc1NklWMHhVc0EKLS0tIGIzSG0ycVlFYnhDT1ZDdXJxWmE3\nZGZNSDJ3bnFmK1dSS2FRV0RtOGoxc1kKO9aYqhXMCK3T0f762sp0kUKXhF4RUb2u\nAVyKKinThT7/TsjYl4bzwAeAbrZ7oqU+Lecm9grcXtI8GkTEVV/f0g==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1swlyyk2rzvevqawyeekv75nx2dz34zpe3xqhkqme26gcgeavy4dqrfpcd8"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBSM0xyRVZkUWJleHNNTUZP\nZmlMNlF6cUtnelFQcUp1MG1JOEdvUkFtbEF3Ckc2M2RzNGk4ZDhxQjRPNXRkeU56\nZVhUSEpON0RrRy81UzNPNmZmSFhZWW8KLS0tIGdyV0V3Nm16Wjl3bjFZWWFxT1Ex\nN0dQaWMxUytmOW5ka0FmUVMxTEg3N28KFr+19T8+mk0qHxZWD1hrl6S4IT4TPwlr\nydlMjMM3QT52HwaCszj6MaYxiBsRgNxAl8DMa+ZDVssS1QPU/uOOvQ==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1vphy2sr6uw4ptsua3gh9khrm2cqyt65t46tusmt44z98qa7q6ymq6prrdl"
}
],
"lastmodified": "2026-07-27T06:45:51Z",
"mac": "ENC[AES256_GCM,data:u2MSief2SeSIkXZQz7uEYxQxCdXLmJwbCWVHzhKZdGr91pU6OdowT0+S8au7NIB8xILbaLXfjEvv+D+Gn5EsuX6iXXWDnVMR1yNJ0Z5JTGLlPg9THv0b6yTxZQsDtSofziMpVm+rjnwp+JZWQpiwMNao0f2XbDU2rtQz+gtbub0=,iv:34r1Z4OvGprZQuTRI3B7prill2n/2h/bfqatJ9WfYY8=,tag:3Wa78sgoE90TSMQQZoNkmw==,type:str]",
"version": "3.13.1"
}
}
@@ -1,3 +0,0 @@
-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEAsPajePQC3rQWVseVRLlQF5RhCRjV3LOjVNvu+Z2MRpw=
-----END PUBLIC KEY-----
@@ -1 +0,0 @@
12D3KooWMjA3yE1LYzMyHbgQzWj7Km4mMZMn6jAbMz4kLMVxtdmm
@@ -1 +0,0 @@
../../../../../../sops/machines/anser
@@ -1,46 +0,0 @@
{
"data": "ENC[AES256_GCM,data:peOgqM0KlpbY8A9bufRdl1F/8XivMHUeOvvEvlEZnWN+ET32JDeQlR99Ik/xDm29SMrIqVeOu2yAZeyz4/b/8uqj12QeUKarLMW0oHcU+eHGFhxDpViTT5jq7NRaZItJV7LzjFZ262T21vpqLKg4+pawUDR+JYc=,iv:ukA9zzm4CWrXs6ERqfGIcsAXhinapOg6XzcvmyydbC0=,tag:Nz2+vQLaV+lZW6Os2bPRMQ==,type:str]",
"sops": {
"age": [
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBtSktOUCtxMWMzSUVHSlE5\nQWxvcUF6YnBJemFCMUtjZHY3Yk95RUEvVkdzClM1MUJwMTRQTzUzbHkzNWttR1R4\nNGM0KzhHaWtNUHd0WmtpQkptdXdqRGMKLS0tIFprNTdDcnp2cXR0eCsrV3lyK0xZ\nQko0NDlvNzN2R1NSVTAwVWVITWg4YmcKD2S5iFx2eNBWcUf2x4g0ZQCyUJVHzI/e\ncvcD8KYOBeFkHBSMFyC5wp/5qEyRUjFUgaWHDMl/UC/f++C70t8y+A==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age17d4qt0n9edq57tgcqyk8eu5mrendl59yt6z2y3a4vkq7el8krqtq6lq28g"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBiZE1GbkVrOW52anRRZ1J4\nNCswdWpOeENoeXcrcndqRkorTWVLd05oa0FVCjdpUUNjQ0VOZ2Z6UVZiQUt0REsx\nSTlYaFZUcGJxQ3BjQ0FHMTZMSFpDQVkKLS0tIGxpVTJxd1dBeUl5NG1EYXFPVG1F\nT3lEYXgyTVpUMXJqUkxGTTl4cWFMbG8KxLLflg1q49vfgJXMPt9bIcaJ0qd5djNJ\nSzdc1XJtTt3oOk+wsomgasV2ogCHz6br+oqJqkI6ELeE3biquwttMw==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age19hn633nzg6kga9xmnfjaw06h3lkdg0sfqmt2uefp7neefy3xhyws5mf5y5"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIGtDbHlXL1dM\nT1hrTEVpU2dscEF4MUtEbHdRSjBsV1FSOVJuT2JrSlZXanMgQVEgd0l6SlBCVW1v\neDl5N0lHYmVrajZzVzVTYjd4WVdNVjZoZVlkUEtmVXlMdyBIdmtoczF0dmhxL1py\nS1hsc0ErckdoVVB0bE02RGdCNW5raERXT1ZJMTkzNjRGNHd2T3ZSTVYrKzZlbEll\nVTZKc2JVN1B2SzRuNkpaekhwSWJQaFZVQQpIckNkQ2pUVittWTNnSG93Y0dyUEQ5\nNzkyS2VLeSt1UkJudmErMXd2cTdFCi0tLSByYURQdS9KTURSemh1dzU4L3pUN3pn\nZVNJMFE0cyszRWxwTk9TQ3JnRG9ZCoRLWBl/lEZe6bctuswFvJJpWp/FSZgimM4E\n6V8CpCqCG41Vf+wGc0kBp2crGys0aOwFUSOh+sSuFLgw7kj44lw=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpf43tgcfjm048lsqskvq34w2t4uvrm5qy6m2eg6zjj82ctca8wctgpczxvj0q4y6337uhvsxdh5j86k9h9ymautpvv2759ucwnef75ez7pa7fpkddklp40mxk2tedsp74359g0kefn5rsq0x0yss6cu4yd0h06up0rp08t6yc4l0hfa9y8jn5fkx6nk0hjhz06ykwv0fyxe7z42q683jy0"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIGxlcDdDRUxX\naWNZa0YwaVRsS2kwejQrdEcydFJDTU5qcmdRZUhXRlRqRVkgQVEgZlFBRFNyWkNS\nRDJQaUJ3WWowTEcwaTk0Z0tiRHpQNmhkMTJZUlZHbHlEMCBtMzE5bzVQb1JmZkpy\nY0orbEs2RzBSVXA3UmZYZkRRanNnc2pHSnJjK1pLVmZOWGR4d0IwZjh1YXlkakRx\nTm5EMXR3ZjNHWGl0Ty8rcHpQbkcxRTZmZwp4K2VjeCs2VjdtejN5V1IyYWhkVnNH\nb2NzbVk4OHpuN256V3F0UmNFelNJCi0tLSByaGh2VFQyWm5uZjdtenpHWDZqRTdJ\nOVdyOEZISXh1alFRTHdLaVZSNVp3Cnq/UiiK3HQQvC07KggLL0Ws+puFdx7Ksnuh\nL4poXEVnVjtd1YnaCzIsU2Ym/KJax9JPki5pRMQqG6bNUkXr6cc=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqprw0vfpc8wzsu78quc777kmee54ln6nnsjrnrhl7nr33eh4kvkksqp05qqxj4kgfzrmrugrsvg7skx6ghh3q9xc0x0agthtkvy25d9eq7eklta5wf7s30hexkuyl5546rdz9ffa5tawlp5yweqkgccntw0ny540n2am3cqw3luhxkfmrp63kwr6mwplhr9u26wll48x0n3k5f60c7hg9a3"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIGorWnNod2xp\nMmk2YkttNTZwMHhNWlhvWGdRVWJUMFpNQ1JwNDh5dzNXR28gQVEgZUh4S2o1R2RE\nV0svbnErTmxodXE2bUxJK3lla2lvajB3OXVwZHJtcHU5dyBKU3I4WFJnK3BOQXl0\nZDh5NTB5ZFlteFJIM2FVTVp5cmNyRXZqL1V0c0l6L0tSb0c5ZU9jbmRXMTIwb2c1\nQjZsREgzWUxaOXBUd2pQK2NncDZuUmZkZwpIV3lYS3BSMWNEMTJ3dnBBcVRWUlBl\nMWJHbXZEVHNaenJBeW82QmFYMWxNCi0tLSB5YWV6S2pieCtYaU51MkQraWd5eENW\neUlqSVREN1dvdWM4cmRFZTh1ZEYwCknfj6BeXiM74riY6PP/2ulVnOSOR/smZiDI\n0YSAtO1QZUsqcbjrru5DdL+I2EWwKBx4nmN4GQpAbFxaT3cpJlU=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpyewum3q8dfcumfgec8nn958aec9f4q9aqy0k06kw5kq27d6fdqdgp0p7y4ru3n5xk90u747xevxa2af3v37e85j9g3axrmw5hdwdfh0wz22hut5vrafxsx26a7vh8fjwkymz3ramfgvvu4detztu075kmpr8l9ydqda0rnjwatdwmfgswg849p37astvld98s3nleeq575azlwc2hhpuh"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAwcVV6T3dpZEErTFZMNXFT\nVTF4Q3oydUxFRW92TWJBOEoxRnRGQ0dRVHlVCjd3d0tpUFpFSy9SUWovYkVwT1hC\nQmJaQjVXd21qdkhwUnlLeGFtVkZZTzgKLS0tIGkrU2lhdlRqR1lQbDVnR1l0MnFG\nU3hTUDZ3NVlLQ0tJcW5wSDRUek16eHcKGSeTkMkjyHGJZ04FrNA50kTiNOEIOVzh\n0c7FCUe2RTP0JKqJcN3oPeGyl1brbDHmnPnFZVk/lbJ+gg0AjGNZrg==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1hlzrpqqgndcthq5m5yj9egfgyet2fzrxwa6ynjzwx2r22uy6m3hqr3rd06"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBRR2Vab2lZaGIxMUdoYmVi\na0pNU0szSTB5TnJqVnVVSUd2T3NQalNmN2g4CjVXaWx3U215M0l2MmtjL3FtUFBO\nblR1ekh2MjMzMEdFb0NqczE1U2ZpRXcKLS0tIGdwcWhSNFhBL2k1dk54TGREQVlr\nZExJNDZBYmorOWNFYW1ic1FYeFBZREEK6BHFqIkYP95E3fKuyucVPvLzOP89YZSw\nL5gdbAVMtJrnIbbKbX5kradEt7wSUjLc4j6fzf56W/J0sZ/uyM/XrQ==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1sg0rvgyetdcqw7j2x983fh69kdkvqsngpe5x36e5920qa7fze3cqhj4wgx"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAwUGpMQ3ZCSkRJNTI4MHJG\nU3prdzRVRHFaMkFDQlN1Q0xOSXZpakJaUnlBCk43aTZ5R1pJN1BreGNwR01YR2dv\nQmNsbnVUbnRsU1pjMUJNNndhY2I4dDQKLS0tIHQvc3ZkVHZsVHUxNGRVMDQ0bjEw\nS2hlVlAvTmM4OENhellWcXFjTGVoV1EK1+mntP6ICCkxd0nKbA0tlGxMG/2wvT5O\nsUiqI3aRtyGZ5kYACvI8BvoUEn9llit1hWPTfgiBrAzz3+NdCbqHkA==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1swlyyk2rzvevqawyeekv75nx2dz34zpe3xqhkqme26gcgeavy4dqrfpcd8"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBCSjQyZTNCMDMxMkpZSXNh\nQldUa3pDK2lWMjdMRnUxczVsK3J2Y1BBZlR3CkhaanJXQUU2V0Z2Nzl5N01TQWdS\nUHpyNlhQdXM3clEvbWxnVnljOWNIdmcKLS0tIE0wQWdVcDdPblVMZE9xM0xIamQ3\nd0ZQZUZ3MjgrL3NKaHBGWVpLSmFaYmcKUnZ+fHFMXSiYjwe5aZ0RFT2o+TKelug7\nj8FOYLsonHzswm0WZ4lnEfQeXqFWpT3fs6mFIM4aNeeD9lY+5yA3RQ==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1vphy2sr6uw4ptsua3gh9khrm2cqyt65t46tusmt44z98qa7q6ymq6prrdl"
}
],
"lastmodified": "2026-07-27T06:45:52Z",
"mac": "ENC[AES256_GCM,data:+rOq3y1/AFQtpuWvnI3jP7cTFVeBa7tTUMflZvvYkmD+/sy5TXPzmVbCNNdlr5QHiMcO83Ajh0MG17zE9mWPVYZQ1qWX+1qY50bmgsJA9O2e5AIHxzZqkT/S0eESta50n4+tsvZ0JwPtYBFN2kFv1uiQkwbIecNACbWcC8yYGS0=,iv:BHz3heo2zDbAVqMzz0HZA3l9qwlccKwRXWLj3I88tF4=,tag:ePCn1WzagQSPe/Gi/F/eNw==,type:str]",
"version": "3.13.1"
}
}
@@ -1,3 +0,0 @@
-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEAdYtPnS/sqwX6zy7lKDDFXFEmNRKDuNuDCZA8WfIGrnY=
-----END PUBLIC KEY-----
@@ -1 +0,0 @@
7f42f9f088638a4bb9e64f4efa32c7c2100c4e5e17757cf17900136ef75b8564
@@ -1 +0,0 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIKNOZ8RYgQz4fHKe42WClOdkDzuiik6htBkcDQ/oFGIkAAAAINk1lx2vq3TJeXWEj/LEwiFdcZsI0/8gk/v+uSwLCX8MAAAAAAAAAAAAAAACAAAABWFuc2VyAAAADgAAAAphbnNlci5jbGFuAAAAAAAAAAD//////////wAAAAAAAAAAAAAAAAAAADMAAAALc3NoLWVkMjU1MTkAAAAgJdtRPKmGj15w0IbOFAfMRO5WujLxefAHBlews3TeS+sAAABTAAAAC3NzaC1lZDI1NTE5AAAAQCRkHTk4YDtwTkKDzMH0OaPVeFLtbSpEJShUxnUu3VYZbn7+A1Sa3guKgWLa7QyRyyPQeMOHi8eTgkbjtr6rSAs= /tmp/vars-kwhezost/in/openssh/ssh.id_ed25519.pub
@@ -1 +0,0 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINk1lx2vq3TJeXWEj/LEwiFdcZsI0/8gk/v+uSwLCX8M
@@ -1 +0,0 @@
../../../../../../sops/machines/anser
@@ -1,46 +0,0 @@
{
"data": "ENC[AES256_GCM,data:pbNCacL+ooegPuvBvj6dkLk0t87nniwSD3fhW1hUj4zezpawqkP4nYbni0WufSBtGqFtcCKuSTqskuWf93U6v2JQL7FegazcqHLQHu9H0+MrqdsMGZyEzGL9LCKynRoTrc0ggGY+KFpqI6o/jm3e0rPH/AvnLKZMKO9KXchXGWbSK8iyeu0NWY3vH/dbudhg36oQYBAW9UsypyRIADZzPyVliPhsu6HWQttV4vkzGt7PaAeq6OAv+1swSajzNRGKdTVF6EIq5ZIAfq+RtWAmudz+7g433eh1K1uJ3yueYRgvS5HdqmxGprXXQUTzogK00P5QDgHlc8J23OFnmyoZe/ppq1dncVMePWK+MFfXHu1oAtvcaqZzcjigBZOlnaXFnchB2659Bp343cPMT7wCtvV9OruBOPX6twWQNEUJaWtLcUaJawzdR+mUvAGYuuSn8BFdjXKn1WrIUlHT1iuaIECZMe2/Nn53Ukk4ByCTr3s01+odtGQFkMTJrQPxO5VhpNLf,iv:uyJ43DSfnUyvTVbljGhWmGsMcOoAOcqywN46ohZtUAs=,tag:mqGGDtmuqJEZpgZqUc5uCQ==,type:str]",
"sops": {
"age": [
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvelNOanNoM0hDNVg1SlpI\ncEoybUh0N2lFKzBid3NuV0J3QlIzOVlsYlZvCjNnQmh4aFdDZkJndVpIaXdYaUNh\nVEYvcm1SSFlkYWhha3c0QlN3b3VFUU0KLS0tIHVXc0lXT01TQkFJUnBlanhZS2t0\nTEpuQ0dvWHZpVCt4SS80MlhxM0FUTmMKsLphibDgT2YsZfX3evygA7rfgBh5OxOK\nFRbq+EHQPdKnU9aroMcaCBkRunp6y/VxY7FJvUMslPbBe0iaRfpgqg==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age17d4qt0n9edq57tgcqyk8eu5mrendl59yt6z2y3a4vkq7el8krqtq6lq28g"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0NnAzK2RGV0NZZWdUYzBD\nOXNpNi92QTF0SUFRcXNLa0loRTdVaDdKcDBvClcwVWcvdmlmTWpKQTBlVUtYR1Ju\na2F2dnlQTUJvL0N3TjUxU2ZYZXhyN2cKLS0tIGhnSG81Qm00V292TTdUWnV2NW1p\nWWg4L0NseUJtb3NPMVkxMDNFVkZqQkEKJR0FmZ6FAFq03+w+5+sqLCRCK+o4EIpM\nhVgttDFZo/qEQ5z1aLlWvfPtowzN4P93DrmIByG7CqeKn3qaHH4J+Q==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age19hn633nzg6kga9xmnfjaw06h3lkdg0sfqmt2uefp7neefy3xhyws5mf5y5"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIGdwSlFQTE1F\nK2xCR0xZT2FmSEpiekpSdW1tajkrS0NVdGJEdVdQYnFVbjggQVEgd0l6SlBCVW1v\neDl5N0lHYmVrajZzVzVTYjd4WVdNVjZoZVlkUEtmVXlMdyBIdmtoczF0dmhxL1py\nS1hsc0ErckdoVVB0bE02RGdCNW5raERXT1ZJMTkzNjRGNHd2T3ZSTVYrKzZlbEll\nVTZKc2JVN1B2SzRuNkpaekhwSWJQaFZVQQpjZUs3NitjREN1RkZsRHNGd1hGc1dC\nai9RVUcwMitXbUNiS3hUejFWa1pJCi0tLSBiczdrWENCVFlUcS9oT05QNXVsZ3F6\nUW1DcE5ONmNCWmlsQ1FDTnBTK3RjCj3XTO027m9xZiXW+F8gvTo2PTYN27WLptcB\nly42kmCpP0mgtXLGeIrFG2M+9LJf2NA2f7B1ZRjB5qNp4m4SDSU=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpf43tgcfjm048lsqskvq34w2t4uvrm5qy6m2eg6zjj82ctca8wctgpczxvj0q4y6337uhvsxdh5j86k9h9ymautpvv2759ucwnef75ez7pa7fpkddklp40mxk2tedsp74359g0kefn5rsq0x0yss6cu4yd0h06up0rp08t6yc4l0hfa9y8jn5fkx6nk0hjhz06ykwv0fyxe7z42q683jy0"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIHRqNnB4U0hq\nSzF2NTRSOHJmKzJmU29ZSEl5dlpqSDFINk9VTWJ3ZEJYQk0gQVEgZlFBRFNyWkNS\nRDJQaUJ3WWowTEcwaTk0Z0tiRHpQNmhkMTJZUlZHbHlEMCBtMzE5bzVQb1JmZkpy\nY0orbEs2RzBSVXA3UmZYZkRRanNnc2pHSnJjK1pLVmZOWGR4d0IwZjh1YXlkakRx\nTm5EMXR3ZjNHWGl0Ty8rcHpQbkcxRTZmZwphSFBHR3g3bmZpeWl3YTNtdVkyQ2VY\nR2dMNVdmdHVhUG93YVM3SlZQbGFzCi0tLSB2OHhGMFIrUGhKSGI1RUJaQU1nTXlT\nQ2l3b3orOVRCM09Vcm5yMG5HSlRBCgacRDSGNF94N61P7e6IAjvWZi5LkR1kYLOy\nCGZnkJj1tkJmjZ7LYWNgMhMSGege4iJ5+WMJTK+7cTAPi5vb8Xc=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqprw0vfpc8wzsu78quc777kmee54ln6nnsjrnrhl7nr33eh4kvkksqp05qqxj4kgfzrmrugrsvg7skx6ghh3q9xc0x0agthtkvy25d9eq7eklta5wf7s30hexkuyl5546rdz9ffa5tawlp5yweqkgccntw0ny540n2am3cqw3luhxkfmrp63kwr6mwplhr9u26wll48x0n3k5f60c7hg9a3"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIG1mRlZuMmlh\nS3FTSXU3NmYycy9nWjFkbHI3ZzJ5K1o4ZW02c0RIY0JyUkEgQVEgZUh4S2o1R2RE\nV0svbnErTmxodXE2bUxJK3lla2lvajB3OXVwZHJtcHU5dyBKU3I4WFJnK3BOQXl0\nZDh5NTB5ZFlteFJIM2FVTVp5cmNyRXZqL1V0c0l6L0tSb0c5ZU9jbmRXMTIwb2c1\nQjZsREgzWUxaOXBUd2pQK2NncDZuUmZkZwpUMWluTmNUMXdZT2lxT1BvQjQvbGFs\nREIyczcyTXhHbFZpWFY2aVA1eS9JCi0tLSA5MElJbkk4cWw0aEdhanlHc3pTZ3pu\nbWptQmhiRmQ3ZzUxS2FsRTNWT09FCgyiz+GcavNWod014NUk8EPWKyaSU8Z8hDpL\nA9sIRY1RkJE9sQfYDIW++thukLB87Bx4JqqBzgZd5yDEYQgL1ks=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpyewum3q8dfcumfgec8nn958aec9f4q9aqy0k06kw5kq27d6fdqdgp0p7y4ru3n5xk90u747xevxa2af3v37e85j9g3axrmw5hdwdfh0wz22hut5vrafxsx26a7vh8fjwkymz3ramfgvvu4detztu075kmpr8l9ydqda0rnjwatdwmfgswg849p37astvld98s3nleeq575azlwc2hhpuh"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBxdTQxa0cvV0toTFd3U2Ni\nSklKTjV1ekhvVkZrTVdCNmhreGh5d1U5VEVRCnJweXloSUdVWXpQT2hFaUNZdTRi\nOUN1YmNmUnRoaytQbEhWdDBLUldlclEKLS0tIFNlemMwemZ2OTR1NitLaTlCcmo3\nSUxoR3FTQnQvUUxWYTdkYzMySEVoQ2sKE+KkAGJOp68X2QHOZkvUIWG4QCka7iV9\nq9Bww7AAsx96sTyEzzUlKchx/EMqzUwPyQ2MxItnCjSI8UQD3FhXBw==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1hlzrpqqgndcthq5m5yj9egfgyet2fzrxwa6ynjzwx2r22uy6m3hqr3rd06"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBsamVnUmRQSm4zWjZYSjFK\nMm5nWVI2aFVUbVY1V1o4SW9CRmtYZDAycjJzCm9CY0ZBS0x2Z3RwbkNMMkZwbXRh\ncFN1c25GTUFDSkhHK2FMdDdqalp1bzQKLS0tIElMT09lTmh6aWJ1cnNPbEp2WWx0\nNUIwVjBSRGhUckQya0RDaURMZENtNncKVfbuGrCtCgbtQjM0hZrcnfZnrFTJT3vb\nlqJMNQzMed2mgtmbQ2Od99zvEz0oj1UsRX93eLpqolKssINwklpP0w==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1sg0rvgyetdcqw7j2x983fh69kdkvqsngpe5x36e5920qa7fze3cqhj4wgx"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB3eUt2QmxITStuMFJWS1Y1\nSGlSaUhvVklRRzE4dTc1dFFxZkl5bW1majM0Ckp2bnFIVHV4VnRXQzc5Tmt6cTBx\naVVhSjlabmFlYzlkRnYySW43cGxFYjgKLS0tIGtUQkE1aUlYTFhDN2ZXVFgxdGti\nTllXZHI2YVp5THNDMDNoeVFpdk9yT28K/jTLzafJqEr2rphKhcNmWR0+RhIVRkvK\n1sW93ik/vTLwuZID+IbJw6rIG35/1q0v/XLJOdBfTgMRmgi6/ncQbw==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1swlyyk2rzvevqawyeekv75nx2dz34zpe3xqhkqme26gcgeavy4dqrfpcd8"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB2b3dHTmdNa0pVWjNMS1VP\nTkUvM3RPd2pGOVNBczFHZVdYSDRUaWtSL0ZNCjhXYjJXQjRNR1MxN1JFeWNLZjcz\nWXBBUEppR3g2RGlNMEVmeUYwaG5DNDQKLS0tIGlUU0hObWlNYWcyYTVwTGNWb00w\neGZ1ZFlnckFBZnA1OWNoL1lnbnNjQ2MKuJPp12f16DZpuVaI/lRvIaTPDpv1ctAs\n+yNPCfvPKJ4G/wdNRNEaxIvfFmrhZgShBPqdKxFVpDhXEuJjOJgJfg==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1vphy2sr6uw4ptsua3gh9khrm2cqyt65t46tusmt44z98qa7q6ymq6prrdl"
}
],
"lastmodified": "2026-07-27T06:45:52Z",
"mac": "ENC[AES256_GCM,data:uJQakKJF8BgFgCQ7xbsZMCRJ8Qr1A1OqWdZQFFWUpNltyJL22fOXKLFCD1O1WrBMKOQ0jxh9BPNOAcmE8T1zxWHiGnJCuBGTm2LPgyEHykidHXJ5Inj//LolfjJZBJDrMjNlAb7DtWalZoNfRocu8F6lQP8ACKlVgqin6Wl55Es=,iv:ay9gfnjfcxOuUHJj5uW8ShrmEAsQRYDsgUZKV6wNYCY=,tag:6lsCKysPmKa1gmTFw+Z7BQ==,type:str]",
"version": "3.13.1"
}
}
@@ -1 +0,0 @@
../../../../../../sops/machines/anser
@@ -1,46 +0,0 @@
{
"data": "ENC[AES256_GCM,data:3ZR7x6ob7up/xgojWJRAJTc6d70w04Lj1ZHwsysHqqa2kHcyxrJvwlO/5Jdus++DH63QCHp2KNUV4s/P0FL6,iv:DtzRLUQZWUMnh9EP/7QVLnmpIQxbTMyCxv0JcERdDns=,tag:kl0gBuaxZnEsQEyI551M1w==,type:str]",
"sops": {
"age": [
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBkSU01U2xURkVxbi9pVVoy\nODc3WjdCQnhmbko0MWlhQlU1ZXNJVFY1em5RCjhHb0Nnd1NVZlNsNHFtY0FVdUZM\nNGY0UG1MUFFaNXc2alFtNXBMV3pIMW8KLS0tIGorWEZYeTFYcjMrY2x4UkordzFs\ncjJ0S3EzNnN6ZG5yUU5nZnF3R2h6blkK6A2un+LAuUhZ2OFIjE2bPuIi3svZ/TN5\nh+mkOxqptMgbKUvpLCmONTwfRCJjGAQTdtAYzwxb4ZJRqcXWJSiJOw==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age17d4qt0n9edq57tgcqyk8eu5mrendl59yt6z2y3a4vkq7el8krqtq6lq28g"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYSlBFMHpGR0dna2cyUTNz\nRWdhcjNqbVJHbkRFYkFJcEVVZDczYjQvTUhnCnR1ckUvVHVjWEhaVkY4TysyeUhT\ndW5iWkE5bEVCNW1wVHdoOEZrcDRqbEEKLS0tIHZONGR6MW0rd3ZtbXlTZldXdFB4\nMTFMQTZEU2NSMGFZR3ROOGZsMkpsOFUK8SpipGo8a3U++h94eoAeQFESQUSHLXaS\nH4gnnZYdlXB0onN9TYikkSB2SytijAb7f+vV8ZjQqpNKiXTbj+8iBg==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age19hn633nzg6kga9xmnfjaw06h3lkdg0sfqmt2uefp7neefy3xhyws5mf5y5"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIGlBbkVpQ21o\nQXBydEN4dnRhckRkcHRtd2FmR05heEE4bzgwUlpsOUpKVVUgQVEgd0l6SlBCVW1v\neDl5N0lHYmVrajZzVzVTYjd4WVdNVjZoZVlkUEtmVXlMdyBIdmtoczF0dmhxL1py\nS1hsc0ErckdoVVB0bE02RGdCNW5raERXT1ZJMTkzNjRGNHd2T3ZSTVYrKzZlbEll\nVTZKc2JVN1B2SzRuNkpaekhwSWJQaFZVQQpQU0MydE1XV3lkWWJBa0o2NTV1cjFS\nVEROWGdac0g4Z1VMcnN0S2tZazA0Ci0tLSBjRlNWRDh2dm9kWWN3Q1BpNkxvK3cw\nRklZMXB6YlpaU2FiMTVGelhGUXRVCvMlC3O0mhLGgsqe+/qFHRtCjRDguk1T/baB\nQdB6d79XUsOM2qzlOQh1uOR1lBl16xjQmnubrmmQJ1uQDLBBQq0=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpf43tgcfjm048lsqskvq34w2t4uvrm5qy6m2eg6zjj82ctca8wctgpczxvj0q4y6337uhvsxdh5j86k9h9ymautpvv2759ucwnef75ez7pa7fpkddklp40mxk2tedsp74359g0kefn5rsq0x0yss6cu4yd0h06up0rp08t6yc4l0hfa9y8jn5fkx6nk0hjhz06ykwv0fyxe7z42q683jy0"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIEptMXBwbThq\nY2R4SFIwRElCTGZET1hNUnEwYzhXWmd4OW5QS1VFMU40VWcgQVEgZlFBRFNyWkNS\nRDJQaUJ3WWowTEcwaTk0Z0tiRHpQNmhkMTJZUlZHbHlEMCBtMzE5bzVQb1JmZkpy\nY0orbEs2RzBSVXA3UmZYZkRRanNnc2pHSnJjK1pLVmZOWGR4d0IwZjh1YXlkakRx\nTm5EMXR3ZjNHWGl0Ty8rcHpQbkcxRTZmZwpITWFwZnY4TFRrOXp5eE9HLzNMNGlq\ncUNtZ241ampOU3RtQUIyRmQ5QnJvCi0tLSBjRkkvVGNXeSt4QTYrU1gzWTQyeXpZ\nK2gwNk5HdHp4emg1Y1BSOHhSYm1ZCkiR2oNXtE+/9Px5XQZOE3wMmfg1vlzxkFBY\n4yRi8qIVq8o9fK7scF/MNd+j9zolp67fczBX84X+ytz3mmd2UZ4=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqprw0vfpc8wzsu78quc777kmee54ln6nnsjrnrhl7nr33eh4kvkksqp05qqxj4kgfzrmrugrsvg7skx6ghh3q9xc0x0agthtkvy25d9eq7eklta5wf7s30hexkuyl5546rdz9ffa5tawlp5yweqkgccntw0ny540n2am3cqw3luhxkfmrp63kwr6mwplhr9u26wll48x0n3k5f60c7hg9a3"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIEVDaVg4THdD\nbHVrS0xwZVpLR2N6TW82MVhKdGtEUVJlZHlINzdwalo3VncgQVEgZUh4S2o1R2RE\nV0svbnErTmxodXE2bUxJK3lla2lvajB3OXVwZHJtcHU5dyBKU3I4WFJnK3BOQXl0\nZDh5NTB5ZFlteFJIM2FVTVp5cmNyRXZqL1V0c0l6L0tSb0c5ZU9jbmRXMTIwb2c1\nQjZsREgzWUxaOXBUd2pQK2NncDZuUmZkZwppRWQ0ZmdCeGlLTHJEQU9NZ29EQldx\nSGV4QjVSRVdBSUJtOTdycFpiUEVRCi0tLSBVVWlKdE1HazY2SzM3dWRmRGZIWHNZ\na3ZPTkRWanJiVUd6dFNJTjgxSzRrCjIiG8oacjAhtnzaxx/dF+9s5GyKNQskHI0T\ny/qCBwQPXjfk0igSFgXGihe2v0tr0wAlSjPOAR5B6+nibv7Pni4=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpyewum3q8dfcumfgec8nn958aec9f4q9aqy0k06kw5kq27d6fdqdgp0p7y4ru3n5xk90u747xevxa2af3v37e85j9g3axrmw5hdwdfh0wz22hut5vrafxsx26a7vh8fjwkymz3ramfgvvu4detztu075kmpr8l9ydqda0rnjwatdwmfgswg849p37astvld98s3nleeq575azlwc2hhpuh"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBlbjRWQzdjQXVMejlhRU1O\ncTJMU3AzWnB3K05LdUFCYUYyVUpQN1BXRTFJCmtwSDJMWkxqVjFtY3BoY1BKVzUv\nemJRbnNJajVTOTZlYVhBNytEUmgrZ0kKLS0tIC9kSkJGN2lLU3kyK2JxZ21xbHdv\nb0dKKy82Q3dyUlo5UXBnd1g0U3JxSEEKRFXKkxSaa4pzLRclCd0hebmlE1H6IV9l\nU4BHFGR++D+FjrkqK13eQLGNwc7HtaN1k9TmWMraLwFBBDBdImk46Q==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1hlzrpqqgndcthq5m5yj9egfgyet2fzrxwa6ynjzwx2r22uy6m3hqr3rd06"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSArcHRHMUJBQVM1d1RJL2FY\nN2JYOXBFOWdwclBKdENycm9JMUdid1pKbWtFClplU2FNM0p1MG1QbElwK3pxVjRV\nNUUyelh2aXJ0NG5JYVAwaVVwSmZodTQKLS0tIHRSN0xCVUZzY0F0OXRETkQ1WDgw\nSmtzMDlYVUw2akdDUTRLLzBVQXZvMWsKQmAjMJ4b00AGXDXhCgctjuOuEZE7GnDN\nESqGcYY5tXfIf3lXNpaIs1eI4Tp1EnOHRhOB2qf5rRssEl9/Qm81mw==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1sg0rvgyetdcqw7j2x983fh69kdkvqsngpe5x36e5920qa7fze3cqhj4wgx"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBDV2krU2pzcDMxUjRPc2Vp\nTG90cTIwQ2dvczlvVWhRRHJ5aGgyd3F6NlhJCmtuSGFNOFJqM3BjZ1R3Q0FsOSsx\nZDdGTFF5QnBta1ROYmVrSzVZc1V3ajgKLS0tIDh3ZXg2NFA2R2VNNjl2c1FPbE5M\nRU13ZUluUExiU211eVNGVEs5WkRLdUUKboZGrUaYNpeOpCmlz7pnmzS8tRF/Jn92\ndfqDgPtXMldo9gHk4i4bfBB6tSQzu9FXWV/t8nqOMcJ5bTYl2c1Hmw==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1swlyyk2rzvevqawyeekv75nx2dz34zpe3xqhkqme26gcgeavy4dqrfpcd8"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0VTRsbXhCWGF0T3R4OTVz\nUUdYaWtWN3lBZ2xaYW5wbi9EWVEyWmhvR2w4CmZrWThNVEV6S0hXa01YN204WW1k\na3gzVUUrblFoYVJwd0svNDBqRDAza3cKLS0tIHluUTJlcGhONU5QMTZkdUZvRHJj\ncWVoVk12czB3RTNjamlKYzNmaE9WTEUK+h+OKoQlATHhyC/ctzbRaKByniymWIIM\n3MYigAW5RfNcfykp7WRcRSTNeloKZb75geO5HTvJq+aVakqflTGLWA==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1vphy2sr6uw4ptsua3gh9khrm2cqyt65t46tusmt44z98qa7q6ymq6prrdl"
}
],
"lastmodified": "2026-07-27T06:45:54Z",
"mac": "ENC[AES256_GCM,data:+bSG7IPIyXs8Xiu41Oml9/HHnaLasgl5qId1TuQDcEVwaTQSRDE57Kud8+DKOqoajV3ys826zcdqxv2UUuwKKVTZz1u+hg8UmurkBZi4rV1wipFcnq7iDTK4Zp+vVcheAfwB/UrQRYu39fwXtioXzpKEwcvhPZJ0woTbB7o3iPs=,iv:K6MU1Styx7YkpIokRR5qEircWkjVAIIKpn9hWN4miog=,tag:08rnMh2bnQbwBU61wXGyeQ==,type:str]",
"version": "3.13.1"
}
}
@@ -1 +0,0 @@
../../../../../../sops/machines/anser
@@ -1,46 +0,0 @@
{
"data": "ENC[AES256_GCM,data:QqGnVvetsHQ7+JBTkdXuVLBnCIwF8gQ5x6PDqvxFYAI51lF+lmwHJmjafkReRYu3sN2U2M9jNkfRbOBptWAB1M+4doVS2p16+hQoje2rCwCZtR9p+tv/eho0HFrTJKWU,iv:+yiaTSzxSym56bZCFFII494k0FlhSgAZSUlQOtKtRnQ=,tag:VML0whJmFixzAdYKmTO6KQ==,type:str]",
"sops": {
"age": [
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBCS1VkdFVlWGRGaDZScVVq\ncERtUkhUbzVoYjloZGRhQm9mWVA4SmpFZlZFCkFqVXpVbU9Pa0FJeVlpRjFXZU1i\nN2UyM0ZPelVMN1ZQQnBrcERhNWVZcVkKLS0tIFZsMTRJVWV4K0pXMlp3alBRWW5l\nZ0g4YkNnR2tNOXo2QXpzRUVnTWY3YWsKBnuxhRm09VKGwi7wLXP+Fm3Djz6pGYO3\nM9GuUBgO9mbCjXPEcaT9vd9W7zmkWiBrMQN4yufj95rahreFcoT57g==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age17d4qt0n9edq57tgcqyk8eu5mrendl59yt6z2y3a4vkq7el8krqtq6lq28g"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBrd1NCR0lVdlJ1MzRtdFkr\nRUloTE5rU1MwSFEzYTJJVDRhNS92VlRDYzIwClRlcDdDVkwvSjF3YkVLdzNSN1o0\nZ0Y0V2JKK1FnbVNaemJvTmh2dHpGYzQKLS0tIFAxeUp1S2ozcnBuY1JsSUlqMk9B\nWmlxL0tid0NzYmo1OTFRbmZwSmQ0ekEKoa+iB57N3GJN2l1d7XmmQolN/5UiGbI0\nQ5IgcPReeYOhhc/sBfmea/b5+hWv54+anHloJgWNHfVBCUK8btgTrg==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age19hn633nzg6kga9xmnfjaw06h3lkdg0sfqmt2uefp7neefy3xhyws5mf5y5"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIDMyZFNJcWh2\nS2xvMGlRV0prV0pzZ0wxRXBlZi94d2hlRjNUWVVDcHh5MVEgQVEgd0l6SlBCVW1v\neDl5N0lHYmVrajZzVzVTYjd4WVdNVjZoZVlkUEtmVXlMdyBIdmtoczF0dmhxL1py\nS1hsc0ErckdoVVB0bE02RGdCNW5raERXT1ZJMTkzNjRGNHd2T3ZSTVYrKzZlbEll\nVTZKc2JVN1B2SzRuNkpaekhwSWJQaFZVQQpFc0p2YTdWVDNEejB3dmJDNEt2OElR\nRDUwQnZTODJhdVEwV3hTSlp2VnNrCi0tLSBsbGwrY2RDSXpqd0NVbjEycUVmUmp3\nK3p6VGhrdEtGV3J1clBvMEtwTmVVCm/00VMmgGUAYgQ1M7G5mqLjG341umwcEP5R\njvr6dRLEF9Zhfo8M/SJK9C8fDWehz1dqwMxtBoIPLAaWRNu6CUk=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpf43tgcfjm048lsqskvq34w2t4uvrm5qy6m2eg6zjj82ctca8wctgpczxvj0q4y6337uhvsxdh5j86k9h9ymautpvv2759ucwnef75ez7pa7fpkddklp40mxk2tedsp74359g0kefn5rsq0x0yss6cu4yd0h06up0rp08t6yc4l0hfa9y8jn5fkx6nk0hjhz06ykwv0fyxe7z42q683jy0"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIHhqKy95dDI5\nQ3dYa3NYTktZZCttN1hBN1hUallVM0grSTdNQTRGS1N6QnMgQVEgZlFBRFNyWkNS\nRDJQaUJ3WWowTEcwaTk0Z0tiRHpQNmhkMTJZUlZHbHlEMCBtMzE5bzVQb1JmZkpy\nY0orbEs2RzBSVXA3UmZYZkRRanNnc2pHSnJjK1pLVmZOWGR4d0IwZjh1YXlkakRx\nTm5EMXR3ZjNHWGl0Ty8rcHpQbkcxRTZmZwoxMGdQb2p1UUx4T3hJUHFwSDBtNWFM\nVldUTTJUeEFvUGZvZU9mMlExSnBVCi0tLSB0L1VTSWxEZGIxRFRiNHI3UStmSzJW\nSTErOVYvWWhQbElMZENMK1U0M01vCldORZkxFZanGrP+OBDEA7nvAi8IkfBJnATG\nXpP80YgiX5uj6qvrjOniPul63GCGWMeGMTTcScOz4uDZqGVzKD0=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqprw0vfpc8wzsu78quc777kmee54ln6nnsjrnrhl7nr33eh4kvkksqp05qqxj4kgfzrmrugrsvg7skx6ghh3q9xc0x0agthtkvy25d9eq7eklta5wf7s30hexkuyl5546rdz9ffa5tawlp5yweqkgccntw0ny540n2am3cqw3luhxkfmrp63kwr6mwplhr9u26wll48x0n3k5f60c7hg9a3"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIFNxajFOZDRt\neDlGMElBMWJYUDRVVHlzSzhPY0MramhTbXVDdi9VZ1BXeFUgQVEgZUh4S2o1R2RE\nV0svbnErTmxodXE2bUxJK3lla2lvajB3OXVwZHJtcHU5dyBKU3I4WFJnK3BOQXl0\nZDh5NTB5ZFlteFJIM2FVTVp5cmNyRXZqL1V0c0l6L0tSb0c5ZU9jbmRXMTIwb2c1\nQjZsREgzWUxaOXBUd2pQK2NncDZuUmZkZwpXZCtYVDhJWFRkY0VQUFdmUjJIYVpD\naCtzWnJwK2paRHhSVG1FMTVpdnhjCi0tLSBDRjdWNkRFWGs4R2JZMDJTMEJ6N0pF\nT1B6ektWV3pGRzBWajNXM095K1hvCgeCMRqX1wyzXcldr7jzyOrbScSzcZ/xuREk\nY5EuNsO3QVN3TjcwzZjSa5NUWA+i4+48xpSzfVkYBANl5oRCzSU=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpyewum3q8dfcumfgec8nn958aec9f4q9aqy0k06kw5kq27d6fdqdgp0p7y4ru3n5xk90u747xevxa2af3v37e85j9g3axrmw5hdwdfh0wz22hut5vrafxsx26a7vh8fjwkymz3ramfgvvu4detztu075kmpr8l9ydqda0rnjwatdwmfgswg849p37astvld98s3nleeq575azlwc2hhpuh"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBTTHdjRU40VUYrdGxIVjVU\ncXFTUGtxK2srL1g4RGpZTWpDWTkxYmt1cUdRCmE1eXovbkFIaVpuT2VVb25BcHMz\nOVlqS1lPV1VHQWwxSDdSZDl1MFlVR2cKLS0tIGJCRXUraGVXQndGVFRyQktEOTVZ\nRjcwRTJjZHpid2dMakl5WktEc2Y2M1EKrgSGYnuM/O5pb/ALYShHiYJBnkSdCyMa\nAcX/V7GYw1ecp2HFf5amTB36X/wpyu/oybU5YxbtB5WZ2euCY01kwA==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1hlzrpqqgndcthq5m5yj9egfgyet2fzrxwa6ynjzwx2r22uy6m3hqr3rd06"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAyWTdpbUdIWnpVWGVoVkUx\nT055YTJ5Y1MzSk9jSnFTM1FwY25OVkR1NVdFClRSaUVOZ2twdVhLQ0lHNnYyd1Uw\ndjFzaGJBU0N3NE1WSWlmTHhFVXJFOVUKLS0tIHY5ZThrWVBhTXpRNndsNVN6bXpo\nMmVId2VBZzR6NU0wWjFmVmhqTDVzbk0KHx8aEvShI2ufaZN8UFBG85c4g5GwWxjl\n7OOR7xZXrqDUBag8cf6v2TP94tcVfPV+N6DeNeQzKxbIVBGbv5yRbw==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1sg0rvgyetdcqw7j2x983fh69kdkvqsngpe5x36e5920qa7fze3cqhj4wgx"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYUDhyRU1GNFhLK1JDeUVN\nbFZUdzEvcEtsUjJhOGhBVThXUUdVdVlTT1VnCmtVL3ljejNBQmNaRTBiNndrZWt4\nS2xZa0RJU1AwcVhkVXM1b1B3Y1ExU2MKLS0tIGU2cGtBSHVVZWowYi9UclBQblNQ\nWERVZkl2Q0FIQ3BCemVjVmt1bUlBNUUKJWRbpFyBOoPzIni4pqpERPsdFx/Kch2U\nxLApZkj06EGuZjMLs1i1GfSzgOuFfOMxcuHiSV2ZtSWmxjhikGBisw==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1swlyyk2rzvevqawyeekv75nx2dz34zpe3xqhkqme26gcgeavy4dqrfpcd8"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBkbHRaTmxnditUQ2FpbjJ0\nMDVRcytzZXlQZnAxOGlSZFNRZlNWUDRocFhjCkQ1UVNRK3N3YzZKZXlXYXY1VVoz\nZHZ1L0t3R1BrRzVNMG4veFQwUElCb2cKLS0tIDlwN0FYL2ZLSDUycEI5ai8zMktZ\nQ1IyNXlhRnRoUk5hSjl0eEdjS1l2Z1kKSt9U5jta89D3aGZVMdpCigRkFwHHlbkE\nBxvHLF9OhmjtpUyFR2DIHrRScaMaMgNiz3bLGnpiv8WpOykWyUOfZw==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1vphy2sr6uw4ptsua3gh9khrm2cqyt65t46tusmt44z98qa7q6ymq6prrdl"
}
],
"lastmodified": "2026-07-27T06:45:55Z",
"mac": "ENC[AES256_GCM,data:BdE8N187hPfHl39qQBrZ7KQR/knxStx8IHkQsEqdSVOSID8Wm02pIEUT/1NBWwbxI8nTO9xr0XCwj9p2izOey7UMqaHvPNyevlq5CF2lrWaYcqw8nE+lJXLyLYaEcHgMb1jkyFHnEkJpNBljE0HbMyczFfLS/6prThYcJ9JYPnA=,iv:ZxIIgRwAdyTwzlCQCotK+IY10E/nsSi6dTCvB71gSJc=,tag:y1BGu3AtkdiDsIm4sVuNSQ==,type:str]",
"version": "3.13.1"
}
}
@@ -1 +0,0 @@
../../../../../../sops/machines/anser
@@ -1,46 +0,0 @@
{
"data": "ENC[AES256_GCM,data:fXVg/YsThytb4Bk52PjbO0VFZHIYszo8rF3pX67puveBVMm6GHGSkeATxDjrAwJoFNjursmQ6T6+ABWMwnwtFMWqK+uh56VReA==,iv:U0Z8iDfu9+D4L8KMpayJS/EOpMha3UK7hZz4R3SKOz0=,tag:I2Y7TBdm/ZeBOBU0DYMKvg==,type:str]",
"sops": {
"age": [
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBIYkFHblZDVDBZcjFJcEJo\nT1QxYVIrdUpJN0tlUEh0YXBwTVEzVnR5Y3lVCkFRVnJWMXZ1WGNlUnlIQ21oditW\nc2gyRXR0bERDaHh6cHExTHNMUElRMmMKLS0tIFhySnBUR0NLZkdsTFBFKy9NSzlq\ndElkT2s5Z2ZMU1l3dytpbDUwdHFhQ0kKwu/ip3iQ3kl6LnDnQ7Gh8nut3HLx2wsT\nZOphkNgMpTipjLsUvEJxbB2l+klqnv71O5qeYPtkad1YrGtDuyGQ0w==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age17d4qt0n9edq57tgcqyk8eu5mrendl59yt6z2y3a4vkq7el8krqtq6lq28g"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSArV3BlUzlsYzF4WEl0SnpV\nbTc2cTY1d29KZDZRVWJLTnc4LzIwNU9waWxBCjRpS3FUOFEyRGxFZVNEN3BIK1M4\nWXpNcmtqSTRPdlpESlVRM1c4SllvNkUKLS0tIEFKUUorT0NGaW9WenZ1VGJqQWpU\nak1FSEpLSEJ3VFF1cjNMR2JyM0JXM3MKek4UFVKH7BlWHx1jAQAdv2RgOobMS+b7\n/wtYgyXa6+9Hzz4YmSnt2UpTMC+UCwj44uytcO74HalElPg/j+nQlw==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age19hn633nzg6kga9xmnfjaw06h3lkdg0sfqmt2uefp7neefy3xhyws5mf5y5"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIDFkdnovNk1j\nS0p3YW5oTWJibDc4YU9yNkdDTmRVZmRwWnV1Y2YrU0NhUlEgQVEgd0l6SlBCVW1v\neDl5N0lHYmVrajZzVzVTYjd4WVdNVjZoZVlkUEtmVXlMdyBIdmtoczF0dmhxL1py\nS1hsc0ErckdoVVB0bE02RGdCNW5raERXT1ZJMTkzNjRGNHd2T3ZSTVYrKzZlbEll\nVTZKc2JVN1B2SzRuNkpaekhwSWJQaFZVQQpJLzFYNWttUXlNZlZvalpGNHR4dVhD\nRkk0ZFgwNnFNQXlicGtVV2x1SFpJCi0tLSBCeEt6SGZRdW1GeCtUNWFkbzJiOWZU\nZEdCVG1PM3pwaVZoaVIrbm1PdVcwCh4efyboDYJVORdvsAYQfboctvNqxElYjFSK\niWKzrxO7YnDKpjhCk1jjpTanIvyXkj5/3YwvS4/q7iuavf/amO8=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpf43tgcfjm048lsqskvq34w2t4uvrm5qy6m2eg6zjj82ctca8wctgpczxvj0q4y6337uhvsxdh5j86k9h9ymautpvv2759ucwnef75ez7pa7fpkddklp40mxk2tedsp74359g0kefn5rsq0x0yss6cu4yd0h06up0rp08t6yc4l0hfa9y8jn5fkx6nk0hjhz06ykwv0fyxe7z42q683jy0"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIFpNSGJWNmFY\naXdBUTZCcFJTSlZrRklZK0xpWmF6MTJRMm5id1VFVUxTMWcgQVEgZlFBRFNyWkNS\nRDJQaUJ3WWowTEcwaTk0Z0tiRHpQNmhkMTJZUlZHbHlEMCBtMzE5bzVQb1JmZkpy\nY0orbEs2RzBSVXA3UmZYZkRRanNnc2pHSnJjK1pLVmZOWGR4d0IwZjh1YXlkakRx\nTm5EMXR3ZjNHWGl0Ty8rcHpQbkcxRTZmZwpIcHc1YUZOSUwvTEt3c3UvSSt5SlF4\nZHV5TmpLR3VyeFp0dVZGUy9GR2tZCi0tLSBmMEFCT1dFblFib3paWEZ1dWtLQWpz\nUjgyK1ArdVpFYmlaMDJDT0tJcXVVCiDmAdLgxUQQ5n4ESSKhITQtOXryWdZ80vm9\nl2pYFnmxhIFFRm+yQqgM9+pXSpn7msEg112b3hCZgOXEOaUqDHk=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqprw0vfpc8wzsu78quc777kmee54ln6nnsjrnrhl7nr33eh4kvkksqp05qqxj4kgfzrmrugrsvg7skx6ghh3q9xc0x0agthtkvy25d9eq7eklta5wf7s30hexkuyl5546rdz9ffa5tawlp5yweqkgccntw0ny540n2am3cqw3luhxkfmrp63kwr6mwplhr9u26wll48x0n3k5f60c7hg9a3"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIE1mTGgxYSt1\nd3BVaW5XTFErZDY4SjBrYVhiN1ZPaHVaNFZJQW51S0J4MkEgQVEgZUh4S2o1R2RE\nV0svbnErTmxodXE2bUxJK3lla2lvajB3OXVwZHJtcHU5dyBKU3I4WFJnK3BOQXl0\nZDh5NTB5ZFlteFJIM2FVTVp5cmNyRXZqL1V0c0l6L0tSb0c5ZU9jbmRXMTIwb2c1\nQjZsREgzWUxaOXBUd2pQK2NncDZuUmZkZwpzTEM4YllrbnBwa3RIdUplcEFMeS9n\neFNRTjQyc25ONEpyVVQrdXZxTkI4Ci0tLSB3T0laWjRyYlhXTjdJK0xlSkc3R3ln\naWhqWVBGUHFZY0RiQmFPN3FLSzNJCk97lBANAjo690ZrXNF22z+qOwHBvWkWr8m8\nGCbnh8tqbXTGxPA/tw954BHtxj8GgI/3xJrNArliUqP8urwh0fg=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpyewum3q8dfcumfgec8nn958aec9f4q9aqy0k06kw5kq27d6fdqdgp0p7y4ru3n5xk90u747xevxa2af3v37e85j9g3axrmw5hdwdfh0wz22hut5vrafxsx26a7vh8fjwkymz3ramfgvvu4detztu075kmpr8l9ydqda0rnjwatdwmfgswg849p37astvld98s3nleeq575azlwc2hhpuh"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBRRU9xVDhodk5nRlFRZDVa\nV3Y5aTlGaTUrTkhDOENQWVo0dmtaMGlLMHlzCjMwOFhEZzgzVVRnRmo5TmdPQUhM\nNCt3YWdIV283Sk9iZFRLa2lscFNDSk0KLS0tIGhSTW9NSFFhUVpPRk5xTnNDc1dG\nRk0yUXg1Sjg3SExiY09JWm5RZGI1YTAKA4x6ce8/BtnWgmvxZe5wfIcXwke13aNs\nuCyTn3iTlxb9kT8JQPlZYwnIDdTKc179YPIi7FjfbeNzb3CRwtNO5A==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1hlzrpqqgndcthq5m5yj9egfgyet2fzrxwa6ynjzwx2r22uy6m3hqr3rd06"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA4T2hGQ01rUnIwZU5WRGty\nRWNEN2todmU4d01tNGtpVXQwTDBtMEVsWENnCjdSK2dhcis4WGgvZ0xTS0FJU2NO\nYkp4aWh1Qk9YSU5VZThmWEVPY0sycjgKLS0tIHJKZnpxS3k4dFZmb2sxVEkxaDh4\nRXRIVmZYbzZKNUNYR0lpaWduSXRIUGcKW6lXD9Hz8l8WcFI2cqARfPoMn8ekKZGZ\nejstSAPq1QS3cqQ9EZ1BiG1duyHq6ChOpP63b8x2uS/+WSWQfzH0ZA==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1sg0rvgyetdcqw7j2x983fh69kdkvqsngpe5x36e5920qa7fze3cqhj4wgx"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBkeHpkYlJ2a3ZOS09waFR0\nRTkyZjdSZGo2Kyt3Y0xleXFWemFRWUwwcldrCjdBTzRZOTczekcwRHJjT25VSXZP\nU3JFcUZpNm1BV3JVRW9pMGJzQ1llcDAKLS0tIHFJbHhXTEtUSUhFSVJvRWwxdDdB\nQVZ5elhybnpCaXdTK1BOWDN0NEREakUKqfN2jitR8viwG7Y7EJ/Xx7wZx/iMNn1G\nRQfmXKFHYNdKvtby2geTKZhoqHKq4AmLSI8I+jSGI8li3k+QoDRF0g==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1swlyyk2rzvevqawyeekv75nx2dz34zpe3xqhkqme26gcgeavy4dqrfpcd8"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBaRWZWUjM1TU9rTmNyZFJa\nWkcwa1M4WExubFNsa3g3UVkvVVFZemxPZTBJCkJxSW0wYnp3ZUFROWhnVWRIdjUv\nS2ZjeXp3S1M1ZFZPUmx0SFpGVTgvQTgKLS0tIG9uMmsyUkZPcWsxTjBPS1U3QTVH\nanMyczBrNDBoZVowVVM5dVZTcDRBNVEKhBpmXhhx0CcnnYhIGu3CbouleqHGXmsm\n0E28qwUNh2ytJkM/Kctvzw2iwPYDDqYb61HFPbwPgO0MqBiX4dR6mw==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1vphy2sr6uw4ptsua3gh9khrm2cqyt65t46tusmt44z98qa7q6ymq6prrdl"
}
],
"lastmodified": "2026-07-27T06:45:55Z",
"mac": "ENC[AES256_GCM,data:k0JeGn5YPYn5YEK1LRkVvi98mYumlVV1qa29h14zDh6O/1xpEpfiCPe065L26LQgHillL9dciaTCzWO9Ni13Ulc9JUY08rHio3tANDUTrVyLhXjMhj1H47XyYfJpJdQThK8M9U4DFBpEA1lCBd4gs3W9d5/kwtu9wtFIxjqChuU=,iv:9CA4Fr6jsZqrROB2emarZkOJkMWUNnCZj0H3L3lrXCg=,tag:J56ftd6NauzsPPulbrHYEA==,type:str]",
"version": "3.13.1"
}
}
@@ -1,42 +0,0 @@
{
"data": "ENC[AES256_GCM,data:yEnBtw6nvEs4rtNGPtLJyOU4VBlWjBaqMKWdlRgxLEjexYcQ844VE7qUTkStQ/JWGi1m,iv:1hlJ4viRCm9HsyLZy3xJxCED7ZIhYR5hZqbudWH4sOk=,tag:hll1ctNwZZ687lOe2TCnSw==,type:str]",
"sops": {
"age": [
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB1OWpQM3NOakFqNldubmJS\nVlVSYytEcXNNbTQvRDh1T0lJZkNRMG5hUDJvCnVvd0lyYmkyWUdRRjNNVU5VVzdu\nMHl1UDN1QklxQVJwRGZoNTBiSG9jaU0KLS0tIGdFWFM2M1Nha3hneFIzbGhBS05k\nS0dEMXFUMUV1ZWFtVzlpM0FkOHlIM00Kynt2fue67O4vco8VsV41aKJDMgXChDGD\nbY1ctk/sDIf1lsHK0wIses+luX7dLvX/DXe01kjkIBFvHkbQWnWU+w==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age17d4qt0n9edq57tgcqyk8eu5mrendl59yt6z2y3a4vkq7el8krqtq6lq28g"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIFlnM2pFRTBZ\nMXRHbXVuR2x2cjlwc0RBZStjb2wvUzM4ZEVIVWdnTE9ZVVkgQVEgd0l6SlBCVW1v\neDl5N0lHYmVrajZzVzVTYjd4WVdNVjZoZVlkUEtmVXlMdyBIdmtoczF0dmhxL1py\nS1hsc0ErckdoVVB0bE02RGdCNW5raERXT1ZJMTkzNjRGNHd2T3ZSTVYrKzZlbEll\nVTZKc2JVN1B2SzRuNkpaekhwSWJQaFZVQQoxQ3ZXdXlnMkpyNittdm11WmpHLzV4\nZXBHTGVzWFVCQXowbkF5OWFxZ09RCi0tLSBsNGVyR04wSWpBWXltd1hFREQ3UXRv\ncEJVMGJXbVo1NlFLS1BXb25RdGc4ChiIYJVw90k0QTonYD2g8Aa5RtdQOoYtFnpH\npuIjGkf6pQkYMTm9rKxm6y1qDQa087POUlw6qtYte7y0SRjRH+8=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpf43tgcfjm048lsqskvq34w2t4uvrm5qy6m2eg6zjj82ctca8wctgpczxvj0q4y6337uhvsxdh5j86k9h9ymautpvv2759ucwnef75ez7pa7fpkddklp40mxk2tedsp74359g0kefn5rsq0x0yss6cu4yd0h06up0rp08t6yc4l0hfa9y8jn5fkx6nk0hjhz06ykwv0fyxe7z42q683jy0"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIG8wS3ZwWXhh\nS0tQeWZKQTlGK0x5eE1vT3J1RUtTSFNmbm5TNGc1RjlMUUUgQVEgZlFBRFNyWkNS\nRDJQaUJ3WWowTEcwaTk0Z0tiRHpQNmhkMTJZUlZHbHlEMCBtMzE5bzVQb1JmZkpy\nY0orbEs2RzBSVXA3UmZYZkRRanNnc2pHSnJjK1pLVmZOWGR4d0IwZjh1YXlkakRx\nTm5EMXR3ZjNHWGl0Ty8rcHpQbkcxRTZmZwpnT3BzYk8rMzNRTjNWNlRvMmUxTmdF\nZHAzT084a0RoN2d4cmFEMGh1WmJjCi0tLSBwUWNJcitZb3BlNmlFQm8wRUk2UFln\nUU5IeEJEVEhzaE1jbUowZG1NeUwwClxW5WAFo/kVKeSEjrTefK8f/hLa6oNwAE5E\nk5Wil5xK53A8jaoniCAGxFIzzPepVGD2kxZ06WvlcBNfpFi1nV0=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqprw0vfpc8wzsu78quc777kmee54ln6nnsjrnrhl7nr33eh4kvkksqp05qqxj4kgfzrmrugrsvg7skx6ghh3q9xc0x0agthtkvy25d9eq7eklta5wf7s30hexkuyl5546rdz9ffa5tawlp5yweqkgccntw0ny540n2am3cqw3luhxkfmrp63kwr6mwplhr9u26wll48x0n3k5f60c7hg9a3"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIDUwSGRUYXFx\nVnBnRlhpUFU0eEdGYVB0SDVGZ3RFRXRaWXVRakVCQWJDaUkgQVEgZUh4S2o1R2RE\nV0svbnErTmxodXE2bUxJK3lla2lvajB3OXVwZHJtcHU5dyBKU3I4WFJnK3BOQXl0\nZDh5NTB5ZFlteFJIM2FVTVp5cmNyRXZqL1V0c0l6L0tSb0c5ZU9jbmRXMTIwb2c1\nQjZsREgzWUxaOXBUd2pQK2NncDZuUmZkZwpFcForY2lQNHdtczdpTW1iY1pnbTNZ\nNHRWT251d2o3S3dHeUN0eHZKODdrCi0tLSAxM1hnKzB4c3ZRdlJTMmRnclBtQUVR\nVE5BU294RW80SGY2NU1kR2IrQlg0Cvp35pmMR35YDdbZXHUuFnkHdKfYoQZDEUj+\n9Udwb+dYeVgsXNdtXzkQBSiRfvrvbM84rwbk1W64xwjTbMP4E6g=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpyewum3q8dfcumfgec8nn958aec9f4q9aqy0k06kw5kq27d6fdqdgp0p7y4ru3n5xk90u747xevxa2af3v37e85j9g3axrmw5hdwdfh0wz22hut5vrafxsx26a7vh8fjwkymz3ramfgvvu4detztu075kmpr8l9ydqda0rnjwatdwmfgswg849p37astvld98s3nleeq575azlwc2hhpuh"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAxeXYvLzBNN0xKckhPeVd6\nczhGN0dDT2Y1aU5HS1lHNGI4MXZqZzh0S1FVClBRNWVFVCtXMjlJVER4bzlXdzAy\nQm13VXVub056Y2N5R0pRZ0ZhcUZ4bkEKLS0tIGhZaEdoOW9TM3JBWHhEU3Zucm5F\nZnJMR3F5VG5WNGVpc1FteW95U0JvSFkKTdIwbrKj2avl1cYBu7OgLC5ghsuldymC\nEZ/fb2Dh48vQ/n7sJt7knmrhcExwj9YhrbnZdoebFqt+qHV4Oq+MAg==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1hlzrpqqgndcthq5m5yj9egfgyet2fzrxwa6ynjzwx2r22uy6m3hqr3rd06"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBERkRHc3VLNFpkcEhsdzZr\nVWx5ZGVJK0dxNGsvZkN5QU9OdDZPYlhPOXdjClE4ZlRCeWt4UEZtNTZoRUc4NXUx\nSlZYaklrMkVBZkJUNlBIZFF3WXpJb1EKLS0tIEhUTWU5aTZUR291NkZoKytML2VN\nTjMxVVpRYWM2Y3A5cW91ZVRrMjZIelUKjuPWplXksEg/uAevISCPtjIYndN28s6Z\nmtE7y54B/LphEGCPncn9RXMKpuYx64tDho2l7ho745hS9a6OvqidUQ==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1sg0rvgyetdcqw7j2x983fh69kdkvqsngpe5x36e5920qa7fze3cqhj4wgx"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB3THNqdExpa2MyMUdBbkl2\nUW81VmxacUtic1BTdit4T3VLZnpKRWliOFRJCkZuekJ4TlhZcmt3MFFGQU85bnk5\ndklJMnZ6UWt3enhzc1R4ZGJjcm05eHcKLS0tIFo0d3BSdnNtUnJpNHZNTmc3b21O\nQThYOUFGMkt4eFFnRkw2ZUorNXliUDgKg17nsdk7wxT8Yhr5mTw8tVj7SjQU5J/q\nM94+ZDCjB+yfe4vFBYl25C7LDtP9m7vmfRWafSRJ1/EMS7jiQBfRVg==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1swlyyk2rzvevqawyeekv75nx2dz34zpe3xqhkqme26gcgeavy4dqrfpcd8"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAycjJoZW8xSVQ5VTRJVTBz\nWnhSV0NNb3NmQ2xJL0puVE1TUlgyQmhVbGpZCm9JZkhzMWtnUFRVMHgvemk3SDZu\nYXVwWjkxN0tsSU43cW0wckl6QkN0N0UKLS0tIEh6VFhvK0VjNCtvek9OcW1sS0lx\nTU9pS3o1d3dRYTdPdG9vTEptSXZGWjgKSpwGVl7k9kR4gE292++EW60yr6t4F2ik\nciV25avyGJPR+bOrK1siAOixyn048jgunU5ubeduAUbh4ceAo2fQww==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1vphy2sr6uw4ptsua3gh9khrm2cqyt65t46tusmt44z98qa7q6ymq6prrdl"
}
],
"lastmodified": "2026-07-27T06:45:55Z",
"mac": "ENC[AES256_GCM,data:QnoWKT3OniM52QNhpciH+IEtZZ8haAgdfSoTSYBq8ZTcWaqi1WSZG21IO9iGccufuRS20QR6swp24fXhCdCZGQaBHrNixE/uNA6MUx+B0g1CCGf9nBMkzThg6RAgiu4L/QgvrpBn+0IxA9igMi63Acq3dtL7Iz5z+t2JGKW3Irw=,iv:68v4GAjaFU1T/X8QcOk0e40tjMcfVWYuAQwPGukUF8c=,tag:zWY7Hx1qGy3aPJ5V3wEZ2A==,type:str]",
"version": "3.13.1"
}
}
@@ -1 +0,0 @@
200:d1fd:fc2e:e24f:b5fa:a56d:d5e3:f12b
@@ -1 +0,0 @@
../../../../../../sops/machines/anser
@@ -1,46 +0,0 @@
{
"data": "ENC[AES256_GCM,data:oXhW9+FbFGjZJP9WSCPZHjhVt7+yDaoVQn74kqnov6mu/U1Px77Nhs7GxNDzz8vU4Jp2HzdmJ9qcu7M6YRDXVtsfU8VB++30Ff6IasoCKVZbuv8m427PwpifCWFeF+O/bqZ3AyG63znh+xaEtzqfr7NnTK3wXoU=,iv:UDWpWrSoXwTNMxIMY6u2nECNjaVuXvxMu3TiA8tNzLs=,tag:dTEXbhpnU0FvZemy5Opf9g==,type:str]",
"sops": {
"age": [
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBPU3VtSnNHanJiSlpCM1pm\nVFpZRGlrNGE1NGdnWmdwaTcyajJQVlR1eFdBCnd4ekxLUnpGdDRvT010QjJzYTJl\ncVNjTUI3WlNpamk4a2E4Z2FDYTZkekUKLS0tIHNycGRpRnppaUw0UlpqYVl0R2FP\neHN3VnpwTVljTGtIQ0hXeE5iNEUyY2MKpn0iGbiP7HYtp1yvUFzordAtNWw002lV\nAe/fanCH2JQ0fFNHCpP7t8TInQGuWwavBc0x45H2mpM9grAszGD6Ew==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age17d4qt0n9edq57tgcqyk8eu5mrendl59yt6z2y3a4vkq7el8krqtq6lq28g"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBtMFQzdzVIUTlqNks4RVU5\nQ1kwNHEyZXJnWlBmbVZ4YUs3MlRvWVVEQWxrCktvRFI1akJta3NkSjdkZUUxdGdL\nQlozaE8yZTFJWjZFWGlYZk5udHF0QmMKLS0tIHUxSjQ4blZNYXZzUnhoQ25hYjRX\nR3c0STRVWDA5Z1JzMGxZK25pUkpTLzQKVo9E12m3C/6rAiMx6GAn8rkJrW8yq2gF\nCYdldd2stxQIK6OxYf6Z/2zvmo2Bo2rb1S6d3yrdlkk+4ybnlrBQwA==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age19hn633nzg6kga9xmnfjaw06h3lkdg0sfqmt2uefp7neefy3xhyws5mf5y5"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIGVNRGF2dWQx\nVi9pM2swVitMcS9jVVd6d1B2dFZYZEtmbW9XdDRjMjlwRlUgQVEgd0l6SlBCVW1v\neDl5N0lHYmVrajZzVzVTYjd4WVdNVjZoZVlkUEtmVXlMdyBIdmtoczF0dmhxL1py\nS1hsc0ErckdoVVB0bE02RGdCNW5raERXT1ZJMTkzNjRGNHd2T3ZSTVYrKzZlbEll\nVTZKc2JVN1B2SzRuNkpaekhwSWJQaFZVQQo0a3BxWWgwdk5sWWRBU01WbElvSzJY\nN210dCszNTU0Z2FuNUtlTE5VSUxNCi0tLSBERHh6VmtEK2d6Y2tlMWY5azhnTjNv\nSmYxV2U3SlRrNjlaTmZrbHdQOFpvClsy5yc+lZUZKE6Im69+WQItsUqJXqxcj5K6\njCXh2WNSiIB53dqKcFUFuIonQfO8ClU66O+XCCHUslcrUwN4Gk8=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpf43tgcfjm048lsqskvq34w2t4uvrm5qy6m2eg6zjj82ctca8wctgpczxvj0q4y6337uhvsxdh5j86k9h9ymautpvv2759ucwnef75ez7pa7fpkddklp40mxk2tedsp74359g0kefn5rsq0x0yss6cu4yd0h06up0rp08t6yc4l0hfa9y8jn5fkx6nk0hjhz06ykwv0fyxe7z42q683jy0"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIHJxMnVuSFpD\nTm5FM1AzelJWbnVaUHhPcnJ5MzBNVEpBdnFqaTlsdUptVlkgQVEgZlFBRFNyWkNS\nRDJQaUJ3WWowTEcwaTk0Z0tiRHpQNmhkMTJZUlZHbHlEMCBtMzE5bzVQb1JmZkpy\nY0orbEs2RzBSVXA3UmZYZkRRanNnc2pHSnJjK1pLVmZOWGR4d0IwZjh1YXlkakRx\nTm5EMXR3ZjNHWGl0Ty8rcHpQbkcxRTZmZwovZm1YbFhVWkxUNUx0VnRub2hKeEJy\nMG5zT2ZhWnlCN1c4RTZvMUJPN29VCi0tLSBFZmMydk42UUx1b2d0YWFCdEVwRERl\ndFpRTVgzbGZoU08zTWxpNHR1RklBCgndxcnBpDAs6sK4p9+D8GaLx4aJwrTnTuOA\n3uNSCiXCB2CyRXsEjJOe1VU2B2iqVbzbDPsSYPenfFG4NFg5378=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqprw0vfpc8wzsu78quc777kmee54ln6nnsjrnrhl7nr33eh4kvkksqp05qqxj4kgfzrmrugrsvg7skx6ghh3q9xc0x0agthtkvy25d9eq7eklta5wf7s30hexkuyl5546rdz9ffa5tawlp5yweqkgccntw0ny540n2am3cqw3luhxkfmrp63kwr6mwplhr9u26wll48x0n3k5f60c7hg9a3"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIGFQamhKZU1j\nZXVZK2lpQ3RLUEdrdEJXWlVyTjlIYUtCb0NoWmVicTh1U1UgQVEgZUh4S2o1R2RE\nV0svbnErTmxodXE2bUxJK3lla2lvajB3OXVwZHJtcHU5dyBKU3I4WFJnK3BOQXl0\nZDh5NTB5ZFlteFJIM2FVTVp5cmNyRXZqL1V0c0l6L0tSb0c5ZU9jbmRXMTIwb2c1\nQjZsREgzWUxaOXBUd2pQK2NncDZuUmZkZwpTeWI3dG5hdjF3OHM4UCtpbjNiYU5k\naGkrKy9KWkxGTlZ0amZNYWZOS1dnCi0tLSAyZSs5VUhiRitRZlJGSm5zc3JRRDYr\nNjdJUkcrYkt1S0hWZnFYRWp0cXE4Cg9L1D581HrKPWO+eo2J49p4H+PI3uqeHFr7\nL4ESFF8DNN1HHkCPAaPzEUm0SeKJehcyS2ful/q5rPh5kJCNgSE=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpyewum3q8dfcumfgec8nn958aec9f4q9aqy0k06kw5kq27d6fdqdgp0p7y4ru3n5xk90u747xevxa2af3v37e85j9g3axrmw5hdwdfh0wz22hut5vrafxsx26a7vh8fjwkymz3ramfgvvu4detztu075kmpr8l9ydqda0rnjwatdwmfgswg849p37astvld98s3nleeq575azlwc2hhpuh"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAwS1FpOFJJV3BxK1phQlpi\ndWlRaVZuSXVCWnRSOVZKMnA0bG45WDhiTUJJCk9pOHBUUmZqVGRwRlhYYWdLVWZC\nbm5DWEVNZUYwcUp0Vk91T1BWZWx2c2MKLS0tIDR3cUFwMElDQUdiQm4xTnBDM0tI\nK01nQjl0RmVvUFAzUzVZc1F6Mm5IdVEKq9KH8Q7VsT5ZoB/I2nW0dJUWFUaRYmgl\n3+l1+UQG5DSgcJ+eWzN6vndygCg7ln3VhOokVJCQ3xc01tR7RVZnNw==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1hlzrpqqgndcthq5m5yj9egfgyet2fzrxwa6ynjzwx2r22uy6m3hqr3rd06"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBlQjBmeXl6ekRmY0NsYkV1\nTENWVWc4djAzZmpPWHlqZ01vQlgxbVgvM0ZjCkJIdWYxRytLSDlIdk1ad1VCNUVq\nUlNwS1FtOWt1aGdxT1lJNGNzNDNhN0UKLS0tIFpOMGQ3cTBENkdRb1h1OGVFaXlH\naUxVZDlvdTdtKzZkckJZRWp1cExFQ2sK9mXCzmyiRCGiJZnAe2k20EOxMfwrnvaM\ncNu+hiGr10YW6IZs5/4SID9JXV/lYZQqPIUZJh+3oWFBq2wDJ6X2WA==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1sg0rvgyetdcqw7j2x983fh69kdkvqsngpe5x36e5920qa7fze3cqhj4wgx"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBWMVBrUW5yQytpMGdZbjh3\nYysxNG42TlhSeHY3aEt4dllkWkZhSEdyeHdBCnYyZ1BiRnAyb2ZYb0Z5UG01dzBE\nU3hMbTVFUWs0MjJ3TENuOUU5YWlSbVEKLS0tIHlXcnB1cTM4d0pRWlI1S0dqa255\nZVIzYXZFY3E4REJGNC91VTM5dlFDb0kKQ+A9JpqUrhb2eM4tpXX/Sn8zHLJNG0IF\neSNds4s3YYvQQvYwmqQrICCYJFWHeEEPJs7L7bUmNNk38NLMNrhOpg==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1swlyyk2rzvevqawyeekv75nx2dz34zpe3xqhkqme26gcgeavy4dqrfpcd8"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA4VXZ6dldDOG1CQk5IbXZS\ndUI1WjZTN3pBS2hGajNseFNqSWFrMG43akZZCkRkUFN5OUN0aXpoU2xVVjBlY2xV\nQ2VPdzA5Rk9PR3ptQ2t1YjhWZXFkVDAKLS0tIDNUaXNpV2JEQWZSMlkyODdoNFo3\nK01VLzBCSWdGaEw3bWowN2dKREVSYlkK39/nUqaB9f0UxK/ZLPoJh5i0L//4H7xK\nOMThqWDBhZWfWeR5HMmbl8THdtrcUCU3e/d7qK4pRlwjyI2Mdzy6MQ==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1vphy2sr6uw4ptsua3gh9khrm2cqyt65t46tusmt44z98qa7q6ymq6prrdl"
}
],
"lastmodified": "2026-07-27T06:45:56Z",
"mac": "ENC[AES256_GCM,data:zUv0iPTotaqMDpMA09gIH9qgswnkDq+hjfSvo/mA0YRP47fk05DI9RjwBQ1lwGxtkXLqcY/1aGY6Y/y+Hh1pm0mOKRV69AWxvnCVmOuVA1VsrfNGHgeZxhwTTieZc9yDr1tkQ07ogy+hnNqLkYvjRMwYJ8eoQ8G3AJGxWCtFykw=,iv:3vW/WI82Mae2JSrgJ9QFhHVLiP/ATFjd7kUHeD51qJA=,tag:47hyo688fimGZKf2sLa/yw==,type:str]",
"version": "3.13.1"
}
}
@@ -1 +0,0 @@
970101e88ed82502ad49150e076a481aae2016f236ccf4438fd7d514353670df
@@ -0,0 +1 @@
../../../../../../sops/machines/stellio
@@ -0,0 +1,46 @@
{
"data": "ENC[AES256_GCM,data:HKDiQZ4vDrHTJnbtVQzVdCk3UQjp/W/1aUKRw9HZkPVu+Rjr/bqdUYP2/3zYxXYvYjJVWRDAR4/oybc9WQZkpbGuN9CkoW36YUs0BkIUgy+qfMwvwGAcHROSFIK3OSgUt2F8ozjBBWYNICyJcT0DKKk+dmPTl5AIm8Xlo/G0UiscToqQdN6nDfFjRba9+aUC/8AagtjexbQTrcA/eJC6EesVfZOdfV8BAeL8YBfq1ZmDVnRmn67VCXzvDPIR0G3/L1c+ZJXtlt+TopWJHTvHehyxrKJxoTHk6udApNJWfxxUOqOrfYMTepTFPshX,iv:yrGBRLLiPyc/H3/RACAj4OGDnrYyVSUOKNHuouU+JbY=,tag:VHIXaOl9SXpxZIRAkOdCow==,type:str]",
"sops": {
"age": [
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBRNEpyUjkrU055YWdHUlJu\nWklTMUpudHduUERwaGxiRzhtWmxnV0s4TUZZCnpqOXBFYVA3UUFUajhyOHB4R1hW\nc1o5T0k0VDN4QzlQT1k4SFZ6NklLV1EKLS0tIEF1anprN1BmbCtpY2lsUFJLTFRR\nOVptWWc5Y0VuR2RnNnY3WGYvTVhncUEKYlCzPy66COzZl94/TJGPLQLCYRi26H+G\nlzjD/F8ktXgu8w+X4VdoYJ7/XhTTd0Un35yNlKAvWokzAlVlvN9WAw==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age17d4qt0n9edq57tgcqyk8eu5mrendl59yt6z2y3a4vkq7el8krqtq6lq28g"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBabktwUmhQbi9CT2plM0Rv\nYlhKbS9Ub3RZRURDV3RNUXkwNC83aWtaYVZrClRFZWVYZk10S21kWFJrTnh3MnY0\nYmRHd2pqYTdYNS9HendreS9qcjN5ODAKLS0tIFkvZWxoaHhQSU1kWTRaUE1RZTFm\neUJlQmprTjRxZTFxOFpsRHlFUTVVd3cK77wHXeoZW5p6Aj9sh0M9Z5s8f4AwyfSL\nWqO3mR9SLRvgUpS5mI0YgGbbCZqBrpKGHht39GavT98bnUfZ9Um44w==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1ez6597tgxg7xxpm6lqv30z82sa97c04afq4wlmw8qspm8pq4m33s86fxz7"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIHh4aUh2QVR3\nRTFmMTJFMVJMUFg2SVg3OVVpVUVhK2xmbGxoMis4QUwzQTggQVEgd0l6SlBCVW1v\neDl5N0lHYmVrajZzVzVTYjd4WVdNVjZoZVlkUEtmVXlMdyBIdmtoczF0dmhxL1py\nS1hsc0ErckdoVVB0bE02RGdCNW5raERXT1ZJMTkzNjRGNHd2T3ZSTVYrKzZlbEll\nVTZKc2JVN1B2SzRuNkpaekhwSWJQaFZVQQpkaitCakJMdWhvOWdZK0szZXJxZGpK\nZDQ1SmlSaEprZFFJQkp2UlZtcWhjCi0tLSBjNXpaaVBYRUVuVTVoOHFsSXY0MnYw\nRjcrNHB3aEdvaElQK2ppWHV6cjNrCmMWdEXrDTpV0ITjDStiBvW9calfZ+d8BRJt\ndoJrI5pkVOGxOx8p/5dM4ObVIfDbACvJSRbfcE+z4y3cYeLEVck=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpf43tgcfjm048lsqskvq34w2t4uvrm5qy6m2eg6zjj82ctca8wctgpczxvj0q4y6337uhvsxdh5j86k9h9ymautpvv2759ucwnef75ez7pa7fpkddklp40mxk2tedsp74359g0kefn5rsq0x0yss6cu4yd0h06up0rp08t6yc4l0hfa9y8jn5fkx6nk0hjhz06ykwv0fyxe7z42q683jy0"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIFhCZG01TDUr\nVFgyNnFzR2JRUloyUGkrcGNCTDZEamIyNG5IeVZ4cHFWemcgQVEgZlFBRFNyWkNS\nRDJQaUJ3WWowTEcwaTk0Z0tiRHpQNmhkMTJZUlZHbHlEMCBtMzE5bzVQb1JmZkpy\nY0orbEs2RzBSVXA3UmZYZkRRanNnc2pHSnJjK1pLVmZOWGR4d0IwZjh1YXlkakRx\nTm5EMXR3ZjNHWGl0Ty8rcHpQbkcxRTZmZwpsSWk5cExyZ1NYNksxSE16UDFBVGho\nY3dDZkVSZnoxNFVWYXg0cGQzVkRRCi0tLSBrR2VtM3N2aFkySVVTYzljTEUyMnVH\nVnVWbjFVakNrVExhcFh6aU83ck1JCh12zCYcy2+cyvu9KprpbQywkLHfj8JutBPT\nHIOmAilzW4QdJoqsDepXqUsYBhprF6FUjePF3NVlWwbChUxqCYM=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqprw0vfpc8wzsu78quc777kmee54ln6nnsjrnrhl7nr33eh4kvkksqp05qqxj4kgfzrmrugrsvg7skx6ghh3q9xc0x0agthtkvy25d9eq7eklta5wf7s30hexkuyl5546rdz9ffa5tawlp5yweqkgccntw0ny540n2am3cqw3luhxkfmrp63kwr6mwplhr9u26wll48x0n3k5f60c7hg9a3"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIGhiRjh0S0pn\nbkZvZEI4THY0QlJCbHkvU1pxMlBNcXVkR0VacGJmbVFhbnMgQVEgZUh4S2o1R2RE\nV0svbnErTmxodXE2bUxJK3lla2lvajB3OXVwZHJtcHU5dyBKU3I4WFJnK3BOQXl0\nZDh5NTB5ZFlteFJIM2FVTVp5cmNyRXZqL1V0c0l6L0tSb0c5ZU9jbmRXMTIwb2c1\nQjZsREgzWUxaOXBUd2pQK2NncDZuUmZkZwoyWjc3aUJVU2VIcHpFUFFJSXdUOFBW\nWTFvNnVHbng5Ry84SjkyVFU3R01JCi0tLSB0SmNkOW9lY1VmMHkrUjJ3bmUxdmdF\nQXFuS3ZPQis1RUhpcUFVbmIvL0VvComcxR2y8IOy72kZbjJgBfl6djI9o7AWCP67\n2gSjzIsM//7D/fkDddIHNwjFhhTf8XI6RhGZ3TLg9Y1XpbF/WIc=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpyewum3q8dfcumfgec8nn958aec9f4q9aqy0k06kw5kq27d6fdqdgp0p7y4ru3n5xk90u747xevxa2af3v37e85j9g3axrmw5hdwdfh0wz22hut5vrafxsx26a7vh8fjwkymz3ramfgvvu4detztu075kmpr8l9ydqda0rnjwatdwmfgswg849p37astvld98s3nleeq575azlwc2hhpuh"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAwb0RvNGsrM0VSSzk5eGNk\na2ErRVBRbmtmS3l2TFRNNHdzT2MrQVZCZEIwCkcxNFcxZEJBRm5PWnlUNVNVSkh2\nL2E0Q1ovcGp5MVUvTEdlSTR4N0JOMmMKLS0tIDd5VXhDTWphb083L2syd3IrdzFX\nVkNvVDZHWXRoSXlqS1ZVVUppSFpwMlUK6KgvrzqmJ6+i7N/clDKEqlJsBbHU6Umm\nuDBOeEQjqS8/srxnsSUUGX4LWSou6HdcLIBkb6kE61QltVreFHkrzw==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1hlzrpqqgndcthq5m5yj9egfgyet2fzrxwa6ynjzwx2r22uy6m3hqr3rd06"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBMcVNxWHQreWhxcktZaUE3\nWG5GVzJMcE1GdnNRai9YZXdCb3crb1A3a1hvCmdDSlFGbEVDT2xLM2ZheGoxL29y\nOVZhVysrdXdOSjhiMm1UbGJISitBK3cKLS0tIHNTVC8xdWpkQTlwQXM0ZHEvQ2Fi\ndURBOFdPQkh4RVdhV1IzWVJ0b2VWVkEKKkgMTrBtALRK4CSs4/bnu2aztC9hIoqV\nBVVykHQNbiPbxfowgZOFLT411/gF3GfKh7Pnqso5jmKvYda4nfRdqQ==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1sg0rvgyetdcqw7j2x983fh69kdkvqsngpe5x36e5920qa7fze3cqhj4wgx"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB6WG1ZTVRCbjJKeXhreUpa\nVU5Ja0N1Y0JyWWwzQk5lajVSKzI0ZURoS1dZCmFoeXVWNDZ5ZEtvY0lhYnR2MXc2\nNEFXcm8wbFVrMlZhYkdIdFZqV3hjNk0KLS0tIHFmZW5wUjM3SE9Dc3Y2aHBPNDBL\nY3g5YllWVWJkbS9lMHU0dTArYjIvNUkKgQC87XDj/uGLQpyoFeQcOeQP/wjZryL7\nsJsvvYTKrxoIltd9bqWoRAjUv+AHpP1G7lP9CaOdwyIXueDME4oozQ==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1swlyyk2rzvevqawyeekv75nx2dz34zpe3xqhkqme26gcgeavy4dqrfpcd8"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBKL0gvZ0NaUG1uYis1VGpw\nVjNOaXVYcFdIOGNnZlZFQlhpUDdaelJNVGxVCk1pTzlZVnVIMGhPMlVMeHo2LzRL\nUmRMOUJ1YmZSSURIaFBzOHV6blhjcjQKLS0tIDYzTlpNTlFybWhiUWxVQ0pWcUNn\nOE5pbGswMmtQWEVsajZXV0plbDBUV00KYiQUbgMGj0toDBSPDqB37rZhXULc3Ose\nmZxBYH0r+wLACK5Pk2PRYUbOVROgqzCnYq7CFDh9VRvobP4itLkfKg==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1vphy2sr6uw4ptsua3gh9khrm2cqyt65t46tusmt44z98qa7q6ymq6prrdl"
}
],
"lastmodified": "2026-08-12T08:44:41Z",
"mac": "ENC[AES256_GCM,data:elvsvTF0eEXNvNNMPm9g1/8aMAv96IMbLuJECoTndZsMwX78bqCFUSkBTSuKq7kAGSPcAO/JyXST+y1SK0fFaxEzSr6aq+yrR0AdHqfiyoplnAyMTHieVISvfSZj57xowz1/U+lS4lGj2xKxw+ZvmFAIdYVFNNkU/u8PlrkYTEQ=,iv:o+AxaZ3QWmif9Rr77a8kdR94RMqBuPmw9ThO8uO/kOQ=,tag:L3zqKyzIZZKC57axmybmsw==,type:str]",
"version": "3.13.1"
}
}
@@ -0,0 +1 @@
../../../../../../sops/machines/stellio
@@ -0,0 +1,46 @@
{
"data": "ENC[AES256_GCM,data:h31xS880MdG3e/4QOq3+8l25itPFucZr31V7PaibVWM0XpyONxKVE0Jxfhleb6utq7pN7y5GSbPxf0wvuKJOSjLsPIgr8C0/ZEA1t6sSctu9+Neq+VaudSSUdoanMk79vLvNSbl95H3NNNOu9Sm+RPpwc5CAGD0=,iv:GyZS3dbruCMY1Ngqkb6ikXQ1Sx8v3CnLMbdoPJuh5S4=,tag:vYTlyPu4Hm9fPqe/lea0Sw==,type:str]",
"sops": {
"age": [
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBGelFJek9LRm5MWG5vVEpX\nS3dicHViRGZxQnJZSmtIU3Zqc3FuaE41cTFFCjMzclhqOHQ2RHdBNStCelcwTDd0\nZk11SzJ2cWpQMGwxUlgrZmNhL094cUUKLS0tIHRWcVZRdjBUVTRsZENzaGNiNHp0\naW5JN29uL0xha1RBQlk4YmVrbG1OWmsKoOU0N/q2Tc+sT63LtndrFm7E98Bi7a25\ncSjHnlniG4QD/9BMVnUzL2dxhxGCL4hsIp4tSODD1e/EqnZtSSc7lw==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age17d4qt0n9edq57tgcqyk8eu5mrendl59yt6z2y3a4vkq7el8krqtq6lq28g"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAxQWQzbTF2M0d1RkN5RVJl\nUEUwamo1SlQ2TVBGQk96Z2pvL0xvbFNiZ2lnCkRPL0p1WWcwM2ZXRC80WTNaemxJ\nekVzNDFWS0s3ZTNMaENOcXZHbGRSSU0KLS0tIDZlK2IvNlViejZtOWNWZ3dPWVN1\nYmJtRzQ2a2lrUzlBYlJoaXBiWCtIQzAKxS2wOgNfnC6U+fp0A/VPA7M8BAl05sfV\nVkFgudMYgBBB71WEeahg2thZF6QvcStE+BeANoV2JPNQBfhkfogOwQ==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1ez6597tgxg7xxpm6lqv30z82sa97c04afq4wlmw8qspm8pq4m33s86fxz7"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIFVzQlFTeHUv\nT3R6U1FsWHE3cnh2cURkMWpwb0VHU28zbWRpc3hUTmhTMEEgQVEgd0l6SlBCVW1v\neDl5N0lHYmVrajZzVzVTYjd4WVdNVjZoZVlkUEtmVXlMdyBIdmtoczF0dmhxL1py\nS1hsc0ErckdoVVB0bE02RGdCNW5raERXT1ZJMTkzNjRGNHd2T3ZSTVYrKzZlbEll\nVTZKc2JVN1B2SzRuNkpaekhwSWJQaFZVQQp3Rm9hZWtlMUpZcEZoVTlMaVNVZFBS\ncU1ZQWVVenJJZ00zUzY2Yzc3bE0wCi0tLSBnMUZ0aUplWUx6RWE0UXVIbk1ERHZC\nSlVZRjhESjQwWXNDZTlETmJsTFVzCjlRR0c+6bjSxQCQPwIsEctfJdcZiuoh4LIw\njeoMdzE1mjgJW4joOzVTUiV0fi5Y8h0XS02f9axyI8vFUNlFH+c=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpf43tgcfjm048lsqskvq34w2t4uvrm5qy6m2eg6zjj82ctca8wctgpczxvj0q4y6337uhvsxdh5j86k9h9ymautpvv2759ucwnef75ez7pa7fpkddklp40mxk2tedsp74359g0kefn5rsq0x0yss6cu4yd0h06up0rp08t6yc4l0hfa9y8jn5fkx6nk0hjhz06ykwv0fyxe7z42q683jy0"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIFpUL1JFQXRh\ndmJTTVU3RTJNMVBoanVCVnQ2QWlQV1ZSZ1hwTGxSM0tXbVEgQVEgZlFBRFNyWkNS\nRDJQaUJ3WWowTEcwaTk0Z0tiRHpQNmhkMTJZUlZHbHlEMCBtMzE5bzVQb1JmZkpy\nY0orbEs2RzBSVXA3UmZYZkRRanNnc2pHSnJjK1pLVmZOWGR4d0IwZjh1YXlkakRx\nTm5EMXR3ZjNHWGl0Ty8rcHpQbkcxRTZmZwpQUEt0d0k3ZXc1ZThHdHZOdVhvaFlB\ncklJV0FuSnAwL25QemJwMlMrY21RCi0tLSBESDJHcHdvTzlJSjlkY0xWVEp5RG5C\nQzFOS1RDWGxpQWZyMHVBdk1uTURzChACYZ6/G0L5SaILYJs2JsuPsBaMtHEY48xL\nAoqnBQA38vOdSJqCAiPVpGsxm8PV3Bdu0e81C2fn2WYJK0u5Org=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqprw0vfpc8wzsu78quc777kmee54ln6nnsjrnrhl7nr33eh4kvkksqp05qqxj4kgfzrmrugrsvg7skx6ghh3q9xc0x0agthtkvy25d9eq7eklta5wf7s30hexkuyl5546rdz9ffa5tawlp5yweqkgccntw0ny540n2am3cqw3luhxkfmrp63kwr6mwplhr9u26wll48x0n3k5f60c7hg9a3"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIHQrRVFoaC90\nczRRaldrRnFQNTd2WU1RaWZxQjR2VUltNk1BOTdwQ2ZSMEUgQVEgZUh4S2o1R2RE\nV0svbnErTmxodXE2bUxJK3lla2lvajB3OXVwZHJtcHU5dyBKU3I4WFJnK3BOQXl0\nZDh5NTB5ZFlteFJIM2FVTVp5cmNyRXZqL1V0c0l6L0tSb0c5ZU9jbmRXMTIwb2c1\nQjZsREgzWUxaOXBUd2pQK2NncDZuUmZkZwpmQTQrOHBWcmFMaXQyZTgvSTdFdkNP\naFdXV3orM2x0VXF2eWVwdTl0UkZJCi0tLSA2K01HZzFwUmU3cnZndUhtYUVCaUpt\nZXFtT0djRlVEZlpxSGpteE9aQWtVCuOVoIsIxOGUa+Lwc4yjbPuaP6PkhBAaoq7B\n7odYF/BOpEDCgr6bDG4U5epHTd9zm94N52bwEqgAo7SwmpetVTc=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpyewum3q8dfcumfgec8nn958aec9f4q9aqy0k06kw5kq27d6fdqdgp0p7y4ru3n5xk90u747xevxa2af3v37e85j9g3axrmw5hdwdfh0wz22hut5vrafxsx26a7vh8fjwkymz3ramfgvvu4detztu075kmpr8l9ydqda0rnjwatdwmfgswg849p37astvld98s3nleeq575azlwc2hhpuh"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB4SzlyaEpGSFFwNm0yelUy\nNURDeU16cTlCNE9scjhmQ3JGTytlTmttRXlRCk5DdjJRRHI5YTZ4dVluSDg1N1JS\nRENqUW9XT0lYMmFoODcrNi9kOVQ0eUEKLS0tIGVFOGFNV2hqUEhFSlZYZlJudzJW\nVDFvMXZZVWw2ZGYvRzcrS1lLU0k4eU0KUlBai3+q+q2zvkF4jHyizG147Iyko+1p\nZZaggv1r3EOIvRultU0X/gJ9ORMh6M7/oAa4UuaUs/Z+RvraNqG9IQ==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1hlzrpqqgndcthq5m5yj9egfgyet2fzrxwa6ynjzwx2r22uy6m3hqr3rd06"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAvTWx5cGtOK2dhR0VOVlBD\neTh3RnJudm12aGhKYUttc3hOcUhGd1kxSFI4CndxdDgvMDdZckdyM0ZpenNSc0JO\nbCs2Rkk5M2RiYStvYkxTaWxxbzVHdlEKLS0tIGRLcElDUDFZZ1BQMk1YTGtJZTVj\nVGJCWnVkVnppcjdqL0p6ZXFUMVFLRzAK+h/2DMvFnrvpv2cpOTfoop8eBj4oktjp\nXtF5nNBAw2B1y8FlBwE+dSZ/uUBwMyLDZm+qOKikuSY1zoap/t13mQ==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1sg0rvgyetdcqw7j2x983fh69kdkvqsngpe5x36e5920qa7fze3cqhj4wgx"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBocWhmUHRsUVdQTXJxUjI4\nVHIydVowZDVMS1Eva2JRSGN0UHBzS3JvQ0hrCml6LzAyRWgvMEJxTW42cS9QdklU\naU02VTJLZzRBeXVXaTMwMVdNT2IwSGsKLS0tICs2TkhvVUx1VS9BUDBDMGdZbWhq\nbG56dUVYYTNmQzBRUTROaUN6VkVXdFUKnvmWDVEXHqsvBF7G68XSA8HzXhqkYi7z\nPVaZNnnx9G3zp4HhjPWjU4jhqNxyTMFyzgFAdrXWvqzhwwhX0MdZJw==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1swlyyk2rzvevqawyeekv75nx2dz34zpe3xqhkqme26gcgeavy4dqrfpcd8"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBxTGFTQWFWY2lzT1plSkVx\nNzlVQ091RnpXc28ySUxodWxISDIwOGM3YmtNCjMvN2tzOTFqUnNMOFkwUU9jR25I\ndkRqY2pML2phZStoZEtzL1d1THJIQlUKLS0tIGEyRDZsSnpaY2pWSWJ3VVhPcnFs\ncFZNd01sU2pMdVd6UDkxMkNQVWhHUG8Kk7KxzaoNWWEeeqxKF7g1echsZdpT9S1C\n2lMZFcZxP2xOQtOvZf5ZsEaAGknngknmp0UysalfLxE8qL9eyUCyiw==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1vphy2sr6uw4ptsua3gh9khrm2cqyt65t46tusmt44z98qa7q6ymq6prrdl"
}
],
"lastmodified": "2026-08-12T08:44:41Z",
"mac": "ENC[AES256_GCM,data:iUa9/R3WNipDdLR2lP91D641ebihrDn3hnWHPr5ntqNEXwQ+lLcojshRr2KeLoCa9q3zgUcREAG0GTNN5nKq7ZItzK/UuZDdRqaX3QBUBBIE6pkratVTSeS+r9VBrnN2jk+wwBs0bTb2A1SFyKJ6p0te2Lf996e4Pw5Z5Q0yZxk=,iv:/+Wbb0iUYfzuKEPA1c2rG+86fXFWhBwHCaTQDe8qOPc=,tag:d2bt72/a07LJ/lMmLB/GJQ==,type:str]",
"version": "3.13.1"
}
}
@@ -0,0 +1,3 @@
-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEAqT9H1Dl8/zvoKetgdD0fLpeLQ3oFIWvtO/dl+VI1RCU=
-----END PUBLIC KEY-----
@@ -0,0 +1 @@
12D3KooWMD331LXvtCEkjsa78PNK2EDWZtNnFPJfnoaB8hFXsWzx
@@ -0,0 +1 @@
../../../../../../sops/machines/stellio
@@ -0,0 +1,46 @@
{
"data": "ENC[AES256_GCM,data:rHeeAVA26cOaJbxBPJccMbLssLi2sJWqvYIghBnW5mhoqF76rvxnos1w25j7oPfcPAVB8mIBRvH0qPQs5EkT/8u1OYxmd+0inx16Fl0hP9ad6VyPnbcbN7YoFaAXI5bFdy58E03FlTTXmbP2S/f5PprYV7sm1kw=,iv:GlEt6zfThCZQwZYigtAGIkqINE8w0gGDcsPOujDdOD8=,tag:kP+ADas1Yuacy+GnC+rvrg==,type:str]",
"sops": {
"age": [
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYSVVCVjRlM01lL0daRHZ2\nWWRpcGp6Wmx6OWRFVS9VR1RCTmFJZHNxb3pJCkpOOXlYY1o2Z21YR2RRTUloU0t3\naE10UHFJUjZOaXB1dC9aUVV6K1dOWGcKLS0tIG5xQXYxY2FVdFYyWEdLSnBFcklX\nTmdQRHFaQlFnNk9uMFNjTTRRY3FsMFEKlmuyR55zbvelxb0aWfyzQwTuO/5Lrpum\nZ8DyW0wTkAdWdDFhd4xrizuO6Y3gzYKrYBgbu0V/YvV1BWGgEbKN0g==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age17d4qt0n9edq57tgcqyk8eu5mrendl59yt6z2y3a4vkq7el8krqtq6lq28g"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBKd2p6bmt5WjkzTXpNaFE0\nN0dCUXNpS05WajA0UnZiWXA2WmpIdDFDS1VBCjBBM3FRd1hYbzFGSVl2ajFBOTVz\nVWpUSWI1NE1TWkp6Y2Urc0R2dXczZlkKLS0tIGk5MzY3S0dZUmMvd2Y1dkxmSmR6\nOEVFeUxjcks3WXNZbEtSTkJWNVJ0QkEKDY9Xxm1SuQ7M2LDqsjn5ixexYj6KBhjM\nnJRvmZPqGSx4MxZOoIc6hVPQI88h6uO2LNLjGfMBYWfo9FsRZutXrg==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1ez6597tgxg7xxpm6lqv30z82sa97c04afq4wlmw8qspm8pq4m33s86fxz7"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIGk1RWFvMUpi\nbjJrUitESGEvckVzODdIUUxtbWNMTktXYkNmZzdsWEpuVFUgQVEgd0l6SlBCVW1v\neDl5N0lHYmVrajZzVzVTYjd4WVdNVjZoZVlkUEtmVXlMdyBIdmtoczF0dmhxL1py\nS1hsc0ErckdoVVB0bE02RGdCNW5raERXT1ZJMTkzNjRGNHd2T3ZSTVYrKzZlbEll\nVTZKc2JVN1B2SzRuNkpaekhwSWJQaFZVQQpFZzF6MjhrWjdwWFE4RzFha3o4Z2tM\nK3RNVXYrRWFIbDNRZytSVDZzdkVJCi0tLSBlOUVkNXRIVGhCeUVSeXZnd3FQalhL\nRlVINFJmdGdxdE1DWXJlY2t4RW5zCj1uRLPEM8E1xPkRhOERFSEOdqMrd9Bq/GLf\nF5fe38Yx9yIxVrzS5lMsn1IhJnNuf8jppxRbNWP8OjNpFKWwYzk=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpf43tgcfjm048lsqskvq34w2t4uvrm5qy6m2eg6zjj82ctca8wctgpczxvj0q4y6337uhvsxdh5j86k9h9ymautpvv2759ucwnef75ez7pa7fpkddklp40mxk2tedsp74359g0kefn5rsq0x0yss6cu4yd0h06up0rp08t6yc4l0hfa9y8jn5fkx6nk0hjhz06ykwv0fyxe7z42q683jy0"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIGh3YWRtOGVM\nc0M5QnYxU0c2amcvRFc1cGNlNk9SWEFXeHd2TUhwWG1reEEgQVEgZlFBRFNyWkNS\nRDJQaUJ3WWowTEcwaTk0Z0tiRHpQNmhkMTJZUlZHbHlEMCBtMzE5bzVQb1JmZkpy\nY0orbEs2RzBSVXA3UmZYZkRRanNnc2pHSnJjK1pLVmZOWGR4d0IwZjh1YXlkakRx\nTm5EMXR3ZjNHWGl0Ty8rcHpQbkcxRTZmZwpxejg2MFIzNjVINkFuTUNLRVJXWWJz\nNkU5bDkvY3ZLZGh3V1dXSUNaOXVVCi0tLSBKd1RBQTZPcGhneElYdVRqclRmU25s\nY24zSVVBSmRiTjlCWTFmeTVuSGNvCsmWSEw+bSE2Z7H5o5zTPBrEAUJoUQNf+2ie\nYvyhM+bDAmzAOYlyUCPdj7OGK76a14xcVdq09RBKXwFWtRe4WpI=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqprw0vfpc8wzsu78quc777kmee54ln6nnsjrnrhl7nr33eh4kvkksqp05qqxj4kgfzrmrugrsvg7skx6ghh3q9xc0x0agthtkvy25d9eq7eklta5wf7s30hexkuyl5546rdz9ffa5tawlp5yweqkgccntw0ny540n2am3cqw3luhxkfmrp63kwr6mwplhr9u26wll48x0n3k5f60c7hg9a3"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIFV0VkNOTzBo\nWVVVemRGdEVISldKYitVaEN6Ty8vZ1lUWEN5U1NJVmtIUjAgQVEgZUh4S2o1R2RE\nV0svbnErTmxodXE2bUxJK3lla2lvajB3OXVwZHJtcHU5dyBKU3I4WFJnK3BOQXl0\nZDh5NTB5ZFlteFJIM2FVTVp5cmNyRXZqL1V0c0l6L0tSb0c5ZU9jbmRXMTIwb2c1\nQjZsREgzWUxaOXBUd2pQK2NncDZuUmZkZwpuS29nbU1lUE1iUmt0TzVLQXJCWDJI\ndWIrVlhPUlJnRnlQYm52ZFgwT3dFCi0tLSAycVdUR0NTOHh2WnpiYlhzdEREYS9p\nUWhSVHA3QmcybTNOZjB3ME9BWHFBCtC4y2cQI55yx/ndEcdFOSgKaw+CwVVSfYgm\nhliwYgs8R/OttucAa93snT1dWicACmbFfYed/swLsMsKkw2uG/c=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpyewum3q8dfcumfgec8nn958aec9f4q9aqy0k06kw5kq27d6fdqdgp0p7y4ru3n5xk90u747xevxa2af3v37e85j9g3axrmw5hdwdfh0wz22hut5vrafxsx26a7vh8fjwkymz3ramfgvvu4detztu075kmpr8l9ydqda0rnjwatdwmfgswg849p37astvld98s3nleeq575azlwc2hhpuh"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA2dWEyV01UdzJ1bWRpUnlx\nSkZMWE5wWEE1VXJXaC9yUitWcWNJclQ3OVZJCjIreW9IOVU1bm5nSlhta01yRGJF\nVk5WN3Vxb25jZmhLSTBYM21lTk5EYWcKLS0tIEJsMlptUWtlWFdJVEpzbEJNNHZh\nTVJMQU1PK0xsOHFQdGN3bjRKVjl4ckUKF7GzljGn4J2jFYxsfLyg8o45IqZwb1ll\n4y3FwuWJ62YfHdY8iPFfLBVArhKD9iSIh3yf4Vxj/3+p5luNWnvsUw==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1hlzrpqqgndcthq5m5yj9egfgyet2fzrxwa6ynjzwx2r22uy6m3hqr3rd06"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBkTUxPcVhCVDBDcGxQeDVZ\nMDhmajZmK3l0bXpUdFNEUEhILzl3MXYrV2hzClpnNFJkZkUvUjl3SXppNFBFVGY4\nUmh1RitnbHpEUTRWZHJrUWNrNU83eDQKLS0tIGYweVVpdXJsa3Q5dGYvRG1GRVZK\nOTNjNVpBNFpZallVSzNQSTAzS3AvYncKwlEivlYTcrKNg1NyBG5QKAKY6GvBkI1x\nkOX0Akcyxns7eKNLBg5mDxDpHP20tfvkvtBtAF0OjRYbcXgVN+jrRQ==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1sg0rvgyetdcqw7j2x983fh69kdkvqsngpe5x36e5920qa7fze3cqhj4wgx"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB6dVltY1V3THo3WitiUHNB\nVGl2QUNLWWpPS05ZS0RFOGVkS2NXSVFHMGs0CmlxMEFWbFNxTlJlSXVMQWsxZFN6\nbHN3QzF2Wm83b2dKU3dMQVVxMmZzVXMKLS0tIDFtSyt6aXozQUdFYm14VncxRmhm\nT2VmWTlMb0RhS0ZqOTh5QVFZN2ZTYlEKoADFPdRQUdezS6VCu/9wqM1J0PFHAhNZ\nPqKNJsEk8zuK0Z4Jsfdfj8mCh4IaHux0mhUcL4ihLyQIdb6Jp9gllw==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1swlyyk2rzvevqawyeekv75nx2dz34zpe3xqhkqme26gcgeavy4dqrfpcd8"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA0U1FtZkRxNzhXMVUvVE5T\nQ0hDbjBpaDV2anhjeWgxZmpzbUxSSDFUSEhZClQ0SVFqYU5kdUJ3VXEvb3kwWlMr\nVnNZa1VCRXFLa1Q3NnJRWjJRSGJhWWsKLS0tIFNhMTFTZzVjWk1vbE5acUdEUmtO\nTGFSQkNBdGNKTWM1bmI2a3F3dFJmZ2sKi3Z9rXr7Bmn0Nb05zviKRajvMrMuSF2e\nTNrKOw647KsBdrvLCxBdplDrUWWiwpeBQE/UdOyNKVffm3pGBJNr4w==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1vphy2sr6uw4ptsua3gh9khrm2cqyt65t46tusmt44z98qa7q6ymq6prrdl"
}
],
"lastmodified": "2026-08-12T08:44:42Z",
"mac": "ENC[AES256_GCM,data:M8PYIuKI373DZucoGPkm9qrkRz5TST3jyxKB3q6nd4EQXepZtuCDO3w7kvkjl+OxdC3Py54vk3LE25ppIUudYv9il4HHqQo0MWO8b5mDaYRri2uJ3qxO4LcwcPLZt7HUo7cwtr7iNZofXTs8Kk4FwqGkFCYTvwubPPVSKYe82uk=,iv:/hm72ocqMV++jIku6WJ+w1s/Q1tiWzdxouDWYAXeNLQ=,tag:oGgCYqk3wfkBC/2bZBuSEA==,type:str]",
"version": "3.13.1"
}
}
@@ -0,0 +1,3 @@
-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEAnmjyS5P+bJ5oCjTFJ79yD7avpya+k0PMrTBIVL3ynYk=
-----END PUBLIC KEY-----
@@ -0,0 +1 @@
ae6b2f69e7a75d39b2f0e174d08b3adfe90573acedbc9cad3212bac8dce08c6c
@@ -0,0 +1 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIO3MkWOaP+Jatf0y1hTm1W+flCy/GB7iBlK2HA6tubO0AAAAIOi7KB+Sk1bx2jiPi09Pq25HFg20HebNO1ucOwyGDuZrAAAAAAAAAAAAAAACAAAAB3N0ZWxsaW8AAAAQAAAADHN0ZWxsaW8uY2xhbgAAAAAAAAAA//////////8AAAAAAAAAAAAAAAAAAAAzAAAAC3NzaC1lZDI1NTE5AAAAICXbUTypho9ecNCGzhQHzETuVroy8XnwBwZXsLN03kvrAAAAUwAAAAtzc2gtZWQyNTUxOQAAAEBhA1sVKDGKqKCD1MCpJahl7kOa2TYueGDLYRbHS7+Mc/82019I7/IQ9wAZ6k27jgM50vmL4hcYtvQsJMQUHJsG /tmp/vars-79gjjs4h/in/openssh/ssh.id_ed25519.pub
@@ -0,0 +1 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOi7KB+Sk1bx2jiPi09Pq25HFg20HebNO1ucOwyGDuZr
@@ -0,0 +1 @@
../../../../../../sops/machines/stellio
@@ -0,0 +1,46 @@
{
"data": "ENC[AES256_GCM,data:qo7AOPLV6kxhPuSZE6llB6V534Ee91yxgc39IK1PLlT92P1GPCTYbraEigjxEoj+OY0+Y6w9VblXh+vnF3mVTOZVf4inl6V+dO9eWCxGhE971cONUIamzzFaGmS2Y+Gs9t2QZBSF9PML5jvSSQPiIM0i0dEBZ/NAkhAZQpP9ivxKFaqaEwRe5Y4HzjQMoIGUT3LsP8nj0VhLxJZTSG0WYGHqYMds/2IgQuygjd67DrrgNnZh4wFgMzNDCo5Lf8i6k1fGls4ab0SXHcnRatNXFohnNx6TqSLfEqgEjZPU0mHiKeGWzDX4o7Jbm4X2mu8OLR9tCQqQQQxCdomLlIjSMu2pZoenJby8T7pCzMAHzgOqVsB8ZL2F9dl7s6C7T7plO8XNtByb54v4XBSUHwfOKeCLbXLmzNnrk0aRqynqN4jmyJdA8ijpjuMHQRbaXkkEtvDTCpuzqQRgCO0wI+ItRwgIomikHpTjeaa/ocnkg7eQ2bG+i2WPQtv44D/LGoRCpBKn,iv:e4ysOL7YmX+IN/6WfqEV13fsu8M2CPeXxKkmPHKqzM4=,tag:Y7aU5QvCEshNmHRpwcGUsw==,type:str]",
"sops": {
"age": [
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBnb3N4aWRRN04wUmJJM21Q\nRDF1Rm0xajdRV3Zma1B0U242M1JKekpFQnd3CmduNlZRWmk2ZGdsdFI3Mi9ma1pV\nZ1pYZ1dtNTRVRVZMUVlkRjJYZUxCaTgKLS0tIDU5ejVwUGlBeE91dWZXaG1Bd0JR\ncS8rNHJLZXdQeTNzaldRalFqMDJSL0kKCpleYoeiAJ3njQ7DHPE/cnTaVmN9jnse\nvegx9dKxrLbjrohm90nf1z0naabxo5dIL7c5nCLdma4t+cydvKTVBQ==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age17d4qt0n9edq57tgcqyk8eu5mrendl59yt6z2y3a4vkq7el8krqtq6lq28g"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBRY1VYK29HZ2tIT01OT2NE\nbEVkWWYxYjZMd3pXb05oTU4yM0tsM1g1MDIwClR0TVlUdGZZbWJQMzJsSks1eTc0\ncUhrang5M0JwWU5OQkZ5ZDRRd1dMTlkKLS0tIFJwQVNoS3NlQlkvZlZaOFVNWDJE\nSktPTXA0Wm80MzVBZXM0MWVZMmtlL1kKBXmJKL6tMH1EL2TaAOvTAml8NODtn7UM\nRCtTTde8uyu0MBTDzq6stUBg1uYMNkDh2UN0tR+VUg+216U/CacOIQ==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1ez6597tgxg7xxpm6lqv30z82sa97c04afq4wlmw8qspm8pq4m33s86fxz7"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIDZmak56SGdJ\nNk5yOHQ1VVJjRFAyZUFGRTRIYXV5N1J6bFlzSFd5TWJkbk0gQVEgd0l6SlBCVW1v\neDl5N0lHYmVrajZzVzVTYjd4WVdNVjZoZVlkUEtmVXlMdyBIdmtoczF0dmhxL1py\nS1hsc0ErckdoVVB0bE02RGdCNW5raERXT1ZJMTkzNjRGNHd2T3ZSTVYrKzZlbEll\nVTZKc2JVN1B2SzRuNkpaekhwSWJQaFZVQQo3UXhEczJIdjBCZUFpUkhNeTc5Z0FT\ndis2NWlpNU0zYzUydEJEa24rUmNJCi0tLSBKUUR1eWpHcHhHTGtlSXEveWlZRkRT\nVXhlOHBuMWVaRmI1MlRMbVRKUkI0Cjb42OJ94DMOF0PjQVTakbokmN+/4qZaiFpy\np2ciVzWrM5qEdKBi+G9FqCGy9IV1WQvfrQRueH5IWNdRgD2v6Yc=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpf43tgcfjm048lsqskvq34w2t4uvrm5qy6m2eg6zjj82ctca8wctgpczxvj0q4y6337uhvsxdh5j86k9h9ymautpvv2759ucwnef75ez7pa7fpkddklp40mxk2tedsp74359g0kefn5rsq0x0yss6cu4yd0h06up0rp08t6yc4l0hfa9y8jn5fkx6nk0hjhz06ykwv0fyxe7z42q683jy0"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIG0veGdzRkNM\nYnlXaWdwYnZCWW9tZXFhM1E5UVFKRFZKcmZvSG1vMy92MkEgQVEgZlFBRFNyWkNS\nRDJQaUJ3WWowTEcwaTk0Z0tiRHpQNmhkMTJZUlZHbHlEMCBtMzE5bzVQb1JmZkpy\nY0orbEs2RzBSVXA3UmZYZkRRanNnc2pHSnJjK1pLVmZOWGR4d0IwZjh1YXlkakRx\nTm5EMXR3ZjNHWGl0Ty8rcHpQbkcxRTZmZwpaYXBjQkhBeVdONThrd1h1RHAwcFBP\nRzlHZW5pMGkvZitHbUdMeE5SZ0dFCi0tLSBFL0FXd25Sd041OTlQOGJwVmdlWEZH\nRHhVMzJGUXR2eFVVNVRBYmk4MlV3CsdqH0eKP9AgHaaD1VVdRU7HROBa6aoktuOj\nKjYDV5cljzCs3rkC3dCr/XpekiRol8MAQfqHSDZu/2sPJzN9sOE=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqprw0vfpc8wzsu78quc777kmee54ln6nnsjrnrhl7nr33eh4kvkksqp05qqxj4kgfzrmrugrsvg7skx6ghh3q9xc0x0agthtkvy25d9eq7eklta5wf7s30hexkuyl5546rdz9ffa5tawlp5yweqkgccntw0ny540n2am3cqw3luhxkfmrp63kwr6mwplhr9u26wll48x0n3k5f60c7hg9a3"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIFJLdEgwV2dk\nNTU1Nm01VkJVRnRqazlrYUoxSElqaU1XWWhuNUlzTTBWaVkgQVEgZUh4S2o1R2RE\nV0svbnErTmxodXE2bUxJK3lla2lvajB3OXVwZHJtcHU5dyBKU3I4WFJnK3BOQXl0\nZDh5NTB5ZFlteFJIM2FVTVp5cmNyRXZqL1V0c0l6L0tSb0c5ZU9jbmRXMTIwb2c1\nQjZsREgzWUxaOXBUd2pQK2NncDZuUmZkZwo0TlNhRlBZR2ZNUXJhdGUxWEF0NWlC\nNGxNTnJ2bGdZWEZaR1kzVkYrcWFvCi0tLSBGaFlzcTA0VEZDNDZwd0prOVVhWWh3\nUlpEVzU3THdaYlpISnRXRTFxL1FJCixq2BXu9gBY/YofT5fMh5OHaTq9vCwS5d8u\nvJ8HlSFMZPlc4KHK5n31hKJe/V5vwxErv1H7ATpjfeDOJH7hUgk=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpyewum3q8dfcumfgec8nn958aec9f4q9aqy0k06kw5kq27d6fdqdgp0p7y4ru3n5xk90u747xevxa2af3v37e85j9g3axrmw5hdwdfh0wz22hut5vrafxsx26a7vh8fjwkymz3ramfgvvu4detztu075kmpr8l9ydqda0rnjwatdwmfgswg849p37astvld98s3nleeq575azlwc2hhpuh"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBQb0x5L2djbzQ0ZlZsS0g5\nTG5vYWd2Z1R2bnV1OExhTWVLb3lzV0ovTFFNCjg1Z001dmlwWmdZODJLcmFKQ3Qz\neVZxaWlIQUY3aXQ4NXVoSDU2czQ5SE0KLS0tIEZoZVR4MVdLWVlWbmhvcEZYL1VX\nOG0wdEtvYmlhMTMraElIQklZM2FielUK1F+qIbrCHPFvHd5KuCFx/ifwrvQFvTM7\nW05l6Sjy0MbOC+QGUdrlw0kZNu5uQ0U1Q/z0gb9ZF/Ae6h70byyB3A==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1hlzrpqqgndcthq5m5yj9egfgyet2fzrxwa6ynjzwx2r22uy6m3hqr3rd06"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBCM3FNUHh0Q3k4WkRFMHVK\nZERmZHZiTDljOWxuc1JSSEsvR1VQakxVUWxFCkR0VXdCci81ZU01S04wUnQyNnlY\nbTkzRW13aEtRNWJnelJnSmxRLzVCMmcKLS0tIGVub0hHRHJJK3lPR1IzZG5OSHdD\nR2hnYjBVNG5TU2ZtMTdKRjBCTnpETmsKsWuZ58MXAtosQdLnekKBLalD9yD0OAWg\nCTr+4So+tHVENokl/LjjUPXryRl3a+RExLHEgyRPORkV8y6nXXJyvg==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1sg0rvgyetdcqw7j2x983fh69kdkvqsngpe5x36e5920qa7fze3cqhj4wgx"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAvYU5WRDRNbEJHWXhnRWdC\nVVlXMVBZL2FpUlg1czF0cStrYTMzZlNaTkNnClM1NXdiUVFZOWY0Znl3STlTdkUr\naXNDQ2RFdXE3NGZWRDdMR1FrVGR6dFkKLS0tIDVRbFp0Um5zTW9qODVabWtndTRx\nRnhLc3RRU0dEVDhzdFo0a0gvamdab3cKPqibNlN64u43Vm9V5wwfBdXksXSJkH8s\nSV2Tq9ZALQvOpH3F5CcMdiztBczGzqz19wwB0bGFbiPCeANvTE8wRQ==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1swlyyk2rzvevqawyeekv75nx2dz34zpe3xqhkqme26gcgeavy4dqrfpcd8"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBQdVBoZ05OVC9vWVlnQ0lO\nKzRKdmsyZzNJQ1RFSTNjdFhaR1l1bnZGdGs4CkhqMGZzbVdHQTBCRnVnVUlzc1Fq\ncUQvTHRSSFE4SURkajA2d25xeW5uc1UKLS0tIGQvVm85dHhaTzlCZ2o0V0F0RzdO\nenBYOUVRMExzdk9Pb3hwM3ZxVTFPalEKJkx9U+nRtqh7vF0k2ioxyRuKnJkTWeAR\nKGiCIi4x6mD1RT83GYBSzYLlksbOTlWWQ01NYQm9c9mcRJLPMOIt6w==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1vphy2sr6uw4ptsua3gh9khrm2cqyt65t46tusmt44z98qa7q6ymq6prrdl"
}
],
"lastmodified": "2026-08-12T08:44:42Z",
"mac": "ENC[AES256_GCM,data:B92SvCXMf/dD9OaavR+n98KZ9/bRnxhkTiYTD5EDLgr5V96fzOI/D/d58T9UHl4/KZUhx2Sb8RNWKPqaGzsm7M9hcTQN1kSQvDRACwHHOTb3tV43KoUSClLPrhJW+Vy1y0KWFZbTcME1lAYFZuxRotZ54U6ogMLsEpd3vwFCKT0=,iv:8UzrJlUxwGllsKXghhCYN66/03Q/0vZx3qC83LCs4Qg=,tag:sPXwpwb9Xz6U1lGLoheJ0g==,type:str]",
"version": "3.13.1"
}
}
@@ -0,0 +1 @@
../../../../../../sops/machines/stellio
@@ -0,0 +1,46 @@
{
"data": "ENC[AES256_GCM,data:pOhLtV+nHWGtTsE57vNvpONm6rD1V9WA7taoRA==,iv:WTxZyb3HjnSoGUYbvZGEq18RWWUdxEI56W62NUUhY+w=,tag:H5LMZgpiJUYO1SSjBK0nKg==,type:str]",
"sops": {
"age": [
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBOYlowaWJPOG5sWTF3VXVn\nSThnQnJxTmRFUk9wV29FV1gyYWpLZTlUSXlFCkJhbk9ZdmowdmZlNzFGYnZrWHdF\nbmZqUE15RUtpTXFadTFYQi9EY25PM2MKLS0tIC93RUdpMnAvZHlrVXlZNy9RK0RZ\nZ01Jc2piQXRyRjZyaXBvY09ZOVNrencKOR1/X7Hl6VWosEclsuQhg7zAtsfZfycM\nmIJjTCtZOd+Br5IirV+Bicf78FMlUNKxSAfAmvSZzix8VpAbCF6Pwg==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age17d4qt0n9edq57tgcqyk8eu5mrendl59yt6z2y3a4vkq7el8krqtq6lq28g"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBmekdHdGF2RlJ3UzF6cFNp\nVkR3QUFINnBBb0pNY1B2MVBOcFgxdUZYWTJjCkRxRUQrQWMxdFM1Yk1vRk1rUW9E\nWEhncC83WlEyMFJCZkZyeXRuQ0RZK0UKLS0tIHVteDIzWUdQM1lJeHQ1RjNPdDdI\nTGZJYVpBcUhrbVFHbGxKcGxIRmx3ZXMKjIe5pANboDieeV7FnVg6MyRTKtugEmXe\n/OF41893CjNKVa9Rpaelzd2B9ZTv94pBl6bkpzcRVb7lDQc+aCYJ+Q==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1ez6597tgxg7xxpm6lqv30z82sa97c04afq4wlmw8qspm8pq4m33s86fxz7"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIC94T0Q3QlFo\nYUJXbEE3UDZLMmhyTXl6RGZuR3ZGclpCNnhtNld6RHJpMjQgQVEgd0l6SlBCVW1v\neDl5N0lHYmVrajZzVzVTYjd4WVdNVjZoZVlkUEtmVXlMdyBIdmtoczF0dmhxL1py\nS1hsc0ErckdoVVB0bE02RGdCNW5raERXT1ZJMTkzNjRGNHd2T3ZSTVYrKzZlbEll\nVTZKc2JVN1B2SzRuNkpaekhwSWJQaFZVQQpNN21vdVdnWkhJS1VJTXdmMDJCbURY\nVCtxU2JGNUx4SitxVHVETEFNTGVRCi0tLSBJVWtoL1FaYkFXNUozdy9UZDRYVzBS\nZ1V5ODdKbXkxM1hWcldJSElKNjFNCsSwMEFvXDlg2LIfhD9np91xvV6k/iKMk4eX\nnrEc4mu6BoMmeGQcrPgMSOGc+7R5d4duBJ7cux8sgaeN+K1YBAE=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpf43tgcfjm048lsqskvq34w2t4uvrm5qy6m2eg6zjj82ctca8wctgpczxvj0q4y6337uhvsxdh5j86k9h9ymautpvv2759ucwnef75ez7pa7fpkddklp40mxk2tedsp74359g0kefn5rsq0x0yss6cu4yd0h06up0rp08t6yc4l0hfa9y8jn5fkx6nk0hjhz06ykwv0fyxe7z42q683jy0"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIENhWjlablV3\neVRFakNBaHk4SkFrRnE1RUVnVE93MHJXbm1uM0VjVVpsVzAgQVEgZlFBRFNyWkNS\nRDJQaUJ3WWowTEcwaTk0Z0tiRHpQNmhkMTJZUlZHbHlEMCBtMzE5bzVQb1JmZkpy\nY0orbEs2RzBSVXA3UmZYZkRRanNnc2pHSnJjK1pLVmZOWGR4d0IwZjh1YXlkakRx\nTm5EMXR3ZjNHWGl0Ty8rcHpQbkcxRTZmZwp2TE03VWg5Ry9wZ2FZNERXczl6Vzcr\nditzSTlMS1FzUXQ4d0JuOURQZW00Ci0tLSBCZHVpeVM2eHB2ZDRpL1NWVExMSW1X\nK3JIR3FIbmtEUElScC83NGNiK2M4CoOWG+151bJVdZsN0rBdsLcjkQHsoRPe0UZO\ncExyM7xZ1WZTKEIPRtuOf2Sf7BhCldnUfvDWTh/5TvyEmlVSGCw=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqprw0vfpc8wzsu78quc777kmee54ln6nnsjrnrhl7nr33eh4kvkksqp05qqxj4kgfzrmrugrsvg7skx6ghh3q9xc0x0agthtkvy25d9eq7eklta5wf7s30hexkuyl5546rdz9ffa5tawlp5yweqkgccntw0ny540n2am3cqw3luhxkfmrp63kwr6mwplhr9u26wll48x0n3k5f60c7hg9a3"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIElFNjJxb01I\ncllmV21EeU5UU2tnNHA5ZENlcHdwcHpXSldyNDFwbmtSV3MgQVEgZUh4S2o1R2RE\nV0svbnErTmxodXE2bUxJK3lla2lvajB3OXVwZHJtcHU5dyBKU3I4WFJnK3BOQXl0\nZDh5NTB5ZFlteFJIM2FVTVp5cmNyRXZqL1V0c0l6L0tSb0c5ZU9jbmRXMTIwb2c1\nQjZsREgzWUxaOXBUd2pQK2NncDZuUmZkZwpaamRjVkVJZWZuS0lhbVBzZHRPdnRL\nUTVIR2dnR1o5bHpzbmRoeUo0VXpzCi0tLSBFN3E3alQ1enJzOXFrU1ZMSVQ2aUwx\nb05BL3laUjNNT2JPUkljKzVZR1hJCo8U6RJleetpnrclOKiLOD/FbmMamsHJDMZ3\n5k0nWnQIqOs1S/caPZTVDhKMdTpKXkPHuvSTv70X6s1ed6QKjQ8=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpyewum3q8dfcumfgec8nn958aec9f4q9aqy0k06kw5kq27d6fdqdgp0p7y4ru3n5xk90u747xevxa2af3v37e85j9g3axrmw5hdwdfh0wz22hut5vrafxsx26a7vh8fjwkymz3ramfgvvu4detztu075kmpr8l9ydqda0rnjwatdwmfgswg849p37astvld98s3nleeq575azlwc2hhpuh"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBDcTdJN1lOaGU3VlZxTm9a\nY3Q3TU5FOXRaNVk4WjNJRkVzbVIyVkxDb1VVCmVnQVp6VVFVSDduaGFoamlUL0pL\nOWRmamJsbXM1UDN2NnpwRXN2eWtaVjgKLS0tIHZGRHVXSmdZWWlpUHA1ZmdtclpL\nWWxvbmcvNWppUkhObjQ0cjhTYmpDUWcKJVpk/Tr2TSbJzLgO52eWNSErB693+vXG\nWUpckVg0kBSmk134F9vwawMl6c72e9drVoC6tBq7vju7jGeuckZdVQ==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1hlzrpqqgndcthq5m5yj9egfgyet2fzrxwa6ynjzwx2r22uy6m3hqr3rd06"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBWeFFYMTNGV3o3Zms2d2xI\nQUZ6MmltMDZ0a3cvb2JyaG1BMXFLTlVTb2tBCjUyWTNEM2p6dE16bFJ1NDhpNjly\nSFZ0WXdxUSs3QWJFRUdyMGVwYmVDRVkKLS0tIFpKUkcrbjZYQzk0WmRZZkFZTEVG\nRGNiTWJaQXhBLy9PZGM1NVdHeUhxU2MKF147TBA9IpVpfjwmwrk2a9NoTy/lCMb0\nKqGcrKy7X7kAhe0/vJkeXgBO9cUyPv4wpImPDOG+toe7hBovjN75fw==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1sg0rvgyetdcqw7j2x983fh69kdkvqsngpe5x36e5920qa7fze3cqhj4wgx"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB4cDRjR2ljNGJUQVJQdG9T\nZmxDR0N6Yk41UGpwWmdHMEpqeXQ1V2QzcWt3CkJ2UjAyNkoySUhzMmdRNTlxZS9R\nUEJOczdRNWJJanJBSi81Mit3Rm1lSlEKLS0tIDU1VU1zbTB0K3d2K0pseGw5cmZY\nQ3pLNG1rUmhNSlFLQ09lS1RKSzIwdHcKAFkKk2vDX1Osb2jh55JNh/IRv39c1we/\ntfJh7WJ4V/fGDuN5aBBFjl855N5iD5UDAQ4k3tqd5IAi1bu3T3kbSw==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1swlyyk2rzvevqawyeekv75nx2dz34zpe3xqhkqme26gcgeavy4dqrfpcd8"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYUnpsN3YvWk5zZDhOb0Nm\neWhnV2tKN1pDWkxrYUdsaG5KYTQ1U1VIWEhvCkIvbDZmeU53T1dMa2Rqblg5aEV3\nQWFvTWVjR3pNZzkrcm9nMCtzNEtUcDAKLS0tIHFmM1kxY05qMlZ4NmUrb2lwNGxK\nZWdQcDc2WDRCUG9uNjYrYWNlL0kxenMKMLg7RhA+Hj7MPwW4fCNu82rLy6gGq+32\nooZ0HBX+HrYUVG0LktKkUvbX7lqzIyAvaGwKTp+II1WIByU7LXSN7Q==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1vphy2sr6uw4ptsua3gh9khrm2cqyt65t46tusmt44z98qa7q6ymq6prrdl"
}
],
"lastmodified": "2026-09-18T06:18:20Z",
"mac": "ENC[AES256_GCM,data:rQa+5v1ftpo/WWGzo56ehu57Y9qzKhqkM5QJ2IhHclSrSoMu05la6C52M7xUvxAyMEMJ0+M8sFYWy+jKyZtspsLaRoj/eLDUgWBGJeKvAiMVaDxoeo4ziXGLPofNhUag7YwNaR9DmoSX6Cadk3P+HtaqE1qy2SVSyUIQ9oHnQmE=,iv:pqyiXOghgzx6O5iapunLfR4d3ng45a9Hj1UqUhjrkuI=,tag:Qj1i7cVpL6gaIuG3s9IxCw==,type:str]",
"version": "3.13.3"
}
}
@@ -0,0 +1 @@
../../../../../../sops/machines/stellio
@@ -0,0 +1,46 @@
{
"data": "ENC[AES256_GCM,data:6WiDKqyb2FXVNBg2UhR3DwZa,iv:bNOZ8gKG/3yXjoYX0JBtCqr3jJvpb0VyMYguY4yonHk=,tag:1fEZPSWGMUX0/UbLdkCwcg==,type:str]",
"sops": {
"age": [
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB1QVcrdlZvV3crZzhqb3c3\nUkZrYlh5NVh0Tkl1M0NjaTJTdmk1NGNRd0g4CjNxY1RJdmlSNnBMVlpxQTJwcXpt\nSjlKVTFHME1RbllmV1BoblAybHNyVzQKLS0tIE8xeW83WTdRYi9aT1gzK0VzZ3BO\ndzFaVDZFWlFDK1lvTWM1N2FQNE1OdUEK1lZPHByUePgLsfFNwD41jcJTD8ppauak\nx4C2ZI3rW9OtubdHufq6na+nEnw39QPiw/vLL2Uz6LkNFxUeKGOrDw==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age17d4qt0n9edq57tgcqyk8eu5mrendl59yt6z2y3a4vkq7el8krqtq6lq28g"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBiQzZUemRiUU9GWEhVMVJi\nenV6QlhkSms1K1VNTmQ1TzlOK2dXQUhkWkNrCmVlaThVVGZTM3UxU1RONzFnVWRn\nRktJcTNESTlmWTFsYXRxRGxDVko0OUEKLS0tIGdQdjBmcW40VDFnY2xIMFFGMHd6\nU1pGZ0JhRkN5c0VIK21oY3Z3bkFjZ1UKswAs2F50Re1j6sPxKi7zaTQpCWsVeyPH\nPTEcYvuYbhPReL7kRTDqJY/WWLtWC9N6DEIZKpdMH+/f2utbLzQeqg==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1ez6597tgxg7xxpm6lqv30z82sa97c04afq4wlmw8qspm8pq4m33s86fxz7"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIDhqckRvaWdX\nRW05VHU3TlpBRXdLWGNEbWdQQVRzY082amV4Zm03ODNJaEEgQVEgd0l6SlBCVW1v\neDl5N0lHYmVrajZzVzVTYjd4WVdNVjZoZVlkUEtmVXlMdyBIdmtoczF0dmhxL1py\nS1hsc0ErckdoVVB0bE02RGdCNW5raERXT1ZJMTkzNjRGNHd2T3ZSTVYrKzZlbEll\nVTZKc2JVN1B2SzRuNkpaekhwSWJQaFZVQQpZMC82RVBYL1piemdEQ2N3bkVBR3Zp\nczNYSTcvVC9pRFhndjJGUldXaUFvCi0tLSBFVjJ5V0JjZGhqeUxML2VqOUtodzJ4\nWjJIdmJ0N1lhTjFaZGlqUzFzVHJvCqPfTCeulRj9dUMp2F0xzEM0ogT7dmNTJsuD\njWZGSLVLtJpubpudRX0PBIV3fyhC9s0Q3XCAe2g24AKH/VCEBAM=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpf43tgcfjm048lsqskvq34w2t4uvrm5qy6m2eg6zjj82ctca8wctgpczxvj0q4y6337uhvsxdh5j86k9h9ymautpvv2759ucwnef75ez7pa7fpkddklp40mxk2tedsp74359g0kefn5rsq0x0yss6cu4yd0h06up0rp08t6yc4l0hfa9y8jn5fkx6nk0hjhz06ykwv0fyxe7z42q683jy0"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIC9XZzJpQUJU\nclliamRlcmRaVVpraUxqK0ZCZGQyT29SM29jOFh1dURtd2sgQVEgZlFBRFNyWkNS\nRDJQaUJ3WWowTEcwaTk0Z0tiRHpQNmhkMTJZUlZHbHlEMCBtMzE5bzVQb1JmZkpy\nY0orbEs2RzBSVXA3UmZYZkRRanNnc2pHSnJjK1pLVmZOWGR4d0IwZjh1YXlkakRx\nTm5EMXR3ZjNHWGl0Ty8rcHpQbkcxRTZmZwpla3Yyby9ZREZJaTFOeFkvTUZSR29R\nVmRoWGhsZXEyR1hIbmhKWHlxeG5nCi0tLSA3SjkzblZ4VWNmcElrVVBRMm4rdXBP\neGsxV2t0SUVlcWpGbnBlQ3FSYms0CjZhn7RKsZ0Zz8zDRvr5lDI0/hqq9ANFGSt9\nlSmDbBIkuh4PTYzCuvudMNiASScGmeWxKQqaxA+BJVdlTa1QJzI=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqprw0vfpc8wzsu78quc777kmee54ln6nnsjrnrhl7nr33eh4kvkksqp05qqxj4kgfzrmrugrsvg7skx6ghh3q9xc0x0agthtkvy25d9eq7eklta5wf7s30hexkuyl5546rdz9ffa5tawlp5yweqkgccntw0ny540n2am3cqw3luhxkfmrp63kwr6mwplhr9u26wll48x0n3k5f60c7hg9a3"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIHdVRXdsZk1J\nSXREQWEybW1Gck9lTnVMVkRnYy9La3ZDQXJXVFVwSmY2eHMgQVEgZUh4S2o1R2RE\nV0svbnErTmxodXE2bUxJK3lla2lvajB3OXVwZHJtcHU5dyBKU3I4WFJnK3BOQXl0\nZDh5NTB5ZFlteFJIM2FVTVp5cmNyRXZqL1V0c0l6L0tSb0c5ZU9jbmRXMTIwb2c1\nQjZsREgzWUxaOXBUd2pQK2NncDZuUmZkZwpLRFU3T1RWQWxodmgyWDZnMm9LN09l\nY1p1LzMrWlRUWlYvbVE2UVZiMWR3Ci0tLSBRd3NTdmxZa255SVVrc2FkZnRUYWhX\nd2EvMFJtbHRZY1pkejdTb3QrNlowCn7uh8POlPuO31KqXY4W+CYLCtxWEDWMVdOh\n/VBNb9XEGV0IzTErNPtgaVQupzbnb8TVS/KuM6G0Z+ABg8y5RVw=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpyewum3q8dfcumfgec8nn958aec9f4q9aqy0k06kw5kq27d6fdqdgp0p7y4ru3n5xk90u747xevxa2af3v37e85j9g3axrmw5hdwdfh0wz22hut5vrafxsx26a7vh8fjwkymz3ramfgvvu4detztu075kmpr8l9ydqda0rnjwatdwmfgswg849p37astvld98s3nleeq575azlwc2hhpuh"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvQVdhYUV3VHJzYXM4OURW\nbGNOS21vazVhVm5zalVKUFVSblNTRngzVUZRCngwYitMRkZTYktNNjdSSEY5YlF4\nTUx6QUpJMTR5NVBHQkdpbG1TVmRMTWsKLS0tIFNOWXN6MEdZdDVjWHc5TjN1K09V\nWXB1WGVRVUswSHBGTkp5RnJ0R20vRzAK6/KEhxV93oLhlI1VAf4hRdoTGBqFfv4Q\nIWgQFGPxbEXNjvlauB5ZGxwpCgQTWgT+pKIDc9vUrPpt7symJS0CMQ==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1hlzrpqqgndcthq5m5yj9egfgyet2fzrxwa6ynjzwx2r22uy6m3hqr3rd06"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBqQlNrL3VUMUY0SHZ0YUZF\nL3d5SmViY3NURllya1Q4MmFoM1JqMFRuYWxBCkVvcTFhdDJWRiszUSszRXl6L2g1\nb2xtUG1sYTlGdGtIS2M4VlNua2ZqZEkKLS0tIDEyR1RkbmdYMUFvQVJIeWsxNnRG\nUmdRanp1OUpsU2oxV1FuZStSSjlucVkKkISehCi59bnA7SUdNw3wVV83aZ1RGpy9\nl9CrlCT3R7EoX0BU49SNhIMM5iwJt5YhUCLZl13TUb2bF0z5Nwcdxg==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1sg0rvgyetdcqw7j2x983fh69kdkvqsngpe5x36e5920qa7fze3cqhj4wgx"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBVZmVMTzFoSDFpeTJGMlpr\nVnhHMzBPdDI2aEFsdS8wSXlqMGM4RVRjSENrCmFOL1FZaFB0elFxR0FIdy9FRjU5\neDROV0lYMnFhNjdUUDFhclVia0V6UkUKLS0tIDZYbkVpY3JkR2dsa2FVWUh5Wjgz\nY1dQdTJVYURJZzdKelZuS0c2NHRsSUkKs+YXFMXOPmKC2QPrxdeTY1f05Q2UlO/O\n7/fw8Y9ioF5TcMIrNIjRP85f3G6KN4AMu/PKojcXDltSBLGTTNQzZg==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1swlyyk2rzvevqawyeekv75nx2dz34zpe3xqhkqme26gcgeavy4dqrfpcd8"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBqN3JGenp4Z1FqcnM5ZHJa\nbUY3VW9FK2w4NDJvYzJtTTloTnpVZXlqUEFJCmtpMkliVE9ZQ3g0SEd4N3ZsN0NF\nbTVtUGFZeURvZ3VLdGJNMEl6QytVQW8KLS0tIE9FVGJ4SVFBbUM4MlUxa0NZTk05\nUHZ1YUtZT2VYakQrMWsyYzRhVktmSlUKU8lBRfWqtOdcjwLgT75jFv60Bm/ZS84T\nPj/9CLzb+NQ/06m3w4cyefhq9k4wjHM7zQ4Y1uzv/JpIkbIUrUuiBw==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1vphy2sr6uw4ptsua3gh9khrm2cqyt65t46tusmt44z98qa7q6ymq6prrdl"
}
],
"lastmodified": "2026-09-18T06:18:20Z",
"mac": "ENC[AES256_GCM,data:k9zsU1OW6s9tdqSdQMWsrdVN4Sl/nWY6oY3IbfPeFstaljDEUFjhKW+B2gayFIFuBryqzh8zFCBw76H0nKrtDswRty2VThc5IAVQt1XfKeRl4pUHoM5Qt5Qwdti/jLpSqgJ/1CzLQAvwYL8qc14gFbVFGH8R6aBUvxQfJ+OZ23E=,iv:3ITsTUC7iM0KPultW/0nxeTsUfxGhlf+qklNUPhuvg8=,tag:rfTvb3iuk/sR7lC/uEgUNA==,type:str]",
"version": "3.13.3"
}
}
@@ -0,0 +1 @@
../../../../../../sops/machines/stellio
@@ -0,0 +1,46 @@
{
"data": "ENC[AES256_GCM,data:iP7uCx/8n8XuZfavJjnuaQ79EE+EVwFR1OicGJVg89AE7TZ0bbTBlHPYzhw/rUHDWWpHr2msGGQMyRwHybR3,iv:amlaPU2vjGhl8mZ/ISqeCgbv56Z0+5PCn4Fkydh8+/g=,tag:J6N3as45ANbiZYoKZZm6dQ==,type:str]",
"sops": {
"age": [
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBZVEFMKythVGJ6dE9yQXdV\nY2pIU2U1TUtHZzZDd3RCVTJnK0t0bVZyMmhrCmZlRGJ0NkJ0Sm9neGZFN0pIN1pk\nT2tFYXdxbkpsdUticG1CVzBjNFNJUjAKLS0tIDRsWFdhRUE3alFJUUhrT3Nabjhk\nL1BJNjVGK0pXRER1YTR2VkRFWFQxeUEKuHb44CERXxtdCg2Ijq6wm+et/02MuRV8\nI/gjmedFyhEh6npWdfd6jWAy/DnQf63B73MAyvRdQ56sHeGboeR1dA==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age17d4qt0n9edq57tgcqyk8eu5mrendl59yt6z2y3a4vkq7el8krqtq6lq28g"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBlenh2QjVpMnRac1pZZ1o5\nWi9TRzJEUkNBU0J2VVROQWRyTm1ydzVHY3dJCmJkUTUxOFZRc3dQay9FdnBNUFU3\ncVV2UDMwVU94WkdJVnlWWFRvL09qSzgKLS0tIERaMXNDT2IyTXFZTG9WSmcrRS9D\nU045ZnRpQ20wdWlyNDhjbnFkNEZneXcKfhWIu9EkAZjbT9FHEsUB+mU/x7QeCKLu\n+PB6Hml/bBxCeJbweE9kJ4mTnuWdp1l7hsTWbE32VyWZsOak4HPKhg==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1ez6597tgxg7xxpm6lqv30z82sa97c04afq4wlmw8qspm8pq4m33s86fxz7"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIGtUcEhUZkxj\nRHd3N01jR0FXamIvK3NtMmdhVzNwUjhDN2IyS0pWWnBPUlUgQVEgd0l6SlBCVW1v\neDl5N0lHYmVrajZzVzVTYjd4WVdNVjZoZVlkUEtmVXlMdyBIdmtoczF0dmhxL1py\nS1hsc0ErckdoVVB0bE02RGdCNW5raERXT1ZJMTkzNjRGNHd2T3ZSTVYrKzZlbEll\nVTZKc2JVN1B2SzRuNkpaekhwSWJQaFZVQQp6VzdQck9pTldnZk9PSFUybWNPVlFn\nUHRTTlhtd2RsdlpiVnZGem5rK1FrCi0tLSBMMzVxdzNIMDRMY0JrRU9nM3FodFBo\nK3l4UXprVjNZWWhrRHRGdmZvcjBBCl1WMva0T3coYshnotC8epT3i80DiKkycodn\nCpEWZCjaYXBzWH3gM4uo2s17u80c6LhOwNolQCUWZZ/kAXNDpsw=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpf43tgcfjm048lsqskvq34w2t4uvrm5qy6m2eg6zjj82ctca8wctgpczxvj0q4y6337uhvsxdh5j86k9h9ymautpvv2759ucwnef75ez7pa7fpkddklp40mxk2tedsp74359g0kefn5rsq0x0yss6cu4yd0h06up0rp08t6yc4l0hfa9y8jn5fkx6nk0hjhz06ykwv0fyxe7z42q683jy0"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIFpZWE9VSHg3\nVkJXc3pRcml3Wm1XNmFHUi9VeDd5YUlxWFBuWklyUFVQa00gQVEgZlFBRFNyWkNS\nRDJQaUJ3WWowTEcwaTk0Z0tiRHpQNmhkMTJZUlZHbHlEMCBtMzE5bzVQb1JmZkpy\nY0orbEs2RzBSVXA3UmZYZkRRanNnc2pHSnJjK1pLVmZOWGR4d0IwZjh1YXlkakRx\nTm5EMXR3ZjNHWGl0Ty8rcHpQbkcxRTZmZwozQkNrNWYwaVZCQU9sQlRzNVkxeUx6\nTzlkMGZKVDd3Z1RNWXhhWWRRN0lRCi0tLSBRVXhlVjRKb1U2ZEdSbUhYTy9ZcEZ0\nRWM2Nk1tdUoyYjV5OHZ5Y3c4SXpRCqhkbaMYb9Op4RJRc8ux7ZAgg6jV37RYcdnN\n6qgwjojwZTlgdeed7VYrwAFTgcuwyaa6UzZUOKaBXXZMwyhIL4E=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqprw0vfpc8wzsu78quc777kmee54ln6nnsjrnrhl7nr33eh4kvkksqp05qqxj4kgfzrmrugrsvg7skx6ghh3q9xc0x0agthtkvy25d9eq7eklta5wf7s30hexkuyl5546rdz9ffa5tawlp5yweqkgccntw0ny540n2am3cqw3luhxkfmrp63kwr6mwplhr9u26wll48x0n3k5f60c7hg9a3"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIDB6dC91OWVE\nU3lDUGtMQmxmejhoNUg1c1VCUzU4SXNhVHU5ZVZuV1NsblEgQVEgZUh4S2o1R2RE\nV0svbnErTmxodXE2bUxJK3lla2lvajB3OXVwZHJtcHU5dyBKU3I4WFJnK3BOQXl0\nZDh5NTB5ZFlteFJIM2FVTVp5cmNyRXZqL1V0c0l6L0tSb0c5ZU9jbmRXMTIwb2c1\nQjZsREgzWUxaOXBUd2pQK2NncDZuUmZkZwpSQVN1ZnBqUnVjd0M4ZjhPYW5Pa1h0\nK251alVETjRvMFUvWEFGVHVhTHA4Ci0tLSB3V1pDenB3SzZKUmI3ZExaU3hhdjdj\nNTBnc2lsZFdPMUhVbkRaWlVFRkVjChYRZ7Upre1IslIhjkE5i9n5AtZOTkYGjU/W\nJu4mHd23pG9wZjo+93OvQjx4MAQGkB6r3wrmBH+rkjATzEKvR5A=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpyewum3q8dfcumfgec8nn958aec9f4q9aqy0k06kw5kq27d6fdqdgp0p7y4ru3n5xk90u747xevxa2af3v37e85j9g3axrmw5hdwdfh0wz22hut5vrafxsx26a7vh8fjwkymz3ramfgvvu4detztu075kmpr8l9ydqda0rnjwatdwmfgswg849p37astvld98s3nleeq575azlwc2hhpuh"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBhbEVONUxLQThOM2VVRGxZ\nVFp3UzBBRGcyRmFQNG8yU1g4Mkp3U2cvY1drCmE2T3JDZGd2VG5zcWFZeGJpZnZU\ncDZSaUZmMDJjVXZpbU9yZXRsekVicXcKLS0tIDdqTXV3WmFydzdEWEt5aUpHcy92\nWkg4dXBwR2lvSWEwT1RveTg4UXZXTU0KkzIRQhcUhnwVZRvY4Kn2L/FAxcu1iHyH\nf04x+nrGZ/MFtAxXaN31ggl2b0AuVz7HB/916lZwT4cnw2Zr1GzoKw==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1hlzrpqqgndcthq5m5yj9egfgyet2fzrxwa6ynjzwx2r22uy6m3hqr3rd06"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBNZy9pZHlUZmMzeEVBcW1w\ndzdQb2JkSG1pL1ZDaUlMNys2ekw3Y3hqeG1vCjBVTHZsVDA2VmNpZ1VPVkJEZHBm\neUtGUUJ6QXl0cEYxWXpDaGVRSlNvdEkKLS0tIGc5NzZqQVZKWXk2dTRLNjVMZmJ1\nbnpwWENZbWswanUxQ1dIYUl6ZzRlUlEKv4q4Ue3MnOKBu6FqZwZG5yV47kePFoku\nMUZutPuE/QeMBt+9lPXU7qC4yAA4Yno9Xe358daaKT+YrXYldpszaA==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1sg0rvgyetdcqw7j2x983fh69kdkvqsngpe5x36e5920qa7fze3cqhj4wgx"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA3c1Nqd2Y3WWVKUnhGaW1w\ndUJwSHZyTWkrL24rQ202Wm0yR3N1RHI1RURBCkRjT3lFSzBKU3BxdHliWkUzWC9i\nRkFvU2oxNXpMeUZzWHpUOTNJczZRa1UKLS0tIGlidmxjS1M5ZVZYUG5DUHVRVGUv\nZ2JiWjU4ODl5K2dHNWZpdWwrWW1lVG8K2Dc5gElpgou3NNFJE+pq76sOaIOhS8/h\ndlS4rVbzfetDP2pvLbvvfmcmXIQsjwXZW/HvQMS6fg026saqeTudzw==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1swlyyk2rzvevqawyeekv75nx2dz34zpe3xqhkqme26gcgeavy4dqrfpcd8"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0L0NlU3NsZHhHbUZ2YkhG\nNXNZbFZjaVdwdTBoOFRzYi90Y0srT0YyN3o0ClhIT3QzT0FIM2gzT3d1Tml0R1k0\ndzJhbmkweU5aTFVxaXhBUmNIdlRLVmsKLS0tIC9yaG8rczI0U0FBeHkvRW50ZjRG\nbDQ2a2FwY3FMOExwRTdVTHRTRm00emsK2NYzZfCgKqPsuzEAwNKgB+eth9re3EEq\nBdp0xSV1SRAOcVxudMSBHIxnPpt6vAhfk0ffvO2Ed3+lxRWfBMK8qw==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1vphy2sr6uw4ptsua3gh9khrm2cqyt65t46tusmt44z98qa7q6ymq6prrdl"
}
],
"lastmodified": "2026-08-12T08:44:45Z",
"mac": "ENC[AES256_GCM,data:Hrzq7ZB16pMOVO1QsUour34Gs47OF0LBu0w4CTu2c4bfWzabhI2WFsqs9g/bvIl5fcRZaIBQS3/fM8lDsqrGHbQmFXpg+YzOHI9Mbxi2IcY8rZihwcRW7Ob5T0gCQ1j08SggnHl6NhWi/y+br3h0iOdNjYvboUaaBVqUd2AGx9w=,iv:TqvtOV4wJJW94/JMuWk0Ew12YcALnmuWTdEyB1eIF7w=,tag:SVNFwd8/uKrJaKBciUhLJw==,type:str]",
"version": "3.13.1"
}
}
@@ -0,0 +1 @@
../../../../../../sops/machines/stellio
@@ -0,0 +1,46 @@
{
"data": "ENC[AES256_GCM,data:lRUOkjvYcibH7aK8h2jCS1jrUU6I+gMTp9eDZo7Kxz5XQTQgdjjOByh3fKSGLsvGsHJJC0K2tx2NvpzKaEUBeRWrAhjIoekfvG8A3NCg48bCHsDbUqTDQt0Rn1MgcOza,iv:vWy/VuQV2wGqm8/NF+WapmM6Q3aEAvHOFY8bFibgrpw=,tag:p4nlnbsUHo5+9HAYGG2cOA==,type:str]",
"sops": {
"age": [
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA0enRiRi9sbTZIaTltMm5v\nT0xFWDRKNjFjN1NMVWFwNEpzcWdzaGFwb2dFCmtyZldmTHJ4QzQ2emlQckNzdU50\nN253UVpUWEh3R0tYSmNWZE80S3dPNDgKLS0tIFlSV1AwOHpUODFVb1VNZVJ1TjFP\ndHQydVIxQU5aQUcxTk5OQS9WK3ZyN3cKDfIzALhtS86sPTFdJNmvjWFsIvh84aKN\nYNI5piyIyYNs+w61H5FdPcQ06NUBFlXGqNqFvNo1e0Wmt3Zf3d7V0A==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age17d4qt0n9edq57tgcqyk8eu5mrendl59yt6z2y3a4vkq7el8krqtq6lq28g"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB3eHU3V0dmR2pSdHorWlFj\naVhCV014Qnova1dKOXl4eU1Qbit3dEVOVVg0CjJzcVZBcG5wdmVPdEVENEl0dklY\nZnB5dUpHdHdndTZzVVdEMTNCQTIyancKLS0tIDM0bDcxRUFqNTFBTmJTcFFjeXJT\nUWxReDgvRThmV1MxTGZoUUhyblNqWVUKGxET0B455eaCgl6FGc3a8hzAufDPj72T\n4GzuMBbGawCcrtVDjuccjmIxkvzmkrLbIrKJ14CXX5zBbymLfcXboQ==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1ez6597tgxg7xxpm6lqv30z82sa97c04afq4wlmw8qspm8pq4m33s86fxz7"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIGJwdEFYdzhS\nRzl0WnFCWENLTGEvSTVCaFpYRkl5SGozOXVkRDdLYjJwancgQVEgd0l6SlBCVW1v\neDl5N0lHYmVrajZzVzVTYjd4WVdNVjZoZVlkUEtmVXlMdyBIdmtoczF0dmhxL1py\nS1hsc0ErckdoVVB0bE02RGdCNW5raERXT1ZJMTkzNjRGNHd2T3ZSTVYrKzZlbEll\nVTZKc2JVN1B2SzRuNkpaekhwSWJQaFZVQQozcW4wRnErZTZqbHpGM28wcmU3QTNN\nVk1GZGpoRXlrSFY3UVNYd0E4RFVJCi0tLSB1bFhjd2pDQllxSVZMdEJNRWttYytE\nU0dBdXY3V0Q0YWpNQlNPbzBHUUJjCucpoaZDC32yJDMU07jESuKypNOPVBL2oZ+i\ntS0wREGAdYmU2ElkR5taHUP5itFsD4Ta7O+GycVvdrUYKQB2WJk=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpf43tgcfjm048lsqskvq34w2t4uvrm5qy6m2eg6zjj82ctca8wctgpczxvj0q4y6337uhvsxdh5j86k9h9ymautpvv2759ucwnef75ez7pa7fpkddklp40mxk2tedsp74359g0kefn5rsq0x0yss6cu4yd0h06up0rp08t6yc4l0hfa9y8jn5fkx6nk0hjhz06ykwv0fyxe7z42q683jy0"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIFM5TXNldnQ3\ncHE5NVR4Ulp5NytXdnlMdmVjTHNwcVdEUTFrWmRCZ3lLeHcgQVEgZlFBRFNyWkNS\nRDJQaUJ3WWowTEcwaTk0Z0tiRHpQNmhkMTJZUlZHbHlEMCBtMzE5bzVQb1JmZkpy\nY0orbEs2RzBSVXA3UmZYZkRRanNnc2pHSnJjK1pLVmZOWGR4d0IwZjh1YXlkakRx\nTm5EMXR3ZjNHWGl0Ty8rcHpQbkcxRTZmZwpZK0FJQm0rV3dCYTBTWGluNGZHcXR4\nNWpPelBRQUZQTncrT2hTSUwrT1I4Ci0tLSAxUVhqYU0ydWgrZXhLTVhONmFmVkJj\nQ013U3lENmZpYklvZ0Vtbm02dWtJCgIm2DOzEzwa5Q4JRea9Dh9aIg7aYOYQPwLk\nWjL/clFL4JMJIfVS/6G6WPlPYDT3Qg50KjxeftczFOkVybacKgg=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqprw0vfpc8wzsu78quc777kmee54ln6nnsjrnrhl7nr33eh4kvkksqp05qqxj4kgfzrmrugrsvg7skx6ghh3q9xc0x0agthtkvy25d9eq7eklta5wf7s30hexkuyl5546rdz9ffa5tawlp5yweqkgccntw0ny540n2am3cqw3luhxkfmrp63kwr6mwplhr9u26wll48x0n3k5f60c7hg9a3"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIG9EUlJwUnlx\nSVI2U2J0UERoRi9kQ3hIZ2FmZEhjdy9BWUFLN09LMTNteU0gQVEgZUh4S2o1R2RE\nV0svbnErTmxodXE2bUxJK3lla2lvajB3OXVwZHJtcHU5dyBKU3I4WFJnK3BOQXl0\nZDh5NTB5ZFlteFJIM2FVTVp5cmNyRXZqL1V0c0l6L0tSb0c5ZU9jbmRXMTIwb2c1\nQjZsREgzWUxaOXBUd2pQK2NncDZuUmZkZwphKzNaN3FBUVNkWGR5eDB5WFJIb3h2\nVVo0ZVc5S3N1dzRoZTg4bU56Ry8wCi0tLSBwVHVDam5KWkNJVzBzSnlGcDg5SGp1\naDNUMFIzR0taRlYvdkpVdzVGM3ZZCor6Yn7gAMlCCUy3L095K51W6KFAS4FiBm1b\nIPle3ok6No6nopLqXa23b3O9rZbTxJqlWoDx6M9He1uucpifCF0=\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1fido2-hmac1qqpyewum3q8dfcumfgec8nn958aec9f4q9aqy0k06kw5kq27d6fdqdgp0p7y4ru3n5xk90u747xevxa2af3v37e85j9g3axrmw5hdwdfh0wz22hut5vrafxsx26a7vh8fjwkymz3ramfgvvu4detztu075kmpr8l9ydqda0rnjwatdwmfgswg849p37astvld98s3nleeq575azlwc2hhpuh"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB2aXpmK3JMZmRRWDFYSVRO\nV0hicU9EcGExaXQvVUhNUXR0T0dwR1J3NGw0CnNTNmpaNWZGM0JaM3FGVlpYMGRy\nQ2VoWkZxSU5FQTUrRGdqd3drcTBqOUEKLS0tIG9hNEp2bVprN2RtVlRaNVpQbUZI\nNmZoVE9zK2ZIbGJxVE5vVHFXK1RoeDAKiFuxwE5Z1vwar/wGWkkTRLlDYFojrOU1\n2e2XuGKB5sgnNEuIJbczKLKKYWI1pjf7qhEUch7xP1eHf5PtyU6VXA==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1hlzrpqqgndcthq5m5yj9egfgyet2fzrxwa6ynjzwx2r22uy6m3hqr3rd06"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBZMFg0emNQM3lWbXZhTFE2\nRC96V282aU83Q3kwczN0K2l1UlRGUGVkTFRjCkZjRlhoOFI5MFFSVmdYUUZBY1F1\nWjZMR3pOakdTbWpuUnp0RXpBV254Mm8KLS0tIFkzTUVGSG1JWkdSQm03M0QrMERn\namd6d0lZSmJYNmdXdUVLUjNWNHNVVGMK+Qn2Pni+awfsylxXxn/s+iE1/G/w2GBE\n2EV2y9E2n3UG9RtKACSwSi1BoUXm+PYFewEwu5SI6h3LEH7DxTjI+Q==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1sg0rvgyetdcqw7j2x983fh69kdkvqsngpe5x36e5920qa7fze3cqhj4wgx"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBRakdtaXNyNm4rZkxHdll4\nZVZ5d3JBeldGWHZOMUsxbmhRYktUL1c2MmgwCkM3Q0NsTnEvVFpIMzh5L0hPWVd0\nNG9ka3VvekJIMUdPWlZ1QWFtYlJOQWMKLS0tIE9PMDRyR3pPaFRkM2VOTXczYkRy\neXZFNjd4NW9yWUw0Z3ZBeUJxOVNBbzAKLrgbg0y3Q5DnbfAJEFSaGPJL2LQvVSpA\nKHYfA5LHFj3vgPwJjFwm0lYram+2qVvAO2p7hF5nmrVBTbcWRmN6Fw==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1swlyyk2rzvevqawyeekv75nx2dz34zpe3xqhkqme26gcgeavy4dqrfpcd8"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB2WnB6em56T2ZDOHFaWS9Z\nZHVUbmxoL1V3WkF2NFRBVC96UUVjNWdmZ1dZCnQ2dGwrOFRyWnlJalJwZXB6cXlU\nZlVpWXdncndVemM1eHMrZFp3VlFqaUUKLS0tIFlWSzg4NjA0UCtYMTR6amt3dkc0\nWjdhdm9UUnIzRFhDQWgyMUNKMklOT2MK2U7E6IznrOD/+2xT2saKr1d0dJujiNkt\nbXsIspGQ8BhaqtClailNR3blgSFM+phikbh3AYqkSXB8wbZDXCuzaw==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1vphy2sr6uw4ptsua3gh9khrm2cqyt65t46tusmt44z98qa7q6ymq6prrdl"
}
],
"lastmodified": "2026-08-12T08:44:45Z",
"mac": "ENC[AES256_GCM,data:MlYlbBDwvR4ykN2Q+V24mIYMxVHep/QNRl4jgPSJeYPGVw4+NGtXtflqZJWW7W1A6S3Gzcm8IcEOidewQDHzkfeREvrMeszQA5rC654bxLKHVLYGeCnOSiZoStyD28kf38ziK1oZwuYjFQkl5oIsJv+w4W1g5tIxM019yB7aYM4=,iv:3xrhgAATofjpnr/2goOxtau4Ue9p4V5v1NxnNnuaG9k=,tag:Olcd7P7U73TBeWg+NQUt0w==,type:str]",
"version": "3.13.1"
}
}
Loaded 100 of 143 files, more files were not shown because too many files have changed in this diff. Show more