1
0
mirror of https://github.com/RyanGreenup/cadmus.git synced 2025-02-17 11:24:36 +01:00
2020-07-16 05:37:29 +10:00

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 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. 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. Copy the help files to /usr/share/cadmus

  5. 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.

Mindmap of Program Flow

Assumptions

It is assumed that:

  1. notes are:
    1. Markdown files with a .md extension
    2. Underneath ~/Notes
    3. Recoll updates it's index on the fly
      • ~/Notes will need to be indexed by Recoll so the results will show up.
  2. 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
  3. 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.
  4. SystemD
  5. All Notes have Unique Names
  6. I use Fish and Oh My Fish (OMF) as my default shell, this means basename $SHELL is fish for me and even though this is written in bash 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 with bash or zsh 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' 
      

Dependencies

TODO

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)


  1. 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. ↩︎