307 lines
5.9 KiB
Bash
307 lines
5.9 KiB
Bash
|
#!/usr/bin/zsh
|
||
|
# vim: set fdm=marker fmr={{{,}}}:
|
||
|
|
||
|
stty -ixon
|
||
|
|
||
|
# Compinstall {{{
|
||
|
zstyle ':completion:*' completer _complete _ignored _correct _approximate
|
||
|
zstyle ':completion:*' matcher-list '' 'm:{[:lower:]}={[:upper:]} m:{[:lower:][:upper:]}={[:upper:][:lower:]} r:|[._- :]=** r:|=**' 'l:|=* r:|=*'
|
||
|
zstyle ':completion:*' max-errors 5
|
||
|
zstyle ':completion:*' use-cache yes
|
||
|
zstyle ':completion::complete:grunt::options:' expire 1
|
||
|
zstyle ':completion:*' prompt '%e errors'
|
||
|
zstyle :compinstall filename '~/.zshrc'
|
||
|
autoload -Uz compinit
|
||
|
compinit
|
||
|
# }}}
|
||
|
|
||
|
# Zsh-newuser-install {{{
|
||
|
HISTFILE=~/.histfile
|
||
|
HISTSIZE=1000
|
||
|
SAVEHIST=1000
|
||
|
setopt appendhistory autocd extendedglob notify autopushd
|
||
|
unsetopt beep nomatch
|
||
|
bindkey -v
|
||
|
# }}}
|
||
|
|
||
|
# Basic options {{{
|
||
|
set -o vi
|
||
|
umask 022
|
||
|
export VIRTUAL_ENV_DISABLE_PROMPT=1
|
||
|
# export PATH=~/.local/bin:~/.cabal/bin:$PATH:~/code/go/bin:~/bin:~/npm/bin:~/.gem/ruby/2.1.0/bin:~/.gem/ruby/2.0.0/bin:/home/smith/bin
|
||
|
# }}}
|
||
|
|
||
|
# Zsh highlight highlighters {{{
|
||
|
ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern root)
|
||
|
# }}}
|
||
|
|
||
|
# More basic options {{{
|
||
|
setopt no_hist_verify
|
||
|
setopt histignorespace
|
||
|
# }}}
|
||
|
|
||
|
# Utility Functions {{{
|
||
|
|
||
|
# Set the terminal's title bar.
|
||
|
function titlebar() {
|
||
|
echo -ne "\033]0;$*\007"
|
||
|
}
|
||
|
|
||
|
function quiet() {
|
||
|
"$@" >/dev/null
|
||
|
}
|
||
|
|
||
|
function quieter() {
|
||
|
"$@" >/dev/null 2>&1
|
||
|
}
|
||
|
|
||
|
# From http://stackoverflow.com/questions/370047/#370255
|
||
|
function path_remove() {
|
||
|
IFS=:
|
||
|
# convert it to an array
|
||
|
t=($PATH)
|
||
|
unset IFS
|
||
|
# perform any array operations to remove elements from the array
|
||
|
t=(${t[@]%%$1})
|
||
|
IFS=:
|
||
|
# output the new array
|
||
|
echo "${t[*]}"
|
||
|
}
|
||
|
|
||
|
# }}}
|
||
|
|
||
|
# Force screen to use zsh {{{
|
||
|
# }}}
|
||
|
|
||
|
# Environment {{{
|
||
|
# }}}
|
||
|
|
||
|
# Directory Stuff {{{
|
||
|
|
||
|
# Always use color output for `ls`
|
||
|
|
||
|
# Directory listing
|
||
|
|
||
|
# Easier navigation: .., ..., -
|
||
|
|
||
|
# File size
|
||
|
|
||
|
# Recursively delete `.DS_Store` files
|
||
|
|
||
|
# Create a new directory and enter it
|
||
|
function md() {
|
||
|
mkdir -p "$@" && cd "$@"
|
||
|
}
|
||
|
|
||
|
# }}}
|
||
|
|
||
|
# MPD/MPC stuff {{{
|
||
|
function mp() {
|
||
|
# Test if drive is already mounted
|
||
|
if ! lsblk | grep /media/external >/dev/null; then
|
||
|
if ! sudo mount /media/external; then
|
||
|
echo "External drive not plugged in, or could not mount"
|
||
|
return 1
|
||
|
fi
|
||
|
fi
|
||
|
if (mpc >/dev/null 2>&1); then
|
||
|
ncmpcpp
|
||
|
else
|
||
|
mpd &&
|
||
|
(pgrep mpdscribble || mpdscribble) &&
|
||
|
ncmpcpp
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
# kill mp
|
||
|
function kmp() {
|
||
|
killall ncmpcpp
|
||
|
mpd --kill
|
||
|
|
||
|
local files
|
||
|
|
||
|
if (files=$(lsof 2>&1 | grep -v docker | grep external)); then
|
||
|
echo
|
||
|
echo "==> Still processes using external drive:"
|
||
|
echo
|
||
|
echo $files
|
||
|
else
|
||
|
sudo umount /media/external
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
|
||
|
function mppal() {
|
||
|
mpc search album "$1" | mpc add &&
|
||
|
mpc play;
|
||
|
}
|
||
|
# }}}
|
||
|
|
||
|
# Git stuff {{{
|
||
|
# function ga() { git add "${@:-.}"; } # Add all files by default
|
||
|
# Add non-whitespace changes
|
||
|
# function gc() { git checkout "${@:-master}"; } # Checkout master by default
|
||
|
|
||
|
# open all changed files (that still actually exist) in the editor
|
||
|
function ged() {
|
||
|
local files=()
|
||
|
for f in $(git diff --name-only "$@"); do
|
||
|
[[ -e "$f" ]] && files=("${files[@]}" "$f")
|
||
|
done
|
||
|
local n=${#files[@]}
|
||
|
echo "Opening $n $([[ "$@" ]] || echo "modified ")file$([[ $n != 1 ]] && \
|
||
|
echo s)${@:+ modified in }$@"
|
||
|
q "${files[@]}"
|
||
|
}
|
||
|
|
||
|
# git find-replace
|
||
|
function gfr() {
|
||
|
if [[ "$#" == "0" ]]; then
|
||
|
echo 'Usage:'
|
||
|
echo ' gg_replace term replacement file_mask'
|
||
|
echo
|
||
|
echo 'Example:'
|
||
|
echo ' gg_replace cappuchino cappuccino *.html'
|
||
|
echo
|
||
|
else
|
||
|
find=$1; shift
|
||
|
replace=$1; shift
|
||
|
|
||
|
ORIG_GLOBIGNORE=$GLOBIGNORE
|
||
|
GLOBIGNORE=*.*
|
||
|
if [[ "$#" = "0" ]]; then
|
||
|
set -- ' ' $@
|
||
|
fi
|
||
|
|
||
|
while [[ "$#" -gt "0" ]]; do
|
||
|
for file in `git grep -l $find -- $1`; do
|
||
|
sed -e "s/$find/$replace/g" -i'' $file
|
||
|
done
|
||
|
shift
|
||
|
done
|
||
|
|
||
|
GLOBIGNORE=$ORIG_GLOBIGNORE
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
function vconflicts() {
|
||
|
$EDITOR $(git status --porcelain | awk '/^UU/ { print $2 }')
|
||
|
}
|
||
|
# }}}
|
||
|
|
||
|
# fzf {{{
|
||
|
v() {
|
||
|
local file
|
||
|
file=$(fzf-tmux --query="$1" --select-1 --exit-0)
|
||
|
[ -n "$file" ] && ${EDITOR:-vim} "$file"
|
||
|
}
|
||
|
|
||
|
c() {
|
||
|
local dir
|
||
|
dir=$(find ${1:-*} -path '*/\.*' -prune -o -type d -print 2> /dev/null | fzf +m) && cd "$dir"
|
||
|
}
|
||
|
|
||
|
co() {
|
||
|
local branch
|
||
|
branch=$(git branch -a | sed -s "s/\s*\**//g" | fzf --query="$1" --select-1 --exit-0) && git checkout "$branch"
|
||
|
}
|
||
|
|
||
|
|
||
|
# fh - repeat history
|
||
|
# h() {
|
||
|
# eval $(([ -n "$ZSH_NAME" ] && fc -l 1 || history) | fzf +s | sed 's/ *[0-9]* *//')
|
||
|
# }
|
||
|
|
||
|
# fkill - kill process
|
||
|
fkill() {
|
||
|
ps -ef | sed 1d | fzf-tmux -m | awk '{print $2}' | xargs kill -${1:-9}
|
||
|
}
|
||
|
# }}}
|
||
|
|
||
|
# Tmux utils {{{
|
||
|
kill_detached() {
|
||
|
for sess in $(tmux ls | grep -v attached | sed -s "s/:.*$//"); do
|
||
|
tmux kill-session -t $sess;
|
||
|
done
|
||
|
}
|
||
|
# }}}
|
||
|
|
||
|
# Docker {{{
|
||
|
|
||
|
|
||
|
# dbp foo/bar .
|
||
|
function dbp () {
|
||
|
docker build -t $1 ${@:2} && docker push $1
|
||
|
}
|
||
|
|
||
|
# }}}
|
||
|
|
||
|
# Vagrant {{{
|
||
|
# }}}
|
||
|
|
||
|
# Twitter! {{{
|
||
|
|
||
|
|
||
|
# favelast <username>
|
||
|
function favelast() {
|
||
|
t fave $(t tl -l $1 | head -n1 | first)
|
||
|
}
|
||
|
|
||
|
function rtlast() {
|
||
|
t rt $(t tl -l $1 | head -n1 | first)
|
||
|
}
|
||
|
|
||
|
function tthread() {
|
||
|
t reply $(t tl -l $TWITTER_WHOAMI | head -n1 | first) $@
|
||
|
}
|
||
|
# }}}
|
||
|
|
||
|
# Geeknote {{{
|
||
|
gnc() {
|
||
|
gn create --title $1 --content '' &&
|
||
|
gn find --count=1 "$1"
|
||
|
gn edit 1
|
||
|
}
|
||
|
# }}}
|
||
|
|
||
|
# Systemd aliases {{{
|
||
|
# }}}
|
||
|
|
||
|
# Misc aliases {{{
|
||
|
|
||
|
function fw() { # fix white
|
||
|
local substitution
|
||
|
local substitution='s/\x1b\[90m/\x1b[92m/g'
|
||
|
$@ > >(perl -pe "$substitution") 2> >(perl -pe "$substitution" 1>&2)
|
||
|
}
|
||
|
# }}}
|
||
|
|
||
|
# Grep options {{{
|
||
|
unset GREP_OPTIONS
|
||
|
export GREP_OPTIONS=
|
||
|
# }}}
|
||
|
|
||
|
|
||
|
# Run docker containers {{{
|
||
|
# -d \
|
||
|
# -v $HOME/.pentadactyl:/home/firefox/.pentadactyl:rw \
|
||
|
# -v $HOME/.pentadactylrc:/home/firefox/.pentadactylrc:rw \
|
||
|
# -v $HOME/.mozilla:/home/firefox/.mozilla:rw \
|
||
|
# -v $HOME/.config:/home/firefox/.config \
|
||
|
# -v $HOME/Downloads:/home/firefox/Downloads:rw \
|
||
|
# -v /etc/fonts:/etc/fonts \
|
||
|
# -v /tmp/.X11-unix:/tmp/.X11-unix \
|
||
|
# -v /dev/snd:/dev/snd \
|
||
|
# --net=host \
|
||
|
# -v $XDG_RUNTIME_DIR:$XDG_RUNTIME_DIR \
|
||
|
# -e uid=$(id -u) \
|
||
|
# -e gid=$(id -g) \
|
||
|
# -e DISPLAY=$DISPLAY \
|
||
|
# -e XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR \
|
||
|
# --name firefox \
|
||
|
# --rm -it \
|
||
|
# glittershark/firefox
|
||
|
# }}}
|
||
|
|
||
|
[ -f ./.localrc ] && source ./.localrc
|