Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
126 changes: 65 additions & 61 deletions pkgs/development/tools/electron-fiddle/default.nix
Original file line number Diff line number Diff line change
@@ -1,30 +1,28 @@
{ buildFHSEnv
, electron_24
, fetchFromGitHub
, fetchYarnDeps
, fetchurl
, fixup-yarn-lock
, git
, lib
, makeDesktopItem
, nodejs_18
, stdenvNoCC
, util-linux
, yarn
, zip
{
buildFHSEnv,
electron,
fetchFromGitHub,
fetchYarnDeps,
fetchurl,
yarnConfigHook,
yarnBuildHook,
git,
lib,
makeDesktopItem,
nodejs,
stdenvNoCC,
util-linux,
zip,
}:

let
pname = "electron-fiddle";
version = "0.32.6";
electron = electron_24;
nodejs = nodejs_18;
version = "0.36.4";

src = fetchFromGitHub {
owner = "electron";
repo = "fiddle";
rev = "v${version}";
hash = "sha256-Iuss2xwts1aWy2rKYG7J2EvFdH8Bbedn/uZG2bi9UHw=";
rev = "refs/tags/v${version}";
hash = "sha256-z251eD8N3QQoQzx613yNRBhVIumrapBQ+onkEhk5nr8=";
};

# As of https://github.com/electron/fiddle/pull/1316 this is fetched
Expand All @@ -35,52 +33,51 @@ let
hash = "sha256-1sxd3eJ6/WjXS6XQbrgKUTNUmrhuc1dAvy+VAivGErg=";
};

offlineCache = fetchYarnDeps {
yarnLock = "${src}/yarn.lock";
hash = "sha256-dwhwUWwv6RYKEMdhRBvKVXvM8n1r+Qo0D3/uFsWIOpw=";
};

electronDummyMirror = "https://electron.invalid/";
electronDummyDir = "nix";
electronDummyFilename =
builtins.baseNameOf (builtins.head (electron.src.urls));
electronDummyHash =
builtins.hashString "sha256" "${electronDummyMirror}${electronDummyDir}";

unwrapped = stdenvNoCC.mkDerivation {
pname = "${pname}-unwrapped";
pname = "electron-fiddle-unwrapped";
inherit version src;

nativeBuildInputs = [ fixup-yarn-lock git nodejs util-linux yarn zip ];
offlineCache = fetchYarnDeps {
yarnLock = "${src}/yarn.lock";
hash = "sha256-7iEWI1X+7kqqj9QOXpb5Rq22wdMbrAKdyY9UJekUbas=";
};

nativeBuildInputs = [
yarnConfigHook
yarnBuildHook
git
nodejs
util-linux
zip
];

configurePhase = ''
export HOME=$TMPDIR
fixup-yarn-lock yarn.lock
yarn config --offline set yarn-offline-mirror ${offlineCache}
yarn install --offline --frozen-lockfile --ignore-scripts --no-progress --non-interactive
patchShebangs node_modules
preBuild = ''
ln -s ${releasesJson} static/releases.json

mkdir -p ~/.cache/electron/${electronDummyHash}
cp -ra '${electron.dist}' "$TMPDIR/electron"
chmod -R u+w "$TMPDIR/electron"
(cd "$TMPDIR/electron" && zip -0Xr ~/.cache/electron/${electronDummyHash}/${electronDummyFilename} .)
# electron files need to be writable on Darwin
cp -r ${electron.dist} electron-dist
chmod -R u+w electron-dist

ln -s ${releasesJson} static/releases.json
'';
pushd electron-dist
zip -0Xqr ../electron.zip .
popd

buildPhase = ''
ELECTRON_CUSTOM_VERSION='${electron.version}' \
ELECTRON_MIRROR='${electronDummyMirror}' \
ELECTRON_CUSTOM_DIR='${electronDummyDir}' \
ELECTRON_CUSTOM_FILENAME='${electronDummyFilename}' \
yarn --offline run package
rm -r electron-dist

# force @electron/packager to use our electron instead of downloading it, even if it is a different version
substituteInPlace node_modules/@electron/packager/dist/packager.js \
--replace-fail 'await this.getElectronZipPath(downloadOpts)' '"electron.zip"'
'';

yarnBuildScript = "package";

installPhase = ''
runHook preInstall

mkdir -p "$out/lib/electron-fiddle/resources"
cp "out/Electron Fiddle-"*/resources/app.asar "$out/lib/electron-fiddle/resources/"
mkdir -p "$out/share/icons/hicolor/scalable/apps"
cp assets/icons/fiddle.svg "$out/share/icons/hicolor/scalable/apps/electron-fiddle.svg"

runHook postInstall
'';
};

Expand All @@ -92,7 +89,11 @@ let
exec = "electron-fiddle %U";
icon = "electron-fiddle";
startupNotify = true;
categories = [ "GNOME" "GTK" "Utility" ];
categories = [
"GNOME"
"GTK"
"Utility"
];
mimeTypes = [ "x-scheme-handler/electron-fiddle" ];
};

Expand All @@ -102,13 +103,12 @@ buildFHSEnv {
runScript = "${electron}/bin/electron ${unwrapped}/lib/electron-fiddle/resources/app.asar";

extraInstallCommands = ''
mkdir -p "$out/share/icons/hicolor/scalable/apps"
ln -s "${unwrapped}/share/icons/hicolor/scalable/apps/electron-fiddle.svg" "$out/share/icons/hicolor/scalable/apps/"
mkdir -p "$out/share/applications"
cp "${desktopItem}/share/applications"/*.desktop "$out/share/applications/"
install -Dm644 "${src}"/assets/icons/fiddle.svg "$out"/share/icons/hicolor/scalable/apps/electron-fiddle.svg
install -Dm644 "${desktopItem}"/share/applications/*.desktop -t "$out"/share/applications/
'';

targetPkgs = pkgs:
targetPkgs =
pkgs:
with pkgs;
map lib.getLib [
# for electron-fiddle itself
Expand Down Expand Up @@ -170,7 +170,11 @@ buildFHSEnv {
description = "Easiest way to get started with Electron";
homepage = "https://www.electronjs.org/fiddle";
license = licenses.mit;
maintainers = with maintainers; [ andersk ];
mainProgram = "electron-fiddle";
maintainers = with maintainers; [
andersk
tomasajt
];
platforms = electron.meta.platforms;
};
}