setup: add 17 optional modules, expand core packages, add install-modules entrypoint
New modules: networking-cli (nmap/nethogs/mitmproxy/httpie), disk-recovery (ddrescue/f3), himalaya, gnuplot, povray, blender, toot, db-clients (pgcli/mycli), mysql (mariadb), productivity (taskwarrior/watson/jrnl), yt-dlp, sox, imagemagick, ffmpeg-extras, localtunnel, butter, tlp. core-packages: add fdupes, tldr, onefetch; move networking analysis tools (nmap, mtr, net-tools, ipcalc, tcpdump, traceroute) to networking-cli module. tui-install: expand checklist to 34 optional modules with full count/summary/ dispatch coverage. install-modules.sh: standalone TUI entrypoint to install any optional module on an already-configured system. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>main
parent
15d78aece3
commit
00e6d245ae
|
|
@ -0,0 +1,268 @@
|
|||
#!/bin/bash
|
||||
# install-modules.sh — install optional modules on an already-configured system
|
||||
|
||||
set -uo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
MODULES="$SCRIPT_DIR/modules"
|
||||
APPS="$MODULES/optional-Modules/apps"
|
||||
LOG="$HOME/dotfiles-modules.log"
|
||||
TMP_D="$(mktemp -d)"
|
||||
trap 'rm -rf "$TMP_D"' EXIT
|
||||
|
||||
BACKTITLE="the_miro's Arch Dotfiles — Module Installer"
|
||||
|
||||
export DIALOGRC="$TMP_D/dialogrc"
|
||||
cat > "$DIALOGRC" <<'EOF'
|
||||
use_shadow = ON
|
||||
use_colors = ON
|
||||
screen_color = (BLACK,BLACK,ON)
|
||||
shadow_color = (BLACK,BLACK,ON)
|
||||
title_color = (MAGENTA,BLACK,ON)
|
||||
border_color = (MAGENTA,BLACK,ON)
|
||||
button_active_color = (BLACK,MAGENTA,ON)
|
||||
button_inactive_color = (WHITE,BLACK,OFF)
|
||||
button_key_active_color = (BLACK,CYAN,ON)
|
||||
button_key_inactive_color = (CYAN,BLACK,ON)
|
||||
button_label_active_color = (BLACK,MAGENTA,ON)
|
||||
button_label_inactive_color = (WHITE,BLACK,OFF)
|
||||
inputbox_color = (WHITE,BLACK,OFF)
|
||||
inputbox_border_color = (MAGENTA,BLACK,ON)
|
||||
menubox_color = (WHITE,BLACK,OFF)
|
||||
menubox_border_color = (MAGENTA,BLACK,ON)
|
||||
item_color = (WHITE,BLACK,OFF)
|
||||
item_selected_color = (BLACK,MAGENTA,ON)
|
||||
tag_color = (CYAN,BLACK,ON)
|
||||
tag_selected_color = (BLACK,CYAN,ON)
|
||||
tag_key_color = (CYAN,BLACK,ON)
|
||||
tag_key_selected_color = (BLACK,CYAN,ON)
|
||||
check_color = (WHITE,BLACK,OFF)
|
||||
check_selected_color = (BLACK,MAGENTA,ON)
|
||||
uarrow_color = (MAGENTA,BLACK,ON)
|
||||
darrow_color = (MAGENTA,BLACK,ON)
|
||||
EOF
|
||||
|
||||
STEP=0
|
||||
TOTAL=0
|
||||
|
||||
require_dialog() {
|
||||
command -v dialog &>/dev/null && return
|
||||
echo "dialog not found — installing..."
|
||||
sudo pacman -S --noconfirm dialog || { echo "Failed to install dialog."; exit 1; }
|
||||
}
|
||||
|
||||
die() {
|
||||
clear
|
||||
printf "\n Error: %s\n\n" "$1" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
log_sep() {
|
||||
printf "\n══════════════════════════════════\n %s\n %s\n" "$1" "$(date)" >> "$LOG"
|
||||
}
|
||||
|
||||
run_module() {
|
||||
local label="$1" script="$2"
|
||||
STEP=$(( STEP + 1 ))
|
||||
log_sep "[$STEP/$TOTAL] $label"
|
||||
|
||||
clear
|
||||
printf "\n\033[1;35m [$STEP/$TOTAL] %s\033[0m\n" "$label"
|
||||
printf "\033[35m ─────────────────────────────────────────────\033[0m\n\n"
|
||||
|
||||
local rc=0
|
||||
bash "$script" 2>&1 | tee -a "$LOG" || rc=${PIPESTATUS[0]}
|
||||
|
||||
if [[ $rc -ne 0 ]]; then
|
||||
dialog --backtitle "$BACKTITLE" \
|
||||
--title " Module Failed " \
|
||||
--yesno "$label exited with code $rc.\n\nContinue anyway?" 8 54 \
|
||||
|| { clear; exit 1; }
|
||||
fi
|
||||
}
|
||||
|
||||
count_steps() {
|
||||
local sel="$1"
|
||||
TOTAL=0
|
||||
[[ "$sel" == *"networking-cli"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$sel" == *"disk-recovery"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$sel" == *"himalaya"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$sel" == *"gnuplot"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$sel" == *"povray"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$sel" == *"blender"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$sel" == *"toot"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$sel" == *"db-clients"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$sel" == *"mysql"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$sel" == *"productivity"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$sel" == *"yt-dlp"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$sel" == *"sox"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$sel" == *"imagemagick"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$sel" == *"ffmpeg"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$sel" == *"localtunnel"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$sel" == *"butter"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$sel" == *"tlp"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$sel" == *"steam"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$sel" == *"vesktop"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$sel" == *"spotify"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$sel" == *"prism"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$sel" == *"vintagestory"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$sel" == *"localsend"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$sel" == *"croc"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$sel" == *"onlyoffice"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$sel" == *"wireshark"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$sel" == *"k8s"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$sel" == *"docker"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$sel" == *"podman"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$sel" == *"cockpit"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$sel" == *"ssh-server"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$sel" == *"python"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$sel" == *"zfs"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$sel" == *"wprs"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
}
|
||||
|
||||
[[ $EUID -eq 0 ]] && die "Run as your normal user (not root)."
|
||||
command -v pacman &>/dev/null || die "pacman not found — Arch Linux required."
|
||||
|
||||
require_dialog
|
||||
|
||||
> "$LOG"
|
||||
printf "Module install: %s\n" "$(date)" >> "$LOG"
|
||||
|
||||
dialog --backtitle "$BACKTITLE" \
|
||||
--title " Module Installer " \
|
||||
--msgbox "\n\
|
||||
Install optional modules on an existing system.\n\
|
||||
─────────────────────────────────────────────────\n\
|
||||
\n\
|
||||
Select any combination of modules below.\n\
|
||||
Each module is idempotent — safe to re-run.\n\
|
||||
\n\
|
||||
Log: $LOG\n" 13 62
|
||||
|
||||
SELECTED=$(dialog --backtitle "$BACKTITLE" \
|
||||
--title " Select Modules " \
|
||||
--checklist "Space toggles · Enter confirms · Arrow keys scroll" 40 76 32 \
|
||||
\
|
||||
"networking-cli" "Networking CLI nmap · nethogs · mitmproxy · httpie" off \
|
||||
"disk-recovery" "Disk Recovery ddrescue · f3" off \
|
||||
"himalaya" "Himalaya terminal email client (AUR)" off \
|
||||
"gnuplot" "Gnuplot scientific plotting" off \
|
||||
"povray" "POV-Ray ray-tracing renderer" off \
|
||||
"blender" "Blender 3D creation suite" off \
|
||||
"toot" "toot Mastodon CLI client (AUR)" off \
|
||||
"db-clients" "DB Clients pgcli · mycli" off \
|
||||
"mysql" "MySQL / MariaDB mariadb server + setup" off \
|
||||
"productivity" "Productivity taskwarrior · watson · jrnl" off \
|
||||
"yt-dlp" "yt-dlp YouTube / media downloader" off \
|
||||
"sox" "SoX audio processing toolkit" off \
|
||||
"imagemagick" "ImageMagick image manipulation" off \
|
||||
"ffmpeg" "FFmpeg extras thumbnailer · GStreamer codecs" off \
|
||||
"localtunnel" "LocalTunnel expose localhost via tunnel" off \
|
||||
"butter" "butter btrfs snapshot backup (AUR)" off \
|
||||
"tlp" "TLP laptop power management" off \
|
||||
\
|
||||
"steam" "Steam gaming platform" off \
|
||||
"vesktop" "Vesktop Discord + Vencord theme" off \
|
||||
"spotify" "Spotify launcher + Spicetify theming" off \
|
||||
"prism" "PrismLauncher Minecraft launcher (Flatpak)" off \
|
||||
"vintagestory" "Vintage Story survival game (AUR)" off \
|
||||
"localsend" "LocalSend LAN file transfer (AUR)" off \
|
||||
"croc" "croc cross-platform file transfer" off \
|
||||
"onlyoffice" "OnlyOffice office suite (AUR)" off \
|
||||
"wireshark" "Wireshark network packet analyser (GUI)" off \
|
||||
"k8s" "Kubernetes tools kubectl · podman-desktop" off \
|
||||
"docker" "Docker docker · docker-compose" off \
|
||||
"podman" "Podman rootless containers · buildah" off \
|
||||
"cockpit" "Cockpit web UI · machines · podman" off \
|
||||
"ssh-server" "SSH server openssh · key-auth · enabled" off \
|
||||
"python" "Python tools pyright · pipx · pynvim" off \
|
||||
"zfs" "ZFS zfs-dkms kernel module" off \
|
||||
"wprs" "WPRS wprs-git (AUR)" off \
|
||||
3>&1 1>&2 2>&3) || { clear; echo "Aborted."; exit 0; }
|
||||
|
||||
[[ -z "$SELECTED" ]] && { clear; echo "Nothing selected."; exit 0; }
|
||||
|
||||
SUMMARY=""
|
||||
[[ "$SELECTED" == *"networking-cli"* ]] && SUMMARY+=" ✦ Networking CLI (nmap, nethogs, mitmproxy, httpie)\n"
|
||||
[[ "$SELECTED" == *"disk-recovery"* ]] && SUMMARY+=" ✦ Disk Recovery (ddrescue, f3)\n"
|
||||
[[ "$SELECTED" == *"himalaya"* ]] && SUMMARY+=" ✦ Himalaya\n"
|
||||
[[ "$SELECTED" == *"gnuplot"* ]] && SUMMARY+=" ✦ Gnuplot\n"
|
||||
[[ "$SELECTED" == *"povray"* ]] && SUMMARY+=" ✦ POV-Ray\n"
|
||||
[[ "$SELECTED" == *"blender"* ]] && SUMMARY+=" ✦ Blender\n"
|
||||
[[ "$SELECTED" == *"toot"* ]] && SUMMARY+=" ✦ toot\n"
|
||||
[[ "$SELECTED" == *"db-clients"* ]] && SUMMARY+=" ✦ DB Clients (pgcli, mycli)\n"
|
||||
[[ "$SELECTED" == *"mysql"* ]] && SUMMARY+=" ✦ MySQL / MariaDB\n"
|
||||
[[ "$SELECTED" == *"productivity"* ]] && SUMMARY+=" ✦ Productivity (taskwarrior, watson, jrnl)\n"
|
||||
[[ "$SELECTED" == *"yt-dlp"* ]] && SUMMARY+=" ✦ yt-dlp\n"
|
||||
[[ "$SELECTED" == *"sox"* ]] && SUMMARY+=" ✦ SoX\n"
|
||||
[[ "$SELECTED" == *"imagemagick"* ]] && SUMMARY+=" ✦ ImageMagick\n"
|
||||
[[ "$SELECTED" == *"ffmpeg"* ]] && SUMMARY+=" ✦ FFmpeg extras\n"
|
||||
[[ "$SELECTED" == *"localtunnel"* ]] && SUMMARY+=" ✦ LocalTunnel\n"
|
||||
[[ "$SELECTED" == *"butter"* ]] && SUMMARY+=" ✦ butter (btrfs backup)\n"
|
||||
[[ "$SELECTED" == *"tlp"* ]] && SUMMARY+=" ✦ TLP\n"
|
||||
[[ "$SELECTED" == *"steam"* ]] && SUMMARY+=" ✦ Steam\n"
|
||||
[[ "$SELECTED" == *"vesktop"* ]] && SUMMARY+=" ✦ Vesktop\n"
|
||||
[[ "$SELECTED" == *"spotify"* ]] && SUMMARY+=" ✦ Spotify\n"
|
||||
[[ "$SELECTED" == *"prism"* ]] && SUMMARY+=" ✦ PrismLauncher\n"
|
||||
[[ "$SELECTED" == *"vintagestory"* ]] && SUMMARY+=" ✦ Vintage Story\n"
|
||||
[[ "$SELECTED" == *"localsend"* ]] && SUMMARY+=" ✦ LocalSend\n"
|
||||
[[ "$SELECTED" == *"croc"* ]] && SUMMARY+=" ✦ croc\n"
|
||||
[[ "$SELECTED" == *"onlyoffice"* ]] && SUMMARY+=" ✦ OnlyOffice\n"
|
||||
[[ "$SELECTED" == *"wireshark"* ]] && SUMMARY+=" ✦ Wireshark\n"
|
||||
[[ "$SELECTED" == *"k8s"* ]] && SUMMARY+=" ✦ Kubernetes tools\n"
|
||||
[[ "$SELECTED" == *"docker"* ]] && SUMMARY+=" ✦ Docker\n"
|
||||
[[ "$SELECTED" == *"podman"* ]] && SUMMARY+=" ✦ Podman\n"
|
||||
[[ "$SELECTED" == *"cockpit"* ]] && SUMMARY+=" ✦ Cockpit\n"
|
||||
[[ "$SELECTED" == *"ssh-server"* ]] && SUMMARY+=" ✦ SSH server\n"
|
||||
[[ "$SELECTED" == *"python"* ]] && SUMMARY+=" ✦ Python tools\n"
|
||||
[[ "$SELECTED" == *"zfs"* ]] && SUMMARY+=" ✦ ZFS\n"
|
||||
[[ "$SELECTED" == *"wprs"* ]] && SUMMARY+=" ✦ WPRS\n"
|
||||
|
||||
dialog --backtitle "$BACKTITLE" \
|
||||
--title " Confirm " \
|
||||
--yesno "\n Modules to install:\n\n${SUMMARY}\n Log: $LOG\n\n Proceed?" \
|
||||
30 64 || { clear; echo "Aborted."; exit 0; }
|
||||
|
||||
count_steps "$SELECTED"
|
||||
|
||||
[[ "$SELECTED" == *"networking-cli"* ]] && run_module "Networking CLI" "$APPS/networking-cli.sh"
|
||||
[[ "$SELECTED" == *"disk-recovery"* ]] && run_module "Disk Recovery" "$APPS/disk-recovery.sh"
|
||||
[[ "$SELECTED" == *"himalaya"* ]] && run_module "Himalaya" "$APPS/himalaya.sh"
|
||||
[[ "$SELECTED" == *"gnuplot"* ]] && run_module "Gnuplot" "$APPS/gnuplot.sh"
|
||||
[[ "$SELECTED" == *"povray"* ]] && run_module "POV-Ray" "$APPS/povray.sh"
|
||||
[[ "$SELECTED" == *"blender"* ]] && run_module "Blender" "$APPS/blender.sh"
|
||||
[[ "$SELECTED" == *"toot"* ]] && run_module "toot" "$APPS/toot.sh"
|
||||
[[ "$SELECTED" == *"db-clients"* ]] && run_module "DB Clients" "$APPS/db-clients.sh"
|
||||
[[ "$SELECTED" == *"mysql"* ]] && run_module "MySQL / MariaDB" "$APPS/mysql.sh"
|
||||
[[ "$SELECTED" == *"productivity"* ]] && run_module "Productivity" "$APPS/productivity.sh"
|
||||
[[ "$SELECTED" == *"yt-dlp"* ]] && run_module "yt-dlp" "$APPS/yt-dlp.sh"
|
||||
[[ "$SELECTED" == *"sox"* ]] && run_module "SoX" "$APPS/sox.sh"
|
||||
[[ "$SELECTED" == *"imagemagick"* ]] && run_module "ImageMagick" "$APPS/imagemagick.sh"
|
||||
[[ "$SELECTED" == *"ffmpeg"* ]] && run_module "FFmpeg extras" "$APPS/ffmpeg.sh"
|
||||
[[ "$SELECTED" == *"localtunnel"* ]] && run_module "LocalTunnel" "$APPS/localtunnel.sh"
|
||||
[[ "$SELECTED" == *"butter"* ]] && run_module "butter" "$APPS/butter.sh"
|
||||
[[ "$SELECTED" == *"tlp"* ]] && run_module "TLP" "$APPS/tlp.sh"
|
||||
[[ "$SELECTED" == *"steam"* ]] && run_module "Steam" "$APPS/steam.sh"
|
||||
[[ "$SELECTED" == *"vesktop"* ]] && run_module "Vesktop" "$APPS/vesktop.sh"
|
||||
[[ "$SELECTED" == *"spotify"* ]] && run_module "Spotify" "$APPS/spotify.sh"
|
||||
[[ "$SELECTED" == *"prism"* ]] && run_module "PrismLauncher" "$APPS/prismlauncher.sh"
|
||||
[[ "$SELECTED" == *"vintagestory"* ]] && run_module "Vintage Story" "$APPS/vintagestory.sh"
|
||||
[[ "$SELECTED" == *"localsend"* ]] && run_module "LocalSend" "$APPS/localsend.sh"
|
||||
[[ "$SELECTED" == *"croc"* ]] && run_module "croc" "$APPS/croc.sh"
|
||||
[[ "$SELECTED" == *"onlyoffice"* ]] && run_module "OnlyOffice" "$APPS/onlyoffice.sh"
|
||||
[[ "$SELECTED" == *"wireshark"* ]] && run_module "Wireshark" "$APPS/wireshark.sh"
|
||||
[[ "$SELECTED" == *"k8s"* ]] && run_module "Kubernetes Tools" "$APPS/k8s.sh"
|
||||
[[ "$SELECTED" == *"docker"* ]] && run_module "Docker" "$APPS/docker.sh"
|
||||
[[ "$SELECTED" == *"podman"* ]] && run_module "Podman" "$APPS/podman.sh"
|
||||
[[ "$SELECTED" == *"cockpit"* ]] && run_module "Cockpit" "$APPS/cockpit.sh"
|
||||
[[ "$SELECTED" == *"ssh-server"* ]] && run_module "SSH Server" "$APPS/ssh-server.sh"
|
||||
[[ "$SELECTED" == *"python"* ]] && run_module "Python Tools" "$MODULES/optional-Modules/python.sh"
|
||||
[[ "$SELECTED" == *"zfs"* ]] && run_module "ZFS" "$MODULES/optional-Modules/zfs.sh"
|
||||
[[ "$SELECTED" == *"wprs"* ]] && run_module "WPRS" "$MODULES/optional-Modules/wprs.sh"
|
||||
|
||||
dialog --backtitle "$BACKTITLE" \
|
||||
--title " Done " \
|
||||
--msgbox "\n All selected modules installed.\n\n Log: $LOG\n\n A reboot may be required for some changes.\n" 11 56
|
||||
|
||||
clear
|
||||
printf "\n Done. Log: %s\n\n" "$LOG"
|
||||
|
|
@ -5,14 +5,13 @@ sudo pacman -Syu --noconfirm --needed \
|
|||
7zip arch-install-scripts atftp atool \
|
||||
base base-devel bind bluez btrfs-progs btop \
|
||||
cockpit cockpit-files cockpit-podman cronie curl \
|
||||
distrobox fail2ban fastfetch fd ffmpeg firefox flatpak \
|
||||
distrobox fail2ban fastfetch fd fdupes ffmpeg firefox flatpak \
|
||||
gcc glib2 greetd-tuigreet grub \
|
||||
htop inetutils iwd jq ldns less libpulse linux linux-firmware \
|
||||
htop inetutils iputils iwd jq ldns less libpulse linux linux-firmware \
|
||||
man-db mc nano neovim networkmanager \
|
||||
openssh pciutils pipewire podman podman-compose \
|
||||
onefetch openssh pciutils pipewire podman podman-compose \
|
||||
python python-pip qrencode ruby-pkg-config rust rustup \
|
||||
ipcalc iputils mtr net-tools nmap \
|
||||
smartmontools symlinks tcpdump traceroute tree \
|
||||
smartmontools symlinks tldr tree \
|
||||
udisks2 udisks2-btrfs udiskie ufw usbutils \
|
||||
vim vnstat wget wireplumber wireless_tools wpa_supplicant wprs \
|
||||
yazi zip unzip zram-generator
|
||||
|
|
|
|||
|
|
@ -0,0 +1,4 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
sudo pacman -S --noconfirm --needed blender
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
sudo pacman -S --noconfirm --needed btrfs-progs
|
||||
|
||||
yay -S --answerdiff None --answerclean All --noconfirm butter
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
sudo pacman -S --noconfirm --needed pgcli
|
||||
|
||||
yay -S --answerdiff None --answerclean All --noconfirm mycli
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
sudo pacman -S --noconfirm --needed ddrescue
|
||||
|
||||
yay -S --answerdiff None --answerclean All --noconfirm f3
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
sudo pacman -S --noconfirm --needed \
|
||||
ffmpeg ffmpegthumbnailer \
|
||||
gst-libav gst-plugins-good gst-plugins-bad gst-plugins-ugly
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
sudo pacman -S --noconfirm --needed gnuplot
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
yay -S --answerdiff None --answerclean All --noconfirm himalaya-bin
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
sudo pacman -S --noconfirm --needed imagemagick
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
if command -v npm &>/dev/null; then
|
||||
npm install -g localtunnel
|
||||
else
|
||||
yay -S --answerdiff None --answerclean All --noconfirm localtunnel
|
||||
fi
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
sudo pacman -S --noconfirm --needed mariadb
|
||||
|
||||
if [[ ! -d /var/lib/mysql/mysql ]]; then
|
||||
sudo mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
|
||||
fi
|
||||
|
||||
sudo systemctl enable --now mariadb.service
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
sudo pacman -S --noconfirm --needed \
|
||||
httpie ipcalc mitmproxy mtr net-tools nethogs \
|
||||
nmap tcpdump traceroute
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
sudo pacman -S --noconfirm --needed povray
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
sudo pacman -S --noconfirm --needed task
|
||||
|
||||
yay -S --answerdiff None --answerclean All --noconfirm watson python-jrnl
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
sudo pacman -S --noconfirm --needed sox
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
sudo pacman -S --noconfirm --needed tlp tlp-rdw
|
||||
|
||||
sudo systemctl enable --now tlp.service
|
||||
sudo systemctl enable NetworkManager-dispatcher.service
|
||||
sudo systemctl mask systemd-rfkill.service systemd-rfkill.socket
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
yay -S --answerdiff None --answerclean All --noconfirm toot
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
sudo pacman -S --noconfirm --needed yt-dlp
|
||||
|
|
@ -94,6 +94,23 @@ count_steps() {
|
|||
[[ "$c" == *"svc"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$c" == *"shell"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$c" == *"de"* && "$de" != "none" ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$a" == *"networking-cli"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$a" == *"disk-recovery"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$a" == *"himalaya"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$a" == *"gnuplot"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$a" == *"povray"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$a" == *"blender"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$a" == *"toot"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$a" == *"db-clients"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$a" == *"mysql"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$a" == *"productivity"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$a" == *"yt-dlp"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$a" == *"sox"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$a" == *"imagemagick"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$a" == *"ffmpeg"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$a" == *"localtunnel"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$a" == *"butter"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$a" == *"tlp"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$a" == *"steam"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$a" == *"vesktop"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
[[ "$a" == *"spotify"* ]] && TOTAL=$(( TOTAL + 1 ))
|
||||
|
|
@ -161,7 +178,24 @@ fi
|
|||
# ── Apps selection ────────────────────────────────────────────────────────────
|
||||
SELECTED_APPS=$(dialog --backtitle "$BACKTITLE" \
|
||||
--title " Applications " \
|
||||
--checklist "Optional applications — installed after base components:" 32 72 18 \
|
||||
--checklist "Optional applications — installed after base components:" 40 76 32 \
|
||||
"networking-cli" "Networking CLI nmap · nethogs · mitmproxy · httpie" off \
|
||||
"disk-recovery" "Disk Recovery ddrescue · f3" off \
|
||||
"himalaya" "Himalaya terminal email client (AUR)" off \
|
||||
"gnuplot" "Gnuplot scientific plotting" off \
|
||||
"povray" "POV-Ray ray-tracing renderer" off \
|
||||
"blender" "Blender 3D creation suite" off \
|
||||
"toot" "toot Mastodon CLI client (AUR)" off \
|
||||
"db-clients" "DB Clients pgcli · mycli" off \
|
||||
"mysql" "MySQL / MariaDB mariadb server + setup" off \
|
||||
"productivity" "Productivity taskwarrior · watson · jrnl" off \
|
||||
"yt-dlp" "yt-dlp YouTube / media downloader" off \
|
||||
"sox" "SoX audio processing toolkit" off \
|
||||
"imagemagick" "ImageMagick image manipulation" off \
|
||||
"ffmpeg" "FFmpeg extras thumbnailer · GStreamer codecs" off \
|
||||
"localtunnel" "LocalTunnel expose localhost via tunnel" off \
|
||||
"butter" "butter btrfs snapshot backup (AUR)" off \
|
||||
"tlp" "TLP laptop power management" off \
|
||||
"steam" "Steam gaming platform" off \
|
||||
"vesktop" "Vesktop Discord + Vencord theme" off \
|
||||
"spotify" "Spotify launcher + Spicetify theming" off \
|
||||
|
|
@ -170,7 +204,7 @@ SELECTED_APPS=$(dialog --backtitle "$BACKTITLE" \
|
|||
"localsend" "LocalSend LAN file transfer (AUR)" off \
|
||||
"croc" "croc cross-platform file transfer" off \
|
||||
"onlyoffice" "OnlyOffice office suite (AUR)" off \
|
||||
"wireshark" "Wireshark network packet analyser" off \
|
||||
"wireshark" "Wireshark network packet analyser (GUI)" off \
|
||||
"k8s" "Kubernetes tools kubectl · podman-desktop" off \
|
||||
"docker" "Docker docker · docker-compose" off \
|
||||
"podman" "Podman rootless containers · buildah" off \
|
||||
|
|
@ -191,6 +225,23 @@ SUMMARY=""
|
|||
|
||||
if [[ -n "$SELECTED_APPS" ]]; then
|
||||
SUMMARY+="\n Applications:\n"
|
||||
[[ "$SELECTED_APPS" == *"networking-cli"* ]] && SUMMARY+=" ✦ Networking CLI (nmap, nethogs, mitmproxy, httpie)\n"
|
||||
[[ "$SELECTED_APPS" == *"disk-recovery"* ]] && SUMMARY+=" ✦ Disk Recovery (ddrescue, f3)\n"
|
||||
[[ "$SELECTED_APPS" == *"himalaya"* ]] && SUMMARY+=" ✦ Himalaya\n"
|
||||
[[ "$SELECTED_APPS" == *"gnuplot"* ]] && SUMMARY+=" ✦ Gnuplot\n"
|
||||
[[ "$SELECTED_APPS" == *"povray"* ]] && SUMMARY+=" ✦ POV-Ray\n"
|
||||
[[ "$SELECTED_APPS" == *"blender"* ]] && SUMMARY+=" ✦ Blender\n"
|
||||
[[ "$SELECTED_APPS" == *"toot"* ]] && SUMMARY+=" ✦ toot\n"
|
||||
[[ "$SELECTED_APPS" == *"db-clients"* ]] && SUMMARY+=" ✦ DB Clients (pgcli, mycli)\n"
|
||||
[[ "$SELECTED_APPS" == *"mysql"* ]] && SUMMARY+=" ✦ MySQL / MariaDB\n"
|
||||
[[ "$SELECTED_APPS" == *"productivity"* ]] && SUMMARY+=" ✦ Productivity (taskwarrior, watson, jrnl)\n"
|
||||
[[ "$SELECTED_APPS" == *"yt-dlp"* ]] && SUMMARY+=" ✦ yt-dlp\n"
|
||||
[[ "$SELECTED_APPS" == *"sox"* ]] && SUMMARY+=" ✦ SoX\n"
|
||||
[[ "$SELECTED_APPS" == *"imagemagick"* ]] && SUMMARY+=" ✦ ImageMagick\n"
|
||||
[[ "$SELECTED_APPS" == *"ffmpeg"* ]] && SUMMARY+=" ✦ FFmpeg extras\n"
|
||||
[[ "$SELECTED_APPS" == *"localtunnel"* ]] && SUMMARY+=" ✦ LocalTunnel\n"
|
||||
[[ "$SELECTED_APPS" == *"butter"* ]] && SUMMARY+=" ✦ butter (btrfs backup)\n"
|
||||
[[ "$SELECTED_APPS" == *"tlp"* ]] && SUMMARY+=" ✦ TLP\n"
|
||||
[[ "$SELECTED_APPS" == *"steam"* ]] && SUMMARY+=" ✦ Steam\n"
|
||||
[[ "$SELECTED_APPS" == *"vesktop"* ]] && SUMMARY+=" ✦ Vesktop + Vencord theme\n"
|
||||
[[ "$SELECTED_APPS" == *"spotify"* ]] && SUMMARY+=" ✦ Spotify + Spicetify\n"
|
||||
|
|
@ -231,6 +282,23 @@ if [[ "$COMPONENTS" == *"de"* && "$DE" != "none" ]]; then
|
|||
fi
|
||||
|
||||
# ── Installation: applications ────────────────────────────────────────────────
|
||||
[[ "$SELECTED_APPS" == *"networking-cli"* ]] && run_module "Networking CLI" "$APPS/networking-cli.sh"
|
||||
[[ "$SELECTED_APPS" == *"disk-recovery"* ]] && run_module "Disk Recovery" "$APPS/disk-recovery.sh"
|
||||
[[ "$SELECTED_APPS" == *"himalaya"* ]] && run_module "Himalaya" "$APPS/himalaya.sh"
|
||||
[[ "$SELECTED_APPS" == *"gnuplot"* ]] && run_module "Gnuplot" "$APPS/gnuplot.sh"
|
||||
[[ "$SELECTED_APPS" == *"povray"* ]] && run_module "POV-Ray" "$APPS/povray.sh"
|
||||
[[ "$SELECTED_APPS" == *"blender"* ]] && run_module "Blender" "$APPS/blender.sh"
|
||||
[[ "$SELECTED_APPS" == *"toot"* ]] && run_module "toot" "$APPS/toot.sh"
|
||||
[[ "$SELECTED_APPS" == *"db-clients"* ]] && run_module "DB Clients" "$APPS/db-clients.sh"
|
||||
[[ "$SELECTED_APPS" == *"mysql"* ]] && run_module "MySQL / MariaDB" "$APPS/mysql.sh"
|
||||
[[ "$SELECTED_APPS" == *"productivity"* ]] && run_module "Productivity" "$APPS/productivity.sh"
|
||||
[[ "$SELECTED_APPS" == *"yt-dlp"* ]] && run_module "yt-dlp" "$APPS/yt-dlp.sh"
|
||||
[[ "$SELECTED_APPS" == *"sox"* ]] && run_module "SoX" "$APPS/sox.sh"
|
||||
[[ "$SELECTED_APPS" == *"imagemagick"* ]] && run_module "ImageMagick" "$APPS/imagemagick.sh"
|
||||
[[ "$SELECTED_APPS" == *"ffmpeg"* ]] && run_module "FFmpeg extras" "$APPS/ffmpeg.sh"
|
||||
[[ "$SELECTED_APPS" == *"localtunnel"* ]] && run_module "LocalTunnel" "$APPS/localtunnel.sh"
|
||||
[[ "$SELECTED_APPS" == *"butter"* ]] && run_module "butter" "$APPS/butter.sh"
|
||||
[[ "$SELECTED_APPS" == *"tlp"* ]] && run_module "TLP" "$APPS/tlp.sh"
|
||||
[[ "$SELECTED_APPS" == *"steam"* ]] && run_module "Steam" "$APPS/steam.sh"
|
||||
[[ "$SELECTED_APPS" == *"vesktop"* ]] && run_module "Vesktop" "$APPS/vesktop.sh"
|
||||
[[ "$SELECTED_APPS" == *"spotify"* ]] && run_module "Spotify" "$APPS/spotify.sh"
|
||||
|
|
|
|||
Loading…
Reference in New Issue