Coder Social home page Coder Social logo

cadmus's Introduction

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.

The idea is that it is just a menu to dispatch different scripts so I could share those scripts with classmates.

Design Philosophy

  • cadmus acts as a menu for scripts to acheive things
    • the script name will should always be printed to the terminal so the individual script can be repurposed with out fishing through code.
  • Subscripts will should 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='./'
  • 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
  • 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

Installation

To install:

  1. satisfy the dependencies

  2. Set up Recoll

  3. Download cadmus and put it in the PATH

    mkdir ~/.cadmus && \
    git 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

Recommended for all Features

recommended / Interesting / Helpful packages not required

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

Recommended Aliases

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

Related

cadmus's People

Contributors

ryangreenup avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.