aboutsummaryrefslogtreecommitdiff
path: root/etc/bash
diff options
context:
space:
mode:
Diffstat (limited to 'etc/bash')
-rw-r--r--etc/bash/rc346
1 files changed, 346 insertions, 0 deletions
diff --git a/etc/bash/rc b/etc/bash/rc
new file mode 100644
index 0000000..96c9312
--- /dev/null
+++ b/etc/bash/rc
@@ -0,0 +1,346 @@
+#!/bin/sh
+
+if [ -r /etc/bashrc ]; then
+ . /etc/bashrc
+fi
+
+case $- in
+ *i*)
+ stty -ixon # Disable C-s/C-q mode
+ ;;
+ *)
+ # return
+ ;;
+esac
+
+XDG_PREFIX=~/.usr
+export XDG_CACHE_HOME="$XDG_PREFIX/var/cache"
+export XDG_CONFIG_HOME="$XDG_PREFIX/etc"
+export XDG_DATA_HOME="$XDG_PREFIX/share"
+export XDG_STATE_HOME="$XDG_PREFIX/state"
+export XDG_LOG_HOME="$XDG_PREFIX/var/log"
+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" \
+ "$XDG_DATA_HOME" \
+ "$XDG_STATE_HOME" \
+ "$XDG_LOG_HOME"
+
+HISTSIZE=
+HISTFILE="$XDG_STATE_HOME/bash-history"
+
+export SRC=~/dev
+export EDITOR='vi'
+export VISUAL="$EDITOR"
+export PAGER='less -R'
+export BROWSER='firefox'
+export MAILDIR=~/Maildir
+
+export GUILE_HISTORY="$XDG_STATE_HOME/guile-history"
+export GNUPGHOME="$XDG_CONFIG_HOME/gnupg"
+export INPUTRC="$XDG_CONFIG_HOME/bash/inputrc"
+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/others/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))
+export MAKEFLAGS="-j $N_PROCS"
+export GOPATH="$SRC/go"
+export CFLAGS='-std=c99 -Wall -Wextra -Wpedantic -g -flto -Werror'
+export CC=musl-gcc
+export AR=gcc-ar
+export LEX=flex
+export LDFLAGS='-flto'
+export LISP='sbcl --eval'
+
+add_prefix() {
+ 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 PATH="$1/bin${PATH:+:}${PATH:-}"
+}
+export PREFIX="$XDG_PREFIX/var/mkg"
+add_prefix "$PREFIX"
+
+export PATH="$XDG_PREFIX/bin:$PREFIX/bin:$HOME/dev/libre/website/bin:$PATH"
+
+# FIXME
+export GUILE_LOAD_PATH="$HOME/dev/libre/servers/src/infrastructure/lib:$GUILE_LOAD_PATH"
+
+
+#
+# Aliases
+#
+
+unalias -a
+
+alias r='reload'
+alias rr='rreload'
+
+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 mk='make clean && make dev-check'
+alias wmk='aux/with-container "make clean && make dev-check"'
+alias tt='mk && wmk'
+alias todos='make public && open public/TODOs.html'
+alias valgrind='valgrind --show-error-list=yes --show-leak-kinds=all --leak-check=full --track-origins=yes --error-exitcode=1'
+alias check='sh "$XDG_CONFIG_HOME"/bash/check.sh'
+
+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 -C'
+alias make='make -e'
+alias mv='mv -i'
+alias rm='rm -i'
+
+alias sqlite='rlwrap sqlite3'
+alias sbcl='rlwrap sbcl'
+alias perl='rlwrap perl'
+alias guile='guile -l "$XDG_CONFIG_HOME"/guile/init.scm'
+
+alias flush='sync && echo 3 | sudo tee /proc/sys/vm/drop_caches > /dev/null'
+
+
+
+#
+# PS1
+#
+
+. "$XDG_CONFIG_HOME"/bash/vcs-ps1.sh
+
+
+
+# FIXME: fix "history" commands
+# 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"
+ fi
+}
+
+f() {
+ # FIXME: speed
+ # 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
+}
+
+# FIXME: use $XDG_CONFIG_HOME
+V_FILES="$(echo '
+~/Documents/txt/TODOs.md
+~/Documents/txt/scratch.txt
+'"$(find ~/Documents/txt/*.md -not -name TODOs.md |
+ sed "s|^$HOME|~|" |
+ LANG=POSIX.UTF-8 sort)"'
+~/dev/libre/package-repository/dependencies.dot
+~/dev/others/dinheiros/dinheiros.ledger
+~/dev/libre/dotfiles/sh/fake-symlinks.sh
+~/.config/bash/rc
+~/.config/guix/home.scm
+~/.config/guix/system.scm
+~/.config/guix/channels.scm
+' | tr ' ' '\n' | grep .)"
+
+v() {
+ f="$(echo "$V_FILES" | fzf --select-1 --exit-0 --query "$1")"
+ if [ -n "$f" ]; then
+ history -s vi "$f"
+ vi "$HOME/${f#'~/'}"
+ fi
+}
+
+cn() {
+ CHOICE="$(git log --oneline | fzf)"
+ git log --oneline | grep -nF "$CHOICE" | cut -d: -f1
+}
+
+cm() {
+ n="$(cn)"
+ git rev-parse "HEAD~$((n - 1))"
+}
+
+
+
+genpassword() {
+ length="${1-99}"
+ tr -cd '[:alnum:]' < /dev/urandom | fold -w "$length" | head -n1
+}
+
+deps() {
+ cd ~/dev/libre/package-repository/ || return 1
+ rm -f public/dependencies.svg
+ make public/dependencies.svg > /dev/null
+ if [ "${1:-}" != '-q' ]; then
+ open public/dependencies.svg
+ fi
+ cd - > /dev/null || return 1
+}
+(deps -q &) 2>/dev/null
+
+rdeps() {
+ echo ~/dev/libre/package-repository/dependencies.dot |
+ entr -cs '. ~/.profile'
+}
+
+re() {
+ if [ "$1" = -h ]; then
+ echo "Usage: re 's/foo/bar/g' [FILES]"
+ return
+ fi
+ SEPARATOR="$(echo "$1" | cut -c2)"
+ REGEX="$(echo "$1" | cut -d"$SEPARATOR" -f2)"
+ if [ -n "${2:-}" ]; then
+ git grep -l "$REGEX" | xargs -I% sh -c "sed '$1' % | sponge %"
+ else
+ sed "$1" "$2" | sponge "$2"
+ fi
+}
+
+container_dump() {
+ TARGET_NAME="$(basename "$PWD")"
+ OUT="$(mktemp -d)"
+ cp "$(./aux/guix/with-container.sh -C)" "$OUT/docker.tar.gz"
+ cd "$OUT" || exit 1
+ tar xvf docker.tar.gz
+ # FIXME: Remove doas
+ doas docker tag \
+ "$(doas docker load < docker.tar.gz | grep latest | cut -d: -f2)" \
+ "$TARGET_NAME"
+}
+
+svg() {
+ guix graph "$1" | dot -Tsvg > "$1".svg
+ open "$1".svg
+}
+
+serve() {
+ open http://localhost:8000
+ if [ -d public ]; then
+ python3 -m http.server -d public
+ else
+ python3 -m http.server
+ fi
+}
+
+reload() {
+ . ~/.profile
+}
+
+rreload() {
+ reload
+ xset r rate 225 100 # FIXME: move xorg conf
+ scp \
+ ~/dev/libre/package-repository/public/dependencies.svg \
+ kuvira:/opt/www/euandreh.xyz/static/package-repository/
+}
+
+tpd() {
+ D="$(mkdtemp)"
+ cd "$D" || return 1
+}
+
+m() {
+ notmuch new
+ mbsync EuAndreh &
+ mbsync EuAndrehXYZ &
+ mbsync Nubank &
+ wait
+ notmuch new
+}
+
+_edit_without_executing() {
+ F="$(mkstemp)"
+ printf '%s\n' "$READLINE_LINE" > "$F"
+ "${VISUAL:-${EDITOR:-vi}}" "$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
+
+eval "$(direnv hook bash)"
+
+
+
+#
+# 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
+gpg --export-ssh-key eu@euandre.org > "$XDG_CONFIG_HOME"/ssh/id_rsa.pub
+chmod 600 "$XDG_CONFIG_HOME"/ssh/id_rsa.pub
+
+
+
+#
+# Extra rc code to be loaded, stored in private repository
+#
+
+if [ -r "$XDG_CONFIG_HOME"/bash/privrc.sh ]; then
+ . "$XDG_CONFIG_HOME"/bash/privrc.sh
+fi
+
+
+
+# FIXME: completion
+for f in "$HOME_ENVIRONMENT"/profile/etc/bash_completion.d/*; do
+ . "$f"
+done