diff --git a/home-manager/hosts/framework13/desktops/gnome/default.nix b/home-manager/hosts/framework13/desktops/gnome/default.nix new file mode 100644 index 00000000..077404aa --- /dev/null +++ b/home-manager/hosts/framework13/desktops/gnome/default.nix @@ -0,0 +1,3 @@ +{ + +} \ No newline at end of file diff --git a/home-manager/hosts/framework13/desktops/hyprland/default.nix b/home-manager/hosts/framework13/desktops/hyprland/default.nix new file mode 100644 index 00000000..2b78186b --- /dev/null +++ b/home-manager/hosts/framework13/desktops/hyprland/default.nix @@ -0,0 +1,63 @@ +{ theme, ... }: { + wayland.windowManager.hyprland = { + settings = { + monitor = ",highrr,auto,1.175"; + bind = [ + '', XF86AudioMute, exec, swayosd --output-volume=mute-toggle'' + '', XF86AudioPrev, exec, playerctl previous'' + '', XF86AudioNext, exec, playerctl next'' + ]; + binde = [ + '', XF86AudioPlay, exec, playerctl play-pause'' + '', XF86AudioNext, exec, playerctl next'' + '', XF86MonBrightnessDown, exec, swayosd-client --brightness=lower'' + '', XF86MonBrightnessUp, exec, swayosd-client --brightness=raise'' + '', XF86AudioMute, exec, swayosd-client --output-volume=mute-toggle'' + '', XF86AudioLowerVolume, exec, swayosd-client --output-volume=lower'' + '', XF86AudioRaiseVolume, exec, swayosd-client --output-volume=raise'' + ]; + bindl = [ + '',switch:on:1241ec0,exec,hyprctl keyword monitor "eDP-1, 2560x1600, 0x0, 1"'' + '',switch:off:1241ec0,exec,hyprctl keyword monitor "eDP-1, disable"'' + ]; + }; + }; + + home.file = { + # Set the custom launcher script + ".config/hypr/start.sh" = { + enable = true; + executable = true; + text = '' + #!/usr/bin/env bash + # https://wiki.hyprland.org/FAQ/#some-of-my-apps-take-a-really-long-time-to-open + dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP & + + # Set the wallpaper + swww init + + # Waybar + waybar & + + # Set up the idle management daemon + swayidle -w \ + timeout 120 'swaylock -f && playerctl pause' \ + timeout 180 'hyprctl dispatch dpms off' \ + timeout 300 'systemctl suspend-then-hibernate' \ + resume 'hyprctl dispatch dpms on' \ + before-sleep 'swaylock -f' \ + before-sleep 'playerctl pause' & + + # Automatic device mounting + udiskie & + + DIR=/etc/nixos/git/wallpapers/${theme} + IMG=`ls $DIR | shuf -n 1` + swww img $DIR/$IMG -t random & + + # Notification listener + mako + ''; + }; + }; +} diff --git a/home-manager/hosts/framework13/desktops/plasma6/default.nix b/home-manager/hosts/framework13/desktops/plasma6/default.nix new file mode 100644 index 00000000..4a5322fd --- /dev/null +++ b/home-manager/hosts/framework13/desktops/plasma6/default.nix @@ -0,0 +1,10 @@ +{ ... }: { + programs.plasma = { + configFile = { + "kcminputrc"."Libinput/2362/628/PIXA3854:00 093A:0274 Touchpad" = { + "NaturalScroll" = true; + "TapDragLock" = true; + }; + }; + }; +} diff --git a/keys/hosts/framework13.asc b/keys/hosts/framework13.asc new file mode 100644 index 00000000..bdc8ef71 --- /dev/null +++ b/keys/hosts/framework13.asc @@ -0,0 +1,28 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +xsFNBAAAAAABEADSWXdt9bOJ7YjtdBJX5R643JYY/3U2shvCApodMuKD3uWiAPuO +lxCXaZCGOEDVdWVenrpIHUcZOyjI5vH3ocu3EFTwNXBbH2eeHKVJCKU7JNxOKXol +pHscC05LpceBzMGwaAbqIvLxJ3eohYiE9APSUtHyWHHRm3T5fg/15gdefWXXDZzH +2cYX/EvVtdWxyLgS04Hz/6xyB+bXsOOjjkz3V1bH1Laa0KuTEmXctV9Y7JAoaFvr +apyMfT3DrA0843MZmMtE7BUocR6FyIui10jN5IE8YLm4XpDhhy+7R4e2ZDUsZjp2 +3nAICvZbmh1Q317TheDv2f1w2v5jee5iYcy0QuBFU7YaaQ7T8zaGo53k4+otTWrp +6IDruYMcI82lzmftedIgqz+Aepv4mg6YDTjG7jULWrFedROPb7cNGlbbPQxRXQcv +NJHqbT15SsnJvRahdoeFkn7Iv5N6HxwhWXcWdiWGPK0Agl4GT7veITf/S+nE41Qq +hWirRlDUQ48LOzp2O0/T4HnTgCJvFxJ+O/pSBxYUIXJAbdFmMd4RDFxqa+jvN8Ya +WogKYjKfeq9LIkttPZMFCBNx2va9X0po+Lx/ivXuktMiSAM0Gl/jYzAGRQXcq5+c +PaS8oA7UoM2lTC1HpmG+9Pc4elhKHNL3LPPa1Ta3BnShUgWAjmUVEFx+ewARAQAB +zTJyb290IChHZW5lcmF0ZWQgMjAyNC4wMi4yMCkgPHJvb3RAbml4b3MtZnJhbWV3 +b3JrPsLBYgQTAQgAFgUCAAAAAAkQqGYV0XZT2BkCGw8CGQEAAFjFEAA3WldzxvQ0 +gJyBs5+p3aAGjFajF3ggHxa9hV5oUHj4Fev5u1IPpBOQg7YtH2riyG3cffAiY8xd +dwpCmoIHgFK8RNwy724Hjo5+ZcOh40YYrMMZrLGc//ahmznAiQF89+4Gpi6H1WX9 +km8hPKEs4qEkEM54/3yYNeYl10AHYq1FF2uBX9h4CyuM3o2q3M+fBU1qObfD/IJD +QS6voqtIx0Uz5llOjVoUtzKmJnxHqMA9LX0HtMRT4K2AdQTe5AeOOF34LjMbapgC +A+hskrIBRwDIlriuYhoOYk4FHeCk0ALyXnOQE0EWHnDZlmAzB13nMs1lqwoPyBU/ +epc7UhV/Jnu3oNmU4FpvwzWC2EE3KWyVSbaGuvgC5pqq+HH1U+OsSppYnqp12unI +xECGKn/prwukJQCRTcQ2PD9xGbWVQ0wW4hDUfzWF+2qv6kmHLy/fuY1Wpsji2ITS +TDdFa+3JJvXkF109k3cYUFYanVLGM2qqtdKfqqEcazN8qmkl2N34TRE8X8gqvxqi +QFvPIFQAAdEUxDky+VUf6bMvUr42kujNjefbtOEF2RB9LBgzijuyIsXwF+ZlwGD5 +KbDdE1nofEpFXqCevEmpxhZRcImqakA96GBpiGNkPTuD5ot3QoI+AwKM8e368AZO +2JVSu7bwpk3rDLOG0+x/qYzLKoaH0vQaig== +=rZHS +-----END PGP PUBLIC KEY BLOCK----- \ No newline at end of file diff --git a/nixos/hosts/framework13/default.nix b/nixos/hosts/framework13/default.nix new file mode 100644 index 00000000..d04258d6 --- /dev/null +++ b/nixos/hosts/framework13/default.nix @@ -0,0 +1,91 @@ +{ inputs, config, lib, pkgs, modulesPath, hostname, ... }: { + imports = [ + inputs.nixos-hardware.nixosModules.framework-13-7040-amd + (modulesPath + "/installer/scan/not-detected.nix") + ./disks.nix + ../../common/services/tailscale-autoconnect.nix + ../../common/modules/secureboot.nix + # ../../common/modules/boot.nix + ../../common/modules/udev-rules.nix + # ../../common/modules/yubikey-auth.nix + ../../common/modules/builder.nix + ../../common/services/podman.nix + ../../common/services/geoclue.nix + ../../common/services/syncthing.nix + ../../common/services/ollama.nix + ]; + + services.ollama.acceleration = "rocm"; + services.ollama.package = pkgs.ollama-rocm; + + hardware.bluetooth.enable = true; # enables support for Bluetooth + hardware.bluetooth.powerOnBoot = true; # powers up the default Bluetooth controller on boot + + services.fwupd.enable = true; + # we need fwupd 1.9.7 to downgrade the fingerprint sensor firmware + services.fwupd.package = (import (builtins.fetchTarball { + url = "https://github.com/NixOS/nixpkgs/archive/bb2009ca185d97813e75736c2b8d1d8bb81bde05.tar.gz"; + sha256 = "sha256:003qcrsq5g5lggfrpq31gcvj82lb065xvr7bpfa8ddsw8x4dnysk"; + }) { inherit (pkgs) system;}).fwupd; + + boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "thunderbolt" "usb_storage" "uas" "sd_mod" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-amd" ]; + boot.extraModulePackages = [ ]; + # boot.kernelPackages = pkgs.linuxPackages_latest; + boot.kernelParams = [ "boot.shell_on_fail" ]; + # boot.extraModulePackages = with config.boot.kernelPackages; [ acpi_call ]; + boot.kernelPackages = pkgs.linuxPackages_latest; + + networking.useDHCP = lib.mkDefault true; + powerManagement.cpuFreqGovernor = lib.mkDefault "ondemand"; + hardware.keyboard.zsa.enable = true; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + # Set your time zone. + # time.timeZone = "Europe/Warsaw"; + + + # Set the networking hostname: + networking.hostName = hostname; + hardware = { + graphics.enable = true; + amdgpu.opencl.enable = true; + }; + + + programs.gamemode = { + enable = true; + enableRenice = true; + settings = { + general = { + renice = 10; + }; + # Warning: GPU optimisations have the potential to damage hardware + gpu = { + # apply_gpu_optimisations = "accept-responsibility"; + gpu_device = 0; + amd_performance_level = "high"; + }; + custom = { + start = "${pkgs.libnotify}/bin/notify-send 'GameMode started'"; + end = "${pkgs.libnotify}/bin/notify-send 'GameMode ended'"; + }; + }; + }; + + environment.systemPackages = with pkgs; [ + # Game related things + gamemode + # WINE + wineWowPackages.stable + winetricks + wineWowPackages.waylandFull + nvtopPackages.amd + # RGB stuff + openrgb-with-all-plugins + rivalcfg + + # Other + distrobox + ]; +} diff --git a/nixos/hosts/framework13/disks.nix b/nixos/hosts/framework13/disks.nix new file mode 100644 index 00000000..265a0503 --- /dev/null +++ b/nixos/hosts/framework13/disks.nix @@ -0,0 +1,87 @@ +{ + imports = [ ../../common/services/snapper.nix ]; + + services.cron = { + systemCronJobs = [ + "0 17 * * * root sudo btrfs-backup root" + "0 17 * * * root sudo btrfs-backup nix" + # "0 17 * * * root sudo btrfs-backup home" + ]; + }; + + services.btrfs.autoScrub.enable = true; + services.btrfs.autoScrub.interval = "weekly"; + + boot.resumeDevice = "/dev/mapper/ROOT"; + # https://sawyershepherd.org/post/hibernating-to-an-encrypted-swapfile-on-btrfs-with-nixos/ + boot.kernelParams = [ "resume_offset=533760" ]; + + disko.devices.disk.nvme0n1 = { + type = "disk"; + device = "/dev/nvme0n1"; + content = { + type = "gpt"; + partitions = { + BOOT = { + priority = 1; + name = "BOOT"; + start = "0%"; + end = "550MiB"; + type = "EF00"; + content = { + type = "filesystem"; + format = "vfat"; + # https://github.com/nix-community/disko/issues/527 + mountOptions = [ "umask=0077" ]; + mountpoint = "/boot"; + }; + }; # partition 1 (ESP) + LUKS-ROOT = { + start = "550MiB"; + end = "100%"; + content = { + type = "luks"; + name = "ROOT"; + extraOpenArgs = [ "--allow-discards" ]; + content = { + type = "btrfs"; + extraArgs = [ "-f" ]; + subvolumes = { + "/root" = { + mountpoint = "/"; + mountOptions = [ "compress=zstd" "noatime" ]; + }; # root + "/home" = { + mountpoint = "/home"; + mountOptions = [ "compress=zstd" "noatime" ]; + }; # home + "/nix" = { + mountpoint = "/nix"; + mountOptions = [ "compress=zstd" "noatime" ]; + }; # nix + # SNAPSHOT SUBVOLS + "/root/.snapshots" = { + mountpoint = "/.snapshots"; + mountOptions = [ "compress=zstd" "noatime" ]; + }; # root + "/home/.snapshots" = { + mountpoint = "/home/.snapshots"; + mountOptions = [ "compress=zstd" "noatime" ]; + }; # home + "/nix/.snapshots" = { + mountpoint = "/nix/.snapshots"; + mountOptions = [ "compress=zstd" "noatime" ]; + }; # nix + # Swap partition + "/swap" = { + mountpoint = "/swap"; + swap.swapfile.size = "64G"; + }; # swap + }; # subvolumes + }; # content.content + }; # content + }; # partition 2 (/ BTRFS) + }; # partitions + }; # content + }; # disko.devices.disk.nvme0 +} # nix diff --git a/nixos/hosts/framework13/hibernate.nix b/nixos/hosts/framework13/hibernate.nix new file mode 100644 index 00000000..2875a022 --- /dev/null +++ b/nixos/hosts/framework13/hibernate.nix @@ -0,0 +1,46 @@ +{ config, pkgs, ... }: + +let + hibernateEnvironment = { + HIBERNATE_SECONDS = "10"; + HIBERNATE_LOCK = "/var/run/autohibernate.lock"; + }; +in { + + systemd.services."awake-after-suspend-for-a-time" = { + description = "Sets up the suspend so that it'll wake for hibernation only if not on AC power"; + wantedBy = [ "suspend.target" ]; + before = [ "systemd-suspend.service" ]; + environment = hibernateEnvironment; + script = '' + if [ $(cat /sys/class/power_supply/ACAD/online) -eq 0 ]; then + curtime=$(date +%s) + echo "$curtime $1" >> /tmp/autohibernate.log + echo "$curtime" > $HIBERNATE_LOCK + ${pkgs.utillinux}/bin/rtcwake -m no -s $HIBERNATE_SECONDS + else + echo "System is on AC power, skipping wake-up scheduling for hibernation." >> /tmp/autohibernate.log + fi + ''; + serviceConfig.Type = "simple"; + }; + + systemd.services."hibernate-after-recovery" = { + description = "Hibernates after a suspend recovery due to timeout"; + wantedBy = [ "suspend.target" ]; + after = [ "systemd-suspend.service" ]; + environment = hibernateEnvironment; + script = '' + curtime=$(date +%s) + sustime=$(cat $HIBERNATE_LOCK) + rm $HIBERNATE_LOCK + if [ $(($curtime - $sustime)) -ge $HIBERNATE_SECONDS ] ; then + systemctl hibernate + else + ${pkgs.utillinux}/bin/rtcwake -m no -s 1 + fi + ''; + serviceConfig.Type = "simple"; + }; + +} \ No newline at end of file diff --git a/secrets/hosts/framework13.yaml b/secrets/hosts/framework13.yaml new file mode 100644 index 00000000..b489fe54 --- /dev/null +++ b/secrets/hosts/framework13.yaml @@ -0,0 +1,54 @@ +tailscale_key: ENC[AES256_GCM,data:n7/oetTmHh3LHnIN8YlhbLloL7MVKJt/IfPHycFNvVBp9zuyVScsJV/FhZW43TJn,iv:QaLZ6Loo/T7m2DuKAJaBagsezEFC87EDKp2zR/SfdFw=,tag:d/u2oCEKtb/W/uDk9fnMKw==,type:str] +syncthing_cert: ENC[AES256_GCM,data:FLN/iLGX7GM4/bsoDB9511EwPwpzev+Y6rlGlgjmTOpUj0DYEU3Eq8wHNvd8Kb5BDHmoSfmnvaYFAIHULqe3iciyuZPX6vyzK6D2qYHjtZTnc6jJGVo3b2jfPuv+dD1Sg7eb4qdFue5JafV8eSjt88VAb8xYgmQg0oQQuvNcWg7uIvwh7sT2TU09cVV034Jy4o/G7wIhcxYpz8A0KPlC/EJUtEa24L9nvuAIr7uopLLsPrESS4g/rRhXoM3qppuFhx4SSjAqaSmyMBsCdAMcebS1EEhruWWfpoW2DH0BXvnKZ4NmSi0EjTejRIxlADOFRkDxtBfGaXxY8FmUH0GGxoRhSuQGCBuRYYaujlwZ3iXXl3xLfiXY6B5LrZ1zbRnV3sO82D5t6j/mjU5Bf3VOO2KQKpuNC+Ii1RvQ75xbylaGw3OX/RSTBnMjHkK1JjfmrOqVyA+KEZ2o6QIS3Qp7TcYEvTVFZhBUgjbgfT1EHMLwlerkFolyfuHxHgwYE+D3wgY7cx5vo09MOylEqBfKK+X5Uo/BUiijQ5rfJa3YuXabYIXN6RmVBXMOiMNx4AGt0WRyNtjX2LRTYVRbG696NyvdjQmvrgbsi+b+RzFP7m9eimVyR2GKOJl8Xm5kszhibW0lSxQMRRNfbccV4GYJTPuVW+zIv8sUVhrlyTMFGbobvSbPGT98lJ/fbAKIGMo0Hd1fQDIzEDwKsjdTX2tSHBmEXyA6t1uef3hn83b6NsTxXDGA+BfdA2BKBkSRIO3Pe8XTMMoLTivV+YSdIsTFbg3zd3LKZoIDQ8/zMkYKz6QoIO2ubgX2pLLD06+9jbNr1QppyzsGA4vqiPVhoQ5qdh3LKW9Wkfc4kQf4X8VRKrB1jhpwXC3NIMFoXF5hJ6j8Q82FukQFphWWikL+t6rpTOmFuc57hv4do/MohnQDkg4d5ByNcTzICncTXhUnIKAIIPo2EEhOeJNZDcHD2mLV9vySjzaFtphX9jJkNp0pcSTeZmYyGgDFME9DMnctTS3fCM7mDj2PgQZcfDt1hM3feBLsvldN/DfYsOM=,iv:/D51qUbeXo1kh7kuhWPAvReMuGJHI9uV9veCp1Ll2aQ=,tag:RYY2sEF6l+LLZjoYznEWtw==,type:str] +syncthing_key: ENC[AES256_GCM,data:j51d4K4gmtlJWmC6ZAUzMou9EByc+8jLGA0Azu0fNMDL1KYo7aRsR8knImIDpcs6fi2Po3slWUr80rozninxYqi621vA7c4cmmXWjCzMDBRWDihvjwRSgwFpaNaAZO26fWbcGDo/wfHlraLGuSIHq8leFcP2P9yr4tEg8R4IdwtsXm6QQJn5MPTVqfBvkjrA2edgygJhcsPnL2msPvkqZ/Wn0FnOVoF4TkHrgByg0H6U1y1lYj2i1UpHQQIPLJbX31RyM1xCHISoaFjKX781PYXWaIX7Mg8uOEuvrfzS4gQm3iX4EJly/Hc34BM2otngfyOHRN+Rqi0T3bqjYrsGIiP1UCqPYeXCLzlPc4Y4mprcxtC6pWRBW94lHsd7Dzb+,iv:CRHl0hYqGMfAJdNiMoO6kAsK6oeTpR1VQ2S5vFY+k30=,tag:9pfPDz8iUSNeJWRC3hVzZg==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: [] + lastmodified: "2024-07-02T08:55:45Z" + mac: ENC[AES256_GCM,data:c2cH2q2uzC41zzhImO6xot1b0iGhhz2DwLB43i4l5DXBMISANxr03+Y7HhcKJfr2+WVGG5ECp9VxnNg3Kpb0wz34ict8sMHJ3d/wbERAXg2KvnfaKWNVGYQU5dZR+CfE/w1T6ZYASNzTMxbAC5DSYciSCXVWb9iY5TytlI8kXnk=,iv:yclUj2ARmVxGHCiBbFzn/aFlXR3jS+Lq9AtO7uDbQlY=,tag:9I8YwqhctRmkN5a690IL9Q==,type:str] + pgp: + - created_at: "2024-07-07T03:19:59Z" + enc: |- + -----BEGIN PGP MESSAGE----- + + hQIMAwAAAAAAAAAAAQ/+KhPcp5OdcOjWxWsLZh3j6IkoYW0p3fBh7txyHH/5ziUN + QubMWWKnnbW3EZ/4TBGIOx0thwkfY8xyDUckjgQsTQ1CmQLa4RkLhMxBUvXmRI3y + gdeDghK2saqw0Yfe3HUxHcGDlbH3C+VOD17769yAkmEc3CtcT8WAssNwk4X7/2q/ + 1Fyj31wCZP009VovdDt6Ra3wA6jv/EdVbdZf+7u9jCA1wamxk8+I3pGH5u9Qa8JX + emi75/kkHFTG4nejVYx4bKiAdUZOgN4ciDnBPbH1jm2eLQWTQGudXfXyIuWhJeIW + Ck2f+Lh/2cMask15njQi/bbtTOCOhpQdxl8io+wPFTGVeL9dDy1uBMgXedRcwKha + 1oeq1LKRHJP2Dr80MDwJai9Dl69D5NoE1aop3iMQg6ob0BLHA3nUX+ZHraFA8La4 + uDBHw5A0dgfls0xz9KBfA/iZ4M/Ee7EkPIw4NkaLdeD2xwWvaegLaNQX/O4tW87d + A6yUDKfKOFe4cxOq9HgjyG2246/qHnnHAwe+dzFeU0rOfWJfG4ci/bO7/wDtlT9n + vusWZzRxti8s3evF2rd7AzkodB+pMyZFbArLJ2lB8yLBOyohjzXGzN2nqnQSfMgL + mb5qHJ9+nGMjiRcMPYwtg4R2EhApRmx0OJVIOwqO4maMWQbwpJ2+71rXnK4apDHS + XgHaHo4V+rqAN1WcanAj0TVD7NwFP6za2etSDQfLxRlFQHYf/6HZS/bvr/kFXew9 + ADON3pHDUFt+NuO1j2igfzLgh7ZXdPZp2I49WPNAzfcS6n5wDTHlLza2V981RKw= + =WG6W + -----END PGP MESSAGE----- + fp: 4A89D6B44B7E423B647C7AE848FBC3335A26DED6 + - created_at: "2024-07-07T03:19:59Z" + enc: |- + -----BEGIN PGP MESSAGE----- + + hQIMAwAAAAAAAAAAAQ//SsVO/p0Eex9J2ojKvEUS3RE2AujS+tR7uSJsfD5NjKTf + w0/HfqEwzSTpwNsbwLkNb+Zd/H/mO/kR0hgoQwX9/JfqV4nSN0Ok1gQ7FeOU/E11 + SfOU3saDRpKQasEYi6+faFNEDbRVDFwGql/nbl/JnwJPfeJzqVRq5ZF0xfb2MCim + FSLLFqHuRVNRhkeZiC1HNFV6lgmyy7dNwnJsmi4evAsRVuqAps4tw39sOxl4XG61 + RxF3oIN2ta2Zsa7ZTW4EM5pCRVwpEwj2jubYnr8VjS1d3mJZQ+f6RSXmdACuvsWi + DHzSUG9SZGEMe3i2Y4Lp7d9OblYYTJJBQCvBqHqFRb3HYH49W/54778TuoYIzST8 + xbv/KchsEueli19CY1FZnDDx9Ex4YnzP4zmGyYEzrlmSArwcZrhxasTuPWS7+9rM + XfLAenTyDsliJrXsjWQEFwk2uIagbF95P9wfnhtY6jWAxHmlCJzBjx6B516dq91l + hU7loZI4GODCQqpDn9ZtAnkKYLjKEgmPFz0kaueFvC+0f4Z8BKvNnlwWpC3Hj+rj + 8yPNveqNeTJ2Szc5KA0xCEy0YHp+bR7svQY9O/AHm2wEupFIpy2EpVNSamKAlnGo + K1ZrEUT2Nd01Ti5hhn67ILL5DKUh57xTU/m50QTUI6NYE1r+MYte6X1P3Tnej1jS + WAFM/ufIYQJfnBcb5TNp7qGw6qM5nqoWy3NbIen3YqiIP1+57rUoOItAW2CTTvz4 + 1oWpCWxmpqWzqucHYVEWmqsxQ+z0/2R8f+jLMv3jnNQLqlgbJ933zLU= + =+08T + -----END PGP MESSAGE----- + fp: aaec681e4fb9dcdd15d0d367a86615d17653d819 + unencrypted_suffix: _unencrypted + version: 3.8.1