From 7914b7ef51161f652de62b273c9872d50a9bf3f6 Mon Sep 17 00:00:00 2001 From: MDietermann Date: Tue, 14 Apr 2026 09:27:09 +0200 Subject: [PATCH] fix(installer): replace orphaned neofetch with fastfetch, surface stderr on Run failure - neofetch was removed from Arch's official repos; fastfetch is the maintained replacement. - ExecRunner.Run previously discarded stderr, so any 'sudo pacman' failure surfaced only as 'exit status 1'. Now the returned error includes the captured stderr (matching what Output already did). --- internal/config/defaults.yaml | 2 +- internal/platform/pacman.go | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/internal/config/defaults.yaml b/internal/config/defaults.yaml index e25e5ff..ff2bc1f 100644 --- a/internal/config/defaults.yaml +++ b/internal/config/defaults.yaml @@ -13,7 +13,7 @@ packages: - zip - tree - htop - - neofetch + - fastfetch - ripgrep - fd - bat diff --git a/internal/platform/pacman.go b/internal/platform/pacman.go index 027747a..d720120 100644 --- a/internal/platform/pacman.go +++ b/internal/platform/pacman.go @@ -14,9 +14,17 @@ type ExecRunner struct{} func (ExecRunner) Run(ctx context.Context, name string, args ...string) error { cmd := exec.CommandContext(ctx, name, args...) + var stderr bytes.Buffer cmd.Stdout = nil - cmd.Stderr = nil - return cmd.Run() + cmd.Stderr = &stderr + if err := cmd.Run(); err != nil { + msg := strings.TrimSpace(stderr.String()) + if msg == "" { + return fmt.Errorf("%s %s: %w", name, strings.Join(args, " "), err) + } + return fmt.Errorf("%s %s: %w: %s", name, strings.Join(args, " "), err, msg) + } + return nil } func (ExecRunner) Output(ctx context.Context, name string, args ...string) ([]byte, error) {