【发布时间】:2018-02-20 07:09:50
【问题描述】:
我正在编写一个主要供nix-shell 使用的.nix 表达式。我不知道该怎么做。请注意,这不在 NixOS 上,但我认为这不是很相关。
我正在查看的特定示例是,我想获得如下所示的 this version-dependent name:
idea-ultimate = buildIdea rec {
name = "idea-ultimate-${version}";
version = "2017.2.2"; /* updated by script */
description = "Integrated Development Environment (IDE) by Jetbrains, requires paid license";
license = stdenv.lib.licenses.unfree;
src = fetchurl {
url = "https://download.jetbrains.com/idea/ideaIU-${version}-no-jdk.tar.gz";
sha256 = "b8eb9d612800cc896eb6b6fbefbf9f49d92d2350ae1c3c4598e5e12bf93be401"; /* updated by script */
};
wmClass = "jetbrains-idea";
update-channel = "IDEA_Release";
};
我的 nix 表达式如下:
let
pkgs = import <nixpkgs> {};
stdenv = pkgs.stdenv;
# idea_name = assert pkgs.jetbrains.idea-ultimate.name != ""; pkgs.jetbrains.idea-ultimate.name;
in rec {
scalaEnv = stdenv.mkDerivation rec {
name = "scala-env";
builder = "./scala-build.sh";
shellHook = ''
alias cls=clear
'';
CLANG_PATH = pkgs.clang + "/bin/clang";
CLANGPP_PATH = pkgs.clang + "/bin/clang++";
# A bug in the nixpkgs openjdk (#29151) makes us resort to Zulu OpenJDK for IDEA:
# IDEA_JDK = pkgs.openjdk + "/lib/openjdk";
# PATH = "${pkgs.jetbrains.idea-ultimate}/${idea_name}/bin:$PATH";
IDEA_JDK = /usr/lib/jvm/zulu-8-amd64;
# IDEA_JDK = /opt/zulu8.23.0.3-jdk8.0.144-linux_x64;
# IDEA_JDK = /usr/lib/jvm/java-8-openjdk-amd64;
buildInputs = with pkgs; [
ammonite
boehmgc
clang
emacs
jetbrains.idea-ultimate
less
libunwind
openjdk
re2
sbt
stdenv
unzip
zlib
];
};
}
我已注释掉设置PATH,因为它取决于在let 子句中获取idea_name。作为一个有趣的旁注,如果我不加注释,这不会失败,但在执行nix-shell 时会导致一个非常奇怪的错误,因为无法执行bash。我也尝试过更简单的letidea_name = pkgs.jetbrains.idea-ultimate.name; 案例,但后来在设置idea_name 时使用PATH 时失败,因为idea_name 最终未定义。
更新:
我开始用nix-instantiate探索,但兴趣的推导似乎是空的:
[nix-shell:/nix/store]$ nix-instantiate --eval --xml -E "((import <nixpkgs> {}).callPackage ./3hk87pqgl2qdqmskxbhy23cyr24q8g6s-nixpkgs-18.03pre114739.d0d905668c/nixpkgs/pkgs/applications/editors/jetbrains { }).idea-ultimate";
<?xml version='1.0' encoding='utf-8'?>
<expr>
<derivation>
<repeated />
</derivation>
</expr>
【问题讨论】:
-
我也尝试使用
nix-shell --verbose --verbose --verbose --verbose --verbose --verbose --show-trace之类的东西来了解断言失败的原因,但尽管打印了大量信息,但这些信息并不包括断言值。