mirror of
https://github.com/oddlama/nix-config.git
synced 2025-10-10 23:00:39 +02:00
chore: remove immich
This commit is contained in:
parent
d42cbde676
commit
7d4ce411c2
24 changed files with 0 additions and 522 deletions
|
@ -1,385 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
globals,
|
|
||||||
nodes,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
sentinelCfg = nodes.sentinel.config;
|
|
||||||
wardWebProxyCfg = nodes.ward-web-proxy.config;
|
|
||||||
immichDomain = "immich.${globals.domains.me}";
|
|
||||||
|
|
||||||
ipImmichMachineLearning = "10.89.0.10";
|
|
||||||
ipImmichPostgres = "10.89.0.12";
|
|
||||||
ipImmichRedis = "10.89.0.13";
|
|
||||||
ipImmichServer = "10.89.0.14";
|
|
||||||
configFile = pkgs.writeText "immich.config.json" (
|
|
||||||
builtins.toJSON {
|
|
||||||
ffmpeg = {
|
|
||||||
accel = "disabled";
|
|
||||||
bframes = -1;
|
|
||||||
cqMode = "auto";
|
|
||||||
crf = 23;
|
|
||||||
gopSize = 0;
|
|
||||||
maxBitrate = "0";
|
|
||||||
preset = "ultrafast";
|
|
||||||
refs = 0;
|
|
||||||
targetAudioCodec = "aac";
|
|
||||||
targetResolution = "720";
|
|
||||||
targetVideoCodec = "h264";
|
|
||||||
temporalAQ = false;
|
|
||||||
threads = 0;
|
|
||||||
tonemap = "hable";
|
|
||||||
transcode = "required";
|
|
||||||
twoPass = false;
|
|
||||||
};
|
|
||||||
job = {
|
|
||||||
backgroundTask.concurrency = 5;
|
|
||||||
faceDetection.concurrency = 10;
|
|
||||||
library.concurrency = 5;
|
|
||||||
metadataExtraction.concurrency = 10;
|
|
||||||
migration.concurrency = 5;
|
|
||||||
search.concurrency = 5;
|
|
||||||
sidecar.concurrency = 5;
|
|
||||||
smartSearch.concurrency = 10;
|
|
||||||
thumbnailGeneration.concurrency = 10;
|
|
||||||
videoConversion.concurrency = 5;
|
|
||||||
};
|
|
||||||
library.scan = {
|
|
||||||
enabled = true;
|
|
||||||
cronExpression = "0 0 * * *";
|
|
||||||
};
|
|
||||||
logging = {
|
|
||||||
enabled = true;
|
|
||||||
level = "log";
|
|
||||||
};
|
|
||||||
machineLearning = {
|
|
||||||
clip = {
|
|
||||||
enabled = true;
|
|
||||||
modelName = "ViT-B-32__openai";
|
|
||||||
};
|
|
||||||
enabled = true;
|
|
||||||
facialRecognition = {
|
|
||||||
enabled = true;
|
|
||||||
maxDistance = 0.45;
|
|
||||||
minFaces = 2;
|
|
||||||
minScore = 0.65;
|
|
||||||
modelName = "buffalo_l";
|
|
||||||
};
|
|
||||||
url = "http://${ipImmichMachineLearning}:3003";
|
|
||||||
};
|
|
||||||
map.enabled = true;
|
|
||||||
newVersionCheck.enabled = true;
|
|
||||||
oauth = rec {
|
|
||||||
enabled = true;
|
|
||||||
autoLaunch = false;
|
|
||||||
autoRegister = true;
|
|
||||||
buttonText = "Login with Kanidm";
|
|
||||||
|
|
||||||
mobileOverrideEnabled = true;
|
|
||||||
mobileRedirectUri = "https://${immichDomain}/api/oauth/mobile-redirect";
|
|
||||||
|
|
||||||
clientId = "immich";
|
|
||||||
# clientSecret will be dynamically added in activation script
|
|
||||||
issuerUrl = "https://${globals.services.kanidm.domain}/oauth2/openid/${clientId}";
|
|
||||||
scope = "openid email profile";
|
|
||||||
storageLabelClaim = "preferred_username";
|
|
||||||
};
|
|
||||||
passwordLogin.enabled = true;
|
|
||||||
reverseGeocoding.enabled = true;
|
|
||||||
server = {
|
|
||||||
externalDomain = "https://${immichDomain}";
|
|
||||||
loginPageMessage = "Besser im Stuhl einschlafen als im Schlaf einstuhlen.";
|
|
||||||
};
|
|
||||||
storageTemplate = {
|
|
||||||
enabled = true;
|
|
||||||
hashVerificationEnabled = true;
|
|
||||||
template = "{{y}}/{{MM}}/{{filename}}";
|
|
||||||
};
|
|
||||||
theme.customCss = "";
|
|
||||||
trash = {
|
|
||||||
days = 30;
|
|
||||||
enabled = true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
processedConfigFile = "/run/agenix/immich.config.json";
|
|
||||||
|
|
||||||
version = "v1.131.3";
|
|
||||||
environment = {
|
|
||||||
DB_DATABASE_NAME = "immich";
|
|
||||||
DB_HOSTNAME = ipImmichPostgres;
|
|
||||||
DB_PASSWORD_FILE = config.age.secrets.postgres_password.path;
|
|
||||||
DB_USERNAME = "postgres";
|
|
||||||
IMMICH_VERSION = "${version}";
|
|
||||||
UPLOAD_LOCATION = upload_folder;
|
|
||||||
IMMICH_SERVER_URL = "http://${ipImmichServer}:2283/";
|
|
||||||
IMMICH_MACHINE_LEARNING_URL = "http://${ipImmichMachineLearning}:3003";
|
|
||||||
REDIS_HOSTNAME = ipImmichRedis;
|
|
||||||
IMMICH_CONFIG_FILE = "/immich.config.json";
|
|
||||||
};
|
|
||||||
|
|
||||||
upload_folder = "/storage/immich";
|
|
||||||
pgdata_folder = "/persist/immich/pgdata";
|
|
||||||
model_folder = "/state/immich/modeldata";
|
|
||||||
|
|
||||||
serviceConfig = {
|
|
||||||
serviceConfig.Restart = "always";
|
|
||||||
after = [ "podman-network-immich-default.service" ];
|
|
||||||
requires = [ "podman-network-immich-default.service" ];
|
|
||||||
partOf = [ "podman-compose-immich-root.target" ];
|
|
||||||
wantedBy = [ "podman-compose-immich-root.target" ];
|
|
||||||
};
|
|
||||||
in
|
|
||||||
{
|
|
||||||
microvm.mem = 1024 * 12;
|
|
||||||
microvm.vcpu = 16;
|
|
||||||
|
|
||||||
# Forwarding required to masquerade podman network
|
|
||||||
boot.kernel.sysctl."net.ipv4.ip_forward" = 1;
|
|
||||||
|
|
||||||
environment.persistence."/state".directories = [
|
|
||||||
{
|
|
||||||
directory = "/var/lib/containers";
|
|
||||||
mode = "0755";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
# Mirror the original oauth2 secret
|
|
||||||
age.secrets.immich-oauth2-client-secret = {
|
|
||||||
inherit (nodes.ward-kanidm.config.age.secrets.kanidm-oauth2-immich) rekeyFile;
|
|
||||||
mode = "440";
|
|
||||||
group = "root";
|
|
||||||
};
|
|
||||||
|
|
||||||
system.activationScripts.agenixRooterDerivedSecrets = {
|
|
||||||
# Run after agenix has generated secrets
|
|
||||||
deps = [ "agenix" ];
|
|
||||||
text = ''
|
|
||||||
immichClientSecret=$(< ${config.age.secrets.immich-oauth2-client-secret.path})
|
|
||||||
${pkgs.jq}/bin/jq --arg immichClientSecret "$immichClientSecret" '.oauth.clientSecret = $immichClientSecret' ${configFile} > ${processedConfigFile}
|
|
||||||
chmod 444 ${processedConfigFile}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
wireguard.proxy-sentinel = {
|
|
||||||
client.via = "sentinel";
|
|
||||||
firewallRuleForNode.sentinel.allowedTCPPorts = [ 2283 ];
|
|
||||||
};
|
|
||||||
wireguard.proxy-home = {
|
|
||||||
client.via = "ward";
|
|
||||||
firewallRuleForNode.ward-web-proxy.allowedTCPPorts = [ 2283 ];
|
|
||||||
};
|
|
||||||
networking.nftables.chains.forward.into-immich-container = {
|
|
||||||
after = [ "conntrack" ];
|
|
||||||
rules = [
|
|
||||||
"iifname proxy-sentinel ip saddr ${sentinelCfg.wireguard.proxy-sentinel.ipv4} tcp dport 2283 accept"
|
|
||||||
"iifname proxy-home ip saddr ${wardWebProxyCfg.wireguard.proxy-home.ipv4} tcp dport 2283 accept"
|
|
||||||
"iifname podman1 oifname vlan-services accept"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
globals.services.immich.domain = immichDomain;
|
|
||||||
globals.monitoring.http.immich = {
|
|
||||||
url = "https://${immichDomain}";
|
|
||||||
expectedBodyRegex = "immutable.entry.app";
|
|
||||||
network = "internet";
|
|
||||||
};
|
|
||||||
|
|
||||||
nodes.sentinel = {
|
|
||||||
services.nginx = {
|
|
||||||
upstreams.immich = {
|
|
||||||
servers."${config.wireguard.proxy-sentinel.ipv4}:2283" = { };
|
|
||||||
extraConfig = ''
|
|
||||||
zone immich 64k;
|
|
||||||
keepalive 2;
|
|
||||||
'';
|
|
||||||
monitoring = {
|
|
||||||
enable = true;
|
|
||||||
expectedBodyRegex = "immutable.entry.app";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
virtualHosts.${immichDomain} = {
|
|
||||||
forceSSL = true;
|
|
||||||
useACMEWildcardHost = true;
|
|
||||||
locations."/" = {
|
|
||||||
proxyPass = "http://immich";
|
|
||||||
proxyWebsockets = true;
|
|
||||||
};
|
|
||||||
extraConfig = ''
|
|
||||||
client_max_body_size 50G;
|
|
||||||
proxy_buffering off;
|
|
||||||
proxy_request_buffering off;
|
|
||||||
proxy_read_timeout 600s;
|
|
||||||
proxy_send_timeout 600s;
|
|
||||||
send_timeout 600s;
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
nodes.ward-web-proxy = {
|
|
||||||
services.nginx = {
|
|
||||||
upstreams.immich = {
|
|
||||||
servers."${config.wireguard.proxy-home.ipv4}:2283" = { };
|
|
||||||
extraConfig = ''
|
|
||||||
zone immich 64k;
|
|
||||||
keepalive 2;
|
|
||||||
'';
|
|
||||||
monitoring = {
|
|
||||||
enable = true;
|
|
||||||
expectedBodyRegex = "immutable.entry.app";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
virtualHosts.${immichDomain} = {
|
|
||||||
forceSSL = true;
|
|
||||||
useACMEWildcardHost = true;
|
|
||||||
locations."/" = {
|
|
||||||
proxyPass = "http://immich";
|
|
||||||
proxyWebsockets = true;
|
|
||||||
extraConfig = '''';
|
|
||||||
};
|
|
||||||
extraConfig = ''
|
|
||||||
client_max_body_size 50G;
|
|
||||||
proxy_buffering off;
|
|
||||||
proxy_request_buffering off;
|
|
||||||
proxy_read_timeout 600s;
|
|
||||||
proxy_send_timeout 600s;
|
|
||||||
send_timeout 600s;
|
|
||||||
allow ${globals.net.home-lan.vlans.home.cidrv4};
|
|
||||||
allow ${globals.net.home-lan.vlans.home.cidrv6};
|
|
||||||
# Firezone traffic
|
|
||||||
allow ${globals.net.home-lan.vlans.services.hosts.ward.ipv4};
|
|
||||||
allow ${globals.net.home-lan.vlans.services.hosts.ward.ipv6};
|
|
||||||
deny all;
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
systemd.tmpfiles.settings = {
|
|
||||||
"10-immich" = {
|
|
||||||
${upload_folder}.d = {
|
|
||||||
mode = "0770";
|
|
||||||
};
|
|
||||||
${pgdata_folder}.d = {
|
|
||||||
mode = "0770";
|
|
||||||
};
|
|
||||||
${model_folder}.d = {
|
|
||||||
mode = "0770";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
age.secrets.postgres_password.generator.script = "alnum";
|
|
||||||
|
|
||||||
# Runtime
|
|
||||||
virtualisation.oci-containers.backend = "podman";
|
|
||||||
virtualisation.podman = {
|
|
||||||
enable = true;
|
|
||||||
autoPrune.enable = true;
|
|
||||||
dockerCompat = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Containers
|
|
||||||
virtualisation.oci-containers.containers."immich_machine_learning" = {
|
|
||||||
image = "ghcr.io/immich-app/immich-machine-learning:${version}";
|
|
||||||
inherit environment;
|
|
||||||
volumes = [
|
|
||||||
"${processedConfigFile}:${environment.IMMICH_CONFIG_FILE}:ro"
|
|
||||||
"${model_folder}:/cache:rw"
|
|
||||||
];
|
|
||||||
log-driver = "journald";
|
|
||||||
extraOptions = [
|
|
||||||
"--network-alias=immich-machine-learning"
|
|
||||||
"--network=immich-default"
|
|
||||||
"--ip=${ipImmichMachineLearning}"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
systemd.services."podman-immich_machine_learning" = serviceConfig;
|
|
||||||
virtualisation.oci-containers.containers."immich_postgres" = {
|
|
||||||
image = "tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0";
|
|
||||||
environment = {
|
|
||||||
POSTGRES_DB = environment.DB_DATABASE_NAME;
|
|
||||||
POSTGRES_PASSWORD_FILE = environment.DB_PASSWORD_FILE;
|
|
||||||
POSTGRES_USER = environment.DB_USERNAME;
|
|
||||||
};
|
|
||||||
volumes = [
|
|
||||||
"${config.age.secrets.postgres_password.path}:${config.age.secrets.postgres_password.path}:ro"
|
|
||||||
"${pgdata_folder}:/var/lib/postgresql/data:rw"
|
|
||||||
];
|
|
||||||
log-driver = "journald";
|
|
||||||
extraOptions = [
|
|
||||||
"--network-alias=immich_postgres"
|
|
||||||
"--network=immich-default"
|
|
||||||
"--ip=${ipImmichPostgres}"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
systemd.services."podman-immich_postgres" = serviceConfig;
|
|
||||||
virtualisation.oci-containers.containers."immich_redis" = {
|
|
||||||
image = "redis:6.2-alpine@sha256:51d6c56749a4243096327e3fb964a48ed92254357108449cb6e23999c37773c5";
|
|
||||||
log-driver = "journald";
|
|
||||||
extraOptions = [
|
|
||||||
"--network-alias=immich_redis"
|
|
||||||
"--network=immich-default"
|
|
||||||
"--ip=${ipImmichRedis}"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
systemd.services."podman-immich_redis" = serviceConfig;
|
|
||||||
virtualisation.oci-containers.containers."immich_server" = {
|
|
||||||
image = "ghcr.io/immich-app/immich-server:${version}";
|
|
||||||
inherit environment;
|
|
||||||
volumes = [
|
|
||||||
"${processedConfigFile}:${environment.IMMICH_CONFIG_FILE}:ro"
|
|
||||||
"${config.age.secrets.postgres_password.path}:${config.age.secrets.postgres_password.path}:ro"
|
|
||||||
"/etc/localtime:/etc/localtime:ro"
|
|
||||||
"${upload_folder}:/usr/src/app/upload:rw"
|
|
||||||
];
|
|
||||||
ports = [
|
|
||||||
"2283:2283/tcp"
|
|
||||||
];
|
|
||||||
dependsOn = [
|
|
||||||
"immich_postgres"
|
|
||||||
"immich_redis"
|
|
||||||
];
|
|
||||||
log-driver = "journald";
|
|
||||||
extraOptions = [
|
|
||||||
"--network-alias=immich-server"
|
|
||||||
"--network=immich-default"
|
|
||||||
"--ip=${ipImmichServer}"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
systemd.services."podman-immich_server" = serviceConfig // {
|
|
||||||
unitConfig.UpheldBy = [
|
|
||||||
"podman-immich_postgres.service"
|
|
||||||
"podman-immich_redis.service"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
# Networks
|
|
||||||
systemd.services."podman-network-immich-default" = {
|
|
||||||
path = [ pkgs.podman ];
|
|
||||||
serviceConfig = {
|
|
||||||
Type = "oneshot";
|
|
||||||
RemainAfterExit = true;
|
|
||||||
ExecStop = "${pkgs.podman}/bin/podman network rm -f immich-default";
|
|
||||||
};
|
|
||||||
script = ''
|
|
||||||
podman network inspect immich-default || podman network create immich-default --opt isolate=true --subnet=10.89.0.0/24 --disable-dns
|
|
||||||
'';
|
|
||||||
partOf = [ "podman-compose-immich-root.target" ];
|
|
||||||
wantedBy = [ "podman-compose-immich-root.target" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
# Root service
|
|
||||||
# When started, this will automatically create all resources and start
|
|
||||||
# the containers. When stopped, this will teardown all resources.
|
|
||||||
systemd.targets."podman-compose-immich-root" = {
|
|
||||||
unitConfig = {
|
|
||||||
Description = "Root target generated by compose2nix.";
|
|
||||||
};
|
|
||||||
wantedBy = [ "multi-user.target" ];
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1 +0,0 @@
|
||||||
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKE+geXK2RVVNwZVoYOuX7pW+6mbgCa9SIghJCdHmbSB
|
|
|
@ -1,9 +0,0 @@
|
||||||
age-encryption.org/v1
|
|
||||||
-> X25519 lxcs64hgn5qiaMjFfFKIdS7a4DYzsSIp2rYWu9Sxg1o
|
|
||||||
DWoXP55lOfYh26BQyMTWtJpZXD6RAYYT4ArCNy2RmPQ
|
|
||||||
-> piv-p256 xqSe8Q ApSmxT6ujEnuH3c0Avr7g/DGdbSf906OFhOiMvi9ONmt
|
|
||||||
UmLDT5AJkIc8GgLgaVgS6KWk7d0rf/P29V4l2JU1lgI
|
|
||||||
-> )-grease p4kI HFcVp
|
|
||||||
dPSUp6CWnLW6gpi6a2g+mWKIZ+OEYiRvTc6YcSLY
|
|
||||||
--- 7pImagsw0LryRQOHCqzwJxCQNyoESpJsrztMaUqrwPg
|
|
||||||
’›NbǬøÿ Е7ç�æàÿ™ÔçM³NPþ‡r»û>+8÷zÿŠ��ŸJ×— Ä’o\LWÓs‘Ú³Þz0Þ;öi¼pRiKÛ.w�v¤—K
|
|
|
@ -1,10 +0,0 @@
|
||||||
age-encryption.org/v1
|
|
||||||
-> X25519 ks4qXV3qPJeADOguclgvlOS/81Wd7fgcVKdlhg3FgzI
|
|
||||||
PLKauYQ+46t8RSPD73M18RUOL/z4SjikoNsDbL3X/cc
|
|
||||||
-> piv-p256 xqSe8Q A2xu0dbsgARRnDBak5Cd6YG3JF5zOuZlqzPdbg9lgP2x
|
|
||||||
+tbb9URbCrPqIWOp0O26ptbXRUh/6koKhdONNz5p494
|
|
||||||
-> Yy),Z@(\-grease %R <|> I]- G
|
|
||||||
1t94Jtghka4vBg2VMzDqPO2qwzpovhNT0W+fe0K82obdDaajCa3pfiFz4Nrfbm+7
|
|
||||||
hsJyVaViVGio7BVDPso
|
|
||||||
--- 8JU+s4Yn2DCmSHfRx4EPn8pa8RRWTn8BfEkCLhVn+DI
|
|
||||||
¶‚¤~£¦l¾àñoŒÿLµðÒNâu앵êzωtÆ5‹Îžà¯c½W0g8,{5à•t²êKíñç>ˆmó’‡…›H×à™¾ë©?Á¹
|
|
|
@ -1,11 +0,0 @@
|
||||||
age-encryption.org/v1
|
|
||||||
-> X25519 SQp3X/pCRAK0LDysYw/iO5XbD5DknZDqrfYVsF4Wryc
|
|
||||||
MToFiMkEqhq0uJlDE3peo/1r2eG8SGfYj6XZDcHJHsE
|
|
||||||
-> piv-p256 xqSe8Q AjwjDiFrzD8Zvc7Xx9fA7WcxG+nsF2mUgmMlFswinh/l
|
|
||||||
ONrzVVrUpWWfy4on9Vouz3D3VxSYu4Rb2+DnRSyBtWU
|
|
||||||
-> J)C?2Kps-grease ",
|
|
||||||
+w4vydh7txIfUxLLwNztvo6nDva4zEfkJJZn2Kbh1agtjfiaqVh9hznQyHjY+bKX
|
|
||||||
TTro7bJoHrdBOj7RX6CV1BO0w2ToeQ1XnkhZv/8GE2xm3aehsSEFt5AqU8f2ucrt
|
|
||||||
|
|
||||||
--- ISE4KQBHYV8vazUMaRG9y8BTag3zVtMN32n3lwiTp48
|
|
||||||
å† d”ѲT‚AvÈuˆW9lPé’õFg. T² FS!à€Ú5×Û¤ÂTËo ÷LvΦ¯ž¿,Ú2îåTH7aº!lÕj*GG
|
|
|
@ -1,10 +0,0 @@
|
||||||
age-encryption.org/v1
|
|
||||||
-> X25519 Ty4SRY71eyfLWJGIC0cv89Rg+PEJr1LTyJQgIvj8mRg
|
|
||||||
3z6gLE56zvPRWWFpCkAx6GdFwAztMgBZnfI/OJfCtzU
|
|
||||||
-> piv-p256 xqSe8Q AyEmhugnXJ33KHAVh/9B0C9oQ1SF3/gFtoAPpThy/4Ef
|
|
||||||
eEPKdBTKx7Px39zRu7Dtdm6vyZxEzN23SekmsjZ9ILU
|
|
||||||
-> d^!fR-grease
|
|
||||||
WjaPB3mvS8+aKj9FKDdeSMrIDRu4cvxT9llTrxZxOD+Ej4o8lCN+LRmrAZ6eb1W8
|
|
||||||
BWuUvPLUgyWi4eyDIARjperIrX8ESLgqIg
|
|
||||||
--- rKC5HveByQdXritRQdLqNgasq6y20rT/nfrQenVmoTo
|
|
||||||
Ñ_A5ðN1iB ö÷•ãlµ[O�IpªØJ;iÀq,Û¶õ#¾Îý¸KOè‹òãx}Kô´¸›Zs0û„(«!à£�dÈÊY2ÚMvÆ?
|
|
|
@ -1,7 +0,0 @@
|
||||||
age-encryption.org/v1
|
|
||||||
-> ssh-ed25519 yV7lcA jwq+aERGrSBruGupY97T9auTbE+H3g8Hw3xC+1i+bk8
|
|
||||||
IspH8Sk7HmTFgxrFY4X/y82KMUYVNaKQprqLRc49A9w
|
|
||||||
-> %3<-grease {Y*P~G`X ~.XJm) <M. ='5bI`T
|
|
||||||
aTqgbtmB0/xotODD9dUsQsY+WedipQ
|
|
||||||
--- AbTCFx67d3pS9Wqv7bAsHReYYWHtvPj2+zpeL8x8IkY
|
|
||||||
âšIÞ‡c†ý…"YY¢@sÎÛäœGËBó“Z™8ÑÊm5”�Ts?ðÃñ›‡è�þP¶{Õ«º†ßJVíM`„�f¢O1 ÑEe7ß
|
|
Binary file not shown.
|
@ -1,7 +0,0 @@
|
||||||
age-encryption.org/v1
|
|
||||||
-> ssh-ed25519 U8ytLQ H08JFmNPi6NkwMDFFRyox/Bwy7wuao3J9w+l+ETur2A
|
|
||||||
t8qlbolexzP3+cDki2urbIWVYW4NfZMwZBvFMMI8GBM
|
|
||||||
-> -s7e/*R6-grease s-UuW4;H k$c2ACx ]rWl(
|
|
||||||
yqY+Oe9nCE++YSot+ca500n+j7GKqiUnnlv79UaRrg
|
|
||||||
--- /VOnIZ9CtnxPjX4lwMg3XNlhbiz62OFrqcdN6Br8Pgg
|
|
||||||
Ç/i¯Â1„ƒDôJ<ÅËw£8Ȱa’Çýªds@Ί£×¥DzîM92ÄAFl'm¹Wå×:…L]1̉RR«¸\»!Û¿Aàß$¦I“¿×
|
|
|
@ -1,8 +0,0 @@
|
||||||
age-encryption.org/v1
|
|
||||||
-> ssh-ed25519 U8ytLQ 2BnIjFpUAhxNiv1VMyTxfAk/zUSkU2iHdB/bRXvEX3E
|
|
||||||
WryT51bMkDioGkL98uslwujesj30ybnjgcg/jNn7J9w
|
|
||||||
-> L];e9$m-grease
|
|
||||||
9+l/2uiMG8qKpm6g7n2rtRTKulRQ63bCCycs+bnIPMduNX+E
|
|
||||||
--- vh3VVgzgopb7EJBKQIoL4fUYKpuKDojxeX6ZihRcQ1M
|
|
||||||
Úº’–UÀ'Ç¿P岨\SŠN˜ÊH†ê}oÜõ�aÁ‘Ä'*úÓ†Šnؾ
|
|
||||||
]ÃþŠs¨…±'ÝÙ¢ðQ!І‹’.õ)=}«
|
|
|
@ -1,8 +0,0 @@
|
||||||
age-encryption.org/v1
|
|
||||||
-> ssh-ed25519 U8ytLQ ZDczMuStTpVUMGlObtJB5uA07U/OsrOXaocAGJQ5SUQ
|
|
||||||
D4Lg2MwHZVFHhTBlCDB3ZAnigTCVnNOFII5Hs9FxoL0
|
|
||||||
-> oV-grease Y>Wk^oz
|
|
||||||
lG4J8UNTiqKwws8XmfgOZBtLBf83/OciQN+bWAFbbVd5JSl1SSUDuyu94bp34Udq
|
|
||||||
MyziULMJLT/tgjRM8H/TmBbuuIhWImHegnSA0WAZ
|
|
||||||
--- lSARhYuFG3dOCOJmNhgEhToUWyUxwBDQaYTrJ4KJQM0
|
|
||||||
*¿�ù}Œ˜ãêR@íŸï§]F… ÕÞ\ª‰ŒH€Gl}Õûœ¸�4¥™¿'J‘‚g³<å% ‚ä1>€µï=Rë03Iˆª\Jñ�
|
|
|
@ -1,7 +0,0 @@
|
||||||
age-encryption.org/v1
|
|
||||||
-> ssh-ed25519 U8ytLQ Q49jP/1k8wgMHasJRs3j4qw4kDjmYMxzx190cqJpD34
|
|
||||||
97gvdGUGDqP2LMdxuIM6u0FdNgKbUuKZl6p5irO+BeM
|
|
||||||
-> 4FcwR4h*-grease Yn]g)b %taX> 066d`Ecg
|
|
||||||
6cpXlQaMcTQU7dHNzQgZMeExv0KnJxzAov0BPBpFeiVfQPJqoDc+qgU
|
|
||||||
--- 94bvmt9LqBAL3sqQRhc1k9vYo91+Fa7/r8nDpqnyXZ4
|
|
||||||
ËLp#VÎP%7º†
…çdÖH~Æ}c¬�“|ž/UvF{[�¶Èö›sD¼ªÂC©y>š®Z°®õ³V@0Õ–éáÙ^}1Þ¤ý$(�
|
|
Binary file not shown.
Binary file not shown.
|
@ -1,8 +0,0 @@
|
||||||
age-encryption.org/v1
|
|
||||||
-> ssh-ed25519 U8ytLQ Qz3qe16ayxmKLHCxFAZrGQXWS/FhOZPnj3ypEec7jQA
|
|
||||||
rvEBCW3zma2qm6QpGpKY4mF/j6ttXIjc9HCruU2UQJk
|
|
||||||
-> 8'%i5|\M-grease ^J Z5D- ~9 h
|
|
||||||
peL12fzjuN8ykkalpUdYEl3QaRJ61qGxdA9iL3QKPG+Ei8sddmFIepRXsy0I0Puz
|
|
||||||
qw5gjOxypZeO1ZiTanZHbc6diRWsyFqs/e6g+foym5lfGqh3V7xU0faK9uU
|
|
||||||
--- WxKCnJ0tpm61Oa1emofkD46mw1shbpYD8Ydq0MK7IUA
|
|
||||||
Ç?÷™þŸ™†¨ëeÿ‰–94x3AÛ1«ªñÀ¸•‹É+Ø RèÓÏ?Þž¤Ÿ›´f؈—®¨[}w 9yL�|ä�zhé4Í1Ú¢s¹
|
|
|
@ -1,7 +0,0 @@
|
||||||
age-encryption.org/v1
|
|
||||||
-> ssh-ed25519 1tdZKQ 0Hu2I4Uu6HMOXTqQ5dF9pAc3rYoMR38V6JnBaq5H1HQ
|
|
||||||
Kvl4Sx04B4eHCeejGaMYrdphhXfonSGiqWW4A6T7qfA
|
|
||||||
-> pt|1-grease
|
|
||||||
vbrjj8oX6rf8mEvmk1qFuoGdxg0PEUxeX2yt6iMjpgeflILf
|
|
||||||
--- zAiDixmszWdxQMSTnUqBdkUc4TFCNnQi5K4dom7KpI8
|
|
||||||
Üšdă)I ŞÓוuĆ×xfź"ŕ[tôĚW[ČŃ˙ôyÖ97?łDÇ˙§ůu4ŇI;i
:ťxÍ:ÔfJ&üóŁľ;•%*%N€>ÎW࿨�j1
|
|
|
@ -1,7 +0,0 @@
|
||||||
age-encryption.org/v1
|
|
||||||
-> ssh-ed25519 QciEZQ v54bFE7wHdyai3cLvMEfslDxGD6Q/fQOmUV6LvQU/yw
|
|
||||||
Uvkutdp1noMoVrDT4yojftit6fT8V7GQEyPK9KW8qqk
|
|
||||||
-> FpI$xw}3-grease ?@EgZ,|]
|
|
||||||
tT07uRYy7SukFRWKrHXAMLAdLsU
|
|
||||||
--- /FyC78r+hWcAzO/9/yfNMmsk6GTCUcyhE+N0JKROmxw
|
|
||||||
Œ ¡Â9@oÎqíò¯W"üQêÒàã%è íù�böUR; œ‹9p"È̳tï˜6B90!à÷VÃõ^hÐuŠ1B¢W( f$Æžrïh�nÊ
|
|
|
@ -1,7 +0,0 @@
|
||||||
age-encryption.org/v1
|
|
||||||
-> ssh-ed25519 iNceIg JvzQt+2ZkDJMDm1KlZQdDml8H4ycJ6AokJPSoZP5cU4
|
|
||||||
wpodFTm/MHvNUgNMfKsRkBcqixtW01beo6sAiEdClcM
|
|
||||||
-> ]s%j-grease F80K
|
|
||||||
+qNWHTRpraF9RkyWQgtAKTyx6zHnRE186qaTSMkEA6aRCsT6Gg
|
|
||||||
--- eVGyjUp6M/kxFZahyFU1yzoLJSYuGduGZHf6tqkblCI
|
|
||||||
(=qÕ“±›É<š$S±BãY©³a9jû~´Ý|Az®±·./€Å~JMÀw˜_¨%ò•9ÿbqg(Y>*3V^ÝèÇ&•ù»+Ja
|
|
|
@ -1,9 +0,0 @@
|
||||||
age-encryption.org/v1
|
|
||||||
-> X25519 uJ3uiXX1C9PpMhT3kcYvUf8mIGxD8KTB6gGKdPGJnCs
|
|
||||||
ei8KR51jD/rWUp494k6M20oTrwDTiGpdkbOOmW4lOXo
|
|
||||||
-> piv-p256 xqSe8Q A92Qea9NZuHlV2xGjSo53jlPVnKjwBTbMPF23PeXXDrq
|
|
||||||
IfzttqGs1jW3RlOKGm08vKtJIIkzwRT1fUoMwkbMbuU
|
|
||||||
-> (-grease ;&ILFt\Z \H g&6+q2Xa Z
|
|
||||||
ZribRa/ctUpGLy4veZe+BF+3YnF6tku94bsH72Exo2WulHZS
|
|
||||||
--- Std/62CowuRVpxSYuzhJLHy5jNWMpnl6ILk4U7oW54s
|
|
||||||
÷÷È:Ĉrês[á ½¹oÞ�ýïlâø£;Þl]m3�ÌŽnmËÐ5:Rk§§”Ù4Ç�xN°E#Å$®éd£/ÒünY�2r
|
|
|
@ -1 +0,0 @@
|
||||||
7Vu1OqBCLq6WNvah8QFBjnwNZUfZqzToFyQH2g/RJR4=
|
|
|
@ -1,9 +0,0 @@
|
||||||
age-encryption.org/v1
|
|
||||||
-> X25519 ocNApTQlwFHphPMWeXS60TWO8RY4kXv1/G7mpvCRfno
|
|
||||||
q4tgumwcZKxNrObdkxLpU9tPttrDe5oZzOZYu+boNCE
|
|
||||||
-> piv-p256 xqSe8Q A8FzxSYN5kOVb8VG57H105SMUC8P+IRBz5oCN4QX7F6D
|
|
||||||
7YesnMqNXTyR5Ojtli9R8atxm5dqi9cjEvnnuyT6I1g
|
|
||||||
-> %5P"-grease ,Wf aH@;2_dA ~4s:8[
|
|
||||||
opJOhAN4Evvp4x7ndCEfALKDUMvvpqlbwUTSplehbPI
|
|
||||||
--- oMT/RknMnLIf0ujr+Q/xOCxN8qDOVkNYCVEjoJ3AscA
|
|
||||||
¥vŒúYv](Õ¬–¥*þ™nÛ‡
Eö1›x”͘]¯Œ:;ÿi' -µÑ«Klú=úñúPÎô·nv}i|5QÝ £’s
|
|
Binary file not shown.
|
@ -1 +0,0 @@
|
||||||
slaNaddkDDEeC9Y69VTKqAhYJcjc2u0UbbwxNzaZNR4=
|
|
|
@ -1,10 +0,0 @@
|
||||||
age-encryption.org/v1
|
|
||||||
-> X25519 YIhkI6nWo8Ud/fjZVBXO5g0NOmaXVbmLiFvSLJ/cdFg
|
|
||||||
4RZpFKtM40Q81tSAIq1xUjMy4GmGeIZ+335KiFf28M8
|
|
||||||
-> piv-p256 xqSe8Q AuTq/W1xNTEYrBAbLgffA95slATEeMRMUIwuMyicmwcA
|
|
||||||
QlR1jm1BC/MDfSF82oJibcS5huJx0lRtdbO/dHfIkKE
|
|
||||||
-> XNC"-grease ~K@0<!HN Di rk 3m~F,
|
|
||||||
8ORNYpBbKkp5zl6LfrxMk8xS6emyDpR0sUKzqtmXAVLt1Zcq3/FdYDW6c6oJFuNw
|
|
||||||
Sq1iqnpxXxGnsawE1CT3R+VBzJoe8/pKYB4Zua4
|
|
||||||
--- 0nVnlPHZ85iPTakrStBzIxuTiexocUWpv8FETdMmDiA
|
|
||||||
zG¼{ö„ýgžÉb>Àº†ãbKÉg{+¼/³½û0„:Ê\Ã�¤sß’-‚5êjgJü =�pà6C?©¨è¸Öè¿¯Žø
|
|
Loading…
Add table
Add a link
Reference in a new issue