From 6d071f79e5bd623857ebf3766a1cedf256a39fc4 Mon Sep 17 00:00:00 2001 From: Scott Shipp Date: Mon, 4 Oct 2021 11:43:08 -0700 Subject: [PATCH] Initial commit - Add noted script - Add README - Add .gitignore --- .gitignore | 1 + README.md | 207 +++++++++++++++++++++++++++++++++++++++- example-notes-page.jpeg | Bin 0 -> 48902 bytes example-notes-page.md | 43 +++++++++ nice-diagram.png | Bin 0 -> 26827 bytes noted | 159 ++++++++++++++++++++++++++++++ subcommands.md | 186 ++++++++++++++++++++++++++++++++++++ 7 files changed, 595 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 example-notes-page.jpeg create mode 100644 example-notes-page.md create mode 100644 nice-diagram.png create mode 100755 noted create mode 100644 subcommands.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..485dee6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.idea diff --git a/README.md b/README.md index 87774e6..a377ce5 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,207 @@ # noted -Powerful CLI for taking markdown notes in a journal-like (time-seried) fashion + +_Lightweight CLI for taking markdown notes in a journal-like (time-seried) fashion on macOS._ + +## Contents + +- [Features](#features) +- [Getting Started](#getting-started) + * [Required steps](#required-steps) + * [Optional steps](#optional-steps) +- [Typical usage](#typical-usage) +- [Subcommand reference](#subcommand-reference) +- [Configuration guide](#configuration-guide) + * [Default values](#default-values) + * [Configuring custom values](#configuring-custom-values) + * [Custom template file](#custom-template-file) +- [Recommended aliases](#recommended-aliases) + +## Features + +_Noted_ can do the following and more: + +- Automatically create a markdown file for you, named with today's date (in a customizable date format) +- Append note entries from the command line automatically, formatted with a Markdown template you can customize +- Timestamp all entries with a customizable timestamp format +- Quickly open the notes from any given date for you to view or edit +- Work with any text editor, with no interference between `noted` and the editor + +## Getting Started + +### Required steps + +Getting started with _Noted_ only requires that `noted` is placed on your path. + +A good standard way to do this is to symlink the `noted` script to `/usr/local/bin` as follows. + +1. Open a terminal. +2. Change to your `Documents` directory. + +```shell +cd $HOME/Documents +``` + +3. Clone this repository to your Documents folder. + +```shell +git clone git@github.com:scottashipp/noted.git -C $HOME/Documents +``` + +4. Symlink the file: + +```shell +ln -s $HOME/Documents/noted/noted /usr/local/bin/noted +``` + +6. Verify that it is visible on the path: + +```shell +noted version +``` + +If the above outputs `noted v0.0.1` then all is well. Check out the [Typical usage](#typical-usage) section below to take your first notes! + +### Optional steps + +You may want to follow the [configuration guide](#configuration-guide) if you do not like the defaults. + +## Typical usage + +You're a developer. It's 8am and you start work on a new project. From your terminal, you type: + +```shell +noted 'Begin creating Foo' +``` + +A new Markdown file is automatically created with today's date in your configured directory. + +> Note: The default directory is $HOME/Documents/noted. It will be created for you if it doesn't exist. + +Second, `noted` also creates the following _automatic entry:_ + +```markdown +--- +8:00:44 UTC + +# Begin creating Foo + +--- +``` + +At 9am, you have a meeting with the Foo team. You type `noted` in your terminal to start a new note. Your default editor opens to today's file, the template is +automatically appended to the end, and it is timestamped for you. You use this entry to take notes during your meeting, which include links, images, and code. + +Later, you start work again, and note this: + +```shell +noted 'Working on foo again.' +``` + +You're trying to remember what your team talked about in last week's meeting, so you view the notes for that day: + +```shell +noted view 2021-09-27 +``` + +This opens the file from that date with your default editor. + +After a bit, you open a pull request for Foo. You type: + +```shell +noted +``` + +This automatically opens today's file in your default editor, and appends a new entry using the template. In the resulting new entry, you record the link to the +PR. + +The rest of the day goes similarly. At the end of the day, you check in your notes to Git. + +Your notes page, when viewed as HTML looks [just like this](example-notes-page.md): + +![](example-notes-page.jpeg) + +You now have a source-controlled, time-seried journal of events. Most importantly, these notes look great and include links, snippets of code, and images. + +## Subcommand reference + +_Noted_ works like many other CLI's, through the use of subcommands. It currently supports config, create, edit, version, and view. These are fully-specified in +the [subcommand reference](subcommands.md) + +## Configuration guide + +### Default values + +The following default values are configured. + +| Property | Description | Default Value | +| :-- | :-- | :-- | +| NOTED_MARKDOWN_HOME | The place where markdown files are automatically generated. | `$HOME/Documents/noted` | +| NOTED_FILE_NAME_DATE_FORMAT | The date format string used as the file name for new notes. | `"+%Y-%m-%d"` | +| NOTED_TIMESTAMP_FORMAT | The timestamp format for the timestamp placed on new entries. | `"+%H:%M:%S UTC"` | +| NOTED_TEMPLATE_FILE | A file containing a Markdown-formatted entry template to use. | `""`
(It is empty by default. Which means the script's own default template will be used.) | + +### Configuring custom values + +To configure custom values, you may place a `.notedconfig` file in your `$HOME` directory. + +For example, saving the following contents into `$HOME/.notedconfig` will alter the behavior of `noted` accordingly: + +```text +# Save my notes here instead +NOTED_MARKDOWN_HOME=$HOME/Documents/mynotes +# Use month-date-year instead of year-month-date as the file names +NOTED_FILE_NAME_DATE_FORMAT="+%m-%d-%Y" +# Use Pacific time +NOTED_TIMESTAMP_FORMAT="+%H:%M:%S Pacific" +# Use my own template file +NOTED_TEMPLATE_FILE=$HOME/Documents/mynotes/template.md +``` + +Both the `NOTED_FILE_NAME_DATE_FORMAT` and the `NOTED_TIMESTAMP_FORMAT` are format strings as specified by the `date` shell command. You can learn more about +this format by reading the man page for `date`. + +### Custom template file + +_Noted_ templates only support the variables `TIMESTAMP` and `HEADERTEXT`. + +`TIMESTAMP` is replaced with the output of `date` as formatted by `NOTED_TIMESTAMP_FORMAT`. + +'HEADERTEXT' is the value of any argument passed to `noted` when quick-creating a note. Place it in your template so that this value is output. + +By default, `noted` uses the following template: + +```markdown +--- +TIMESTAMP + +# HEADERTEXT + +--- +``` + +Another valid custom template might be: + +```markdown +# HEADERTEXT + +_TIMESTAMP_ + + +``` + +## Recommended aliases + +Besides supplying a custom configuration, you probably want to add the following aliases to make using `noted` even easier: + +| Alias | Description | +| :-- | :-- | +| n | Alias for `noted` itself. | +| ne | Alias for `noted edit`. | +| nv | Alias for `noted version`. | +| nc | Alias for `noted config`. | + +## Usage with a static site generator + +Some people may prefer to use `noted` with a static site generator like [mkdocs](https://www.mkdocs.org) +, [Maven site](https://maven.apache.org/plugins/maven-site-plugin/), or [Hugo](https://gohugo.io/). Those are just a few examples. Doing so will allow you to +view your notes in HTML format locally. \ No newline at end of file diff --git a/example-notes-page.jpeg b/example-notes-page.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..cab4f86beede1ee3522c3c63cc35855794ae0e1a GIT binary patch literal 48902 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 gnggW-JhPOT*qG|}y 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

-G`zG9**G)&5Oa+ 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 c)t%&c!S8>5AalS-7#_gj^^A0Lb>"${markdownFile}" + else + # otherwise open it up with the template and let them edit + newEntry >>"${markdownFile}" + edit "${markdownFile}" + fi +} + +edit() { + open "${markdownFile}" +} + +loadProperties() { + if [[ -f "${CONFIG_FILE}" ]]; then + source "${CONFIG_FILE}" + fi +} + +markdownFile() { + markdownFile="${NOTED_MARKDOWN_HOME}/${1}.md" +} + +outputConfig() { + echo "The following configuration is currently being used:" + echo "NOTED_MARKDOWN_HOME=${NOTED_MARKDOWN_HOME}" + echo "NOTED_FILE_NAME_DATE_FORMAT=${NOTED_FILE_NAME_DATE_FORMAT}" + echo "NOTED_TIMESTAMP_FORMAT=${NOTED_TIMESTAMP_FORMAT}" + echo "NOTED_TEMPLATE_FILE=${NOTED_TEMPLATE_FILE:-<>}" +} + +validate() { + if [ -z "$1" ]; then + echo "${2}" + exit 1 + fi +} + +version() { + echo "noted v${VERSION}" +} + +view() { + open "${htmlFile}" +} + +# +# END FUNCTIONS +# + +VERSION="0.0.1" + +# +# Default Settings +# +# Settings that cannot be overridden +# Location of config file +CONFIG_FILE=$HOME/.notedconfig + +# Settings that can be overridden from properties +# name files like this +NOTED_FILE_NAME_DATE_FORMAT="+%Y-%m-%d" +# timestamp entries within the files like this +NOTED_TIMESTAMP_FORMAT="+%H:%M:%S UTC" +NOTED_TEMPLATE_FILE="" +# keep the directory where notes are stored here +NOTED_MARKDOWN_HOME=$HOME/Documents/notes + +# +# Override with any additional settings +# +loadProperties + +currDate=$(date "${NOTED_FILE_NAME_DATE_FORMAT}") +timestamp=$(date "${NOTED_TIMESTAMP_FORMAT}") + +todaysFile="${NOTED_MARKDOWN_HOME}/${currDate}.md" + +subcommand="$1" +if [[ "${subcommand}" == "config" ]]; then + outputConfig +elif [[ "${subcommand}" == "version" ]]; then + version +elif [[ "${subcommand}" == "edit" ]] || [[ "${subcommand}" == "view" ]]; then + arg="$2" + if [[ -z "${arg}" ]]; then + arg="${currDate}" + fi + markdownFile "${arg}" + edit "${markdownFile}" +else + # create / default + OPTIONAL_FILE="" + OPTIONAL_NOTE="" + if [[ "${subcommand}" == "create" ]]; then + shift + fi + if [[ -n "$1" ]]; then + OPTIONAL_NOTE="$1" + fi + if [[ -n "$2" ]]; then + OPTIONAL_FILE="$2" + fi + create "${OPTIONAL_NOTE}" "${OPTIONAL_FILE}" +fi diff --git a/subcommands.md b/subcommands.md new file mode 100644 index 0000000..b97d146 --- /dev/null +++ b/subcommands.md @@ -0,0 +1,186 @@ +# Subcommand reference + +All uses of `noted` require a subcommand. If one is not supplied, the default `create` subcommand is assumed. The subcommands are as follows. + +## Contents + +* [List of Subcommands](#list-of-subcommands) + + [config](#config) + - [Synopsis](#synopsis) + - [Overview](#overview) + - [Arguments & Flags](#arguments---flags) + - [Examples](#examples) + + [create](#create) + - [Synopsis](#synopsis-1) + - [Overview](#overview-1) + - [Arguments & Flags](#arguments---flags-1) + - [Examples](#examples-1) + + [edit / view](#edit---view) + - [Synopsis](#synopsis-2) + - [Overview](#overview-2) + - [Arguments & Flags](#arguments---flags-2) + - [Examples](#examples-2) + + [version](#version) + - [Synopsis](#synopsis-3) + - [Overview](#overview-3) + - [Arguments & Flags](#arguments---flags-3) + - [Examples](#examples-3) + +## List of Subcommands + +### config + +Lists the current configuration for _noted_. This is the combination of default values plus whatever is found in `$HOME/.notedconfig`, where values +in `$HOME/.notedconfig` take precedence. + +#### Synopsis + +```shell +noted config +``` + +#### Overview + +The config subcommand will: + +- Generate a quick view of the resulting configuration after applying the values in `$HOME/.notedconfig` + +#### Arguments & Flags + +N/A + +#### Examples + +View configuration: + +```shell +noted config +``` + +### create + +Create a new note. + +#### Synopsis + +```shell +noted create [Quoted text to use (optional)] [ALTERNATE_FILE_NAME (optional)] +``` + +#### Overview + +The create subcommand will: + +- Look for a file named with today's date, and create it if it doesn't exist +- Append the note template to the file named with today's date, with the current timestamp +- Open the file named with today's date +- Position the cursor in the entry title field + +> **Important:** +> +> We encourage users to omit `create` and use the alternate shorthand `noted` without the create keyword. The remainder +> of this documentation will use the shorthand. + +#### Arguments & Flags + +Both arguments are optional. When quoted text is included the text will automatically be appended to the entry and editing of the entry will be skipped. When +the `ALTERNATE_FILE_NAME` argument is supplied with a filename, then instead of using the automatic file (named with today's date), the file supplied will be +used. + +#### Examples + +Start a new entry: + +```shell +noted +``` + +Add a new note with the text "This is a quick note" as the title and an empty body: + +```shell +noted "This is a quick note" +``` + +Start a new entry in the file named `process.md`: + +```shell +noted 'Some note' process.md +``` + +### edit / view + +Open a specific note file, or today's file if no file is specified, in the default editor. + +#### Synopsis + +```shell +noted edit [FILE (optional)] +``` + +```shell +noted view [FILE (optional)] +``` + +#### Overview + +Edit and view are interchangeable. + +The edit / view subcommand will: + +- Look for the file passed as an argument +- If no file is passed, then it will assume today's file +- Open the given file in the default editor + +> NOTE: +> Edit is different than create. Create will also populate a new note entry into the given file using the template. +> Edit, on the other hand, will merely open the file. + +#### Arguments & Flags + +The `FILE` argument is optional. You should not include the extension. The Markdown extension `.md` is assumed. + +#### Examples + +Open today's file in the default editor. + +```shell +noted edit +``` + +Open the file from 2021-10-01: + +```shell +noted edit 2021-10-01 +``` + +Open a file named `process.md`: + +```shell +noted view process +``` + +### version + +View the current version of `noted`. + +#### Synopsis + +```shell +noted version +``` + +#### Overview + +The version subcommand will print out the current version of `noted`. + +#### Arguments & Flags + +N/A + +#### Examples + +View the version: + +```shell +noted version +```