at master 1.5 kB view raw
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}