147 lines
4.4 KiB
Bash
Executable file
147 lines
4.4 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
##region Sanity checks and "imports"
|
|
[ $ZI_DOTFILES ] && {
|
|
. $ZI_DOTFILES/common
|
|
} || {
|
|
[ -f ./common ] || { >&2 echo "Bootstrap should be ran directly from dotfiles directory ('./bootstrap'), or run './pre-bootstrap' before running bootstrap!"; exit 1; }
|
|
. ./common
|
|
}
|
|
|
|
[ $ZI_DOTFILES ] || {
|
|
ZI_DOTFILES=$PWD
|
|
echo "'./pre-bootstrap' was never ran before. This script will store '$PWD' in \$ZI_DOTFILES as helper variable for automation scripts."
|
|
prompt "Run it now? [y/N] " || { >&2 echo "You need to run './pre-bootstrap' before running bootstrap!"; exit 1; }
|
|
echo "======include/dotfiles======"
|
|
./pre-bootstrap -
|
|
echo "============================"
|
|
prompt "Set '$PWD' as dotfiles directory? [y/N] " || exit 1
|
|
./pre-bootstrap - > $ZI_DOTFILES/.config/zsh/include/dotfiles
|
|
}
|
|
|
|
[ -d $ZI_DOTFILES ] || { >&2 echo "Invalid dotfiles path, please re-run pre-bootstrap!"; exit 1; }
|
|
|
|
. $ZI_DOTFILES/bootstrap-pkgs
|
|
##endregion
|
|
|
|
##region Function and Variable
|
|
is_package_exists() {
|
|
[ $(command -v "$1" | wc -l) -gt 0 ] && return 0 || return 1
|
|
}
|
|
|
|
case "$OSTYPE" in
|
|
"darwin"* ) DISTRO="apple" ;;
|
|
* ) DISTRO="$(cat /etc/*-release | grep ^ID | head -n1 | cut -d '=' -f2 | cut -d '"' -f2)" ;;
|
|
esac
|
|
[ "$SUDO" = "" ] && {
|
|
FALLBACK_SUDO="sudo"
|
|
case $DISTRO in
|
|
"apple" ) SUDO=$FALLBACK_SUDO ;; # There's no good doas implementation for macOS
|
|
* )
|
|
is_package_exists doas && SUDO="doas" || SUDO=$FALLBACK_SUDO
|
|
doas echo "" >/dev/null 2>/dev/null || SUDO=$FALLBACK_SUDO
|
|
;;
|
|
esac
|
|
}
|
|
[ "$PACMAN" = "" ] && {
|
|
case $DISTRO in
|
|
"arch" ) PACMAN="pacman" ;;
|
|
"ubuntu" ) PACMAN="apt" ;;
|
|
"apple" ) PACMAN="apple" ;;
|
|
esac
|
|
}
|
|
AUR="${AUR:-paru}"
|
|
|
|
update_package_db() {
|
|
MSG_FAILED="Failed to update package database, skipping..."
|
|
case "$PACMAN" in
|
|
"pacman" ) $SUDO $PACMAN -Sy || echo $MSG_FAILED ;;
|
|
"apt" ) $SUDO $PACMAN -y update || echo $MSG_FAILED ;;
|
|
"apple" ) ;;
|
|
* ) echo "Not implemented, skipping..." ;;
|
|
esac
|
|
}
|
|
|
|
install_package() {
|
|
[ "$1" = "" ] && { echo "No package candidate is specified, skipping..."; return; }
|
|
|
|
MSG_FAILED="Failed to install some packages, skipping..."
|
|
case "$PACMAN" in
|
|
"pacman" ) $SUDO $PACMAN -S --noconfirm "$@" || echo $MSG_FAILED ;;
|
|
"apt" ) $SUDO $PACMAN -y install "$@" || echo $MSG_FAILED ;;
|
|
"apple" )
|
|
echo "Handled by nix. Read '.config/nix/README.md' for more information."
|
|
sleep 5
|
|
;;
|
|
* ) echo "Not implemented, skipping..." ;;
|
|
esac
|
|
}
|
|
|
|
install_aur_package() {
|
|
# >> Paranoia checks
|
|
[ $DISTRO = "arch" ] || { echo "AUR only available in Arch, skipping..."; return; }
|
|
|
|
is_package_exists $AUR || { echo "AUR helper '$AUR' is not installed, skipping..."; return; }
|
|
|
|
[ "$1" = "" ] && { echo "No AUR package candidate is specified, skipping..."; return; }
|
|
# <<
|
|
|
|
case "$AUR" in
|
|
"paru" ) $AUR -S --noconfirm --skipreview "$@" ;;
|
|
* ) $AUR -S --noconfirm "$@" ;;
|
|
esac
|
|
}
|
|
|
|
install_nix() {
|
|
is_package_exists nix && { echo "nix is already installed, skipping..."; return; }
|
|
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install
|
|
}
|
|
##endregion
|
|
|
|
echo "Linking x* configs..."
|
|
ln -si $ZI_DOTFILES/.config/xinitrc $HOME/.xinitrc
|
|
ln -si $ZI_DOTFILES/.config/xprofile $HOME/.xprofile
|
|
|
|
echo "Updating package database..."
|
|
update_package_db
|
|
|
|
echo "Installing common packages..."
|
|
install_package "${packages[@]}"
|
|
echo "Installing distro-specific packages..."
|
|
case $DISTRO in
|
|
"arch" )
|
|
install_package "${packages_arch[@]}"
|
|
echo "Installing AUR packages..."
|
|
install_aur_package "${packages_arch_aur[@]}"
|
|
;;
|
|
"ubuntu" ) install_package "${packages_ubuntu[@]}" ;;
|
|
* ) echo "Not implemented, skipping..." ;;
|
|
esac
|
|
|
|
echo "Installing nix..."
|
|
install_nix
|
|
|
|
echo "Changing default shell to zsh..."
|
|
$SUDO chsh -s $(which zsh)
|
|
|
|
echo "Configuring zsh to use XDG Base Directory..."
|
|
$SUDO $ZI_DOTFILES/zsh-xdg-setup
|
|
echo "Installing zsh config..."
|
|
ln -si $ZI_DOTFILES/.config/zsh $HOME/.config/zsh
|
|
|
|
is_package_exists doas && {
|
|
echo "Configuring doas..."
|
|
case "$OSTYPE" in
|
|
"darwin"* ) echo "permit persist :staff" > /tmp/doas.conf.tmp ;;
|
|
* ) echo "permit persist :wheel" > /tmp/doas.conf.tmp ;;
|
|
esac
|
|
echo "permit nopass root as root" >> /tmp/doas.conf.tmp
|
|
echo "=======/etc/doas.conf======="
|
|
cat /tmp/doas.conf.tmp
|
|
echo "============================"
|
|
$SUDO cp -i /tmp/doas.conf.tmp /etc/doas.conf
|
|
$SUDO ln -si /etc/doas.conf /usr/local/etc/doas.conf
|
|
}
|
|
|
|
echo "============================"
|
|
echo "Bootstrap completed, please restart your shell!"
|