#organization #planning #stack #todo #cli

bin+lib sigi

An organizing tool for terminal lovers who hate organizing

36 releases (18 stable)

Uses new Rust 2021

new 3.4.2 Jul 3, 2022
3.4.0 May 14, 2022
3.1.0 Mar 28, 2022
2.1.1 Nov 30, 2021
0.2.1 Mar 31, 2021

#33 in Command-line interface

Download history 132/week @ 2022-03-14 92/week @ 2022-03-21 85/week @ 2022-03-28 22/week @ 2022-04-04 50/week @ 2022-04-11 95/week @ 2022-04-18 217/week @ 2022-04-25 328/week @ 2022-05-02 123/week @ 2022-05-09 588/week @ 2022-05-16 173/week @ 2022-05-23 279/week @ 2022-05-30 116/week @ 2022-06-06 8/week @ 2022-06-13 24/week @ 2022-06-20 134/week @ 2022-06-27

351 downloads per month

GPL-2.0-only

56KB
1K SLoC

crates.io version crates.io downloads docs.rs docs

sigi

sigi is an organizing tool for terminal lovers who hate organizing

Use sigi as extra memory. Use it to toss your tasks, groceries, or the next board games you want to play onto a stack. Shell aliases are encouraged to organize your various stacks.

sigi 3.4.2
An organizing tool for terminal lovers who hate organizing

USAGE:
    sigi [OPTIONS] [SUBCOMMAND]

OPTIONS:
    -f, --format <FORMAT>    Use a programmatic format. Options include [csv, json, json-compact,
                             tsv]. Not compatible with quiet/silent/verbose
    -h, --help               Print help information
    -q, --quiet              Omit any leading labels or symbols. Recommended for use in shell
                             scripts
    -s, --silent             Omit any output at all
    -t, --stack <STACK>      Manage items in a specific stack [aliases: topic, about, namespace]
    -v, --verbose            Print more information, like when an item was created [aliases: noisy]
    -V, --version            Print version information

SUBCOMMANDS:
    -              Read input lines from standard input. Same commands as interactive mode, but
                       only prints for printing commands. Intended for use in unix pipes
    complete       Move the current item to "<STACK>_history" and mark as completed [aliases:
                       done, finish, fulfill]
    count          Print the total number of items in the stack [aliases: size, length]
    delete         Move the current item to "<STACK>_history" and mark as deleted [aliases: pop,
                       remove, cancel, drop]
    delete-all     Move all items to "<STACK>_history" and mark as deleted [aliases: purge, pop-
                       all, remove-all, cancel-all, drop-all]
    head           Print the first N items (default is 10) [aliases: top, first]
    help           Print this message or the help of the given subcommand(s)
    interactive    Run in an interactive mode [aliases: i]
    is-empty       Print "true" if stack has zero items, or print "false" (and exit with a
                       nonzero exit code) if the stack does have items [aliases: empty]
    list           Print all items [aliases: ls, snoop, show, all]
    list-stacks    Print all stacks [aliases: stacks]
    move           Move current item to another stack
    move-all       Move all items to another stack
    next           Cycle to the next item; the current item becomes last [aliases: later, cycle,
                       bury]
    peek           Print the first item. This is the default CLI behavior when no command is
                       given [aliases: show]
    pick           Move items to the top of stack by their number
    push           Create a new item [aliases: create, add, do, start, new]
    rot            Rotate the three most-current items [aliases: rotate]
    swap           Swap the two most-current items
    tail           Print the last N items (default is 10) [aliases: bottom, last]

INTERACTIVE MODE:

Use subcommands in interactive mode directly. No OPTIONS (flags) are understood in interactive mode.

The following additional commands are available:
    ?               Show the short version of "help"
    clear           Clear the terminal screen
    stack           Change to the specified stack
    quit/q/exit     Quit interactive mode

The big idea

Sigi is the Chamorro word for continue. I hope this will help you to get on with your life, by helping you prioritize better, forget less, get some stuff done, and relax. 🌴

There's a limit to human memory, and remembering things uses up willpower. I like working at a command line, and wanted a tool to free me up from trying to juggle tasks and ideas.

On a more personal level, while I love beauty and craftsmanship and accomplishing things... I absolutely despise spending time organizing. A five factor personality evaluation rated me at 7% in the orderliness aspect of conscientousness, which (among other things) means I am both less disturbed by chaos and more disturbed by order than 92% of humankind.

sigi intends to be far more flexible and messy, and far less rigid and tidy, when compared to the plethora of personal and professional organizational tools that exist. It will let you write stuff down and look at that stuff when you want to. It's less like a Google/Outlook/Apple Calendar application and more like a pen-and-paper notebook.

I also just find that stacks, and stack-based languages like Forth and Factor are a joy to play with. Also, they're a good fit for organization. Usually older things that aren't "done" or "deletable" are things that can wait more than whatever things are actively being juggled.

Examples

sigi as a to-do list

sigi can understand do (create a task) and done (complete a task).

$ alias todo='sigi --stack todo'

$ todo do Write some code
Creating: Write some code

$ todo do Get a drink
Creating: Get a drink

$ todo do Take a nap
Creating: Take a nap

$ todo list
Now: Take a nap
  1: Get a drink
  2: Write some code

$ sleep 20m

$ todo done
Completed: Take a nap

It's best to use sigi behind a few aliases with unique "stacks". You should save these aliases in your ~/.bashrc or ~/.zshrc or whatever your shell has for configuration. sigi accepts a --stack option, and you can have as many stacks as you can think of names.

Forgot what to do next?

$ todo
Now: Get a drink

Not going to do it?

$ todo delete
Deleted: Get a drink

sigi as a save-anything list

Extending the alias idea, you can use sigi to store anything you want to remember later.

$ alias watch-later='sigi --stack watch-later'

$ watch-later add One Punch Man
Creating: One Punch Man
$ alias story-ideas='sigi --stack=story-ideas'

$ story-ideas add Alien race lives backwards through time.
Creating: Alien race lives backwards through time.

sigi as a local stack-based database

sigi understands the programmer-familiar push and pop idioms. It can be used for simple, persistent, small-scale stack use-cases.

Using the --quiet (or -q) flag is recommended for shell scripts, as it leaves out any leading labels or symbols. If used with a pipe, it's recommended to use the - subcommand to read from standard input and only print if the action requested is a printing action (like list).

sigi is pretty fast: sub-millisecond for basic use cases. That said, it is not intended to handle large amounts of data, or concurrent throughput. For something beefier with stack semantics, check out Redis.

Installing

Packaging status

If your packaging system doesn't have it yet, the best way to install sigi is through the Rust language package manager, cargo:

cargo install sigi

Instructions on installing cargo can be found here:

Please package it up for your Linux/BSD/etc distribution.

Contributing and support

Please open an issue if you see bugs or have ideas!

I'm looking for people to use the sigi wiki to share their tips, tricks, and examples.

Thanks for checking it out!

Dependencies

~7–15MB
~248K SLoC