[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 .
就會開始對專案進行建構。