aboutsummaryrefslogtreecommitdiff
path: root/etc/sh/rc
diff options
context:
space:
mode:
Diffstat (limited to 'etc/sh/rc')
-rw-r--r--etc/sh/rc364
1 files changed, 364 insertions, 0 deletions
diff --git a/etc/sh/rc b/etc/sh/rc
new file mode 100644
index 0000000..ae552a6
--- /dev/null
+++ b/etc/sh/rc
@@ -0,0 +1,364 @@
+#!/bin/sh
+# shellcheck disable=1090,1091
+
+export ENV=~/.profile
+
+export XDG_DATA_DIRS="$XDG_DATA_HOME/flatpak/exports/share:/var/lib/flatpak/exports/share${XDG_DATA_DIRS:+:}${XDG_DATA_DIRS:-}"
+
+
+mkdir -p \
+ "$XDG_CONFIG_HOME" \
+ "$XDG_CACHE_HOME/euandreh" \
+ "$XDG_DATA_HOME/euandreh" \
+ "$XDG_STATE_HOME/euandreh" \
+ "$XDG_LOG_HOME/euandreh"
+
+GUIX_PROFILE="$XDG_CONFIG_HOME"/guix/current
+if [ -r "$GUIX_PROFILE"/etc/profile ]; then
+ . "$GUIX_PROFILE"/etc/profile
+fi
+
+idempotent_path_add() {
+ case "$(eval "echo \$$1")" in
+ *"$2"*)
+ ;;
+ *)
+ eval "export $1=$2\${$1:+:}\${$1:-}"
+ ;;
+ esac
+}
+export A="$HOME${A:+:}${A:-}"
+# idempotent_path_add B "$HOME"
+export XDG_DATA_DIRS="$XDG_DATA_HOME/flatpak/exports/share:/var/lib/flatpak/exports/share${XDG_DATA_DIRS:+:}${XDG_DATA_DIRS:-}"
+# idempotent_path_add XDG_DATA_DIRS "$XDG_DATA_HOME/flatpak/exports/share"
+
+
+
+#
+#
+#
+
+export HISTSIZE=-1
+export HISTFILE="$XDG_STATE_HOME/sh-history"
+export SRC=~/dev
+export PRIV_CONFIG="$XDG_PREFIX"/var/lib/private/tilde
+export EDITOR='e'
+export VISUAL="$EDITOR"
+export PAGER='less -R'
+export BROWSER='firefox'
+export MAILDIR=~/Maildir
+export BACKLIGHT_DEVICE='acpi_video0'
+
+export GUILE_HISTORY="$XDG_STATE_HOME/guile-history"
+export GNUPGHOME="$XDG_CONFIG_HOME/gnupg"
+export RLWRAP_HOME="$XDG_CACHE_HOME/rlwrap"
+export LESSHISTFILE="$XDG_STATE_HOME/lesshst"
+export NOTMUCH_CONFIG="$XDG_CONFIG_HOME/notmuch/default/config"
+export PASSWORD_STORE_DIR="$SRC/private/password-store"
+export MAILCAPS="$XDG_CONFIG_HOME/mailcaps/config"
+export PYTHONSTARTUP="$XDG_CONFIG_HOME/python/pythonrc.py"
+export EXINIT='
+ " set number
+ " set autoindent
+ set ruler
+ set showmode
+ set showmatch
+'
+
+HOSTNAME="$(hostname)"
+export BORG_PASSCOMMAND="pass show $HOSTNAME/borg/passphrase"
+export BORG_REPO="suyin:borg/$HOSTNAME"
+export BORG_REMOTE_PATH='borg1'
+
+N_PROCS=$(($(nproc) * 2 + 1))
+GUILE_EFFECTIVE_VERSION="$(guile -c '(display (effective-version))')"
+export MAKEFLAGS="-j $N_PROCS"
+export GOPATH="$SRC/go"
+export CFLAGS='-std=c99 -Wall -Wextra -Wpedantic -g -flto -Werror'
+export CC=gcc
+export AR=gcc-ar
+export LEX=flex
+export LDFLAGS='-flto'
+export LISP='sbcl --eval'
+export N_PROCS GUILE_EFFECTIVE_VERSION
+export LISP_CLI_IMPL=clisp
+
+add_prefix() {
+ export GUILE_LOAD_PATH="$1/share/guile/site/$GUILE_EFFECTIVE_VERSION${GUILE_LOAD_PATH:+:}${GUILE_LOAD_PATH:-:}"
+ export GUILE_LOAD_COMPILED_PATH="$1/lib/guile/$GUILE_EFFECTIVE_VERSION/site-ccache${GUILE_LOAD_COMPILED_PATH:+:}${GUILE_LOAD_COMPILED_PATH:-}"
+ export C_INCLUDE_PATH="$1/include${C_INCLUDE_PATH:+:}${C_INCLUDE_PATH:-}"
+ export LIBRARY_PATH="$1/lib${LIBRARY_PATH:+:}${LIBRARY_PATH:-}"
+ export INFOPATH="$1/share/info${INFOPATH:+:}${INFOPATH:-}"
+ export MANPATH="$1/share/man${MANPATH:+:}${MANPATH:-}"
+ export DICPATH="$1/share/hunspell${DICPATH:+:}${DICPATH:-}"
+ export PATH="$1/bin${PATH:+:}${PATH:-}"
+}
+export PREFIX="$XDG_PREFIX/var/mkg"
+add_prefix "$PREFIX"
+add_prefix "$XDG_PREFIX"
+
+for d in "$XDG_PREFIX"/opt/bin-dirs/*; do
+ PATH="$d:$PATH"
+done
+
+
+
+#
+# Aliases
+#
+
+unalias -a
+
+alias p='ping euandre.org -c 3'
+alias c='tmux send-keys -R \; clear-history'
+alias o='open'
+alias mm='msmtp-queue -r'
+alias s='vcs status'
+alias d='vcs diff'
+alias ds='vcs diff -- --staged'
+alias tpd='cd "$(mkdtemp)"'
+
+alias l='ls -lahF --color'
+alias grep='grep --color=auto'
+alias diff='diff --color=auto'
+alias watch='watch --color '
+alias man='MANWIDTH=$((COLUMNS > 80 ? 80 : COLUMNS)) man'
+alias less='less -R'
+alias tree='tree -aC'
+alias make='make -e'
+alias mv='mv -i'
+alias vi='echo "Use \"e\" instead."; false'
+alias bc='bc -l'
+
+alias sqlite='rlwrap sqlite3'
+alias guile='guile -l "$XDG_CONFIG_HOME"/guile/init.scm'
+
+alias flush='sync && echo 3 | sudo tee /proc/sys/vm/drop_caches > /dev/null'
+alias kal='khal calendar today `LANG=en.UTF-8 date +%A`'
+
+
+
+#
+# PS1
+#
+
+error_marker() {
+ STATUS=$?
+ if [ "$STATUS" != 0 ]; then
+ color -c redb " (!! $STATUS !!) "
+ fi
+}
+
+shell_status_level() {
+ if [ -z "${SHLVL:-}" ]; then
+ return
+ fi
+
+ if [ -n "${TMUX:-}" ]; then
+ LVL=$((SHLVL - 1))
+ else
+ LVL="$SHLVL"
+ fi
+
+ if [ "$LVL" = 1 ]; then
+ return
+ fi
+
+ color -c white "$LVL"
+ if [ -n "${RANGER_LEVEL:-}" ]; then
+ color -c white '|'
+ color -c bluei 'r'
+ fi
+}
+
+shell_status_jobs() {
+ JOBS="$(jobs | grep -cv autojump)"
+ if [ "$JOBS" != 0 ]; then
+ color -c red "$JOBS"
+ fi
+}
+
+shell_status() {
+ LEVEL="$(shell_status_level)"
+ JOBS="$(shell_status_jobs)"
+
+ if [ -z "$LEVEL" ] && [ -z "$JOBS" ]; then
+ return
+ fi
+
+ color -c white '['
+ printf '%s' "$LEVEL"
+ if [ -n "$LEVEL" ] && [ -n "$JOBS" ]; then
+ color -c white '|'
+ fi
+ printf '%s' "$JOBS"
+ color -c white ']'
+ printf ' '
+}
+
+timestamp() {
+ color -c blacki '\T'
+}
+
+path() {
+ color -c yellowb '\w/'
+}
+
+guix_env() {
+ if [ -z "${GUIX_ENVIRONMENT:-}" ]; then
+ return
+ fi
+
+ printf '\n'
+ color -c blacki '~> '
+ color -c purple 'guix environment '
+ printf '('
+ color -c blueb "$GUIX_ENVIRONMENT"
+ printf ')'
+}
+
+in_nix_shell() {
+ if [ -z "${IN_NIX_SHELL:-}" ]; then
+ return
+ fi
+
+ printf '\n'
+ color -c blacki '~> '
+ color -c purpleb "$IN_NIX_SHELL "
+ color -c purple 'nix-shell '
+ printf '('
+ color -c blueb "${name:-}"
+ printf ')'
+}
+
+PS1='`error_marker`'$(timestamp)' '$(path)' `shell_status``vcs ps1``guix_env``in_nix_shell`
+$ '
+
+
+
+# g '^\w.*json_destroy('
+g() {
+ # shellcheck disable=2086
+ fn=$(git grep -n -- "$1" ${2:-} | \
+ cut -d: -f -2 | \
+ fzf --select-1 \
+ --exit-0 \
+ --preview "echo {} | \
+ cut -d: -f1 | \
+ xargs -I% awk -v bounds=25 -v pat=\"$1\" -v n=\$(echo {} | cut -d: -f2) '
+ (n - bounds < NR) && (NR < n + bounds) && (NR != n) { print }
+ NR==n { gsub(pat, \"\033[1;33m&\033[1;000m\"); print }
+ ' %")
+ if [ -n "$fn" ]; then
+ f="$(echo "$fn" | cut -d: -f1)"
+ n="$(echo "$fn" | cut -d: -f2)"
+ # shellcheck disable=2068
+ # history -s g "$@"
+ # history -s vi "+$n" "$f"
+ # vi "+$n" "$f"
+ history -s g "$@"
+ history -s e "+$n" "$f"
+ e "+$n" "$f"
+ fi
+}
+
+f() {
+ # profile="f-shell-function$(pwd | sed -e 's_/_-_g')"
+ # file="$(git ls-files | grep ${2:-.} | remembering -p "$profile" -c "fzf --select-1 --exit-0 --preview 'cat {}'")"
+ # shellcheck disable=2086
+ file="$(git ls-files | grep ${2:-.} | fzf --select-1 --exit-0 --preview 'cat {}')"
+ if [ -n "$file" ]; then
+ # shellcheck disable=2068
+ history -s f "$@"
+ history -s "$1" "$file"
+ "$1" "$file"
+ fi
+}
+
+
+
+r() {
+ . ~/.profile
+ xset r rate 225 100
+}
+
+_edit_without_executing() {
+ F="$(mkstemp)"
+ printf '%s\n' "$READLINE_LINE" > "$F"
+ e "$F"
+ READLINE_LINE="$(cat "$F")"
+ READLINE_POINT="${#READLINE_LINE}"
+ rm -f "$F"
+}
+if set -o | grep 'on' | grep -Eq '^(vi|emacs)'; then
+ bind -x '"\C-x\C-e":_edit_without_executing'
+fi
+
+
+
+
+#
+# GPG and SSH agents configuration
+#
+
+SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
+GPG_TTY=$(tty ||:)
+export GPG_TTY SSH_AUTH_SOCK
+gpgconf --launch gpg-agent
+
+
+
+case $- in
+ *i*)
+ stty -ixon # Disable C-s/C-q mode
+ ;;
+ *)
+ ;;
+esac
+
+F="$PRIV_CONFIG"/privrc.sh
+if [ -r "$F" ]; then
+ # Extra rc code to be loaded, stored in private repository
+ . "$F"
+fi
+
+
+
+#
+# From here on, bash-specific things.
+#
+
+if [ -z "$BASH_VERSION" ]; then
+ return
+fi
+
+ln -fs .profile ~/.bashrc
+
+export INPUTRC="$XDG_CONFIG_HOME/bash/inputrc"
+export HISTCONTROL=ignorespace:ignoredups
+
+eval "$(direnv hook bash)"
+
+
+#
+# From here on, interactive-only bash-specific things.
+#
+
+case $- in
+ *i*)
+ ;;
+ *)
+ return
+ ;;
+esac
+
+# IIRC, the Guix profile should do this
+for f in "$HOME_ENVIRONMENT"/profile/etc/bash_completion.d/*; do
+ . "$f"
+done
+
+# IIRC, the Guix package should do this
+F="$HOME_ENVIRONMENT"/profile/share/autojump/autojump.bash
+if [ -r "$F" ]; then
+ . "$F"
+fi