[NOTE] idris2 與 nix
這裡記錄了用 nix flakes 開發 idris2
專案的方法,首先在所有工作開展之前,要建立一個叫做 flake.nix 的檔案。
這個檔案的內容會分成三個部分
- description 是一個字串,描述這個專案
- inputs
是一串專案中想要使用的套件,由於是一群結構,所以有一點點複雜。這裡也只用了
.url指定來源跟用.inputs覆蓋引用的程式庫的來源而已 - outputs 則是專案自己的東西,包含怎麼安裝,開發環境要有什麼都是在這裡指定的!
{
description = "my project";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs";
flake-utils.url = "github:numtide/flake-utils";
idris-lang.url = "github:idris-lang/Idris2";
idris-lang.inputs.nixpkgs.follows = "nixpkgs";
};
outputs = { self, nixpkgs, flake-utils, idris-lang }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = nixpkgs.legacyPackages.${system};
stdenv = pkgs.stdenv;
idris2 = idris-lang.packages.${system}.idris2;
rlwrap = pkgs.rlwrap;
my-pkg = stdenv.mkDerivation {
name = "my-pkg";
version = "0.0.1";
src = ./.;
buildInputs = [ idris2 ];
buildPhase = ''
idris2 --build ./package.ipkg
'';
installPhase = ''
export HOME=$(pwd)
mkdir -p $out/bin
mv ./build/exec/* $out/bin/
'';
};
in rec {
packages.default = my-pkg;
devShells.default = pkgs.mkShell {
buildInputs = [ idris2 rlwrap my-pkg ];
};
})
}
上面的檔案只要把 my pkg 的地方改一改應該就可以使用了,可以用
nix flake check 檢查這個 flake
有沒有跑過了,沒有就會開始拉取依賴;而用 nix build .
就會開始對專案進行建構。