1
0
Fork 0
setup-script-sh/setup.sh

1001 lines
25 KiB
Bash
Executable file

#!/bin/bash
# don't remove line after package_install
# it will result in this syntax error: unexpected end of file
# #################### [ ESSENTIALS ] ####################
# Installs essential packages and defining important functions
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
DATA_PATH="/media/pomp/data"
POST_INSTALL=()
BOLD="\e[1m"
RESET="\e[0m"
RED="\e[91m" # actually light red
GREEN="\e[92m" # actually light green
YELLOW="\e[33m"
log_no_label() {
echo -e "$GREEN$BOLD$*$RESET"
}
warn_no_label() {
echo -e "$YELLOW$BOLD$*$RESET"
}
error_no_label() {
echo -e "$RED$BOLD$*$RESET"
}
log() {
echo -e " $GREEN$BOLD INFO | $*$RESET"
}
warn() {
echo -e " $YELLOW$BOLD WARNING | $*$RESET"
}
error() {
echo >&2 -e " $RED$BOLD ERROR | $*$RESET"
}
title() {
echo
echo -e "$BOLD$GREEN====================[ $* ]====================$RESET"
}
smart_mkdir() {
# make directory recursively if it doesn't exist already
if [ ! -d "$1" ]; then
mkdir -p "$1"
fi
}
package_install() {
pamac install --no-confirm "$@"
}
package_remove() {
pamac remove --no-confirm "$@"
}
setup_essentials() {
setup_fstab
sudo pacman -S --needed base-devel wget
# install pamac if it does not exist
if ! command -v pamac &>/dev/null; then
log "pamac was not installed already. Installing now..."
setup_pamac
fi
# install dialog if it's not installed already
if ! command -v dialog &>/dev/null; then
log "dialog was not installed already. Installing now..."
package_install dialog
fi
}
load_dconf() {
dconf load / <"./dconf/$1"
}
# #################### [ DEFINING SETUP ] ####################
# Define instructions on how to setup applications & stuff
setup_alacritty() {
package_install alacritty
mkdir ~/.config/alacritty/
install ./home/pomp/.config/alacritty/alacritty.yml ~/.config/alacritty/
}
setup_blender() {
package_install blender
}
setup_brave() {
# brave://sync-internals/
package_install brave-bin
install ./home/pomp/.config/autostart/brave-browser.desktop ~/.config/autostart/
# settings: DNS https cloudflare
POST_INSTALL+=(
"brave: sync device"
"brave: restore onetab"
)
}
setup_btop() {
# top but better
package_install btop
}
setup_cpu_undervolting() {
# intel CPU undervolting for less heat and power consumption
# https://wiki.archlinux.org/index.php/Undervolting_CPU
package_install intel-undervolt
config_file=/etc/intel-undervolt.conf
# create backup in case anything goes wrong
sudo install --backup $config_file $config_file.bak
# Explanation:
# for lines that are not comments (lines that do not start with a hash)
# search for "undervolt <number> '<field>' <original value><comment>"
# and replaces with "undervolt <number> '<field>' -100 <comment>"
# This method does not preserve the space between the value and the comment.
# So this:
# value # space between comment and value: 2
# becomes this:
# value # space between comment and value: 1
sudo sed -i -e "/^[^#]/s/\(undervolt [0-9]* 'CPU'\) .*\(#.*\)/\1 -100 \2/" $config_file
sudo sed -i -e "/^[^#]/s/\(undervolt [0-9]* 'CPU Cache'\) .*\(#.*\)/\1 -100 \2/" $config_file
sudo intel-undervolt apply
sudo systemctl enable intel-undervolt
}
setup_deno() {
package_install deno
}
setup_discord() {
# assumes that plugins are located in ~/.config/BetterDiscord/plugins
# betterdiscordctl-git: BetterDiscord installer
package_install \
discord \
betterdiscordctl-git
install ./home/pomp/.config/autostart/discord.desktop ~/.config/autostart/
BD_PLUGINS=(
134 # https://betterdiscord.app/plugin/Avatar%20Hover
60 # https://betterdiscord.app/plugin/BadgesEverywhere
119 # https://betterdiscord.app/plugin/BetterCodeblocks
62 # https://betterdiscord.app/plugin/BetterNsfwTag
63 # https://betterdiscord.app/plugin/BetterSearchPage
228 # https://betterdiscord.app/plugin/CallTimeCounter
64 # https://betterdiscord.app/plugin/CharCounter
67 # https://betterdiscord.app/plugin/CompleteTimestamps
176 # https://betterdiscord.app/plugin/Copier
68 # https://betterdiscord.app/plugin/CopyRawMessage
69 # https://betterdiscord.app/plugin/CreationDate
186 # https://betterdiscord.app/plugin/DoNotTrack
132 # https://betterdiscord.app/plugin/EmoteReplacer
245 # https://betterdiscord.app/plugin/FreeEmojis
81 # https://betterdiscord.app/plugin/GoogleTranslateOption
284 # https://betterdiscord.app/plugin/GrammarCorrect
220 # https://betterdiscord.app/plugin/GuildProfile
83 # https://betterdiscord.app/plugin/ImageUtilities
295 # https://betterdiscord.app/plugin/InvisibleTyping
84 # https://betterdiscord.app/plugin/JoinedAtDate
85 # https://betterdiscord.app/plugin/LastMessageDate
287 # https://betterdiscord.app/plugin/Link-Profile-Picture
11 # https://betterdiscord.app/plugin/MemberCount
29 # https://betterdiscord.app/plugin/PermissionsViewer
158 # https://betterdiscord.app/plugin/PlatformIndicators
93 # https://betterdiscord.app/plugin/QuickMention
94 # https://betterdiscord.app/plugin/ReadAllNotificationsButton
179 # https://betterdiscord.app/plugin/RedditMentions
97 # https://betterdiscord.app/plugin/RevealAllSpoilersOption
98 # https://betterdiscord.app/plugin/SendLargeMessages
159 # https://betterdiscord.app/plugin/ShowAllActivities
291 # https://betterdiscord.app/plugin/ShowConnections
103 # https://betterdiscord.app/plugin/ShowHiddenChannels
104 # https://betterdiscord.app/plugin/SpellCheck
162 # https://betterdiscord.app/plugin/StaffTag
8 # https://betterdiscord.app/plugin/SuppressReplyMentions
253 # https://betterdiscord.app/plugin/Typing%20Users%20Avatars
196 # https://betterdiscord.app/plugin/TypingIndicator
293 # https://betterdiscord.app/plugin/UserDetails
)
log "installing betterdiscord plugins"
for id in "${BD_PLUGINS[@]}"; do
BD_PLUGIN_URL="https://betterdiscord.app/Download?id=$id"
log "installing $BD_PLUGIN_URL"
wget --content-disposition --no-clobber -P ~/.config/BetterDiscord/plugins "$BD_PLUGIN_URL"
done
POST_INSTALL+=("discord: run betterdiscordctl install")
}
setup_docker() {
package_install docker
sudo usermod -aG docker "${USER}"
sudo systemctl --now enable docker
}
setup_dotnet() {
package_install dotnet-sdk
}
setup_filezilla() {
package_install filezilla
}
setup_fonts() {
log "installing fonts"
# wget: For downloading zip files
# noto-fonts-emoji: Emoji fonts
# nerd-fonts-noto-sans-mono: Terminal font
# ttf-baekmuk: Korean font
package_install \
wget \
noto-fonts-emoji \
nerd-fonts-noto-sans-mono \
ttf-baekmuk
# path to temporarily save font related files
fonts_directory="$SCRIPT_DIR/tmp/fonts"
# fonts to download
font_names=(
"Audiowide"
"Varela Round"
"Ubuntu Mono"
"Nanum Gothic Coding"
)
# create fonts directory if it does not exist
if [ ! -d "$fonts_directory" ]; then
mkdir -p "$fonts_directory"
fi
# download and unzip font files if they're not downloaded already
for font_name in "${font_names[@]}"; do
zip_path="$fonts_directory/$font_name.zip"
# download and unzip if either zip file or unzipped directory exists
if [ ! -f "$zip_path" ] && [ ! -d "$fonts_directory/$font_name" ]; then
wget -O "$zip_path" "https://fonts.google.com/download?family=$font_name" # download zip file
unzip "$zip_path" -d "$fonts_directory/$font_name" # unzip file
rm "$zip_path" # remove zip file
fi
done
font_install_dir="$HOME/.local/share/fonts"
# create local fonts directory if it does not exist already
if [ ! -d "$font_install_dir" ]; then
mkdir -p "$font_install_dir"
fi
# "install" all fonts
find "$fonts_directory" -type f -name "*.ttf" | while read ttf_file_path; do
mv -f "$ttf_file_path" "$font_install_dir/${ttf_file_path##*/}"
done
# regenerate font cache
fc-cache -vf
# cleanup
rm -rf $fonts_directory
}
setup_freetube() {
pamac install freetube-bin
# todo: freetube data
}
setup_fstab() {
if cat /etc/fstab | grep "/media/pomp/data" &>/dev/null; then
return
fi
echo "UUID=1cea13a5-ea19-4023-99dd-4bfd062a288c /media/pomp/data ext4 defaults 0 2" | sudo tee -a /etc/fstab >/dev/null
log "added /media/pomp/data to fstab"
}
setup_dns() {
:
# https://1.1.1.1
}
setup_geogebra() {
package_install geogebra
}
setup_gimp() {
# photoshop but FOSS
package_install gimp
}
setup_git() {
package_install git
git config --global user.email "developomp@gmail.com"
git config --global user.name "developomp"
git config --global pull.rebase false
git config --global init.defaultBranch master
}
setup_gnome() {
# gnome, nvidia driver, and optimus manager
# gdm-prime gdm patched for optimus laptops
# vimix-cursors cursors
# vimix-gtk-themes-git gtk theme
# papirus-icon-theme icon theme
# gnome-backgrounds wallpapers and shit
# gwe nvidia GPU overclocking https://gitlab.com/leinardi/gwe
# nvidia nvidia GPU support
# nvidia-settings nvidia settings
# lib32-nvidia-utils 32bit nvidia driver utils
# optimus-manager-qt https://github.com/Shatur/optimus-manager-qt
package_install \
gdm-prime \
vimix-cursors \
vimix-gtk-themes-git \
papirus-icon-theme \
gnome-backgrounds \
gwe \
nvidia \
nvidia-settings \
lib32-nvidia-utils \
optimus-manager-qt
sudo systemctl enable gdm
sudo systemctl enable optimus-manager
install ./home/pomp/.config/autostart/gwe.desktop ~/.config/autostart/
install ./home/pomp/.config/autostart/io.optimus_manager.OptimusManagerQt.desktop ~/.config/autostart/
# prevent rootless X
sudo install -g root -o root -m u=rw,g=r,o=r ./etc/X11/Xwrapper.config /etc/X11/Xwrapper.config
load_dconf "gnome-desktop-interface.conf"
# set nvidia preferred mode on login
install ./home/pomp/.nvidia-preferred-mode.sh ~/
install ./home/pomp/.config/autostart/nvidia-preferred-mode.desktop ~/.config/autostart/
setup_gnome_apps
setup_alacritty # so I have a terminal to work with when only gnome is installed
cat >~/.config/user-dirs.dirs <<EOL
XDG_DESKTOP_DIR="$HOME/Desktop"
XDG_DOWNLOAD_DIR="/media/pomp/data/Downloads"
XDG_TEMPLATES_DIR="$HOME/Templates"
XDG_PUBLICSHARE_DIR="$HOME/Public"
XDG_DOCUMENTS_DIR="/media/pomp/data/Documents"
XDG_MUSIC_DIR="/media/pomp/data/Music"
XDG_PICTURES_DIR="/media/pomp/data/Pictures"
XDG_VIDEOS_DIR="/media/pomp/data/Videos"
EOL
# Not using power switching
# read this wiki[^1] about power management with acpi call for more information
# [^1]: https://github.com/Askannz/optimus-manager/wiki/A-guide--to-power-management-options#configuration-4--acpi_call
# todo: gwe mode: ultra(270,660)
POST_INSTALL+=("gnome: reboot")
}
setup_gnome_apps() {
# alacarte: application menu editor
# baobab: Disk usage analysis
# cheese: take photo/video with camera
# dconf-editor: GUI for dconf
# eog: photo viewer
# evince: document viewer
# file-roller: compress & decompress files/directories
# gnome-calculator: scientific calculator
# gnome-characters: Search for emojis, special characters, and symbols
# gnome-clocks: For multiple clocks for different time zones
# gnome-control-center: gnome settings
# gnome-disk-utility: gnome disk management
# gnome-font-viewer: Managing fonts
# gnome-keyring: passwords and keys
# gnome-logs: GUI for systemd journal
# gnome-screenshot: take screenshots
# gnome-system-monitor: show system processes
# gnome-tweaks: shows extra settings
# gpick: color picker
# nautilus: gnome file manager
# sushi: quick previewer for nautilus
package_install \
alacarte \
baobab \
cheese \
dconf-editor \
eog \
evince \
file-roller \
gnome-calculator \
gnome-characters \
gnome-clocks \
gnome-control-center \
gnome-disk-utility \
gnome-font-viewer \
gnome-keyring \
gnome-logs \
gnome-screenshot \
gnome-system-monitor \
gnome-tweaks \
gpick \
nautilus \
sushi
}
setup_gnome_extensions() {
log "installing gnome extensions"
# chrome-gnome-shell GNOME shell integration for Chrome
# gnome-shell-extension-installer Installation of gnome extensions from command line
# gnome-shell-extension-pop-shell-git for window tiling
package_install \
chrome-gnome-shell \
gnome-shell-extension-installer \
gnome-shell-extension-pop-shell-git
load_dconf "extension-pop-shell.conf"
extensions=(
36,"extension-lockkeys.conf" # lock-keys
906,"extension-sound-output-device-chooser.conf" # sound-output-device-chooser
1460,"extension-vitals.conf" # vitals
2741,"" # remove-alttab-delay-v2
2890,"extension-trayIconsReloaded.conf" # tray-icons-reloaded
3193,"extension-blur-my-shell.conf" # blur-my-shell
4000,"extension-barbar.conf" # babar
4158,"" # gnome-40-ui-improvements
)
for i in "${extensions[@]}"; do
IFS=","
set -- $i
# $1: extension id
# $2: extension dconf
log "installing: https://extensions.gnome.org/extension/$1"
gnome-shell-extension-installer $1 --yes --update
if [ ! -z $2 ]; then
load_dconf $2
fi
done
# enable extensions
load_dconf "extensions.conf"
gnome-shell-extension-installer --restart-shell
}
setup_go() {
# programming language
package_install go
}
setup_godot() {
# game engine
package_install godot
}
setup_grub() {
sudo sed -i '/GRUB_TIMEOUT=/c\GRUB_TIMEOUT=1' /etc/default/grub
sudo sed -i '/GRUB_TIMEOUT_STYLE=/c\GRUB_TIMEOUT_STYLE=hidden' /etc/default/grub
sudo grub-mkconfig -o /boot/grub/grub.cfg
}
setup_gsmartcontrol() {
# disk health checker
package_install gsmartcontrol
}
setup_inkscape() {
# adobe illustrator but FOSS
package_install inkscape
}
setup_jdk() {
# jdk-openjdk: latest jdk (17 as of writing)
# jdk8-openjdk: jdk8
# jdk11-openjdk: jdk11
package_install \
jdk-openjdk \
jdk8-openjdk \
jdk11-openjdk
}
setup_kdenlive() {
# video editing
package_install kdenlive-appimage
}
setup_keyboard() {
# Korean keyboard support
package_install ibus-hangul
POST_INSTALL+=("keyboard: setup korean keyboard and reboot")
}
setup_middleclickpaste() {
# prevents middle click paste
package_install xmousepasteblock-git
# todo: make it autostart
}
setup_mystiq() {
# video converter
package_install mystiq
}
setup_node() {
# nodejs: Javascript on servers!
# nvm: Node.JS version manager
# npm: node package manager
# yarn: better node package manager
package_install \
nodejs \
nvm \
npm \
yarn
# https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally
# export PATH="$(yarn global bin):$PATH"
}
setup_obs() {
# obs-plugin-input-overlay-bin: show inputs in OBS
# obs-studio-browser: screen recording and streaming with browser overlay support
package_install \
obs-plugin-input-overlay-bin \
obs-studio-browser
}
setup_ordne() {
package_install ordne
}
setup_osu() {
package_install osu-lazer-bin
}
setup_pacman() {
# enable multilib, color, parallel download, and total download in /etc/pacman.conf
:
}
setup_pamac() {
smart_mkdir "$SCRIPT_DIR/tmp"
cd "$SCRIPT_DIR/tmp" || (error "failed to move to $SCRIPT_DIR/tmp for pamac installation" && exit 1)
sudo pacman --noconfirm -S --needed git
git clone https://aur.archlinux.org/libpamac-aur.git
cd ./libpamac-aur && makepkg -si
cd "$SCRIPT_DIR/tmp" || (error "failed to move to $SCRIPT_DIR/tmp for pamac installation" && exit 1)
git clone https://aur.archlinux.org/pamac-aur.git
cd ./pamac-aur && makepkg -si
cd "$SCRIPT_DIR" || (error "failed to come back to working directory after installing pamac" && exit 1)
# idk why but the permissions is set like this
sudo install -g root -o root -m u=rwx,g=rx,o=rx ./etc/pamac.conf /etc/pamac.conf
sudo install -g root -o root -m u=rw,g=r,o=r ./etc/pacman.conf /etc/pacman.conf
sudo pacman -Syyuu
}
setup_pavucontrol() {
# PulseAudio settings I use for redirecting desktop audio to microphone input
package_install pavucontrol
}
setup_pip() {
# package installer for python
package_install python-pip
}
setup_piper() {
# gaming mouse settings GUI
package_install piper
}
setup_pomky() {
install ./home/pomp/.local/bin/pomky ~/.local/bin/
install ./home/pomp/.config/autostart/pomky.desktop ~/.config/autostart/
}
setup_rust() {
package_install \
rust \
rustup
rustup install stable
}
setup_shfmt() {
package_install shfmt
}
setup_steam() {
package_install steam
}
setup_timeshift() {
# backup and restore system
package_install timeshift
}
setup_unity() {
# game engine
package_install unityhub
POST_INSTALL+=("Change editors location")
}
setup_vim() {
# vim plugin manager
package_install vim-plug
install ./home/pomp/.vimrc ~
POST_INSTALL+=("Install vim plugins with :PlugInstall command")
}
setup_virtualbox() {
# https://wiki.archlinux.org/title/VirtualBox
package_install \
virtualbox \
virtualbox-host-modules-arch \
virtualbox-ext-oracle
sudo systemctl enable systemd-modules-load
sudo systemctl start systemd-modules-load
sudo modprobe vboxdrv
}
setup_vlc() {
# media player compatible with obs-studio-browser
package_install vlc-luajit
}
setup_vscodium() {
# vscode without microsoft
package_install vscodium-bin
# codium --list-extensions
extensions=(
aaron-bond.better-comments
bierner.jsdoc-markdown-highlighting
dbaeumer.vscode-eslint
denoland.vscode-deno
DigitalBrainstem.javascript-ejs-support
dsznajder.es7-react-js-snippets
eamodio.gitlens
earshinov.sort-lines-by-selection
EditorConfig.EditorConfig
esbenp.prettier-vscode
foxundermoon.shell-format
geequlim.godot-tools
golang.go
jeff-tian.markdown-katex
jock.svg
matklad.rust-analyzer
mhutchie.git-graph
ms-python.python
ms-toolsai.jupyter
ms-toolsai.jupyter-keymap
ms-toolsai.jupyter-renderers
ms-vscode.hexeditor
naumovs.color-highlight
nico-castell.linux-desktop-file
PKief.material-icon-theme
qwtel.sqlite-viewer
Razoric.gdscript-toolkit-formatter
redwan-hossain.auto-rename-tag-clone
serayuzgur.crates
streetsidesoftware.code-spell-checker
styled-components.vscode-styled-components
svelte.svelte-vscode
tamasfe.even-better-toml
XadillaX.viml
zhuangtongfa.material-theme
)
for extension in "${extensions[@]}"; do
codium --install-extension $extension
done
install ./home/pomp/.config/autostart/codium.desktop ~/.config/autostart/
install ./home/pomp/.config/VSCodium/User/settings.json ~/.config/VSCodium/User/settings.json
install ./home/pomp/.config/VSCodium/product.json ~/.config/VSCodium/product.json
}
setup_wine() {
# wine: compatibility layer
# wine-gecko: internet explorer for wine
# wine-mono: .NET runtime for wine
# winetricks: wine helper script
package_install \
wine \
wine-gecko \
wine-mono \
winetricks
# WINEARCH=win32 WINEPREFIX=~/.win32/ winecfg
# winetricks allfonts
# winetricks settings fontsmooth=rgb
}
setup_wireshark() {
# network protocol analyzer with gtk frontend
package_install wireshark-gtk2
sudo usermod -a -G wireshark $USER
POST_INSTALL+=("wireshark: reboot")
}
setup_office() {
# MS office but free
package_install onlyoffice-bin
}
setup_zoom() {
# gay video conference app
package_install zoom
}
setup_zsh() {
package_install zsh
if [[ ! -d /home/pomp/.oh-my-zsh ]]; then
# install oh my zsh
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# install powerlevel10k theme
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
# install syntax highlighter
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
install ./home/pomp/.zshrc ~/
else
log "zsh already configured. Skipping."
fi
}
# #################### [ ETC ] ####################
backup() {
TIMESTAMP=$(date +%s)
# backup dconf configuration
dconf dump / >"$SCRIPT_DIR/dconf$TIMESTAMP.conf"
# make a home directory backup
rsync -a --info=progress2 --perms /home/pomp "$DATA_PATH/backup$TIMESTAMP"
# create timeshift backup
if ! command -v timeshift &>/dev/null; then
error "failed to create timeshift backup. Timeshift command not found."
else
sudo timeshift --create --comments "auto created by developomp setup script ($TIMESTAMP)"
fi
}
setup_local() {
# setup for applications in second drive
# add to application menu
if [[ -d /media/pomp/data/programs/dnSpy-net-win32 ]]; then
log "dnspy"
fi
if [[ -d /media/pomp/data/programs/tor-browser ]]; then
log "tor browser"
fi
}
# #################### [ TEST ] ####################
# Tests if script is ready to be executed
# check if script is running as root
if [[ ! $EUID -ne 0 ]]; then
error "DO NOT RUN THIS SCRIPT AS ROOT"
exit 1
fi
# check internet connection
if ! ping -c 1 archlinux.org &>/dev/null; then
error "You are not connected to the internet"
fi
# #################### [ START ] ####################
# move to script directory (repo root)
cd "$SCRIPT_DIR" || {
error "FAILED TO GO TO SCRIPT DIRECTORY"
exit
}
# remove temporary files and folders that was not removed from previous run
rm -rf "./tmp"
echo
warn_no_label "NOTICE"
warn_no_label " This is not a completely hands off process."
warn_no_label " You need to monitor the process and take appropriate actions."
echo
read -p "Press (y) to continue. Press any other key to exit: " -n 1 -r
if [[ $REPLY =~ ^[^Yy]$ ]]; then
echo
exit
fi
echo
# #################### [ MAIN ] ####################
setup_essentials
options=(
"alacritty" "" off
"backup" "" off
"blender" "" off
"brave" "" off
"btop" "" off
"cpu_undervolting" "" off
"deno" "" off
"discord" "" off
"docker" "" off
"dotnet" "" off
"filezilla" "" off
"fonts" "" off
"freetube" "" off
"fstab" "" off
"geogebra" "" off
"gimp" "" off
"git" "" off
"gnome" "" off
"gnome_apps" "" off
"gnome_extensions" "" off
"go" "" off
"godot" "" off
"grub" "" off
"gsmartcontrol" "" off
"inkscape" "" off
"jdk" "" off
"kdenlive" "" off
"keyboard" "" off
"obs" "" off
"ordne" "" off
"osu" "" off
"middleclickpaste" "" off
"mystiq" "" off
"node" "" off
"pavucontrol" "" off
"pamac" "" off
"pip" "" off
"piper" "" off
"pomky" "" off
"rust" "" off
"shfmt" "" off
"steam" "" off
"timeshift" "" off
"unity" "" off
"vim" "" off
"virtualbox" "" off
"vlc" "" off
"vscodium" "" off
"wine" "" off
"wireshark" "" off
"office" "" off
"zoom" "" off
"zsh" "" off
)
# choose from available options
cmd=(dialog --separate-output --checklist "Select Setup Operations to perform" 20 50 5)
choices=$("${cmd[@]}" "${options[@]}" 2>&1 >/dev/tty)
clear
for choice in $choices; do
case "$choice" in
"alacritty") setup_alacritty ;;
"blender") setup_blender ;;
"brave") setup_brave ;;
"btop") setup_btop ;;
"backup") backup ;;
"cpu_undervolting") setup_cpu_undervolting ;;
"deno") setup_deno ;;
"discord") setup_discord ;;
"docker") setup_docker ;;
"dotnet") setup_dotnet ;;
"filezilla") setup_filezilla ;;
"fonts") setup_fonts ;;
"freetube") setup_freetube ;;
"fstab") setup_fstab ;;
"geogebra") setup_geogebra ;;
"gimp") setup_gimp ;;
"git") setup_git ;;
"gnome") setup_gnome ;;
"gnome_apps") setup_gnome_apps ;;
"gnome_extensions") setup_gnome_extensions ;;
"go") setup_go ;;
"godot") setup_godot ;;
"grub") setup_grub ;;
"gsmartcontrol") setup_gsmartcontrol ;;
"inkscape") setup_inkscape ;;
"jdk") setup_jdk ;;
"kdenlive") setup_kdenlive ;;
"keyboard") setup_keyboard ;;
"obs") setup_obs ;;
"ordne") setup_ordne ;;
"osu") setup_osu ;;
"middleclickpaste") setup_middleclickpaste ;;
"mystiq") setup_mystiq ;;
"node") setup_node ;;
"pavucontrol") setup_pavucontrol ;;
"pamac") setup_pamac ;;
"pip") setup_pip ;;
"piper") setup_piper ;;
"pomky") setup_pomky ;;
"rust") setup_rust ;;
"shfmt") setup_shfmt ;;
"steam") setup_steam ;;
"timeshift") setup_timeshift ;;
"unity") setup_unity ;;
"vim") setup_vim ;;
"virtualbox") setup_virtualbox ;;
"vlc") setup_vlc ;;
"vscodium") setup_vscodium ;;
"wine") setup_wine ;;
"wireshark") setup_wireshark ;;
"office") setup_office ;;
"zoom") setup_zoom ;;
"zsh") setup_zsh ;;
esac
done
# #################### [ CLEANUP ] ####################
# remove temporary directory
rm -rf "$SCRIPT_DIR/tmp"
# #################### [ DONE ] ####################
# print some info after installation
title "DONE"
echo
# show what to do manually
if [ ! ${#POST_INSTALL[@]} -eq 0 ]; then
log_no_label "now:"
for doWhat in "${POST_INSTALL[@]}"; do
log_no_label " - $doWhat"
done
fi