basalt-tui 0.3.0

Basalt TUI application for Obsidian notes.
basalt-tui-0.3.0 is not a library.
Visit the last successful build: basalt-tui-0.12.4

TUI Application to manage Obsidian vaults and notes directly from the terminal ✨.

Installation

For now unfortunately, you have to compile this binary yourself, if you want to run basalt. The next thing I'll be doing is adding a GitHub workflow to produce cross-platform binaries.

Background

This is something that has been brewing in my head for quite some time. There has been different incarnations over the years, however, nothing as substantial as this.

I have been using Neovim and the official Obsidian app. However, I wanted to have something dedicated that offers the same writing experience as Neovim, but has more WYSIWYG experience as in the official Obsidian app. I'm fully aware of (obsidian.nvim)[https://github.com/epwalsh/obsidian.nvim], which many people use and find more than sufficient. However, I want to see images, beautified text, note graphs, etc. I want it to be a bit more.

The problem for me personally is that when I leave the terminal, my flow breaks, especially if I'm writing. Using an entirely different app disrupts that flow, and it annoys me. So here I am, building a TUI for Obsidian.

The goal of basalt is not to replace the Obsidian app. Basalt is to fill and cater for a need to have a terminal view to the selection of notes and vaults, providing quick access from anywhere in the terminal with a simple command.

Keybindings

For now these are not configurable, but this will change when the configuration file is supported.

q Quit the application

? Show help

t Toggle side panel visibility and select mode

k Move selection up

j Move selection down

↑ / ↓ Scroll selected up / down

↩ Enter Select the highlighted note

Space Toggle vault selector modal

Ctrl-u Scroll up half a page

Ctrl-d Scroll down half a page

Task List

  • Add rudimentary support for markdown rendering
  • Add Sidepanel for note selection in vault
  • Add bottom information bar that shows the current mode Select, Normal, Insert and statistics for words and characters
  • Add help modal / popup with ?
  • Add vault selection screen with basalt logo (Splash screen)
  • Add vault selector modal
  • GitHub Workflows !
    • Run tests and build
    • Run create release artifacts (cross-platform binaries)
    • Run vhs when basalt dir changes and commit it to the current PR
  • Async file loading (tokio)
  • Persistent scroll state in help modal
  • Fuzzy search in panes (note, sidepanel, modals)
  • Markdown rendering
    • Add support to all markdown nodes
    • Add text formatting to different styles like Fraktur and DoubleStruck for heading purposes
    • Improve and fix codeblock rendering so it appears as a 'block'
    • Support complete Obsidian Flavor
    • Add image rendering support
  • Note tree
    • Create new note under vault
    • Collapsible folders
    • Notes within Folders in vault
    • Move note
    • Rename note
    • Delete note under vault (with confirmation modal)
  • Editor mode
    • Editor mode should change to raw text where cursor is. Only changes the current markdown node. Text is inserted node by node.
    • Edit and save notes
    • Support some vim keybindings to get started (vim mode should be configurable option)
    • Easy text yanking
  • Command bar
    • Add ability to invoke command bar with :
    • Add commands for saving :w and quitting :q
    • Switch between scrollbar and paging using a command :set scroll or :set paging. Paging will only fit the content it can within the height of the rect and generate pages accordingly.
  • Configuration file (.basalt.toml)
    • Add rudimentary config file and move keybinds to the file
  • Wrap lines with prefix (calculate width and add length of prefix)
  • Easy backups with Git (Config, (git2-rs)[https://github.com/rust-lang/git2-rs])
  • Integration tests using https://core.tcl-lang.org/expect/index
  • When creating a link show autocomplete tooltip list of potential files to link to
  • Add features to basalt-core and basalt-widgets. Default feature set and individual features.
  • Clickable checkboxes

I want to help

I haven't yet had the chance to add a contributors' guide. If you would like to help, please feel free to create a pull request directly. At this stage, opening a separate issue is not required unless you would like to start a discussion first.

Please note that this process may change in the future. The expected contribution flow will likely become: Create issue → Create pull request.