#!/bin/sh if [ -r /etc/bashrc ]; then . /etc/bashrc fi ln -fs .profile ~/.bashrc export ENV=~/.profile 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" HISTCONTROL=ignorespace:ignoredups export SRC=~/dev export EDITOR='vi' 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 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 } V_FILES="$(echo " ~/Documents/txt/TODOs.md ~/Documents/txt/scratch.txt $XDG_CONFIG_HOME/bash/rc $XDG_CONFIG_HOME/guix/home.scm $XDG_CONFIG_HOME/guix/system.scm $(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 $XDG_CONFIG_HOME/guix/channels.scm " | tr ' ' '\n' | grep . | sed 's|^/home/andreh|~|')" v() { f="$(echo "$V_FILES" | fzf --select-1 --exit-0 --query "$1")" if [ -n "$f" ]; then history -s v "$@" history -s vi "$f" sh -c "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))" } 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 stty -ixon # Disable C-s/C-q mode if [ -r "$XDG_CONFIG_HOME"/bash/privrc.sh ]; then # Extra rc code to be loaded, stored in private repository . "$XDG_CONFIG_HOME"/bash/privrc.sh fi # FIXME: completion for f in "$HOME_ENVIRONMENT"/profile/etc/bash_completion.d/*; do . "$f" done