mirror of
https://gitea.blesmrt.net/mikaela/shell-things.git
synced 2024-12-23 11:12:48 +01:00
846 lines
27 KiB
Bash
Executable File
846 lines
27 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
UNAME=$(uname)
|
||
# TOC
|
||
# Defaults etc... M0TZLS
|
||
# Environment 7RS56S
|
||
# Aliases RJ706I
|
||
# Functions ZGC5QQ
|
||
|
||
# enable terminal bell
|
||
|
||
if [ -f /usr/bin/xset ]; then
|
||
(xset b on &)
|
||
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='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
|
||
else
|
||
PS1='${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='\033[1;31m\u@\h:\w\$\033[0m '
|
||
else
|
||
PS1='\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
|
||
|
||
# enable color support of ls and also add handy aliases
|
||
if [ -x /usr/bin/dircolors ]; then
|
||
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
|
||
alias ls='ls --color=always'
|
||
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'
|
||
fi
|
||
|
||
# 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:
|
||
# 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
|
||
|
||
# Show the hostname, uptime and users logged in on shell start
|
||
if hash hostname 2>/dev/null; then
|
||
(hostname &)
|
||
fi
|
||
(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
|
||
|
||
(printf "⚧ Aferoj emas funkcii sin mem.\n\tFaru jogon, sentu, ne provu perfektecon.\n\t\tDancu kiel neniu rigardas, kvankam estu vidita kaj aŭdata.\n")
|
||
#(printf "⚧ Your adventure begins in the dead of night.\n⚧ Your road won't be easy, but a rising sun awaits your journey's end.\n\n")
|
||
(printf "\n⚧\tThat's what I am, that's what I'll always be\n⚧\tI don't wanna be silent 'cause this is my destiny\n⚧\tThat's what I was, that's what feels good to me\n⚧\tAnd nothing will change me, that's what I'm meant to be.\n⚧\t\t—Conchita Wurst: That's What I Am\n\n")
|
||
#(printf "https://en.m.wikipedia.org/wiki/First_they_came_...#Text\n")
|
||
|
||
# fix dircolors for Selenized https://github.com/jan-warchol/selenized/blob/master/other-apps/dircolors/README.md
|
||
export LS_COLORS="$LS_COLORS:ow=1;7;34:st=30;44:su=30;41"
|
||
|
||
##### 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/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"
|
||
UNAME=$(uname)
|
||
CPUARCH=$(uname -p)
|
||
|
||
# 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
|
||
|
||
# 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 .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)' ';'"
|
||
|
||
## -- 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
|
||
# 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
|
||
|
||
## -- End of aliases which are saved from Ubuntu default bashrc. --
|
||
|
||
# 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 "
|
||
|
||
# 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 "
|
||
|
||
# To have less handle ls colours
|
||
alias less="less -R "
|
||
|
||
# "su -" with/without sudo
|
||
alias ssu="sudo su -"
|
||
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 +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 to ssh-agent
|
||
alias fineid="ssh-add -s /usr/lib64/libcryptoki.so"
|
||
|
||
# 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"
|
||
|
||
# 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'"
|
||
|
||
# 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/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"
|
||
|
||
# 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://gitea.blesmrt.net/Mikaela/shell-things.git
|
||
git fetch --all
|
||
git pull
|
||
git verify-commit HEAD
|
||
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://gitea.blesmrt.net/Mikaela/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 fixes nodejs on Debian based systems.
|
||
# (Everything expects nodejs to be called as node, but it's not with Debian.)
|
||
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
|
||
}
|
||
|
||
# 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/gitea.blesmrt.net/Mikaela/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'
|
||
nvim $@
|
||
}
|
||
else
|
||
vim() {
|
||
echo 'nvim not found'
|
||
\vim $@
|
||
}
|
||
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
|