commandline kanban #notetaking #todomanager #scriptable for teams AND personal CSV kanban for minimalist productivity hackers.
WHY? online issuetrackers are great for teams, but how to manage (personal) todo's on a crossrepo-, macro-, or micro-level? This is a very simple powerful tool to do that AND measure productivity. Just store the CSV-file(s) inside repos, clouddrives and local filesystems. #teamfriendly #symlinktheplanet #nestedkanbans
Install
$ curl -LO "https://raw.githubusercontent.com/coderofsalvation/kanban.bash/master/kanban"
$ chmod 755 kanbanShow me the kanban board!
$ ./kanban init
$ ./kanban add TODO PERSONAL "buy rose for girlfriend foo bar"
$ ./kanban showNOTE: columns are configurable, and board resizes according to terminal width

NOTE: columns are configurable, and board resizes according to terminal width
Usage
Change status
$ ./kanban show
.------. .------. .-------.
| TODO |_______ | HOLD |_______ | DOING |_______
| | |
| 1 foobar | 3 ipsum
| 2 lorem
$ ./kanban 2 DOING
TODO -> DOINGEdit item
NOTE: make sure you have your favorite editor set in ~/.bashrc (
export EDITOR=vime.g.)
$ ./kanban 2 # this executes ${EDITOR}Todo grep
$ ./kanban TODO DOING | grep projectfooNice to get project-specific kanban overviews.
Note-taking
adding a filename as a description, will trigger kanban to launch
$EDITOR:
$ echo -e "hello\nworld" > my_idea.txt
$ kanban add TODO note my_idea.txt
$ kanban list
id status tag description
- - - - -
4 TODO note my_idea.txt
$ k 4TIP: use symlinks to share notes across boards (
cd myproject && ln -s ~/.kanban/timelog.txt timelog.txte.g.)
Simple listing of status
NOTE: from here we use the k-alias, see the 'Attention Unix ninjas' on how to use it
$ k TODO
id status tag description history
- - - - -
185 TODO bly fooo bar flop BTBDHDHDHT
199 TODO bly meeting about techdesign BT
245 TODO lb checkout testsuite BT
246 TODO nus add field to db BT
242 TODO nus fix db lag BTas you can see in the history, todo 185 is quite problematic. It went from Backlog->Todo->Backlog->Doing->Hold->... and so on. Obviously the person who assigned this todo should rethink it, and chop it up into seperate todos.
$ k TODO 2015-08
id status tag description history
- - - - -
246 TODO nus add field to db BT
242 TODO nus fix db lag BTHere you can see all todo's which were 'touched' in august 2015
Configuration
see ~/.kanban/.kanban.conf (gets created automatically) You can define the kanban statuses, and limit the maximum amount of todos per status.
See .kanban/kanban.conf in case you initialized a board in your current dir (using kanban init)
Idiotproof csv-editing
Safest way to keep the CSV sane:
$ ./kanban add
enter description:
> do laundry
enter one of statuses: BACKLOG TODO IN_PROGRESS HOLD DONE
> TODO
enter one of tags: projectA, projectB
> projectA
$Responsive kanban.
As mentioned earlier, the status/categorynames can be changed in .kanban/.kanban.conf. No widescreen? Show a tag-less, simplified kanban board by hiding some categories:
XSMALL=119 # show simplified kanban for terminalwidth < 119 chars
SMALLSCREEN=('DOING' 'TODO' 'HOLD') # define simplified kanban board statusesNested kanbans
$ kanban init
$ mkdir featureX
$ kanban add TODO featureX
$ cd featureX
$ kanban init
$ kanban add TODO foobar
$ cd ..
$ kanban show
.____.
| TODO |_____
|
| 12 featureX
$ kanban 12 # shows kanban inside featureX
.____.
| TODO |_____
|
| 1 foobarOr, how about centralized kanbans in your dotfiles repo + 1 in a projectrepo
Scriptable / Kanban Bot
kanban items are SCRIPTABLE using your favorite language. This allows dynamic statuses, tags & descriptions in the CSV-file:
"$(~/.kanban/bot status_day TODO '1 4')","script","database backup","T","2021-10-04@15:36"this will call the following (executable) shellscript (~/.kanban/bot)
#!/bin/bash
status_day(){
[[ "$2" =~ $(date +%u) ]] && printf $1 || printf BACKLOG
}
"$@"Profit!
The database backup item will have status TODO on mondays & fridays, otherwise BACKLOG
TIP: use curl to generate dynamic descriptions, for example:
"$(curl https://api.github.com/repos/coderofsalvation/kanban.bash/issues | grep total_count | sed 's/[^0-9]//g') open issues"Blinking text
Just wrap a word with stars (*iamblinking* e.g.) in your csv to catch more attention.
Attention UNIX ninjas
type 'k' instead of './kanban'
$ cp kanban ~/bin
$ echo 'export PATH=$PATH:~/bin' >> ~/.bashrc
$ echo 'alias k=kanban' >> ~/.bashrc
$ source ~/.bashrc(now all terminals will recognize 'k' as a command)
Cleanup your kanban board with some bash-fu:
$ for i in {19,36,49}; do kanban $i BACKLOG; done
DONE -> BACKLOG
DONE -> BACKLOG
DONE -> BACKLOGmass-renames:
$ sed -i 's/FOO/BAR/g' ~/.kanban.csvOpen a terminal on an extra monitor/screen/tmux:
$ NOCOLOR=1 watch kanban showRun ninja-commands like: 'k 23 DONE' and withness the update:
$ k 34 DONE
TODO -> DONE
$ k add TODO NINJW workout" "$(date --date='tomorrow' +'%Y-%m-%d') deadline"Automatically display boards
Put the following in ~/.bashrc to display boards whenever you enter a directory with a kanban:
cd(){
builtin cd ${1:+"$@"} && [[ -d ./.kanban ]] && kanban show
}
Statistics
With the power of grep you can get overviews:
Lets see what the slacking / project ratio is :)
$ k stats tag 2015-08
slacking 76 ▆▆▆▆▆▆▆▆
projecfoo 36 ▆▆▆▆What are are typical tasktransitions:
Realtime Web-based kanban boards
Create the following index.html:
And then serve it to the web:
Now surf to http://localhost:8080 and PROFIT!
Tab completion
Somehow source kanban.completion in your ~/.bashrc or just copy it to /etc/bash_completion.d
Why
For developers, there's no such thing as the ultimate todo-utility
KANBAN.bash brings the lean and mean kanban board to the console. It uses csv as database backend, a very popular tabular format. The commandline usage is very minimal so few keystrokes can do magic.
Developer info
tests oneliners:
- run:
cd test; for test in test-*; do ./$test &>/dev/null; done && echo OK || echo ERROR - debug:
cd test; for test in test-*; do bash -x $test; done && echo OK || echo ERROR
Todo
- more testing
- easier way of adding todos