Git Product home page Git Product logo

cliflux's Introduction

cliflux

cliflux is a terminal-ui client for the Miniflux self-hosted RSS reader.

There are many good TUI/CLI RSS reader apps, but when I went looking, I couldn't find one that used Miniflux as its source for feeds, read/unread tracking, and "saved" feed entries.

So I built one! And that's what this is.

Screenshots

A screenshot of cliflux showing the "unread entries" list

A screenshot of cliflux showing the "read entry" view

Installation

This package is built in Rust, so if you have that installed, you should be able to just run cargo install cliflux to install it.

Otherwise, grab a build for your OS from the Releases page.

Initial setup

You'll need to supply cliflux with two key pieces of configuration, in a TOML file called config.toml in your OS's standard application-configuration-files directory, which would be....

Linux MacOS Windows
$XDG_CONFIG_DIR/cliflux/ $HOME/Library/Application Support/com.spencerwi.cliflux/ %APPDATA%\Roaming\com\spencerwi\cliflux\

(If you're on another OS and you have suggestions on where to put the config file, please open a PR or a Github issue!)

That TOML file should look like this:

server_url = "your-miniflux-server-url-here-including-port"
api_key = "your-miniflux-api-key-here"
allow_invalid_certs = "false"

You can stub out a default config file by running cliflux --init, which will also tell you where the config file should live.

To generate an API key for your Miniflux account, log into your Miniflux account on your server and go to "Settings" > "API Keys" > "Create a new API key"

Usage

Once you've got your config file in place, just run cliflux and you'll see a list of feed entries fetched from your Miniflux server. Up/down arrows (or k/j for vim delinquents like me) navigate this list, m toggles the read/unread state of the article, r refreshes the list view, and "enter" opens an article for reading, at which point it'll be marked as read.

While reading an article, u will mark it as unread, up/down arrows (or, again, k/j) will scroll up/down, "PageUp" and "PageDown" will scroll faster, o will open the article in your browser, and b will go back to the main list view.

If all that seems like a lot to remember, you can hit ? at any time and get a keyboard reference screen like this:

A screenshot of cliflux showing the keyboard reference screen

License

This software is provided under the MIT License. See LICENSE.md.

cliflux's People

Contributors

dependabot[bot] avatar micielski avatar spencerwi avatar szabgab avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

cliflux's Issues

unresolved import `tuirealm::tui::text::Spans`

What am I doing wrong here? Thank you!

❯ cargo install cliflux
    Updating crates.io index
  Installing cliflux v1.4.1
    Updating crates.io index
   Compiling proc-macro2 v1.0.79
   Compiling unicode-ident v1.0.12
   Compiling libc v0.2.153
   Compiling cfg-if v1.0.0
   Compiling autocfg v1.2.0
   Compiling once_cell v1.19.0
   Compiling parking_lot_core v0.9.9
   Compiling scopeguard v1.2.0
   Compiling smallvec v1.13.2
   Compiling log v0.4.21
   Compiling version_check v0.9.4
   Compiling serde v1.0.197
   Compiling zerocopy v0.7.32
   Compiling memchr v2.7.2
   Compiling itoa v1.0.11
   Compiling allocator-api2 v0.2.16
   Compiling pin-project-lite v0.2.14
   Compiling syn v1.0.109
   Compiling ppv-lite86 v0.2.17
   Compiling pkg-config v0.3.30
   Compiling siphasher v0.3.11
   Compiling vcpkg v0.2.15
   Compiling cc v1.0.90
   Compiling futures-core v0.3.30
   Compiling bytes v1.6.0
   Compiling rustversion v1.0.14
   Compiling bitflags v2.5.0
   Compiling futures-sink v0.3.30
   Compiling signal-hook v0.3.17
   Compiling futures-task v0.3.30
   Compiling equivalent v1.0.1
   Compiling pin-utils v0.1.0
   Compiling ryu v1.0.17
   Compiling new_debug_unreachable v1.0.6
   Compiling futures-io v0.3.30
   Compiling tracing-core v0.1.32
   Compiling regex-syntax v0.8.3
   Compiling foreign-types-shared v0.1.1
   Compiling futures-channel v0.3.30
   Compiling openssl v0.10.64
   Compiling phf_shared v0.10.0
   Compiling fnv v1.0.7
   Compiling mac v0.1.1
   Compiling foreign-types v0.3.2
   Compiling futf v0.1.5
   Compiling heck v0.4.1
   Compiling httparse v1.8.0
   Compiling unicode-width v0.1.11
   Compiling paste v1.0.14
   Compiling tinyvec_macros v0.1.1
   Compiling utf-8 v0.7.6
   Compiling ahash v0.8.11
   Compiling precomputed-hash v0.1.1
   Compiling native-tls v0.2.11
   Compiling tinyvec v1.6.0
   Compiling percent-encoding v2.3.1
   Compiling either v1.10.0
   Compiling phf v0.10.1
   Compiling lock_api v0.4.11
   Compiling slab v0.4.9
   Compiling tendril v0.4.3
   Compiling openssl-probe v0.1.5
   Compiling thiserror v1.0.58
   Compiling try-lock v0.2.5
   Compiling static_assertions v1.1.0
   Compiling form_urlencoded v1.2.1
   Compiling unicode-bidi v0.3.15
   Compiling serde_json v1.0.115
   Compiling tower-service v0.3.2
   Compiling want v0.3.1
   Compiling tracing v0.1.40
   Compiling httpdate v1.0.3
   Compiling aho-corasick v1.1.3
   Compiling itertools v0.12.1
   Compiling http v0.2.12
   Compiling unicode-segmentation v1.11.0
   Compiling indoc v2.0.5
   Compiling cassowary v0.3.0
   Compiling winnow v0.5.40
   Compiling base64 v0.21.7
   Compiling smawk v0.3.2
   Compiling quote v1.0.35
   Compiling unicode-linebreak v0.1.5
   Compiling encoding_rs v0.8.33
   Compiling hashbrown v0.14.3
   Compiling mime v0.3.17
   Compiling sync_wrapper v0.1.2
   Compiling ipnet v2.9.0
   Compiling pathdiff v0.2.1
   Compiling stringreader v0.1.1
   Compiling syn v2.0.58
   Compiling rustls-pemfile v1.0.4
   Compiling textwrap v0.16.1
   Compiling signal-hook-registry v1.4.1
   Compiling getrandom v0.2.12
   Compiling mio v0.8.11
   Compiling num_cpus v1.16.0
   Compiling socket2 v0.5.6
   Compiling dirs-sys v0.3.7
   Compiling castaway v0.2.2
   Compiling open v3.2.0
   Compiling compact_str v0.7.1
   Compiling parking_lot v0.12.1
   Compiling rand_core v0.6.4
   Compiling unicode-normalization v0.1.23
   Compiling directories v4.0.1
   Compiling rand_chacha v0.3.1
   Compiling signal-hook-mio v0.2.3
   Compiling openssl-sys v0.9.102
   Compiling crossterm v0.27.0
   Compiling rand v0.8.5
   Compiling indexmap v2.2.6
   Compiling lru v0.12.3
   Compiling http-body v0.4.6
   Compiling idna v0.5.0
   Compiling regex-automata v0.4.6
   Compiling url v2.5.0
   Compiling phf_generator v0.10.0
   Compiling string_cache_codegen v0.5.2
   Compiling phf_codegen v0.10.0
   Compiling markup5ever v0.11.0
   Compiling regex v1.10.4
   Compiling serde_derive v1.0.197
   Compiling futures-macro v0.3.30
   Compiling tokio-macros v2.2.0
   Compiling openssl-macros v0.1.1
   Compiling strum_macros v0.26.2
   Compiling thiserror-impl v1.0.58
   Compiling lazy-regex-proc_macros v3.1.0
   Compiling html5ever v0.26.0
   Compiling stability v0.1.1
   Compiling tuirealm_derive v1.0.0
   Compiling tokio v1.37.0
   Compiling futures-util v0.3.30
   Compiling lazy-regex v3.1.0
   Compiling strum v0.26.2
   Compiling ratatui v0.26.1
   Compiling tuirealm v1.9.2
   Compiling futures-executor v0.3.30
   Compiling futures v0.3.30
   Compiling tui-realm-stdlib v1.3.2
   Compiling tokio-util v0.7.10
   Compiling tokio-native-tls v0.3.1
   Compiling string_cache v0.8.7
   Compiling serde_spanned v0.6.5
   Compiling toml_datetime v0.6.5
   Compiling serde_urlencoded v0.7.1
   Compiling toml_edit v0.19.15
   Compiling h2 v0.3.26
   Compiling xml5ever v0.17.0
   Compiling html2text v0.5.1
   Compiling toml v0.7.8
   Compiling hyper v0.14.28
   Compiling hyper-tls v0.5.0
   Compiling reqwest v0.11.27
   Compiling cliflux v1.4.1
error[E0432]: unresolved import `tuirealm::tui::text::Spans`
 --> /home/oatman/.cargo/registry/src/index.crates.io-6f17d22bba15001f/cliflux-1.4.1/src/ui/components/read_entry_view.rs:2:178
  |
2 | ...:{Text, Span, Spans}, style::{Style, Modifier, Color}}, command::{Cmd, CmdResult, Di...
  |                  ^^^^^
  |                  |
  |                  no `Spans` in `text`
  |                  help: a similar name exists in the module: `Span`

error[E0061]: this function takes 2 arguments but 1 argument was supplied
   --> /home/oatman/.cargo/registry/src/index.crates.io-6f17d22bba15001f/cliflux-1.4.1/src/ui/components/keyboard_help.rs:51:22
    |
51  |   ...   let widget = Table::new(
    |  ____________________^^^^^^^^^^-
52  | | ...       vec![
53  | | ...           Row::new(vec!["", "Global"]).style(Style::default().add_modifier(Modi...
54  | | ...           Row::new(vec!["", "q", "Quit", ""]),
...   |
82  | | ...       ]
83  | | ...   ).block(
    | |_______- an argument is missing
    |
note: associated function defined here
   --> /home/oatman/.cargo/registry/src/index.crates.io-6f17d22bba15001f/ratatui-0.26.1/src/widgets/table/table.rs:263:12
    |
263 |     pub fn new<R, C>(rows: R, widths: C) -> Self
    |            ^^^
help: provide the argument
    |
51  ~         let widget = Table::new(vec![
52  +                 Row::new(vec!["", "Global"]).style(Style::default().add_modifier(Modifier::BOLD)),
53  +                 Row::new(vec!["", "q", "Quit", ""]),
54  +                 Row::new(vec!["", "?", "Show keyboard help", ""]),
55  +                 Row::new(vec![""]),
56  +
57  +                 Row::new(vec!["", "Unread/Starred Entries view"]).style(Style::default().add_modifier(Modifier::BOLD)),
58  +                 Row::new(vec!["", "j", "Scroll down"]),
59  +                 Row::new(vec!["", "Down arrow", "Scroll down"]),
60  +                 Row::new(vec!["", "k", "Scroll up"]),
61  +                 Row::new(vec!["", "Up arrow", "Scroll up"]),
62  +                 Row::new(vec!["", "m", "Mark as read/unread"]),
63  +                 Row::new(vec!["", "s", "Toggle starred"]),
64  +                 Row::new(vec!["", "Enter", "Read entry"]),
65  +                 Row::new(vec!["", "v", "Swap view (Unread Entries/Starred Entries)"]),
66  +                 Row::new(vec![""]),
67  +
68  +                 Row::new(vec!["", "Read entry view"]).style(Style::default().add_modifier(Modifier::BOLD)),
69  +                 Row::new(vec!["", "j", "Scroll down"]),
70  +                 Row::new(vec!["", "Down arrow", "Scroll down"]),
71  +                 Row::new(vec!["", "k", "Scroll up"]),
72  +                 Row::new(vec!["", "Up arrow", "Scroll up"]),
73  +                 Row::new(vec!["", "u", "Mark as unread"]),
74  +                 Row::new(vec!["", "s", "Toggle starred"]),
75  +                 Row::new(vec!["", "o", "Open in browser"]),
76  +                 Row::new(vec!["", "b", "Back to Unread Entries view"]),
77  +                 Row::new(vec![""]),
78  +
79  +                 Row::new(vec!["", "Keyboard help view"]).style(Style::default().add_modifier(Modifier::BOLD)),
80  +                 Row::new(vec!["", "Esc", "Close keyboard help"]),
81  ~             ], /* widths */).block(
    |

Some errors have detailed explanations: E0061, E0432.
For more information about an error, try `rustc --explain E0061`.
error: could not compile `cliflux` (bin "cliflux") due to 2 previous errors
error: failed to compile `cliflux v1.4.1`, intermediate artifacts can be found at `/tmp/cargo-installuETcWm`.
To reuse those artifacts with a future compilation, set the environment variable `CARGO_TARGET_DIR` to that path.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.