zaphyra's git: airpodsctl

Control and monitor your AirPods

commit 168d2dc0ac539fb5f8f014a16a56fc6e9e94f5d3
parent 568d36744a20b45e898ece4fd478fa2076b3654b
Author: Katja Ramona Sophie Kwast (zaphyra) <git@zaphyra.eu>
Date: Tue, 12 Aug 2025 21:41:16 +0200

flake: add `kairpodsd` package and homeManagerModule
3 files changed, 77 insertions(+), 0 deletions(-)
M
flake.nix
|
4
++++
A
kairpodsd/homeManagerModule.nix
|
34
++++++++++++++++++++++++++++++++++
A
kairpodsd/package.nix
|
39
+++++++++++++++++++++++++++++++++++++++
diff --git a/flake.nix b/flake.nix
@@ -20,6 +20,7 @@
     packages = forAllSystems (pkgs: {
       default    = pkgs.airpodsctl;
       airpodsctl = pkgs.airpodsctl;
+      kairpodsd  = pkgs.kairpodsd;
     });
 
     devShells = forAllSystems (pkgs: {

@@ -31,7 +32,10 @@
       };
     });
 
+    homeManagerModules.kairpodsd = import ./kairpodsd/homeManagerModule.nix;
+
     overlays.default = final: prev: {
+      kairpodsd  = final.callPackage ./kairpodsd/package.nix {};
       airpodsctl = final.buildGoModule (finalAttrs: {
         name = "airpodsctl";
         src  = "${inputs.self}/src";
diff --git a/kairpodsd/homeManagerModule.nix b/kairpodsd/homeManagerModule.nix
@@ -0,0 +1,34 @@
+{ config, lib, pkgs, ... }:
+
+let
+  cfg = config.services.kairpodsd;
+
+in {
+
+  options.services.kairpodsd = {
+    enable = lib.mkEnableOption {
+      type = lib.types.bool;
+      default = false;
+    };
+  };
+
+  config = lib.mkIf cfg.enable {
+    systemd.user.services.kairpodsd = {
+      Unit = {
+        Description = "kAirPods D-Bus Service";
+        After = [ "graphical-session.target" ];
+      };
+      Service = {
+        Type = "dbus";
+        BusName = "org.kairpods";
+        ExecStart = lib.getExe pkgs.kairpodsd;
+        Restart = "on-failure";
+        RestartSec = 5;
+        PrivateTmp = true;
+        NoNewPrivileges = true;
+      };
+      Install.WantedBy = [ "default.target" ];
+    };
+  };
+
+}
diff --git a/kairpodsd/package.nix b/kairpodsd/package.nix
@@ -0,0 +1,39 @@
+{
+  lib,
+  fetchFromGitHub,
+  unstable,
+  pkg-config,
+  dbus
+}:
+
+unstable.rustPlatform.buildRustPackage (finalAttrs: {
+  pname = "kAirPodsd";
+  version = "0.2.0";
+
+  src = "${fetchFromGitHub {
+    owner = "can1357";
+    repo = "kAirPods";
+    tag = "v${finalAttrs.version}";
+    hash = "sha256-+FifFWwd4aAEk5ihDGVbTrW8f3AVnPZwBoPgM6VECu0=";
+  }}/service";
+
+  cargoHash = "sha256-y/WO0y3IPdhXOnsa+//HLXWEk7gs+MH0K62QUcnveiw=";
+
+  buildType = "debug";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    dbus
+  ];
+
+  meta = {
+    description = "Daemon from kAirPods";
+    homepage = "https://github.com/can1357/kAirPods";
+    mainProgram = "kairpodsd";
+    license = lib.licenses.gpl3;
+    maintainers = [ ];
+  };
+})