1{
2 config,
3 lib,
4 pkgs,
5 ...
6}:
7
8let
9 cfg = config.programs.vscode;
10in
11{
12 options.programs.vscode = {
13 enable = lib.mkEnableOption "VSCode editor";
14
15 defaultEditor = lib.mkEnableOption "" // {
16 description = ''
17 When enabled, configures VSCode to be the default editor
18 using the EDITOR environment variable.
19 '';
20 };
21
22 package = lib.mkPackageOption pkgs "vscode" {
23 extraDescription = "The final package will be customized with extensions from {option}`programs.vscode.extensions`";
24 };
25
26 extensions = lib.mkOption {
27 type = lib.types.listOf lib.types.package;
28 default = [ ];
29 example = lib.literalExpression ''
30 with pkgs.vscode-extensions; [
31 bbenoist.nix
32 golang.go
33 twxs.cmake
34 ]
35 '';
36 description = "List of extensions to install.";
37 };
38
39 finalPackage = lib.mkOption {
40 type = lib.types.package;
41 visible = false;
42 readOnly = true;
43 description = "Resulting customized VSCode package.";
44 };
45 };
46
47 config = lib.mkIf cfg.enable {
48 environment.systemPackages = [
49 cfg.finalPackage
50 ];
51
52 environment.variables.EDITOR = lib.mkIf cfg.defaultEditor (
53 lib.mkOverride 900 cfg.finalPackage.meta.mainProgram
54 );
55
56 programs.vscode.finalPackage = pkgs.vscode-with-extensions.override {
57 vscode = cfg.package;
58 vscodeExtensions = cfg.extensions;
59 };
60 };
61
62 meta.maintainers = with lib.maintainers; [ ethancedwards8 ];
63}