Ленты RSS никуда не исчезли: блоги, трекеры задач, релизы проектов и форумы по-прежнему отдают их. Newsboat — консольный клиент RSS и Atom, который хранит подписки в текстовом файле, кэширует материалы в SQLite и не мешает работать. Он запускается поверх SSH, требует считаные мегабайты памяти и остаётся полностью управляемым с клавиатуры.
Что умеет Newsboat
Проект вырос из Newsbeuter, разработка которого остановилась в 2017 году. Newsboat — активное продолжение с тем же форматом конфигурации. Программа понимает RSS 0.9x, 1.0 и 2.0 и Atom, импортирует OPML, умеет искать по загруженным материалам, поддерживает теги, query-ленты и выгрузку подкастов через Podboat.
Отличие от веб-агрегаторов принципиальное: данные лежат локально, сервер отдаёт только сами ленты. Аккаунт не нужен, а перенос между машинами сводится к копированию каталога ~/.newsboat или экспорту OPML.
Установка и первый запуск
Пакет есть в репозиториях крупных дистрибутивов. После установки запустите newsboat: программа создаст каталог ~/.newsboat и файлы urls и config, а при первом обновлении — базу cache.db.
sudo apt install newsboat
sudo dnf install newsboat
sudo pacman -S newsboat
newsboat -h
Если каталог не появился, создайте его вручную и положите пустые файлы — Newsboat читает их при старте и не требует отдельной инициализации.
Файл urls: подписки и теги
Каждая строка — адрес ленты, необязательное название в кавычках и необязательные теги. Теги перечисляются через пробел внутри второй пары кавычек и позволяют фильтровать список.
https://lwn.net/headlines/rss "LWN"
https://www.opennet.ru/opennews/opennews_all.rss "OpenNet" "linux ru"
https://kernel.org/rss/atom.xml "Kernel" "linux"
"query:Непрочитанное:unread = \"yes\""
Query-лента — не адрес, а правило. В примере она собирает все непрочитанные записи. Условия объединяются через and, а теги ищутся конструкцией tags # "linux".
Настройка поведения и внешнего вида
Файл config — набор директив, по одной на строку; комментарии начинаются с #. Сразу стоит задать интервал обновления, лимит хранимых статей и форматы списков.
auto-reload yes
reload-time 30
download-timeout 30
max-items 200
keep-articles-days 60
show-read-feeds no
text-width 100
browser xdg-open %u
articlelist-format "%4i %f %D %t"
preview-format "%t%n%a%n%n%D"
color listfocus black yellow bold
color article white black
Директива keep-articles-days удаляет старые записи при обновлении — главный способ держать cache.db компактным. max-items ограничивает число материалов на ленту, а формат %4i %f %D %t выводит номер, имя фида, дату и заголовок.
Фильтры: убрать шум
Не все ленты одинаково полезны. Директива ignore-article скрывает записи по регулярному выражению, а highlight подсвечивает важные слова в списке и тексте. У ignore-article первым аргументом идёт шаблон ленты, у highlight — область подсветки, затем регулярное выражение и цвета.
ignore-article "*" "title =~ \"спонсор|реклама\""
highlight article "Linux" yellow black
highlight article "systemd" cyan black
Фильтр не удаляет материалы из базы, а только прячет их из выдачи: сняв правило, вы снова увидите всё. Для тематических подборок удобнее не фильтр, а query-лента с тегом — она оставляет записи на месте и собирает их в отдельный список.
Ещё одна полезная директива — show-read-feeds no: она убирает из общего списка фиды, где нет непрочитанного. На практике это ускоряет ежедневный обход в разы, потому что не приходится пролистывать пустые разделы.
Горячие клавиши на каждый день
jиk— следующая и предыдущая запись,nиp— следующий и предыдущий фид;Enterоткрывает статью,oотправляет ссылку в браузер,eставит подкаст в очередь Podboat;rобновляет ленты,/ищет по заголовкам и тексту,?показывает справку;qзакрывает текущее окно,Qзавершает программу.
Полный список генерируется автоматически: нажмите ? в любом экране. Переназначить клавиши можно директивами bind-key и unbind-key.
Перенос подписок через OPML
Экспорт и импорт встроены и не требуют сторонних утилит. Импорт добавляет ленты к существующим, но не удаляет то, что уже записано в urls.
newsboat -i feeds.opml
newsboat -e > backup.opml
wc -l ~/.newsboat/urls
grep -c query ~/.newsboat/urls
Экспорт удобно складывать в Git или в каталог резервных копий: файл небольшой и хорошо читается глазами.
Подкасты и Podboat
Аудиофайлы Newsboat сам не скачивает — он помечает запись и складывает задание в очередь. Загрузкой занимается podboat из того же пакета. Для отправки в очередь нужен макрос, открывающий ссылку во внешнем плеере, либо клавиша e.
macro p "set browser \"mpv --no-video %u\"; open-in-browser; set browser \"xdg-open %u\""
mkdir -p ~/Podcasts
printf 'download-path "~/Podcasts"\nmax-downloads 3\nplayer "mpv --no-video"\n' > ~/.newsboat/podboat/config
После нажатия e запустите podboat, выберите передачу и нажмите d. Настройки Podboat лежат в отдельном файле и не пересекаются с основным конфигом.
Автообновление и диагностика
Для фонового обновления достаточно пары пользовательских юнитов systemd: service с типом oneshot вызывает встроенную команду -x reload, а timer запускает его по расписанию.
# ~/.config/systemd/user/newsboat.service
[Unit]
Description=Newsboat reload
[Service]
Type=oneshot
ExecStart=/usr/bin/newsboat -x reload
# ~/.config/systemd/user/newsboat.timer
[Unit]
Description=Hourly Newsboat reload
[Timer]
OnCalendar=hourly
Persistent=true
[Install]
WantedBy=timers.target
systemctl --user daemon-reload
systemctl --user enable --now newsboat.timer
newsboat -x reload
sqlite3 ~/.newsboat/cache.db "select count(*) from rss_item;"
curl -sI https://lwn.net/headlines/rss | head -n 3
Если лента не появляется, начните с curl: код ответа и заголовок Content-Type сразу показывают, отдаёт сервер XML или страницу с ошибкой. Второй частый источник проблем — устаревшие корневые сертификаты; пакет ca-certificates должен быть обновлён.
- пустой экран при старте — проверьте, что в
urlsнет строк с незакрытыми кавычками; - кракозябры вместо кириллицы — локаль должна быть UTF-8, проверьте вывод
locale; - программа долго стартует — уменьшите
keep-articles-daysи удалите старыйcache.db, он пересоздастся; - таймауты на медленных лентах — увеличьте
download-timeoutдо 60 секунд.
Итог
Newsboat закрывает задачу чтения лент без браузера, аккаунта и фоновой синхронизации. Настройка сводится к трём файлам, а поведение предсказуемо: вы сами решаете, сколько статей хранить и как часто обновлять ленты.
Минимальный чек-лист: установить пакет, перенести подписки через OPML, задать keep-articles-days и reload-time, проверить проблемную ленту через curl, включить таймер systemd. Дальше остаётся только читать.