about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--pkgs/default.nix3
-rw-r--r--pkgs/profpatsch/warpspeed/default.nix34
2 files changed, 37 insertions, 0 deletions
diff --git a/pkgs/default.nix b/pkgs/default.nix
index 1b8665dc..5f3d6d66 100644
--- a/pkgs/default.nix
+++ b/pkgs/default.nix
@@ -56,6 +56,9 @@ let
     };
     profpatsch = pkgs.recurseIntoAttrs {
       display-infos = callPackage ./profpatsch/display-infos {};
+      warpspeed = callPackage ./profpatsch/warpspeed {
+        inherit (pkgs.haskellPackages) ghcWithPackages;
+      };
     };
     sternenseemann = pkgs.recurseIntoAttrs {
       spacecookie = pkgs.haskellPackages.callPackage ./sternenseemann/spacecookie {};
diff --git a/pkgs/profpatsch/warpspeed/default.nix b/pkgs/profpatsch/warpspeed/default.nix
new file mode 100644
index 00000000..a73169b5
--- /dev/null
+++ b/pkgs/profpatsch/warpspeed/default.nix
@@ -0,0 +1,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}
+''