From 8ea9f8f1e95642f12e8b374211dd9b6ad2a339e6 Mon Sep 17 00:00:00 2001 From: Daniel Fichtinger Date: Sun, 10 Nov 2024 02:53:06 -0500 Subject: [PATCH] Added scripts --- autoyadm.sh | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++ tracked | 16 +++++++++++++++ yadmadd.sh | 37 +++++++++++++++++++++++++++++++++ 3 files changed, 112 insertions(+) create mode 100755 autoyadm.sh create mode 100644 tracked create mode 100755 yadmadd.sh diff --git a/autoyadm.sh b/autoyadm.sh new file mode 100755 index 0000000..730697c --- /dev/null +++ b/autoyadm.sh @@ -0,0 +1,59 @@ +#!/bin/bash + +# This script reads tracked paths +# from a file and executes "yadm add" +# on all of them, then creates a timestamped +# commit and pushes the changes. + +AYE="AutoYADM Error:" +AYM="AutoYADM:" +# We check not to overwrite the user's env setting +if [ -z "$VAR" ]; then + AUTOYADMPUSH=0 +fi + +# Set hostname explicitly because it +# may not be present in this shell environment +if [ -z "$HOST" ]; then + HOST="$(hostname)" +fi + +# First we read each path from "tracked" +(while read -r path; do + # we disable ignored warning for this subshell + # Execute yadm add on each real file + # if the path points to a directory + # This ensures symlinks are not added + if [ -d "$path" ]; then + find "$path" -type f -exec yadm add {} + + # If just a file, we add directly + elif [ -f "$path" ]; then + yadm add "$path" + # If neither file nor dir, something is very wrong! + else + echo "$AYE Target must be a directory or a file!" + exit 1 + fi +done) <"$HOME/.config/yadm/tracked" + +# Define the location of the ssh-agent environment +sshenv="$HOME/.ssh/environment-$HOST" +if [[ -n $(yadm status --porcelain) ]]; then + yadm commit -m "AutoYADM commit: $(date +'%Y-%m-%d %H:%M:%S')" + # Check if the ssh-agent env exists + if [[ -f "$sshenv" ]]; then + if ((!AUTOYADMPUSH)); then + echo "$AYM Pushing disabled, aborting..." + exit 1 + fi + # Directive to suppress shellcheck warning + # shellcheck source=/dev/null + source "$sshenv" + yadm push + else + echo "$AYE ssh-agent environment not found, aborting push..." + exit 1 + fi +fi + +echo "$AYM Push successful!" diff --git a/tracked b/tracked new file mode 100644 index 0000000..c20ce97 --- /dev/null +++ b/tracked @@ -0,0 +1,16 @@ +/home/fic/.config/yadm +/home/fic/.config/nvim +/home/fic/.config/btop +/home/fic/.config/dunst +/home/fic/.config/i3 +/home/fic/.config/kitty +/home/fic/.config/lazygit +/home/fic/.config/nushell +/home/fic/.config/polybar +/home/fic/.config/rofi +/home/fic/.config/tmux +/home/fic/.config/wal +/home/fic/.config/zathura +/home/fic/.config/starship.toml +/home/fic/.zshrc +/home/fic/.bashrc diff --git a/yadmadd.sh b/yadmadd.sh new file mode 100755 index 0000000..b5b85a2 --- /dev/null +++ b/yadmadd.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +# This script takes file or directories as +# arguments and appends them to the "tracked" +# file, for use by autoyadm.sh + +YADMDIR="$HOME/.config/yadm" +AYE="AutoYADM Error:" +AYM="AutoYADM:" + +# We check if any arguments have been provided +if [ $# -eq 0 ]; then + echo "$AYE $0 [ ...]" + exit 1 +fi + +# We loop through arguments +for arg in "$@"; do + # check if current arg is a real path + if [ ! -e "$arg" ]; then + echo "$AYE '$arg' is not a valid path." + continue + fi + # get its absolute path + abs=$(realpath "$arg") + # check if it's inside home dir + if [[ "$abs" == "$HOME"* ]]; then + # convert to path relative to ~ + rel=${abs#"$HOME/"} + # append to tracked file + echo "$HOME/$rel" >>"$YADMDIR/tracked" + echo "$AYM Tracking $HOME/$rel" + else + echo "$AYM Path must be inside the home directory." + exit 1 + fi +done