Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
set -euo pipefail
shopt -s nullglob globstar

zsh_files=(zsh/zshrc zsh/scripts/*.zsh)
zsh_files=(zsh/zshrc zsh/cortex-dotfiles.zsh zsh/scripts/*.zsh)
for file in "${zsh_files[@]}"; do
[[ -f "$file" ]] || continue
zsh -n "$file"
Expand Down
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,8 @@ dotfiles/
├── bun/ # Global bun defaults (~/.bunfig.toml)
├── uv/ # Global uv defaults (~/.config/uv/uv.toml)
├── zsh/
│ ├── zshrc # Profile principal (~/.zshrc)
│ ├── zshrc # Bootstrap: dotfiles primero, Cortex al final (~/.zshrc)
│ ├── cortex-dotfiles.zsh # Entrypoint propio del profile de dotfiles
│ └── scripts/
│ ├── claude-helpers.zsh # Integración Claude Code
│ ├── cmux-sidebar-refresh.sh # Metadata Cortex para cmux
Expand Down Expand Up @@ -94,7 +95,7 @@ dotfiles/

## Boundary con Cortex

Este repo sigue siendo standalone: `install.sh` no requiere tener el repo `cortex` disponible y estos dotfiles deben poder instalarse por sí solos.
Este repo sigue siendo standalone: `install.sh` no requiere tener el repo `cortex` disponible y estos dotfiles deben poder instalarse por sí solos. El bootstrap carga primero `~/.config/cortex-dotfiles/shell/cortex-dotfiles.zsh` y, si existe, carga al final `~/.cortex/shell/cortex.zsh`, que pertenece a Cortex. Ambos fragments son opcionales y un error en uno no impide intentar cargar el otro. Cortex conserva el ownership de sus variables core; este repo solo define variables bajo el namespace `CORTEX_DOTFILES_*`.

Algunos artefactos viven acá temporalmente porque nacieron junto al setup personal, pero conceptualmente son propios del producto Cortex y no deberían tener a `cortex-dotfiles` como source of truth permanente:

Expand Down Expand Up @@ -144,10 +145,9 @@ 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_HOME` — raíz canónica de cortex, por defecto `~/.cortex`
- `CORTEX_ROOT` — repo principal cortex, por defecto `~/.cortex/cortex`
- `CORTEX_DOTFILES_DIR` — repo dotfiles, por defecto `~/.cortex/cortex-dotfiles`
- `CORTEX_SHELL_INTEGRATION` — fragmento zsh opcional administrado por Cortex, por defecto `$CORTEX_HOME/shell/cortex.zsh`
- `CORTEX_DOTFILES_DIR` — repo 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
- Aliases y paths personales
Expand Down
4 changes: 4 additions & 0 deletions install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,7 @@ PY
echo ""
echo "checking symlink targets"
check_symlink_target "$DOTFILES/zsh/zshrc" "$HOME/.zshrc"
check_symlink_target "$DOTFILES/zsh/cortex-dotfiles.zsh" "$HOME/.config/cortex-dotfiles/shell/cortex-dotfiles.zsh"
check_symlink_target "$DOTFILES/npm/npmrc" "$HOME/.npmrc"
check_symlink_target "$DOTFILES/bun/bunfig.toml" "$HOME/.bunfig.toml"
check_symlink_target "$DOTFILES/uv/uv.toml" "$HOME/.config/uv/uv.toml"
Expand Down Expand Up @@ -238,6 +239,7 @@ PY
check_shell "$path" bash
done
check_shell "$DOTFILES/zsh/zshrc" zsh
check_shell "$DOTFILES/zsh/cortex-dotfiles.zsh" zsh
for path in "$DOTFILES"/zsh/scripts/*.zsh; do
check_shell "$path" zsh
done
Expand Down Expand Up @@ -455,6 +457,7 @@ backup_karabiner_if_exists() {
}

backup_if_exists "$HOME/.zshrc"
backup_if_exists "$HOME/.config/cortex-dotfiles/shell/cortex-dotfiles.zsh"
backup_if_exists "$HOME/.npmrc"
backup_if_exists "$HOME/.bunfig.toml"
backup_if_exists "$HOME/.config/uv/uv.toml"
Expand Down Expand Up @@ -497,6 +500,7 @@ create_symlink() {
}

create_symlink "$DOTFILES/zsh/zshrc" "$HOME/.zshrc"
create_symlink "$DOTFILES/zsh/cortex-dotfiles.zsh" "$HOME/.config/cortex-dotfiles/shell/cortex-dotfiles.zsh"
create_symlink "$DOTFILES/npm/npmrc" "$HOME/.npmrc"
create_symlink "$DOTFILES/bun/bunfig.toml" "$HOME/.bunfig.toml"
create_symlink "$DOTFILES/uv/uv.toml" "$HOME/.config/uv/uv.toml"
Expand Down
10 changes: 4 additions & 6 deletions local/env.zsh.example
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,9 @@
# Raíz real de repos en Linux/agent-dev.
# export BARBATDEV_DIR="$WORKSPACE_DIR/barbatdev"

# Raíz de estado/runtime de cortex y repos principales.
# export CORTEX_HOME="$HOME/.cortex"
# export CORTEX_ROOT="$BARBATDEV_DIR/cortex/cortex"
# Configuración propia de cortex-dotfiles.
# export CORTEX_DOTFILES_DIR="$BARBATDEV_DIR/cortex/cortex-dotfiles"
# export CORTEX_SHELL_INTEGRATION="$CORTEX_HOME/shell/cortex.zsh"
# export CORTEX_DOTFILES_SHELL_ENTRYPOINT="$HOME/.config/cortex-dotfiles/shell/cortex-dotfiles.zsh"

# Proyectos personales
# export PERSONAL_PROJECTS_DIR="$BARBATDEV_DIR/products"
Expand All @@ -25,8 +23,8 @@
# OpenCode
# export OPENCODE_DEFAULT_FLAGS=""

# Multiplexor preferido para cc/oc y sesiones remotas.
# export CORTEX_MULTIPLEXER="cmux"
# Multiplexor preferido por los helpers de dotfiles cuando Cortex no lo define.
# export CORTEX_DOTFILES_MULTIPLEXER="cmux"

# Navegación rápida para proyectos de una organización/equipo
# export INNIT_DIR="$BARBATDEV_DIR/innit"
Expand Down
74 changes: 53 additions & 21 deletions scripts/check-cortex-shell-integration.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,24 +5,56 @@ repo_root="$(cd "$(dirname "$0")/.." && pwd)"
tmp_dir="$(mktemp -d)"
trap 'rm -rf "$tmp_dir"' EXIT

integration="$tmp_dir/cortex.zsh"
printf '%s\n' '_CORTEX_INTEGRATION_PROBE=loaded' > "$integration"

env CORTEX_SHELL_INTEGRATION="$integration" zsh -f -c '
source "$1" >/dev/null
[[ "$_CORTEX_INTEGRATION_PROBE" == loaded ]]
(( ! ${+_CORTEX_SHELL_INTEGRATION_PATH} ))
' _ "$repo_root/zsh/zshrc"

env CORTEX_SHELL_INTEGRATION="$tmp_dir/missing.zsh" zsh -f -c '
source "$1" >/dev/null
(( ! ${+_CORTEX_INTEGRATION_PROBE} ))
' _ "$repo_root/zsh/zshrc"

mkdir -p "$tmp_dir/cortex-home/shell"
printf '%s\n' '_CORTEX_DEFAULT_INTEGRATION_PROBE=loaded' > "$tmp_dir/cortex-home/shell/cortex.zsh"

env -u CORTEX_SHELL_INTEGRATION CORTEX_HOME="$tmp_dir/cortex-home" zsh -f -c '
source "$1" >/dev/null
[[ "$_CORTEX_DEFAULT_INTEGRATION_PROBE" == loaded ]]
' _ "$repo_root/zsh/zshrc"
dotfiles_fragment="$tmp_dir/cortex-dotfiles.zsh"
cortex_fragment="$tmp_dir/cortex.zsh"
printf '%s\n' '_SHELL_LOAD_ORDER+=(dotfiles)' > "$dotfiles_fragment"
printf '%s\n' '_SHELL_LOAD_ORDER+=(cortex)' > "$cortex_fragment"

env \
CORTEX_DOTFILES_SHELL_ENTRYPOINT="$dotfiles_fragment" \
CORTEX_SHELL_INTEGRATION="$cortex_fragment" \
zsh -f -c '
_SHELL_LOAD_ORDER=()
source "$1"
[[ "${(j/:/)_SHELL_LOAD_ORDER}" == "dotfiles:cortex" ]]
(( ! ${+_CORTEX_DOTFILES_SHELL_PATH} ))
(( ! ${+_CORTEX_SHELL_PATH} ))
' _ "$repo_root/zsh/zshrc"

home_dir="$tmp_dir/home"
mkdir -p "$home_dir/.config/cortex-dotfiles/shell" "$home_dir/.cortex/shell"
cp "$dotfiles_fragment" "$home_dir/.config/cortex-dotfiles/shell/cortex-dotfiles.zsh"
cp "$cortex_fragment" "$home_dir/.cortex/shell/cortex.zsh"

env -u CORTEX_HOME -u CORTEX_ROOT -u CORTEX_DOTFILES_SHELL_ENTRYPOINT \
-u CORTEX_SHELL_INTEGRATION HOME="$home_dir" zsh -f -c '
_SHELL_LOAD_ORDER=()
source "$1"
[[ "${(j/:/)_SHELL_LOAD_ORDER}" == "dotfiles:cortex" ]]
(( ! ${+CORTEX_HOME} ))
(( ! ${+CORTEX_ROOT} ))
' _ "$repo_root/zsh/zshrc"

env HOME="$tmp_dir/missing-home" zsh -f -c 'source "$1"' _ "$repo_root/zsh/zshrc"

printf '%s\n' 'return 1' > "$dotfiles_fragment"
env \
CORTEX_DOTFILES_SHELL_ENTRYPOINT="$dotfiles_fragment" \
CORTEX_SHELL_INTEGRATION="$cortex_fragment" \
zsh -f -c '
_SHELL_LOAD_ORDER=()
source "$1" 2>"$2"
[[ "${(j/:/)_SHELL_LOAD_ORDER}" == "cortex" ]]
' _ "$repo_root/zsh/zshrc" "$tmp_dir/error.log"

grep -Fq "zsh: no se pudo cargar cortex-dotfiles: $dotfiles_fragment" "$tmp_dir/error.log"

printf '%s\n' 'if [[' > "$dotfiles_fragment"
env \
CORTEX_DOTFILES_SHELL_ENTRYPOINT="$dotfiles_fragment" \
CORTEX_SHELL_INTEGRATION="$cortex_fragment" \
zsh -f -c '
_SHELL_LOAD_ORDER=()
source "$1" 2>/dev/null
[[ "${(j/:/)_SHELL_LOAD_ORDER}" == "cortex" ]]
' _ "$repo_root/zsh/zshrc"
Loading
Loading