diff options
| author | mail_redacted_for_web | 2022-03-19 19:27:36 +0100 | 
|---|---|---|
| committer | mail_redacted_for_web | 2022-03-19 19:27:36 +0100 | 
| commit | 53b55b4b10ef6344a882402d5dcaf11d87b78d3f (patch) | |
| tree | a4c8f2248fe0ef17d2c7cd98a62adfc5f0a2a7ca | |
| download | dotfiles-53b55b4b10ef6344a882402d5dcaf11d87b78d3f.tar.bz2 | |
Initial commit
| -rw-r--r-- | .bash/aliases.bash | 154 | ||||
| -rw-r--r-- | .bash/exec.bash | 10 | ||||
| -rw-r--r-- | .bash/prompt.bash | 129 | ||||
| -rw-r--r-- | .bash/vars.bash | 73 | ||||
| -rw-r--r-- | .bash_profile | 11 | ||||
| -rw-r--r-- | .bashrc | 43 | ||||
| -rw-r--r-- | .flake8 | 11 | ||||
| -rw-r--r-- | .forbidden_modules | 2 | ||||
| -rw-r--r-- | .gitconfig | 74 | ||||
| -rw-r--r-- | .gitignore | 20 | ||||
| -rw-r--r-- | .gitmodules | 6 | ||||
| -rw-r--r-- | .perlcriticrc | 12 | ||||
| -rw-r--r-- | .profile | 13 | ||||
| -rw-r--r-- | .pylintrc | 7 | ||||
| l--------- | .tmux.conf | 1 | ||||
| -rw-r--r-- | .tmux.conf.local | 439 | ||||
| -rw-r--r-- | README.md | 13 | ||||
| -rwxr-xr-x | bin/ssh-agent-launcher | 48 | ||||
| -rwxr-xr-x | bin/sxs | 35 | ||||
| m--------- | tmux-gpakosz | 0 | ||||
| m--------- | tmux-yank | 0 | 
21 files changed, 1101 insertions, 0 deletions
| diff --git a/.bash/aliases.bash b/.bash/aliases.bash new file mode 100644 index 0000000..de3d616 --- /dev/null +++ b/.bash/aliases.bash @@ -0,0 +1,154 @@ +#!/usr/bin/env bash +# vim:syntax=sh + +# This file actually has aliases _and_ functions. + +if [ "$TERM" != "dumb" ];then +	eval "$(dircolors -b)" +	alias ls="ls --color=auto" +	alias grep="grep --color=auto" +	alias egrep="egrep --color=auto" +fi +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' +command -v colordiff >/dev/null 2>&1&&alias diff="colordiff" +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 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)"' +# ----- CHOO CHOO ----- # +if command -v sl >/dev/null;then +	alias sl='sl -e' +	alias LS='LS -e' +fi +# ----- LIBVIRT ----- # +alias vl="virsh list --all --title" +alias vnl="virsh net-list --all" +# shellcheck disable=SC2154 +alias vifl='for i in $(virsh list --name --all);do echo $i;virsh domiflist $i;done' +# shellcheck disable=SC2154 +alias vifl='for i in $(virsh list --name --all);do echo $i;virsh domiflist $i;done' +alias v='vnl;vl;vifl' +# ----- BYOBU/TMUX ----- # +alias ba='byobu has -t "$BSNAME" >/dev/null 2>&1 &&byobu list-sessions&&sleep 1&&byobu attach-session -t "$BSNAME"||printf "No session called %b!\\n" "$BSNAME"' +alias bl="byobu list-sessions" +alias bo="byobu list-sessions \; list-windows" +alias tc='tmux save-buffer -|xclip -i&&echo "tmux buffer copied"' +# ----- NETWORK ----- # +alias openports='ss --all --numeric --processes --ipv4 --ipv6' +alias myip4='curl -k "https://diagnostic.opendns.com/myip"' +alias myip6='curl -6 "https://icanhazip.com"' +# ----- MEDIA ----- # +alias dvdb='dvdbackup -i /dev/dvd1 -M' +alias dvdburn='brasero' +alias dosbox='export SDL_VIDEO_X11_DGAMOUSE=0;dosbox;unset SDL_VIDEO_X11_DGAMOUSE' +alias mdf2iso="iat" +alias bin2iso="iat" +alias replaygain='mp3gain -s i' +alias jackdrc="/usr/bin/jackd -T -u -dalsa -r48000 -p1024 -n2 -D -Chw:CODEC &>/dev/null &" +alias html2png="cutycapt" +# ----- WM ----- # +alias startgnome="sxs gnome" +alias startkde="sxs kde" +alias starte16="sxs e16" +alias startxmonad="sxs xmonad" +# ----- SSH ----- # +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' +# ----- FS ----- # +xstat() { +	for target in "${@}";do +		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 +} +# ----- GRAFANA ----- # +if command -v grafana-cli >/dev/null;then +	alias gfpi='sudo grafana-cli plugins install' +	alias gfpl='sudo grafana-cli plugins list' +	alias gfplr='sudo grafana-cli plugins list-remote' +	alias gfrs="sudo systemctl restart grafana-server.service;systemctl is-active grafana-server.service;sudo ss -pantl|grep :3000" +fi +alias gfs="systemctl is-active grafana-server.service&&sudo ss -pantl|grep :3000" +# ----- ZE PASSWORDS ----- # +if [ -r "/etc/os-release" ];then +	osid="$(grep ^ID /etc/os-release|awk -F= '{print $2}'|tail -n1)" +	case "$osid" in +		fedora|centos|rhel*) +			alias mkpsk="makepasswd -c '1234567890abcdef' -l 64" +			alias mkpw="makepasswd -c 'qwertzuiopasdfghjkyxcvbnmQWERTZUPASDFGHJKLYXCVBNM23456789#!_' -l 24" +		;; +		*suse*) +			alias mkpsk="mimimi :(" +			alias mkpw="mimimi :(" +		;; +		*) +			alias mkpsk="makepasswd --string='1234567890abcdef' --chars='64'" +			alias mkpw="makepasswd --string='qwertzuiopasdfghjkyxcvbnmQWERTZUPASDFGHJKLYXCVBNM23456789#!_' --chars='24'" +		;; +	esac +	unset osid +fi +# ----- GPG -----# +alias gpg='gpg --expert' +gpg-expmaster() { +	FRETVAL=0 +	HELPTXT="Exports all secrets to master file\nUSAGE:\t${FUNCNAME[0]} outputfile key-id" +	[ -z "$1" ]&&echo -e "$HELPTXT"&&FRETVAL=$((FRETVAL+1))||\ +	[ -z "$2" ]&&echo -e "$HELPTXT"&&FRETVAL=$((FRETVAL+1))||\ +	gpg2 --armour --output "$1" --export-secret-key "$2"||FRETVAL=$((FRETVAL+1)) +	return "$FRETVAL" +} +gpg-exppaper() { +	FRETVAL=0 +	HELPTXT="Exports all secrets to paper\nUSAGE:\t${FUNCNAME[0]} key-id" +	[ -z "$1" ]&&echo -e "$HELPTXT"&&FRETVAL=$((FRETVAL+1))||\ +	gpg2 --export-secret-key "$1"|paperkey|lpr||FRETVAL=$((FRETVAL+1)) +	return "$FRETVAL" +} +gpg-removekey() { +	FRETVAL=0 +	HELPTXT="Removes a key ID from keystore\nUSAGE:\t${FUNCNAME[0]} key-id" +	[ -z "$1" ]&&echo -e "$HELPTXT"&&FRETVAL=$((FRETVAL+1))||\ +	gpg-connect-agent "DELETE_KEY $1" /bye||FRETVAL=$((FRETVAL+1)) +	return "$FRETVAL" +} +# ----- CERTIFICATES ----- # +alias certmgr='certutil -d sql:${HOME:?}/.pki/nssdb' +alias certlist="certmgr -L" +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' +# ----- CONTAINERS ----- # +if command -v podman >/dev/null;then +	alias pcl="podman container list" +	alias pclj="podman container list --format json" +	alias pnl="podman network ls" +	alias ppl="podman pod list" +	alias pplj="podman pod list --format json" +	alias pvl="podman volume list" +	alias pvlj="podman volume list --format json" +	alias pci="podman container inspect" +	alias pni="podman network inspect" +	alias ppi="podman pod inspect" +	alias pvi="podman volume inspect" +	alias pcr="podman container rm" +	alias pnr="podman network rm" +	alias ppr="podman pod rm" +	alias pvr="podman volume rm" +	alias pcs="podman container start" +	alias pnc="podman network connect" +	alias pps="podman pod start" +	# d=destroy, kvm's term for "stop vigorously" :-) +	alias pcd="podman container stop" +	alias pnd="podman network disconnect" +	alias ppd="podman pod stop" +fi diff --git a/.bash/exec.bash b/.bash/exec.bash new file mode 100644 index 0000000..cabf2d8 --- /dev/null +++ b/.bash/exec.bash @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +# vim:syntax=sh +# check the window size after each command and, if necessary, +# update the values of LINES and COLUMNS. +shopt -s checkwinsize +set bell-style visible + +# because on some hosts the login path is fucked, unset in .local +# if it causes irritation: +cd ~ || cd || exit 151 diff --git a/.bash/prompt.bash b/.bash/prompt.bash new file mode 100644 index 0000000..a78f2ed --- /dev/null +++ b/.bash/prompt.bash @@ -0,0 +1,129 @@ +#!/usr/bin/env bash +# vim:syntax=sh:ts=4 + +# ----- PROMPT COLOURS ----- # +fgcolor () { +	#echo "\\[\\033[38;5;"$1"m\\]" +	echo "\033[38;5;${1}m" +} +bgcolor () { +	#echo "\\[\\033[48;5;"$1"m\\]" +	echo "\033[48;5;${1}m" +} +#  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 :) +case "$MYUID" in +	0) +		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";; +			# 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";; +		esac +	;; +	*) +		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";; +		esac +	;; +esac +# make it possible to draw user-defined colours +# shellcheck disable=SC1090 +[ -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)" + +# ----- ASSEMBLE THE PROMPT COMMAND ADDITION ----- # +__prompt_command() { +	local EXIT="$?" +	if [ "$EXIT" -lt 10 ];then +		local EXIT2="00$EXIT" +	elif [ "$EXIT" -lt 100 ];then +		local EXIT2="0$EXIT" +	else +		local EXIT2="$EXIT" +	fi +	case "$MYUID" in +		0) +			PS1="\\# \[$(tput bold)\]\[$($FGC1)\]\\u\[$($FGC2)\]@$PHN \[$($FGC3)\]\\w \[$(tput sgr0)\]" +		;; +		*) +			PS1="\\# \[$(tput bold)\]\[$($FGC1)\]\t \[$($FGC2)\]\\u$UHSEP\[$($FGC3)\]$PHN \\w \[$(tput sgr0)\]" +		;; +	esac +	if command -v __git_ps1 >/dev/null 2>&1;then PS1+="$(__git_ps1 "%s ")";fi +	if [ "$EXIT" -eq 0 ];then +		PS1+="\[\033[0;32m\]# " +	elif [ "$EXIT" -eq 255 ]||[ "$EXIT" -eq 127 ];then +		PS1+="\[\033[0;33m\]$EXIT2 # " +	elif [ "$EXIT" -eq 130 ];then +		 PS1+="\[\033[0;35m\]$EXIT2 # " +	else +		PS1+="\[\033[0;31m\]$EXIT2 # " +	fi +	PS1+="\[\033[0m\]" +} + +# ----- ADD __prompt_command() TO $PROMPT_COMMAND ----- # +if ! printf "%b" "$PROMPT_COMMAND" | grep '__prompt_command' >/dev/null;then +	case "$TERM" in +		# adding in "screen" because tmux +		xterm|xterm-color|xterm-256color|rxvt*|screen-256color|screen) +			if [ -n "$PROMPT_COMMAND" ];then +				export PROMPT_COMMAND="__prompt_command;${PROMPT_COMMAND}" +			else +				export PROMPT_COMMAND="__prompt_command" +			fi +		;; +		*) +			if [ -n "$PROMPT_COMMAND" ];then +				export PROMPT_COMMAND="__prompt_command;${PROMPT_COMMAND}" +			else +				export PROMPT_COMMAND="__prompt_command" +			fi +		;; +	esac +fi +# ----- ADD SSH ENV FILE TO PROMPT_COMMAND ----- # +if [ -r "$SSHENVFILE" ];then +	if ! printf "%b" "$PROMPT_COMMAND" | grep "source $SSHENVFILE" >/dev/null;then +		# we don't need to check whether PROMPT_COMMAND is set as after the paragraph +		# above, something will be definitely set. +		PROMPT_COMMAND="${PROMPT_COMMAND};source $SSHENVFILE" +	fi +fi +# ----- HISTORY SUBMISSION IN $PROMPT_COMMAND ----- # +if ! printf "%b" "$PROMPT_COMMAND"|grep 'history -a' >/dev/null;then +	if [ -n "$PROMPT_COMMAND" ];then +		export PROMPT_COMMAND="$PROMPT_COMMAND;history -a;history -c;history -r" +	else +		export PROMPT_COMMAND="history -a;history -c;history -r" +	fi +fi diff --git a/.bash/vars.bash b/.bash/vars.bash new file mode 100644 index 0000000..dddc831 --- /dev/null +++ b/.bash/vars.bash @@ -0,0 +1,73 @@ +#!/usr/bin/env bash +# vim:syntax=sh + +# default Byobu session name +export BSNAME="CHANGEME" +# default screenshot target. Feel free to override in .local. +export SCRSHDIR="${HOME}/Pictures" +# variable for SSH environment file +export SSHENVFILE="${HOME}/.ssh/sshenv" + +# ----- 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}" +	fi +done +# $OSNAME +if [ -r "/etc/os-release" ];then +    OSNAME="$(grep ^ID /etc/os-release|awk -F= '{print $NF}'|head -n1)" +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" +    [ -z "$OSNAME" ]&&OSNAME="obsolete" +elif [ -r "/etc/SuSE-release" ];then +    OSNAME="oldsuse" +elif [ -r "/etc/release" ];then +    head -n1 /etc/release 2> /dev/null|grep -i solaris > /dev/null && OSNAME="solaris" +    [ -z "$OSNAME" ]&&OSNAME="obsolete" +else +	[ "$(oslevel -s >/dev/null 2>&1|wc -l)" -gt 0 ]&&OSNAME="aix" +    [ -z "$OSNAME" ]&&OSNAME="obsolete" +fi +declare -x GPG_TTY +GPG_TTY="$(tty)" +export e='2.718281828459045' +if command -v bc >/dev/null;then +	declare -x pi +	pi="$(echo "scale=64; 4*a(1)" | bc -l)" +fi + +# ----- GIT ----- # +# git on the command line +export GIT_PS1_SHOWDIRTYSTATE=1 +export GIT_PS1_SHOWSTASHSTATE=1 +export GIT_PS1_SHOWUNTRACKEDFILES=1 + +# ----- LESS FOR EVERYTHING ----- # +if command -v less >/dev/null;then +	# coloured mapages +	export LESS_TERMCAP_mb=$'\E[01;31m' +	export LESS_TERMCAP_md=$'\E[01;31m' +	export LESS_TERMCAP_me=$'\E[0m' +	export LESS_TERMCAP_se=$'\E[0m' +	export LESS_TERMCAP_so=$'\E[01;44;33m' +	export LESS_TERMCAP_ue=$'\E[0m' +	export LESS_TERMCAP_us=$'\E[01;32m' +	# make less more friendly for non-text input files, see lesspipe(1) +	[ -x /usr/bin/lesspipe ] && eval "$(lesspipe)" +	export SYSTEMD_PAGER="less" +	export LESSANSIENDCHARS="m" +	export LESSANSIMIDCHARS="0123456789:;[?!\"'#%()*+ " +fi +# ----- MISC ----- # +# nopaste +export NOPASTE_SERVICES='pastebin nopaste' +export NOPASTE_NICK='CHANGEME' +# libvirt +export LIBVIRT_DEFAULT_URI="qemu:///system" +# set variable identifying the chroot you work in (used in the prompt below) +if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then +    debian_chroot=$(cat /etc/debian_chroot) +fi diff --git a/.bash_profile b/.bash_profile new file mode 100644 index 0000000..126f880 --- /dev/null +++ b/.bash_profile @@ -0,0 +1,11 @@ +# .bash_profile + +# Set umask to something world-unreadable in any case +umask 027 + +# Get the aliases and functions +if [ -f ~/.bashrc ]; then +	. ~/.bashrc +fi + +# User specific environment and startup programs @@ -0,0 +1,43 @@ +#!/usr/bin/env bash +# vim:syntax=sh +# .bash main folder. also required in .bash/prompt.sh. +export BBD="${HOME}/.bash" + +# If not running interactively, don't do anything +[ -z "$PS1" ] && return +# don't put duplicate lines in the history. See bash(1) for more options +export HISTCONTROL=ignoredups +# If the sysadmins do not care about history timestamps, let us do that: +[ -z "$HISTTIMEFORMAT" ] && export HISTTIMEFORMAT="%F %T " +# same philosophy, other history settings: +[ -z "$HISTSIZE" ] && export HISTSIZE=10240 +[ -z "$HISTCONTROL" ] && export HISTCONTROL=ignoredups +# stuff before $BBD +# shellcheck disable=SC1090 +[ -r "${HOME}/.byobu/prompt" ] && source "${HOME}/.byobu/prompt" +# shellcheck disable=SC1091 +[ -r "/usr/share/bash-completion/bash_completion" ] && source "/usr/share/bash-completion/bash_completion" + +# The above is absolutely mandatory imho. Now for the rest. +# Do we have our base directory? +[ ! -x "$BBD" ] && return +MYKERN="$(uname -s)" +for i in vars aliases exec prompt;do +	# shellcheck disable=SC1090 +	if [ -r "${BBD}/${i}.bash" ];then +		source "${BBD}/${i}.bash" +	else true +	fi +	if [ "$MYKERN" == "Linux" ];then +		# shellcheck disable=SC1090 +		if [ -r "${BBD}/${i}.linux.bash" ];then +			source "${BBD}/${i}.linux.bash" +		else true +		fi +	fi +	# shellcheck disable=SC1090 +	if [ -r "${BBD}/${i}.bash.local" ];then +		source "${BBD}/${i}.bash.local" +	else true +	fi +done @@ -0,0 +1,11 @@ +# vim:syntax=dosini +[flake8] +count = True # Ausgeben der Gesamt-Fehleranzahl +# show-source = True +# W191: tabs instead of spaces (screw you!), E401: multiple imports on a single line +ignore = W191,E401 +max-line-length = 100 +# Do test for docstrings. Laziness sucks. +doctests = True +# use only if flake8-colors is installed: +format = format = ${cyan}%(path)s${reset}:${yellow_bold}%(row)d${reset}:${green_bold}%(col)d${reset}: ${red_bold}%(code)s${reset} %(text)s diff --git a/.forbidden_modules b/.forbidden_modules new file mode 100644 index 0000000..4f95ba0 --- /dev/null +++ b/.forbidden_modules @@ -0,0 +1,2 @@ +Switch           Use if, elsif instead of the deprecated Switch module +Fatal            Use autodie instead of Fatal diff --git a/.gitconfig b/.gitconfig new file mode 100644 index 0000000..831bc32 --- /dev/null +++ b/.gitconfig @@ -0,0 +1,74 @@ +[color] +	diff	= auto +	status	= auto +	branch	= auto +	ui		= auto +# To determine user and GPG key ID, we source this file: +[include] +	path	= ~/.gitconfig.local +# ...with the following content: +## vim:syntax=gitconfig +#[user] +#	name		= John McDoe III +#	email		= fekyourspam@example.com +#	signingkey	= 1FEDBEEFC0DEDBAD +[log] +	date	= iso +[alias] +	st		= status +	lg		= log -p +	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 +	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 +	cb		= checkout --track +	co		= checkout +	cob		= checkout -b +	c		= commit --verbose +	ca		= commit --verbose --all +	s		= status --short +	l		= log --color --graph --pretty=format:'%C(auto)%h %G? %d %s%Creset' +	gi		= init --bare +	gs		= init --bare --shared +	aa		= add --all --verbose +	ap		= add -p +	up		= pull --rebase=preserve +	fa		= fetch --all --verbose +	gr		= grep --break --heading --line-number +	d		= diff +	ds		= diff --stat +	dc		= diff --cached +	la		= "!git config -l|grep alias|cut -c 7-|sort|sed \"s/^\\([^=]\\+\\)=/\\1€/g\"|sed \"s|€/|@/|g;s|ts€|ts@|g;s|^la.*|la€<scrambled output, call git-alias>|g\"|column -ts€" +	alias	= "!git config -l|grep alias|cut -c 7-|sort" +	cs		= "!GPG_TTY=$(tty) git commit -S --verbose" +	csa		= "!GPG_TTY=$(tty) git commit -S --verbose --all" +	csp		= "!GPG_TTY=$(tty) git commit -S -pv" +	tag		= "!GPG_TTY=$(tty) git tag -s" +	tty		= "!export GPG_TTY=$(tty)" +	puv		= push --verbose +	puff	= "!git puv" +	pl		= pull -tpf +	p		= pull -tpf +	branchpull = remote update origin --prune +	branchremdel = push origin --delete +	ba		= branch --list --all +[push] +	default	= simple +[core] +	editor	= vim +	fileMode = true +[merge] +	tool	= vimdiff +[mergetool] +	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 +[commit] +	gpgSign	= true +#[gpg] +#	program	= /usr/bin/gpg2 +[http] +	#proxy	= http://10.0.0.1:3128/ diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b858474 --- /dev/null +++ b/.gitignore @@ -0,0 +1,20 @@ +* +!/.gitignore +!/.gitmodules +!/.bashrc +!/.bash_profile +!/.bash +/.bash/* +!/.bash/*bash +!/bin +!/bin/* +!/.flake8 +!/.forbidden_modules +!/.gitconfig +!/.perlcriticrc +!/.profile +!/.pylintrc +!/README.md +!/tmux-gpakosz +!/tmux-yank +!/.tmux.conf* diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..f595963 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,6 @@ +[submodule "tmux-gpakosz"] +	path = tmux-gpakosz +	url = https://github.com/gpakosz/.tmux +[submodule "tmux-yank"] +	path = tmux-yank +	url = https://github.com/tmux-plugins/tmux-yank diff --git a/.perlcriticrc b/.perlcriticrc new file mode 100644 index 0000000..9d8fe76 --- /dev/null +++ b/.perlcriticrc @@ -0,0 +1,12 @@ +# vim:syntax=dosini +severity = 5 +#verbose = 11 +#verbose = %f: [%p] %m at line %l, column %c.\n%d\n +verbose = %f: [%p] %m at line %l, column %c.\n +theme = core + +[TestingAndDebugging::RequireUseWarnings] +severity = 5 + +[Modules::ProhibitEvilModules] +modules_file = .forbidden_modules diff --git a/.profile b/.profile new file mode 100644 index 0000000..e96906d --- /dev/null +++ b/.profile @@ -0,0 +1,13 @@ +# Expectation: .bash_profile exists then this file isn't read at all. +# Reality: well... .profile not being looked at at all _can_ happen. + +# Set umask to something world-unreadable in any case +umask 027 + +# include .bash_profile - if we arrived here at all, it's important to do :-) +if [ -n "$BASH_VERSION" ]; then +	# include .bashrc if it exists +	if [ -f "$HOME/.bash_profile" ]; then +		. "$HOME/.bash_profile" +	fi +fi diff --git a/.pylintrc b/.pylintrc new file mode 100644 index 0000000..d66e5a2 --- /dev/null +++ b/.pylintrc @@ -0,0 +1,7 @@ +# vim:syntax=dosini +[MASTER] +jobs=2 + +[FORMAT] +indent-string='\t' +max-line-length=100 diff --git a/.tmux.conf b/.tmux.conf new file mode 120000 index 0000000..b73d733 --- /dev/null +++ b/.tmux.conf @@ -0,0 +1 @@ +tmux-gpakosz/.tmux.conf
\ No newline at end of file diff --git a/.tmux.conf.local b/.tmux.conf.local new file mode 100644 index 0000000..b6b0f3d --- /dev/null +++ b/.tmux.conf.local @@ -0,0 +1,439 @@ +# vim:syntax=tmux +# Procedure: +# 1. Disabling Gregory's vi-copy-mode and instead using tmux-yank. The latter covers all +#    specialties e.g. WSL on hosts where your employer or customer forces you to use an OS +#    not desihned for IT work +# 2. Style borders +# 3. Assign keys +# 4. Better colours + +# -- navigation ---------------------------------------------------------------- + +# if you're running tmux within iTerm2 +#   - and tmux is 1.9 or 1.9a +#   - and iTerm2 is configured to let option key act as +Esc +#   - and iTerm2 is configured to send [1;9A -> [1;9D for option + arrow keys +# then uncomment the following line to make Meta + arrow keys mapping work +#set -ga terminal-overrides "*:kUP3=\e[1;9A,*:kDN3=\e[1;9B,*:kRIT3=\e[1;9C,*:kLFT3=\e[1;9D" + + +# -- windows & pane creation --------------------------------------------------- + +# new window retains current path, possible values are: +#   - true +#   - false (default) +tmux_conf_new_window_retain_current_path=false + +# new pane retains current path, possible values are: +#   - true (default) +#   - false +tmux_conf_new_pane_retain_current_path=true + +# new pane tries to reconnect ssh sessions (experimental), possible values are: +#   - true +#   - false (default) +tmux_conf_new_pane_reconnect_ssh=false + +# prompt for session name when creating a new session, possible values are: +#   - true +#   - false (default) +tmux_conf_new_session_prompt=false + + +# -- display ------------------------------------------------------------------- + +# RGB 24-bit colour support (tmux >= 2.2), possible values are: +#  - true +#  - false (default) +tmux_conf_24b_colour=false + +# default theme +tmux_conf_theme_colour_1="#080808"    # dark gray +tmux_conf_theme_colour_2="#303030"    # gray +tmux_conf_theme_colour_3="#8a8a8a"    # light gray +tmux_conf_theme_colour_4="#00afff"    # light blue +tmux_conf_theme_colour_5="#ffff00"    # yellow +tmux_conf_theme_colour_6="#080808"    # dark gray +tmux_conf_theme_colour_7="#e4e4e4"    # white +tmux_conf_theme_colour_8="#080808"    # dark gray +tmux_conf_theme_colour_9="#ffff00"    # yellow +tmux_conf_theme_colour_10="#ff00af"   # pink +tmux_conf_theme_colour_11="#5fff00"   # green +tmux_conf_theme_colour_12="#8a8a8a"   # light gray +tmux_conf_theme_colour_13="#e4e4e4"   # white +tmux_conf_theme_colour_14="#080808"   # dark gray +tmux_conf_theme_colour_15="#080808"   # dark gray +tmux_conf_theme_colour_16="#d70000"   # red +tmux_conf_theme_colour_17="#e4e4e4"   # white +tmux_conf_theme_colour_18="#0087d7"   # custom blue 1 +tmux_conf_theme_colour_19="#444444"   # custom grey 1 + +# window style +tmux_conf_theme_window_fg="default" +tmux_conf_theme_window_bg="default" + +# highlight focused pane (tmux >= 2.1), possible values are: +#   - true +#   - false (default) +tmux_conf_theme_highlight_focused_pane=false + +# focused pane colours: +tmux_conf_theme_focused_pane_bg="$tmux_conf_theme_colour_18" + +# pane border style, possible values are: +#   - thin (default) +#   - fat +tmux_conf_theme_pane_border_style=thin + +# pane borders colours: +tmux_conf_theme_pane_border="$tmux_conf_theme_colour_19" +tmux_conf_theme_pane_active_border="$tmux_conf_theme_colour_4" + +# pane indicator colours (when you hit <prefix> + q) +tmux_conf_theme_pane_indicator="$tmux_conf_theme_colour_4" +tmux_conf_theme_pane_active_indicator="$tmux_conf_theme_colour_4" + +# status line style +tmux_conf_theme_message_fg="$tmux_conf_theme_colour_1" +tmux_conf_theme_message_bg="$tmux_conf_theme_colour_5" +tmux_conf_theme_message_attr="bold" + +# status line command style (<prefix> : Escape) +tmux_conf_theme_message_command_fg="$tmux_conf_theme_colour_5" +tmux_conf_theme_message_command_bg="$tmux_conf_theme_colour_1" +tmux_conf_theme_message_command_attr="bold" + +# window modes style +tmux_conf_theme_mode_fg="$tmux_conf_theme_colour_1" +tmux_conf_theme_mode_bg="$tmux_conf_theme_colour_5" +tmux_conf_theme_mode_attr="bold" + +# status line style +tmux_conf_theme_status_fg="$tmux_conf_theme_colour_3" +tmux_conf_theme_status_bg="$tmux_conf_theme_colour_1" +tmux_conf_theme_status_attr="none" + +# terminal title +#   - built-in variables are: +#     - #{circled_window_index} +#     - #{circled_session_name} +#     - #{hostname} +#     - #{hostname_ssh} +#     - #{hostname_full} +#     - #{hostname_full_ssh} +#     - #{username} +#     - #{username_ssh} +tmux_conf_theme_terminal_title="#h ❐ #S ● #I #W" + +# window status style +#   - built-in variables are: +#     - #{circled_window_index} +#     - #{circled_session_name} +#     - #{hostname} +#     - #{hostname_ssh} +#     - #{hostname_full} +#     - #{hostname_full_ssh} +#     - #{username} +#     - #{username_ssh} +tmux_conf_theme_window_status_fg="$tmux_conf_theme_colour_3" +tmux_conf_theme_window_status_bg="$tmux_conf_theme_colour_1" +tmux_conf_theme_window_status_attr="none" +tmux_conf_theme_window_status_format="#I #W" +#tmux_conf_theme_window_status_format="#{circled_window_index} #W" +#tmux_conf_theme_window_status_format="#I #W#{?window_bell_flag,🔔,}#{?window_zoomed_flag,🔍,}" + +# window current status style +#   - built-in variables are: +#     - #{circled_window_index} +#     - #{circled_session_name} +#     - #{hostname} +#     - #{hostname_ssh} +#     - #{hostname_full} +#     - #{hostname_full_ssh} +#     - #{username} +#     - #{username_ssh} +tmux_conf_theme_window_status_current_fg="$tmux_conf_theme_colour_1" +tmux_conf_theme_window_status_current_bg="$tmux_conf_theme_colour_4" +tmux_conf_theme_window_status_current_attr="bold" +tmux_conf_theme_window_status_current_format="#I #W" +#tmux_conf_theme_window_status_current_format="#{circled_window_index} #W" +#tmux_conf_theme_window_status_current_format="#I #W#{?window_zoomed_flag,🔍,}" + +# window activity status style +tmux_conf_theme_window_status_activity_fg="default" +tmux_conf_theme_window_status_activity_bg="default" +tmux_conf_theme_window_status_activity_attr="underscore" + +# window bell status style +tmux_conf_theme_window_status_bell_fg="$tmux_conf_theme_colour_5" +tmux_conf_theme_window_status_bell_bg="default" +tmux_conf_theme_window_status_bell_attr="blink,bold" + +# window last status style +tmux_conf_theme_window_status_last_fg="$tmux_conf_theme_colour_4" +tmux_conf_theme_window_status_last_bg="$tmux_conf_theme_colour_2" +tmux_conf_theme_window_status_last_attr="none" + +# status left/right sections separators +tmux_conf_theme_left_separator_main="" +tmux_conf_theme_left_separator_sub="|" +tmux_conf_theme_right_separator_main="" +tmux_conf_theme_right_separator_sub="|" +#tmux_conf_theme_left_separator_main='\uE0B0'  # /!\ you don't need to install Powerline +#tmux_conf_theme_left_separator_sub='\uE0B1'   #   you only need fonts patched with +#tmux_conf_theme_right_separator_main='\uE0B2' #   Powerline symbols or the standalone +#tmux_conf_theme_right_separator_sub='\uE0B3'  #   PowerlineSymbols.otf font, see README.md + +# status left/right content: +#   - separate main sections with "|" +#   - separate subsections with "," +#   - built-in variables are: +#     - #{battery_bar} +#     - #{battery_hbar} +#     - #{battery_percentage} +#     - #{battery_status} +#     - #{battery_vbar} +#     - #{circled_session_name} +#     - #{hostname_ssh} +#     - #{hostname} +#     - #{hostname_full} +#     - #{hostname_full_ssh} +#     - #{loadavg} +#     - #{mouse} +#     - #{pairing} +#     - #{prefix} +#     - #{root} +#     - #{synchronized} +#     - #{uptime_y} +#     - #{uptime_d} (modulo 365 when #{uptime_y} is used) +#     - #{uptime_h} +#     - #{uptime_m} +#     - #{uptime_s} +#     - #{username} +#     - #{username_ssh} +tmux_conf_theme_status_left=" ❐ #S | ↑#{?uptime_y, #{uptime_y}y,}#{?uptime_d, #{uptime_d}d,}#{?uptime_h, #{uptime_h}h,}#{?uptime_m, #{uptime_m}m,} " +tmux_conf_theme_status_right=" #{prefix}#{mouse}#{pairing}#{synchronized}#{?battery_status,#{battery_status},}#{?battery_bar, #{battery_bar},}#{?battery_percentage, #{battery_percentage},} , %R , %d %b | #{username}#{root} | #{hostname} " + +# status left style +tmux_conf_theme_status_left_fg="$tmux_conf_theme_colour_6,$tmux_conf_theme_colour_7,$tmux_conf_theme_colour_8" +tmux_conf_theme_status_left_bg="$tmux_conf_theme_colour_9,$tmux_conf_theme_colour_10,$tmux_conf_theme_colour_11" +tmux_conf_theme_status_left_attr="bold,none,none" + +# status right style +tmux_conf_theme_status_right_fg="$tmux_conf_theme_colour_12,$tmux_conf_theme_colour_13,$tmux_conf_theme_colour_14" +tmux_conf_theme_status_right_bg="$tmux_conf_theme_colour_15,$tmux_conf_theme_colour_16,$tmux_conf_theme_colour_17" +tmux_conf_theme_status_right_attr="none,none,bold" + +# pairing indicator +tmux_conf_theme_pairing="⚇"                 # U+2687 +tmux_conf_theme_pairing_fg="none" +tmux_conf_theme_pairing_bg="none" +tmux_conf_theme_pairing_attr="none" + +# prefix indicator +tmux_conf_theme_prefix="⌨"                  # U+2328 +tmux_conf_theme_prefix_fg="none" +tmux_conf_theme_prefix_bg="none" +tmux_conf_theme_prefix_attr="none" + +# mouse indicator +tmux_conf_theme_mouse="↗"                   # U+2197 +tmux_conf_theme_mouse_fg="none" +tmux_conf_theme_mouse_bg="none" +tmux_conf_theme_mouse_attr="none" + +# root indicator +tmux_conf_theme_root="!" +tmux_conf_theme_root_fg="none" +tmux_conf_theme_root_bg="none" +tmux_conf_theme_root_attr="bold,blink" + +# synchronized indicator +tmux_conf_theme_synchronized="⚏"            # U+268F +tmux_conf_theme_synchronized_fg="none" +tmux_conf_theme_synchronized_bg="none" +tmux_conf_theme_synchronized_attr="none" + +# battery bar symbols +tmux_conf_battery_bar_symbol_full="◼" +tmux_conf_battery_bar_symbol_empty="◻" +#tmux_conf_battery_bar_symbol_full="♥" +#tmux_conf_battery_bar_symbol_empty="·" + +# battery bar length (in number of symbols), possible values are: +#   - auto +#   - a number, e.g. 5 +tmux_conf_battery_bar_length="auto" + +# battery bar palette, possible values are: +#   - gradient (default) +#   - heat +#   - "colour_full_fg,colour_empty_fg,colour_bg" +tmux_conf_battery_bar_palette="gradient" +#tmux_conf_battery_bar_palette="#d70000,#e4e4e4,#000000"   # red, white, black + +# battery hbar palette, possible values are: +#   - gradient (default) +#   - heat +#   - "colour_low,colour_half,colour_full" +tmux_conf_battery_hbar_palette="gradient" +#tmux_conf_battery_hbar_palette="#d70000,#ff5f00,#5fff00"  # red, orange, green + +# battery vbar palette, possible values are: +#   - gradient (default) +#   - heat +#   - "colour_low,colour_half,colour_full" +tmux_conf_battery_vbar_palette="gradient" +#tmux_conf_battery_vbar_palette="#d70000,#ff5f00,#5fff00"  # red, orange, green + +# symbols used to indicate whether battery is charging or discharging +tmux_conf_battery_status_charging="↑"       # U+2191 +tmux_conf_battery_status_discharging="↓"    # U+2193 +#tmux_conf_battery_status_charging="🔌"     # U+1F50C +#tmux_conf_battery_status_discharging="🔋"  # U+1F50B + +# clock style (when you hit <prefix> + t) +# you may want to use %I:%M %p in place of %R in tmux_conf_theme_status_right +tmux_conf_theme_clock_colour="$tmux_conf_theme_colour_4" +tmux_conf_theme_clock_style="24" + + +# -- clipboard ----------------------------------------------------------------- + +# in copy mode, copying selection also copies to the OS clipboard +#   - true +#   - false (default) +# on macOS, this requires installing reattach-to-user-namespace, see README.md +# on Linux, this requires xsel or xclip +tmux_conf_copy_to_os_clipboard=false + + +# -- user customizations ------------------------------------------------------- +# this is the place to override or undo settings + +# increase history size +#set -g history-limit 10000 + +# start with mouse mode enabled +#set -g mouse on + +# force Vi mode +#   really you should export VISUAL or EDITOR environment variable, see manual +#set -g status-keys vi +#set -g mode-keys vi + +# replace C-b by C-a instead of using both prefixes +# set -gu prefix2 +# unbind C-a +# unbind C-b +# set -g prefix C-a +# bind C-a send-prefix + +# move status line to top +#set -g status-position top + + +# -- tpm ----------------------------------------------------------------------- + +# while I don't use tpm myself, many people requested official support so here +# is a seamless integration that automatically installs plugins in parallel + +# whenever a plugin introduces a variable to be used in 'status-left' or +# 'status-right', you can use it in 'tmux_conf_theme_status_left' and +# 'tmux_conf_theme_status_right' variables. + +# by default, launching tmux will update tpm and all plugins +#   - true (default) +#   - false +tmux_conf_update_plugins_on_launch=true + +# by default, reloading the configuration will update tpm and all plugins +#   - true (default) +#   - false +tmux_conf_update_plugins_on_reload=true + +# by default, reloading the configuration will uninstall tpm and plugins when no +# plugins are enabled +#   - true (default) +#   - false +tmux_conf_uninstall_plugins_on_reload=true + +# /!\ the tpm bindings differ slightly from upstream: +#   - installing plugins: <prefix> + I +#   - uninstalling plugins: <prefix> + Alt + u +#   - updating plugins: <prefix> + u + +# /!\ do not add set -g @plugin 'tmux-plugins/tpm' +# /!\ do not add run '~/.tmux/plugins/tpm/tpm' + +# to enable a plugin, use the 'set -g @plugin' syntax: +# visit https://github.com/tmux-plugins for available plugins +#set -g @plugin 'tmux-plugins/tmux-copycat' +#set -g @plugin 'tmux-plugins/tmux-cpu' +#set -g @plugin 'tmux-plugins/tmux-resurrect' +#set -g @plugin 'tmux-plugins/tmux-continuum' +#set -g @continuum-restore 'on' + +set -g status-left ' #[fg=#e0e0e0,bold,bg=#ff883e]□ #S ' +set -g status-right '#{?window_zoomed_flag,@,}# #{?client_prefix,#[bg=#c00000] ⌨   ,}#[fg=#a0a0a0,bg=#404040,bold] ↑ #(uptime-hms) #[fg=#808080,bg=#202020,bold] %Y-%m-%d #[fg=#a0a0a0,bg=#404040,bold] %H:%M:%S ' +bind -n		M-left	previous-window +bind -n		M-right	next-window +bind-key -n	S-Left	swap-window -t -1 +bind-key -n	S-Right	swap-window -t +1 +bind -n		S-Left	display-panes \; select-pane -L +bind -n		S-Right	display-panes \; select-pane -R +bind-key -n	S-Up	display-panes \; select-pane -U +bind-key -n	S-Down	display-panes \; select-pane -D +bind 		_	split-window -h +bind 		|	split-window -v +tmux_pane_active_border_fg='colour45' +tmux_pane_active_border_bg=default +tmux_display_panes_colour='colour45' +set-option -g display-panes-active-colour colour45 +set-option -g display-panes-colour colour8 +set-option -g display-panes-time 500 +set-option -g display-time 1500 +set-option -g clock-mode-colour '#169b62' +set-option -g allow-rename off +tmux_conf_window_status_current_fg='#e0e0e0' +tmux_conf_window_status_current_bg='#169b62' +tmux_conf_window_status_current_attr='bold' +#setw -g window-status-current-format ' #I#[fg=colour249]:#[fg=colour255]#W#[fg=colour249]#F ' +setw -g window-status-current-format ' #[fg=#ff883e]#I#[fg=#e0e0e0]:#[fg=#e0e0e0]#W#[fg=#ff883e]#F ' +bind r source-file ~/.tmux.conf \; source-file ~/.tmux.conf.local \; display-message "$HOME/.tmux.conf reloaded!" +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-option -g display-panes-active-colour colour45 +set-option -g display-panes-colour colour8 +run-shell ~/tmux-yank/yank.tmux + +# -- custom variables ---------------------------------------------------------- + +# to define a custom #{foo} variable, define a POSIX shell function between the +# '# EOF' and the '# "$@"' lines. Please note that the opening brace { character +# must be on the same line as the function name otherwise the parse won't detect +# it. +# +# then, use #{foo} in e.g. the 'tmux_conf_theme_status_left' or the +# 'tmux_conf_theme_status_right' variables. + +# # /!\ do not remove the following line +# EOF +# +# # /!\ do not "uncomment" the functions: the leading "# " characters are needed +# +# weather() { +#   curl -m 1 wttr.in?format=3 2>/dev/null +#   sleep 900 # sleep for 15 minutes, throttle network requests whatever the value of status-interval +# } +# +# online() { +#   ping -c 1 1.1.1.1 >/dev/null 2>&1 && printf '✔' || printf '✘' +# } +# +# "$@" +# # /!\ do not remove the previous line diff --git a/README.md b/README.md new file mode 100644 index 0000000..6728444 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# CONTENT + +Yet another (!) approach at building up a centralized configuration. + +Parts are old, parts are not done yet, we're getting there. + +## To-Dos + +* i3 config / sway config +* gpg config +* game launching stuff +* parallel-ssh and ansible +* ... diff --git a/bin/ssh-agent-launcher b/bin/ssh-agent-launcher new file mode 100755 index 0000000..0d116dc --- /dev/null +++ b/bin/ssh-agent-launcher @@ -0,0 +1,48 @@ +#!/usr/bin/env bash + +if [ -z "$SSHENVFILE" ];then +	printf "SSHENVFILE not set, no target for SSH environment variables.\\n" >&2 +	exit 1 +fi + +VERB=1 +KILLIT=0 +while getopts ":qf" SHOPT;do +	case "$SHOPT" in +		q) VERB=0;; +		f) KILLIT=1;; +		*) printf "WAT\n" >&2;exit 127;; +	esac +done +shift "$(( OPTIND -1 ))" + +[ "$VERB" -eq 1 ]&&printf "[....] Starting SSH agent.\\033[s" +ROEDGROED="$(pgrep -U "$(whoami)" ssh-agent|grep -v grep|awk '{print $1}')" + +if [ -n "$ROEDGROED" ];then +	if [ "$KILLIT" -eq 1 ];then +		for i in $(echo "$ROEDGROED");do kill "$i" >/dev/null 2>&1||break;done +		case "$?" in +			0);; +			*) +				[ "$VERB" -eq 1 ]&&printf "\\033[666D[\\033[31mFAIL\\033[0m]\\033[u\\033[K\\n" +				exit 2 +			;; +		esac +	else +		[ "$VERB" -eq 1 ]&&printf "\\033[666D[\\033[30;1mSKIP\\033[0m]\\033[u\\033[K (running, PID: %s)\\n" "$ROEDGROED" +		exit 0 +	fi +fi +ssh-agent >"$SSHENVFILE" 2>&1&&chmod 0600 "$SSHENVFILE" >/dev/null 2>&1 +case "$?" in +	0) +		sed -i 's/^echo[^\;]*\;//g' "$SSHENVFILE" >/dev/null 2>&1 +		[ "$VERB" -eq 1 ]&&printf "\\033[666D[\\033[32m OK \\033[0m]\\033[u\\033[K\\n" +		exit 0 +	;; +	*) +		[ "$VERB" -eq 1 ]&&printf "\\033[666D[\\033[31mFAIL\\033[0m]\\033[u\\033[K\\n" +		exit 1 +	;; +esac @@ -0,0 +1,35 @@ +#!/bin/bash + +pidof -s xinit && exit 0 + +[ -z "$STXTARG" ] && STXTARG="$1" + +if [ -z "$STXTARG" ];then +	read -p "Start: e16, xmonad, gnome or kde? " STXTARG +	[ -z "$STXTARG" ] && STXTARG="xmonad" +fi + +case "$STXTARG" in +	e16) +		diff ~/.xsession-e16 ~/.xsession &> /dev/null +		[ "$?" -ne 0 ] && ln -sf .xsession-e16 ~/.xsession +	;; +	xmonad) +		diff ~/.xsession-xmonad ~/.xsession &> /dev/null +		[ "$?" -ne 0 ] && ln -sf .xsession-xmonad ~/.xsession +	;; +	gnome) +		diff ~/.xsession-gnome ~/.xsession &> /dev/null +		[ "$?" -ne 0 ] && ln -sf .xsession-gnome ~/.xsession +	;; +	kde) +		diff ~/.xsession-kde ~/.xsession &> /dev/null +		[ "$?" -ne 0 ] && ln -sf .xsession-kde ~/.xsession +	;; +	*) +		echo "Sorry, I don't know $STXTARG as window manager." +		exit 1 +	;; +esac + +startx diff --git a/tmux-gpakosz b/tmux-gpakosz new file mode 160000 +Subproject 9a2387c0c7aa8d12cff06d6be17251e8ebdfd03 diff --git a/tmux-yank b/tmux-yank new file mode 160000 +Subproject 1b1a436e19f095ae8f825243dbe29800a8acd25 | 
