mirror of
https://github.com/tiyn/larbs.git
synced 2025-11-19 11:19:46 +01:00
it should work properly now
This commit is contained in:
87
larbs.sh
87
larbs.sh
@@ -1,13 +1,12 @@
|
||||
#!/bin/sh
|
||||
# Luke's Auto Rice Boostrapping Script (LARBS)
|
||||
# by Luke Smith <luke@lukesmith.xyz>
|
||||
# edited by Marten Kante <mail@martenkante.de>
|
||||
# License: GNU GPLv3
|
||||
|
||||
### OPTIONS AND VARIABLES ###
|
||||
|
||||
while getopts ":a:r:b:p:h:w" o; do case "${o}" in
|
||||
h) printf "Optional arguments for custom use:\\n -r: Dotfiles repository (local file or url)\\n -b: Dotfiles branch (master is assumed otherwise)\\n -p: Dependencies and programs csv (local file or url)\\n -a: AUR helper (must have pacman-like syntax)\\n -h: Show this message\\n" && exit ;;
|
||||
while getopts ":a:r:b:p:h" o; do case "${o}" in
|
||||
h) printf "Optional arguments for custom use:\\n -r: Dotfiles repository (local file or url)\\n -p: Dependencies and programs csv (local file or url)\\n -a: AUR helper (must have pacman-like syntax)\\n -h: Show this message\\n" && exit ;;
|
||||
r) dotfilesrepo=${OPTARG} && git ls-remote "$dotfilesrepo" || exit ;;
|
||||
b) repobranch=${OPTARG} ;;
|
||||
p) progsfile=${OPTARG} ;;
|
||||
@@ -15,18 +14,21 @@ while getopts ":a:r:b:p:h:w" o; do case "${o}" in
|
||||
*) printf "Invalid option: -%s\\n" "$OPTARG" && exit ;;
|
||||
esac done
|
||||
|
||||
# DEFAULTS:
|
||||
[ -z "$dotfilesrepo" ] && dotfilesrepo="https://github.com/tiynger/.dotfiles.git" && repobranch="master"
|
||||
[ -z "$progsfile" ] && progsfile="https://raw.githubusercontent.com/TiynGER/LARBS/master/progs.csv"
|
||||
[ -z "$dotfilesrepo" ] && dotfilesrepo="https://github.com/tiynger/dotfiles.git"
|
||||
[ -z "$progsfile" ] && progsfile="https://raw.githubusercontent.com/tiynger/LARBS/master/progs.csv"
|
||||
[ -z "$aurhelper" ] && aurhelper="yay"
|
||||
[ -z "$repobranch" ] && repobranch="master"
|
||||
|
||||
### FUNCTIONS ###
|
||||
|
||||
distro="arch"
|
||||
installpkg(){ pacman --noconfirm --needed -S "$1" >/dev/null 2>&1 ;}
|
||||
grepseq="\"^[PGA]*,\""
|
||||
|
||||
error() { clear; printf "ERROR:\\n%s\\n" "$1"; exit;}
|
||||
|
||||
welcomemsg() { \
|
||||
dialog --title "Welcome!" --msgbox "Welcome to Luke's Auto-Rice Bootstrapping Script!\\n\\nThis script will automatically install a fully-featured dwm Arch Linux desktop, which I use as my main machine.\\n\\n-Luke" 10 60
|
||||
dialog --title "Welcome!" --msgbox "Welcome to Luke's Auto-Rice Bootstrapping Script!\\n\\nThis script will automatically install a fully-featured Linux desktop, which I use as my main machine.\\n\\n-Luke" 10 60
|
||||
}
|
||||
|
||||
getuserandpass() { \
|
||||
@@ -57,6 +59,7 @@ adduserandpass() { \
|
||||
dialog --infobox "Adding user \"$name\"..." 4 50
|
||||
useradd -m -g wheel -s /bin/bash "$name" >/dev/null 2>&1 ||
|
||||
usermod -a -G wheel "$name" && mkdir -p /home/"$name" && chown "$name":wheel /home/"$name"
|
||||
repodir="/home/$name/.local/src"; mkdir -p "$repodir"; chown -R "$name":wheel "$repodir"
|
||||
echo "$name:$pass1" | chpasswd
|
||||
unset pass1 pass2 ;}
|
||||
|
||||
@@ -82,13 +85,14 @@ manualinstall() { # Installs $1 manually if not installed. Used only for AUR hel
|
||||
|
||||
maininstall() { # Installs all needed programs from main repo.
|
||||
dialog --title "LARBS Installation" --infobox "Installing \`$1\` ($n of $total). $1 $2" 5 70
|
||||
pacman --noconfirm --needed -S "$1" >/dev/null 2>&1
|
||||
installpkg "$1"
|
||||
}
|
||||
|
||||
gitmakeinstall() {
|
||||
dir=$(mktemp -d)
|
||||
dialog --title "LARBS Installation" --infobox "Installing \`$(basename "$1")\` ($n of $total) via \`git\` and \`make\`. $(basename "$1") $2" 5 70
|
||||
git clone --depth 1 "$1" "$dir" >/dev/null 2>&1
|
||||
progname="$(basename "$1")"
|
||||
dir="$repodir/$progname"
|
||||
dialog --title "LARBS Installation" --infobox "Installing \`$progname\` ($n of $total) via \`git\` and \`make\`. $(basename "$1") $2" 5 70
|
||||
sudo -u "$name" git clone --depth 1 "$1" "$dir" >/dev/null 2>&1 || { cd "$dir" || return ; sudo -u "$name" git pull --force origin master;}
|
||||
cd "$dir" || exit
|
||||
make >/dev/null 2>&1
|
||||
make install >/dev/null 2>&1
|
||||
@@ -102,52 +106,43 @@ aurinstall() { \
|
||||
|
||||
pipinstall() { \
|
||||
dialog --title "LARBS Installation" --infobox "Installing the Python package \`$1\` ($n of $total). $1 $2" 5 70
|
||||
command -v pip || pacman -S --noconfirm --needed python-pip >/dev/null 2>&1
|
||||
command -v pip || installpkg python-pip >/dev/null 2>&1
|
||||
yes | pip install "$1"
|
||||
}
|
||||
|
||||
installationloop() { \
|
||||
([ -f "$progsfile" ] && cp "$progsfile" /tmp/progs.csv) || curl -Ls "$progsfile" | sed '/^#/d' > /tmp/progs.csv
|
||||
([ -f "$progsfile" ] && cp "$progsfile" /tmp/progs.csv) || curl -Ls "$progsfile" | sed '/^#/d' | eval grep "$grepseq" > /tmp/progs.csv
|
||||
total=$(wc -l < /tmp/progs.csv)
|
||||
aurinstalled=$(pacman -Qm | awk '{print $1}')
|
||||
aurinstalled=$(pacman -Qqm)
|
||||
while IFS=, read -r tag program comment; do
|
||||
n=$((n+1))
|
||||
echo "$comment" | grep "^\".*\"$" >/dev/null 2>&1 && comment="$(echo "$comment" | sed "s/\(^\"\|\"$\)//g")"
|
||||
case "$tag" in
|
||||
"") maininstall "$program" "$comment" ;;
|
||||
"A") aurinstall "$program" "$comment" ;;
|
||||
"G") gitmakeinstall "$program" "$comment" ;;
|
||||
"P") pipinstall "$program" "$comment" ;;
|
||||
*) maininstall "$program" "$comment" ;;
|
||||
esac
|
||||
done < /tmp/progs.csv ;}
|
||||
|
||||
putgitrepo() { # Downlods a gitrepo $1 and places the files in $2 only overwriting conflicts
|
||||
putgitrepo() { # Downloads a gitrepo $1 and places the files in $2 only overwriting conflicts
|
||||
dialog --infobox "Downloading and installing config files..." 4 60
|
||||
[ -z "$3" ] && branch="master" || branch="$repobranch"
|
||||
dir=$(mktemp -d)
|
||||
[ ! -d "$2" ] && mkdir -p "$2" && chown -R "$name:wheel" "$2"
|
||||
chown -R "$name:wheel" "$dir"
|
||||
sudo -u "$name" git clone -b "$branch" --depth 1 "$1" "$dir/gitrepo" >/dev/null 2>&1 &&
|
||||
sudo -u "$name" cp -rfT "$dir/gitrepo" "$2"
|
||||
[ ! -d "$2" ] && mkdir -p "$2"
|
||||
chown -R "$name":wheel "$dir" "$2"
|
||||
sudo -u "$name" git clone -b "$branch" --depth 1 "$1" "$dir" >/dev/null 2>&1
|
||||
sudo -u "$name" cp -rfT "$dir" "$2"
|
||||
}
|
||||
|
||||
serviceinit() { for service in "$@"; do
|
||||
dialog --infobox "Enabling \"$service\"..." 4 40
|
||||
systemctl enable "$service"
|
||||
systemctl start "$service"
|
||||
done ;}
|
||||
|
||||
systembeepoff() { dialog --infobox "Getting rid of that retarded error beep sound..." 10 50
|
||||
rmmod pcspkr
|
||||
echo "blacklist pcspkr" > /etc/modprobe.d/nobeep.conf ;}
|
||||
|
||||
resetpulse() { dialog --infobox "Reseting Pulseaudio..." 4 50
|
||||
killall pulseaudio
|
||||
sudo -n "$name" pulseaudio --start ;}
|
||||
|
||||
finalize(){ \
|
||||
dialog --infobox "Preparing welcome message..." 4 50
|
||||
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 (it will start automatically in tty1).\\n\\n.t Luke. Dont forget to use config pull or config clone to finalize the dotfiles installation. \\n\\n.t TiynGER" 12 80
|
||||
echo "exec_always --no-startup-id notify-send -i ~/.local/share/larbs/larbs.png 'Welcome to LARBS:' 'Press Super+F1 for the manual.' -t 10000" >> "/home/$name/.config/i3/config"
|
||||
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 (it will start automatically in tty1).\\n\\n.t Luke" 12 80
|
||||
}
|
||||
|
||||
### THE ACTUAL SCRIPT ###
|
||||
@@ -155,9 +150,9 @@ finalize(){ \
|
||||
### This is how everything happens in an intuitive format and order.
|
||||
|
||||
# Check if user is root on Arch distro. Install dialog.
|
||||
pacman -Syu --noconfirm --needed dialog || error "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? Are you sure your Arch keyring is updated?"
|
||||
installpkg dialog || error "Are you sure you're running this as the root user and have an internet connection?"
|
||||
|
||||
# Welcome user.
|
||||
# Welcome user and pick dotfiles.
|
||||
welcomemsg || error "User exited."
|
||||
|
||||
# Get and verify username and password.
|
||||
@@ -174,10 +169,12 @@ preinstallmsg || error "User exited."
|
||||
adduserandpass || error "Error adding username and/or password."
|
||||
|
||||
# Refresh Arch keyrings.
|
||||
refreshkeys || error "Error automatically refreshing Arch keyring. Consider doing so manually."
|
||||
# refreshkeys || error "Error automatically refreshing Arch keyring. Consider doing so manually."
|
||||
|
||||
dialog --title "LARBS Installation" --infobox "Installing \`basedevel\` and \`git\` for installing other software required for the installation of other programs." 5 70
|
||||
pacman --noconfirm --needed -S curl base-devel git ntp
|
||||
installpkg curl
|
||||
installpkg base-devel
|
||||
installpkg git
|
||||
|
||||
[ -f /etc/sudoers.pacnew ] && cp /etc/sudoers.pacnew /etc/sudoers # Just in case
|
||||
|
||||
@@ -186,7 +183,7 @@ pacman --noconfirm --needed -S curl base-devel git ntp
|
||||
newperms "%wheel ALL=(ALL) NOPASSWD: ALL"
|
||||
|
||||
# Make pacman and yay colorful and adds eye candy on the progress bar because why not.
|
||||
grep "^Color" /etc/pacman.conf >/dev/null || sed -i "s/^#Color/Color/" /etc/pacman.conf
|
||||
grep "^Color" /etc/pacman.conf >/dev/null || sed -i "s/^#Color$/Color/" /etc/pacman.conf
|
||||
grep "ILoveCandy" /etc/pacman.conf >/dev/null || sed -i "/#VerbosePkgLists/a ILoveCandy" /etc/pacman.conf
|
||||
|
||||
# Use all cores for compilation.
|
||||
@@ -205,22 +202,26 @@ yes | sudo -u "$name" $aurhelper -S libxft-bgra >/dev/null 2>&1
|
||||
|
||||
# Install the dotfiles in the user's home directory
|
||||
putgitrepo "$dotfilesrepo" "/home/$name" "$repobranch"
|
||||
rm -f "/home/$name/README.md" "/home/$name/LICENSE"
|
||||
rm -f "/home/$name/README.md" "/home/$name/LICENSE" "/home/$name/.gitignore"
|
||||
rm -rf "/home/$name/.git"
|
||||
|
||||
# Pulseaudio, if/when initially installed, often needs a restart to work immediately.
|
||||
# Restart pulseaudio to make it work
|
||||
[ -f /usr/bin/pulseaudio ] && resetpulse
|
||||
|
||||
# Enable services here.
|
||||
# Setup NetworkManager
|
||||
systemctl enable NetworkManager
|
||||
|
||||
# Most important command! Get rid of the beep!
|
||||
systembeepoff
|
||||
|
||||
# Make zsh the default shell for the user.
|
||||
sed -i "s/^$name:\(.*\):\/bin\/.*/$name:\1:\/bin\/zsh/" /etc/passwd
|
||||
|
||||
#updating pkgfile packagerepos
|
||||
sudo pkgfile -u
|
||||
# dbus UUID must be generated for Artix runit.
|
||||
dbus-uuidgen > /var/lib/dbus/machine-id
|
||||
|
||||
# Most important command! Get rid of the beep!
|
||||
systembeepoff
|
||||
# Let LARBS know the WM it's supposed to run.
|
||||
chown -R "$name":wheel "/home/$name/.local"
|
||||
|
||||
# This line, overwriting the `newperms` command above will allow the user to run
|
||||
# serveral important commands, `shutdown`, `reboot`, updating, etc. without a password.
|
||||
|
||||
Reference in New Issue
Block a user