πŸ“° A terminal feed reader with a fancy ui

Overview

tuifeed

Developed by @veeso

Current version: 0.1.1 (17/11/2021)

~ A terminal news feed reader with a fancy ui ~

License-MIT Repo stars Downloads counter Latest version Buy me a coffee

Linux CI MacOS Windows Coveralls



About tuifeed πŸ“°

tuifeed is a news feed reader with a fancy terminal user interface. It allows you read news from your favourite RSS and Atom sources, which can be easily configured in a TOML file.

Demo

Features 🎁

  • πŸ“° Read feed from any RSS/Atom source
  • 🌐 Open any article in your favourite browser in one-click
  • 🐧 Compatible with Windows, Linux, *BSD and MacOS
  • πŸ€– Easy setup
  • πŸ¦€ Rust-powered

Get started 🏁

Installation πŸš€

Shell script πŸ–₯️

You can directly install tuifeed with this simple shell script:

curl --proto '=https' --tlsv1.2 -sSLf "https://git.io/J1O0Z" | sh

⚠️ this method is supported for the following operating systems:

  • 🐧 GNU/Linux
  • 🍎 MacOS
  • 🚩 NetBSD

❗ If you don't trust the script, you can view its content on Github

Windows users 🍫

You can install tuifeed on Windows with Chocolatey:

choco install tuifeed

Cargo installation πŸ“¦

You can opt to install tuifeed with Cargo:

cargo install --locked tuifeed

Configure your news feed

Once installed, in order to start using tuifeed, the first thing you need to do is to configure the feeds you want to read from.

To open the configuration file you can run

tuifeed -c

this will open the configuration file in your favourite editor.

❗ If this option doesn't work for your, you can edit the file manually at:

  • ~/.config/tuifeed/config.toml on Linux
  • /Users/$USER/Library/Application\ Support/tuifeed/config.toml on MacOS

then you can add new sources as follows:

[sources]
"Corriere Della Sera" = "http://xml2.corriereobjects.it/rss/homepage.xml"
"Dev.to" = "https://dev.to/feed/"
"Hacker News" = "https://hnrss.org/newest"
"Il Piccolo" = "https://ilpiccolo.gelocal.it/rss/finegil/ilpiccolo/feed.rss"
"Il Post (Mondo)" = "https://www.ilpost.it/mondo/feed/"
"Il Post (Italia)" = "https://www.ilpost.it/italia/feed/"
"Messaggero Veneto" = "https://messaggeroveneto.gelocal.it/rss/finegil/messaggeroveneto/feed.rss"
"New York Times" = "https://rss.nytimes.com/services/xml/rss/nyt/World.xml"

so for each feed you want to read from, you must put an entry with a key, which identifies the Name of the source as it'll be displayed in the UI associated to the URL of the feed.

πŸͺ„ If you want to use special characters in toml you can quote the key name: "Il Post (Mondo)" = "https://www.ilpost.it/mondo/feed/"

Once you're done with configuration, save, close and enjoy tuifeed πŸ˜„

Keybindings ⌨️

Key Where Description
Tab, Right Feed list Move to article list
Up, Down, PageUp, PageDown Feed list, article list Scroll up/down in list
Home, End Feed list, article list Go to the beginning/end of the list
R Feed list Reload selected source
CTRL+R Feed list Reload all sources
Tab, Left Article list Move to feed list
Right Article list Move to article summary
Left Article summary Move to article list
Up, Down, PageUp, PageDown Article summary Scroll up/down in summary
Home, End Article summary Go to the beginning/end of summary
Enter Article summary, article link Open selected article url in your favourite browser
Esc * Quit tuifeed

Support the developer β˜•

If you like tuifeed and you're grateful for the work I've done, please consider a little donation πŸ₯³

You can make a donation with one of these platforms:

Buy-me-a-coffee PayPal


Powered by πŸ’ͺ


Contributing and issues 🀝🏻

Contributions, bug reports, new features and questions are welcome! πŸ˜‰ If you have any question or concern, or you want to suggest a new feature, or you want just want to improve tuifeed, feel free to open an issue or a PR.

Please follow our contributing guidelines


Changelog ⏳

View tuifeed's changelog HERE


License πŸ“ƒ

tuifeed is licensed under the MIT license.

You can read the entire license HERE

Comments
  • Implement dates

    Implement dates

    Hi,

    NetBSD package maintainer here. I'm currently using neix for feeds from project I maintain packages for. neix is no longer maintained and I would like to move to tuifeed, also because I could drop ncursesw from my system doing so.

    There's a feature that stops me from doing that. neix displays dates, which is rather useful info for a package maintainer. See screenshot

    Would this be something that could be implemented? And, are you willing to do so?

    question 
    opened by 0323pin 9
  • Article should use updated or published property

    Article should use updated or published property

    #5 - Article should use updated or published property

    Fixes #5

    Description

    I was contacted personally by @0323pin to help out with this issue.

    Although I couldn't personally find a feed with a published property, the attribute does exist. This PR aims to implement the request.

    List here your changes

    • If an article does not present an updated property, use published instead.

    EDIT:

    I was presented a feed that does contain this published property, but through a different identifier, i.e. pubDate. I hope feed_rs maps them to the same field, if doesn't how can we achieve this?

    Type of change

    Please select relevant options.

    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [x] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
    • [ ] This change requires a documentation update

    Checklist

    • [x] My code follows the contribution guidelines of this project
    • [x] I have performed a self-review of my own code:
      • If I'm not mistaken the updated property is shown on the top right of any feed within the TUI, and we can still see that. So there doesn't seem to be any regressions.
    • [ ] I have commented my code, particularly in hard-to-understand areas
    • [x] My changes generate no new warnings
    • [x] I formatted the code with cargo fmt
    • [x] I checked my code using cargo clippy and reports no warnings
    • [ ] I have added tests that prove my fix is effective or that my feature works
    • [x] I have introduced no new C-bindings
    • [x] The changes I've made are Windows, MacOS, UNIX, Linux compatible (or I've handled them using cfg target_os)
    • [ ] I increased or maintained the code coverage for the project, compared to the previous commit

    Acceptance tests

    wait for a project maintainer to fulfill this section...

    • [ ] regression test: ...
    opened by grtcdr 7
  • [QUESTION] - tuifeed now as a pkgsrc package

    [QUESTION] - tuifeed now as a pkgsrc package

    Not really a question, more FYI. I've packaged and merged tuifeed into pkgsrc main branch, https://mail-index.netbsd.org/pkgsrc-changes/2021/11/16/msg243429.html

    tuifeed will become available to NetBSD users using the native package manager within a few days.

    Regards, [email protected]

    question 
    opened by 0323pin 6
  • [BUG] - Malformed URL: https://geohot.github.io//blog/jekyll/update/2022/04/

    [BUG] - Malformed URL: https://geohot.github.io//blog/jekyll/update/2022/04/

    Description

    Steps to reproduce

    Add the source

    echo -e "GeorgeHotz = \"https://geohot.github.io/blog/feed.xml\""|tee -a ~/.config/tuifeed/config.toml &&
    tuifeed
    

    Copy the url from the lower right corner. It is https://geohot.github.io//blog/jekyll/update/2022/04/ instead of https://geohot.github.io/blog/jekyll/update/2022/04/16/vampire-attack-twitter.html

    Expected behaviour

    It is https://geohot.github.io//blog/jekyll/update/2022/04/ instead of https://geohot.github.io/blog/jekyll/update/2022/04/16/vampire-attack-twitter.html The other sites work fine. Is it George's fault or the feed reader's fault?

    Environment

    • OS: Ubuntu 20.04 Desktop
    bug 
    opened by jerzybrzoska 1
  • It can't load DigiTimes' feed

    It can't load DigiTimes' feed

    Description

    tuifeed fails to load DigiTimes news feed

    Steps to reproduce

    Add https://www.digitimes.com/rss/daily.xml feed and run tuifeed

    "DIGITIMES" = "https://www.digitimes.com/rss/daily.xml"
    

    Expected behaviour

    Load the feed and list feed contents.

    Error shown

    tuifeed show the following error

    Could not fetch feed "DIGITIMES": HTTP request failed: https://www.digitimes.com/rss/daily.xml: Connection Failed: An existing
    connection was forcibly closed by the remote host. (os error 10054)
    

    Environment

    • OS: Windows 10 x64
    • Architecture x86_64
    • Rust version: ?
    • tuifeed version: 0.1.0
    bug 
    opened by ealib 1
  • [ImgBot] Optimize images

    [ImgBot] Optimize images

    Beep boop. Your images are optimized!

    Your image file size has been reduced by 20% πŸŽ‰

    Details

    | File | Before | After | Percent reduction | |:--|:--|:--|:--| | /docs/images/tuifeed-256.png | 13.29kb | 9.80kb | 26.31% | | /docs/images/tuifeed-128.png | 6.46kb | 4.81kb | 25.51% | | /docs/images/tuifeed-512.png | 26.92kb | 20.37kb | 24.31% | | /docs/images/tuifeed.svg | 13.72kb | 13.45kb | 1.95% | | | | | | | Total : | 60.39kb | 48.43kb | 19.80% |


    πŸ“ docs | :octocat: repo | πŸ™‹πŸΎ issues | πŸͺ marketplace

    ~Imgbot - Part of Optimole family

    opened by imgbot[bot] 1
  • [ImgBot] Optimize images

    [ImgBot] Optimize images

    Beep boop. Your images are optimized!

    Your image file size has been reduced by 20% πŸŽ‰

    Details

    | File | Before | After | Percent reduction | |:--|:--|:--|:--| | /docs/ui/ui.png | 80.04kb | 38.15kb | 52.34% | | /docs/images/demo.gif | 1,971.71kb | 1,603.76kb | 18.66% | | | | | | | Total : | 2,051.75kb | 1,641.91kb | 19.98% |


    πŸ“ docs | :octocat: repo | πŸ™‹πŸΎ issues | πŸͺ marketplace

    ~Imgbot - Part of Optimole family

    opened by imgbot[bot] 1
  • [Feature Request] - support local rss file

    [Feature Request] - support local rss file

    Description

    tuifeed doesn't support local atom/rss file. It will try to download it with a http client.

    Changes

    Adding a local rss file in the config like this is validated in the config local-rss = "file:///your_path/file.rss" But throw an error when opening tuifeed

    Could not fetch feed "local-rss": HTTP request failed: Bad URL: failed to parse
     URL: EmptyHost: empty host 
    
    opened by Cyrix126 0
  • README fixups: making clearer & plaintext readable

    README fixups: making clearer & plaintext readable

    This README is a bit of a mess in my opinion. It is unreadable as plaintext which doesn’t fit the spirit of a TUI application. It contains a number of markup missuses too.

    • Move to AsciiDoc from Markdown to use less HTML in the document; if unfamiliar it is supported by GitHub, GitLab, Codeberg for automatic document rendering and there is a thorough Writer’s Guide
    • Subtitle as AsciiDoc subtile using :
    • Don’t manually maintain a table of contents when AsciiDoc can do this for you automatically using :toc:
    • Remove target="_blank" as this breaks user agent defaults and hurts accessibility; don’t ruin this for users
    • AsciiDoc image syntax can do width/height without HTML
    • ISO-8601-compatible date to eliminate abiguity and conform to digital standards
    • Remove unnecessary align=centers
    • Use console syntax highlighting for shell sessions, they are not shell scripts
    • Use admonitions properly; do not use <blockquote>s for content that isn’t a quotation; this is incorrect markup (could GitHub do a better job rendering these, absolutelyβ€”and if I could fork GitHub to fix this I would, but it’s a proprietary, closed-source Git forge)
    • Typographically, the rendering of AsciiDoc will properly use the correct apostrophes/quotation marks (e.g. ' β†’ ’) which will look better

    Additional fixes::

    • The config actually is read from $XDG_CONFIG_HOME on Linux
    • The above block is a tip, not a warning/caution
    • Removed some unnecessary intro text in the installation section
    • <hr> no longer felt necessary

    The normal issue template is noisy and irrelevant to this merge request. How I suggest assessing this pull request:

    Compare raw text:: main vs. fork in my repository Compare GitHub's rendering:: main this fork in my repository

    GitHub rendering is listed second because I don't think it's the proper target to optimize for. There are many other good alternative code forges, and people that checkout out this project will likely want it readable in their text editor of choice or even with cat. Personally, for this reason I do not include any more images than strictly necessary (especially CI badges, and on a platform like GitLab, they have a dedicated spot for adding badges to not polluted the README) nor do I include emoji because it doesn't render well in terminals--however these are more subjective to the maintainer.

    The biggest win here IMO is that there is zero embedded HTML now.

    opened by toastal 0
  • Highlight changes

    Highlight changes

    πŸ‘‹πŸ»

    Not sure if this is already possible, or isn't a focus of this tool, but it would be nice if there was a visual aid to help identify new articles published.

    It looks like currently articles are changed daily, so for example if I refresh on a Monday I get all the Monday articles but if I don't get a chance to read them all, on the next day if I refresh the feeds I'll see all the Monday articles get replaced with Tuesday articles.

    If that's ultimately the design philosophy the tool is going for then that's fine, I just wanted to know if it's possible to persist unread articles from a previous day/date and have a way to highlight what I have/haven't read.

    I appreciate open-source is typically a thankless vocation, so I just wanted to say thank you for sharing this tool.

    question 
    opened by Integralist 1
Releases(v0.3.2)
Owner
Christian Visintin
24 years old, software and web developer and geek. I mostly develop in Rust, Elixir and Python.
Christian Visintin
a rust crate for drawing fancy pie charts in the terminal

piechart piechart is a rust crate for drawing fancy pie charts in the terminal. Example usage: use piechart::{Chart, Color, Data}; fn main() { le

Jakob Hellermann 35 Dec 30, 2022
Rust library for regular expressions using "fancy" features like look-around and backreferences

fancy-regex A Rust library for compiling and matching regular expressions. It uses a hybrid regex implementation designed to support a relatively rich

fancy-regex 302 Jan 3, 2023
Lightweight alternative Discord client with a smaller footprint and some fancy extensible features.

Dorion Dorion is an alternative Discord client aimed and lower-spec or storage-sensitive PCs that supports themes, plugins, and more! Table of Content

SpikeHD 20 Jan 2, 2023
A blazingly fast rust-based bionic reader for blazingly fast reading within a terminal console πŸ¦€

This Rust-based CLI tool reads text and returns it back in bionic reading format for blazingly fast loading and even faster reading! Bionic reading is

Ismet Handzic 5 Aug 5, 2023
Configurable, extensible, interactive line reader

linefeed linefeed is a configurable, concurrent, extensible, interactive input reader for Unix terminals and Windows console. API Documentation linefe

Murarth 176 Jan 3, 2023
Rust low-level minimalist APNG writer and PNG reader with just a few dependencies with all possible formats coverage (including HDR).

project Wiki https://github.com/js29a/micro_png/wiki at glance use micro_png::*; fn main() { // load an image let image = read_png("tmp/test.

jacek SQ6KBQ 8 Aug 30, 2023
A terminal ASCII media player. View images, gifs, videos, webcam, YouTube, etc.. directly in the terminal as ASCII art.

Terminal Media Player View images, videos (files or YouTube links), webcam, etc directly in the terminal as ASCII. All images you see below are just m

Max Curzi 36 May 8, 2023
ask.sh: AI terminal assistant that can read and write your terminal directly!

ask.sh: AI terminal assistant that read from & write to your terminal ask.sh is an AI terminal assistant based on OpenAI APIs such as GPT-3.5/4! What'

hmirin 5 Jun 20, 2023
A simple and efficient terminal UI implementation with ratatui.rs for getting quick insights from csv files right on the terminal

CSV-GREP csv-grep is an intuitive TUI application writting with ratatui.rs for reading, viewing and quickly analysing csv files right on the terminal.

Anthony Ezeabasili 16 Mar 10, 2024
:large_orange_diamond: Build beautiful terminal tables with automatic content wrapping

Comfy-table Comfy-table tries to provide utility for building beautiful tables, while being easy to use. Features: Dynamic arrangement of content to a

Arne Beer 525 Jan 8, 2023
πŸ›Ž 60+ Elegant terminal spinners for Rust

Spinners - ?? 60+ Elegant terminal spinners for Rust ❀️ Shameless plug Charts, simple as a URL. No more server-side rendering pain, 1 url = 1 chart Lo

Francois-Guillaume Ribreau 435 Dec 26, 2022
Low-level Rust library for implementing terminal command line interface, like in embedded systems.

Terminal CLI Need to build an interactive command prompt, with commands, properties and with full autocomplete? This is for you. Example, output only

HashMismatch 47 Nov 25, 2022
Rust library for ANSI terminal colours and styles (bold, underline)

rust-ansi-term This is a library for controlling colours and formatting, such as red bold text or blue underlined text, on ANSI terminals. View the Ru

Benjamin Sago 407 Jan 2, 2023
Cross-platform Rust library for coloring and formatting terminal output

Coloring terminal output Documentation term-painter is a cross-platform (i.e. also non-ANSI terminals) Rust library for coloring and formatting termin

Lukas Kalbertodt 75 Jul 28, 2022
create and test the style and formatting of text in your terminal applications

description: create and test the style and formatting of text in your terminal applications docs: https://docs.rs/termstyle termstyle is a library tha

Rett Berg 18 Jul 3, 2021
A dead simple ANSI terminal color painting library for Rust.

yansi A dead simple ANSI terminal color painting library for Rust. use yansi::Paint; print!("{} light, {} light!", Paint::green("Green"), Paint::red(

Sergio Benitez 169 Dec 25, 2022
(Rust) Coloring terminal so simple you already know how to do it !

Colored Coloring terminal so simple, you already know how to do it! "this is blue".blue(); "this is red".red(); "this is red on blue".red(

Thomas Wickham 1.2k Jan 4, 2023
Cross platform terminal library rust

Cross-platform Terminal Manipulation Library Crossterm is a pure-rust, terminal manipulation library that makes it possible to write cross-platform te

crossterm-rs 2.1k Jan 2, 2023
Build terminal user interfaces and dashboards using Rust

tui-rs tui-rs is a Rust library to build rich terminal user interfaces and dashboards. It is heavily inspired by the Javascript library blessed-contri

Florian Dehau 9.3k Jan 4, 2023