Tired of Jira? Here's a pure POSIX to-do environment (versioned and awesome) or: A case for SCCS.
Tags: productivity, minimal, tutorial, sccs
Published: 2020-03-23 16:23:57

---
title: Tired of Jira? Here's a pure POSIX to-do environment (versioned and awesome) or: A case for SCCS.
published: true
description: You need a minimalistic, standard-compliant, multi-user TODO system? Here you go!
tags: productivity, minimal, tutorial, sccs
cover-image: https://dev-to-uploads.s3.amazonaws.com/i/c9e4bnbpphckf08gvaoy.png
---

Hi! Missed me? Good!

As I'm working on improving some of my workflow, I noticed that, unlike other *dev.to* fellows, I haven't written about tracking your things to do here yet. Let me try.

# Preface

If you work in a team of more than two people, you might have to use large, mostly web-based to-do trackers like Redmine, Jira or Trello. Now I agree that, once they're established in a project or even a company, they are hard to replace. But what about smaller projects or, even more important, what about trying to make the most of your existing environment before introducing more overhead than needed?

Luckily, we have two solved problems here. Storing *todo lists* is exactly what the `Todo.txt` format was made for (as sufficiently described by @cwardzala [on dev.to](https://dev.to/cwardzala/setup-todotxt-cli-on-osx-with-homebrew-and-dropbox-60i)). `Todo.txt` has the additional advantage of being editable with any text editor, including annoying ones (Visual Studio Code), old ones (TECO, EDLIN) and POSIX ones (ed, vi). I was considering to talk in lengthy detail about TECO here, but I decided to go *full POSIX* instead, as - if you're not on Windows or Plan 9 - you might already have (or be able to get) all the required tools right out of the box.

## Goals

By the end of this tutorial, you will have a self-hosted versioned multi-user `Todo.txt`-compatible to-do list using nothing but POSIX commands and a *cloud*. Feel free to still not use it afterwards.

## Requirements

You will need some things:

* A shared hard disk or *cloud* storage (e.g. a NAS).
 * Something like Dropbox, OneDrive, iCloud, nextCloud, Seafile, Pydio, Box, ... will do as well - I bet you already have one! (*Addendum:* As @ajnasz has (correctly) pointed out in the comments, some of these services cannot be self-hosted. I'll use Dropbox in my example below though.)
 * This article will assume that the "hard disk" (or "cloud storage") is readily accessible from your file manager. If it is not, please connect first.
* An operating system that is *mostly* POSIX-compatible.
 * Windows won't work and Linux *might* have problems. Both macOS and illumos work just fine though.

# Setting up the environment

## A text editor

You probably already have a [good text editor](https://dev.to/tux0r/text-editor-fetishists-unite-4489). The POSIX standard suggests that you use either `vi` or `ed` though. As `Todo.txt` is a really simple format that won't require any IDE magic, I strongly support these suggestions. Once you [understood `ed`](https://sanctum.geek.nz/arabesque/actually-using-ed/), you might even consider to use it for everything that does not require seeing the whole file at once.

Long story short: I'll use `ed` in this article to tell you to edit a file. Feel free to use Emacs or whatever instead. :-)

## A version control system

*But, but tux0r! Everyone uses Git now!* Now I really don't want to start this war here. Anyway, let me remind you of the **Goals** again: Self-hosting one or more text files; do you *really* want to set up a Git server for *that*?

Enter [SCCS](http://sccs.sf.net), the standard POSIX version control system, the father of RCS, grandfather of CVS, first developed in 1972 - and, most importantly, file-based instead of project-based. A collection of separately maintained `Todo.txt` files is not a *project*, is it?

### Already having SCCS

If you use a commercial Unix operating system, you might already have the `sccs` command. If you don't have either, we can change that. Note that the GNU CSSC tool, made for importing "old" SCCS histories into Subversion [or something](https://www.gnu.org/software/cssc/), does not work well as a SCCS replacement.

### Installing SCCS

Some Linux distributions, like [openSUSE](https://software.opensuse.org/package/sccs), package either Jörg Schilling's version of SCCS or the [complete set](https://build.opensuse.org/package/show/openSUSE%3AFactory/schily) of *schily tools* which contains SCCS.

### Building SCCS yourself

If your operating system does not package any of the above, you'll need to build the full *schily tools* suite yourself. This is a relatively straightforward process once you figured out how it works:

1. Download the latest [Schily package](https://sourceforge.net/projects/schilytools/).
2. Unpack the archive: `tar xjf schily-*.tar.bz2`
3. `cd` into the unpacked folder
4. **If you're on Linux**, first follow the instructions in `READMEs/README.linux`. Most Linux distributions alias GNU make to `make` which is not the best of all ideas. :-) (TL;DR: It might be a good idea to use `./Gmake.linux` instead of `make` for the following commands.)
5. Run `make`.
6. **If that failed**, `cd` into `psmake/` and run `./MAKE-all`. Then try again.
7. Run `sudo make install`. Unless anything goes very wrong now, SCCS - alongside all other schily tools like `cdrecord` - will be in `/opt/schily/bin/`. You might want to add that directory to your `$PATH`. Follow your shell's manual(s) to find out how. (`export PATH=/opt/schily/bin:$PATH` is always a good start.)

Try the `sccs` command again. You should see something like this:

    Usage: sccs [ -R ][ -r ][ -drootprefix ][ -p subdir ]
    	 subcommand [ option ...] [ filename ...]
    
    basic sub-commands:
    	sccs admin	create or administer SCCS history files
    	sccs delget	do a delta followed by a get
    	sccs diffs	compare edited file with a version of an SCCS file
    	sccs edit	get files for editing
    	sccs get	retrieve a version of an SCCS file
    	sccs help	print help for SCCS commands and error messages
    	sccs log	create a changelog using SCCS delta comments
    
    basic project oriented sub-commands:
    	sccs add	add specified files on next commit
    	sccs commit	commit changes to project repository
    	sccs init	initialize empty project repository
    	sccs remove	remove specified files on next commit
    	sccs rename	rename specified files on next commit
    	sccs status	show changed files in the project
    
    	(do 'help sccs'         for a full list of sccs options)
    	(do 'help sccs_subcmds' for a full list of sccs subcommands)
    	(do 'help project_subcmds' for a full list of project sccs subcommands)
    	(do 'help get_kywds'    for a description of recognized ID keywords)
    	(do 'help prs_kywds'    for a description of recognized data keywords)

Now we're ready!

# Putting the pieces together

Assume you have a team of three people, all of them accessing the same shared WebDAV folder, Dropbox or whatever. I'll name them Jack, Joe and Jill for no good reason at all. Here's a possible workflow:

Jack creates a new team todo file.

    jack$ cd Dropbox
	jack$ echo "Todo version: %W% (%G%)\n" > team-todo.txt
	jack$ sccs create team-todo.txt
    
    team-todo.txt:
    1.1
    2 lines
    jack$

The file is versioned and holds the date, thanks to the *magic keywords*:

    jack$ cat team-todo.txt
	Todo version: @(#)team-todo.txt	1.1 (03/23/20)
    
	jack$ 

Joe gets the file and checks his tasks.

    joe$ cd Dropbox
	joe$ sccs get team-todo.txt
	joe$ cat team-todo.txt | grep Joe
	joe$

Joe has nothing to do ... :-)

Now Jill wants him to. Bad Jill!
	
	jill$ cd Dropbox
	jill$ sccs edit team-todo.txt
	jill$ ed team-todo.txt
	25
	a
	TODO Joe, do your work. Duh!
	.
	wq
	49
	jill$

Checking in, Jill creates a delta file which contains all the changes.

	jill$ sccs delta team-todo.txt
	comments? Make Joe less lazy

Now Joe can check again:

    joe$ sccs get team-todo.txt
	joe$ cat team-todo.txt | grep Joe
	TODO Joe, do your work. Duh!
	
Reluctantly, Joe begins his work. But he can see who was it:

    joe$ sccs log team-todo.txt
	Mon Mar 23 17:08:02 2020 jill
	    * team-todo.txt 1.2
	      Make Joe less lazy
    ....
	
May they live happily ever after.

Anyway, that's about it. Sadly, I cannot comment here anymore, but I hope that some of you can still learn something from this.

Like: Never be the Jill in your company... ;-)

See you around!