122 lines
3.4 KiB
Bash
122 lines
3.4 KiB
Bash
#!/bin/sh
|
|
|
|
dotfiles="https://git.amolinae.com/amolinae06/dotfiles.git"
|
|
software="https://git.amolinae.com/amolinae06/installer/raw/branch/main/software.csv"
|
|
postinstall="https://git.amolinae.com/amolinae06/installer/raw/branch/main/postinstall.sh"
|
|
|
|
apk_install(){
|
|
echo "installing $1"; apk add "$1" >/dev/null 2>&1
|
|
}
|
|
|
|
git_install(){
|
|
echo "cloning from $1"; su - "$user" -c "cd /home/$user/.local/src/ && git clone \"$1\"" >/dev/null 2>&1
|
|
}
|
|
|
|
deploy_dotfiles(){
|
|
printf "Deploying dotfiles...\n"
|
|
su - $user -c "git clone $dotfiles && cd dotfiles && rm -rf .git .gitmodules README.md && cp -r .config .zprofile /home/$user/ && cp -r .local/* /home/$user/.local/ && cd && rm -rf dotfiles"
|
|
}
|
|
|
|
read_software(){
|
|
# Checks if .local/src/ exists.
|
|
[ -d "/home/"$user"/.local/src/" ] || su - "$user" -c "mkdir -p "/home/"$user"/.local/src/""
|
|
|
|
([ -f "$1" ] && cp "$1" /tmp/temp.csv) || wget -qO- "$1" > /tmp/temp.csv
|
|
|
|
tail -n +2 "/tmp/temp.csv" | sed -E ':a; s/("[^"]*),([^"]*")/\1\2/; ta' | while IFS=',' read -r NAME DESCRIPTION GIT GIT_URL; do
|
|
case "$GIT" in
|
|
"N") apk_install $NAME ;;
|
|
"Y") git_install "$GIT_URL" ;;
|
|
*) echo "ERROR: failed to determine $NAME."; exit 1 ;;
|
|
esac
|
|
done
|
|
|
|
rm "/tmp/temp.csv"
|
|
printf "Successfully installed all software!\n"
|
|
}
|
|
|
|
setup_greetd(){
|
|
printf "Setting up greetd\n"
|
|
|
|
# Check if greetd directory exists, if not, create it.
|
|
[ -d "/etc/greetd" ] || mkdir "/etc/greetd"
|
|
|
|
cat <<EOF > /etc/greetd/config.toml
|
|
[terminal]
|
|
vt = 7
|
|
|
|
[default_session]
|
|
command = "tuigreet -t -r --cmd /home/$user/.local/bin/dwllaunch"
|
|
user = "greetd"
|
|
EOF
|
|
|
|
rc-update add greetd default
|
|
printf "Finished setting up greetd.\n"
|
|
}
|
|
|
|
setup_shell(){
|
|
sed -i "/^$user:/s#:[^:]*\$#:/bin/zsh#" /etc/passwd
|
|
mkdir -p "/home/$user/.cache/zsh"
|
|
touch "/home/$user/.cache/zsh/history"
|
|
chown -R "$user":"$user" "/home/$user/.cache/"
|
|
echo "changed "$user"'s shell to zsh"
|
|
}
|
|
|
|
setup_bluetooth(){
|
|
printf "Setting up bluetooth\n"
|
|
rc-update add bluetooth default
|
|
printf "Done.\n"
|
|
}
|
|
|
|
setup_home(){
|
|
su - $user -c "xdg-user-dirs-update && mkdir ~/Documents/Miscellaneous"
|
|
}
|
|
|
|
setup_chroot(){
|
|
printf "Setting up chroot\n"
|
|
apk_install curl
|
|
cd "/home/$user/Documents/Miscellaneous"
|
|
mkdir alpchroot
|
|
curl -LO https://dl-cdn.alpinelinux.org/alpine/v3.20/main/x86_64/apk-tools-static-2.14.4-r1.apk
|
|
tar -xzf apk-tools-static-*.apk
|
|
./sbin/apk.static -X https://dl-cdn.alpinelinux.org/alpine/v3.20/main -U --allow-untrusted -p alpchroot/ --initdb add alpine-base
|
|
mount -o bind /dev alpchroot/dev
|
|
mount -t proc none alpchroot/proc
|
|
mount -o bind /sys alpchroot/sys
|
|
cp -L /etc/resolv.conf alpchroot/etc/
|
|
chown -R "$user":"$user" alpchroot/ >/dev/null 2>&1
|
|
mkdir -p alpchroot/etc/apk
|
|
cp /etc/apk/repositories alpchroot/etc/apk/repositories
|
|
apk del curl
|
|
printf "Finished setting up chroot!\n"
|
|
}
|
|
|
|
post_install(){
|
|
printf "Postinstall\n"
|
|
([ -f "$postinstall" ] && cp "$postinstall" /tmp/postinstall.sh) || wget -qO- "$postinstall" > /tmp/postinstall.sh
|
|
su - "$user" -c "zsh -lc 'sh /tmp/postinstall.sh \"$@\" '"
|
|
}
|
|
|
|
check_root(){
|
|
if [ "$(id -u)" -ne 0 ]; then
|
|
echo "ERROR: you must run this script as root."; exit 1
|
|
fi
|
|
}
|
|
|
|
get_user(){
|
|
printf "Please enter the name of your user: "
|
|
read -r user
|
|
}
|
|
|
|
check_root
|
|
echo "Welcome to the installer"
|
|
apk_install git
|
|
get_user
|
|
read_software "$software"
|
|
setup_home
|
|
deploy_dotfiles
|
|
setup_greetd
|
|
setup_shell
|
|
setup_bluetooth
|
|
setup_chroot
|
|
post_install "$user"
|