]> ruderich.org/simon Gitweb - config/dotfiles.git/blobdiff - setup.sh
herbstluftwm/autostart: add bindings to run programs and select windows
[config/dotfiles.git] / setup.sh
index 197263de0aca28cd92d749de5adb1d6599c19afc..56a90928169eb5ebc4fdcbaedda4bc0ae2cfe882 100755 (executable)
--- a/setup.sh
+++ b/setup.sh
@@ -1,8 +1,9 @@
 #!/bin/sh
 
-# Setup script for shell configuration files.
+# Runs setup.sh in all configuration directories. Must be run in the main
+# configuration directory.
 
-# Copyright (C) 2011-2012  Simon Ruderich
+# Copyright (C) 2009-2018  Simon Ruderich
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
-set -e
+set -eu
 
-. ../lib.sh
 
-
-# Helper functions.
-terminal_info() {
-    infocmp "$@" 2>&1
-}
-terminal_available() {
-    terminal_info "$@" > /dev/null
-}
-# Usage: <file> <name> <grep-string> <value>
-apply_optional_replacement() {
-    if test -n "$4"; then
-        echo "$1: using $2 $4"
-        generate "$1" '' simple_cpp \
-            "$3" -- "$4"
-    else
-        echo "$1: removing $2 display"
-        grep_i -v "$3" "$1"
-    fi
-}
-# Check if `infocmp` is available.
-if ! infocmp >/dev/null 2>&1; then
-    echo 'Warning: `infocmp` not available! 256color checks will fail.'
-    echo
-fi
-
-
-# DIRECTORY SETUP
-
-# Create private temporary directory used by many tools (including GNU screen
-# and tmux).
-mkdir -p ~/.tmp
-chmod 0700 ~/.tmp
-
-# Create rlwrap history directory.
-mkdir -p shell/rlwrap
-# Create zsh cache directory.
-mkdir -p zsh/cache
-
-
-# FILE SETUP
-
-# Generate ~/.less with lesskey. Prevent cluttering ~/ by storing the history
-# file in this directory; this requires replacing the constant HISTORY_PATH in
-# lesskey.
-echo 'lesskey: generating .lesskey'
-simple_cpp <lesskey \
-    HISTORY_PATH -- "`pwd`/lesshistory" \
-    | lesskey -
-chmod 0600 ~/.less
-
-# Custom colors for GNU ls.
-if installed dircolors; then
-    echo '# WARNING! DO NOT EDIT THIS FILE!' >shell/dircolors
-    dircolors -b shell/dircolors.in >>shell/dircolors
-fi
-
-# Find the required options to get colored ls output. GNU ls is preferred. See
-# shell/aliases.in for details. Doing this here instead of in shell/aliases
-# speeds up shell starts.
-#
-# Check if colors are available.
-if ls --color >/dev/null 2>&1; then
-    ls_color=gnu
-else
-    if ls -G >/dev/null 2>&1; then
-        ls_color=cli
-    else
-        ls_color=
-    fi
-fi
-# Absolute path to `ls`.
-ls_path=`installed_path ls`
-# GNU ls with colors.
-if test "x$ls_color" = xgnu; then
-    ls_env=
-    ls_color='--color'
-# Normal (BSD) ls with colors.
-elif test "x$ls_color" = xcli; then
-    ls_env='CLICOLOR_FORCE=1'
-    ls_color='-G'
-# Simple ls with no colors.
-else
-    ls_env=
-    ls_color=
-fi
-
-# Also check if `column -t` is available.
-if echo test | column -t >/dev/null 2>&1; then
-    column=' | column -t'
-else
-    column=
-fi
-
-generate shell/aliases .in simple_cpp \
-    LS_ENV LS_PATH LS_COLOR COLUMN -- \
-    "$ls_env" "$ls_path" "$ls_color" "$column"
-
-# If `tig` is not available use my simple replacement.
-if ! installed tig; then
-    echo "alias tig='git tig'" >>shell/aliases
-fi
-
-# Check if grep supports --color=auto.
-if echo test | grep --color=auto test >/dev/null 2>&1; then
-    :
-else
-    echo 'shell/aliases: removing grep --color=auto'
-    sed_i '/^alias grep=/ s/^/#/' shell/aliases
-fi
-
-generate screenrc .in cat
-# As screen-256color is not widely supported use it only on machines where the
-# matching terminfo entry is available. This also requires a terminal emulator
-# which supports 256 colors. Also used for tmux.
-use_256colors=
-if terminal_available screen-256color; then
-    # Called through SSH connection, assume the local system supports 256
-    # colors.
-    if test -n "$SSH_CONNECTION"; then
-        use_256colors=1
-    # We have rxvt-unicode installed, check if it supports 256 colors.
-    elif installed urxvt; then
-        # Thanks to deryni in #rxvt-unicode on Freenode (2012-10-14 22:54
-        # CEST) for the strings/grep idea. The grep check is for "correct" 256
-        # rxvt-unicode binaries (e.g. Debian's rxvt-unicode-256color), the
-        # terminal_info check for manual installations which modify
-        # rxvt-unicode's terminfo entry.
-        urxvt_path=`installed_path urxvt`
-        urxvt_grep=`strings "$urxvt_path" | grep '^TERM=rxvt-'`
-        if test x"$urxvt_grep" = 'xTERM=rxvt-unicode-256color' \
-                || terminal_info rxvt-unicode \
-                    | grep -F 'colors#256' >/dev/null; then
-            use_256colors=1
-        fi
-    # Check if XTerm supports 256 colors (not a perfect check, but most XTerm
-    # support 256 colors).
-    elif terminal_available xterm-256color; then
-        use_256colors=1
-    fi
-fi
-if test -z "$use_256colors"; then
-    echo 'screenrc: removing 256 colors'
-    sed_i 's/Enable 256 color/Disable 256 color/;
-           s/screen-256color/screen/' screenrc
-fi
-# Some options are only necessary when running as root. They are marked as
-# "(ROOT)".
-if test "`id -u`" -ne 0; then
-    echo 'screenrc: removing root options'
-    grep_i -v '(ROOT)' screenrc
-fi
-# I use some features of GNU screen which are only in Git or very recent GNU
-# screen versions. Drop them on machines which have older versions. They are
-# marked as "(GIT)".
-if test ! -d "$HOME/development/shell/screen"; then
-    echo 'screenrc: removing Git features'
-    grep_i -v '(GIT)' screenrc
-fi
-# Rxvt doesn't need the attrcolor "fix". As I prefer rxvt assume I use it when
-# it's installed.
-if installed rxvt; then
-    echo 'screenrc: removing attrcolor "fix"'
-    sed_i 's/attrcolor b ".I"/#attrcolor b ".I"/' screenrc
-fi
-# Display current battery charge on computers with a battery. Necessary lines
-# are marked as "(BATTERY)". Also used for Tmux.
-battery=
-for x in /sys/class/power_supply/BAT*; do
-    test -d "$x" || continue
-    battery="$x"
+# Enforce evtag checks for submodules.
+git submodule init > /dev/null
+for x in `git config --local --get-regexp 'submodule.*\.url' \
+        | awk '{print $1}'`; do
+    git config "${x%.url}.update" '!git-update-and-verify-submodule'
 done
-apply_optional_replacement screenrc \
-    battery BATTERY "$battery"
-# Display current temperature. Necessary lines are marked as "(TEMPERATURE)".
-# Also used for Tmux.
-temperature=/sys/devices/platform/coretemp.0
-if ! test -d "$temperature"; then
-    temperature=
-fi
-apply_optional_replacement screenrc \
-    temperature TEMPERATURE "$temperature"
-
-
-if installed tmux; then
-    generate tmux.conf .in cat
-
-    apply_optional_replacement tmux.conf \
-        battery BATTERY "$battery"
-    apply_optional_replacement tmux.conf \
-        temperature TEMPERATURE "$temperature"
 
-    # Old Tmux versions can't handle that.
-    generate tmux.conf '' ./bin/remove-continuation.pl
+for path in */setup.sh; do
+    # Skip non executable setup.sh files as an easy way to deactivate one.
+    test ! -x "$path" && continue
 
-    # Add mappings to switch to windows 10-29 quickly. See tmux-window.pl for
-    # details.
-    perl ./tmux-window.pl 1 "`pwd`/tmux-window2.conf" >tmux-window1.conf
-    perl ./tmux-window.pl 2                           >tmux-window2.conf
-    # Set absolute path to tmux-window1.conf in tmux.conf.
-    generate tmux.conf '' simple_cpp \
-        TMUX_WINDOW_PATH -- "`pwd`/tmux-window1.conf"
+    project=`printf '%s' "$path" | sed 's|/setup.sh$||'`
 
-    # 256 colors not available.
-    if test -z "$use_256colors"; then
-        echo 'tmux.conf: removing 256 colors'
-        sed_i 's/Enable 256 color/Disable 256 color/;
-               s/screen-256color/screen/' tmux.conf
-    fi
-    # Tmux doesn't display a warning if the shell wasn't found!
-    if test ! -x '/bin/zsh'; then
-        echo 'tmux.conf: removing /bin/zsh as shell'
-        sed_i 's/zsh/sh/' tmux.conf
-    fi
-fi
-
-# Htop overwrites the comments in its configuration file.
-generate htoprc .in cat
-
-
-# LINK SETUP
-
-# Link setup for shells.
-link shell ~/.shell
-link bash ~/.bash
-link bash/rc ~/.bashrc
-link bash/profile ~/.bash_profile
-link bash/logout ~/.bash_logout
-if installed csh; then
-    link csh/rc ~/.cshrc
-fi
-link zsh ~/.zsh
-link zsh/env ~/.zshenv
-link zsh/rc ~/.zshrc
-link zsh/logout ~/.zlogout
-
-# Link setup for additional files.
-if installed crontab; then
-    link crontab.d ~/.crontab.d
-fi
-link lessfilter ~/.lessfilter
-if installed colordiff; then
-    link colordiffrc ~/.colordiffrc
-fi
-link inputrc ~/.inputrc
-link screenrc ~/.screenrc
-if installed tmux; then
-    link tmux.conf ~/.tmux.conf
-fi
-if installed htop; then
-    link htoprc ~/.htoprc
-    # New location for htoprc. Use both for compatibility.
-    mkdir -p ~/.config/htop
-    link htoprc ~/.config/htop/htoprc
-fi
-if test -d ~/.ssh && test -O ~/.ssh; then
-    link ssh_config ~/.ssh/config
-fi
+    printf 'running setup.sh in "%s"\n' "$project"
+    ( cd "$project" && ./setup.sh >/dev/null ) || {
+        printf '%s/setup.sh failed\n' "$project" >&2
+        exit 1
+    }
+done