1
0
Fork 0
nixos-config/overlays/writeHaskellScript.nix

74 lines
2.8 KiB
Nix
Raw Normal View History

2020-05-27 13:20:08 +00:00
self: super: {
haskellList = list: ''["${builtins.concatStringsSep ''", "'' list}"]'';
2020-06-05 22:42:41 +00:00
writeHaskellScript = { name ? "haskell-script", bins ? [ ], imports ? [ ] }:
2020-05-27 13:20:08 +00:00
code:
self.writers.makeBinWriter {
compileScript = ''
cp $contentPath ${name}.hs
2020-06-05 22:42:41 +00:00
${self.scriptGhc}/bin/ghc ${name}.hs -threaded -Wall -Wno-unused-top-binds -Wno-missing-signatures -Wno-type-defaults -Wno-unused-imports -Werror
2020-05-27 13:20:08 +00:00
mv ${name} $out
${self.binutils-unwrapped}/bin/strip --strip-unneeded "$out"
'';
} "/bin/${name}" ''
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ExtendedDefaultRules #-}
{-# LANGUAGE MultiWayIf #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE ViewPatterns #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE TupleSections #-}
import Shh
import Relude
import Say
import qualified Relude.Unsafe as Unsafe
import qualified Data.ByteString.Lazy as LBS
import qualified Data.ByteString as BS
import qualified Data.Text as Text
import System.Environment (getArgs)
import Control.Exception (bracket, try)
import Data.String.Interpolate (i)
import Control.Concurrent.Async
${builtins.concatStringsSep "\n" (map (x: "import ${x}") imports)}
-- Load binaries from Nix packages. The dependencies will be captured
-- in the closure.
loadFromBins (${
self.haskellList
(builtins.map toString (bins ++ [ self.coreutils self.nix ]))
} :: [String])
getNivPath :: Text -> Text -> IO Text
getNivPath sources channel = do
let expression = [i|(import #{sources}/nix/sources.nix).#{channel}|] :: String
nix_build ["-Q", "-E", expression, "--no-out-link"] &> devNull
escaped <- nix_instantiate ["--eval" :: String, "-E", [i|toString #{expression}|]] |> captureTrim
pure . Text.dropAround ('"' ==) . decodeUtf8 . trim $ escaped
myNixPath :: Text -> IO [String]
myNixPath path = concat <$> mapM getNivAssign ["home-manager", "nixpkgs", "unstable"]
where
tag name str = ["-I", [i|#{name :: Text}=#{str :: Text}|]] :: [String]
getNivAssign name = tag name <$> getNivPath path name
2020-10-12 00:33:25 +00:00
buildSystemParams :: [String]
buildSystemParams = ["<nixpkgs/nixos>", "-A", "system"]
2020-10-01 00:32:51 +00:00
remoteBuildParams :: [String]
2020-10-07 12:30:19 +00:00
remoteBuildParams = ["--builders", "@/etc/nix/machines", "--max-jobs", "1"]
2020-10-01 00:32:51 +00:00
2020-05-27 13:20:08 +00:00
main :: IO ()
${code}
'';
get-niv-path = self.writeHaskellScript { name = "get-niv-path"; } ''
main = do
[sources, channel] <- fmap toText <$> getArgs
path <- getNivPath sources channel
say path
'';
}