From eb087d6a0554d38fa715fc77f71826791a59e2c8 Mon Sep 17 00:00:00 2001 From: Juan Barbat Date: Wed, 15 Jul 2026 17:53:25 -0300 Subject: [PATCH] fix(zsh): align navigation shortcuts with workspace layout --- .github/workflows/ci.yml | 3 + README.md | 10 +++- local/env.zsh.example | 18 +++--- scripts/check-navigation-shortcuts.sh | 60 ++++++++++++++++++++ zsh/cortex-dotfiles.zsh | 80 ++++++++++++++------------- 5 files changed, 121 insertions(+), 50 deletions(-) create mode 100755 scripts/check-navigation-shortcuts.sh diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index aa1eab4..3283faf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -61,6 +61,9 @@ jobs: - name: Check Cortex shell integration run: ./scripts/check-cortex-shell-integration.sh + - name: Check navigation shortcuts + run: ./scripts/check-navigation-shortcuts.sh + - name: Validate TOML configs shell: bash run: | diff --git a/README.md b/README.md index 7d8d347..b2ffd7f 100644 --- a/README.md +++ b/README.md @@ -123,7 +123,7 @@ Seguimiento: [cortex-dotfiles #31](https://github.com/barbatdev/cortex-dotfiles/ |---------|-------------| | `gs`, `ga`, `gc`, `gp`, `gl` | Git shortcuts | | `dev`, `barbat`, `cowork`, `personal`, `tools`, `worktrees` | Navegación rápida en `~/dev` | -| `work`, `work-apis`, `work-mobile`, `work-webs`, `work-pcsoft` | Navegación rápida de trabajo | +| `work`, `innit`, `innit-apis`, `innit-mobile`, `innit-webs`, `innit-pcsoft` | Navegación rápida de trabajo | | `dotfiles` | Navegación rápida al repo de dotfiles | | `cc [path]` | Abrir Claude Code | | `oc [path]` | Abrir OpenCode | @@ -145,11 +145,15 @@ Seguimiento: [cortex-dotfiles #31](https://github.com/barbatdev/cortex-dotfiles/ Editá `local/env.zsh` (gitignored) para configurar: - `SCREENSHOTS_DIR` — directorio de screenshots - `WORKSPACE_DIR` — directorio raíz de tus proyectos -- `CORTEX_DOTFILES_DIR` — repo dotfiles, por defecto `$BARBATDEV_DIR/cortex/cortex-dotfiles` +- `BARBATDEV_DIR` — repos de barbatdev, por defecto `$WORKSPACE_DIR/barbatdev` +- `WORK_PROJECTS_DIR` — repos de trabajo, por defecto `$WORKSPACE_DIR/innit-sas` +- `PERSONAL_PROJECTS_DIR` — repos locales, por defecto `$WORKSPACE_DIR/local` +- `TOOLS_DIR` y `WORKTREES_DIR` — herramientas locales y worktrees +- `CORTEX_DOTFILES_DIR` — repo fuente de dotfiles, por defecto `$BARBATDEV_DIR/cortex/cortex-dotfiles` - `CORTEX_DOTFILES_SHELL_ENTRYPOINT` — override del entrypoint propio, por defecto `~/.config/cortex-dotfiles/shell/cortex-dotfiles.zsh` - `CORTEX_DOTFILES_MULTIPLEXER` — fallback standalone para helpers, por defecto `cmux`; `CORTEX_MULTIPLEXER` de Cortex tiene precedencia - `OPENCODE_DEFAULT_FLAGS` — flags por defecto para `oc` -- `INNIT_DIR` y overrides `INNIT_*_DIR` — navegación rápida de subdirectorios +- `INNIT_DIR` y overrides `INNIT_*_DIR` — raíz y subdirectorios `apis`, `mobile`, `webs` y `pcsoft` - Aliases y paths personales ## Herdr remoto diff --git a/local/env.zsh.example b/local/env.zsh.example index a518332..a8ac869 100644 --- a/local/env.zsh.example +++ b/local/env.zsh.example @@ -5,17 +5,19 @@ # export WORKSPACE_DIR="$HOME/dev" # Raíz real de repos en Linux/agent-dev. -# export BARBATDEV_DIR="$WORKSPACE_DIR/barbatdev" +# export BARBATDEV_DIR="${WORKSPACE_DIR:-$HOME/dev}/barbatdev" # Configuración propia de cortex-dotfiles. # export CORTEX_DOTFILES_DIR="$BARBATDEV_DIR/cortex/cortex-dotfiles" # export CORTEX_DOTFILES_SHELL_ENTRYPOINT="$HOME/.config/cortex-dotfiles/shell/cortex-dotfiles.zsh" # Proyectos personales -# export PERSONAL_PROJECTS_DIR="$BARBATDEV_DIR/products" +# export PERSONAL_PROJECTS_DIR="${WORKSPACE_DIR:-$HOME/dev}/local" +# export TOOLS_DIR="$PERSONAL_PROJECTS_DIR/tools" +# export WORKTREES_DIR="${WORKSPACE_DIR:-$HOME/dev}/worktrees" # Proyectos de empresa/org -# export WORK_PROJECTS_DIR="$BARBATDEV_DIR/innit" +# export WORK_PROJECTS_DIR="${WORKSPACE_DIR:-$HOME/dev}/innit-sas" # Directorio de screenshots # export SCREENSHOTS_DIR="$HOME/Screenshots" @@ -27,11 +29,11 @@ # export CORTEX_DOTFILES_MULTIPLEXER="cmux" # Navegación rápida para proyectos de una organización/equipo -# export INNIT_DIR="$BARBATDEV_DIR/innit" -# export INNIT_APIS_DIR="$INNIT_DIR" -# export INNIT_MOBILE_DIR="$INNIT_DIR" -# export INNIT_WEBS_DIR="$INNIT_DIR" -# export INNIT_PCSOFT_DIR="$INNIT_DIR" +# export INNIT_DIR="$WORK_PROJECTS_DIR" +# export INNIT_APIS_DIR="$INNIT_DIR/apis" +# export INNIT_MOBILE_DIR="$INNIT_DIR/mobile" +# export INNIT_WEBS_DIR="$INNIT_DIR/webs" +# export INNIT_PCSOFT_DIR="$INNIT_DIR/pcsoft" # Tokens y API keys para cualquier LLM (nunca en el repo) # export ANTHROPIC_API_KEY="tu-key-aqui" diff --git a/scripts/check-navigation-shortcuts.sh b/scripts/check-navigation-shortcuts.sh new file mode 100755 index 0000000..4e92cbc --- /dev/null +++ b/scripts/check-navigation-shortcuts.sh @@ -0,0 +1,60 @@ +#!/bin/bash +set -euo pipefail + +repo_root="$(cd "$(dirname "$0")/.." && pwd)" +tmp_dir="$(mktemp -d)" +trap 'rm -rf "$tmp_dir"' EXIT + +workspace="$tmp_dir/dev" +mkdir -p \ + "$workspace/barbatdev/cortex/cortex-dotfiles" \ + "$workspace/innit-sas/apis" \ + "$workspace/innit-sas/mobile" \ + "$workspace/innit-sas/webs" \ + "$workspace/innit-sas/pcsoft" \ + "$workspace/local/tools" \ + "$workspace/worktrees" + +env -u BARBATDEV_DIR -u WORK_PROJECTS_DIR -u PERSONAL_PROJECTS_DIR \ + -u TOOLS_DIR -u WORKTREES_DIR -u INNIT_DIR -u INNIT_APIS_DIR \ + -u INNIT_MOBILE_DIR -u INNIT_WEBS_DIR -u INNIT_PCSOFT_DIR \ + -u CORTEX_DOTFILES_DIR WORKSPACE_DIR="$workspace" zsh -f -c ' + source "$1" >/dev/null + check_navigation() { + local command="$1" + local expected="$2" + "$command" + [[ "$PWD" == "$expected" ]] + } + + check_navigation dev "$WORKSPACE_DIR" + check_navigation barbat "$BARBATDEV_DIR" + check_navigation cowork "$WORK_PROJECTS_DIR" + check_navigation work "$WORK_PROJECTS_DIR" + check_navigation innit "$INNIT_DIR" + check_navigation personal "$PERSONAL_PROJECTS_DIR" + check_navigation tools "$TOOLS_DIR" + check_navigation worktrees "$WORKTREES_DIR" + check_navigation innit-apis "$INNIT_APIS_DIR" + check_navigation innit-mobile "$INNIT_MOBILE_DIR" + check_navigation innit-webs "$INNIT_WEBS_DIR" + check_navigation innit-pcsoft "$INNIT_PCSOFT_DIR" + check_navigation dotfiles "$CORTEX_DOTFILES_DIR" + ' _ "$repo_root/zsh/cortex-dotfiles.zsh" + +fixture="$tmp_dir/fixture" +mkdir -p "$fixture/zsh" "$fixture/local" +cp "$repo_root/zsh/cortex-dotfiles.zsh" "$fixture/zsh/cortex-dotfiles.zsh" +printf 'export WORKSPACE_DIR=%q\n' "$tmp_dir/custom-workspace" > "$fixture/local/env.zsh" + +env -u WORKSPACE_DIR -u BARBATDEV_DIR -u WORK_PROJECTS_DIR \ + -u PERSONAL_PROJECTS_DIR -u TOOLS_DIR -u WORKTREES_DIR \ + zsh -f -c ' + source "$1" >/dev/null + [[ "$WORKSPACE_DIR" == "$2" ]] + [[ "$BARBATDEV_DIR" == "$2/barbatdev" ]] + [[ "$WORK_PROJECTS_DIR" == "$2/innit-sas" ]] + [[ "$PERSONAL_PROJECTS_DIR" == "$2/local" ]] + [[ "$TOOLS_DIR" == "$2/local/tools" ]] + [[ "$WORKTREES_DIR" == "$2/worktrees" ]] + ' _ "$fixture/zsh/cortex-dotfiles.zsh" "$tmp_dir/custom-workspace" diff --git a/zsh/cortex-dotfiles.zsh b/zsh/cortex-dotfiles.zsh index ba43c29..64e1245 100644 --- a/zsh/cortex-dotfiles.zsh +++ b/zsh/cortex-dotfiles.zsh @@ -53,22 +53,6 @@ fi export VISUAL="$EDITOR" #endregion -#region Environment Variables -# Workspace principal de desarrollo -export WORKSPACE_DIR="${WORKSPACE_DIR:-$HOME/dev}" -export BARBATDEV_DIR="${BARBATDEV_DIR:-$WORKSPACE_DIR/barbatdev}" -export CLAUDE_CODE_EFFORT_LEVEL=high -export CORTEX_DOTFILES_DIR="${CORTEX_DOTFILES_DIR:-$BARBATDEV_DIR/cortex/cortex-dotfiles}" - -# Proyectos de la organización -export WORK_PROJECTS_DIR="${WORK_PROJECTS_DIR:-$BARBATDEV_DIR/innit}" -export PERSONAL_PROJECTS_DIR="${PERSONAL_PROJECTS_DIR:-$BARBATDEV_DIR/products}" -export INNIT_DIR="${INNIT_DIR:-$BARBATDEV_DIR/innit}" - -# Screenshots (configurable en local/env.zsh) -export SCREENSHOTS_DIR="${SCREENSHOTS_DIR:-$HOME/Screenshots}" -#endregion - #region Git Aliases alias g="git" gs() { git status "$@" } @@ -111,19 +95,19 @@ _go_first_existing_dir() { return 1 } -dev() { _go_dev_dir "$HOME/dev"; } +dev() { _go_dev_dir "$WORKSPACE_DIR"; } barbat() { _go_dev_dir "$BARBATDEV_DIR"; } -cowork() { _go_first_existing_dir "$WORK_PROJECTS_DIR" "$BARBATDEV_DIR/innit"; } -personal() { _go_first_existing_dir "$PERSONAL_PROJECTS_DIR" "$BARBATDEV_DIR/products"; } -tools() { _go_dev_dir "$BARBATDEV_DIR/tools"; } -worktrees() { _go_dev_dir "$HOME/dev/worktrees"; } -work() { _go_first_existing_dir "$WORK_PROJECTS_DIR" "$BARBATDEV_DIR/innit"; } -innit() { _go_first_existing_dir "$INNIT_DIR" "$BARBATDEV_DIR/innit"; } -innit-apis() { _go_first_existing_dir "${INNIT_APIS_DIR:-$INNIT_DIR}" "$INNIT_DIR"; } -innit-mobile(){ _go_first_existing_dir "${INNIT_MOBILE_DIR:-$INNIT_DIR}" "$INNIT_DIR"; } -innit-webs() { _go_first_existing_dir "${INNIT_WEBS_DIR:-$INNIT_DIR}" "$INNIT_DIR"; } -innit-pcsoft(){ _go_first_existing_dir "${INNIT_PCSOFT_DIR:-$INNIT_DIR}" "$INNIT_DIR"; } -dotfiles() { _go_dev_dir "${_DOTFILES_DIR:-$CORTEX_DOTFILES_DIR}"; } +cowork() { _go_dev_dir "$WORK_PROJECTS_DIR"; } +personal() { _go_dev_dir "$PERSONAL_PROJECTS_DIR"; } +tools() { _go_dev_dir "$TOOLS_DIR"; } +worktrees() { _go_dev_dir "$WORKTREES_DIR"; } +work() { _go_dev_dir "$WORK_PROJECTS_DIR"; } +innit() { _go_dev_dir "$INNIT_DIR"; } +innit-apis() { _go_dev_dir "$INNIT_APIS_DIR"; } +innit-mobile(){ _go_dev_dir "$INNIT_MOBILE_DIR"; } +innit-webs() { _go_dev_dir "$INNIT_WEBS_DIR"; } +innit-pcsoft(){ _go_dev_dir "$INNIT_PCSOFT_DIR"; } +dotfiles() { _go_first_existing_dir "$CORTEX_DOTFILES_DIR" "$_DOTFILES_DIR"; } #endregion #region System Aliases @@ -252,6 +236,24 @@ _LOCAL_ENV="$_DOTFILES_DIR/local/env.zsh" [[ -f "$_LOCAL_ENV" ]] && source "$_LOCAL_ENV" #endregion +#region Environment Variables +# Los overrides locales se cargan antes de calcular rutas derivadas. +export WORKSPACE_DIR="${WORKSPACE_DIR:-$HOME/dev}" +export BARBATDEV_DIR="${BARBATDEV_DIR:-$WORKSPACE_DIR/barbatdev}" +export WORK_PROJECTS_DIR="${WORK_PROJECTS_DIR:-$WORKSPACE_DIR/innit-sas}" +export PERSONAL_PROJECTS_DIR="${PERSONAL_PROJECTS_DIR:-$WORKSPACE_DIR/local}" +export TOOLS_DIR="${TOOLS_DIR:-$PERSONAL_PROJECTS_DIR/tools}" +export WORKTREES_DIR="${WORKTREES_DIR:-$WORKSPACE_DIR/worktrees}" +export INNIT_DIR="${INNIT_DIR:-$WORK_PROJECTS_DIR}" +export INNIT_APIS_DIR="${INNIT_APIS_DIR:-$INNIT_DIR/apis}" +export INNIT_MOBILE_DIR="${INNIT_MOBILE_DIR:-$INNIT_DIR/mobile}" +export INNIT_WEBS_DIR="${INNIT_WEBS_DIR:-$INNIT_DIR/webs}" +export INNIT_PCSOFT_DIR="${INNIT_PCSOFT_DIR:-$INNIT_DIR/pcsoft}" +export CORTEX_DOTFILES_DIR="${CORTEX_DOTFILES_DIR:-$BARBATDEV_DIR/cortex/cortex-dotfiles}" +export SCREENSHOTS_DIR="${SCREENSHOTS_DIR:-$HOME/Screenshots}" +export CLAUDE_CODE_EFFORT_LEVEL="${CLAUDE_CODE_EFFORT_LEVEL:-high}" +#endregion + #region Atuin # Historial de shell con búsqueda avanzada (reemplaza Ctrl+R) if command -v atuin &>/dev/null; then @@ -301,18 +303,18 @@ help-profile() { echo "\n${T}Navegación${R}" echo " ${C}dev ${R}cd ~/dev" - echo " ${C}barbat ${R}cd ~/dev/barbat" - echo " ${C}cowork ${R}cd ~/dev/cowork" - echo " ${C}personal ${R}cd ~/dev/personal" - echo " ${C}tools ${R}cd ~/dev/tools" + echo " ${C}barbat ${R}cd ~/dev/barbatdev" + echo " ${C}cowork ${R}cd ~/dev/innit-sas" + echo " ${C}personal ${R}cd ~/dev/local" + echo " ${C}tools ${R}cd ~/dev/local/tools" echo " ${C}worktrees ${R}cd ~/dev/worktrees" - echo " ${C}work ${R}cd ~/dev/work" - echo " ${C}innit ${R}cd ~/dev/innit" - echo " ${C}innit-apis ${R}cd ~/dev/innit/apis" - echo " ${C}innit-mobile ${R}cd ~/dev/innit/mobile" - echo " ${C}innit-webs ${R}cd ~/dev/innit/webs" - echo " ${C}innit-pcsoft ${R}cd ~/dev/innit/pcsoft" - echo " ${C}dotfiles ${R}cd ~/dev/personal/dotfiles" + echo " ${C}work ${R}cd ~/dev/innit-sas" + echo " ${C}innit ${R}cd ~/dev/innit-sas" + echo " ${C}innit-apis ${R}cd ~/dev/innit-sas/apis" + echo " ${C}innit-mobile ${R}cd ~/dev/innit-sas/mobile" + echo " ${C}innit-webs ${R}cd ~/dev/innit-sas/webs" + echo " ${C}innit-pcsoft ${R}cd ~/dev/innit-sas/pcsoft" + echo " ${C}dotfiles ${R}cd ~/dev/barbatdev/cortex/cortex-dotfiles" echo " ${C}.., ..., .... ${R}Subir 1, 2 o 3 niveles" echo "\n${T}Claude Code${R}"