Added nix files (#855)

This commit is contained in:
Guilherme Silva 2021-01-15 14:20:52 -03:00 committed by GitHub
parent 6d2dd935c4
commit 7a7504c956
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 133 additions and 0 deletions

23
.github/workflows/ci-nix.yml vendored Normal file
View File

@ -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

View File

@ -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

View File

@ -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.

3
default.nix Normal file
View File

@ -0,0 +1,3 @@
{ nixpkgs ? import <nixos> {} }: with nixpkgs;
callPackage ./package.nix {}

25
flake.lock Normal file
View File

@ -0,0 +1,25 @@
{
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1608233493,
"narHash": "sha256-erk1llMWMpSoUrnjHUY99FSP1mexMwjdPS7xaSQT0kk=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "2fe2d0aeea8e7a14f4ef843755e2cb9e12d9085a",
"type": "github"
},
"original": {
"id": "nixpkgs",
"type": "indirect"
}
},
"root": {
"inputs": {
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}

11
flake.nix Normal file
View File

@ -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
package.nix Normal file
View File

@ -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
result Symbolic link
View File

@ -0,0 +1 @@
/nix/store/nw0mm1z2afpxv5rgf6w3apxc8pxwgd6h-idris2-0.3.0