From eac6c0a2b3bfb8a8ded117918ff0bfd30e974aea Mon Sep 17 00:00:00 2001 From: Ryan Kavanagh Date: Mon, 13 Dec 2021 16:19:59 -0500 Subject: Templated zshrc --- dot_zshrc | 654 --------------------------------------------------------- dot_zshrc.tmpl | 653 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 653 insertions(+), 654 deletions(-) delete mode 100644 dot_zshrc create mode 100644 dot_zshrc.tmpl diff --git a/dot_zshrc b/dot_zshrc deleted file mode 100644 index 54d4e57..0000000 --- a/dot_zshrc +++ /dev/null @@ -1,654 +0,0 @@ -# -# ~/.zshrc -# Z shell configuration file. -# CREDITS -# File was first taken from the following location: -# -# http://www.tomaw.net/configs/zshrc -# -# Some additions were made by me, Jonathan Patrick Davies . -# Among these are the Launchpad, Debian, Wikipedia/Wikitravel, BBC search, -# Demonoid, Lonely Planet, Urbandictionary and other various functions. I also -# implemented a few "if" statements to stop zsh complaining about any missing -# objects and placed the dircolors support. -# -# The forkex() function is thanks to Siegfried-Angel Gevatter Pujals -# . -# -# Some of this file is thanks to , some is take from -# spider's zshrc, and some from the zshwiki.org. -# Some bash functions are nicked from ciaranm's -# bashrc. -# -# READ ME -# -# • Remember to change the stuff specific to me! It's all at the top of -# this file. -# -# • You can obviously only get the most out of this file if you take the -# time to read through the comments. Of course, you can still experience -# zsh's superiority by simply plugging this file in and using it. -# - -# BEGIN LOCAL - -export LANG="LOCALE" -export LC_TIME="en_GB.UTF-8" -export LC_COLLATE=C # force strict lexicographic sorting -export TIME_STYLE=long-iso # make ls -l use YYYY-MM-DD in dired -export TZ="America/Toronto" # Force our time zone this location. -export EDITOR="vim" # Long live vim (as our editor). -export NAME="Ryan Kavanagh" # Our name. -export EMAIL="rak@rak.ac" # Our email address. -export GPGKEY="4E469519ED677734268FBD958F7BF8FC4A11C97A" # Our GnuPG key ID. -export DEBFULLNAME=$NAME # These are used by Debian packaging... -export DEBEMAIL="rak@debian.org" # ...programs. -export DEBSIGN_KEYID=$GPGKEY # Key ID for signing Debian packages. -export BZR_EMAIL="$NAME <$EMAIL>" # Override email for Bazaar. -export GIT_AUTHOR_NAME=$NAME -export DARCS_EMAIL="$NAME <$EMAIL>" -export QUILT_PATCHES=debian/patches -if [[ `hostname` = "demeter.rak.ac" ]]; then - export PATH=${HOME}/bin:/opt/local/bin:/opt/local/sbin:/usr/sbin:/sbin:$PATH:${GEM_BIN}:${HOME}/.local/bin/ - export MANPATH=/opt/local/share/man:$MANPATH -else - export PATH=${HOME}/bin:/usr/sbin:/sbin:$PATH:${GEM_BIN}:${HOME}/.local/bin/ -fi -export MANWIDTH=80 -export MANOPT="-L en" -export PAGER=less -export LESS=-FQXR -export PDFVIEWER=evince -export BROWSER=firefox -export TEXMFHOME=${HOME}/.texmf -export KRB5CCNAME=DIR:${HOME}/.cache/krb5cc # kerberos credentials cache - -alias apt-upgrade='sudo apt-get update && sudo apt-get dist-upgrade' -alias dbuild='GPG_TTY=$(tty) debuild -S -sa -k$GPGKEY' -alias itp='reportbug -M -B debian --email rak@debian.org --paranoid -K $GPGKEY wnpp' -alias sneezymud='nc play.sneezymud.com 7900' -alias news='tin -g pqnews.cogeco.ca' -alias 1920s='mplayer -playlist http://kara.fast-serv.com:8398/listen.pls' -alias dismuke='mplayer -playlist http://early1900s.org/radiodismuke/radiodismuke.ram' -alias mplayer-fb='mplayer -vo fbdev' -alias links2-fb='links2 -driver fb' -alias svbuildi='svn-buildpackage --svn-ignore-new --svn-builder="debuild -S -sa -k$GPGKEY"' -alias svbuild='svn-buildpackage --svn-builder="debuild -S -sa -k$GPGKEY"' -alias gibuild='git-buildpackage --git-builder="sbuild -sAd u"' -alias gibuildi='git-buildpackage --git-ignore-new --git-builder="sbuild -sAd u"' -alias dquilt="quilt --quiltrc=${HOME}/.quiltrc-dpkg" -alias vi='vim' -alias sm='tmux attach -t mail || tmux -f ${HOME}/.tmux-mail.conf attach -t mail' -alias sshfw='ssh -oForwardAgent=yes' -alias slpr="lpr -P scs_public -o Staple=1Staple\(Left\) -o KMDuplex=True" - -# END LOCAL - -fpath=($fpath - /home/ryan/.zen/zsh/scripts - /home/ryan/.zen/zsh/zle) -autoload -U zen - -# Ensure that we possess a ~/.zsh/ directory. This is required for the -# ~/.zsh/history file. -if [ ! -d $HOME/.zsh/ ]; then - mkdir -p $HOME/.zsh/ -fi - -# Alias/custom commands -# -# Many of these options don's exist on BSD rm/cp/mkdir/ln/etc. -# -# Some are just in case - for 'rm', 'cp' and 'mv' - ask about overwriting or -# deleting files. -# Furthermore, be verbose about what each command is performing to be present of -# what is occuring every time. -if [[ `uname` = "Linux" ]]; then - alias cp="cp -iv" - alias mkdir="mkdir -v" - alias mv="mv -iv" - alias ln="ln -v" - # Only delete files on the current file system to avoid removing recursively - # from bind mounts. - alias rm="rm -iv --one-file-system" - - alias grep="grep --colour=auto" - - alias chown="chown -v" - alias chmod="chmod -v" - alias ls="ls --classify --color=always" # Add all colours and - # have fancy symbols for files, etc. -elif [[ `uname` = "OpenBSD" && -x /usr/local/bin/colorls ]]; then - alias ls="colorls -G" -fi - -fpath=($fpath $HOME/.zsh/func) - -# Prompt theme. -autoload -U promptinit; promptinit -# prompt walters - -# Colours. -autoload -U colors; colors -setopt promptsubst - -# Give us a prompt along the lines of: -# -# jpds@topr> -# -#export PS1="%{$fg[red]%}%n%{$reset_color%}@%{$fg[green]%}%m%{$reset_color%}%\> " - -# Change word boundary characters. Nabbed from -# http://zshwiki.org/KeyBindings. - -# By default: export WORDCHARS='*?_-.[]~=/&;!#$%^(){}<>' -# We remove the slash, period, angle brackets, dash here. -export WORDCHARS='*?_-[]~=&;!#$%^(){}' - -# Follow GNU LS_COLORS for completion menus -zmodload -i zsh/complist - -# Should dircolors exist. Fetch LS_COLORS from it. -if [ "`which dircolors`" != 'dircolors not found' ]; then - eval "$(dircolors -b)" -fi - -zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}" -zstyle ':completion:*:*:kill:*' list-colors '=%*=01;31' - -# Load the completion system -autoload -U compinit; compinit - -compdef _quilt dquilt=quilt # Quilt tab completion for dquilt - -# pattern history search -bindkey '^R' history-incremental-pattern-search-backward - -# Very powerful version of mv implemented in zsh. The main feature I -# know of it that seperates it from the standard mv is that it saves you -# time by being able to use patterns which are expanded into positional -# parameters. So: -# -# slarti@pohl % zmv (*)foo ${1}bar -# -# On a series of files like onefoo, twofoo, threefoo, fivefoo would be -# renamed to onebar twobar threebar fourbar. -# -# Although that's nifty enough, I suspect there are other features I -# don't know about yet... -# -# Read $fpath/zmv for some more basic examples of usage, and also use -# run-help on it :) -autoload -U zmv - -# Like xargs, but instead of reading lines of arguments from standard input, -# it takes them from the command line. This is possible/useful because, -# especially with recursive glob operators, zsh often can construct a command -# line for a shell function that is longer than can be accepted by an external -# command. This is what's often referred to as the "shitty Linux exec limit" ;) -# The limitation is on the number of characters or arguments. -# -# slarti@pohl % echo {1..30000} -# zsh: argument list too long: /bin/echo -# zsh: exit 127 /bin/echo {1..30000} -autoload -U zargs - -# Makes it easy to type URLs as command line arguments. As you type, the -# input character is analyzed and, if it mayn eed quoting, the current -# word is checked for a URI scheme. If one is found and the current word -# is not already quoted, a blackslash is inserted before the input -# caracter. -autoload -U url-quote-magic -zle -N self-insert url-quote-magic - -# zed is a tiny command-line editor in pure ZSH; no other shell could do -# this. zed itself is simple as anything, but it's killer feature for -# me is that it can edit functions on the go with zed -f (or -# fned . This is useful for me when I'm using and defining -# functions interactively, for example, when I'm working through the -# Portage tree in CVS. It allows me to edit a function on the fly, -# without having to call the last definition back up from the history -# and re-edit that in ZLE. It also indents the function, even if it was -# defined on all one line in the line editor, making it easy as anything -# to edit. -# -# ^X^W to save, ^C to abort. -autoload -U zed - -# Incremental completion of a word. After starting this, a list of -# completion choices can be shown after every character you type, which -# can deleted with ^H or delete. Return will accept the current -# completion. Hit tab for normal completion, ^G to get back where you -# came from and ^D to list matches. -autoload -U incremental-complete-word -zle -N incremental-complete-word -bindkey "^Xi" incremental-complete-word - -# This function allows you type a file pattern, and see the results of -# the expansion at each step. When you hit return, they will be -# inserted into the command line. -autoload -U insert-files -zle -N insert-files -bindkey "^Xf" insert-files - -# This set of functions implements a sort of magic history searching. -# After predict-on, typing characters causes the editor to look backward -# in the history for the first line beginning with what you have typed so -# far. After predict-off, editing returns to normal for the line found. -# In fact, you often don't even need to use predict-off, because if the -# line doesn't match something in the history, adding a key performs -# standard completion - though editing in the middle is liable to delete -# the rest of the line. -autoload -U predict-on -zle -N predict-on -zle -N predict-off -bindkey "^X^Z" predict-on -bindkey "^Z" predict-off - -# run-help is a help finder, bound in ZLE to M-h. It doesn't need to be -# autoloaded to work - the non-autoloaded version just looks up a man -# page for the command under the cursor, then when that process is -# finished it pulls your old command line back up from the buffer stack. -# However, with the autoloaded function and: -# -# mkdir ~/zsh-help; cd ~/zsh-help MANPAGER="less" man zshbuiltins | \ -# colcrt | perl /usr/share/zsh/4.2.1/Util/helpfiles -# -# It'll work for zsh builtins too. By the way, I've assumed some things -# in that command. ~/zsh-help can be wherever you like, MANPAGER needs -# to be any standard pager (less, pg, more, just not the MANPAGER I have -# defined in this file), colcrt can be col -bx, and the path to -# helpfiles may be different for you (Util may not even be installed -# with your distribution; fair enough, make install doesn't install it. -# Dig up a source tarball and everything is in there). - -# Load the new one -autoload -U run-help - -# Press Alt-H to show help for command we are currently on. -bindkey '[[A' run-help - -# https://zsh.sourceforge.io/Doc/Release/Options.html#History -# History file name and maximum size. -HISTFILE="$HOME/.zsh/history" -SAVEHIST=500000 -HISTSIZE=600000 # should be > SAVEHIST - -# Save each command’s beginning timestamp (in seconds since the epoch) and the -# duration (in seconds) to the history file. -setopt EXTENDED_HISTORY - -# If the internal history needs to be trimmed to add the current command line, -# setting this option will cause the oldest history event that has a duplicate -# to be lost before losing a unique event from the list. -setopt HIST_EXPIRE_DUPS_FIRST - -# Better locking to avoid corruption -setopt HIST_FCNTL_LOCK - -# When searching for history entries in the line editor, do not display -# duplicates of a line previously found, even if the duplicates are not -# contiguous. -setopt HIST_FIND_NO_DUPS - -# Don't story commands in history if they start with a space -setopt HIST_IGNORE_SPACE - -# Don't store history/fc -l in the history list when invoked -setopt HIST_NO_STORE - -# Remove superfluous blanks from each command line being added to the history -# list. -setopt HIST_REDUCE_BLANKS - -# This option works like APPEND_HISTORY except that new history lines are added -# to the $HISTFILE incrementally (as soon as they are entered), rather than -# waiting until the shell exits. The file will still be periodically re-written -# to trim it when the number of lines grows 20% beyond the value specified by -# $SAVEHIST (see also the HIST_SAVE_BY_COPY option). -setopt INC_APPEND_HISTORY - -# Push History from previous sessions. IF $HISTFILE exists. -if [ -f $HISTFILE ]; then - fc -RI $HISTFILE -fi - -## Key bindings -# You may use: -# % autoload -U zkbd -# % zkbd -# to discover your keys. - - -typeset -U fpath - -prompt wunjo -# Actually, stick with emacs for the moment. The vi keymap just doesn't -# seem to be as complete (even if it's nicer for editing, there's no -# execute-named-cmd bound, for example). -bindkey -e # Emacs keybindings. - -# This function sets the window tile to user@host:/workingdir before each -# prompt. If you're using screen, it sets the window title (works -# wonderfully for 'hardstatus' lines. -precmd() { -# [[ -t 1 ]] || return - case $TERM in - *xterm*|rxvt*) print -Pn "\e]2;%n@%m:%~\a" - ;; - screen*) print -Pn "\ek%n@%m:%~\e\\" - ;; - esac -} - -# This sets the window title to the last run command. -preexec() { -# [[ -t 1 ]] || return - case $TERM in - *xterm*|rxvt*) print -Pn "\e]2;$1\a" - ;; - screen*) print -Pn "\ek$1\e\\" - ;; - esac -} - -# Custom commands. - -loop() { - while [ 1 -eq 1 ]; do - $@ - done -} - -# CTAN downloader - -ctand() { - wget http://mirror.ctan.org/macros/latex/contrib/$1.zip && unzip $1.zip -} - -# For formating text files for a printer -fmtpr() { - fmt --width=62 $@ | LC_ALL=C LANG=C pr -o 10 -W 62 -J -F -l 62 -} - -# Russian -# - -verb.rus() { - curl -s "http://en.wiktionary.org/w/index.php?title=$1&action=edit" | grep 'ru-conj-' - firefox "http://en.wiktionary.org/w/index.php?title=$1" -} - -# -# Debian. -# -debian.bugs.number() { - # Debian Bug Tracker - by number. - w3m "http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=$1" -} - -debian.bugs.package() { - # Debian Bug Tracker - by package. - w3m "http://bugs.debian.org/cgi-bin/pkgreport.cgi?src=$1" -} - -debian.packages() { - # Debian Packages. - # Add 'src:' in front of the package name to search for source packages. - w3m "http://packages.debian.org/$1" -} - -debian.qa.maintainer() { - # Debian QA Maintainer search by email address. - w3m "http://qa.debian.org/developer.php?login=$1" -} - -debian.qa.package() { - # Debian QA Maintainer search by package name. - w3m "http://qa.debian.org/developer.php?package=$1" -} - -debian.qa.pts() { - # Debian Package Tracking system - developers. - w3m "http://packages.qa.debian.org/$1" -} - -debian.qa.task() { - # Debian QA - search for task. - w3m "http://qa.debian.org/developer.php?task=$1" -} - -debian.wiki() { - # Search the Debian Wiki. - w3m "http://wiki.debian.org/?action=fullsearch&value=$@" -} - -# -# Others. -# - -wttr() { - local request="wttr.in/${1-Montreal}" - [ "$(tput cols)" -lt 125 ] && request+='?n' - curl -H "Accept-Language: ${LANG%_*}" --compressed "$request" -} - -google() { - # Google search. - w3m "http://www.google.com/search?q=$@" -} - -wikipedia() { - # Wikipedia search. English section. - w3m "http://en.wikipedia.org/wiki/Special:Search?search=$@" -} - -wiktionary() { - # Search Wiktionary for a term. - w3m "http://en.wiktionary.org/wiki/Special:Search?search=$@" -} - -forkex() { - # Fork program $@ from console. - nohup "$@" >/dev/null 2>&1 <&1 & disown %% -} - -gbp-snap() { - if [[ -e $@ ]]; then - git-dch -aSN $1 - else - git-dch -aS - fi - gpg-mounter - gibuild --git-ignore-new - DSC=`head -n1 debian/changelog | sed -e 's/\(.*\) (\(.*\)).*/\1_\2.dsc/g'` - DIST=`head -n1 debian/changelog | sed -e 's/.* \(.*\);.*/\1/g'` - cd .. - sbuild -d $DIST $DSC -} - -# Pretty menu! -zstyle ':completion:*' menu select=1 -zstyle ':completion:*' select-prompt %SScroll active at %p%s. - -# Completion options. -zstyle ':completion:*' completer _complete _prefix -zstyle ':completion::prefix-1:*' completer _complete -zstyle ':completion:incremental:*' completer _complete _correct -zstyle ':completion:predict:*' completer _complete - -# Completion caching. -zstyle ':completion::complete:*' use-cache 1 -zstyle ':completion::complete:*' cache-path ~/.zsh/cache/$HOST - -# Expand partial paths. -zstyle ':completion:*' expand 'yes' -zstyle ':completion:*' squeeze-slashes 'yes' - -# Include non-hidden directories in globbed file completions -# for certain commands. -zstyle ':completion::complete:*' '\' - -# Use menuselection for PID completion. -zstyle ':completion:*:*:kill:*' menu yes select -zstyle ':completion:*:kill:*' force-list always - -# tag-order 'globbed-files directories' all-files. -zstyle ':completion::complete:*:tar:directories' file-patterns '*~.*(-/)' - -# Do not complete backup files as executables. -zstyle ':completion:*:complete:-command-::commands' ignored-patterns '*\~' - -# Separate matches into groups. -zstyle ':completion:*:matches' group 'yes' - -# With commands like rm, it's annoying if you keep getting offered the same -# file multiple times. This fixes it. Also good for cp, et cetera.. -zstyle ':completion:*:rm:*' ignore-line yes -zstyle ':completion:*:cp:*' ignore-line yes - -# Describe each match group. -zstyle ':completion:*:descriptions' format "%B---- %d%b" - -# Messages/warnings format. -zstyle ':completion:*:messages' format '%B%U---- %d%u%b' -zstyle ':completion:*:warnings' format '%B%U---- no match for: %d%u%b' - -# Describe options in full. -zstyle ':completion:*:options' description 'yes' -zstyle ':completion:*:options' auto-description '%d' - -# Simulate spider's old abbrev-expand 3.0.5 patch -#zstyle ':completion:*:history-words' stop verbose -#zstyle ':completion:*:history-words' remove-all-dups yes -#zstyle ':completion:*:history-words' list false - -# From the zshwiki. Hide CVS files/directories from being completed. -zstyle ':completion:*:(all-|)files' ignored-patterns '(|*/)CVS' -zstyle ':completion:*:cd:*' ignored-patterns '(*/)#CVS' - -# Also from the wiki. Hide uninteresting users from completion. -zstyle ':completion:*:*:*:users' ignored-patterns \ -adm apache bin daemon games gdm halt ident junkbust lp mail mailnull \ -named news nfsnobody nobody nscd ntp operator pcap postgres radvd \ -rpc rpcuser rpm shutdown squid sshd sync uucp vcsa xfs backup bind \ -dictd gnats identd irc man messagebus postfix proxy sys \ -www-data alias amavis at clamav cmd5checkpw cron cyrus dhcp dnscache \ -dnslog foldingathome guest haldaemon jabber ldap mailman mpd mysql \ -nut p2p portage postmaster qmaild qmaill qmailp qmailq qmailr qmails \ -smmsp tinydns vpopmail wasabi zope - -# Approximate completion. From the wiki. -zstyle ':completion:*' completer _complete _match _approximate -zstyle ':completion:*:match:*' original only -zstyle ':completion:*:approximate:*' max-errors 1 numeric - -zstyle ':completion:*:sudo:*' command-path /usr/sbin /usr/bin /sbin /bin \ - /usr/X11R6/bin - -# Options -setopt \ -NO_all_export \ - always_last_prompt \ - always_to_end \ - append_history \ - auto_cd \ - auto_list \ - auto_menu \ - auto_name_dirs \ - auto_param_keys \ - auto_param_slash \ - auto_pushd \ - auto_remove_slash \ -NO_auto_resume \ - bad_pattern \ - bang_hist \ -NO_beep \ - brace_ccl \ - correct_all \ -NO_bsd_echo \ -NO_cdable_vars \ -NO_chase_links \ - clobber \ - complete_aliases \ - complete_in_word \ - correct \ -NO_correct_all \ - csh_junkie_history \ -NO_csh_junkie_loops \ -NO_csh_junkie_quotes \ -NO_csh_null_glob \ - equals \ - extended_glob \ - extended_history \ - function_argzero \ - glob \ -NO_glob_assign \ - glob_complete \ -NO_glob_dots \ -NO_glob_subst \ -NO_hash_cmds \ -NO_hash_dirs \ - hash_list_all \ - hist_allow_clobber \ - hist_beep \ - hist_ignore_dups \ - hist_ignore_space \ -NO_hist_no_store \ - hist_verify \ -NO_hup \ -NO_ignore_braces \ -NO_ignore_eof \ - interactive_comments \ - inc_append_history \ -NO_list_ambiguous \ -NO_list_beep \ - list_types \ - long_list_jobs \ - magic_equal_subst \ -NO_mail_warning \ -NO_mark_dirs \ - menu_complete \ - multios \ - nomatch \ - notify \ -NO_null_glob \ - numeric_glob_sort \ -NO_overstrike \ - path_dirs \ - posix_builtins \ -NO_print_exit_value \ -NO_prompt_cr \ - prompt_subst \ - pushd_ignore_dups \ -NO_pushd_minus \ - pushd_silent \ - pushd_to_home \ - rc_expand_param \ -NO_rc_quotes \ -NO_rm_star_silent \ -NO_sh_file_expansion \ - sh_option_letters \ - share_history \ - short_loops \ -NO_sh_word_split \ -NO_single_line_zle \ -NO_sun_keyboard_hack \ -NO_verbose \ - zle - -# GPG / SSH AGENT - -if [ "xKEYCHAIN" != "x" ]; then - keychain KEYCHAIN - #keychain -Q ${GPGKEY} ${GPGKEY1} - [ -z "$HOSTNAME" ] && HOSTNAME=`uname -n` - [ -f $HOME/.keychain/$HOSTNAME-sh ] && - . $HOME/.keychain/$HOSTNAME-sh - [ -f $HOME/.keychain/$HOSTNAME-sh-gpg ] && - . $HOME/.keychain/$HOSTNAME-sh-gpg -fi - -# ocaml - -. ${HOME}/.opam/opam-init/init.zsh > /dev/null 2> /dev/null || true diff --git a/dot_zshrc.tmpl b/dot_zshrc.tmpl new file mode 100644 index 0000000..b233088 --- /dev/null +++ b/dot_zshrc.tmpl @@ -0,0 +1,653 @@ +# +# ~/.zshrc +# Z shell configuration file. +# CREDITS +# File was first taken from the following location: +# +# http://www.tomaw.net/configs/zshrc +# +# Some additions were made by me, Jonathan Patrick Davies . +# Among these are the Launchpad, Debian, Wikipedia/Wikitravel, BBC search, +# Demonoid, Lonely Planet, Urbandictionary and other various functions. I also +# implemented a few "if" statements to stop zsh complaining about any missing +# objects and placed the dircolors support. +# +# The forkex() function is thanks to Siegfried-Angel Gevatter Pujals +# . +# +# Some of this file is thanks to , some is take from +# spider's zshrc, and some from the zshwiki.org. +# Some bash functions are nicked from ciaranm's +# bashrc. +# +# READ ME +# +# • Remember to change the stuff specific to me! It's all at the top of +# this file. +# +# • You can obviously only get the most out of this file if you take the +# time to read through the comments. Of course, you can still experience +# zsh's superiority by simply plugging this file in and using it. +# + +# BEGIN LOCAL + +export LANG="{{ .locale }}" +export LC_TIME="en_GB.UTF-8" +export LC_COLLATE=C # force strict lexicographic sorting +export TIME_STYLE=long-iso # make ls -l use YYYY-MM-DD in dired +export TZ="America/Toronto" # Force our time zone this location. +export EDITOR="vim" # Long live vim (as our editor). +export NAME="Ryan Kavanagh" # Our name. +export EMAIL="rak@rak.ac" # Our email address. +export GPGKEY="4E469519ED677734268FBD958F7BF8FC4A11C97A" # Our GnuPG key ID. +export DEBFULLNAME=$NAME # These are used by Debian packaging... +export DEBEMAIL="rak@debian.org" # ...programs. +export DEBSIGN_KEYID=$GPGKEY # Key ID for signing Debian packages. +export BZR_EMAIL="$NAME <$EMAIL>" # Override email for Bazaar. +export GIT_AUTHOR_NAME=$NAME +export DARCS_EMAIL="$NAME <$EMAIL>" +export QUILT_PATCHES=debian/patches +if [[ `hostname` = "demeter.rak.ac" ]]; then + export PATH=${HOME}/bin:/opt/local/bin:/opt/local/sbin:/usr/sbin:/sbin:$PATH:${GEM_BIN}:${HOME}/.local/bin/ + export MANPATH=/opt/local/share/man:$MANPATH +else + export PATH=${HOME}/bin:/usr/sbin:/sbin:$PATH:${GEM_BIN}:${HOME}/.local/bin/ +fi +export MANWIDTH=80 +export MANOPT="-L en" +export PAGER=less +export LESS=-FQXR +export PDFVIEWER=evince +export BROWSER=firefox +export TEXMFHOME=${HOME}/.texmf +export KRB5CCNAME=DIR:${HOME}/.cache/krb5cc # kerberos credentials cache + +alias apt-upgrade='sudo apt-get update && sudo apt-get dist-upgrade' +alias dbuild='GPG_TTY=$(tty) debuild -S -sa -k$GPGKEY' +alias itp='reportbug -M -B debian --email rak@debian.org --paranoid -K $GPGKEY wnpp' +alias sneezymud='nc play.sneezymud.com 7900' +alias news='tin -g pqnews.cogeco.ca' +alias 1920s='mplayer -playlist http://kara.fast-serv.com:8398/listen.pls' +alias dismuke='mplayer -playlist http://early1900s.org/radiodismuke/radiodismuke.ram' +alias mplayer-fb='mplayer -vo fbdev' +alias links2-fb='links2 -driver fb' +alias svbuildi='svn-buildpackage --svn-ignore-new --svn-builder="debuild -S -sa -k$GPGKEY"' +alias svbuild='svn-buildpackage --svn-builder="debuild -S -sa -k$GPGKEY"' +alias gibuild='git-buildpackage --git-builder="sbuild -sAd u"' +alias gibuildi='git-buildpackage --git-ignore-new --git-builder="sbuild -sAd u"' +alias dquilt="quilt --quiltrc=${HOME}/.quiltrc-dpkg" +alias vi='vim' +alias sm='tmux attach -t mail || tmux -f ${HOME}/.tmux-mail.conf attach -t mail' +alias sshfw='ssh -oForwardAgent=yes' +alias slpr="lpr -P scs_public -o Staple=1Staple\(Left\) -o KMDuplex=True" + +# END LOCAL + +fpath=($fpath + /home/ryan/.zen/zsh/scripts + /home/ryan/.zen/zsh/zle) +autoload -U zen + +# Ensure that we possess a ~/.zsh/ directory. This is required for the +# ~/.zsh/history file. +if [ ! -d $HOME/.zsh/ ]; then + mkdir -p $HOME/.zsh/ +fi + +# Alias/custom commands +# +# Many of these options don's exist on BSD rm/cp/mkdir/ln/etc. +# +# Some are just in case - for 'rm', 'cp' and 'mv' - ask about overwriting or +# deleting files. +# Furthermore, be verbose about what each command is performing to be present of +# what is occuring every time. +if [[ `uname` = "Linux" ]]; then + alias cp="cp -iv" + alias mkdir="mkdir -v" + alias mv="mv -iv" + alias ln="ln -v" + # Only delete files on the current file system to avoid removing recursively + # from bind mounts. + alias rm="rm -iv --one-file-system" + + alias grep="grep --colour=auto" + + alias chown="chown -v" + alias chmod="chmod -v" + alias ls="ls --classify --color=always" # Add all colours and + # have fancy symbols for files, etc. +elif [[ `uname` = "OpenBSD" && -x /usr/local/bin/colorls ]]; then + alias ls="colorls -G" +fi + +fpath=($fpath $HOME/.zsh/func) + +# Prompt theme. +autoload -U promptinit; promptinit +# prompt walters + +# Colours. +autoload -U colors; colors +setopt promptsubst + +# Give us a prompt along the lines of: +# +# jpds@topr> +# +#export PS1="%{$fg[red]%}%n%{$reset_color%}@%{$fg[green]%}%m%{$reset_color%}%\> " + +# Change word boundary characters. Nabbed from +# http://zshwiki.org/KeyBindings. + +# By default: export WORDCHARS='*?_-.[]~=/&;!#$%^(){}<>' +# We remove the slash, period, angle brackets, dash here. +export WORDCHARS='*?_-[]~=&;!#$%^(){}' + +# Follow GNU LS_COLORS for completion menus +zmodload -i zsh/complist + +# Should dircolors exist. Fetch LS_COLORS from it. +if [ "`which dircolors`" != 'dircolors not found' ]; then + eval "$(dircolors -b)" +fi + +zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}" +zstyle ':completion:*:*:kill:*' list-colors '=%*=01;31' + +# Load the completion system +autoload -U compinit; compinit + +compdef _quilt dquilt=quilt # Quilt tab completion for dquilt + +# pattern history search +bindkey '^R' history-incremental-pattern-search-backward + +# Very powerful version of mv implemented in zsh. The main feature I +# know of it that seperates it from the standard mv is that it saves you +# time by being able to use patterns which are expanded into positional +# parameters. So: +# +# slarti@pohl % zmv (*)foo ${1}bar +# +# On a series of files like onefoo, twofoo, threefoo, fivefoo would be +# renamed to onebar twobar threebar fourbar. +# +# Although that's nifty enough, I suspect there are other features I +# don't know about yet... +# +# Read $fpath/zmv for some more basic examples of usage, and also use +# run-help on it :) +autoload -U zmv + +# Like xargs, but instead of reading lines of arguments from standard input, +# it takes them from the command line. This is possible/useful because, +# especially with recursive glob operators, zsh often can construct a command +# line for a shell function that is longer than can be accepted by an external +# command. This is what's often referred to as the "shitty Linux exec limit" ;) +# The limitation is on the number of characters or arguments. +# +# slarti@pohl % echo {1..30000} +# zsh: argument list too long: /bin/echo +# zsh: exit 127 /bin/echo {1..30000} +autoload -U zargs + +# Makes it easy to type URLs as command line arguments. As you type, the +# input character is analyzed and, if it mayn eed quoting, the current +# word is checked for a URI scheme. If one is found and the current word +# is not already quoted, a blackslash is inserted before the input +# caracter. +autoload -U url-quote-magic +zle -N self-insert url-quote-magic + +# zed is a tiny command-line editor in pure ZSH; no other shell could do +# this. zed itself is simple as anything, but it's killer feature for +# me is that it can edit functions on the go with zed -f (or +# fned . This is useful for me when I'm using and defining +# functions interactively, for example, when I'm working through the +# Portage tree in CVS. It allows me to edit a function on the fly, +# without having to call the last definition back up from the history +# and re-edit that in ZLE. It also indents the function, even if it was +# defined on all one line in the line editor, making it easy as anything +# to edit. +# +# ^X^W to save, ^C to abort. +autoload -U zed + +# Incremental completion of a word. After starting this, a list of +# completion choices can be shown after every character you type, which +# can deleted with ^H or delete. Return will accept the current +# completion. Hit tab for normal completion, ^G to get back where you +# came from and ^D to list matches. +autoload -U incremental-complete-word +zle -N incremental-complete-word +bindkey "^Xi" incremental-complete-word + +# This function allows you type a file pattern, and see the results of +# the expansion at each step. When you hit return, they will be +# inserted into the command line. +autoload -U insert-files +zle -N insert-files +bindkey "^Xf" insert-files + +# This set of functions implements a sort of magic history searching. +# After predict-on, typing characters causes the editor to look backward +# in the history for the first line beginning with what you have typed so +# far. After predict-off, editing returns to normal for the line found. +# In fact, you often don't even need to use predict-off, because if the +# line doesn't match something in the history, adding a key performs +# standard completion - though editing in the middle is liable to delete +# the rest of the line. +autoload -U predict-on +zle -N predict-on +zle -N predict-off +bindkey "^X^Z" predict-on +bindkey "^Z" predict-off + +# run-help is a help finder, bound in ZLE to M-h. It doesn't need to be +# autoloaded to work - the non-autoloaded version just looks up a man +# page for the command under the cursor, then when that process is +# finished it pulls your old command line back up from the buffer stack. +# However, with the autoloaded function and: +# +# mkdir ~/zsh-help; cd ~/zsh-help MANPAGER="less" man zshbuiltins | \ +# colcrt | perl /usr/share/zsh/4.2.1/Util/helpfiles +# +# It'll work for zsh builtins too. By the way, I've assumed some things +# in that command. ~/zsh-help can be wherever you like, MANPAGER needs +# to be any standard pager (less, pg, more, just not the MANPAGER I have +# defined in this file), colcrt can be col -bx, and the path to +# helpfiles may be different for you (Util may not even be installed +# with your distribution; fair enough, make install doesn't install it. +# Dig up a source tarball and everything is in there). + +# Load the new one +autoload -U run-help + +# Press Alt-H to show help for command we are currently on. +bindkey '[[A' run-help + +# https://zsh.sourceforge.io/Doc/Release/Options.html#History +# History file name and maximum size. +HISTFILE="$HOME/.zsh/history" +SAVEHIST=500000 +HISTSIZE=600000 # should be > SAVEHIST + +# Save each command’s beginning timestamp (in seconds since the epoch) and the +# duration (in seconds) to the history file. +setopt EXTENDED_HISTORY + +# If the internal history needs to be trimmed to add the current command line, +# setting this option will cause the oldest history event that has a duplicate +# to be lost before losing a unique event from the list. +setopt HIST_EXPIRE_DUPS_FIRST + +# Better locking to avoid corruption +setopt HIST_FCNTL_LOCK + +# When searching for history entries in the line editor, do not display +# duplicates of a line previously found, even if the duplicates are not +# contiguous. +setopt HIST_FIND_NO_DUPS + +# Don't story commands in history if they start with a space +setopt HIST_IGNORE_SPACE + +# Don't store history/fc -l in the history list when invoked +setopt HIST_NO_STORE + +# Remove superfluous blanks from each command line being added to the history +# list. +setopt HIST_REDUCE_BLANKS + +# This option works like APPEND_HISTORY except that new history lines are added +# to the $HISTFILE incrementally (as soon as they are entered), rather than +# waiting until the shell exits. The file will still be periodically re-written +# to trim it when the number of lines grows 20% beyond the value specified by +# $SAVEHIST (see also the HIST_SAVE_BY_COPY option). +setopt INC_APPEND_HISTORY + +# Push History from previous sessions. IF $HISTFILE exists. +if [ -f $HISTFILE ]; then + fc -RI $HISTFILE +fi + +## Key bindings +# You may use: +# % autoload -U zkbd +# % zkbd +# to discover your keys. + + +typeset -U fpath + +prompt wunjo +# Actually, stick with emacs for the moment. The vi keymap just doesn't +# seem to be as complete (even if it's nicer for editing, there's no +# execute-named-cmd bound, for example). +bindkey -e # Emacs keybindings. + +# This function sets the window tile to user@host:/workingdir before each +# prompt. If you're using screen, it sets the window title (works +# wonderfully for 'hardstatus' lines. +precmd() { +# [[ -t 1 ]] || return + case $TERM in + *xterm*|rxvt*) print -Pn "\e]2;%n@%m:%~\a" + ;; + screen*) print -Pn "\ek%n@%m:%~\e\\" + ;; + esac +} + +# This sets the window title to the last run command. +preexec() { +# [[ -t 1 ]] || return + case $TERM in + *xterm*|rxvt*) print -Pn "\e]2;$1\a" + ;; + screen*) print -Pn "\ek$1\e\\" + ;; + esac +} + +# Custom commands. + +loop() { + while [ 1 -eq 1 ]; do + $@ + done +} + +# CTAN downloader + +ctand() { + wget http://mirror.ctan.org/macros/latex/contrib/$1.zip && unzip $1.zip +} + +# For formating text files for a printer +fmtpr() { + fmt --width=62 $@ | LC_ALL=C LANG=C pr -o 10 -W 62 -J -F -l 62 +} + +# Russian +# + +verb.rus() { + curl -s "http://en.wiktionary.org/w/index.php?title=$1&action=edit" | grep 'ru-conj-' + firefox "http://en.wiktionary.org/w/index.php?title=$1" +} + +# +# Debian. +# +debian.bugs.number() { + # Debian Bug Tracker - by number. + w3m "http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=$1" +} + +debian.bugs.package() { + # Debian Bug Tracker - by package. + w3m "http://bugs.debian.org/cgi-bin/pkgreport.cgi?src=$1" +} + +debian.packages() { + # Debian Packages. + # Add 'src:' in front of the package name to search for source packages. + w3m "http://packages.debian.org/$1" +} + +debian.qa.maintainer() { + # Debian QA Maintainer search by email address. + w3m "http://qa.debian.org/developer.php?login=$1" +} + +debian.qa.package() { + # Debian QA Maintainer search by package name. + w3m "http://qa.debian.org/developer.php?package=$1" +} + +debian.qa.pts() { + # Debian Package Tracking system - developers. + w3m "http://packages.qa.debian.org/$1" +} + +debian.qa.task() { + # Debian QA - search for task. + w3m "http://qa.debian.org/developer.php?task=$1" +} + +debian.wiki() { + # Search the Debian Wiki. + w3m "http://wiki.debian.org/?action=fullsearch&value=$@" +} + +# +# Others. +# + +wttr() { + local request="wttr.in/${1-Montreal}" + [ "$(tput cols)" -lt 125 ] && request+='?n' + curl -H "Accept-Language: ${LANG%_*}" --compressed "$request" +} + +google() { + # Google search. + w3m "http://www.google.com/search?q=$@" +} + +wikipedia() { + # Wikipedia search. English section. + w3m "http://en.wikipedia.org/wiki/Special:Search?search=$@" +} + +wiktionary() { + # Search Wiktionary for a term. + w3m "http://en.wiktionary.org/wiki/Special:Search?search=$@" +} + +forkex() { + # Fork program $@ from console. + nohup "$@" >/dev/null 2>&1 <&1 & disown %% +} + +gbp-snap() { + if [[ -e $@ ]]; then + git-dch -aSN $1 + else + git-dch -aS + fi + gpg-mounter + gibuild --git-ignore-new + DSC=`head -n1 debian/changelog | sed -e 's/\(.*\) (\(.*\)).*/\1_\2.dsc/g'` + DIST=`head -n1 debian/changelog | sed -e 's/.* \(.*\);.*/\1/g'` + cd .. + sbuild -d $DIST $DSC +} + +# Pretty menu! +zstyle ':completion:*' menu select=1 +zstyle ':completion:*' select-prompt %SScroll active at %p%s. + +# Completion options. +zstyle ':completion:*' completer _complete _prefix +zstyle ':completion::prefix-1:*' completer _complete +zstyle ':completion:incremental:*' completer _complete _correct +zstyle ':completion:predict:*' completer _complete + +# Completion caching. +zstyle ':completion::complete:*' use-cache 1 +zstyle ':completion::complete:*' cache-path ~/.zsh/cache/$HOST + +# Expand partial paths. +zstyle ':completion:*' expand 'yes' +zstyle ':completion:*' squeeze-slashes 'yes' + +# Include non-hidden directories in globbed file completions +# for certain commands. +zstyle ':completion::complete:*' '\' + +# Use menuselection for PID completion. +zstyle ':completion:*:*:kill:*' menu yes select +zstyle ':completion:*:kill:*' force-list always + +# tag-order 'globbed-files directories' all-files. +zstyle ':completion::complete:*:tar:directories' file-patterns '*~.*(-/)' + +# Do not complete backup files as executables. +zstyle ':completion:*:complete:-command-::commands' ignored-patterns '*\~' + +# Separate matches into groups. +zstyle ':completion:*:matches' group 'yes' + +# With commands like rm, it's annoying if you keep getting offered the same +# file multiple times. This fixes it. Also good for cp, et cetera.. +zstyle ':completion:*:rm:*' ignore-line yes +zstyle ':completion:*:cp:*' ignore-line yes + +# Describe each match group. +zstyle ':completion:*:descriptions' format "%B---- %d%b" + +# Messages/warnings format. +zstyle ':completion:*:messages' format '%B%U---- %d%u%b' +zstyle ':completion:*:warnings' format '%B%U---- no match for: %d%u%b' + +# Describe options in full. +zstyle ':completion:*:options' description 'yes' +zstyle ':completion:*:options' auto-description '%d' + +# Simulate spider's old abbrev-expand 3.0.5 patch +#zstyle ':completion:*:history-words' stop verbose +#zstyle ':completion:*:history-words' remove-all-dups yes +#zstyle ':completion:*:history-words' list false + +# From the zshwiki. Hide CVS files/directories from being completed. +zstyle ':completion:*:(all-|)files' ignored-patterns '(|*/)CVS' +zstyle ':completion:*:cd:*' ignored-patterns '(*/)#CVS' + +# Also from the wiki. Hide uninteresting users from completion. +zstyle ':completion:*:*:*:users' ignored-patterns \ +adm apache bin daemon games gdm halt ident junkbust lp mail mailnull \ +named news nfsnobody nobody nscd ntp operator pcap postgres radvd \ +rpc rpcuser rpm shutdown squid sshd sync uucp vcsa xfs backup bind \ +dictd gnats identd irc man messagebus postfix proxy sys \ +www-data alias amavis at clamav cmd5checkpw cron cyrus dhcp dnscache \ +dnslog foldingathome guest haldaemon jabber ldap mailman mpd mysql \ +nut p2p portage postmaster qmaild qmaill qmailp qmailq qmailr qmails \ +smmsp tinydns vpopmail wasabi zope + +# Approximate completion. From the wiki. +zstyle ':completion:*' completer _complete _match _approximate +zstyle ':completion:*:match:*' original only +zstyle ':completion:*:approximate:*' max-errors 1 numeric + +zstyle ':completion:*:sudo:*' command-path /usr/sbin /usr/bin /sbin /bin \ + /usr/X11R6/bin + +# Options +setopt \ +NO_all_export \ + always_last_prompt \ + always_to_end \ + append_history \ + auto_cd \ + auto_list \ + auto_menu \ + auto_name_dirs \ + auto_param_keys \ + auto_param_slash \ + auto_pushd \ + auto_remove_slash \ +NO_auto_resume \ + bad_pattern \ + bang_hist \ +NO_beep \ + brace_ccl \ + correct_all \ +NO_bsd_echo \ +NO_cdable_vars \ +NO_chase_links \ + clobber \ + complete_aliases \ + complete_in_word \ + correct \ +NO_correct_all \ + csh_junkie_history \ +NO_csh_junkie_loops \ +NO_csh_junkie_quotes \ +NO_csh_null_glob \ + equals \ + extended_glob \ + extended_history \ + function_argzero \ + glob \ +NO_glob_assign \ + glob_complete \ +NO_glob_dots \ +NO_glob_subst \ +NO_hash_cmds \ +NO_hash_dirs \ + hash_list_all \ + hist_allow_clobber \ + hist_beep \ + hist_ignore_dups \ + hist_ignore_space \ +NO_hist_no_store \ + hist_verify \ +NO_hup \ +NO_ignore_braces \ +NO_ignore_eof \ + interactive_comments \ + inc_append_history \ +NO_list_ambiguous \ +NO_list_beep \ + list_types \ + long_list_jobs \ + magic_equal_subst \ +NO_mail_warning \ +NO_mark_dirs \ + menu_complete \ + multios \ + nomatch \ + notify \ +NO_null_glob \ + numeric_glob_sort \ +NO_overstrike \ + path_dirs \ + posix_builtins \ +NO_print_exit_value \ +NO_prompt_cr \ + prompt_subst \ + pushd_ignore_dups \ +NO_pushd_minus \ + pushd_silent \ + pushd_to_home \ + rc_expand_param \ +NO_rc_quotes \ +NO_rm_star_silent \ +NO_sh_file_expansion \ + sh_option_letters \ + share_history \ + short_loops \ +NO_sh_word_split \ +NO_single_line_zle \ +NO_sun_keyboard_hack \ +NO_verbose \ + zle + +# GPG / SSH AGENT + +if command -v keychain; then + keychain {{ .keychain_keys }} + [ -z "$HOSTNAME" ] && HOSTNAME=`uname -n` + [ -f $HOME/.keychain/$HOSTNAME-sh ] && + . $HOME/.keychain/$HOSTNAME-sh + [ -f $HOME/.keychain/$HOSTNAME-sh-gpg ] && + . $HOME/.keychain/$HOSTNAME-sh-gpg +fi + +# ocaml + +. ${HOME}/.opam/opam-init/init.zsh > /dev/null 2> /dev/null || true -- cgit v1.2.3