hueman-cli 0.2.1__tar.gz → 0.3.1__tar.gz

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 (128) hide show
  1. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/CONTRIBUTING.md +19 -10
  2. hueman_cli-0.3.1/PKG-INFO +130 -0
  3. hueman_cli-0.3.1/README.md +98 -0
  4. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/cli.py +216 -56
  5. hueman_cli-0.3.1/hueman/data/hueman.config.example.yaml +157 -0
  6. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/engine/config.py +17 -17
  7. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/engine/palettes.py +7 -7
  8. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/engine/reload.py +19 -10
  9. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/engine/render.py +56 -34
  10. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/engine/statesource.py +19 -19
  11. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/engine/targets.py +5 -5
  12. hueman_cli-0.3.1/hueman/templates/flowlauncher_theme.xaml.j2 +199 -0
  13. hueman_cli-0.3.1/hueman/templates/telegram.attheme.j2 +157 -0
  14. hueman_cli-0.3.1/hueman/templates/yasb_root.css.j2 +29 -0
  15. hueman_cli-0.3.1/hueman_cli.egg-info/PKG-INFO +130 -0
  16. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman_cli.egg-info/SOURCES.txt +10 -1
  17. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman_cli.egg-info/scm_file_list.json +77 -0
  18. hueman_cli-0.3.1/hueman_cli.egg-info/scm_version.json +8 -0
  19. hueman_cli-0.3.1/scripts/freeze-docs.sh +92 -0
  20. hueman_cli-0.3.1/tests/test_cli_help_contract.py +56 -0
  21. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_colors_and_cli.py +43 -2
  22. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_config_and_palettes.py +1 -1
  23. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_config_validation.py +3 -3
  24. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_config_vars.py +2 -2
  25. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_init_command.py +1 -1
  26. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_palette_names.py +1 -1
  27. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_reload_exit_codes.py +11 -6
  28. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_render_modes.py +8 -6
  29. hueman_cli-0.3.1/tests/test_set_output_contract.py +88 -0
  30. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_state_and_reload.py +2 -2
  31. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_sync_status.py +2 -2
  32. hueman_cli-0.3.1/tests/test_telegram_template.py +78 -0
  33. hueman_cli-0.3.1/tests/test_windows_examples_config.py +80 -0
  34. hueman_cli-0.3.1/tests/test_yasb_flowlauncher_templates.py +120 -0
  35. hueman_cli-0.2.1/PKG-INFO +0 -119
  36. hueman_cli-0.2.1/README.md +0 -87
  37. hueman_cli-0.2.1/hueman/data/hueman.config.example.yaml +0 -111
  38. hueman_cli-0.2.1/hueman_cli.egg-info/PKG-INFO +0 -119
  39. hueman_cli-0.2.1/hueman_cli.egg-info/scm_version.json +0 -8
  40. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/LICENSE +0 -0
  41. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/MANIFEST.in +0 -0
  42. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/SECURITY.md +0 -0
  43. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/__init__.py +0 -0
  44. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/__main__.py +0 -0
  45. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/engine/__init__.py +0 -0
  46. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/engine/colors.py +0 -0
  47. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/engine/fsutil.py +0 -0
  48. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/arctic-ice.yaml +0 -0
  49. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/autumn.yaml +0 -0
  50. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/catppuccin-latte.yaml +0 -0
  51. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/catppuccin-mocha.yaml +0 -0
  52. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/copperwave.yaml +0 -0
  53. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/crimson-vivid.yaml +0 -0
  54. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/dracula.yaml +0 -0
  55. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/ember-red.yaml +0 -0
  56. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/everforest-dark.yaml +0 -0
  57. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/galaxy.yaml +0 -0
  58. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/gruvbox-light.yaml +0 -0
  59. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/gruvbox.yaml +0 -0
  60. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/kanagawa-dragon.yaml +0 -0
  61. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/matrix.yaml +0 -0
  62. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/mono-contrast.yaml +0 -0
  63. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/nord.yaml +0 -0
  64. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/ocean-deep.yaml +0 -0
  65. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/one-light.yaml +0 -0
  66. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/onyx-gold.yaml +0 -0
  67. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/rose-pine-dawn.yaml +0 -0
  68. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/solarized-light.yaml +0 -0
  69. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/synthwave.yaml +0 -0
  70. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/tokyonight.yaml +0 -0
  71. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/tuxedo.yaml +0 -0
  72. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/vaporwave.yaml +0 -0
  73. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/resources.py +0 -0
  74. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/atuin_theme.toml.j2 +0 -0
  75. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/bottom_theme.toml.j2 +0 -0
  76. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/bspwm_colors.conf.j2 +0 -0
  77. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/claude_statusline.sh.j2 +0 -0
  78. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/dunst_colors.conf.j2 +0 -0
  79. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/fzf_opts.j2 +0 -0
  80. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/fzf_theme.j2 +0 -0
  81. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/herdr_theme_custom.toml.j2 +0 -0
  82. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/k9s_theme.yaml.j2 +0 -0
  83. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/kitty.conf.j2 +0 -0
  84. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/lazydocker_theme.yml.j2 +0 -0
  85. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/leaf_theme.toml.j2 +0 -0
  86. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/newt_colors.j2 +0 -0
  87. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/nvim_nightfox_theme.lua.j2 +0 -0
  88. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/omp.omp.json.j2 +0 -0
  89. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/opencode_theme.json.j2 +0 -0
  90. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/pi_theme.json.j2 +0 -0
  91. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/polybar_colors.ini.j2 +0 -0
  92. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/posting_theme.yaml.j2 +0 -0
  93. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/qutebrowser_github.user.js.j2 +0 -0
  94. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/qutebrowser_google.user.js.j2 +0 -0
  95. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/qutebrowser_hteam.user.js.j2 +0 -0
  96. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/qutebrowser_theme.py.j2 +0 -0
  97. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/rofi_theme.rasi.j2 +0 -0
  98. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/sshub_theme.toml.j2 +0 -0
  99. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/starship_block.toml.j2 +0 -0
  100. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/termux_colors.properties.j2 +0 -0
  101. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/tmux.conf.j2 +0 -0
  102. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/tuicr_theme.toml.j2 +0 -0
  103. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/wezterm_colors.lua.j2 +0 -0
  104. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/windhawk_taskbar.json.j2 +0 -0
  105. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/yazi_theme.toml.j2 +0 -0
  106. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/zen_theme.json.j2 +0 -0
  107. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman_cli.egg-info/dependency_links.txt +0 -0
  108. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman_cli.egg-info/entry_points.txt +0 -0
  109. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman_cli.egg-info/requires.txt +0 -0
  110. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman_cli.egg-info/top_level.txt +0 -0
  111. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/pyproject.toml +0 -0
  112. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/requirements.txt +0 -0
  113. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/setup.cfg +0 -0
  114. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/conftest.py +0 -0
  115. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_atomic_writes.py +0 -0
  116. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_command_substitution.py +0 -0
  117. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_error_paths.py +0 -0
  118. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_file_source.py +0 -0
  119. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_idempotence.py +0 -0
  120. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_packaging.py +0 -0
  121. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_real_config.py +0 -0
  122. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_render.py +0 -0
  123. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_sandbox.py +0 -0
  124. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_starship_marker.py +0 -0
  125. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_state_branch.py +0 -0
  126. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_state_source_contract.py +0 -0
  127. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_sync_network.py +0 -0
  128. {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_termux_template.py +0 -0
@@ -22,7 +22,7 @@ Run `python -m pytest -q` before opening the PR.
22
22
 
23
23
  ## Documentation
24
24
 
25
- The docs live in `website/content/latest` (written in Spanish).
25
+ The docs live in `website/content/latest` (English, public product language).
26
26
 
27
27
  - Add a tool or target: [add-a-tool](website/content/latest/guides/add-a-tool.md)
28
28
  - Add a palette: [add-a-palette](website/content/latest/guides/add-a-palette.md)
@@ -33,15 +33,24 @@ templates, not in Python.
33
33
  ### Freezing docs for a release
34
34
 
35
35
  The site is static (`website/`, no build step). `content/latest` is the editable
36
- tip; each release gets a frozen copy. Page ids in `content/*/nav.json` are used
37
- as URLs (`?p=<id>`), so do not rename them.
38
-
39
- 1. Cut the release as usual.
40
- 2. Copy `website/content/latest/` to `website/content/vX.Y.Z/`.
41
- 3. Add an entry to `website/data/versions.json` with `channel: release`, the
42
- `semver` and the release date as `updated`; bump `updated` on `latest`.
43
- 4. Check that every nav id resolves, internal links work and the changelog has a
44
- section for that tag.
36
+ tip. Page ids in `content/*/nav.json` are used as URLs (`?p=<id>`), so do not
37
+ rename them.
38
+
39
+ Docs freezes are **automatic** on release. When `release.yml` cuts a version it
40
+ runs `scripts/freeze-docs.sh vX.Y.Z` before tagging, in the same
41
+ `chore(release): vX.Y.Z` commit as the changelog. That script:
42
+
43
+ 1. Copies `website/content/latest/` → `website/content/vX.Y.Z/`
44
+ 2. Copies `website/skills/latest/` → `website/skills/vX.Y.Z/` when present
45
+ 3. Inserts the release entry in `website/data/versions.json` and marks the
46
+ previous release snapshot as `supported`
47
+
48
+ Do **not** open a follow-up PR just to freeze docs. To dry-run locally:
49
+
50
+ ```bash
51
+ ./scripts/freeze-docs.sh vX.Y.Z
52
+ # inspect, then discard the generated paths if you are not cutting a release
53
+ ```
45
54
 
46
55
  ## Security
47
56
 
@@ -0,0 +1,130 @@
1
+ Metadata-Version: 2.4
2
+ Name: hueman-cli
3
+ Version: 0.3.1
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
+ <p align="center">
34
+ <img src="website/assets/img/logo.png" alt="hueman" width="128" />
35
+ </p>
36
+
37
+ <h1 align="center">hueman</h1>
38
+
39
+ <p align="center"><strong>One palette. Every tool.</strong></p>
40
+
41
+ <p align="center">
42
+ One theme for your terminal, editor, prompt, and the rest of your setup.<br />
43
+ You say which file each app uses, and one command paints them all.<br />
44
+ Not a dotfiles manager: output paths live in your own <code>hueman.config.yaml</code>,
45
+ outside this repo.
46
+ </p>
47
+
48
+ ## Quickstart
49
+
50
+ ```sh
51
+ pipx install hueman-cli # or: pip install hueman-cli
52
+ hueman init # sample config → ~/.config/hueman/config.yaml
53
+ # point targets/outputs at your paths, then:
54
+ hueman set <palette> --dry-run
55
+ hueman set <palette>
56
+ ```
57
+
58
+ From source (Python >= 3.9):
59
+
60
+ ```sh
61
+ git clone https://github.com/NeanderTeam/hueman.git
62
+ cd hueman && pip install -e .
63
+ ```
64
+
65
+ Upgrade: `pipx upgrade hueman-cli` (or `pip install -U hueman-cli`).
66
+ Uninstall: `pipx uninstall hueman-cli` (or `pip uninstall hueman-cli`); your
67
+ config and generated files are left alone (details in the
68
+ [install guide](https://hueman.cuevaneander.tech/?p=install)).
69
+
70
+ Other commands: `init` (sample config), `list` (palettes), `status` (active
71
+ theme), `sync` (shared state across machines).
72
+
73
+ Quick reference on the machine: `hueman --help` and `hueman <command> --help`.
74
+
75
+ ## Core ideas
76
+
77
+ - One palette, many targets; output mapping is declarative.
78
+ - Packaged templates and palettes are defaults; custom dirs win.
79
+ - `overwrite` for full generated files, `patch` for blocks inside hand-edited
80
+ configs.
81
+ - Per-target `reload` and global `post_apply`, best-effort, with `warn` /
82
+ `error` policy.
83
+ - Optional sync of the active palette across machines (`state_sync`).
84
+ - To support a new app, add a template and a target.
85
+
86
+ ## Packaged tools
87
+
88
+ `hueman/palettes/` and `hueman/templates/` ship 25 generic palettes and
89
+ templates for common tools (kitty, tmux, polybar, nvim/nightfox, dunst, bspwm,
90
+ yazi, qutebrowser, rofi, fzf, atuin, oh-my-posh, wezterm, starship, Termux,
91
+ herdr, and more). For other tools, use `template_dirs` in your config instead of
92
+ asking for them to be packaged here.
93
+
94
+ ## Docs
95
+
96
+ Full site: **[hueman.cuevaneander.tech](https://hueman.cuevaneander.tech)**
97
+ (`/` = landing, `?p=intro` = docs). For flags and short examples on your
98
+ machine, use `hueman --help` / `hueman set --help` rather than a man page.
99
+
100
+ Local preview (sources under `website/`):
101
+
102
+ ```sh
103
+ python3 -m http.server 8765 --directory website
104
+ ```
105
+
106
+ then open `http://localhost:8765`.
107
+
108
+ ## Support
109
+
110
+ Bug or idea? Open an issue at
111
+ [github.com/NeanderTeam/hueman/issues](https://github.com/NeanderTeam/hueman/issues).
112
+
113
+ ## Repo layout
114
+
115
+ | Path | Contents |
116
+ |---|---|
117
+ | `hueman/cli.py` | CLI and orchestration (`hueman` command) |
118
+ | `hueman/engine/` | Config, palettes, targets, render, reload, shared state |
119
+ | `hueman/palettes/`, `hueman/templates/` | Packaged YAML palettes and Jinja2 templates |
120
+ | `hueman/data/hueman.config.example.yaml` | Commented external config example (`hueman init`) |
121
+ | `tests/` | Test suite |
122
+ | `website/` | Landing + documentation site |
123
+
124
+ The repo is self-contained: nothing inside imports code from outside itself,
125
+ except the external config each user provides. A dotfiles repo only needs
126
+ `hueman` installed and its own `hueman.config.yaml`.
127
+
128
+ ## License
129
+
130
+ MIT, see [LICENSE](LICENSE).
@@ -0,0 +1,98 @@
1
+ <p align="center">
2
+ <img src="website/assets/img/logo.png" alt="hueman" width="128" />
3
+ </p>
4
+
5
+ <h1 align="center">hueman</h1>
6
+
7
+ <p align="center"><strong>One palette. Every tool.</strong></p>
8
+
9
+ <p align="center">
10
+ One theme for your terminal, editor, prompt, and the rest of your setup.<br />
11
+ You say which file each app uses, and one command paints them all.<br />
12
+ Not a dotfiles manager: output paths live in your own <code>hueman.config.yaml</code>,
13
+ outside this repo.
14
+ </p>
15
+
16
+ ## Quickstart
17
+
18
+ ```sh
19
+ pipx install hueman-cli # or: pip install hueman-cli
20
+ hueman init # sample config → ~/.config/hueman/config.yaml
21
+ # point targets/outputs at your paths, then:
22
+ hueman set <palette> --dry-run
23
+ hueman set <palette>
24
+ ```
25
+
26
+ From source (Python >= 3.9):
27
+
28
+ ```sh
29
+ git clone https://github.com/NeanderTeam/hueman.git
30
+ cd hueman && pip install -e .
31
+ ```
32
+
33
+ Upgrade: `pipx upgrade hueman-cli` (or `pip install -U hueman-cli`).
34
+ Uninstall: `pipx uninstall hueman-cli` (or `pip uninstall hueman-cli`); your
35
+ config and generated files are left alone (details in the
36
+ [install guide](https://hueman.cuevaneander.tech/?p=install)).
37
+
38
+ Other commands: `init` (sample config), `list` (palettes), `status` (active
39
+ theme), `sync` (shared state across machines).
40
+
41
+ Quick reference on the machine: `hueman --help` and `hueman <command> --help`.
42
+
43
+ ## Core ideas
44
+
45
+ - One palette, many targets; output mapping is declarative.
46
+ - Packaged templates and palettes are defaults; custom dirs win.
47
+ - `overwrite` for full generated files, `patch` for blocks inside hand-edited
48
+ configs.
49
+ - Per-target `reload` and global `post_apply`, best-effort, with `warn` /
50
+ `error` policy.
51
+ - Optional sync of the active palette across machines (`state_sync`).
52
+ - To support a new app, add a template and a target.
53
+
54
+ ## Packaged tools
55
+
56
+ `hueman/palettes/` and `hueman/templates/` ship 25 generic palettes and
57
+ templates for common tools (kitty, tmux, polybar, nvim/nightfox, dunst, bspwm,
58
+ yazi, qutebrowser, rofi, fzf, atuin, oh-my-posh, wezterm, starship, Termux,
59
+ herdr, and more). For other tools, use `template_dirs` in your config instead of
60
+ asking for them to be packaged here.
61
+
62
+ ## Docs
63
+
64
+ Full site: **[hueman.cuevaneander.tech](https://hueman.cuevaneander.tech)**
65
+ (`/` = landing, `?p=intro` = docs). For flags and short examples on your
66
+ machine, use `hueman --help` / `hueman set --help` rather than a man page.
67
+
68
+ Local preview (sources under `website/`):
69
+
70
+ ```sh
71
+ python3 -m http.server 8765 --directory website
72
+ ```
73
+
74
+ then open `http://localhost:8765`.
75
+
76
+ ## Support
77
+
78
+ Bug or idea? Open an issue at
79
+ [github.com/NeanderTeam/hueman/issues](https://github.com/NeanderTeam/hueman/issues).
80
+
81
+ ## Repo layout
82
+
83
+ | Path | Contents |
84
+ |---|---|
85
+ | `hueman/cli.py` | CLI and orchestration (`hueman` command) |
86
+ | `hueman/engine/` | Config, palettes, targets, render, reload, shared state |
87
+ | `hueman/palettes/`, `hueman/templates/` | Packaged YAML palettes and Jinja2 templates |
88
+ | `hueman/data/hueman.config.example.yaml` | Commented external config example (`hueman init`) |
89
+ | `tests/` | Test suite |
90
+ | `website/` | Landing + documentation site |
91
+
92
+ The repo is self-contained: nothing inside imports code from outside itself,
93
+ except the external config each user provides. A dotfiles repo only needs
94
+ `hueman` installed and its own `hueman.config.yaml`.
95
+
96
+ ## License
97
+
98
+ MIT, see [LICENSE](LICENSE).