arch/artix only, zsh default, cleanup

This commit is contained in:
Luke Smith 2020-09-06 16:44:15 -04:00
parent 5ffc31bbc1
commit ade038053e
No known key found for this signature in database
GPG Key ID: 4C50B54A911F6252
3 changed files with 28 additions and 60 deletions

View File

@ -55,7 +55,8 @@ for people who read the csv or who want to install my dotfiles manually.
Depending on your own build, you may want to tactically order the programs in
your programs file. LARBS will install from the top to the bottom.
If you include commas in your program descriptions, be sure to include double quotes around the whole description to ensure correct parsing.
If you include commas in your program descriptions, be sure to include double
quotes around the whole description to ensure correct parsing.
### The script itself

View File

@ -21,17 +21,7 @@ esac done
### FUNCTIONS ###
if type xbps-install >/dev/null 2>&1; then
installpkg(){ xbps-install -y "$1" >/dev/null 2>&1 ;}
grepseq="\"^[PGV]*,\""
elif type apt >/dev/null 2>&1; then
installpkg(){ apt-get install -y "$1" >/dev/null 2>&1 ;}
grepseq="\"^[PGU]*,\""
else
distro="arch"
installpkg(){ pacman --noconfirm --needed -S "$1" >/dev/null 2>&1 ;}
grepseq="\"^[PGA]*,\""
fi
installpkg(){ pacman --noconfirm --needed -S "$1" >/dev/null 2>&1 ;}
error() { clear; printf "ERROR:\\n%s\\n" "$1"; exit;}
@ -44,7 +34,7 @@ welcomemsg() { \
getuserandpass() { \
# Prompts user for new username an password.
name=$(dialog --inputbox "First, please enter a name for the user account." 10 60 3>&1 1>&2 2>&3 3>&1) || exit
while ! echo "$name" | grep "^[a-z_][a-z0-9_-]*$" >/dev/null 2>&1; do
while ! echo "$name" | grep -q "^[a-z_][a-z0-9_-]*$"; do
name=$(dialog --no-cancel --inputbox "Username not valid. Give a username beginning with a letter, with only lowercase letters, - or _." 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)
@ -67,9 +57,9 @@ preinstallmsg() { \
adduserandpass() { \
# Adds user `$name` with password $pass1.
dialog --infobox "Adding user \"$name\"..." 4 50
useradd -m -g wheel -s /bin/bash "$name" >/dev/null 2>&1 ||
useradd -m -g wheel -s /bin/zsh "$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 $(dirname "$repodir")
repodir="/home/$name/.local/src"; mkdir -p "$repodir"; chown -R "$name":wheel "$(dirname "$repodir")"
echo "$name:$pass1" | chpasswd
unset pass1 pass2 ;}
@ -110,7 +100,7 @@ gitmakeinstall() {
aurinstall() { \
dialog --title "LARBS Installation" --infobox "Installing \`$1\` ($n of $total) from the AUR. $1 $2" 5 70
echo "$aurinstalled" | grep "^$1$" >/dev/null 2>&1 && return
echo "$aurinstalled" | grep -q "^$1$" && return
sudo -u "$name" $aurhelper -S --noconfirm "$1" >/dev/null 2>&1
}
@ -121,12 +111,12 @@ pipinstall() { \
}
installationloop() { \
([ -f "$progsfile" ] && cp "$progsfile" /tmp/progs.csv) || curl -Ls "$progsfile" | sed '/^#/d' | eval grep "$grepseq" > /tmp/progs.csv
([ -f "$progsfile" ] && cp "$progsfile" /tmp/progs.csv) || curl -Ls "$progsfile" | sed '/^#/d' > /tmp/progs.csv
total=$(wc -l < /tmp/progs.csv)
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")"
echo "$comment" | grep -q "^\".*\"$" && comment="$(echo "$comment" | sed "s/\(^\"\|\"$\)//g")"
case "$tag" in
"A") aurinstall "$program" "$comment" ;;
"G") gitmakeinstall "$program" "$comment" ;;
@ -159,7 +149,7 @@ finalize(){ \
### This is how everything happens in an intuitive format and order.
# Check if user is root on Arch distro. Install dialog.
installpkg dialog || error "Are you sure you're running this as the root user and have an internet connection?"
installpkg dialog || error "Are you sure you're running this as the root user, are on an Arch-based distribution and have an internet connection?"
# Welcome user and pick dotfiles.
welcomemsg || error "User exited."
@ -175,36 +165,33 @@ preinstallmsg || error "User exited."
### The rest of the script requires no user input.
adduserandpass || error "Error adding username and/or password."
# Refresh Arch keyrings.
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
installpkg curl
installpkg base-devel
installpkg git
installpkg ntp
for x in curl base-devel git ntp zsh; do
dialog --title "LARBS Installation" --infobox "Installing \`x\` which is required to install and configure other programs." 5 70
installpkg "$x"
done
dialog --title "LARBS Installation" --infobox "Synchronizing system time to ensure successful and secure installation of software..." 4 70
ntpdate 0.us.pool.ntp.org >/dev/null 2>&1
[ "$distro" = arch ] && { \
[ -f /etc/sudoers.pacnew ] && cp /etc/sudoers.pacnew /etc/sudoers # Just in case
adduserandpass || error "Error adding username and/or password."
# Allow user to run sudo without password. Since AUR programs must be installed
# in a fakeroot environment, this is required for all builds with AUR.
newperms "%wheel ALL=(ALL) NOPASSWD: ALL"
[ -f /etc/sudoers.pacnew ] && cp /etc/sudoers.pacnew /etc/sudoers # Just in case
# 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 "ILoveCandy" /etc/pacman.conf >/dev/null || sed -i "/#VerbosePkgLists/a ILoveCandy" /etc/pacman.conf
# Allow user to run sudo without password. Since AUR programs must be installed
# in a fakeroot environment, this is required for all builds with AUR.
newperms "%wheel ALL=(ALL) NOPASSWD: ALL"
# Use all cores for compilation.
sed -i "s/-j2/-j$(nproc)/;s/^#MAKEFLAGS/MAKEFLAGS/" /etc/makepkg.conf
# Make pacman and yay colorful and adds eye candy on the progress bar because why not.
grep -q "^Color" /etc/pacman.conf || sed -i "s/^#Color$/Color/" /etc/pacman.conf
grep -q "ILoveCandy" /etc/pacman.conf || sed -i "/#VerbosePkgLists/a ILoveCandy" /etc/pacman.conf
manualinstall $aurhelper || error "Failed to install AUR helper."
}
# Use all cores for compilation.
sed -i "s/-j2/-j$(nproc)/;s/^#MAKEFLAGS/MAKEFLAGS/" /etc/makepkg.conf
manualinstall $aurhelper || error "Failed to install AUR helper."
# The command that does all the installing. Reads the progs.csv file and
# installs each needed program the way required. Be sure to run this only after
@ -226,7 +213,7 @@ git update-index --assume-unchanged "/home/$name/LICENSE"
systembeepoff
# Make zsh the default shell for the user.
chsh -s /bin/zsh $name >/dev/null 2>&1
chsh -s /bin/zsh "$name" >/dev/null 2>&1
sudo -u "$name" mkdir -p "/home/$name/.cache/zsh/"
# dbus UUID must be generated for Artix runit.
@ -240,7 +227,7 @@ killall pulseaudio; sudo -u "$name" pulseaudio --start
# This line, overwriting the `newperms` command above will allow the user to run
# serveral important commands, `shutdown`, `reboot`, updating, etc. without a password.
[ "$distro" = arch ] && newperms "%wheel ALL=(ALL) ALL #LARBS
newperms "%wheel ALL=(ALL) ALL #LARBS
%wheel ALL=(ALL) NOPASSWD: /usr/bin/shutdown,/usr/bin/reboot,/usr/bin/systemctl suspend,/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,/usr/bin/loadkeys,/usr/bin/yay,/usr/bin/pacman -Syyuw --noconfirm"
# Last message! Install complete!

View File

@ -2,14 +2,6 @@
,xorg-server,"is the graphical server."
,xorg-xwininfo,"allows querying information about windows."
,xorg-xinit,"starts the graphical server."
V,xorg-minimal,"is the graphical server."
V,xorg-fonts,"is a font package."
V,xinit,"starts the graphical server."
V,xdg-utils,"are filetype utilities."
V,libX11-devel,"is required for the compilation of some programs."
V,libXft-devel,"is required for the compilation of some programs."
V,gcr-devel,"is required for the compilation of some programs."
V,fontconfig-devel,"is required for the compilation of some programs."
,ttf-linux-libertine,"provides the sans and serif fonts for LARBS."
A,lf-git,"is an extensive terminal file manager that everyone likes."
,arandr,"is a UI for screen adjustment."
@ -17,10 +9,8 @@ A,lf-git,"is an extensive terminal file manager that everyone likes."
,calcurse,"is a lightweight terminal-based calendar."
,xcompmgr,"is for transparency and removing screen-tearing."
,xorg-xprop,"is a tool for detecting window properties."
V,xprop,"is a tool for detecting window properties."
,dosfstools,"allows your computer to access dos-like filesystems."
,libnotify,"allows desktop notifications."
V,dbus,"facilitates inter-process communication."
,dunst,"is a suckless notification system."
,exfat-utils,"allows management of FAT drives."
,sxiv,"is a minimalist image viewer."
@ -37,7 +27,6 @@ A,gtk-theme-arc-gruvbox-git,"gives the dark GTK theme used in LARBS."
,newsboat,"is a terminal RSS client."
A,brave-bin,"is an elegant browser with built-in adblocking, tor and other features."
,noto-fonts-emoji,"is an emoji font."
V,font-symbola,"provides unicode and emoji symbols."
,ntfs-3g,"allows accessing NTFS partitions."
,pulseaudio-alsa,"is the audio system."
,pulsemixer,"is an audio controler."
@ -45,9 +34,7 @@ V,font-symbola,"provides unicode and emoji symbols."
A,sc-im,"is an Excel-like terminal spreadsheet manager."
,maim,"can take quick screenshots at your request."
,abook,"is an offline addressbook usable by neomutt."
,socat,"is a socket utility."
,unclutter,"hides an inactive mouse."
V,unclutter-xfixes,"hides an inactive mouse."
,unrar,"extracts rar's."
,unzip,"unzips zips."
,lynx,"is a terminal browser."
@ -55,7 +42,6 @@ V,unclutter-xfixes,"hides an inactive mouse."
,xclip,"allows for copying and pasting from the command line."
,xdotool,"provides window action utilities on the command line."
,xorg-xdpyinfo,"aids with resolution determination and screen recording."
V,xdpyinfo,"aids with resolution determination and screen recording."
,youtube-dl,"can download any YouTube video (or playlist or channel) when given the link."
,zathura,"is a pdf viewer with vim-like bindings."
,zathura-pdf-mupdf,"allows mupdf pdf compatibility in zathura."
@ -67,13 +53,7 @@ V,xdpyinfo,"aids with resolution determination and screen recording."
,xorg-xbacklight,"enables changing screen brightness levels."
A,zsh-fast-syntax-highlighting,"provides syntax highlighting in the shell."
A,task-spooler,"queues commands or files for download."
V,ts,"queues commands or files for download."
A,simple-mtpfs-git,"enables the mounting of cell phones."
V,simple-mtpfs,"enables the mounting of cell phones."
V,setxkbmap,"allows LARBS's unique keyboard bindings."
V,xmodmap,"allows LARBS's unique keyboard bindings."
V,xsetroot,"sets status bar and other X properies."
V,xset,"allows speeding up the X rate."
G,https://github.com/LukeSmithxyz/dwmblocks.git,"serves as the modular status bar."
G,https://github.com/lukesmithxyz/dmenu.git,"runs commands and provides a UI for selection."
G,https://github.com/lukesmithxyz/st.git,"is my custom build of suckless's terminal emulator."

1 #TAG NAME IN REPO (or git url) PURPOSE (should be a verb phrase to sound right while installing)
2 xorg-server is the graphical server.
3 xorg-xwininfo allows querying information about windows.
4 xorg-xinit starts the graphical server.
V xorg-minimal is the graphical server.
V xorg-fonts is a font package.
V xinit starts the graphical server.
V xdg-utils are filetype utilities.
V libX11-devel is required for the compilation of some programs.
V libXft-devel is required for the compilation of some programs.
V gcr-devel is required for the compilation of some programs.
V fontconfig-devel is required for the compilation of some programs.
5 ttf-linux-libertine provides the sans and serif fonts for LARBS.
6 A lf-git is an extensive terminal file manager that everyone likes.
7 arandr is a UI for screen adjustment.
9 calcurse is a lightweight terminal-based calendar.
10 xcompmgr is for transparency and removing screen-tearing.
11 xorg-xprop is a tool for detecting window properties.
V xprop is a tool for detecting window properties.
12 dosfstools allows your computer to access dos-like filesystems.
13 libnotify allows desktop notifications.
V dbus facilitates inter-process communication.
14 dunst is a suckless notification system.
15 exfat-utils allows management of FAT drives.
16 sxiv is a minimalist image viewer.
27 newsboat is a terminal RSS client.
28 A brave-bin is an elegant browser with built-in adblocking, tor and other features.
29 noto-fonts-emoji is an emoji font.
V font-symbola provides unicode and emoji symbols.
30 ntfs-3g allows accessing NTFS partitions.
31 pulseaudio-alsa is the audio system.
32 pulsemixer is an audio controler.
34 A sc-im is an Excel-like terminal spreadsheet manager.
35 maim can take quick screenshots at your request.
36 abook is an offline addressbook usable by neomutt.
socat is a socket utility.
37 unclutter hides an inactive mouse.
V unclutter-xfixes hides an inactive mouse.
38 unrar extracts rar's.
39 unzip unzips zips.
40 lynx is a terminal browser.
42 xclip allows for copying and pasting from the command line.
43 xdotool provides window action utilities on the command line.
44 xorg-xdpyinfo aids with resolution determination and screen recording.
V xdpyinfo aids with resolution determination and screen recording.
45 youtube-dl can download any YouTube video (or playlist or channel) when given the link.
46 zathura is a pdf viewer with vim-like bindings.
47 zathura-pdf-mupdf allows mupdf pdf compatibility in zathura.
53 xorg-xbacklight enables changing screen brightness levels.
54 A zsh-fast-syntax-highlighting provides syntax highlighting in the shell.
55 A task-spooler queues commands or files for download.
V ts queues commands or files for download.
56 A simple-mtpfs-git enables the mounting of cell phones.
V simple-mtpfs enables the mounting of cell phones.
V setxkbmap allows LARBS's unique keyboard bindings.
V xmodmap allows LARBS's unique keyboard bindings.
V xsetroot sets status bar and other X properies.
V xset allows speeding up the X rate.
57 G https://github.com/LukeSmithxyz/dwmblocks.git serves as the modular status bar.
58 G https://github.com/lukesmithxyz/dmenu.git runs commands and provides a UI for selection.
59 G https://github.com/lukesmithxyz/st.git is my custom build of suckless's terminal emulator.