Laptop #2

Closed
thomasave wants to merge 119 commits from laptop into master
8 changed files with 296 additions and 28 deletions
Showing only changes of commit 2759b53f3c - Show all commits

1
.gitignore vendored
View File

@ -1,3 +1,4 @@
.zcompdump* .zcompdump*
mpv/watch_later mpv/watch_later
.luarc.json .luarc.json
zsh/secrets.sh

View File

@ -12,3 +12,4 @@ PointNav
DomainNet DomainNet
MiniGrid MiniGrid
Spirelli Spirelli
distill

189
scripts/backup.sh Executable file
View File

@ -0,0 +1,189 @@
#!/bin/bash
##########################################
# Tokens #
##########################################
set -o pipefail
source "$XDG_CONFIG_HOME"/zsh/secrets.sh
export XDG_RUNTIME_DIR=/run/user/1000
##########################################
# Create sqlite3 backup for Vaultwarden #
##########################################
rm /home/server/Containers/pw.thomasave.be/data/backup.sqlite3 /home/server/Containers/robbertave.com/data/backup.sqlite3
sqlite3 /home/server/Containers/pw.thomasave.be/data/db.sqlite3 "VACUUM INTO '/home/server/Containers/pw.thomasave.be/data/backup.sqlite3'"
sqlite3 /home/server/Containers/robbertave.com/data/database.sqlite "VACUUM INTO '/home/server/Containers/robbertave.com/data/backup.sqlite3'"
##########################################
# Unlock the Vault #
##########################################
echo "$ZFS_PASSPHRASE" | ssh vault /home/server/Storage/Thomas/Scripts/Mount/borg_unlock.sh
##########################################
# Run the backups #
##########################################
echo -e '\n\n\n'
echo "Running Caddy Backups"
borg create -s --progress \
--exclude /home/server/Containers/Caddy/Data\
10.4.0.1:Storage/Thomas/Borg/Containers/caddy::'{hostname}-{now}' \
/home/server/Containers/Caddy\
echo -e '\n\n\n'
echo "Running git.thomasave.be Backups"
borg create -s --progress \
--exclude /home/server/Containers/git.thomasave.be/gitea/gitea/sessions \
--exclude /home/server/Containers/git.thomasave.be/gitea/gitea/jwt \
--exclude /home/server/Containers/git.thomasave.be/gitea/ssh \
10.4.0.1:Storage/Thomas/Borg/Containers/git.thomasave.be::'{hostname}-{now}' \
/home/server/Containers/git.thomasave.be
echo -e '\n\n\n'
echo "Running pw.thomasave.be Backups"
borg create -s --progress \
--exclude /home/server/Containers/pw.thomasave.be/data/icon_cache \
--exclude /home/server/Containers/pw.thomasave.be/data/sends \
10.4.0.1:Storage/Thomas/Borg/Containers/pw.thomasave.be::'{hostname}-{now}' \
/home/server/Containers/pw.thomasave.be
echo -e '\n\n\n'
echo "Running stats.thomasave.be Backups"
borg create -s --progress \
--exclude /home/server/Containers/stats.thomasave.be/logs \
10.4.0.1:Storage/Thomas/Borg/Containers/stats.thomasave.be::'{hostname}-{now}' \
/home/server/Containers/stats.thomasave.be
echo -e '\n\n\n'
echo "Running robbertave.com Backups"
borg create -s --progress \
10.4.0.1:Storage/Thomas/Borg/Containers/robbertave.com::'{hostname}-{now}' \
/home/server/Containers/robbertave.com
echo -e '\n\n\n'
echo "Running DNS Backups"
borg create -s --progress \
--exclude /home/server/Containers/adguard.thomasave.be/work \
10.4.0.1:Storage/Thomas/Borg/Adguard::'{hostname}-{now}' \
/home/server/Containers/adguard.thomasave.be
echo -e '\n\n\n'
echo "Running Workspace Backups"
borg create -s --progress \
10.4.0.1:Storage/Thomas/Borg/Workspace::'{hostname}-{now}' \
/home/server/Workspace/
borg prune --keep-daily 7 --keep-weekly 4 --keep-monthly -1 --save-space 10.4.0.1:Storage/Thomas/Borg/Workspace
borg compact 10.4.0.1:Storage/Thomas/Borg/Workspace
echo -e '\n\n\n'
echo "Running photos.thomasave.be Backups"
borg create -s --progress \
10.4.0.1:Storage/Thomas/Borg/Containers/photos.thomasave.be::'{hostname}-{now}' \
/home/server/Containers/photos.thomasave.be
borg prune --keep-daily 7 --keep-weekly 4 --keep-monthly -1 --save-space 10.4.0.1:Storage/Thomas/Borg/Containers/photos.thomasave.be
borg compact 10.4.0.1:Storage/Thomas/Borg/Containers/photos.thomasave.be
echo -e '\n\n\n'
echo "Running Authentik Backups"
borg create -s --progress \
10.4.0.1:Storage/Thomas/Borg/Containers/auth.thomasave.be::'{now:%Y-%m-%d}' \
/home/server/Containers/auth.thomasave.be
echo -e '\n\n\n'
echo "Running Yolande Backups"
borg create -s --progress \
10.4.0.1:Storage/Thomas/Borg/Yolande::'{hostname}-{now}' \
/home/server/Storage/Yolande
borg prune --keep-daily 7 --keep-weekly 4 --keep-monthly -1 --save-space 10.4.0.1:Storage/Thomas/Borg/Yolande
borg compact 10.4.0.1:Storage/Thomas/Borg/Yolande
echo -e '\n\n\n'
echo "Running Thomas Backups"
borg create -s --progress \
10.4.0.1:Storage/Thomas/Borg/Thomas::'{hostname}-{now}' \
/home/server/Storage/Thomas/Documents \
/home/server/Storage/Thomas/Pictures \
/home/server/Storage/Thomas/Videos \
/home/server/Storage/Thomas/Crypt
borg prune --keep-daily 7 --keep-weekly 4 --keep-monthly -1 --save-space 10.4.0.1:Storage/Thomas/Borg/Thomas
borg compact 10.4.0.1:Storage/Thomas/Borg/Thomas
echo -e '\n\n\n'
echo "Running Niels Backups"
borg create -s --progress \
--exclude /home/server/Storage/Niels/Backups \
10.4.0.1:Storage/Thomas/Borg/Niels::'{now:%Y-%m-%d}' \
/home/server/Storage/Niels/
borg prune --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --save-space 10.4.0.1:Storage/Thomas/Borg/Niels
borg compact 10.4.0.1:Storage/Thomas/Borg/Niels
# echo -e '\n\n\n'
# echo "Running Experiment Backups"
# borg create -s --progress \
# 10.4.0.1:Storage/Thomas/Borg/Containers/exp.thomasave.be::'{hostname}-{now}' \
# /home/server/Workspace/Experiments/Backend/data/
##########################################
# Perpare Cloud Backup #
##########################################
echo -e '\n\n\n'
echo "Peparing cloud backup"
borg create -s --progress \
--exclude /home/server/Containers/pw.thomasave.be/data/icon_cache \
--exclude /home/server/Containers/pw.thomasave.be/data/sends \
--exclude /home/server/Containers/git.thomasave.be/gitea/gitea/sessions \
--exclude /home/server/Containers/git.thomasave.be/gitea/ssh \
--exclude /home/server/Containers/git.thomasave.be/gitea/gitea/jwt \
--exclude /home/server/Containers/Caddy/Data\
10.4.0.1:Storage/Thomas/Borg/Cloud::'{hostname}-{now}' \
/home/server/Containers/pw.thomasave.be\
/home/server/Containers/robbertave.com\
/home/server/Containers/auth.thomasave.be\
/home/server/Containers/git.thomasave.be\
/home/server/Containers/Boaty \
/home/server/Containers/Caddy \
borg prune -d 365 --save-space 10.4.0.1:Storage/Thomas/Borg/Cloud
borg compact 10.4.0.1:Storage/Thomas/Borg/Cloud
ssh vault /home/server/Storage/Thomas/Borg/Sync.sh
##########################################
# Lock the Vault #
##########################################
ssh vault /home/server/Storage/Thomas/Scripts/Mount/borg_lock.sh
##########################################
# Backups to Oracle Cloud #
##########################################
echo "Running Oracle Cloud Backup, containing Vaultwarden, robbertave.com, git.thomasave.be, Boaty, Stats, Caddy, and Niels."
borg create -s --progress \
--exclude /home/server/Containers/pw.thomasave.be/data/icon_cache \
--exclude /home/server/Containers/pw.thomasave.be/data/sends \
--exclude /home/server/Containers/git.thomasave.be/gitea/gitea/sessions \
--exclude /home/server/Containers/git.thomasave.be/gitea/ssh \
--exclude /home/server/Containers/git.thomasave.be/gitea/gitea/jwt \
--exclude /home/server/Containers/stats.thomasave.be/logs \
--exclude /home/server/Containers/Caddy/Data\
--exclude /home/server/Storage/Niels/Backups \
ubuntu@10.0.0.6:~/Backups/Borg::'{hostname}-{now}' \
/home/server/Containers/pw.thomasave.be\
/home/server/Containers/robbertave.com\
/home/server/Containers/git.thomasave.be\
/home/server/Containers/auth.thomasave.be\
/home/server/Containers/Boaty \
/home/server/Containers/Caddy \
/home/server/Containers/stats.thomasave.be \
/home/server/Storage/Niels \

2
scripts/sendmail Executable file
View File

@ -0,0 +1,2 @@
#!/bin/sh
tee -a /home/server/mail.log | /usr/sbin/sendmailtelegram

18
scripts/sendmailtelegram Executable file
View File

@ -0,0 +1,18 @@
#!/usr/bin/python3
import telegram
import fileinput
import asyncio
async def run():
text = "Vault Etienne:\n\n"
for line in fileinput.input():
text += line
bot = telegram.Bot(token="381718873:AAElFmI2BDjumCehhWicuksE0vutrPSkoGA")
chat_id = 125754925
await bot.send_message(chat_id, text)
if __name__ == "__main__":
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait([loop.create_task(run())]))
loop.close()

21
scripts/sync_vault.sh Executable file
View File

@ -0,0 +1,21 @@
#!/bin/bash
source "$XDG_CONFIG_HOME"/zsh/secrets.sh
for _ in {1..2}; do
OUTPUT=$(echo "$ZFS_PASSPHRASE" | ssh 10.4.0.1 zfs load-key Vault/Thomas/Encrypted 2>&1);
if [ "$OUTPUT" == "Key load error: Key already loaded for 'Vault/Thomas/Encrypted'." ]; then
echo "Key successfully loaded, starting syncoid"
syncoid --no-privilege-elevation --no-sync-snap tank/Storage/Thomas/Workspace 10.4.0.1:Vault/Thomas/Encrypted/Storage/Workspace
syncoid --no-privilege-elevation --no-sync-snap tank/Storage/Thomas 10.4.0.1:Vault/Thomas/Encrypted/Storage/T
syncoid --no-privilege-elevation --no-sync-snap tank/Storage/Niels 10.4.0.1:Vault/Thomas/Encrypted/Storage/N
syncoid --no-privilege-elevation --no-sync-snap tank/Storage/Yolande 10.4.0.1:Vault/Thomas/Encrypted/Storage/Y
syncoid --no-privilege-elevation --no-sync-snap tank/Containers 10.4.0.1:Vault/Thomas/Encrypted/Containers
ssh 10.4.0.1 zfs unload-key Vault/Thomas/Encrypted
exit 0
fi
done
echo "Found output instead: $OUTPUT"
echo "Failed to load key: $OUTPUT" | sendmail
exit 1

View File

@ -87,36 +87,72 @@ function zvm_after_init() {
source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
fi fi
# Use FZY instead of FZF for ctrl-t function cd_to() {
function find_files() { setopt localoptions pipefail no_aliases 2> /dev/null
zle -I local dir=$1
PATHS="" if [[ -z "$dir" ]]; then
if [ -d ~/.dotfiles ]; then zle redisplay
PATHS="$PATHS\n$(fd . ~/.dotfiles -t d -d 1)" return 0
fi fi
if [ -d ~/Workspace ]; then zle push-line # Clear buffer. Auto-restored on next prompt.
PATHS="$PATHS\n$(ssh mallorea fdfind . ~/Workspace -t d -d 8)" cd $dir
fi
if [ -d ~/Containers ]; then
PATHS="$PATHS\n$(fd . ~/Containers -t d -d 2)"
fi
if [ -d ~/Storage/Shared ]; then
PATHS="$PATHS\n~/Storage/Shared"
PATHS="$PATHS\n$(fd . ~/Storage/Shared -t d -d 2)"
fi
if [ -d ~/Storage/Thomas ]; then
PATHS="$PATHS\n~/Storage/Thomas"
PATHS="$PATHS\n$(fd . ~/Storage/Thomas -t d -d 1)"
fi
BUFFER=cd "$(echo $PATHS | fzy -l 20)"
zle accept-line zle accept-line
clear local ret=$?
unset dir # ensure this doesn't end up appearing in prompt expansion
zle reset-prompt
} }
zle -N find_files
bindkey "^T" find_files # Use FZY instead of FZF for ctrl-t
bindkey -M emacs "^T" find_files function find_global_files() {
bindkey -M vicmd "^T" find_files zle -I
bindkey -M viins "^T" find_files FZY_CACHE=~/.cache/fzy_paths
if [ -f $FZY_CACHE ]; then
# Check if cache is older than 1 day
if [ $(($(date +%s) - $(date -r $FZY_CACHE +%s))) -gt 86400 ]; then
rm $FZY_CACHE
fi
fi
if [ ! -f $FZY_CACHE ]; then
PATHS=""
if [ -d ~/.dotfiles ]; then
PATHS="$PATHS\n$(fd . ~/.dotfiles -t d -d 2)"
fi
if [ -d ~/Workspace ]; then
PATHS="$PATHS\n$(ssh mallorea fdfind . ~/Workspace -t d -d 8)"
fi
if [ -d ~/Containers ]; then
PATHS="$PATHS\n$(fd . ~/Containers -t d -d 2)"
fi
if [ -d ~/Storage/Shared ]; then
PATHS="$PATHS\n/home/server/Storage/Shared"
PATHS="$PATHS\n$(fd . ~/Storage/Shared -t d -d 2)"
fi
if [ -d ~/Storage/Thomas ]; then
PATHS="$PATHS\n/home/server/Storage/Thomas"
PATHS="$PATHS\n$(fd . ~/Storage/Thomas -t d -d 5)"
fi
echo -e $PATHS > $FZY_CACHE
fi
cd_to "$(cat $FZY_CACHE | fzy -l 20)"
}
function find_local_files() {
zle -I
cd_to "$(fd . -t d | fzy -l 20)"
}
zle -N find_global_files
zle -N find_local_files
bindkey "^T" find_global_files
bindkey -M emacs "^T" find_global_files
bindkey -M vicmd "^T" find_global_files
bindkey -M viins "^T" find_global_files
bindkey "^Y" find_local_files
bindkey -M emacs "^Y" find_local_files
bindkey -M vicmd "^Y" find_local_files
bindkey -M viins "^Y" find_local_files
} }
zstyle ':completion:*' matcher-list '' 'm:{a-zA-Z}={A-Za-z}' 'r:|=*' 'l:|=* r:|=*' zstyle ':completion:*' matcher-list '' 'm:{a-zA-Z}={A-Za-z}' 'r:|=*' 'l:|=* r:|=*'

@ -1 +1 @@
Subproject commit 1f28e1886dc8e49f41b817634d5c7695b6abb145 Subproject commit 7cf6fd19cf2ab38ec5b116eced158377cb3c35f6