diff --git a/CHANGELOG.md b/CHANGELOG.md index b945893..90d9f4a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,3 +6,22 @@ - Generalized private paths and navigation defaults. - Removed custom font binary and private brand assets. - Added MIT license, security policy, third-party notices, release checklist, and OSS audit script. + +## 0.1.1 - 2026-07-04 + +### Breaking + +- Renamed `pcsoft-helpers.zsh` → `pc-helpers.zsh` (generic name for broader reuse). + +### Added + +- `scripts/test-install.sh` — automated installer tests (copy, symlink, stale-opposite scenarios). +- `scripts/check-agent-state.sh` — agent-state validator for release checklist. +- `.oss-audit-denylist.local` — untracked personal denylist for OSS audit (one regex per line). +- `OSS_AUDIT_FORBIDDEN_REGEX` CI variable support — configure repo-level denylist without committing. + +### Changed + +- OSS audit script — externalized forbidden identifiers to env var + local denylist; no longer hardcodes private terms. +- CI — added installer integration tests step; passes `OSS_AUDIT_FORBIDDEN_REGEX` from repo vars. +- `.gitignore` — added `.oss-audit-denylist.local`. diff --git a/CLAUDE.md b/CLAUDE.md index f9dbc03..9a33567 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -9,7 +9,7 @@ Dotfiles para terminal: configuración de Ghostty + Zsh + Starship. El instalado ## Instalación y testing ```bash -# Instalar dotfiles (crea symlinks + instala dependencias via Homebrew) +# Instalar dotfiles (crea symlinks + instala dependencias) ./install.sh # Medir load time del profile zsh @@ -17,6 +17,9 @@ time zsh -i -c exit # Verificar que los symlinks están correctos ls -la ~/.zshrc ~/.config/starship.toml ~/.config/ghostty/config + +# Validar sintaxis sin instalar +bash install.sh --check ``` No hay tests automatizados. La validación es manual: recargar la shell con `source ~/.zshrc` o `reload` y verificar que los comandos funcionen. @@ -28,22 +31,47 @@ dotfiles/ ├── zsh/ │ ├── zshrc # Profile principal → symlink a ~/.zshrc │ └── scripts/ # Scripts sourced desde zshrc -│ ├── claude-helpers.zsh # cc, ccx, ccd, ccclip -│ ├── git-helpers.zsh # git-workdev, git-personaldev, git-whoami, clone-* -│ ├── pc-helpers.zsh # is-pc-forbidden, is-pc-editable -│ ├── screenshots.zsh # ss, last, ssd, imgclip -│ └── herdr-helpers.zsh # ta, tn, tk, tl, tdev -├── starship/starship.toml # Prompt Gruvbox Dark → ~/.config/starship.toml -├── ghostty/config # Terminal → ~/.config/ghostty/config +│ ├── agent-state.sh # Local CLI para cortex.agent_state.v1 +│ ├── claude-helpers.zsh # cc, ccb, ccx, ccd, ccclip +│ ├── git-helpers.zsh # git-workdev, git-personaldev, git-whoami, clone-* +│ ├── herdr-helpers.zsh # hhere, hfocus, hside, hscratch, hremote, hname, whereami +│ ├── pc-helpers.zsh # is-pc-forbidden, is-pc-editable +│ ├── screenshots.zsh # ss, last, ssd, imgclip +│ ├── ssh-helpers.zsh # sshx, moshx helpers +│ ├── worktree-helpers.zsh # wtadd, wtlist, wtremove +│ ├── memsave-nudge.sh # Hook UserPromptSubmit para recordar mem_save +│ └── postcompact-hook.sh # Hook PostCompact con orden explícito +├── starship/starship.toml # Prompt → ~/.config/starship.toml +├── ghostty/ +│ ├── config # Terminal → ~/.config/ghostty/config +│ ├── muxy.conf # Muxy integration config +│ └── shaders/ # 4 cursor shaders (glsl) ├── herdr/config.toml # Multiplexor → ~/.config/herdr/config.toml +├── claude/ +│ ├── statusline.sh # Statusline para Claude Code +│ └── themes/ # Temas Claude Code (cortex.json, cortex-green.json) +├── opencode/ +│ ├── tui.json # TUI config → ~/.config/opencode/tui.json +│ └── themes/ # Temas OpenCode +├── lazygit/config.yml # LazyGit → ~/.config/lazygit/config.yml ├── local/ │ └── env.zsh.example # Template para ~/.config/cortex-dots/local/env.zsh +├── fonts/ +│ └── FiraCodeNerdFontMonoBeard-Reg.ttf # Terminal font +├── scripts/ +│ ├── oss-audit.sh # OSS safety audit +│ ├── test-install.sh # Installation tests +│ └── check-agent-state.sh # Agent state validator +├── bun/bunfig.toml # Bun defaults +├── npm/npmrc # NPM defaults +├── pnpm/rc # PNPM defaults +├── uv/uv.toml # UV defaults └── install.sh # Instalador ``` -**Flujo de carga del zshrc:** Las secciones están separadas por `#region`/`#endregion`. El orden importa: Brew → PATH → Zsh options → Editor → Env vars → Aliases → Source scripts → Local overrides → Starship → Welcome. +**Flujo de carga del zshrc:** Las secciones están separadas por `#region`/`#endregion`. El orden importa: Brew → PATH → Zsh options → Editor → Env vars → Aliases → Source scripts → Local overrides → Starship → Welcome. Scripts en `zsh/scripts/` que son hooks de Claude Code (memsave-nudge.sh, postcompact-hook.sh) no se sourced desde zshrc, se usan directamente como hooks en la config de Claude Code. -**`~/.config/cortex-dots/local/env.zsh`** contiene paths personales, tokens y overrides de variables de entorno (`SCREENSHOTS_DIR`, `WORKSPACE_DIR`, `WORK_PROJECTS_DIR`). Se genera desde `env.zsh.example` en la primera instalación. +**`~/.config/cortex-dots/local/env.zsh`** contiene paths personales, tokens y overrides de variables de entorno (`SCREENSHOTS_DIR`, `WORKSPACE_DIR`, `WORK_PROJECTS_DIR`, `CORTEX_HOME`, `CORTEX_ROOT`, `CORTEX_CONFIG_HOME`, `CORTEX_MULTIPLEXER`). Se genera desde `env.zsh.example` en la primera instalación. ## Múltiples identidades GitHub diff --git a/README.md b/README.md index 3fae58c..b6dd6b2 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ The shell profile uses safe, env-driven defaults: | `tools` | `$TOOLS_DIR` (`~/dev/tools`) | | `worktrees` | `$WORKTREES_DIR` (`~/dev/worktrees`) | | `cortex` | `$CORTEX_ROOT` (`~/.cortex/cortex`) | -| `dotfiles` | `$CORTEX_DOTFILES_DIR` (`~/.cortex/cortex-dots`) | +| `dotfiles` | `$CORTEX_DOTFILES_DIR` (`~/.config/cortex-dots`) | Override any of these in `~/.config/cortex-dots/local/env.zsh`. @@ -140,6 +140,7 @@ scripts/test-install.sh --seed-stale-opposite scripts/test-install.sh --symlink --seed-stale-opposite bash -n install.sh zsh -n zsh/zshrc +for path in opencode/*.json opencode/**/*.json claude/themes/*.json; do jq . "$path" >/dev/null 2>&1 || echo "invalid: $path"; done python3 - <<'PY' import pathlib, tomllib for path in pathlib.Path('.').rglob('*.toml'): diff --git a/TODO.md b/TODO.md index 4792c34..ef04028 100644 --- a/TODO.md +++ b/TODO.md @@ -4,39 +4,39 @@ Mejoras identificadas en dotfiles externos de referencia. --- -## Alta prioridad +## Completado + +Las siguientes mejoras se han implementado y están activas en los dotfiles: + +### Alta prioridad - [x] **Fuente OSS-safe** — el snapshot usa `FiraCode Nerd Font` oficial y no incluye binarios ni glyphs de marca privada. - [x] **Statusline custom para Claude Code** — script que muestra barra visual de uso del contexto (verde/amarillo/rojo), modelo activo, rama git y porcentaje exacto. -## Media prioridad +### Media prioridad - [x] **`right_format` en Starship** — cmd_duration y time alineados al extremo derecho. - [x] **`atuin`** — historial de zsh con SQLite y TUI avanzada en Ctrl+R. -## Baja prioridad +### Baja prioridad - [x] **Shaders de cursor en Ghostty** — 4 shaders disponibles en `ghostty/shaders/`. Activo: cursor_smear_soft. Para cambiar: editar `custom-shader` en ghostty/config. - [x] **`window-padding-balance = true` en Ghostty** — padding balanceado en splits. ---- - -## Mejoras de memoria — inspiradas en Engram v1.10.5 +### Mejoras de memoria — inspiradas en Engram v1.10.5 -### Alta prioridad +#### Alta prioridad - [x] **Nudge de 15 minutos sin mem_save** — Hook `UserPromptSubmit` que revisa el timestamp de la última observación en dev-memory. Si pasaron +15 min y la sesión tiene +5 min de antigüedad, inyecta recordatorio para guardar contexto. Evita pérdida de decisiones en sesiones largas de implementación. -### Media prioridad +#### Media prioridad - [x] **PostCompact con orden explícito** — Mejorar el hook PostCompact actual (genérico) para que instruya el orden exacto: `mem_session_summary` primero → `mem_context` después, con el nombre del proyecto interpolado. Más determinístico que el mensaje actual. - [x] **detect_project() con git remote** — Derivar el nombre del proyecto desde `git remote get-url origin` en vez de dirname. Más robusto en worktrees y monorepos donde el nombre del directorio no refleja el proyecto real. ---- - -## Worktrees — integración natural con Claude +### Worktrees — integración natural con Claude - [x] **Worktree helpers zsh** — `wtadd`/`wtlist`/`wtremove` en `worktree-helpers.zsh`. Mecánica pura: crear directorio hermano, detectar repos de proyectos PC via `is-pc-forbidden`, abrir workspace automáticamente. diff --git a/docs/herdr-workflow.md b/docs/herdr-workflow.md index 192b475..5a8c122 100644 --- a/docs/herdr-workflow.md +++ b/docs/herdr-workflow.md @@ -88,6 +88,5 @@ Before detaching long-running work, name important panes and run `whereami` if t ## Related Docs - [Keymaps](keymaps.md) -- [Practical keymaps](keymaps.md) - [Cortex Agent State v1](agent-state-v1.md) - [README](../README.md) diff --git a/docs/keymaps.md b/docs/keymaps.md index 770df47..69c6c70 100644 --- a/docs/keymaps.md +++ b/docs/keymaps.md @@ -40,6 +40,7 @@ This table favors the shortcuts used by these dotfiles and Herdr defaults. It is | Tool | Shortcut / Command | Action | |------|--------------------|--------| | Claude Code | `cc [path]` | Start Claude Code in the current or given directory. | +| Claude Code | `ccd [path]` | Navigate to a workspace subdirectory (cd helper). | | Claude Code | `ccb [path]` | Start Claude Code with explicit permission bypass. | | Claude Code | `ccx [path]` | Pipe initial context into Claude Code. | | Claude Code | `ccclip ` | Copy files as fenced code context to the clipboard. | diff --git a/nvim/README.md b/nvim/README.md index 5d9af22..9c9f47f 100644 --- a/nvim/README.md +++ b/nvim/README.md @@ -26,7 +26,7 @@ Estado documentado el 2026-06-19. La configuración activa vive por ahora en ## Paleta usada para el overlay -Derivada de la paleta Cortex warm/slate usada por Ghostty, Starship y SketchyBar. +Derivada de la paleta Cortex warm/slate usada por Ghostty y Starship. | Uso | Color | |-----|-------|