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 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. 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 ### The script itself

View File

@ -21,17 +21,7 @@ esac done
### FUNCTIONS ### ### FUNCTIONS ###
if type xbps-install >/dev/null 2>&1; then installpkg(){ pacman --noconfirm --needed -S "$1" >/dev/null 2>&1 ;}
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
error() { clear; printf "ERROR:\\n%s\\n" "$1"; exit;} error() { clear; printf "ERROR:\\n%s\\n" "$1"; exit;}
@ -44,7 +34,7 @@ welcomemsg() { \
getuserandpass() { \ getuserandpass() { \
# Prompts user for new username an password. # 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 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) 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 done
pass1=$(dialog --no-cancel --passwordbox "Enter a password for that user." 10 60 3>&1 1>&2 2>&3 3>&1) 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() { \ adduserandpass() { \
# Adds user `$name` with password $pass1. # Adds user `$name` with password $pass1.
dialog --infobox "Adding user \"$name\"..." 4 50 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" 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 echo "$name:$pass1" | chpasswd
unset pass1 pass2 ;} unset pass1 pass2 ;}
@ -110,7 +100,7 @@ gitmakeinstall() {
aurinstall() { \ aurinstall() { \
dialog --title "LARBS Installation" --infobox "Installing \`$1\` ($n of $total) from the AUR. $1 $2" 5 70 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 sudo -u "$name" $aurhelper -S --noconfirm "$1" >/dev/null 2>&1
} }
@ -121,12 +111,12 @@ pipinstall() { \
} }
installationloop() { \ 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) total=$(wc -l < /tmp/progs.csv)
aurinstalled=$(pacman -Qqm) aurinstalled=$(pacman -Qqm)
while IFS=, read -r tag program comment; do while IFS=, read -r tag program comment; do
n=$((n+1)) 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 case "$tag" in
"A") aurinstall "$program" "$comment" ;; "A") aurinstall "$program" "$comment" ;;
"G") gitmakeinstall "$program" "$comment" ;; "G") gitmakeinstall "$program" "$comment" ;;
@ -159,7 +149,7 @@ finalize(){ \
### This is how everything happens in an intuitive format and order. ### This is how everything happens in an intuitive format and order.
# Check if user is root on Arch distro. Install dialog. # 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. # Welcome user and pick dotfiles.
welcomemsg || error "User exited." welcomemsg || error "User exited."
@ -175,36 +165,33 @@ preinstallmsg || error "User exited."
### The rest of the script requires no user input. ### The rest of the script requires no user input.
adduserandpass || error "Error adding username and/or password."
# Refresh Arch keyrings. # 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 for x in curl base-devel git ntp zsh; do
installpkg curl dialog --title "LARBS Installation" --infobox "Installing \`x\` which is required to install and configure other programs." 5 70
installpkg base-devel installpkg "$x"
installpkg git done
installpkg ntp
dialog --title "LARBS Installation" --infobox "Synchronizing system time to ensure successful and secure installation of software..." 4 70 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 ntpdate 0.us.pool.ntp.org >/dev/null 2>&1
[ "$distro" = arch ] && { \ adduserandpass || error "Error adding username and/or password."
[ -f /etc/sudoers.pacnew ] && cp /etc/sudoers.pacnew /etc/sudoers # Just in case
# Allow user to run sudo without password. Since AUR programs must be installed [ -f /etc/sudoers.pacnew ] && cp /etc/sudoers.pacnew /etc/sudoers # Just in case
# in a fakeroot environment, this is required for all builds with AUR.
newperms "%wheel ALL=(ALL) NOPASSWD: ALL"
# Make pacman and yay colorful and adds eye candy on the progress bar because why not. # Allow user to run sudo without password. Since AUR programs must be installed
grep "^Color" /etc/pacman.conf >/dev/null || sed -i "s/^#Color$/Color/" /etc/pacman.conf # in a fakeroot environment, this is required for all builds with AUR.
grep "ILoveCandy" /etc/pacman.conf >/dev/null || sed -i "/#VerbosePkgLists/a ILoveCandy" /etc/pacman.conf newperms "%wheel ALL=(ALL) NOPASSWD: ALL"
# Use all cores for compilation. # Make pacman and yay colorful and adds eye candy on the progress bar because why not.
sed -i "s/-j2/-j$(nproc)/;s/^#MAKEFLAGS/MAKEFLAGS/" /etc/makepkg.conf 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 # 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 # 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 systembeepoff
# Make zsh the default shell for the user. # 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/" sudo -u "$name" mkdir -p "/home/$name/.cache/zsh/"
# dbus UUID must be generated for Artix runit. # 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 # This line, overwriting the `newperms` command above will allow the user to run
# serveral important commands, `shutdown`, `reboot`, updating, etc. without a password. # 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" %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! # Last message! Install complete!

View File

@ -2,14 +2,6 @@
,xorg-server,"is the graphical server." ,xorg-server,"is the graphical server."
,xorg-xwininfo,"allows querying information about windows." ,xorg-xwininfo,"allows querying information about windows."
,xorg-xinit,"starts the graphical server." ,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." ,ttf-linux-libertine,"provides the sans and serif fonts for LARBS."
A,lf-git,"is an extensive terminal file manager that everyone likes." A,lf-git,"is an extensive terminal file manager that everyone likes."
,arandr,"is a UI for screen adjustment." ,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." ,calcurse,"is a lightweight terminal-based calendar."
,xcompmgr,"is for transparency and removing screen-tearing." ,xcompmgr,"is for transparency and removing screen-tearing."
,xorg-xprop,"is a tool for detecting window properties." ,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." ,dosfstools,"allows your computer to access dos-like filesystems."
,libnotify,"allows desktop notifications." ,libnotify,"allows desktop notifications."
V,dbus,"facilitates inter-process communication."
,dunst,"is a suckless notification system." ,dunst,"is a suckless notification system."
,exfat-utils,"allows management of FAT drives." ,exfat-utils,"allows management of FAT drives."
,sxiv,"is a minimalist image viewer." ,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." ,newsboat,"is a terminal RSS client."
A,brave-bin,"is an elegant browser with built-in adblocking, tor and other features." A,brave-bin,"is an elegant browser with built-in adblocking, tor and other features."
,noto-fonts-emoji,"is an emoji font." ,noto-fonts-emoji,"is an emoji font."
V,font-symbola,"provides unicode and emoji symbols."
,ntfs-3g,"allows accessing NTFS partitions." ,ntfs-3g,"allows accessing NTFS partitions."
,pulseaudio-alsa,"is the audio system." ,pulseaudio-alsa,"is the audio system."
,pulsemixer,"is an audio controler." ,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." A,sc-im,"is an Excel-like terminal spreadsheet manager."
,maim,"can take quick screenshots at your request." ,maim,"can take quick screenshots at your request."
,abook,"is an offline addressbook usable by neomutt." ,abook,"is an offline addressbook usable by neomutt."
,socat,"is a socket utility."
,unclutter,"hides an inactive mouse." ,unclutter,"hides an inactive mouse."
V,unclutter-xfixes,"hides an inactive mouse."
,unrar,"extracts rar's." ,unrar,"extracts rar's."
,unzip,"unzips zips." ,unzip,"unzips zips."
,lynx,"is a terminal browser." ,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." ,xclip,"allows for copying and pasting from the command line."
,xdotool,"provides window action utilities on the command line." ,xdotool,"provides window action utilities on the command line."
,xorg-xdpyinfo,"aids with resolution determination and screen recording." ,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." ,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,"is a pdf viewer with vim-like bindings."
,zathura-pdf-mupdf,"allows mupdf pdf compatibility in zathura." ,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." ,xorg-xbacklight,"enables changing screen brightness levels."
A,zsh-fast-syntax-highlighting,"provides syntax highlighting in the shell." A,zsh-fast-syntax-highlighting,"provides syntax highlighting in the shell."
A,task-spooler,"queues commands or files for download." 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." 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/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/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." 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.