treewide: add custom packages + mcuxpesso IDE

This commit is contained in:
Anthony Rodriguez 2024-10-30 08:31:31 +01:00
parent 2e29a5cec7
commit 746f658c95
Signed by: nezia
GPG key ID: EE3BE97C040A86CE
9 changed files with 185 additions and 3 deletions

View file

@ -26,6 +26,7 @@
formatter = eachSystem (pkgs: treefmtEval.${pkgs.system}.config.build.wrapper); formatter = eachSystem (pkgs: treefmtEval.${pkgs.system}.config.build.wrapper);
nixosModules = import ./modules; nixosModules = import ./modules;
nixosConfigurations = import ./hosts {inherit self inputs;}; nixosConfigurations = import ./hosts {inherit self inputs;};
packages = eachSystem (pkgs: import ./pkgs pkgs);
deploy.nodes = import ./nodes {inherit self inputs;}; deploy.nodes = import ./nodes {inherit self inputs;};
}; };
inputs = { inputs = {

View file

@ -1,4 +1,8 @@
{pkgs, ...}: { {
inputs,
pkgs,
...
}: {
imports = [ imports = [
./browsers ./browsers
./media ./media
@ -35,5 +39,9 @@
nautilus nautilus
simple-scan simple-scan
entr entr
inputs.self.packages.${pkgs.system}.mcuxpresso.ide
dfu-util
segger-jlink
# inputs.self.packages.${pkgs.system}.mcuxpresso.config-tools
]; ];
} }

3
pkgs/default.nix Normal file
View file

@ -0,0 +1,3 @@
pkgs: {
mcuxpresso = import ./mcuxpresso pkgs;
}

View file

@ -0,0 +1,49 @@
{
eclipses,
stdenv,
requireFile,
...
}: let
name = "mcuxpressotools";
version = "v16-1";
description = "MCUXpresso Config Tools";
filename = "mcuxpresso-config-tools-${version}_amd64.deb";
src = stdenv.mkDerivation {
inherit version description;
name = "${name}-src";
src = requireFile {
url = "https://www.nxp.com/design/software/development-software/mcuxpresso-config-tools-pins-clocks-and-peripherals:MCUXpresso-Config-Tools";
name = "${filename}.bin";
sha256 = "sha256-BbEwxm1urV2IrgUiTiMBEAPvonQGwdL4fpqFftGgRxI=";
};
buildCommand = ''
# Unpack tarball.
mkdir -p deb
sh $src --target deb || true
ar -xv deb/${filename}
tar xfvz data.tar.gz -C .
mkdir -p ./final/eclipse
mv ./opt/nxp/MCUX_CFG_v13/bin/.* final/eclipse
mv ./usr final/
mv final/eclipse/tools final/eclipse/eclipse
mv final/eclipse/tools.ini final/eclipse/eclipse.ini
# Create custom .eclipseproduct file
echo "name=${name}
id=com.nxp.${name}
version=${version}
" > final/eclipse/.eclipseproduct
# Additional files
mkdir -p final/usr/share/mime
mv ./opt/nxp/MCUX_CFG_v13/mcu_data final/mcu_data
cd ./final
tar -czf $out ./
'';
};
in
eclipses.buildEclipse {inherit description name src;}

View file

@ -0,0 +1,3 @@
pkgs: {
ide = pkgs.callPackage ./ide.nix {};
}

105
pkgs/mcuxpresso/ide.nix Normal file
View file

@ -0,0 +1,105 @@
# https://github.com/KoviRobi/nixos-config/blob/3ab3f8372d1fd021a235de4d314ef7147846513e/overlays/mcuxpresso.nix
{pkgs, ...}: let
name = "mcuxpressoide";
version = "24.9.25";
description = "MCUXpresso IDE";
filename = "${name}-${version}.x86_64.deb";
mcuxpressoideSrc = pkgs.stdenv.mkDerivation {
inherit version description;
name = "${name}-src";
src = pkgs.requireFile {
url = "https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/mcuxpresso-integrated-development-environment-ide:MCUXpresso-IDE";
name = "${filename}.bin";
hash = "sha256-e3g7rzZQ1WFLcUakkjaufpHMtw3qkw5lwxJuCKs6L+k=";
};
buildCommand = ''
# Unpack tarball.
mkdir -p deb
sh $src --target deb || true
ar -xv deb/${filename}
tar xfvz data.tar.gz -C .
mkdir -p ./final/eclipse
find . -type f -iname "*mcuxpresso*" -o -iname "*.png" -o -iname "*.svg"
mv ./usr/local/${name}-${version}/ide/* ./usr/local/${name}-${version}/ide/.* final/eclipse
mv final/eclipse/mcuxpressoide final/eclipse/eclipse
mv final/eclipse/mcuxpressoide.ini final/eclipse/eclipse.ini
# Create custom .eclipseproduct file
rm final/eclipse/.eclipseproduct
echo "name=${name}
id=com.nxp.${name}
version=${version}
" > final/eclipse/.eclipseproduct
# Install udev rules
mkdir -p final/lib/udev/rules.d
mv ./lib/udev/rules.d/56-pemicro.rules ./lib/udev/rules.d/85-mcuxpresso.rules final/lib/udev/rules.d/
# Additional files
mv ./usr/local/${name}-${version}/mcu_data final/mcu_data
cd ./final
tar -czf $out ./
'';
};
mcuxpressoide = pkgs.eclipses.buildEclipse {
name = "mcuxpresso-eclipse";
inherit description;
src = mcuxpressoideSrc;
};
# needed because of the integrated toolchain
mcuxpressoFhsEnv = pkgs.buildFHSEnv {
name = "mcuxpresso-env";
targetPkgs = pkgs: [
pkgs.stdenv.cc.cc.lib
pkgs.gcc
pkgs.libgcc
pkgs.libstdcxx5
pkgs.xorg.libXext
pkgs.xorg.libX11
pkgs.xorg.libXrender
pkgs.xorg.libXtst
pkgs.xorg.libXi
pkgs.freetype
pkgs.alsa-lib
pkgs.ncurses
pkgs.ncurses5
pkgs.libusb1
pkgs.readline
pkgs.libffi
pkgs.zlib
pkgs.tcl
pkgs.libxcrypt
pkgs.libxcrypt-legacy
pkgs.libusb-compat-0_1
];
runScript = "${mcuxpressoide}/bin/eclipse";
};
in
# wrapper with desktop entry and udev rules
pkgs.stdenv.mkDerivation {
inherit name version description;
dontUnpack = true;
dontConfigure = true;
dontBuild = true;
nativeBuildInputs = [pkgs.copyDesktopItems];
desktopItems = [
(pkgs.makeDesktopItem {
inherit name;
type = "Application";
desktopName = "MCUXpresso IDE";
exec = "mcuxpresso";
})
];
installPhase = ''
runHook preInstall
mkdir -p $out/bin $out/lib/udev/rules.d $out/eclipse $out/mcu_data
cp ${mcuxpressoide}/lib/udev/rules.d/85-mcuxpresso.rules ${mcuxpressoide}/lib/udev/rules.d/56-pemicro.rules $out/lib/udev/rules.d/
ln -s ${mcuxpressoFhsEnv}/bin/mcuxpresso-env $out/bin/mcuxpresso
runHook postInstall
'';
}

View file

@ -7,6 +7,7 @@
"audio" "audio"
"video" "video"
"wheel" "wheel"
"plugdev"
]; ];
}; };
} }

View file

@ -1,6 +1,5 @@
{pkgs, ...}: { {pkgs, ...}: {
nixpkgs = { nixpkgs = {
config.allowUnfree = true;
overlays = [ overlays = [
(_: prev: { (_: prev: {
lib = lib =
@ -10,6 +9,11 @@
}; };
}) })
]; ];
config.permittedInsecurePackages = ["cinny-4.2.2" "cinny-unwrapped-4.2.2"];
config = {
allowUnfree = true;
permittedInsecurePackages = ["cinny-4.2.2" "cinny-unwrapped-4.2.2" "segger-jlink-qt4-796s"];
segger-jlink.acceptLicense = true;
};
}; };
} }

View file

@ -1,3 +1,11 @@
{ {
inputs,
pkgs,
...
}: {
imports = [./docker.nix ./gnupg.nix ./pipewire.nix ./kmscon.nix]; imports = [./docker.nix ./gnupg.nix ./pipewire.nix ./kmscon.nix];
services.udev.packages = [pkgs.segger-jlink inputs.self.packages.${pkgs.system}.mcuxpresso.ide];
services.udev.extraRules = ''
SUBSYSTEM=="usb", ATTR{idVendor}=="1fc9", ATTR{idProduct}=="0132", MODE="0666"
'';
} }