mirror of
				https://gitea.blesmrt.net/mikaela/shell-things.git
				synced 2025-11-04 03:17:34 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			969 lines
		
	
	
		
			31 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			969 lines
		
	
	
		
			31 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env bash
 | 
						|
 | 
						|
# European/standardizedish English for root
 | 
						|
if [[ "$(id -u)" == "0" ]]; then
 | 
						|
	unset LC_ALL
 | 
						|
	unset LANGUAGE
 | 
						|
	export LANG="en_DK.UTF-8"
 | 
						|
	export LC_CTYPE="en_DK.UTF-8"
 | 
						|
	export LC_NUMERIC="en_DK.UTF-8"
 | 
						|
	export LC_TIME="en_DK.UTF-8"
 | 
						|
	export LC_COLLATE="en_DK.UTF-8"
 | 
						|
	export LC_MONETARY="en_DK.UTF-8"
 | 
						|
	export LC_MESSAGES="en_DK.UTF-8"
 | 
						|
	export LC_PAPER="en_DK.UTF-8"
 | 
						|
	export LC_NAME="en_DK.UTF-8"
 | 
						|
	export LC_ADDRESS="en_DK.UTF-8"
 | 
						|
	export LC_TELEPHONE="en_DK.UTF-8"
 | 
						|
	export LC_MEASUREMENT="en_DK.UTF-8"
 | 
						|
	export LC_IDENTIFICATION="en_DK.UTF-8"
 | 
						|
fi
 | 
						|
 | 
						|
# TOC
 | 
						|
#	Defaults etc...				M0TZLS
 | 
						|
#	Environment					7RS56S
 | 
						|
#	Aliases						RJ706I
 | 
						|
#	Functions					ZGC5QQ
 | 
						|
 | 
						|
# lsb_base ?
 | 
						|
if [ -f /etc/os-release ]; then
 | 
						|
	. /etc/os-release
 | 
						|
fi
 | 
						|
 | 
						|
#####	Defaults etc...				M0TZLS	#####
 | 
						|
 | 
						|
# ~/.bashrc: executed by bash(1) for non-login shells.
 | 
						|
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
 | 
						|
# for examples
 | 
						|
 | 
						|
# If not running interactively, don't do anything
 | 
						|
[ -z "$PS1" ] && return
 | 
						|
 | 
						|
# save history
 | 
						|
export PROMPT_COMMAND='history -a'
 | 
						|
 | 
						|
# don't put duplicate lines in the history. See bash(1) for more options
 | 
						|
# ... or force ignoredups and ignorespace
 | 
						|
HISTCONTROL=ignoredups
 | 
						|
 | 
						|
# append to the history file, don't overwrite it
 | 
						|
shopt -s histappend
 | 
						|
 | 
						|
# check the window size after each command and, if necessary,
 | 
						|
# update the values of LINES and COLUMNS.
 | 
						|
shopt -s checkwinsize
 | 
						|
 | 
						|
# make less more friendly for non-text input files, see lesspipe(1)
 | 
						|
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
 | 
						|
 | 
						|
# 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
 | 
						|
 | 
						|
# set a fancy prompt (non-color, unless we know we "want" color)
 | 
						|
case "$TERM" in
 | 
						|
	xterm-color) color_prompt=yes ;;
 | 
						|
esac
 | 
						|
 | 
						|
force_color_prompt=yes
 | 
						|
 | 
						|
if [ -n "$force_color_prompt" ]; then
 | 
						|
	if which tput >&/dev/null && tput setaf 1 >&/dev/null; then
 | 
						|
		# We have color support; assume it's compliant with Ecma-48
 | 
						|
		# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
 | 
						|
		# a case would tend to support setf rather than setaf.)
 | 
						|
		color_prompt=yes
 | 
						|
	else
 | 
						|
		color_prompt=
 | 
						|
	fi
 | 
						|
fi
 | 
						|
 | 
						|
if [ "$color_prompt" = yes ]; then
 | 
						|
	PS1='\n${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
 | 
						|
else
 | 
						|
	PS1='\n${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
 | 
						|
fi
 | 
						|
unset color_prompt force_color_prompt
 | 
						|
 | 
						|
# Red colour for root, thanks nyuszika7h
 | 
						|
# Check if we're root
 | 
						|
if [[ $EUID == 0 ]]; then
 | 
						|
	PS1='\n\033[1;31m\u@\h:\w\$\033[0m '
 | 
						|
else
 | 
						|
	PS1='\n\033[1;32m\u@\h:\w\$\033[0m '
 | 
						|
fi
 | 
						|
 | 
						|
# If this is an xterm set the title to user@host:dir
 | 
						|
case "$TERM" in
 | 
						|
	xterm* | *rxvt*)
 | 
						|
		PS1="\[\e]0;\u@\h: \w\a\]$PS1"
 | 
						|
		;;
 | 
						|
	*) ;;
 | 
						|
esac
 | 
						|
 | 
						|
if hash dircolors 2> /dev/null; then
 | 
						|
	#test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
 | 
						|
	eval $(dircolors --bourne-shell)
 | 
						|
fi
 | 
						|
alias grep='grep --color=auto'
 | 
						|
alias fgrep='grep -F --color=auto'
 | 
						|
alias egrep='grep -E --color=auto'
 | 
						|
 | 
						|
# Add an "alert" alias for long running commands. Use like so:
 | 
						|
#	sleep 10; alert
 | 
						|
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
 | 
						|
 | 
						|
# Alias definitions.
 | 
						|
# You may want to put all your additions into a separate file like
 | 
						|
# ~/.bash_aliases, instead of adding them here directly.
 | 
						|
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
 | 
						|
 | 
						|
if [ -f ~/.bash_aliases ]; then
 | 
						|
	. ~/.bash_aliases
 | 
						|
fi
 | 
						|
 | 
						|
# enable programmable completion features (you don't need to enable
 | 
						|
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
 | 
						|
# sources /etc/bash.bashrc).
 | 
						|
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
 | 
						|
	. /etc/bash_completion
 | 
						|
fi
 | 
						|
 | 
						|
#Shopt settings.
 | 
						|
#shopt -s autocd
 | 
						|
 | 
						|
# Kind of my welcome screen when I open a terminal?
 | 
						|
# Existence of lsb_release implies both being on Linux and me having touched
 | 
						|
# the system, so I can do away with a lot of checks for Darwin
 | 
						|
if hash lsb_release 2> /dev/null; then
 | 
						|
	(
 | 
						|
		export LC_ALL="en_DK.UTF-8"
 | 
						|
		if hash hostname 2> /dev/null; then
 | 
						|
			hostname --all-fqdns &
 | 
						|
			hostname --all-ip-addresses &
 | 
						|
		elif hash hostnamectl 2> /dev/null; then
 | 
						|
			hostnamectl hostname &
 | 
						|
		fi
 | 
						|
		printf "\n"
 | 
						|
		printf "$(uptime --pretty)\t$(uptime)\n"
 | 
						|
		printf "\nPresent:\n"
 | 
						|
		if hash who 2> /dev/null; then
 | 
						|
			who --heading --mesg --users
 | 
						|
		elif hash last 2> /dev/null; then
 | 
						|
			last --hostlast --present $(date +%R) --fullnames --system --time-format notime
 | 
						|
		fi
 | 
						|
 | 
						|
		printf "\n"
 | 
						|
		df / $HOME --human-readable --output=source,fstype,size,used,avail,pcent | uniq
 | 
						|
		unset LC_ALL
 | 
						|
	)
 | 
						|
 | 
						|
	# Only print motivational phrases if username is aminda or mikaela
 | 
						|
	if [[ $(whoami) == aminda ]] || [[ $(whoami) == mikaela ]]; then
 | 
						|
		if hash python3 2> /dev/null; then
 | 
						|
			(
 | 
						|
				# Motivational messages
 | 
						|
				# Tavun OM värähtely poistaa ylpeyttä, MA kateutta, NI takertumista. PE leikkaa tietämättömyyden läpi, ME hälventää ahneuden ja rintakehässä värähtelevä HUNG muuntaa vihan.
 | 
						|
				# Kuinka asiat ovat (s. 74-75) - Lama Ole Nydahl
 | 
						|
				python3 -c 'print("""
 | 
						|
Aferoj emas funkcii sin mem...\tOM MANI PEME HUNG...
 | 
						|
 | 
						|
\t\t\tFoci
 | 
						|
\tFluff the SPOTLIGHT EFFECT!
 | 
						|
\tLeave the world a better place than you found it.
 | 
						|
\tMay your heart be your guiding key ;)
 | 
						|
""")'
 | 
						|
			)
 | 
						|
		fi
 | 
						|
	elif [[ "$(id -u)" == "0" ]]; then
 | 
						|
		# This comes from Charybdis IRCd
 | 
						|
		(printf "\nWe would like to take this moment to remind you that we accept\nabsolutely no liability for the insanity you're about to endure.\n\n")
 | 
						|
		# And this from sudo + the general advice for auditability
 | 
						|
		(printf "We trust you have received the usual lecture from the local System\nAdministrator. It usually boils down to these three things:\n\n\t#1) Respect the privacy of others.\n\t#2) Think before you type.\n\t#3) With great power comes great responsibility.\n\nAdditionally you shouldn't be logging in as root directly.\n\n")
 | 
						|
	fi
 | 
						|
fi
 | 
						|
 | 
						|
#####	Environment					7RS56S	#####
 | 
						|
# Environment should be placed to .environment or .bash_environment.
 | 
						|
 | 
						|
# Source before mentioned locations if they exist.
 | 
						|
 | 
						|
# .environment
 | 
						|
if [ -f ~/.environment ]; then
 | 
						|
	source ~/.environment
 | 
						|
fi
 | 
						|
 | 
						|
# .bash_environment
 | 
						|
if [ -f ~/.bash_environment ]; then
 | 
						|
	source ~/.bash_environment
 | 
						|
fi
 | 
						|
 | 
						|
# Enable core files.
 | 
						|
(ulimit -c unlimited &)
 | 
						|
 | 
						|
# More colours
 | 
						|
if [[ $TERM == 'xterm' ]]; then
 | 
						|
	export TERM=xterm-256color
 | 
						|
fi
 | 
						|
 | 
						|
if [[ $TERM == 'screen' ]]; then
 | 
						|
	export TERM=screen-256color
 | 
						|
fi
 | 
						|
 | 
						|
# Things after this are just examples and should be put to some other file, which is sourced above.
 | 
						|
 | 
						|
# Sets the default editor.
 | 
						|
#export EDITOR=nvim # MIKAELA_GREP MIKAELA_GREP_ENVIRONMENT
 | 
						|
 | 
						|
# Set TZ to local timezone for sending over SSH
 | 
						|
TZ=$(date +%Z)
 | 
						|
 | 
						|
# Sets PATH. To add another path, add :</path/to/new/path> to string below.
 | 
						|
PATH=$HOME/.local/bin:$HOME/bin:$HOME/Persistent/.local/bin:$HOME/Persistent/bin:$HOME/go/bin:$HOME/.local/share/flatpak/exports/bin:/var/lib/flatpak/exports/bin:/usr/local/bin:/usr/local/sbin:/usr/local/games:/snap/bin:/usr/bin:/usr/sbin:/usr/games:/bin:/sbin:/games:$PATH
 | 
						|
 | 
						|
# Colours to less
 | 
						|
# Copied from https://nion.modprobe.de/blog/archives/572-less-colors-for-man-pages.html
 | 
						|
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'
 | 
						|
 | 
						|
# If we are on Linux, enable apt progress bar and colours
 | 
						|
#if [[ $USER == "root" ]]; then
 | 
						|
#	mkdir -p /etc/apt/apt.conf.d/
 | 
						|
#	echo 'Dpkg::Progress-Fancy "1";' > /etc/apt/apt.conf.d/99progressbar
 | 
						|
#	echo 'APT::Color "1";' > /etc/apt/apt.conf.d/99color
 | 
						|
#fi
 | 
						|
 | 
						|
# if gpg[-agent] has sshcontrol file, use it as ssh-agent. sshcontrol should
 | 
						|
# include the authentication subkey keygrip from
 | 
						|
# `gpg --with-keygrip --list-keys`
 | 
						|
# Assumption: there is not going to be a sshcontrol file if `gpgconf` is not
 | 
						|
# installed or `sshcontrol` is trivial to remove.
 | 
						|
if [ -f ~/.gnupg/sshcontrol ]; then
 | 
						|
	export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
 | 
						|
	gpgconf --launch gpg-agent
 | 
						|
	gpg-connect-agent updatestartuptty /bye > /dev/null 2>&1
 | 
						|
# otherwise use the normal ssh-agent
 | 
						|
else
 | 
						|
	# if the output is going to /dev/null, it's non/existence doesn't matter
 | 
						|
	(ssh-agent -a /tmp/$USER.sshagent > /dev/null 2>&1)
 | 
						|
	export SSH_AUTH_SOCK=/tmp/$USER.sshagent
 | 
						|
fi
 | 
						|
 | 
						|
# OS X ls colours (copied from https://apple.stackexchange.com/questions/33677/
 | 
						|
#export CLICOLOR=1
 | 
						|
#export LSCOLORS=gxBxhxDxfxhxhxhxhxcxcx
 | 
						|
 | 
						|
# Ensure not leaking queries to upstream nameservers (resolv.conf)
 | 
						|
export LOCALDOMAIN=.
 | 
						|
# Secureish resolv.conf options (except trust-ad, but systemd also sets it
 | 
						|
# regardless of whether DNSSEC=true or not.
 | 
						|
export RES_OPTIONS="timeout:1 attempts:5 rotate edns0 trust-ad"
 | 
						|
 | 
						|
# https://github.com/go-nv/goenv
 | 
						|
if [ -f /home/linuxbrew/.linuxbrew/opt/goenv/bin/goenv ]; then
 | 
						|
	eval "$(/home/linuxbrew/.linuxbrew/opt/goenv/bin/goenv init -)" > /dev/null 2>&1
 | 
						|
	PATH=/home/linuxbrew/.linuxbrew/opt/goenv/bin/shims:$PATH
 | 
						|
elif [ -f ~/.goenv/bin/goenv ]; then
 | 
						|
	eval "$(~/.goenv/bin/goenv init -)" > /dev/null 2>&1
 | 
						|
fi
 | 
						|
 | 
						|
# https://github.com/nvm-sh/nvm
 | 
						|
if [ -d /home/linuxbrew/.linuxbrew/opt/nvm ]; then
 | 
						|
	mkdir -p /home/linuxbrew/.nvm
 | 
						|
	export NVM_DIR=/home/linuxbrew/.nvm
 | 
						|
	. /home/linuxbrew/.linuxbrew/opt/nvm/nvm.sh
 | 
						|
elif [ -d ~/.nvm ]; then
 | 
						|
	. ~/.nvm/nvm.sh
 | 
						|
	. ~/.nvm/bash_completion
 | 
						|
fi
 | 
						|
 | 
						|
# https://github.com/rbenv/rbenv
 | 
						|
if [ -f /home/linuxbrew/.linuxbrew/opt/rbenv/bin/rbenv ]; then
 | 
						|
	eval "$(/home/linuxbrew/.linuxbrew/opt/rbenv/bin/rbenv init -)"
 | 
						|
	PATH=/home/linuxbrew/.linuxbrew/opt/rbenv/bin/shims:$PATH
 | 
						|
# No OpenSSL? Remember (and substitute the x, y and z)!:
 | 
						|
# rbenv install --  --with-openssl-dir=/home/linuxbrew/.linuxbrew/Cellar/openssl@x/x.y.z/
 | 
						|
elif [ -f ~/.rbenv/bin/rbenv ]; then
 | 
						|
	eval "$(~/.rbenv/bin/rbenv init -)"
 | 
						|
	# Remember! And verify it before running!
 | 
						|
	# git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
 | 
						|
fi
 | 
						|
 | 
						|
# Add RubyGems to PATH
 | 
						|
if hash ruby 2> /dev/null; then
 | 
						|
	PATH="$(ruby -e 'print Gem.user_dir')/bin:$PATH"
 | 
						|
fi
 | 
						|
 | 
						|
# https://github.com/pyenv/pyenv
 | 
						|
if [ -f /home/linuxbrew/.linuxbrew/opt/pyenv/bin/pyenv ]; then
 | 
						|
	eval "$(/home/linuxbrew/.linuxbrew/opt/pyenv/bin/pyenv init -)"
 | 
						|
	PATH=/home/linuxbrew/.linuxbrew/opt/pyenv/bin/shims:$PATH
 | 
						|
elif [ -d ~/.pyenv/bin ]; then
 | 
						|
	eval "$(~/.pyenv/bin/pyenv init -)"
 | 
						|
	# Worth considering (and verifying before running)
 | 
						|
	# git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
 | 
						|
	# git clone https://github.com/pyenv/pyenv-virtualenvwrapper.git $(pyenv root)/plugins/pyenv-virtualenvwrapper
 | 
						|
fi
 | 
						|
 | 
						|
# https://github.com/nodenv/nodenv
 | 
						|
if [ -f /home/linuxbrew/.linuxbrew/opt/nodenv/bin/nodenv ]; then
 | 
						|
	eval "$(/home/linuxbrew/.linuxbrew/opt/nodenv/bin/nodenv init -)"
 | 
						|
	PATH=/home/linuxbrew/.linuxbrew/opt/nodenv/bin/shims:$PATH
 | 
						|
elif [ -d ~/.nodenv/bin/nodenv ]; then
 | 
						|
	eval "$(~/.nodenv/bin/nodenv init -)"
 | 
						|
	# Remember! And verify it before running!
 | 
						|
	# git clone https://github.com/nodenv/node-build.git "$(nodenv root)"/plugins/node-build
 | 
						|
fi
 | 
						|
 | 
						|
# https://github.com/Homebrew/brew
 | 
						|
if [ -d /home/linuxbrew/.linuxbrew/bin ]; then
 | 
						|
	eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv)
 | 
						|
fi
 | 
						|
 | 
						|
# Removes duplicates from $PATH. Copied from https://unix.stackexchange.com/a/14896
 | 
						|
PATH=$(echo "$PATH" | awk -v RS=':' -v ORS=":" '!a[$1]++{if (NR > 1) printf ORS; printf $a[$1]}')
 | 
						|
 | 
						|
#####	Aliases						RJ706I	#####
 | 
						|
 | 
						|
# To get sudo work with aliases. And workaround nvim/tmux crash.
 | 
						|
alias sudo="\sudo --preserve-env=tmux"
 | 
						|
 | 
						|
# Moving between directories:
 | 
						|
alias ..="cd .."
 | 
						|
 | 
						|
# Use htop instead of top if available
 | 
						|
if hash htop 2> /dev/null; then
 | 
						|
	alias top="htop"
 | 
						|
fi
 | 
						|
 | 
						|
# Add title to youtube-dl & make yle-dl Windows-friendly
 | 
						|
alias youtube-dl="youtube-dl -o '%(title)s-%(id)s.%(ext)s'"
 | 
						|
alias yle-dl="yle-dl --vfat"
 | 
						|
 | 
						|
# git specific. This is the command which I use when git asks me to commit something and says that I have modified files, even when I haven't.
 | 
						|
alias gdrop="git stash && git stash drop"
 | 
						|
 | 
						|
# Show compilation date of WeeChat.
 | 
						|
alias weechat-version="weechat --help|head -n2"
 | 
						|
 | 
						|
# NMAP specific. All nmap things should be run with sudo.
 | 
						|
alias nmap-intense="nmap -T4 -A -v -PE -PS22,25,80 -PA21,23,80,3389 "
 | 
						|
alias nmap-intense-udp="sudo nmap -sS -sU -T4 -A -v -PE -PS22,25,80 -PA21,23,80,3389 "
 | 
						|
alias nmap-intense-all-tcp="nmap -p 1-65535 -T4 -A -v -PE -PS22,25,80 -PA21,23,80,3389 "
 | 
						|
alias nmap-intense-no-ping="nmap -T4 -A -v -PN "
 | 
						|
alias nmap-ping="nmap -sP -PE -PA21,23,80,3389 "
 | 
						|
alias nmap-quick="nmap -T4 -F "
 | 
						|
alias nmap-quick-plus="sudo nmap -sV -T4 -O -F --version-light "
 | 
						|
alias nmap-traceroute="sudo nmap -sP -PE -PS22,25,80 -PA21,23,80,3389 -PU -PO --traceroute "
 | 
						|
alias nmap-regular="nmap "
 | 
						|
alias nmap-comprehensive="sudo nmap -sS -sU -T4 -A -v -PE -PP -PS21,22,23,25,80,113,31339 -PA80,113,443,10042 -PO --script all "
 | 
						|
# Little "safer" scan as connecting to only HTTP and HTTPS ports doesn't look so attacking. Copy-paste to .bash_custom and remove " -p 80,443" if you want to scan all ports which nmap scans by default.
 | 
						|
alias nmap-osscan="sudo nmap -p 80,443 -O -v --osscan-guess --fuzzy "
 | 
						|
 | 
						|
# Downloads folder over SSH. Usage: rdownload <host>:<remotefolder> <local_destination> | TIP: use ~/ssh/config to configure hosts.
 | 
						|
alias rdownload="rsync -h --progress -avz "
 | 
						|
alias rscp='rsync -h --progress -avz '
 | 
						|
alias rscpr='rsync -h --progress -azvv '
 | 
						|
 | 
						|
# TMUX specific
 | 
						|
alias tmux="tmux -2u"
 | 
						|
alias attach="tmux attach-session"
 | 
						|
alias detach="tmux detach"
 | 
						|
 | 
						|
# Supybot specifig. Why to write long command, if you can write short command?
 | 
						|
alias supybot-config-reload="killall -HUP supybot "
 | 
						|
alias supybot-owner-quit="killall -INT supybot "
 | 
						|
# Translating plugins in Limnoria
 | 
						|
alias supybot-generate-messages.pot="pygettext --docstrings config.py plugin.py"
 | 
						|
alias supybot-generate-messages.pot-xgettext="xgettext --language=Python config.py plugin.py && mv -f messages.po messages.pot"
 | 
						|
alias supybot-check-plugin-trans="sandbox/check_trans.py plugins/"
 | 
						|
alias supybot-check-core-trans="sandbox/check_trans.py --core"
 | 
						|
alias supybot-generate-messages.pot-mass="find . -type d -exec sh -c '(cd {} && pygettext --docstrings config.py plugin.py)' ';'"
 | 
						|
 | 
						|
# Enable colours for diff when in terminal
 | 
						|
alias diff="diff --color=auto"
 | 
						|
 | 
						|
# SSHGuard specific
 | 
						|
alias sshguard-show-bans="sshguard4-show-bans && sshguard6-show-bans"
 | 
						|
alias sshguard4-show-bans="sudo iptables -L sshguard --line-numbers"
 | 
						|
alias sshguard6-show-bans="sudo ip6tables -L sshguard --line-numbers"
 | 
						|
# Enter ban number as arguement. You can see ban numbers with previous command.
 | 
						|
alias sshguard4-unban="sudo iptables -D sshguard "
 | 
						|
alias sshguard6-unban="sudo ip6tables -D sshguard "
 | 
						|
alias sshguard-unban-all="sshguard4-unban-all && sshguard-6-unban-all"
 | 
						|
alias sshguard4-unban-all="sudo iptables -F sshguard"
 | 
						|
alias sshguard6-unban-all="sudo ip6tables -F sshguard"
 | 
						|
 | 
						|
# For locally rsync copying folder1 to folder2.
 | 
						|
alias rsync-folder="rsync -h --progress -azvv "
 | 
						|
 | 
						|
# Use GPG2 instead of GPG!
 | 
						|
if hash gpg2 2> /dev/null; then
 | 
						|
	alias gpg=gpg2
 | 
						|
	export KEYBASE_GPG=gpg2
 | 
						|
fi
 | 
						|
alias gpg-fix-tty='export GPG_TTY=$(tty)'
 | 
						|
 | 
						|
# Amount of keys in GPG keyring.
 | 
						|
alias gpg-key-amount="gpg --list-keys|grep '^pub'|wc -l"
 | 
						|
alias gpg-key-count="gpg --export -a|gpg --import"
 | 
						|
 | 
						|
# Current IPv4 and IPv6 addresses. Calls functions.
 | 
						|
alias myip="myip4 && myip6"
 | 
						|
 | 
						|
# Update groups without logging out. Requires entering password. Source: https://blog.edwards-research.com/2010/10/linux-refresh-group-membership-without-logging-out/
 | 
						|
alias refreshgroups="exec su -l $USER"
 | 
						|
 | 
						|
# Get public key lenght of (public) SSH key
 | 
						|
alias ssh-pubkey-length="ssh-keygen -lf "
 | 
						|
 | 
						|
# MSDOS commands. MSDOS is after every alias line to get these lines easily by grepping.
 | 
						|
alias cls=clear         # MSDOS
 | 
						|
alias help=man          # MSDOS
 | 
						|
alias ipconfig=ifconfig # MSDOS
 | 
						|
alias copy=cp           # MSDOS
 | 
						|
alias move=mv           # MSDOS
 | 
						|
 | 
						|
# List git committers of repository
 | 
						|
alias git-committers="git shortlog -s"
 | 
						|
alias git-changelog="git log --oneline --decorate"
 | 
						|
alias git-changelog-color="git log --oneline --decorate --color"
 | 
						|
 | 
						|
# Line ending converting with flip
 | 
						|
alias unixle="flip -ub "
 | 
						|
alias msdosle="flip -mb "
 | 
						|
 | 
						|
# Archiving and extracting with tar
 | 
						|
# This is tartar to avoid conflict with tar
 | 
						|
alias tartar="tar cfv "
 | 
						|
alias targz="tar cfvz "
 | 
						|
alias tarbz2="tar cfvj "
 | 
						|
# I have function ex so these are ex-* to avoid conflict.
 | 
						|
# ex-tartar and ex-tar, because there is alias tartar and command tar
 | 
						|
alias ex-tar="tar xfv "
 | 
						|
alias ex-tartar="tar xfv "
 | 
						|
alias ex-targz="tar xfvz "
 | 
						|
alias ex-tarbz2="tar xfvj "
 | 
						|
 | 
						|
# To have less handle ls colours
 | 
						|
alias less="less -R "
 | 
						|
 | 
						|
# "su -" with/without sudo. Conflicts with SailfishOS, to learn to use sui
 | 
						|
# instead.
 | 
						|
if ! hash ssu 2> /dev/null; then
 | 
						|
	alias ssu="echo 'No.'"
 | 
						|
fi
 | 
						|
alias sui="sudo -i"
 | 
						|
alias sudoi="sudo -i"
 | 
						|
#alias suu="su -"
 | 
						|
 | 
						|
# systemd runlevels/targets
 | 
						|
alias currenttargets="systemctl list-units --type=target"
 | 
						|
alias telsystemd="systemctl isolate "
 | 
						|
alias defaulttarget="systemctl enable "
 | 
						|
 | 
						|
# Who command which I use with Conky
 | 
						|
alias cwho="who -H -w -u"
 | 
						|
 | 
						|
# inxi - https://smxi.org/docs/inxi.htm
 | 
						|
#alias inxi-install="mkdir -p ~/.local/bin && cd ~/.local/bin && \wget -Nc https://github.com/smxi/inxi/raw/master/inxi && \chmod -v +x inxi && cd"
 | 
						|
#alias inxi-install-root="cd /usr/local/bin;\wget -Nc https://github.com/smxi/inxi/raw/master/inxi;\chmod -v +x inxi;./inxi -U;cd"
 | 
						|
#alias inxi-update="inxi -U"
 | 
						|
 | 
						|
# FINEID to ssh-agent
 | 
						|
alias fineid="ssh-add -s /usr/lib64/libcryptoki.so"
 | 
						|
 | 
						|
# OS X
 | 
						|
# What is this?
 | 
						|
#alias osx-server-caching-interface="serveradmin settings caching:Interface ="
 | 
						|
alias osx-show-hidden-files="defaults write com.apple.finder AppleShowAllFiles"
 | 
						|
# Workaround on unsupported devices?
 | 
						|
alias osx-airdrop-listenallif="defaults write com.apple.NetworkBrowser BrowseAllInterfaces"
 | 
						|
alias osx-set-updatecheck="defaults write /Library/Preferences/com.apple.SoftwareUpdate ScheduleFrequency"
 | 
						|
 | 
						|
# Resetting different desktop environments
 | 
						|
# TODO: I imagine these are broken
 | 
						|
#alias reset-gnome="rm -rf ~/.gnome ~/.gnome2 ~/.gconf ~/.gconfd ~/.metacity ~/.cache ~/.dbus ~/.dmrc ~/.mission-control ~/.thumbnails ~/.config/dconf/user ~/.compiz*"
 | 
						|
#alias reset-unity="unity-tweak-tool --reset-unity"
 | 
						|
#alias reset-kde="rm -rf ~/.kde4 ~/.kde"
 | 
						|
#alias reset-lxpanel="rm -rf ~/.config/lxpanel;lxpanelctl restart"
 | 
						|
#alias reset-xfce4="rm -rf ~/.config/xfce4"
 | 
						|
#alias reset-matepanel="mate-panel --reset"
 | 
						|
 | 
						|
# Show information on PEM file.
 | 
						|
alias peminfo="openssl x509 -text -in"
 | 
						|
 | 
						|
# tmux emergency attach
 | 
						|
alias tmuxeattach="/proc/$(pgrep -o tmux)/exe attach"
 | 
						|
 | 
						|
# Reset configuration files on systems using apt
 | 
						|
alias purgeconfig="apt-get install --reinstall -o DPkg::options::=--force-confask"
 | 
						|
 | 
						|
# Send command output to sprunge.us or ix.io `command|<sprungeus|ixio>`
 | 
						|
alias sprungeus="curl -F 'sprunge=<-' https://sprunge.us"
 | 
						|
alias ixio="curl -F 'f:1=<-' ix.io"
 | 
						|
 | 
						|
# Copy-paste mtr output more easily
 | 
						|
alias mtrp4="mtr -rw4c 10"
 | 
						|
alias mtrp6="mtr -rw6c 10"
 | 
						|
 | 
						|
# Simple HTTPd with Python.
 | 
						|
alias python-httpd="python3 -m http.server"
 | 
						|
 | 
						|
# pip
 | 
						|
alias pip="python3 -m pip"
 | 
						|
alias pip3="python3 -m pip"
 | 
						|
alias pypypip="pypy3 -m pip"
 | 
						|
alias pypypip3="pypy3 -m pip"
 | 
						|
alias pipx="python3 -m pipx"
 | 
						|
alias pipx3="python3 -m pipx"
 | 
						|
alias pypypipx="pypy3 -m pipx"
 | 
						|
alias pypypipx3="pypy3 -m pipx"
 | 
						|
 | 
						|
# Python virtualenv/the new venv comparsion:
 | 
						|
# https://virtualenv.pypa.io/en/latest/#virtualenv / python3-venv (Debian)
 | 
						|
alias venv="python3 -m venv"
 | 
						|
alias pypyvenv="pypy3 -m venv"
 | 
						|
alias venvpypy=pypyvenv
 | 
						|
 | 
						|
# cp/mv using rsync. rcp appears to be link to scp in my system, so I can
 | 
						|
# safely use this alias.
 | 
						|
if hash rsync 2> /dev/null; then
 | 
						|
	alias rcp="rsync -a --progress"
 | 
						|
	alias rmv="rsync -a --progress --remove-source-files"
 | 
						|
fi
 | 
						|
 | 
						|
# Clear apt list cache
 | 
						|
alias clear-apt-list-cache="cd /var/lib/apt/lists && rm -f *|true && cd partial && rm -f *|true && cd"
 | 
						|
 | 
						|
# Accept all cookies with Lynx, makes browsing easier and
 | 
						|
# every other browser does this too.
 | 
						|
alias lynx="lynx -accept_all_cookies"
 | 
						|
 | 
						|
# Cat multiple files preserving filenames
 | 
						|
# via https://stackoverflow.com/a/7816490
 | 
						|
alias multicat='tail -n +1'
 | 
						|
 | 
						|
# Getting SSIDs and keys from connmann (Jolla)
 | 
						|
alias connman-wlans='grep -E "Name|Passphrase" /var/lib/connman/wifi*/settings --no-filename'
 | 
						|
 | 
						|
# Turn input into lowercase and remove colons.
 | 
						|
# Meant for SSL certificates (IRC))
 | 
						|
alias lowernocolon="tr -d ':' | tr 'A-Z' 'a-z'"
 | 
						|
 | 
						|
# Sailfish Network status, via IRC
 | 
						|
alias sailfish-nstatus='dbus-send --system --type=method_call --print-reply --dest=net.connman / net.connman.Manager.GetServices|less'
 | 
						|
 | 
						|
# apt build depedencies (without installing)
 | 
						|
alias apt-builddep="apt-rdepends --build-depends --follow=DEPENDS"
 | 
						|
 | 
						|
# https://superuser.com/a/638033 - get embedded Windows product key
 | 
						|
alias winkey="xxd /sys/firmware/acpi/tables/MSDM"
 | 
						|
 | 
						|
# Always exec startx/startsway/wayland/sway so Ctrl-Alt-Backspace won't lead to unlocked TTY.
 | 
						|
#alias startsway="exec dbus-launch --exit-with-session sway --unsupported-gpu"
 | 
						|
alias startsway="\exec startsway"
 | 
						|
alias startplasma="\exec startplasma"
 | 
						|
#alias startx="exec \startx"
 | 
						|
alias startx=startsway
 | 
						|
alias startwayland=startsway
 | 
						|
alias startwl=startsway
 | 
						|
 | 
						|
# cat list of kernel detected vulnerabilities/states with filenames
 | 
						|
alias linux-check-cpu-vulns="tail -n +1 /sys/devices/system/cpu/vulnerabilities/*"
 | 
						|
 | 
						|
# gpg web key directory lookup
 | 
						|
alias wkdlookup="gpg --auto-key-locate nodefault,wkd --locate-keys"
 | 
						|
# Debian key server, Tor not necessary due to dirmngr config
 | 
						|
alias gpg-dkr-recv="gpg --keyserver hkps://keyring.debian.org --recv-keys"
 | 
						|
# Ubuntu key server, Tor not necessary due to dirmngr config
 | 
						|
alias gpg-uks="gpg --keyserver hkps://keyserver.ubuntu.com"
 | 
						|
alias gpg-uks-recv="gpg --keyserver hkps://keyserver.ubuntu.com --recv-keys"
 | 
						|
# helpful for wkd
 | 
						|
alias gpg-export-minimal-ascii="gpg --armor --export-options export-minimal --export"
 | 
						|
alias gpg-export-minimal-binary="gpg --no-armor --export-options export-minimal --export"
 | 
						|
 | 
						|
# ports that are being listened to
 | 
						|
alias netstat-listening-ports="netstat -plntu"
 | 
						|
 | 
						|
# mpv music & music shuffle
 | 
						|
alias mpvm="mpv --no-video"
 | 
						|
alias mpvms="mpv --no-video --shuffle"
 | 
						|
 | 
						|
# Compatibility with my i3 alsactl mess
 | 
						|
if [ -f ~/.config/asound.state ]; then
 | 
						|
	alias alsactl="\alsactl -f ~/.config/asound.state"
 | 
						|
fi
 | 
						|
 | 
						|
# More simple SSH file signing, ~/.ssh/signingkey.pub should be a symlink
 | 
						|
alias ssh-sign-file="ssh-keygen -Y sign -f ~/.ssh/signingkey.pub -n file"
 | 
						|
 | 
						|
# Anywhere on Earth date, https://en.m.wikipedia.org/wiki/Anywhere_on_Earth
 | 
						|
alias aoedate="TZ=Etc/GMT+12 date"
 | 
						|
 | 
						|
# verbosity to common actions
 | 
						|
alias rm="\rm --verbose"
 | 
						|
alias ln="\ln --verbose"
 | 
						|
alias mkdir="\mkdir --verbose"
 | 
						|
alias chattr="\chattr -V"
 | 
						|
alias chmod="\chmod --verbose"
 | 
						|
 | 
						|
# https://github.com/nodejs/corepack/blob/v0.28.2/README.md#corepack-enable--name
 | 
						|
if hash corepack 2> /dev/null; then
 | 
						|
	alias yarn="corepack yarn"
 | 
						|
	alias yarnpkg="corepack yarnpkg"
 | 
						|
	alias pnpm="corepack pnpm"
 | 
						|
	alias pnpx="corepack pnpx"
 | 
						|
	alias npm="corepack npm"
 | 
						|
	alias npx="corepack npx"
 | 
						|
	if ! hash prettier 2> /dev/null; then
 | 
						|
		alias prettier="pnpx prettier --cache --ignore-unknown"
 | 
						|
	fi
 | 
						|
else
 | 
						|
	echo "Information: corepack is not installed."
 | 
						|
fi
 | 
						|
 | 
						|
# https://pnpm.io/installation#using-a-shorter-alias
 | 
						|
alias pn="corepack pnpm"
 | 
						|
 | 
						|
# github-pages etc.
 | 
						|
if hash bundle 2> /dev/null; then
 | 
						|
	alias jekyll="bundle exec jekyll"
 | 
						|
fi
 | 
						|
 | 
						|
# Helpful tool for increasing permissions on Android, for me mainly unattended
 | 
						|
# installations.
 | 
						|
alias shizuku="adb shell sh /storage/emulated/0/Android/data/moe.shizuku.privileged.api/start.sh"
 | 
						|
 | 
						|
# journalctl commands I often seem to type by hand
 | 
						|
alias journalf="journalctl --no-hostname --follow"
 | 
						|
alias journalfu="journalctl --utc --no-hostname --follow"
 | 
						|
alias journalb="journalctl --no-hostname --boot"
 | 
						|
alias journalbu="journalctl --utc --no-hostname --boot"
 | 
						|
 | 
						|
# To complement my nordvpn-off wrapper
 | 
						|
alias nordvpn-offf="sudo systemctl stop nordvpnd.service;sudo systemctl stop nordvpnd.socket"
 | 
						|
alias nordvpn-off2=nordvpn-offf
 | 
						|
 | 
						|
# Allow custom aliases to be put in .aliases or .bash_aliases .
 | 
						|
 | 
						|
# .aliases
 | 
						|
if [ -f ~/.aliases ]; then
 | 
						|
	source ~/.aliases
 | 
						|
fi
 | 
						|
 | 
						|
# .bash_aliases
 | 
						|
if [ -f ~/.bash_aliases ]; then
 | 
						|
	source ~/.bash_aliases
 | 
						|
fi
 | 
						|
 | 
						|
#####	Functions					ZGC5QQ	#####
 | 
						|
 | 
						|
# GEOIP lookup, improved from the ultimate bashrc https://goo.gl/qGK5j
 | 
						|
function geoip() {
 | 
						|
	geoiplookup $1
 | 
						|
	geoiplookup6 $1
 | 
						|
}
 | 
						|
 | 
						|
# TODO: Is it bash or zshrc?
 | 
						|
# ex command. Copied from bashrc of bioterror ( https://ricecows.org/configs/bash/.bashrc ). Original comment below:
 | 
						|
## for unit193 ;)
 | 
						|
## use command "ex" to extract any archive files.
 | 
						|
## "ex package.zip" for example
 | 
						|
function ex() {
 | 
						|
	if [ -f "$1" ]; then
 | 
						|
		case "$1" in
 | 
						|
			*.tar) tar xvf $1 ;;
 | 
						|
			*.tar.bz2 | *.tbz2) tar xjvf $1 ;;
 | 
						|
			*.tar.gz | *.tgz) tar xzvf $1 ;;
 | 
						|
			*.bz2) bunzip2 $1 ;;
 | 
						|
			*.rar) unrar x $1 ;;
 | 
						|
			*.gz) gunzip $1 ;;
 | 
						|
			*.zip) unzip $1 ;;
 | 
						|
			*.Z) uncompress $1 ;;
 | 
						|
			*.7z) 7z x $1 ;;
 | 
						|
			*.xz) tar xJvf $1 ;;
 | 
						|
			*.deb)
 | 
						|
				DIR=${1%%_*.deb}
 | 
						|
				ar xv $1
 | 
						|
				mkdir ${DIR}
 | 
						|
				tar -C ${DIR} -xzvf data.tar.gz
 | 
						|
				;;
 | 
						|
			*.rpm) rpm2cpio $1 | cpio -vid ;;
 | 
						|
			*)
 | 
						|
				echo ""${1}" cannot be extracted via extract()"
 | 
						|
				;;
 | 
						|
		esac
 | 
						|
	else
 | 
						|
		echo ""${1}" is not a valid file"
 | 
						|
	fi
 | 
						|
}
 | 
						|
 | 
						|
# Given by nyuszika7h. Shortens GitHub URLs with git.io
 | 
						|
function gitio() {
 | 
						|
	curl -s -i https://git.io -F "url=$1" | grep --color=never -P '^Location: ' | awk '{ print $2 }'
 | 
						|
}
 | 
						|
 | 
						|
function mkcd() {
 | 
						|
	if [[ $# -gt 1 ]]; then
 | 
						|
		echo 'Warning: All directories will be created, but will change to first specified directory.' 1>&2
 | 
						|
	fi
 | 
						|
	mkdir -p "$*" && cd "$1"
 | 
						|
}
 | 
						|
 | 
						|
function gribble-gpg-everify() {
 | 
						|
	# Set which command to use for gpg. You
 | 
						|
	# probably want to use gpg2 here.
 | 
						|
	local gpg=gpg2
 | 
						|
 | 
						|
	echo -n 'Enter Bitcoin OTC URL: '
 | 
						|
	read REPLY
 | 
						|
	lynx -hiddenlinks=ignore -dump $REPLY > bitcoin_otc.txt.asc
 | 
						|
	$gpg --decrypt-file bitcoin_otc.txt.asc
 | 
						|
	echo -en '\e[1;32m;;everify '
 | 
						|
	cat bitcoin_otc.txt
 | 
						|
	echo -e '\e[0m'
 | 
						|
	rm -rf bitcoin_otc.txt bitcoin_otc.txt.asc
 | 
						|
}
 | 
						|
 | 
						|
# This function will install/upgrade shell-things.
 | 
						|
 | 
						|
function shell-things {
 | 
						|
 | 
						|
	export SHELL_THINGS_REPO=$HOME/.shell-things
 | 
						|
 | 
						|
	# Check if ~/.shell-things exists and cd and pull.
 | 
						|
	if [ -d $SHELL_THINGS_REPO ]; then
 | 
						|
		echo "shell-things: $SHELL_THINGS_REPO exists, git pulling..."
 | 
						|
		echo ""
 | 
						|
		cd $SHELL_THINGS_REPO
 | 
						|
		git remote set-url origin https://codeberg.org/Aminda/shell-things.git
 | 
						|
		git fetch --all
 | 
						|
		git checkout -b cxefa origin/cxefa > /dev/null 2>&1
 | 
						|
		git pull
 | 
						|
		echo "git config --global gpg.ssh.allowedSignersFile ~/src/codeberg.org/Aminda/ssh-allowed_signers/allowed_signers"
 | 
						|
		git verify-commit HEAD || exit 1
 | 
						|
		sleep 10
 | 
						|
		echo ""
 | 
						|
		echo "shell-things: Installing/Upgrading..."
 | 
						|
		echo ""
 | 
						|
	# If it doesn't exist...
 | 
						|
	else
 | 
						|
		echo ""
 | 
						|
		echo "shell-things: $SHELL_THINGS_REPO doesn't exist, cloning..."
 | 
						|
		echo ""
 | 
						|
		git clone https://codeberg.org/Aminda/shell-things.git $SHELL_THINGS_REPO
 | 
						|
		cd $SHELL_THINGS_REPO
 | 
						|
		sleep 10
 | 
						|
		echo ""
 | 
						|
		echo "shell-things: Installing/Upgrading..."
 | 
						|
		echo ""
 | 
						|
	fi
 | 
						|
 | 
						|
	# Installing...
 | 
						|
	bash -x ./install
 | 
						|
	echo ""
 | 
						|
	echo "shell-things: Installing finished."
 | 
						|
	echo ""
 | 
						|
 | 
						|
	echo ""
 | 
						|
	echo "shell-things: Everything is now done :)"
 | 
						|
	echo ""
 | 
						|
 | 
						|
	cd
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
# This function removes and regenerates ssh host keys.
 | 
						|
 | 
						|
#ssh-regen-host-keys () {
 | 
						|
#		 rm /etc/ssh/ssh_host_*
 | 
						|
#		 ssh-keygen -t rsa -N "" -f /etc/ssh/ssh_host_rsa_key
 | 
						|
#		 ssh-keygen -t ed25519 -N "" -f /etc/ssh/ssh_host_ed25519_key
 | 
						|
#}
 | 
						|
 | 
						|
# This function erases Master Boot Record from device
 | 
						|
# Note: this is dangerous so this function will echo the command
 | 
						|
# instad of running it!
 | 
						|
#erase-mbr() {
 | 
						|
#	 echo dd if=/dev/zero of=$1 bs=512 count=2
 | 
						|
#}
 | 
						|
 | 
						|
# Use clang if installed. It seems interesting and this is probably good
 | 
						|
# way to test it. This might not be a function, but I don't have any better
 | 
						|
# place for this.
 | 
						|
if hash clang 2> /dev/null; then
 | 
						|
	export CC=clang
 | 
						|
	export HOMEBREW_CC=clang
 | 
						|
fi
 | 
						|
 | 
						|
if hash clang++ 2> /dev/null; then
 | 
						|
	export CXX=clang++
 | 
						|
fi
 | 
						|
 | 
						|
# Add GitHub pull requests to fetched things via https://git.io/-C-0oQ
 | 
						|
github-add-pulls() {
 | 
						|
	git config --add remote.origin.fetch '+refs/pull/*/head:refs/remotes/origin/pr/*'
 | 
						|
	git config --add remote.upstream.fetch '+refs/pull/*/head:refs/remotes/upstream/-pr/*'
 | 
						|
}
 | 
						|
 | 
						|
# Get server SSL certificate fingerprint in MD5, SHA1 and SHA256.
 | 
						|
# Note that OpenSSL doesn't support IPv6 at time of writing (2015-01-13).
 | 
						|
serversslcertfp() {
 | 
						|
	SSSLCFFN=$(openssl s_client -showcerts -connect $1 < /dev/null)
 | 
						|
	# To see all validity information
 | 
						|
	echo "$SSSLCFFN"
 | 
						|
	# For getting the fingerprints
 | 
						|
	echo "$SSSLCFFN" | openssl x509 -md5 -fingerprint -noout
 | 
						|
	echo "$SSSLCFFN" | openssl x509 -sha1 -fingerprint -noout
 | 
						|
	echo "$SSSLCFFN" | openssl x509 -sha256 -fingerprint -noout
 | 
						|
	echo "$SSSLCFFN" | openssl x509 -sha512 -fingerprint -noout
 | 
						|
	unset SSSLCFFN
 | 
						|
}
 | 
						|
 | 
						|
# The same for local certificate file
 | 
						|
sslcertfp() {
 | 
						|
	cat $1 | openssl x509 -md5 -fingerprint -noout
 | 
						|
	cat $1 | openssl x509 -sha1 -fingerprint -noout
 | 
						|
	cat $1 | openssl x509 -sha256 -fingerprint -noout
 | 
						|
	cat $1 | openssl x509 -sha512 -fingerprint -noout
 | 
						|
}
 | 
						|
 | 
						|
# Usage: serversslciphers hostname port
 | 
						|
serversslciphers() {
 | 
						|
	nmap -Pn $1 -p $2 --script +ssl-enum-ciphers
 | 
						|
}
 | 
						|
 | 
						|
# Generate SSL certificate
 | 
						|
sslgenpem() {
 | 
						|
	openssl req -nodes -newkey rsa:4096 -keyout $1.pem -x509 -days 3650 -out $1.pem -subj "/CN=$2"
 | 
						|
}
 | 
						|
 | 
						|
# Managing SSL certificates of Google Chrome
 | 
						|
chrome-add-cert() {
 | 
						|
	echo "Please ensure that either libnss3-tools or nss-tools is installed."
 | 
						|
	certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n $1 -i $1
 | 
						|
}
 | 
						|
 | 
						|
chrome-list-certs() {
 | 
						|
	echo "Please ensure that either libnss3-tools or nss-tools is installed."
 | 
						|
	certutil -d sql:$HOME/.pki/nssdb -L # add '-h all' to see all built-in certs
 | 
						|
}
 | 
						|
 | 
						|
ssldownloadcert() {
 | 
						|
	echo "Please ensure that either libnss3-tools or nss-tools is installed."
 | 
						|
	echo QUIT | openssl s_client -connect $1:443 | sed -ne '/BEGIN CERT/,/END CERT/p' | tee $1.pem
 | 
						|
}
 | 
						|
 | 
						|
# Getting magnet from transmission-daemon
 | 
						|
transmission-torrents() {
 | 
						|
	transmission-remote -l
 | 
						|
}
 | 
						|
transmission-magnet() {
 | 
						|
	transmission-remote -l -t $1 -i | \grep magnet | awk -F': ' '{print $2}'
 | 
						|
}
 | 
						|
 | 
						|
# Merges the last $1 commits into one
 | 
						|
git-squash() {
 | 
						|
	git reset --soft HEAD~$1
 | 
						|
	git commit
 | 
						|
}
 | 
						|
 | 
						|
# Combining mtrp4 & mtrp6
 | 
						|
mtrp() {
 | 
						|
	mtrp4 $@
 | 
						|
	mtrp6 $@
 | 
						|
}
 | 
						|
 | 
						|
# My IPv4 address
 | 
						|
myip4() {
 | 
						|
	if hash dig 2> /dev/null; then
 | 
						|
		dig +short myip.opendns.com. A @208.67.222.222
 | 
						|
	else
 | 
						|
		curl -L4s https://icanhazip.com/
 | 
						|
	fi
 | 
						|
}
 | 
						|
 | 
						|
# My IPv6 address
 | 
						|
myip6() {
 | 
						|
	if hash dig 2> /dev/null; then
 | 
						|
		dig +short myip.opendns.com. AAAA @2620:0:ccc::2
 | 
						|
	else
 | 
						|
		curl -L6s https://icanhazip.com/
 | 
						|
	fi
 | 
						|
}
 | 
						|
 | 
						|
# Easier verifying of SSH signed files: ssh-verify-file whatever@mikaela.info file.txt
 | 
						|
# It's assumed that signature of file.txt is called as file.txt.sig
 | 
						|
sshAllowedSigners=$HOME/src/codeberg.org/Aminda/ssh-allowed_signers/allowed_signers
 | 
						|
ssh-verify-file() {
 | 
						|
	echo "$1 ${2:?Usage: ssh-verify-file <email> <file-to-verify>}" > /dev/null
 | 
						|
	ssh-keygen -Y verify -f $sshAllowedSigners -I $1 -n file -s $2.sig < $2
 | 
						|
}
 | 
						|
 | 
						|
# I use nvim, while I keep running vim instead
 | 
						|
if hash nvim 2> /dev/null; then
 | 
						|
	vim() {
 | 
						|
		echo 'using nvim instead'
 | 
						|
		/usr/bin/env nvim "$@"
 | 
						|
	}
 | 
						|
else
 | 
						|
	vim() {
 | 
						|
		echo 'nvim not found'
 | 
						|
		/usr/bin/env vim "$@"
 | 
						|
	}
 | 
						|
fi
 | 
						|
 | 
						|
# In Debian there is "sudo adduser whoever whatever", but I keep forgetting
 | 
						|
# that the more common way is usermod -aG whatever,whereever whoever
 | 
						|
adduser-to-group() {
 | 
						|
	usermod -aG "$2" "$1"
 | 
						|
}
 | 
						|
 | 
						|
# Lazyish ACL aware ls
 | 
						|
unalias ls > /dev/null 2>&1
 | 
						|
ls() {
 | 
						|
	env ls --all --color=auto --human-readable "$@"
 | 
						|
	if hash getfacl 2> /dev/null; then
 | 
						|
		if [[ -d "$@" || -f "$@" ]]; then
 | 
						|
			printf "\n"
 | 
						|
			getfacl --absolute-names --skip-base "$@"
 | 
						|
		fi
 | 
						|
	fi
 | 
						|
}
 | 
						|
unalias ll > /dev/null 2>&1
 | 
						|
ll() {
 | 
						|
	env ls -l --all --color=auto --human-readable "$@"
 | 
						|
	if hash getfacl 2> /dev/null; then
 | 
						|
		if [[ -d "$@" || -f "$@" ]]; then
 | 
						|
			printf "\n"
 | 
						|
			getfacl --absolute-names --skip-base "$@"
 | 
						|
		fi
 | 
						|
	fi
 | 
						|
}
 | 
						|
 | 
						|
# Source files for miscannellious modifications.
 | 
						|
 | 
						|
# acme.sh
 | 
						|
if [ -f ~/.acme.sh/acme.sh.env ]; then
 | 
						|
	source ~/.acme.sh/acme.sh.env
 | 
						|
fi
 | 
						|
 | 
						|
# .custom
 | 
						|
if [ -f ~/.custom ]; then
 | 
						|
	source ~/.custom
 | 
						|
fi
 | 
						|
 | 
						|
# .bash_custom
 | 
						|
if [ -f ~/.bash_custom ]; then
 | 
						|
	source ~/.bash_custom
 | 
						|
fi
 | 
						|
 | 
						|
# vim: filetype=bash
 |