From f632cd79aea1a4148cd2650996fc7769bfd37751 Mon Sep 17 00:00:00 2001 From: Jakob Lechner Date: Tue, 31 Dec 2024 15:56:27 +0100 Subject: [PATCH] Add ksoloti --- pkgs/default.nix | 5 +- pkgs/ksoloti/default.nix | 110 +++++++++++++++++++++++++++ pkgs/ksoloti/module.nix | 5 ++ pkgs/modules.nix | 1 + users/jalr/modules/sound/default.nix | 3 +- users/jalr/modules/sound/ksoloti.nix | 7 ++ 6 files changed, 129 insertions(+), 2 deletions(-) create mode 100644 pkgs/ksoloti/default.nix create mode 100644 pkgs/ksoloti/module.nix create mode 100644 users/jalr/modules/sound/ksoloti.nix diff --git a/pkgs/default.nix b/pkgs/default.nix index 62b61c9..677507c 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -2,12 +2,15 @@ final: prev: let - inherit (prev) callPackage system; + inherit (prev) callPackage system pkgsCross darwin; poetry2nix = callPackage inputs.poetry2nix { }; in { ariang = callPackage ./ariang { }; asterisk-sounds-de = callPackage ./asterisk-sounds-de { }; + ksoloti = callPackage ./ksoloti { + gcc-arm-embedded = pkgsCross.arm-embedded.buildPackages.gcc; + }; docker-machine-driver-hetzner = callPackage ./docker-machine-driver-hetzner { inherit (inputs.gomod2nix.legacyPackages.${system}) buildGoApplication; }; diff --git a/pkgs/ksoloti/default.nix b/pkgs/ksoloti/default.nix new file mode 100644 index 0000000..54cdb30 --- /dev/null +++ b/pkgs/ksoloti/default.nix @@ -0,0 +1,110 @@ +{ lib +, pkgs +, stdenv +, fetchFromGitHub +, gnumake +, gcc-arm-embedded +, jdk +, libfaketime +, ant +, makeWrapper +, dfu-util +}: + +stdenv.mkDerivation rec { + version = "1.1.0beta"; + pname = "ksoloti"; + + src = fetchFromGitHub { + owner = "ksoloti"; + repo = "ksoloti"; + rev = version; + sha256 = "sha256-RRwar0X2gI0LyM/pNhnlLet06MzrG4z4lm3kCmzWwBc="; + }; + + buildInputs = [ jdk libfaketime ]; + + nativeBuildInputs = [ + ant + gcc-arm-embedded + gnumake + makeWrapper + ]; + + propagatedBuildInputs = [ + dfu-util + gcc-arm-embedded + ]; + + /* + # Hardcode dfu-util path + substituteInPlace "platform_linux/upload_fw_dfu.sh" \ + --replace-fail "/bin/dfu-util" "" + substituteInPlace "platform_linux/upload_fw_dfu.sh" \ + --replace-fail "./dfu-util" "${dfu-util-ksoloti}/bin/dfu-util" + + */ + patchPhase = '' + # Hardcode path to "make" + for f in "firmware/compile_firmware_linux.sh" \ + "firmware/compile_patch_linux.sh"; do + substituteInPlace "$f" \ + --replace "make" "${gnumake}/bin/make" + done + + # Fix build version + substituteInPlace "build.xml" \ + --replace-fail "(git missing)" "${version}" + # Remove build time + substituteInPlace "build.xml" \ + --replace-fail "" "" + substituteInPlace "build.xml" \ + --replace-fail \ + '' \ + '' + substituteInPlace "build.xml" \ + --replace-fail "" "" + substituteInPlace "build.xml" \ + --replace-fail \ + '{line.separator}' \ + '{line.separator} ' + ''; + + buildPhase = '' + ( + find . -exec touch -d '1970-01-01 00:00' {} \; + (cd platform_linux; PATH="${pkgs.gcc-arm-embedded}/bin:$PATH" sh compile_firmware.sh BOARD_AXOLOTI_CORE) + faketime "1970-01-01 00:00:00" ant -Dbuild.runtime=true + ) + ''; + + installPhase = '' + mkdir -p $out/bin $out/share/ksoloti + + cp -r doc firmware chibios platform_linux CMSIS *.txt $out/share/ksoloti/ + install -vD dist/Ksoloti.jar $out/share/ksoloti/ + + patchShebangs $out/share/ksoloti/platform_linux/*.sh + + rm $out/share/ksoloti/platform_linux/bin/dfu-util + ln -s ${dfu-util}/bin/dfu-util $out/share/ksoloti/platform_linux/bin/dfu-util + + makeWrapper ${jdk}/bin/java $out/bin/ksoloti --add-flags "-Dksoloti_release=$out/share/ksoloti -Dksoloti_runtime=$out/share/ksoloti -jar $out/share/ksoloti/Ksoloti.jar" --prefix PATH : ${ + lib.makeBinPath [ + pkgs.gcc-arm-embedded + ] + } + ''; + + meta = with lib; { + homepage = "http://ksoloti.github.io"; + description = '' + Sketching embedded digital audio algorithms. + + To fix permissions of the Ksoloti USB device node, add a similar udev rule to services.udev.extraRules: + SUBSYSTEM=="usb", ATTR{idVendor}=="16c0", ATTR{idProduct}=="0442", OWNER="someuser", GROUP="somegroup" + ''; + license = licenses.gpl3; + maintainers = with maintainers; [ ]; + }; +} diff --git a/pkgs/ksoloti/module.nix b/pkgs/ksoloti/module.nix new file mode 100644 index 0000000..2948be5 --- /dev/null +++ b/pkgs/ksoloti/module.nix @@ -0,0 +1,5 @@ +{ + services.udev.extraRules = '' + SUBSYSTEM=="usb", ATTR{idVendor}=="16c0", ATTR{idProduct}=="0442", OWNER="jalr", GROUP="users" + ''; +} diff --git a/pkgs/modules.nix b/pkgs/modules.nix index cdfda2f..25865fa 100644 --- a/pkgs/modules.nix +++ b/pkgs/modules.nix @@ -3,6 +3,7 @@ { imports = [ ./asterisk-sounds-de/module.nix + ./ksoloti/module.nix ./myintercom-doorbell/module.nix ./pretix-banktool/module.nix ]; diff --git a/users/jalr/modules/sound/default.nix b/users/jalr/modules/sound/default.nix index 21f8976..37008dd 100644 --- a/users/jalr/modules/sound/default.nix +++ b/users/jalr/modules/sound/default.nix @@ -1,9 +1,10 @@ -{ nixosConfig, ... }: +{ nixosConfig, pkgs, ... }: { imports = [ ./audacity.nix ./easyeffects.nix ./pipewire.nix + ./ksoloti.nix ]; } diff --git a/users/jalr/modules/sound/ksoloti.nix b/users/jalr/modules/sound/ksoloti.nix new file mode 100644 index 0000000..3528602 --- /dev/null +++ b/users/jalr/modules/sound/ksoloti.nix @@ -0,0 +1,7 @@ +{ nixosConfig, lib, pkgs, ... }: + +lib.mkIf nixosConfig.jalr.gui.enable { + home.packages = with pkgs; [ + ksoloti + ]; +}