From d76b03ed7f989a2a41216d2c0ff356afc9d4d740 Mon Sep 17 00:00:00 2001 From: Charlotte Van Petegem Date: Sun, 6 Mar 2022 00:09:59 +0100 Subject: [PATCH] Move to NixOS-managed email --- flake.lock | 56 +++++++++- flake.nix | 9 +- machines/lasting-integrity/default.nix | 99 +++++++----------- machines/lasting-integrity/hardware.nix | 4 + modules/base/mail/default.nix | 2 +- modules/base/sshd/default.nix | 2 +- modules/services/default.nix | 2 +- modules/services/mail/default.nix | 88 ++++++++++++++++ modules/services/nginx/default.nix | 13 --- modules/services/tunnel/default.nix | 25 ----- secrets.nix | 8 ++ .../mail/charlotte_at_vanpetegem.me.age | 11 ++ .../expenses-noreply_at_vanpetegem.me.age | 13 +++ .../services/mail/huis_at_vanpetegem.me.age | 13 +++ .../services/mail/peter_at_vanpetegem.me.age | Bin 0 -> 620 bytes .../mail/postbot_at_vanpetegem.me.age | Bin 0 -> 587 bytes .../services/mail/robbe_at_vanpetegem.me.age | Bin 0 -> 604 bytes .../services/mail/ugent_at_cvpetegem.be.age | Bin 0 -> 633 bytes .../mail/webmaster_at_vanpetegem.me.age | 12 +++ 19 files changed, 254 insertions(+), 103 deletions(-) create mode 100644 modules/services/mail/default.nix delete mode 100644 modules/services/tunnel/default.nix create mode 100644 secrets/passwords/services/mail/charlotte_at_vanpetegem.me.age create mode 100644 secrets/passwords/services/mail/expenses-noreply_at_vanpetegem.me.age create mode 100644 secrets/passwords/services/mail/huis_at_vanpetegem.me.age create mode 100644 secrets/passwords/services/mail/peter_at_vanpetegem.me.age create mode 100644 secrets/passwords/services/mail/postbot_at_vanpetegem.me.age create mode 100644 secrets/passwords/services/mail/robbe_at_vanpetegem.me.age create mode 100644 secrets/passwords/services/mail/ugent_at_cvpetegem.be.age create mode 100644 secrets/passwords/services/mail/webmaster_at_vanpetegem.me.age diff --git a/flake.lock b/flake.lock index 4392619c..b8b38901 100644 --- a/flake.lock +++ b/flake.lock @@ -40,6 +40,22 @@ "type": "github" } }, + "blobs": { + "flake": false, + "locked": { + "lastModified": 1604995301, + "narHash": "sha256-wcLzgLec6SGJA8fx1OEN1yV/Py5b+U5iyYpksUY/yLw=", + "owner": "simple-nixos-mailserver", + "repo": "blobs", + "rev": "2cccdf1ca48316f2cfd1c9a0017e8de5a7156265", + "type": "gitlab" + }, + "original": { + "owner": "simple-nixos-mailserver", + "repo": "blobs", + "type": "gitlab" + } + }, "emacs-overlay": { "locked": { "lastModified": 1646499853, @@ -90,6 +106,28 @@ "type": "github" } }, + "nixos-mailserver": { + "inputs": { + "blobs": "blobs", + "nixpkgs": [ + "nixpkgs" + ], + "utils": "utils" + }, + "locked": { + "lastModified": 1645895212, + "narHash": "sha256-SbR7HtHg7/UopLYLmMwwFZGF0BTmg0tLwIU/rQtRLfk=", + "owner": "simple-nixos-mailserver", + "repo": "nixos-mailserver", + "rev": "7de138037f62679e2fefa0549af543412dab0d1a", + "type": "gitlab" + }, + "original": { + "owner": "simple-nixos-mailserver", + "repo": "nixos-mailserver", + "type": "gitlab" + } + }, "nixpkgs": { "locked": { "lastModified": 1646254136, @@ -127,10 +165,11 @@ "agenix": "agenix", "emacs-overlay": "emacs-overlay", "home-manager": "home-manager", + "nixos-mailserver": "nixos-mailserver", "nixpkgs": "nixpkgs", "nur": "nur", "tetris": "tetris", - "utils": "utils" + "utils": "utils_2" } }, "tetris": { @@ -154,6 +193,21 @@ } }, "utils": { + "locked": { + "lastModified": 1605370193, + "narHash": "sha256-YyMTf3URDL/otKdKgtoMChu4vfVL3vCMkRqpGifhUn0=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5021eac20303a61fafe17224c087f5519baed54d", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "utils_2": { "inputs": { "flake-utils": "flake-utils" }, diff --git a/flake.nix b/flake.nix index 463ff173..8ec4b1e5 100644 --- a/flake.nix +++ b/flake.nix @@ -15,6 +15,10 @@ url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; + nixos-mailserver = { + url = "gitlab:simple-nixos-mailserver/nixos-mailserver"; + inputs.nixpkgs.follows = "nixpkgs"; + }; nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; nur.url = "github:nix-community/NUR"; tetris = { @@ -24,7 +28,7 @@ utils.url = "github:gytis-ivaskevicius/flake-utils-plus"; }; - outputs = inputs@{ self, nixpkgs, accentor, agenix, emacs-overlay, home-manager, nur, tetris, utils }: + outputs = inputs@{ self, nixpkgs, accentor, agenix, emacs-overlay, home-manager, nixos-mailserver, nur, tetris, utils }: let customPackages = callPackage: { jdtls = callPackage ./packages/jdtls { }; @@ -61,7 +65,8 @@ }) accentor.nixosModule agenix.nixosModules.age - home-manager.nixosModules.home-manager + home-manager.nixosModule + nixos-mailserver.nixosModule ./modules ]; }; diff --git a/machines/lasting-integrity/default.nix b/machines/lasting-integrity/default.nix index 3aa63f6f..375591c3 100644 --- a/machines/lasting-integrity/default.nix +++ b/machines/lasting-integrity/default.nix @@ -5,10 +5,7 @@ time.timeZone = "Europe/Berlin"; - networking = { - hostId = "b352adfe"; - firewall.allowedTCPPorts = [ 25 143 465 587 993 4190 ]; - }; + networking.hostId = "b352adfe"; # Machine-specific module settings chvp = { @@ -35,6 +32,12 @@ fast = true; location = "192.168.0.1"; } + { + path = "zdata/big-apps/mail"; + remotePath = "zdata/recv/lasting-integrity/big-apps/mail"; + fast = true; + location = "192.168.0.1"; + } { path = "zdata/big-apps/nextcloud"; remotePath = "zdata/recv/lasting-integrity/big-apps/nextcloud"; @@ -45,69 +48,47 @@ rootDataset = "zroot/local/root"; }; }; - development = { - docker.enable = true; - git.enable = true; - }; games = { particles.server = true; tetris.server = true; }; services = { + mail.enable = true; matrix.enable = true; - nginx = { - extraPostACMEScripts = [ - '' - cp fullchain.pem /data/root/mailcow/data/assets/ssl/cert.pem - cp key.pem /data/root/mailcow/data/assets/ssl/key.pem - pushd /data/root/mailcow - ${pkgs.bash}/bin/bash -c "source mailcow.conf && ${pkgs.docker-compose}/bin/docker-compose restart" - popd - '' - ]; - hosts = [ - { - fqdn = "vanpetegem.me"; - options = { - locations = let matrixRedirect = { - proxyPass = "http://127.0.0.1:8448"; - extraConfig = '' - proxy_read_timeout 600; - client_max_body_size 10M; - proxy_set_header X-Forwarded-Ssl on; - ''; - }; in - { - "/_matrix" = matrixRedirect; - "/.well-known/matrix" = matrixRedirect; - "/".return = "307 https://www.vanpetegem.me$request_uri"; - }; - }; - } - { fqdn = "www.vanpetegem.me"; } - { - fqdn = "cvpetegem.be"; - options = { - locations."/".return = "307 https://www.cvpetegem.be$request_uri"; - }; - } - { fqdn = "www.cvpetegem.be"; } - { - fqdn = "chvp.be"; - options = { - locations."/".return = "307 https://www.chvp.be$request_uri"; - }; - } - { fqdn = "www.chvp.be"; } - { - fqdn = "mail.vanpetegem.me"; - basicProxy = "http://127.0.0.1:8080"; - } - ]; - }; + nginx.hosts = [ + { + fqdn = "vanpetegem.me"; + options = { + locations = let matrixRedirect = { + proxyPass = "http://127.0.0.1:8448"; + extraConfig = '' + proxy_read_timeout 600; + client_max_body_size 10M; + proxy_set_header X-Forwarded-Ssl on; + ''; + }; in + { + "/_matrix" = matrixRedirect; + "/.well-known/matrix" = matrixRedirect; + "/".return = "307 https://www.vanpetegem.me$request_uri"; + }; + }; + } + { fqdn = "www.vanpetegem.me"; } + { + fqdn = "cvpetegem.be"; + options.locations."/".return = "307 https://www.cvpetegem.be$request_uri"; + } + { fqdn = "www.cvpetegem.be"; } + { + fqdn = "chvp.be"; + options.locations."/".return = "307 https://www.chvp.be$request_uri"; + } + { fqdn = "www.chvp.be"; } + ]; nextcloud.enable = true; syncthing.enable = true; - tunnel.enable = true; }; }; + services.ssmtp.enable = false; } diff --git a/machines/lasting-integrity/hardware.nix b/machines/lasting-integrity/hardware.nix index 6846f931..342b3cbc 100644 --- a/machines/lasting-integrity/hardware.nix +++ b/machines/lasting-integrity/hardware.nix @@ -42,6 +42,10 @@ fsType = "zfs"; neededForBoot = true; }; + "/data/var/vmail" = { + device = "zdata/big-apps/mail"; + fsType = "zfs"; + }; "/data/var/lib/nextcloud" = { device = "zdata/big-apps/nextcloud"; fsType = "zfs"; diff --git a/modules/base/mail/default.nix b/modules/base/mail/default.nix index edcf3f52..65b8ce79 100644 --- a/modules/base/mail/default.nix +++ b/modules/base/mail/default.nix @@ -2,7 +2,7 @@ { services.ssmtp = { - enable = true; + enable = lib.mkDefault true; authUser = "webmaster@vanpetegem.me"; authPassFile = config.age.secrets."passwords/services/ssmtp-pass".path; domain = "${config.networking.hostName}.vanpetegem.me"; diff --git a/modules/base/sshd/default.nix b/modules/base/sshd/default.nix index 72faf6d5..4745eb54 100644 --- a/modules/base/sshd/default.nix +++ b/modules/base/sshd/default.nix @@ -12,7 +12,7 @@ ]; }; - age.secrets."authorized_keys/root"= { + age.secrets."authorized_keys/root" = { file = ../../../secrets/authorized_keys/root.age; path = "/root/.ssh/authorized_keys"; symlink = false; diff --git a/modules/services/default.nix b/modules/services/default.nix index 9b03d605..61cac99f 100644 --- a/modules/services/default.nix +++ b/modules/services/default.nix @@ -6,10 +6,10 @@ ./containers ./data-access ./deluge + ./mail ./matrix ./nextcloud ./nginx ./syncthing - ./tunnel ]; } diff --git a/modules/services/mail/default.nix b/modules/services/mail/default.nix new file mode 100644 index 00000000..f0484528 --- /dev/null +++ b/modules/services/mail/default.nix @@ -0,0 +1,88 @@ +{ config, lib, pkgs, ... }: + +let + keyFile = "${config.security.acme.certs."vanpetegem.me".directory}/key.pem"; + certFile = "${config.security.acme.certs."vanpetegem.me".directory}/fullchain.pem"; +in +{ + options.chvp.services.mail.enable = lib.mkEnableOption "mail"; + + config = lib.mkIf config.chvp.services.mail.enable { + mailserver = { + enable = true; + fqdn = "mail.vanpetegem.me"; + domains = [ "vanpetegem.me" "cvpetegem.be" "chvp.be" "accentor.tech" "toekomstlabo.be" ]; + loginAccounts = { + "charlotte@vanpetegem.me" = { + hashedPasswordFile = config.age.secrets."passwords/services/mail/charlotte@vanpetegem.me".path; + aliases = [ "@chvp.be" "@cvpetegem.be" ]; + }; + "expenses-noreply@vanpetegem.me" = { + hashedPasswordFile = config.age.secrets."passwords/services/mail/expenses-noreply@vanpetegem.me".path; + sendOnly = true; + }; + "huis@vanpetegem.me".hashedPasswordFile = config.age.secrets."passwords/services/mail/huis@vanpetegem.me".path; + "peter@vanpetegem.me".hashedPasswordFile = config.age.secrets."passwords/services/mail/peter@vanpetegem.me".path; + "postbot@vanpetegem.me" = { + hashedPasswordFile = config.age.secrets."passwords/services/mail/postbot@vanpetegem.me".path; + aliases = [ "@vanpetegem.me" ]; + }; + "robbe@vanpetegem.me".hashedPasswordFile = config.age.secrets."passwords/services/mail/robbe@vanpetegem.me".path; + "ugent@cvpetegem.be" = { + hashedPasswordFile = config.age.secrets."passwords/services/mail/ugent@cvpetegem.be".path; + aliases = [ "charlotte.vanpetegem@ugent.be" ]; + }; + "webmaster@vanpetegem.me".hashedPasswordFile = config.age.secrets."passwords/services/mail/webmaster@vanpetegem.me".path; + }; + indexDir = "${config.chvp.cachePrefix}/var/lib/dovecot/indices"; + fullTextSearch = { + enable = true; + memoryLimit = 4000; + }; + lmtpSaveToDetailMailbox = "no"; + extraVirtualAliases = { + "team@accentor.tech" = [ "charlotte@vanpetegem.me" "robbe@vanpetegem.me" ]; + }; + forwards = { + "info@toekomstlabo.be" = "robbe+toekomstlabo@robbevanpetegem.be"; + }; + mailDirectory = "${config.chvp.dataPrefix}/var/vmail"; + useFsLayout = false; + certificateScheme = 1; + certificateFile = certFile; + keyFile = keyFile; + dkimKeyDirectory = "${config.chvp.dataPrefix}/var/dkim"; + }; + + services.postfix = { + config.sender_dependent_default_transport_maps = [ "hash:/etc/postfix/sender_map" ]; + mapFiles.sender_map = pkgs.writeText "postfix-sender-map" '' + charlotte.vanpetegem@ugent.be smtp:[127.0.0.1]:9797 + ''; + }; + + systemd.services.tunnel = { + after = [ "network.target" ]; + wantedBy = [ "multi-user.target" ]; + script = "${pkgs.openssh}/bin/ssh -i ${config.age.secrets."files/services/tunnel/key".path} -o ServerAliveInterval=60 -o ExitOnForwardFailure=yes -o ControlPath=none -NT -p $SSH_PORT -L 0.0.0.0:9797:$CONN_HOST:$CONN_PORT $USER@$SSH_HOST"; + serviceConfig = { + RestartSec = "5s"; + Restart = "on-failure"; + EnvironmentFile = config.age.secrets."files/services/tunnel/env".path; + }; + }; + + age.secrets = { + "files/services/tunnel/key".file = ../../../secrets/files/services/tunnel/key.age; + "files/services/tunnel/env".file = ../../../secrets/files/services/tunnel/env.age; + "passwords/services/mail/charlotte@vanpetegem.me".file = ../../../secrets/passwords/services/mail/charlotte_at_vanpetegem.me.age; + "passwords/services/mail/expenses-noreply@vanpetegem.me".file = ../../../secrets/passwords/services/mail/expenses-noreply_at_vanpetegem.me.age; + "passwords/services/mail/huis@vanpetegem.me".file = ../../../secrets/passwords/services/mail/huis_at_vanpetegem.me.age; + "passwords/services/mail/peter@vanpetegem.me".file = ../../../secrets/passwords/services/mail/peter_at_vanpetegem.me.age; + "passwords/services/mail/postbot@vanpetegem.me".file = ../../../secrets/passwords/services/mail/postbot_at_vanpetegem.me.age; + "passwords/services/mail/robbe@vanpetegem.me".file = ../../../secrets/passwords/services/mail/robbe_at_vanpetegem.me.age; + "passwords/services/mail/ugent@cvpetegem.be".file = ../../../secrets/passwords/services/mail/ugent_at_cvpetegem.be.age; + "passwords/services/mail/webmaster@vanpetegem.me".file = ../../../secrets/passwords/services/mail/webmaster_at_vanpetegem.me.age; + }; + }; +} diff --git a/modules/services/nginx/default.nix b/modules/services/nginx/default.nix index f3730d25..aff9270c 100644 --- a/modules/services/nginx/default.nix +++ b/modules/services/nginx/default.nix @@ -27,18 +27,6 @@ } ]; }; - extraPostACMEScripts = lib.mkOption { - default = [ ]; - example = [ - '' - cp fullchain.pem /data/home/charlotte/synapse/slack/cert.crt - cp privkey.pem /data/home/charlotte/synapse/slack/key.pem - pushd /data/home/charlotte/synapse - ''${pkgs.docker-compose}/bin/docker-compose restart slack - popd - '' - ]; - }; }; config = lib.mkIf config.chvp.services.nginx.enable { @@ -54,7 +42,6 @@ "chvp.be" "*.chvp.be" ]; - postRun = lib.concatStrings config.chvp.services.nginx.extraPostACMEScripts; }; defaults.email = "webmaster@vanpetegem.me"; acceptTerms = true; diff --git a/modules/services/tunnel/default.nix b/modules/services/tunnel/default.nix deleted file mode 100644 index 6e9b6a7f..00000000 --- a/modules/services/tunnel/default.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - options.chvp.services.tunnel.enable = lib.mkOption { - default = false; - example = true; - }; - - config = lib.mkIf config.chvp.services.tunnel.enable { - networking.firewall.trustedInterfaces = [ "br-mailcow" ]; - systemd.services.tunnel = { - after = [ "network.target" ]; - wantedBy = [ "multi-user.target" ]; - script = "${pkgs.openssh}/bin/ssh -i ${config.age.secrets."files/services/tunnel/key".path} -o ServerAliveInterval=60 -o ExitOnForwardFailure=yes -o ControlPath=none -NT -p $SSH_PORT -L 0.0.0.0:9797:$CONN_HOST:$CONN_PORT $USER@$SSH_HOST"; - serviceConfig = { - RestartSec = "5s"; - Restart = "on-failure"; - EnvironmentFile = config.age.secrets."files/services/tunnel/env".path; - }; - }; - - age.secrets."files/services/tunnel/key".file = ../../../secrets/files/services/tunnel/key.age; - age.secrets."files/services/tunnel/env".file = ../../../secrets/files/services/tunnel/env.age; - }; -} diff --git a/secrets.nix b/secrets.nix index 9f9e960e..81c0f7e1 100644 --- a/secrets.nix +++ b/secrets.nix @@ -40,6 +40,14 @@ in "secrets/passwords/services/accentor.age".publicKeys = [ urithiru ] ++ users; + "secrets/passwords/services/mail/charlotte_at_vanpetegem.me.age".publicKeys = [ lasting-integrity ] ++ users; + "secrets/passwords/services/mail/expenses-noreply_at_vanpetegem.me.age".publicKeys = [ lasting-integrity ] ++ users; + "secrets/passwords/services/mail/huis_at_vanpetegem.me.age".publicKeys = [ lasting-integrity ] ++ users; + "secrets/passwords/services/mail/peter_at_vanpetegem.me.age".publicKeys = [ lasting-integrity ] ++ users; + "secrets/passwords/services/mail/postbot_at_vanpetegem.me.age".publicKeys = [ lasting-integrity ] ++ users; + "secrets/passwords/services/mail/robbe_at_vanpetegem.me.age".publicKeys = [ lasting-integrity ] ++ users; + "secrets/passwords/services/mail/ugent_at_cvpetegem.be.age".publicKeys = [ lasting-integrity ] ++ users; + "secrets/passwords/services/mail/webmaster_at_vanpetegem.me.age".publicKeys = [ lasting-integrity ] ++ users; "secrets/passwords/services/ssmtp-pass.age".publicKeys = hosts ++ users; "secrets/passwords/services/acme.age".publicKeys = servers ++ users; diff --git a/secrets/passwords/services/mail/charlotte_at_vanpetegem.me.age b/secrets/passwords/services/mail/charlotte_at_vanpetegem.me.age new file mode 100644 index 00000000..fd8b9b7a --- /dev/null +++ b/secrets/passwords/services/mail/charlotte_at_vanpetegem.me.age @@ -0,0 +1,11 @@ +age-encryption.org/v1 +-> ssh-ed25519 hKAFvQ ahBZiWAQJ8gDr9iXra/ss3Z0Av9D1ie9JSKLF4c/Okw +yFgKlZZTQpJEgk3fcSGNYH5pSzp/Hk0UgE9IqyTHa4s +-> ssh-ed25519 s9rb8g c18VGG0c1TUodSAJ9yse6NnTxU55vD3/GxFT6AKDMxE +D/eY7Yy8aEQI+G7NnLv7wYuj4wKgss5LtC+hziJ82GE +-> ssh-ed25519 yad4VQ uFPIuBUVcB4uNWT2n0zG47B0lS3xJNc9eYC2UYjOXik +HASW6oo49CCCqDhVxBQWV8ospBSFZQj2US1NFbenItE +-> xB*-grease Y/qK/}Qi \1]9X~ +eFWnjgXubs1JoPMhz13W6fU +--- HMRxW/o6WnGKX1VBIhVoibAA3LgI8IFY71I7sbmj08I +;N Nf`. ?H8pfPL1=d昚<5_N+h*kOՋKW:C*Gˢ""<|mPIFَB \ No newline at end of file diff --git a/secrets/passwords/services/mail/expenses-noreply_at_vanpetegem.me.age b/secrets/passwords/services/mail/expenses-noreply_at_vanpetegem.me.age new file mode 100644 index 00000000..1078cbdc --- /dev/null +++ b/secrets/passwords/services/mail/expenses-noreply_at_vanpetegem.me.age @@ -0,0 +1,13 @@ +age-encryption.org/v1 +-> ssh-ed25519 hKAFvQ K0/OGHgNGGOXqUcbDgCIrzW4t73SPSeUd+gG5jnm00c +KGhXDqs6PEG4aMVujmHC6m5srF3f8AA7Qwoero2HEYA +-> ssh-ed25519 s9rb8g JTk9eebQUBH+iblr1D4l1/GEuw44dSL+6+z3bCvewQA +kQX7BhNb06o+MvTaZJAjeXzxzMgG97yBSi7i8wQilXI +-> ssh-ed25519 yad4VQ aVsBmsu8EUJGSdZSkMMRoqCMSSnerZ1ZQSSQdL74pHA +TBoBMYpaaSW4JxnSNjFmMQZWuG980eO3eUx+sBJ6Sx4 +-> D0j-grease /Vnw;b}W !Qi wxsjo,Ns 3SP +gICLXBnxzhuWZYcEAjHqTUXthxk3OXXOKcqaqZ4TPgJNlP+w2tQPI9mKkKvBsyxC +kPRmsQrMeaKkbSBd7E9ukHmjFFrUr976dbYEYBVr +--- ct4WJvTs7bBnsMIYGgKpqDqQP6lD6HKy0M9YZr6nMtE +M@b(%J}$`Q' +;)UGQm3%jF7ֈpIAɜud bsiWn55l*wtBըZ4>1ټvC/] \ No newline at end of file diff --git a/secrets/passwords/services/mail/huis_at_vanpetegem.me.age b/secrets/passwords/services/mail/huis_at_vanpetegem.me.age new file mode 100644 index 00000000..60ba3b2a --- /dev/null +++ b/secrets/passwords/services/mail/huis_at_vanpetegem.me.age @@ -0,0 +1,13 @@ +age-encryption.org/v1 +-> ssh-ed25519 hKAFvQ ipuOfR53i4N9K7WU3n42Z8T4Yx4stuFR+ZbwZ//qOhA +u+B/ghnsEtRkdhfMhzq0mXqITnIN/fBZWL1Qr4AJqMQ +-> ssh-ed25519 s9rb8g Z8bMCuAsDgYPFqkHbrjmApusx/eGzht/hlRMf+SMVxc +Ll7OIxlh3MhlDNZuP+AOY7uumdoRkhdFzX0Wnk3u36E +-> ssh-ed25519 yad4VQ x8zMlh1ik/u/H6w1Pz/EqHbkjf9YfGSAyGJNu1sJyU0 +hw4aZDrMN7TSR9pdstgb/mtcGekFlFP32IfcWHQHhqk +-> =-grease +akxvkvEU2dQoOjC23uvAhwVdbbEu6UgholfEeMJmXPPxg52ajnGvQl8TCHsMZB+v +DoiJ6IPsByE +--- Qu6IXI4VY6a66SOQDxH7iwcbu2+HfKb8yoQ8MU9Jf1Y +h_<3Vop +5x_!UՁQb>1U! 库3dHŌB]* p`*L$J0LpmܵCbP{ \ No newline at end of file diff --git a/secrets/passwords/services/mail/peter_at_vanpetegem.me.age b/secrets/passwords/services/mail/peter_at_vanpetegem.me.age new file mode 100644 index 0000000000000000000000000000000000000000..07599a44b59b357fe1439e973b4ba10ce4552530 GIT binary patch literal 620 zcmYdHPt{G$OD?J`D9Oyv)5|YP*Do{V(zR14F3!+RO))YxHMCU7@OE@73si7(j_@k; zF38IE%=RwHHwY~#3@Ixw^$jZZOfA!|sBlX+G18Cl_b7}C4dpT}%8bY|^S8*&uE?_t z^~v$HG_}n1tf&YGEiVf3H8Xbg@ysf8@^LgW$VRuV*s>_eB3&WGCm_wJGAb|CG}SZ5 zyfUIHxWF?v$ETnmC?L|$-#n?ntuV(lwIJCqJ(4Ri$jr1N!qnHmAU&_Jw4lTwCn7OC z)443w*TXctDkCh^(61;UDK8=@)B@eM%ET0tut0^hQXh|S^Wdm*Cm+{0Xrqxvr(9q0Rx}+ByEl7ET@o72aNvITfMlRY@il+6Iv+uHGpn z*%1Nmh2_P;Rpo(2X~l+I+6MYbIe}cdy1EJxiTUon2KkZU!EPZT-WI8*=4tt1<^gFw zxrV`M$(G?p=}rNW#aYF^#^qd>1UA@6D*g*v{`S_h9ruck>AzLY^Z6xqApF9)qZ`U9 z`y)GVSueP_>T6$qn5}AUc`E;PX0e}BpPew1teesEl}-G!zV^DK^SK}Kb#q$FUFwwI f)3NQ=3^wNUqpKHq*-e_eB3;2K(Y3@Q$H>S(DLo}I zEIeD=s3gBABj30rL|Z#VyD}g+C?(Zd-!jJ|Gnp&Puf(Oqx4_cO+bg-sJjgr3IkMQx zy*x52qN=E>G9)d?G|Q!+#N5xzB^}+i%ET0tut0@u$FQ=ZaIf$rZ}*H;_oTq`tU`le z&*UOUvw)%~!^*OXR2NS#C#TesoJg)fLmy|q>>`88&^({S^dgt?Ag{0>XN%x+^W=bl zz;ah3Urz&9uWa)W!%&cIMdn2%y6Hu!iN&c3AzZG-QNC`)!4?H(;l+i9xxW6vE*4Q$ zRTf#U`c)y70U@S-Ng2LnIer#~PJR*kK~*khh2GAkK4HcY!InNL7F@czx(cC%&S8a_ zndQc5C1Gx6KK{X_0l7(@NgDq0Pg0~>+ZJ2XMOKUU#CO$vS~~05@`k6sD|OZ9^)vX+Ry(3~_urb{ ylg!3*Z&+D$*N9hP|B+Bmhs*z4vaD=%g`>4FsO)1_vP}=%n9;IPs%R|_jGml zF3Bnm2r-Q+@kuK3vaHHYG%(67$@P!O^Nn&#%SN}Y*s>_eB3;2Czr?%P&(X{|Jj&ER z)Yac3I59QJ(9tL`#l$ew&!r@(Dl;uHGc3!)Iho7Cv82e%-#e?a)GXOBFEcaOCB;2C zBc;Nx)HTc^qQt`3#HYgBFVfPn$P?YR%ET0tus{Waz!LZT3ZEc%udH+*?|lCx|1zfx z{VY>s=P+~cV&|aJ(8#KkCy}uy6Hu!iN&c3rTSV5=Fys}Ir<90-mV5Y3Rbl_ ziRyvDF~fUX>Pw=0^UZq2_^Qss7p_2I($gA&yCvUT!8id8v+m#W|&sRr%V5 zhEe*r4Islg~D(?O!WP&ZWi8 PV!6(=@$kt76$k79;%?UK literal 0 HcmV?d00001 diff --git a/secrets/passwords/services/mail/ugent_at_cvpetegem.be.age b/secrets/passwords/services/mail/ugent_at_cvpetegem.be.age new file mode 100644 index 0000000000000000000000000000000000000000..bfcfafcdf44a902988e10ebee937cecba42ae384 GIT binary patch literal 633 zcmYdHPt{G$OD?J`D9Oyv)5|YP*Do{V(zR14F3!+RO))YxHMCU7@OE@73slG`2+lXj zF3-s{NC^tbE{Jr_@NtPuG!FKR@(9XI&v%XtFwHH^P0vUP3gpT!@i(uk@bdQYEAuN& zkMxK%atwBlbg}TwD0j>aD0VY9^K!H(uq-R{wm`S7*s>_eB3;4K$K2Dy$JwC7&A*~J zGt4X7FgG`~B0VL^Gu1CWAkDuj+1S-F%cvkdH=nD}GqkcQBg4SoB-Oao%t<@b!o#h& zs=PQgz$4emtuoTXxHPFuKQPTZCm-Fm%ET0tut0^XH2;w7eDfd!i&8IlZ~wq-(-3bb zLsPf1ipa8Xr((B~)Dq)#Kf^#nw?HmK@ASMBUswGS(}Hw;eK#k6e{I9?q?{mAFV`ST z=W>tY^bn)$g1pe2B2SQQVY=x>sfop@3JD6q$qH6nnFe`DCIv1b;g)G3zM1C5?v7?b zA;oU`sgadF+S)}C>G~ewk*Q@t{>Is*QGV%V6^U6%{*e`CS?&hLrTO83T&95)28l&Z zVL_3pX^DlF8J_7m#`>8C720_jzImZx*_oLk5n&Y-`S}^;PF%XWx(Y5i?iKk3RgMvs z>CS$R`R+*;RVB_5iD?yOULh{oB}sWznI4AjPA(4K1uzwa00JHhsUH||9 literal 0 HcmV?d00001 diff --git a/secrets/passwords/services/mail/webmaster_at_vanpetegem.me.age b/secrets/passwords/services/mail/webmaster_at_vanpetegem.me.age new file mode 100644 index 00000000..5afe051f --- /dev/null +++ b/secrets/passwords/services/mail/webmaster_at_vanpetegem.me.age @@ -0,0 +1,12 @@ +age-encryption.org/v1 +-> ssh-ed25519 hKAFvQ JHjuI9rQDBEZvK8NN3KmDOL4tZsGZMec1EFXrMSY1nw +n0uoSU5wTkQYf9xBOEiWWfMjjATk7T0orntiSjTKdtE +-> ssh-ed25519 s9rb8g E1lkFCR7hM5LXWBZ51y5hZvUN4+pHIudkXmpU8wkLCY +eEvc/SXb2d8vqRTroayijnVB99ZO4RPgK03fCR37O94 +-> ssh-ed25519 yad4VQ x6B/1ZQOMgbjbs32U7j4Rr4/MmBLyCg+cIPDynFJuXA +6loeFyyP9g2R3/p//6iUCn3YfMl2otRcIvl2srWBpd0 +-> PH~?+-grease +GX64yaOgkxrMz9cfX6BfbXuefE8PPeYyIke4bGCxbsRSibDHaHfcd8OiIKxAHkP7 +IwNDaBN+FSoIvKc +--- 8Vd7zRm8JAo0kYXwuP5+AlAIyEWzahj7NKv2VZOsdWo +%RMi JRMF~qNCPlͣͫbF4j3Wb܂, ךޔAgI`y⡌`@eHkamLOX \ No newline at end of file