From 2739e2fbd30333290066a5b63f1079dbd97c54cd Mon Sep 17 00:00:00 2001 From: tebro Date: Wed, 30 Apr 2025 10:09:36 +0300 Subject: [PATCH 1/3] Add Nix flake --- flake.lock | 27 ++++++++++++++++++++++++ flake.nix | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ setup.py | 7 +++++++ 3 files changed, 94 insertions(+) create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 setup.py diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..f84dc04 --- /dev/null +++ b/flake.lock @@ -0,0 +1,27 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1745868005, + "narHash": "sha256-hZScOyQphT4RUmSEJX+2OxjIlGgLwSd8iW1LNtAWIOs=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "330d0a4167924b43f31cc9406df363f71b768a02", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-24.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..8eee302 --- /dev/null +++ b/flake.nix @@ -0,0 +1,60 @@ +{ + description = "steelseries chatmix support for linux"; + inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11"; }; + + outputs = { self, nixpkgs, ... }: + let + system = "x86_64-linux"; + pkgs = nixpkgs.legacyPackages.${system}; + lib = nixpkgs.lib; + in { + packages.${system} = let pkgs = nixpkgs.legacyPackages.${system}; + in { + default = pkgs.python3Packages.buildPythonApplication { + pname = "nova-chatmix"; + version = "1.0"; + + propagatedBuildInputs = + [ pkgs.python3Packages.pyusb pkgs.pulseaudio pkgs.pipewire ]; + + src = ./.; + + postInstall = '' + mkdir -p $out/etc/udev/rules.d + cp ./50-nova-pro-wireless.rules $out/etc/udev/rules.d/ + ''; + + meta = { + homepage = "https://git.dymstro.nl/Dymstro/nova-chatmix-linux"; + description = + "ChatMix for the Steelseries Arctis Nova Pro Wireless"; + license = lib.licenses.bsd0; + }; + }; + }; + devShell = pkgs.mkShell { + buildInputs = with pkgs; [ python3 python3Packages.pyusb ]; + }; + nixosModule = { config, lib, pkgs, ... }: { + options.services.nova-chatmix = { + enable = lib.mkEnableOption "steelseries chatmix support"; + }; + config = lib.mkIf config.services.nova-chatmix.enable { + services.udev.packages = [self.packages.${system}.default]; + systemd.user.services.nova-chatmix = { + enable = true; + after = [ "pipewire.service" "pipewire-pulse.service" ]; + wantedBy = [ "default.target" ]; + wants = [ "network-online.target" ]; + description = + "This will enable ChatMix for the Steelseries Arctis Nova Pro Wireless"; + serviceConfig = { + Type = "simple"; + Restart = "always"; + ExecStart = "${self.packages.${system}.default}/bin/nova.py"; + }; + }; + }; + }; + }; +} diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..d3a2605 --- /dev/null +++ b/setup.py @@ -0,0 +1,7 @@ +from setuptools import setup, find_packages + +setup(name='nova-chatmix', + version = '1.0', + packages = find_packages(), + scripts = ['nova.py'], + ) From d80f6e977bc94b56539df7208eeafe57bbdf2580 Mon Sep 17 00:00:00 2001 From: tebro Date: Wed, 30 Apr 2025 13:17:10 +0300 Subject: [PATCH 2/3] Add the ExecStartPre sleep --- flake.nix | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/flake.nix b/flake.nix index 8eee302..6b53e59 100644 --- a/flake.nix +++ b/flake.nix @@ -6,7 +6,7 @@ let system = "x86_64-linux"; pkgs = nixpkgs.legacyPackages.${system}; - lib = nixpkgs.lib; + lib = nixpkgs.lib; in { packages.${system} = let pkgs = nixpkgs.legacyPackages.${system}; in { @@ -19,10 +19,10 @@ src = ./.; - postInstall = '' - mkdir -p $out/etc/udev/rules.d - cp ./50-nova-pro-wireless.rules $out/etc/udev/rules.d/ - ''; + postInstall = '' + mkdir -p $out/etc/udev/rules.d + cp ./50-nova-pro-wireless.rules $out/etc/udev/rules.d/ + ''; meta = { homepage = "https://git.dymstro.nl/Dymstro/nova-chatmix-linux"; @@ -40,7 +40,7 @@ enable = lib.mkEnableOption "steelseries chatmix support"; }; config = lib.mkIf config.services.nova-chatmix.enable { - services.udev.packages = [self.packages.${system}.default]; + services.udev.packages = [ self.packages.${system}.default ]; systemd.user.services.nova-chatmix = { enable = true; after = [ "pipewire.service" "pipewire-pulse.service" ]; @@ -51,6 +51,7 @@ serviceConfig = { Type = "simple"; Restart = "always"; + ExecStartPre = "${pkgs.coreutils-full}/bin/sleep 1"; ExecStart = "${self.packages.${system}.default}/bin/nova.py"; }; }; From a52414a4a36cd8382ff935c76d7704750f7db93e Mon Sep 17 00:00:00 2001 From: tebro Date: Fri, 2 May 2025 10:28:45 +0300 Subject: [PATCH 3/3] Increase startup delay --- flake.nix | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/flake.nix b/flake.nix index 6b53e59..1be2659 100644 --- a/flake.nix +++ b/flake.nix @@ -8,8 +8,7 @@ pkgs = nixpkgs.legacyPackages.${system}; lib = nixpkgs.lib; in { - packages.${system} = let pkgs = nixpkgs.legacyPackages.${system}; - in { + packages.${system} = { default = pkgs.python3Packages.buildPythonApplication { pname = "nova-chatmix"; version = "1.0"; @@ -51,7 +50,7 @@ serviceConfig = { Type = "simple"; Restart = "always"; - ExecStartPre = "${pkgs.coreutils-full}/bin/sleep 1"; + ExecStartPre = "${pkgs.coreutils-full}/bin/sleep 10"; ExecStart = "${self.packages.${system}.default}/bin/nova.py"; }; };