mirror of
https://github.com/notwa/rc
synced 2024-11-05 08:19:03 -08:00
69 lines
1.5 KiB
Bash
69 lines
1.5 KiB
Bash
|
#!/usr/bin/env bash
|
||
|
note() {
|
||
|
echo -E "$@"
|
||
|
}
|
||
|
|
||
|
crap() {
|
||
|
echo -E "$@">&2
|
||
|
exit 1
|
||
|
}
|
||
|
|
||
|
dotless() {
|
||
|
[[ "${1:0:1}" == "." ]] && echo -E "${1:1}" || echo -E "$1"
|
||
|
}
|
||
|
|
||
|
hardlink() {
|
||
|
[ -e "$1" ] && {
|
||
|
[ "$1" -ef "$2" ] && return
|
||
|
[ -h "$1" ] && note "removing symbolic link $1" && echo rm "$1"
|
||
|
[ -s "$1" ] && crap "$1 already exists" || echo rm "$1"
|
||
|
}
|
||
|
|
||
|
ln "$2" "$1" || crap "couldn't hardlink $1"
|
||
|
}
|
||
|
|
||
|
softlink() {
|
||
|
[ -e "$1" ] && {
|
||
|
[ -h "$1" ] && {
|
||
|
[ "$(readlink "$1")" == "$2" ] && return
|
||
|
note "removing symbolic link $1"
|
||
|
echo rm "$1"
|
||
|
} || crap "$1 already exists and is not a symbolic link"
|
||
|
}
|
||
|
|
||
|
ln -s "$2" "$1" || crap "couldn't symlink $1"
|
||
|
}
|
||
|
|
||
|
rc="$(readlink -f "$(dirname "$0")" )"
|
||
|
cd $HOME
|
||
|
PATH="$PATH:$rc/sh"
|
||
|
|
||
|
umask 027
|
||
|
|
||
|
for f in .bashrc .zshrc shrc.zsh .conkyrc .inputrc .screenrc .xinitrc; do
|
||
|
r="$rc/$(dotless "$f")"
|
||
|
hardlink "$f" "$r"
|
||
|
done
|
||
|
|
||
|
for d in sh .vim .mpv; do
|
||
|
r="$rc/$(dotless "$d")"
|
||
|
softlink "$d" "$r"
|
||
|
done
|
||
|
|
||
|
# FIXME: this loop is pretty inefficient
|
||
|
for r in $rc/ssh/* $rc/config/menus/*; do
|
||
|
f=".${r#"$rc/"}"
|
||
|
mkdir -p "$(dirname "$f")"
|
||
|
hardlink "$f" "$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; do
|
||
|
[ -d "$d" ] || continue
|
||
|
is_empty "$d" && echo rm -r "$d" || note "skipping unempty $d"
|
||
|
done
|
||
|
|
||
|
mkdir -p opt/local/bin src work play
|