1
0
Fork 0
nixos-config/lib/default.nix
2020-04-28 21:37:10 +02:00

115 lines
3.4 KiB
Nix

rec {
colors = {
"foreground" = "#dddbff";
"background" = "#000018";
"black" = "#000000";
"brightBlack" = "#55508f";
"red" = "#e34b4f";
"brightRed" = "#e34b4f";
"green" = "#67b779";
"brightGreen" = "#45b75e";
"yellow" = "#ff9c00";
"brightYellow" = "#ff9c00";
"blue" = "#5c67ff";
"brightBlue" = "#5c67ff";
"magenta" = "#cb85ff";
"brightMagenta" = "#cb85ff";
"cyan" = "#17d0f4";
"brightCyan" = "#17d0f4";
"white" = "#dddbff";
"brightWhite" = "#ffffff";
};
pkgs = import <nixpkgs> { };
unstable = import <unstable> { };
sources = import ../nix/sources.nix;
unBreak = pkg:
pkgs.haskell.lib.overrideCabal pkg (drv: {
broken = false;
doCheck = false;
});
shh = unBreak pkgs.haskellPackages.shh;
ghc = pkgs.ghc.withPackages (p: [
(unBreak p.shh)
p.brittany
p.hlint
p.ghcid
p.cabal-install
p.relude
p.shake
p.hledger-lib
p.dhall
#p.releaser
p.megaparsec
p.pandoc
]);
haskellList = list: ''["${builtins.concatStringsSep ''", "'' list}"]'';
writeHaskellScript =
{ name ? "haskell-script", bins ? [ ], libraries ? [ ], imports ? [ ] }:
code:
pkgs.writers.makeBinWriter {
compileScript = ''
cp $contentPath ${name}.hs
${
pkgs.ghc.withPackages (_:
libraries ++ [
shh
pkgs.haskellPackages.string-interpolate
pkgs.haskellPackages.relude
pkgs.haskellPackages.async
])
}/bin/ghc ${name}.hs -threaded
mv ${name} $out
${pkgs.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 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 (${
haskellList (builtins.map toString (bins ++ [ pkgs.coreutils ]))
} :: [String])
${code}
'';
get-niv-path = writeHaskellScript {
name = "get-niv-path";
bins = [ pkgs.nix ];
imports = [ "System.Console.CmdArgs.Implicit" ];
libraries = [ pkgs.haskellPackages.cmdargs pkgs.haskellPackages.text ];
} ''
trimQuotation = pureProc $ encodeUtf8 . Text.dropAround ('"' ==) . decodeUtf8 . trim
main = do
[sources, channel] <- getArgs
let expr = [i|(import #{sources}).#{channel}|] :: String
nix_build ["-Q", "-E", expr, "--no-out-link"] &> devNull
nix_instantiate ["--eval" :: String, "-E", [i|toString #{expr}|]] |> trimQuotation
'';
home-manager = pkgs.callPackage <home-manager/home-manager> { };
gcRetentionDays = 5;
}