DigitableCourses
Portal settings
Show me around

Local and account-free. No account, no sign-up: whatever you type into the tools stays in this browser's localStorage and never reaches a server.

Our own counter records page opens and finishes: the address leaves, plus one tenth-of-the-text figure. No cookies, no outside trackers, your IP is not stored, Do Not Track is honoured. How to check that

The portal's own repository is not published, so we do not call it open source. What is open:

The portal lives on donations, paid consultations and requested write-ups, and on Workbench sales.

There are no plans to make the courses paid.

Digitable Focus · v0.1.0

Integrations catalogue

All 53 Digitable Focus targets with instructions and the configs themselves: filter by category, find your tool by name and see how the palette sits in its interface. Installing and configuring this by hand is free — what people buy is the assembled archive.

Catalogue

53 targets. One palette in all of them.

Carbon, Paper and Signal are built from one set of tokens, so in the terminal, the editor, a git diff and a messenger these are literally the same colours in the same roles: background, accent, string, keyword, error. You choose the palette once — after that it repeats in every integration.

  • Carbonthe main dark one
  • Paperlight, for daytime work
  • Signalhigh contrast

It is not only the instructions that are open: every card carries the configs themselves — all three palettes, in full, with a “Copy” button. Building Digitable Focus for yourself by hand is free and needs no purchase. What people pay for is the assembled archive: 47 ready file sets from a single token source, the Compendium, the templates and an installer that lays it all out across your directories itself.

Терминалы и мультиплексоры12

Палитра приходит файлом схемы или строкой include. Мультиплексоры красят только свою обвязку — ANSI-цвета остаются за эмулятором, поэтому tmux и Zellij ставят в пару с терминалом.

Alacrittyпресет цветов через import

In the archive: 3 файла .toml

  1. Скопируйте .toml-файлы в ~/.config/alacritty/.
  2. Подключите один пресет из своего alacritty.toml.
    import = ["~/.config/alacritty/digitable-focus-carbon.toml"]

Configs go into ~/.config/alacritty/

Сохраните файл — Alacritty перечитывает конфиг сам. Чтобы сменить палитру, замените имя файла в строке import на digitable-focus-paper.toml или digitable-focus-signal.toml.

Ghosttyтема по имени файла

In the archive: 3 файла без расширения

  1. Создайте ~/.config/ghostty/themes/ и скопируйте туда все три файла. Расширения у них нет намеренно: для Ghostty имя файла и есть имя темы.
  2. Добавьте одну строку в ~/.config/ghostty/config: theme = digitable-focus-carbon.
  3. Перезагрузите конфиг: cmd+shift+, на macOS, ctrl+shift+, на Linux.

Configs go into ~/.config/ghostty/themes/

На macOS конфиг лежит в ~/Library/Application Support/com.mitchellh.ghostty/config, темы — в папке themes рядом с ним. Одна строка умеет следовать системной теме: theme = light:digitable-focus-paper,dark:digitable-focus-carbon. Проверить, что Ghostty видит файлы: ghostty +list-themes.

GNOME Terminalскрипты записи dconf

In the archive: 3 скрипта .sh

  1. Сохраните текущие настройки: dconf dump /org/gnome/terminal/ > gnome-terminal-backup.dconf.
  2. Скопируйте скрипты куда угодно, например в ~/.local/share/digitable-focus/.
  3. Примените палитру к профилю по умолчанию: sh digitable-focus-carbon.sh.
  4. Откройте новую вкладку. Уже открытые перекрашиваются сразу.

Configs go into любой каталог, например ~/.local/share/digitable-focus/ — файл запускается, а не читается

GNOME Terminal не умеет импортировать файл темы: его цвета — это ключи dconf, поэтому палитра приходит скриптом. Конкретный профиль выбирается переменной: PROFILE_ID=... sh digitable-focus-paper.sh, список — gsettings get org.gnome.Terminal.ProfilesList list. Вернуть как было: dconf load /org/gnome/terminal/ < gnome-terminal-backup.dconf. GNOME Console (kgx) не поддерживается — у него нет ключей палитры.

Hyperмодуль для .hyper.js

In the archive: 3 файла .js

  1. Скопируйте .js-файлы рядом с ~/.hyper.js.
  2. Подключите один из них через require и Object.assign, затем сохраните: Hyper перечитывает конфиг при сохранении, cmd/ctrl+shift+r форсирует перезагрузку.
    const focus = require('./digitable-focus-carbon.js')
    
    module.exports = {
      config: Object.assign({}, focus, {
        fontSize: 13
      }),
      plugins: [],
      localPlugins: []
    }

Configs go into рядом с ~/.hyper.js

У Hyper нет формата темы: ~/.hyper.js — это обычный JavaScript, поэтому палитра приходит модулем. Второй путь — открыть файл, скопировать всё внутри module.exports и вставить в объект config, заменив цветовые ключи. Свои переопределения ставьте после палитры в Object.assign, тогда выигрывают они.

iTerm2пресет Color Presets

In the archive: 3 файла .itermcolors

  1. Откройте iTerm2 → Settings → Profiles → Colors.
  2. В списке Color Presets... выберите Import... и укажите файлы — можно импортировать все три сразу.
  3. Снова откройте Color Presets... и выберите Digitable Focus Carbon.

Configs go into импорт в Settings → Profiles → Colors → Color Presets

Двойной клик по .itermcolors в Finder тоже импортирует пресет. Каждый профиль хранит свой: Carbon можно повесить на рабочий профиль, Paper — на профиль для светлой комнаты, и переключаться через меню Profiles. У всех терминальных целей Digitable Focus одна ANSI-раскладка: magenta берётся из фиолетового палитры, cyan — из акцента, bright cyan — из мягкого акцента.

Kittyinclude в kitty.conf

In the archive: 3 файла .conf

  1. Скопируйте .conf-файлы в ~/.config/kitty/.
  2. Добавьте один include в конец ~/.config/kitty/kitty.conf: include digitable-focus-carbon.conf.
  3. Перечитайте конфиг: ctrl+shift+f5 или перезапуск Kitty.

Configs go into ~/.config/kitty/

Держите ровно один include. Kitty применяет последнее прочитанное значение, поэтому include в конце файла перекрывает ваши цветовые настройки выше. Смена палитры — заменить имя файла в строке include и перечитать конфиг.

Konsoleцветовая схема профиля

In the archive: 3 файла .colorscheme

  1. Скопируйте .colorscheme-файлы в ~/.local/share/konsole/ — до того, как откроете настройки: Konsole пересканирует папку только при открытии диалога.
  2. Settings → Configure Konsole → Profiles, откройте профиль на редактирование.
  3. На вкладке Appearance выберите Digitable Focus Carbon.
  4. Нажмите OK — открытые вкладки перекрашиваются сразу.

Configs go into ~/.local/share/konsole/

Цвет курсора и выделения Konsole хранит в профиле, а не в цветовой схеме. Чтобы они совпали с палитрой, выставьте курсор в акцентный цвет там же, на вкладке Appearance. Под каждую палитру удобно завести отдельный профиль и переключаться через File → New Tab.

Tabbyблок colorScheme в конфиге

In the archive: 3 файла .yaml и schemes.json

  1. Откройте Settings → Config file или правьте ~/.config/tabby/config.yaml (в Windows — %APPDATA%\tabby\config.yaml).
  2. Замените блок terminal.colorScheme содержимым одного .yaml-файла. Если ключа terminal: ещё нет, вставьте блок целиком.
  3. Сохраните — Tabby перечитывает конфиг и перекрашивает открытые вкладки.

Configs go into блок terminal.colorScheme в ~/.config/tabby/config.yaml

Отступы важны: colorScheme стоит на два пробела внутри terminal. Tabby держит ровно одну активную схему, остальные два файла остаются пресетами на будущее. Файл schemes.json содержит те же три схемы массивом — в той форме, которую ждут плагины Tabby, если захотите собрать из них плагин.

tmuxстатус-строка и рамки панелей

In the archive: 3 файла .conf

  1. Скопируйте .conf-файлы в ~/.config/tmux/.
  2. Подключите один из ~/.tmux.conf: source-file ~/.config/tmux/digitable-focus-carbon.conf.
  3. Перечитайте без перезапуска: tmux source-file ~/.tmux.conf.

Configs go into ~/.config/tmux/

tmux не владеет ANSI-палитрой — поставьте тему и для своего эмулятора терминала. Статус-строка использует 24-битный цвет; если он выглядит плоским, добавьте set -g default-terminal "tmux-256color" и set -ag terminal-overrides ",*256col*:RGB". Конструкция #{?client_prefix,...} требует tmux 2.3 или новее.

WezTermcolor_scheme из каталога

In the archive: 3 файла .toml

  1. Создайте ~/.config/wezterm/colors/ и скопируйте туда .toml-файлы.
  2. Укажите каталог и схему в ~/.config/wezterm/wezterm.lua и сохраните файл — WezTerm перечитывает конфигурацию автоматически.
    local wezterm = require 'wezterm'
    local config = wezterm.config_builder()
    
    config.color_scheme_dirs = { wezterm.home_dir .. '/.config/wezterm/colors' }
    config.color_scheme = 'Digitable Focus Carbon'
    
    return config

Configs go into ~/.config/wezterm/colors/

Имя схемы берётся из блока [metadata], а не из имени файла: Digitable Focus Carbon, Digitable Focus Paper, Digitable Focus Signal. Чтобы следовать системной теме, оставьте оба варианта и переключайте их по wezterm.gui.get_appearance().

Windows Terminalсхемы в settings.json

In the archive: schemes.json

  1. Откройте настройки Windows Terminal в виде JSON.
  2. Скопируйте объекты из schemes.json в массив schemes.
  3. Выберите схему в нужном профиле.

Configs go into массив schemes в settings.json Windows Terminal

Zellijстатус-бар, вкладки, рамки

In the archive: 3 файла .kdl

  1. Создайте ~/.config/zellij/themes/ и скопируйте туда .kdl-файлы.
  2. Назовите тему в ~/.config/zellij/config.kdl: theme "digitable-focus-carbon".
  3. Перезапустите Zellij или проверьте, что тема найдена: zellij setup --check.

Configs go into ~/.config/zellij/themes/

Zellij не владеет ANSI-палитрой — поставьте тему и для эмулятора терминала. Имя темы — это имя блока внутри файла, а не имя файла; здесь они намеренно совпадают. Для однострочного статуса добавьте default_layout "compact" и pane_frames false.

CLI-инструменты16

Здесь палитра приходит переменной окружения, фрагментом конфига или файлом скина. Несколько целей связаны: тема bat лежит в кэше, из которого её читает git-delta. Одна карточка выбивается из ряда намеренно: Уроборос — не палитра, а открытый инструмент Digitable, и стоит он здесь потому, что это программа командной строки.

batподсветка в пейджере

In the archive: 3 файла .tmTheme

  1. Скопируйте .tmTheme-файлы в "$(bat --config-dir)/themes" — обычно это ~/.config/bat/themes. В Debian и Ubuntu бинарь называется batcat.
  2. Пересоберите кэш: bat cache --build.
  3. Выберите тему: export BAT_THEME="Digitable-Focus-Carbon" или строка --theme="Digitable-Focus-Carbon" в ~/.config/bat/config.

Check bat --list-themes | grep Digitable

Configs go into $(bat --config-dir)/themes, обычно ~/.config/bat/themes/

bat опознаёт тему по имени файла, поэтому темы называются Digitable-Focus-Carbon, Digitable-Focus-Paper, Digitable-Focus-Signal. Тема дотягивается и до git-delta: delta читает кэш тем bat, поэтому syntax-theme начинает работать сразу после bat cache --build. Проверено на bat 0.24 (syntect 5). Файлы — обычные .tmTheme-плисты Sublime Text и грузятся в него тоже.

bpytopтема монитора на Python

In the archive: 3 файла .theme

  1. Скопируйте .theme-файлы в ~/.config/bpytop/themes/, создав папку, если её нет.
  2. Запустите bpytop, нажмите Esc → Options → color_theme и выберите тему стрелками.
  3. Или задайте её без меню, в ~/.config/bpytop/bpytop.conf.
    color_theme="+digitable-focus-carbon"
    theme_background=True
    truecolor=True

Check grep color_theme ~/.config/bpytop/bpytop.conf

Configs go into ~/.config/bpytop/themes/

Плюс в начале имени — не опечатка: bpytop сам приписывает его каждой теме из пользовательской папки, поэтому color_theme="digitable-focus-carbon" без плюса не находит ничего и молча откатывается на Default. Оставьте theme_background=True: при False bpytop игнорирует main_bg и берёт фон терминала. truecolor=True тоже нужен, иначе он сам сожмёт каждый цвет до 256-цветной палитры. Если вид остался штатным, загляните в ~/.config/bpytop/error.log — неразобранный цвет пишется туда и пропускается, а на экране об этом не сообщают. Формат достался от bashtop и читается btop, но программы настраиваются раздельно: bpytop читает ~/.config/bpytop/, btop — ~/.config/btop/ и ждёт имя темы без плюса; если стоят обе, ставьте и обе цели. Написано под bpytop 1.0.68.

btopтема системного монитора

In the archive: 3 файла .theme

  1. Скопируйте .theme-файлы в ~/.config/btop/themes/, создав папку, если её нет.
  2. Запустите btop, нажмите Esc → Options → color_theme и выберите тему стрелками.
  3. Или задайте её без меню, в ~/.config/btop/btop.conf.
    color_theme = "digitable-focus-carbon"
    theme_background = True
    truecolor = True

Configs go into ~/.config/btop/themes/

Оставьте theme_background = True: при False btop игнорирует main_bg и берёт фон терминала. Рамки блоков становятся фиолетовыми, зелёными, оранжевыми и синими, выбранная строка процесса рисуется акцентом. Написано под btop 1.3; набор ключей темы не меняется с 1.0, а старые темы bashtop используют тот же синтаксис theme[...], только с меньшим числом ключей.

git-deltaцвета диффов git

In the archive: 3 файла .gitconfig

  1. Сначала поставьте тему bat: значение syntax-theme ссылается на неё, а delta читает кэш тем bat.
  2. Скопируйте .gitconfig-файлы в ~/.config/git/.
  3. Подключите нужную фичу в ~/.gitconfig.
    [include]
        path = ~/.config/git/digitable-focus-carbon.gitconfig
    [core]
        pager = delta
    [interactive]
        diffFilter = delta --color-only
    [delta]
        features = digitable-focus-carbon
    [merge]
        conflictstyle = zdiff3
    [diff]
        colorMoved = default

Check git config --get delta.features && delta --show-config | head -20

Configs go into ~/.config/git/

Предупреждение Unknown theme означает, что темы bat ещё нет в кэше: выполните bat cache --build или уберите строку syntax-theme. Цвета диффа работают в любом случае — меняется только подсветка кода внутри него. Команда delta --list-syntax-themes помечает все пользовательские темы как dark, включая Paper: светлую тему delta определяет по своему захардкоженному списку имён. Работает строка light = true, которая в Paper уже стоит. Проверено на delta 0.16.5: merge-conflict-* требует 0.10+, grep-file-style — 0.13+.

ezaцвета листинга каталога

In the archive: 3 палитры, .sh и .fish

  1. Скопируйте нужный файл в ~/.config/eza/.
  2. Bash или zsh — добавьте source ~/.config/eza/digitable-focus-carbon.sh в rc-файл. fish — скопируйте .fish-файл в ~/.config/fish/conf.d/.
  3. Откройте новую оболочку.

Check eza --long --header --git --total-size

Configs go into ~/.config/eza/, вариант .fish — в ~/.config/fish/conf.d/

EZA_COLORS переопределяет умолчания eza по ключам и применяется поверх LS_COLORS, поэтому ваши цвета расширений продолжают работать. Строка заголовка подчёркивается акцентом, каталоги идут акцентом и жирным, колонка размера растёт от зелёного к красному, git-флаги следуют added/modified/deleted. Если ничего не изменилось, терминал скорее всего не в 24-битном режиме: echo $COLORTERM должен показать truecolor или 24bit. Написано под eza 0.18; для старого exa подходит тот же текст под именем EXA_COLORS.

fastfetchцвета информационной заставки

In the archive: 3 файла .jsonc

  1. Положите один файл на место конфига: mkdir -p ~/.config/fastfetch && cp digitable-focus-carbon.jsonc ~/.config/fastfetch/config.jsonc.
  2. Уже есть свой config.jsonc — перенесите в него блоки logo.color и display: палитру несут они. Массив modules внизу файла нужен только затем, чтобы цветам было что красить; удалите его, и fastfetch вернётся к своему списку модулей.
  3. Запустите fastfetch.

Check fastfetch --version && fastfetch

Configs go into ~/.config/fastfetch/config.jsonc

Цвета записаны как #rrggbb, а это требует fastfetch 2.42.0. На более старой сборке замените каждый "#rrggbb" на ближайший индекс палитры из комментария в шапке файла — либо в форме "@51" (2.57.0+), либо сырыми параметрами SGR "38;5;51", которые принимает любая версия. Цвет задаётся в трёх местах намеренно: logo.color красит ASCII-арт, display.color — ключи, заголовок, вывод и разделитель, а keyColor у каждого модуля; именно последний заставляет строки перебирать палитру, а не делить один акцент. display.brightColor выключен намеренно: по умолчанию он включён и добавляет ключам, заголовку и логотипу яркий атрибут, который во многих терминалах подменяется другим цветом и разваливает палитру. Целью стал fastfetch, а не neofetch, потому что neofetch заброшен, — но палитра переносится и туда: он понимает только индексы ANSI, и они лежат в том же комментарии, строками colors=(44 66 23 75 66 231) и ascii_colors=(44 75 119 215 135 203) в ~/.config/neofetch/config.conf. Файлы сверены со схемой doc/json_schema.json самого fastfetch.

fishцвета оболочки и пейджера

In the archive: 3 файла .fish

  1. Скопируйте один файл в ~/.config/fish/conf.d/.
  2. Откройте новую оболочку: exec fish.

Check set -S fish_color_command

Configs go into ~/.config/fish/conf.d/

Держите в conf.d/ ровно один файл Digitable Focus — выигрывает загруженный последним. Если цвета не изменились, ранее выбранная тема осталась в universal-переменных: глобальные значения их затеняют, но вычистить старое можно циклом set --erase --universal по именам fish_*color_*. Написано под fish 3.6+: fish_color_keyword требует 3.2, fish_color_option — 3.5, переменные пейджера — 3.4; более старый fish просто игнорирует незнакомые. fish_pager_color_background намеренно не задан, чтобы пейджер сохранял фон терминала.

fzfцвета интерактивного поиска

In the archive: 3 палитры, .sh и .fish

  1. Скопируйте нужный файл в ~/.config/fzf/.
  2. Bash или zsh — добавьте source ~/.config/fzf/digitable-focus-carbon.sh в rc-файл. fish — скопируйте .fish-файл в ~/.config/fish/conf.d/.
  3. Откройте новую оболочку, чтобы переменная экспортировалась.

Check ls | fzf

Configs go into ~/.config/fzf/, вариант .fish — в ~/.config/fish/conf.d/

Ставьте строку source после любых других присваиваний FZF_DEFAULT_OPTS: файл перезаписывает переменную, а не дополняет её. fzf завершается с unknown color name, если ключ не поддерживается, поэтому чистый запуск и есть проверка. Требуется fzf 0.36+: label и separator появились в 0.35, scrollbar — в 0.36. Новые ключи selected-fg и list-bg (0.52+) намеренно не используются, чтобы одна строка работала на разных версиях.

k9sскин Kubernetes-панели

In the archive: 3 файла .yaml

  1. Узнайте пути: k9s info.
  2. Скопируйте скины в каталог skins, который он показал, обычно ~/.config/k9s/skins/ — создайте его, если папки нет.
  3. Назовите скин в ~/.config/k9s/config.yaml — значение равно имени файла без расширения, — и перезапустите k9s.
    k9s:
      ui:
        skin: digitable-focus-carbon

Configs go into ~/.config/k9s/skins/

Расширение обязательно .yaml: k9s собирает путь как skins/<name>.yaml и файл .yml не найдёт. Чтобы скинить только один кластер, положите то же значение в k9s.contexts.<context>.skin. Если k9s стартует со штатными цветами — имя файла и значение skin разошлись, либо файл лёг рядом с config.yaml, а не внутрь skins/. Раскладка «один файл на скин» появилась в k9s 0.30 вместе с переездом на XDG; на более старой сборке тот же документ работает после переименования файла.

lazygitцвета панелей git-TUI

In the archive: 3 фрагмента .yml

  1. Найдите каталог конфига: lazygit --print-config-dir, обычно ~/.config/lazygit.
  2. Влейте блок gui.theme из одного файла в тамошний config.yml. Если ключа gui: там ещё нет, вставьте фрагмент как есть.
  3. Перезапустите lazygit — конфиг он читает при старте.

Configs go into блок gui.theme в ~/.config/lazygit/config.yml

Держите один ключ gui: — YAML берёт последний дубликат и молча выкидывает первый. Ошибка did not find expected key означает неверный отступ: gui должен стоять в нулевой колонке. Написано под lazygit 0.42+, каждый ключ сверен со схемой ThemeConfig. Ключ inactiveViewSelectedLineBgColor существует только с 0.43 и поэтому идёт закомментированным; selectedRangeBgColor убран после 0.40 и не выводится вовсе. lazygit отвергает незнакомые ключи темы, так что не переносите ключи из более новой версии в старый конфиг.

lfцвета файлового менеджера

In the archive: 3 палитры: .colors и .lfrc

  1. Скопируйте список цветов под тем именем, которого требует lf, — своего он не примет: mkdir -p ~/.config/lf && cp digitable-focus-carbon.colors ~/.config/lf/colors.
  2. Положите рядом фрагмент для остального интерфейса: cp digitable-focus-carbon.lfrc ~/.config/lf/digitable-focus.lfrc.
  3. Подключите его одной строкой в ~/.config/lf/lfrc: source ~/.config/lf/digitable-focus.lfrc.
  4. Перезапустите lf.

Check lf -log /tmp/lf.log && grep -i error /tmp/lf.log

Configs go into ~/.config/lf/

Файл colors красит список файлов, .lfrc — то, до чего список не дотягивается: приглашение, строки под курсором, рамки, линейку, статус и метки. colors — последний из пяти источников цвета lf (умолчания, LSCOLORS, LS_COLORS, LF_COLORS, файл), поэтому он выигрывает у вашего LS_COLORS. Те же пары работают и переменной, через двоеточие: export LF_COLORS="di=01;38;2;0;229;229:fi=38;2;245;247;250". Имя colors одно на всю установку, так что смена палитры — перезаписать оба файла. Цвета записаны 24-битными параметрами 38;2;R;G;B; терминал, объявивший меньше цветов, получит ближайшее приближение, а если 24 бита он умеет, но не объявляет — помогает COLORTERM=truecolor. На тёмных палитрах cursoractivefmt задаёт только фон, поэтому под курсором каталог остаётся акцентным, а исполняемый файл зелёным; на светлой там закреплён цвет текста — на бумаге любой заметный оттенок подложки стоил бы одному из цветов файлов его 4,5:1. Иконки в lf — отдельный механизм (LF_ICONS или ~/.config/lf/icons), тема их не трогает. Написано под lf r31, где появились borderfmt, statfmt и rulerfmt; cursoractivefmt и соседние ключи требуют r29. В r41 rulerfmt по умолчанию пуст, в r42 rulerfmt и statfmt объявлены устаревшими — они ещё работают, но на таких сборках последние две строки фрагмента можно убрать.

Уроборосзапись о каждом вызове настоящего запускабесплатный гайд

Open: инструкция, три способа установки и разбор записи, общий для шести языков

  1. Поставьте инструмент любым из трёх способов. Homebrew: brew install digitable-lol/tap/ouroboros — короткая строка подключает хранилище формул сама и доставляет Python. Через uv: uv tool install git+https://github.com/digitable-lol/ouroboros. Через asdf: asdf plugin add ouroboros и asdf install ouroboros 0.4.0. Любой из трёх ставит две программы — ouroboros и ouroboros-mcp.
  2. Допишите в исходник запись о вызовах: ouroboros wrap-file stats.py. Рядом появится помощник ouroboros_runtime.py; он ввозится только из стандартной библиотеки, ставить ничего не нужно. Горячий файл целиком обмазывать не стоит — нужные записи утонут, поэтому есть выбор по именам: ouroboros wrap-functions parser.c parse_header parse_body.
  3. Запустите программу как обычно — python3 stats.py. Рядом появится debug.info: по две строки JSON на вызов, на входе и на выходе, связанные общим номером.
    {"p":"in","t":"2026-08-28T23:39:45.166","id":"e668ee33-…","fn":"average","a":"[12, 30, 18]","k":""}
    {"p":"out","id":"e668ee33-…","fn":"average","r":"20.0","d":2e-06}
  4. Читайте записи тем же инструментом: ouroboros trace debug.info --outcome raised покажет, что было брошено и с какими доводами, ouroboros trace-stats debug.info — сводку по всем вызовам. Всего команд семнадцать, список — ouroboros --help.
  5. Прогоните свои проверки на обмазанном коде, а не только на исходном. Обмазка — это правка исходника, и она умеет менять поведение программы, а не только время её работы. Не хотите трогать рабочее дерево — заведите отдельный черновик: ouroboros create, затем write, execute и finish.

Check ouroboros trace-stats debug.info

Инструмент и гайд открыты, как Digit: покупать Workbench ради них не нужно, лицензия BSD 2-Clause. Языков шесть — Python, JavaScript/TypeScript, C, C++, Elixir, Go, — и схема записи у всех одна. Умеет работать сервером MCP: ouroboros-mcp, семнадцать инструментов. Цена снята прогоном: добавка на вызов 63,5 мкс у Python, 20,3 у JavaScript, 19,8 у C, 22,0 у C++, 30,0 у Go и 179,7 у Elixir, от 238 до 270 байт на вызов при коротких доводах. Польза тоже измерена, и она узкая: на шестистах ответах модели о том, что программа сделала на конкретном запуске, доля верных выросла с 61,0 до 83,0 %, а доля уверенно неверных упала с 38,7 до 17,0 %; но вся прибавка приходится на вопросы о значениях (46,4 → 84,3 %), а на вопросе «вызывалась ли функция вообще» обе доли равны 100 % — там запись не даёт ничего. Что остаётся платой, а не поломкой: C++ не записывает возвращённый объект классового типа, иначе теряется пропуск копирования; имён доводов нет в записи ни у одного языка; обмазка Python добавляет кадр стека на вызов, поэтому глубокая рекурсия мельчает вдвое. Написано под 0.4.0.

Powerlevel10kцвета сегментов промпта

In the archive: 3 файла .p10k.zsh

  1. Скопируйте один файл в ~/.config/p10k/. Если ~/.p10k.zsh ещё нет, сначала выполните p10k configure и выберите любой стиль.
  2. Допишите строку в самый конец ~/.p10k.zsh. Порядок обязателен: файл начинается с того, что сбрасывает все параметры POWERLEVEL9K_*, и строка выше по файлу была бы стёрта.
    source ~/.config/p10k/digitable-focus-carbon.p10k.zsh
  3. Перезагрузите промпт: source ~/.p10k.zsh или exec zsh.

Check typeset -p POWERLEVEL9K_DIR_FOREGROUND

Configs go into ~/.config/p10k/

Файлы задают только POWERLEVEL9K_*_FOREGROUND для сегментов, которые p10k несёт сам: раскладка, иконки, разделители и набор сегментов остаются вашими. Цвета записаны как #rrggbb — p10k передаёт их zsh как %F{#rrggbb}, а это требует zsh 5.7.1 и терминала с truecolor. Проверить можно так: print -P '%F{#ff0000}red%f' должен напечатать красное слово, а не текст. Если печатает текст, поставьте перед строкой source переключатель DIGITABLE_FOCUS_P10K_256=1 — каждая роль получит ближайший индекс xterm-256. Фрагмент выставляет POWERLEVEL9K_BACKGROUND=, то есть прозрачные сегменты, как в стилях lean и pure: фон приходит от терминала. На rainbow и classic, где заливается каждый сегмент, эту строку надо удалить и расставить _BACKGROUND по сегментам самому — цвета текста здесь посчитаны на контраст с фоном палитры, а не с произвольной заливкой. Написано под Powerlevel10k 1.20.17; hex понимает 1.15 и новее, более старые релизы берут только индексы.

starshipпалитра ролей в промпте

In the archive: 3 файла .toml

  1. Сохраните текущий конфиг: cp ~/.config/starship.toml{,.bak}.
  2. Скопируйте один файл поверх или допишите его содержимое, если модули уже настроены. Строка palette = "..." должна остаться одна, вверху файла.
  3. Перезагрузите оболочку.

Check starship print-config | head -20

Configs go into ~/.config/starship.toml

В каждом файле есть блок [palettes.digitable_focus_*], поэтому стили модулей записаны ролями: accent, info, ok, warn, alert, magic, danger, muted, subtle. Чтобы оставить свой промпт и взять только цвета, скопируйте строку palette и блок [palettes.*], а дальше используйте имена ролей в своих значениях style. Символы — обычный ASCII, Nerd Font не нужен. Именованные палитры — фича starship 1.16; на более старой версии промпт работает, но роли падают в цвет терминала по умолчанию.

vifmцветовая схема файлового менеджера

In the archive: 3 файла .vifm

  1. Скопируйте .vifm-файлы в ~/.config/vifm/colors/, создав папку, если её нет. На сборке со старой раскладкой каталог другой: ~/.vifm/colors/.
  2. Примерьте прямо в работающей программе: :colorscheme digitable-focus-carbon.
  3. Чтобы схема осталась, добавьте ту же строку без двоеточия в ~/.config/vifm/vifmrc: colorscheme digitable-focus-carbon.

Check vifm --version | head -1

Configs go into ~/.config/vifm/colors/

Каждое правило несёт и индекс xterm-256, и точное 24-битное значение, но gui*-значения vifm читает только тогда, когда terminfo объявляет прямой цвет, — обычно это запуск TERM=xterm-direct vifm. Без него берутся cterm*-индексы, каждый из которых уже посчитан как ближайшая запись куба 6x6x6 или серой шкалы; больше менять ничего не нужно. Что схема применилась, видно по :highlight Directory: guifg там равен акценту палитры. На тёмных палитрах правило CurrLine задаёт только фон, поэтому под курсором файл сохраняет свой цвет — каталог остаётся акцентным, исполняемый файл зелёным; на светлой там закреплён цвет текста, потому что на бумаге любой заметный оттенок подложки стоил бы одному из цветов файлов его 4,5:1. Хотите, чтобы сквозь vifm просвечивал фон терминала, — замените ctermbg= и guibg= в строке Win на default. Написано под vifm 0.12 и требует 0.11: группы HardLink, LineNr и OddLine появились в 0.11, TabLine и TabLineSel — в 0.10. Незнакомую группу vifm не пропускает, а отвергает, поэтому на более старой сборке соответствующие строки нужно удалить.

zshподсветка ввода и промпт

In the archive: 3 файла .zsh

  1. Поставьте zsh-syntax-highlighting, если его ещё нет: git clone https://github.com/zsh-users/zsh-syntax-highlighting ~/.zsh/zsh-syntax-highlighting.
  2. Скопируйте файл палитры в ~/.config/zsh/.
  3. Добавьте две строки в конец ~/.zshrc именно в этом порядке — плагин должен подключаться первым, он ставит свои хуки и умолчания, а наш файл перекрывает их следом.
    source ~/.zsh/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
    source ~/.config/zsh/digitable-focus-carbon.zsh
  4. Перезагрузите оболочку: exec zsh.

Configs go into ~/.config/zsh/

Файлы задают ZSH_HIGHLIGHT_STYLES, цвета редактора строки (zle_highlight), цвета списка автодополнения и двухстрочный промпт на vcs_info. Уже используете Powerlevel10k, oh-my-posh или starship — удалите секцию # Prompt внизу файла, остальное оставьте. Цвета записаны как fg=#rrggbb: это понимает zsh 5.3 и новее, более старый выведет текст вместо цвета. italic намеренно не используется — его поддержка зависит и от сборки zsh, и от терминала.

Редакторы и IDE8

Полноценные схемы: интерфейсные скоупы, синтаксис, диагностика LSP и гаттеры диффа. Ставятся штатным импортом схемы или копированием файла в каталог тем — сторонние менеджеры плагинов не нужны.

Emacsdeftheme со шрифт-локом

In the archive: 3 файла -theme.el

  1. Скопируйте темы в каталог, о котором знает Emacs: mkdir -p ~/.emacs.d/themes && cp *-theme.el ~/.emacs.d/themes/.
  2. Зарегистрируйте каталог в init-файле и загрузите тему.
    (add-to-list 'custom-theme-load-path "~/.emacs.d/themes/")
    (load-theme 'digitable-focus-carbon t)
  3. Или попробуйте одну интерактивно: M-x load-theme RET digitable-focus-paper.

Configs go into ~/.emacs.d/themes/

Покрыты встроенные лица, font-lock (включая лица Emacs 29 для чисел, операторов и скобок), диффы, Flymake и Flycheck, Org, Markdown, Dired и популярные всплывающие списки автодополнения. Перед загрузкой другой темы отключите предыдущую: M-x disable-theme RET digitable-focus-carbon. Требуется Emacs 26 или новее; атрибут :extend в диффах и Org-блоках — Emacs 27.

Helixтема ui и синтаксиса

In the archive: 3 файла .toml

  1. Скопируйте темы: mkdir -p ~/.config/helix/themes && cp *.toml ~/.config/helix/themes/.
  2. Выберите одну в ~/.config/helix/config.toml: theme = "digitable-focus-carbon".
  3. Или посмотрите вживую прямо в Helix: :theme digitable-focus-paper.

Configs go into ~/.config/helix/themes/

Покрыты интерфейсные скоупы ui.*, синтаксические (keyword, function, string, type и далее), диагностика LSP и гаттеры диффа; каждый цвет объявлен один раз в секции [palette]. У Helix нет альфа-канала для цветов темы, поэтому цвет выделения задан непрозрачным тоном. Требуется Helix 23.10 или новее.

JetBrains IDEсхема редактора .icls

In the archive: 3 файла .icls

  1. Откройте Settings → Editor → Color Scheme.
  2. Нажмите шестерёнку рядом с именем схемы и выберите Import Scheme...
  3. Укажите один .icls-файл и подтвердите.
  4. Выберите импортированную схему в списке Scheme и примените.

Configs go into импорт в Settings → Editor → Color Scheme или ~/.config/JetBrains/<Product><Version>/colors/

Альтернатива импорту — положить файлы в каталог конфигурации IDE и перезапустить её: ~/.config/JetBrains/<Product><Version>/colors/ в Linux, ~/Library/Application Support/JetBrains/<Product><Version>/colors/ в macOS. Тёмные схемы наследуются от Darcula, Paper — от светлой Default, поэтому всё, что схема не переопределяет, остаётся читаемым. Схема меняет только редактор: тему окна IDE переключают отдельно в Settings → Appearance. Проверено на IntelliJ IDEA, GoLand, PyCharm, WebStorm, RubyMine, CLion, Rider и Android Studio 2023.1 и новее.

Neovimcolorscheme на чистом Lua

In the archive: 3 файла в colors/

  1. Скопируйте схемы в каталог конфигурации: cp colors/*.lua ~/.config/nvim/colors/.
  2. Включите truecolor и выберите палитру в init.lua.
    vim.opt.termguicolors = true
    vim.cmd.colorscheme('digitable-focus-carbon')
  3. Или переключайтесь на ходу: :colorscheme digitable-focus-paper.

Configs go into ~/.config/nvim/colors/

Менеджер плагинов не нужен. Покрыты встроенные синтаксические группы, захваты Treesitter (@function, @keyword, @string и далее), диагностика LSP и палитра :terminal. Paper выставляет background=light, остальные две — background=dark. Каждый файл дополнительно возвращает таблицу палитры, поэтому те же цвета может переиспользовать строка состояния. Требуется Neovim 0.9 или новее.

Sublime Textцветовая схема редактора

In the archive: 3 файла .sublime-color-scheme

  1. Откройте Preferences → Browse Packages...
  2. Скопируйте .sublime-color-scheme-файлы в открывшуюся папку User.
  3. Откройте Preferences → Select Color Scheme... (Ctrl+Shift+P / Cmd+Shift+P, затем UI: Select Color Scheme).
  4. Выберите Digitable Focus Carbon, Paper или Signal.

Configs go into папка User из Preferences → Browse Packages...

Цвета лежат в блоке variables, поэтому форк правится сверху файла. Для Paper переключите ещё и интерфейс на светлый: Preferences → Theme..., иначе боковая панель останется тёмной при светлом редакторе. Требуется сборка Sublime Text 3149 или новее — это формат .sublime-color-scheme. Sublime Merge читает те же файлы из своего пакета User.

Vimcolorscheme с фолбэком 256 и подсветка FTS

In the archive: 5 файлов: colors/, syntax/, ftdetect/

  1. Скопируйте всё разом: cp -r colors syntax ftdetect ~/.vim/.
  2. Добавьте в ~/.vimrc включение termguicolors и выбор схемы.
    if has('termguicolors')
      set termguicolors
    endif
    colorscheme digitable-focus-carbon
  3. Или переключайтесь на ходу: :colorscheme digitable-focus-signal.
  4. Файлы .fts подхватятся сами — ftdetect ставит тип, syntax красит.

Configs go into ~/.vim/

Каждый ctermfg и ctermbg — ближайший xterm-цвет из куба 6x6x6 (16-231) или серой шкалы (232-255), посчитанный из hex. Без termguicolors Vim падает на это 256-цветное приближение, поэтому схемы остаются пригодными по SSH. В светлом терминале берите Paper: он выставляет background=light. Подсветка FTS — единственная в наборе, которой нет ни в одном редакторе из коробки: .fts слишком молод, чтобы попасть в чужие грамматики. Роли в ней раскрашены по-разному намеренно: объявление вводит сущность, шаг вывода её использует, и различить их — первое, что делаешь, читая спецификацию. Приезжает сюда копией из репозитория языка digitable-lol/flang, каталог editors/vim-fts/ (ftdetect/fts.vim ставит тип, syntax/fts.vim красит). Проверять этот адрес нужно НА ТЕГЕ v0.4.7: в главной ветке и в выпуске, который ставит brew install digitable-lol/tap/flang, каталога editors/vim-fts больше нет — там editors/vim/, и красит он .flang, а не .fts. То есть копия здесь пережила свой источник: чинится это переносом схемы на .flang, а не правкой адреса.

VS Codeрасширение с тремя темами

In the archive: папка расширения

  1. Скопируйте папку в ~/.vscode/extensions/digitable.focus-0.1.0.
  2. Перезапустите VS Code.
  3. Откройте Preferences: Color Theme.
  4. Выберите Carbon, Paper или Signal.

Configs go into ~/.vscode/extensions/digitable.focus-0.1.0/

Расширение не исполняет код и не собирает телеметрию.

Zedсемейство тем одним файлом

In the archive: digitable-focus.json

  1. Скопируйте файл семейства в папку тем: mkdir -p ~/.config/zed/themes && cp digitable-focus.json ~/.config/zed/themes/.
  2. Откройте выбор темы: Cmd+K Cmd+T на macOS или Ctrl+K Ctrl+T на Linux.
  3. Выберите Digitable Focus Carbon, Paper или Signal.

Configs go into ~/.config/zed/themes/

Один файл содержит все три темы: хром рабочей области, редактор, ANSI-палитру терминала и стили синтаксиса. Zed перечитывает темы из этой папки при сохранении, поэтому правки видны в работающем редакторе сразу. Чтобы следовать системному переключателю, задайте оба варианта в ~/.config/zed/settings.json через "theme": { "mode": "system", "light": "Digitable Focus Paper", "dark": "Digitable Focus Carbon" }.

Приложения15

Самая честная часть списка. Браузеры и мессенджеры не задумывались как настраиваемые: часть целей ставится в два клика, часть требует ручного шага от покупателя. Ниже он назван прямо у каждой карточки.

Chromeтема окна браузеранужен режим разработчика

In the archive: 3 папки расширения

Manual finishing Chrome при каждом запуске показывает предупреждение «Отключить расширения в режиме разработчика», пока распакованная тема загружена. Чтобы оно исчезло, папку нужно упаковать (Pack extension на той же странице) и опубликовать в Chrome Web Store под собственным аккаунтом разработчика: локальный .crx, пришедший не из Store, Chrome ставить отказывается. Публикация — шаг покупателя, и регистрация в Web Store стоит разового взноса.

  1. Откройте chrome://extensions.
  2. Включите Developer mode справа сверху.
  3. Нажмите Load unpacked и выберите папку палитры — именно папку с manifest.json, а не сам файл.
  4. Тема применяется сразу.

Configs go into любая папка, дальше Load unpacked в chrome://extensions

Цвета записаны RGB-триплетами: темы Chrome не принимают hex. Так же работает в Chromium, Brave, Vivaldi и других Chromium-браузерах — страница chrome://extensions там та же. Смена палитры — загрузить другую папку, Chrome держит одну тему. Удаление — chrome://extensions или Настройки → Внешний вид → Восстановить тему по умолчанию.

Dark Readerцвета затемнения сайтов

In the archive: 3 палитры: .json и .drfix.txt

  1. Откройте попап Dark Reader, шестерёнка → Manage settings.
  2. Нажмите Import Settings и выберите digitable-focus-<палитра>.json.
  3. Подтвердите предупреждение. В файле только ключ theme, поэтому списки сайтов, автоматизация и настройки синхронизации остаются вашими.
  4. Убедитесь, что движок стоит на Dynamic, а режим совпадает с палитрой: Dark для Carbon и Signal, Light для Paper.
  5. Акценты — необязательный шаг: попап → шестерёнка → Dark Reader developer tools → Dynamic Theme Editor. Первый блок начинается со строки из одной звёздочки, это глобальный фикс. Допишите объявления из секции CSS файла .drfix.txt в конец секции CSS этого блока и нажмите Apply.

Configs go into импорт в попапе Dark Reader → Manage settings → Import Settings

Не заменяйте всё содержимое редактора фиксов: остальное — пофайловый список, который держит обычные сайты читаемыми. Динамический движок Dark Reader берёт из настроек только фон и цвет текста, поэтому акцент, ссылки, выделение и код приходят отдельным блоком фиксов. Цвета записаны как #rrggbb — другого формата Dark Reader не принимает, поэтому полупрозрачный слот selection сплющен до непрозрачного. Dark Reader меняет страницы, а не рамку браузера: для самого окна берите темы Firefox, Chrome или Thunderbird из этого же набора. Откат — Manage settings → Reset settings для цветов и Reset changes в редакторе для фиксов.

Digitable Chatтема веб-приложениянужна своя сборка или Stylus

In the archive: 3 файла .css

Manual finishing У Digitable Chat нет настройки темы. Приложение отдаётся статикой, поэтому файл подключается либо строкой <link> в index.html вашего развёртывания, либо пользовательским стилем через расширение вроде Stylus. На чужом развёртывании — включая chat.digitable.life — работает только второй путь, и расширение ставит покупатель.

  1. Своя сборка: скопируйте один файл палитры в каталог, который сервер отдаёт как корень сайта, — рядом с index.html.
  2. Добавьте одну строку перед </head> в index.html. Она обязана идти после собранного стиля приложения, иначе тема проиграет.
    <link rel="stylesheet" href="/digitable-focus-carbon.css" />
  3. Жёсткая перезагрузка: Ctrl/Cmd + Shift + R.
  4. Чужая сборка: Stylus → Write new style, вставьте содержимое файла, задайте Applies to → URLs on the domain и укажите хост, например chat.digitable.life. Stylus подставляет пользовательские стили после стилей страницы — именно это теме и нужно.

Configs go into каталог сборки рядом с index.html — или вставка в расширение пользовательских стилей

Файл красит оба слоя приложения: собственные переменные --digitable-* и --dt-chat-* на главной и глобальные классы MUI (.MuiPaper-root, .MuiOutlinedInput-notchedOutline) в комнате. Режим приложения угадывать не нужно: один файл задаёт законченный вид независимо от переключателя light/dark, поэтому наполовину применённого вида не бывает. Честно про Carbon: тёмная палитра самого приложения — это уже те же токены Digitable, поэтому Carbon почти ничего не меняет, а реально перекрашивают Paper и Signal. Часть цветов приходит из MUI-пропа sx и компилируется в классы с хешем сборки — до них тема не дотягивается, но они взяты из тех же токенов и не выглядят неоформленными. Комнату, встроенную через <script src="…/sdk.js">, перекрасить со страницы-хоста нельзя: это <iframe> внутри shadow-root, красьте то развёртывание, на которое он смотрит. Откат — удалить строку <link> и файл или выключить стиль в Stylus.

Discordтема клиента через модтребует мод, против ToS

In the archive: 3 файла .theme.css

Manual finishing У Discord нет поддержки тем. Перекрасить клиент можно только клиентским модом — BetterDiscord или Vencord, — а их использование нарушает условия обслуживания Discord. Это решение покупателя, и мы не берёмся советовать его вместо предупреждения.

  1. BetterDiscord: User Settings → Themes → Open Themes Folder, скопируйте туда один .theme.css и включите переключатель рядом с темой.
  2. Vencord: User Settings → Vencord → Themes → Open Themes Folder, скопируйте файл, вернитесь на вкладку Themes, нажмите иконку обновления и включите тему.
  3. Смена палитры — включить другой файл и выключить предыдущий: две темы Digitable Focus подрались бы за одни переменные.

Configs go into папка тем BetterDiscord или Vencord

Палитра выбирается файлом, а не переключателем light/dark в самом Discord: каждый файл красит и .theme-dark, и .theme-light, поэтому наполовину применённого вида не бывает. Discord часто переименовывает свои CSS-переменные и сейчас несёт два их поколения сразу: тема задаёт и старое семейство --background-primary, и новые --background-base-*, --text-*, --border-*. После крупного редизайна часть поверхностей может вернуться к штатным цветам, пока имена переменных не обновлены.

Firefoxтема окна браузерапостоянная установка — своя подпись

In the archive: 3 папки с manifest.json

Manual finishing Firefox держит неподписанные расширения только в Developer Edition, Nightly и ESR, где помогает xpinstall.signatures.required = false в about:config. На релизной сборке тему нужно подписать самому: для этого нужен аккаунт Mozilla, и за вас этот шаг набор не сделает.

  1. Примерить без подписи: откройте about:debugging#/runtime/this-firefox, нажмите Load Temporary Add-on и укажите manifest.json внутри папки палитры. Тема применяется сразу и снимается при перезапуске Firefox.
  2. Поставить навсегда: заархивируйте содержимое папки палитры так, чтобы manifest.json лежал в корне архива, а не в подпапке, и переименуйте архив в .xpi.
  3. Загрузите его на addons.mozilla.org как unlisted-дополнение и скачайте подписанный .xpi.
  4. Откройте подписанный файл в Firefox и подтвердите установку.

Configs go into любая папка, дальше Load Temporary Add-on в about:debugging

Смена палитры — about:addons → Темы, включить другую: Firefox держит активной одну тему. Удаление — там же, потом верните свою прежнюю тему. Временные дополнения исчезают при перезапуске сами.

IT Toolsтема набора веб-утилитнужна своя сборка или Stylus

In the archive: 3 файла .css

Manual finishing У it-tools нет настройки темы. Приложение отдаётся статикой, поэтому файл подключается либо строкой <link> в index.html вашего развёртывания, либо пользовательским стилем через расширение вроде Stylus. На чужом инстансе — включая it-tools.tech — работает только второй путь, и расширение ставит покупатель.

  1. Своя сборка: скопируйте один файл палитры в каталог, который сервер отдаёт как корень сайта, — рядом с index.html. У официального образа это /usr/share/nginx/html: docker cp digitable-focus-carbon.css it-tools:/usr/share/nginx/html/. В Compose монтируйте файл томом, иначе он исчезнет при пересборке контейнера.
  2. Добавьте одну строку перед </head> в index.html. Она обязана идти после собственных стилей приложения, иначе тема проиграет. Не хотите править index.html — вставьте тот же тег обратным прокси: sub_filter в nginx, replace в Caddy.
    <link rel="stylesheet" href="/digitable-focus-carbon.css" />
  3. Жёсткая перезагрузка: Ctrl/Cmd + Shift + R.
  4. Чужой инстанс: Stylus → Write new style, вставьте содержимое файла, задайте Applies to → URLs on the domain и укажите хост. Stylus подставляет пользовательские стили после стилей страницы — именно это теме и нужно.

Configs go into каталог, который сервер отдаёт как корень сайта, — рядом с index.html

it-tools — чужое приложение под лицензией GPL-3.0-only, исходники: https://github.com/CorentinTh/it-tools. В архиве лежит тема, а не форк: это отдельный CSS рядом с неизменённым инстансом, кода приложения в нём нет. Наш собственный инстанс https://tools.digitable.life/ — уже форк, https://github.com/digitable-lol/it-tools, с этой темой внутри сборки; GPL-3.0-only обязывает нас держать его исходники открытыми, и они по этой ссылке. Палитра выбирается файлом, а не переключателем в приложении: тёмный режим у it-tools — это <html class="dark">, поэтому carbon и signal красят html.dark, а paper — html:not(.dark). Если режим не совпал с файлом, тема просто не применяется, а не выдаёт нечитаемую смесь. Держите подключённым один файл: две тёмные палитры дрались бы за одни объявления. Честное ограничение: собственный набор компонент it-tools (src/ui/c-*) передаёт цвета через Vue v-bind(), а тот компилируется в инлайн-переменные с именем из хеша сборки, и имена меняются от релиза к релизу — поэтому варианты c-button (default, primary, warning, error) из CSS неразличимы и получают одну нейтральную заливку; c-alert свой цвет текста и рамки сохраняет, так что предупреждение и ошибка по-прежнему читаются по-разному. И поскольку naive-ui пишет свою тему в атрибут style, каждое объявление здесь идёт с !important — иначе таблица стилей проигрывает инлайн-переменной. Имена переменных взяты из src/<component>/styles/light.ts naive-ui и сверены с живым инстансом; если в следующем мажоре их переименуют, поверхность за ними вернётся к штатным цветам, пока тема не обновлена. Откат — удалить строку <link> и файл или выключить стиль в Stylus.

Logseqcustom.css для графа

In the archive: 3 файла .css

  1. Откройте граф, затем Settings → Custom configuration → Edit custom.css. Можно править logseq/custom.css в папке графа напрямую.
  2. Положите файл палитры рядом с custom.css, например logseq/digitable-focus-carbon.css.
  3. Добавьте одну строку в самое начало custom.css: @import url("./digitable-focus-carbon.css");@import обязан идти до любых других правил.
  4. Перезагрузите окно: t r или Settings → Advanced → Refresh.
  5. Выставьте режим через t t: Carbon и Signal стилизуют data-theme="dark", Paper — data-theme="light".

Configs go into logseq/ в папке графа, рядом с custom.css

Каждый файл трогает только свой режим, поэтому собственный переключатель Logseq продолжает работать. Держите один @import: две палитры на один режим будут драться за одни переменные. Покрыт полный набор --ls-* из vars-classic.css и радикс-шкалы --lx-gray-01..12 и --lx-accent-01..12, на которых в свежих сборках держатся фон, границы и ссылки. Отдельно стилизованы детали цеттелькастена: ссылки на страницы, ссылки на блоки, теги (прозрачность принудительно выставлена в 1 — Logseq гасит их до 0.7) и свойства key:: value. Откат — удалить строку @import и перезагрузить окно; больше ничего не меняется. Проверено на именах переменных Logseq 0.10.x.

ObsidianCSS-сниппет хранилища

In the archive: 3 файла .css

  1. Скопируйте один CSS-файл в .obsidian/snippets/ вашего хранилища.
  2. Откройте Settings → Appearance → CSS snippets.
  3. Включите выбранный сниппет Digitable Focus.

Configs go into .obsidian/snippets/ вашего хранилища

Держите включённой одну палитру за раз.

qutebrowserцвета интерфейса браузера

In the archive: 3 фрагмента .py

  1. Скопируйте один файл в ~/.config/qutebrowser/.
  2. Добавьте одну строку в ~/.config/qutebrowser/config.py. Если у вас есть вызов config.load_autoconfig(), строка обязана идти после него: он заново применяет всё, что вы когда-либо меняли через :set, включая цвета, и иначе перекроет палитру.
    config.source('digitable-focus-carbon.py')
  3. Перечитайте конфиг из работающего окна командой :config-source или перезапустите qutebrowser.

Check qutebrowser --version | head -1

Configs go into ~/.config/qutebrowser/

Тема красит рамку браузера, а не содержимое страниц: colors.webpage.bg задаёт фон только тем страницам, которые не объявили свой, а colors.webpage.preferred_color_scheme сообщает сайтам, какой prefers-color-scheme им отдавать — dark для carbon и signal, light для paper. Группа colors.webpage.darkmode.* намеренно не тронута: принудительное затемнение отрисованных страниц — отдельное решение, оно меняет вид каждого сайта, и принимать его за читателя тема не должна. Три присваивания выглядят цветами, но ими не являются: colors.downloads.system.fg, colors.downloads.system.bg и colors.tabs.indicator.system выбирают способ интерполяции двух цветов (none оставляет оттенки палитры как есть), а colors.prompts.border — это сокращённая запись CSS-рамки. Что изменилось на самом деле, покажет :config-diff. Написано под qutebrowser 2.5 и сверено с его configdata.yml: присваиваются только существующие там настройки, поэтому config.py грузится без ошибок.

Slackстрока цветов интерфейсачасть панелей остаётся штатной

In the archive: 3 файла .txt

Manual finishing После редизайна Slack строка красит уже не все поверхности: клиент раскладывает слоты на свои встроенные цвета, поэтому боковая панель, активный элемент и бейдж упоминаний следуют палитре, а часть панелей остаётся штатной. Это ограничение Slack, а не пробел в файле — поддерживаемого способа перекрасить остальное без патча десктоп-клиента нет.

  1. Откройте файл нужной палитры и скопируйте строку из десяти слотов.
  2. В Slack нажмите на свой аватар → Preferences → Appearance.
  3. Выберите Dark или Light под палитру — Paper светлая, остальные две тёмные, — затем Custom theme.
  4. Рядом с Theme Colors нажмите Import theme, выберите Paste your legacy theme colors, вставьте строку и нажмите Apply.

Configs go into строка вставляется в Preferences → Appearance → Import theme

В старых сборках диалога импорта нет: там разверните Create a custom theme в разделе Colors и вставьте строку в поле с подписью про копирование значений. Такие сборки игнорируют последние два слота, поэтому в том же файле лежит и строка из восьми. Slack хранит одну пользовательскую тему на клиент. Откат — Preferences → Appearance и любая встроенная тема.

Telegram Desktopпалитра клиентаобои — своя упаковка в архив

In the archive: 3 файла .tdesktop-palette

Manual finishing Сама палитра ставится файлом, распаковывать нечего. Архив .tdesktop-theme нужен только если вы хотите приложить к палитре фоновое изображение: набор его не собирает, потому что пришлось бы угадывать ваши обои. Собрать самому — переименовать файл палитры в colors.tdesktop-theme, положить рядом обои с именем background.jpg, background.png, tiled.jpg или tiled.png, заархивировать оба файла так, чтобы схема лежала в корне архива, и переименовать .zip в .tdesktop-theme.

  1. Откройте Settings → Chat settings → Chat background.
  2. Нажмите Choose file и выберите digitable-focus-<палитра>.tdesktop-palette. В диалоге он перечислен рядом с .tdesktop-theme.
  3. Telegram покажет предпросмотр — нажмите Save theme.

Configs go into Settings → Chat settings → Chat background → Choose file

Файл можно просто перетащить в любой чат, затем открыть загруженный файл и подтвердить в окне предпросмотра. Палитра Telegram объявляет около 510 констант, пропущенное берётся из встроенного умолчания. Покрыты рамка окна, заголовок, меню, список чатов, пузыри сообщений, поле ввода, просмотрщик медиа, боковая панель и тосты — всё, что видно при обычной работе. Редко открываемые экраны (окна звонков, графики статистики, экраны Telegram Stars, подчёркивания проверки орфографии) остаются штатными, но они акцентные, а не белые, поэтому не читаются как неоформленные. Откат — Settings → Chat settings и любая встроенная тема.

Thunderbirdтема почтового клиентапостоянная установка — своя подпись

In the archive: 3 папки с manifest.json

Manual finishing Thunderbird на релизных сборках требует подписи дополнений, поэтому постоянная установка возможна только с подписанным пакетом. Подпись — шаг покупателя, для него нужен аккаунт на addons.thunderbird.net.

  1. Примерить без подписи: Tools → Developer Tools → Debug Add-ons или about:debugging#/runtime/this-thunderbird в адресной строке контентной вкладки, дальше Load Temporary Add-on и manifest.json внутри папки палитры. Тема применяется сразу и снимается при следующем запуске.
  2. Поставить навсегда: заархивируйте содержимое папки палитры с manifest.json в корне архива и переименуйте его в .xpi.
  3. Загрузите архив на addons.thunderbird.net как unlisted-дополнение и скачайте подписанный .xpi.
  4. Поставьте его через Add-ons and Themes → шестерёнка → Install Add-on From File.

Configs go into любая папка, дальше Load Temporary Add-on в about:debugging

Смена палитры — Add-ons and Themes → Themes, включить другую запись: активной остаётся одна. Откат — удалить запись и вернуть System theme, Light или Dark.

Digit Agentоткрытый агент и проектный контекстбесплатный гайд

Open: инструкция, встроенный скин digitable, шаблон AGENTS.md и ACP-конфигурация

  1. Установите Digit официальным скриптом: curl -fsSL https://raw.githubusercontent.com/digitable-lol/digit/main/scripts/install.sh | bash.
  2. Запустите digit setup, выберите локальную модель или собственный OpenAI-совместимый endpoint. Отдельная чужая cloud-интеграция не требуется.
  3. Для Ollama на Apple Silicon: ollama pull qwen3.5:4b, затем закрепите пресет — digit config set model.default digit-local; на один запуск хватит digit -m digit-local. Команда digit model — интерактивный выбор и аргумента не принимает.
  4. В корне проекта создайте AGENTS.md: опишите назначение продукта, команды сборки и тестов, ограничения и критерии готовности. Digit загрузит его как проектный контекст.
    # AGENTS.md
    ## Product
    Коротко опишите продукт и пользователей.
    
    ## Commands
    - build: команда сборки
    - test: команда тестов
    
    ## Constraints
    - не менять пользовательские данные без подтверждения
    - проверять результат перед завершением
  5. Для Zed, JetBrains и других ACP-клиентов укажите команду digit-acp. Для терминала запускайте digit, для Desktop — digit desktop.
  6. Проверьте установку: digit doctor, затем попросите Digit назвать активный каталог данных и доступные skills Digitable.

Check digit doctor

Digit и этот гайд открыты: покупать Workbench для установки агента не нужно. Workbench добавляет готовые темы, Engineering Compendium и расширенные SDD/ADR/review-шаблоны. Digit хранит конфиг, память и ключи отдельно в ~/.digit; старый ~/.hermes автоматически не импортируется.

Blender MCPагент лепит 3D прямо в Blenderбесплатный гайд

Open: инструкция, run.sh, startup.py и аддон с патчем скриншотов

  1. Склонируйте набор: git clone https://github.com/digitable-lol/blender-mcp.
  2. Поставьте Blender 4.5 LTS или новее — обычную сборку с интерфейсом, не blender-headless. Проверено на 4.5.11 LTS.
  3. На сервере без монитора доставьте xvfb: sudo apt install xvfb. run.sh сам поднимет виртуальный дисплей и программный рендерер llvmpipe.
  4. Запустите Blender: ./run.sh start. Скрипт ищет бинарь в $BLENDER, затем в PATH, затем в ~/opt/blender/blender — свой путь передайте как BLENDER=/путь/к/blender ./run.sh start.
  5. Зарегистрируйте MCP-сервер в агенте. Путь до uvx обязан быть абсолютным: десктопный клиент не наследует PATH вашей интерактивной оболочки.
    claude mcp add blender --scope user \
      -e DISABLE_TELEMETRY=1 -e BLENDER_MCP_DISABLE_TELEMETRY=1 -e MCP_DISABLE_TELEMETRY=1 \
      -- "$(command -v uvx)" blender-mcp@1.6.4
  6. Убедитесь, что порт слушает, и попросите агента сделать скриншот вьюпорта — он обязан прийти цветным, а не чёрным.

Check ./run.sh status

Набор и гайд открыты, как и Digit: покупать Workbench ради 3D-пайплайна не нужно. Два места, где оригинальный blender-mcp не работает headless, здесь уже закрыты. Первое: аддон отказывается стартовать под blender -b, потому что раздаёт команды через bpy.app.timers, а они не тикают без цикла событий — поэтому запускается настоящий GUI под xvfb-run. Второе: get_viewport_screenshot читал передний буфер окна, который без композитора остаётся чёрным, и агент получал валидный чёрный PNG со статусом success — то есть слеп и не знал об этом; в наборе аддон пропатчен на офскрин-рендер через gpu.types.GPUOffScreen. Отдельно выключена телеметрия: оригинал включает её по умолчанию с обеих сторон и шлёт промпты, куски кода и скриншоты вьюпорта на сторонний Supabase. Помните про границу доверия: execute_blender_code исполняет произвольный Python с правами вашего пользователя, поэтому держите сокет на localhost и не открывайте чужие .blend при подключённом MCP.

Digitable Chatодноранговый эфемерный чат

Open: инструкция: комнаты, пароль, поведение за NAT

Manual finishing Приложение под GPL-2.0-or-later и в архив не входит намеренно: положить его код внутрь платной поставки — значит распространить всю поставку на тех же условиях. Ссылка такой границы не переходит, поэтому здесь открытый гайд, а не файлы.

  1. Откройте https://chat.digitable.life/ — учётной записи нет, регистрации нет.
  2. Публичная комната: https://chat.digitable.life/public/<имя>. Имя — единственное, что её закрывает, поэтому берите неугадываемое: head -c 12 /dev/urandom | base32 | tr A-Z a-z | tr -d =.
  3. Приватная комната: https://chat.digitable.life/private/<имя>, пароль вводится на странице и в ссылку не попадает — из него и имени комнаты выводится ключ шифрования.
  4. Ссылку и пароль передавайте разными каналами: вместе в одном сообщении они делают приватную комнату публичной.

Сервера у переписки нет: браузеры соединяются напрямую по WebRTC, сообщения не хранятся нигде и исчезают, когда закрыта последняя вкладка — не удаляются по запросу, а просто никуда не записываются. Отсюда и ограничения: истории нет, офлайн-доставки нет, участник должен быть на связи одновременно с вами. Прямое соединение иногда не устанавливается — в жёстких корпоративных сетях и при симметричном NAT; тогда комната открывается, а собеседник не появляется. Проверять это надо до того, как договорились о встрече в комнате.

MCP-серверы2

Не тема в конфиге программы, а инструмент в руках агента. Оба сервера отдают наружу детерминированный результат: та же команда с теми же аргументами даёт тот же ответ, и его можно перепроверить без модели. Подключаются одной записью в конфиге MCP-клиента.

Digit Tools95 утилит одним самодостаточным бинарёмсборка из исходников

Open: бинарь digit-tools-mcp и машиночитаемый каталог схем

Manual finishing Готовых бинарей в поставке нет: собран только Linux-вариант, а каталог под GPL-3.0-only в платный архив не кладётся намеренно. Запрет не лицензионный: распространение за плату GPL-3.0-only разрешает прямо, но оживляет обязанность отдать покупателю исходники — поэтому бинарь ставит пользователь сам, из первоисточника.

  1. Соберите сервер из исходников: npm ci, затем npm run build:binary. На выходе самодостаточный бинарь dist/digit-tools-mcp на 107 МиБ — рантайм на хосте ему не нужен.
  2. Прогоните npm run smoke:binary: он исполняет через настоящий stdio все 114 примеров каталога. Юнит-тестов мало — именно этот прогон поймал дефект загрузки шрифтов, который они пропускали.
  3. Положите бинарь туда, где он будет жить, например в ~/.digit/mcp/digit-tools-mcp.
  4. Впишите запись в конфиг своего MCP-клиента. Не переписывайте файл целиком: в нём уже могут лежать чужие серверы — слияние с резервной копией делает toolchain/mcp-config.sh.
    sh toolchain/mcp-config.sh --file <конфиг вашего MCP-клиента> \
      --server digit-tools --command ~/.digit/mcp/digit-tools-mcp --plan
  5. Убедитесь, что клиент видит ровно три инструмента: tools_categories, tools_list, tools_execute. Девяноста пяти там быть не должно: каталог подаётся в два шага, иначе схемы всех утилит уезжают в контекст модели.

Check npm run smoke:binary

Лицензия GPL-3.0-only унаследована от it-tools: 95 утилит перенесены из 75 исходных из 86. Компонент открытый, ставить его бесплатно можно уже сейчас — заблокировано только включение в платный архив. Известное ограничение: таймаут не прерывает синхронную работу, и тяжёлое регулярное выражение всё ещё способно заблокировать процесс.

FTS Gateгейт исполняемых спецификацийсборка из исходников

Open: MCP-сервер, CLI fts-gate, библиотека морфизмов и GBNF-грамматика

Manual finishing Готового артефакта в поставке нет: сервер собирается из исходников, а библиотека морфизмов собрана под материалы курсов и чужому проекту не подходит.

  1. Проверьте, что на хосте Node 20 или новее: гейт не бинарь, он исполняется рантаймом.
  2. Соберите гейт: npm install && npm run build. Тесты — 62 у гейта и 59 у самого FTS.
  3. Убедитесь, что библиотека морфизмов читается: node dist/src/cli.js morphisms --pretty печатает 29 записей с уровнями доверия.
  4. Впишите запись в конфиг клиента тем же слиянием, что и для каталога утилит.
    sh toolchain/mcp-config.sh --file <конфиг вашего MCP-клиента> \
      --server fts-gate --command node --arg ~/.digit/mcp/fts-gate/mcp.js --plan
  5. Проверьте протокол на отказе: дайте гейту спецификацию с морфизмом, которого нет в библиотеке. Отказ обязан прийти обычным результатом с кодом UNVERIFIED_MORPHISM, а не ошибкой вызова.

Check node dist/src/cli.js morphisms --pretty

Наружу торчат два read-only инструмента: fts_gate_check и fts_morphisms_list. FTS отвечает, согласована ли спецификация сама с собой; гейт — допустима ли каждая её предпосылка: 8 кодов отказа плюс детектор структурных логических ошибок ещё на 8. Границу гарантии надо знать заранее: гейт не проверяет истинность объявленного закона, а переносит доверие из текста в ревьюируемый список — контрпример со ставкой налога проходит весь формализм зелёным. Лицензия гейта — BSD 2-Clause, как и у языка: заявление про Apache-2.0 осталось от первой публикации репозитория и исправлено в его NOTICE. Встроенной копии FTS нет — зависимость притянута фиксированным коммитом 6dceb8d, тем самым, которым лицензия и была сменена.

Where you will have to finish by hand

These 11 targets cannot be installed by copying a file, and we do not hide that behind “works everywhere”. The other 42 install through a regular scheme import, one line in a config, or a copy into the themes directory.

  • Chromeнужен режим разработчика
  • Digitable Chatнужна своя сборка или Stylus
  • Discordтребует мод, против ToS
  • Firefoxпостоянная установка — своя подпись
  • IT Toolsнужна своя сборка или Stylus
  • Slackчасть панелей остаётся штатной
  • Telegram Desktopобои — своя упаковка в архив
  • Thunderbirdпостоянная установка — своя подпись
  • Digitable Chat
  • Digit Toolsсборка из исходников
  • FTS Gateсборка из исходников
Digitable Workbench · Founding Edition

The configs are open. What you pay for is the assembled set.

Everything shown above can be copied and laid out by hand. In the archive it is laid out already: 47 file sets from a single token source, a Compendium in 9 volumes, 9 working templates and an installer that does the placement itself.

Back to the overview and the price Assemble an install command