diff --git a/doc/fm2mt.pl b/doc/fm2mt.pl
deleted file mode 100755
index 4d4d586..0000000
--- a/doc/fm2mt.pl
+++ /dev/null
@@ -1,94 +0,0 @@
-#!/usr/bin/perl
-use strict;
-use warnings;
-use 5.10.0;
-
-# usage: ./fm2mt.pl < g3-master-toc.mm > master-toc.mkd
-
-use HTML::Entities;
-
-sub out { my $out = shift; print $out; }
-
-# freemind to "dense" HTML
-my @in = fm2indent();
-
-out("# gitolite documentation");
-my $started = 0;
-for (@in) {
- my($indent, $text) = split ' ', $_, 2;
- $indent--;
-
- if (not $indent) {
- out "\n\n## $text\n";
- $started = 0;
- next;
- }
-
- if ($indent == 1) {
- # (dense mode) $text = color("red", $text);
- }
-
- if ($indent <= 2) {
- # (dense mode) $text = size(2 - $indent, $text);
- } else {
- # 3 or more
- # (dense mode) $text = ("/" x ($indent-4)) . color("gray", $text);
- }
-
- # normal mode
- $text = "\n" . (" " x ($indent-1)) . " * $text";
- # (dense mode) out " -- " if $started++;
- out $text;
-}
-
-sub size {
- my ($s, $t) = @_;
- return "$t" if $s;
- return $t;
-}
-
-sub color {
- my ($c, $t) = @_;
- return "$t";
-}
-
-sub get_indent {
- my $_ = shift;
- chomp;
- return () unless /\S/;
- if (/^(#+) (.*)/) {
- return (length($1)-1, $2);
- }
- if (/^( +) \* (.*)/) {
- my $t = $2;
- my $i = length($1);
- die 1 if $i % 4;
- $i = $i/4 + 3;
-
- return ($i, $t);
- }
- return ();
-}
-
-sub fm2indent {
- my @out = ();
- my $indent=0;
-
- while (<>)
- {
- next unless /^$/)
- {
- $indent--;
- next;
- }
- next unless /TEXT="([^"]*)"/;
- my $text = decode_entities($1);
-
- push @out, "\n$indent $text" if $indent;
-
- $indent++ unless (/\/>/);
- }
-
- return @out;
-}
diff --git a/doc/g3-master-toc.mm b/doc/g3-master-toc.mm
deleted file mode 100755
index 9d89535..0000000
--- a/doc/g3-master-toc.mm
+++ /dev/null
@@ -1,160 +0,0 @@
-
diff --git a/doc/master-toc.mkd b/doc/master-toc.mkd
new file mode 100644
index 0000000..39904ba
--- /dev/null
+++ b/doc/master-toc.mkd
@@ -0,0 +1,162 @@
+# gitolite documentation
+
+## [Introduction][index]
+
+ * (for [current][g2] gitolite (v2) users)
+ * [quick links][ql]
+ * [what][] is gitolite
+ * [why][] might you need it
+ * [contact][] info, mailing list, IRC channel
+ * [license][] info
+
+## help for [emergencies][]
+
+ * [lost][lost-key] admin key/access
+ * [bypass][]ing gitolite
+ * [clean][]ing out a botched install
+ * [common][ce] errors (TBD)
+ * [uncommon][ue] errors
+ * things that are [not gitolite problems][ngp]
+
+## [WARNINGS][]
+
+
+## [trying][] out gitolite
+
+
+## [quick][qi] install, setup, and clone
+
+
+## [install][]
+
+ * notes and naming conventions
+ * requirements
+ * your skills
+ * server
+ * client
+ * getting the software
+ * the actual install
+ * upgrading
+ * packaging gitolite
+ * [migr][]ating
+
+## [setup][]
+
+
+## gitolite [admin][]istration
+
+ * [server][]-side
+ * ([link][WARNINGS]: important cautions on server side activity)
+ * changing settings in the [rc][] file
+ * installing custom [hooks][]
+ * ([link][existing]: moving existing repos into gitolite)
+ * [access control][conf] (the gitolite.conf file)
+ * [example][confex] of a conf file
+ * basic [syntax][]
+ * include files
+ * ([link][sugar]: syntactic sugar)
+ * [groups][] (of users and repos)
+ * special: '@all'
+ * (link: storing user group info in LDAP)
+ * adding and removing [users][]
+ * multiple keys per user
+ * adding and removing [repos][]
+ * renaming repos
+ * defining access [rules][]
+ * what does a rule look like?
+ * when are the rules checked?
+ * how are the rules matched?
+ * summary of [permissions][permsum]
+ * additional topics
+ * [rule accumulation][rule-accum]
+ * applying [deny rules][deny-rules] during the pre-git check
+ * ([link][refex]: refexes)
+ * ([link][write-types]: different types of write operations)
+ * ([link][vref]: virtual refs)
+ * gitolite [options][]
+ * "[git config][git-config]" keys and values
+ * ["wild"][wild] repos (user created repos)
+ * quick introduction
+ * (admin) declaring wild repos in the conf file
+ * (user) [creating][create] a specific repo
+ * repo patterns
+ * roles
+ * adding other roles
+ * [IMPORTANT WARNING ABOUT THIS FEATURE][rolenamewarn]
+ * listing wild repos
+ * deleting wild repos
+
+## what your [user][]s need to know
+
+
+## [special][] features/setups
+
+ * [disabling pushes][writable] to take backups
+ * [personal][pers] branches
+ * [delegating][deleg] access control responsibilities
+ * ([link][NAME]: the NAME VREF)
+ * the [subconf][] command
+ * ([link][partial-copy]: faking selective READ control)
+
+## interfacing with [external][] tools
+
+ * gitweb
+ * changing the [UMASK][umask]
+ * git-daemon
+
+## [mirroring][]
+
+
+## [rare][]/one-time activities
+
+ * moving [existing][] repos into gitolite
+ * [moving][] servers
+
+## [customisation][cust]
+
+ * types of non-core programs
+ * ([link][non-core]: non-core programs shipped with gitolite)
+ * [commands][]
+ * [hooks][]
+ * syntactic [sugar][]
+ * ([link][triggers]: triggers)
+ * ([link][vref]: VREFs)
+ * [developer notes][dev-notes]
+ * environment variables and other inputs
+ * APIs
+ * the shell API
+ * the perl API
+ * writing your own...
+ * hooks
+ * commands
+ * trigger programs
+ * sugar
+
+## [non-core][] programs shipped with gitolite
+
+ * commands
+ * syntactic sugar
+ * triggers
+ * ([link][vref]: VREFs)
+ * special cases
+ * [partial-copy][]: selective read control for branches
+
+## background info
+
+ * [files and directories][files] involved in install+setup
+ * [auth][]entication versus authorisation
+ * interfacing with [other authentication][otherauth] systems
+ * getting user group info from [LDAP][ldap]
+ * [ssh][]
+ * [regular expressions][regex]
+
+## contributed software, tools, and documentation
+
+ * TBD
+
+## TBD
+
+ * log file format, LOG_EXTRA
+ * hub
+ * mob branches
+ * password access
\ No newline at end of file
diff --git a/doc/mkdoc b/doc/mkdoc
index 8646988..2f44d6c 100755
--- a/doc/mkdoc
+++ b/doc/mkdoc
@@ -13,8 +13,6 @@ use Tsh;
$ENV{TSH_ERREXIT} = 1;
try "
- ./fm2mt.pl < g3-master-toc.mm > master-toc.mkd
-
mkdir ../html; ok
git status -s -uno; !/./
git log --oneline -1