diff --git a/config.fish b/config.fish
index 359dd9c..e3dc037 100644
--- a/config.fish
+++ b/config.fish
@@ -14,10 +14,12 @@
 #  * Abbreviated + colorized working directory
 #  * VCS status
 #  * Dynamic prompt character (root/user, return status)
+#  * Dynamic greeting function ()
 #  * Optional timestamps
 #
 # Configurable variables:
 #  * __fish_prompt_show_timestamps - If set, displays timestamps on the right side of the terminal
+#  * __fish_greeting_fortune_cookies - Overrides the default list of fortune cookies to use for greetings
 
 #####################
 # Setting Variables #
@@ -25,11 +27,58 @@
 
 set __fish_git_prompt_show_informative_status true
 
-set fish_greeting "Hello, commander."
 set fish_key_bindings fish_default_key_bindings
 
+set fish_color_command 8787ff
+
 set VIRTUAL_ENV_DISABLE_PROMPT true
 
+#####################
+# Greeting Function #
+#####################
+
+function fish_greeting --description 'Display a greeting when the session begins'
+
+    ##################
+    # Fortune greeting
+
+    if type -q fortune
+
+        # Set up list of desired cookies
+        set -l desired_cookies
+        if not set -q __fish_greeting_fortune_cookies
+            set desired_cookies computers people science education work wisdom
+        else
+            set desired_cookies $__fish_greeting_fortune_cookies
+        end
+
+        # Determine which desired cookies are available
+        set -l found_cookies
+        for cookie in $desired_cookies
+            if fortune -s $cookie > /dev/null ^ /dev/null
+                set -a found_cookies $cookie
+            end
+        end
+
+        # If any desired cookies are found, source a fortune from them
+        if test (count $found_cookies) -gt 0
+            fortune -s $found_cookies
+            return
+        end
+
+        # Otherwise, just print whatever
+        fortune -s
+        return
+
+    end
+
+    #################
+    # Static greeting
+
+    echo "Hello, commander."
+
+end
+
 ####################
 # Battery Function #
 ####################
@@ -39,35 +88,35 @@ function battery --description 'Display the current status of the battery'
     #################
     # Local variables
 
-	set -l battery_file /sys/class/power_supply/BAT0/capacity
+	set -l battery_files /sys/class/power_supply/BAT*/capacity
 
     set -l normal (set_color normal)
     set -l yellow (set_color bryellow)
-    set -l orange (set_color yellow)
-    set -l blue (set_color brblue)
+    set -l gray (set_color 5e5e5e brblack)
 
     #####################
     # ACPI battery status
 
-    if type acpi > /dev/null
-        set -l battery_str (acpi | cut -d "," -f 2- | string trim)
-        set battery_str (string replace -r '([[:digit:]]{1,3}%), (.*)$' "$yellow\$1$normal $orange(\$2)$normal" $battery_str)
-        printf "%s" $blue "Remaining battery:$normal " $battery_str
+    if type -q acpid
+        set -l battery_str (acpi | grep "Unknown" --invert | head -n 1 | cut -d "," -f 2- | string trim)
+        set battery_str (string replace -r '([[:digit:]]{1,3}%), (.*)$' "$yellow\$1$normal $gray(\$2)$normal" $battery_str)
+        echo "Battery status: $battery_str"
         return
     end
 
     #########################
     # Fallback battery status
 
-    if test -f $battery_file
-        printf "%s" $blue "Remaining battery:$normal " $yellow (cat $battery_file) "%$normal"
+    if test -f $battery_files
+        set -l battery_str "$yellow"(cat $battery_files | head -n 1 | string trim)"%$normal"
+        echo "Battery status: $battery_str"
         return
     end
 
     #####################
     # Unsupported battery
 
-    printf "%s" $blue "No battery detected.$normal"
+    echo "No battery detected."
 
 end
 
@@ -91,7 +140,7 @@ end
 # Prompt Function #
 ###################
 
-function fish_prompt --description 'Write out the prompt'
+function fish_prompt --description 'Display a formatted terminal prompt'
 
     ####################
     # Exit Status
@@ -145,7 +194,7 @@ function fish_prompt --description 'Write out the prompt'
 
     set -l venv_seg ""
     if test -n "$VIRTUAL_ENV"
-        set venv_seg "$gray(" (basename $VIRTUAL_ENV) ")$normal "
+        set venv_seg "$gray("(basename $VIRTUAL_ENV)")$normal "
     end
 
     #################
@@ -157,13 +206,17 @@ function fish_prompt --description 'Write out the prompt'
     # Working Directory (PWD) Segment
 
     set -g fish_prompt_pwd_dir_length 1
-    set -l pwd_seg "in $gray" (prompt_pwd)
-    set pwd_seg (string replace -ar '(.+/)([^/]*$)' "$darkgray\$1$gray\$2$normal" $pwd_seg)
+    set -l pwd_seg (prompt_pwd)
+    if test (string length $pwd_seg) -eq 1
+        set pwd_seg (string replace -ar '^.*$' "in $gray\$0$normal" $pwd_seg)
+    else
+        set pwd_seg (string replace -ar '^(.*[~\/])([^\/]*$)' "in $darkgray\$1$gray\$2$normal" $pwd_seg)
+    end
 
     ####################
     # VCS Status Segment
 
-    set -l vcs_seg (__fish_vcs_prompt) ""
+    set -l vcs_seg (__fish_vcs_prompt)
 
     ##################
     # Prompt Character
@@ -176,9 +229,7 @@ function fish_prompt --description 'Write out the prompt'
     #########
     # Output
 
-    printf "\n"
-    printf "%s" $venv_seg $ssh_seg $user_host_seg $pwd_seg $vcs_seg
-    printf "\n%s" $prompt_char
+    echo -se $venv_seg $ssh_seg $user_host_seg $pwd_seg $vcs_seg "\n" $prompt_char
 
 end
 
@@ -186,7 +237,7 @@ end
 # Right Prompt Function #
 #########################
 
-function fish_right_prompt
+function fish_right_prompt --description "Display a right-aligned terminal prompt"
 
     #############################
     # Enable/disable right prompt
@@ -198,11 +249,13 @@ function fish_right_prompt
     #################
     # Local variables
 
+    set -l normal (set_color normal)
     set -l darkgray (set_color 3b3b3b brblack)
 
     ###########
     # Timestamp
 
-    printf "%s" $darkgray (date +"[%H:%M:%S]")
+    set -l timestamp_str "$darkgray"(date +"[%H:%M:%S]")"$normal"
+    echo -s "$darkgray$timestamp_str"
 
 end