Ленты 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. Дальше остаётся только читать.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте