feat(wisdom): enhance vscode module with java support and writable settings
Add Java extension support and configure multiple JDK runtimes. Introduce a wrapped VS Code package that includes JDK 25 in the PATH to support the Red Hat Java language server. Switch from using `programs.vscode.userSettings` to a manually managed `settings.json` file via `home.file`. This allows the settings file to be writable by external tools like `kilo-code` at runtime while preserving them across Nix configuration switches by using `force = false`.
This commit is contained in:
@@ -12,8 +12,23 @@
|
|||||||
jnoortheen.nix-ide
|
jnoortheen.nix-ide
|
||||||
yzhang.markdown-all-in-one
|
yzhang.markdown-all-in-one
|
||||||
esbenp.prettier-vscode
|
esbenp.prettier-vscode
|
||||||
|
vscjava.vscode-java-pack
|
||||||
|
redhat.java
|
||||||
];
|
];
|
||||||
|
|
||||||
|
# Wrap VS Code so a JDK is on PATH — the Red Hat Java language server (and
|
||||||
|
# other extension-bundled JVMs) need `java` to run, independent of the
|
||||||
|
# per-project `java.configuration.runtimes` setting.
|
||||||
|
vscodeWithJdk = pkgs.symlinkJoin {
|
||||||
|
name = "vscode-with-jdk";
|
||||||
|
paths = [ pkgs.vscode ];
|
||||||
|
nativeBuildInputs = [ pkgs.makeWrapper ];
|
||||||
|
postBuild = ''
|
||||||
|
wrapProgram "$out/bin/code" \
|
||||||
|
--prefix PATH : "${pkgs.jdk25}/bin"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
coreSettings = {
|
coreSettings = {
|
||||||
"nix.enableLanguageServer" = true;
|
"nix.enableLanguageServer" = true;
|
||||||
"nix.serverPath" = "nixd";
|
"nix.serverPath" = "nixd";
|
||||||
@@ -26,7 +41,26 @@
|
|||||||
};
|
};
|
||||||
"diffEditor.ignoreTrimWhitespace" = false;
|
"diffEditor.ignoreTrimWhitespace" = false;
|
||||||
"chat.disableAIFeatures" = true;
|
"chat.disableAIFeatures" = true;
|
||||||
|
|
||||||
|
"java.configuration.runtimes" = [
|
||||||
|
{
|
||||||
|
name = "JavaSE-21";
|
||||||
|
path = "${pkgs.jdk21}/lib/openjdk";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "JavaSE-25";
|
||||||
|
path = "${pkgs.jdk25}/lib/openjdk";
|
||||||
|
default = true;
|
||||||
|
}
|
||||||
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Seed a *writable* settings.json (not a store symlink) so extensions like
|
||||||
|
# kilo-code can edit it at runtime. `force = false` in the config means HM
|
||||||
|
# only writes it when absent, preserving kilo's later edits across `switch`.
|
||||||
|
settingsJson = pkgs.writeText "vscode-user-settings" (
|
||||||
|
builtins.toJSON coreSettings
|
||||||
|
);
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
options.chiasson.home.editors.vscode = {
|
options.chiasson.home.editors.vscode = {
|
||||||
@@ -48,14 +82,19 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
config = lib.mkIf (root.enable && cfg.enable) {
|
config = lib.mkIf (root.enable && cfg.enable) {
|
||||||
home.packages = [ pkgs.vscode ];
|
home.packages = [ ];
|
||||||
|
|
||||||
|
# Writable, seed-once user settings (kilo-code can append to it).
|
||||||
|
home.file.".config/Code/User/settings.json" = {
|
||||||
|
source = settingsJson;
|
||||||
|
force = false;
|
||||||
|
};
|
||||||
|
|
||||||
programs.vscode = {
|
programs.vscode = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = pkgs.vscode;
|
package = vscodeWithJdk;
|
||||||
extensions = defaultExtensions ++ cfg.extensions;
|
extensions = defaultExtensions ++ cfg.extensions;
|
||||||
userSettings = coreSettings;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user