local repo died lol

This commit is contained in:
Luke Smith
2018-08-03 00:21:28 -04:00
parent b2dd71b0c0
commit 74322da323
2 changed files with 110 additions and 146 deletions

123
larbs.sh
View File

@@ -3,29 +3,21 @@
# You can provide a custom repository with -r or a custom programs csv with -p.
# Otherwise, the script will use my defaults.
### DEPENDENCIES: git, make and rsync. Make sure these are either in the progs.csv file or installed beforehand.
### DEPENDENCIES: git and make . Make sure these are either in the progs.csv file or installed beforehand.
###
### OPTIONS AND VARIABLES ###
###
while getopts ":a:r:p:h" o; do
case "${o}" in
h)
echo -e "Optional arguments for custom use:\n-r: Dotfiles repository\n-p: Dependencies and programs csv (url)\n-a: AUR helper (must have pacman-like syntax)\n-h show this message" && exit ;;
r)
dotfilesrepo=${OPTARG} ;;
p)
progsfile=${OPTARG} ;;
a)
aurhelper=${OPTARG} ;;
*)
echo "-$OPTARG is not a valid option." && exit ;;
esac
done
while getopts ":a:r:p:h" o; do case "${o}" in
h) echo -e "Optional arguments for custom use:\n-r: Dotfiles repository\n-p: Dependencies and programs csv (url)\n-a: AUR helper (must have pacman-like syntax, specifically, \`-S\` to install)\n-h: Show this message" && exit ;;
r) dotfilesrepo=${OPTARG} ;;
p) progsfile=${OPTARG} ;;
a) aurhelper=${OPTARG} ;;
*) echo "-$OPTARG is not a valid option." && exit ;;
esac done
# DEFAULTS:
[ -z ${dotfilesrepo+x} ] && dotfilesrepo="https://github.com/lukesmithxyz/voidrice.git"
[ -z ${progsfile+x} ] && progsfile="https://raw.githubusercontent.com/LukeSmithxyz/LARBS/master/progs.csv"
[ -z ${aurhelper+x} ] && aurhelper="packer"
@@ -78,31 +70,38 @@ adduserandpass() { \
echo "$name:$pass1" | chpasswd
unset pass1 pass2 ;}
packerwrapper() { \
# INPUT: a list of programs
# OUTPUT: put uninstalled progs in $mainqueue or $aurqueue depending on
# if they're in the main repos or the AUR.
posprogs=$(pacman -Sl | awk '{print $2}')
for arg in "$@"; do
pacman -Q "$arg" &>/dev/null && continue
pacman -Qg "$arg" &>/dev/null && continue
grep "^$arg$" <<< $posprogs &>/dev/null && mainqueue="$mainqueue $arg" && continue
aurqueue="$aurqueue $arg"
done ;}
programinventory() { \
dialog --infobox "Getting program list..." 4 40
packerwrapper $(curl -sL $progsfile | grep ^, | cut -d ',' -f2)
}
gitinstall() { for gitrepo in $@; do
gitmakeinstall() {
dir=$(mktemp -d)
dialog --infobox "Installing \"$(basename $gitrepo)\" from source..." 4 40
git clone --depth 1 "$gitrepo" $dir
dialog --title "LARBS Installation" --infobox "Installing \`$(basename $1)\` via \`git\` and \`make\`. $1 ${@:2}." 4 40
git clone --depth 1 "$1" $dir &>/dev/null
cd $dir
make &>/dev/null
make install &>/dev/null
done ;}
cd /tmp ;}
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
}
aurinstall() { \
dialog --title "LARBS Installation" --infobox "Installing \`$1\` ($n of $total) from the AUR. $1 ${@:2}." 5 70
grep "^$1$" <<< "$aurinstalled" && return
sudo -u $name $aurhelper -S --noconfirm "$1" &>/dev/null
}
installationloop() { \
curl -Ls "$progsfile" > /tmp/progs.csv
total=$(wc -l < /tmp/progs.csv)
aurinstalled=$(pacman -Qm | awk '{print $1}')
while IFS=, read -r tag program comment; do
n=$((n+1))
case "$tag" in
"") maininstall "$program" "$comment" ;;
"A") aurinstall "$program" "$comment" ;;
"G") gitmakeinstall "$program" "$comment" ;;
esac
done <<< $(cat /tmp/progs.csv) ;}
serviceinit() { for service in $@; do
dialog --infobox "Enabling \"$service\"..." 4 40
@@ -111,7 +110,7 @@ serviceinit() { for service in $@; do
done ;}
newperms() { # Set special sudoers settings for install (or after).
sed -e "/#LARBS/d" /etc/sudoers
sed -i "/#LARBS/d" /etc/sudoers
echo "$@ #LARBS" >> /etc/sudoers ;}
systembeepoff() { dialog --infobox "Getting rid of that retarded error beep sound..." 10 50
@@ -123,7 +122,7 @@ installdotfiles() { # Download $dotfilesrepo and install them in user's home.
dialog --infobox "Downloading and installing config files..." 4 60
rm -rf /tmp/dotfiles/
sudo -u $name git clone --depth 1 $dotfilesrepo /tmp/dotfiles &>/dev/null &&
sudo -u $name rsync -rl /tmp/dotfiles/ /home/$name
sudo -u $name cp -rT /tmp/dotfiles/ /home/$name
}
resetpulse() { dialog --infobox "Reseting Pulseaudio..." 4 50
@@ -139,25 +138,7 @@ manualinstall() { # Installs $1 manually if not installed. Used only for AUR hel
sudo -u $name tar -xvf $1.tar.gz &>/dev/null &&
cd $1 &&
sudo -u $name makepkg --noconfirm -si &>/dev/null
cd /tmp)
}
installmainprograms() { # Installs all needed programs from main repo.
count=$(echo "$mainqueue" | wc -w)
for x in $mainqueue; do
n=$((n+1))
dialog --title "LARBS Installation" --infobox "Downloading and installing program $n out of $count: $x...\n\nThe first programs will take more time due to dependencies." 7 70
pacman --noconfirm --needed -S "$x" &>/dev/null
done ;}
installaurprograms() { \
count=$(echo "$aurqueue" | wc -w)
n=0
for prog in $aurqueue; do
n=$((n+1))
dialog --infobox "Downloading and installing AUR program $n out of $count: $prog..." 6 70
sudo -u $name $aurhelper -S --noconfirm "$prog" &>/dev/null
done ;}
cd /tmp) ;}
finalize(){ \
dialog --infobox "Preparing welcome message..." 4 50
@@ -171,10 +152,6 @@ finalize(){ \
### This is how everything happens in an intuitive format and order.
###
# NOTE: If you're deploying a system that doesn't require AUR packages, you
# don't need to include `installaurprograms` `manualinstall $aurhelper`
# (obviously), but also `getpermissions`.
# Check if user is root on Arch distro. Install dialog.
initialcheck
@@ -197,45 +174,33 @@ adduserandpass
# Refresh Arch keyrings.
refreshkeys
# Checks progs and current programs to see what's needed.
programinventory
# Must be run sometime after `programinventory`.
# This will usually be the longest command by a large margin.
installmainprograms
# 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"
# Install AUR helper. Needs sudo w/o passwd.
manualinstall $aurhelper
# $aurhelper must be installed to run this. Needs sudo w/o passwd.
installaurprograms
# 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
# and all build dependencies are installed.
installationloop
installdotfiles
# Pulseaudio, if/when initially installed, often needs a restart to work immediately.
[[ -f /usr/bin/pulseaudio ]] && resetpulse
# Must be run sometime after `userandpassword`.
# git and rsync must be installed.
gitinstall https://github.com/lukesmithxyz/st.git https://github.com/lukesmithxyz/dmenu.git
# Enable services here.
serviceinit NetworkManager cronie
# Most important command! Get rid of the beep!
systembeepoff
# Should only be run after `installaurprograms`. Not strictly necessary if you
# want the more permissive sudo settings set above.
# This line, overwriting the `newperms` command above will allow the user to run
# serveral important commands, `shutdown`, `reboot`, updating, etc. without a password.
newperms "%wheel ALL=(ALL) NOPASSWD: /usr/bin/shutdown,/usr/bin/reboot,/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"
# Last message! Install complete!
finalize
clear

133
progs.csv
View File

@@ -1,67 +1,66 @@
~,NAME,PURPOSE
,arandr,gui adjustment of screen
,base-devel,sudo and compilation software
,calcurse,calendar
,compton,transparency and removing tearing
,cronie,cron manager
,dmenu,command runner
,dosfstools,file system compatibility
,dunst,notification system
,exfat-utils,file system compatibility
,feh,image viewer
,ffmpeg,audio/video recording and splicing
,firefox,default browser
,git,dling config repos
,gnome-keyring,system keyring
,gnome-themes-extra,for dark GTK theme
,gvim,text editor
,i3-gaps,window manager
,i3blocks,status bar
,i3lock,screen lock
,mpc,music daemon control
,mpd,music daemon
,mpv,video/gif player
,ncmpcpp,music player
,networkmanager,network manager
,network-manager-applet,status bar internet applet
,newsboat,RSS reader
,ttf-emojione,emoji fonts
,ntfs-3g,file system compatibility
,packer,AUR manager
,pamixer,audio system control
,pulseaudio,audio system
,pulseaudio-alsa,audio system
,pulsemixer,audio system manager
,python-pywal,colorscheme generator
,rsync,
,sc-im,spreadsheet manager
,screenkey,screencasting keyboard view
,scrot,screenshoter
,speedometer,internet traffic view
,tmux,multiplexer and dropdown
,ttf-inconsolata,mono font
,ttf-linux-libertine,non-mono fonts
,unclutter-xfixes-git,hides mouse if idle
,unrar,extraction
,unzip,extraction
,urlview,url parser for terminal apps
,vim-pathogen,vim package manager
,w3m,
,wget,
,xcape,for double mapping of escape
,xdotool,moving windows on command
,xorg-server,graphical environment
,xorg-xdpyinfo,screencasting
,xorg-xinit,graphical environment
,xssstate,screen idle detection
,youtube-dl,downloads youtube videos
,youtube-viewer,watch YT videos without browser
,zathura,pdf reader
,zathura-djvu,djvu reader
,zathura-pdf-mupdf,pdf compatibility
,poppler,ranger pdf previews
,ranger,file manager
,mediainfo,ranger audio/video info preview
,atool,ranger archive previews
,fzf,ranger fuzzy finder
,highlight,ranger previews highlighted
TAG,NAME,PURPOSE
,base-devel,is a group package with sudo and compilation software
,git,is a version control system
,i3-gaps,is the main graphical user interface and window manager
A,packer,can install packages from the AUR
,xorg-server,is the graphical server
,xorg-xdpyinfo,retrieves screen information for some scripts
,xorg-xinit,starts the graphical server
G,https://github.com/lukesmithxyz/st.git,is my custom build of suckless's terminal emulator
G,https://github.com/lukesmithxyz/dmenu.git,runs commands and provides a UI for selection
,ranger,the file manager
,arandr,is a UI for screen adjustment
,calcurse,is a lightweight terminal-based calendar
,compton,for transparency and removing screen-tearing
,cronie,manages scheduled tasks
,dosfstools,allows your computer to access dos-like filesystems
,dunst,is a suckless notification system
,exfat-utils,allows management of FAT drives
,feh,is a minimal image viewer
,ffmpeg,can record and splice video and audio on the command line
,firefox,is the only program on LARBS your girlfriend has ever heard of
,gnome-keyring,serves as the system keyring
,gnome-themes-extra,gives the dark GTK theme used in LARBS
,gvim,provides a build of vim with the ability to copy and paste between other programs
,i3blocks,is the status bar
,i3lock,is the screen lock
,mpd,is a lightweight music daemon
,mpc,is a terminal interface for mpd
,mpv,is the patrician's choice video/gif player
,ncmpcpp,a ncurses interface for music, with extensive views, tag editing and more
,networkmanager,does exactly what it sounds like
,network-manager-applet,appears in the top right corner and manages the wi-fi connection
,newsboat,is a terminal RSS client
A,ttf-emojione,is a package that gives the system unicode symbols and emojis used in the status bar and elsewhere.
,ntfs-3g,allows accessing NTFS partitions
,pulseaudio,is the audio system (>inb4 bloat)
,pulseaudio-alsa,is an audio interface with ALSA
,pamixer,is a terminal audio control interface
,pulsemixer,is an intuitive ncurses audio controller
,python-pywal,generates color schemes based on your wallpaper
A,sc-im,is an Excel-like terminal spreadsheet manager
A,htop-vim-git,provides system usage information and displays processes
,scrot,can take quick screenshots at your request
,tmux,is a terminal multiplexer and the dropdown window in LARBS
,ttf-inconsolata,is the monospace font of LARBS
,ttf-linux-libertine,provides the sans and serif fonts for LARBS
A,unclutter-xfixes-git,hides an inactive mouse
,unrar,extracts rar's
,unzip,unzips zips
A,urlview,parses URLs in the terminal allowing keyboard-based selection
A,vim-pathogen,manages vim plugins
,w3m,is a terminal browser which can also view images
,wget,downloads sites and files on the command line
,xcape,gives the special escape/super mappings of LARBS
,xdotool,provides window action utilities on the command line.
,xssstate,times out the screen if locked
,youtube-dl,can download any YouTube video, playlist or channel when given the link
,youtube-viewer,is a terminal interface for watching YouTube videos without a browser
,zathura,is a pdf viewer with vim-like bindings
,zathura-djvu,gives zathura the ability to read .djvu files
,zathura-pdf-mupdf,allows mupdf pdf compatibility in zathura
,poppler,manipulates .pdfs and gives .pdf previews in ranger
,mediainfo,shows audio and video information and is used by ranger as well
,atool,manages and gives information about archives
,fzf,is a fuzzy finder tool
,highlight,can highlight code output
1 ~ TAG NAME PURPOSE
2 arandr base-devel gui adjustment of screen is a group package with sudo and compilation software
3 base-devel git sudo and compilation software is a version control system
4 calcurse i3-gaps calendar is the main graphical user interface and window manager
5 A compton packer transparency and removing tearing can install packages from the AUR
6 cronie xorg-server cron manager is the graphical server
7 dmenu xorg-xdpyinfo command runner retrieves screen information for some scripts
8 dosfstools xorg-xinit file system compatibility starts the graphical server
9 G dunst https://github.com/lukesmithxyz/st.git notification system is my custom build of suckless's terminal emulator
10 G exfat-utils https://github.com/lukesmithxyz/dmenu.git file system compatibility runs commands and provides a UI for selection
11 feh ranger image viewer the file manager
12 ffmpeg arandr audio/video recording and splicing is a UI for screen adjustment
13 firefox calcurse default browser is a lightweight terminal-based calendar
14 git compton dling config repos for transparency and removing screen-tearing
15 gnome-keyring cronie system keyring manages scheduled tasks
16 gnome-themes-extra dosfstools for dark GTK theme allows your computer to access dos-like filesystems
17 gvim dunst text editor is a suckless notification system
18 i3-gaps exfat-utils window manager allows management of FAT drives
19 i3blocks feh status bar is a minimal image viewer
20 i3lock ffmpeg screen lock can record and splice video and audio on the command line
21 mpc firefox music daemon control is the only program on LARBS your girlfriend has ever heard of
22 mpd gnome-keyring music daemon serves as the system keyring
23 mpv gnome-themes-extra video/gif player gives the dark GTK theme used in LARBS
24 ncmpcpp gvim music player provides a build of vim with the ability to copy and paste between other programs
25 networkmanager i3blocks network manager is the status bar
26 network-manager-applet i3lock status bar internet applet is the screen lock
27 newsboat mpd RSS reader is a lightweight music daemon
28 ttf-emojione mpc emoji fonts is a terminal interface for mpd
29 ntfs-3g mpv file system compatibility is the patrician's choice video/gif player
30 packer ncmpcpp AUR manager a ncurses interface for music
31 pamixer networkmanager audio system control does exactly what it sounds like
32 pulseaudio network-manager-applet audio system appears in the top right corner and manages the wi-fi connection
33 pulseaudio-alsa newsboat audio system is a terminal RSS client
34 A pulsemixer ttf-emojione audio system manager is a package that gives the system unicode symbols and emojis used in the status bar and elsewhere.
35 python-pywal ntfs-3g colorscheme generator allows accessing NTFS partitions
36 rsync pulseaudio is the audio system (>inb4 bloat)
37 sc-im pulseaudio-alsa spreadsheet manager is an audio interface with ALSA
38 screenkey pamixer screencasting keyboard view is a terminal audio control interface
39 scrot pulsemixer screenshoter is an intuitive ncurses audio controller
40 speedometer python-pywal internet traffic view generates color schemes based on your wallpaper
41 A tmux sc-im multiplexer and dropdown is an Excel-like terminal spreadsheet manager
42 A ttf-inconsolata htop-vim-git mono font provides system usage information and displays processes
43 ttf-linux-libertine scrot non-mono fonts can take quick screenshots at your request
44 unclutter-xfixes-git tmux hides mouse if idle is a terminal multiplexer and the dropdown window in LARBS
45 unrar ttf-inconsolata extraction is the monospace font of LARBS
46 unzip ttf-linux-libertine extraction provides the sans and serif fonts for LARBS
47 A urlview unclutter-xfixes-git url parser for terminal apps hides an inactive mouse
48 vim-pathogen unrar vim package manager extracts rar's
49 w3m unzip unzips zips
50 A wget urlview parses URLs in the terminal allowing keyboard-based selection
51 A xcape vim-pathogen for double mapping of escape manages vim plugins
52 xdotool w3m moving windows on command is a terminal browser which can also view images
53 xorg-server wget graphical environment downloads sites and files on the command line
54 xorg-xdpyinfo xcape screencasting gives the special escape/super mappings of LARBS
55 xorg-xinit xdotool graphical environment provides window action utilities on the command line.
56 xssstate screen idle detection times out the screen if locked
57 youtube-dl downloads youtube videos can download any YouTube video
58 youtube-viewer watch YT videos without browser is a terminal interface for watching YouTube videos without a browser
59 zathura pdf reader is a pdf viewer with vim-like bindings
60 zathura-djvu djvu reader gives zathura the ability to read .djvu files
61 zathura-pdf-mupdf pdf compatibility allows mupdf pdf compatibility in zathura
62 poppler ranger pdf previews manipulates .pdfs and gives .pdf previews in ranger
63 ranger mediainfo file manager shows audio and video information and is used by ranger as well
64 mediainfo atool ranger audio/video info preview manages and gives information about archives
65 atool fzf ranger archive previews is a fuzzy finder tool
66 fzf highlight ranger fuzzy finder can highlight code output
highlight ranger previews highlighted