[](https://sigi-cli.org) [![crates.io version](https://img.shields.io/crates/v/sigi)](https://crates.io/crates/sigi) [![crates.io downloads](https://img.shields.io/crates/d/sigi?label=crates.io%20downloads)](https://crates.io/crates/sigi) [![docs.rs docs](https://docs.rs/mio/badge.svg)](https://docs.rs/sigi) [![discord badge](https://img.shields.io/discord/1141777454164365382?logo=discord)](https://discord.gg/Yehv682GJ4) # Sigi CLI `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. --- ```console $ sigi -h An organizing tool for terminal lovers who hate organizing Usage: sigi [OPTIONS] [COMMAND] Commands: interactive Run in an interactive mode [aliases: i] - 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 "_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 "_history" and mark as deleted [aliases: pop, remove, cancel, drop] delete-all Move all items to "_history" and mark as deleted [aliases: purge, pop-all, remove-all, cancel-all, drop-all] edit Edit the content of an item. Other metadata like creation date is left unchanged head Print the first N items (default is 10) [aliases: top, first] 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, 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] help Print this message or the help of the given subcommand(s) Options: -q, --quiet Omit any leading labels or symbols. Recommended for use in shell scripts -s, --silent Omit any output at all -v, --verbose Print more information, like when an item was created [aliases: noisy] -f, --format Use a programmatic format. Options include [csv, json, json-compact, tsv]. Not compatible with quiet/silent/verbose [possible values: csv, json, json-compact, tsv] -t, --stack Manage items in a specific stack [aliases: topic, about, namespace] -d, --data-store (Advanced) Manage sigi stacks in a specific directory. The default is either the value of a SIGI_HOME environment variable or your OS-specific home directory [aliases: dir, directory, store] -h, --help Print help (see more with '--help') -V, --version Print version INTERACTIVE MODE: Use subcommands in interactive mode directly. No OPTIONS (flags) are understood in interactive mode. The ; character can be used to separate commands. The following additional commands are available: ? Show the short version of "help" clear Clear the terminal screen use Change to the specified stack [aliases: stack] exit Quit interactive mode [aliases: quit, q] ``` # 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` remote via ssh If you have a host you can access remotely, using a tool like [OpenSSH](https://www.openssh.com), you can also use sigi across machines. Consider using an alias like this: ``` $ alias home-todo='ssh -qt user@host.or.ip sigi --stack=home-todo' ``` > Protip: If you do a bunch of machine hopping via SSH, consider adding host aliases in [`$HOME/.ssh/config`](https://man.openbsd.org/ssh_config.5). I set these up something like this: > ``` > Host hq > User boonieppper > HostName 192.168.x.x > IdentityFile ~/.ssh/etc > ``` > which allows for just running `ssh hq`, for example. ## `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](https://repology.org/badge/vertical-allrepos/sigi.svg)](https://repology.org/project/sigi/versions) 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: - https://doc.rust-lang.org/cargo/getting-started/installation.html Please package it up for your Linux/BSD/etc distribution. # Contributing and support Please [open an issue](https://github.com/sigi-cli/sigi/issues) if you see bugs or have ideas! I'm looking for people to use [the `sigi` wiki](https://github.com/sigi-cli/sigi/wiki) to share their tips, tricks, and examples. Thanks for checking it out!