From 082a6731d52a4795e90bf5c29bf8ad0510d11188 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Thu, 29 Jan 2026 06:53:36 -0600 Subject: feat(test,hyprland): improve test infrastructure and fix easyeffects Test Infrastructure: - Add make test-keep target to keep VM running after test - Add make test-vm-base target for creating base VM only - Update make test to auto-create VM if missing - Remove manual user creation from create-base-vm.sh (archsetup handles it) - Remove unused USERNAME/USER_PASSWORD from archsetup-test.conf Archsetup: - Add snapper-gui-git for btrfs snapshot GUI - Add SYNC_ACL=yes for snapper permissions - Add setfacl for wheel group access to /.snapshots Hyprland: - Remove easyeffects scratchpad (keep auto-launch) - Remove ecosystem permissions (caused too many popups) Co-Authored-By: Claude Opus 4.5 --- Makefile | 26 +++++++++++++++++++++++--- archsetup | 8 +++++++- dotfiles/hyprland/.config/hypr/hyprland.conf | 12 ++---------- scripts/testing/archsetup-test.conf | 3 +++ scripts/testing/create-base-vm.sh | 3 +++ 5 files changed, 38 insertions(+), 14 deletions(-) diff --git a/Makefile b/Makefile index 6d29788..e0e9237 100644 --- a/Makefile +++ b/Makefile @@ -10,7 +10,7 @@ DE := $(filter dwm hyprland,$(MAKECMDGOALS)) # Extract DEST from command line for import (e.g., 'make import common' -> DEST=common) DEST := $(filter common dwm hyprland,$(MAKECMDGOALS)) -.PHONY: help deps stow restow reset unstow import test common dwm hyprland +.PHONY: help deps stow restow reset unstow import test test-keep test-vm-base common dwm hyprland # Default target - show help help: @@ -30,7 +30,9 @@ help: @echo " reset Resolve conflicts, keep repo version - requires DE" @echo " unstow Remove all symlinks - requires DE" @echo " import Import new app configs into repo (fzf) - requires dest" - @echo " test Run full VM test suite and report results" + @echo " test Run full VM test suite (creates base VM if needed)" + @echo " test-keep Run test and keep VM running for manual testing" + @echo " test-vm-base Create base VM only (runs archangel)" @echo "" @echo "Examples:" @echo " make stow dwm # Fresh DWM install (common + dwm)" @@ -139,6 +141,24 @@ import: check-dest echo ""; \ echo "Done. Don't forget to: git add -A && git commit" -# Test - run full VM integration test suite +# Create base VM for testing (runs archangel only, no archsetup) +test-vm-base: + @bash scripts/testing/create-base-vm.sh + +# Test - run full VM integration test suite (creates base VM if needed) test: + @if [ ! -f vm-images/archsetup-base.qcow2 ] || \ + ! qemu-img snapshot -l vm-images/archsetup-base.qcow2 2>/dev/null | grep -q "clean-install"; then \ + echo "Base VM not found or missing snapshot, creating..."; \ + bash scripts/testing/create-base-vm.sh; \ + fi @bash scripts/testing/run-test.sh + +# Test and keep VM running (for manual testing after archsetup) +test-keep: + @if [ ! -f vm-images/archsetup-base.qcow2 ] || \ + ! qemu-img snapshot -l vm-images/archsetup-base.qcow2 2>/dev/null | grep -q "clean-install"; then \ + echo "Base VM not found or missing snapshot, creating..."; \ + bash scripts/testing/create-base-vm.sh; \ + fi + @bash scripts/testing/run-test.sh --keep diff --git a/archsetup b/archsetup index 2eae786..a2aaa2d 100755 --- a/archsetup +++ b/archsetup @@ -1306,9 +1306,15 @@ EOF action="enabling grub-btrfsd for boot menu snapshots" && display "task" "$action" systemctl enable grub-btrfsd >> "$logfile" 2>&1 || error_warn "$action" "$?" - # Allow user to use snapper without root + # Allow user to use snapper without root (required for snapper-gui) action="allowing wheel group to use snapper" && display "task" "$action" snapper -c root set-config "ALLOW_GROUPS=wheel" >> "$logfile" 2>&1 || error_warn "$action" "$?" + snapper -c root set-config "SYNC_ACL=yes" >> "$logfile" 2>&1 || error_warn "$action" "$?" + # Set ACL on .snapshots directory for wheel group access + setfacl -m g:wheel:rx /.snapshots >> "$logfile" 2>&1 || error_warn "$action" "$?" + + # Install snapper GUI (AUR) + aur_install snapper-gui-git else display "task" "ext4/other filesystem detected" diff --git a/dotfiles/hyprland/.config/hypr/hyprland.conf b/dotfiles/hyprland/.config/hypr/hyprland.conf index 3eae5b6..de2e3fa 100644 --- a/dotfiles/hyprland/.config/hypr/hyprland.conf +++ b/dotfiles/hyprland/.config/hypr/hyprland.conf @@ -15,9 +15,9 @@ exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CUR exec-once = systemctl --user start xdg-desktop-portal-hyprland xdg-desktop-portal # Core services -exec-once = hyprpm reload && sleep 1 && hyprctl dismissnotify -1 exec-once = /usr/bin/gnome-keyring-daemon --start --components=pkcs11,secrets,ssh exec-once = dunst > ~/.local/var/log/dunst-$(date +%Y-%m-%d-%H%M%S).log 2>&1 +exec-once = hyprpm reload && sleep 2 && hyprctl dismissnotify -1 # Desktop appearance (after portal is ready) exec-once = swww-daemon && sleep 1 && swww img ~/pictures/wallpaper/trondheim-norway.jpg @@ -29,7 +29,7 @@ exec-once = hypridle > ~/.local/var/log/hypridle-$(date +%Y-%m-%d-%H%M%S).log 2> exec-once = /usr/lib/geoclue-2.0/demos/agent exec-once = gammastep > ~/.local/var/log/gammastep-$(date +%Y-%m-%d-%H%M%S).log 2>&1 exec-once = blueman-applet -exec-once = easyeffects --gapplication-service +exec-once = easyeffects exec-once = mpd # Apps that can start later @@ -272,14 +272,11 @@ workspace = special:audio, on-created-empty:foot --app-id foot-audio pulsemixer workspace = special:monitor, on-created-empty:foot --app-id foot-monitor monitor-dashboard workspace = special:music, on-created-empty:foot --app-id foot-music ncmpcpp workspace = special:network, on-created-empty:foot --app-id foot-network nmtui -workspace = special:effects, on-created-empty:easyeffects - # Keybindings (single bind per scratchpad - just toggle visibility) bind = $mod SHIFT, RETURN, togglespecialworkspace, term bind = $mod, A, togglespecialworkspace, audio bind = $mod, M, togglespecialworkspace, monitor bind = $mod, SLASH, togglespecialworkspace, music -bind = $mod SHIFT, A, togglespecialworkspace, effects # Window rules (using app-id/class matching, Hyprland 0.53+ syntax) # Terminal scratchpad @@ -307,11 +304,6 @@ windowrule = match:class ^(foot-network)$, float on windowrule = match:class ^(foot-network)$, size (monitor_w*0.6) (monitor_h*0.6) windowrule = match:class ^(foot-network)$, center on -# EasyEffects -windowrule = match:class ^(Easy Effects)$, float on -windowrule = match:class ^(Easy Effects)$, size (monitor_w*0.6) (monitor_h*0.6) -windowrule = match:class ^(Easy Effects)$, center on - # Calculator (not a scratchpad, just launches app) bind = $mod, X, exec, qalculate-gtk bind = $mod, C, exec, hyprpicker -a diff --git a/scripts/testing/archsetup-test.conf b/scripts/testing/archsetup-test.conf index d6a8d69..a7f1364 100644 --- a/scripts/testing/archsetup-test.conf +++ b/scripts/testing/archsetup-test.conf @@ -2,6 +2,9 @@ # Used by create-base-vm.sh for fully automated base VM creation # # Usage: archangel --config-file /root/archsetup-test.conf +# +# Note: User creation is handled by archsetup, not archangel. +# See archsetup-vm.conf for archsetup configuration. FILESYSTEM=btrfs HOSTNAME=archsetup-test diff --git a/scripts/testing/create-base-vm.sh b/scripts/testing/create-base-vm.sh index 7979bd2..6cecf99 100755 --- a/scripts/testing/create-base-vm.sh +++ b/scripts/testing/create-base-vm.sh @@ -132,6 +132,9 @@ else warn "NetworkManager not active" fi +# Note: User creation is handled by archsetup, not here. +# The clean-install snapshot captures the base system before archsetup runs. + # Power off for snapshot stop_qemu stop_timer "verify" -- cgit v1.2.3