2019-07-24 15:24:29 +00:00
|
|
|
let
|
|
|
|
pkgs = import <nixpkgs> {};
|
|
|
|
unstable = import <unstable> {};
|
2019-07-25 21:35:59 +00:00
|
|
|
sources = import ../nix/sources.nix;
|
2019-07-24 15:24:29 +00:00
|
|
|
shh = unstable.haskell.lib.overrideCabal unstable.haskellPackages.shh (drv: {
|
|
|
|
broken = false;
|
|
|
|
doCheck = false;
|
|
|
|
});
|
2019-07-31 09:16:47 +00:00
|
|
|
haskellList = list: ''["${builtins.concatStringsSep ''", "'' list}"]'';
|
2019-07-24 15:24:29 +00:00
|
|
|
writeHaskellScript = { name ? "haskell-script", bins ? [pkgs.coreutils], libraries ? [], imports ? []}: code:
|
2019-07-25 21:35:59 +00:00
|
|
|
unstable.writers.writeHaskellBin name { libraries = libraries ++ [shh unstable.haskellPackages.string-interpolate ]; } ''
|
2019-07-24 15:24:29 +00:00
|
|
|
{-# LANGUAGE DeriveDataTypeable #-}
|
|
|
|
{-# LANGUAGE TemplateHaskell #-}
|
2019-07-25 21:35:59 +00:00
|
|
|
{-# LANGUAGE QuasiQuotes #-}
|
|
|
|
|
2019-07-24 15:24:29 +00:00
|
|
|
import Shh
|
2019-07-25 21:35:59 +00:00
|
|
|
import Data.String.Interpolate (i)
|
|
|
|
import qualified Data.ByteString as BS
|
|
|
|
import qualified Data.ByteString.Lazy as LBS
|
2019-07-28 22:51:10 +00:00
|
|
|
import qualified Data.ByteString.Lazy.Char8 as LBSC
|
2019-07-25 21:35:59 +00:00
|
|
|
import qualified Data.Text as T
|
|
|
|
import qualified Data.Text.Lazy as LT
|
|
|
|
import qualified Data.Text.Encoding as TE
|
|
|
|
import qualified Data.Text.Lazy.Encoding as LTE
|
2019-07-28 22:51:10 +00:00
|
|
|
import System.Environment (getArgs)
|
2019-07-24 15:24:29 +00:00
|
|
|
${builtins.concatStringsSep "\n" (map (x: "import ${x}") imports)}
|
|
|
|
|
|
|
|
-- Load binaries from Nix packages. The dependencies will be captured
|
|
|
|
-- in the closure.
|
2019-07-31 09:16:47 +00:00
|
|
|
loadFromBins ${haskellList (builtins.map toString bins)}
|
2019-07-24 15:24:29 +00:00
|
|
|
|
|
|
|
${code}
|
|
|
|
'';
|
2019-07-26 13:54:30 +00:00
|
|
|
get-niv-path = writeHaskellScript {
|
2019-07-25 21:35:59 +00:00
|
|
|
name = "get-niv-path";
|
|
|
|
bins = [pkgs.nix];
|
|
|
|
imports = ["System.Console.CmdArgs.Implicit"];
|
|
|
|
libraries = [ unstable.haskellPackages.cmdargs unstable.haskellPackages.text ];
|
|
|
|
} ''
|
|
|
|
|
|
|
|
trimQuotation = pureProc $ LTE.encodeUtf8 . LT.dropAround ('"' ==) . LTE.decodeUtf8 . trim
|
2019-07-24 15:24:29 +00:00
|
|
|
|
2019-07-25 21:35:59 +00:00
|
|
|
main = do
|
2019-07-28 22:51:10 +00:00
|
|
|
[sources, channel] <- getArgs
|
|
|
|
let expr = [i|(import #{sources}).#{channel}|]
|
2019-07-25 21:35:59 +00:00
|
|
|
nix_build ["-Q", "-E", expr, "--no-out-link"] &> devNull
|
|
|
|
nix_instantiate ["--eval", "-E", [i|toString #{expr}|]] |> trimQuotation
|
|
|
|
'';
|
|
|
|
in {
|
2019-07-31 09:16:47 +00:00
|
|
|
inherit writeHaskellScript get-niv-path unstable sources haskellList;
|
2019-07-26 13:54:30 +00:00
|
|
|
niv = (import sources.niv {}).niv;
|
|
|
|
home-manager = pkgs.callPackage <home-manager/home-manager> {};
|
|
|
|
gcRetentionDays = 5;
|
2019-07-24 15:24:29 +00:00
|
|
|
}
|