Nix support for the Unison programming language
NOTE: If you don't already have Nix installed, follow the instructions on the Nix site.
If your version of Nix supports Nix flakes:
nix profile install github:ceedubs/unison-nix#ucm
Currenty ARM builds aren't published for UCM, so if you are on an ARM-based Mac (M1/M2), then you may need to run:
nix profile install --system x86_64-darwin github:ceedubs/unison-nix#ucm
Use from home-manager:
In your home-manager's flake.nix, reference this repository under inputs, e.g.:
unison-lang = {
url = "github:ceedubs/unison-nix";
inputs.nixpkgs.follows = "nixpkgs";
};then add the unison-lang overlay:
pkgs = import nixpkgs {
inherit system;
overlays = [ unison-lang.overlay ];
};Finally, in your home.nix, just add the unison-ucm package as you normally would.
An example is available here.
Older versions of Nix:
nix-env -iA unison-ucm -f https://github.com/ceedubs/unison-nix/archive/trunk.tar.gz
Currenty ARM builds aren't published for UCM, so if you are on an ARM-based Mac (M1/M2), then you may need to run:
nix-env -iA unison-ucm --arg system \"x86_64-darwin\" -f https://github.com/ceedubs/unison-nix/archive/trunk.tar.gz
If your version of Nix supports Nix flakes:
nix run github:ceedubs/unison-nix#ucm
Currenty ARM builds aren't published for UCM, so if you are on an ARM-based Mac (M1/M2), then you may need to run:
nix run --system x86_64-darwin github:ceedubs/unison-nix#ucm
Older versions of Nix:
nix-build https://github.com/ceedubs/unison-nix/archive/trunk.tar.gz -A unison-ucm
Currenty ARM builds aren't published for UCM, so if you are on an ARM-based Mac (M1/M2), then you may need to run:
nix-build https://github.com/ceedubs/unison-nix/archive/trunk.tar.gz --arg system \"x86_64-darwin\" -A unison-ucm
This will create a symlink named result in your current directory. Now run:
./result/bin/ucmOnce you are done trying out Unison you can rm ./result.
ucm: the Unison code manager- This is named
unison-ucmin the overlay and for older versions of Nix (pre-flakes)
- This is named
vim-unison: a vim plugin providing syntax highlighting for Unison files- This is provided as
vimPlugins.vim-unisonin the overlay
- This is provided as
overlay: A nixpkgs overlay that adds the Unison packages in the relevant places (ex:vim-unisoninvimPlugins.vim-unison)buildUnisonShareProjecta function for turning functions in a Unison Share project into executable derivations.- See unison-nix-snake for an example.
- See nix/build-share-project.nix for documentation.
buildUnisonFromTranscripta lower-level function for turning a Unison transcript into an executable derivation.- See nix/build-from-transcript.nix for documentation.
In the future this repository would be a natural home for derivations for other Unison tools.
NOTE: the unison github repo repo has a flake.nix that you can use with nix develop to get an environment with the expected versions of stack, ormolu, etc.
Fabricated/Anticipated Questions
The nixpkgs repository was the original home of Unison Nix dervations, but Unison is evolving quickly and getting Unison updates merged into nixpkgs turned out to be a bottleneck in getting these new features and bug fixes out to Unison users.