diff --git a/bashrc b/bashrc new file mode 100644 index 0000000..0ac38bd --- /dev/null +++ b/bashrc @@ -0,0 +1,127 @@ +# ~/.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 + +# don't put duplicate lines in the history. See bash(1) for more options +# don't overwrite GNU Midnight Commander's setting of `ignorespace'. +export HISTCONTROL=$HISTCONTROL${HISTCONTROL+,}ignoredups +# ... or force ignoredups and ignorespace +export HISTCONTROL=ignoreboth + +# append to the history file, don't overwrite it +shopt -s histappend + +# Don't escape variables when I hit tab +shopt -s direxpand + +# for setting history length see HISTSIZE and HISTFILESIZE in bash(1) + +# 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 + +# uncomment for a colored prompt, if the terminal has the capability; turned +# off by default to not distract the user: the focus in a terminal window +# should be on the output of commands, not on the prompt +#force_color_prompt=yes + +if [ -n "$force_color_prompt" ]; then + if [ -x /usr/bin/tput ] && 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 + +# If this is an xterm set the title to user@host:dir +case "$TERM" in +xterm*|rxvt*) + PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" + ;; +*) + ;; +esac +export PROMPT_DIRTRIM=3 + +export PATH=$HOME/bin:$PATH:$HOME/opt/bin +export IPLAYER_OUTDIR="$HOME/downloads/iplayer" + +# enable color support of ls and also add handy aliases +if [ -x /usr/bin/dircolors ]; then + eval "`dircolors -b`" +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 ]; then + . /etc/bash_completion +fi + +SSH_AGENT_FILE=$HOME/ssh.sh +if [ -f $SSH_AGENT_FILE ] ; then + FILE_PID=$(grep SSH_AGENT_PID $SSH_AGENT_FILE | sed -e 's/^.*=//' | sed -e 's/;.*$//') + RUNNING_PID=$(pgrep ssh-agent) + if [ "$RUNNING_PID" == "" ] ; then + # No agent running + echo Starting ssh-agent, you need to load keys though. + ssh-agent > $SSH_AGENT_FILE + . $SSH_AGENT_FILE + elif [ "$RUNNING_PID" != "$FILE_PID" ] ; then + echo Mismatch - file has $FILE_PID, system has $RUNNING_PID + echo 'File is out of date; you might need to kill things and start again.' + else + # PIDs match, let\'s use the file + . $SSH_AGENT_FILE 1>/dev/null + KEYCOUNT=$(ssh-add -l | grep -v "The agent has no identities" | wc -l) + echo Using ssh-agent $RUNNING_PID, $KEYCOUNT keys loaded + fi +else + # Assume no agent running + echo Starting ssh-agent, you need to load keys though. + ssh-agent > $SSH_AGENT_FILE + . $SSH_AGENT_FILE +fi + +# Done the longer format so we catch dropbox instance, rather than stuff like +# "links http://www.dropbox.com/" +# DROPBOX_PID=$(ps -u paul | grep dropbox$ | awk '{print $1}') +# if [ "$DROPBOX_PID" == "" ] ; then + # echo "Note - Dropbox isn't running!" +# fi + +# Load any supplementary scripts +if [ -d "$HOME"/.bashrc.d ] ; then + for config in "$HOME"/.bashrc.d/*.bash ; do + source "$config" + done + unset -v config +fi + +export PATH=$HOME/bin:$PATH diff --git a/bashrc.d/aliases.bash b/bashrc.d/aliases.bash new file mode 100644 index 0000000..f54be7e --- /dev/null +++ b/bashrc.d/aliases.bash @@ -0,0 +1,44 @@ +if [ -x /usr/bin/dircolors ]; then + alias ls='ls --color=auto' + alias grep='grep --color=auto' +fi + +# some more ls aliases +alias ll='ls -l' +alias la="ls -a" +alias lS="ls -lSr" +alias lm="ls -ltr $HOME/mail/ | tail" +alias ..="cd .." +alias install="apt-get install" +alias m='MUTTJOBS=$(jobs | grep mutt) ; if [ -z "$MUTTJOBS" ] ; then echo "No mutt, starting new" ; mutt ; else JOBID=$(echo $MUTTJOBS | sed -e "s/\].*$//" | sed -e "s/^\[//" ) ; echo Using mutt job $JOBID ; fg %$JOBID; fi' +alias s="sc slrn" +alias irc="sc irc" +alias ms="mutt -f =search" +alias st="screen -dr talker" +alias sd="screen -dr download" +alias talker="screen -dr talker" +alias eximtail="tail -f /var/log/exim4/mainlog" +alias db="dropbox.py" + +alias trunc="truncate -s0" + +# Stuff for todo.txt +alias waiting="t lf waiting" +alias active="t ls active" +alias today="t lsp A" +alias week="t lsp A-B" + +# git shortcuts +alias br="git checkout" +alias brl="git branch" +alias gg="git grep" +alias st="git status" +alias gd="git diff" + +if [ "$TERM" == "xterm-256color" ] ; then + echo TERM is xterm-256color, assuming MacBook + # Safety net for different locations of keys + alias rm="rm -i" +fi +alias log='git log --color --graph --pretty=format:'\''%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'\'' --abbrev-commit' +alias coot="cd ~/src/cooter_umbrella/" diff --git a/bashrc.d/fzf.bash b/bashrc.d/fzf.bash new file mode 100644 index 0000000..a0a7f3b --- /dev/null +++ b/bashrc.d/fzf.bash @@ -0,0 +1,17 @@ +# Setup fzf +# --------- +if [[ ! "$PATH" == */home/paul/.fzf/bin* ]]; then + export PATH="${PATH:+${PATH}:}/home/paul/.fzf/bin" +fi + +# Auto-completion +# --------------- +[[ $- == *i* ]] && source "/home/paul/.fzf/shell/completion.bash" 2> /dev/null + +export FZF_DEFAULT_COMMAND='fd --type f --color=never' +export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND" +export FZF_ALT_C_COMMAND='fd --type d . --color=never' + +# Key bindings +# ------------ +source "/home/paul/.fzf/shell/key-bindings.bash" diff --git a/bashrc.d/node.bash b/bashrc.d/node.bash new file mode 100644 index 0000000..40dd31b --- /dev/null +++ b/bashrc.d/node.bash @@ -0,0 +1,5 @@ +# Set up NPM +NPM_PACKAGES="$HOME/.npm-packages" +NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH" +PATH=$PATH:$NPM_PACKAGES/bin +MANPATH="$MANPATH:$NPM_PACKAGES/share/man" diff --git a/bashrc.d/prompt.bash b/bashrc.d/prompt.bash new file mode 100644 index 0000000..a6a95e7 --- /dev/null +++ b/bashrc.d/prompt.bash @@ -0,0 +1,13 @@ +prompt() { + if [ "$STY" != "" ] ; then + SESSION_NAME=$(echo $STY | sed -e 's/^.*\.//') + SESSION="[$SESSION_NAME] " + . $HOME/data/screen/"$SESSION_NAME".display + else + SESSION="" + fi + export PS1="$SESSION\u@\h:\w$ " +} + +export PROMPT_DIRTRIM=5 +export PROMPT_COMMAND=prompt diff --git a/bashrc.d/python.bash b/bashrc.d/python.bash new file mode 100644 index 0000000..a33caee --- /dev/null +++ b/bashrc.d/python.bash @@ -0,0 +1,2 @@ +export PYTHONPATH=$HOME/lib/python2.7/site-packages/ +export PYTHONDONTWRITEBYTECODE=1