Haskell 如何将ghcide添加到shell.nix中

Haskell 如何将ghcide添加到shell.nix中,haskell,cabal,nix,Haskell,Cabal,Nix,我有一个哈斯克尔阴谋集团的计划。我一直在使用cabal2nix构建它。因此,我有3个nix文件: project.nix—由cabal2nix生成的.nix文件 default.nix-Justhaskell.callPackage./project.nix{} shell.nix-只返回默认的env(import./default.nix{}).env 最近,我决定使用设置vscode开发环境。在上面的描述中 在您的项目中包含pkgs.haskellPackages.ghcide 没有进一

我有一个哈斯克尔阴谋集团的计划。我一直在使用cabal2nix构建它。因此,我有3个nix文件:

  • project.nix—由cabal2nix生成的.nix文件
  • default.nix-Just
    haskell.callPackage./project.nix{}
  • shell.nix-只返回默认的env
    (import./default.nix{}).env
最近,我决定使用设置vscode开发环境。在上面的描述中

在您的项目中包含
pkgs.haskellPackages.ghcide


没有进一步解释。听起来应该很容易,但我不知道怎么做。如何操作?

您可以在
buildTools
config下添加
ghcide

{mkDerivation,stdenv,base,aeson,scotty,wai extra,text,ghcide}
MK推导{
pname=“来”;
version=“0.1.0.0”;
src=./。;
isLibrary=false;
isExecutable=true;
ExecutableHaskell=[
基于scotty wai额外文本
];
buildTools=[ghcide];
主页=”http://emre.xyz/come";
description=“演示项目”;
许可证=带有stdenv.lib.licenses;[gpl3Plus];
}

shell.nix
中使用
shellFor
功能。它位于包集中,而不是
haskell.lib
。基于上的shellFor内联文档中的示例,我重命名了
所有包.nix
shell.nix
中为其添加了let绑定,并添加了
ghcide

    # Returns a derivation whose environment contains a GHC with only
    # the dependencies of packages listed in `packages`, not the
    # packages themselves. Using nix-shell on this derivation will
    # give you an environment suitable for developing the listed
    # packages with an incremental tool like cabal-install.
    # In addition to the "packages" arg and "withHoogle" arg, anything that
    # can be passed into stdenv.mkDerivation can be included in the input attrset
    #
    #     # all-packages.nix
    #     with import <nixpkgs> {};
    #     haskellPackages.extend (haskell.lib.packageSourceOverrides {
    #       frontend = ./frontend;
    #       backend = ./backend;
    #       common = ./common;
    #     })
    #
    #     # shell.nix
    #     let pkgs = import <nixpkgs> {};
    #         allPackages = import ./all-packages.nix;
    #     in
    #     allPackages.shellFor {
    #       packages = p: [p.frontend p.backend p.common];
    #       withHoogle = true;
    #       buildInputs = [ allPackages.ghcide ];
    #     }
    #
    #     -- cabal.project
    #     packages:
    #       frontend/
    #       backend/
    #       common/
    #
    #     bash$ nix-shell --run "cabal new-build all"
    #     bash$ nix-shell --run "python"

#返回其环境中仅包含
#“包”中列出的包的依赖项,而不是
#包装本身。在这个派生上使用nixshell将
#为您提供一个适合开发所列产品的环境
#使用诸如cabal install之类的增量工具的软件包。
#除了“packages”arg和“withHoogle”arg之外,任何
#可以传递到stdenv.mk。可以将派生包含在输入属性集中
#
##全套。尼克斯
#导入{};
#haskell packages.extend(haskell.lib.packageSourceOverrides{
#前端=/前端;
#后端=/后端;
#普通=/普通;
#     })
#
##shell.nix
#设pkgs=import{};
#allPackages=import./all-packages.nix;
#在
#所有软件包{
#packages=p:[p.frontend p.backend p.common];
#withHoogle=真;
#buildInputs=[allPackages.ghcide];
#     }
#
#--阴谋集团项目
#套餐:
#前端/
#后端/
#普通的/
#
#bash$nix shell--运行“阴谋集团新构建全部”
#bash$nix shell--运行“python”

但project.nix是否应该自动生成,因此手动定制不是一个好主意?