More readline configuration
[dotfiles] / .bashrc
diff --git a/.bashrc b/.bashrc
index 649885f..578ecf2 100644 (file)
--- a/.bashrc
+++ b/.bashrc
@@ -1,7 +1,10 @@
 # ~/.bashrc: executed by bash(1) for non-login shells.
 
 # If not running interactively, don't do anything
-[ -z "$PS1" ] && return
+case $- in
+    *i*) ;;
+      *) return;;
+esac
 
 # don't put duplicate lines in the history. See bash(1) for more options
 # don't overwrite GNU Midnight Commander's setting of `ignorespace'.
@@ -24,6 +27,11 @@ shopt -s checkwinsize
 # set the prompt
 PS1='\w\$ '
 
+# 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
+
 # enable color support of ls and also add handy aliases
 if [ -x /usr/bin/dircolors ]; then
     eval "`dircolors -b`"
@@ -38,6 +46,8 @@ fi
 
 alias emacs='emacs -nw'
 alias serve='python -m SimpleHTTPServer 8080'
+alias gpg='gpg2'
+alias gnupg='gnupg2'
 
 export SVN_EDITOR=vim
 
@@ -55,6 +65,19 @@ if [ -d $HOME/bin ]; then
        export PATH
 fi
 
+# Put $HOME/.cabal/bin on the path. Installing cabal doesn't
+# automatically put installed packages on the path.
+if [ -d $HOME/.cabal/bin ]; then
+    PATH="$HOME/.cabal/bin:$PATH"
+    export PATH
+fi
+
+# Put /usr/local/bin (where homebrew installs stuff) before /usr/bin on the
+# path. This means that if a program exists at both locations, calls to that
+# program will use the homebrew version rather than the system version.
+PATH="/usr/local/bin:$PATH"
+export PATH
+
 # Run a machine-specific bashrc (if it exists).
 if [ -f $HOME/.bashrc_local ]; then
        source $HOME/.bashrc_local
@@ -65,3 +88,47 @@ fi
 if [ $TERM != screen ]; then
        screen
 fi
+
+# Gets a directory named .env or .venv if it exists in the currend directory or any of its parents
+get_env() {
+  if [ -d "$1/.env" ] ; then
+    echo "$1/.env"
+  else
+    if [ -d "$1/.venv" ] ; then
+      echo "$1/.venv"
+    else
+      if [ -d "$1/.." ] ; then
+        get_env "$1/.."
+      fi
+    fi
+  fi
+}
+
+get_absolute_path() {
+  python3 -c "import os; print(os.path.realpath('$1'))"
+}
+
+on_prompt() {
+  # Load a virtualenv environment if it exists in a file named .env
+  env_folder=$(get_env $(pwd))
+
+  if [ -d "$env_folder" ] ; then
+    if [[ $VIRTUAL_ENV != $(get_absolute_path $env_folder) ]] ; then
+      echo "Activating env '$env_folder'"
+      source "$env_folder/bin/activate"
+    fi
+  else
+    if [ -d "$VIRTUAL_ENV" ] ; then
+      deactivate
+    fi
+  fi
+}
+
+# Call on_prompt() every time the command prompt executes
+PROMPT_COMMAND=on_prompt
+
+# Set vi keybindings
+set -o vi
+
+# pip should only run if there is a virtualenv currently activated
+export PIP_REQUIRE_VIRTUALENV=true