Skip to content

Commit

Permalink
Added nix files (idris-lang#855)
Browse files Browse the repository at this point in the history
  • Loading branch information
guilhermehas authored Jan 15, 2021
1 parent 6d2dd93 commit 7a7504c
Show file tree
Hide file tree
Showing 8 changed files with 133 additions and 0 deletions.
23 changes: 23 additions & 0 deletions .github/workflows/ci-nix.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
name: Nix
on:
push:
branches:
- '*'
tags:
- '*'
pull_request:
branches:
- master
jobs:
tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- uses: cachix/install-nix-action@v12
with:
install_url: https://github.com/numtide/nix-flakes-installer/releases/download/nix-3.0pre20200820_4d77513/install
extra_nix_config: |
experimental-features = nix-command flakes
- run: nix build
6 changes: 6 additions & 0 deletions INSTALL.md
Original file line number Diff line number Diff line change
Expand Up @@ -120,3 +120,9 @@ If you are a [nix](https://nixos.org/features.html) user you can install Idris 2
by running the following command:

nix-env -i idris2

### Install from nix flakes

If you are a [nix flakes](https://nixos.wiki/wiki/Flakes) user you can install Idris 2 together with all the requirements by running the following command:

nix profile install github:idris-lang/Idris2
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ Idris 2
[![](https://github.com/idris-lang/Idris2/workflows/Ubuntu%20Racket/badge.svg)](https://github.com/idris-lang/Idris2/actions?query=workflow%3A"Ubuntu+Racket")
[![](https://github.com/idris-lang/Idris2/workflows/macOS/badge.svg)](https://github.com/idris-lang/Idris2/actions?query=workflow%3A"macOS")
[![](https://github.com/idris-lang/Idris2/workflows/API/badge.svg)](https://github.com/idris-lang/Idris2/actions?query=workflow%3A"API")
[![](https://github.com/idris-lang/Idris2/workflows/Nix/badge.svg)](https://github.com/idris-lang/Idris2/actions?query=workflow%3A"Nix")

[Idris 2](https://idris-lang.org/) is a purely functional programming language
with first class types.
Expand Down
3 changes: 3 additions & 0 deletions default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{ nixpkgs ? import <nixos> {} }: with nixpkgs;

callPackage ./package.nix {}
25 changes: 25 additions & 0 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 11 additions & 0 deletions flake.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
description = "Idris2 flake";

outputs = { self, nixpkgs }: {

packages.x86_64-linux.idris2 = import ./default.nix { nixpkgs = nixpkgs.legacyPackages.x86_64-linux; };

defaultPackage.x86_64-linux = self.packages.x86_64-linux.idris2;

};
}
63 changes: 63 additions & 0 deletions package.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
{ stdenv, fetchFromGitHub, makeWrapper
, clang, chez
}:

# Uses scheme to bootstrap the build of idris2
stdenv.mkDerivation rec {
pname = "idris2";
version = "0.3.0";

src = ./.;

strictDeps = true;
nativeBuildInputs = [ makeWrapper clang chez ];
buildInputs = [ chez ];

prePatch = ''
patchShebangs --build tests
'';

makeFlags = [ "PREFIX=$(out)" ]
++ stdenv.lib.optional stdenv.isDarwin "OS=";

# The name of the main executable of pkgs.chez is `scheme`
buildFlags = [ "bootstrap-build" "SCHEME=scheme" ];

checkTarget = "bootstrap-test";

# TODO: Move this into its own derivation, such that this can be changed
# without having to recompile idris2 every time.
postInstall = let
includedLibs = [ "base" "contrib" "network" "prelude" ];
name = "${pname}-${version}";
packagePaths = builtins.map (l: "$out/${name}/" + l) includedLibs;
additionalIdris2Paths = builtins.concatStringsSep ":" packagePaths;
in ''
# Remove existing idris2 wrapper that sets incorrect LD_LIBRARY_PATH
rm $out/bin/idris2
# Move actual idris2 binary
mv $out/bin/idris2_app/idris2.so $out/bin/idris2
# After moving the binary, there is nothing left in idris2_app that isn't
# either contained in lib/ or is useless to us.
rm $out/bin/idris2_app/*
rmdir $out/bin/idris2_app
# idris2 needs to find scheme at runtime to compile
# idris2 installs packages with --install into the path given by PREFIX.
# Since PREFIX is in nix-store, it is immutable so --install does not work.
# If the user redefines PREFIX to be able to install packages, idris2 will
# not find the libraries and packages since all paths are relative to
# PREFIX by default.
# We explicitly make all paths to point to nix-store, such that they are
# independent of what IDRIS2_PREFIX is. This allows the user to redefine
# IDRIS2_PREFIX and use --install as expected.
# TODO: Make support libraries their own derivation such that
# overriding LD_LIBRARY_PATH is unnecessary
# TODO: Maybe set IDRIS2_PREFIX to the users home directory
wrapProgram "$out/bin/idris2" \
--set-default CHEZ "${chez}/bin/scheme" \
--suffix IDRIS2_LIBS ':' "$out/${name}/lib" \
--suffix IDRIS2_DATA ':' "$out/${name}/support" \
--suffix IDRIS2_PATH ':' "${additionalIdris2Paths}" \
--suffix LD_LIBRARY_PATH ':' "$out/${name}/lib"
'';
}
1 change: 1 addition & 0 deletions result

0 comments on commit 7a7504c

Please sign in to comment.