Commit a5c36a4f8cb9

Vincent Demeester <vincent@sbr.pm>
2026-01-26 15:35:47
feat(voxtype): switch to upstream flake with home-manager module
Replace wip.voxtype from nixpkgs-wip-consolidated with the upstream voxtype flake which provides: - Proper runtime wrapping (wtype, wl-clipboard, libnotify, etc.) - Home-manager module with declarative configuration - Systemd user service for the daemon - Managed model downloads Remove manual config.toml and spawn-at-startup since the home-manager module handles both configuration and service management. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent fa06acf
Changed files (7)
dots/.config/niri/config.kdl
@@ -84,7 +84,6 @@ spawn-at-startup "waybar"
 // FIXME should be through systemd
 spawn-at-startup "yubikey-agent" "-l" "/run/user/1000/yubikey-agent/yubikey-agent.sock"
 spawn-at-startup "swaybg" "-i" "/home/vincent/desktop/pictures/lockscreen"
-spawn-at-startup "voxtype" "daemon"
 
 prefer-no-csd
 
home/common/desktop/niri/default.nix
@@ -23,9 +23,6 @@
     wofi
     rofimoji
     swaybg
-
-    # Voice-to-text with Whisper
-    wip.voxtype
   ];
 
   services = {
@@ -46,44 +43,4 @@
       ];
     };
   };
-
-  # Voxtype configuration (voice-to-text with Whisper)
-  # Keybinding is handled by niri (Mod+F3 -> voxtype record toggle)
-  xdg.configFile."voxtype/config.toml".text = ''
-    # Enable state file for status monitoring (Waybar integration)
-    state_file = "auto"
-
-    [hotkey]
-    # Hotkey handling is done by niri compositor
-    enabled = false
-
-    [audio]
-    # Audio input device ("default" uses system default)
-    device = "default"
-    # Sample rate in Hz (whisper expects 16000)
-    sample_rate = 16000
-    # Maximum recording duration in seconds (safety limit)
-    max_duration_secs = 60
-    # Silence threshold in dB - adjust if needed
-    silence_threshold = -30.0
-
-    [whisper]
-    # Model to use for transcription
-    # Using multilingual model for auto-detection (en/fr)
-    model = "base"
-    # Language for transcription ("en" for English, "auto" for auto-detection)
-    language = "auto"
-    # Translate non-English speech to English
-    translate = false
-
-    [output]
-    # Use clipboard mode - more reliable than typing
-    mode = "clipboard"
-
-    [output.notification]
-    # Enable notifications for recording events
-    on_recording_start = true
-    on_recording_stop = true
-    on_transcription = true
-  '';
 }
home/common/desktop/default.nix
@@ -16,6 +16,7 @@
     ./mails.nix
     ./mpv.nix
     ./passage.nix
+    ./voxtype.nix
     ./xdg.nix
 
     ../dev/default.nix
home/common/desktop/voxtype.nix
@@ -0,0 +1,55 @@
+{ inputs, system, ... }:
+{
+  imports = [ inputs.voxtype.homeManagerModules.default ];
+
+  programs.voxtype = {
+    enable = true;
+    package = inputs.voxtype.packages.${system}.default;
+
+    # Using multilingual model for auto-detection (en/fr)
+    model.name = "base";
+
+    # Systemd user service for the daemon
+    service.enable = true;
+
+    settings = {
+      # Enable state file for status monitoring (Waybar integration)
+      state_file = "auto";
+
+      hotkey = {
+        # Hotkey handling is done by niri compositor (Mod+F3)
+        enabled = false;
+      };
+
+      audio = {
+        # Audio input device ("default" uses system default)
+        device = "default";
+        # Sample rate in Hz (whisper expects 16000)
+        sample_rate = 16000;
+        # Maximum recording duration in seconds (safety limit)
+        max_duration_secs = 60;
+        # Silence threshold in dB
+        silence_threshold = -30.0;
+      };
+
+      whisper = {
+        # Language for transcription ("auto" for auto-detection)
+        language = "auto";
+        # Translate non-English speech to English
+        translate = false;
+      };
+
+      output = {
+        # Use clipboard mode - more reliable than typing
+        mode = "clipboard";
+
+        notification = {
+          # Enable notifications for recording events
+          on_recording_start = true;
+          on_recording_stop = true;
+          on_transcription = true;
+        };
+      };
+    };
+  };
+}
systems/kyushu/home.nix
@@ -52,8 +52,6 @@ in
     qmk
     qmk_hid
 
-    wip.voxtype
-
     startpaac
 
     batzconverter # TODO I need to fix it or package it upstream
flake.lock
@@ -443,6 +443,24 @@
         "type": "github"
       }
     },
+    "flake-utils_2": {
+      "inputs": {
+        "systems": "systems_3"
+      },
+      "locked": {
+        "lastModified": 1731533236,
+        "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
+        "owner": "numtide",
+        "repo": "flake-utils",
+        "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
+        "type": "github"
+      },
+      "original": {
+        "owner": "numtide",
+        "repo": "flake-utils",
+        "type": "github"
+      }
+    },
     "gitignore": {
       "inputs": {
         "nixpkgs": [
@@ -927,7 +945,8 @@
         "nixpkgs-master": "nixpkgs-master",
         "nixpkgs-wip-consolidated": "nixpkgs-wip-consolidated",
         "pre-commit-hooks": "pre-commit-hooks",
-        "system-manager": "system-manager"
+        "system-manager": "system-manager",
+        "voxtype": "voxtype"
       }
     },
     "rust-overlay": {
@@ -1001,6 +1020,21 @@
         "type": "github"
       }
     },
+    "systems_3": {
+      "locked": {
+        "lastModified": 1681028828,
+        "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+        "owner": "nix-systems",
+        "repo": "default",
+        "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+        "type": "github"
+      },
+      "original": {
+        "owner": "nix-systems",
+        "repo": "default",
+        "type": "github"
+      }
+    },
     "treefmt-nix": {
       "inputs": {
         "nixpkgs": [
@@ -1021,6 +1055,27 @@
         "repo": "treefmt-nix",
         "type": "github"
       }
+    },
+    "voxtype": {
+      "inputs": {
+        "flake-utils": "flake-utils_2",
+        "nixpkgs": [
+          "nixpkgs"
+        ]
+      },
+      "locked": {
+        "lastModified": 1769105117,
+        "narHash": "sha256-9hBSeT2jmF3bTbv6mbnpzaWF/ETGOjV+NKH3ChEUM4A=",
+        "owner": "peteonrails",
+        "repo": "voxtype",
+        "rev": "cdb71f99502c0c8ef0560e86e110c8151804e1ae",
+        "type": "github"
+      },
+      "original": {
+        "owner": "peteonrails",
+        "repo": "voxtype",
+        "type": "github"
+      }
     }
   },
   "root": "root",
flake.nix
@@ -404,5 +404,8 @@
 
     copilot-cli.url = "github:scarisey/copilot-cli-flake";
     copilot-cli.inputs.nixpkgs.follows = "nixpkgs";
+
+    voxtype.url = "github:peteonrails/voxtype";
+    voxtype.inputs.nixpkgs.follows = "nixpkgs";
   };
 }