Skip to content

Ikken9/basalt

 
 

Repository files navigation

Basalt  

TUI Application to manage Obsidian notes    


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.

Install basalt using cargo:

cargo install basalt-tui

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)
    • Do not run test when pushing a tag
    • Run vhs when basalt dir changes and commit it to the current PR
  • Add mdbook and gh pages
  • 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.

There's a useful pre-push git-hook under scripts, which you can enable by running the following command:

cp scripts/pre-push .git/hooks/

The script runs the same test commands as in the test.yml workflow.

About

TUI Application to manage Obsidian notes directly from the terminal

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Rust 99.8%
  • Shell 0.2%