diff --git a/README.md b/README.md
index 433ccbb1..fd483a2b 100644
--- a/README.md
+++ b/README.md
@@ -20,8 +20,8 @@
-
-
+
+
diff --git a/docs/TODO.md b/docs/TODO.md
index c68c2c39..1c785af8 100644
--- a/docs/TODO.md
+++ b/docs/TODO.md
@@ -13,6 +13,7 @@ adobe-creative-cloud curl: (18) HTTP/2 stream 1 was reset
- https://github.com/linuxserver/docker-webtop
- https://app.warp.dev/referral/7PMXRV
- https://github.com/chocolatey/boxstarter
+- https://nginxui.com/
# Create the $HOME/opt destination folder
mkdir -p ~/opt
# Download the AppImage inside it
diff --git a/docs/customization/secrets.md b/docs/customization/secrets.md
index a80ea0c2..7041a200 100644
--- a/docs/customization/secrets.md
+++ b/docs/customization/secrets.md
@@ -171,6 +171,7 @@ Unless otherwise specified in the description column, all of the variables in th
| `AWS_ACCESS_KEY_ID` | AWS access key ID (used for storing / retrieving from AWS Secret Manager which is used for headless Xcode installations / developer account authentications) |
| `AWS_DEFAULT_REGION` | Default AWS region to use when region is not passed in via commands (e.g. `us-east-1`) |
| `AWS_SECRET_ACCESS_KEY` | AWS access key secret (used in conjunction with the `AWS_ACCESS_KEY_ID`) |
+| `CELL_PHONE_NUMBER` | Cell phone number you would like to receive [Twilio notifications from via Apprise](https://github.com/caronc/apprise/wiki/Notify_twilio). The number should follow the format of `13332224444` where the 10-digit phone number is prefixed by the country code. |
| `CLOUDFLARE_API_KEY` | CloudFlare administration API key. Used by CloudFlare CLI. |
| `CLOUDFLARE_ACCOUNT_ID` | The CloudFlare account ID |
| `CLOUDFLARE_ORIGIN_CA_KEY` | The CloudFlare origin CA key (currently unused) |
@@ -203,8 +204,11 @@ Unless otherwise specified in the description column, all of the variables in th
| `HISHTORY_USER_SECRET` | User secret for synchronizing entries cataloged by [Hishtory](https://github.com/ddworken/hishtory). |
| `HOARD_API_TOKEN` | The API token for [Hoard]https://github.com/Hyde46/hoard). |
| `HOST` | The hostname of the device. Used for a FQDN that resolves to the device when combined with the \_ `PUBLIC_SERVICES_DOMAIN`. |
+| `IFTTT_WEBHOOK_ID` | Webhook ID from the [Maker webhook on IFTTT](https://ifttt.com/maker_webhooks/settings). This is used to integrate [Apprise with IFTTT integration](https://github.com/caronc/apprise/wiki/Notify_ifttt). |
| `JUMPCLOUD_CONNECT_KEY` | JumpCloud device enrollment key. |
| `KEYID` | Your GPG key ID available on the MIT or Ubuntu servers. During provisioning, the key will be imported and trusted with an elevated trust level. This can only be passed in as an environment variable or be hardcoded into the `home/.chezmoi.yaml.tmpl` file. |
+| `MATRIX_PASSWORD` | Password for user account for matrix.org through [Element](https://app.element.io/). Used to integrate [Matrix chatting with Apprise](https://github.com/caronc/apprise/wiki/Notify_matrix). |
+| `MATRIX_USERNAME` | Username for user account for matrix.org through [Element](https://app.element.io/). Used to integrate [Matrix chatting with Apprise](https://github.com/caronc/apprise/wiki/Notify_matrix). |
| `NETDATA_ROOM` | [Netdata](https://www.netdata.cloud/) Cloud room ID to assign the device to. Requires `NETDATA_TOKEN` to also be defined. |
| `NETDATA_TOKEN` | [Netdata](https://www.netdata.cloud/) Cloud API token to use when enrolling. Requires `NETDATA_ROOM` to also be defined. |
| `NGINX_AMPLIFY_API_KEY` | If NGINX is installed on the system, then this key will be used to join the NGINX Amplify cloud service. |
@@ -219,7 +223,13 @@ Unless otherwise specified in the description column, all of the variables in th
| `PRIMARY_EMAIL` | Your primary e-mail address used in things like the Git config and NPM config. You must pass this as an environment variable or hardcode it into the `home/.chezmoi.yaml.tmpl` file. |
| `PUBLIC_SERVICES_DOMAIN` | The CloudFlare domain that you would like to use for CloudFlare DNS integration features. _Can only be passed in as an environment variable._ |
| `PYPI_TOKEN` | PyPi.org API token stored in `~/.config/shell/private.sh` |
+| `REDDIT_APP_ID` | Application ID for Reddit app created according to the [Apprise integration documentation](https://github.com/caronc/apprise/wiki/Notify_reddit). |
+| `REDDIT_APP_SECRET` | Application secret for Reddit app created according to the [Apprise integration documentation](https://github.com/caronc/apprise/wiki/Notify_reddit). |
+| `REDDIT_PASSWORD` | Password for the Reddit developer account linked to the Reddit app created according to the [Apprise integration documentation](https://github.com/caronc/apprise/wiki/Notify_reddit). |
+| `REDDIT_USERNAME` | Username for the Reddit developer account linked to the Reddit app created according to the [Apprise integration documentation](https://github.com/caronc/apprise/wiki/Notify_reddit). |
| `REPLICATE_API_KEY` | [Replicate API key](https://replicate.com/account/api-tokens) (used for [AgentGPT](https://github.com/reworkd/AgentGPT)) |
+| `RESTIC_PASSWORD` | Password used to encrypt user-level Restic backups (leveraged by `autorestic`). This includes `$HOME` directory backups and application data backups. |
+| `RESTIC_SYSTEM_PASSWORD` | Password used to encrypt system-level Restic backups (leveraged by `autorestic`). This includes Docker volume backups and any other types of backups that might require sudo privileges. |
| `RESTRICTED_ENVIRONMENT` | Set to `true` if you are setting up a device that should not use sudo / administrator privileges. _This can only be specified as an environment variable._ **This feature is a WIP.** Pull requests welcome. |
| `SAMBA_NETBIOS_NAME` | NetBIOS name to use with Samba. Default value is the same value as the `HOSTNAME` variable. _Can only be specified as an environment variable._ |
| `SAMBA_WORKGROUP` | Samba workgroup name. Default value is `BETELGEUSE`. _Can only be specified as an environment variable._ |
@@ -228,6 +238,7 @@ Unless otherwise specified in the description column, all of the variables in th
| `SFTPGO_DEFAULT_ADMIN_PASSWORD` | Password for default admin user that can login to the [SFTPGo](https://github.com/drakkan/sftpgo) web interface. |
| `SFTPGO_DEFAULT_ADMIN_USERNAME` | Username for default admin user that can login to the [SFTPGo](https://github.com/drakkan/sftpgo) web interface. |
| `SLACK_API_TOKEN` | Slack API personal access token that populates `~/.config/slack-term/config` so that you can use Slack from your terminal with [slack-term](https://github.com/jpbruinsslot/slack-term). |
+| `SLACK_BOT_USER_OAUTH_TOKEN` | Slack bot OAuth token. Used by Apprise Slack integration so that user can post to Slack (with support for attachments) from the CLI. |
| `SNAPCRAFT_EMAIL` | Snapcraft.io e-mail address associated with the `SNAPCRAFT_MACAROON` and `SNAPCRAFT_UNBOUND_DISCHARGE` (detailed below). Stored in `~/.config/shell/private.sh` so developer API credentials can be loaded by running `source "~/.config/shell/private.sh"`. \*Can only be included as an environment variable or hardcoded into `home/.chezmoi.yaml.tmpl`. | |
| `SNAPCRAFT_MACAROON` | Snapcraft.io authentication variable stored in `~/.config/shell/private.sh` so developer API keys can be loaded by running `source "~/.config/shell/private.sh"`. |
| `SNAPCRAFT_UNBOUND_DISCHARGE` | Snapcraft.io authentication variable stored in `~/.config/shell/private.sh` so developer API keys can be loaded by running `source "~/.config/shell/private.sh"`. |
@@ -237,6 +248,10 @@ Unless otherwise specified in the description column, all of the variables in th
| `SURGE_LOGIN` | The e-mail address associated with your [surge.sh](https://surge.sh/) account. |
| `SURGE_TOKEN` | The [surge.sh](https://surge.sh/) authentication token acquired by logging in and running `surge token`. |
| `TIMEZONE` | Your timezone in the `America/New_York` format. It should be available in the TZ database. If not passed in as an environment variable, then the device's current timezone will be assumed to be correct. |
+| `TWILIO_ACCOUNT_SID` | The account SID for Twilio which can be acquired on the bottom of the homepage of the [Twilio console](https://console.twilio.com/). Used for [Apprise integration of Twilio](https://github.com/caronc/apprise/wiki/Notify_twilio). |
+| `TWILIO_AUTH_TOKEN` | The Twilio auth token found on the bottom of the homepage of the [Twilio console](https://console.twilio.com/). Used for [Apprise integration of Twilio](https://github.com/caronc/apprise/wiki/Notify_twilio). |
+| `TWILIO_FROM_NUMBER` | The number to send out Twilio messages from. Should be registered in your Twilio account and be in the form `13332224444` with the country code included (e.g. `1` for the US in the sample phone number). |
+| `TWITTER_ACCESS_TOKEN`, `TWITTER_ACCESS_TOKEN_SECRET`, `TWITTER_API_KEY`, `TWITTER_API_KEY_SECRET` | Various secrets you can generate using the Twitter Developer portal. Integrated into Apprise to allow tweeting from the command-line. Apprise provides [details](https://github.com/caronc/apprise/wiki/Notify_twitter). |
| `VAGRANT_CLOUD_TOKEN` | VagrantUp API token stored in `~/.config/shell/private.sh` so developer API keys can be loaded by running `source "~/.config/shell/private.sh"`. |
| `VMWARE_WORKSTATION_LICENSE_KEY` | License key used for pre-registering VMWare Pro or VMWare Fusion |
| `VNC_PASSWORD` | VNC password used by macOS VNC system utility or TigerVNC on Linux. Default if not passed in is `vncpass`. |
diff --git a/home/.chezmoi.yaml.tmpl b/home/.chezmoi.yaml.tmpl
index 5fdab100..ca341462 100644
--- a/home/.chezmoi.yaml.tmpl
+++ b/home/.chezmoi.yaml.tmpl
@@ -137,6 +137,7 @@ gpg:
data:
host:
arch: "{{ .chezmoi.arch }}"
+ autoresticHealthcheckUuid: "AddInFromHealthchecksDashboard"
cloudflare:
teamsOrg: "{{ $cloudflareTeamsOrg }}"
cpu:
@@ -165,6 +166,7 @@ data:
home: "{{ .chezmoi.homeDir }}"
homeParentFolder: "{{ if eq .chezmoi.os "linux" }}/home{{ else if eq .chezmoi.os "darwin" }}/Users{{ else }}C:\Users{{ end }}"
hostname: "{{ $hostname }}"
+ noReplyEmail: no-reply@megabyte.space
samba:
netbiosName: "{{ $sambaNetBiosName }}"
workgroup: "{{ $sambaWorkGroupName }}"
diff --git a/home/.chezmoidata.yaml b/home/.chezmoidata.yaml
index c5b51d62..630622a0 100644
--- a/home/.chezmoidata.yaml
+++ b/home/.chezmoidata.yaml
@@ -25,15 +25,15 @@ docker:
healthchecks:
allowedHosts: '*'
defaultFromEmail: no-reply@megabyte.space
- siteLogoUrl: https://gitlab.com/megabyte-labs/misc/assets/-/raw/master/logo/color3@10x.png
- siteName: Megabyte Labs Healthchecks
+ siteLogoUrl: https://raw.githubusercontent.com/megabyte-labs/install.doctor/master/home/dot_local/etc/branding/black-icon-128x128.png
+ siteName: CombineOS Healthchecks
siteRoot: '/'
portainer:
siteLogoUrl: https://gitlab.com/megabyte-labs/misc/assets/-/raw/master/logo/color3@10x.png
templatesUrl: ''
statping:
description: Uptime monitoring for Megabyte Labs managed web services
- name: Megabyte Labs Uptime Monitoring
+ name: CombineOS Uptime Monitoring
wireguard:
serverUrl: megabyte.space
internalSubnet: 10.93.92.0
@@ -462,6 +462,7 @@ softwareGroups:
- p7zip
- pigz
Communication: &Communication
+ - apprise
- irssi
Communication-Desktop: &Communication-Desktop
- *Communication
@@ -719,6 +720,8 @@ softwareGroups:
Logging: &Logging
- fuego
- papertrail
+ - rsyslog
+ - runitor
- sentry-cli
- unbuffer
Media: &Media
@@ -882,6 +885,7 @@ softwareGroups:
- tailscale
- warp
Orchestration: &Orchestration
+ - dagu
- nomad
- pm2
- robotframework
diff --git a/home/.chezmoiscripts/universal/run_after_01-pre-install.sh.tmpl b/home/.chezmoiscripts/universal/run_after_01-pre-install.sh.tmpl
index 1614f685..cc9d5cc6 100644
--- a/home/.chezmoiscripts/universal/run_after_01-pre-install.sh.tmpl
+++ b/home/.chezmoiscripts/universal/run_after_01-pre-install.sh.tmpl
@@ -132,12 +132,17 @@ applyRootConfig() {
logg warn 'Unable to find root user folder location'
fi
- ### Copy minimal set of profile configuration files
if [ -n "$ROOT_FOLDER" ]; then
+ ### Copy minimal set of profile configuration files
logg info "Copying ~/.bashrc to $ROOT_FOLDER/.bashrc" && sudo cp -f "$HOME/.bashrc" "$ROOT_FOLDER/.bashrc"
logg info "Copying ~/.zshrc to $ROOT_FOLDER/.zshrc" && sudo cp -f "$HOME/.zshrc" "$ROOT_FOLDER/.zshrc"
logg info "Ensuring ~/.config folder exists" && sudo mkdir -p "$ROOT_FOLDER/.config"
logg info "Copying ~/.config/shell to $ROOT_FOLDER/.config/shell" && sudo mkdir -p "$ROOT_FOLDER/.config" && sudo rm -rf "$ROOT_FOLDER/.config/shell" && sudo cp -rf "$HOME/.config/shell" "$ROOT_FOLDER/.config/shell"
+
+ ### Copy Autorestic configurations
+ logg info "Copying ${XDG_CONFIG_HOME:-$HOME/.config}/autorestic/autorestic-system.yml file to $ROOT_FOLDER/.autorestic.yml" && sudo cp -f "${XDG_CONFIG_HOME:-$HOME/.config}/autorestic/autorestic-system.yml" "$ROOT_FOLDER/.autorestic.yml"
+ logg info "Removing ${XDG_CONFIG_HOME:-$HOME/.config}/autorestic/autorestic-system.yml" && sudo rm -f "${XDG_CONFIG_HOME:-$HOME/.config}/autorestic/autorestic-system.yml"
+ logg info "Applying proper permissions to $ROOT_FOLDER/.autorestic.yml" && sudo chmod 600 "$ROOT_FOLDER/.autorestic.yml"
fi
}
@@ -832,10 +837,16 @@ installDockerRclonePlugin() {
# @description
# This script loads crontab jobs that are defined and housed in your Install Doctor fork.
loadCronjobs() {
- logg 'Installing crontab jobs'
- crontab < "${XDG_CONFIG_HOME:-$HOME/.config}/crontab/config" || EXIT_CODE=$?
+ logg info 'Installing user crontab jobs'
+ crontab < "${XDG_CONFIG_HOME:-$HOME/.config}/crontab/config-user" || EXIT_CODE=$?
if [ -n "$EXIT_CODE" ]; then
- logg error 'Failed to load cronjobs'
+ logg error 'Failed to load cronjobs for user'
+ fi
+
+ logg info 'Installing system crontab jobs'
+ sudo crontab < "${XDG_CONFIG_HOME:-$HOME/.config}/crontab/config-system" || EXIT_CODE=$?
+ if [ -n "$EXIT_CODE" ]; then
+ logg error 'Failed to load cronjobs for system'
fi
}
diff --git a/home/.chezmoiscripts/universal/run_before_01-prepare.sh.tmpl b/home/.chezmoiscripts/universal/run_before_01-prepare.sh.tmpl
index e6e53f38..d2c6d63c 100644
--- a/home/.chezmoiscripts/universal/run_before_01-prepare.sh.tmpl
+++ b/home/.chezmoiscripts/universal/run_before_01-prepare.sh.tmpl
@@ -1,3 +1,10 @@
+#!/usr/bin/env bash
+# @file Prepare
+# @brief Ensures commonly used system packages that are common dependencies of other packages are installed
+# @description
+# This script installs required system packages. Each system's required packages are defined in `home/.chezmoitemplates/$DISTRO_ID`,
+# where `$DISTRO_ID` is equal to the Linux distribution ID found in `/etc/os-release`.
+
# @description
# This script pipes environment variables and a logger function to a temporary file that is included by other scripts.
# It is included as a temporary external file to aid in debugging since if the included files were inlined in scripts
diff --git a/home/.chezmoiscripts/universal/run_before_02-homebrew.sh.tmpl b/home/.chezmoiscripts/universal/run_before_02-homebrew.sh.tmpl
index 8cce17c4..b72374de 100644
--- a/home/.chezmoiscripts/universal/run_before_02-homebrew.sh.tmpl
+++ b/home/.chezmoiscripts/universal/run_before_02-homebrew.sh.tmpl
@@ -1,4 +1,3 @@
-{{- if (ne .host.distro.family "windows") -}}
#!/usr/bin/env bash
# @file Homebrew / Xcode Tools Installation
# @brief Ensures Xcode tools are installed on macOS and ensures Homebrew is installed on either Linux or macOS
@@ -171,4 +170,3 @@ fixHomebrewPermissions
if [ -f "$HOME/.viminfo" ]; then
logg info 'Removing ~/.viminfo' && sudo rm -f "$HOME/.vimino"
fi
-{{ end -}}
diff --git a/home/.chezmoitemplates/docker/healthchecks_db_name b/home/.chezmoitemplates/docker/healthchecks_db_name
new file mode 100644
index 00000000..b8a53bca
--- /dev/null
+++ b/home/.chezmoitemplates/docker/healthchecks_db_name
@@ -0,0 +1,7 @@
+-----BEGIN AGE ENCRYPTED FILE-----
+YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBFekx0S0JqbkhtSUpldWRW
+QUFPa21iS2JBYWVqUlpyUW1INThoR0h1NUJzCi9CWmJPNFpQdEhwNzlGMlFtRnkr
+Z3RyVFAwTkdIZ1UrcVRjTmlIc2ZYT1EKLS0tIGxrWCtWS3RVeHkrcUZVZmM4cVo1
+R1VTTk1LUUtZNGZ0MGs3akc0OEtBanMK+kyTXeqIqF4qPwv+Fc9OphknufvRv2B8
+6Jho0+ICC1Bxubwy
+-----END AGE ENCRYPTED FILE-----
\ No newline at end of file
diff --git a/home/.chezmoitemplates/docker/healthchecks_db_password b/home/.chezmoitemplates/docker/healthchecks_db_password
new file mode 100644
index 00000000..e29ff1b4
--- /dev/null
+++ b/home/.chezmoitemplates/docker/healthchecks_db_password
@@ -0,0 +1,8 @@
+-----BEGIN AGE ENCRYPTED FILE-----
+YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBjMkdRVy91R1crTWlDekJi
+VmhXWU9va3JqaGYxVjFnQk9Dck1zVzVZQWlzCjVxc0pLYjJDQmt4ZUl0Y0FUZE9w
+OHZuUHpuRGpNUkpCSFp4djlRWmlVRXMKLS0tICtpL2dpS2lHNHJ3UXkxMS9INmt6
+TStScWFBRTlYWE1OWTNIL1g3eE9hRncKAjplPmFrrLt7oBZ3f+ar4kOTj35vPE72
+icxVzmsyzU4EZaFwA7TZjSWYFHqP6djsWGtoId0l/ljuMJjcMqWpTeQXijzvRQKh
+0Jg9jQ==
+-----END AGE ENCRYPTED FILE-----
\ No newline at end of file
diff --git a/home/.chezmoitemplates/docker/healthchecks_db_user b/home/.chezmoitemplates/docker/healthchecks_db_user
new file mode 100644
index 00000000..8a7fb363
--- /dev/null
+++ b/home/.chezmoitemplates/docker/healthchecks_db_user
@@ -0,0 +1,7 @@
+-----BEGIN AGE ENCRYPTED FILE-----
+YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB6SHBMSVBHWlJTWXo2eTFm
+bnJYa0NYWW42V0VOWE52MDdwK0N3Q2VZMzNjCmVsWk5mQUlNbWhPanpLU04xQmNS
+YlZnVTd5OGNybEUwMFNoZ3NjZWVzTncKLS0tIHFVbFIzV0s3MmY2S3ViRUsxTmI3
+cVpjRjVIMmVLSDJkZ1cwcEZ2SFZGemsKYrXMDabkAh02NX85ZL7U29AGgpaecSir
+2oDXDv/BEdI3vzLivguQmw==
+-----END AGE ENCRYPTED FILE-----
\ No newline at end of file
diff --git a/home/.chezmoitemplates/docker/healthchecks_secret_key b/home/.chezmoitemplates/docker/healthchecks_secret_key
new file mode 100644
index 00000000..93aa05f0
--- /dev/null
+++ b/home/.chezmoitemplates/docker/healthchecks_secret_key
@@ -0,0 +1,9 @@
+-----BEGIN AGE ENCRYPTED FILE-----
+YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvN0Rka3I0b0ZhTHJhUnpL
+NnhFT2pCSHVic3hZOHBXTDBhV3o1SzRPbG0wCitTTlRnVktrSTJramo2WEtBb0Jl
+cHlOZmhiZlo4MGx5R1hMWDg3M3hXQ1UKLS0tIElNbWt3VXd5RU9ZNVVLYStzOS9W
+dFlGWkdPRzFaNzVIQ1ZDbzVQV241aDgKSCr0DeHoJSoGXJXpOBaf7QhTjAaX7V+o
+gjSPxmuiQnd06it4h67xd8hVK83b67x49jGJH3cJMMgzblOKZsjPCju7ENnBeVBi
+zDsvBDQ0OWsS5yEmHdAajnriva/Qd3ToTizux5JiUkONqn5FvZVDmCk+idrSeyQL
+8AHz6fa0ouUg55SENYb1kc3Ja/XmJ1YDHD4=
+-----END AGE ENCRYPTED FILE-----
\ No newline at end of file
diff --git a/home/.chezmoitemplates/docker/healthchecks_sendgrid_api_key b/home/.chezmoitemplates/docker/healthchecks_sendgrid_api_key
new file mode 100644
index 00000000..f40a9b0f
--- /dev/null
+++ b/home/.chezmoitemplates/docker/healthchecks_sendgrid_api_key
@@ -0,0 +1,8 @@
+-----BEGIN AGE ENCRYPTED FILE-----
+YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB3bDQwUCtFN3hmaVlKemlZ
+Y0FwNmRMaHgyYWJxYk5zV0xLSjZlVXUyVG0wClhYdk9MdHFkbGtzZ0h0Ynh2cTRh
+OWwzRDMwYUtZL1VocjFGenZ2djVhNlkKLS0tIGtka1B6QXlQTnRlYkxJUk5OLzNa
+UmtzclBQTWtoWjZydkFJTW12SFFyNzQKc86JTlBUx1wMUEcNrjBl+hNEdXgg9mNe
+yr+EhPOqRvgsT7LePNwWSaOx2L66RIkl36/WADWRXRGchHS0O2cgsIb6P2KfOwd9
+9geM1rwWyk3XfQm3yqMKHO+nv6iLJ4jI2hf4+io=
+-----END AGE ENCRYPTED FILE-----
\ No newline at end of file
diff --git a/home/.chezmoitemplates/docker/healthchecks_slack_client_id b/home/.chezmoitemplates/docker/healthchecks_slack_client_id
new file mode 100644
index 00000000..cf480134
--- /dev/null
+++ b/home/.chezmoitemplates/docker/healthchecks_slack_client_id
@@ -0,0 +1,7 @@
+-----BEGIN AGE ENCRYPTED FILE-----
+YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBCR0N1VjhvWE9PcDB5blJT
+MXBuZ2pIWW9QZDNrSC9iNUd1RStOTk4xdTJ3CkdBUWlaRFoxeW8wVUdhRzhZWFpQ
+UmRmSmttR2c4dmlBQkk5SmNKYVZhMDQKLS0tIFJwdzFqODRyd1lJV3NoeDFaWity
+dXpDMXZTOGx1ODJBb284VUxJb3hPeFUKzAmx6mexxKONr+2uA43AtqhU3NdQwCRX
+frZ4nbux4q5QHsU9hrXdx5OtPFmDYY9EBDkJa1OhVTH/kbo=
+-----END AGE ENCRYPTED FILE-----
\ No newline at end of file
diff --git a/home/.chezmoitemplates/docker/healthchecks_slack_client_secret b/home/.chezmoitemplates/docker/healthchecks_slack_client_secret
new file mode 100644
index 00000000..a4c43b6c
--- /dev/null
+++ b/home/.chezmoitemplates/docker/healthchecks_slack_client_secret
@@ -0,0 +1,7 @@
+-----BEGIN AGE ENCRYPTED FILE-----
+YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAySk50RGJiM01LV0NpSjlV
+M3ZzTXRVbG1FZE5LQXk2U1BTWThOQ0NZaVN3CjhOR2VleEdoNHAwZVBTYWwwZ2xq
+ZGVFMG53U2l4dkVrSWRDTEw5SXBLbEEKLS0tIEQvcWh2Ymk4S28vSk1ubDhFSnha
+cDNmMDUvUk1UUXVCTDJuQUxacmllVkEK4IfrDpJPTFwronieSnmVMhSNK8hdNU/V
+ko2wuWY4T08HrHBSHPKFxI8p2fbHpZxMXhanvNs9WBCxjm2Ia7hWxA==
+-----END AGE ENCRYPTED FILE-----
\ No newline at end of file
diff --git a/home/.chezmoitemplates/docker/healthchecks_superuser_email b/home/.chezmoitemplates/docker/healthchecks_superuser_email
new file mode 100644
index 00000000..53a33cba
--- /dev/null
+++ b/home/.chezmoitemplates/docker/healthchecks_superuser_email
@@ -0,0 +1,7 @@
+-----BEGIN AGE ENCRYPTED FILE-----
+YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBrOThqUUEyUjFEUTBkUElQ
+ZDlkcldTWDZGc2wyaldMbkgvcGdlUTdvMjM4CnEvTGlSZVVYSCt2dWZGb3Y1bWM0
+NStPOS8rcytUWGtFUGczaVNQQUFQY2MKLS0tIFB6OFNJYlEyNTE5alZXeW5TSkpO
+REJ1NFVXSzRTU1RHc3dRSlZWMkdlS1EKqcmK27xpMAMnzLW+JEhQipSll/0vT59q
+XoHH/cBJFknH9QQX1cRvlJh8Pjd7+bHaSZRnog==
+-----END AGE ENCRYPTED FILE-----
\ No newline at end of file
diff --git a/home/.chezmoitemplates/docker/healthchecks_superuser_password b/home/.chezmoitemplates/docker/healthchecks_superuser_password
new file mode 100644
index 00000000..20df6232
--- /dev/null
+++ b/home/.chezmoitemplates/docker/healthchecks_superuser_password
@@ -0,0 +1,7 @@
+-----BEGIN AGE ENCRYPTED FILE-----
+YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB5bFJPVmY3RUtMUUk0U2FJ
+SEJMWmZyVGNtK2YrWnl3QjJQV09UK3N6TmdZCmhDS2FaZ09FcnRVZStCSGF0UHoz
+K2MvcVpQUkpRVWFiNDlJc0dxZ2RjcXMKLS0tIHAyajRmeldoSFZQdWVRajZuRG5l
+YWJEYUF4eUdtWWhmTExSREZqV2VqcnMKAULLETSutkcRJzewCsg/1FTskyNHao22
+H4TYScxA+Fj2LwsyzHMJ7/VHAHbvgA==
+-----END AGE ENCRYPTED FILE-----
\ No newline at end of file
diff --git a/home/.chezmoitemplates/files/apprise-custom b/home/.chezmoitemplates/files/apprise-custom
new file mode 100644
index 00000000..50c83601
--- /dev/null
+++ b/home/.chezmoitemplates/files/apprise-custom
@@ -0,0 +1,34 @@
+-----BEGIN AGE ENCRYPTED FILE-----
+YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBXL0hNNUNTUmhSK0xkMUVS
+a2lOUkREeXRuMkxUSTZHSHVQMHViT1Vhb3gwClB1Vjh6TVNiUGZOa1ViWjMwNHR6
+Q01Scys4UVMzVUhMSTZHYWdMWFNQZzAKLS0tIE4rVnowSE5Zakt5M1AxYVVhRVdI
+eHhoRGNiKzZiQ3hRblZQTkpMY28yNWMKx2RQ/t17kNrlfipe9EkGzh2mP5YarEUc
+haLGfJ+9aTWDqPTuCqA0F/WFUdi3WgZ5T9Ku5PMC/71TNyBEucjTu+99NhwUFad7
+Fs9iRdsvx2ridXTc6czRSjvY3WwAMQofI6y7Sw4zVV8mQIWh/t4AdCrIzlgG+tVx
+COWqmO9VC1+S2Are1SBXoR4D9oMTUvoGpolBr0yzJtMDlE17Z+qwqARDXxJxdlnd
+nmZr6EZNlWKpdM11+koJ9f1pHvKDM0W+u8j41hTwkhj85GAtCxRBH+ovP4jz07li
+y+YqdJEykQOmbvhDNsPoi2j90NUS9zf/0ts9s4P4tF5q45BFJwb+RswIHRfh5zz9
+5/eb0BBQDz10WoQcKzzjkAeXa5YvOOM1IVA8KY/8/BIJ6hr2HPnJmzNqlO1IbvI0
+WgwGBVgGQmILveTn/cpQjdFlzpezJ+f70ltZ8IVfA9HUuMkaFjr3W9+wAGeeWpu7
+fpQuXdhHvJMi9lOLlo9sRPDtFWSJ8mS2lG5mJRzEjTdn5M7m7N72wKJeID9ECHM3
+zRdRvZOJ/uZeS4XAVHS+EGT2YX8eMaKHXv+r+uBiNJ3WIRV5q9H4qs6XA4EFxNC8
+sI4LkEcKyct+UTxvGtG4bG/s2kuj+U2Tf37jtzo5d7UV/X8B4ZAGyYXo0AX7iyLG
+EWZ469zc8JCmhSQ3MH3lLd6nT9V0G+eyQmkH+loYPOCsavggv38Up7R1J1NY9/fW
+pX/+sWoTj6dnS6d5RUGtfyRVSvb/yL1CxpDmE7fi8WZMrBQCwXyhfiTWLl5hX4mV
+EnfMA9Q10XM1zOy0YSrmc0H37rOaGBL8sqKat5FWvfgG2XIHgvgdQ5mdSvVSj0t4
+C9A7f1E8QJSESn5SxSwSw2VH3qbEx4H2qx8F3n8jdTMEhaX8k0XLBmn0qeXTyT0q
+k2bmMRrTxLtVn/KMMdD6D6vboZSmnP7sczroGSHZ7rdWbhoHeVQV9TXBNf3op02p
+HQd2nk2OcNHwlpizABtglFE/4PwJ5qoisK+be11OgBDCXVTFv1v8IxAMPLd+PPuO
+0vKLkwaFqBqvZfkEIr7hTjYouVlkRlLvpfTPROXeFfJdMf3ITnk0LLpS5FW9ZyhV
+8RvDFfAlAeMC8aL1+BvMRDHRJ28mwaQiG4xEWA+NcQeVRcDyfzzwQh0Vm3hNvKcW
+0dI8Qjr2kZX+f9niTQj3+h72fylhItCyMEJ556G5x8O8fra/21xLXf7IQzhd6hn8
+6V4tuFB2RrLS1HqYcK/Cy/E0FlSQ4LrTghRTq3b8aEQoaofBJgdimorVclDGyDh/
+pjaWvoVVbHi/VC3KdwuOCfcSL0rKn6Cwy+y0cPFSX9aMs2dxu5mIK5E8hQKEM77M
+EeQjehj72PRrbKOVRYJJvtegVCRimDIxz5FMz60WEGD0jPrffPV/m7Hjvipsxlke
+o4HPDZ3tEMZVW9FftaNnKGqeU76FOgByRh4w+uTeMfo0lXm6yYYrQ1WyHa4+V6F7
+dibkHMDy7n4r+nUZk2GR2DWHR0kqJV9BVSVBTz465F/qvPu1Z/amfxhrhUKywI+J
+y1P01cjnke4tNQIx7RheAYxUxDRR/A65y/VVWFCKLhfnnJpqhGwnXetjUHmbxgms
+Z5K0XJojJ1DG4F9mxUUQpg+2jRPekopmq9YddMW/nSiCjdr/ZjJmIrlX/YIgCk1N
+05Ydb1T2NlC8HQhdGo1X647tqNsfYtB+XXCUYkIeEzkTluy9J62XN82cCIjbBP2g
+T2RN9GgOUjFzAsw2LiRJWo22KUVFjcCclyLkww==
+-----END AGE ENCRYPTED FILE-----
\ No newline at end of file
diff --git a/home/.chezmoitemplates/secrets/CELL_PHONE_NUMBER b/home/.chezmoitemplates/secrets/CELL_PHONE_NUMBER
new file mode 100644
index 00000000..ce3ed4ba
--- /dev/null
+++ b/home/.chezmoitemplates/secrets/CELL_PHONE_NUMBER
@@ -0,0 +1,7 @@
+-----BEGIN AGE ENCRYPTED FILE-----
+YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBPTDRzSHB4eTFnV2E2WU8v
+Y0I1bFhjTzI0OWcvRVJ6N08zYmRsbWlwZVhzCnhoNmpoSFNUbzI5M2ExNVdPM1h6
+Q2ZTRTNxSjZycHMzSjQzNlNqSGJzR1EKLS0tIDN1U29NT1lkT2JBNnN2VndiK3Jz
+clRkT3RJSnByeHFGbUVOSGFsVWR2cmsKa6RVel4xTm7C+DfmsLl1JR3RFRr4AYBy
+1HF0EGUH9N3Jz4D0R30rI5EteA==
+-----END AGE ENCRYPTED FILE-----
\ No newline at end of file
diff --git a/home/.chezmoitemplates/secrets/GMAIL_PASSWORD b/home/.chezmoitemplates/secrets/GMAIL_PASSWORD
new file mode 100644
index 00000000..ace66628
--- /dev/null
+++ b/home/.chezmoitemplates/secrets/GMAIL_PASSWORD
@@ -0,0 +1,7 @@
+-----BEGIN AGE ENCRYPTED FILE-----
+YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA3dDlwKytlbUZSWjE0MTJn
+QXNGSXE5cnFEMXZkZHFscnJGT2RIelA2YnhjCmpISXljSDdua2pTNmRQUk16MmEx
+eHJLZkpjMnU3WklJd0lEMHVlVlU3NWMKLS0tIGdib1lGMlZtVE4xQ2ZIZi9iS1d1
+UlBoRTRrUVpnYm1Zd3ZzbDRHdkh0MUEKaklKnKjGhUo+hvJhalpKMm3VxhYkxll3
+6sk6KRuLGFs4vZDm2eomgZs0cnUTjZY0
+-----END AGE ENCRYPTED FILE-----
\ No newline at end of file
diff --git a/home/.chezmoitemplates/secrets/IFTTT_WEBHOOK_ID b/home/.chezmoitemplates/secrets/IFTTT_WEBHOOK_ID
new file mode 100644
index 00000000..a3f20c79
--- /dev/null
+++ b/home/.chezmoitemplates/secrets/IFTTT_WEBHOOK_ID
@@ -0,0 +1,8 @@
+-----BEGIN AGE ENCRYPTED FILE-----
+YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBHUDhKYUJZOCt5OXFjZDVZ
+NWJjdllHUlBkNEk1Q0dpdGtJYW0vdi9hOFM0CkMrVFVjS2lRdHgrLzVFZHByMVFL
+WXRyNFZFaDNsNnRtWlVwREJueWdHbTQKLS0tIHJTdHJqSVlMM3g4M05hM0VjQkc3
+MTUrdFRFS1FlSjBMVmlYamc5QjFkd0UK+yLbeYrnauc25H7yJm3ZBtzOVp2PMuxA
+YvcxRJA+zsARG5ch79l26tXGiWVz8QSzhr/GURpg8Y+Yl5xSRxXq7Lxc7PmOWDw9
+xEuE
+-----END AGE ENCRYPTED FILE-----
\ No newline at end of file
diff --git a/home/.chezmoitemplates/secrets/MATRIX_PASSWORD b/home/.chezmoitemplates/secrets/MATRIX_PASSWORD
new file mode 100644
index 00000000..1f0317ca
--- /dev/null
+++ b/home/.chezmoitemplates/secrets/MATRIX_PASSWORD
@@ -0,0 +1,7 @@
+-----BEGIN AGE ENCRYPTED FILE-----
+YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB4V0JURmtMRVVvQnhpVEtN
+RGRJeFlHMjFpOVZscTluUmpXbXFQNmlvMkVVCjQ2TGpnYjdHRjNhMTg2dUJQaHBO
+VDhOWk40THZZME9yV2dzU1BmblhsV28KLS0tIGVPTUxHWC9iMmgrUHFDSitNT1Jy
+ZVdGM3BheWlLQWNNSGFJMEoyTlMvU0EKE3tWM+XaBySV8JwyXTpzJz6F4pBRfq0T
+PAp1VDDe8ns1r+xm/yhzEWyqSgTLJQPFSA==
+-----END AGE ENCRYPTED FILE-----
\ No newline at end of file
diff --git a/home/.chezmoitemplates/secrets/MATRIX_USERNAME b/home/.chezmoitemplates/secrets/MATRIX_USERNAME
new file mode 100644
index 00000000..7bdf1105
--- /dev/null
+++ b/home/.chezmoitemplates/secrets/MATRIX_USERNAME
@@ -0,0 +1,7 @@
+-----BEGIN AGE ENCRYPTED FILE-----
+YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBSZlAzd0g2NkhuTzdESVJR
+Ly9BZHZVaWVjVFA5SmlzdGMrRmI2NXdPU3hZCk0vLzFrTDlqK2FiY0haMmY3d1pY
+b1kwNTA1czgvMDZ0d1gwZEtBWC9TQlEKLS0tIExpN3JENXlNWXlqRmMxK2NYcTFn
+dm1KK25lZHE4MjZoQWk4QXFndUNRU28KHoUpywjuPxX5foF7F6qy0Ve6LNKA5/SQ
+TDEDz8i5CDB8gu2GijTFoNhxQEOCGtoF
+-----END AGE ENCRYPTED FILE-----
\ No newline at end of file
diff --git a/home/.chezmoitemplates/secrets/REDDIT_APP_ID b/home/.chezmoitemplates/secrets/REDDIT_APP_ID
new file mode 100644
index 00000000..156ba7df
--- /dev/null
+++ b/home/.chezmoitemplates/secrets/REDDIT_APP_ID
@@ -0,0 +1,7 @@
+-----BEGIN AGE ENCRYPTED FILE-----
+YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAvZTc4cGNyRDZCQ2hPdmF1
+dUxzQmp0ZElycFdKVXliSTNiL1RRTHBYK0VjClhQdm1lOFBIK2xPYWg4L3JPZTlI
+aTlxaEZMOFVRSE13U3lMTjFVUXlxa28KLS0tIE96RHFhZ0lLMWg5b004NGFUZXNZ
+YWVEUE9GQU9jNWkyTDl0dURhSWlNYW8KZYCJ9ABfOQb4p5MoMT0RzXq3/BEqcL9f
+iZ0L5U3qol8IHI+9+GbZrLGWC/L0y/8IbmZ8oKs6
+-----END AGE ENCRYPTED FILE-----
\ No newline at end of file
diff --git a/home/.chezmoitemplates/secrets/REDDIT_APP_SECRET b/home/.chezmoitemplates/secrets/REDDIT_APP_SECRET
new file mode 100644
index 00000000..3befd26f
--- /dev/null
+++ b/home/.chezmoitemplates/secrets/REDDIT_APP_SECRET
@@ -0,0 +1,7 @@
+-----BEGIN AGE ENCRYPTED FILE-----
+YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBiSGlpQzRwTWMxVXhxMHRH
+ZWFHeDJZbExZUlJUaGRiVHl4NGVsTHdvd0NJCm11TWREYWdsOGRwTlJKeGlCdWE5
+STZ2UlhjRWtUYnZkdmdUeDk1cmpKWXMKLS0tIE8vekh6YTVhRVZDM203bXBwVmVS
+Q0JsRXY3SDV3RUw4RTdHcFE2WFhWSk0KEm2bieswbpQG9fDMn85azz/cHV6fK//R
+qjoViUBBqKyuZM4ci8GfaHew15MszDA0lVTOoEyjpNf1dSp/+ORc
+-----END AGE ENCRYPTED FILE-----
\ No newline at end of file
diff --git a/home/.chezmoitemplates/secrets/REDDIT_PASSWORD b/home/.chezmoitemplates/secrets/REDDIT_PASSWORD
new file mode 100644
index 00000000..cf87130a
--- /dev/null
+++ b/home/.chezmoitemplates/secrets/REDDIT_PASSWORD
@@ -0,0 +1,7 @@
+-----BEGIN AGE ENCRYPTED FILE-----
+YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB4YkMzS1p5RUFZV0VGZmJ3
+YVlxVWNGdytjTHRUYXBvbFZvM2crS2d0RVhjCjdUWmU1ZHNObnhjUFVrTHBBbWkz
+M0NWc01tanRKRVl3VEFJeDZnUUFxc28KLS0tIEhQTW55ZEEvdXN5RmhocGVKL2Rp
+dy9HTjVqYUhHWEhiZlVBbEVUQWE1Mk0KnGRbcxe+Spdyo63ZZQ8JMNp0PFDqb/wy
+H8V31CsS4V4YzH4AvDWh1a/hF8+/uqEXvg==
+-----END AGE ENCRYPTED FILE-----
\ No newline at end of file
diff --git a/home/.chezmoitemplates/secrets/REDDIT_USERNAME b/home/.chezmoitemplates/secrets/REDDIT_USERNAME
new file mode 100644
index 00000000..7830a388
--- /dev/null
+++ b/home/.chezmoitemplates/secrets/REDDIT_USERNAME
@@ -0,0 +1,7 @@
+-----BEGIN AGE ENCRYPTED FILE-----
+YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBwTGMzWUxheDRKOEVRWUVs
+LzRtZzdscFVpUTdqWVg5TE1nQkZmMXlNMmprCmNCQm5keHA3VnV4TGtZVGxuVEI3
+dDJjclA3RmQ4WnVSUWkxN3lrcTNiOEEKLS0tIExjT0cwMVZJOUZSKzN4RHlMNXR1
+UGFaK2lZaVNHMFgwRWxUUXc1ZEk1RVEKl3POH0I3o+xEaFsiPWW0Coo+hbtCOcjT
+vBrafnhG0opqW53cMer4P0D6Y3U=
+-----END AGE ENCRYPTED FILE-----
\ No newline at end of file
diff --git a/home/.chezmoitemplates/secrets/RESTIC_PASSWORD b/home/.chezmoitemplates/secrets/RESTIC_PASSWORD
new file mode 100644
index 00000000..ca293057
--- /dev/null
+++ b/home/.chezmoitemplates/secrets/RESTIC_PASSWORD
@@ -0,0 +1,7 @@
+-----BEGIN AGE ENCRYPTED FILE-----
+YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBmWGpvWXp3aXlvTVpFSkhr
+YkM4UWNpMkk0LytEQXBkZ2NQMVRkZmxXS0drCktWYTc5M1ZLSzZzV3ZkQlFWN3Q4
+ekZ6ZmZHR3h0N2x5alJobmE4cWVaNlUKLS0tIFljODhFSi9RV0piNU5ub09ITi80
+SmNVTjZBN1NEU2EyZnZyZGhLVVUvNkEK+bYhZ6OulkCFT1uR6nCp6uvlKwoxT0xu
+kavzeRXrGUPGpCiBvRUvrk7in9iW7A==
+-----END AGE ENCRYPTED FILE-----
\ No newline at end of file
diff --git a/home/.chezmoitemplates/secrets/RESTIC_SYSTEM_PASSWORD b/home/.chezmoitemplates/secrets/RESTIC_SYSTEM_PASSWORD
new file mode 100644
index 00000000..2336397c
--- /dev/null
+++ b/home/.chezmoitemplates/secrets/RESTIC_SYSTEM_PASSWORD
@@ -0,0 +1,7 @@
+-----BEGIN AGE ENCRYPTED FILE-----
+YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYNmJ6dGZwU1U0dE9RSDQr
+dUphTTRNejE1ZGp2dEdXSmRSOGxmdDZESWxvCkowYnczZEwrMzZJeDV2Q21kWDBM
+YTdCY3dMQy9FZTc0dERSOVBEY3gwdkkKLS0tIFQ3WTE5TzlVbFNpK3VCQkRiWk1I
+WlNGeWZMeVNOMWQwR2RtZ2NDZkYvUXcKtmvvZzqqVtbAIindRUBOzNqIPYHHde6p
+MKSyiRANtAxWgQOtuwc/hKx4XLPlxA==
+-----END AGE ENCRYPTED FILE-----
\ No newline at end of file
diff --git a/home/.chezmoitemplates/secrets/SLACK_BOT_USER_OAUTH_TOKEN b/home/.chezmoitemplates/secrets/SLACK_BOT_USER_OAUTH_TOKEN
new file mode 100644
index 00000000..81e16c08
--- /dev/null
+++ b/home/.chezmoitemplates/secrets/SLACK_BOT_USER_OAUTH_TOKEN
@@ -0,0 +1,8 @@
+-----BEGIN AGE ENCRYPTED FILE-----
+YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBrelZWL0l3bGE3eDB0NUR6
+bW5wM25SL25EOWxTc3JhbHZOL0UrVUF6ZkE0ClB0S3dvdWFaOFlRZWczOEcrZmND
+VWEvUzV0ci8xWVl0NUJWK1ViNHA3M2sKLS0tIDVXUDdyNlc1TjVxSEVqM0d2N1VN
+UitQMWJzdkVMdlpha2gvdUY2dFpraTgK2om7IQr4V1ggJH7Ls+H+k1zQ93QvEnvc
+V6je1Y4w09FKKLb6smK4jKj6ZFZ7f/RgvGyxkcpvJqAGA7pUyAGRh8Bu9cviFexE
+lxcfxLBgVlVPHUQUA+jcl50=
+-----END AGE ENCRYPTED FILE-----
\ No newline at end of file
diff --git a/home/.chezmoitemplates/secrets/TWILIO_ACCOUNT_SID b/home/.chezmoitemplates/secrets/TWILIO_ACCOUNT_SID
new file mode 100644
index 00000000..49499337
--- /dev/null
+++ b/home/.chezmoitemplates/secrets/TWILIO_ACCOUNT_SID
@@ -0,0 +1,7 @@
+-----BEGIN AGE ENCRYPTED FILE-----
+YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBEMFpBa3dseXhISTdKR0ZN
+Z21RQ3NLV1lSRW8wVzlSMmhIZ3lpY3JRVnkwCk1IdmNERlcyWVV6MXJhV29MWWtU
+N1cybzg3Q0JVTC9oMUV1YTFqL2djZ1EKLS0tIEErZm5KTkJOZmFqWXNoVDVhYVY5
+MWNiMEp6aG9FdU5rMWJQZUw1eDBLM1UKfa30TyUR2HmpczeYILq8MWWi2ahDpuJ9
+IQSLbfV/UVWVFJXwZu3Mb/ejm1MTIBddjHQ5OL/ih7v9ui9YF1LEPRhs
+-----END AGE ENCRYPTED FILE-----
\ No newline at end of file
diff --git a/home/.chezmoitemplates/secrets/TWILIO_AUTH_TOKEN b/home/.chezmoitemplates/secrets/TWILIO_AUTH_TOKEN
new file mode 100644
index 00000000..97c51d89
--- /dev/null
+++ b/home/.chezmoitemplates/secrets/TWILIO_AUTH_TOKEN
@@ -0,0 +1,7 @@
+-----BEGIN AGE ENCRYPTED FILE-----
+YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBCSWp0cmlkU3RLbTZ0SXJ2
+MVNneGtTRlptVlVqeTZWSFcxZTlxT1V5cncwCmpKZjBlL3k2clVzSnY3QnBzRmtk
+b2hBMGIvWE5CM0d4YjBoUFNmWmJubmcKLS0tIE14MjI5aTFGdTVJRmdEMFlNbExn
+R0R0aEw3MWdnUWJJN1pQVzlwQmdTazAKtbAuEbU1/iZA7taqVgA4LUA2V2dZzGHD
+/FrljRaDQm9yrnS52Q5/m8+4uT+6xJI8ZU+8Hu4u1gtv7v8JFiZCpg==
+-----END AGE ENCRYPTED FILE-----
\ No newline at end of file
diff --git a/home/.chezmoitemplates/secrets/TWILIO_FROM_NUMBER b/home/.chezmoitemplates/secrets/TWILIO_FROM_NUMBER
new file mode 100644
index 00000000..c05db946
--- /dev/null
+++ b/home/.chezmoitemplates/secrets/TWILIO_FROM_NUMBER
@@ -0,0 +1,7 @@
+-----BEGIN AGE ENCRYPTED FILE-----
+YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBHckxIemV1bUNhbkxKK2Zl
+bXQxRENjVEYyR3lIcS93Q1RIV3dQOXJlL1dBCmxkVG13UHF4cS9uaU1QcHl3MjB0
+U2hLUDZMeGQ3cS9NZnBHQWZVZGJ3aFUKLS0tIDBGejhsclZlUUtxSmNNclAyeTIz
+dHNiR0l4NlE4VHRkQTMzcS9RditXcUUKGuxENmh8UAAaz9W43p8kxJ8alJbTPXLG
+3fQGzdbva6hvfAAFbpZA9tdYlQ==
+-----END AGE ENCRYPTED FILE-----
\ No newline at end of file
diff --git a/home/.chezmoitemplates/secrets/TWITTER_ACCESS_TOKEN b/home/.chezmoitemplates/secrets/TWITTER_ACCESS_TOKEN
new file mode 100644
index 00000000..82612c14
--- /dev/null
+++ b/home/.chezmoitemplates/secrets/TWITTER_ACCESS_TOKEN
@@ -0,0 +1,8 @@
+-----BEGIN AGE ENCRYPTED FILE-----
+YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBzTGFCZ0QwTFJRcUhFc2wx
+ZWJxR2t2S21wUlI1TmhFZ3R0dHJGbGRoaUdFCm9IQnIwaGkrZE9CUEVjUklFTzJB
+ZzVTY0xPT1FwKy9hRkdDQjM4Qzd3b1UKLS0tIEdkL0xSd2UyUXkyR2JMclBtV1VB
+WXF3cjVCNjBiTmh2N05aSzZ6Tlc2eVUKZlVovnodDQlnYfM7KdQcmwz+CiKgP+KB
+jNbuIB9nAcM1Yck7+2mERWIgyT7/ETx+8mF54W6b17mSN6fxS3p0vaOepMd3H72d
+ozuPIBUZis9h5w==
+-----END AGE ENCRYPTED FILE-----
\ No newline at end of file
diff --git a/home/.chezmoitemplates/secrets/TWITTER_ACCESS_TOKEN_SECRET b/home/.chezmoitemplates/secrets/TWITTER_ACCESS_TOKEN_SECRET
new file mode 100644
index 00000000..2b8dde90
--- /dev/null
+++ b/home/.chezmoitemplates/secrets/TWITTER_ACCESS_TOKEN_SECRET
@@ -0,0 +1,8 @@
+-----BEGIN AGE ENCRYPTED FILE-----
+YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBzS0dYVjBQcmswS3pEcDZS
+eHc2SkpNNWFZZnpnVEVTc1hOQUxFOHZUL3djCkVHZmZaUkxUYVVoYnVHbHgwT0hv
+VXJGWEYwaGNQRjB5ODlXZy9VdkcxRFEKLS0tIHcyNko0V3dMOTF4K3BtUXlEcVlT
+V2pORHBEUWgxU0x4U1dZMXAvaVAxVWMKHst99kXcZkum3O4fve5xcwZe1Z46gGhM
+fdieq8+35iz0zrjdoaFRoKiDizbvQYr8czukq3wv1fX908xvEtTMvlOyr9v53rNI
+Qwr7Oq8=
+-----END AGE ENCRYPTED FILE-----
\ No newline at end of file
diff --git a/home/.chezmoitemplates/secrets/TWITTER_API_KEY b/home/.chezmoitemplates/secrets/TWITTER_API_KEY
new file mode 100644
index 00000000..2beda3f6
--- /dev/null
+++ b/home/.chezmoitemplates/secrets/TWITTER_API_KEY
@@ -0,0 +1,7 @@
+-----BEGIN AGE ENCRYPTED FILE-----
+YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYejFwYzdLZExRVFk2dTVW
+OXZSS0FLaTdpWW9oT0dhVDRyOW0rc0U2T1VFClg2bkpmN0ZnT2JiQjl0MEFidXVv
+Z3J6MG8yYnljMGZuL2pJWUlXL0RzUTgKLS0tIEVmbEdZTEVOd1J5L0dNbk95TUZM
+dS9oMXRKb0M5bHErY3lLSnp4Nnd4Y0EK8ZZZOUbKShL0zD2mZH4tmdSgZjQkbmhL
+BTZuqb0oyXVmRJveHs3tK1Nb2Nzbd50bqaB6fFSIjAT1
+-----END AGE ENCRYPTED FILE-----
\ No newline at end of file
diff --git a/home/.chezmoitemplates/secrets/TWITTER_API_KEY_SECRET b/home/.chezmoitemplates/secrets/TWITTER_API_KEY_SECRET
new file mode 100644
index 00000000..39dbcc59
--- /dev/null
+++ b/home/.chezmoitemplates/secrets/TWITTER_API_KEY_SECRET
@@ -0,0 +1,8 @@
+-----BEGIN AGE ENCRYPTED FILE-----
+YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBhTjFYOEtQUWV2VFNvZHJi
+dXVncmFzNExFUFNvSXZ1YWhyM2VDeHF0OXljClpMM3ZwSnJXTnd5cy9CanFBSkph
+S1lOS2x4dUJESFVlRUZZcUsvN1Z1d1kKLS0tIHpmb0kvT0tUMXBJcnVBT0ZSSUdj
+eXF0U1JQZU1iNWVPQmZUNjFTdmM3TVEKmAHM+qRlaynlvlbmkLYM/+MOtzW1xRoV
+EwwyxdTUVSOcCsQ/64mPhBCKHE3cOeWm501B/cb+9Nl5yAsiuKqHCafo99JCZdhd
+smrFB76MXqfyIw==
+-----END AGE ENCRYPTED FILE-----
\ No newline at end of file
diff --git a/home/dot_config/apprise/apprise.yml.tmpl b/home/dot_config/apprise/apprise.yml.tmpl
new file mode 100644
index 00000000..684f86e1
--- /dev/null
+++ b/home/dot_config/apprise/apprise.yml.tmpl
@@ -0,0 +1,190 @@
+---
+version: 1
+
+{{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "files" "apprise-custom")) -}}
+include:
+ - custom.yml
+{{ end }}
+
+# Define an Asset object if you wish (Optional)
+# asset:
+# app_id: AppriseTest
+# app_desc: Apprise Test Notifications
+# app_url: http://nuxref.com
+
+groups:
+ - chat: matrix
+ - developer: slack
+ - social: reddit, twitter
+ - owner: sendgrid, twilio, rsyslog, system
+
+tag: all
+
+urls:
+ {{- $gmailAppPassword := (default "" (env "GMAIL_PASSWORD")) -}}
+ {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "GMAIL_PASSWORD")) -}}
+ {{- $gmailAppPassword = includeTemplate "secrets/GMAIL_PASSWORD" | decrypt | trim -}}
+ {{- end -}}
+ {{- if ne $gmailAppPassword "" -}}
+ ### E-mail
+ # Source: https://github.com/caronc/apprise/wiki/Notify_email
+ # Sends an e-mail with GMail SMTP using GMail username provided in .chezmoi.yaml.tmpl and uses `GMAIL_PASSWORD` (which can be an app password instead of your normal password)
+ - mailto://{{ .user.gmail.username }}:{{- $gmailAppPassword -}}@gmail.com:587?smtp=smtp.gmail.com&from={{ .user.gmail.username }}:
+ - to: "{{ .user.email }}"
+ tag: email, gmail
+ {{ end }}
+
+ {{- $iftttWebhookId := (default "" (env "IFTTT_WEBHOOK_ID")) -}}
+ {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "IFTTT_WEBHOOK_ID")) -}}
+ {{- $iftttWebhookId = includeTemplate "secrets/IFTTT_WEBHOOK_ID" | decrypt | trim -}}
+ {{- end -}}
+ {{- if ne $iftttWebhookId "" -}}
+ ### IFTTT
+ # Source: https://github.com/caronc/apprise/wiki/Notify_ifttt
+ # Triggers an IFTTT webhook
+ - ifttt://{{- $iftttWebhookId -}}:
+ - tag: ifttt
+ {{ end }}
+
+ {{- $matrixPassword := (default "" (env "MATRIX_PASSWORD")) -}}
+ {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "MATRIX_PASSWORD")) -}}
+ {{- $matrixPassword = includeTemplate "secrets/MATRIX_PASSWORD" | decrypt | trim -}}
+ {{- end -}}
+ {{- $matrixUsername := (default "" (env "MATRIX_USERNAME")) -}}
+ {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "MATRIX_USERNAME")) -}}
+ {{- $matrixUsername = includeTemplate "secrets/MATRIX_USERNAME" | decrypt | trim -}}
+ {{- end -}}
+ {{- if and (ne $matrixPassword "") (ne $matrixUsername "") -}}
+ ### Matrix
+ # Source: https://github.com/caronc/apprise/wiki/Notify_matrix
+ # https://app.element.io/#/room/#megabyte.space:matrix.org
+ # Posts a message in a Matrix chatroom
+ - matrix://{{- $matrixUsername -}}:{{- $matrixPassword -}}@matrix.org/#megabyte.space:
+ - tag: chat, matrix, megabyte-labs
+ # https://app.element.io/#/room/#install.doctor:matrix.org
+ - matrix://{{- $matrixUsername -}}:{{- $matrixPassword -}}@matrix.org/#install.doctor:
+ - tag: chat, matrix, install-doctor
+ {{ end }}
+
+ ### Microsoft Teams
+ # Source: https://github.com/caronc/apprise/wiki/Notify_msteams
+ # Note: Microsoft Teams currently requires paid subscriptions of Office 365 for a custom organization
+
+ {{- $redditAppId := (default "" (env "REDDIT_APP_ID")) -}}
+ {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "REDDIT_APP_ID")) -}}
+ {{- $redditAppId = includeTemplate "secrets/REDDIT_APP_ID" | decrypt | trim -}}
+ {{- end -}}
+ {{- $redditAppSecret := (default "" (env "REDDIT_APP_SECRET")) -}}
+ {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "REDDIT_APP_SECRET")) -}}
+ {{- $redditAppSecret = includeTemplate "secrets/REDDIT_APP_SECRET" | decrypt | trim -}}
+ {{- end -}}
+ {{- $redditPassword := (default "" (env "REDDIT_PASSWORD")) -}}
+ {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "REDDIT_PASSWORD")) -}}
+ {{- $redditPassword = includeTemplate "secrets/REDDIT_PASSWORD" | decrypt | trim -}}
+ {{- end -}}
+ {{- $redditUsername := (default "" (env "REDDIT_USERNAME")) -}}
+ {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "REDDIT_USERNAME")) -}}
+ {{- $redditUsername = includeTemplate "secrets/REDDIT_USERNAME" | decrypt | trim -}}
+ {{- end -}}
+ {{- if and (ne $redditAppId "") (ne $redditAppSecret "") (ne $redditPassword "") (ne $redditUsername "") -}}
+ ### Reddit
+ # Source: https://github.com/caronc/apprise/wiki/Notify_reddit
+ # TODO - Replace opensource below with appropriate sub-reddit
+ - reddit://{{- $redditUsername -}}:{{- $redditPassword -}}@{{- $redditAppId -}}/{{- $redditAppSecret -}}/{subreddit}:
+ - tag: reddit, post, megabyte-labs
+ {{ end }}
+
+ ### RSyslog
+ # Source: https://github.com/caronc/apprise/wiki/Notify_rsyslog
+ - rsyslog://localhost:
+ - tag: rsyslog, log
+
+ {{- $sendGridApiKey := (default "" (env "SENDGRID_API_KEY")) -}}
+ {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "SENDGRID_API_KEY")) -}}
+ {{- $sendGridApiKey = includeTemplate "secrets/SENDGRID_API_KEY" | decrypt | trim -}}
+ {{- end -}}
+ {{- if ne $sendGridApiKey "" -}}
+ ### SendGrid
+ # Source: https://github.com/caronc/apprise/wiki/Notify_sendgrid
+ # Sends an e-mail using SendGrid (with templating options)
+ - sendgrid://{{- $sendGridApiKey -}}:{{ .host.noReplyEmail }}:
+ - to: "{{ .user.email }}"
+ tag: email, sendgrid
+ {{ end }}
+
+ {{- $slackBotToken := (default "" (env "SLACK_BOT_USER_OAUTH_TOKEN")) -}}
+ {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "SLACK_BOT_USER_OAUTH_TOKEN")) -}}
+ {{- $slackBotToken = includeTemplate "secrets/SLACK_BOT_USER_OAUTH_TOKEN" | decrypt | trim -}}
+ {{- end -}}
+ {{- if ne $slackBotToken "" -}}
+ ### Slack
+ # Source: https://github.com/caronc/apprise/wiki/Notify_slack
+ # Posts in Slack chatroom
+ - slack://{{ $slackBotToken }}:
+ - tag: chat, slack
+ {{ end }}
+
+ {{- $twilioAccountSid := (default "" (env "TWILIO_ACCOUNT_SID")) -}}
+ {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "TWILIO_ACCOUNT_SID")) -}}
+ {{- $twilioAccountSid = includeTemplate "secrets/TWILIO_ACCOUNT_SID" | decrypt | trim -}}
+ {{- end -}}
+ {{- $twilioAuthToken := (default "" (env "TWILIO_AUTH_TOKEN")) -}}
+ {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "TWILIO_AUTH_TOKEN")) -}}
+ {{- $twilioAuthToken = includeTemplate "secrets/TWILIO_AUTH_TOKEN" | decrypt | trim -}}
+ {{- end -}}
+ {{- $twilioFromNumber := (default "" (env "TWILIO_FROM_NUMBER")) -}}
+ {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "TWILIO_FROM_NUMBER")) -}}
+ {{- $twilioFromNumber = includeTemplate "secrets/TWILIO_FROM_NUMBER" | decrypt | trim -}}
+ {{- end -}}
+ {{- $cellPhoneNumber := (default "" (env "CELL_PHONE_NUMBER")) -}}
+ {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CELL_PHONE_NUMBER")) -}}
+ {{- $cellPhoneNumber = includeTemplate "secrets/CELL_PHONE_NUMBER" | decrypt | trim -}}
+ {{- end -}}
+ {{- if and (ne $twilioAccountSid "") (ne $twilioAuthToken "") (ne $twilioFromNumber "") (ne $cellPhoneNumber "") -}}
+ ### Twilio
+ # Source: https://github.com/caronc/apprise/wiki/Notify_twilio
+ # Sends a text message from Twilio to the `CELL_PHONE_NUMBER`
+ - twilio://{{- $twilioAccountSid -}}:{{- $twilioAuthToken -}}@{{- $twilioFromNumber -}}/{{- $cellPhoneNumber -}}
+ - tag: text, twilio
+ {{ end }}
+
+ {{- $twitterApiKey := (default "" (env "TWITTER_API_KEY")) -}}
+ {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "TWITTER_API_KEY")) -}}
+ {{- $twitterApiKey = includeTemplate "secrets/TWITTER_API_KEY" | decrypt | trim -}}
+ {{- end -}}
+ {{- $twitterApiKeySecret := (default "" (env "TWITTER_API_KEY_SECRET")) -}}
+ {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "TWITTER_API_KEY_SECRET")) -}}
+ {{- $twitterApiKeySecret = includeTemplate "secrets/TWITTER_API_KEY_SECRET" | decrypt | trim -}}
+ {{- end -}}
+ {{- $twitterAccessToken := (default "" (env "TWITTER_ACCESS_TOKEN")) -}}
+ {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "TWITTER_ACCESS_TOKEN")) -}}
+ {{- $twitterAccessToken = includeTemplate "secrets/TWITTER_ACCESS_TOKEN" | decrypt | trim -}}
+ {{- end -}}
+ {{- $twitterAccessTokenSecret := (default "" (env "TWITTER_ACCESS_TOKEN_SECRET")) -}}
+ {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "TWITTER_ACCESS_TOKEN_SECRET")) -}}
+ {{- $twitterAccessTokenSecret = includeTemplate "secrets/TWITTER_ACCESS_TOKEN_SECRET" | decrypt | trim -}}
+ {{- end -}}
+ {{- if and (ne $twitterApiKey "") (ne $twitterApiKeySecret "") (ne $twitterAccessToken "") (ne $twitterAccessTokenSecret "") -}}
+ ### Twitter
+ # Posts a tweet
+ - twitter://{{- $twitterApiKey -}}/{{- $twitterApiKeySecret -}}/{{- $twitterAccessToken -}}/{{- $twitterAccessTokenSecret -}}?mode=tweet:
+ - tag: post, tweet, megabyte-labs
+ {{ end }}
+
+ ### dbus
+ # Source: https://github.com/caronc/apprise/wiki/Notify_dbus
+ - dbus://:
+ - tag: dbus, system
+
+ ### GNOME
+ # Source: https://github.com/caronc/apprise/wiki/Notify_gnome
+ - gnome://:
+ - tag: gnome, system
+
+ ### macOS
+ # Source: https://github.com/caronc/apprise/wiki/Notify_macosx
+ - macosx://:
+ - tag: macos, system
+
+ ### Windows
+ # Source:
diff --git a/home/dot_config/apprise/custom.yml.tmpl b/home/dot_config/apprise/custom.yml.tmpl
new file mode 100644
index 00000000..871fb6fc
--- /dev/null
+++ b/home/dot_config/apprise/custom.yml.tmpl
@@ -0,0 +1,3 @@
+{{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "files" "apprise-custom")) -}}
+{{- includeTemplate "files/apprise-custom" | decrypt -}}
+{{- end -}}
diff --git a/home/dot_config/autorestic/autorestic-system.yml b/home/dot_config/autorestic/autorestic-system.yml
new file mode 100644
index 00000000..00967c30
--- /dev/null
+++ b/home/dot_config/autorestic/autorestic-system.yml
@@ -0,0 +1,64 @@
+---
+version: 2
+
+extras:
+ docker: &docker
+ type: volume
+ to:
+ - docker-local
+ - docker-s3
+ cron: '0 * * * *'
+ hooks:
+ before:
+ - 'curl -m 10 --retry 5 -X POST -H "Content-Type: text/plain" --data "Autorestic Docker Volume ${AUTORESTIC_LOCATION} BEFORE / Host: ${HOST} / User: ${USER} / Home: ${HOME}" https://healthchecks.{{ .host.domain }}/ping/TODO_UUID/start'
+ failure:
+ - 'curl -m 10 --retry 5 -X POST -H "Content-Type: text/plain" --data "Autorestic Docker Volume ${AUTORESTIC_LOCATION} BEFORE / Host: ${HOST} / User: ${USER} / Home: ${HOME}" https://healthchecks.{{ .host.domain }}/ping/TODO_UUID/fail'
+ success:
+ - 'curl -m 10 --retry 5 -X POST -H "Content-Type: text/plain" --data "Autorestic Docker Volume ${AUTORESTIC_LOCATION} BEFORE / Host: ${HOST} / User: ${USER} / Home: ${HOME}" https://healthchecks.{{ .host.domain }}/ping/TODO_UUID'
+ options:
+ backup:
+ exclude:
+ - .venv
+ - node_modules
+ - venv
+ tag:
+ - docker
+ forget:
+ keep-hourly: 24
+ keep-daily: 7
+ keep-weekly: 12
+ keep-monthly: 8
+ keep-yearly: 1
+
+locations:
+ healthchecks_config:
+ from: healthchecks_config
+ <<: *docker
+ healthchecks_postgres:
+ from: healthchecks_postgres
+ <<: *docker
+ rundeck_data:
+ from: rundeck_data
+ <<: *docker
+ portainer_manager_data:
+ from: portainer_manager_data
+ <<: *docker
+ statping_app:
+ from: statping_app
+ <<: *docker
+ statping_postgres:
+ from: statping_postgres
+ <<: *docker
+
+backends:
+ docker-local:
+ type: local
+ path: /var/local/backups/docker
+ key: {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "RESTIC_SYSTEM_PASSWORD")) }}{{ includeTemplate "secrets/RESTIC_SYSTEM_PASSWORD" | decrypt | trim }}{{ else }}{{ default "" (env "RESTIC_SYSTEM_PASSWORD") }}{{ end }}
+ docker-s3:
+ type: s3
+ path: {{ .user.cloudflare.r2 }}.r2.cloudflarestorage.com/docker
+ key: {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "RESTIC_SYSTEM_PASSWORD")) }}{{ includeTemplate "secrets/RESTIC_SYSTEM_PASSWORD" | decrypt | trim }}{{ else }}{{ default "" (env "RESTIC_SYSTEM_PASSWORD") }}{{ end }}
+ env:
+ AWS_ACCESS_KEY_ID: {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_R2_ID")) }}{{ includeTemplate "secrets/CLOUDFLARE_R2_ID" | decrypt | trim }}{{ else }}{{ default "" (env "CLOUDFLARE_R2_ID") }}{{ end }}
+ AWS_SECRET_ACCESS_KEY: {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_R2_SECRET")) }}{{ includeTemplate "secrets/CLOUDFLARE_R2_SECRET" | decrypt | trim }}{{ else }}{{ default "" (env "CLOUDFLARE_R2_SECRET") }}{{ end }}
diff --git a/home/dot_config/autorestic/autorestic-user.yml b/home/dot_config/autorestic/autorestic-user.yml
new file mode 100644
index 00000000..21af321b
--- /dev/null
+++ b/home/dot_config/autorestic/autorestic-user.yml
@@ -0,0 +1,135 @@
+---
+version: 2
+
+extras:
+ app: &app
+ to:
+ - apps-local
+ - apps-s3
+ hooks:
+ before:
+ - 'curl -m 10 --retry 5 -X POST -H "Content-Type: text/plain" --data "Autorestic App Backup ${AUTORESTIC_LOCATION} BEFORE / Host: ${HOST} / User: ${USER} / Home: ${HOME}" https://healthchecks.{{ .host.domain }}/ping/TODO_UUID/start'
+ failure:
+ - 'curl -m 10 --retry 5 -X POST -H "Content-Type: text/plain" --data "Autorestic App Backup ${AUTORESTIC_LOCATION} BEFORE / Host: ${HOST} / User: ${USER} / Home: ${HOME}" https://healthchecks.{{ .host.domain }}/ping/TODO_UUID/fail'
+ success:
+ - 'curl -m 10 --retry 5 -X POST -H "Content-Type: text/plain" --data "Autorestic App Backup ${AUTORESTIC_LOCATION} BEFORE / Host: ${HOST} / User: ${USER} / Home: ${HOME}" https://healthchecks.{{ .host.domain }}/ping/TODO_UUID'
+ options:
+ backup:
+ exclude:
+ - .local
+ - .venv
+ - node_modules
+ - venv
+ tag:
+ - app
+ forget:
+ keep-hourly: 24
+ keep-daily: 7
+ keep-weekly: 14
+ keep-monthly: 3
+ keep-yearly: 2
+ user: &user
+ hooks:
+ before:
+ - 'curl -m 10 --retry 5 -X POST -H "Content-Type: text/plain" --data "Autorestic User Home Folder ${AUTORESTIC_LOCATION} BEFORE / Host: ${HOST} / User: ${USER} / Home: ${HOME}" https://healthchecks.{{ .host.domain }}/ping/{{ .host.autoresticHealthcheckUuid }}/start'
+ failure:
+ - 'curl -m 10 --retry 5 -X POST -H "Content-Type: text/plain" --data "Autorestic User Home Folder ${AUTORESTIC_LOCATION} BEFORE / Host: ${HOST} / User: ${USER} / Home: ${HOME}" https://healthchecks.{{ .host.domain }}/ping/{{ .host.autoresticHealthcheckUuid }}/fail'
+ success:
+ - 'curl -m 10 --retry 5 -X POST -H "Content-Type: text/plain" --data "Autorestic User Home Folder ${AUTORESTIC_LOCATION} BEFORE / Host: ${HOST} / User: ${USER} / Home: ${HOME}" https://healthchecks.{{ .host.domain }}/ping/{{ .host.autoresticHealthcheckUuid }}'
+ options:
+ backup:
+ exclude:
+ - .local
+ - .venv
+ - node_modules
+ - venv
+ - Library
+ tag:
+ - user
+ forget:
+ keep-hourly: 24
+ keep-daily: 7
+ keep-weekly: 14
+ keep-monthly: 3
+ keep-yearly: 2
+
+locations:
+ altair:
+ from: "$ALTAIR_APPDATA"
+ <<: *app
+ android-studio:
+ from: "$ANDROID_STUDIO_APPDATA"
+ <<: *app
+ brave-browser:
+ from: "$BRAVE_BROWSER_APPDATA"
+ <<: *app
+ ferdium:
+ from: "$FERDIUM_APPDATA"
+ <<: *app
+ firefox:
+ from: "$FIREFOX_APPDATA"
+ <<: *app
+ google-chrome:
+ from: "$GOOGLE_CHROME_APPDATA"
+ <<: *app
+ logi-options-plus:
+ from: "$LOGI_OPTIONS_PLUS_APPDATA"
+ <<: *app
+ mailspring:
+ from: "$MAILSPRING_APPDATA"
+ <<: *app
+ mark-text:
+ from: "$MARK_TEXT_APPDATA"
+ <<: *app
+ microsoft-edge:
+ from: "$MICROSOFT_EDGE_APPDATA"
+ <<: *app
+ notion:
+ from: "$NOTION_APPDATA"
+ <<: *app
+ pieces-os:
+ from: "$PIECES_OS_APPDATA"
+ <<: *app
+ remmina:
+ from: "$REMMINA_APPDATA"
+ <<: *app
+ tor-browser:
+ from: "$TOR_BROWSER_APPDATA"
+ <<: *app
+ warp-terminal:
+ from: "$WARP_TERMINAL_APPDATA"
+ <<: *app
+ home-local:
+ from: ~/
+ to: home-local
+ cron: '0/15 * * * *'
+ <<: *user
+ home-s3:
+ from: ~/
+ to: home-s3
+ cron: '0 * * * *'
+ <<: *user
+
+backends:
+ apps-local:
+ type: local
+ path: /var/local/backups/user/{{ .user.username }}/apps
+ key: {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "RESTIC_PASSWORD")) }}{{ includeTemplate "secrets/RESTIC_PASSWORD" | decrypt | trim }}{{ else }}{{ default "" (env "RESTIC_PASSWORD") }}{{ end }}
+ apps-s3:
+ type: s3
+ path: {{ .user.cloudflare.r2 }}.r2.cloudflarestorage.com/user/{{ .user.username }}/Backups/apps
+ key: {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "RESTIC_PASSWORD")) }}{{ includeTemplate "secrets/RESTIC_PASSWORD" | decrypt | trim }}{{ else }}{{ default "" (env "RESTIC_PASSWORD") }}{{ end }}
+ env:
+ AWS_ACCESS_KEY_ID: {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_R2_ID_USER")) }}{{ includeTemplate "secrets/CLOUDFLARE_R2_ID_USER" | decrypt | trim }}{{ else }}{{ default "" (env "CLOUDFLARE_R2_ID_USER") }}{{ end }}
+ AWS_SECRET_ACCESS_KEY: {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_R2_SECRET_USER")) }}{{ includeTemplate "secrets/CLOUDFLARE_R2_SECRET_USER" | decrypt | trim }}{{ else }}{{ default "" (env "CLOUDFLARE_R2_SECRET_USER") }}{{ end }}
+ home-local:
+ type: local
+ path: /var/local/backups/user/{{ .user.username }}/home
+ key: {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "RESTIC_PASSWORD")) }}{{ includeTemplate "secrets/RESTIC_PASSWORD" | decrypt | trim }}{{ else }}{{ default "" (env "RESTIC_PASSWORD") }}{{ end }}
+ home-s3:
+ type: s3
+ path: {{ .user.cloudflare.r2 }}.r2.cloudflarestorage.com/user/{{ .user.username }}/Backups/home
+ key: {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "RESTIC_PASSWORD")) }}{{ includeTemplate "secrets/RESTIC_PASSWORD" | decrypt | trim }}{{ else }}{{ default "" (env "RESTIC_PASSWORD") }}{{ end }}
+ env:
+ AWS_ACCESS_KEY_ID: {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_R2_ID_USER")) }}{{ includeTemplate "secrets/CLOUDFLARE_R2_ID_USER" | decrypt | trim }}{{ else }}{{ default "" (env "CLOUDFLARE_R2_ID_USER") }}{{ end }}
+ AWS_SECRET_ACCESS_KEY: {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_R2_SECRET_USER")) }}{{ includeTemplate "secrets/CLOUDFLARE_R2_SECRET_USER" | decrypt | trim }}{{ else }}{{ default "" (env "CLOUDFLARE_R2_SECRET_USER") }}{{ end }}
diff --git a/home/dot_config/crontab/config b/home/dot_config/crontab/config-system
similarity index 73%
rename from home/dot_config/crontab/config
rename to home/dot_config/crontab/config-system
index 2e12672d..4ed31b2e 100644
--- a/home/dot_config/crontab/config
+++ b/home/dot_config/crontab/config-system
@@ -1,8 +1,6 @@
+PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin:/opt/homebrew/bin
-
-PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin
-
-# 0 8 * * 0 $HOME/.scripts/domingobot.sh 2>&1 >> $HOME/.log/cron.log
+*/5 * * * * command -v autorestic > /dev/null && autorestic --ci cron > /tmp/autorestic-system.log 2>&1
# * * * * * command to be executed
# ┯ ┯ ┯ ┯ ┯
diff --git a/home/dot_config/crontab/config-user b/home/dot_config/crontab/config-user
new file mode 100644
index 00000000..804a0a34
--- /dev/null
+++ b/home/dot_config/crontab/config-user
@@ -0,0 +1,14 @@
+PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin:/opt/homebrew/bin:$HOME/.local/bin
+
+*/5 * * * * command -v autorestic > /dev/null && . "$HOME/.config/shell/apps.sh" && autorestic -c "$HOME/.config/autorestic/autorestic-user.yml" --ci cron > /tmp/autorestic.log 2>&1
+* * * * * command -v dagu-cron > /dev/null && dagu-cron
+* * * * * command -v ghorg > /dev/null && ghorg reclone
+
+# * * * * * command to be executed
+# ┯ ┯ ┯ ┯ ┯
+# │ │ │ │ │
+# │ │ │ │ ╰───── day of week (0 - 6) (Sunday=0)
+# │ │ │ ╰─────── month (1 - 12)
+# │ │ ╰───────── day of month (1 - 31)
+# │ ╰─────────── hour (0 - 23)
+# ╰───────────── min (0 - 59)
diff --git a/home/dot_config/dagu/admin.yaml b/home/dot_config/dagu/admin.yaml
new file mode 100644
index 00000000..ba48d454
--- /dev/null
+++ b/home/dot_config/dagu/admin.yaml
@@ -0,0 +1,26 @@
+---
+host: 127.0.0.1 # default: 127.0.0.1
+port: 8321 # default: 8080
+
+### Path to the DAGs directory
+# dags: # default: ${DAGU_HOME}/dags
+
+### Web UI Color & Title
+navbarColor: "#119eff" # header color for web UI (e.g. "#ff0000")
+navbarTitle: CombineOS Dagu # header title for web UI (e.g. "PROD")
+
+### Basic Auth
+isBasicAuth: false # enables basic auth
+# basicAuthUsername: # basic auth user
+# basicAuthPassword: # basic auth password
+
+### Base Config
+# baseConfig: # default: ${DAGU_HOME}/config.yaml
+
+### Working Directory
+# workDir: # default: DAG location
+
+### SSL Configuration
+# tls:
+# certFile:
+# keyFile:
\ No newline at end of file
diff --git a/home/dot_config/dagu/config.yaml.tmpl b/home/dot_config/dagu/config.yaml.tmpl
new file mode 100644
index 00000000..3e341949
--- /dev/null
+++ b/home/dot_config/dagu/config.yaml.tmpl
@@ -0,0 +1,32 @@
+---
+### Directory path to save logs from standard output
+logDir: /var/log/dagu
+
+### History retention days (default: 30)
+histRetentionDays: 30
+
+### Email notification settings
+mailOn:
+ failure: true
+ success: false
+
+### SMTP server settings
+smtp:
+ host: smtp.sendgrid.net
+ port: 587
+ username: apikey
+ password: "{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "SENDGRID_API_KEY")) }}{{ includeTemplate "secrets/SENDGRID_API_KEY" | decrypt | trim }}{{ else }}{{ env "SENDGRID_API_KEY" }}{{ end }}"
+
+### Error mail configuration
+errorMail:
+ from: "{{ .host.noReplyEmail }}"
+ to: "{{ .user.email }}"
+ prefix: "[Error]"
+ attachLogs: true
+
+### Info mail configuration
+infoMail:
+ from: "{{ .host.noReplyEmail }}"
+ to: "{{ .user.email }}"
+ prefix: "[Info]"
+ attachLogs: true
\ No newline at end of file
diff --git a/home/dot_config/docker/templates/code-server.docker-stack.yml.tmpl b/home/dot_config/docker/TODO/code-server.docker-stack.yml.tmpl
similarity index 100%
rename from home/dot_config/docker/templates/code-server.docker-stack.yml.tmpl
rename to home/dot_config/docker/TODO/code-server.docker-stack.yml.tmpl
diff --git a/home/dot_config/docker/templates/dashy.docker-stack.yml.tmpl b/home/dot_config/docker/TODO/dashy.docker-stack.yml.tmpl
similarity index 100%
rename from home/dot_config/docker/templates/dashy.docker-stack.yml.tmpl
rename to home/dot_config/docker/TODO/dashy.docker-stack.yml.tmpl
diff --git a/home/dot_config/docker/templates/fider.docker-stack.yml.tmpl b/home/dot_config/docker/TODO/fider.docker-stack.yml.tmpl
similarity index 100%
rename from home/dot_config/docker/templates/fider.docker-stack.yml.tmpl
rename to home/dot_config/docker/TODO/fider.docker-stack.yml.tmpl
diff --git a/home/dot_config/docker/templates/filestash.docker-stack.yml.tmpl b/home/dot_config/docker/TODO/filestash.docker-stack.yml.tmpl
similarity index 94%
rename from home/dot_config/docker/templates/filestash.docker-stack.yml.tmpl
rename to home/dot_config/docker/TODO/filestash.docker-stack.yml.tmpl
index b7e5a287..a7f7c35c 100644
--- a/home/dot_config/docker/templates/filestash.docker-stack.yml.tmpl
+++ b/home/dot_config/docker/TODO/filestash.docker-stack.yml.tmpl
@@ -23,4 +23,5 @@ services:
- seccomp:unconfined
volumes:
- filestash: {}
+ filestash:
+ name: filestash
diff --git a/home/dot_config/docker/templates/gitlab.docker-stack.yml.tmpl b/home/dot_config/docker/TODO/gitlab.docker-stack.yml.tmpl
similarity index 100%
rename from home/dot_config/docker/templates/gitlab.docker-stack.yml.tmpl
rename to home/dot_config/docker/TODO/gitlab.docker-stack.yml.tmpl
diff --git a/home/dot_config/docker/templates/htpc.docker-stack.yml.tmpl b/home/dot_config/docker/TODO/htpc.docker-stack.yml.tmpl
similarity index 100%
rename from home/dot_config/docker/templates/htpc.docker-stack.yml.tmpl
rename to home/dot_config/docker/TODO/htpc.docker-stack.yml.tmpl
diff --git a/home/dot_config/docker/templates/instapy.docker-stack.yml.tmpl b/home/dot_config/docker/TODO/instapy.docker-stack.yml.tmpl
similarity index 100%
rename from home/dot_config/docker/templates/instapy.docker-stack.yml.tmpl
rename to home/dot_config/docker/TODO/instapy.docker-stack.yml.tmpl
diff --git a/home/dot_config/docker/templates/josh.docker-stack.yml.tmpl b/home/dot_config/docker/TODO/josh.docker-stack.yml.tmpl
similarity index 100%
rename from home/dot_config/docker/templates/josh.docker-stack.yml.tmpl
rename to home/dot_config/docker/TODO/josh.docker-stack.yml.tmpl
diff --git a/home/dot_config/docker/templates/nextcloud.docker-stack.yml.tmpl b/home/dot_config/docker/TODO/nextcloud.docker-stack.yml.tmpl
similarity index 88%
rename from home/dot_config/docker/templates/nextcloud.docker-stack.yml.tmpl
rename to home/dot_config/docker/TODO/nextcloud.docker-stack.yml.tmpl
index df3143d7..364ebd14 100644
--- a/home/dot_config/docker/templates/nextcloud.docker-stack.yml.tmpl
+++ b/home/dot_config/docker/TODO/nextcloud.docker-stack.yml.tmpl
@@ -9,7 +9,7 @@ services:
PGID: 1000
TZ: America/New_York
volumes:
- - ./config/nextcloud:/config
+ - nextcloud_config:/config
- /mnt/auxilary/NextCloud:/data
ports:
- 26777:443
@@ -31,3 +31,7 @@ services:
expose:
- 3306
restart: unless-stopped
+
+volumes:
+ nextcloud_config:
+ name: nextcloud_config
\ No newline at end of file
diff --git a/home/dot_config/docker/templates/nginx-proxy-manager.docker-stack.yml.tmpl b/home/dot_config/docker/TODO/nginx-proxy-manager.docker-stack.yml.tmpl
similarity index 100%
rename from home/dot_config/docker/templates/nginx-proxy-manager.docker-stack.yml.tmpl
rename to home/dot_config/docker/TODO/nginx-proxy-manager.docker-stack.yml.tmpl
diff --git a/home/dot_config/docker/templates/nginx.docker-stack.yml.tmpl b/home/dot_config/docker/TODO/nginx.docker-stack.yml.tmpl
similarity index 100%
rename from home/dot_config/docker/templates/nginx.docker-stack.yml.tmpl
rename to home/dot_config/docker/TODO/nginx.docker-stack.yml.tmpl
diff --git a/home/dot_config/docker/templates/sonatype.docker-stack.yml.tmpl b/home/dot_config/docker/TODO/sonatype.docker-stack.yml.tmpl
similarity index 100%
rename from home/dot_config/docker/templates/sonatype.docker-stack.yml.tmpl
rename to home/dot_config/docker/TODO/sonatype.docker-stack.yml.tmpl
diff --git a/home/dot_config/docker/templates/wazuh.docker-stack.yml.tmpl b/home/dot_config/docker/TODO/wazuh.docker-stack.yml.tmpl
similarity index 100%
rename from home/dot_config/docker/templates/wazuh.docker-stack.yml.tmpl
rename to home/dot_config/docker/TODO/wazuh.docker-stack.yml.tmpl
diff --git a/home/dot_config/docker/templates/wireguard.docker-stack.yml.tmpl b/home/dot_config/docker/TODO/wireguard.docker-stack.yml.tmpl
similarity index 100%
rename from home/dot_config/docker/templates/wireguard.docker-stack.yml.tmpl
rename to home/dot_config/docker/TODO/wireguard.docker-stack.yml.tmpl
diff --git a/home/dot_config/docker/templates/healthchecks.docker-stack.yml.tmpl b/home/dot_config/docker/templates/healthchecks.docker-stack.yml.tmpl
index 55159b03..61b3c6cb 100644
--- a/home/dot_config/docker/templates/healthchecks.docker-stack.yml.tmpl
+++ b/home/dot_config/docker/templates/healthchecks.docker-stack.yml.tmpl
@@ -12,7 +12,7 @@ services:
- nginx_network
environment:
ALLOWED_HOSTS: "{{ .docker.healthchecks.allowedHosts }}"
- APPRISE_ENABLED: 'False'
+ APPRISE_ENABLED: 'True'
DB_HOST: postgres
DB_NAME_FILE: /run/secrets/healthchecks_db_name
DB_PASSWORD_FILE: /run/secrets/healthchecks_db_password
@@ -38,6 +38,7 @@ services:
SLACK_ENABLED: 'True'
SUPERUSER_EMAIL_FILE: /run/secrets/healthchecks_superuser_email
SUPERUSER_PASSWORD_FILE: /run/secrets/healthchecks_superuser_password
+ TZ: "{{ .user.timezone }}"
WEBHOOKS_ENABLED: 'True'
deploy:
mode: replicated
@@ -46,6 +47,7 @@ services:
- healthchecks_config:/config
expose:
- 8000
+ - 2525
restart: unless-stopped
secrets:
- healthchecks_db_name
@@ -53,6 +55,8 @@ services:
- healthchecks_db_user
- healthchecks_secret_key
- healthchecks_sendgrid_api_key
+ - healthchecks_slack_client_id
+ - healthchecks_slack_client_secret
- healthchecks_superuser_email
- healthchecks_superuser_password
@@ -95,6 +99,10 @@ secrets:
external: true
healthchecks_sendgrid_api_key:
external: true
+ healthchecks_slack_client_id:
+ external: true
+ healthchecks_slack_client_secret:
+ external: true
healthchecks_superuser_email:
external: true
healthchecks_superuser_password:
@@ -102,4 +110,6 @@ secrets:
volumes:
healthchecks_config:
+ name: healthchecks_config
healthchecks_postgres:
+ name: healthchecks_postgres
diff --git a/home/dot_config/docker/templates/memos.docker-stack.yml.tmpl b/home/dot_config/docker/templates/memos.docker-stack.yml.tmpl
deleted file mode 100644
index 3e97781e..00000000
--- a/home/dot_config/docker/templates/memos.docker-stack.yml.tmpl
+++ /dev/null
@@ -1,10 +0,0 @@
-# https://github.com/usememos/memos
-version: "3.0"
-services:
- memos:
- image: neosmemo/memos:latest
- container_name: memos
- volumes:
- - ~/.memos/:/var/opt/memos
- ports:
- - 5230:5230
\ No newline at end of file
diff --git a/home/dot_config/docker/templates/portainer.docker-stack.yml.tmpl b/home/dot_config/docker/templates/portainer.docker-stack.yml.tmpl
index f264d72d..ea610342 100644
--- a/home/dot_config/docker/templates/portainer.docker-stack.yml.tmpl
+++ b/home/dot_config/docker/templates/portainer.docker-stack.yml.tmpl
@@ -48,3 +48,4 @@ secrets:
volumes:
portainer_manager_data:
+ name: portainer_manager_data
diff --git a/home/dot_config/docker/templates/rundeck.docker-stack.yml.tmpl b/home/dot_config/docker/templates/rundeck.docker-stack.yml.tmpl
index 690558de..89ac1b22 100644
--- a/home/dot_config/docker/templates/rundeck.docker-stack.yml.tmpl
+++ b/home/dot_config/docker/templates/rundeck.docker-stack.yml.tmpl
@@ -10,7 +10,7 @@ services:
MENU_VERSION: 2.0.19 #optional
volumes:
- $HOME/.ssh:/home/rundeck/.ssh
- - rundeck-data:/home/rundeck/server/data
+ - rundeck_data:/home/rundeck/server/data
ports:
- 3000:3000
- 69:69/udp
@@ -18,4 +18,5 @@ services:
restart: unless-stopped
volumes:
- rundeck-data:
+ rundeck_data:
+ name: rundeck_data
diff --git a/home/dot_config/docker/templates/statping.docker-stack.yml.tmpl b/home/dot_config/docker/templates/statping.docker-stack.yml.tmpl
index ed71dd84..467432e4 100644
--- a/home/dot_config/docker/templates/statping.docker-stack.yml.tmpl
+++ b/home/dot_config/docker/templates/statping.docker-stack.yml.tmpl
@@ -72,4 +72,6 @@ secrets:
volumes:
statping_app:
+ name: statping_app
statping_postgres:
+ name: statping_postgres
diff --git a/home/dot_config/docker/templates/thelounge.docker-stack.yml.tmpl b/home/dot_config/docker/templates/thelounge.docker-stack.yml.tmpl
deleted file mode 100644
index e69de29b..00000000
diff --git a/home/dot_config/firewall/etc/firewalld/services/plex.xml b/home/dot_config/firewall/etc/firewalld/services/plex.xml
index f040ed86..a1226c58 100644
--- a/home/dot_config/firewall/etc/firewalld/services/plex.xml
+++ b/home/dot_config/firewall/etc/firewalld/services/plex.xml
@@ -2,7 +2,10 @@
Plex
Plex media center
- # Plex DLNA Server
- # Plex DLNA Server
- # GDM Network Discovery
-
\ No newline at end of file
+
+
+
+
+
+
+
diff --git a/home/dot_config/firewall/etc/firewalld/services/xrdp.xml b/home/dot_config/firewall/etc/firewalld/services/rdp.xml
similarity index 86%
rename from home/dot_config/firewall/etc/firewalld/services/xrdp.xml
rename to home/dot_config/firewall/etc/firewalld/services/rdp.xml
index 957637ef..1128d62c 100644
--- a/home/dot_config/firewall/etc/firewalld/services/xrdp.xml
+++ b/home/dot_config/firewall/etc/firewalld/services/rdp.xml
@@ -1,6 +1,6 @@
- xRDP
+ RDP
Remote Desktop server
\ No newline at end of file
diff --git a/home/dot_config/firewall/etc/firewalld/services/rsyslog.xml b/home/dot_config/firewall/etc/firewalld/services/rsyslog.xml
new file mode 100644
index 00000000..5504046e
--- /dev/null
+++ b/home/dot_config/firewall/etc/firewalld/services/rsyslog.xml
@@ -0,0 +1,6 @@
+
+
+ rsyslog
+ rsyslog - enhanced, multi-threaded syslogd
+
+
\ No newline at end of file
diff --git a/home/dot_config/firewall/etc/firewalld/services/tigervnc.xml b/home/dot_config/firewall/etc/firewalld/services/vnc.xml
similarity index 50%
rename from home/dot_config/firewall/etc/firewalld/services/tigervnc.xml
rename to home/dot_config/firewall/etc/firewalld/services/vnc.xml
index 2b7aed3d..3cf92957 100644
--- a/home/dot_config/firewall/etc/firewalld/services/tigervnc.xml
+++ b/home/dot_config/firewall/etc/firewalld/services/vnc.xml
@@ -1,6 +1,6 @@
- TigerVNC
- High performance, multi-platform VNC server
+ VNC
+ VNC server
\ No newline at end of file
diff --git a/home/dot_config/firewall/etc/ufw/applications.d/ftp b/home/dot_config/firewall/etc/ufw/applications.d/ftp
new file mode 100644
index 00000000..34c6dd71
--- /dev/null
+++ b/home/dot_config/firewall/etc/ufw/applications.d/ftp
@@ -0,0 +1,4 @@
+[FTP]
+title=FTP
+description=FTP server
+ports=21/tcp
diff --git a/home/dot_config/firewall/etc/ufw/applications.d/jellyfin b/home/dot_config/firewall/etc/ufw/applications.d/jellyfin
new file mode 100644
index 00000000..d25254ee
--- /dev/null
+++ b/home/dot_config/firewall/etc/ufw/applications.d/jellyfin
@@ -0,0 +1,4 @@
+[Jellyfin]
+title=Jellyfin
+description=Jellyfin media server
+ports=8096/tcp|8920/tcp|1900/udp|7359/udp
\ No newline at end of file
diff --git a/home/dot_config/firewall/etc/ufw/applications.d/plex b/home/dot_config/firewall/etc/ufw/applications.d/plex
index 0615b29b..89af09c3 100644
--- a/home/dot_config/firewall/etc/ufw/applications.d/plex
+++ b/home/dot_config/firewall/etc/ufw/applications.d/plex
@@ -3,11 +3,6 @@ title=Plex Media Server (Standard)
description=The Plex Media Server
ports=32400/tcp|3005/tcp|5353/udp|8324/tcp|32410:32414/udp
-[PlexMediaServer DLNA]
-title=Plex Media Server (DLNA)
-description=The Plex Media Server (additional DLNA capability only)
-ports=1900/udp|32469/tcp
-
[PlexMediaServer Full]
title=Plex Media Server (Standard + DLNA)
description=The Plex Media Server (with additional DLNA capability)
diff --git a/home/dot_config/firewall/etc/ufw/applications.d/rsyslog b/home/dot_config/firewall/etc/ufw/applications.d/rsyslog
new file mode 100644
index 00000000..fbaf1acd
--- /dev/null
+++ b/home/dot_config/firewall/etc/ufw/applications.d/rsyslog
@@ -0,0 +1,4 @@
+[rsyslog]
+title=rsyslog
+description=Enhanced, multi-threaded syslogd
+ports=514/tcp
diff --git a/home/dot_config/firewall/etc/ufw/applications.d/vnc b/home/dot_config/firewall/etc/ufw/applications.d/vnc
new file mode 100644
index 00000000..577648f2
--- /dev/null
+++ b/home/dot_config/firewall/etc/ufw/applications.d/vnc
@@ -0,0 +1,4 @@
+[VNC]
+title=VNC
+description=VNC server
+ports=5900:5904/tcp
diff --git a/home/dot_config/ghorg/conf.yaml.tmpl b/home/dot_config/ghorg/conf.yaml.tmpl
index 4b823c3c..e10f54af 100644
--- a/home/dot_config/ghorg/conf.yaml.tmpl
+++ b/home/dot_config/ghorg/conf.yaml.tmpl
@@ -6,7 +6,7 @@
# Which provider to clone from (github, gitlab, gitea or bitbucket)
# default: github
# flag (--scm, -s) eg: --scm=gitlab
-GHORG_SCM_TYPE: gitlab
+GHORG_SCM_TYPE: github
# How you'd like to clone the repos (https or ssh)
# default: https
@@ -18,7 +18,7 @@ GHORG_CLONE_PROTOCOL: https
# See https://github.com/gabrie30/ghorg#changing-clone-directories for example
# default: YOUR_HOME_DIR/ghorg
# flag (--path, -p) eg: --path=/tmp/ghorg
-GHORG_ABSOLUTE_PATH_TO_CLONE_TO: ~/.local/ghorg
+GHORG_ABSOLUTE_PATH_TO_CLONE_TO: ~/Projects
# Folder ghorg will clone all repos into. Cloning will result in: GHORG_ABSOLUTE_PATH_TO_CLONE_TO/GHORG_OUTPUT_DIR/repo
# See https://github.com/gabrie30/ghorg#changing-clone-directories for example
@@ -58,7 +58,7 @@ GHORG_PRUNE_NO_CONFIRM: true
# Color output (enabled, disabled)
# flag (--color) eg: --color=disabled
-GHORG_COLOR: enabled
+GHORG_COLOR: disabled
# Skip archived repos, currently github/gitlab/gitea only
# flag (--skip-archived)
@@ -70,7 +70,7 @@ GHORG_SKIP_FORKS: false
# Backup mode, clone as mirror, no working copy (ignores branch parameter)
# flag (--backup)
-GHORG_BACKUP: true
+# GHORG_BACKUP: false
# Max goroutines created while cloning
# flag (--concurrency)
@@ -99,7 +99,7 @@ GHORG_CONCURRENCY: 25
# Only clones new repos and does not perform a git clean on existing repos. Useful if you don't want to lose changes made to repos in the org/user directory.
# flag (--no-clean)
-GHORG_NO_CLEAN: false
+GHORG_NO_CLEAN: true
# Additionally clone the wiki page for repo
# flag (--clone-wiki)
@@ -107,7 +107,7 @@ GHORG_CLONE_WIKI: false
# Fetches all remote branches for each repo by running a git fetch --all
# flag (--fetch-all)
-GHORG_FETCH_ALL: false
+GHORG_FETCH_ALL: true
# If you want to set a path other than $HOME/.config/ghorg/ghorgignore for your ghorgignore
# flag (--ghorgignore-path)
@@ -115,7 +115,7 @@ GHORG_FETCH_ALL: false
# Only emit critical output.
# flag (--quiet)
-GHORG_QUIET: false
+GHORG_QUIET: true
# Perform a dry run of the clone; fetches repos but does not clone them.
# flag (--dry-run)
diff --git a/home/dot_config/ghorg/reclone.yaml b/home/dot_config/ghorg/reclone.yaml
new file mode 100644
index 00000000..7ac0e585
--- /dev/null
+++ b/home/dot_config/ghorg/reclone.yaml
@@ -0,0 +1,7 @@
+---
+github:
+ cmd: "ghorg clone megabyte-labs -s github -p ~/GitHub"
+ description: "Clones the GitHub megabyte-labs organization repositories"
+gitlab:
+ cmd: "ghorg clone megabyte-labs -s gitlab -p ~/GitLab"
+ description: "Clones the GitLab megabyte-labs organization repositories"
diff --git a/home/dot_config/shell/apps.sh.tmpl b/home/dot_config/shell/apps.sh.tmpl
new file mode 100644
index 00000000..620d1f0b
--- /dev/null
+++ b/home/dot_config/shell/apps.sh.tmpl
@@ -0,0 +1,42 @@
+#!/usr/bin/env sh
+# @file App Backup Variables
+# @brief Stores variables that instruct various utilities what location to use for private application data
+# @description
+# The variables in this file are used to instruct `autorestic` and possibly other utilities about the
+# location of the private application data for various programs that get backed up.
+
+if [ -d /Applications ] && [ -d /System ]; then
+ ### macOS
+ ALTAIR_APPDATA="$HOME/Library/Application Support/Altair GraphQL Client"
+ ANDROID_STUDIO_APPDATA="TODO"
+ BRAVE_BROWSER_APPDATA="$HOME/Library/Application Support/BraveSoftware/Brave-Browser/Default"
+ FERDIUM_APPDATA="$HOME/Library/Application Support/Ferdium"
+ FIREFOX_APPDATA="$HOME/Library/Application Support/Firefox/Profiles"
+ GOOGLE_CHROME_APPDATA="$HOME/Library/Application Support/Google/Chrome/Default"
+ LOGI_OPTIONS_PLUS_APPDATA="$HOME/Library/Application Support/LogiOptionsPlus"
+ MAILSPRING_APPDATA="$HOME/Library/Application Support/Mailspring"
+ MARK_TEXT_APPDATA="$HOME/Library/Application Support/marktext"
+ MICROSOFT_EDGE_APPDATA="$HOME/Library/Application Support/Microsoft Edge/Default"
+ NOTION_APPDATA="$HOME/Library/Application Support/Notion"
+ PIECES_OS_APPDATA="$HOME/Library/Application Support/com.pieces.os"
+ # REMMINA_APPDATA - Remmina not available on macOS
+ TOR_BROWSER_APPDATA="$HOME/Library/Application Support/TorBrowser-Data/Tor"
+ WARP_TERMINAL_APPDATA="$HOME/Library/Application Support/dev.warp.Warp-Stable"
+else
+ ### Linux
+ # Currently, we assume the Flatpak location whenever possible
+ ANDROID_STUDIO_APPDATA="TODO"
+ ALTAIR_APPDATA="$HOME/snap/altair/current/.config/Altair GraphQL Client"
+ BRAVE_BROWSER_APPDATA="$HOME/.var/app/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default"
+ FERDIUM_APPDATA="$HOME/.var/app/org.ferdium.Ferdium/config/Ferdium"
+ FIREFOX_APPDATA="$HOME/.var/app/org.mozilla.firefox/.mozilla/firefox"
+ GOOGLE_CHROME_APPDATA="$HOME/.var/app/com.google.Chrome/config/google-chrome/Default"
+ MAILSPRING_APPDATA="TODO"
+ MARK_TEXT_APPDATA="TODO"
+ MICROSOFT_EDGE_APPDATA="TODO"
+ NOTION_APPDATA="TODO"
+ PIECES_OS_APPDATA="TODO"
+ REMMINA_APPDATA="$HOME/.var/app/org.remmina.Remmina/config/remmina/remmina.pref"
+ TOR_BROWSER_APPDATA="TODO"
+ WARP_TERMINAL_APPDATA="TODO"
+fi
\ No newline at end of file
diff --git a/home/dot_config/shell/exports.sh.tmpl b/home/dot_config/shell/exports.sh.tmpl
index 9ca91418..67510d20 100644
--- a/home/dot_config/shell/exports.sh.tmpl
+++ b/home/dot_config/shell/exports.sh.tmpl
@@ -181,6 +181,9 @@ export CONCURRENT_LOG_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/concurrent"
### cURL
export CURLOPT_ACCEPT_ENCODING=true
+### Dagu
+export DAGU_HOME="${XDG_CONFIG_HOME:-$HOME/.config}/dagu"
+
### Desk
export DESK_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/desk"
export DESK_DESKS_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/desk/desks"
diff --git a/home/dot_config/shell/profile.sh.tmpl b/home/dot_config/shell/profile.sh.tmpl
index f1fd265d..9acbdf2a 100644
--- a/home/dot_config/shell/profile.sh.tmpl
+++ b/home/dot_config/shell/profile.sh.tmpl
@@ -12,6 +12,8 @@ export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
[ ! -f "${XDG_CONFIG_HOME:-$HOME/.config}/shell/exports.sh" ] || . "${XDG_CONFIG_HOME:-$HOME/.config}/shell/exports.sh"
[ ! -f "${XDG_CONFIG_HOME:-$HOME/.config}/shell/aliases.sh" ] || . "${XDG_CONFIG_HOME:-$HOME/.config}/shell/aliases.sh"
[ ! -f "${XDG_CONFIG_HOME:-$HOME/.config}/shell/functions.sh" ] || . "${XDG_CONFIG_HOME:-$HOME/.config}/shell/functions.sh"
+[ ! -f "${XDG_CONFIG_HOME:-$HOME/.config}/shell/apps.sh" ] || . "${XDG_CONFIG_HOME:-$HOME/.config}/shell/apps.sh"
+[ ! -f "${XDG_CONFIG_HOME:-$HOME/.config}/shell/docker.sh" ] || . "${XDG_CONFIG_HOME:-$HOME/.config}/shell/docker.sh"
### Bash / ZSH
if [ "$BASH_SUPPORT" = 'true' ]; then
diff --git a/home/dot_local/bin/executable_dagu-cron b/home/dot_local/bin/executable_dagu-cron
new file mode 100644
index 00000000..09693c73
--- /dev/null
+++ b/home/dot_local/bin/executable_dagu-cron
@@ -0,0 +1,20 @@
+#!/usr/bin/env bash
+# @file Dagu Cron-Based Daemon Helper
+# @brief Helper executable used by cron to ensure Dagu is running
+# @description
+# This script is utilized by the user-level cronjob runner. Every minute this script is called by the cron
+# scheduler to ensure that the Dagu service is running. Read more about Dagu on their [GitHub page](https://github.com/dagu-dev/dagu).
+
+PROCESS="dagu start-all"
+COMMAND="/usr/bin/dagu start-all"
+
+### Ensure dagu is installed
+if command -v dagu > /dev/null; then
+ ### Check if process is already running
+ if ps ax | grep -v grep | grep "$PROCESS" > /dev/null; then
+ exit
+ else
+ $COMMAND &
+ fi
+fi
+exit
diff --git a/home/dot_local/bin/executable_rclone-mount b/home/dot_local/bin/executable_rclone-mount
index aab77983..7fae863a 100644
--- a/home/dot_local/bin/executable_rclone-mount
+++ b/home/dot_local/bin/executable_rclone-mount
@@ -1,4 +1,10 @@
#!/usr/bin/env bash
+# @file RClone Mount
+# @brief Helper utility to aid with mounting RClone S3 buckets to the file system
+# @description
+# This script is a helper utility to assist a system service that ensures various
+# RClone S3 mounts are mounted properly. For more information, take a look at the
+# RClone files stored in `~/.config/rclone`.
### Variables
TYPE="$1"
@@ -44,7 +50,7 @@ for FOLDER in "$CACHE_FOLDER" "$CONFIG_FOLDER" "$LOG_FOLDER" "$MOUNT_PATH"; do
if [ ! -d "$FOLDER" ]; then
mkdir -p "$FOLDER"
chmod 750 "$FOLDER"
- chown -f $USER:rclone "$FOLDER"
+ chown -f "$USER:rclone" "$FOLDER"
fi
done
@@ -54,15 +60,15 @@ if [ ! -f "$RCLONE_IGNORE" ] && [ -f "/etc/rcloneignore" ]; then
RCLONE_IGNORE='/etc/rcloneignore'
fi
-sudo chown -f root "$CONFIG_FOLDER/rclone.conf"
-sudo chmod -f 600 "$CONFIG_FOLDER/rclone.conf"
+chown -f "$USER:rclone" "$CONFIG_FOLDER/rclone.conf"
+chmod -f 600 "$CONFIG_FOLDER/rclone.conf"
### Mount
unset AWS_CA_BUNDLE
export PATH="$PATH:/usr/local/bin:/usr/bin"
# TODO: Only launch with --rc-web-gui if the servers hostname is the {{ .kubernetesHost }}
# TODO: Add more secure authentication method
-sudo rclone --config "$CONFIG_FOLDER/rclone.conf" \
+rclone --config "$CONFIG_FOLDER/rclone.conf" \
mount \
--allow-other \
--buffer-size 4G \
diff --git a/home/dot_local/etc/branding/black-icon-128x128.png b/home/dot_local/etc/branding/black-icon-128x128.png
new file mode 100644
index 00000000..47cee08f
Binary files /dev/null and b/home/dot_local/etc/branding/black-icon-128x128.png differ
diff --git a/home/dot_local/etc/cloudflared/config.yml.tmpl b/home/dot_local/etc/cloudflared/config.yml.tmpl
index 76d22b31..b6ba1e4d 100644
--- a/home/dot_local/etc/cloudflared/config.yml.tmpl
+++ b/home/dot_local/etc/cloudflared/config.yml.tmpl
@@ -24,6 +24,10 @@ ingress:
service: tcp://localhost:2022
- hostname: vnc.{{ $baseDomain }}
service: tcp://localhost:5901
+ - hostname: dagu.{{ $baseDomain }}
+ service: tcp://localhost:8321
+ - hostname: rsyslog.{{ $baseDomain }}
+ service: tcp://localhost:514
{{- if eq .host.softwareGroup "Kubernetes" }}
- hostname: k8s.{{ .host.domain }}
service: bastion
diff --git a/software.yml b/software.yml
index 1c94f0f6..f1a9cca2 100644
--- a/software.yml
+++ b/software.yml
@@ -422,10 +422,10 @@ softwarePackages:
sudo snap connect pieces-os:dotnet-runtime-aspnetcore
_app: Pieces.app
_note: Waiting for choco package
- _link:cask:
- - src: "${XDG_CONFIG_HOME:-$HOME/.config}/pieces-os"
- target: "$HOME/Library/Application Support/com.pieces.os"
- _link:snap: 'TODO'
+ _env:
+ PIECES_OS_APPDATA:
+ cask: "$HOME/Library/Application Support/com.pieces.os"
+ snap: "TODO"
appinstaller: https://builds.pieces.app/stages/production/appinstaller/os_server.appinstaller
cask: pieces-os
exe: https://builds.pieces.app/stages/production/os_server/windows-exe/download
@@ -532,13 +532,11 @@ softwarePackages:
_home: https://altairgraphql.dev/
_name: Altair GraphQL Client
_app: Altair GraphQL Client.app
- _link:cask:
- - src: "${XDG_CONFIG_HOME:-$HOME/.config}/Altair GraphQL Client"
- target: "$HOME/Library/Application Support/Altair GraphQL Client"
- _link:choco: 'TODO'
- _link:snap:
- - src: "${XDG_CONFIG_HOME:-$HOME/.config}/Altair GraphQL Client"
- target: "$HOME/snap/altair/current/.config/Altair GraphQL Client"
+ _env:
+ ALTAIR_APPDATA:
+ cask: "$HOME/Library/Application Support/Altair GraphQL Client"
+ choco: "TODO"
+ snap: "$HOME/snap/altair/current/.config/Altair GraphQL Client"
cask: altair-graphql-client
choco: altair-graphql
snap: altair
@@ -609,10 +607,12 @@ softwarePackages:
_home: https://developer.android.com/studio
_name: Android Studio
_app: Android Studio.app
- _link:cask: 'TODO'
- _link:choco: 'TODO'
- _link:flatpak: 'TODO'
- _link:snap: 'TODO'
+ _env:
+ ANDROID_STUDIO_APPDATA:
+ cask: "TODO"
+ choco: "TODO"
+ flatpak: "TODO"
+ snap: "TODO"
cask: android-studio
choco: androidstudio
flatpak: com.google.AndroidStudio
@@ -1179,6 +1179,11 @@ softwarePackages:
_github: https://github.com/cupcakearmy/autorestic/
_home: https://autorestic.vercel.app/
_name: Autorestic
+ _post: |
+ #!/usr/bin/env bash
+ sudo mkdir -p /var/local/backups/apps
+ sudo mkdir -p /var/local/backups/home
+ sudo mkdir -p /var/local/backups/docker
ansible: professormanhattan.autorestic
brew: autorestic
awscli:
@@ -1281,10 +1286,10 @@ softwarePackages:
_github: false
_name: Logi Options+
_app: logioptionsplus.app
- _link:choco: 'TODO'
- _link:cask:
- - src: "${XDG_CONFIG_HOME:-$HOME/.config}/LogiOptionsPlus"
- target: "$HOME/Library/Application Support/LogiOptionsPlus"
+ _env:
+ LOGI_OPTIONS_PLUS_APPDATA:
+ cask: "$HOME/Library/Application Support/LogiOptionsPlus"
+ choco: "TODO"
choco: logioptionsplus
cask: logi-options-plus
exe: https://download01.logi.com/web/ftp/pub/techsupport/optionsplus/logioptionsplus_installer.exe
@@ -1685,6 +1690,25 @@ softwarePackages:
_name: MongoDB Atlas
brew: mongodb-atlas
choco: mongodb-atlas
+ pywin32:
+ _bin: pywin32
+ _name: Pywin32
+ _github: https://github.com/mhammond/pywin32
+ pipx:windows: pywin32
+ terminal-notifier:
+ _bin: terminal-notifier
+ _name: Terminal Notifier
+ _github: https://github.com/julienXX/terminal-notifier
+ brew:darwin: terminal-notifier
+ apprise:
+ _deps:
+ - pywin32
+ - terminal-notifier
+ _bin: apprise
+ _name: Apprise
+ _github: https://github.com/caronc/apprise
+ dnf: apprise
+ pipx: apprise
privaxy:
_bin: privaxy
_desc: Privaxy is the next generation tracker and advertisement blocker. It blocks ads and trackers by MITMing HTTP(s) traffic.
@@ -1704,18 +1728,12 @@ softwarePackages:
_home: https://brave.com/
_name: Brave Browser
_app: Brave Browser.app
- _link:cask:
- - src: "${XDG_CONFIG_HOME:-$HOME/.config}/BraveSoftware/Brave-Browser/Default"
- target: "$HOME/Library/Application Support/BraveSoftware/Brave-Browser/Default"
- _link:choco:
- - src: "${XDG_CONFIG_HOME:-$HOME/.config}/BraveSoftware/Brave-Browser/Default"
- target: "%APPDATA%/Local/BraveSoftware/Brave-Browser/User Data"
- _link:flatpak:
- - src: "${XDG_CONFIG_HOME:-$HOME/.config}/BraveSoftware/Brave-Browser/Default"
- target: "$HOME/.var/app/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default"
- _link:snap:
- - src: "${XDG_CONFIG_HOME:-$HOME/.config}/BraveSoftware/Brave-Browser/Default"
- target: "$HOME/snap/brave/current/.config/BraveSoftware/Brave-Browser/Default"
+ _env:
+ BRAVE_BROWSER_APPDATA:
+ cask: "$HOME/Library/Application Support/BraveSoftware/Brave-Browser/Default"
+ choco: "%APPDATA%/Local/BraveSoftware/Brave-Browser/User Data"
+ flatpak: "$HOME/.var/app/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default"
+ snap: "$HOME/snap/brave/current/.config/BraveSoftware/Brave-Browser/Default"
_post: |
#!/usr/bin/env bash
# @brief See `google-chrome` `_post` script for more details
@@ -1797,6 +1815,18 @@ softwarePackages:
emerge: broot
pkgin: broot
port: broot
+ rsyslog:
+ _bin: rsyslog
+ _github: https://github.com/rsyslog/rsyslog
+ _name: RSyslog
+ _service: rsyslog
+ _ports:
+ - port: 514
+ proto: tcp
+ apt: rsyslog
+ brew: rsyslog
+ dnf: rsyslog
+ pacman: rsyslog
browser-sync:
_bin: browser-sync
_desc: '[Browsersync](https://browsersync.io/) allows you to keep multiple browsers & devices in sync when building websites'
@@ -2007,12 +2037,10 @@ softwarePackages:
_home: https://www.google.com/chrome/
_name: Google Chrome
_app: Google Chrome.app
- _link:cask:
- - src: "${XDG_CONFIG_HOME:-$HOME/.config}/google-chrome/Default"
- target: "$HOME/Library/Application Support/Google/Chrome/Default"
- _link:flatpak:
- - src: "${XDG_CONFIG_HOME:-$HOME/.config}/google-chrome/Default"
- target: "$HOME/.var/app/com.google.Chrome/config/google-chrome/Default"
+ _env:
+ GOOGLE_CHROME_APPDATA:
+ cask: "$HOME/Library/Application Support/Google/Chrome/Default"
+ flatpak: "$HOME/.var/app/com.google.Chrome/config/google-chrome/Default"
_post: |
#!/usr/bin/env bash
# @file Chrome Settings / Extensions
@@ -2124,11 +2152,11 @@ softwarePackages:
_name: Tor Browser
_restricted: true
_app: Tor Browser.app
- _link:cask:
- - src: "${XDG_CONFIG_HOME:-$HOME/.config}/tor-browser"
- target: "$HOME/Library/Application Support/TorBrowser-Data/Tor"
- _link:choco: 'TODO'
- _link:flatpak: 'TODO'
+ _env:
+ TOR_BROWSER_APPDATA:
+ cask: "$HOME/Library/Application Support/TorBrowser-Data/Tor"
+ choco: "TODO"
+ flatpak: "TODO"
cask: tor-browser
choco: tor-browser
flatpak: com.github.micahflee.torbrowser-launcher
@@ -3965,21 +3993,15 @@ softwarePackages:
_home: https://www.mozilla.org/en-US/firefox/new/
_name: Mozilla Firefox
_app: Firefox.app
- _link:
- - src: "${XDG_CONFIG_HOME:-$HOME/.config}/firefox/profiles"
- target: "$HOME/.mozilla/firefox"
- _link:cask:
- - src: "${XDG_CONFIG_HOME:-$HOME/.config}/firefox/profiles"
- target: "$HOME/Library/Application Support/Firefox/Profiles"
- _link:choco:
- - src: "${XDG_CONFIG_HOME:-$HOME/.config}/firefox/profiles"
- target: 'TODO'
- _link:flatpak:
- - src: "${XDG_CONFIG_HOME:-$HOME/.config}/firefox/profiles"
- target: "$HOME/.var/app/org.mozilla.firefox/.mozilla/firefox"
- _link:snap:
- - src: "${XDG_CONFIG_HOME:-$HOME/.config}/firefox/profiles"
- target: "$HOME/snap/firefox/common/.mozilla/firefox"
+ _env:
+ FIREFOX_APPDATA:
+ apt: "$HOME/.mozilla/firefox"
+ cask: "$HOME/Library/Application Support/Firefox/Profiles"
+ choco: "TODO"
+ dnf: "$HOME/.mozilla/firefox"
+ flatpak: "$HOME/.var/app/org.mozilla.firefox/.mozilla/firefox"
+ pacman: "$HOME/.mozilla/firefox"
+ snap: "$HOME/snap/firefox/common/.mozilla/firefox"
_post: |
#!/usr/bin/env bash
# @file Firefox Settings / Add-Ons / Profiles
@@ -4852,6 +4874,9 @@ softwarePackages:
_github: https://github.com/gabrie30/ghorg
_home: null
_name: ghorg
+ _post: |
+ #!/usr/bin/env bash
+ ghorg reclone
ansible: professormanhattan.ghorg
brew: gabrie30/utils/ghorg
github: github.com/gabrie30/ghorg
@@ -6883,16 +6908,12 @@ softwarePackages:
ferdium:
_bin: ferdium
_app: Ferdium.app
- _link:cask:
- - src: "${XDG_CONFIG_HOME:-$HOME/.config}/Ferdium"
- target: "$HOME/Library/Application Support/Ferdium"
- _link:choco: 'TODO'
- _link:flatpak:
- - src: "${XDG_CONFIG_HOME:-$HOME/.config}/Ferdium"
- target: "$HOME/.var/app/org.ferdium.Ferdium/config/Ferdium"
- _link:snap:
- - src: "${XDG_CONFIG_HOME:-$HOME/.config}/Ferdium"
- target: "$HOME/snap/ferdium/current/.config/Ferdium"
+ _env:
+ FERDIUM_APPDATA:
+ cask: "$HOME/Library/Application Support/Ferdium"
+ choco: TODO
+ flatpak: "$HOME/.var/app/org.ferdium.Ferdium/config/Ferdium"
+ snap: "$HOME/snap/ferdium/current/.config/Ferdium"
cask: ferdium
choco: ferdium
flatpak: org.ferdium.Ferdium
@@ -6929,12 +6950,12 @@ softwarePackages:
_home: https://getmailspring.com/
_name: Mailspring
_app: Mailspring.app
- _link:cask:
- - src: "${XDG_CONFIG_HOME:-$HOME/.config}/mailspring"
- target: "$HOME/Library/Application Support/Mailspring"
- _link:choco: 'TODO'
- _link:flatpak: 'TODO'
- _link:snap: 'TODO'
+ _env:
+ MAILSPRING_APPDATA:
+ cask: "$HOME/Library/Application Support/Mailspring"
+ choco: "TODO"
+ flatpak: "TODO"
+ snap: "TODO"
cask: mailspring
choco: mailspring
flatpak: com.getmailspring.Mailspring
@@ -6960,12 +6981,12 @@ softwarePackages:
_home: null
_name: MarkText
_app: MarkText.app
- _link:cask:
- - src: "${XDG_CONFIG_HOME:-$HOME/.config}/marktext"
- target: "$HOME/Library/Application Support/marktext"
- _link:choco: 'TODO'
- _link:flatpak: 'TODO'
- _link:winget: 'TODO'
+ _env:
+ MARK_TEXT_APPDATA:
+ cask: "$HOME/Library/Application Support/marktext"
+ choco: "TODO"
+ flatpak: "TODO"
+ winget: "TODO"
cask: mark-text
choco: marktext
flatpak: com.github.marktext.marktext
@@ -7038,11 +7059,11 @@ softwarePackages:
_home: https://www.microsoft.com/en-us/edge
_name: Microsoft Edge
_app: Microsoft Edge.app
- _link:cask:
- - src: "${XDG_CONFIG_HOME:-$HOME/.config}/microsoft-edge/Default"
- target: "$HOME/Library/Application Support/Microsoft Edge/Default"
- _link:choco: 'TODO'
- _link:flatpak: 'TODO'
+ _env:
+ MICROSOFT_EDGE_APPDATA:
+ cask: "$HOME/Library/Application Support/Microsoft Edge/Default"
+ choco: "TODO"
+ flatpak: "TODO"
_post: |
#!/usr/bin/env bash
# @brief See `google-chrome` `_post` script for more details
@@ -8117,10 +8138,10 @@ softwarePackages:
_name: Notion AI
_note: Waiting on Linux install alternative.
_app: Notion.app
- _link:cask:
- - src: "${XDG_CONFIG_HOME:-$HOME/.config}/notion"
- target: "$HOME/Library/Application Support/Notion"
- _link:choco: 'TODO'
+ _env:
+ NOTION_APPDATA:
+ cask: "$HOME/Library/Application Support/Notion"
+ choco: "TODO"
cask: notion
choco: notion
mas: 1559269364
@@ -8187,9 +8208,9 @@ softwarePackages:
_home: https://www.warp.dev/
_name: Warp Terminal
_app: Warp.app
- _link:cask:
- - src: "${XDG_CONFIG_HOME:-$HOME/.config}/warp-terminal"
- target: "$HOME/Library/Application Support/dev.warp.Warp-Stable"
+ _env:
+ WARP_TERMINAL_APPDATA:
+ cask: "$HOME/Library/Application Support/dev.warp.Warp-Stable"
cask: warp
figma:
_bin: null
@@ -9685,12 +9706,10 @@ softwarePackages:
_github: null
_home: https://remmina.org/
_name: Remmina
- _link:flatpak:
- - src: "${XDG_CONFIG_HOME:-$HOME/.config}/remmina/remmina.pref"
- target: "$HOME/.var/app/org.remmina.Remmina/config/remmina/remmina.pref"
- _link:snap:
- - src: "${XDG_CONFIG_HOME:-$HOME/.config}/remmina/remmina.pref"
- target: "$HOME/snap/remmina/current/.config/remmina/remmina.pref"
+ _env:
+ REMMINA_APPDATA:
+ flatpak: "$HOME/.var/app/org.remmina.Remmina/config/remmina/remmina.pref"
+ snap: "$HOME/snap/remmina/current/.config/remmina/remmina.pref"
apt: remmina
dnf: remmina
flatpak: org.remmina.Remmina
@@ -11616,6 +11635,24 @@ softwarePackages:
pipx: termius
snap: termius-app
yay: termius
+ dagu:
+ _bin: dagu
+ _github:
+ _name: Dagu
+ _post: |
+ #!/usr/bin/env bash
+ sudo mkdir -p /var/log/dagu
+ dagu start-all
+ _boot: |
+ #!/usr/bin/env bash
+ # TODO - Add _boot capability
+ dagu start-all
+ brew: yohamta/tap/dagu
+ runitor:
+ _bin: runitor
+ _github: https://github.com/bdd/runitor
+ _name: Runitor
+ go: bdd.fi/x/runitor/cmd/runitor@latest
postfix:
_bin: postfix
_desc: Postfix is an e-mail server that can be used to send e-mail