diff options
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 @@ -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 @@ -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 @@ -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" @@ -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" +} @@ -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 '✘' # } # # "$@" @@ -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 @@ -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. <<http://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/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 @@ -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 -* ... + + +# 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 Binary files differnew file mode 100644 index 0000000..ab3d3d1 --- /dev/null +++ b/screenshots/prompt.png diff --git a/tmux-gpakosz b/tmux-gpakosz -Subproject 9a2387c0c7aa8d12cff06d6be17251e8ebdfd03 +Subproject af33f07134b76134acca9d01eacbdecca9c9cda diff --git a/tmux-yank b/tmux-yank -Subproject 1b1a436e19f095ae8f825243dbe29800a8acd25 +Subproject acfd36e4fcba99f8310a7dfb432111c242fe739 |
