-
Download
.cabal
file revisions from the public Casa instance instead of Hackage.We believe this change shouldn't affect any end users, but we now depend on https://casa.stackage.org instead of Hackage. If Casa ends up having signficantly worse uptime than Hackage, then users may be affected when trying to use stacklock2nix. Please let us know if this ends up affecting you.
-
Make sure the
psqueues
Haskell package gets thefingertree-psqueue
dep depending on what version ofpsqueues
you're compiling.Added in #39.
-
Change stacklock2nix's handling of Stack's
git
dependencies.A
git
dependency looks like the following instack.yaml
:extra-deps: - git: "https://github.com/haskell-servant/servant-cassava" commit: "f76308b42b9f93a6641c70847cec8ecafbad3abc"
Up until now, stacklock2nix would download Stack's
git
dependencies using Nix'sbuiltins.fetchGit
function.By default, this function doesn't clone the full repository, but only the history of the default branch. This is a problem if you try to specify a commit that is not a parent of the default branch. This may happen if you're developing new functionality in a feature branch that hasn't yet been merged into
master
.stacklock2nix has been changed to additionally specify the
allRefs = true
argument tobuiltins.fetchGit
. This causes the full Git repository to be downloaded, even commits that aren't ancestors of the default branch.Added in #39. Thanks to @isomorpheme for reporting this and coming up with the fix.
It is possible this causes increased download times, especially for repos that are very big.
You may be able to work around this by using Stack's functionality for downloading given URLs, in order to download a tarball of a repository (without any of the Git history).:
extra-deps: - url: "https://github.com/haskell-servant/servant-cassava/archive/f76308b42b9f93a6641c70847cec8ecafbad3abc.tar.gz"
-
Make sure the
digest
Haskell package gets the systemzlib
as an argument.Added in #35.
- Remove
dontCheck
override forhaskeline
innix/build-support/stacklock2nix/suggestedOverlay.nix
.haskeline
is a GHC boot package, so it is not built as a separate Nix derivation. It is distributed with GHC, so it is set tonull
in the Nixpkgs pkg set.
-
A few additional overrides added to
nix/build-support/stacklock2nix/suggestedOverlay.nix
to fix some breakages in test suites caused by QuickCheck-2.14.3. QuickCheck-2.14.3 is included in LTS-20.24, so you'll likely need these fixes if you are using LTS-20.24 or later.Added in #31.
-
Fix override with splitmix argument,
testu01
.Added in #28.
-
A few additional overrides added to
nix/build-support/stacklock2nix/suggestedOverlay.nix
to fix some common problems on Darwin.Added in #28.
-
Fix override with unordered-containers argument,
nothunks
.Added in #26.
-
Add some additional filters to the default
localPkgFilter
argument.Now most files from Haskell.gitignore are filtered out by default.
While this is technically a breaking change, this shouldn't negatively affect most users.
Added in #24.
-
Fixes a bug in the implementation of the new
localPkgFilter
argument added in v2.0.0. This bug is not a correctness problem (so if you accidentally use v2.0.0, you should not get incorrectly built Haskell packages). The bug is just that files will get pulled into the Nix store that you may expect to be filtered out.See #23 for the details.
-
(WARNING: There is a bug in the implementation of this new
localPkgFilter
feature. You are recommended to use v2.0.1 instead of v2.0.0!)Add a
localPkgFilter
argument tostacklock2nix
. This can be used to filter the sources of local Haskell packages.Here's an example of how you might use it:
stacklock2nix { stackYaml = ./stack.yaml; localPkgFilter = defaultLocalPkgFilter: pkgName: path: type: if pkgName == "my-example-haskell-lib" && baseNameOf path == "extra-file" then false else defaultLocalPkgFilter path type; }
This is an example of filtering out a file called
extra-file
from the input source of the Haskell packagemy-example-haskell-lib
.This is a major version bump because if you don't specify the
localPkgFilter
argument tostacklock2nix
, it defaults to using a filter that filters out the.stack-work/
directory, as well as directories likedist-newstyle
. It also passes input files through thelib.cleanSourceFilter
function, which filters out.git/
, as well as a few other types of files.While this is technically a major version bump, most users won't be negatively affected by this change. It is quite likely this won't affect most people.
Added in #22.
-
Add
all-cabal-hashes
as an output fromstacklock2nix
. This can be used as in the "advanced" example:final: prev: { my-example-haskell-stacklock = final.stacklock2nix { stackYaml = ../stack.yaml; all-cabal-hashes = final.fetchFromGitHub { owner = "commercialhaskell"; repo = "all-cabal-hashes"; rev = "9ab160f48cb535719783bc43c0fbf33e6d52fa99"; sha256 = "sha256-Hz/xaCoxe4cJBH3h/KIfjzsrEyD915YEVEK8HFR7nO4="; }; }; my-example-haskell-pkg-set = final.haskell.packages.ghc924.override (oldAttrs: { inherit (final.my-example-haskell-stacklock) all-cabal-hashes; ...
Added in #19.
-
Make sure that
stacklock2nix
will work if the inputall-cabal-hashes
argument is a directory (instead of a tarball).Passing
all-cabal-hashes
as a directory will make the initial build process a little faster (although shouldn't affect future rebuilds).You can easily pass
all-cabal-hashes
as a directory by pulling it down withfetchFromGitHub
like the following:final: prev: { my-stacklock2nix-proj = final.stacklock2nix { stackYaml = ./stack.yaml; ... all-cabal-hashes = final.fetchFromGitHub { owner = "commercialhaskell"; repo = "all-cabal-hashes"; rev = "9ab160f48cb535719783bc43c0fbf33e6d52fa99"; sha256 = "sha256-Hz/xaCoxe4cJBH3h/KIfjzsrEyD915YEVEK8HFR7nO4="; }; }; }
-
Added two new attributes to the attribute set returned from a call to
stacklock2nix
:newPkgSet
andnewPkgSetDevShell
. These two values are similar to the existingpkgSet
anddevShell
attributes. WhereaspkgSet
anddevShell
take thebaseHaskellPkgSet
argument and overlay it with package overrides created from yourstack.yaml
file,newPkgSet
andnewPkgSetDevShell
are a completely new package set, containing only packages from yourstack.yaml
.The effect of this is that
pkgSet
will contain packages that are in Nixpkgs, but not in Stackage. For instance, when usingpkgSet
, you should be able to access the packagepkgSet.termonad
because it is available on Hackage (and in Nixpkgs), even though it is not in any Stackage resolver.However,
newPkgSet
will only contain packages in yourstack.yaml
file. For instance, you'll never be able to accessnewPkgSet.termonad
ornewPkgSet.spago
, because they will likely never be available on Stackage.In general, in your own projects, should you use
pkgSet
ornewPkgSet
?For building your own projects, most of the time
pkgSet
andnewPkgSet
should be similar.newPkgSet
may be slightly safer, since there is almost no chance you accidentally use a Haskell package outside of yourstack.yaml
.pkgSet
may be slightly more convenient depending on what you're trying to do.
-
This is the 1.0 release of
stacklock2nix
. I've testedstacklock2nix
on building a few real-world Haskell projects, and it has worked well.stacklock2nix
is ready to be widely used. -
There have been a some overrides added to
nix/build-support/stacklock2nix/suggestedOverlay.nix
since the 0.2.0 release, but no API changes tostacklock2nix
itself. This would normally be a patch-release (to 0.2.1), but I instead wanted to release version 1.0.
-
Add a
callPackage
argument tostacklock2nix
so that users can easily statically-compile Haskell packages.This could be used like the following:
my-haskell-stacklock = final.stacklock2nix { stackYaml = ./stack.yaml; baseHaskellPkgSet = final.pkgsStatic.haskell.packages.ghc924; callPackage = final.pkgsStatic.callPackage; ... };
-
Make sure
github
types ofextra-deps
instack.yaml
are handled correctly. Previous version did not handlegithub
deps correctly when they had no subdirs.extra-deps
instack.yaml
like the following will now work:extra-deps: - github: "cdepillabout/pretty-simple" commit: "d8ef1b3c2d913a05515b2d1c4fec0b52d2744434"
- Initial release.