shell-things/rc/zshrc

750 lines
24 KiB
Bash
Raw Normal View History

2011-10-29 09:50:56 +02:00
# TOC
# Defaults etc... M0TZLS
# Environment 7RS56S
# Aliases RJ706I
# Functions ZGC5QQ
2012-09-16 14:27:48 +02:00
# uname should be readable in $uname
uname=$(uname)
2014-05-29 14:39:41 +02:00
UNAME=$(uname)
2012-09-16 14:27:48 +02:00
2015-09-10 17:56:04 +02:00
# Dynamic window title via https://stackoverflow.com/a/20772424
## BREAKS TMUX TITLE CHANGING WHICH IS BETTER THAN THIS.
#case $TERM in
# (*xterm* | *rxvt*)
2015-09-10 17:56:04 +02:00
# 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"
# }
2015-09-10 17:56:04 +02:00
# 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
2015-09-10 17:56:04 +02:00
# enable terminal bell
if [[ -f /usr/bin/xset ]];
then
(xset b on&)
fi
2011-10-29 09:50:56 +02:00
##### Defaults etc... M0TZLS #####
# This is based on zshrc which came with Debian (Third option in wizard for new users.)
2014-10-07 07:41:24 +02:00
# 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
2012-12-25 10:32:36 +01:00
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 "")
2014-05-01 13:50:14 +02:00
2013-02-17 08:11:44 +01:00
if [[ $UNAME != Darwin ]] then;
(who -H -w -u|head -n10&)
(echo "")
2015-01-20 18:45:03 +01:00
# (last -10 -w -x&)
2013-02-17 08:11:44 +01:00
fi
2014-05-01 13:50:14 +02:00
if [[ $UNAME = Darwin ]]; then
(who -H -u|head -n10&)
(echo "")
(last -10&)
2014-05-01 13:50:14 +02:00
fi
2011-10-29 09:50:56 +02:00
##### 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
2011-10-01 15:32:18 +02:00
fi
2011-10-29 09:50:56 +02:00
# .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).
2011-10-01 15:32:18 +02:00
if [ -f ~/.zshenv ]; then
source ~/.zshenv
fi
# Enable core files.
(ulimit -c unlimited&)
2020-02-13 13:14:33 +01:00
# More colours
if [[ $TERM == 'xterm' ]]; then
export TERM=xterm-256color
fi
if [[ $TERM == 'screen' ]]; then
export TERM=screen-256color
fi
# Sets the default editor.
2020-02-13 13:14:33 +01:00
#export EDITOR=vim # MIKAELA_GREP MIKAELA_GREP_ENVIRONMENT
2011-10-29 09:50:56 +02:00
# Set TZ to local timezone for sending over SSH
TZ=$(date +%Z)
2011-10-29 09:50:56 +02:00
# Sets PATH. To add another path, add :</path/to/new/path> 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
2014-04-29 14:23:54 +02:00
# 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]}')
2012-12-21 14:24:51 +01:00
# Colours to less
# Copied from https://nion.modprobe.de/blog/archives/572-less-colors-for-man-pages.html
2012-12-21 14:24:51 +01:00
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'
2011-10-29 09:50:56 +02:00
2020-02-13 13:14:33 +01:00
# Sets environment variable CPUARCH to output of "uname -p" & UNAME to "uname"
CPUARCH=$(uname -p)
# Copied from https://homepages.see.leeds.ac.uk/~eeaol/notes/2012/03/how_to_only_type_ssh_passphrase_once/
export SSH_AUTH_SOCK=/tmp/$USER.agent
ssh-agent -a /tmp/$USER.agent > /dev/null 2>&1
2014-04-20 20:39:30 +02:00
# 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
2014-04-20 20:39:30 +02:00
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
2015-07-22 14:39:26 +02:00
# znc uses this variable for figuring out hostname
2020-02-13 13:14:33 +01:00
#export HOSTNAME=$(hostname --fqdn)
2015-07-22 14:39:26 +02:00
2011-10-29 09:50:56 +02:00
##### Aliases RJ706I #####
# To get sudo work with aliases.
alias sudo="sudo "
# Moving between directories:
alias ..="cd .."
2020-02-13 13:14:33 +01:00
# Use htop instead of top if available
if hash htop 2>/dev/null; then
alias top="htop"
fi
2011-10-29 09:50:56 +02:00
# 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"
2011-10-29 09:50:56 +02:00
# 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"
2011-10-29 09:50:56 +02:00
2020-02-13 13:14:33 +01:00
# NMAP specific. All nmap things should be run with sudo.
2011-10-29 09:50:56 +02:00
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 <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 '
2011-10-29 09:50:56 +02:00
# TMUX specific
alias tmux="tmux -2u"
alias attach="tmux attach-session"
alias detach="tmux detach"
2011-10-29 09:50:56 +02:00
# 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 "
2011-10-29 09:50:56 +02:00
# Translating plugins in Limnoria
alias supybot-generate-messages.pot="pygettext --docstrings config.py plugin.py"
2020-02-13 13:14:33 +01:00
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)' ';'"
2011-10-29 09:50:56 +02:00
# 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'
2011-10-29 09:50:56 +02:00
# 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
2014-05-01 13:50:14 +02:00
if [[ $UNAME = Darwin ]]; then
alias ls="ls -Gp"
alias ll="ls -alFHGp"
alias l="ls -CFGp"
2014-05-01 13:50:14 +02:00
fi
2011-10-29 09:50:56 +02:00
# 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$//'\'')"'
2020-02-13 13:14:33 +01:00
## -- End of aliases which are saved from Ubuntu default bashrc. --
2011-10-29 09:50:56 +02:00
# 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"
2011-10-29 09:50:56 +02:00
# 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"
2011-10-29 09:50:56 +02:00
# 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!
2020-02-13 13:14:33 +01:00
if hash gpg2 2>/dev/null; then
alias gpg=gpg2
export KEYBASE_GPG=gpg2
fi
2014-05-28 18:20:12 +02:00
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.
2015-02-01 12:32:50 +01:00
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"
2014-05-29 23:01:03 +02:00
alias git-changelog="git log --oneline --decorate"
alias git-changelog-color="git log --oneline --decorate --color"
2020-02-13 13:14:33 +01:00
# Line ending converting with flip
alias unixle="flip -ub "
alias msdosle="flip -mb "
2012-12-21 11:54:59 +01:00
# 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 "
2020-02-13 13:14:33 +01:00
# I have function ex so these are ex-* to avoid conflict.
2012-12-21 11:54:59 +01:00
# 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 "
2012-12-21 11:54:59 +01:00
# "su -" with/without sudo
alias ssu="sudo su -"
alias suu="su -"
2013-01-01 10:30:37 +01:00
# Who command which I use with Conky
alias cwho="who -H -w -u"
# inxi - https://smxi.org/docs/inxi.htm
2020-02-13 13:14:33 +01:00
#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
2020-02-13 13:14:33 +01:00
#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
2020-02-13 13:14:33 +01:00
# What is this?
#alias osx-server-caching-interface="serveradmin settings caching:Interface ="
alias osx-show-hidden-files="defaults write com.apple.finder AppleShowAllFiles"
2020-02-13 13:14:33 +01:00
# 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.
2020-02-13 13:14:33 +01:00
alias python-httpd="python3 -m http.server"
# Resetting different desktop environments
2020-02-13 13:14:33 +01:00
# 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"
2015-04-26 17:20:21 +02:00
# Send command output to sprunge.us or ix.io `command|<sprungeus|ixio>`
alias sprungeus="curl -F 'sprunge=<-' https://sprunge.us"
2015-04-26 17:20:21 +02:00
alias ixio="curl -F 'f:1=<-' ix.io"
# Copy-paste mtr output more easily
2014-12-30 17:31:16 +01:00
alias mtrp4="mtr -rw4c 10"
alias mtrp6="mtr -rw6c 10"
# pip
alias pip="python -m pip"
alias pip3="python3 -m pip"
2020-02-13 13:14:33 +01:00
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.
2020-02-13 13:14:33 +01:00
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'
2015-02-02 11:32:20 +01:00
# Getting SSIDs and keys from connmann (Jolla)
alias connman-wlans='grep -E "Name|Passphrase" /var/lib/connman/wifi*/settings --no-filename'
2015-02-02 11:32:20 +01:00
# 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
2015-03-22 17:27:42 +01:00
2015-06-12 17:20:15 +02:00
# Sailfish Network status, via IRC
alias sailfish-nstatus='dbus-send --system --type=method_call --print-reply --dest=net.connman / net.connman.Manager.GetServices|less'
2015-07-22 14:41:26 +02:00
# apt build depedencies (without installing)
alias apt-builddep="apt-rdepends --build-depends --follow=DEPENDS"
2020-02-13 13:14:33 +01:00
# 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"
# ports that are being listened to
alias netstat-listening-ports="netstat -plnt"
# Allow custom aliases to be put in .aliases or .zsh_aliases .
2011-10-29 09:50:56 +02:00
# .aliases
if [ -f ~/.aliases ]; then
source ~/.aliases
fi
# .zsh_aliases
if [ -f ~/.zsh_aliases ]; then
source ~/.zsh_aliases
2011-10-01 15:32:18 +02:00
fi
2011-10-29 09:50:56 +02:00
##### Functions ZGC5QQ #####
# GEOIP lookup, improved from the ultimate bashrc https://goo.gl/qGK5j
2011-10-29 09:50:56 +02:00
function geoip() {
2015-03-04 12:04:32 +01:00
geoiplookup $1
geoiplookup6 $1
2011-10-29 09:50:56 +02:00
}
2020-02-13 13:14:33 +01:00
# TODO: Is it bash or zshrc?
# ex command. Copied from zshrc of bioterror ( https://ricecows.org/configs/zsh/.zshrc ). Original comment below:
2011-10-29 09:50:56 +02:00
## 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"
2011-10-01 15:32:18 +02:00
fi
2011-10-29 09:50:56 +02:00
}
# 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
2019-08-16 16:51:43 +02:00
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 ""
2019-08-16 16:51:43 +02:00
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...
2014-12-27 10:22:48 +01:00
bash -x ./install
echo ""
echo "shell-things: Installing finished."
echo ""
echo ""
2020-02-13 13:14:33 +01:00
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.
2020-02-13 13:14:33 +01:00
#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!
2020-02-13 13:14:33 +01:00
#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).
2015-02-27 11:49:31 +01:00
serversslcertfp () {
SSSLCFFN=$(openssl s_client -showcerts -connect $1 < /dev/null)
# To see all validity information
echo "$SSSLCFFN"
2015-02-27 11:49:31 +01:00
# 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
2015-02-27 11:49:31 +01:00
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() {
2015-03-08 18:42:51 +01:00
nmap -Pn $1 -p $2 --script +ssl-enum-ciphers
}
2015-02-12 12:56:40 +01:00
# 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
}
# Merges the last $1 commits into one
2015-06-12 18:30:23 +02:00
git-squash () {
git reset --soft HEAD~$1
git commit
}
# Combining mtrp4 & mtrp6
2015-06-24 19:06:54 +02:00
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
}
2011-10-29 09:50:56 +02:00
# Source files for miscannellious modifications.
# acme.sh
if [ -f ~/.acme.sh/acme.sh.env ]; then
source ~/.acme.sh/acme.sh.env
fi
2011-10-29 09:50:56 +02:00
# .custom
if [ -f ~/.custom ]; then
source ~/.custom
fi
2011-10-29 09:50:56 +02:00
# .zsh_custom
2011-10-02 16:22:09 +02:00
if [ -f ~/.zsh_custom ]; then
source ~/.zsh_custom
fi
2012-07-14 19:46:08 +02:00
# Warnings
if [ -f ~/.warnings ]; then
source ~/.warnings
fi