initial commit
This commit is contained in:
commit
c754df18c2
15 changed files with 374 additions and 0 deletions
3
README.md
Normal file
3
README.md
Normal file
|
@ -0,0 +1,3 @@
|
|||
# .dots
|
||||
|
||||
### personal dot files for proxmox based hosts
|
58
scripts/notify.sh
Executable file
58
scripts/notify.sh
Executable file
|
@ -0,0 +1,58 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# author: Daniel Sommer <daniel.sommer@velvettear.de>
|
||||
# license: MIT
|
||||
|
||||
# usage:
|
||||
# notify.sh <topic> <payload> [options]
|
||||
# documentation @ https://docs.ntfy.sh/publish
|
||||
|
||||
url="https://notify.velvettear.de"
|
||||
user="velvettear"
|
||||
password="\$Velvet90"
|
||||
|
||||
[[ -z "$1" ]] && printf "error: no topic specified\n" 1>&2 && exit 1
|
||||
[[ -z "$2" ]] && printf "error: no payload specified\n" 1>&2 && exit 1
|
||||
|
||||
url="$url/$1"
|
||||
payload="$2"
|
||||
|
||||
# check if payload is a file
|
||||
if [[ -e "$payload" ]]; then
|
||||
args+=("-T" "$(realpath $payload)" "-H" "Filename: $(basename $payload)")
|
||||
else
|
||||
args+=("-d" "$payload")
|
||||
fi
|
||||
|
||||
# check for valid priority level
|
||||
function checkPriority() {
|
||||
prio="$(printf "$1" | tr '[:upper:]' '[:lower:]')"
|
||||
if [[ "$prio" == "min" ]] || [[ "$prio" == "low" ]] || [[ "$prio" == "default" ]] || [[ "$prio" == "high" ]] || [[ "$prio" == "max" ]] || [[ "$prio" == "urgent" ]]; then
|
||||
args+=("-H" "Priority: $prio")
|
||||
fi
|
||||
}
|
||||
|
||||
# check arguments
|
||||
index=1
|
||||
for arg in "$@"; do
|
||||
((index++))
|
||||
value="${!index}"
|
||||
case "$arg" in
|
||||
-e|--emoji|-i|--icon)
|
||||
args+=("-H" "Tags: $value")
|
||||
;;
|
||||
-p|--priority)
|
||||
checkPriority "$value"
|
||||
;;
|
||||
-t|--title)
|
||||
args+=("-H" "Title: $value")
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
echo "user: $user"
|
||||
echo "pw: $password"
|
||||
echo "url: $url"
|
||||
echo "args: ${args[@]}"
|
||||
|
||||
curl -u $user:$password "${args[@]}" $url
|
24
scripts/prepare-fs.sh
Executable file
24
scripts/prepare-fs.sh
Executable file
|
@ -0,0 +1,24 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# author: Daniel Sommer <daniel.sommer@velvettear.de>
|
||||
# license: MIT
|
||||
|
||||
# this script is used in a systemd service file (wanted by other services)
|
||||
|
||||
[[ "$EUID" != 0 ]] && printf "error: permission denied!\n" && exit 1
|
||||
|
||||
printf "preparing filesystem...\n"
|
||||
|
||||
if [[ ! -d "/var/log/pveproxy" ]]; then
|
||||
printf "creating directory '/var/log/pveproxy' with owner 'www-data'...\n"
|
||||
mkdir -p /var/log/pveproxy
|
||||
chown -R www-data:www-data /var/log/pveproxy
|
||||
fi
|
||||
|
||||
if [[ ! -d "/var/log/nginx" ]]; then
|
||||
printf "creating directory '/var/log/nginx' with owner 'www-data'...\n"
|
||||
mkdir -p /var/log/nginx
|
||||
chown -R www-data:www-data /var/log/nginx
|
||||
fi
|
||||
|
||||
printf "finished preparing the filesystem!\n"
|
21
scripts/restic/j5040.sh
Executable file
21
scripts/restic/j5040.sh
Executable file
|
@ -0,0 +1,21 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# author: Daniel Sommer <daniel.sommer@velvettear.de>
|
||||
# license: MIT
|
||||
|
||||
[[ "$EUID" != 0 ]] && printf "error: permission denied!\n" >&2 && exit 1
|
||||
|
||||
directories=(
|
||||
"/etc"
|
||||
)
|
||||
|
||||
printf ">> starting restic backup...\n"
|
||||
|
||||
for directory in ${directories[@]}; do
|
||||
seconds="$SECONDS"
|
||||
printf "> backing up '"$directory"'...\n"
|
||||
restic backup --verbose --no-scan --retry-lock 3h "$directory"
|
||||
printf "> backup of '"$directory"' finished after "$(( $SECONDS - $seconds ))" seconds!\n"
|
||||
done
|
||||
|
||||
printf ">> restic backup finished after "$SECONDS" seconds!\n"
|
30
scripts/restic/n100.sh
Executable file
30
scripts/restic/n100.sh
Executable file
|
@ -0,0 +1,30 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# author: Daniel Sommer <daniel.sommer@velvettear.de>
|
||||
# license: MIT
|
||||
|
||||
[[ "$EUID" != 0 ]] && printf "error: permission denied!\n" >&2 && exit 1
|
||||
|
||||
directories=(
|
||||
"/etc"
|
||||
"/mnt/storage/audiobooks"
|
||||
"/mnt/storage/comics"
|
||||
"/mnt/storage/documents"
|
||||
"/mnt/storage/ebooks"
|
||||
"/mnt/storage/images"
|
||||
"/mnt/storage/music"
|
||||
"/mnt/storage/software"
|
||||
"/mnt/storage/syncthing"
|
||||
"/mnt/storage/videos"
|
||||
)
|
||||
|
||||
printf ">> starting restic backup...\n"
|
||||
|
||||
for directory in ${directories[@]}; do
|
||||
seconds="$SECONDS"
|
||||
printf "\n> backing up '"$directory"'...\n"
|
||||
restic backup --verbose --no-scan --retry-lock 3h "$directory"
|
||||
printf "> backup of '"$directory"' finished after "$(( $SECONDS - $seconds ))" seconds!\n"
|
||||
done
|
||||
|
||||
printf ">> restic backup finished after "$SECONDS" seconds!\n"
|
32
scripts/restic/restic.sh
Executable file
32
scripts/restic/restic.sh
Executable file
|
@ -0,0 +1,32 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# author: Daniel Sommer <daniel.sommer@velvettear.de>
|
||||
# license: MIT
|
||||
|
||||
# exit on error
|
||||
|
||||
# check permissions
|
||||
[[ "$EUID" != 0 ]] && printf "error: permission denied!\n" >&2 && exit 1
|
||||
|
||||
# check if script exists
|
||||
script="$(dirname $(realpath "$0"))/$(hostname).sh"
|
||||
[[ ! -x "$script" ]] && printf "error: script '"$script"' does not exist or is not executable!\n" >&2 && exit 1
|
||||
|
||||
# get hostname
|
||||
host="$(hostname)"
|
||||
[[ -z "$host" ]] && host="$HOST"
|
||||
|
||||
# setup restic
|
||||
export RESTIC_REPOSITORY="rest:http://192.168.100.101:8000"
|
||||
export RESTIC_PASSWORD="\$Velvet90"
|
||||
export RESTIC_COMPRESSION="max"
|
||||
export RESTIC_CACHE_DIR="/var/cache/restic"
|
||||
|
||||
# setup log file
|
||||
log="/var/log/restic-"$(hostname)".log"
|
||||
|
||||
# source / execute restic script
|
||||
source "$script" 2>&1 | tee "$log"
|
||||
|
||||
# send a notification when finished
|
||||
/home/velvettear/.dots/scripts/notify.sh "backups" "$log" --title "$host" --icon "green_circle"
|
63
scripts/update.sh
Executable file
63
scripts/update.sh
Executable file
|
@ -0,0 +1,63 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# author: Daniel Sommer <daniel.sommer@velvettear.de>
|
||||
# license: MIT
|
||||
|
||||
# debian update script
|
||||
|
||||
# exit on ctrl-c
|
||||
trap 'printf ""$font_colored_bold"\n>> stopping system update after "$SECONDS" seconds..."$font_default"\n" && exit 1' SIGINT
|
||||
|
||||
# font styles & colors
|
||||
font_default="\e[0m"
|
||||
font_colored="\e[32;1m"
|
||||
font_colored_bold="\e[31;1m"
|
||||
|
||||
[[ "$EUID" != "0" ]] && printf ""$font_colored_bold">> error: permission denied!"$font_default"\n" && exit 1
|
||||
|
||||
for arg in "$@"; do
|
||||
case "$arg" in
|
||||
-n|--noconfirm)
|
||||
noconfirm="true"
|
||||
;;
|
||||
-r|--reboot)
|
||||
reboot="true"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
printf ""$font_colored_bold">> system update started..."$font_default"\n"
|
||||
|
||||
printf ""$font_colored"> updating packages..."$font_default"\n"
|
||||
/usr/bin/apt-get update
|
||||
[[ "$noconfirm" ]] && /usr/bin/apt-get dist-upgrade -y || /usr/bin/apt-get dist-upgrade
|
||||
|
||||
printf ""$font_colored"> cleaning cache..."$font_default"\n"
|
||||
rm -rf "/var/cache//usr/bin/apt-get/*"
|
||||
[[ "$noconfirm" ]] && /usr/bin/apt-get clean -y || /usr/bin/apt-get clean
|
||||
|
||||
printf ""$font_colored"> removing orphaned packages..."$font_default"\n"
|
||||
[[ "$noconfirm" ]] && /usr/bin/apt-get autoremove --purge -y || /usr/bin/apt-get autoremove --purge
|
||||
|
||||
printf ""$font_colored"> removing \"no valid subscription\" message..."$font_default"\n"
|
||||
sed -i.bak "s/data.status.* !== 'ACTIVE'/false/I" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
|
||||
|
||||
printf ""$font_colored"> updating restic..."$font_default"\n"
|
||||
restic self-update
|
||||
|
||||
#printf ""$font_colored"> installing dark theme..."$font_default"\n"
|
||||
#bash <(curl -s https://raw.githubusercontent.com/Weilbyte/PVEDiscordDark/master/PVEDiscordDark.sh ) install
|
||||
|
||||
printf ""$font_colored_bold">> system updated finished after "$SECONDS" seconds!"$font_default"\n"
|
||||
|
||||
[[ ! "$reboot" ]] && exit 0
|
||||
|
||||
timeout="5"
|
||||
printf ""$font_colored"> rebooting system in "
|
||||
while [[ "$timeout" -gt "0" ]]; do
|
||||
printf "$timeout... "
|
||||
timeout="$(( timeout - 1 ))"
|
||||
sleep 1
|
||||
done
|
||||
printf "now!"$font_default"\n"
|
||||
systemctl reboot
|
18
scripts/zfs-scrub.sh
Executable file
18
scripts/zfs-scrub.sh
Executable file
|
@ -0,0 +1,18 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# author: Daniel Sommer <daniel.sommer@velvettear.de>
|
||||
# license: MIT
|
||||
|
||||
[[ "$EUID" != 0 ]] && printf "error: permission denied!\n" && exit 1
|
||||
|
||||
printf "scrubbing all available zfs pools...\n"
|
||||
|
||||
mapfile -t pools < <(zpool list | tail -n +2 | awk '{print $1}')
|
||||
for pool in "${pools[@]}"; do
|
||||
timestamp="$SECONDS"
|
||||
printf "scrubbing zfs pool '"$pool"'...\n"
|
||||
zpool scrub -w "$pool"
|
||||
printf "scrubbing zfs pool '"$pool"' finished after $(( $SECONDS - $timestamp )) seconds!\n"
|
||||
done
|
||||
|
||||
printf "scrubbing all available zfs pools finished after $SECONDS seconds!\n"
|
11
systemd/prepare-fs.service
Normal file
11
systemd/prepare-fs.service
Normal file
|
@ -0,0 +1,11 @@
|
|||
[Unit]
|
||||
Description=filesystem preparation
|
||||
Before=pveproxy.service
|
||||
Before=nginx.service
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=/etc/velvettear/scripts/prepare-fs.sh
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
10
systemd/restic/restic.service
Normal file
10
systemd/restic/restic.service
Normal file
|
@ -0,0 +1,10 @@
|
|||
[Unit]
|
||||
Description=restic backup
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=/home/velvettear/.dots/scripts/restic/restic.sh
|
||||
ExecStartPost=/home/velvettear/.dots/scripts/notify.sh "backups" "/var/log/restic-%i.log" --title "%i" --icon "green_circle"
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
8
systemd/restic/restic.timer
Normal file
8
systemd/restic/restic.timer
Normal file
|
@ -0,0 +1,8 @@
|
|||
[Unit]
|
||||
Description=restic backup
|
||||
|
||||
[Timer]
|
||||
OnCalendar=*-*-* 00:03:00
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
9
systemd/zfs/zfs-scrub.service
Normal file
9
systemd/zfs/zfs-scrub.service
Normal file
|
@ -0,0 +1,9 @@
|
|||
[Unit]
|
||||
Description=scrub all available zfs pools
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=/etc/velvettear/scripts/zfs-scrub.sh
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
8
systemd/zfs/zfs-scrub.timer
Normal file
8
systemd/zfs/zfs-scrub.timer
Normal file
|
@ -0,0 +1,8 @@
|
|||
[Unit]
|
||||
Description=scrub all available zfs pools weekly
|
||||
|
||||
[Timer]
|
||||
OnCalendar=Sun *-*-* 08:00:00
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
71
zsh/zprofile
Executable file
71
zsh/zprofile
Executable file
|
@ -0,0 +1,71 @@
|
|||
#!/usr/bin/env zsh
|
||||
|
||||
# author: Daniel Sommer <daniel.sommer@velvettear.de>
|
||||
# license: MIT
|
||||
|
||||
# export environment variables
|
||||
|
||||
# set .dots directory
|
||||
export VELVETTEAR_DOTS="$HOME/.dots"
|
||||
|
||||
# set prompt
|
||||
export PROMPT="%(!.%F{red}.)%n@%m > %/%(!.#.$) %f"
|
||||
|
||||
# set general variables
|
||||
export USER="$(whoami)"
|
||||
export HOST="$(hostname)"
|
||||
export HOSTNAME="$HOST"
|
||||
export TMP="/tmp"
|
||||
export TEMP="/tmp"
|
||||
export TMPDIR="/tmp"
|
||||
|
||||
# set nvim as default editor
|
||||
export EDITOR="nvim"
|
||||
export VISUAL="nvim"
|
||||
export PAGER="less"
|
||||
|
||||
# configure the shell history
|
||||
export HISTFILE="$HOME/.zhistory"
|
||||
export SAVEHIST="100"
|
||||
export HISTSIZE="10000"
|
||||
export HISTTIMEFORMAT="%d.%m.%Y %H:%M:%S"
|
||||
export HISTCONTROL="ignoredups"
|
||||
|
||||
# set all kinds of aliases
|
||||
|
||||
# file and directory listings
|
||||
alias ls="ls --color=auto"
|
||||
alias la="ls -a --color=auto"
|
||||
alias ll="ls -l --color=auto"
|
||||
alias lla="ls -la --color=auto"
|
||||
|
||||
# grep
|
||||
alias grep="grep --color=auto"
|
||||
alias fgrep="fgrep --color=auto"
|
||||
alias egrep="egrep --color=auto"
|
||||
|
||||
# diff
|
||||
alias diff="diff --color=auto"
|
||||
|
||||
# tar
|
||||
alias tarp="tar -I pigz -cf -v"
|
||||
alias untarp="tar -I pigz -xf"
|
||||
|
||||
# general
|
||||
alias ..="cd .."
|
||||
alias whereami="realpath ."
|
||||
alias c="clear"
|
||||
|
||||
# create / delete / copy / move
|
||||
alias rmr="rm -r"
|
||||
alias rmrf="rm -rf"
|
||||
alias cpr="cp -R"
|
||||
alias cprf="cp -Rf"
|
||||
alias mkdirp="mkdir -p"
|
||||
|
||||
# applications
|
||||
alias vi="nvim"
|
||||
alias vim="nvim"
|
||||
|
||||
# scripts
|
||||
alias update="sudo $VELVETTEAR_DOTS/scripts/update.sh"
|
8
zsh/zshrc
Executable file
8
zsh/zshrc
Executable file
|
@ -0,0 +1,8 @@
|
|||
#!/usr/bin/env zsh
|
||||
|
||||
# author: Daniel Sommer <daniel.sommer@velvettear.de>
|
||||
# license: MIT
|
||||
|
||||
# exit if user is not root
|
||||
[[ "$EUID" != "0" ]] && return
|
||||
echo "LOGIN AS ROOT"
|
Loading…
Reference in a new issue