Compare commits
	
		
			3 Commits 
		
	
	
		
			09288ce752
			...
			b5b48016ef
		
	
	| Author | SHA1 | Date | 
|---|---|---|
| 
							
							
								
									
								
								 | 
						b5b48016ef | |
| 
							
							
								
									
								
								 | 
						6760db72c5 | |
| 
							
							
								
									
								
								 | 
						28f6655e2e | 
							
								
								
									
										8
									
								
								.bashrc
								
								
								
								
							
							
						
						
									
										8
									
								
								.bashrc
								
								
								
								
							| 
						 | 
				
			
			@ -87,13 +87,7 @@ fi
 | 
			
		|||
# }}}
 | 
			
		||||
 | 
			
		||||
# Node {{{
 | 
			
		||||
# Move nvm folder away from home directory
 | 
			
		||||
export NVM_DIR="${XDG_CONFIG_HOME}/nvm"
 | 
			
		||||
# Pretty much what is in `/usr/share/nvm/init-nvm.sh` but we add the `--no-use`
 | 
			
		||||
# flag to `nvm.sh` to make it lazy
 | 
			
		||||
. /usr/share/nvm/nvm.sh --no-use
 | 
			
		||||
. /usr/share/nvm/bash_completion
 | 
			
		||||
. /usr/share/nvm/install-nvm-exec
 | 
			
		||||
. /usr/share/nvm/init-nvm.sh
 | 
			
		||||
# }}}
 | 
			
		||||
 | 
			
		||||
# Go {{{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,24 +2,74 @@
 | 
			
		|||
 | 
			
		||||
# Save (encrypted) password database to cloud storage
 | 
			
		||||
#
 | 
			
		||||
# Can be run manually or daily by enabling the corresponding systemd user
 | 
			
		||||
# service and timer, i.e.
 | 
			
		||||
#
 | 
			
		||||
# `systemctl --user enable save-passwddb.service`
 | 
			
		||||
# `systemctl --user enable save-passwddb.timer`
 | 
			
		||||
# Usage:
 | 
			
		||||
#   save-passwddb         - Save databases to cloud
 | 
			
		||||
#   save-passwddb init    - Restore databases from cloud (with single backup archive)
 | 
			
		||||
 | 
			
		||||
RCLONE_REMOTE="proton-drive"
 | 
			
		||||
RCLONE_REMOTE="proton"
 | 
			
		||||
SOURCE_DIR="$HOME/doc"
 | 
			
		||||
TARGET_DIR="$RCLONE_REMOTE:doc"
 | 
			
		||||
BACKUP_DIR="$HOME/doc/bak"
 | 
			
		||||
 | 
			
		||||
# Reference: <https://unix.stackexchange.com/questions/100871/in-a-bash-if-condition-how-to-check-whether-any-files-matching-a-simple-wildcard>
 | 
			
		||||
if [ 0 -lt "$(ls $HOME/doc/*.kdbx 2>/dev/null | wc -w)" ]; then
 | 
			
		||||
  echo "Saving KeePassXC databases and database keys"
 | 
			
		||||
  rclone copyto                         \
 | 
			
		||||
    "$HOME/doc/" "$RCLONE_REMOTE:doc"/  \
 | 
			
		||||
    --progress                          \
 | 
			
		||||
    --include "/*.{kdbx,kdbx.key}"
 | 
			
		||||
else
 | 
			
		||||
  echo "No password database found, use the following commands to restore"
 | 
			
		||||
  echo ""
 | 
			
		||||
  echo "rclone copy $RCLONE_REMOTE:doc \"$HOME/doc\" --include \"*.{kdbx,kdbx.key}\""
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
function save_databases() {
 | 
			
		||||
  if [ 0 -lt "$(ls $SOURCE_DIR/*.kdbx 2>/dev/null | wc -w)" ]; then
 | 
			
		||||
    echo "[save] Saving KeePassXC databases and database keys"
 | 
			
		||||
    rclone copy "$SOURCE_DIR" "$TARGET_DIR" \
 | 
			
		||||
      --include "/*.{kdbx,kdbx.key}" \
 | 
			
		||||
      --progress
 | 
			
		||||
    echo "[save] Done"
 | 
			
		||||
  else
 | 
			
		||||
    echo "[save] No password database found, restore with:"
 | 
			
		||||
    echo ""
 | 
			
		||||
    echo "  $0 init"
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function backup_existing() {
 | 
			
		||||
  mkdir -p "$BACKUP_DIR"
 | 
			
		||||
  local timestamp=$(date +%Y%m%d-%H%M%S)
 | 
			
		||||
  local backup_file="$BACKUP_DIR/passwddb_backup_${timestamp}.tar.gz"
 | 
			
		||||
 | 
			
		||||
  echo "[backup] Creating backup archive: ${backup_file}"
 | 
			
		||||
  tar -czf "$backup_file" -C "$SOURCE_DIR" $(find "$SOURCE_DIR" -maxdepth 1 -type f \( -name "*.kdbx" -o -name "*.kdbx.key" \) -printf "%f ")
 | 
			
		||||
  echo "[backup] Backup complete"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function restore_databases() {
 | 
			
		||||
  echo "[init] Checking for existing files..."
 | 
			
		||||
 | 
			
		||||
  local existing_files=$(find "$SOURCE_DIR" -maxdepth 1 -type f \( -name "*.kdbx" -o -name "*.kdbx.key" \) -print)
 | 
			
		||||
 | 
			
		||||
  if [ -n "$existing_files" ]; then
 | 
			
		||||
    echo "[init] Found existing database files:"
 | 
			
		||||
    echo "$existing_files" | while read -r file; do
 | 
			
		||||
      echo "  - $file"
 | 
			
		||||
    done
 | 
			
		||||
    read -p "[init] Create backup archive of existing files? [y/N] " -n 1 -r
 | 
			
		||||
    echo
 | 
			
		||||
    if [[ $REPLY =~ ^[Yy]$ ]]; then
 | 
			
		||||
      backup_existing
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  echo "[init] Restoring KeePassXC databases and database keys"
 | 
			
		||||
  mkdir -p "$SOURCE_DIR"
 | 
			
		||||
  rclone copy "$TARGET_DIR" "$SOURCE_DIR" \
 | 
			
		||||
    --include "*.{kdbx,kdbx.key}" \
 | 
			
		||||
    --progress
 | 
			
		||||
  echo "[init] Done"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
case "$1" in
 | 
			
		||||
  ""|save)
 | 
			
		||||
    save_databases
 | 
			
		||||
    ;;
 | 
			
		||||
  init)
 | 
			
		||||
    restore_databases
 | 
			
		||||
    ;;
 | 
			
		||||
  *)
 | 
			
		||||
    echo "Usage: $0 [init|save]"
 | 
			
		||||
    exit 1
 | 
			
		||||
    ;;
 | 
			
		||||
esac
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -59,6 +59,7 @@ typescript-language-server
 | 
			
		|||
unzip
 | 
			
		||||
vim-language-server
 | 
			
		||||
wget
 | 
			
		||||
xclip
 | 
			
		||||
yaml-language-server
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue