summaryrefslogtreecommitdiff
path: root/contrib/nodeck.sh
blob: 8a0d8deb16ee73381b1776dc0b40a79bcc2e9b2d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#!/bin/sh

## Pre-parse arugments for ease of use
CLONEFOLDER=${1:-""}

setfolder() {
    if [[ "$2" == "clone" ]]; then
        local ACTION="clone"
        local DEFAULT="git"
    elif [[ "$2" == "install" ]]; then
        local ACTION="install"
        local DEFAULT="loaderdev"
    fi

    printf "Enter the directory in /home/user to ${ACTION} to.\n"
    printf "Example: if your home directory is /home/user you would type: ${DEFAULT}\n"
    printf "The ${ACTION} directory would be: ${HOME}/${DEFAULT}\n"
    if [[ "$ACTION" == "clone" ]]; then
        read -p "Enter your ${ACTION} directory: " CLONEFOLDER
        if ! [[ "$CLONEFOLDER" =~ ^[[:alnum:]]+$ ]]; then
            printf "Folder name not provided. Using default, '${DEFAULT}'.\n"
            CLONEFOLDER="${DEFAULT}"
        fi
    elif [[ "$ACTION" == "install" ]]; then
        read -p "Enter your ${ACTION} directory: " INSTALLFOLDER
        if ! [[ "$INSTALLFOLDER" =~ ^[[:alnum:]]+$ ]]; then
            printf "Folder name not provided. Using default, '${DEFAULT}'.\n"
            INSTALLFOLDER="${DEFAULT}"
        fi
    else
        printf "Folder type could not be determined, exiting\n"
        exit 1
    fi
}

clonefromto() {
    # printf "repo=$1\n"
    # printf "outdir=$2\n"
    # printf "branch=$3\n"
    if [[ -z $3 ]]; then
        BRANCH=""
    else
        BRANCH="-b $3"
    fi
    git clone $1 $2 $BRANCH &> '/dev/null'
    CODE=$?
    if [[ $CODE -eq 128 ]]; then
        cd $2
        git fetch &> '/dev/null'
    fi
}

npmtransbundle() {
    cd $1
    if [[ "$2" == "library" ]]; then
        npm install --quiet &> '/dev/null'
        npm run build --quiet &> '/dev/null'
        sudo npm link --quiet &> '/dev/null'
    elif [[ "$2" == "frontend" ]] || [[ "$2" == "template" ]]; then
        npm install --quiet &> '/dev/null'
        npm link decky-frontend-lib --quiet &> '/dev/null'
        npm run build --quiet &> '/dev/null'
    fi
}

printf "Installing Steam Deck Plugin Loader contributor (no Steam Deck)..."

printf "\nTHIS SCRIPT ASSUMES YOU ARE RUNNING IT ON A PC, NOT THE DECK!
If you are not planning to contribute to PluginLoader then you should not be using this script.\n"

printf "\nThis script requires you to have nodejs installed. (If nodejs doesn't bundle npm on your OS/distro, then npm is required as well).\n"

if [[ -z $1 ]]; then
    read -p "Press any key to continue"
fi

if [[ "$CLONEFOLDER" == "" ]]; then
    setfolder "$CLONEFOLDER" "clone"
fi

CLONEDIR="$HOME/$CLONEFOLDER"

## Create folder structure

printf "\nCloning git repositories.\n"

mkdir -p ${CLONEDIR} &> '/dev/null'

### remove folders just in case
# rm -r ${CLONEDIR}/pluginloader
# rm -r ${CLONEDIR}/pluginlibrary
# rm -r ${CLONEDIR}/plugintemplate

clonefromto "https://github.com/SteamDeckHomebrew/PluginLoader" ${CLONEDIR}/pluginloader react-frontend-plugins

clonefromto "https://github.com/SteamDeckHomebrew/decky-frontend-lib" ${CLONEDIR}/pluginlibrary

clonefromto "https://github.com/SteamDeckHomebrew/decky-plugin-template" ${CLONEDIR}/plugintemplate 

## Transpile and bundle typescript
type npm &> '/dev/null'

NPMLIVES=$?

if ! [[ "$NPMLIVES" -eq 0 ]]; then
    printf "npm needs to be installed, exiting.\n"
    exit 1
fi

[ "$UID" -eq 0 ] || printf "Input password to install typscript compiler.\n"

sudo npm install --quiet -g tsc &> '/dev/null'

printf "Transpiling and bundling typescript.\n"

npmtransbundle ${CLONEDIR}/pluginlibrary/ "library"

npmtransbundle ${CLONEDIR}/pluginloader/frontend "frontend"

npmtransbundle ${CLONEDIR}/plugintemplate "template"

printf "Plugin Loader is located at '${CLONEDIR}/pluginloader/'.\n"

printf "Run in console or in a script these commands to run your development version:\n'export PLUGIN_PATH=${CLONEDIR}/plugins; export CHOWN_PLUGIN_PATH=0; sudo -E python3 ${CLONEDIR}/pluginloader/backend/main.py'\n"

printf "All done!\n"