我有一个相当复杂的问题。
我想使用ja-netfilter破解我的nixos电脑上的 idea ,这里是例子
问题是,当我尝试使用overrideAttrs来替换原始vmoptsFile Attrs来实现相同的操作时,
xdg.configFile."JetBrains/PyCharm${pkgs.jetbrains.pycharm-professional.version}/pycharm64.vmoptions".text =vmoptions
.
似乎无法从安装之后的 idea 文件中被正常检出,换句话说就是就算我用 overrideAttrs 替换了 jetbrains 中原始的 vmoptFiles,他还是无法作为一个参数被 installPhase 中的变量提取拿到。
# nixpkgs ... all-packages.nix
vmopts = config.jetbrains.vmopts or null;
# nixpkgs ... jetbrains/bin/linux.nix
> vmoptsFile = lib.optionalString (vmopts != null) (writeText vmoptsName vmopts);
> wrapProgram "$launcher" \
--prefix PATH : "${lib.makeBinPath [ jdk coreutils gnugrep which git ]}" \
--suffix PATH : "${lib.makeBinPath [ python3 ]}" \
--prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath extraLdPath}" \
${lib.concatStringsSep " " extraWrapperArgs} \
--set-default JDK_HOME "$jdk" \
--set-default ANDROID_JAVA_HOME "$jdk" \
--set-default JAVA_HOME "$jdk" \
--set-default JETBRAINS_CLIENT_JDK "$jdk" \
--set-default ${hiName}_JDK "$jdk" \
--set-default LOCALE_ARCHIVE "${glibcLocales}/lib/locale/locale-archive" \
--set-default ${vmoptsIDE}_VM_OPTIONS ${vmoptsFile}
= 我修改的 modules ==================================================================
let
vmoptions = pkgs.writeText "jetbrains-with-ja-netfilter-vmoptions" ''
....
-javaagent:${jetbra}/ja-netfilter.jar=jetbrains
'';
generateOverridePackage =
pkgName: pkgName.overrideAttrs { vmoptsFile = vmoptions; }
;
in {
options = {
programs.jetbrains = {
enable = lib.options.mkEnableOption "jetbrains";
packages = lib.mkOption {
type = types.listOf types.package;
default = [];
description = "A list of packages need to enable ja-netfilter.";
example = [ pkgs.jetbrains.idea-ultimate ];
};
};
};
config = lib.mkIf (cfg.enable && cfg.packages != []) {
home.packages = map (pkg: generateOverridePackage pkg) cfg.packages;
};
=== 我的 debug 记录 ===
➜ store ls -al | rg idea
-r--r--r-- 2 root root 2976 1970年 1月 1日 8r24sw9mn8v0ai5ag7zwlg3yk2dfahrc-ideaIU-2024.1.3.tar.gz.drv
dr-xr-xr-x 5 root root 4096 1970年 1月 1日 c121a12frhymyrvqwa1f0wk8mb9nlw0w-idea-ultimate-2024.1.3
-r--r--r-- 6 root root 2975 1970年 1月 1日 h4nmsdxvzpk3l1w1m4xjrhg0fqbvjxda-0001-build-Make-includedir-properly-overrideable.patch
dr-xr-xr-x 5 root root 4096 1970年 1月 1日 idrrzfj4813ngy1iscbyj7hd83lzragv-idea-ultimate-2024.1.3
-r--r--r-- 2 root root 7097 1970年 1月 1日 iq5idxhbf932i47y974ivifz3a5a3pqc-idea-ultimate-2024.1.3.drv
dr-xr-xr-x 3 root root 4096 1970年 1月 1日 jqpyjw3via0jmwdsx928fbhzdphhhagh-idea-ultimate.desktop
-r--r--r-- 2 root root 2393 1970年 1月 1日 kha7v1rqr2c686g5cjna5sd4iwgr56kz-idea-ultimate.desktop.drv
-r--r--r-- 1 root root 7153 1970年 1月 1日 mba4a9yp4ijwsr3pa9k0mkfs5ngkq150-idea-ultimate-2024.1.3.drv
= START =====================================================================================
= Cmd: nix derivation show /nix/store/iq5idxhbf932i47y974ivifz3a5a3pqc-idea-ultimate-2024.1.3.drv
= Full: https://pastebin.com/wWykjUgT
“installPhase”: “runHook preInstall\n\nmkdir -p $out/{bin,$pname,share/pixmaps,share/icons/hicolor/scalable/apps}\ncp -a . $out/$pname\n[[ -f $out/$pname/bin/idea.png ]] && ln -s $out/$pname/bin/idea.png $out/share/pixmaps/idea-ultimate.png\n[[ -f $out/$pname/bin/idea.svg ]] && ln -s $out/$pname/bin/idea.svg $out/share/pixmaps/idea-ultimate.svg \\n && ln -s $out/$pname/bin/idea.svg $out/share/icons/hicolor/scalable/apps/idea-ultimate.svg\ncp /nix/store/65ffhzzhs29vwwz36akmxbpgznd9qisv-libdbm-233.13135.103/lib/libdbm.so $out/$pname/bin/libdbm.so\ncp /nix/store/jbyd0vlbqmlkkv2ckdl317s4mj7hbg0s-fsnotifier-233.13135.103/bin/fsnotifier $out/$pname/bin/fsnotifier\n\njdk=/nix/store/hv81cwj3p77z4z35rybjmkv7a3d8gymb-jetbrains-jdk-jcef-17.0.8-b1000.8/lib/openjdk\nitem=/nix/store/jqpyjw3via0jmwdsx928fbhzdphhhagh-idea-ultimate.desktop\n\nwrapProgram "$out/$pname/bin/idea.sh" \\n --prefix PATH : "/nix/store/hv81cwj3p77z4z35rybjmkv7a3d8gymb-jetbrains-jdk-jcef-17.0.8-b1000.8/bin:/nix/store/php4qidg2bxzmm79vpri025bqi0fa889-coreutils-9.5/bin:/nix/store/28gpmx3z6ss3znd7fhmrzmvk3x5lnfbk-gnugrep-3.11/bin:/nix/store/ln1ja3px23h21r64fw554h8a6227j9w3-which-2.21/bin:/nix/store/jxjzgz1p0hdqsg8k17ivw5mgcd6ffx9c-git-2.44.1/bin" \\n --suffix PATH : "/nix/store/7hnr99nxrd2aw6lghybqdmkckq60j6l9-python3-3.11.9/bin" \\n --prefix LD_LIBRARY_PATH : "/nix/store/lv6nackqis28gg7l2ic43f6nk52hb39g-zlib-1.3.1/lib" \\n --set M2_HOME "/nix/store/z22jfrphjm815sgrc13g23icxwr4zh89-apache-maven-3.9.6/maven" --set M2 "/nix/store/z22jfrphjm815sgrc13g23icxwr4zh89-apache-maven-3.9.6/maven/bin" \\n --set-default JDK_HOME "$jdk" \\n --set-default ANDROID_JAVA_HOME "$jdk" \\n --set-default JAVA_HOME "$jdk" \\n --set-default JETBRAINSCLIENT_JDK "$jdk" \\n --set-default IDEA_JDK "$jdk" \\n --set-default IDEA_VM_OPTIONS \n\nln -s "$out/$pname/bin/idea.sh" $out/bin/$pname\nrm -rf $out/$pname/plugins/remote-dev-server/selfcontained/\necho -e ‘#!/usr/bin/env bash\n’"$out/$pname/bin/remote-dev-server.sh"’ "$@"’ > $out/$pname/bin/remote-dev-server-wrapped.sh\nchmod +x $out/$pname/bin/remote-dev-server-wrapped.sh\nln -s "$out/$pname/bin/remote-dev-server-wrapped.sh" $out/bin/$pname-remote-dev-server\nln -s "$item/share/applications" $out/share\n\nrunHook postInstall\n”,
→ Seems --set-default IDEA_VM_OPTIONS \n\n
illustrate vmoptsFile haven’t been recognition.
"vmoptsFile": "/nix/store/iajb6vg8zw2hxlnlj4m3949r7kivqypk-vmoptions"
→ but what about this ? by the ways this file doesn’t existed.
= START =====================================================================================
= Cmd: nix derivation show /nix/store/mba4a9yp4ijwsr3pa9k0mkfs5ngkq150-idea-ultimate-2024.1.3.drv
= Full: ➜ dotfiles git:(master) ✗ nix derivation show /nix/store/mba4a9yp4ijwsr3pa9k0mk - Pastebin.com
“installPhase”: “runHook preInstall\n\nmkdir -p $out/{bin,$pname,share/pixmaps,share/icons/hicolor/scalable/apps}\ncp -a . $out/$pname\n[[ -f $out/$pname/bin/idea.png ]] && ln -s $out/$pname/bin/idea.png $out/share/pixmaps/idea-ultimate.png\n[[ -f $out/$pname/bin/idea.svg ]] && ln -s $out/$pname/bin/idea.svg $out/share/pixmaps/idea-ultimate.svg \\n && ln -s $out/$pname/bin/idea.svg $out/share/icons/hicolor/scalable/apps/idea-ultimate.svg\ncp /nix/store/65ffhzzhs29vwwz36akmxbpgznd9qisv-libdbm-233.13135.103/lib/libdbm.so $out/$pname/bin/libdbm.so\ncp /nix/store/jbyd0vlbqmlkkv2ckdl317s4mj7hbg0s-fsnotifier-233.13135.103/bin/fsnotifier $out/$pname/bin/fsnotifier\n\njdk=/nix/store/hv81cwj3p77z4z35rybjmkv7a3d8gymb-jetbrains-jdk-jcef-17.0.8-b1000.8/lib/openjdk\nitem=/nix/store/jqpyjw3via0jmwdsx928fbhzdphhhagh-idea-ultimate.desktop\n\nwrapProgram "$out/$pname/bin/idea.sh" \\n --prefix PATH : "/nix/store/hv81cwj3p77z4z35rybjmkv7a3d8gymb-jetbrains-jdk-jcef-17.0.8-b1000.8/bin:/nix/store/php4qidg2bxzmm79vpri025bqi0fa889-coreutils-9.5/bin:/nix/store/28gpmx3z6ss3znd7fhmrzmvk3x5lnfbk-gnugrep-3.11/bin:/nix/store/ln1ja3px23h21r64fw554h8a6227j9w3-which-2.21/bin:/nix/store/jxjzgz1p0hdqsg8k17ivw5mgcd6ffx9c-git-2.44.1/bin" \\n --suffix PATH : "/nix/store/7hnr99nxrd2aw6lghybqdmkckq60j6l9-python3-3.11.9/bin" \\n --prefix LD_LIBRARY_PATH : "/nix/store/lv6nackqis28gg7l2ic43f6nk52hb39g-zlib-1.3.1/lib" \\n --set M2_HOME "/nix/store/z22jfrphjm815sgrc13g23icxwr4zh89-apache-maven-3.9.6/maven" --set M2 "/nix/store/z22jfrphjm815sgrc13g23icxwr4zh89-apache-maven-3.9.6/maven/bin" \\n --set-default JDK_HOME "$jdk" \\n --set-default ANDROID_JAVA_HOME "$jdk" \\n --set-default JAVA_HOME "$jdk" \\n --set-default JETBRAINSCLIENT_JDK "$jdk" \\n --set-default IDEA_JDK "$jdk" \\n --set-default IDEA_VM_OPTIONS \n\nln -s "$out/$pname/bin/idea.sh" $out/bin/$pname\nrm -rf $out/$pname/plugins/remote-dev-server/selfcontained/\necho -e ‘#!/usr/bin/env bash\n’"$out/$pname/bin/remote-dev-server.sh"’ "$@"’ > $out/$pname/bin/remote-dev-server-wrapped.sh\nchmod +x $out/$pname/bin/remote-dev-server-wrapped.sh\nln -s "$out/$pname/bin/remote-dev-server-wrapped.sh" $out/bin/$pname-remote-dev-server\nln -s "$item/share/applications" $out/share\n\nrunHook postInstall\n”,
→ still not existed
but this time vmoptsFile existed with a name that i config.
“vmoptsFile”: “/nix/store/clqvbr7bvqhnlls3dwpjwwlkdi0winw5-jetbrains-with-ja-netfilter-vmoptions”
but the file still not existed.
= FINAL STATEMENT ===========================================================================
- 这俩 derivation 文件到底哪个是我 HM 里面用的?
- 当我查看nixpkgs source时,有一个操作将vmopts放入vmoptsFile,最后这个变量将在wrapProgram --set-default ${vmoptsIDE}_VM_OPTIONS ${vmoptsFile}中使用。不知道为什么我 overrideAttrs 的这个变量无法被插入到 wrapPrograms 中去。还有在这种情况下,我如何调试它?
我已经尝试在nix repl中加载flake,以及类似outputs. homemetration的东西。jacky@ANixOS但我不能进一步调试了。
> vmoptsFile = lib.optionalString (vmopts != null) (writeText vmoptsName vmopts);
> wrapProgram "$launcher" \
--prefix PATH : "${lib.makeBinPath [ jdk coreutils gnugrep which git ]}" \
--suffix PATH : "${lib.makeBinPath [ python3 ]}" \
--prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath extraLdPath}" \
${lib.concatStringsSep " " extraWrapperArgs} \
--set-default JDK_HOME "$jdk" \
--set-default ANDROID_JAVA_HOME "$jdk" \
--set-default JAVA_HOME "$jdk" \
--set-default JETBRAINS_CLIENT_JDK "$jdk" \
--set-default ${hiName}_JDK "$jdk" \
--set-default LOCALE_ARCHIVE "${glibcLocales}/lib/locale/locale-archive" \
--set-default ${vmoptsIDE}_VM_OPTIONS ${vmoptsFile}
- 这个vmopts已经在pkgs/top-level/all-packages.nix和
vmopts = config.jetbrains.vmopts或null;
中定义了,我不知道如何使用这个(在STFW之后没找到任何相关的代码)。