2026-10-13 · 94a7408
Tango Remixer Documentation

Editor Setup

Emacs (Eglot)

Important

Syntax highlighting needs Eglot >= 1.20 (introduced eglot-semantic-tokens-mode). Older Eglot still gets diagnostics, just no colors.

Check via M-x list-packages (find eglot). If too old, install the latest from GNU ELPA:

M-x package-refresh-contents
M-x package-install RET eglot RET

The ELPA copy shadows the bundled one.

Emacs support is one file, editors/emacs/tango-included-icons.el: a dedicated major mode for included_icons.txt plus the Eglot wiring. There is nothing to install -- pick one of the two ways to load it.

Put this on the first line of your included_icons.txt. The path is relative to the file's own directory; adjust it to where you keep the submodule.

# -*- eval: (load-file "tango-remixer/editors/emacs/tango-included-icons.el") -*-

It combines with the usual mode cookie, which then serves as the fallback when the eval is declined:

# -*- mode: conf; eval: (load-file "tango-remixer/editors/emacs/tango-included-icons.el") -*-

The same thing as a block at the end of the file (Emacs only looks for this block near the end, so keep it last):

# Local Variables:
# eval: (load-file "tango-remixer/editors/emacs/tango-included-icons.el")
# End:

On first visit Emacs asks whether to run that eval. Press !: the form is then saved to your custom-file and never asked again, and later changes to the .el file don't re-trigger the prompt. Answering y works too, but you'll be asked twice per visit (switching major mode makes Emacs re-read the local variables) and again on every visit.

The prompt is not a defect: it is the only thing standing between "opening a file" and "running code shipped in the repository". Nothing here runs without that one-time consent. If your enable-local-variables is :safe, Emacs silently skips the form instead of asking; allow exactly this form with:

(add-to-list 'safe-local-eval-forms
             '(load-file "tango-remixer/editors/emacs/tango-included-icons.el"))

Option B: global init.el setup

Load the file from your init file with an absolute path. It registers auto-mode-alist, so every included_icons.txt you open gets the mode and Eglot; the server is located relative to the .el file itself.

(load "/absolute/path/to/tango-remixer/editors/emacs/tango-included-icons.el")

Trade-off: pins one checkout. Use Option A when each project carries its own tango-remixer/ submodule.

A # -*- mode: conf -*- cookie on the first line of included_icons.txt takes precedence over auto-mode-alist, so with Option B either remove the cookie or change it to # -*- mode: tango-included-icons -*-.

Notes

  • The mode starts the server as python3 lsp/server.py directly: no wrapper script, no cwd dependency, works on Windows. If pygls lives in a venv, point tango-included-icons-python at that interpreter in your init file.
  • Why a dedicated mode instead of text-mode: Eglot attaches the running server to every buffer in the same project whose major mode derives from the managed one (provided-mode-derived-p). Bound to text-mode, it would grab magit's commit message buffer and spam it with bogus diagnostics. tango-included-icons-mode derives from text-mode but nothing derives from it, so only included_icons.txt is managed.

Neovim (nvim-lspconfig)

Bind a custom filetype to the included_icons.txt filename so Neovim only loads the LSP for that one file (not every .txt you open):

-- Map the filename to its own filetype.
vim.filetype.add({
  filename = { ["included_icons.txt"] = "included_icons" },
})

-- Register the server, scoped to that filetype.
local lspconfig = require("lspconfig")
local configs = require("lspconfig.configs")
if not configs.tango_icons_lsp then
  configs.tango_icons_lsp = {
    default_config = {
      cmd = { "./resources/tango-remixer/included-icons-lsp" },
      filetypes = { "included_icons" },
      root_dir = lspconfig.util.root_pattern("included_icons.txt"),
    },
  }
end
lspconfig.tango_icons_lsp.setup({})

Helix

In ~/.config/helix/languages.toml (or per-project .helix/languages.toml). Register a dedicated language matched by the filename only, so other text files keep their normal treatment:

[language-server.tango-icons]
command = "./resources/tango-remixer/included-icons-lsp"

[[language]]
name = "included-icons"
scope = "text.included-icons"
file-types = [{ glob = "included_icons.txt" }]
language-servers = ["tango-icons"]

VSCode

No first-class support. You need a generic-LSP-client extension, or to write a small wrapper extension yourself. Not documented here.

Editor Setup
About Tango Remixer

Tango Remixer

Remix Tango-flavoured icon themes into one XDG icon theme for Qt and GTK applications.

This page is README.md at commit 94a7408, generated 2026-10-13.

Source on GitHub
Credits
Written by
  • Tango Remixer: 80% are written manually, the rests are assisted by some LLMs. 100% fully-reviewed by human.
  • LSP server: 100% code are by LLM agent, with rough manual code review.
  • Homepage, Icon viewer: 100% code are written by LLM agent.
  • llselect (@llselect/core): the combo boxes in the Icon Viewer.
Documented by
README.md, which these pages are: rendered by Python-Markdown, its code coloured by Pygments.
Artwork by
Some extra icons and fixes in the forks the icons come from: Tango, Nome, Humanity.
The icon themes' authors
Tango, Nome and the others of Built-in Icon Themes and Licenses. Each with where its files are:
Clearlooks: Richard Stellingwerff, Daniel Borgmann
GNOME 2's theme and its Metacity window frame, redrawn here in CSS.
DMZ-White: Novell, Inc.
The mouse cursors, 2007–2010 (viewer/static/cursors/).
License
Tango Remixer: GNU General Public License, version 3
The build, the viewer, README.md and this website: see Licenses. gnu.org/licenses/gpl-3.0
Parts of this page under licenses of their own
The icons: each theme's own license
In Built-in Icon Themes and Licenses; the viewer's list, with where each theme's files are:
Mouse cursors, DMZ-White: CC BY-SA 3.0 Unported
© 2007–2010 Novell, Inc.; Debian's dmz-cursor-theme package.
License text