git.lirion.de

Of git, get, and gud

aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.bash/aliases.bash89
-rw-r--r--.bash/exec.bash26
-rw-r--r--.bash/postexec.bash22
-rw-r--r--.bash/prompt.bash186
-rw-r--r--.bash/vars.bash37
-rw-r--r--.bashrc2
-rw-r--r--.config/chromium/NativeMessagingHosts/com.github.browserpass.native.json11
-rw-r--r--.config/chromium/NativeMessagingHosts/org.keepassxc.keepassxc_browser.json10
l---------.config/flake81
-rw-r--r--.config/git-cliff.toml94
-rw-r--r--.flake812
-rw-r--r--.gitconfig54
-rwxr-xr-x.githooks/post-checkout13
-rwxr-xr-x.githooks/pre-commit4
-rw-r--r--.gitignore17
-rw-r--r--.gitmodules5
-rw-r--r--.gnupg/dirmngr.conf1
-rw-r--r--.gnupg/gpg-agent.conf16
-rw-r--r--.gnupg/gpg.conf14
l---------.librewolf/native-messaging-hosts/com.github.browserpass.native.json1
l---------.librewolf/native-messaging-hosts/org.keepassxc.keepassxc_browser.json1
-rw-r--r--.mozilla/native-messaging-hosts/com.github.browserpass.native.json7
-rw-r--r--.mozilla/native-messaging-hosts/org.keepassxc.keepassxc_browser.json9
-rw-r--r--.pylintrc2
-rw-r--r--.screenrc7
-rw-r--r--.ssh/config1
-rw-r--r--.ssh/config.d/0000-all.conf29
-rw-r--r--.tmux.conf.local6
-rw-r--r--.vimrc25
l---------.waterfox/native-messaging-hosts/com.github.browserpass.native.json1
l---------.waterfox/native-messaging-hosts/org.keepassxc.keepassxc_browser.json1
-rw-r--r--CHANGELOG.md518
-rw-r--r--LICENSE165
-rw-r--r--LICENSE.md163
-rw-r--r--Makefile26
-rw-r--r--README.md36
-rwxr-xr-xbin/git-other-branches12
-rwxr-xr-xbin/git-update-all17
-rwxr-xr-xbin/ssh-with-gpg20
-rw-r--r--distrib.yml124
-rw-r--r--screenshots/prompt.pngbin0 -> 83977 bytes
m---------tmux-gpakosz0
m---------tmux-yank0
43 files changed, 1666 insertions, 119 deletions
diff --git a/.bash/aliases.bash b/.bash/aliases.bash
index b66218c..dd36794 100644
--- a/.bash/aliases.bash
+++ b/.bash/aliases.bash
@@ -6,20 +6,49 @@
if [ "$TERM" != "dumb" ];then
eval "$(dircolors -b)"
alias ls="ls --color=auto"
- alias grep="grep --color=auto"
- alias egrep="egrep --color=auto"
+ case "$OSNAME" in
+ 'sunos') ;;
+ *)
+ alias grep="grep --color=auto"
+ alias egrep="egrep --color=auto"
+ ;;
+ esac
fi
+# shellcheck disable=SC2139
+if [ -n "$EDITOR" ]; then
+ alias editor="$EDITOR"
+elif [ -n "$VISUAL" ]; then
+ alias editor="$VISUAL"
+elif [ -x "/usr/bin/vim" ]; then
+ alias editor="/usr/bin/vim"
+elif [ -x "/usr/bin/vi" ]; then
+ alias editor="/usr/bin/vi"
+else
+ alias editor="/usr/bin/edit"
+fi
+alias lst="ls -l --time-style=full-iso"
alias cls=' echo -ne "\033c"'
alias pip-update="sudo pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 sudo pip install -U"
alias matrix='cmatrix -sbu6 -C cyan'
+alias tbc='tbclock -e -H2 -M7 -S3'
command -v colordiff >/dev/null 2>&1&&alias diff="colordiff"
-command -v colormake >/dev/null 2>&1&&alias make="colormake"
+#command -v colormake >/dev/null 2>&1&&alias make="colormake"
alias perllint="perl -Mstrict -Mdiagnostics -cw"
alias scredit='gimp "${SCRSHDIR}/$(ls -rt1 $SCRSHDIR/|tail -n1)"'
alias scrview='pqiv -i "${SCRSHDIR}/$(ls -rt1 $SCRSHDIR/|tail -n1)"'
+alias scrls='ls -l "${SCRSHDIR}/$(ls -rt1 $SCRSHDIR/|tail -n1)"'
alias fuck='sudo $(history -p \!\!)'
alias x509-out='openssl x509 -text -certopt no_version,no_pubkey,no_sigdump,no_aux,no_header -noout -in'
-alias psgrep='ps -fp "$(pgrep -d, -x ssh-agent)"'
+alias isocreate='rm -vf /tmp/image.iso && mkisofs -v -r -J -translation-table -hide-joliet-trans-tbl -iso-level 4 -o /tmp/image.iso'
+#alias isoburn='sudo cdrecord -v -speed=10 dev=/dev/sr0 -data'
+alias isoburn='sudo cdrecord -v dev=/dev/sr0 -data'
+# voice messages e.g. for whatsapp (on libpurple). use "voicemsg OUTPUT.ogg"
+alias voicemsg='ffmpeg -f pulse -i default -ac 1 -ar 16000 -c:a libopus -y'
+if command -v colordiff > /dev/null;then alias diff="colordiff";fi
+# aliases like this are relevant if you use multiple passwordstore stores, e.g.
+# your common store is a department-wide one but you still need to store personal credentials
+alias ppass='PASSWORD_STORE_DIR=~/.password-store pass'
+alias ifs='printf "%q\\n" "$IFS "'
# ----- CHOO CHOO ----- #
if command -v sl >/dev/null;then
alias sl='sl -e'
@@ -60,20 +89,40 @@ alias startxmonad="sxs xmonad"
alias saa="source ~/.ssh/sshenv;ssh-add >/dev/null 2>&1;ssh-add -l"
alias sshr='ssh -o StrictHostKeyChecking=no'
alias sshk='ssh -o PasswordAuthentication=yes -o PreferredAuthentications=keyboard-interactive,password -o PubkeyAuthentication=no'
+alias sshg="ssh-with-gpg"
function add-sshagent-init {
for KEY in "${SSHKEYS[@]}";do
- ssh-add "$KEY"
+ FFPRINT="$(ssh-keygen -Esha256 -lf "$KEY")" || return 1
+ if ! ssh-add -l 2>/dev/null | grep "$FFPRINT" >/dev/null; then
+ ssh-add -q "$KEY"
+ fi
done
}
+alias sshmaster='ssh -O'
# ----- FS ----- #
xstat() {
for target in "${@}";do
+ # shellcheck disable=SC2012
inode=$(ls -di "${target}"|cut -d ' ' -f 1)
fs=$(df "${target}"|tail -n 1|awk '{print $1}')
crtime=$(sudo debugfs -R 'stat <'"${inode}"'>' "${fs}" 2>/dev/null | grep -oP 'crtime.*--\s*\K.*')
printf "%s\t%s\n" "${crtime}" "${target}"
done
}
+# ----- PACKAGE MANAGERS ----- #
+if [ -x "/usr/bin/paru" ];then
+ alias pkgclean="paru --noconfirm -Sc"
+elif [ -x "/usr/bin/pikaur" ];then
+ alias pkgclean="pikaur --noconfirm -Sc"
+elif [ -x "/usr/bin/pacman" ];then
+ alias pkgclean="/usr/bin/sudo /usr/bin/pacman --noconfirm -Sc"
+elif [ -x "/usr/bin/apt" ];then
+ alias pkgclean="/usr/bin/sudo /usr/bin/apt clean"
+elif [ -x "/usr/bin/dnf" ];then
+ alias pkgclean="/usr/bin/sudo /usr/bin/dnf clean packages"
+elif [ -x "/usr/bin/zypper" ];then
+ alias pkgclean="/usr/bin/sudo /usr/bin/zypper clean"
+fi
# ----- GRAFANA ----- #
if command -v grafana-cli >/dev/null;then
alias gfpi='sudo grafana-cli plugins install'
@@ -132,6 +181,7 @@ alias certshow="certmgr -L -n"
# ----- APPLICATION CONTROL ----- #
alias browser-set='xdg-settings set default-web-browser'
alias browser-get='xdg-settings get default-web-browser'
+alias default-desktop-apps="editor ~/.config/mimeapps.list"
# ----- CONTAINERS ----- #
if command -v podman >/dev/null;then
alias pcl="podman container list"
@@ -157,3 +207,32 @@ if command -v podman >/dev/null;then
alias pnd="podman network disconnect"
alias ppd="podman pod stop"
fi
+# ----- PUPPET + RUBY ----- #
+# ...yeah, I'm mostly doing ruby stuff for Puppet, erm I mean
+# OpenVox (now that Perforce have turned the Puppet world to a burning heap of garbage)
+alias bake="bundle exec rake"
+# ----- OTHER STUFF ----- #
+for cmmd in batcat bat; do
+ if command -v "$cmmd" > /dev/null; then
+ # shellcheck disable=SC2139
+ alias cat="${cmmd} --tabs 4 --wrap never --paging never --style 'plain,rule'"
+ # shellcheck disable=SC2139
+ alias less="${cmmd} --tabs 4 --wrap never --paging always --style 'plain,rule'"
+ alias plain-cat='/usr/bin/cat'
+ alias plc='/usr/bin/cat'
+ alias plain-less='/usr/bin/less'
+ alias pll='/usr/bin/less'
+ export MANPAGER="sh -c 'col -bx | ${cmmd} -l man -p'"
+ export MANROFFOPT="-c"
+ break
+ fi
+done
+if command -v 'thefuck' > /dev/null; then
+ alias wtf='thefuck $(fc -nl -1)'
+fi
+# Flake8. Nice linter, but...
+# They kneeled to USER STUPIDITY when it comes to configuration. Wut?
+# https://flake8.pycqa.org/en/latest/release-notes/4.0.0.html#backwards-incompatible-changes
+# --> https://github.com/pycqa/flake8/pull/1404
+# Users were confused, so ~/.config/flake8 is not supported anymore. lelkek.
+alias flake8='flake8 --config ${HOME}/.config/flake8'
diff --git a/.bash/exec.bash b/.bash/exec.bash
index ffbeaae..aeba7ca 100644
--- a/.bash/exec.bash
+++ b/.bash/exec.bash
@@ -7,10 +7,30 @@ set bell-style visible
# start ssh agent. this script will not try to run a new instance
# (unless we specified -f, which we don't).
-if echo "${SSHAGH[@]}" | fgrep --word-regexp "$(hostname -f)";then
- "$HOME/bin/ssh-agent-launcher" -q
+SSHRUN=0
+case "$OSNAME" in
+ 'sunos')
+ if echo "${SSHAGH[@]}" | grep -E "^$(cat /etc/nodename)\$" > /dev/null; then
+ SSHRUN=1
+ fi
+ ;;
+ *)
+ if echo "${SSHAGH[@]}" | grep -F --word-regexp "$(hostname -f)" > /dev/null;then
+ SSHRUN=1
+ fi
+ ;;
+esac
+if [ "$SSHRUN" -eq 1 ]; then
+ # do not launch from SSH session, conflicts with user logging on locally afterwards
+ if [ -z "$SSH_TTY" ];then
+ "$HOME/bin/ssh-agent-launcher" -q
+ if ! pgrep -au "$(id -u)" dirmngr >/dev/null;then
+ gpg-connect-agent --dirmngr /bye 2>/dev/null
+ gpg --list-secret-keys >/dev/null 2>&1
+ fi
+ fi
fi
# because on some hosts the login path is fucked, unset in .local
# if it causes irritation:
-cd ~ || cd || exit 151
+cd ~ || cd || return 151
diff --git a/.bash/postexec.bash b/.bash/postexec.bash
index b2f257e..8beee31 100644
--- a/.bash/postexec.bash
+++ b/.bash/postexec.bash
@@ -1,4 +1,24 @@
declare -x SSH_AUTH_SOCK SSH_AGENT_PID
if [ -n "$SSHENVFILE" ] && [ -r "$SSHENVFILE" ];then
- source "$SSHENVFILE"
+ if source "$SSHENVFILE"; then
+ case "$OSNAME" in
+ 'sunos')
+ if echo "${SSHAGH[@]}"|tr ' ' '\n'|grep -E "^$(cat /etc/nodename)\$"; then
+ add-sshagent-init
+ fi
+ ;;
+ *)
+ if echo "${SSHAGH[@]}"|tr ' ' '\n'|grep -P "^$(hostname -f)\$" > /dev/null;then
+ add-sshagent-init
+ fi
+ ;;
+ esac
+ fi
fi
+for gitpsrc in "/usr/share/git/git-prompt.sh" "/usr/local/share/git/git-prompt.sh" \
+ "/usr/share/git-completion/prompt.sh" "/usr/local/share/git-completion/prompt.sh"; do
+ if [ -r "$gitpsrc" ]; then
+ source "$gitpsrc"
+ break
+ fi
+done
diff --git a/.bash/prompt.bash b/.bash/prompt.bash
index c34e557..6ac081b 100644
--- a/.bash/prompt.bash
+++ b/.bash/prompt.bash
@@ -4,61 +4,148 @@
# ----- PROMPT COLOURS ----- #
fgcolor () {
#echo "\\[\\033[38;5;"$1"m\\]"
- echo "\033[38;5;${1}m"
+ printf '\033[38;5;%bm' "$1"
+}
+fgtcolor () {
+ printf '\033[38;2;%b;%b;%bm' "$1" "$2" "$3"
}
bgcolor () {
#echo "\\[\\033[48;5;"$1"m\\]"
- echo "\033[48;5;${1}m"
+ printf '\033[48;5;%bm' "$1"
}
# This is Solaris bash compatible, so we cannot use + here for "at least once) but instead use the
# stupid old asterisk (*). Well, here hetting "no digits" practically won't hurt.
MYUID="$(id|sed 's/.*uid=\([0-9]*\).*/\1/g')";export MYUID
# ...because "empty" will hit the "any" condition in the end :)
+if [ -r '/etc/os-release' ]; then
+ OSMAJVER="$(grep '^VERSION_ID' /etc/os-release 2>/dev/null|awk -F= '{print $NF}'|sed 's/"//g'|awk -F\. '{print $1}')"
+fi
case "$MYUID" in
0)
+ FGC1="fgcolor 88"
case "$OSNAME" in
- debian) FGC1="fgcolor 88";FGC2="fgcolor 25";FGC3="fgcolor 38";;
- arch) FGC1="fgcolor 88";FGC2="fgcolor 24";FGC3="fgcolor 240";;
- redhat|fedora) FGC1="fgcolor 160";FGC2="fgcolor 88";FGC3="fgcolor 203";;
+ debian)
+ # Debian 12 = emerald
+ if [ "$OSMAJVER" -ge 12 ];then
+ FGC3="fgcolor 36";FGC2="fgtcolor 155 15 64"
+ else
+ FGC3="fgcolor 38";FGC2="fgtcolor 155 15 64"
+ fi
+ ;;
+ arch) FGC2="fgcolor 24";FGC3="fgcolor 240";;
+ redhat|rhel) FGC1="fgcolor 23";FGC2="fgcolor 88";FGC3="fgcolor 203";;
+ fedora) FGC1="fgcolor 160";FGC2="fgcolor 88";FGC3="fgcolor 203";;
# with the advent of Rocky, we'll match the time to SUSE's blue and the hostname to
# the colour of Geeko:
- #*suse|aix) FGC1="fgcolor 88";FGC2="fgcolor 22";FGC3="fgcolor 41";;
- *sles*) FGC1="fgcolor 88";FGC2="fgcolor 22";FGC3="fgcolor 83";;
- *suse|aix) FGC1="fgcolor 88";FGC2="fgcolor 30";FGC3="fgcolor 83";;
- *centos*) FGC1="fgcolor 88";FGC2="fgcolor 25";FGC3="fgcolor 208";;
- *solaris) FGC1="fgcolor 88";FGC2="fgcolor 31";FGC3="fgcolor 124";;
- ubuntu) FGC1="fgcolor 88";FGC2="fgcolor 130";FGC3="fgcolor 215";;
- rasp*) FGC1="fgcolor 88";FGC2="fgcolor 253";FGC3="fgcolor 126";;
- rocky) FGC1="fgcolor 88";FGC2="fgcolor 22";FGC3="fgcolor 41";;
- *) FGC1="fgcolor 88";FGC2="fgcolor 240";FGC3="fgcolor 244";;
+ #*suse|aix) FGC2="fgcolor 22";FGC3="fgcolor 41";;
+ *sles*) FGC2="fgcolor 22";FGC3="fgcolor 83";;
+ *suse*)
+ case "$OSNAME" in
+ *leap) FGC2="fgcolor 214";FGC3="fgcolor 83";;
+ *) FGC2="fgcolor 30";FGC3="fgcolor 83";;
+ esac
+ ;;
+ aix) FGC2="fgcolor 238";FGC3="fgcolor 83";;
+ *centos*) FGC2="fgcolor 25";FGC3="fgcolor 208";;
+ *solaris) FGC2="fgcolor 63";FGC3="fgcolor 124";;
+ ubuntu)
+ if [ "$OSMAJVER" -ge 24 ];then
+ if printf "%b" "$TERM"|grep -E 'xterm|256' > /dev/null;then
+ FGC2="fgcolor 125";FGC3="fgcolor 202"
+ else
+ FGC2="fgcolor 53";FGC3="fgcolor 184"
+ fi
+ elif [ "$OSMAJVER" -ge 22 ];then
+ if printf "%b" "$TERM"|grep -E 'xterm|256' > /dev/null;then
+ FGC2="fgcolor 208";FGC3="fgcolor 89"
+ else
+ FGC2="fgcolor 184";FGC3="fgcolor 53"
+ fi
+ else
+ FGC2="fgcolor 130";FGC3="fgcolor 215"
+ fi
+ ;;
+ rasp*) FGC2="fgcolor 253";FGC3="fgcolor 125";;
+ rocky) FGC2="fgcolor 240";FGC3="fgcolor 41";;
+ alma*) FGC1="fgcolor 28";FGC2="fgcolor 88";FGC3="fgcolor 39";;
+ sunos) FGC2="fgcolor 75";FGC3="fgcolor 130";;
+ nobara) FGC2="fgcolor 133";FGC3="fgcolor 63";;
+ *) FGC2="fgcolor 240";FGC3="fgcolor 244";;
esac
+ if [ -n "$TERMUX_APK_RELEASE" ]; then
+ if [ "$TERMUX_APK_RELEASE" == "F_DROID" ]; then
+ FGC2="fgcolor 27";FGC3="fgcolor 35"
+ fi
+ fi
;;
*)
+ FGC2="fgcolor 253"
case "$OSNAME" in
- debian) FGC1="fgcolor 25";FGC2="fgcolor 253";FGC3="fgcolor 38";;
- arch) FGC1="fgcolor 24";FGC2="fgcolor 253";FGC3="fgcolor 239";;
- redhat|fedora) FGC1="fgcolor 88";FGC2="fgcolor 253";FGC3="fgcolor 203";;
- #*suse|aix) FGC1="fgcolor 22";FGC2="fgcolor 253";FGC3="fgcolor 41";;
- *sles*) FGC1="fgcolor 22";FGC2="fgcolor 253";FGC3="fgcolor 83";;
- *suse|aix) FGC1="fgcolor 30";FGC2="fgcolor 253";FGC3="fgcolor 83";;
- *centos*) FGC1="fgcolor 25";FGC2="fgcolor 253";FGC3="fgcolor 208";;
- *solaris) FGC1="fgcolor 31";FGC2="fgcolor 253";FGC3="fgcolor 124";;
- ubuntu) FGC1="fgcolor 130";FGC2="fgcolor 253";FGC3="fgcolor 215";;
- rasp*) FGC1="fgcolor 53";FGC2="fgcolor 253";FGC3="fgcolor 126";;
- rocky) FGC1="fgcolor 22";FGC2="fgcolor 253";FGC3="fgcolor 41";;
- *) FGC1="fgcolor 240";FGC2="fgcolor 253";FGC3="fgcolor 244";;
+ debian)
+ if [ "$OSMAJVER" -ge 12 ];then
+ FGC1="fgtcolor 155 15 64";FGC3="fgcolor 36"
+ else
+ FGC1="fgtcolor 155 15 64";FGC3="fgcolor 38"
+ fi
+ ;;
+ arch) FGC1="fgcolor 24";FGC3="fgcolor 239";;
+ redhat|rhel) FGC1="fgcolor 23";FGC3="fgcolor 88";;
+ fedora) FGC1="fgcolor 88";FGC3="fgcolor 203";;
+ #*suse|aix) FGC1="fgcolor 22";FGC3="fgcolor 41";;
+ *sles*) FGC1="fgcolor 22";FGC3="fgcolor 83";;
+ *suse*)
+ case "$OSNAME" in
+ *leap) FGC1="fgcolor 214";FGC3="fgcolor 83";;
+ *) FGC1="fgcolor 30";FGC3="fgcolor 83";;
+ esac
+ ;;
+ aix) FGC1="fgcolor 238";FGC3="fgcolor 83";;
+ *centos*) FGC1="fgcolor 25";FGC3="fgcolor 208";;
+ *solaris) FGC1="fgcolor 63";FGC3="fgcolor 124";;
+ ubuntu)
+ if [ "$OSMAJVER" -ge 24 ];then
+ if printf "%b" "$TERM"|grep -E 'xterm|256' > /dev/null;then
+ FGC1="fgcolor 125";FGC3="fgcolor 202"
+ else
+ FGC1="fgcolor 53";FGC3="fgcolor 184"
+ fi
+ elif [ "$OSMAJVER" -ge 22 ];then
+ if printf "%b" "$TERM"|grep -E 'xterm|256' > /dev/null;then
+ FGC1="fgcolor 89";FGC3="fgcolor 208"
+ else
+ FGC1="fgcolor 53";FGC3="fgcolor 184"
+ fi
+ else
+ FGC1="fgcolor 130";FGC3="fgcolor 215"
+ fi
+ ;;
+ rasp*) FGC1="fgcolor 52";FGC3="fgcolor 125";;
+ rocky) FGC1="fgcolor 240";FGC3="fgcolor 41";;
+ alma*) FGC1="fgcolor 124";FGC2="fgcolor 229";FGC3="fgcolor 39";;
+ sunos) FGC1="fgcolor 75";FGC3="fgcolor 130";;
+ nobara) FGC1="fgcolor 63";FGC3="fgcolor 133";;
+ *) FGC1="fgcolor 240";FGC3="fgcolor 244";;
esac
+ if [ -n "$TERMUX_APK_RELEASE" ]; then
+ if [ "$TERMUX_APK_RELEASE" == "F_DROID" ]; then
+ FGC1="fgcolor 27";FGC3="fgcolor 35"
+ fi
+ fi
;;
esac
+# HYPERVISOR LAYER 8 SOFTWARE
+if pveversion > /dev/null 2>&1;then
+ FGC1="fgcolor 238";FGC3="fgcolor 130"
+fi
# make it possible to draw user-defined colours
-# shellcheck disable=SC1090
+# shellcheck disable=SC1090,SC1091
[ -r "${BBD}/prompt.bash.local" ] && source "${BBD}/prompt.bash.local"
# ----- USER SEP. AND HOSTNAME ----- #
UHSEP="@"
[ -n "$TMUX_PANE" ]&&UHSEP="[T]"
[ -n "$BYOBU_WINDOW_NAME" ]&&UHSEP="[B]"
-[ "$(hostname -s)" == "monitoring" ]&&PHN="$(hostname -f)"||PHN="$(hostname -s)"
+[ "$OSNAME" != 'sunos' ]&&[ "$(hostname -s)" == "monitoring" ]&&PHN="$(hostname -f)"||PHN="$(hostname -s)"
# ----- ASSEMBLE THE PROMPT COMMAND ADDITION ----- #
__prompt_command() {
@@ -70,15 +157,52 @@ __prompt_command() {
else
local EXIT2="$EXIT"
fi
+ PS1='\[\033[2m\033[3m\]\#\[\033[0m\] '
+ if [ "$OSVER" ]; then
+ PS1+='\[\033[48;5;237m\033[\033[38;5;253m\] '
+ PS1+="$OSVER"
+ PS1+=' \[\033[0m\] '
+ fi
+ PS1+='\[\033[1m\]\['
+ PS1+="$($FGC1)"
+ PS1+='\]'
case "$MYUID" in
0)
- PS1="\\# \[$(tput bold)\]\[$($FGC1)\]\\u\[$($FGC2)\]@$PHN \[$($FGC3)\]\\w \[$(tput sgr0)\]"
+ # PS1="\[\\033[2m\\033[3m\]\\#\[\\033[0m\] \[$(tput bold)\]\[$($FGC1)\]\\u\[$($FGC2)\]@$PHN \[$($FGC3)\]\\w \[$(tput sgr0)\]\\n"
+ PS1+='\u\['
+ PS1+="($FGC2)"
+ PS1+='\]'
+ PS1+="@$PHN"
+ PS1+='\['
+ PS1+="$($FGC3)"
+ PS1+='\]\w \[\033[0m\]\n'
;;
*)
- PS1="\\# \[$(tput bold)\]\[$($FGC1)\]\t \[$($FGC2)\]\\u$UHSEP\[$($FGC3)\]$PHN \\w \[$(tput sgr0)\]"
+ # PS1="\[\\033[2m\\033[3m\]\\#\[\\033[0m\] \[$(tput bold)\]\[$($FGC1)\]\t \[$($FGC2)\]\\u$UHSEP\[$($FGC3)\]$PHN \\w \[$(tput sgr0)\]\\n"
+ PS1+='\t \['
+ PS1+="$($FGC2)"
+ PS1+='\]\u'
+ PS1+="$UHSEP"
+ PS1+='\['
+ PS1+="$($FGC3)"
+ PS1+='\]'
+ PS1+="$PHN"
+ PS1+=' \w \[\033[0m\]\n'
;;
esac
- if command -v __git_ps1 >/dev/null 2>&1;then PS1+="$(__git_ps1 "%s ")";fi
+ # git-completion. Sources:
+ # - https://github.com/git/git/tree/master/contrib/completion (main)
+ # - https://github.com/felipec/git-completion (fork)
+ # - Debian: easygit (outdated! you may want to use something like /git-prompt inside this repo)
+ # - Arch: git-completion (AUR, with functionality tests) - search for ...share/git(-completion)?/prompt.sh
+ # - Manual measure: this repository, /git-prompt
+ # Why all this fuss? magicmonty takes control over the whole prompt, __git_ps1 only serves a part
+ # of it. We don't like monoliths, we like modules; the latter is good practice.
+ # also, see postexec --> one-time sourcing of git's prompt.sh
+ if command -v __git_ps1 >/dev/null 2>&1;then
+ GIT_PS1_SHOWCOLORHINTS=1; export GIT_PS1_SHOWCOLORHINTS
+ PS1+="$(__git_ps1 "%s ")"
+ fi
if [ "$EXIT" -eq 0 ];then
PS1+="\[\033[0;32m\]# "
elif [ "$EXIT" -eq 255 ]||[ "$EXIT" -eq 127 ];then
diff --git a/.bash/vars.bash b/.bash/vars.bash
index cb124be..3bc68cd 100644
--- a/.bash/vars.bash
+++ b/.bash/vars.bash
@@ -1,5 +1,6 @@
#!/usr/bin/env bash
# vim:syntax=sh
+# shellcheck disable=SC2034,SC1091
# default Byobu session name
export BSNAME="CHANGEME"
@@ -9,8 +10,6 @@ export SCRSHDIR="${HOME}/Pictures"
export SSHHOME="${HOME}/.ssh"
# 1. key files, array:
SSHKEYS=( "${SSHHOME}/id_ed25519" "${SSHHOME}/id_rsa" )
-# 2. SSH environment file
-export SSHENVFILE="${HOME}/.ssh/sshenv"
# 3. Hosts on which ssh-agent should run, FQDN. Array.
# Typically, "hosts" will equal your workstations. See ssh_config(5) (esp. ForwardAgent)
# Interpreted by fgrep / grep -F.
@@ -19,18 +18,28 @@ SSHAGH+=( "woschd.example.com" )
export SSHAGH
# ----- SHELL ----- #
-for pa in "/usr/local/bin" "${HOME}/bin";do
- if ! printf "%b" "$PATH"|grep -P "^${pa}:|:${pa}:" >/dev/null;then
- export PATH="${pa}:${PATH}"
+for pa in "/usr/local/bin" "${HOME}/bin" "${HOME}/.local/bin" "${HOME}/go/bin";do
+ if [ -x "$pa" ]; then
+ if ! printf "%b" "$PATH"|grep -E "^${pa}:|:${pa}:" >/dev/null;then
+ export PATH="${pa}:${PATH}"
+ fi
fi
done
# $OSNAME
if [ -r "/etc/os-release" ];then
- OSNAME="$(grep ^ID /etc/os-release|awk -F= '{print $NF}'|head -n1)"
+ OSNAME="$(grep ^ID /etc/os-release|awk -F= '{print $NF}'|head -n1|sed 's/"//g')"
+ if grep '^DEBIAN_VERSION_FULL' /etc/os-release >/dev/null 2>&1; then
+ OSVER="$(grep '^DEBIAN_VERSION_FULL' /etc/os-release|awk -F= '{print $NF}'|head -n1|sed 's/"//g')"
+ elif grep '^BUILD_ID' /etc/os-release >/dev/null 2>&1; then
+ OSVER="$(grep '^BUILD_ID' /etc/os-release|awk -F= '{print $NF}'|head -n1|sed 's/"//g')"
+ else
+ OSVER="$(grep '^VERSION_ID' /etc/os-release|awk -F= '{print $NF}'|head -n1|sed 's/"//g')"
+ fi
+elif [ "$(uname -s)" == 'SunOS' ]; then OSNAME="sunos"
elif [ -r "/etc/redhat-release" ];then
- grep -P "^Red[\ ]?[Hh]at" /etc/redhat-release >/dev/null 2>&1 && OSNAME="redhat"
- grep -P "^[Ff]edora" /etc/redhat-release >/dev/null 2>&1 && OSNAME="fedora"
- grep -P "^[Cc]ent[Oo][Ss]" /etc/redhat-release >/dev/null 2>&1 && OSNAME="centos"
+ grep -E "^Red[\ ]?[Hh]at" /etc/redhat-release >/dev/null 2>&1 && OSNAME="redhat"
+ grep -E "^[Ff]edora" /etc/redhat-release >/dev/null 2>&1 && OSNAME="fedora"
+ grep -E "^[Cc]ent[Oo][Ss]" /etc/redhat-release >/dev/null 2>&1 && OSNAME="centos"
[ -z "$OSNAME" ]&&OSNAME="obsolete"
elif [ -r "/etc/SuSE-release" ];then
OSNAME="oldsuse"
@@ -81,3 +90,13 @@ export LIBVIRT_DEFAULT_URI="qemu:///system"
if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
debian_chroot=$(cat /etc/debian_chroot)
fi
+
+if [ -r "vars.bash.local" ];then
+ source vars.bash.local
+fi
+# SSH environment file
+#!/usr/bin/env bash
+# vim:syntax=sh
+#if echo "${SSHAGH[@]}" | grep -F --word-regexp "$(hostname -f)" > /dev/null;then
+ export SSHENVFILE="${HOME}/.ssh/sshenv"
+#fi
diff --git a/.bashrc b/.bashrc
index 4c7835d..c1fee85 100644
--- a/.bashrc
+++ b/.bashrc
@@ -41,3 +41,5 @@ for i in vars aliases exec prompt postexec;do
else true
fi
done
+# shellcheck disable=SC1090
+[ -e "${HOME}/.ssh/sshenv" ] && source "${HOME}/.ssh/sshenv"||true
diff --git a/.config/chromium/NativeMessagingHosts/com.github.browserpass.native.json b/.config/chromium/NativeMessagingHosts/com.github.browserpass.native.json
new file mode 100644
index 0000000..9a89b66
--- /dev/null
+++ b/.config/chromium/NativeMessagingHosts/com.github.browserpass.native.json
@@ -0,0 +1,11 @@
+{
+ "name": "com.github.browserpass.native",
+ "description": "Browserpass native component for the Chromium extension",
+ "path": "/usr/bin/browserpass",
+ "type": "stdio",
+ "allowed_origins": [
+ "chrome-extension://naepdomgkenhinolocfifgehidddafch/",
+ "chrome-extension://pjmbgaakjkbhpopmakjoedenlfdmcdgm/",
+ "chrome-extension://klfoddkbhleoaabpmiigbmpbjfljimgb/"
+ ]
+}
diff --git a/.config/chromium/NativeMessagingHosts/org.keepassxc.keepassxc_browser.json b/.config/chromium/NativeMessagingHosts/org.keepassxc.keepassxc_browser.json
new file mode 100644
index 0000000..4188409
--- /dev/null
+++ b/.config/chromium/NativeMessagingHosts/org.keepassxc.keepassxc_browser.json
@@ -0,0 +1,10 @@
+{
+ "allowed_origins": [
+ "chrome-extension://pdffhmdngciaglkoonimfcmckehcpafo/",
+ "chrome-extension://oboonakemofpalcgghocfoadofidjkkk/"
+ ],
+ "description": "KeePassXC integration with native messaging support",
+ "name": "org.keepassxc.keepassxc_browser",
+ "path": "/usr/bin/keepassxc-proxy",
+ "type": "stdio"
+}
diff --git a/.config/flake8 b/.config/flake8
new file mode 120000
index 0000000..cb0568d
--- /dev/null
+++ b/.config/flake8
@@ -0,0 +1 @@
+../.flake8 \ No newline at end of file
diff --git a/.config/git-cliff.toml b/.config/git-cliff.toml
new file mode 100644
index 0000000..612892d
--- /dev/null
+++ b/.config/git-cliff.toml
@@ -0,0 +1,94 @@
+# git-cliff ~ configuration file
+# https://git-cliff.org/docs/configuration
+
+
+[changelog]
+# A Tera template to be rendered for each release in the changelog.
+# See https://keats.github.io/tera/docs/#introduction
+body = """
+{% if version %}\
+ ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
+{% else %}\
+ ## [unreleased]
+{% endif %}\
+{% for group, commits in commits | group_by(attribute="group") %}
+ ### {{ group | striptags | trim | upper_first }}
+ {% for commit in commits %}
+ - {% if commit.scope %}*({{ commit.scope }})* {% endif %}\
+ {% if commit.breaking %}[**breaking**] {% endif %}\
+ {{ commit.message | upper_first }}\
+ {% endfor %}
+{% endfor %}
+"""
+# Remove leading and trailing whitespaces from the changelog's body.
+trim = true
+# Render body even when there are no releases to process.
+render_always = true
+# An array of regex based postprocessors to modify the changelog.
+postprocessors = [
+ # Replace the placeholder <REPO> with a URL.
+ #{ pattern = '<REPO>', replace = "https://github.com/orhun/git-cliff" },
+]
+# render body even when there are no releases to process
+# render_always = true
+# output file path
+# output = "test.md"
+
+[git]
+# Parse commits according to the conventional commits specification.
+# See https://www.conventionalcommits.org
+conventional_commits = true
+# Exclude commits that do not match the conventional commits specification.
+filter_unconventional = false
+# Require all commits to be conventional.
+# Takes precedence over filter_unconventional.
+require_conventional = false
+# Split commits on newlines, treating each line as an individual commit.
+split_commits = false
+# An array of regex based parsers to modify commit messages prior to further processing.
+commit_preprocessors = [
+ # Replace issue numbers with link templates to be updated in `changelog.postprocessors`.
+ #{ pattern = '\((\w+\s)?#([0-9]+)\)', replace = "([#${2}](<REPO>/issues/${2}))"},
+ # Check spelling of the commit message using https://github.com/crate-ci/typos.
+ # If the spelling is incorrect, it will be fixed automatically.
+ #{ pattern = '.*', replace_command = 'typos --write-changes -' },
+]
+# Prevent commits that are breaking from being excluded by commit parsers.
+protect_breaking_commits = false
+# An array of regex based parsers for extracting data from the commit message.
+# Assigns commits to groups.
+# Optionally sets the commit's scope and can decide to exclude commits from further processing.
+commit_parsers = [
+ { message = "^feat", group = "<!-- 0 --> Features" },
+ { message = "^fix", group = "<!-- 1 --> Bug Fixes" },
+ { message = "^doc", group = "<!-- 3 --> Documentation" },
+ { message = "^perf", group = "<!-- 4 --> Performance" },
+ { message = "^refactor", group = "<!-- 2 --> Refactor" },
+ { message = "^style", group = "<!-- 5 --> Styling" },
+ { message = "^test", group = "<!-- 6 --> Testing" },
+ { message = "^chore\\(release\\): prepare for", skip = true },
+ { message = "^chore\\(deps.*\\)", skip = true },
+ { message = "^chore\\(pr\\)", skip = true },
+ { message = "^chore\\(pull\\)", skip = true },
+ { message = "^chore|^ci", group = "<!-- 7 --> Miscellaneous Tasks" },
+ { body = ".*security", group = "<!-- 8 --> Security" },
+ { message = "^revert", group = "<!-- 9 --> Revert" },
+ { message = ".*", group = "<!-- 10 --> Other" },
+]
+# Exclude commits that are not matched by any commit parser.
+filter_commits = false
+# Fail on a commit that is not matched by any commit parser.
+fail_on_unmatched_commit = false
+# An array of link parsers for extracting external references, and turning them into URLs, using regex.
+link_parsers = []
+# Include only the tags that belong to the current branch.
+use_branch_tags = false
+# Order releases topologically instead of chronologically.
+topo_order = false
+# Order commits topologically instead of chronologically.
+topo_order_commits = true
+# Order of commits in each group/release within the changelog.
+# Allowed values: newest, oldest
+sort_commits = "oldest"
+# Process submodules commits
+recurse_submodules = true
diff --git a/.flake8 b/.flake8
index d236572..e6ad5fa 100644
--- a/.flake8
+++ b/.flake8
@@ -4,9 +4,17 @@
count = True
# show-source = True
# W191: tabs instead of spaces (screw you!), E401: multiple imports on a single line
-ignore = W191,E401
+# ignore = W191,E401
+ignore = E401
max-line-length = 100
# Do test for docstrings. Laziness sucks.
doctests = True
# use only if flake8-colors is installed:
-format = ${cyan}%(path)s${reset}:${yellow_bold}%(row)d${reset}:${green_bold}%(col)d${reset}:\\t${red_bold}%(code)s${reset} %(text)s
+# format = ${cyan}%(path)s${reset}:${yellow_bold}%(row)d${reset}:${green_bold}%(col)d${reset}:\\t${red_bold}%(code)s${reset} %(text)s
+# Superseding flake8-colors:
+format = %(cyan)s%(path)s%(reset)s:%(yellow)s%(bold)s%(row)d%(reset)s:%(green)s%(bold)s%(col)d%(reset)s: %(red)s%(bold)s%(code)s%(reset)s %(text)s
+# python8-flake8-cognitive-complexity
+max-cognitive-complexity = 16
+#per-file-ignores =
+# # imported but unused
+# __init__.py: F401
diff --git a/.gitconfig b/.gitconfig
index 831bc32..673b865 100644
--- a/.gitconfig
+++ b/.gitconfig
@@ -1,3 +1,4 @@
+# vim:syntax=gitconfig:ts=4
[color]
diff = auto
status = auto
@@ -20,6 +21,8 @@
dc = diff --cached
lol = log --graph --decorate --pretty=format:'%C(auto)%h %G? %d %s%Creset' --abbrev-commit
lola = log --graph --decorate --pretty=format:'%C(auto)%h %G? %d %s%Creset' --abbrev-commit --all
+ logadog = log --all --decorate --oneline --graph
+ lf = log --graph --decorate --pretty=ln-long
ls = ls-files
compactlog = log --pretty=format:"%h%x09%an%x09%ad%x09%s" --date=short
# check out existing remote branch, e.g. origin/branchname
@@ -36,6 +39,7 @@
ap = add -p
up = pull --rebase=preserve
fa = fetch --all --verbose
+ fap = fetch --all --prune --verbose
gr = grep --break --heading --line-number
d = diff
ds = diff --stat
@@ -54,21 +58,55 @@
branchpull = remote update origin --prune
branchremdel = push origin --delete
ba = branch --list --all
+ smam = submodule add -b master
+ smir = submodule update --init --recursive
+ smu = submodule foreach git pull
+ bl = branch --list
+ br = branch -r
+ rhh = reset --hard HEAD
+ sl = shortlog -s
+ sls = "!git shortlog -s | cut -f1 | spark"
+ gl-mr = "!sh -c 'git fetch $1 merge-requests/$2/head:mr-$1-$2 && git checkout mr-$1-$2' -"
+ cps = cherry-pick -S
+ force = push --force-with-lease
+ pf = push --force-with-lease
+ current-branch = rev-parse --abbrev-ref HEAD
+ cb = current-branch
+ clo = cliff -o CHANGELOG.md
[push]
- default = simple
+ default = simple
+[pretty]
+ ln-long = format:%C(auto)%H %gD %d %nAuthor: %aN <%aE>%n%C(auto)GPG signature: %G? %GF (%GT)%nGPG Primary Key: %GP%nDate: %ad %nSubject: %s %+b %+N %+(trailers)
[core]
- editor = vim
- fileMode = true
+ editor = vim
+ fileMode = true
+ hooksPath = ~/git-hooks
+ abbrev = 7
[merge]
- tool = vimdiff
+ tool = vimdiff
[mergetool]
- keepBackup = false
+ keepBackup = false
[gui]
- fontui = -family Hack -size 11 -weight normal -slant roman -underline 0 -overstrike 0
- fontdiff = -family Hack -size 11 -weight normal -slant roman -underline 0 -overstrike 0
+ fontui = -family Hack -size 11 -weight normal -slant roman -underline 0 -overstrike 0
+ fontdiff = -family Hack -size 11 -weight normal -slant roman -underline 0 -overstrike 0
[commit]
- gpgSign = true
+ gpgsign = false
+[tag]
+ gpgsign = false
#[gpg]
# program = /usr/bin/gpg2
[http]
#proxy = http://10.0.0.1:3128/
+[pull]
+ rebase = false
+[pack]
+ windowMemory = 1024m
+[credential]
+ helper = !type pass-git-helper > /dev/null && pass-git-helper $@
+ useHttpPath = true
+[init]
+ # we don't adhere to extremists trying to alter language, this was a bad idea pre-1990 and it still is.
+ # this term was not meant racially or sexually abusive, so the convention remains.
+ defaultBranch = master
+[safe]
+ directory = /opt/puppetlabs/pdk/share/cache/pdk-templates.git
diff --git a/.githooks/post-checkout b/.githooks/post-checkout
new file mode 100755
index 0000000..e02dfcf
--- /dev/null
+++ b/.githooks/post-checkout
@@ -0,0 +1,13 @@
+#!/usr/bin/env sh
+rm -rf ./git-prompt
+git -c submodule.sha1collisiondetection.update=none clone --no-checkout --depth 1 https://github.com/git/git.git ./git-prompt &&\
+(
+ cd ./git-prompt || exit 110
+ #mkdir -pv contrib/completion || exit 111
+ #git show HEAD:contrib/completion/git-prompt.sh > contrib/completion/git-prompt.sh || exit 112
+ git restore --staged contrib/completion/git-prompt.sh
+ git checkout contrib/completion/git-prompt.sh
+ # if you can't cope with git reporting a truckload of deleted files, do this:
+ #rm -rf .git
+ # ...mind you this will alwasys pull in the whole repository on checkout/clone.
+)
diff --git a/.githooks/pre-commit b/.githooks/pre-commit
new file mode 100755
index 0000000..2ec7e41
--- /dev/null
+++ b/.githooks/pre-commit
@@ -0,0 +1,4 @@
+#!/usr/bin/env sh
+git config --remove-section submodule.git-prompt
+printf "submodule git-prompt has been removed. After pushing, don't forget to trigger the"
+printf " post-checkout hook again.\\n"
diff --git a/.gitignore b/.gitignore
index f208a5c..3939de8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,6 +15,8 @@
!/.flake8
!/.forbidden_modules
!/.gitconfig
+!/.gnupg
+!/.gnupg/*
!/Makefile
!/.perlcriticrc
!/.profile
@@ -24,3 +26,18 @@
!/tmux-yank
!/.tmux.conf*
!/.vimrc
+!/.ssh/config
+!/.ssh/config.d/0000-all.conf
+#!/git-prompt
+!/.githooks
+!/.screenrc
+!/.config/flake8
+!/.config/chromium/NativeMessagingHosts/*
+!/.waterfox/native-messaging-hosts/*
+!/.librewolf/native-messaging-hosts/*
+!/.mozilla/native-messaging-hosts/*
+!/CHANGELOG.md
+!/.config/git-cliff.toml
+!/LICENSE
+!/LICENSE.md
+!/screenshots/prompt.png
diff --git a/.gitmodules b/.gitmodules
index f595963..9a9d797 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,6 +1,11 @@
[submodule "tmux-gpakosz"]
path = tmux-gpakosz
url = https://github.com/gpakosz/.tmux
+ branch = master
[submodule "tmux-yank"]
path = tmux-yank
url = https://github.com/tmux-plugins/tmux-yank
+ branch = master
+[submodule "git-prompt"]
+ path = git-prompt
+ url = https://github.com/git/git.git
diff --git a/.gnupg/dirmngr.conf b/.gnupg/dirmngr.conf
new file mode 100644
index 0000000..22d48ee
--- /dev/null
+++ b/.gnupg/dirmngr.conf
@@ -0,0 +1 @@
+keyserver hkps://pgp.surfnet.nl
diff --git a/.gnupg/gpg-agent.conf b/.gnupg/gpg-agent.conf
new file mode 100644
index 0000000..2327757
--- /dev/null
+++ b/.gnupg/gpg-agent.conf
@@ -0,0 +1,16 @@
+ignore-cache-for-signing
+#pinentry-program /usr/bin/pinentry-gtk-2
+pinentry-program /usr/bin/pinentry-curses
+pinentry-timeout 15
+allow-loopback-pinentry
+allow-preset-passphrase
+disable-scdaemon
+enable-ssh-support
+extra-socket /run/user/21337/gnupg/S.gpg-agent-extra
+# programs like gnome-keyring would define their own values like
+# pin timeout. That's going hydra/snowflake - disallow:
+no-allow-external-cache
+# invalidate after n seconds, reaccessing resets timer
+default-cache-ttl 10
+# invalidate after n seconds even if timer has been reset in the meantime
+max-cache-ttl 60
diff --git a/.gnupg/gpg.conf b/.gnupg/gpg.conf
new file mode 100644
index 0000000..d91ecbd
--- /dev/null
+++ b/.gnupg/gpg.conf
@@ -0,0 +1,14 @@
+use-agent
+# if we have multiple keys:
+#default-key 2FA6B7C2BADC0DED1337D00D710A128212507E08
+fixed-list-mode
+keyid-format 0xlong
+personal-digest-preferences SHA512 SHA384 SHA256 SHA224
+default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 BZIP2 ZLIB ZIP Uncompressed
+verify-options show-uid-validity
+list-options show-uid-validity
+cert-digest-algo SHA256
+no-emit-version
+ask-cert-level
+expert
+trust-model tofu+gpg
diff --git a/.librewolf/native-messaging-hosts/com.github.browserpass.native.json b/.librewolf/native-messaging-hosts/com.github.browserpass.native.json
new file mode 120000
index 0000000..14b9b0d
--- /dev/null
+++ b/.librewolf/native-messaging-hosts/com.github.browserpass.native.json
@@ -0,0 +1 @@
+../../.mozilla/native-messaging-hosts/com.github.browserpass.native.json \ No newline at end of file
diff --git a/.librewolf/native-messaging-hosts/org.keepassxc.keepassxc_browser.json b/.librewolf/native-messaging-hosts/org.keepassxc.keepassxc_browser.json
new file mode 120000
index 0000000..dba24ca
--- /dev/null
+++ b/.librewolf/native-messaging-hosts/org.keepassxc.keepassxc_browser.json
@@ -0,0 +1 @@
+../../.mozilla/native-messaging-hosts/org.keepassxc.keepassxc_browser.json \ No newline at end of file
diff --git a/.mozilla/native-messaging-hosts/com.github.browserpass.native.json b/.mozilla/native-messaging-hosts/com.github.browserpass.native.json
new file mode 100644
index 0000000..b2f26ba
--- /dev/null
+++ b/.mozilla/native-messaging-hosts/com.github.browserpass.native.json
@@ -0,0 +1,7 @@
+{
+ "name": "com.github.browserpass.native",
+ "description": "Browserpass native component for the Firefox extension",
+ "path": "/usr/bin/browserpass",
+ "type": "stdio",
+ "allowed_extensions": ["browserpass@maximbaz.com"]
+}
diff --git a/.mozilla/native-messaging-hosts/org.keepassxc.keepassxc_browser.json b/.mozilla/native-messaging-hosts/org.keepassxc.keepassxc_browser.json
new file mode 100644
index 0000000..9ba102f
--- /dev/null
+++ b/.mozilla/native-messaging-hosts/org.keepassxc.keepassxc_browser.json
@@ -0,0 +1,9 @@
+{
+ "allowed_extensions": [
+ "keepassxc-browser@keepassxc.org"
+ ],
+ "description": "KeePassXC integration with native messaging support",
+ "name": "org.keepassxc.keepassxc_browser",
+ "path": "/usr/bin/keepassxc-proxy",
+ "type": "stdio"
+}
diff --git a/.pylintrc b/.pylintrc
index d66e5a2..92ee902 100644
--- a/.pylintrc
+++ b/.pylintrc
@@ -3,5 +3,5 @@
jobs=2
[FORMAT]
-indent-string='\t'
+#indent-string='\t'
max-line-length=100
diff --git a/.screenrc b/.screenrc
new file mode 100644
index 0000000..606fdeb
--- /dev/null
+++ b/.screenrc
@@ -0,0 +1,7 @@
+# vim:syntax=screen
+hardstatus alwayslastline
+hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{=kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B}%Y-%m-%d %{W}%c:%s %{g}]'
+
+# Default screens
+#screen -t shell1 0
+#screen -t shell2 1
diff --git a/.ssh/config b/.ssh/config
new file mode 100644
index 0000000..51ec533
--- /dev/null
+++ b/.ssh/config
@@ -0,0 +1 @@
+Include ~/.ssh/config.d/*.conf
diff --git a/.ssh/config.d/0000-all.conf b/.ssh/config.d/0000-all.conf
new file mode 100644
index 0000000..7a69c2a
--- /dev/null
+++ b/.ssh/config.d/0000-all.conf
@@ -0,0 +1,29 @@
+# vim:syntax=sshconfig:ts=4
+# in case of no ssh-agent:
+#IdentityFile ~/.ssh/id_ed25519
+#IdentityFile ~/.ssh/id_rsa
+# ...place that inside an extra .conf file.
+SendEnv LANG LC_* MUTTEXEC
+HashKnownHosts yes
+ForwardAgent yes
+#ControlMaster auto
+#ControlPath /run/user/%i/ssh/cm-%r@%h:%p
+
+# ControlMaster: to use SSH multiplexing with ProxyCommand (e.g. to reach host b through host a)
+# Host b
+# Hostname b.example.com
+# ProxyCommand ssh a.example.com -W %h:%p
+# # controlpath, controlmaster are the same as above
+#
+# For older SSH daemons: RSA SHA-1 is being quickly deprecated across OSes for various security
+# vulnerabilities. If you need to re-enable that (e.g. for hardware like network devices which are
+# often prone to vulnerabilities due to slow upgrading), you can re-enable this and you SHOULD do
+# this ONLY for specific hosts. (Yes, this ofc also affects clients - which it did on an Arch Linux here.)
+# Also see https://www.openssh.com/txt/release-8.2
+# In any case you should check whether your device understands rsa-sha2-* signature algorithms. While
+# testing this, I found out that "ssh-keygen -trsa" made my keys SHA-1 so far – you might want to change
+# that to "-t rsa-sha2-256" or whatever and check whether you can still connect to the RSA requiring hosts.
+# If you have a proper naming convention for your devices, you can still easily wildcard this. If you
+# don't, you either don't have many devices or you moronically did not think device names through. ;-)
+# Host sophos* *-mik-*
+# PubkeyAcceptedKeyTypes +ssh-rsa
diff --git a/.tmux.conf.local b/.tmux.conf.local
index b6b0f3d..7d6c8c4 100644
--- a/.tmux.conf.local
+++ b/.tmux.conf.local
@@ -405,8 +405,8 @@ bind-key -n C-S-Down resize-pane -D
bind-key -n C-S-Up resize-pane -U
bind-key -n C-S-Left resize-pane -L
bind-key -n C-S-Right resize-pane -R
-set -g pane-active-border-fg colour45
-set -g pane-active-border-bg default
+#set -g pane-active-border-fg colour45
+#set -g pane-active-border-bg default
set-option -g display-panes-active-colour colour45
set-option -g display-panes-colour colour8
run-shell ~/tmux-yank/yank.tmux
@@ -432,7 +432,7 @@ run-shell ~/tmux-yank/yank.tmux
# }
#
# online() {
-# ping -c 1 1.1.1.1 >/dev/null 2>&1 && printf '✔' || printf '✘'
+# ping -c 1 9.9.9.9 >/dev/null 2>&1 && printf '✔' || printf '✘'
# }
#
# "$@"
diff --git a/.vimrc b/.vimrc
index d152829..984e974 100644
--- a/.vimrc
+++ b/.vimrc
@@ -1,14 +1,14 @@
-# vim:syntax=vim
+" vim:syntax=vim
set nocompatible
set ruler
set showmode
set showmatch
set hlsearch
set undolevels=64
-" who came up with the 'brilliant' idea that make mouse input relevant for vim
+" who came up with the 'brilliant' idea that makes mouse input relevant for vim
" inside a terminal AS DEFAULT?
-set mouse=
-set ttymouse=
+set mouse=""
+set ttymouse=""
set shiftwidth=0
set tabstop=4
set ignorecase
@@ -16,6 +16,7 @@ set autoindent
set copyindent
set noexpandtab
au BufReadPost *.inc set syntax=php " .inc will be considered PHP
+autocmd FileType yaml set noexpandtab " force yaml to use single whitespaces
syntax on
filetype plugin on
@@ -24,6 +25,8 @@ set background=dark
" cannot change this over here. f'k. ron is a good compromise.
colorscheme ron
hi Normal ctermbg=NONE guibg=NONE
+hi Special ctermbg=NONE guibg=NONE
+hi EndOfBuffer ctermbg=NONE guibg=NONE
set t_Co=256
let g:airline#extensions#tabline#enabled = 1
@@ -40,7 +43,7 @@ let g:airline_left_sep = '▶'
let g:airline_right_sep = '«'
let g:airline_right_sep = '◀'
let g:airline_symbols.crypt = '🔒'
-let g:airline_symbols.linenr = '☰'
+let g:airline_symbols.linenr = '☰'
let g:airline_symbols.linenr = '␊'
let g:airline_symbols.linenr = '␤'
let g:airline_symbols.linenr = '¶'
@@ -53,3 +56,15 @@ let g:airline_symbols.paste = '∥'
let g:airline_symbols.spell = 'Ꞩ'
let g:airline_symbols.notexists = 'Ɇ'
let g:airline_symbols.whitespace = 'Ξ'
+
+let airline#extensions#syntastic#enabled = 1
+let g:syntastic_python_checkers = ['pylint']
+set statusline+=%#warningmsg#
+set statusline+=%{SyntasticStatuslineFlag()}
+set statusline+=%*
+let g:syntastic_always_populate_loc_list = 1
+let g:syntastic_auto_loc_list = 1
+let g:syntastic_check_on_open = 1
+let g:syntastic_check_on_wq = 0
+let g:syntastic_error_symbol = "✗"
+let g:syntastic_warning_symbol = "⚠"
diff --git a/.waterfox/native-messaging-hosts/com.github.browserpass.native.json b/.waterfox/native-messaging-hosts/com.github.browserpass.native.json
new file mode 120000
index 0000000..14b9b0d
--- /dev/null
+++ b/.waterfox/native-messaging-hosts/com.github.browserpass.native.json
@@ -0,0 +1 @@
+../../.mozilla/native-messaging-hosts/com.github.browserpass.native.json \ No newline at end of file
diff --git a/.waterfox/native-messaging-hosts/org.keepassxc.keepassxc_browser.json b/.waterfox/native-messaging-hosts/org.keepassxc.keepassxc_browser.json
new file mode 120000
index 0000000..dba24ca
--- /dev/null
+++ b/.waterfox/native-messaging-hosts/org.keepassxc.keepassxc_browser.json
@@ -0,0 +1 @@
+../../.mozilla/native-messaging-hosts/org.keepassxc.keepassxc_browser.json \ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..f34ce27
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,518 @@
+## [1.9.1] - 2026-03-11
+
+### Documentation
+
+- Adding screenshot to readme
+
+### Styling
+
+- Better time style for proxmox, better colouring for raspbi
+- Adding Nobara colours
+
+### Miscellaneous Tasks
+
+- Add licence files
+
+## [1.9.0] - 2026-03-11
+
+### Features
+
+- Include OS version in prompt
+- Also include BUILD_ID in prompt's OS version
+## [1.8.0] - 2026-03-07
+
+### Features
+
+- Add basic git-cliff.toml for changelogs
+- Define git alias for cliff-to-changelog-mg
+
+### Documentation
+
+- 1.7.1
+## [1.7.1] - 2026-03-07
+
+### Other
+
+- Increase hash abbreviations to a usable minimum of 7
+- Include git-cliff changelog
+## [1.7.0] - 2026-03-07
+
+### Bug Fixes
+
+- Executable flag was missing
+- Do not display HEAD along with the branches
+
+### Other
+
+- Update tmux-gpakosz
+## [1.6.0] - 2026-01-26
+
+### Other
+
+- Do not allow external caches for gpg
+- Define pinentry timeout - short grace period for e.g. signing multiple git commits
+- Confused ttl and pinentry for a moment, now we have both
+- Integrate direct thefuck alias, wtf, into aliases
+- Increase cache TTLs _a bit_
+- Small bash helper for git to update all local $things
+- Adding an "other-branches" script to git
+- Anchoring current-branch alias in gitconfig
+## [1.2.8] - 2025-06-25
+
+### Other
+
+- Set core.abbrev to 4, set equal sign (=) indentations
+- Add tag.gpgSign for the sake of display, currently all options are still set to false
+- Check out latest commit for tmux-gpakosz
+## [1.2.7] - 2025-04-20
+
+### Other
+
+- Make mouse deactivation work anywhere
+- Include pdk templates git directory as 'safe' %)
+- RHEL 10 = "rhel"
+## [1.2.6] - 2025-03-15
+
+### Other
+
+- More distinguished look for Rocky
+## [1.2.5] - 2025-03-15
+
+### Bug Fixes
+
+- Do not use exit in sourced scripts
+- Then was missing
+
+### Other
+
+- SunOS' grep does not know "-P"
+- SunOS' hostname does not know "-f"
+- Further grep adjustments where -P is not necessary (auto)
+- More SunOS incompatibilities
+- Only acquire OSMAJVER from os-release if present
+## [1.2.4] - 2025-03-15
+
+### Other
+
+- Remove quotation marks from OS name string (RHEL derivatives)
+## [1.2.3] - 2025-03-15
+
+### Bug Fixes
+
+- "editor" is an alias, not a variable
+
+### Other
+
+- Pin the initial branch name, may be subject to other extremist changes in the future
+- Colormake hides other coloured output, so we won't use it anymore.
+- Make a difference between Ubuntu 22 and 24
+
+As currently I have to deal with Canonical's whimsical "distro",
+I like to differ more between major "releases".
+- Woof.
+- Include less in bat aliases, make plain cat/less available as alias
+- +pass(word) plugin messaging hosts for several browsers
+- ...+browserpass/chromium
+- Make the prompt's command counter dim and italic
+- Create alias "editor" for other scripts or aliases to use
+- Create alias "default-desktop-apps" for remembering mimeapps.list :-)
+- "Fix" color functions (proper syntax, switch to printf); fix git colour hints
+- + Alma colours
+- Yes, expansion on definition is intentional here.
+- New aliases
+- + SunOS in prompt colours (colouring taken from 2005-age_of_oracle)
+## [1.2.2] - 2024-08-27
+
+### Other
+
+- Flake8 PR 1404 --> config file in alias
+## [1.2.1] - 2024-08-26
+
+### Other
+
+- Merge branch 'master' into testing
+- +initial .screenrc
+- I'M BATMAN
+- +seconds in clock
+- + .config/flake8
+## [1.2.0] - 2024-07-14
+
+### Bug Fixes
+
+- Submodule info of git-prompt was garbage
+- Git-prompt was present in submodules
+
+### Other
+
+- + credential helper, + memory window
+- Only use the control master if desired. causes more fuss than solutions on daily use.
+- Fwiw, return to whitespaces. more bytes, but more interoperability.
+- Include tofu in gpg trust model
+- + flake8's cognitive complexity
+- Updated submodules
+- Integrate go binaries in $HOME into PATH
+- Inclusion of git prompt
+- Revamp
+- Working commit for submodule
+- Reintroducing main submodule shllow/sparse config
+- +weird sha1collisiondetection submodule in README
+- Merge between two pulls and machines
+- Merge between two machines (again)
+- Specify branch of submodule
+- Here goes another attempt
+- ...
+- Move submodule git-prompt to post-checkout
+- Remove from cache
+- Add git-prompt to ignore list
+- +pre-commit
+- Preparation for submodule-less checkout
+- Accident
+- Final hook
+- Solution in readme
+- Easygit, lul.
+- Git-prompt, flake8, pass-git-helper, gpg trust model, SSH control master, python indent
+
+1. Before we had no real inclusion of git-prompt in this repo. Now, we have
+ included git's own git-prompt. Alternatives were tested and failed to
+ meet KISS, YAGNI, or one-task-one-solution principles.
+2. Include $HOME/go/bin in PATH
+3. Set flake8's max-cognitive-complexity to 16
+4. Set up pass-git-helper as git's credential helper, set pack.windowMemory to 1024m
+5. Set trust-model of GPG to tofu+gpg
+6. Do not use tabs in python anymore, bow to global byte-consuming standard
+7. Do not use SSH ControlMaster as default anymore
+
+---
+
+Squashed commit of the following:
+
+commit 035b47b860b96a3c4bf24ed53f9753f6dac77097
+Author: Harald Pfeiffer <coding@lirion.de>
+Date: Sun Jul 14 13:13:10 2024 +0200
+
+ easygit, lul.
+
+commit 429003c91aadba10e2447fab2a536d21cb1a334c
+Author: Harald Pfeiffer <coding@lirion.de>
+Date: Sun Jul 14 13:10:23 2024 +0200
+
+ solution in readme
+
+commit 3d3d8bf1736400f064dc25213bc38ea1f902ed25
+Author: Harald Pfeiffer <coding@lirion.de>
+Date: Sun Jul 14 13:06:12 2024 +0200
+
+ final hook
+
+commit 784cca88b3ccfaf2e3ddc6d39b6b62da3e636b31
+Author: Harald Pfeiffer <coding@lirion.de>
+Date: Sun Jul 14 12:58:16 2024 +0200
+
+ accident
+
+commit c93a9ef0252f7285f5bd8c0e5a60cde17c3ab1bd
+Author: Harald Pfeiffer <coding@lirion.de>
+Date: Sun Jul 14 12:57:36 2024 +0200
+
+ preparation for submodule-less checkout
+
+commit 0854d735ac6f596205df2484c9c5793cdf259e73
+Author: Harald Pfeiffer <coding@lirion.de>
+Date: Sun Jul 14 12:18:40 2024 +0200
+
+ +pre-commit
+
+commit 00f87081a3ba50b48dc3cebfaa3c804e805120b0
+Author: Harald Pfeiffer <coding@lirion.de>
+Date: Sun Jul 14 12:15:04 2024 +0200
+
+ add git-prompt to ignore list
+
+commit 574bbc70cc4282baee11a0548f0bb3d9510ddee9
+Author: Harald Pfeiffer <coding@lirion.de>
+Date: Sun Jul 14 12:13:14 2024 +0200
+
+ remove from cache
+
+commit e60e29cb6c941223768634413e7ffa13cc5b0b19
+Author: Harald Pfeiffer <coding@lirion.de>
+Date: Sun Jul 14 12:12:21 2024 +0200
+
+ move submodule git-prompt to post-checkout
+
+commit 738ecb82e946043914fc822d8fb877a655e5ad4f
+Author: Harald Pfeiffer <coding@lirion.de>
+Date: Sun Jul 14 11:57:52 2024 +0200
+
+ ...
+
+commit 672c91bc95a167269fb7ddfa2c84e4f7da2bdad2
+Author: Harald Pfeiffer <coding@lirion.de>
+Date: Sun Jul 14 11:32:25 2024 +0200
+
+ here goes another attempt
+
+commit cbc3482c5d475eff579902004f81cefd38cfcb98
+Author: Harald Pfeiffer <coding@lirion.de>
+Date: Sun Jul 14 10:53:38 2024 +0200
+
+ specify branch of submodule
+
+commit 95a8483b04efddab37aa92d52134a823ecc1920f
+Merge: 5155ed2 ce9a713
+Author: Harald Pfeiffer <coding@lirion.de>
+Date: Sun Jul 14 10:52:21 2024 +0200
+
+ Merge between two machines (again)
+
+commit 5155ed2eefa29fc2d660823f8609e0c7dcc85113
+Author: Harald Pfeiffer <coding@lirion.de>
+Date: Sun Jul 14 10:52:12 2024 +0200
+
+ reintroducing main submodule shllow/sparse config
+
+commit ce9a713662fdb8cc30eed9bdfb3a9fc9ab217afc
+Merge: b2b8209 717e60b
+Author: Harald Pfeiffer <coding@lirion.de>
+Date: Sun Jul 14 10:38:11 2024 +0200
+
+ Merge between two pulls and machines
+
+commit b2b82097d4e167b285abac53d0e6a291a4f798a7
+Author: Harald Pfeiffer <coding@lirion.de>
+Date: Sun Jul 14 10:38:03 2024 +0200
+
+ +weird sha1collisiondetection submodule in README
+
+commit 717e60be83f2cf22808bc75ba37459e888a39513
+Author: Harald Pfeiffer <coding@lirion.de>
+Date: Sun Jul 14 10:29:35 2024 +0200
+
+ working commit for submodule
+
+commit 11376154555ea0a325742d0d81dc282642837940
+Author: Harald Pfeiffer <coding@lirion.de>
+Date: Sun Jul 14 10:18:41 2024 +0200
+
+ revamp
+
+commit aaf11ee32d35a194eb58387f4742cf00acadbbf2
+Author: Harald Pfeiffer <coding@lirion.de>
+Date: Sun Jul 14 10:08:07 2024 +0200
+
+ fix: submodule info of git-prompt was garbage
+
+commit 8faef2071a0dd0358714b082738dbc253378214a
+Author: Harald Pfeiffer <coding@lirion.de>
+Date: Sun Jul 14 09:59:33 2024 +0200
+
+ inclusion of git prompt
+
+commit 9b850221308f64fe6e641555fcbd24ddf5a7ff7b
+Author: Harald Pfeiffer <coding@lirion.de>
+Date: Sun Jul 14 09:00:08 2024 +0200
+
+ integrate go binaries in $HOME into PATH
+
+commit 71b39d46de0bfe14b44f4241c8b8af01d3fb6b27
+Author: Harald Pfeiffer <coding@lirion.de>
+Date: Sun May 26 10:52:50 2024 +0200
+
+ Updated submodules
+
+commit 37fdb2a700e47cc84f0dd3b004b33c41b1eb4abe
+Author: Harald Pfeiffer <coding@lirion.de>
+Date: Sun May 26 10:48:44 2024 +0200
+
+ + flake8's cognitive complexity
+
+commit 6922aa0ab8cfbdc83fc2a38fe486c9a390807c99
+Author: Harald Pfeiffer <coding@lirion.de>
+Date: Sat May 25 13:27:52 2024 +0200
+
+ include tofu in gpg trust model
+
+commit e5abe8e6672cff7852c48f1db57176d9b03538f9
+Author: Harald Pfeiffer <coding@lirion.de>
+Date: Sat May 25 13:27:15 2024 +0200
+
+ fwiw, return to whitespaces. more bytes, but more interoperability.
+
+commit d9b65ed059e81cca89bcec21545aa8816198537d
+Author: Harald Pfeiffer <coding@lirion.de>
+Date: Sat May 25 13:25:35 2024 +0200
+
+ only use the control master if desired. causes more fuss than solutions on daily use.
+
+commit badff375848d9af77e9761619f374278da862dac
+Author: Harald Pfeiffer <coding@lirion.de>
+Date: Sat May 25 13:24:03 2024 +0200
+
+ + credential helper, + memory window
+## [1.1.0] - 2024-05-25
+
+### Other
+
+- NEW FEATURE: prompt may be quite long, we now start input on a completely new line
+- Include ~/.local/bin as well, only include dirs that are descendible into
+- Include sshenv file if present
+- Don't disable tab warnings anymore
+- More git aliases
+## [1.0.0] - 2024-05-25
+
+### Other
+
+- Merge
+- Return if reading the fingerprint failed
+- Distinguish between Leap and others (Tumbleweed), current colouring from official websites
+## [0.9.5] - 2023-05-06
+
+### Bug Fixes
+
+- Non-SLE suse did not apply anywhere
+- Root colouring for Debian < 12
+
+### Other
+
+- Local fixes
+- + termux
+- Superseding flake8-colors - considering that deprecated
+
+From flake8 5.0.0 on, flake8 natively supports `--color` [^1],
+rendering the installation of flake8-colors obsolete. (Kudos
+so far for the nice work, nonetheless.)
+
+Debian 12 (frozen and one month before release at the point of this
+update) moved flake8 from 3.8.4 to 5.0.4, so I'm moving along.
+(Also, no need for venv magic anymore.)
+
+[^1] [flake8 changelog for 5.0.0](https://flake8.pycqa.org/en/latest/release-notes/5.0.0.html)
+- New colours for Debian > 12 and derivatives
+
+- Distinguish Debian >= 12 – Debian 12 introduces emerald theming
+- Corporate work includes refined Ubuntu settings. Adjusting to
+ match Ubuntu >= 22
+## [0.9.4] - 2022-07-26
+
+### Other
+
+- +ssh control master
+- ( ͡° ͜ʖ ͡°)
+- ...in case of confname=hostname*conf...
+- .gitconfig for @8eadf0c5ed061ceee22e4b1a75eaa55eeb72e02a
+- +example paragraph for ssh-rsa connections
+- +par ssh key generation
+- +deprecation of ssh-rsa altogether
+- Revert "+deprecation of ssh-rsa altogether"
+
+ssh_config only knows +ALG, not -ALG. :| so either we define a static
+list of accepted signature algorithms or well... fuckthisshit.jpg.
+
+This reverts commit 12a28688d9b25ba3e36ef207a01e8334667813ac.
+- +pve
+## [0.9.3] - 2022-07-08
+
+### Other
+
+- +password-store alias for multiples stores
+- Replaced cloudflare (wtf!!!) with quad9
+- Move tarball creation inside ansible playbook
+- Reincluded remote tarball removal
+- Added local tarball removal after successful remote executions
+- Move tarball creation inside ansible playbook [2]
+- Including *.local files as non-presence is no error
+- Only create the tarball once for all hosts
+- Source is now an absolute path :-)
+- Update tmux-gpakosz
+- Separation into plays-per-host(s)
+- Make sure DFDISTRIB is not empty
+- We do not need facts, let's not waste time gathering them
+- Removing delegation remnants
+- Loc
+- Do not execute remote removal on localhost
+- Do not execute any remote action on localhost
+- Display current IFS
+- Only add SSH key if it's not been added yet.
+
+Currently, ```ssh-add -l``` displays the fingerprint the same way
+```ssh-keygen -Esha256 -lf``` does. Simple comparison, done.
+- Execute key addition on any login on the hosts which serve as "admin stations"
+- I said "no background" !!!11!eleven
+- Don't be vrebose on adding ssh keys
+## [0.9.2] - 2022-05-02
+
+### Other
+
+- +voicemsg alias
+- Typo
+- + coloured diff as default
+- +new long format for git log
+## [0.9.1] - 2022-03-24
+
+### Bug Fixes
+
+- Fixes
+- Fix and improvement: dirmngr
+
+- fix: missing then after if
+- improvement: using pgrep instead of ps+pgrep|grep
+
+### Other
+
+- Initial commit
+- +ssh-agent-launcher in bashexec
+- Wrong folder
+- Squeeze double ; after sourcing sshenv
+- Doesn't work
+- Adding postexec for "last-mile tasks"
+- [2]
+- Mark SSH agent variables for export
+- ...already marked for export in postexec
+
+This reverts commit 99e0da1b6441da25a0d3427638f0fd1a20076f87.
+- +function for adding ssh keys
+- Varname fumble
+- Adding distribute folder for servers which cannot reach git
+- Makefile and distribute dir for "git-less" servers
+- Distribution mechanism, more targets in make
+- Execute ssh agent only on machines we want to be the source
+
+Also, see ssh_config(5) and ForwardAgent
+- +doc for SSHAGH
+- Tags for other tasks
+- Check for DFDISTRIB, less output on rm
+- Count (plus proper "doc-string")
+- Syntax error fixed for format
+- +.vimrc
+- +.vimrc [2] (rsync was missing)
+- Adding vim syntax to .vimrc as I also base a jinja template off of this
+- Oopsie, comment syntax :-)
+- Hide grep output
+- Removed spaces after linenr
+- + syntastic
+- Adding gpg-connect-agent to ssh agent machines
+- Launch dirmngr
+- +gnupg
+- $meaningful_git_commit_message[213]
+- Untested behaviour: ssh-with-gpg
+- Alias for ssh-with-gpg
+- TGT was missing, lel. Also: passing remaining arguments now.
+- Wrong order :-)
+- Enable ssh-support in gpg-agent
+- $SSH_AUTH_SOCK only on the admin stations
+- Include gnupg in tarball
+- Remove old dirmngr socket. remember to execute only once with multiple connections.
+- Less variable spam
+- Debian pink for debian systems
+- Exclude .local files from distributed tarball
+- Own colours for AIX
+- Merge branch 'testing' of git.lirion.de:/var/cache/git/dotfiles into testing
+- Distinguish rel from fedora, adopting the rh corporate turquois
+- Syntax error
+- Make initial dirmngr launch silent
+- Gnupg forwarding now working
+- Disable SC2012 in xstat
+- +package clean
+- +lst, %call apt binary directly
+- +default pull strategy: no rebase
+- Force yaml to noexpandtab eventually
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..0a04128
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,165 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+ This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+ 0. Additional Definitions.
+
+ As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+ "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+ An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+ A "Combined Work" is a work produced by combining or linking an
+Application with the Library. The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+ The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+ The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+ 1. Exception to Section 3 of the GNU GPL.
+
+ You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+ 2. Conveying Modified Versions.
+
+ If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+ a) under this License, provided that you make a good faith effort to
+ ensure that, in the event an Application does not supply the
+ function or data, the facility still operates, and performs
+ whatever part of its purpose remains meaningful, or
+
+ b) under the GNU GPL, with none of the additional permissions of
+ this License applicable to that copy.
+
+ 3. Object Code Incorporating Material from Library Header Files.
+
+ The object code form of an Application may incorporate material from
+a header file that is part of the Library. You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+ a) Give prominent notice with each copy of the object code that the
+ Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the object code with a copy of the GNU GPL and this license
+ document.
+
+ 4. Combined Works.
+
+ You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+ a) Give prominent notice with each copy of the Combined Work that
+ the Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the Combined Work with a copy of the GNU GPL and this license
+ document.
+
+ c) For a Combined Work that displays copyright notices during
+ execution, include the copyright notice for the Library among
+ these notices, as well as a reference directing the user to the
+ copies of the GNU GPL and this license document.
+
+ d) Do one of the following:
+
+ 0) Convey the Minimal Corresponding Source under the terms of this
+ License, and the Corresponding Application Code in a form
+ suitable for, and under terms that permit, the user to
+ recombine or relink the Application with a modified version of
+ the Linked Version to produce a modified Combined Work, in the
+ manner specified by section 6 of the GNU GPL for conveying
+ Corresponding Source.
+
+ 1) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (a) uses at run time
+ a copy of the Library already present on the user's computer
+ system, and (b) will operate properly with a modified version
+ of the Library that is interface-compatible with the Linked
+ Version.
+
+ e) Provide Installation Information, but only if you would otherwise
+ be required to provide such information under section 6 of the
+ GNU GPL, and only to the extent that such information is
+ necessary to install and execute a modified version of the
+ Combined Work produced by recombining or relinking the
+ Application with a modified version of the Linked Version. (If
+ you use option 4d0, the Installation Information must accompany
+ the Minimal Corresponding Source and Corresponding Application
+ Code. If you use option 4d1, you must provide the Installation
+ Information in the manner specified by section 6 of the GNU GPL
+ for conveying Corresponding Source.)
+
+ 5. Combined Libraries.
+
+ You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+ a) Accompany the combined library with a copy of the same work based
+ on the Library, uncombined with any other library facilities,
+ conveyed under the terms of this License.
+
+ b) Give prominent notice with the combined library that part of it
+ is a work based on the Library, and explaining where to find the
+ accompanying uncombined form of the same work.
+
+ 6. Revised Versions of the GNU Lesser General Public License.
+
+ The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+ If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
index 0000000..cb564da
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,163 @@
+GNU Lesser General Public License
+=================================
+
+_Version 3, 29 June 2007_
+_Copyright © 2007 Free Software Foundation, Inc. &lt;<http://fsf.org/>&gt;_
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+
+
+This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+### 0. Additional Definitions
+
+As used herein, “this License” refers to version 3 of the GNU Lesser
+General Public License, and the “GNU GPL” refers to version 3 of the GNU
+General Public License.
+
+“The Library” refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+An “Application” is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+A “Combined Work” is a work produced by combining or linking an
+Application with the Library. The particular version of the Library
+with which the Combined Work was made is also called the “Linked
+Version”.
+
+The “Minimal Corresponding Source” for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+The “Corresponding Application Code” for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+### 1. Exception to Section 3 of the GNU GPL
+
+You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+### 2. Conveying Modified Versions
+
+If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+* **a)** under this License, provided that you make a good faith effort to
+ensure that, in the event an Application does not supply the
+function or data, the facility still operates, and performs
+whatever part of its purpose remains meaningful, or
+
+* **b)** under the GNU GPL, with none of the additional permissions of
+this License applicable to that copy.
+
+### 3. Object Code Incorporating Material from Library Header Files
+
+The object code form of an Application may incorporate material from
+a header file that is part of the Library. You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+* **a)** Give prominent notice with each copy of the object code that the
+Library is used in it and that the Library and its use are
+covered by this License.
+* **b)** Accompany the object code with a copy of the GNU GPL and this license
+document.
+
+### 4. Combined Works
+
+You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+* **a)** Give prominent notice with each copy of the Combined Work that
+the Library is used in it and that the Library and its use are
+covered by this License.
+
+* **b)** Accompany the Combined Work with a copy of the GNU GPL and this license
+document.
+
+* **c)** For a Combined Work that displays copyright notices during
+execution, include the copyright notice for the Library among
+these notices, as well as a reference directing the user to the
+copies of the GNU GPL and this license document.
+
+* **d)** Do one of the following:
+ - **0)** Convey the Minimal Corresponding Source under the terms of this
+License, and the Corresponding Application Code in a form
+suitable for, and under terms that permit, the user to
+recombine or relink the Application with a modified version of
+the Linked Version to produce a modified Combined Work, in the
+manner specified by section 6 of the GNU GPL for conveying
+Corresponding Source.
+ - **1)** Use a suitable shared library mechanism for linking with the
+Library. A suitable mechanism is one that **(a)** uses at run time
+a copy of the Library already present on the user's computer
+system, and **(b)** will operate properly with a modified version
+of the Library that is interface-compatible with the Linked
+Version.
+
+* **e)** Provide Installation Information, but only if you would otherwise
+be required to provide such information under section 6 of the
+GNU GPL, and only to the extent that such information is
+necessary to install and execute a modified version of the
+Combined Work produced by recombining or relinking the
+Application with a modified version of the Linked Version. (If
+you use option **4d0**, the Installation Information must accompany
+the Minimal Corresponding Source and Corresponding Application
+Code. If you use option **4d1**, you must provide the Installation
+Information in the manner specified by section 6 of the GNU GPL
+for conveying Corresponding Source.)
+
+### 5. Combined Libraries
+
+You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+* **a)** Accompany the combined library with a copy of the same work based
+on the Library, uncombined with any other library facilities,
+conveyed under the terms of this License.
+* **b)** Give prominent notice with the combined library that part of it
+is a work based on the Library, and explaining where to find the
+accompanying uncombined form of the same work.
+
+### 6. Revised Versions of the GNU Lesser General Public License
+
+The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License “or any later version”
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
diff --git a/Makefile b/Makefile
deleted file mode 100644
index 64c0732..0000000
--- a/Makefile
+++ /dev/null
@@ -1,26 +0,0 @@
-VERSION = 3.82
-
-all: complete
-
-# checkenv is redundant here but prevents execution of anything before failing
-complete: checkenv tempdirs tarball removedirs distrib removetar
-
-tarball:
- rsync -avu bin .bash .bash_profile .bashrc .flake8 .gitconfig .perlcriticrc .profile .pylintrc .tmux.conf .tmux.conf.local tmux-gpakosz tmux-yank .vimrc --exclude=.git --exclude=.gitattributes --exclude=.github --exclude=.gitignore --exclude='LICENSE*' --exclude='README*' distribute/tar/
- tar -C distribute/tar -cvJf dotfiles.tar.xz .
- rm -rf distribute/tar
-
-tempdirs:
- @mkdir -pv distribute/tar
-
-removedirs:
- rm -rf distribute/tar
-
-distrib: checkenv
- ansible-playbook distrib.yml
-
-checkenv:
- @if [ -z "$$DFDISTRIB" ];then printf "DFDISTRIB not set, cannot determine target.\\n" >&2;exit 101;fi
-
-removetar:
- @rm -vf dotfiles.tar.xz
diff --git a/README.md b/README.md
index 6728444..9788df9 100644
--- a/README.md
+++ b/README.md
@@ -4,10 +4,34 @@ Yet another (!) approach at building up a centralized configuration.
Parts are old, parts are not done yet, we're getting there.
-## To-Dos
+## Showcase
-* i3 config / sway config
-* gpg config
-* game launching stuff
-* parallel-ssh and ansible
-* ...
+![Screenshot of the bash prompt on various distros](./screenshots/prompt.png "Prompt Screenshot")
+
+# Information for cloning
+
+## only clone git-prompt.sh
+
+This repository does not include a git-prompt.sh source. This is due to the file residing inside
+the whole git repository. Submoduling cannot just include one file, so if you need this file here,
+the checkout is... up to you, kind of.
+
+Since I am maintaining this repo for ease of distribution for myself as well, here's the solution:
+
+Trigger `/.githooks/post-checkout` inside this repo. Either do this on any checkout, or set your git
+post-checkout trigger for this file to automatically take over.
+
+## sha1collisiondetection
+
+For git-prompt, its submodule sha1collisiondetection may be "broken" (i.e. it cannot be pulled), here's a fix:
+
+`git -c submodule.sha1collisiondetection.update=none COMMAND`
+
+...whereas `COMMAND` is one of the usual actions such as
+
+```
+clone --recurse-submodules
+submodule update --init --recursive
+```
+
+This only applies if you do not use `/.githooks/post-checkout` inside this repository.
diff --git a/bin/git-other-branches b/bin/git-other-branches
new file mode 100755
index 0000000..034670e
--- /dev/null
+++ b/bin/git-other-branches
@@ -0,0 +1,12 @@
+#!/usr/bin/env bash
+
+GITBIN='/usr/bin/git'
+AWKBIN='/usr/bin/awk'
+GREPBIN='/usr/bin/grep'
+
+# 1. Pull the current branch and also tags, and prune references vanished from remote
+# shellcheck disable=SC2016
+"$GITBIN" branch --remotes |\
+ "$AWKBIN" '{print $1}' | "$AWKBIN" -F/ '{print $2}' |\
+ "$GREPBIN" -v "^$(git rev-parse --abbrev-ref HEAD)\$" |\
+ "$GREPBIN" -v '^HEAD$'
diff --git a/bin/git-update-all b/bin/git-update-all
new file mode 100755
index 0000000..d3f6033
--- /dev/null
+++ b/bin/git-update-all
@@ -0,0 +1,17 @@
+#!/usr/bin/env bash
+
+GITBIN='/usr/bin/git'
+
+# 1. Pull the current branch and also tags, and prune references vanished from remote
+"$GITBIN" pull -tpf || exit 110
+# 2. Pull all branches existing locally
+mybr="$("$GITBIN" branch --show-current)"
+while read -r branch
+do
+ (
+ printf '\033[1m\033[3mSwitching to %b.\033[0m\n' "$branch"
+ "$GITBIN" switch "$branch" &&\
+ "$GITBIN" pull &&\
+ "$GITBIN" switch "$mybr"
+ )
+done < <("$GITBIN" branch --list|awk '{print $NF}'|grep -vP "^${mybr}\$")
diff --git a/bin/ssh-with-gpg b/bin/ssh-with-gpg
new file mode 100755
index 0000000..7ca0d67
--- /dev/null
+++ b/bin/ssh-with-gpg
@@ -0,0 +1,20 @@
+#!/usr/bin/env bash
+
+# For this to work, you also need to import the public key of any private key you want to use
+# in the target server's pubring first.
+
+if [ -z "$1" ];then
+ printf "USAGE: %b TARGET [OPTIONS...]\\n" "$(basename "$0")" >&2
+ exit 1
+fi
+
+TGT="$1"
+
+REMUID="$(ssh "$TGT" "id -u")"
+ssh "$TGT" 'killall gpg-agent 2>/dev/null;rm -f /run/user/$(id -u)/gnupg/S.*'
+if [ -z "$REMUID" ];then
+ printf "Cannot fetch user id from %b.\\n" "$TGT" >&2
+ exit 2
+fi
+
+ssh -R "/run/user/${REMUID}/gnupg/S.gpg-agent":"/run/user/$(id -u)/gnupg/S.gpg-agent-extra" -o "StreamLocalBindUnlink=yes" "$TGT" "${@:2}"
diff --git a/distrib.yml b/distrib.yml
index a4f722e..a8fb3ef 100644
--- a/distrib.yml
+++ b/distrib.yml
@@ -1,30 +1,116 @@
---
-- hosts: "{{ lookup('env', 'DFDISTRIB') }}"
+- hosts: "localhost"
+ connection: "local"
gather_facts: false
vars:
ansible_python_interpreter: "auto_silent"
tasks:
- - name: "Copy dotfiles.tar.xz to remote"
- copy:
- src: "dotfiles.tar.xz"
+ - setup:
+ gather_subset:
+ - '!all'
+ - '!min'
+ - 'platform'
+ - name: "Check that DFDISTRIB is not empty"
+ assert:
+ that:
+ - "lookup('env', 'DFDISTRIB') is defined and lookup('env', 'DFDISTRIB') != ''"
+ fail_msg:
+ - "Please set the environment variable DFDISTRIB to an existing inventory entry"
+ - "where you wish to place the dotfiles"
+ - name: "Create dotfiles.tar.xz"
+ delegate_to: "localhost"
+ connection: "local"
+ archive:
+ path:
+ - ".bash_profile"
+ - ".bashrc"
+ - ".flake8"
+ - ".gitconfig"
+ - ".perlcriticrc"
+ - ".profile"
+ - ".pylintrc"
+ - ".tmux.conf"
+ - ".tmux.conf.local"
+ - ".vimrc"
+ - ".bash/aliases.bash"
+ - "~/.bash/aliases.bash.local"
+ - ".bash/exec.bash"
+ - "~/.bash/exec.bash.local"
+ - ".bash/postexec.bash"
+ - "~/.bash/postexec.bash.local"
+ - ".bash/prompt.bash"
+ - "~/.bash/prompt.bash.local"
+ - ".bash/vars.bash"
+ - "~/.bash/vars.bash.local"
+ - "bin/ssh-agent-launcher"
+ - "bin/ssh-with-gpg"
+ - ".gnupgdirmngr.conf"
+ - ".gnupggpg-agent.conf"
+ - ".gnupggpg.conf"
+ - "tmux-gpakosz/.gitignore"
+ - "tmux-gpakosz/LICENSE.MIT"
+ - "tmux-gpakosz/LICENSE.WTFPLv2"
+ - "tmux-gpakosz/README.md"
+ - "tmux-gpakosz/.tmux.conf"
+ - "tmux-gpakosz/.tmux.conf.local"
+ - "tmux-yank/CHANGELOG.md"
+ - "tmux-yank/citest"
+ - "tmux-yank/_config.yml"
+ - "tmux-yank/.editorconfig"
+ - "tmux-yank/.gitignore"
+ - "tmux-yank/LICENSE.md"
+ - "tmux-yank/README.md"
+ - "tmux-yank/scripts"
+ - "tmux-yank/.travis.yml"
+ - "tmux-yank/Vagrantfile"
+ - "tmux-yank/vagrant_provisioning.sh"
+ - "tmux-yank/video"
+ - "tmux-yank/yank.tmux"
+ format: "xz"
dest: "~/dotfiles.tar.xz"
- mode: "0640"
- tags:
- - "remote"
- - "all"
- - name: "Unpack dotfiles.tar.xz"
- unarchive:
- dest: "~/"
- src: "dotfiles.tar.xz"
- remote_src: "yes"
- list_files: "yes"
- tags:
- - "unpack"
- - "all"
- - name: "Remove tarball on remote"
+- hosts: "{{ lookup('env', 'DFDISTRIB') }}"
+ gather_facts: false
+ vars:
+ ansible_python_interpreter: "auto_silent"
+ tasks:
+ - block:
+ - name: "Copy dotfiles.tar.xz to remote"
+ copy:
+ src: "~/dotfiles.tar.xz"
+ dest: "~/dotfiles.tar.xz"
+ mode: "0640"
+ tags:
+ - "remote"
+ - "all"
+ - name: "Unpack dotfiles.tar.xz"
+ unarchive:
+ dest: "~/"
+ src: "~/dotfiles.tar.xz"
+ remote_src: "yes"
+ list_files: "yes"
+ tags:
+ - "unpack"
+ - "all"
+ - name: "Remove tarball on remote"
+ file:
+ path: "~/dotfiles.tar.xz"
+ state: "absent"
+ tags:
+ - "removal"
+ - "all"
+ when: inventory_hostname != hostvars['localhost']['ansible_fqdn'] and
+ inventory_hostname != hostvars['localhost']['ansible_hostname'] and
+ inventory_hostname != hostvars['localhost']['ansible_hostname'] | lower
+- hosts: "localhost"
+ connection: "local"
+ gather_facts: false
+ vars:
+ ansible_python_interpreter: "auto_silent"
+ tasks:
+ - name: "Remove source tarball"
file:
path: "~/dotfiles.tar.xz"
state: "absent"
tags:
- - "never"
- "removal"
+ - "all"
diff --git a/screenshots/prompt.png b/screenshots/prompt.png
new file mode 100644
index 0000000..ab3d3d1
--- /dev/null
+++ b/screenshots/prompt.png
Binary files differ
diff --git a/tmux-gpakosz b/tmux-gpakosz
-Subproject 9a2387c0c7aa8d12cff06d6be17251e8ebdfd03
+Subproject af33f07134b76134acca9d01eacbdecca9c9cda
diff --git a/tmux-yank b/tmux-yank
-Subproject 1b1a436e19f095ae8f825243dbe29800a8acd25
+Subproject acfd36e4fcba99f8310a7dfb432111c242fe739