2019-12-24 18:15:15 +00:00
|
|
|
{ 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,
|
2017-08-24 01:24:57 +00:00
|
|
|
# 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 ? [],
|
|
|
|
...
|
|
|
|
}:
|
2017-08-24 01:24:57 +00:00
|
|
|
stdenv.mkDerivation ((removeAttrs a [ "vscodeExtUniqueId" ]) // {
|
2017-08-12 04:27:17 +00:00
|
|
|
|
|
|
|
name = namePrefix + name;
|
|
|
|
|
2017-08-24 01:24:57 +00:00
|
|
|
inherit vscodeExtUniqueId;
|
2017-08-12 04:27:17 +00:00
|
|
|
inherit configurePhase buildPhase dontPatchELF dontStrip;
|
|
|
|
|
2019-02-04 01:02:18 +00:00
|
|
|
installPrefix = "share/${extendedPkgName}/extensions/${vscodeExtUniqueId}";
|
|
|
|
|
2017-08-24 01:24:57 +00:00
|
|
|
buildInputs = [ unzip ] ++ buildInputs;
|
2017-08-12 04:27:17 +00:00
|
|
|
|
|
|
|
installPhase = ''
|
2019-12-24 18:15:15 +00:00
|
|
|
|
2019-02-04 01:02:18 +00:00
|
|
|
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:
|
2019-12-24 18:15:15 +00:00
|
|
|
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" ]) // {
|
2017-08-24 01:24:57 +00:00
|
|
|
name = "${mktplcRef.publisher}-${mktplcRef.name}-${mktplcRef.version}";
|
2017-08-12 04:27:17 +00:00
|
|
|
src = fetchVsixFromVscodeMarketplace mktplcRef;
|
2017-08-24 01:24:57 +00:00
|
|
|
vscodeExtUniqueId = "${mktplcRef.publisher}.${mktplcRef.name}";
|
2017-08-12 04:27:17 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
mktplcRefAttrList = [
|
|
|
|
"name"
|
|
|
|
"publisher"
|
|
|
|
"version"
|
|
|
|
"sha256"
|
|
|
|
];
|
|
|
|
|
2018-06-18 13:31:15 +00:00
|
|
|
mktplcExtRefToExtDrv = ext:
|
|
|
|
buildVscodeMarketplaceExtension ((removeAttrs ext mktplcRefAttrList) // {
|
|
|
|
mktplcRef = ext;
|
|
|
|
});
|
2017-08-12 04:27:17 +00:00
|
|
|
|
2017-10-19 01:32:15 +00:00
|
|
|
extensionFromVscodeMarketplace = mktplcExtRefToExtDrv;
|
2017-08-12 04:27:17 +00:00
|
|
|
extensionsFromVscodeMarketplace = mktplcExtRefList:
|
2017-10-19 01:32:15 +00:00
|
|
|
builtins.map extensionFromVscodeMarketplace mktplcExtRefList;
|
2017-08-12 04:27:17 +00:00
|
|
|
|
2019-12-24 18:15:15 +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
|
|
|
|
|
|
|
{
|
2018-06-18 13:31:15 +00:00
|
|
|
inherit fetchVsixFromVscodeMarketplace buildVscodeExtension
|
2017-10-19 01:32:15 +00:00
|
|
|
buildVscodeMarketplaceExtension extensionFromVscodeMarketplace
|
2019-12-24 18:15:15 +00:00
|
|
|
extensionsFromVscodeMarketplace
|
|
|
|
vscodeWithConfiguration vscodeExts2nix vscodeEnv;
|
2018-06-18 13:31:15 +00:00
|
|
|
}
|