]> code.delx.au - dotfiles/blobdiff - .bashrc
bash: pick up DBUS_SESSION_BUS_ADDRESS in case it isn't set automatically
[dotfiles] / .bashrc
diff --git a/.bashrc b/.bashrc
index 5d2f8b203b112da43f56619898298518ab135034..6a5588ed8a071d342f03a1ab416c72aa79594c8b 100644 (file)
--- a/.bashrc
+++ b/.bashrc
@@ -15,12 +15,10 @@ fi
 # Add ~/bin and subdirs to PATH if needed
 while read -r p; do
     echo "$PATH" | tr ':' '\n' | grep -qxF "$p" || PATH="${p}:$PATH"
-done < <(find -L ~/bin -maxdepth 1 -type d 2> /dev/null)
+done < <(find -L ~/bin -depth -maxdepth 1 -type d 2> /dev/null)
 
-# Set EMAIL from the freedesktop environment.d
-if ls ~/.config/environment.d/*.conf &> /dev/null; then
-    eval "$(awk -F= '{print $0 ";export " $1}' ~/.config/environment.d/*.conf)"
-fi
+# Set environment variables, eg EMAIL, LANG
+eval "$(cat 2> /dev/null /etc/default/locale /etc/locale.conf ~/.config/environment.d/*.conf | awk -F= '/^[^# ]/ {print $0 ";export " $1}')"
 
 # Pick up SSH agent socket
 if [ -z "$SSH_AUTH_SOCK" ]; then
@@ -32,6 +30,12 @@ if [ -z "$SSH_AUTH_SOCK" ]; then
     fi
 fi
 
+# Look for DBUS
+if [ -z "$DBUS_SESSION_BUS_ADDRESS" ] && [ -S "/run/user/$(id -u)/bus" ]; then
+    DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$(id -u)/bus"
+    export DBUS_SESSION_BUS_ADDRESS
+fi
+
 
 ###########################
 # Interactive shells only #
@@ -42,6 +46,18 @@ if [ -z "${PS1}" ]; then
 fi
 
 
+################
+# Source files #
+################
+
+# Debian/Ubuntu don't source this from /etc/bash.bashrc
+[ -z "$BASH_COMPLETION_VERSINFO" ] && [ -r /usr/share/bash-completion/bash_completion ] && source /usr/share/bash-completion/bash_completion
+
+# This isn't sourced for interactive shells on Debian/Ubuntu/Arch
+# https://bugzilla.gnome.org/show_bug.cgi?id=697475
+[ -r /etc/profile.d/vte.sh ] && source /etc/profile.d/vte.sh
+
+
 ################
 # bash options #
 ################
@@ -62,8 +78,6 @@ export HISTCONTROL='erasedups:ignoredups:ignorespace'
 export HISTSIZE='100000'
 export HISTTIMEFORMAT='%F %T '
 
-[ -r /etc/bash_completion ] && source /etc/bash_completion
-
 
 ###############
 # Pager setup #
@@ -157,7 +171,7 @@ trap print_exit_code ERR
 
 # This prevents long/ugly command lines from showing up in xterm titles
 function aliasf {
-    eval "function $1 { $2 \$@; }"
+    eval "function $1 { $2 \"\$@\"; }"
 }
 
 
@@ -165,11 +179,14 @@ function aliasf {
 # ls aliases and colours #
 ##########################
 
-# GNU ls colours
-eval "$(TERM=xterm dircolors 2> /dev/null)"
-
-# BSD ls colours
-export LSCOLORS="ExFxCxDxBxEGEDABAGACAD"
+if command -v dircolors &> /dev/null; then
+    # GNU ls colours
+    eval "$(dircolors)"
+    LS_COLORS+=':ow=30;42'
+else
+    # BSD ls colours
+    export LSCOLORS="ExFxCxDxBxEGEDABAGACAD"
+fi
 
 # Lets find the ls
 if ls --color=auto -v &> /dev/null; then
@@ -185,6 +202,7 @@ alias ll='ls -hlF'
 alias la='ls -ha'
 alias  l='ls -halF'
 
+
 ##############
 # ps aliases #
 ##############
@@ -217,6 +235,9 @@ aliasf sudosu 'sudo su -l -s /bin/bash'
 aliasf python 'PYTHONSTARTUP=~/.pythonrc.py python3'
 aliasf webshare 'python3 -mhttp.server'
 
+export EDITOR='vim'
+aliasf edit "$EDITOR"
+
 if ! command -v pbcopy &> /dev/null; then
     alias pbcopy='xsel --clipboard --input'
     alias pbcopym='xsel --input'
@@ -247,40 +268,12 @@ function slowshell {
     renice -n 19 -p $$
 }
 
-# SSH to an unknown host and print the new known_hosts entry
-function ssh_new {
-    local new_known_hosts_file
-    new_known_hosts_file="$(mktemp)"
-    ssh -o UserKnownHostsFile="$new_known_hosts_file" "$@" echo 'Connection ok'
-    cat "$new_known_hosts_file"
-    rm -f "$new_known_hosts_file"
-}
-
 # SSH without verifying host key
 function ssh_unsafe {
     ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null "$@"
 }
 
 
-##################
-# Editor aliases #
-##################
-
-if emacsclient --version &> /dev/null; then
-    export ALTERNATE_EDITOR='vim'
-    export EDITOR='emacsclient --tty'
-
-    if [[ "$TERM" == screen* ]]; then
-        aliasf edit 'emacsclient --tty'
-    else
-        aliasf edit 'emacsclient --create-frame --no-wait'
-    fi
-else
-    export EDITOR='vim'
-    aliasf edit 'vim'
-fi
-
-
 #########################
 # Optional local config #
 #########################
@@ -288,21 +281,32 @@ fi
 [ -r ~/.bashrc_local ] && source ~/.bashrc_local
 
 
-##################
-# xterm titlebar #
-##################
+########################
+# Terminal integration #
+########################
 
 # When at a prompt display `workingdir (hostname)`
 function print_title_prompt {
     printf '\e]0;bash:%s (%s)\a' \
         "${PWD/$HOME/\~}" \
-        "$(hostname -s)"
+        "$(cat /etc/hostname)"
 
     if [[ "$TERM" == screen* ]]; then
         printf '\ekbash\e\\'
     fi
 }
-PROMPT_COMMAND=print_title_prompt
+
+# Preserve working directory when opening new terminals
+# This depends on /etc/profile/vte.sh
+function record_terminal_cwd {
+    [ "$(type -t __vte_osc7)" = "function" ] && __vte_osc7 || true
+}
+
+function prompt_command {
+    print_title_prompt
+    record_terminal_cwd
+}
+PROMPT_COMMAND=prompt_command
 
 # Display the command about to be executed. This must go at the end of the
 # bashrc to avoid running the trap on commands in the bashrc
@@ -311,7 +315,7 @@ function print_title_exec {
 
     printf '\e]0;%s (%s)\a' \
         "$(tr -cd '[:graph:] ' <<< "$BASH_COMMAND")" \
-        "$(hostname -s)"
+        "$(cat /etc/hostname)"
 
     if [[ "$TERM" == screen* ]]; then
         printf '\ek%s\e\\' \