Skip to content
Generate a derivation of Spago dependencies, and use them to install them into the directory structure used by Spago.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
bin
src
test
.gitignore init Jun 15, 2019
.travis.yml
README.md add this ugly logo Jul 4, 2019
default.nix
logo-256.png
package.json npm bump Jun 16, 2019
packages.dhall update sunde Jun 17, 2019
spago-packages.nix add building via nix store deps sources Jun 29, 2019
spago.dhall handle new sources in spago.dhall using dhall-to-json Jun 17, 2019

README.md

Spago2Nix

Build Status

Generate a derivation of Spago dependencies, and use them to install them into the directory structure used by Spago.

Installation

For now, simply clone this repo and run npm link. Requires a Node runtime and nix-prefetch-git.

Remember to set npm prefix to something like ~/.npm.

Usage

First, generate the spago-packages.nix:

$ spago2nix generate
getting packages..
got 65 packages from Spago list-packages.
# ...
wrote spago-packages.nix

Then install these, optionally with more jobs provided to Nix:

$ spago2nix install -j 100
/nix/store/...-install-spago-style
installing dependencies...
# ...
done.
Wrote install script to .spago2nix/install

Then build the project:

$ spago2nix build
/nix/store/...-build-spago-style
building project...
done.
Wrote build script to .spago2nix/build

When using in your own Nix derivation, the best practice is calling generated scripts from spago-packages.nix:

{ pkgs, stdenv }:

let 
  spagoPkgs = import ./spago-packages.nix { inherit pkgs; };
in
pkgs.stdenv.mkDerivation rec {
  # < ... >
  buildPhase = 
  '' 
    ${spagoPkgs.installSpagoStyle} # == spago2nix install
    ${spagoPkgs.buildSpagoStyle}   # == spago2nix build
  '';
  # < ... >
}

Further Reading

Here is a blog post I did about this project: https://github.com/justinwoo/my-blog-posts/blob/master/posts/2019-06-22-spago2nix-why-and-how.md

Troubleshooting

I get MissingRevOrRepoResult on a package with branch name as a version

Nix gives out the specific constant SHA256 hash for broken Git fetches, so the error is thrown. One of the causes for a broken fetch is wrong checkout revision. Nix supports fetches by commit hash and tags out of the box, but fails at plain branch names.

You can use more verbose reference refs/heads/branch-name at packages.dhall before generating a .nix file. However, the branch name usage is discouraged in Spago (refer to Note here), it's better using a particular commit hash.

You can’t perform that action at this time.