10 Commits

Author SHA1 Message Date
Danilo Reyes
b117c3e7da changing theme
Some checks failed
Build on Push / build-configurations (push) Successful in 48m37s
Weekly NixOS Build & Cache / build-and-cache (push) Failing after 1h50m4s
2025-11-16 21:38:32 -06:00
Danilo Reyes
abb08afa46 new cachix keys 2025-11-16 21:38:25 -06:00
Danilo Reyes
a48b56d9ed I dont even use droidcam 2025-11-14 13:48:05 -06:00
Danilo Reyes
ca552337da vlc instead of mpv 2025-11-14 13:18:17 -06:00
Danilo Reyes
6c3e800227 atticd nos uses postgresql 2025-11-13 19:46:34 -06:00
Danilo Reyes
c4dc5c316c Implement retry mechanism for attic push commands in build workflows to enhance reliability and prevent pipeline failures. Update cache push logic in build-on-push, build-schemes, and weekly-build-cache workflows. 2025-11-13 18:54:29 -06:00
Danilo Reyes
1d7031b338 lidarr update 2025-11-13 14:13:04 -06:00
Danilo Reyes
b6341b79a6 Refactor lidarr-mb-gap to enhance functionality and improve configuration handling 2025-11-11 18:14:58 -06:00
Danilo Reyes
978dd75ea3 lidarr-mb-gap fully operational 2025-11-11 17:19:11 -06:00
Danilo Reyes
4201c7d8a6 Update lidarr-mb-gap configuration to conditionally include SSH key path based on user home directory 2025-11-11 15:34:57 -06:00
13 changed files with 207 additions and 68 deletions

View File

@@ -34,17 +34,57 @@ jobs:
nix build .#emacs-vm --quiet nix build .#emacs-vm --quiet
- name: Push to cache - name: Push to cache
continue-on-error: true
run: | run: |
echo "Pushing builds to cache..." echo "Pushing builds to cache..."
# Retry function for attic push commands
retry_attic_push() {
local max_attempts=5
local attempt=1
local command="$@"
while [ $attempt -le $max_attempts ]; do
echo "Attempt $attempt/$max_attempts: $command"
if eval "$command"; then
echo "✓ Successfully pushed to cache on attempt $attempt"
return 0
else
local exit_code=$?
echo "✗ Attempt $attempt failed with exit code $exit_code"
if [ $attempt -lt $max_attempts ]; then
echo "Waiting 2 seconds before retry..."
sleep 2
fi
attempt=$((attempt + 1))
fi
done
echo "⚠️ Failed to push to cache after $max_attempts attempts. Continuing anyway..."
return 0 # Don't fail the pipeline
}
# Push all built derivations to cache # Push all built derivations to cache
if ls result* 1> /dev/null 2>&1; then if ls result* 1> /dev/null 2>&1; then
attic push servidos:nixos result* retry_attic_push "attic push servidos:nixos result*"
fi fi
# Push the specific system derivations we just built # Push the specific system derivations we just built
nix build .#nixosConfigurations.workstation.config.system.build.toplevel --print-out-paths | attic push servidos:nixos --stdin # Get paths and push with retry (paths are already built, so this is fast)
nix build .#nixosConfigurations.server.config.system.build.toplevel --print-out-paths | attic push servidos:nixos --stdin workstation_path=$(nix build .#nixosConfigurations.workstation.config.system.build.toplevel --print-out-paths 2>/dev/null || echo "")
nix build .#emacs-vm --print-out-paths | attic push servidos:nixos --stdin if [ -n "$workstation_path" ]; then
retry_attic_push "echo \"$workstation_path\" | attic push servidos:nixos --stdin"
fi
server_path=$(nix build .#nixosConfigurations.server.config.system.build.toplevel --print-out-paths 2>/dev/null || echo "")
if [ -n "$server_path" ]; then
retry_attic_push "echo \"$server_path\" | attic push servidos:nixos --stdin"
fi
emacs_path=$(nix build .#emacs-vm --print-out-paths 2>/dev/null || echo "")
if [ -n "$emacs_path" ]; then
retry_attic_push "echo \"$emacs_path\" | attic push servidos:nixos --stdin"
fi
- name: Summary - name: Summary
run: | run: |

View File

@@ -36,9 +36,36 @@ jobs:
attic login servidos http://127.0.0.1:2343 ${{ secrets.ATTIC_TOKEN }} attic login servidos http://127.0.0.1:2343 ${{ secrets.ATTIC_TOKEN }}
- name: Build and push all schemes - name: Build and push all schemes
continue-on-error: true
run: | run: |
echo "Building and pushing all schemes..." echo "Building and pushing all schemes..."
# Retry function for attic push commands
retry_attic_push() {
local max_attempts=5
local attempt=1
local command="$@"
while [ $attempt -le $max_attempts ]; do
echo "Attempt $attempt/$max_attempts: $command"
if eval "$command"; then
echo "✓ Successfully pushed to cache on attempt $attempt"
return 0
else
local exit_code=$?
echo "✗ Attempt $attempt failed with exit code $exit_code"
if [ $attempt -lt $max_attempts ]; then
echo "Waiting 2 seconds before retry..."
sleep 2
fi
attempt=$((attempt + 1))
fi
done
echo "⚠️ Failed to push to cache after $max_attempts attempts. Continuing anyway..."
return 0 # Don't fail the pipeline
}
# Store original scheme # Store original scheme
ORIGINAL_SCHEME=$(grep -oP "scheme = schemesFile\.schemes\.\K\w+" config/stylix.nix) ORIGINAL_SCHEME=$(grep -oP "scheme = schemesFile\.schemes\.\K\w+" config/stylix.nix)
echo "Original scheme: $ORIGINAL_SCHEME" echo "Original scheme: $ORIGINAL_SCHEME"
@@ -61,14 +88,17 @@ jobs:
--out-link ./result-$scheme \ --out-link ./result-$scheme \
--quiet --quiet
# Push to cache # Push to cache with retry
echo "Pushing $scheme to cache..." echo "Pushing $scheme to cache..."
attic push servidos:nixos ./result-$scheme retry_attic_push "attic push servidos:nixos ./result-$scheme"
# Also push using print-out-paths for better cache coverage # Also push using print-out-paths for better cache coverage
nix build .#nixosConfigurations.${HOSTNAME}.config.system.build.toplevel \ build_path=$(nix build .#nixosConfigurations.${HOSTNAME}.config.system.build.toplevel \
--print-out-paths \ --print-out-paths \
--quiet | attic push servidos:nixos --stdin --quiet 2>/dev/null || echo "")
if [ -n "$build_path" ]; then
retry_attic_push "echo \"$build_path\" | attic push servidos:nixos --stdin"
fi
echo "✓ Completed $scheme" echo "✓ Completed $scheme"
echo "" echo ""

View File

@@ -60,17 +60,57 @@ jobs:
- name: Push to cache - name: Push to cache
if: steps.check_changes.outputs.changes == 'true' if: steps.check_changes.outputs.changes == 'true'
continue-on-error: true
run: | run: |
echo "Pushing builds to cache..." echo "Pushing builds to cache..."
# Retry function for attic push commands
retry_attic_push() {
local max_attempts=5
local attempt=1
local command="$@"
while [ $attempt -le $max_attempts ]; do
echo "Attempt $attempt/$max_attempts: $command"
if eval "$command"; then
echo "✓ Successfully pushed to cache on attempt $attempt"
return 0
else
local exit_code=$?
echo "✗ Attempt $attempt failed with exit code $exit_code"
if [ $attempt -lt $max_attempts ]; then
echo "Waiting 2 seconds before retry..."
sleep 2
fi
attempt=$((attempt + 1))
fi
done
echo "⚠️ Failed to push to cache after $max_attempts attempts. Continuing anyway..."
return 0 # Don't fail the pipeline
}
# Push all built derivations to cache # Push all built derivations to cache
if ls result* 1> /dev/null 2>&1; then if ls result* 1> /dev/null 2>&1; then
attic push servidos:nixos result* retry_attic_push "attic push servidos:nixos result*"
fi fi
# Push the specific system derivations we just built # Push the specific system derivations we just built
nix build .#nixosConfigurations.workstation.config.system.build.toplevel --print-out-paths | attic push servidos:nixos --stdin # Get paths and push with retry (paths are already built, so this is fast)
nix build .#nixosConfigurations.server.config.system.build.toplevel --print-out-paths | attic push servidos:nixos --stdin workstation_path=$(nix build .#nixosConfigurations.workstation.config.system.build.toplevel --print-out-paths 2>/dev/null || echo "")
nix build .#emacs-vm --print-out-paths | attic push servidos:nixos --stdin if [ -n "$workstation_path" ]; then
retry_attic_push "echo \"$workstation_path\" | attic push servidos:nixos --stdin"
fi
server_path=$(nix build .#nixosConfigurations.server.config.system.build.toplevel --print-out-paths 2>/dev/null || echo "")
if [ -n "$server_path" ]; then
retry_attic_push "echo \"$server_path\" | attic push servidos:nixos --stdin"
fi
emacs_path=$(nix build .#emacs-vm --print-out-paths 2>/dev/null || echo "")
if [ -n "$emacs_path" ]; then
retry_attic_push "echo \"$emacs_path\" | attic push servidos:nixos --stdin"
fi
- name: Commit updated flake.lock - name: Commit updated flake.lock
if: steps.check_changes.outputs.changes == 'true' if: steps.check_changes.outputs.changes == 'true'

View File

@@ -97,6 +97,7 @@
]; ];
substituters = [ substituters = [
"${config.my.servers.atticd.url}/nixos" "${config.my.servers.atticd.url}/nixos"
"${config.my.servers.atticd.url}/webref"
"https://nix-gaming.cachix.org" "https://nix-gaming.cachix.org"
"https://nixpkgs-python.cachix.org" "https://nixpkgs-python.cachix.org"
"https://devenv.cachix.org" "https://devenv.cachix.org"
@@ -106,7 +107,8 @@
"https://cosmic.cachix.org" "https://cosmic.cachix.org"
]; ];
trusted-public-keys = [ trusted-public-keys = [
"nixos:kubuWhYCk9/aZp5GDJFAScYgigM66DszP8i1Pzbq0Fc=" "nixos:GAnxnubP07Qu+6v8MErkuAa4uGCR4Npmu4acmQrUXpI="
"webref:qobPVDWPzbSJ0JIUoLBnWILcc+zbPa16CVAiN8MN6tg="
"nix-gaming.cachix.org-1:nbjlureqMbRAxR1gJ/f3hxemL9svXaZF/Ees8vCUUs4=" "nix-gaming.cachix.org-1:nbjlureqMbRAxR1gJ/f3hxemL9svXaZF/Ees8vCUUs4="
"nixpkgs-python.cachix.org-1:hxjI7pFxTyuTHn2NkvWCrAUcNZLNS3ZAvfYNuYifcEU=" "nixpkgs-python.cachix.org-1:hxjI7pFxTyuTHn2NkvWCrAUcNZLNS3ZAvfYNuYifcEU="
"devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw=" "devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw="

View File

@@ -9,7 +9,7 @@ let
schemesFile = import ./schemes.nix { schemesFile = import ./schemes.nix {
inherit pkgs inputs; inherit pkgs inputs;
}; };
scheme = schemesFile.schemes.febroary; scheme = schemesFile.schemes.who;
cfg = config.my.stylix; cfg = config.my.stylix;
gnomeEnabled = config.services.desktopManager.gnome.enable; gnomeEnabled = config.services.desktopManager.gnome.enable;
in in

44
flake.lock generated
View File

@@ -324,24 +324,6 @@
"type": "github" "type": "github"
} }
}, },
"flake-utils_2": {
"inputs": {
"systems": "systems_4"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"fonts": { "fonts": {
"flake": false, "flake": false,
"locked": { "locked": {
@@ -747,17 +729,16 @@
}, },
"lidarr-mb-gap": { "lidarr-mb-gap": {
"inputs": { "inputs": {
"flake-utils": "flake-utils_2",
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
] ]
}, },
"locked": { "locked": {
"lastModified": 1762882489, "lastModified": 1762901399,
"narHash": "sha256-YFk5GkD7TkIMbcnJzFz+IRN4vH7QJSRphpS3zje3PRU=", "narHash": "sha256-idaZ4k8oynnXUWTLXKPwqbLHdaPmLH1FfjsRWXUM97I=",
"ref": "refs/heads/main", "ref": "refs/heads/main",
"rev": "35e6c7e330868b00e7c8dbc878db776ba01f719d", "rev": "0b86143646f57aa52fab5182352ca0200e824571",
"revCount": 11, "revCount": 18,
"type": "git", "type": "git",
"url": "https://git.lebubu.org/vibe-coded/lidarr-mb-gap.git" "url": "https://git.lebubu.org/vibe-coded/lidarr-mb-gap.git"
}, },
@@ -1097,7 +1078,7 @@
"nixpkgs" "nixpkgs"
], ],
"nur": "nur_2", "nur": "nur_2",
"systems": "systems_5", "systems": "systems_4",
"tinted-foot": "tinted-foot", "tinted-foot": "tinted-foot",
"tinted-kitty": "tinted-kitty", "tinted-kitty": "tinted-kitty",
"tinted-schemes": "tinted-schemes", "tinted-schemes": "tinted-schemes",
@@ -1195,21 +1176,6 @@
"type": "github" "type": "github"
} }
}, },
"systems_5": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"tinted-foot": { "tinted-foot": {
"flake": false, "flake": false,
"locked": { "locked": {

View File

@@ -45,12 +45,14 @@
lidarr-mb-gap = lib.mkIf config.my.secureHost { lidarr-mb-gap = lib.mkIf config.my.secureHost {
sopsFile = ../../secrets/env.yaml; sopsFile = ../../secrets/env.yaml;
}; };
"private_keys/lidarr-mb-gap" = lib.mkIf config.my.secureHost { "private_keys/lidarr-mb-gap" =
sopsFile = ../../secrets/keys.yaml; lib.mkIf (config.my.secureHost && config.services.lidarr-mb-gap.enable)
owner = config.users.users.lidarr-mb-gap.name; {
inherit (config.users.users.lidarr-mb-gap) group; sopsFile = ../../secrets/keys.yaml;
path = "~/.ssh/ed25519_lidarr-mb-gap"; owner = config.users.users.lidarr-mb-gap.name;
}; inherit (config.users.users.lidarr-mb-gap) group;
path = "${config.users.users.lidarr-mb-gap.home}/.ssh/ed25519_lidarr-mb-gap";
};
}; };
networking = { networking = {
hostName = "server"; hostName = "server";
@@ -88,10 +90,11 @@
lidarr-mb-gap = { lidarr-mb-gap = {
enable = true; enable = true;
package = inputs.lidarr-mb-gap.packages.${pkgs.system}.lidarr-mb-gap; package = inputs.lidarr-mb-gap.packages.${pkgs.system}.lidarr-mb-gap;
reportDir = "/var/lib/lidarr-mb-gap/reports"; home = "/var/lib/lidarr-mb-gap";
envFile = config.sops.secrets.lidarr-mb-gap.path; envFile = config.sops.secrets.lidarr-mb-gap.path;
runInterval = "weekly"; runInterval = "weekly";
syncToVPS = false; syncToVPS = true;
vpsPort = 3456;
vpsHost = "lidarr-reports@${config.my.ips.vps}"; vpsHost = "lidarr-reports@${config.my.ips.vps}";
vpsPath = "/var/www/html/lidarr-mb-gap"; vpsPath = "/var/www/html/lidarr-mb-gap";
sshKeyFile = config.sops.secrets."private_keys/lidarr-mb-gap".path; sshKeyFile = config.sops.secrets."private_keys/lidarr-mb-gap".path;

View File

@@ -88,7 +88,8 @@ in
gnome-epub-thumbnailer gnome-epub-thumbnailer
podman-compose podman-compose
scrcpy scrcpy
mpv vlc
syncplay
; ;
inherit (pkgs.libheif) out; inherit (pkgs.libheif) out;
}; };
@@ -111,7 +112,6 @@ in
enableVirtualCamera = true; enableVirtualCamera = true;
plugins = builtins.attrValues { plugins = builtins.attrValues {
inherit (pkgs.obs-studio-plugins) inherit (pkgs.obs-studio-plugins)
droidcam-obs
obs-vkcapture obs-vkcapture
obs-vaapi obs-vaapi
obs-tuna obs-tuna

View File

@@ -17,7 +17,10 @@ in
settings = { settings = {
listen = "[::]:${toString cfg.port}"; listen = "[::]:${toString cfg.port}";
jwt = { }; jwt = { };
database.heartbeat = true; # 5 minutes database = {
heartbeat = true;
url = "postgresql:///${cfg.name}?host=${config.my.postgresSocket}";
};
chunking = { chunking = {
nar-size-threshold = 64 * 1024; # 64 KiB nar-size-threshold = 64 * 1024; # 64 KiB
min-size = 16 * 1024; # 16 KiB min-size = 16 * 1024; # 16 KiB

View File

@@ -54,5 +54,59 @@
} }
]; ];
} }
{
gpt = [
{
abbr = "GPT";
href = "http://127.0.0.1:8080";
description = "";
}
];
}
{
syncthing-workstation = [
{
abbr = "SW";
href = "http://workstation:8384";
description = "";
}
];
}
{
syncthing-server = [
{
abbr = "SS";
href = "http://server:8384";
description = "";
}
];
}
{
"music report" = [
{
abbr = "MR";
href = "https://mb-report.lebubu.org";
description = "";
}
];
}
{
"portfolio" = [
{
abbr = "PF";
href = "https://danilo-reyes.com";
description = "";
}
];
}
{
"webref" = [
{
abbr = "WR";
href = "https://webref.lebubu.org";
description = "";
}
];
}
]; ];
} }

View File

@@ -11,7 +11,7 @@ in
options.my.servers.lidarr = setup.mkOptions "lidarr" "music" 8686; options.my.servers.lidarr = setup.mkOptions "lidarr" "music" 8686;
config.virtualisation.oci-containers.containers.lidarr = lib.mkIf cfg.enable { config.virtualisation.oci-containers.containers.lidarr = lib.mkIf cfg.enable {
autoStart = true; autoStart = true;
image = "linuxserver/lidarr:version-2.13.3.4711"; image = "linuxserver/lidarr:version-3.0.1.4866";
ports = [ "${toString cfg.port}:${toString cfg.port}" ]; ports = [ "${toString cfg.port}:${toString cfg.port}" ];
environment = { environment = {
TZ = config.my.timeZone; TZ = config.my.timeZone;

View File

@@ -39,6 +39,7 @@ let
"readeck" "readeck"
"sonarqube" "sonarqube"
"gitea" "gitea"
"atticd"
]; ];
in in
{ {

View File

@@ -10,7 +10,7 @@ dns: ENC[AES256_GCM,data:fQN3SOm0HzOjSjTohRAD4KlXdEu5PbQc3DvK3rLC1S4G0G4HUPkgucN
cloudflare-api: ENC[AES256_GCM,data:iNUMlY8rz5yHVitpK4HGaFSK7j+c8Pm7rOQMOQGmSJ3a8ASyrtouPgLbcnoPY/jalsJYAj991dSiui+Vwqs=,iv:qWONG/KLd9/F4tqrWF5T25Zxst3bk+kOYaOFBFSBAAY=,tag:gRFxar8KS8gnX8oaCD156Q==,type:str] cloudflare-api: ENC[AES256_GCM,data:iNUMlY8rz5yHVitpK4HGaFSK7j+c8Pm7rOQMOQGmSJ3a8ASyrtouPgLbcnoPY/jalsJYAj991dSiui+Vwqs=,iv:qWONG/KLd9/F4tqrWF5T25Zxst3bk+kOYaOFBFSBAAY=,tag:gRFxar8KS8gnX8oaCD156Q==,type:str]
synapse: ENC[AES256_GCM,data:IR0pFwQBEM4O8mzzYXrPe2FjulSUGuitzLDLms2uovr6gEU82mCkRO/UCQOybNm03iOQeXX0Whz739kpYSGSInEyx69BNG/etH+bMu+GbYeMdrTEyXHSa7kcH4Ug,iv:Vn2ILYXnCj+Op/E2kWoxV+2ZtlxYJxO6XK3Ql41KW6w=,tag:9wogJFLlmfM5PRgPdwFlcw==,type:str] synapse: ENC[AES256_GCM,data:IR0pFwQBEM4O8mzzYXrPe2FjulSUGuitzLDLms2uovr6gEU82mCkRO/UCQOybNm03iOQeXX0Whz739kpYSGSInEyx69BNG/etH+bMu+GbYeMdrTEyXHSa7kcH4Ug,iv:Vn2ILYXnCj+Op/E2kWoxV+2ZtlxYJxO6XK3Ql41KW6w=,tag:9wogJFLlmfM5PRgPdwFlcw==,type:str]
readeck: ENC[AES256_GCM,data:TsIkHLji37dDHQRt78SquBhoSREHDgvgbc6+M1k2MLrgMGJ/Ejfy5AZXCIp/Qj5sXDzKP4j6Y6xFvGLswCqe02XjqGCpX13gZVCFPuKr8Nq051Xg,iv:Rc/pjYP+Vd/DvLCYsfJjDrnAlAiUlZOcNeeYzE6O3UY=,tag:OvR+CXMmrUFbsrHvduhnjA==,type:str] readeck: ENC[AES256_GCM,data:TsIkHLji37dDHQRt78SquBhoSREHDgvgbc6+M1k2MLrgMGJ/Ejfy5AZXCIp/Qj5sXDzKP4j6Y6xFvGLswCqe02XjqGCpX13gZVCFPuKr8Nq051Xg,iv:Rc/pjYP+Vd/DvLCYsfJjDrnAlAiUlZOcNeeYzE6O3UY=,tag:OvR+CXMmrUFbsrHvduhnjA==,type:str]
lidarr-mb-gap: ENC[AES256_GCM,data:zMr1UJUxqu3BJ2YRZKeIUzcEQRsHM6xeZ9kJ7ElynTD7ay0je+L0i+pyWe3OGwVN/8UUIQnKf42Pr6C4hJSxqwetjG6jQYTUGwTWzvxr/TDr6uhZwG59wLh8e02ymLw0GMJYfkQdZqEWyicHESHNdPmBFx3kByU01/QvOQlFO82/FPTvwpY=,iv:sk57rOrV/lj5f47sF4agZYPScLRiMgtM7iwzmubnZ2Q=,tag:LNl8TK3MswXj6lqBNA9Vqw==,type:str] lidarr-mb-gap: ENC[AES256_GCM,data:bNzD9Nf9BWAPkm0Yk0J4MJbmo908QX9VsD+40Rngnfec9nzH4vZ2DrelxRllgT1kgnXMQzvoSgNhBwkDN4fgX73hz1FjkytTwahlO0wcY6R+tw4aokh0QYy0TVx5pZ4u1FEQOAp3IMgBsP8HOqaL/NEsEo3yb0K9iC3AfFihkLDJmVh26Pg=,iv:go0qS7/BcfcAMPkAdGWCoL61gNqBG5lWDev++y9DJ/I=,tag:LgtEyTZH8NfhfrKTcAigZw==,type:str]
sops: sops:
age: age:
- recipient: age1lufn6t35gs4wgevyr2gud4eec7lvkn7pgnnv4tja64ww3hef7gqq8fas37 - recipient: age1lufn6t35gs4wgevyr2gud4eec7lvkn7pgnnv4tja64ww3hef7gqq8fas37
@@ -49,7 +49,7 @@ sops:
QXRUYWtGcWZCVW11U3VYRktuUjlCbDgKsTK4WhUza/JuoDTU3uATa6fq/8eYzxtb QXRUYWtGcWZCVW11U3VYRktuUjlCbDgKsTK4WhUza/JuoDTU3uATa6fq/8eYzxtb
9BUK1ddzx9Mghea9XBMS17YGtGmW800OsLBomb3SINnOFvejcnKf8Q== 9BUK1ddzx9Mghea9XBMS17YGtGmW800OsLBomb3SINnOFvejcnKf8Q==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
lastmodified: "2025-11-11T17:47:23Z" lastmodified: "2025-11-11T23:18:34Z"
mac: ENC[AES256_GCM,data:9wWhkUbU/bNV6erUpQhwza47XLbdC7RIfw1J+bFdKW1DLjokeYr1HacZVw+O3bGDFZqKs9JomfnYLxeZay0VXKLb/e61yETi2lx3/BV3Ghp3Tsglf3Eoy4QokvErqDi3GoT7Hvc2bArq4hlYuZI5yjUU+8xvwMopU9MS1C1Muuw=,iv:WfnngiGiY8pnvZHiGueCkZtnGbF42L7ut+tCs8BMskA=,tag:x81EkcXBIk1bylD/QqXzPg==,type:str] mac: ENC[AES256_GCM,data:i3U364pjZB5Y61Wf7ETbXhNWyfH1gw0oyPcNyT+nCIJmePh8JWiP9hnHmZfLS1BKkI2powQdezbz9R0XDvU7g2SkV8EsWmn/h3rFwbopUZbeRQ2SCoX7LGFez74l1oTPQjL8zWJVdrUtfAFgbZKSEWuz7rsDieKBVhIJwWaeePY=,iv:N4z+X3eD6jH+zQfY24qec+U6wkfhLGPm4MzY8T2Km/A=,tag:yluW5YSKMZ4Kk+wcXbkj8Q==,type:str]
unencrypted_suffix: _unencrypted unencrypted_suffix: _unencrypted
version: 3.11.0 version: 3.11.0