mirror of
https://github.com/notwa/rc
synced 2024-11-04 22:39:02 -08:00
77 lines
1.7 KiB
Bash
Executable file
77 lines
1.7 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
note() {
|
|
echo -E "$@"
|
|
}
|
|
|
|
die() {
|
|
echo -E "$@">&2
|
|
exit 1
|
|
}
|
|
|
|
dotless() {
|
|
[[ "${1:0:1}" == "." ]] && REPLY="${1:1}" || REPLY="$1"
|
|
}
|
|
|
|
backup() {
|
|
note "backing up $1"
|
|
mkdir -p "${backup_dir:?backup_dir unset}/$(dirname "$1")"
|
|
[ -e "$backup_dir/$1" ] && die "backup already exists"
|
|
mv "$1" "$backup_dir/$1"
|
|
}
|
|
|
|
hardlink() {
|
|
if [ -e "$1" ]; then
|
|
[ "$1" -ef "$2" ] && return
|
|
[ -h "$1" ] && note "removing symbolic link $1" && rm "$1"
|
|
if [ -s "$1" ]; then
|
|
backup "$1" || die "$1 already exists"
|
|
fi
|
|
fi
|
|
|
|
ln "$2" "$1" || die "couldn't hardlink $1"
|
|
}
|
|
|
|
softlink() {
|
|
if [ -e "$1" ]; then
|
|
if [ -h "$1" ]; then
|
|
[ "$(readlink "$1")" == "$2" ] && return
|
|
note "removing symbolic link $1"
|
|
rm "$1"
|
|
else
|
|
die "$1 already exists and is not a symbolic link"
|
|
fi
|
|
fi
|
|
|
|
ln -s "$2" "$1" || die "couldn't symlink $1"
|
|
}
|
|
|
|
which readlink >/dev/null || exit 1
|
|
|
|
rc="$(readlink -f "$(dirname "$0")" )"
|
|
cd "$HOME"
|
|
PATH="${PATH:?No existing PATH}:$rc/sh"
|
|
|
|
backup_dir="$rc/backup-$(date '+%s')"
|
|
|
|
for f in .bashrc .zshrc .-shrc .streamcrap .vimrc \
|
|
.inputrc .screenrc .indent.pro .uncrustify.cfg; do
|
|
dotless "$f"
|
|
r="$rc/home/$REPLY"
|
|
hardlink "$f" "$r"
|
|
done
|
|
|
|
for d in sh .vim .mpv; do
|
|
dotless "$d"
|
|
r="$rc/$REPLY"
|
|
softlink "$d" "$r"
|
|
done
|
|
|
|
grep .bashrc .bash_profile >/dev/null 2>&1 \
|
|
|| echo -e '\n[[ -f ~/.bashrc ]] && . ~/.bashrc' >> .bash_profile
|
|
|
|
for d in Desktop Documents Downloads Music Pictures Public Templates Video Videos; do
|
|
[ -d "$d" ] || continue
|
|
is_empty "$d" && rm -r "$d" || note "skipping unempty $d"
|
|
done
|
|
|
|
mkdir -p opt/local/bin src work play
|