|
@@ -1,946 +0,0 @@
|
|
----
|
|
|
|
-format: DocBook
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
-<sect1 id="gitit">
|
|
|
|
- <title>Gitit</title>
|
|
|
|
- <para>
|
|
|
|
- Gitit is a wiki program written in Haskell. It uses
|
|
|
|
- <ulink url="http://happstack.com">Happstack</ulink> for the web
|
|
|
|
- server and
|
|
|
|
- <ulink url="http://johnmacfarlane.net/pandoc">pandoc</ulink> for
|
|
|
|
- markup processing. Pages and uploaded files are stored in a
|
|
|
|
- <ulink url="http://git.or.cz">git</ulink>,
|
|
|
|
- <ulink url="http://darcs.net">darcs</ulink>, or
|
|
|
|
- <ulink url="http://mercurial.selenic.com/">mercurial</ulink>
|
|
|
|
- repository and may be modified either by using the VCS’s
|
|
|
|
- command-line tools or through the wiki’s web interface. By default,
|
|
|
|
- pandoc’s extended version of markdown is used as a markup language,
|
|
|
|
- but reStructuredText, LaTeX, HTML, DocBook, or Emacs Org-mode markup
|
|
|
|
- can also be used. Pages can be exported in a number of different
|
|
|
|
- formats, including LaTeX, RTF, OpenOffice ODT, and MediaWiki markup.
|
|
|
|
- Gitit can be configured to display TeX math (using
|
|
|
|
- <ulink url="http://github.com/jgm/texmath/tree/master">texmath</ulink>)
|
|
|
|
- and highlighted source code (using
|
|
|
|
- <ulink url="http://johnmacfarlane.net/highlighting-kate/">highlighting-kate</ulink>).
|
|
|
|
- </para>
|
|
|
|
- <para>
|
|
|
|
- Other features include
|
|
|
|
- </para>
|
|
|
|
- <itemizedlist>
|
|
|
|
- <listitem>
|
|
|
|
- <para>
|
|
|
|
- plugins: dynamically loaded page transformations written in
|
|
|
|
- Haskell (see <quote>Network.Gitit.Interface</quote>)
|
|
|
|
- </para>
|
|
|
|
- </listitem>
|
|
|
|
- <listitem>
|
|
|
|
- <para>
|
|
|
|
- categories
|
|
|
|
- </para>
|
|
|
|
- </listitem>
|
|
|
|
- <listitem>
|
|
|
|
- <para>
|
|
|
|
- TeX math
|
|
|
|
- </para>
|
|
|
|
- </listitem>
|
|
|
|
- <listitem>
|
|
|
|
- <para>
|
|
|
|
- syntax highlighting of source code files and code snippets
|
|
|
|
- (using highlighting-kate)
|
|
|
|
- </para>
|
|
|
|
- </listitem>
|
|
|
|
- <listitem>
|
|
|
|
- <para>
|
|
|
|
- caching
|
|
|
|
- </para>
|
|
|
|
- </listitem>
|
|
|
|
- <listitem>
|
|
|
|
- <para>
|
|
|
|
- Atom feeds (site-wide and per-page)
|
|
|
|
- </para>
|
|
|
|
- </listitem>
|
|
|
|
- <listitem>
|
|
|
|
- <para>
|
|
|
|
- a library, <quote>Network.Gitit</quote>, that makes it simple to
|
|
|
|
- include a gitit wiki in any happstack application
|
|
|
|
- </para>
|
|
|
|
- </listitem>
|
|
|
|
- </itemizedlist>
|
|
|
|
- <para>
|
|
|
|
- You can see a running demo at
|
|
|
|
- <ulink url="http://gitit.johnmacfarlane.net">http://gitit.johnmacfarlane.net</ulink>.
|
|
|
|
- </para>
|
|
|
|
-</sect1>
|
|
|
|
-<sect1 id="getting-started">
|
|
|
|
- <title>Getting started</title>
|
|
|
|
- <sect2 id="compiling-and-installing-gitit">
|
|
|
|
- <title>Compiling and installing gitit</title>
|
|
|
|
- <para>
|
|
|
|
- You’ll need the
|
|
|
|
- <ulink url="http://www.haskell.org/ghc/">GHC</ulink> compiler and
|
|
|
|
- the
|
|
|
|
- <ulink url="http://hackage.haskell.org/trac/hackage/wiki/CabalInstall">cabal-install</ulink>
|
|
|
|
- tool. GHC can be downloaded
|
|
|
|
- <ulink url="http://www.haskell.org/ghc/">here</ulink>. Note that,
|
|
|
|
- starting with release 0.5, GHC 6.10 or higher is required. For
|
|
|
|
- <ulink url="http://hackage.haskell.org/trac/hackage/wiki/CabalInstall">cabal-install</ulink>
|
|
|
|
- on *nix, follow the
|
|
|
|
- <ulink url="http://hackage.haskell.org/trac/hackage/wiki/CabalInstall#Quick+Installation+on+Unix">quick
|
|
|
|
- install</ulink> instructions.
|
|
|
|
- </para>
|
|
|
|
- <para>
|
|
|
|
- Once you’ve got cabal-install, installing gitit is trivial:
|
|
|
|
- </para>
|
|
|
|
- <programlisting>
|
|
|
|
-cabal update
|
|
|
|
-cabal install gitit
|
|
|
|
-</programlisting>
|
|
|
|
- <para>
|
|
|
|
- These commands will install the latest released version of gitit.
|
|
|
|
- To install a version of gitit checked out from the repository,
|
|
|
|
- change to the gitit directory and type:
|
|
|
|
- </para>
|
|
|
|
- <programlisting>
|
|
|
|
-cabal install
|
|
|
|
-</programlisting>
|
|
|
|
- <para>
|
|
|
|
- The <literal>cabal</literal> tool will automatically install all
|
|
|
|
- of the required haskell libraries. If all goes well, by the end of
|
|
|
|
- this process, the latest release of gitit will be installed in
|
|
|
|
- your local <literal>.cabal</literal> directory. You can check this
|
|
|
|
- by trying:
|
|
|
|
- </para>
|
|
|
|
- <programlisting>
|
|
|
|
-gitit --version
|
|
|
|
-</programlisting>
|
|
|
|
- <para>
|
|
|
|
- If that doesn’t work, check to see that <literal>gitit</literal>
|
|
|
|
- is in your local cabal-install executable directory (usually
|
|
|
|
- <literal>~/.cabal/bin</literal>). And make sure
|
|
|
|
- <literal>~/.cabal/bin</literal> is in your system path.
|
|
|
|
- </para>
|
|
|
|
- </sect2>
|
|
|
|
- <sect2 id="optional-syntax-highlighting-support">
|
|
|
|
- <title>Optional syntax highlighting support</title>
|
|
|
|
- <para>
|
|
|
|
- If pandoc was compiled with optional syntax highlighting support,
|
|
|
|
- this will be available in gitit too. This feature is recommended
|
|
|
|
- if you plan to display source code on your wiki.
|
|
|
|
- </para>
|
|
|
|
- <para>
|
|
|
|
- Highlighting support requires the
|
|
|
|
- <ulink url="http://www.pcre.org/">pcre</ulink> library, so make
|
|
|
|
- sure that is installed before continuing.
|
|
|
|
- </para>
|
|
|
|
- <para>
|
|
|
|
- To install gitit with highlighting support, first ensure that
|
|
|
|
- pandoc is compiled with highlighting support, then install gitit
|
|
|
|
- as above:
|
|
|
|
- </para>
|
|
|
|
- <programlisting>
|
|
|
|
-cabal install pandoc -fhighlighting --reinstall
|
|
|
|
-cabal install gitit
|
|
|
|
-</programlisting>
|
|
|
|
- </sect2>
|
|
|
|
- <sect2 id="running-gitit">
|
|
|
|
- <title>Running gitit</title>
|
|
|
|
- <para>
|
|
|
|
- To run gitit, you’ll need <literal>git</literal> in your system
|
|
|
|
- path. (Or <literal>darcs</literal> or <literal>hg</literal>, if
|
|
|
|
- you’re using darcs or mercurial to store the wiki data.)
|
|
|
|
- </para>
|
|
|
|
- <para>
|
|
|
|
- Gitit assumes that the page files (stored in the git repository)
|
|
|
|
- are encoded as UTF-8. Even page names may be UTF-8 if the file
|
|
|
|
- system supports this. So you should make sure that you are using a
|
|
|
|
- UTF-8 locale when running gitit. (To check this, type
|
|
|
|
- <literal>locale</literal>.)
|
|
|
|
- </para>
|
|
|
|
- <para>
|
|
|
|
- Switch to the directory where you want to run gitit. This should
|
|
|
|
- be a directory where you have write access, since three
|
|
|
|
- directories, <literal>static</literal>,
|
|
|
|
- <literal>templates</literal>, and <literal>wikidata</literal>, and
|
|
|
|
- two files, <literal>gitit-users</literal> and
|
|
|
|
- <literal>gitit.log</literal>, will be created here. To start
|
|
|
|
- gitit, just type:
|
|
|
|
- </para>
|
|
|
|
- <programlisting>
|
|
|
|
-gitit
|
|
|
|
-</programlisting>
|
|
|
|
- <para>
|
|
|
|
- If all goes well, gitit will do the following:
|
|
|
|
- </para>
|
|
|
|
- <orderedlist numeration="arabic" spacing="compact">
|
|
|
|
- <listitem>
|
|
|
|
- <para>
|
|
|
|
- Create a git repository, <literal>wikidata</literal>, and add
|
|
|
|
- a default front page.
|
|
|
|
- </para>
|
|
|
|
- </listitem>
|
|
|
|
- <listitem>
|
|
|
|
- <para>
|
|
|
|
- Create a <literal>static</literal> directory containing files
|
|
|
|
- to be treated as static files by gitit.
|
|
|
|
- </para>
|
|
|
|
- </listitem>
|
|
|
|
- <listitem>
|
|
|
|
- <para>
|
|
|
|
- Create a <literal>templates</literal> directory containing
|
|
|
|
- HStringTemplate templates for wiki pages.
|
|
|
|
- </para>
|
|
|
|
- </listitem>
|
|
|
|
- <listitem>
|
|
|
|
- <para>
|
|
|
|
- Start a web server on port 5001.
|
|
|
|
- </para>
|
|
|
|
- </listitem>
|
|
|
|
- </orderedlist>
|
|
|
|
- <para>
|
|
|
|
- Check that it worked: open a web browser and go to
|
|
|
|
- <ulink url="http://localhost:5001">http://localhost:5001</ulink>.
|
|
|
|
- </para>
|
|
|
|
- <para>
|
|
|
|
- You can control the port that gitit runs on using the
|
|
|
|
- <literal>-p</literal> option: <literal>gitit -p 4000</literal>
|
|
|
|
- will start gitit on port 4000. Additional runtime options are
|
|
|
|
- described by <literal>gitit -h</literal>.
|
|
|
|
- </para>
|
|
|
|
- </sect2>
|
|
|
|
-</sect1>
|
|
|
|
-<sect1 id="using-gitit">
|
|
|
|
- <title>Using gitit</title>
|
|
|
|
- <sect2 id="wiki-links-and-formatting">
|
|
|
|
- <title>Wiki links and formatting</title>
|
|
|
|
- <para>
|
|
|
|
- For instructions on editing pages and creating links, see the
|
|
|
|
- <quote>Help</quote> page.
|
|
|
|
- </para>
|
|
|
|
- <para>
|
|
|
|
- Gitit interprets links with empty URLs as wikilinks. Thus, in
|
|
|
|
- markdown pages, <literal>[Front Page]()</literal> creates an
|
|
|
|
- internal wikilink to the page <literal>Front Page</literal>. In
|
|
|
|
- reStructuredText pages, <literal>`Front Page <>`_</literal>
|
|
|
|
- has the same effect.
|
|
|
|
- </para>
|
|
|
|
- <para>
|
|
|
|
- If you want to link to a directory listing for a subdirectory, use
|
|
|
|
- a trailing slash: <literal>[foo/bar/]()</literal> creates a link
|
|
|
|
- to the directory for <literal>foo/bar</literal>.
|
|
|
|
- </para>
|
|
|
|
- </sect2>
|
|
|
|
- <sect2 id="page-metadata">
|
|
|
|
- <title>Page metadata</title>
|
|
|
|
- <para>
|
|
|
|
- Pages may optionally begin with a metadata block. Here is an
|
|
|
|
- example:
|
|
|
|
- </para>
|
|
|
|
- <programlisting>
|
|
|
|
----
|
|
|
|
-format: latex+lhs
|
|
|
|
-categories: haskell math
|
|
|
|
-toc: no
|
|
|
|
-title: Haskell and
|
|
|
|
- Category Theory
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
-\section{Why Category Theory?}
|
|
|
|
-</programlisting>
|
|
|
|
- <para>
|
|
|
|
- The metadata block consists of a list of key-value pairs, each on
|
|
|
|
- a separate line. If needed, the value can be continued on one or
|
|
|
|
- more additional line, which must begin with a space. (This is
|
|
|
|
- illustrated by the <quote>title</quote> example above.) The
|
|
|
|
- metadata block must begin with a line <literal>---</literal> and
|
|
|
|
- end with a line <literal>...</literal> optionally followed by one
|
|
|
|
- or more blank lines. (The metadata block is a valid YAML document,
|
|
|
|
- though not all YAML documents will be valid metadata blocks.)
|
|
|
|
- </para>
|
|
|
|
- <para>
|
|
|
|
- Currently the following keys are supported:
|
|
|
|
- </para>
|
|
|
|
- <variablelist spacing="compact">
|
|
|
|
- <varlistentry>
|
|
|
|
- <term>
|
|
|
|
- format
|
|
|
|
- </term>
|
|
|
|
- <listitem>
|
|
|
|
- <para>
|
|
|
|
- Overrides the default page type as specified in the
|
|
|
|
- configuration file. Possible values are
|
|
|
|
- <literal>markdown</literal>, <literal>rst</literal>,
|
|
|
|
- <literal>latex</literal>, <literal>html</literal>,
|
|
|
|
- <literal>markdown+lhs</literal>, <literal>rst+lhs</literal>,
|
|
|
|
- <literal>latex+lhs</literal>. (Capitalization is ignored, so
|
|
|
|
- you can also use <literal>LaTeX</literal>,
|
|
|
|
- <literal>HTML</literal>, etc.) The <literal>+lhs</literal>
|
|
|
|
- variants indicate that the page is to be interpreted as
|
|
|
|
- literate Haskell. If this field is missing, the default page
|
|
|
|
- type will be used.
|
|
|
|
- </para>
|
|
|
|
- </listitem>
|
|
|
|
- </varlistentry>
|
|
|
|
- <varlistentry>
|
|
|
|
- <term>
|
|
|
|
- categories
|
|
|
|
- </term>
|
|
|
|
- <listitem>
|
|
|
|
- <para>
|
|
|
|
- A space or comma separated list of categories to which the
|
|
|
|
- page belongs.
|
|
|
|
- </para>
|
|
|
|
- </listitem>
|
|
|
|
- </varlistentry>
|
|
|
|
- <varlistentry>
|
|
|
|
- <term>
|
|
|
|
- toc
|
|
|
|
- </term>
|
|
|
|
- <listitem>
|
|
|
|
- <para>
|
|
|
|
- Overrides default setting for table-of-contents in the
|
|
|
|
- configuration file. Values can be <literal>yes</literal>,
|
|
|
|
- <literal>no</literal>, <literal>true</literal>, or
|
|
|
|
- <literal>false</literal> (capitalization is ignored).
|
|
|
|
- </para>
|
|
|
|
- </listitem>
|
|
|
|
- </varlistentry>
|
|
|
|
- <varlistentry>
|
|
|
|
- <term>
|
|
|
|
- title
|
|
|
|
- </term>
|
|
|
|
- <listitem>
|
|
|
|
- <para>
|
|
|
|
- By default the displayed page title is the page name. This
|
|
|
|
- metadata element overrides that default.
|
|
|
|
- </para>
|
|
|
|
- </listitem>
|
|
|
|
- </varlistentry>
|
|
|
|
- </variablelist>
|
|
|
|
- </sect2>
|
|
|
|
- <sect2 id="highlighted-source-code">
|
|
|
|
- <title>Highlighted source code</title>
|
|
|
|
- <para>
|
|
|
|
- If gitit was compiled against a version of pandoc that has
|
|
|
|
- highlighting support (see above), you can get highlighted source
|
|
|
|
- code by using
|
|
|
|
- <ulink url="http://johnmacfarlane.net/pandoc/README.html#delimited-code-blocks">delimited
|
|
|
|
- code blocks</ulink>:
|
|
|
|
- </para>
|
|
|
|
- <programlisting>
|
|
|
|
-~~~ {.haskell .numberLines}
|
|
|
|
-qsort [] = []
|
|
|
|
-qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++
|
|
|
|
- qsort (filter (>= x) xs)
|
|
|
|
-~~~
|
|
|
|
-</programlisting>
|
|
|
|
- <para>
|
|
|
|
- To see what languages your pandoc was compiled to highlight:
|
|
|
|
- </para>
|
|
|
|
- <programlisting>
|
|
|
|
-pandoc -v
|
|
|
|
-</programlisting>
|
|
|
|
- </sect2>
|
|
|
|
-</sect1>
|
|
|
|
-<sect1 id="configuring-and-customizing-gitit">
|
|
|
|
- <title>Configuring and customizing gitit</title>
|
|
|
|
- <sect2 id="configuration-options">
|
|
|
|
- <title>Configuration options</title>
|
|
|
|
- <para>
|
|
|
|
- Use the option <literal>-f [filename]</literal> to specify a
|
|
|
|
- configuration file:
|
|
|
|
- </para>
|
|
|
|
- <programlisting>
|
|
|
|
-gitit -f my.conf
|
|
|
|
-</programlisting>
|
|
|
|
- <para>
|
|
|
|
- The configuation can be splitted between several files:
|
|
|
|
- </para>
|
|
|
|
- <programlisting>
|
|
|
|
-gitit -f my.conf -f additional.conf
|
|
|
|
-</programlisting>
|
|
|
|
- <para>
|
|
|
|
- One use case is to keep sensible part of the configuration outside
|
|
|
|
- of a SCM (oauth client secret for example).
|
|
|
|
- </para>
|
|
|
|
- <para>
|
|
|
|
- If this option is not used, gitit will use a default
|
|
|
|
- configuration. To get a copy of the default configuration file,
|
|
|
|
- which you can customize, just type:
|
|
|
|
- </para>
|
|
|
|
- <programlisting>
|
|
|
|
-gitit --print-default-config > my.conf
|
|
|
|
-</programlisting>
|
|
|
|
- <para>
|
|
|
|
- The default configuration file is documented with comments
|
|
|
|
- throughout.
|
|
|
|
- </para>
|
|
|
|
- </sect2>
|
|
|
|
- <sect2 id="the-static-directory">
|
|
|
|
- <title>The <literal>static</literal> directory</title>
|
|
|
|
- <para>
|
|
|
|
- On receiving a request, gitit always looks first in the
|
|
|
|
- <literal>static</literal> directory (or in whatever directory is
|
|
|
|
- specified for <literal>static-dir</literal> in the configuration
|
|
|
|
- file). If a file corresponding to the request is found there, it
|
|
|
|
- is served immediately. If the file is not found in
|
|
|
|
- <literal>static</literal>, gitit next looks in the
|
|
|
|
- <literal>static</literal> subdirectory of gitit’s data file
|
|
|
|
- (<literal>$CABALDIR/share/gitit-x.y.z/data</literal>). This is
|
|
|
|
- where default css, images, and javascripts are stored. If the file
|
|
|
|
- is not found there either, gitit treats the request as a request
|
|
|
|
- for a wiki page or wiki command.
|
|
|
|
- </para>
|
|
|
|
- <para>
|
|
|
|
- So, you can throw anything you want to be served statically (for
|
|
|
|
- example, a <literal>robots.txt</literal> file or
|
|
|
|
- <literal>favicon.ico</literal>) in the <literal>static</literal>
|
|
|
|
- directory. You can override any of gitit’s default css,
|
|
|
|
- javascript, or image files by putting a file with the same
|
|
|
|
- relative path in <literal>static</literal>. Note that gitit has a
|
|
|
|
- default <literal>robots.txt</literal> file that excludes all URLs
|
|
|
|
- beginning with <literal>/_</literal>.
|
|
|
|
- </para>
|
|
|
|
- <para>
|
|
|
|
- Note: if you set <literal>static-dir</literal> to be a
|
|
|
|
- subdirectory of <literal>repository-path</literal>, and then add
|
|
|
|
- the files in the static directory to your repository, you can
|
|
|
|
- ensure that others who clone your wiki repository get these files
|
|
|
|
- as well. It will not be possible to modify these files using the
|
|
|
|
- web interface, but they will be modifiable via git.
|
|
|
|
- </para>
|
|
|
|
- </sect2>
|
|
|
|
- <sect2 id="using-a-vcs-other-than-git">
|
|
|
|
- <title>Using a VCS other than git</title>
|
|
|
|
- <para>
|
|
|
|
- By default, gitit will store wiki pages in a git repository in the
|
|
|
|
- <literal>wikidata</literal> directory. If you’d prefer to use
|
|
|
|
- darcs instead of git, you need to add the following field to the
|
|
|
|
- configuration file:
|
|
|
|
- </para>
|
|
|
|
- <programlisting>
|
|
|
|
-repository-type: Darcs
|
|
|
|
-</programlisting>
|
|
|
|
- <para>
|
|
|
|
- If you’d prefer to use mercurial, add:
|
|
|
|
- </para>
|
|
|
|
- <programlisting>
|
|
|
|
-repository-type: Mercurial
|
|
|
|
-</programlisting>
|
|
|
|
- <para>
|
|
|
|
- This program may be called <quote>darcsit</quote> instead of
|
|
|
|
- <quote>gitit</quote> when a darcs backend is used.
|
|
|
|
- </para>
|
|
|
|
- <para>
|
|
|
|
- Note: we recommend that you use gitit/darcsit with darcs version
|
|
|
|
- 2.3.0 or greater. If you must use an older version of darcs, then
|
|
|
|
- you need to compile the filestore library without the (default)
|
|
|
|
- maxcount flag, before (re)installing gitit:
|
|
|
|
- </para>
|
|
|
|
- <programlisting>
|
|
|
|
-cabal install --reinstall filestore -f-maxcount
|
|
|
|
-cabal install --reinstall gitit
|
|
|
|
-</programlisting>
|
|
|
|
- <para>
|
|
|
|
- Otherwise you will get an error when you attempt to access your
|
|
|
|
- repository.
|
|
|
|
- </para>
|
|
|
|
- </sect2>
|
|
|
|
- <sect2 id="changing-the-theme">
|
|
|
|
- <title>Changing the theme</title>
|
|
|
|
- <para>
|
|
|
|
- To change the look of the wiki, you can modify
|
|
|
|
- <literal>custom.css</literal> in <literal>static/css</literal>.
|
|
|
|
- </para>
|
|
|
|
- <para>
|
|
|
|
- To change the look of printed pages, copy gitit’s default
|
|
|
|
- <literal>print.css</literal> to <literal>static/css</literal> and
|
|
|
|
- modify it.
|
|
|
|
- </para>
|
|
|
|
- <para>
|
|
|
|
- The logo picture can be changed by copying a new PNG file to
|
|
|
|
- <literal>static/img/logo.png</literal>. The default logo is
|
|
|
|
- 138x155 pixels.
|
|
|
|
- </para>
|
|
|
|
- <para>
|
|
|
|
- To change the footer, modify
|
|
|
|
- <literal>templates/footer.st</literal>.
|
|
|
|
- </para>
|
|
|
|
- <para>
|
|
|
|
- For more radical changes, you can override any of the default
|
|
|
|
- templates in
|
|
|
|
- <literal>$CABALDIR/share/gitit-x.y.z/data/templates</literal> by
|
|
|
|
- copying the file into <literal>templates</literal>, modifying it,
|
|
|
|
- and restarting gitit. The <literal>page.st</literal> template is
|
|
|
|
- the master template; it includes the others. Interpolated
|
|
|
|
- variables are surrounded by <literal>$</literal>s, so
|
|
|
|
- <literal>literal $</literal> must be backslash-escaped.
|
|
|
|
- </para>
|
|
|
|
- </sect2>
|
|
|
|
- <sect2 id="adding-support-for-math">
|
|
|
|
- <title>Adding support for math</title>
|
|
|
|
- <para>
|
|
|
|
- To write math on a markdown-formatted wiki page, just enclose it
|
|
|
|
- in dollar signs, as in LaTeX:
|
|
|
|
- </para>
|
|
|
|
- <programlisting>
|
|
|
|
-Here is a formula: $\frac{1}{\sqrt{c^2}}$
|
|
|
|
-</programlisting>
|
|
|
|
- <para>
|
|
|
|
- You can write display math by enclosing it in double dollar signs:
|
|
|
|
- </para>
|
|
|
|
- <programlisting>
|
|
|
|
-$$\frac{1}{\sqrt{c^2}}$$
|
|
|
|
-</programlisting>
|
|
|
|
- <para>
|
|
|
|
- Gitit can display TeX math in three different ways, depending on
|
|
|
|
- the setting of <literal>math</literal> in the configuration file:
|
|
|
|
- </para>
|
|
|
|
- <orderedlist numeration="arabic">
|
|
|
|
- <listitem>
|
|
|
|
- <para>
|
|
|
|
- <literal>mathml</literal> (default): Math will be converted to
|
|
|
|
- MathML using
|
|
|
|
- <ulink url="http://github.com/jgm/texmath/tree/master">texmath</ulink>.
|
|
|
|
- This method works with IE+mathplayer, Firefox, and Opera, but
|
|
|
|
- not Safari.
|
|
|
|
- </para>
|
|
|
|
- </listitem>
|
|
|
|
- <listitem>
|
|
|
|
- <para>
|
|
|
|
- <literal>jsMath</literal>: Math will be rendered using the
|
|
|
|
- <ulink url="http://www.math.union.edu/~dpvc/jsmath/">jsMath</ulink>
|
|
|
|
- javascript. If you want to use this method, download
|
|
|
|
- <literal>jsMath</literal> and
|
|
|
|
- <literal>jsMath Image Fonts</literal> from the
|
|
|
|
- <ulink url="http://sourceforge.net/project/showfiles.php?group_id=172663">jsMath
|
|
|
|
- download page</ulink>. You’ll have two <literal>.zip</literal>
|
|
|
|
- archives. Unzip them both in the <literal>static/js</literal>
|
|
|
|
- directory (a new subdirectory, <literal>jsMath</literal>, will
|
|
|
|
- be created). This works with all browsers, but is slower and
|
|
|
|
- not as nice looking as MathML.
|
|
|
|
- </para>
|
|
|
|
- </listitem>
|
|
|
|
- <listitem>
|
|
|
|
- <para>
|
|
|
|
- <literal>raw</literal>: Math will be rendered as raw LaTeX
|
|
|
|
- codes.
|
|
|
|
- </para>
|
|
|
|
- </listitem>
|
|
|
|
- </orderedlist>
|
|
|
|
- </sect2>
|
|
|
|
- <sect2 id="restricting-access">
|
|
|
|
- <title>Restricting access</title>
|
|
|
|
- <para>
|
|
|
|
- If you want to limit account creation on your wiki, the easiest
|
|
|
|
- way to do this is to provide an <literal>access-question</literal>
|
|
|
|
- in your configuration file. (See the commented default
|
|
|
|
- configuration file.) Nobody will be able to create an account
|
|
|
|
- without knowing the answer to the access question.
|
|
|
|
- </para>
|
|
|
|
- <para>
|
|
|
|
- Another approach is to use HTTP authentication. (See the config
|
|
|
|
- file comments on <literal>authentication-method</literal>.)
|
|
|
|
- </para>
|
|
|
|
- </sect2>
|
|
|
|
- <sect2 id="authentication-through-github">
|
|
|
|
- <title>Authentication through github</title>
|
|
|
|
- <para>
|
|
|
|
- If you want to authenticate the user from github through oauth2,
|
|
|
|
- you need to register your app with github to obtain a OAuth client
|
|
|
|
- secret and add the following section to your configuration file:
|
|
|
|
- </para>
|
|
|
|
- <programlisting>
|
|
|
|
-[Github]
|
|
|
|
-oauthclientid: 01239456789abcdef012
|
|
|
|
-oauthclientsecret: 01239456789abcdef01239456789abcdef012394
|
|
|
|
-oauthcallback: http://mysite/_githubCallback
|
|
|
|
-oauthoauthorizeendpoint: https://github.com/login/oauth/authorize
|
|
|
|
-oauthaccesstokenendpoint: https://github.com/login/oauth/access_token
|
|
|
|
-## Uncomment if you are checking membership against an organization and change
|
|
|
|
-## gitit-testorg to this organization:
|
|
|
|
-# github-org: gitit-testorg
|
|
|
|
-</programlisting>
|
|
|
|
- <para>
|
|
|
|
- The github authentication uses the scope
|
|
|
|
- <literal>user:email</literal>. This way, gitit gets the email of
|
|
|
|
- the user, and the commit can be assigned to the right author if
|
|
|
|
- the wikidata repository is pushed to github. Additionally, it uses
|
|
|
|
- <literal>read:org</literal> if you uses the option
|
|
|
|
- <literal>github-org</literal> to check membership against an
|
|
|
|
- organization.
|
|
|
|
- </para>
|
|
|
|
- <para>
|
|
|
|
- To push your repository to gitub after each commit, you can add
|
|
|
|
- the file <literal>post-commit</literal> with the content below in
|
|
|
|
- the .git/hooks directory of your wikidata repository.
|
|
|
|
- </para>
|
|
|
|
- <programlisting>
|
|
|
|
-#!/bin/sh
|
|
|
|
-git push origin master 2>> logit
|
|
|
|
-</programlisting>
|
|
|
|
- </sect2>
|
|
|
|
-</sect1>
|
|
|
|
-<sect1 id="plugins">
|
|
|
|
- <title>Plugins</title>
|
|
|
|
- <para>
|
|
|
|
- Plugins are small Haskell programs that transform a wiki page after
|
|
|
|
- it has been converted from Markdown or another source format. See
|
|
|
|
- the example plugins in the <literal>plugins</literal> directory. To
|
|
|
|
- enable a plugin, include the path to the plugin (or its module name)
|
|
|
|
- in the <literal>plugins</literal> field of the configuration file.
|
|
|
|
- (If the plugin name starts with
|
|
|
|
- <literal>Network.Gitit.Plugin.</literal>, gitit will assume that the
|
|
|
|
- plugin is an installed module and will not look for a source file.)
|
|
|
|
- </para>
|
|
|
|
- <para>
|
|
|
|
- Plugin support is enabled by default. However, plugin support makes
|
|
|
|
- the gitit executable considerably larger and more memory-hungry. If
|
|
|
|
- you don’t need plugins, you may want to compile gitit without plugin
|
|
|
|
- support. To do this, unset the <literal>plugins</literal> Cabal
|
|
|
|
- flag:
|
|
|
|
- </para>
|
|
|
|
- <programlisting>
|
|
|
|
-cabal install --reinstall gitit -f-plugins
|
|
|
|
-</programlisting>
|
|
|
|
- <para>
|
|
|
|
- Note also that if you compile gitit for executable profiling,
|
|
|
|
- attempts to load plugins will result in <quote>internal error: PAP
|
|
|
|
- object entered!</quote>
|
|
|
|
- </para>
|
|
|
|
-</sect1>
|
|
|
|
-<sect1 id="accessing-the-wiki-through-git">
|
|
|
|
- <title>Accessing the wiki through git</title>
|
|
|
|
- <para>
|
|
|
|
- All the pages and uploaded files are stored in a git repository. By
|
|
|
|
- default, this lives in the <literal>wikidata</literal> directory
|
|
|
|
- (though this can be changed through configuration options). So you
|
|
|
|
- can interact with the wiki using git command line tools:
|
|
|
|
- </para>
|
|
|
|
- <programlisting>
|
|
|
|
-git clone ssh://my.server.edu/path/of/wiki/wikidata
|
|
|
|
-cd wikidata
|
|
|
|
-vim Front\ Page.page # edit the page
|
|
|
|
-git commit -m "Added message about wiki etiquette" Front\ Page.page
|
|
|
|
-git push
|
|
|
|
-</programlisting>
|
|
|
|
- <para>
|
|
|
|
- If you now look at the Front Page on the wiki, you should see your
|
|
|
|
- changes reflected there. Note that the pages all have the extension
|
|
|
|
- <literal>.page</literal>.
|
|
|
|
- </para>
|
|
|
|
- <para>
|
|
|
|
- If you are using the darcs or mercurial backend, the commands will
|
|
|
|
- be slightly different. See the documentation for your VCS for
|
|
|
|
- details.
|
|
|
|
- </para>
|
|
|
|
-</sect1>
|
|
|
|
-<sect1 id="performance">
|
|
|
|
- <title>Performance</title>
|
|
|
|
- <sect2 id="caching">
|
|
|
|
- <title>Caching</title>
|
|
|
|
- <para>
|
|
|
|
- By default, gitit does not cache content. If your wiki receives a
|
|
|
|
- lot of traffic or contains pages that are slow to render, you may
|
|
|
|
- want to activate caching. To do this, set the configuration option
|
|
|
|
- <literal>use-cache</literal> to <literal>yes</literal>. By
|
|
|
|
- default, rendered pages, highlighted source files, and exported
|
|
|
|
- PDFs will be cached in the <literal>cache</literal> directory.
|
|
|
|
- (Another directory can be specified by setting the
|
|
|
|
- <literal>cache-dir</literal> configuration option.)
|
|
|
|
- </para>
|
|
|
|
- <para>
|
|
|
|
- Cached pages are updated when pages are modified using the web
|
|
|
|
- interface. They are not updated when pages are modified directly
|
|
|
|
- through git or darcs. However, the cache can be refreshed manually
|
|
|
|
- by pressing Ctrl-R when viewing a page, or by sending an HTTP GET
|
|
|
|
- or POST request to <literal>/_expire/path/to/page</literal>, where
|
|
|
|
- <literal>path/to/page</literal> is the name of the page to be
|
|
|
|
- expired.
|
|
|
|
- </para>
|
|
|
|
- <para>
|
|
|
|
- Users who frequently update pages using git or darcs may wish to
|
|
|
|
- add a hook to the repository that makes the appropriate HTTP
|
|
|
|
- request to expire pages when they are updated. To facilitate such
|
|
|
|
- hooks, the gitit cabal package includes an executable
|
|
|
|
- <literal>expireGititCache</literal>. Assuming you are running
|
|
|
|
- gitit at port 5001 on localhost, and the environment variable
|
|
|
|
- <literal>CHANGED_FILES</literal> contains a list of the files that
|
|
|
|
- have changed, you can expire their cached versions using
|
|
|
|
- </para>
|
|
|
|
- <programlisting>
|
|
|
|
-expireGititCache http://localhost:5001 $CHANGED_FILES
|
|
|
|
-</programlisting>
|
|
|
|
- <para>
|
|
|
|
- Or you can specify the files directly:
|
|
|
|
- </para>
|
|
|
|
- <programlisting>
|
|
|
|
-expireGititCache http://localhost:5001 "Front Page.page" foo/bar/baz.c
|
|
|
|
-</programlisting>
|
|
|
|
- <para>
|
|
|
|
- This program will return a success status (0) if the page has been
|
|
|
|
- successfully expired (or if it was never cached in the first
|
|
|
|
- place), and a failure status (> 0) otherwise.
|
|
|
|
- </para>
|
|
|
|
- <para>
|
|
|
|
- The cache is persistent through restarts of gitit. To expire all
|
|
|
|
- cached pages, simply remove the <literal>cache</literal>
|
|
|
|
- directory.
|
|
|
|
- </para>
|
|
|
|
- </sect2>
|
|
|
|
- <sect2 id="idle">
|
|
|
|
- <title>Idle</title>
|
|
|
|
- <para>
|
|
|
|
- By default, GHC’s runtime will repeatedly attempt to collect
|
|
|
|
- garbage when an executable like Gitit is idle. This means that
|
|
|
|
- gitit will, after the first page request, never use 0% CPU time
|
|
|
|
- and sleep, but will use ~1%. This can be bad for battery life,
|
|
|
|
- among other things.
|
|
|
|
- </para>
|
|
|
|
- <para>
|
|
|
|
- To fix this, one can disable the idle-time GC with the runtime
|
|
|
|
- flag <literal>-I0</literal>:
|
|
|
|
- </para>
|
|
|
|
- <programlisting>
|
|
|
|
-gitit -f my.conf +RTS -I0 -RTS
|
|
|
|
-</programlisting>
|
|
|
|
- </sect2>
|
|
|
|
-</sect1>
|
|
|
|
-<sect1 id="using-gitit-with-apache">
|
|
|
|
- <title>Using gitit with apache</title>
|
|
|
|
- <para>
|
|
|
|
- Most users who run a public-facing gitit will want gitit to appear
|
|
|
|
- at a nice URL like <literal>http://wiki.mysite.com</literal> or
|
|
|
|
- <literal>http://mysite.com/wiki</literal> rather than
|
|
|
|
- <literal>http://mysite.com:5001</literal>. This can be achieved
|
|
|
|
- using apache’s <literal>mod_proxy</literal>.
|
|
|
|
- </para>
|
|
|
|
- <sect2 id="proxying-to-httpwiki.mysite.com">
|
|
|
|
- <title>Proxying to <literal>http://wiki.mysite.com</literal></title>
|
|
|
|
- <para>
|
|
|
|
- Set up your DNS so that <literal>http://wiki.mysite.com</literal>
|
|
|
|
- maps to your server’s IP address. Make sure that the
|
|
|
|
- <literal>mod_proxy</literal>, <literal>mod_proxy_http</literal>
|
|
|
|
- and <literal>mod_rewrite</literal> modules are loaded, and set up
|
|
|
|
- a virtual host with the following configuration:
|
|
|
|
- </para>
|
|
|
|
- <programlisting>
|
|
|
|
-<VirtualHost *>
|
|
|
|
- ServerName wiki.mysite.com
|
|
|
|
- DocumentRoot /var/www/
|
|
|
|
- RewriteEngine On
|
|
|
|
- ProxyPreserveHost On
|
|
|
|
- ProxyRequests Off
|
|
|
|
-
|
|
|
|
- <Proxy *>
|
|
|
|
- Order deny,allow
|
|
|
|
- Allow from all
|
|
|
|
- </Proxy>
|
|
|
|
-
|
|
|
|
- ProxyPassReverse / http://127.0.0.1:5001
|
|
|
|
- RewriteRule ^(.*) http://127.0.0.1:5001$1 [P]
|
|
|
|
-
|
|
|
|
- ErrorLog /var/log/apache2/error.log
|
|
|
|
- LogLevel warn
|
|
|
|
-
|
|
|
|
- CustomLog /var/log/apache2/access.log combined
|
|
|
|
- ServerSignature On
|
|
|
|
-
|
|
|
|
-</VirtualHost>
|
|
|
|
-</programlisting>
|
|
|
|
- <para>
|
|
|
|
- Reload your apache configuration and you should be all set.
|
|
|
|
- </para>
|
|
|
|
- </sect2>
|
|
|
|
- <sect2 id="using-nginx-to-achieve-the-same">
|
|
|
|
- <title>Using nginx to achieve the same</title>
|
|
|
|
- <para>
|
|
|
|
- Drop a file called <literal>wiki.example.com.conf</literal> into
|
|
|
|
- <literal>/etc/nginx/conf.d</literal> (or where ever your
|
|
|
|
- distribution puts it).
|
|
|
|
- </para>
|
|
|
|
- <programlisting>
|
|
|
|
-server {
|
|
|
|
- listen 80;
|
|
|
|
- server_name wiki.example.com
|
|
|
|
- location / {
|
|
|
|
- proxy_pass http://127.0.0.1:5001/;
|
|
|
|
- proxy_set_header X-Real-IP $remote_addr;
|
|
|
|
- proxy_redirect off;
|
|
|
|
- }
|
|
|
|
- access_log /var/log/nginx/wiki.example.com.log main;
|
|
|
|
-}
|
|
|
|
-</programlisting>
|
|
|
|
- <para>
|
|
|
|
- Reload your nginx config and you should be all set.
|
|
|
|
- </para>
|
|
|
|
- </sect2>
|
|
|
|
- <sect2 id="proxying-to-httpmysite.comwiki">
|
|
|
|
- <title>Proxying to <literal>http://mysite.com/wiki</literal></title>
|
|
|
|
- <para>
|
|
|
|
- Make sure the <literal>mod_proxy</literal>,
|
|
|
|
- <literal>mod_headers</literal>, <literal>mod_proxy_http</literal>,
|
|
|
|
- and <literal>mod_proxy_html</literal> modules are loaded.
|
|
|
|
- <literal>mod_proxy_html</literal> is an external module, which can
|
|
|
|
- be obtained <ulink url="http://www.haskell.org/ghc/">here</ulink>
|
|
|
|
- (http://apache.webthing.com/mod_proxy_html/). It rewrites URLs
|
|
|
|
- that occur in web pages. Here we will use it to rewrite gitit’s
|
|
|
|
- links so that they all begin with <literal>/wiki/</literal>.
|
|
|
|
- </para>
|
|
|
|
- <para>
|
|
|
|
- First, tell gitit not to compress pages, since
|
|
|
|
- <literal>mod_proxy_html</literal> needs uncompressed pages to
|
|
|
|
- parse. You can do this by setting the gitit configuration option
|
|
|
|
- </para>
|
|
|
|
- <programlisting>
|
|
|
|
-compress-responses: no
|
|
|
|
-</programlisting>
|
|
|
|
- <para>
|
|
|
|
- Second, modify the link in the
|
|
|
|
- <literal>reset-password-message</literal> in the configuration
|
|
|
|
- file: instead of
|
|
|
|
- </para>
|
|
|
|
- <programlisting>
|
|
|
|
-http://$hostname$:$port$$resetlink$
|
|
|
|
-</programlisting>
|
|
|
|
- <para>
|
|
|
|
- set it to
|
|
|
|
- </para>
|
|
|
|
- <programlisting>
|
|
|
|
-http://$hostname$/wiki$resetlink$
|
|
|
|
-</programlisting>
|
|
|
|
- <para>
|
|
|
|
- Restart gitit.
|
|
|
|
- </para>
|
|
|
|
- <para>
|
|
|
|
- Now add the following lines to the apache configuration file for
|
|
|
|
- the <literal>mysite.com</literal> server:
|
|
|
|
- </para>
|
|
|
|
- <programlisting>
|
|
|
|
-# These commands will proxy /wiki/ to port 5001
|
|
|
|
-
|
|
|
|
-ProxyRequests Off
|
|
|
|
-
|
|
|
|
-<Proxy *>
|
|
|
|
- Order deny,allow
|
|
|
|
- Allow from all
|
|
|
|
-</Proxy>
|
|
|
|
-
|
|
|
|
-ProxyPass /wiki/ http://127.0.0.1:5001/
|
|
|
|
-
|
|
|
|
-<Location /wiki/>
|
|
|
|
- SetOutputFilter proxy-html
|
|
|
|
- ProxyPassReverse /
|
|
|
|
- ProxyHTMLURLMap / /wiki/
|
|
|
|
- ProxyHTMLDocType "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>" XHTML
|
|
|
|
- RequestHeader unset Accept-Encoding
|
|
|
|
-</Location>
|
|
|
|
-</programlisting>
|
|
|
|
- <para>
|
|
|
|
- Reload your apache configuration and you should be set.
|
|
|
|
- </para>
|
|
|
|
- <para>
|
|
|
|
- For further information on the use of
|
|
|
|
- <literal>mod_proxy_http</literal> to rewrite URLs, see the
|
|
|
|
- <ulink url="http://apache.webthing.com/mod_proxy_html/guide.html"><literal>mod_proxy_html</literal>
|
|
|
|
- guide</ulink>.
|
|
|
|
- </para>
|
|
|
|
- </sect2>
|
|
|
|
-</sect1>
|
|
|
|
-<sect1 id="using-gitit-as-a-library">
|
|
|
|
- <title>Using gitit as a library</title>
|
|
|
|
- <para>
|
|
|
|
- By importing the module <literal>Network.Gitit</literal>, you can
|
|
|
|
- include a gitit wiki (or several of them) in another happstack
|
|
|
|
- application. There are some simple examples in the haddock
|
|
|
|
- documentation for <literal>Network.Gitit</literal>.
|
|
|
|
- </para>
|
|
|
|
-</sect1>
|
|
|
|
-<sect1 id="reporting-bugs">
|
|
|
|
- <title>Reporting bugs</title>
|
|
|
|
- <para>
|
|
|
|
- Bugs may be reported (and feature requests filed) at
|
|
|
|
- <ulink url="http://code.google.com/p/gitit/issues/list">http://code.google.com/p/gitit/issues/list</ulink>.
|
|
|
|
- </para>
|
|
|
|
- <para>
|
|
|
|
- There is a mailing list for users and developers at
|
|
|
|
- <ulink url="http://groups.google.com/group/gitit-discuss">http://groups.google.com/group/gitit-discuss</ulink>.
|
|
|
|
- </para>
|
|
|
|
-</sect1>
|
|
|
|
-<sect1 id="acknowledgements">
|
|
|
|
- <title>Acknowledgements</title>
|
|
|
|
- <para>
|
|
|
|
- A number of people have contributed patches:
|
|
|
|
- </para>
|
|
|
|
- <itemizedlist spacing="compact">
|
|
|
|
- <listitem>
|
|
|
|
- <para>
|
|
|
|
- Gwern Branwen helped to optimize gitit and wrote the
|
|
|
|
- InterwikiPlugin. He also helped with the Feed module.
|
|
|
|
- </para>
|
|
|
|
- </listitem>
|
|
|
|
- <listitem>
|
|
|
|
- <para>
|
|
|
|
- Simon Michael contributed the patch adding RST support.
|
|
|
|
- </para>
|
|
|
|
- </listitem>
|
|
|
|
- <listitem>
|
|
|
|
- <para>
|
|
|
|
- Henry Laxen added support for password resets and helped with
|
|
|
|
- the apache proxy instructions.
|
|
|
|
- </para>
|
|
|
|
- </listitem>
|
|
|
|
- <listitem>
|
|
|
|
- <para>
|
|
|
|
- Anton van Straaten made the process of page generation more
|
|
|
|
- modular by adding Gitit.ContentTransformer.
|
|
|
|
- </para>
|
|
|
|
- </listitem>
|
|
|
|
- <listitem>
|
|
|
|
- <para>
|
|
|
|
- Robin Green helped improve the plugin API and interface, and
|
|
|
|
- fixed a security problem with the reset password code.
|
|
|
|
- </para>
|
|
|
|
- </listitem>
|
|
|
|
- <listitem>
|
|
|
|
- <para>
|
|
|
|
- Thomas Hartman helped improve the index page, making directory
|
|
|
|
- browsing persistent, and fixed a bug in template recompilation.
|
|
|
|
- </para>
|
|
|
|
- </listitem>
|
|
|
|
- <listitem>
|
|
|
|
- <para>
|
|
|
|
- Justin Bogner improved the appearance of the preview button.
|
|
|
|
- </para>
|
|
|
|
- </listitem>
|
|
|
|
- <listitem>
|
|
|
|
- <para>
|
|
|
|
- Kohei Ozaki contributed the ImgTexPlugin.
|
|
|
|
- </para>
|
|
|
|
- </listitem>
|
|
|
|
- <listitem>
|
|
|
|
- <para>
|
|
|
|
- Michael Terepeta improved validation of change descriptions.
|
|
|
|
- </para>
|
|
|
|
- </listitem>
|
|
|
|
- <listitem>
|
|
|
|
- <para>
|
|
|
|
- mightybyte suggested making gitit available as a library, and
|
|
|
|
- contributed a patch to ifLoggedIn that was needed to make gitit
|
|
|
|
- usable with a custom authentication scheme.
|
|
|
|
- </para>
|
|
|
|
- </listitem>
|
|
|
|
- </itemizedlist>
|
|
|
|
- <para>
|
|
|
|
- I am especially grateful to the darcs team for using darcsit for
|
|
|
|
- their public-facing wiki. This has helped immensely in identifying
|
|
|
|
- issues and improving performance.
|
|
|
|
- </para>
|
|
|
|
- <para>
|
|
|
|
- Gitit’s default visual layout is shamelessly borrowed from
|
|
|
|
- Wikipedia. The stylesheets are influenced by Wikipedia’s stylesheets
|
|
|
|
- and by the bluetrip CSS framework (see BLUETRIP-LICENSE). Some of
|
|
|
|
- the icons in <literal>img/icons</literal> come from bluetrip as
|
|
|
|
- well.
|
|
|
|
- </para>
|
|
|
|
-</sect1>
|
|
|