diff --git a/lib/functions.zsh b/lib/functions.zsh
index b4d89a64a5076dfdd10c9e0953707f4acd2aa70a..3770d4e82ec3fc480c8a21d7ba520e887559cd7f 100644
--- a/lib/functions.zsh
+++ b/lib/functions.zsh
@@ -44,4 +44,32 @@ function alias_value() {
 #
 function try_alias_value() {
     alias_value "$1" || echo "$1"
+}
+
+#
+# Set variable "$1" to default value "$2" if "$1" is not yet defined.
+#
+# Arguments:
+#    1. name - The variable to set
+#    2. val  - The default value 
+# Return value:
+#    0 if the variable exists, 3 if it was set
+#
+function default() {
+    test `typeset +m "$1"` && return 0
+    typeset -g "$1"="$2"   && return 3
+}
+
+#
+# Set enviroment variable "$1" to default value "$2" if "$1" is not yet defined.
+#
+# Arguments:
+#    1. name - The env variable to set
+#    2. val  - The default value 
+# Return value:
+#    0 if the env variable exists, 3 if it was set
+#
+function env_default() {
+    env | grep -q "^$1=" && return 0 
+    export "$1=$2"       && return 3
 }
\ No newline at end of file