Справочник по всем ключам конфига, таблицами по главам.
Что за возможность стоит за ключом и как это у других клиентов — список возможностей.
Как устроен конфиг
Здесь все настройки — со значениями по умолчанию и пояснениями. Поменяй, что нужно, и перезапусти fedtail. Программа этот файл только читает и никогда не перезаписывает.
Значение, записанное здесь, остаётся твоим, даже если в новой версии умолчание изменится. Хочешь всегда умолчание программы — закомментируй строку (# в начале) или удали её.
Новая версия принесла новые настройки — python3 -m fedtail --update-config допишет их в нужные главы (старый файл сохранится как config.toml.bak). Пересобрать файл заново по главам, с твоими значениями — python3 -m fedtail --rebuild-config. Полный справочник текущей версии всегда лежит рядом: config.example.ru.toml (и config.example.en.toml — то же по-английски).
Где лежит: ~/.config/fedtail/<профиль>/config.toml (без –profile — главный профиль, ★)
Ключи запуска
| Ключ | Что делает |
|---|---|
-p, --profile ИМЯ | профиль = аккаунт со своим конфигом и данными (без него — главный) |
-c, --config ФАЙЛ | другой конфиг вместо конфига профиля |
-d, --data ПАПКА | другая папка данных вместо папки профиля |
--ui qt|tui|web | окно, терминал или браузер (на один запуск; постоянно — ui.frontend) |
--profiles | какие профили есть — и выйти |
--update-config | дописать в этот файл новые настройки с пояснениями — и выйти |
--rebuild-config | пересобрать этот файл по главам, с твоими значениями — и выйти |
--install-desktop | добавить fedtail (этот профиль) в меню с иконкой — и выйти |
--debug | подробный журнал на этот запуск, и он же — в терминал |
--bug-report | собрать логи и сведения о системе в архив для разбора — и выйти |
-V, --version | версия — и выйти |
КОМАНДА | работа в терминале без окна: lanes, show, tail, read, post (fedtail КОМАНДА -h — подробно про каждую) |
Главы
- 1. Вид и окно —
[ui] - 2. Чтение ленты —
[feed] - 3. Прочитанное —
[read] - 4. Какие ленты —
[lanes] - 5. Посты —
[post] - 6. Уведомления —
[notify] - 7. Активность —
[activity] - 8. Списки —
[lists] - 9. Подписки на треды —
[subs] - 10. Опрос сервера —
[poll] - 11. Сервер —
[account] - 12. База и логи —
[storage],[debug] - 13. В терминале —
[cli],[tui] - 14. В браузере —
[web]
1. Вид и окно
Как выглядит
| Ключ | По умолчанию | Что делает |
|---|---|---|
ui.theme | "system" | Тема — файл в ~/.config/fedtail/themes/<имя>.toml или встроенная: “system” — светлая/тёмная, как в KDE; “terminal” — зелёным по чёрному, всё моноширинное; “juick” — juick.com году в 2013-м: светло-серая страница, белые посты, синие ссылки; “juick-classic” — juick.com году в 2011-м: оливковый фон, бежевые посты; “bnw” — bnw.im: чёрная рамка, серые посты, всё моноширинное, зелёные кнопки; “point” — point.im сегодня: белая страница, посты через тонкую линию, квадратные аватарки, имя над датой, #id | ответы под постом, кнопки справа; “night” — тёмная, своими цветами, на любом рабочем столе; “contrast” — для слабого зрения: крупно, чёрным по белому, чёткие линии; “pink” — розовая: пудра и ягоды, мягкие углы, цветочки; “nord” — арктическая тёмная: холодный сине-серый, морозные ссылки; “solarized” — Solarized light: тёплая бумага, синие ссылки; “paper” — тёплая бумага и книжный шрифт, для длинных тредов; “debug” — для поиска недоделок: непрочитанное, курсор j/k, найденное, «увидено не целиком», фокус клавиатуры — каждое своей кричащей рамкой. Свои темы: см. ~/.config/fedtail/themes/README.txt |
ui.font_size | 0 | Размер шрифта постов в пунктах, 0 = системный. |
ui.font | "" | Шрифт всего окна поверх темы и системы: "" — как в теме (а у неё — системный). Можно список через запятую, берётся первый установленный: “Inter, Noto Sans”. Шрифты не обязательно ставить в систему: файлы .ttf / .otf в ~/.config/fedtail/fonts/ подхватываются при запуске. |
ui.mono_font | "" | Моноширинный, для #id и /N: "" — как в теме (а у неё — системный). |
ui.max_width | 760 | Ширина колонки постов в пикселях, 0 = во всю ширину. Кнопка ↔ вверху слева переключает на время (запоминается до следующего запуска), конфиг не трогает. |
ui.layout | "single" | Как открывается окно: “single” — одна лента справа, “columns” — несколько лент рядом, колонками, как в TweetDeck. Переключается и кнопкой ❯ вверху слева, но при запуске окно всегда такое, как здесь. |
ui.columns | [] | Какие ленты стоят колонками, слева направо, пока ты их не поменял в окне (клик по ленте слева добавляет колонку, ✕ на колонке убирает, ‹ › двигают; это запоминается). Имена — как в lanes.enabled; “list:Друзья” — список по названию. [] — Лента, Ответы мне и Активность. |
ui.column_width | 460 | Ширина одной колонки в пикселях (не меньше 280). Не влезают в окно — прокрутка вбок. |
ui.actions | "both" | Кнопки под постом: “both” — иконка и подпись, “icons” — только иконки (подписи всплывают при наведении), “text” — только подписи. |
ui.expand_cw | true | Тексты и картинки под предупреждением (CW) сразу развёрнуты. false — свёрнуты, разворачиваются кнопкой «показать». |
ui.bookmark_button | true | Кнопка «В закладки» в ряду под постом (иначе — только в меню ⋯ и клавишей m). |
ui.arts_mode | true | Режим arts (в честь @arts, основателя Point.im): всё как автор выложил, без опеки. Включает разом: CW развёрнуты (expand_cw), «чувствительные» картинки без плашки (feed.sensitive_media = “show”), фильтры сервера не прячут и не сворачивают посты, пункта «Пожаловаться» нет. Твои собственные мьюты и блоки работают как обычно, а то, что режет сам сервер (блоки доменов на нём), до клиента не доходит вовсе — это не обойти. Рекомендуется. false — всё как у всех, каждая настройка по отдельности. |
ui.sidebar_groups | true | Ленты слева по группам с заголовками: «Стандартные», «Личные», «Списки». false — одним списком. |
ui.sidebar_width | 272 | Ширина левой колонки (аккаунт, ленты) в пикселях, не меньше 180. Её же можно тянуть мышью за край — тогда запоминается до следующего запуска, а это число остаётся как есть. |
ui.sidebar_footer | true | Внизу слева мелко: версия, сборка и кто это написал. false — убрать. |
ui.app_icon | "possum" | Иконка окна, трея и уведомлений: “possum” — опоссум, обнявший свой хвост (он же в меню рабочего стола и в «О программе»); “bubble” — нарисованный пузырь-тред. |
ui.themed_icon | true | Пузырь (“bubble” выше) — в цветах выбранной темы. false — всегда обычный. (В меню рабочего стола — опоссум: его ставит –install-desktop.) |
ui.icon_count | ["replies", "mentions", "subs", "requests"] | Число непрочитанного на иконке — в трее и на кнопке в панели задач (KDE: нужна запись в меню от –install-desktop и пакет python3-pyside6.qtdbus). Считаются ленты отсюда, кроме тех, что в icon_count_except; [] — без числа. Имена лент — те же, что слева (слово ленты видно и в подсказке к ней): federated — Федерация home — Лента local — Локальная bots — Боты my_posts — Мои записи direct — Личные mentions — Упоминания replies — Ответы мне subs — Подписки bookmarks — Закладки my_likes — Мои лайки activity — Активность requests — Заявки “lists” — все списки разом; один список — по названию (или id): “list:Друзья”. “all” — все ленты сразу (только в первом из пары; лишнее убирается в except). federated и local не считаются никогда (их листают, непрочитанного там нет). Пример: [“replies”, “mentions”, “lists”] или [“all”] + except = [“home”, “bots”]. |
ui.icon_count | ["replies", "mentions", "subs", "requests"] | Какие ленты не считать на иконке, даже если они есть в icon_count (например, при |
ui.icon_count_except | [] | |
ui.language | "auto" | Язык интерфейса: “auto” (из LANG), “ru”, “en”. |
ui.frontend | "qt" | Интерфейс: “qt” — окно; “tui” — в терминале (нужен Textual: python3-textual или pip install textual), то же, что fedtail --ui tui; “web” — в браузере (--ui web). |
Окно, клавиши, запуск
| Ключ | По умолчанию | Что делает |
|---|---|---|
ui.close_to_tray | true | Крестик прячет окно в трей, а не закрывает программу. |
ui.esc | "curtain" | Esc закрывает то, что сверху (картинку, поиск), а последний Esc: “curtain” — закрывает все ленты шторкой: окно остаётся, слева счётчики, справа пусто; ничего не отмечается прочитанным — утром откроешь, а новое накопилось; “tray” — сразу убирает окно в трей (без трея — сворачивает); “off” — ничего не делает. |
ui.start_lane | "none" | Что открыто при запуске: “none” — ничего: все ленты за шторкой, слева счётчики (Enter откроет прошлую); “last” — лента, открытая в прошлый раз; имя ленты — всегда она: “home”, “replies”, “subs”… (как в [lanes]). |
ui.compose | "inline" | Где писать пост: “inline” — панелью внутри главного окна (раскладка клавиатуры не сбрасывается: KDE помнит её для каждого окна, и новое окно может открыться с другой); “window” — отдельным окном, как раньше. |
ui.compose_size | 0 | Размер панели поста — в процентах от главного окна (и следом за ним, когда окно меняет размер): 50, 80, 100… 0 — как было, не больше 820 × 540. Кнопка ⤡ в панели переключает между обычным и большим (90 %) и запоминает выбор. |
ui.command_line | true | Командная строка как на Point внизу окна (Ctrl+L покажет её, даже если false). |
ui.whats_this | false | Режим «Что это?» с самого запуска: наведи мышь на кнопку — подробная подсказка, что она делает, какой ключ конфига её меняет и где об этом в справке. На время включается и выключается в меню ≡ → «Что это?». Горячей клавиши нет нарочно (F1 рядом с Esc). |
Картинки и ссылки
| Ключ | По умолчанию | Что делает |
|---|---|---|
ui.image_height | 360 | Высота одиночной картинки в ленте, пикселей (несколько картинок — плиткой поменьше). |
ui.image_viewer | "internal" | Клик по картинке: “internal” — свой просмотрщик (← → листать, Esc закрыть), “browser” — открыть в браузере. |
ui.video_player | "internal" | Видео и аудио: “internal” — прямо в окне (видео — поверх окна: пробел — пауза, ← → — перемотка, M — звук, O — в браузер, Esc — закрыть; аудио — плеер в карточке), “browser” — открывать в браузере. Нужен QtMultimedia (Debian: python3-pyside6.qtmultimedia python3-pyside6.qtmultimediawidgets); без него — браузер. |
ui.video_decode | "software" | Чем декодировать видео: “software” — процессором (видео в федиверсе маленькие, ему легко), “hardware” — видеокартой, как решит Qt. На некоторых картах (NVIDIA: “CUDA_ERROR_INVALID_VALUE”, “more than 32 decode surfaces” в логе) аппаратное декодирование не заводится, и видео дёргается, встаёт или остаётся чёрным. Переменная QT_FFMPEG_DECODING_HW_DEVICE_TYPES, заданная руками, важнее этого флага. |
ui.gifv | "play" | Гифки Мастодона (короткие беззвучные видео): “play” — крутятся прямо в карточке, пока она на экране (не больше трёх разом), “click” — стоп-кадр, клик — поверх окна. |
ui.image_upscale | 2 | Во сколько раз просмотрщик может увеличить маленькую картинку, чтобы она заняла окно (1 — никогда не увеличивать). |
ui.save_dir | "" | Куда сохранять картинки (S в просмотрщике, правый клик по картинке в ленте). "" — папка «Загрузки» рабочего стола (~/Downloads, ~/Загрузки — как настроено в KDE). |
ui.image_cache_mb | 128 | Сколько памяти, МБ, держать под уже скачанные и разжатые картинки (самые давние выбрасываются первыми; на диске кэш остаётся, перечитать оттуда — мгновенно). |
ui.image_decode | "box" | Картинки в ленте разжимаются в памяти под размер своей рамки (с учётом плотности экрана): «box» — в несколько раз меньше памяти и работы процессору; «full» — как раньше, до 1200 точек по большей стороне (резче, если потом растянуть окно). |
ui.image_disk_mb | 1000 | Сколько места на диске, МБ, держать под скачанные картинки: сверх этого выбрасываются те, что дольше всего не открывались (при старте и по ходу дела). 0 — не чистить. |
ui.video_disk_mb | 10000 | То же для видео, гифок и звука — у них своя папка и свой лимит, МБ (ролик-другой и гигабайта нет). Видео, открытое раз, остаётся на диске и в следующий раз играет сразу. 0 — не держать видео на диске. |
ui.unload_hidden_minutes | 10 | Лента, которую не открывали столько минут, отпускает свои карточки из памяти: открытый сутками клиент иначе держит сотни карточек со всеми картинками (больше гигабайта). Откроешь её снова — нарисуется заново, с первого непрочитанного (это быстро). Та лента, что сейчас открыта, не выгружается никогда. 0 — держать всё. |
ui.links_in_app | true | @упоминания, #хэштеги и ссылки на посты и профили в федиверсе открывать внутри fedtail (профиль, лента тега, тред), а не в браузере. Не нашлось — браузер. |
Несколько аккаунтов
| Ключ | По умолчанию | Что делает |
|---|---|---|
ui.switch_closes | true | Аккаунты — это профили (–profile имя): у каждого свой конфиг, тема и окно. Правый клик по аватарке (или ≡ → «Аккаунт и сервер») — список, выбрал — открылся тот. true — это окно при этом закрывается; false — остаются оба. |
ui.merge | [] | Все аккаунты в одном окне: ленты с одинаковыми именами сливаются («Лента» обоих — одна), у постов других аккаунтов пометка «→ @ник» — ответ, лайк и буст уйдут от того аккаунта, который пост получил. Списки других аккаунтов — отдельными лентами. [“all”] — все аккаунты, [“work”] — только эти профили, [] — как выбрано в меню аккаунтов («Все аккаунты в одном окне»). |
ui.account_colors | true | В общем окне у постов других аккаунтов метка «→ @ник» — цветная: у каждого аккаунта свой цвет, всегда один и тот же. false — без цвета. |
ui.act_as | true | В общем окне в меню ⋯ поста — «От другого аккаунта»: лайк, буст или ответ не тем аккаунтом, который пост получил. fedtail найдёт пост по адресу через сервер того аккаунта и сделает действие оттуда. false — нет такого пункта. |
ui.post_keys | true | Клавиши в ленте и треде, как в веб-клиентах: j / k — следующий / предыдущий пост, r — ответить, f — в избранное, b — продвинуть, m — в закладки, o или Enter — открыть тред. false — эти буквы ничего не делают. |
ui.announcements | "banner" | Объявления сервера (от его админов: обновления, правила, работы): “banner” — полосой над лентой, пока не нажмёшь «Понятно» (сервер запоминает это и для других клиентов); “off” — не показывать. |
ui.media_grid | "natural" | Несколько картинок в посте: “natural” — каждая целиком, своей формы; “square” — ровной сеткой квадратов, обрезанных вокруг точки фокуса, которую поставил автор (если поставил; иначе — по центру). Одна картинка не обрезается никогда. |
ui.alt_text | "tooltip" | Описание картинки (alt-текст, его пишет автор для тех, кто не видит): “tooltip” — при наведении мыши; “caption” — ещё и подписью под картинками. |
2. Чтение ленты
[feed]
| Ключ | По умолчанию | Что делает |
|---|---|---|
feed.order | "oldest_first" | Порядок: “oldest_first” — старое сверху, читаешь вниз (как RSS/Point); “newest_first” — свежее сверху (как у всех). |
feed.start_at | "first_unread" | Где вставать при открытии ленты: “first_unread” или “newest”. |
feed.on_new | "keep_position" | Что делать, когда пришло новое: “keep_position” — стоять где стоишь; “jump_to_newest” — прыгнуть к новому (как у всех). |
feed.show_reply_context | true | Полоска «↪ в ответ на…» над ответами. |
feed.page_size | 40 | Сколько постов за один запрос к серверу. |
feed.catch_up_limit | 400 | Сколько новых постов догонять за один опрос (остальное — следующим). |
feed.render_limit | 300 | Сколько последних постов держать на экране в ленте (старые — по кнопке «раньше»). |
feed.repeat_boosts | false | Буст поста, который уже был в этой ленте (сам или чужим бустом) или уже прочитан, — повтор: false — не показывать его, пост остаётся там, где пришёл впервые; true — каждый буст поднимает пост снова (как у всех). Сам пост, пришедший как пост, видно всегда. |
feed.build_at_once | 40 | Сколько карточек строить сразу при открытии ленты — вокруг места, где ты читаешь; остальные достраиваются, когда подкручиваешь к краю (по полсотни карточек экран не ждёт). То, что ты читаешь, при этом не сдвигается. 0 — строить всю ленту сразу (как раньше: на сотнях постов это секунды). |
feed.first_run_mark_read | true | При самом первом запуске считать всё загруженное прочитанным (не начинать с завала). |
feed.honest_counters | false | Честные счётчики: открывая тред, спросить у сервера автора настоящие числа лайков, бустов и ответов публичных постов (твой сервер знает только те, что дошли до него). Это запрос к чужому серверу — без твоего токена, но с твоим IP. |
feed.counters_via_accounts | true | Если сервер автора не отдаёт числа без входа: спросить их как другой твой аккаунт (профиль fedtail) — у сервера автора, если ты там есть, или у сервера, где пост уже лежит. Токен каждого аккаунта уходит только на его собственный сервер. Работает вместе с honest_counters. |
feed.remember_choices | false | Выбор над лентой — «Всё / Только посты / Новое» и «Лентой / Беседами» — помнить между запусками. false — каждый запуск с чистого листа: «Всё» и «Лентой» (или что задано в [lanes] posts_only), выбранное держится до закрытия программы. |
feed.complete_threads | true | Полные треды. Твой сервер знает только те ответы, что до него дошли (от тех, кого читают на твоей ноде, или адресованные вам), — поэтому чужие треды бывают с дырами. Открыл тред — fedtail спросит у сервера автора список ответов и попросит твой сервер подтянуть недостающие; тред дорастёт сам через пару секунд. Это запросы к чужим серверам без твоего токена (видят только IP). false — довольствоваться своим сервером. Mastodon 4.5+ и сам дособирает ответы — тогда тред дорастёт, когда сервер скажет, что готово. |
feed.link_cards | "full" | Карточка ссылки под постом — заголовок, описание и картинка страницы, на которую он ссылается (их собирает сервер): “full” — с картинкой; “text” — без картинки, одним-двумя строчками; “off” — не показывать. У поста с собственными картинками карточки нет. |
feed.custom_emoji | true | Свои эмодзи серверов (:blobcat: и прочие) — картинками в постах и именах. false — оставить текстом :blobcat: (и не качать их картинки). |
feed.emoji | true | Эмодзи в ленте вообще. false — выключить все до единого: и картинки серверов (:blobcat:), и обычные юникодные (🔥 😂 🇬🇪), и строку реакций под постом. Имя, состоявшее из одних эмодзи, показывается логином. Значки самого fedtail (⚠ ↔ ❯) не трогаются. |
feed.quotes | "card" | Цитаты (пост внутри поста: Mastodon 4.5+, Akkoma, Misskey и другие): “card” — цитируемый пост рамкой внутри; “link” — одной строкой со ссылкой; “off” — как прислал сервер (обычно строка «RE: ссылка»). |
feed.remote_profiles | true | Профиль человека с другого сервера, о котором твой сервер почти ничего не знает: fedtail прочитает его последние публичные посты прямо с его сервера (ActivityPub outbox) и попросит твой сервер подтянуть их — сколько — remote_posts. Это запросы к чужим серверам без твоего токена (видят только IP); серверы, требующие подписи запросов, просто ничего не отдадут. |
feed.prefetch | "previews" | Картинки новых постов скачивать заранее, как только посты пришли, — откроешь ленту, а они уже на диске. “previews” — превью (и у видео тоже), аватарки и картинки ссылок; “all” — ещё и оригиналы картинок, сами видео и гифки (видео — по одному, своим потоком, не больше 300 МБ каждое; трафика и места на диске намного больше); “off” — только когда пост на экране. |
feed.per_person_follow | true | В профиле того, на кого подписан, — две кнопки: «♻ без его бустов» (его бусты не приходят в «Ленту») и «🌐 языки» (только его посты на этих языках). Хранит сервер, так что действует во всех клиентах. false — без кнопок. |
feed.show_moved | true | Аккаунт переехал на другой сервер: в профиле плашка «переехал на @новый» с кнопками «открыть» и (если ты на него подписан) «подписаться там». false — без плашки. |
feed.old_days | 30 | Пост старше стольких дней — пометка «старый, N дн.» рядом с датой: такие приходят из чужого outbox или старого треда, и их не спутать с новостями. 0 — без пометки. |
feed.collapse_tags | true | Абзац из одних хэштегов (больше трёх) — набивка для поиска: в ленте он сворачивается в первые три и «… +N» мелким шрифтом, в открытом треде показан целиком, но тоже мелко. Хэштеги внутри текста не трогаются. false — как прислал сервер. |
feed.server_info | true | На чём работает сервер человека — в профиле, «🖥 GoToSocial 0.17» (из его nodeinfo, без твоего токена; запоминается на неделю). false — не спрашивать. |
feed.long_form | true | «📄 Читать целиком» в меню ⋯ поста с другого сервера: пост как его хранит сервер автора. Статья (Article, Page) — вся, а не заголовок со ссылкой; событие (Event) — со временем и местом. Без твоего токена. false — нет такого пункта. |
feed.text_markup | true | |
feed.follow_date_note | true | Серверы не хранят, с какого дня ты на кого-то подписан. Подписываясь через fedtail, дописываю дату последней строкой в твою приватную заметку о человеке — «[fedtail followed 2026-10-18]»: её видно с любого устройства и в других клиентах (в fedtail эта строка спрятана и при правке заметки сохраняется). false — помню только здесь. |
feed.remote_posts | 20 | Сколько последних постов подтягивать так в профиль (не больше 40). |
feed.remote_people | true | Подписки и подписчики человека с другого сервера: твой сервер знает только часть. Внизу такого списка будет кнопка «ещё с его сервера» — fedtail прочитает списки прямо оттуда (ActivityPub, без твоего токена) и найдёт этих людей через твой сервер. false — без кнопки. |
feed.sensitive_media | "hide" | Картинки и видео, помеченные автором как «чувствительные» (без предупреждения-CW): “hide” — закрыты плашкой, клик — показать; “show” — сразу видны. Под CW они и так спрятаны вместе с текстом. |
feed.profile_pinned | true | Закреплённые посты — сверху профиля, с пометкой 📌. false — профиль просто по времени. |
feed.translate | true | «Перевести» в меню ⋯ у поста на чужом языке — если твой сервер умеет переводить (Mastodon с DeepL или LibreTranslate). Перевод — прямо в карточке, с кнопкой «оригинал». |
feed.profile_featured | true | В профиле — избранные теги человека («Часто пишет о: #теги») и кого он рекомендует (Mastodon 4.4+). false — не спрашивать. |
3. Прочитанное
[read]
| Ключ | По умолчанию | Что делает |
|---|---|---|
read.mark_read | "on_scroll" | Когда пост считается прочитанным: “on_scroll” — когда прокрутил его целиком; “on_open” — вся лента, как только её открыл; “manual” — только руками: «Всё прочитано», а у поста в меню ⋯ «Прочитано» и «Прочитано до сюда» (этот и всё, что старше). Так лента всегда ждёт тебя ровно там, где ты остановился, хоть читай по одному посту. Пункты «Прочитано» и «Прочитано до сюда» в меню поста есть при любом режиме. |
read.read_button | false | Кнопка ✓ «Прочитано» прямо под каждым непрочитанным постом (удобно с “manual”). |
read.sync_markers | true | Общая позиция чтения с другими клиентами (Mastodon markers): дочитал «Ленту» или упоминания на телефоне — здесь это тоже прочитано, и наоборот. Работает с Mastodon, GoToSocial, Akkoma. false — прочитанное живёт только здесь. |
4. Какие ленты
[lanes]
| Ключ | По умолчанию | Что делает |
|---|---|---|
lanes.global | — | Какие ленты показывать (и в каком порядке внутри группы слева). Группы: «Стандартные» — от самой широкой к своей: federated — «Федерация» (Federated): всё, что твоя нода знает со всех серверов home — «Лента» (Home): те, кого читаешь, без ботов (открывается по умолчанию) local — «Локальная» (Local): вся твоя нода bots — «Боты» (Bots): те, кого читаешь, только боты «Личные»: my_posts — «Мои записи» (My posts) direct — «Личные» (Direct): личные сообщения тебе (видимость «только упомянутым») mentions — «Упоминания» (Mentions): где тебя тегнули в чужом разговоре replies — «Ответы мне» (Replies to me): ответы на мои посты и комменты subs — «Подписки» (Subscriptions): новое в тредах, на которые подписан (как на Point) bookmarks — «Закладки» (Bookmarks): посты, отложенные «в закладки» (меню ⋯ у поста) my_likes — «Мои лайки» (My likes): посты, которые ты лайкнул (по умолчанию не включена) activity — «Активность» (Activity): кто лайкнул, продвинул, подписался на тебя requests — «Заявки» (Follow requests) в подписчики Внизу — «Списки» с сервера (секция [lists]). Слово ленты видно и в подсказке к ней слева. Старые имена (до 0.15) тоже понимаются: people = home, comments = replies, |
lanes.enabled | ["federated", "home", "local", "bots", "my_posts", "direct", "mentions", "replies", "subs", "bookmarks", "activity", "requests"] | federated и local подгружаются, только пока открыты, и без счётчиков: их листают, а не дочитывают. |
lanes.extra_bots | [] | Аккаунты, которые считать ботами, даже если у них нет галки «бот». Свой сервер — просто “ник”, чужой — “ник@сервер”. |
lanes.posts_only | [] | В каких лентах при запуске включено «только посты» (без комментариев/ответов). Переключается и галочкой над лентой — выбор запоминается. |
lanes.mentions_all | false | «Упоминания» — это упоминания, которые НЕ ответы тебе: ответы на твои посты и комменты (даже с @тобой внутри) живут в «Ответах мне». true — «Упоминания» показывают вообще всё, где тебя упомянули, ответы тоже (они будут в обеих лентах). |
lanes.direct_apart | true | Личные сообщения (видимость «только упомянутым»), когда включена лента direct, живут только в ней — не дублируются в «Ответах мне» и «Упоминаниях». false — и там тоже. |
lanes.tag_groups | [] | Ленты из нескольких тегов — в боковой панели, группой «Теги» (подгружаются, пока открыты, как «Федерация»). Каждая — таблица [[lanes.tag_groups]]: name — как назвать, any — любой из тегов, all — все сразу, none — кроме. То же можно набрать в поиске («#грузия #georgia -#политика») и сохранить кнопкой «+ в ленты» — тогда здесь писать не нужно. Пример (строку tag_groups = [] ниже тогда убери — TOML не даст и то, и то): [[lanes.tag_groups]] name = “Грузия” any = [“грузия”, “georgia”, “tbilisi”] none = [“политика”] |
5. Посты
[post]
| Ключ | По умолчанию | Что делает |
|---|---|---|
post.default_visibility | "private" | Видимость нового поста: “public”, “unlisted”, “private” (подписчикам), “direct”; “server” — как выставлено в настройках на сервере (в его веб-интерфейсе). |
post.send_timeout | 90 | Сколько секунд ждать ответа сервера на отправку поста. Медленная нода может делать пост дольше обычных 30 секунд; не дождался — fedtail сам смотрит, появился ли пост, прежде чем сказать «не отправлено» (чтобы повтор не дал дубль). |
post.reply_never_wider | true | Ответ не бывает открытее исходного поста. |
post.drafts_autosave | true | Черновики сохраняются на лету и переживают закрытие окна. |
post.cw_field | false | Поле «предупреждение / заголовок под катом» (CW) открыто сразу. false — прячется за кнопкой «⚠ Предупреждение». |
post.camelcase_hint | true | Подсказка под текстом, если хэштег написан одним регистром (#georgianews): экранные дикторы читают #GeorgiaNews по словам. false — не подсказывать. |
post.plain_posts | true | Командная строка внизу (Ctrl+L), как на Point: #a3f — открыть, #a3f текст — ответить, S/U #a3f — подписка на тред, S/U @ник — на человека, ! — продвинуть, ~ — в закладки, D — удалить свой, @ник — профиль, ? — справка. Простой текст без команды — новый пост (false — только команды, без случайных постов). |
post.language | "" | Язык новых постов (код ISO 639: “ru”, “en”, “ka”…), по нему серверы и клиенты фильтруют и переводят. "" — не указывать, сервер возьмёт язык из настроек аккаунта. В окне поста его можно сменить для одного поста. |
post.languages | ["ru", "en", "ka", "uk"] | Языки в списке окна поста (сверху — «как в настройках»). Любой другой — впиши сюда кодом ISO 639 (“eo”, “es”, “cv”, “jbo”, “tok”…) или выбери в окне поста «Другой язык…»: добавленный там остаётся в списке и дальше. |
post.complete_mentions | true | Пишешь @ар — подсказать людей: сначала тех, кто чаще встречается в ленте, потом найденных сервером. false — не подсказывать. |
post.complete_tags | true | Пишешь #ге — подсказать теги: сначала те, на которые подписан, потом самые частые в ленте. |
post.report_forward | true | Жалоба модераторам на человека с другого сервера: галка «переслать и на его сервер» сразу стоит (кто пожаловался, там не узнают). false — по умолчанию снята. |
post.quote_policy | "" | Кто может цитировать твои новые посты (Mastodon 4.5+): “public” — все, “followers” — подписчики, “nobody” — никто; "" — как в настройках аккаунта на сервере. |
post.quote_action | true | «Цитировать» в меню ⋯ у поста, который его автор разрешил цитировать (Mastodon 4.5+). |
post.invite | true | «Позвать в тред…» в меню ⋯ у поста: ответ на него, в котором пока только «@» и открыт список людей — названный получит уведомление и увидит тред у себя. Остальных участников не упоминает (их не дёргает). То же в командной строке: #a3f @кого текст. |
post.who_can_reply | "" | Кто может отвечать твои новые посты — только GoToSocial (interaction policy): "" — как в настройках аккаунта; “everyone” — все; “followers” — подписчики и упомянутые; “following” — те, на кого ты подписан, и упомянутые; “mentioned” — только упомянутые; “me” — только ты. Другим серверам это не отправляется. |
post.who_can_boost | "" | Кто может продвигать твои новые посты (GoToSocial) — варианты те же, что у who_can_reply. |
post.who_can_like | "" | Кто может лайкать твои новые посты (GoToSocial) — варианты те же, что у who_can_reply. |
post.schedule | true | Кнопка «⏰ Позже» в окне поста: отправить в назначенное время (пост ждёт на сервере, даже если fedtail закрыт). Список ждущих — меню ≡ → «Запланированные». false — без кнопки. |
post.alt_reminder | true | Картинка без описания — перед отправкой спросить: «Описать» или «Отправить так». false — не спрашивать. |
post.redraft | true | «Удалить и переписать» в меню ⋯ у своего поста: пост удаляется, а его текст (как ты его набирал), CW, видимость, язык и то, на что он отвечал, открываются новым черновиком. Картинки не возвращаются — сервер удаляет их вместе с постом. false — без пункта. |
post.resize_images | true | Картинка больше, чем принимает сервер (он сам говорит, сколько), — перед загрузкой уменьшить копию, а не получить отказ: под его предел в пикселях, в JPEG (с прозрачностью — PNG) — под предел в байтах. Твой файл не трогается. false — отправлять как есть. |
post.chain | true | Тред цепочкой: строка из одних «—» делит текст на посты — уходят разом, каждый ответом на предыдущий (картинки и опрос — у первого). Счётчик знаков считает каждую часть отдельно. false — «—» остаётся просто текстом (горизонтальной чертой в Markdown). |
post.preview | true | Кнопка «👁 Предпросмотр» в панели поста: как он будет выглядеть — Markdown уже разметкой (если сервер его понимает), CW, видимость, каждая часть цепочки; оттуда же «Отправить». false — без кнопки. |
post.complete_emoji | true | Набираешь :ко — подсказать эмодзи сервера (:коржик: и т.п.), Tab или Enter вставляет. false — не подсказывать. |
post.focus_point | true | Двойной клик по картинке в посте — подпись к ней и точка фокуса: щёлкни по картинке, где главное, и в превью (там, где её обрезают) будет видно именно это. false — только подпись. |
post.quote_prefix | "> " | «Ответить с цитатой» в меню ⋯ поста и «Процитировать в ответ» на выделенном тексте: в ответ встаёт цитата — каждая строка с этим началом (Markdown-цитата). Панель ответа уже открыта — цитата встаёт туда, где курсор: выделил предложение, процитировал, ответил, выделил следующее… "" — без этих пунктов. |
6. Уведомления
[notify]
| Ключ | По умолчанию | Что делает |
|---|---|---|
notify.enabled | true | Всплывающие уведомления рабочего стола. |
notify.lanes | ["direct", "replies", "mentions", "subs", "activity", "requests"] | О чём уведомлять. home по умолчанию молчит (там всё подряд), списки тоже. Имена лент — те же, что слева (слово ленты видно и в подсказке к ней): federated — Федерация home — Лента local — Локальная bots — Боты my_posts — Мои записи direct — Личные mentions — Упоминания replies — Ответы мне subs — Подписки bookmarks — Закладки my_likes — Мои лайки activity — Активность requests — Заявки “lists” — все списки разом; один список — по названию (или id): “list:Друзья”. “all” — все ленты сразу (только в первом из пары; лишнее убирается в except). Пример: [“replies”, “mentions”, “list:Друзья”] или [“all”] + except = [“home”, “bots”]. |
notify.except | [] | О чём не уведомлять никогда, даже если оно есть в lanes (например, при lanes = [“all”]): те же имена — “bots”, “federated”, “lists”, “list:Новости”… |
notify.privacy | "full" | Что показывать в уведомлении: “full” — кто и что написал; “sender” — только кто, без текста (можно читать при посторонних); “count” — только сколько, без имён и текста. |
notify.when_focused | false | Уведомлять и о ленте, которая сейчас открыта перед глазами (по умолчанию о ней молчим; о прочих лентах уведомления приходят, даже когда окно fedtail активно). |
notify.backend | "auto" | Как показывать: “auto” (уведомления KDE, если есть notify-send, иначе через трей), “desktop” — только notify-send, “tray” — только через трей. |
notify.filtered | "remind" | Отфильтрованные уведомления (Mastodon 4.3+: сервер придерживает упоминания от незнакомых, новых аккаунтов и т.п., пока не разрешишь): ≡ → «Для нежных и ранимых» → «Отфильтрованные уведомления…» — кто ждёт, «Пустить» / «Отклонить», и что именно фильтровать. “remind” — так, и при запуске строкой внизу, если кто-то ждёт; “menu” — только в меню; “off” — ни того, ни другого. |
7. Активность
[activity]
| Ключ | По умолчанию | Что делает |
|---|---|---|
activity.types | ["favourite", "reblog", "follow"] | Что показывать в «Активности» (и в уведомлениях о ней): “favourite” — добавили в избранное, “reblog” — продвинули, “follow” — подписались, “poll” — закончился опрос, “update” — отредактировали пост, который ты продвигал, “status” — новый пост человека, на чьи посты ты включил колокольчик. [“all”] — всё перечисленное (и то, что добавится в новых версиях). |
activity.approvals | true | Ответы, лайки и бусты, которые ждут твоего одобрения (GoToSocial: кто может отвечать, лайкать и бустить, задаётся в настройках поста). Приходят сюда же, с кнопками «Одобрить» и «Отклонить». false — не показывать (одобрять тогда на сайте сервера). |
activity.server_notices | true | Извещения самого сервера (Mastodon 4.3+): твой сервер (или чужой) заблокировал другой — и твои подписки и подписчики оттуда оборвались, сколько и почему; предупреждение от модераторов. Приходят сюда же. false — не показывать. |
8. Списки
[lists]
| Ключ | По умолчанию | Что делает |
|---|---|---|
lists.enabled | true | Списки с сервера (Mastodon, GoToSocial) — отдельными лентами под основными. Завести список и добавить в него человека — правым кликом по посту. |
lists.hide_members | "all" | Добавил человека или бота в список — его посты, его бусты и чужие бусты его постов читаются в ленте списка и уходят из общих лент, чтобы не мусорили: “all” — так с любым списком; “exclusive” — только со списками с галкой «исключающий» (сервер и сам убирает таких из домашней ленты); “off” — не убирать ниоткуда. |
lists.hide_in | ["home", "bots", "federated", "local"] | Из каких лент убирать (названия — как в [lanes]). |
lists.refresh_minutes | 10 | Как часто перечитывать сами списки и кто в них, минут. |
9. Подписки на треды
[subs]
| Ключ | По умолчанию | Что делает |
|---|---|---|
subs.auto | ["posts", "comments"] | Подписки на треды, как на Point. Сервер сообщает только об ответах, где тебя упомянули; если двое отвечают друг другу под твоим постом, ты об этом не узнаешь. fedtail сам перечитывает треды, на которые ты подписан, и складывает новое в «Подписки». Подписаться/отписаться — в меню ⋯ у поста или кнопкой в заголовке треда. На что подписываться самому: “posts” — свои посты, “comments” — треды, где комментишь. |
subs.interval_minutes | 5 | Как часто перечитывать каждый тред, минут. |
subs.active_days | 14 | Тред, где ничего не происходило столько дней, больше не проверяется. |
subs.max_threads | 30 | Сколько тредов проверять за один заход (остальные — в следующий). |
subs.replies_to_me | false | Ответы тебе и так приходят в «Ответы мне». true — показывать их и в «Подписках». |
subs.leave_mutes | true | Отписка от треда глушит и упоминания из него: ответы там сами тегают всех участников, а сервер (GoToSocial) тред заглушить не умеет. false — отписка только от «Подписок». |
10. Опрос сервера
[poll]
| Ключ | По умолчанию | Что делает |
|---|---|---|
poll.interval_seconds | 90 | Как часто спрашивать сервер о новом, секунд (не меньше 30). |
poll.stream_gap_seconds | 10 | Живой поток будит опрос, как только что-то пришло, — но не чаще раза в столько секунд: на оживлённом сервере события идут по многу раз в минуту, а каждый опрос — десяток запросов и немного процессора. Что придёт за эти секунды, придёт одним опросом. «Обновить» ждать не заставляет. 0 — сразу на каждое событие. |
poll.stream | "auto" | Живой поток сервера: пришло новое — опросить сразу, а не через interval_seconds. “auto” — если сервер его даёт (GoToSocial, Mastodon, Akkoma); “off” — только опрос. Поток лишь будит опрос, так что если он рвётся (сон ноутбука, прокси), ничего не теряется. |
11. Сервер
[account]
| Ключ | По умолчанию | Что делает |
|---|---|---|
account.markdown | "auto" | Понимает ли сервер Markdown: “auto” (спросить у сервера), “on”, “off”. GoToSocial / Akkoma — понимают, ванильный Mastodon — нет. |
12. База и логи
[storage]
| Ключ | По умолчанию | Что делает |
|---|---|---|
storage.max_mb | 1024 | Сколько места может занять база профиля (state.db), мегабайт. Посты, на которые ничто не ссылается — ни лента, ни подписанный тред, ни активность, ни черновик ответа, — забываются сами (раз в gc_hours); надо будет — скачаются с сервера заново. Если база всё равно больше этого, ленты становятся короче, пока не влезет (не короче 300 постов), а когда места снова много — отрастают обратно. Короткие id (#a3f) не забываются никогда. |
storage.keep_per_lane | 3000 | Сколько записей хранит каждая лента (самые новые). «Ещё» ниже них — снова с сервера. |
storage.keep_activity | 3000 | Сколько последних записей хранит «Активность» (лайки, бусты, подписки на тебя). |
storage.gc_hours | 6 | Как часто чистить базу, часов. Первый раз — в первый опрос после запуска. |
storage.grace_hours | 48 | Пост, сохранённый недавно (открытый тред, чей-то профиль), не забывается столько часов, даже если ни одна лента на него не ссылается. |
[debug]
| Ключ | По умолчанию | Что делает |
|---|---|---|
debug.mode | "auto" | Логи и диагностика. В режиме отладки всё подробно: клиент держат открытым сутками, и если он упадёт, зависнет или раздуется — нужны следы. Файлы — в папке logs/ папки данных профиля (меню ≡ → «Отладка» → «Открыть папку логов»): 2026-10-16_15-04-12.log — журнал: запросы с временем, опросы, действия (клики, ленты, вкладки — без текстов постов), ошибки с трассировкой, статистика. Новый файл при каждом запуске и каждый час; latest.log — ссылка на тот, что пишется сейчас: его и присылай; crash.log — стеки всех потоков, если процесс упал (segfault в Qt и т.п.); stacks.log — стеки по запросу: kill -USR1 <pid>, меню, или сам при зависании окна. Собрать всё в архив для разбора: python3 -m fedtail –bug-report (последние двое суток, без токена и базы). Режим отладки: “auto” — включён в версиях для разработки (из git, номер с .dev), выключен в релизах и однофайловых сборках из них; “on” / “off” — всегда. Выключен: только предупреждения и ошибки, несколько МБ в папке данных профиля, logs/, без статистики и сторожа; crash.log остаётся. Ключ запуска –debug включает его на один раз, что бы ни было здесь. |
debug.level | "debug" | Подробность журнала в режиме отладки: “debug”, “info”, “warning”. |
debug.log_dir | "" | Куда писать. "" — в папку данных профиля, logs/ (~/.local/share/fedtail/<профиль>/logs; меню ≡ → «Отладка» → «Открыть папку логов»). Своя папка — сюда, профиль добавится сам. Логи прошлой версии новая удаляет при первом запуске: они ей уже ни к чему. |
debug.log_mb | 10 | Файл журнала больше стольких МБ — начать следующий, не дожидаясь нового часа. |
debug.keep_mb | 500 | Сколько МБ журналов держать в папке: сверх этого самые старые удаляются. |
debug.stats_minutes | 5 | Раз во сколько минут писать память, CPU, потоки, размеры кэшей (0 — не писать). |
debug.trim_memory | true | Вместе со статистикой отдавать системе память, которую fedtail уже освободил (на Linux с glibc она иначе остаётся за процессом: после ночи лент и картинок он так и держит свой пик). В лог пишется, сколько отдано. |
debug.watchdog_seconds | 8 | Окно не отвечает столько секунд — записать стеки всех потоков (0 — не следить). |
debug.stall_ms | 250 | Фриз окна короче сторожа: если окно не отвечало дольше стольких миллисекунд, в журнал идёт строка «GUI froze N ms» — и чем оно было занято в этот момент: ярлык работы (событие, отрисовка ленты, картинка) и стек. «Qt itself» — сам Qt раскладывал и рисовал. Только в режиме отладки; 0 — не следить. |
debug.slow_request_seconds | 5 | Запрос к серверу дольше стольких секунд — предупреждение в журнале. |
debug.rss_warn_mb | 1500 | Память больше стольких МБ — предупреждение в журнале. |
debug.leak_samples | 12 | Поиск утечек. С каждой строкой статистики в журнал идёт строка «trend»: память, объекты, виджеты, карточки, картинки, потоки, файлы — сколько было при запуске, сколько сейчас и на сколько в час растёт. Если что-то из этого росло на каждой из последних стольких проверок (12 × stats_minutes = час) и не на крохи — предупреждение «possible leak» с цифрами. Первые полчаса не в счёт: ленты наполняются. Меньше 3 нельзя. |
debug.object_census | true | В режиме отладки, с каждой статистикой: какие объекты Python и какие виджеты Qt прибавились с прошлого раза и с запуска, самые растущие первыми (строки «census»). Ответ на вопрос «память растёт — чего именно?». Обход всех объектов занимает доли секунды раз в stats_minutes. false — не считать. |
debug.tracemalloc | false | Трассировка памяти с запуска (tracemalloc): каждое выделение памяти помнит, из какой строки кода оно. Медленнее и примерно вдвое больше памяти — только для охоты на утечку, например на ночь. Снимок — меню ≡ → «Отладка» → «Снимок памяти»: файл memory-<время>.txt в папке логов, кто держит больше всего и что выросло с первого снимка. Включить и без перезапуска можно там же. |
13. В терминале
fedtail без окна: fedtail lanes, fedtail show replies -n 20, fedtail tail, fedtail post "текст", fedtail post --reply a3f "текст", fedtail read replies. Тот же профиль, та же база и те же отметки прочитанного, что и у окна.
[cli]
| Ключ | По умолчанию | Что делает |
|---|---|---|
cli.enabled | true | Команды в терминале вообще. false — fedtail всегда открывает окно, а слова после ключей считаются ошибкой. |
cli.color | "auto" | Цвет: “auto” — только в терминале (не в трубе и не в файле) и если не задан NO_COLOR; “always” / “never”. |
cli.max_lines | 0 | Длинный пост обрезать до стольких строк (0 — показывать целиком). |
cli.tail_lanes | [] | Какие ленты показывает fedtail tail без названий. [] — те, что в notify.lanes. |
[tui]
Интерфейс в терминале — fedtail --ui tui (или ui.frontend = “tui”): слева ленты, справа посты, внизу командная строка как в окне. j / k — по постам, Enter — тред, r — ответить, f — лайк, b — буст, m — закладка, n — новый пост, x — лента прочитана, Tab — ленты/посты, : — командная строка, Esc — назад, q — выход. Прочитанное — по read.mark_read.
| Ключ | По умолчанию | Что делает |
|---|---|---|
tui.theme | "" | Тема Textual: "" — его обычная; или имя: “textual-light”, “nord”, “gruvbox”, “dracula”, “tokyo-night”, “monokai”, “solarized-light” и др. (Ctrl+P → Change theme — посмотреть). |
tui.lanes_width | 26 | Ширина колонки с лентами, в знаках. |
tui.show_context | true | Над ответом — строка «↳ @кто: начало того, на что он отвечает». false — без неё. |
tui.pictures | "inline" | Картинки в терминале — полублоками (нужен Pillow, python3-pil; терминал с truecolor). “inline” — первая картинка поста маленькой прямо в ленте, v — все в полный экран; “key” — только по v; “off” — никак (o — открыть пост в браузере). |
tui.picture_rows | 8 | Высота картинки в ленте, в строках. |
14. В браузере
fedtail --ui web (или ui.frontend = “web”): fedtail во вкладке браузера. При запуске печатает ссылку с ключом (и открывает её); ключ лежит в папке данных профиля, web.key — удали файл, и будет новый (старые ссылки перестанут работать).
[web]
| Ключ | По умолчанию | Что делает |
|---|---|---|
web.host | "127.0.0.1" | На каком адресе ждать. “127.0.0.1” — только с этого компьютера; “0.0.0.0” — и из домашней сети (с телефона: одноразовая ссылка, которую fedtail печатает при запуске, с адресом компьютера вместо 127.0.0.1; действует 15 минут). Там всё идёт без шифрования, так что только для своей сети; снаружи — через VPN или прокси с TLS. |
web.port | 8765 | Порт. |
web.open_browser | true | Открыть браузер при запуске. |