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,78 @@
1
+ # Generado por hueman — no editar a mano, se sobreescribe en cada `hueman set`.
2
+ """Theme 'current' — generado por hueman desde la paleta activa (sección polybar)"""
3
+
4
+ theme_colors = {
5
+ 'completion_category_bg': "{{ background }}",
6
+ 'completion_category_border_bottom': "{{ background }}",
7
+ 'completion_category_border_top': "{{ background }}",
8
+ 'completion_category_fg': "{{ primary }}",
9
+ 'completion_even_bg': "{{ background }}",
10
+ 'completion_odd_bg': "{{ background_alt }}",
11
+ 'completion_fg': "{{ foreground }}",
12
+ 'completion_selected_bg': "{{ background_alt }}",
13
+ 'completion_selected_border_bottom': "{{ background_alt }}",
14
+ 'completion_selected_border_top': "{{ background_alt }}",
15
+ 'completion_selected_fg': "{{ secondary }}",
16
+ 'completion_match_fg': "{{ secondary }}",
17
+ 'completion_scrollbar_bg': "{{ background }}",
18
+ 'completion_scrollbar_fg': "{{ primary }}",
19
+ 'downloads_bar_bg': "{{ background }}",
20
+ 'downloads_error_bg': "{{ alert }}",
21
+ 'downloads_error_fg': "{{ foreground }}",
22
+ 'downloads_stop_bg': "{{ success }}",
23
+ 'downloads_system_bg': 'none',
24
+ 'hints_bg': "{{ primary }}",
25
+ 'hints_fg': "{{ foreground }}",
26
+ 'hints_match_fg': "{{ secondary }}",
27
+ 'keyhint_bg': "{{ background }}",
28
+ 'keyhint_fg': "{{ foreground }}",
29
+ 'keyhint_suffix_fg': "{{ warning }}",
30
+ 'messages_error_bg': "{{ alert }}",
31
+ 'messages_error_border': "{{ alert }}",
32
+ 'messages_error_fg': "{{ foreground }}",
33
+ 'messages_info_bg': "{{ muted }}",
34
+ 'messages_info_border': "{{ muted }}",
35
+ 'messages_info_fg': "{{ foreground }}",
36
+ 'messages_warning_bg': "{{ warning }}",
37
+ 'messages_warning_border': "{{ warning }}",
38
+ 'messages_warning_fg': "{{ background }}",
39
+ 'prompts_bg': "{{ background }}",
40
+ 'prompts_border': "1px solid {{ primary }}",
41
+ 'prompts_fg': "{{ foreground }}",
42
+ 'prompts_selected_bg': "{{ background_alt }}",
43
+ 'statusbar_caret_bg': "{{ primary }}",
44
+ 'statusbar_caret_fg': "{{ background }}",
45
+ 'statusbar_caret_selection_bg': "{{ primary }}",
46
+ 'statusbar_caret_selection_fg': "{{ background }}",
47
+ 'statusbar_command_bg': "{{ background }}",
48
+ 'statusbar_command_fg': "{{ foreground }}",
49
+ 'statusbar_command_private_bg': "{{ background }}",
50
+ 'statusbar_command_private_fg': "{{ foreground }}",
51
+ 'statusbar_insert_bg': "{{ success }}",
52
+ 'statusbar_insert_fg': "{{ background }}",
53
+ 'statusbar_normal_bg': "{{ background }}",
54
+ 'statusbar_normal_fg': "{{ foreground }}",
55
+ 'statusbar_passthrough_bg': "{{ secondary }}",
56
+ 'statusbar_passthrough_fg': "{{ background }}",
57
+ 'statusbar_private_bg': "{{ background_alt }}",
58
+ 'statusbar_private_fg': "{{ foreground }}",
59
+ 'statusbar_progress_bg': "{{ primary }}",
60
+ 'statusbar_url_error_fg': "{{ alert }}",
61
+ 'statusbar_url_fg': "{{ foreground }}",
62
+ 'statusbar_url_hover_fg': "{{ secondary }}",
63
+ 'statusbar_url_success_http_fg': "{{ foreground }}",
64
+ 'statusbar_url_success_https_fg': "{{ success }}",
65
+ 'statusbar_url_warn_fg': "{{ warning }}",
66
+ 'tabs_bar_bg': "{{ background }}",
67
+ 'tabs_even_bg': "{{ background_alt }}",
68
+ 'tabs_even_fg': "{{ foreground }}",
69
+ 'tabs_odd_bg': "{{ background_alt }}",
70
+ 'tabs_odd_fg': "{{ foreground }}",
71
+ 'tabs_indicator_error': "{{ alert }}",
72
+ 'tabs_indicator_system': 'none',
73
+ 'tabs_selected_even_bg': "{{ background }}",
74
+ 'tabs_selected_even_fg': "{{ primary }}",
75
+ 'tabs_selected_odd_bg': "{{ background }}",
76
+ 'tabs_selected_odd_fg': "{{ primary }}",
77
+ 'webpage_bg': "{{ background }}",
78
+ }
@@ -0,0 +1,132 @@
1
+ /* Generado por hueman — no editar a mano, se sobreescribe en cada `hueman set`. */
2
+ * {
3
+ bg: {{ background }};
4
+ bg-alt: {{ background_alt }};
5
+ fg: {{ foreground }};
6
+ accent: {{ primary }};
7
+ accent-alt: {{ secondary }};
8
+ accent-text: {{ primary | contrast }};
9
+ accent-alt-text: {{ secondary | contrast }};
10
+ }
11
+
12
+ window {
13
+ background-color: @bg;
14
+ border: 2px;
15
+ border-color: @accent;
16
+ padding: 14px;
17
+ border-radius: 20px;
18
+ }
19
+
20
+ mainbox {
21
+ background-color: @bg;
22
+ border: 0px;
23
+ padding: 0px;
24
+ spacing: 10px;
25
+ }
26
+
27
+ message {
28
+ background-color: @bg-alt;
29
+ text-color: @fg;
30
+ border-radius: 12px;
31
+ padding: 8px;
32
+ }
33
+
34
+ textbox {
35
+ background-color: @bg;
36
+ text-color: @fg;
37
+ }
38
+
39
+ error-message {
40
+ background-color: @bg-alt;
41
+ text-color: @accent;
42
+ border-radius: 12px;
43
+ padding: 10px;
44
+ }
45
+
46
+ inputbar {
47
+ background-color: @bg-alt;
48
+ text-color: @fg;
49
+ padding: 10px 14px;
50
+ border-radius: 14px;
51
+ border: 1px;
52
+ border-color: @accent;
53
+ }
54
+
55
+ entry {
56
+ background-color: transparent;
57
+ text-color: @fg;
58
+ placeholder-color: @bg-alt;
59
+ }
60
+
61
+ prompt {
62
+ background-color: transparent;
63
+ text-color: @accent-alt;
64
+ }
65
+
66
+ case-indicator {
67
+ background-color: transparent;
68
+ text-color: @fg;
69
+ }
70
+
71
+ listview {
72
+ background-color: @bg;
73
+ lines: 10;
74
+ padding: 8px 0px;
75
+ spacing: 4px;
76
+ scrollbar: true;
77
+ scrollbar-width: 4px;
78
+ fixed-height: 0;
79
+ }
80
+
81
+ scrollbar {
82
+ background-color: @bg-alt;
83
+ handle-color: @accent;
84
+ border-radius: 8px;
85
+ }
86
+
87
+ mode-switcher {
88
+ background-color: @bg-alt;
89
+ text-color: @fg;
90
+ border-radius: 12px;
91
+ spacing: 4px;
92
+ }
93
+
94
+ button {
95
+ background-color: @bg-alt;
96
+ text-color: @fg;
97
+ border-radius: 10px;
98
+ padding: 6px;
99
+ }
100
+
101
+ button selected {
102
+ background-color: @accent;
103
+ text-color: @accent-text;
104
+ border-radius: 10px;
105
+ }
106
+
107
+ element {
108
+ background-color: @bg;
109
+ text-color: @fg;
110
+ padding: 8px 10px;
111
+ border-radius: 12px;
112
+ }
113
+
114
+ element-icon {
115
+ background-color: transparent;
116
+ size: 1.2em;
117
+ }
118
+
119
+ element-text {
120
+ background-color: transparent;
121
+ text-color: inherit;
122
+ }
123
+
124
+ element selected {
125
+ background-color: @accent;
126
+ text-color: @accent-text;
127
+ border-radius: 12px;
128
+ }
129
+
130
+ element-text selected {
131
+ text-color: inherit;
132
+ }
@@ -0,0 +1,49 @@
1
+ # Generado por hueman — no editar a mano, se sobreescribe en cada `hueman set`.
2
+ # SSHub usa el tema `current` configurado en ~/.config/sshub/config.toml.
3
+ schema_version = 1
4
+ extends = "default"
5
+ name = "Auto"
6
+ description = "Tema generado por hueman desde la paleta {{ theme_name }}"
7
+
8
+ [palette]
9
+ background = "{{ background }}"
10
+ background_alt = "{{ background_alt }}"
11
+ foreground = "{{ foreground }}"
12
+ primary = "{{ primary }}"
13
+ secondary = "{{ secondary }}"
14
+ alert = "{{ alert }}"
15
+ success = "{{ success }}"
16
+ warning = "{{ warning }}"
17
+ muted = "{{ muted }}"
18
+
19
+ [semantic]
20
+ background = "palette.background"
21
+ canvas = "palette.background"
22
+ surface = "palette.background_alt"
23
+ surface_raised = "palette.background_alt"
24
+
25
+ border = "palette.muted"
26
+ border_focus = "palette.primary"
27
+ border_popup = "palette.secondary"
28
+
29
+ text = "palette.foreground"
30
+ text_bright = "palette.foreground"
31
+ text_highlight = "palette.foreground"
32
+ text_muted = "palette.muted"
33
+ text_dim = "palette.muted"
34
+ text_inverse = "palette.background"
35
+
36
+ accent = "palette.primary"
37
+ selection_bg = "palette.primary"
38
+ selection_fg = "palette.background"
39
+
40
+ success = "palette.success"
41
+ warning = "palette.warning"
42
+ error = "palette.alert"
43
+ info = "palette.secondary"
44
+ connecting = "palette.primary"
45
+ exited = "palette.alert"
46
+ unknown = "palette.muted"
47
+
48
+ pty_background = "palette.background"
49
+ pty_foreground = "palette.foreground"
@@ -0,0 +1,11 @@
1
+ # --- Bloque gestionado por hueman: no editar a mano ---
2
+ [palettes.dotfiles]
3
+ background = "{{ background }}"
4
+ background_alt = "{{ background_alt }}"
5
+ foreground = "{{ foreground }}"
6
+ primary = "{{ primary }}"
7
+ secondary = "{{ secondary }}"
8
+ alert = "{{ alert }}"
9
+ success = "{{ success }}"
10
+ warning = "{{ warning }}"
11
+ muted = "{{ muted }}"
@@ -0,0 +1,20 @@
1
+ # Generado por hueman - no editar a mano, se sobreescribe en cada `hueman set`.
2
+ foreground={{ foreground }}
3
+ background={{ background }}
4
+ cursor={{ cursor }}
5
+ color0={{ color0 }}
6
+ color1={{ color1 }}
7
+ color2={{ color2 }}
8
+ color3={{ color3 }}
9
+ color4={{ color4 }}
10
+ color5={{ color5 }}
11
+ color6={{ color6 }}
12
+ color7={{ color7 }}
13
+ color8={{ color8 }}
14
+ color9={{ color9 }}
15
+ color10={{ color10 }}
16
+ color11={{ color11 }}
17
+ color12={{ color12 }}
18
+ color13={{ color13 }}
19
+ color14={{ color14 }}
20
+ color15={{ color15 }}
@@ -0,0 +1,33 @@
1
+ # Generado por hueman — no editar a mano, se sobreescribe en cada `hueman set`.
2
+ set -g status-style "bg={{ status_bg }},fg={{ status_fg }}"
3
+ set -g pane-border-style "fg={{ pane_border_fg }}"
4
+ set -g pane-active-border-style "fg={{ pane_active_border_fg }}"
5
+ set -g message-style "bg={{ message_bg | default(status_bg) }},fg={{ message_fg | default(status_fg) }}"
6
+ set -g message-command-style "bg={{ message_bg | default(status_bg) }},fg={{ message_fg | default(status_fg) }}"
7
+ set -g mode-style "bg={{ mode_bg | default(pane_active_border_fg) }},fg={{ mode_fg | default(status_bg) }}"
8
+
9
+ set -g status-left-length 50
10
+ set -g status-right-length 120
11
+
12
+ set -g status-left "\
13
+ #[fg={{ segment_session_fg }},bg={{ segment_session_bg }},bold] 🖳 #S \
14
+ #[fg={{ segment_session_bg }},bg={{ status_bg }}] "
15
+
16
+ set -g status-right "\
17
+ #[fg={{ separator_fg }}]│\
18
+ #[fg={{ segment_time_fg }}] 󰃰 %H:%M \
19
+ #[fg={{ separator_fg }}]│\
20
+ #[fg={{ segment_date_fg }}] 󰃶 %d-%b \
21
+ #[fg={{ separator_fg }}]│\
22
+ #[fg={{ segment_user_fg }}] #(whoami) \
23
+ #[fg={{ separator_fg }}]│\
24
+ #[fg={{ segment_battery_fg }}] #(~/.battery) \
25
+ #[fg={{ separator_fg }}]│\
26
+ #{?window_zoomed_flag,#[fg={{ segment_alert_fg }}] zoom ,}"
27
+
28
+ setw -g window-status-format "#[fg={{ window_inactive_fg }},bg={{ status_bg }}] #I #[fg={{ segment_session_bg }}]#W "
29
+ setw -g window-status-current-format "#[fg={{ status_bg }},bg={{ segment_session_bg }},bold] #I #W "
30
+
31
+ setw -g monitor-activity off
32
+ set -g visual-activity off
33
+ setw -g monitor-bell off
@@ -0,0 +1,51 @@
1
+ # Generado por hueman — no editar a mano, se sobreescribe en cada `hueman set`.
2
+ # Activar con `theme = "current"` en ~/.config/tuicr/config.toml o `tuicr --theme current`.
3
+ panel_bg = "{{ background }}"
4
+ bg_highlight = "{{ background_alt }}"
5
+ fg_primary = "{{ foreground }}"
6
+ fg_secondary = "{{ muted }}"
7
+ fg_dim = "{{ muted }}"
8
+
9
+ diff_add = "{{ success }}"
10
+ diff_add_bg = "{{ background_alt }}"
11
+ diff_del = "{{ alert }}"
12
+ diff_del_bg = "{{ background_alt }}"
13
+ diff_context = "{{ foreground }}"
14
+ diff_hunk_header = "{{ secondary }}"
15
+ expanded_context_fg = "{{ muted }}"
16
+
17
+ syntax_add_bg = "{{ background_alt }}"
18
+ syntax_del_bg = "{{ background_alt }}"
19
+
20
+ file_added = "{{ success }}"
21
+ file_modified = "{{ warning }}"
22
+ file_deleted = "{{ alert }}"
23
+ file_renamed = "{{ secondary }}"
24
+
25
+ reviewed = "{{ success }}"
26
+ pending = "{{ warning }}"
27
+
28
+ comment_note = "{{ secondary }}"
29
+ comment_suggestion = "{{ primary }}"
30
+ comment_issue = "{{ alert }}"
31
+ comment_praise = "{{ success }}"
32
+
33
+ border_focused = "{{ primary }}"
34
+ border_unfocused = "{{ background_alt }}"
35
+ status_bar_bg = "{{ background_alt }}"
36
+ cursor_color = "{{ primary }}"
37
+ cursor_line_bg = "{{ background_alt }}"
38
+ branch_name = "{{ secondary }}"
39
+ help_indicator = "{{ muted }}"
40
+
41
+ message_info_fg = "{{ primary | contrast }}"
42
+ message_info_bg = "{{ primary }}"
43
+ message_warning_fg = "{{ warning | contrast }}"
44
+ message_warning_bg = "{{ warning }}"
45
+ message_error_fg = "{{ alert | contrast }}"
46
+ message_error_bg = "{{ alert }}"
47
+ update_badge_fg = "{{ warning | contrast }}"
48
+ update_badge_bg = "{{ warning }}"
49
+
50
+ mode_fg = "{{ primary | contrast }}"
51
+ mode_bg = "{{ primary }}"
@@ -0,0 +1,14 @@
1
+ config.colors = {
2
+ foreground = "{{ foreground }}",
3
+ background = "{{ background }}",
4
+
5
+ cursor_bg = "{{ cursor }}",
6
+ cursor_fg = "{{ cursor_text_color }}",
7
+ cursor_border = "{{ cursor }}",
8
+
9
+ selection_fg = "{{ selection_foreground }}",
10
+ selection_bg = "{{ selection_background }}",
11
+
12
+ ansi = { "{{ color0 }}", "{{ color1 }}", "{{ color2 }}", "{{ color3 }}", "{{ color4 }}", "{{ color5 }}", "{{ color6 }}", "{{ color7 }}" },
13
+ brights = { "{{ color8 }}", "{{ color9 }}", "{{ color10 }}", "{{ color11 }}", "{{ color12 }}", "{{ color13 }}", "{{ color14 }}", "{{ color15 }}" },
14
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "fill": "{{ background }}",
3
+ "text": "{{ primary }}"
4
+ }
@@ -0,0 +1,130 @@
1
+ # Generado por hueman — no editar a mano, se sobreescribe en cada `hueman set`.
2
+ # A TOML linter such as https://taplo.tamasfe.dev/ can use this schema to validate your config.
3
+ # If you encounter any issues, please make an issue at https://github.com/yazi-rs/schemas.
4
+
5
+ [mgr]
6
+ cwd = { fg = "{{ primary }}" }
7
+
8
+ # Hovered
9
+ hovered = { fg = "{{ background }}", bg = "{{ secondary }}" }
10
+ preview_hovered = { underline = true }
11
+
12
+ # Find
13
+ find_keyword = { fg = "{{ warning }}", italic = true }
14
+ find_position = { fg = "{{ secondary }}", bg = "reset", italic = true }
15
+
16
+ # Marker
17
+ marker_selected = { fg = "{{ success }}", bg = "{{ success }}" }
18
+ marker_copied = { fg = "{{ warning }}", bg = "{{ warning }}" }
19
+ marker_cut = { fg = "{{ alert }}", bg = "{{ alert }}" }
20
+
21
+ # Tab
22
+ tab_active = { fg = "{{ background }}", bg = "{{ secondary }}" }
23
+ tab_inactive = { fg = "{{ foreground }}", bg = "{{ background_alt }}" }
24
+ tab_width = 1
25
+
26
+ # Border
27
+ border_symbol = "│"
28
+ border_style = { fg = "{{ muted }}" }
29
+
30
+ # Highlighting
31
+ syntect_theme = ""
32
+
33
+ [status]
34
+ separator_open = ""
35
+ separator_close = ""
36
+ separator_style = { fg = "{{ muted }}", bg = "{{ muted }}" }
37
+
38
+ # Mode
39
+ mode_normal = { fg = "{{ background }}", bg = "{{ secondary }}", bold = true }
40
+ mode_select = { fg = "{{ background }}", bg = "{{ success }}", bold = true }
41
+ mode_unset = { fg = "{{ background }}", bg = "{{ warning }}", bold = true }
42
+
43
+ # Progress
44
+ progress_label = { fg = "{{ foreground }}", bold = true }
45
+ progress_normal = { fg = "{{ secondary }}", bg = "{{ background }}" }
46
+ progress_error = { fg = "{{ alert }}", bg = "{{ background }}" }
47
+
48
+ # Permissions
49
+ permissions_t = { fg = "{{ success }}" }
50
+ permissions_r = { fg = "{{ warning }}" }
51
+ permissions_w = { fg = "{{ alert }}" }
52
+ permissions_x = { fg = "{{ primary }}" }
53
+ permissions_s = { fg = "{{ muted }}" }
54
+
55
+ [input]
56
+ border = { fg = "{{ secondary }}" }
57
+ title = { fg = "{{ foreground }}" }
58
+ value = { fg = "{{ warning }}" }
59
+ selected = { reversed = true }
60
+
61
+ [select]
62
+ border = { fg = "{{ secondary }}" }
63
+ active = { fg = "{{ secondary }}" }
64
+ inactive = { fg = "{{ muted }}" }
65
+
66
+ [tasks]
67
+ border = { fg = "{{ secondary }}" }
68
+ title = { fg = "{{ foreground }}" }
69
+ hovered = { underline = true }
70
+
71
+ [which]
72
+ mask = { bg = "{{ background }}" }
73
+ cand = { fg = "{{ primary }}" }
74
+ rest = { fg = "{{ muted }}" }
75
+ desc = { fg = "{{ secondary }}" }
76
+ separator = " "
77
+ separator_style = { fg = "{{ muted }}" }
78
+
79
+ [help]
80
+ on = { fg = "{{ secondary }}" }
81
+ exec = { fg = "{{ primary }}" }
82
+ desc = { fg = "{{ muted }}" }
83
+ hovered = { bg = "{{ background_alt }}", bold = true }
84
+ footer = { fg = "{{ background }}", bg = "{{ foreground }}" }
85
+
86
+ [notify]
87
+ title_info = { fg = "{{ success }}" }
88
+ title_warn = { fg = "{{ warning }}" }
89
+ title_error = { fg = "{{ alert }}" }
90
+
91
+ # : file, 1: symlink, 2: hardlink, 3: orphaned
92
+ [filetype]
93
+
94
+ rules = [
95
+ # Images
96
+ { mime = "image/*", fg = "{{ primary }}" },
97
+
98
+ # Videos
99
+ { mime = "video/*", fg = "{{ warning }}" },
100
+ { mime = "audio/*", fg = "{{ warning }}" },
101
+
102
+ # Archives
103
+ { mime = "application/zip", fg = "{{ secondary }}" },
104
+ { mime = "application/gzip", fg = "{{ secondary }}" },
105
+ { mime = "application/x-tar", fg = "{{ secondary }}" },
106
+ { mime = "application/x-bzip", fg = "{{ secondary }}" },
107
+ { mime = "application/x-bzip2", fg = "{{ secondary }}" },
108
+ { mime = "application/x-7z-compressed", fg = "{{ secondary }}" },
109
+ { mime = "application/x-rar", fg = "{{ secondary }}" },
110
+ { mime = "application/xz", fg = "{{ secondary }}" },
111
+
112
+ # Documents
113
+ { mime = "application/doc", fg = "{{ success }}" },
114
+ { mime = "application/pdf", fg = "{{ success }}" },
115
+ { mime = "application/rtf", fg = "{{ success }}" },
116
+ { mime = "application/vnd.*", fg = "{{ success }}" },
117
+
118
+ # Text
119
+ { mime = "text/*", fg = "{{ success }}" },
120
+
121
+ # Empty files
122
+ { mime = "inode/x-empty", fg = "{{ alert }}" },
123
+
124
+ # Special files
125
+ { url = "*", is = "orphan", bg = "{{ alert }}" },
126
+ { url = "*", is = "exec", fg = "{{ primary }}" },
127
+
128
+ # Fallback
129
+ { url = "*/", fg = "{{ primary }}" }
130
+ ]
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "{{ theme_name }}",
3
+ "background": "{{ background }}",
4
+ "background_alt": "{{ background_alt }}",
5
+ "foreground": "{{ foreground }}",
6
+ "primary": "{{ primary }}",
7
+ "success": "{{ success }}",
8
+ "warning": "{{ warning }}",
9
+ "alert": "{{ alert }}",
10
+ "muted": "{{ muted }}"
11
+ }
@@ -0,0 +1,119 @@
1
+ Metadata-Version: 2.4
2
+ Name: hueman-cli
3
+ Version: 0.2.0
4
+ Summary: Centralized theme manager: one YAML palette feeds Jinja2 templates that generate each tool's config.
5
+ Author: 4DRIAN0RTIZ
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://hueman.cuevaneander.tech
8
+ Project-URL: Source, https://github.com/NeanderTeam/hueman
9
+ Project-URL: Issues, https://github.com/NeanderTeam/hueman/issues
10
+ Keywords: theme,colors,palette,dotfiles,jinja2,terminal,cli
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Operating System :: OS Independent
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3 :: Only
17
+ Classifier: Programming Language :: Python :: 3.9
18
+ Classifier: Programming Language :: Python :: 3.10
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Programming Language :: Python :: 3.13
22
+ Classifier: Topic :: Desktop Environment
23
+ Classifier: Topic :: Utilities
24
+ Requires-Python: >=3.9
25
+ Description-Content-Type: text/markdown
26
+ License-File: LICENSE
27
+ Requires-Dist: Jinja2>=3.1.6
28
+ Requires-Dist: PyYAML>=6.0.1
29
+ Provides-Extra: dev
30
+ Requires-Dist: pytest>=8.0; extra == "dev"
31
+ Dynamic: license-file
32
+
33
+ # hueman
34
+
35
+ Gestor centralizado de temas: una **paleta de color (YAML)** alimenta
36
+ **templates Jinja2** que generan la configuración real de tus herramientas
37
+ (kitty, tmux, nvim, starship, Windows Terminal, lo que declares en tu propio
38
+ config). Sin dependencias de ningún gestor de dotfiles: todo el mapeo de rutas
39
+ de salida vive en un `hueman.config.yaml` propio, fuera de este repo.
40
+
41
+ ## Quickstart
42
+
43
+ ```sh
44
+ pipx install hueman-cli # o: pip install hueman-cli
45
+ hueman init # escribe un config de ejemplo en ~/.config/hueman/config.yaml
46
+ # ajusta tus targets en ese archivo, luego:
47
+ hueman set <paleta> --dry-run
48
+ hueman set <paleta>
49
+ ```
50
+
51
+ Desde el código fuente (requiere Python >= 3.9):
52
+
53
+ ```sh
54
+ git clone https://github.com/NeanderTeam/hueman.git
55
+ cd hueman && pip install -e .
56
+ ```
57
+
58
+ Actualizar: `pipx upgrade hueman-cli` (o `pip install -U hueman-cli`).
59
+ Desinstalar: `pipx uninstall hueman-cli` (o `pip uninstall hueman-cli`); tu config
60
+ y los archivos generados no se borran (detalle en la
61
+ [guía de instalación](https://hueman.cuevaneander.tech/?p=install)).
62
+
63
+ Otros comandos: `init` (config de ejemplo), `list` (paletas), `status` (tema activo) y `sync` (estado
64
+ compartido entre máquinas).
65
+
66
+ ## Ideas centrales
67
+
68
+ - Una paleta, muchos targets; el mapeo de salidas es declarativo.
69
+ - Templates y paletas empaquetados son defaults; los directorios custom ganan.
70
+ - `overwrite` para archivos generados enteros, `patch` para bloques dentro de
71
+ configs editadas a mano.
72
+ - `reload` por target y `post_apply` global, best-effort, con política
73
+ `warn` / `error`.
74
+ - Sync opcional de la paleta activa entre máquinas (`state_sync`).
75
+ - Agregar una tool nueva es un template + un target, no un cambio al motor.
76
+
77
+ ## Herramientas empaquetadas
78
+
79
+ `hueman/palettes/` y `hueman/templates/` traen 25 paletas estéticas genéricas y templates
80
+ para las herramientas más comunes (kitty, tmux, polybar, nvim/nightfox, dunst,
81
+ bspwm, yazi, qutebrowser, rofi, fzf, atuin, oh-my-posh, wezterm, starship,
82
+ Termux). Para targets idiosincráticos usa `template_dirs` en tu config en vez
83
+ de pedir que se agreguen aquí.
84
+
85
+ ## Documentación
86
+
87
+ Documentación completa: **[hueman.cuevaneander.tech](https://hueman.cuevaneander.tech)**
88
+
89
+ Para verla en local (las fuentes están en `website/`):
90
+
91
+ ```sh
92
+ python3 -m http.server 8765 --directory website
93
+ ```
94
+
95
+ y abre `http://localhost:8765`.
96
+
97
+ ## Soporte
98
+
99
+ ¿Un bug o una idea? Abre un issue en
100
+ [github.com/NeanderTeam/hueman/issues](https://github.com/NeanderTeam/hueman/issues).
101
+
102
+ ## Estructura del repo
103
+
104
+ | Ruta | Contenido |
105
+ |---|---|
106
+ | `hueman/cli.py` | CLI y orquestación (comando `hueman`) |
107
+ | `hueman/engine/` | Config, paletas, targets, render, reload, estado compartido |
108
+ | `hueman/palettes/`, `hueman/templates/` | Paletas YAML y plantillas Jinja2 empaquetadas |
109
+ | `hueman/data/hueman.config.example.yaml` | Ejemplo comentado de config externa (lo escribe `hueman init`) |
110
+ | `tests/` | Suite de tests |
111
+ | `website/` | Sitio de documentación |
112
+
113
+ El repo es autocontenido: nada dentro importa código fuera de sí mismo, salvo
114
+ el config externo que cada usuario provee. Un repo de dotfiles solo necesita
115
+ tener `hueman` instalado y su propio `hueman.config.yaml`.
116
+
117
+ ## Licencia
118
+
119
+ MIT, ver [LICENSE](LICENSE).