# Paths: {{{
|
|
#
|
|
# This accounts for, at least:
|
|
#
|
|
# - a custom Firefox install
|
|
# - some bin dirs in my homedir
|
|
# - golang, ruby
|
|
#
|
|
# .sh_common is sourced by ~/bin/xmonad.start to provide for entire x session
|
|
# getting these vars.
|
|
#
|
|
# Beware that other modifications to path might be made in .zshrc or .bashrc
|
|
# It's a tangled mess which certainly warrants a TODO.
|
|
|
|
export GOPATH=~/code/go
|
|
export GOROOT=/usr/local/go
|
|
export GEM_HOME=~/gems
|
|
export P1K3_ROOT=~/workspace/p1k3
|
|
|
|
# export PATH=~/firefox:~/bin:~/notes/bin:~/.xmonad:~/.local/bin/:$GEM_HOME/bin:$GOPATH/bin:$PATH
|
|
# The below stuff may break and need reverted on Debian - above line contains ~/bin, use that one -- bpb 2019-03-10:
|
|
|
|
# Put a dir at the start of path, IFF it's not already in the path:
|
|
prepend_to_path () {
|
|
local dir="$1"
|
|
|
|
if [[ -d "${dir}" ]]; then
|
|
if [[ ":$PATH:" != *"${dir}"* ]]; then
|
|
export PATH="${dir}:${PATH}"
|
|
fi
|
|
fi
|
|
}
|
|
prepend_to_path "$GOROOT/bin" # golang
|
|
prepend_to_path "$GOPATH/bin" # golang
|
|
prepend_to_path "$GEM_HOME/bin" # ruby
|
|
prepend_to_path "$HOME/.cargo/bin" # rust
|
|
prepend_to_path ~/.local/bin
|
|
prepend_to_path ~/.xmonad
|
|
prepend_to_path ~/notes/bin
|
|
prepend_to_path ~/firefox
|
|
prepend_to_path ~/bin
|
|
|
|
# }}}
|
|
|
|
# General environment / config: {{{
|
|
# Debian stuff - define DEBFULLNAME, DEBEMAIL here:
|
|
if [ -f ~/.sh_common_debconfig ]; then
|
|
. ~/.sh_common_debconfig
|
|
fi
|
|
|
|
# Explicitly set default editor:
|
|
export EDITOR=`which vim`
|
|
|
|
# Configure less(1):
|
|
export LESS='-FiRSX'
|
|
|
|
# Configure fzf fuzzyfinder:
|
|
export FZF_CTRL_R_OPTS='-e' # exact match by default - see fzf(1)
|
|
|
|
# For mediawiki/core/docker-compose.yml
|
|
export MW_DOCKER_UID=$(id -u)
|
|
export MW_DOCKER_GID=$(id -g)
|
|
|
|
# }}}
|
|
|
|
# Aliases, various and sundry: {{{
|
|
|
|
alias ac='apt-cache'
|
|
alias agu='sudo apt-get update && sudo apt-get upgrade'
|
|
alias c='commandlog'
|
|
alias fd='fdfind'
|
|
alias g='git'
|
|
alias gitsu='git submodule sync && git submodule update'
|
|
alias m='make'
|
|
alias mk='mark'
|
|
alias mka='mark add'
|
|
alias s='sudo'
|
|
alias v='vim'
|
|
alias vt='vim `todaydir`'
|
|
|
|
# How big is the terminal?
|
|
alias dim='echo $(tput cols)x$(tput lines)'
|
|
|
|
# vi life:
|
|
alias :e='nvim'
|
|
alias :q='exit'
|
|
alias :wq='exit'
|
|
alias :r='cat'
|
|
|
|
# }}}
|
|
|
|
# Functions: {{{
|
|
|
|
# p1k3 navigation:
|
|
function p {
|
|
cd "$P1K3_ROOT"
|
|
}
|
|
|
|
function ct {
|
|
cd $(todaydir)
|
|
}
|
|
|
|
if type exa &> /dev/null; then
|
|
# If exa is installed, replace the traditional ls aliases with exa
|
|
# invocations.
|
|
|
|
function l {
|
|
exa --group-directories-first $@
|
|
}
|
|
|
|
function ll {
|
|
exa --group-directories-first -l --git $@
|
|
}
|
|
|
|
function la {
|
|
# This would typically be `ls -A`, for "almost all", which excludes . and ..
|
|
# - exa appears to do that by default, and so doesn't have an -A option
|
|
exa --group-directories-first -a $@
|
|
}
|
|
|
|
function lal {
|
|
# ls -Al
|
|
exa --group-directories-first -al --git $@
|
|
}
|
|
|
|
function lah {
|
|
# ls -Alh
|
|
# exa uses human-readable sizes by default, so doesn't have the -h flag.
|
|
exa --group-directories-first -al --git $@
|
|
}
|
|
else
|
|
# No exa, so set up traditional ls aliases as functions.
|
|
function l {
|
|
ls --group-directories-first --color -CF $@
|
|
}
|
|
|
|
function ll {
|
|
ls --group-directories-first -l --color $@
|
|
}
|
|
|
|
function la {
|
|
# Almost all - exclude . and ..:
|
|
ls --group-directories-first -A $@
|
|
}
|
|
|
|
function lal {
|
|
ls --group-directories-first -Al $@
|
|
}
|
|
|
|
function lah {
|
|
ls --group-directories-first -Alh $@
|
|
}
|
|
fi
|
|
|
|
# Get a persistent directory history menu in fzf - originally written for dmenu
|
|
# and inspired by jholland at:
|
|
#
|
|
# http://hints.macworld.com/article.php?story=20050806202859392
|
|
#
|
|
# I get the feeling that there's probably a more idiomatic way to do what
|
|
# I want here, but for the moment it's nice.
|
|
#
|
|
# See: https://p1k3.com/2016/5/17/
|
|
function h {
|
|
if [ ! -z "$@" ]; then
|
|
cd $(tail -2500 ~/.directory_history | tac | unsorted-unique | fzf --no-sort --height=50% -q $@)
|
|
else
|
|
cd $(tail -2500 ~/.directory_history | tac | unsorted-unique | fzf --no-sort --height=50%)
|
|
fi
|
|
}
|
|
|
|
function b {
|
|
if [ ! -z "$@" ]; then
|
|
echo $(realpath "$@") >> ~/.directory_bookmarks
|
|
else
|
|
cd $(sort ~/.directory_bookmarks | uniq | fzf --no-sort --height=50%)
|
|
fi
|
|
}
|
|
|
|
# Create a directory (if it doesn't exist) and cd to it:
|
|
function mcd {
|
|
mkdir -p $1 && cd $1
|
|
}
|
|
|
|
# Use official git prompt, if it exists, or fall back to
|
|
# parse_git_branch:
|
|
if [ -f "$HOME/.git-prompt.sh" ]; then
|
|
GIT_PS1_SHOWCOLORHINTS=1
|
|
GIT_PS1_SHOWUNTRACKEDFILES=1
|
|
GIT_PS1_SHOWDIRTYSTATE=1
|
|
GIT_PS1_SHOWUPSTREAM="auto verbose"
|
|
|
|
# shellcheck source=/home/brennen/.git-prompt.sh
|
|
. "$HOME/.git-prompt.sh"
|
|
else
|
|
# Emulate __git_ps1 interface which takes 2 params - before part
|
|
# and after part:
|
|
function __git_ps1 {
|
|
PS1="$1 $(parse_git_branch)$2"
|
|
}
|
|
fi
|
|
|
|
# Get some information about a git repo
|
|
function parse_git_branch {
|
|
# if [ ! -z "$has_git_prompt" ]; then
|
|
# __git_ps1
|
|
# return
|
|
# fi
|
|
|
|
# Formerly:
|
|
# ref=$(git symbolic-ref HEAD 2> /dev/null) || return
|
|
# echo "("${ref#refs/heads/}") "
|
|
|
|
# Originally borrowed from:
|
|
# https://github.com/robacarp/config_files/commit/5d983240d509bf4f7815ed822c0e868ccce08a79
|
|
git_status=$(git status --porcelain -b 2> /dev/null) || return
|
|
|
|
echo $git_status | awk '
|
|
BEGIN {
|
|
status["untracked"] = 0
|
|
status["mods"] = 0
|
|
branch_status = ""
|
|
}
|
|
$0 ~ /.*\[.*\]$/ {
|
|
branch_status = " " $3 " " $4
|
|
}
|
|
$1 ~ /##/ {
|
|
gsub(/\.\.\..*/, "")
|
|
branch_name = $2
|
|
}
|
|
$1 ~ /\?\?/ { status["untracked"] ++ }
|
|
$1 ~ /M/ { status["mods"] ++ }
|
|
|
|
END {
|
|
printf "(%s m%i/u%i%s) ", branch_name, status["mods"], status["untracked"], branch_status
|
|
}
|
|
'
|
|
}
|
|
|
|
# Render a simple horizontal rule / title bar in the terminal. Again, a
|
|
# variation on robacarp:
|
|
# https://robacarp.io/2018/07/19/bash-hr-function-to-draw-a-line-across-the-terminal.html
|
|
function titlebar {
|
|
# Text written into the horizontal rule, left justified
|
|
text=${1:-}
|
|
length=$(echo "$text" | wc -m)
|
|
|
|
# set the color
|
|
echo -e -n "\033[30;47m"
|
|
|
|
# print the message
|
|
echo -n "$text"
|
|
|
|
# finish the line across the console
|
|
cols=$(expr "$(tput cols)" - $length)
|
|
printf " %${cols}s"
|
|
|
|
# clear the background color and start a new line
|
|
echo -e "\033[0m"
|
|
}
|
|
|
|
# }}}
|