diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index 453a46c..6afe2c8 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -78,7 +78,7 @@ jobs: run: | git config user.name "Gitea Actions" git config user.email "actions@gitea" - git add docs/fish-config.md docs/fish-config.1 + git add docs/fish-config.md docs/fish-config.1 conf.d/__fish_config_op_registry.fish git diff --cached --quiet && echo "No changes to commit" && exit 0 git commit -m "chore(docs): regenerate manual and man page" git push diff --git a/conf.d/__fish_config_op_registry.fish b/conf.d/__fish_config_op_registry.fish index 23471be..1d64de1 100644 --- a/conf.d/__fish_config_op_registry.fish +++ b/conf.d/__fish_config_op_registry.fish @@ -5,72 +5,78 @@ # Regenerate with __fish_config_op_registry_rebuild after editing a # # COMPONENT header, or automatically via docs/build-manual.py. # Source: docs/generate_component_registry.py +# +# This file must be sourced before any other conf.d/*.fish file that +# calls the opinionated guard. That currently holds only because fish's +# glob-based conf.d loading happens to sort this filename first +# alphabetically among the guard-calling files -- do not rename it +# without preserving that ordering. set -g __fish_config_op_registry_keys \ - __auto_source_fallback_venv: \ - __fish_config_sync_logging: \ - __fish_user_dots_link: \ - _zellij_dump_log: \ - abbr:abbr-integrations \ - abbr:abbr-overrides \ - agy: \ - auto-pull: \ - autopair: \ - bash: \ - bash_expands: \ - cat: \ - claude: \ - config:cachyos-strip-aliases \ - config:cachyos-strip-overrides \ - config:cachyos-tricks \ - config:cdpath \ - config:exit-wiring \ - config:greeting-stamp \ - config:pager-editor-gpg \ - config:path-setup \ - config:vi-mode \ - done: \ - du: \ - edit: \ - first_run:first-run-bootstrap \ - first_run:first-run-greeting \ - fish_right_prompt: \ - help: \ - hist: \ - key_bindings: \ - kitty-logging: \ - kitty-watcher-reminder: \ - less: \ - logs: \ - ls: \ - mkdir: \ - mv: \ - paru-wrapper:paru-autoexec \ - paru-wrapper:paru-logging \ - ping: \ - puffer: \ - rg: \ - rm: \ - smart_exit:exit-plain \ - smart_exit:logging-guard \ - split: \ - spwin: \ - ssh: \ - starship: \ - tab: \ - theme: \ - tmux-logging: \ - top: \ - tricks:aliases-tricks \ - tricks:tricks-bang \ - tricks:tricks-manpager \ - upgrade: \ - wakatime:wakatime-autoexec \ - wakatime:wakatime-hook \ - yay-wrapper:yay-autoexec \ - yay-wrapper:yay-logging \ - yt-dlp: \ - zoxide: + "__auto_source_fallback_venv:" \ + "__fish_config_sync_logging:" \ + "__fish_user_dots_link:" \ + "_zellij_dump_log:" \ + "abbr:abbr-integrations" \ + "abbr:abbr-overrides" \ + "agy:" \ + "auto-pull:" \ + "autopair:" \ + "bash:" \ + "bash_expands:" \ + "cat:" \ + "claude:" \ + "config:cachyos-strip-aliases" \ + "config:cachyos-strip-overrides" \ + "config:cachyos-tricks" \ + "config:cdpath" \ + "config:exit-wiring" \ + "config:greeting-stamp" \ + "config:pager-editor-gpg" \ + "config:path-setup" \ + "config:vi-mode" \ + "done:" \ + "du:" \ + "edit:" \ + "first_run:first-run-bootstrap" \ + "first_run:first-run-greeting" \ + "fish_right_prompt:" \ + "help:" \ + "hist:" \ + "key_bindings:" \ + "kitty-logging:" \ + "kitty-watcher-reminder:" \ + "less:" \ + "logs:" \ + "ls:" \ + "mkdir:" \ + "mv:" \ + "paru-wrapper:paru-autoexec" \ + "paru-wrapper:paru-logging" \ + "ping:" \ + "puffer:" \ + "rg:" \ + "rm:" \ + "smart_exit:exit-plain" \ + "smart_exit:logging-guard" \ + "split:" \ + "spwin:" \ + "ssh:" \ + "starship:" \ + "tab:" \ + "theme:" \ + "tmux-logging:" \ + "top:" \ + "tricks:aliases-tricks" \ + "tricks:tricks-bang" \ + "tricks:tricks-manpager" \ + "upgrade:" \ + "wakatime:wakatime-autoexec" \ + "wakatime:wakatime-hook" \ + "yay-wrapper:yay-autoexec" \ + "yay-wrapper:yay-logging" \ + "yt-dlp:" \ + "zoxide:" set -g __fish_config_op_registry_values \ "autoexec/venv" \ @@ -80,7 +86,7 @@ set -g __fish_config_op_registry_values \ "integrations/terminal-abbrs" \ "overrides/key-bindings" \ "aliases/dev-tools" \ - "autoexec/sync autoexec/sync" \ + "autoexec/sync" \ "overrides/key-bindings" \ "aliases/shell-tools" \ "overrides/key-bindings" \ diff --git a/docs/generate_component_registry.py b/docs/generate_component_registry.py index 60d4381..6a1b9e6 100644 --- a/docs/generate_component_registry.py +++ b/docs/generate_component_registry.py @@ -67,7 +67,7 @@ def build_registry(components: dict[str, list[str]]) -> tuple[dict[str, list[str ) tags = [t for t in tags if t not in ("always/on", "always/off")] if tags: - registry[f"{identity}:{site}"] = tags + registry[f"{identity}:{site}"] = list(dict.fromkeys(tags)) return registry, warnings @@ -81,6 +81,12 @@ def render(registry: dict[str, list[str]]) -> str: "# Regenerate with __fish_config_op_registry_rebuild after editing a", "# # COMPONENT header, or automatically via docs/build-manual.py.", "# Source: docs/generate_component_registry.py", + "#", + "# This file must be sourced before any other conf.d/*.fish file that", + "# calls the opinionated guard. That currently holds only because fish's", + "# glob-based conf.d loading happens to sort this filename first", + "# alphabetically among the guard-calling files -- do not rename it", + "# without preserving that ordering.", "", ] if not keys: @@ -88,8 +94,9 @@ def render(registry: dict[str, list[str]]) -> str: lines.append("set -g __fish_config_op_registry_values") return "\n".join(lines) + "\n" + quoted_keys = [f'"{k}"' for k in keys] lines.append("set -g __fish_config_op_registry_keys \\") - lines += [f" {k} \\" for k in keys[:-1]] + [f" {keys[-1]}"] + lines += [f" {k} \\" for k in quoted_keys[:-1]] + [f" {quoted_keys[-1]}"] lines.append("") values = ['"' + " ".join(registry[k]) + '"' for k in keys]