My university studies are accompanied with a lot of academic and technical writing, and managing sources and references has always been hard. How do you avoid file duplication when working on multiple projects with some of the sources shared between them? What about BibTeX references?
Since Oct 2021, I've been thinking about addressing all of those in the most unopinionated way: other book and bibliography managers just weren't the right fit. I didn't want to use the embedded viewers, or manage books and articles separately. That's where bookshelf should come in.
Approach
At the time of writing, the future functionality is planned to be based on tags. I have discovered Taskwarrior recently, and really liked their approach at filtering different tasks.
Want an article to be associated with a project you are writing? Add a
'project:Architecture' tag; then, to get all articles and books for that
project, filter the bookshelf entries by this tag. bookshelf
will also have
the ability to export all references for the project as a single BibTeX file
to use in TeX/LaTeX.
Ideally, it would also be possible to rearrange the files locally in a nice hierarchy based on projects/genres/authors/etc. All of this is under way - a lot of things have to be considered to get it just right.
UI
I'd love to make bookshelf
as UI-agnostic as possible. At the moment,
a CLI and a TUI are being developed along with the core library.
CLI
The bookshelf
is the primary way to interact with your library.
Add a new entry by its path:
$ bookshelf add ~/Books/LFS-BOOK-11.0.pdf
Successfully added '9 - LFS-BOOK-11.0.pdf'
List all of the entries on your bookshelf:
$ bookshelf list
...
9 - LFS-BOOK-11.0.pdf
And operate on them by the indexes associated with them:
$ bookshelf open 9
Successfully opened '9 - LFS-BOOK-11.0.pdf'
$ bookshelf remove 9
Successfully removed '9 - LFS-BOOK-11.0.pdf'
TUI
This is me reading Uncle Bob's "Clean Architecture" and contemplating life choices (Rust doesn't support inheritance, hence it's hard to employ the Dependency Inversion principle).