diff --git a/modules/programs/vscode.nix b/modules/programs/vscode.nix index dcfed07b1..443e623bc 100644 --- a/modules/programs/vscode.nix +++ b/modules/programs/vscode.nix @@ -34,6 +34,11 @@ let # TODO: On Darwin where are the extensions? extensionPath = ".${extensionDir}/extensions"; + mergedUserSettings = cfg.userSettings + // optionalAttrs (!cfg.enableUpdateCheck) { "update.mode" = "none"; } + // optionalAttrs (!cfg.enableExtensionUpdateCheck) { + "extensions.autoCheckUpdates" = false; + }; in { imports = [ (mkChangedOptionModule [ "programs" "vscode" "immutableExtensionsDir" ] [ @@ -56,12 +61,28 @@ in { ''; }; + enableUpdateCheck = mkOption { + type = types.bool; + default = true; + description = '' + Whether to enable update checks/notifications. + ''; + }; + + enableExtensionUpdateCheck = mkOption { + type = types.bool; + default = true; + description = '' + Whether to enable update notifications for extensions. + ''; + }; + userSettings = mkOption { type = jsonFormat.type; default = { }; example = literalExpression '' { - "update.channel" = "none"; + "files.autoSave" = "off" "[nix]"."editor.tabSize" = 2; } ''; @@ -164,9 +185,9 @@ in { home.packages = [ cfg.package ]; home.file = mkMerge [ - (mkIf (cfg.userSettings != { }) { + (mkIf (mergedUserSettings != { }) { "${configFilePath}".source = - jsonFormat.generate "vscode-user-settings" cfg.userSettings; + jsonFormat.generate "vscode-user-settings" mergedUserSettings; }) (mkIf (cfg.userTasks != { }) { "${tasksFilePath}".source = diff --git a/tests/modules/programs/vscode/default.nix b/tests/modules/programs/vscode/default.nix index 70f6d2e70..607758269 100644 --- a/tests/modules/programs/vscode/default.nix +++ b/tests/modules/programs/vscode/default.nix @@ -1 +1,4 @@ -{ vscode-keybindings = ./keybindings.nix; } +{ + vscode-keybindings = ./keybindings.nix; + vscode-update-checks = ./update-checks.nix; +} diff --git a/tests/modules/programs/vscode/keybindings.nix b/tests/modules/programs/vscode/keybindings.nix index 57931c43f..ed457a9ba 100644 --- a/tests/modules/programs/vscode/keybindings.nix +++ b/tests/modules/programs/vscode/keybindings.nix @@ -27,12 +27,17 @@ let } ]; - targetPath = if pkgs.stdenv.hostPlatform.isDarwin then + keybindingsPath = if pkgs.stdenv.hostPlatform.isDarwin then "Library/Application Support/Code/User/keybindings.json" else ".config/Code/User/keybindings.json"; - expectedJson = pkgs.writeText "expected.json" '' + settingsPath = if pkgs.stdenv.hostPlatform.isDarwin then + "Library/Application Support/Code/User/settings.json" + else + ".config/Code/User/settings.json"; + + expectedKeybindings = pkgs.writeText "expected.json" '' [ { "command": "editor.action.clipboardCopyAction", @@ -58,6 +63,7 @@ let } ] ''; + in { config = { programs.vscode = { @@ -67,8 +73,10 @@ in { }; nmt.script = '' - assertFileExists "home-files/${targetPath}" - assertFileContent "home-files/${targetPath}" "${expectedJson}" + assertFileExists "home-files/${keybindingsPath}" + assertFileContent "home-files/${keybindingsPath}" "${expectedKeybindings}" + + assertPathNotExists "home-files/${settingsPath}" ''; }; } diff --git a/tests/modules/programs/vscode/update-checks.nix b/tests/modules/programs/vscode/update-checks.nix new file mode 100644 index 000000000..1547bd36a --- /dev/null +++ b/tests/modules/programs/vscode/update-checks.nix @@ -0,0 +1,29 @@ +{ pkgs, ... }: + +let + + settingsPath = if pkgs.stdenv.hostPlatform.isDarwin then + "Library/Application Support/Code/User/settings.json" + else + ".config/Code/User/settings.json"; + + expectedSettings = pkgs.writeText "settings-expected.json" '' + { + "extensions.autoCheckUpdates": false, + "update.mode": "none" + } + ''; + +in { + programs.vscode = { + enable = true; + package = pkgs.writeScriptBin "vscode" "" // { pname = "vscode"; }; + enableUpdateCheck = false; + enableExtensionUpdateCheck = false; + }; + + nmt.script = '' + assertFileExists "home-files/${settingsPath}" + assertFileContent "home-files/${settingsPath}" "${expectedSettings}" + ''; +}