diff options
Diffstat (limited to 'pkgs/applications/editors/vscode/extensions/vscodeWithConfiguration.nix')
-rw-r--r-- | pkgs/applications/editors/vscode/extensions/vscodeWithConfiguration.nix | 75 |
1 files changed, 41 insertions, 34 deletions
diff --git a/pkgs/applications/editors/vscode/extensions/vscodeWithConfiguration.nix b/pkgs/applications/editors/vscode/extensions/vscodeWithConfiguration.nix index 39479d7c2f2ce..6e2fd767a792e 100644 --- a/pkgs/applications/editors/vscode/extensions/vscodeWithConfiguration.nix +++ b/pkgs/applications/editors/vscode/extensions/vscodeWithConfiguration.nix @@ -1,54 +1,61 @@ # wrapper over vscode to control extensions per project (extensions folder will be created in execution path) -{ lib -, writeShellScriptBin -, extensionsFromVscodeMarketplace -, vscodeDefault +{ + lib, + writeShellScriptBin, + extensionsFromVscodeMarketplace, + vscodeDefault, }: ## User input -{ vscode ? vscodeDefault -# extensions to be symlinked into the project's extensions folder -, nixExtensions ? [] -# extensions to be copied into the project's extensions folder -, mutableExtensions ? [] -, vscodeExtsFolderName ? ".vscode-exts" -, user-data-dir ? ''"''${TMP}vscodeWithConfiguration/vscode-data-dir"'' +{ + vscode ? vscodeDefault, + # extensions to be symlinked into the project's extensions folder + nixExtensions ? [ ], + # extensions to be copied into the project's extensions folder + mutableExtensions ? [ ], + vscodeExtsFolderName ? ".vscode-exts", + user-data-dir ? ''"''${TMP}vscodeWithConfiguration/vscode-data-dir"'', }: let nixExtsDrvs = extensionsFromVscodeMarketplace nixExtensions; mutExtsDrvs = extensionsFromVscodeMarketplace mutableExtensions; - mutableExtsPaths = lib.forEach mutExtsDrvs ( e: - { + mutableExtsPaths = lib.forEach mutExtsDrvs (e: { origin = "${e}/share/vscode/extensions/${e.vscodeExtUniqueId}"; - target = ''${vscodeExtsFolderName}/${e.vscodeExtUniqueId}-${(lib.findSingle (ext: "${ext.publisher}.${ext.name}" == e.vscodeExtUniqueId) "" "m" mutableExtensions ).version}''; - } - ); + target = ''${vscodeExtsFolderName}/${e.vscodeExtUniqueId}-${ + (lib.findSingle ( + ext: "${ext.publisher}.${ext.name}" == e.vscodeExtUniqueId + ) "" "m" mutableExtensions).version + }''; + }); #removed not defined extensions - rmExtensions = lib.optionalString (nixExtensions++mutableExtensions != []) '' + rmExtensions = lib.optionalString (nixExtensions ++ mutableExtensions != [ ]) '' find ${vscodeExtsFolderName} -mindepth 1 -maxdepth 1 ${ - lib.concatMapStringsSep " " (e : "! -iname ${e.publisher}.${e.name} ") nixExtensions - + - lib.concatMapStringsSep " " (e : "! -iname ${e.publisher}.${e.name}-${e.version} ") mutableExtensions - } -exec rm -rf {} \; + lib.concatMapStringsSep " " (e: "! -iname ${e.publisher}.${e.name} ") nixExtensions + + lib.concatMapStringsSep " " ( + e: "! -iname ${e.publisher}.${e.name}-${e.version} " + ) mutableExtensions + } -exec rm -rf {} \; ''; #copy mutable extension out of the nix store cpExtensions = '' - ${lib.concatMapStringsSep "\n" (e : "ln -sfn ${e}/share/vscode/extensions/* ${vscodeExtsFolderName}/") nixExtsDrvs} - ${lib.concatMapStringsSep "\n" (ePath : '' + ${lib.concatMapStringsSep "\n" ( + e: "ln -sfn ${e}/share/vscode/extensions/* ${vscodeExtsFolderName}/" + ) nixExtsDrvs} + ${lib.concatMapStringsSep "\n" (ePath: '' if [ ! -d ${ePath.target} ]; then cp -a ${ePath.origin} ${ePath.target} chmod -R u+rwx ${ePath.target} fi - '') mutableExtsPaths} + '') mutableExtsPaths} ''; in - writeShellScriptBin "code" '' - if ! [[ "$@" =~ "--list-extension" ]]; then - mkdir -p "${vscodeExtsFolderName}" - ${rmExtensions} - ${cpExtensions} - fi - ${vscode}/bin/code --extensions-dir "${vscodeExtsFolderName}" ${ - lib.optionalString (user-data-dir != "") "--user-data-dir ${user-data-dir}" - } "$@" - '' +writeShellScriptBin "code" '' + if ! [[ "$@" =~ "--list-extension" ]]; then + mkdir -p "${vscodeExtsFolderName}" + ${rmExtensions} + ${cpExtensions} + fi + ${vscode}/bin/code --extensions-dir "${vscodeExtsFolderName}" ${ + lib.optionalString (user-data-dir != "") "--user-data-dir ${user-data-dir}" + } "$@" +'' |