dotfiles/.config/shell/shrc

103 lines
3.2 KiB
Text
Raw Permalink Normal View History

#!/bin/sh
# Blakely's basic shell configuration file
# This file is compatible with basic `sh`, and can
# be sourced in all `sh`-compatible shells to get
# the basic parts of the local `sh` configuration.
# This file doesn't need a shebang at the top, but it has one
# so shellcheck knows this file has to be compatible with POSIX sh
### Pre-setup >>>
# shellcheck disable=SC1090
# Helper function to source files.
# Usage:
# careful_source "file" \
# [optional: "Error message"] \
# [optional: $LINENO] (use this if you have an error message) \
# [optional: test to run] (-f, -x, -e) \
# [optional: operation (source, exec, command or nothing)] \
careful_source() {
if test "${4:--f}" "$1"; then
2022-08-21 20:57:19 -07:00
${5:-.} "$1"
else
if test -n "${2+foo}"; then
printf "%s\n" "$2" >&2
echo "Line number: $3" >&2
fi
fi
}
# for sending error messages from functions and whatnot
error() {
ERROR_CODE="$?"
>&2 echo "(zshrc) An error occurred on line number ${1}"
return $ERROR_CODE
}
# change cursor to a beam by default
printf '\e[5 q'
### <<<
### Generic shell configuration >>>
### Environment variables >>>
# This has to go here because otherwise we don't know where the config files are :|
export SHELL_CONFIG_DIR="${SHELL_CONFIG_DIR:-"${XDG_CONFIG_HOME:-$HOME/.config}/shell"}"
# source the environment variable file
${SKIP_ENV:-false} || careful_source "$SHELL_CONFIG_DIR/env" \
"Error: could not locate env file. Things could be messed up. Check that \$SHELL_CONFIG_DIR/env exists." $LINENO
${SKIP_LOCAL_ENV:-false} || careful_source "$SHELL_CONFIG_DIR/local/env" \
# <<<
### Aliases >>>
# Source the alias file
${SKIP_ALIASES:-false} || careful_source "$SHELL_CONFIG_DIR/aliases" \
"Error: could not locate alias file. You may not have any aliases. Check that \$SHELL_CONFIG_DIR points to the right place." $LINENO
${SKIP_LOCAL_ALIASES:-false} || careful_source "$SHELL_CONFIG_DIR/local/aliases"
# <<<
### Functions >>>
# Organization: functions should be put in their own files, located in
# $SHELL_CONFIG_DIR/functions. If they can be converted into a script, they
# should be.
#
# To make a "function in a file" that fits with my personal spec, simply make a
# file, name it what the function is called, and put the function inside of it
# just like you would if you were writing it here. Make sure to describe what
# the function does at the top, and say what dependencies it has (if any).
# Function to load all functions that are stored in files
fnupdate() {
for FN in "$SHELL_CONFIG_DIR"/functions/*;do
. "$FN"
done
}
${SKIP_FUNCTIONS:-false} || fnupdate
# <<<
### Options >>>
set -o vi
# <<<
# <<<
### Load the local shrc >>>
${SKIP_LOCAL_ENV:-false} || careful_source "$SHELL_CONFIG_DIR/local/shrc" \
# <<<
### Apply breaking changes with the update script >>>
${SKIP_UPDATES:-false} || careful_source "$SHELL_CONFIG_DIR/updates" \
"Error: failed to run update script" $LINENO -x "command"
### <<<
### "Plugins" >>>
${SKIP_SH_PLUGINS:-false} || careful_source "$SHELL_CONFIG_DIR/plugins"
# <<<
# vim:fdm=marker:fmr=>>>,<<<:et:ft=sh:sw=3:ts=3