nixpkgs/pkgs/misc/vscode-extensions/vscode-utils.nix

97 lines
2.6 KiB
Nix
Raw Normal View History

{ stdenv, lib, writeShellScriptBin, fetchurl, vscode, unzip }:
2017-08-12 04:27:17 +00:00
let
extendedPkgVersion = lib.getVersion vscode;
extendedPkgName = lib.removeSuffix "-${extendedPkgVersion}" vscode.name;
buildVscodeExtension = a@{
name,
namePrefix ? "${extendedPkgName}-extension-",
src,
# Same as "Unique Identifier" on the extension's web page.
# For the moment, only serve as unique extension dir.
vscodeExtUniqueId,
2017-08-12 04:27:17 +00:00
configurePhase ? ":",
buildPhase ? ":",
dontPatchELF ? true,
dontStrip ? true,
buildInputs ? [],
...
}:
stdenv.mkDerivation ((removeAttrs a [ "vscodeExtUniqueId" ]) // {
2017-08-12 04:27:17 +00:00
name = namePrefix + name;
inherit vscodeExtUniqueId;
2017-08-12 04:27:17 +00:00
inherit configurePhase buildPhase dontPatchELF dontStrip;
installPrefix = "share/${extendedPkgName}/extensions/${vscodeExtUniqueId}";
buildInputs = [ unzip ] ++ buildInputs;
2017-08-12 04:27:17 +00:00
installPhase = ''
runHook preInstall
mkdir -p "$out/$installPrefix"
find . -mindepth 1 -maxdepth 1 | xargs -d'\n' mv -t "$out/$installPrefix/"
runHook postInstall
2017-08-12 04:27:17 +00:00
'';
});
fetchVsixFromVscodeMarketplace = mktplcExtRef:
fetchurl((import ./mktplcExtRefToFetchArgs.nix mktplcExtRef));
2017-08-12 04:27:17 +00:00
buildVscodeMarketplaceExtension = a@{
name ? "",
src ? null,
mktplcRef,
...
}: assert "" == name; assert null == src;
buildVscodeExtension ((removeAttrs a [ "mktplcRef" ]) // {
name = "${mktplcRef.publisher}-${mktplcRef.name}-${mktplcRef.version}";
2017-08-12 04:27:17 +00:00
src = fetchVsixFromVscodeMarketplace mktplcRef;
vscodeExtUniqueId = "${mktplcRef.publisher}.${mktplcRef.name}";
2017-08-12 04:27:17 +00:00
});
mktplcRefAttrList = [
"name"
"publisher"
"version"
"sha256"
];
mktplcExtRefToExtDrv = ext:
buildVscodeMarketplaceExtension ((removeAttrs ext mktplcRefAttrList) // {
mktplcRef = ext;
});
2017-08-12 04:27:17 +00:00
extensionFromVscodeMarketplace = mktplcExtRefToExtDrv;
2017-08-12 04:27:17 +00:00
extensionsFromVscodeMarketplace = mktplcExtRefList:
builtins.map extensionFromVscodeMarketplace mktplcExtRefList;
2017-08-12 04:27:17 +00:00
vscodeWithConfiguration = (userParams : import ./vscodeWithConfiguration.nix {
inherit lib vscode extensionsFromVscodeMarketplace writeShellScriptBin;
} // userParams);
vscodeExts2nix = (userParams : import ./vscodeExts2nix.nix {
inherit lib vscode;
} // userParams);
vscodeEnv = (userParams : import ./vscodeEnv.nix {
inherit lib writeShellScriptBin extensionsFromVscodeMarketplace vscode;
} // userParams );
in
2017-08-12 04:27:17 +00:00
{
inherit fetchVsixFromVscodeMarketplace buildVscodeExtension
buildVscodeMarketplaceExtension extensionFromVscodeMarketplace
extensionsFromVscodeMarketplace
vscodeWithConfiguration vscodeExts2nix vscodeEnv;
}