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.
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/CONTRIBUTING.md +19 -10
- hueman_cli-0.3.1/PKG-INFO +130 -0
- hueman_cli-0.3.1/README.md +98 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/cli.py +216 -56
- hueman_cli-0.3.1/hueman/data/hueman.config.example.yaml +157 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/engine/config.py +17 -17
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/engine/palettes.py +7 -7
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/engine/reload.py +19 -10
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/engine/render.py +56 -34
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/engine/statesource.py +19 -19
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/engine/targets.py +5 -5
- hueman_cli-0.3.1/hueman/templates/flowlauncher_theme.xaml.j2 +199 -0
- hueman_cli-0.3.1/hueman/templates/telegram.attheme.j2 +157 -0
- hueman_cli-0.3.1/hueman/templates/yasb_root.css.j2 +29 -0
- hueman_cli-0.3.1/hueman_cli.egg-info/PKG-INFO +130 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman_cli.egg-info/SOURCES.txt +10 -1
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman_cli.egg-info/scm_file_list.json +77 -0
- hueman_cli-0.3.1/hueman_cli.egg-info/scm_version.json +8 -0
- hueman_cli-0.3.1/scripts/freeze-docs.sh +92 -0
- hueman_cli-0.3.1/tests/test_cli_help_contract.py +56 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_colors_and_cli.py +43 -2
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_config_and_palettes.py +1 -1
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_config_validation.py +3 -3
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_config_vars.py +2 -2
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_init_command.py +1 -1
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_palette_names.py +1 -1
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_reload_exit_codes.py +11 -6
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_render_modes.py +8 -6
- hueman_cli-0.3.1/tests/test_set_output_contract.py +88 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_state_and_reload.py +2 -2
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_sync_status.py +2 -2
- hueman_cli-0.3.1/tests/test_telegram_template.py +78 -0
- hueman_cli-0.3.1/tests/test_windows_examples_config.py +80 -0
- hueman_cli-0.3.1/tests/test_yasb_flowlauncher_templates.py +120 -0
- hueman_cli-0.2.1/PKG-INFO +0 -119
- hueman_cli-0.2.1/README.md +0 -87
- hueman_cli-0.2.1/hueman/data/hueman.config.example.yaml +0 -111
- hueman_cli-0.2.1/hueman_cli.egg-info/PKG-INFO +0 -119
- hueman_cli-0.2.1/hueman_cli.egg-info/scm_version.json +0 -8
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/LICENSE +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/MANIFEST.in +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/SECURITY.md +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/__init__.py +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/__main__.py +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/engine/__init__.py +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/engine/colors.py +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/engine/fsutil.py +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/arctic-ice.yaml +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/autumn.yaml +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/catppuccin-latte.yaml +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/catppuccin-mocha.yaml +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/copperwave.yaml +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/crimson-vivid.yaml +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/dracula.yaml +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/ember-red.yaml +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/everforest-dark.yaml +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/galaxy.yaml +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/gruvbox-light.yaml +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/gruvbox.yaml +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/kanagawa-dragon.yaml +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/matrix.yaml +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/mono-contrast.yaml +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/nord.yaml +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/ocean-deep.yaml +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/one-light.yaml +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/onyx-gold.yaml +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/rose-pine-dawn.yaml +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/solarized-light.yaml +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/synthwave.yaml +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/tokyonight.yaml +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/tuxedo.yaml +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/palettes/vaporwave.yaml +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/resources.py +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/atuin_theme.toml.j2 +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/bottom_theme.toml.j2 +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/bspwm_colors.conf.j2 +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/claude_statusline.sh.j2 +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/dunst_colors.conf.j2 +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/fzf_opts.j2 +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/fzf_theme.j2 +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/herdr_theme_custom.toml.j2 +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/k9s_theme.yaml.j2 +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/kitty.conf.j2 +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/lazydocker_theme.yml.j2 +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/leaf_theme.toml.j2 +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/newt_colors.j2 +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/nvim_nightfox_theme.lua.j2 +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/omp.omp.json.j2 +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/opencode_theme.json.j2 +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/pi_theme.json.j2 +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/polybar_colors.ini.j2 +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/posting_theme.yaml.j2 +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/qutebrowser_github.user.js.j2 +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/qutebrowser_google.user.js.j2 +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/qutebrowser_hteam.user.js.j2 +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/qutebrowser_theme.py.j2 +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/rofi_theme.rasi.j2 +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/sshub_theme.toml.j2 +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/starship_block.toml.j2 +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/termux_colors.properties.j2 +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/tmux.conf.j2 +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/tuicr_theme.toml.j2 +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/wezterm_colors.lua.j2 +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/windhawk_taskbar.json.j2 +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/yazi_theme.toml.j2 +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman/templates/zen_theme.json.j2 +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman_cli.egg-info/dependency_links.txt +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman_cli.egg-info/entry_points.txt +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman_cli.egg-info/requires.txt +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/hueman_cli.egg-info/top_level.txt +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/pyproject.toml +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/requirements.txt +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/setup.cfg +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/conftest.py +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_atomic_writes.py +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_command_substitution.py +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_error_paths.py +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_file_source.py +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_idempotence.py +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_packaging.py +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_real_config.py +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_render.py +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_sandbox.py +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_starship_marker.py +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_state_branch.py +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_state_source_contract.py +0 -0
- {hueman_cli-0.2.1 → hueman_cli-0.3.1}/tests/test_sync_network.py +0 -0
- {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` (
|
|
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
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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).
|