Haskell 開発環境 nix flake と direnv
Haskell project の開発環境を nix flake
と direnv
で作成する。
プロジェクトdirectoryを nix flake
用に準備
まずは、nixos のテンプレートを使って、Base となるdirectoryを作成。
mkdir /tmp/haskell-demo
cd /tmp/haskell-demo
nix flake new -t templates#haskell-nix .
flake.nix
を少し単純にする
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, flake-utils }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = nixpkgs.legacyPackages.${system};
overlay = final: prev: {
hello = prev.callCabal2nix "hello" ./. { };
};
haskellPackages = pkgs.haskellPackages.extend overlay;
in {
# nix build
packages.default = haskellPackages.hello;
# nix develop
devShells.default = haskellPackages.shellFor {
packages = p: [ p.hello ];
buildInputs = with haskellPackages; [
cabal-install
haskell-language-server
];
};
}
);
}
direnv
を有効化
ここで direnv
を有効にする。それには .envrc
を以下のように作成し、
use flake
以下のコマンドで有効にする。
direnv allow .
これで、 cabal-install
と haskell-language-server
がインストールされた状態の開発環境ができあがる。