feat: add impermanence

This commit is contained in:
tux
2025-02-26 02:56:32 +05:30
parent 87da518f36
commit 7526abde1d
6 changed files with 167 additions and 146 deletions

View File

@ -9,7 +9,7 @@ keys:
- &arcturus age1zsl5d4vj6gl3h96y5p53sq5y4vr4vtlwp727h7rp9a4xfkxm53lqrh6r50
- &alpha age145uq9emlxqzm3wqauy9zqj78wqx9e6h09xag6wust7jjgn4upfzsaemcvx
- &vega age1ydkclhk9kwqdq74utesqdfupt43lz64d5k65gz2z9uyljcqq9fcq3hv28l
- &capella age1y4luzn2jls7rvgphej23srvdlx563lxq29tvf66vhwwzaf7c3f3qzvresh
- &capella age1sjnqsxdqyqngt52asc4cmrf0nkvmxvp8v4zrvrmtuftz3uffyskszjhqm5
creation_rules:
- path_regex: hosts/common/secrets.yaml$

View File

@ -2,49 +2,93 @@
modulesPath,
inputs,
username,
lib,
...
}: {
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
(modulesPath + "/profiles/qemu-guest.nix")
inputs.disko.nixosModules.default
(import ./disko.nix {device = "/dev/sda";})
(import ./disko.nix {device = "/dev/vda";})
../common
../../modules/nixos/virtualisation/docker.nix
../../modules/nixos/selfhosted/containers/cs2.nix
];
tux.services.openssh.enable = true;
sops.secrets = {
"cs2_secrets/SRCDS_TOKEN" = {
sopsFile = ./secrets.yaml;
nixpkgs = {
hostPlatform = "x86_64-linux";
};
boot = {
initrd.systemd = {
enable = lib.mkForce true;
services.wipe-my-fs = {
wantedBy = ["initrd.target"];
after = ["initrd-root-device.target"];
before = ["sysroot.mount"];
unitConfig.DefaultDependencies = "no";
serviceConfig.Type = "oneshot";
script = ''
mkdir /btrfs_tmp
mount /dev/disk/by-partlabel/disk-primary-root /btrfs_tmp
if [[ -e /btrfs_tmp/root ]]; then
mkdir -p /btrfs_tmp/old_roots
timestamp=$(date --date="@$(stat -c %Y /btrfs_tmp/root)" "+%Y-%m-%-d_%H:%M:%S")
mv /btrfs_tmp/root "/btrfs_tmp/old_roots/$timestamp"
fi
delete_subvolume_recursively() {
IFS=$'\n'
for i in $(btrfs subvolume list -o "$1" | cut -f 9- -d ' '); do
delete_subvolume_recursively "/btrfs_tmp/$i"
done
btrfs subvolume delete "$1"
}
for i in $(find /btrfs_tmp/old_roots/ -maxdepth 1 -mtime +30); do
delete_subvolume_recursively "$i"
done
btrfs subvolume create /btrfs_tmp/root
umount /btrfs_tmp
'';
};
};
"cs2_secrets/CS2_RCONPW" = {
sopsFile = ./secrets.yaml;
};
"cs2_secrets/CS2_PW" = {
sopsFile = ./secrets.yaml;
loader = {
grub = {
efiSupport = true;
efiInstallAsRemovable = true;
};
};
};
nixpkgs.hostPlatform = "x86_64-linux";
networking.hostName = "capella";
networking = {
hostName = "capella";
firewall.enable = false;
};
boot.loader.grub = {
efiSupport = true;
efiInstallAsRemovable = true;
users = {
users.${username} = {
password = "${username}";
hashedPasswordFile = lib.mkForce null;
};
};
programs.fuse.userAllowOther = true;
fileSystems."/persist".neededForBoot = true;
environment.persistence."/persist" = {
enable = false;
hideMounts = true;
directories = [
"/var/log"
"/var/lib/nixos"
];
files = [
"/etc/ssh/ssh_host_ed25519_key"
"/etc/ssh/ssh_host_ed25519_key.pub"
"/etc/ssh/ssh_host_rsa_key"
"/etc/ssh/ssh_host_rsa_key.pub"
];
};
home-manager.users.${username} = {

View File

@ -1,50 +1,49 @@
{device ? throw "Set this to the disk device, e.g. /dev/nvme0n1", ...}: {
disko.devices = {
disk.primary = {
inherit device;
type = "disk";
content = {
type = "gpt";
partitions = {
boot = {
name = "boot";
size = "1M";
type = "EF02";
};
esp = {
name = "ESP";
size = "500M";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
};
};
root = {
name = "root";
size = "100%";
content = {
type = "lvm_pv";
vg = "pool";
};
disko.devices.disk.primary = {
inherit device;
type = "disk";
content = {
type = "gpt"; # GPT partitioning scheme
partitions = {
boot = {
name = "boot";
size = "1M";
type = "EF02";
};
# EFI Partition
ESP = {
size = "512M";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
mountOptions = ["defaults" "umask=0077"];
};
};
};
};
lvm_vg = {
pool = {
type = "lvm_vg";
lvs = {
root = {
size = "100%FREE";
content = {
type = "filesystem";
format = "ext4";
mountpoint = "/";
mountOptions = [
"defaults"
];
# Btrfs Root Partition
root = {
size = "100%"; # Use remaining space
type = "8300"; # Linux filesystem type
content = {
type = "btrfs";
subvolumes = {
"/root" = {
mountOptions = ["compress=zstd"]; # Compression for better performance
mountpoint = "/"; # Root subvolume
};
"/persist" = {
mountOptions = ["compress=zstd"]; # Compression for persistent data
mountpoint = "/persist"; # Persistent subvolume
};
"/nix" = {
mountOptions = [
"compress=zstd"
"noatime"
"noacl"
]; # Optimize for Nix store
mountpoint = "/nix"; # Nix subvolume
};
};
};
};

View File

@ -1,3 +1,14 @@
{...}: {
{username, ...}: {
home.persistence."/persist/home/${username}" = {
directories = [
"Projects"
".ssh"
];
files = [
".zsh_history"
];
allowOther = true;
};
home.stateVersion = "24.11";
}

View File

@ -1,33 +0,0 @@
cs2_secrets:
SRCDS_TOKEN: ENC[AES256_GCM,data:WKUUPlgPbAQHItF6RUoAyTxJBVHhm8j4pBCtKnKB+D9Bpnv89rOHhgoEarI=,iv:r25P7Z/5EZgh0jzCLScyfVee2K4WmhD54iJUcVL6Txo=,tag:7xnXaeBkzTGFFaYEWhmmkQ==,type:str]
CS2_RCONPW: ENC[AES256_GCM,data:KEyA7qVQbhIh+Aonv0o4o3QtuRgQKEs=,iv:KkqDqXJarbvU2coPUEpNL43cPIGTkGI3RVYKGK/dT5Q=,tag:koNljlFITRY2EHjstcVrEA==,type:str]
CS2_PW: ENC[AES256_GCM,data:O1uNUjhOCnx0LeiLo1aJPPJ3YA2dwwk=,iv:iBSv4YEgqD49vfjSdbtzv4RE5pXw2yNkS4waseg5qQw=,tag:IVRZZxlV5YoSWHmLEAptlQ==,type:str]
sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age:
- recipient: age14vktfes95f33vuefwnmuvryas7az04u76dsgyhfvsx73czkvmp2q7njkl4
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBEL0lPSUtjNWRNeTRQdzly
Sm5hL2Z6OSs4VmJlSTgzZ1FBMjN0cjNLQmo4CjFkdGx1T0MxTm5EQ2ZKR0gyM2Vp
M3NwUDA3V21ic01JWWNpeWNIVVBBekkKLS0tIFNuT2o1TCtWMVBxVmh6T295bDNr
bGpaeC9JbTBUVk1KYmFSTnlSMm9ybEkK0n7HZAHvjm7T0mvea1zgQJMo5aoah+bs
vi3eg3dq6gKSVXYtsnMKMXF34Uh11UFb3Nrzhbg5JIfgYYsDi4asRQ==
-----END AGE ENCRYPTED FILE-----
- recipient: age1y4luzn2jls7rvgphej23srvdlx563lxq29tvf66vhwwzaf7c3f3qzvresh
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBpK0JGbDZqZ2pobXdHaXlw
U0t5TUVkSytNUmk3c3VuSzV0NnJuTkx1VGgwCnlNSzZ6a1FJSWMvbjdlS0s5YjVE
Ni9yVlFLVWNBZ2QwSi92NnhTOEs3R3MKLS0tIDg2MnI5ZEFJdDUzTjJVUDJXaTZz
QURYbkh3ckFTNG9RRG01eDRoZWVtM3MKd5+k09WBzx27iJ0A5Ek2bUiKCxoLfnMq
T2uRF77ElbZQRklicxBNdM895io/PLdMBocerTb4dWRE+I8FGwDCYg==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2025-01-10T22:54:08Z"
mac: ENC[AES256_GCM,data:qirA0ifdYXv92LPOJy6iYGplGRl4sWlu/3yBoSSXU2jEMnTQ0JD3a0ogOaRuwXH9VHKkSuRYBbAcJt0Y9lMCTJ9nDL6xdSx0V6PxpQxxlDvtTo7YL4IgGM7wHol3CiooTssV/eQtc0rxb7WCuOunZOE43km0MKSRbURxPBd68KY=,iv:wkE5Pxxa/qQxGwBy+GoRtv6eFWB8CRNRBwKOLWRUNVc=,tag:xaDvKe9AMdJ5lpIyx75BFA==,type:str]
pgp: []
unencrypted_suffix: _unencrypted
version: 3.9.2

View File

@ -1,4 +1,4 @@
tux-password: ENC[AES256_GCM,data:X5y3+HuWsnZ9wnjCBAbOzIWO9o7AB716/WoaqsJ4U9F7Ok4gCqZwUVMRm4unb54Ggp3ctRUAi2iDqTCKoaMIfgkdWzj74ix39w==,iv:9gl//PAvzXO2e+v6jRdVh5uLv3p1xt7cxuV7N27heLI=,tag:ZqKESAf5AoUVG6wbsQ1ymw==,type:str]
tux-password: ENC[AES256_GCM,data:znZPP7d0z0bfp6pxPUFwbjRk4orY5luGe0yXDSrGmYLLn6GJIlhzJ199sQfTG2T1u5/0AmRNkw7Ev7TZSDwyp/fZkmh53Mv5aQ==,iv:v7PbW34T987bj4uovtexyrfqTmCZbB3ZVr/hankwlq4=,tag:r4yqBVS+4T8AU9OCTzb0qQ==,type:str]
sops:
kms: []
gcp_kms: []
@ -8,77 +8,77 @@ sops:
- recipient: age14vktfes95f33vuefwnmuvryas7az04u76dsgyhfvsx73czkvmp2q7njkl4
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA5OVloM2VlbFNvdTZ2N3Q0
b2pLNXU4Q05meGRNV2NVc3k5djUyOFhjaWdvClZvUXR6K0JnTG5yQ0xzZ2ltcGxD
cmUvMW5KbTU0YzE3bmhrQWE0VzBPaE0KLS0tIFZydzZ5M2NtSko1TUxmRWdtcVBR
cVZha2lHcGQ2RndmTkJ6czMwQzFyUDgK+MdsnznFru+9XiBoKBXpMeyFjd8GiPNn
mIcD6RMxxg8OBOEuAqszTJ6aFgjNhTMmkZpD/htPcLHVqU6ETPz+ew==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB1ODE2Sk8vWGZvUTdXaXJQ
NkxMZ2RwVWhRU2YwRmNZQkVITzN4SkxKL0JRCmJnM0M5ZDdFcW01dEpYQ2JLcFdV
aCs1RnNQcXFlQmRkR3ljQWNvejU5ODAKLS0tIFMyeWIyVUhsS1pjcXl4cWM1TXJH
OUdMd050ZWl5bEwzMjc2Q1h0ZTltOE0Kle5ASAQTtMX3Jx3B2z817MGhAi3EgzZj
Ef0QcB2ZH/VdBu4awdyL9XJQcdDGEb6IdLJcBd0hs2Sy1ZDB7pmvmA==
-----END AGE ENCRYPTED FILE-----
- recipient: age1d3t78xlqd0erlqj2m9947l9eqwpge3zrperljw3xrshh0gjx4ghs8tuqcu
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0UnhyUlpNUnVnMTNJRUUy
VjZ2bWpZMzJHVlQ0RDRkVmRRdjh1WnNGZlJzCk14VWQvSnBjcjdBd1pFazlnS2VN
VSszM2hHQzl0eVNJa2JZNWZRNHdvREUKLS0tIDdvdGx3VlRIMzNBc05SUkhnajdN
L2ZuekNJYm9uc3ZuM1ljMDUxSjlEM1EKpXMtDX5xaQViGsxRT2mZeNDENk6PwD9x
pPrx/B4RvE6nbU9ywrYlK1UQ5VVrbA9pXxsyy2HMawN4fOkugbWSiQ==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBUWGpkTWEwWUMxd04rcTJv
VU9tMUExS01uZ1FaSjJ2UmUyNXBTQ05jVXp3ClExZDVCZEo5WHl4L25UdjE4dkdz
N0NsRUVwQ0ExWW9HWHphRVpzYTBVY28KLS0tIGZyNXFGc3ZxYkZIb2RRcHlxcFZ0
RnY4YVVCOFNubjk2R3BqMTMvcURpcHMK5wWDD91kf17SMHitd7ZcBnEYLpfvMBkz
5QZRIEyS+KQWn5Rj0Yc5avV10zynDhC1827Hqcrpg8vk042cA3f8Mw==
-----END AGE ENCRYPTED FILE-----
- recipient: age1udt3cssu7ahdrhsvckt8450rswrr6mknn36xpq74dkfp9lpajvnq84kdzj
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBsQlZOdWorTStxR0FxakZJ
Q1RNYnRSWXc5NnFSY2VZNElXd0pXR0hSV2xzCmgzZ1NxT2FiSWhYYWl0UVpNOUZY
QW1SamhQZzc1L2JKQmRjVXBGSXVHNkkKLS0tIDcyRUtRcXU0ekRwcDZKMTRncm5m
VTdNQVAxdkNQMFFncnd4eDJlc2Y1S2cK40aaDENAS8eXWtO7t+L0sYXvs7eJj6hd
xRmphVIxTILQ01WnD5StKEIOhg8y66h9KOIuqRLi7qb9781QYKfuzA==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBzSGhxaGhrdit3NGxudGhs
cHFNL002LzdKYUROL1pxRVFqQjY5SU5TOWtzCmZleUY0Q2E5TGVWL1I2Y0NhUVJM
c055VnJiTVdVQWYxblF1WjV4bXFzWXMKLS0tIFdZMy84VEFzbEhvbjVEQ1lOVm02
aGFFcXY0c21RbzdrRk9TcFh0QUJTSUUKj9FoEOzasV+vUMYVzaY1g8/F0K6sAVFe
kjPEuMR5s6JUWCrc/fgi3h2LS7ujd3HOAjpg1Ue9RlxH66vWgiRIdA==
-----END AGE ENCRYPTED FILE-----
- recipient: age1jg642q775gmnmxeu29gcf3lph8vem4xr8t84cxe809dpd0myrussh49h60
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAyZ25EWnZ0c2htV0JRNEFh
RFBzU3F6Y2NTMnpRNXlqUHZvQlREWUJ5R2swCkNKblJMSU56MXlVVWY0Nk5mOXU2
MjBlV0pLUHVEM0RvT1BROEthblFEWDQKLS0tIHdCWUNTbE1FMmcwaWxncTBYbFVp
ZGk0V3JpQUU1TGxyVFVmSUF6UDRseHMKUOVQlTblgz8FAsInQkBnyM3iUV5+gmDP
TVEfewEsw5+61ArA1OIqpXqW/QeCw9+1O6dOAi9/Z3Fgw4AdPUsWpQ==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBKb0pCNis1eWIvaFBqVzdC
QVhaTStCdWNSZHM0bWpjYlZTNDdFcThBWjFRCmk2OC9xaElUaUduNzFUWTROVDZm
b1RoTGh5aXNaR1dUbjFPekVRSXdhRTgKLS0tIHBndUlsTGJNbUlwRDJoeTJRcjky
NUxoVWI3VkxESU1aa0t0Q3RTeFJMR0kK63MYcs4X6ZIJtMYtpXdjfZWqoF2vU1TL
4JO2d3PtAMbJDTShXU6LAIPAZkFS3alSLo7AemfaCJSEqfjm7p2J9A==
-----END AGE ENCRYPTED FILE-----
- recipient: age1zsl5d4vj6gl3h96y5p53sq5y4vr4vtlwp727h7rp9a4xfkxm53lqrh6r50
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBmbTM1NTdZeGNDbVpJNEhH
TGVvVi95cnhMT2QxdkE0Z3d0WCtDdXNiRlUwCnNGNjRYWjQzV3hUVXg3WWp1SUh5
aE85YkV1NkVNcUNmbXFJN29lUVhReGsKLS0tIDNDR0JacTVLZFR1M0tnU25oVEVY
UTN4aHQyQ1hONURCc1FTQkMxdmZ1eUUKUt37gBetdgOyyloyeo2RLSAI481Rdv0y
OUgbQB6DvU8fVrptZnnIrkd2TjaHYq1bF1DsfMzLgtC4UVdeu9CSuw==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB4TndxTWJxWFdHMm5mMmxL
bjRkbm03N1lDOW1oV2FybStJMFR0bVh5WTNvCnp4NXdnVGFnVU5oWG1DczFnVDFD
dUthOVZLL2xZY3NsMzdEdzkwZmpvWTAKLS0tIE1McFQ2S0srUjJMdmhlczVwVk0r
RllNaysxN3BJbGRTeEdSQ0ZCTWJLS3cKrQLzrigUgT6TAwLh497bGsj8RPes8daP
bN+1TckQXdHEC7nHdanCljnq/EVp3Ant0GbtR/Xj0H01y3/wgydAoQ==
-----END AGE ENCRYPTED FILE-----
- recipient: age145uq9emlxqzm3wqauy9zqj78wqx9e6h09xag6wust7jjgn4upfzsaemcvx
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBDTU9vbjhtT1c0NlU4L0pq
ZHVlamZHS25hTVUycUNPaXEwVzBlb25wSGpJCjE0TXJQQ3ZoS2VRWUFJYjNteS9B
ZElVL3ZuU2VPMVdBdlREMUovejJRNDAKLS0tIGZMZXlEMnJOcG5vT0Q2SnVTdGtE
MTJiNDlXeCtPakJsWWF4RHJjdUpiQmMKYfnHI74b9S8zj6ybHdGB9iQtkQxVSgtv
xBkMZ6SgTZIuCS5HIf6a7muYIfkVCQMQHKF10p6BULVKc0Rr/ZAA1Q==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA0bGtlZkgwdzlNNXVKcEJr
V1lCRzljRlJka0g5SHRMNlNjVkRlQ0J0NjBvCnZtdVFuSlptb3Fkc0pFRm1xVDh5
dHZqMzN2RGc1dzNxc3lMOVJxZTlPYnMKLS0tIDBYMDVVUDYzR3h6UDBaOUFUU0Zo
MG1mMEZycmc5Q0NyOWlvM0NpQ0RVQm8KXwBINuKj8yf/GlAnftFiPV/CTddn5Q9e
6cfMXOUmu7maJ7ckftHh4McQn37KSRSvsUaDcfnJYi/+AP4xZVR2ew==
-----END AGE ENCRYPTED FILE-----
- recipient: age1ydkclhk9kwqdq74utesqdfupt43lz64d5k65gz2z9uyljcqq9fcq3hv28l
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBRTVo3NXRJOXpmLzU0SUZ0
bmVJZng1RmtSaTdWcFJLaDhFS0Z0d2h1T0dzCkhBbVNRUW1DUlFhQ3VJTC9ZRS9u
SmE0WmJQZ1hxS256YkgxZXphem9rNUkKLS0tIEMxY1ErM2M3dmEvemVkSVJLUnBP
dE5wWDRtbHVSRlFjUEs2WnpnUmRzRlUKznDFUOLnRW1dlL3hAQVZmvNxFsLxUbHM
6YOTK08Ahi93qsKpuC05XoKwbMhVyC59zdnNQzoU9EMtaCTm5UFUsQ==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBjM3U1TWRMcTBabFI0bzVP
cWE5eWZBQzk0MFdCQmd5UHpPaDdLbW8rVlJFCitOUkNoSDRkTnIyRDYzcmZTZXlS
ZldJckNncVBycjRNZ2gxc3NqYWtyUEUKLS0tIFNuTlVwR0tsSVE3bzhIeG5sbXhO
Q2VibU9DK0MvNm1sWjlZbE1RR1orU3MKMOM/nC+iCvWl6S1Deaj48PosHpICSGSq
E3rew2o2fDSorlEJQXQ1Hy5mU+QD6HUwD9Yf4Fj1avsWnfSUldbgLA==
-----END AGE ENCRYPTED FILE-----
- recipient: age1y4luzn2jls7rvgphej23srvdlx563lxq29tvf66vhwwzaf7c3f3qzvresh
- recipient: age1sjnqsxdqyqngt52asc4cmrf0nkvmxvp8v4zrvrmtuftz3uffyskszjhqm5
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBqc2d6cWR6VDZLWFA2ZlhV
dG1kNm9Fdi93ZllzNWxXdk5PcE5lR0F4QkRJCkEzbWxvU3dHZG01SzhEQm02eXh4
TkdCL2RtUDE0bzdIWk5jVVpvMGp2T28KLS0tIEQyVEZLZ3JQWlI2aVhDem4wZ0Er
RTh0enVYTkdrVjBVc2xGQjgrK25nMmcKkWeBeMglk452ZwHR3h67kL7vs/hQc7s+
2f0DyAQfYO4QWdDGkFB3WZI/b9YIDatIZGlKUx07CEmI84ErYYmNLA==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBva0ZSd24xeXdFYi9MNEF1
MW9JaG1mVzJ2bERyZ0l6SzNHbzBnSmx4YURRCklPemVENXFzU1o1Sng0L0FHbjVm
aFJSeVorWmR3ZmVLbHpEQjZMa2gzWkUKLS0tIHV6REZXREVXbEhTeGs2NmdlZ1d1
R3k4cS9WN2d3ME95Y3dqZzdSdlkrVkEKefD2SOkoWUJLBJgMxs4/UhE9sgGbm7A7
NzrHzIUOdjrkMIo/nAOrEO7vSI0CUwE1NHIc+q4LXyR1WHVY+ozI7g==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2025-02-01T13:39:27Z"
mac: ENC[AES256_GCM,data:5FyPM1CcibPMlt5d1J7AydMRKMGE1HTFQFHIokn00vByZSj0WIUFebJ/hryFzGZK05zsBDEULWSy2ntSG5MWJFdDom4Wl58WnDzZo33RyYztPXvpD/o8J5BuYQWFngCLiz67rm/7QdZ/A6N0uyl7YmvqLzGjore12eEB3R9jzOQ=,iv:yiFJ8l+oSyAVRFOwKLMqw23ODcxoGIq7+QytyTw1ZKY=,tag:fFJo+soFRqFIrvThKPEeYg==,type:str]
lastmodified: "2025-02-25T21:19:20Z"
mac: ENC[AES256_GCM,data:gMrMUE0d6b0rNYUviNx7gwbrXW0S7YeKyUQTtKqfBICWdv2pr/pcf+Yad78x0YANKau4f5fri+HZvHDVAe8Wo43+udpEkQZO1UMv7iLpjXqrWMiTQ7xSC3sY27gnoKrq2l6vojUh6Z/HXvdwZFyZ+SEQOYOnHXLmugVuK5ACVvU=,iv:2Lqlp1O2SQLdU+h//WGizVVcV4VbxKzwbGABV6vspPE=,tag:oRqfQXcYrNZQkBMMuat/NQ==,type:str]
pgp: []
unencrypted_suffix: _unencrypted
version: 3.9.3
version: 3.9.4