When running via env.lat, push the cursor to the bottom of the screen
before print_block sets up the TUI, so we don't overwrite env.lat output.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Extract tide configuration into a reusable fish function (tide-reset)
and call it from the chezmoi onchange script. Also revert treesitter
config to the stable API (nvim-treesitter.configs).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Restore the dotfiles script to the state before the fold/exec
experiments that broke TUI formatting and Ctrl-C handling.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The extra step counting and summary pre-fill was causing scroll region
calculation issues. Keep ENVLAT only for TTY detection bypass.
env.lat now uses exec and quiet flags instead of piping.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
env.lat now splits chezmoi init (piped through pad) from chezmoi
apply (runs directly on terminal). The dotfiles script gets direct
terminal access so its TUI formatting works correctly.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Only add the 2 bootstrap steps (prerequisites, chezmoi install) to
the summary block when running via env.lat. Direct chezmoi apply
keeps original step counts and starts from step 1.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add the two env.lat steps (Installing prerequisites, Installing
dotfiles via chezmoi) as pre-completed entries in the bottom summary.
STEPS counts increased by 2, STEP starts at 3.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When running via env.lat, stdout is piped through pad() but a real
terminal is behind it. The ENVLAT=1 env var tells the dotfiles script
to use interactive formatting despite the pipe.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
env.lat pads chezmoi download/clone output in gray. When the dotfiles
script starts, it emits ##ENVLAT_END## which tells env.lat's pad() to
switch to pass-through, letting the script use its own formatting.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The banner with "Press Enter to continue" now shows early in env.lat,
right after installing prerequisites and terminfo but before cloning
chezmoi. Removes unused ASSUME_YES flag from the chezmoi script.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Extract repeated TERM=dumb/timeout/ANSI-stripping/pad boilerplate
into a reusable function. Each call now just specifies the wait time
and the nvim command to run.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Pipe tic stderr through pad so ghostty terminfo warning is formatted
- Strip all ANSI escapes (not just colors) and carriage returns from
nvim output so every line goes through pad correctly
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
BSD sed doesn't support \x1b hex escapes. Using $(printf '\033') to
generate a literal ESC character that BSD sed can match.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
BSD sed doesn't support \x1b hex escapes, so the previous approach
didn't actually strip color codes on OpenBSD.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Strip ANSI escape codes from nvim headless output via sed so
non-interactive mode shows clean text instead of raw color codes
- Change mason.nvim build hook from ":MasonUpdate" string to pcall()
function to prevent E492 error on first install when Mason isn't
loaded yet
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add -v flag to pkg_add calls for verbose download/install progress
- Wrap Mason commands in pcall() to handle plugin not yet loaded
- Increase nvim headless timeout to 120s (ARM64 is slower)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Rust compilation of pydantic-core/jiter takes 20+ minutes on ARM64
and the small root partition can't handle it. shell-gpt is not
essential for the OpenBSD test environment.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Rust compilation of jiter/pydantic-core takes 20+ minutes on ARM64.
Without verbose output the install appears to hang.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Use fish%main branch selector to install fish 4.x (avoids 3.x/4.x ambiguity)
- Add rust package so jiter/pydantic-core can compile from source
- Redirect pipx/cargo/pip temp dirs to /tmp on OpenBSD (root partition too small)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove atuin (not in 7.5), tmux (in base), gcc (unnecessary).
Use -- suffix to select default flavor for ambiguous packages:
unzip, nnn, mtr.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
On OpenBSD the doas binary exists but /etc/doas.conf may not, causing
'doas is not enabled' errors. Now checks: root → no sudo needed,
doas + config exists → use doas, sudo available → use sudo.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace hardcoded kitty TERM hack with a generic check: if the current
TERM's terminfo isn't installed yet, fall back to xterm-256color. The
proper terminfo gets installed later in the script. Fixes tput errors
when SSHing from Ghostty/kitty into fresh machines.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Uses pkg_add for package management with doas (default on OpenBSD).
Packages available natively: fish, neovim, atuin, fd, ripgrep, bat,
fzf, htop, jq, nnn, tmux, mc, ngrep, mtr, gcc, direnv, py3-pipx.
Not available: lazygit, nethogs, jump, skim, dust.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Headless nvim plugin/LSP install doesn't work well without a proper
terminal. Auto-skip it alongside non-interactive TUI detection.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
chezmoi run_onchange scripts don't receive CLI arguments, so the
--non-interactive flag only works when running the script directly.
Now also checks if stdin/stdout are real terminals to auto-detect
non-interactive contexts like Vagrant provisioning.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The fancy cursor-positioning TUI (get_line, print_block, tput) fails in
non-interactive contexts like Vagrant provisioning where there's no real
terminal. Now when --non-interactive is passed, uses simple echo-based
output instead.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The acsc capability contains literal {{||}} which chezmoi's Go template
engine tries to parse. Escape with {{ "{{" }} and {{ "}}" }} syntax.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Embeds the xterm-ghostty terminfo definition directly in the installer
and compiles it via tic when not already present. On Arch, uses the
ghostty-terminfo package from official repos instead.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace removed require('nvim-treesitter.configs').setup with new
require('nvim-treesitter').setup() + .install() API
- Rename tide configure script so it sorts after the main installer
(configure_tide → z_configure_tide), fixing fresh installs
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Detect doas/sudo at startup and use $SUDO variable for all
privilege escalation commands. Prefers doas when available.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
--transient was removed from tide configure in v7, now controlled
via tide_prompt_transient_enabled universal variable.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Extract tide prompt configuration from heavy installer into its own
lightweight run_onchange script keyed to fish_plugins hash
- Remove tide_context_always_display (only show user@host in SSH)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Kitty doesn't set TERM_PROGRAM, check TERM=xterm-kitty instead.
Also use modern `kitten ssh` command.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Use antonme/tide fork (from plttn/tide v7) which includes fix for
bold leaking from home directory pwd rendering
- Replace fragile index-based tide_right_prompt_items removal with
explicit name-based filtering of node, gcloud, and kubectl
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Set ZSH_THEME="" since powerlevel10k overrides it anyway
- Guard powerlevel10k, brew plugins, and atuin with existence checks
- Cache brew --prefix to avoid duplicate subprocess calls
- Strip ~80 lines of oh-my-zsh default boilerplate comments
- Replace hardcoded /Users/anton/ with $HOME in LM Studio PATH
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace deprecated vim.loop with vim.uv (compat shim for older nvim)
- Fix lazy.nvim spec: run -> build for TSUpdate
- Remove pinned tags for telescope and treesitter
- Replace nvim-osc52 plugin with native vim.g.clipboard OSC 52
- Replace vim.cmd autocmds with nvim_create_augroup/nvim_create_autocmd
- Fix vim.wo -> vim.opt for number and signcolumn (apply to all windows)
- Remove duplicate toggleterm setup call
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>