if ls --color >/dev/null 2>&1; then
     ls_env=
     ls_color='--color'
+    ls_options=
 # Normal (BSD) ls with colors available.
 elif ls -G >/dev/null 2>&1; then
     ls_env='CLICOLOR_FORCE=1'
     ls_color='-G'
+    # Don't display hidden files by default when running as root. I use `la`
+    # for that.
+    ls_options='-I'
 # Simple ls with no colors.
 else
     ls_env=
     ls_color=
+    ls_options=
 fi
 
 # Also check if `column -t` is available.
 fi
 
 generate shell/aliases .in simple_cpp \
-    LS_ENV LS_COLOR COLUMN -- \
-    "$ls_env" "$ls_color" "$column"
+    LS_ENV LS_COLOR LS_OPTIONS COLUMN -- \
+    "$ls_env" "$ls_color" "$ls_options" "$column"
 
 # If `tig` is not available use my simple replacement.
 if ! installed tig; then
 
 # normal ls which needs CLICOLOR_FORCE so it displays colors when used with a
 # pager. If none work no colors are used.
 #
-# See `setup.sh` for details. LS_ENV and LS_COLOR are replaced with the
-# correct values when this file is generated.
+# See `setup.sh` for details. LS_* are replaced with the appropriate values
+# when this file is generated.
 ls() {
-    LS_ENV command ls LS_COLOR -C -F "$@" 2>&1 | less
+    LS_ENV command ls LS_COLOR LS_OPTIONS -C -F "$@" 2>&1 | less
 }
 
 unalias ll lt la lal lat 2>/dev/null