--- /dev/null
+# Shell configuration file.
+
+# Copyright (C) 2013-2014 Simon Ruderich
+#
+# This file is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This file is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this file. If not, see <http://www.gnu.org/licenses/>.
+
+
+# Normal umask for root (readable by all users).
+if test "`id -u`" -eq 0; then
+ umask 022
+# Restricted umask for normal users (readable only by me).
+else
+ umask 077
+fi
+
+# Disable flow control (^s and ^q). I use GNU Screen/Tmux which also supports
+# this in a similar way (entering copy mode) and enabling flow control by
+# accident is annoying.
+if test -t 0; then
+ stty -ixon -ixoff
+fi
+
+# Auto-logout after timeout on TTYs. It's easy to forget to logout after
+# switching back to X11 from a TTY.
+timeout_setup_screen_lock() {
+ echo "Locking GNU screen after $timeout seconds (TTY detected)."
+ screen -X idle $timeout lockscreen
+ echo
+}
+timeout_setup_tmux_lock() {
+ if type vlock >/dev/null; then
+ echo "Locking Tmux after $timeout seconds (TTY detected)."
+ tmux set-option lock-after-time $timeout
+ echo
+
+ else
+ echo "vlock not found, locking won't work in Tmux!" >&2
+ echo "Falling back to shell timeout." >&2
+ echo
+
+ timeout_setup_shell_logout
+ fi
+}
+timeout_setup_shell_logout() {
+ echo "Auto-logout after $timeout seconds (TTY detected)."
+ TMOUT=$timeout
+ echo
+}
+# Timeout in seconds.
+local timeout >/dev/null 2>&1
+timeout=600
+case "$TERM" in
+ # `tty` doesn't work inside a pseudo-terminal as provided by GNU
+ # Screen/Tmux.
+ #
+ # The following settings for GNU Screen/Tmux will only auto-lock new
+ # sessions, not when attaching to existing sessions!
+ screen*)
+ if test -n "$STY"; then
+ case "$STY" in
+ *.tty[0-9]*.*)
+ timeout_setup_screen_lock
+ ;;
+ esac
+ elif test -n "$TMUX"; then
+ case "`tmux display -p '#{client_tty}'`" in
+ /dev/tty[0-9]*)
+ timeout_setup_tmux_lock
+ ;;
+ /dev/*)
+ # Not on TTY, nothing to do.
+ ;;
+ *)
+ echo 'Tmux < 1.8 found, TTY check might be incorrect!' >&2
+
+ local client >/dev/null 2>&1
+ client=`printf '%s' "$TMUX" | sed 's/^.*,\([0-9]*\)$/\1/'`
+
+ case "`tmux list-clients \
+ | grep -E "^/dev/.*?: $client "`" in
+ /dev/tty[0-9]*)
+ timeout_setup_tmux_lock
+ ;;
+ esac
+ ;;
+ esac
+ else
+ echo 'TERM=screen but neither $STY nor $TMUX found!' >&2
+ timeout_setup_shell_logout
+ fi
+ ;;
+
+ *)
+ case `tty` in
+ /dev/tty[0-9]*)
+ timeout_setup_shell_logout
+ ;;
+ esac
+ ;;
+esac
+unset timeout
+unset timeout_setup_screen_lock
+unset timeout_setup_tmux_lock
+unset timeout_setup_screen_lock
+
+# vim: ft=sh