- install_terminal_prereqs's apt branch was untested even though the
existing test already stubbed apt-get; added a dedicated test asserting
the exact apt-get update / apt-get install -y zsh git curl fzf calls with
no pacman on PATH.
- Added an end-to-end test (both components picked, Hyprland's prerequisite
missing) exercising the exact composition Task 2's refactor exists for:
Hyprland skips cleanly via check_arch failing, and TerminalLook (Kali
look) still runs to completion in the same main() invocation. Uses a
clean-room PATH (real coreutils/git/bash symlinked in, no-op stand-ins for
apt-get/sudo/zsh/chsh, pacman never added) so the assertion holds
regardless of whether the host running the tests actually has pacman.
Addresses findings 5 and 6 from the final whole-branch review.
- The chsh-to-zsh behavior is real, consequential shell-changing behavior
and doesn't belong in the "What it does NOT do" list; moved it into the
module's prose description and noted that chsh prompts for the account
password via PAM.
- Added a plain warning that ~/.zshrc is replaced wholesale (not merged) by
either look, and that any existing personal customizations end up in the
dotevo-backup directory rather than being preserved -- important ahead of
the upcoming live test on this machine.
Addresses findings 3 and 4 from the final whole-branch review.
- write_zshrc_kali now sets HISTFILE/HISTSIZE/SAVEHIST and share_history/
hist_ignore_dups so command history survives across sessions (previously
unset, so history was in-memory only despite shipping
zsh-history-substring-search and fzf history search).
- apply_terminal_look now guards install_terminal_prereqs and returns 0 with
a skip message on failure, matching apply_hyprland's existing pattern, so
an unrecognized package manager no longer aborts the whole script under
set -euo pipefail and blocks a Hyprland module that would otherwise
succeed.
Addresses findings 1 and 2 from the final whole-branch review.
README.md line 95 incorrectly claimed shell change ("chsh") only happens
"unless you confirm the interactive prompt." In reality, chsh_to_zsh()
unconditionally switches to zsh when invoked, with no separate whiptail
confirmation for this step. The only confirmation is at component and
look-picker level; once Terminal look is selected, the shell change
is automatic.
Rewrote the bullet to accurately reflect this: "Automatically changes
your login shell to zsh via chsh (if not already zsh) — once Terminal
look is selected and a prompt style is chosen, the shell change
happens automatically as part of applying the configuration."
Co-Authored-By: Claude Haiku 4.5 <[email protected]>
Add two new functions:
- detect_pkg_manager(): checks for pacman, apt-get, dnf, zypper in order
- install_terminal_prereqs(): installs zsh git curl fzf via detected manager
Both functions follow the expected interfaces: detect_pkg_manager echoes one of
the manager names or "unknown", and install_terminal_prereqs returns 1 with a
dotevo:-prefixed message on unrecognized managers.
Co-Authored-By: Claude Sonnet 5 <[email protected]>
Extends hyprevo into a broader personal-environment installer. This round:
rename to dotevo, add a component picker, and a terminal-look module
(Powerlevel10k repro / Kali fresh) that works on any distro, independent
of the Arch-only Hyprland-rice module. KDE-rice deferred to a follow-up
design round.
Co-Authored-By: Claude Sonnet 5 <[email protected]>
DMS's dock (showDock/dockAutoHide/dockUseOverlayLayer) defaults to off in
its own settings; nothing in the installer ever enabled it, so the panel
bar could come up fine with no dock visible at all. Added
configure_dms_dock(), which enables it via `dms ipc call settings set` when
DMS is reachable, and prints a clear manual fallback + skips quietly
(doesn't fail the install) if DMS isn't running yet -- e.g. a first-ever
install before the user has logged into Hyprland even once.
hyprland.conf's exec-once starts hyprland-session.target, but the installer
never created that systemd user unit or wired dms.service to it, so
Hyprland launched fine while DMS/quickshell (panel, dock, spotlight, all
keybinds routed through it) silently never started. Added
install_session_target(), which writes the unit file (same content already
working on the reference machine) and runs daemon-reload + add-wants.
Live test hit a real Arch gotcha: a package build referenced by a stale
local package database had already rotated off every mirror, 404ing on
install. Fix is pacman -Syu before the targeted install -- never a bare -Sy
without -u, which risks an unsupported partial upgrade. Also added
--noconfirm to both pacman calls now that confirm_summary() already gates
the whole run on an explicit yes.
BASH_SOURCE has zero elements when a script arrives as `bash -c "$(curl ...)"`
(no backing file at all) rather than a real path or /dev/fd process-
substitution handle. Under set -u this crashed immediately on the REPO_DIR
line, and the bottom sourcing guard's $BASH_SOURCE/$0 comparison would have
silently never run main() either way (bash -c sets $0 to "bash", which never
matches an empty BASH_SOURCE default).
Guarded the REPO_DIR line with a safe default, and replaced the sourcing
guard with the standard `return 0` idiom, which correctly distinguishes
sourced (bats tests) from directly-executed (file, bash -c, process
substitution) in every invocation style. Added a regression test that runs
the actual `bash -c "$(cat install.sh)"` command end-to-end against the real
public repo, not just sourced functions.
pacman -S was run unprivileged, failing with "you cannot perform this
operation unless you are root." Added sudo.
Bigger issue: install.sh assumed it was running from a full local git
checkout (reading packages.txt/hypr/hyprland.conf/local-bin/*.sh as sibling
files via $REPO_DIR). When curl-piped directly -- the whole point of this
installer -- $BASH_SOURCE resolves to a transient /dev/fd path with no
sibling files at all, so every read failed. Added ensure_repo_files(),
which detects that case and fetches the needed files from Gitea's raw URLs
into a temp dir first. Running from a real checkout (packages.txt already
present) is unaffected. Verified end-to-end via actual process substitution
against the real public repo, not just against local files.
v1 shipped a fixed set of apps (Konsole, Dolphin, etc.) alongside Hyprland
regardless of preference. v2 adds a Proxmox-helper-scripts-style whiptail
picker: single-choice radiolists for terminal/file-manager/mail/cloud-sync,
a checklist for independent toggles (Telegram/screen-capture/Bitwarden).
Picks get wired into a separate extras.conf so hyprland.conf stays clean.