Compare commits

...

3 commits

Author SHA1 Message Date
Gabriel Simmer 79f73d2dd2
IPv6 only monitoring server
All checks were successful
Lint / lint (push) Successful in 36s
2024-07-05 17:33:33 +01:00
Gabriel Simmer 38fc320fac
Rotate some secrets 2024-07-05 17:32:53 +01:00
Gabriel Simmer ff2270d78b
Photoprism 2024-07-05 17:32:31 +01:00
10 changed files with 184 additions and 91 deletions

View file

@ -18,12 +18,22 @@
data = "e9195a3e-6f24-4cdb-be6d-237199d9a258.cfargotunnel.com";
};
"grafana" = {
a.data = ["91.107.206.145"];
aaaa.data = ["2a01:4f8:c012:5ec6::"];
"grafana".aaaa = {
ttl = 0;
data = ["2a01:4f8:c012:5ec6::1"];
};
"prometheus".cname = {
ttl = 0;
data = "grafana.gmem.ca";
};
"uptime".cname = {
ttl = 0;
data = "grafana.gmem.ca";
};
"healthchecks".cname = {
ttl = 0;
data = "grafana.gmem.ca";
};
"uptime".cname.data = "grafana.gmem.ca";
"healthchecks".cname.data = "grafana.gmem.ca";
"truenas".a.data = ["192.168.50.229"];
"docs" = {
a.data = ["100.116.48.47"];

View file

@ -4,7 +4,6 @@
"authentik"
"ibiza"
"matrix"
"photos"
"proxmox"
"pw"
"tokyo"
@ -15,7 +14,13 @@
] (name: {
name = name + ".gmem.ca";
content = "newcluster.gmem.ca";
});
}) ++ [ {
name = "grafana.gmem.ca";
content = "100.126.232.130";
} {
name = "photos.gmem.ca";
content = "100.116.48.47";
}];
home =
lib.lists.forEach [
"git"
@ -50,7 +55,10 @@
] (name: {
name = name + ".gmem.ca";
content = "homelab.gmem.ca";
});
}) ++ [ {
name = "photos.gmem.ca";
content = "192.168.50.229";
}];
in {
data = {
"bcee89" = home;

View file

@ -4,20 +4,21 @@
"inputs": {
"darwin": "darwin",
"home-manager": "home-manager",
"nixpkgs": "nixpkgs"
"nixpkgs": "nixpkgs",
"systems": "systems"
},
"locked": {
"lastModified": 1695384796,
"narHash": "sha256-TYlE4B0ktPtlJJF9IFxTWrEeq+XKG8Ny0gc2FGEAdj0=",
"lastModified": 1718371084,
"narHash": "sha256-abpBi61mg0g+lFFU0zY4C6oP6fBwPzbHPKBGw676xsA=",
"owner": "ryantm",
"repo": "agenix",
"rev": "1f677b3e161d3bdbfd08a939e8f25de2568e0ef4",
"rev": "3a56735779db467538fb2e577eda28a9daacaca6",
"type": "github"
},
"original": {
"owner": "ryantm",
"repo": "agenix",
"rev": "1f677b3e161d3bdbfd08a939e8f25de2568e0ef4",
"rev": "3a56735779db467538fb2e577eda28a9daacaca6",
"type": "github"
}
},
@ -80,11 +81,11 @@
]
},
"locked": {
"lastModified": 1673295039,
"narHash": "sha256-AsdYgE8/GPwcelGgrntlijMg4t3hLFJFCRF3tL5WVjA=",
"lastModified": 1700795494,
"narHash": "sha256-gzGLZSiOhf155FW7262kdHo2YDeugp3VuIFb4/GGng0=",
"owner": "lnl7",
"repo": "nix-darwin",
"rev": "87b9d090ad39b25b2400029c64825fc2a8868943",
"rev": "4b9b83d5a92e8c1fbfd8eb27eda375908c11ec4d",
"type": "github"
},
"original": {
@ -101,11 +102,11 @@
"nixpkgs-stable": "nixpkgs-stable"
},
"locked": {
"lastModified": 1718644238,
"narHash": "sha256-Kjqe0v2n0+ZU74edGZJADysx+n4Ny5QVuqk4xVEblHE=",
"lastModified": 1720112930,
"narHash": "sha256-pdiJ6QGnBYo8L1ePd32u2DH5/jDijE3YGf1TMebaIcU=",
"owner": "nix-community",
"repo": "emacs-overlay",
"rev": "1f57a6596440c15e6135dfbde5f93c2851f01ac9",
"rev": "160e167fee1bb84587aa7ba26005e974903490cc",
"type": "github"
},
"original": {
@ -200,7 +201,7 @@
},
"flake-utils_2": {
"inputs": {
"systems": "systems"
"systems": "systems_2"
},
"locked": {
"lastModified": 1710146030,
@ -218,7 +219,7 @@
},
"flake-utils_3": {
"inputs": {
"systems": "systems_3"
"systems": "systems_4"
},
"locked": {
"lastModified": 1710146030,
@ -236,7 +237,7 @@
},
"flake-utils_4": {
"inputs": {
"systems": "systems_5"
"systems": "systems_6"
},
"locked": {
"lastModified": 1710146030,
@ -290,11 +291,11 @@
]
},
"locked": {
"lastModified": 1682203081,
"narHash": "sha256-kRL4ejWDhi0zph/FpebFYhzqlOBrk0Pl3dzGEKSAlEw=",
"lastModified": 1703113217,
"narHash": "sha256-7ulcXOk63TIT2lVDSExj7XzFx09LpdSAPtvgtM7yQPE=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "32d3e39c491e2f91152c84f8ad8b003420eab0a1",
"rev": "3bfaacf46133c037bb356193bd2f1765d9dc82c1",
"type": "github"
},
"original": {
@ -310,11 +311,11 @@
]
},
"locked": {
"lastModified": 1718526747,
"narHash": "sha256-sKrD/utGvmtQALvuDj4j0CT3AJXP1idOAq2p+27TpeE=",
"lastModified": 1720045378,
"narHash": "sha256-lmE7B+QXw7lWdBu5GQlUABSpzPk3YBb9VbV+IYK5djk=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "0a7ffb28e5df5844d0e8039c9833d7075cdee792",
"rev": "0a30138c694ab3b048ac300794c2eb599dc40266",
"type": "github"
},
"original": {
@ -327,15 +328,15 @@
"inputs": {
"flake-compat": "flake-compat",
"nixpkgs": "nixpkgs_4",
"systems": "systems_2",
"systems": "systems_3",
"treefmt": "treefmt"
},
"locked": {
"lastModified": 1718110643,
"narHash": "sha256-KrEOCx/bpN++sySOEL5EO5AhYsqRZZk+CXacueUeSl4=",
"lastModified": 1719313214,
"narHash": "sha256-3CY/B/60A5rikhU5OlgDdNZMsOSIA1MteA2UPm4EHU0=",
"owner": "hall",
"repo": "kubenix",
"rev": "a04066c45526c6d8410ba998134f692ff991b4f3",
"rev": "d6ddf1b4e8804e3c9564696a493ac14c0bcb19e2",
"type": "github"
},
"original": {
@ -350,11 +351,11 @@
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1718539824,
"narHash": "sha256-pVGgM3MOOpMMqprkrMkuWwhC1dsw6Xt7aRGaBkMQqG0=",
"lastModified": 1719749459,
"narHash": "sha256-sAZRJNJ9FRUPvseuH21kmh9s+Q6AfQWPNxKVm534wgk=",
"owner": "nix-community",
"repo": "lib-aggregate",
"rev": "17a1c1bfca963a2776969866aaa07744d7ac9135",
"rev": "a15b020a1d0fc483386eb001ec6735b8a30bec81",
"type": "github"
},
"original": {
@ -392,11 +393,11 @@
]
},
"locked": {
"lastModified": 1717647344,
"narHash": "sha256-m8XYt8NU2T4gvkien7H7LFGXHhSA5z4tHOeuXQ3DJi4=",
"lastModified": 1719353937,
"narHash": "sha256-86NBqDxAP20ET/UoKX0WvSItblNQ97czXb2q7lkMrwk=",
"ref": "refs/heads/main",
"rev": "4e25f1ab68f2270f9cff59216056c21073db0164",
"revCount": 87,
"rev": "5d9d94089fb1ca96222a34bfe245ef5c5ebefd37",
"revCount": 92,
"type": "git",
"url": "https://git.lix.systems/lix-project/nixos-module"
},
@ -413,11 +414,11 @@
"treefmt-nix": "treefmt-nix_2"
},
"locked": {
"lastModified": 1717698186,
"narHash": "sha256-e3/cvm7bAn0RsTBcPfHwuYOi2lwoO4jpTn4nmMSvHfU=",
"lastModified": 1719247822,
"narHash": "sha256-qbtex5uSOUQnK4797JztyTQWlnlhEsE8x5g5qs5DgvQ=",
"owner": "nix-community",
"repo": "nix-eval-jobs",
"rev": "b6169e08e76e10b673d1b54f944cddb1e7cbea97",
"rev": "9bed665aa71907dcacc8ae6dba1a3055a9ff2de7",
"type": "github"
},
"original": {
@ -468,11 +469,11 @@
},
"nixlib": {
"locked": {
"lastModified": 1712450863,
"narHash": "sha256-K6IkdtMtq9xktmYPj0uaYc8NsIqHuaAoRBaMgu9Fvrw=",
"lastModified": 1719708727,
"narHash": "sha256-XFNKtyirrGNdehpg7lMNm1skEcBApjqGhaHc/OI95HY=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
"rev": "3c62b6a12571c9a7f65ab037173ee153d539905f",
"rev": "1bba8a624b3b9d4f68db94fb63aaeb46039ce9e6",
"type": "github"
},
"original": {
@ -487,7 +488,7 @@
"nixpkgs": [
"nixpkgs"
],
"systems": "systems_4",
"systems": "systems_5",
"treefmt-nix": "treefmt-nix"
},
"locked": {
@ -512,11 +513,11 @@
]
},
"locked": {
"lastModified": 1718025593,
"narHash": "sha256-WZ1gdKq/9u1Ns/oXuNsDm+W0salonVA0VY1amw8urJ4=",
"lastModified": 1720055043,
"narHash": "sha256-SKizewU4UeYrkZWPUjur8EoxscGoNb0pGcrNL4YzAIg=",
"owner": "nix-community",
"repo": "nixos-generators",
"rev": "35c20ba421dfa5059e20e0ef2343c875372bdcf3",
"rev": "168b220231a70e47cc1f0919048fa5914415fb18",
"type": "github"
},
"original": {
@ -527,11 +528,11 @@
},
"nixos-hardware": {
"locked": {
"lastModified": 1718548414,
"narHash": "sha256-1obyIuQPR/Kq1j5/i/5EuAfQrDwjYnjCDG8iLtXmBhQ=",
"lastModified": 1719895800,
"narHash": "sha256-xNbjISJTFailxass4LmdWeV4jNhAlmJPwj46a/GxE6M=",
"owner": "NixOS",
"repo": "nixos-hardware",
"rev": "cde8f7e11f036160b0fd6a9e07dc4c8e4061cf06",
"rev": "6e253f12b1009053eff5344be5e835f604bb64cd",
"type": "github"
},
"original": {
@ -543,11 +544,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1677676435,
"narHash": "sha256-6FxdcmQr5JeZqsQvfinIMr0XcTyTuR7EXX0H3ANShpQ=",
"lastModified": 1703013332,
"narHash": "sha256-+tFNwMvlXLbJZXiMHqYq77z/RfmpfpiI3yjL6o/Zo9M=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "a08d6979dd7c82c4cef0dcc6ac45ab16051c1169",
"rev": "54aac082a4d9bb5bbc5c4e899603abfb76a3f6d6",
"type": "github"
},
"original": {
@ -559,11 +560,11 @@
},
"nixpkgs-lib": {
"locked": {
"lastModified": 1718499101,
"narHash": "sha256-2oGRKxl3qEyRH2DJRiVtLeJICcybXMkqjWQYODINL9M=",
"lastModified": 1719708727,
"narHash": "sha256-XFNKtyirrGNdehpg7lMNm1skEcBApjqGhaHc/OI95HY=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
"rev": "6fba0c5a27b984914794ffdab8d7bb5c29ab11b6",
"rev": "1bba8a624b3b9d4f68db94fb63aaeb46039ce9e6",
"type": "github"
},
"original": {
@ -574,11 +575,11 @@
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1718447546,
"narHash": "sha256-JHuXsrC9pr4kA4n7LuuPfWFJUVlDBVJ1TXDVpHEuUgM=",
"lastModified": 1719957072,
"narHash": "sha256-gvFhEf5nszouwLAkT9nWsDzocUTqLWHuL++dvNjMp9I=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "842253bf992c3a7157b67600c2857193f126563a",
"rev": "7144d6241f02d171d25fba3edeaf15e0f2592105",
"type": "github"
},
"original": {
@ -598,11 +599,11 @@
]
},
"locked": {
"lastModified": 1718648571,
"narHash": "sha256-B8gba/06zL6xahoOeoTRg4pc9EvDX6sZNhvuiSmhKbE=",
"lastModified": 1720107386,
"narHash": "sha256-nMIXgK2BPLF70w/c7Jl8Ef5nm44q1su2qR9unl1J9cU=",
"owner": "nix-community",
"repo": "nixpkgs-wayland",
"rev": "8b98b818f71327a617f730cd8a7a8e1be41ce66e",
"rev": "db2578662c75bad3a16af4322104de5823e1ae6e",
"type": "github"
},
"original": {
@ -629,11 +630,11 @@
},
"nixpkgs_3": {
"locked": {
"lastModified": 1718318537,
"narHash": "sha256-4Zu0RYRcAY/VWuu6awwq4opuiD//ahpc2aFHg2CWqFY=",
"lastModified": 1720031269,
"narHash": "sha256-rwz8NJZV+387rnWpTYcXaRNvzUSnnF9aHONoJIYmiUQ=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "e9ee548d90ff586a6471b4ae80ae9cfcbceb3420",
"rev": "9f4128e00b0ae8ec65918efeba59db998750ead6",
"type": "github"
},
"original": {
@ -677,11 +678,11 @@
},
"nixpkgs_6": {
"locked": {
"lastModified": 1718428119,
"narHash": "sha256-WdWDpNaq6u1IPtxtYHHWpl5BmabtpmLnMAx0RdJ/vo8=",
"lastModified": 1720058333,
"narHash": "sha256-gM2RCi5XkxmcsZ44pUkKIYBiBMfZ6u7MdcZcykmccrs=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "e6cea36f83499eb4e9cd184c8a8e823296b50ad5",
"rev": "6842b061970bf96965d66fcc86a28e1f719aae95",
"type": "github"
},
"original": {
@ -693,11 +694,11 @@
},
"nixpkgs_7": {
"locked": {
"lastModified": 1715037484,
"narHash": "sha256-OUt8xQFmBU96Hmm4T9tOWTu4oCswCzoVl+pxSq/kiFc=",
"lastModified": 1719082008,
"narHash": "sha256-jHJSUH619zBQ6WdC21fFAlDxHErKVDJ5fpN0Hgx4sjs=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "ad7efee13e0d216bf29992311536fce1d3eefbef",
"rev": "9693852a2070b398ee123a329e68f0dab5526681",
"type": "github"
},
"original": {
@ -765,11 +766,26 @@
"type": "github"
},
"original": {
"id": "systems",
"type": "indirect"
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_3": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"id": "systems",
"type": "indirect"
}
},
"systems_4": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
@ -784,7 +800,7 @@
"type": "github"
}
},
"systems_4": {
"systems_5": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
@ -798,7 +814,7 @@
"type": "indirect"
}
},
"systems_5": {
"systems_6": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",

View file

@ -1,7 +1,7 @@
{
description = "Nix flake for my infrastructure";
inputs = {
agenix.url = "github:ryantm/agenix?rev=1f677b3e161d3bdbfd08a939e8f25de2568e0ef4";
agenix.url = "github:ryantm/agenix?rev=3a56735779db467538fb2e577eda28a9daacaca6";
terranix.url = "github:terranix/terranix";
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
nixinate.url = "github:matthewcroughan/nixinate";

View file

@ -1,6 +1,7 @@
{
config,
pkgs,
lib,
...
}: {
imports = [
@ -35,6 +36,10 @@
file = ../../secrets/paperless-oauth.age;
owner = "paperless";
};
age.secrets.photoprism-password = {
file = ../../secrets/photoprism.age;
owner = "photoprism";
};
nix = {
settings = {
auto-optimise-store = true;
@ -49,6 +54,7 @@
};
supportedFilesystems = ["zfs" "ntfs"];
kernelModules = ["coretemp" "kvm-amd" "it87"];
binfmt.emulatedSystems = ["aarch64-linux"];
zfs.extraPools = ["tank"];
};
systemd.services.paperless-web.serviceConfig.EnvironmentFile = config.age.secrets.paperless-oauth.path;
@ -293,7 +299,7 @@
plex = {
enable = true;
openFirewall = true;
accelerationDevices = [ "/dev/dri/renderD128" ];
accelerationDevices = [ "*" ];
};
nginx = {
enable = true;
@ -350,6 +356,23 @@
proxyPass = "http://127.0.0.1:${toString config.services.paperless.port}/";
};
};
virtualHosts."photos.gmem.ca" = {
enableACME = true;
addSSL = true;
acmeRoot = null;
locations."/" = {
proxyWebsockets = true;
extraConfig = ''
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 10g;
'';
proxyPass = "http://127.0.0.1:${toString config.services.photoprism.port}/";
};
};
};
forgejo = {
@ -448,8 +471,24 @@
};
};
};
photoprism = {
enable = true;
originalsPath = "/tank/photos";
passwordFile = config.age.secrets.photoprism-password.path;
settings = {
PHOTOPRISM_ADMIN_USER = "arch";
PHOTOPRISM_ORIGINALS_LIMIT = "-1";
PHOTOPRISM_FFMPEG_ENCODER = "nvidia";
PHOTOPRISM_SITE_URL = "https://photos.gmem.ca/";
PHOTOPRISM_SITE_CAPTION = "Vancouver Photo Repository";
PHOTOPRISM_UPLOAD_NSFW = "true";
PHOTOPRISM_BACKUP_PATH = "/tank/photos/backups";
};
};
};
systemd.services.photoprism.serviceConfig.PrivateDevices = lib.mkForce false;
networking = {
hostId = "e1e29bf4";
hostName = "vancouver";
@ -458,8 +497,8 @@
trustedInterfaces = ["tailscale0"];
checkReversePath = "loose";
enable = true;
allowedTCPPorts = [22 80 443 9798 2049 4328];
allowedUDPPorts = [41641];
allowedTCPPorts = [22 80 53 443 9798 2049 4328];
allowedUDPPorts = [53 41641];
interfaces."podman*".allowedUDPPorts = [53 5353];
};
nftables.enable = true;
@ -485,7 +524,7 @@
time.timeZone = "Europe/London";
nixpkgs.config.allowUnfree = true;
hardware = {
opengl.enable = true;
graphics.enable = true;
nvidia.modesetting.enable = true;
pulseaudio.enable = false;
};
@ -560,6 +599,7 @@
speedtest = {
image = "ghcr.io/miguelndecarvalho/speedtest-exporter";
ports = ["9798:9798"];
extraOptions = ["--network=podman1"];
};
};
@ -583,6 +623,11 @@
dnsProvider = "cloudflare";
credentialsFile = config.age.secrets.cloudflare-dns.path;
};
security.acme.certs."photos.gmem.ca" = {
domain = "photos.gmem.ca";
dnsProvider = "cloudflare";
credentialsFile = config.age.secrets.cloudflare-dns.path;
};
system.stateVersion = "23.05";
}

View file

@ -34,6 +34,7 @@ in {
"secrets/k3s-token.age".publicKeys = k3s ++ users;
"secrets/paperless-oauth.age".publicKeys = [vancouver] ++ users;
"secrets/photoprism.age".publicKeys = [vancouver] ++ users;
"secrets/dnsmasq-nextdns-profile.age".publicKeys = dnsmasq ++ users;

View file

@ -1,10 +1,8 @@
age-encryption.org/v1
-> ssh-ed25519 J+a91w 5qM0+swhJBQ6lOJgqlAMbTBv/tXh37Yw9RehWjfMl1U
cVeB/LeQLhGpI5SFIbHlQgfSTrDEqOYrZrMJfv3gzrk
-> ssh-ed25519 qbziOw VyqqCFrUDyAVpFcK1JYBS3Ub0qZbFs+3+rzHK8SJpWc
vJL/6UqSKe3er38Nh8nwr5bivSKNjaGxX7olrt3drQg
-> A-grease
K2EPNwubYzHpNbMdpbUW5QAnM5F8oWWwOeWF3fqdBZhUAOs8gqBbPxmajenpm2Xo
Cxym
--- c78sbNV3usgVr+zkTg9FEeJ8c5S3Ms2w4BESVHk5xw8
@½UÊ ®Fq^]½é²Œ€>ÙP!Ô옯XtË8·Á¬$A·qÊrypÉ/ Uª— (R ©Q«
-> ssh-ed25519 J+a91w bqsD0ETI4w0V5IQnIMra2i02XeYDKI/Y0GE6WTMygns
Wzid1TKoS1GiO//Ao+K+7L1Nwy6mw8qJS07YUVVcgBU
-> ssh-ed25519 qbziOw lnforSRaNOgreLWHov5aAMvcIngxSMYBVo8Y49QWUnk
YbT+cJUhjjBz3yydLhuwNTHbSPhU1n3FjKXTlqsUWzg
--- LIkk5fedyU2SaK6lbaarQe5yRoAEHFEGKTOq9ZNsZK8
I¾ó1,<ã-e°cYŸq\±q&g/
D®Ò†rtf)á.¸qîÁ?À”˜¬Ç>Æ2«ãzæ@×G<07>L5R¢Ï

View file

@ -0,0 +1,7 @@
age-encryption.org/v1
-> ssh-ed25519 J+a91w bs0SNyubX1M5vT+2V2C53IhwYNz6yxH8ibQWKgo09jY
Vm2veIq0H77eA+phQjS0BTNJdpZdrPLCx46GNokwIdE
-> ssh-ed25519 qbziOw 7cLIgYgkMKsJuSiD78rjk/0CDEwZ+hmzSkPSTMJ5FSk
9lSOtKMk+BoffFkpURHJH3333vAhfdi55AG0om+999Y
--- c0RgKKmNT41byLbWBp9SaOAw8qvPyMafsIRRO09fjIQ
þ…õ\¼ NNå0.9Œ0Ó±Sé¡åBËpçN>M,Y)KÛfsŠ™}ŸA¾šÓ (nŠYÔžGý¯¥·l$T[_uÇ&mBA9ã™GXšÏ

8
secrets/photoprism.age Normal file
View file

@ -0,0 +1,8 @@
age-encryption.org/v1
-> ssh-ed25519 oN6OTQ 46dF+kNhsCiwICKF97vSryr7Tk+9wVD6cRyzBh8BNno
l5FaHF5Pa3XNivuW9qcQbz4wCoifpadEHZfqvPGHpuM
-> ssh-ed25519 qbziOw tfS7EjTMrr/y+Fj5/xukA7/Pe+fIKDwVX7afAy7UdHA
H6VHSJQSLVz5rGNeT8JbhyD000LPw9Z128+GQMgypCM
--- FmlCaLbWl4ns164Tzu0WcCdFe/OXbsO9yLo8GSdBtNo
sPÌ¥&ÎZ
¦—â0Ì.R«Xü· u°p‡ü;:PðTjé fP9e€G"ÓòÎÇK6­õjo=5ŸCeK>.R6®