2

我是 NixOs 和 nix-shell 的新手,并且仍在了解它的习语。现在我有一个 Java 项目,我正在使用 nix-shelldirenv加载构建工具链,包括 jdk 和 bazel。

我希望 IDE(在我的情况下为 ItelliJ)使用相同的工具链。我天真的方法是使用如下的 nix-shell 脚本,它位于default.nix我项目的根目录中,并且由 direnv 拾取。

with import <nixpkgs> {};


stdenv.mkDerivation {

  name = "my-project";

  buildInputs = with pkgs; [
    jdk11
    bazel
    jetbrains.idea-ultimate
  ];

  shellHook = ''
    export JAVA_HOME="${pkgs.jdk11}/lib/openjdk"
    ln -s ${pkgs.jdk11}/lib/openjdk ./jdk
  '';
}

然后我可以从 shell 使用以下命令启动 IntelliJ:

$ idea-ultimate 2>1 > /dev/null &

虽然它有效,但我有以下担忧:

  1. 将 IDE 加载到我的命令行 shell 中似乎非常繁重,尤其是对于 CI 构建。
  2. 随着我添加团队使用的其他 IDE(如 Eclipse),情况会变得更糟。
  3. 这似乎是错误的方式。

当然,我可以使用其他 Nix 工具安装这些 IDE 包,例如家庭管理器,在正确的配置步骤后,它会在菜单中为我提供应用程序启动器;但是,我喜欢直接从 shell 启动 IDE,以确保正确的工具链到位并位于正确的路径中。

我下一步的想法是从中删除 IDE 输入default.nix并创建自定义 nix 文件,其中包括 IDE 的输入和启动器脚本,以实际使用 nix-shell 启动 IDE。我希望,如果从上面的 shell 执行,它将继承其输入,用 IDE 输入扩充它,然后启动 IDE。

同样,我的目标是使用 nix 启动我的 IDE,并使用default.nix项目根目录中的包和配置设置来确保一致性。

建议,包括替代方法,表示赞赏。

4

0 回答 0