Skip to content

feat: improve package selection and setup reliability - #14

Merged
Firstp1ck merged 28 commits into
mainfrom
feat/package-selection-reliability
Sep 20, 2026
Merged

Firstp1ck merged 28 commits into
mainfrom
feat/package-selection-reliability

Conversation

@Firstp1ck

@Firstp1ck Firstp1ck commented Sep 20, 2026 •

Copy link
Copy Markdown
Owner

Summary

Replace separate package selectors and shell lists with one registry-backed application selection flow, then carry those choices through installation, generated configuration, and desktop actions. This branch also adds recoverable configuration changes, an interactive setup log, desktop startup fixes, and optional agent-assisted troubleshooting.

Changes

Application selection and setup UI

  • Define 17 application roles in packages.json, with required and optional groups, single or multiple selections, and explicit primary apps. Validate choices and deduplicate package plans across the Rust UI and shell installer.
  • Add a hierarchical application chooser with two-column descriptions, scrolling, and selection markers that remain visible without color. Show installation progress, elapsed time, and severity-highlighted output with mouse/keyboard scrolling, wrapping, and explicit follow controls.
  • Generate schema-2 roles.json metadata and route Hyprland, Fish, Waybar, and Pyprland actions through selected apps with preserved argument boundaries.
  • Support tmux, Zellij, and Herdr multiplexers; graphical file managers launched by Super+E; and optional multi-select TUI file managers launched in the selected terminal. Include role-aware notifications, bars, docks, launchers, and calendar controls.

Installer reliability

  • Add per-run logs, manifests, backups, locking, atomic managed-file writes, run discovery, and validated file rollback. Propagate required-step failures and suppress reboot prompts after failed setup.
  • Refresh sudo credentials during installation, harden nested sudo and Yay bootstrap handling, and validate makepkg configuration against the selected configuration root.
  • Correct monitor fallbacks, GTK file chooser and editor associations, login-shell verification, and SDDM setup ordering. Refresh repository-managed runtime helpers when rerunning setup against existing dotfiles.

Desktop and Waybar

  • Migrate active Hyprland configuration to modular Lua and update keybinding discovery. Prevent duplicate autostart processes, scope readiness markers to the current session, and bound startup checks to persistent components.
  • Improve wallpaper startup and active-output handling, cache the current wallpaper for wlogout, and use a desktop screenshot for Hyprlock. Replace the stock Calcurse integration with Merkuro.
  • Add Waybar audio, network, Bluetooth, power, temperature, brightness, and package-maintenance controls. Bundle a logged updater using Paru, then Yay if unavailable, or pacman with an explicit AUR-skipped notice. Keep package-manager confirmations enabled.
  • Share JSONC validation between Waybar startup and role updates while preserving comments and unrelated settings. Auto-detect DDC/CI buses, validate and clamp brightness values, and require opt-in for i2c_dev reloads.

Optional coding agents and troubleshooting

  • Add Pi, OpenCode, Claude Code, Codex CLI, and Cursor CLI selections with fixed installer endpoints, bounded execution, restricted environments, and executable verification. Authentication remains manual; optional installer failures do not stop desktop setup.
  • Offer click-only startup troubleshooting using a bounded diagnostic snapshot, private incident files, best-effort redaction, and selected-multiplexer or terminal dispatch. Filter launch environments again before agent execution and request each agent's read-only or planning mode.

Tests and documentation

  • Add Rust, shell, and Python regressions for role selection, runtime commands, rollback, failure handling, desktop controls, agent installation, and diagnostic privacy. Consolidate CI into Rust, shell, and registry checks, including Dash/Bash installer fixtures and clearer ShellCheck annotations and assertions.
  • Document selection, output controls, updates, agents, and troubleshooting. Include a bootable installer ISO plan and decision record; ISO implementation is not part of this PR.

Notes for reviewers

  • Rollback restores only recorded managed files, not installed packages, service state, Stow links, or whole directory trees. Changing application selections does not uninstall existing alternatives.
  • Herdr is the default multiplexer and Pi is selected by default in the optional agent group. Choose None to disable agent integration.
  • Generated multiplexer commands already include terminal launch. Exact stock bindings migrate automatically; custom bindings that prepend a terminal wrapper need adjustment.
  • Third-party installers are mutable, unpinned code running with user permissions, not sandboxed code. Clicking troubleshooting shares diagnostic evidence with the selected agent and provider; redaction is not a secrecy guarantee. Environment-only authentication needs separate configuration because ambient credentials are not forwarded.

How to test

Suggested checks, not rerun for this description update:

cargo fmt --check
cargo clippy --locked --all-targets -- -D warnings
cargo test --locked
tests/run.sh
tests/check_packages_json.sh
for interpreter in /bin/dash /bin/bash; do
  HSS_TEST_INSTALLER_SH="$interpreter" tests/run.sh tests/shell/agent_installers.sh
done
tests/verify_hypr_config.sh

Hyprland verification reports a skip when Hyprland is unavailable; this is not a release pass. Hosted CI, live package availability, and interactive or privileged desktop behavior are not verified by this description update.

- change: add Lua-based Hyprland modules and monitor settings
- change: update setup and wallpaper scripts for Lua configuration
- docs: update configuration guidance and file references
- test: adapt validation scripts to Lua-based paths
- fix: add reversed bold styling and selection markers to focused rows
- test: verify selected rows retain color-independent highlighting
- feat: add spinner, step count, percentage, and elapsed time to the TUI
- fix: seed and refresh sudo credentials for unattended setup
- test: cover progress helpers and password-backed sudo keepalive
- fix: propagate password-backed sudo into nested Bash commands and makepkg
- fix: reuse safe yay checkouts and isolate invalid build paths
- fix: suppress reboot prompts when setup fails
- test: cover nested sudo and yay bootstrap reliability scenarios
- fix: use fallback monitor configuration when explicit monitors are absent
- fix: configure GTK file chooser and editor MIME associations
- fix: stabilize installation progress tracking and terminal status markers
- test: add reliability coverage for monitor and filepicker defaults
- fix: use a screenshot instead of the dynamic wallpaper path
- test: validate the hyprlock screenshot background configuration
- feat: color timestamped warnings and errors in live logs
- refactor: centralize output severity detection
- test: cover severity detection and ANSI stripping
- feat: add audio, network, Bluetooth, power, VPN, temperature, update, and LM Studio controls
- fix: improve wallpaper startup and cache the active image for wlogout
- refactor: parse Hyprland Lua keybindings and prevent duplicate autostart launches
- build: add dependencies for desktop integrations and maintenance tools
- test: cover update actions, menu contracts, lifecycle, package counts, and startup locks
- docs: update README application and package descriptions
- chore: remove VPN, LM Studio, HyprWhspr, and Razer integrations
- chore: launch Waybar using the checked-in configuration directly
- docs: remove retired module dependencies from documentation and packages
- fix: start hyprpaper directly and delay wallpaper IPC initialization
- fix: preserve manual output scrolling and sync managed runtime scripts
- test: cover package renaming and autostart reconciliation
- change: replace Calcurse with Merkuro and update Hyprland launch rules
- change: target active wallpaper outputs and improve fallback handling
- change: verify login shells and configure SDDM before its theme
- test: add coverage for calendar integration and installer behavior
- feat: add registry-backed application roles and generated runtime metadata
- feat: add run manifests, logs, scoped rollback, and failure handling
- test: add shell integration, regression, and package registry checks
- ci: combine Rust, shell, and JSON validation jobs
- docs: document roles, run history, rollback, and testing
- fix: load makepkg configuration from the isolated etc root and reject missing or unreadable files
- test: cover layered configuration loading and missing configuration failures
- feat: support 13 role groups with membership and primary choices
- feat: generate schema 2 metadata and route runtime actions through roles
- test: cover installer validation, wrappers, JSONC updates, and regressions
- docs: document role configuration, environment variables, and runtime behavior
- feat: add hierarchical application selection with descriptions and scrolling
- feat: bundle logged Waybar updates with AUR helper fallback handling
- docs: document application selection and update workflows
- test: cover chooser rendering, updater behavior, and managed-file synchronization
- feat: add mouse and keyboard output scrolling, following, wrapping, and batching
- feat: arrange application choices into responsive name and description columns
- docs: document live output controls and updated chooser layout
- feat: add approved agent installers and role metadata
- feat: add click-only startup diagnostics with bounded dispatch
- fix: scope readiness markers and launcher/panel lifecycle checks
- test: cover installer safety, triage privacy, and role integration
- docs: document agent installation and startup troubleshooting
- feat: add configurable tmux, Zellij, and Herdr role selection
- feat: route shortcuts and startup triage through selected multiplexers
- test: expand role, runtime, and triage coverage
- docs: document multiplexer behavior and bootable ISO planning
Copilot AI lite review requested due to automatic review settings September 20, 2026 10:16

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

One or more issues must be addressed before approval.

Get a fresh assessment by requesting another Copilot review.

Review effort: Lite
Findings: 1 High severity · 3 Medium severity

Open (4)
What changed in this PR

This PR centralizes application-role selection and propagates it into generated Hyprland, Waybar, Fish, and Pyprland configuration while adding reliability controls, modular desktop integrations, and extensive regression coverage.

Changes:

  • Adds shared multi-select role/package metadata and role-aware launchers.
  • Adds run-scoped logging, atomic writes, manifests, rollback, and locking.
  • Expands Waybar, startup diagnostics, agent integration, documentation, and tests.
File Description
tests/​verify_hypr_config.sh Updated as part of this pull request.
tests/​stubs/​yay Updated as part of this pull request.
tests/​stubs/​xdg-user-dirs-update Updated as part of this pull request.
tests/​stubs/​systemctl Updated as part of this pull request.
tests/​stubs/​sudo Updated as part of this pull request.
tests/​stubs/​stow Updated as part of this pull request.
tests/​stubs/​reflector Updated as part of this pull request.
tests/​stubs/​pacman Updated as part of this pull request.
tests/​stubs/​notify-send Updated as part of this pull request.
tests/​stubs/​makepkg Updated as part of this pull request.
tests/​stubs/​getent Updated as part of this pull request.
tests/​stubs/​chsh Updated as part of this pull request.
tests/​shell/​waybar_updates.sh Updated as part of this pull request.
tests/​shell/​startup_triage.sh Updated as part of this pull request.
tests/​shell/​roles_testlib.sh Updated as part of this pull request.
tests/​shell/​roles_review_regressions.sh Updated as part of this pull request.
tests/​shell/​roles_package_normalization.sh Updated as part of this pull request.
tests/​shell/​roles_lua_argv.sh Updated as part of this pull request.
tests/​shell/​roles_interactive.sh Updated as part of this pull request.
tests/​shell/​roles_dbus_atomic.sh Updated as part of this pull request.
tests/​shell/​roles_controls.sh Updated as part of this pull request.
tests/​shell/​reliability_two_runs.sh Updated as part of this pull request.
tests/​shell/​reliability_rollback.sh Updated as part of this pull request.
tests/​shell/​reliability_latest_log.sh Updated as part of this pull request.
tests/​shell/​reliability_atomic.sh Updated as part of this pull request.
tests/​shell/​multiplexer_runtime.sh Updated as part of this pull request.
tests/​shell/​harness_regressions.sh Updated as part of this pull request.
tests/​shell/​agent_triage.sh Updated as part of this pull request.
tests/​shell/​agent_legacy_config.sh Updated as part of this pull request.
tests/​run.sh Updated as part of this pull request.
tests/​fixtures/​hypr/​assemble.sh Updated as part of this pull request.
scripts/​lib/​update-waybar-roles.py Updated as part of this pull request.
install.sh Updated as part of this pull request.
dotfiles/​.local/​share/​dbus-1/​services/​org.freedesktop.Notifications.service Updated as part of this pull request.
dotfiles/​.local/​scripts/​troubleshoot_with_agent.sh Updated as part of this pull request.
dotfiles/​.local/​scripts/​tests/​__init__.py Updated as part of this pull request.
dotfiles/​.config/​wlogout/​style.css Updated as part of this pull request.
dotfiles/​.config/​waybar/​update_menu.xml Updated as part of this pull request.
dotfiles/​.config/​waybar/​tests/​test_update_menu_contract.py Updated as part of this pull request.
dotfiles/​.config/​waybar/​tests/​test_system_update.sh Updated as part of this pull request.
dotfiles/​.config/​waybar/​tests/​test_launch_system_update.sh Updated as part of this pull request.
dotfiles/​.config/​waybar/​tests/​test_keybinds_menu_contract.py Updated as part of this pull request.
dotfiles/​.config/​waybar/​tests/​test_confirm_system_update.sh Updated as part of this pull request.
dotfiles/​.config/​waybar/​style.css Updated as part of this pull request.
dotfiles/​.config/​waybar/​scripts/​weather.sh Updated as part of this pull request.
dotfiles/​.config/​waybar/​scripts/​weather_tui.sh Updated as part of this pull request.
dotfiles/​.config/​waybar/​scripts/​waybar_launch.sh Updated as part of this pull request.
dotfiles/​.config/​waybar/​scripts/​updates_status.sh Updated as part of this pull request.
dotfiles/​.config/​waybar/​scripts/​update.sh Updated as part of this pull request.
dotfiles/​.config/​waybar/​scripts/​update_maintenance_action.sh Updated as part of this pull request.
dotfiles/​.config/​waybar/​scripts/​toggle_waybar.sh Updated as part of this pull request.
dotfiles/​.config/​waybar/​scripts/​temperature_status.sh Updated as part of this pull request.
dotfiles/​.config/​waybar/​scripts/​temperature_resolve_path.sh Updated as part of this pull request.
dotfiles/​.config/​waybar/​scripts/​system_update.sh Updated as part of this pull request.
dotfiles/​.config/​waybar/​scripts/​sensor.sh Updated as part of this pull request.
dotfiles/​.config/​waybar/​scripts/​power_action.sh Updated as part of this pull request.
dotfiles/​.config/​waybar/​scripts/​notification_status.sh Updated as part of this pull request.
dotfiles/​.config/​waybar/​scripts/​nmtui.sh Updated as part of this pull request.
dotfiles/​.config/​waybar/​scripts/​nmtui-connect.sh Updated as part of this pull request.
dotfiles/​.config/​waybar/​scripts/​launch_system_update.sh Updated as part of this pull request.
dotfiles/​.config/​waybar/​scripts/​launch_qt_gui.sh Updated as part of this pull request.
dotfiles/​.config/​waybar/​scripts/​launch_power_screen.sh Updated as part of this pull request.
dotfiles/​.config/​waybar/​scripts/​keyboardlayout_status.sh Updated as part of this pull request.
dotfiles/​.config/​waybar/​scripts/​float-active-window.sh Updated as part of this pull request.
dotfiles/​.config/​waybar/​scripts/​confirm_system_update.sh Updated as part of this pull request.
dotfiles/​.config/​waybar/​scripts/​clipboard.sh Updated as part of this pull request.
dotfiles/​.config/​waybar/​scripts/​brightness.sh Updated as part of this pull request.
dotfiles/​.config/​waybar/​scripts/​bluetooth_manager.sh Updated as part of this pull request.
dotfiles/​.config/​waybar/​scripts/​backlight.sh Updated as part of this pull request.
dotfiles/​.config/​waybar/​scripts/​audio_control.sh Updated as part of this pull request.
dotfiles/​.config/​waybar/​scripts/​alsamixer.sh Updated as part of this pull request.
dotfiles/​.config/​waybar/​keybinds_favorites.json Updated as part of this pull request.
dotfiles/​.config/​waybar/​backlight_menu.xml Updated as part of this pull request.
dotfiles/​.config/​pypr/​config.toml Updated as part of this pull request.
dotfiles/​.config/​nwg-panel/​dock Updated as part of this pull request.
dotfiles/​.config/​nwg-panel/​bar Updated as part of this pull request.
dotfiles/​.config/​ironbar/​config.toml Updated as part of this pull request.
dotfiles/​.config/​hypr/​sources_specific/​monitors.lua Updated as part of this pull request.
dotfiles/​.config/​hypr/​sources_specific/​change_wallpaper.lua Updated as part of this pull request.
dotfiles/​.config/​hypr/​sources_example/​windows_and_workspaces.lua Updated as part of this pull request.
dotfiles/​.config/​hypr/​sources_example/​windows_and_workspaces.conf Updated as part of this pull request.
dotfiles/​.config/​hypr/​sources_example/​look_and_feel.lua Updated as part of this pull request.
dotfiles/​.config/​hypr/​sources_example/​look_and_feel.conf Updated as part of this pull request.
dotfiles/​.config/​hypr/​sources_example/​keybindings.lua Updated as part of this pull request.
dotfiles/​.config/​hypr/​sources_example/​keybindings.conf Updated as part of this pull request.
dotfiles/​.config/​hypr/​sources_example/​input.lua Updated as part of this pull request.
dotfiles/​.config/​hypr/​sources_example/​environment_variables.lua Updated as part of this pull request.
dotfiles/​.config/​hypr/​sources_example/​environment_variables.conf Updated as part of this pull request.
dotfiles/​.config/​hypr/​sources_example/​autostart.lua Updated as part of this pull request.
dotfiles/​.config/​hypr/​sources_example/​autostart.conf Updated as part of this pull request.
dotfiles/​.config/​hypr/​sources_example/​app_variables.lua Updated as part of this pull request.
dotfiles/​.config/​hypr/​sources_example/​app_variables.conf Updated as part of this pull request.
dotfiles/​.config/​hypr/​scripts/​toggle_waybar.sh Updated as part of this pull request.
dotfiles/​.config/​hypr/​scripts/​toggle_floating.sh Updated as part of this pull request.
dotfiles/​.config/​hypr/​scripts/​term_exec.sh Updated as part of this pull request.
dotfiles/​.config/​hypr/​scripts/​startup_state.sh Updated as part of this pull request.
dotfiles/​.config/​hypr/​scripts/​Startup_check.sh Updated as part of this pull request.
dotfiles/​.config/​hypr/​scripts/​run_once.sh Updated as part of this pull request.
dotfiles/​.config/​hypr/​scripts/​role_window.sh Updated as part of this pull request.
dotfiles/​.config/​hypr/​scripts/​role_exec.sh Updated as part of this pull request.
dotfiles/​.config/​hypr/​scripts/​repos_wofi.sh Updated as part of this pull request.
dotfiles/​.config/​hypr/​scripts/​nwg_panel.sh Updated as part of this pull request.
dotfiles/​.config/​hypr/​scripts/​notification_control.sh Updated as part of this pull request.
dotfiles/​.config/​hypr/​scripts/​notes.sh Updated as part of this pull request.
dotfiles/​.config/​hypr/​scripts/​menu_exec.sh Updated as part of this pull request.
dotfiles/​.config/​hypr/​scripts/​float_calendar.sh Updated as part of this pull request.
dotfiles/​.config/​hypr/​scripts/​fix-dolphin.sh Updated as part of this pull request.
dotfiles/​.config/​hypr/​scripts/​check_setup_warnings.sh Updated as part of this pull request.
dotfiles/​.config/​hypr/​scripts/​app_log.sh Updated as part of this pull request.
dotfiles/​.config/​hypr/​hyprlock.conf Updated as part of this pull request.
dotfiles/​.config/​hypr/​hyprland.lua Updated as part of this pull request.
dotfiles/​.config/​fish/​functions/​vim.fish Updated as part of this pull request.
dotfiles/​.config/​fish/​conf.d/​01-env.fish Updated as part of this pull request.
dotfiles/​.config/​fastfetch/​package-count.sh Updated as part of this pull request.
dotfiles/​.config/​fastfetch/​config.jsonc Updated as part of this pull request.
Documents/​waybar-updates.md Updated as part of this pull request.
Documents/​startup-triage.md Updated as part of this pull request.
Documents/​setup-output.md Updated as part of this pull request.
Documents/​app-selections.md Updated as part of this pull request.
Documents/​agents.md Updated as part of this pull request.
CHANGELOG.md Updated as part of this pull request.
.github/​workflows/​rust.yml Updated as part of this pull request.
.github/​workflows/​ci.yml Updated as part of this pull request.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread dotfiles/.local/scripts/troubleshoot_with_agent.py Outdated
Comment thread dotfiles/.config/waybar/scripts/brightness.sh Outdated
Comment thread dotfiles/.config/waybar/scripts/brightness.sh Outdated
Comment thread dotfiles/.config/waybar/scripts/waybar_launch.sh Outdated
- chore: annotate sourced scripts and literal shell expressions
- refactor: clarify dynamic role exports and required-role variables
- test: make negative assertions and empty role selections explicit
- fix: improve brightness detection, validation, clamping, and reload safety
- fix: share JSONC validation across Waybar startup and role updates
- fix: restrict troubleshooting launches to approved environment variables
- test: add Waybar, environment filtering, and setup synchronization regressions
- chore: sync Waybar scripts and validator through setup
- ci: validate the added Waybar scripts
- docs: document the restricted launch environment
- test: make installer fixtures POSIX sh compatible and verify shell selection
- ci: run installer fixtures under Dash and Bash
- feat: add graphical and optional TUI file manager selections and launch integration
- docs: document file manager groups, shortcuts, commands, and configuration
- test: cover selection validation, package handling, and role launching
- test: add source annotations and improve shell test stubs
- test: use explicit numeric assertions and empty environment values
@Firstp1ck Firstp1ck self-assigned this Sep 20, 2026
@Firstp1ck Firstp1ck added the enhancement New feature or request label Sep 20, 2026
- feat: configure locale settings for all selected shells
- fix: parse generic Lua bindings and numbered workspace loops
- test: add shell language and Waybar parser coverage
- docs: document shell-wide language selection and override precedence
@Firstp1ck
Firstp1ck merged commit 65f2f44 into main Sep 20, 2026
10 checks passed
@Firstp1ck
Firstp1ck deleted the feat/package-selection-reliability branch September 20, 2026 13:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants