我正在寻找类似的东西:
shell.nix
{ pkgs ? import <nixpkgs> {} }:
let
threadscope = ...
speedscope = ...
in
stdenv.mkDerivation {
name = "haskell-env";
nativeBuildInputs = [
# Haskell tools
ghcid ghc
# Profiling tools
threadscope
speedscope
];
}
然后我可以使用nix-shell
:
% nix-shell
...
nix-shell % threadscope <some-commands>
nix-shell % speedscope <some-commands>
你通常只是从github/hackage/stackage的源代码构建还是使用pkgs.haskellPackages.<my-package>
?
我通常从haskellPackages
中获取工具。
如果你只想要一个带有工具的shell,你可以使用这样的表达式。
{ pkgs ? import <nixpkgs> {} }:
let
# Select a package set. haskellPackages is recommended, but
# if you need a different ghc, use pkgs.haskell.packages.ghc8102 for example
haskellPackages = pkgs.haskellPackages;
in
pkgs.mkShell {
nativeBuildInputs = [
# Haskell tools
haskellPackages.ghc
haskellPackages.ghcid
# Profiling tools
haskellPackages.threadscope
# pkgs.speedscope (not packaged yet)
];
}
如果您想要一个具有特定预编译库的shell,可以使用ghcWithPackages
函数而不是ghc
。如果您想要本地Haskell包的预编译依赖项,可以用haskellPackages.shellFor
函数替换pkgs.mkShell
。
如果你想打包speedscope,Nixpkgs手册记录了节点包的打包过程