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:
Marty Oehme 2019-03-11 20:24:06 +00:00
parent c768aa9983
commit cf00dabeb0
9 changed files with 105 additions and 49 deletions

View file

@ -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

View file

@ -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."
1 #TAG NAME IN REPO (or git url) PURPOSE (should be a verb phrase to sound right while installing)
2 i3-gaps is the main graphical user interface and window manager.
3 i3blocks is the status bar block provider for i3.
4 xorg-server is the graphical server.
5 xorg-xinit starts the graphical server.
6 ranger is an extensive terminal file manager that everyone likes.
7 dosfstools allows your computer to access dos-like filesystems.
8 neovim a tidier vim with some useful features
9 i3blocks is the status bar.
10 i3lock is the screen lock.
11 mpv is the patrician's choice video/gif player.
12 networkmanager does exactly what it sounds like.
13 ntfs-3g allows accessing NTFS partitions.
14 pulseaudio is the audio system (>inb4 bloat).
15 pulseaudio-alsa is an audio interface with ALSA.
16 pulsemixer is an intuitive ncurses audio controller.
17 tmux is a terminal multiplexer and the dropdown window in LARBS.
18 unrar extracts rar's.
19 unzip unzips zips.
20 xclip allows for copying and pasting from the command line.
21 xdotool provides window action utilities on the command line.
22 youtube-dl can download any YouTube video (or playlist or channel) when given the link.
23 atool manages and gives information about archives.
24 fzf is a fuzzy finder tool.
25 zsh is a shell alternative to bash.
26 A nerd-fonts-fira-code is the mono-space font of choice, patched with embedded icon symbols.
27 qutebrowser is a keyboard focused browser with vim-keys enabled.
28 mopidy is an extensible music server written in python.
29 A mopidy-spotify is a mopidy extension to play music from spotify.
30 A mopidy-scrobbler is a mopidy extension to scrobble to last.fm.
31 A mopidy-spotify-tunigo is a mopidy extension to enable spotify browsing.
32 A mopidy-podcast is a mopidy extension to search and browse podcasts.
33 rxvt-unicode is a simple and efficient terminal emulator.

View 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."
1 code is an open source gui code editor in the style of atom/sublime - but better.
2 vagrant is a development environment provisioning system which easily spins up virtual machines for you.
3 virtualbox is a virtual machine framework which is mainly used by vagrant.
4 docker should need no introduction, but allows you to run everything in a container.
5 docker-compose allows you to run many, many containers much more easily.

View file

@ -0,0 +1,2 @@
,ntfs-3g,"allows accessing NTFS partitions."
,dosfstools,"allows your computer to access dos-like filesystems."
1 ntfs-3g allows accessing NTFS partitions.
2 dosfstools allows your computer to access dos-like filesystems.

View 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."
1 pulseaudio is the audio system (>inb4 bloat).
2 pulseaudio-alsa is an audio interface with ALSA.
3 pulsemixer is an intuitive ncurses audio controller.
4 mopidy is an extensible music server written in python.
5 ncmpcpp is a client for the mopidy music server (or, optionally, for mpd)
6 A mopidy-spotify is a mopidy extension to play music from spotify.
7 A mopidy-scrobbler is a mopidy extension to scrobble to last.fm.
8 A mopidy-spotify-tunigo is a mopidy extension to enable spotify browsing.
9 A mopidy-podcast is a mopidy extension to search and browse podcasts.
10 mpv is the patrician's choice video/gif player.
11 youtube-dl can download any YouTube video (or playlist or channel) when given the link.

View 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."
1 networkmanager does exactly what it sounds like.
2 openssh allows using ssh connections to connect to others or be connected to.

View 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."
1 zsh is a shell alternative to bash.
2 tmux is a terminal multiplexer and the dropdown window in LARBS.
3 neovim a tidier vim with some useful features
4 ranger is an extensive terminal file manager that everyone likes.
5 fzf is a fuzzy finder tool.
6 unrar extracts rar's.
7 unzip unzips zips.
8 atool manages and gives information about archives.

View 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)"
1 #TAG NAME IN REPO (or git url) PURPOSE (should be a verb phrase to sound right while installing)
2 A enpass-bin is a cross-platform personal password manager with gui.
3 gtk3 is a gui toolkit, necessary for enpass-bin to work. (enpass forgets to install it)

View 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."
1 xorg-server is the graphical server.
2 xorg-xinit starts the graphical server.
3 xorg-xauth manages X authentication settings.
4 xclip allows for copying and pasting from the command line.
5 xdotool provides window action utilities on the command line.
6 i3-gaps is the main graphical user interface and window manager.
7 i3blocks is the status bar block provider for i3.
8 i3status is the status bar for i3.
9 i3lock is the i3 screen lock provider.
10 A j4-dmenu-desktop is a faster dmenu replacement, the application launcher of the i3 suite.
11 A nerd-fonts-fira-code is the mono-space font of choice, patched with embedded icon symbols.
12 rxvt-unicode is a simple and efficient terminal emulator.
13 qutebrowser is a keyboard focused browser with vim-keys enabled.