1{-# LANGUAGE DeriveDataTypeable, RecordWildCards #-}
2import Network.Wai.Application.Static
3 ( StaticSettings (..), staticApp, defaultMimeType, defaultListing
4 , defaultMimeTypes, mimeTypeByExt
5 , defaultFileServerSettings, fileSystemLookup
9import Network.Wai.Handler.Warp
10 ( runSettings, defaultSettings, settingsHost, settingsPort
12import System.Console.CmdArgs hiding (def)
13import Text.Printf (printf)
14import System.Directory (canonicalizePath)
15import Control.Monad (unless)
16import Network.Wai.Middleware.Autohead
17import Network.Wai.Middleware.RequestLogger (logStdout)
18import Network.Wai.Middleware.Gzip
19import qualified Data.Map as Map
20import qualified Data.ByteString.Char8 as S8
21import Control.Arrow ((***))
22import Data.Text (pack)
23import Data.String (fromString)
32 , mime :: [(String, String)]
35 deriving (Show, Data, Typeable)
38defaultArgs = Args "." ["index.html", "index.htm"] 3000 False False False [] "*"
42 Args {..} <- cmdArgs defaultArgs
43 let mime' = map (toFilePath *** S8.pack) mime
44 let mimeMap = Map.fromList mime' `Map.union` defaultMimeTypes
45 docroot' <- canonicalizePath docroot
46 unless quiet $ printf "Serving directory %s on port %d with %s index files.\n" docroot' port (if noindex then "no" else show index)
48 . (if verbose then logStdout else id)
50 runSettings defaultSettings
52 , settingsHost = fromString host
53 } $ middle $ staticApp defaultFileServerSettings
54 { ssFolder = fileSystemLookup $ toFilePath docroot
55 , ssIndices = if noindex then [] else map pack index
56 , ssRedirectToIndex = False
57 , ssListing = Just defaultListing
58 , ssGetMimeType = return . mimeTypeByExt mimeMap defaultMimeType . fileName
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list