Compare commits
24 Commits
mob/invent
...
6a4eeeb34b
| Author | SHA1 | Date | |
|---|---|---|---|
| 6a4eeeb34b | |||
| 701f815a01 | |||
| 188c893e97 | |||
| 3a4253cb67 | |||
| c9ec7371f2 | |||
| 39a277a075 | |||
| 79cad87f43 | |||
| 6312ae3587 | |||
| b6297c2d8e | |||
| 7067fd43c4 | |||
| 36ff92a984 | |||
| 62e4ea61e0 | |||
| bba1858c6a | |||
| 58bd02575f | |||
| 5ecff1bc9e | |||
| 7a381a310e | |||
| 36c31507e2 | |||
| bfea371501 | |||
| ff0bc698d4 | |||
| 11c109970a | |||
| ad95a8710c | |||
| e6760d320d | |||
| bfeea4156b | |||
| 3aa93c1333 |
48
flake.lock
generated
48
flake.lock
generated
@@ -20,11 +20,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1761768376,
|
||||
"narHash": "sha256-AZL8SPJ520NRnLft9Xz4trTECBB510YPRXJnE1OUeXw=",
|
||||
"lastModified": 1764792743,
|
||||
"narHash": "sha256-MbbiNG/bhqe+4z7ml8TefIs4swSonmiV0CimCntXuCg=",
|
||||
"ref": "refs/heads/main",
|
||||
"rev": "bbc9486f0e6306f68e11f8aefa243da9f1c8c56f",
|
||||
"revCount": 10924,
|
||||
"rev": "ddc0f9fabf33ad000676a33e97be6b5df12a4560",
|
||||
"revCount": 11417,
|
||||
"type": "git",
|
||||
"url": "https://git.clan.lol/clan/clan-core"
|
||||
},
|
||||
@@ -49,11 +49,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1760612273,
|
||||
"narHash": "sha256-pP/bSqUHubxAOTI7IHD5ZBQ2Qm11Nb4pXXTPv334UEM=",
|
||||
"rev": "0099739c78be750b215cbdefafc9ba1533609393",
|
||||
"lastModified": 1762942435,
|
||||
"narHash": "sha256-zIWGs5FIytTtJN+dhDb8Yx+q4TQI/yczuL539yVcyPE=",
|
||||
"rev": "0ee328404b12c65e8106bde9e9fab8abf4ecada4",
|
||||
"type": "tarball",
|
||||
"url": "https://git.clan.lol/api/v1/repos/clan/data-mesher/archive/0099739c78be750b215cbdefafc9ba1533609393.tar.gz"
|
||||
"url": "https://git.clan.lol/api/v1/repos/clan/data-mesher/archive/0ee328404b12c65e8106bde9e9fab8abf4ecada4.tar.gz"
|
||||
},
|
||||
"original": {
|
||||
"type": "tarball",
|
||||
@@ -88,11 +88,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1760701190,
|
||||
"narHash": "sha256-y7UhnWlER8r776JsySqsbTUh2Txf7K30smfHlqdaIQw=",
|
||||
"lastModified": 1764627417,
|
||||
"narHash": "sha256-D6xc3Rl8Ab6wucJWdvjNsGYGSxNjQHzRc2EZ6eeQ6l4=",
|
||||
"owner": "nix-community",
|
||||
"repo": "disko",
|
||||
"rev": "3a9450b26e69dcb6f8de6e2b07b3fc1c288d85f5",
|
||||
"rev": "5a88a6eceb8fd732b983e72b732f6f4b8269bef3",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -162,11 +162,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1761339987,
|
||||
"narHash": "sha256-IUaawVwItZKi64IA6kF6wQCLCzpXbk2R46dHn8sHkig=",
|
||||
"lastModified": 1764161084,
|
||||
"narHash": "sha256-HN84sByg9FhJnojkGGDSrcjcbeioFWoNXfuyYfJ1kBE=",
|
||||
"owner": "nix-darwin",
|
||||
"repo": "nix-darwin",
|
||||
"rev": "7cd9aac79ee2924a85c211d21fafd394b06a38de",
|
||||
"rev": "e95de00a471d07435e0527ff4db092c84998698e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -177,11 +177,11 @@
|
||||
},
|
||||
"nix-select": {
|
||||
"locked": {
|
||||
"lastModified": 1755887746,
|
||||
"narHash": "sha256-lzWbpHKX0WAn/jJDoCijIDss3rqYIPawe46GDaE6U3g=",
|
||||
"rev": "92c2574c5e113281591be01e89bb9ddb31d19156",
|
||||
"lastModified": 1763303120,
|
||||
"narHash": "sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=",
|
||||
"rev": "3d1e3860bef36857a01a2ddecba7cdb0a14c35a9",
|
||||
"type": "tarball",
|
||||
"url": "https://git.clan.lol/api/v1/repos/clan/nix-select/archive/92c2574c5e113281591be01e89bb9ddb31d19156.tar.gz"
|
||||
"url": "https://git.clan.lol/api/v1/repos/clan/nix-select/archive/3d1e3860bef36857a01a2ddecba7cdb0a14c35a9.tar.gz"
|
||||
},
|
||||
"original": {
|
||||
"type": "tarball",
|
||||
@@ -190,11 +190,11 @@
|
||||
},
|
||||
"nixos-facter-modules": {
|
||||
"locked": {
|
||||
"lastModified": 1761137276,
|
||||
"narHash": "sha256-4lDjGnWRBLwqKQ4UWSUq6Mvxu9r8DSqCCydodW/Jsi8=",
|
||||
"lastModified": 1764252389,
|
||||
"narHash": "sha256-3bbuneTKZBkYXlm0bE36kUjiDsasoIC1GWBw/UEJ9T4=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nixos-facter-modules",
|
||||
"rev": "70bcd64225d167c7af9b475c4df7b5abba5c7de8",
|
||||
"rev": "5ea68886d95218646d11d3551a476d458df00778",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -238,11 +238,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1760998189,
|
||||
"narHash": "sha256-ee2e1/AeGL5X8oy/HXsZQvZnae6XfEVdstGopKucYLY=",
|
||||
"lastModified": 1764483358,
|
||||
"narHash": "sha256-EyyvCzXoHrbL467YSsQBTWWg4sR96MH1sPpKoSOelB4=",
|
||||
"owner": "Mic92",
|
||||
"repo": "sops-nix",
|
||||
"rev": "5a7d18b5c55642df5c432aadb757140edfeb70b3",
|
||||
"rev": "5aca6ff67264321d47856a2ed183729271107c9c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
||||
@@ -41,8 +41,6 @@
|
||||
./fmt.nix
|
||||
./shell.nix
|
||||
|
||||
./overlays
|
||||
./modules/nixos
|
||||
./machines
|
||||
./routers
|
||||
./inventories
|
||||
|
||||
@@ -3,10 +3,19 @@
|
||||
inventory = {
|
||||
|
||||
tags = {
|
||||
glom = [ "vega" ];
|
||||
b4l = [ "rigel" ];
|
||||
glom = [
|
||||
"vega"
|
||||
"ramus"
|
||||
];
|
||||
w = [ "sirius" ];
|
||||
fax-bridge = [ ];
|
||||
b4l = [
|
||||
"rigel"
|
||||
"neptune"
|
||||
];
|
||||
phonebox = [
|
||||
"neptune"
|
||||
"rigel"
|
||||
];
|
||||
};
|
||||
|
||||
instances = {
|
||||
@@ -32,6 +41,14 @@
|
||||
};
|
||||
};
|
||||
|
||||
tor = {
|
||||
module = {
|
||||
name = "tor";
|
||||
input = "clan-core";
|
||||
};
|
||||
roles.server.tags."nixos" = { };
|
||||
};
|
||||
|
||||
w-network = {
|
||||
module = {
|
||||
name = "zerotier";
|
||||
@@ -64,19 +81,26 @@
|
||||
roles.peer.tags.b4l = { };
|
||||
};
|
||||
|
||||
yggdrasil = {
|
||||
yggdrasil-phone-network = {
|
||||
module = {
|
||||
name = "yggdrasil";
|
||||
input = "self";
|
||||
input = "clan-core";
|
||||
};
|
||||
roles.default.tags."fax-bridge" = { };
|
||||
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"
|
||||
];
|
||||
};
|
||||
|
||||
asterisk = {
|
||||
phonebox = {
|
||||
module = {
|
||||
name = "asterisk";
|
||||
name = "phonebox";
|
||||
input = "self";
|
||||
};
|
||||
roles.default.tags."phonebox" = { };
|
||||
};
|
||||
|
||||
pocket-id = {
|
||||
|
||||
@@ -1 +1,19 @@
|
||||
{}
|
||||
{
|
||||
"machines": {
|
||||
"ramus": {
|
||||
"installedAt": 1764139649
|
||||
},
|
||||
"alpheratz": {
|
||||
"installedAt": 1764741499
|
||||
},
|
||||
"mirach": {
|
||||
"installedAt": 1764744666
|
||||
},
|
||||
"almach": {
|
||||
"installedAt": 1764745787
|
||||
},
|
||||
"neptune": {
|
||||
"installedAt": 1762147067
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
13
machines/almach/configuration.nix
Normal file
13
machines/almach/configuration.nix
Normal 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
90
machines/almach/disko.nix
Normal 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
3852
machines/almach/facter.json
Normal file
File diff suppressed because it is too large
Load Diff
13
machines/alpheratz/configuration.nix
Normal file
13
machines/alpheratz/configuration.nix
Normal 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.";
|
||||
|
||||
}
|
||||
90
machines/alpheratz/disko.nix
Normal file
90
machines/alpheratz/disko.nix
Normal 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";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
3852
machines/alpheratz/facter.json
Normal file
3852
machines/alpheratz/facter.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,8 +1,4 @@
|
||||
{
|
||||
inputs,
|
||||
self,
|
||||
...
|
||||
}:
|
||||
{ inputs, self, ... }:
|
||||
{
|
||||
imports = [
|
||||
inputs.clan-core.flakeModules.default
|
||||
|
||||
13
machines/mirach/configuration.nix
Normal file
13
machines/mirach/configuration.nix
Normal 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
90
machines/mirach/disko.nix
Normal 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
3852
machines/mirach/facter.json
Normal file
File diff suppressed because it is too large
Load Diff
13
machines/neptune/configuration.nix
Normal file
13
machines/neptune/configuration.nix
Normal 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.";
|
||||
|
||||
}
|
||||
90
machines/neptune/disko.nix
Normal file
90
machines/neptune/disko.nix
Normal 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
4160
machines/neptune/facter.json
Normal file
File diff suppressed because it is too large
Load Diff
15
machines/ramus/configuration.nix
Normal file
15
machines/ramus/configuration.nix
Normal 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
84
machines/ramus/disko.nix
Normal 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
2799
machines/ramus/facter.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,9 +1,4 @@
|
||||
{
|
||||
inputs,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
{ config, ... }:
|
||||
{
|
||||
imports = [
|
||||
(import ../../lib/auto-accept-zerotier-members.nix {
|
||||
@@ -13,54 +8,8 @@
|
||||
"2bd36db8cc" # kurogeek-thinkpad
|
||||
];
|
||||
})
|
||||
|
||||
inputs.self.nixosModules.inventree
|
||||
];
|
||||
|
||||
nixpkgs.overlays = [
|
||||
inputs.self.overlays.default
|
||||
];
|
||||
|
||||
clan.core.vars.generators.inventree = {
|
||||
files = {
|
||||
secret-key = {
|
||||
owner = "inventree";
|
||||
group = "inventree";
|
||||
secret = true;
|
||||
};
|
||||
oidc-key = {
|
||||
owner = "inventree";
|
||||
group = "inventree";
|
||||
secret = true;
|
||||
};
|
||||
admin-password = {
|
||||
owner = "inventree";
|
||||
group = "inventree";
|
||||
secret = true;
|
||||
};
|
||||
};
|
||||
runtimeInputs = [
|
||||
pkgs.pwgen
|
||||
pkgs.xkcdpass
|
||||
];
|
||||
script = ''
|
||||
pwgen -s 32 1 > $out/secret-key
|
||||
pwgen -s 32 1 > $out/oidc-key
|
||||
xkcdpass --numwords 4 --delimiter - --count 1 | tr -d "\n" > "$out"/admin-password
|
||||
'';
|
||||
};
|
||||
|
||||
networking.firewall.allowedTCPPorts = [ 80 ];
|
||||
|
||||
services.inventree = {
|
||||
enable = true;
|
||||
hostName = "rigel.local";
|
||||
config.site_url = "http://${config.services.inventree.hostName}";
|
||||
secretKeyFile = config.clan.core.vars.generators.inventree.files.secret-key.path;
|
||||
config.oidc_private_key_file = config.clan.core.vars.generators.inventree.files.oidc-key.path;
|
||||
config.adminPasswordFile = config.clan.core.vars.generators.inventree.files.admin-password.path;
|
||||
};
|
||||
|
||||
system.stateVersion = "25.11";
|
||||
clan.core.sops.defaultGroups = [ "admins" ];
|
||||
clan.core.networking.targetHost = "root@[${config.clan.core.vars.generators.zerotier.files.zerotier-ip.value}]";
|
||||
|
||||
@@ -1,69 +0,0 @@
|
||||
{ ... }:
|
||||
{
|
||||
_class = "clan.service";
|
||||
manifest.name = "asterisk";
|
||||
manifest.description = "Asterisk PBX server";
|
||||
manifest.categories = [ "System" ];
|
||||
|
||||
roles.default = {
|
||||
perInstance.nixosModule =
|
||||
{
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
{
|
||||
services.asterisk = {
|
||||
enable = lib.mkDefault true;
|
||||
confFiles = {
|
||||
# Dial plan config
|
||||
"extensions.conf" = ''
|
||||
exten => 1001,1,Dial(PJSIP/user1,20)
|
||||
exten => 1002,1,Dial(PJSIP/user2,20)
|
||||
|
||||
exten => 100,1,Answer()
|
||||
same => n,Wait(1)
|
||||
same => n,Playback(hello-world)
|
||||
same => n,Hangup()
|
||||
'';
|
||||
|
||||
"pjsip.conf" = ''
|
||||
[transport-udp]
|
||||
type=transport
|
||||
protocol=udp
|
||||
bind=0.0.0.0,[::]
|
||||
|
||||
[endpoint_internal](!)
|
||||
type=endpoint
|
||||
context=from-internal
|
||||
disallow=all
|
||||
allow=ulaw
|
||||
|
||||
[auth_userpass](!)
|
||||
type=auth
|
||||
auth_type=userpass
|
||||
|
||||
[aor_dynamic](!)
|
||||
type=aor
|
||||
max_contacts=1
|
||||
|
||||
[user1](endpoint_internal)
|
||||
auth=user1
|
||||
aors=user1
|
||||
[user1](auth_userpass)
|
||||
password=user1
|
||||
username=user1
|
||||
[user1](aor_dynamic)
|
||||
|
||||
[user2](endpoint_internal)
|
||||
auth=user2
|
||||
aors=user2
|
||||
[user2](auth_userpass)
|
||||
password=user2
|
||||
username=user2
|
||||
[user2](aor_dynamic)
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
{ lib, ... }:
|
||||
let
|
||||
module = lib.modules.importApply ./default.nix { };
|
||||
in
|
||||
{
|
||||
clan.modules = {
|
||||
asterisk = module;
|
||||
};
|
||||
perSystem =
|
||||
{ ... }:
|
||||
{
|
||||
clan.nixosTests.asterisk = {
|
||||
imports = [ ./tests/vm/default.nix ];
|
||||
|
||||
clan.modules."@clan/asterisk" = module;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
{
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
{
|
||||
name = "service-asterisk";
|
||||
|
||||
clan = {
|
||||
directory = ./.;
|
||||
inventory = {
|
||||
machines.server = { };
|
||||
|
||||
instances = {
|
||||
asterisk-test = {
|
||||
module.name = "@clan/asterisk";
|
||||
module.input = "self";
|
||||
roles.default.machines."server".settings = { };
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
nodes = {
|
||||
server = {
|
||||
services.asterisk = {
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
start_all()
|
||||
|
||||
server.wait_for_unit("asterisk")
|
||||
|
||||
# Check that garage is running
|
||||
server.succeed("systemctl status asterisk")
|
||||
|
||||
'';
|
||||
}
|
||||
321
modules/clan/phonebox/default.nix
Normal file
321
modules/clan/phonebox/default.nix
Normal 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;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
23
modules/clan/phonebox/flake-module.nix
Normal file
23
modules/clan/phonebox/flake-module.nix
Normal 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;
|
||||
};
|
||||
};
|
||||
}
|
||||
59
modules/clan/phonebox/tests/vm/default.nix
Normal file
59
modules/clan/phonebox/tests/vm/default.nix
Normal 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")
|
||||
|
||||
'';
|
||||
}
|
||||
6
modules/clan/phonebox/tests/vm/sops/machines/server/key.json
Executable file
6
modules/clan/phonebox/tests/vm/sops/machines/server/key.json
Executable file
@@ -0,0 +1,6 @@
|
||||
[
|
||||
{
|
||||
"publickey": "age1fdkan6n20swmut0sa86g5a6gxrj8qj2sgqe8hxtw32c0u9rr4drqlyr5mf",
|
||||
"type": "age"
|
||||
}
|
||||
]
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
../../../users/admin
|
||||
4
modules/clan/phonebox/tests/vm/sops/users/admin/key.json
Normal file
4
modules/clan/phonebox/tests/vm/sops/users/admin/key.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"publickey": "age1qm0p4vf9jvcnn43s6l4prk8zn6cx0ep9gzvevxecv729xz540v8qa742eg",
|
||||
"type": "age"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
fake_line_value
|
||||
@@ -0,0 +1 @@
|
||||
../../../../../../sops/machines/server
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
../../../../../../sops/users/admin
|
||||
@@ -0,0 +1 @@
|
||||
fake_line_value
|
||||
@@ -0,0 +1 @@
|
||||
25.11
|
||||
@@ -0,0 +1 @@
|
||||
202:fe87:1ca6:3cfd:e095:c2b1:321c:c391
|
||||
@@ -0,0 +1 @@
|
||||
../../../../../../sops/machines/server
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
../../../../../../sops/users/admin
|
||||
@@ -0,0 +1,3 @@
|
||||
-----BEGIN PUBLIC KEY-----
|
||||
MCowBQYDK2VwAyEAIC8cazhgQ+1Hqdm8Z43J5ooymP2ytrBEvdfXYz0ryp8=
|
||||
-----END PUBLIC KEY-----
|
||||
@@ -0,0 +1 @@
|
||||
201:b9d:4329:71c2:79ca:3648:e86d:4236
|
||||
@@ -0,0 +1 @@
|
||||
../../../../../../sops/machines/server
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
../../../../../../sops/users/admin
|
||||
@@ -0,0 +1 @@
|
||||
301:b9d:4329:71c2::/64
|
||||
@@ -1,5 +0,0 @@
|
||||
{
|
||||
flake.nixosModules = {
|
||||
inventree = import ../nixos/inventree;
|
||||
};
|
||||
}
|
||||
@@ -1,386 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
inherit (lib)
|
||||
mkEnableOption
|
||||
mkOption
|
||||
types
|
||||
mkIf
|
||||
;
|
||||
|
||||
configFormat = pkgs.formats.json { };
|
||||
cfg = config.services.inventree;
|
||||
pkg = cfg.package;
|
||||
configFile = "${cfg.dataDir}/config.json";
|
||||
|
||||
inventree-invoke = pkgs.writeShellApplication {
|
||||
name = "inventree-invoke";
|
||||
text = ''
|
||||
export INVENTREE_CONFIG_FILE=${configFile}
|
||||
export INVENTREE_SECRET_KEY_FILE=${cfg.secretKeyFile}
|
||||
export PYTHONPATH=${pkg.pythonPath}
|
||||
|
||||
exec -a "$0" ${pkgs.python3Packages.invoke}/bin/invoke -r ${cfg.package}/opt/inventree "$@"
|
||||
'';
|
||||
};
|
||||
in
|
||||
{
|
||||
options.services.inventree = {
|
||||
enable = mkEnableOption "InvenTree parts manager";
|
||||
|
||||
package = lib.mkOption {
|
||||
type = types.package;
|
||||
default = pkgs.inventree;
|
||||
description = ''
|
||||
InvenTree package to use
|
||||
'';
|
||||
};
|
||||
|
||||
hostName = mkOption {
|
||||
type = types.str;
|
||||
description = "FQDN for the InvenTree instance.";
|
||||
};
|
||||
|
||||
dataDir = mkOption {
|
||||
type = types.path;
|
||||
default = "/var/lib/inventree";
|
||||
example = "/var/lib/inventree";
|
||||
description = ''
|
||||
The default path for all inventree data.
|
||||
'';
|
||||
};
|
||||
|
||||
secretKeyFile = mkOption {
|
||||
type = types.path;
|
||||
default = "${cfg.dataDir}/secret_key.txt";
|
||||
description = ''
|
||||
Path to a file containing the secret key
|
||||
'';
|
||||
};
|
||||
|
||||
config = mkOption {
|
||||
type = types.submodule ({
|
||||
freeformType = configFormat.type;
|
||||
options = {
|
||||
adminUser = mkOption {
|
||||
type = types.str;
|
||||
default = "admin";
|
||||
};
|
||||
adminPasswordFile = mkOption {
|
||||
type = types.path;
|
||||
description = "Path to password file for user `admin`";
|
||||
};
|
||||
site_url = mkOption {
|
||||
type = types.str;
|
||||
default = "https://${cfg.hostName}";
|
||||
};
|
||||
static_root = mkOption {
|
||||
type = types.path;
|
||||
default = "${cfg.dataDir}/static";
|
||||
description = ''
|
||||
Static file storage
|
||||
'';
|
||||
};
|
||||
media_root = mkOption {
|
||||
type = types.path;
|
||||
default = "${cfg.dataDir}/media_root";
|
||||
description = "Media root directory";
|
||||
};
|
||||
backup_dir = mkOption {
|
||||
type = types.path;
|
||||
default = "${cfg.dataDir}/backups";
|
||||
description = "Backup directory";
|
||||
};
|
||||
oidc_private_key_file = mkOption {
|
||||
type = types.path;
|
||||
default = "${cfg.dataDir}/oidc.key";
|
||||
};
|
||||
};
|
||||
});
|
||||
default = { };
|
||||
description = ''
|
||||
Config options, see https://docs.inventree.org/en/stable/start/config/
|
||||
for details
|
||||
'';
|
||||
};
|
||||
|
||||
serverStartTimeout = mkOption {
|
||||
type = types.str;
|
||||
default = "10min";
|
||||
description = ''
|
||||
TimeoutStartSec for the server systemd service.
|
||||
See https://www.freedesktop.org/software/systemd/man/latest/systemd.service.html#TimeoutStartSec=
|
||||
for more details
|
||||
'';
|
||||
};
|
||||
|
||||
serverStopTimeout = mkOption {
|
||||
type = types.str;
|
||||
default = "5min";
|
||||
description = ''
|
||||
TimeoutStopSec for the server systemd service.
|
||||
See https://www.freedesktop.org/software/systemd/man/latest/systemd.service.html#TimeoutStopSec=
|
||||
for more details
|
||||
'';
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
environment.systemPackages = [ inventree-invoke ];
|
||||
|
||||
systemd.tmpfiles.rules = (
|
||||
map (dir: "d ${dir} 0755 inventree inventree") [
|
||||
"${cfg.dataDir}"
|
||||
"${cfg.dataDir}/static"
|
||||
"${cfg.dataDir}/media_root"
|
||||
"${cfg.dataDir}/backups"
|
||||
]
|
||||
);
|
||||
|
||||
services.inventree.config = {
|
||||
plugins_enabled = false;
|
||||
plugin_file = "${cfg.dataDir}/plugins.txt";
|
||||
plugin_dir = "${cfg.dataDir}/plugins";
|
||||
database = {
|
||||
ENGINE = "postgresql";
|
||||
NAME = "inventree";
|
||||
HOST = "/run/postgresql";
|
||||
};
|
||||
};
|
||||
|
||||
services.postgresql = {
|
||||
enable = true;
|
||||
ensureDatabases = [ "inventree" ];
|
||||
ensureUsers = [
|
||||
{
|
||||
name = "inventree";
|
||||
ensureDBOwnership = true;
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
users.users.inventree = {
|
||||
group = "inventree";
|
||||
isSystemUser = true;
|
||||
description = "InvenTree daemon user";
|
||||
};
|
||||
|
||||
users.groups.inventree = { };
|
||||
|
||||
services.nginx.enable = true;
|
||||
|
||||
services.nginx.virtualHosts.${cfg.hostName} = {
|
||||
locations =
|
||||
let
|
||||
unixPath = config.systemd.sockets.inventree-gunicorn.socketConfig.ListenStream;
|
||||
in
|
||||
{
|
||||
"/" = {
|
||||
extraConfig = ''
|
||||
client_max_body_size 100M;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
'';
|
||||
proxyPass = "http://unix:${unixPath}";
|
||||
};
|
||||
"/static/" = {
|
||||
alias = "${cfg.config.static_root}/";
|
||||
extraConfig = ''
|
||||
expires 30d;
|
||||
'';
|
||||
};
|
||||
"/media/" = {
|
||||
alias = "${cfg.config.media_root}/";
|
||||
extraConfig = ''
|
||||
auth_request /auth;
|
||||
'';
|
||||
};
|
||||
"/auth" = {
|
||||
extraConfig = ''
|
||||
internal;
|
||||
'';
|
||||
proxyPass = "http://unix:${unixPath}:/auth/";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
systemd.targets.inventree = {
|
||||
description = "Target for all InvenTree services";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
wants = [ "network-online.target" ];
|
||||
after = [ "network-online.target" ];
|
||||
};
|
||||
|
||||
systemd.services.inventree-config = {
|
||||
description = "Inventree config generation";
|
||||
wantedBy = [ "inventree.target" ];
|
||||
partOf = [ "inventree.target" ];
|
||||
before = [
|
||||
"inventree-static.service"
|
||||
"inventree-gunicorn.service"
|
||||
"inventree-qcluster.service"
|
||||
];
|
||||
serviceConfig = {
|
||||
# User = "root";
|
||||
# Group = "root";
|
||||
User = "inventree";
|
||||
Group = "inventree";
|
||||
Type = "oneshot";
|
||||
RemainAfterExit = true;
|
||||
PrivateTmp = true;
|
||||
};
|
||||
environment = {
|
||||
INVENTREE_CONFIG_FILE = configFile;
|
||||
INVENTREE_SECRET_KEY_FILE = cfg.secretKeyFile;
|
||||
INVENTREE_AUTO_UPDATE = "1";
|
||||
INVENTREE_PLUGINS_ENABLED = "1";
|
||||
INVENTREE_PLUGIN_NOINSTALL = "1";
|
||||
INVENTREE_STATIC_ROOT = cfg.config.static_root;
|
||||
INVENTREE_MEDIA_ROOT = cfg.config.media_root;
|
||||
INVENTREE_BACKUP_DIR = cfg.config.backup_dir;
|
||||
INVENTREE_OIDC_PRIVATE_KEY_FILE = cfg.config.oidc_private_key_file;
|
||||
INVENTREE_DB_ENGINE = cfg.config.database.ENGINE;
|
||||
INVENTREE_DB_NAME = cfg.config.database.NAME;
|
||||
INVENTREE_DB_HOST = cfg.config.database.HOST;
|
||||
INVENTREE_DB_USER = "inventree";
|
||||
INVENTREE_ADMIN_USER = cfg.config.adminUser;
|
||||
INVENTREE_ADMIN_PASSWORD_FILE = cfg.config.adminPasswordFile;
|
||||
|
||||
INVENTREE_SITE_URL = cfg.config.site_url;
|
||||
|
||||
PYTHONPATH = pkg.pythonPath;
|
||||
};
|
||||
script = ''
|
||||
set -euo pipefail
|
||||
|
||||
umask u=rwx,g=,o=
|
||||
|
||||
# chown inventree:inventree ${configFile}
|
||||
|
||||
${pkg}/opt/inventree/src/backend/InvenTree/manage.py migrate
|
||||
'';
|
||||
};
|
||||
|
||||
systemd.services.inventree-static = {
|
||||
description = "InvenTree static migration";
|
||||
wantedBy = [ "inventree.target" ];
|
||||
partOf = [ "inventree.target" ];
|
||||
before = [ "inventree-gunicorn.service" ];
|
||||
environment = {
|
||||
INVENTREE_CONFIG_FILE = configFile;
|
||||
INVENTREE_SECRET_KEY_FILE = cfg.secretKeyFile;
|
||||
INVENTREE_AUTO_UPDATE = "1";
|
||||
INVENTREE_PLUGINS_ENABLED = "1";
|
||||
INVENTREE_PLUGIN_NOINSTALL = "1";
|
||||
INVENTREE_STATIC_ROOT = cfg.config.static_root;
|
||||
INVENTREE_MEDIA_ROOT = cfg.config.media_root;
|
||||
INVENTREE_BACKUP_DIR = cfg.config.backup_dir;
|
||||
INVENTREE_OIDC_PRIVATE_KEY_FILE = cfg.config.oidc_private_key_file;
|
||||
INVENTREE_DB_ENGINE = cfg.config.database.ENGINE;
|
||||
INVENTREE_DB_NAME = cfg.config.database.NAME;
|
||||
INVENTREE_DB_HOST = cfg.config.database.HOST;
|
||||
INVENTREE_DB_USER = "inventree";
|
||||
INVENTREE_ADMIN_USER = cfg.config.adminUser;
|
||||
INVENTREE_ADMIN_PASSWORD_FILE = cfg.config.adminPasswordFile;
|
||||
INVENTREE_SITE_URL = cfg.config.site_url;
|
||||
|
||||
PYTHONPATH = pkg.pythonPath;
|
||||
};
|
||||
serviceConfig = {
|
||||
User = "inventree";
|
||||
Group = "inventree";
|
||||
StateDirectory = "inventree";
|
||||
#RuntimeDirectory = "inventree";
|
||||
PrivateTmp = true;
|
||||
ExecStart = ''
|
||||
${pkg}/opt/inventree/src/backend/InvenTree/manage.py collectstatic --no-input
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
systemd.services.inventree-gunicorn = {
|
||||
description = "InvenTree Gunicorn server";
|
||||
requiredBy = [ "inventree.target" ];
|
||||
partOf = [ "inventree.target" ];
|
||||
#wantedBy = [ "inventree.target" ];
|
||||
environment = {
|
||||
INVENTREE_CONFIG_FILE = configFile;
|
||||
INVENTREE_SECRET_KEY_FILE = cfg.secretKeyFile;
|
||||
INVENTREE_AUTO_UPDATE = "1";
|
||||
INVENTREE_PLUGINS_ENABLED = "1";
|
||||
INVENTREE_PLUGIN_NOINSTALL = "1";
|
||||
INVENTREE_STATIC_ROOT = cfg.config.static_root;
|
||||
INVENTREE_MEDIA_ROOT = cfg.config.media_root;
|
||||
INVENTREE_BACKUP_DIR = cfg.config.backup_dir;
|
||||
INVENTREE_OIDC_PRIVATE_KEY_FILE = cfg.config.oidc_private_key_file;
|
||||
INVENTREE_DB_ENGINE = cfg.config.database.ENGINE;
|
||||
INVENTREE_DB_NAME = cfg.config.database.NAME;
|
||||
INVENTREE_DB_HOST = cfg.config.database.HOST;
|
||||
INVENTREE_DB_USER = "inventree";
|
||||
INVENTREE_ADMIN_USER = cfg.config.adminUser;
|
||||
INVENTREE_ADMIN_PASSWORD_FILE = cfg.config.adminPasswordFile;
|
||||
INVENTREE_SITE_URL = cfg.config.site_url;
|
||||
|
||||
PYTHONPATH = pkg.pythonPath;
|
||||
};
|
||||
serviceConfig = {
|
||||
User = "inventree";
|
||||
Group = "inventree";
|
||||
StateDirectory = "inventree";
|
||||
#RuntimeDirectory = "inventree";
|
||||
PrivateTmp = true;
|
||||
ExecStart = ''
|
||||
${pkg.gunicorn}/bin/gunicorn InvenTree.wsgi \
|
||||
--pythonpath ${pkg}/opt/inventree/src/backend/InvenTree
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
systemd.sockets.inventree-gunicorn = {
|
||||
wantedBy = [ "sockets.target" ];
|
||||
partOf = [ "inventree.target" ];
|
||||
socketConfig.ListenStream = "/run/inventree/gunicorn.socket";
|
||||
};
|
||||
|
||||
systemd.services.inventree-qcluster = {
|
||||
description = "InvenTree qcluster server";
|
||||
requiredBy = [ "inventree.target" ];
|
||||
wantedBy = [ "inventree.target" ];
|
||||
partOf = [ "inventree.target" ];
|
||||
environment = {
|
||||
INVENTREE_CONFIG_FILE = configFile;
|
||||
INVENTREE_SECRET_KEY_FILE = cfg.secretKeyFile;
|
||||
INVENTREE_AUTO_UPDATE = "1";
|
||||
INVENTREE_PLUGINS_ENABLED = "0";
|
||||
INVENTREE_PLUGIN_NOINSTALL = "1";
|
||||
INVENTREE_STATIC_ROOT = cfg.config.static_root;
|
||||
INVENTREE_MEDIA_ROOT = cfg.config.media_root;
|
||||
INVENTREE_BACKUP_DIR = cfg.config.backup_dir;
|
||||
INVENTREE_OIDC_PRIVATE_KEY_FILE = cfg.config.oidc_private_key_file;
|
||||
INVENTREE_DB_ENGINE = cfg.config.database.ENGINE;
|
||||
INVENTREE_DB_NAME = cfg.config.database.NAME;
|
||||
INVENTREE_DB_HOST = cfg.config.database.HOST;
|
||||
INVENTREE_DB_USER = "inventree";
|
||||
INVENTREE_ADMIN_USER = cfg.config.adminUser;
|
||||
INVENTREE_ADMIN_PASSWORD_FILE = cfg.config.adminPasswordFile;
|
||||
INVENTREE_SITE_URL = cfg.config.site_url;
|
||||
|
||||
PYTHONPATH = pkg.pythonPath;
|
||||
};
|
||||
serviceConfig = {
|
||||
User = "inventree";
|
||||
Group = "inventree";
|
||||
StateDirectory = "inventree";
|
||||
#RuntimeDirectory = "inventree";
|
||||
PrivateTmp = true;
|
||||
ExecStart = ''
|
||||
${pkg}/opt/inventree/src/backend/InvenTree/manage.py qcluster
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
{ inputs, ... }:
|
||||
{
|
||||
flake.overlays = {
|
||||
default = final: prev: import (../pkgs/overlay.nix) inputs final prev;
|
||||
};
|
||||
|
||||
}
|
||||
@@ -1,145 +0,0 @@
|
||||
{
|
||||
stdenvNoCC,
|
||||
python3,
|
||||
fetchFromGitHub,
|
||||
fetchYarnDeps,
|
||||
yarnConfigHook,
|
||||
nodejs,
|
||||
}:
|
||||
let
|
||||
version = "unstable-2025-05-09";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "inventree";
|
||||
repo = "InvenTree";
|
||||
rev = "e0acfaa762da0dd7b2822b567202210ca8b7dbd3";
|
||||
hash = "sha256-K+cqErDUmgPO7625P3jp7+7BOYEfyJ1nElae6RlJvvI=";
|
||||
};
|
||||
|
||||
frontend = stdenvNoCC.mkDerivation {
|
||||
name = "inventree-frontend";
|
||||
inherit version src;
|
||||
|
||||
yarnOfflineCache = fetchYarnDeps {
|
||||
yarnLock = "${src}/src/frontend/yarn.lock";
|
||||
hash = "sha256-KpWuYCrkGN+4UnwV1STEbTL0FWcLZ7Wq8a8ST55OpGM=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
yarnConfigHook
|
||||
nodejs
|
||||
];
|
||||
|
||||
patchPhase = ''
|
||||
runHook prePatch
|
||||
cd src/frontend
|
||||
runHook postPatch
|
||||
'';
|
||||
|
||||
buildPhase = ''
|
||||
echo "Running lingui"
|
||||
./node_modules/.bin/lingui compile --typescript
|
||||
echo building lib
|
||||
./node_modules/.bin/tsc --p ./tsconfig.lib.json
|
||||
./node_modules/.bin/vite --config vite.lib.config.ts build
|
||||
echo "Running tsc"
|
||||
./node_modules/.bin/tsc
|
||||
echo "Running vite"
|
||||
./node_modules/.bin/vite build --emptyOutDir --outDir $out
|
||||
'';
|
||||
};
|
||||
|
||||
in
|
||||
python3.pkgs.buildPythonApplication rec {
|
||||
pname = "InvenTree";
|
||||
inherit version src;
|
||||
|
||||
format = "other";
|
||||
|
||||
dependencies = with python3.pkgs; [
|
||||
coreapi
|
||||
cryptography
|
||||
distutils
|
||||
dj-rest-auth
|
||||
django_4
|
||||
django-allauth
|
||||
django-allauth.optional-dependencies.openid
|
||||
django-allauth.optional-dependencies.mfa
|
||||
django-allauth.optional-dependencies.socialaccount
|
||||
django-cleanup
|
||||
django-cors-headers
|
||||
django-dbbackup
|
||||
django-error-report-2
|
||||
django-filter
|
||||
django-flags
|
||||
django-formtools
|
||||
django-ical
|
||||
django-js-asset
|
||||
django-maintenance-mode
|
||||
django-markdownify
|
||||
django-money
|
||||
django-mptt
|
||||
django-redis
|
||||
django-oauth-toolkit
|
||||
django-otp
|
||||
django-q-sentry
|
||||
django-q2
|
||||
django-redis
|
||||
django-sesame
|
||||
django-sql-utils
|
||||
django-structlog
|
||||
django-stdimage
|
||||
django-taggit
|
||||
django-user-sessions
|
||||
django-weasyprint
|
||||
djangorestframework
|
||||
djangorestframework-simplejwt
|
||||
djangorestframework-simplejwt.optional-dependencies.crypto
|
||||
django-xforwardedfor-middleware
|
||||
drf-spectacular
|
||||
dulwich
|
||||
feedparser
|
||||
gunicorn
|
||||
pdf2image
|
||||
pillow
|
||||
pint
|
||||
pip-licenses
|
||||
pypdf
|
||||
python-barcode
|
||||
python-barcode.optional-dependencies.images
|
||||
python-dotenv
|
||||
pyyaml
|
||||
qrcode
|
||||
qrcode.optional-dependencies.pil
|
||||
rapidfuzz
|
||||
sentry-sdk
|
||||
tablib
|
||||
tablib.optional-dependencies.xls
|
||||
tablib.optional-dependencies.xlsx
|
||||
tablib.optional-dependencies.yaml
|
||||
weasyprint
|
||||
whitenoise
|
||||
|
||||
psycopg2
|
||||
fido2
|
||||
];
|
||||
|
||||
nativeCheckInputs = with python3.pkgs; [ django-slowtests ];
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/opt/inventree
|
||||
cp -r . $out/opt/inventree
|
||||
|
||||
echo "Installing frontend"
|
||||
|
||||
mkdir -p $out/opt/inventree/src/backend/InvenTree/web/static/web
|
||||
cp -r ${frontend}/* $out/opt/inventree/src/backend/InvenTree/web/static/web/
|
||||
cp -r ${frontend}/.* $out/opt/inventree/src/backend/InvenTree/web/static/web/
|
||||
'';
|
||||
|
||||
passthru = {
|
||||
pythonPath = python3.pkgs.makePythonPath dependencies;
|
||||
gunicorn = python3.pkgs.gunicorn;
|
||||
inherit frontend;
|
||||
};
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
inputs: final: prev: {
|
||||
|
||||
pythonPackagesExtensions = prev.pythonPackagesExtensions ++ [
|
||||
(py-final: py-prev: {
|
||||
django-dbbackup = py-final.callPackage ./python/django-dbbackup { };
|
||||
django-error-report-2 = py-final.callPackage ./python/django-error-report-2 { };
|
||||
django-flags = py-final.callPackage ./python/django-flags { };
|
||||
django-ical = py-final.callPackage ./python/django-ical { };
|
||||
django-markdownify = py-final.callPackage ./python/django-markdownify { };
|
||||
django-money = py-final.callPackage ./python/django-money { };
|
||||
django-q-sentry = py-final.callPackage ./python/django-q-sentry { };
|
||||
django-recurrence = py-final.callPackage ./python/django-recurrence { };
|
||||
django-slowtests = py-final.callPackage ./python/django-slowtests { };
|
||||
django-structlog = py-final.callPackage ./python/django-structlog { };
|
||||
django-stdimage = py-final.callPackage ./python/django-stdimage { };
|
||||
django-user-sessions = py-final.callPackage ./python/django-user-sessions { };
|
||||
django-weasyprint = py-final.callPackage ./python/django-weasyprint { };
|
||||
django-xforwardedfor-middleware = py-final.callPackage ./python/django-xforwardedfor-middleware { };
|
||||
pip-licenses = py-final.callPackage ./python/pip-licenses { };
|
||||
py-moneyed = py-final.callPackage ./python/py-moneyed { };
|
||||
pytest-pycodestyle = py-final.callPackage ./python/pytest-codestyle { };
|
||||
sentry-sdk = py-final.callPackage ./python/sentry-sdk { };
|
||||
})
|
||||
];
|
||||
|
||||
inventree = final.callPackage ./inventree { python3 = final.python312; };
|
||||
}
|
||||
@@ -1,42 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
setuptools,
|
||||
wheel,
|
||||
django_4,
|
||||
pytz,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "django-dbbackup";
|
||||
version = "4.2.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "jazzband";
|
||||
repo = "django-dbbackup";
|
||||
rev = version;
|
||||
hash = "sha256-GD+f9mbImGPQ6MOUK3ftHqiGv7TT39jNQsFvd0dnnWU=";
|
||||
};
|
||||
|
||||
build-system = [
|
||||
setuptools
|
||||
wheel
|
||||
];
|
||||
|
||||
dependencies = [
|
||||
django_4
|
||||
pytz
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "dbbackup" ];
|
||||
|
||||
meta = {
|
||||
description = "Management commands to help backup and restore your project database and media files";
|
||||
homepage = "https://github.com/jazzband/django-dbbackup";
|
||||
license = lib.licenses.bsd3;
|
||||
maintainers = with lib.maintainers; [ ];
|
||||
mainProgram = "django-dbbackup";
|
||||
};
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
setuptools,
|
||||
wheel,
|
||||
django,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "django-error-report-2";
|
||||
version = "0.4.2";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "matmair";
|
||||
repo = "django-error-report-2";
|
||||
rev = version;
|
||||
hash = "sha256-ZCaslqgruJxM8345/jSlZGruM+27H9hvwL0wtPkUzc0=";
|
||||
};
|
||||
|
||||
build-system = [
|
||||
setuptools
|
||||
wheel
|
||||
];
|
||||
|
||||
dependencies = [ django ];
|
||||
|
||||
pythonImportsCheck = [ "error_report" ];
|
||||
|
||||
meta = {
|
||||
description = "Log/View Django server errors";
|
||||
homepage = "https://github.com/matmair/django-error-report-2";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ ];
|
||||
};
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
setuptools,
|
||||
wheel,
|
||||
django,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "django-flags";
|
||||
version = "5.0.13";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "cfpb";
|
||||
repo = "django-flags";
|
||||
rev = version;
|
||||
hash = "sha256-WPMfFYoP6WaVzZmVtqAz4LlY761aCRyPhd5npc8bOOI=";
|
||||
};
|
||||
|
||||
build-system = [
|
||||
setuptools
|
||||
wheel
|
||||
];
|
||||
|
||||
dependencies = [ django ];
|
||||
|
||||
pythonImportsCheck = [ "flags" ];
|
||||
|
||||
meta = {
|
||||
description = "Feature flags for Django projects";
|
||||
homepage = "https://github.com/cfpb/django-flags";
|
||||
license = lib.licenses.cc0;
|
||||
maintainers = with lib.maintainers; [ ];
|
||||
};
|
||||
}
|
||||
@@ -1,46 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
setuptools,
|
||||
setuptools-scm,
|
||||
wheel,
|
||||
django,
|
||||
django-recurrence,
|
||||
icalendar,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "django-ical";
|
||||
version = "1.9.2";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "jazzband";
|
||||
repo = "django-ical";
|
||||
rev = version;
|
||||
hash = "sha256-DUe0loayGcUS7MTyLn+g0KBxbIY7VsaoQNHGSMbMI3U=";
|
||||
};
|
||||
|
||||
build-system = [
|
||||
setuptools
|
||||
setuptools-scm
|
||||
wheel
|
||||
];
|
||||
|
||||
dependencies = [
|
||||
django
|
||||
django-recurrence
|
||||
icalendar
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "django_ical" ];
|
||||
|
||||
meta = {
|
||||
description = "ICal feeds for Django based on Django's syndication feed framework";
|
||||
homepage = "https://github.com/jazzband/django-ical";
|
||||
changelog = "https://github.com/jazzband/django-ical/blob/${src.rev}/CHANGES.rst";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ ];
|
||||
};
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
setuptools,
|
||||
bleach,
|
||||
django,
|
||||
markdown,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "django-markdownify";
|
||||
version = "0.9.5";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "erwinmatijsen";
|
||||
repo = "django-markdownify";
|
||||
rev = version;
|
||||
hash = "sha256-KYU8p8NRD4EIS/KhOk9nvmXCf0RWEc+IFZ57YtsDSWE=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
dependencies = [
|
||||
bleach
|
||||
django
|
||||
markdown
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "markdownify" ];
|
||||
|
||||
meta = {
|
||||
description = "Markdown template filter for Django";
|
||||
homepage = "https://github.com/erwinmatijsen/django-markdownify";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ ];
|
||||
};
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
setuptools,
|
||||
wheel,
|
||||
django,
|
||||
py-moneyed,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "django-money";
|
||||
version = "3.2";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "django-money";
|
||||
repo = "django-money";
|
||||
rev = version;
|
||||
hash = "sha256-eL26NsreUqtMJ26TmvmB53EJI4Sjs7qjFDnnt4N0vdI=";
|
||||
};
|
||||
|
||||
build-system = [
|
||||
setuptools
|
||||
wheel
|
||||
];
|
||||
|
||||
dependencies = [
|
||||
django
|
||||
py-moneyed
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "djmoney" ];
|
||||
|
||||
meta = {
|
||||
description = "Money fields for Django forms and models";
|
||||
homepage = "https://github.com/django-money/django-money";
|
||||
license = lib.licenses.bsd3;
|
||||
maintainers = with lib.maintainers; [ ];
|
||||
};
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
poetry-core,
|
||||
setuptools,
|
||||
sentry-sdk,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "django-q-sentry";
|
||||
version = "0.1.6";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "danielwelch";
|
||||
repo = "django-q-sentry";
|
||||
rev = "d3a43a90c82734244d5ebf3295652223053f1354";
|
||||
hash = "sha256-3C7A+X18c7p19HWD/uPRtAMf29VjmrfXXh2z5PPOREY=";
|
||||
};
|
||||
|
||||
build-system = [
|
||||
poetry-core
|
||||
setuptools
|
||||
];
|
||||
|
||||
dependencies = [ sentry-sdk ];
|
||||
|
||||
pythonImportsCheck = [ "django_q_sentry" ];
|
||||
|
||||
meta = {
|
||||
description = "Bringing Sentry error tracking to Django Q";
|
||||
homepage = "https://github.com/danielwelch/django-q-sentry";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ ];
|
||||
};
|
||||
}
|
||||
@@ -1,56 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
pdm-backend,
|
||||
django,
|
||||
flake8,
|
||||
pytest,
|
||||
pytest-cov,
|
||||
pytest-django,
|
||||
pytest-sugar,
|
||||
python-dateutil,
|
||||
sphinx,
|
||||
sphinx-rtd-theme,
|
||||
tox,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "django-recurrence";
|
||||
version = "1.12.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "jazzband";
|
||||
repo = "django-recurrence";
|
||||
rev = version;
|
||||
hash = "sha256-Q33zyMa1wI13RNLxynGAJHlagahpnFHCmZbHp0aPC/w=";
|
||||
};
|
||||
|
||||
build-system = [ pdm-backend ];
|
||||
|
||||
dependencies = [
|
||||
django
|
||||
flake8
|
||||
pytest
|
||||
pytest-cov
|
||||
pytest-django
|
||||
pytest-sugar
|
||||
python-dateutil
|
||||
sphinx
|
||||
sphinx-rtd-theme
|
||||
tox
|
||||
];
|
||||
|
||||
pythonRelaxDeps = true;
|
||||
|
||||
pythonImportsCheck = [ "recurrence" ];
|
||||
|
||||
meta = {
|
||||
description = "Utility for working with recurring dates in Django";
|
||||
homepage = "https://github.com/django-recurrence/django-recurrence";
|
||||
changelog = "https://github.com/django-recurrence/django-recurrence/blob/${src.rev}/CHANGES.rst";
|
||||
license = lib.licenses.bsd3;
|
||||
maintainers = with lib.maintainers; [ ];
|
||||
};
|
||||
}
|
||||
@@ -1,38 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
setuptools,
|
||||
wheel,
|
||||
django_4,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "django-slowtests";
|
||||
version = "1.1.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "realpython";
|
||||
repo = "django-slow-tests";
|
||||
rev = version;
|
||||
hash = "sha256-gW9AZiMpXJp1m2X1cbm6GdZ9cH+TFqjNLQJFmsvGjB0=";
|
||||
};
|
||||
|
||||
build-system = [
|
||||
setuptools
|
||||
wheel
|
||||
];
|
||||
|
||||
dependencies = [ django_4 ];
|
||||
|
||||
pythonImportsCheck = [ "django_slowtests" ];
|
||||
|
||||
meta = {
|
||||
description = "Locate your slowest tests";
|
||||
homepage = "https://github.com/realpython/django-slow-tests";
|
||||
changelog = "https://github.com/realpython/django-slow-tests/blob/${src.rev}/CHANGELOG.rst";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ ];
|
||||
};
|
||||
}
|
||||
@@ -1,51 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
setuptools,
|
||||
setuptools-scm,
|
||||
wheel,
|
||||
django,
|
||||
pillow,
|
||||
gettext,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "django-stdimage";
|
||||
version = "6.0.2";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "codingjoe";
|
||||
repo = "django-stdimage";
|
||||
rev = version;
|
||||
hash = "sha256-uwVU3Huc5fitAweShJjcMW//GBeIpJcxqKKLGo/EdIs=";
|
||||
};
|
||||
|
||||
build-system = [
|
||||
setuptools
|
||||
setuptools-scm
|
||||
wheel
|
||||
];
|
||||
|
||||
dependencies = [
|
||||
django
|
||||
pillow
|
||||
];
|
||||
|
||||
nativeBuildInputs = [ gettext ];
|
||||
|
||||
preBuild = ''
|
||||
echo "bla bla"
|
||||
echo $PATH
|
||||
'';
|
||||
|
||||
pythonImportsCheck = [ "stdimage" ];
|
||||
|
||||
meta = {
|
||||
description = "";
|
||||
homepage = "https://github.com/codingjoe/django-stdimage";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ ];
|
||||
};
|
||||
}
|
||||
@@ -1,48 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
setuptools,
|
||||
asgiref,
|
||||
django,
|
||||
django-ipware,
|
||||
structlog,
|
||||
celery,
|
||||
django-extensions,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "django-structlog";
|
||||
version = "9.1.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "jrobichaud";
|
||||
repo = "django-structlog";
|
||||
rev = version;
|
||||
hash = "sha256-SEigOdlXZtfLAgRgGkv/eDNDAiiHd7YthRJ/H6e1v5U=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
dependencies = [
|
||||
asgiref
|
||||
django
|
||||
django-ipware
|
||||
structlog
|
||||
];
|
||||
|
||||
optional-dependencies = {
|
||||
celery = [ celery ];
|
||||
commands = [ django-extensions ];
|
||||
};
|
||||
|
||||
pythonImportsCheck = [ "django_structlog" ];
|
||||
|
||||
meta = {
|
||||
description = "";
|
||||
homepage = "https://github.com/jrobichaud/django-structlog";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ ];
|
||||
};
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
setuptools,
|
||||
setuptools-scm,
|
||||
wheel,
|
||||
django,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "django-user-sessions";
|
||||
version = "2.0.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "jazzband";
|
||||
repo = "django-user-sessions";
|
||||
rev = version;
|
||||
hash = "sha256-Wexy6G2pZ8LTnqtJkBZIePV7qhQW8gu/mKiQfZtgf/o=";
|
||||
};
|
||||
|
||||
build-system = [
|
||||
setuptools
|
||||
setuptools-scm
|
||||
wheel
|
||||
];
|
||||
|
||||
dependencies = [ django ];
|
||||
|
||||
pythonImportsCheck = [ "user_sessions" ];
|
||||
|
||||
meta = {
|
||||
description = "Extend Django sessions with a foreign key back to the user, allowing enumerating all user's sessions";
|
||||
homepage = "http://github.com/jazzband/django-user-sessions";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ ];
|
||||
};
|
||||
}
|
||||
@@ -1,38 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
setuptools,
|
||||
django,
|
||||
weasyprint,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "django-weasyprint";
|
||||
version = "2.4.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "fdemmer";
|
||||
repo = "django-weasyprint";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-eSh1p+5MyYb6GIEgSdlFxPzVCenlkwSCTkTzgKjezIg=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
dependencies = [
|
||||
django
|
||||
weasyprint
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "django_weasyprint" ];
|
||||
|
||||
meta = {
|
||||
description = "A Django class-based view generating PDF resposes using WeasyPrint";
|
||||
homepage = "https://github.com/fdemmer/django-weasyprint";
|
||||
changelog = "https://github.com/fdemmer/django-weasyprint/blob/${src.rev}/CHANGELOG.md";
|
||||
license = lib.licenses.asl20;
|
||||
maintainers = with lib.maintainers; [ ];
|
||||
};
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
setuptools,
|
||||
wheel,
|
||||
django,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "django-xforwardedfor-middleware";
|
||||
version = "2.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "allo-";
|
||||
repo = "django-xforwardedfor-middleware";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-dDXSb17kXOSeIgY6wid1QFHhUjrapasWgCEb/El51eA=";
|
||||
};
|
||||
|
||||
build-system = [
|
||||
setuptools
|
||||
wheel
|
||||
];
|
||||
|
||||
dependencies = [ django ];
|
||||
|
||||
pythonImportsCheck = [ "x_forwarded_for" ];
|
||||
|
||||
meta = {
|
||||
description = "Use the X-Forwarded-For header to get the real ip of a request";
|
||||
homepage = "https://github.com/allo-/django-xforwardedfor-middleware";
|
||||
license = lib.licenses.publicDomain;
|
||||
maintainers = with lib.maintainers; [ ];
|
||||
};
|
||||
}
|
||||
@@ -1,74 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
setuptools,
|
||||
setuptools-scm,
|
||||
wheel,
|
||||
prettytable,
|
||||
tomli,
|
||||
autopep8,
|
||||
black,
|
||||
docutils,
|
||||
isort,
|
||||
mypy,
|
||||
pip-tools,
|
||||
pypandoc,
|
||||
pytest-cov,
|
||||
pytest-pycodestyle,
|
||||
pytest-runner,
|
||||
tomli-w,
|
||||
twine,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "pip-licenses";
|
||||
version = "5.0.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "raimon49";
|
||||
repo = "pip-licenses";
|
||||
rev = "v-${version}";
|
||||
hash = "sha256-6xw6BCuXSzNcwkpHaEFC5UPpubPUwhx/pg6vZq2er7A=";
|
||||
};
|
||||
|
||||
build-system = [
|
||||
setuptools
|
||||
setuptools-scm
|
||||
wheel
|
||||
];
|
||||
|
||||
dependencies = [
|
||||
prettytable
|
||||
tomli
|
||||
];
|
||||
|
||||
optional-dependencies = {
|
||||
dev = [
|
||||
autopep8
|
||||
black
|
||||
docutils
|
||||
isort
|
||||
mypy
|
||||
pip-tools
|
||||
pypandoc
|
||||
pytest-cov
|
||||
pytest-pycodestyle
|
||||
pytest-runner
|
||||
tomli-w
|
||||
twine
|
||||
wheel
|
||||
];
|
||||
};
|
||||
|
||||
pythonImportsCheck = [ "piplicenses" ];
|
||||
|
||||
meta = {
|
||||
description = "Dump the license list of packages installed with pip";
|
||||
homepage = "https://github.com/raimon49/pip-licenses";
|
||||
changelog = "https://github.com/raimon49/pip-licenses/blob/${src.rev}/CHANGELOG.md";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ ];
|
||||
};
|
||||
}
|
||||
@@ -1,42 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
setuptools,
|
||||
wheel,
|
||||
babel,
|
||||
typing-extensions,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "py-moneyed";
|
||||
version = "3.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "py-moneyed";
|
||||
repo = "py-moneyed";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-k0ZbLwog6TYxKDLZV7eH1Br8buMPfpOkgp+pMN/qdB8=";
|
||||
};
|
||||
|
||||
build-system = [
|
||||
setuptools
|
||||
wheel
|
||||
];
|
||||
|
||||
dependencies = [
|
||||
babel
|
||||
typing-extensions
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "moneyed" ];
|
||||
|
||||
meta = {
|
||||
description = "Provides Currency and Money classes for use in your Python code";
|
||||
homepage = "http://github.com/py-moneyed/py-moneyed";
|
||||
changelog = "https://github.com/py-moneyed/py-moneyed/blob/${src.rev}/CHANGES.rst";
|
||||
license = lib.licenses.bsd3;
|
||||
maintainers = with lib.maintainers; [ ];
|
||||
};
|
||||
}
|
||||
@@ -1,43 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
setuptools,
|
||||
wheel,
|
||||
certifi,
|
||||
urllib3,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "sentry-sdk";
|
||||
version = "2.26.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "getsentry";
|
||||
repo = "sentry-python";
|
||||
rev = version;
|
||||
hash = "sha256-Wl8yq2X9GuPcqaS93hkKXs2cDzz282Xceaai4NjbVZY=";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
|
||||
build-system = [
|
||||
setuptools
|
||||
wheel
|
||||
];
|
||||
|
||||
dependencies = [
|
||||
certifi
|
||||
urllib3
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "sentry_sdk" ];
|
||||
|
||||
meta = {
|
||||
description = "The official Python SDK for Sentry.io";
|
||||
homepage = "https://github.com/getsentry/sentry-python";
|
||||
changelog = "https://github.com/getsentry/sentry-python/blob/${src.rev}/CHANGELOG.md";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ ];
|
||||
};
|
||||
}
|
||||
@@ -25,6 +25,7 @@ in
|
||||
"${inputs.liminix}/modules/vlan"
|
||||
"${inputs.liminix}/modules/ssh"
|
||||
"${inputs.liminix}/modules/bridge"
|
||||
"${inputs.liminix}/modules/health-check"
|
||||
"${modulesPath}/profiles/gateway.nix"
|
||||
];
|
||||
|
||||
@@ -48,14 +49,46 @@ in
|
||||
name = "resolvconf";
|
||||
up = ''
|
||||
( in_outputs ${name}
|
||||
echo "nameserver $(output ${config.services.wan} ns1)" > resolv.conf
|
||||
echo "nameserver $(output ${config.services.wan} ns2)" >> resolv.conf
|
||||
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; [
|
||||
@@ -123,7 +156,7 @@ in
|
||||
defaultProfile.packages = with pkgs; [
|
||||
busybox
|
||||
iw
|
||||
iptables
|
||||
nftables
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
6
sops/machines/almach/key.json
Executable file
6
sops/machines/almach/key.json
Executable file
@@ -0,0 +1,6 @@
|
||||
[
|
||||
{
|
||||
"publickey": "age1m2e4c3gv7mxyg839gf0lfsh8wvygx3rn8u5cwnn99vw2w43ssers40tlq8",
|
||||
"type": "age"
|
||||
}
|
||||
]
|
||||
6
sops/machines/alpheratz/key.json
Executable file
6
sops/machines/alpheratz/key.json
Executable file
@@ -0,0 +1,6 @@
|
||||
[
|
||||
{
|
||||
"publickey": "age17c9908f08w2w0ajprep4p60a7hd27cznrnxmq4mxwznvgzjuhymsxttd3d",
|
||||
"type": "age"
|
||||
}
|
||||
]
|
||||
6
sops/machines/mirach/key.json
Executable file
6
sops/machines/mirach/key.json
Executable file
@@ -0,0 +1,6 @@
|
||||
[
|
||||
{
|
||||
"publickey": "age15k6cz0lj207608gdlgxq6l2n5zsflvg0lw8qqlvkyk0xddc4kqvq9nh6ex",
|
||||
"type": "age"
|
||||
}
|
||||
]
|
||||
6
sops/machines/neptune/key.json
Executable file
6
sops/machines/neptune/key.json
Executable file
@@ -0,0 +1,6 @@
|
||||
[
|
||||
{
|
||||
"publickey": "age14x2fatvz802dyvnfukgkxfu30khuqml5ang9smm3pr9lc95eqpjs2ywxxf",
|
||||
"type": "age"
|
||||
}
|
||||
]
|
||||
6
sops/machines/ramus/key.json
Executable file
6
sops/machines/ramus/key.json
Executable file
@@ -0,0 +1,6 @@
|
||||
[
|
||||
{
|
||||
"publickey": "age1egztkqupggjcpy4g9tfwq6kqeh3ljw7enzhx4l53hjge73wmdscqy5qwfp",
|
||||
"type": "age"
|
||||
}
|
||||
]
|
||||
1
sops/secrets/almach-age.key/groups/admins
Symbolic link
1
sops/secrets/almach-age.key/groups/admins
Symbolic link
@@ -0,0 +1 @@
|
||||
../../../groups/admins
|
||||
46
sops/secrets/almach-age.key/secret
Normal file
46
sops/secrets/almach-age.key/secret
Normal 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"
|
||||
}
|
||||
}
|
||||
1
sops/secrets/almach-age.key/users/kurogeek
Symbolic link
1
sops/secrets/almach-age.key/users/kurogeek
Symbolic link
@@ -0,0 +1 @@
|
||||
../../../users/kurogeek
|
||||
1
sops/secrets/alpheratz-age.key/groups/admins
Symbolic link
1
sops/secrets/alpheratz-age.key/groups/admins
Symbolic link
@@ -0,0 +1 @@
|
||||
../../../groups/admins
|
||||
46
sops/secrets/alpheratz-age.key/secret
Normal file
46
sops/secrets/alpheratz-age.key/secret
Normal 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"
|
||||
}
|
||||
}
|
||||
1
sops/secrets/alpheratz-age.key/users/kurogeek
Symbolic link
1
sops/secrets/alpheratz-age.key/users/kurogeek
Symbolic link
@@ -0,0 +1 @@
|
||||
../../../users/kurogeek
|
||||
1
sops/secrets/mirach-age.key/groups/admins
Symbolic link
1
sops/secrets/mirach-age.key/groups/admins
Symbolic link
@@ -0,0 +1 @@
|
||||
../../../groups/admins
|
||||
46
sops/secrets/mirach-age.key/secret
Normal file
46
sops/secrets/mirach-age.key/secret
Normal 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"
|
||||
}
|
||||
}
|
||||
1
sops/secrets/mirach-age.key/users/kurogeek
Symbolic link
1
sops/secrets/mirach-age.key/users/kurogeek
Symbolic link
@@ -0,0 +1 @@
|
||||
../../../users/kurogeek
|
||||
1
sops/secrets/neptune-age.key/groups/admins
Symbolic link
1
sops/secrets/neptune-age.key/groups/admins
Symbolic link
@@ -0,0 +1 @@
|
||||
../../../groups/admins
|
||||
47
sops/secrets/neptune-age.key/secret
Normal file
47
sops/secrets/neptune-age.key/secret
Normal 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"
|
||||
}
|
||||
}
|
||||
1
sops/secrets/neptune-age.key/users/kurogeek
Symbolic link
1
sops/secrets/neptune-age.key/users/kurogeek
Symbolic link
@@ -0,0 +1 @@
|
||||
../../../users/kurogeek
|
||||
1
sops/secrets/ramus-age.key/groups/admins
Symbolic link
1
sops/secrets/ramus-age.key/groups/admins
Symbolic link
@@ -0,0 +1 @@
|
||||
../../../groups/admins
|
||||
46
sops/secrets/ramus-age.key/secret
Normal file
46
sops/secrets/ramus-age.key/secret
Normal 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"
|
||||
}
|
||||
}
|
||||
1
sops/secrets/ramus-age.key/users/kurogeek
Symbolic link
1
sops/secrets/ramus-age.key/users/kurogeek
Symbolic link
@@ -0,0 +1 @@
|
||||
../../../users/kurogeek
|
||||
1
vars/per-machine/almach/openssh/ssh.id_ed25519.pub/value
Normal file
1
vars/per-machine/almach/openssh/ssh.id_ed25519.pub/value
Normal file
@@ -0,0 +1 @@
|
||||
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINdOw6Q9jQ7fqnfkjycFRqJ7OymjqZuszpuNHFhjbqNT
|
||||
1
vars/per-machine/almach/openssh/ssh.id_ed25519/machines/almach
Symbolic link
1
vars/per-machine/almach/openssh/ssh.id_ed25519/machines/almach
Symbolic link
@@ -0,0 +1 @@
|
||||
../../../../../../sops/machines/almach
|
||||
50
vars/per-machine/almach/openssh/ssh.id_ed25519/secret
Normal file
50
vars/per-machine/almach/openssh/ssh.id_ed25519/secret
Normal file
@@ -0,0 +1,50 @@
|
||||
{
|
||||
"data": "ENC[AES256_GCM,data:Od4z3gTnWqUhrqqvRWabUOrEnFX+YxS5y+fZU87UbClGhNwhud1iM8NxBPrn+4ukF5tIoDnUp7GtfXSB2/lNndS7/j0PwL9MQORyHS2M+f33k6wrUFvZQUDibubEJyB9a5HIirG6S5tmH+fEdSDvQ4lVmwo+XrHAWNBgOB3LqNd7gx9Y5k0CtZOCQsCQOtl7KJKtCSjBeH1+PauZ8wzMQMJdOeIWcThnlrOgasKd3jakskoVVRszsyVUmy5qfMlXnIRY5dGJ3I1tIp6E+PMnfucesq3moFlZ2weLuoOlcxCpoJ8vBH+uSiA36KvCv15GbpY0BMcsn7s6d1FqPCrC2QQ56HCZyqxk2Y4cnrlCV7wZHpYzapFIOm0K/pJOU+eds3FRnTy1eUymGtmqGeiH+nAbNTc56+Itj7Sgew8ZVQNUEpPYz202vDBtg8YcBSvhs3SRZ2TYerTVvDnl6FKKjF8VMTWdMm1zcndlLfJeKfrayZBx8YBVtuBJHCJSmAkB7iWX,iv:lZW46IVDrqYM+FrqwJu5rcHOiG2oOBudTtRPQ14Cvdg=,tag:/4LsI2sDgFTUAYB3X6fIZA==,type:str]",
|
||||
"sops": {
|
||||
"age": [
|
||||
{
|
||||
"recipient": "age134vt63pjqpd0m7702fyn8vhdlzyj2deqc2q78sp9uw9052kxsgwq6d25ez",
|
||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYeUQ2QmN5aWVQeHNhZFVr\ncmxKYXphcXE1Zk81clRuelBhL1pkRFhrK1FRClhlZk41bTdSbitub2orUzVRcEph\nZkRyd2RLd3VIcHFHYnM3ektnQ2RVOTAKLS0tIGE1SkJtM3hJNWp5ZWJ6Ui9TbTEz\nTjUxVlB5V1Y3WEFSMlZ3cEZLZXN5ZDQK99N/rmorsxnRDLN5iKg/bFR5XHSmgWtG\nyhGTSbspPX3Fl1N9dTtFrhvqXEL6mplw+ebDzWrSuw/baM7C/LEwKA==\n-----END AGE ENCRYPTED FILE-----\n"
|
||||
},
|
||||
{
|
||||
"recipient": "age17d4qt0n9edq57tgcqyk8eu5mrendl59yt6z2y3a4vkq7el8krqtq6lq28g",
|
||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA2L0Y3UGU1QUkvWm13a3Fr\nTnNwdFlhOThFVzBHaE1obFI3NjRCYnhkRUhFCnJPcWc3ZG9zYzlOOFV4RlY2aWxV\nV2xJWFREMWJRZ3czQWs3L2ZMMVhMQVkKLS0tIENMbU5UQU92c3U0cTlwMS9FMExT\nNVFVOUdDUjZsNTBnWHFCcGNzdTZGVUkKg/BBhYoeL7JQTuv4KlXEp/w7fz80a1px\n54mW+gMyR/knHUyqDVbpzFwsMOlchA8OdgaT4ufKvpGRCJ7ekaaxlQ==\n-----END AGE ENCRYPTED FILE-----\n"
|
||||
},
|
||||
{
|
||||
"recipient": "age1fido2-hmac1qqpf43tgcfjm048lsqskvq34w2t4uvrm5qy6m2eg6zjj82ctca8wctgpczxvj0q4y6337uhvsxdh5j86k9h9ymautpvv2759ucwnef75ez7pa7fpkddklp40mxk2tedsp74359g0kefn5rsq0x0yss6cu4yd0h06up0rp08t6yc4l0hfa9y8jn5fkx6nk0hjhz06ykwv0fyxe7z42q683jy0",
|
||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIFV0Vk1PaEJO\naTVhZFRSMzR3azJpOW1jbjBPSXJjTmNEc2wwRWttNk1yemsgQVEgd0l6SlBCVW1v\neDl5N0lHYmVrajZzVzVTYjd4WVdNVjZoZVlkUEtmVXlMdyBIdmtoczF0dmhxL1py\nS1hsc0ErckdoVVB0bE02RGdCNW5raERXT1ZJMTkzNjRGNHd2T3ZSTVYrKzZlbEll\nVTZKc2JVN1B2SzRuNkpaekhwSWJQaFZVQQpmYTlNTnVoV0xaQjFVcUhBaUVnVzFO\neDQ1cjBmdEphd2lCREJjMVVseldrCi0tLSB5OWJ2VjZodVFXdFgrS2kydndvOFp0\nYjFpL2ZKaDB2RGNQekFRd2NwdExzCuDsy/hhZeTdpFaP75lObEv8huDVEq9YIhcp\nVX1YMprmgHRIwlPnjpd03EtD6inefY2TR8kssoTzRvAxPUPrjWc=\n-----END AGE ENCRYPTED FILE-----\n"
|
||||
},
|
||||
{
|
||||
"recipient": "age1fido2-hmac1qqprw0vfpc8wzsu78quc777kmee54ln6nnsjrnrhl7nr33eh4kvkksqp05qqxj4kgfzrmrugrsvg7skx6ghh3q9xc0x0agthtkvy25d9eq7eklta5wf7s30hexkuyl5546rdz9ffa5tawlp5yweqkgccntw0ny540n2am3cqw3luhxkfmrp63kwr6mwplhr9u26wll48x0n3k5f60c7hg9a3",
|
||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIHJJa0lnVnFF\nR1JaSVdDam8wUzNtcUM4Rm9OUXpFN0hvRmVSVVNoQnRlVXcgQVEgZlFBRFNyWkNS\nRDJQaUJ3WWowTEcwaTk0Z0tiRHpQNmhkMTJZUlZHbHlEMCBtMzE5bzVQb1JmZkpy\nY0orbEs2RzBSVXA3UmZYZkRRanNnc2pHSnJjK1pLVmZOWGR4d0IwZjh1YXlkakRx\nTm5EMXR3ZjNHWGl0Ty8rcHpQbkcxRTZmZwpCMzVmUFY3Y0dWNktnZ09iNkRYTXND\nQ0NxVS9hcnlOK1hmY3pjNUUrM2FBCi0tLSBXeUZqZlJBYUpHTk02dmRON1l2UFkw\neDZYdnBoM3pvaVVlVHNmMy9KT0Q4CniKVpJkGRfkrKqB7FRl19nZ13uTubVh7eoM\nxw6KWYFkXrXZc/oGgV6YmFuBfh+/VcDfcNTpWs08xbTlcmpvnbs=\n-----END AGE ENCRYPTED FILE-----\n"
|
||||
},
|
||||
{
|
||||
"recipient": "age1fido2-hmac1qqpyewum3q8dfcumfgec8nn958aec9f4q9aqy0k06kw5kq27d6fdqdgp0p7y4ru3n5xk90u747xevxa2af3v37e85j9g3axrmw5hdwdfh0wz22hut5vrafxsx26a7vh8fjwkymz3ramfgvvu4detztu075kmpr8l9ydqda0rnjwatdwmfgswg849p37astvld98s3nleeq575azlwc2hhpuh",
|
||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIDBqRWxZR3RR\nYXFnSEUzVllnS2ZLSXV1MWlBTjA2OElWMzdWWGZ6a3U1UVkgQVEgZUh4S2o1R2RE\nV0svbnErTmxodXE2bUxJK3lla2lvajB3OXVwZHJtcHU5dyBKU3I4WFJnK3BOQXl0\nZDh5NTB5ZFlteFJIM2FVTVp5cmNyRXZqL1V0c0l6L0tSb0c5ZU9jbmRXMTIwb2c1\nQjZsREgzWUxaOXBUd2pQK2NncDZuUmZkZwpueUFIcm5UVFhLR1h6ZTI0cW1nbnZB\nZlhTQ3F1MFhqdkV3YlhmM0VacFRrCi0tLSBYMXFDNmhoS3ZDWTZyTzVZUytHT3Zy\nUjBMS1lVUHVkL1BCUC9ydTBrK3BJCmSB9CzrO5Zwr/uDkNVL910mbCyOGkBXUWWg\nQCZapgV2kUw5ct241a8fNZNdBVb4wxA7fMIIj9SYqO0LWd3dIgI=\n-----END AGE ENCRYPTED FILE-----\n"
|
||||
},
|
||||
{
|
||||
"recipient": "age1hlzrpqqgndcthq5m5yj9egfgyet2fzrxwa6ynjzwx2r22uy6m3hqr3rd06",
|
||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBqUkd4OVN4K0FlZVpBSFpo\nOVRPTVkvd3ZURGlDNU5NNW42aWpHSmFGbFVJCk85K0pZd2NLSjJ3ZFB2aUVnZWJX\nZ3BpUTF5K21nckh3T3NqSm91QThWdFkKLS0tIENtallaTHJpNjAyV1F5dXlSSW44\nR08rYnVDN25oenZRTEtCMDlRTkVlczgKc/Q1JJ9O0qBWvQiZASAjvAP0l84k9cQf\nsFdOd4bJnVmYeFGx6zIAU/t0dL6sHgkHF5M5byCcVVFtgoF6EX6qSQ==\n-----END AGE ENCRYPTED FILE-----\n"
|
||||
},
|
||||
{
|
||||
"recipient": "age1m2e4c3gv7mxyg839gf0lfsh8wvygx3rn8u5cwnn99vw2w43ssers40tlq8",
|
||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBUVFhwRmc3TnZlSXdCMC9R\naW5uOWlIUG4wd0ErNEhYZmJMNURmNitLT0NvCnBSWVVCVWxSQ1VIbzNwcXRZcmRr\nY2k0ZHEveEw2Mm54UUJVa1ZVQ3Fxc2cKLS0tIG5EWldvYUtndjBHeGlXcFlLVmdi\nK1ZFdHFvSXpBbDdNdm5HZ0g2Rkw3Z1kKUD4PhfnA2bM4KPkEExQvhARXWACKoJs2\nPu3jTrIt5NWIm6w/iuMGgbaN6FVSKjhutpXnvPw0PEIRtkBss/ygoA==\n-----END AGE ENCRYPTED FILE-----\n"
|
||||
},
|
||||
{
|
||||
"recipient": "age1sg0rvgyetdcqw7j2x983fh69kdkvqsngpe5x36e5920qa7fze3cqhj4wgx",
|
||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBDVm0xWUMxYjhSRC9zOXhD\nTGZ2aVV0ZjhDSFBJL3FXY1p6VGdwU3RXVTBrCnhrQytpaXZYakRaUitydTZKYVlB\nNDVoYzhFU05QL3dBcUhtWnQ1UW9NblkKLS0tIEhlOVpvdzRGNDN2UmZNamNkbHpT\nNENxdUpkcFlsVXpqOU1BNjhlSUJqancKEVQL6rV2VpaIAgFQx700dEVE/8qfruYO\nww+PB7AwFSgQU1NOTvsAQ0yFSegwVe6xouQLzaRiowv43eyIUBTnjQ==\n-----END AGE ENCRYPTED FILE-----\n"
|
||||
},
|
||||
{
|
||||
"recipient": "age1swlyyk2rzvevqawyeekv75nx2dz34zpe3xqhkqme26gcgeavy4dqrfpcd8",
|
||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA2U3pjODhRN0VGdVN4dEM1\nY295QWZsN0NycUtPRkVpRU92SThxbmNzRFRzCkpnMzE3SytiR05YZFJ1UkE0SjVH\nVEpNR3B4RFFWSngwa1pLZFRraTQ3dXMKLS0tIExVNmlhaFpPWHF0RTR4ZXBoMXlp\nT2NpekQ4RDVSMTJNc09zaFJIZTVuV3cK7KWdlVUrubRDgE3q/tlsbi456SG/4cvw\nPauejaZnUrpA45fUK0psxXoZkdshU0CiAjoTT+4mYQHdbZJdl/9TBw==\n-----END AGE ENCRYPTED FILE-----\n"
|
||||
},
|
||||
{
|
||||
"recipient": "age1vphy2sr6uw4ptsua3gh9khrm2cqyt65t46tusmt44z98qa7q6ymq6prrdl",
|
||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBhdXMvZFhTOHI5V0VEejFY\nS3BrY2JiaUhvWEdia3hrckJ6VTF4NmVkSENBCmNyd3ovU3ZVcnFTY1JmRUIzVVRs\nd0NrQmFZMTVZNEVYN2pkQ1ZpNGZuTG8KLS0tIGhSS1A5L0ZsbHhXK1lJakNJMzhj\nYjhEekNkL3ExQS8zN0N5Y0M4bkZhZTAKgIECIbfnjKwiwuH12XO/yTxIsdlAFL0o\nDjQQw/IP0iXISebg4edaPJse7ZaOsGIKJcuBrMcDqS3QG/tCNdNUDA==\n-----END AGE ENCRYPTED FILE-----\n"
|
||||
}
|
||||
],
|
||||
"lastmodified": "2025-12-03T07:06:12Z",
|
||||
"mac": "ENC[AES256_GCM,data:+GN4dlUHZ6OZrcOHeg076Kh2cH/9U7kRZk2qlpoS79BcDdv//ZXLJn9OusiAzwfRELud6SAL2yINeYctZJcVTb6z6+nqS3O5k4Ho6qMDVF/SKS8/C64gV1Ld/bmpFJiYp8Tp0LW53bzCkCyKdGJsMUAItwnu2Lr7mKAGJyw83II=,iv:7Fd+sO2F46F7KvbQG/yryLpgUjUjhTErP3nxWwkmmHI=,tag:Hh7sTl0PwhCV0fn3q9qVXg==,type:str]",
|
||||
"version": "3.11.0"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
../../../../../../sops/machines/almach
|
||||
50
vars/per-machine/almach/root-password/password-hash/secret
Normal file
50
vars/per-machine/almach/root-password/password-hash/secret
Normal file
@@ -0,0 +1,50 @@
|
||||
{
|
||||
"data": "ENC[AES256_GCM,data:qKgdwe+LcrK9nul5PooncV5bimaTSNsKxYJjP0HYr+ZFZSoCDv4GE6t1gN8EG3JMNkn+wy1I2ysZYxCAm23OMhWt7ep/TIudZTmt5tvD6DSQZE+4aTegJjfxfJC/P41zjFgKMK6+JYCF+Q==,iv:iasUB+pIE5i89Y6rGQAHzh2uY9plNeZf1LrmAA746LI=,tag:J7l81DrJ2idNdOjRE32Pew==,type:str]",
|
||||
"sops": {
|
||||
"age": [
|
||||
{
|
||||
"recipient": "age134vt63pjqpd0m7702fyn8vhdlzyj2deqc2q78sp9uw9052kxsgwq6d25ez",
|
||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBhbUdVVzh3a25kSURyWDFY\nYWx2NFhGeHFnbTgwYVNYdklmdmJPcklRVlNJCmdDajZjRzdrWXlyS3JBQ3NtbVVB\naXc2dzdoWFA1bXZmd3M3TlN5Tnk1WVkKLS0tIFVzZXhlblUyQW5EbHVzWmdUaHNC\nMW1hY2k3c1oreDdDYm9NcTdkQ3NqN3MKNzAS0Ui+cMC6G37Bbf2eHLMvdHeEwj5k\nj7ev82olKPQHVA3xW4zDvi1wLOqY2MF9dRUqKabIAnJgCIVENAQIUQ==\n-----END AGE ENCRYPTED FILE-----\n"
|
||||
},
|
||||
{
|
||||
"recipient": "age17d4qt0n9edq57tgcqyk8eu5mrendl59yt6z2y3a4vkq7el8krqtq6lq28g",
|
||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBTdlRiMm9vK3NETmx6eHV0\nVTVyN2JJc003SWFzdXZQL3g3Q3VMUXZoT1hrCjRqdWk4Y3QxTVdVdFUvYXJNWGFR\nQzBGRXo2MU5SZEI4cmVQU0c2bnNlSlEKLS0tIEwzbkpuZmxWb2pNc3ZkOE5JL2VL\nRnV1V0J0bDMrUEVKR0pnRlJWanlZSUEKNh6e9N2QKtOAKimo9V3m0hFSGDwal64B\neEyxEcF1OAscFGuGkKE7yjr9OXsxIzOIC2FR68wAAGIIox2eo7QzXw==\n-----END AGE ENCRYPTED FILE-----\n"
|
||||
},
|
||||
{
|
||||
"recipient": "age1fido2-hmac1qqpf43tgcfjm048lsqskvq34w2t4uvrm5qy6m2eg6zjj82ctca8wctgpczxvj0q4y6337uhvsxdh5j86k9h9ymautpvv2759ucwnef75ez7pa7fpkddklp40mxk2tedsp74359g0kefn5rsq0x0yss6cu4yd0h06up0rp08t6yc4l0hfa9y8jn5fkx6nk0hjhz06ykwv0fyxe7z42q683jy0",
|
||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIFZmSE9ZNWlh\nMFR3eXpjN05PZ1FpN1lXMHBZS2NtcWlZcU9sY05odlNYUzAgQVEgd0l6SlBCVW1v\neDl5N0lHYmVrajZzVzVTYjd4WVdNVjZoZVlkUEtmVXlMdyBIdmtoczF0dmhxL1py\nS1hsc0ErckdoVVB0bE02RGdCNW5raERXT1ZJMTkzNjRGNHd2T3ZSTVYrKzZlbEll\nVTZKc2JVN1B2SzRuNkpaekhwSWJQaFZVQQpoanBGRjlFYVhIZUoweUdQZDhheUtX\nMXdvWm0xcmxPSHhRWXdsWi9aVWpzCi0tLSB0Vm5rZi94cHNyRTFDZHI0Sy8zOUww\nTnFKazJrNzVZR0JxWDBZamtoNkQ0CjDdKrB45JpFxLOSVWrZ0RhKJ+Ms9JUV+xlq\n/MThL4Orh/jMkfMxznMXNouRYtemqAZ1fitulGDSk4HiI3cLxgE=\n-----END AGE ENCRYPTED FILE-----\n"
|
||||
},
|
||||
{
|
||||
"recipient": "age1fido2-hmac1qqprw0vfpc8wzsu78quc777kmee54ln6nnsjrnrhl7nr33eh4kvkksqp05qqxj4kgfzrmrugrsvg7skx6ghh3q9xc0x0agthtkvy25d9eq7eklta5wf7s30hexkuyl5546rdz9ffa5tawlp5yweqkgccntw0ny540n2am3cqw3luhxkfmrp63kwr6mwplhr9u26wll48x0n3k5f60c7hg9a3",
|
||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIFhyZEwxYjF3\nb1BEQjVlR1NSeUgzbUhNcWZEdkNhb2w3aFdQbzY4RlVzalEgQVEgZlFBRFNyWkNS\nRDJQaUJ3WWowTEcwaTk0Z0tiRHpQNmhkMTJZUlZHbHlEMCBtMzE5bzVQb1JmZkpy\nY0orbEs2RzBSVXA3UmZYZkRRanNnc2pHSnJjK1pLVmZOWGR4d0IwZjh1YXlkakRx\nTm5EMXR3ZjNHWGl0Ty8rcHpQbkcxRTZmZwpsTWxIcEZrYXkvNmUzblNldSs1dHpL\nWUswWVhUaStwSmJsSlBQMjNHbTFrCi0tLSB3Vyt3L2g3ek12Y2pFK3lRN3lsY1dv\nZGw2M0pzN2xyTm02OHVYdXBpV09VCkC7pQwanvBkJowCj86oqKPkNwAG2vjVr1Au\nw7xC+przWGPYvWEfSmh3V4tGxxGPJQimEt8YbuySekTAMFFafVo=\n-----END AGE ENCRYPTED FILE-----\n"
|
||||
},
|
||||
{
|
||||
"recipient": "age1fido2-hmac1qqpyewum3q8dfcumfgec8nn958aec9f4q9aqy0k06kw5kq27d6fdqdgp0p7y4ru3n5xk90u747xevxa2af3v37e85j9g3axrmw5hdwdfh0wz22hut5vrafxsx26a7vh8fjwkymz3ramfgvvu4detztu075kmpr8l9ydqda0rnjwatdwmfgswg849p37astvld98s3nleeq575azlwc2hhpuh",
|
||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IGZpZG8yLWhtYWMgQUFJIGZRV0tHZEVH\ndS90NzNOZXJyMTk4VEY5RGdoZHhEL2VhQktmbGUyVzVrUW8gQVEgZUh4S2o1R2RE\nV0svbnErTmxodXE2bUxJK3lla2lvajB3OXVwZHJtcHU5dyBKU3I4WFJnK3BOQXl0\nZDh5NTB5ZFlteFJIM2FVTVp5cmNyRXZqL1V0c0l6L0tSb0c5ZU9jbmRXMTIwb2c1\nQjZsREgzWUxaOXBUd2pQK2NncDZuUmZkZwp2Vmx2Q3ZLM1pNOStHVVo0VHdDSWFB\nSW9CQjBDMUdqdmRlb1RaV1JMcjUwCi0tLSA5NjlYR21kU21JRVdEbE1BbFh5VGdX\nTWJneHNVU05Pa1oyR1NMQnlJNzJRCsHbmQwnC9a2MSaEbMzAVKuYE3xMHjLlR/KJ\ne6rFuntmuJeLjV0srcWkmRT6UepGkUoo3cT0MJk+FFCveoMOuvE=\n-----END AGE ENCRYPTED FILE-----\n"
|
||||
},
|
||||
{
|
||||
"recipient": "age1hlzrpqqgndcthq5m5yj9egfgyet2fzrxwa6ynjzwx2r22uy6m3hqr3rd06",
|
||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAzaDV2MWxjeHRIVjRSeFBK\nTzBVeTk2NHFXSkhQbzQ4ZTl3ejlVS1lyNkVFCndPWSs1bDlyeEVCMlM2YVhuOUVh\nRkhpSkNqdEJZcW9zRHliVkxpRTlQbWsKLS0tIDE2ZDdMbUpTMzFSQXVVai9PY0or\nNzNOUWdEK2E2VnFWS2RiOU5VMFkxY0kKIjTMDcnrcax15QE/P5vQpklzIfh0dOjM\nGhWtf26t41MvMqTtXCA1y9uvB/yGh2Fb7Web1L+QsljU67xaaOP59w==\n-----END AGE ENCRYPTED FILE-----\n"
|
||||
},
|
||||
{
|
||||
"recipient": "age1m2e4c3gv7mxyg839gf0lfsh8wvygx3rn8u5cwnn99vw2w43ssers40tlq8",
|
||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBjWGQzcTZHRUREblAzTlIv\neVV3QUNUQUVMRUUvZUVKZkNHYnA4d0FUZWgwCmJiVit3VjZQUTFJMDRiRks2VE5n\nVHdOY0RZenpYVU93NDBQRE9TbEg2dU0KLS0tIHUzL055ckI1aThoQnhreGtLQ2ZZ\nUHB0dCtLaE9DQXEzM09ZY0NjUFBkWG8KG/T9430gM9BgX3GrbgoU+MCOv1etz6eQ\n5Qxvv92y8qF6ol4bqQP5ZBWUgZBkn04T053oyEYFAODpMmEUdUAivg==\n-----END AGE ENCRYPTED FILE-----\n"
|
||||
},
|
||||
{
|
||||
"recipient": "age1sg0rvgyetdcqw7j2x983fh69kdkvqsngpe5x36e5920qa7fze3cqhj4wgx",
|
||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBBYmYxUkVyT29Qa0xrZlhO\nL3J1cjJBYlBwMmk0MFFjdSttanBqajhCRDJNCnJWWU9FOSt3QnQ5b0lVYVQxVW9j\nRFlMVXFWQ1kyZFVqN3JHNllHdjJyeHMKLS0tICtqWm84eGlFYmpNSlVEQUxUS1JP\nK1MweWhlSWNvR0tsMDFmYUg5OXk0Z0EKfty8Hy4tCWKBoux4WLJCC8Jb6SdJiJCs\nUZQyMxFB+zuzIH9ES1wXbLf4KkEIYkxVvZ23Li+vwRuNl1AE2gd+EQ==\n-----END AGE ENCRYPTED FILE-----\n"
|
||||
},
|
||||
{
|
||||
"recipient": "age1swlyyk2rzvevqawyeekv75nx2dz34zpe3xqhkqme26gcgeavy4dqrfpcd8",
|
||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBSU1dmMFpKZjlWRzc3UnEy\nZlJWT2I5RmNjQ25TNzZoR3ZJbU1GR2RQZTE0ClUvdEpMaTRxU3dRZDJ4SkFqaDZ4\nTmFxWGhIMU03ekhuTjNBOFFjM3NzNjQKLS0tIE80aHVVdzhpeHBLU0dubllhTG9k\nRGNHaEtLNWE3YVk0OWxsQnBsNm51NlUK7LkRjc7XeFxGeqynVDEfTH0L9JxO5VTn\nJXkJnomtm8b256uN3K6ShuSzhY32Kftot8DREEL2Y3YSpCTCvyZyVw==\n-----END AGE ENCRYPTED FILE-----\n"
|
||||
},
|
||||
{
|
||||
"recipient": "age1vphy2sr6uw4ptsua3gh9khrm2cqyt65t46tusmt44z98qa7q6ymq6prrdl",
|
||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAzL1JXZy9lUG5DY3J0MkVh\nRkx2d2ZTQVp2ZDFiU1k4ZFVncjlpVGRaaUg4CkV1SnJmb05vUm01dUI4QXM0YlM0\nM09NV2JlanpYRmswR0hqbWtXc2o3enMKLS0tIHFEQVp1NUNtRFcrNGQvYnJFTnNC\nWDgwQ2wvYlJYVG9leDVvM0NTOFZ1dUkKhI8HnKBubaFZVY4+R6x0hqCq2mzIogjk\n5zdhgMYZHQMyUF4xdKpyFcwIQsIS+0jXi38clYPKsqRgIF+ixliVAA==\n-----END AGE ENCRYPTED FILE-----\n"
|
||||
}
|
||||
],
|
||||
"lastmodified": "2025-12-03T07:06:12Z",
|
||||
"mac": "ENC[AES256_GCM,data:7LJ6kgfOH8O/UCSA/PLX7ti3zJPMTM0AjbwD3VP76dwXxQrSyIQNzBq8+lUfQjK+LRdjxhAubqw0LcbHkkl2JteavYssI/NcIX7aXfD3kp2J1I/KPi15iRFYzovUbFKP9xWs0OM93Gww+tFN7n97WU+uv2a6cOBu71iIaJev0vU=,iv:BRkY7ouLdYxScIPK8+79+0hbOPMsEcXmLzjMUNcMEOU=,tag:vKHVhqbClRlsptzdpGb9aQ==,type:str]",
|
||||
"version": "3.11.0"
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user