{"id":13521379,"url":"https://github.com/nickjj/notes","last_synced_at":"2025-06-15T05:08:56.050Z","repository":{"id":54247155,"uuid":"230101779","full_name":"nickjj/notes","owner":"nickjj","description":"A zero dependency shell script that makes it really simple to manage your text notes.","archived":false,"fork":false,"pushed_at":"2024-12-07T18:40:23.000Z","size":19,"stargazers_count":139,"open_issues_count":1,"forks_count":25,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-06-14T17:55:39.015Z","etag":null,"topics":["note-taking","notes","shell","shell-script"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nickjj.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-12-25T12:45:17.000Z","updated_at":"2025-05-03T06:04:29.000Z","dependencies_parsed_at":"2024-11-02T05:31:40.216Z","dependency_job_id":"c428bd9b-2152-4b48-9540-41533c6c0c75","html_url":"https://github.com/nickjj/notes","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/nickjj/notes","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickjj%2Fnotes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickjj%2Fnotes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickjj%2Fnotes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickjj%2Fnotes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nickjj","download_url":"https://codeload.github.com/nickjj/notes/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickjj%2Fnotes/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259924697,"owners_count":22932786,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["note-taking","notes","shell","shell-script"],"created_at":"2024-08-01T06:00:33.632Z","updated_at":"2025-06-15T05:08:56.030Z","avatar_url":"https://github.com/nickjj.png","language":"Shell","funding_links":[],"categories":["Shell","Members"],"sub_categories":[],"readme":"# Notes ![CI](https://github.com/nickjj/notes/workflows/CI/badge.svg?branch=master)\n\nA zero dependency POSIX compliant shell script that makes it really simple to\nmanage your text notes.\n\nInstead of trying to impose a whole bunch of rules and syntax requirements,\nthis tool does its best to get out of your way.\n\nIt tries to do everything possible so that if you're working in a terminal, you\ncan save whatever text you want into a file. This could come from typing a\nsentence out, pasting something from your clipboard or saving the output of a\nprogram.\n\n## Demo Video\n\n[![Demo\nvideo](https://nickjanetakis.com/assets/blog/cards/organize-your-text-based-notes-from-the-command-line-with-this-script-53667299e8d44dbc6091a80a477dc540e201da4aa47ba974f630da4690500444.jpg)](https://nickjanetakis.com/blog/organize-your-text-based-notes-from-the-command-line-with-this-script)\n\n#### Updates to the notes script since this video\n\n- `v0.2.0` scopes the notes files [per month instead of per\n  day](https://github.com/nickjj/notes/commit/4693109f27dc15da6626e3afbba53730810df026).\n  This differs from what's in the video at the 4:00 mark.\n- `v0.1.0` matches exactly what's in this video.\n\n## Design Goals and Philosophy\n\nI've been keeping track of my notes in plain text files since 2001. I always\nfelt like when it comes to jotting down notes it was always best to do\neverything possible to keep friction low.\n\nThat means not worrying about specific file types, formatting, tagging,\ncheck boxes, syntax rules and a bunch of other things that delay you from\ngetting something out of your head and into a document.\n\n### Text is amazing for notes because:\n\n- You can use `grep` and friends to search through it later\n- Even with notes dating back from 2001, I'm only using 1.5mb of disk space\n- It's really easy to back up and sync to other devices using Drop Box or similar tools\n\nSince it's unstructured text you can use this tool for whatever type of note\ntaking you want. You can keep track of general thoughts, create a diary or make\nplan files similar to what John Carmack did [for a number of\nyears](https://github.com/ESWAT/john-carmack-plan-archive).\n\nI personally use it as a scattered brain dump. Even with things being very\nunstructured (and even untagged) I can usually `grep` out anything I want\nwithin a few seconds.\n\n### Your notes are organized by auto-dated files\n\nLet's say it's December 25th, 2019. If you were to run `notes hello world` it\nwould create a `2019-12.txt` file in your `NOTES_DIRECTORY` (this is\nsomething you can configure). It would then append `hello world` to the end of\nthe file.\n\nIf you run `notes something else` on the next day it will still append to the\nsame file and continue appending to that file until the next months hits. For\nexample, on January 1st 2020 any `notes` commands will append to a\n`2020-01.txt` file.\n\nThere's other things you can do such as piping input to it, or running the\nscript without any arguments to open the file in your configured `EDITOR` but\nlet's first go over installing it before we get to that.\n\n### What is this script not good for?\n\nDepending on how you work, it's probably not ideal for grouping up a bunch of\nextended thoughts about a specific topic.\n\nFor example, if you were planning to write a book and you spent 3 months\ngathering info about what you're writing about then you would end up with a\nbunch of isolated date formatted files that was mixed in with everything else.\n\nIn those cases, I recommend you make a new script called `book` which basically\ndoes what this script does except it always dumps everything to 1 specific file\nof your choosing which isn't dated. That's what I do to help plan my\n[video courses](https://nickjanetakis.com/courses/).\n\n## Installation\n\nCopy / paste the line below, or if you don't like this pattern of installing\nscripts then feel free to run things manually.\n\n### 1 liner to get `notes` downloaded to `/usr/local/bin`:\n\n```sh\nsudo curl \\\n  -L https://raw.githubusercontent.com/nickjj/notes/master/notes \\\n  -o /usr/local/bin/notes \u0026\u0026 sudo chmod +x /usr/local/bin/notes\n```\n\nYou can also choose to replace `master` with a specific [release\ntag](https://github.com/nickjj/notes/tags) if you want to grab a specific\nversion.\n\nThere's no fancy `git clone` instructions because you may end up modifying at\nleast 1 line of the script. Plus since the script is so simple, this repo is\nlikely not going to change and if it does you will be able to `diff` it without\nany issues.\n\n### Configuration\n\nBy default it will use `${HOME}/notes` as your notes directory and if that\ndirectory doesn't exist beforehand, this script will allow you to create it\nwith a `y/n` prompt when you first run the program.\n\nYou can also customize your notes path in 1 of 2 ways:\n\n1. Put `export NOTES_DIRECTORY=\"/tmp/foo\"` in your `~/.profile` or equivalent\nfile (`/tmp/foo` would be your notes path)\n2. Directly edit the `notes` script and replace `${HOME}/notes` with `/tmp/foo`\nin the `NOTES_DIRECTORY` variable\n\nAlso, if you want this script to open your notes in your code editor you'll\nwant to make sure you have your `EDITOR` defined in your `~/.profile` too. This\nis a Unix standard. For example, mine looks like `export EDITOR=\"vim\"`.\n\n*If you change your `~/.profile`, don't forget to log out / login.*\n\n## Usage Examples\n\nThere's 3 ways of using this script:\n\n- `notes something you want to jot down`\n  - Appends whatever arguments you add as text into the dated file\n\n- `xclip -o | notes`\n  - Pipes and appends anything (in this case your clipboard's contents) into the dated file\n\n- `notes`\n  - Opens the dated file in your configured `EDITOR`\n\nThat's really all there is to it. With the above 3 ways of adding notes you'll\nfind yourself adding all sorts of different types of notes with very little\nfriction. I encourage you to check out [just how short the source\ncode](https://github.com/nickjj/notes/blob/master/notes) is.\n\nIf you wanted to go all out, you could even create custom key binds in your\ncode editor that would take the selected text and append it to your notes by\nrunning one of the above commands. Since everything is text you have a lot of\nflexibility!\n\nAlso, you have the power of the command line at your finger tips to manipulate\nthese files however you see fit. For example you can run `cat 2019-*.txt \u003e\n2019.txt` to create a yearly file.\n\n## About the Author\n\nI'm a self taught developer and have been freelancing for the last ~20 years.\nYou can read about everything I've learned along the way on my site at\n[https://nickjanetakis.com](https://nickjanetakis.com/). There's hundreds of\n[blog posts](https://nickjanetakis.com/blog/) and a couple of [video\ncourses](https://nickjanetakis.com/courses/) on web development and deployment\ntopics. I also have a [podcast](https://runninginproduction.com) where I talk\nto folks about running web apps in production.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnickjj%2Fnotes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnickjj%2Fnotes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnickjj%2Fnotes/lists"}