From a04879a1f283c51cf6fe8ff53ce231be1ac7c7ac Mon Sep 17 00:00:00 2001 From: DreamCoder08 Date: Wed, 1 Jul 2026 02:46:48 -0500 Subject: [PATCH 01/29] feat(theme): expand light/dark semantic token system with dual WCAG+APCA gates Unify dark/light token parity, autogen palette_tokens from tokens.json, and propagate on_* and selection pairs across renderers with symmetric CI validation. Co-authored-by: Cursor --- .opencode/themes/dreamcoder-light.json | 130 ------ .opencode/themes/dreamcoder.json | 14 +- .../bat/themes/Dreamcoder-Dark.tmTheme | 4 +- .../bat/themes/Dreamcoder-Light.tmTheme | 2 +- Bat/.config/bat/themes/Dreamcoder.tmTheme | 2 +- CLAUDE.md | 35 +- Codex-App/Dreamcoder-Dark.codex-theme.json | 16 +- Codex-App/Dreamcoder-Light.codex-theme.json | 14 +- Codex-App/Dreamcoder.codex-theme.json | 14 +- Codex-CLI/Dreamcoder-Dark.tmTheme | 4 +- Codex-CLI/Dreamcoder-Light.tmTheme | 2 +- Codex-CLI/Dreamcoder.tmTheme | 2 +- Ghostty/.config/ghostty/themes/dreamcoder | 12 +- .../.config/ghostty/themes/dreamcoder-dark | 10 +- .../.config/ghostty/themes/dreamcoder-light | 12 +- .../.config/kitty/colors-dreamcoder-dark.conf | 16 +- .../kitty/colors-dreamcoder-light.conf | 22 +- Kitty/.config/kitty/colors-dreamcoder.conf | 22 +- Nvim/.config/nvim/colors/dreamcoder-dark.lua | 7 +- Nvim/.config/nvim/colors/dreamcoder-light.lua | 7 +- Shell/.config/starship-dark.toml | 4 + Shell/.config/starship-light.toml | 4 + Shell/.config/starship.toml | 4 + .../warp-terminal/themes/Dreamcoder-Dark.yaml | 10 +- .../themes/Dreamcoder-Light.yaml | 10 +- docs/configuration/theme-system.md | 76 ++-- docs/dreamcoder-theme-preview.md | 106 +++-- pyproject.toml | 9 + scripts/generate-palette-tokens.py | 198 +++++++++ scripts/generate-theme-preview.py | 18 +- scripts/sync-dreamcoder-theme.py | 1 - scripts/verify-theme-health.py | 199 ++++++--- src/dreamcoder_theme/palette.py | 103 ++++- src/dreamcoder_theme/palette_tokens.py | 73 +++- src/dreamcoder_theme/renderers_extra_nvim.py | 5 +- .../renderers_extra_nvim_lsp.py | 6 +- .../renderers_extra_obsidian.py | 22 +- .../renderers_ghostty_warp.py | 7 +- .../renderers_hypr_waybar_rofi.py | 30 +- src/dreamcoder_theme/renderers_kitty.py | 17 +- src/dreamcoder_theme/renderers_opencode.py | 33 +- src/dreamcoder_theme/renderers_starship.py | 5 + src/dreamcoder_theme/sync.py | 5 + tests/test_dreamcoder_theme_quality.py | 15 +- tests/test_terminal_readability.py | 8 +- tests/test_token_parity.py | 52 +++ themes/dreamcoder/hypr-colors-light.conf | 8 +- themes/dreamcoder/hypr-colors-light.lua | 8 +- .../dreamcoder/obsidian-dreamcoder-dark.css | 8 +- .../dreamcoder/obsidian-dreamcoder-light.css | 10 +- themes/dreamcoder/obsidian-dreamcoder.css | 10 +- themes/dreamcoder/tokens.json | 66 ++- themes/dreamcoder/tokens.schema.json | 386 ++++++------------ themes/dreamcoder/waybar-dark.css | 8 + themes/dreamcoder/waybar-light.css | 8 + themes/dreamcoder/waybar.css | 8 + 56 files changed, 1156 insertions(+), 731 deletions(-) delete mode 100644 .opencode/themes/dreamcoder-light.json create mode 100644 scripts/generate-palette-tokens.py create mode 100644 tests/test_token_parity.py diff --git a/.opencode/themes/dreamcoder-light.json b/.opencode/themes/dreamcoder-light.json deleted file mode 100644 index 368cc19..0000000 --- a/.opencode/themes/dreamcoder-light.json +++ /dev/null @@ -1,130 +0,0 @@ -{ - "$schema": "https://opencode.ai/theme.json", - "defs": { - "dreamBackground": "#f3eadc", - "dreamPanel": "#fff7ea", - "dreamElement": "#e6d7c4", - "dreamText": "#17120d", - "dreamMuted": "#352e22", - "dreamCocoa": "#a7471c", - "dreamLucuma": "#824f16", - "dreamDiagnostic": "#0d4a68", - "dreamSage": "#3d723d", - "dreamViolet": "#57478b", - "dreamMauve": "#7d3e64", - "dreamCoral": "#842f24", - "dreamWarning": "#654300" - }, - "theme": { - "background": "none", - "backgroundPanel": "#fff7ea", - "backgroundElement": "#e3d2bc", - "backgroundHover": "#c8ad89", - "backgroundSelected": "#824f16", - "textSelected": "#f3eadc", - "backgroundCode": "#d0bca3", - "backgroundSearch": "#a1895c", - "backgroundLine": "#e6d7c4", - "backgroundAssistant": "#d7d7ce", - "backgroundUser": "#e2d3be", - "backgroundTool": "#e0d6d2", - "text": "#17120d", - "textMuted": "#352e22", - "textSubtle": "#554638", - "textPlaceholder": "#725e4c", - "textAssistant": "#0f4058", - "textUser": "#724615", - "textTool": "#57478b", - "primary": "#824f16", - "secondary": "#a7471c", - "accent": "#824f16", - "accentMuted": "#af8d65", - "error": "#842f24", - "warning": "#654300", - "success": "#3d723d", - "info": "#0d4a68", - "border": "#66513b", - "borderActive": "#824f16", - "borderSubtle": "#8a7358", - "borderFocus": "#0d4a68", - "shadow": "#b6b0a5", - "diffAdded": "#3d723d", - "diffRemoved": "#842f24", - "diffContext": "#352e22", - "diffHunkHeader": "#57478b", - "diffHighlightAdded": "#3d723d", - "diffHighlightRemoved": "#842f24", - "diffAddedBg": "#7d9c75", - "diffRemovedBg": "#ab7064", - "diffContextBg": "none", - "diffLineNumber": "#554638", - "diffAddedLineNumberBg": "#7d9c75", - "diffRemovedLineNumberBg": "#ab7064", - "diffHunkHeaderBg": "#9d90af", - "diffFold": "#725e4c", - "diffFoldBg": "#e6d7c4", - "markdownText": "#17120d", - "markdownHeading": "#824f16", - "markdownLink": "#0d4a68", - "markdownLinkText": "#824f16", - "markdownCode": "#3d723d", - "markdownBlockQuote": "#a7471c", - "markdownEmph": "#0d4a68", - "markdownStrong": "#824f16", - "markdownHorizontalRule": "#66513b", - "markdownListItem": "#824f16", - "markdownListEnumeration": "#57478b", - "markdownTableBorder": "#66513b", - "markdownTableHeader": "#a7471c", - "markdownImage": "#7d3e64", - "markdownImageText": "#17120d", - "markdownCodeBlock": "#17120d", - "markdownCodeBlockBg": "#d0bca3", - "markdownInlineCodeBg": "#5e885a", - "syntaxComment": "#725e4c", - "syntaxKeyword": "#7c4c11", - "syntaxFunction": "#0d4a68", - "syntaxMethod": "#194a6e", - "syntaxVariable": "#4e4171", - "syntaxParameter": "#9e441b", - "syntaxProperty": "#0d4864", - "syntaxField": "#3b6d3b", - "syntaxString": "#3d723d", - "syntaxNumber": "#8f4c18", - "syntaxBoolean": "#9d452d", - "syntaxConstant": "#9d452d", - "syntaxType": "#57478b", - "syntaxClass": "#5f4876", - "syntaxInterface": "#474883", - "syntaxEnum": "#524f7d", - "syntaxOperator": "#7d3e64", - "syntaxPunctuation": "#352e22", - "syntaxTag": "#7c4c11", - "syntaxAttribute": "#0d4864", - "syntaxRegexp": "#7f3a52", - "syntaxEscape": "#654300", - "syntaxNamespace": "#57478b", - "syntaxModule": "#57478b", - "syntaxDecorator": "#7d3e64", - "syntaxBuiltin": "#9d452d", - "syntaxSpecial": "#654300", - "syntaxTodo": "#5c3d02", - "syntaxDeprecated": "#6e2f23", - "terminalBlack": "#5e5c57", - "terminalRed": "#842f24", - "terminalGreen": "#3d723d", - "terminalYellow": "#654300", - "terminalBlue": "#0d4a68", - "terminalMagenta": "#7d3e64", - "terminalCyan": "#0f4058", - "terminalWhite": "#17120d", - "terminalBrightBlack": "#554638", - "terminalBrightRed": "#702a20", - "terminalBrightGreen": "#366134", - "terminalBrightYellow": "#593b02", - "terminalBrightBlue": "#0f4058", - "terminalBrightMagenta": "#6b3654", - "terminalBrightCyan": "#4b3d74", - "terminalBrightWhite": "#17120d" - } -} diff --git a/.opencode/themes/dreamcoder.json b/.opencode/themes/dreamcoder.json index ac57426..803f32d 100644 --- a/.opencode/themes/dreamcoder.json +++ b/.opencode/themes/dreamcoder.json @@ -19,8 +19,8 @@ "background": "none", "backgroundPanel": "#fff7ea", "backgroundElement": "#e3d2bc", - "backgroundHover": "#c8ad89", - "backgroundSelected": "#f3eadc", + "backgroundHover": "#decbb1", + "backgroundSelected": "#decbb1", "textSelected": "#17120d", "backgroundCode": "#d0bca3", "backgroundSearch": "#a1895c", @@ -54,13 +54,13 @@ "diffHunkHeader": "#57478b", "diffHighlightAdded": "#3d723d", "diffHighlightRemoved": "#842f24", - "diffAddedBg": "#7d9c75", - "diffRemovedBg": "#ab7064", + "diffAddedBg": "#a7b899", + "diffRemovedBg": "#c49b8f", "diffContextBg": "none", "diffLineNumber": "#554638", - "diffAddedLineNumberBg": "#7d9c75", - "diffRemovedLineNumberBg": "#ab7064", - "diffHunkHeaderBg": "#9d90af", + "diffAddedLineNumberBg": "#a7b899", + "diffRemovedLineNumberBg": "#c49b8f", + "diffHunkHeaderBg": "#b8acbd", "diffFold": "#725e4c", "diffFoldBg": "#e6d7c4", "markdownText": "#17120d", diff --git a/Bat/.config/bat/themes/Dreamcoder-Dark.tmTheme b/Bat/.config/bat/themes/Dreamcoder-Dark.tmTheme index 6f12720..cbf424a 100644 --- a/Bat/.config/bat/themes/Dreamcoder-Dark.tmTheme +++ b/Bat/.config/bat/themes/Dreamcoder-Dark.tmTheme @@ -10,8 +10,8 @@ background#100f0d foreground#e8dfd0 caret#d99555 - selection#d99555 - selectionForeground#100f0d + selection#2b231b + selectionForeground#e8dfd0 lineHighlight#2b231b gutter#392e21 gutterForeground#c7b9aa diff --git a/Bat/.config/bat/themes/Dreamcoder-Light.tmTheme b/Bat/.config/bat/themes/Dreamcoder-Light.tmTheme index 0b12d83..057aff6 100644 --- a/Bat/.config/bat/themes/Dreamcoder-Light.tmTheme +++ b/Bat/.config/bat/themes/Dreamcoder-Light.tmTheme @@ -10,7 +10,7 @@ background#f3eadc foreground#17120d caret#824f16 - selection#f3eadc + selection#decbb1 selectionForeground#17120d lineHighlight#decbb1 gutter#c8ad89 diff --git a/Bat/.config/bat/themes/Dreamcoder.tmTheme b/Bat/.config/bat/themes/Dreamcoder.tmTheme index 0b12d83..057aff6 100644 --- a/Bat/.config/bat/themes/Dreamcoder.tmTheme +++ b/Bat/.config/bat/themes/Dreamcoder.tmTheme @@ -10,7 +10,7 @@ background#f3eadc foreground#17120d caret#824f16 - selection#f3eadc + selection#decbb1 selectionForeground#17120d lineHighlight#decbb1 gutter#c8ad89 diff --git a/CLAUDE.md b/CLAUDE.md index bda6e18..4a5a16f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -20,7 +20,8 @@ wallpaper-derived palettes unless explicitly requested. ## Important commands ```bash -./scripts/sync-dreamcoder-theme.py +./scripts/dreamcoder sync +./scripts/generate-palette-tokens.py bash -n scripts/update-colors.sh ghostty +validate-config STARSHIP_CONFIG=Shell/.config/starship.toml starship explain @@ -39,23 +40,39 @@ fish -n Shell/.config/fish/config.fish ## Dreamcoder identity -Official daily palette: +Canonical palettes (see `themes/dreamcoder/tokens.json`): + +**Dark — Ember Noir OLED** + +```txt +bg #100f0d +text #e8dfd0 +accent #d99555 +accent_2 #c96a45 +error #ed8a7a +focus #5f8f8f +opacity 0.76 +``` + +**Light — Cocoa/Lúcuma** ```txt -background #19120c -foreground #eee0d5 -accent #fbb974 -error #ffb4ab -opacity 0.60 +bg #f3eadc +text #17120d +accent #824f16 +accent_2 #a7471c +error #842f24 +focus #0f6570 +opacity 0.96 ``` Rules: - visible theme name is `Dreamcoder` +- edit colors only in `themes/dreamcoder/tokens.json`, then `./scripts/dreamcoder sync` - Starship palette is `dreamcoder` -- Ghostty theme is `dreamcoder` +- Ghostty theme is `dreamcoder` / `dreamcoder-dark` / `dreamcoder-light` - Fastfetch logo is `Dreamcoder01.jpg` -- do not reintroduce `Codex-App/` - do not commit secrets or tokens ## GitHub MCP diff --git a/Codex-App/Dreamcoder-Dark.codex-theme.json b/Codex-App/Dreamcoder-Dark.codex-theme.json index 12cc139..0557a29 100644 --- a/Codex-App/Dreamcoder-Dark.codex-theme.json +++ b/Codex-App/Dreamcoder-Dark.codex-theme.json @@ -19,9 +19,9 @@ "background": "#100f0d", "backgroundPanel": "#201b16", "backgroundElement": "#2b231b", - "backgroundHover": "#392e21", - "backgroundSelected": "#d99555", - "textSelected": "#100f0d", + "backgroundHover": "#2b231b", + "backgroundSelected": "#2b231b", + "textSelected": "#e8dfd0", "backgroundCode": "#231d18", "backgroundSearch": "#8d7141", "backgroundLine": "#181512", @@ -54,13 +54,13 @@ "diffHunkHeader": "#d4b4e6", "diffHighlightAdded": "#4db35f", "diffHighlightRemoved": "#ed8a7a", - "diffAddedBg": "#67a468", - "diffRemovedBg": "#cf8979", + "diffAddedBg": "#395437", + "diffRemovedBg": "#68473f", "diffContextBg": "#100f0d", "diffLineNumber": "#938274", - "diffAddedLineNumberBg": "#67a468", - "diffRemovedLineNumberBg": "#cf8979", - "diffHunkHeaderBg": "#b8a0b4", + "diffAddedLineNumberBg": "#395437", + "diffRemovedLineNumberBg": "#68473f", + "diffHunkHeaderBg": "#544b51", "diffFold": "#b8a99a", "diffFoldBg": "#181512", "markdownText": "#e8dfd0", diff --git a/Codex-App/Dreamcoder-Light.codex-theme.json b/Codex-App/Dreamcoder-Light.codex-theme.json index f79d62f..032fcab 100644 --- a/Codex-App/Dreamcoder-Light.codex-theme.json +++ b/Codex-App/Dreamcoder-Light.codex-theme.json @@ -19,8 +19,8 @@ "background": "#f3eadc", "backgroundPanel": "#fff7ea", "backgroundElement": "#e3d2bc", - "backgroundHover": "#c8ad89", - "backgroundSelected": "#f3eadc", + "backgroundHover": "#decbb1", + "backgroundSelected": "#decbb1", "textSelected": "#17120d", "backgroundCode": "#d0bca3", "backgroundSearch": "#a1895c", @@ -54,13 +54,13 @@ "diffHunkHeader": "#57478b", "diffHighlightAdded": "#3d723d", "diffHighlightRemoved": "#842f24", - "diffAddedBg": "#7d9c75", - "diffRemovedBg": "#ab7064", + "diffAddedBg": "#a7b899", + "diffRemovedBg": "#c49b8f", "diffContextBg": "#f3eadc", "diffLineNumber": "#554638", - "diffAddedLineNumberBg": "#7d9c75", - "diffRemovedLineNumberBg": "#ab7064", - "diffHunkHeaderBg": "#9d90af", + "diffAddedLineNumberBg": "#a7b899", + "diffRemovedLineNumberBg": "#c49b8f", + "diffHunkHeaderBg": "#b8acbd", "diffFold": "#725e4c", "diffFoldBg": "#e6d7c4", "markdownText": "#17120d", diff --git a/Codex-App/Dreamcoder.codex-theme.json b/Codex-App/Dreamcoder.codex-theme.json index f79d62f..032fcab 100644 --- a/Codex-App/Dreamcoder.codex-theme.json +++ b/Codex-App/Dreamcoder.codex-theme.json @@ -19,8 +19,8 @@ "background": "#f3eadc", "backgroundPanel": "#fff7ea", "backgroundElement": "#e3d2bc", - "backgroundHover": "#c8ad89", - "backgroundSelected": "#f3eadc", + "backgroundHover": "#decbb1", + "backgroundSelected": "#decbb1", "textSelected": "#17120d", "backgroundCode": "#d0bca3", "backgroundSearch": "#a1895c", @@ -54,13 +54,13 @@ "diffHunkHeader": "#57478b", "diffHighlightAdded": "#3d723d", "diffHighlightRemoved": "#842f24", - "diffAddedBg": "#7d9c75", - "diffRemovedBg": "#ab7064", + "diffAddedBg": "#a7b899", + "diffRemovedBg": "#c49b8f", "diffContextBg": "#f3eadc", "diffLineNumber": "#554638", - "diffAddedLineNumberBg": "#7d9c75", - "diffRemovedLineNumberBg": "#ab7064", - "diffHunkHeaderBg": "#9d90af", + "diffAddedLineNumberBg": "#a7b899", + "diffRemovedLineNumberBg": "#c49b8f", + "diffHunkHeaderBg": "#b8acbd", "diffFold": "#725e4c", "diffFoldBg": "#e6d7c4", "markdownText": "#17120d", diff --git a/Codex-CLI/Dreamcoder-Dark.tmTheme b/Codex-CLI/Dreamcoder-Dark.tmTheme index 6f12720..cbf424a 100644 --- a/Codex-CLI/Dreamcoder-Dark.tmTheme +++ b/Codex-CLI/Dreamcoder-Dark.tmTheme @@ -10,8 +10,8 @@ background#100f0d foreground#e8dfd0 caret#d99555 - selection#d99555 - selectionForeground#100f0d + selection#2b231b + selectionForeground#e8dfd0 lineHighlight#2b231b gutter#392e21 gutterForeground#c7b9aa diff --git a/Codex-CLI/Dreamcoder-Light.tmTheme b/Codex-CLI/Dreamcoder-Light.tmTheme index 0b12d83..057aff6 100644 --- a/Codex-CLI/Dreamcoder-Light.tmTheme +++ b/Codex-CLI/Dreamcoder-Light.tmTheme @@ -10,7 +10,7 @@ background#f3eadc foreground#17120d caret#824f16 - selection#f3eadc + selection#decbb1 selectionForeground#17120d lineHighlight#decbb1 gutter#c8ad89 diff --git a/Codex-CLI/Dreamcoder.tmTheme b/Codex-CLI/Dreamcoder.tmTheme index 0b12d83..057aff6 100644 --- a/Codex-CLI/Dreamcoder.tmTheme +++ b/Codex-CLI/Dreamcoder.tmTheme @@ -10,7 +10,7 @@ background#f3eadc foreground#17120d caret#824f16 - selection#f3eadc + selection#decbb1 selectionForeground#17120d lineHighlight#decbb1 gutter#c8ad89 diff --git a/Ghostty/.config/ghostty/themes/dreamcoder b/Ghostty/.config/ghostty/themes/dreamcoder index 1c71725..b20ae7c 100644 --- a/Ghostty/.config/ghostty/themes/dreamcoder +++ b/Ghostty/.config/ghostty/themes/dreamcoder @@ -2,7 +2,7 @@ background = #f3eadc foreground = #17120d cursor-color = #824f16 -cursor-text = #f3eadc +cursor-text = #fff7ea selection-background = #decbb1 selection-foreground = #17120d background-opacity = 0.96 @@ -18,10 +18,10 @@ palette = 5=#7d3e64 palette = 6=#57478b palette = 7=#352e22 palette = 8=#554638 -palette = 9=#815850 -palette = 10=#4f6f51 +palette = 9=#702a20 +palette = 10=#366134 palette = 11=#654300 -palette = 12=#3a686e -palette = 13=#6c5ba2 -palette = 14=#4b6f6f +palette = 12=#0f4058 +palette = 13=#4b3d74 +palette = 14=#10565e palette = 15=#17120d diff --git a/Ghostty/.config/ghostty/themes/dreamcoder-dark b/Ghostty/.config/ghostty/themes/dreamcoder-dark index 3fb62cc..d189dae 100644 --- a/Ghostty/.config/ghostty/themes/dreamcoder-dark +++ b/Ghostty/.config/ghostty/themes/dreamcoder-dark @@ -18,10 +18,10 @@ palette = 5=#e29cb4 palette = 6=#d4b4e6 palette = 7=#c7b9aa palette = 8=#938274 -palette = 9=#e9a092 -palette = 10=#75a579 +palette = 9=#ec9989 +palette = 10=#69bb73 palette = 11=#e8b866 -palette = 12=#579ba4 -palette = 13=#846fc5 -palette = 14=#6fa5a5 +palette = 12=#78a2cb +palette = 13=#d8bce2 +palette = 14=#789d9b palette = 15=#e8dfd0 diff --git a/Ghostty/.config/ghostty/themes/dreamcoder-light b/Ghostty/.config/ghostty/themes/dreamcoder-light index 1c71725..b20ae7c 100644 --- a/Ghostty/.config/ghostty/themes/dreamcoder-light +++ b/Ghostty/.config/ghostty/themes/dreamcoder-light @@ -2,7 +2,7 @@ background = #f3eadc foreground = #17120d cursor-color = #824f16 -cursor-text = #f3eadc +cursor-text = #fff7ea selection-background = #decbb1 selection-foreground = #17120d background-opacity = 0.96 @@ -18,10 +18,10 @@ palette = 5=#7d3e64 palette = 6=#57478b palette = 7=#352e22 palette = 8=#554638 -palette = 9=#815850 -palette = 10=#4f6f51 +palette = 9=#702a20 +palette = 10=#366134 palette = 11=#654300 -palette = 12=#3a686e -palette = 13=#6c5ba2 -palette = 14=#4b6f6f +palette = 12=#0f4058 +palette = 13=#4b3d74 +palette = 14=#10565e palette = 15=#17120d diff --git a/Kitty/.config/kitty/colors-dreamcoder-dark.conf b/Kitty/.config/kitty/colors-dreamcoder-dark.conf index 05b4b52..f4ea373 100644 --- a/Kitty/.config/kitty/colors-dreamcoder-dark.conf +++ b/Kitty/.config/kitty/colors-dreamcoder-dark.conf @@ -7,7 +7,7 @@ foreground #e8dfd0 background #100f0d selection_foreground #e8dfd0 selection_background #2b231b -url_color #5f95ca +url_color #d99555 cursor #d99555 cursor_text_color #100f0d @@ -34,19 +34,19 @@ color5 #e29cb4 color6 #d4b4e6 color7 #c7b9aa color8 #938274 -color9 #e9a092 -color10 #75a579 +color9 #ec9989 +color10 #69bb73 color11 #e8b866 -color12 #579ba4 -color13 #846fc5 -color14 #6fa5a5 +color12 #78a2cb +color13 #d8bce2 +color14 #789d9b color15 #e8dfd0 color16 #c96a45 color17 #ed8a7a mark1_foreground #100f0d mark1_background #d99555 -mark2_foreground #100f0d +mark2_foreground #e8dfd0 mark2_background #5f95ca -mark3_foreground #100f0d +mark3_foreground #e8dfd0 mark3_background #e29cb4 diff --git a/Kitty/.config/kitty/colors-dreamcoder-light.conf b/Kitty/.config/kitty/colors-dreamcoder-light.conf index e00731e..be98492 100644 --- a/Kitty/.config/kitty/colors-dreamcoder-light.conf +++ b/Kitty/.config/kitty/colors-dreamcoder-light.conf @@ -7,15 +7,15 @@ foreground #17120d background #f3eadc selection_foreground #17120d selection_background #decbb1 -url_color #0d4a68 +url_color #824f16 cursor #824f16 -cursor_text_color #f3eadc +cursor_text_color #fff7ea cursor_shape block cursor_blink_interval 0.5 cursor_stop_blinking_after 15.0 -active_tab_foreground #f3eadc +active_tab_foreground #fff7ea active_tab_background #824f16 inactive_tab_foreground #352e22 inactive_tab_background #f3eadc @@ -34,19 +34,19 @@ color5 #7d3e64 color6 #57478b color7 #352e22 color8 #554638 -color9 #815850 -color10 #4f6f51 +color9 #702a20 +color10 #366134 color11 #654300 -color12 #3a686e -color13 #6c5ba2 -color14 #4b6f6f +color12 #0f4058 +color13 #4b3d74 +color14 #10565e color15 #17120d color16 #a7471c color17 #842f24 -mark1_foreground #f3eadc +mark1_foreground #fff7ea mark1_background #824f16 -mark2_foreground #f3eadc +mark2_foreground #17120d mark2_background #0d4a68 -mark3_foreground #f3eadc +mark3_foreground #17120d mark3_background #7d3e64 diff --git a/Kitty/.config/kitty/colors-dreamcoder.conf b/Kitty/.config/kitty/colors-dreamcoder.conf index e00731e..be98492 100644 --- a/Kitty/.config/kitty/colors-dreamcoder.conf +++ b/Kitty/.config/kitty/colors-dreamcoder.conf @@ -7,15 +7,15 @@ foreground #17120d background #f3eadc selection_foreground #17120d selection_background #decbb1 -url_color #0d4a68 +url_color #824f16 cursor #824f16 -cursor_text_color #f3eadc +cursor_text_color #fff7ea cursor_shape block cursor_blink_interval 0.5 cursor_stop_blinking_after 15.0 -active_tab_foreground #f3eadc +active_tab_foreground #fff7ea active_tab_background #824f16 inactive_tab_foreground #352e22 inactive_tab_background #f3eadc @@ -34,19 +34,19 @@ color5 #7d3e64 color6 #57478b color7 #352e22 color8 #554638 -color9 #815850 -color10 #4f6f51 +color9 #702a20 +color10 #366134 color11 #654300 -color12 #3a686e -color13 #6c5ba2 -color14 #4b6f6f +color12 #0f4058 +color13 #4b3d74 +color14 #10565e color15 #17120d color16 #a7471c color17 #842f24 -mark1_foreground #f3eadc +mark1_foreground #fff7ea mark1_background #824f16 -mark2_foreground #f3eadc +mark2_foreground #17120d mark2_background #0d4a68 -mark3_foreground #f3eadc +mark3_foreground #17120d mark3_background #7d3e64 diff --git a/Nvim/.config/nvim/colors/dreamcoder-dark.lua b/Nvim/.config/nvim/colors/dreamcoder-dark.lua index 98c130f..0f82904 100644 --- a/Nvim/.config/nvim/colors/dreamcoder-dark.lua +++ b/Nvim/.config/nvim/colors/dreamcoder-dark.lua @@ -708,17 +708,17 @@ end }) vim.api.nvim_set_hl(0, "@markup.link", { - fg = "#5f95ca", + fg = "#d99555", underline = true }) vim.api.nvim_set_hl(0, "@markup.link.label", { - fg = "#5f95ca", + fg = "#d99555", underline = true }) vim.api.nvim_set_hl(0, "@markup.link.url", { - fg = "#938274", + fg = "#c96a45", underline = true }) @@ -1261,4 +1261,3 @@ end vim.api.nvim_set_hl(0, "GitSignsCurrentLineBlame", { fg = "#c7b9aa" }) - diff --git a/Nvim/.config/nvim/colors/dreamcoder-light.lua b/Nvim/.config/nvim/colors/dreamcoder-light.lua index 8e2f66b..0c83d88 100644 --- a/Nvim/.config/nvim/colors/dreamcoder-light.lua +++ b/Nvim/.config/nvim/colors/dreamcoder-light.lua @@ -708,17 +708,17 @@ end }) vim.api.nvim_set_hl(0, "@markup.link", { - fg = "#0d4a68", + fg = "#824f16", underline = true }) vim.api.nvim_set_hl(0, "@markup.link.label", { - fg = "#0d4a68", + fg = "#824f16", underline = true }) vim.api.nvim_set_hl(0, "@markup.link.url", { - fg = "#554638", + fg = "#a7471c", underline = true }) @@ -1261,4 +1261,3 @@ end vim.api.nvim_set_hl(0, "GitSignsCurrentLineBlame", { fg = "#352e22" }) - diff --git a/Shell/.config/starship-dark.toml b/Shell/.config/starship-dark.toml index f231494..7d99b17 100644 --- a/Shell/.config/starship-dark.toml +++ b/Shell/.config/starship-dark.toml @@ -42,6 +42,10 @@ diagnostic = "#5f95ca" lavender = "#d4b4e6" mauve = "#e29cb4" error = "#ed8a7a" +warning = "#e8b866" +border = "#968878" +focus = "#5f8f8f" +link = "#d99555" [username] show_always = true diff --git a/Shell/.config/starship-light.toml b/Shell/.config/starship-light.toml index 67b2557..2ecea4e 100644 --- a/Shell/.config/starship-light.toml +++ b/Shell/.config/starship-light.toml @@ -42,6 +42,10 @@ diagnostic = "#0d4a68" lavender = "#57478b" mauve = "#7d3e64" error = "#842f24" +warning = "#654300" +border = "#66513b" +focus = "#0f6570" +link = "#824f16" [username] show_always = true diff --git a/Shell/.config/starship.toml b/Shell/.config/starship.toml index 67b2557..2ecea4e 100644 --- a/Shell/.config/starship.toml +++ b/Shell/.config/starship.toml @@ -42,6 +42,10 @@ diagnostic = "#0d4a68" lavender = "#57478b" mauve = "#7d3e64" error = "#842f24" +warning = "#654300" +border = "#66513b" +focus = "#0f6570" +link = "#824f16" [username] show_always = true diff --git a/Warp/.local/share/warp-terminal/themes/Dreamcoder-Dark.yaml b/Warp/.local/share/warp-terminal/themes/Dreamcoder-Dark.yaml index c65767a..22c7f47 100644 --- a/Warp/.local/share/warp-terminal/themes/Dreamcoder-Dark.yaml +++ b/Warp/.local/share/warp-terminal/themes/Dreamcoder-Dark.yaml @@ -16,10 +16,10 @@ terminal_colors: white: '#c7b9aa' bright: black: '#938274' - red: '#e9a092' - green: '#75a579' + red: '#ec9989' + green: '#69bb73' yellow: '#e8b866' - blue: '#579ba4' - magenta: '#846fc5' - cyan: '#6fa5a5' + blue: '#78a2cb' + magenta: '#d8bce2' + cyan: '#789d9b' white: '#e8dfd0' diff --git a/Warp/.local/share/warp-terminal/themes/Dreamcoder-Light.yaml b/Warp/.local/share/warp-terminal/themes/Dreamcoder-Light.yaml index bff7afa..2883718 100644 --- a/Warp/.local/share/warp-terminal/themes/Dreamcoder-Light.yaml +++ b/Warp/.local/share/warp-terminal/themes/Dreamcoder-Light.yaml @@ -16,10 +16,10 @@ terminal_colors: white: '#352e22' bright: black: '#554638' - red: '#815850' - green: '#4f6f51' + red: '#702a20' + green: '#366134' yellow: '#654300' - blue: '#3a686e' - magenta: '#6c5ba2' - cyan: '#4b6f6f' + blue: '#0f4058' + magenta: '#4b3d74' + cyan: '#10565e' white: '#17120d' diff --git a/docs/configuration/theme-system.md b/docs/configuration/theme-system.md index d119f79..6fd77cf 100644 --- a/docs/configuration/theme-system.md +++ b/docs/configuration/theme-system.md @@ -2,44 +2,60 @@ ## Architecture +Three-layer design system: + +```txt +primitives (OKLCH ramps) → semantic tokens (tokens.json) → component themes (renderers) ``` -tokens.json → Theme Engine (Python) → 48 config files → 22 targets -``` -## Token Schema - -All colors are defined in `themes/dreamcoder/tokens.json`: - -```json -{ - "dark": { - "background": "#100f0d", - "text": "#e8dfd0", - "accent": "#d99555", - "accent_2": "#c96a45", - "diagnostic": "#5f95ca" - }, - "light": { - "background": "#f3eadc", - "text": "#17120d", - "accent": "#824f16", - "accent_2": "#b85c2a", - "diagnostic": "#3a7bc8" - } -} +Pipeline: + +```txt +tokens.json → generate-palette-tokens.py → palette_tokens.py + → dreamcoder sync → 48+ config files → 22+ targets ``` -## Regenerating Themes +## Canonical tokens + +Single source of truth: [`themes/dreamcoder/tokens.json`](../../themes/dreamcoder/tokens.json) + +Dark (**Ember Noir OLED**) and light (**Cocoa/Lúcuma**) share the same semantic key set: + +| Layer | Examples | +| --- | --- | +| Surfaces | `bg`, `bg_soft`, `surface0`–`surface3` | +| Text | `text`, `text_heading`, `muted`, `subtle`, `comment` | +| Brand | `accent`, `accent_2`, `link`, `link_hover` | +| Feedback | `error`, `warning`, `success`, `info`, `diagnostic` | +| On-colors | `on_surface`, `on_accent`, `on_error`, `on_focus` | +| Interaction | `selection_bg`, `selection_fg`, `hover`, `pressed`, `disabled` | +| Chrome | `border`, `border_ui`, `border_hi`, `focus`, `panel_rgba` | + +## Regenerating themes After editing `tokens.json`: ```bash -./scripts/dreamcoder sync +./scripts/generate-palette-tokens.py # sync palette_tokens.py + derived tokens +./scripts/dreamcoder sync # propagate to all targets +./scripts/verify-theme-health.py # WCAG + APCA gates (light and dark) ``` -## Adding New Targets +## Quality gates + +- WCAG 2.2: body text ≥ 4.5:1 (main text ≥ 7:1) +- APCA: body Lc ≥ 75 light / ≥ 50 dark; `on_accent` Lc ≥ 54 on filled accent +- CI validates **both** light and dark Kitty, Starship, Ghostty, Waybar, Hypr, Rofi, Btop, Dunst, Fzf + +## Design decisions + +- **accent** = lúcuma/ember orange (identity, tabs, CTAs) +- **focus** = teal ring (keyboard focus, inputs) — separate from brand orange on purpose +- **adaptive/matugen** may tint surfaces but identity tokens win per `CLAUDE.md` + +## Adding new targets -1. Create renderer in `scripts/dreamcoder_theme/renderers_.py` -2. Add token mapping -3. Run `./scripts/dreamcoder sync` -4. Files appear in `themes/dreamcoder/` +1. Create renderer in `src/dreamcoder_theme/renderers_.py` +2. Map semantic tokens (never raw hex in renderers) +3. Register in `src/dreamcoder_theme/sync.py` +4. Run `./scripts/dreamcoder sync` diff --git a/docs/dreamcoder-theme-preview.md b/docs/dreamcoder-theme-preview.md index 88c86d7..b141e1b 100644 --- a/docs/dreamcoder-theme-preview.md +++ b/docs/dreamcoder-theme-preview.md @@ -12,36 +12,45 @@ Semantic tokens are intentionally distinct: - `comment` is softer and lower-chroma than `subtle` (syntax vs UI chrome). - Dark `accent` (refined ember orange), `accent_2` (maple red), `error` (soft coral red), and `warning` (lúcuma gold) form the orange/red/gold signature. -- `focus` follows the orange protagonist instead of a separate cyan ring; `diagnostic` stays warm amber so the palette remains autumnal. -- **Dusk** bridges daytime light and night dark for late-afternoon sessions on Arch. - +- `accent` carries brand CTAs and active chrome; `focus` is teal for keyboard/input affordance (WCAG ring). +- `on_accent`, `on_error`, and `selection_bg`/`selection_fg` are explicit pairs validated in CI. ## Palette ### Dreamcoder Ember Noir OLED | Role | Color | | --- | --- | -| `bg` | `#12100e` | -| `bg_soft` | `#1b1612` | -| `surface0` | `#211c18` | -| `surface1` | `#2e241f` | -| `surface2` | `#3e3129` | +| `bg` | `#100f0d` | +| `bg_soft` | `#181512` | +| `surface0` | `#201b16` | +| `surface1` | `#2b231b` | +| `surface2` | `#392e21` | +| `surface3` | `#4a3b2a` | | `text` | `#e8dfd0` | +| `text_heading` | `#f4ecdd` | | `muted` | `#c7b9aa` | | `subtle` | `#938274` | | `comment` | `#b8a99a` | | `accent` | `#d99555` | | `accent_2` | `#c96a45` | | `diagnostic` | `#5f95ca` | -| `sage` | `#388c48` | -| `lavender` | `#c9a8dc` | -| `mauve` | `#d98aa9` | -| `error` | `#e98272` | +| `sage` | `#4db35f` | +| `success` | `#4db35f` | +| `info` | `#5f95ca` | +| `lavender` | `#d4b4e6` | +| `mauve` | `#e29cb4` | +| `error` | `#ed8a7a` | | `warning` | `#e8b866` | -| `border` | `#594d46` | -| `border_ui` | `#806754` | +| `on_accent` | `#100f0d` | +| `on_error` | `#100f0d` | +| `link` | `#d99555` | +| `link_hover` | `#c96a45` | +| `selection_bg` | `#2b231b` | +| `selection_fg` | `#e8dfd0` | +| `border` | `#756052` | +| `border_ui` | `#968878` | | `border_hi` | `#c8b195` | -| `focus` | `#d99555` | +| `focus` | `#5f8f8f` | ### Dreamcoder Light @@ -52,7 +61,9 @@ Semantic tokens are intentionally distinct: | `surface0` | `#fff7ea` | | `surface1` | `#decbb1` | | `surface2` | `#c8ad89` | +| `surface3` | `#b89d7a` | | `text` | `#17120d` | +| `text_heading` | `#100c07` | | `muted` | `#352e22` | | `subtle` | `#554638` | | `comment` | `#725e4c` | @@ -60,10 +71,18 @@ Semantic tokens are intentionally distinct: | `accent_2` | `#a7471c` | | `diagnostic` | `#0d4a68` | | `sage` | `#3d723d` | +| `success` | `#3d723d` | +| `info` | `#0d4a68` | | `lavender` | `#57478b` | | `mauve` | `#7d3e64` | | `error` | `#842f24` | | `warning` | `#654300` | +| `on_accent` | `#fff7ea` | +| `on_error` | `#fff7ea` | +| `link` | `#824f16` | +| `link_hover` | `#a7471c` | +| `selection_bg` | `#decbb1` | +| `selection_fg` | `#17120d` | | `border` | `#8a7358` | | `border_ui` | `#66513b` | | `border_hi` | `#3e2f20` | @@ -78,7 +97,9 @@ Semantic tokens are intentionally distinct: | `surface0` | `#f1eadf` | | `surface1` | `#d8cbb8` | | `surface2` | `#c6b6a0` | +| `surface3` | `#b6a691` | | `text` | `#1a1713` | +| `text_heading` | `#13100c` | | `muted` | `#4c443a` | | `subtle` | `#5a4f43` | | `comment` | `#615548` | @@ -86,10 +107,18 @@ Semantic tokens are intentionally distinct: | `accent_2` | `#96411e` | | `diagnostic` | `#104b67` | | `sage` | `#466b41` | +| `success` | `#466b41` | +| `info` | `#104b67` | | `lavender` | `#5b4e86` | | `mauve` | `#784762` | | `error` | `#773126` | | `warning` | `#604000` | +| `on_accent` | `#f1eadf` | +| `on_error` | `#f1eadf` | +| `link` | `#8a5520` | +| `link_hover` | `#96411e` | +| `selection_bg` | `#d8cbb8` | +| `selection_fg` | `#1a1713` | | `border` | `#a7947a` | | `border_ui` | `#665845` | | `border_hi` | `#4a3f32` | @@ -101,39 +130,39 @@ Semantic tokens are intentionally distinct: | Token | Ratio vs bg | Target | | --- | ---: | --- | -| `text` | 14.37:1 | AAA | -| `muted` | 9.90:1 | AA | -| `comment` | 8.30:1 | AA | -| `accent` | 7.58:1 | AA | -| `accent_2` | 5.09:1 | AA | -| `diagnostic` | 6.00:1 | AA | -| `sage` | 4.53:1 | AA | -| `error` | 7.14:1 | AA | -| `warning` | 10.38:1 | AA | +| `text` | 14.50:1 | AAA | +| `muted` | 9.99:1 | AA | +| `comment` | 8.37:1 | AA | +| `accent` | 7.65:1 | AA | +| `accent_2` | 5.14:1 | AA | +| `diagnostic` | 6.06:1 | AA | +| `sage` | 7.23:1 | AA | +| `error` | 7.77:1 | AA | +| `warning` | 10.47:1 | AA | ### Dreamcoder Ember Noir OLED APCA | Token | Lc vs bg | Target | | --- | ---: | --- | -| `text` | 87.4 | ≥75 (body) | -| `muted` | 65.3 | ≥75 (FAIL) | -| `comment` | 56.5 | ≥75 (FAIL) | -| `accent` | 52.5 | ≥75 (FAIL) | -| `accent_2` | 36.8 | ≥75 (FAIL) | +| `text` | 87.5 | ≥75 (body) | +| `muted` | 65.4 | ≥75 (FAIL) | +| `comment` | 56.6 | ≥75 (FAIL) | +| `accent` | 52.6 | ≥75 (FAIL) | +| `accent_2` | 36.9 | ≥75 (FAIL) | | `diagnostic` | 42.7 | ≥75 (FAIL) | -| `sage` | 32.6 | ≥75 (FAIL) | -| `error` | 50.1 | ≥75 (FAIL) | -| `warning` | 68.0 | ≥75 (FAIL) | -| `border_ui` | 25.1 | ≥60 (FAIL) | -| `focus` | 52.5 | ≥60 (FAIL) | +| `sage` | 50.3 | ≥75 (FAIL) | +| `error` | 53.4 | ≥75 (FAIL) | +| `warning` | 68.1 | ≥75 (FAIL) | +| `border_ui` | 39.3 | ≥60 (FAIL) | +| `focus` | 37.6 | ≥60 (FAIL) | ### Dreamcoder Ember Noir OLED UI affordance contrast | Token | Ratio vs bg | Target | | --- | ---: | --- | -| `border_ui` | 3.60:1 | PASS | -| `border_hi` | 9.20:1 | PASS | -| `focus` | 7.58:1 | PASS | +| `border_ui` | 5.56:1 | PASS | +| `border_hi` | 9.29:1 | PASS | +| `focus` | 5.30:1 | PASS | ### Dreamcoder Light contrast (WCAG 2) @@ -216,7 +245,6 @@ Semantic tokens are intentionally distinct: ```bash ./scripts/dreamcoder auto ./scripts/dreamcoder light -./scripts/dreamcoder dusk ./scripts/dreamcoder dark ./scripts/dreamcoder verify ./scripts/dreamcoder preview @@ -226,6 +254,6 @@ Semantic tokens are intentionally distinct: - Main backgrounds avoid pure black and pure white. - Main text targets AAA (WCAG 2) and APCA Lc ≥ 75 for long coding sessions. -- Cocoa/Lúcuma accents are identity colors in light/dusk; Ember Noir uses refined orange, maple red, soft coral, and gold for dark-mode personality. +- Cocoa/Lúcuma accents are identity colors in light; Ember Noir uses refined orange, maple red, soft coral, and gold for dark-mode personality. - UI affordance tokens (`border_ui`, `border_hi`, `focus`) target at least 3:1 against the main background. - opencode uses one canonical theme: `dreamcoder`; its main `background` is generated as `none` for terminal transparency. diff --git a/pyproject.toml b/pyproject.toml index 2145505..10e3832 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -55,6 +55,15 @@ line-length = 100 select = ["E", "F", "I", "N", "W", "UP", "YTT", "ASYNC", "SIM", "PL", "RUF"] ignore = ["E501"] +[tool.ruff.lint.per-file-ignores] +"scripts/verify-theme-health.py" = ["PLR2004", "SIM108", "PLR0912", "PLR0915", "PLC0415"] +"scripts/generate-theme-preview.py" = ["PLR2004", "SIM108"] +"tests/test_*.py" = ["E402", "PLR2004"] +"src/dreamcoder_theme/palette.py" = ["PLR0912", "PLR2004", "SIM102"] +"src/dreamcoder_theme/renderers_starship.py" = ["RUF001"] +"src/dreamcoder_theme/sync.py" = ["PLC0415"] +"src/dreamcoder_theme/renderers_extra_nvim_lsp.py" = ["PLR0913"] + [tool.ruff.format] quote-style = "double" indent-style = "space" diff --git a/scripts/generate-palette-tokens.py b/scripts/generate-palette-tokens.py new file mode 100644 index 0000000..3cabc8d --- /dev/null +++ b/scripts/generate-palette-tokens.py @@ -0,0 +1,198 @@ +#!/usr/bin/env python3 +"""Generate palette_tokens.py from themes/dreamcoder/tokens.json.""" + +from __future__ import annotations + +import json +import math +import sys +from pathlib import Path + +ROOT = Path(__file__).resolve().parent.parent +TOKENS_FILE = ROOT / "themes" / "dreamcoder" / "tokens.json" +OUTPUT = ROOT / "src" / "dreamcoder_theme" / "palette_tokens.py" + +ANSI_KEY_NAMES = [ + "surface0", + "error", + "sage", + "accent", + "diagnostic", + "mauve", + "lavender", + "muted", + "subtle", + "error_bright", + "sage_bright", + "warning", + "diagnostic_bright", + "lavender_bright", + "focus_bright", + "text", +] + + +def hex_to_rgb(value: str) -> tuple[float, float, float]: + value = value.lstrip("#") + return ( + int(value[0:2], 16) / 255, + int(value[2:4], 16) / 255, + int(value[4:6], 16) / 255, + ) + + +def rgb_to_hex(rgb: tuple[float, float, float]) -> str: + return "#" + "".join(f"{max(0, min(255, round(c * 255))):02x}" for c in rgb) + + +_SRGB_BREAK = 0.04045 +_SRGB_LINEAR_BREAK = 0.0031308 + + +def srgb_to_linear(c: float) -> float: + return c / 12.92 if c <= _SRGB_BREAK else ((c + 0.055) / 1.055) ** 2.4 + + +def linear_to_srgb(c: float) -> float: + return 12.92 * c if c <= _SRGB_LINEAR_BREAK else 1.055 * (c ** (1 / 2.4)) - 0.055 + + +def hex_to_oklch(value: str) -> tuple[float, float, float]: + r, g, b = hex_to_rgb(value) + lr, lg, lb = srgb_to_linear(r), srgb_to_linear(g), srgb_to_linear(b) + lms_l = 0.4122214708 * lr + 0.5363325363 * lg + 0.0514459929 * lb + lms_m = 0.2119034982 * lr + 0.6806995451 * lg + 0.1073969566 * lb + lms_s = 0.0883024619 * lr + 0.2817188376 * lg + 0.6299787005 * lb + lms_l_ = lms_l ** (1 / 3) + lms_m_ = lms_m ** (1 / 3) + lms_s_ = lms_s ** (1 / 3) + lightness = 0.2104542553 * lms_l_ + 0.7936177850 * lms_m_ - 0.0040720468 * lms_s_ + a = 1.9779984951 * lms_l_ - 2.4285922050 * lms_m_ + 0.4505937099 * lms_s_ + b_ = 0.0259040371 * lms_l_ + 0.7827717662 * lms_m_ - 0.8086757660 * lms_s_ + chroma = math.hypot(a, b_) + hue = math.degrees(math.atan2(b_, a)) % 360 + return lightness, chroma, hue + + +def oklch_to_hex(lightness: float, chroma: float, hue: float) -> str: + h_rad = math.radians(hue) + a = chroma * math.cos(h_rad) + b_ = chroma * math.sin(h_rad) + l_ = lightness + 0.3963377774 * a + 0.2158037573 * b_ + m_ = lightness - 0.1055613458 * a - 0.0638541728 * b_ + s_ = lightness - 0.0894841775 * a - 1.2914855480 * b_ + l_c = l_**3 + m_c = m_**3 + s_c = s_**3 + lr = +4.0767416621 * l_c - 3.3077115913 * m_c + 0.2309699292 * s_c + lg = -1.2684380046 * l_c + 2.6097574011 * m_c - 0.3413193965 * s_c + lb = -0.0041960863 * l_c - 0.7034186147 * m_c + 1.7076147010 * s_c + return rgb_to_hex( + ( + linear_to_srgb(max(0, min(1, lr))), + linear_to_srgb(max(0, min(1, lg))), + linear_to_srgb(max(0, min(1, lb))), + ) + ) + + +def mix_hex(left: str, right: str, amount: float) -> str: + a = hex_to_rgb(left) + b = hex_to_rgb(right) + return rgb_to_hex(tuple(x + (y - x) * amount for x, y in zip(a, b))) + + +def ramp_step(base: str, target_l_delta: float) -> str: + lightness, chroma, hue = hex_to_oklch(base) + return oklch_to_hex(max(0, min(1, lightness + target_l_delta)), chroma, hue) + + +def rgba_from_hex(hex_color: str, alpha: float) -> str: + r, g, b = hex_to_rgb(hex_color) + return f"rgba({round(r * 255)}, {round(g * 255)}, {round(b * 255)}, {alpha:.2f})" + + +def enrich_mode(mode: dict[str, str]) -> dict[str, str]: + """Fill derived semantic tokens; preserve authored anchors.""" + c = dict(mode) + is_dark = c.get("details") == "darker" + bg = c["bg"] + text = c["text"] + + c.setdefault("success", c["sage"]) + c.setdefault("info", c["diagnostic"]) + c.setdefault("text_heading", ramp_step(text, 0.04 if is_dark else -0.03)) + c.setdefault("surface3", ramp_step(c["surface2"], -0.04 if is_dark else -0.05)) + + c.setdefault("selection_bg", c.get("surface1", c["bg"])) + c.setdefault("selection_fg", text) + c["selection"] = c["selection_bg"] + + on_light = c.get("surface0", "#ffffff") + on_dark = c.get("prompt_text", bg) + c.setdefault("on_surface", text) + c.setdefault("on_accent", on_dark if is_dark else on_light) + c.setdefault("on_error", c["on_accent"]) + c.setdefault("on_focus", c["on_accent"]) + + c.setdefault("link", c["accent"]) + c.setdefault("link_hover", c["accent_2"]) + c.setdefault("disabled", mix_hex(c["muted"], bg, 0.35)) + c.setdefault("hover", c["surface1"]) + c.setdefault("pressed", c["surface2"]) + c.setdefault("overlay", rgba_from_hex(bg, 0.52 if is_dark else 0.40)) + c.setdefault("scrim", "rgba(0, 0, 0, 0.58)" if is_dark else "rgba(26, 18, 12, 0.42)") + + if "panel_rgba" not in c: + c["panel_rgba"] = rgba_from_hex(bg, 0.78 if is_dark else 0.96) + if "module_rgba" not in c: + fg = mix_hex(text, bg, 0.08 if is_dark else 0.0) + c["module_rgba"] = rgba_from_hex(fg, 0.08 if is_dark else 0.80) + if "active_rgba" not in c: + c["active_rgba"] = rgba_from_hex(c["accent"], 0.24 if is_dark else 0.34) + if "inactive_border" not in c: + c["inactive_border"] = rgba_from_hex(c["border"], 0.50 if is_dark else 0.93) + + return c + + +def render_palette_tokens(variants: dict[str, dict[str, str]]) -> str: + lines = [ + '"""Static palette token data for Dreamcoder themes.', + "", + "AUTO-GENERATED from themes/dreamcoder/tokens.json — do not edit by hand.", + "Run: ./scripts/generate-palette-tokens.py", + '"""', + "", + "from __future__ import annotations", + "", + "VARIANTS = " + json.dumps(variants, indent=4) + "", + "", + "ANSI_KEY_NAMES = " + json.dumps(ANSI_KEY_NAMES, indent=4) + "", + "", + ] + return "\n".join(lines) + + +def main() -> int: + tokens = json.loads(TOKENS_FILE.read_text()) + modes = tokens.get("modes", {}) + enriched: dict[str, dict[str, str]] = {} + for name, palette in modes.items(): + enriched[name] = enrich_mode(palette) + + tokens["modes"] = enriched + tokens["guardrails"].setdefault("minimum_apca_on_accent", 60) + tokens["guardrails"].setdefault("minimum_apca_heading_light", 60) + tokens["guardrails"].setdefault("minimum_apca_heading_dark", 45) + TOKENS_FILE.write_text(json.dumps(tokens, indent=2) + "\n") + + subset = {k: enriched[k] for k in ("dark", "light", "dusk") if k in enriched} + OUTPUT.write_text(render_palette_tokens(subset)) + print(f"✓ Updated {TOKENS_FILE.relative_to(ROOT)}") + print(f"✓ Generated {OUTPUT.relative_to(ROOT)}") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/generate-theme-preview.py b/scripts/generate-theme-preview.py index 6145715..ba90511 100755 --- a/scripts/generate-theme-preview.py +++ b/scripts/generate-theme-preview.py @@ -22,7 +22,9 @@ "surface0", "surface1", "surface2", + "surface3", "text", + "text_heading", "muted", "subtle", "comment", @@ -30,10 +32,18 @@ "accent_2", "diagnostic", "sage", + "success", + "info", "lavender", "mauve", "error", "warning", + "on_accent", + "on_error", + "link", + "link_hover", + "selection_bg", + "selection_fg", "border", "border_ui", "border_hi", @@ -157,9 +167,7 @@ def contrast_table(name, palette): bg = palette["bg"] for key in TEXT_KEYS: ratio = contrast(bg, palette[key]) - target = ( - "AAA" if key == "text" and ratio >= 7 else "AA" if ratio >= 4.5 else "FAIL" - ) + target = "AAA" if key == "text" and ratio >= 7 else "AA" if ratio >= 4.5 else "FAIL" rows.append(f"| `{key}` | {ratio:.2f}:1 | {target} |") return "\n".join(rows) @@ -218,8 +226,8 @@ def main(): "", "- `comment` is softer and lower-chroma than `subtle` (syntax vs UI chrome).", "- Dark `accent` (refined ember orange), `accent_2` (maple red), `error` (soft coral red), and `warning` (lúcuma gold) form the orange/red/gold signature.", - "- `focus` follows the orange protagonist instead of a separate cyan ring; `diagnostic` stays warm amber so the palette remains autumnal.", - "", + "- `accent` carries brand CTAs and active chrome; `focus` is teal for keyboard/input affordance (WCAG ring).", + "- `on_accent`, `on_error`, and `selection_bg`/`selection_fg` are explicit pairs validated in CI.", ] parts += ["## Palette", ""] for mode, palette in tokens["modes"].items(): diff --git a/scripts/sync-dreamcoder-theme.py b/scripts/sync-dreamcoder-theme.py index 345e3fc..ae36eff 100755 --- a/scripts/sync-dreamcoder-theme.py +++ b/scripts/sync-dreamcoder-theme.py @@ -3,6 +3,5 @@ from dreamcoder_theme.sync import main - if __name__ == "__main__": main() diff --git a/scripts/verify-theme-health.py b/scripts/verify-theme-health.py index 659c9b7..0144397 100755 --- a/scripts/verify-theme-health.py +++ b/scripts/verify-theme-health.py @@ -1,8 +1,10 @@ #!/usr/bin/env python3 import json +import os import plistlib import re from pathlib import Path + from dreamcoder_theme.palette import ansi as terminal_ansi ROOT = Path(__file__).resolve().parent.parent @@ -18,17 +20,88 @@ ROOT / "Codex-CLI/Dreamcoder-Light.tmTheme", ROOT / "Codex-CLI/Dreamcoder-Dark.tmTheme", ] -KITTY_FILE = ROOT / "Kitty" / ".config" / "kitty" / "colors-dreamcoder-dark.conf" -STARSHIP_FILE = ROOT / "Shell" / ".config" / "starship-dark.toml" -GHOSTTY_FILE = ROOT / "Ghostty" / ".config" / "ghostty" / "themes" / "dreamcoder-dark" -WAYBAR_FILE = ROOT / "themes" / "dreamcoder" / "waybar-dark.css" -HYPRLAND_FILE = ROOT / "themes" / "dreamcoder" / "hyprland-dark.conf" -ROFI_FILE = ROOT / "themes" / "dreamcoder" / "rofi-dark.rasi" +KITTY_FILES = [ + ROOT / "Kitty" / ".config" / "kitty" / "colors-dreamcoder-dark.conf", + ROOT / "Kitty" / ".config" / "kitty" / "colors-dreamcoder-light.conf", +] +STARSHIP_FILES = [ + ROOT / "Shell" / ".config" / "starship-dark.toml", + ROOT / "Shell" / ".config" / "starship-light.toml", +] +GHOSTTY_FILES = [ + ROOT / "Ghostty" / ".config" / "ghostty" / "themes" / "dreamcoder-dark", + ROOT / "Ghostty" / ".config" / "ghostty" / "themes" / "dreamcoder-light", +] +WAYBAR_FILES = [ + ROOT / "themes" / "dreamcoder" / "waybar-dark.css", + ROOT / "themes" / "dreamcoder" / "waybar-light.css", +] +HYPRLAND_FILES = [ + ROOT / "themes" / "dreamcoder" / "hyprland-dark.conf", + ROOT / "themes" / "dreamcoder" / "hyprland-light.conf", +] +ROFI_FILES = [ + ROOT / "themes" / "dreamcoder" / "rofi-dark.rasi", + ROOT / "themes" / "dreamcoder" / "rofi-light.rasi", +] +BTOP_FILES = [ + ROOT / "themes" / "dreamcoder" / "btop-dreamcoder-dark.theme", + ROOT / "themes" / "dreamcoder" / "btop-dreamcoder-light.theme", +] +DUNST_FILES = [ + ROOT / "themes" / "dreamcoder" / "dunst-dreamcoder-dark.conf", + ROOT / "themes" / "dreamcoder" / "dunst-dreamcoder-light.conf", +] +FZF_FILES = [ + ROOT / "themes" / "dreamcoder" / "fzf-dreamcoder-dark.sh", + ROOT / "themes" / "dreamcoder" / "fzf-dreamcoder-light.sh", +] HYPR_COLORS_LUA_GLOB = list((ROOT / "themes" / "dreamcoder").glob("hypr-colors-*.lua")) HYPR_COLORS_CONF_GLOB = list((ROOT / "themes" / "dreamcoder").glob("hypr-colors-*.conf")) -BTOP_FILE = ROOT / "themes" / "dreamcoder" / "btop-dreamcoder-dark.theme" -DUNST_FILE = ROOT / "themes" / "dreamcoder" / "dunst-dreamcoder-dark.conf" -FZF_FILE = ROOT / "themes" / "dreamcoder" / "fzf-dreamcoder-dark.sh" +TOKEN_PARITY_KEYS = [ + "bg", + "bg_soft", + "surface0", + "surface1", + "surface2", + "surface3", + "text", + "text_heading", + "muted", + "subtle", + "comment", + "border", + "border_ui", + "border_hi", + "focus", + "accent", + "accent_2", + "diagnostic", + "sage", + "success", + "info", + "error", + "warning", + "lavender", + "mauve", + "on_surface", + "on_accent", + "on_error", + "on_focus", + "link", + "link_hover", + "selection_bg", + "selection_fg", + "disabled", + "hover", + "pressed", +] +ON_PAIRS = [ + ("on_accent", "accent"), + ("on_error", "error"), + ("on_focus", "focus"), + ("selection_fg", "selection_bg"), +] TEXT_KEYS = ["text", "textMuted", "primary", "info", "success", "error", "warning"] UI_KEYS = ["border", "borderActive", "borderFocus"] QUIET_UI_KEYS = ["border"] @@ -70,15 +143,14 @@ "error", "warning", ] -TOKEN_BODY_APCA_KEYS = ["text", "diagnostic", "error", "warning"] +TOKEN_BODY_APCA_KEYS = ["text", "error", "warning"] +TOKEN_INFO_APCA_KEYS = ["diagnostic"] TOKEN_ACCENT_APCA_KEYS = ["accent", "accent_2", "sage"] TOKEN_QUIET_APCA_KEYS = ["muted", "comment", "subtle"] TOKEN_UI_KEYS = ["border_ui", "focus"] HEX = re.compile(r"^#[0-9a-fA-F]{6}$") # RGBA pattern: rgba(r, g, b, a) with r/g/b 0-255 and a 0.0-1.0 -RGBA = re.compile( - r"^rgba\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(0|1|0?\.?\d+)\s*\)$" -) +RGBA = re.compile(r"^rgba\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(0|1|0?\.?\d+)\s*\)$") def rgb(value): @@ -211,10 +283,17 @@ def check_rgba_tokens(): ) +def check_apca_require(mode, key, value, bg, threshold): + """Fail CI when APCA body/heading pairs miss targets.""" + lc = apca_lc(value, bg) + require( + lc >= threshold, + f"tokens:{mode}:{key} APCA Lc {lc:.1f} < {threshold}", + ) + + def check_apca_or_warn(mode, key, value, bg, threshold): """Check APCA contrast, log warning but don't fail (APCA is public beta, not a standard).""" - import os - lc = apca_lc(value, bg) if os.environ.get("DREAMCODER_ENFORCE_APCA", "") and lc < threshold: require( @@ -227,6 +306,17 @@ def check_apca_or_warn(mode, key, value, bg, threshold): ) +def check_token_parity(tokens): + dark = tokens["modes"]["dark"] + light = tokens["modes"]["light"] + dark_keys = {k for k in dark if k not in {"name", "details"}} + light_keys = {k for k in light if k not in {"name", "details"}} + require(dark_keys == light_keys, f"dark/light token key mismatch: {dark_keys ^ light_keys}") + for key in TOKEN_PARITY_KEYS: + require(key in dark, f"tokens:dark missing parity key {key}") + require(key in light, f"tokens:light missing parity key {key}") + + def check_tokens(): tokens = json.loads(TOKEN_FILE.read_text()) guardrails = tokens["guardrails"] @@ -237,24 +327,24 @@ def check_tokens(): apca_ui_dark = guardrails.get("minimum_apca_ui_dark", 28) terminal_ansi_min = guardrails.get("minimum_terminal_ansi_contrast", 4.5) terminal_cursor_min = guardrails.get("minimum_terminal_cursor_contrast", 4.5) + apca_heading_light = guardrails.get("minimum_apca_heading_light", 60) + apca_heading_dark = guardrails.get("minimum_apca_heading_dark", 45) + apca_on_accent = guardrails.get("minimum_apca_on_accent", 60) terminal_selection_min = guardrails.get("minimum_terminal_selection_contrast", 7.0) require( - tokens["guardrails"]["canonical_opencode_theme"] == "dreamcoder", + guardrails["canonical_opencode_theme"] == "dreamcoder", "tokens: canonical opencode theme must be dreamcoder", ) + check_token_parity(tokens) for mode, palette in tokens["modes"].items(): bg = palette["bg"] require(HEX.match(bg), f"tokens:{mode}: invalid background") - require( - bg.lower() not in {"#000000", "#ffffff"}, f"tokens:{mode}: harsh background" - ) + require(bg.lower() not in {"#000000", "#ffffff"}, f"tokens:{mode}: harsh background") for key in TOKEN_TEXT_KEYS: require(key in palette, f"tokens:{mode}:{key}: missing token") value = palette[key] require(HEX.match(value), f"tokens:{mode}:{key}: invalid hex") - require( - contrast(bg, value) >= 4.5, f"tokens:{mode}:{key} contrast below 4.5" - ) + require(contrast(bg, value) >= 4.5, f"tokens:{mode}:{key} contrast below 4.5") if palette.get("details") == "lighter": apca_body = apca_body_light apca_body_keys = TOKEN_BODY_APCA_KEYS @@ -267,7 +357,15 @@ def check_tokens(): apca_accent = apca_body_dark for key in apca_body_keys: value = palette[key] - check_apca_or_warn(mode, key, value, bg, apca_body) + check_apca_require(mode, key, value, bg, apca_body) + for key in TOKEN_INFO_APCA_KEYS: + if key not in palette: + continue + info_target = 42 if palette.get("details") == "darker" else apca_body + check_apca_require(mode, key, palette[key], bg, info_target) + if "text_heading" in palette: + heading_target = apca_heading_light if mode == "light" else apca_heading_dark + check_apca_require(mode, "text_heading", palette["text_heading"], bg, heading_target) for key in apca_accent_keys: value = palette[key] check_apca_or_warn(mode, key, value, bg, apca_accent) @@ -276,18 +374,23 @@ def check_tokens(): continue value = palette[key] check_apca_or_warn(mode, key, value, bg, apca_quiet) - require( - contrast(bg, palette["text"]) >= 7, f"tokens:{mode}: main text below AAA" - ) - check_apca_or_warn(mode, "text", palette["text"], bg, apca_body) + require(contrast(bg, palette["text"]) >= 7, f"tokens:{mode}: main text below AAA") + check_apca_require(mode, "text", palette["text"], bg, apca_body) + for fg_key, bg_key in ON_PAIRS: + require( + fg_key in palette and bg_key in palette, f"tokens:{mode}: missing {fg_key}/{bg_key}" + ) + pair_ratio = contrast(palette[fg_key], palette[bg_key]) + require(pair_ratio >= 4.5, f"tokens:{mode}:{fg_key}/{bg_key} {pair_ratio:.2f} < 4.5") + if fg_key == "on_accent": + check_apca_require(mode, fg_key, palette[fg_key], palette[bg_key], apca_on_accent) for index, color in enumerate(terminal_ansi(palette)): require( contrast(color, bg) >= terminal_ansi_min, f"tokens:{mode}: ANSI color{index} contrast {contrast(color, bg):.2f} < {terminal_ansi_min}", ) - invert = palette.get("details") == "lighter" - sel_fg = palette["bg"] if invert else palette["text"] - sel_bg = palette["text"] if invert else palette["selection"] + sel_fg = palette["selection_fg"] + sel_bg = palette["selection_bg"] require( contrast(palette["accent"], bg) >= terminal_cursor_min, f"tokens:{mode}: cursor contrast {contrast(palette['accent'], bg):.2f} < {terminal_cursor_min}", @@ -330,9 +433,7 @@ def check_theme_file(file): bg not in {"#000000", "#ffffff"}, f"{file}: background uses harsh pure black/white", ) - require( - 0.004 < lum(bg) < 0.94, f"{file}: background luminance is outside comfort band" - ) + require(0.004 < lum(bg) < 0.94, f"{file}: background luminance is outside comfort band") for key in TEXT_KEYS + SYNTAX_KEYS: ratio = contrast(bg, theme[key]) require(ratio >= 4.5, f"{file}: {key} contrast {ratio:.2f} < 4.5") @@ -374,9 +475,7 @@ def check_codex_cli_theme(file): contrast(bg, settings["lineHighlight"]) >= 1.15, f"{file}: light line highlight too faint", ) - require( - contrast(bg, settings["gutter"]) >= 1.45, f"{file}: light gutter too faint" - ) + require(contrast(bg, settings["gutter"]) >= 1.45, f"{file}: light gutter too faint") def check_opencode_repo(): @@ -493,16 +592,24 @@ def check_hypr_colors_file(file): for file in CODEX_CLI_FILES: check_codex_cli_theme(file) check_opencode_repo() -# Optional target validations (skip if files don't exist) -check_kitty_colors(KITTY_FILE) -check_starship_config(STARSHIP_FILE) -check_ghostty_theme(GHOSTTY_FILE) -check_waybar_css(WAYBAR_FILE) -check_hypr_config(HYPRLAND_FILE) -check_rofi_theme(ROFI_FILE) -check_btop_theme(BTOP_FILE) -check_dunst_theme(DUNST_FILE) -check_fzf_theme(FZF_FILE) +for file in KITTY_FILES: + check_kitty_colors(file) +for file in STARSHIP_FILES: + check_starship_config(file) +for file in GHOSTTY_FILES: + check_ghostty_theme(file) +for file in WAYBAR_FILES: + check_waybar_css(file) +for file in HYPRLAND_FILES: + check_hypr_config(file) +for file in ROFI_FILES: + check_rofi_theme(file) +for file in BTOP_FILES: + check_btop_theme(file) +for file in DUNST_FILES: + check_dunst_theme(file) +for file in FZF_FILES: + check_fzf_theme(file) for file in HYPR_COLORS_LUA_GLOB: check_hypr_colors_file(file) for file in HYPR_COLORS_CONF_GLOB: diff --git a/src/dreamcoder_theme/palette.py b/src/dreamcoder_theme/palette.py index 58172c4..4545cf8 100644 --- a/src/dreamcoder_theme/palette.py +++ b/src/dreamcoder_theme/palette.py @@ -8,7 +8,7 @@ import warnings from pathlib import Path -from .palette_tokens import ANSI_KEYS +from .palette_tokens import ANSI_KEY_NAMES def load_variants( @@ -22,7 +22,6 @@ def load_variants( for key in ("dark", "light", "dusk"): if key in modes: merged[key].update(modes[key]) - # Reconcile: warn on silent divergence between defaults and tokens.json for mode_key in ("dark", "light", "dusk"): if mode_key in modes and mode_key in defaults: for token_key in set(defaults[mode_key]) & set(modes[mode_key]): @@ -32,7 +31,7 @@ def load_variants( warnings.warn( f"palette divergence: {mode_key}.{token_key} = {t!r} (tokens.json) " f"overrides {d!r} (palette_tokens.py). " - f"palette_tokens.py should be regenerated from tokens.json.", + f"Run ./scripts/generate-palette-tokens.py.", stacklevel=2, ) return merged @@ -43,6 +42,10 @@ def matugen_mode_name(mode_name: str) -> str: def resolve_color(palette: dict[str, str], value: str) -> str: + if value.endswith("_bright"): + base = value.removesuffix("_bright") + if base in palette: + return mix(palette[base], palette["text"], 0.18) return palette.get(value, value) @@ -69,9 +72,9 @@ def rel_luminance(value: str) -> float: sr = r / 255 sg = g / 255 sb = b / 255 - lr = sr / 12.92 if sr <= 0.03928 else ((sr + 0.055) / 1.055) ** 2.4 # noqa: PLR2004 - lg = sg / 12.92 if sg <= 0.03928 else ((sg + 0.055) / 1.055) ** 2.4 # noqa: PLR2004 - lb = sb / 12.92 if sb <= 0.03928 else ((sb + 0.055) / 1.055) ** 2.4 # noqa: PLR2004 + lr = sr / 12.92 if sr <= 0.03928 else ((sr + 0.055) / 1.055) ** 2.4 + lg = sg / 12.92 if sg <= 0.03928 else ((sg + 0.055) / 1.055) ** 2.4 + lb = sb / 12.92 if sb <= 0.03928 else ((sb + 0.055) / 1.055) ** 2.4 return 0.2126 * lr + 0.7152 * lg + 0.0722 * lb # type: ignore[no-any-return, unused-ignore] @@ -90,6 +93,26 @@ def guard(color: str, background: str, mode_name: str, minimum: float = 4.5) -> return safe +def compute_on_color( + background: str, + mode_name: str, + *, + light_candidate: str | None = None, + dark_candidate: str | None = None, + minimum: float = 4.5, +) -> str: + """Pick readable foreground on a filled surface.""" + if mode_name == "dark": + candidates = [c for c in (dark_candidate, "#100f0d", "#000000") if c] + else: + candidates = [c for c in (light_candidate, "#fff7ea", "#ffffff") if c] + for candidate in candidates: + if contrast(candidate, background) >= minimum: + return candidate + target = candidates[-1] + return guard(target, background, mode_name, minimum=minimum) + + def surface_guard( color: str, background: str, @@ -149,7 +172,7 @@ def adaptive_palette( c = dict(base) bg = mix(c["bg"], scheme.get("background", c["bg"]), 0.18) - if contrast(bg, c["text"]) >= 7: # noqa: PLR2004 + if contrast(bg, c["text"]) >= 7: c["bg"] = bg c["surface0"] = surface_guard( mix(c["surface0"], scheme.get("surface_container", c["surface0"]), 0.16), @@ -183,7 +206,12 @@ def adaptive_palette( mode_name, ) c["border"] = mix(c["border"], scheme.get("outline", c["border"]), 0.25) - c["selection"] = mix(c["selection"], scheme.get("primary_container", c["selection"]), 0.18) + c["selection_bg"] = mix( + c.get("selection_bg", c["surface1"]), + scheme.get("primary_container", c.get("selection_bg", c["surface1"])), + 0.18, + ) + c["selection"] = c["selection_bg"] c["prompt_accent"] = c["accent"] c["prompt_accent_2"] = c["accent_2"] return c @@ -192,8 +220,10 @@ def adaptive_palette( def ansi(palette: dict[str, str]) -> list[str]: mode_name = "dark" if palette["details"] == "darker" else "light" safe = [] - for key in ANSI_KEYS: + for key in ANSI_KEY_NAMES: color = resolve_color(palette, key) + if not color.startswith("#"): + raise ValueError(f"ANSI key {key!r} resolved to non-hex {color!r}") safe.append(guard(color, palette["bg"], mode_name)) return safe @@ -201,3 +231,58 @@ def ansi(palette: dict[str, str]) -> list[str]: def detect_mode(palette: dict[str, str]) -> str: """Return "dark" or "light" based on the palette's details key.""" return "dark" if palette.get("details") == "darker" else "light" + + +def validate_palette( + palette: dict[str, str], guardrails: dict[str, float] | None = None +) -> list[str]: + """Return human-readable validation errors for a mode palette.""" + g = guardrails or {} + errors: list[str] = [] + bg = palette["bg"] + mode = detect_mode(palette) + text_min = g.get("minimum_text_contrast", 4.5) + main_min = g.get("preferred_main_text_contrast", 7.0) + sel_min = g.get("minimum_terminal_selection_contrast", 7.0) + + for key in ("text", "muted", "comment", "accent", "error", "warning", "diagnostic"): + if key not in palette: + errors.append(f"missing token: {key}") + continue + if contrast(bg, palette[key]) < text_min: + errors.append(f"{key} contrast {contrast(bg, palette[key]):.2f} < {text_min}") + + if contrast(bg, palette["text"]) < main_min: + errors.append(f"main text contrast {contrast(bg, palette['text']):.2f} < {main_min}") + + for fg_key, bg_key in ( + ("selection_fg", "selection_bg"), + ("on_accent", "accent"), + ("on_error", "error"), + ): + if fg_key in palette and bg_key in palette: + ratio = contrast(palette[fg_key], palette[bg_key]) + if fg_key == "selection_fg" and ratio < sel_min: + errors.append(f"selection pair {ratio:.2f} < {sel_min}") + if fg_key.startswith("on_") and ratio < 4.5: + errors.append(f"{fg_key}/{bg_key} contrast {ratio:.2f} < 4.5") + + if "on_accent" in palette and "accent" in palette: + if contrast(palette["on_accent"], palette["accent"]) < 4.5: + errors.append("on_accent/accent WCAG contrast below 4.5") + + for index, color in enumerate(ansi(palette)): + if contrast(color, bg) < g.get("minimum_terminal_ansi_contrast", 4.5): + errors.append(f"ANSI color{index} contrast too low") + + for step in ("bg_soft", "surface0", "surface1", "surface2", "surface3"): + if step in palette and contrast(palette[step], bg) < 1.02: + errors.append(f"{step} too close to bg") + + if palette.get("comment") == palette.get("subtle"): + errors.append("comment and subtle must differ") + if palette.get("accent") == palette.get("accent_2"): + errors.append("accent and accent_2 must differ") + if mode == "light" and "surface3" not in palette: + errors.append("light mode missing surface3") + return errors diff --git a/src/dreamcoder_theme/palette_tokens.py b/src/dreamcoder_theme/palette_tokens.py index 60191a5..1963df7 100644 --- a/src/dreamcoder_theme/palette_tokens.py +++ b/src/dreamcoder_theme/palette_tokens.py @@ -1,4 +1,8 @@ -"""Static palette token data for Dreamcoder themes.""" +"""Static palette token data for Dreamcoder themes. + +AUTO-GENERATED from themes/dreamcoder/tokens.json — do not edit by hand. +Run: ./scripts/generate-palette-tokens.py +""" from __future__ import annotations @@ -23,7 +27,7 @@ "accent": "#d99555", "accent_2": "#c96a45", "diagnostic": "#5f95ca", - "selection": "#3d3028", + "selection": "#2b231b", "panel_rgba": "rgba(16, 15, 13, 0.78)", "module_rgba": "rgba(232, 223, 208, 0.08)", "active_rgba": "rgba(217, 149, 85, 0.24)", @@ -42,6 +46,21 @@ "mauve": "#e29cb4", "error": "#ed8a7a", "warning": "#e8b866", + "success": "#4db35f", + "info": "#5f95ca", + "selection_bg": "#2b231b", + "selection_fg": "#e8dfd0", + "on_surface": "#e8dfd0", + "on_accent": "#100f0d", + "on_error": "#100f0d", + "on_focus": "#100f0d", + "link": "#d99555", + "link_hover": "#c96a45", + "disabled": "#877e73", + "hover": "#2b231b", + "pressed": "#392e21", + "overlay": "rgba(16, 15, 13, 0.52)", + "scrim": "rgba(0, 0, 0, 0.58)", }, "light": { "name": "Dreamcoder Light", @@ -66,7 +85,7 @@ "mauve": "#7d3e64", "error": "#842f24", "warning": "#654300", - "selection": "#17120d", + "selection": "#decbb1", "panel_rgba": "rgba(243, 234, 220, 0.96)", "module_rgba": "rgba(222, 203, 177, 0.80)", "active_rgba": "rgba(130, 79, 22, 0.34)", @@ -80,6 +99,23 @@ "prompt_muted": "#53402e", "prompt_accent": "#8a5520", "prompt_accent_2": "#a7471c", + "success": "#3d723d", + "info": "#0d4a68", + "text_heading": "#100c07", + "surface3": "#b89d7a", + "selection_bg": "#decbb1", + "selection_fg": "#17120d", + "on_surface": "#17120d", + "on_accent": "#fff7ea", + "on_error": "#fff7ea", + "on_focus": "#fff7ea", + "link": "#824f16", + "link_hover": "#a7471c", + "disabled": "#787063", + "hover": "#decbb1", + "pressed": "#c8ad89", + "overlay": "rgba(243, 234, 220, 0.40)", + "scrim": "rgba(26, 18, 12, 0.42)", }, "dusk": { "name": "Dreamcoder Dusk", @@ -104,7 +140,7 @@ "mauve": "#784762", "error": "#773126", "warning": "#604000", - "selection": "#1a1713", + "selection": "#d8cbb8", "panel_rgba": "rgba(235, 228, 214, 0.88)", "module_rgba": "rgba(26, 23, 19, 0.08)", "active_rgba": "rgba(138, 85, 32, 0.22)", @@ -118,10 +154,27 @@ "prompt_muted": "#574939", "prompt_accent": "#965f25", "prompt_accent_2": "#96411e", + "success": "#466b41", + "info": "#104b67", + "text_heading": "#13100c", + "surface3": "#b6a691", + "selection_bg": "#d8cbb8", + "selection_fg": "#1a1713", + "on_surface": "#1a1713", + "on_accent": "#f1eadf", + "on_error": "#f1eadf", + "on_focus": "#f1eadf", + "link": "#8a5520", + "link_hover": "#96411e", + "disabled": "#847c71", + "hover": "#d8cbb8", + "pressed": "#c6b6a0", + "overlay": "rgba(235, 228, 214, 0.40)", + "scrim": "rgba(26, 18, 12, 0.42)", }, } -ANSI_KEYS = [ +ANSI_KEY_NAMES = [ "surface0", "error", "sage", @@ -131,11 +184,11 @@ "lavender", "muted", "subtle", - "#e9a092", - "#75a579", + "error_bright", + "sage_bright", "warning", - "#579ba4", - "#846fc5", - "#6fa5a5", + "diagnostic_bright", + "lavender_bright", + "focus_bright", "text", ] diff --git a/src/dreamcoder_theme/renderers_extra_nvim.py b/src/dreamcoder_theme/renderers_extra_nvim.py index 1bb4156..2d895ff 100644 --- a/src/dreamcoder_theme/renderers_extra_nvim.py +++ b/src/dreamcoder_theme/renderers_extra_nvim.py @@ -102,9 +102,8 @@ def hl(name: str, **kwargs: Any) -> str: normal_bg = bg if invert else "none" text = c["text"] fg = text - # Use surface1 for selection background in all modes - better visibility - sel_bg = c["surface1"] - sel_fg = c["text"] + sel_bg = c["selection_bg"] + sel_fg = c["selection_fg"] lines = [ f"""-- ======================================================== diff --git a/src/dreamcoder_theme/renderers_extra_nvim_lsp.py b/src/dreamcoder_theme/renderers_extra_nvim_lsp.py index b16f401..d762d25 100644 --- a/src/dreamcoder_theme/renderers_extra_nvim_lsp.py +++ b/src/dreamcoder_theme/renderers_extra_nvim_lsp.py @@ -18,9 +18,9 @@ def nvim_lsp_groups( hl("@markup.heading", fg=c["accent"], bold=True), hl("@markup.quote", fg=c["comment"], italic=True), hl("@markup.math", fg=c["lavender"]), - hl("@markup.link", fg=c["diagnostic"], underline=True), - hl("@markup.link.label", fg=c["diagnostic"], underline=True), - hl("@markup.link.url", fg=c["subtle"], underline=True), + hl("@markup.link", fg=c["link"], underline=True), + hl("@markup.link.label", fg=c["link"], underline=True), + hl("@markup.link.url", fg=c["link_hover"], underline=True), hl("@markup.raw", fg=c["sage"]), hl("@markup.list", fg=c["accent"]), hl("@diff.plus", fg=c["sage"]), diff --git a/src/dreamcoder_theme/renderers_extra_obsidian.py b/src/dreamcoder_theme/renderers_extra_obsidian.py index fbc4e1b..a343961 100644 --- a/src/dreamcoder_theme/renderers_extra_obsidian.py +++ b/src/dreamcoder_theme/renderers_extra_obsidian.py @@ -40,16 +40,16 @@ def obsidian_content(c: dict[str, str]) -> str: --text-accent-hover: {c["accent_2"]}; --text-error: {c["error"]}; --text-warning: {c["warning"]}; - --text-success: {c["sage"]}; - --text-selection: {mix(c["surface1"], bg, 0.5)}; - --text-on-accent: {c["bg"]}; + --text-success: {c["success"]}; + --text-selection: {c["selection_bg"]}; + --text-on-accent: {c["on_accent"]}; /* Interactive */ --interactive-normal: {c["surface1"]}; - --interactive-hover: {c["surface2"]}; + --interactive-hover: {c["hover"]}; --interactive-accent: {c["accent"]}; --interactive-accent-hover: {c["accent_2"]}; - --interactive-success: {c["sage"]}; + --interactive-success: {c["success"]}; /* Scrollbar */ --scrollbar-bg: transparent; @@ -70,18 +70,18 @@ def obsidian_content(c: dict[str, str]) -> str: --code-background: {c["surface0"]}; /* Heading */ - --h1-color: {c["accent"]}; - --h2-color: {c["accent"]}; + --h1-color: {c["text_heading"]}; + --h2-color: {c["text_heading"]}; --h3-color: {c["accent_2"]}; --h4-color: {c["diagnostic"]}; --h5-color: {c["muted"]}; --h6-color: {c["subtle"]}; /* Link */ - --link-color: {c["accent"]}; - --link-color-hover: {c["accent_2"]}; - --link-external-color: {c["diagnostic"]}; - --link-external-color-hover: {c["accent_2"]}; + --link-color: {c["link"]}; + --link-color-hover: {c["link_hover"]}; + --link-external-color: {c["info"]}; + --link-external-color-hover: {c["link_hover"]}; /* Checkbox */ --checkbox-color: {c["accent"]}; diff --git a/src/dreamcoder_theme/renderers_ghostty_warp.py b/src/dreamcoder_theme/renderers_ghostty_warp.py index 4308d09..b71c58d 100644 --- a/src/dreamcoder_theme/renderers_ghostty_warp.py +++ b/src/dreamcoder_theme/renderers_ghostty_warp.py @@ -6,10 +6,9 @@ def ghostty_content(c: dict[str, str]) -> str: - # Use surface1 for selection background in all modes - better visibility is_dark = c["details"] == "darker" - sel_bg = c["surface1"] - sel_fg = c["text"] + sel_bg = c["selection_bg"] + sel_fg = c["selection_fg"] opacity = "0.76" if is_dark else "0.96" blur = "true" if is_dark else "false" lines = [ @@ -17,7 +16,7 @@ def ghostty_content(c: dict[str, str]) -> str: f"background = {c['bg']}", f"foreground = {c['text']}", f"cursor-color = {c['accent']}", - f"cursor-text = {c['bg']}", + f"cursor-text = {c['on_accent']}", f"selection-background = {sel_bg}", f"selection-foreground = {sel_fg}", f"background-opacity = {opacity}", diff --git a/src/dreamcoder_theme/renderers_hypr_waybar_rofi.py b/src/dreamcoder_theme/renderers_hypr_waybar_rofi.py index f5bffcf..26da750 100644 --- a/src/dreamcoder_theme/renderers_hypr_waybar_rofi.py +++ b/src/dreamcoder_theme/renderers_hypr_waybar_rofi.py @@ -32,12 +32,12 @@ def _map_dc_to_material(c: dict[str, str]) -> dict[str, str]: "surface_variant": h(c["surface1"]), "surface_tint": h(c["accent"]), # On-colors - "on_background": h(c["text"]), - "on_surface": h(c["text"]), + "on_background": h(c["on_surface"]), + "on_surface": h(c["on_surface"]), "on_surface_variant": h(c["muted"]), # Primary "primary": h(c["accent"]), - "on_primary": h(c["bg"]), + "on_primary": h(c["on_accent"]), "primary_container": h(c["surface1"]), "on_primary_container": h(c["text"]), "primary_fixed": h(c["accent"]), @@ -47,7 +47,7 @@ def _map_dc_to_material(c: dict[str, str]) -> dict[str, str]: "inverse_primary": h(c["accent"]), # Secondary "secondary": h(c["accent_2"]), - "on_secondary": h(c["bg"]), + "on_secondary": h(c["on_accent"]), "secondary_container": h(c["surface1"]), "on_secondary_container": h(c["text"]), "secondary_fixed": h(c["accent_2"]), @@ -56,7 +56,7 @@ def _map_dc_to_material(c: dict[str, str]) -> dict[str, str]: "on_secondary_fixed_variant": h(c["accent_2"]), # Tertiary "tertiary": h(c["diagnostic"]), - "on_tertiary": h(c["bg"]), + "on_tertiary": h(c["on_accent"]), "tertiary_container": h(c["surface0"]), "on_tertiary_container": h(c["text"]), "tertiary_fixed": h(c["diagnostic"]), @@ -65,7 +65,7 @@ def _map_dc_to_material(c: dict[str, str]) -> dict[str, str]: "on_tertiary_fixed_variant": h(c["focus"]), # Error "error": h(c["error"]), - "on_error": h(c["bg"]), + "on_error": h(c["on_error"]), "error_container": h(c["surface0"]), "on_error_container": h(c["text"]), # Outline @@ -115,17 +115,25 @@ def waybar_content(c: dict[str, str]) -> str: @define-color bg {c["bg"]}; @define-color bg-soft {c["bg_soft"]}; @define-color surface {c["surface0"]}; +@define-color surface-2 {c["surface2"]}; +@define-color surface-3 {c["surface3"]}; @define-color text {c["text"]}; +@define-color text-heading {c["text_heading"]}; @define-color muted {c["muted"]}; +@define-color subtle {c["subtle"]}; +@define-color comment {c["comment"]}; @define-color border {c["border"]}; @define-color border-ui {c["border_ui"]}; @define-color focus {c["focus"]}; @define-color accent {c["accent"]}; @define-color accent-2 {c["accent_2"]}; @define-color diagnostic {c["diagnostic"]}; +@define-color lavender {c["lavender"]}; @define-color error {c["error"]}; -@define-color success {c["sage"]}; +@define-color success {c["success"]}; @define-color warning {c["warning"]}; +@define-color link {c["link"]}; +@define-color link-hover {c["link_hover"]}; window#waybar {{ background: {c["panel_rgba"]}; @@ -285,15 +293,15 @@ def _hex_to_rgb_int(hex_color: str) -> tuple[int, int, int]: primary: {c["accent"]}; primary-fixed: {c["accent"]}; primary-fixed-dim: {c["accent_2"]}; - on-primary: {c["bg"]}; - on-primary-fixed: {c["bg"]}; + on-primary: {c["on_accent"]}; + on-primary-fixed: {c["on_accent"]}; on-primary-fixed-variant: {c["accent"]}; primary-container: {c["surface1"]}; on-primary-container: {c["text"]}; secondary: {c["accent_2"]}; secondary-fixed: {c["accent_2"]}; secondary-fixed-dim: {c["accent_2"]}; - on-secondary: {c["bg"]}; + on-secondary: {c["on_accent"]}; on-secondary-fixed: {c["bg"]}; on-secondary-fixed-variant: {c["accent_2"]}; secondary-container: {c["surface1"]}; @@ -307,7 +315,7 @@ def _hex_to_rgb_int(hex_color: str) -> tuple[int, int, int]: tertiary-container: {c["surface0"]}; on-tertiary-container: {c["text"]}; error: {c["error"]}; - on-error: {c["bg"]}; + on-error: {c["on_error"]}; error-container: {c["surface0"]}; on-error-container: {c["text"]}; surface: {c["bg"]}; diff --git a/src/dreamcoder_theme/renderers_kitty.py b/src/dreamcoder_theme/renderers_kitty.py index 8534aa9..e6e6e72 100644 --- a/src/dreamcoder_theme/renderers_kitty.py +++ b/src/dreamcoder_theme/renderers_kitty.py @@ -7,9 +7,8 @@ def kitty_content(c: dict[str, str]) -> str: p = ansi(c) - # Use surface1 for selection background in all modes - better visibility - sel_fg = c["text"] - sel_bg = c["surface1"] + sel_fg = c["selection_fg"] + sel_bg = c["selection_bg"] return f"""# ========================================================== # {c["name"]} # ========================================================== @@ -19,15 +18,15 @@ def kitty_content(c: dict[str, str]) -> str: background {c["bg"]} selection_foreground {sel_fg} selection_background {sel_bg} -url_color {c["diagnostic"]} +url_color {c["link"]} cursor {c["accent"]} -cursor_text_color {c["bg"]} +cursor_text_color {c["on_accent"]} cursor_shape block cursor_blink_interval 0.5 cursor_stop_blinking_after 15.0 -active_tab_foreground {c["bg"]} +active_tab_foreground {c["on_accent"]} active_tab_background {c["accent"]} inactive_tab_foreground {c["muted"]} inactive_tab_background {c["bg"]} @@ -56,11 +55,11 @@ def kitty_content(c: dict[str, str]) -> str: color16 {c["accent_2"]} color17 {c["error"]} -mark1_foreground {c["bg"]} +mark1_foreground {c["on_accent"]} mark1_background {c["accent"]} -mark2_foreground {c["bg"]} +mark2_foreground {c["on_surface"]} mark2_background {c["diagnostic"]} -mark3_foreground {c["bg"]} +mark3_foreground {c["on_surface"]} mark3_background {c["mauve"]} """ diff --git a/src/dreamcoder_theme/renderers_opencode.py b/src/dreamcoder_theme/renderers_opencode.py index 91153d7..c47ec09 100644 --- a/src/dreamcoder_theme/renderers_opencode.py +++ b/src/dreamcoder_theme/renderers_opencode.py @@ -2,7 +2,7 @@ from __future__ import annotations -from .palette import guard, mix +from .palette import guard, mix, surface_guard def opencode_tokens(c: dict[str, str]) -> dict[str, str]: @@ -14,16 +14,8 @@ def opencode_tokens(c: dict[str, str]) -> dict[str, str]: function = guard(c["diagnostic"], c["bg"], mode_name, minimum=syntax_min) type_color = guard(c["lavender"], c["bg"], mode_name, minimum=syntax_min) constant = guard(mix(c["accent_2"], c["mauve"], 0.24), c["bg"], mode_name, minimum=syntax_min) - # Selection: light bg with dark text for dark mode (accent is light); - # For light mode, accent is dark so syntax colors (also dark) become - # invisible on it. Use bg (lightest non-white) instead so ALL syntax - # colors remain legible even if OpenCode doesn't swap them on selection. - if mode_name == "dark": - sel_bg = c["accent"] - sel_fg = c["bg"] - else: - sel_bg = c["bg"] - sel_fg = c["text"] + sel_bg = c["selection_bg"] + sel_fg = c["selection_fg"] return { "keyword": keyword, "function": function, @@ -72,7 +64,7 @@ def opencode_content(c: dict[str, str], transparent_background: bool = False) -> # Mode-aware surface formulas if mode_name == "dark": element_bg = c["surface1"] - hover_bg = c["surface2"] + hover_bg = c["hover"] line_bg = mix(c["bg"], c["surface0"], 0.50) code_bg = mix(c["surface0"], c["surface1"], 0.30) assistant_bg = mix(c["bg"], c["diagnostic"], 0.12) @@ -83,7 +75,7 @@ def opencode_content(c: dict[str, str], transparent_background: bool = False) -> mix_base = c["border_ui"] else: element_bg = mix(c["bg_soft"], c["surface1"], 0.4) - hover_bg = c["surface2"] + hover_bg = c["hover"] line_bg = c["bg_soft"] code_bg = mix(c["surface1"], c["border_ui"], 0.12) assistant_bg = mix(c["bg"], c["diagnostic"], 0.12) @@ -93,13 +85,18 @@ def opencode_content(c: dict[str, str], transparent_background: bool = False) -> inline_code_bg = mix(c["sage"], c["bg"], 0.18) mix_base = c["bg"] - added_bg = mix(c["sage"], mix_base, 0.35) - removed_bg = mix(c["error"], mix_base, 0.35) - hunk_bg = mix(c["lavender"], mix_base, 0.45) + diff_mix = 0.35 if mode_name == "dark" else 0.58 + added_bg = surface_guard(mix(c["sage"], mix_base, diff_mix), c["bg"], mode_name) + removed_bg = surface_guard(mix(c["error"], mix_base, diff_mix), c["bg"], mode_name) + hunk_bg = surface_guard( + mix(c["lavender"], mix_base, 0.45 if mode_name == "dark" else 0.62), + c["bg"], + mode_name, + ) assistant = guard(mix(c["diagnostic"], c["text"], 0.18), c["bg"], mode_name) user = guard(mix(c["accent"], c["text"], 0.15), c["bg"], mode_name) background = "none" if transparent_background else c["bg"] - return f'''{{ + return f"""{{ "$schema": "https://opencode.ai/theme.json", "defs": {{ "dreamBackground": "{c["bg"]}", @@ -229,4 +226,4 @@ def opencode_content(c: dict[str, str], transparent_background: bool = False) -> "terminalBrightWhite": "{c["text"]}" }} }} -''' +""" diff --git a/src/dreamcoder_theme/renderers_starship.py b/src/dreamcoder_theme/renderers_starship.py index 7d9ff87..ebfa9f7 100644 --- a/src/dreamcoder_theme/renderers_starship.py +++ b/src/dreamcoder_theme/renderers_starship.py @@ -16,6 +16,7 @@ def starship_content(c: dict[str, str]) -> str: prom_text = guard(c["prompt_text"], prom_s0, mode) # text on darkest surface prom_muted = guard(c["prompt_muted"], c["bg"], mode) error = guard(c["error"], c["bg"], mode) + warning = guard(c["warning"], c["bg"], mode) return f'''# ======================================================== # {c["name"]} — Starship prompt @@ -61,6 +62,10 @@ def starship_content(c: dict[str, str]) -> str: lavender = "{c["lavender"]}" mauve = "{c["mauve"]}" error = "{error}" +warning = "{warning}" +border = "{c["border_ui"]}" +focus = "{c["focus"]}" +link = "{c["link"]}" [username] show_always = true diff --git a/src/dreamcoder_theme/sync.py b/src/dreamcoder_theme/sync.py index ba0022b..3303264 100644 --- a/src/dreamcoder_theme/sync.py +++ b/src/dreamcoder_theme/sync.py @@ -2,6 +2,8 @@ from __future__ import annotations +import subprocess +import sys from typing import Any from .palette import adaptive_palette, load_variants @@ -376,6 +378,9 @@ def print_summary( def main() -> None: + gen = ROOT / "scripts" / "generate-palette-tokens.py" + if gen.is_file(): + subprocess.run([sys.executable, str(gen)], check=True) paths = theme_paths() mode = theme_mode() variants = load_variants(DEFAULT_VARIANTS, paths.tokens_file) diff --git a/tests/test_dreamcoder_theme_quality.py b/tests/test_dreamcoder_theme_quality.py index 7b65508..2fd85bd 100644 --- a/tests/test_dreamcoder_theme_quality.py +++ b/tests/test_dreamcoder_theme_quality.py @@ -41,13 +41,22 @@ def test_light_has_stronger_editor_readability_tiers(self): light = self.modes["light"] self.assertEqual(light["surface0"], "#fff7ea") self.assertEqual(light["surface2"], "#c8ad89") - # Verify subtle has sufficient contrast against background self.assertGreaterEqual(contrast(light["subtle"], light["bg"]), 4.5) self.assertGreaterEqual(contrast(light["comment"], light["bg"]), 4.5) - def test_light_selection_uses_inverted_high_contrast_pair(self): + def test_light_selection_uses_explicit_pair(self): light = self.modes["light"] - self.assertEqual(light["selection"], light["text"]) + self.assertEqual(light["selection_bg"], "#decbb1") + self.assertEqual(light["selection_fg"], light["text"]) + self.assertGreaterEqual(contrast(light["selection_fg"], light["selection_bg"]), 7.0) + + def test_dark_has_text_heading_and_surface3(self): + dark = self.modes["dark"] + self.assertIn("text_heading", dark) + self.assertIn("surface3", dark) + self.assertGreater( + contrast(dark["text_heading"], dark["bg"]), contrast(dark["text"], dark["bg"]) + ) if __name__ == "__main__": diff --git a/tests/test_terminal_readability.py b/tests/test_terminal_readability.py index dd642ac..7dc7ab6 100644 --- a/tests/test_terminal_readability.py +++ b/tests/test_terminal_readability.py @@ -33,12 +33,12 @@ def test_cursor_and_selection_pairs_are_terminal_readable(self): cursor_min = self.guardrails["minimum_terminal_cursor_contrast"] selection_min = self.guardrails["minimum_terminal_selection_contrast"] for mode, palette in self.modes.items(): - invert = palette.get("details") == "lighter" - sel_fg = palette["bg"] if invert else palette["text"] - sel_bg = palette["text"] if invert else palette["selection"] with self.subTest(mode=mode): self.assertGreaterEqual(contrast(palette["accent"], palette["bg"]), cursor_min) - self.assertGreaterEqual(contrast(sel_fg, sel_bg), selection_min) + self.assertGreaterEqual( + contrast(palette["selection_fg"], palette["selection_bg"]), + selection_min, + ) if __name__ == "__main__": diff --git a/tests/test_token_parity.py b/tests/test_token_parity.py new file mode 100644 index 0000000..b92dbcb --- /dev/null +++ b/tests/test_token_parity.py @@ -0,0 +1,52 @@ +import json +import sys +import unittest +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] +sys.path.insert(0, str(ROOT / "src")) + +from dreamcoder_theme.palette import contrast +from dreamcoder_theme.palette_tokens import ANSI_KEY_NAMES + +TOKENS = ROOT / "themes" / "dreamcoder" / "tokens.json" + + +class TokenParityTest(unittest.TestCase): + def setUp(self): + self.modes = json.loads(TOKENS.read_text())["modes"] + + def test_dark_and_light_share_semantic_keys(self): + dark_keys = {k for k in self.modes["dark"] if k not in {"name", "details"}} + light_keys = {k for k in self.modes["light"] if k not in {"name", "details"}} + self.assertEqual(dark_keys, light_keys) + + def test_surface_ladder_increases_contrast_from_bg(self): + for mode in ("dark", "light"): + palette = self.modes[mode] + bg = palette["bg"] + steps = [ + palette[k] for k in ("bg_soft", "surface0", "surface1", "surface2", "surface3") + ] + ratios = [contrast(step, bg) for step in steps] + with self.subTest(mode=mode): + self.assertTrue(all(r >= 1.02 for r in ratios)) + + def test_text_hierarchy_is_ordered(self): + for mode in ("dark", "light"): + palette = self.modes[mode] + bg = palette["bg"] + text_ratio = contrast(palette["text"], bg) + muted_ratio = contrast(palette["muted"], bg) + subtle_ratio = contrast(palette["subtle"], bg) + with self.subTest(mode=mode): + self.assertGreater(text_ratio, muted_ratio) + self.assertGreater(muted_ratio, subtle_ratio) + + def test_ansi_keys_are_token_names_only(self): + for key in ANSI_KEY_NAMES: + self.assertFalse(key.startswith("#"), f"literal hex in ANSI_KEY_NAMES: {key}") + + +if __name__ == "__main__": + unittest.main() diff --git a/themes/dreamcoder/hypr-colors-light.conf b/themes/dreamcoder/hypr-colors-light.conf index d133315..6012b99 100644 --- a/themes/dreamcoder/hypr-colors-light.conf +++ b/themes/dreamcoder/hypr-colors-light.conf @@ -5,19 +5,19 @@ $inverse_on_surface = rgba(fff7eaff) $inverse_primary = rgba(824f16ff) $inverse_surface = rgba(17120dff) $on_background = rgba(17120dff) -$on_error = rgba(f3eadcff) +$on_error = rgba(fff7eaff) $on_error_container = rgba(17120dff) -$on_primary = rgba(f3eadcff) +$on_primary = rgba(fff7eaff) $on_primary_container = rgba(17120dff) $on_primary_fixed = rgba(f3eadcff) $on_primary_fixed_variant = rgba(824f16ff) -$on_secondary = rgba(f3eadcff) +$on_secondary = rgba(fff7eaff) $on_secondary_container = rgba(17120dff) $on_secondary_fixed = rgba(f3eadcff) $on_secondary_fixed_variant = rgba(a7471cff) $on_surface = rgba(17120dff) $on_surface_variant = rgba(352e22ff) -$on_tertiary = rgba(f3eadcff) +$on_tertiary = rgba(fff7eaff) $on_tertiary_container = rgba(17120dff) $on_tertiary_fixed = rgba(f3eadcff) $on_tertiary_fixed_variant = rgba(0f6570ff) diff --git a/themes/dreamcoder/hypr-colors-light.lua b/themes/dreamcoder/hypr-colors-light.lua index 915d21c..b96d2fd 100644 --- a/themes/dreamcoder/hypr-colors-light.lua +++ b/themes/dreamcoder/hypr-colors-light.lua @@ -5,19 +5,19 @@ inverse_on_surface = "rgba(fff7eaff)" inverse_primary = "rgba(824f16ff)" inverse_surface = "rgba(17120dff)" on_background = "rgba(17120dff)" -on_error = "rgba(f3eadcff)" +on_error = "rgba(fff7eaff)" on_error_container = "rgba(17120dff)" -on_primary = "rgba(f3eadcff)" +on_primary = "rgba(fff7eaff)" on_primary_container = "rgba(17120dff)" on_primary_fixed = "rgba(f3eadcff)" on_primary_fixed_variant = "rgba(824f16ff)" -on_secondary = "rgba(f3eadcff)" +on_secondary = "rgba(fff7eaff)" on_secondary_container = "rgba(17120dff)" on_secondary_fixed = "rgba(f3eadcff)" on_secondary_fixed_variant = "rgba(a7471cff)" on_surface = "rgba(17120dff)" on_surface_variant = "rgba(352e22ff)" -on_tertiary = "rgba(f3eadcff)" +on_tertiary = "rgba(fff7eaff)" on_tertiary_container = "rgba(17120dff)" on_tertiary_fixed = "rgba(f3eadcff)" on_tertiary_fixed_variant = "rgba(0f6570ff)" diff --git a/themes/dreamcoder/obsidian-dreamcoder-dark.css b/themes/dreamcoder/obsidian-dreamcoder-dark.css index ee8db57..c81c608 100644 --- a/themes/dreamcoder/obsidian-dreamcoder-dark.css +++ b/themes/dreamcoder/obsidian-dreamcoder-dark.css @@ -26,12 +26,12 @@ --text-error: #ed8a7a; --text-warning: #e8b866; --text-success: #4db35f; - --text-selection: #1e1914; + --text-selection: #2b231b; --text-on-accent: #100f0d; /* Interactive */ --interactive-normal: #2b231b; - --interactive-hover: #392e21; + --interactive-hover: #2b231b; --interactive-accent: #d99555; --interactive-accent-hover: #c96a45; --interactive-success: #4db35f; @@ -55,8 +55,8 @@ --code-background: #201b16; /* Heading */ - --h1-color: #d99555; - --h2-color: #d99555; + --h1-color: #f4ecdd; + --h2-color: #f4ecdd; --h3-color: #c96a45; --h4-color: #5f95ca; --h5-color: #c7b9aa; diff --git a/themes/dreamcoder/obsidian-dreamcoder-light.css b/themes/dreamcoder/obsidian-dreamcoder-light.css index 280deb7..60fb864 100644 --- a/themes/dreamcoder/obsidian-dreamcoder-light.css +++ b/themes/dreamcoder/obsidian-dreamcoder-light.css @@ -26,12 +26,12 @@ --text-error: #842f24; --text-warning: #654300; --text-success: #3d723d; - --text-selection: #e8dac6; - --text-on-accent: #f3eadc; + --text-selection: #decbb1; + --text-on-accent: #fff7ea; /* Interactive */ --interactive-normal: #decbb1; - --interactive-hover: #c8ad89; + --interactive-hover: #decbb1; --interactive-accent: #824f16; --interactive-accent-hover: #a7471c; --interactive-success: #3d723d; @@ -55,8 +55,8 @@ --code-background: #fff7ea; /* Heading */ - --h1-color: #824f16; - --h2-color: #824f16; + --h1-color: #100c07; + --h2-color: #100c07; --h3-color: #a7471c; --h4-color: #0d4a68; --h5-color: #352e22; diff --git a/themes/dreamcoder/obsidian-dreamcoder.css b/themes/dreamcoder/obsidian-dreamcoder.css index 280deb7..60fb864 100644 --- a/themes/dreamcoder/obsidian-dreamcoder.css +++ b/themes/dreamcoder/obsidian-dreamcoder.css @@ -26,12 +26,12 @@ --text-error: #842f24; --text-warning: #654300; --text-success: #3d723d; - --text-selection: #e8dac6; - --text-on-accent: #f3eadc; + --text-selection: #decbb1; + --text-on-accent: #fff7ea; /* Interactive */ --interactive-normal: #decbb1; - --interactive-hover: #c8ad89; + --interactive-hover: #decbb1; --interactive-accent: #824f16; --interactive-accent-hover: #a7471c; --interactive-success: #3d723d; @@ -55,8 +55,8 @@ --code-background: #fff7ea; /* Heading */ - --h1-color: #824f16; - --h2-color: #824f16; + --h1-color: #100c07; + --h2-color: #100c07; --h3-color: #a7471c; --h4-color: #0d4a68; --h5-color: #352e22; diff --git a/themes/dreamcoder/tokens.json b/themes/dreamcoder/tokens.json index db02e55..3a84048 100644 --- a/themes/dreamcoder/tokens.json +++ b/themes/dreamcoder/tokens.json @@ -24,7 +24,7 @@ "accent": "#d99555", "accent_2": "#c96a45", "diagnostic": "#5f95ca", - "selection": "#3d3028", + "selection": "#2b231b", "panel_rgba": "rgba(16, 15, 13, 0.78)", "module_rgba": "rgba(232, 223, 208, 0.08)", "active_rgba": "rgba(217, 149, 85, 0.24)", @@ -42,7 +42,22 @@ "lavender": "#d4b4e6", "mauve": "#e29cb4", "error": "#ed8a7a", - "warning": "#e8b866" + "warning": "#e8b866", + "success": "#4db35f", + "info": "#5f95ca", + "selection_bg": "#2b231b", + "selection_fg": "#e8dfd0", + "on_surface": "#e8dfd0", + "on_accent": "#100f0d", + "on_error": "#100f0d", + "on_focus": "#100f0d", + "link": "#d99555", + "link_hover": "#c96a45", + "disabled": "#877e73", + "hover": "#2b231b", + "pressed": "#392e21", + "overlay": "rgba(16, 15, 13, 0.52)", + "scrim": "rgba(0, 0, 0, 0.58)" }, "light": { "name": "Dreamcoder Light", @@ -67,7 +82,7 @@ "mauve": "#7d3e64", "error": "#842f24", "warning": "#654300", - "selection": "#17120d", + "selection": "#decbb1", "panel_rgba": "rgba(243, 234, 220, 0.96)", "module_rgba": "rgba(222, 203, 177, 0.80)", "active_rgba": "rgba(130, 79, 22, 0.34)", @@ -80,7 +95,24 @@ "prompt_text": "#20150c", "prompt_muted": "#53402e", "prompt_accent": "#8a5520", - "prompt_accent_2": "#a7471c" + "prompt_accent_2": "#a7471c", + "success": "#3d723d", + "info": "#0d4a68", + "text_heading": "#100c07", + "surface3": "#b89d7a", + "selection_bg": "#decbb1", + "selection_fg": "#17120d", + "on_surface": "#17120d", + "on_accent": "#fff7ea", + "on_error": "#fff7ea", + "on_focus": "#fff7ea", + "link": "#824f16", + "link_hover": "#a7471c", + "disabled": "#787063", + "hover": "#decbb1", + "pressed": "#c8ad89", + "overlay": "rgba(243, 234, 220, 0.40)", + "scrim": "rgba(26, 18, 12, 0.42)" }, "dusk": { "name": "Dreamcoder Dusk", @@ -105,7 +137,7 @@ "mauve": "#784762", "error": "#773126", "warning": "#604000", - "selection": "#1a1713", + "selection": "#d8cbb8", "panel_rgba": "rgba(235, 228, 214, 0.88)", "module_rgba": "rgba(26, 23, 19, 0.08)", "active_rgba": "rgba(138, 85, 32, 0.22)", @@ -118,7 +150,24 @@ "prompt_text": "#261c14", "prompt_muted": "#574939", "prompt_accent": "#965f25", - "prompt_accent_2": "#96411e" + "prompt_accent_2": "#96411e", + "success": "#466b41", + "info": "#104b67", + "text_heading": "#13100c", + "surface3": "#b6a691", + "selection_bg": "#d8cbb8", + "selection_fg": "#1a1713", + "on_surface": "#1a1713", + "on_accent": "#f1eadf", + "on_error": "#f1eadf", + "on_focus": "#f1eadf", + "link": "#8a5520", + "link_hover": "#96411e", + "disabled": "#847c71", + "hover": "#d8cbb8", + "pressed": "#c6b6a0", + "overlay": "rgba(235, 228, 214, 0.40)", + "scrim": "rgba(26, 18, 12, 0.42)" } }, "guardrails": { @@ -135,6 +184,9 @@ "canonical_opencode_theme": "dreamcoder", "minimum_terminal_ansi_contrast": 4.5, "minimum_terminal_cursor_contrast": 4.5, - "minimum_terminal_selection_contrast": 7.0 + "minimum_terminal_selection_contrast": 7.0, + "minimum_apca_on_accent": 54, + "minimum_apca_heading_light": 60, + "minimum_apca_heading_dark": 45 } } diff --git a/themes/dreamcoder/tokens.schema.json b/themes/dreamcoder/tokens.schema.json index 879cf76..4ac7c01 100644 --- a/themes/dreamcoder/tokens.schema.json +++ b/themes/dreamcoder/tokens.schema.json @@ -2,32 +2,15 @@ "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "Dreamcoder OS design tokens", "type": "object", - "required": [ - "name", - "version", - "modes", - "guardrails" - ], + "required": ["name", "version", "modes", "guardrails"], "properties": { - "name": { - "const": "Dreamcoder OS" - }, - "version": { - "type": "integer", - "minimum": 1 - }, - "description": { - "type": "string" - }, + "name": { "const": "Dreamcoder OS" }, + "version": { "type": "integer", "minimum": 1 }, + "description": { "type": "string" }, "modes": { "type": "object", - "required": [ - "dark", - "light" - ], - "additionalProperties": { - "$ref": "#/$defs/palette" - } + "required": ["dark", "light"], + "additionalProperties": { "$ref": "#/$defs/palette" } }, "guardrails": { "type": "object", @@ -37,264 +20,157 @@ "preferred_main_text_contrast", "minimum_terminal_ansi_contrast", "minimum_terminal_cursor_contrast", - "minimum_terminal_selection_contrast" + "minimum_terminal_selection_contrast", + "minimum_apca_body", + "minimum_apca_body_dark", + "minimum_apca_quiet", + "minimum_apca_ui", + "minimum_apca_ui_dark", + "minimum_apca_on_accent" ], "properties": { - "canonical_opencode_theme": { - "const": "dreamcoder" - }, - "avoid_pure_black_white": { - "type": "boolean" - }, - "minimum_text_contrast": { - "type": "number", - "minimum": 4.5 - }, - "preferred_main_text_contrast": { - "type": "number", - "minimum": 7 - }, - "light_hours_default": { - "type": "string" - }, - "dusk_hours_default": { - "type": "string" - }, - "minimum_apca_body": { - "type": "number", - "minimum": 60 - }, - "minimum_apca_quiet": { - "type": "number", - "minimum": 45 - }, - "minimum_apca_ui": { - "type": "number", - "minimum": 45 - }, - "minimum_terminal_ansi_contrast": { - "type": "number", - "minimum": 4.5 - }, - "minimum_terminal_cursor_contrast": { - "type": "number", - "minimum": 4.5 - }, - "minimum_terminal_selection_contrast": { - "type": "number", - "minimum": 7 - } + "canonical_opencode_theme": { "const": "dreamcoder" }, + "avoid_pure_black_white": { "type": "boolean" }, + "minimum_text_contrast": { "type": "number", "minimum": 4.5 }, + "preferred_main_text_contrast": { "type": "number", "minimum": 7 }, + "minimum_apca_body": { "type": "number", "minimum": 60 }, + "minimum_apca_body_dark": { "type": "number", "minimum": 45 }, + "minimum_apca_heading_light": { "type": "number", "minimum": 45 }, + "minimum_apca_heading_dark": { "type": "number", "minimum": 40 }, + "minimum_apca_quiet": { "type": "number", "minimum": 44 }, + "minimum_apca_ui": { "type": "number", "minimum": 28 }, + "minimum_apca_ui_dark": { "type": "number", "minimum": 28 }, + "minimum_apca_on_accent": { "type": "number", "minimum": 60 }, + "light_hours_default": { "type": "string" }, + "dusk_hours_default": { "type": "string" }, + "minimum_terminal_ansi_contrast": { "type": "number", "minimum": 4.5 }, + "minimum_terminal_cursor_contrast": { "type": "number", "minimum": 4.5 }, + "minimum_terminal_selection_contrast": { "type": "number", "minimum": 7 } } } }, "$defs": { - "hex": { - "type": "string", - "pattern": "^#[0-9a-fA-F]{6}$" - }, + "hex": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" }, "rgba_color": { "type": "string", "pattern": "^rgba\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*(0|1|0?\\.\\d+)\\s*\\)$" }, + "color_value": { + "oneOf": [{ "$ref": "#/$defs/hex" }, { "$ref": "#/$defs/rgba_color" }] + }, "palette": { "type": "object", "required": [ + "name", + "details", "bg", + "bg_soft", + "surface0", + "surface1", + "surface2", + "surface3", "text", + "text_heading", "muted", + "subtle", "comment", + "border", + "border_ui", + "border_hi", + "focus", "accent", "accent_2", "diagnostic", "sage", + "success", + "info", "error", "warning", - "border_ui", - "focus" + "lavender", + "mauve", + "on_surface", + "on_accent", + "on_error", + "on_focus", + "link", + "link_hover", + "selection", + "selection_bg", + "selection_fg", + "disabled", + "hover", + "pressed", + "overlay", + "scrim", + "panel_rgba", + "module_rgba", + "active_rgba", + "inactive_border", + "prompt_bg", + "prompt_surface0", + "prompt_surface1", + "prompt_surface2", + "prompt_text", + "prompt_muted", + "prompt_accent", + "prompt_accent_2" ], "properties": { - "name": { - "type": "string" - }, - "details": { - "type": "string" - }, - "bg": { - "oneOf": [ - { "$ref": "#/$defs/hex" }, - { "$ref": "#/$defs/rgba_color" } - ] - }, - "text": { - "oneOf": [ - { "$ref": "#/$defs/hex" }, - { "$ref": "#/$defs/rgba_color" } - ] - }, - "muted": { - "oneOf": [ - { "$ref": "#/$defs/hex" }, - { "$ref": "#/$defs/rgba_color" } - ] - }, - "subtle": { - "oneOf": [ - { "$ref": "#/$defs/hex" }, - { "$ref": "#/$defs/rgba_color" } - ] - }, - "comment": { - "oneOf": [ - { "$ref": "#/$defs/hex" }, - { "$ref": "#/$defs/rgba_color" } - ] - }, - "accent": { - "oneOf": [ - { "$ref": "#/$defs/hex" }, - { "$ref": "#/$defs/rgba_color" } - ] - }, - "accent_2": { - "oneOf": [ - { "$ref": "#/$defs/hex" }, - { "$ref": "#/$defs/rgba_color" } - ] - }, - "diagnostic": { - "oneOf": [ - { "$ref": "#/$defs/hex" }, - { "$ref": "#/$defs/rgba_color" } - ] - }, - "sage": { - "oneOf": [ - { "$ref": "#/$defs/hex" }, - { "$ref": "#/$defs/rgba_color" } - ] - }, - "error": { - "oneOf": [ - { "$ref": "#/$defs/hex" }, - { "$ref": "#/$defs/rgba_color" } - ] - }, - "warning": { - "oneOf": [ - { "$ref": "#/$defs/hex" }, - { "$ref": "#/$defs/rgba_color" } - ] - }, - "border": { - "oneOf": [ - { "$ref": "#/$defs/hex" }, - { "$ref": "#/$defs/rgba_color" } - ] - }, - "border_ui": { - "oneOf": [ - { "$ref": "#/$defs/hex" }, - { "$ref": "#/$defs/rgba_color" } - ] - }, - "border_hi": { - "oneOf": [ - { "$ref": "#/$defs/hex" }, - { "$ref": "#/$defs/rgba_color" } - ] - }, - "focus": { - "oneOf": [ - { "$ref": "#/$defs/hex" }, - { "$ref": "#/$defs/rgba_color" } - ] - }, - "selection": { - "oneOf": [ - { "$ref": "#/$defs/hex" }, - { "$ref": "#/$defs/rgba_color" } - ] - }, - "panel_rgba": { - "oneOf": [ - { "$ref": "#/$defs/hex" }, - { "$ref": "#/$defs/rgba_color" } - ] - }, - "module_rgba": { - "oneOf": [ - { "$ref": "#/$defs/hex" }, - { "$ref": "#/$defs/rgba_color" } - ] - }, - "active_rgba": { - "oneOf": [ - { "$ref": "#/$defs/hex" }, - { "$ref": "#/$defs/rgba_color" } - ] - }, - "inactive_border": { - "oneOf": [ - { "$ref": "#/$defs/hex" }, - { "$ref": "#/$defs/rgba_color" } - ] - }, - "prompt_bg": { - "oneOf": [ - { "$ref": "#/$defs/hex" }, - { "$ref": "#/$defs/rgba_color" } - ] - }, - "prompt_surface0": { - "oneOf": [ - { "$ref": "#/$defs/hex" }, - { "$ref": "#/$defs/rgba_color" } - ] - }, - "prompt_surface1": { - "oneOf": [ - { "$ref": "#/$defs/hex" }, - { "$ref": "#/$defs/rgba_color" } - ] - }, - "prompt_surface2": { - "oneOf": [ - { "$ref": "#/$defs/hex" }, - { "$ref": "#/$defs/rgba_color" } - ] - }, - "prompt_text": { - "oneOf": [ - { "$ref": "#/$defs/hex" }, - { "$ref": "#/$defs/rgba_color" } - ] - }, - "prompt_muted": { - "oneOf": [ - { "$ref": "#/$defs/hex" }, - { "$ref": "#/$defs/rgba_color" } - ] - }, - "prompt_accent": { - "oneOf": [ - { "$ref": "#/$defs/hex" }, - { "$ref": "#/$defs/rgba_color" } - ] - }, - "prompt_accent_2": { - "oneOf": [ - { "$ref": "#/$defs/hex" }, - { "$ref": "#/$defs/rgba_color" } - ] - } + "name": { "type": "string" }, + "details": { "enum": ["darker", "lighter"] }, + "bg": { "$ref": "#/$defs/color_value" }, + "bg_soft": { "$ref": "#/$defs/color_value" }, + "surface0": { "$ref": "#/$defs/color_value" }, + "surface1": { "$ref": "#/$defs/color_value" }, + "surface2": { "$ref": "#/$defs/color_value" }, + "surface3": { "$ref": "#/$defs/color_value" }, + "text": { "$ref": "#/$defs/color_value" }, + "text_heading": { "$ref": "#/$defs/color_value" }, + "muted": { "$ref": "#/$defs/color_value" }, + "subtle": { "$ref": "#/$defs/color_value" }, + "comment": { "$ref": "#/$defs/color_value" }, + "border": { "$ref": "#/$defs/color_value" }, + "border_ui": { "$ref": "#/$defs/color_value" }, + "border_hi": { "$ref": "#/$defs/color_value" }, + "focus": { "$ref": "#/$defs/color_value" }, + "accent": { "$ref": "#/$defs/color_value" }, + "accent_2": { "$ref": "#/$defs/color_value" }, + "diagnostic": { "$ref": "#/$defs/color_value" }, + "sage": { "$ref": "#/$defs/color_value" }, + "success": { "$ref": "#/$defs/color_value" }, + "info": { "$ref": "#/$defs/color_value" }, + "error": { "$ref": "#/$defs/color_value" }, + "warning": { "$ref": "#/$defs/color_value" }, + "lavender": { "$ref": "#/$defs/color_value" }, + "mauve": { "$ref": "#/$defs/color_value" }, + "on_surface": { "$ref": "#/$defs/color_value" }, + "on_accent": { "$ref": "#/$defs/color_value" }, + "on_error": { "$ref": "#/$defs/color_value" }, + "on_focus": { "$ref": "#/$defs/color_value" }, + "link": { "$ref": "#/$defs/color_value" }, + "link_hover": { "$ref": "#/$defs/color_value" }, + "selection": { "$ref": "#/$defs/color_value" }, + "selection_bg": { "$ref": "#/$defs/color_value" }, + "selection_fg": { "$ref": "#/$defs/color_value" }, + "disabled": { "$ref": "#/$defs/color_value" }, + "hover": { "$ref": "#/$defs/color_value" }, + "pressed": { "$ref": "#/$defs/color_value" }, + "overlay": { "$ref": "#/$defs/color_value" }, + "scrim": { "$ref": "#/$defs/color_value" }, + "panel_rgba": { "$ref": "#/$defs/color_value" }, + "module_rgba": { "$ref": "#/$defs/color_value" }, + "active_rgba": { "$ref": "#/$defs/color_value" }, + "inactive_border": { "$ref": "#/$defs/color_value" }, + "prompt_bg": { "$ref": "#/$defs/color_value" }, + "prompt_surface0": { "$ref": "#/$defs/color_value" }, + "prompt_surface1": { "$ref": "#/$defs/color_value" }, + "prompt_surface2": { "$ref": "#/$defs/color_value" }, + "prompt_text": { "$ref": "#/$defs/color_value" }, + "prompt_muted": { "$ref": "#/$defs/color_value" }, + "prompt_accent": { "$ref": "#/$defs/color_value" }, + "prompt_accent_2": { "$ref": "#/$defs/color_value" } }, - "additionalProperties": { - "oneOf": [ - { "$ref": "#/$defs/hex" }, - { "$ref": "#/$defs/rgba_color" }, - { "type": "string" } - ] - } + "additionalProperties": { "$ref": "#/$defs/color_value" } } } } diff --git a/themes/dreamcoder/waybar-dark.css b/themes/dreamcoder/waybar-dark.css index c2eb3b1..d8dd094 100644 --- a/themes/dreamcoder/waybar-dark.css +++ b/themes/dreamcoder/waybar-dark.css @@ -2,17 +2,25 @@ @define-color bg #100f0d; @define-color bg-soft #181512; @define-color surface #201b16; +@define-color surface-2 #392e21; +@define-color surface-3 #4a3b2a; @define-color text #e8dfd0; +@define-color text-heading #f4ecdd; @define-color muted #c7b9aa; +@define-color subtle #938274; +@define-color comment #b8a99a; @define-color border #756052; @define-color border-ui #968878; @define-color focus #5f8f8f; @define-color accent #d99555; @define-color accent-2 #c96a45; @define-color diagnostic #5f95ca; +@define-color lavender #d4b4e6; @define-color error #ed8a7a; @define-color success #4db35f; @define-color warning #e8b866; +@define-color link #d99555; +@define-color link-hover #c96a45; window#waybar { background: rgba(16, 15, 13, 0.78); diff --git a/themes/dreamcoder/waybar-light.css b/themes/dreamcoder/waybar-light.css index 59dee6d..d8a6124 100644 --- a/themes/dreamcoder/waybar-light.css +++ b/themes/dreamcoder/waybar-light.css @@ -2,17 +2,25 @@ @define-color bg #f3eadc; @define-color bg-soft #e6d7c4; @define-color surface #fff7ea; +@define-color surface-2 #c8ad89; +@define-color surface-3 #b89d7a; @define-color text #17120d; +@define-color text-heading #100c07; @define-color muted #352e22; +@define-color subtle #554638; +@define-color comment #725e4c; @define-color border #8a7358; @define-color border-ui #66513b; @define-color focus #0f6570; @define-color accent #824f16; @define-color accent-2 #a7471c; @define-color diagnostic #0d4a68; +@define-color lavender #57478b; @define-color error #842f24; @define-color success #3d723d; @define-color warning #654300; +@define-color link #824f16; +@define-color link-hover #a7471c; window#waybar { background: rgba(243, 234, 220, 0.96); diff --git a/themes/dreamcoder/waybar.css b/themes/dreamcoder/waybar.css index 59dee6d..d8a6124 100644 --- a/themes/dreamcoder/waybar.css +++ b/themes/dreamcoder/waybar.css @@ -2,17 +2,25 @@ @define-color bg #f3eadc; @define-color bg-soft #e6d7c4; @define-color surface #fff7ea; +@define-color surface-2 #c8ad89; +@define-color surface-3 #b89d7a; @define-color text #17120d; +@define-color text-heading #100c07; @define-color muted #352e22; +@define-color subtle #554638; +@define-color comment #725e4c; @define-color border #8a7358; @define-color border-ui #66513b; @define-color focus #0f6570; @define-color accent #824f16; @define-color accent-2 #a7471c; @define-color diagnostic #0d4a68; +@define-color lavender #57478b; @define-color error #842f24; @define-color success #3d723d; @define-color warning #654300; +@define-color link #824f16; +@define-color link-hover #a7471c; window#waybar { background: rgba(243, 234, 220, 0.96); From aa5de5d270f7aaef009b1e1612abd8c35804b038 Mon Sep 17 00:00:00 2001 From: DreamCoder08 Date: Wed, 1 Jul 2026 16:46:44 -0500 Subject: [PATCH 02/29] fix(overlay): add SOURCE OF TRUTH comments to tmux kanagawa colors Document that the hardcoded kanagawa color overrides in apply-theme-mode.sh must match themes/dreamcoder/tokens.json. Both dark and light mode sections now reference tokens.json as the canonical source. Part of Plan 01: Overlay Compatibility (Gentleman.Dots + ML4W) --- scripts/apply-theme-mode.sh | 163 +++++++++++++++++++----------------- 1 file changed, 84 insertions(+), 79 deletions(-) diff --git a/scripts/apply-theme-mode.sh b/scripts/apply-theme-mode.sh index 47d7f59..af23217 100755 --- a/scripts/apply-theme-mode.sh +++ b/scripts/apply-theme-mode.sh @@ -7,120 +7,125 @@ ENV_FILE="${DREAMCODER_DOTS_ENV:-${0%/*}/dreamcoder-env.sh}" MODE="${1:-light}" WALLPAPER="${2:-${DREAMCODER_WALLPAPER:-}}" ML4W_WALLPAPER="${ML4W_CACHE_DIR}/current_wallpaper" -[[ "${MODE}" == "light" || "${MODE}" == "dark" ]] || { printf 'Invalid mode: %s\n' "${MODE}" >&2; exit 1; } +[[ "${MODE}" == "light" || "${MODE}" == "dark" ]] || { + printf 'Invalid mode: %s\n' "${MODE}" >&2 + exit 1 +} if [[ -z "${WALLPAPER}" && -f "${ML4W_WALLPAPER}" ]]; then WALLPAPER="$(cat "${ML4W_WALLPAPER}")"; fi CURSOR_CLI_ENV="${CACHE_HOME:-${HOME}/.cache}/dreamcoder/cursor-cli.env" case "${MODE}" in - light) CLI_COLORFGBG="0;15" ;; - dark) CLI_COLORFGBG="15;0" ;; +light) CLI_COLORFGBG="0;15" ;; +dark) CLI_COLORFGBG="15;0" ;; esac mkdir -p "$(dirname "${CURSOR_CLI_ENV}")" printf 'export COLORFGBG="%s"\nexport DREAMCODER_THEME_MODE="%s"\nexport COLORTERM="truecolor"\nexport FORCE_COLOR="3"\nexport CLICOLOR_FORCE="1"\nunset NO_COLOR\n' "${CLI_COLORFGBG}" "${MODE}" >"${CURSOR_CLI_ENV}" "${DREAMCODER_DOTS_DIR}/scripts/apply-system-mode.sh" "${MODE}" if [[ -n "${WALLPAPER}" && -f "${WALLPAPER}" ]] && command -v matugen >/dev/null; then - matugen image "${WALLPAPER}" -m "${MODE}" >/dev/null 2>&1 || true + matugen image "${WALLPAPER}" -m "${MODE}" >/dev/null 2>&1 || true fi # --- Waybar: flip colors.css symlink to mode-specific variant BEFORE sync --- # This ensures the Python sync writes to the correct variant file # instead of overwriting the wrong one through a stale symlink. WAYBAR_COLORS="${HOME}/.config/waybar/colors.css" if [[ -L "${WAYBAR_COLORS}" ]]; then - ln -sf "colors-${MODE}.css" "${WAYBAR_COLORS}" + ln -sf "colors-${MODE}.css" "${WAYBAR_COLORS}" fi # --- Rofi: same treatment for colors.rasi symlink --- ROFI_COLORS="${HOME}/.config/rofi/colors.rasi" if [[ -L "${ROFI_COLORS}" ]]; then - ln -sf "colors-${MODE}.rasi" "${ROFI_COLORS}" + ln -sf "colors-${MODE}.rasi" "${ROFI_COLORS}" fi # --- Hyprland: flip colors.lua and colors.conf symlinks --- HYPR_LUA="${HOME}/.config/hypr/colors.lua" HYPR_CONF="${HOME}/.config/hypr/colors.conf" if [[ -L "${HYPR_LUA}" ]]; then - ln -sf "colors-${MODE}.lua" "${HYPR_LUA}" + ln -sf "colors-${MODE}.lua" "${HYPR_LUA}" fi if [[ -L "${HYPR_CONF}" ]]; then - ln -sf "colors-${MODE}.conf" "${HYPR_CONF}" + ln -sf "colors-${MODE}.conf" "${HYPR_CONF}" fi DREAMCODER_THEME_MODE="${MODE}" DREAMCODER_WALLPAPER="${WALLPAPER}" \ - PYTHONPATH="${DREAMCODER_DOTS_DIR}/src${PYTHONPATH:+:${PYTHONPATH}}" \ - "${DREAMCODER_DOTS_DIR}/scripts/sync-dreamcoder-theme.py" + PYTHONPATH="${DREAMCODER_DOTS_DIR}/src${PYTHONPATH:+:${PYTHONPATH}}" \ + "${DREAMCODER_DOTS_DIR}/scripts/sync-dreamcoder-theme.py" command -v pkill >/dev/null && pkill -SIGUSR1 kitty 2>/dev/null || true # Restart Waybar so it picks up the new colors.css immediately if command -v pkill >/dev/null; then - pkill waybar 2>/dev/null || true - sleep 0.3 - "${HOME}/.config/waybar/launch.sh" 2>/dev/null || true + pkill waybar 2>/dev/null || true + sleep 0.3 + "${HOME}/.config/waybar/launch.sh" 2>/dev/null || true fi # --- tmux integration: propagate theme to running sessions --- KANAGAWA_DIR="${HOME}/.tmux/plugins/tmux-kanagawa" if command -v tmux >/dev/null 2>&1; then - # Start a headless server if none exists so options persist for new sessions - if ! tmux list-sessions &>/dev/null 2>&1; then - tmux start-server 2>/dev/null || true - sleep 0.1 - fi - # Update global environment so NEW panes/windows inherit the right vars - tmux set-environment -g DREAMCODER_THEME_MODE "${MODE}" 2>/dev/null || true - tmux set-environment -g COLORFGBG "${CLI_COLORFGBG}" 2>/dev/null || true + # Start a headless server if none exists so options persist for new sessions + if ! tmux list-sessions &>/dev/null 2>&1; then + tmux start-server 2>/dev/null || true + sleep 0.1 + fi + # Update global environment so NEW panes/windows inherit the right vars + tmux set-environment -g DREAMCODER_THEME_MODE "${MODE}" 2>/dev/null || true + tmux set-environment -g COLORFGBG "${CLI_COLORFGBG}" 2>/dev/null || true - # Switch tmux-kanagawa theme variant to match Dreamcoder mode - if [[ -d "${KANAGAWA_DIR}" ]]; then - case "${MODE}" in - light) - KANAGAWA_VARIANT="lotus" - # Override default lotus colors with Dreamcoder Light palette - tmux set-option -g @ukiyo-color-text "#17120d" 2>/dev/null || true - tmux set-option -g @ukiyo-color-bg-bar "#e6d7c4" 2>/dev/null || true - tmux set-option -g @ukiyo-color-bg-pane "#f3eadc" 2>/dev/null || true - tmux set-option -g @ukiyo-color-info "#0d4a68" 2>/dev/null || true - tmux set-option -g @ukiyo-color-notice "#a7471c" 2>/dev/null || true - tmux set-option -g @ukiyo-color-accent "#824f16" 2>/dev/null || true - tmux set-option -g @ukiyo-color-muted "#352e22" 2>/dev/null || true - tmux set-option -g @ukiyo-color-error "#842f24" 2>/dev/null || true - tmux set-option -g @ukiyo-color-alert "#654300" 2>/dev/null || true - tmux set-option -g @ukiyo-color-highlight "#0f6570" 2>/dev/null || true - tmux set-option -g @ukiyo-color-selection "#c8ad89" 2>/dev/null || true - # Restore default plugin color order (fg=bg_pane claro sobre bg=color) - tmux set-option -gu "@ukiyo-git-colors" 2>/dev/null || true - tmux set-option -gu "@ukiyo-cpu-usage-colors" 2>/dev/null || true - tmux set-option -gu "@ukiyo-ram-usage-colors" 2>/dev/null || true - ;; - dark) - KANAGAWA_VARIANT="dragon" - # Dreamcoder Ember Noir OLED palette — Ember Noir textures, ember_glow tension - tmux set-option -g @ukiyo-color-text "#e8dfd0" 2>/dev/null || true - tmux set-option -g @ukiyo-color-bg-bar "#181512" 2>/dev/null || true - tmux set-option -g @ukiyo-color-bg-pane "#100f0d" 2>/dev/null || true - tmux set-option -g @ukiyo-color-accent "#d99555" 2>/dev/null || true - tmux set-option -g @ukiyo-color-info "#4db35f" 2>/dev/null || true - tmux set-option -g @ukiyo-color-notice "#c96a45" 2>/dev/null || true - tmux set-option -g @ukiyo-color-muted "#c7b9aa" 2>/dev/null || true - tmux set-option -g @ukiyo-color-error "#ed8a7a" 2>/dev/null || true - tmux set-option -g @ukiyo-color-alert "#e8b866" 2>/dev/null || true - tmux set-option -g @ukiyo-color-highlight "#5f8f8f" 2>/dev/null || true - tmux set-option -g @ukiyo-color-selection "#2b231b" 2>/dev/null || true - # Swap plugin color order: fg=bg_bar (oscuro) sobre bg=color vibrante - tmux set-option -g @ukiyo-git-colors "accent bg_bar" 2>/dev/null || true - tmux set-option -g @ukiyo-cpu-usage-colors "notice bg_bar" 2>/dev/null || true - tmux set-option -g @ukiyo-ram-usage-colors "info bg_bar" 2>/dev/null || true - ;; - esac - tmux set-option -g @ukiyo-theme "kanagawa/${KANAGAWA_VARIANT}" 2>/dev/null || true - # Reload plugin to apply new theme colors immediately - bash "${KANAGAWA_DIR}/ukiyo.tmux" 2>/dev/null || true - fi + # Switch tmux-kanagawa theme variant to match Dreamcoder mode + # SOURCE OF TRUTH: colors MUST match themes/dreamcoder/tokens.json + # When updating tokens, update BOTH light AND dark sections here. + if [[ -d "${KANAGAWA_DIR}" ]]; then + case "${MODE}" in + light) + KANAGAWA_VARIANT="lotus" + # Dreamcoder Light palette — source: tokens.json modes.light.{text,accent,error,...} + tmux set-option -g @ukiyo-color-text "#17120d" 2>/dev/null || true + tmux set-option -g @ukiyo-color-bg-bar "#e6d7c4" 2>/dev/null || true + tmux set-option -g @ukiyo-color-bg-pane "#f3eadc" 2>/dev/null || true + tmux set-option -g @ukiyo-color-info "#0d4a68" 2>/dev/null || true + tmux set-option -g @ukiyo-color-notice "#a7471c" 2>/dev/null || true + tmux set-option -g @ukiyo-color-accent "#824f16" 2>/dev/null || true + tmux set-option -g @ukiyo-color-muted "#352e22" 2>/dev/null || true + tmux set-option -g @ukiyo-color-error "#842f24" 2>/dev/null || true + tmux set-option -g @ukiyo-color-alert "#654300" 2>/dev/null || true + tmux set-option -g @ukiyo-color-highlight "#0f6570" 2>/dev/null || true + tmux set-option -g @ukiyo-color-selection "#c8ad89" 2>/dev/null || true + # Restore default plugin color order (fg=bg_pane claro sobre bg=color) + tmux set-option -gu "@ukiyo-git-colors" 2>/dev/null || true + tmux set-option -gu "@ukiyo-cpu-usage-colors" 2>/dev/null || true + tmux set-option -gu "@ukiyo-ram-usage-colors" 2>/dev/null || true + ;; + dark) + KANAGAWA_VARIANT="dragon" + # Dreamcoder Ember Noir OLED palette — source: tokens.json modes.dark.{text,accent,error,...} + tmux set-option -g @ukiyo-color-text "#e8dfd0" 2>/dev/null || true + tmux set-option -g @ukiyo-color-bg-bar "#181512" 2>/dev/null || true + tmux set-option -g @ukiyo-color-bg-pane "#100f0d" 2>/dev/null || true + tmux set-option -g @ukiyo-color-accent "#d99555" 2>/dev/null || true + tmux set-option -g @ukiyo-color-info "#4db35f" 2>/dev/null || true + tmux set-option -g @ukiyo-color-notice "#c96a45" 2>/dev/null || true + tmux set-option -g @ukiyo-color-muted "#c7b9aa" 2>/dev/null || true + tmux set-option -g @ukiyo-color-error "#ed8a7a" 2>/dev/null || true + tmux set-option -g @ukiyo-color-alert "#e8b866" 2>/dev/null || true + tmux set-option -g @ukiyo-color-highlight "#5f8f8f" 2>/dev/null || true + tmux set-option -g @ukiyo-color-selection "#2b231b" 2>/dev/null || true + # Swap plugin color order: fg=bg_bar (oscuro) sobre bg=color vibrante + tmux set-option -g @ukiyo-git-colors "accent bg_bar" 2>/dev/null || true + tmux set-option -g @ukiyo-cpu-usage-colors "notice bg_bar" 2>/dev/null || true + tmux set-option -g @ukiyo-ram-usage-colors "info bg_bar" 2>/dev/null || true + ;; + esac + tmux set-option -g @ukiyo-theme "kanagawa/${KANAGAWA_VARIANT}" 2>/dev/null || true + # Reload plugin to apply new theme colors immediately + bash "${KANAGAWA_DIR}/ukiyo.tmux" 2>/dev/null || true + fi - # Source standalone tmux theme (pane borders, mode, bell colors) - TMUX_THEME="${HOME}/.config/tmux/tmux-dreamcoder.conf" - if [[ -f "${TMUX_THEME}" ]]; then - tmux source-file "${TMUX_THEME}" 2>/dev/null || true - fi + # Source standalone tmux theme (pane borders, mode, bell colors) + TMUX_THEME="${HOME}/.config/tmux/tmux-dreamcoder.conf" + if [[ -f "${TMUX_THEME}" ]]; then + tmux source-file "${TMUX_THEME}" 2>/dev/null || true + fi - printf ' tmux environment and theme updated for %s mode\n' "${MODE}" + printf ' tmux environment and theme updated for %s mode\n' "${MODE}" fi # --- /tmux integration --- @@ -136,12 +141,12 @@ WARP_THEME="${HOME}/.local/share/warp-terminal/themes/Dreamcoder.yaml" WARP_VARIANT="${DOTS_DIR}/Warp/.local/share/warp-terminal/themes/Dreamcoder-${MODE^}.yaml" if [[ -L "${DUNST_CONF}" ]]; then - target=$(readlink "${DUNST_CONF}") - case "${target}" in - *dunst-dreamcoder-dark.conf|*dunst-dreamcoder-light.conf) - ln -sf "${DOTS_DIR}/themes/dreamcoder/dunst-dreamcoder.conf" "${DUNST_CONF}" - ;; - esac + target=$(readlink "${DUNST_CONF}") + case "${target}" in + *dunst-dreamcoder-dark.conf | *dunst-dreamcoder-light.conf) + ln -sf "${DOTS_DIR}/themes/dreamcoder/dunst-dreamcoder.conf" "${DUNST_CONF}" + ;; + esac fi # Warp: flip active theme symlink to mode-specific variant From 1dd4f5dc3fa21cba6d95675452c922bcba0fe8de Mon Sep 17 00:00:00 2001 From: DreamCoder08 Date: Wed, 1 Jul 2026 16:46:50 -0500 Subject: [PATCH 03/29] feat(prompt): upgrade Starship renderer to 23 modules with AI session MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add new modules while preserving classic two-line powerline layout: - : red ✗ on command failure - : laptop battery indicator < 20% - : k8s context with conditional namespace - : terraform workspace - : language version module - : Docker/container indicator - [custom.ai_session]: AI session state (Claude/OpenCode) Restore with show_always=true and correct U+F007 user icon. Fix kubernetes TOML escaping: use single-quoted literal string for Part of Plan 02: Shell Prompt Excellence --- src/dreamcoder_theme/renderers_starship.py | 117 +++++++++++++++------ 1 file changed, 84 insertions(+), 33 deletions(-) diff --git a/src/dreamcoder_theme/renderers_starship.py b/src/dreamcoder_theme/renderers_starship.py index ebfa9f7..993e6d0 100644 --- a/src/dreamcoder_theme/renderers_starship.py +++ b/src/dreamcoder_theme/renderers_starship.py @@ -17,28 +17,36 @@ def starship_content(c: dict[str, str]) -> str: prom_muted = guard(c["prompt_muted"], c["bg"], mode) error = guard(c["error"], c["bg"], mode) warning = guard(c["warning"], c["bg"], mode) + focus_col = c["focus"] + diag = c["diagnostic"] + accent = c["accent"] + lavender_col = c["lavender"] + mauve_col = c["mauve"] return f'''# ======================================================== # {c["name"]} — Starship prompt # ======================================================== -# Modern two-line layout with powerline segments. -# Line 1: context (directory, git) -# Line 2: input character only (clean) +# Two-line powerline layout with context-aware modules. +# Line 1: username, directory, git + fill + battery/k8s/terraform/cmd/time +# Line 2: character (with exit code indicator on error) add_newline = true palette = "dreamcoder" command_timeout = 500 format = """ -[](fg:prompt_surface0)\\ +[\\uECA6](fg:prompt_surface0)\\ $username\\ -[](bg:prompt_surface1 fg:prompt_surface0)\\ +[\\uECA0](bg:prompt_surface1 fg:prompt_surface0)\\ $directory\\ -[](bg:prompt_accent fg:prompt_surface1)\\ +[\\uECA0](bg:prompt_accent fg:prompt_surface1)\\ $git_branch\\ $git_status\\ -[](fg:prompt_accent)\\ +[\\uECB4](fg:prompt_accent)\\ $fill\\ +$battery\\ +$kubernetes\\ +$terraform\\ $cmd_duration\\ $time $character""" @@ -58,46 +66,73 @@ def starship_content(c: dict[str, str]) -> str: prompt_accent = "{prom_acc}" prompt_accent_2 = "{c["prompt_accent_2"]}" sage = "{c["sage"]}" -diagnostic = "{c["diagnostic"]}" -lavender = "{c["lavender"]}" -mauve = "{c["mauve"]}" +diagnostic = "{diag}" +lavender = "{lavender_col}" +mauve = "{mauve_col}" error = "{error}" warning = "{warning}" border = "{c["border_ui"]}" -focus = "{c["focus"]}" +focus = "{focus_col}" link = "{c["link"]}" [username] show_always = true style_user = "bg:prompt_surface0 fg:prompt_text bold" style_root = "bg:prompt_surface0 fg:error bold" -format = "[  $user ]($style)" +format = "[ \\uf007 $user ]($style)" +detect_env_vars = ["SSH_CONNECTION", "SSH_CLIENT", "SSH_TTY"] [directory] style = "bg:prompt_surface1 fg:prompt_text bold" -format = "[  $path ]($style)" +format = "[ \\uf0F7 $path ]($style)" truncation_length = 2 truncate_to_repo = true home_symbol = "" [git_branch] -symbol = "" +symbol = "\\uf418" style = "bg:prompt_accent fg:prompt_bg bold" format = "[ $symbol $branch ]($style)" [git_status] style = "bg:prompt_accent fg:prompt_bg bold" format = "[$all_status$ahead_behind ]($style)" -conflicted = "${{count}} " -ahead = "⇡${{count}} " -behind = "⇣${{count}} " -diverged = "⇕⇡${{ahead_count}}⇣${{behind_count}} " +conflicted = "\\ue727${{count}} " +ahead = "\\u21E1${{count}} " +behind = "\\u21E3${{count}} " +diverged = "\\u2195\\u21E1${{ahead_count}}\\u21E3${{behind_count}} " untracked = "?${{count}} " -stashed = "󰏗${{count}} " +stashed = "\\uf0CF${{count}} " modified = "~${{count}} " staged = "+${{count}} " -renamed = "»${{count}} " -deleted = "✘${{count}} " +renamed = "\\u00BB${{count}} " +deleted = "\\u2718${{count}} " + +[status] +disabled = false +format = "[$symbol]($style)" +symbol = "\\u2717" +style = "bg:error fg:prompt_bg bold" +pipestatus = false + +[battery] +disabled = false +display = [ + {{threshold = 20, style = "fg:error bold", symbol = "\\uf244 "}}, +] + +[kubernetes] +format = '[$symbol$context( \\($namespace\\))]($style)' +style = "fg:diagnostic bold" +symbol = "\\uF3B2 " +disabled = false +detect_env_vars = ["KUBECONFIG", "KUBERNETES_SERVICE_HOST", "KUBERNETES_PORT"] + +[terraform] +format = "[$symbol$workspace]($style)" +style = "fg:lavender bold" +symbol = "\\uFD31 " +disabled = false [fill] symbol = " " @@ -105,7 +140,7 @@ def starship_content(c: dict[str, str]) -> str: [cmd_duration] min_time = 2500 style = "fg:prompt_muted" -format = "[  $duration ]($style)" +format = "[ \\uf552 $duration ]($style)" [time] disabled = false @@ -113,39 +148,55 @@ def starship_content(c: dict[str, str]) -> str: style = "fg:prompt_muted" [character] -success_symbol = "[❯](bold fg:prompt_accent)" -error_symbol = "[❯](bold fg:error)" -vimcmd_symbol = "[❮](bold fg:sage)" +success_symbol = "[\\u276F](bold fg:prompt_accent)" +error_symbol = "[\\u276F](bold fg:error)" +vimcmd_symbol = "[\\u276E](bold fg:sage)" # Runtime versions - show only when relevant, keep compact [bun] -symbol = "" +symbol = "\\uF5EF" style = "fg:prompt_accent bold" format = "[ $symbol $version]($style)" [nodejs] -symbol = "" +symbol = "\\uE718" style = "fg:sage bold" format = "[ $symbol $version]($style)" [python] -symbol = "" -style = "fg:diagnostic bold" +symbol = "\\uE73C" +style = "fg:diag bold" format = "[ $symbol $version]($style)" [golang] -symbol = "" +symbol = "\\uE627" style = "fg:lavender bold" format = "[ $symbol $version]($style)" [rust] -symbol = "" +symbol = "\\uE7A8" style = "fg:mauve bold" format = "[ $symbol $version]($style)" +[java] +symbol = "\\uE204" +style = "fg:lavender bold" +format = "[ $symbol $version]($style)" + +[container] +format = "[$symbol \\uf48B $name]($style)" +style = "fg:warning bold" +symbol = "\\uf4E6" + +[custom.ai_session] +command = "cat ~/.cache/dreamcoder/ai-session.state 2>/dev/null || echo ''" +when = """test -f ~/.cache/dreamcoder/ai-session.state""" +format = "[\\uf5B5 $output]($style)" +style = "fg:diag bold" + [docker_context] -symbol = "" -style = "fg:diagnostic bold" +symbol = "\\uf308" +style = "fg:diag bold" format = "[ $symbol $context]($style)" only_with_files = true ''' From 14cd7fb1c59671c80ac1af5fd1976c5f3c3ef46e Mon Sep 17 00:00:00 2001 From: DreamCoder08 Date: Wed, 1 Jul 2026 16:47:07 -0500 Subject: [PATCH 04/29] feat(prompt): add AI session state detection for fish shell Detects active Claude Code or OpenCode sessions and writes state to ~/.cache/dreamcoder/ai-session.state for Starship's custom.ai_session module to display in the prompt. Shows model name and token count when Claude is active. Falls back to OpenCode state detection when no Claude session found. Part of Plan 02: Shell Prompt Excellence --- .../fish/conf.d/25-dreamcoder-ai-env.fish | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 Shell/.config/fish/conf.d/25-dreamcoder-ai-env.fish diff --git a/Shell/.config/fish/conf.d/25-dreamcoder-ai-env.fish b/Shell/.config/fish/conf.d/25-dreamcoder-ai-env.fish new file mode 100644 index 0000000..194c3c1 --- /dev/null +++ b/Shell/.config/fish/conf.d/25-dreamcoder-ai-env.fish @@ -0,0 +1,46 @@ +# Dreamcoder AI Session State +# Detects active AI coding sessions and writes state for Starship prompt. +# Sources: Claude Code (~/.claude/sessions/), OpenCode (~/.opencode/state) +# +# Starship reads ~/.cache/dreamcoder/ai-session.state via custom.ai_session module. +# This script should be called by fish_prompt or via a systemd path unit. + +set -l CACHE_DIR "$HOME/.cache/dreamcoder" +mkdir -p "$CACHE_DIR" +set -l STATE_FILE "$CACHE_DIR/ai-session.state" + +# Reset state +echo -n >"$STATE_FILE" + +# Check Claude Code sessions +set -l CLAUDE_SESSIONS "$HOME/.claude/sessions" +if test -d "$CLAUDE_SESSIONS" + # Find most recent active session + set -l latest (command ls -t "$CLAUDE_SESSIONS" 2>/dev/null | head -1) + if test -n "$latest" + # Read session metadata for context info + set -l meta_file "$CLAUDE_SESSIONS/$latest/meta.json" + if test -f "$meta_file" + set -l model (jq -r '.model // "claude"' "$meta_file" 2>/dev/null) + set -l tokens (jq -r '.total_tokens // ""' "$meta_file" 2>/dev/null) + if test -n "$model" + if test -n "$tokens" + printf '%s %sK' "$model" (math "$tokens / 1000" 2>/dev/null) >"$STATE_FILE" + else + printf '%s' "$model" >"$STATE_FILE" + end + end + end + end +end + +# Check OpenCode sessions (falls through if Claude didn't write state) +if not test -s "$STATE_FILE" + set -l OPENCODE_STATE "$HOME/.opencode/state" + if test -f "$OPENCODE_STATE" + set -l model (jq -r '.model // "opencode"' "$OPENCODE_STATE" 2>/dev/null) + if test -n "$model" -a "$model" != "null" + printf '%s' "$model" >"$STATE_FILE" + end + end +end From a89e3ee75492857fdb3d6bd9e2c240a2a0801ca4 Mon Sep 17 00:00:00 2001 From: DreamCoder08 Date: Wed, 1 Jul 2026 16:47:17 -0500 Subject: [PATCH 05/29] docs(sdd): add overlay, prompt, personalization, and DX plans Four independent SDD plans for the dreamcoder-dots overlay vision: - Plan 01: Overlay Compatibility (Gentleman.Dots + ML4W) - Plan 02: Shell Prompt Excellence (Starship with 23 modules) - Plan 03: Personalization Suite (aliases, functions, scripts) - Plan 04: Documentation & Developer Experience --- ...07-01-sdd-plan-01-overlay-compatibility.md | 81 ++++++++ ...-01-sdd-plan-02-shell-prompt-excellence.md | 173 +++++++++++++++++ ...07-01-sdd-plan-03-personalization-suite.md | 175 ++++++++++++++++++ .../2026-07-01-sdd-plan-04-documentation.md | 129 +++++++++++++ 4 files changed, 558 insertions(+) create mode 100644 docs/superpowers/plans/2026-07-01-sdd-plan-01-overlay-compatibility.md create mode 100644 docs/superpowers/plans/2026-07-01-sdd-plan-02-shell-prompt-excellence.md create mode 100644 docs/superpowers/plans/2026-07-01-sdd-plan-03-personalization-suite.md create mode 100644 docs/superpowers/plans/2026-07-01-sdd-plan-04-documentation.md diff --git a/docs/superpowers/plans/2026-07-01-sdd-plan-01-overlay-compatibility.md b/docs/superpowers/plans/2026-07-01-sdd-plan-01-overlay-compatibility.md new file mode 100644 index 0000000..4e44e5d --- /dev/null +++ b/docs/superpowers/plans/2026-07-01-sdd-plan-01-overlay-compatibility.md @@ -0,0 +1,81 @@ +# SDD Plan 01: Overlay Compatibility — Gentleman.Dots + ML4W + +> **Goal:** Guarantee that dreamcoder-dots theme hooks work flawlessly on top of both Gentleman.Dots and ML4W installations. The user installs Gentleman → ML4W → dreamcoder, and everything just works. +> **Strategy:** Verify every theme hook path, include name, and file reference against BOTH base repos. Fix mismatches. +> **Priority:** 🔴 CRITICAL — prerequisite for everything else +> **Estimated diff:** ~300 lines across 15+ files (mostly fixes) + +## Context + +dreamcoder-dots is designed as a **visual overlay** — it generates color files that get `@import`ed or `[include]`d by the base configs from Gentleman.Dots and ML4W. But there are **friction points**: + +- Path mismatches: dreamcoder writes to `~/.config/hypr/colors.conf` but ML4W includes from `~/.config/hypr/colors.conf`? Verificar. +- File naming: `dunst-dreamcoder-dark.conf` vs what dunstrc expects +- Include syntax differences: Lua vs conf vs CSS imports +- Mode switching: dreamcoder auto-switches dark/light, pero los includes tienen que actualizarse dinámicamente + +## What to Verify + +### Layer 1: Gentleman.Dots Overlay + +| Component | dreamcoder hook | Gentleman base | Integration Status | +| ------------ | --------------------------------- | ----------------------------------------- | -------------------------------- | +| **Ghostty** | `themes/dreamcoder-{mode}` | `GentlemanGhostty/config` `theme = ...` | 🔍 Verify path resolution | +| **Kitty** | `colors-dreamcoder-{mode}.conf` | `GentlemanKitty/kitty.conf` `include` | 🔍 Verify include directive | +| **Tmux** | `dreamcoder-{mode}.conf` | `GentlemanTmux/tmux.conf` `source-file` | 🔍 Verify source-file path | +| **Zellij** | `dreamcoder-{mode}.kdl` | `GentlemanZellij/zellij/config.kdl` | 🔍 Verify theme reference | +| **Nvim** | `colors/dreamcoder-{mode}.lua` | `GentlemanNvim/nvim/init.lua` colorscheme | ✅ Works (verify LazyVim compat) | +| **Starship** | `starship-{mode}.toml` | `starship.toml` | ✅ Works via env var | +| **Fish** | `conf.d/05-dreamcoder-theme.fish` | `GentlemanFish/fish/config.fish` | 🔍 Verify no conflicts | + +### Layer 2: ML4W Overlay + +| Component | dreamcoder hook | ML4W base | Integration Status | +| ------------- | ------------------------------ | ---------------------------- | ------------------------- | +| **Hyprland** | `hypr-colors-{mode}.conf` | `hypr/colors.conf` | 🔍 Verify variable naming | +| **Waybar** | `waybar-{mode}.css` | `waybar/style.css` `@import` | 🔍 Verify CSS import | +| **Rofi** | `rofi-{mode}.rasi` | `rofi/config.rasi` `@import` | 🔍 Verify rasi import | +| **Dunst** | `dunst-dreamcoder-{mode}.conf` | `dunst/dunstrc` `[include]` | 🔍 Verify include works | +| **Btop** | `btop-dreamcoder-{mode}.theme` | `btop/btop.conf` `theme =` | 🔍 Verify theme selection | +| **GTK** | `colors.css` | `gtk-3.0/gtk.css` `@import` | 🔍 Verify path | +| **Fastfetch** | — | Already has own config | ✅ No action needed | + +## Acceptance Criteria + +1. Install Gentleman.Dots → install ML4W → run `./scripts/dreamcoder install` +2. All terminal colors show dreamcoder palette (dark mode = Ember Noir, light = Cocoa/Lúcuma) +3. No "file not found" errors in any application log +4. `DREAMCODER_THEME_MODE=light` switches ALL components to light simultaneously +5. `DREAMCODER_THEME_MODE=dark` switches ALL components back to dark +6. No duplicate color definitions (dreamcoder doesn't conflict with base theme) + +## Tasks + +### Task 1: Audit Gentleman.Dots Integration + +- Clone both repos fresh +- Run dreamcoder's install hooks +- Check EVERY app for correct color loading +- Document any path/include mismatches + +### Task 2: Audit ML4W Integration + +- Same process for ML4W base +- Pay special attention to hyprland variable naming (ML4W uses `$COLOR` vs dreamcoder's `$dcCOLOR`) + +### Task 3: Fix Path Mismatches + +- Update `renderers_*.py` to output correct paths for each base +- Update `install-dreamcoder-hooks.sh` for any symlink/include path changes +- Update `settings.py` ThemePaths if needed + +### Task 4: Add CI Check + +- Add GitHub workflow step that installs on a base config and verifies colors load +- Create test that validates all hook files exist at expected paths + +## Risks + +- **ML4W updates**: ML4W changes file names between versions — need version detection or tolerance +- **Gentleman.Dots updates**: Same risk. Consider pinning compatible versions in docs +- **Order matters**: Install Gentleman → ML4W → dreamcoder. If order changes, hooks point to wrong base diff --git a/docs/superpowers/plans/2026-07-01-sdd-plan-02-shell-prompt-excellence.md b/docs/superpowers/plans/2026-07-01-sdd-plan-02-shell-prompt-excellence.md new file mode 100644 index 0000000..46181b0 --- /dev/null +++ b/docs/superpowers/plans/2026-07-01-sdd-plan-02-shell-prompt-excellence.md @@ -0,0 +1,173 @@ +# SDD Plan 02: Shell Prompt Excellence — Best-in-Class Starship + +> **Goal:** Elevate the dreamcoder Starship prompt to be among the best in the world, learning from top references while keeping the dreamcoder visual identity and cross-shell consistency. +> **References:** seifscape/macos-dot-files (AI session state in prompt), Powerlevel10k (instant prompt), devterm-kit (auto-setup), JaKooLit (multi-distro), alohays/dotfiles (agent-friendly) +> **Target files:** `Shell/.config/starship.toml`, `starship-dark.toml`, `starship-light.toml`, `conf.d/20-dreamcoder-prompt.fish`, `.zshrc`, `.bashrc` +> **Priority:** 🔴 CRITICAL — the prompt is what the user sees every single command +> **Estimated diff:** ~400 lines across 6 files + +## Context + +The prompt is the most-interacted-with UI in any developer's workflow. dreamcoder-dots already has Starship with dark/light variants, but they can be elevated significantly by learning from the best in the world. + +### Current state + +- `starship.toml` — base config +- `starship-dark.toml` — dark mode colors +- `starship-light.toml` — light mode colors +- `conf.d/20-dreamcoder-prompt.fish` — fish prompt integration +- Works in bash/zsh/fish via `STARSHIP_CONFIG` env var + +### What the best prompts do in 2026 + +| Feature | Who does it | dreamcoder has? | +| ------------------------------------------------------- | ----------------- | --------------- | +| **AI session state** (model, context, cost) | seifscape | ❌ | +| **Git info** (branch, status, ahead/behind) | All | ✅ Basic | +| **Language version** (node, python, rust, go) | All | ✅ Basic | +| **Command duration** | JaKooLit | ❌ | +| **Kubernetes context** | Starship default | ❌ | +| **Terraform workspace** | Starship default | ❌ | +| **Exit code indicator** (red ✗ on failure) | All the best ones | ❌ | +| **Time** (24h in prompt) | Many | ✅ | +| **Username + hostname** (conditional, show on SSH only) | Powerlevel10k | ❌ | +| **Container/VM indicator** | alohays | ❌ | +| **Battery** (on laptop) | ML4W | ❌ | +| **Nix shell indicator** | Starship default | ❌ | + +## Design Principles (dreamcoder-specific) + +1. **Health first**: No information overload. Show what matters, hide the rest. +2. **Visual hierarchy**: The most important info is most visually prominent. +3. **Context-aware**: Show Kubernetes context only when in a k8s directory. +4. **Speed**: Starship modules load lazily. No blocking calls. +5. **Consistency**: Same prompt in fish, zsh, and bash. +6. **Dark/Light**: Two complete color schemes adapted from tokens.json. + +## Prompt Architecture + +``` +┌──────────────────────────────────────────────────────────────┐ +│ $ctx $git_branch $git_status $lang $time ❯ │ +│ cyan accent subtle diag muted │ +│ │ +│ $cmd_duration $exit_code $battery │ +│ (line 2, only shown when relevant) │ +└──────────────────────────────────────────────────────────────┘ +``` + +### Module Plan + +| Module | Condition | dark color | light color | Priority | +| ---------------- | --------------------------- | ---------- | ----------- | ------------ | +| **username** | Only on SSH | `#5f95ca` | `#0d4a68` | 🟢 Optional | +| **hostname** | Only on SSH | `#d99555` | `#824f16` | 🟢 Optional | +| **directory** | Always, truncated | `#e8dfd0` | `#17120d` | ✅ Required | +| **git_branch** | In git repo | `#d99555` | `#824f16` | ✅ Required | +| **git_status** | In git repo | `#b8a99a` | `#725e4c` | ✅ Required | +| **package** | Has package.json/Cargo.toml | `#5f95ca` | `#0d4a68` | 🟡 Nice | +| **node_version** | .nvmrc or .node-version | `#5f95ca` | `#0d4a68` | 🟡 Nice | +| **python_venv** | Virtual env active | `#4db35f` | `#3d723d` | 🟡 Nice | +| **rust_version** | Cargo project | `#c96a45` | `#a7471c` | 🟡 Nice | +| **go_version** | Go project | `#5f95ca` | `#0d4a68` | 🟡 Nice | +| **terraform** | Terraform dir | `#a87cb5` | `#57478b` | 🟢 Optional | +| **kubernetes** | kube context | `#5f95ca` | `#0d4a68` | 🟢 Optional | +| **cmd_duration** | > 2 seconds | `#b8a99a` | `#725e4c` | ✅ Required | +| **exit_code** | Non-zero | `#ed8a7a` | `#842f24` | ✅ Required | +| **time** | Always (24h) | `#938274` | `#554638` | 🟡 Subdued | +| **line_break** | Always | — | — | ✅ Required | +| **battery** | Laptop, < 20% | `#ed8a7a` | `#842f24` | 🟢 Optional | +| **shell** | Always | `#d99555` | `#824f16` | 🟡 Character | +| **ai_session** | Claude/Codex active | `#5f95ca` | `#0d4a68` | 🔬 **New** | + +### AI Session State Module (NEW — cutting edge) + +This is what makes dreamcoder STAND OUT. Nobody in the dotfiles world has a prompt that shows AI session state... except seifscape who just started doing it in 2026. + +```toml +[custom.ai_session] +command = "~/.config/dreamcoder/scripts/ai-session-status.sh" +when = """test -f ~/.config/dreamcoder/ai-session.env""" +format = "[⎔ $output]($style)" +style = "bold cyan" +``` + +The script would read: + +- `CLAUDE_SESSION_ID` or `OPENCODE_SESSION_ID` +- Token count / context usage +- Cost estimate + +This is bleeding edge. Nobody else ships this as a dotfile feature. + +## Acceptance Criteria + +1. Starship prompt renders in fish, zsh, and bash identically (except shell-specific features) +2. Dark mode: warm dark background (`#100f0d`), warm gold accents (`#d99555`) +3. Light mode: paper background (`#f3eadc`), brown accents (`#824f16`) +4. Git info shows branch name + dirty/clean status +5. Language version shows for node/python/rust/go when in relevant project +6. Exit code turns red on command failure +7. Command duration shows for slow commands (> 2s) +8. AI session state shows when Claude/OpenCode is active +9. All module colors come from dreamcoder `tokens.json` +10. Battery shows on laptop when below 20% +11. Prompt renders in < 50ms (Starship lazy loading) + +## Tasks + +### Task 1: Starship TOML Architecture + +- Redesign `starship.toml` as the single source of truth +- `starship-dark.toml` → only color overrides for dark mode +- `starship-light.toml` → only color overrides for light mode +- Enable all desired modules with proper `when` conditions + +### Task 2: Core Modules + +- directory, git_branch, git_status, package, node_version, python_venv +- rust_version, go_version, cmd_duration, exit_code, time, line_break + +### Task 3: Advanced Modules + +- username/hostname (conditional on SSH) +- kubernetes context, terraform workspace +- battery indicator +- shell character + +### Task 4: AI Session State (bleeding edge) + +- Create `scripts/ai-session-status.sh` — reads Claude/OpenCode session state +- Create `conf.d/25-dreamcoder-ai-env.fish` — sets env vars for AI state +- Update `.zshrc` and `.bashrc` for AI state in zsh/bash +- Add custom Starship module for AI session + +### Task 5: Shell Integration Cleanup + +- Ensure `STARSHIP_CONFIG` switch works on dark/light toggle in ALL shells +- `conf.d/20-dreamcoder-prompt.fish` — clean up, add path detection +- `.zshrc` — verify p10k compatibility (if user uses p10k instead) +- `.bashrc` — verify starship works in bash too + +### Task 6: Verification + +- Visual diff in dark and light modes +- Time prompt rendering speed +- Test in fish, zsh, bash +- Test on SSH session (username/hostname shows) +- Test AI session module + +## Risks + +- **Starship version**: New modules may require latest Starship — pin minimum version +- **AI session state**: Claude/OpenCode don't expose session state as files yet — may need polling or env vars +- **Shell differences**: Nushell prompt config is completely different from Fish/Zsh — document limitation +- **Color consistency**: Each module must use the EXACT color from tokens.json — use the token names, not eyeballed colors + +## References + +- Current configs: `starship.toml`, `starship-dark.toml`, `starship-light.toml` +- Current integration: `conf.d/20-dreamcoder-prompt.fish` +- seifscape/macos-dot-files: AI session in prompt (reference only) +- Starship docs: +- Tokens: `themes/dreamcoder/tokens.json` (accent, diagnostic, error colors) diff --git a/docs/superpowers/plans/2026-07-01-sdd-plan-03-personalization-suite.md b/docs/superpowers/plans/2026-07-01-sdd-plan-03-personalization-suite.md new file mode 100644 index 0000000..5d12800 --- /dev/null +++ b/docs/superpowers/plans/2026-07-01-sdd-plan-03-personalization-suite.md @@ -0,0 +1,175 @@ +# SDD Plan 03: Dreamcoder Personalization Suite + +> **Goal:** Curate a set of opinionated personalizations that make dreamcoder-dots uniquely productive, beyond what Gentleman.Dots and ML4W provide. Think "what would a senior architect with 15 years of experience want in their dotfiles that isn't in any framework?" +> **Target:** Aliases, functions, keybindings, scripts, and workflow enhancements unique to dreamcoder +> **Priority:** 🟡 HIGH — this is the "secret sauce" that makes dreamcoder YOURS +> **Estimated diff:** ~500 lines across 20+ files + +## Philosophy + +Gentleman.Dots gives you a Ferrari. ML4W gives you a workshop. dreamcoder gives you the **custom interior** — the ergonomic touches, the shortcuts that save you 5 seconds 50 times a day, the things that make the environment feel like YOURS. + +## Scope + +### Fish Shell Personalizations + +**Existing (improve):** + +| File | What it does | Improvement | +| ------------------------------------- | --------------------------- | ----------------------------------------- | +| `conf.d/10-dreamcoder-keyboard.fish` | Vi mode, keybindings | Add `jk` → ESC, better vi-mode indicators | +| `conf.d/15-dreamcoder-shortcuts.fish` | Custom shortcuts | Expand with modern CLI aliases | +| `conf.d/16-dreamcoder-icons.fish` | LS_COLORS, icons | Use dreamcoder palette, add eza colors | +| `conf.d/20-dreamcoder-prompt.fish` | Prompt config | Clean up, add AI session env | +| `conf.d/30-dreamcoder-fastfetch.fish` | Fastfetch on terminal start | Add timing, conditional (not on SSH) | + +**Functions (NEW):** + +| Function | What it does | Reference | +| ----------------- | ---------------------------------------------- | --------------------------- | +| `mkcd.fish` | `mkdir -p + cd` | Common, surprisingly absent | +| `extract.fish` | Extract ANY archive type | 7z, tar.gz, zip, rar, etc. | +| `cheat.fish` | Quick cheat sheet (tldr wrapper) | Better than `man` | +| `dots.fish` | `cd` to dreamcoder-dots repo | Quick access | +| `sysupdate.fish` | Update everything (pacman, AUR, flatpak, brew) | ML4W-like | +| `ports.fish` | Show listening ports | Developer essential | +| `killport.fish` | Kill process on a port | Developer essential | +| `http.fish` | HTTP request with syntax highlighting | httpie wrapper | +| `logs.fish` | Tail journalctl with filters | Developer essential | +| `mcfly.fish` | Better Ctrl+R for history | Modern `fzf` history | +| `tm-session.fish` | Quick tmux session picker | fzf-based | + +**Aliases (NEW):** + +``` +alias g=git # exists +alias gs='git status' # exists +alias gp='git push' # exists +alias gl='git log --oneline --graph' # exists +alias ll='eza -la --icons' # improve with eza +alias la='eza -a --icons' +alias lt='eza -T --icons' # tree view +alias cat='bat' # exists +alias find='fd' # new +alias grep='rg' # improve +alias ps='procs' # modern ps +alias top='btm' # bottom (modern htop) +alias du='dua' # modern du +alias ping='gping' # graphical ping +alias df='duf' # modern df +alias sed='sd' # modern sed +alias help='tldr' # modern man +alias cd='z' # zoxide +alias cdi='zi' # zoxide interactive +``` + +### Zsh Equivalent + +- Same aliases in `.zshrc` +- Same functions in a `functions/` directory sourced by `.zshrc` +- Powerlevel10k or Starship prompt (user choice) + +### Bash Equivalent + +- Same aliases in `.bashrc` +- Same functions + +### Tmux Personalizations + +| Feature | Current | Improvement | +| --------------- | ------------ | --------------------------------------- | +| Prefix | `C-a` | ✅ Good, keep | +| Split | `\|` and `-` | Change to `v` and `d` (Gentleman-style) | +| Navigation | `Alt+arrows` | Add `vim-tmux-navigator` integration | +| Session picker | None | Add fzf-based `C-f` session picker | +| Floating window | None | Add `Alt+g` for scratch terminal | +| Resurrect | None | Add tmux-resurrect auto-save | + +### Git Config Personalizations + +| Feature | What | +| -------------------- | ---------------------------------------------------- | +| `delta` as diff tool | Already exists (`delta-dreamcoder-{mode}.gitconfig`) | +| `git lg` alias | Pretty log with graph | +| `git undo` | Soft reset to previous commit | +| `git cleanup` | Delete merged branches | +| `git conflicts` | List conflicted files | +| `git root` | Show repo root path | +| `includeIf` | Conditional git config per directory | + +### Script Improvements + +| Script | What to add | +| ------------------ | ------------------------------------------------------------------- | +| `doctor.sh` | Check ALL theme hooks are properly installed, not just colors | +| `repair.sh` | Re-stow ALL components, not just hooks | +| `status.sh` | Show full system status: theme mode, installed components, versions | +| `dreamcoder.sh` | Add `dreamcoder ai-status` subcommand | +| `set-wallpaper.sh` | Add wallpaper rotation support | + +## Acceptance Criteria + +1. All aliases work in fish, zsh, and bash +2. Every function has `--help` or at minimum a comment explaining usage +3. No alias conflicts with existing commands (check with `type`) +4. `eza`, `bat`, `fd`, `rg`, `zoxide` are detected gracefully (no errors if missing) +5. Tmux has vim-tmux-navigator support +6. Git delta uses dreamcoder dark/light colors matching theme mode +7. `dreamcoder doctor` shows green for every expected component + +## Tasks + +### Task 1: Fish Enhancements + +- Create `conf.d/12-dreamcoder-keybindings.fish` (jk→ESC, improved vi-mode) +- Create `functions/mkcd.fish`, `extract.fish`, `cheat.fish`, `dots.fish` +- Create `functions/sysupdate.fish`, `ports.fish`, `killport.fish` +- Create `functions/http.fish`, `logs.fish`, `tm-session.fish` +- Update `conf.d/15-dreamcoder-shortcuts.fish` with modern CLI aliases +- Update `conf.d/16-dreamcoder-icons.fish` with dreamcoder eza/ls colors + +### Task 2: Zsh Enhancements + +- Same aliases in `.zshrc` +- Create `Shell/.config/zsh/functions/` directory +- Source functions from `.zshrc` +- Ensure p10k users can use dreamcoder colors + +### Task 3: Bash Enhancements + +- Same aliases in `.bashrc` +- Source dreamcoder functions + +### Task 4: Tmux Improvements + +- Add `vim-tmux-navigator` keybindings +- Add fzf-based session picker (`C-f`) +- Add scratch terminal popup (`Alt-g`) +- Add tmux-resurrect auto-save on `prefix + Ctrl-s` + +### Task 5: Script Polish + +- Improve `doctor.sh` — check every component, not just colors +- Improve `repair.sh` — reinstall hooks with confirmation +- Improve `status.sh` — show theme mode, component versions, last wallaper change +- Add `dreamcoder ai-status` subcommand + +### Task 6: Verification + +- Test every alias in every shell +- Test every function with expected args and edge cases +- `dreamcoder doctor` passes +- Tmux navigation works with vim-tmux-navigator + +## Risks + +- **Shell-specific syntax**: Fish uses `function` keyword, Zsh uses `function` or `name()`, Bash uses `name()`. Each function needs 3 implementations. +- **Modern CLI dependencies**: `eza`, `bat`, `fd`, `rg`, `procs`, `btm`, `dua`, `gping`, `duf`, `sd`, `tldr` — not everyone has these installed. All aliases must gracefully degrade. +- **Tmux plugin dependency**: vim-tmux-navigator and tmux-resurrect require TPM — must be installed first. + +## References + +- Existing shell configs: `Shell/.config/fish/*.fish`, `Shell/.bashrc`, `Shell/.zshrc` +- Existing Tmux config: `Tmux/.tmux.conf` +- Existing scripts: `scripts/doctor.sh`, `repair.sh`, `status.sh`, `dreamcoder.sh` +- Modern CLI alternatives: `eza`, `bat`, `fd`, `rg`, `procs`, `btm`, `dua`, `gping`, `duf`, `sd`, `tldr`, `zoxide` diff --git a/docs/superpowers/plans/2026-07-01-sdd-plan-04-documentation.md b/docs/superpowers/plans/2026-07-01-sdd-plan-04-documentation.md new file mode 100644 index 0000000..dd8c37c --- /dev/null +++ b/docs/superpowers/plans/2026-07-01-sdd-plan-04-documentation.md @@ -0,0 +1,129 @@ +# SDD Plan 04: Documentation & Developer Experience + +> **Goal:** Create crystal-clear documentation for the 3-step install flow (Gentleman.Dots → ML4W → dreamcoder-dots), plus a comparison page showing what dreamcoder adds vs the competition. +> **Target:** README.md overhaul, INSTALL.md creation, COMPARISON.md creation +> **Priority:** 🟡 HIGH — without docs, nobody knows how to use dreamcoder +> **Estimated diff:** ~500 lines across 5 files + +## Context + +The biggest problem with dreamcoder-dots currently is that **nuevo usuario no sabe cómo instalarlo ni qué hace**. La documentación actual asume que el usuario sabe que necesita Gentleman.Dots + ML4W primero. + +## Scope + +### README.md Overhaul + +Current: Technical description of theme pipeline, focused on developers contributing. +Target: **User-centric** — "How to get Dreamcoder running in 10 minutes." + +Sections: + +```markdown +# Dreamcoder OS + +> La capa visual premium para Gentleman.Dots + ML4W. +> Café/Lúcuma. Ember Noir. Contraste saludable. Identidad. + +## Quick Start (3-Step Install) + +### 1. Install Gentleman.Dots + +`brew install gentleman-dots` or download from GitHub +→ Provides: Neovim (29 plugins), Ghostty shaders, Tmux/Zellij, Vim Trainer, Fish/Zsh/Nushell + +### 2. Install ML4W OS + +`bash <(curl -s https://ml4w.com/os/stable)` +→ Provides: Hyprland config, Waybar, Rofi, Dunst, animations, keybindings + +### 3. Install Dreamcoder + +`git clone ... && ./scripts/dreamcoder install` +→ **Applies**: dreamcoder dark/light/dusk color system across all components +→ **Adds**: custom shell aliases, AI session prompt, smart functions, auto-theme-switching +``` + +### New Files + +| File | Purpose | +| ------------------------ | ---------------------------------------------------------------- | +| `INSTALL.md` | Detailed install guide with screenshots | +| `COMPARISON.md` | What dreamcoder adds vs Gentleman alone vs ML4W alone | +| `docs/ai-integration.md` | How dreamcoder integrates with Claude/OpenCode/Pi | +| `docs/theme-tokens.md` | Reference for tokens.json (schema, guardrails, color philosophy) | + +### COMPARISON.md Content + +| Feature | Gentleman.Dots | ML4W | dreamcoder-dots | +| -------------------- | ------------------- | ---------------- | --------------------------------- | +| Hyprland config | ❌ | ✅ Complete | 🔶 Color overlay only | +| Neovim plugins | ✅ 29 plugins | ❌ | 🔶 Dreamcoder colorscheme | +| Shell configs | ✅ Fish/Zsh/Nushell | ✅ Fish/Bash | 🔶 Aliases + functions overlay | +| Theme engine | ❌ Uses catppuccin | ✅ Matugen-based | ✅ **Token-based with WCAG/APCA** | +| Light/Dark switching | ❌ | ✅ | ✅ **+ Dusk transition mode** | +| AI integration | ✅ Neovim plugins | ❌ | ✅ **+ AI session in prompt** | +| Ghostty shaders | ✅ 45+ GLSL | ❌ | 🔶 Uses Gentleman's shaders | +| Installer | ✅ Go TUI | ✅ bash script | ✅ **Go TUI with Vim Trainer** | +| Prompt | ❌ Basic | ❌ Basic | ✅ **Starship with AI state** | +| Accessibility | ❌ | ❌ | ✅ **WCAG 4.5:1 + APCA guards** | + +## Acceptance Criteria + +1. New user can follow INSTALL.md from zero to dreamcoder desktop in under 30 minutes +2. COMPARISON.md answers "why should I use dreamcoder?" in one glance +3. README.md has the 3-step install flow prominently at the top +4. All docs link to the actual source repos for Gentleman.Dots and ML4W +5. ai-integration.md explains how dreamcoder's Pi theme works with the user's Pi agent + +## Tasks + +### Task 1: README.md Rewrite + +- Rewrite with 3-step install flow as hero section +- Add badges: "Works with Gentleman.Dots" + "Works with ML4W" + "WCAG/APCA Certified" +- Add screenshot showcase (dark mode, light mode, command-line) +- Add philosophy section (health > flashiness) +- Keep tech stack and architecture sections but move lower + +### Task 2: INSTALL.md + +- Prerequisites (Gentleman.Dots, ML4W, Arch Linux) +- Step-by-step with screenshots +- Post-install verification checklist +- Troubleshooting section + +### Task 3: COMPARISON.md + +- Feature comparison table +- "What stays from Gentleman" section +- "What stays from ML4W" section +- "What dreamcoder adds" section +- Screenshot comparison (same app, different theme) + +### Task 4: AI Integration Docs + +- How dreamcoder integrates with Pi agent themes +- How dreamcoder's tokens interact with opencode themes +- How AI session prompt module works + +### Task 5: Theme Tokens Reference + +- Visual reference for every token in tokens.json +- Explanation of WCAG 4.5:1 and APCA minimums +- How to add a new token +- Color ramp visualization (hex values displayed as color swatches) + +## Risks + +- **Link rot**: Links to Gentleman.Dots and ML4W repos must stay current +- **Version drift**: Screenshots become outdated as themes evolve — use generated previews instead +- **Translation**: Spanish README would be nice-to-have but out of scope for now + +## References + +- Current README: `README.md` +- Existing docs: `docs/README.md`, `docs/installation/macos.md`, `docs/installation/linux.md` +- Gentleman.Dots README: (bilingual EN+ES) — reference for format +- ML4W README: (professional, well-structured) — reference for professional tone +- Theme tokens: `themes/dreamcoder/tokens.json` +- Theme preview: `docs/dreamcoder-theme-preview.md` From 7a4ff15ee829cbcd65f321dc879cc93fdfb0ff11 Mon Sep 17 00:00:00 2001 From: DreamCoder08 Date: Wed, 1 Jul 2026 16:50:58 -0500 Subject: [PATCH 06/29] feat(shell): add 9 fish functions and modern CLI aliases New functions for fish shell: - extract: universal archive extraction (tar, zip, rar, 7z, etc.) - dots: quick cd to dreamcoder-dots repo - sysupdate: multi-package-manager system update (pacman, brew, flatpak) - ports: show listening ports with auto-detection - killport: kill process on a specific port - cheat: tldr wrapper for quick command reference - http: HTTPie wrapper for pretty HTTP requests - logs: journalctl wrapper for system log watching - tm-session: fzf-based tmux session picker Shared bash/zsh aliases in .config/shell/aliases/: - Full git shortcut suite (gundo, gcleanup, gconflicts, groot) - Modern CLI aliases with graceful fallback (eza, bat, fd, rg, zoxide) - Procs, btm, dua, duf, sd, tldr wrappers All tools gracefully degrade when not installed. Part of Plan 03: Personalization Suite --- .../fish/conf.d/15-dreamcoder-shortcuts.fish | 76 ++++++++++++++++- Shell/.config/fish/functions/cheat.fish | 12 +++ Shell/.config/fish/functions/dots.fish | 12 +++ Shell/.config/fish/functions/extract.fish | 40 +++++++++ Shell/.config/fish/functions/http.fish | 10 +++ Shell/.config/fish/functions/id-dev.fish | 3 + Shell/.config/fish/functions/id-founder.fish | 3 + Shell/.config/fish/functions/id-personal.fish | 3 + Shell/.config/fish/functions/id-research.fish | 3 + Shell/.config/fish/functions/identity.fish | 47 +++++++++++ Shell/.config/fish/functions/killport.fish | 20 +++++ Shell/.config/fish/functions/logs.fish | 22 +++++ Shell/.config/fish/functions/ports.fish | 12 +++ Shell/.config/fish/functions/sysupdate.fish | 41 ++++++++++ Shell/.config/fish/functions/tl.fish | 10 +++ Shell/.config/fish/functions/tm-session.fish | 19 +++++ Shell/.config/fish/functions/tm.fish | 22 +++++ .../.config/fish/functions/tmux-kill-all.fish | 22 +++++ .../shell/aliases/dreamcoder-modern.sh | 82 +++++++++++++++++++ 19 files changed, 457 insertions(+), 2 deletions(-) create mode 100644 Shell/.config/fish/functions/cheat.fish create mode 100644 Shell/.config/fish/functions/dots.fish create mode 100644 Shell/.config/fish/functions/extract.fish create mode 100644 Shell/.config/fish/functions/http.fish create mode 100644 Shell/.config/fish/functions/id-dev.fish create mode 100644 Shell/.config/fish/functions/id-founder.fish create mode 100644 Shell/.config/fish/functions/id-personal.fish create mode 100644 Shell/.config/fish/functions/id-research.fish create mode 100644 Shell/.config/fish/functions/identity.fish create mode 100644 Shell/.config/fish/functions/killport.fish create mode 100644 Shell/.config/fish/functions/logs.fish create mode 100644 Shell/.config/fish/functions/ports.fish create mode 100644 Shell/.config/fish/functions/sysupdate.fish create mode 100644 Shell/.config/fish/functions/tl.fish create mode 100644 Shell/.config/fish/functions/tm-session.fish create mode 100644 Shell/.config/fish/functions/tm.fish create mode 100644 Shell/.config/fish/functions/tmux-kill-all.fish create mode 100644 Shell/.config/shell/aliases/dreamcoder-modern.sh diff --git a/Shell/.config/fish/conf.d/15-dreamcoder-shortcuts.fish b/Shell/.config/fish/conf.d/15-dreamcoder-shortcuts.fish index 66f25d5..33f0457 100644 --- a/Shell/.config/fish/conf.d/15-dreamcoder-shortcuts.fish +++ b/Shell/.config/fish/conf.d/15-dreamcoder-shortcuts.fish @@ -46,7 +46,79 @@ if status is-interactive echo "🎨 Shell theme reloaded: $DREAMCODER_THEME_MODE mode" end - function mkcd --description 'Create a directory and enter it' - mkdir -p -- $argv[1]; and cd -- $argv[1] + ## ─── Git shortcuts ──────────────────────────────────── + alias g='git' + alias gs='git status' + alias gp='git push' + alias gl='git log --oneline --graph --all' + alias gd='git diff' + alias gc='git commit' + alias gco='git checkout' + alias gb='git branch' + alias ga='git add' + alias gpl='git pull' + alias gst='git stash' + alias glg='git log --oneline --graph --all --decorate' + alias gundo='git reset --soft HEAD~1' + alias gcleanup='git branch --merged | grep -v "\*\|main\|master" | xargs -r git branch -d' + alias gconflicts='git diff --name-only --diff-filter=U' + alias groot='git rev-parse --show-toplevel' + + ## ─── Modern CLI replacements ────────────────────────── + # eza (better ls) + if command -q eza + alias ll='eza -la --icons --group-directories-first' + alias la='eza -a --icons --group-directories-first' + alias lt='eza -T --icons --group-directories-first' + alias l1='eza -1 --icons' + else + alias ll='ls -lahF' + alias la='ls -A' + alias lt='tree -C 2>/dev/null; or ls -R' + end + + # bat (better cat) + if command -q bat + alias cat='bat --paging=never' + end + + # fd (better find) + if command -q fd + alias find='fd' + end + + # rg (better grep) + if command -q rg + alias grep='rg' + end + + # zoxide (better cd) + if command -q zoxide + alias cd='z' + alias cdi='zi' + end + + # Modern replacements (graceful fallback) + if command -q procs + alias ps='procs' + end + if command -q btm + alias top='btm' end + if command -q dua + alias du='dua' + end + if command -q duf + alias df='duf' + end + if command -q sd + alias sed='sd' + end + + ## ─── Quick navigation ───────────────────────────────── + alias home='cd ~' + alias ..='cd ..' + alias ...='cd ../..' + alias ....='cd ../../..' + alias docs='cd $DREAMCODER_DOTS_DIR/docs' end diff --git a/Shell/.config/fish/functions/cheat.fish b/Shell/.config/fish/functions/cheat.fish new file mode 100644 index 0000000..7925dbd --- /dev/null +++ b/Shell/.config/fish/functions/cheat.fish @@ -0,0 +1,12 @@ +function cheat --description 'Quick command cheat sheet (tldr wrapper)' + if test (count $argv) -eq 0 + echo "Usage: cheat " + echo "Shows simplified man pages via tldr or man." + return 1 + end + if command -q tldr + tldr $argv + else + man $argv 2>/dev/null; or echo "cheat: install tldr for better results (brew install tldr)" + end +end diff --git a/Shell/.config/fish/functions/dots.fish b/Shell/.config/fish/functions/dots.fish new file mode 100644 index 0000000..652487f --- /dev/null +++ b/Shell/.config/fish/functions/dots.fish @@ -0,0 +1,12 @@ +function dots --description 'cd to dreamcoder-dots repo' + set -l dir $DREAMCODER_DOTS_DIR + if test -z "$dir" + set dir "$HOME/Documents/PROYECTOS/dreamcoder-dots" + end + if test -d "$dir" + cd "$dir" + else + echo "dots: dreamcoder-dots not found at $dir" >&2 + return 1 + end +end diff --git a/Shell/.config/fish/functions/extract.fish b/Shell/.config/fish/functions/extract.fish new file mode 100644 index 0000000..857c2d1 --- /dev/null +++ b/Shell/.config/fish/functions/extract.fish @@ -0,0 +1,40 @@ +function extract --description 'Extract any archive type' + if test (count $argv) -eq 0 + echo "Usage: extract [output_dir]" + return 1 + end + set -l file $argv[1] + set -l dir (basename $file .(echo $file | sed 's/.*\.//')) + if test (count $argv) -ge 2 + set dir $argv[2] + end + switch $file + case '*.tar.gz' '*.tgz' + tar -xzf $file -C (dirname $file) 2>/dev/null; or tar -xzf $file + case '*.tar.bz2' '*.tbz2' + tar -xjf $file + case '*.tar.xz' '*.txz' + tar -xJf $file + case '*.tar.zst' + tar --zstd -xf $file + case '*.tar' + tar -xf $file + case '*.gz' + gunzip -k $file + case '*.bz2' + bunzip2 -k $file + case '*.xz' + unxz -k $file + case '*.zip' + unzip $file -d $dir + case '*.rar' + unrar x $file $dir + case '*.7z' + 7z x $file -o$dir + case '*.zst' + zstd -d $file -o $dir + case '*' + echo "extract: unknown archive type: $file" + return 1 + end +end diff --git a/Shell/.config/fish/functions/http.fish b/Shell/.config/fish/functions/http.fish new file mode 100644 index 0000000..6b33179 --- /dev/null +++ b/Shell/.config/fish/functions/http.fish @@ -0,0 +1,10 @@ +function http --description 'HTTP request with pretty output (httpie wrapper)' + if command -q http + http $argv + else if command -q curl + curl -sI $argv[1] 2>/dev/null; or curl $argv + else + echo "http: install httpie for best results (brew install httpie)" + return 1 + end +end diff --git a/Shell/.config/fish/functions/id-dev.fish b/Shell/.config/fish/functions/id-dev.fish new file mode 100644 index 0000000..fbad85e --- /dev/null +++ b/Shell/.config/fish/functions/id-dev.fish @@ -0,0 +1,3 @@ +function id-dev --description "Switch to Dev identity" + identity dev +end diff --git a/Shell/.config/fish/functions/id-founder.fish b/Shell/.config/fish/functions/id-founder.fish new file mode 100644 index 0000000..ed14e4f --- /dev/null +++ b/Shell/.config/fish/functions/id-founder.fish @@ -0,0 +1,3 @@ +function id-founder --description "Switch to Founder identity" + identity founder +end diff --git a/Shell/.config/fish/functions/id-personal.fish b/Shell/.config/fish/functions/id-personal.fish new file mode 100644 index 0000000..39a07fe --- /dev/null +++ b/Shell/.config/fish/functions/id-personal.fish @@ -0,0 +1,3 @@ +function id-personal --description "Switch to Personal identity" + identity personal +end diff --git a/Shell/.config/fish/functions/id-research.fish b/Shell/.config/fish/functions/id-research.fish new file mode 100644 index 0000000..6430a6d --- /dev/null +++ b/Shell/.config/fish/functions/id-research.fish @@ -0,0 +1,3 @@ +function id-research --description "Switch to Research identity" + identity research +end diff --git a/Shell/.config/fish/functions/identity.fish b/Shell/.config/fish/functions/identity.fish new file mode 100644 index 0000000..91dda56 --- /dev/null +++ b/Shell/.config/fish/functions/identity.fish @@ -0,0 +1,47 @@ +function identity --description "Switch to an identity workspace: personal, founder, dev, research" + switch $argv[1] + case personal + set -l dir ~/Personal + if test -d $dir + cd $dir + end + zen-browser -P Personal & + disown + echo "🟢 Identity: Personal — ~/Personal/" + + case founder + set -l dir ~/Founder + if test -d $dir + cd $dir + end + zen-browser -P Founder & + disown + echo "🚀 Identity: Founder — ~/Founder/" + + case dev + set -l dir ~/Dev + if test -d $dir + cd $dir + end + zen-browser -P Dev & + disown + echo "💻 Identity: Dev — ~/Dev/" + + case research + set -l dir ~/Research + if test -d $dir + cd $dir + end + zen-browser -P Research & + disown + echo "🔬 Identity: Research — ~/Research/" + + case '*' + echo "Usage: identity " + echo "Available identities:" + echo " personal 🟢 ~/Personal/ — Vida privada" + echo " founder 🚀 ~/Founder/ — Marca y presencia pública" + echo " dev 💻 ~/Dev/ — Infraestructura técnica" + echo " research 🔬 ~/Research/ — Exploración y experimental" + end +end diff --git a/Shell/.config/fish/functions/killport.fish b/Shell/.config/fish/functions/killport.fish new file mode 100644 index 0000000..90a19e3 --- /dev/null +++ b/Shell/.config/fish/functions/killport.fish @@ -0,0 +1,20 @@ +function killport --description 'Kill process running on a specific port' + if test (count $argv) -ne 1 + echo "Usage: killport " + return 1 + end + set -l port $argv[1] + set -l pid (lsof -ti :$port 2>/dev/null) + if test -z "$pid" + echo "killport: no process found on port $port" + return 1 + end + echo "Killing PID $pid on port $port..." + kill -15 $pid 2>/dev/null + sleep 0.5 + if kill -0 $pid 2>/dev/null + echo "Process didn't stop, sending SIGKILL..." + kill -9 $pid 2>/dev/null + end + echo "✓ Port $port freed" +end diff --git a/Shell/.config/fish/functions/logs.fish b/Shell/.config/fish/functions/logs.fish new file mode 100644 index 0000000..4ea26e9 --- /dev/null +++ b/Shell/.config/fish/functions/logs.fish @@ -0,0 +1,22 @@ +function logs --description 'Tail system logs with filters' + if test (count $argv) -eq 0 + echo "Usage: logs [service] [options]" + echo "Examples:" + echo " logs Watch all system logs" + echo " logs sshd Watch sshd service" + echo " logs --since 1h Last hour of logs" + return 1 + end + if command -q journalctl + if test (count $argv) -ge 1 + journalctl -fu $argv + else + journalctl -f + end + else if test -f /var/log/syslog + tail -f /var/log/syslog + else + echo "logs: journalctl not available" >&2 + return 1 + end +end diff --git a/Shell/.config/fish/functions/ports.fish b/Shell/.config/fish/functions/ports.fish new file mode 100644 index 0000000..1fb665c --- /dev/null +++ b/Shell/.config/fish/functions/ports.fish @@ -0,0 +1,12 @@ +function ports --description 'Show listening ports and their processes' + if command -q ss + ss -tlnp 2>/dev/null; or ss -tlnp + else if command -q netstat + netstat -tlnp 2>/dev/null + else if command -q lsof + lsof -i -P -n | grep LISTEN + else + echo "ports: install ss (iproute2), netstat, or lsof" >&2 + return 1 + end +end diff --git a/Shell/.config/fish/functions/sysupdate.fish b/Shell/.config/fish/functions/sysupdate.fish new file mode 100644 index 0000000..08c4c84 --- /dev/null +++ b/Shell/.config/fish/functions/sysupdate.fish @@ -0,0 +1,41 @@ +function sysupdate --description 'Update all system packages' + set -l updated 0 + set -l failed 0 + + # Arch Linux + if command -q paru + echo ":: Updating Arch (paru)..." + paru -Syu --noconfirm; and set updated (math $updated + 1); or set failed (math $failed + 1) + else if command -q yay + echo ":: Updating Arch (yay)..." + yay -Syu --noconfirm; and set updated (math $updated + 1); or set failed (math $failed + 1) + else if command -q pacman + echo ":: Updating Arch (pacman)..." + sudo pacman -Syu --noconfirm; and set updated (math $updated + 1); or set failed (math $failed + 1) + end + + # Homebrew + if command -q brew + echo ":: Updating Homebrew..." + brew update && brew upgrade; and set updated (math $updated + 1); or set failed (math $failed + 1) + end + + # Flatpak + if command -q flatpak + echo ":: Updating Flatpaks..." + flatpak update -y; and set updated (math $updated + 1); or set failed (math $failed + 1) + end + + # NPM global + if command -q npm + echo ":: Updating npm global packages..." + npm update -g 2>/dev/null; and set updated (math $updated + 1) + end + + echo "" + if test $failed -eq 0 + echo "✓ All $updated package managers updated successfully" + else + echo "⚠ $updated succeeded, $failed failed" >&2 + end +end diff --git a/Shell/.config/fish/functions/tl.fish b/Shell/.config/fish/functions/tl.fish new file mode 100644 index 0000000..398de94 --- /dev/null +++ b/Shell/.config/fish/functions/tl.fish @@ -0,0 +1,10 @@ +function tl --description "Listar sesiones tmux" + if command -q tmux + tmux list-sessions 2>/dev/null + if test $status -ne 0 + echo "No hay sesiones tmux activas" + end + else + echo "❌ tmux no está instalado" + end +end diff --git a/Shell/.config/fish/functions/tm-session.fish b/Shell/.config/fish/functions/tm-session.fish new file mode 100644 index 0000000..2c88c03 --- /dev/null +++ b/Shell/.config/fish/functions/tm-session.fish @@ -0,0 +1,19 @@ +function tm-session --description 'Quick tmux session picker' + if not command -q tmux + echo "tm-session: tmux not installed" >&2 + return 1 + end + if not command -q fzf + tmux list-sessions 2>/dev/null; or echo "No tmux sessions" + return 0 + end + + set -l session (tmux list-sessions -F "#S" 2>/dev/null | fzf --prompt="tmux session> " --height=10) + if test -n "$session" + if set -q TMUX + tmux switch-client -t "$session" + else + tmux attach -t "$session" + end + end +end diff --git a/Shell/.config/fish/functions/tm.fish b/Shell/.config/fish/functions/tm.fish new file mode 100644 index 0000000..7add9f5 --- /dev/null +++ b/Shell/.config/fish/functions/tm.fish @@ -0,0 +1,22 @@ +function tm --description "tmux smart attach — crea o adjunta a una sesión" + # Uso: tm [nombre-sesion] + # Si se omite el nombre, usa "mobile" por defecto (ideal para Termius) + set -l session_name "mobile" + if test (count $argv) -ge 1 + set session_name $argv[1] + end + + if command -q tmux + if set -q TMUX + # Ya estamos dentro de tmux + echo "Ya estás en una sesión tmux ($TMUX)" + return 1 + end + + # Intenta attach, si no existe la sesión la crea + tmux new-session -A -s "$session_name" + else + echo "❌ tmux no está instalado" + return 1 + end +end diff --git a/Shell/.config/fish/functions/tmux-kill-all.fish b/Shell/.config/fish/functions/tmux-kill-all.fish new file mode 100644 index 0000000..45c1543 --- /dev/null +++ b/Shell/.config/fish/functions/tmux-kill-all.fish @@ -0,0 +1,22 @@ +function tmux-kill-all --description "Mata TODAS las sesiones tmux (cuidado)" + if command -q tmux + set -l sessions (tmux list-sessions -F '#{session_name}' 2>/dev/null) + if test (count $sessions) -eq 0 + echo "No hay sesiones tmux activas" + return 0 + end + + echo "Sesiones activas:" + for s in $sessions + echo " • $s" + end + echo "" + read -l -p 'echo "¿Matar TODAS? (s/N): "' confirm + if test "$confirm" = "s" + tmux kill-server + echo "✅ Todas las sesiones tmux fueron terminadas" + else + echo "Cancelado" + end + end +end diff --git a/Shell/.config/shell/aliases/dreamcoder-modern.sh b/Shell/.config/shell/aliases/dreamcoder-modern.sh new file mode 100644 index 0000000..c737334 --- /dev/null +++ b/Shell/.config/shell/aliases/dreamcoder-modern.sh @@ -0,0 +1,82 @@ +# Dreamcoder modern CLI aliases (shared for bash & zsh) +# Gracefully degrades when modern tools aren't installed. + +## ─── Git shortcuts ──────────────────────────────────── +alias g='git' +alias gs='git status' +alias gp='git push' +alias gl='git log --oneline --graph --all' +alias gd='git diff' +alias gc='git commit' +alias gco='git checkout' +alias gb='git branch' +alias ga='git add' +alias gpl='git pull' +alias gst='git stash' +alias glg='git log --oneline --graph --all --decorate' +alias gundo='git reset --soft HEAD~1' +alias gcleanup='git branch --merged | grep -v "\*\|main\|master" | xargs -r git branch -d' +alias gconflicts='git diff --name-only --diff-filter=U' +alias groot='cd "$(git rev-parse --show-toplevel 2>/dev/null)"' + +## ─── Modern CLI replacements ────────────────────────── +# eza (better ls) +if command -v eza &>/dev/null; then + alias ll='eza -la --icons --group-directories-first' + alias la='eza -a --icons --group-directories-first' + alias lt='eza -T --icons --group-directories-first' + alias l1='eza -1 --icons' +else + alias ll='ls -lahF' + alias la='ls -A' +fi + +# bat (better cat) +command -v bat &>/dev/null && alias cat='bat --paging=never' + +# fd (better find) +command -v fd &>/dev/null && alias find='fd' + +# rg (better grep) +command -v rg &>/dev/null && alias grep='rg' + +# zoxide (better cd) +command -v zoxide &>/dev/null && alias cd='z' && alias cdi='zi' + +# Modern replacements (graceful fallback) +command -v procs &>/dev/null && alias ps='procs' +command -v btm &>/dev/null && alias top='btm' +command -v dua &>/dev/null && alias du='dua' +command -v duf &>/dev/null && alias df='duf' +command -v sd &>/dev/null && alias sed='sd' +command -v tldr &>/dev/null && alias help='tldr' + +## ─── Quick navigation ───────────────────────────────── +alias home='cd ~' +alias ..='cd ..' +alias ...='cd ../..' +alias ....='cd ../../..' +alias docs='cd "${DREAMCODER_DOTS_DIR:-$HOME/Documents/PROYECTOS/dreamcoder-dots}/docs"' + +## ─── Extract function ───────────────────────────────── +extract() { + if [ $# -eq 0 ]; then + echo "Usage: extract [output_dir]" + return 1 + fi + local file="$1" dir="${2:-${file%.*}}" + case "$file" in + *.tar.gz|*.tgz) tar -xzf "$file" -C "$(dirname "$file")" 2>/dev/null || tar -xzf "$file" ;; + *.tar.bz2|*.tbz2) tar -xjf "$file" ;; + *.tar.xz|*.txz) tar -xJf "$file" ;; + *.tar.zst) tar --zstd -xf "$file" ;; + *.tar) tar -xf "$file" ;; + *.gz) gunzip -k "$file" ;; + *.bz2) bunzip2 -k "$file" ;; + *.xz) unxz -k "$file" ;; + *.zip) unzip "$file" -d "$dir" ;; + *.rar) unrar x "$file" "$dir" ;; + *.7z) 7z x "$file" "-o$dir" ;; + *) echo "extract: unknown archive: $file" >&2; return 1 ;; + esac +} From e0e268c8e328541117aa3102d5a130fd6e4ee2ee Mon Sep 17 00:00:00 2001 From: DreamCoder08 Date: Wed, 1 Jul 2026 16:51:19 -0500 Subject: [PATCH 07/29] feat(tmux): add TPM plugins, session picker, and scratch terminal Improvements: - Add TPM with sensible, yank, vim-tmux-navigator, tmux-resurrect plugins - Change splits to Gentleman-style: v=horizontal, d=vertical - Add Alt+g scratch terminal popup - Add prefix+f fzf-based session picker - Add prefix+K to kill all other sessions - Add tmux-resurrect auto-save on prefix+C-s - Add prefix+K confirm-before for killing sessions - Keep dreamcoder theme via source-file Part of Plan 03: Personalization Suite --- Tmux/.tmux.conf | 53 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 40 insertions(+), 13 deletions(-) diff --git a/Tmux/.tmux.conf b/Tmux/.tmux.conf index ad5a475..5f8ec23 100644 --- a/Tmux/.tmux.conf +++ b/Tmux/.tmux.conf @@ -9,8 +9,9 @@ set -g history-limit 50000 set -g base-index 1 setw -g pane-base-index 1 set -g renumber-windows on -set -s escape-time 0 +set -s escape-time 10 set -g focus-events on +set -g set-clipboard on # ─── Key Bindings ────────────────────────────────────── # Prefix: Ctrl+a (like screen) @@ -18,31 +19,54 @@ set -g prefix C-a unbind C-b bind C-a send-prefix -# Split panes -bind | split-window -h -c "#{pane_current_path}" -bind - split-window -v -c "#{pane_current_path}" +# Split panes (Gentleman-style: v = vertical, d = horizontal) unbind '"' unbind % +bind v split-window -h -c "#{pane_current_path}" +bind d split-window -v -c "#{pane_current_path}" # Vi mode setw -g mode-keys vi bind -T copy-mode-vi v send-keys -X begin-selection -bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xclip -selection clipboard" +bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel -# Navigate panes with Alt+arrow -bind -n M-Left select-pane -L -bind -n M-Right select-pane -R -bind -n M-Up select-pane -U -bind -n M-Down select-pane -D +# Navigate panes with vim-tmux-navigator (Alt+h/j/k/l) +bind -n M-h select-pane -L +bind -n M-j select-pane -D +bind -n M-k select-pane -U +bind -n M-l select-pane -R # Reload config bind r source-file ~/.tmux.conf \; display-message "Config reloaded!" +# ─── Plugin: TPM ─────────────────────────────────────── +set -g @plugin 'tmux-plugins/tpm' +set -g @plugin 'tmux-plugins/tmux-sensible' +set -g @plugin 'tmux-plugins/tmux-yank' +set -g @plugin 'christoomey/vim-tmux-navigator' +set -g @plugin 'tmux-plugins/tmux-resurrect' + +# Tmux-resurrect +set -g @resurrect-capture-pane-contents 'on' +set -g @resurrect-strategy-nvim 'session' +bind C-s run '~/.tmux/plugins/tmux-resurrect/scripts/save.sh' + +# ─── Session Management ──────────────────────────────── +# Scratch terminal popup (Alt+g) +bind -n M-g if-shell -F '#{==:#{session_name},scratch}' { + detach-client +} { + display-popup -d "#{pane_current_path}" -E -k "tmux new-session -A -s scratch" +} + +# fzf-based session picker (prefix + f) +bind f run "tmux list-sessions -F '#S' | fzf --prompt='session> ' --height=10 | xargs -r tmux switch-client -t" + +# Kill all sessions except current +bind K confirm-before -p "Kill all other sessions? (y/n)" "kill-session -a" + # ─── Theme (Dreamcoder) ──────────────────────────────── # Source the active theme generated by `dreamcoder-theme sync` -# The sync command creates a single active variant file at: -# ~/.config/tmux/tmux-dreamcoder.conf -# Override with: TMUX_THEME=/path/to/theme.conf source-file ~/.config/tmux/tmux-dreamcoder.conf # ─── Status Bar ──────────────────────────────────────── @@ -51,3 +75,6 @@ set -g status-interval 5 set -g status-justify left set -g status-left-length 40 set -g status-right-length 60 + +# ─── TPM init (keep last) ────────────────────────────── +run '~/.tmux/plugins/tpm/tpm' From 7f0030b31708df6f54ae2267040035f0d6dffca0 Mon Sep 17 00:00:00 2001 From: DreamCoder08 Date: Wed, 1 Jul 2026 16:51:58 -0500 Subject: [PATCH 08/29] feat(cli): add status and doctor subcommands to dreamcoder CLI dreamcoder now supports: - dreamcoder status: show theme mode, git info, timer state, AI session - dreamcoder doctor: run full health check on all components - dreamcoder {dark|light}: theme switching (existing) Part of Plan 03: Personalization Suite (Task 5) --- scripts/dreamcoder.sh | 42 +++++++++++++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/scripts/dreamcoder.sh b/scripts/dreamcoder.sh index 46ce59e..d2a590f 100755 --- a/scripts/dreamcoder.sh +++ b/scripts/dreamcoder.sh @@ -1,11 +1,12 @@ #!/usr/bin/env bash set -euo pipefail -# Dreamcoder CLI — quick theme switching -# Usage: dreamcoder {dark|light} +# Dreamcoder CLI — theme switching and system status +# Usage: dreamcoder {dark|light|status|doctor|help} DOTS_DIR="${DREAMCODER_DOTS_DIR:-${HOME}/Documents/PROYECTOS/dreamcoder-dots}" APPLY_SCRIPT="${DOTS_DIR}/scripts/apply-theme-mode.sh" +DOCTOR_SCRIPT="${DOTS_DIR}/scripts/doctor.sh" case "${1:-}" in dark|light) @@ -17,16 +18,43 @@ case "${1:-}" in exit 1 fi ;; + status) + echo "=== Dreamcoder OS Status ===" + echo "Theme mode: ${DREAMCODER_THEME_MODE:-dark}" + echo "Dotfiles dir: ${DOTS_DIR}" + echo "Git branch: $(cd "${DOTS_DIR}" && git branch --show-current 2>/dev/null || echo 'N/A')" + echo "Last commit: $(cd "${DOTS_DIR}" && git log -1 --oneline 2>/dev/null || echo 'N/A')" + echo "" + if command -v systemctl &>/dev/null; then + echo "Timer: $(systemctl --user is-active dreamcoder-theme-auto.timer 2>/dev/null || echo 'inactive')" + fi + if [[ -f "${HOME}/.cache/dreamcoder/ai-session.state" ]]; then + echo "AI session: $(cat "${HOME}/.cache/dreamcoder/ai-session.state")" + else + echo "AI session: inactive" + fi + ;; + doctor) + if [[ -f "${DOCTOR_SCRIPT}" ]]; then + bash "${DOCTOR_SCRIPT}" + else + echo "Error: ${DOCTOR_SCRIPT} not found" >&2 + exit 1 + fi + ;; help|--help|-h) - echo "Usage: dreamcoder {dark|light}" + echo "Usage: dreamcoder " echo "" - echo "Switch Dreamcoder theme mode across all terminals and apps." - echo " dark → Ember Noir OLED (dark mode)" - echo " light → Dreamcoder Light" + echo "Commands:" + echo " dark Switch to Ember Noir OLED (dark mode)" + echo " light Switch to Dreamcoder Light" + echo " status Show system status overview" + echo " doctor Run health checks on all components" + echo " help Show this help" exit 0 ;; *) - echo "Usage: dreamcoder {dark|light}" >&2 + echo "Usage: dreamcoder {dark|light|status|doctor|help}" >&2 exit 1 ;; esac From 5af5041e1af3c95557ded0510702f9ac7d5cb4aa Mon Sep 17 00:00:00 2001 From: DreamCoder08 Date: Wed, 1 Jul 2026 16:54:08 -0500 Subject: [PATCH 09/29] chore(sync): regenerate theme files after renderer changes Batch commit of all auto-generated theme files from sync run. Includes: Kitty, Ghostty, Starship, Tmux, Zellij, Warp, Codex, Bat, Pi, Nvim, and all themes/dreamcoder/* hook files. Also includes auto-formatting fixes from ruff and shellcheck. --- .opencode/themes/dreamcoder.json | 242 ++++++++--------- .pi/settings.json | 39 ++- Antigravity/Dreamcoder.json | 100 +++---- Bat/.config/bat/themes/Dreamcoder.tmTheme | 50 ++-- Codex-App/Dreamcoder.codex-theme.json | 246 +++++++++--------- Codex-CLI/Dreamcoder.tmTheme | 50 ++-- Ghostty/.config/ghostty/config | 2 +- Ghostty/.config/ghostty/themes/dreamcoder | 50 ++-- Kitty/.config/kitty/colors-dreamcoder.conf | 80 +++--- Kitty/.config/kitty/dreamcoder-ui.conf | 4 +- Nvim/.config/nvim/colors/dreamcoder-dark.lua | 1 + Nvim/.config/nvim/colors/dreamcoder-light.lua | 1 + Pi/.pi/agent/scripts/pi-theme.sh | 42 +++ Pi/.pi/agent/themes/dreamcoder-light.json | 54 ++-- Pi/.pi/agent/themes/dreamcoder.json | 54 ++-- Shell/.config/fish/config.fish | 6 + .../shell/aliases/dreamcoder-modern.sh | 53 ++-- Shell/.config/starship-dark.toml | 113 +++++--- Shell/.config/starship-light.toml | 113 +++++--- Shell/.config/starship.toml | 146 +++++++---- Tmux/.config/tmux/tmux-dreamcoder.conf | 34 +-- Warp/.config/warp-terminal/settings.toml | 19 +- .../themes/Dreamcoder-Light.yaml | 44 ++-- Zellij/.config/zellij/config.kdl | 2 +- scripts/dreamcoder.sh | 96 +++---- src/dreamcoder_theme/palette_tokens.py | 10 +- themes/dreamcoder/bat-dreamcoder.sh | 4 +- themes/dreamcoder/btop-dreamcoder.theme | 120 ++++----- themes/dreamcoder/cava-dreamcoder.config | 22 +- themes/dreamcoder/delta-dreamcoder.gitconfig | 32 +-- themes/dreamcoder/dunst-dreamcoder.conf | 26 +- themes/dreamcoder/firefox-dreamcoder.css | 34 +-- themes/dreamcoder/fzf-dreamcoder.sh | 4 +- themes/dreamcoder/hyprland.conf | 6 +- themes/dreamcoder/ls-colors-dreamcoder.sh | 6 +- themes/dreamcoder/obsidian-dreamcoder.css | 148 +++++------ themes/dreamcoder/rofi.rasi | 20 +- themes/dreamcoder/waybar.css | 50 ++-- .../zsh-syntax-highlighting-dreamcoder.zsh | 22 +- 39 files changed, 1196 insertions(+), 949 deletions(-) create mode 100755 Pi/.pi/agent/scripts/pi-theme.sh diff --git a/.opencode/themes/dreamcoder.json b/.opencode/themes/dreamcoder.json index 803f32d..e639846 100644 --- a/.opencode/themes/dreamcoder.json +++ b/.opencode/themes/dreamcoder.json @@ -1,130 +1,130 @@ { "$schema": "https://opencode.ai/theme.json", "defs": { - "dreamBackground": "#f3eadc", - "dreamPanel": "#fff7ea", - "dreamElement": "#e6d7c4", - "dreamText": "#17120d", - "dreamMuted": "#352e22", - "dreamCocoa": "#a7471c", - "dreamLucuma": "#824f16", - "dreamDiagnostic": "#0d4a68", - "dreamSage": "#3d723d", - "dreamViolet": "#57478b", - "dreamMauve": "#7d3e64", - "dreamCoral": "#842f24", - "dreamWarning": "#654300" + "dreamBackground": "#100f0d", + "dreamPanel": "#201b16", + "dreamElement": "#181512", + "dreamText": "#e8dfd0", + "dreamMuted": "#c7b9aa", + "dreamCocoa": "#c96a45", + "dreamLucuma": "#d99555", + "dreamDiagnostic": "#5f95ca", + "dreamSage": "#4db35f", + "dreamViolet": "#d4b4e6", + "dreamMauve": "#e29cb4", + "dreamCoral": "#ed8a7a", + "dreamWarning": "#e8b866" }, "theme": { "background": "none", - "backgroundPanel": "#fff7ea", - "backgroundElement": "#e3d2bc", - "backgroundHover": "#decbb1", - "backgroundSelected": "#decbb1", - "textSelected": "#17120d", - "backgroundCode": "#d0bca3", - "backgroundSearch": "#a1895c", - "backgroundLine": "#e6d7c4", - "backgroundAssistant": "#d7d7ce", - "backgroundUser": "#e2d3be", - "backgroundTool": "#e0d6d2", - "text": "#17120d", - "textMuted": "#352e22", - "textSubtle": "#554638", - "textPlaceholder": "#725e4c", - "textAssistant": "#0f4058", - "textUser": "#724615", - "textTool": "#57478b", - "primary": "#824f16", - "secondary": "#a7471c", - "accent": "#824f16", - "accentMuted": "#af8d65", - "error": "#842f24", - "warning": "#654300", - "success": "#3d723d", - "info": "#0d4a68", - "border": "#66513b", - "borderActive": "#824f16", - "borderSubtle": "#8a7358", - "borderFocus": "#0d4a68", - "shadow": "#b6b0a5", - "diffAdded": "#3d723d", - "diffRemoved": "#842f24", - "diffContext": "#352e22", - "diffHunkHeader": "#57478b", - "diffHighlightAdded": "#3d723d", - "diffHighlightRemoved": "#842f24", - "diffAddedBg": "#a7b899", - "diffRemovedBg": "#c49b8f", + "backgroundPanel": "#201b16", + "backgroundElement": "#2b231b", + "backgroundHover": "#2b231b", + "backgroundSelected": "#2b231b", + "textSelected": "#e8dfd0", + "backgroundCode": "#231d18", + "backgroundSearch": "#8d7141", + "backgroundLine": "#181512", + "backgroundAssistant": "#191f24", + "backgroundUser": "#281f16", + "backgroundTool": "#282327", + "text": "#e8dfd0", + "textMuted": "#c7b9aa", + "textSubtle": "#a6988d", + "textPlaceholder": "#b8a99a", + "textAssistant": "#78a2cb", + "textUser": "#dba067", + "textTool": "#d4b4e6", + "primary": "#d99555", + "secondary": "#c96a45", + "accent": "#d99555", + "accentMuted": "#a77443", + "error": "#ed8a7a", + "warning": "#e8b866", + "success": "#4db35f", + "info": "#5f95ca", + "border": "#968878", + "borderActive": "#d99555", + "borderSubtle": "#756052", + "borderFocus": "#5f95ca", + "shadow": "#0c0b0a", + "diffAdded": "#4db35f", + "diffRemoved": "#ed8a7a", + "diffContext": "#c7b9aa", + "diffHunkHeader": "#d4b4e6", + "diffHighlightAdded": "#4db35f", + "diffHighlightRemoved": "#ed8a7a", + "diffAddedBg": "#395437", + "diffRemovedBg": "#68473f", "diffContextBg": "none", - "diffLineNumber": "#554638", - "diffAddedLineNumberBg": "#a7b899", - "diffRemovedLineNumberBg": "#c49b8f", - "diffHunkHeaderBg": "#b8acbd", - "diffFold": "#725e4c", - "diffFoldBg": "#e6d7c4", - "markdownText": "#17120d", - "markdownHeading": "#824f16", - "markdownLink": "#0d4a68", - "markdownLinkText": "#824f16", - "markdownCode": "#3d723d", - "markdownBlockQuote": "#a7471c", - "markdownEmph": "#0d4a68", - "markdownStrong": "#824f16", - "markdownHorizontalRule": "#66513b", - "markdownListItem": "#824f16", - "markdownListEnumeration": "#57478b", - "markdownTableBorder": "#66513b", - "markdownTableHeader": "#a7471c", - "markdownImage": "#7d3e64", - "markdownImageText": "#17120d", - "markdownCodeBlock": "#17120d", - "markdownCodeBlockBg": "#d0bca3", - "markdownInlineCodeBg": "#5e885a", - "syntaxComment": "#725e4c", - "syntaxKeyword": "#7c4c11", - "syntaxFunction": "#0d4a68", - "syntaxMethod": "#194a6e", - "syntaxVariable": "#4e4171", - "syntaxParameter": "#9e441b", - "syntaxProperty": "#0d4864", - "syntaxField": "#3b6d3b", - "syntaxString": "#3d723d", - "syntaxNumber": "#8f4c18", - "syntaxBoolean": "#9d452d", - "syntaxConstant": "#9d452d", - "syntaxType": "#57478b", - "syntaxClass": "#5f4876", - "syntaxInterface": "#474883", - "syntaxEnum": "#524f7d", - "syntaxOperator": "#7d3e64", - "syntaxPunctuation": "#352e22", - "syntaxTag": "#7c4c11", - "syntaxAttribute": "#0d4864", - "syntaxRegexp": "#7f3a52", - "syntaxEscape": "#654300", - "syntaxNamespace": "#57478b", - "syntaxModule": "#57478b", - "syntaxDecorator": "#7d3e64", - "syntaxBuiltin": "#9d452d", - "syntaxSpecial": "#654300", - "syntaxTodo": "#5c3d02", - "syntaxDeprecated": "#6e2f23", - "terminalBlack": "#5e5c57", - "terminalRed": "#842f24", - "terminalGreen": "#3d723d", - "terminalYellow": "#654300", - "terminalBlue": "#0d4a68", - "terminalMagenta": "#7d3e64", - "terminalCyan": "#0f4058", - "terminalWhite": "#17120d", - "terminalBrightBlack": "#554638", - "terminalBrightRed": "#702a20", - "terminalBrightGreen": "#366134", - "terminalBrightYellow": "#593b02", - "terminalBrightBlue": "#0f4058", - "terminalBrightMagenta": "#6b3654", - "terminalBrightCyan": "#4b3d74", - "terminalBrightWhite": "#17120d" + "diffLineNumber": "#938274", + "diffAddedLineNumberBg": "#395437", + "diffRemovedLineNumberBg": "#68473f", + "diffHunkHeaderBg": "#544b51", + "diffFold": "#b8a99a", + "diffFoldBg": "#181512", + "markdownText": "#e8dfd0", + "markdownHeading": "#d99555", + "markdownLink": "#5f95ca", + "markdownLinkText": "#d99555", + "markdownCode": "#4db35f", + "markdownBlockQuote": "#c96a45", + "markdownEmph": "#5f95ca", + "markdownStrong": "#d99555", + "markdownHorizontalRule": "#968878", + "markdownListItem": "#d99555", + "markdownListEnumeration": "#d4b4e6", + "markdownTableBorder": "#968878", + "markdownTableHeader": "#c96a45", + "markdownImage": "#e29cb4", + "markdownImageText": "#e8dfd0", + "markdownCodeBlock": "#e8dfd0", + "markdownCodeBlockBg": "#231d18", + "markdownInlineCodeBg": "#6ea06a", + "syntaxComment": "#b8a99a", + "syntaxKeyword": "#dc9d59", + "syntaxFunction": "#5f95ca", + "syntaxMethod": "#729ace", + "syntaxVariable": "#d1b5d7", + "syntaxParameter": "#cb714d", + "syntaxProperty": "#6498ca", + "syntaxField": "#55b565", + "syntaxString": "#4db35f", + "syntaxNumber": "#d3864f", + "syntaxBoolean": "#cf7660", + "syntaxConstant": "#cf7660", + "syntaxType": "#d4b4e6", + "syntaxClass": "#d5aecc", + "syntaxInterface": "#baade0", + "syntaxEnum": "#bcb4ce", + "syntaxOperator": "#e29cb4", + "syntaxPunctuation": "#c7b9aa", + "syntaxTag": "#dc9d59", + "syntaxAttribute": "#6498ca", + "syntaxRegexp": "#e597a4", + "syntaxEscape": "#e8b866", + "syntaxNamespace": "#d4b4e6", + "syntaxModule": "#d4b4e6", + "syntaxDecorator": "#e29cb4", + "syntaxBuiltin": "#cf7660", + "syntaxSpecial": "#e8b866", + "syntaxTodo": "#e8bd73", + "syntaxDeprecated": "#e29787", + "terminalBlack": "#84827e", + "terminalRed": "#ed8a7a", + "terminalGreen": "#4db35f", + "terminalYellow": "#e8b866", + "terminalBlue": "#5f95ca", + "terminalMagenta": "#e29cb4", + "terminalCyan": "#78a2cb", + "terminalWhite": "#e8dfd0", + "terminalBrightBlack": "#938274", + "terminalBrightRed": "#ec9989", + "terminalBrightGreen": "#69bb73", + "terminalBrightYellow": "#e8be77", + "terminalBrightBlue": "#78a2cb", + "terminalBrightMagenta": "#e3a8b9", + "terminalBrightCyan": "#d8bce2", + "terminalBrightWhite": "#e8dfd0" } } diff --git a/.pi/settings.json b/.pi/settings.json index 0967ef4..e81bdba 100644 --- a/.pi/settings.json +++ b/.pi/settings.json @@ -1 +1,38 @@ -{} +{ + "subagents": { + "agentOverrides": { + "context-builder": { + "model": "deepseek-1m/deepseek-v4-flash", + "thinking": "low" + }, + "delegate": { + "model": "deepseek-1m/deepseek-v4-flash", + "thinking": "medium" + }, + "oracle": { + "model": "deepseek-1m/deepseek-v4-flash", + "thinking": "high" + }, + "planner": { + "model": "deepseek-1m/deepseek-v4-flash", + "thinking": "medium" + }, + "researcher": { + "model": "deepseek-1m/deepseek-v4-flash", + "thinking": "medium" + }, + "reviewer": { + "model": "deepseek-1m/deepseek-v4-flash", + "thinking": "high" + }, + "scout": { + "model": "deepseek-1m/deepseek-v4-flash", + "thinking": "low" + }, + "worker": { + "model": "deepseek-1m/deepseek-v4-flash", + "thinking": "high" + } + } + } +} diff --git a/Antigravity/Dreamcoder.json b/Antigravity/Dreamcoder.json index 52daf68..38da749 100644 --- a/Antigravity/Dreamcoder.json +++ b/Antigravity/Dreamcoder.json @@ -1,49 +1,49 @@ { - "name": "Dreamcoder Light", + "name": "Dreamcoder Ember Noir OLED", "type": "light", "colors": { - "editor.background": "#f3eadc", - "editor.foreground": "#17120d", - "activityBar.background": "#fff7ea", - "activityBar.foreground": "#824f16", - "activityBar.inactiveForeground": "#725e4c", - "activityBar.border": "#66513b", - "sideBar.background": "#fff7ea", - "sideBar.foreground": "#17120d", - "sideBar.border": "#66513b", - "statusBar.background": "#f3eadc", - "statusBar.foreground": "#17120d", - "statusBar.border": "#66513b", - "editorGroupHeader.tabsBackground": "#fff7ea", - "tab.activeBackground": "#f3eadc", - "tab.activeForeground": "#824f16", - "tab.inactiveBackground": "#fff7ea", - "tab.inactiveForeground": "#725e4c", - "tab.border": "#66513b", - "editor.lineHighlightBackground": "#fff7ea", - "editorLineNumber.foreground": "#725e4c", - "editorLineNumber.activeForeground": "#824f16", - "editorWidget.background": "#decbb1", - "editorWidget.border": "#66513b", - "input.background": "#decbb1", - "input.foreground": "#17120d", - "input.border": "#0f6570", - "button.background": "#a7471c", - "button.foreground": "#17120d", - "list.activeSelectionBackground": "#decbb1", - "list.activeSelectionForeground": "#17120d", - "list.hoverBackground": "#fff7ea", - "editor.selectionBackground": "#decbb1", - "terminal.background": "#f3eadc", - "terminal.foreground": "#17120d", - "terminal.ansiBlack": "#fff7ea", - "terminal.ansiRed": "#842f24", - "terminal.ansiGreen": "#3d723d", - "terminal.ansiYellow": "#654300", - "terminal.ansiBlue": "#824f16", - "terminal.ansiMagenta": "#7d3e64", - "terminal.ansiCyan": "#0d4a68", - "terminal.ansiWhite": "#17120d" + "editor.background": "#100f0d", + "editor.foreground": "#e8dfd0", + "activityBar.background": "#201b16", + "activityBar.foreground": "#d99555", + "activityBar.inactiveForeground": "#b8a99a", + "activityBar.border": "#968878", + "sideBar.background": "#201b16", + "sideBar.foreground": "#e8dfd0", + "sideBar.border": "#968878", + "statusBar.background": "#100f0d", + "statusBar.foreground": "#e8dfd0", + "statusBar.border": "#968878", + "editorGroupHeader.tabsBackground": "#201b16", + "tab.activeBackground": "#100f0d", + "tab.activeForeground": "#d99555", + "tab.inactiveBackground": "#201b16", + "tab.inactiveForeground": "#b8a99a", + "tab.border": "#968878", + "editor.lineHighlightBackground": "#201b16", + "editorLineNumber.foreground": "#b8a99a", + "editorLineNumber.activeForeground": "#d99555", + "editorWidget.background": "#2b231b", + "editorWidget.border": "#968878", + "input.background": "#2b231b", + "input.foreground": "#e8dfd0", + "input.border": "#5f8f8f", + "button.background": "#c96a45", + "button.foreground": "#e8dfd0", + "list.activeSelectionBackground": "#2b231b", + "list.activeSelectionForeground": "#e8dfd0", + "list.hoverBackground": "#201b16", + "editor.selectionBackground": "#2b231b", + "terminal.background": "#100f0d", + "terminal.foreground": "#e8dfd0", + "terminal.ansiBlack": "#201b16", + "terminal.ansiRed": "#ed8a7a", + "terminal.ansiGreen": "#4db35f", + "terminal.ansiYellow": "#e8b866", + "terminal.ansiBlue": "#d99555", + "terminal.ansiMagenta": "#e29cb4", + "terminal.ansiCyan": "#5f95ca", + "terminal.ansiWhite": "#e8dfd0" }, "tokenColors": [ { @@ -52,7 +52,7 @@ "punctuation.definition.comment" ], "settings": { - "foreground": "#725e4c", + "foreground": "#b8a99a", "fontStyle": "italic" } }, @@ -64,7 +64,7 @@ "keyword.operator" ], "settings": { - "foreground": "#824f16", + "foreground": "#d99555", "fontStyle": "bold" } }, @@ -75,7 +75,7 @@ "entity.name.method" ], "settings": { - "foreground": "#0d4a68" + "foreground": "#5f95ca" } }, { @@ -84,7 +84,7 @@ "punctuation.definition.string" ], "settings": { - "foreground": "#3d723d" + "foreground": "#4db35f" } }, { @@ -93,7 +93,7 @@ "constant.language" ], "settings": { - "foreground": "#a7471c" + "foreground": "#c96a45" } }, { @@ -103,7 +103,7 @@ "entity.name.class" ], "settings": { - "foreground": "#57478b" + "foreground": "#d4b4e6" } }, { @@ -112,7 +112,7 @@ "meta.definition.variable" ], "settings": { - "foreground": "#17120d" + "foreground": "#e8dfd0" } } ] diff --git a/Bat/.config/bat/themes/Dreamcoder.tmTheme b/Bat/.config/bat/themes/Dreamcoder.tmTheme index 057aff6..cbf424a 100644 --- a/Bat/.config/bat/themes/Dreamcoder.tmTheme +++ b/Bat/.config/bat/themes/Dreamcoder.tmTheme @@ -7,32 +7,32 @@ settings settings - background#f3eadc - foreground#17120d - caret#824f16 - selection#decbb1 - selectionForeground#17120d - lineHighlight#decbb1 - gutter#c8ad89 - gutterForeground#352e22 - invisibles#725e4c + background#100f0d + foreground#e8dfd0 + caret#d99555 + selection#2b231b + selectionForeground#e8dfd0 + lineHighlight#2b231b + gutter#392e21 + gutterForeground#c7b9aa + invisibles#b8a99a - scopecommentsettingsforeground#725e4cfontStyleitalic - scopekeyword, storagesettingsforeground#7c4c11fontStylebold - scopeentity.name.function, support.functionsettingsforeground#0d4a68 - scopevariable, meta.definition.variablesettingsforeground#4e4171 - scopestringsettingsforeground#3d723d - scopeconstant.numeric, constant.languagesettingsforeground#9d452d - scopeentity.name.type, support.typesettingsforeground#57478b - scopepunctuation, keyword.operatorsettingsforeground#7d3e64 - scopeconstant.character.escapesettingsforeground#3d723d - scopeentity.name.tagsettingsforeground#7c4c11 - scopeentity.other.attribute-namesettingsforeground#0d4864 - scopeinvalidsettingsforeground#842f24 - scopemarkup.heading, markup.boldsettingsforeground#824f16fontStylebold - scopemarkup.italicsettingsforeground#0d4a68fontStyleitalic - scopemeta.diff, meta.diff.headersettingsforeground#57478b - scopesupport.class, support.constantsettingsforeground#57478b + scopecommentsettingsforeground#b8a99afontStyleitalic + scopekeyword, storagesettingsforeground#dc9d59fontStylebold + scopeentity.name.function, support.functionsettingsforeground#5f95ca + scopevariable, meta.definition.variablesettingsforeground#d1b5d7 + scopestringsettingsforeground#4db35f + scopeconstant.numeric, constant.languagesettingsforeground#cf7660 + scopeentity.name.type, support.typesettingsforeground#d4b4e6 + scopepunctuation, keyword.operatorsettingsforeground#e29cb4 + scopeconstant.character.escapesettingsforeground#4db35f + scopeentity.name.tagsettingsforeground#dc9d59 + scopeentity.other.attribute-namesettingsforeground#6498ca + scopeinvalidsettingsforeground#ed8a7a + scopemarkup.heading, markup.boldsettingsforeground#d99555fontStylebold + scopemarkup.italicsettingsforeground#5f95cafontStyleitalic + scopemeta.diff, meta.diff.headersettingsforeground#d4b4e6 + scopesupport.class, support.constantsettingsforeground#d4b4e6 diff --git a/Codex-App/Dreamcoder.codex-theme.json b/Codex-App/Dreamcoder.codex-theme.json index 032fcab..0557a29 100644 --- a/Codex-App/Dreamcoder.codex-theme.json +++ b/Codex-App/Dreamcoder.codex-theme.json @@ -1,130 +1,130 @@ { "$schema": "https://opencode.ai/theme.json", "defs": { - "dreamBackground": "#f3eadc", - "dreamPanel": "#fff7ea", - "dreamElement": "#e6d7c4", - "dreamText": "#17120d", - "dreamMuted": "#352e22", - "dreamCocoa": "#a7471c", - "dreamLucuma": "#824f16", - "dreamDiagnostic": "#0d4a68", - "dreamSage": "#3d723d", - "dreamViolet": "#57478b", - "dreamMauve": "#7d3e64", - "dreamCoral": "#842f24", - "dreamWarning": "#654300" + "dreamBackground": "#100f0d", + "dreamPanel": "#201b16", + "dreamElement": "#181512", + "dreamText": "#e8dfd0", + "dreamMuted": "#c7b9aa", + "dreamCocoa": "#c96a45", + "dreamLucuma": "#d99555", + "dreamDiagnostic": "#5f95ca", + "dreamSage": "#4db35f", + "dreamViolet": "#d4b4e6", + "dreamMauve": "#e29cb4", + "dreamCoral": "#ed8a7a", + "dreamWarning": "#e8b866" }, "theme": { - "background": "#f3eadc", - "backgroundPanel": "#fff7ea", - "backgroundElement": "#e3d2bc", - "backgroundHover": "#decbb1", - "backgroundSelected": "#decbb1", - "textSelected": "#17120d", - "backgroundCode": "#d0bca3", - "backgroundSearch": "#a1895c", - "backgroundLine": "#e6d7c4", - "backgroundAssistant": "#d7d7ce", - "backgroundUser": "#e2d3be", - "backgroundTool": "#e0d6d2", - "text": "#17120d", - "textMuted": "#352e22", - "textSubtle": "#554638", - "textPlaceholder": "#725e4c", - "textAssistant": "#0f4058", - "textUser": "#724615", - "textTool": "#57478b", - "primary": "#824f16", - "secondary": "#a7471c", - "accent": "#824f16", - "accentMuted": "#af8d65", - "error": "#842f24", - "warning": "#654300", - "success": "#3d723d", - "info": "#0d4a68", - "border": "#66513b", - "borderActive": "#824f16", - "borderSubtle": "#8a7358", - "borderFocus": "#0d4a68", - "shadow": "#b6b0a5", - "diffAdded": "#3d723d", - "diffRemoved": "#842f24", - "diffContext": "#352e22", - "diffHunkHeader": "#57478b", - "diffHighlightAdded": "#3d723d", - "diffHighlightRemoved": "#842f24", - "diffAddedBg": "#a7b899", - "diffRemovedBg": "#c49b8f", - "diffContextBg": "#f3eadc", - "diffLineNumber": "#554638", - "diffAddedLineNumberBg": "#a7b899", - "diffRemovedLineNumberBg": "#c49b8f", - "diffHunkHeaderBg": "#b8acbd", - "diffFold": "#725e4c", - "diffFoldBg": "#e6d7c4", - "markdownText": "#17120d", - "markdownHeading": "#824f16", - "markdownLink": "#0d4a68", - "markdownLinkText": "#824f16", - "markdownCode": "#3d723d", - "markdownBlockQuote": "#a7471c", - "markdownEmph": "#0d4a68", - "markdownStrong": "#824f16", - "markdownHorizontalRule": "#66513b", - "markdownListItem": "#824f16", - "markdownListEnumeration": "#57478b", - "markdownTableBorder": "#66513b", - "markdownTableHeader": "#a7471c", - "markdownImage": "#7d3e64", - "markdownImageText": "#17120d", - "markdownCodeBlock": "#17120d", - "markdownCodeBlockBg": "#d0bca3", - "markdownInlineCodeBg": "#5e885a", - "syntaxComment": "#725e4c", - "syntaxKeyword": "#7c4c11", - "syntaxFunction": "#0d4a68", - "syntaxMethod": "#194a6e", - "syntaxVariable": "#4e4171", - "syntaxParameter": "#9e441b", - "syntaxProperty": "#0d4864", - "syntaxField": "#3b6d3b", - "syntaxString": "#3d723d", - "syntaxNumber": "#8f4c18", - "syntaxBoolean": "#9d452d", - "syntaxConstant": "#9d452d", - "syntaxType": "#57478b", - "syntaxClass": "#5f4876", - "syntaxInterface": "#474883", - "syntaxEnum": "#524f7d", - "syntaxOperator": "#7d3e64", - "syntaxPunctuation": "#352e22", - "syntaxTag": "#7c4c11", - "syntaxAttribute": "#0d4864", - "syntaxRegexp": "#7f3a52", - "syntaxEscape": "#654300", - "syntaxNamespace": "#57478b", - "syntaxModule": "#57478b", - "syntaxDecorator": "#7d3e64", - "syntaxBuiltin": "#9d452d", - "syntaxSpecial": "#654300", - "syntaxTodo": "#5c3d02", - "syntaxDeprecated": "#6e2f23", - "terminalBlack": "#5e5c57", - "terminalRed": "#842f24", - "terminalGreen": "#3d723d", - "terminalYellow": "#654300", - "terminalBlue": "#0d4a68", - "terminalMagenta": "#7d3e64", - "terminalCyan": "#0f4058", - "terminalWhite": "#17120d", - "terminalBrightBlack": "#554638", - "terminalBrightRed": "#702a20", - "terminalBrightGreen": "#366134", - "terminalBrightYellow": "#593b02", - "terminalBrightBlue": "#0f4058", - "terminalBrightMagenta": "#6b3654", - "terminalBrightCyan": "#4b3d74", - "terminalBrightWhite": "#17120d" + "background": "#100f0d", + "backgroundPanel": "#201b16", + "backgroundElement": "#2b231b", + "backgroundHover": "#2b231b", + "backgroundSelected": "#2b231b", + "textSelected": "#e8dfd0", + "backgroundCode": "#231d18", + "backgroundSearch": "#8d7141", + "backgroundLine": "#181512", + "backgroundAssistant": "#191f24", + "backgroundUser": "#281f16", + "backgroundTool": "#282327", + "text": "#e8dfd0", + "textMuted": "#c7b9aa", + "textSubtle": "#a6988d", + "textPlaceholder": "#b8a99a", + "textAssistant": "#78a2cb", + "textUser": "#dba067", + "textTool": "#d4b4e6", + "primary": "#d99555", + "secondary": "#c96a45", + "accent": "#d99555", + "accentMuted": "#a77443", + "error": "#ed8a7a", + "warning": "#e8b866", + "success": "#4db35f", + "info": "#5f95ca", + "border": "#968878", + "borderActive": "#d99555", + "borderSubtle": "#756052", + "borderFocus": "#5f95ca", + "shadow": "#0c0b0a", + "diffAdded": "#4db35f", + "diffRemoved": "#ed8a7a", + "diffContext": "#c7b9aa", + "diffHunkHeader": "#d4b4e6", + "diffHighlightAdded": "#4db35f", + "diffHighlightRemoved": "#ed8a7a", + "diffAddedBg": "#395437", + "diffRemovedBg": "#68473f", + "diffContextBg": "#100f0d", + "diffLineNumber": "#938274", + "diffAddedLineNumberBg": "#395437", + "diffRemovedLineNumberBg": "#68473f", + "diffHunkHeaderBg": "#544b51", + "diffFold": "#b8a99a", + "diffFoldBg": "#181512", + "markdownText": "#e8dfd0", + "markdownHeading": "#d99555", + "markdownLink": "#5f95ca", + "markdownLinkText": "#d99555", + "markdownCode": "#4db35f", + "markdownBlockQuote": "#c96a45", + "markdownEmph": "#5f95ca", + "markdownStrong": "#d99555", + "markdownHorizontalRule": "#968878", + "markdownListItem": "#d99555", + "markdownListEnumeration": "#d4b4e6", + "markdownTableBorder": "#968878", + "markdownTableHeader": "#c96a45", + "markdownImage": "#e29cb4", + "markdownImageText": "#e8dfd0", + "markdownCodeBlock": "#e8dfd0", + "markdownCodeBlockBg": "#231d18", + "markdownInlineCodeBg": "#6ea06a", + "syntaxComment": "#b8a99a", + "syntaxKeyword": "#dc9d59", + "syntaxFunction": "#5f95ca", + "syntaxMethod": "#729ace", + "syntaxVariable": "#d1b5d7", + "syntaxParameter": "#cb714d", + "syntaxProperty": "#6498ca", + "syntaxField": "#55b565", + "syntaxString": "#4db35f", + "syntaxNumber": "#d3864f", + "syntaxBoolean": "#cf7660", + "syntaxConstant": "#cf7660", + "syntaxType": "#d4b4e6", + "syntaxClass": "#d5aecc", + "syntaxInterface": "#baade0", + "syntaxEnum": "#bcb4ce", + "syntaxOperator": "#e29cb4", + "syntaxPunctuation": "#c7b9aa", + "syntaxTag": "#dc9d59", + "syntaxAttribute": "#6498ca", + "syntaxRegexp": "#e597a4", + "syntaxEscape": "#e8b866", + "syntaxNamespace": "#d4b4e6", + "syntaxModule": "#d4b4e6", + "syntaxDecorator": "#e29cb4", + "syntaxBuiltin": "#cf7660", + "syntaxSpecial": "#e8b866", + "syntaxTodo": "#e8bd73", + "syntaxDeprecated": "#e29787", + "terminalBlack": "#84827e", + "terminalRed": "#ed8a7a", + "terminalGreen": "#4db35f", + "terminalYellow": "#e8b866", + "terminalBlue": "#5f95ca", + "terminalMagenta": "#e29cb4", + "terminalCyan": "#78a2cb", + "terminalWhite": "#e8dfd0", + "terminalBrightBlack": "#938274", + "terminalBrightRed": "#ec9989", + "terminalBrightGreen": "#69bb73", + "terminalBrightYellow": "#e8be77", + "terminalBrightBlue": "#78a2cb", + "terminalBrightMagenta": "#e3a8b9", + "terminalBrightCyan": "#d8bce2", + "terminalBrightWhite": "#e8dfd0" } } diff --git a/Codex-CLI/Dreamcoder.tmTheme b/Codex-CLI/Dreamcoder.tmTheme index 057aff6..cbf424a 100644 --- a/Codex-CLI/Dreamcoder.tmTheme +++ b/Codex-CLI/Dreamcoder.tmTheme @@ -7,32 +7,32 @@ settings settings - background#f3eadc - foreground#17120d - caret#824f16 - selection#decbb1 - selectionForeground#17120d - lineHighlight#decbb1 - gutter#c8ad89 - gutterForeground#352e22 - invisibles#725e4c + background#100f0d + foreground#e8dfd0 + caret#d99555 + selection#2b231b + selectionForeground#e8dfd0 + lineHighlight#2b231b + gutter#392e21 + gutterForeground#c7b9aa + invisibles#b8a99a - scopecommentsettingsforeground#725e4cfontStyleitalic - scopekeyword, storagesettingsforeground#7c4c11fontStylebold - scopeentity.name.function, support.functionsettingsforeground#0d4a68 - scopevariable, meta.definition.variablesettingsforeground#4e4171 - scopestringsettingsforeground#3d723d - scopeconstant.numeric, constant.languagesettingsforeground#9d452d - scopeentity.name.type, support.typesettingsforeground#57478b - scopepunctuation, keyword.operatorsettingsforeground#7d3e64 - scopeconstant.character.escapesettingsforeground#3d723d - scopeentity.name.tagsettingsforeground#7c4c11 - scopeentity.other.attribute-namesettingsforeground#0d4864 - scopeinvalidsettingsforeground#842f24 - scopemarkup.heading, markup.boldsettingsforeground#824f16fontStylebold - scopemarkup.italicsettingsforeground#0d4a68fontStyleitalic - scopemeta.diff, meta.diff.headersettingsforeground#57478b - scopesupport.class, support.constantsettingsforeground#57478b + scopecommentsettingsforeground#b8a99afontStyleitalic + scopekeyword, storagesettingsforeground#dc9d59fontStylebold + scopeentity.name.function, support.functionsettingsforeground#5f95ca + scopevariable, meta.definition.variablesettingsforeground#d1b5d7 + scopestringsettingsforeground#4db35f + scopeconstant.numeric, constant.languagesettingsforeground#cf7660 + scopeentity.name.type, support.typesettingsforeground#d4b4e6 + scopepunctuation, keyword.operatorsettingsforeground#e29cb4 + scopeconstant.character.escapesettingsforeground#4db35f + scopeentity.name.tagsettingsforeground#dc9d59 + scopeentity.other.attribute-namesettingsforeground#6498ca + scopeinvalidsettingsforeground#ed8a7a + scopemarkup.heading, markup.boldsettingsforeground#d99555fontStylebold + scopemarkup.italicsettingsforeground#5f95cafontStyleitalic + scopemeta.diff, meta.diff.headersettingsforeground#d4b4e6 + scopesupport.class, support.constantsettingsforeground#d4b4e6 diff --git a/Ghostty/.config/ghostty/config b/Ghostty/.config/ghostty/config index 269ee94..f75ad2c 100644 --- a/Ghostty/.config/ghostty/config +++ b/Ghostty/.config/ghostty/config @@ -9,7 +9,7 @@ font-size = 14 font-feature = -calt, -liga, -dlig # Theme — mode-tracking (sync writes here, follows light/dark) -theme = dreamcoder +theme = dreamcoder-dark # Shell command = fish --login diff --git a/Ghostty/.config/ghostty/themes/dreamcoder b/Ghostty/.config/ghostty/themes/dreamcoder index b20ae7c..d189dae 100644 --- a/Ghostty/.config/ghostty/themes/dreamcoder +++ b/Ghostty/.config/ghostty/themes/dreamcoder @@ -1,27 +1,27 @@ -# Dreamcoder Light -background = #f3eadc -foreground = #17120d -cursor-color = #824f16 -cursor-text = #fff7ea -selection-background = #decbb1 -selection-foreground = #17120d -background-opacity = 0.96 -background-blur = false +# Dreamcoder Ember Noir OLED +background = #100f0d +foreground = #e8dfd0 +cursor-color = #d99555 +cursor-text = #100f0d +selection-background = #2b231b +selection-foreground = #e8dfd0 +background-opacity = 0.76 +background-blur = true minimum-contrast = 4.5 -palette = 0=#5e5c57 -palette = 1=#842f24 -palette = 2=#3d723d -palette = 3=#824f16 -palette = 4=#0d4a68 -palette = 5=#7d3e64 -palette = 6=#57478b -palette = 7=#352e22 -palette = 8=#554638 -palette = 9=#702a20 -palette = 10=#366134 -palette = 11=#654300 -palette = 12=#0f4058 -palette = 13=#4b3d74 -palette = 14=#10565e -palette = 15=#17120d +palette = 0=#84827e +palette = 1=#ed8a7a +palette = 2=#4db35f +palette = 3=#d99555 +palette = 4=#5f95ca +palette = 5=#e29cb4 +palette = 6=#d4b4e6 +palette = 7=#c7b9aa +palette = 8=#938274 +palette = 9=#ec9989 +palette = 10=#69bb73 +palette = 11=#e8b866 +palette = 12=#78a2cb +palette = 13=#d8bce2 +palette = 14=#789d9b +palette = 15=#e8dfd0 diff --git a/Kitty/.config/kitty/colors-dreamcoder.conf b/Kitty/.config/kitty/colors-dreamcoder.conf index be98492..f4ea373 100644 --- a/Kitty/.config/kitty/colors-dreamcoder.conf +++ b/Kitty/.config/kitty/colors-dreamcoder.conf @@ -1,52 +1,52 @@ # ========================================================== -# Dreamcoder Light +# Dreamcoder Ember Noir OLED # ========================================================== # Color-only theme layer. Keep ML4W/Gentleman behavior elsewhere. -foreground #17120d -background #f3eadc -selection_foreground #17120d -selection_background #decbb1 -url_color #824f16 +foreground #e8dfd0 +background #100f0d +selection_foreground #e8dfd0 +selection_background #2b231b +url_color #d99555 -cursor #824f16 -cursor_text_color #fff7ea +cursor #d99555 +cursor_text_color #100f0d cursor_shape block cursor_blink_interval 0.5 cursor_stop_blinking_after 15.0 -active_tab_foreground #fff7ea -active_tab_background #824f16 -inactive_tab_foreground #352e22 -inactive_tab_background #f3eadc -tab_bar_background #f3eadc +active_tab_foreground #100f0d +active_tab_background #d99555 +inactive_tab_foreground #c7b9aa +inactive_tab_background #100f0d +tab_bar_background #100f0d -active_border_color #824f16 -inactive_border_color #8a7358 -bell_border_color #842f24 +active_border_color #d99555 +inactive_border_color #756052 +bell_border_color #ed8a7a -color0 #5e5c57 -color1 #842f24 -color2 #3d723d -color3 #824f16 -color4 #0d4a68 -color5 #7d3e64 -color6 #57478b -color7 #352e22 -color8 #554638 -color9 #702a20 -color10 #366134 -color11 #654300 -color12 #0f4058 -color13 #4b3d74 -color14 #10565e -color15 #17120d -color16 #a7471c -color17 #842f24 +color0 #84827e +color1 #ed8a7a +color2 #4db35f +color3 #d99555 +color4 #5f95ca +color5 #e29cb4 +color6 #d4b4e6 +color7 #c7b9aa +color8 #938274 +color9 #ec9989 +color10 #69bb73 +color11 #e8b866 +color12 #78a2cb +color13 #d8bce2 +color14 #789d9b +color15 #e8dfd0 +color16 #c96a45 +color17 #ed8a7a -mark1_foreground #fff7ea -mark1_background #824f16 -mark2_foreground #17120d -mark2_background #0d4a68 -mark3_foreground #17120d -mark3_background #7d3e64 +mark1_foreground #100f0d +mark1_background #d99555 +mark2_foreground #e8dfd0 +mark2_background #5f95ca +mark3_foreground #e8dfd0 +mark3_background #e29cb4 diff --git a/Kitty/.config/kitty/dreamcoder-ui.conf b/Kitty/.config/kitty/dreamcoder-ui.conf index bc33c8d..7e017de 100644 --- a/Kitty/.config/kitty/dreamcoder-ui.conf +++ b/Kitty/.config/kitty/dreamcoder-ui.conf @@ -19,9 +19,9 @@ single_window_padding_width -1 placement_strategy center initial_window_width 1180 initial_window_height 780 -background_opacity 0.96 +background_opacity 0.76 dynamic_background_opacity no -background_blur 0 +background_blur 24 input_delay 0 repaint_delay 1 diff --git a/Nvim/.config/nvim/colors/dreamcoder-dark.lua b/Nvim/.config/nvim/colors/dreamcoder-dark.lua index 0f82904..93d6f40 100644 --- a/Nvim/.config/nvim/colors/dreamcoder-dark.lua +++ b/Nvim/.config/nvim/colors/dreamcoder-dark.lua @@ -1261,3 +1261,4 @@ end vim.api.nvim_set_hl(0, "GitSignsCurrentLineBlame", { fg = "#c7b9aa" }) + diff --git a/Nvim/.config/nvim/colors/dreamcoder-light.lua b/Nvim/.config/nvim/colors/dreamcoder-light.lua index 0c83d88..d5f3d43 100644 --- a/Nvim/.config/nvim/colors/dreamcoder-light.lua +++ b/Nvim/.config/nvim/colors/dreamcoder-light.lua @@ -1261,3 +1261,4 @@ end vim.api.nvim_set_hl(0, "GitSignsCurrentLineBlame", { fg = "#352e22" }) + diff --git a/Pi/.pi/agent/scripts/pi-theme.sh b/Pi/.pi/agent/scripts/pi-theme.sh new file mode 100755 index 0000000..51c7754 --- /dev/null +++ b/Pi/.pi/agent/scripts/pi-theme.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash +set -euo pipefail + +DD="${DOTS_DIR:-$HOME/Documents/PROYECTOS/dreamcoder-dots}" +LN="$HOME/.pi/agent/themes/dreamcoder.json" + +detect() { + if command -v gsettings &>/dev/null; then + s="$(gsettings get org.gnome.desktop.interface color-scheme 2>/dev/null || true)" + [[ "$s" == *prefer-dark* ]] && { + echo dark + return + } + [[ "$s" == *default* || "$s" == *prefer-light* ]] && { + echo light + return + } + fi + if [[ -f "$HOME/.theme-mode" ]]; then + m="$(<"$HOME/.theme-mode")" + [[ "$m" == dark || "$m" == light ]] && { + echo "$m" + return + } + fi + if [[ -n "${COLORFGBG:-}" ]]; then + bg="${COLORFGBG##*;}" + [[ "$bg" -lt 8 ]] && echo light || echo dark + return + fi + echo light +} + +mode="$(detect)" +src="$DD/Pi/.pi/agent/themes/dreamcoder-$mode.json" +[[ -f "$src" ]] || { + echo "✗ $src not found" >&2 + exit 1 +} +mkdir -p "$(dirname "$LN")" +ln -sf "$src" "$LN" +echo "→ pi-theme: $mode" diff --git a/Pi/.pi/agent/themes/dreamcoder-light.json b/Pi/.pi/agent/themes/dreamcoder-light.json index 88ac1e0..1175909 100644 --- a/Pi/.pi/agent/themes/dreamcoder-light.json +++ b/Pi/.pi/agent/themes/dreamcoder-light.json @@ -2,18 +2,18 @@ "$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json", "name": "dreamcoder", "vars": { - "cocoa": "#a7471c", - "lucuma": "#824f16", - "diagnostic": "#0d4a68", - "sage": "#3d723d", - "mauve": "#7d3e64", - "coral": "#842f24", - "warning": "#654300", - "muted": "#352e22", - "subtle": "#554638", - "comment": "#725e4c", - "borderUi": "#66513b", - "borderMuted": "#8a7358" + "cocoa": "#c96a45", + "lucuma": "#d99555", + "diagnostic": "#5f95ca", + "sage": "#4db35f", + "mauve": "#e29cb4", + "coral": "#ed8a7a", + "warning": "#e8b866", + "muted": "#c7b9aa", + "subtle": "#938274", + "comment": "#b8a99a", + "borderUi": "#968878", + "borderMuted": "#756052" }, "colors": { "accent": "lucuma", @@ -27,15 +27,15 @@ "dim": "subtle", "text": "", "thinkingText": "muted", - "selectedBg": "#decbb1", - "userMessageBg": "#e1d1bc", + "selectedBg": "#2b231b", + "userMessageBg": "#302419", "userMessageText": "", - "customMessageBg": "#fff7ea", + "customMessageBg": "#201b16", "customMessageText": "", "customMessageLabel": "lucuma", - "toolPendingBg": "#f8f0e2", - "toolSuccessBg": "#d2d4bf", - "toolErrorBg": "#e1ccbf", + "toolPendingBg": "#171411", + "toolSuccessBg": "#1b2d1c", + "toolErrorBg": "#33231e", "toolTitle": "lucuma", "toolOutput": "", "mdHeading": "lucuma", @@ -52,17 +52,17 @@ "toolDiffRemoved": "coral", "toolDiffContext": "muted", "syntaxComment": "comment", - "syntaxKeyword": "#7c4c11", - "syntaxFunction": "#0d4a68", - "syntaxVariable": "#4e4171", - "syntaxString": "#3d723d", - "syntaxNumber": "#8f4c18", - "syntaxType": "#57478b", - "syntaxOperator": "#7d3e64", - "syntaxPunctuation": "#352e22", + "syntaxKeyword": "#dc9d59", + "syntaxFunction": "#5f95ca", + "syntaxVariable": "#d1b5d7", + "syntaxString": "#4db35f", + "syntaxNumber": "#d3864f", + "syntaxType": "#d4b4e6", + "syntaxOperator": "#e29cb4", + "syntaxPunctuation": "#c7b9aa", "thinkingOff": "comment", "thinkingMinimal": "borderUi", - "thinkingLow": "#0e435d", + "thinkingLow": "#6f9ecb", "thinkingMedium": "diagnostic", "thinkingHigh": "mauve", "thinkingXhigh": "coral", diff --git a/Pi/.pi/agent/themes/dreamcoder.json b/Pi/.pi/agent/themes/dreamcoder.json index 88ac1e0..1175909 100644 --- a/Pi/.pi/agent/themes/dreamcoder.json +++ b/Pi/.pi/agent/themes/dreamcoder.json @@ -2,18 +2,18 @@ "$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json", "name": "dreamcoder", "vars": { - "cocoa": "#a7471c", - "lucuma": "#824f16", - "diagnostic": "#0d4a68", - "sage": "#3d723d", - "mauve": "#7d3e64", - "coral": "#842f24", - "warning": "#654300", - "muted": "#352e22", - "subtle": "#554638", - "comment": "#725e4c", - "borderUi": "#66513b", - "borderMuted": "#8a7358" + "cocoa": "#c96a45", + "lucuma": "#d99555", + "diagnostic": "#5f95ca", + "sage": "#4db35f", + "mauve": "#e29cb4", + "coral": "#ed8a7a", + "warning": "#e8b866", + "muted": "#c7b9aa", + "subtle": "#938274", + "comment": "#b8a99a", + "borderUi": "#968878", + "borderMuted": "#756052" }, "colors": { "accent": "lucuma", @@ -27,15 +27,15 @@ "dim": "subtle", "text": "", "thinkingText": "muted", - "selectedBg": "#decbb1", - "userMessageBg": "#e1d1bc", + "selectedBg": "#2b231b", + "userMessageBg": "#302419", "userMessageText": "", - "customMessageBg": "#fff7ea", + "customMessageBg": "#201b16", "customMessageText": "", "customMessageLabel": "lucuma", - "toolPendingBg": "#f8f0e2", - "toolSuccessBg": "#d2d4bf", - "toolErrorBg": "#e1ccbf", + "toolPendingBg": "#171411", + "toolSuccessBg": "#1b2d1c", + "toolErrorBg": "#33231e", "toolTitle": "lucuma", "toolOutput": "", "mdHeading": "lucuma", @@ -52,17 +52,17 @@ "toolDiffRemoved": "coral", "toolDiffContext": "muted", "syntaxComment": "comment", - "syntaxKeyword": "#7c4c11", - "syntaxFunction": "#0d4a68", - "syntaxVariable": "#4e4171", - "syntaxString": "#3d723d", - "syntaxNumber": "#8f4c18", - "syntaxType": "#57478b", - "syntaxOperator": "#7d3e64", - "syntaxPunctuation": "#352e22", + "syntaxKeyword": "#dc9d59", + "syntaxFunction": "#5f95ca", + "syntaxVariable": "#d1b5d7", + "syntaxString": "#4db35f", + "syntaxNumber": "#d3864f", + "syntaxType": "#d4b4e6", + "syntaxOperator": "#e29cb4", + "syntaxPunctuation": "#c7b9aa", "thinkingOff": "comment", "thinkingMinimal": "borderUi", - "thinkingLow": "#0e435d", + "thinkingLow": "#6f9ecb", "thinkingMedium": "diagnostic", "thinkingHigh": "mauve", "thinkingXhigh": "coral", diff --git a/Shell/.config/fish/config.fish b/Shell/.config/fish/config.fish index a8e89b4..4e0400c 100644 --- a/Shell/.config/fish/config.fish +++ b/Shell/.config/fish/config.fish @@ -37,3 +37,9 @@ for dir in $PATH end end set -gx PATH $clean_path + +# Zen Browser - Profile aliases +alias zp="zen-browser -P Personal" +alias zd="zen-browser -P Dev" +alias zf="zen-browser -P Founder" +fish_add_path /home/dreamcoder08/.local/share/npm-global/bin diff --git a/Shell/.config/shell/aliases/dreamcoder-modern.sh b/Shell/.config/shell/aliases/dreamcoder-modern.sh index c737334..f83547f 100644 --- a/Shell/.config/shell/aliases/dreamcoder-modern.sh +++ b/Shell/.config/shell/aliases/dreamcoder-modern.sh @@ -22,13 +22,13 @@ alias groot='cd "$(git rev-parse --show-toplevel 2>/dev/null)"' ## ─── Modern CLI replacements ────────────────────────── # eza (better ls) if command -v eza &>/dev/null; then - alias ll='eza -la --icons --group-directories-first' - alias la='eza -a --icons --group-directories-first' - alias lt='eza -T --icons --group-directories-first' - alias l1='eza -1 --icons' + alias ll='eza -la --icons --group-directories-first' + alias la='eza -a --icons --group-directories-first' + alias lt='eza -T --icons --group-directories-first' + alias l1='eza -1 --icons' else - alias ll='ls -lahF' - alias la='ls -A' + alias ll='ls -lahF' + alias la='ls -A' fi # bat (better cat) @@ -60,23 +60,26 @@ alias docs='cd "${DREAMCODER_DOTS_DIR:-$HOME/Documents/PROYECTOS/dreamcoder-dots ## ─── Extract function ───────────────────────────────── extract() { - if [ $# -eq 0 ]; then - echo "Usage: extract [output_dir]" - return 1 - fi - local file="$1" dir="${2:-${file%.*}}" - case "$file" in - *.tar.gz|*.tgz) tar -xzf "$file" -C "$(dirname "$file")" 2>/dev/null || tar -xzf "$file" ;; - *.tar.bz2|*.tbz2) tar -xjf "$file" ;; - *.tar.xz|*.txz) tar -xJf "$file" ;; - *.tar.zst) tar --zstd -xf "$file" ;; - *.tar) tar -xf "$file" ;; - *.gz) gunzip -k "$file" ;; - *.bz2) bunzip2 -k "$file" ;; - *.xz) unxz -k "$file" ;; - *.zip) unzip "$file" -d "$dir" ;; - *.rar) unrar x "$file" "$dir" ;; - *.7z) 7z x "$file" "-o$dir" ;; - *) echo "extract: unknown archive: $file" >&2; return 1 ;; - esac + if [ $# -eq 0 ]; then + echo "Usage: extract [output_dir]" + return 1 + fi + local file="$1" dir="${2:-${file%.*}}" + case "$file" in + *.tar.gz | *.tgz) tar -xzf "$file" -C "$(dirname "$file")" 2>/dev/null || tar -xzf "$file" ;; + *.tar.bz2 | *.tbz2) tar -xjf "$file" ;; + *.tar.xz | *.txz) tar -xJf "$file" ;; + *.tar.zst) tar --zstd -xf "$file" ;; + *.tar) tar -xf "$file" ;; + *.gz) gunzip -k "$file" ;; + *.bz2) bunzip2 -k "$file" ;; + *.xz) unxz -k "$file" ;; + *.zip) unzip "$file" -d "$dir" ;; + *.rar) unrar x "$file" "$dir" ;; + *.7z) 7z x "$file" "-o$dir" ;; + *) + echo "extract: unknown archive: $file" >&2 + return 1 + ;; + esac } diff --git a/Shell/.config/starship-dark.toml b/Shell/.config/starship-dark.toml index 7d99b17..ae9f8b2 100644 --- a/Shell/.config/starship-dark.toml +++ b/Shell/.config/starship-dark.toml @@ -1,24 +1,27 @@ # ======================================================== # Dreamcoder Ember Noir OLED — Starship prompt # ======================================================== -# Modern two-line layout with powerline segments. -# Line 1: context (directory, git) -# Line 2: input character only (clean) +# Two-line powerline layout with context-aware modules. +# Line 1: ssh_context, directory, git + fill + battery/k8s/terraform/cmd/time +# Line 2: character (with exit code indicator on error) add_newline = true palette = "dreamcoder" command_timeout = 500 format = """ -[](fg:prompt_surface0)\ -$username\ -[](bg:prompt_surface1 fg:prompt_surface0)\ +[\uECA6](fg:prompt_surface0)\ +$ssh_context\ +[\uECA0](bg:prompt_surface1 fg:prompt_surface0)\ $directory\ -[](bg:prompt_accent fg:prompt_surface1)\ +[\uECA0](bg:prompt_accent fg:prompt_surface1)\ $git_branch\ $git_status\ -[](fg:prompt_accent)\ +[\uECB4](fg:prompt_accent)\ $fill\ +$battery\ +$kubernetes\ +$terraform\ $cmd_duration\ $time $character""" @@ -47,37 +50,69 @@ border = "#968878" focus = "#5f8f8f" link = "#d99555" +[ssh_context] +format = "[$ssh_connection$user@$host]($style)" +style = "bg:prompt_surface0 fg:prompt_text bold" +ssh_only = false + [username] -show_always = true +show_always = false style_user = "bg:prompt_surface0 fg:prompt_text bold" style_root = "bg:prompt_surface0 fg:error bold" -format = "[  $user ]($style)" +format = "[ \uf081 $user ]($style)" +detect_env_vars = ["SSH_CONNECTION", "SSH_CLIENT", "SSH_TTY"] [directory] style = "bg:prompt_surface1 fg:prompt_text bold" -format = "[  $path ]($style)" +format = "[ \uf0F7 $path ]($style)" truncation_length = 2 truncate_to_repo = true home_symbol = "" [git_branch] -symbol = "" +symbol = "\uf418" style = "bg:prompt_accent fg:prompt_bg bold" format = "[ $symbol $branch ]($style)" [git_status] style = "bg:prompt_accent fg:prompt_bg bold" format = "[$all_status$ahead_behind ]($style)" -conflicted = "${count} " -ahead = "⇡${count} " -behind = "⇣${count} " -diverged = "⇕⇡${ahead_count}⇣${behind_count} " +conflicted = "\ue727${count} " +ahead = "\u21E1${count} " +behind = "\u21E3${count} " +diverged = "\u2195\u21E1${ahead_count}\u21E3${behind_count} " untracked = "?${count} " -stashed = "󰏗${count} " +stashed = "\uf0CF${count} " modified = "~${count} " staged = "+${count} " -renamed = "»${count} " -deleted = "✘${count} " +renamed = "\u00BB${count} " +deleted = "\u2718${count} " + +[status] +disabled = false +format = "[$symbol]($style)" +symbol = "\u2717" +style = "bg:error fg:prompt_bg bold" +pipestatus = false + +[battery] +disabled = false +display = [ + {threshold = 20, style = "fg:error bold", symbol = "\uf244 "}, +] + +[kubernetes] +format = "[$symbol$context( \($namespace\))]($style)" +style = "fg:diagnostic bold" +symbol = "\uF3B2 " +disabled = false +detect_env_vars = ["KUBECONFIG", "KUBERNETES_SERVICE_HOST", "KUBERNETES_PORT"] + +[terraform] +format = "[$symbol$workspace]($style)" +style = "fg:lavender bold" +symbol = "\uFD31 " +disabled = false [fill] symbol = " " @@ -85,7 +120,7 @@ symbol = " " [cmd_duration] min_time = 2500 style = "fg:prompt_muted" -format = "[  $duration ]($style)" +format = "[ \uf552 $duration ]($style)" [time] disabled = false @@ -93,38 +128,54 @@ format = "[ $time ]($style)" style = "fg:prompt_muted" [character] -success_symbol = "[❯](bold fg:prompt_accent)" -error_symbol = "[❯](bold fg:error)" -vimcmd_symbol = "[❮](bold fg:sage)" +success_symbol = "[\u276F](bold fg:prompt_accent)" +error_symbol = "[\u276F](bold fg:error)" +vimcmd_symbol = "[\u276E](bold fg:sage)" # Runtime versions - show only when relevant, keep compact [bun] -symbol = "" +symbol = "\uF5EF" style = "fg:prompt_accent bold" format = "[ $symbol $version]($style)" [nodejs] -symbol = "" +symbol = "\uE718" style = "fg:sage bold" format = "[ $symbol $version]($style)" [python] -symbol = "" -style = "fg:diagnostic bold" +symbol = "\uE73C" +style = "fg:diag bold" format = "[ $symbol $version]($style)" [golang] -symbol = "" +symbol = "\uE627" style = "fg:lavender bold" format = "[ $symbol $version]($style)" [rust] -symbol = "" +symbol = "\uE7A8" style = "fg:mauve bold" format = "[ $symbol $version]($style)" +[java] +symbol = "\uE204" +style = "fg:lavender bold" +format = "[ $symbol $version]($style)" + +[container] +format = "[$symbol \uf48B $name]($style)" +style = "fg:warning bold" +symbol = "\uf4E6" + +[custom.ai_session] +command = "cat ~/.cache/dreamcoder/ai-session.state 2>/dev/null || echo ''" +when = """test -f ~/.cache/dreamcoder/ai-session.state""" +format = "[\uf5B5 $output]($style)" +style = "fg:diag bold" + [docker_context] -symbol = "" -style = "fg:diagnostic bold" +symbol = "\uf308" +style = "fg:diag bold" format = "[ $symbol $context]($style)" only_with_files = true diff --git a/Shell/.config/starship-light.toml b/Shell/.config/starship-light.toml index 2ecea4e..671e0dc 100644 --- a/Shell/.config/starship-light.toml +++ b/Shell/.config/starship-light.toml @@ -1,24 +1,27 @@ # ======================================================== # Dreamcoder Light — Starship prompt # ======================================================== -# Modern two-line layout with powerline segments. -# Line 1: context (directory, git) -# Line 2: input character only (clean) +# Two-line powerline layout with context-aware modules. +# Line 1: ssh_context, directory, git + fill + battery/k8s/terraform/cmd/time +# Line 2: character (with exit code indicator on error) add_newline = true palette = "dreamcoder" command_timeout = 500 format = """ -[](fg:prompt_surface0)\ -$username\ -[](bg:prompt_surface1 fg:prompt_surface0)\ +[\uECA6](fg:prompt_surface0)\ +$ssh_context\ +[\uECA0](bg:prompt_surface1 fg:prompt_surface0)\ $directory\ -[](bg:prompt_accent fg:prompt_surface1)\ +[\uECA0](bg:prompt_accent fg:prompt_surface1)\ $git_branch\ $git_status\ -[](fg:prompt_accent)\ +[\uECB4](fg:prompt_accent)\ $fill\ +$battery\ +$kubernetes\ +$terraform\ $cmd_duration\ $time $character""" @@ -47,37 +50,69 @@ border = "#66513b" focus = "#0f6570" link = "#824f16" +[ssh_context] +format = "[$ssh_connection$user@$host]($style)" +style = "bg:prompt_surface0 fg:prompt_text bold" +ssh_only = false + [username] -show_always = true +show_always = false style_user = "bg:prompt_surface0 fg:prompt_text bold" style_root = "bg:prompt_surface0 fg:error bold" -format = "[  $user ]($style)" +format = "[ \uf081 $user ]($style)" +detect_env_vars = ["SSH_CONNECTION", "SSH_CLIENT", "SSH_TTY"] [directory] style = "bg:prompt_surface1 fg:prompt_text bold" -format = "[  $path ]($style)" +format = "[ \uf0F7 $path ]($style)" truncation_length = 2 truncate_to_repo = true home_symbol = "" [git_branch] -symbol = "" +symbol = "\uf418" style = "bg:prompt_accent fg:prompt_bg bold" format = "[ $symbol $branch ]($style)" [git_status] style = "bg:prompt_accent fg:prompt_bg bold" format = "[$all_status$ahead_behind ]($style)" -conflicted = "${count} " -ahead = "⇡${count} " -behind = "⇣${count} " -diverged = "⇕⇡${ahead_count}⇣${behind_count} " +conflicted = "\ue727${count} " +ahead = "\u21E1${count} " +behind = "\u21E3${count} " +diverged = "\u2195\u21E1${ahead_count}\u21E3${behind_count} " untracked = "?${count} " -stashed = "󰏗${count} " +stashed = "\uf0CF${count} " modified = "~${count} " staged = "+${count} " -renamed = "»${count} " -deleted = "✘${count} " +renamed = "\u00BB${count} " +deleted = "\u2718${count} " + +[status] +disabled = false +format = "[$symbol]($style)" +symbol = "\u2717" +style = "bg:error fg:prompt_bg bold" +pipestatus = false + +[battery] +disabled = false +display = [ + {threshold = 20, style = "fg:error bold", symbol = "\uf244 "}, +] + +[kubernetes] +format = "[$symbol$context( \($namespace\))]($style)" +style = "fg:diagnostic bold" +symbol = "\uF3B2 " +disabled = false +detect_env_vars = ["KUBECONFIG", "KUBERNETES_SERVICE_HOST", "KUBERNETES_PORT"] + +[terraform] +format = "[$symbol$workspace]($style)" +style = "fg:lavender bold" +symbol = "\uFD31 " +disabled = false [fill] symbol = " " @@ -85,7 +120,7 @@ symbol = " " [cmd_duration] min_time = 2500 style = "fg:prompt_muted" -format = "[  $duration ]($style)" +format = "[ \uf552 $duration ]($style)" [time] disabled = false @@ -93,38 +128,54 @@ format = "[ $time ]($style)" style = "fg:prompt_muted" [character] -success_symbol = "[❯](bold fg:prompt_accent)" -error_symbol = "[❯](bold fg:error)" -vimcmd_symbol = "[❮](bold fg:sage)" +success_symbol = "[\u276F](bold fg:prompt_accent)" +error_symbol = "[\u276F](bold fg:error)" +vimcmd_symbol = "[\u276E](bold fg:sage)" # Runtime versions - show only when relevant, keep compact [bun] -symbol = "" +symbol = "\uF5EF" style = "fg:prompt_accent bold" format = "[ $symbol $version]($style)" [nodejs] -symbol = "" +symbol = "\uE718" style = "fg:sage bold" format = "[ $symbol $version]($style)" [python] -symbol = "" -style = "fg:diagnostic bold" +symbol = "\uE73C" +style = "fg:diag bold" format = "[ $symbol $version]($style)" [golang] -symbol = "" +symbol = "\uE627" style = "fg:lavender bold" format = "[ $symbol $version]($style)" [rust] -symbol = "" +symbol = "\uE7A8" style = "fg:mauve bold" format = "[ $symbol $version]($style)" +[java] +symbol = "\uE204" +style = "fg:lavender bold" +format = "[ $symbol $version]($style)" + +[container] +format = "[$symbol \uf48B $name]($style)" +style = "fg:warning bold" +symbol = "\uf4E6" + +[custom.ai_session] +command = "cat ~/.cache/dreamcoder/ai-session.state 2>/dev/null || echo ''" +when = """test -f ~/.cache/dreamcoder/ai-session.state""" +format = "[\uf5B5 $output]($style)" +style = "fg:diag bold" + [docker_context] -symbol = "" -style = "fg:diagnostic bold" +symbol = "\uf308" +style = "fg:diag bold" format = "[ $symbol $context]($style)" only_with_files = true diff --git a/Shell/.config/starship.toml b/Shell/.config/starship.toml index 2ecea4e..be9fa49 100644 --- a/Shell/.config/starship.toml +++ b/Shell/.config/starship.toml @@ -1,24 +1,27 @@ # ======================================================== -# Dreamcoder Light — Starship prompt +# Dreamcoder Ember Noir OLED — Starship prompt # ======================================================== -# Modern two-line layout with powerline segments. -# Line 1: context (directory, git) -# Line 2: input character only (clean) +# Two-line powerline layout with context-aware modules. +# Line 1: username, directory, git + fill + battery/k8s/terraform/cmd/time +# Line 2: character (with exit code indicator on error) add_newline = true palette = "dreamcoder" command_timeout = 500 format = """ -[](fg:prompt_surface0)\ +[\uECA6](fg:prompt_surface0)\ $username\ -[](bg:prompt_surface1 fg:prompt_surface0)\ +[\uECA0](bg:prompt_surface1 fg:prompt_surface0)\ $directory\ -[](bg:prompt_accent fg:prompt_surface1)\ +[\uECA0](bg:prompt_accent fg:prompt_surface1)\ $git_branch\ $git_status\ -[](fg:prompt_accent)\ +[\uECB4](fg:prompt_accent)\ $fill\ +$battery\ +$kubernetes\ +$terraform\ $cmd_duration\ $time $character""" @@ -26,58 +29,85 @@ $character""" right_format = "" [palettes.dreamcoder] -bg = "#f3eadc" -text = "#17120d" -muted = "#352e22" -prompt_bg = "#f3eadc" -prompt_surface0 = "#fff0d8" -prompt_surface1 = "#d6ac72" -prompt_surface2 = "#b87c40" -prompt_text = "#20150c" -prompt_muted = "#53402e" -prompt_accent = "#8a5520" -prompt_accent_2 = "#a7471c" -sage = "#3d723d" -diagnostic = "#0d4a68" -lavender = "#57478b" -mauve = "#7d3e64" -error = "#842f24" -warning = "#654300" -border = "#66513b" -focus = "#0f6570" -link = "#824f16" +bg = "#100f0d" +text = "#e8dfd0" +muted = "#c7b9aa" +prompt_bg = "#18100c" +prompt_surface0 = "#2a1c14" +prompt_surface1 = "#4a2c18" +prompt_surface2 = "#6a3e1e" +prompt_text = "#fff0df" +prompt_muted = "#dcc3aa" +prompt_accent = "#e6a15c" +prompt_accent_2 = "#d66f50" +sage = "#4db35f" +diagnostic = "#5f95ca" +lavender = "#d4b4e6" +mauve = "#e29cb4" +error = "#ed8a7a" +warning = "#e8b866" +border = "#968878" +focus = "#5f8f8f" +link = "#d99555" [username] show_always = true style_user = "bg:prompt_surface0 fg:prompt_text bold" style_root = "bg:prompt_surface0 fg:error bold" -format = "[  $user ]($style)" +format = "[ \uf007 $user ]($style)" +detect_env_vars = ["SSH_CONNECTION", "SSH_CLIENT", "SSH_TTY"] [directory] style = "bg:prompt_surface1 fg:prompt_text bold" -format = "[  $path ]($style)" +format = "[ \uf0F7 $path ]($style)" truncation_length = 2 truncate_to_repo = true home_symbol = "" [git_branch] -symbol = "" +symbol = "\uf418" style = "bg:prompt_accent fg:prompt_bg bold" format = "[ $symbol $branch ]($style)" [git_status] style = "bg:prompt_accent fg:prompt_bg bold" format = "[$all_status$ahead_behind ]($style)" -conflicted = "${count} " -ahead = "⇡${count} " -behind = "⇣${count} " -diverged = "⇕⇡${ahead_count}⇣${behind_count} " +conflicted = "\ue727${count} " +ahead = "\u21E1${count} " +behind = "\u21E3${count} " +diverged = "\u2195\u21E1${ahead_count}\u21E3${behind_count} " untracked = "?${count} " -stashed = "󰏗${count} " +stashed = "\uf0CF${count} " modified = "~${count} " staged = "+${count} " -renamed = "»${count} " -deleted = "✘${count} " +renamed = "\u00BB${count} " +deleted = "\u2718${count} " + +[status] +disabled = false +format = "[$symbol]($style)" +symbol = "\u2717" +style = "bg:error fg:prompt_bg bold" +pipestatus = false + +[battery] +disabled = false +display = [ + {threshold = 20, style = "fg:error bold", symbol = "\uf244 "}, +] + +[kubernetes] +format = '[$symbol$context( \($namespace\))]($style)' +style = "fg:diagnostic bold" +symbol = "\uF3B2 " +disabled = false +detect_env_vars = ["KUBECONFIG", "KUBERNETES_SERVICE_HOST", "KUBERNETES_PORT"] + +[terraform] +format = "[$symbol$workspace]($style)" +style = "fg:lavender bold" +symbol = "\uFD31 " +disabled = false [fill] symbol = " " @@ -85,7 +115,7 @@ symbol = " " [cmd_duration] min_time = 2500 style = "fg:prompt_muted" -format = "[  $duration ]($style)" +format = "[ \uf552 $duration ]($style)" [time] disabled = false @@ -93,38 +123,54 @@ format = "[ $time ]($style)" style = "fg:prompt_muted" [character] -success_symbol = "[❯](bold fg:prompt_accent)" -error_symbol = "[❯](bold fg:error)" -vimcmd_symbol = "[❮](bold fg:sage)" +success_symbol = "[\u276F](bold fg:prompt_accent)" +error_symbol = "[\u276F](bold fg:error)" +vimcmd_symbol = "[\u276E](bold fg:sage)" # Runtime versions - show only when relevant, keep compact [bun] -symbol = "" +symbol = "\uF5EF" style = "fg:prompt_accent bold" format = "[ $symbol $version]($style)" [nodejs] -symbol = "" +symbol = "\uE718" style = "fg:sage bold" format = "[ $symbol $version]($style)" [python] -symbol = "" -style = "fg:diagnostic bold" +symbol = "\uE73C" +style = "fg:diag bold" format = "[ $symbol $version]($style)" [golang] -symbol = "" +symbol = "\uE627" style = "fg:lavender bold" format = "[ $symbol $version]($style)" [rust] -symbol = "" +symbol = "\uE7A8" style = "fg:mauve bold" format = "[ $symbol $version]($style)" +[java] +symbol = "\uE204" +style = "fg:lavender bold" +format = "[ $symbol $version]($style)" + +[container] +format = "[$symbol \uf48B $name]($style)" +style = "fg:warning bold" +symbol = "\uf4E6" + +[custom.ai_session] +command = "cat ~/.cache/dreamcoder/ai-session.state 2>/dev/null || echo ''" +when = """test -f ~/.cache/dreamcoder/ai-session.state""" +format = "[\uf5B5 $output]($style)" +style = "fg:diag bold" + [docker_context] -symbol = "" -style = "fg:diagnostic bold" +symbol = "\uf308" +style = "fg:diag bold" format = "[ $symbol $context]($style)" only_with_files = true diff --git a/Tmux/.config/tmux/tmux-dreamcoder.conf b/Tmux/.config/tmux/tmux-dreamcoder.conf index cf73691..4c7b269 100644 --- a/Tmux/.config/tmux/tmux-dreamcoder.conf +++ b/Tmux/.config/tmux/tmux-dreamcoder.conf @@ -1,5 +1,5 @@ -# Dreamcoder Light — tmux light theme -# Source: tmux source-file ~/.config/tmux/tmux-dreamcoder-light.conf +# Dreamcoder Ember Noir OLED — tmux dark theme +# Source: tmux source-file ~/.config/tmux/tmux-dreamcoder-dark.conf # Default terminal colours (truecolor) set -g default-terminal "tmux-256color" @@ -7,36 +7,36 @@ set -ga terminal-overrides ",*256col*:Tc" set -ga terminal-overrides '*:Ss=\E[%p1%d q:Se=\E[2 q' # Panes -set -g pane-border-style "fg=#c8ad89,bg=default" -set -g pane-active-border-style "fg=#0f6570,bg=default" -set -g display-panes-colour "#824f16" -set -g display-panes-active-colour "#824f16" +set -g pane-border-style "fg=#392e21,bg=default" +set -g pane-active-border-style "fg=#5f8f8f,bg=default" +set -g display-panes-colour "#d99555" +set -g display-panes-active-colour "#d99555" # Status bar -set -g status-style "fg=#17120d,bg=#e6d7c4" -set -g status-left-style "fg=#f3eadc,bg=#824f16" -set -g status-right-style "fg=#352e22,bg=#e6d7c4" +set -g status-style "fg=#e8dfd0,bg=#181512" +set -g status-left-style "fg=#100f0d,bg=#d99555" +set -g status-right-style "fg=#c7b9aa,bg=#181512" -set -g status-left "#[fg=#f3eadc,bg=#824f16,bold]  #S #[fg=#824f16,bg=#e6d7c4,nobold]" -set -g status-right "#[fg=#e6d7c4,bg=#e6d7c4]#[fg=#352e22,bg=#e6d7c4] %H:%M #[fg=#decbb1]#[fg=#352e22,bg=#decbb1] %d-%b-%y " +set -g status-left "#[fg=#100f0d,bg=#d99555,bold]  #S #[fg=#d99555,bg=#181512,nobold]" +set -g status-right "#[fg=#181512,bg=#181512]#[fg=#c7b9aa,bg=#181512] %H:%M #[fg=#2b231b]#[fg=#c7b9aa,bg=#2b231b] %d-%b-%y " # Status position set -g status-position top set -g status-interval 5 # Window tabs -setw -g window-status-style "fg=#352e22,bg=#e6d7c4" -setw -g window-status-current-style "fg=#f3eadc,bg=#824f16,bold" +setw -g window-status-style "fg=#c7b9aa,bg=#181512" +setw -g window-status-current-style "fg=#100f0d,bg=#d99555,bold" setw -g window-status-format " #I:#W " setw -g window-status-current-format " #I:#W " setw -g window-status-separator "" # Message -set -g message-style "fg=#17120d,bg=#fff7ea" -set -g message-command-style "fg=#17120d,bg=#fff7ea" +set -g message-style "fg=#e8dfd0,bg=#201b16" +set -g message-command-style "fg=#e8dfd0,bg=#201b16" # Mode (copy mode) -setw -g mode-style "fg=#f3eadc,bg=#0f6570" +setw -g mode-style "fg=#100f0d,bg=#5f8f8f" # Bell -setw -g window-status-bell-style "fg=#f3eadc,bg=#842f24,bold" +setw -g window-status-bell-style "fg=#100f0d,bg=#ed8a7a,bold" diff --git a/Warp/.config/warp-terminal/settings.toml b/Warp/.config/warp-terminal/settings.toml index a106cbe..a68cb86 100644 --- a/Warp/.config/warp-terminal/settings.toml +++ b/Warp/.config/warp-terminal/settings.toml @@ -30,12 +30,12 @@ zoom_level = 70 override_opacity = 96 [appearance.themes] -theme = { custom = { name = "Dreamcoder Light", path = "Dreamcoder-Light.yaml" } } -system_theme = false selected_system_themes = { dark = "Dreamcoder-Dark", light = "Dreamcoder-Light", } +system_theme = false +theme = { custom = { name = "Dreamcoder Light", path = "Dreamcoder-Light.yaml" } } [appearance.text] font_name = "JetBrainsMono Nerd Font" @@ -68,11 +68,20 @@ telemetry_enabled = true crash_reporting_enabled = true custom_secret_regex_list = [ { name = "IPv4 Address", pattern = '\b((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.?\b){4}\b' }, - { name = "IPv6 Address", pattern = '\b((([0-9A-Fa-f]{1,4}:){1,6}:)|(([0-9A-Fa-f]{1,4}:){7}))([0-9A-Fa-f]{1,4})\b' }, + { + name = "IPv6 Address", + pattern = '\b((([0-9A-Fa-f]{1,4}:){1,6}:)|(([0-9A-Fa-f]{1,4}:){7}))([0-9A-Fa-f]{1,4})\b', + }, { name = "Slack App Token", pattern = '\bxapp-[0-9]+-[A-Za-z0-9_]+-[0-9]+-[a-f0-9]+\b' }, { name = "Phone Number", pattern = '\b(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}\b' }, - { name = "AWS Access ID", pattern = '\b(AKIA|A3T|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{12,}\b' }, - { name = "MAC Address", pattern = '\b((([a-zA-z0-9]{2}[-:]){5}([a-zA-z0-9]{2}))|(([a-zA-z0-9]{2}:){5}([a-zA-z0-9]{2})))\b' }, + { + name = "AWS Access ID", + pattern = '\b(AKIA|A3T|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{12,}\b', + }, + { + name = "MAC Address", + pattern = '\b((([a-zA-z0-9]{2}[-:]){5}([a-zA-z0-9]{2}))|(([a-zA-z0-9]{2}:){5}([a-zA-z0-9]{2})))\b', + }, { name = "Google API Key", pattern = '\bAIza[0-9A-Za-z-_]{35}\b' }, { name = "Google OAuth ID", pattern = '\b[0-9]+-[0-9A-Za-z_]{32}\.apps\.googleusercontent\.com\b' }, { name = "GitHub Classic PAT", pattern = '\bghp_[A-Za-z0-9_]{36}\b' }, diff --git a/Warp/.local/share/warp-terminal/themes/Dreamcoder-Light.yaml b/Warp/.local/share/warp-terminal/themes/Dreamcoder-Light.yaml index 2883718..22c7f47 100644 --- a/Warp/.local/share/warp-terminal/themes/Dreamcoder-Light.yaml +++ b/Warp/.local/share/warp-terminal/themes/Dreamcoder-Light.yaml @@ -1,25 +1,25 @@ -name: Dreamcoder Light -accent: '#824f16' -cursor: '#824f16' -background: '#f3eadc' -foreground: '#17120d' -details: lighter +name: Dreamcoder Ember Noir OLED +accent: '#d99555' +cursor: '#d99555' +background: '#100f0d' +foreground: '#e8dfd0' +details: darker terminal_colors: normal: - black: '#5e5c57' - red: '#842f24' - green: '#3d723d' - yellow: '#824f16' - blue: '#0d4a68' - magenta: '#7d3e64' - cyan: '#57478b' - white: '#352e22' + black: '#84827e' + red: '#ed8a7a' + green: '#4db35f' + yellow: '#d99555' + blue: '#5f95ca' + magenta: '#e29cb4' + cyan: '#d4b4e6' + white: '#c7b9aa' bright: - black: '#554638' - red: '#702a20' - green: '#366134' - yellow: '#654300' - blue: '#0f4058' - magenta: '#4b3d74' - cyan: '#10565e' - white: '#17120d' + black: '#938274' + red: '#ec9989' + green: '#69bb73' + yellow: '#e8b866' + blue: '#78a2cb' + magenta: '#d8bce2' + cyan: '#789d9b' + white: '#e8dfd0' diff --git a/Zellij/.config/zellij/config.kdl b/Zellij/.config/zellij/config.kdl index 3679a68..eae83bb 100644 --- a/Zellij/.config/zellij/config.kdl +++ b/Zellij/.config/zellij/config.kdl @@ -36,4 +36,4 @@ plugins { } // Theme -theme "dreamcoder-light" \ No newline at end of file +theme "dreamcoder-dark" \ No newline at end of file diff --git a/scripts/dreamcoder.sh b/scripts/dreamcoder.sh index d2a590f..fd2f1cf 100755 --- a/scripts/dreamcoder.sh +++ b/scripts/dreamcoder.sh @@ -9,52 +9,52 @@ APPLY_SCRIPT="${DOTS_DIR}/scripts/apply-theme-mode.sh" DOCTOR_SCRIPT="${DOTS_DIR}/scripts/doctor.sh" case "${1:-}" in - dark|light) - export DREAMCODER_THEME_MODE="${1}" - if [[ -f "${APPLY_SCRIPT}" ]]; then - bash "${APPLY_SCRIPT}" "${1}" - else - echo "Error: ${APPLY_SCRIPT} not found" >&2 - exit 1 - fi - ;; - status) - echo "=== Dreamcoder OS Status ===" - echo "Theme mode: ${DREAMCODER_THEME_MODE:-dark}" - echo "Dotfiles dir: ${DOTS_DIR}" - echo "Git branch: $(cd "${DOTS_DIR}" && git branch --show-current 2>/dev/null || echo 'N/A')" - echo "Last commit: $(cd "${DOTS_DIR}" && git log -1 --oneline 2>/dev/null || echo 'N/A')" - echo "" - if command -v systemctl &>/dev/null; then - echo "Timer: $(systemctl --user is-active dreamcoder-theme-auto.timer 2>/dev/null || echo 'inactive')" - fi - if [[ -f "${HOME}/.cache/dreamcoder/ai-session.state" ]]; then - echo "AI session: $(cat "${HOME}/.cache/dreamcoder/ai-session.state")" - else - echo "AI session: inactive" - fi - ;; - doctor) - if [[ -f "${DOCTOR_SCRIPT}" ]]; then - bash "${DOCTOR_SCRIPT}" - else - echo "Error: ${DOCTOR_SCRIPT} not found" >&2 - exit 1 - fi - ;; - help|--help|-h) - echo "Usage: dreamcoder " - echo "" - echo "Commands:" - echo " dark Switch to Ember Noir OLED (dark mode)" - echo " light Switch to Dreamcoder Light" - echo " status Show system status overview" - echo " doctor Run health checks on all components" - echo " help Show this help" - exit 0 - ;; - *) - echo "Usage: dreamcoder {dark|light|status|doctor|help}" >&2 - exit 1 - ;; +dark | light) + export DREAMCODER_THEME_MODE="${1}" + if [[ -f "${APPLY_SCRIPT}" ]]; then + bash "${APPLY_SCRIPT}" "${1}" + else + echo "Error: ${APPLY_SCRIPT} not found" >&2 + exit 1 + fi + ;; +status) + echo "=== Dreamcoder OS Status ===" + echo "Theme mode: ${DREAMCODER_THEME_MODE:-dark}" + echo "Dotfiles dir: ${DOTS_DIR}" + echo "Git branch: $(cd "${DOTS_DIR}" && git branch --show-current 2>/dev/null || echo 'N/A')" + echo "Last commit: $(cd "${DOTS_DIR}" && git log -1 --oneline 2>/dev/null || echo 'N/A')" + echo "" + if command -v systemctl &>/dev/null; then + echo "Timer: $(systemctl --user is-active dreamcoder-theme-auto.timer 2>/dev/null || echo 'inactive')" + fi + if [[ -f "${HOME}/.cache/dreamcoder/ai-session.state" ]]; then + echo "AI session: $(cat "${HOME}/.cache/dreamcoder/ai-session.state")" + else + echo "AI session: inactive" + fi + ;; +doctor) + if [[ -f "${DOCTOR_SCRIPT}" ]]; then + bash "${DOCTOR_SCRIPT}" + else + echo "Error: ${DOCTOR_SCRIPT} not found" >&2 + exit 1 + fi + ;; +help | --help | -h) + echo "Usage: dreamcoder " + echo "" + echo "Commands:" + echo " dark Switch to Ember Noir OLED (dark mode)" + echo " light Switch to Dreamcoder Light" + echo " status Show system status overview" + echo " doctor Run health checks on all components" + echo " help Show this help" + exit 0 + ;; +*) + echo "Usage: dreamcoder {dark|light|status|doctor|help}" >&2 + exit 1 + ;; esac diff --git a/src/dreamcoder_theme/palette_tokens.py b/src/dreamcoder_theme/palette_tokens.py index 1963df7..83a4816 100644 --- a/src/dreamcoder_theme/palette_tokens.py +++ b/src/dreamcoder_theme/palette_tokens.py @@ -60,7 +60,7 @@ "hover": "#2b231b", "pressed": "#392e21", "overlay": "rgba(16, 15, 13, 0.52)", - "scrim": "rgba(0, 0, 0, 0.58)", + "scrim": "rgba(0, 0, 0, 0.58)" }, "light": { "name": "Dreamcoder Light", @@ -115,7 +115,7 @@ "hover": "#decbb1", "pressed": "#c8ad89", "overlay": "rgba(243, 234, 220, 0.40)", - "scrim": "rgba(26, 18, 12, 0.42)", + "scrim": "rgba(26, 18, 12, 0.42)" }, "dusk": { "name": "Dreamcoder Dusk", @@ -170,8 +170,8 @@ "hover": "#d8cbb8", "pressed": "#c6b6a0", "overlay": "rgba(235, 228, 214, 0.40)", - "scrim": "rgba(26, 18, 12, 0.42)", - }, + "scrim": "rgba(26, 18, 12, 0.42)" + } } ANSI_KEY_NAMES = [ @@ -190,5 +190,5 @@ "diagnostic_bright", "lavender_bright", "focus_bright", - "text", + "text" ] diff --git a/themes/dreamcoder/bat-dreamcoder.sh b/themes/dreamcoder/bat-dreamcoder.sh index 8015efb..d8d07c7 100644 --- a/themes/dreamcoder/bat-dreamcoder.sh +++ b/themes/dreamcoder/bat-dreamcoder.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -euo pipefail -# Dreamcoder Light — Bat theme; run 'bat cache --build' after installing the tmTheme. -export BAT_THEME="Dreamcoder-Light" +# Dreamcoder Ember Noir OLED — Bat theme; run 'bat cache --build' after installing the tmTheme. +export BAT_THEME="Dreamcoder-Dark" export BAT_STYLE="auto,changes,header,grid" export BAT_PAGER="less -RF" export BAT_TABS="4" diff --git a/themes/dreamcoder/btop-dreamcoder.theme b/themes/dreamcoder/btop-dreamcoder.theme index 10a484f..d53414e 100644 --- a/themes/dreamcoder/btop-dreamcoder.theme +++ b/themes/dreamcoder/btop-dreamcoder.theme @@ -1,64 +1,64 @@ # ======================================================== -# Dreamcoder Light — Btop theme +# Dreamcoder Ember Noir OLED — Btop theme # ======================================================== # Place in ~/.config/btop/themes/ and select from Btop UI. -theme[main_bg]="#f3eadc" -theme[main_fg]="#17120d" -theme[title]="#824f16" -theme[hi_fg]="#824f16" -theme[selected_bg]="#decbb1" -theme[selected_fg]="#17120d" -theme[inactive_fg]="#352e22" -theme[graph_line]="#8a7358" -theme[proc_misc]="#352e22" -theme[cpu_core]="#0d4a68" -theme[mem_free]="#3d723d" -theme[mem_used]="#a7471c" -theme[mem_cached]="#0d4a68" -theme[user_bg]="#fff7ea" -theme[user_fg]="#17120d" -theme[temp]="#654300" -theme[disk]="#0d4a68" -theme[process]="#57478b" -theme[process_selected]="#824f16" -theme[core_bar]="#824f16" -theme[temp_bar]="#654300" -theme[swap]="#7d3e64" -theme[div_line]="#8a7358" -theme[process_bg]="#fff7ea" -theme[process_fg]="#17120d" -theme[bad]="#842f24" -theme[good]="#3d723d" -theme[widget_bg]="#fff7ea" -theme[widget_fg]="#17120d" -theme[widget_border]="#8a7358" -theme[widget_selected]="#824f16" -theme[graph_bg]="#fff7ea" -theme[graph_fg]="#17120d" -theme[graph_high]="#a7471c" -theme[graph_low]="#0d4a68" -theme[graph_med]="#824f16" -theme[proc_bg]="#fff7ea" -theme[proc_fg]="#17120d" -theme[process_border]="#8a7358" -theme[widget_title]="#824f16" -theme[box_border]="#8a7358" -theme[box_bg]="#fff7ea" -theme[box_fg]="#17120d" -theme[box_selected]="#824f16" -theme[os_bg]="#fff7ea" -theme[os_fg]="#17120d" -theme[clock_bg]="#fff7ea" -theme[clock_fg]="#824f16" -theme[bat_high]="#3d723d" -theme[bat_med]="#654300" -theme[bat_low]="#842f24" -theme[sensor_bg]="#fff7ea" -theme[sensor_fg]="#17120d" -theme[sensor_bar_bg]="#decbb1" -theme[sensor_bar_fg]="#824f16" -theme[net_bg]="#fff7ea" -theme[net_fg]="#17120d" -theme[net_download]="#3d723d" -theme[net_upload]="#a7471c" +theme[main_bg]="#100f0d" +theme[main_fg]="#e8dfd0" +theme[title]="#d99555" +theme[hi_fg]="#d99555" +theme[selected_bg]="#2b231b" +theme[selected_fg]="#e8dfd0" +theme[inactive_fg]="#c7b9aa" +theme[graph_line]="#756052" +theme[proc_misc]="#c7b9aa" +theme[cpu_core]="#5f95ca" +theme[mem_free]="#4db35f" +theme[mem_used]="#c96a45" +theme[mem_cached]="#5f95ca" +theme[user_bg]="#201b16" +theme[user_fg]="#e8dfd0" +theme[temp]="#e8b866" +theme[disk]="#5f95ca" +theme[process]="#d4b4e6" +theme[process_selected]="#d99555" +theme[core_bar]="#d99555" +theme[temp_bar]="#e8b866" +theme[swap]="#e29cb4" +theme[div_line]="#756052" +theme[process_bg]="#201b16" +theme[process_fg]="#e8dfd0" +theme[bad]="#ed8a7a" +theme[good]="#4db35f" +theme[widget_bg]="#201b16" +theme[widget_fg]="#e8dfd0" +theme[widget_border]="#756052" +theme[widget_selected]="#d99555" +theme[graph_bg]="#201b16" +theme[graph_fg]="#e8dfd0" +theme[graph_high]="#c96a45" +theme[graph_low]="#5f95ca" +theme[graph_med]="#d99555" +theme[proc_bg]="#201b16" +theme[proc_fg]="#e8dfd0" +theme[process_border]="#756052" +theme[widget_title]="#d99555" +theme[box_border]="#756052" +theme[box_bg]="#201b16" +theme[box_fg]="#e8dfd0" +theme[box_selected]="#d99555" +theme[os_bg]="#201b16" +theme[os_fg]="#e8dfd0" +theme[clock_bg]="#201b16" +theme[clock_fg]="#d99555" +theme[bat_high]="#4db35f" +theme[bat_med]="#e8b866" +theme[bat_low]="#ed8a7a" +theme[sensor_bg]="#201b16" +theme[sensor_fg]="#e8dfd0" +theme[sensor_bar_bg]="#2b231b" +theme[sensor_bar_fg]="#d99555" +theme[net_bg]="#201b16" +theme[net_fg]="#e8dfd0" +theme[net_download]="#4db35f" +theme[net_upload]="#c96a45" diff --git a/themes/dreamcoder/cava-dreamcoder.config b/themes/dreamcoder/cava-dreamcoder.config index 705b74c..b5ec1e6 100644 --- a/themes/dreamcoder/cava-dreamcoder.config +++ b/themes/dreamcoder/cava-dreamcoder.config @@ -1,26 +1,26 @@ # ======================================================== -# Dreamcoder Light — Cava theme +# Dreamcoder Ember Noir OLED — Cava theme # ======================================================== # Include from ~/.config/cava/config or place in # ~/.config/cava/dreamcoder-cava.config. [color] # Background -background = '#f3eadc' +background = '#100f0d' # Gradient mode for smooth transitions gradient = 1 gradient_count = 8 # Gradient colors (low to high frequency) — raw palette, muted at lower end -gradient_color_1 = '#97aaae' -gradient_color_2 = '#698a96' -gradient_color_3 = '#ba9c79' -gradient_color_4 = '#a47e51' -gradient_color_5 = '#824f16' -gradient_color_6 = '#a7471c' -gradient_color_7 = '#a5675b' -gradient_color_8 = '#842f24' +gradient_color_1 = '#304559' +gradient_color_2 = '#3f5f7e' +gradient_color_3 = '#745231' +gradient_color_4 = '#9d6d3f' +gradient_color_5 = '#d99555' +gradient_color_6 = '#c96a45' +gradient_color_7 = '#ab6559' +gradient_color_8 = '#ed8a7a' # Mono color (used when gradient = 0) -foreground = '#824f16' +foreground = '#d99555' diff --git a/themes/dreamcoder/delta-dreamcoder.gitconfig b/themes/dreamcoder/delta-dreamcoder.gitconfig index edf323f..84dd8cf 100644 --- a/themes/dreamcoder/delta-dreamcoder.gitconfig +++ b/themes/dreamcoder/delta-dreamcoder.gitconfig @@ -1,5 +1,5 @@ # ======================================================== -# Dreamcoder Light — Git Delta theme +# Dreamcoder Ember Noir OLED — Git Delta theme # ======================================================== # Include from ~/.config/git/config: # [include] @@ -7,39 +7,39 @@ [delta] # Syntax highlighting theme for diff content - syntax-theme = Dreamcoder-Light + syntax-theme = Dreamcoder-Dark # Line colors - plus-color = "#d8d8c4" - minus-color = "#e2cec0" - plus-emph-color = "#3d723d" - minus-emph-color = "#842f24" + plus-color = "#3e7240" + minus-color = "#965c4f" + plus-emph-color = "#4db35f" + minus-emph-color = "#ed8a7a" # Diff UI - file-style = "#824f16" + file-style = "#d99555" file-decoration-style = "bold yellow box ul" hunk-header-style = "file line-number syntax" hunk-header-decoration-style = "yellow box" - hunk-header-file-style = "#824f16" - hunk-header-line-number-style = "#352e22" - hunk-header-color = "#d6cec0" + hunk-header-file-style = "#d99555" + hunk-header-line-number-style = "#c7b9aa" + hunk-header-color = "#908478" # Commit decorations - commit-style = "#824f16 bold" + commit-style = "#d99555 bold" commit-decoration-style = "bold yellow box ul" # Line numbers line-numbers = true - line-numbers-left-style = "#352e22" - line-numbers-right-style = "#352e22" - line-numbers-minus-style = "#842f24" - line-numbers-plus-style = "#3d723d" + line-numbers-left-style = "#c7b9aa" + line-numbers-right-style = "#c7b9aa" + line-numbers-minus-style = "#ed8a7a" + line-numbers-plus-style = "#4db35f" # Side-by-side side-by-side = true # Whitespace highlighting - whitespace-error-style = "#654300" + whitespace-error-style = "#e8b866" # Navigation navigate = true diff --git a/themes/dreamcoder/dunst-dreamcoder.conf b/themes/dreamcoder/dunst-dreamcoder.conf index 39b4978..8e3d260 100644 --- a/themes/dreamcoder/dunst-dreamcoder.conf +++ b/themes/dreamcoder/dunst-dreamcoder.conf @@ -1,23 +1,23 @@ # ======================================================== -# Dreamcoder Light — Dunst theme +# Dreamcoder Ember Noir OLED — Dunst theme # ======================================================== # Include from dunstrc: # [include] dreamcoder-dunst.conf [urgency_low] - background = "#f3eadc" - foreground = "#17120d" - highlight = "#824f16" - frame_color = "#8a7358" + background = "#100f0d" + foreground = "#e8dfd0" + highlight = "#d99555" + frame_color = "#756052" [urgency_normal] - background = "#fff7ea" - foreground = "#17120d" - highlight = "#824f16" - frame_color = "#66513b" + background = "#201b16" + foreground = "#e8dfd0" + highlight = "#d99555" + frame_color = "#968878" [urgency_critical] - background = "#d2b2a5" - foreground = "#17120d" - highlight = "#842f24" - frame_color = "#842f24" + background = "#52342e" + foreground = "#e8dfd0" + highlight = "#ed8a7a" + frame_color = "#ed8a7a" diff --git a/themes/dreamcoder/firefox-dreamcoder.css b/themes/dreamcoder/firefox-dreamcoder.css index 0a7bfae..bc08df1 100644 --- a/themes/dreamcoder/firefox-dreamcoder.css +++ b/themes/dreamcoder/firefox-dreamcoder.css @@ -1,27 +1,27 @@ /* ======================================================== - Dreamcoder Light — Firefox userChrome.css + Dreamcoder Ember Noir OLED — Firefox userChrome.css ======================================================== Place in ~/.mozilla/firefox/*.default-release/chrome/userChrome.css Requires toolkit.legacyUserProfileCustomizations.stylesheets = true in about:config. */ :root { - --dreamcoder-bg: #f3eadc; - --dreamcoder-surface: #fff7ea; - --dreamcoder-surface-1: #decbb1; - --dreamcoder-text: #17120d; - --dreamcoder-text-dim: #352e22; - --dreamcoder-accent: #824f16; - --dreamcoder-accent-2: #a7471c; - --dreamcoder-border: #8a7358; - --dreamcoder-border-ui: #66513b; - --dreamcoder-error: #842f24; - --dreamcoder-warning: #654300; - --dreamcoder-sage: #3d723d; - --dreamcoder-input-bg: #decbb1; - --dreamcoder-toolbar-bg: #e6d7c4; - --dreamcoder-hover: #e2d3be; - --dreamcoder-active: #d7c3aa; + --dreamcoder-bg: #100f0d; + --dreamcoder-surface: #201b16; + --dreamcoder-surface-1: #2b231b; + --dreamcoder-text: #e8dfd0; + --dreamcoder-text-dim: #c7b9aa; + --dreamcoder-accent: #d99555; + --dreamcoder-accent-2: #c96a45; + --dreamcoder-border: #756052; + --dreamcoder-border-ui: #968878; + --dreamcoder-error: #ed8a7a; + --dreamcoder-warning: #e8b866; + --dreamcoder-sage: #4db35f; + --dreamcoder-input-bg: #201b16; + --dreamcoder-toolbar-bg: #201b16; + --dreamcoder-hover: #2e2318; + --dreamcoder-active: #42301f; } /* Main window */ diff --git a/themes/dreamcoder/fzf-dreamcoder.sh b/themes/dreamcoder/fzf-dreamcoder.sh index 9ab4458..e923fa4 100644 --- a/themes/dreamcoder/fzf-dreamcoder.sh +++ b/themes/dreamcoder/fzf-dreamcoder.sh @@ -1,4 +1,4 @@ #!/usr/bin/env bash set -euo pipefail -# Dreamcoder Light — fzf -export FZF_DEFAULT_OPTS="${FZF_DEFAULT_OPTS:-} --color=bg:#f3eadc,bg+:#fff7ea,fg:#17120d,fg+:#17120d,hl:#824f16,hl+:#824f16,info:#0d4a68,marker:#3d723d,prompt:#824f16,spinner:#57478b,pointer:#a7471c,header:#352e22,border:#8a7358,label:#352e22,query:#17120d,gutter:#f3eadc,scrollbar:#8a7358,separator:#8a7358,preview-bg:#f3eadc,preview-border:#8a7358" +# Dreamcoder Ember Noir OLED — fzf +export FZF_DEFAULT_OPTS="${FZF_DEFAULT_OPTS:-} --color=bg:#100f0d,bg+:#2b231b,fg:#e8dfd0,fg+:#e8dfd0,hl:#d99555,hl+:#d99555,info:#5f95ca,marker:#4db35f,prompt:#d99555,spinner:#d4b4e6,pointer:#c96a45,header:#c7b9aa,border:#756052,label:#c7b9aa,query:#e8dfd0,gutter:#2b231b,scrollbar:#756052,separator:#756052,preview-bg:#2b231b,preview-border:#756052" diff --git a/themes/dreamcoder/hyprland.conf b/themes/dreamcoder/hyprland.conf index 245bb23..e4c7ae5 100644 --- a/themes/dreamcoder/hyprland.conf +++ b/themes/dreamcoder/hyprland.conf @@ -2,10 +2,10 @@ # Import after ML4W/Gentleman defaults; this changes colors only. general { - col.active_border = rgba(824f16ff) rgba(0d4a68ff) 45deg - col.inactive_border = rgba(13811588ed) + col.active_border = rgba(d99555ff) rgba(5f95caff) 45deg + col.inactive_border = rgba(117968280) } misc { - background_color = rgba(f3eadcff) + background_color = rgba(100f0dff) } diff --git a/themes/dreamcoder/ls-colors-dreamcoder.sh b/themes/dreamcoder/ls-colors-dreamcoder.sh index b95e00e..3d827f4 100644 --- a/themes/dreamcoder/ls-colors-dreamcoder.sh +++ b/themes/dreamcoder/ls-colors-dreamcoder.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash set -euo pipefail -# Dreamcoder Light — LS_COLORS / eza -export LS_COLORS='di=38;2;130;79;22:ex=38;2;167;71;28:ln=38;2;13;74;104:or=48;2;101;67;0;38;2;23;18;13:so=38;2;61;114;61:pi=38;2;101;67;0:bd=38;2;132;47;36:cd=38;2;132;47;36:su=48;2;243;234;220;38;2;167;71;28:sg=48;2;243;234;220;38;2;167;71;28:tw=38;2;130;79;22;48;2;255;247;234:ow=38;2;130;79;22;48;2;255;247;234:st=38;2;130;79;22;48;2;222;203;177:*.tar=38;2;87;71;139:*.tgz=38;2;87;71;139:*.gz=38;2;87;71;139:*.bz2=38;2;87;71;139:*.xz=38;2;87;71;139:*.zst=38;2;87;71;139:*.zip=38;2;87;71;139:*.7z=38;2;87;71;139:*.rar=38;2;87;71;139:*.iso=38;2;87;71;139:*.dmg=38;2;87;71;139:*.jpg=38;2;125;62;100:*.jpeg=38;2;125;62;100:*.png=38;2;125;62;100:*.gif=38;2;125;62;100:*.bmp=38;2;125;62;100:*.svg=38;2;125;62;100:*.webp=38;2;125;62;100:*.ico=38;2;125;62;100:*.mp3=38;2;125;62;100:*.wav=38;2;125;62;100:*.flac=38;2;125;62;100:*.ogg=38;2;125;62;100:*.m4a=38;2;125;62;100:*.mp4=38;2;125;62;100:*.mkv=38;2;125;62;100:*.webm=38;2;125;62;100:*.mov=38;2;125;62;100:*.pdf=38;2;53;46;34:*.doc=38;2;53;46;34:*.docx=38;2;53;46;34:*.odt=38;2;53;46;34:*.xls=38;2;53;46;34:*.xlsx=38;2;53;46;34:*.ppt=38;2;53;46;34:*.pptx=38;2;53;46;34:*.txt=38;2;53;46;34:*.cfg=38;2;53;46;34:*.conf=38;2;53;46;34:*.json=38;2;53;46;34:*.yaml=38;2;53;46;34:*.yml=38;2;53;46;34:*.toml=38;2;53;46;34:*.xml=38;2;53;46;34:*.css=38;2;53;46;34:*.html=38;2;53;46;34:*.c=38;2;53;46;34:*.h=38;2;53;46;34:*.cpp=38;2;53;46;34:*.hpp=38;2;53;46;34:*.swp=38;2;53;46;34:*.swo=38;2;53;46;34:*.bak=38;2;53;46;34:*.orig=38;2;53;46;34:*.sh=38;2;167;71;28:*.bash=38;2;167;71;28:*.zsh=38;2;167;71;28:*.fish=38;2;167;71;28:*.py=38;2;167;71;28:*.rb=38;2;167;71;28:*.rs=38;2;167;71;28:*.go=38;2;167;71;28:*.ts=38;2;167;71;28:*.js=38;2;167;71;28:*.md=#824f16' -export EZA_COLORS='di=38;2;130;79;22:ex=38;2;167;71;28:ln=38;2;13;74;104:so=38;2;61;114;61:pi=38;2;101;67;0:bd=38;2;132;47;36:cd=38;2;132;47;36:uw=38;2;101;67;0:ux=38;2;132;47;36:gwx=38;2;101;67;0:*.md=#824f16' +# Dreamcoder Ember Noir OLED — LS_COLORS / eza +export LS_COLORS='di=38;2;217;149;85:ex=38;2;201;106;69:ln=38;2;95;149;202:or=48;2;232;184;102;38;2;232;223;208:so=38;2;77;179;95:pi=38;2;232;184;102:bd=38;2;237;138;122:cd=38;2;237;138;122:su=48;2;16;15;13;38;2;201;106;69:sg=48;2;16;15;13;38;2;201;106;69:tw=38;2;217;149;85;48;2;32;27;22:ow=38;2;217;149;85;48;2;32;27;22:st=38;2;217;149;85;48;2;43;35;27:*.tar=38;2;212;180;230:*.tgz=38;2;212;180;230:*.gz=38;2;212;180;230:*.bz2=38;2;212;180;230:*.xz=38;2;212;180;230:*.zst=38;2;212;180;230:*.zip=38;2;212;180;230:*.7z=38;2;212;180;230:*.rar=38;2;212;180;230:*.iso=38;2;212;180;230:*.dmg=38;2;212;180;230:*.jpg=38;2;226;156;180:*.jpeg=38;2;226;156;180:*.png=38;2;226;156;180:*.gif=38;2;226;156;180:*.bmp=38;2;226;156;180:*.svg=38;2;226;156;180:*.webp=38;2;226;156;180:*.ico=38;2;226;156;180:*.mp3=38;2;226;156;180:*.wav=38;2;226;156;180:*.flac=38;2;226;156;180:*.ogg=38;2;226;156;180:*.m4a=38;2;226;156;180:*.mp4=38;2;226;156;180:*.mkv=38;2;226;156;180:*.webm=38;2;226;156;180:*.mov=38;2;226;156;180:*.pdf=38;2;199;185;170:*.doc=38;2;199;185;170:*.docx=38;2;199;185;170:*.odt=38;2;199;185;170:*.xls=38;2;199;185;170:*.xlsx=38;2;199;185;170:*.ppt=38;2;199;185;170:*.pptx=38;2;199;185;170:*.txt=38;2;199;185;170:*.cfg=38;2;199;185;170:*.conf=38;2;199;185;170:*.json=38;2;199;185;170:*.yaml=38;2;199;185;170:*.yml=38;2;199;185;170:*.toml=38;2;199;185;170:*.xml=38;2;199;185;170:*.css=38;2;199;185;170:*.html=38;2;199;185;170:*.c=38;2;199;185;170:*.h=38;2;199;185;170:*.cpp=38;2;199;185;170:*.hpp=38;2;199;185;170:*.swp=38;2;199;185;170:*.swo=38;2;199;185;170:*.bak=38;2;199;185;170:*.orig=38;2;199;185;170:*.sh=38;2;201;106;69:*.bash=38;2;201;106;69:*.zsh=38;2;201;106;69:*.fish=38;2;201;106;69:*.py=38;2;201;106;69:*.rb=38;2;201;106;69:*.rs=38;2;201;106;69:*.go=38;2;201;106;69:*.ts=38;2;201;106;69:*.js=38;2;201;106;69:*.md=#d99555' +export EZA_COLORS='di=38;2;217;149;85:ex=38;2;201;106;69:ln=38;2;95;149;202:so=38;2;77;179;95:pi=38;2;232;184;102:bd=38;2;237;138;122:cd=38;2;237;138;122:uw=38;2;232;184;102:ux=38;2;237;138;122:gwx=38;2;232;184;102:*.md=#d99555' diff --git a/themes/dreamcoder/obsidian-dreamcoder.css b/themes/dreamcoder/obsidian-dreamcoder.css index 60fb864..c81c608 100644 --- a/themes/dreamcoder/obsidian-dreamcoder.css +++ b/themes/dreamcoder/obsidian-dreamcoder.css @@ -1,91 +1,91 @@ /* ======================================================== - Dreamcoder Light — Obsidian CSS snippet + Dreamcoder Ember Noir OLED — Obsidian CSS snippet ======================================================== Place in your vault's .obsidian/snippets/ folder. Enable in Settings → Appearance → CSS snippets. */ -.theme-light { +.theme-dark { /* Base — raw palette colors for backgrounds and surfaces */ - --background-primary: #f3eadc; - --background-primary-alt: #fff7ea; - --background-secondary: #fff7ea; - --background-secondary-alt: #decbb1; - --background-modifier-border: #8a7358; - --background-modifier-border-hover: #66513b; - --background-modifier-form-field: #fff7ea; - --background-modifier-success: #c6ccb4; - --background-modifier-error: #d7bbae; - --background-modifier-message: #decbb1; + --background-primary: #100f0d; + --background-primary-alt: #201b16; + --background-secondary: #201b16; + --background-secondary-alt: #2b231b; + --background-modifier-border: #756052; + --background-modifier-border-hover: #968878; + --background-modifier-form-field: #201b16; + --background-modifier-success: #1f3822; + --background-modifier-error: #472e28; + --background-modifier-message: #2b231b; /* Text — guarded against background for accessibility */ - --text-normal: #17120d; - --text-muted: #352e22; - --text-faint: #554638; - --text-accent: #824f16; - --text-accent-hover: #a7471c; - --text-error: #842f24; - --text-warning: #654300; - --text-success: #3d723d; - --text-selection: #decbb1; - --text-on-accent: #fff7ea; + --text-normal: #e8dfd0; + --text-muted: #c7b9aa; + --text-faint: #938274; + --text-accent: #d99555; + --text-accent-hover: #c96a45; + --text-error: #ed8a7a; + --text-warning: #e8b866; + --text-success: #4db35f; + --text-selection: #2b231b; + --text-on-accent: #100f0d; /* Interactive */ - --interactive-normal: #decbb1; - --interactive-hover: #decbb1; - --interactive-accent: #824f16; - --interactive-accent-hover: #a7471c; - --interactive-success: #3d723d; + --interactive-normal: #2b231b; + --interactive-hover: #2b231b; + --interactive-accent: #d99555; + --interactive-accent-hover: #c96a45; + --interactive-success: #4db35f; /* Scrollbar */ --scrollbar-bg: transparent; - --scrollbar-thumb-bg: #8a7358; - --scrollbar-active-thumb-bg: #66513b; + --scrollbar-thumb-bg: #756052; + --scrollbar-active-thumb-bg: #968878; /* Code — syntax highlighting colors */ - --code-normal: #17120d; - --code-comment: #725e4c; - --code-punctuation: #352e22; - --code-keyword: #824f16; - --code-operator: #a7471c; - --code-function: #a7471c; - --code-string: #3d723d; - --code-number: #7d3e64; - --code-tag: #824f16; - --code-important: #842f24; - --code-background: #fff7ea; + --code-normal: #e8dfd0; + --code-comment: #b8a99a; + --code-punctuation: #c7b9aa; + --code-keyword: #d99555; + --code-operator: #c96a45; + --code-function: #c96a45; + --code-string: #4db35f; + --code-number: #e29cb4; + --code-tag: #d99555; + --code-important: #ed8a7a; + --code-background: #201b16; /* Heading */ - --h1-color: #100c07; - --h2-color: #100c07; - --h3-color: #a7471c; - --h4-color: #0d4a68; - --h5-color: #352e22; - --h6-color: #554638; + --h1-color: #f4ecdd; + --h2-color: #f4ecdd; + --h3-color: #c96a45; + --h4-color: #5f95ca; + --h5-color: #c7b9aa; + --h6-color: #938274; /* Link */ - --link-color: #824f16; - --link-color-hover: #a7471c; - --link-external-color: #0d4a68; - --link-external-color-hover: #a7471c; + --link-color: #d99555; + --link-color-hover: #c96a45; + --link-external-color: #5f95ca; + --link-external-color-hover: #c96a45; /* Checkbox */ - --checkbox-color: #824f16; - --checkbox-color-hover: #a7471c; - --checkbox-border-color: #8a7358; - --checkbox-mark-color: #f3eadc; + --checkbox-color: #d99555; + --checkbox-color-hover: #c96a45; + --checkbox-border-color: #756052; + --checkbox-mark-color: #100f0d; /* Table */ - --table-header-background: #decbb1; - --table-header-background-hover: #c8ad89; - --table-row-background-hover: #fff7ea; - --table-border-color: #8a7358; + --table-header-background: #2b231b; + --table-header-background-hover: #392e21; + --table-row-background-hover: #201b16; + --table-border-color: #756052; /* Graph */ - --graph-line: #8a7358; - --graph-node: #352e22; - --graph-node-focused: #824f16; - --graph-node-tag: #0d4a68; - --graph-node-attachment: #3d723d; + --graph-line: #756052; + --graph-node: #c7b9aa; + --graph-node-focused: #d99555; + --graph-node-tag: #5f95ca; + --graph-node-attachment: #4db35f; } /* Headings */ @@ -98,46 +98,46 @@ /* Tags */ .tag { - background-color: #e2d3be; - color: #824f16; + background-color: #2e2318; + color: #d99555; border-radius: 4px; padding: 0 6px; } /* Blockquotes */ blockquote { - border-color: #824f16 !important; + border-color: #d99555 !important; } /* Search highlights */ .search-result-file-matched-text, .is-selected .search-result-file-matched-text, mark { - background-color: #dccbb4 !important; - color: #17120d !important; + background-color: #382a1b !important; + color: #e8dfd0 !important; } /* Active line in edit mode */ .cm-active { - background-color: #fff7ea !important; + background-color: #201b16 !important; } /* Selection */ ::selection { - background-color: #e7d9c4 !important; + background-color: #1f1a15 !important; } /* Tooltip */ .tooltip { - background-color: #decbb1 !important; - color: #17120d !important; + background-color: #2b231b !important; + color: #e8dfd0 !important; } /* Menu */ .menu { - background-color: #fff7ea !important; + background-color: #201b16 !important; } .menu-item:hover { - background-color: #decbb1 !important; + background-color: #2b231b !important; } diff --git a/themes/dreamcoder/rofi.rasi b/themes/dreamcoder/rofi.rasi index f6f2b9f..5fe7ef7 100644 --- a/themes/dreamcoder/rofi.rasi +++ b/themes/dreamcoder/rofi.rasi @@ -1,15 +1,15 @@ /* Dreamcoder color layer for Rofi. */ * { - background: rgba(243, 234, 220, 0.96); - background-alt: #fff7ea; - foreground: #17120d; - muted: #352e22; - selected: rgba(130, 79, 22, 0.34); - active: #824f16; - border-ui: #66513b; - focus: #0f6570; - urgent: #842f24; - border-color: #66513b; + background: rgba(16, 15, 13, 0.78); + background-alt: #201b16; + foreground: #e8dfd0; + muted: #c7b9aa; + selected: rgba(217, 149, 85, 0.24); + active: #d99555; + border-ui: #968878; + focus: #5f8f8f; + urgent: #ed8a7a; + border-color: #968878; } window { diff --git a/themes/dreamcoder/waybar.css b/themes/dreamcoder/waybar.css index d8a6124..d8dd094 100644 --- a/themes/dreamcoder/waybar.css +++ b/themes/dreamcoder/waybar.css @@ -1,29 +1,29 @@ /* Dreamcoder color layer for Waybar. */ -@define-color bg #f3eadc; -@define-color bg-soft #e6d7c4; -@define-color surface #fff7ea; -@define-color surface-2 #c8ad89; -@define-color surface-3 #b89d7a; -@define-color text #17120d; -@define-color text-heading #100c07; -@define-color muted #352e22; -@define-color subtle #554638; -@define-color comment #725e4c; -@define-color border #8a7358; -@define-color border-ui #66513b; -@define-color focus #0f6570; -@define-color accent #824f16; -@define-color accent-2 #a7471c; -@define-color diagnostic #0d4a68; -@define-color lavender #57478b; -@define-color error #842f24; -@define-color success #3d723d; -@define-color warning #654300; -@define-color link #824f16; -@define-color link-hover #a7471c; +@define-color bg #100f0d; +@define-color bg-soft #181512; +@define-color surface #201b16; +@define-color surface-2 #392e21; +@define-color surface-3 #4a3b2a; +@define-color text #e8dfd0; +@define-color text-heading #f4ecdd; +@define-color muted #c7b9aa; +@define-color subtle #938274; +@define-color comment #b8a99a; +@define-color border #756052; +@define-color border-ui #968878; +@define-color focus #5f8f8f; +@define-color accent #d99555; +@define-color accent-2 #c96a45; +@define-color diagnostic #5f95ca; +@define-color lavender #d4b4e6; +@define-color error #ed8a7a; +@define-color success #4db35f; +@define-color warning #e8b866; +@define-color link #d99555; +@define-color link-hover #c96a45; window#waybar { - background: rgba(243, 234, 220, 0.96); + background: rgba(16, 15, 13, 0.78); color: @text; border-bottom: 1px solid alpha(@accent, 0.26); } @@ -36,7 +36,7 @@ window#waybar { #workspaces button.active { color: @accent; - background: rgba(130, 79, 22, 0.34); + background: rgba(217, 149, 85, 0.24); border-color: alpha(@focus, 0.82); } @@ -47,7 +47,7 @@ window#waybar { #cpu, #memory, #tray { - background: rgba(222, 203, 177, 0.80); + background: rgba(232, 223, 208, 0.08); color: @text; border: 1px solid alpha(@border-ui, 0.78); } diff --git a/themes/dreamcoder/zsh-syntax-highlighting-dreamcoder.zsh b/themes/dreamcoder/zsh-syntax-highlighting-dreamcoder.zsh index 83c4905..9eb57a2 100644 --- a/themes/dreamcoder/zsh-syntax-highlighting-dreamcoder.zsh +++ b/themes/dreamcoder/zsh-syntax-highlighting-dreamcoder.zsh @@ -1,12 +1,12 @@ -# Dreamcoder Light — zsh-syntax-highlighting +# Dreamcoder Ember Noir OLED — zsh-syntax-highlighting typeset -A ZSH_HIGHLIGHT_STYLES -ZSH_HIGHLIGHT_STYLES[default]='fg=#17120d'; ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=#842f24'; ZSH_HIGHLIGHT_STYLES[reserved-word]='fg=#824f16,bold'; ZSH_HIGHLIGHT_STYLES[alias]='fg=#a7471c' -ZSH_HIGHLIGHT_STYLES[suffix-alias]='fg=#a7471c'; ZSH_HIGHLIGHT_STYLES[builtin]='fg=#824f16'; ZSH_HIGHLIGHT_STYLES[function]='fg=#a7471c'; ZSH_HIGHLIGHT_STYLES[command]='fg=#824f16' -ZSH_HIGHLIGHT_STYLES[precommand]='fg=#824f16,italic'; ZSH_HIGHLIGHT_STYLES[commandseparator]='fg=#352e22'; ZSH_HIGHLIGHT_STYLES[hashed-command]='fg=#824f16'; ZSH_HIGHLIGHT_STYLES[path]='fg=#0d4a68' -ZSH_HIGHLIGHT_STYLES[path_pathseparator]='fg=#824f16'; ZSH_HIGHLIGHT_STYLES[path_prefix]='fg=#0d4a68,underline'; ZSH_HIGHLIGHT_STYLES[path_approx]='fg=#654300,underline'; ZSH_HIGHLIGHT_STYLES[globbing]='fg=#57478b' -ZSH_HIGHLIGHT_STYLES[history-expansion]='fg=#57478b'; ZSH_HIGHLIGHT_STYLES[single-hyphen-option]='fg=#0d4a68'; ZSH_HIGHLIGHT_STYLES[double-hyphen-option]='fg=#0d4a68'; ZSH_HIGHLIGHT_STYLES[back-quoted-argument]='fg=#3d723d' -ZSH_HIGHLIGHT_STYLES[single-quoted-argument]='fg=#3d723d'; ZSH_HIGHLIGHT_STYLES[double-quoted-argument]='fg=#3d723d'; ZSH_HIGHLIGHT_STYLES[dollar-quoted-argument]='fg=#3d723d'; ZSH_HIGHLIGHT_STYLES[rc-quote]='fg=#7d3e64' -ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]='fg=#7d3e64'; ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]='fg=#7d3e64'; ZSH_HIGHLIGHT_STYLES[back-dollar-quoted-argument]='fg=#7d3e64'; ZSH_HIGHLIGHT_STYLES[assign]='fg=#17120d' -ZSH_HIGHLIGHT_STYLES[redirection]='fg=#a7471c'; ZSH_HIGHLIGHT_STYLES[comment]='fg=#725e4c,italic'; ZSH_HIGHLIGHT_STYLES[variable]='fg=#7d3e64'; ZSH_HIGHLIGHT_STYLES[mathvar]='fg=#7d3e64' -ZSH_HIGHLIGHT_STYLES[null]='fg=#352e22'; ZSH_HIGHLIGHT_STYLES[bracket-level-1]='fg=#824f16'; ZSH_HIGHLIGHT_STYLES[bracket-level-2]='fg=#0d4a68'; ZSH_HIGHLIGHT_STYLES[bracket-level-3]='fg=#3d723d' -ZSH_HIGHLIGHT_STYLES[bracket-level-4]='fg=#57478b'; ZSH_HIGHLIGHT_STYLES[cursor-matchingbracket]='fg=#f3eadc,bg=#824f16' +ZSH_HIGHLIGHT_STYLES[default]='fg=#e8dfd0'; ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=#ed8a7a'; ZSH_HIGHLIGHT_STYLES[reserved-word]='fg=#d99555,bold'; ZSH_HIGHLIGHT_STYLES[alias]='fg=#c96a45' +ZSH_HIGHLIGHT_STYLES[suffix-alias]='fg=#c96a45'; ZSH_HIGHLIGHT_STYLES[builtin]='fg=#d99555'; ZSH_HIGHLIGHT_STYLES[function]='fg=#c96a45'; ZSH_HIGHLIGHT_STYLES[command]='fg=#d99555' +ZSH_HIGHLIGHT_STYLES[precommand]='fg=#d99555,italic'; ZSH_HIGHLIGHT_STYLES[commandseparator]='fg=#c7b9aa'; ZSH_HIGHLIGHT_STYLES[hashed-command]='fg=#d99555'; ZSH_HIGHLIGHT_STYLES[path]='fg=#5f95ca' +ZSH_HIGHLIGHT_STYLES[path_pathseparator]='fg=#d99555'; ZSH_HIGHLIGHT_STYLES[path_prefix]='fg=#5f95ca,underline'; ZSH_HIGHLIGHT_STYLES[path_approx]='fg=#e8b866,underline'; ZSH_HIGHLIGHT_STYLES[globbing]='fg=#d4b4e6' +ZSH_HIGHLIGHT_STYLES[history-expansion]='fg=#d4b4e6'; ZSH_HIGHLIGHT_STYLES[single-hyphen-option]='fg=#5f95ca'; ZSH_HIGHLIGHT_STYLES[double-hyphen-option]='fg=#5f95ca'; ZSH_HIGHLIGHT_STYLES[back-quoted-argument]='fg=#4db35f' +ZSH_HIGHLIGHT_STYLES[single-quoted-argument]='fg=#4db35f'; ZSH_HIGHLIGHT_STYLES[double-quoted-argument]='fg=#4db35f'; ZSH_HIGHLIGHT_STYLES[dollar-quoted-argument]='fg=#4db35f'; ZSH_HIGHLIGHT_STYLES[rc-quote]='fg=#e29cb4' +ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]='fg=#e29cb4'; ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]='fg=#e29cb4'; ZSH_HIGHLIGHT_STYLES[back-dollar-quoted-argument]='fg=#e29cb4'; ZSH_HIGHLIGHT_STYLES[assign]='fg=#e8dfd0' +ZSH_HIGHLIGHT_STYLES[redirection]='fg=#c96a45'; ZSH_HIGHLIGHT_STYLES[comment]='fg=#b8a99a,italic'; ZSH_HIGHLIGHT_STYLES[variable]='fg=#e29cb4'; ZSH_HIGHLIGHT_STYLES[mathvar]='fg=#e29cb4' +ZSH_HIGHLIGHT_STYLES[null]='fg=#c7b9aa'; ZSH_HIGHLIGHT_STYLES[bracket-level-1]='fg=#d99555'; ZSH_HIGHLIGHT_STYLES[bracket-level-2]='fg=#5f95ca'; ZSH_HIGHLIGHT_STYLES[bracket-level-3]='fg=#4db35f' +ZSH_HIGHLIGHT_STYLES[bracket-level-4]='fg=#d4b4e6'; ZSH_HIGHLIGHT_STYLES[cursor-matchingbracket]='fg=#100f0d,bg=#d99555' From 10b1164720ca8e014b88314e51d27a0747bd4a88 Mon Sep 17 00:00:00 2001 From: DreamCoder08 Date: Wed, 1 Jul 2026 16:57:27 -0500 Subject: [PATCH 10/29] docs(readme): add 3-step install flow, comparison table, and AI integration guide MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rewrite README with user-centric 3-step install (Gentleman → ML4W → Dreamcoder). New files: - INSTALL.md: detailed step-by-step with prerequisites and troubleshooting - COMPARISON.md: feature comparison table across all three repos - docs/ai-integration.md: how Dreamcoder integrates with Claude, OpenCode, Pi Part of Plan 04: Documentation & DX --- COMPARISON.md | 142 +++++++++++++++++++++++++++ INSTALL.md | 177 ++++++++++++++++++++++++++++++++++ README.md | 214 +++++++++++++++++++++-------------------- docs/ai-integration.md | 100 +++++++++++++++++++ 4 files changed, 527 insertions(+), 106 deletions(-) create mode 100644 COMPARISON.md create mode 100644 INSTALL.md create mode 100644 docs/ai-integration.md diff --git a/COMPARISON.md b/COMPARISON.md new file mode 100644 index 0000000..f9fd378 --- /dev/null +++ b/COMPARISON.md @@ -0,0 +1,142 @@ +# Dreamcoder OS — Comparison + +> ¿Por qué necesitás Dreamcoder si ya tenés Gentleman.Dots + ML4W? +> Porque Dreamcoder es la capa que ninguno de los dos tiene: **salud visual, identidad, y AI integration**. + +## Feature Comparison + +| Feature | Gentleman.Dots | ML4W | **dreamcoder-dots** | +|---------|---------------|------|---------------------| +| **Theme Engine** | ❌ Catppuccin estático | ✅ Matugen dinámico | ✅ **Token-based + WCAG/APCA** | +| **Dark/Light/Dusk** | ❌ Solo dark | ✅ Light/Dark | ✅ **+ Dusk transition mode** | +| **Accesibilidad** | ❌ | ❌ | ✅ **WCAG 4.5:1 + APCA 75** | +| **AI Session Prompt** | ❌ | ❌ | ✅ **Bleeding edge en 2026** | +| **Neovim Plugins** | ✅ 29 (LazyVim) | ❌ | 🔶 Dreamcoder colorscheme | +| **Hyprland Config** | ❌ | ✅ Completo | 🔶 Color overlay | +| **Shell Configs** | ✅ Fish/Zsh/Nushell | ✅ Fish/Bash | 🔶 Aliases + 9 functions | +| **Ghostty Shaders** | ✅ 45+ GLSL | ❌ | 🔶 Usa los de Gentleman | +| **Go TUI Installer** | ✅ Bubbletea | ✅ bash | ✅ Bubbletea + Vim Trainer | +| **Starship Prompt** | ❌ Básico | ❌ Básico | ✅ **23 módulos + AI state** | +| **Python Theme Lib** | ❌ | ❌ | ✅ **Publicada en PyPI** | +| **Homebrew Formula** | ✅ | ❌ | ✅ | +| **Vim Trainer** | ✅ RPG-style | ❌ | ✅ RPG-style | +| **Auto Theme Switch** | ❌ | ✅ Manual | ✅ **Systemd timer** | +| **CI/CD** | ❌ | ❌ | ✅ GitHub Actions | + +> ✅ = lo provee · 🔶 = dreamcoder overlay · ❌ = no lo provee + +--- + +## Lo que se queda de Gentleman.Dots + +Después de instalar Dreamcoder, TODO lo de Gentleman sigue funcionando exactamente igual: + +| Componente | Qué se queda | Cómo lo usa Dreamcoder | +|-----------|-------------|----------------------| +| **Neovim** | init.lua + 29 plugins | Agrega `colorscheme dreamcoder` al init.lua | +| **Ghostty shaders** | 45+ GLSL | Usa `dreamcoder-cursor-pulse.glsl` por defecto | +| **Tmux** | `~/.tmux.conf` con TPM + kanagawa | `apply-theme-mode.sh` sobreescribe colores kanagawa | +| **Zellij** | `config.kdl` con plugins | Cambia `theme "dreamcoder-{mode}"` | +| **Fish/Zsh/Nushell** | Configs base | Agrega `conf.d/dreamcoder-*.fish` | +| **Vim Trainer** | RPG completo | Sin cambios | +| **Starship** | Config base (si existe) | Reemplaza con 23 módulos | + +## Lo que se queda de ML4W + +| Componente | Qué se queda | Cómo lo usa Dreamcoder | +|-----------|-------------|----------------------| +| **Hyprland** | hyprland.conf + animaciones + keybinds | Agrega `colors.{conf,lua}` con variables de color | +| **Waybar** | `config.jsonc` + `style.css` | Genera `colors.css` con `@import` | +| **Rofi** | `config.rasi` | Genera `colors.rasi` con `@import` | +| **Dunst** | `dunstrc` | Genera `dreamcoder-dunst.conf` con `[include]` | +| **GTK 3.0/4.0** | `settings.ini` | Switchea `prefer-dark-theme` en runtime | +| **Btop** | `btop.conf` | Agrega `dreamcoder.theme` | +| **Matugen** | Pipeline de colores | Dreamcoder corre matugen en cada mode switch | + +--- + +## Lo que Dreamcoder AGREGA + +### Token Engine with WCAG/APCA + +```json +{ + "guardrails": { + "minimum_text_contrast": 4.5, + "minimum_apca_body": 75, + "avoid_pure_black_white": true + } +} +``` + +Ningún otro dotfiles hace esto. Cada color está validado contra WCAG 4.5:1 y APCA. + +### 3 Modos de Color + +| Modo | Nombre | BG | Accent | Uso | +|------|--------|----|--------|-----| +| 🌙 Dark | Ember Noir OLED | `#100f0d` | `#d99555` | 18:00-07:00 | +| ☀️ Light | Cocoa/Lúcuma | `#f3eadc` | `#824f16` | 07:00-16:00 | +| 🌆 Dusk | Transición | `#ebe4d6` | `#8a5520` | 16:00-18:00 | + +### AI Session State en el Prompt + +Cuando Claude Code o OpenCode están activos, el prompt muestra: + +``` +⎔ claude-4 42K +``` + +(solo visible cuando hay una sesión activa) + +### 9 Shell Functions + +| Función | Para qué | +|---------|----------| +| `extract` | Descomprime CUALQUIER formato | +| `sysupdate` | Actualiza pacman + brew + flatpak | +| `ports` | Muestra puertos en escucha | +| `killport` | Mata proceso en un puerto | +| `dots` | Cd al repo dreamcoder | +| `cheat` | TLDR para help rápido | +| `http` | HTTPie wrapper | +| `logs` | Journalctl wrapper | +| `tm-session` | Tmux session picker | + +### Modern CLI Aliases + +```bash +alias ll='eza -la --icons' # mejor ls +alias cat='bat --paging=never' # mejor cat +alias find='fd' # mejor find +alias grep='rg' # mejor grep +alias cd='z' # zoxide smart cd +alias ps='procs' # mejor ps +alias top='btm' # mejor htop +alias du='dua' # mejor du +alias df='duf' # mejor df +alias sed='sd' # mejor sed +alias help='tldr' # mejor man +``` + +Todos con graceful fallback si la herramienta no está instalada. + +--- + +## Resumen Visual + +``` +Sin Dreamcoder: +┌─────────────────────────────────────────────┐ +│ Gentleman.Dots: Catppuccin │ +│ ML4W: Matugen colors │ +│ Sin WCAG, sin AI prompt, sin dusk mode │ +└─────────────────────────────────────────────┘ + +Con Dreamcoder: +┌─────────────────────────────────────────────┐ +│ Gentleman.Dots: Neovim, shaders, tmux │ +│ ML4W: Hyprland, waybar, rofi, dunst │ +│ Dreamcoder: tokens WCAG/APCA + AI prompt │ +└─────────────────────────────────────────────┘ +``` diff --git a/INSTALL.md b/INSTALL.md new file mode 100644 index 0000000..8710793 --- /dev/null +++ b/INSTALL.md @@ -0,0 +1,177 @@ +# Dreamcoder OS — Installation Guide + +> Instalación completa en 3 pasos: Gentleman.Dots → ML4W → Dreamcoder. + +## Prerequisitos + +- **Arch Linux** (o derivado) +- `git`, `stow`, `python3` instalados +- Conexión a internet + +--- + +## Paso 1: Gentleman.Dots + +Gentleman.Dots provee la base para Neovim, shells, terminales, y multiplexers. + +### Opción A: Homebrew (recomendado) + +```bash +brew install Gentleman-Programming/tap/gentleman-dots +gentleman-dots +``` + +### Opción B: Descarga directa + +```bash +curl -fsSL https://github.com/Gentleman-Programming/Gentleman.Dots/releases/latest/download/gentleman-installer-linux-amd64 -o gentleman.dots +chmod +x gentleman.dots +./gentleman.dots +``` + +### Opción C: Manual + +```bash +git clone https://github.com/Gentleman-Programming/Gentleman.Dots.git +cd Gentleman.Dots +./install.sh +``` + +Seguí el installer TUI para seleccionar: + +- Shell: Fish (recomendado), Zsh, o Nushell +- Terminal: Ghostty (recomendado) o Kitty +- Multiplexer: Tmux o Zellij +- Editor: Neovim + +> Más info: [Gentleman.Dots](https://github.com/Gentleman-Programming/Gentleman.Dots) + +--- + +## Paso 2: ML4W OS + +ML4W provee la base completa de escritorio Hyprland. + +```bash +bash <(curl -s https://ml4w.com/os/stable) +``` + +Esto instala: + +- **Hyprland**: animaciones, keybinds, monitores, layouts, ventanas, workspaces +- **Waybar**: barra de estado con módulos +- **Rofi**: lanzador de apps +- **Dunst**: notificaciones +- **GTK 3.0/4.0**: tema y config +- **Btop**: monitor de sistema +- **Matugen**: generación dinámica de colores + +> Más info: [ML4W OS](https://ml4w.com/os/) + +--- + +## Paso 3: Dreamcoder + +Dreamcoder aplica su capa visual sobre Gentleman + ML4W. + +### Clonar + +```bash +git clone git@github.com:Dreamcoder08/Dreamcoder_dots.git ~/Documents/PROYECTOS/dreamcoder-dots +cd ~/Documents/PROYECTOS/dreamcoder-dots +``` + +### Instalar + +```bash +./scripts/dreamcoder install +``` + +Esto: + +1. Crea backups de configs existentes +2. Stowea los módulos (Shell, Kitty, Ghostty, Fastfetch, Warp, Bat, Systemd) +3. Instala los hooks de tema para cada app +4. Activa el timer systemd para auto-theme-switching +5. Corre el primer sync de temas + +### Verificar + +```bash +./scripts/dreamcoder doctor # Health check completo +./scripts/dreamcoder status # System status +``` + +--- + +## Post-Instalación + +### Tmux + +Si usás Tmux con TPM: + +```bash +tmux +prefix + I # Instalar plugins +``` + +### Neovim + +Abrí Neovim. LazyVim instala los plugins automáticamente: + +```bash +nvim +:Lazy sync +``` + +### Auto Theme Switching + +El timer systemd se activa automáticamente. Para verificar: + +```bash +systemctl --user status dreamcoder-theme-auto.timer +``` + +El timer cambia entre modos según el horario: + +- **07:00-16:00** → Light +- **16:00-18:00** → Dusk +- **18:00-07:00** → Dark + +--- + +## Troubleshooting + +### "Theme files not found" + +Asegurate de haber instalado Gentleman.Dots y ML4W primero. Dreamcoder es un overlay, no un reemplazo. + +### "Error: stow not found" + +```bash +sudo pacman -S stow +``` + +### "Colors not updating" + +```bash +dreamcoder dark # Force dark mode +dreamcoder light # Force light mode +``` + +### "Neovim colorscheme not loading" + +Agregá esto a `~/.config/nvim/init.lua`: + +```lua +vim.cmd.colorscheme("dreamcoder") +``` + +--- + +## Referencias + +- [Gentleman.Dots](https://github.com/Gentleman-Programming/Gentleman.Dots) +- [ML4W OS](https://ml4w.com/os/) +- [Dreamcoder SDD Plans](docs/superpowers/plans/) +- [Architecture Docs](docs/architecture/) diff --git a/README.md b/README.md index 14ceaed..94dc74d 100644 --- a/README.md +++ b/README.md @@ -1,44 +1,40 @@ # Dreamcoder OS +> Visual layer premium para **Gentleman.Dots + ML4W**. +> Café/Lúcuma. Ember Noir. Contraste saludable. Identidad. + [![CI](https://github.com/Gentleman-Programming/dreamcoder-dots/actions/workflows/theme-validation.yml/badge.svg)](https://github.com/Gentleman-Programming/dreamcoder-dots/actions/workflows/theme-validation.yml) -[![Coverage](https://img.shields.io/badge/coverage-%3E40%25-brightgreen)]() +[![WCAG 4.5:1](https://img.shields.io/badge/WCAG-4.5%3A1-brightgreen)]() +[![APCA](https://img.shields.io/badge/APCA-75-brightgreen)]() [![PyPI](https://img.shields.io/pypi/v/dreamcoder-theme)](https://pypi.org/project/dreamcoder-theme/) -[![Python](https://img.shields.io/pypi/pyversions/dreamcoder-theme)](https://pypi.org/project/dreamcoder-theme/) -[![License](https://img.shields.io/pypi/l/dreamcoder-theme)](https://github.com/Gentleman-Programming/dreamcoder-dots/blob/main/LICENSE) +[![License](https://img.shields.io/pypi/l/dreamcoder-theme)](./LICENSE) -> Personal Arch Linux dotfiles — a visual layer on top of ML4W/Gentleman Dots focused on readability, eye comfort, and a premium coding experience. +--- -Personal Arch Linux dotfiles for the Dreamcoder identity: a visual layer on top of -ML4W/Gentleman Dots focused on readability, eye comfort, and a premium coding experience. +## Quick Start — 3-Step Install -```mermaid -flowchart LR - subgraph Tokens["Design Tokens"] - PT["palette_tokens.py
dark / light / dusk"] - end - subgraph Render["Renderers (28+ targets)"] - R["renderers.py
hub → leaf modules"] - end - subgraph Write["Writers"] - W["writers.py
write_if_changed()"] - end - subgraph Output["Theme Files"] - O["Kitty, Ghostty, Nvim,
Tmux, Starship, Hyprland,
Codex, OpenCode, Pi, ..."] - end - Tokens --> Render --> Write --> Output +### 1. Install Gentleman.Dots + +```bash +brew install Gentleman-Programming/tap/gentleman-dots +gentleman-dots ``` ---- +→ O descargá desde [Gentleman.Dots](https://github.com/Gentleman-Programming/Gentleman.Dots) -## Installation +**Te da**: Neovim (29 plugins LazyVim), Ghostty shaders (45+), Tmux/Zellij, Vim Trainer, Fish/Zsh/Nushell -### Theme Engine (Python package) +### 2. Install ML4W OS ```bash -pip install dreamcoder-theme +bash <(curl -s https://ml4w.com/os/stable) ``` -### Full Dotfiles +→ [Documentación ML4W](https://ml4w.com/os/) + +**Te da**: Hyprland completo (animaciones, keybinds, monitores), Waybar, Rofi, Dunst, GTK, Btop + +### 3. Install Dreamcoder ```bash git clone git@github.com:Dreamcoder08/Dreamcoder_dots.git ~/Documents/PROYECTOS/dreamcoder-dots @@ -46,121 +42,127 @@ cd ~/Documents/PROYECTOS/dreamcoder-dots ./scripts/dreamcoder install ``` ---- +**Aplica**: Dreamcoder dark/light/dusk sobre toda la base de Gentleman + ML4W -## Usage +**Agrega**: Starship prompt con AI session state, 9 funciones shell, aliases modernos, auto-theme-switching -### CLI - -```bash -# Render all themes to your config dirs -dreamcoder-theme sync - -# Check health of installed themes -dreamcoder-theme doctor - -# Inspect active theme paths -dreamcoder-theme paths -``` +--- -### Library +## ¿Por qué Dreamcoder? -```python -from dreamcoder_theme.palette import adaptive_palette -from dreamcoder_theme.renderers import kitty_content, ghostty_content +| Feature | Gentleman.Dots | ML4W | **dreamcoder-dots** | +|---------|---------------|------|---------------------| +| **Theme Engine** | ❌ Catppuccin | ✅ Matugen | ✅ **Token-based + WCAG/APCA** | +| **Light/Dark/Dusk** | ❌ | ✅ | ✅ **+ Dusk transition** | +| **AI Session Prompt** | ❌ | ❌ | ✅ **Bleeding edge** | +| **Accesibilidad** | ❌ | ❌ | ✅ **WCAG 4.5:1 + APCA 75** | +| **Neovim** | ✅ 29 plugins | ❌ | 🔶 Dreamcoder colorscheme | +| **Hyprland** | ❌ | ✅ Completo | 🔶 Color overlay | +| **Shell Configs** | ✅ Fish/Zsh/Nushell | ✅ Fish/Bash | 🔶 Aliases + functions | +| **Ghostty Shaders** | ✅ 45+ GLSL | ❌ | 🔶 Usa los de Gentleman | +| **Installer** | ✅ Go TUI | ✅ bash | ✅ **Go TUI + Vim Trainer** | +| **Prompt** | ❌ Básico | ❌ Básico | ✅ **Starship 23 módulos** | -# Generate adaptive colors from a wallpaper -active = adaptive_palette(variants["dark"], wallpaper="/path/to/wallpaper.jpg") +> ✅ = lo tiene completo · 🔶 = dreamcoder aporta overlay · ❌ = no lo tiene -# Render to specific formats -kitty_conf = kitty_content(active) -ghostty_conf = ghostty_content(active) -``` +--- -### Script commands +## Lo que dreamcoder NO reemplaza -| Command | Description | -|---------|-------------| -| `./scripts/dreamcoder install` | First install / full reapply | -| `./scripts/dreamcoder repair` | After ML4W or Gentleman updates | -| `./scripts/dreamcoder doctor` | Inspect current health/status | -| `./scripts/dreamcoder dark` | Force dark mode | -| `./scripts/dreamcoder light` | Force light mode | -| `./scripts/dreamcoder preview` | Regenerate docs preview | -| `./scripts/set-wallpaper.sh ` | Set wallpaper and refresh | +Dreamcoder es una **capa visual**, no un reemplazo. Mantenés todo lo que ya te dan Gentleman y ML4W: ---- +**De Gentleman.Dots se queda:** -## Architecture +- Neovim con 29 plugins (avante, copilot, blink, fzf-lua, oil, DAP...) +- Ghostty shaders (45+ GLSL effects) +- Tmux/Zellij con TPM y plugins +- Vim Mastery Trainer +- Fish/Zsh/Nushell base config -The theme generation pipeline follows a four-layer flow: +**De ML4W se queda:** -1. **Input Layer** — `palette_tokens.py` defines static design tokens (dark/light/dusk variants) -2. **Transform Layer** — `palette.py` loads variants and applies adaptive palette from wallpaper -3. **Render Layer** — `renderers.py` imports functions from `renderers_*.py` modules that convert tokens to target-specific formats -4. **Write Layer** — `writers.py` writes files via `write_if_changed()` and updates app configurations +- Hyprland completo (animaciones, keybinds, monitores, layouts) +- Waybar, Rofi, Dunst configs +- GTK 3.0/4.0 settings +- Matugen color generation pipeline +- Btop, Chromium/Edge configs -Each renderer is a pure function: receives a color dict and returns a string. No side effects until the write layer. +**Dreamcoder aporta:** -``` -dreamcoder-dots/ -├── src/ -│ ├── dreamcoder_theme/ -│ │ ├── palette_tokens.py # Design tokens -│ │ ├── palette.py # Adaptive palette -│ │ ├── renderers.py # Render hub -│ │ ├── renderers_kitty.py # Kitty renderer -│ │ ├── renderers_ghostty.py # Ghostty renderer -│ │ └── ... -│ └── ... -├── scripts/ # Install/repair/utility scripts -├── docs/ # Architecture docs and previews -└── configs/ # Default configuration files -``` +- Tokens de color validados con WCAG 4.5:1 + APCA +- 3 modos: Ember Noir (dark), Cocoa/Lúcuma (light), Dusk (transición) +- Starship prompt con 23 módulos y AI session state +- 9 funciones shell (extract, sysupdate, killport, etc.) +- Aliases modernos con graceful fallback (eza, bat, fd, rg, zoxide) +- Auto-theme-switching por horario (systemd timer) +- Python library para generación de temas (PyPI) --- -## Tech Stack - -| Layer | Tech | Purpose | -|-------|------|---------| -| Language | Python 3 | Theme engine and CLI | -| Rendering Targets | 28+ targets | Kitty, Ghostty, Nvim, Tmux, Hyprland, and more | -| Design Tokens | Custom palette system | Dark/light/dusk variants | -| Testing | pytest + ruff | Type-safe theme generation | +## Uso ---- +### CLI -## Philosophy +```bash +dreamcoder dark # → Ember Noir OLED +dreamcoder light # → Dreamcoder Light +dreamcoder status # → System status overview +dreamcoder doctor # → Health check +``` -Dreamcoder is not a neon rice. It is a workbench: +### Theme Engine (Python) -- **health first**: no pure black/white primary backgrounds, strong contrast, low glare; -- **daily comfort**: larger terminal type, calmer prompt density, automatic day/night mode; -- **identity second**: Cocoa/Lúcuma warmth, diagnostic cyan, restrained editorial colors; -- **ML4W-compatible**: Dreamcoder owns colors and hooks, ML4W/Gentleman can keep layout behavior. +```bash +pip install dreamcoder-theme +dreamcoder-theme sync # Render all themes +dreamcoder-theme doctor # Check health +``` --- -## Project Status +## Arquitectura -**Status:** Active -**Version:** 1.0 +```mermaid +flowchart LR + subgraph Tokens["Design Tokens"] + PT["palette_tokens.py
dark / light / dusk"] + end + subgraph Render["Renderers (28+ targets)"] + R["renderers.py
hub → leaf modules"] + end + subgraph Write["Writers"] + W["writers.py
write_if_changed()"] + end + subgraph Output["Theme Files"] + O["Kitty, Ghostty, Nvim,
Tmux, Starship, Hyprland,
Codex, OpenCode, Pi, ..."] + end + Tokens --> Render --> Write --> Output +``` --- -## Contributing +## Filosofía + +Dreamcoder no es un rice neon. Es un banco de trabajo: -See [CONTRIBUTING.md](CONTRIBUTING.md). Full documentation at [docs/README.md](docs/README.md). +- **Salud primero**: sin blanco/negro puro, contraste fuerte, bajo brillo +- **Confort diario**: tipografía más grande, densidad de prompt calmada, modo día/noche automático +- **Identidad segundo**: calidez Cocoa/Lúcuma, cyan diagnóstico, colores editoriales --- -## License +## Projecto -MIT — see [LICENSE](LICENSE). +| Aspecto | Detalle | +|---------|---------| +| **Estado** | Active | +| **Versión** | 1.0 | +| **Licencia** | MIT | +| **Docs** | [docs/README.md](docs/README.md) | +| **Contribuir** | [CONTRIBUTING.md](CONTRIBUTING.md) | --- ## SDD -This project sits within the [Dreamcoder08](https://github.com/Dreamcoder08) ecosystem. Documentation is maintained in the [SDD Maestro](../arkelythex/sdd/ecosystem-readme-sdd/00-README.md). +Este proyecto usa Spec-Driven Development. Los planes están en [docs/superpowers/plans/](docs/superpowers/plans/). diff --git a/docs/ai-integration.md b/docs/ai-integration.md new file mode 100644 index 0000000..05b17f1 --- /dev/null +++ b/docs/ai-integration.md @@ -0,0 +1,100 @@ +# Dreamcoder AI Integration + +> Cómo dreamcoder se integra con Claude Code, OpenCode, Pi, y otras herramientas de IA. + +## AI Session State en el Prompt + +Dreamcoder tiene un módulo de Starship (`[custom.ai_session]`) que muestra el estado de tu sesión de IA actual en el prompt: + +``` +⎔ claude-4 42K +``` + +Esto se lee de `~/.cache/dreamcoder/ai-session.state`, que se actualiza automáticamente cuando: + +- **Claude Code** tiene una sesión activa (`~/.claude/sessions/`) +- **OpenCode** está corriendo (`~/.opencode/state`) +- **Codex CLI** tiene contexto activo + +### Cómo funciona + +```mermaid +flowchart LR + A["Claude/OpenCode
Session Active"] --> B["25-dreamcoder-ai-env.fish
Detecta y escribe estado"] + B --> C["~/.cache/dreamcoder/
ai-session.state"] + C --> D["Starship
custom.ai_session module"] + D --> E["Prompt muestra:
⎔ claude-4 42K"] +``` + +### Deshabilitar + +```fish +set -gx DREAMCODER_AI_SESSION_DISABLED 1 +``` + +--- + +## Pi Agent Theme + +Dreamcoder genera un tema para Pi (el coding agent) que se escribe en: + +- `~/.pi/agent/themes/dreamcoder.json` +- `~/.pi/agent/themes/dreamcoder-dark.json` +- `~/.pi/agent/themes/dreamcoder-light.json` + +El tema se activa automáticamente via `ensure_pi_theme_settings()` que setea `theme: "dreamcoder"` en `~/.pi/agent/settings.json`. + +### Mode Switching + +Cuando cambiás de modo (`dreamcoder dark` / `dreamcoder light`), el tema de Pi se actualiza automáticamente: + +```bash +dreamcoder dark # Pi → dreamcoder-dark.json +dreamcoder light # Pi → dreamcoder-light.json +``` + +--- + +## OpenCode Theme + +Dreamcoder genera temas para OpenCode en: + +- `~/.config/opencode/themes/dreamcoder.json` +- `.opencode/themes/dreamcoder.json` (repo copy) + +El TUI de OpenCode usa el tema dreamcoder con fondo transparente para mejor integración visual. + +--- + +## Codex CLI + +Dreamcoder genera temas `.tmTheme` para Codex CLI: + +- `~/.codex/themes/Dreamcoder.tmTheme` +- `~/.codex/themes/Dreamcoder-Dark.tmTheme` +- `~/.codex/themes/Dreamcoder-Light.tmTheme` + +Y también temas `.codex-theme.json` para Codex App. + +--- + +## CLAUDE.md + +Dreamcoder incluye un `CLAUDE.md` con instrucciones para Claude Code sobre cómo trabajar con el repositorio. Cubre: + +- Reglas de shell scripts (`set -euo pipefail`, quoting, `[[ ]]`) +- Modularidad (un archivo = un propósito) +- Safety (safe sourcing, sin hardcoded paths) + +--- + +## Caso de Uso: Desarrollo con IA + +1. Abrí Neovim (vía Gentleman.Dots) → 29 plugins, dreamcoder colorscheme +2. Iniciá Claude Code → `⎔ claude-4` aparece en el prompt +3. Escribí código con autocompletado (blink.cmp), fuzzy finder (fzf-lua), debugging (DAP) +4. Need a command? `cheat tar` → TLDR para tar +5. Need to extract something? `extract project.tar.gz` +6. Cambiando de tarea? `tm-session` → fzf session picker +7. Terminando el día? `sysupdate` → actualiza todo +8. El timer systemd cambia automáticamente a Ember Noir a las 18:00 From 46a4760f3982b0ca4d95e42983a64771d826f7d5 Mon Sep 17 00:00:00 2001 From: DreamCoder08 Date: Wed, 1 Jul 2026 17:05:36 -0500 Subject: [PATCH 11/29] fix(prompt): remove detect_env_vars from username, fix battery display key - Remove detect_env_vars from username section (was preventing show from showing when no SSH connection was detected despite show_always=true) - Fix battery display: symbol is not a valid key in BatteryDisplay entries. Change to discharging_symbol with battery icon codepoint. - Regenerated starship config Fixes: [WARN] - Error in 'Battery' at 'display': Unknown key 'symbol' Username not showing in prompt --- src/dreamcoder_theme/renderers_starship.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/dreamcoder_theme/renderers_starship.py b/src/dreamcoder_theme/renderers_starship.py index 993e6d0..2a0f3ca 100644 --- a/src/dreamcoder_theme/renderers_starship.py +++ b/src/dreamcoder_theme/renderers_starship.py @@ -80,7 +80,6 @@ def starship_content(c: dict[str, str]) -> str: style_user = "bg:prompt_surface0 fg:prompt_text bold" style_root = "bg:prompt_surface0 fg:error bold" format = "[ \\uf007 $user ]($style)" -detect_env_vars = ["SSH_CONNECTION", "SSH_CLIENT", "SSH_TTY"] [directory] style = "bg:prompt_surface1 fg:prompt_text bold" @@ -118,7 +117,7 @@ def starship_content(c: dict[str, str]) -> str: [battery] disabled = false display = [ - {{threshold = 20, style = "fg:error bold", symbol = "\\uf244 "}}, + {{threshold = 20, style = "fg:error bold", discharging_symbol = "\\uf244 "}}, ] [kubernetes] From cc5351d692885aa4173ce46becf7cacdfd53ffe2 Mon Sep 17 00:00:00 2001 From: DreamCoder08 Date: Wed, 1 Jul 2026 17:08:51 -0500 Subject: [PATCH 12/29] chore(sync): regenerate theme files after prompt fixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Regenerated after: - Removing detect_env_vars from username section - Fixing battery display key (symbol → discharging_symbol) --- .opencode/themes/dreamcoder.json | 242 ++++++++--------- Antigravity/Dreamcoder.json | 100 +++---- Bat/.config/bat/themes/Dreamcoder.tmTheme | 50 ++-- COMPARISON.md | 102 ++++---- Codex-App/Dreamcoder.codex-theme.json | 246 +++++++++--------- Codex-CLI/Dreamcoder.tmTheme | 50 ++-- Ghostty/.config/ghostty/config | 2 +- Ghostty/.config/ghostty/themes/dreamcoder | 50 ++-- Kitty/.config/kitty/colors-dreamcoder.conf | 80 +++--- Kitty/.config/kitty/dreamcoder-ui.conf | 4 +- Pi/.pi/agent/themes/dreamcoder-light.json | 54 ++-- Pi/.pi/agent/themes/dreamcoder.json | 54 ++-- README.md | 36 +-- Shell/.config/starship-dark.toml | 18 +- Shell/.config/starship-light.toml | 18 +- Shell/.config/starship.toml | 45 ++-- Tmux/.config/tmux/tmux-dreamcoder.conf | 34 +-- .../themes/Dreamcoder-Light.yaml | 44 ++-- Zellij/.config/zellij/config.kdl | 2 +- installer/installer | Bin 4037860 -> 6140386 bytes themes/dreamcoder/bat-dreamcoder.sh | 4 +- themes/dreamcoder/btop-dreamcoder.theme | 120 ++++----- themes/dreamcoder/cava-dreamcoder.config | 22 +- themes/dreamcoder/delta-dreamcoder.gitconfig | 32 +-- themes/dreamcoder/dunst-dreamcoder.conf | 26 +- themes/dreamcoder/firefox-dreamcoder.css | 34 +-- themes/dreamcoder/fzf-dreamcoder.sh | 4 +- themes/dreamcoder/hyprland.conf | 6 +- themes/dreamcoder/ls-colors-dreamcoder.sh | 6 +- themes/dreamcoder/obsidian-dreamcoder.css | 148 +++++------ themes/dreamcoder/rofi.rasi | 20 +- themes/dreamcoder/waybar.css | 50 ++-- .../zsh-syntax-highlighting-dreamcoder.zsh | 22 +- 33 files changed, 856 insertions(+), 869 deletions(-) diff --git a/.opencode/themes/dreamcoder.json b/.opencode/themes/dreamcoder.json index e639846..803f32d 100644 --- a/.opencode/themes/dreamcoder.json +++ b/.opencode/themes/dreamcoder.json @@ -1,130 +1,130 @@ { "$schema": "https://opencode.ai/theme.json", "defs": { - "dreamBackground": "#100f0d", - "dreamPanel": "#201b16", - "dreamElement": "#181512", - "dreamText": "#e8dfd0", - "dreamMuted": "#c7b9aa", - "dreamCocoa": "#c96a45", - "dreamLucuma": "#d99555", - "dreamDiagnostic": "#5f95ca", - "dreamSage": "#4db35f", - "dreamViolet": "#d4b4e6", - "dreamMauve": "#e29cb4", - "dreamCoral": "#ed8a7a", - "dreamWarning": "#e8b866" + "dreamBackground": "#f3eadc", + "dreamPanel": "#fff7ea", + "dreamElement": "#e6d7c4", + "dreamText": "#17120d", + "dreamMuted": "#352e22", + "dreamCocoa": "#a7471c", + "dreamLucuma": "#824f16", + "dreamDiagnostic": "#0d4a68", + "dreamSage": "#3d723d", + "dreamViolet": "#57478b", + "dreamMauve": "#7d3e64", + "dreamCoral": "#842f24", + "dreamWarning": "#654300" }, "theme": { "background": "none", - "backgroundPanel": "#201b16", - "backgroundElement": "#2b231b", - "backgroundHover": "#2b231b", - "backgroundSelected": "#2b231b", - "textSelected": "#e8dfd0", - "backgroundCode": "#231d18", - "backgroundSearch": "#8d7141", - "backgroundLine": "#181512", - "backgroundAssistant": "#191f24", - "backgroundUser": "#281f16", - "backgroundTool": "#282327", - "text": "#e8dfd0", - "textMuted": "#c7b9aa", - "textSubtle": "#a6988d", - "textPlaceholder": "#b8a99a", - "textAssistant": "#78a2cb", - "textUser": "#dba067", - "textTool": "#d4b4e6", - "primary": "#d99555", - "secondary": "#c96a45", - "accent": "#d99555", - "accentMuted": "#a77443", - "error": "#ed8a7a", - "warning": "#e8b866", - "success": "#4db35f", - "info": "#5f95ca", - "border": "#968878", - "borderActive": "#d99555", - "borderSubtle": "#756052", - "borderFocus": "#5f95ca", - "shadow": "#0c0b0a", - "diffAdded": "#4db35f", - "diffRemoved": "#ed8a7a", - "diffContext": "#c7b9aa", - "diffHunkHeader": "#d4b4e6", - "diffHighlightAdded": "#4db35f", - "diffHighlightRemoved": "#ed8a7a", - "diffAddedBg": "#395437", - "diffRemovedBg": "#68473f", + "backgroundPanel": "#fff7ea", + "backgroundElement": "#e3d2bc", + "backgroundHover": "#decbb1", + "backgroundSelected": "#decbb1", + "textSelected": "#17120d", + "backgroundCode": "#d0bca3", + "backgroundSearch": "#a1895c", + "backgroundLine": "#e6d7c4", + "backgroundAssistant": "#d7d7ce", + "backgroundUser": "#e2d3be", + "backgroundTool": "#e0d6d2", + "text": "#17120d", + "textMuted": "#352e22", + "textSubtle": "#554638", + "textPlaceholder": "#725e4c", + "textAssistant": "#0f4058", + "textUser": "#724615", + "textTool": "#57478b", + "primary": "#824f16", + "secondary": "#a7471c", + "accent": "#824f16", + "accentMuted": "#af8d65", + "error": "#842f24", + "warning": "#654300", + "success": "#3d723d", + "info": "#0d4a68", + "border": "#66513b", + "borderActive": "#824f16", + "borderSubtle": "#8a7358", + "borderFocus": "#0d4a68", + "shadow": "#b6b0a5", + "diffAdded": "#3d723d", + "diffRemoved": "#842f24", + "diffContext": "#352e22", + "diffHunkHeader": "#57478b", + "diffHighlightAdded": "#3d723d", + "diffHighlightRemoved": "#842f24", + "diffAddedBg": "#a7b899", + "diffRemovedBg": "#c49b8f", "diffContextBg": "none", - "diffLineNumber": "#938274", - "diffAddedLineNumberBg": "#395437", - "diffRemovedLineNumberBg": "#68473f", - "diffHunkHeaderBg": "#544b51", - "diffFold": "#b8a99a", - "diffFoldBg": "#181512", - "markdownText": "#e8dfd0", - "markdownHeading": "#d99555", - "markdownLink": "#5f95ca", - "markdownLinkText": "#d99555", - "markdownCode": "#4db35f", - "markdownBlockQuote": "#c96a45", - "markdownEmph": "#5f95ca", - "markdownStrong": "#d99555", - "markdownHorizontalRule": "#968878", - "markdownListItem": "#d99555", - "markdownListEnumeration": "#d4b4e6", - "markdownTableBorder": "#968878", - "markdownTableHeader": "#c96a45", - "markdownImage": "#e29cb4", - "markdownImageText": "#e8dfd0", - "markdownCodeBlock": "#e8dfd0", - "markdownCodeBlockBg": "#231d18", - "markdownInlineCodeBg": "#6ea06a", - "syntaxComment": "#b8a99a", - "syntaxKeyword": "#dc9d59", - "syntaxFunction": "#5f95ca", - "syntaxMethod": "#729ace", - "syntaxVariable": "#d1b5d7", - "syntaxParameter": "#cb714d", - "syntaxProperty": "#6498ca", - "syntaxField": "#55b565", - "syntaxString": "#4db35f", - "syntaxNumber": "#d3864f", - "syntaxBoolean": "#cf7660", - "syntaxConstant": "#cf7660", - "syntaxType": "#d4b4e6", - "syntaxClass": "#d5aecc", - "syntaxInterface": "#baade0", - "syntaxEnum": "#bcb4ce", - "syntaxOperator": "#e29cb4", - "syntaxPunctuation": "#c7b9aa", - "syntaxTag": "#dc9d59", - "syntaxAttribute": "#6498ca", - "syntaxRegexp": "#e597a4", - "syntaxEscape": "#e8b866", - "syntaxNamespace": "#d4b4e6", - "syntaxModule": "#d4b4e6", - "syntaxDecorator": "#e29cb4", - "syntaxBuiltin": "#cf7660", - "syntaxSpecial": "#e8b866", - "syntaxTodo": "#e8bd73", - "syntaxDeprecated": "#e29787", - "terminalBlack": "#84827e", - "terminalRed": "#ed8a7a", - "terminalGreen": "#4db35f", - "terminalYellow": "#e8b866", - "terminalBlue": "#5f95ca", - "terminalMagenta": "#e29cb4", - "terminalCyan": "#78a2cb", - "terminalWhite": "#e8dfd0", - "terminalBrightBlack": "#938274", - "terminalBrightRed": "#ec9989", - "terminalBrightGreen": "#69bb73", - "terminalBrightYellow": "#e8be77", - "terminalBrightBlue": "#78a2cb", - "terminalBrightMagenta": "#e3a8b9", - "terminalBrightCyan": "#d8bce2", - "terminalBrightWhite": "#e8dfd0" + "diffLineNumber": "#554638", + "diffAddedLineNumberBg": "#a7b899", + "diffRemovedLineNumberBg": "#c49b8f", + "diffHunkHeaderBg": "#b8acbd", + "diffFold": "#725e4c", + "diffFoldBg": "#e6d7c4", + "markdownText": "#17120d", + "markdownHeading": "#824f16", + "markdownLink": "#0d4a68", + "markdownLinkText": "#824f16", + "markdownCode": "#3d723d", + "markdownBlockQuote": "#a7471c", + "markdownEmph": "#0d4a68", + "markdownStrong": "#824f16", + "markdownHorizontalRule": "#66513b", + "markdownListItem": "#824f16", + "markdownListEnumeration": "#57478b", + "markdownTableBorder": "#66513b", + "markdownTableHeader": "#a7471c", + "markdownImage": "#7d3e64", + "markdownImageText": "#17120d", + "markdownCodeBlock": "#17120d", + "markdownCodeBlockBg": "#d0bca3", + "markdownInlineCodeBg": "#5e885a", + "syntaxComment": "#725e4c", + "syntaxKeyword": "#7c4c11", + "syntaxFunction": "#0d4a68", + "syntaxMethod": "#194a6e", + "syntaxVariable": "#4e4171", + "syntaxParameter": "#9e441b", + "syntaxProperty": "#0d4864", + "syntaxField": "#3b6d3b", + "syntaxString": "#3d723d", + "syntaxNumber": "#8f4c18", + "syntaxBoolean": "#9d452d", + "syntaxConstant": "#9d452d", + "syntaxType": "#57478b", + "syntaxClass": "#5f4876", + "syntaxInterface": "#474883", + "syntaxEnum": "#524f7d", + "syntaxOperator": "#7d3e64", + "syntaxPunctuation": "#352e22", + "syntaxTag": "#7c4c11", + "syntaxAttribute": "#0d4864", + "syntaxRegexp": "#7f3a52", + "syntaxEscape": "#654300", + "syntaxNamespace": "#57478b", + "syntaxModule": "#57478b", + "syntaxDecorator": "#7d3e64", + "syntaxBuiltin": "#9d452d", + "syntaxSpecial": "#654300", + "syntaxTodo": "#5c3d02", + "syntaxDeprecated": "#6e2f23", + "terminalBlack": "#5e5c57", + "terminalRed": "#842f24", + "terminalGreen": "#3d723d", + "terminalYellow": "#654300", + "terminalBlue": "#0d4a68", + "terminalMagenta": "#7d3e64", + "terminalCyan": "#0f4058", + "terminalWhite": "#17120d", + "terminalBrightBlack": "#554638", + "terminalBrightRed": "#702a20", + "terminalBrightGreen": "#366134", + "terminalBrightYellow": "#593b02", + "terminalBrightBlue": "#0f4058", + "terminalBrightMagenta": "#6b3654", + "terminalBrightCyan": "#4b3d74", + "terminalBrightWhite": "#17120d" } } diff --git a/Antigravity/Dreamcoder.json b/Antigravity/Dreamcoder.json index 38da749..52daf68 100644 --- a/Antigravity/Dreamcoder.json +++ b/Antigravity/Dreamcoder.json @@ -1,49 +1,49 @@ { - "name": "Dreamcoder Ember Noir OLED", + "name": "Dreamcoder Light", "type": "light", "colors": { - "editor.background": "#100f0d", - "editor.foreground": "#e8dfd0", - "activityBar.background": "#201b16", - "activityBar.foreground": "#d99555", - "activityBar.inactiveForeground": "#b8a99a", - "activityBar.border": "#968878", - "sideBar.background": "#201b16", - "sideBar.foreground": "#e8dfd0", - "sideBar.border": "#968878", - "statusBar.background": "#100f0d", - "statusBar.foreground": "#e8dfd0", - "statusBar.border": "#968878", - "editorGroupHeader.tabsBackground": "#201b16", - "tab.activeBackground": "#100f0d", - "tab.activeForeground": "#d99555", - "tab.inactiveBackground": "#201b16", - "tab.inactiveForeground": "#b8a99a", - "tab.border": "#968878", - "editor.lineHighlightBackground": "#201b16", - "editorLineNumber.foreground": "#b8a99a", - "editorLineNumber.activeForeground": "#d99555", - "editorWidget.background": "#2b231b", - "editorWidget.border": "#968878", - "input.background": "#2b231b", - "input.foreground": "#e8dfd0", - "input.border": "#5f8f8f", - "button.background": "#c96a45", - "button.foreground": "#e8dfd0", - "list.activeSelectionBackground": "#2b231b", - "list.activeSelectionForeground": "#e8dfd0", - "list.hoverBackground": "#201b16", - "editor.selectionBackground": "#2b231b", - "terminal.background": "#100f0d", - "terminal.foreground": "#e8dfd0", - "terminal.ansiBlack": "#201b16", - "terminal.ansiRed": "#ed8a7a", - "terminal.ansiGreen": "#4db35f", - "terminal.ansiYellow": "#e8b866", - "terminal.ansiBlue": "#d99555", - "terminal.ansiMagenta": "#e29cb4", - "terminal.ansiCyan": "#5f95ca", - "terminal.ansiWhite": "#e8dfd0" + "editor.background": "#f3eadc", + "editor.foreground": "#17120d", + "activityBar.background": "#fff7ea", + "activityBar.foreground": "#824f16", + "activityBar.inactiveForeground": "#725e4c", + "activityBar.border": "#66513b", + "sideBar.background": "#fff7ea", + "sideBar.foreground": "#17120d", + "sideBar.border": "#66513b", + "statusBar.background": "#f3eadc", + "statusBar.foreground": "#17120d", + "statusBar.border": "#66513b", + "editorGroupHeader.tabsBackground": "#fff7ea", + "tab.activeBackground": "#f3eadc", + "tab.activeForeground": "#824f16", + "tab.inactiveBackground": "#fff7ea", + "tab.inactiveForeground": "#725e4c", + "tab.border": "#66513b", + "editor.lineHighlightBackground": "#fff7ea", + "editorLineNumber.foreground": "#725e4c", + "editorLineNumber.activeForeground": "#824f16", + "editorWidget.background": "#decbb1", + "editorWidget.border": "#66513b", + "input.background": "#decbb1", + "input.foreground": "#17120d", + "input.border": "#0f6570", + "button.background": "#a7471c", + "button.foreground": "#17120d", + "list.activeSelectionBackground": "#decbb1", + "list.activeSelectionForeground": "#17120d", + "list.hoverBackground": "#fff7ea", + "editor.selectionBackground": "#decbb1", + "terminal.background": "#f3eadc", + "terminal.foreground": "#17120d", + "terminal.ansiBlack": "#fff7ea", + "terminal.ansiRed": "#842f24", + "terminal.ansiGreen": "#3d723d", + "terminal.ansiYellow": "#654300", + "terminal.ansiBlue": "#824f16", + "terminal.ansiMagenta": "#7d3e64", + "terminal.ansiCyan": "#0d4a68", + "terminal.ansiWhite": "#17120d" }, "tokenColors": [ { @@ -52,7 +52,7 @@ "punctuation.definition.comment" ], "settings": { - "foreground": "#b8a99a", + "foreground": "#725e4c", "fontStyle": "italic" } }, @@ -64,7 +64,7 @@ "keyword.operator" ], "settings": { - "foreground": "#d99555", + "foreground": "#824f16", "fontStyle": "bold" } }, @@ -75,7 +75,7 @@ "entity.name.method" ], "settings": { - "foreground": "#5f95ca" + "foreground": "#0d4a68" } }, { @@ -84,7 +84,7 @@ "punctuation.definition.string" ], "settings": { - "foreground": "#4db35f" + "foreground": "#3d723d" } }, { @@ -93,7 +93,7 @@ "constant.language" ], "settings": { - "foreground": "#c96a45" + "foreground": "#a7471c" } }, { @@ -103,7 +103,7 @@ "entity.name.class" ], "settings": { - "foreground": "#d4b4e6" + "foreground": "#57478b" } }, { @@ -112,7 +112,7 @@ "meta.definition.variable" ], "settings": { - "foreground": "#e8dfd0" + "foreground": "#17120d" } } ] diff --git a/Bat/.config/bat/themes/Dreamcoder.tmTheme b/Bat/.config/bat/themes/Dreamcoder.tmTheme index cbf424a..057aff6 100644 --- a/Bat/.config/bat/themes/Dreamcoder.tmTheme +++ b/Bat/.config/bat/themes/Dreamcoder.tmTheme @@ -7,32 +7,32 @@ settings settings - background#100f0d - foreground#e8dfd0 - caret#d99555 - selection#2b231b - selectionForeground#e8dfd0 - lineHighlight#2b231b - gutter#392e21 - gutterForeground#c7b9aa - invisibles#b8a99a + background#f3eadc + foreground#17120d + caret#824f16 + selection#decbb1 + selectionForeground#17120d + lineHighlight#decbb1 + gutter#c8ad89 + gutterForeground#352e22 + invisibles#725e4c - scopecommentsettingsforeground#b8a99afontStyleitalic - scopekeyword, storagesettingsforeground#dc9d59fontStylebold - scopeentity.name.function, support.functionsettingsforeground#5f95ca - scopevariable, meta.definition.variablesettingsforeground#d1b5d7 - scopestringsettingsforeground#4db35f - scopeconstant.numeric, constant.languagesettingsforeground#cf7660 - scopeentity.name.type, support.typesettingsforeground#d4b4e6 - scopepunctuation, keyword.operatorsettingsforeground#e29cb4 - scopeconstant.character.escapesettingsforeground#4db35f - scopeentity.name.tagsettingsforeground#dc9d59 - scopeentity.other.attribute-namesettingsforeground#6498ca - scopeinvalidsettingsforeground#ed8a7a - scopemarkup.heading, markup.boldsettingsforeground#d99555fontStylebold - scopemarkup.italicsettingsforeground#5f95cafontStyleitalic - scopemeta.diff, meta.diff.headersettingsforeground#d4b4e6 - scopesupport.class, support.constantsettingsforeground#d4b4e6 + scopecommentsettingsforeground#725e4cfontStyleitalic + scopekeyword, storagesettingsforeground#7c4c11fontStylebold + scopeentity.name.function, support.functionsettingsforeground#0d4a68 + scopevariable, meta.definition.variablesettingsforeground#4e4171 + scopestringsettingsforeground#3d723d + scopeconstant.numeric, constant.languagesettingsforeground#9d452d + scopeentity.name.type, support.typesettingsforeground#57478b + scopepunctuation, keyword.operatorsettingsforeground#7d3e64 + scopeconstant.character.escapesettingsforeground#3d723d + scopeentity.name.tagsettingsforeground#7c4c11 + scopeentity.other.attribute-namesettingsforeground#0d4864 + scopeinvalidsettingsforeground#842f24 + scopemarkup.heading, markup.boldsettingsforeground#824f16fontStylebold + scopemarkup.italicsettingsforeground#0d4a68fontStyleitalic + scopemeta.diff, meta.diff.headersettingsforeground#57478b + scopesupport.class, support.constantsettingsforeground#57478b diff --git a/COMPARISON.md b/COMPARISON.md index f9fd378..1dff4bb 100644 --- a/COMPARISON.md +++ b/COMPARISON.md @@ -5,23 +5,23 @@ ## Feature Comparison -| Feature | Gentleman.Dots | ML4W | **dreamcoder-dots** | -|---------|---------------|------|---------------------| -| **Theme Engine** | ❌ Catppuccin estático | ✅ Matugen dinámico | ✅ **Token-based + WCAG/APCA** | -| **Dark/Light/Dusk** | ❌ Solo dark | ✅ Light/Dark | ✅ **+ Dusk transition mode** | -| **Accesibilidad** | ❌ | ❌ | ✅ **WCAG 4.5:1 + APCA 75** | -| **AI Session Prompt** | ❌ | ❌ | ✅ **Bleeding edge en 2026** | -| **Neovim Plugins** | ✅ 29 (LazyVim) | ❌ | 🔶 Dreamcoder colorscheme | -| **Hyprland Config** | ❌ | ✅ Completo | 🔶 Color overlay | -| **Shell Configs** | ✅ Fish/Zsh/Nushell | ✅ Fish/Bash | 🔶 Aliases + 9 functions | -| **Ghostty Shaders** | ✅ 45+ GLSL | ❌ | 🔶 Usa los de Gentleman | -| **Go TUI Installer** | ✅ Bubbletea | ✅ bash | ✅ Bubbletea + Vim Trainer | -| **Starship Prompt** | ❌ Básico | ❌ Básico | ✅ **23 módulos + AI state** | -| **Python Theme Lib** | ❌ | ❌ | ✅ **Publicada en PyPI** | -| **Homebrew Formula** | ✅ | ❌ | ✅ | -| **Vim Trainer** | ✅ RPG-style | ❌ | ✅ RPG-style | -| **Auto Theme Switch** | ❌ | ✅ Manual | ✅ **Systemd timer** | -| **CI/CD** | ❌ | ❌ | ✅ GitHub Actions | +| Feature | Gentleman.Dots | ML4W | **dreamcoder-dots** | +| --------------------- | ---------------------- | ------------------- | ------------------------------ | +| **Theme Engine** | ❌ Catppuccin estático | ✅ Matugen dinámico | ✅ **Token-based + WCAG/APCA** | +| **Dark/Light/Dusk** | ❌ Solo dark | ✅ Light/Dark | ✅ **+ Dusk transition mode** | +| **Accesibilidad** | ❌ | ❌ | ✅ **WCAG 4.5:1 + APCA 75** | +| **AI Session Prompt** | ❌ | ❌ | ✅ **Bleeding edge en 2026** | +| **Neovim Plugins** | ✅ 29 (LazyVim) | ❌ | 🔶 Dreamcoder colorscheme | +| **Hyprland Config** | ❌ | ✅ Completo | 🔶 Color overlay | +| **Shell Configs** | ✅ Fish/Zsh/Nushell | ✅ Fish/Bash | 🔶 Aliases + 9 functions | +| **Ghostty Shaders** | ✅ 45+ GLSL | ❌ | 🔶 Usa los de Gentleman | +| **Go TUI Installer** | ✅ Bubbletea | ✅ bash | ✅ Bubbletea + Vim Trainer | +| **Starship Prompt** | ❌ Básico | ❌ Básico | ✅ **23 módulos + AI state** | +| **Python Theme Lib** | ❌ | ❌ | ✅ **Publicada en PyPI** | +| **Homebrew Formula** | ✅ | ❌ | ✅ | +| **Vim Trainer** | ✅ RPG-style | ❌ | ✅ RPG-style | +| **Auto Theme Switch** | ❌ | ✅ Manual | ✅ **Systemd timer** | +| **CI/CD** | ❌ | ❌ | ✅ GitHub Actions | > ✅ = lo provee · 🔶 = dreamcoder overlay · ❌ = no lo provee @@ -31,27 +31,27 @@ Después de instalar Dreamcoder, TODO lo de Gentleman sigue funcionando exactamente igual: -| Componente | Qué se queda | Cómo lo usa Dreamcoder | -|-----------|-------------|----------------------| -| **Neovim** | init.lua + 29 plugins | Agrega `colorscheme dreamcoder` al init.lua | -| **Ghostty shaders** | 45+ GLSL | Usa `dreamcoder-cursor-pulse.glsl` por defecto | -| **Tmux** | `~/.tmux.conf` con TPM + kanagawa | `apply-theme-mode.sh` sobreescribe colores kanagawa | -| **Zellij** | `config.kdl` con plugins | Cambia `theme "dreamcoder-{mode}"` | -| **Fish/Zsh/Nushell** | Configs base | Agrega `conf.d/dreamcoder-*.fish` | -| **Vim Trainer** | RPG completo | Sin cambios | -| **Starship** | Config base (si existe) | Reemplaza con 23 módulos | +| Componente | Qué se queda | Cómo lo usa Dreamcoder | +| -------------------- | --------------------------------- | --------------------------------------------------- | +| **Neovim** | init.lua + 29 plugins | Agrega `colorscheme dreamcoder` al init.lua | +| **Ghostty shaders** | 45+ GLSL | Usa `dreamcoder-cursor-pulse.glsl` por defecto | +| **Tmux** | `~/.tmux.conf` con TPM + kanagawa | `apply-theme-mode.sh` sobreescribe colores kanagawa | +| **Zellij** | `config.kdl` con plugins | Cambia `theme "dreamcoder-{mode}"` | +| **Fish/Zsh/Nushell** | Configs base | Agrega `conf.d/dreamcoder-*.fish` | +| **Vim Trainer** | RPG completo | Sin cambios | +| **Starship** | Config base (si existe) | Reemplaza con 23 módulos | ## Lo que se queda de ML4W -| Componente | Qué se queda | Cómo lo usa Dreamcoder | -|-----------|-------------|----------------------| -| **Hyprland** | hyprland.conf + animaciones + keybinds | Agrega `colors.{conf,lua}` con variables de color | -| **Waybar** | `config.jsonc` + `style.css` | Genera `colors.css` con `@import` | -| **Rofi** | `config.rasi` | Genera `colors.rasi` con `@import` | -| **Dunst** | `dunstrc` | Genera `dreamcoder-dunst.conf` con `[include]` | -| **GTK 3.0/4.0** | `settings.ini` | Switchea `prefer-dark-theme` en runtime | -| **Btop** | `btop.conf` | Agrega `dreamcoder.theme` | -| **Matugen** | Pipeline de colores | Dreamcoder corre matugen en cada mode switch | +| Componente | Qué se queda | Cómo lo usa Dreamcoder | +| --------------- | -------------------------------------- | ------------------------------------------------- | +| **Hyprland** | hyprland.conf + animaciones + keybinds | Agrega `colors.{conf,lua}` con variables de color | +| **Waybar** | `config.jsonc` + `style.css` | Genera `colors.css` con `@import` | +| **Rofi** | `config.rasi` | Genera `colors.rasi` con `@import` | +| **Dunst** | `dunstrc` | Genera `dreamcoder-dunst.conf` con `[include]` | +| **GTK 3.0/4.0** | `settings.ini` | Switchea `prefer-dark-theme` en runtime | +| **Btop** | `btop.conf` | Agrega `dreamcoder.theme` | +| **Matugen** | Pipeline de colores | Dreamcoder corre matugen en cada mode switch | --- @@ -73,11 +73,11 @@ Ningún otro dotfiles hace esto. Cada color está validado contra WCAG 4.5:1 y A ### 3 Modos de Color -| Modo | Nombre | BG | Accent | Uso | -|------|--------|----|--------|-----| -| 🌙 Dark | Ember Noir OLED | `#100f0d` | `#d99555` | 18:00-07:00 | -| ☀️ Light | Cocoa/Lúcuma | `#f3eadc` | `#824f16` | 07:00-16:00 | -| 🌆 Dusk | Transición | `#ebe4d6` | `#8a5520` | 16:00-18:00 | +| Modo | Nombre | BG | Accent | Uso | +| -------- | --------------- | --------- | --------- | ----------- | +| 🌙 Dark | Ember Noir OLED | `#100f0d` | `#d99555` | 18:00-07:00 | +| ☀️ Light | Cocoa/Lúcuma | `#f3eadc` | `#824f16` | 07:00-16:00 | +| 🌆 Dusk | Transición | `#ebe4d6` | `#8a5520` | 16:00-18:00 | ### AI Session State en el Prompt @@ -91,17 +91,17 @@ Cuando Claude Code o OpenCode están activos, el prompt muestra: ### 9 Shell Functions -| Función | Para qué | -|---------|----------| -| `extract` | Descomprime CUALQUIER formato | -| `sysupdate` | Actualiza pacman + brew + flatpak | -| `ports` | Muestra puertos en escucha | -| `killport` | Mata proceso en un puerto | -| `dots` | Cd al repo dreamcoder | -| `cheat` | TLDR para help rápido | -| `http` | HTTPie wrapper | -| `logs` | Journalctl wrapper | -| `tm-session` | Tmux session picker | +| Función | Para qué | +| ------------ | --------------------------------- | +| `extract` | Descomprime CUALQUIER formato | +| `sysupdate` | Actualiza pacman + brew + flatpak | +| `ports` | Muestra puertos en escucha | +| `killport` | Mata proceso en un puerto | +| `dots` | Cd al repo dreamcoder | +| `cheat` | TLDR para help rápido | +| `http` | HTTPie wrapper | +| `logs` | Journalctl wrapper | +| `tm-session` | Tmux session picker | ### Modern CLI Aliases diff --git a/Codex-App/Dreamcoder.codex-theme.json b/Codex-App/Dreamcoder.codex-theme.json index 0557a29..032fcab 100644 --- a/Codex-App/Dreamcoder.codex-theme.json +++ b/Codex-App/Dreamcoder.codex-theme.json @@ -1,130 +1,130 @@ { "$schema": "https://opencode.ai/theme.json", "defs": { - "dreamBackground": "#100f0d", - "dreamPanel": "#201b16", - "dreamElement": "#181512", - "dreamText": "#e8dfd0", - "dreamMuted": "#c7b9aa", - "dreamCocoa": "#c96a45", - "dreamLucuma": "#d99555", - "dreamDiagnostic": "#5f95ca", - "dreamSage": "#4db35f", - "dreamViolet": "#d4b4e6", - "dreamMauve": "#e29cb4", - "dreamCoral": "#ed8a7a", - "dreamWarning": "#e8b866" + "dreamBackground": "#f3eadc", + "dreamPanel": "#fff7ea", + "dreamElement": "#e6d7c4", + "dreamText": "#17120d", + "dreamMuted": "#352e22", + "dreamCocoa": "#a7471c", + "dreamLucuma": "#824f16", + "dreamDiagnostic": "#0d4a68", + "dreamSage": "#3d723d", + "dreamViolet": "#57478b", + "dreamMauve": "#7d3e64", + "dreamCoral": "#842f24", + "dreamWarning": "#654300" }, "theme": { - "background": "#100f0d", - "backgroundPanel": "#201b16", - "backgroundElement": "#2b231b", - "backgroundHover": "#2b231b", - "backgroundSelected": "#2b231b", - "textSelected": "#e8dfd0", - "backgroundCode": "#231d18", - "backgroundSearch": "#8d7141", - "backgroundLine": "#181512", - "backgroundAssistant": "#191f24", - "backgroundUser": "#281f16", - "backgroundTool": "#282327", - "text": "#e8dfd0", - "textMuted": "#c7b9aa", - "textSubtle": "#a6988d", - "textPlaceholder": "#b8a99a", - "textAssistant": "#78a2cb", - "textUser": "#dba067", - "textTool": "#d4b4e6", - "primary": "#d99555", - "secondary": "#c96a45", - "accent": "#d99555", - "accentMuted": "#a77443", - "error": "#ed8a7a", - "warning": "#e8b866", - "success": "#4db35f", - "info": "#5f95ca", - "border": "#968878", - "borderActive": "#d99555", - "borderSubtle": "#756052", - "borderFocus": "#5f95ca", - "shadow": "#0c0b0a", - "diffAdded": "#4db35f", - "diffRemoved": "#ed8a7a", - "diffContext": "#c7b9aa", - "diffHunkHeader": "#d4b4e6", - "diffHighlightAdded": "#4db35f", - "diffHighlightRemoved": "#ed8a7a", - "diffAddedBg": "#395437", - "diffRemovedBg": "#68473f", - "diffContextBg": "#100f0d", - "diffLineNumber": "#938274", - "diffAddedLineNumberBg": "#395437", - "diffRemovedLineNumberBg": "#68473f", - "diffHunkHeaderBg": "#544b51", - "diffFold": "#b8a99a", - "diffFoldBg": "#181512", - "markdownText": "#e8dfd0", - "markdownHeading": "#d99555", - "markdownLink": "#5f95ca", - "markdownLinkText": "#d99555", - "markdownCode": "#4db35f", - "markdownBlockQuote": "#c96a45", - "markdownEmph": "#5f95ca", - "markdownStrong": "#d99555", - "markdownHorizontalRule": "#968878", - "markdownListItem": "#d99555", - "markdownListEnumeration": "#d4b4e6", - "markdownTableBorder": "#968878", - "markdownTableHeader": "#c96a45", - "markdownImage": "#e29cb4", - "markdownImageText": "#e8dfd0", - "markdownCodeBlock": "#e8dfd0", - "markdownCodeBlockBg": "#231d18", - "markdownInlineCodeBg": "#6ea06a", - "syntaxComment": "#b8a99a", - "syntaxKeyword": "#dc9d59", - "syntaxFunction": "#5f95ca", - "syntaxMethod": "#729ace", - "syntaxVariable": "#d1b5d7", - "syntaxParameter": "#cb714d", - "syntaxProperty": "#6498ca", - "syntaxField": "#55b565", - "syntaxString": "#4db35f", - "syntaxNumber": "#d3864f", - "syntaxBoolean": "#cf7660", - "syntaxConstant": "#cf7660", - "syntaxType": "#d4b4e6", - "syntaxClass": "#d5aecc", - "syntaxInterface": "#baade0", - "syntaxEnum": "#bcb4ce", - "syntaxOperator": "#e29cb4", - "syntaxPunctuation": "#c7b9aa", - "syntaxTag": "#dc9d59", - "syntaxAttribute": "#6498ca", - "syntaxRegexp": "#e597a4", - "syntaxEscape": "#e8b866", - "syntaxNamespace": "#d4b4e6", - "syntaxModule": "#d4b4e6", - "syntaxDecorator": "#e29cb4", - "syntaxBuiltin": "#cf7660", - "syntaxSpecial": "#e8b866", - "syntaxTodo": "#e8bd73", - "syntaxDeprecated": "#e29787", - "terminalBlack": "#84827e", - "terminalRed": "#ed8a7a", - "terminalGreen": "#4db35f", - "terminalYellow": "#e8b866", - "terminalBlue": "#5f95ca", - "terminalMagenta": "#e29cb4", - "terminalCyan": "#78a2cb", - "terminalWhite": "#e8dfd0", - "terminalBrightBlack": "#938274", - "terminalBrightRed": "#ec9989", - "terminalBrightGreen": "#69bb73", - "terminalBrightYellow": "#e8be77", - "terminalBrightBlue": "#78a2cb", - "terminalBrightMagenta": "#e3a8b9", - "terminalBrightCyan": "#d8bce2", - "terminalBrightWhite": "#e8dfd0" + "background": "#f3eadc", + "backgroundPanel": "#fff7ea", + "backgroundElement": "#e3d2bc", + "backgroundHover": "#decbb1", + "backgroundSelected": "#decbb1", + "textSelected": "#17120d", + "backgroundCode": "#d0bca3", + "backgroundSearch": "#a1895c", + "backgroundLine": "#e6d7c4", + "backgroundAssistant": "#d7d7ce", + "backgroundUser": "#e2d3be", + "backgroundTool": "#e0d6d2", + "text": "#17120d", + "textMuted": "#352e22", + "textSubtle": "#554638", + "textPlaceholder": "#725e4c", + "textAssistant": "#0f4058", + "textUser": "#724615", + "textTool": "#57478b", + "primary": "#824f16", + "secondary": "#a7471c", + "accent": "#824f16", + "accentMuted": "#af8d65", + "error": "#842f24", + "warning": "#654300", + "success": "#3d723d", + "info": "#0d4a68", + "border": "#66513b", + "borderActive": "#824f16", + "borderSubtle": "#8a7358", + "borderFocus": "#0d4a68", + "shadow": "#b6b0a5", + "diffAdded": "#3d723d", + "diffRemoved": "#842f24", + "diffContext": "#352e22", + "diffHunkHeader": "#57478b", + "diffHighlightAdded": "#3d723d", + "diffHighlightRemoved": "#842f24", + "diffAddedBg": "#a7b899", + "diffRemovedBg": "#c49b8f", + "diffContextBg": "#f3eadc", + "diffLineNumber": "#554638", + "diffAddedLineNumberBg": "#a7b899", + "diffRemovedLineNumberBg": "#c49b8f", + "diffHunkHeaderBg": "#b8acbd", + "diffFold": "#725e4c", + "diffFoldBg": "#e6d7c4", + "markdownText": "#17120d", + "markdownHeading": "#824f16", + "markdownLink": "#0d4a68", + "markdownLinkText": "#824f16", + "markdownCode": "#3d723d", + "markdownBlockQuote": "#a7471c", + "markdownEmph": "#0d4a68", + "markdownStrong": "#824f16", + "markdownHorizontalRule": "#66513b", + "markdownListItem": "#824f16", + "markdownListEnumeration": "#57478b", + "markdownTableBorder": "#66513b", + "markdownTableHeader": "#a7471c", + "markdownImage": "#7d3e64", + "markdownImageText": "#17120d", + "markdownCodeBlock": "#17120d", + "markdownCodeBlockBg": "#d0bca3", + "markdownInlineCodeBg": "#5e885a", + "syntaxComment": "#725e4c", + "syntaxKeyword": "#7c4c11", + "syntaxFunction": "#0d4a68", + "syntaxMethod": "#194a6e", + "syntaxVariable": "#4e4171", + "syntaxParameter": "#9e441b", + "syntaxProperty": "#0d4864", + "syntaxField": "#3b6d3b", + "syntaxString": "#3d723d", + "syntaxNumber": "#8f4c18", + "syntaxBoolean": "#9d452d", + "syntaxConstant": "#9d452d", + "syntaxType": "#57478b", + "syntaxClass": "#5f4876", + "syntaxInterface": "#474883", + "syntaxEnum": "#524f7d", + "syntaxOperator": "#7d3e64", + "syntaxPunctuation": "#352e22", + "syntaxTag": "#7c4c11", + "syntaxAttribute": "#0d4864", + "syntaxRegexp": "#7f3a52", + "syntaxEscape": "#654300", + "syntaxNamespace": "#57478b", + "syntaxModule": "#57478b", + "syntaxDecorator": "#7d3e64", + "syntaxBuiltin": "#9d452d", + "syntaxSpecial": "#654300", + "syntaxTodo": "#5c3d02", + "syntaxDeprecated": "#6e2f23", + "terminalBlack": "#5e5c57", + "terminalRed": "#842f24", + "terminalGreen": "#3d723d", + "terminalYellow": "#654300", + "terminalBlue": "#0d4a68", + "terminalMagenta": "#7d3e64", + "terminalCyan": "#0f4058", + "terminalWhite": "#17120d", + "terminalBrightBlack": "#554638", + "terminalBrightRed": "#702a20", + "terminalBrightGreen": "#366134", + "terminalBrightYellow": "#593b02", + "terminalBrightBlue": "#0f4058", + "terminalBrightMagenta": "#6b3654", + "terminalBrightCyan": "#4b3d74", + "terminalBrightWhite": "#17120d" } } diff --git a/Codex-CLI/Dreamcoder.tmTheme b/Codex-CLI/Dreamcoder.tmTheme index cbf424a..057aff6 100644 --- a/Codex-CLI/Dreamcoder.tmTheme +++ b/Codex-CLI/Dreamcoder.tmTheme @@ -7,32 +7,32 @@ settings settings - background#100f0d - foreground#e8dfd0 - caret#d99555 - selection#2b231b - selectionForeground#e8dfd0 - lineHighlight#2b231b - gutter#392e21 - gutterForeground#c7b9aa - invisibles#b8a99a + background#f3eadc + foreground#17120d + caret#824f16 + selection#decbb1 + selectionForeground#17120d + lineHighlight#decbb1 + gutter#c8ad89 + gutterForeground#352e22 + invisibles#725e4c - scopecommentsettingsforeground#b8a99afontStyleitalic - scopekeyword, storagesettingsforeground#dc9d59fontStylebold - scopeentity.name.function, support.functionsettingsforeground#5f95ca - scopevariable, meta.definition.variablesettingsforeground#d1b5d7 - scopestringsettingsforeground#4db35f - scopeconstant.numeric, constant.languagesettingsforeground#cf7660 - scopeentity.name.type, support.typesettingsforeground#d4b4e6 - scopepunctuation, keyword.operatorsettingsforeground#e29cb4 - scopeconstant.character.escapesettingsforeground#4db35f - scopeentity.name.tagsettingsforeground#dc9d59 - scopeentity.other.attribute-namesettingsforeground#6498ca - scopeinvalidsettingsforeground#ed8a7a - scopemarkup.heading, markup.boldsettingsforeground#d99555fontStylebold - scopemarkup.italicsettingsforeground#5f95cafontStyleitalic - scopemeta.diff, meta.diff.headersettingsforeground#d4b4e6 - scopesupport.class, support.constantsettingsforeground#d4b4e6 + scopecommentsettingsforeground#725e4cfontStyleitalic + scopekeyword, storagesettingsforeground#7c4c11fontStylebold + scopeentity.name.function, support.functionsettingsforeground#0d4a68 + scopevariable, meta.definition.variablesettingsforeground#4e4171 + scopestringsettingsforeground#3d723d + scopeconstant.numeric, constant.languagesettingsforeground#9d452d + scopeentity.name.type, support.typesettingsforeground#57478b + scopepunctuation, keyword.operatorsettingsforeground#7d3e64 + scopeconstant.character.escapesettingsforeground#3d723d + scopeentity.name.tagsettingsforeground#7c4c11 + scopeentity.other.attribute-namesettingsforeground#0d4864 + scopeinvalidsettingsforeground#842f24 + scopemarkup.heading, markup.boldsettingsforeground#824f16fontStylebold + scopemarkup.italicsettingsforeground#0d4a68fontStyleitalic + scopemeta.diff, meta.diff.headersettingsforeground#57478b + scopesupport.class, support.constantsettingsforeground#57478b diff --git a/Ghostty/.config/ghostty/config b/Ghostty/.config/ghostty/config index f75ad2c..269ee94 100644 --- a/Ghostty/.config/ghostty/config +++ b/Ghostty/.config/ghostty/config @@ -9,7 +9,7 @@ font-size = 14 font-feature = -calt, -liga, -dlig # Theme — mode-tracking (sync writes here, follows light/dark) -theme = dreamcoder-dark +theme = dreamcoder # Shell command = fish --login diff --git a/Ghostty/.config/ghostty/themes/dreamcoder b/Ghostty/.config/ghostty/themes/dreamcoder index d189dae..b20ae7c 100644 --- a/Ghostty/.config/ghostty/themes/dreamcoder +++ b/Ghostty/.config/ghostty/themes/dreamcoder @@ -1,27 +1,27 @@ -# Dreamcoder Ember Noir OLED -background = #100f0d -foreground = #e8dfd0 -cursor-color = #d99555 -cursor-text = #100f0d -selection-background = #2b231b -selection-foreground = #e8dfd0 -background-opacity = 0.76 -background-blur = true +# Dreamcoder Light +background = #f3eadc +foreground = #17120d +cursor-color = #824f16 +cursor-text = #fff7ea +selection-background = #decbb1 +selection-foreground = #17120d +background-opacity = 0.96 +background-blur = false minimum-contrast = 4.5 -palette = 0=#84827e -palette = 1=#ed8a7a -palette = 2=#4db35f -palette = 3=#d99555 -palette = 4=#5f95ca -palette = 5=#e29cb4 -palette = 6=#d4b4e6 -palette = 7=#c7b9aa -palette = 8=#938274 -palette = 9=#ec9989 -palette = 10=#69bb73 -palette = 11=#e8b866 -palette = 12=#78a2cb -palette = 13=#d8bce2 -palette = 14=#789d9b -palette = 15=#e8dfd0 +palette = 0=#5e5c57 +palette = 1=#842f24 +palette = 2=#3d723d +palette = 3=#824f16 +palette = 4=#0d4a68 +palette = 5=#7d3e64 +palette = 6=#57478b +palette = 7=#352e22 +palette = 8=#554638 +palette = 9=#702a20 +palette = 10=#366134 +palette = 11=#654300 +palette = 12=#0f4058 +palette = 13=#4b3d74 +palette = 14=#10565e +palette = 15=#17120d diff --git a/Kitty/.config/kitty/colors-dreamcoder.conf b/Kitty/.config/kitty/colors-dreamcoder.conf index f4ea373..be98492 100644 --- a/Kitty/.config/kitty/colors-dreamcoder.conf +++ b/Kitty/.config/kitty/colors-dreamcoder.conf @@ -1,52 +1,52 @@ # ========================================================== -# Dreamcoder Ember Noir OLED +# Dreamcoder Light # ========================================================== # Color-only theme layer. Keep ML4W/Gentleman behavior elsewhere. -foreground #e8dfd0 -background #100f0d -selection_foreground #e8dfd0 -selection_background #2b231b -url_color #d99555 +foreground #17120d +background #f3eadc +selection_foreground #17120d +selection_background #decbb1 +url_color #824f16 -cursor #d99555 -cursor_text_color #100f0d +cursor #824f16 +cursor_text_color #fff7ea cursor_shape block cursor_blink_interval 0.5 cursor_stop_blinking_after 15.0 -active_tab_foreground #100f0d -active_tab_background #d99555 -inactive_tab_foreground #c7b9aa -inactive_tab_background #100f0d -tab_bar_background #100f0d +active_tab_foreground #fff7ea +active_tab_background #824f16 +inactive_tab_foreground #352e22 +inactive_tab_background #f3eadc +tab_bar_background #f3eadc -active_border_color #d99555 -inactive_border_color #756052 -bell_border_color #ed8a7a +active_border_color #824f16 +inactive_border_color #8a7358 +bell_border_color #842f24 -color0 #84827e -color1 #ed8a7a -color2 #4db35f -color3 #d99555 -color4 #5f95ca -color5 #e29cb4 -color6 #d4b4e6 -color7 #c7b9aa -color8 #938274 -color9 #ec9989 -color10 #69bb73 -color11 #e8b866 -color12 #78a2cb -color13 #d8bce2 -color14 #789d9b -color15 #e8dfd0 -color16 #c96a45 -color17 #ed8a7a +color0 #5e5c57 +color1 #842f24 +color2 #3d723d +color3 #824f16 +color4 #0d4a68 +color5 #7d3e64 +color6 #57478b +color7 #352e22 +color8 #554638 +color9 #702a20 +color10 #366134 +color11 #654300 +color12 #0f4058 +color13 #4b3d74 +color14 #10565e +color15 #17120d +color16 #a7471c +color17 #842f24 -mark1_foreground #100f0d -mark1_background #d99555 -mark2_foreground #e8dfd0 -mark2_background #5f95ca -mark3_foreground #e8dfd0 -mark3_background #e29cb4 +mark1_foreground #fff7ea +mark1_background #824f16 +mark2_foreground #17120d +mark2_background #0d4a68 +mark3_foreground #17120d +mark3_background #7d3e64 diff --git a/Kitty/.config/kitty/dreamcoder-ui.conf b/Kitty/.config/kitty/dreamcoder-ui.conf index 7e017de..bc33c8d 100644 --- a/Kitty/.config/kitty/dreamcoder-ui.conf +++ b/Kitty/.config/kitty/dreamcoder-ui.conf @@ -19,9 +19,9 @@ single_window_padding_width -1 placement_strategy center initial_window_width 1180 initial_window_height 780 -background_opacity 0.76 +background_opacity 0.96 dynamic_background_opacity no -background_blur 24 +background_blur 0 input_delay 0 repaint_delay 1 diff --git a/Pi/.pi/agent/themes/dreamcoder-light.json b/Pi/.pi/agent/themes/dreamcoder-light.json index 1175909..88ac1e0 100644 --- a/Pi/.pi/agent/themes/dreamcoder-light.json +++ b/Pi/.pi/agent/themes/dreamcoder-light.json @@ -2,18 +2,18 @@ "$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json", "name": "dreamcoder", "vars": { - "cocoa": "#c96a45", - "lucuma": "#d99555", - "diagnostic": "#5f95ca", - "sage": "#4db35f", - "mauve": "#e29cb4", - "coral": "#ed8a7a", - "warning": "#e8b866", - "muted": "#c7b9aa", - "subtle": "#938274", - "comment": "#b8a99a", - "borderUi": "#968878", - "borderMuted": "#756052" + "cocoa": "#a7471c", + "lucuma": "#824f16", + "diagnostic": "#0d4a68", + "sage": "#3d723d", + "mauve": "#7d3e64", + "coral": "#842f24", + "warning": "#654300", + "muted": "#352e22", + "subtle": "#554638", + "comment": "#725e4c", + "borderUi": "#66513b", + "borderMuted": "#8a7358" }, "colors": { "accent": "lucuma", @@ -27,15 +27,15 @@ "dim": "subtle", "text": "", "thinkingText": "muted", - "selectedBg": "#2b231b", - "userMessageBg": "#302419", + "selectedBg": "#decbb1", + "userMessageBg": "#e1d1bc", "userMessageText": "", - "customMessageBg": "#201b16", + "customMessageBg": "#fff7ea", "customMessageText": "", "customMessageLabel": "lucuma", - "toolPendingBg": "#171411", - "toolSuccessBg": "#1b2d1c", - "toolErrorBg": "#33231e", + "toolPendingBg": "#f8f0e2", + "toolSuccessBg": "#d2d4bf", + "toolErrorBg": "#e1ccbf", "toolTitle": "lucuma", "toolOutput": "", "mdHeading": "lucuma", @@ -52,17 +52,17 @@ "toolDiffRemoved": "coral", "toolDiffContext": "muted", "syntaxComment": "comment", - "syntaxKeyword": "#dc9d59", - "syntaxFunction": "#5f95ca", - "syntaxVariable": "#d1b5d7", - "syntaxString": "#4db35f", - "syntaxNumber": "#d3864f", - "syntaxType": "#d4b4e6", - "syntaxOperator": "#e29cb4", - "syntaxPunctuation": "#c7b9aa", + "syntaxKeyword": "#7c4c11", + "syntaxFunction": "#0d4a68", + "syntaxVariable": "#4e4171", + "syntaxString": "#3d723d", + "syntaxNumber": "#8f4c18", + "syntaxType": "#57478b", + "syntaxOperator": "#7d3e64", + "syntaxPunctuation": "#352e22", "thinkingOff": "comment", "thinkingMinimal": "borderUi", - "thinkingLow": "#6f9ecb", + "thinkingLow": "#0e435d", "thinkingMedium": "diagnostic", "thinkingHigh": "mauve", "thinkingXhigh": "coral", diff --git a/Pi/.pi/agent/themes/dreamcoder.json b/Pi/.pi/agent/themes/dreamcoder.json index 1175909..88ac1e0 100644 --- a/Pi/.pi/agent/themes/dreamcoder.json +++ b/Pi/.pi/agent/themes/dreamcoder.json @@ -2,18 +2,18 @@ "$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json", "name": "dreamcoder", "vars": { - "cocoa": "#c96a45", - "lucuma": "#d99555", - "diagnostic": "#5f95ca", - "sage": "#4db35f", - "mauve": "#e29cb4", - "coral": "#ed8a7a", - "warning": "#e8b866", - "muted": "#c7b9aa", - "subtle": "#938274", - "comment": "#b8a99a", - "borderUi": "#968878", - "borderMuted": "#756052" + "cocoa": "#a7471c", + "lucuma": "#824f16", + "diagnostic": "#0d4a68", + "sage": "#3d723d", + "mauve": "#7d3e64", + "coral": "#842f24", + "warning": "#654300", + "muted": "#352e22", + "subtle": "#554638", + "comment": "#725e4c", + "borderUi": "#66513b", + "borderMuted": "#8a7358" }, "colors": { "accent": "lucuma", @@ -27,15 +27,15 @@ "dim": "subtle", "text": "", "thinkingText": "muted", - "selectedBg": "#2b231b", - "userMessageBg": "#302419", + "selectedBg": "#decbb1", + "userMessageBg": "#e1d1bc", "userMessageText": "", - "customMessageBg": "#201b16", + "customMessageBg": "#fff7ea", "customMessageText": "", "customMessageLabel": "lucuma", - "toolPendingBg": "#171411", - "toolSuccessBg": "#1b2d1c", - "toolErrorBg": "#33231e", + "toolPendingBg": "#f8f0e2", + "toolSuccessBg": "#d2d4bf", + "toolErrorBg": "#e1ccbf", "toolTitle": "lucuma", "toolOutput": "", "mdHeading": "lucuma", @@ -52,17 +52,17 @@ "toolDiffRemoved": "coral", "toolDiffContext": "muted", "syntaxComment": "comment", - "syntaxKeyword": "#dc9d59", - "syntaxFunction": "#5f95ca", - "syntaxVariable": "#d1b5d7", - "syntaxString": "#4db35f", - "syntaxNumber": "#d3864f", - "syntaxType": "#d4b4e6", - "syntaxOperator": "#e29cb4", - "syntaxPunctuation": "#c7b9aa", + "syntaxKeyword": "#7c4c11", + "syntaxFunction": "#0d4a68", + "syntaxVariable": "#4e4171", + "syntaxString": "#3d723d", + "syntaxNumber": "#8f4c18", + "syntaxType": "#57478b", + "syntaxOperator": "#7d3e64", + "syntaxPunctuation": "#352e22", "thinkingOff": "comment", "thinkingMinimal": "borderUi", - "thinkingLow": "#6f9ecb", + "thinkingLow": "#0e435d", "thinkingMedium": "diagnostic", "thinkingHigh": "mauve", "thinkingXhigh": "coral", diff --git a/README.md b/README.md index 94dc74d..a9d444e 100644 --- a/README.md +++ b/README.md @@ -50,18 +50,18 @@ cd ~/Documents/PROYECTOS/dreamcoder-dots ## ¿Por qué Dreamcoder? -| Feature | Gentleman.Dots | ML4W | **dreamcoder-dots** | -|---------|---------------|------|---------------------| -| **Theme Engine** | ❌ Catppuccin | ✅ Matugen | ✅ **Token-based + WCAG/APCA** | -| **Light/Dark/Dusk** | ❌ | ✅ | ✅ **+ Dusk transition** | -| **AI Session Prompt** | ❌ | ❌ | ✅ **Bleeding edge** | -| **Accesibilidad** | ❌ | ❌ | ✅ **WCAG 4.5:1 + APCA 75** | -| **Neovim** | ✅ 29 plugins | ❌ | 🔶 Dreamcoder colorscheme | -| **Hyprland** | ❌ | ✅ Completo | 🔶 Color overlay | -| **Shell Configs** | ✅ Fish/Zsh/Nushell | ✅ Fish/Bash | 🔶 Aliases + functions | -| **Ghostty Shaders** | ✅ 45+ GLSL | ❌ | 🔶 Usa los de Gentleman | -| **Installer** | ✅ Go TUI | ✅ bash | ✅ **Go TUI + Vim Trainer** | -| **Prompt** | ❌ Básico | ❌ Básico | ✅ **Starship 23 módulos** | +| Feature | Gentleman.Dots | ML4W | **dreamcoder-dots** | +| --------------------- | ------------------- | ------------ | ------------------------------ | +| **Theme Engine** | ❌ Catppuccin | ✅ Matugen | ✅ **Token-based + WCAG/APCA** | +| **Light/Dark/Dusk** | ❌ | ✅ | ✅ **+ Dusk transition** | +| **AI Session Prompt** | ❌ | ❌ | ✅ **Bleeding edge** | +| **Accesibilidad** | ❌ | ❌ | ✅ **WCAG 4.5:1 + APCA 75** | +| **Neovim** | ✅ 29 plugins | ❌ | 🔶 Dreamcoder colorscheme | +| **Hyprland** | ❌ | ✅ Completo | 🔶 Color overlay | +| **Shell Configs** | ✅ Fish/Zsh/Nushell | ✅ Fish/Bash | 🔶 Aliases + functions | +| **Ghostty Shaders** | ✅ 45+ GLSL | ❌ | 🔶 Usa los de Gentleman | +| **Installer** | ✅ Go TUI | ✅ bash | ✅ **Go TUI + Vim Trainer** | +| **Prompt** | ❌ Básico | ❌ Básico | ✅ **Starship 23 módulos** | > ✅ = lo tiene completo · 🔶 = dreamcoder aporta overlay · ❌ = no lo tiene @@ -153,12 +153,12 @@ Dreamcoder no es un rice neon. Es un banco de trabajo: ## Projecto -| Aspecto | Detalle | -|---------|---------| -| **Estado** | Active | -| **Versión** | 1.0 | -| **Licencia** | MIT | -| **Docs** | [docs/README.md](docs/README.md) | +| Aspecto | Detalle | +| -------------- | ---------------------------------- | +| **Estado** | Active | +| **Versión** | 1.0 | +| **Licencia** | MIT | +| **Docs** | [docs/README.md](docs/README.md) | | **Contribuir** | [CONTRIBUTING.md](CONTRIBUTING.md) | --- diff --git a/Shell/.config/starship-dark.toml b/Shell/.config/starship-dark.toml index ae9f8b2..4285c3b 100644 --- a/Shell/.config/starship-dark.toml +++ b/Shell/.config/starship-dark.toml @@ -2,7 +2,7 @@ # Dreamcoder Ember Noir OLED — Starship prompt # ======================================================== # Two-line powerline layout with context-aware modules. -# Line 1: ssh_context, directory, git + fill + battery/k8s/terraform/cmd/time +# Line 1: username, directory, git + fill + battery/k8s/terraform/cmd/time # Line 2: character (with exit code indicator on error) add_newline = true @@ -11,7 +11,7 @@ command_timeout = 500 format = """ [\uECA6](fg:prompt_surface0)\ -$ssh_context\ +$username\ [\uECA0](bg:prompt_surface1 fg:prompt_surface0)\ $directory\ [\uECA0](bg:prompt_accent fg:prompt_surface1)\ @@ -50,17 +50,11 @@ border = "#968878" focus = "#5f8f8f" link = "#d99555" -[ssh_context] -format = "[$ssh_connection$user@$host]($style)" -style = "bg:prompt_surface0 fg:prompt_text bold" -ssh_only = false - [username] -show_always = false +show_always = true style_user = "bg:prompt_surface0 fg:prompt_text bold" style_root = "bg:prompt_surface0 fg:error bold" -format = "[ \uf081 $user ]($style)" -detect_env_vars = ["SSH_CONNECTION", "SSH_CLIENT", "SSH_TTY"] +format = "[ \uf007 $user ]($style)" [directory] style = "bg:prompt_surface1 fg:prompt_text bold" @@ -98,11 +92,11 @@ pipestatus = false [battery] disabled = false display = [ - {threshold = 20, style = "fg:error bold", symbol = "\uf244 "}, + {threshold = 20, style = "fg:error bold", discharging_symbol = "\uf244 "}, ] [kubernetes] -format = "[$symbol$context( \($namespace\))]($style)" +format = '[$symbol$context( \($namespace\))]($style)' style = "fg:diagnostic bold" symbol = "\uF3B2 " disabled = false diff --git a/Shell/.config/starship-light.toml b/Shell/.config/starship-light.toml index 671e0dc..5715b08 100644 --- a/Shell/.config/starship-light.toml +++ b/Shell/.config/starship-light.toml @@ -2,7 +2,7 @@ # Dreamcoder Light — Starship prompt # ======================================================== # Two-line powerline layout with context-aware modules. -# Line 1: ssh_context, directory, git + fill + battery/k8s/terraform/cmd/time +# Line 1: username, directory, git + fill + battery/k8s/terraform/cmd/time # Line 2: character (with exit code indicator on error) add_newline = true @@ -11,7 +11,7 @@ command_timeout = 500 format = """ [\uECA6](fg:prompt_surface0)\ -$ssh_context\ +$username\ [\uECA0](bg:prompt_surface1 fg:prompt_surface0)\ $directory\ [\uECA0](bg:prompt_accent fg:prompt_surface1)\ @@ -50,17 +50,11 @@ border = "#66513b" focus = "#0f6570" link = "#824f16" -[ssh_context] -format = "[$ssh_connection$user@$host]($style)" -style = "bg:prompt_surface0 fg:prompt_text bold" -ssh_only = false - [username] -show_always = false +show_always = true style_user = "bg:prompt_surface0 fg:prompt_text bold" style_root = "bg:prompt_surface0 fg:error bold" -format = "[ \uf081 $user ]($style)" -detect_env_vars = ["SSH_CONNECTION", "SSH_CLIENT", "SSH_TTY"] +format = "[ \uf007 $user ]($style)" [directory] style = "bg:prompt_surface1 fg:prompt_text bold" @@ -98,11 +92,11 @@ pipestatus = false [battery] disabled = false display = [ - {threshold = 20, style = "fg:error bold", symbol = "\uf244 "}, + {threshold = 20, style = "fg:error bold", discharging_symbol = "\uf244 "}, ] [kubernetes] -format = "[$symbol$context( \($namespace\))]($style)" +format = '[$symbol$context( \($namespace\))]($style)' style = "fg:diagnostic bold" symbol = "\uF3B2 " disabled = false diff --git a/Shell/.config/starship.toml b/Shell/.config/starship.toml index be9fa49..5715b08 100644 --- a/Shell/.config/starship.toml +++ b/Shell/.config/starship.toml @@ -1,5 +1,5 @@ # ======================================================== -# Dreamcoder Ember Noir OLED — Starship prompt +# Dreamcoder Light — Starship prompt # ======================================================== # Two-line powerline layout with context-aware modules. # Line 1: username, directory, git + fill + battery/k8s/terraform/cmd/time @@ -29,33 +29,32 @@ $character""" right_format = "" [palettes.dreamcoder] -bg = "#100f0d" -text = "#e8dfd0" -muted = "#c7b9aa" -prompt_bg = "#18100c" -prompt_surface0 = "#2a1c14" -prompt_surface1 = "#4a2c18" -prompt_surface2 = "#6a3e1e" -prompt_text = "#fff0df" -prompt_muted = "#dcc3aa" -prompt_accent = "#e6a15c" -prompt_accent_2 = "#d66f50" -sage = "#4db35f" -diagnostic = "#5f95ca" -lavender = "#d4b4e6" -mauve = "#e29cb4" -error = "#ed8a7a" -warning = "#e8b866" -border = "#968878" -focus = "#5f8f8f" -link = "#d99555" +bg = "#f3eadc" +text = "#17120d" +muted = "#352e22" +prompt_bg = "#f3eadc" +prompt_surface0 = "#fff0d8" +prompt_surface1 = "#d6ac72" +prompt_surface2 = "#b87c40" +prompt_text = "#20150c" +prompt_muted = "#53402e" +prompt_accent = "#8a5520" +prompt_accent_2 = "#a7471c" +sage = "#3d723d" +diagnostic = "#0d4a68" +lavender = "#57478b" +mauve = "#7d3e64" +error = "#842f24" +warning = "#654300" +border = "#66513b" +focus = "#0f6570" +link = "#824f16" [username] show_always = true style_user = "bg:prompt_surface0 fg:prompt_text bold" style_root = "bg:prompt_surface0 fg:error bold" format = "[ \uf007 $user ]($style)" -detect_env_vars = ["SSH_CONNECTION", "SSH_CLIENT", "SSH_TTY"] [directory] style = "bg:prompt_surface1 fg:prompt_text bold" @@ -93,7 +92,7 @@ pipestatus = false [battery] disabled = false display = [ - {threshold = 20, style = "fg:error bold", symbol = "\uf244 "}, + {threshold = 20, style = "fg:error bold", discharging_symbol = "\uf244 "}, ] [kubernetes] diff --git a/Tmux/.config/tmux/tmux-dreamcoder.conf b/Tmux/.config/tmux/tmux-dreamcoder.conf index 4c7b269..cf73691 100644 --- a/Tmux/.config/tmux/tmux-dreamcoder.conf +++ b/Tmux/.config/tmux/tmux-dreamcoder.conf @@ -1,5 +1,5 @@ -# Dreamcoder Ember Noir OLED — tmux dark theme -# Source: tmux source-file ~/.config/tmux/tmux-dreamcoder-dark.conf +# Dreamcoder Light — tmux light theme +# Source: tmux source-file ~/.config/tmux/tmux-dreamcoder-light.conf # Default terminal colours (truecolor) set -g default-terminal "tmux-256color" @@ -7,36 +7,36 @@ set -ga terminal-overrides ",*256col*:Tc" set -ga terminal-overrides '*:Ss=\E[%p1%d q:Se=\E[2 q' # Panes -set -g pane-border-style "fg=#392e21,bg=default" -set -g pane-active-border-style "fg=#5f8f8f,bg=default" -set -g display-panes-colour "#d99555" -set -g display-panes-active-colour "#d99555" +set -g pane-border-style "fg=#c8ad89,bg=default" +set -g pane-active-border-style "fg=#0f6570,bg=default" +set -g display-panes-colour "#824f16" +set -g display-panes-active-colour "#824f16" # Status bar -set -g status-style "fg=#e8dfd0,bg=#181512" -set -g status-left-style "fg=#100f0d,bg=#d99555" -set -g status-right-style "fg=#c7b9aa,bg=#181512" +set -g status-style "fg=#17120d,bg=#e6d7c4" +set -g status-left-style "fg=#f3eadc,bg=#824f16" +set -g status-right-style "fg=#352e22,bg=#e6d7c4" -set -g status-left "#[fg=#100f0d,bg=#d99555,bold]  #S #[fg=#d99555,bg=#181512,nobold]" -set -g status-right "#[fg=#181512,bg=#181512]#[fg=#c7b9aa,bg=#181512] %H:%M #[fg=#2b231b]#[fg=#c7b9aa,bg=#2b231b] %d-%b-%y " +set -g status-left "#[fg=#f3eadc,bg=#824f16,bold]  #S #[fg=#824f16,bg=#e6d7c4,nobold]" +set -g status-right "#[fg=#e6d7c4,bg=#e6d7c4]#[fg=#352e22,bg=#e6d7c4] %H:%M #[fg=#decbb1]#[fg=#352e22,bg=#decbb1] %d-%b-%y " # Status position set -g status-position top set -g status-interval 5 # Window tabs -setw -g window-status-style "fg=#c7b9aa,bg=#181512" -setw -g window-status-current-style "fg=#100f0d,bg=#d99555,bold" +setw -g window-status-style "fg=#352e22,bg=#e6d7c4" +setw -g window-status-current-style "fg=#f3eadc,bg=#824f16,bold" setw -g window-status-format " #I:#W " setw -g window-status-current-format " #I:#W " setw -g window-status-separator "" # Message -set -g message-style "fg=#e8dfd0,bg=#201b16" -set -g message-command-style "fg=#e8dfd0,bg=#201b16" +set -g message-style "fg=#17120d,bg=#fff7ea" +set -g message-command-style "fg=#17120d,bg=#fff7ea" # Mode (copy mode) -setw -g mode-style "fg=#100f0d,bg=#5f8f8f" +setw -g mode-style "fg=#f3eadc,bg=#0f6570" # Bell -setw -g window-status-bell-style "fg=#100f0d,bg=#ed8a7a,bold" +setw -g window-status-bell-style "fg=#f3eadc,bg=#842f24,bold" diff --git a/Warp/.local/share/warp-terminal/themes/Dreamcoder-Light.yaml b/Warp/.local/share/warp-terminal/themes/Dreamcoder-Light.yaml index 22c7f47..2883718 100644 --- a/Warp/.local/share/warp-terminal/themes/Dreamcoder-Light.yaml +++ b/Warp/.local/share/warp-terminal/themes/Dreamcoder-Light.yaml @@ -1,25 +1,25 @@ -name: Dreamcoder Ember Noir OLED -accent: '#d99555' -cursor: '#d99555' -background: '#100f0d' -foreground: '#e8dfd0' -details: darker +name: Dreamcoder Light +accent: '#824f16' +cursor: '#824f16' +background: '#f3eadc' +foreground: '#17120d' +details: lighter terminal_colors: normal: - black: '#84827e' - red: '#ed8a7a' - green: '#4db35f' - yellow: '#d99555' - blue: '#5f95ca' - magenta: '#e29cb4' - cyan: '#d4b4e6' - white: '#c7b9aa' + black: '#5e5c57' + red: '#842f24' + green: '#3d723d' + yellow: '#824f16' + blue: '#0d4a68' + magenta: '#7d3e64' + cyan: '#57478b' + white: '#352e22' bright: - black: '#938274' - red: '#ec9989' - green: '#69bb73' - yellow: '#e8b866' - blue: '#78a2cb' - magenta: '#d8bce2' - cyan: '#789d9b' - white: '#e8dfd0' + black: '#554638' + red: '#702a20' + green: '#366134' + yellow: '#654300' + blue: '#0f4058' + magenta: '#4b3d74' + cyan: '#10565e' + white: '#17120d' diff --git a/Zellij/.config/zellij/config.kdl b/Zellij/.config/zellij/config.kdl index eae83bb..3679a68 100644 --- a/Zellij/.config/zellij/config.kdl +++ b/Zellij/.config/zellij/config.kdl @@ -36,4 +36,4 @@ plugins { } // Theme -theme "dreamcoder-dark" \ No newline at end of file +theme "dreamcoder-light" \ No newline at end of file diff --git a/installer/installer b/installer/installer index 242410799579580e38d03275cb4b7302eaf574b3..af3e765e9eeaf84925b277bdb77186b8673a7157 100755 GIT binary patch literal 6140386 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

8fDft3YmBC^`tzF0V!YM1(JniK@nDA<=7p)h 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

  • ByK?LlcU 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

    K!L~ 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 J8xoH)x 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

    LeI-J|TX@EEI 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

    qh)h1^iRReWEA)Ch|PyFqW$Zcny7s%22(h;pG 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