diff --git a/calm b/calm index 287b9a7..4f1be27 100755 --- a/calm +++ b/calm @@ -11,31 +11,31 @@ DAISY_INTERNAL=1 . $(dirname $(realpath $0))/daisy.source -PIDS=$@ +pids=$@ errorFn() { - echo calm: Invalid operation or no such PID/process \(\"$(echo "$PIDS" | tr '\n' ' ' | cut -c -20)...\"\) + echo calm: Invalid operation or no such PID/process \(\"$(echo "$pids" | tr '\n' ' ' | cut -c -20)...\"\) exit } -for pid in $PIDS +for pid in $pids do # Process to PID in elegant way - NEWPIDS=$(pidof "$pid") - if [ "$NEWPIDS" ] + newpids=$(pidof "$pid") + if [ "$newpids" ] then - BINNY=$pid - pid=$NEWPIDS + binary=$pid + pid=$newpids else - NEWBINS=$pid - BINNY=$(ps -p "$pid" -o comm= 2>/dev/null ) + newbins=$pid + binary=$(ps -p "$pid" -o comm= 2>/dev/null ) if [ $? != 0 ] then errorFn fi fi - echo Calming down $pid \("$BINNY"\)... + echo Calming down $pid \("$binary"\)... sudo renice -n 0 -p $pid; done diff --git a/cdz b/cdz index 18095b8..ede5b6c 100755 --- a/cdz +++ b/cdz @@ -48,8 +48,8 @@ israr=$? # TAR archives come in many forms, if none of our tests say it's tar # ...but it looks like tar and barks like tar, let's take the shot. # Seems to work fairly well for the record. -RES=$(echo "$target" | grep ".tar") -if [[ $RES != "" ]]; +res=$(echo "$target" | grep ".tar") +if [[ $res != "" ]]; then istar=0 fi diff --git a/daisy.source b/daisy.source index d8e6c14..629e17b 100755 --- a/daisy.source +++ b/daisy.source @@ -16,105 +16,6 @@ then export DAISY_BIN=$(basename $0) fi -# Intro function -function daisy_help() -{ - OLD_IFS="$IFS" - IFS= - echo -e "===================================================================" - echo -e "" - echo -e "Thanks for installing LACKADAISICAL!" - echo -e "This project aims to provide useful utilities as well as learning" - echo -e "material." - echo -e "" - echo -e "It is still under heavy development, not all of the things on this" - echo -e "list are present/implemented. Utils marked with * are incomplete." - echo -e "" - echo -e "===================================================================" - echo -e "" - echo -e "This suite provides a number of functions, aliases and scripts." - echo -e "They are all aimed at enhancing your efficiency." - echo -e "" - echo -e "===================================================================" - echo -e "" - echo -e "These are the included binaries:" - echo -e " - calm: Reduce a process niceness to 0." - echo -e " - cdz: This utility extracts an archive to /tmp and changes" - echo -e " directory to it in a new shell instance. Upon exit," - echo -e " the files are wiped. If \`archivemount\` is present," - echo -e " it will be used to mount the archive instead! You can" - echo -e " bypass this behavior by specifying an env value of;" - echo -e " NO_ARCHIVEMOUNT=1. The standard script supports zip," - echo -e " tarballs, and rar archives. We recommend relying on" - echo -e " \`archivemount\` if you have it installed." - echo -e " - editx: Uses your standard CLI editor to create/modify a" - echo -e " file and make it executable." - echo -e " - filewait: This tool is given a filename of a file that does" - echo -e " not exist yet. When the file appears on disk, the" - echo -e " program quits and simply returns the filename. This" - echo -e " can be used in personal workflows." - echo -e " - newday: A basic but powerful journaling system. Recommended" - echo -e " to set up via crontab. Can be used for everything" - echo -e " from diaries to BTRFS snapshots." - echo -e " - own: A simple utility. It effectively uses chown -R" - echo -e " user:user on its target. Root permissions required!" - echo -e " - short: This tool allows you to set up directory shortcuts." - echo -e " It enhances cd t to integrate itsef using its own" - echo -e " syntax. It is similar to wd." - echo -e " - shrc: This tool allows you to edit the RC file for your" - echo -e " shell in your preferred editor. After saving, the" - echo -e " file is sourced by your shell." - echo -e " - sw: A basic function that swaps two files by content." - echo -e " Useful for restoring backups." - echo -e " - what: This is a tool similar to which and others, the key" - echo -e " difference is that it returns partial matches. It can" - echo -e " be used to search for binaries." - echo -e " -*binbox: This tool can be used to pack bash scripts into one" - echo -e " big megascript, much like how \`busybox\` works." - echo -e " You can also make symlinks to it to invoke a specific" - echo -e " script (current symlinks do not work well)." - echo -e "" - echo -e "===================================================================" - echo -e "" - echo -e "There are aliases and functions included within this file as well:" - echo -e " - bak/unbak: These small utilities make backups of files by making" - echo -e " a copy with a .bak suffix. Unbak reverses the process" - echo -e " using sw and removes the backup." - echo -e " - lsa: A simple alias for ls -lah." - echo -e " - lsn: A simple alias for ls -lah --sort=time --reverse." - echo -e " - lss: A simple alias for ls -lah --sort=size --reverse." - echo -e " - editbin: An alias for editx $\(which \). Saves on typing." - echo -e " - ched: Like chsh but for your editor (EDITOR env). A list" - echo -e " from which you can choose an installed editor" - echo -e " (CLI or GUI) is shown." - echo -e " - cdf: Use fzf to find a file and then cd to its location." - echo -e " - ldrc: Edits this file and sources it, similarly to shrc." - echo -e " - daisy_init: Alias for directly sourcing this file from any" - echo -e " LACKADAISICAL binary. You may use this yourself." - echo -e " - daisy_cbin: Contains the name of the current LACKADAISICAL" - echo -e " binary being run." - echo -e " -*daisy_enc: Converts a file/stdin to a base64 block that can be" - echo -e " decoded by passing the output(s) to daisy_dec." - echo -e " - *_multi: A version of daisy_enc that runs encodes multiple" - echo -e " files and outputs daisy_base64_data blocks to a file" - echo -e " or stdout." - echo -e " -*daisy_dec: Converts daisy_base64_data blocks back to the form" - echo -e " it was in originally." - echo -e " - *_multi: A version of daisy_dec that runs on multiple input" - echo -e " blocks that are either stored in a file or stdin." - echo -e "" - echo -e "===================================================================" - echo -e "" - echo -e "To uninstall LACKADAISICAL, simply remove the source line from your" - echo -e "shell RC, and reload it. This does not remove the files!" - echo -e "" - echo -e "To read this notice again, call the function 'daisy_help'." - echo -e "" - echo -e "===================================================================" - - IFS="$OLD_IFS" -} - # Variables for use in other utilities # Find the right argument for our folder ARG=$0 @@ -123,6 +24,19 @@ then ARG="${BASH_SOURCE[0]}" fi +# Check for dependencies +function daisy_dependency_check() +{ + command -v $1 1>/dev/null 2>/dev/null; + res=$? + echo $(($res ^ 1)) +} + +DAISY_HAS_fzf=$(daisy_dependency_check fzf) +DAISY_HAS_md5sum=$(daisy_dependency_check md5sum) +DAISY_HAS_peco=$(daisy_dependency_check peco) +DAISY_HAS_tree=$(daisy_dependency_check tree) + export DAISY_FOLDER=$(dirname $(realpath $ARG)) export DAISY_SOURCE_FILE=$(realpath $ARG) export DAISY_AVAILABLE=0 @@ -135,32 +49,21 @@ if [[ ! -d "$DAISY_CONFIG_FOLDER" ]]; then # Create the folder with its basics mkdir -p "$DAISY_CONFIG_FOLDER" - echo "export EDITOR=$EDITOR" > "$DAISY_CONFIG_FOLDER/editor.src" daisy_help NEW_INSTALL=1 fi +# Source everything in the config folder +for f in "$DAISY_CONFIG_FOLDER"/*; do + [ -f "$file" ] && source "$f" +done + # Installation into PATH if [[ ! $PATH == *"$DAISY_FOLDER"* ]]; then export PATH="$PATH:$DAISY_FOLDER" - [[ NEW_INSTALL -eq 1 ]] && echo -e "Lackadaisical binaries have been added to your PATH variable." fi -# Load override from config (default is $EDITOR - so no change is made) -_EDITOR=$(cat "$DAISY_CONFIG_FOLDER"/editor.src | grep "EDITOR=" | sed 's/export EDITOR=//g') - -NEED_CHED=0 -if [[ -z $EDITOR ]]; -then - NEED_CHED=1 -fi - -# Never call if we're in internal mode -if [[ $DAISY_INTERNAL -eq 1 ]]; -then - NEED_CHED=0 -fi # Set up the basic alias for `shrc` # Do not set these up if DAISY_INTERNAL=1 is set, or infinite recursion could @@ -210,6 +113,28 @@ function cdf() cd $(dirname $(fzf)) } +function cdp() +{ + if [[ $DAISY_HAS_peco != 1 || $DAISY_HAS_tree != 1 ]]; + then + echo "This alias requires the utility 'peco' 'tree'. Please install them." + echo "Consider using 'cdf' instead." + return 1 + fi + cd $(dirname $(tree -fia --noreport . | peco)) +} + +function editpeco +{ + if [[ $DAISY_HAS_peco != 1 ]]; + then + echo "This alias requires the utility 'peco'. Please install it." + return 1 + fi + + tree --noreport -fia . | peco --prompt "Press CTRL+C to quit - query:" --exec "xargs -o -I{} $EDITOR {}" +} + # for convenience purposes function editbin() { @@ -226,14 +151,14 @@ function ched() available_editors=() for editor in "${editors[@]}"; do - EDITOR_REAL=$(which $editor) + EDITOR_REAL=$(command -v "$editor") if command -v "$EDITOR_REAL" >/dev/null 2>&1; then if [[ $(realpath "$EDITOR") == "$EDITOR_REAL" ]]; then - available_editors+=("$EDITOR_REAL" "$editor (current choice)") + available_editors+=("$EDITOR_REAL" "$editor (current choice)") else - available_editors+=("$EDITOR_REAL", "$editor") + available_editors+=("$EDITOR_REAL" "$editor") fi fi done @@ -245,9 +170,9 @@ function ched() fi # Present all choices - CHOICE=$(dialog --clear --title "Select Text Editor (Recommendation: nano)" \ + CHOICE=$(dialog --output-fd 1 --clear --title "Select Text Editor (Recommendation: nano)" \ --menu "Choose one of the installed text editors:" 15 50 6 \ - "${available_editors[@]}" 3>&1 1>&2 2>&3) + "${available_editors[@]}") DIALOG_RET=$? if [ $DIALOG_RET -ne 0 ]; @@ -256,8 +181,8 @@ function ched() return fi - CHOICE=$(which $CHOICE) echo export EDITOR=$CHOICE > "$DAISY_CONFIG_FOLDER/editor.src" + echo export DAISY_EDITOR=$CHOICE >> "$DAISY_CONFIG_FOLDER/editor.src" echo export DAISY_OLD_EDITOR=$EDITOR >> "$DAISY_CONFIG_FOLDER/editor.src" # Seems silly but this is also where we should export these @@ -286,7 +211,6 @@ function wait_for_editor() function ldrc() { FROM_RC=0 $EDITOR "$DAISY_SOURCE_FILE" - wait_for_editor $EDITOR "$DAISY_SOURCE_FILE" source "$DAISY_SOURCE_FILE" } @@ -352,30 +276,11 @@ alias daisy_init='source "$DAISY_SOURCE_FILE"' ############################################################################### # end of FUNCTIONS and ALIASES ################################################ ############################################################################### -if [[ $NEED_CHED -eq 1 ]]; -then - # Editor is unset, pick one, set `vi` as backup - TXT1="There is no standard EDITOR environment variable defined. Choose one of the installed text editors." - TXT2="You can always change it later wih `ched`, part of the Lackadaisical suite." - ched $TXT1 $TXT2 -fi # End of user section! export DAISY_AVAILABLE=1 # Start of internal section - -# Check for dependencies -function daisy_dependency_check() -{ - command -v $1 1>/dev/null 2>/dev/null; - res=$? - echo $(($res ^ 1)) -} - -DAISY_HAS_fzf=$(daisy_dependency_check fzf) -DAISY_HAS_md5sum=$(daisy_dependency_check md5sum) - function daisy_quit_if_no() { has_dep=$DAISY_HAS_$1 @@ -398,8 +303,133 @@ function daisy_quit_if_no() [ -d "$DAISY_FOLDER" ] && export DAISY_AVAILABLE=1 -# Source everything in the config folder -# We do this at the end so that we do not run into isues -for file in "$DAISY_CONFIG_FOLDER"/*; do - [ -f "$file" ] && source "$file" -done +# Help function +function daisy_help() +{ + OLD_IFS="$IFS" + IFS= + echo -e "===================================================================" + echo -e "" + echo -e "Thanks for installing LACKADAISICAL!" + echo -e "This project aims to provide useful utilities as well as learning" + echo -e "material." + echo -e "" + echo -e "It is still under heavy development, not all of the things on this" + echo -e "list are present/implemented. Utils marked with * are incomplete." + echo -e "" + echo -e "===================================================================" + echo -e "" + echo -e "This suite provides a number of functions, aliases and scripts." + echo -e "They are all aimed at enhancing your efficiency." + echo -e "" + echo -e "===================================================================" + echo -e "" + echo -e "These are the included binaries:" + echo -e " - calm:" + echo -e " Reduce a process niceness to 0." + echo -e " - cdz:" + echo -e " This utility extracts an archive to /tmp and changes" + echo -e " directory to it in a new shell instance. Upon exit," + echo -e " the files are wiped. If \`archivemount\` is present," + echo -e " it will be used to mount the archive instead! You can" + echo -e " bypass this behavior by specifying an env value of;" + echo -e " NO_ARCHIVEMOUNT=1. The standard script supports zip," + echo -e " tarballs, and rar archives. We recommend relying on" + echo -e " archivemount\` if you have it installed." + echo -e " - editx:" + echo -e " Uses your standard CLI editor to create/modify a" + echo -e " file and make it executable." + echo -e " - filewait:" + echo -e " This tool is given a filename of a file that does" + echo -e " not exist yet. When the file appears on disk, the" + echo -e " program quits and simply returns the filename. This" + echo -e " can be used in personal workflows." + echo -e " - newday:" + echo -e " A basic but powerful journaling system. Recommended" + echo -e " to set up via crontab. Can be used for everything" + echo -e " from diaries to BTRFS snapshots." + echo -e " - own:" + echo -e " A simple utility. It effectively uses chown -R" + echo -e " user:user on its target. Root permissions required!" + echo -e " - short:" + echo -e " This tool allows you to set up directory shortcuts." + echo -e " It enhances cd t to integrate itsef using its own" + echo -e " syntax. It is similar to wd." + echo -e " - shrc:" + echo -e " This tool allows you to edit the RC file for your" + echo -e " shell in your preferred editor. After saving, the" + echo -e " file is sourced by your shell." + echo -e " - sw:" + echo -e " A basic function that swaps two files by content." + echo -e " Useful for restoring backups." + echo -e " - what:" + echo -e " This is a tool similar to which and others, the key" + echo -e " difference is that it returns partial matches. It can" + echo -e " be used to search for binaries." + echo -e " -*binbox:" + echo -e " This tool can be used to pack bash scripts into one" + echo -e " big megascript, much like how \`busybox\` works." + echo -e " You can also make symlinks to it to invoke a specific" + echo -e " script (current symlinks do not work well)." + echo -e "" + echo -e "===================================================================" + echo -e "" + echo -e "There are aliases and functions included within this file as well:" + echo -e " - bak/unbak:" + echo -e " These small utilities make backups of files by making" + echo -e " a copy with a .bak suffix. Unbak reverses the process" + echo -e " using sw and removes the backup." + echo -e " - lsa:" + echo -e " A simple alias for ls -lah." + echo -e " - lsn:" + echo -e " A simple alias for ls -lah --sort=time --reverse." + echo -e " - lss:" + echo -e " A simple alias for ls -lah --sort=size --reverse." + echo -e " - editbin:" + echo -e " An alias for editx $\(which \). Saves on typing." + echo -e " - editpeco:" + echo -e " This function uses peco+tree like 'cdp', but opens" + echo -e " your editor on the selected file(s). After you exit" + echo -e " your editor(s), you are returned to peco where you left" + echo -e " off." + echo -e " - ched:" + echo -e " Like chsh but for your editor (EDITOR env). A list" + echo -e " from which you can choose an installed editor" + echo -e " (CLI or GUI) is shown." + echo -e " - cdf:" + echo -e " Use fzf to find a file and then cd to its location." + echo -e " - cdp:" + echo -e " Similar to 'cdf' but uses tree+peco for the query." + echo -e " - ldrc:" + echo -e " Edits this file and sources it, similarly to shrc." + echo -e " - daisy_init:" + echo -e " Alias for directly sourcing this file from any" + echo -e " LACKADAISICAL binary. You may use this yourself." + echo -e " - daisy_cbin:" + echo -e " Contains the name of the current LACKADAISICAL" + echo -e " binary being run." + echo -e " -*daisy_enc:" + echo -e " Converts a file/stdin to a base64 block that can be" + echo -e " decoded by passing the output(s) to daisy_dec." + echo -e " - *_multi:" + echo -e " A version of daisy_enc that runs encodes multiple" + echo -e " files and outputs daisy_base64_data blocks to a file" + echo -e " or stdout." + echo -e " -*daisy_dec:" + echo -e " Converts daisy_base64_data blocks back to the form" + echo -e " it was in originally." + echo -e " - *_multi:" + echo -e " A version of daisy_dec that runs on multiple input" + echo -e " blocks that are either stored in a file or stdin." + echo -e "" + echo -e "===================================================================" + echo -e "" + echo -e "To uninstall LACKADAISICAL, simply remove the source line from your" + echo -e "shell RC, and reload it. This does not remove the files!" + echo -e "" + echo -e "To read this notice again, call the function 'daisy_help'." + echo -e "" + echo -e "===================================================================" + + IFS="$OLD_IFS" +} diff --git a/editx b/editx index 63d1bf2..25017e7 100755 --- a/editx +++ b/editx @@ -22,9 +22,9 @@ touch "$1" chmod +x "$1" $EDITOR "$1" wait $! -SIZE=$(du "$1" | cut -f 1) +size=$(du "$1" | cut -f 1) -if [[ $SIZE -eq 0 && $exists -ne 0 ]]; +if [[ $size -eq 0 && $exists -ne 0 ]]; then rm -rf "$1" fi diff --git a/filewait b/filewait index a5b275a..3fe78a9 100755 --- a/filewait +++ b/filewait @@ -4,9 +4,9 @@ DAISY_INTERNAL=1 . $(dirname $(realpath $0))/daisy.source -FILE=$@ -while [ ! -f "$FILE" ] +file=$@ +while [ ! -f "$file" ] do sleep 0.1 done -echo $FILE +echo $file diff --git a/newday b/newday index cbe7bbb..354965b 100755 --- a/newday +++ b/newday @@ -17,39 +17,38 @@ DAISY_INTERNAL=1 . $(dirname $(realpath $0))/daisy.source -BINSELF=$(basename $0) -DIR_NAME=ByDate -ROOT_DIR=$HOME/$DIR_NAME -TODAY_SYM=$HOME/Today +dir_name=ByDate +root_dir=$HOME/$dir_name +today_sym=$HOME/Today # Present day -TODAY=$(date -I) -YEAR=$(echo $TODAY | awk -F"-" '{print $1}') -MONTH=$(echo $TODAY | awk -F"-" '{print $2}') -DAY=$(echo $TODAY | awk -F"-" '{print $3}') +today=$(date -I) +year=$(echo $today | awk -F"-" '{print $1}') +month=$(echo $today | awk -F"-" '{print $2}') +day=$(echo $today | awk -F"-" '{print $3}') set -e function errorFn() { - ERROR=$? - if [[ $ERROR -gt 0 ]]; + error=$? + if [[ $error -gt 0 ]]; then - echo "$BINSELF error ($ERROR): " - perl -E 'say $!=shift' $ERROR + echo "$DAISY_BIN error ($error): " + perl -E 'say $!=shift' $error fi - exit $ERROR + exit $error } # Error handling trap errorFn ERR # First we clear out empty folders, and remove the symlink if it exists -test -e "$ROOT_DIR" && find "$ROOT_DIR" -maxdepth 3 -type d -empty -print | xargs rm -rf -test -L "$TODAY_SYM" && rm -rf "$TODAY_SYM" +test -e "$root_dir" && find "$root_dir" -maxdepth 3 -type d -empty -print | xargs rm -rf +test -L "$today_sym" && rm -rf "$today_sym" # Now we can set up today's directory -mkdir -p "$ROOT_DIR/$YEAR/$MONTH/$DAY" -cd $ROOT_DIR -ln -s "./$DIR_NAME/$YEAR/$MONTH/$DAY" "$TODAY_SYM" +mkdir -p "$root_dir/$year/$month/$day" +cd $root_dir +ln -s "./$dir_name/$year/$month/$day" "$today_sym" exitcode=@? diff --git a/short b/short index 8a528cb..ddac7db 100755 --- a/short +++ b/short @@ -17,6 +17,6 @@ DAISY_INTERNAL=1 . $(dirname $(realpath $0))/daisy.source -SHORT_FILE="$DAISY_CONFIG_FOLDER/.shortcuts" +short_config_dir="$DAISY_CONFIG_FOLDER/.shortcuts" diff --git a/shrc b/shrc index 5c8f86e..335f880 100755 --- a/shrc +++ b/shrc @@ -21,27 +21,26 @@ function md5_opt() if [[ $FROM_RC -eq 1 ]]; then alias shrc=". shrc" else - BASENAME=$(basename $SHELL) - RC_NAME="."$BASENAME"rc" - RC_PATH="$HOME/$RC_NAME" + shellname=$(basename $SHELL) + rc_name="."$shellname"rc" + rc_path="$HOME/$rc_name" # Optional MD5 checks - HAS_CHANGED=1 - SUM1=$(md5_opt "$RC_PATH") - SUM2= + has_changed=1 + sum1=$(md5_opt "$rc_path") # This sets a default if the variable does not exist. EDITOR=${EDITOR:-$(ched)} - $EDITOR "$RC_PATH" - wait_for_editor $EDITOR "$RC_PATH" + $EDITOR "$rc_path" + wait_for_editor $EDITOR "$rc_path" - SUM2=$(md5_opt "$RC_PATH") + sum2=$(md5_opt "$rc_path") - if [[ $DAISY_HAS_md5sum -eq 1 && "$SUM1" == "$SUM2" ]]; + if [[ $daisy_has_md5sum -eq 1 && "$sum1" == "$sum2" ]]; then - echo "The RC-file $RC_NAME has not changed on disk. Not sourcing." + echo "The RC-file $rc_name has not changed on disk. Not sourcing." return fi - source "$RC_PATH" + source "$rc_path" fi diff --git a/sw b/sw index 488c6d3..e385605 100755 --- a/sw +++ b/sw @@ -1,23 +1,23 @@ #!/bin/sh # It just swaps two files -export DAISY_INTERNAL=1 +export DAISY_INTERNAL1 . $(dirname $(realpath $0))/daisy.source -FILE1=$1 -FILE2=$2 +file1=$1 +file2=$2 function helpFn() { - ERROR=$? - if [[ $ERROR -gt 0 ]]; + error=$? + if [[ $error -gt 0 ]]; then - ERROR_TEXT=$(perl -E 'say $!=shift' $ERROR) - echo "$DAISY_BIN error ($ERROR): $ERROR_TEXT" + error_text=$(perl -E 'say $!=shift' $error) + echo "$DAISY_BIN error ($error): $error_text" fi echo "Usage: $DAISY_BIN " echo Swap two files in a filesystem. - exit $ERROR + exit $error } if [[ $@ == *"--help"* ]]; @@ -36,14 +36,14 @@ trap helpFn ERR # We want to swap two files # Easy, but let's be safe about it -ls "$FILE1" >/dev/null -ls "$FILE2" >/dev/null +ls "$file1" >/dev/null +ls "$file2" >/dev/null # Files should exist, now we move -mv "$FILE1" "$FILE1.sw" -mv "$FILE2" "$FILE2.sw" +mv "$file1" "$file1.sw" +mv "$file2" "$file2.sw" # We got our moved copies, now we simply rename -mv "$FILE1.sw" "$FILE2" -mv "$FILE2.sw" "$FILE1" +mv "$file1.sw" "$file2" +mv "$file2.sw" "$file1"