host(koumakan): deploy garage

Changed files
+64 -3
creds
sops
koumakan
global
programs
security
systems
+6 -2
creds/sops/koumakan/default.yaml
···
pocket-id:
encryption_key: ENC[AES256_GCM,data:aSWSWrd1dR6NpwLJE3Je4j6bnBMq7QFD8VX6u4XIKqFq3shwuM/fZitblSfVX92UdDFZnsZyRiAf57rH/9PB+saoOcdSUkC/rTYO0iGFLQLcOiSMfBdyKA==,iv:ZlCrKpT8LrcqDK7uCr1m8vp+reCdwcG6KhxFQsB+KqY=,tag:+MvOEXBnUP5QleY5f6kbuA==,type:str]
maxmind_key: ENC[AES256_GCM,data:KfGuV+GbrZhDSDovV7eHu7nffOB6j+z6wsXQxlaEB/7tvwucn2wbxA==,iv:+t5nNpRE/x1cSZ+Ee6fHj5x1vKqTP/6NGqiUlhdzTxs=,tag://rUceu5SeIpgKGiP6+Pkw==,type:str]
+
garage:
+
rpc_secret: ENC[AES256_GCM,data:+H+vxo8KtnWDVB6UF/wVaw0gFQqTLJ6lkVvfCrukNnNfiO/xTNpD1nNIykbLW8Ruz0WdhAF52ucvVXQ0cebyGSHMyFoi5YUl66SMNuIKM+fVPOembQLf5iys3kTKxj5RwyS2Gqc780zRM+8a3INS7icr2fuUkywrXRdQGv00fS0=,iv:jQ2xeXcRFZxSw1kVVv4/vUD8jbK/7yTrAYi/iZU4wNY=,tag:SVMaeaXdiraok3f+FN2ecw==,type:str]
+
admin_token: ENC[AES256_GCM,data:in/UjRG4jehvI0kjfD3TvheWN+7NNmU4GRuXEqBZocyd1E0NqP6DKxhpG6M=,iv:yTA4dQd36ou3gs6UGrsuONJzQ8DNTIsOi765GZIIaQI=,tag:HD401PZLEOaPNszV/04jJQ==,type:str]
+
metrics_token: ENC[AES256_GCM,data:BZ3TN+ubxwHNi8QZP+TmdVgcL88UzwDsv8Lema2ClxqYRZFddaQg2RIHHIM=,iv:k7xyeyzZiMK3R/Gr/f+8uN8zFOUJaaQ99AILoKMYa/c=,tag:mJhPxEjMKOjb/Z0KnGzN4w==,type:str]
sops:
age:
- recipient: age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk
···
QUlVNExmVGd2QXJwVmRGa0JvMmtocEUK7Zo0Mtj3oZm5Etp61cGbLs+2XP97pjR6
rtfHnuxceJj0+yBugfwgFD1TGJ+6M7z5YCwTx+GAvbPDrmSm2TGrwg==
-----END AGE ENCRYPTED FILE-----
-
lastmodified: "2025-10-13T08:42:55Z"
-
mac: ENC[AES256_GCM,data:ocIWuopOoiUMxc6TMCxzBuicp5rzqX9oE9pXaIbFkRxjXwmskUwS8s00Xzqgo1K60+tnBFFK+zma+jMd7fKeBtkUqD00dgXMnLlUNmUt2s+Mq34nCt3hiNSOcqQHjBBIeSEiy/gqn1umdnCkV/zLBEP10u/EOdJ1Dlb1vA3gvqs=,iv:xS9HBMGmATAH/IxFide0tV4lTZ1HwjBTm+Be+4exczo=,tag:JQTIYw+PQ03mx5JE8rNPsg==,type:str]
+
lastmodified: "2025-10-28T07:05:28Z"
+
mac: ENC[AES256_GCM,data:YWBAo/szJudWIWZ9zEqDQa3v4aUTYI0b574rK6MAyKBvJbjAizYuzEd5O/A/OnhC/X2bPZteTDy3VuWJUJpBFZDpbLAFCF3lSy6ZDutsZ9yj90WyFGsKhTSMJGDwBJHaCz2bafJQqQrAwGoRcP/Mk27EMVM0Y+Cb4XsxRPNM/t4=,iv:Z9q0WPdPJFAgfYBPkJ8lVFwBDQa67T8e2o0cwQY4nYI=,tag:SDkqNZbc4P8ijCLrzcZGwQ==,type:str]
unencrypted_suffix: _unencrypted
version: 3.11.0
+2 -1
global/programs/security/kanidm.nix
···
-
{ pkgs, ...}: {
+
{ pkgs, ... }:
+
{
services.kanidm = {
enableClient = true;
package = pkgs.kanidm_1_7;
+5
systems/koumakan/hardware-configuration.nix
···
];
};
+
fileSystems."/var/lib/garage/data" = {
+
device = "/dev/disk/by-uuid/99607c97-0dc6-403e-b09a-7b40735f9176";
+
fsType = "xfs";
+
};
+
swapDevices = [
{ device = "/dev/disk/by-uuid/902b902d-3486-49de-9a58-7a079c9a090d"; }
];
+1
systems/koumakan/services/storage/default.nix
···
./atuin.nix
./wastebin.nix
./backup.nix
+
./garage.nix
./zipline.nix
];
}
+50
systems/koumakan/services/storage/garage.nix
···
+
{
+
_utils,
+
config,
+
pkgs,
+
...
+
}:
+
let
+
secrets = _utils.setupSecrets config {
+
namespace = "garage";
+
secrets = [
+
"rpc_secret"
+
"admin_token"
+
"metrics_token"
+
];
+
};
+
in
+
{
+
imports = [ secrets.generate ];
+
services.garage = {
+
enable = true;
+
package = pkgs.garage_2;
+
+
settings = {
+
metadata_dir = "/var/lib/garage/meta";
+
metadata_snapshots_dir = "/var/lib/garage/snapshots";
+
data_dir = "/var/lib/garage/data";
+
db_engine = "sqlite";
+
metadata_auto_snapshot_interval = "6h";
+
+
replication_factor = 1; # we only have the resources for a single node atm.
+
compression_level = 4;
+
+
rpc_bind_addr = "100.100.16.16:39931";
+
rpc_public_addr = "koumakan.mist-nessie.ts.net:39931";
+
rpc_secret_file = secrets.get "rpc_secret";
+
+
s3_api = {
+
s3_region = "ap-east-1";
+
api_bind_addr = "[::1]:39930";
+
root_domain = ".s3.soopy.moe";
+
};
+
+
admin = {
+
api_bind_addr = "100.100.16.16:39932";
+
admin_token_file = secrets.get "admin_token";
+
metrics_token_file = secrets.get "metrics_token";
+
};
+
};
+
};
+
}