46 Commits

Author SHA1 Message Date
6a4eeeb34b clanService/phonebox: default ata-ethernet-iface is 2025-12-05 14:51:05 +07:00
701f815a01 phonebox: cleanup vars 2025-12-05 14:31:00 +07:00
188c893e97 phone number scheme change to 2 digits prefix and 2 digits local 2025-12-05 14:14:43 +07:00
3a4253cb67 clanService/phonebox: phone and fax network built on yggdrasil with predefine number 2025-12-05 12:12:01 +07:00
c9ec7371f2 inventory yggdrasil -> yggdrasil-phone-network 2025-12-05 11:27:14 +07:00
39a277a075 use clan-core yggdrasil 2025-12-05 11:22:05 +07:00
79cad87f43 bump clan-core 2025-12-05 10:35:41 +07:00
6312ae3587 bump clan-core 2025-12-05 10:27:27 +07:00
b6297c2d8e rm clanService/asterisk 2025-12-04 17:30:57 +07:00
7067fd43c4 bump clan-core 2025-12-04 10:00:55 +07:00
36ff92a984 nix fmt 2025-12-04 09:57:07 +07:00
62e4ea61e0 almach machine 2025-12-03 14:11:42 +07:00
bba1858c6a mirach machine 2025-12-03 14:01:36 +07:00
58bd02575f alpheratz machine 2025-12-03 13:40:18 +07:00
5ecff1bc9e bump clan-core 2025-12-03 09:58:39 +07:00
7a381a310e tor connection 2025-11-28 14:55:21 +07:00
36c31507e2 Update vars via generator tor_tor for machine vega 2025-11-28 14:54:35 +07:00
bfea371501 Update vars via generator tor_tor for machine sirius 2025-11-28 14:54:32 +07:00
ff0bc698d4 Update vars via generator tor_tor for machine rigel 2025-11-28 14:54:29 +07:00
11c109970a Update vars via generator tor_tor for machine ramus 2025-11-28 14:54:26 +07:00
ad95a8710c Update vars via generator tor_tor for machine b4l 2025-11-28 14:54:23 +07:00
e6760d320d ramus machine 2025-11-26 14:01:11 +07:00
bfeea4156b disappearing default route is fixed by a hacky way 2025-11-21 16:53:55 +07:00
3aa93c1333 nameservers whitehouse 2025-11-18 13:58:59 +07:00
b541e9ff4c Update vars via generator state-version for machine rigel 2025-11-10 14:48:37 +07:00
bdf1e3e5bc Update vars via generator state-version for machine b4l 2025-11-10 14:48:37 +07:00
ab88d74226 sirius WhiteHouse NAS 2025-11-10 14:47:09 +07:00
162707546c whitehouse router: add vlan on wan interface 2025-11-07 15:04:26 +07:00
2c9592c542 more packages on common 2025-11-06 15:57:01 +07:00
0bb6314a03 Update vars via generator state-version for machine vega 2025-11-05 16:22:09 +07:00
13df0a8421 common nixos module 2025-11-05 16:21:50 +07:00
4259d8014e use upstream clan testModule 2025-10-31 13:53:16 +07:00
71a3ca375f nixpkgs go back to rev d7f52a7a640bc54c7bb414cca603835bf8dd4b10 since the new one has issue with clan tests 2025-10-31 13:52:52 +07:00
891504f173 rename checks services 2025-10-30 12:03:24 +07:00
5ffbe0ed9b bump clan-core, nixpkgs 2025-10-30 11:59:22 +07:00
7115a93a0b clanService asterisk 2025-10-22 16:40:59 +07:00
b5f3adacd8 clanService yggdrasil add vars yggdrasil/yggdrasil-subnet 2025-10-21 15:55:18 +07:00
2eb52251cc clanService yggdrasil 2025-10-17 16:58:43 +07:00
be25560858 WhiteHouse router configuration 2025-10-16 14:53:41 +07:00
e4bf326191 add Alex's laptop to networks 2025-10-10 15:38:28 +07:00
04fafa32d3 update kurogeek thinkpad zerotier id 2025-10-09 16:42:23 +07:00
ed4e045ffc rm unused args 2025-09-28 13:30:10 +07:00
fd6edd83c2 machines are accessed by zerotier ip 2025-09-28 13:21:46 +07:00
65faa70fa3 no nextcloud on vega 2025-09-28 12:45:29 +07:00
377b63437c no write permission on GLOM samba 2025-09-26 20:26:02 +07:00
43e8252459 samba for vega 2025-09-26 16:46:00 +07:00
302 changed files with 23036 additions and 97 deletions

2
.gitignore vendored
View File

@@ -2,4 +2,4 @@
# Ignore build outputs from performing a nix-build or `nix build` command # Ignore build outputs from performing a nix-build or `nix build` command
result result
result-* result-*
run-vm-*

73
flake.lock generated
View File

@@ -20,11 +20,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1754535625, "lastModified": 1764792743,
"narHash": "sha256-RdT3/DskBjwx74cvHJHb/mLSO2XeSHitSYViNmYGU/k=", "narHash": "sha256-MbbiNG/bhqe+4z7ml8TefIs4swSonmiV0CimCntXuCg=",
"ref": "refs/heads/main", "ref": "refs/heads/main",
"rev": "f69e28a1333527cdbadb233966a7e19d4b35a1a3", "rev": "ddc0f9fabf33ad000676a33e97be6b5df12a4560",
"revCount": 8886, "revCount": 11417,
"type": "git", "type": "git",
"url": "https://git.clan.lol/clan/clan-core" "url": "https://git.clan.lol/clan/clan-core"
}, },
@@ -49,11 +49,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1753067306, "lastModified": 1762942435,
"narHash": "sha256-jyoEbaXa8/MwVQ+PajUdT63y3gYhgD9o7snO/SLaikw=", "narHash": "sha256-zIWGs5FIytTtJN+dhDb8Yx+q4TQI/yczuL539yVcyPE=",
"rev": "18dfd42bdb2cfff510b8c74206005f733e38d8b9", "rev": "0ee328404b12c65e8106bde9e9fab8abf4ecada4",
"type": "tarball", "type": "tarball",
"url": "https://git.clan.lol/api/v1/repos/clan/data-mesher/archive/18dfd42bdb2cfff510b8c74206005f733e38d8b9.tar.gz" "url": "https://git.clan.lol/api/v1/repos/clan/data-mesher/archive/0ee328404b12c65e8106bde9e9fab8abf4ecada4.tar.gz"
}, },
"original": { "original": {
"type": "tarball", "type": "tarball",
@@ -88,11 +88,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1753140376, "lastModified": 1764627417,
"narHash": "sha256-7lrVrE0jSvZHrxEzvnfHFE/Wkk9DDqb+mYCodI5uuB8=", "narHash": "sha256-D6xc3Rl8Ab6wucJWdvjNsGYGSxNjQHzRc2EZ6eeQ6l4=",
"owner": "nix-community", "owner": "nix-community",
"repo": "disko", "repo": "disko",
"rev": "545aba02960caa78a31bd9a8709a0ad4b6320a5c", "rev": "5a88a6eceb8fd732b983e72b732f6f4b8269bef3",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -136,6 +136,24 @@
"type": "github" "type": "github"
} }
}, },
"liminix": {
"flake": false,
"locked": {
"lastModified": 1760426231,
"narHash": "sha256-r8c5PKtsxAvtQ/k17GH+WNvP47Lr+AbExLMPdLtvAKE=",
"ref": "refs/heads/fix-gl-ar750",
"rev": "3f1f7c08d440130cce9262a93ce78ed7969d93cd",
"revCount": 1574,
"type": "git",
"url": "https://git.b4l.co.th/newedge/liminix"
},
"original": {
"ref": "refs/heads/fix-gl-ar750",
"rev": "3f1f7c08d440130cce9262a93ce78ed7969d93cd",
"type": "git",
"url": "https://git.b4l.co.th/newedge/liminix"
}
},
"nix-darwin": { "nix-darwin": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@@ -144,11 +162,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1751313918, "lastModified": 1764161084,
"narHash": "sha256-HsJM3XLa43WpG+665aGEh8iS8AfEwOIQWk3Mke3e7nk=", "narHash": "sha256-HN84sByg9FhJnojkGGDSrcjcbeioFWoNXfuyYfJ1kBE=",
"owner": "nix-darwin", "owner": "nix-darwin",
"repo": "nix-darwin", "repo": "nix-darwin",
"rev": "e04a388232d9a6ba56967ce5b53a8a6f713cdfcf", "rev": "e95de00a471d07435e0527ff4db092c84998698e",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -159,11 +177,11 @@
}, },
"nix-select": { "nix-select": {
"locked": { "locked": {
"lastModified": 1745005516, "lastModified": 1763303120,
"narHash": "sha256-IVaoOGDIvAa/8I0sdiiZuKptDldrkDWUNf/+ezIRhyc=", "narHash": "sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=",
"rev": "69d8bf596194c5c35a4e90dd02c52aa530caddf8", "rev": "3d1e3860bef36857a01a2ddecba7cdb0a14c35a9",
"type": "tarball", "type": "tarball",
"url": "https://git.clan.lol/api/v1/repos/clan/nix-select/archive/69d8bf596194c5c35a4e90dd02c52aa530caddf8.tar.gz" "url": "https://git.clan.lol/api/v1/repos/clan/nix-select/archive/3d1e3860bef36857a01a2ddecba7cdb0a14c35a9.tar.gz"
}, },
"original": { "original": {
"type": "tarball", "type": "tarball",
@@ -172,11 +190,11 @@
}, },
"nixos-facter-modules": { "nixos-facter-modules": {
"locked": { "locked": {
"lastModified": 1750412875, "lastModified": 1764252389,
"narHash": "sha256-uP9Xxw5XcFwjX9lNoYRpybOnIIe1BHfZu5vJnnPg3Jc=", "narHash": "sha256-3bbuneTKZBkYXlm0bE36kUjiDsasoIC1GWBw/UEJ9T4=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nixos-facter-modules", "repo": "nixos-facter-modules",
"rev": "14df13c84552a7d1f33c1cd18336128fbc43f920", "rev": "5ea68886d95218646d11d3551a476d458df00778",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -187,11 +205,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1754278406, "lastModified": 1761656231,
"narHash": "sha256-jvIQTMN5EzoOP5RaGztpVese8a3wqy0M/h6tNzycW28=", "narHash": "sha256-krgZxGAIIIKFJS+UB0l8do3sYUDWJc75M72tepmVMzE=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "6a489c9482ca676ce23c0bcd7f2e1795383325fa", "rev": "d7f52a7a640bc54c7bb414cca603835bf8dd4b10",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -207,6 +225,7 @@
"devshell": "devshell", "devshell": "devshell",
"flake-parts": "flake-parts", "flake-parts": "flake-parts",
"import-tree": "import-tree", "import-tree": "import-tree",
"liminix": "liminix",
"nixpkgs": "nixpkgs", "nixpkgs": "nixpkgs",
"treefmt-nix": "treefmt-nix" "treefmt-nix": "treefmt-nix"
} }
@@ -219,11 +238,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1754328224, "lastModified": 1764483358,
"narHash": "sha256-glPK8DF329/dXtosV7YSzRlF4n35WDjaVwdOMEoEXHA=", "narHash": "sha256-EyyvCzXoHrbL467YSsQBTWWg4sR96MH1sPpKoSOelB4=",
"owner": "Mic92", "owner": "Mic92",
"repo": "sops-nix", "repo": "sops-nix",
"rev": "49021900e69812ba7ddb9e40f9170218a7eca9f4", "rev": "5aca6ff67264321d47856a2ed183729271107c9c",
"type": "github" "type": "github"
}, },
"original": { "original": {

View File

@@ -21,6 +21,10 @@
url = "github:numtide/treefmt-nix"; url = "github:numtide/treefmt-nix";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
liminix = {
url = "git+https://git.b4l.co.th/newedge/liminix?ref=refs/heads/fix-gl-ar750&rev=3f1f7c08d440130cce9262a93ce78ed7969d93cd";
flake = false;
};
}; };
outputs = outputs =
{ {
@@ -38,8 +42,10 @@
./shell.nix ./shell.nix
./machines ./machines
./routers
./inventories ./inventories
./modules/clan/flake-module.nix ./modules/clan/flake-module.nix
./modules/nixos/flake-module.nix
]; ];
} }
); );

View File

@@ -1,22 +1,21 @@
{
inputs,
self,
lib,
pkgs,
...
}:
{ {
clan = { clan = {
inventory = { inventory = {
machines = {
rigel.deploy.targetHost = "root@rigel.local";
vega.deploy.targetHost = "root@vega.local";
};
tags = { tags = {
glom = [ "vega" ]; glom = [
b4l = [ "rigel" ]; "vega"
"ramus"
];
w = [ "sirius" ];
b4l = [
"rigel"
"neptune"
];
phonebox = [
"neptune"
"rigel"
];
}; };
instances = { instances = {
@@ -42,6 +41,28 @@
}; };
}; };
tor = {
module = {
name = "tor";
input = "clan-core";
};
roles.server.tags."nixos" = { };
};
w-network = {
module = {
name = "zerotier";
input = "clan-core";
};
roles.controller.machines."sirius" = {
settings.allowedIps = [
#kurogeek
"fdfe:7bf:a795:4524:4c99:932b:d36d:b8cc"
];
};
roles.peer.tags.w = { };
};
glom-network = { glom-network = {
module = { module = {
name = "zerotier"; name = "zerotier";
@@ -60,6 +81,28 @@
roles.peer.tags.b4l = { }; roles.peer.tags.b4l = { };
}; };
yggdrasil-phone-network = {
module = {
name = "yggdrasil";
input = "clan-core";
};
roles.default.tags."phonebox" = { };
roles.default.settings.extraPeers = [
"tls://ygg.jjolly.dev:3443"
"tls://[2602:fc24:18:7a42::1]:993"
"tcp://leo.node.3dt.net:9002"
"tcp://ygg-kcmo.incognet.io:8883"
];
};
phonebox = {
module = {
name = "phonebox";
input = "self";
};
roles.default.tags."phonebox" = { };
};
pocket-id = { pocket-id = {
module = { module = {
name = "pocket-id"; name = "pocket-id";
@@ -73,7 +116,6 @@
input = "self"; input = "self";
}; };
roles.default.machines.b4l = { }; roles.default.machines.b4l = { };
roles.default.machines.vega = { };
}; };
stirling-pdf = { stirling-pdf = {
module = { module = {

View File

@@ -1 +1,19 @@
{} {
"machines": {
"ramus": {
"installedAt": 1764139649
},
"alpheratz": {
"installedAt": 1764741499
},
"mirach": {
"installedAt": 1764744666
},
"almach": {
"installedAt": 1764745787
},
"neptune": {
"installedAt": 1762147067
}
}
}

View File

@@ -0,0 +1,13 @@
{ config, ... }:
{
nixpkgs.hostPlatform = {
system = "x86_64-linux";
};
system.stateVersion = "25.11";
clan.core.sops.defaultGroups = [ "admins" ];
# clan.core.networking.targetHost = "root@";
clan.meta.name = "almach";
clan.meta.description = "Radxa X4 SBC board for one of w phone network.";
}

90
machines/almach/disko.nix Normal file
View File

@@ -0,0 +1,90 @@
{ ... }:
let
hashDisk = disk: "os-${builtins.substring 0 5 (builtins.hashString "sha256" disk)}";
os = "/dev/disk/by-id/mmc-CUTB42_0x95d64f17";
in
{
boot.loader = {
systemd-boot = {
enable = true;
};
efi = {
canTouchEfiVariables = true;
};
};
disko.devices = {
disk = {
"os-${hashDisk os}" = {
type = "disk";
device = os;
content = {
type = "gpt";
partitions = {
ESP = {
size = "1G";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
mountOptions = [ "nofail" ];
};
};
system = {
size = "100%";
content = {
type = "zfs";
pool = "zroot";
};
};
swap = {
size = "4G";
content = {
type = "swap";
};
};
};
};
};
};
zpool = {
zroot = {
type = "zpool";
rootFsOptions = {
mountpoint = "none";
compression = "lz4";
acltype = "posixacl";
xattr = "sa";
"com.sun:auto-snapshot" = "true";
};
options.ashift = "12";
datasets = {
"root" = {
type = "zfs_fs";
options.mountpoint = "none";
};
"root/nixos" = {
type = "zfs_fs";
options.mountpoint = "/";
mountpoint = "/";
};
"root/home" = {
type = "zfs_fs";
options.mountpoint = "/home";
mountpoint = "/home";
};
"root/tmp" = {
type = "zfs_fs";
mountpoint = "/tmp";
options = {
mountpoint = "/tmp";
sync = "disabled";
};
};
};
};
};
};
}

3852
machines/almach/facter.json Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,13 @@
{ config, ... }:
{
nixpkgs.hostPlatform = {
system = "x86_64-linux";
};
system.stateVersion = "25.11";
clan.core.sops.defaultGroups = [ "admins" ];
# clan.core.networking.targetHost = "root@";
clan.meta.name = "alpheratz";
clan.meta.description = "Radxa X4 SBC board for one of w phone network.";
}

View File

@@ -0,0 +1,90 @@
{ ... }:
let
hashDisk = disk: "os-${builtins.substring 0 5 (builtins.hashString "sha256" disk)}";
os = "/dev/disk/by-id/mmc-CUTB42_0xaedcfa8b";
in
{
boot.loader = {
systemd-boot = {
enable = true;
};
efi = {
canTouchEfiVariables = true;
};
};
disko.devices = {
disk = {
"os-${hashDisk os}" = {
type = "disk";
device = os;
content = {
type = "gpt";
partitions = {
ESP = {
size = "1G";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
mountOptions = [ "nofail" ];
};
};
system = {
size = "100%";
content = {
type = "zfs";
pool = "zroot";
};
};
swap = {
size = "4G";
content = {
type = "swap";
};
};
};
};
};
};
zpool = {
zroot = {
type = "zpool";
rootFsOptions = {
mountpoint = "none";
compression = "lz4";
acltype = "posixacl";
xattr = "sa";
"com.sun:auto-snapshot" = "true";
};
options.ashift = "12";
datasets = {
"root" = {
type = "zfs_fs";
options.mountpoint = "none";
};
"root/nixos" = {
type = "zfs_fs";
options.mountpoint = "/";
mountpoint = "/";
};
"root/home" = {
type = "zfs_fs";
options.mountpoint = "/home";
mountpoint = "/home";
};
"root/tmp" = {
type = "zfs_fs";
mountpoint = "/tmp";
options = {
mountpoint = "/tmp";
sync = "disabled";
};
};
};
};
};
};
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,13 @@
{ config, ... }:
{
nixpkgs.hostPlatform = {
system = "x86_64-linux";
};
system.stateVersion = "25.11";
clan.core.sops.defaultGroups = [ "admins" ];
# clan.core.networking.targetHost = "root@";
clan.meta.name = "mirach";
clan.meta.description = "Radxa X4 SBC board for one of w phone network.";
}

90
machines/mirach/disko.nix Normal file
View File

@@ -0,0 +1,90 @@
{ ... }:
let
hashDisk = disk: "os-${builtins.substring 0 5 (builtins.hashString "sha256" disk)}";
os = "/dev/disk/by-id/mmc-CUTB42_0x95d64f33";
in
{
boot.loader = {
systemd-boot = {
enable = true;
};
efi = {
canTouchEfiVariables = true;
};
};
disko.devices = {
disk = {
"os-${hashDisk os}" = {
type = "disk";
device = os;
content = {
type = "gpt";
partitions = {
ESP = {
size = "1G";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
mountOptions = [ "nofail" ];
};
};
system = {
size = "100%";
content = {
type = "zfs";
pool = "zroot";
};
};
swap = {
size = "4G";
content = {
type = "swap";
};
};
};
};
};
};
zpool = {
zroot = {
type = "zpool";
rootFsOptions = {
mountpoint = "none";
compression = "lz4";
acltype = "posixacl";
xattr = "sa";
"com.sun:auto-snapshot" = "true";
};
options.ashift = "12";
datasets = {
"root" = {
type = "zfs_fs";
options.mountpoint = "none";
};
"root/nixos" = {
type = "zfs_fs";
options.mountpoint = "/";
mountpoint = "/";
};
"root/home" = {
type = "zfs_fs";
options.mountpoint = "/home";
mountpoint = "/home";
};
"root/tmp" = {
type = "zfs_fs";
mountpoint = "/tmp";
options = {
mountpoint = "/tmp";
sync = "disabled";
};
};
};
};
};
};
}

3852
machines/mirach/facter.json Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,13 @@
{ inputs, config, ... }:
{
nixpkgs.hostPlatform = {
system = "x86_64-linux";
};
system.stateVersion = "25.11";
clan.core.sops.defaultGroups = [ "admins" ];
clan.core.networking.targetHost = "root@[${config.clan.core.vars.generators.zerotier.files.zerotier-ip.value}]";
clan.meta.name = "neptune";
clan.meta.description = "Radxa SBC board for testing.";
}

View File

@@ -0,0 +1,90 @@
{ ... }:
let
hashDisk = disk: "os-${builtins.substring 0 5 (builtins.hashString "sha256" disk)}";
os = "/dev/disk/by-id/mmc-CUTB42_0x9d59499c";
in
{
boot.loader = {
systemd-boot = {
enable = true;
};
efi = {
canTouchEfiVariables = true;
};
};
disko.devices = {
disk = {
"os-${hashDisk os}" = {
type = "disk";
device = os;
content = {
type = "gpt";
partitions = {
ESP = {
size = "1G";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
mountOptions = [ "nofail" ];
};
};
system = {
size = "100%";
content = {
type = "zfs";
pool = "zroot";
};
};
swap = {
size = "16G";
content = {
type = "swap";
};
};
};
};
};
};
zpool = {
zroot = {
type = "zpool";
rootFsOptions = {
mountpoint = "none";
compression = "lz4";
acltype = "posixacl";
xattr = "sa";
"com.sun:auto-snapshot" = "true";
};
options.ashift = "12";
datasets = {
"root" = {
type = "zfs_fs";
options.mountpoint = "none";
};
"root/nixos" = {
type = "zfs_fs";
options.mountpoint = "/";
mountpoint = "/";
};
"root/home" = {
type = "zfs_fs";
options.mountpoint = "/home";
mountpoint = "/home";
};
"root/tmp" = {
type = "zfs_fs";
mountpoint = "/tmp";
options = {
mountpoint = "/tmp";
sync = "disabled";
};
};
};
};
};
};
}

4160
machines/neptune/facter.json Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,15 @@
{ config, ... }:
{
system.stateVersion = "25.11";
nixpkgs.hostPlatform = {
system = "x86_64-linux";
};
clan.meta.name = "ramus";
clan.meta.description = ''
A Hetzner VPS machine own by Alex.
'';
clan.core.sops.defaultGroups = [ "admins" ];
clan.core.networking.targetHost = "root@[${config.clan.core.vars.generators.zerotier.files.zerotier-ip.value}]";
}

84
machines/ramus/disko.nix Normal file
View File

@@ -0,0 +1,84 @@
{ ... }:
let
hashDisk = disk: "os-${builtins.substring 0 5 (builtins.hashString "sha256" disk)}";
os = "/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_107266387";
in
{
boot.loader = {
systemd-boot = {
enable = true;
};
efi = {
canTouchEfiVariables = true;
};
};
disko.devices = {
disk = {
"os-${hashDisk os}" = {
type = "disk";
device = os;
content = {
type = "gpt";
partitions = {
ESP = {
size = "1G";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
mountOptions = [ "nofail" ];
};
};
system = {
size = "100%";
content = {
type = "zfs";
pool = "zroot";
};
};
};
};
};
};
zpool = {
zroot = {
type = "zpool";
rootFsOptions = {
mountpoint = "none";
compression = "lz4";
acltype = "posixacl";
xattr = "sa";
"com.sun:auto-snapshot" = "true";
};
options.ashift = "12";
datasets = {
"root" = {
type = "zfs_fs";
options.mountpoint = "none";
};
"root/nixos" = {
type = "zfs_fs";
options.mountpoint = "/";
mountpoint = "/";
};
"root/home" = {
type = "zfs_fs";
options.mountpoint = "/home";
mountpoint = "/home";
};
"root/tmp" = {
type = "zfs_fs";
mountpoint = "/tmp";
options = {
mountpoint = "/tmp";
sync = "disabled";
};
};
};
};
};
};
}

2799
machines/ramus/facter.json Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,13 +1,16 @@
{ config, ... }:
{ {
imports = [ imports = [
(import ../../lib/auto-accept-zerotier-members.nix { (import ../../lib/auto-accept-zerotier-members.nix {
memberIds = [ memberIds = [
"dbe44c0287" # Alex-gateway "dbe44c0287" # Alex-gateway
"1b495eede9" # kurogeek-thinkpad "b0e0b84fd3" # Alex
"2bd36db8cc" # kurogeek-thinkpad
]; ];
}) })
]; ];
system.stateVersion = "25.11"; system.stateVersion = "25.11";
clan.core.sops.defaultGroups = [ "admins" ]; clan.core.sops.defaultGroups = [ "admins" ];
clan.core.networking.targetHost = "root@[${config.clan.core.vars.generators.zerotier.files.zerotier-ip.value}]";
} }

View File

@@ -0,0 +1,25 @@
{
inputs,
config,
self,
...
}:
{
imports = [
self.nixosModules.common
(inputs.import-tree ./services)
];
clan.core.sops.defaultGroups = [ "admins" ];
clan.core.networking.targetHost = "root@[${config.clan.core.vars.generators.zerotier.files.zerotier-ip.value}]";
nixpkgs.hostPlatform = {
system = "x86_64-linux";
};
networking.fqdn = config.clan.core.vars.generators.vega-internal-domain.files.name.value;
system.stateVersion = "25.11";
}

141
machines/sirius/disko.nix Normal file
View File

@@ -0,0 +1,141 @@
{ lib, ... }:
let
hashDisk = disk: "os-${builtins.substring 0 5 (builtins.hashString "sha256" disk)}";
os = "/dev/disk/by-id/mmc-FIXME";
vdev = [
"/dev/disk/by-id/ata-FIXME"
"/dev/disk/by-id/ata-FIXME"
];
in
{
boot.loader = {
systemd-boot = {
enable = true;
};
efi = {
canTouchEfiVariables = true;
};
};
disko.devices = {
disk = {
"os-${hashDisk os}" = {
type = "disk";
device = os;
content = {
type = "gpt";
partitions = {
ESP = {
size = "1G";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
mountOptions = [ "nofail" ];
};
};
system = {
size = "100%";
content = {
type = "zfs";
pool = "zroot";
};
};
swap = {
size = "16G";
content = {
type = "swap";
};
};
};
};
};
}
// (lib.listToAttrs (
map (disk: {
name = "data-${hashDisk disk}";
value = {
type = "disk";
device = disk;
content = {
type = "zfs";
pool = "zdata";
};
};
}) vdev
));
zpool = {
zroot = {
type = "zpool";
rootFsOptions = {
mountpoint = "none";
compression = "lz4";
acltype = "posixacl";
xattr = "sa";
"com.sun:auto-snapshot" = "true";
};
options.ashift = "12";
datasets = {
"root" = {
type = "zfs_fs";
options.mountpoint = "none";
};
"root/nixos" = {
type = "zfs_fs";
options.mountpoint = "/";
mountpoint = "/";
};
"root/home" = {
type = "zfs_fs";
options.mountpoint = "/home";
mountpoint = "/home";
};
"root/tmp" = {
type = "zfs_fs";
mountpoint = "/tmp";
options = {
mountpoint = "/tmp";
sync = "disabled";
};
};
};
};
zdata = {
type = "zpool";
options.ashift = "12";
rootFsOptions = {
mountpoint = "none";
compression = "lz4";
acltype = "posixacl";
xattr = "sa";
"com.sun:auto-snapshot" = "true";
};
mode = {
topology = {
type = "topology";
vdev = [
{
mode = "mirror";
members = vdev;
}
];
};
};
datasets = {
"nas" = {
type = "zfs_fs";
mountpoint = "/mnt/hdd";
mountOptions = [ "nofail" ];
};
"service-data" = {
type = "zfs_fs";
mountpoint = "/var/lib";
mountOptions = [ "nofail" ];
};
};
};
};
};
}

View File

@@ -0,0 +1,93 @@
{
config,
lib,
...
}:
let
sambaUser = lib.filterAttrs (
name: user: user.isNormalUser && builtins.elem "samba" user.extraGroups
) config.users.users;
sharedFolders = {
WhiteHouse.users = [
"w"
"kurogeek"
"berwn"
];
};
in
{
services.samba = {
enable = true;
openFirewall = true;
settings = {
global = {
security = "user";
workgroup = "WORKGROUP";
"server string" = "WhiteHouse NAS";
interfaces = "eth* en*";
"max log size" = "50";
"dns proxy" = false;
"syslog only" = true;
"map to guest" = "Bad User";
"guest account" = "nobody";
};
}
// lib.mapAttrs (share: opts: {
path = "/mnt/hdd/samba/${share}";
comment = share;
"force user" = share;
"force group" = share;
public = "yes";
"guest ok" = "yes";
"create mask" = "0640";
"directory mask" = "0750";
writable = "no";
browseable = "yes";
printable = "no";
# TODO
# "valid users" = toString opts.users;
}) sharedFolders;
};
users.users = lib.mapAttrs (share: opts: {
isSystemUser = true;
group = share;
}) sharedFolders;
users.groups = lib.mapAttrs (share: opts: { }) sharedFolders;
systemd.services.samba-smbd.postStart =
lib.concatMapStrings (
user:
let
password = config.clan.core.vars.generators."${user}-smb-password".files.password.path;
in
''
mkdir -p /mnt/hdd/samba/${user}
chown ${user}:users /mnt/hdd/samba/${user}
# if a password is unchanged, this will error
(echo $(<${password}); echo $(<${password})) | ${config.services.samba.package}/bin/smbpasswd -s -a ${user}
''
) (lib.attrNames sambaUser)
+ lib.concatMapStrings (share: ''
mkdir -p /mnt/hdd/samba/${share}
chown ${share}:${share} /mnt/hdd/samba/${share}
'') (lib.attrNames sharedFolders);
services.samba-wsdd = {
enable = true;
openFirewall = true;
};
services.avahi = {
publish.enable = true;
publish.userServices = true;
# ^^ Needed to allow samba to automatically register mDNS records (without the need for an `extraServiceFile`
nssmdns4 = true;
# ^^ Not one hundred percent sure if this is needed- if it aint broke, don't fix it
enable = true;
openFirewall = true;
};
}

View File

@@ -1,21 +1,26 @@
{ {
inputs, inputs,
config, config,
self,
... ...
}: }:
{ {
imports = [ imports = [
self.nixosModules.common
(inputs.import-tree ./services) (inputs.import-tree ./services)
(import ../../lib/auto-accept-zerotier-members.nix { (import ../../lib/auto-accept-zerotier-members.nix {
memberIds = [ memberIds = [
"dbe44c0287" # Alex-gateway "dbe44c0287" # Alex-gateway
"1b495eede9" # kurogeek-thinkpad "b0e0b84fd3" # Alex
"2bd36db8cc" # kurogeek-thinkpad
]; ];
}) })
]; ];
clan.core.sops.defaultGroups = [ "admins" ]; clan.core.sops.defaultGroups = [ "admins" ];
clan.core.networking.targetHost = "root@[${config.clan.core.vars.generators.zerotier.files.zerotier-ip.value}]";
nixpkgs.hostPlatform = { nixpkgs.hostPlatform = {
system = "x86_64-linux"; system = "x86_64-linux";

View File

@@ -1,34 +0,0 @@
{ config, pkgs, ... }:
let
# ncDomain = "${config.clan.core.vars.generators.vega-nextcloud.files.subdomain.value}.${config.networking.fqdn}";
ncDomain = "${config.networking.fqdn}";
in
{
clan.core.vars.generators.vega-nextcloud = {
files.subdomain.secret = false;
prompts = {
subdomain = {
persist = true;
type = "line";
description = "Sub-domain for Nextcloud app. Default:(cloud)";
};
};
script = ''cat $prompts/subdomain || echo -n "cloud" > $out/subdomain'';
};
networking.firewall.allowedTCPPorts = [
80
443
];
services.nextcloud = {
hostName = ncDomain;
package = pkgs.nextcloud31;
};
# services.nginx.virtualHosts."${ncDomain}" = {
# # useACMEHost = "${config.networking.fqdn}";
# # forceSSL = true;
# };
}

View File

@@ -0,0 +1,93 @@
{
config,
lib,
...
}:
let
sambaUser = lib.filterAttrs (
name: user: user.isNormalUser && builtins.elem "samba" user.extraGroups
) config.users.users;
sharedFolders = {
GLOM.users = [
"w"
"kurogeek"
"berwn"
];
};
in
{
services.samba = {
enable = true;
openFirewall = true;
settings = {
global = {
security = "user";
workgroup = "WORKGROUP";
"server string" = "Glom Vega";
interfaces = "eth* en*";
"max log size" = "50";
"dns proxy" = false;
"syslog only" = true;
"map to guest" = "Bad User";
"guest account" = "nobody";
};
}
// lib.mapAttrs (share: opts: {
path = "/mnt/hdd/samba/${share}";
comment = share;
"force user" = share;
"force group" = share;
public = "yes";
"guest ok" = "yes";
"create mask" = "0640";
"directory mask" = "0750";
writable = "no";
browseable = "yes";
printable = "no";
# TODO
# "valid users" = toString opts.users;
}) sharedFolders;
};
users.users = lib.mapAttrs (share: opts: {
isSystemUser = true;
group = share;
}) sharedFolders;
users.groups = lib.mapAttrs (share: opts: { }) sharedFolders;
systemd.services.samba-smbd.postStart =
lib.concatMapStrings (
user:
let
password = config.clan.core.vars.generators."${user}-smb-password".files.password.path;
in
''
mkdir -p /mnt/hdd/samba/${user}
chown ${user}:users /mnt/hdd/samba/${user}
# if a password is unchanged, this will error
(echo $(<${password}); echo $(<${password})) | ${config.services.samba.package}/bin/smbpasswd -s -a ${user}
''
) (lib.attrNames sambaUser)
+ lib.concatMapStrings (share: ''
mkdir -p /mnt/hdd/samba/${share}
chown ${share}:${share} /mnt/hdd/samba/${share}
'') (lib.attrNames sharedFolders);
services.samba-wsdd = {
enable = true;
openFirewall = true;
};
services.avahi = {
publish.enable = true;
publish.userServices = true;
# ^^ Needed to allow samba to automatically register mDNS records (without the need for an `extraServiceFile`
nssmdns4 = true;
# ^^ Not one hundred percent sure if this is needed- if it aint broke, don't fix it
enable = true;
openFirewall = true;
};
}

View File

@@ -10,7 +10,7 @@ in
perSystem = perSystem =
{ ... }: { ... }:
{ {
clan.nixosTests.actual-budget = { clan.nixosTests.service-actual-budget = {
imports = [ ./tests/vm/default.nix ]; imports = [ ./tests/vm/default.nix ];
clan.modules."@clan/actual-budget" = module; clan.modules."@clan/actual-budget" = module;

View File

@@ -1,4 +1,7 @@
{ inputs, lib, ... }: {
inputs,
...
}:
{ {
imports = imports =
let let
@@ -16,12 +19,7 @@
# Create import paths for each valid directory # Create import paths for each valid directory
imports = (map (name: ./. + "/${name}/flake-module.nix") validModuleDirs) ++ [ imports = (map (name: ./. + "/${name}/flake-module.nix") validModuleDirs) ++ [
(import (inputs.clan-core + "/lib/flake-parts/clan-nixos-test.nix") { inputs.clan-core.flakeModules.testModule
inherit lib;
flake-parts-lib = inputs.flake-parts.lib;
self = inputs.clan-core;
inputs = inputs.clan-core.clan.self.inputs;
})
]; ];
in in
imports; imports;

View File

@@ -9,7 +9,7 @@ in
perSystem = perSystem =
{ ... }: { ... }:
{ {
clan.nixosTests.grafana = { clan.nixosTests.service-grafana = {
imports = [ ./tests/vm/default.nix ]; imports = [ ./tests/vm/default.nix ];
clan.modules."@clan/grafana" = module; clan.modules."@clan/grafana" = module;

View File

@@ -10,7 +10,7 @@ in
perSystem = perSystem =
{ ... }: { ... }:
{ {
clan.nixosTests.nextcloud = { clan.nixosTests.service-nextcloud = {
imports = [ ./tests/vm/default.nix ]; imports = [ ./tests/vm/default.nix ];
clan.modules."@clan/nextcloud" = module; clan.modules."@clan/nextcloud" = module;

View File

@@ -10,7 +10,7 @@ in
perSystem = perSystem =
{ ... }: { ... }:
{ {
clan.nixosTests.paperless = { clan.nixosTests.service-paperless = {
imports = [ ./tests/vm/default.nix ]; imports = [ ./tests/vm/default.nix ];
clan.modules."@clan/paperless" = module; clan.modules."@clan/paperless" = module;

View File

@@ -0,0 +1,321 @@
{ clanLib, ... }:
{
_class = "clan.service";
manifest.name = "phonebox";
manifest.description = "";
manifest.categories = [ "System" ];
roles.default = {
interface =
{ lib, ... }:
{
options.ata-ethernet-iface = lib.mkOption {
type = lib.types.str;
description = "An Ethernet interface that connect to ATA box.";
default = "enp2s0";
};
};
perInstance =
{
roles,
settings,
...
}:
{
nixosModule =
{
lib,
config,
...
}:
let
user = "asterisk";
rtpPortFrom = 10000;
rtpPortTo = 20000;
ata-interface = settings.ata-ethernet-iface;
genServerSIPEndpoint =
{ hostname, address }:
''
[${hostname}](internal_endpoint)
aors=${hostname}
[${hostname}](ip_auth)
endpoint=${hostname}
match=[${address}]
[${hostname}](dynamiic_aor)
contact=sip:[${address}]
'';
genLocalSIPEndpoint =
{ localNumber }:
''
[${localNumber}](internal_endpoint)
aors=${localNumber}
auth=${localNumber}
[${localNumber}](userpass_auth)
username=${localNumber}
password=${localNumber}
[${localNumber}](dynamiic_aor)
max_contacts=1
'';
genLocalExtenConf =
{ localNumber }:
''
exten => ${localNumber},1,Dial(PJSIP/${localNumber},20)
'';
genExtentConf =
{
prefixNumber,
hostname,
localNumber,
}:
let
replaceWithX =
ln: builtins.concatStringsSep "" (builtins.genList (_: "X") (builtins.stringLength ln));
in
''
exten => _${prefixNumber}${replaceWithX localNumber},1,Dial(PJSIP/''${EXTEN:1}@${hostname},30)
'';
getYggdrasilIP =
machineName:
if config.clan.core.vars.generators.yggdrasil.files.address ? value then
clanLib.getPublicValue {
flake = config.clan.core.settings.directory;
machine = machineName;
generator = "yggdrasil";
file = "address";
default = null;
}
else
throw "clanService/yggdrasil is required";
in
{
clan.core.vars.generators.phonebox = {
files = {
server-prefix-number.secret = false;
ata-local-number.secret = false;
};
prompts = {
server-prefix-number = {
type = "line";
description = "Server prefix number: indicate server to connect to [10XX]";
};
ata-local-number = {
type = "line";
description = "Local suffix number: indicate local number on the server [XX00]";
};
};
script = ''
cat $prompts/server-prefix-number > $out/server-prefix-number
cat $prompts/ata-local-number > $out/ata-local-number
'';
};
networking.interfaces = {
${ata-interface} = {
useDHCP = false;
ipv4.addresses = [
{
address = "192.168.254.1";
prefixLength = 24;
}
];
};
};
services.dnsmasq = {
enable = true;
settings = {
bind-dynamic = true;
listen-address = "192.168.254.1";
# enable-ra = true;
domain-needed = true;
domain = "localhost";
dhcp-range = [
"192.168.254.100,192.168.254.100,255.255.255.0,24h"
];
dhcp-option = [
"3,192.168.254.1"
];
interface = [ ata-interface ];
};
};
services.nginx = {
enable = true;
virtualHosts = {
"_" = {
locations."/" = {
proxyPass = "http://192.168.254.100";
extraConfig = ''
client_max_body_size 100M;
'';
};
};
};
};
networking.firewall.allowedUDPPortRanges = [
{
from = rtpPortFrom;
to = rtpPortTo;
}
];
networking.firewall.allowedUDPPorts = [
53
67
5060
];
networking.firewall.allowedTCPPorts = [
53
];
networking.firewall.interfaces =
let
matchAll = if !config.networking.nftables.enable then "zt+" else "zt*";
in
{
"${matchAll}".allowedTCPPorts = [ 80 ];
};
services.asterisk = {
enable = lib.mkDefault true;
confFiles =
let
machines = lib.attrNames roles.default.machines;
nodes = builtins.foldl' (
nodes: name:
nodes
++ [
{
hostname = name;
address = getYggdrasilIP name;
prefixNumber = clanLib.getPublicValue {
flake = config.clan.core.settings.directory;
machine = name;
generator = "phonebox";
file = "server-prefix-number";
default = null;
};
localNumber = clanLib.getPublicValue {
flake = config.clan.core.settings.directory;
machine = name;
generator = "phonebox";
file = "ata-local-number";
default = null;
};
}
]
) [ ] machines;
in
{
"logger.conf" = ''
[general]
dateformat = %F %T.%3q ; ISO 8601 date format with milliseconds
use_callids = yes
appendhostname = no
queue_log = yes
queue_log_to_file = no
queue_log_name = queue_log
queue_log_realtime_use_gmt = no
rotatestrategy = rotate
exec_after_rotate=gzip -9 $\{filename\}.2
[logfiles]
console => notice,warning,error
security => security
messages => notice,warning,error
full => notice,warning,error,verbose,dtmf,fax
syslog.local0 => notice,warning,error
'';
# Dial plan config
"extensions.conf" =
let
serverConf = builtins.foldl' (
config: node:
config
+ (genExtentConf {
inherit (node) prefixNumber hostname localNumber;
})
) "" nodes;
in
''
[from-internal]
exten => 999,1,Answer()
same => n,Playback(hello-world)
same => n,Hangup()
''
+ (genLocalExtenConf {
localNumber = config.clan.core.vars.generators.phonebox.files.ata-local-number.value;
})
+ serverConf;
"rtp.conf" = ''
[general]
rtpstart=${builtins.toString rtpPortFrom}
rtpend=${builtins.toString rtpPortTo}
'';
"pjsip.conf" =
let
serverConf = builtins.foldl' (
conf: node:
conf
+ (genServerSIPEndpoint {
hostname = node.hostname;
address = node.address;
})
) "" nodes;
in
''
[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0
[transport-udp6]
type=transport
protocol=udp
bind=::
[base_endpoint](!)
type=endpoint
disallow=all
allow=ulaw,alaw,g722,gsm
direct_media=no
[internal_endpoint](!,base_endpoint)
context=from-internal
[userpass_auth](!)
type=auth
auth_type=userpass
[ip_auth](!)
type=identify
endpoint=external
[dynamiic_aor](!)
type=aor
''
+ (genLocalSIPEndpoint {
localNumber = config.clan.core.vars.generators.phonebox.files.ata-local-number.value;
})
+ serverConf;
};
};
};
};
};
}

View File

@@ -0,0 +1,23 @@
{
inputs,
self,
...
}:
let
module = ./default.nix;
in
{
clan.modules = {
phonebox = module;
};
perSystem =
{ ... }:
{
clan.nixosTests.service-phonebox = {
imports = [ ./tests/vm/default.nix ];
_module.args = { inherit self inputs; };
clan.modules."@clan/phonebox" = module;
};
};
}

View File

@@ -0,0 +1,59 @@
{
self,
hostPkgs,
config,
inputs,
lib,
...
}:
{
name = "service-phonebox";
result.update-vars =
let
relativeDir = lib.removePrefix "${self}/" (toString config.clan.directory);
in
hostPkgs.writeShellScriptBin "update-vars" ''
set -x
export PRJ_ROOT=$(git rev-parse --show-toplevel)
${
self.inputs.clan-core.packages.${hostPkgs.system}.clan-cli
}/bin/clan-generate-test-vars $PRJ_ROOT/${relativeDir} ${config.name}
'';
clan = {
directory = ./.;
inventory = {
machines.server = { };
instances = {
yggdrasil = {
module.name = "yggdrasil";
roles.default.machines.server = { };
};
phonebox-test = {
module.name = "@clan/phonebox";
module.input = "self";
roles.default.machines."server".settings = {
ata-ethernet-iface = "enp2s0";
};
};
};
};
};
nodes = {
server = {
services.asterisk = {
};
};
};
testScript = ''
start_all()
server.wait_for_unit("asterisk")
server.succeed("systemctl status asterisk")
'';
}

View File

@@ -0,0 +1,6 @@
[
{
"publickey": "age1fdkan6n20swmut0sa86g5a6gxrj8qj2sgqe8hxtw32c0u9rr4drqlyr5mf",
"type": "age"
}
]

View File

@@ -0,0 +1,14 @@
{
"data": "ENC[AES256_GCM,data:t+zYfcA2f1sdUNBAl+bRGyhPEl5HZFIu+au6heH3+SoHf0zy+Deh25gaVay/oswIg2q806ozjEnTw9q2eaq0VXwMSAWOoTWteI0=,iv:sXoOmfzoCv6GHe21n2Elxr/GTdViI5vfLzMwOLvf1F4=,tag:Fmo9MjEaKV3BehR/bYRdVw==,type:str]",
"sops": {
"age": [
{
"recipient": "age1qm0p4vf9jvcnn43s6l4prk8zn6cx0ep9gzvevxecv729xz540v8qa742eg",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBzVlo0YjZFVFF2VkFlSzBL\ndHp4YTQ5RlNxV2FWNnNScTh5d0hXR05RL0NVCnBVUENNNjg0dTFVcmx3N3djZ25l\ncmxYTVVrNGhGSkdwVThoaC9UVTQ3L2sKLS0tIG1uREdFcXNubGxzUUQ1Rkh5Wnlx\nRG5OZmJwaGh2dkt6RSttb0gxZ3FBaEkKZzwUuQmOeBk5kfRfVVdqgNvsTU1Ssb/I\nx9Iv9w/YKHDmmcFLcAbGAHbS0/Js0YqBKZonxEMDdWP/+/F+Pv8LqQ==\n-----END AGE ENCRYPTED FILE-----\n"
}
],
"lastmodified": "2025-10-31T07:08:30Z",
"mac": "ENC[AES256_GCM,data:CBuTnVIta0eFqlB7ZpDkzPOEGbIQbb5oCpksI4umscB3uE0HM3j4N5r6bCPEcYpehB3qWXuCxlj4NfH7zmp6CDq6Be6bfpB1f8MCwTlPvQUho2f31so3U/g99q6ZyWI2rJO50dzn77bdma3JXo9VQb3uRqJ0mk72IYXFwdHvO9s=,iv:9uwjtGYpqsLcXRoBFmjJjfHUq7R47ZqkrKEXMulw4OY=,tag:4Auq3mnhlusogyW44SJfqg==,type:str]",
"version": "3.11.0"
}
}

View File

@@ -0,0 +1 @@
../../../users/admin

View File

@@ -0,0 +1,4 @@
{
"publickey": "age1qm0p4vf9jvcnn43s6l4prk8zn6cx0ep9gzvevxecv729xz540v8qa742eg",
"type": "age"
}

View File

@@ -0,0 +1 @@
../../../../../../sops/machines/server

View File

@@ -0,0 +1,18 @@
{
"data": "ENC[AES256_GCM,data:L4fWAVQdQP2tgYPzUnDY5X0=,iv:fWeTc1buW/JI/8qngZwzDp+wq2OTZPGdItqG0Up5eZ8=,tag:RJt6PQdCisDhtbr3ph3fWA==,type:str]",
"sops": {
"age": [
{
"recipient": "age1fdkan6n20swmut0sa86g5a6gxrj8qj2sgqe8hxtw32c0u9rr4drqlyr5mf",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBFK2x0SkcxK2RxTDRvOEpZ\nTS9QNGJxbmZIL2xtUWxyNjA2VDNVWEQzQVc4CkkxeEZDQm1mQVdUUzVIQThDVkV3\nU2lWbnlnb3lqWDZ0NWRqa2RJV0pVK1UKLS0tIHc5eUJBUUtiL0NwZDRnN004UEtr\nYnU2SWlFOGlucTdydGVmZCtGK3NjS28KkNAxwz9MesicLWtViL302AwZYdiTHmd5\nppbwelisNVlsYHSa5ybVDYER4IUz1d8AKO0jtS7qEDfT53R36swSAA==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1qm0p4vf9jvcnn43s6l4prk8zn6cx0ep9gzvevxecv729xz540v8qa742eg",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSArbEpzdk0xQTFkM2V0K2xz\nRFhDak0ybkhZUjJJdVI4YTl3cStXT2hTZDBFCmRvQ3ZXYkQ1NktCb004ZE1FS1FF\naSt4RlVXSlRhYWdlQ3htTkdkb2dyVDAKLS0tIG16VFNQM0dnaGVSRmlFRFB0WWtW\nN0dPL08rV01sY3ovRnEvUnNMaWVhd2sKvQIZIo5pPMXKh9Ea3ZgHj99Dn1X3JkmB\noscG8S7HOJh/cw+uITmkuv00TyIA9pid6L1kXvfcfv+tcuY9H1Vg4w==\n-----END AGE ENCRYPTED FILE-----\n"
}
],
"lastmodified": "2025-10-31T07:08:30Z",
"mac": "ENC[AES256_GCM,data:bmvshL97XNvNYYg0EjkUAQViHpKJ/+A+CGE90/uSM2WXooJF5yzvVJSHLAuYxWM295awN8ygTRUZ2VJ0SyfjzjAyUIH4SxqlrgywqMouyVsiFDAB6R4AmMmbvvC6rSs/TSMOwYC5pchrISbpsE2kmJnAXCqcev6Q0fl8Sa1PSxo=,iv:BuBQCFb3EWfG+bPzgaRDseDq6MJQ/Fs8okvksvEj1bA=,tag:n14VDbQk+zl+XbJPkTRAGg==,type:str]",
"version": "3.11.0"
}
}

View File

@@ -0,0 +1 @@
../../../../../../sops/users/admin

View File

@@ -0,0 +1 @@
202:fe87:1ca6:3cfd:e095:c2b1:321c:c391

View File

@@ -0,0 +1 @@
../../../../../../sops/machines/server

View File

@@ -0,0 +1,18 @@
{
"data": "ENC[AES256_GCM,data:0LwQxArH6fpIYpGIEzPtjh8elyKSaed7L+KqgnIlPVneR0UbsbOM6p5kVGTRPh5LWH6jmkURCqc2c5oT5CNLBePLQcgvtfLDSFWyyPrD9WtBSPu+YGF7K51JUUIkX07//LqTQQaM5Uu/STQRIoL1BD0Tofk2woA=,iv:3rSDqBj8N9RsSLijZm7mUUjUhiLHc2yidGkil8NvCD8=,tag:F8zlw9pfMjZdJSObDePLsQ==,type:str]",
"sops": {
"age": [
{
"recipient": "age1fdkan6n20swmut0sa86g5a6gxrj8qj2sgqe8hxtw32c0u9rr4drqlyr5mf",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0NnVzT0lOWnFTUU85c0d5\nZ0Q1b0xkS1NWbWVsc0o1emxLOW5NRU52REFZCjRkUGJHaDhyazdFdkxWaW1XVW53\nb25pUXlDRmhrTHlIWGl6RDJBZ2hTOW8KLS0tIGsxQmlQejkvQk9wTmtMQzZJa2dB\na0piOGlyMzVrTmNOUEhtaDNTWHdwTDAKroQG8KlnWZ6gwu1y0mr0gGezDF1jsS0Y\nC1LUAarHl+lY51sw+HJT88Y9mDfLjvYIMHKS33zdJuBXbNpoIfWyzA==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1qm0p4vf9jvcnn43s6l4prk8zn6cx0ep9gzvevxecv729xz540v8qa742eg",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBqQVJhYkI1eEFYL0d5OE1F\nSStqV0xPb0pybyt2QWd4SEpiaDhlNDJicTA0CkgrVU9FcThuQktaMThTaXBmWHNV\nd2tpMVVYT21TWUFvMS9wakl4RyszTGsKLS0tIHVVeDdoMUJQaURMOGFkM3dNa3ZG\nMmVPdEg3bmdZZHgwaGpnbFFKUTdvcUUKTaxEfp19+9AJihqx51m0cLz6IuR5pvnT\nt90kZxq+BH3/6gjiDlhwzqztnMbdqQYcVuCDVp/1aVWfThABUZ92aQ==\n-----END AGE ENCRYPTED FILE-----\n"
}
],
"lastmodified": "2025-12-05T04:42:06Z",
"mac": "ENC[AES256_GCM,data:1/u3c/wf2Gh6PPeVTKKGBxG1FWvN7hyuzx3Qa7yU3yKCD7LDHrrzTbQkFHDo1ZrXixK5NICCw48BWA0Jao0kItu6aU1Dbk5PexZI9ls1eyaDS7nwtZuHKDSEtDYu/kx5kZgQKH9tsokLqKlcoeocS0Mp1tjvUSQsiZFaYsuKaM4=,iv:gCPqFgpwjSONn/JN3dpJOk1BXtdd9cvIAz/NKPuAdKg=,tag:j8upk9sgDiYj5lmfU4V+OQ==,type:str]",
"version": "3.11.0"
}
}

View File

@@ -0,0 +1 @@
../../../../../../sops/users/admin

View File

@@ -0,0 +1,3 @@
-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEAIC8cazhgQ+1Hqdm8Z43J5ooymP2ytrBEvdfXYz0ryp8=
-----END PUBLIC KEY-----

View File

@@ -0,0 +1 @@
201:b9d:4329:71c2:79ca:3648:e86d:4236

View File

@@ -0,0 +1 @@
../../../../../../sops/machines/server

View File

@@ -0,0 +1,18 @@
{
"data": "ENC[AES256_GCM,data:bAJv40t1hkgMBz4boOEIw9GIY/4UFYI2WZidRrU88ky0JDBwSmHDnxuBFRpdjfAx7sO9d6vSHxAmaf45NlTKwnkUJnaIW0NK+979lXbLV+AG0suc4Vci6fsdbAHofR//3DfTYs03HoALkRUgRemTl7kQtdMB6E6LN02OE19HSVuFjMiEipwosmFfMoR69ZZuPSzNg1uVnw==,iv:LbZZGbwkXc71PAKgjD2CvXJVtyiqgi+cNsBzbulPyIk=,tag:VPESc2Y8SdU5CovQinZleA==,type:str]",
"sops": {
"age": [
{
"recipient": "age1fdkan6n20swmut0sa86g5a6gxrj8qj2sgqe8hxtw32c0u9rr4drqlyr5mf",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB2L3FzSkh3UTkvdTR6eEVE\nNnYrcnAydUl4QnJSbWJRbFFQODFmSld1YkJZCnNFUHp6YjQ3WW0vVHh5dXZBMzFJ\nYWRnZWNHN2dkL1JBWHNrZTcvTHI5S3MKLS0tIGpnekxneURuMWFkQ1RLTEszTFhi\nUUkzR2ljTXFhb1c2RDhpeFJXaXpYakUK/fLOqjNR2LML7uN3fiB9GdhWTDcr0wn4\n37ESeS1kx0EobRMaDVu8GPZovcdypFOOPiuUpEu6hIEdwvl736oDSA==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1qm0p4vf9jvcnn43s6l4prk8zn6cx0ep9gzvevxecv729xz540v8qa742eg",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBjQWE2L3F1RW9oNlQzR0I3\nZDJoZ1hIM2N0Mm1aQ1IrN1gweWZxeWVGdUdzCmlIZXdKYm8rUGkvVVpiY1BJZmlD\nN0MwRHN3dUNrRU9McjNFMXpranJGU1UKLS0tIG1yMmJGaEp1cU1iZGdqdzRUTWZW\nZzZrVkRuOTBTcnFuaTE1Um1ISUxBaTQKf842rL3N7Gl1QfrIURWiu26LwO0ERkP4\nvfXN2HH1jjp2pblQF9qb+5vmUsaX1pPSY1R+YMvUK7wIwOb9zyIfmQ==\n-----END AGE ENCRYPTED FILE-----\n"
}
],
"lastmodified": "2025-10-31T07:50:02Z",
"mac": "ENC[AES256_GCM,data:/c1jqMSLd9/fxm1PxtRITr3qkjtrlJ/5wJgEVkraAqU6XTuzSyseMhdeWLL2Fy2OunT/+alM6VpaliBmcZqRkSSGngbuvMsujDiJLgUXQ8wNhMcK7ln/dqFMcA+RYGxihGEMwuPKs3yOVKj9PDzFYnm6TUCFkU/heotI/hQ1lQI=,iv:EsWsi4r4DctMLvi4WmqKe0D1NTHwYVKCcxKQ+6grzYg=,tag:28dmpzF/6dbvGIriaBVKPw==,type:str]",
"version": "3.11.0"
}
}

View File

@@ -0,0 +1 @@
../../../../../../sops/users/admin

View File

@@ -0,0 +1 @@
301:b9d:4329:71c2::/64

View File

@@ -10,7 +10,7 @@ in
perSystem = perSystem =
{ ... }: { ... }:
{ {
clan.nixosTests.pingvin = { clan.nixosTests.service-pingvin = {
imports = [ ./tests/vm/default.nix ]; imports = [ ./tests/vm/default.nix ];
clan.modules."@clan/pingvin" = module; clan.modules."@clan/pingvin" = module;

View File

@@ -10,7 +10,7 @@ in
perSystem = perSystem =
{ ... }: { ... }:
{ {
clan.nixosTests.pocket-id = { clan.nixosTests.service-pocket-id = {
imports = [ ./tests/vm/default.nix ]; imports = [ ./tests/vm/default.nix ];
clan.modules."@clan/pocket-id" = module; clan.modules."@clan/pocket-id" = module;

View File

@@ -10,7 +10,7 @@ in
perSystem = perSystem =
{ ... }: { ... }:
{ {
clan.nixosTests.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;

View File

@@ -10,7 +10,7 @@ in
perSystem = perSystem =
{ ... }: { ... }:
{ {
clan.nixosTests.victoriametrics = { clan.nixosTests.service-victoriametrics = {
imports = [ ./tests/vm/default.nix ]; imports = [ ./tests/vm/default.nix ];
clan.modules."@clan/victoriametrics" = module; clan.modules."@clan/victoriametrics" = module;

View File

@@ -9,7 +9,7 @@ in
perSystem = perSystem =
{ ... }: { ... }:
{ {
clan.nixosTests.vikunja = { clan.nixosTests.service-vikunja = {
imports = [ ./tests/vm/default.nix ]; imports = [ ./tests/vm/default.nix ];
clan.modules."@clan/vikunja" = module; clan.modules."@clan/vikunja" = module;

View File

@@ -0,0 +1,53 @@
{ ... }:
{
_class = "clan.service";
manifest.name = "yggdrasil";
manifest.description = "An in scalable routing as an encrypted IPv6 overlay network";
manifest.categories = [ "System" ];
roles.default = {
perInstance.nixosModule =
{
lib,
config,
pkgs,
...
}:
{
clan.core.vars.generators.yggdrasil = {
files = {
yggdrasil-secret = {
secret = true;
};
yggdrasil-ip = {
secret = false;
};
yggdrasil-subnet.secret = false;
};
runtimeInputs = with pkgs; [
yggdrasil
jq
];
script = ''
yggdrasil -genconf -json | jq {PrivateKey} > $out/yggdrasil-secret
cat $out/yggdrasil-secret | yggdrasil -useconf -address | tr -d "\n" > $out/yggdrasil-ip
yggdrasil -useconffile $out/yggdrasil-secret -subnet | tr -d "\n" > $out/yggdrasil-subnet
'';
};
services.yggdrasil = {
enable = lib.mkDefault true;
configFile = config.clan.core.vars.generators.yggdrasil.files.yggdrasil-secret.path;
settings = {
Peers = [
# US Peers
"tls://ygg.jjolly.dev:3443"
"tls://[2602:fc24:18:7a42::1]:993"
"tcp://leo.node.3dt.net:9002"
"tcp://ygg-kcmo.incognet.io:8883"
];
};
};
};
};
}

View File

@@ -0,0 +1,23 @@
{
lib,
inputs,
self,
...
}:
let
module = lib.modules.importApply ./default.nix { };
in
{
clan.modules = {
yggdrasil = module;
};
perSystem =
{ ... }:
{
# clan.nixosTests.service-yggdrasil = {
# imports = [ ./tests/vm/default.nix ];
#
# clan.modules."@clan/yggdrasil" = module;
# };
};
}

View File

@@ -0,0 +1,37 @@
{
...
}:
{
name = "service-yggdrasil";
clan = {
directory = ./.;
inventory = {
machines.server = { };
instances = {
yggdrasil-test = {
module.name = "@clan/yggdrasil";
module.input = "self";
roles.default.machines."server".settings = { };
};
};
};
};
nodes = {
server = {
services.yggdrasil = {
};
};
};
testScript = ''
start_all()
server.wait_for_unit("yggdrasil")
# Check that garage is running
server.succeed("systemctl status yggdrasil")
'';
}

View File

@@ -0,0 +1,6 @@
[
{
"publickey": "age12ldrhhffl0jeteh8f0rzhezs0ulggg5jyqph6xzrgjw2dv40pqwq49lej9",
"type": "age"
}
]

View File

@@ -0,0 +1,15 @@
{
"data": "ENC[AES256_GCM,data:pGMobS67sLp2GN2Xw7A/trcLYnQdVZCUbjtlwS/AShXxyXgHXzkqRee6R765GZyCpDwM8A1IuMZYctrqWxVXrpIAiJpwvwy7vDM=,iv:ysRf5xAXN+dFSx+sFHNDt1GcVQx7RLej4c12v60iSI0=,tag:yXYpWhWLdsz9BOOoKpZU4g==,type:str]",
"sops": {
"age": [
{
"recipient": "age1qm0p4vf9jvcnn43s6l4prk8zn6cx0ep9gzvevxecv729xz540v8qa742eg",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA2UmhPdzcrSnFhVUxRNDBL\ncXlGRzdMdWxCWmFlUkE4RnJRQ3psMlBqV0Q0CkRjTXFoQitQbjRhMlVjaDc3UDN1\nR1hBeXlCeWxvdnZoVWI1ZkcweHF5VncKLS0tIHE4YVFhYTZTNko1MnJINjFPYXh4\ndlJJZThGZ0JIaDJWRTNXbXk3alNZTnMKgd+0535zoTu6xW2778uNReu4Z7LStN6d\n1O9SXAB+s1iOZ3xGEICiQTVF/6p8RE6lheV2oXgoMiXXrFNH6INLsw==\n-----END AGE ENCRYPTED FILE-----\n"
}
],
"lastmodified": "2025-10-17T05:34:34Z",
"mac": "ENC[AES256_GCM,data:YIpKJlOI6ASgOYqv9ipu+T3c+PlM5HwvdFVH8gh8hVeSbmxD1baPPmVSWlLv+u61Q1/C9PK4mczaASopaGiLoswep+Hc1Gn7sSeP9wO6Djx6fEIEyE1VUhUbTqi/nHYiB21yB/wegfpqzNYIn1nO0oFCmDmSS5qIowcT1fhYIjM=,iv:lzxll5oC7poLvC/hZPexUGAcAdf67xZGRXUpj6O3p6Y=,tag:9xu17Y5MtW5XNzGBsWwA3g==,type:str]",
"unencrypted_suffix": "_unencrypted",
"version": "3.10.2"
}
}

View File

@@ -0,0 +1 @@
../../../users/admin

View File

@@ -0,0 +1,4 @@
{
"publickey": "age1qm0p4vf9jvcnn43s6l4prk8zn6cx0ep9gzvevxecv729xz540v8qa742eg",
"type": "age"
}

View File

@@ -0,0 +1 @@
204:5ce7:aa27:579b:ec90:6907:4ddc:177

View File

@@ -0,0 +1 @@
../../../../../../sops/machines/server

View File

@@ -0,0 +1,19 @@
{
"data": "ENC[AES256_GCM,data:I6yalWQ2u5hI84lJTUmh07JxUBp4EZukJrSGSN7wsGiUGlFa1v/RT1XkTiXuRjDtUVYCLmQmfSCAp/OqFscxF8KL+s24iTDrG4e3S6AeKLa3oZrNJIt1EJ06gWrPNoh1ttmwXSd4Y4Bsk4Lg8vIjH4qw3Bx+KrufxYTqe+anfMdoXKnW8wOWud5O7HMvCh+sf4dNcf6PIQ==,iv:SF5qExXNPyif+LIcNhHP0PKELUBXaFsPj9B3wvUkEp0=,tag:QEkZXDrIdcpNiZ6l2ljOPw==,type:str]",
"sops": {
"age": [
{
"recipient": "age12ldrhhffl0jeteh8f0rzhezs0ulggg5jyqph6xzrgjw2dv40pqwq49lej9",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBENDhrWVRuYjRnZktROU4v\nSHNtODFGMWl0NDRHazIwcWl0WGtNY2dYMXhnCmZQQ0doS3BTaU5hRHVsVTB5THl1\nWUNDQUNiMVJFeFZnQ1ptYmFQdTJQc28KLS0tIEtJdUQ5Y1VqSThkSVVNcVNVNEFr\nMzBCRjM1L1V5TngrZG5rR0VHY3Z6TDAKPQ6P96upDeh8xwQDrX4Zcf71Dah5zkOJ\n/F5eODEBadzQSRmJuyp3+uRMFf47eR6Q5bVah3NsVxFquXOL3CtNlw==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1qm0p4vf9jvcnn43s6l4prk8zn6cx0ep9gzvevxecv729xz540v8qa742eg",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBHb0EwT2tuMVE5SE5XaWdQ\ncGR0bFFhOUQvM2dGUzdlUEFFbzRnTHBWWUVnCjFGTXcrWW1vR0x5dXBUamtkS0dF\neG9weUVwQzhhNHhPRUdqV1VnWXJyNFEKLS0tIC80b1ZqRGFOenpENDN1Vk5vRUhY\nVnJzZ1Q5VzZ6ZEZtZE13YjQ0VVhrTTAK5y0BjKBRg2AXuO416JWLMLyM/pCQChKn\nVKZMXcT6cc5hHDuqbp9qUofknF68XnzlH6nOyLB1ZtnELyeZuf29fw==\n-----END AGE ENCRYPTED FILE-----\n"
}
],
"lastmodified": "2025-10-17T05:34:35Z",
"mac": "ENC[AES256_GCM,data:Y3k83RaeX64LA3rsIkQxyKw+LLUgXVsqr3F2UHkv9h73gkyChc6k1oE/FLR4CsZZWsfLNjCkPMuenqToA2mKqQK0aADwPDYo0aVm0hr1PGX5j3Py6EmP56NFvxlAQsExRWo32eqdkeCkY23hfcmUYlaB+bo/fsrRVj67zag9GYA=,iv:p18i8cV6jKXpuZ1Xd7KYCl8BMe1/8CW9YnCuVrTAqy0=,tag:IJnLzdZOn8Clu+lCKT6zvA==,type:str]",
"unencrypted_suffix": "_unencrypted",
"version": "3.10.2"
}
}

View File

@@ -0,0 +1 @@
../../../../../../sops/users/admin

10
modules/nixos/common.nix Normal file
View File

@@ -0,0 +1,10 @@
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [
screen
ncdu
vim
lshw
pciutils
];
}

View File

@@ -0,0 +1,7 @@
{
flake.nixosModules = {
common = {
imports = [ ./common.nix ];
};
};
}

9
routers/default.nix Normal file
View File

@@ -0,0 +1,9 @@
{ inputs, ... }:
{
flake.legacyPackages = {
whitehouse-router = import "${inputs.liminix}/default.nix" {
device = (import "${inputs.liminix}/devices/gl-ar750");
liminix-config = import ./white-house/configuration.nix { inherit inputs; };
};
};
}

View File

@@ -0,0 +1,162 @@
{ inputs }:
{
config,
pkgs,
modulesPath,
lib,
...
}:
let
secrets = {
firewallRules = { };
}
// (import ./secrets.nix);
wirelessConfig = {
country_code = "TH";
inherit (secrets) wpa_passphrase;
wmm_enabled = 1;
};
svc = config.system.service;
in
{
imports = [
"${inputs.liminix}/modules/wlan.nix"
"${inputs.liminix}/modules/network"
"${inputs.liminix}/modules/vlan"
"${inputs.liminix}/modules/ssh"
"${inputs.liminix}/modules/bridge"
"${inputs.liminix}/modules/health-check"
"${modulesPath}/profiles/gateway.nix"
];
hostname = "whitehouse";
boot = {
tftp = {
freeSpaceBytes = 3 * 1024 * 1024;
serverip = "${secrets.lan.prefix}.148";
ipaddr = "${secrets.lan.prefix}.251";
};
};
services.sshd = svc.ssh.build {
authorizedKeys.root = secrets.root.openssh.authorizedKeys.keys;
};
users.root = secrets.root;
services.resolvconf = lib.mkForce (
pkgs.liminix.services.oneshot rec {
name = "resolvconf";
up = ''
( in_outputs ${name}
echo "nameserver 208.67.222.222" >> resolv.conf
echo "nameserver 208.67.220.220" >> resolv.conf
echo "nameserver 1.1.1.1" >> resolv.conf
echo "nameserver 1.0.0.1" >> resolv.conf
echo "nameserver 8.8.8.8" >> resolv.conf
chmod 0444 resolv.conf
)
'';
}
);
services.reAddDefaultroute =
let
threshold = 3;
healthCheck = pkgs.writeAshScript "ping-check" { } "ping 1.1.1.1";
in
pkgs.liminix.services.longrun rec {
# dependencies = [ config.services.wan ];
name = "hack-default-route";
run = ''
fails=0
while sleep 10 ; do
${healthCheck}
if test $? -gt 0; then
fails=$(expr $fails + 1)
else
fails=0
fi
echo fails $fails/${toString threshold} for ${name}
if test "$fails" -gt "${toString threshold}" ; then
echo [+] adding default route
${config.services.defaultroute4}/${config.services.defaultroute4.name}/up
${config.services.defaultroute6}/${config.services.defaultroute6.name}/up
echo bounced
fails=0
fi
done
'';
};
profile.gateway = {
lan = {
interfaces = with config.hardware.networkInterfaces; [
wlan
wlan5
lan
];
inherit (secrets.lan) prefix;
address = {
family = "inet";
address = "${secrets.lan.prefix}.1";
prefixLength = 24;
};
dhcp = {
start = 10;
end = 240;
hosts = { };
localDomain = "lan";
};
};
wan =
let
inherit (config.system.service) vlan;
wan-vlan = vlan.build {
ifname = "wan-vlan";
primary = config.hardware.networkInterfaces.wan;
vid = "10";
};
in
{
interface = svc.pppoe.build {
interface = wan-vlan;
username = secrets.l2tp.name;
password = secrets.l2tp.password;
};
dhcp6.enable = true;
};
firewall = {
enable = true;
rules = secrets.firewallRules;
};
wireless.networks = {
"${secrets.ssid}" = {
interface = config.hardware.networkInterfaces.wlan;
hw_mode = "g";
channel = "2";
ieee80211n = 1;
}
// wirelessConfig;
"${secrets.ssid}-5" = rec {
interface = config.hardware.networkInterfaces.wlan5;
hw_mode = "a";
channel = 36;
ht_capab = "[HT40+]";
vht_oper_chwidth = 1;
vht_oper_centr_freq_seg0_idx = channel + 6;
ieee80211n = 1;
ieee80211ac = 1;
}
// wirelessConfig;
};
};
defaultProfile.packages = with pkgs; [
busybox
iw
nftables
];
}

View File

@@ -0,0 +1,20 @@
{
wpa_passphrase = "";
ssid = "WhiteHouse";
l2tp = {
name = "";
password = "";
};
root = {
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEcZ/p1Ofa9liwIzPWzNtONhJ7+FUWd2lCz33r81t8+w kurogeek@kurogeek"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAB/raxJR8gASmquP63weHelbi+da2WBJR1DgzHPNz/f"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDuhpzDHBPvn8nv8RH1MRomDOaXyP4GziQm7r3MZ1Syk"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAmgyEGuY/r7SDlJgrzYmQqpcWS5W+fCzRi3OS59ne4W openpgp:0xFF687387"
];
};
lan = {
prefix = "192.168.1";
};
}

View File

@@ -10,7 +10,6 @@
devshell = { devshell = {
packages = [ packages = [
inputs.clan-core.packages.${system}.clan-cli inputs.clan-core.packages.${system}.clan-cli
inputs.clan-core.packages.${system}.generate-test-vars
]; ];
}; };
}; };

6
sops/machines/almach/key.json Executable file
View File

@@ -0,0 +1,6 @@
[
{
"publickey": "age1m2e4c3gv7mxyg839gf0lfsh8wvygx3rn8u5cwnn99vw2w43ssers40tlq8",
"type": "age"
}
]

View File

@@ -0,0 +1,6 @@
[
{
"publickey": "age17c9908f08w2w0ajprep4p60a7hd27cznrnxmq4mxwznvgzjuhymsxttd3d",
"type": "age"
}
]

6
sops/machines/mirach/key.json Executable file
View File

@@ -0,0 +1,6 @@
[
{
"publickey": "age15k6cz0lj207608gdlgxq6l2n5zsflvg0lw8qqlvkyk0xddc4kqvq9nh6ex",
"type": "age"
}
]

6
sops/machines/neptune/key.json Executable file
View File

@@ -0,0 +1,6 @@
[
{
"publickey": "age14x2fatvz802dyvnfukgkxfu30khuqml5ang9smm3pr9lc95eqpjs2ywxxf",
"type": "age"
}
]

6
sops/machines/ramus/key.json Executable file
View File

@@ -0,0 +1,6 @@
[
{
"publickey": "age1egztkqupggjcpy4g9tfwq6kqeh3ljw7enzhx4l53hjge73wmdscqy5qwfp",
"type": "age"
}
]

6
sops/machines/sirius/key.json Executable file
View File

@@ -0,0 +1,6 @@
[
{
"publickey": "age16aerzyy7adcymezr4ewql3y7chq8wuvjpzsxm5um0u9jvvtdncnqmtsw05",
"type": "age"
}
]

View File

@@ -0,0 +1 @@
../../../groups/admins

View File

@@ -0,0 +1,46 @@
{
"data": "ENC[AES256_GCM,data:qkIwSe6DxrWpmUgMi6G8srenbwUuMHSKXgzL/nybITl8iXTfoLBucjlPp6JpBmfs2NdOEqWS2+QUcnVRAueH9rbABKeAVdoGdio=,iv:NHplT1IbuYfyq8n2Nqq6TBRFi+nTtOOreyprIlXwWHg=,tag:/BU417a9kYMhgexskyE0Qg==,type:str]",
"sops": {
"age": [
{
"recipient": "age134vt63pjqpd0m7702fyn8vhdlzyj2deqc2q78sp9uw9052kxsgwq6d25ez",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBObGdiWjBtTkR3alBDTEdm\nb25kbWY5WkFUd1dsanZ5M2FjQm11TnBVdWdZCnNOSE45cFMwallGRVZuMTdlVTBO\naTVnS29vQk9QZVJyaGRzTGNNcUdGQ00KLS0tICsxZ3NtVlVoc2FpQUMxSm9uZWF3\ncjZXcDVwZ0pUcDlqOGN2aGxmME43NXcK28S/SKkLgXJWQ5sdDxcGyoO74e0MaxeM\nx1kGfiKJBLqok+wNOPO9SFHbWY/ITH5RdV8iLchPBe2VM9IuC0nZ4g==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age17d4qt0n9edq57tgcqyk8eu5mrendl59yt6z2y3a4vkq7el8krqtq6lq28g",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBsb3dPMGhpdHE5SlBQK3hu\ncEJqL0JaZk1rOE5MS0krUHpyMUNMUkhyMFdzCmM3V25vS3U2WENycmZIRC81Y2k0\nSEJTekNaNTFMZy85VHh4MENvbUk3Uk0KLS0tIGExYUFNVlRZeThQRHlKVDZWU1Jn\ncUNRd1cwZU1SL3BKOGZZaFErR3F3NkUKnILS6XWSl2MaQ+FAZvRAZzgJxL4OWl+v\ntDxXBBCapOeoLgRH61Q06JnDjgBCz14QIROgZP9Zji/HsdSeRiKR0A==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1fido2-hmac1qqpf43tgcfjm048lsqskvq34w2t4uvrm5qy6m2eg6zjj82ctca8wctgpczxvj0q4y6337uhvsxdh5j86k9h9ymautpvv2759ucwnef75ez7pa7fpkddklp40mxk2tedsp74359g0kefn5rsq0x0yss6cu4yd0h06up0rp08t6yc4l0hfa9y8jn5fkx6nk0hjhz06ykwv0fyxe7z42q683jy0",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIEhLejJLVEk2\nR0dtY0FJQUYyd3JObitPdEcweWVUang5ZUdEcTg1UlJUMFUgQVEgd0l6SlBCVW1v\neDl5N0lHYmVrajZzVzVTYjd4WVdNVjZoZVlkUEtmVXlMdyBIdmtoczF0dmhxL1py\nS1hsc0ErckdoVVB0bE02RGdCNW5raERXT1ZJMTkzNjRGNHd2T3ZSTVYrKzZlbEll\nVTZKc2JVN1B2SzRuNkpaekhwSWJQaFZVQQpvUS80dk92MjBnN1N6Y284RGE4T0tR\nemN5Wks5dS9vdWRBTU1YYlo3UXBZCi0tLSBEb0pmU2xGMFFjazZ4em5uT0wyZUZW\nT1JqdjZjTDRwUUJLNzAvYTFreXp3Cqfcpn+UlJE63ymHbremaZ8X+wDDQw3gPGmX\nav9dmxfLCPLwwTbd3e8N98Jnc0OwGUiKTavtjpph9ygThvo86jE=\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1fido2-hmac1qqprw0vfpc8wzsu78quc777kmee54ln6nnsjrnrhl7nr33eh4kvkksqp05qqxj4kgfzrmrugrsvg7skx6ghh3q9xc0x0agthtkvy25d9eq7eklta5wf7s30hexkuyl5546rdz9ffa5tawlp5yweqkgccntw0ny540n2am3cqw3luhxkfmrp63kwr6mwplhr9u26wll48x0n3k5f60c7hg9a3",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIFNqaHoxdk83\nSnFNRXg4TzZLY3BSOXNSdWVrby90V1Q2Q2RRUi9xZGZ2Q1EgQVEgZlFBRFNyWkNS\nRDJQaUJ3WWowTEcwaTk0Z0tiRHpQNmhkMTJZUlZHbHlEMCBtMzE5bzVQb1JmZkpy\nY0orbEs2RzBSVXA3UmZYZkRRanNnc2pHSnJjK1pLVmZOWGR4d0IwZjh1YXlkakRx\nTm5EMXR3ZjNHWGl0Ty8rcHpQbkcxRTZmZwpZM05YUEFYNEVRM0FSYkpKY05pc0hq\nWWRzTzFWSUZRNmI2NENDL3RyNVkwCi0tLSBPMURucGFSdHJER0tqUlRHb2NmNmYw\nVTZsN295QUJZQ1BObERGYjlESGUwCuYMMiu6NyO8Q/lvBHI7muzQOZfaL3Ny3S3E\nE7TlShnbLEsDxApvBV1KJaiYY21Z+1Up9DM0xQskFBYQCya3APo=\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1fido2-hmac1qqpyewum3q8dfcumfgec8nn958aec9f4q9aqy0k06kw5kq27d6fdqdgp0p7y4ru3n5xk90u747xevxa2af3v37e85j9g3axrmw5hdwdfh0wz22hut5vrafxsx26a7vh8fjwkymz3ramfgvvu4detztu075kmpr8l9ydqda0rnjwatdwmfgswg849p37astvld98s3nleeq575azlwc2hhpuh",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIEw4eHIya0RX\neE5Nalk3YWs2R1ZFcmp6OEIvSDhPMVlZYk5TcTQwbXBpMlkgQVEgZUh4S2o1R2RE\nV0svbnErTmxodXE2bUxJK3lla2lvajB3OXVwZHJtcHU5dyBKU3I4WFJnK3BOQXl0\nZDh5NTB5ZFlteFJIM2FVTVp5cmNyRXZqL1V0c0l6L0tSb0c5ZU9jbmRXMTIwb2c1\nQjZsREgzWUxaOXBUd2pQK2NncDZuUmZkZwpYMURZbG5lNlYwMUdVSUtsRlJqWEhj\nbHdvZVdpTGt4ZzhRZERpWWJkbG5ZCi0tLSBJMG93d1ZPa1Z3WWVDSjJ2ZXEwRDJD\nQ0cyQUxlaTdycXhGVVRzSnAvakJvCgoORUSoqTGsS5hvnV3hJNIz1Y9pTR7foSz8\nXMd/f3TObHeokHsejbxx2yMDLPt5fD1MWc5MioLyMNMpwjqq+T8=\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1hlzrpqqgndcthq5m5yj9egfgyet2fzrxwa6ynjzwx2r22uy6m3hqr3rd06",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvYWZ3a1ljTVhQZFNHTGxP\nQnEzdm9QM1ZqMGZEMVF1UzczeG5LYW8wam44Cm9GKzc2c0M4dEgramE5VlBQK3NQ\nTkdlajFFRzU1aXorV0tuL2M5cENQRkEKLS0tIERWcFd0MXAzYVZOdlgxSDcybk1O\nMkQwM1l5UGRVaHdtNCsyR2Y0VXRSSkkK3Bmoxs/GeybD/cwQf2d8QGdTVa2tfKXp\nTExxPuwsrb+/uaooHbCefv35r8jAmH67fJPM8IjyrcmW9HQpvL9R6w==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1sg0rvgyetdcqw7j2x983fh69kdkvqsngpe5x36e5920qa7fze3cqhj4wgx",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA5SGlpbnpUejhLVVNBVWN0\nMklqalJvT2NTL1VhcVIyUDRMQTJ3cUdHVWtJCmpWV1B6QkRwUHZ6K2pzNDJFSmpi\nZWlpNXo0aXM3Qlk0ejlMWDZ3RXFLN1kKLS0tIFYyYnB4VmhWQUoxNmlBMXZQT3ZX\ndW55WktEOGhua3Y3a091a1ZLbXV6ZzgKqQ9g37DyZNJDyjarEKqnftB4l8JCyCpx\nVJLSsjC4kvQCMhRsgZuLZaoICNRgOQiPIW8+N+bqNQ/WxcoOZM2z1w==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1swlyyk2rzvevqawyeekv75nx2dz34zpe3xqhkqme26gcgeavy4dqrfpcd8",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA0Z0x5NUJnK2RqYXNzT2l5\nbkd1UWgzTnFpcFQ1Y2RPQlFKSktRV3kvcFFrCkRyOXRDNHFHY2QrdGhrM2JEbzQ0\nb0xPb21qd2NjRGUzVUhBdW5sVkVld1kKLS0tIEVNQUwza3luSCtEblphYnBlbmJT\ndm5IMVJUc2hBVVRrZEROUzI0YllRVHMKIq8EbkeEXMDDh+MEQqkU7BtdlMTmeGYn\nHgizD8RFh4/0A2MifmMD/9OarqSNQXvQi8z2rTVctLMcLCfuAf53uQ==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1vphy2sr6uw4ptsua3gh9khrm2cqyt65t46tusmt44z98qa7q6ymq6prrdl",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBrOFFUdmRIQjVXblRGNjFq\nUmNaYUgzY2hsaXRrUXRZQzFrTWloUG5xbnh3Ck1hYWJXZytEQzJjWWVGblZ3WGhV\nc3FSNXpPMVU2ODdDL3RNT2FTT21iNXMKLS0tIC9xK3NGRnRudVQ5RFFsVGI5MEtF\nSlljWXhUVXVhc2JmZ3k2RE43ak1ScGcKGaUeC/5UFHVLu9NETJTIVsOd+NnXphZ0\nQImkKtlJXxQ4OBJWGP7Ybm5h4mWiqqVWIrkodyH+qo1/EyOwZ7OjgA==\n-----END AGE ENCRYPTED FILE-----\n"
}
],
"lastmodified": "2025-12-03T07:06:11Z",
"mac": "ENC[AES256_GCM,data:rEbXQH/lqWkL6EG+DoRNQtNTY0rIXQDR5aK/VFfZLCQw5RYTOdnnAeK93z5uV/jSJ6PdwCPFLbCKF34+aKwSS1xVrLp2oZb0aK1J85sP5V41+r385rxB/0BZP7dk4IaAkEOnU39qoyo0hCYROJ95V+97JhdvV7Y0l2zXypdLuNM=,iv:MqXHtyaOb4di969TLoAyhl0Kpo/JsfUU6pS9Jwes2oI=,tag:2JSV57+uAEQPNm8ODmCocQ==,type:str]",
"version": "3.11.0"
}
}

View File

@@ -0,0 +1 @@
../../../users/kurogeek

View File

@@ -0,0 +1 @@
../../../groups/admins

View File

@@ -0,0 +1,46 @@
{
"data": "ENC[AES256_GCM,data:BbWM+ivTGdZbMPymSsKWOuUbcozyBKWuXeO0bGTElE2l67OsPKD+Mdw4a3sRRY9xs1RatQ8vg9CId/wiZJSv5c8oogjo/bv3m9Q=,iv:iwtN0Ko7PZjMrPtzzgNvFz5n6X07Mpy4oF+8AZr0nWw=,tag:oFxc/34dkHNkQ1IfACh87Q==,type:str]",
"sops": {
"age": [
{
"recipient": "age134vt63pjqpd0m7702fyn8vhdlzyj2deqc2q78sp9uw9052kxsgwq6d25ez",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBDdFhxQ2hndlFoS1dGd2Ns\nMVFJN09RL2pSekZ1bTNuSjFyeE5QVFQrUVJFCndabkNqdXFESTQ5TUY1TURhZjcx\nb2RrTGUxQUFMOEdadGFFMFMwMUIzUVUKLS0tIEh5Q05SaWRJbHgwVC9aMWsyUUN3\neVpnRVQrUjM3Y05KbTRLR0t0NHFRWTgKbMpXKBQJhHedMYbDB1/N7ASUJ5m8bM7X\nuC3BSGXUmrH81krmnbdaaMontpllUtpdmDd1hYOAbQLVC3UYADfbCQ==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age17d4qt0n9edq57tgcqyk8eu5mrendl59yt6z2y3a4vkq7el8krqtq6lq28g",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAxejVIbzBWMFYwTEJyWUZC\nK25GeWNtWThUVVRKMXJnQkN1blFFMVJMVEU0CmJGdURFbUVYMWR3d1d4ak1SWFlN\nSHVDYW1yeUJwWUZwT0lMRUgvQmx6c2sKLS0tIDVIb0h4VnJPTkhlcTN0S0dUMmp0\nRXdxSmpXQ0tkZnBUQ1plMVI2RGNxVFEKGnJ5y1umJbn0qP5aCGs/AAuSJMRl+cIB\nfI8wVSGzeRtaoryAIFD/b2STSfBDyjKOkQOQXML+YEsEwqLlCufWKA==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1fido2-hmac1qqpf43tgcfjm048lsqskvq34w2t4uvrm5qy6m2eg6zjj82ctca8wctgpczxvj0q4y6337uhvsxdh5j86k9h9ymautpvv2759ucwnef75ez7pa7fpkddklp40mxk2tedsp74359g0kefn5rsq0x0yss6cu4yd0h06up0rp08t6yc4l0hfa9y8jn5fkx6nk0hjhz06ykwv0fyxe7z42q683jy0",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIG9GcTYzaFFz\nLzduT3BpTFhwUGxyMkdSMm9oL3J6UGZCcTJ3azBTdVBnUk0gQVEgd0l6SlBCVW1v\neDl5N0lHYmVrajZzVzVTYjd4WVdNVjZoZVlkUEtmVXlMdyBIdmtoczF0dmhxL1py\nS1hsc0ErckdoVVB0bE02RGdCNW5raERXT1ZJMTkzNjRGNHd2T3ZSTVYrKzZlbEll\nVTZKc2JVN1B2SzRuNkpaekhwSWJQaFZVQQpkanEzVWo5b1N0ZU4ySWR6MHBTK0tJ\nL24yV0FLa1lId2JPaWZ0aU01MVRBCi0tLSBVRXJxMlVhTGZSajhBZ21TT3Nib3ph\nSnFSdDlpbmg5dW1oNnlkSTVTTFFNCs2S1wPrTFqeOx1kvMPiRJs99VbXZyU2j5yY\nU027yIrDzqpcfqcWx9FjHNtDJzJM/150dNkwieheGCOCaHpyqnI=\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1fido2-hmac1qqprw0vfpc8wzsu78quc777kmee54ln6nnsjrnrhl7nr33eh4kvkksqp05qqxj4kgfzrmrugrsvg7skx6ghh3q9xc0x0agthtkvy25d9eq7eklta5wf7s30hexkuyl5546rdz9ffa5tawlp5yweqkgccntw0ny540n2am3cqw3luhxkfmrp63kwr6mwplhr9u26wll48x0n3k5f60c7hg9a3",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIExsR3l0VWc0\nb1h2K0tPNjhFaFhJTFREQXR6Q2gvdjZSa1RKeWtVWE1XZ1kgQVEgZlFBRFNyWkNS\nRDJQaUJ3WWowTEcwaTk0Z0tiRHpQNmhkMTJZUlZHbHlEMCBtMzE5bzVQb1JmZkpy\nY0orbEs2RzBSVXA3UmZYZkRRanNnc2pHSnJjK1pLVmZOWGR4d0IwZjh1YXlkakRx\nTm5EMXR3ZjNHWGl0Ty8rcHpQbkcxRTZmZwpYblNDNWZkM2lnUXQyVjYweGZWUnJC\nS1p1N3N4RCt4RDZZNnRCSi84c3ZZCi0tLSBEUkQxekp2alExQWpWSkVoWmpia0hJ\nbldabG5LckwwOVlHUDh1cXUvMjZnCn6Q1+kL5JG2org5bxIa6Y6Lgu+LlTyM2fhp\nNmhsoxrah8FGCsBkSNRwsVJE+RxalkUygQ+hf+ss+dDPbDsZ2oA=\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1fido2-hmac1qqpyewum3q8dfcumfgec8nn958aec9f4q9aqy0k06kw5kq27d6fdqdgp0p7y4ru3n5xk90u747xevxa2af3v37e85j9g3axrmw5hdwdfh0wz22hut5vrafxsx26a7vh8fjwkymz3ramfgvvu4detztu075kmpr8l9ydqda0rnjwatdwmfgswg849p37astvld98s3nleeq575azlwc2hhpuh",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIDk3M0J0MHFR\nN0E0a0xXN3ovZWVWQmkrQ3RBVklSTUwxQ0hmZWwyVDdlUncgQVEgZUh4S2o1R2RE\nV0svbnErTmxodXE2bUxJK3lla2lvajB3OXVwZHJtcHU5dyBKU3I4WFJnK3BOQXl0\nZDh5NTB5ZFlteFJIM2FVTVp5cmNyRXZqL1V0c0l6L0tSb0c5ZU9jbmRXMTIwb2c1\nQjZsREgzWUxaOXBUd2pQK2NncDZuUmZkZwpLdUFNYXZ6SStzc21Tc0JoSXYyU0x1\nZW5FbUtGVDh4RmZHUEdGWU1sbnVzCi0tLSBneE90QWp2d01xekVvV2p4RVAxQ3E1\nYjljWk5NTVJWYlI0UXVWQ2J3RkVvCkmNGybBIyBQNh2q5NOoyEg217n6P6a31XnL\nB8a778HPbmT0mhO4QvYn7R/duo07s+vu5mRm8gc5AkCpXiMNkRU=\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1hlzrpqqgndcthq5m5yj9egfgyet2fzrxwa6ynjzwx2r22uy6m3hqr3rd06",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB5dkNRTFpJcTJJVGlmMGc1\nOXMwRXVaRVdlN1RxdWx1R1AzQkliZjZkbVR3Ci8ycGxwVElGK0h1N1VKNFI1dGs3\nS00vd0gvRzBpVFN3SGZRaUVONG9ObjAKLS0tIGIrN2RiU3J5Ukw4SE9XU1VYYSs2\nMUw2ZEowbW5LZ0JXVnZOQTAzZm1aRWMKoM5Dj/mNrSERSCgZTobwMR5Bm1V6L3Yt\n104IQPfZaRv+eSNoKFv3mTL1C/sdRWR4wevQ5rvR8E/Y3CpymM4ZRw==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1sg0rvgyetdcqw7j2x983fh69kdkvqsngpe5x36e5920qa7fze3cqhj4wgx",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA2ZGtpZm1ZYmlQRzVId1Zk\nTTNCT0N6aTJzR01tSy9LWTdYbXh3Z0tIeEhBCmQ0QlhDRzdlSXFlWkQ4aXRNQk5m\nTUM2L2J6NzZoTDZpaG0rSVJrMTFsdlkKLS0tIFI0Z0w5dzJOV1orcFcrazdWcHpz\ncDR2MDd1UHdIUlgrblQwYnd4aWVvWVEKJ8U56ajnsWdp96ARKFw1zdLY7z5zhgFZ\nMnd+j5VpjIn2AtIS4w27A+2PX7x+ZysEnnE3K4ndX9nSAzk9shSxpw==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1swlyyk2rzvevqawyeekv75nx2dz34zpe3xqhkqme26gcgeavy4dqrfpcd8",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAxbXkvSERJZkgrM20xMW43\ndmFFWXFZVytwZm43SlkzUFM2dkZQdU9sZkQwCmh0bStPRDVOYnlITWdFdU5YNElk\nRk1uWjY0QTc3eUdSY1AyTHNTeFdHeUkKLS0tIE5MV21kMlBYbUIxMXJpZ1Y3VktI\nRU1jWVNEN2NCWi91ZHVHWk5CUnpVVzAKlS0amgC+dhZE6TExIGUURr/OhoudnZLf\nfpMXhkGbl5YsTm0Qeqaqu5bNo/XN+77e01WfDwRz+PYp7QXdhMN8XA==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1vphy2sr6uw4ptsua3gh9khrm2cqyt65t46tusmt44z98qa7q6ymq6prrdl",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvaUIrUHpINE85SVcxOE1r\nU3RnQlEwMERnbFIweEZiblhPdEE4YWFZaEJjCm5NVGJYL3pQMlYyS29xLzhtMUlQ\nUlJFTytkNmk1YWVnTFRuQ0licGptQUUKLS0tIGVkRnpWQ0FwUzhVbmRNTWNSS2Rs\nQ0MwMElRV09ROFZ2YjB5cnEybzJ1Z3MKeOo3uU9D9BDJB8m9cZccIj8zztbvGqYV\nSWvR5AxNLvcEkbNKvxcDRjQUSDLWhcjdcozs7JgjO5P7YlOnZNACmw==\n-----END AGE ENCRYPTED FILE-----\n"
}
],
"lastmodified": "2025-12-03T05:54:36Z",
"mac": "ENC[AES256_GCM,data:06949qq+AgyxgVLVx9ARvul77ypg8Kq3cqpFOWU/HARR1jgkf7n66SWTmVixkfHy5GqOJEBFQ0HYHzKkQ0BHr94se0bFlR5W+Md6pmDVH0sbnB4+leqR0I/1ZU7o6p3hj1nXlkUWRN6oM0wp0Hj3ClOPM5jZ6C44+cadswCQvGg=,iv:5TwgpN7waxevK8nnRaO/bunyjGNvFojXPPIPp1OrRuA=,tag:vycrcH1t7ZPsyqekae5Q2A==,type:str]",
"version": "3.11.0"
}
}

View File

@@ -0,0 +1 @@
../../../users/kurogeek

View File

@@ -0,0 +1 @@
../../../groups/admins

View File

@@ -0,0 +1,46 @@
{
"data": "ENC[AES256_GCM,data:eJkzZkzzof8qcmbDOirf37W6dw2ypoK5DZ0ONaQkrEeSb3m2qJPEjMPK+oLjayTrajLNj9/e/mbJ8h5odQoue/Wl2iOPw0RA6Z4=,iv:Jx354QB1tReAoeJLHEuEI32yp71vicCwUk61z90WI44=,tag:NotiMJPhArvFNNiXTNK33Q==,type:str]",
"sops": {
"age": [
{
"recipient": "age134vt63pjqpd0m7702fyn8vhdlzyj2deqc2q78sp9uw9052kxsgwq6d25ez",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBZYXJCdSs5Y3VWbE5TOEJp\nVmpuL2ZOYU5pLzgxMHFkMGtpZG1QZGlENVY4CmVKaERaeGVnUndONzIzWmdtTFcw\nNnNzSW5Zam90OE8xR3VEVjM4V3RGVWcKLS0tIEZSYktnS2xoZlF6Yk4wcVZweWly\nUHlOOE9vUmNYTHBTSytwakhaSnZ1VjgKxoUCSVgFXOKsyXUWe7z17WiUa2OpwImm\n5NV2PeQ8uOnMT0c7Iwl/VEsXbYbOtnW8VT5m/JcLIdlXCBqkQ/B8PQ==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age17d4qt0n9edq57tgcqyk8eu5mrendl59yt6z2y3a4vkq7el8krqtq6lq28g",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBrVjVmSXpwK3JOQ3Jvd1VT\nZFN6ZGlib28zSE9MN3dwYkN2dkpON29EV25RCjhyU0hsZmVmZEY1SVZXb09UeXlh\nWnROTGlGUFNLL2lsY3RhSTVjVE4zZUUKLS0tIGs4Zi8vMnZLUUE5TGJ3TmppMk9D\ncDVoYnl0MGpsbmdQeUYyUlRuM3htbTgKHRLMrPGg9FljvwmWOZUODER/hSsmUNaq\nZBVNml61LztfZMgGtp56VZ77XU1bVLREL1VFyeTwzjpbYggLbuRJpA==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1fido2-hmac1qqpf43tgcfjm048lsqskvq34w2t4uvrm5qy6m2eg6zjj82ctca8wctgpczxvj0q4y6337uhvsxdh5j86k9h9ymautpvv2759ucwnef75ez7pa7fpkddklp40mxk2tedsp74359g0kefn5rsq0x0yss6cu4yd0h06up0rp08t6yc4l0hfa9y8jn5fkx6nk0hjhz06ykwv0fyxe7z42q683jy0",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIHUveXJOK2dI\nTVJDamJzUWtmWlB1aVJCcmQrbElBaTRxYU1RQ1dUWG0wV1kgQVEgd0l6SlBCVW1v\neDl5N0lHYmVrajZzVzVTYjd4WVdNVjZoZVlkUEtmVXlMdyBIdmtoczF0dmhxL1py\nS1hsc0ErckdoVVB0bE02RGdCNW5raERXT1ZJMTkzNjRGNHd2T3ZSTVYrKzZlbEll\nVTZKc2JVN1B2SzRuNkpaekhwSWJQaFZVQQo3cE1ZOWtDNUlqNWJxNjdKbjVNTGk3\ncWZMVEpMM0RHbVpUQ09EZUtRd1drCi0tLSBpaHNkWDUvSkgyODlhZ1V4Si81b1NK\nV2NUVWdVbTNZV3dqalAvMFc0QllVCph57nPcAfs4fu9kKIJZ5q/ejeP5u9W+HzsV\n+dpVasMbA++RB9SDXuifRkNC4b18fKiiOfOcutT8saG8Fth8/PQ=\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1fido2-hmac1qqprw0vfpc8wzsu78quc777kmee54ln6nnsjrnrhl7nr33eh4kvkksqp05qqxj4kgfzrmrugrsvg7skx6ghh3q9xc0x0agthtkvy25d9eq7eklta5wf7s30hexkuyl5546rdz9ffa5tawlp5yweqkgccntw0ny540n2am3cqw3luhxkfmrp63kwr6mwplhr9u26wll48x0n3k5f60c7hg9a3",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIGdKVFRBazh1\nVzJuQkw3ZWZJNGhPOWZUeUJnS0o3MDlvd0hTRnZyWnRrR1UgQVEgZlFBRFNyWkNS\nRDJQaUJ3WWowTEcwaTk0Z0tiRHpQNmhkMTJZUlZHbHlEMCBtMzE5bzVQb1JmZkpy\nY0orbEs2RzBSVXA3UmZYZkRRanNnc2pHSnJjK1pLVmZOWGR4d0IwZjh1YXlkakRx\nTm5EMXR3ZjNHWGl0Ty8rcHpQbkcxRTZmZwplb0hlRElvQjBtaXR6cC9Ha1BhcnZU\naTZPakd2Z1JuMEZSWTdET2Y4cGVvCi0tLSBNTEZKNkI4ZGw3aFhvVDNCK2JWd0c2\nRkpENXM4OXpkQUJOWnNVZjJzYzk0Cic2m6ZalXUPRH2KjKUNlH3bV58NG0CMIgA/\njl1h5rGuFDLfuKiQehkOebf0k+Ndy1c2frJQ1wyM6Cs9OzLexqQ=\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1fido2-hmac1qqpyewum3q8dfcumfgec8nn958aec9f4q9aqy0k06kw5kq27d6fdqdgp0p7y4ru3n5xk90u747xevxa2af3v37e85j9g3axrmw5hdwdfh0wz22hut5vrafxsx26a7vh8fjwkymz3ramfgvvu4detztu075kmpr8l9ydqda0rnjwatdwmfgswg849p37astvld98s3nleeq575azlwc2hhpuh",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIGFmWXJhTGRa\nckliN1dQR2hEYzBFWlNFd2hEWktvejluQkNQbWVnWXRZQ00gQVEgZUh4S2o1R2RE\nV0svbnErTmxodXE2bUxJK3lla2lvajB3OXVwZHJtcHU5dyBKU3I4WFJnK3BOQXl0\nZDh5NTB5ZFlteFJIM2FVTVp5cmNyRXZqL1V0c0l6L0tSb0c5ZU9jbmRXMTIwb2c1\nQjZsREgzWUxaOXBUd2pQK2NncDZuUmZkZwpEQm9VK3BhbUpML2crSjdPQnk4aHJM\nV0pDUVZ6YmV1dUJzeXJBNkpDNmpFCi0tLSBWSWZRSWJGb1J0MGtXL1k4T1RVRWgy\ncnF5cCtUTXJKSFpCN1Q5alJxMi80Crgi+HtBO07LNKqN6RbRRzzjcrym+BkomFTT\na8ZLyCGECiAXoZ26GJ/RRjzru8S8VhArmy3uwa3mKpT5STkFYAQ=\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1hlzrpqqgndcthq5m5yj9egfgyet2fzrxwa6ynjzwx2r22uy6m3hqr3rd06",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAvMStWdXpIV254WjNzMERj\nRXdpSG5EMmd2cld1bWYzdXJLQVlVVnVUUG1VCmJSMFk3SGdacitLbWQwT0lvWm9F\nanhIcUYydGJzYXVYZm95dWM3aXdDVE0KLS0tIHM4TDBuT0RjSG1oUHdYT2RVMHBw\nR1pTY2ZnTXNvZ2tObFA1WFdWZGFsTkEKH30K1NjoZatx84XhIqSxAZwrYpZ8xQqF\noFkKzh3NZ5dp3xJEIIlpSX3mydyB1+THBtKlx0x7oyN2AudO3TE6Pw==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1sg0rvgyetdcqw7j2x983fh69kdkvqsngpe5x36e5920qa7fze3cqhj4wgx",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBPU3ptYnZxZVcrU0Y3MEdM\nb0hrTTBPYzNCYjhlZjNKSFdJRllGeDhVYUQ0CitYM1Bjb05lYW9adEh0VjVaU0l3\nWFg3NXVZamlkQ1ZLdGhQQ1ZiNmdhUWMKLS0tIDR4bVhxY3NSZ01yZnR1NzllMEwz\nRytWbi9BYnJFcWE5cW44R0c0WWpSQzQKeEjW8I/5XNhEs+FCJ4xtjxD60OMfB169\nQ6zBQP8E/yfTIva4dsLCdvRTB49ibsinfzZOyBQ+ICQPz3g8C3Lc2Q==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1swlyyk2rzvevqawyeekv75nx2dz34zpe3xqhkqme26gcgeavy4dqrfpcd8",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBpa0M3R1R6Q2wwazROZDN6\nUzFMYml4b2dNcWMycVNXNVIvQzhDUGZ3M2hzCmxKR1RhYTJkN2pnZjdwUW5PT1BY\nckpEeW5IcVh0ZklEVk1VOFkyZ0tDRGcKLS0tIDA0Vmx5NHhCWGQxZzAvOTBUWTFm\nYVlEdzlnWmpGM05XcTEvaVV5OFVNcEkKh2qhAWU+Hwz1Z+JAkirnGc6CMbykCOKy\nTyNxqzHX7z7o+8V+Oc3ChiuxSkruZQyajRgLdkrEZq/bnJDNfM0hgg==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1vphy2sr6uw4ptsua3gh9khrm2cqyt65t46tusmt44z98qa7q6ymq6prrdl",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBMTEttZ1dZYkhBRW1CVGdr\ncTNHTTFHUEZIVmEwV1YvSHgwL0NnWC9CaVdnCjRQWHoreldrZktsbFdCTEdLaXhF\ncTdWTlJGV3hZV0pBNUxyM0UrL1FIRUUKLS0tIGlpY1d2WXFSUk9WWUJ0RDdKUk9H\nL2p0cFNzQjhsYlRkd25RK0ZhUjlIKzQKj5vlI+K3D02AAC8j8Nn99EgOnEc2YRWj\nm3XTcyiCFTQDVMPWbUZXPelCIBLSPmksC1zLkWtlaWmOFkT/iLzWZg==\n-----END AGE ENCRYPTED FILE-----\n"
}
],
"lastmodified": "2025-12-03T06:48:44Z",
"mac": "ENC[AES256_GCM,data:dMYkl39sOxlSL4Bl0S2FTHdHaiRECJkIrBSfthnmT0/LxcYoFi4RM27pY09QFfS5Ohg1DC0Chs+hSBCLsVidSWJCvwyuF0ir4zKJZM7+KeyJFq51InhiqjLXJAMwh0BL8BnCiLcdlblbCCg1JKrlwfMrPl3dLYhi/a7DVWMXz6g=,iv:9WGXjfhrAoEtecJWG99cTZTs6i34AfmL3IkeefuJmJY=,tag:kKgB63Cj9sFjhPfJjEruXw==,type:str]",
"version": "3.11.0"
}
}

View File

@@ -0,0 +1 @@
../../../users/kurogeek

View File

@@ -0,0 +1 @@
../../../groups/admins

View File

@@ -0,0 +1,47 @@
{
"data": "ENC[AES256_GCM,data:XXV5r3FnMpt1rX8L4LtxLbNeEZ+tLkFeMQOTvyH93fRAEltE4Uszy5khsvyX9c/h33uxyGFQAymHUqSN8rBlBfbJ0bIf8DfoaJA=,iv:rYt5U/usIK7+glVjRclgCkNpQYwQoZ+UPSzanqbI9bA=,tag:c34l9laQnhQOZlV6bj9KCA==,type:str]",
"sops": {
"age": [
{
"recipient": "age134vt63pjqpd0m7702fyn8vhdlzyj2deqc2q78sp9uw9052kxsgwq6d25ez",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBmY0szY2IvRzhId2l3MTFI\nUjFrV0hEWXJIOGcvTmNoaDkvZDlrN0dlRWhnCm1CR2tBWFhJb2NyVndkZTlYWmg1\nUlJHVTkyVGdWZFVVSkZtUzZIQm9DRGMKLS0tIDJxVnB4RFRkWWZ0Y01VeFNIV0hM\nQlphalhKeDQySEVoWWdGNmRaWUhDbm8KnTdaaJsw3YqkjSDQREQuOjeHqKjMbw8q\nfgeetuG7tI/30tKgggTr48rk6mHVHoZE0JHugjYTt0mfoM8Dqct/Sw==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age17d4qt0n9edq57tgcqyk8eu5mrendl59yt6z2y3a4vkq7el8krqtq6lq28g",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvK0R0TC8zZVFkRyt0cEJa\nam9XNk1oenZ6d0lyd0l2cVByZW85TDR6R0NjClFKeXp3ZzFrUU5vQ1dhczRtbGRN\ncVd0dm5uQ1NIeFJneDNXcEwwb3JkWDAKLS0tIGczcEhEWlFBTVJYNWxLMHhCUDY2\nRFhZdEN0NEJHRHpHL24wdjdNUEVmWDAKYVTOGiD/4zZ8ME3F931LDzjoloy6JESj\nGVcgg1ISR/GMeYGxqTGxTQhHVVXv0+djdTnK+RAg2wUJy0VbFTzqTA==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1fido2-hmac1qqpf43tgcfjm048lsqskvq34w2t4uvrm5qy6m2eg6zjj82ctca8wctgpczxvj0q4y6337uhvsxdh5j86k9h9ymautpvv2759ucwnef75ez7pa7fpkddklp40mxk2tedsp74359g0kefn5rsq0x0yss6cu4yd0h06up0rp08t6yc4l0hfa9y8jn5fkx6nk0hjhz06ykwv0fyxe7z42q683jy0",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIFh0UzRLMXhN\nL1Z0QWJxaEVFRDQ5YnQwRGFLdGNzSzQydUJXbVpDTE1sV00gQVEgd0l6SlBCVW1v\neDl5N0lHYmVrajZzVzVTYjd4WVdNVjZoZVlkUEtmVXlMdyBIdmtoczF0dmhxL1py\nS1hsc0ErckdoVVB0bE02RGdCNW5raERXT1ZJMTkzNjRGNHd2T3ZSTVYrKzZlbEll\nVTZKc2JVN1B2SzRuNkpaekhwSWJQaFZVQQpmcGdiQkVKSUxQZkJzbEVhay9rVlZS\nV2ZoNmg2WS9aWC9zbGYvdDNkUDlBCi0tLSBqWHM5alJISkNWaE4rcXV0OTZPU1Bh\nY0tFWFl5MnB4L3VrZFREVW50UFkwCqW2sa+4LVWIwcZT9xJ0evJsBva3Lmpcj2SF\nV9YHl7EmGb4pJBslgYUFMQkvTr0/w9VC545YLP3ECn9loC3hzxM=\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1fido2-hmac1qqprw0vfpc8wzsu78quc777kmee54ln6nnsjrnrhl7nr33eh4kvkksqp05qqxj4kgfzrmrugrsvg7skx6ghh3q9xc0x0agthtkvy25d9eq7eklta5wf7s30hexkuyl5546rdz9ffa5tawlp5yweqkgccntw0ny540n2am3cqw3luhxkfmrp63kwr6mwplhr9u26wll48x0n3k5f60c7hg9a3",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIGxOOVVrK1ZR\nWjFIcmpacjhUT29LRzlBcENjaWVKWW9BZzdVYUZDWFRIM1UgQVEgZlFBRFNyWkNS\nRDJQaUJ3WWowTEcwaTk0Z0tiRHpQNmhkMTJZUlZHbHlEMCBtMzE5bzVQb1JmZkpy\nY0orbEs2RzBSVXA3UmZYZkRRanNnc2pHSnJjK1pLVmZOWGR4d0IwZjh1YXlkakRx\nTm5EMXR3ZjNHWGl0Ty8rcHpQbkcxRTZmZwovWlU3RE5aMlczZlJocll1MDZlMG1Q\nSm9CZGZ4TjdYaCtDd04rcjdzQUE0Ci0tLSB3YnMrVGowTUFoNmlzYnRVbTU0dnFM\nb2tuVW1OanYwZm0yTVV0WlZkS21zCmRJ7ij8d36hIM0ZotpU/+ooyWKkHYSgRILa\ncm3F97UZGQ/TkNVaJvMlm7IlX4g/6hONDb41me4/29EmJsJHhKs=\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1fido2-hmac1qqpyewum3q8dfcumfgec8nn958aec9f4q9aqy0k06kw5kq27d6fdqdgp0p7y4ru3n5xk90u747xevxa2af3v37e85j9g3axrmw5hdwdfh0wz22hut5vrafxsx26a7vh8fjwkymz3ramfgvvu4detztu075kmpr8l9ydqda0rnjwatdwmfgswg849p37astvld98s3nleeq575azlwc2hhpuh",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIExBUmFLZlNY\nK0tHY2NSRzZtR0Rwci8weWphekM2bWZvTGFEREdzSG5pQTggQVEgZUh4S2o1R2RE\nV0svbnErTmxodXE2bUxJK3lla2lvajB3OXVwZHJtcHU5dyBKU3I4WFJnK3BOQXl0\nZDh5NTB5ZFlteFJIM2FVTVp5cmNyRXZqL1V0c0l6L0tSb0c5ZU9jbmRXMTIwb2c1\nQjZsREgzWUxaOXBUd2pQK2NncDZuUmZkZwpsRU1ndC9FekMyTDMra2dYeTlDZFVC\nTURLTG1uMHQ1ZlBEL3ZadnF2R2k4Ci0tLSArWFoyRFdzeFh3cEd3L1hKT3B5a2xS\nQjFEd2Y4NzROTDNmWlYxK015TFRjCjbR7wDmMMuCZpzMq4bbKJNj5P0OH+GclyvT\np84RX7o2CzmlJQXmYwLkv6FICe7U904QURuhPywyU0RXGhKUqhM=\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1hlzrpqqgndcthq5m5yj9egfgyet2fzrxwa6ynjzwx2r22uy6m3hqr3rd06",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAvVVU1M1M3VURheitScDRw\nbGhETlhUOXdPVVptUGgrUkM1QnRrckJCZERnCkhyY3dhSnJ3a3VDWEs1L3RrQVJl\nOHI0OXBJY2dDQm1vOUFpMzJQcGV3cG8KLS0tIEZ1SHdweDJkV1owRE9RanR3cTd3\nMWFlSDJuMHR1bXVHc1dNODlJejQ5N3MKhKq69LY9/9PXKm3TlsWHYW8PbMgWwgWQ\nUAC4WqLvKYk/MAbKbMOVr/TfrRbkrFJtbP1H0X6A7yzIrAXnsPfyRA==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1sg0rvgyetdcqw7j2x983fh69kdkvqsngpe5x36e5920qa7fze3cqhj4wgx",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBzZGJQTkRFcUh5SEM0Ritx\nLzNhNWxSL3g2Zm1kNUtmT1AyZ0VzOGh5eHhFClJmcm41Q1BFUVk3cWZ3d0VxV21X\nVmFKSzRkeTVWMzMzZzJIeXNDcWJFNkkKLS0tIDYrbWF3Z253ZDQxUkF5dzdGSlJW\nRkxReGYyV0tTcHJQR2JwUVdBL1I5TzgK5kZPf+5N0P/NeuqpQ04Lb8Sme+bocqYk\nk9Ld7vFSxXyjTTnhwKGv4+q85IkDq1xGLj+7iM7QfRfpZS6tBpKJjQ==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1swlyyk2rzvevqawyeekv75nx2dz34zpe3xqhkqme26gcgeavy4dqrfpcd8",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA4U0VWYlJKM1JYOXRoU09r\nUjhzalA5aHRCVTVZWXBmODJZZnAvSEI2MFI4ClZEeGh6WnZsNUtTSW9lU0xnL1kx\nbDV4UGIvVXRra2VvdzJwNFdINmdlT00KLS0tIDJwMnpCWVVkVmtYVmxSNXJqNkYz\nM2lCbXQ5VEd1RE9TREF0WllGRWFjeFUKouFFBKiW7JQ+c41t5hwnBndUKZKhdwpm\nYCzF7/2YlZtNYdxip1+lZ5YEqyaXygcOZBjjZ/4s1B7ihEscQskLhQ==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1vphy2sr6uw4ptsua3gh9khrm2cqyt65t46tusmt44z98qa7q6ymq6prrdl",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBidzFMU3pQRm1HL3IvS2NJ\na1ZjcFhyRTljb1lQeXhjK3BBN1htdjhCUnpRCmM2MnJEeE1UZ3N0RDRvRitLMndX\nZXpWNk53d3FXWjA5Nnd1Vm5idEg0Z0EKLS0tIC9RaXE4ak1tOXMzU3dsZWh1MFR5\nQnlqTnBGY2pMd0dZYVpGdHRaTzFuTmMKqixum2H5jyBFdxdXAVlLZ4Wn5ZfeUJNR\nnNNsDNsjMctBn3gbtGHkx2wEnlKS4a6jbk01wVdSeyOFWlR9KKXF7g==\n-----END AGE ENCRYPTED FILE-----\n"
}
],
"lastmodified": "2025-10-17T10:23:57Z",
"mac": "ENC[AES256_GCM,data:xVNbw/RamaR6701df6IHPGjGDoYsZH7gwOWeVpb8A8VoaxYNHQVnRkV6jL58AQqI4DR+HisrpkBoN4Ui9o8t5u7PRbGyjUgUr6tvuwh4MMpk+osUmlH8eNdzi0W3SarhFZIWtcSHkLuhOj92yk0qd+W3TmWd3iMCrdVpkDe2kU8=,iv:uuUYoGcDQTZu/vGgVkt0x4QMQNkcNWCcwOlM/XQBx38=,tag:J49wr+on3MJdlNASbr+tMg==,type:str]",
"unencrypted_suffix": "_unencrypted",
"version": "3.10.2"
}
}

View File

@@ -0,0 +1 @@
../../../users/kurogeek

View File

@@ -0,0 +1 @@
../../../groups/admins

View File

@@ -0,0 +1,46 @@
{
"data": "ENC[AES256_GCM,data:lc5PP4xpLq/JXq2LkG/5zkEY5luxKC7EZHx0s6exiwd+UtuGb5rjIOq0kUBFuJWYFWduqcvNS62kR76oQpRfmjIkq2t02NxZ1lA=,iv:eZsHK9u5Rvt886Elz7Vm+PMD8urm1UyoNbNNwnlJtj8=,tag:inCrDdsNmLb+L+LpF9k4Ag==,type:str]",
"sops": {
"age": [
{
"recipient": "age134vt63pjqpd0m7702fyn8vhdlzyj2deqc2q78sp9uw9052kxsgwq6d25ez",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA0STRlY1h1NTVUdDJRM1NO\nc1hacUg4TUtlK3Y0dVZqaE5LdUlqMkFKNmtVCllTYXFHdXM0NVdUejhHZWM1TnVx\nUURvd1JrQmR2K0N3RlZIS2d0RFhTRUEKLS0tIFp1ZlJSNmd2V3dpN05LYWh1VHNC\nbFNkdkY1aUhTZmM1R1FKUWlGWThSdE0KYxgpuknCD07awfN85PkaJjPohYyqT1wL\nbjUcGo6TmFQKIgEzTzNj+in1dm9wz0AnYl1teiHa9WjK/Udd2BANBQ==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age17d4qt0n9edq57tgcqyk8eu5mrendl59yt6z2y3a4vkq7el8krqtq6lq28g",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBCd2Z1aTFYenowSnczWk05\nVEZ3d0FUNFNkV3RlWlpFWk5jd3QwazVES0ZVClVjY0Y2eW1hSGEraVVpSjdoaHMr\naS9lWFUvbFl6Nzd4U2l6dUhXRHBlT0kKLS0tIFNCYTlSL1VnNURBQUxoYVozODZw\nVVRkVGVINTV6SXExN3dCT1JmRmNFdlkK+jNS9cUz4TzBBzrtxuYcoiEmxKcRNTlt\nqksdFqnPWzKI+edJSWq3rkBYeuI7c4wmxTtsgVtHbv2jwbD1kJar1g==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1fido2-hmac1qqpf43tgcfjm048lsqskvq34w2t4uvrm5qy6m2eg6zjj82ctca8wctgpczxvj0q4y6337uhvsxdh5j86k9h9ymautpvv2759ucwnef75ez7pa7fpkddklp40mxk2tedsp74359g0kefn5rsq0x0yss6cu4yd0h06up0rp08t6yc4l0hfa9y8jn5fkx6nk0hjhz06ykwv0fyxe7z42q683jy0",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIGNxVDh0SWNL\nOUt4TG93eGVjaUxzczhnVjNYRlB1Vy9haWxjYnN6aGI3ejQgQVEgd0l6SlBCVW1v\neDl5N0lHYmVrajZzVzVTYjd4WVdNVjZoZVlkUEtmVXlMdyBIdmtoczF0dmhxL1py\nS1hsc0ErckdoVVB0bE02RGdCNW5raERXT1ZJMTkzNjRGNHd2T3ZSTVYrKzZlbEll\nVTZKc2JVN1B2SzRuNkpaekhwSWJQaFZVQQpxSEtwcUxGcVY3RzNjR2REYmdrRWV6\nYWJyTjhXMVNtVFVpczRDc2dDaHRBCi0tLSA3NUVyR3YvMnVsd0l0TXIxQS9odUZO\nZnJWV0MvRlpwU3luNm9FOGtDNkhzCm/yGJJvQf5qvBRyGLrmCeiI31qHr+JoZ2Av\nbqMUeg3Vv82ffTLT6GX+JjiG0wQFcYAX3/k0noVN9JMR/boiWIc=\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1fido2-hmac1qqprw0vfpc8wzsu78quc777kmee54ln6nnsjrnrhl7nr33eh4kvkksqp05qqxj4kgfzrmrugrsvg7skx6ghh3q9xc0x0agthtkvy25d9eq7eklta5wf7s30hexkuyl5546rdz9ffa5tawlp5yweqkgccntw0ny540n2am3cqw3luhxkfmrp63kwr6mwplhr9u26wll48x0n3k5f60c7hg9a3",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIGpMZ3JmMVFy\nU3AzeEFFa3B2TGxSL1NlQjhSa28waGtLQUlFTkp4N0hVeEEgQVEgZlFBRFNyWkNS\nRDJQaUJ3WWowTEcwaTk0Z0tiRHpQNmhkMTJZUlZHbHlEMCBtMzE5bzVQb1JmZkpy\nY0orbEs2RzBSVXA3UmZYZkRRanNnc2pHSnJjK1pLVmZOWGR4d0IwZjh1YXlkakRx\nTm5EMXR3ZjNHWGl0Ty8rcHpQbkcxRTZmZwpYVDJSdCtnVHIzVXhSQ0lXRzE5dlJo\nS1NHa2F1WEpJK2xJQUQwa0RNNCs4Ci0tLSBBdmpiZGVSOWJwanRiUjUxT3JMT0VT\nM2k5bE0zOW5SVWg2ZGw0QUVvcWVrCrc2TjHS6Pp38MTPU9H59q2seVYlESH80V4+\ny1/qjB6fK8lnnyi5TLrSo+M9MAcG5T4EGvCcAPuzjTvF/DO7hxk=\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1fido2-hmac1qqpyewum3q8dfcumfgec8nn958aec9f4q9aqy0k06kw5kq27d6fdqdgp0p7y4ru3n5xk90u747xevxa2af3v37e85j9g3axrmw5hdwdfh0wz22hut5vrafxsx26a7vh8fjwkymz3ramfgvvu4detztu075kmpr8l9ydqda0rnjwatdwmfgswg849p37astvld98s3nleeq575azlwc2hhpuh",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIC9jZllPWWhO\nV3pDa1MxSzF2ejRJMXJBWDlNMzZqcG1JdVB2Y0xjMlJKeGsgQVEgZUh4S2o1R2RE\nV0svbnErTmxodXE2bUxJK3lla2lvajB3OXVwZHJtcHU5dyBKU3I4WFJnK3BOQXl0\nZDh5NTB5ZFlteFJIM2FVTVp5cmNyRXZqL1V0c0l6L0tSb0c5ZU9jbmRXMTIwb2c1\nQjZsREgzWUxaOXBUd2pQK2NncDZuUmZkZwpwSUdWWlFFbW55aXVkZ0pSeUVPRkF2\nTm5tTnkrTGNmcEdoWE1UckwvcXFBCi0tLSBnN1J1VlQvVnRXbkEvOWtLbHhzVzNN\nU01XVkpRNnd4bCtYb3poNjR4bno4CirmDl+6Kebk0jMjgRp00d8kpkzGtQFsZNht\nm5MPBM+FXVzpDcEWQGUlLr50yDKYVzHdIeeuGsWZ3KaI1GM8pdg=\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1hlzrpqqgndcthq5m5yj9egfgyet2fzrxwa6ynjzwx2r22uy6m3hqr3rd06",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSByOEQrR1Z1K3RETGgzVi9H\nNXIzUW04UHFCMk5vQVZEN0taRWJwV040Q3h3CmpaVWV0WDZNemFSTHF1TTF4YXI3\nL1loMnA5OUNCbE55aGUyR2EwbklaczQKLS0tIEpnTkkzNStsNmdNS01HWDhXY2s1\nZ3hMNXA1dXUxVmxucTdtbWN4akQ2MTgKAolaT+61/BN/yzljENx7YZTrFRGA8zwN\nsquQs9vnFS8yduVMoaemXrCLTpiQ1KGCAWVX8pPtY8+GV9YKLZsV7A==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1sg0rvgyetdcqw7j2x983fh69kdkvqsngpe5x36e5920qa7fze3cqhj4wgx",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBtTlNuQXN3VU9TVTlQd01N\nYVBpN1BxcjRLYWN5SUg3TlhUbHl0UzkrOWcwClZ5OHpOcGp6V2craFBkWCtwcktp\nWDZYYWR4ZjVhaVNPdEN4WmZ0UlJqR3cKLS0tIEx2WXdQL0x1Zm5rRnJGMmJQWFVW\nNW1nMFlac2lyY1ZuOW9OZmNWSjJxbTAK72xqJBlpV3UWAFhGlUjudEILQSnGDhQm\nS4U51sUc8rrUZLlmAivWg1nxCUAdrhLo/r9OuITR6QX9DeFsaeR9uA==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1swlyyk2rzvevqawyeekv75nx2dz34zpe3xqhkqme26gcgeavy4dqrfpcd8",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB6WmVUUDJ0V2sxS0Q1UFZv\nWldFK0tRSlViUkc5aXFTV0JDdDFVbVVXR1QwClUwLzg0eTAvbUtaTVRFV3ptZkJQ\naDR1REl6MXZ2cDlsZzk1SVI1N3pocGcKLS0tIFlUbGFPUXAxWVBvNXhjZ2QzWGNh\nWTkrMklIQnl2T3ZYL0Q1c3JOTU85bkUKL4h+PDQSnVbls8iuioUHTBVpVh5Yhhx5\nrK9ELFCYGPAVzbx5cFoOapnIJcTQUAPZdBpmlm7kgRmMLXptMdGkGg==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1vphy2sr6uw4ptsua3gh9khrm2cqyt65t46tusmt44z98qa7q6ymq6prrdl",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBFZ3lPeVJyZUF3cVEvWnhH\nbVBwRmxaQUhaaExQSVRyeVJNZVFSRkFrU25NCkZDcklIcU5TQWplQkE1ZkFTUXB5\nLzZ0VFlEdks3OWpGM0JMSi9ZOVNndnMKLS0tIG11UFZkdWRYdHZJNk9TSDYvaHcw\nQUk1dGxIOFhwaXJZaEZNdVppWWlpdUUKQJ/UjgWIaeKa4o2El4cFkwv+O0bi9SOp\n13XExCNLB+BtwOGPREWbrmW/Z15c8koBEyrW7iuIhu0Pgz95oAF2Sw==\n-----END AGE ENCRYPTED FILE-----\n"
}
],
"lastmodified": "2025-11-26T06:08:15Z",
"mac": "ENC[AES256_GCM,data:ovjPl0pJ6DSJGjGz+Zt5GLbwu3ZTMwOKNSsYxIx1NcjWAiGYpPNFcFrD5OBciVQ2K7VxlRoWW5WqbJt7mrvQXDO69LxvQqiK1+qHeFJOHRd6Sp29fRA1aqEz+kOif0SSzaEkHOXAp1kzk31CnEfIG2j5yQ3oMyrSqNnhnVrx6F4=,iv:NdeCrqNo5SV1Npu8aqPJcZDhPMGfUviyBQi2CUjYZOM=,tag:yM6P7P2vLUMs9GdT284Gvg==,type:str]",
"version": "3.11.0"
}
}

View File

@@ -0,0 +1 @@
../../../users/kurogeek

View File

@@ -0,0 +1 @@
../../../groups/admins

View File

@@ -0,0 +1,46 @@
{
"data": "ENC[AES256_GCM,data:nb/jvXhD1eQqAWDgmfLlLvuzNbftonrkwrpGNBvbxTKIy0nhB84o03LIgBZbtCDR2q0MkyKe4w4FzY9WvCJCteCoGsuOSkBa86o=,iv:+mBkcXbZxglL2NfzSWUROZacNuvIZfMFmJec82zhf7U=,tag:gtjTQ4CztEqDUbCxEpo7fw==,type:str]",
"sops": {
"age": [
{
"recipient": "age134vt63pjqpd0m7702fyn8vhdlzyj2deqc2q78sp9uw9052kxsgwq6d25ez",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBIMW9qRGl4N1NVTlRubmR1\nUXRlQ2NqR1NZaEhGanF2Vk9uZWQvcG5qMTJFCm14ZDFxRWJpakNHTmxsTXBiN1JI\na1FiOU9rR1Vrb3NzbURQcTJVb1h4YU0KLS0tIEV0OS9vQlhsMVMwUmJHcXZITDYw\nUzZWbG1iTzk3LzB6V1Z4YzFYOWpkT0EKiQINdNMEuGIIzY50seuRcwb2s3TdgELP\nYkIJ5GBseK3Q3nVvIyNhuU0bCaVSFnxuTazeygMAKjhW22y2/ui4Wg==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age17d4qt0n9edq57tgcqyk8eu5mrendl59yt6z2y3a4vkq7el8krqtq6lq28g",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBONU9hUkRIT3Q0TnNGcC9v\nTVM5YWtyMjYvL29ZTDFqRzlYU2FUTXkvUjBvClNXdk93K2t0L0wvdDgvT2lTTTVX\nRDUwYkc3aGwvT2xFcmZlNXRtdFdZOUEKLS0tIGIwc3FpRXdNQlpQTnhVM1M4YS91\nZXYyL08wa3EvWlB1MDdWVWVORUIyTFEKP2w2cG4d/AE7XrbcscaEIVJ6XQG9FXHY\nNKgBjpGZONp8dEYeuJ23nel5AO3+sm0EN/DsuqoWo2dJCHp4ZXkl7Q==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1fido2-hmac1qqpf43tgcfjm048lsqskvq34w2t4uvrm5qy6m2eg6zjj82ctca8wctgpczxvj0q4y6337uhvsxdh5j86k9h9ymautpvv2759ucwnef75ez7pa7fpkddklp40mxk2tedsp74359g0kefn5rsq0x0yss6cu4yd0h06up0rp08t6yc4l0hfa9y8jn5fkx6nk0hjhz06ykwv0fyxe7z42q683jy0",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIFV0S2pYYTFi\nc0IyVXZwMUliQWVwdjZnQmNwSjJTd0dRMisxVmsyM0ZpV2cgQVEgd0l6SlBCVW1v\neDl5N0lHYmVrajZzVzVTYjd4WVdNVjZoZVlkUEtmVXlMdyBIdmtoczF0dmhxL1py\nS1hsc0ErckdoVVB0bE02RGdCNW5raERXT1ZJMTkzNjRGNHd2T3ZSTVYrKzZlbEll\nVTZKc2JVN1B2SzRuNkpaekhwSWJQaFZVQQpaeW1RNzhmbjNkNFFZN2FqRnRZc2tS\nZWRlQ0hPZlBsLy9ocFFFY2tiYmtBCi0tLSBFQVNQRzhQblJXSmQyUUYxOEw3UjNV\ncG41b3h0MjhaYXU4SlpQZE5YLy9zCmKxo/IAczzcmAnYhYh29gS88lQEVgoNWMGt\noqldqIgarW2yKSqlbnJYRg60yohiYNn34aHKlNVNPhm7NhfZ6y8=\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1fido2-hmac1qqprw0vfpc8wzsu78quc777kmee54ln6nnsjrnrhl7nr33eh4kvkksqp05qqxj4kgfzrmrugrsvg7skx6ghh3q9xc0x0agthtkvy25d9eq7eklta5wf7s30hexkuyl5546rdz9ffa5tawlp5yweqkgccntw0ny540n2am3cqw3luhxkfmrp63kwr6mwplhr9u26wll48x0n3k5f60c7hg9a3",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIFRVZmluZ0JN\ndnRvSFZZeWR1aytjT3oveUdZTTRDZnhOaG51Ym1QditvVTAgQVEgZlFBRFNyWkNS\nRDJQaUJ3WWowTEcwaTk0Z0tiRHpQNmhkMTJZUlZHbHlEMCBtMzE5bzVQb1JmZkpy\nY0orbEs2RzBSVXA3UmZYZkRRanNnc2pHSnJjK1pLVmZOWGR4d0IwZjh1YXlkakRx\nTm5EMXR3ZjNHWGl0Ty8rcHpQbkcxRTZmZwpGNi9YaDJWR25rYm1YSnF1bXp1enRU\nQWMvaGlwSEY1L0FLeGN5MjdzS2RJCi0tLSBEOStqZzVZTmQyR3dOZWpoazcwaXFo\nU1RCU29LRHNUaVl6dWd0YTlFaVNJCn7iNwdtKkrQC3e8JzWP1vrt1uMtaYI1FmZC\n/Tug0VKBcShMjmi0MaM2jA6Bo2rHmxQPZTVa4x4myjB1ZwehmQk=\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1fido2-hmac1qqpyewum3q8dfcumfgec8nn958aec9f4q9aqy0k06kw5kq27d6fdqdgp0p7y4ru3n5xk90u747xevxa2af3v37e85j9g3axrmw5hdwdfh0wz22hut5vrafxsx26a7vh8fjwkymz3ramfgvvu4detztu075kmpr8l9ydqda0rnjwatdwmfgswg849p37astvld98s3nleeq575azlwc2hhpuh",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIGwxK0E2K1Zu\nZHo4ZlQwejVoaXRWUEZ0MGxteURmcGIzdjZjNVFsZVFQMDAgQVEgZUh4S2o1R2RE\nV0svbnErTmxodXE2bUxJK3lla2lvajB3OXVwZHJtcHU5dyBKU3I4WFJnK3BOQXl0\nZDh5NTB5ZFlteFJIM2FVTVp5cmNyRXZqL1V0c0l6L0tSb0c5ZU9jbmRXMTIwb2c1\nQjZsREgzWUxaOXBUd2pQK2NncDZuUmZkZwo5MG02bWxaSmttREozSTNKODk4ZDhS\nZGxtcXhmQnV3YlgybG1MUVRUSUUwCi0tLSBQdUloWE8yMFpQN0NTYWg5cWQ1UzRZ\nYi9VYklCNGlTb2JIUUxPaXJZWGxRCi64TvD9BnC41+HbBI1lIqG8uAr8UnDMvuUy\nEHPAIcvPWbO2WahxEUcL4hBcK81pa3XaQOWo/qRbAHv5fKIA26w=\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1hlzrpqqgndcthq5m5yj9egfgyet2fzrxwa6ynjzwx2r22uy6m3hqr3rd06",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA2b09RdU5jcGRBRHBJREhy\nOU04MTVwZm5TNVUrVmNTUkVtUUJFWGd2aGpRCnBYQ1Y2SnJBbHhaNHJxOFVHM0dC\nZzMyUndHM1M4bTFsOStna3JXM1lVaVEKLS0tIFdnNG9WdzB6cUoxdmV2aTBhVDIr\naDRFQ3JsWlUvNTRRdHNpWVkyb0xWYWMKXSnCes/5K8Qw1WHbxPhL63G+yKtwxnhn\n9fXqnemlQJoscBy1mrpxXYXM6mFl4tnEAh1hB00z+n1AFZS91EwRxg==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1sg0rvgyetdcqw7j2x983fh69kdkvqsngpe5x36e5920qa7fze3cqhj4wgx",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvSGRHbHhyVGE0NEFLbFpn\nM2E3WndLT1oxSVZnOHRiNzVMaFlpL3VhY1ZRCkhyTFdqQk1LM05HZFQrOFd4Y08y\neVgvUk1lZ3dqRzh5OTFLajNlUk9hNXcKLS0tIGdMSlRHcEw1Y2ZFQ1JyTHZ1NFcz\nMzJXNEtaWEswSWdCZ3BLYVVja01DbUUKr/n9DLCjKBYac2+dAk96Snx78qeQAxwN\nnGJf9z3i5NRtN3Kapbrt2vPN7c590YiSTgYdiEEb3oq89g5Ya3hNnQ==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1swlyyk2rzvevqawyeekv75nx2dz34zpe3xqhkqme26gcgeavy4dqrfpcd8",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBURi9aRE9jSWI5OFhYRGkv\ndDBIWng5Z2hFWllXdzdkY3NlbWtLMkppc1hZCndTSW9nTFlITzY2aHcwY3dLcTNT\naTlwb1E0c2p3dFcyUzhOcFlLdTdPNDQKLS0tIGx4ZWREalkzNXpIMTFmR3l0cXkx\nRXFnT2JEYWs4VHd6VUtPbXlGSURUTUEKgEkcgDhB/OdJrAfJ5hZohZ0OU4VNXraZ\nvIz5inx8I+/6r46qMoJat3BIcN5IRllHc/iMBPRq+n7EPtaceEZBhQ==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1vphy2sr6uw4ptsua3gh9khrm2cqyt65t46tusmt44z98qa7q6ymq6prrdl",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBPRERSVWlnT1lQMDZGcTQv\nV2MyZ1F5MGN2WE01ZVhoNTdHMnZROWRpMmhvCm9UQ1pzRjNpdS8wRklTUnV2MlR5\ndzNFVy9SM2hCR0J5d3JkbEVTOFp6OE0KLS0tIGNqNVZtV0dZQ3ZpU0lmK2JsMzNY\nZkMwVWZYN2MrZUtVN0dacjBXSDhZYjQKbtg1xpYwEfH6hArFQ5w7UBja00sYnDte\nQLE6FksPXv6RPxICQ2+bdhEh/QwmGYDAX+8HnYx5GNs54iUnnj3nDg==\n-----END AGE ENCRYPTED FILE-----\n"
}
],
"lastmodified": "2025-11-10T05:07:06Z",
"mac": "ENC[AES256_GCM,data:WLgG9s2UEZ5pySqjGWHVGCeeKI4dZbSoUuBNzqw/D1c4XtK5RS4Dy0iKSDziI+GcIXyfmG4DhxXuUdNLffAKSb8pSu6nvhlAlX+q7fM18GmAXkD/TwrIr7AUvjWXZicIcLvlZ5mEkkj6lrWe+IyA8xJBcFjLji6lwNewBz3PoeM=,iv:PkKt8d732tY289IjCEprlgnUvC3Vt9/1GYSYjlSlLi8=,tag:RZecNrF9NHuwxZbCGUSllA==,type:str]",
"version": "3.11.0"
}
}

Some files were not shown because too many files have changed in this diff Show More