32 Commits
Author SHA1 Message Date
edemilov 8a6f0fe413 test: cover install_terminal_prereqs apt branch and Hyprland-skip/TerminalLook-completes composition
- 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.
2026-08-30 17:46:56 +03:00
edemilov cc9282dfd4 docs: fix Terminal-look README defect, warn about wholesale .zshrc replacement
- 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.
2026-08-30 17:46:51 +03:00
edemilov 6183c7859b fix: persist zsh history on Kali look, skip TerminalLook module cleanly on missing prereqs
- 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.
2026-08-30 17:46:47 +03:00
edemilovandClaude Haiku 4.5 2c5fe486fe docs: fix Terminal look README — clarify automatic shell change
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]>
2026-08-30 17:32:53 +03:00
edemilov efd3a0e754 docs: document terminal-look module in README 2026-08-30 17:30:18 +03:00
edemilov 5a0629468b feat: wire terminal-look module into main(), add chsh, extend ensure_repo_files 2026-08-30 17:25:49 +03:00
edemilov 73edf11a23 feat: add Kali terminal-look module 2026-08-30 17:19:21 +03:00
edemilov f6b2d929f2 feat: add Powerlevel10k terminal-look module 2026-08-30 17:15:43 +03:00
edemilov 56016bda3b feat: add clone_or_update_repo helper for terminal-look plugin repos 2026-08-30 17:12:04 +03:00
edemilovandClaude Sonnet 5 5693fd1680 feat: add terminal-look picker (Powerlevel10k / Kali)
Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-30 17:09:13 +03:00
edemilovandClaude Sonnet 5 153e64d785 feat: detect package manager and install terminal-look prerequisites
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]>
2026-08-30 17:06:03 +03:00
edemilov 3a795b290b feat: add component picker, split apply() into apply_hyprland() + apply_terminal_look() stub 2026-08-30 16:58:48 +03:00
edemilovandClaude Sonnet 5 540046d3ed rename: hyprevo -> dotevo
Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-30 16:54:38 +03:00
edemilov 715f52192d chore: ignore .worktrees/ for isolated plan execution 2026-08-30 16:52:45 +03:00
edemilovandClaude Sonnet 5 eb1a79352f Add implementation plan for dotevo rename + terminal-look module
9 TDD tasks: rename hyprevo->dotevo, component picker, package-manager
detection, terminal-look picker, shared clone helper, Powerlevel10k
module, Kali module, main() wiring + chsh, README + regression pass.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-30 16:50:57 +03:00
edemilovandClaude Sonnet 5 0dcd754e1e spec: dotevo rename + terminal-look module design
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]>
2026-08-30 16:42:57 +03:00
edemilov 75d031e222 Enable DMS dock via IPC -- it defaults off and was never turned on
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.
2026-08-29 16:36:47 +03:00
edemilov 6c6258af9e Wire dms.service to hyprland-session.target -- DMS never actually launched
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.
2026-08-29 16:25:28 +03:00
edemilov 506eacb03e Sync+upgrade before installing to avoid stale-package-database 404s
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.
2026-08-29 15:46:08 +03:00
edemilov e6b03153df Fix unbound BASH_SOURCE under bash -c invocation, the actual documented run command
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.
2026-08-29 15:19:23 +03:00
edemilov 478450b209 Fix two real bugs found in live testing: missing sudo, and curl-pipe mode
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.
2026-08-29 15:14:08 +03:00
edemilov d3b4dde12f Use portable command substitution instead of bash-only process substitution 2026-08-29 15:08:51 +03:00
edemilov a754450cd7 Fix branch reference: repo uses master, not main 2026-08-29 15:07:19 +03:00
edemilov 6d54238170 Write full README with keybind cheat-sheet 2026-08-29 14:39:08 +03:00
edemilov 2c50faf02b Wire up apply(): backup, install, config write, syncthing enable, reload 2026-08-29 14:38:50 +03:00
edemilov 628bc0a5d4 Add extras.conf builder and hyprland.conf terminal/filemanager rendering 2026-08-29 14:37:26 +03:00
edemilov 9a04b62e11 Add whiptail picker screens with non-interactive test override 2026-08-29 14:36:48 +03:00
edemilov 65b132c4a3 Add slot/toggle package and binary lookup functions 2026-08-29 14:36:08 +03:00
edemilov 617ec8cca9 Scaffold hyprevo repo: core config, capture scripts, install.sh skeleton 2026-08-29 14:35:24 +03:00
edemilov 85a2942740 Add implementation plan for the app-picker installer 2026-08-29 14:19:08 +03:00
edemilov 6ea5390d61 Revise hyprevo design: interactive app picker replaces fixed KDE-tool bundle
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.
2026-08-29 14:11:56 +03:00
edemilov 17d14f8d83 Add design spec for hyprevo Hyprland+DMS rice installer 2026-08-28 16:10:28 +03:00