about summary refs log tree commit diff
path: root/pkgs/profpatsch/warpspeed/default.nix
blob: a73169b5edb381bb7bf11efe3f7d3b644f0d81cd (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
{ lib, runCommand, ghcWithPackages }:

let
  name = "warpspeed-1.0";

  script = builtins.toFile "${name}.hs" ''
    {-# LANGUAGE OverloadedStrings #-}
    module Main where

    import Safe
    import System.Environment (getArgs)
    import System.Exit (die)
    import Network.Wai
    import Network.Wai.Middleware.Static
    import Network.Wai.Handler.Warp
    import Network.HTTP.Types.Status

    main :: IO ()
    main = do
      args <- getArgs
      port <- case headMay args >>= readMay of
        Just p -> pure $ p
        Nothing -> die "please specify a port"
      runEnv port $ static $ \_ resp -> resp $ responseLBS notFound404 [] ""
   '';

   deps = hp: with hp; [ wai-middleware-static warp safe ];

in runCommand name {
  meta.description = "Trivial and very fast static HTTP file server";
} ''
  mkdir -p $out/bin
  ${ghcWithPackages deps}/bin/ghc -O2 -Wall -o "$out/bin/warpspeed" ${script}
''