Allow Choice of package group presets when provisioning
Choice is presented at beginning of provisioning and can choose from 3 different package groups (desktop, laptop, headless) with emphasis on different deployment functionality. Additional packages to run installation against can also be passed in as command option with -f "/path/to/packages.csv /path/to/more.csv" which will get installed alongside the selected package group. When choosing -F the packages will get installed as the only packages instead.
This commit is contained in:
parent
c768aa9983
commit
cf00dabeb0
9 changed files with 105 additions and 49 deletions
|
@ -5,17 +5,22 @@
|
|||
|
||||
### OPTIONS AND VARIABLES ###
|
||||
|
||||
while getopts ":a:r:p:h" o; do case "${o}" in
|
||||
# unset our temp variables, just in case they were used for something else in shell
|
||||
unset pkgfiles dotfilesrepo targetuser targetpassword targetdeployment quietmode aurhelper
|
||||
|
||||
while getopts ":a:r:p:u:U:f:F:hq" 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 ;;
|
||||
p) progsfile=${OPTARG} ;;
|
||||
a) aurhelper=${OPTARG} ;;
|
||||
f) pkgfiles=${OPTARG} ;;
|
||||
F) pkgfiles=${OPTARG} && exclusivepkgfiles=true ;;
|
||||
t) targetdeployment=${OPTARG} ;;
|
||||
*) printf "Invalid option: -%s\\n" "$OPTARG" && exit ;;
|
||||
esac done
|
||||
|
||||
# DEFAULTS:
|
||||
[ -z "$dotfilesrepo" ] && dotfilesrepo="https://gitlab.com/marty-oehme/dotfiles.git"
|
||||
[ -z "$progsfile" ] && progsfile="https://gitlab.com/marty-oehme/dotfiles/snippets/1828258/raw"
|
||||
[ -z "$pkgfiles" ] && pkgfiles=""
|
||||
[ -z "$aurhelper" ] && aurhelper="yay"
|
||||
|
||||
### FUNCTIONS ###
|
||||
|
@ -57,6 +62,10 @@ adduserandpass() { \
|
|||
echo "$name:$pass1" | chpasswd
|
||||
unset pass1 pass2 ;}
|
||||
|
||||
deploydialog() {
|
||||
targetdeployment=$(dialog --title "Deployment Configuration" --radiolist "Select a target package configuration." 0 0 5 desktop "base, network, shell, gui, multimedia, development" on laptop "base, network, shell, gui, multimedia, development, battery, touchpad" off headless "base, network, shell" off none "Installs no packages." off 3>&1 1>&2 2>&3 3>&1)
|
||||
}
|
||||
|
||||
refreshkeys() { \
|
||||
dialog --infobox "Refreshing Arch Keyring..." 4 40
|
||||
pacman --noconfirm -Sy archlinux-keyring >/dev/null 2>&1
|
||||
|
@ -97,9 +106,29 @@ aurinstall() { \
|
|||
sudo -u "$name" $aurhelper -S --noconfirm "$1" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
# get the link to the package collection
|
||||
getpackagegrouplink() {
|
||||
case "$1" in
|
||||
"none") pkggroup="";;
|
||||
"desktop") pkggroup="https://gitlab.com/marty-oehme/dotfiles/snippets/1828258/raw" ;;
|
||||
"laptop") pkggroup="https://gitlab.com/marty-oehme/dotfiles/snippets/1834307/raw" ;;
|
||||
"headless") pkggroup="https://gitlab.com/marty-oehme/dotfiles/snippets/1834308/raw" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
# can be called with as many csv files filled with packages as necessary
|
||||
# appends them all to one temporary file for the installation
|
||||
gatherpackages() {
|
||||
concfile=$1
|
||||
shift
|
||||
touch $concfile
|
||||
for progs in "$@"; do
|
||||
([ -f "$progs" ] && cat "$progs" >> $concfile) || curl -Ls "$progs" | sed '/^#/d' >> $concfile
|
||||
done
|
||||
}
|
||||
|
||||
installationloop() { \
|
||||
([ -f "$progsfile" ] && cp "$progsfile" /tmp/progs.csv) || curl -Ls "$progsfile" | sed '/^#/d' > /tmp/progs.csv
|
||||
total=$(wc -l < /tmp/progs.csv)
|
||||
total=$(wc -l < $1)
|
||||
aurinstalled=$(pacman -Qm | awk '{print $1}')
|
||||
while IFS=, read -r tag program comment; do
|
||||
n=$((n+1))
|
||||
|
@ -109,7 +138,7 @@ installationloop() { \
|
|||
"A") aurinstall "$program" "$comment" ;;
|
||||
"G") gitmakeinstall "$program" "$comment" ;;
|
||||
esac
|
||||
done < /tmp/progs.csv ;}
|
||||
done < $1 ;}
|
||||
|
||||
dotfiles() { \
|
||||
gpath=$1
|
||||
|
@ -144,7 +173,7 @@ serviceinit() { for service in "$@"; do
|
|||
systemctl start "$service"
|
||||
done ;}
|
||||
|
||||
systembeepoff() { dialog --infobox "Getting rid of that retarded error beep sound..." 10 50
|
||||
systembeepoff() { dialog --infobox "Getting rid of error beep sound..." 10 50
|
||||
rmmod pcspkr
|
||||
echo "blacklist pcspkr" > /etc/modprobe.d/nobeep.conf ;}
|
||||
|
||||
|
@ -173,6 +202,11 @@ getuserandpass || error "User exited."
|
|||
# Give warning if user already exists.
|
||||
usercheck || error "User exited."
|
||||
|
||||
# Let user select groups of packages to pre-install.
|
||||
if [ -z "$targetdeployment" ]; then
|
||||
deploydialog || error "User exited."
|
||||
fi
|
||||
|
||||
# Last chance for user to back out before install.
|
||||
preinstallmsg || error "User exited."
|
||||
|
||||
|
@ -199,11 +233,23 @@ sed -i "s/-j2/-j$(nproc)/;s/^#MAKEFLAGS/MAKEFLAGS/" /etc/makepkg.conf
|
|||
|
||||
manualinstall $aurhelper || error "Failed to install AUR helper."
|
||||
|
||||
# the command that sets the correct link to gather our package files from
|
||||
# correct link depends on target deployment: desktop, laptop, server,..
|
||||
getpackagegrouplink $targetdeployment
|
||||
|
||||
# append the default packages to whatever custom package csv links were passed in or
|
||||
# only use the custom packages if forced with -F
|
||||
[ ! "$exclusivepkgfiles" ] && pkgfiles="$(curl -Ls $pkggroup | cat ) $pkgfiles"
|
||||
|
||||
tmpfile=/tmp/pkgs.csv
|
||||
# actually gather the individual package installation lines from the various links and files
|
||||
gatherpackages $tmpfile $pkgfiles
|
||||
|
||||
# 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
|
||||
# the user has been created and has priviledges to run sudo without a password
|
||||
# the user has been created and has privileges to run sudo without a password
|
||||
# and all build dependencies are installed.
|
||||
installationloop
|
||||
installationloop $tmpfile
|
||||
|
||||
# Install the dotfiles in the user's home directory
|
||||
putgitrepo "$dotfilesrepo" "/home/$name"
|
||||
|
@ -212,11 +258,6 @@ rm "/home/$name/README.md"
|
|||
# Pulseaudio, if/when initially installed, often needs a restart to work immediately.
|
||||
[ -f /usr/bin/pulseaudio ] && resetpulse
|
||||
|
||||
# Install vim `plugged` plugins.
|
||||
dialog --infobox "Installing (neo)vim plugins..." 4 50
|
||||
(sleep 30 && killall nvim) &
|
||||
sudo -u "$name" nvim -E -c "PlugUpdate|visual|q|q" >/dev/null 2>&1
|
||||
|
||||
# Enable services here.
|
||||
serviceinit NetworkManager cronie
|
||||
|
||||
|
@ -228,6 +269,11 @@ systembeepoff
|
|||
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"
|
||||
|
||||
# Install vim `plugged` plugins.
|
||||
dialog --infobox "Installing (neo)vim plugins..." 4 50
|
||||
(sleep 30 && killall nvim) &
|
||||
sudo -u "$name" nvim -E -c "PlugUpdate|visual|q|q" >/dev/null 2>&1
|
||||
|
||||
# Last message! Install complete!
|
||||
finalize
|
||||
clear
|
||||
clear
|
||||
|
|
|
@ -1,34 +0,0 @@
|
|||
#TAG,NAME IN REPO (or git url),PURPOSE (should be a verb phrase to sound right while installing)
|
||||
,i3-gaps,"is the main graphical user interface and window manager."
|
||||
,i3blocks,"is the status bar block provider for i3."
|
||||
,xorg-server,"is the graphical server."
|
||||
,xorg-xinit,"starts the graphical server."
|
||||
,ranger,"is an extensive terminal file manager that everyone likes."
|
||||
,dosfstools,"allows your computer to access dos-like filesystems."
|
||||
,neovim,"a tidier vim with some useful features"
|
||||
,i3blocks,"is the status bar."
|
||||
,i3lock,"is the screen lock."
|
||||
,mpv,"is the patrician's choice video/gif player."
|
||||
,networkmanager,"does exactly what it sounds like."
|
||||
,ntfs-3g,"allows accessing NTFS partitions."
|
||||
,pulseaudio,"is the audio system (>inb4 bloat)."
|
||||
,pulseaudio-alsa,"is an audio interface with ALSA."
|
||||
,pulsemixer,"is an intuitive ncurses audio controller."
|
||||
,tmux,"is a terminal multiplexer and the dropdown window in LARBS."
|
||||
,unrar,"extracts rar's."
|
||||
,unzip,"unzips zips."
|
||||
,xclip,"allows for copying and pasting from the command line."
|
||||
,xdotool,"provides window action utilities on the command line."
|
||||
,youtube-dl,"can download any YouTube video (or playlist or channel) when given the link."
|
||||
,atool,"manages and gives information about archives."
|
||||
,fzf,"is a fuzzy finder tool."
|
||||
,zsh,"is a shell alternative to bash."
|
||||
A,nerd-fonts-fira-code,"is the mono-space font of choice, patched with embedded icon symbols."
|
||||
,qutebrowser,"is a keyboard focused browser with vim-keys enabled."
|
||||
,mopidy,"is an extensible music server written in python."
|
||||
A,mopidy-spotify,"is a mopidy extension to play music from spotify."
|
||||
A,mopidy-scrobbler,"is a mopidy extension to scrobble to last.fm."
|
||||
A,mopidy-spotify-tunigo,"is a mopidy extension to enable spotify browsing."
|
||||
A,mopidy-podcast,"is a mopidy extension to search and browse podcasts."
|
||||
,rxvt-unicode,"is a simple and efficient terminal emulator."
|
||||
|
|
5
.config/bootstrap/pkg/dev.csv
Normal file
5
.config/bootstrap/pkg/dev.csv
Normal file
|
@ -0,0 +1,5 @@
|
|||
,code,"is an open source gui code editor in the style of atom/sublime - but better."
|
||||
,vagrant,"is a development environment provisioning system which easily spins up virtual machines for you."
|
||||
,virtualbox,"is a virtual machine framework which is mainly used by vagrant."
|
||||
,docker,"should need no introduction, but allows you to run everything in a container."
|
||||
,docker-compose,"allows you to run many, many containers much more easily."
|
|
2
.config/bootstrap/pkg/fs.csv
Normal file
2
.config/bootstrap/pkg/fs.csv
Normal file
|
@ -0,0 +1,2 @@
|
|||
,ntfs-3g,"allows accessing NTFS partitions."
|
||||
,dosfstools,"allows your computer to access dos-like filesystems."
|
|
11
.config/bootstrap/pkg/media.csv
Normal file
11
.config/bootstrap/pkg/media.csv
Normal file
|
@ -0,0 +1,11 @@
|
|||
,pulseaudio,"is the audio system (>inb4 bloat)."
|
||||
,pulseaudio-alsa,"is an audio interface with ALSA."
|
||||
,pulsemixer,"is an intuitive ncurses audio controller."
|
||||
,mopidy,"is an extensible music server written in python."
|
||||
,ncmpcpp,"is a client for the mopidy music server (or, optionally, for mpd)"
|
||||
A,mopidy-spotify,"is a mopidy extension to play music from spotify."
|
||||
A,mopidy-scrobbler,"is a mopidy extension to scrobble to last.fm."
|
||||
A,mopidy-spotify-tunigo,"is a mopidy extension to enable spotify browsing."
|
||||
A,mopidy-podcast,"is a mopidy extension to search and browse podcasts."
|
||||
,mpv,"is the patrician's choice video/gif player."
|
||||
,youtube-dl,"can download any YouTube video (or playlist or channel) when given the link."
|
|
2
.config/bootstrap/pkg/network.csv
Normal file
2
.config/bootstrap/pkg/network.csv
Normal file
|
@ -0,0 +1,2 @@
|
|||
,networkmanager,"does exactly what it sounds like."
|
||||
,openssh,"allows using ssh connections to connect to others or be connected to."
|
|
8
.config/bootstrap/pkg/shell.csv
Normal file
8
.config/bootstrap/pkg/shell.csv
Normal file
|
@ -0,0 +1,8 @@
|
|||
,zsh,"is a shell alternative to bash."
|
||||
,tmux,"is a terminal multiplexer and the dropdown window in LARBS."
|
||||
,neovim,"a tidier vim with some useful features"
|
||||
,ranger,"is an extensive terminal file manager that everyone likes."
|
||||
,fzf,"is a fuzzy finder tool."
|
||||
,unrar,"extracts rar's."
|
||||
,unzip,"unzips zips."
|
||||
,atool,"manages and gives information about archives."
|
|
3
.config/bootstrap/pkg/untested.csv
Normal file
3
.config/bootstrap/pkg/untested.csv
Normal file
|
@ -0,0 +1,3 @@
|
|||
#TAG,NAME IN REPO (or git url),PURPOSE (should be a verb phrase to sound right while installing)
|
||||
A,enpass-bin,"is a cross-platform personal password manager with gui."
|
||||
,gtk3,"is a gui toolkit, necessary for enpass-bin to work. (enpass forgets to install it)"
|
|
13
.config/bootstrap/pkg/x.csv
Normal file
13
.config/bootstrap/pkg/x.csv
Normal file
|
@ -0,0 +1,13 @@
|
|||
,xorg-server,"is the graphical server."
|
||||
,xorg-xinit,"starts the graphical server."
|
||||
,xorg-xauth,"manages X authentication settings."
|
||||
,xclip,"allows for copying and pasting from the command line."
|
||||
,xdotool,"provides window action utilities on the command line."
|
||||
,i3-gaps,"is the main graphical user interface and window manager."
|
||||
,i3blocks,"is the status bar block provider for i3."
|
||||
,i3status,"is the status bar for i3."
|
||||
,i3lock,"is the i3 screen lock provider."
|
||||
A,j4-dmenu-desktop,"is a faster dmenu replacement, the application launcher of the i3 suite."
|
||||
A,nerd-fonts-fira-code,"is the mono-space font of choice, patched with embedded icon symbols."
|
||||
,rxvt-unicode,"is a simple and efficient terminal emulator."
|
||||
,qutebrowser,"is a keyboard focused browser with vim-keys enabled."
|
|
Loading…
Reference in a new issue