diff --git a/.config/shell/bin/cds b/.config/shell/bin/cds deleted file mode 100755 index 54d0fb2..0000000 --- a/.config/shell/bin/cds +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash - -# cd search: cd to a directory, given part of its name -# (also can take arguments for an `fd` commnd) -# (also can cd to a file if `-t f` is passed) - -if ! [ -z "$1" ];then - DIR="$(fd --max-results=1 -t d $@)" - if [ -f "$DIR" ];then - cd "$(dirname "$DIR")" && pwd - else - cd "$DIR" && pwd - fi -else - echo "$0: no arguments provided" - return 1 -fi - diff --git a/.config/shell/bin/error b/.config/shell/bin/error index 20c25bb..1df15a1 100755 --- a/.config/shell/bin/error +++ b/.config/shell/bin/error @@ -3,6 +3,6 @@ # for sending error messages from functions and whatnot ERROR_CODE="$?" ->&2 echo "An error occurred within a function in the .zshrc on line number ${1}" +>&2 echo "$0: An error occurred on line number ${1}" return $ERROR_CODE diff --git a/.config/shell/bin/ex b/.config/shell/bin/ex index 5ec9f25..d5e533d 100755 --- a/.config/shell/bin/ex +++ b/.config/shell/bin/ex @@ -2,7 +2,7 @@ # Simple extraction script. Taken from manjaro's .bashrc -if [ -f $1 ] ; then +if [ -f "$1" ] ; then case $1 in *.tar.bz2) tar xjf "$1" ;; *.tar.gz) tar xzf "$1" ;; diff --git a/.config/shell/bin/gloned b/.config/shell/bin/gloned deleted file mode 100755 index 6920b6d..0000000 --- a/.config/shell/bin/gloned +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash - -# Git cLONE cD -# Can take extra arguments for git (ex: gloned url:/repo folder) - -# shellcheck disable=SC2068,SC2016 - -git clone $@ || return $? -if ! cd "$(echo "$1" | sed 's/\.git//g' | rev | cut -d '/' -f 1 | rev)";then - echo 'Error: Could not `cd` into the repo' - return 1 -fi -echo -# ls --color=auto - diff --git a/.config/shell/bin/sitepath b/.config/shell/bin/sitepath index cebd48b..0d22143 100755 --- a/.config/shell/bin/sitepath +++ b/.config/shell/bin/sitepath @@ -6,18 +6,18 @@ # usage: sitepath # usage: sitepath -- you can search with 'fd' if you put in a command - # account for if there is no urlencode command - URLENCODE=urlencode - if ! command -v urlencode > /dev/null 2>&1;then - URLENCODE=cat - fi - # If there is no input, make the input the current directory - [ -z ${1+x} ] && 1="$(pwd)" - FILEPATH="$(([ -e "$1" ] && readlink -f "$1") || fd $@ /home/blake/docker/blakenorth.net/site)" +# account for if there is no urlencode command +URLENCODE=urlencode +if ! command -v urlencode > /dev/null 2>&1;then + URLENCODE=cat +fi +# If there is no input, make the input the current directory +[ -z ${1+x} ] && 1="$(pwd)" +FILEPATH="$(([ -e "$1" ] && readlink -f "$1") || fd $@ /home/blake/docker/blakenorth.net/site)" - # change all file paths into urls - echo "$FILEPATH" | - grep -o 'site.*' | - sed 's+^site+https://blakenorth.net+g' | - $URLENCODE # if you need this, I am using dead10ck/urlencode (cargo install urlencode) +# change all file paths into urls +echo "$FILEPATH" | + grep -o 'site.*' | + sed 's+^site+https://blakenorth.net+g' | + $URLENCODE # if you need this, I am using dead10ck/urlencode (cargo install urlencode) diff --git a/.config/shell/bin/cda b/.config/shell/functions/cda old mode 100755 new mode 100644 similarity index 91% rename from .config/shell/bin/cda rename to .config/shell/functions/cda index 8dd841a..dc68881 --- a/.config/shell/bin/cda +++ b/.config/shell/functions/cda @@ -10,7 +10,9 @@ # (although that wouldn't be as good as recording actions bc it's easy to do # that by just writing a for loop) -for DIR in *; do - (cd "$DIR" && zsh) -done +cda() { + for DIR in *; do + (cd "$DIR" && zsh) + done +} diff --git a/.config/shell/bin/cdf b/.config/shell/functions/cdf old mode 100755 new mode 100644 similarity index 63% rename from .config/shell/bin/cdf rename to .config/shell/functions/cdf index ed774ea..2a41582 --- a/.config/shell/bin/cdf +++ b/.config/shell/functions/cdf @@ -4,11 +4,11 @@ # Basically, an interactive version of what's above # can take an `fd` command # requires that `fzy` is installed - -DIR="$(fd $@ | fzy)" -if [ -f "$DIR" ];then - cd "$(dirname "$DIR")" && pwd -else - cd "$DIR" && pwd -fi - +cdf() { + DIR="$(fd $@ | fzy)" + if [ -f "$DIR" ];then + cd "$(dirname "$DIR")" && pwd + else + cd "$DIR" && pwd + fi +} diff --git a/.config/shell/functions/cds b/.config/shell/functions/cds new file mode 100644 index 0000000..8dffc0a --- /dev/null +++ b/.config/shell/functions/cds @@ -0,0 +1,20 @@ +#!/bin/bash + +# cd search: cd to a directory, given part of its name +# (also can take arguments for an `fd` commnd) +# (also can cd to a file if `-t f` is passed) + +cds() { + if ! [ -z "$1" ];then + DIR="$(fd --max-results=1 -t d $@)" + if [ -f "$DIR" ];then + cd "$(dirname "$DIR")" && pwd + else + cd "$DIR" && pwd + fi + else + echo "$0: no arguments provided" + return 1 + fi +} + diff --git a/.config/shell/functions/gloned b/.config/shell/functions/gloned new file mode 100644 index 0000000..9faa9a1 --- /dev/null +++ b/.config/shell/functions/gloned @@ -0,0 +1,20 @@ +#!/bin/bash + +# Git cLONE cD +# Can take extra arguments for git (ex: gloned url:/repo folder) + +# shellcheck disable=SC2068,SC2016 + +gloned() { + # remove the url up to the last segment, and remove the .git from the end + REPO_DIR="${2:-"$(echo "${1%%.git}" | rev | cut -d '/' -f 1 | rev)"}" + + git clone "$1" "$REPO_DIR" || exit $? + ls + if ! cd "$REPO_DIR";then + echo 'Error: Could not `cd` into the repo' + exit 1 + fi + echo + # ls --color=auto +} diff --git a/.config/shell/bin/todo b/.config/shell/functions/todo old mode 100755 new mode 100644 similarity index 72% rename from .config/shell/bin/todo rename to .config/shell/functions/todo index 06173e8..e2be379 --- a/.config/shell/bin/todo +++ b/.config/shell/functions/todo @@ -9,12 +9,12 @@ # Suggested use: make a git repo for holding your todo list, then make # a symlink called 'todo' that points to your todo list in your home directory # - -todo_dir="$(dirname "$(realpath ~/todo)")" -todo_file="$(realpath ~/todo)" -if [ -z "$@" ];then - ( # subshell to protect against directory changes - cd "$todo_dir" +todo() { + todo_dir="$(dirname "$(realpath ~/todo)")" + todo_file="$(realpath ~/todo)" + if [ -z "$*" ];then + ( # subshell to protect against directory changes + cd "$todo_dir" || exit # pull the latest commits git rev-parse && @@ -28,13 +28,11 @@ if [ -z "$@" ];then git commit "$todo_file" -m 'todo' && git push fi - ) - -elif [ "$@" = "cd" ]; then - cd "$todo_dir" - -else - git -C "$todo_dir" $@ - - fi + ) + elif [ "$*" = "cd" ]; then + cd "$todo_dir" || exit + else + git -C "$todo_dir" $@ + fi +} diff --git a/.zshrc b/.zshrc index 512bacb..908b364 100644 --- a/.zshrc +++ b/.zshrc @@ -13,13 +13,14 @@ export EDITOR=vi fi - export PATH="$PATH:${XDG_DATA_HOME:-$HOME/.local/bin}:${XDG_CONFIG_HOME:-$HOME/.config/shell/bin}" + export PATH="$PATH:${XDG_DATA_HOME:-$HOME/.local}/bin:$SHELL_CONFIG_DIR/bin" + export SHELL_CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/shell" export SYSTEMD_EDITOR="$EDITOR" export LSCOLORS="Gxfxcxdxbxegedabagacad" export ZSH_CACHE_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/zsh" - export ZINIT_HOME_DIR="$HOME/.local/share/zinit" + export ZINIT_HOME_DIR="${XDG_DATA_HOME:-$HOME/.local}/share/zinit" # Don't add extra space to the right side of the prompt ZLE_RPROMPT_INDENT=0 @@ -45,7 +46,7 @@ # <<< # optionally source an external environment variable file - [ -f "${XDG_CONFIG_HOME:-$HOME/.config}/shell/envrc" ] && source "${XDG_CONFIG_HOME:-$HOME/.config}/shell/envrc" + [ -f "$SHELL_CONFIG_DIR/shell/envrc" ] && source "$SHELL_CONFIG_DIR/shell/envrc" } # <<< ### Aliases >>> @@ -174,7 +175,7 @@ # <<< # optionally source an external alias file - [ -f "${XDG_CONFIG_HOME:-$HOME/.config}/shell/aliasrc" ] && source "${XDG_CONFIG_HOME:-$HOME/.config}/shell/aliasrc" + [ -f "$SHELL_CONFIG_DIR/shell/aliasrc" ] && source "$SHELL_CONFIG_DIR/shell/aliasrc" } # # TODO: remove all aliases that refrence programs which do not exist >>> @@ -197,11 +198,13 @@ # <<< ### Functions >>> { + # grab all shell functions that are in files + source "$SHELL_CONFIG_DIR"/functions/* # for sending error messages from functions and whatnot error() { ERROR_CODE="$?" - >&2 echo "An error occurred within a function in the .zshrc on line number ${1}" + >&2 echo "(zshrc) An error occurred on line number ${1}" return $ERROR_CODE } @@ -211,24 +214,13 @@ cd "$1" || error $LINENO } - # shellcheck disable=SC2086 - random-mac() { - interfaces=(enp5s0 wlp4s0) - for interface in "${interfaces[@]}";do - echo " Changing interface: $interface" - sudo ip link set dev $interface down - sudo macchanger -r $interface - sudo ip link set dev $interface up - done - } - # believe it or not, zsh makes for a fine calculator calc() { echo $(($*)) } # optionally source an external function file - [ -f "${XDG_CONFIG_HOME:-$HOME/.config}/shell/fnrc" ] && source "${XDG_CONFIG_HOME:-$HOME/.config}/shell/fnrc" + [ -f "$SHELL_CONFIG_DIR/fnrc" ] && source "$SHELL_CONFIG_DIR/fnrc" } # <<< # <<< @@ -290,9 +282,9 @@ ## Themes # terminal colors - if [[ -f ~/.config/shell/colors.sh ]];then + if [[ -f "$SHELL_CONFIG_DIR/shell/colors.sh" ]];then # custom colors - source ~/.config/shell/colors.sh + source "$SHELL_CONFIG_DIR/shell/colors.sh" else # onedark shell colors zinit snippet 'https://github.com/chriskempson/base16-shell/blob/master/scripts/base16-onedark.sh' @@ -557,7 +549,7 @@ load_working_dir && cd - > /dev/null # <<< # Optionally source the user's customized .zshrc -[ -f "${XDG_CONFIG_HOME:-$HOME/.config}/shell/zshrc.local" ] && source "${XDG_CONFIG_HOME:-$HOME/.config}/shell/zshrc.local" || true +[ -f "$SHELL_CONFIG_DIR/zshrc.local" ] && source "$SHELL_CONFIG_DIR/zshrc.local" || true # vim:fdm=marker:fmr=>>>,<<<:et:ft=sh:sw=3