From eb3ae766a5ddb01d7f8cc272bcd13ac785532c1d Mon Sep 17 00:00:00 2001 From: The_miro Date: Wed, 20 May 2026 15:12:21 +0200 Subject: [PATCH] feat(modules): add RDP client and QEMU/KVM modules rdp-client.sh: installs Remmina with the FreeRDP and libvncserver plugins for RDP and VNC sessions. qemu.sh: installs the full QEMU/KVM stack (qemu-full, libvirt, virt-manager, virt-viewer, dnsmasq, bridge-utils, edk2-ovmf, swtpm, vde2), enables and starts libvirtd, auto-starts the default NAT network, and adds the user to the libvirt and kvm groups. Both modules are wired into tui-install.sh: count_steps, checklist, confirmation summary, and run_module dispatch. Co-Authored-By: Claude Sonnet 4.6 --- setup/modules/optional-Modules/apps/qemu.sh | 22 +++++++++++++++++++ .../optional-Modules/apps/rdp-client.sh | 10 +++++++++ setup/tui-install.sh | 9 ++++++++ 3 files changed, 41 insertions(+) create mode 100644 setup/modules/optional-Modules/apps/qemu.sh create mode 100644 setup/modules/optional-Modules/apps/rdp-client.sh diff --git a/setup/modules/optional-Modules/apps/qemu.sh b/setup/modules/optional-Modules/apps/qemu.sh new file mode 100644 index 0000000..d1aa336 --- /dev/null +++ b/setup/modules/optional-Modules/apps/qemu.sh @@ -0,0 +1,22 @@ +#!/bin/bash +set -euo pipefail + +# QEMU/KVM + libvirt stack + virt-manager GUI +sudo pacman -S --noconfirm --needed \ + qemu-full \ + libvirt \ + virt-manager \ + virt-viewer \ + dnsmasq \ + bridge-utils \ + edk2-ovmf \ + swtpm \ + vde2 + +sudo systemctl enable --now libvirtd.service + +# Enable the default NAT network at libvirt startup +sudo virsh net-autostart default 2>/dev/null || true + +sudo usermod -aG libvirt,kvm "$USER" +echo "QEMU/KVM installed. Log out and back in for group membership to take effect." diff --git a/setup/modules/optional-Modules/apps/rdp-client.sh b/setup/modules/optional-Modules/apps/rdp-client.sh new file mode 100644 index 0000000..6add70c --- /dev/null +++ b/setup/modules/optional-Modules/apps/rdp-client.sh @@ -0,0 +1,10 @@ +#!/bin/bash +set -euo pipefail + +# Remmina + protocol plugins +sudo pacman -S --noconfirm --needed \ + remmina \ + freerdp \ + libvncserver + +echo "Remmina installed with RDP (freerdp) and VNC support." diff --git a/setup/tui-install.sh b/setup/tui-install.sh index 811c8f3..a5559ee 100755 --- a/setup/tui-install.sh +++ b/setup/tui-install.sh @@ -160,6 +160,8 @@ count_steps() { [[ "$a" == *"geany"* ]] && TOTAL=$(( TOTAL + 1 )) [[ "$a" == *"codeblocks"* ]] && TOTAL=$(( TOTAL + 1 )) [[ "$a" == *"kate"* ]] && TOTAL=$(( TOTAL + 1 )) + [[ "$a" == *"rdp-client"* ]] && TOTAL=$(( TOTAL + 1 )) + [[ "$a" == *"qemu"* ]] && TOTAL=$(( TOTAL + 1 )) } # ── Answerfile ──────────────────────────────────────────────────────────────── @@ -356,6 +358,9 @@ else "geany" "Geany lightweight IDE + plugins (official)" off \ "codeblocks" "Code::Blocks C/C++ IDE (official)" off \ "kate" "Kate KDE advanced text editor (official)" off \ + \ + "rdp-client" "RDP Client Remmina + FreeRDP + VNC plugins" off \ + "qemu" "QEMU/KVM full virt stack + virt-manager GUI" off \ 3>&1 1>&2 2>&3) || SELECTED_APPS="" fi @@ -423,6 +428,8 @@ if ! $ANSWERFILE_MODE; then [[ "$SELECTED_APPS" == *"geany"* ]] && SUMMARY+=" ✦ Geany\n" [[ "$SELECTED_APPS" == *"codeblocks"* ]] && SUMMARY+=" ✦ Code::Blocks\n" [[ "$SELECTED_APPS" == *"kate"* ]] && SUMMARY+=" ✦ Kate\n" + [[ "$SELECTED_APPS" == *"rdp-client"* ]] && SUMMARY+=" ✦ RDP Client (Remmina + FreeRDP)\n" + [[ "$SELECTED_APPS" == *"qemu"* ]] && SUMMARY+=" ✦ QEMU/KVM + virt-manager\n" fi dialog --backtitle "$BACKTITLE" \ @@ -505,6 +512,8 @@ fi [[ "$SELECTED_APPS" == *"geany"* ]] && run_module "Geany" "$APPS/geany.sh" [[ "$SELECTED_APPS" == *"codeblocks"* ]] && run_module "Code::Blocks" "$APPS/codeblocks.sh" [[ "$SELECTED_APPS" == *"kate"* ]] && run_module "Kate" "$APPS/kate.sh" +[[ "$SELECTED_APPS" == *"rdp-client"* ]] && run_module "RDP Client" "$APPS/rdp-client.sh" +[[ "$SELECTED_APPS" == *"qemu"* ]] && run_module "QEMU/KVM" "$APPS/qemu.sh" # ── Colorway (final step) ───────────────────────────────────────────────────── # Read defaults from repo colors.conf for pre-population