X-Git-Url: https://ruderich.org/simon/gitweb/?p=config%2Fdotfiles.git;a=blobdiff_plain;f=setup.sh;h=56a90928169eb5ebc4fdcbaedda4bc0ae2cfe882;hp=bc3bd2221a5cba6c6431008074a0247af1d8e2f2;hb=9e4b2aff9242c3e72c714c3bf01c670b576e6627;hpb=4453828578cf549be4354479f826a2336c3697ad diff --git a/setup.sh b/setup.sh index bc3bd22..56a9092 100755 --- 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 @@ -18,254 +19,25 @@ # along with this program. If not, see . -set -e +set -eu -. ../lib.sh - -# Helper functions. -terminal_info() { - infocmp "$@" 2>&1 -} -terminal_available() { - terminal_info "$@" > /dev/null -} -# Usage: -apply_optional_replacement() { - if test -n "$4"; then - printf '%s: using %s %s\n' "$1" "$2" "$4" - generate "$1" '' simple_cpp \ - "$3" -- "$4" - else - printf '%s: removing %s display\n' "$1" "$2" - 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 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. -# -# Absolute path to `ls`. -ls_path=`installed_path ls` -# GNU ls with colors available. -if ls --color >/dev/null 2>&1; then - ls_env= - ls_color='--color' -# Normal (BSD) ls with colors available. -elif ls -G >/dev/null 2>&1; 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