hueman-cli 0.2.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. hueman/__init__.py +11 -0
  2. hueman/__main__.py +3 -0
  3. hueman/cli.py +353 -0
  4. hueman/data/hueman.config.example.yaml +111 -0
  5. hueman/engine/__init__.py +0 -0
  6. hueman/engine/colors.py +30 -0
  7. hueman/engine/config.py +186 -0
  8. hueman/engine/fsutil.py +41 -0
  9. hueman/engine/palettes.py +66 -0
  10. hueman/engine/reload.py +60 -0
  11. hueman/engine/render.py +243 -0
  12. hueman/engine/statesource.py +370 -0
  13. hueman/engine/targets.py +95 -0
  14. hueman/palettes/arctic-ice.yaml +102 -0
  15. hueman/palettes/autumn.yaml +102 -0
  16. hueman/palettes/catppuccin-latte.yaml +102 -0
  17. hueman/palettes/catppuccin-mocha.yaml +102 -0
  18. hueman/palettes/copperwave.yaml +103 -0
  19. hueman/palettes/crimson-vivid.yaml +111 -0
  20. hueman/palettes/dracula.yaml +102 -0
  21. hueman/palettes/ember-red.yaml +111 -0
  22. hueman/palettes/everforest-dark.yaml +102 -0
  23. hueman/palettes/galaxy.yaml +102 -0
  24. hueman/palettes/gruvbox-light.yaml +102 -0
  25. hueman/palettes/gruvbox.yaml +102 -0
  26. hueman/palettes/kanagawa-dragon.yaml +102 -0
  27. hueman/palettes/matrix.yaml +102 -0
  28. hueman/palettes/mono-contrast.yaml +102 -0
  29. hueman/palettes/nord.yaml +102 -0
  30. hueman/palettes/ocean-deep.yaml +102 -0
  31. hueman/palettes/one-light.yaml +102 -0
  32. hueman/palettes/onyx-gold.yaml +103 -0
  33. hueman/palettes/rose-pine-dawn.yaml +102 -0
  34. hueman/palettes/solarized-light.yaml +102 -0
  35. hueman/palettes/synthwave.yaml +102 -0
  36. hueman/palettes/tokyonight.yaml +106 -0
  37. hueman/palettes/tuxedo.yaml +103 -0
  38. hueman/palettes/vaporwave.yaml +102 -0
  39. hueman/resources.py +18 -0
  40. hueman/templates/atuin_theme.toml.j2 +19 -0
  41. hueman/templates/bottom_theme.toml.j2 +43 -0
  42. hueman/templates/bspwm_colors.conf.j2 +5 -0
  43. hueman/templates/claude_statusline.sh.j2 +216 -0
  44. hueman/templates/dunst_colors.conf.j2 +15 -0
  45. hueman/templates/fzf_opts.j2 +9 -0
  46. hueman/templates/fzf_theme.j2 +17 -0
  47. hueman/templates/herdr_theme_custom.toml.j2 +11 -0
  48. hueman/templates/k9s_theme.yaml.j2 +83 -0
  49. hueman/templates/kitty.conf.j2 +51 -0
  50. hueman/templates/lazydocker_theme.yml.j2 +19 -0
  51. hueman/templates/leaf_theme.toml.j2 +89 -0
  52. hueman/templates/newt_colors.j2 +32 -0
  53. hueman/templates/nvim_nightfox_theme.lua.j2 +70 -0
  54. hueman/templates/omp.omp.json.j2 +107 -0
  55. hueman/templates/opencode_theme.json.j2 +71 -0
  56. hueman/templates/pi_theme.json.j2 +65 -0
  57. hueman/templates/polybar_colors.ini.j2 +11 -0
  58. hueman/templates/posting_theme.yaml.j2 +47 -0
  59. hueman/templates/qutebrowser_github.user.js.j2 +121 -0
  60. hueman/templates/qutebrowser_google.user.js.j2 +132 -0
  61. hueman/templates/qutebrowser_hteam.user.js.j2 +962 -0
  62. hueman/templates/qutebrowser_theme.py.j2 +78 -0
  63. hueman/templates/rofi_theme.rasi.j2 +132 -0
  64. hueman/templates/sshub_theme.toml.j2 +49 -0
  65. hueman/templates/starship_block.toml.j2 +11 -0
  66. hueman/templates/termux_colors.properties.j2 +20 -0
  67. hueman/templates/tmux.conf.j2 +33 -0
  68. hueman/templates/tuicr_theme.toml.j2 +51 -0
  69. hueman/templates/wezterm_colors.lua.j2 +14 -0
  70. hueman/templates/windhawk_taskbar.json.j2 +4 -0
  71. hueman/templates/yazi_theme.toml.j2 +130 -0
  72. hueman/templates/zen_theme.json.j2 +11 -0
  73. hueman_cli-0.2.0.dist-info/METADATA +119 -0
  74. hueman_cli-0.2.0.dist-info/RECORD +78 -0
  75. hueman_cli-0.2.0.dist-info/WHEEL +5 -0
  76. hueman_cli-0.2.0.dist-info/entry_points.txt +2 -0
  77. hueman_cli-0.2.0.dist-info/licenses/LICENSE +21 -0
  78. hueman_cli-0.2.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,216 @@
1
+ #!/bin/bash
2
+ # Generado por hueman — no editar a mano, se sobreescribe en cada `hueman set`.
3
+ # Custom Claude Code status line, two lines.
4
+ # Line 1 — Left: [Model] dir ⎇ branch/status/ahead-behind ...gap... Right: context bar │ tokens │ cost │ duration
5
+ # Line 2 — owner/repo │ PR #n state │ 5h % ↻reset │ 7d % ↻reset (each segment omitted when absent)
6
+
7
+ input=$(cat)
8
+
9
+ MODEL=$(echo "$input" | jq -r '.model.display_name')
10
+ DIR=$(echo "$input" | jq -r '.workspace.current_dir')
11
+ COST=$(echo "$input" | jq -r '.cost.total_cost_usd // 0')
12
+ DURATION_MS=$(echo "$input" | jq -r '.cost.total_duration_ms // 0')
13
+ PCT=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1)
14
+ TOKENS_USED=$(echo "$input" | jq -r '.context_window.total_input_tokens // 0')
15
+ TOKENS_MAX=$(echo "$input" | jq -r '.context_window.context_window_size // 200000')
16
+ SESSION_ID=$(echo "$input" | jq -r '.session_id')
17
+ OWNER=$(echo "$input" | jq -r '.workspace.repo.owner // empty')
18
+ REPO=$(echo "$input" | jq -r '.workspace.repo.name // empty')
19
+ PR_NUM=$(echo "$input" | jq -r '.pr.number // empty')
20
+ PR_STATE=$(echo "$input" | jq -r '.pr.review_state // empty')
21
+ FIVE_H=$(echo "$input" | jq -r '.rate_limits.five_hour.used_percentage // empty')
22
+ WEEK=$(echo "$input" | jq -r '.rate_limits.seven_day.used_percentage // empty')
23
+ FIVE_H_RESET=$(echo "$input" | jq -r '.rate_limits.five_hour.resets_at // empty')
24
+ WEEK_RESET=$(echo "$input" | jq -r '.rate_limits.seven_day.resets_at // empty')
25
+
26
+ # 92345 -> "92.3k", 800 -> "800"
27
+ fmt_tokens() {
28
+ if [ "$1" -ge 1000 ] 2>/dev/null; then
29
+ awk -v n="$1" 'BEGIN { printf "%.1fk", n / 1000 }'
30
+ else
31
+ echo "$1"
32
+ fi
33
+ }
34
+
35
+ # unix epoch seconds -> time remaining until reset, e.g. "2h59m" or "3d4h"
36
+ fmt_countdown() {
37
+ local target="$1"
38
+ local diff=$(( target - $(date +%s) ))
39
+ [ "$diff" -lt 0 ] && diff=0
40
+ local days=$(( diff / 86400 ))
41
+ local hours=$(( (diff % 86400) / 3600 ))
42
+ local mins=$(( (diff % 3600) / 60 ))
43
+ if [ "$days" -gt 0 ]; then
44
+ echo "${days}d${hours}h"
45
+ else
46
+ echo "${hours}h${mins}m"
47
+ fi
48
+ }
49
+
50
+ # hex color from the active theme palette -> 24-bit ANSI foreground escape
51
+ hex2ansi() {
52
+ local h="${1#\#}"
53
+ printf '\033[38;2;%d;%d;%dm' "0x${h:0:2}" "0x${h:2:2}" "0x${h:4:2}"
54
+ }
55
+
56
+ PRIMARY=$(hex2ansi "{{ primary }}")
57
+ SECONDARY=$(hex2ansi "{{ secondary }}")
58
+ ALERT=$(hex2ansi "{{ alert }}")
59
+ SUCCESS=$(hex2ansi "{{ success }}")
60
+ WARNING=$(hex2ansi "{{ warning }}")
61
+ MUTED=$(hex2ansi "{{ muted }}")
62
+ FG=$(hex2ansi "{{ foreground }}")
63
+ BOLD='\033[1m'
64
+ RESET='\033[0m'
65
+
66
+ {% raw %}
67
+
68
+ # --- git info, cached per session for 5s to avoid lag in big repos ---
69
+ CACHE_FILE="/tmp/statusline-git-cache-${SESSION_ID}"
70
+ CACHE_MAX_AGE=5
71
+
72
+ cache_is_stale() {
73
+ [ ! -f "$CACHE_FILE" ] || \
74
+ [ $(($(date +%s) - $(stat -c %Y "$CACHE_FILE" 2>/dev/null || stat -f %m "$CACHE_FILE" 2>/dev/null || echo 0))) -gt $CACHE_MAX_AGE ]
75
+ }
76
+
77
+ if cache_is_stale; then
78
+ if git rev-parse --git-dir > /dev/null 2>&1; then
79
+ BRANCH=$(git branch --show-current 2>/dev/null)
80
+ STAGED=$(git diff --cached --numstat 2>/dev/null | wc -l | tr -d ' ')
81
+ MODIFIED=$(git diff --numstat 2>/dev/null | wc -l | tr -d ' ')
82
+ AHEAD_BEHIND=$(git rev-list --left-right --count HEAD...@{u} 2>/dev/null)
83
+ AHEAD=$(echo "$AHEAD_BEHIND" | cut -f1)
84
+ BEHIND=$(echo "$AHEAD_BEHIND" | cut -f2)
85
+ echo "$BRANCH|$STAGED|$MODIFIED|${AHEAD:-0}|${BEHIND:-0}" > "$CACHE_FILE"
86
+ else
87
+ echo "|||0|0" > "$CACHE_FILE"
88
+ fi
89
+ fi
90
+ IFS='|' read -r BRANCH STAGED MODIFIED AHEAD BEHIND < "$CACHE_FILE"
91
+
92
+ GIT_SEGMENT=""
93
+ GIT_PLAIN=""
94
+ if [ -n "$BRANCH" ]; then
95
+ GIT_SEGMENT=" ${MUTED}│${RESET} ${SECONDARY}⎇ ${BRANCH}${RESET}"
96
+ GIT_PLAIN=" │ ⎇ ${BRANCH}"
97
+ if [ "$STAGED" -gt 0 ] 2>/dev/null; then
98
+ GIT_SEGMENT="${GIT_SEGMENT} ${SUCCESS}+${STAGED}${RESET}"
99
+ GIT_PLAIN="${GIT_PLAIN} +${STAGED}"
100
+ fi
101
+ if [ "$MODIFIED" -gt 0 ] 2>/dev/null; then
102
+ GIT_SEGMENT="${GIT_SEGMENT} ${WARNING}~${MODIFIED}${RESET}"
103
+ GIT_PLAIN="${GIT_PLAIN} ~${MODIFIED}"
104
+ fi
105
+ if [ "$AHEAD" -gt 0 ] 2>/dev/null; then
106
+ GIT_SEGMENT="${GIT_SEGMENT} ${PRIMARY}↑${AHEAD}${RESET}"
107
+ GIT_PLAIN="${GIT_PLAIN} ↑${AHEAD}"
108
+ fi
109
+ if [ "$BEHIND" -gt 0 ] 2>/dev/null; then
110
+ GIT_SEGMENT="${GIT_SEGMENT} ${ALERT}↓${BEHIND}${RESET}"
111
+ GIT_PLAIN="${GIT_PLAIN} ↓${BEHIND}"
112
+ fi
113
+ fi
114
+
115
+ # --- context bar, color by threshold ---
116
+ if [ "$PCT" -ge 90 ] 2>/dev/null; then BAR_COLOR="$ALERT"
117
+ elif [ "$PCT" -ge 70 ] 2>/dev/null; then BAR_COLOR="$WARNING"
118
+ else BAR_COLOR="$SUCCESS"; fi
119
+
120
+ BAR_WIDTH=10
121
+ FILLED=$((PCT * BAR_WIDTH / 100))
122
+ EMPTY=$((BAR_WIDTH - FILLED))
123
+ BAR=""
124
+ [ "$FILLED" -gt 0 ] && printf -v FILL "%${FILLED}s" && BAR="${FILL// /▓}"
125
+ [ "$EMPTY" -gt 0 ] && printf -v PAD "%${EMPTY}s" && BAR="${BAR}${PAD// /░}"
126
+
127
+ COST_FMT=$(printf '$%.2f' "$COST")
128
+ DURATION_SEC=$((DURATION_MS / 1000))
129
+ MINS=$((DURATION_SEC / 60))
130
+ SECS=$((DURATION_SEC % 60))
131
+ TOKENS_STR="$(fmt_tokens "$TOKENS_USED")/$(fmt_tokens "$TOKENS_MAX")"
132
+
133
+ # --- herdr sidebar: publish $ctx (context %) and $edits (lines +/-). No-op
134
+ # outside herdr; only calls herdr when a value changed, in the background. ---
135
+ if [ "${HERDR_ENV:-}" = "1" ] && [ -n "${HERDR_PANE_ID:-}" ] && command -v herdr >/dev/null 2>&1; then
136
+ LINES_ADD=$(echo "$input" | jq -r '.cost.total_lines_added // 0')
137
+ LINES_DEL=$(echo "$input" | jq -r '.cost.total_lines_removed // 0')
138
+ CTX_STATE="${PCT}|${LINES_ADD}|${LINES_DEL}"
139
+ CTX_CACHE="/tmp/statusline-ctx-${SESSION_ID}"
140
+ if [ "$(cat "$CTX_CACHE" 2>/dev/null)" != "$CTX_STATE" ]; then
141
+ echo "$CTX_STATE" > "$CTX_CACHE"
142
+ if [ "$LINES_ADD" -gt 0 ] 2>/dev/null || [ "$LINES_DEL" -gt 0 ] 2>/dev/null; then
143
+ EDITS_ARGS=(--token "edits=+${LINES_ADD} -${LINES_DEL}")
144
+ else
145
+ EDITS_ARGS=(--clear-token edits)
146
+ fi
147
+ herdr pane report-metadata "$HERDR_PANE_ID" --source claude-statusline --token "ctx=${PCT}%" "${EDITS_ARGS[@]}" >/dev/null 2>&1 &
148
+ fi
149
+ fi
150
+
151
+ # Left block: model + dir + git. Right block: context bar + tokens + cost + duration.
152
+ # Each has a colored version (printed) and a plain-text twin (no ANSI codes,
153
+ # used only to measure visible width for the gap calculation).
154
+ LEFT="${BOLD}${PRIMARY}[$MODEL]${RESET} ${FG}${DIR##*/}${RESET}${GIT_SEGMENT}"
155
+ LEFT_PLAIN="[$MODEL] ${DIR##*/}${GIT_PLAIN}"
156
+
157
+ RIGHT="${BAR_COLOR}${BAR}${RESET} ${BAR_COLOR}${PCT}%${RESET} ${MUTED}(${TOKENS_STR})${RESET} ${MUTED}│${RESET} ${FG}${COST_FMT}${RESET} ${MUTED}│${RESET} ${MUTED}${MINS}m ${SECS}s${RESET}"
158
+ RIGHT_PLAIN="${BAR} ${PCT}% (${TOKENS_STR}) │ ${COST_FMT} │ ${MINS}m ${SECS}s"
159
+
160
+ # Gap: COLUMNS is set by Claude Code to the current terminal width.
161
+ # RIGHT_MARGIN leaves room so the right block doesn't hug the exact last
162
+ # column, where Claude Code's own UI chrome (borders, notification area) lives.
163
+ RIGHT_MARGIN=6
164
+ WIDTH="${COLUMNS:-80}"
165
+ GAP=$((WIDTH - RIGHT_MARGIN - ${#LEFT_PLAIN} - ${#RIGHT_PLAIN}))
166
+ [ "$GAP" -lt 1 ] && GAP=1
167
+ printf -v SPACES '%*s' "$GAP" ''
168
+
169
+ echo -e "${LEFT}${SPACES}${RIGHT}"
170
+
171
+ # --- second line: repo identity, PR status, rate limits — all free from the
172
+ # JSON input, no extra subprocess calls needed. Omitted entirely when empty. ---
173
+ INFO_PARTS=()
174
+
175
+ if [ -n "$OWNER" ] && [ -n "$REPO" ]; then
176
+ INFO_PARTS+=("${SECONDARY}${OWNER}/${REPO}${RESET}")
177
+ fi
178
+
179
+ if [ -n "$PR_NUM" ]; then
180
+ case "$PR_STATE" in
181
+ approved) PR_COLOR="$SUCCESS" ;;
182
+ changes_requested) PR_COLOR="$ALERT" ;;
183
+ pending) PR_COLOR="$WARNING" ;;
184
+ draft) PR_COLOR="$MUTED" ;;
185
+ *) PR_COLOR="$FG" ;;
186
+ esac
187
+ PR_TEXT="PR #${PR_NUM}"
188
+ [ -n "$PR_STATE" ] && PR_TEXT="${PR_TEXT} ${PR_STATE}"
189
+ INFO_PARTS+=("${PR_COLOR}${PR_TEXT}${RESET}")
190
+ fi
191
+
192
+ if [ -n "$FIVE_H" ]; then
193
+ FIVE_H_TXT="5h $(echo "$FIVE_H" | cut -d. -f1)%"
194
+ [ -n "$FIVE_H_RESET" ] && FIVE_H_TXT="${FIVE_H_TXT} ↻ $(fmt_countdown "$FIVE_H_RESET")"
195
+ INFO_PARTS+=("${MUTED}${FIVE_H_TXT}${RESET}")
196
+ fi
197
+
198
+ if [ -n "$WEEK" ]; then
199
+ WEEK_TXT="7d $(echo "$WEEK" | cut -d. -f1)%"
200
+ [ -n "$WEEK_RESET" ] && WEEK_TXT="${WEEK_TXT} ↻ $(fmt_countdown "$WEEK_RESET")"
201
+ INFO_PARTS+=("${MUTED}${WEEK_TXT}${RESET}")
202
+ fi
203
+
204
+ INFO_LINE=""
205
+ for part in "${INFO_PARTS[@]}"; do
206
+ if [ -z "$INFO_LINE" ]; then
207
+ INFO_LINE="$part"
208
+ else
209
+ INFO_LINE="${INFO_LINE} ${MUTED}│${RESET} ${part}"
210
+ fi
211
+ done
212
+
213
+ if [ -n "$INFO_LINE" ]; then
214
+ echo -e "$INFO_LINE"
215
+ fi
216
+ {% endraw %}
@@ -0,0 +1,15 @@
1
+ # Generado por hueman — no editar a mano, se sobreescribe en cada `hueman set`.
2
+ [urgency_low]
3
+ background = "{{ background }}"
4
+ foreground = "{{ foreground }}"
5
+ frame_color = "{{ primary }}"
6
+
7
+ [urgency_normal]
8
+ background = "{{ background }}"
9
+ foreground = "{{ foreground }}"
10
+ frame_color = "{{ primary }}"
11
+
12
+ [urgency_critical]
13
+ background = "{{ background }}"
14
+ foreground = "{{ foreground }}"
15
+ frame_color = "{{ alert }}"
@@ -0,0 +1,9 @@
1
+ # Generado por hueman — no editar a mano, se sobreescribe en cada `hueman set`.
2
+ # Leído por fzf en cada ejecución vía FZF_DEFAULT_OPTS_FILE (fzf >= 0.47),
3
+ # así las shells y popups ya abiertos toman el tema nuevo sin reiniciarse.
4
+ --color=bg:{{ background }},bg+:{{ background_alt }}
5
+ --color=fg:{{ foreground }},fg+:{{ foreground }}
6
+ --color=hl:{{ primary }},hl+:{{ primary }}
7
+ --color=prompt:{{ primary }},pointer:{{ primary }}
8
+ --color=marker:{{ success }},border:{{ secondary }}
9
+ --color=spinner:{{ secondary }},header:{{ secondary }},info:{{ secondary }}
@@ -0,0 +1,17 @@
1
+ # Generado por hueman — no editar a mano, se sobreescribe en cada `hueman set`.
2
+ # Los colores viven en ~/.fzf_opts (fzf_opts.j2), que fzf lee en cada
3
+ # ejecución. Se hace unset de FZF_DEFAULT_OPTS porque los procesos que
4
+ # arrancaron con un tema anterior (p. ej. el servidor de herdr) la heredan
5
+ # congelada, y fzf la aplica encima del archivo.
6
+ unset FZF_DEFAULT_OPTS
7
+ export FZF_DEFAULT_OPTS_FILE="$HOME/.fzf_opts"
8
+
9
+ # Sin colores: fzf aplica primero FZF_DEFAULT_OPTS_FILE y después esto.
10
+ export FZF_CTRL_R_OPTS="
11
+ --height=60%
12
+ --layout=reverse
13
+ --border=rounded
14
+ --prompt='󰋚 History > '
15
+ --pointer='▶'
16
+ --marker='✓'
17
+ "
@@ -0,0 +1,11 @@
1
+ [theme.custom]
2
+ panel_bg = "{{ background }}"
3
+ accent = "{{ primary }}"
4
+ red = "{{ alert }}"
5
+ green = "{{ success }}"
6
+ yellow = "{{ warning }}"
7
+ blue = "{{ secondary }}"
8
+ text = "{{ foreground }}"
9
+ sidebar_bg = "{{ background_alt }}"
10
+ active_row_bg = "{{ muted }}"
11
+ selection_bg = "{{ primary }}"
@@ -0,0 +1,83 @@
1
+ # Generado por hueman — no editar a mano, se sobreescribe en cada `hueman set`.
2
+ # Activar con `skin: current` bajo [k9s] en ~/.config/k9s/config.yaml
3
+ k9s:
4
+ body:
5
+ fgColor: "{{ foreground }}"
6
+ bgColor: "{{ background }}"
7
+ logoColor: "{{ primary }}"
8
+ prompt:
9
+ fgColor: "{{ foreground }}"
10
+ bgColor: "{{ background }}"
11
+ suggestColor: "{{ secondary }}"
12
+ info:
13
+ fgColor: "{{ secondary }}"
14
+ sectionColor: "{{ foreground }}"
15
+ dialog:
16
+ fgColor: "{{ foreground }}"
17
+ bgColor: "{{ background }}"
18
+ buttonFgColor: "{{ foreground }}"
19
+ buttonBgColor: "{{ primary }}"
20
+ buttonFocusFgColor: "{{ primary | contrast }}"
21
+ buttonFocusBgColor: "{{ primary }}"
22
+ labelFgColor: "{{ warning }}"
23
+ fieldFgColor: "{{ foreground }}"
24
+ frame:
25
+ border:
26
+ fgColor: "{{ muted }}"
27
+ focusColor: "{{ primary }}"
28
+ menu:
29
+ fgColor: "{{ foreground }}"
30
+ keyColor: "{{ secondary }}"
31
+ numKeyColor: "{{ secondary }}"
32
+ crumbs:
33
+ fgColor: "{{ foreground }}"
34
+ bgColor: "{{ background_alt }}"
35
+ activeColor: "{{ background_alt }}"
36
+ status:
37
+ newColor: "{{ secondary }}"
38
+ modifyColor: "{{ primary }}"
39
+ addColor: "{{ success }}"
40
+ errorColor: "{{ alert }}"
41
+ highlightColor: "{{ warning }}"
42
+ killColor: "{{ muted }}"
43
+ completedColor: "{{ muted }}"
44
+ title:
45
+ fgColor: "{{ foreground }}"
46
+ bgColor: "{{ background_alt }}"
47
+ highlightColor: "{{ warning }}"
48
+ counterColor: "{{ primary }}"
49
+ filterColor: "{{ secondary }}"
50
+ views:
51
+ charts:
52
+ bgColor: default
53
+ defaultDialColors:
54
+ - "{{ primary }}"
55
+ - "{{ alert }}"
56
+ defaultChartColors:
57
+ - "{{ primary }}"
58
+ - "{{ alert }}"
59
+ table:
60
+ fgColor: "{{ foreground }}"
61
+ bgColor: "{{ background }}"
62
+ header:
63
+ fgColor: "{{ foreground }}"
64
+ bgColor: "{{ background }}"
65
+ sorterColor: "{{ secondary }}"
66
+ xray:
67
+ fgColor: "{{ foreground }}"
68
+ bgColor: "{{ background }}"
69
+ cursorColor: "{{ background_alt }}"
70
+ graphicColor: "{{ primary }}"
71
+ showIcons: false
72
+ yaml:
73
+ keyColor: "{{ secondary }}"
74
+ colonColor: "{{ primary }}"
75
+ valueColor: "{{ foreground }}"
76
+ logs:
77
+ fgColor: "{{ foreground }}"
78
+ bgColor: "{{ background }}"
79
+ indicator:
80
+ fgColor: "{{ foreground }}"
81
+ bgColor: "{{ primary }}"
82
+ toggleOnColor: "{{ success }}"
83
+ toggleOffColor: "{{ secondary }}"
@@ -0,0 +1,51 @@
1
+ # Generado por hueman — no editar a mano, se sobreescribe en cada `hueman set`.
2
+ foreground {{ foreground }}
3
+ background {{ background }}
4
+ selection_foreground {{ selection_foreground }}
5
+ selection_background {{ selection_background }}
6
+
7
+ url_color {{ url_color }}
8
+ url_style curly
9
+
10
+ color0 {{ color0 }}
11
+ color1 {{ color1 }}
12
+ color2 {{ color2 }}
13
+ color3 {{ color3 }}
14
+ color4 {{ color4 }}
15
+ color5 {{ color5 }}
16
+ color6 {{ color6 }}
17
+ color7 {{ color7 }}
18
+ color8 {{ color8 }}
19
+ color9 {{ color9 }}
20
+ color10 {{ color10 }}
21
+ color11 {{ color11 }}
22
+ color12 {{ color12 }}
23
+ color13 {{ color13 }}
24
+ color14 {{ color14 }}
25
+ color15 {{ color15 }}
26
+
27
+ cursor {{ cursor }}
28
+ cursor_text_color {{ cursor_text_color }}
29
+
30
+ active_tab_foreground {{ active_tab_foreground }}
31
+ active_tab_background {{ active_tab_background }}
32
+ active_tab_font_style bold-italic
33
+ inactive_tab_foreground {{ inactive_tab_foreground }}
34
+ inactive_tab_background {{ inactive_tab_background }}
35
+ inactive_tab_font_style normal
36
+ tab_bar_background {{ tab_bar_background }}
37
+ tab_bar_margin_color {{ tab_bar_margin_color }}
38
+
39
+ mark1_foreground {{ mark1_foreground }}
40
+ mark1_background {{ mark1_background }}
41
+
42
+ active_border_color {{ active_border_color }}
43
+ inactive_border_color {{ inactive_border_color }}
44
+ bell_border_color {{ bell_border_color }}
45
+
46
+ visual_bell_color {{ visual_bell_color }}
47
+
48
+ search_result_foreground {{ search_result_foreground }}
49
+ search_result_background {{ search_result_background }}
50
+ search_current_match_foreground {{ search_current_match_foreground }}
51
+ search_current_match_background {{ search_current_match_background }}
@@ -0,0 +1,19 @@
1
+ # Generado por hueman — no editar a mano, se sobreescribe en cada `hueman set`.
2
+ # lazydocker (gocui) solo acepta 8 nombres ANSI fijos + atributos
3
+ # (default/black/red/green/yellow/blue/magenta/cyan/white, bold/reverse/
4
+ # underline) — NO hex propio. Por eso este bloque es estático: hereda el
5
+ # color real directamente de la paleta ANSI del terminal activo (kitty/
6
+ # wezterm color0-7), no de los valores hex de esta paleta de hueman.
7
+ # "blue" se usa como acento (equivalente al rol "primary" en los demás
8
+ # templates) para mantener consistencia visual con el resto del setup.
9
+ gui:
10
+ theme:
11
+ activeBorderColor:
12
+ - blue
13
+ - bold
14
+ inactiveBorderColor:
15
+ - white
16
+ selectedLineBgColor:
17
+ - blue
18
+ optionsTextColor:
19
+ - blue
@@ -0,0 +1,89 @@
1
+ # Generado por hueman — no editar a mano, se sobreescribe en cada `hueman set`.
2
+ # Activado con `theme = "themes/current.toml"` en ~/.config/leaf/config.toml.
3
+ base = "ocean"
4
+ syntax = "base16-ocean.dark"
5
+
6
+ [ui]
7
+ toc_bg = "{{ background }}"
8
+ toc_border = "{{ background_alt }}"
9
+ content_bg = "{{ background }}"
10
+ scrollbar_hover = "{{ primary }}"
11
+ status_bg = "{{ background_alt }}"
12
+ status_separator = "{{ muted }}"
13
+ status_brand_fg = "{{ primary | contrast }}"
14
+ status_brand_bg = "{{ primary }}"
15
+ status_filename_fg = "{{ foreground }}"
16
+ status_filename_bg = "{{ background_alt }}"
17
+ status_watch_fg = "{{ success }}"
18
+ status_watch_bg = "{{ background_alt }}"
19
+ status_reloaded_fg = "{{ success | contrast }}"
20
+ status_reloaded_bg = "{{ success }}"
21
+ status_search_fg = "{{ primary }}"
22
+ status_search_bg = "{{ background_alt }}"
23
+ status_success_fg = "{{ success }}"
24
+ status_success_bg = "{{ background_alt }}"
25
+ status_warning_fg = "{{ warning }}"
26
+ status_error_fg = "{{ alert }}"
27
+ status_error_bg = "{{ background_alt }}"
28
+ status_shortcut_fg = "{{ muted }}"
29
+ status_percent_fg = "{{ primary }}"
30
+ toc_hover_fg = "{{ foreground }}"
31
+ toc_header_fg = "{{ muted }}"
32
+ toc_active_bg = "{{ background_alt }}"
33
+ toc_inactive_bg = "{{ background }}"
34
+ toc_accent = "{{ primary }}"
35
+ toc_index_inactive = "{{ muted }}"
36
+ toc_primary_active = "{{ foreground }}"
37
+ toc_primary_inactive = "{{ foreground }}"
38
+ toc_secondary_inactive = "{{ muted }}"
39
+ toc_secondary_text_active = "{{ foreground }}"
40
+ toc_secondary_text_inactive = "{{ muted }}"
41
+
42
+ [markdown]
43
+ search_highlight_bg = "{{ background_alt }}"
44
+ search_match_bg = "{{ warning }}"
45
+ code_gutter = "{{ muted }}"
46
+ blockquote_marker = "{{ muted }}"
47
+ list_level_1 = "{{ success }}"
48
+ list_level_2 = "{{ secondary }}"
49
+ list_level_3 = "{{ primary }}"
50
+ ordered_list = "{{ warning }}"
51
+ table_border = "{{ muted }}"
52
+ table_separator = "{{ background_alt }}"
53
+ table_header = "{{ primary }}"
54
+ table_cell = "{{ foreground }}"
55
+ heading_1 = "{{ primary }}"
56
+ heading_2 = "{{ success }}"
57
+ heading_3 = "{{ secondary }}"
58
+ heading_4 = "{{ warning }}"
59
+ heading_other = "{{ primary }}"
60
+ heading_underline = "{{ background_alt }}"
61
+ code_frame = "{{ muted }}"
62
+ code_label = "{{ muted }}"
63
+ inline_code_fg = "{{ primary }}"
64
+ inline_code_bg = "{{ background_alt }}"
65
+ rule = "{{ background_alt }}"
66
+ link_icon = "{{ secondary }}"
67
+ link_text = "{{ secondary }}"
68
+ link_hover = "{{ primary }}"
69
+ blockquote_text = "{{ muted }}"
70
+ text = "{{ foreground }}"
71
+ strong_text = "{{ foreground }}"
72
+ latex_inline_fg = "{{ secondary }}"
73
+ latex_inline_bg = "{{ background_alt }}"
74
+ latex_block_fg = "{{ secondary }}"
75
+ mermaid_keyword = "{{ primary }}"
76
+ mermaid_arrow = "{{ secondary }}"
77
+ mermaid_label = "{{ success }}"
78
+ mermaid_block_fg = "{{ foreground }}"
79
+ mark_fg = "{{ foreground }}"
80
+ mark_bg = "{{ background_alt }}"
81
+ task_checked = "{{ success }}"
82
+ task_unchecked = "{{ muted }}"
83
+ alert_note = "{{ secondary }}"
84
+ alert_tip = "{{ success }}"
85
+ alert_important = "{{ primary }}"
86
+ alert_warning = "{{ warning }}"
87
+ alert_caution = "{{ alert }}"
88
+ footnote_ref = "{{ secondary }}"
89
+ footnote_text = "{{ muted }}"
@@ -0,0 +1,32 @@
1
+ {#-
2
+ Newt/whiptail palette via NEWT_COLORS_FILE.
3
+ Generated by hueman — do not edit the output file by hand.
4
+
5
+ - Format: element=fg,bg. Output has no comments: newt would parse them as elements.
6
+ - Hex colors need COLORTERM=truecolor (slang >= 2.3).
7
+ - Every element is set: NEWT_COLORS_FILE replaces /etc/newt/palette, and an
8
+ omitted element falls back to newt defaults (blue/red).
9
+ -#}
10
+ root={{ foreground }},{{ background }}
11
+ roottext={{ muted }},{{ background }}
12
+ helpline={{ foreground }},{{ background_alt }}
13
+ shadow={{ background }},{{ background }}
14
+ window={{ foreground }},{{ background_alt }}
15
+ border={{ secondary }},{{ background_alt }}
16
+ title={{ primary }},{{ background_alt }}
17
+ label={{ foreground }},{{ background_alt }}
18
+ textbox={{ foreground }},{{ background_alt }}
19
+ acttextbox={{ background }},{{ secondary }}
20
+ button={{ foreground }},{{ muted }}
21
+ actbutton={{ background }},{{ primary }}
22
+ compactbutton={{ foreground }},{{ background_alt }}
23
+ checkbox={{ foreground }},{{ background_alt }}
24
+ actcheckbox={{ background }},{{ primary }}
25
+ entry={{ foreground }},{{ background }}
26
+ disentry={{ muted }},{{ background }}
27
+ listbox={{ foreground }},{{ background_alt }}
28
+ actlistbox={{ background }},{{ primary }}
29
+ sellistbox={{ secondary }},{{ background_alt }}
30
+ actsellistbox={{ background }},{{ primary }}
31
+ emptyscale={{ muted }},{{ background }}
32
+ fullscale={{ background }},{{ primary }}
@@ -0,0 +1,70 @@
1
+ -- Generado por hueman — no editar a mano, se sobreescribe en cada `hueman set`.
2
+ return {
3
+ palette = {
4
+ bg1 = "{{ background }}",
5
+ bg2 = "{{ tab_bar_background }}",
6
+ bg3 = "{{ inactive_tab_background }}",
7
+ sel0 = "{{ inactive_border_color }}",
8
+ fg1 = "{{ foreground }}",
9
+ fg2 = "{{ inactive_tab_foreground }}",
10
+ fg3 = "{{ color8 }}",
11
+ red = "{{ color1 }}",
12
+ orange = "{{ color3 }}",
13
+ yellow = "{{ color11 }}",
14
+ green = "{{ color2 }}",
15
+ blue = "{{ color4 }}",
16
+ magenta = "{{ color5 }}",
17
+ cyan = "{{ color6 }}",
18
+ },
19
+
20
+ specs = {
21
+ syntax = {
22
+ keyword = "{{ color1 }}",
23
+ string = "{{ color2 }}",
24
+ variable = "{{ color3 }}",
25
+ number = "{{ color11 }}",
26
+ comment = "{{ color8 }}",
27
+ builtin = "{{ color9 }}",
28
+ },
29
+ diag = {
30
+ error = "{{ color9 }}",
31
+ warn = "{{ color11 }}",
32
+ info = "{{ color4 }}",
33
+ hint = "{{ color6 }}",
34
+ },
35
+ },
36
+
37
+ groups = {
38
+ CursorLine = { bg = "{{ tab_bar_background }}" },
39
+ Visual = { bg = "{{ inactive_border_color }}", fg = "{{ foreground }}", style = "bold" },
40
+ LineNr = { fg = "{{ color4 }}" },
41
+ Comment = { fg = "{{ color8 }}", style = "italic,bold" },
42
+
43
+ DiagnosticVirtualTextError = { fg = "{{ color9 }}", bg = "{{ tab_bar_background }}" },
44
+ DiagnosticVirtualTextWarn = { fg = "{{ color11 }}", bg = "{{ tab_bar_background }}" },
45
+ DiagnosticVirtualTextInfo = { fg = "{{ color4 }}", bg = "{{ tab_bar_background }}" },
46
+ DiagnosticVirtualTextHint = { fg = "{{ color6 }}", bg = "{{ tab_bar_background }}" },
47
+
48
+ Pmenu = { bg = "{{ inactive_tab_background }}", fg = "{{ foreground }}" },
49
+ PmenuSel = { bg = "{{ inactive_border_color }}", fg = "{{ color11 }}" },
50
+ VertSplit = { fg = "{{ inactive_tab_background }}" },
51
+ Folded = { bg = "{{ tab_bar_background }}", fg = "{{ color8 }}" },
52
+ CursorColumn = { bg = "{{ tab_bar_background }}" },
53
+
54
+ Search = { bg = "{{ color11 }}", fg = "{{ background }}", style = "bold" },
55
+ IncSearch = { bg = "{{ color9 }}", fg = "{{ foreground }}", style = "bold" },
56
+
57
+ StatusLine = { bg = "{{ background }}", fg = "{{ foreground }}" },
58
+ StatusLineNC = { bg = "{{ tab_bar_background }}", fg = "{{ color8 }}" },
59
+
60
+ LualineNormal = { bg = "{{ background }}", fg = "{{ foreground }}" },
61
+ LualineNormalNC = { bg = "{{ tab_bar_background }}", fg = "{{ color8 }}" },
62
+ LualineInsert = { bg = "{{ color9 }}", fg = "{{ background }}", style = "bold" },
63
+ LualineVisual = { bg = "{{ color11 }}", fg = "{{ background }}", style = "bold" },
64
+ LualineReplace = { bg = "{{ color4 }}", fg = "{{ background }}", style = "bold" },
65
+ LualineCommand = { bg = "{{ color6 }}", fg = "{{ background }}", style = "bold" },
66
+
67
+ WinBar = { bg = "{{ background }}", fg = "{{ foreground }}", style = "bold" },
68
+ WinBarNC = { bg = "{{ tab_bar_background }}", fg = "{{ color8 }}" },
69
+ },
70
+ }