8.8 KiB
cadmus
Shell Scripts to Facilitate Effective Note Taking
Introduction
Essentially I used to have a dozen shell scripts in ~/bin
that I use to capture notes,
this is an attempt to wrap them into a single script and then have aliases to make them quick to access.
Philosophy
-
cadmus acts as a menu for scripts to acheive things
- the script name will always be printed to the terminal so the individual script can be used for whatever purpose.
-
SubFunctions will take only one argument or
STDIN
- If the first argument is either
-h
or--help
help will be printed and thenexit 0
- This might lead to some limitations but the simplicity is for sanity, modularity and extensibility.
- Will always return absolute path.
- I played around with relative path but it got confusing when calling the script from inside a function inside a script, so instead if you want a relative path you should do
scriptname './' | xargs realpath --relative-to='./'
- I played around with relative path but it got confusing when calling the script from inside a function inside a script, so instead if you want a relative path you should do
- If the first argument is either
-
cadmus will take the notes directory from the global variable
CADMUS_NOTES_DIR
- The Actual work will be done by subscripts denoted by
description.bash
- The subscripts will take the note directory as an argument so they are portable and modular
- The Arguments will be shifted and then all passed down to subfunctions
- I'll just need to be careful that loose arguments aren't dangerous
- The Actual work will be done by subscripts denoted by
-
Be a Front end to tie together different scripts and tools
-
Don't replicate work other people have done.
-
Plain Text, Open Source.
-
Be Modular
- Pipe in input, output goes to STDOUT
- Leave Aliases and piping to the user
Installation
To install:
-
satisfy the dependencies
-
add
$HOME/bin
to the$PATH
variable, something like this should be fairly shell agnostic:echo $PATH | grep "$HOME/bin" &> /dev/null && echo "$HOME/bin in path already" || ls "$HOME/bin" &> /dev/null && echo 'PATH="$PATH:$HOME/bin"' >> $HOME/.profile
-
Copy the help files to
/usr/share/cadmus
-
Copy in the scripts, with stow something like this should be sensible:
exec bash cd ~/DotFiles if [[ -d ".git" ]]; then echo "Adding Submodule"; git submodule add https://github.com/RyanGreenup/cadmus else echo "Cloning Repository"; git clone https://github.com/RyanGreenup/cadmus fi stow -t $HOME -S cadmus
⚠️ WARNING |
---|
Stow is currently broken on Arch If you are using Stow 2.3.1-2 downgrade |
Downgrade with: sudo pacman -U https://archive.archlinux.org/packages/s/stow/stow-2.2.2-5-any.pkg.tar.xz
Configuring recoll
Currently the search just uses the default recoll config, I intend to modify this to use ~/.cadmus
as a config directory so as to not interfere with the default config but it isn't in practice an issue because you can just modify the sk
in ..cadmus.. to start the call with ~/Notes/MD
.
Usage
It's all Menu driven so just follow the diagram to do what you need.
Assumptions
It is assumed that:
- notes are:
- Markdown files with a
.md
extension - Underneath
~/Notes
- Recoll updates it's index on the fly
~/Notes
will need to be indexed by Recoll so the results will show up.
- Markdown files with a
- You're going to use Kitty
- You could either change the source or use anoter terminal that supports
calling functions with
--
, e.g.kitty -- nvim
- You could either change the source or use anoter terminal that supports
calling functions with
- SSD
- I use an SSD and some scripts are pretty inefficient (like
grep | cut | xargs find
to avoid creating a variable), I don't know if things like would work on a HDD.
- I use an SSD and some scripts are pretty inefficient (like
- SystemD
- or atleast have
tmpfs
mounted at/dev/shm
(See the Arch Wiki: tmpfs) 1
- or atleast have
- All Notes have Unique Names
- I use Fish and Oh My Fish (OMF) as my default shell, this means
basename $SHELL
isfish
for me and even though this is written inbash
maybe that could cause issues.- Try Fish for a while, it's quite good, when you need to test something
it's easy to temporarily jump back with
exec zsh
. - This should only matter for
cadmus find
where the use of Fish mmeans that results can be highlighted, I cannot get this to work withbash
orzsh
and I don't know why.- I wonder if this would work for nushell???
- On MacOS you'll need to define
xdg-open
so something like:alias xdg-open='open &>/dev/null'
- Try Fish for a while, it's quite good, when you need to test something
it's easy to temporarily jump back with
Dependencies
- R
- highlight
- recode
- node
- nvim
- fzf
- code
- sk
- rg
- perl
- stow
- python
- tmsuAUR
- ranger
- mdcatAUR
- xclip
- sd
- fd
- sed
- cut
- grep
- find
- GNU realpath
- Recoll
- MkDocs
- VNote
- Pandoc
- MarkText
- mdless and imgcat
Recommended Aliases
TODO
Related
MDCat vs Bat
MdCat looks better and supports images, unfourtunately the preview fails when files have footnotes and for this reason bat was used (bat is also in the Arch repos and supports more file types)
-
From Wikipedia Recent 2.6 Linux kernel builds have started to offer /dev/shm as shared memory in the form of a ramdisk, more specifically as a world-writable directory that is stored in memory with a defined limit in /etc/default/tmpfs. /dev/shm support is completely optional within the kernel config file. ↩︎