parent
09106a8487
commit
c3ebc2b9c6
@ -0,0 +1,22 @@ |
||||
{ nixpkgs ? import <nixpkgs> {}, compiler ? "default"}: |
||||
let |
||||
inherit (nixpkgs) pkgs; |
||||
haskellPackages = if compiler == "default" |
||||
then pkgs.haskellPackages |
||||
else pkgs.haskell.packages.${compiler}; |
||||
mcwhirter-io = haskellPackages.callPackage ./mcwhirter-io.nix {}; |
||||
in |
||||
nixpkgs.stdenv.mkDerivation { |
||||
name = "mcwhirter-io-website"; |
||||
buildInputs = [ mcwhirter-io ]; |
||||
src = ./.; |
||||
buildPhase = '' |
||||
echo "Setting LC_ALL to C.UTF-8 to avoid invalid byte sequence." |
||||
export LC_ALL=C.UTF-8 |
||||
site build |
||||
''; |
||||
installPhase = '' |
||||
mkdir $out |
||||
cp -R _site/* $out |
||||
''; |
||||
} |
@ -0,0 +1,11 @@ |
||||
{ mkDerivation, base, hakyll, stdenv }: |
||||
mkDerivation { |
||||
pname = "mcwhirter-io"; |
||||
version = "0.1.0.0"; |
||||
src = ./.; |
||||
isLibrary = false; |
||||
isExecutable = true; |
||||
executableHaskellDepends = [ base hakyll ]; |
||||
license = "unknown"; |
||||
hydraPlatforms = stdenv.lib.platforms.none; |
||||
} |
@ -0,0 +1,26 @@ |
||||
{ |
||||
"niv": { |
||||
"branch": "master", |
||||
"description": "Easy dependency management for Nix projects", |
||||
"homepage": "https://github.com/nmattia/niv", |
||||
"owner": "nmattia", |
||||
"repo": "niv", |
||||
"rev": "dd13098d01eaa6be68237e7e38f96782b0480755", |
||||
"sha256": "1cfjdbsn0219fjzam1k7nqzkz8fb1ypab50rhyj026qbklqq2kvq", |
||||
"type": "tarball", |
||||
"url": "https://github.com/nmattia/niv/archive/dd13098d01eaa6be68237e7e38f96782b0480755.tar.gz", |
||||
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz" |
||||
}, |
||||
"nixpkgs": { |
||||
"branch": "nixpkgs-unstable", |
||||
"description": "A read-only mirror of NixOS/nixpkgs tracking the released channels. Send issues and PRs to", |
||||
"homepage": "https://github.com/NixOS/nixpkgs", |
||||
"owner": "NixOS", |
||||
"repo": "nixpkgs-channels", |
||||
"rev": "10100a97c8964e82b30f180fda41ade8e6f69e41", |
||||
"sha256": "011f36kr3c1ria7rag7px26bh73d1b0xpqadd149bysf4hg17rln", |
||||
"type": "tarball", |
||||
"url": "https://github.com/NixOS/nixpkgs-channels/archive/10100a97c8964e82b30f180fda41ade8e6f69e41.tar.gz", |
||||
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz" |
||||
} |
||||
} |
@ -0,0 +1,134 @@ |
||||
# This file has been generated by Niv. |
||||
|
||||
let |
||||
|
||||
# |
||||
# The fetchers. fetch_<type> fetches specs of type <type>. |
||||
# |
||||
|
||||
fetch_file = pkgs: spec: |
||||
if spec.builtin or true then |
||||
builtins_fetchurl { inherit (spec) url sha256; } |
||||
else |
||||
pkgs.fetchurl { inherit (spec) url sha256; }; |
||||
|
||||
fetch_tarball = pkgs: spec: |
||||
if spec.builtin or true then |
||||
builtins_fetchTarball { inherit (spec) url sha256; } |
||||
else |
||||
pkgs.fetchzip { inherit (spec) url sha256; }; |
||||
|
||||
fetch_git = spec: |
||||
builtins.fetchGit { url = spec.repo; inherit (spec) rev ref; }; |
||||
|
||||
fetch_builtin-tarball = spec: |
||||
builtins.trace |
||||
'' |
||||
WARNING: |
||||
The niv type "builtin-tarball" will soon be deprecated. You should |
||||
instead use `builtin = true`. |
||||
|
||||
$ niv modify <package> -a type=tarball -a builtin=true |
||||
'' |
||||
builtins_fetchTarball { inherit (spec) url sha256; }; |
||||
|
||||
fetch_builtin-url = spec: |
||||
builtins.trace |
||||
'' |
||||
WARNING: |
||||
The niv type "builtin-url" will soon be deprecated. You should |
||||
instead use `builtin = true`. |
||||
|
||||
$ niv modify <package> -a type=file -a builtin=true |
||||
'' |
||||
(builtins_fetchurl { inherit (spec) url sha256; }); |
||||
|
||||
# |
||||
# Various helpers |
||||
# |
||||
|
||||
# The set of packages used when specs are fetched using non-builtins. |
||||
mkPkgs = sources: |
||||
let |
||||
sourcesNixpkgs = |
||||
import (builtins_fetchTarball { inherit (sources.nixpkgs) url sha256; }) {}; |
||||
hasNixpkgsPath = builtins.any (x: x.prefix == "nixpkgs") builtins.nixPath; |
||||
hasThisAsNixpkgsPath = <nixpkgs> == ./.; |
||||
in |
||||
if builtins.hasAttr "nixpkgs" sources |
||||
then sourcesNixpkgs |
||||
else if hasNixpkgsPath && ! hasThisAsNixpkgsPath then |
||||
import <nixpkgs> {} |
||||
else |
||||
abort |
||||
'' |
||||
Please specify either <nixpkgs> (through -I or NIX_PATH=nixpkgs=...) or |
||||
add a package called "nixpkgs" to your sources.json. |
||||
''; |
||||
|
||||
# The actual fetching function. |
||||
fetch = pkgs: name: spec: |
||||
|
||||
if ! builtins.hasAttr "type" spec then |
||||
abort "ERROR: niv spec ${name} does not have a 'type' attribute" |
||||
else if spec.type == "file" then fetch_file pkgs spec |
||||
else if spec.type == "tarball" then fetch_tarball pkgs spec |
||||
else if spec.type == "git" then fetch_git spec |
||||
else if spec.type == "builtin-tarball" then fetch_builtin-tarball spec |
||||
else if spec.type == "builtin-url" then fetch_builtin-url spec |
||||
else |
||||
abort "ERROR: niv spec ${name} has unknown type ${builtins.toJSON spec.type}"; |
||||
|
||||
# Ports of functions for older nix versions |
||||
|
||||
# a Nix version of mapAttrs if the built-in doesn't exist |
||||
mapAttrs = builtins.mapAttrs or ( |
||||
f: set: with builtins; |
||||
listToAttrs (map (attr: { name = attr; value = f attr set.${attr}; }) (attrNames set)) |
||||
); |
||||
|
||||
# fetchTarball version that is compatible between all the versions of Nix |
||||
builtins_fetchTarball = { url, sha256 }@attrs: |
||||
let |
||||
inherit (builtins) lessThan nixVersion fetchTarball; |
||||
in |
||||
if lessThan nixVersion "1.12" then |
||||
fetchTarball { inherit url; } |
||||
else |
||||
fetchTarball attrs; |
||||
|
||||
# fetchurl version that is compatible between all the versions of Nix |
||||
builtins_fetchurl = { url, sha256 }@attrs: |
||||
let |
||||
inherit (builtins) lessThan nixVersion fetchurl; |
||||
in |
||||
if lessThan nixVersion "1.12" then |
||||
fetchurl { inherit url; } |
||||
else |
||||
fetchurl attrs; |
||||
|
||||
# Create the final "sources" from the config |
||||
mkSources = config: |
||||
mapAttrs ( |
||||
name: spec: |
||||
if builtins.hasAttr "outPath" spec |
||||
then abort |
||||
"The values in sources.json should not have an 'outPath' attribute" |
||||
else |
||||
spec // { outPath = fetch config.pkgs name spec; } |
||||
) config.sources; |
||||
|
||||
# The "config" used by the fetchers |
||||
mkConfig = |
||||
{ sourcesFile ? ./sources.json |
||||
, sources ? builtins.fromJSON (builtins.readFile sourcesFile) |
||||
, pkgs ? mkPkgs sources |
||||
}: rec { |
||||
# The sources, i.e. the attribute set of spec name to spec |
||||
inherit sources; |
||||
|
||||
# The "pkgs" (evaluated nixpkgs) to use for e.g. non-builtin fetchers |
||||
inherit pkgs; |
||||
}; |
||||
in |
||||
mkSources (mkConfig {}) // { __functor = _: settings: mkSources (mkConfig settings); } |
@ -0,0 +1,45 @@ |
||||
let |
||||
sources = import ./nix/sources.nix; |
||||
in |
||||
{ compiler ? "ghc883" |
||||
, pkgs ? import sources.nixpkgs { } |
||||
}: |
||||
|
||||
let |
||||
inherit (pkgs.lib.trivial) flip pipe; |
||||
inherit (pkgs.haskell.lib) appendPatch appendConfigureFlags; |
||||
|
||||
haskellPackages = pkgs.haskell.packages.${compiler}.override { |
||||
overrides = hpNew: hpOld: { |
||||
hakyll = |
||||
pipe |
||||
hpOld.hakyll |
||||
[ (flip appendPatch ./hakyll.patch) |
||||
(flip appendConfigureFlags [ "-f" "watchServer" "-f" "previewServer" ]) |
||||
]; |
||||
|
||||
mcwhirter-io = hpNew.callCabal2nix "mcwhirter-io" ./. { }; |
||||
|
||||
niv = import sources.niv { }; |
||||
}; |
||||
}; |
||||
|
||||
project = haskellPackages.mcwhirter-io; |
||||
in |
||||
{ |
||||
project = project; |
||||
|
||||
shell = haskellPackages.shellFor { |
||||
packages = p: with p; [ |
||||
project |
||||
]; |
||||
buildInputs = with haskellPackages; [ |
||||
ghcid |
||||
hlint # or ormolu |
||||
niv |
||||
pkgs.cacert # needed for niv |
||||
pkgs.nix # needed for niv |
||||
]; |
||||
withHoogle = true; |
||||
}; |
||||
} |
Loading…
Reference in new issue