Commits
flake.nix: remove invalid profiles.user (not a real HM option);
reindent home-manager.users.jenc block per alejandra.
home/default.nix: remove programs.neovim block — nvim is owned by
modules/nvim.nix (home.packages + symlink activation hook). Two
declarations of the same seam causes confusion.
Mirrors home/linux.nix. Wired into darwinConfigurations.mac-jenc so
mac-jenc pulls both ./home (shared) and ./home/darwin.nix (Mac-only
user-level packages/env), matching the NixOS-box pattern that imports
./home + ./home/linux.nix.
System-wide macOS defaults (Finder/Dock/keyboard) still belong in
hosts/mac-jenc/default.nix under system.defaults — nix-darwin layer,
not Home Manager.
Add formatter.<system> attrs to flake.nix so 'nix fmt' works on
aarch64-darwin and x86_64-linux. Wrapper walks the flake root and
skips node_modules/.git/result symlinks.
Reformat every .nix file with alejandra for consistent style.
baseAliases was duplicated between bash.nix and zsh.nix with silent
drift (bash had py/pip/cc/da/dr/ngc, zsh had socket-wrapped npm trio,
reload pointed at different rc files). Lift the shared subset into
modules/aliases.nix and let each shell keep only its specific extras.
init.sh, configuration.nix, clean.sh, uninstall.sh, and etc/ files
predate the flake migration and are no longer referenced; setup.sh
and flake.nix now own bootstrap and system config. Renaming the
stale tree to nixos/ makes its non-flake status obvious and avoids
accidental use.
darwin-rebuild and nixos-rebuild write system paths and require
root; the table omitted the required sudo.
Replace !.sisyphus (un-ignores everything inside) with
.sisyphus/** so the directory entry is tracked while files
within stay ignored.
Previously aborted with a manual-install URL. Now pipes the
determinate.systems installer so a fresh host can bootstrap end-to-end.
Home Manager already owns user zsh config; nix-darwin's
programs.zsh.enable only writes /etc/zshrc fragments and is not needed.
WinClosed fires before the closing window leaves the tabpage, so the
#wins == 1 guard bailed early and neo-tree expanded full-width. Wrap the
check in vim.schedule so it runs after the window is gone.
BufWinEnter autocmd closed current_win unconditionally when term
buf entered window. After toggling opencode off then reopening,
file window was current -> closed -> E444 (last regular window).
Now: only close dupes actually showing term buf, skip if <=1
regular win remains.
Move zsh config (aliases, oh-my-zsh, update-opencode, initContent)
out of home/default.nix into its own module, mirroring bash.nix.
Home Manager's programs.zsh.enable unconditionally writes
.zshenv/.zprofile/.zshrc, and oh-my-zsh.enable pulls the package
in, so dropping explicit zsh/oh-my-zsh from home.packages is safe.
- Drop gcc from shared home/default.nix (was dragging apple-sdk +
cctools/clang into the Darwin closure, ~1 GiB) and move it to
home/linux.nix so all Linux hosts keep it. Remove now-redundant
gcc lines from the ubuntu/fedora overrides.
- modules/opencode.nix: seed ~/.opencode/ on Darwin (the path the
brew tap build actually reads) and ~/.config/opencode/ on Linux.
Previous seed wrote to ~/.config/opencode/ on Mac, which the
Homebrew build ignores.
- home/default.nix: add update-opencode zsh function that runs
'opencode upgrade' then force-reinstalls every plugin pinned in
the opencode config dir's package.json.
`vim.fs.watch` passes events as a table, not a string — the `==`
comparison was always false, silently breaking autoreload on file
changes. Use `vim.tbl_contains` instead.
Replace the 50ms defer_fn in <leader>oc with a BufEnter autocmd
(once = true) on the terminal buffer so select() fires only after
the window is fully focused, avoiding a race under load.
Normalise indentation on VeryLazy and OpencodeEvent autocmds that
were two levels deeper than their siblings.
neo-tree.nvim ignores width at the top level of opts — it must be
under window.width. The setting was silently falling through to the
default (40) instead of the intended 30.
Tailscale serve config survives reboot without any systemd unit.
The oneshot unit was hanging activation because serve commands
block in non-TTY context. Operator must be set once:
sudo tailscale set --operator=$USER
then tailscale serve --bg --https=... sets it permanently.
Installs syncthing, tailscale, ufw, fail2ban via apt, enables
tailscaled system service, then runs home-manager --flake .#pi-nas.
Both reference apt binaries (/usr/bin/). Syncthing unit includes
Requires=mnt-nas.mount so it waits for /mnt/nas to be ready.
syncthing uses services.syncthing with dataDir=/mnt/nas/syncthing
so config survives rebuilds. tailscale-serve is replicated as a
managed systemd user oneshot unit.
cowsay dragon with rainbow IPs (eth0, docker0, tailscale0) was
lost when programs.bash overwrote dotfiles. Now managed via
home.file with profileExtra sourcing so it survives rebuilds.
Shared home/default.nix already defines this activation block; host-level
duplicates caused option conflict on 'home-manager switch'.
Trim and reorganize instruction files — remove fluff, consolidate
troubleshooting, add missing architectural facts (Determinate/Nix
conflict, nvim out-of-store symlink pattern, validation targets,
socket wrapper aliases). Update git.nix status from Planned to Done.
Replace Nix-managed xdg.configFile entries with a home.activation step
that seeds config templates on first install. All opencode files
(tui.json, modes, skills, plugins) become runtime-editable -- no
rebuild needed for plugin/MCP/config changes.
The common/ tree serves as template source for new machines; git
tracks drift for reference.
Also fixes missing quotes around paths in npm install activation.
Edgy was causing layout glitches (whitespace under editor, TUI corruption
on resize, float repositioning). Without it:
- Neo-tree opens as a LazyVim-managed left split (winfixwidth via autocmd)
- OpenCode is a float anchored to right edge — immune to layout changes
- Terminal scroll on WinEnter/FocusGained moved to opencode.lua
- <leader>bd no longer calls edgy layout update
Shared home/default.nix already handles npm global installs (husky + socket). The Fedora host's copy was stale and caused a build conflict.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
wezterm isn't in default Fedora 44 repos and isn't worth the COPR hassle. podman handles containers; wezterm config module removed with it.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
- Fixed git-blame plugin display - updated filepath pattern and match groups
- Updated lazy-lock.json after sync
- Fixed nvim options.lua - resolved conflicts during git operations
- Improved plugin management - updated dependencies and configs
These changes result from recent git operations and workspace structure updates.
- Created modules/git.nix following the same pattern as other tools (tmux.nix, gh.nix)
- Consolidated git config into common/git/.gitconfig
- Removed redundant linux/git directory structure
- Updated home/default.nix imports and removed duplicate programs.git block
- Maintains all functionality including GPG SSH signing and worktree aliases
This aligns with the ongoing migration from stow-managed to Home Manager modules, making git config management more consistent with the rest of the dotfiles architecture.
The socket package's prepare script needs husky to run during git dependency
preparation. This fix ensures husky is installed globally before socket is
installed, avoiding the 'husky: command not found' error.
ponytail: install husky globally, fix at source instead of editing socket's code.
- Add husky installation before socket in home.activation.installNpmGlobals
- This ensures socket's prepare script has husky available when needed
- pin neo-tree width via FileType autocmd so it can't expand when center buffer is deleted
- scroll terminals to bottom on WinEnter/FocusGained to prevent black/empty appearance
- debounce WinClosed layout updates (50ms) to batch rapid window events
- change right panel from 40% width to fixed 80 columns for consistent sizing
- Add teach mode: Socratic mentor for developer learning
- Fix nvim: use home.activation instead of mkOutOfStoreSymlink
- Add oh-my-openagent plugin to opencode config
- Add troubleshooting notes to AGENTS.md
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
From lazysync: edgy.nvim added (ui.edgy extra now enabled),
greggh/claude-code.nvim removed (deduped), plus routine plugin bumps.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The Claude panel could shrink below its 0.4 share because claudecode's
provider="auto" sometimes fell back to a NATIVE terminal, which edgy's
right-edge filter can't match (it keys on snacks_win.position/relative),
so neo-tree + the center editor squeezed it. Force provider="snacks" and
add winfixwidth to both edges so the center can't steal panel columns.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
xdg.configFile."nvim".source copied the config into the read-only Nix
store, so LazyVim's :Lazy sync/update failed with "Permission denied"
writing lazy-lock.json. Use mkOutOfStoreSymlink to point ~/.config/nvim
at the live repo instead; also makes .lua edits live without a rebuild.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- edgy: disable resize animation (right terminal "flashing" during
LLM streaming) and re-pin sidebar widths on WinClosed so deleting the
center buffer no longer lets neo-tree grab the freed columns / squeeze
the right panel; scroll terminal panels back to bottom after.
- enable the ui.edgy LazyVim extra; set equalalways=false so closing a
split doesn't auto-equalize against edgy.
- claudecode: scroll the claude terminal to the bottom via
nvim_win_set_cursor instead of `normal! G`, which errored with
"Can't re-enter normal mode from terminal mode" when edgy's window
picker focused the terminal from terminal mode.
- keymaps: make <leader>bd delete the buffer but keep the window+layout.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Mirrors home/linux.nix. Wired into darwinConfigurations.mac-jenc so
mac-jenc pulls both ./home (shared) and ./home/darwin.nix (Mac-only
user-level packages/env), matching the NixOS-box pattern that imports
./home + ./home/linux.nix.
System-wide macOS defaults (Finder/Dock/keyboard) still belong in
hosts/mac-jenc/default.nix under system.defaults — nix-darwin layer,
not Home Manager.
Move zsh config (aliases, oh-my-zsh, update-opencode, initContent)
out of home/default.nix into its own module, mirroring bash.nix.
Home Manager's programs.zsh.enable unconditionally writes
.zshenv/.zprofile/.zshrc, and oh-my-zsh.enable pulls the package
in, so dropping explicit zsh/oh-my-zsh from home.packages is safe.
- Drop gcc from shared home/default.nix (was dragging apple-sdk +
cctools/clang into the Darwin closure, ~1 GiB) and move it to
home/linux.nix so all Linux hosts keep it. Remove now-redundant
gcc lines from the ubuntu/fedora overrides.
- modules/opencode.nix: seed ~/.opencode/ on Darwin (the path the
brew tap build actually reads) and ~/.config/opencode/ on Linux.
Previous seed wrote to ~/.config/opencode/ on Mac, which the
Homebrew build ignores.
- home/default.nix: add update-opencode zsh function that runs
'opencode upgrade' then force-reinstalls every plugin pinned in
the opencode config dir's package.json.
`vim.fs.watch` passes events as a table, not a string — the `==`
comparison was always false, silently breaking autoreload on file
changes. Use `vim.tbl_contains` instead.
Replace the 50ms defer_fn in <leader>oc with a BufEnter autocmd
(once = true) on the terminal buffer so select() fires only after
the window is fully focused, avoiding a race under load.
Normalise indentation on VeryLazy and OpencodeEvent autocmds that
were two levels deeper than their siblings.
Replace Nix-managed xdg.configFile entries with a home.activation step
that seeds config templates on first install. All opencode files
(tui.json, modes, skills, plugins) become runtime-editable -- no
rebuild needed for plugin/MCP/config changes.
The common/ tree serves as template source for new machines; git
tracks drift for reference.
Also fixes missing quotes around paths in npm install activation.
Edgy was causing layout glitches (whitespace under editor, TUI corruption
on resize, float repositioning). Without it:
- Neo-tree opens as a LazyVim-managed left split (winfixwidth via autocmd)
- OpenCode is a float anchored to right edge — immune to layout changes
- Terminal scroll on WinEnter/FocusGained moved to opencode.lua
- <leader>bd no longer calls edgy layout update
- Fixed git-blame plugin display - updated filepath pattern and match groups
- Updated lazy-lock.json after sync
- Fixed nvim options.lua - resolved conflicts during git operations
- Improved plugin management - updated dependencies and configs
These changes result from recent git operations and workspace structure updates.
- Created modules/git.nix following the same pattern as other tools (tmux.nix, gh.nix)
- Consolidated git config into common/git/.gitconfig
- Removed redundant linux/git directory structure
- Updated home/default.nix imports and removed duplicate programs.git block
- Maintains all functionality including GPG SSH signing and worktree aliases
This aligns with the ongoing migration from stow-managed to Home Manager modules, making git config management more consistent with the rest of the dotfiles architecture.
The socket package's prepare script needs husky to run during git dependency
preparation. This fix ensures husky is installed globally before socket is
installed, avoiding the 'husky: command not found' error.
ponytail: install husky globally, fix at source instead of editing socket's code.
- Add husky installation before socket in home.activation.installNpmGlobals
- This ensures socket's prepare script has husky available when needed
- pin neo-tree width via FileType autocmd so it can't expand when center buffer is deleted
- scroll terminals to bottom on WinEnter/FocusGained to prevent black/empty appearance
- debounce WinClosed layout updates (50ms) to batch rapid window events
- change right panel from 40% width to fixed 80 columns for consistent sizing
The Claude panel could shrink below its 0.4 share because claudecode's
provider="auto" sometimes fell back to a NATIVE terminal, which edgy's
right-edge filter can't match (it keys on snacks_win.position/relative),
so neo-tree + the center editor squeezed it. Force provider="snacks" and
add winfixwidth to both edges so the center can't steal panel columns.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
xdg.configFile."nvim".source copied the config into the read-only Nix
store, so LazyVim's :Lazy sync/update failed with "Permission denied"
writing lazy-lock.json. Use mkOutOfStoreSymlink to point ~/.config/nvim
at the live repo instead; also makes .lua edits live without a rebuild.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- edgy: disable resize animation (right terminal "flashing" during
LLM streaming) and re-pin sidebar widths on WinClosed so deleting the
center buffer no longer lets neo-tree grab the freed columns / squeeze
the right panel; scroll terminal panels back to bottom after.
- enable the ui.edgy LazyVim extra; set equalalways=false so closing a
split doesn't auto-equalize against edgy.
- claudecode: scroll the claude terminal to the bottom via
nvim_win_set_cursor instead of `normal! G`, which errored with
"Can't re-enter normal mode from terminal mode" when edgy's window
picker focused the terminal from terminal mode.
- keymaps: make <leader>bd delete the buffer but keep the window+layout.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>