# TOC # Defaults etc... M0TZLS # Environment 7RS56S # Aliases RJ706I # Functions ZGC5QQ # uname should be readable in $uname uname=$(uname) UNAME=$(uname) # Dynamic window title via https://stackoverflow.com/a/20772424 ## BREAKS TMUX TITLE CHANGING WHICH IS BETTER THAN THIS. #case $TERM in # (*xterm* | *rxvt*) # Write some info to terminal title. # This is seen when the shell prompts for input. # function precmd { # print -Pn "\e]0;zsh%L %(1j,%j job%(2j|s|); ,)%~\a" # } # Write command and args to terminal title. # This is seen while the shell waits for a command to complete. # function preexec { # printf "\033]0;%s\a" "$1" # } # # ;; #esac # enable terminal bell if [[ -f /usr/bin/xset ]]; then (xset b on&) fi ##### Defaults etc... M0TZLS ##### # This is based on zshrc which came with Debian (Third option in wizard for new users.) # Save history export HISTSIZE=99999 export SAVEHIST=$HISTSIZE setopt hist_ignore_all_dups export HISTFILE=~/.zsh_history setopt INC_APPEND_HISTORY setopt SHARE_HISTORY # Set up the prompt autoload -Uz promptinit # Green for normal user and red for root promptinit if [ $USER = "root" ]; then prompt elite2 red else prompt elite2 green fi # Use emacs keybindings even if our EDITOR is set to vi bindkey -e # Use modern completion system autoload -Uz compinit compinit zstyle ':completion:*' auto-description 'specify: %d' zstyle ':completion:*' completer _expand _complete _correct _approximate zstyle ':completion:*' format 'Completing %d' zstyle ':completion:*' group-name '' zstyle ':completion:*' menu select=2 if [[ $UNAME != Darwin ]]; then eval "$(dircolors -b)" fi zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS} zstyle ':completion:*' list-colors '' zstyle ':completion:*' list-prompt %SAt %p: Hit TAB for more, or the character to insert%s zstyle ':completion:*' matcher-list '' 'm:{a-z}={A-Z}' 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=* l:|=*' zstyle ':completion:*' menu select=long zstyle ':completion:*' select-prompt %SScrolling active: current selection at %p%s zstyle ':completion:*' use-compctl false zstyle ':completion:*' verbose true zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#)*=0=01;31' zstyle ':completion:*:kill:*' command 'ps -u $USER -o pid,%cpu,tty,cputime,cmd' # Show the hostname, uptime and users logged in on shell start (hostname&) (uptime&) (echo "") if [[ $UNAME != Darwin ]] then; (who -H -w -u|head -n10&) (echo "") # (last -10 -w -x&) fi if [[ $UNAME = Darwin ]]; then (who -H -u|head -n10&) (echo "") (last -10&) fi ##### Environment 7RS56S ##### # Environment should be placed to .environment or .zsh_environment (or .zshenv). # Source before mentioned locations if they exist. # .environment if [ -f ~/.environment ]; then source ~/.environment fi # .zsh_environment if [ -f ~/.zsh_environment ]; then source ~/.zsh_environment fi # .zshenv (Yes, I know that this is sourced by every zsh session even if this isn't here, but I just want to write it). if [ -f ~/.zshenv ]; then source ~/.zshenv 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 # Sets the default editor. #export EDITOR=vim # MIKAELA_GREP MIKAELA_GREP_ENVIRONMENT # Set TZ to local timezone for sending over SSH TZ=$(date +%Z) # Sets PATH. To add another path, add : to string below. PATH=$HOME/.local/bin:$HOME/bin:$HOME/go/bin:$HOME/.local/share/flatpak/exports/bin:/var/lib/flatpak/exports/bin:/snap/bin:/usr/local/bin:/usr/local/sbin:/usr/local/games:/usr/bin:/usr/sbin:/usr/games:/bin:/sbin:/games:$PATH # Add RubyGems to PATH if hash ruby 2>/dev/null; then PATH="$(ruby -e 'print Gem.user_dir')/bin:$PATH" 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]}') # 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' # Sets environment variable CPUARCH to output of "uname -p" & UNAME to "uname" CPUARCH=$(uname -p) # 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 # 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 # OS X ls colours (copied from https://apple.stackexchange.com/questions/33677/ export CLICOLOR=1 export LSCOLORS=gxBxhxDxfxhxhxhxhxcxcx # znc uses this variable for figuring out hostname #export HOSTNAME=$(hostname --fqdn) ##### Aliases RJ706I ##### # To get sudo work with aliases. alias sudo="sudo " # 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 .zsh_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 : | 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)' ';'" # ZSH specific. # I think that "theme" is more describing than "prompt". alias theme="prompt " ## -- Start of aliases which are saved from Ubuntu default bashrc. -- # enable color support of ls and also add handy aliases if [[ $UNAME != Darwin ]]; then alias ls='ls --color=always' fi alias dir='dir --color=always' alias vdir='vdir --color=always' alias grep='grep -i --color=always' alias fgrep='fgrep -i --color=always' alias egrep='egrep -i --color=always' # some more ls aliases if [[ "$UNAME" != "Darwin" ]]; then alias ll='ls -alFh --color=always' && alias la='ls -A --color=always' && alias l='ls -CF --color=always' fi if [[ $UNAME = Darwin ]]; then alias ls="ls -Gp" alias ll="ls -alFHGp" alias l="ls -CFGp" fi # Add an "alert" alias for long running commands. Use like so: 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$//'\'')"' ## -- End of aliases which are saved from Ubuntu default bashrc. -- # 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 " # SSHGuard seems to prefer users to run this always when connecting with keys in ssh-agent... if [[ $UNAME != Darwin ]]; then alias ssh-add="\ssh-add -D && \ssh-add " fi # 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 " # systemd runlevels/targets alias currenttargets="systemctl list-units --type=target" alias telsystemd="systemctl isolate " alias defaulttarget="systemctl enable " # For getting timestamps in history alias history="history -i " # To have less handle ls colours alias less="less -R " # "su -" with/without sudo alias ssu="sudo su -" alias suu="su -" # 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 +x inxi && cd" #alias inxi-install-root="cd /usr/local/bin;\wget -Nc https://github.com/smxi/inxi/raw/master/inxi;chmod +x inxi;./inxi -U;cd" #alias inxi-update="inxi -U" # FINEID #alias ssh-add-sc="ssh-add -s $(find /usr/*lib -name 'opensc-pkcs11.so')" alias ssh-add-sc-pub="\ssh-add -L" # Homebrew #alias homebrew-install="cd ~;git clone https://github.com/Homebrew/homebrew.git --depth=1;mkdir -p .local;rsync -aP homebrew/* .local;rsync -aP homebrew/.* .local;rm -rf homebrew" #alias homebrew-install-root="cd /usr;git clone https://github.com/Homebrew/homebrew.git --depth=1;mkdir -p local;rsync -aP homebrew/* local;rsync -aP homebrew/.* local/;chmod -R 755 local;chown -R root:wheel local;rm -rf homebrew" #alias linuxbrew-install="cd ~;git clone https://github.com/Homebrew/linuxbrew.git --depth=1;mkdir -p .local;rsync -aP linuxbrew/* .local;rsync -aP linuxbrew/.* .local;rm -rf linuxbrew" #alias linuxbrew-install-root="cd /usr;git clone https://github.com/Homebrew/linuxbrew.git --depth=1;mkdir -p local;rsync -aP linuxbrew/* local;rsync -aP linuxbrew/.* local/;chmod -R 755 local;chown -R root:wheel local;rm -rf linuxbrew" #export HOMEBREW_LOGS=$HOME/.cache/Homebrew/Logs # 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" # Simple HTTPd with Python. alias python-httpd="python3 -m http.server" # 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|` 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" # pip alias pip="python -m pip" alias pip3="python3 -m pip" alias pypypip="pypy -m pip" alias pypypip3="pypy3 -m pip" # 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'" # I don't want to reinstall exact same versions that I have alias pacman="LANG=en pacman --needed" #fi # 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 so Ctrl-Alt-Backspace won't lead to unlocked TTY. alias startx="exec \startx" # 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" # 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" # same for sks, be careful of the flooding attacks alias gpg-sks="gpg --keyserver hkps://hkps.pool.sks-keyservers.net" alias gpg-sks-recv="gpg --keyserver hkps://hkps.pool.sks-keyservers.net --recv-keys" 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 -plnt" # mpv music & music shuffle alias mpvm="mpv --no-video" alias mpvms="mpv --no-video --shuffle" # Allow custom aliases to be put in .aliases or .zsh_aliases . # .aliases if [ -f ~/.aliases ]; then source ~/.aliases fi # .zsh_aliases if [ -f ~/.zsh_aliases ]; then source ~/.zsh_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 zshrc of bioterror ( https://ricecows.org/configs/zsh/.zshrc ). 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://gitea.blesmrt.net/Mikaela/shell-things.git git pull 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://gitea.blesmrt.net/Mikaela/shell-things.git $SHELL_THINGS_REPO cd $SHELL_THINGS_REPO 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 fixes nodejs on Debian based systems. # (Everything expects nodejs to be called as node, but it's not with Debian.) function fix-node { if [[ $USER = "root" && -f /usr/bin/nodejs && ! -f /usr/bin/node && ! -f /usr/local/bin/node ]] then; ln -s /usr/bin/nodejs /usr/local/bin/node fi mkdir -p $HOME/.local/bin if [[ -f /usr/bin/nodejs && ! -f /usr/bin/node && ! -f /usr/local/bin/node && ! -f $HOME/.local/bin/node ]] then; ln -s /usr/bin/nodejs $HOME/.local/bin/node fi } # 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 } # 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 # .zsh_custom if [ -f ~/.zsh_custom ]; then source ~/.zsh_custom fi # Warnings if [ -f ~/.warnings ]; then source ~/.warnings fi