LARBS/larbs.sh
2018-08-02 10:47:53 -04:00

139 lines
5.8 KiB
Bash
Executable file

#!/bin/bash
# You can provide a custom repository with -r or a custom programs csv with -p.
# Otherwise, the script will use my defaults.
while getopts ":r:p:h" o; do
case "${o}" in
h)
echo -e "Optional arguments for custom use:\n-r: Dotfiles repository\n-p: Dependencies and programs csv" && exit ;;
r)
dotfilesrepo=${OPTARG} ;;
p)
progsfile=${OPTARG} ;;
*)
echo "-$OPTARG is not a valid option." && exit ;;
esac
done
[ -z ${dotfilesrepo+x} ] && dotfilesrepo="https://github.com/lukesmithxyz/voidrice.git"
[ -z ${progsfile+x} ] && progsfile="https://raw.githubusercontent.com/LukeSmithxyz/LARBS/master/progs.csv"
pacman -S --noconfirm --needed dialog || { echo "Error at script start: Are you sure you're running this as the root user? Are you sure you're using an Arch-based distro? ;-) Are you sure you have an internet connection?"; exit; }
dialog --title "Welcome!" --msgbox "Welcome to Luke's Auto-Rice Bootstrapping Script!\n\nThis script will automatically install a fully-featured i3wm Arch Linux desktop, which I use as my main machine.\n\n-Luke" 10 60
name=$(dialog --no-cancel --inputbox "First, please enter a name for the user account." 10 60 3>&1 1>&2 2>&3 3>&1)
re="^[a-z_][a-z0-9_-]*$"
while ! [[ "${name}" =~ ${re} ]]; do
name=$(dialog --no-cancel --inputbox "Username not valid. Give a username beginning with a letter, with only lowercase letters, - and _." 10 60 3>&1 1>&2 2>&3 3>&1)
done
pass1=$(dialog --no-cancel --passwordbox "Enter a password for that user." 10 60 3>&1 1>&2 2>&3 3>&1)
pass2=$(dialog --no-cancel --passwordbox "Retype password." 10 60 3>&1 1>&2 2>&3 3>&1)
while [ $pass1 != $pass2 ]
do
pass1=$(dialog --no-cancel --passwordbox "Passwords do not match.\n\nEnter password again." 10 60 3>&1 1>&2 2>&3 3>&1)
pass2=$(dialog --no-cancel --passwordbox "Retype password." 10 60 3>&1 1>&2 2>&3 3>&1)
unset pass2
done
dialog --infobox "Adding user \"$name\"..." 4 50
useradd -m -g wheel -s /bin/bash $name
echo "$name:$pass1" | chpasswd
dialog --title "Let's get this party started!" --msgbox "The rest of the installation will now be totally automated, so you can sit back and relax.\n\nIt will take some time, but when done, you can relax even more with your complete system.\n\nNow just press <OK> and the system will begin installation!" 13 60 || { clear; exit; }
dialog --infobox "Refreshing Arch Keyring..." 4 40
pacman --noconfirm -Sy archlinux-keyring &>/dev/null
# Give packerwrapper a list of programs. Finds only those needing installation
# then, it sorts them into $mainqueue and $aurqueue for progs installable from
# main repo or AUR.
posprogs=$(pacman -Sl | awk '{print $2}')
packerwrapper() { \
for arg in "$@"
do
pacman -Q "$arg" &>/dev/null && continue
pacman -Qg "$arg" &>/dev/null && continue
grep "^$arg$" <<< $posprogs &>/dev/null && mainqueue="$mainqueue $arg" && continue
aurqueue="$aurqueue $arg"
done ;}
dialog --infobox "Getting program list..." 4 40
packerwrapper $(curl -sL $progsfile | grep ^, | cut -d ',' -f2)
count=$(echo "$mainqueue" | wc -w)
for x in $mainqueue
do
n=$((n+1))
dialog --title "LARBS Installation" --infobox "Downloading and installing program $n out of $count: $x...\n\nThe first programs will take more time due to dependencies." 8 70
pacman --noconfirm --needed -S "$x" &>/dev/null
done
sed -e "/#LARBS/d" /etc/sudoers
echo "%wheel ALL=(ALL) NOPASSWD: ALL #LARBS" >> /etc/sudoers
[[ -f /usr/bin/packer ]] || (
dialog --infobox "Installing \"packer\", an AUR helper..." 10 60
cd /tmp
rm -rf /tmp/packer*
curl -sO https://aur.archlinux.org/cgit/aur.git/snapshot/packer.tar.gz &&
sudo -u $name tar -xvf packer.tar.gz &>/dev/null &&
cd packer &&
sudo -u $name makepkg --noconfirm -si &>/dev/null
cd /tmp)
count=$(echo "$aurqueue" | wc -w)
n=0
for prog in $aurqueue
do
n=$((n+1))
dialog --infobox "Downloading and installing program $n out of $count: $prog..." 10 60
sudo -u $name packer -S --noconfirm "$prog" &>/dev/null
done
# Downloading and installing dotfiles
dialog --infobox "Downloading and installing config files..." 4 60
rm -rf /tmp/dotfiles/
sudo -u $name git clone --depth 1 $dotfilesrepo /tmp/dotfiles &>/dev/null &&
sudo -u $name rsync -rl /tmp/dotfiles/ /home/$name
dialog --infobox "Preparing welcome message..." 4 50
echo "exec_always --no-startup-id notify-send -i ~/.scripts/larbs.png '<b>Welcome to LARBS:</b> Press Super+F1 for the manual.' -t 10000" >> /home/$name/.config/i3/config
dialog --infobox "Reseting Pulseaudio..." 4 50
killall pulseaudio
sudo -u $name pulseaudio --start
# For installing programs via git. Give full url as argument
gitinstall() { \
dir=$(mktemp -d)
dialog --infobox "Installing \"$(basename $1)\" from source..." 4 40
git clone --depth 1 "$1" $dir
cd $dir
make
make install
}
gitinstall https://github.com/lukesmithxyz/st.git &>/dev/null
gitinstall https://github.com/lukesmithxyz/dmenu.git &>/dev/null
dialog --infobox "Enabling Network Manager..." 4 40
systemctl enable NetworkManager
systemctl start NetworkManager
dialog --infobox "Getting rid of that retarded error beep sound..." 10 50
rmmod pcspkr
echo "blacklist pcspkr" > /etc/modprobe.d/nobeep.conf
dialog --infobox "Updating sudoers file..." 4 40
sed -e "/#LARBS/d" /etc/sudoers
echo "%wheel ALL=(ALL) NOPASSWD: /usr/bin/shutdown,/usr/bin/reboot,/usr/bin/wifi-menu,/usr/bin/mount,/usr/bin/umount,/usr/bin/pacman -Syu,/usr/bin/pacman -Syyu,/usr/bin/packer -Syu,/usr/bin/packer -Syyu,/usr/bin/systemctl restart NetworkManager,/usr/bin/rc-service NetworkManager restart, /usr/bin/pacman -Syyu --noconfirm #LARBS" >> /etc/sudoers
dialog --title "All done!" --msgbox "Congrats! Provided there were no hidden errors, the script completed successfully and all the programs and configuration files should be in place.\n\nTo run the new graphical environment, log out and log back in as your new user, then run the command \"startx\" to start the graphical environment.\n\n-Luke" 12 80
clear