{ # talk — Sprach-Ausgaben für Skripte und KI-Agenten. # # Nutzung in einer NixOS-/Home-Manager-Konfiguration: # inputs.talk.url = "git+https://code.m3ta.dev/m3tam3re/talk"; # environment.systemPackages = [ inputs.talk.packages.${system}.talk ]; # oder als Overlay: nixpkgs.overlays = [ inputs.talk.overlays.default ]; # # Dieses Flake ersetzt langfristig m3ta-nixpkgs talk/crunch (bash + mpv). description = "talk — Voice-Notifications für Skripte und KI-Agenten (ein Binary, Daemon mit Queue)"; inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; outputs = { self, nixpkgs }: let systems = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ]; forAll = f: nixpkgs.lib.genAttrs systems (system: f nixpkgs.legacyPackages.${system}); version = if self ? shortRev then "0.0.0-${self.shortRev}" else "0.0.0-dirty"; mkTalk = pkgs: pkgs.buildGoModule { pname = "talk"; inherit version; src = self; subPackages = [ "cmd/talk" ]; # Nach Änderungen an go.mod/go.sum neu setzen: `nix build` nennt den # erwarteten Hash. vendorHash = "sha256-CbF3juTA7V05hh1ElKKACddsCn4bIPeLZxsz2EZxs9I="; env.CGO_ENABLED = 0; ldflags = [ "-s" "-w" "-X" "main.version=${version}" "-X" "main.commit=${self.shortRev or "dirty"}" ]; # Prozessgrenzen-Tests starten Daemons und binden Ports — nicht in der Sandbox. doCheck = false; # Audio: oto spricht PulseAudio/PipeWire direkt (reines Go) und fällt auf # ALSA zurück, das es zur Laufzeit per dlopen lädt — auf NixOS nur # auffindbar, wenn wir es in den Pfad legen. OS-Stimme: espeak-ng. nativeBuildInputs = pkgs.lib.optionals pkgs.stdenv.isLinux [ pkgs.makeWrapper ]; postInstall = pkgs.lib.optionalString pkgs.stdenv.isLinux '' wrapProgram $out/bin/talk \ --prefix LD_LIBRARY_PATH : ${pkgs.lib.makeLibraryPath [ pkgs.alsa-lib ]} \ --prefix PATH : ${pkgs.lib.makeBinPath [ pkgs.espeak-ng pkgs.libnotify ]} ''; meta = with pkgs.lib; { description = "Voice-Notifications für Skripte und KI-Agenten"; homepage = "https://code.m3ta.dev/m3tam3re/talk"; license = licenses.mit; mainProgram = "talk"; platforms = platforms.unix; }; }; in { packages = forAll (pkgs: rec { talk = mkTalk pkgs; default = talk; }); apps = forAll (pkgs: rec { talk = { type = "app"; program = "${mkTalk pkgs}/bin/talk"; }; default = talk; }); overlays.default = final: prev: { talk = mkTalk final; }; devShells = forAll (pkgs: { default = pkgs.mkShell { packages = [ pkgs.go pkgs.gopls pkgs.gotools pkgs.espeak-ng pkgs.libnotify ]; }; }); formatter = forAll (pkgs: pkgs.nixfmt-rfc-style); }; }