nixpkgs/pkgs/by-name/ic/icestudio/package.nix
Fedi Jamoussi 3c19b680f9
icestudio: init at 0-unstable-2024-11-18 (#356775)
Co-authored-by: Abdullah Imad <me@imad.nyc>
Co-authored-by: Alberto Merino <amerinor01@gmail.com>
Co-authored-by: Enric Morales <me@enric.me>
Co-authored-by: Jack Leightcap <jack@leightcap.com>
Co-authored-by: Roland Coeurjoly <rolandcoeurjoly@gmail.com>
Co-authored-by: Fedi Jamoussi <Fedi.Jamoussi@protonmail.ch>
2024-11-19 10:02:25 +01:00

126 lines
3.2 KiB
Nix

{
lib,
fetchurl,
fetchFromGitHub,
buildNpmPackage,
makeDesktopItem,
makeWrapper,
nwjs,
python3,
}:
let
# Use unstable because it has improvements for finding python
version = "0-unstable-2024-11-18";
src = fetchFromGitHub {
owner = "FPGAwars";
repo = "icestudio";
rev = "87d057adb1e795352a7dd67666a69ada4269b2e8";
hash = "sha256-VZuc5Wa6o5PMUE+P4EMDl/pI/zmcff9OEhqeCfS4bzE=";
};
collection = fetchurl {
url = "https://github.com/FPGAwars/collection-default/archive/v0.4.1.zip";
hash = "sha256-F2cAqkTPC7xfGnPQiS8lTrD4y34EkHFUEDPVaYzVVg8=";
};
app = buildNpmPackage {
pname = "icestudio-app";
inherit version src;
npmDepsHash = "sha256-CbrnhnhCG8AdAqySO6fB5hZ128lHyC3WH/vZcFtv6Ko=";
sourceRoot = "${src.name}/app";
dontNpmBuild = true;
installPhase = ''
cp -r . $out
'';
};
desktopItem = makeDesktopItem {
desktopName = "Icestudio";
comment = "Visual editor for open FPGA boards";
name = "icestudio";
exec = "icestudio";
icon = "icestudio";
terminal = false;
categories = [ "Development" ];
};
in
buildNpmPackage rec {
pname = "icestudio";
inherit version src;
npmDepsHash = "sha256-y1lo5+qJ6JBxjt7wtUmTHuJHMH9Mztf6xmmadI8zBgA=";
npmFlags = [
# Use the legacy dependency resolution, with less strict version
# requirements for transative dependencies
"--legacy-peer-deps"
# We want to avoid call the scripts/postInstall.sh until we copy the
# collection and app derivation we do that on installPhase
"--ignore-scripts"
];
buildPhase = ''
runHook preBuild
# Copy the `app` derivation into the folder expected for grunt
cp -r ${app}/* app
# Copy the cached `collection` derivation into the cache location so that
# grunt avoids downloading it
install -m444 -D ${collection} cache/collection/collection-default.zip
./node_modules/.bin/grunt getcollection
# Use grunt to distribute package
# TODO: support aarch64
./node_modules/.bin/grunt dist \
--platform=none `# skip platform-specific steps` \
--dont-build-nwjs `# use the nwjs package shipped by Nix` \
--dont-clean-tmp `# skip cleaning the tmp folder as we'll use it in $out`
runHook postBuild
'';
installPhase = ''
runHook preInstall
cp -r dist/tmp $out
for size in 16 32 64 128 256; do
install -Dm644 docs/resources/icons/"$size"x"$size"/apps/icon.png \
$out/share/icons/hicolor/"$size"x"$size"/apps/icestudio.png
done
install -Dm644 ${desktopItem}/share/applications/icestudio.desktop -t $out/share/applications
makeWrapper ${nwjs}/bin/nw $out/bin/${pname} \
--add-flags $out \
--prefix PATH : "${python3}/bin"
runHook postInstall
'';
nativeBuildInputs = [ makeWrapper ];
buildInputs = [ python3 ];
meta = {
description = "Visual editor for open FPGA boards";
homepage = "https://github.com/FPGAwars/icestudio/";
license = lib.licenses.gpl2Only;
maintainers =
with lib.maintainers;
[
kiike
jleightcap
rcoeurjoly
amerino
]
++ [ lib.teams.ngi ];
mainProgram = "icestudio";
platforms = lib.platforms.linux;
};
}