All Projects → jyp → Styx

jyp / Styx

Licence: gpl-2.0
A nix-based Haskell project manager

Programming Languages

haskell
3896 projects
  • Styx: a nix-based multi-repo Haskell project manager

"Styx: there is no looking back."

Styx is a convenient wrapper around cabal2nix, nix-shell and cabal new-.

** Installation

  • get nix: https://nixos.org/nix/

  • install the prerequisites (cabal2nix and cabal)

    #+BEGIN_SRC shell nix-env -f "" -iA haskellPackages.cabal2nix nix-env -f "" -iA haskellPackages.cabal-install #+END_SRC

  • install styx: #+BEGIN_SRC shell nix-env -f "" -iA haskellPackages.styx #+END_SRC

** Configuration

In a directory of your choice, create a styx.yaml file like so:

#+BEGIN_EXAMPLE

List the packages that you edit locally and want compiled "all the time", by cabal:

local-packages: my-main-package: # package name location: main # location on your disk (directory) my-local-dep: # package name location: dep # location on your disk (directory)

Optionally, list patched or cutting edge packages that you depend on.

These will be compiled only once, by nix.

source-deps: mtl: location: https://github.com/mrawesome/awsm-patched-version-of-mtl.git # revision: cc9a31305421f6bc72cc1f107f1270bd178c78a1 # optional

Optionally, add other haskell nix packages to depend on.

Normally this is not necessary, because nix will track the dependencies on its own.

Thus this section is mostly useful for throw-away projects which do not have a well-formed cabal file.

nix-deps: - criterion - gasp - lens - statistics

In case you depend on other non-haskell tools or libs.

non-haskell-deps: - z3

Optionally, one can ask for a specific version of nixpkgs:

nixpkgs: commit: 8ef3eaeb4e531929ec29a880cb4c67f790e5eb70 sha256: 4d2fae900d2d99ea294f4f412289af77152ac21d7b2e9ff23581ef11ea00831f

or like this: url: https://github.com/NixOS/nixpkgs-channels/archive/nixos-14.12.tar.gz

Optionally, one can ask for a specific version of ghc, as known by nixpkgs

default-compiler: ghc801 #+END_EXAMPLE

Then, the command

#+BEGIN_SRC shell styx configure #+END_SRC

will create one nix file for each external package, a suitable shell.nix, and a cabal.project file.

** Use

You can then access the sandbox, inside the nix shell, like so: #+BEGIN_SRC nix-shell .styx/shell.nix --run "cabal ..." #+END_SRC

Styx provides a couple of convenience commands: #+BEGIN_SRC shell $ styx build # runs cabal new-build in the shell $ styx repl # runs cabal new-repl in the shell $ styx exec # runs cabal exec in the sandbox $ styx cabal # runs cabal in the sandbox #+END_SRC

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].