mirror of
https://github.com/notwa/rc
synced 2025-02-05 07:43:22 -08:00
overhaul install script
this removes some of the directory structure logic (no more `is_empty`) which isn't ideal, but going forward i'd rather handle it case-by-case.
This commit is contained in:
parent
42812d0f0a
commit
7e41ababec
1 changed files with 38 additions and 46 deletions
84
install
84
install
|
@ -2,7 +2,6 @@
|
|||
# for busybox ash, dash, bash, and zsh.
|
||||
|
||||
VERBOSE="${VERBOSE-1}"
|
||||
|
||||
NAME="$0"
|
||||
|
||||
die() {
|
||||
|
@ -12,25 +11,30 @@ die() {
|
|||
exit 1
|
||||
} >&2
|
||||
|
||||
pl() { # print lines
|
||||
printf '%s\n' "$@"
|
||||
}
|
||||
|
||||
backup() {
|
||||
: "${1:?missing argument}"
|
||||
printf '%s\n' "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"
|
||||
pl "backing up $1"
|
||||
mkdir -p "${backup_dir:?backup_dir unset}/${1%/*}" || die "failed to create backup directory"
|
||||
! [ -e "$backup_dir/$1" ] || die "backup already exists: $backup_dir/$1"
|
||||
mv "$1" "$backup_dir/$1" || die "failed to backup $1"
|
||||
}
|
||||
|
||||
hardlink() {
|
||||
: "${1:?missing argument}"
|
||||
: "${2:?missing argument}"
|
||||
if [ -e "$1" ]; then
|
||||
[ ! "$1" -ef "$2" ] || return 0
|
||||
! [ "$1" -ef "$2" ] || return 0
|
||||
if [ -h "$1" ]; then
|
||||
printf '%s\n' "removing symbolic link $1"
|
||||
pl "removing symbolic link $1"
|
||||
rm "$1" || die "failed to remove symbolic link"
|
||||
fi
|
||||
if [ -s "$1" ]; then
|
||||
backup "$1" || die "$1 already exists"
|
||||
#diff -U3 "$1" "$2" >>/tmp/installed.patch
|
||||
backup "$1"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
@ -43,7 +47,7 @@ softlink_nix() {
|
|||
if [ -e "$1" ]; then
|
||||
if [ -h "$1" ]; then
|
||||
[ "$(readlink "$1")" != "$2" ] || return 0
|
||||
printf '%s\n' "removing symbolic link $1"
|
||||
pl "removing symbolic link $1"
|
||||
rm "$1" || die "failed to remove symbolic link"
|
||||
else
|
||||
die "$1 already exists and is not a symbolic link"
|
||||
|
@ -55,8 +59,8 @@ softlink_nix() {
|
|||
|
||||
list_files() {
|
||||
find "${1:-.}" -maxdepth 1 -printf "%P\n" | while read -r f; do
|
||||
[ "${#f}" -gt 0 ] || continue
|
||||
printf "%s\n" "$f"
|
||||
[ "${#f}" != 0 ] || continue
|
||||
pl "$f"
|
||||
done
|
||||
}
|
||||
|
||||
|
@ -91,17 +95,19 @@ find_new_files() (
|
|||
list_files "$1" | while read -r f; do
|
||||
d1="$1/$f"
|
||||
d2="$2/$f"
|
||||
[ "$d1" != ".vim/.netrwhist" ] || continue
|
||||
[ "$d1" != ".vim/backup" ] || continue
|
||||
[ "$d1" != ".vim/bundle" ] || continue
|
||||
[ "$d1" != ".vim/swp" ] || continue
|
||||
[ "$d1" != ".vim/undo" ] || continue
|
||||
|
||||
case "$d1" in
|
||||
(.vim/.netrwhist) continue;;
|
||||
(.vim/backup) continue;;
|
||||
(.vim/bundle) continue;;
|
||||
(.vim/swp) continue;;
|
||||
(.vim/undo) continue;;
|
||||
esac
|
||||
|
||||
if [ -d "$d2" ]; then
|
||||
find_new_files "$d1" "$d2" || exit
|
||||
elif [ ! "$d1" -ef "$d2" ]; then
|
||||
ind=
|
||||
[ ! -d "$d1" ] || ind=/
|
||||
elif ! [ "$d1" -ef "$d2" ]; then
|
||||
[ -d "$d1" ] && ind=/ || ind=
|
||||
if [ "$VERBOSE" -lt 1 ]; then
|
||||
printf ' + %s%s\n' "$d1" "$ind" >&2
|
||||
else
|
||||
|
@ -123,17 +129,19 @@ softlink() {
|
|||
fi
|
||||
}
|
||||
|
||||
which readlink >/dev/null || die 'failed sanity check (check your $PATH)'
|
||||
readlink -e / >/dev/null || die 'failed sanity check (check your $PATH)'
|
||||
|
||||
rc="$(readlink -f "$(dirname "$NAME")" )"
|
||||
[ -d "$rc" ] || die "failed to determine rc directory"
|
||||
unset CDPATH
|
||||
rc="$(readlink -f "$0")" && rc="${rc%/*}" && cd "$rc" || die "failed to determine rc directory"
|
||||
cd "${HOME:?HOME variable empty or unset}" || die "failed to change directory"
|
||||
|
||||
backup_dir="$rc/backup-$(date -u '+%s')"
|
||||
[ ! -d "$backup_dir" ] || die "backup directory already exists"
|
||||
backup_dir="$rc/backup-$(date -u +%s)" || die "failed to determine date"
|
||||
! [ -d "$backup_dir" ] || die "backup directory already exists"
|
||||
|
||||
for f in .shrc .bashrc .zshrc .prep .prezto-compinit .ls_colors \
|
||||
.vimrc .inputrc .Xresources .screenrc .tmux.conf; do
|
||||
for f in \
|
||||
.shrc .bashrc .zshrc .prep .prezto-compinit .ls_colors \
|
||||
.vimrc .inputrc .Xresources .screenrc .tmux.conf \
|
||||
; do
|
||||
hardlink "$f" "$rc/home/${f#.}"
|
||||
done
|
||||
|
||||
|
@ -142,30 +150,14 @@ for d in sh .vim .mpv; do
|
|||
done
|
||||
|
||||
# ensure that .bashrc gets executed
|
||||
if [ ! -e .bash_profile ] || ! grep -qF .bashrc .bash_profile; then
|
||||
echo >> .bash_profile
|
||||
printf '%s\n' '[ ! -f ~/.bashrc ] || . ~/.bashrc' >> .bash_profile
|
||||
if ! [ -e .bash_profile ] || ! grep -qF .bashrc .bash_profile; then
|
||||
pl '' '! [ -f ~/.bashrc ] || . ~/.bashrc' >>.bash_profile
|
||||
fi
|
||||
|
||||
is_empty() {
|
||||
set -- "${1:?is_empty requires an argument}"
|
||||
find "$1" -type f | while read -r dummy; do
|
||||
return 1
|
||||
done || return 1 # just in case pipes mess things up
|
||||
return 0
|
||||
}
|
||||
|
||||
# delete any directory structure that may have been included with the OS.
|
||||
# note that i'm careful not to delete them if they contain even a single file,
|
||||
# but you might still want to remove this if you're adapting my install script.
|
||||
for d in Desktop Documents Downloads Music Pictures Public Templates Video Videos; do
|
||||
[ -d "$d" ] || continue
|
||||
if is_empty "$d"; then
|
||||
rm -r "$d" # doesn't really matter if it fails
|
||||
else
|
||||
printf '%s\n' "not removing $d because it contains files"
|
||||
fi
|
||||
! [ -d "$d" ] || rmdir "$f"
|
||||
done
|
||||
|
||||
# create instead my preferred directory structure.
|
||||
mkdir -p opt/local/bin src work play
|
||||
mkdir -p opt/local/bin src work play || die "failed to create directories"
|
||||
|
|
Loading…
Add table
Reference in a new issue