summary refs log tree commit diff
path: root/home/.kshrc
blob: ef509d5d762338f642a5a3efd1d9fe019352657a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
set -o nounset -o noclobber -o braceexpand -o emacs
HISTFILE=~/.ksh_history HISTSIZE=5000
export GPG_TTY=$(tty)

function colonize {
	IFS=:
	print "$*"
}
systemPath=$PATH
PATH=$(colonize {,/usr{/local,/pkg,},$HOME/.local}/{s,}bin /usr/games)
CDPATH=:$HOME
export PWD

export PAGER=less
export EDITOR=vim
if whence nvim > /dev/null; then
	EDITOR=nvim
	alias vim=nvim
	export MANPAGER="nvim -c 'set ft=man' -"
fi
FCEDIT=$EDITOR
export GIT_EDITOR=$EDITOR
export CLICOLOR=1
export NETHACKOPTIONS='
	name:June, role:Valkyrie, race:Human, gender:female, align:neutral,
	dogname:Moro, catname: Baron, pickup_types:$!?+/=,
	color, DECgraphics
'

alias ll='ls -lh'
if [[ $(uname) = 'Linux' ]]; then
	alias ls='ls --color=auto' grep='grep --color' rm='rm -I'
fi
alias bc='bc -l'
alias gs='git status --short --branch' gd='git diff'
alias gsh='git show' gl='git log --graph --pretty=log'
alias gco='git checkout' gb='git branch' gm='git merge' gst='git stash'
alias ga='git add' gmv='git mv' grm='git rm'
alias gc='git commit' gca='gc --amend' gt='git tag'
alias gp='git push' gu='git pull' gf='git fetch'
alias gr='git rebase' gra='gr --abort' grc='gr --continue' grs='gr --skip'
alias rand='openssl rand -base64 33'
alias private='eval "$(gpg -d ~/.private)"'

function colors {
	typeset sgr0=sgr0 setaf=setaf
	[[ -f /usr/share/misc/termcap ]] && sgr0=me setaf=AF
	set -A fg \
		$(tput $sgr0) $(tput $setaf 1) $(tput $setaf 2) $(tput $setaf 3) \
		$(tput $setaf 4) $(tput $setaf 5) $(tput $setaf 6) $(tput $setaf 7)
}
colors

function branch {
	typeset git=.git head
	[[ -d $git ]] || git=../.git
	[[ -d $git ]] || return
	read head < $git/HEAD
	if [[ $head = ref:* ]]; then
		print ":${head#*/*/}"
	else
		typeset -L 7 head
		print ":$head"
	fi
}

hostname=$(hostname)
whence realpath > /dev/null && HOME=$(realpath "$HOME")
function prompt {
	typeset status=$?
	typeset path title right color left cols

	[[ ${PWD#$HOME} != $PWD ]] && path="~${PWD#$HOME}" || path=$PWD
	title=${path##*/}
	right="${path}$(branch)"

	color=${fg[7]}
	if [[ -n ${SSH_CLIENT:-} ]]; then
		color=${fg[5]}
		title="${hostname%%.*}:${title}"
	fi
	(( status )) && color=${fg[1]}
	left="\01${color}\01\$\01${fg}\01 "

	[[ $TERM = xterm* ]] && title="\033]0;${title}\07" || title=''
	[[ -n ${COLUMNS:-} ]] && cols=$COLUMNS || cols=$(tput cols)
	while (( ${#right} > (cols / 2) )); do
		right=${right#*/}
	done
	typeset -R $(( cols - 1 )) right
	print "\01\r\01${title}\01\n\01${fg[7]}${right}${fg}\r\01${left}"
}

PS1='$(prompt)'
e='2021-09-15 14:48:03 +0000'>2021-09-15Enter capsicum in downgradeJune McEnroe 2021-09-15Factor out common parts of downgrade messagesJune McEnroe Also bump the message cap to 1024 because that is ostensibly useful for replying to older messages. 2021-09-14Add downgrade IRC botJune McEnroe 2021-09-14Sort by title if authors matchJune McEnroe There are probably better things to sort by but title definitely always exists. 2021-09-13Swap-remove tags as they're foundJune McEnroe This makes it even faster. From ~1s on a sqlite3.c amalgamation to ~0.85s. 2021-09-12Replace htagml regex with strncmpJune McEnroe Since ctags only ever produces regular expressions of the form /^re$/ or /^re/ with no other special characters, instead unescape the pattern and simply use strncmp. Running on a sqlite3.c amalgamation, the regex version takes ~37s while the strncmp version takes ~1s, producing identical output. Big win! 2021-09-11Also defer printing comment for lone close-parensJune McEnroe 2021-09-10Publish "git-comment"June McEnroe 2021-09-10Add git comment --pretty optionJune McEnroe 2021-09-08Defer printing comment if line is blank or closing braceJune McEnroe This fixes badly indented comments. 2021-09-08Up default min-repeat to 30 linesJune McEnroe 2021-09-08Handle dirty lines in git-commentJune McEnroe 2021-09-08Document and install git-commentJune McEnroe 2021-09-08Add repeat and all options to git-commentJune McEnroe 2021-09-08Add group threshold to git-commentJune McEnroe