微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

直接从nix-shell启动IDE

如何解决直接从nix-shell启动IDE

我对NixOs和nix-shell还是陌生的,并且仍然逐渐了解它的成语。现在,我有一个Java项目,正在通过direnv使用nix-shell加载构建工具链,包括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
  '';
}

然后我可以从外壳中使用以下命令启动IntelliJ:

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

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

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

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

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

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

建议,包括其他方法

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。