#!/bin/sh dotfiles="https://git.amolinae.com/amolinae06/dotfiles.git" software="https://git.amolinae.com/amolinae06/installer/raw/branch/main/software.csv" devsoftware="https://git.amolinae.com/amolinae06/installer/raw/branch/main/devware.csv" apk_install(){ echo "installing $1"; apk add "$1" >/dev/null 2>&1 } bwroot_apk_install(){ echo "installing $1 on chroot" ./sbin/apk.static -X https://dl-cdn.alpinelinux.org/alpine/v3.20/main \ -U -p alpchroot/ add "$1" >/dev/null 2>&1 } git_install(){ echo "cloning from $1"; su - "$user" -c "cd ~/.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 .cache .config .local .zprofile /home/$user/ && cd && rm -rf dotfiles" } read_software(){ ([ -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" ;; "D") bwroot_apk_install $NAME ;; *) echo "ERROR: failed to determine $NAME."; exit 1 ;; esac done rm "/tmp/progs.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 < /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 } 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 read_software "$devsoftware"