Files
home-manager/modules/programs/vscode/default.nix
Seong Yong-ju c909892de5 vscode: warn when package is a known fork and remove pname option
Existing configs setting `programs.vscode.package` to a fork package
(e.g. `pkgs.vscodium`) silently kept evaluating but wrote files to
Visual Studio Code's paths instead of the fork's. Detect known fork
pnames and emit an actionable warning pointing to the dedicated
module.

The `pname` option, previously used with `package = null`, no longer
has any effect since `nameShort`/`dataFolderName` are now factory
arguments. Replace it with `mkRemovedOptionModule` so the migration
fails loudly rather than silently.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 18:50:49 -05:00

90 lines
2.3 KiB
Nix

{ config, lib, ... }:
let
modulePath = [
"programs"
"vscode"
];
mkVscodeModule = import ./mkVscodeModule.nix;
# Map of known VSCode fork pnames to their dedicated module path.
forkModules = {
vscodium = "programs.vscodium";
code-cursor = "programs.cursor";
windsurf = "programs.windsurf";
kiro = "programs.kiro";
antigravity = "programs.antigravity";
};
in
{
imports = [
(mkVscodeModule {
inherit modulePath;
name = "Visual Studio Code";
packageName = "vscode";
nameShort = "Code";
dataFolderName = ".vscode";
})
./haskell.nix
(lib.mkChangedOptionModule
[
"programs"
"vscode"
"immutableExtensionsDir"
]
[ "programs" "vscode" "mutableExtensionsDir" ]
(config: !config.programs.vscode.immutableExtensionsDir)
)
(lib.mkRemovedOptionModule [ "programs" "vscode" "pname" ] ''
The programs.vscode.pname option has been removed. Each VSCode fork
now has its own dedicated module (programs.vscodium, programs.cursor,
programs.windsurf, programs.kiro, programs.antigravity). Please switch
to the module corresponding to your fork instead of setting
programs.vscode.package to a fork package.
'')
]
++
map
(
v:
lib.mkRenamedOptionModule
[ "programs" "vscode" v ]
[
"programs"
"vscode"
"profiles"
"default"
v
]
)
[
"enableUpdateCheck"
"enableExtensionUpdateCheck"
"userSettings"
"userTasks"
"userMcp"
"keybindings"
"extensions"
"languageSnippets"
"globalSnippets"
];
config = lib.mkIf config.programs.vscode.enable {
warnings =
let
pkg = config.programs.vscode.package;
pname = if pkg != null then pkg.pname or null else null;
forkModule = if pname != null then forkModules.${pname} or null else null;
in
lib.optional (forkModule != null) ''
programs.vscode.package is set to a known VSCode fork (pname: "${pname}"),
but programs.vscode now always writes to Visual Studio Code's paths
(e.g. ~/.vscode, "Code/User"). Use ${forkModule} instead so that
configuration is written to the fork's own paths.
'';
};
}