vscodium: fix bundle resources being modified on darwin (#373630)
[NixPkgs.git] / pkgs / applications / editors / vscode / extensions / updateSettings.nix
blobfe23e099b536da93600de7730b0cdb2d31c3ec22
1 # Updates the vscode setting file base on a nix expression
2 # should run from the workspace root.
4   writeShellScriptBin,
5   lib,
6   jq,
7 }:
8 ##User Input
10   settings ? { },
11   # if marked as true will create an empty json file if does not exist
12   createIfDoesNotExists ? true,
13   vscodeSettingsFile ? ".vscode/settings.json",
14   userSettingsFolder ? "",
15   symlinkFromUserSetting ? false,
17 let
19   updateVSCodeSettingsCmd = ''
20     (
21       echo 'updateSettings.nix: Updating ${vscodeSettingsFile}...'
22       oldSettings=$(cat ${vscodeSettingsFile})
23       echo $oldSettings' ${builtins.toJSON settings}' | ${jq}/bin/jq -s add > ${vscodeSettingsFile}
24     )'';
26   createEmptySettingsCmd = ''mkdir -p .vscode && echo "{}" > ${vscodeSettingsFile}'';
27   fileName = builtins.baseNameOf vscodeSettingsFile;
28   symlinkFromUserSettingCmd = lib.optionalString symlinkFromUserSetting ''&& mkdir -p "${userSettingsFolder}" && ln -sfv "$(pwd)/${vscodeSettingsFile}" "${userSettingsFolder}/" '';
31 writeShellScriptBin ''vscodeNixUpdate-${lib.removeSuffix ".json" (fileName)}'' (
32   lib.optionalString (settings != { }) (
33     if createIfDoesNotExists then
34       ''
35         [ ! -f "${vscodeSettingsFile}" ] && ${createEmptySettingsCmd}
36         ${updateVSCodeSettingsCmd} ${symlinkFromUserSettingCmd}
37       ''
38     else
39       ''
40         [ -f "${vscodeSettingsFile}" ] && ${updateVSCodeSettingsCmd} ${symlinkFromUserSettingCmd}
41       ''
42   )