From 93e74db1da84fcc27ce572ecffe29e108f8a001f Mon Sep 17 00:00:00 2001 From: Ethan Carter Edwards Date: Thu, 17 Jul 2025 01:21:26 -0400 Subject: [PATCH] nixos/vscode: init Allows for configuring extensions, the package, and setting the default editor. Co-authored-by: lzcnt Co-authored-by: isabel Co-authored-by: Sandro Co-authored-by: Acid Bong Signed-off-by: Ethan Carter Edwards --- nixos/modules/module-list.nix | 1 + nixos/modules/programs/vscode.nix | 63 +++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 nixos/modules/programs/vscode.nix diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index c87b80333d81..8be0fe87a9cd 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -333,6 +333,7 @@ ./programs/vim.nix ./programs/virt-manager.nix ./programs/vivid.nix + ./programs/vscode.nix ./programs/wavemon.nix ./programs/wayland/cardboard.nix ./programs/wayland/dwl.nix diff --git a/nixos/modules/programs/vscode.nix b/nixos/modules/programs/vscode.nix new file mode 100644 index 000000000000..f7d427eba14e --- /dev/null +++ b/nixos/modules/programs/vscode.nix @@ -0,0 +1,63 @@ +{ + config, + lib, + pkgs, + ... +}: + +let + cfg = config.programs.vscode; +in +{ + options.programs.vscode = { + enable = lib.mkEnableOption "VSCode editor"; + + defaultEditor = lib.mkEnableOption "" // { + description = '' + When enabled, configures VSCode to be the default editor + using the EDITOR environment variable. + ''; + }; + + package = lib.mkPackageOption pkgs "vscode" { + extraDescription = "The final package will be customized with extensions from {option}`programs.vscode.extensions`"; + }; + + extensions = lib.mkOption { + type = lib.types.listOf lib.types.package; + default = [ ]; + example = lib.literalExpression '' + with pkgs.vscode-extensions; [ + bbenoist.nix + golang.go + twxs.cmake + ] + ''; + description = "List of extensions to install."; + }; + + finalPackage = lib.mkOption { + type = lib.types.package; + visible = false; + readOnly = true; + description = "Resulting customized VSCode package."; + }; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = [ + cfg.finalPackage + ]; + + environment.variables.EDITOR = lib.mkIf cfg.defaultEditor ( + lib.mkOverride 900 cfg.finalPackage.meta.mainProgram + ); + + programs.vscode.finalPackage = pkgs.vscode-with-extensions.override { + vscode = cfg.package; + vscodeExtensions = cfg.extensions; + }; + }; + + meta.maintainers = with lib.maintainers; [ ethancedwards8 ]; +}