118 lines
2.5 KiB
Bash
118 lines
2.5 KiB
Bash
#!/bin/sh
|
|
|
|
osreleaseprop() {
|
|
cat /etc/os-release | grep -e "^$1=" | sed 's/ID=//'
|
|
}
|
|
|
|
elevated() {
|
|
s=${SUDO:-sudo}
|
|
if [ ! "$s" = "none" ]; then
|
|
if ! which $s &> /dev/null; then
|
|
echo "command \"$s\" not found"
|
|
exit 1
|
|
fi
|
|
else
|
|
s=""
|
|
fi
|
|
$s $@
|
|
}
|
|
|
|
DISTRO=$(osreleaseprop ID)
|
|
if [ ! -d "distros/$DISTRO" ]; then
|
|
echo "$DISTRO is not supported."
|
|
exit 1
|
|
fi
|
|
|
|
pm() {
|
|
elevated "sh distros/$DISTRO/pm.sh $@"
|
|
}
|
|
|
|
install_package_list() {
|
|
pkgs=""
|
|
[ -f "distros/${1:-$DISTRO}/package.list" ] || return 1
|
|
for pkg in $(cat distros/${1:-$DISTRO}/package.list | sed 's/#.*$//'); do
|
|
pkgs="$pkgs $pkg"
|
|
done
|
|
pm -i $pkgs
|
|
}
|
|
|
|
run_scripts() {
|
|
cmd=$1
|
|
shift
|
|
case $cmd in
|
|
sys)
|
|
dir="distros/${1:-$DISTRO}/sys-scripts"
|
|
[ -d "$dir" ] || return
|
|
for s in $(ls $dir); do
|
|
echo "# running $dir/$s..."
|
|
elevated sh $dir/$s || exit 1
|
|
done
|
|
;;
|
|
user)
|
|
dir="distros/${1:-$DISTRO}/user-scripts"
|
|
[ -d "$dir" ] || return
|
|
for s in $(ls $dir); do
|
|
echo "# running $dir/$s..."
|
|
sh $dir/$s || exit 1
|
|
done
|
|
;;
|
|
esac
|
|
}
|
|
|
|
overlay() {
|
|
[ -d "distros/${1:-$DISTRO}/root" ] || return 0
|
|
elevated cp -r distros/${1:-$DISTRO}/root /
|
|
}
|
|
|
|
__step_update() {
|
|
echo "# updating system..."
|
|
pm -u
|
|
}
|
|
|
|
__step_install_package_list() {
|
|
echo "# installing package lists..."
|
|
install_package_list any
|
|
install_package_list
|
|
}
|
|
|
|
__step_run_system_scripts() {
|
|
echo "# running system scripts..."
|
|
run_scripts sys any
|
|
run_scripts sys
|
|
}
|
|
|
|
__step_run_user_scripts() {
|
|
echo "# running user scripts..."
|
|
run_scripts user any
|
|
run_scripts user
|
|
}
|
|
|
|
__step_overlay() {
|
|
echo "# overlaying root directories..."
|
|
overlay any
|
|
overlay
|
|
}
|
|
|
|
__step_link_home() {
|
|
echo "# linking all home files..."
|
|
trackingfile=".dotfiles/$(git rev-parse HEAD)-links"
|
|
for item in $(find ./home -type f); do
|
|
path=$(echo $item | sed "s/\.\/home//")
|
|
[ -z "$path" ] && continue
|
|
path="$HOME$path"
|
|
mkdir -p $(dirname $path) &> /dev/null
|
|
ln $item $path && echo "$path" >> $trackingfile
|
|
done
|
|
}
|
|
|
|
mkdir -p .dotfiles &> /dev/null
|
|
|
|
if [ -n "$1" ]; then
|
|
$(printf "__step_%s" "$1")
|
|
else
|
|
__step_update
|
|
__step_install_package_list
|
|
__step_run_system_scripts
|
|
__step_run_user_scripts
|
|
__step_overlay
|
|
fi
|