{ lib, config, pkgs, ... }: let translateScript = pkgs.writeTextFile { name = "transcript-translate"; executable = true; destination = "/bin/transcript-translate"; text = '' #!${pkgs.python3.withPackages (ps: [ ps.translatepy ])}/bin/python3 import sys from translatepy.translators.google import GoogleTranslate if len(sys.argv) != 2: print("No language provided.") exit(1) translator = GoogleTranslate() while True: for line in sys.stdin: sys.stdout.write(translator.translate(line,sys.argv[1]).result+"\n") ''; }; in { config = lib.mkIf (config.syscfg.make.gui) { home.packages = [ pkgs.custom.vosk.base ]; xdg.configFile."script/transcript.sh".text = '' #!/bin/sh MODELS=( "English:${pkgs.custom.vosk.lang.en-us}/usr/share/vosk-models/en-us" "German:${pkgs.custom.vosk.lang.de}/usr/share/vosk-models/de" "Russian:${pkgs.custom.vosk.lang.ru}/usr/share/vosk-models/ru" "Japanese:${pkgs.custom.vosk.lang.ja}/usr/share/vosk-models/ja" ) MODEL_OPTS="" for pair in "''${MODELS[@]}"; do MODEL_OPTS+="$pair\n" done MODEL_OPT=$(echo -e "$MODEL_OPTS" | ${pkgs.wofi}/bin/wofi --dmenu -p "Choose model:") MODEL=$(echo "$MODEL_OPT" | awk -F ':' '{print $2}') TRANSS="None\nNone-prog\nEnglish\nGerman\nRussian\nJapanese" TRANS=$(echo -e "$TRANSS" | ${pkgs.wofi}/bin/wofi --dmenu -p "Choose translation:") export VOSK_MODEL=$MODEL case $TRANS in "None") ${pkgs.custom.vosk.cli}/bin/voskcli 2>/dev/null | ${pkgs.jq}/bin/jq --unbuffered -r '.alternatives[0].text // empty | select(length > 0)' 2>/dev/null ;; "None-prog") ${pkgs.custom.vosk.cli}/bin/voskcli 2>/dev/null | ${pkgs.jq}/bin/jq --unbuffered -r '.alternatives[0].text // empty, .partial // empty | select(length > 0)' 2>/dev/null ;; *) ${pkgs.custom.vosk.cli}/bin/voskcli 2>/dev/null | ${pkgs.jq}/bin/jq --unbuffered -r '.alternatives[0].text // empty | select(length > 0)' | ${translateScript}/bin/transcript-translate "$TRANS" ;; esac ''; }; }