Commit Graph

326 Commits

Author SHA1 Message Date
Anton Volnuhin
ce547fe18d skip atuin init when encryption key is missing or empty
Prevents panic on fresh installs where atuin has no key yet.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 18:46:16 +03:00
Anton Volnuhin
3a429fa4b7 upgrade fish shell repos from 3.x to 4.x for Ubuntu and Debian
Fish 4.x is needed for puffer-fish plugin compatibility
(commandline --search-field).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 18:41:39 +03:00
Anton Volnuhin
948d862bb6 scroll past env.lat output before starting TUI
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>
2026-03-04 18:23:52 +03:00
Anton Volnuhin
95c88c3ce1 add tide-reset function, fix treesitter config for stable nvim
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>
2026-03-04 18:13:21 +03:00
Anton Volnuhin
dfdd5b7dae fix Tide context in OrbStack: set SSH_TTY when SSH_CONNECTION is present
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 23:39:59 +03:00
Anton Volnuhin
07a50ab0a3 add .gitignore to exclude nvimlog and pycache from repo
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 23:30:32 +03:00
Anton Volnuhin
1181ef68ad revert to last working env.lat integration
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>
2026-03-03 23:25:30 +03:00
Anton Volnuhin
34fbf49eca simplify: remove env.lat step tracking from dotfiles script
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>
2026-03-03 23:22:20 +03:00
Anton Volnuhin
411bb8604b remove ENVLAT_END sentinel, no longer needed
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>
2026-03-03 23:16:44 +03:00
Anton Volnuhin
7509fa4440 gate env.lat summary steps on ENVLAT env var
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>
2026-03-03 23:08:36 +03:00
Anton Volnuhin
4f49ec9f80 include env.lat bootstrap steps in summary block
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>
2026-03-03 23:07:35 +03:00
Anton Volnuhin
2e30824131 respect ENVLAT env var for TTY detection through pipe
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>
2026-03-03 21:18:09 +03:00
Anton Volnuhin
fa3bb7b780 add env.lat sentinel to hand off formatting from bootstrap to chezmoi
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>
2026-03-03 21:14:56 +03:00
Anton Volnuhin
e54f9d6dfb move welcome banner from chezmoi script to env.lat bootstrap
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>
2026-03-03 20:50:28 +03:00
Anton Volnuhin
63c58c96be refactor nvim bootstrap into nvim_run helper function
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>
2026-03-03 20:39:48 +03:00
Anton Volnuhin
857aa4ff2e fix tic warning output and nvim padding issues
- 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>
2026-03-03 20:25:13 +03:00
Anton Volnuhin
fb5964d64b fix ANSI stripping: use printf literal ESC for BSD sed compatibility
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>
2026-03-03 20:10:25 +03:00
Anton Volnuhin
bab6e3d97a fix nvim headless output: use TERM=dumb instead of sed ANSI stripping
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>
2026-03-03 19:58:51 +03:00
Anton Volnuhin
43cc9ba1bd fix neovim headless output: strip ANSI colors, fix MasonUpdate error
- 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>
2026-03-03 19:33:16 +03:00
Anton Volnuhin
07d0caa733 improve OpenBSD installer output and fix neovim headless errors
- 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>
2026-03-03 18:45:02 +03:00
Anton Volnuhin
d59f8f3e1b skip shell-gpt on OpenBSD, remove rust package
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>
2026-03-03 18:25:41 +03:00
Anton Volnuhin
bdda5794c1 show verbose output for shell-gpt install on OpenBSD
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>
2026-03-03 18:09:38 +03:00
Anton Volnuhin
d85bf1b8fe fix OpenBSD installer: disambiguate fish, add Rust for shell-gpt
- 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>
2026-03-03 17:52:38 +03:00
Anton Volnuhin
63346456dc add gcc back to OpenBSD package list
Use gcc%11 to select GCC 11 and avoid ambiguity between versions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 12:28:01 +03:00
Anton Volnuhin
08c1ccef32 fix OpenBSD package list: disambiguate flavors, remove unavailable
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>
2026-03-03 03:07:01 +03:00
Anton Volnuhin
b957dc3c90 fix $SUDO detection: skip when root, check doas.conf exists
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>
2026-03-03 02:58:09 +03:00
Anton Volnuhin
9af745427e fall back to xterm-256color when terminfo is missing
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>
2026-03-03 02:39:31 +03:00
Anton Volnuhin
748de2400d add OpenBSD support to installer
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>
2026-03-03 02:37:01 +03:00
Anton Volnuhin
5c032ce1b9 skip neovim bootstrap in non-interactive mode
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>
2026-03-03 02:23:50 +03:00
Anton Volnuhin
d6d47411e8 rename nixpkgs.du-dust to nixpkgs.dust
The du-dust package was renamed to dust in nixpkgs and the old name
now throws an error.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 02:15:08 +03:00
Anton Volnuhin
a7f938591b auto-detect non-interactive mode when no terminal is present
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>
2026-03-03 01:48:07 +03:00
Anton Volnuhin
3e53d99ad2 fix non-interactive mode: skip TUI and use simple output
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>
2026-03-03 01:42:45 +03:00
Anton Volnuhin
5104a5313b fix chezmoi template escaping in embedded ghostty terminfo
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>
2026-03-03 01:35:48 +03:00
Anton Volnuhin
e498f52252 add ghostty terminfo installation to all supported platforms
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>
2026-03-03 01:32:40 +03:00
Anton Volnuhin
80bb0e07cf migrate treesitter to new API, fix tide script ordering
- 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>
2026-03-03 00:46:43 +03:00
Anton Volnuhin
3686b429f2 add doas support for FreeBSD, use $SUDO throughout installer
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>
2026-03-03 00:39:52 +03:00
Anton Volnuhin
1c7bbf7f71 fix tide v7 configure: replace --transient flag with fish variable
--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>
2026-03-02 23:06:46 +03:00
Anton Volnuhin
dfafc9bd9b split tide config into separate chezmoi script, fix context display
- 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>
2026-03-02 23:03:20 +03:00
Anton Volnuhin
7045d9127a fix kitty detection in ssh wrapper function
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>
2026-03-02 22:56:02 +03:00
Anton Volnuhin
a16ec8a962 nova things 2026-03-02 22:17:26 +03:00
Anton Volnuhin
0fed059f7f switch to forked tide prompt, fix right prompt item removal
- 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>
2026-03-02 22:00:42 +03:00
Anton Volnuhin
1a2dfc753d migrate lspconfig to native vim.lsp.config API for nvim 0.11+
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 21:22:15 +03:00
Anton Volnuhin
cb3df7c03c ensure true color support in zsh for Ghostty and other capable terminals
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 21:08:22 +03:00
Anton Volnuhin
00791e39be simplify zshrc: guard dependencies, strip boilerplate, fix paths
- 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>
2026-03-02 21:06:02 +03:00
Anton Volnuhin
8f39a3e419 template symlinks for portability, remove karabiner debug rule
- Template 1Password agent.sock symlink with chezmoi.homeDir
- Template kitty theme.conf symlink with chezmoi.homeDir
- Remove volumer experiment rule (volume_up mapped to 'a')
- Remove machine-specific USB location_id from volumer device

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 19:25:40 +03:00
Anton Volnuhin
8dfb94ee94 modernize neovim config for 0.10+
- 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>
2026-03-02 19:19:02 +03:00
Anton Volnuhin
44ddaefee5 restructure repo, fix fish config, remove vendored repos
Phase 4 (fish config):
- Fix ip function: replace load-time `which` with `command ip` wrapper
- Fix 1Password socket: use -S (socket test) instead of -f, export with -gx
- Remove deprecated fish plugins: github-copilot-cli, pisces

Phase 5 (repo structure):
- Move tpm and kitty-themes to .chezmoiexternal.toml (git-repo externals)
- Delete unused tmux-mighty-scroll (not referenced in tmux.conf)
- Expand .chezmoiignore: karabiner macOS-only, skip auto-backups/__pycache__
- Remove orphans: duplicate xterm-kitty, empty ssh.conf, karabiner backups
- Remove kitty.fish from tracking (auto-generated by kitty)

Phase 6 (terminal config):
- Comment out debug print in kitty tab_bar.py

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 19:11:10 +03:00
Anton Volnuhin
dfb97eb1d0 sync live config changes into chezmoi source
Re-add live edits:
- fish: gpt-5.2 model, llm.py, rewritten s/icat with ghostty support,
  new ils function, bass plugin, removed copilot-cli plugin
- karabiner: ghostty/moonlight/rdp apps, new caps rules, opt-W shortcut
- kitty: cursor_trail, font_size 14.5
- nvim: removed auto-session-nvim-tree, auto-session config update
- wezterm: scrollback 1M, border_top 2cell
- tmux-nova: local nerdfonts rendering patches
- zshrc: track file, includes LM Studio PATH

Also fix: chezmoi template error on macOS (osRelease.id without linux guard)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-02 18:40:51 +03:00
Anton Volnuhin
f03b8e90b2 merge live config.fish changes, fix chezmoi template on macOS
- pull live local changes: gpt-5.2 model, llm.py, rewritten s/icat/ils
  functions with ghostty support, antigravity path
- re-apply our improvements on top: fish_add_path, guards, hardcoded
  path fixes, micromamba removal
- fix osRelease.id template error on macOS (wrap ncurses block in linux check)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-02 18:38:51 +03:00
Anton Volnuhin
ac46863b48 harden install script and fix fish config portability
Install script:
- fix package availability (skim/fedora, fd-find/debian, direnv+goku/macos)
- add CLI flags for non-interactive mode (--skip-timezone, --skip-neovim-bootstrap, etc.)
- template STEPS count per OS for correct TUI layout
- add brew shellenv for fresh Apple Silicon, timeout portability
- pam_ssh_agent_auth availability check with warning for Fedora 42+
- fix fisher detection, authorized_keys whole-line dedup

Fish config:
- replace set -gx PATH with idempotent fish_add_path
- guard direnv/cargo sourcing for missing tools
- fix hardcoded /home/anton/ and /Users/anton/ paths
- remove unused micromamba/conda setup

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-02 18:35:11 +03:00