Skip to content

[pull] master from Gogh-Co:master - #12

Open
pull[bot] wants to merge 1348 commits into
briorg:masterfrom
Gogh-Co:master
Open

pull[bot] wants to merge 1348 commits into
briorg:masterfrom
Gogh-Co:master

Conversation

@pull

@pull pull Bot commented Jan 13, 2026 •

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

@pull pull Bot locked and limited conversation to collaborators Jan 13, 2026
@pull pull Bot added ⤵️ pull merge-conflict Resolve conflicts manually labels Jan 13, 2026
Mgldvd and others added 30 commits September 28, 2026 08:58
GitHub deprecated Node 20 for actions and currently forces them onto
Node 24 with a warning on every run.

- actions/checkout v4 -> v7 and actions/setup-python v5 -> v7, both
  on Node 24. Their breaking changes don't apply here: no workflow
  uses pull_request_target or workflow_run, or setup-python's removed
  pip-install input
- Replace actions/create-release@v1, archived and still on Node 12,
  with `gh release create`, keeping the same tag, title, notes and
  target commit
Add kmscon, the Linux virtual terminal and Termux, which Gogh supports
but the Terminal dropdown didn't offer, and drop st+, which Gogh
doesn't support (st users can pick "Other (not listed)").
fix: rename appy_tilixschemes to apply_tilixschemes
ci: move GitHub Actions off Node 20 and Node 12
docs: list every supported terminal in the bug report template
…g one

A theme name becomes three file names -- its gogh.sh THEMES entry,
installs/<slug>.sh and the data/ files -- and two names can map to the
same one ("Dracula" and "Dracula+" are both dracula). The generators
then silently drop one from THEMES, overwrite one installer, and rename
one data/ file with a -1 suffix.

- theme_common.py: move the installer (step 7) and THEMES (step 8) slug
  rules into installer_slug() and gogh_list_slug(), and add
  theme_file_slugs() returning all three. Steps 7 and 8 use them with
  identical output (verified: all 1247 installers and the THEMES array
  regenerate unchanged)
- validate_theme_format.py: a newly added theme fails when any of its
  file names is taken by an existing theme, which keeps its name; two
  new themes colliding with each other both fail. No existing theme
  collides today
- Document the rule in CONTRIBUTING.md, tools/README.md and task help
gogh.sh downloads installs/<entry> for each THEMES entry, but step 8
built the entries with its own rule while step 7 names the installers
with another. For a name starting with a symbol, like "(Foo)", the
entry became -foo.sh while the installer is foo.sh, so gogh.sh would
list a theme whose installer doesn't exist.

Step 8 now uses installer_slug(), the same rule as step 7, so the two
always match, and gogh_list_slug() goes away. No current theme is
affected: the THEMES array regenerates unchanged.
validate_theme_format.py imports its slug and contrast rules from
tools/lib/theme_common.py, so a change there can change what validation
accepts, but it didn't trigger the workflow.
feat(validate): reject new themes whose name collides with an existing one
fix(generate): name THEMES entries with the installer slug
The README links each terminal to its apply_*() function in
apply-colors.sh by line number, and those anchors drift whenever lines
move above a function: all 20 had drifted by 37-58 lines until #560.

- validate_readme_links.py checks that every link points at the line
  where its function is defined, and --fix rewrites them; a link to a
  function that no longer exists fails even with --fix
- CI runs it in "Validate PR", now also triggered by README.md changes
- task validate:readme-links / validate:readme-links-fix, and
  `task validate` includes the check
- CONTRIBUTING.md explains when to run the fix; tools/README.md lists
  the script and brings validate_pr.py's row up to date with the
  non-theme PR rules from #559
fix: correct "deriviates" typo in the unsupported terminal message
feat(validate): keep README links to the apply functions in sync
Alacritty support lived in apply-alacritty.py, which needed ruamel.yaml,
tomli and tomli_w (not shipped with Alacritty) and, since the TOML
switch, dropped the user's comments when rewriting alacritty.toml.

apply_alacritty now works like Kitty and Ghostty: the theme goes into
gogh.toml next to alacritty.toml, which only gets one import entry
(general.import on 0.14+, top-level import on 0.13, detected with
`alacritty --version`). An existing import array keeps its entries and
gets gogh.toml last, on one line or several.

The importing file is loaded after its imports, so [colors.primary],
[colors.normal] and [colors.bright] tables left in alacritty.toml (as
the old helper wrote them) are commented out after a backup; colors set
as dotted keys or inline tables are reported instead. alacritty.yml
(Alacritty < 0.13) now fails with a pointer to `alacritty migrate`.

- Remove apply-alacritty.py, its download in gogh.sh and
  GOGH_ALACRITTY_SCRIPT, and ruamel.yaml/tomli/tomli_w from
  requirements.txt
- Docker tests: Alacritty from scratch and over existing color tables
- Update NON_INTERACTIVE.md, TROUBLESHOOTING.md and the README links
Backups are named <file>.<timestamp> to the second, so several changes
within one second (e.g. applying many themes at once) overwrote the
backup holding the user's original config with a later one. Move the
backup into a shared backupConfig helper that keeps the first backup of
each second and skips empty files.
- Strip TOML comments outside quoted strings only, so a comment
  containing quotes (`import = ["a"] # see "a"`) no longer hides the
  closing bracket, and a "#" inside a path isn't taken as a comment
- Check for an existing gogh.toml import inside the import array only:
  the same path in another setting or comment no longer skips it
- When `alacritty --version` can't be read, use the top-level import,
  which every version reads (0.14+ with a deprecation warning), instead
  of general.import, which 0.13 ignores
- Fail with an error instead of reporting success when gogh.toml,
  the backup or alacritty.toml can't be written
Terminator support lived in apply-terminator.py, which needed configobj
(not always installed with Terminator, #439), crashed when the config
had no [profiles] section, and wiped an existing profile's settings
when asked not to copy the default one.

apply_terminator now edits the config with awk: it sets
use_theme_colors = False (the helper meant to, but never wrote it),
background_color, foreground_color and palette on the chosen profile
under [profiles] -- never the [[default]] of [layouts] -- replacing
those keys in place and keeping every other setting. A missing
[profiles] section, profile or config file is created; only a new
profile asks whether to start as a copy of default. Same prompts and
backup as before, using backupConfig.

With both helpers gone, Gogh no longer needs Python to apply themes:
- Remove apply-terminator.py, its download in gogh.sh,
  GOGH_TERMINATOR_SCRIPT and configobj from requirements.txt (now only
  the generate/validate tools' dependencies)
- Docker tests drop Python and cover Terminator from scratch too
- Update NON_INTERACTIVE.md, TROUBLESHOOTING.md, the improvement issue
  template, validate-on-pr.yml paths and the README links
- "Copy the rest of the settings from the default profile?" asks again
  on anything other than Y/yes/N/no/Enter, as the Python helper did,
  instead of taking it as yes
- Fail with an error instead of reporting success when the config or
  its backup can't be written
feat(alacritty): apply themes from apply-colors.sh, without Python
feat(terminator): apply themes from apply-colors.sh, without Python

This branch has not been deployed

No deployments
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

⤵️ pull merge-conflict Resolve conflicts manually

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants