magictomagic / backup

Backup my configutation
GNU General Public License v3.0
0 stars 0 forks source link

Infrastructure #6

Open magictomagic opened 2 years ago

magictomagic commented 2 years ago

Singleton

singletonize(){
  LOCK_DIR=""$XDG_RUNTIME_DIR"/lock"
  LOCK_FILE="$LOCK_DIR/"$(basename $0)".lock"
  mkdir -p $LOCK_DIR
  touch $LOCK_FILE || {
    echo "Cannot touch "$LOCK_FILE""
    echo "Start Failed"
    exit 1
  }
  exec 7<>"$LOCK_FILE" || {
    echo "Could not bind or echo"
    exit 1
  }
  flock -n 7 || {
    echo "Another thread $(cat $LOCK_FILE) is running"
    exit 0
  }

  trap "rm $LOCK_FILE" EXIT KILL
  echo $$ >> "$LOCK_FILE"
  echo "Declared as singleton"
}
export -f singletonize
magictomagic commented 2 years ago
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
  . ~/.bashrc
fi

export MOZ_ENABLE_WAYLAND=1
export XDG_PICTURES_DIR=$HOME/Pictures

# grimshot default directory
export XDG_SCREENSHOTS_DIR=$XDG_PICTURES_DIR/Screenshots

createLogDirectory(){
  local logDir;

  if [[ -x $XDG_RUNTIME_DIR ]];then
    logDir="$XDG_RUNTIME_DIR/log"
  else
    logDir="$HOME/.config/log"
  fi

  mkdir -p $logDir

  if [[ -d $logDir ]];then
    echo $logDir
  else
    exit 1
  fi
}

export LOG_DIR=$(createLogDirectory)

cleanLogDirectory(){
  rm -rf $LOG_DIR
}
# debug:0; info:1; warn:2; error:3
export LOG_LEVEL=0
log() {
  local logType;
  logType=$1
  local msg;
  msg=$2
  local logFile;
  logFile="$LOG_DIR/$(basename $0).log"
  dateTime=$(date +'%F %H:%M:%S')
  local logFormat;
  logFormat="[${logType}]\t${dateTime}\tFuncname: ${FUNCNAME[@]/log/}\t[line:$(caller 0 | awk '{print$1}')]\t${msg}"
  {
  case $logType in
    debug)
      [[ $LOG_LEVEL -le 0 ]] && echo -e "\033[37m${logFormat}\033[0m" ;;
    info)
      [[ $LOG_LEVEL -le 1 ]] && echo -e "\033[32m${logFormat}\033[0m" ;;
    warn)
      [[ $LOG_LEVEL -le 2 ]] && echo -e "\033[33m${logFormat}\033[0m" ;;
    error)
      [[ $LOG_LEVEL -le 3 ]] && echo -e "\033[31m${logFormat}\033[0m" ;;
    esac
  } | tee -a $logFile
}
export -f log

singletonize(){
  LOCK_DIR=""$XDG_RUNTIME_DIR"/lock"
  LOCK_FILE="$LOCK_DIR/"$(basename $0)".lock"
  mkdir -p $LOCK_DIR
  touch $LOCK_FILE || {
    echo "Cannot touch "$LOCK_FILE""
    echo "Start Failed"
    exit 1
  }
  exec 7<>"$LOCK_FILE" || {
    echo "Could not bind or echo"
    exit 1
  }
  flock -n 7 || {
    echo "Another thread $(cat $LOCK_FILE) is running"
    exit 0
  }

  trap "rm $LOCK_FILE" EXIT KILL
  echo $$ >> "$LOCK_FILE"
  echo "Declared as singleton"
}
export -f singletonize

. $HOME/.cargo/env
# User specific environment and startup programs
[[ "$(tty)" = "/dev/tty1" ]] && exec sway
magictomagic commented 2 years ago
#!/bin/bash

# Set Environment
# set -Eeuo pipefail

# Set Variable
XDG_DATA_HOME="$HOME/.local/share"
PRIMITIVE_SCRIPTS_LOCATION="$HOME/.config/wofi/scripts"
DESKTOP_SCRIPTS_LOCATION="$XDG_DATA_HOME/applications"

generateScript(){
  name=$(expr match $1 '\(.*\)\.sh$')
  cat << EOF > $DESKTOP_SCRIPTS_LOCATION/$name.desktop
[Desktop Entry]
Type=Application
Name=${name}
Exec=/bin/bash $2/$1
EOF
}

deleteScript(){
  rm $DESKTOP_SCRIPTS_LOCATION/$(expr match $1 '\(.*\)\.sh').desktop
}

singletonize

inotifywait -m -e create -e delete -e moved_from -e moved_to $PRIMITIVE_SCRIPTS_LOCATION \
  | while read -r NEWFILE
do
  log info "\n------ started "$NEWFILE"------"
  created=$(echo ${NEWFILE} \
    | grep -E "^.* (CREATE|MOVED_TO) .*\.sh$" \
    | awk '{print $3}')
  deleted=$(echo ${NEWFILE} \
    | grep -E "^.* (DELETE|MOVED_FROM) .*\.sh$" \
    | awk '{print $3}')
  if [[ ${#deleted} -ge 1 ]];then
    log info "deleted: $deleted"
    deleteScript $deleted
  fi
  if [[ ${#created} -ge 1 ]];then
    log info "created: $created"
    generateScript $created $PRIMITIVE_SCRIPTS_LOCATION
  fi
  log info "------ ended ------\n"
done