1
0
mirror of https://github.com/RyanGreenup/cadmus.git synced 2025-02-17 11:24:36 +01:00
Ryan Greenup e3053afc6d Path Move
2020-07-17 04:31:13 +10:00

9.9 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 then exit 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='./'
  • 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
  • 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:

  1. satisfy the dependencies

  2. Set up Recoll

  3. Download cadmus and put it in the PATH

    mkdir ~/.cadmus && \
    clone https://github.com/RyanGreenup/cadmus ~/.cadmus  \
    || echo "Delete ~/.cadmus first"
    ln -s ~/.cadmus/bin/cadmus $HOME/bin/
    
    1. If you haven't already 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
      
      
  4. You will probably need to change the directory to your notes in the script:

    which cadmus | xargs xdg-open
    
    readonly NOTES_DIR="$HOME/Notes/"
    readonly SERVER_DIR="/var/www/html/MD"
    readonly MKDOCS_YML="$HOME/Notes/mkdocs.yml" 
    

-->

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.

It isn't in practice an issue if ~/.recoll is indexing more than the notes because you can just modify the call to Skim (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.

Mindmap of Program Flow

Assumptions

It is assumed that:

  1. Notes are:
    1. Markdown files with a .md extension
    2. Underneath ~/Notes (you ma)
    3. Recoll updates it's index on the fly
      • ~/Notes will need to be indexed by Recoll so the results will show up.
  2. 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.
  3. All Notes have Unique Names
  4. On MacOS you'll need to define xdg-open so do something like:
alias xdg-open='open &>/dev/null' 

Dependencies

PATH

If installed with pip or cargo it will be necessary to add these directories to your PATH:

## bash
echo '
export PATH="$HOME/.local/bin:$PATH"
export PATH="$HOME/.cargo/bin:$PATH"
' >> ~/.bashrc

## zsh
echo '
export PATH="$HOME/.local/bin:$PATH"
export PATH="$HOME/.cargo/bin:$PATH"
' >> ~/.bashrc

## fish

echo '
set PATH $HOME/.local/bin $PATH
set PATH $HOME/bin $PATH
set PATH "$HOME/.cargo/bin $PATH
' >> ~/.config/fish/config.fish

I wrote all this with aliases in mind, when I settle on some aliases i'll put up my fish functions. (I also wanted to do some autocomplete.)