Skip to content

Commit

Permalink
Merge pull request #6 from nicholasRutherford/main
Browse files Browse the repository at this point in the history
Update template to newest version
  • Loading branch information
cboiangiu authored Mar 15, 2024
2 parents b1106e5 + 6450439 commit 3462a10
Show file tree
Hide file tree
Showing 18 changed files with 670 additions and 419 deletions.
15 changes: 12 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ coverage
node_modules
bower_components
py_modules
.pnpm-store

# Editors
.idea
Expand All @@ -45,6 +46,14 @@ yalc.lock
# Ignore output folder

backend/out
decky-dictation.zip
bin
/.pnpm-store

# Make sure to ignore any instance of the loader's decky_plugin.py
decky_plugin.py

# Ignore decky CLI for building plugins
out
out/*
cli/
cli/*
cli/decky
deck.json
17 changes: 17 additions & 0 deletions .vscode/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/usr/bin/env bash
CLI_LOCATION="$(pwd)/cli"
echo "Building plugin in $(pwd)"

SYSTEM_ARCH="$(uname -a)"

if [[ "$SYSTEM_ARCH" =~ "Darwin" ]]; then
$CLI_LOCATION/decky plugin build $(pwd)
else
printf "Please input sudo password to proceed.\n"

# read -s sudopass

# printf "\n"

echo $sudopass | sudo $CLI_LOCATION/decky plugin build $(pwd)
fi
12 changes: 7 additions & 5 deletions .vscode/defsettings.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
{
"deckip" : "0.0.0.0",
"deckport" : "22",
"deckpass" : "ssap",
"deckkey" : "-i ${env:HOME}/.ssh/id_rsa",
"deckdir" : "/home/deck",
"deckip": "steamdeck.local",
"deckport": "22",
"deckuser": "deck",
"deckpass": "ssap",
"deckkey": "-i ${env:HOME}/.ssh/id_rsa",
"deckdir": "/home/deck",
"pluginname": "Decky Dictation",
"python.analysis.extraPaths": [
"./py_modules"
]
Expand Down
68 changes: 68 additions & 0 deletions .vscode/setup.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#!/usr/bin/env bash
PNPM_INSTALLED="$(which pnpm)"
DOCKER_INSTALLED="$(which docker)"
CLI_INSTALLED="$(pwd)/cli/decky"

# echo "$PNPM_INSTALLED"
# echo "$DOCKER_INSTALLED"
# echo "$CLI_INSTALLED"

echo "If you are using alpine linux, do not expect any support."
if [[ "$PNPM_INSTALLED" =~ "which" ]]; then
echo "pnpm is not currently installed, you can install it via your distro's package managment system or via a script that will attempt to do a manual install based on your system. If you wish to proceed with installing via the script then answer "no" (capitals do not matter) and proceed with the rest of the script. Otherwise, just hit enter to proceed and use the script."
read run_pnpm_script
if [[ "$run_pnpm_script" =~ "n" ]]; then
echo "You have chose to install pnpm via npm or your distros package manager. Please make sure to do so before attempting to build your plugin."
else
CURL_INSTALLED="$(which curl)"
WGET_INSTALLED="$(which wget)"
if [[ "$CURL_INSTALLED" =~ "which" ]]; then
printf "curl not found, attempting with wget.\n"
if [[ "$WGET_INSTALLED" =~ "which" ]]; then
printf "wget not found, please install wget or curl.\n"
printf "Could not install pnpm as curl and wget were not found.\n"
else
wget -qO- https://get.pnpm.io/install.sh | sh -
fi
else
curl -fsSL https://get.pnpm.io/install.sh | sh -
fi
fi
fi

if [[ "$DOCKER_INSTALLED" =~ "which" ]]; then
echo "Docker is not currently installed, in order build plugins with a backend you will need to have Docker installed. Please install Docker via the preferred method for your distribution."
fi

if ! test -f "$CLI_INSTALLED"; then
echo "The Decky CLI tool (binary file is just called "decky") is used to build your plugin as a zip file which you can then install on your Steam Deck to perform testing. We highly recommend you install it. Hitting enter now will run the script to install Decky CLI and extract it to a folder called cli in the current plugin directory. You can also type 'no' and hit enter to skip this but keep in mind you will not have a usable plugin without building it."
read run_cli_script
if [[ "$run_cli_script" =~ "n" ]]; then
echo "You have chosen to not install the Decky CLI tool to build your plugins. Please install this tool to build and test your plugin before submitting it to the Plugin Database."
else

SYSTEM_ARCH="$(uname -a)"

mkdir "$(pwd)"/cli
if [[ "$SYSTEM_ARCH" =~ "x86_64" ]]; then

if [[ "$SYSTEM_ARCH" =~ "Linux" ]]; then
curl -L -o "$(pwd)"/cli/decky "https://github.com/SteamDeckHomebrew/cli/releases/latest/download/decky-linux-x86_64"
fi

if [[ "$SYSTEM_ARCH" =~ "Darwin" ]]; then
curl -L -o "$(pwd)"/cli/decky "https://github.com/SteamDeckHomebrew/cli/releases/latest/download/decky-macOS-x86_64"
fi

else
echo "System Arch not found! The only supported systems are Linux x86_64 and Apple x86_64/ARM64, not $SYSTEM_ARCH"
fi

if [[ "$SYSTEM_ARCH" =~ "arm64" ]]; then
curl -L -o "$(pwd)"/cli/decky "https://github.com/SteamDeckHomebrew/cli/releases/latest/download/decky-macOS-aarch64"
fi

chmod +x "$(pwd)"/cli/decky
echo "Decky CLI tool is now installed and you can build plugins into easy zip files using the "Build Zip" Task in vscodium."
fi
fi
153 changes: 105 additions & 48 deletions .vscode/tasks.json
Original file line number Diff line number Diff line change
@@ -1,105 +1,162 @@
{
"version": "2.0.0",
"tasks": [
// OTHER
//PRELIMINARY SETUP TASKS
//Dependency setup task
{
"label": "checkforsettings",
"label": "depsetup",
"type": "shell",
"group": "none",
"detail": "Check that settings.json has been created",
"command": "bash -c ${workspaceFolder}/.vscode/config.sh",
"detail": "Install depedencies for basic setup",
"linux": {
"command": "${workspaceFolder}/.vscode/setup.sh",
},
"osx": {
"command": "${workspaceFolder}/.vscode/setup.sh",
},
// // placeholder for windows scripts, not currently planned
// "windows": {
// "command": "call -c ${workspaceFolder}\\.vscode\\setup.bat",
// },
"problemMatcher": []
},
// BUILD
//pnpm setup task to grab all needed modules
{
"label": "pnpmsetup",
"type": "shell",
"group": "build",
"group": "none",
"detail": "Setup pnpm",
"command": "pnpm i",
"command": "which pnpm && pnpm i",
"problemMatcher": []
},
//Preliminary "All-in-one" setup task
{
"label": "updatefrontendlib",
"label": "setup",
"detail": "Set up depedencies, pnpm and update Decky Frontend Library.",
"dependsOrder": "sequence",
"dependsOn": [
"depsetup",
"pnpmsetup",
"updatefrontendlib"
],
"problemMatcher": []
},
//Preliminary Deploy Config Setup
{
"label": "settingscheck",
"type": "shell",
"group": "build",
"detail": "Update deck-frontend-lib",
"command": "pnpm update decky-frontend-lib --latest",
"group": "none",
"detail": "Check that settings.json has been created",
"linux": {
"command": "${workspaceFolder}/.vscode/config.sh",
},
"osx": {
"command": "${workspaceFolder}/.vscode/config.sh",
},
// // placeholder for windows scripts, not currently planned
// "windows": {
// "command": "call ${workspaceFolder}\\.vscode\\config.bat",
// },
"problemMatcher": []
},
//BUILD TASKS
{
"label": "build",
"type": "npm",
"label": "cli-build",
"group": "build",
"detail": "rollup -c",
"script": "build",
"path": "",
"detail": "Build plugin with CLI",
"linux": {
"command": "${workspaceFolder}/.vscode/build.sh",
},
"osx": {
"command": "${workspaceFolder}/.vscode/build.sh",
},
// // placeholder for windows logic, not currently planned
// "windows": {
// "command": "call ${workspaceFolder}\\.vscode\\build.bat",
// },
"problemMatcher": []
},
//"All-in-one" build task
{
"label": "buildall",
"label": "build",
"group": "build",
"detail": "Build decky-plugin-template",
"dependsOrder": "sequence",
"dependsOn": [
"pnpmsetup",
"build"
"setup",
"settingscheck",
"cli-build",
],
"problemMatcher": []
},
// DEPLOY
//DEPLOY TASKS
//Copies the zip file of the built plugin to the plugins folder
{
"label": "createfolders",
"detail": "Create plugins folder in expected directory",
"label": "copyzip",
"detail": "Deploy plugin zip to deck",
"type": "shell",
"group": "none",
"dependsOn": [
"checkforsettings"
"chmodplugins"
],
"command": "ssh deck@${config:deckip} -p ${config:deckport} ${config:deckkey} 'mkdir -p ${config:deckdir}/homebrew/pluginloader && mkdir -p ${config:deckdir}/homebrew/plugins'",
"linux": {
"command": "rsync -azp --chmod=D0755,F0755 --rsh='ssh -p ${config:deckport} ${config:deckkey}' out/ ${config:deckuser}@${config:deckip}:${config:deckdir}/homebrew/plugins",
},
"osx": {
"command": "rsync -azp --chmod=Du+rwx,Dgo+rx,Fu+rwx,Fgo+rx --rsh='ssh -p ${config:deckport} ${config:deckkey}' out/ ${config:deckuser}@${config:deckip}:${config:deckdir}/homebrew/plugins",
},
"problemMatcher": []
},
//
{
"label": "deploy",
"detail": "Deploy dev plugin to deck",
"label": "extractzip",
"detail": "",
"type": "shell",
"group": "none",
"dependsOn": [
"createfolders",
"chmodfolders"
],
"command": "rsync -azp --delete --rsh='ssh -p ${config:deckport} ${config:deckkey}' --exclude='.git/' --exclude='.github/' --exclude='.vscode/' --exclude='node_modules/' --exclude='src/' --exclude='*.log' --exclude='.gitignore' . deck@${config:deckip}:${config:deckdir}/homebrew/plugins/${workspaceFolderBasename}",
"command": "echo '${config:deckdir}/homebrew/plugins/${config:pluginname}.zip' && ssh ${config:deckuser}@${config:deckip} -p ${config:deckport} ${config:deckkey} 'echo ${config:deckpass} | sudo -S mkdir 755 -p \"$(echo \"${config:deckdir}/homebrew/plugins/${config:pluginname}\" | sed \"s| |-|\")\" && echo ${config:deckpass} | sudo -S chown ${config:deckuser}:${config:deckuser} \"$(echo \"${config:deckdir}/homebrew/plugins/${config:pluginname}\" | sed \"s| |-|\")\" && echo ${config:deckpass} | sudo -S bsdtar -xzpf \"${config:deckdir}/homebrew/plugins/${config:pluginname}.zip\" -C \"$(echo \"${config:deckdir}/homebrew/plugins/${config:pluginname}\" | sed \"s| |-|g\")\" --strip-components=1 --fflags && echo ${config:deckpass} | sudo chown -R ${config:deckuser}:${config:deckuser} \"$(echo \"${config:deckdir}/homebrew/plugins/${config:pluginname}\" | sed \"s| |-|g\")\"'",
"problemMatcher": []
},
//"All-in-one" deploy task
{
"label": "chmodfolders",
"detail": "chmods folders to prevent perms issues",
"type": "shell",
"label": "deploy",
"dependsOrder": "sequence",
"group": "none",
"command": "ssh deck@${config:deckip} -p ${config:deckport} ${config:deckkey} 'echo '${config:deckpass}' | sudo -S chmod -R ug+rw ${config:deckdir}/homebrew/'",
"dependsOn": [
"copyzip",
"extractzip"
],
"problemMatcher": []
},
//"All-in-on" build & deploy task
{
"label": "deployall",
"label": "builddeploy",
"detail": "Builds plugin and deploys to deck",
"dependsOrder": "sequence",
"group": "none",
"dependsOn": [
"deploy",
"chmodfolders"
"build",
"deploy"
],
"problemMatcher": []
},
// ALL-IN-ONE
//GENERAL TASKS
//Update Decky Frontend Library, aka DFL
{
"label": "allinone",
"detail": "Build and deploy",
"dependsOrder": "sequence",
"group": "test",
"dependsOn": [
"buildall",
"deployall"
],
"label": "updatefrontendlib",
"type": "shell",
"group": "build",
"detail": "Update deck-frontend-lib aka DFL",
"command": "pnpm update decky-frontend-lib --latest",
"problemMatcher": []
}
},
//Used chmod plugins folder to allow copy-over of files
{
"label": "chmodplugins",
"detail": "chmods plugins folder to prevent perms issues",
"type": "shell",
"group": "none",
"command": "ssh ${config:deckuser}@${config:deckip} -p ${config:deckport} ${config:deckkey} 'echo '${config:deckpass}' | sudo -S chmod -R ug+rw ${config:deckdir}/homebrew/plugins/'",
"problemMatcher": []
},
]
}
12 changes: 3 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,9 @@ This plugin was made with the [decky-plugin-template](https://github.com/SteamDe
- 0.1.0 - initial version

### Nice to have
- Allow support for mode switching and implement persistent config settings; add new push to talk mode (hold STEAM + B + L2)
- Allow support for mode switching and implement persistent config settings; add new push to talk mode (hold L5?)
- Implement support for downloading and selecting other models at runtime (some more advanced models are too large to store on git; shippable stays with the small model)
- Allow the user to configure their hotkeys of choice. (maybe per game?)

### Known issues
- Currently this plugin only works in a game in game mode (first opened game if you have more opened at once; not working in home, store or steam chat ui etc).
Expand All @@ -26,11 +27,4 @@ This plugin was made with the [decky-plugin-template](https://github.com/SteamDe
- Thanks to [@marissa999](https://github.com/marissa999) for [decky-recorder](https://github.com/marissa999/decky-recorder) which has been used as a template for this plugin

### Building
If you want to build this plugin in theory you only need to run build-zip.sh. You will need the following:
- npm
- pnpm
- python + pip
- Docker
- zip

I only tested this on macOS.
If you want to build this plugin, please use the commands found in `.vscode/tasks.json`. Building this will make use of the [Decky Plugin CLI](https://github.com/SteamDeckHomebrew/cli).
6 changes: 2 additions & 4 deletions backend/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
FROM ghcr.io/steamdeckhomebrew/holo-base:latest

RUN pacman -Sydd --noconfirm --dbpath /var/lib/pacman python-pip git wget unzip
RUN pacman -Sydd --noconfirm --dbpath /var/lib/pacman python-pip git

RUN pip3 install vosk --target=/vosk

RUN git clone https://github.com/ideasman42/nerd-dictation.git

RUN cd nerd-dictation && wget https://alphacephei.com/kaldi/models/vosk-model-small-en-us-0.15.zip && unzip vosk-model-small-en-us-0.15.zip && mv vosk-model-small-en-us-0.15 model

ENTRYPOINT [ "/backend/entrypoint.sh" ]
ENTRYPOINT [ "/backend/entrypoint.sh" ]
2 changes: 0 additions & 2 deletions backend/entrypoint.sh
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
#!/bin/sh
set -e

OUTDIR="/backend/out"

cd /backend

cp -r /vosk /backend/out/
Expand Down
Loading

0 comments on commit 3462a10

Please sign in to comment.