#!/bin/sh set -eu die() { echo "$@" 1>&2 exit 1 } abspath() { (cd "$1" && pwd) } src() { dirname="$1" file="$2" hosted="$dirname/host-$(hostname)/$file" plain="$dirname/$file" if [ -e "$hosted" ]; then echo "$hosted" elif [ -e "$plain" ]; then echo "$plain" else die "$file does not exist" fi } dirname="$(abspath "$(dirname "$0")")" echo "$dirname" files=" abcde.conf bash_profile bashrc emacs.d git-global-ignore mailcap profile screenrc signature vimrc xsessionrc ssh/config ssh/config-pers config/starship/config.toml config/vmadm/config.yaml " install -d "$HOME/.config" for x in $files; do src "$dirname" "$x" done for x in $files; do y="$(src "$dirname" "$x")" d="$(dirname "$x")" if [ ! -e "$HOME/.$d" ]; then mkdir -p "$HOME/.$d" fi ln -sf "$y" "$HOME/.$x" done