joakim 7c97440366 fix: use PersistentPreRun instead of OnInitialize for proper command isolation
Replace cobra.OnInitialize with PersistentPreRun pattern to fix initialization
issues with setup and server commands. This follows Cobra best practices and
allows subcommands to properly override initialization behavior.

Problem:
- OnInitialize runs globally before command parsing
- os.Args check for 'setup' was fragile and broke with flags
- Setup wizard failed on server: 'unable to open database file: no such file
  or directory'

Solution:
- Use rootCmd.PersistentPreRun for initialization (inherited by all commands)
- setup and server commands override with their own PersistentPreRun
- Directory overrides still applied correctly in all cases
- Removes fragile os.Args parsing

Benefits:
- Works regardless of flag order
- Follows Cobra's intended design patterns
- Only 3 files modified (root.go, setup.go, server.go)
- Commands that need custom init (setup/server) simply override
- All other commands get automatic initialization
- Cleaner, more maintainable code

Testing:
- ✓ opal setup works without initialization errors
- ✓ opal list initializes database correctly
- ✓ First-run detection still works
- ✓ Directory overrides work with flags in any position
- ✓ Server command handles its own initialization
2026-01-06 22:18:09 +01:00
2026-01-01 21:54:36 +01:00

Notr

Simple Go application for organizing and referencing notes. Loosely based on Obsidian.

Implementation: See jade-depo/ directory for the CLI tool.

Workflow

I take notes in two primary ways:

Phone

  • Quick notes, on the go.
  • View and search notes.

Workstation

  • Using NeoVim for notetaking

Other infrastructure

  • I host a VPS with a Nextcloud and Gitea instances.

What I want

  • A Obsidian Vault like structure. A folder where notes live.
  • A file is a note
  • Can also store attachments, such as images. These files can then be referenced in the relevant notes.
  • Directories is the main organization method, although tags and links can seam-lesly cross directories boundries.
  • Markdown syntax (this can be handled by NeoVim and a markdown editor on other devices.)
  • Tags: Syntax +tag
  • Note links for referencing other notes or any other vault files. Syntax uncertain. Obsidian uses ?
  • See reports about the vault. Tag report
  • At some point I would like to have a web-app and host it on my server. This would integrate with my authentik service for auth, and would be a live view of a users vault
  • OCR would be great.

Implementation

I have a tendency to scope creep and never actually getting a usable product, so an important goal here is practicing getting a usable app up and running. This should not have to be the biggest project, so I'll try to predict the process:

Version 0.1

Here I use other tools for the note-taking and accept that any searching is on a directory basis only.

  • I create a directory in Nextcloud. This I will start using immediately.
  • Find a good Markdown editor for android.
  • Adopt any crutial Obsidian notes

Version 1.0 ✓

This is where I can use Notr to find and search notes on my workstation. CLI implementation complete!

  • Process notes. Metadata and diffs
  • Search and Filter by tags
  • Search and Filter by content
  • Add, edit, delete notes
  • List all notes and tags

Version 2.0

Here I can do the same on my phone.

Also:

  • OCR

Metadata approach

Multiple approaches possible.

S
Description
Personal productivity tools
Readme 999 KiB
Languages
Go 75.3%
Svelte 17.5%
JavaScript 5.3%
CSS 1.2%
HTML 0.4%
Other 0.3%