From 44ad23f4f047dd867b1e814913901c509911b18c Mon Sep 17 00:00:00 2001 From: Darren 'Tadgy' Austin Date: Mon, 12 Sep 2022 10:32:35 +0100 Subject: [PATCH] Sync 'minimal' branch with 'master'. --- .bash_logout | 17 +- .bash_profile | 33 +-- .bashrc | 270 +++++++++++++++--- .config/htop/htoprc | 59 +++- .dir_colors | 20 +- .gitconfig | 9 +- .gitignore | 7 +- .gnupg/.gitignore | 4 + .gnupg/.gpg-v21-migrated | 0 .gnupg/gpg-agent.conf | 5 + .gnupg/gpg.conf | 33 +++ .gnupg/openpgp-revocs.d/.gitignore | 1 + ...ED563FBA778ECF229B25C87CDF83673730.rev.gpg | Bin 0 -> 1277 bytes .gnupg/private-keys-v1.d/.gitignore | 1 + ...F78FF697B37E1B3AC6F1F7CC68221E5CE6.key.gpg | Bin 0 -> 2494 bytes ...95AD3E7BB87F14FCFEC3DCCAA3D28722C7.key.gpg | Bin 0 -> 2490 bytes ...CAD506AFEEBB022D7A8F2D8037F07A124D.key.gpg | Bin 0 -> 2489 bytes ...BCF39E0ABA68D3616B3E3647B8ADE2BCB5.key.gpg | Bin 0 -> 2486 bytes .gnupg/public.key | 123 ++++++++ .gnupg/pubring.gpg | 0 .gnupg/pubring.kbx | Bin 0 -> 7119 bytes .gnupg/secring.gpg | 0 .gnupg/tofu.db | Bin 0 -> 49152 bytes .gnupg/trustdb.gpg | Bin 0 -> 1320 bytes .local/share/.gitignore | 3 - .nanorc-4.8 | 114 -------- .nanorc-5.2 | 118 -------- .nanorc-5.5 => .nanorc-6.0 | 18 +- .screenrc | 1 + .ssh/.gitignore | 1 + .ssh/config | 95 +++--- .ssh/id_ed25519.gpg | Bin 0 -> 477 bytes .ssh/id_ed25519.pub | 1 + .ssh/id_ed25519_github.gpg | 4 + .ssh/id_ed25519_github.pub | 1 + .ssh/id_rsa.gpg | Bin 0 -> 2040 bytes .ssh/id_rsa.pub | 1 + 37 files changed, 559 insertions(+), 380 deletions(-) create mode 100644 .gnupg/.gitignore create mode 100644 .gnupg/.gpg-v21-migrated create mode 100644 .gnupg/gpg-agent.conf create mode 100644 .gnupg/gpg.conf create mode 100644 .gnupg/openpgp-revocs.d/.gitignore create mode 100644 .gnupg/openpgp-revocs.d/70D946ED563FBA778ECF229B25C87CDF83673730.rev.gpg create mode 100644 .gnupg/private-keys-v1.d/.gitignore create mode 100644 .gnupg/private-keys-v1.d/8C314DF78FF697B37E1B3AC6F1F7CC68221E5CE6.key.gpg create mode 100644 .gnupg/private-keys-v1.d/ADF85695AD3E7BB87F14FCFEC3DCCAA3D28722C7.key.gpg create mode 100644 .gnupg/private-keys-v1.d/E66DA5CAD506AFEEBB022D7A8F2D8037F07A124D.key.gpg create mode 100644 .gnupg/private-keys-v1.d/E7A50EBCF39E0ABA68D3616B3E3647B8ADE2BCB5.key.gpg create mode 100644 .gnupg/public.key create mode 100644 .gnupg/pubring.gpg create mode 100644 .gnupg/pubring.kbx create mode 100644 .gnupg/secring.gpg create mode 100644 .gnupg/tofu.db create mode 100644 .gnupg/trustdb.gpg delete mode 100644 .local/share/.gitignore delete mode 100644 .nanorc-4.8 delete mode 100644 .nanorc-5.2 rename .nanorc-5.5 => .nanorc-6.0 (92%) create mode 100644 .ssh/id_ed25519.gpg create mode 100644 .ssh/id_ed25519.pub create mode 100644 .ssh/id_ed25519_github.gpg create mode 100644 .ssh/id_ed25519_github.pub create mode 100644 .ssh/id_rsa.gpg create mode 100644 .ssh/id_rsa.pub diff --git a/.bash_logout b/.bash_logout index 9d39b6e..d54b32b 100644 --- a/.bash_logout +++ b/.bash_logout @@ -1,7 +1,7 @@ #!/bin/bash - not strictly necessary, but helps nano with syntax highlighting. # Clear the screen/console on logout. -if (( $SHLVL == 1 )); then +if (( SHLVL == 1 )); then if [[ -x /usr/bin/clear_console ]]; then /usr/bin/clear_console -q elif [[ -x /usr/bin/clear ]]; then @@ -9,6 +9,19 @@ if (( $SHLVL == 1 )); then elif [[ -x /usr/bin/tput ]]; then /usr/bin/tput clear else - echo -ne "\E[2J" + echo -ne "\e[2J" fi fi + +hash ssh-add ssh-agent >/dev/null 2>&1 && { + # Stop any started ssh-agent as long as the shell level is 1 and we're not on a tty. + (( SHLVL == 1 )) && [[ "$(tty)" == /dev/pts/* ]] && [[ -n "$SSH_AGENT_PID" ]] && { + ssh-agent -k + (( $? != 0 )) && printf "\\033[1;31;40m%s\\033[0;39m\\n" "Failed to stop ssh-agent." >&2 + sleep 5 + unset SSH_AGENT_PID SSH_AUTH_SOCK + } + + # Update the ~/.ssh/agents file. + __read_ssh_agents && __write_ssh_agents +} diff --git a/.bash_profile b/.bash_profile index 2aeb910..3609b12 100644 --- a/.bash_profile +++ b/.bash_profile @@ -8,13 +8,14 @@ export LC_COLLATE="POSIX" # 'C' causes issues with some applications # export LC_CTYPE="POSIX" # Not sure why I set this in the first place... export LESS="-RM -j.5 -i -PM?f%F:stdin. -- Page %dt of %D -- %lt/%L (%Pt\%)$" export PAGER="less" -export PATH="/usr/local/sbin:/usr/sbin:/opt/sbin:/sbin:$PATH" +export PATH="/opt/sbin:/usr/local/sbin:/usr/sbin:/sbin:$PATH" export VISUAL="$EDITOR" -[[ -x /usr/bin/lesspipe ]] && eval "$(SHELL=/bin/sh lesspipe)" +hash lesspipe >/dev/null 2>&1 && eval "$(SHELL=/bin/sh lesspipe)" # Platform specific set up. PLATFORM="$(uname -s)" if [[ "$PLATFORM" = "Linux" ]]; then + export GPG_TTY="$(tty)" && gpg-connect-agent updatestartuptty /bye >/dev/null 2>&1 export I_WANT_A_BROKEN_PS=1 export LYNX_CFG="$HOME/.lynx.cfg" export LYNX_LSS="$HOME/.lynx.lss" @@ -32,19 +33,20 @@ fi unset PLATFORM # Add bin directories to PATH. -[[ -d "$HOME/files/bin" ]] && export PATH="$HOME/files/bin:$PATH" [[ -d "$HOME/.local/bin" ]] && export PATH="$HOME/.local/bin:$PATH" [[ -d "$HOME/bin" ]] && export PATH="$HOME/bin:$PATH" +[[ -d "$HOME/files/bin" ]] && export PATH="$HOME/files/bin:$PATH" # Screen. hash screen >/dev/null 2>&1 && { + [[ -e "$HOME/.screenrc-${HOSTNAME%%.*}" ]] && export SCREENRC="$HOME/.screenrc-${HOSTNAME%%.*}" export SCREENDIR="$HOME/.screen-${HOSTNAME%%.*}" if [[ -n "$SSH_TTY" ]]; then if [[ -n "$STY" ]]; then echo "Screen $STY, window $WINDOW." echo else - SCREENS="$(screen -ls | grep '[[:alpha:]]' | egrep -v '^([[:digit:]]+|No) Socket(s)?')" + SCREENS="$(screen -ls | grep '[[:alpha:]]' | grep -E -v '^([[:digit:]]+|No) Socket(s)?')" if [[ -n "$SCREENS" ]]; then echo "$SCREENS" echo @@ -59,11 +61,11 @@ hash screen >/dev/null 2>&1 && { echo else TTY="$(tty | cut -d/ -f3-)" - SCREENS="$(screen -list | fgrep "${HOSTNAME%%.*}" | fgrep "${TTY//\//-}")" - case "$(echo "${SCREENS:--n}" | wc -l)" in + SCREENS="$(screen -list | grep -F "${HOSTNAME%%.*}" | grep -F "${TTY//\//-}")" + case "$(echo ${SCREENS:--n} | wc -l)" in 0) # No screens found - start a new instance, if on a tty. - [[ "$TTY" == *tty* ]] && screen + [[ "$TTY" == *tty* ]] && sleep 1 && screen ;; 1) # Just one screen - reconnect if it's not dead. @@ -71,6 +73,7 @@ hash screen >/dev/null 2>&1 && { echo "Found dead screen for $TTY:" echo "$SCREENS" | sed -e 's/^/ /g' else + sleep 1 screen -dr "${TTY//\//-}.${HOSTNAME%%.*}" fi ;; @@ -83,19 +86,3 @@ hash screen >/dev/null 2>&1 && { unset SCREENS fi } - -# Mail check. -[[ ! -z "$SSH_CONNECTION" ]] && { - if [[ -s /var/spool/mail/$USER ]]; then - if [[ -N /var/spool/mail/$USER ]]; then - echo "You have new mail." - echo - else - echo "You have mail." - echo - fi -# else -# echo "No mail." -# echo - fi -} diff --git a/.bashrc b/.bashrc index 03d3a8d..d41b3fa 100644 --- a/.bashrc +++ b/.bashrc @@ -1,3 +1,199 @@ +#!/bin/bash - not strictly necessary, but helps nano with syntax highlighting. + +__find_ssh_agent_sock() { + # Returns: 0 = Found an alternative socket. + # 1 = Did not find a viable socket. + local ERR I + + # Search the SSH_AUTH_SOCKS array for a viable socket. + for ((I = 0; I < ${#SSH_AUTH_SOCKS[@]}; I++)); do + SSH_AUTH_SOCK="${SSH_AUTH_SOCKS[$I]}" ssh-add -l >/dev/null 2>&1 + (( $? < 2 )) && { export SSH_AUTH_SOCK="${SSH_AUTH_SOCKS[$I]}"; break; } + unset SSH_AUTH_SOCK + done + + [[ -z "$SSH_AUTH_SOCK" ]] && return 1 + return 0 +} + +__read_ssh_agents() { + # Returns: 0 = Processed and read the agents file without issue. + # 1 = Error processing/read the agents file. + local ERR FD I SOCK + + [[ ! -e ~/.ssh/agents ]] && touch ~/.ssh/agents + + # Lock the ~/.ssh/agents file. + if [[ "$(uname -s)" == "Linux" ]]; then + # Linux has 'flock', thankfully. + { exec {FD}<~/.ssh/agents && flock -E 10 -e -w 0.5 "$FD"; } || { + ERR=$? + if (( ERR == 10 )); then + printf "\\033[1;31;40m%s\\033[0;39m\\n" "Failed to obtain lock on ~/.ssh/agents." >&2 + else + printf "\\033[1;31;40m%s\\033[0;39m\\n" "Flock usage error." >&2 + fi + return 1 + } + + # Make note of the mtime for use in write_ssh_agents. + SSH_AGENTS_MTIME="$(stat --format=%.9Y ~/.ssh/agents)" + elif [[ "$(uname -s)" == "Darwin" ]]; then + # Do locking the sucky way on macOS. + for ((I = 0; I < 6; I++)); do + if shlock -p "$$" -f ~/.ssh/agents.lock; then + exec {FD}<~/.ssh/agents + # Make note of the mtime for use in write_ssh_agents. + SSH_AGENTS_MTIME="$(stat -f %Fm ~/.ssh/agents)" + ERR=0 + break + else + ERR=1 + sleep 0.1 + fi + done + (( ERR != 0 )) && { printf "\\033[1;31;40m%s\\033[0;39m\\n" "Failed to obtain lock on ~/.ssh/agents." >&2; return 1; } + else + printf "\\033[1;31;40m%s\\033[0;39m\\n" "File locking unsupported on this platform." >&2 + return 1 + fi + + # Read the socket list (bash v3+ compliant) + while read -u "$FD" -r SOCK; do + [[ -n "$SOCK" ]] && SSH_AUTH_SOCKS+=("$SOCK") + done + ERR=$? + + # Close the file descriptor (which on Linux releases the lock too). + exec {FD}<&- + + # On Darwin, release the lock on the file. + rm -f ~/.ssh/agents.lock + + # Remove the . in the mtime. + SSH_AGENTS_MTIME="${SSH_AGENTS_MTIME/\.}" + + # Error out if the data couldn't be read. + (( ERR != 0 )) && { printf "\\033[1;31;40m%s\\033[0;39m\\n" "Failed to read ssh agent socket list." >&2; unset SSH_AUTH_SOCKS; return 1; } + return 0 +} + +__write_ssh_agents() { + # Returns: 0 = Processed and wrote the agents file without issue. + # 1 = Error processing/writing the agents file. + # 2 = The SSH_AUTH_SOCKS array may be out of date as the agents file'a mtime has changed. + local FD ERR I J MTIME SOCKS + + # Add the current agent socket to the sockets array. + SSH_AUTH_SOCKS=("$SSH_AUTH_SOCK" "${SSH_AUTH_SOCKS[@]}") + + # Remove any duplicates from SSH_AUTH_SOCKS. + for ((I = 0; I < ${#SSH_AUTH_SOCKS[@]}; I++)); do + for ((J = 0; J < ${#SOCKS[@]}; J++)); do + [[ "${SSH_AUTH_SOCKS[$I]}" == "${SOCKS[$J]}" ]] && continue 2 + done + # Only add the socket if it's still viable. + [[ -n "${SSH_AUTH_SOCKS[$I]}" ]] && { + SSH_AUTH_SOCK="${SSH_AUTH_SOCKS[$I]}" ssh-add -l >/dev/null 2>&1 + (( $? < 2 )) && SOCKS+=("${SSH_AUTH_SOCKS[$I]}") + } + done + + # Lock the ~/.ssh/agents file. + if [[ "$(uname -s)" == "Linux" ]]; then + # Make sure SSH_AUTH_SOCKS has the most up to date data. + MTIME="$(stat --format=%.9Y ~/.ssh/agents)" + (( ${MTIME/\.} > SSH_AGENTS_MTIME )) && return 2 + + # Lock the agents file. + { exec {FD}>~/.ssh/agents && flock -E 10 -e -w 0.5 "$FD"; } || { + if (( $? == 10 )); then + printf "\\033[1;31;40m%s\\033[0;39m\\n" "Failed to obtain lock on ~/.ssh/agents." >&2 + else + printf "\\033[1;31;40m%s\\033[0;39m\\n" "Flock usage error" >&2 + fi + return 1 + } + elif [[ "$(uname -s)" == "Darwin" ]]; then + # Make sure SSH_AUTH_SOCKS has the most up to date data. + MTIME="$(stat --format=%.9Y ~/.ssh/agents)" + (( ${MTIME/\.} > SSH_AGENTS_MTIME )) && return 2 + + # Do locking the sucky way on OSX. + for ((I = 0; I < 6; I++)); do + if shlock -p "$$" -f ~/.ssh/agents.lock; then + exec {FD}>~/.ssh/agents + ERR=0 + break + else + ERR=1 + sleep 0.1 + fi + done + (( ERR != 0 )) && { printf "\\033[1;31;40m%s\\033[0;39m\\n" "Failed to obtain lock on ~/.ssh/agents." >&2; return 1; } + else + printf "\\033[1;31;40m%s\\033[0;39m\\n" "File locking unsupported on this platform." >&2 + return 1 + fi + + # Write the cleaned array to disk. + printf "%s\\n" "${SOCKS[@]}" >~/.ssh/agents 2>/dev/null + ERR=$? + + # Release locks. + exec {FD}>&- + rm -f ~/.ssh/agents.lock + + # Error out if the data couldn't be written. + (( ERR != 0 )) && { printf "\\033[1;31;40m%s\\033[0;39m\\n" "Failed to write ssh agent socket list." >&2; return 1; } + return 0 +} + +__ssh_agent_prompt_command() { + # Returns: 0 = All is good. + # 1 = And error occured. + local ERR SSH_AUTH_SOCKS=() + + if [[ -z "$SSH_AUTH_SOCK" ]]; then + ERR=2 + else + SSH_AUTH_SOCK="$SSH_AUTH_SOCK" ssh-add -l >/dev/null 2>&1 + ERR=$? + fi + (( ERR == 2 )) && { + # Read previous sockets from ~/.ssh/agents. + __read_ssh_agents || { + unset SSH_AUTH_SOCK + return 1 + } + + # Find a new socket to use. + if __find_ssh_agent_sock; then + printf "\\033[1;33;40m%s\\033[0;39m\\n" "Connected to existing agent socket." + else + # Start a new agent. + eval "$(ssh-agent -s 2>/dev/null | grep -v 'echo'; printf "%s" "ERR=${PIPESTATUS[0]}")" + (( ERR > 0 )) && { printf "\\033[1;31;40m%s\\033[0;39m\\n" "Failed to start ssh-agent - continuing with no agent." >&2; return 1; } + printf "\\033[1;32;40m%s\\033[0;39m\\n" "Started new ssh-agent." + fi + + # Update the agents file. + while :; do + __write_ssh_agents + ERR=$? + (( ERR == 2 )) && { __read_ssh_agents || return 1; } && continue + (( ERR == 1 )) && return 1 + break + done + } + return 0 +} + +imagebin() { + [[ -z "$1" ]] && { printf "%s: %s\\n" "Usage" "${FUNCNAME[0]} " >&2; return 1; } + curl -F file="@${1:-}" https://imagebin.ca/upload.php | grep ^url: | cut -d: -f2- +} + # Make bash a little more pleasent - these are valid for all versions. shopt -s cdspell checkhash checkwinsize cmdhist histappend no_empty_cmd_completion @@ -21,59 +217,74 @@ else fi # Version specific set up. -if (( ${BASH_VERSINFO[0]} >= 4 )); then +if (( BASH_VERSINFO[0] >= 4 )); then # Add to the shopts. shopt -s checkjobs dirspell # Set the prompts. PROMPT_DIRTRIM=2 - # No colour: - # PS1="[\u@\h] \w ->" - # Coloured username: - # PS1="[\[$(tput bold)$(tput setaf $COLOUR)\]\u\[$(tput sgr0)\]@\h] \w ->" - # Coloured username + host: - # PS1="[\[$(tput bold)$(tput setaf $COLOUR)\]\u\[$(tput sgr0)\]@\[$(tput bold)$(tput setaf 3)\]\h\[$(tput sgr0)\]] \w ->" # Coloured username + host + directory: PS1="[\[$(tput bold)$(tput setaf $COLOUR)\]\u\[$(tput sgr0)\]@\[$(tput bold)$(tput setaf 3)\]\h\[$(tput sgr0)\]] \[$(tput bold)$(tput setaf 4)\]\w\[$(tput sgr0)\] ->" else # Set the prompts. - # No colour: - # PS1="[\u@\h] \$(echo \"\${PWD/#\$HOME/~}\" | awk -F/ '{if (NF>3) {printf \".../\" \$(NF-1) \"/\" \$NF} else {printf \$0}}') ->" - # Coloured username: - # PS1="[\[$(tput bold)$(tput setaf $COLOUR)\]\u\[$(tput sgr0)\]@\h] \$(echo \"\${PWD/#\$HOME/~}\" | awk -F/ '{if (NF>3) {printf \".../\" \$(NF-1) \"/\" \$NF} else {printf \$0}}') ->" - # Coloured username + host: - # PS1="[\[$(tput bold)$(tput setaf $COLOUR)\]\u\[$(tput sgr0)\]@\[$(tput bold)$(tput setaf 3)\]\h\[$(tput sgr0)\]] \$(echo \"\${PWD/#\$HOME/~}\" | awk -F/ '{if (NF>3) {printf \".../\" \$(NF-1) \"/\" \$NF} else {printf \$0}}') ->" # Coloured username + host + directory: PS1="[\[$(tput bold)$(tput setaf $COLOUR)\]\u\[$(tput sgr0)\]@\[$(tput bold)$(tput setaf 3)\]\h\[$(tput sgr0)\]] \[$(tput bold)$(tput setaf 4)\]\$(echo \"\${PWD/#\$HOME/~}\" | awk -F/ '{if (NF>3) {printf \".../\" \$(NF-1) \"/\" \$NF} else {printf \$0}}')\[$(tput sgr0)\] ->" fi unset COLOUR # Set the debugger prompt. -# PS4="+(\\\$? = \$?) \${BASH_SOURCE##*/}\${FUNCNAME:+(\$FUNCNAME)}:\$LINENO: " -# PS4="+(\[\e[33m\]\\\$? = \$?\[$(tput sgr0)\]) \[$(tput bold)$(tput setaf 4)\]\${BASH_SOURCE##*/}\[$(tput sgr0)\]\${FUNCNAME:+(\[$(tput bold)$(tput setaf 2)\]\$FUNCNAME\[$(tput sgr0)\])}:\[$(tput bold)$(tput setaf 1)\]\$LINENO\[$(tput sgr0)\]: " -export PS4="+(\[\e[33m\]\$?\[$(tput sgr0)\]) \[$(tput bold)$(tput setaf 4)\]\${BASH_SOURCE##*/}\[$(tput sgr0)\]\${FUNCNAME:+(\[$(tput bold)$(tput setaf 2)\]\$FUNCNAME\[$(tput sgr0)\])}:\[$(tput bold)$(tput setaf 1)\]\$LINENO\[$(tput sgr0)\]: " +export PS4="+(\[\e[1;33;40m\]\$?\[$(tput sgr0)\]) \[$(tput bold)$(tput setaf 4)\]\${BASH_SOURCE##*/}\[$(tput sgr0)\]\${FUNCNAME[0]:+(\[$(tput bold)$(tput setaf 2)\]\${FUNCNAME[0]}\[$(tput sgr0)\])}:\[$(tput bold)$(tput setaf 1)\]\$LINENO\[$(tput sgr0)\]: " # The commands to execute before the prompt is displayed. -# PROMPT_COMMAND="" +PROMPT_COMMAND="__ssh_agent_prompt_command" + +# Common aliases. +hash bc >/dev/null 2>&1 && alias bc='bc -lq' +hash diff >/dev/null 2>&1 && alias diff='diff --color=auto -u' +hash grep >/dev/null 2>&1 && alias egrep='grep -E --color=auto' +hash grep >/dev/null 2>&1 && alias fgrep='grep -E --color=auto' +hash grep >/dev/null 2>&1 && alias grep='grep --color=auto' +hash nc >/dev/null 2>&1 && alias pastebin='nc termbin.com 9999' +hash screen >/dev/null 2>&1 && alias screen='screen -Ua' +hash shellcheck >/dev/null 2>&1 && alias shellcheck='shellcheck -x' +hash scp ssh ssh-add >/dev/null 2>&1 && alias scp='_EXEC=scp ssh' +hash sftp ssh ssh-add >/dev/null 2>&1 && alias sftp='_EXEC=scp ssh' +hash ssh ssh-add >/dev/null 2>&1 && ssh() { + local ERR + + if [[ -z "$SSH_AUTH_SOCK" ]]; then + ERR=2 + else + SSH_AUTH_SOCK="$SSH_AUTH_SOCK" ssh-add -l >/dev/null 2>&1 + ERR=$? + fi + (( ERR == 2 )) && __ssh_agent_prompt_command && ssh-add + (( ERR == 1 )) && ssh-add + command "${_EXEC:-${FUNCNAME[0]}}" "$@" +} + +# Determine the platform being logged into. +PLATFORM="$(uname -s)" # Platform specific set up. -PLATFORM="$(uname -s)" if [[ "$PLATFORM" = "Linux" ]]; then + # Linux specific functions. + psgrep() { + [[ -z "$1" ]] && { printf "%s: %s\\n" "Usage" "${FUNCNAME[0]} " >&2; return 1; } + ps -auwwx | command grep -E --color=always -- "(.*RSS.*|$1)" | grep -F -v "(.*RSS.*|" + } + # Linux specific aliases. hash ftpwho >/dev/null 2>&1 && alias ftpwho='ftpwho -v' hash iftop >/dev/null 2>&1 && alias iftop='TERM=vt100 iftop' + hash ip >/dev/null 2>&1 && alias ip='ip -color=auto' hash last less >/dev/null 2>&1 && alias laston='last -a | less' hash ls >/dev/null 2>&1 && alias ls='ls -bFv --color=auto' hash minicom >/dev/null 2>&1 && alias minicom='minicom -m -c on' + hash mkpasswd >/dev/null 2>&1 && alias mkpasswd='mkpasswd -m sha512crypt' hash mkpasswd >/dev/null 2>&1 && alias pwgen='mkpasswd -m sha512crypt' - hash pine >/dev/null 2>&1 && alias pine='pine -p "{mail.opensourcerers.net/Service=IMAP/User=darren@afterdark.org.uk/TLS/NoValidate-Cert/NoRsh}.pinerc"' hash pinfo >/dev/null 2>&1 && alias info='pinfo' hash ping >/dev/null 2>&1 && alias ping='ping -b' - - # Linux specific functions. - psgrep() { - ps -auwwx | command egrep --color=always -- "(.*RSS.*|$1)" | fgrep -v "(.*RSS.*|" - } elif [[ "$PLATFORM" = "Darwin" ]]; then # Darwin specific aliases. hash df >/dev/null 2>&1 && alias df='df -P' @@ -83,14 +294,3 @@ else echo "${BASH_SOURCE##*/}: unsupported platform: $PLATFORM" >&2 fi unset PLATFORM - -# Common aliases. -hash bc >/dev/null 2>&1 && alias bc='bc -lq' -#hash curl >/dev/null 2>&1 && alias pastebin="curl -F 'sprunge=<-' http://sprunge.us" -hash curl >/dev/null 2>&1 && imagebin() { curl -F file="@${1:-}" https://imagebin.ca/upload.php | grep ^url: | cut -d: -f2-; } -hash diff >/dev/null 2>&1 && alias diff='diff -u' -hash egrep >/dev/null 2>&1 && alias egrep='egrep --color=auto' -hash fgrep >/dev/null 2>&1 && alias fgrep='fgrep --color=auto' -hash grep >/dev/null 2>&1 && alias grep='grep --color=auto' -hash nc >/dev/null 2>&1 && alias pastebin='nc termbin.com 9999' -hash screen >/dev/null 2>&1 && alias screen='screen -Ua' diff --git a/.config/htop/htoprc b/.config/htop/htoprc index 338eb97..943fdbe 100644 --- a/.config/htop/htoprc +++ b/.config/htop/htoprc @@ -1,26 +1,61 @@ # Beware! This file is rewritten by htop when settings are changed in the interface. # The parser is also very primitive, and not human-friendly. +htop_version=3.2.1 +config_reader_min_version=3 fields=0 48 17 18 38 39 40 2 46 47 49 1 -sort_key=46 -sort_direction=1 -hide_threads=0 hide_kernel_threads=1 hide_userland_threads=0 shadow_other_users=1 show_thread_names=0 -show_program_path=1 +show_program_path=0 highlight_base_name=1 +highlight_deleted_exe=1 highlight_megabytes=1 highlight_threads=1 -tree_view=0 +highlight_changes=0 +highlight_changes_delay_secs=5 +find_comm_in_cmdline=1 +strip_exe_from_cmdline=1 +show_merged_command=0 header_margin=0 +screen_tabs=1 detailed_cpu_time=0 -cpu_count_from_zero=1 +cpu_count_from_one=0 +show_cpu_usage=1 +show_cpu_frequency=0 +show_cpu_temperature=0 +degree_fahrenheit=0 update_process_names=0 -account_guest_in_cpu_meter=0 -color_scheme=0 +account_guest_in_cpu_meter=1 +color_scheme=6 +enable_mouse=0 delay=15 -left_meters=AllCPUs CPU -left_meter_modes=1 1 -right_meters=Uptime LoadAverage Tasks Memory Swap -right_meter_modes=2 2 2 1 1 +hide_function_bar=0 +header_layout=two_50_50 +column_meters_0=AllCPUs2 CPU +column_meter_modes_0=1 1 +column_meters_1=Uptime LoadAverage Tasks NetworkIO Memory Swap +column_meter_modes_1=2 2 2 2 1 1 +tree_view=0 +sort_key=46 +tree_sort_key=0 +sort_direction=-1 +tree_sort_direction=1 +tree_view_always_by_pid=0 +all_branches_collapsed=0 +screen:Main=PID USER PRIORITY NICE M_VIRT M_RESIDENT M_SHARE STATE PERCENT_CPU PERCENT_MEM TIME Command +.sort_key=PERCENT_CPU +.tree_sort_key=PID +.tree_view=0 +.tree_view_always_by_pid=0 +.sort_direction=-1 +.tree_sort_direction=1 +.all_branches_collapsed=0 +screen:I/O=PID USER IO_PRIORITY IO_RATE IO_READ_RATE IO_WRITE_RATE +.sort_key=IO_RATE +.tree_sort_key=PID +.tree_view=0 +.tree_view_always_by_pid=0 +.sort_direction=-1 +.tree_sort_direction=1 +.all_branches_collapsed=0 diff --git a/.dir_colors b/.dir_colors index bad92cc..461b3d4 100644 --- a/.dir_colors +++ b/.dir_colors @@ -67,11 +67,9 @@ TERM xterm-debian # 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white NORMAL 00 # Global default. FILE 00 # Normal file. -# RESET 0 # reset to "normal" color DIR 01;34 # Directory. LINK 01;36 # Symbolic link. Set to 'target' instead of a # value for the colour of the file pointed to. -# HARDLINK 00 # Normal file with more than one name/link. ORPHAN 00;31 # Symlink where target file does not exist. MISSING 00;31 # Non-existant target file of a symlink. FIFO 00;33 # Pipe. @@ -82,11 +80,11 @@ CHR 00;33 # Character device. EXEC 01;32 # File with any execute permission (+x). SETUID 01;32;41 # File is setuid (u+s). SETGID 01;32;45 # File is setgid (g+s). -CAPABILITY 01;32;44 # File is not setuid/setgid (ug-s) but has a - # limited privileged capability set configured. -OTHER_WRITABLE 34;41 # Dir is other-writable (o+w). STICKY 34;42 # Dir is not other-writable and sticky (o-w,+t). STICKY_OTHER_WRITABLE 34;45 # Dir is other-writable and sticky (o+w,+t). +OTHER_WRITABLE 34;41 # Dir is other-writable (o+w). +CAPABILITY 01;32;44 # File is not setuid/setgid (ug-s) but has a + # limited privileged capability set configured. # File extensions that should be colourised. # Archives (bright red). @@ -154,6 +152,8 @@ STICKY_OTHER_WRITABLE 34;45 # Dir is other-writable and sticky (o+w,+t). .TZ 01;31 .tz2 01;31 .TZ2 01;31 +.tzst 01;31 +.TZST 01;31 .xz 01;31 .XZ 01;31 .z 01;31 @@ -162,6 +162,8 @@ STICKY_OTHER_WRITABLE 34;45 # Dir is other-writable and sticky (o+w,+t). .ZIP 01;31 .zoo 01;31 .ZOO 01;31 +.zst 01;31 +.ZST 01;31 # Images (bright magenta). .bmp 01;35 @@ -296,8 +298,12 @@ STICKY_OTHER_WRITABLE 34;45 # Dir is other-writable and sticky (o+w,+t). .AXA 01;33 .flac 01;33 .FLAC 01;33 +.flv 01;33 +.FLV 01;33 .m2a 01;33 .M2A 01;33 +.m2t 01;33 +.M2T 01;33 .m4a 01;33 .M4A 01;33 .m4p 01;33 @@ -340,6 +346,10 @@ STICKY_OTHER_WRITABLE 34;45 # Dir is other-writable and sticky (o+w,+t). .SPX 01;33 .wav 01;33 .WAV 01;33 +.webm 01;33 +.WEBM 01;33 +.webp 01;33 +.WEBP 01;33 .wma 01;33 .WMA 01;33 diff --git a/.gitconfig b/.gitconfig index 96d51ab..de01d56 100644 --- a/.gitconfig +++ b/.gitconfig @@ -12,4 +12,11 @@ [credential] username = tadgy [commit] - verbose = 1 + verbose = 1 +[push] + autoSetupRemote = true +[alias] + c = commit + d = diff + p = push + s = status diff --git a/.gitignore b/.gitignore index a738573..8cc6161 100644 --- a/.gitignore +++ b/.gitignore @@ -14,7 +14,7 @@ .bash_history-* .cache/ .dbus/ -.gnupg +.fltk/ .lesshst .lynx.cookies .mozilla/ @@ -23,6 +23,7 @@ .screen-*/ .sqlite_history .thumbnails/ -.xinitrc -.xsession +.vmware +.vnc +.xca .xsession-errors* diff --git a/.gnupg/.gitignore b/.gnupg/.gitignore new file mode 100644 index 0000000..7a54037 --- /dev/null +++ b/.gnupg/.gitignore @@ -0,0 +1,4 @@ +*~ +S.* +.#* +random_seed diff --git a/.gnupg/.gpg-v21-migrated b/.gnupg/.gpg-v21-migrated new file mode 100644 index 0000000..e69de29 diff --git a/.gnupg/gpg-agent.conf b/.gnupg/gpg-agent.conf new file mode 100644 index 0000000..ac59102 --- /dev/null +++ b/.gnupg/gpg-agent.conf @@ -0,0 +1,5 @@ +# Cache the passphrase for 30 days. +default-cache-ttl 2592000 + +# Maximum time to cache a password (1 year). +max-cache-ttl 31536000 diff --git a/.gnupg/gpg.conf b/.gnupg/gpg.conf new file mode 100644 index 0000000..0be069f --- /dev/null +++ b/.gnupg/gpg.conf @@ -0,0 +1,33 @@ +# Set the default key if more than one secret key exists. +# default-key 25C87CDF83673730 + +# By default, use the default key as the recipient. +default-recipient-self + +# Options for listing keys. +list-options show-std-notations + +# Options for verifying keys. +verify-options show-std-notations + +# Display LATIN1 characters. +display-charset iso-8859-1 + +# Automatic key location search options. +auto-key-locate cert keyserver ldap hkp://subkeys.pgp.net + +# Retrieve keys from keyservers when validating. +auto-key-retrieve + +# Show full keyid and fingerprints. +keyid-format long +with-fingerprint + +# Options for retrieving keys from keyservers. +keyserver-options include-subkeys + +# Get rid of the copyright notice. +no-greeting + +# Use loopbacking to obtain passphrases. +pinentry-mode loopback diff --git a/.gnupg/openpgp-revocs.d/.gitignore b/.gnupg/openpgp-revocs.d/.gitignore new file mode 100644 index 0000000..ca9a881 --- /dev/null +++ b/.gnupg/openpgp-revocs.d/.gitignore @@ -0,0 +1 @@ +*.rev diff --git a/.gnupg/openpgp-revocs.d/70D946ED563FBA778ECF229B25C87CDF83673730.rev.gpg b/.gnupg/openpgp-revocs.d/70D946ED563FBA778ECF229B25C87CDF83673730.rev.gpg new file mode 100644 index 0000000000000000000000000000000000000000..b2685dcd60f431a456ce3bb3e6174d840fa2a2ed GIT binary patch literal 1277 zcmVp=%lOpFI3gP3;30T#BAw(q>e5 z6Bh3VXqMp~w^4f}QfCXc)9nWE`UaBaix4!3Kf5H2i4M!%K;4}za!Zx-(X;+;2Au{Q z$!bYKC+0G+O{pTpr>SogvE+2a4p{Kzvx-rlT2 zNwDGC2(XmgWX;HalV>^ABwcB_67w(eDmfuQ($(4BC|w&t@g^I-fi&wjSIcTY`24*m zYo3a4NjnOE22i}x2!PnRyEl_V)7RqX_WpP~J-@juIt_+gSb1*3j3mMk= zkj-3=z_z*kqr?jI1IXN+@pR^uC5>VYtw*TeXe39FN)KwV*5G z3_^bym)Gr^Po8#lYxUscadF$O8$p!FtD}pS;aR*2(Mj|y8 z#lBE7WEo-ir-=wuqIA0edx##PgY83zYc z;nuw3tTIGLz$y#-jZkkjJl(|ye~&e}1aC98cjR?%pP=&)=7O49`C}*8MH@^QSbL>K%GqVA?3JbKB$|6v n$(FG1NEOQ(%+;d0nuh@25gS(XS-8N>TrwP*(iz;)H^IO6tiyln literal 0 HcmV?d00001 diff --git a/.gnupg/private-keys-v1.d/.gitignore b/.gnupg/private-keys-v1.d/.gitignore new file mode 100644 index 0000000..c996e50 --- /dev/null +++ b/.gnupg/private-keys-v1.d/.gitignore @@ -0,0 +1 @@ +*.key diff --git a/.gnupg/private-keys-v1.d/8C314DF78FF697B37E1B3AC6F1F7CC68221E5CE6.key.gpg b/.gnupg/private-keys-v1.d/8C314DF78FF697B37E1B3AC6F1F7CC68221E5CE6.key.gpg new file mode 100644 index 0000000000000000000000000000000000000000..58a3e90d89ea01b18f2661c7b82eb97fee141f40 GIT binary patch literal 2494 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 IugM8B%(lGf4gdfE literal 0 HcmV?d00001 diff --git a/.gnupg/private-keys-v1.d/ADF85695AD3E7BB87F14FCFEC3DCCAA3D28722C7.key.gpg b/.gnupg/private-keys-v1.d/ADF85695AD3E7BB87F14FCFEC3DCCAA3D28722C7.key.gpg new file mode 100644 index 0000000000000000000000000000000000000000..554b811e8110ff0b45271485d3737e3fc2e2f5df GIT binary patch literal 2490 zcmV;r2}Smd4Fm}T0tL0}=XtzD$=}lI0nk=K#;I9si5Vi#UT_d;wV7@Hj*-TGf{e+Q7<;SmxiE4Re`HAjxzEGXI8^2ew4U!ifGXSuV zOqIKms;ONGIe)}al9hMi*{$DoYX;_bcr5`4$^yM~h?42kJfT$Qs(p4fv5U;1PL-E6 zQ@V|$3C#SFg+xQ-W_r{@2~Xquj^n($9CQY%vk*VsG%Lt3wUI#&7Dl%A6eMg&n|T6N>fx0JBs+dW3yX zGSQJ^ZCVc!2>juMcj}y+_Fx~VGmitapSIyPPc!`>N@IY*Z?g7RIu9Jx@}h?4OiM3m zV~)tT{^PDPT%(~e80>Qp__7k$1VqXU3Tk(CriXNfYG?O(;M^Wl;uWlNX$-4gelt)t z&!FVf3ao7sl+)|j_)U}Sn^>~gfxwoZa;JviG5w_dGs0G+QYuKE8Nk{;MFTvqvHQqD zK#zsDO3o@-<5NWq!5y~4YxWEg*H zwMD+}#=(ozAgI}kQ*dc|60gN6`zPGEq;Q^ey0{PWL1Q6d<_;dYoV*!R+0^#9DNp!E zx*_MSG1Rw`94+gM^@77U-F2D!K51&nNI;Wcpcq!2b^?QHG!4IC1)waM+14XQr9fF= zPrpc_P!GoK`b``cm4_%+7?eYoDoz91?uAqA)ufwqqVTsmT-xP29neONsXB|D!Y{t` zzE;>ACT{EJ{#eTVX!E!c$0o0*jag}FLZ46~NYQ7B^1t|~`&5QO{}GOB1)+I3;@aL@ zJ!YXsNo4#6TXAP>#VGKyA7!ysN3$U=dihesH`%Ewmu*4PU%WBtuS5^|?A%J!l0bQO zFs=!RNg#L=W4Y$lBIHM~bfpws+FTFB-tVa!CGx|}pysN0Vo|5TZEt~dZNpcR-6xwT z96w;;Dk3qtS%j-3+TBvb5c#9`D2$H&kjx6E>Vt{|pOpnwpU&W#3H>b&PSKb|4~m^Z zfGTevyR@~pD!ekDtitD39DyyyWq2D%${h;0!9E9PDuSDMIOVpnm+?^cc~P^l;-6Pb zoASZ;8vyUjXbf>|nHgef9biVxPTA&lS*8^U&44REwvmFE$QXG9lX!#zmgEHR+%Isd za)T}{`yZQzF43tCRUw*1kh^`f!5Ursqi7q4#q$XJ_?C)bP0rfhx!iZiJvD-3^knf4 zKajd-&zy>f>U)a{z`LtQ#U2){>BNMAKt_W>7qi|X|HOrD4eXJo7nMWB5h~Axm%3gb zY#1;&X0#d51#gfYdPZHuLPDM>q-^DG_Mh$AQBC=h;_JDNP+x#B4{36Os9?uC?1W6I{X)5 zc8$nl>uNTL0ZB^8Q-{Xvo&Y|YlCaZVqP5j!G9NUT%TUThBr(q3+Ftxv5*h1Yr~Z}C zosEt#Lx~y?6wq{_SSa+`Y}4RjLO9klL(SeUCY#o17ivjqW&k^{$I1e{`CLLvjKjRo z1HAGlxDlRdH3lp+>=CmjyRoQ-cP1&=+9z4ALzzO~G%3~92MB-9KG5mhW>hGZijFiI zwv2YQ2z`n+VXi}{RqN-ST|>%f(2u1uR>!to^4Tm!WvAv5SZBc~2;g0p2L=qk`VSF2 zyyrECuv%tz$4lmKXNM#l0Tvb%rIMSW-CG@>Iu)nOeKIUBntH$&0=vQT+kkWvVOf*{ z(9V3}=BZmjWuVM>R`$usS;X1qxR7@61ldbK|BG7xLu9vd77LY){^Q<*`cCf+*Wz=9 zntvz3L$f8B5edEK8I1`_BNEjOhIa~=;oZD;U8B;^&BGkI)=DBj#7{?H<`%gEkKdRs zyLFk`iP|s9uF<%z@R5nxHn751zmiis>?jBx12lpxOHymFa+=Q{Jks06-rX?2JZWC% zs2JFGO#dynrN6RK_~;?u8JWCB+hht<;C}P8o?(-vGOx+zX&3#p^7k5=`|uE_PJo#6 zA}2ZzWP4J>6DeYd58HUVR+XYFcN@CzgAiD**P_=c;)cv>YI`Kb5qGbuuVQ$!yo8xJ z;b48zcF)g9uSlF;*6>!=KRA_r=uK4nq`-FVwz);uiGh%I?pH*M{0-a?a(0$1S>D!9 zi|z>q+}zI(kv?zDb&U2wax>q!MFytd zG{rqrACZX0Xfot};NYmvQ)KmCIE4;r3`MUV0JIc&^oh;1{0nd=j*Wy$RJV2(X}F0kt)Mp!+5su#RV)GC=CngZW3UGDO;Ssi z;P)6hfAUs{0)-7Ud5PoZLM$6#)Wsh)DO5%*J1sygMCeJISKRT8{0!>CY(oJTefGsp z+Lh8g^1sJlDMY=nC}SiT7>6E@{g2|19_&B!HYY(1jwj9Z>SK@w1>nF!F**Gg)xEU} z_k4DK83!|zeFFxvhgmX*pwWE@R!Jy-z~$d^%HRikRx#|`53~O(y5m1`fxza>>#CNn zwVKv2tu+9GM8L=1XiY=NR1K;h%cUN9hFxm+nAz4?nh1DdgMj3>-x(sb}JKdG`??|PpL#)Q~^>LuZW%JON3j6 z>oI_>N=cbGzpwND><6Yh8GpQU^znicaEyX|a@4z{GiE`Yw>|dPY*fuGAfd)XaySSb7}9PZ~uamUly=LG2M4)(u5y82noE z;eys_s2BrAf@|(JfPUYG=DOJtj~HddMMYhHMW_N#n$OrR=8t_Kw?c`Q0_?~&KiOM! z=RD%=sUIdQAMi+d`@PmDy{jgrU+|P;?y)_E)?mKjP;*Q;$JR!g& znjl69i5Jim$5yckx=4sT(X{XIK|8LxCZ1SzIP`Ubkej&f0SB})Sy_mf5o}Mpq+L^t Eub{QvYXATM literal 0 HcmV?d00001 diff --git a/.gnupg/private-keys-v1.d/E66DA5CAD506AFEEBB022D7A8F2D8037F07A124D.key.gpg b/.gnupg/private-keys-v1.d/E66DA5CAD506AFEEBB022D7A8F2D8037F07A124D.key.gpg new file mode 100644 index 0000000000000000000000000000000000000000..2fbb947e9a82b2faf7dddf4b8724c6c2ced7bec2 GIT binary patch literal 2489 zcmV;q2}bse4Fm}T0?N038nh=>4&T!10SE>-f6XBRjMf^KeyWAr=jZT-=~4wJrwSAX z&!zWPsO%s=FWv~0r26Tw{ic$-M59}-ffFz+@JY+?ZN_Lu8U^LCqMpHnS)EZGe+ebf zPcj`5(QB6!7Y-8M;&{4I14-5~Y8lP<8uMW$qd1-Ex9NSXmphPfo@fQApF1)XaE3)^ zLRvysuHYjwBH8~ecXF~N$-LOjR9jm~AsFa3`gpVIVdZb+W4A8aDsGa319MVyXzk8uXdfCYnPm%%vL=RvZ#&5Mib(KQBYY9l3s(%Tqz`RdZ z6S&MMA#c(}$i}9tqI)*)O$Lql>17GhoD5`n{kjp!i>Dhqc zHqd}!>^z)A$FH~oRpod@284shZXcd}G{|YFCh!h~DmMO_ftvGlsT(`%je7^PsZD(B z${|H1A6_^A$&8TKkW6vn{8HGp_{9`o65!ft2IYjFZ>4eg5y6Gl+=mI645py=NMrQibUra_R~cUb4c#)zV~On^^*(mZx78?3}c zz3;-Zs3;3fFls`Bc9aN2lp2!?&;`SoT91=p6Jv;EMrwf0y~(-`a5%3bfG!7Je1x{Z z380JLx{xS<18OcoM+kz6UhgPjEddeT?KyEig^h>LbXUE`#Me_hm37A^{F00lU>mYG z1iR26oSzL&pc%ws6aYSP=~;&s+SgEx;wn1LXvtZUfziOp52Jg!U)bY+f3_i6V}}Sf zDiSo1s&>mqs0r)L)H=vUYx$sr-5pK)V9?lE;mlPElb!-_CoIwhmWmWA6W^8f45Zxg?KAOgs-S`7&eH<+(e|_ zo1ozA%bg-lPe(o7_@}`uZjLV;m8X%jmII$3cE~?vEci`z2E}D)#ak5Rne@dbK>b?2 zq?AfB}fse`p{7b%-JSG3Y zr&s^=Z{v$X)ANLrkoaJ@{Kn}*wI<4q8X(~6-F^GLk5Lktgqr3NO04}M1-#vu{}gCt z0jq-rOXlZ$P6k#M|CaNye4WsQ&sRQS(spYj#|y`Cc|0k0=D6-dvR;K39isIWp-hT- zfEcM%9oyJz>dx~}KMuv3RMxWIK=KSuLyZ>bf^7EMz zL?TYxgu2}hXB+;6mm@=i0=pWGwF!CVFoZz8OE7gWiN>~7HWk=81W+xlY^96G{_H+k zPG3Iszf6c1uR7Dxrc=;~Gdg}y?f9qOlkxGt%=<6jFqWG3uQZqQ+02azvM5SKBW#b@ z+IVH6*knfHY)CkVPA{E`Qz1wiJqhg4wfksjRzaF-qB0oymz;ekw*kBP&}q&=bP`ao zja5Sp3{?}pU1C3*&--8*F6=wFbN|i7#N?2-g69??6YEKzFjKf&t(4LDl8}8q8CgB2 zEW`bSG5KYG!+TSk*a+~+1lJ`(F=NV>vJ`zG-+3v{wUU_# zXfSBirC}^^m|&>caGlTaerw0N-@jvZbtfybMu!*`8bwt~SAp4rCj+Ad*wxH5P46p2 z@1Mj7u+IaxfBBiaj~2_r%POTU;!>Z1!Khbw#VBhJ#>bvPO=v9oA@tz7NWXfXQ;YV$ zLu$EGjg|oTSdqpbdiorY#ev|F#V|j*%};N;@5ncPX|e40@CZlQ)*vTA?dznbS6&gZ zOgy2VzTxo_k^hYLquLLF8hS-KnF2D*f1jEUj9#Yq5lt>p>P^(6)@b~?P#qF;1g^|D zwmSTPwzg@@4li)?74!2QTIxU)FsI_tjd>PlrdLsUTVA6LQ|Kd8$b>u@nEOY6S{3a> zO&Wk@gx!GE@;a5C4Q|^W-6WxYq8#SuGcW#;-$)W&E%G+uAFo~@_)hP8%4@1KU9A5GJ;-=(aEj7Qp4PYdWhl zw%nAWBOP#^lj(?6$_rWmv66x<6jW(E_}WEMY4Xn<(ecE=9WP|Lb8rcS7yF$US>Q+R zM9=1FiPf~dMctpsH9^*ce?en3u&8UdykTo1Tbi5CNSr7<3jU;7JrD z_PpR^*olrMh)I}pUCmEc0Ou$57p#p3Jm0gwpp)pBJ^01uAzSpG9~q^ DoFUs_ literal 0 HcmV?d00001 diff --git a/.gnupg/private-keys-v1.d/E7A50EBCF39E0ABA68D3616B3E3647B8ADE2BCB5.key.gpg b/.gnupg/private-keys-v1.d/E7A50EBCF39E0ABA68D3616B3E3647B8ADE2BCB5.key.gpg new file mode 100644 index 0000000000000000000000000000000000000000..5b040cf9b00c110478afe7c1603ef34797e2edc7 GIT binary patch literal 2486 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 Ag8%>k literal 0 HcmV?d00001 diff --git a/.gnupg/public.key b/.gnupg/public.key new file mode 100644 index 0000000..beedede --- /dev/null +++ b/.gnupg/public.key @@ -0,0 +1,123 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +JjaOsWHPDA== +=RIBJ +-----END PGP PUBLIC KEY BLOCK----- diff --git a/.gnupg/pubring.gpg b/.gnupg/pubring.gpg new file mode 100644 index 0000000..e69de29 diff --git a/.gnupg/pubring.kbx b/.gnupg/pubring.kbx new file mode 100644 index 0000000000000000000000000000000000000000..57f8ab8a2a2323d6b73f6e318d983422e4137063 GIT binary patch literal 7119 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

|W0sw{PpG z>kO_1e5uOU8_EbIzPypnWqNGQ8%(98hMJW>wBJ6*AGL8QZ#;OQ%hgI36IDTjKu(rU zFkkqA96735{41JwQY*h=kf^B$?#TS^THa_@ud1my^Ugth7QTgVg0R#|0009ILKmY**5I}(ae`){$1Q0*~0R#|0 z009ILKmdX43$Xv6{T#DG1Q0*~0R#|0009ILKmY***#D;n5I_I{1Q0*~0R#|0009IL z$i6_h|F2j6*3^ds0R#|0009ILKmY**5I_I{1TrA-m7cqE_g?e". -## -## For the options that take parameters, the default value is given. -## Other options are unset by default. -## -## Quotes inside string parameters don't have to be escaped with -## backslashes. The last double quote in the string will be treated as -## its end. For example, for the "brackets" option, ""')>]}" will match -## ", ', ), >, ], and }. - -## When soft line wrapping is enabled, make it wrap lines at blank characters. -set atblanks - -## Use auto-indentation. -# set autoindent - -## Automatically hard-wrap the current line when it becomes overlong. -# set breaklonglines - -## Do case-sensitive searches by default. -# set casesensitive - -## Do not use the line below the title bar. -# set emptyline - -## Set the line length for wrapping text and justifying paragraphs. -set fill -2 - -## Draw a vertical stripe at the given column -# set guidestripe 140 - -## Remember the used search/replace strings for the next session. -set historylog - -## Scroll the buffer contents per half-screen instead of per line. -# set jumpyscrolling - -## Display line numbers to the left of the text area. -set linenumbers - -## Enable vim-style lock-files. -set locking - -## Don't display the helpful shortcut lists at the bottom of the screen. -set nohelp - -## Don't add newlines to the ends of files. -# set nonewlines - -## Do quick statusbar blanking. -set quickblank - -## Do extended regular expression searches by default. -# set regexp - -## Make the Home key smarter. -set smarthome - -## Enable soft line wrapping (AKA full-line display). -# set softwrap - -## Use this spelling checker instead of the internal one. -set speller "aspell -x -c" - -## Allow nano to be suspended. -set suspendable - -## When justifying text, trailing whitespace will automatically be removed. -set trimblanks - -## The two characters used to indicate the presence of tabs and spaces. -set whitespace »· - -## Detect word boundaries more accurately by treating punctuation -## characters as parts of words. -# set wordbounds - -## Let an unmodified Backspace or Delete erase the marked region, without affecting the cut-buffer. -# set zap - - -## Paint the interface elements of nano. -## This is an example; by default there are no colors. -set errorcolor brightwhite,red -set functioncolor magenta -set keycolor brightwhite -set numbercolor brightwhite,magenta -set selectedcolor brightwhite,blue -set statuscolor brightwhite,magenta -set stripecolor brightblue -set titlecolor brightwhite,magenta - - -## Include all existing syntax highlight definitions. -include "/usr/share/nano/*.nanorc" - - -## Key bindings. -## The following five functions are not bound to any key by default. -## You may wish to choose different keys than the ones suggested here. -# bind ^S savefile main -# bind M-Q findprevious main -# bind M-W findnext main -# bind M-B cutwordleft main -# bind M-N cutwordright main -## Set this if your Backspace key sends Del most of the time. -# bind Del backspace all diff --git a/.nanorc-5.2 b/.nanorc-5.2 deleted file mode 100644 index 51300c3..0000000 --- a/.nanorc-5.2 +++ /dev/null @@ -1,118 +0,0 @@ -## Sample initialization file for GNU nano. -## -## Please note that you must have configured nano with --enable-nanorc -## for this file to be read! Also note that this file should not be in -## DOS or Mac format, and that characters specially interpreted by the -## shell should not be escaped here. -## -## To make sure an option is disabled, use "unset