From e5a02d6e32d5c12dacbb4981c907421807652a98 Mon Sep 17 00:00:00 2001 From: dzuberi Date: Sat, 18 Apr 2026 11:04:37 -0700 Subject: [PATCH 01/11] test flake --- flake.nix | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 flake.nix diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..c34c7d0 --- /dev/null +++ b/flake.nix @@ -0,0 +1,47 @@ +{ + description = "Unofficial linux driver for the Sennheiser BTD 700 dongle"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + }; + + outputs = { self, nixpkgs }: + let + supportedSystems = [ "x86_64-linux" "aarch64-linux" "riscv64-linux" ]; + forAllSystems = nixpkgs.lib.genAttrs supportedSystems; + in + { + packages = forAllSystems (system: + let + pkgs = nixpkgs.legacyPackages.${system}; + in + { + default = pkgs.stdenv.mkDerivation { + pname = "btd700ctl"; + version = "unstable-${self.shortRev or "dirty"}"; + + src = ./.; + + nativeBuildInputs = with pkgs; [ cmake pkg-config ]; + buildInputs = with pkgs; [ hidapi ]; + + postInstall = '' + install -Dm644 ../udev/99-btd700.rules -t $out/lib/udev/rules.d/ + ''; + + meta = with pkgs.lib; { + description = "Unofficial linux driver for the Sennheiser BTD 700 dongle"; + homepage = "https://github.com/sobalap/btd700ctl"; + license = licenses.lgpl21Only; + platforms = platforms.linux; + mainProgram = "btd700ctl"; + }; + }; + }); + + nixosModules.default = { pkgs, ... }: { + services.udev.packages = [ self.packages.${pkgs.system}.default ]; + environment.systemPackages = [ self.packages.${pkgs.system}.default ]; + }; + }; +} From 5eb40d4d03906230d4fd755cd8a1da017ccc9edf Mon Sep 17 00:00:00 2001 From: dzuberi Date: Sat, 18 Apr 2026 11:13:47 -0700 Subject: [PATCH 02/11] add systemd user service to flake --- flake.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/flake.nix b/flake.nix index c34c7d0..6aa902c 100644 --- a/flake.nix +++ b/flake.nix @@ -42,6 +42,11 @@ nixosModules.default = { pkgs, ... }: { services.udev.packages = [ self.packages.${pkgs.system}.default ]; environment.systemPackages = [ self.packages.${pkgs.system}.default ]; + systemd.packages = [ self.packages.${pkgs.system}.default ]; + systemd.user.services.btd700d = { + wantedBy = [ "default.target" ]; + serviceConfig.ExecStart = "${self.packages.${pkgs.system}.default}/bin/btd700d"; + }; }; }; } From dbdfd2b1ca5958772c2f8b2a154924b15763d348 Mon Sep 17 00:00:00 2001 From: dzuberi Date: Sat, 18 Apr 2026 11:16:03 -0700 Subject: [PATCH 03/11] fix binary location for nix --- flake.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 6aa902c..ef2f3c9 100644 --- a/flake.nix +++ b/flake.nix @@ -27,6 +27,8 @@ postInstall = '' install -Dm644 ../udev/99-btd700.rules -t $out/lib/udev/rules.d/ + substituteInPlace $out/share/systemd/user/btd700d.service \ + --replace-fail "/usr/local/bin/btd700d" "$out/bin/btd700d" ''; meta = with pkgs.lib; { @@ -45,7 +47,6 @@ systemd.packages = [ self.packages.${pkgs.system}.default ]; systemd.user.services.btd700d = { wantedBy = [ "default.target" ]; - serviceConfig.ExecStart = "${self.packages.${pkgs.system}.default}/bin/btd700d"; }; }; }; From 6f8bcda44ef7a68c7102eb957e999b74f942d58f Mon Sep 17 00:00:00 2001 From: dzuberi Date: Sat, 18 Apr 2026 11:18:38 -0700 Subject: [PATCH 04/11] share->lib --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index ef2f3c9..466b176 100644 --- a/flake.nix +++ b/flake.nix @@ -27,7 +27,7 @@ postInstall = '' install -Dm644 ../udev/99-btd700.rules -t $out/lib/udev/rules.d/ - substituteInPlace $out/share/systemd/user/btd700d.service \ + substituteInPlace $out/lib/systemd/user/btd700d.service \ --replace-fail "/usr/local/bin/btd700d" "$out/bin/btd700d" ''; From a75aa3197b8b2798152a5c1836339aeb6bc5def5 Mon Sep 17 00:00:00 2001 From: dzuberi Date: Sat, 18 Apr 2026 11:22:22 -0700 Subject: [PATCH 05/11] add wireplumber for wpctl --- flake.nix | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 466b176..47de6aa 100644 --- a/flake.nix +++ b/flake.nix @@ -22,13 +22,15 @@ src = ./.; - nativeBuildInputs = with pkgs; [ cmake pkg-config ]; + nativeBuildInputs = with pkgs; [ cmake pkg-config makeWrapper ]; buildInputs = with pkgs; [ hidapi ]; postInstall = '' install -Dm644 ../udev/99-btd700.rules -t $out/lib/udev/rules.d/ substituteInPlace $out/lib/systemd/user/btd700d.service \ --replace-fail "/usr/local/bin/btd700d" "$out/bin/btd700d" + wrapProgram $out/bin/btd700d \ + --prefix PATH : ${pkgs.wireplumber}/bin ''; meta = with pkgs.lib; { From d30810f901a039c4053432da4b1a681899d802f8 Mon Sep 17 00:00:00 2001 From: dzuberi Date: Sat, 18 Apr 2026 11:35:57 -0700 Subject: [PATCH 06/11] nix readme --- README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.md b/README.md index eb7870b..92f5741 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,19 @@ sudo pacman -S base-devel cmake hidapi # fedora sudo dnf install gcc cmake hidapi-devel + +# nix + inputs = { + btd700ctl = { + url = "github:sobalap/btd700ctl"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + } + + modules = [ + inputs.btd700ctl.nixosModules.default + ] + ``` ### build From 659a33fb9189d2ee0e81cb12977b988fd7bbdb77 Mon Sep 17 00:00:00 2001 From: dzuberi Date: Sun, 19 Apr 2026 14:12:49 -0700 Subject: [PATCH 07/11] add assertions for pipewire and wireplumber --- flake.nix | 76 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 45 insertions(+), 31 deletions(-) diff --git a/flake.nix b/flake.nix index 47de6aa..37daee2 100644 --- a/flake.nix +++ b/flake.nix @@ -11,45 +11,59 @@ forAllSystems = nixpkgs.lib.genAttrs supportedSystems; in { - packages = forAllSystems (system: - let - pkgs = nixpkgs.legacyPackages.${system}; - in + packages = forAllSystems (system: + let + pkgs = nixpkgs.legacyPackages.${system}; + in { - default = pkgs.stdenv.mkDerivation { - pname = "btd700ctl"; - version = "unstable-${self.shortRev or "dirty"}"; + default = pkgs.stdenv.mkDerivation { + pname = "btd700ctl"; + version = "unstable-${self.shortRev or "dirty"}"; - src = ./.; + src = ./.; - nativeBuildInputs = with pkgs; [ cmake pkg-config makeWrapper ]; - buildInputs = with pkgs; [ hidapi ]; + nativeBuildInputs = with pkgs; [ cmake pkg-config makeWrapper ]; + buildInputs = with pkgs; [ hidapi ]; - postInstall = '' + postInstall = '' install -Dm644 ../udev/99-btd700.rules -t $out/lib/udev/rules.d/ substituteInPlace $out/lib/systemd/user/btd700d.service \ - --replace-fail "/usr/local/bin/btd700d" "$out/bin/btd700d" + --replace-fail "/usr/local/bin/btd700d" "$out/bin/btd700d" wrapProgram $out/bin/btd700d \ - --prefix PATH : ${pkgs.wireplumber}/bin - ''; - - meta = with pkgs.lib; { - description = "Unofficial linux driver for the Sennheiser BTD 700 dongle"; - homepage = "https://github.com/sobalap/btd700ctl"; - license = licenses.lgpl21Only; - platforms = platforms.linux; - mainProgram = "btd700ctl"; - }; + --prefix PATH : ${pkgs.wireplumber}/bin + ''; + + meta = with pkgs.lib; { + description = "Unofficial linux driver for the Sennheiser BTD 700 dongle"; + homepage = "https://github.com/sobalap/btd700ctl"; + license = licenses.lgpl21Only; + platforms = platforms.linux; + mainProgram = "btd700ctl"; }; - }); - - nixosModules.default = { pkgs, ... }: { - services.udev.packages = [ self.packages.${pkgs.system}.default ]; - environment.systemPackages = [ self.packages.${pkgs.system}.default ]; - systemd.packages = [ self.packages.${pkgs.system}.default ]; - systemd.user.services.btd700d = { - wantedBy = [ "default.target" ]; }; + }); + nixosModules.default = { pkgs, lib, config, ... }: + let + pkg = self.packages.${pkgs.system}.default; + in { + assertions = [ + { + assertion = config.services.pipewire.enable == true; + message = "The btd700d module requires 'services.pipewire.enable = true;'"; + } + { + assertion = config.services.pipewire.wireplumber.enable == true; + message = "The btd700d module requires 'services.pipewire.wireplumber.enable = true;'"; + } + ]; + + services.udev.packages = [ pkg ]; + environment.systemPackages = [ pkg ]; + systemd.packages = [ pkg ]; + + systemd.user.services.btd700d = { + wantedBy = [ "default.target" ]; + enable = true; }; }; -} + } From 373b988513b0a0076930f58c2bcf09333ae12c1b Mon Sep 17 00:00:00 2001 From: dzuberi Date: Sun, 19 Apr 2026 14:14:06 -0700 Subject: [PATCH 08/11] missing paren --- flake.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 37daee2..00264e1 100644 --- a/flake.nix +++ b/flake.nix @@ -66,4 +66,5 @@ enable = true; }; }; - } + }; +} From 9bb1e90771286c715b6bdd00b5830ccb70011f68 Mon Sep 17 00:00:00 2001 From: dzuberi Date: Sun, 19 Apr 2026 14:16:34 -0700 Subject: [PATCH 09/11] fixed indentation --- flake.nix | 86 +++++++++++++++++++++++++++---------------------------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/flake.nix b/flake.nix index 00264e1..929b704 100644 --- a/flake.nix +++ b/flake.nix @@ -10,22 +10,22 @@ supportedSystems = [ "x86_64-linux" "aarch64-linux" "riscv64-linux" ]; forAllSystems = nixpkgs.lib.genAttrs supportedSystems; in - { - packages = forAllSystems (system: - let - pkgs = nixpkgs.legacyPackages.${system}; - in - { - default = pkgs.stdenv.mkDerivation { - pname = "btd700ctl"; - version = "unstable-${self.shortRev or "dirty"}"; + { + packages = forAllSystems (system: + let + pkgs = nixpkgs.legacyPackages.${system}; + in + { + default = pkgs.stdenv.mkDerivation { + pname = "btd700ctl"; + version = "unstable-${self.shortRev or "dirty"}"; - src = ./.; + src = ./.; - nativeBuildInputs = with pkgs; [ cmake pkg-config makeWrapper ]; - buildInputs = with pkgs; [ hidapi ]; + nativeBuildInputs = with pkgs; [ cmake pkg-config makeWrapper ]; + buildInputs = with pkgs; [ hidapi ]; - postInstall = '' + postInstall = '' install -Dm644 ../udev/99-btd700.rules -t $out/lib/udev/rules.d/ substituteInPlace $out/lib/systemd/user/btd700d.service \ --replace-fail "/usr/local/bin/btd700d" "$out/bin/btd700d" @@ -33,38 +33,38 @@ --prefix PATH : ${pkgs.wireplumber}/bin ''; - meta = with pkgs.lib; { - description = "Unofficial linux driver for the Sennheiser BTD 700 dongle"; - homepage = "https://github.com/sobalap/btd700ctl"; - license = licenses.lgpl21Only; - platforms = platforms.linux; - mainProgram = "btd700ctl"; + meta = with pkgs.lib; { + description = "Unofficial linux driver for the Sennheiser BTD 700 dongle"; + homepage = "https://github.com/sobalap/btd700ctl"; + license = licenses.lgpl21Only; + platforms = platforms.linux; + mainProgram = "btd700ctl"; + }; }; - }; - }); - nixosModules.default = { pkgs, lib, config, ... }: - let - pkg = self.packages.${pkgs.system}.default; - in { - assertions = [ - { - assertion = config.services.pipewire.enable == true; - message = "The btd700d module requires 'services.pipewire.enable = true;'"; - } - { - assertion = config.services.pipewire.wireplumber.enable == true; - message = "The btd700d module requires 'services.pipewire.wireplumber.enable = true;'"; - } - ]; + }); + nixosModules.default = { pkgs, lib, config, ... }: + let + pkg = self.packages.${pkgs.system}.default; + in { + assertions = [ + { + assertion = config.services.pipewire.enable == true; + message = "The btd700d module requires 'services.pipewire.enable = true;'"; + } + { + assertion = config.services.pipewire.wireplumber.enable == true; + message = "The btd700d module requires 'services.pipewire.wireplumber.enable = true;'"; + } + ]; - services.udev.packages = [ pkg ]; - environment.systemPackages = [ pkg ]; - systemd.packages = [ pkg ]; + services.udev.packages = [ pkg ]; + environment.systemPackages = [ pkg ]; + systemd.packages = [ pkg ]; - systemd.user.services.btd700d = { - wantedBy = [ "default.target" ]; - enable = true; - }; + systemd.user.services.btd700d = { + wantedBy = [ "default.target" ]; + enable = true; + }; + }; }; - }; } From 57095ec8c0313e502ec9d94cd5cb43cb1fb1991e Mon Sep 17 00:00:00 2001 From: sobalap <104626524+sobalap@users.noreply.github.com> Date: Tue, 9 Jun 2026 16:37:00 +0200 Subject: [PATCH 10/11] Update flake.nix Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 929b704..a9511f8 100644 --- a/flake.nix +++ b/flake.nix @@ -38,7 +38,7 @@ homepage = "https://github.com/sobalap/btd700ctl"; license = licenses.lgpl21Only; platforms = platforms.linux; - mainProgram = "btd700ctl"; + mainProgram = "btd700d"; }; }; }); From 4e490ac2af9cc8ed8a0ecc028ae8c043f82e843f Mon Sep 17 00:00:00 2001 From: sobalap <104626524+sobalap@users.noreply.github.com> Date: Tue, 9 Jun 2026 16:37:33 +0200 Subject: [PATCH 11/11] Update flake.nix Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index a9511f8..ddb3cf0 100644 --- a/flake.nix +++ b/flake.nix @@ -26,7 +26,7 @@ buildInputs = with pkgs; [ hidapi ]; postInstall = '' - install -Dm644 ../udev/99-btd700.rules -t $out/lib/udev/rules.d/ + install -Dm644 ../udev/99-btd700.rules $out/lib/udev/rules.d/99-btd700.rules substituteInPlace $out/lib/systemd/user/btd700d.service \ --replace-fail "/usr/local/bin/btd700d" "$out/bin/btd700d" wrapProgram $out/bin/btd700d \