diff --git a/flake.nix b/flake.nix
index c5f4cb0..769abca 100644
--- a/flake.nix
+++ b/flake.nix
@@ -70,7 +70,8 @@
"steam"
"steam-unwrapped"
"cheatsheet.nvim"
- "zoom-us" "zoom"
+ "zoom-us"
+ "zoom"
];
mkUnfreePredicate = pkg:
builtins.elem (inputs.nixpkgs.lib.getName pkg) unfreePkgs;
diff --git a/modules/applications/hyprland.nix b/modules/applications/hyprland.nix
index 99685ed..fb5d469 100644
--- a/modules/applications/hyprland.nix
+++ b/modules/applications/hyprland.nix
@@ -57,14 +57,13 @@
"if [ -e \"/home/tomasr/icloudSync.sh\" ]; then /home/tomasr/icloudSync.sh; else notify-send \"icloudSync.sh doesn't exist\" \"See ~/nixos/modules/applications/hyprland.nix for more information\"; fi"
# my icloud account uses an email that I don't want to make public. So the script isnt pushed to github. The script looks like:
/*
- #!/etc/profiles/per-user/tomasr/bin/zsh
- if ! icloudpd --auth-only --username tomas.rivera_2009@icloud.com --dry-run; then
- notify-send "icloudpd is not logged in" "Please run icloudpd icloudpd --username my@email.address --password my_password --auth-only"
- exit 1
- fi
- icloudpd --directory ~/hdd/kdrive/Photo/IPhone/icloudpd-backup --username tomas.rivera_2009@icloud.com --watch-with-interval 3600 --no-progress-bar
+ #!/etc/profiles/per-user/tomasr/bin/zsh
+ if ! icloudpd --auth-only --username tomas.rivera_2009@icloud.com --dry-run; then
+ notify-send "icloudpd is not logged in" "Please run icloudpd icloudpd --username my@email.address --password my_password --auth-only"
+ exit 1
+ fi
+ icloudpd --directory ~/hdd/kdrive/Photo/IPhone/icloudpd-backup --username tomas.rivera_2009@icloud.com --watch-with-interval 3600 --no-progress-bar
*/
-
];
};
};
@@ -289,7 +288,6 @@
"custom-checkKdrive && custom-mountkdrive" # checks if the remote works and mount it
#"waybar"
"custom-gitnotify"
- "custom-checkMatrix" # checks if matrix-commander-rs is connected which is important for other stuff
#"custom-obsidianbackup" # backups the obsidian notes to kdrive and to a timed hidden dir (~/.Notes.backup/)
#"QS-notifycache" # builds the cache that will be used for the notification history
"sleep 4 & caelestia-shell" #works better if it sleeps a bit before
diff --git a/modules/applications/kdrive.nix b/modules/applications/kdrive.nix
index f34b115..ac84598 100644
--- a/modules/applications/kdrive.nix
+++ b/modules/applications/kdrive.nix
@@ -35,8 +35,8 @@
CPUWeight = 1; # minimum relative CPU share
};
};
- systemd.user.timers.kdrive-sync = {
- wantedBy = [ "timers.target" ];
+ systemd.user.timers.kdrive-sync = {
+ wantedBy = ["timers.target"];
timerConfig = {
OnBootSec = "10m";
OnUnitActiveSec = "1h";
@@ -48,11 +48,12 @@
name = "custom-checkKdrive";
runtimeInputs = with pkgs; [
rclone
- matrix-commander-rs
+ curl
libnotify
];
text = ''
-
+ # shellcheck disable=SC1091
+ source /run/agenix/ntfy
# waits for an internet connection. It pings both Google DNS and Cloudfare dns in case one of them is down
until ping -c1 -W1 1.1.1.1 >/dev/null 2>&1 || \
ping -c1 -W1 8.8.8.8 >/dev/null 2>&1
@@ -72,9 +73,11 @@
else
echo "kdrive rclone failed with error: $output"
notify-send "rclone kdrive failed" "$output"
- matrix-commander-rs --verbose -m "rclone kdrive failed.
Error:
$output
@notificationbot_0000" \
- --html \
- -r "\!BXRRokBmEdNOyYdfOF:matrix.org"
+ curl \
+ -u ":$NTFY_TOKEN" \
+ -d "Rclone couldnt access kdrive (rclone lsd kdrive). Error: $output" \
+ -H "Title: Rclone kdrive" \
+ "$NTFY_SERVER/Alerts"
fi
'';
};
diff --git a/modules/applications/notewrapper.nix b/modules/applications/notewrapper.nix
index 764504e..5cd7524 100644
--- a/modules/applications/notewrapper.nix
+++ b/modules/applications/notewrapper.nix
@@ -1,5 +1,5 @@
{inputs, ...}: {
- flake.homeModules.notewrapper = {pkgs, ...}: {
+ flake.homeModules.laptop-notewrapper = {pkgs, ...}: {
home.packages = [
inputs.notewrapper.packages.${pkgs.system}.default
];
@@ -8,7 +8,7 @@
force = true;
text = ''
{
- "directory": ["~/Documents/Notes/", "~/test/"],
+ "directory": ["~/kdrive/Notes/"],
"render": true,
"jumpToEndOfFileOnLaunch": true,
"editor": "neovim",
@@ -16,7 +16,36 @@
"dateEntry": "# %Y %m %d %a",
"newLineOnOpening": true,
"backup": {
- "enable": true,
+ "enable": false,
+ "directory": {
+ "~/Documents/Notes/": "~/kdrive/Notes/",
+ "~/test/": "~/backupTest/"
+ },
+ "interval": "daily",
+ "rsyncArgs": ["-Lqah", "--update"]
+ }
+ }
+ '';
+ };
+ };
+ flake.homeModules.desktop-notewrapper = {pkgs, ...}: {
+ home.packages = [
+ inputs.notewrapper.packages.${pkgs.system}.default
+ ];
+ home.file.".config/notewrapper/config.json" = {
+ enable = true;
+ force = true;
+ text = ''
+ {
+ "directory": ["~/hdd/kdrive/Notes/"],
+ "render": true,
+ "jumpToEndOfFileOnLaunch": true,
+ "editor": "neovim",
+ "journalRegex": ".*journal.*",
+ "dateEntry": "# %Y %m %d %a",
+ "newLineOnOpening": true,
+ "backup": {
+ "enable": false,
"directory": {
"~/Documents/Notes/": "~/kdrive/Notes/",
"~/test/": "~/backupTest/"
diff --git a/modules/applications/zsh.nix b/modules/applications/zsh.nix
index cc40343..0c8014c 100644
--- a/modules/applications/zsh.nix
+++ b/modules/applications/zsh.nix
@@ -50,7 +50,7 @@ _: {
command cat "$@"
fi
}
-
+
custom-eza() { # behaves differently if we just call it or if we pipe initContent
if [[ -t 1 ]]; then
eza -hlF -aa --color=always --hyperlink --group-directories-first --show-symlinks --icons=always --git --no-permissions "$@"
diff --git a/modules/hardware/battery.nix b/modules/hardware/battery.nix
index 096d37d..daa3e64 100644
--- a/modules/hardware/battery.nix
+++ b/modules/hardware/battery.nix
@@ -36,7 +36,8 @@
services.system76-scheduler.settings.cfsProfiles.enable = true; # Better scheduling for CPU cycles - thanks System76!!!
services.thermald.enable = false; # Enable thermald, the temperature management daemon. (only necessary if on Intel CPUs)
services.power-profiles-daemon.enable = true; # ppd is recommended over tlp for framework 16
- /*services.tlp = {
+ /*
+ services.tlp = {
enable = true; # Enable TLP (better than gnomes internal power manager)
settings = {
CPU_BOOST_ON_AC = 1;
@@ -51,7 +52,8 @@
PLATFORM_PROFILE_ON_BAT = "powersave";
STOP_CHARGE_THRESH_BAT1 = 80;
};
- };*/
+ };
+ */
environment.systemPackages = [
self.packages.${pkgs.system}.custom-performance
];
diff --git a/modules/hosts/desktop.nix b/modules/hosts/desktop.nix
index be7b85e..7b4bc3f 100644
--- a/modules/hosts/desktop.nix
+++ b/modules/hosts/desktop.nix
@@ -71,7 +71,7 @@
mullvad
neovim
nix-git-cherry-picker-desktop
- notewrapper
+ desktop-notewrapper
oh-my-zsh
ripgrep
rofi
diff --git a/modules/hosts/laptop.nix b/modules/hosts/laptop.nix
index 989e0dd..275fae7 100644
--- a/modules/hosts/laptop.nix
+++ b/modules/hosts/laptop.nix
@@ -72,7 +72,7 @@
mullvad
neovim
nix-git-cherry-picker-laptop
- notewrapper
+ laptop-notewrapper
oh-my-zsh
ripgrep
rofi
diff --git a/modules/utilities/agenix.nix b/modules/utilities/agenix.nix
new file mode 100644
index 0000000..0e32703
--- /dev/null
+++ b/modules/utilities/agenix.nix
@@ -0,0 +1,17 @@
+{inputs, ...}: {
+ flake.nixosModules.agenix = {pkgs, ...}: {
+ environment.systemPackages = [
+ inputs.agenix.packages.${pkgs.system}.default
+ pkgs.age
+ ];
+ age.identityPaths = [
+ "/etc/ssh/ssh_host_ed25519_key"
+ ];
+ age.secrets.ntfy = {
+ file = ../../secrets/ntfy.age;
+ owner = "tomasr";
+ group = "users";
+ mode = "0400";
+ };
+ };
+}
diff --git a/modules/utilities/autoCleanup.nix b/modules/utilities/autoCleanup.nix
index 4cd52a7..a175ae3 100644
--- a/modules/utilities/autoCleanup.nix
+++ b/modules/utilities/autoCleanup.nix
@@ -2,8 +2,12 @@
flake.nixosModules.autoCleanup-laptop = {
pkgs,
pkgs-unstable,
+ config,
...
}: {
+ age.secrets.ntfy = {
+ file = ../../secrets/ntfy.age;
+ };
# Ensure your script is available system-wide
environment.systemPackages = [
self.packages.${pkgs.system}.custom-cleanNix-laptop
@@ -17,6 +21,9 @@
description = "NixOS configuration auto cleanup";
serviceConfig = {
+ Environment = [
+ "NTFY_SECRET=${config.age.secrets.ntfy.path}"
+ ];
Type = "oneshot";
ExecStart = "/run/current-system/sw/bin/custom-cleanNix";
@@ -54,8 +61,12 @@
flake.nixosModules.autoCleanup-desktop = {
pkgs,
pkgs-unstable,
+ config,
...
}: {
+ age.secrets.ntfy = {
+ file = ../../secrets/ntfy.age;
+ };
# Ensure your script is available system-wide
environment.systemPackages = [
self.packages.${pkgs.system}.custom-cleanNix-desktop
@@ -69,6 +80,9 @@
description = "NixOS configuration auto cleanup";
serviceConfig = {
+ Environment = [
+ "NTFY_SECRET=${config.age.secrets.ntfy.path}"
+ ];
Type = "oneshot";
ExecStart = "/run/current-system/sw/bin/custom-cleanNix";
@@ -108,14 +122,18 @@
runtimeInputs = with pkgs; [
git
nixos-rebuild
- matrix-commander-rs
+ curl
libnotify
alejandra
deadnix
+ statix
];
text = ''
- set -e
+ set -ex
+
+ # shellcheck disable=SC1090
+ source "$NTFY_SECRET"
FLAKE_DIR="/home/tomasr/nixos"
FLAKE="$FLAKE_DIR#laptop"
@@ -139,7 +157,7 @@
alejandra "$FLAKE_DIR" # formats the config
echo "--------------------------------------------------------------"
- if sudo /run/current-system/sw/bin/nixos-rebuild switch --flake "$FLAKE" 2> "$ERROR_FILE"; then # use /run/.../bin/ uses the sudoless rule
+ if /run/wrappers/bin/sudo /run/current-system/sw/bin/nixos-rebuild switch --flake "$FLAKE" 2> "$ERROR_FILE"; then # use /run/.../bin/ uses the sudoless rule
if ! git -C "$FLAKE_DIR" diff --quiet HEAD; then
git -C "$FLAKE_DIR" add -A
@@ -148,9 +166,11 @@
notify-send "Nix auto cleanup" "Everything OK"
- matrix-commander-rs --verbose -m "Nix auto cleanup. Everything OK.
@notificationbot_0000" \
- --html \
- -r "\!BXRRokBmEdNOyYdfOF:matrix.org"
+ curl \
+ -u ":$NTFY_TOKEN" \
+ -d "Everything OK" \
+ -H "Title: Laptop Nix auto cleanup" \
+ "$NTFY_SERVER/Alerts"
else
notify-send "Nix auto cleanup" "No changes"
git -C "$FLAKE_DIR" push
@@ -161,9 +181,11 @@
notify-send -u critical "Nix auto cleanup" "FAILED"
- matrix-commander-rs --verbose -m "Nix auto cleanup failed.
Error: $ERROR_MSG
@notificationbot_0000" \
- --html \
- -r "\!BXRRokBmEdNOyYdfOF:matrix.org"
+ curl \
+ -u ":$NTFY_TOKEN" \
+ -d "Nix auto cleanup failed. Error: $ERROR_MSG" \
+ -H "Title: Laptop Nix auto cleanup" \
+ "$NTFY_SERVER/Alerts"
git -C "$FLAKE_DIR" reset --hard "pre-cleanup-$TIME"
fi
@@ -178,14 +200,18 @@
runtimeInputs = with pkgs; [
git
nixos-rebuild
- matrix-commander-rs
+ curl
libnotify
alejandra
deadnix
+ statix
];
text = ''
- set -e
+ set -ex
+
+ # shellcheck disable=SC1090
+ source "$NTFY_SECRET"
FLAKE_DIR="/home/tomasr/nixos"
FLAKE="$FLAKE_DIR#desktop"
@@ -209,7 +235,7 @@
alejandra "$FLAKE_DIR" # formats the config
echo "--------------------------------------------------------------"
- if sudo /run/current-system/sw/bin/nixos-rebuild switch --flake "$FLAKE" 2> "$ERROR_FILE"; then # use /run/.../bin/ uses the sudoless rule
+ if /run/wrappers/bin/sudo /run/current-system/sw/bin/nixos-rebuild switch --flake "$FLAKE" 2> "$ERROR_FILE"; then # use /run/.../bin/ uses the sudoless rule
if ! git -C "$FLAKE_DIR" diff --quiet HEAD; then
git -C "$FLAKE_DIR" add -A
@@ -218,9 +244,11 @@
notify-send "Nix auto cleanup" "Everything OK"
- matrix-commander-rs --verbose -m "Nix auto cleanup. Everything OK.
@notificationbot_0000" \
- --html \
- -r "\!BXRRokBmEdNOyYdfOF:matrix.org"
+ curl \
+ -u ":$NTFY_TOKEN" \
+ -d "Everything OK" \
+ -H "Title: Desktop Nix auto cleanup" \
+ "$NTFY_SERVER/Alerts"
else
notify-send "Nix auto cleanup" "No changes"
git -C "$FLAKE_DIR" push
@@ -231,9 +259,11 @@
notify-send -u critical "Nix auto cleanup" "FAILED"
- matrix-commander-rs --verbose -m "Nix auto cleanup failed.
Error: $ERROR_MSG
@notificationbot_0000" \
- --html \
- -r "\!BXRRokBmEdNOyYdfOF:matrix.org"
+ curl \
+ -u ":$NTFY_TOKEN" \
+ -d "Nix auto cleanup failed. Error: $ERROR_MSG" \
+ -H "Title: Desktop Nix auto cleanup" \
+ "$NTFY_SERVER/Alerts"
git -C "$FLAKE_DIR" reset --hard "pre-cleanup-$TIME"
fi
diff --git a/modules/utilities/autoUpdate.nix b/modules/utilities/autoUpdate.nix
index 3c4fa78..bff8c24 100644
--- a/modules/utilities/autoUpdate.nix
+++ b/modules/utilities/autoUpdate.nix
@@ -1,5 +1,12 @@
{self, ...}: {
- flake.nixosModules.autoUpdate-laptop = {pkgs, ...}: {
+ flake.nixosModules.autoUpdate-laptop = {
+ pkgs,
+ config,
+ ...
+ }: {
+ age.secrets.ntfy = {
+ file = ../../secrets/ntfy.age;
+ };
# Ensure your script is available system-wide
environment.systemPackages = [
self.packages.${pkgs.system}.custom-autoupdate-laptop
@@ -46,7 +53,14 @@
};
## desktop
- flake.nixosModules.autoUpdate-desktop = {pkgs, ...}: {
+ flake.nixosModules.autoUpdate-desktop = {
+ pkgs,
+ config,
+ ...
+ }: {
+ age.secrets.ntfy = {
+ file = ../../secrets/ntfy.age;
+ };
# Ensure your script is available system-wide
environment.systemPackages = [
self.packages.${pkgs.system}.custom-autoupdate-desktop
@@ -103,6 +117,8 @@
];
text = ''
+ # shellcheck disable=SC1090
+ source "$NTFY_SECRET"
set -e
FLAKE_DIR="/home/tomasr/nixos"
@@ -128,9 +144,11 @@
notify-send "Flake autoupdate" "Rebuild OK"
- matrix-commander-rs --verbose -m "Flake rebuild succesfull.
@notificationbot_0000" \
- --html \
- -r "\!BXRRokBmEdNOyYdfOF:matrix.org"
+ curl \
+ -u ":$NTFY_TOKEN" \
+ -d "Laptop Flake rebuild successful" \
+ -H "Title: Flake autoupdate" \
+ "$NTFY_SERVER/Alerts"
else
notify-send "Flake autoupdate" "No changes"
git -C "$FLAKE_DIR" push
@@ -141,9 +159,12 @@
notify-send -u critical "Flake autoupdate" "FAILED"
- matrix-commander-rs --verbose -m "Flake rebuild failed.
Error: $ERROR_MSG
@notificationbot_0000" \
- --html \
- -r "\!BXRRokBmEdNOyYdfOF:matrix.org"
+ curl \
+ -u ":$NTFY_TOKEN" \
+ -d "Laptop Flake rebuild failed. Error: $ERROR_MSG" \
+ -H "Title: Flake autoupdate FAILED" \
+ -H "Priority: urgent" \
+ "$NTFY_SERVER/Alerts"
git -C "$FLAKE_DIR" reset --hard "pre-autoupdate-$TIME"
fi
@@ -189,9 +210,12 @@
notify-send "Flake autoupdate" "Rebuild OK"
- matrix-commander-rs --verbose -m "Flake rebuild succesfull.
@notificationbot_0000" \
- --html \
- -r "\!BXRRokBmEdNOyYdfOF:matrix.org"
+ curl \
+ -u ":$NTFY_TOKEN" \
+ -d "Flake rebuild successful" \
+ -H "Title: Desktop Flake autoupdate" \
+ "$NTFY_SERVER/Alerts"
+
else
notify-send "Flake autoupdate" "No changes"
git -C "$FLAKE_DIR" push
@@ -202,9 +226,12 @@
notify-send -u critical "Flake autoupdate" "FAILED"
- matrix-commander-rs --verbose -m "Flake rebuild failed.
Error: $ERROR_MSG
@notificationbot_0000" \
- --html \
- -r "\!BXRRokBmEdNOyYdfOF:matrix.org"
+ curl \
+ -u ":$NTFY_TOKEN" \
+ -d "Flake rebuild failed. Error: $ERROR_MSG" \
+ -H "Title: Desktop Flake autoupdate FAILED" \
+ -H "Priority: urgent" \
+ "$NTFY_SERVER/Alerts"
git -C "$FLAKE_DIR" reset --hard "pre-autoupdate-$TIME"
fi
diff --git a/modules/utilities/communicationAndNotification.nix b/modules/utilities/communicationAndNotification.nix
index 21506e4..cdffca9 100644
--- a/modules/utilities/communicationAndNotification.nix
+++ b/modules/utilities/communicationAndNotification.nix
@@ -3,44 +3,26 @@
environment.systemPackages = with pkgs; [
libnotify # Library that sends desktop notifications to a notification daemon
socat # Utility for bidirectional data transfer between two independent data channels (used to communicate between hyprland and awww to change wallpapers dinamically)
- matrix-commander-rs # matrix client used to send notifications from scripts to my phone
# battery notifications
self.packages.${pkgs.system}.custom-batterynotify
self.packages.${pkgs.system}.custom-batterywarning
- # checks if matrix-commander-rs is installed and logged in
- self.packages.${pkgs.system}.custom-checkMatrix
self.packages.${pkgs.system}.custom-gitnotify # checks if git is set up
self.packages.${pkgs.system}.custom-checkKdrive # check if kdrive is set up with rclone
zoom-us
];
};
perSystem = {pkgs, ...}: {
- packages.custom-checkMatrix = pkgs.writeShellApplication {
- name = "custom-checkMatrix";
-
- runtimeInputs = with pkgs; [
- matrix-commander-rs
- libnotify
- ];
-
- text = ''
- expected="@totorile1:unredacted.org"
-
- current="$(matrix-commander-rs --whoami | tr -d '\n')"
-
- if [ "$current" != "$expected" ]; then
- notify-send "matrix-commander-rs" \
- "You are not logged in as @totorile1:unredacted.org\nLog:\n$current"
- fi
- '';
- };
packages.custom-gitnotify = pkgs.writeShellApplication {
name = "custom-gitnotify";
runtimeInputs = with pkgs; [
git
libnotify
+ curl
];
text = ''
+ # shellcheck disable=SC1091
+ source /run/agenix/ntfy
+
# Check if git is installed
if ! command -v git >/dev/null 2>&1; then
exit 0
@@ -53,9 +35,10 @@
notify-send \
"Git not configured" \
"Set your identity\n or remove this warning by removing the custom-gitnotify line in\n ~/nixos/modules/applications/hyprland.nix"
- matrix-commander-rs --verbose -m "Git not configured.
Set your identify or remove this warning by removing the custom-gitnotify in ~/nixos/modules/applications/hyprland.nix
@notificationbot_0000" \
- --html \
- -r "\!BXRRokBmEdNOyYdfOF:matrix.org"
+ curl \
+ -u ":$NTFY_TOKEN" \
+ -d "Git not configured" \
+ "$NTFY_SERVER/Alerts"
fi
'';
};
diff --git a/modules/utilities/gitBackup.nix b/modules/utilities/gitBackup.nix
index 09561be..e469833 100644
--- a/modules/utilities/gitBackup.nix
+++ b/modules/utilities/gitBackup.nix
@@ -1,5 +1,12 @@
{self, ...}: {
- flake.nixosModules.gitBackup = {pkgs, ...}: {
+ flake.nixosModules.gitBackup = {
+ pkgs,
+ config,
+ ...
+ }: {
+ age.secrets.ntfy = {
+ file = ../../secrets/ntfy.age;
+ };
environment.systemPackages = [
self.packages.${pkgs.system}.custom-gitBackup
];
@@ -9,6 +16,9 @@
serviceConfig = {
Type = "oneshot";
+ Environment = [
+ "NTFY_SECRET=${config.age.secrets.ntfy.path}"
+ ];
ExecStart = "/run/current-system/sw/bin/custom-gitBackup";
@@ -41,11 +51,14 @@
name = "custom-gitBackup";
runtimeInputs = with pkgs; [
rsync
- matrix-commander-rs
+ curl
libnotify
self.packages.${pkgs.system}.custom-checkKdrive
];
text = ''
+ # shellcheck disable=SC1090
+ source "$NTFY_SECRET"
+
# checks if kdrive is available
custom-checkKdrive
@@ -69,9 +82,11 @@
notify_error() {
local message="$1"
notify-send "Git Backup Failed" "$message"
- matrix-commander-rs --verbose -m "Git Backup Failed: $message
@notificationbot_0000" \
- --html \
- -r "\!BXRRokBmEdNOyYdfOF:matrix.org"
+ curl \
+ -u ":$NTFY_TOKEN" \
+ -d "Git backup failed. Error: $message" \
+ -H "Title: Git Backup" \
+ "$NTFY_SERVER/Alerts"
}
diff --git a/secrets/ntfy.age b/secrets/ntfy.age
new file mode 100644
index 0000000..41bd45f
Binary files /dev/null and b/secrets/ntfy.age differ
diff --git a/secrets/secrets.nix b/secrets/secrets.nix
new file mode 100644
index 0000000..852d9e9
--- /dev/null
+++ b/secrets/secrets.nix
@@ -0,0 +1,9 @@
+let
+ backupAgeKey = "age1y4lhpk7awhjyu42p46ulg5q2c49r2lnwu8tyyk4ejj6jztd64uksfhd670";
+ laptopHostKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJCsewl8ZXXMjRyO20cBIiuW2gA4mGoMkxQ0dcMyNidR root@nixos";
+in {
+ "ntfy.age".publicKeys = [
+ backupAgeKey
+ laptopHostKey
+ ];
+}