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.
- hueman/__init__.py +11 -0
- hueman/__main__.py +3 -0
- hueman/cli.py +353 -0
- hueman/data/hueman.config.example.yaml +111 -0
- hueman/engine/__init__.py +0 -0
- hueman/engine/colors.py +30 -0
- hueman/engine/config.py +186 -0
- hueman/engine/fsutil.py +41 -0
- hueman/engine/palettes.py +66 -0
- hueman/engine/reload.py +60 -0
- hueman/engine/render.py +243 -0
- hueman/engine/statesource.py +370 -0
- hueman/engine/targets.py +95 -0
- hueman/palettes/arctic-ice.yaml +102 -0
- hueman/palettes/autumn.yaml +102 -0
- hueman/palettes/catppuccin-latte.yaml +102 -0
- hueman/palettes/catppuccin-mocha.yaml +102 -0
- hueman/palettes/copperwave.yaml +103 -0
- hueman/palettes/crimson-vivid.yaml +111 -0
- hueman/palettes/dracula.yaml +102 -0
- hueman/palettes/ember-red.yaml +111 -0
- hueman/palettes/everforest-dark.yaml +102 -0
- hueman/palettes/galaxy.yaml +102 -0
- hueman/palettes/gruvbox-light.yaml +102 -0
- hueman/palettes/gruvbox.yaml +102 -0
- hueman/palettes/kanagawa-dragon.yaml +102 -0
- hueman/palettes/matrix.yaml +102 -0
- hueman/palettes/mono-contrast.yaml +102 -0
- hueman/palettes/nord.yaml +102 -0
- hueman/palettes/ocean-deep.yaml +102 -0
- hueman/palettes/one-light.yaml +102 -0
- hueman/palettes/onyx-gold.yaml +103 -0
- hueman/palettes/rose-pine-dawn.yaml +102 -0
- hueman/palettes/solarized-light.yaml +102 -0
- hueman/palettes/synthwave.yaml +102 -0
- hueman/palettes/tokyonight.yaml +106 -0
- hueman/palettes/tuxedo.yaml +103 -0
- hueman/palettes/vaporwave.yaml +102 -0
- hueman/resources.py +18 -0
- hueman/templates/atuin_theme.toml.j2 +19 -0
- hueman/templates/bottom_theme.toml.j2 +43 -0
- hueman/templates/bspwm_colors.conf.j2 +5 -0
- hueman/templates/claude_statusline.sh.j2 +216 -0
- hueman/templates/dunst_colors.conf.j2 +15 -0
- hueman/templates/fzf_opts.j2 +9 -0
- hueman/templates/fzf_theme.j2 +17 -0
- hueman/templates/herdr_theme_custom.toml.j2 +11 -0
- hueman/templates/k9s_theme.yaml.j2 +83 -0
- hueman/templates/kitty.conf.j2 +51 -0
- hueman/templates/lazydocker_theme.yml.j2 +19 -0
- hueman/templates/leaf_theme.toml.j2 +89 -0
- hueman/templates/newt_colors.j2 +32 -0
- hueman/templates/nvim_nightfox_theme.lua.j2 +70 -0
- hueman/templates/omp.omp.json.j2 +107 -0
- hueman/templates/opencode_theme.json.j2 +71 -0
- hueman/templates/pi_theme.json.j2 +65 -0
- hueman/templates/polybar_colors.ini.j2 +11 -0
- hueman/templates/posting_theme.yaml.j2 +47 -0
- hueman/templates/qutebrowser_github.user.js.j2 +121 -0
- hueman/templates/qutebrowser_google.user.js.j2 +132 -0
- hueman/templates/qutebrowser_hteam.user.js.j2 +962 -0
- hueman/templates/qutebrowser_theme.py.j2 +78 -0
- hueman/templates/rofi_theme.rasi.j2 +132 -0
- hueman/templates/sshub_theme.toml.j2 +49 -0
- hueman/templates/starship_block.toml.j2 +11 -0
- hueman/templates/termux_colors.properties.j2 +20 -0
- hueman/templates/tmux.conf.j2 +33 -0
- hueman/templates/tuicr_theme.toml.j2 +51 -0
- hueman/templates/wezterm_colors.lua.j2 +14 -0
- hueman/templates/windhawk_taskbar.json.j2 +4 -0
- hueman/templates/yazi_theme.toml.j2 +130 -0
- hueman/templates/zen_theme.json.j2 +11 -0
- hueman_cli-0.2.0.dist-info/METADATA +119 -0
- hueman_cli-0.2.0.dist-info/RECORD +78 -0
- hueman_cli-0.2.0.dist-info/WHEEL +5 -0
- hueman_cli-0.2.0.dist-info/entry_points.txt +2 -0
- hueman_cli-0.2.0.dist-info/licenses/LICENSE +21 -0
- 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
|
+
}
|