{ lib, pkgs, ... }: let plover-src = pkgs.plover.dev.src; plover-dictionaries = [ { enabled = true; path = pkgs.writeText "user.json" (builtins.toJSON { "SER/TKPWAL" = "Sergal"; "SERLG" = "Sergal"; "SER/WAL" = "serval"; }); } { enabled = true; path = "${plover-src}/plover/assets/commands.json"; } { enabled = true; path = "${plover-src}/plover/assets/main.json"; } ]; keyboard-keymap = [ [ "#" [ "1" "2" "3" "4" "5" "6" "7" "8" "9" "0" "-" "=" "b" ] ] [ "S-" [ "q" "a" ] ] [ "T-" [ "w" ] ] [ "K-" [ "s" ] ] [ "P-" [ "e" ] ] [ "W-" [ "d" ] ] [ "H-" [ "r" ] ] [ "R-" [ "f" ] ] [ "A-" [ "c" ] ] [ "O-" [ "v" ] ] [ "*" [ "t" "y" "g" "h" ] ] [ "-E" [ "n" ] ] [ "-U" [ "m" ] ] [ "-F" [ "u" ] ] [ "-R" [ "j" ] ] [ "-P" [ "i" ] ] [ "-B" [ "k" ] ] [ "-L" [ "o" ] ] [ "-G" [ "l" ] ] [ "-T" [ "p" ] ] [ "-S" [ ";" ] ] [ "-D" [ "[" ] ] [ "-Z" [ "'" ] ] [ "arpeggiate" [ "space" ] ] [ "no-op" [ "\\" "]" "z" "x" "" "." "/" ] ] ]; plover-cfg = pkgs.writeText "plover.cfg" (lib.generators.toINI { } { "Machine Configuration".machine_type = "Keyboard"; "System: English Stenotype" = { dictionaries = builtins.toJSON plover-dictionaries; "keymap[keyboard]" = builtins.toJSON keyboard-keymap; }; }); in { home.packages = [ pkgs.plover.dev ]; home.activation.ploverSettings = lib.hm.dag.entryAfter [ "writeBoundary" ] '' $DRY_RUN_CMD mkdir $VERBOSE_ARG -p $HOME/.config/plover $DRY_RUN_CMD rm -f $HOME/.config/plover/plover.cfg $DRY_RUN_CMD cp $VERBOSE_ARG ${plover-cfg} $HOME/.config/plover/plover.cfg $DRY_RUN_CMD chmod +w $VERBOSE_ARG $HOME/.config/plover/plover.cfg ''; systemd.user.services.plover = { Unit = { Description = "plover"; After = [ "tray.target" ]; PartOf = [ "graphical-session.target" ]; Requires = [ "tray.target" ]; }; Install = { WantedBy = [ "graphical-session.target" ]; }; Service = { ExecStart = "${pkgs.plover.dev}/bin/plover"; }; }; }