diff --git a/modules/nixos/services/numen/default.nix b/modules/nixos/services/numen/default.nix index 9841dd5..b80cf22 100644 --- a/modules/nixos/services/numen/default.nix +++ b/modules/nixos/services/numen/default.nix @@ -28,15 +28,6 @@ in ''; }; - # models = mkOption { - # type = types.uniq types.listOf types.package; - # default = [vosk-model-small-en-us]; - # example = "[vosk-model-small-en-us]"; - # description = '' - # List of vosk models to be loaded by numen. They can be referred to using the index, eg. model0 or model1. - # ''; - # }; - dotoolPkg = mkOption { type = types.package; default = pkgs.kb-one.dotool; @@ -49,12 +40,7 @@ in phrases = mkOption { type = types.listOf types.path; - default = [ - ./phrases/character.phrases - ./phrases/control.phrases - ./phrases/environment.phrases - ./phrases/voice.phrases - ]; + default = [ ]; description = '' Phrases to be loaded by numen. If empty, the default phrases are used. ''; @@ -70,7 +56,7 @@ in dotoolXkbLayout = mkOption { type = types.singleLineStr; - default = "de"; + default = "en"; description = '' The XKB keyboard layout that should be used by dotool. ''; @@ -78,7 +64,6 @@ in }; config = mkIf cfg.enable { - # System Configuration environment.systemPackages = [ cfg.numenPkg diff --git a/modules/nixos/services/numen/phrases/control.phrases b/modules/nixos/services/numen/phrases/control.phrases deleted file mode 100644 index 4168142..0000000 --- a/modules/nixos/services/numen/phrases/control.phrases +++ /dev/null @@ -1,85 +0,0 @@ -space: press space -yes: press Return -tab: press Tab -scape: stick off \ - press Escape - -# Enable a modifier for the next press -# (The Super modifier is also known as the "Windows key") -shy: mod shift -troy: mod ctrl -hype: mod alt -shock: mod super \ - stick off -# Clear modifiers -cleanse: mod clear \ - caps off \ - stick off - -# Enable Caps Lock until the end of the sentence or you say "cleanse" -shout: caps on -: caps off - -# Start holding down each pressed key, and stop by saying "cleanse" -squeeze: run notify-send STICKING & \ - stick off \ - stick on - -hack: press BackSpace -mince: press BackSpace BackSpace -toss: press Delete -smite: press Delete Delete -raze: press BackSpace BackSpace BackSpace BackSpace -# Delete a word (depending on the program) -swipe: press ctrl+BackSpace - -left: press Left -right: press Right -up: press Up -down: press Down -lunge: press Left Left -rush: press Right Right -leave: press Left Left Left Left -charge: press Right Right Right Right - -# I use these to navigate words and to complete bits of shell autosuggestions -stretch: press ctrl+Right -wrench: press ctrl+Left - -# PageDown, PageUp, Home, End -page: press Next -reel: press Prior -home: press Home -end: press End - -# Paste the clipboard (depending on the program) -gluten: stick off \ - press XF86Paste - -# Repeat the previous press etc. -more: repeat 1 -bunch: repeat 2 -handful: repeat 4 -fistful: repeat 8 -plateful: repeat 12 - -frank one: press F1 -frank two: press F2 -frank three: press F3 -frank four: press F4 -frank five: press F5 -frank six: press F6 -frank sept: press F7 -frank eight: press F8 -frank nine: press F9 -frank one newt: press F10 -frank one one: press F11 -frank one two: press F12 - -# This saves your changes in vi-style programs -save: caps off \ - press Escape colon w Return -# This cycles round splits in Vim -switch: caps off \ - press Escape ctrl+w w - diff --git a/modules/nixos/services/numen/phrases/environment.phrases b/modules/nixos/services/numen/phrases/environment.phrases deleted file mode 100644 index 53f563e..0000000 --- a/modules/nixos/services/numen/phrases/environment.phrases +++ /dev/null @@ -1,36 +0,0 @@ -# I use these for managing application windows but they just simulate keys, -# so you'll need to configure your desktop environment, or you can use my -# preconfigured desktop environment: https://git.sr.ht/~geb/tiles - -# Navigate to the window in the given direction -west: stick off \ - press super+Left -east: stick off \ - press super+Right -north: stick off \ - press super+Up -south: stick off \ - press super+Down - -# Cycle round the windows -cycle: stick off \ - press super+c -recycle: stick off \ - press super+C - -# Close window -exterminate: stick off \ - press super+q - -# Toggle fullscreen -screen: stick off \ - press super+f - - - -# These two are just for --gadget mode. - -# Switch to controlling the gadget -@gadget shock gadget: handler uinput -# Switch to controlling the host machine -@gadget shock host: handler gadget diff --git a/modules/nixos/services/numen/phrases/voice.phrases b/modules/nixos/services/numen/phrases/voice.phrases deleted file mode 100644 index c773dda..0000000 --- a/modules/nixos/services/numen/phrases/voice.phrases +++ /dev/null @@ -1,67 +0,0 @@ -# Cancel sentence -# For example, "four down no five down" would just do "five down". -@cancel no: - -# Transcribe a sentence -# For example, "scribe please type this". -@transcribe scribe: set numen_fmt echo normal \ - pen /etc/numen/scripts/tweak; /etc/numen/scripts/transcripts | head -n 1 - -# Transcribe a sentence formatted... - -# With the first letter uppercase -@transcribe scrub: set numen_fmt echo sentence \ - pen /etc/numen/scripts/tweak; /etc/numen/scripts/transcripts | head -n 1 -# With Each First Letter Uppercase -@transcribe tight scribe: set numen_fmt echo title \ - pen /etc/numen/scripts/tweak; /etc/numen/scripts/transcripts | head -n 1 -# with_underscrores_inbetween -@transcribe snake: set numen_fmt echo snake \ - pen /etc/numen/scripts/tweak; /etc/numen/scripts/transcripts | head -n 1 -# with-dashes-inbetween -@transcribe dash: set numen_fmt echo dash \ - pen /etc/numen/scripts/tweak; /etc/numen/scripts/transcripts | head -n 1 -# with.dots.inbetween -@transcribe dot scribe: set numen_fmt echo dot \ - pen /etc/numen/scripts/tweak; /etc/numen/scripts/transcripts | head -n 1 -# with, commas, inbetween -@transcribe roh scribe: set numen_fmt echo list \ - pen /etc/numen/scripts/tweak; /etc/numen/scripts/transcripts | head -n 1 -# with/slashes/inbetween -@transcribe path scribe: set numen_fmt echo path \ - pen /etc/numen/scripts/tweak; /etc/numen/scripts/transcripts | head -n 1 -# allsmashedtogether -@transcribe kludge: set numen_fmt echo smash \ - pen /etc/numen/scripts/tweak; /etc/numen/scripts/transcripts | head -n 1 -# camelCase -@transcribe camel: set numen_fmt echo camel \ - pen /etc/numen/scripts/tweak; /etc/numen/scripts/transcripts | head -n 1 -# PascalCase -@transcribe pascal: set numen_fmt echo pascal \ - pen /etc/numen/scripts/tweak; /etc/numen/scripts/transcripts | head -n 1 -# dot.camelCase -@transcribe dot camel: set numen_fmt echo dotcamel \ - pen /etc/numen/scripts/tweak; /etc/numen/scripts/transcripts | head -n 1 -# dot.PascalCase -@transcribe dot pascal: set numen_fmt echo dotpascal \ - pen /etc/numen/scripts/tweak; /etc/numen/scripts/transcripts | head -n 1 -# (You can also do "shout scribe" etc.) - -# Erase the transcription -ditch: eval /etc/numen/scripts/transcripts | sed 's/./ BackSpace/g; s/^/press/; q' - -# Go to the start of the transcription -trudge: eval /etc/numen/scripts/transcripts | sed 's/./ Left/g; s/^/press/; q' - -# Menus to type or choose another transcription result -# They use the dmenu command (only works in X11) or the command specified -# by $NUMEN_DMENU or $DMENU (you could use wmenu if you're on Wayland). -transcripts: run /etc/numen/scripts/menu | numenc & \ - run sleep 0.1 -change: run /etc/numen/scripts/menu change | numenc & \ - run sleep 0.1 - - -# Ignore this, vosk-model-small-en-us-0.15 can output huh after a long silence. -huh: - diff --git a/packages/numen-phrases/default.nix b/packages/numen-phrases/default.nix new file mode 100644 index 0000000..8a98fd3 --- /dev/null +++ b/packages/numen-phrases/default.nix @@ -0,0 +1,58 @@ +{ + stdenv, + lib, + pkgs, +}: + +stdenv.mkDerivation { + pname = "numen-phrases"; + version = "0.1.0"; + + src = ./phrases; + + installPhase = '' + mkdir $out + mkdir $out/phrases + mkdir $out/phrases/en-active + mkdir $out/phrases/de-active + mkdir $out/phrases/en-inactive + mkdir $out/phrases/de-inactive + + install -Dm644 en-active/* -t "$out/phrases/en-active" + install -Dm644 de-active/* -t "$out/phrases/de-active" + install -Dm644 en-inactive/* -t "$out/phrases/en-inactive" + install -Dm644 de-inactive/* -t "$out/phrases/de-inactive" + + sed -i "s:/etc/numen/phrases:${placeholder "out"}/phrases:g" \ + $out/phrases/en-active/* \ + $out/phrases/de-active/* \ + $out/phrases/en-inactive/* \ + $out/phrases/de-inactive/* + sed -i "s:/etc/numen/scripts:${pkgs.kb-one.numen}/scripts:g" \ + $out/phrases/en-active/* \ + $out/phrases/de-active/* \ + $out/phrases/en-inactive/* \ + $out/phrases/de-inactive/* + sed -i "s:/etc/numen/bin:${pkgs.kb-one.numen}/bin:g" \ + $out/phrases/en-active/* \ + $out/phrases/de-active/* \ + $out/phrases/en-inactive/* \ + $out/phrases/de-inactive/* + sed -i "s:notify-send:${pkgs.libnotify}/bin/notify-send:g" \ + $out/phrases/en-active/* \ + $out/phrases/de-active/* \ + $out/phrases/en-inactive/* \ + $out/phrases/de-inactive/* + sed -i "s:pkill:${pkgs.procps}/bin/pkill:g" \ + $out/phrases/en-active/* \ + $out/phrases/de-active/* \ + $out/phrases/en-inactive/* \ + $out/phrases/de-inactive/* + sed -i "s:/usr/share/vosk-models/small-en-us:${pkgs.kb-one.vosk-model-small-en-us}/usr/share/vosk-models/small-en-us:g" \ + $out/phrases/de-active/* + sed -i "s:/usr/share/vosk-models/small-de:${pkgs.kb-one.vosk-model-small-de}/usr/share/vosk-models/small-de:g" \ + $out/phrases/en-active/* + + + ''; +} diff --git a/packages/numen-phrases/phrases/de-active/base.phrases b/packages/numen-phrases/phrases/de-active/base.phrases new file mode 100644 index 0000000..dddf5b2 --- /dev/null +++ b/packages/numen-phrases/phrases/de-active/base.phrases @@ -0,0 +1,90 @@ + +# Letter +auto: press a +ball: press b +cello: press c +dach: press d +eis: press e +fisch: press f +glück: press g +haus: press h +insel: press i +jahr: press j +kuss: press k +licht: press l +mond: press m +nacht: press n +oma: press o +pferd: press p +quiz: press q +rad: press r +soll: press s +tisch: press t +um: press u +v: press v +wer: press w +mix: press x +yoga: press y +zug: press z + +# Number +null: press 0 +eins: press 1 +zwei: press 2 +drei: press 3 +vier: press 4 +fünf: press 5 +sechs: press 6 +sieb: press 7 +acht: press 8 +neun: press 9 + +# Symbol +schrei: press exclam +frag: press question +dollar: press dollar +## TODO € euro: press euro +mail: press at +und: press ampersand +sag: press quotedbl +ast: press apostrophe +zweig: press grave +hut: press asciicircum +## TODO ° grad: press +stop: press comma +steh: press period +halt: press semicolon +kommt: press colon +mit: press plus +ohne: press minus +stern: press asterisk +roh: press numbersign +teil: press percent +gleich: press equal +toll: press asciitilde +schwer: press slash +wert: press backslash +wand: press bar +flur: press underscore +auf: press parenleft +zu: press parenright +an: press bracketleft +aus: press bracketright +berg: press braceleft +tal: press braceright +klein: press less +groß: press greater + +# Function Keys +funk eins: press F1 +funk zwei: press F2 +funk drei: press F3 +funk vier: press F4 +funk fünf: press F5 +funk sechs: press F6 +funk sieb: press F7 +funk acht: press F8 +funk neun: press F9 +funk eins null: press F10 +funk eins eins: press F11 +funk eins zwei: press F12 \ No newline at end of file diff --git a/packages/numen-phrases/phrases/de-active/extend.phrases b/packages/numen-phrases/phrases/de-active/extend.phrases new file mode 100644 index 0000000..ed31ee2 --- /dev/null +++ b/packages/numen-phrases/phrases/de-active/extend.phrases @@ -0,0 +1,51 @@ + +# ----------------- +# Extend +# ----------------- + +leer: press space +ja: press Return +schieb: press Tab +geh: stick off \ + press Escape +super: press Scroll_Lock +sonder: press Super_L + +links: press Left +rechts: press Right +hoch: press Up +runter: press Down +lauf: press Left Left +renn: press Right Right +lange: press Left Left Left Left +runde: press Right Right Right Right +zieh: press ctrl+Left +streck: press ctrl+Right + +himmel: press Prior +hölle: press Next +heim: press Home +ende: press End + +# Delete +werf: press Delete +wirf: press Delete Delete +weg: press BackSpace +weit: press BackSpace BackSpace +fern: press BackSpace BackSpace BackSpace BackSpace +fremd: press ctrl+BackSpace + +# Repeat +mehr: repeat 1 +paar: repeat 2 +oft: repeat 4 +viel: repeat 8 +ganz viel: repeat 12 + +# GUI Action +# TODO Cut +# TODO Copy +platz: stick off \ + press XF86Paste +# TODO Save + diff --git a/packages/numen-phrases/phrases/de-active/function.phrases b/packages/numen-phrases/phrases/de-active/function.phrases new file mode 100644 index 0000000..10872eb --- /dev/null +++ b/packages/numen-phrases/phrases/de-active/function.phrases @@ -0,0 +1,88 @@ + +# ----------------- +# Modifier & Modes +# ----------------- + +# Modifier +schau: mod shift +mein: mod ctrl +geil: mod alt +sau: mod super \ + stick off + +# Mode +laut: caps on +#: caps off + +zusammen: run notify-send --expire-time=3000 --urgency=low --icon=🧩 "🧩 Sticky Mode" & \ + stick off \ + stick on + +# Cancel +sauber: mod clear \ + caps off \ + stick off +# Cancel sentence +@cancel nein: + + +# ----------------- +# Desktop +# ----------------- + +# KDE Window +west: stick off \ + press super+Left +ost: stick off \ + press super+Right +nord: stick off \ + press super+Up +süd: stick off \ + press super+Down +schirm: stick off \ + press super+Prior +#???: stick off \ +# press super+Next +zerstören: stick off \ + press alt+f4 + +# KDE Taskbar +#sau eins: press super+1 +#sau zwei: press super+2 +#sau drei: press super+3 + +# KDE Workspace +sicht: stick off \ + press super+w +#mein funk eins: press ctrl+f1 +#mein funk zwei: press ctrl+f2 +#mein funk drei: press ctrl+f3 + + +# ----------------- +# Switching +# ----------------- + +# Sleep https://lists.sr.ht/~geb/numen/%3C55fe1488feeb1cee2627d61b9b7e16a74ef5fca0.camel@dalibo.com%3E +schlaf gut: run echo load /etc/numen/phrases/de-inactive/hibernate.phrases | /etc/numen/bin/numenc & notify-send --expire-time=3000 --urgency=low --icon=💤 "💤 Numen geht schlafen..." + +# Language +sprache: set LANGUAGE_WORD echo 1 +englisch: run [ "LANGUAGE_WORD" ] && { sleep .3; NUMEN_MODEL=/usr/share/vosk-models/small-en-us /etc/numen/bin/numen /etc/numen/phrases/en-active/base.phrases /etc/numen/phrases/en-active/extend.phrases /etc/numen/phrases/en-active/function.phrases /etc/numen/phrases/en-active/transcribe.phrases; } & pkill numen & notify-send --expire-time=3000 --urgency=low --icon=🌍 "🌍 Numen wechselt zu Englisch..." + +# Reset Language Module Detection +: caps off \ + set LANGUAGE_WORD + + + + +# Activate Language Module +#sprache: set LANGUAGE_WORD echo 1 + +# Commands +#englisch: run [ "LANGUAGE_WORD" ] && { sleep .3; NUMEN_MODEL=/usr/share/vosk-models/small-en-us /etc/numen/bin/numen /etc/numen/phrases/en-active/voice.phrases /etc/numen/phrases/en-active/environment.phrases /etc/numen/phrases/en-active/control.phrases /etc/numen/phrases/en-active/character.phrases /etc/numen/phrases/en-active/language.phrases; } & pkill numen & notify-send -t 3000 -p -r ${NUMENMODE_NID:-0} -u low -i 🌍 "🌍 Switched to English" ||: + +# Reset Language Module Detection +#: set LANGUAGE_WORD : + diff --git a/packages/numen-phrases/phrases/de-active/transcribe.phrases b/packages/numen-phrases/phrases/de-active/transcribe.phrases new file mode 100644 index 0000000..a150033 --- /dev/null +++ b/packages/numen-phrases/phrases/de-active/transcribe.phrases @@ -0,0 +1,65 @@ + +# ----------------- +# Transcribe +# ----------------- + +# Transcribe +@transcribe schreib: set numen_fmt echo normal \ + pen /etc/numen/scripts/tweak; /etc/numen/scripts/transcripts | head -n 1 + +# Erase Transcription +tritt: eval /etc/numen/scripts/transcripts | sed 's/./ BackSpace/g; s/^/press/; q' + +# Cursor to Start +start: eval /etc/numen/scripts/transcripts | sed 's/./ Left/g; s/^/press/; q' + + +# ----------------- +# Transcription Modes +# ----------------- + +# First letter uppercase +@transcribe satz: set numen_fmt echo sentence \ + pen /etc/numen/scripts/tweak; /etc/numen/scripts/transcripts | head -n 1 + +# All Words Uppercase +@transcribe oben: set numen_fmt echo title \ + pen /etc/numen/scripts/tweak; /etc/numen/scripts/transcripts | head -n 1 + +# with_snake_inbetween +@transcribe schlange: set numen_fmt echo snake \ + pen /etc/numen/scripts/tweak; /etc/numen/scripts/transcripts | head -n 1 + +# with-dashes-inbetween +@transcribe strich: set numen_fmt echo dash \ + pen /etc/numen/scripts/tweak; /etc/numen/scripts/transcripts | head -n 1 + +# with.dots.inbetween +@transcribe punkt: set numen_fmt echo dot \ + pen /etc/numen/scripts/tweak; /etc/numen/scripts/transcripts | head -n 1 + +# as, list, items +@transcribe auf list: set numen_fmt echo list \ + pen /etc/numen/scripts/tweak; /etc/numen/scripts/transcripts | head -n 1 + +# in/path/format +@transcribe pfad: set numen_fmt echo path \ + pen /etc/numen/scripts/tweak; /etc/numen/scripts/transcripts | head -n 1 + +# allsmashedtogether +@transcribe eng: set numen_fmt echo smash \ + pen /etc/numen/scripts/tweak; /etc/numen/scripts/transcripts | head -n 1 + +# inCamelCase +@transcribe kamel: set numen_fmt echo camel \ + pen /etc/numen/scripts/tweak; /etc/numen/scripts/transcripts | head -n 1 + +# InPascalCase +@transcribe paste: set numen_fmt echo pascal \ + pen /etc/numen/scripts/tweak; /etc/numen/scripts/transcripts | head -n 1 + +# ALL IN CAPS +# laut schreib + +# Ignore this, vosk-model-small-de-0.15 can output hmm after a long silence. +hmm: diff --git a/packages/numen-phrases/phrases/de-inactive/hibernate.phrases b/packages/numen-phrases/phrases/de-inactive/hibernate.phrases new file mode 100644 index 0000000..7bb8c53 --- /dev/null +++ b/packages/numen-phrases/phrases/de-inactive/hibernate.phrases @@ -0,0 +1,8 @@ + +schlaf gut: run notify-send --expire-time=3000 --urgency=low --icon=💤 "💤 Numen schläft schon" + +wach: set WAKEUP_WORD_ONE echo 1 +jetzt: eval [ "$WAKEUP_WORD_ONE" ] && echo set WAKEUP_WORD_TWO echo 1 ||: +auf: run [ "$WAKEUP_WORD_TWO" ] && echo load /etc/numen/phrases/de-active/base.phrases /etc/numen/phrases/de-active/extend.phrases /etc/numen/phrases/de-active/function.phrases /etc/numen/phrases/de-active/transcribe.phrases | /etc/numen/bin/numenc & notify-send --expire-time=3000 --urgency=low --icon=☀️ "☀️ Numen wacht auf..." ||: +: set WAKEUP_WORD_ONE : \ + set WAKEUP_WORD_TWO : diff --git a/modules/nixos/services/numen/phrases/character.phrases b/packages/numen-phrases/phrases/en-active/base.phrases similarity index 76% rename from modules/nixos/services/numen/phrases/character.phrases rename to packages/numen-phrases/phrases/en-active/base.phrases index 72198e8..026cad5 100644 --- a/modules/nixos/services/numen/phrases/character.phrases +++ b/packages/numen-phrases/phrases/en-active/base.phrases @@ -1,3 +1,5 @@ + +# Letter air: press a bat: press b cap: press c @@ -25,6 +27,7 @@ plex: press x yank: press y zip: press z +# Number newt: press 0 one: press 1 two: press 2 @@ -36,36 +39,52 @@ sept: press 7 eight: press 8 nine: press 9 -ask: press question -plus: press plus -mine: press minus -tide: press asciitilde +# Symbol yell: press exclam +ask: press question quid: press dollar -score: press underscore -clause: press colon -same: press semicolon -wax: press parenleft -wane: press parenright -curl: press braceleft -crimp: press braceright -bric: press bracketleft -brac: press bracketright -small: press less -big: press greater -star: press asterisk -hash: press numbersign -mood: press percent -blunt: press asciicircum +## TODO € europe: press euro snail: press at gain: press ampersand -vert: press bar spoke: press quotedbl mark: press apostrophe tick: press grave -slash: press slash -slope: press backslash +blunt: press asciicircum +## TODO ° degree: press list: press comma point: press period +same: press semicolon +clause: press colon +plus: press plus +mine: press minus +star: press asterisk +hash: press numbersign +mood: press percent match: press equal +tide: press asciitilde +slash: press slash +slope: press backslash +vert: press bar +score: press underscore +wax: press parenleft +wane: press parenright +bric: press bracketleft +brac: press bracketright +curl: press braceleft +crimp: press braceright +small: press less +big: press greater +# Function Keys +frank one: press F1 +frank two: press F2 +frank three: press F3 +frank four: press F4 +frank five: press F5 +frank six: press F6 +frank sept: press F7 +frank eight: press F8 +frank nine: press F9 +frank one newt: press F10 +frank one one: press F11 +frank one two: press F12 diff --git a/packages/numen-phrases/phrases/en-active/extend.phrases b/packages/numen-phrases/phrases/en-active/extend.phrases new file mode 100644 index 0000000..353e7cc --- /dev/null +++ b/packages/numen-phrases/phrases/en-active/extend.phrases @@ -0,0 +1,51 @@ + +# ----------------- +# Extend +# ----------------- + +space: press space +yes: press Return +tab: press Tab +scape: stick off \ + press Escape +smock: press Scroll_Lock +super: press Super_L + +left: press Left +right: press Right +up: press Up +down: press Down +lunge: press Left Left +rush: press Right Right +leave: press Left Left Left Left +charge: press Right Right Right Right +wrench: press ctrl+Left +stretch: press ctrl+Right + +reel: press Prior +page: press Next +home: press Home +end: press End + +# Delete +toss: press Delete +smite: press Delete Delete +hack: press BackSpace +mince: press BackSpace BackSpace +raze: press BackSpace BackSpace BackSpace BackSpace +swipe: press ctrl+BackSpace + +# Repeat +more: repeat 1 +bunch: repeat 2 +handful: repeat 4 +fistful: repeat 8 +plateful: repeat 12 + +# GUI Action +# TODO Cut +# TODO Copy +gluten: stick off \ + press XF86Paste +# TODO Save + diff --git a/packages/numen-phrases/phrases/en-active/function.phrases b/packages/numen-phrases/phrases/en-active/function.phrases new file mode 100644 index 0000000..32cf3be --- /dev/null +++ b/packages/numen-phrases/phrases/en-active/function.phrases @@ -0,0 +1,75 @@ + +# ----------------- +# Modifier & Modes +# ----------------- + +# Modifier +shy: mod shift +troy: mod ctrl +hype: mod alt +shock: mod super \ + stick off + +# Mode +shout: caps on +#: caps off + +squeeze: run notify-send --expire-time=3000 --urgency=low --icon=🧩 "🧩 Sticky Mode" & \ + stick off \ + stick on + +# Cancel +cleanse: mod clear \ + caps off \ + stick off +# Cancel sentence +@cancel no: + + +# ----------------- +# Desktop +# ----------------- + +# KDE Window +west: stick off \ + press super+Left +east: stick off \ + press super+Right +north: stick off \ + press super+Up +south: stick off \ + press super+Down +screen: stick off \ + press super+Prior +#???: stick off \ +# press super+Next +exterminate: stick off \ + press alt+f4 + +# KDE Taskbar +#shock one: press super+1 +#shock two: press super+2 +#shock three: press super+3 + +# KDE Workspace +view: stick off \ + press super+w +#troy frank one: press ctrl+f1 +#troy frank two: press ctrl+f2 +#troy frank three: press ctrl+f3 + + +# ----------------- +# Switching +# ----------------- + +# Sleep https://lists.sr.ht/~geb/numen/%3C55fe1488feeb1cee2627d61b9b7e16a74ef5fca0.camel@dalibo.com%3E +hibernate: run echo load /etc/numen/phrases/en-inactive/hibernate.phrases | /etc/numen/bin/numenc & notify-send --expire-time=3000 --urgency=low --icon=💤 "💤 Numen goes to sleep..." + +# Language +language: set LANGUAGE_WORD echo 1 +german: run [ "LANGUAGE_WORD" ] && { sleep .3; NUMEN_MODEL=/usr/share/vosk-models/small-de /etc/numen/bin/numen /etc/numen/phrases/de-active/base.phrases /etc/numen/phrases/de-active/extend.phrases /etc/numen/phrases/de-active/function.phrases /etc/numen/phrases/de-active/transcribe.phrases; } & pkill numen & notify-send --expire-time=3000 --urgency=low --icon=🌍 "🌍 Numen switches to German..." + +# Reset Language Module Detection +: caps off \ + set LANGUAGE_WORD diff --git a/packages/numen-phrases/phrases/en-active/transcribe.phrases b/packages/numen-phrases/phrases/en-active/transcribe.phrases new file mode 100644 index 0000000..314ad5a --- /dev/null +++ b/packages/numen-phrases/phrases/en-active/transcribe.phrases @@ -0,0 +1,65 @@ + +# ----------------- +# Transcribe +# ----------------- + +# Transcribe +@transcribe scribe: set numen_fmt echo normal \ + pen /etc/numen/scripts/tweak; /etc/numen/scripts/transcripts | head -n 1 + +# Erase Transcription +ditch: eval /etc/numen/scripts/transcripts | sed 's/./ BackSpace/g; s/^/press/; q' + +# Cursor to Start +trudge: eval /etc/numen/scripts/transcripts | sed 's/./ Left/g; s/^/press/; q' + + +# ----------------- +# Transcription Modes +# ----------------- + +# First letter uppercase +@transcribe scrub: set numen_fmt echo sentence \ + pen /etc/numen/scripts/tweak; /etc/numen/scripts/transcripts | head -n 1 + +# All Words Uppercase +@transcribe tight scribe: set numen_fmt echo title \ + pen /etc/numen/scripts/tweak; /etc/numen/scripts/transcripts | head -n 1 + +# with_snake_inbetween +@transcribe snake: set numen_fmt echo snake \ + pen /etc/numen/scripts/tweak; /etc/numen/scripts/transcripts | head -n 1 + +# with-dashes-inbetween +@transcribe dash: set numen_fmt echo dash \ + pen /etc/numen/scripts/tweak; /etc/numen/scripts/transcripts | head -n 1 + +# with.dots.inbetween +@transcribe dot scribe: set numen_fmt echo dot \ + pen /etc/numen/scripts/tweak; /etc/numen/scripts/transcripts | head -n 1 + +# as, list, items +@transcribe roh scribe: set numen_fmt echo list \ + pen /etc/numen/scripts/tweak; /etc/numen/scripts/transcripts | head -n 1 + +# in/path/format +@transcribe path scribe: set numen_fmt echo path \ + pen /etc/numen/scripts/tweak; /etc/numen/scripts/transcripts | head -n 1 + +# allsmashedtogether +@transcribe kludge: set numen_fmt echo smash \ + pen /etc/numen/scripts/tweak; /etc/numen/scripts/transcripts | head -n 1 + +# inCamelCase +@transcribe camel: set numen_fmt echo camel \ + pen /etc/numen/scripts/tweak; /etc/numen/scripts/transcripts | head -n 1 + +# InPascalCase +@transcribe pascal: set numen_fmt echo pascal \ + pen /etc/numen/scripts/tweak; /etc/numen/scripts/transcripts | head -n 1 + +# ALL IN CAPS +# shout scribe + +# Ignore this, vosk-model-small-en-us-0.15 can output huh after a long silence. +huh: diff --git a/packages/numen-phrases/phrases/en-inactive/hibernate.phrases b/packages/numen-phrases/phrases/en-inactive/hibernate.phrases new file mode 100644 index 0000000..da4a5d5 --- /dev/null +++ b/packages/numen-phrases/phrases/en-inactive/hibernate.phrases @@ -0,0 +1,9 @@ + +# Sleep +hibernate: run notify-send --expire-time=3000 --urgency=low --icon=💤 "💤 Numen is allready asleep" + +wake: set WAKEUP_WORD_ONE echo 1 +up: eval [ "$WAKEUP_WORD_ONE" ] && echo set WAKEUP_WORD_TWO echo 1 ||: +now: run [ "$WAKEUP_WORD_TWO" ] && echo load /etc/numen/phrases/en-active/base.phrases /etc/numen/phrases/en-active/extend.phrases /etc/numen/phrases/en-active/function.phrases /etc/numen/phrases/en-active/transcribe.phrases | /etc/numen/bin/numenc & notify-send --expire-time=3000 --urgency=low --icon=☀️ "☀️ Numen is waking up..." ||: +: set WAKEUP_WORD_ONE : \ + set WAKEUP_WORD_TWO : diff --git a/packages/numen-phrases/phrases/phrases.md b/packages/numen-phrases/phrases/phrases.md new file mode 100644 index 0000000..94f2524 --- /dev/null +++ b/packages/numen-phrases/phrases/phrases.md @@ -0,0 +1,246 @@ +# Phrases Documentation + +## Base + +### Letter + +| Letter | Phrase en | Phrase de | +| ------ | --------- | --------- | +| a | air | auto | +| b | bat | ball | +| c | cap | cello | +| d | drum | dach | +| e | each | eis | +| f | fig | fisch | +| g | gust | glück | +| h | hoof | haus | +| i | ice | insel | +| j | jive | jahr | +| k | kid | kuss | +| l | link | licht | +| m | made | mond | +| n | nerd | nacht | +| o | odd | oma | +| p | pit | pferd | +| q | quench | quiz | +| r | red | rad | +| s | sun | soll | +| t | trap | tisch | +| u | urge | um | +| v | void | v | +| w | whiz | wald | +| x | plex | mix | +| y | yank | yoga | +| z | zip | zug | +| ä | | | +| ö | | | +| ü | | | +| ß | | | + +### Number + +| Number | Phrase en | Phrase de | +| ------ | --------- | --------- | +| 0 | newt | null | +| 1 | one | eins | +| 2 | two | zwei | +| 3 | three | drei | +| 4 | four | vier | +| 5 | five | fünf | +| 6 | six | sechs | +| 7 | sept | sieb | +| 8 | eight | acht | +| 9 | nine | neun | + +### Symbol + +| Symbol | Phrase en | Phrase de | +| ------ | --------- | --------- | +| ! | yell | schrei | +| ? | ask | frag | +| $ | quid | dollar | +| € todo | europe | euro | +| @ | snail | mail | +| & | gain | und | +| " | spoke | sag | +| ' | mark | ast | +| ` | tick | zweig | +| ^ | blunt | hut | +| ° todo | degree | grad | +| , | list | stop | +| . | point | steh | +| ; | same | halt | +| : | clause | kommt | +| + | plus | mit | +| - | mine | ohne | +| * | star | stern | +| # | hash | roh | +| % | mood | teil | +| = | match | gleich | +| ~ | tide | toll | +| / | slash | schwer | +| \ | slope | wert | +| \| | vert | wand | +| _ | score | flur | +| ( | wax | auf | +| ) | wane | zu | +| [ | bric | an | +| ] | brac | aus | +| { | curl | berg | +| } | crip | tal | +| < | small | klein | +| > | big | groß | + +### Function Keys + +| Key | Phrase en | Phrase de | +| ---- | -------------- | -------------- | +| F1 | frank one | funk eins | +| F2 | frank two | funk zwei | +| F3 | frank three | funk drei | +| F4 | frank four | funk vier | +| F5 | frank five | funk fünf | +| F6 | frank six | funk sechs | +| F7 | frank sept | funk sieb | +| F8 | frank eight | funk acht | +| F9 | frank nine | funk neun | +| F10 | frank one newt | funk eins null | +| F11 | frank one one | funk eins eins | +| F12 | frank one two | funk eins zwei | + + +## Extend + +| Extend | Phrase en | Phrase de | +| ------------ | --------- | --------- | +| Space | space | leer | +| Enter | yes | ja | +| Tab | tab | schieb | +| Esc | scape | geh | +| Super Key | super | super | +| Compose | smock | sonder | +| | | | +| Left | left | links | +| Right | right | rechts | +| Up | up | hoch | +| Down | down | runter | +| 2x Left | lunge | lauf | +| 2x Right | rush | renn | +| 4x Left | leave | lange | +| 4x Right | charge | runde | +| Ctrl + Left | wrench | zieh | +| Ctrl + Right | stretch | streck | +| | | | +| Page Up | reel | himmel | +| Page Down | page | hölle | +| Home | home | heim | +| End | end | ende | + +| Delete | Phrase en | Phrase de | +| ---------------- | --------- | --------- | +| Delete | toss | werf | +| Delete x 2 | smite | wirf | +| Backspace | hack | weg | +| Backspace x 2 | mince | weit | +| Backspace x 4 | raze | fern | +| Ctrl + Backspace | swipe | fremd | + +| Repeat | Phrase en | Phrase de | +| ------ | --------- | --------- | +| + 1x | more | mehr | +| + 2x | bunch | paar | +| + 4x | handful | oft | +| + 8x | fistful | viel | +| + 12x | plateful | ganz viel | + +| GUI Action | Phrase en | Phrase de | +| ---------- | --------- | --------- | +| Cut | | | +| Copy | | | +| Paste | gluten | platz | +| Save | | | + + +## Function + +### Modifier & Modes + +Works until end of Scentence or Cancel Keyword + +| Modifier | Phrase en | Phrase de | +| -------- | --------- | --------- | +| Shift | shy | schau | +| Control | troy | mein | +| Alt | hype | geil | +| Super | shock | sau | + +| Mode | Phrase en | Phrase de | +| --------- | --------- | --------- | +| Capslock | shout | laut | +| Hold Keys | squeeze | zusammen | + +| Cancel | Phrase en | Phrase de | +| --------------- | --------- | --------- | +| Cancel | cleanse | sauber | +| Cancel sentence | no | nein | + +### Desktop + +| KDE Window | Phrase en | Phrase de | +| ----------- | ---------------- | --------- | +| Tile Left | west | west | +| Tile Right | east | ost | +| Tile Up | north | nord | +| Tile Down | south | süd | +| Maximize | screen | schirm | +| Minimize | | | +| Close | exterminate | zerstören | + +| KDE Taskbar | Phrase en | Phrase de | +| ----------- | ---------------- | --------- | +| Window 1 | shock one | sau eins | +| Window 2 | shock two | sau zwei | +| Window 2 | shock three | sau drei | + +| KDE Workspace | Phrase en | Phrase de | +| ------------- | ---------------- | -------------- | +| Overview | view | sicht | +| Workspace 1 | troy frank one | mein funk eins | +| Workspace 2 | troy frank two | mein funk zwei | +| Workspace 3 | troy frank three | mein funk drei | + +### Switching + +| Sleep | Phrase en | Phrase de | +| --------- | ----------- | -------------- | +| Numen off | hibernate | schlaf gut | +| Numen on | wake up now | wach jetzt auf | + +| Langauge | Phrase en | Phrase de | +| --------- | --------------- | ---------------- | +| german | language german | | +| english | | sprache englisch | + + +## Transcribe + +| Transcribe | Phrase en | Phrase de | +| ------------------- | --------- | --------- | +| Transcribe | scribe | schreib | +| Erase Transcription | ditch | tritt | +| Cursor to Start | trudge | start | + +| Transcription Modes | Phrase en | Phrase de | +| ---------------------- | ------------ | -------------- | +| First letter uppercase | scrub | satz | +| All Words Uppercase | tight scribe | oben | +| with_snake_inbetween | snake | schlange | +| with-dashes-inbetween | dash | strich | +| with.dots.inbetween | dot scribe | punkt | +| as, list, items | roh scribe | auf list | +| in/path/format | path scribe | pfad | +| allsmashedtogether | kludge | eng | +| inCamelCase | camel | kamel | +| InPascalCase | pascal | paste | +| ALL IN CAPS | shout scribe | laut schreib | + diff --git a/packages/vosk-model-small-de/default.nix b/packages/vosk-model-small-de/default.nix index 724dc1d..d7f0d59 100644 --- a/packages/vosk-model-small-de/default.nix +++ b/packages/vosk-model-small-de/default.nix @@ -1,7 +1,7 @@ { stdenv, fetchurl, unzip }: # Source: https://github.com/Lykos153/numen-nix stdenv.mkDerivation { - name = "vosk-model-small-en-us"; + name = "vosk-model-small-de"; version = "0.15"; src = fetchurl { url = "https://alphacephei.com/vosk/models/vosk-model-small-de-0.15.zip"; @@ -15,3 +15,4 @@ stdenv.mkDerivation { cp -r . $out/usr/share/vosk-models/small-de ''; } + diff --git a/systems/x86_64-linux/Ohybke/default.nix b/systems/x86_64-linux/Ohybke/default.nix index bb1ee58..b571c40 100644 --- a/systems/x86_64-linux/Ohybke/default.nix +++ b/systems/x86_64-linux/Ohybke/default.nix @@ -126,6 +126,16 @@ # Tailscale services.tailscale.enable = true; + services.numen = { + enable = true; + autoStart = true; + phrases = [ + "${pkgs.kb-one.numen-phrases}/phrases/en-inactive/hibernate.phrases" + ]; + dotoolXkbLayout = "de"; + }; + + # Packages installed in system profile. Search Packages: $ nix search wget environment.systemPackages = with pkgs; [ vim @@ -137,8 +147,11 @@ python3 sops kb-one.numen + kb-one.numen-phrases + libnotify kb-one.dotool kb-one.vosk-model-small-en-us + kb-one.vosk-model-small-de ]; system.stateVersion = "24.11"; # NEVER Change this!