From d86525bc4a88eca7eafead41a77f219142f0411a Mon Sep 17 00:00:00 2001 From: Juan Barbat Date: Wed, 21 Oct 2026 09:18:40 -0300 Subject: [PATCH 1/2] fix(install): add profile files install.sh already links install.sh on main links herdr, ghostty, fish and pi profile files that were never committed, so install.sh --check fails and CI stays red. Refs #69 --- fish/functions/gbarbatdev.fish | 54 ++++++++++++++++++ fish/functions/grefactoria.fish | 54 ++++++++++++++++++ fish/functions/hbarbatdev.fish | 48 ++++++++++++++++ fish/functions/hrefactoria.fish | 48 ++++++++++++++++ fish/themes/barbatdev.fish | 41 ++++++++++++++ ghostty/profiles/barbatdev.conf | 25 +++++++++ ghostty/profiles/refactoria.conf | 27 +++++++++ herdr/config-base.toml | 15 +++++ herdr/profiles/barbatdev.toml | 31 +++++++++++ pi/themes/barbatdev.json | 94 ++++++++++++++++++++++++++++++++ 10 files changed, 437 insertions(+) create mode 100644 fish/functions/gbarbatdev.fish create mode 100644 fish/functions/grefactoria.fish create mode 100644 fish/functions/hbarbatdev.fish create mode 100644 fish/functions/hrefactoria.fish create mode 100644 fish/themes/barbatdev.fish create mode 100644 ghostty/profiles/barbatdev.conf create mode 100644 ghostty/profiles/refactoria.conf create mode 100644 herdr/config-base.toml create mode 100644 herdr/profiles/barbatdev.toml create mode 100644 pi/themes/barbatdev.json diff --git a/fish/functions/gbarbatdev.fish b/fish/functions/gbarbatdev.fish new file mode 100644 index 0000000..77d5f31 --- /dev/null +++ b/fish/functions/gbarbatdev.fish @@ -0,0 +1,54 @@ +# Open an isolated Ghostty instance with the Barbatdev profile. Usage: gbarbatdev [ghostty args...] +function gbarbatdev --description 'Open Ghostty with the Barbatdev profile' + if not command -q open + printf 'gbarbatdev: macOS open command is not available\n' >&2 + return 127 + end + + set -l ghostty /Applications/Ghostty.app/Contents/MacOS/ghostty + if not test -x "$ghostty" + printf 'gbarbatdev: Ghostty.app is not installed in /Applications\n' >&2 + return 1 + end + + set -l base "$HOME/.config/ghostty/config" + set -l profile "$HOME/.config/ghostty/profiles/barbatdev.conf" + if not test -r "$base" + printf 'gbarbatdev: missing readable config: %s\n' "$base" >&2 + return 1 + end + if not test -r "$profile" + printf 'gbarbatdev: missing readable config: %s\n' "$profile" >&2 + return 1 + end + + set -l tmp_dir (command mktemp -d) + set -l mktemp_status $status + if test $mktemp_status -ne 0 + return $mktemp_status + end + if test -z "$tmp_dir" + return 1 + end + + set -l config "$tmp_dir/config.ghostty" + printf 'config-file = "%s"\nconfig-file = "%s"\n' "$base" "$profile" > "$config" + set -l compose_status $status + if test $compose_status -ne 0 + command rm -rf -- "$tmp_dir" + return $compose_status + end + + "$ghostty" +validate-config --config-file="$config" + set -l validate_status $status + if test $validate_status -ne 0 + printf 'gbarbatdev: composed Ghostty config is invalid\n' >&2 + command rm -rf -- "$tmp_dir" + return $validate_status + end + + open -W -na Ghostty --args --config-default-files=false --config-file="$config" --working-directory="$PWD" $argv + set -l ghostty_status $status + command rm -rf -- "$tmp_dir" + return $ghostty_status +end diff --git a/fish/functions/grefactoria.fish b/fish/functions/grefactoria.fish new file mode 100644 index 0000000..905a37b --- /dev/null +++ b/fish/functions/grefactoria.fish @@ -0,0 +1,54 @@ +# Open an isolated Ghostty instance with the RefactorIA profile. Usage: grefactoria [ghostty args...] +function grefactoria --description 'Open Ghostty with the RefactorIA profile' + if not command -q open + printf 'grefactoria: macOS open command is not available\n' >&2 + return 127 + end + + set -l ghostty /Applications/Ghostty.app/Contents/MacOS/ghostty + if not test -x "$ghostty" + printf 'grefactoria: Ghostty.app is not installed in /Applications\n' >&2 + return 1 + end + + set -l base "$HOME/.config/ghostty/config" + set -l profile "$HOME/.config/ghostty/profiles/refactoria.conf" + if not test -r "$base" + printf 'grefactoria: missing readable config: %s\n' "$base" >&2 + return 1 + end + if not test -r "$profile" + printf 'grefactoria: missing readable config: %s\n' "$profile" >&2 + return 1 + end + + set -l tmp_dir (command mktemp -d) + set -l mktemp_status $status + if test $mktemp_status -ne 0 + return $mktemp_status + end + if test -z "$tmp_dir" + return 1 + end + + set -l config "$tmp_dir/config.ghostty" + printf 'config-file = "%s"\nconfig-file = "%s"\n' "$base" "$profile" > "$config" + set -l compose_status $status + if test $compose_status -ne 0 + command rm -rf -- "$tmp_dir" + return $compose_status + end + + "$ghostty" +validate-config --config-file="$config" + set -l validate_status $status + if test $validate_status -ne 0 + printf 'grefactoria: composed Ghostty config is invalid\n' >&2 + command rm -rf -- "$tmp_dir" + return $validate_status + end + + open -W -na Ghostty --args --config-default-files=false --config-file="$config" --working-directory="$PWD" $argv + set -l ghostty_status $status + command rm -rf -- "$tmp_dir" + return $ghostty_status +end diff --git a/fish/functions/hbarbatdev.fish b/fish/functions/hbarbatdev.fish new file mode 100644 index 0000000..737c1ba --- /dev/null +++ b/fish/functions/hbarbatdev.fish @@ -0,0 +1,48 @@ +# Run Herdr with the Barbatdev profile. Usage: hbarbatdev [herdr args...] +function hbarbatdev --description 'Run Herdr with the Barbatdev profile' + if set -q HERDR_ENV + printf 'hbarbatdev: launch this preview from an external Fish shell or window, not from within Herdr\n' >&2 + return 1 + end + + if not command -q herdr + printf 'hbarbatdev: herdr is not available\n' >&2 + return 127 + end + + set -l base "$HOME/.config/herdr/config-base.toml" + set -l profile "$HOME/.config/herdr/profiles/barbatdev.toml" + if not test -r "$base" + printf 'hbarbatdev: missing readable config: %s\n' "$base" >&2 + return 1 + end + if not test -r "$profile" + printf 'hbarbatdev: missing readable config: %s\n' "$profile" >&2 + return 1 + end + + set -l tmp_dir (command mktemp -d) + set -l mktemp_status $status + if test $mktemp_status -ne 0 + return $mktemp_status + end + if test -z "$tmp_dir" + return 1 + end + + set -l config "$tmp_dir/config.toml" + set -l server_socket "$tmp_dir/herdr.sock" + set -l client_socket "$tmp_dir/herdr-client.sock" + + command cat -- "$base" "$profile" > "$config" + set -l cat_status $status + if test $cat_status -ne 0 + command rm -rf -- "$tmp_dir" + return $cat_status + end + + env HERDR_CONFIG_PATH="$config" HERDR_SOCKET_PATH="$server_socket" HERDR_CLIENT_SOCKET_PATH="$client_socket" herdr --no-session $argv + set -l herdr_status $status + command rm -rf -- "$tmp_dir" + return $herdr_status +end diff --git a/fish/functions/hrefactoria.fish b/fish/functions/hrefactoria.fish new file mode 100644 index 0000000..4375135 --- /dev/null +++ b/fish/functions/hrefactoria.fish @@ -0,0 +1,48 @@ +# Run Herdr with the RefactorIA profile. Usage: hrefactoria [herdr args...] +function hrefactoria --description 'Run Herdr with the RefactorIA profile' + if set -q HERDR_ENV + printf 'hrefactoria: launch this preview from an external Fish shell or window, not from within Herdr\n' >&2 + return 1 + end + + if not command -q herdr + printf 'hrefactoria: herdr is not available\n' >&2 + return 127 + end + + set -l base "$HOME/.config/herdr/config-base.toml" + set -l profile "$HOME/.config/herdr/profiles/refactoria.toml" + if not test -r "$base" + printf 'hrefactoria: missing readable config: %s\n' "$base" >&2 + return 1 + end + if not test -r "$profile" + printf 'hrefactoria: missing readable config: %s\n' "$profile" >&2 + return 1 + end + + set -l tmp_dir (command mktemp -d) + set -l mktemp_status $status + if test $mktemp_status -ne 0 + return $mktemp_status + end + if test -z "$tmp_dir" + return 1 + end + + set -l config "$tmp_dir/config.toml" + set -l server_socket "$tmp_dir/herdr.sock" + set -l client_socket "$tmp_dir/herdr-client.sock" + + command cat -- "$base" "$profile" > "$config" + set -l cat_status $status + if test $cat_status -ne 0 + command rm -rf -- "$tmp_dir" + return $cat_status + end + + env HERDR_CONFIG_PATH="$config" HERDR_SOCKET_PATH="$server_socket" HERDR_CLIENT_SOCKET_PATH="$client_socket" herdr --no-session $argv + set -l herdr_status $status + command rm -rf -- "$tmp_dir" + return $herdr_status +end diff --git a/fish/themes/barbatdev.fish b/fish/themes/barbatdev.fish new file mode 100644 index 0000000..bbd9feb --- /dev/null +++ b/fish/themes/barbatdev.fish @@ -0,0 +1,41 @@ +# Barbatdev Fish colors. + +set -l base "#0B0B0A" +set -l panel "#171512" +set -l text "#F8F1E7" +set -l selection_text "#FFF7ED" +set -l accent "#F97316" +set -l active_orange "#FB923C" +set -l gold "#FBBF24" +set -l soft_orange "#FDBA74" +set -l bright_blue "#BAE6FD" +set -l error "#EF4444" +set -l muted "#B9AD9C" +set -l dim "#8C8173" +set -l selection "#7A3500" +set -l search_background "#3A1D0C" + +# Syntax highlighting colors. +set -g fish_color_normal $text +set -g fish_color_command --bold $accent +set -g fish_color_keyword --bold $active_orange +set -g fish_color_quote $gold +set -g fish_color_redirection $bright_blue +set -g fish_color_end $soft_orange +set -g fish_color_error --bold $error +set -g fish_color_param $soft_orange +set -g fish_color_comment $dim +set -g fish_color_selection --background=$selection $selection_text +set -g fish_color_search_match --background=$search_background $selection_text +set -g fish_color_operator $bright_blue +set -g fish_color_escape $active_orange +set -g fish_color_autosuggestion $muted +set -g fish_color_option $soft_orange + +# Completion pager colors. +set -g fish_pager_color_progress $dim +set -g fish_pager_color_prefix --bold $accent +set -g fish_pager_color_completion $text +set -g fish_pager_color_description $muted +set -g fish_pager_color_selected_background --background=$selection $selection_text +set -g fish_pager_color_secondary_background --background=$panel diff --git a/ghostty/profiles/barbatdev.conf b/ghostty/profiles/barbatdev.conf new file mode 100644 index 0000000..9ddeeb0 --- /dev/null +++ b/ghostty/profiles/barbatdev.conf @@ -0,0 +1,25 @@ +# Barbatdev terminal palette. Loaded after the shared Ghostty config. +background = #0B0B0A +foreground = #F8F1E7 +cursor-color = #F97316 +cursor-text = #0B0B0A +selection-background = #7C2D12 +selection-foreground = #F8F1E7 + +# Accessible ANSI colors for the graphite background. +palette = 0=#8B8378 +palette = 1=#F87171 +palette = 2=#34D399 +palette = 3=#FBBF24 +palette = 4=#60A5FA +palette = 5=#C084FC +palette = 6=#2DD4BF +palette = 7=#F8F1E7 +palette = 8=#B8AEA0 +palette = 9=#FCA5A5 +palette = 10=#6EE7B7 +palette = 11=#FCD34D +palette = 12=#93C5FD +palette = 13=#D8B4FE +palette = 14=#5EEAD4 +palette = 15=#FFFFFF diff --git a/ghostty/profiles/refactoria.conf b/ghostty/profiles/refactoria.conf new file mode 100644 index 0000000..3ad7e07 --- /dev/null +++ b/ghostty/profiles/refactoria.conf @@ -0,0 +1,27 @@ +# RefactorIA terminal palette. Loaded after the shared Ghostty config. +background = #0B0714 +foreground = #FFFFFF +cursor-color = #7127FF +cursor-text = #0B0714 +selection-background = #FFFFFF +selection-foreground = #0B0714 + +# ANSI semantic colors are adapted for contrast; they are not RefactorIA brand tokens. +palette = 0=#0B0714 +palette = 1=#FF6B8A +palette = 2=#58E6A8 +palette = 3=#FFC857 +palette = 4=#8CC8FF +palette = 5=#C7A6FF +palette = 6=#66E6E6 +palette = 7=#FFFFFF + +# Bright ANSI variants retain the same semantic roles. +palette = 8=#8F839D +palette = 9=#FF9CB0 +palette = 10=#8FF0C3 +palette = 11=#FFD98A +palette = 12=#B8DDFF +palette = 13=#E1CFFF +palette = 14=#A8F2F2 +palette = 15=#FFFFFF diff --git a/herdr/config-base.toml b/herdr/config-base.toml new file mode 100644 index 0000000..a6c9038 --- /dev/null +++ b/herdr/config-base.toml @@ -0,0 +1,15 @@ +# Shared Herdr settings managed by Gentleman.Dots. + +[keys] +# Match tmux/Zellij-style prefix muscle memory. +prefix = "ctrl+a" + +# Move between agents in the sidebar. +# Avoid Herdr's built-in prefix+shift+j/k pane-swap bindings. +previous_agent = "prefix+alt+k" +next_agent = "prefix+alt+j" + +# Jump straight to agent N (1..9) as listed in the sidebar. +# Use Ctrl after the prefix: Alt+number is owned by skhd/yabai spaces, +# and Shift+number did not reach Herdr reliably in the current terminal setup. +focus_agent = "prefix+ctrl+1..9" diff --git a/herdr/profiles/barbatdev.toml b/herdr/profiles/barbatdev.toml new file mode 100644 index 0000000..953c8fa --- /dev/null +++ b/herdr/profiles/barbatdev.toml @@ -0,0 +1,31 @@ +# Barbatdev/Cortex orange Herdr profile. + +[theme] +# One Dark supplies stable structural defaults outside Herdr's custom palette. +name = "one-dark" +auto_switch = false + +[theme.custom] +panel_bg = "#27231D" +surface0 = "#17130F" +surface1 = "#27231D" +surface_dim = "#11100E" +overlay0 = "#8E8375" +overlay1 = "#B9AD9C" +text = "#F8F1E7" +subtext0 = "#B9AD9C" +accent = "#F97316" +blue = "#60A5FA" +red = "#F87171" +green = "#34D399" +yellow = "#FBBF24" +mauve = "#A78BFA" +teal = "#2DD4BF" +peach = "#FB923C" + +[ui] +accent = "#F97316" +show_agent_labels_on_pane_borders = true + +[ui.toast] +delivery = "herdr" diff --git a/pi/themes/barbatdev.json b/pi/themes/barbatdev.json new file mode 100644 index 0000000..27473c4 --- /dev/null +++ b/pi/themes/barbatdev.json @@ -0,0 +1,94 @@ +{ + "$schema": "https://raw.githubusercontent.com/earendil-works/pi-mono/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json", + "name": "barbatdev", + "vars": { + "bg": "#0B0B0A", + "bgPanel": "#171512", + "bgElement": "#211F1A", + "bgSubtle": "#171512", + "border": "#7C2D12", + "borderSubtle": "#3A2114", + "text": "#F8F1E7", + "muted": "#B9AD9C", + "mutedBright": "#D8CBB8", + "dim": "#8C8173", + "accent": "#F97316", + "deepOrange": "#C2410C", + "activeOrange": "#FB923C", + "gold": "#FBBF24", + "softOrange": "#FDBA74", + "blue": "#60A5FA", + "brightBlue": "#BAE6FD", + "successBlue": "#7DD3FC", + "error": "#EF4444", + "selection": "#3A1D0C", + "userBg": "#7A3500", + "userText": "#FFF7ED", + "toolPendingBg": "#171512", + "toolSuccessBg": "#2A1A0D", + "toolErrorBg": "#2A0E0E", + "infoBg": "#171512" + }, + "colors": { + "accent": "accent", + "border": "border", + "borderAccent": "activeOrange", + "borderMuted": "borderSubtle", + "success": "successBlue", + "error": "error", + "warning": "gold", + "muted": "muted", + "dim": "dim", + "text": "text", + "thinkingText": "muted", + "selectedBg": "selection", + "scrollbarThumb": "border", + "searchMatchBg": "deepOrange", + "searchMatchText": "text", + "userMessageBg": "userBg", + "userMessageText": "userText", + "customMessageBg": "bgSubtle", + "customMessageText": "text", + "customMessageLabel": "gold", + "toolPendingBg": "toolPendingBg", + "toolSuccessBg": "toolSuccessBg", + "toolErrorBg": "toolErrorBg", + "toolTitle": "gold", + "toolOutput": "text", + "mdHeading": "gold", + "mdLink": "brightBlue", + "mdLinkUrl": "mutedBright", + "mdCode": "gold", + "mdCodeBlock": "text", + "mdCodeBlockBorder": "mutedBright", + "mdQuote": "mutedBright", + "mdQuoteBorder": "gold", + "mdHr": "muted", + "mdListBullet": "gold", + "toolDiffAdded": "successBlue", + "toolDiffRemoved": "error", + "toolDiffContext": "muted", + "syntaxComment": "mutedBright", + "syntaxKeyword": "gold", + "syntaxFunction": "brightBlue", + "syntaxVariable": "text", + "syntaxString": "gold", + "syntaxNumber": "softOrange", + "syntaxType": "softOrange", + "syntaxOperator": "brightBlue", + "syntaxPunctuation": "mutedBright", + "thinkingOff": "dim", + "thinkingMinimal": "dim", + "thinkingLow": "muted", + "thinkingMedium": "blue", + "thinkingHigh": "gold", + "thinkingXhigh": "activeOrange", + "thinkingMax": "accent", + "bashMode": "gold" + }, + "export": { + "pageBg": "bg", + "cardBg": "bgElement", + "infoBg": "infoBg" + } +} From bcd2b0273e2b79c76e21c7117049ceaaa3d1bc20 Mon Sep 17 00:00:00 2001 From: Juan Barbat Date: Wed, 21 Oct 2026 09:19:27 -0300 Subject: [PATCH 2/2] docs: restore Linux Home Manager rows the nix preflight requires Dropped by the README restore in dc56614. Refs #69 --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 365de2e..b5d3f81 100644 --- a/README.md +++ b/README.md @@ -101,6 +101,8 @@ El preflight es de solo lectura y sin red: usa `--offline` y `--no-write-lock-fi | Zsh y Ghostty | Configuración actual, sin cambios | | `~/.config/fish/conf.d/99-local.fish` | Host; reservado para secretos/estado privado futuro, no creado ni gestionado por Nix | | `flake.nix` y `nix/home.nix` | Base inactiva de Home Manager | +| Linux | La configuración pura para Linux es `homeConfigurations.jbarbat-linux`: usa `x86_64-linux`, `/home/jbarbat` y declara solo `fish` y `starship` como runtime mínimo. | +| Fish compartido | Home Manager mapea cada archivo declarado de forma explícita; no gestiona el directorio completo, historial ni variables Fish. | El bootstrap queda explícitamente diferido a un work unit revisado. Después de instalar Nix por fuera de este repositorio, ese trabajo podrá generar el lock con: