Skip to content

Linux installer dry-run, Kitty selection, and Arch packages diverge #190

Description

@ztc0

Problem

Three Linux installer paths currently disagree with the behavior advertised by the CLI and documentation:

  1. --dry-run still executes installation work.
  2. Kitty is accepted by the CLI and documented for Linux, but is hidden from the Linux TUI and is not installed by the Linux backend.
  3. Arch shell dependencies include packages that are not available to pacman, aborting the installation.

Together, these make it difficult to preview or complete a supported Linux installation safely.

Reproduction

1. Dry-run executes real work

$ gentleman-dots --dry-run --non-interactive \
    --terminal=none --shell=fish --wm=none

installer/cmd/gentleman-installer/main.go sets GENTLEMAN_DRY_RUN=1, but the execution wrappers do not read it. The non-interactive installer continues through dependency installation, repository cloning, configuration writes, and shell changes.

--test is not a safe substitute: it redirects HOME, but package-manager, sudo, network, and current-working-directory operations still run.

2. Kitty is unavailable in the Linux TUI

  1. Start the interactive installer on Linux.
  2. Select Linux.
  3. Open the terminal selection screen.

The available choices are Alacritty, WezTerm, Ghostty, and None. Kitty is only returned for macOS in installer/internal/tui/model.go.

However:

  • --terminal=kitty is accepted by the CLI;
  • the learning screen lists Kitty on every platform;
  • the documentation lists Kitty as a Linux-capable choice;
  • the backend has a Kitty configuration branch.

On Linux, that backend does not install a missing Kitty binary and can log Kitty already installed even when it is absent.

3. Arch sends unavailable packages to pacman

Selecting Fish, Zsh, or Nushell on a clean Arch installation can send carapace to pacman; Zsh also sends zsh-theme-powerlevel10k. Those package names are not available from the official Arch repositories used by pacman, so the whole transaction exits with status 1.

This part overlaps the existing reports #174 and #176, the consolidated analysis in #174, and open PR #186. It is included here because it is part of the same Linux installer path and needs regression coverage alongside the mode/TUI fixes. The implementation should avoid duplicating or conflicting with #186.

Expected behavior

  • --dry-run performs no process, package-manager, network, filesystem, configuration, or shell mutations and prints the planned operations.
  • Kitty appears as a Linux TUI option when the installer supports configuring it.
  • On supported Linux distributions, a missing Kitty binary is installed through the platform package strategy, or the installer returns an accurate actionable precondition.
  • Arch package transactions contain only packages resolvable by the selected package manager; optional external dependencies use an explicit supported fallback.
  • Automated tests cover all three contracts.

Actual behavior

  • --dry-run only sets an environment variable and then executes the normal installation path.
  • Linux users cannot select Kitty in the TUI, despite CLI/backend/documentation support.
  • Arch shell installation can abort before later selected components run.

Environment and evidence

  • OS: Arch Linux x86_64
  • Installer: official Linux amd64 v2.12.2
  • Verified against current main installer structure
  • Prior workaround required preinstalling the unavailable Arch dependencies before retrying the installer

Relevant source areas:

  • installer/cmd/gentleman-installer/main.go
  • installer/internal/system/exec.go
  • installer/internal/tui/model.go
  • installer/internal/tui/installer.go
  • installer/internal/tui/non_interactive.go

Proposed validation

  • A marker-file command remains unexecuted under dry-run.
  • Filesystem helpers and direct installer writes leave no artifacts under dry-run.
  • Linux terminal option tests include Kitty.
  • Platform tests verify the correct Kitty installation command per supported Linux distribution.
  • Arch shell package tests verify that unresolved AUR-only names are never passed directly to pacman.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions