Skip to content

justinwoo/easy-purescript-nix

Folders and files

NameName
Last commit message
Last commit date

Latest commit

117fd96 · Mar 11, 2024
Jul 21, 2023
Jun 12, 2023
Jun 4, 2023
Jun 4, 2023
Oct 6, 2023
Oct 6, 2023
Jun 4, 2023
Mar 11, 2024
Mar 31, 2022
Dec 8, 2018
Jun 15, 2023
Aug 9, 2021
Mar 11, 2024
May 24, 2020
Jun 4, 2023
Jun 16, 2023
Jun 4, 2023
May 5, 2021
May 24, 2020
Jun 1, 2022
May 29, 2021
May 24, 2020
Feb 10, 2020
Jun 6, 2023
Jun 4, 2023
Aug 26, 2021
Jun 28, 2022

Repository files navigation

Easy PureScript Nix

A project for using PureScript and related tooling easily with Nix. Note that the purescript derivation used in nixpkgs is a derivative of the derivation from this project. See default.nix for more information on available versions.

Example usage

See ci.nix in this repo for a Nix expression example to be used with nix-shell.

$ nix-shell ./ci.nix

Or simply clone this repo, cd into it, and type nix-shell (which implicitly calls shell.nix).

Potential questions

How do I use this? (How do I use derivations in Nix?)

I have written about how to use parts of Nix here: https://github.com/justinwoo/nix-shorts

How do I install to my system from here?

Behold:

$ nix-env -f default.nix -iA purs
  # or nix-env -if purs.nix

$ which purs
/home/justin/.nix-profile/bin/purs
$ purs --version
0.14.4

Or by shell.nix:

{ pkgs ? import <nixpkgs> { } }:
let
  easy-ps = import
    (pkgs.fetchFromGitHub {
      owner = "justinwoo";
      repo = "easy-purescript-nix";
      rev = "5716cd791c999b3246b4fe173276b42c50afdd8d";
      sha256 = "1r9lx4xhr42znmwb2x2pzah920klbjbjcivp2f0pnka7djvd2adq";
    }) {
    inherit pkgs;
  };
in
pkgs.mkShell {
  buildInputs = [
    easy-ps.purs-0_14_4
    easy-ps.psc-package
  ];
}

Nix Flakes

There is a flake.nix. To see what the flake.nix provides,

nix flake show github:justinwoo/easy-purescript-nix

You might need the flag --allow-import-from-derivation if you’re on an older version of Nix.

Deluxe nix develop shell

To get a deluxe PureScript development shell which includes the latest versions of everything,

nix develop github:justinwoo/easy-purescript-nix#deluxe

Custom nix develop shell

Create a custom nix develop shell with a flake.nix like this for example:

{
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.05";
    flake-utils.url = "github:numtide/flake-utils";
    easy-purescript-nix.url = "github:justinwoo/easy-purescript-nix";
  };

  outputs = { nixpkgs, flake-utils, easy-purescript-nix, ... }:
    flake-utils.lib.eachDefaultSystem (system:
      let
        pkgs = nixpkgs.legacyPackages.${system};
        easy-ps = easy-purescript-nix.packages.${system};
      in
      {
        devShells = {
          default = pkgs.mkShell {
            name = "purescript-custom-shell";
            buildInputs = [
              easy-ps.purs-0_15_8
              easy-ps.spago
              easy-ps.purescript-language-server
              easy-ps.purs-tidy
              pkgs.nodejs-18_x
              pkgs.esbuild
            ];
            shellHook = ''
              source <(spago --bash-completion-script `which spago`)
              source <(node --completion-bash)
              '';
          };
       };
     }
  );
}

Why was this made?

See the blog post about this here: https://github.com/justinwoo/my-blog-posts/blob/master/posts/2018-10-24-using-purescript-easily-with-nix.md

Raison d'etre: https://github.com/justinwoo/my-blog-posts/blob/master/posts/2019-04-29-why-easy-purescript-nix.md

Credits

Thanks to Pekka (@kaitanie) for making this work on NixOS.

About

Easy PureScript (and other tools) with Nix

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published