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
+ ];
+}