1
0
Fork 0
nixos-config/lib/default.nix

116 lines
3.5 KiB
Nix
Raw Normal View History

2019-07-31 20:59:54 +00:00
rec {
2019-10-19 21:12:20 +00:00
colors = {
"foreground" = "#dddbff";
2019-11-29 18:22:38 +00:00
"background" = "#000018";
2019-10-19 21:12:20 +00:00
"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";
};
2019-10-20 03:28:54 +00:00
pkgs = import <nixpkgs> { };
2019-07-31 21:56:52 +00:00
unstable = import <unstable> { };
2020-05-05 23:40:57 +00:00
unfreePkgs = import <nixpkgs> { config = { allowUnfree = true; }; };
2019-07-25 21:35:59 +00:00
sources = import ../nix/sources.nix;
2019-07-31 23:01:30 +00:00
unBreak = pkg:
2019-10-20 03:28:54 +00:00
pkgs.haskell.lib.overrideCabal pkg (drv: {
2019-07-31 23:01:30 +00:00
broken = false;
doCheck = false;
});
2019-10-20 03:28:54 +00:00
shh = unBreak pkgs.haskellPackages.shh;
2020-04-08 23:41:19 +00:00
ghc = pkgs.ghc.withPackages (p: [
2019-11-02 00:08:43 +00:00
(unBreak p.shh)
p.brittany
p.hlint
p.ghcid
p.cabal-install
2020-01-22 18:14:04 +00:00
p.relude
2019-11-02 00:08:43 +00:00
p.shake
2020-01-07 21:32:56 +00:00
p.hledger-lib
2020-04-28 19:06:46 +00:00
p.dhall
2020-04-08 23:41:19 +00:00
#p.releaser
2020-02-09 19:58:02 +00:00
p.megaparsec
2020-03-29 13:23:28 +00:00
p.pandoc
2019-11-02 00:08:43 +00:00
]);
2019-07-31 09:16:47 +00:00
haskellList = list: ''["${builtins.concatStringsSep ''", "'' list}"]'';
2020-01-22 18:14:04 +00:00
writeHaskellScript =
{ name ? "haskell-script", bins ? [ ], libraries ? [ ], imports ? [ ] }:
2019-07-31 21:56:52 +00:00
code:
2020-04-10 23:42:01 +00:00
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}" ''
2019-07-24 15:24:29 +00:00
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE TemplateHaskell #-}
2019-07-25 21:35:59 +00:00
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ExtendedDefaultRules #-}
2020-01-08 00:14:05 +00:00
{-# LANGUAGE MultiWayIf #-}
2020-01-10 19:32:07 +00:00
{-# LANGUAGE LambdaCase #-}
2020-01-12 01:11:43 +00:00
{-# LANGUAGE ViewPatterns #-}
{-# LANGUAGE ScopedTypeVariables #-}
2020-01-19 16:40:02 +00:00
{-# LANGUAGE NoImplicitPrelude #-}
2020-04-10 23:42:01 +00:00
{-# LANGUAGE TupleSections #-}
2019-07-25 21:35:59 +00:00
2019-07-24 15:24:29 +00:00
import Shh
2020-01-19 16:40:02 +00:00
import Relude
import qualified Relude.Unsafe as Unsafe
2020-04-10 23:42:01 +00:00
import qualified Data.ByteString.Lazy as LBS
2019-07-25 21:35:59 +00:00
import qualified Data.ByteString as BS
2020-01-19 16:40:02 +00:00
import qualified Data.Text as Text
import System.Environment (getArgs)
2020-01-19 18:55:01 +00:00
import Control.Exception (bracket, try)
2020-01-19 16:40:02 +00:00
import Data.String.Interpolate (i)
2020-04-10 23:42:01 +00:00
import Control.Concurrent.Async
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-10-20 03:28:54 +00:00
loadFromBins (${
2019-07-31 23:01:30 +00:00
haskellList (builtins.map toString (bins ++ [ pkgs.coreutils ]))
2019-10-20 03:28:54 +00:00
} :: [String])
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";
2019-07-31 21:56:52 +00:00
bins = [ pkgs.nix ];
imports = [ "System.Console.CmdArgs.Implicit" ];
2019-10-20 03:28:54 +00:00
libraries = [ pkgs.haskellPackages.cmdargs pkgs.haskellPackages.text ];
2019-07-25 21:35:59 +00:00
} ''
2020-01-19 16:40:02 +00:00
trimQuotation = pureProc $ encodeUtf8 . Text.dropAround ('"' ==) . 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
2019-10-20 03:28:54 +00:00
let expr = [i|(import #{sources}).#{channel}|] :: String
2019-07-25 21:35:59 +00:00
nix_build ["-Q", "-E", expr, "--no-out-link"] &> devNull
2019-10-20 03:28:54 +00:00
nix_instantiate ["--eval" :: String, "-E", [i|toString #{expr}|]] |> trimQuotation
2019-07-31 21:56:52 +00:00
'';
home-manager = pkgs.callPackage <home-manager/home-manager> { };
2019-07-26 13:54:30 +00:00
gcRetentionDays = 5;
2019-07-24 15:24:29 +00:00
}