From 5cb309a9bb3481534b353cb50c707a64b4155c00 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 18 Oct 2018 12:41:52 +0200 Subject: :construction: Work on installer and making the supportfiles do led control --- bin/install.sh | 77 ++++++++++++++++++++-------------------------------------- 1 file changed, 26 insertions(+), 51 deletions(-) (limited to 'bin') diff --git a/bin/install.sh b/bin/install.sh index c72949b..25c5dc8 100755 --- a/bin/install.sh +++ b/bin/install.sh @@ -98,69 +98,44 @@ tput sgr0 tput sc tput bel -piModel=0 -printf "\n\n\n" # So that the menu just erases things it has alredy written -while : -do - tput cuu 3 - tput ed - tput sc - tput setaf 8 - - if [[ piModel -eq 0 ]]; then - tput sgr0; fi - printf '%s\n' "- Raspberry Pi B" - tput setaf 8 - if [[ piModel -eq 1 ]]; then - tput sgr0; fi - printf '%s\n' "- Raspberry Pi B+" - tput setaf 8 - if [[ piModel -eq 2 ]]; then - tput sgr0; fi - printf '%s\n' "- Raspberry Pi Model 2" - tput setaf 8 - - read -sn1 key - if [ "$key" == "j" ]; then - piModel=$((piModel+1)) - if [[ piModel -gt 2 ]]; then - piModel=2 - fi - fi - if [ "$key" == "k" ]; then - piModel=$((piModel-1)) - if [[ piModel -lt 0 ]]; then - piModel=0 - fi - fi - if [ "$key" == "" ]; then - tput cuu 4 - tput ed - tput sgr0 - printf "%s\e[0;34m%s\e[0m\n" ". Which rPi is this? " "ListItem #$piModel" - break - fi - -done - - tput setaf 4 printf ". Installing the app itself...\n" tput sgr0 +# Create user 'luxcena-neo' +tput setaf 8 +printf '%s\n' " - Creating user 'lux-neo'..." +username="lux-neo" +egrep "^$username" /etc/passwd >/dev/null +if [ $? -eq 0 ]; then + echo "$username exists!" + exit 1 +else + #pass=$(perl -e 'print crypt($ARGV[0], "password")' $password) + useradd -m $username + [ $? -eq 0 ] && echo "User has been added to system!" || { printf "\n\nInstall failed.\n"; exit 1; } +fi +tput sgr0 + +# Change to the new user +tput setaf 8 +printf '%s\n' " - Changing to new user..." +sudo su lux-neo +tput sgr0 + # First we make our directories tput setaf 8 printf '%s\n' " - Making app-dir (/bin/luxcena-neo)..." tput sgr0 -mkdir ~/luxcena-neo-install || { printf "\n\nInstall failed.\n"; exit 1; } -mkdir ~/luxcena-neo-install/src || { printf "\n\nInstall failed.\n"; exit 1; } -mkdir ~/luxcena-neo-install/userdata || { printf "\n\nInstall failed.\n"; exit 1; } +mkdir ~/install || { printf "\n\nInstall failed.\n"; exit 1; } +mkdir ~/install/src || { printf "\n\nInstall failed.\n"; exit 1; } +mkdir ~/install/userdata || { printf "\n\nInstall failed.\n"; exit 1; } # Third we copy the source into the correct swap-folder tput setaf 8 printf '%s\n' " - Copying sourceCode to app-dir..." tput sgr0 -cp -r . ~/luxcena-neo-install/src || { printf "\n\nInstall failed.\n"; exit 1; } +cp -r . ~/install/src || { printf "\n\nInstall failed.\n"; exit 1; } # fourth we run npm i tput setaf 8 @@ -168,7 +143,7 @@ printf '%s\n' " - Running npm i..." tput sgr0 tput sc export NODE_ENV=production || { printf "\n\nInstall failed.\n"; exit 1; } -npm --prefix ~/luxcena-neo-install/src install ~/luxcena-neo-install/src --only=production || { printf "\n\nInstall failed.\n"; exit 1; } # This is probably a bit overkill to have --only=... but better safe than sorry? +npm --prefix ~/install/src install ~/install/src --only=production || { printf "\n\nInstall failed.\n"; exit 1; } # This is probably a bit overkill to have --only=... but better safe than sorry? tput rc; tput ed # Fifth we add the service files -- cgit v1.2.3 From 706dc5faca30d841be9be05cf757e72525540344 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 18 Oct 2018 12:48:35 +0200 Subject: :hammer: Fix permission issue --- bin/install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'bin') diff --git a/bin/install.sh b/bin/install.sh index 25c5dc8..c2e2cdf 100755 --- a/bin/install.sh +++ b/bin/install.sh @@ -106,13 +106,13 @@ tput sgr0 tput setaf 8 printf '%s\n' " - Creating user 'lux-neo'..." username="lux-neo" -egrep "^$username" /etc/passwd >/dev/null +sudo egrep "^$username" /etc/passwd >/dev/null if [ $? -eq 0 ]; then echo "$username exists!" exit 1 else #pass=$(perl -e 'print crypt($ARGV[0], "password")' $password) - useradd -m $username + sudo useradd -m $username [ $? -eq 0 ] && echo "User has been added to system!" || { printf "\n\nInstall failed.\n"; exit 1; } fi tput sgr0 -- cgit v1.2.3 From 2a0d442014041e0f4a0c6aed5a02980ab770cfce Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 18 Oct 2018 13:08:47 +0200 Subject: :construction: Work on lux-neo user with install --- bin/install.sh | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) (limited to 'bin') diff --git a/bin/install.sh b/bin/install.sh index c2e2cdf..e227b88 100755 --- a/bin/install.sh +++ b/bin/install.sh @@ -105,6 +105,7 @@ tput sgr0 # Create user 'luxcena-neo' tput setaf 8 printf '%s\n' " - Creating user 'lux-neo'..." +tput sgr0 username="lux-neo" sudo egrep "^$username" /etc/passwd >/dev/null if [ $? -eq 0 ]; then @@ -115,27 +116,27 @@ else sudo useradd -m $username [ $? -eq 0 ] && echo "User has been added to system!" || { printf "\n\nInstall failed.\n"; exit 1; } fi -tput sgr0 -# Change to the new user -tput setaf 8 -printf '%s\n' " - Changing to new user..." -sudo su lux-neo -tput sgr0 + +userDir=$(eval echo "~$username") # First we make our directories tput setaf 8 printf '%s\n' " - Making app-dir (/bin/luxcena-neo)..." tput sgr0 -mkdir ~/install || { printf "\n\nInstall failed.\n"; exit 1; } -mkdir ~/install/src || { printf "\n\nInstall failed.\n"; exit 1; } -mkdir ~/install/userdata || { printf "\n\nInstall failed.\n"; exit 1; } +sudo mkdir -p "$userDir/install" || { printf "\n\nInstall failed.\n"; exit 1; } +sudo chown $username:$username "$userDir/install" +sudo mkdir -p "$userDir/install/src" || { printf "\n\nInstall failed.\n"; exit 1; } +sudo chown $username:$username "$userDir/install/src" +sudo mkdir -p "$userDir/install/userdata" || { printf "\n\nInstall failed.\n"; exit 1; } +sudo chown $username:$username "$userDir/install/userdata" # Third we copy the source into the correct swap-folder tput setaf 8 printf '%s\n' " - Copying sourceCode to app-dir..." tput sgr0 -cp -r . ~/install/src || { printf "\n\nInstall failed.\n"; exit 1; } +sudo cp -r . "$userDir/install/src" || { printf "\n\nInstall failed.\n"; exit 1; } +sudo chown -R $username:$username "$userDir/install/src" # fourth we run npm i tput setaf 8 @@ -143,7 +144,7 @@ printf '%s\n' " - Running npm i..." tput sgr0 tput sc export NODE_ENV=production || { printf "\n\nInstall failed.\n"; exit 1; } -npm --prefix ~/install/src install ~/install/src --only=production || { printf "\n\nInstall failed.\n"; exit 1; } # This is probably a bit overkill to have --only=... but better safe than sorry? +runuser -l $username -c "npm --prefix ~/install/src install ~/install/src --only=production || { printf "\n\nInstall failed.\n"; exit 1; }" # This is probably a bit overkill to have --only=... but better safe than sorry? tput rc; tput ed # Fifth we add the service files -- cgit v1.2.3 From f36d99a3c960b7d6eaf95e23bea49dc02f1f3ae6 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 18 Oct 2018 13:13:27 +0200 Subject: :construction: Add sudo to runuser, just continue if user exists --- bin/install.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'bin') diff --git a/bin/install.sh b/bin/install.sh index e227b88..24526f2 100755 --- a/bin/install.sh +++ b/bin/install.sh @@ -109,8 +109,7 @@ tput sgr0 username="lux-neo" sudo egrep "^$username" /etc/passwd >/dev/null if [ $? -eq 0 ]; then - echo "$username exists!" - exit 1 + echo "User already exists, continuing..." else #pass=$(perl -e 'print crypt($ARGV[0], "password")' $password) sudo useradd -m $username @@ -144,7 +143,7 @@ printf '%s\n' " - Running npm i..." tput sgr0 tput sc export NODE_ENV=production || { printf "\n\nInstall failed.\n"; exit 1; } -runuser -l $username -c "npm --prefix ~/install/src install ~/install/src --only=production || { printf "\n\nInstall failed.\n"; exit 1; }" # This is probably a bit overkill to have --only=... but better safe than sorry? +sudo runuser -l $username -c "npm --prefix ~/install/src install ~/install/src --only=production || { printf "\n\nInstall failed.\n"; exit 1; }" # This is probably a bit overkill to have --only=... but better safe than sorry? tput rc; tput ed # Fifth we add the service files -- cgit v1.2.3 From fd8c13982dd46008de7258676f06cfca3d80b953 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 18 Oct 2018 16:05:55 +0200 Subject: :fire: Delete no longer needed user-check --- bin/install.sh | 5 ----- 1 file changed, 5 deletions(-) (limited to 'bin') diff --git a/bin/install.sh b/bin/install.sh index 24526f2..4ba4e45 100755 --- a/bin/install.sh +++ b/bin/install.sh @@ -5,11 +5,6 @@ printf '%s\n' "Luxcena-neo Installer" tput sgr0 printf '\e[93m%s\e[0m\n\n' "---------------------" -if [ $USER != "pi" ]; then - printf "Install failed...\nOther user than 'pi' detected. If you want to use another user, you have to install manually." - exit 1 -fi - # Update system tput sc tput setaf 4 -- cgit v1.2.3 From 4a4a950ea94d460c9afd3d8062b377c18e977963 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 18 Oct 2018 16:26:26 +0200 Subject: :hammer: Move yes/no dialog to function --- bin/install.sh | 141 ++++++++++++++++++++++++--------------------------------- 1 file changed, 60 insertions(+), 81 deletions(-) (limited to 'bin') diff --git a/bin/install.sh b/bin/install.sh index 4ba4e45..289f48e 100755 --- a/bin/install.sh +++ b/bin/install.sh @@ -5,93 +5,70 @@ printf '%s\n' "Luxcena-neo Installer" tput sgr0 printf '\e[93m%s\e[0m\n\n' "---------------------" +function dlgYN() { + tput sc + tput setaf 4 + printf "$1 (y/n)? " + while : + do + read -n 1 -p "" YNQuestionAnswer + if [[ $YNQuestionAnswer == "y" ]]; then + tput rc; tput el + printf ". $1?: \e[0;32mYes\e[0m\n" + tput sc + eval $2=1 # Set parameter 2 of input to the return value + break + elif [[ $YNQuestionAnswer == "n" ]]; then + tput rc; tput el + printf ". $1?: \e[0;31mNo\e[0m\n" + eval $2=0 # Set parameter 2 of input to the return value + break + fi + done +} + # Update system -tput sc -tput setaf 4 -printf ". Update your system (y/n)? " -while : -do - read -n 1 -p "" YNQuestionAnswer - if [[ $YNQuestionAnswer == "y" ]]; then - tput rc; tput el - printf ". Update your system?: \e[0;32mYes\e[0m\n" - tput sc - sudo apt-get -y -qq update || { printf "\n\nInstall failed.\n"; exit 1; } - sudo apt-get -y -qq upgrade || { printf "\n\nInstall failed.\n"; exit 1; } - tput rc; tput ed - break - elif [[ $YNQuestionAnswer == "n" ]]; then - tput rc; tput el - printf ". Update your system?: \e[0;31mNo\e[0m\n" - break - fi -done +dlgYN ". Update your system" res +if [ $res -eq 1 ]; then + tput sc + sudo apt-get -y -qq update || { printf "\n\nInstall failed.\n"; exit 1; } + sudo apt-get -y -qq upgrade || { printf "\n\nInstall failed.\n"; exit 1; } + tput rc; tput ed +fi # Install packages -tput sc -tput setaf 4 -printf ". Install required packages (y/n)? " -while : -do - read -n 1 -p "" YNQuestionAnswer - if [[ $YNQuestionAnswer == "y" ]]; then - tput rc; tput el - printf ". Install required packages?: \e[0;32mYes\e[0m\n" - tput sc - sudo apt-get -y -qq install nodejs scons python-dev swig || { printf "\n\nInstall failed.\n"; exit 1; } - if [ $? -eq 0 ]; then - tput rc; tput ed - printf "✓" - else - printf "\nInstall failed.\n" - exit 1 - fi - break - elif [[ $YNQuestionAnswer == "n" ]]; then - tput rc; tput el - printf ". Install required packages?: \e[0;31mNo\e[0m\n" - tput setaf 2 - printf " We are now assuming that all the following packages exists on your system:\n" - printf " nodejs scons python-dev swig\n" - tput sgr0 - break +dlgYN ". Install required packages" res +if [ $res -eq 1 ]; then + tput sc + sudo apt-get -y -qq install nodejs scons python-dev swig || { printf "\n\nInstall failed.\n"; exit 1; } + if [ $? -eq 0 ]; then + tput rc; tput ed + printf "✓" + else + printf "\nInstall failed.\n" + exit 1 fi -done +else + tput setaf 2 + printf " We are now assuming that all the following packages exists on your system:\n" + printf " nodejs scons python-dev swig\n" + tput sgr0 +fi # Install led-library -tput sc -tput setaf 4 -printf ". Install jgarff's rpi_ws281x library (y/n)? " -while : -do - read -n 1 -p "" YNQuestionAnswer - if [[ $YNQuestionAnswer == "y" ]]; then - tput rc; tput el - printf ". Install jgarff's rpi_ws281x library?: \e[0;32mYes\e[0m\n" - tput sc - git clone https://github.com/jgarff/rpi_ws281x /tmp/rpi_ws281x # TODO CHANGE PATH - python /tmp/rpi_ws281x/python/setup.py install # TODO CHANGE PAHT - if [ $? -eq 0 ]; then - tput rc; tput ed - printf "✓" - else - printf "\nInstall failed.\n" - exit 1 - fi - break - elif [[ $YNQuestionAnswer == "n" ]]; then - tput rc; tput el - printf ". Install jgarff's rpi_ws281x library?: \e[0;31mNo\e[0m\n" - break +dlgYN ". Install jgarff's rpi_ws281x library" res +if [ $res -eq 1 ]; then + tput sc + git clone https://github.com/jgarff/rpi_ws281x /tmp/rpi_ws281x # TODO CHANGE PATH + python /tmp/rpi_ws281x/python/setup.py install # TODO CHANGE PAHT + if [ $? -eq 0 ]; then + tput rc; tput ed + printf "✓" + else + printf "\nInstall failed.\n" + exit 1 fi -done - - -tput setaf 4 -printf ". Which rPi is this? (j:↓, k:↑, ↩:↩)\n" -tput sgr0 -tput sc -tput bel +fi tput setaf 4 printf ". Installing the app itself...\n" @@ -138,7 +115,9 @@ printf '%s\n' " - Running npm i..." tput sgr0 tput sc export NODE_ENV=production || { printf "\n\nInstall failed.\n"; exit 1; } -sudo runuser -l $username -c "npm --prefix ~/install/src install ~/install/src --only=production || { printf "\n\nInstall failed.\n"; exit 1; }" # This is probably a bit overkill to have --only=... but better safe than sorry? +sudo runuser -l $username -c 'npm --prefix ~/install/src install ~/install/src --only=production || { printf "\n\nInstall failed.\n"; exit 1; }' # This is probably a bit overkill to have --only=... but better safe than sorry? +if [ $? -eq 0 ]; then +fi tput rc; tput ed # Fifth we add the service files -- cgit v1.2.3 From 0c0561b98528d01faf0d7d6ab5a9324609284aaf Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 18 Oct 2018 16:29:48 +0200 Subject: :bug: Fix syntax, check function success with it's own if --- bin/install.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'bin') diff --git a/bin/install.sh b/bin/install.sh index 289f48e..08f160b 100755 --- a/bin/install.sh +++ b/bin/install.sh @@ -115,8 +115,10 @@ printf '%s\n' " - Running npm i..." tput sgr0 tput sc export NODE_ENV=production || { printf "\n\nInstall failed.\n"; exit 1; } -sudo runuser -l $username -c 'npm --prefix ~/install/src install ~/install/src --only=production || { printf "\n\nInstall failed.\n"; exit 1; }' # This is probably a bit overkill to have --only=... but better safe than sorry? -if [ $? -eq 0 ]; then +sudo runuser -l $username -c 'npm --prefix ~/install/src install ~/install/src --only=production' # This is probably a bit overkill to have --only=... but better safe than sorry? +if [ $? -ne 0 ]; then + printf "\n\nInstall failed.\n" + exit 1 fi tput rc; tput ed -- cgit v1.2.3 From a74ee07f77d6434b907d8e560c65468ea04336e6 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 18 Oct 2018 20:32:36 +0200 Subject: :construction: Fix error message on adduser error --- bin/install.sh | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'bin') diff --git a/bin/install.sh b/bin/install.sh index 08f160b..ae45052 100755 --- a/bin/install.sh +++ b/bin/install.sh @@ -84,17 +84,14 @@ if [ $? -eq 0 ]; then echo "User already exists, continuing..." else #pass=$(perl -e 'print crypt($ARGV[0], "password")' $password) - sudo useradd -m $username - [ $? -eq 0 ] && echo "User has been added to system!" || { printf "\n\nInstall failed.\n"; exit 1; } + sudo useradd -m $username || { printf "\n\nInstall failed.\n"; exit 1; } fi - -userDir=$(eval echo "~$username") - # First we make our directories tput setaf 8 printf '%s\n' " - Making app-dir (/bin/luxcena-neo)..." tput sgr0 +userDir=$(eval echo "~$username") sudo mkdir -p "$userDir/install" || { printf "\n\nInstall failed.\n"; exit 1; } sudo chown $username:$username "$userDir/install" sudo mkdir -p "$userDir/install/src" || { printf "\n\nInstall failed.\n"; exit 1; } -- cgit v1.2.3 From 90ffcddf7e861dcdaab5a0612146ce8292d75c60 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 18 Oct 2018 20:56:18 +0200 Subject: :construction: Remove 'sudos' from install script, and assume root --- bin/install.sh | 58 +++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 37 insertions(+), 21 deletions(-) (limited to 'bin') diff --git a/bin/install.sh b/bin/install.sh index ae45052..62077a7 100755 --- a/bin/install.sh +++ b/bin/install.sh @@ -5,6 +5,26 @@ printf '%s\n' "Luxcena-neo Installer" tput sgr0 printf '\e[93m%s\e[0m\n\n' "---------------------" +LOG="/tmp/luxcena-neo.install.log" +touch $LOG +echo "Starting Luxcena-neo installer..." >> LOG + +if [ "$EUID" -ne 0 ]; then + echo "You need to run this script as root." + echo "Try running with 'sudo ./bin/install.sh'" + exit 1 +fi + +function die() { + tput setaf 1 + printf "\n\nInstall failed.\n" + printf "Check the logfile at '/tmp/lucxena-neo.install.log'.\n" + printf "Use this command to see the last 30 lines of the file;\n" + printf " tail -n 30 /tmp/luxcena-neo.install.log" + tput sgr0 + exit 1 +} + function dlgYN() { tput sc tput setaf 4 @@ -31,8 +51,8 @@ function dlgYN() { dlgYN ". Update your system" res if [ $res -eq 1 ]; then tput sc - sudo apt-get -y -qq update || { printf "\n\nInstall failed.\n"; exit 1; } - sudo apt-get -y -qq upgrade || { printf "\n\nInstall failed.\n"; exit 1; } + apt-get -y -qq update >> LOG || die + apt-get -y -qq upgrade >> LOG || die tput rc; tput ed fi @@ -40,7 +60,7 @@ fi dlgYN ". Install required packages" res if [ $res -eq 1 ]; then tput sc - sudo apt-get -y -qq install nodejs scons python-dev swig || { printf "\n\nInstall failed.\n"; exit 1; } + apt-get -y -qq install nodejs scons python-dev swig >> LOG || die if [ $? -eq 0 ]; then tput rc; tput ed printf "✓" @@ -79,12 +99,12 @@ tput setaf 8 printf '%s\n' " - Creating user 'lux-neo'..." tput sgr0 username="lux-neo" -sudo egrep "^$username" /etc/passwd >/dev/null +egrep "^$username" /etc/passwd >/dev/null if [ $? -eq 0 ]; then echo "User already exists, continuing..." else #pass=$(perl -e 'print crypt($ARGV[0], "password")' $password) - sudo useradd -m $username || { printf "\n\nInstall failed.\n"; exit 1; } + useradd -m $username >> LOG || die fi # First we make our directories @@ -92,39 +112,35 @@ tput setaf 8 printf '%s\n' " - Making app-dir (/bin/luxcena-neo)..." tput sgr0 userDir=$(eval echo "~$username") -sudo mkdir -p "$userDir/install" || { printf "\n\nInstall failed.\n"; exit 1; } -sudo chown $username:$username "$userDir/install" -sudo mkdir -p "$userDir/install/src" || { printf "\n\nInstall failed.\n"; exit 1; } -sudo chown $username:$username "$userDir/install/src" -sudo mkdir -p "$userDir/install/userdata" || { printf "\n\nInstall failed.\n"; exit 1; } -sudo chown $username:$username "$userDir/install/userdata" +mkdir -p "$userDir/install" >> LOG || die +chown $username:$username "$userDir/install" >> LOG || die +mkdir -p "$userDir/install/src" >> LOG || die +chown $username:$username "$userDir/install/src" >> LOG || die +mkdir -p "$userDir/install/userdata" >> LOG || die +chown $username:$username "$userDir/install/userdata" >> LOG || die # Third we copy the source into the correct swap-folder tput setaf 8 printf '%s\n' " - Copying sourceCode to app-dir..." tput sgr0 -sudo cp -r . "$userDir/install/src" || { printf "\n\nInstall failed.\n"; exit 1; } -sudo chown -R $username:$username "$userDir/install/src" +cp -r . "$userDir/install/src" >> LOG || die +chown -R $username:$username "$userDir/install/src" >> LOG || die # fourth we run npm i tput setaf 8 printf '%s\n' " - Running npm i..." tput sgr0 tput sc -export NODE_ENV=production || { printf "\n\nInstall failed.\n"; exit 1; } -sudo runuser -l $username -c 'npm --prefix ~/install/src install ~/install/src --only=production' # This is probably a bit overkill to have --only=... but better safe than sorry? -if [ $? -ne 0 ]; then - printf "\n\nInstall failed.\n" - exit 1 -fi +export NODE_ENV=production >> LOG || die +runuser -l $username -c 'npm --prefix ~/install/src install ~/install/src --only=production' >> LOG || die # This is probably a bit overkill to have --only=... but better safe than sorry? tput rc; tput ed # Fifth we add the service files tput setaf 8 printf '%s\n' " - Adding service-file to systemd..." tput sgr0 -sudo cp bin/luxcena-neo.service /etc/systemd/system/luxcena-neo.service -sudo systemctl daemon-reload +cp bin/luxcena-neo.service /etc/systemd/system/luxcena-neo.service >> LOG || die +systemctl daemon-reload >> LOG || die # Installation is done! printf '\n\e[5m%s\e[0m\n' "🎉Luxcena-Neo is now installed🎉" -- cgit v1.2.3 From 3dd9774e5d76447465b10023af42c01286093424 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 18 Oct 2018 21:03:48 +0200 Subject: :construction: Redirect ALL output to the LOGFILE and not 'LOG' --- bin/install.sh | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) (limited to 'bin') diff --git a/bin/install.sh b/bin/install.sh index 62077a7..e9c79cd 100755 --- a/bin/install.sh +++ b/bin/install.sh @@ -7,7 +7,7 @@ printf '\e[93m%s\e[0m\n\n' "---------------------" LOG="/tmp/luxcena-neo.install.log" touch $LOG -echo "Starting Luxcena-neo installer..." >> LOG +echo "Starting Luxcena-neo installer..." &>> $LOG if [ "$EUID" -ne 0 ]; then echo "You need to run this script as root." @@ -51,8 +51,8 @@ function dlgYN() { dlgYN ". Update your system" res if [ $res -eq 1 ]; then tput sc - apt-get -y -qq update >> LOG || die - apt-get -y -qq upgrade >> LOG || die + apt-get -y -qq update &>> $LOG || die + apt-get -y -qq upgrade &>> $LOG || die tput rc; tput ed fi @@ -60,7 +60,7 @@ fi dlgYN ". Install required packages" res if [ $res -eq 1 ]; then tput sc - apt-get -y -qq install nodejs scons python-dev swig >> LOG || die + apt-get -y -qq install nodejs scons python-dev swig &>> $LOG || die if [ $? -eq 0 ]; then tput rc; tput ed printf "✓" @@ -104,7 +104,7 @@ if [ $? -eq 0 ]; then echo "User already exists, continuing..." else #pass=$(perl -e 'print crypt($ARGV[0], "password")' $password) - useradd -m $username >> LOG || die + useradd -m $username &>> $LOG || die fi # First we make our directories @@ -112,35 +112,35 @@ tput setaf 8 printf '%s\n' " - Making app-dir (/bin/luxcena-neo)..." tput sgr0 userDir=$(eval echo "~$username") -mkdir -p "$userDir/install" >> LOG || die -chown $username:$username "$userDir/install" >> LOG || die -mkdir -p "$userDir/install/src" >> LOG || die -chown $username:$username "$userDir/install/src" >> LOG || die -mkdir -p "$userDir/install/userdata" >> LOG || die -chown $username:$username "$userDir/install/userdata" >> LOG || die +mkdir -p "$userDir/install" &>> $LOG || die +chown $username:$username "$userDir/install" &>> $LOG || die +mkdir -p "$userDir/install/src" &>> $LOG || die +chown $username:$username "$userDir/install/src" &>> $LOG || die +mkdir -p "$userDir/install/userdata" &>> $LOG || die +chown $username:$username "$userDir/install/userdata" &>> $LOG || die # Third we copy the source into the correct swap-folder tput setaf 8 printf '%s\n' " - Copying sourceCode to app-dir..." tput sgr0 -cp -r . "$userDir/install/src" >> LOG || die -chown -R $username:$username "$userDir/install/src" >> LOG || die +cp -r . "$userDir/install/src" &>> $LOG || die +chown -R $username:$username "$userDir/install/src" &>> $LOG || die # fourth we run npm i tput setaf 8 printf '%s\n' " - Running npm i..." tput sgr0 tput sc -export NODE_ENV=production >> LOG || die -runuser -l $username -c 'npm --prefix ~/install/src install ~/install/src --only=production' >> LOG || die # This is probably a bit overkill to have --only=... but better safe than sorry? +export NODE_ENV=production &>> $LOG || die +runuser -l $username -c 'npm --prefix ~/install/src install ~/install/src --only=production' &>> $LOG || die # This is probably a bit overkill to have --only=... but better safe than sorry? tput rc; tput ed # Fifth we add the service files tput setaf 8 printf '%s\n' " - Adding service-file to systemd..." tput sgr0 -cp bin/luxcena-neo.service /etc/systemd/system/luxcena-neo.service >> LOG || die -systemctl daemon-reload >> LOG || die +cp bin/luxcena-neo.service /etc/systemd/system/luxcena-neo.service &>> $LOG || die +systemctl daemon-reload &>> $LOG || die # Installation is done! printf '\n\e[5m%s\e[0m\n' "🎉Luxcena-Neo is now installed🎉" -- cgit v1.2.3 From abb69ee9cd4139c498ef794480e21446ce8b60bf Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 18 Oct 2018 21:04:36 +0200 Subject: :construction: Overwrite old logfile --- bin/install.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'bin') diff --git a/bin/install.sh b/bin/install.sh index e9c79cd..74b2763 100755 --- a/bin/install.sh +++ b/bin/install.sh @@ -6,8 +6,7 @@ tput sgr0 printf '\e[93m%s\e[0m\n\n' "---------------------" LOG="/tmp/luxcena-neo.install.log" -touch $LOG -echo "Starting Luxcena-neo installer..." &>> $LOG +echo "Starting Luxcena-neo installer..." > $LOG if [ "$EUID" -ne 0 ]; then echo "You need to run this script as root." -- cgit v1.2.3 From 7ef7e9efc4d58cc1ed9a91b96bfc63a78bd0473d Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 18 Oct 2018 21:06:20 +0200 Subject: :construction: Make all output appear in logfile --- bin/install.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'bin') diff --git a/bin/install.sh b/bin/install.sh index 74b2763..2ccb7e0 100755 --- a/bin/install.sh +++ b/bin/install.sh @@ -50,8 +50,8 @@ function dlgYN() { dlgYN ". Update your system" res if [ $res -eq 1 ]; then tput sc - apt-get -y -qq update &>> $LOG || die - apt-get -y -qq upgrade &>> $LOG || die + apt-get -y update &>> $LOG || die + apt-get -y upgrade &>> $LOG || die tput rc; tput ed fi @@ -59,7 +59,7 @@ fi dlgYN ". Install required packages" res if [ $res -eq 1 ]; then tput sc - apt-get -y -qq install nodejs scons python-dev swig &>> $LOG || die + apt-get -y install nodejs scons python-dev swig &>> $LOG || die if [ $? -eq 0 ]; then tput rc; tput ed printf "✓" -- cgit v1.2.3 From 8df5b03aa53d9e5db21b697ee60e8e53c95218a1 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 18 Oct 2018 21:13:03 +0200 Subject: :construction: Change paths to the 'lux-neo' user --- bin/luxcena-neo.service | 4 ++-- bin/luxcena-neo.sh | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) (limited to 'bin') diff --git a/bin/luxcena-neo.service b/bin/luxcena-neo.service index 62111a6..c20a844 100644 --- a/bin/luxcena-neo.service +++ b/bin/luxcena-neo.service @@ -2,7 +2,7 @@ Description=Luxcena Neo [Service] -ExecStart=/home/pi/luxcena-neo-install/src/bin/luxcena-neo.sh +ExecStart=/home/lux-neo/install/src/bin/luxcena-neo.sh Restart=always RestartSec=10 User=nobody @@ -10,7 +10,7 @@ User=nobody Group=nogroup Environment=PATH=/usr/bin:/usr/local/bin Environment=NODE_ENV=production -WorkingDirectory=/home/pi/luxcena-neo-install/src/ +WorkingDirectory=/home/lux-neo/install/src/ [Install] WantedBy=multi-user.target diff --git a/bin/luxcena-neo.sh b/bin/luxcena-neo.sh index 9bcf125..8455bf3 100755 --- a/bin/luxcena-neo.sh +++ b/bin/luxcena-neo.sh @@ -5,4 +5,5 @@ # the server needs root as well. #runuser -l pi -c "export NODE_ENV=production; node ~/luxcena-neo-install/src/app.js" -export NODE_ENV=production; node /home/pi/luxcena-neo-install/src/app.js +export NODE_ENV=production +node /home/lux-neo/install/src/app.js -- cgit v1.2.3 From 6ac160fb5c5027b86bf386a602b3d838605325a5 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 18 Oct 2018 21:42:06 +0200 Subject: :bug: Cannot start as service --- bin/luxcena-neo.service | 2 -- 1 file changed, 2 deletions(-) (limited to 'bin') diff --git a/bin/luxcena-neo.service b/bin/luxcena-neo.service index c20a844..8448671 100644 --- a/bin/luxcena-neo.service +++ b/bin/luxcena-neo.service @@ -5,9 +5,7 @@ Description=Luxcena Neo ExecStart=/home/lux-neo/install/src/bin/luxcena-neo.sh Restart=always RestartSec=10 -User=nobody -Group=nogroup Environment=PATH=/usr/bin:/usr/local/bin Environment=NODE_ENV=production WorkingDirectory=/home/lux-neo/install/src/ -- cgit v1.2.3 From 776f400f021ca2be81ac565b718e89afc69f2609 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Fri, 19 Oct 2018 07:51:05 +0200 Subject: :construction: Output service stdout to logfile --- bin/luxcena-neo.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bin') diff --git a/bin/luxcena-neo.sh b/bin/luxcena-neo.sh index 8455bf3..6a0be31 100755 --- a/bin/luxcena-neo.sh +++ b/bin/luxcena-neo.sh @@ -6,4 +6,4 @@ #runuser -l pi -c "export NODE_ENV=production; node ~/luxcena-neo-install/src/app.js" export NODE_ENV=production -node /home/lux-neo/install/src/app.js +node /home/lux-neo/install/src/app.js >> /home/lux-neo/install/logs/service.log -- cgit v1.2.3 From 244c692acada2604876475cfb4deea6da2f1382a Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Sun, 25 Nov 2018 18:22:21 +0100 Subject: :construction: Installer now installs cli --- bin/install.sh | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'bin') diff --git a/bin/install.sh b/bin/install.sh index 2ccb7e0..005f073 100755 --- a/bin/install.sh +++ b/bin/install.sh @@ -134,6 +134,14 @@ export NODE_ENV=production &>> $LOG || die runuser -l $username -c 'npm --prefix ~/install/src install ~/install/src --only=production' &>> $LOG || die # This is probably a bit overkill to have --only=... but better safe than sorry? tput rc; tput ed +# fourth we copy the cli to our bin folder +tput setaf 8 +printf '%s\n' " - Adding cli-script..." +tput sgr0 +cp bin/luxcena-neo-cli.sh /usr/bin/luxcena-neo-cli.sh &>> $LOG || die +ln -sf /usr/bin/luxcena-neo-cli.sh /usr/bin/luxcena-neo &>> $LOG || die +tput rc; tput ed + # Fifth we add the service files tput setaf 8 printf '%s\n' " - Adding service-file to systemd..." @@ -143,3 +151,4 @@ systemctl daemon-reload &>> $LOG || die # Installation is done! printf '\n\e[5m%s\e[0m\n' "🎉Luxcena-Neo is now installed🎉" +printf 'You can now delete this folder' -- cgit v1.2.3 From c24b7503bc4f05dd700eca5bcc593e04d3c89720 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Sun, 25 Nov 2018 18:22:43 +0100 Subject: :hammer: Tidy up script --- bin/luxcena-neo-cli.sh | 105 +++++++++++++++++++++++++++++++------------------ 1 file changed, 66 insertions(+), 39 deletions(-) (limited to 'bin') diff --git a/bin/luxcena-neo-cli.sh b/bin/luxcena-neo-cli.sh index 034d713..761459e 100755 --- a/bin/luxcena-neo-cli.sh +++ b/bin/luxcena-neo-cli.sh @@ -5,6 +5,38 @@ usage() { exit 1 } +function die() { + tput setaf 1 + printf "\n\nInstall failed.\n" + printf "Check the logfile at '/tmp/lucxena-neo.install.log'.\n" + printf "Use this command to see the last 30 lines of the file;\n" + printf " tail -n 30 /tmp/luxcena-neo.install.log" + tput sgr0 + exit 1 +} + +function dlgYN() { + tput sc + tput setaf 4 + printf "$1 (y/n)? " + while : + do + read -n 1 -p "" YNQuestionAnswer + if [[ $YNQuestionAnswer == "y" ]]; then + tput rc; tput el + printf ". $1?: \e[0;32mYes\e[0m\n" + tput sc + eval $2=1 # Set parameter 2 of input to the return value + break + elif [[ $YNQuestionAnswer == "n" ]]; then + tput rc; tput el + printf ". $1?: \e[0;31mNo\e[0m\n" + eval $2=0 # Set parameter 2 of input to the return value + break + fi + done +} + while getopts ":a:" o; do case "${o}" in a ) @@ -25,14 +57,23 @@ if [ "$action" == "update" ]; then tput sgr0 printf '\e[93m%s\e[0m\n\n' "-------------------" - sudo systemctl stop lxucena-neo + if [ "$EUID" -ne 0 ]; then + echo "You need to run this script as root." + echo "Try running with 'sudo ./bin/install.sh'" + exit 1 + fi + + systemctl stop lxucena-neo oldDir=$PWD - cd ~/luxcena-neo-install - git pull - export NODE_ENV=production - npm i --only=production + cd /home/lux-neo/luxcena-neo-install + runuser -l 'lux-neo' -c 'git pull' + runuser -l 'lux-neo' -c 'export NODE_ENV=production' + runuser -l 'lux-neo' -c 'npm i --only=production' cd $oldDir - sudo systemctl start luxcena-neo + printf "Update complete, run these commands to finish it completly:\n" + printf "sudo /home/lux-neo/luxcena-neo-install/bin/post-update.sh\n" + printf "sudo systemctl luxcena-neo start\n" + systemctl start luxcena-neo elif [ "$action" == "uninstall" ]; then tput setab 1 @@ -42,43 +83,29 @@ elif [ "$action" == "uninstall" ]; then tput setaf 8 printf "By uninstalling Luxcena-Neo you will loose all you data, including your scripts.\n\n" - tput sc - tput setaf 4 - printf ". Are you sure you want to uninstall (y/n)? " - while : - do - read -n 1 -p "" YNQuestionAnswer - if [[ $YNQuestionAnswer == "y" ]]; then - tput rc; tput el - printf ". Are you sure you want to uninstall? \e[0;32mYes\e[0m\n" - tput sc - sudo systemctl stop luxcena-neo || { printf "\n\nUninstall failed.\n"; exit 1; } - rm -rf ~/luxcena-neo-install || { printf "\n\nUninstall failed.\n"; exit 1; } - sudo rm /etc/systemd/system/luxcena-neo.service || { printf "\n\nUninstall failed.\n"; exit 1; } - tput rc; tput ed + dlgYN "Are you sure you want to uninstall?" res + if [ $res -eq 1 ]; then + systemctl stop luxcena-neo + deluser lux-neo + rm -rf /home/lux-neo + rm /etc/systemd/system/luxcena-neo.service - tput setaf 2 - printf "\nEverything should now be gone. To remove the last piece, enter this command:\n" - tput sgr0 - tput smso - printf "sudo rm /bin/luxcena-neo\n\n" - tput sgr0 - tput setaf 8 - printf "Well, some dependencies still exists. Those are:\n" - printf " - rpi_ws281x-library\n" - printf " - packages (nodejs scons python-dev swig)\n" - break - elif [[ $YNQuestionAnswer == "n" ]]; then - tput rc; tput el - printf ". Are you sure you want to uninstall? \e[0;31mNo\e[0m\n" - break - fi - done + tput setaf 2 + printf "\nEverything should now be gone. To remove the last piece, enter this command:\n" + tput sgr0 + tput smso + printf "sudo rm /bin/luxcena-neo\n\n" + tput sgr0 + tput setaf 8 + printf "Well, some dependencies still exists. Those are:\n" + printf " - rpi_ws281x-library\n" + printf " - packages (nodejs scons python-dev swig)\n" + fi elif [ "$action" == "start" ]; then - sudo systemctl start luxcena-neo + systemctl start luxcena-neo elif [ "$action" == "stop" ]; then - sudo systemctl stop luxcena-neo + systemctl stop luxcena-neo else usage fi -- cgit v1.2.3 From f7c8a53a96bb537eb92fb1670a04b47afefed52c Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Sun, 25 Nov 2018 18:22:57 +0100 Subject: :sparkles: Make post-install script --- bin/post-update.sh | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 bin/post-update.sh (limited to 'bin') diff --git a/bin/post-update.sh b/bin/post-update.sh new file mode 100644 index 0000000..e0e8bc1 --- /dev/null +++ b/bin/post-update.sh @@ -0,0 +1,5 @@ + +cd /home/lux-neo/luxcena-neo-install +cp bin/luxcena-neo-cli.sh /usr/bin/luxcena-neo-cli.sh + +echo "Post-update done..." -- cgit v1.2.3 From 101745c6a4a2c6a186be48182d48814177840c65 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 29 Nov 2018 23:14:58 +0100 Subject: :construction: Chenged things, and written some docs --- app.js | 13 +- bin/install.sh | 20 +- bin/luxcena-neo-cli.sh | 6 +- bin/post-update.sh | 1 - docs/Contributing/Modules/CompileAndRun.md | 58 ++ docs/README.md | 2 + docs/SUMMARY.md | 10 + docs/Usage/CLI.md | 26 + docs/Usage/Configuration.md | 78 +++ docs/Usage/Install.md | 32 + docs/Usage/README.md | 11 + docs/_book/Contributing/Modules/CompileAndRun.html | 413 +++++++++++++ docs/_book/Usage/CLI.html | 405 ++++++++++++ docs/_book/Usage/Configuration.html | 441 +++++++++++++ docs/_book/Usage/Install.html | 417 +++++++++++++ docs/_book/Usage/index.html | 397 ++++++++++++ .../gitbook/fonts/fontawesome/FontAwesome.otf | Bin 0 -> 124988 bytes .../fonts/fontawesome/fontawesome-webfont.eot | Bin 0 -> 76518 bytes .../fonts/fontawesome/fontawesome-webfont.svg | 685 +++++++++++++++++++++ .../fonts/fontawesome/fontawesome-webfont.ttf | Bin 0 -> 152796 bytes .../fonts/fontawesome/fontawesome-webfont.woff | Bin 0 -> 90412 bytes .../fonts/fontawesome/fontawesome-webfont.woff2 | Bin 0 -> 71896 bytes docs/_book/gitbook/gitbook-plugin-api/api.css | 106 ++++ docs/_book/gitbook/gitbook-plugin-api/api.js | 7 + docs/_book/gitbook/gitbook-plugin-code/plugin.css | 37 ++ docs/_book/gitbook/gitbook-plugin-code/plugin.js | 91 +++ .../gitbook/gitbook-plugin-comment/plugin.css | 143 +++++ .../_book/gitbook/gitbook-plugin-comment/plugin.js | 47 ++ .../gitbook/gitbook-plugin-emphasize/plugin.css | 14 + .../gitbook-plugin-fontsettings/fontsettings.js | 240 ++++++++ .../gitbook-plugin-fontsettings/website.css | 291 +++++++++ docs/_book/gitbook/gitbook-plugin-github/plugin.js | 14 + .../gitbook/gitbook-plugin-highlight/ebook.css | 135 ++++ .../gitbook/gitbook-plugin-highlight/website.css | 434 +++++++++++++ .../gitbook/gitbook-plugin-hints/plugin-hints.css | 9 + .../gitbook/gitbook-plugin-livereload/plugin.js | 11 + docs/_book/gitbook/gitbook-plugin-lunr/lunr.min.js | 7 + .../gitbook/gitbook-plugin-lunr/search-lunr.js | 59 ++ .../service-worker-registration.js | 62 ++ .../gitbook-plugin-pretty-term/terminal.css | 31 + .../gitbook/gitbook-plugin-pretty-term/terminal.js | 33 + .../gitbook/gitbook-plugin-search/lunr.min.js | 7 + .../gitbook/gitbook-plugin-search/search-engine.js | 50 ++ .../_book/gitbook/gitbook-plugin-search/search.css | 35 ++ docs/_book/gitbook/gitbook-plugin-search/search.js | 213 +++++++ .../gitbook/gitbook-plugin-sharing/buttons.js | 90 +++ docs/_book/gitbook/gitbook.js | 4 + .../images/apple-touch-icon-precomposed-152.png | Bin 0 -> 4817 bytes docs/_book/gitbook/images/favicon.ico | Bin 0 -> 4286 bytes docs/_book/gitbook/style.css | 9 + docs/_book/gitbook/theme.js | 4 + docs/_book/index.html | 385 ++++++++++++ docs/_book/search_index.json | 1 + docs/_book/service-worker.js | 268 ++++++++ docs/book.json | 10 + .../pythonSupportFiles/LuxcenaNeo/Strip.py | 25 +- 56 files changed, 5865 insertions(+), 22 deletions(-) create mode 100644 docs/Contributing/Modules/CompileAndRun.md create mode 100644 docs/README.md create mode 100644 docs/SUMMARY.md create mode 100644 docs/Usage/CLI.md create mode 100644 docs/Usage/Configuration.md create mode 100644 docs/Usage/Install.md create mode 100644 docs/Usage/README.md create mode 100644 docs/_book/Contributing/Modules/CompileAndRun.html create mode 100644 docs/_book/Usage/CLI.html create mode 100644 docs/_book/Usage/Configuration.html create mode 100644 docs/_book/Usage/Install.html create mode 100644 docs/_book/Usage/index.html create mode 100644 docs/_book/gitbook/fonts/fontawesome/FontAwesome.otf create mode 100644 docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.eot create mode 100644 docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.svg create mode 100644 docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.ttf create mode 100644 docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff create mode 100644 docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff2 create mode 100644 docs/_book/gitbook/gitbook-plugin-api/api.css create mode 100644 docs/_book/gitbook/gitbook-plugin-api/api.js create mode 100644 docs/_book/gitbook/gitbook-plugin-code/plugin.css create mode 100644 docs/_book/gitbook/gitbook-plugin-code/plugin.js create mode 100644 docs/_book/gitbook/gitbook-plugin-comment/plugin.css create mode 100644 docs/_book/gitbook/gitbook-plugin-comment/plugin.js create mode 100644 docs/_book/gitbook/gitbook-plugin-emphasize/plugin.css create mode 100644 docs/_book/gitbook/gitbook-plugin-fontsettings/fontsettings.js create mode 100644 docs/_book/gitbook/gitbook-plugin-fontsettings/website.css create mode 100644 docs/_book/gitbook/gitbook-plugin-github/plugin.js create mode 100644 docs/_book/gitbook/gitbook-plugin-highlight/ebook.css create mode 100644 docs/_book/gitbook/gitbook-plugin-highlight/website.css create mode 100644 docs/_book/gitbook/gitbook-plugin-hints/plugin-hints.css create mode 100644 docs/_book/gitbook/gitbook-plugin-livereload/plugin.js create mode 100644 docs/_book/gitbook/gitbook-plugin-lunr/lunr.min.js create mode 100644 docs/_book/gitbook/gitbook-plugin-lunr/search-lunr.js create mode 100644 docs/_book/gitbook/gitbook-plugin-offline/service-worker-registration.js create mode 100644 docs/_book/gitbook/gitbook-plugin-pretty-term/terminal.css create mode 100644 docs/_book/gitbook/gitbook-plugin-pretty-term/terminal.js create mode 100644 docs/_book/gitbook/gitbook-plugin-search/lunr.min.js create mode 100644 docs/_book/gitbook/gitbook-plugin-search/search-engine.js create mode 100644 docs/_book/gitbook/gitbook-plugin-search/search.css create mode 100644 docs/_book/gitbook/gitbook-plugin-search/search.js create mode 100644 docs/_book/gitbook/gitbook-plugin-sharing/buttons.js create mode 100644 docs/_book/gitbook/gitbook.js create mode 100644 docs/_book/gitbook/images/apple-touch-icon-precomposed-152.png create mode 100644 docs/_book/gitbook/images/favicon.ico create mode 100644 docs/_book/gitbook/style.css create mode 100644 docs/_book/gitbook/theme.js create mode 100644 docs/_book/index.html create mode 100644 docs/_book/search_index.json create mode 100644 docs/_book/service-worker.js create mode 100644 docs/book.json (limited to 'bin') diff --git a/app.js b/app.js index 5cdfcbd..264a0c1 100644 --- a/app.js +++ b/app.js @@ -7,7 +7,7 @@ let io = require("socket.io").listen(server); // Firstly we set up all globals, check that the usrData dir exists, if not, we run the setup let srcDir = __dirname; -let installDir = "/home/lux-neo/install/" +let installDir = "/home/lux-neo/" if (process.argv.length >= 3) { installDir = process.argv[2]; } let dataDir = installDir + "/userdata/"; if (!fse.existsSync(dataDir)) { throw new Error("APPDIR not found! Exiting..."); } @@ -55,21 +55,22 @@ fse.ensureDirSync(dataDir + "/usrCode/"); fse.ensureDirSync(dataDir + "/remoteCode/"); // Generate config-files if (!fse.existsSync(dataDir + "/config/versionChecker.json")) { - fse.writeJsonSync(dataDir + "/config/versionChecker.json", { + fse.writeFileSync(dataDir + "/config/versionChecker.json", JSON.stringify({ "branch": "dev", "checkInterval": 5 - }) + }, null, 4)); } if (!fse.existsSync(dataDir + "/config/strip.json")) { - fse.writeJsonSync(dataDir + "/config/strip.json", { - "segments": [9, 8, 8, 8, 8, 8, 4], + fse.writeFileSync(dataDir + "/config/strip.json", JSON.stringify({ + "segments": [], + "matrix": [], "segmentConfiguration": "snake", "led_pin": 18, "led_freq_hz": 800000, "led_dma": 10, "led_invert": false, "led_channel": 0 - }) + }, null, 4)); } diff --git a/bin/install.sh b/bin/install.sh index 005f073..cd4f07b 100755 --- a/bin/install.sh +++ b/bin/install.sh @@ -111,19 +111,19 @@ tput setaf 8 printf '%s\n' " - Making app-dir (/bin/luxcena-neo)..." tput sgr0 userDir=$(eval echo "~$username") -mkdir -p "$userDir/install" &>> $LOG || die -chown $username:$username "$userDir/install" &>> $LOG || die -mkdir -p "$userDir/install/src" &>> $LOG || die -chown $username:$username "$userDir/install/src" &>> $LOG || die -mkdir -p "$userDir/install/userdata" &>> $LOG || die -chown $username:$username "$userDir/install/userdata" &>> $LOG || die +#mkdir -p "$userDir/install" &>> $LOG || die +#chown $username:$username "$userDir/install" &>> $LOG || die +mkdir -p "$userDir/src" &>> $LOG || die +chown $username:$username "$userDir/src" &>> $LOG || die +mkdir -p "$userDir/userdata" &>> $LOG || die +chown $username:$username "$userDir/userdata" &>> $LOG || die # Third we copy the source into the correct swap-folder tput setaf 8 printf '%s\n' " - Copying sourceCode to app-dir..." tput sgr0 -cp -r . "$userDir/install/src" &>> $LOG || die -chown -R $username:$username "$userDir/install/src" &>> $LOG || die +cp -r . "$userDir/src" &>> $LOG || die +chown -R $username:$username "$userDir/src" &>> $LOG || die # fourth we run npm i tput setaf 8 @@ -131,7 +131,7 @@ printf '%s\n' " - Running npm i..." tput sgr0 tput sc export NODE_ENV=production &>> $LOG || die -runuser -l $username -c 'npm --prefix ~/install/src install ~/install/src --only=production' &>> $LOG || die # This is probably a bit overkill to have --only=... but better safe than sorry? +runuser -l $username -c 'npm --prefix ~/src install ~/src --only=production' &>> $LOG || die # This is probably a bit overkill to have --only=... but better safe than sorry? tput rc; tput ed # fourth we copy the cli to our bin folder @@ -139,7 +139,7 @@ tput setaf 8 printf '%s\n' " - Adding cli-script..." tput sgr0 cp bin/luxcena-neo-cli.sh /usr/bin/luxcena-neo-cli.sh &>> $LOG || die -ln -sf /usr/bin/luxcena-neo-cli.sh /usr/bin/luxcena-neo &>> $LOG || die +ln -sf /usr/bin/luxcena-neo-cli.sh /usr/bin/lux-neo &>> $LOG || die tput rc; tput ed # Fifth we add the service files diff --git a/bin/luxcena-neo-cli.sh b/bin/luxcena-neo-cli.sh index 761459e..5d960c0 100755 --- a/bin/luxcena-neo-cli.sh +++ b/bin/luxcena-neo-cli.sh @@ -71,7 +71,7 @@ if [ "$action" == "update" ]; then runuser -l 'lux-neo' -c 'npm i --only=production' cd $oldDir printf "Update complete, run these commands to finish it completly:\n" - printf "sudo /home/lux-neo/luxcena-neo-install/bin/post-update.sh\n" + printf "sudo /home/lux-neo/install/src/bin/post-update.sh\n" printf "sudo systemctl luxcena-neo start\n" systemctl start luxcena-neo @@ -100,8 +100,12 @@ elif [ "$action" == "uninstall" ]; then printf "Well, some dependencies still exists. Those are:\n" printf " - rpi_ws281x-library\n" printf " - packages (nodejs scons python-dev swig)\n" + tput sgr0 fi +elif [ "$action" == "conf" ]; then + nano /home/lux-neo/luxcena-neo-install/userdata/config/strip.json + elif [ "$action" == "start" ]; then systemctl start luxcena-neo elif [ "$action" == "stop" ]; then diff --git a/bin/post-update.sh b/bin/post-update.sh index e0e8bc1..59b1fe9 100644 --- a/bin/post-update.sh +++ b/bin/post-update.sh @@ -1,5 +1,4 @@ -cd /home/lux-neo/luxcena-neo-install cp bin/luxcena-neo-cli.sh /usr/bin/luxcena-neo-cli.sh echo "Post-update done..." diff --git a/docs/Contributing/Modules/CompileAndRun.md b/docs/Contributing/Modules/CompileAndRun.md new file mode 100644 index 0000000..535ed5f --- /dev/null +++ b/docs/Contributing/Modules/CompileAndRun.md @@ -0,0 +1,58 @@ +## Index +--- +## Locals + +### var `pythonSupportFiles` + +Points to the files for our python support code. They should be in a subdir of the module itself. + +## Exported + +### class `Python` + +This is exported as Python, just so that we could add other languages later. Used to build and run python-scripts with our support-code. + +### method `Python.constructor` + +Takes one parameter, which is the full path to the folder where the script is located. + +When initializing the class, this will be called. Can be done like this: + +```javascript +new compileRun.Python(global.DirSwap + "/usrData/usrCode/example"); +``` + +### method `Python.compile` + +This deletes old build-folder, and makes a new one. It then moves all required files into the build-folder, making us ready for running the script. + +### method `Python.run` + +Spawns a new process, starting entry.py in our build-folder. It also attaches event-listners on our class-object. All of them is in the example below: + +```javascript +let sc = new compileRun.Python(global.DirSwap + "/usrData/usrCode/example"); +​ +// When data is printed from the python-script +sc.on("stdout::data", (_stdout) => { }); +// Last write when script closes, any exiting messages +sc.on("stdout::end", (_stdout) => { }); +// When something is printed from the python-script to the error-out. Usually when a `throw` is called +sc.on("stderr::out", (_stderr) => { }); +// Last words when process is dying from an error :`( +sc.on("stderr::end", (_stderr) => { }); +// When script exits, _code is the exit-code +sc.on("close", (_code) => { }); +``` + +## Python + +This is the support-files for user-made scripts. + +## Entry.py + +The entry-point when running a script. A file called script.py, containing the user-script, should be placed next to this file. Starting it should be done like this (Where app-root is where our app.js is located): + +``` +python entry.py +``` diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..3d07efe --- /dev/null +++ b/docs/README.md @@ -0,0 +1,2 @@ +# Introduction + diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md new file mode 100644 index 0000000..84228c7 --- /dev/null +++ b/docs/SUMMARY.md @@ -0,0 +1,10 @@ +# Summary + +* [Introduction](README.md) +* [Usage](Usage/README.md) + * [Install](Usage/Install.md) + * [Configuration](Usage/Configuration.md) + * [CLI](Usage/CLI.md) +* Contributing + * Modules + * [CompileAndRun](Contributing/Modules/CompileAndRun.md) diff --git a/docs/Usage/CLI.md b/docs/Usage/CLI.md new file mode 100644 index 0000000..f689a3d --- /dev/null +++ b/docs/Usage/CLI.md @@ -0,0 +1,26 @@ +# Command line interface +--- + +This gets installed in the `/usr/bin` directory, and can be called by: +```bash +$ luxcena-neo.sh +``` +or is alias +```bash +$ lux-neo +``` +{% hint style='danger' %} +This CLI assumes root access, so please run it with `sudo` +{% endhint %} + +## Options +#### `sudo lux-neo uninstall` +Uninstall the whole thing. You will have to remove this script yourself. +#### `sudo lux-neo update` +Update to the newest version on the current branch. +#### `sudo lux-neo conf` +Open the strip-config in `nano`. +#### `sudo lux-neo start` +Start the server. +#### `sudo lux-neo stop` +Stop the server. diff --git a/docs/Usage/Configuration.md b/docs/Usage/Configuration.md new file mode 100644 index 0000000..c9750d0 --- /dev/null +++ b/docs/Usage/Configuration.md @@ -0,0 +1,78 @@ +# Configuration + +How to setup luxcena-neo to work with your setup + +--- + +```bash +$ sudo lux-neo conf +``` + +When running the command above, a config file should appear in the editor 'nano'. +```json +{ + "led_count": 53, + "segments": [], + "matrix": [], + "segmentConfiguration": "snake", + "led_pin": 18, + "led_freq_hz": 800000, + "led_dma": 10, + "led_invert": false, + "led_channel": 0 +} +``` +{% hint style='tip' %} +If you rather want to use vim or another editor, the file is at `/home/lux-neo/userdata/config/strip.json` +{% endhint %} + +## led_count + +This is the number of LED's you want to control. + +## segments + +This is a simple list, here you should add the lenghts of all your segments. Please enter the "real" length, and don't start counting from 0. If you just want one segment, you should just have one element in the list, which is the number of led's you are controlling. + +When summing this list, it should check out with the "led-count"-option. + +## matrix + +This is a two dimensonal array, used to arrange the segments in a matrix of your likings. Here you enter the segment-number to represent them. In the example above, all the segments are in one line. If you want to have them in a square, it could look like this: + +```json +"segments": [10, 10, 10, 10, 10, 10, 10, 10, 10], +"matrix": [ + [0, 1, 2], + [3, 4, 5], + [6, 7, 8] +] +``` +{% hint style='danger' %} +If you don't have a reference to all the segments or something, the matrix setup will fail. And fall back to 'segmentsconfiguration' +{% endhint %} + +## segmentconfiguration + +If the matrix-option is empty or badly setup. The matrix will be set up using one of these defaults: + +``` +"snake": +"line": +"random": +``` + +## led_pin +If using the luxcena-shield, you shouldn't have to worry about this option. But set it to the GPIO-port connected to your pixel's din-port. + +## led_dma +{% hint style='danger' %} +If using a newer RPi (3 or newer), leave this as 10! Or your file-system might crash. +{% endhint %} +This is the dma-channel used to generate the data-stream. If you for some reason need channel 10 for something else, you can change it. But i strongly recommend leaving it to 10! + +## led_invert +This should not be touched, unless you are using a inverting level converter. + +## led_channel +Leave this as default unless you know what you are doing. diff --git a/docs/Usage/Install.md b/docs/Usage/Install.md new file mode 100644 index 0000000..ced241a --- /dev/null +++ b/docs/Usage/Install.md @@ -0,0 +1,32 @@ +# Installation + +If you want to install luxcena-neo to use it, these are the instructions: + +--- + +## Requirements +* The luxcena-shield +* Access to the raspberry pi (SSH or direct) +* Root access (preferably through the `sudo` command) + +## Install +1. Start with logging into your Raspberry Pi +2. Run these commands +```bash +$ git clone https://github.com/JakobST1n/Luxcena-Neo +$ cd Luxcena-Neo +$ sudo ./bin/install.sh +``` +3. Follow the instructions on screen. You should answer yes to most of the questions. +4. The install-process might seem to hang, but there is just no output being sent to the console. If you want to see a bit more verbose output. Open another terminal session, and run this command: +```bash +$ tail -n 10 -f /tmp/luxcena-neo.install.log +``` +This is also where you will find possible reasons for a failed install. +4. Luxcena-Neo should now be installed. Start it with this command +```bash +$ luxcena-neo start +``` + +## Troubleshooting +We haven't encountered any troubles yet, but once we do, we will post fix'es here. diff --git a/docs/Usage/README.md b/docs/Usage/README.md new file mode 100644 index 0000000..ce62034 --- /dev/null +++ b/docs/Usage/README.md @@ -0,0 +1,11 @@ +# Usage + + +## [Install](/Usage/Install.md) +Want to install luxcena-neo? This is the guide! + +## [Configuration](/Usage/Configuration.md) +Just installed luxcena-neo, or you have changed your setup? This is the guide! + +## [CLI](/Usage/CLI.md) +Ready to start the thing? Or change something? diff --git a/docs/_book/Contributing/Modules/CompileAndRun.html b/docs/_book/Contributing/Modules/CompileAndRun.html new file mode 100644 index 0000000..b1c3f48 --- /dev/null +++ b/docs/_book/Contributing/Modules/CompileAndRun.html @@ -0,0 +1,413 @@ + + + + + + + CompileAndRun · Luxcena-Neo wiki + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+ +
+ + + + + + + + +
+
+ +
+
+ +
+ +

Index

+
+

Locals

+

var pythonSupportFiles

+

Points to the files for our python support code. They should be in a subdir of the module itself.

+

Exported

+

class Python

+

This is exported as Python, just so that we could add other languages later. Used to build and run python-scripts with our support-code.

+

method Python.constructor

+

Takes one parameter, which is the full path to the folder where the script is located.

+

When initializing the class, this will be called. Can be done like this:

+
new compileRun.Python(global.DirSwap + "/usrData/usrCode/example");
+
+

method Python.compile

+

This deletes old build-folder, and makes a new one. It then moves all required files into the build-folder, making us ready for running the script.

+

method Python.run

+

Spawns a new process, starting entry.py in our build-folder. It also attaches event-listners on our class-object. All of them is in the example below:

+
let sc = new compileRun.Python(global.DirSwap + "/usrData/usrCode/example");
+​
+// When data is printed from the python-script
+sc.on("stdout::data", (_stdout) => { });
+// Last write when script closes, any exiting messages
+sc.on("stdout::end", (_stdout) => { });
+// When something is printed from the python-script to the error-out. Usually when a `throw` is called
+sc.on("stderr::out", (_stderr) => { });
+// Last words when process is dying from an error :`(
+sc.on("stderr::end", (_stderr) => { });
+// When script exits, _code is the exit-code
+sc.on("close", (_code) => { });
+
+

Python

+

This is the support-files for user-made scripts.

+

Entry.py

+

The entry-point when running a script. A file called script.py, containing the user-script, should be placed next to this file. Starting it should be done like this (Where app-root is where our app.js is located):

+
python entry.py <pathToAppRoot>
+
+ +
+ +
+
+
+ +

results matching ""

+
    + +
    +
    + +

    No results matching ""

    + +
    +
    +
    + +
    +
    + +
    + + + + + + +
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_book/Usage/CLI.html b/docs/_book/Usage/CLI.html new file mode 100644 index 0000000..d56a2f6 --- /dev/null +++ b/docs/_book/Usage/CLI.html @@ -0,0 +1,405 @@ + + + + + + + CLI · Luxcena-Neo wiki + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + +
    + +
    + + + + + + + + +
    +
    + +
    +
    + +
    + +

    Command line interface

    +
    +

    This gets installed in the /usr/bin directory, and can be called by:

    +
    $ luxcena-neo.sh
    +
    +

    or is alias

    +
    $ lux-neo
    +
    +

    This CLI assumes root access, so please run it with sudo

    +

    +

    Options

    +

    sudo lux-neo uninstall

    +

    Uninstall the whole thing. You will have to remove this script yourself.

    +

    sudo lux-neo update

    +

    Update to the newest version on the current branch.

    +

    sudo lux-neo conf

    +

    Open the strip-config in nano.

    +

    sudo lux-neo start

    +

    Start the server.

    +

    sudo lux-neo stop

    +

    Stop the server.

    + + +
    + +
    +
    +
    + +

    results matching ""

    +
      + +
      +
      + +

      No results matching ""

      + +
      +
      +
      + +
      +
      + +
      + + + + + + + + + + +
      + + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_book/Usage/Configuration.html b/docs/_book/Usage/Configuration.html new file mode 100644 index 0000000..ec2a8cc --- /dev/null +++ b/docs/_book/Usage/Configuration.html @@ -0,0 +1,441 @@ + + + + + + + Configuration · Luxcena-Neo wiki + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + +
      + +
      + +
      + + + + + + + + +
      +
      + +
      +
      + +
      + +

      Configuration

      +

      How to setup luxcena-neo to work with your setup

      +
      +
      $ sudo lux-neo conf
      +
      +

      When running the command above, a config file should appear in the editor 'nano'.

      +
      {
      +    "led_count": 53,
      +    "segments": [],
      +    "matrix": [],
      +    "segmentConfiguration": "snake",
      +    "led_pin": 18,
      +    "led_freq_hz": 800000,
      +    "led_dma": 10,
      +    "led_invert": false,
      +    "led_channel": 0
      +}
      +
      +

      If you rather want to use vim or another editor, the file is at /home/lux-neo/userdata/config/strip.json

      +

      +

      led_count

      +

      This is the number of LED's you want to control.

      +

      segments

      +

      This is a simple list, here you should add the lenghts of all your segments. Please enter the "real" length, and don't start counting from 0. If you just want one segment, you should just have one element in the list, which is the number of led's you are controlling.

      +

      When summing this list, it should check out with the "led-count"-option.

      +

      matrix

      +

      This is a two dimensonal array, used to arrange the segments in a matrix of your likings. Here you enter the segment-number to represent them. In the example above, all the segments are in one line. If you want to have them in a square, it could look like this:

      +
      "segments": [10, 10, 10, 10, 10, 10, 10, 10, 10],
      +"matrix": [
      +    [0, 1, 2],
      +    [3, 4, 5],
      +    [6, 7, 8]
      +]
      +
      +

      If you don't have a reference to all the segments or something, the matrix setup will fail. And fall back to 'segmentsconfiguration'

      +

      +

      segmentconfiguration

      +

      If the matrix-option is empty or badly setup. The matrix will be set up using one of these defaults:

      +
      "snake":
      +"line":
      +"random":
      +

      led_pin

      +

      If using the luxcena-shield, you shouldn't have to worry about this option. But set it to the GPIO-port connected to your pixel's din-port.

      +

      led_dma

      +

      If using a newer RPi (3 or newer), leave this as 10! Or your file-system might crash.

      +
      +This is the dma-channel used to generate the data-stream. If you for some reason need channel 10 for something else, you can change it. But i strongly recommend leaving it to 10!

      +

      led_invert

      +

      This should not be touched, unless you are using a inverting level converter.

      +

      led_channel

      +

      Leave this as default unless you know what you are doing.

      + + +
      + +
      +
      +
      + +

      results matching ""

      +
        + +
        +
        + +

        No results matching ""

        + +
        +
        +
        + +
        +
        + +
        + + + + + + + + + + + + + + +
        + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_book/Usage/Install.html b/docs/_book/Usage/Install.html new file mode 100644 index 0000000..a3af5e1 --- /dev/null +++ b/docs/_book/Usage/Install.html @@ -0,0 +1,417 @@ + + + + + + + Install · Luxcena-Neo wiki + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        +
        + + + + + + + + +
        + +
        + +
        + + + + + + + + +
        +
        + +
        +
        + +
        + +

        Installation

        +

        If you want to install luxcena-neo to use it, these are the instructions:

        +
        +

        Requirements

        +
          +
        • The luxcena-shield
        • +
        • Access to the raspberry pi (SSH or direct)
        • +
        • Root access (preferably through the sudo command)
        • +
        +

        Install

        +
          +
        1. Start with logging into your Raspberry Pi
        2. +
        3. Run these commands
          $ git clone https://github.com/JakobST1n/Luxcena-Neo
          +$ cd Luxcena-Neo
          +$ sudo ./bin/install.sh
          +
          +
        4. +
        5. Follow the instructions on screen. You should answer yes to most of the questions.
        6. +
        7. The install-process might seem to hang, but there is just no output being sent to the console. If you want to see a bit more verbose output. Open another terminal session, and run this command:
          $ tail -n 10 -f /tmp/luxcena-neo.install.log
          +
          +This is also where you will find possible reasons for a failed install.
        8. +
        9. Luxcena-Neo should now be installed. Start it with this command
          $ luxcena-neo start
          +
          +
        10. +
        +

        Troubleshooting

        +

        We haven't encountered any troubles yet, but once we do, we will post fix'es here.

        + + +
        + +
        +
        +
        + +

        results matching ""

        +
          + +
          +
          + +

          No results matching ""

          + +
          +
          +
          + +
          +
          + +
          + + + + + + + + + + + + + + +
          + + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_book/Usage/index.html b/docs/_book/Usage/index.html new file mode 100644 index 0000000..a461209 --- /dev/null +++ b/docs/_book/Usage/index.html @@ -0,0 +1,397 @@ + + + + + + + Usage · Luxcena-Neo wiki + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          +
          + + + + + + + + +
          + +
          + +
          + + + + + + + + +
          +
          + +
          +
          + +
          + +

          Usage

          +

          Install

          +

          Want to install luxcena-neo? This is the guide!

          +

          Configuration

          +

          Just installed luxcena-neo, or you have changed your setup? This is the guide!

          +

          CLI

          +

          Ready to start the thing? Or change something?

          + + +
          + +
          +
          +
          + +

          results matching ""

          +
            + +
            +
            + +

            No results matching ""

            + +
            +
            +
            + +
            +
            + +
            + + + + + + + + + + + + + + +
            + + +
            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_book/gitbook/fonts/fontawesome/FontAwesome.otf b/docs/_book/gitbook/fonts/fontawesome/FontAwesome.otf new file mode 100644 index 0000000..d4de13e Binary files /dev/null and b/docs/_book/gitbook/fonts/fontawesome/FontAwesome.otf differ diff --git a/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.eot b/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.eot new file mode 100644 index 0000000..c7b00d2 Binary files /dev/null and b/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.eot differ diff --git a/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.svg b/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.svg new file mode 100644 index 0000000..8b66187 --- /dev/null +++ b/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.svg @@ -0,0 +1,685 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.ttf b/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.ttf new file mode 100644 index 0000000..f221e50 Binary files /dev/null and b/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.ttf differ diff --git a/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff b/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff new file mode 100644 index 0000000..6e7483c Binary files /dev/null and b/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff differ diff --git a/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff2 b/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff2 new file mode 100644 index 0000000..7eb74fd Binary files /dev/null and b/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff2 differ diff --git a/docs/_book/gitbook/gitbook-plugin-api/api.css b/docs/_book/gitbook/gitbook-plugin-api/api.css new file mode 100644 index 0000000..4bcd88e --- /dev/null +++ b/docs/_book/gitbook/gitbook-plugin-api/api.css @@ -0,0 +1,106 @@ +.markdown-section { + overflow: visible !important; +} + +.api-container { + margin: 0px 0px; + box-shadow: 0px 1px 3px rgba(0,0,0,0.25); + transition: margin 300ms, box-shadow 300ms; +} + +.api-container.expanded { + margin: 0px -16px; + box-shadow: 0px 6px 16px rgba(0,0,0,0.25); +} + +.api-container .api-header { + line-height: 26px; + padding: 10px; + border-bottom: 1px solid #EEEEEE; + cursor: pointer; + display: flex; + flex-direction: row; +} + +.api-container .api-header small { + background-color: #444444; + background-image: linear-gradient(45deg, rgba(0,0,0,0) 50%, rgba(0, 0, 0, 0.1) 50%); + color: #FFFFFF; + font-size: 9px !important; + margin-right: 8px; + padding: 0px 4px; + font-weight: bold; + display: block; + line-height: 28px; + height: 28px; + width: 46px; + text-align: center; +} + +.api-container .api-header small.get { + background-color: #226ca0; +} + +.api-container .api-header small.put { + background-color: #a08022; +} + +.api-container .api-header small.post { + background-color: #46a022; +} + +.api-container .api-header small.delete { + background-color: #a02222; +} + +.api-container .api-header h2 { + display: block; + flex: 1; + margin: 0; + padding: 0; + font-size: 16px; + font-weight: normal; + white-space: nowrap; + line-height: 28px; + height: 26px; +} + +.api-container .api-header span { + display: block; + color: #266D9E; + font-size: 11px; + padding: 0px 8px; + border: 1px solid #266D9E; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin-left: 10px; +} + +.api-container .api-content { + height: 0px; + overflow: hidden; +} + +.api-container .api-content div { + padding: 20px 20px 10px 20px; +} + +.api-container .api-content div h3 { + padding: 14px 0px; + margin: 0px; + border-top: 1px solid #EEE; + color: #537186; + font-size: 13px; + text-transform: uppercase; + letter-spacing: 1px; +} + +.api-container .api-content div pre { + line-height: 18px; + font-size: 15px; +} + +.api-container.expanded .api-content { + height: auto; +} diff --git a/docs/_book/gitbook/gitbook-plugin-api/api.js b/docs/_book/gitbook/gitbook-plugin-api/api.js new file mode 100644 index 0000000..ebf6acf --- /dev/null +++ b/docs/_book/gitbook/gitbook-plugin-api/api.js @@ -0,0 +1,7 @@ +require(["gitbook"], function(gitbook) { + gitbook.events.bind("page.change", function() { + $(".api-header").click(function(event) { + $(event.currentTarget).parent().toggleClass('expanded'); + }); + }); +}); diff --git a/docs/_book/gitbook/gitbook-plugin-code/plugin.css b/docs/_book/gitbook/gitbook-plugin-code/plugin.css new file mode 100644 index 0000000..a68fcdc --- /dev/null +++ b/docs/_book/gitbook/gitbook-plugin-code/plugin.css @@ -0,0 +1,37 @@ +#code-textarea { + height: 0; + position: fixed; + top: -1000px; + width: 0; +} + +.code-wrapper { + position: relative; +} + +.code-wrapper i { + color: #c1c7cd; + cursor: pointer; + font-size: 12px; + font-weight: bold; + position: absolute; + right: 1em; + top: 1em; +} + +.code-wrapper pre { + background: #f7f8f9; + border-radius: 3px; + counter-reset: line; + font-size: 15px; +} + +.code-wrapper pre > code > span.code-line:before { + counter-increment: line; + color: #c1c7cd; + content: counter(line); + display: inline-block; + font-size: 12px; + margin-right: 1.5em; + width: 1em; +} diff --git a/docs/_book/gitbook/gitbook-plugin-code/plugin.js b/docs/_book/gitbook/gitbook-plugin-code/plugin.js new file mode 100644 index 0000000..555d724 --- /dev/null +++ b/docs/_book/gitbook/gitbook-plugin-code/plugin.js @@ -0,0 +1,91 @@ +require(['gitbook', 'jQuery'], function(gitbook, $) { + + const TERMINAL_HOOK = '**[terminal]' + + var pluginConfig = {}; + var timeouts = {}; + + function addCopyButton(wrapper) { + wrapper.append( + $('') + .click(function() { + copyCommand($(this)); + }) + ); + } + + function addCopyTextarea() { + + /* Add also the text area that will allow to copy */ + $('body').append('",pe.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var Qe=te.documentElement,Je=/^key/,Ke=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ze=/^([^.]*)(?:\.(.+)|)/;de.event={global:{},add:function(e,t,n,r,o){var i,s,a,u,c,l,f,p,h,d,g,m=Fe.get(e);if(m)for(n.handler&&(i=n,n=i.handler,o=i.selector),o&&de.find.matchesSelector(Qe,o),n.guid||(n.guid=de.guid++),(u=m.events)||(u=m.events={}),(s=m.handle)||(s=m.handle=function(t){return"undefined"!=typeof de&&de.event.triggered!==t.type?de.event.dispatch.apply(e,arguments):void 0}),t=(t||"").match(qe)||[""],c=t.length;c--;)a=Ze.exec(t[c])||[],h=g=a[1],d=(a[2]||"").split(".").sort(),h&&(f=de.event.special[h]||{},h=(o?f.delegateType:f.bindType)||h,f=de.event.special[h]||{},l=de.extend({type:h,origType:g,data:r,handler:n,guid:n.guid,selector:o,needsContext:o&&de.expr.match.needsContext.test(o),namespace:d.join(".")},i),(p=u[h])||(p=u[h]=[],p.delegateCount=0,f.setup&&f.setup.call(e,r,d,s)!==!1||e.addEventListener&&e.addEventListener(h,s)),f.add&&(f.add.call(e,l),l.handler.guid||(l.handler.guid=n.guid)),o?p.splice(p.delegateCount++,0,l):p.push(l),de.event.global[h]=!0)},remove:function(e,t,n,r,o){var i,s,a,u,c,l,f,p,h,d,g,m=Fe.hasData(e)&&Fe.get(e);if(m&&(u=m.events)){for(t=(t||"").match(qe)||[""],c=t.length;c--;)if(a=Ze.exec(t[c])||[],h=g=a[1],d=(a[2]||"").split(".").sort(),h){for(f=de.event.special[h]||{},h=(r?f.delegateType:f.bindType)||h,p=u[h]||[],a=a[2]&&new RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=i=p.length;i--;)l=p[i],!o&&g!==l.origType||n&&n.guid!==l.guid||a&&!a.test(l.namespace)||r&&r!==l.selector&&("**"!==r||!l.selector)||(p.splice(i,1),l.selector&&p.delegateCount--,f.remove&&f.remove.call(e,l));s&&!p.length&&(f.teardown&&f.teardown.call(e,d,m.handle)!==!1||de.removeEvent(e,h,m.handle),delete u[h])}else for(h in u)de.event.remove(e,h+t[c],n,r,!0);de.isEmptyObject(u)&&Fe.remove(e,"handle events")}},dispatch:function(e){var t,n,r,o,i,s,a=de.event.fix(e),u=new Array(arguments.length),c=(Fe.get(this,"events")||{})[a.type]||[],l=de.event.special[a.type]||{};for(u[0]=a,t=1;t=1))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&("click"!==e.type||c.disabled!==!0)){for(i=[],s={},n=0;n-1:de.find(o,this,null,[c]).length),s[o]&&i.push(r);i.length&&a.push({elem:c,handlers:i})}return c=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,tt=/\s*$/g;de.extend({htmlPrefilter:function(e){return e.replace(et,"<$1>")},clone:function(e,t,n){var r,o,i,s,a=e.cloneNode(!0),u=de.contains(e.ownerDocument,e);if(!(pe.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||de.isXMLDoc(e)))for(s=v(a),i=v(e),r=0,o=i.length;r0&&y(s,!u&&v(e,"script")),a},cleanData:function(e){for(var t,n,r,o=de.event.special,i=0;void 0!==(n=e[i]);i++)if(He(n)){if(t=n[Fe.expando]){if(t.events)for(r in t.events)o[r]?de.event.remove(n,r):de.removeEvent(n,r,t.handle);n[Fe.expando]=void 0}n[Re.expando]&&(n[Re.expando]=void 0)}}}),de.fn.extend({detach:function(e){return q(this,e,!0)},remove:function(e){return q(this,e)},text:function(e){return Le(this,function(e){return void 0===e?de.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return A(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=j(this,e);t.appendChild(e)}})},prepend:function(){return A(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=j(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return A(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return A(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(de.cleanData(v(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return de.clone(this,e,t)})},html:function(e){return Le(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!tt.test(e)&&!Ge[(Xe.exec(e)||["",""])[1].toLowerCase()]){e=de.htmlPrefilter(e);try{for(;n1)}}),de.Tween=I,I.prototype={constructor:I,init:function(e,t,n,r,o,i){this.elem=e,this.prop=n,this.easing=o||de.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=i||(de.cssNumber[n]?"":"px")},cur:function(){var e=I.propHooks[this.prop];return e&&e.get?e.get(this):I.propHooks._default.get(this)},run:function(e){var t,n=I.propHooks[this.prop];return this.options.duration?this.pos=t=de.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):I.propHooks._default.set(this),this}},I.prototype.init.prototype=I.prototype,I.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=de.css(e.elem,e.prop,""),t&&"auto"!==t?t:0)},set:function(e){de.fx.step[e.prop]?de.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[de.cssProps[e.prop]]&&!de.cssHooks[e.prop]?e.elem[e.prop]=e.now:de.style(e.elem,e.prop,e.now+e.unit)}}},I.propHooks.scrollTop=I.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},de.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},de.fx=I.prototype.init,de.fx.step={};var ht,dt,gt=/^(?:toggle|show|hide)$/,mt=/queueHooks$/;de.Animation=de.extend(U,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return d(n.elem,e,$e.exec(t),n),n}]},tweener:function(e,t){de.isFunction(e)?(t=e,e=["*"]):e=e.match(qe);for(var n,r=0,o=e.length;r1)},removeAttr:function(e){return this.each(function(){de.removeAttr(this,e)})}}),de.extend({attr:function(e,t,n){var r,o,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return"undefined"==typeof e.getAttribute?de.prop(e,t,n):(1===i&&de.isXMLDoc(e)||(o=de.attrHooks[t.toLowerCase()]||(de.expr.match.bool.test(t)?vt:void 0)),void 0!==n?null===n?void de.removeAttr(e,t):o&&"set"in o&&void 0!==(r=o.set(e,n,t))?r:(e.setAttribute(t,n+""),n):o&&"get"in o&&null!==(r=o.get(e,t))?r:(r=de.find.attr(e,t),null==r?void 0:r))},attrHooks:{type:{set:function(e,t){if(!pe.radioValue&&"radio"===t&&de.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,o=t&&t.match(qe);if(o&&1===e.nodeType)for(;n=o[r++];)e.removeAttribute(n)}}),vt={set:function(e,t,n){return t===!1?de.removeAttr(e,n):e.setAttribute(n,n),n}},de.each(de.expr.match.bool.source.match(/\w+/g),function(e,t){var n=yt[t]||de.find.attr;yt[t]=function(e,t,r){var o,i,s=t.toLowerCase();return r||(i=yt[s],yt[s]=o,o=null!=n(e,t,r)?s:null,yt[s]=i),o}});var xt=/^(?:input|select|textarea|button)$/i,bt=/^(?:a|area)$/i;de.fn.extend({prop:function(e,t){return Le(this,de.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[de.propFix[e]||e]})}}),de.extend({prop:function(e,t,n){var r,o,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return 1===i&&de.isXMLDoc(e)||(t=de.propFix[t]||t,o=de.propHooks[t]),void 0!==n?o&&"set"in o&&void 0!==(r=o.set(e,n,t))?r:e[t]=n:o&&"get"in o&&null!==(r=o.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=de.find.attr(e,"tabindex");return t?parseInt(t,10):xt.test(e.nodeName)||bt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),pe.optSelected||(de.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),de.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){de.propFix[this.toLowerCase()]=this}),de.fn.extend({addClass:function(e){var t,n,r,o,i,s,a,u=0;if(de.isFunction(e))return this.each(function(t){de(this).addClass(e.call(this,t,X(this)))});if("string"==typeof e&&e)for(t=e.match(qe)||[];n=this[u++];)if(o=X(n),r=1===n.nodeType&&" "+z(o)+" "){for(s=0;i=t[s++];)r.indexOf(" "+i+" ")<0&&(r+=i+" ");a=z(r),o!==a&&n.setAttribute("class",a)}return this},removeClass:function(e){var t,n,r,o,i,s,a,u=0;if(de.isFunction(e))return this.each(function(t){de(this).removeClass(e.call(this,t,X(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof e&&e)for(t=e.match(qe)||[];n=this[u++];)if(o=X(n),r=1===n.nodeType&&" "+z(o)+" "){for(s=0;i=t[s++];)for(;r.indexOf(" "+i+" ")>-1;)r=r.replace(" "+i+" "," ");a=z(r),o!==a&&n.setAttribute("class",a)}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):de.isFunction(e)?this.each(function(n){de(this).toggleClass(e.call(this,n,X(this),t),t)}):this.each(function(){var t,r,o,i;if("string"===n)for(r=0,o=de(this),i=e.match(qe)||[];t=i[r++];)o.hasClass(t)?o.removeClass(t):o.addClass(t);else void 0!==e&&"boolean"!==n||(t=X(this),t&&Fe.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||e===!1?"":Fe.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&(" "+z(X(n))+" ").indexOf(t)>-1)return!0;return!1}});var wt=/\r/g;de.fn.extend({val:function(e){var t,n,r,o=this[0];{if(arguments.length)return r=de.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=r?e.call(this,n,de(this).val()):e,null==o?o="":"number"==typeof o?o+="":de.isArray(o)&&(o=de.map(o,function(e){return null==e?"":e+""})),t=de.valHooks[this.type]||de.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&void 0!==t.set(this,o,"value")||(this.value=o))});if(o)return t=de.valHooks[o.type]||de.valHooks[o.nodeName.toLowerCase()],t&&"get"in t&&void 0!==(n=t.get(o,"value"))?n:(n=o.value,"string"==typeof n?n.replace(wt,""):null==n?"":n)}}}),de.extend({valHooks:{option:{get:function(e){var t=de.find.attr(e,"value");return null!=t?t:z(de.text(e))}},select:{get:function(e){var t,n,r,o=e.options,i=e.selectedIndex,s="select-one"===e.type,a=s?null:[],u=s?i+1:o.length;for(r=i<0?u:s?i:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),i}}}}),de.each(["radio","checkbox"],function(){de.valHooks[this]={set:function(e,t){if(de.isArray(t))return e.checked=de.inArray(de(e).val(),t)>-1}},pe.checkOn||(de.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Tt=/^(?:focusinfocus|focusoutblur)$/;de.extend(de.event,{trigger:function(t,n,r,o){var i,s,a,u,c,l,f,p=[r||te],h=ce.call(t,"type")?t.type:t,d=ce.call(t,"namespace")?t.namespace.split("."):[];if(s=a=r=r||te,3!==r.nodeType&&8!==r.nodeType&&!Tt.test(h+de.event.triggered)&&(h.indexOf(".")>-1&&(d=h.split("."),h=d.shift(),d.sort()),c=h.indexOf(":")<0&&"on"+h,t=t[de.expando]?t:new de.Event(h,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=d.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=r),n=null==n?[t]:de.makeArray(n,[t]),f=de.event.special[h]||{},o||!f.trigger||f.trigger.apply(r,n)!==!1)){if(!o&&!f.noBubble&&!de.isWindow(r)){for(u=f.delegateType||h,Tt.test(u+h)||(s=s.parentNode);s;s=s.parentNode)p.push(s),a=s;a===(r.ownerDocument||te)&&p.push(a.defaultView||a.parentWindow||e)}for(i=0;(s=p[i++])&&!t.isPropagationStopped();)t.type=i>1?u:f.bindType||h,l=(Fe.get(s,"events")||{})[t.type]&&Fe.get(s,"handle"),l&&l.apply(s,n),l=c&&s[c],l&&l.apply&&He(s)&&(t.result=l.apply(s,n),t.result===!1&&t.preventDefault());return t.type=h,o||t.isDefaultPrevented()||f._default&&f._default.apply(p.pop(),n)!==!1||!He(r)||c&&de.isFunction(r[h])&&!de.isWindow(r)&&(a=r[c],a&&(r[c]=null),de.event.triggered=h,r[h](),de.event.triggered=void 0,a&&(r[c]=a)),t.result}},simulate:function(e,t,n){var r=de.extend(new de.Event,n,{type:e,isSimulated:!0});de.event.trigger(r,null,t)}}),de.fn.extend({trigger:function(e,t){return this.each(function(){de.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return de.event.trigger(e,t,n,!0)}}),de.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,t){de.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),de.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),pe.focusin="onfocusin"in e,pe.focusin||de.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){de.event.simulate(t,e.target,de.event.fix(e))};de.event.special[t]={setup:function(){var r=this.ownerDocument||this,o=Fe.access(r,t);o||r.addEventListener(e,n,!0),Fe.access(r,t,(o||0)+1)},teardown:function(){var r=this.ownerDocument||this,o=Fe.access(r,t)-1;o?Fe.access(r,t,o):(r.removeEventListener(e,n,!0),Fe.remove(r,t))}}});var Ct=e.location,jt=de.now(),kt=/\?/;de.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||de.error("Invalid XML: "+t),n};var Et=/\[\]$/,St=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;de.param=function(e,t){var n,r=[],o=function(e,t){var n=de.isFunction(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(de.isArray(e)||e.jquery&&!de.isPlainObject(e))de.each(e,function(){o(this.name,this.value)});else for(n in e)V(n,e[n],t,o);return r.join("&")},de.fn.extend({serialize:function(){return de.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=de.prop(this,"elements");return e?de.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!de(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!ze.test(e))}).map(function(e,t){var n=de(this).val();return null==n?null:de.isArray(n)?de.map(n,function(e){return{name:t.name,value:e.replace(St,"\r\n")}}):{name:t.name,value:n.replace(St,"\r\n")}}).get()}});var qt=/%20/g,Dt=/#.*$/,Ot=/([?&])_=[^&]*/,Lt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ht=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ft=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Pt={},Mt="*/".concat("*"),$t=te.createElement("a");$t.href=Ct.href,de.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Ht.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Mt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":de.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Q(Q(e,de.ajaxSettings),t):Q(de.ajaxSettings,e)},ajaxPrefilter:G(It),ajaxTransport:G(Pt),ajax:function(t,n){function r(t,n,r,a){var c,p,h,b,w,T=n;l||(l=!0,u&&e.clearTimeout(u),o=void 0,s=a||"",C.readyState=t>0?4:0,c=t>=200&&t<300||304===t,r&&(b=J(d,C,r)),b=K(d,b,C,c),c?(d.ifModified&&(w=C.getResponseHeader("Last-Modified"),w&&(de.lastModified[i]=w),w=C.getResponseHeader("etag"),w&&(de.etag[i]=w)),204===t||"HEAD"===d.type?T="nocontent":304===t?T="notmodified":(T=b.state,p=b.data,h=b.error,c=!h)):(h=T,!t&&T||(T="error",t<0&&(t=0))),C.status=t,C.statusText=(n||T)+"",c?v.resolveWith(g,[p,T,C]):v.rejectWith(g,[C,T,h]),C.statusCode(x),x=void 0,f&&m.trigger(c?"ajaxSuccess":"ajaxError",[C,d,c?p:h]),y.fireWith(g,[C,T]),f&&(m.trigger("ajaxComplete",[C,d]),--de.active||de.event.trigger("ajaxStop")))}"object"==typeof t&&(n=t,t=void 0),n=n||{};var o,i,s,a,u,c,l,f,p,h,d=de.ajaxSetup({},n),g=d.context||d,m=d.context&&(g.nodeType||g.jquery)?de(g):de.event,v=de.Deferred(),y=de.Callbacks("once memory"),x=d.statusCode||{},b={},w={},T="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(l){if(!a)for(a={};t=Lt.exec(s);)a[t[1].toLowerCase()]=t[2];t=a[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return l?s:null},setRequestHeader:function(e,t){return null==l&&(e=w[e.toLowerCase()]=w[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==l&&(d.mimeType=e),this},statusCode:function(e){var t;if(e)if(l)C.always(e[C.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||T;return o&&o.abort(t),r(0,t),this}};if(v.promise(C),d.url=((t||d.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),d.type=n.method||n.type||d.method||d.type,d.dataTypes=(d.dataType||"*").toLowerCase().match(qe)||[""],null==d.crossDomain){c=te.createElement("a");try{c.href=d.url,c.href=c.href,d.crossDomain=$t.protocol+"//"+$t.host!=c.protocol+"//"+c.host}catch(e){d.crossDomain=!0}}if(d.data&&d.processData&&"string"!=typeof d.data&&(d.data=de.param(d.data,d.traditional)),Y(It,d,n,C),l)return C;f=de.event&&d.global,f&&0===de.active++&&de.event.trigger("ajaxStart"),d.type=d.type.toUpperCase(),d.hasContent=!Ft.test(d.type),i=d.url.replace(Dt,""),d.hasContent?d.data&&d.processData&&0===(d.contentType||"").indexOf("application/x-www-form-urlencoded")&&(d.data=d.data.replace(qt,"+")):(h=d.url.slice(i.length),d.data&&(i+=(kt.test(i)?"&":"?")+d.data,delete d.data),d.cache===!1&&(i=i.replace(Ot,"$1"),h=(kt.test(i)?"&":"?")+"_="+jt++ +h),d.url=i+h),d.ifModified&&(de.lastModified[i]&&C.setRequestHeader("If-Modified-Since",de.lastModified[i]),de.etag[i]&&C.setRequestHeader("If-None-Match",de.etag[i])),(d.data&&d.hasContent&&d.contentType!==!1||n.contentType)&&C.setRequestHeader("Content-Type",d.contentType),C.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+("*"!==d.dataTypes[0]?", "+Mt+"; q=0.01":""):d.accepts["*"]);for(p in d.headers)C.setRequestHeader(p,d.headers[p]);if(d.beforeSend&&(d.beforeSend.call(g,C,d)===!1||l))return C.abort();if(T="abort",y.add(d.complete),C.done(d.success),C.fail(d.error),o=Y(Pt,d,n,C)){if(C.readyState=1,f&&m.trigger("ajaxSend",[C,d]),l)return C;d.async&&d.timeout>0&&(u=e.setTimeout(function(){C.abort("timeout")},d.timeout));try{l=!1,o.send(b,r)}catch(e){if(l)throw e;r(-1,e)}}else r(-1,"No Transport");return C},getJSON:function(e,t,n){return de.get(e,t,n,"json")},getScript:function(e,t){return de.get(e,void 0,t,"script")}}),de.each(["get","post"],function(e,t){de[t]=function(e,n,r,o){return de.isFunction(n)&&(o=o||r,r=n,n=void 0),de.ajax(de.extend({url:e,type:t,dataType:o,data:n,success:r},de.isPlainObject(e)&&e))}}),de._evalUrl=function(e){return de.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,throws:!0})},de.fn.extend({wrapAll:function(e){var t;return this[0]&&(de.isFunction(e)&&(e=e.call(this[0])),t=de(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return de.isFunction(e)?this.each(function(t){de(this).wrapInner(e.call(this,t))}):this.each(function(){var t=de(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=de.isFunction(e);return this.each(function(n){de(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){de(this).replaceWith(this.childNodes)}),this}}),de.expr.pseudos.hidden=function(e){return!de.expr.pseudos.visible(e)},de.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},de.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Wt={0:200,1223:204},Bt=de.ajaxSettings.xhr();pe.cors=!!Bt&&"withCredentials"in Bt,pe.ajax=Bt=!!Bt,de.ajaxTransport(function(t){var n,r;if(pe.cors||Bt&&!t.crossDomain)return{send:function(o,i){var s,a=t.xhr();if(a.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(s in t.xhrFields)a[s]=t.xhrFields[s];t.mimeType&&a.overrideMimeType&&a.overrideMimeType(t.mimeType),t.crossDomain||o["X-Requested-With"]||(o["X-Requested-With"]="XMLHttpRequest");for(s in o)a.setRequestHeader(s,o[s]);n=function(e){return function(){n&&(n=r=a.onload=a.onerror=a.onabort=a.onreadystatechange=null,"abort"===e?a.abort():"error"===e?"number"!=typeof a.status?i(0,"error"):i(a.status,a.statusText):i(Wt[a.status]||a.status,a.statusText,"text"!==(a.responseType||"text")||"string"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=n(),r=a.onerror=n("error"),void 0!==a.onabort?a.onabort=r:a.onreadystatechange=function(){4===a.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{a.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),de.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),de.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return de.globalEval(e),e}}}),de.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),de.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(r,o){t=de(" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_book/search_index.json b/docs/_book/search_index.json new file mode 100644 index 0000000..0d84795 --- /dev/null +++ b/docs/_book/search_index.json @@ -0,0 +1 @@ +{"index":{"version":"0.5.12","fields":[{"name":"title","boost":10},{"name":"keywords","boost":15},{"name":"body","boost":1}],"ref":"url","documentStore":{"store":{"./":["introduct"],"Usage/":["chang","cli","configur","guide!","instal","luxcena","neo,","neo?","readi","setup?","something?","start","thing?","usag","want"],"Usage/Install.html":["$","(prefer","(ssh","./bin/install.sh","/tmp/luxcena","10","access","anoth","answer","be","bit","cd","clone","command$","command)","command:$","commands$","console.","direct)","do,","encount","f","fail","find","fix'","follow","git","hang,","haven't","here.","https://github.com/jakobst1n/luxcena","instal","install.","installed.","instruct","instructions:","it,","log","luxcena","more","n","neo","neo.install.log","now","onc","open","output","output.","pi","possibl","post","process","questions.","raspberri","reason","requir","root","run","screen.","see","seem","sent","session,","shield","start","sudo","tail","termin","through","troubl","troubleshoot","us","verbos","want","ye","yet,"],"Usage/Configuration.html":["\"led","\"led_channel\":","\"led_count\":","\"led_dma\":","\"led_freq_hz\":","\"led_invert\":","\"led_pin\":","\"line\":","\"matrix\":","\"random\":","\"real\"","\"segmentconfiguration\":","\"segments\":","\"snake\",","\"snake\":","$","'nano'.","'segmentsconfiguration'","(3","/home/lux","0","0.","1,","10","10!","10,","10],","18,","2],","4,","53,","5],","7,","800000,","8]","[","[0,","[10,","[3,","[6,","[],","]","above,","add","anoth","appear","arrang","array,","back","badli","chang","channel","check","command","conf","config","configur","connect","control.","controlling.","converter.","count","count\"","crash.","data","default","defaults:","dimenson","din","dma","doing.","don't","editor","editor,","element","else,","empti","enter","exampl","fail.","fall","false,","file","gener","gpio","here","invert","it.","know","leav","led'","led_channel","led_count","led_dma","led_invert","led_pin","lenght","length,","level","likings.","line.","list,","look","lux","luxcena","matrix","need","neo","neo/userdata/config/strip.json","newer","newer),","number","on","option","option.","out","pixel'","pleas","port","port.","reason","recommend","refer","repres","rpi","run","segment","segment,","segmentconfigur","segments.","set","setup","setup.","shield,","shouldn't","simpl","someth","something,","square,","start","stream.","strongli","sudo","sum","system","them.","this:","touched,","two","unless","up","us","vim","want","work","worri","{","}"],"Usage/CLI.html":["$","/usr/bin","access,","alia","assum","branch.","by:","call","cli","command","conf","config","current","directory,","get","instal","interfac","line","lux","luxcena","nano.","neo","neo.sh","newest","open","option","pleas","remov","root","run","script","server.","start","stop","strip","sudo","thing.","uninstal","updat","version","whole","yourself."],"Contributing/Modules/CompileAndRun.html":["\"/usrdata/usrcode/example\");","(_code)","(_stderr)","(_stdout)","(where","+","//",":`(","=","=>","_code","`throw`","add","app","app.j","attach","below:","build","call","called.","class","class,","closes,","code","code.","compileandrun","compilerun.python(global.dirswap","contain","data","delet","done","dy","entri","entry.pi","error","event","exampl","exit","exits,","export","file","file.","folder","folder,","folder.","full","index","initi","itself.","languag","last","later.","listner","local","located):","located.","made","make","messag","method","modul","move","new","next","object.","old","on","one.","out.","parameter,","path","place","point","print","process","process,","python","python,","python.compil","python.constructor","python.run","pythonsupportfil","readi","requir","root","run","sc","sc.on(\"close\",","sc.on(\"stderr::end\",","sc.on(\"stderr::out\",","sc.on(\"stdout::data\",","sc.on(\"stdout::end\",","script","script,","script.","script.py,","scripts.","someth","spawn","start","subdir","support","take","this:","us","user","usual","var","word","write","{","});","​"]},"length":6},"tokenStore":{"root":{"0":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"1":{"0":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},"!":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}}},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.0380952380952381}}},"]":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"8":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"2":{"docs":{},"]":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"4":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"5":{"3":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"docs":{},"]":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"7":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"8":{"0":{"0":{"0":{"0":{"0":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{},"]":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"r":{"docs":{},"o":{"docs":{},"d":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":11}}}}}}}},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"l":{"docs":{"Usage/":{"ref":"Usage/","tf":0.15},"Usage/Install.html":{"ref":"Usage/Install.html","tf":10.041666666666666},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}},"l":{"docs":{},".":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},":":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"d":{"docs":{},"e":{"docs":{},"x":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"i":{"docs":{},"t":{"docs":{},"i":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"t":{"docs":{},",":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}},"s":{"docs":{},"e":{"docs":{},"l":{"docs":{},"f":{"docs":{},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"Usage/":{"ref":"Usage/","tf":0.1},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}}}}}}},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"l":{"docs":{},"i":{"docs":{"Usage/":{"ref":"Usage/","tf":0.05},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":10.015873015873016}}},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"s":{"docs":{},"e":{"docs":{},"s":{"docs":{},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}},"i":{"docs":{},"g":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}},"u":{"docs":{},"r":{"docs":{"Usage/":{"ref":"Usage/","tf":0.05},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":10.004761904761905}}}}}}},"s":{"docs":{},"o":{"docs":{},"l":{"docs":{},"e":{"docs":{},".":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}},"n":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"t":{"docs":{},"r":{"docs":{},"o":{"docs":{},"l":{"docs":{},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}},"m":{"docs":{},"m":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}},"$":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}},")":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}},":":{"docs":{},"$":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"s":{"docs":{},"$":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":10}}}}}}}},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},".":{"docs":{},"p":{"docs":{},"y":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},"g":{"docs":{},"l":{"docs":{},"o":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{},".":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"s":{"docs":{},"w":{"docs":{},"a":{"docs":{},"p":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},"\"":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"d":{"docs":{},"e":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}}},"d":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}},"r":{"docs":{},"a":{"docs":{},"s":{"docs":{},"h":{"docs":{},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}},"u":{"docs":{},"r":{"docs":{},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}}}}},"g":{"docs":{},"u":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"!":{"docs":{"Usage/":{"ref":"Usage/","tf":0.1}}}}}}},"i":{"docs":{},"t":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"t":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}},"p":{"docs":{},"i":{"docs":{},"o":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"l":{"docs":{},"u":{"docs":{},"x":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.09523809523809523}},"c":{"docs":{},"e":{"docs":{},"n":{"docs":{},"a":{"docs":{"Usage/":{"ref":"Usage/","tf":0.1},"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.052083333333333336},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}}}},"o":{"docs":{},"g":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}},"o":{"docs":{},"k":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}},"t":{"docs":{},"e":{"docs":{},"d":{"docs":{},")":{"docs":{},":":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}}},"e":{"docs":{},"a":{"docs":{},"v":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.014285714285714285}}}},"d":{"docs":{},"'":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}}},"_":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"d":{"docs":{},"m":{"docs":{},"a":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}},"p":{"docs":{},"i":{"docs":{},"n":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"n":{"docs":{},"g":{"docs":{},"h":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"t":{"docs":{},"h":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"i":{"docs":{},"k":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}},"n":{"docs":{},"e":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"s":{"docs":{},"t":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.014285714285714285}}},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"u":{"docs":{},"a":{"docs":{},"g":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}},"s":{"docs":{},"t":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}},"n":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}},"e":{"docs":{},"o":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.052083333333333336},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.09523809523809523}},",":{"docs":{"Usage/":{"ref":"Usage/","tf":0.05}}},"?":{"docs":{"Usage/":{"ref":"Usage/","tf":0.05}}},".":{"docs":{},"i":{"docs":{},"n":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}}}}}}},"s":{"docs":{},"h":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}},"/":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},"/":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},".":{"docs":{},"j":{"docs":{},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"d":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"w":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.022727272727272728}},"e":{"docs":{},"r":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},")":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"s":{"docs":{},"t":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}},"x":{"docs":{},"t":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"o":{"docs":{},"w":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"u":{"docs":{},"m":{"docs":{},"b":{"docs":{},"e":{"docs":{},"r":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.014285714285714285}}}}}}},"a":{"docs":{},"n":{"docs":{},"o":{"docs":{},".":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"i":{"docs":{"Usage/":{"ref":"Usage/","tf":0.05},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"q":{"docs":{},"u":{"docs":{},"i":{"docs":{},"r":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"p":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"m":{"docs":{},"o":{"docs":{},"v":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}},"a":{"docs":{},"s":{"docs":{},"p":{"docs":{},"b":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"i":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.020833333333333332}}}}}}}}}},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"u":{"docs":{},"n":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.020833333333333332},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.017045454545454544}}}},"p":{"docs":{},"i":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}},"u":{"docs":{},"p":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.014285714285714285}},"?":{"docs":{"Usage/":{"ref":"Usage/","tf":0.05}}},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"e":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}},"m":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"n":{"docs":{},"t":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}},"g":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.023809523809523808}},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},"u":{"docs":{},"r":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}},"s":{"docs":{},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.031746031746031744}}}}}}}},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"?":{"docs":{"Usage/":{"ref":"Usage/","tf":0.05}}},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{"Usage/":{"ref":"Usage/","tf":0.05},"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.03125},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.031746031746031744},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"m":{"docs":{},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"o":{"docs":{},"n":{"docs":{},"g":{"docs":{},"l":{"docs":{},"i":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"i":{"docs":{},"p":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}},"o":{"docs":{},"p":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.031746031746031744}}}}},"c":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}},"r":{"docs":{},"e":{"docs":{},"e":{"docs":{},"n":{"docs":{},".":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.03409090909090909}},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}},"p":{"docs":{},"y":{"docs":{},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"s":{"docs":{},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}},".":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"c":{"docs":{},"l":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"\"":{"docs":{},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},":":{"docs":{},":":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},"\"":{"docs":{},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"\"":{"docs":{},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},":":{"docs":{},":":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"\"":{"docs":{},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},"\"":{"docs":{},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"i":{"docs":{},"e":{"docs":{},"l":{"docs":{},"d":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"o":{"docs":{},"u":{"docs":{},"l":{"docs":{},"d":{"docs":{},"n":{"docs":{},"'":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}},"u":{"docs":{},"d":{"docs":{},"o":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.020833333333333332},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.09523809523809523}}}},"m":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}},"b":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.017045454545454544}}}}}}}},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"q":{"docs":{},"u":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}},"y":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"p":{"docs":{},"a":{"docs":{},"w":{"docs":{},"n":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}},"t":{"docs":{},"h":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"?":{"docs":{"Usage/":{"ref":"Usage/","tf":0.05}}},".":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}},"s":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"g":{"docs":{},"h":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}},"e":{"docs":{},"m":{"docs":{},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"k":{"docs":{},"e":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"e":{"docs":{},"r":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"b":{"docs":{},"l":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}},"e":{"docs":{},"s":{"docs":{},"h":{"docs":{},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"d":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}},"w":{"docs":{},"o":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"u":{"docs":{},"s":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.03333333333333333},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}},"a":{"docs":{},"g":{"docs":{"Usage/":{"ref":"Usage/","tf":10.05}}}},"e":{"docs":{},"r":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}},"u":{"docs":{},"a":{"docs":{},"l":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"n":{"docs":{},"l":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}}}}}},"i":{"docs":{},"n":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"l":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.031746031746031744}}}}}}}}},"p":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.031746031746031744}}}}}}},"w":{"docs":{},"a":{"docs":{},"n":{"docs":{},"t":{"docs":{"Usage/":{"ref":"Usage/","tf":0.05},"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.020833333333333332},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.01904761904761905}}}}},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}},"r":{"docs":{},"i":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"d":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"h":{"docs":{},"o":{"docs":{},"l":{"docs":{},"e":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}},"$":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.020833333333333332},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.031746031746031744}}},"(":{"3":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}},"docs":{},"p":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}},"s":{"docs":{},"s":{"docs":{},"h":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}},"_":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},")":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}},"s":{"docs":{},"t":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},")":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},")":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}}}}}}},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}},".":{"docs":{},"/":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"/":{"docs":{},"i":{"docs":{},"n":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},".":{"docs":{},"s":{"docs":{},"h":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}}}}}}}}}}}},"/":{"docs":{},"t":{"docs":{},"m":{"docs":{},"p":{"docs":{},"/":{"docs":{},"l":{"docs":{},"u":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"n":{"docs":{},"a":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}}}}}}},"h":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"/":{"docs":{},"l":{"docs":{},"u":{"docs":{},"x":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}},"u":{"docs":{},"s":{"docs":{},"r":{"docs":{},"/":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}}}}},"/":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.028409090909090908}}}},"a":{"docs":{},"c":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.020833333333333332}},",":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}}}},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"h":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"s":{"docs":{},"w":{"docs":{},"e":{"docs":{},"r":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}},"b":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}}}}}}},"d":{"docs":{},"d":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}},"p":{"docs":{},"p":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}},"e":{"docs":{},"a":{"docs":{},"r":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},".":{"docs":{},"j":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"y":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"l":{"docs":{},"i":{"docs":{},"a":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}},"s":{"docs":{},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}},"t":{"docs":{},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}},"b":{"docs":{},"e":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{},":":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}},"i":{"docs":{},"t":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"d":{"docs":{},"l":{"docs":{},"i":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{},"h":{"docs":{},".":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}}}},"y":{"docs":{},":":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}},"u":{"docs":{},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.022727272727272728}}}}}}},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},")":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},",":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}},"n":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"o":{"docs":{},",":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"n":{"docs":{},"'":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}}}},"e":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},"s":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}},"l":{"docs":{},"e":{"docs":{},"t":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"m":{"docs":{},"a":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"y":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}}}},"r":{"docs":{},"i":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}},"y":{"docs":{},".":{"docs":{},"p":{"docs":{},"i":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.017045454545454544}}}}}}}}},"d":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}},"l":{"docs":{},"e":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"s":{"docs":{},"e":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"m":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"x":{"docs":{},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"i":{"docs":{},"t":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}},"s":{"docs":{},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}}}},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}}},"v":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}},"f":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"l":{"docs":{},"l":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}},"s":{"docs":{},"e":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"x":{"docs":{},"'":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"l":{"docs":{},"e":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.014285714285714285},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.022727272727272728}},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"o":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}},"u":{"docs":{},"l":{"docs":{},"l":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},",":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}},"v":{"docs":{},"e":{"docs":{},"n":{"docs":{},"'":{"docs":{},"t":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}},".":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},"s":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"u":{"docs":{},"b":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"j":{"docs":{},"a":{"docs":{},"k":{"docs":{},"o":{"docs":{},"b":{"docs":{},"s":{"docs":{},"t":{"1":{"docs":{},"n":{"docs":{},"/":{"docs":{},"l":{"docs":{},"u":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"n":{"docs":{},"a":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}}}}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"d":{"docs":{},"u":{"docs":{},"l":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"v":{"docs":{},"e":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"a":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"x":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.023809523809523808}}}}}},"d":{"docs":{},"e":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}},"k":{"docs":{},"e":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"a":{"docs":{},"g":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"d":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.017045454545454544}}}}}}}},"o":{"docs":{},"n":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.01904761904761905},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}},"c":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}},"e":{"docs":{},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}}}}}}}},"u":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}},".":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"b":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}},"l":{"docs":{},"d":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"p":{"docs":{},"i":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.020833333333333332}},"x":{"docs":{},"e":{"docs":{},"l":{"docs":{},"'":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"o":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"b":{"docs":{},"l":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}},"t":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"r":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}}},"r":{"docs":{},"o":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}}},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"s":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}}}},"t":{"docs":{},"h":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"y":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"n":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.03977272727272727}},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"n":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}}}}}}},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}}}}}}}}}}}},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},".":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"b":{"docs":{},"o":{"docs":{},"s":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}}}},"i":{"docs":{},"m":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"a":{"docs":{},"r":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"y":{"docs":{},"e":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}},"t":{"docs":{},",":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"s":{"docs":{},"e":{"docs":{},"l":{"docs":{},"f":{"docs":{},".":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}}}}}}},"\"":{"docs":{},"l":{"docs":{},"e":{"docs":{},"d":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},"_":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{},"\"":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"\"":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}},"d":{"docs":{},"m":{"docs":{},"a":{"docs":{},"\"":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"f":{"docs":{},"r":{"docs":{},"e":{"docs":{},"q":{"docs":{},"_":{"docs":{},"h":{"docs":{},"z":{"docs":{},"\"":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"\"":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}},"p":{"docs":{},"i":{"docs":{},"n":{"docs":{},"\"":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"\"":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"x":{"docs":{},"\"":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"o":{"docs":{},"m":{"docs":{},"\"":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}},"e":{"docs":{},"a":{"docs":{},"l":{"docs":{},"\"":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"s":{"docs":{},"e":{"docs":{},"g":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},"u":{"docs":{},"r":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"\"":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}}}}}}}}},"s":{"docs":{},"\"":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}}}}}}}}}}},"n":{"docs":{},"a":{"docs":{},"k":{"docs":{},"e":{"docs":{},"\"":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}},"/":{"docs":{},"u":{"docs":{},"s":{"docs":{},"r":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"/":{"docs":{},"u":{"docs":{},"s":{"docs":{},"r":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"/":{"docs":{},"e":{"docs":{},"x":{"docs":{},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},"e":{"docs":{},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"'":{"docs":{},"n":{"docs":{},"a":{"docs":{},"n":{"docs":{},"o":{"docs":{},"'":{"docs":{},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}},"s":{"docs":{},"e":{"docs":{},"g":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"s":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},"u":{"docs":{},"r":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"'":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}}}}}}}}}}}}}}}}},"[":{"0":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"1":{"0":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"docs":{}},"3":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"6":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},"]":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}}}}},"]":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}},"k":{"docs":{},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"{":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.028409090909090908}}},"}":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},")":{"docs":{},";":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.028409090909090908}}}}},"+":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}},":":{"docs":{},"`":{"docs":{},"(":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"=":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}},">":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.028409090909090908}}}},"_":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}},"`":{"docs":{},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"o":{"docs":{},"w":{"docs":{},"`":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}}},"​":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}},"length":805},"corpusTokens":["\"/usrdata/usrcode/example\");","\"led","\"led_channel\":","\"led_count\":","\"led_dma\":","\"led_freq_hz\":","\"led_invert\":","\"led_pin\":","\"line\":","\"matrix\":","\"random\":","\"real\"","\"segmentconfiguration\":","\"segments\":","\"snake\",","\"snake\":","$","'nano'.","'segmentsconfiguration'","(3","(_code)","(_stderr)","(_stdout)","(prefer","(ssh","(where","+","./bin/install.sh","//","/home/lux","/tmp/luxcena","/usr/bin","0","0.","1,","10","10!","10,","10],","18,","2],","4,","53,","5],","7,","800000,","8]",":`(","=","=>","[","[0,","[10,","[3,","[6,","[],","]","_code","`throw`","above,","access","access,","add","alia","anoth","answer","app","app.j","appear","arrang","array,","assum","attach","back","badli","be","below:","bit","branch.","build","by:","call","called.","cd","chang","channel","check","class","class,","cli","clone","closes,","code","code.","command","command$","command)","command:$","commands$","compileandrun","compilerun.python(global.dirswap","conf","config","configur","connect","console.","contain","control.","controlling.","converter.","count","count\"","crash.","current","data","default","defaults:","delet","dimenson","din","direct)","directory,","dma","do,","doing.","don't","done","dy","editor","editor,","element","else,","empti","encount","enter","entri","entry.pi","error","event","exampl","exit","exits,","export","f","fail","fail.","fall","false,","file","file.","find","fix'","folder","folder,","folder.","follow","full","gener","get","git","gpio","guide!","hang,","haven't","here","here.","https://github.com/jakobst1n/luxcena","index","initi","instal","install.","installed.","instruct","instructions:","interfac","introduct","invert","it,","it.","itself.","know","languag","last","later.","leav","led'","led_channel","led_count","led_dma","led_invert","led_pin","lenght","length,","level","likings.","line","line.","list,","listner","local","located):","located.","log","look","lux","luxcena","made","make","matrix","messag","method","modul","more","move","n","nano.","need","neo","neo,","neo.install.log","neo.sh","neo/userdata/config/strip.json","neo?","new","newer","newer),","newest","next","now","number","object.","old","on","onc","one.","open","option","option.","out","out.","output","output.","parameter,","path","pi","pixel'","place","pleas","point","port","port.","possibl","post","print","process","process,","python","python,","python.compil","python.constructor","python.run","pythonsupportfil","questions.","raspberri","readi","reason","recommend","refer","remov","repres","requir","root","rpi","run","sc","sc.on(\"close\",","sc.on(\"stderr::end\",","sc.on(\"stderr::out\",","sc.on(\"stdout::data\",","sc.on(\"stdout::end\",","screen.","script","script,","script.","script.py,","scripts.","see","seem","segment","segment,","segmentconfigur","segments.","sent","server.","session,","set","setup","setup.","setup?","shield","shield,","shouldn't","simpl","someth","something,","something?","spawn","square,","start","stop","stream.","strip","strongli","subdir","sudo","sum","support","system","tail","take","termin","them.","thing.","thing?","this:","through","touched,","troubl","troubleshoot","two","uninstal","unless","up","updat","us","usag","user","usual","var","verbos","version","vim","want","whole","word","work","worri","write","ye","yet,","yourself.","{","}","});","​"],"pipeline":["stopWordFilter","stemmer"]},"store":{"./":{"url":"./","title":"Introduction","keywords":"","body":"Introduction\n"},"Usage/":{"url":"Usage/","title":"Usage","keywords":"","body":"Usage\nInstall\nWant to install luxcena-neo? This is the guide!\nConfiguration\nJust installed luxcena-neo, or you have changed your setup? This is the guide!\nCLI\nReady to start the thing? Or change something?\n"},"Usage/Install.html":{"url":"Usage/Install.html","title":"Install","keywords":"","body":"Installation\nIf you want to install luxcena-neo to use it, these are the instructions:\n\nRequirements\n\nThe luxcena-shield\nAccess to the raspberry pi (SSH or direct)\nRoot access (preferably through the sudo command)\n\nInstall\n\nStart with logging into your Raspberry Pi\nRun these commands$ git clone https://github.com/JakobST1n/Luxcena-Neo\n$ cd Luxcena-Neo\n$ sudo ./bin/install.sh\n\n\nFollow the instructions on screen. You should answer yes to most of the questions.\nThe install-process might seem to hang, but there is just no output being sent to the console. If you want to see a bit more verbose output. Open another terminal session, and run this command:$ tail -n 10 -f /tmp/luxcena-neo.install.log\n\nThis is also where you will find possible reasons for a failed install.\nLuxcena-Neo should now be installed. Start it with this command$ luxcena-neo start\n\n\n\nTroubleshooting\nWe haven't encountered any troubles yet, but once we do, we will post fix'es here.\n"},"Usage/Configuration.html":{"url":"Usage/Configuration.html","title":"Configuration","keywords":"","body":"Configuration\nHow to setup luxcena-neo to work with your setup\n\n$ sudo lux-neo conf\n\nWhen running the command above, a config file should appear in the editor 'nano'.\n{\n \"led_count\": 53,\n \"segments\": [],\n \"matrix\": [],\n \"segmentConfiguration\": \"snake\",\n \"led_pin\": 18,\n \"led_freq_hz\": 800000,\n \"led_dma\": 10,\n \"led_invert\": false,\n \"led_channel\": 0\n}\n\nIf you rather want to use vim or another editor, the file is at /home/lux-neo/userdata/config/strip.json\n\nled_count\nThis is the number of LED's you want to control.\nsegments\nThis is a simple list, here you should add the lenghts of all your segments. Please enter the \"real\" length, and don't start counting from 0. If you just want one segment, you should just have one element in the list, which is the number of led's you are controlling.\nWhen summing this list, it should check out with the \"led-count\"-option.\nmatrix\nThis is a two dimensonal array, used to arrange the segments in a matrix of your likings. Here you enter the segment-number to represent them. In the example above, all the segments are in one line. If you want to have them in a square, it could look like this:\n\"segments\": [10, 10, 10, 10, 10, 10, 10, 10, 10],\n\"matrix\": [\n [0, 1, 2],\n [3, 4, 5],\n [6, 7, 8]\n]\n\nIf you don't have a reference to all the segments or something, the matrix setup will fail. And fall back to 'segmentsconfiguration'\n\nsegmentconfiguration\nIf the matrix-option is empty or badly setup. The matrix will be set up using one of these defaults:\n\"snake\":\n\"line\":\n\"random\":\nled_pin\nIf using the luxcena-shield, you shouldn't have to worry about this option. But set it to the GPIO-port connected to your pixel's din-port.\nled_dma\nIf using a newer RPi (3 or newer), leave this as 10! Or your file-system might crash.\n\nThis is the dma-channel used to generate the data-stream. If you for some reason need channel 10 for something else, you can change it. But i strongly recommend leaving it to 10!\nled_invert\nThis should not be touched, unless you are using a inverting level converter.\nled_channel\nLeave this as default unless you know what you are doing.\n"},"Usage/CLI.html":{"url":"Usage/CLI.html","title":"CLI","keywords":"","body":"Command line interface\n\nThis gets installed in the /usr/bin directory, and can be called by:\n$ luxcena-neo.sh\n\nor is alias\n$ lux-neo\n\nThis CLI assumes root access, so please run it with sudo\n\nOptions\nsudo lux-neo uninstall\nUninstall the whole thing. You will have to remove this script yourself.\nsudo lux-neo update\nUpdate to the newest version on the current branch.\nsudo lux-neo conf\nOpen the strip-config in nano.\nsudo lux-neo start\nStart the server.\nsudo lux-neo stop\nStop the server.\n"},"Contributing/Modules/CompileAndRun.html":{"url":"Contributing/Modules/CompileAndRun.html","title":"CompileAndRun","keywords":"","body":"Index\n\nLocals\nvar pythonSupportFiles\nPoints to the files for our python support code. They should be in a subdir of the module itself.\nExported\nclass Python\nThis is exported as Python, just so that we could add other languages later. Used to build and run python-scripts with our support-code.\nmethod Python.constructor\nTakes one parameter, which is the full path to the folder where the script is located.\nWhen initializing the class, this will be called. Can be done like this:\nnew compileRun.Python(global.DirSwap + \"/usrData/usrCode/example\");\n\nmethod Python.compile\nThis deletes old build-folder, and makes a new one. It then moves all required files into the build-folder, making us ready for running the script.\nmethod Python.run\nSpawns a new process, starting entry.py in our build-folder. It also attaches event-listners on our class-object. All of them is in the example below:\nlet sc = new compileRun.Python(global.DirSwap + \"/usrData/usrCode/example\");\n​\n// When data is printed from the python-script\nsc.on(\"stdout::data\", (_stdout) => { });\n// Last write when script closes, any exiting messages\nsc.on(\"stdout::end\", (_stdout) => { });\n// When something is printed from the python-script to the error-out. Usually when a `throw` is called\nsc.on(\"stderr::out\", (_stderr) => { });\n// Last words when process is dying from an error :`(\nsc.on(\"stderr::end\", (_stderr) => { });\n// When script exits, _code is the exit-code\nsc.on(\"close\", (_code) => { });\n\nPython\nThis is the support-files for user-made scripts.\nEntry.py\nThe entry-point when running a script. A file called script.py, containing the user-script, should be placed next to this file. Starting it should be done like this (Where app-root is where our app.js is located):\npython entry.py \n"}}} \ No newline at end of file diff --git a/docs/_book/service-worker.js b/docs/_book/service-worker.js new file mode 100644 index 0000000..33b41cc --- /dev/null +++ b/docs/_book/service-worker.js @@ -0,0 +1,268 @@ +/** + * Copyright 2016 Google Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +*/ + +// DO NOT EDIT THIS GENERATED OUTPUT DIRECTLY! +// This file should be overwritten as part of your build process. +// If you need to extend the behavior of the generated service worker, the best approach is to write +// additional code and include it using the importScripts option: +// https://github.com/GoogleChrome/sw-precache#importscripts-arraystring +// +// Alternatively, it's possible to make changes to the underlying template file and then use that as the +// new base for generating output, via the templateFilePath option: +// https://github.com/GoogleChrome/sw-precache#templatefilepath-string +// +// If you go that route, make sure that whenever you update your sw-precache dependency, you reconcile any +// changes made to this original template file with your modified copy. + +// This generated service worker JavaScript will precache your site's resources. +// The code needs to be saved in a .js file at the top-level of your site, and registered +// from your pages in order to be used. See +// https://github.com/googlechrome/sw-precache/blob/master/demo/app/js/service-worker-registration.js +// for an example of how you can register this script and handle various service worker events. + +/* eslint-env worker, serviceworker */ +/* eslint-disable indent, no-unused-vars, no-multiple-empty-lines, max-nested-callbacks, space-before-function-paren, quotes, comma-spacing */ +'use strict'; + +var precacheConfig = [["/Contributing/Modules/CompileAndRun.html","d56c0c18391e35ed0d86b3c6b668f79a"],["/Usage/CLI.html","a0333969eb1b171327f4016a5dbf451c"],["/Usage/Configuration.html","f4b4b0796b174beb62948b8c80fd7363"],["/Usage/Install.html","ee494f0c3c4ad33d139e6f3c5113b52f"],["/Usage/index.html","ad4c537f60d4dd0ea998ded7aa4027bd"],["/gitbook/fonts/fontawesome/fontawesome-webfont.eot","25a32416abee198dd821b0b17a198a8f"],["/gitbook/fonts/fontawesome/fontawesome-webfont.svg","d7c639084f684d66a1bc66855d193ed8"],["/gitbook/fonts/fontawesome/fontawesome-webfont.ttf","1dc35d25e61d819a9c357074014867ab"],["/gitbook/fonts/fontawesome/fontawesome-webfont.woff","c8ddf1e5e5bf3682bc7bebf30f394148"],["/gitbook/gitbook-plugin-api/api.css","ad443308d0937629d2811cff9053e0c2"],["/gitbook/gitbook-plugin-api/api.js","b592adcca0c3d691f3a351b05e62c77a"],["/gitbook/gitbook-plugin-code/plugin.css","81aeb06c3e8d1c221773e63fe05f737a"],["/gitbook/gitbook-plugin-code/plugin.js","2a3bab062a1c3446333f10c60e8643a1"],["/gitbook/gitbook-plugin-comment/plugin.css","5291855572a41c85319d21a4b45f2eee"],["/gitbook/gitbook-plugin-comment/plugin.js","dc48b2f0bd1e4bdd1ad03d60d32c9bd6"],["/gitbook/gitbook-plugin-emphasize/plugin.css","6c90145b226c807ebbb334bb7d94d8ee"],["/gitbook/gitbook-plugin-fontsettings/fontsettings.js","fab8f6412ce18bb367635b1bcae503ca"],["/gitbook/gitbook-plugin-fontsettings/website.css","056a6db3eef3553a78f3b7e02356b2e7"],["/gitbook/gitbook-plugin-github/plugin.js","93ff35be0de181d440c84e8f6d76ab45"],["/gitbook/gitbook-plugin-highlight/ebook.css","fa203ae16ad9f01f4d20061fb9e7a6cc"],["/gitbook/gitbook-plugin-highlight/website.css","acce01e3e11cbd4b3882e7732d81f954"],["/gitbook/gitbook-plugin-hints/plugin-hints.css","35cad665bf4ba951a2f3a1d3253b6089"],["/gitbook/gitbook-plugin-livereload/plugin.js","9e48eceeaa9ee3f1f734eddd3dfe04da"],["/gitbook/gitbook-plugin-lunr/lunr.min.js","9424f087f85dc7be8f7c7bc35b720f26"],["/gitbook/gitbook-plugin-lunr/search-lunr.js","4e91f557c3d72be045b9e146c2bc90bc"],["/gitbook/gitbook-plugin-offline/service-worker-registration.js","0b4c35226075896152de214f8860b76e"],["/gitbook/gitbook-plugin-pretty-term/terminal.css","02c933b557fe724dcadd3dfa43dfc33c"],["/gitbook/gitbook-plugin-pretty-term/terminal.js","424e08c8a0b2f3d9e6706f15af29a714"],["/gitbook/gitbook-plugin-search/lunr.min.js","9424f087f85dc7be8f7c7bc35b720f26"],["/gitbook/gitbook-plugin-search/search-engine.js","59ed9456a958a2930326955747048f8a"],["/gitbook/gitbook-plugin-search/search.css","6c8330e8aadd979bb37f872182257bdd"],["/gitbook/gitbook-plugin-search/search.js","5ba7dbf7c0e78b02dc48f83d55729e36"],["/gitbook/gitbook-plugin-sharing/buttons.js","e7c1c051d685b9e7530c1a6675e6b119"],["/gitbook/gitbook.js","e53bf9037b1d1c9810486ef4c5493624"],["/gitbook/images/apple-touch-icon-precomposed-152.png","59313d171157503f5de7fd7e07f3c495"],["/gitbook/style.css","88a3a50e3559bc577c1be0de4fcc6c6d"],["/gitbook/theme.js","176e71ac3bf185b7f08e0f6cb919f1e8"],["/index.html","5447a536c53fe2867b9d030ff8b6ec01"]]; +var cacheName = 'sw-precache-v3--' + (self.registration ? self.registration.scope : ''); + + +var ignoreUrlParametersMatching = [/^utm_/]; + + + +var addDirectoryIndex = function (originalUrl, index) { + var url = new URL(originalUrl); + if (url.pathname.slice(-1) === '/') { + url.pathname += index; + } + return url.toString(); + }; + +var cleanResponse = function (originalResponse) { + // If this is not a redirected response, then we don't have to do anything. + if (!originalResponse.redirected) { + return Promise.resolve(originalResponse); + } + + // Firefox 50 and below doesn't support the Response.body stream, so we may + // need to read the entire body to memory as a Blob. + var bodyPromise = 'body' in originalResponse ? + Promise.resolve(originalResponse.body) : + originalResponse.blob(); + + return bodyPromise.then(function(body) { + // new Response() is happy when passed either a stream or a Blob. + return new Response(body, { + headers: originalResponse.headers, + status: originalResponse.status, + statusText: originalResponse.statusText + }); + }); + }; + +var createCacheKey = function (originalUrl, paramName, paramValue, + dontCacheBustUrlsMatching) { + // Create a new URL object to avoid modifying originalUrl. + var url = new URL(originalUrl); + + // If dontCacheBustUrlsMatching is not set, or if we don't have a match, + // then add in the extra cache-busting URL parameter. + if (!dontCacheBustUrlsMatching || + !(url.pathname.match(dontCacheBustUrlsMatching))) { + url.search += (url.search ? '&' : '') + + encodeURIComponent(paramName) + '=' + encodeURIComponent(paramValue); + } + + return url.toString(); + }; + +var isPathWhitelisted = function (whitelist, absoluteUrlString) { + // If the whitelist is empty, then consider all URLs to be whitelisted. + if (whitelist.length === 0) { + return true; + } + + // Otherwise compare each path regex to the path of the URL passed in. + var path = (new URL(absoluteUrlString)).pathname; + return whitelist.some(function(whitelistedPathRegex) { + return path.match(whitelistedPathRegex); + }); + }; + +var stripIgnoredUrlParameters = function (originalUrl, + ignoreUrlParametersMatching) { + var url = new URL(originalUrl); + // Remove the hash; see https://github.com/GoogleChrome/sw-precache/issues/290 + url.hash = ''; + + url.search = url.search.slice(1) // Exclude initial '?' + .split('&') // Split into an array of 'key=value' strings + .map(function(kv) { + return kv.split('='); // Split each 'key=value' string into a [key, value] array + }) + .filter(function(kv) { + return ignoreUrlParametersMatching.every(function(ignoredRegex) { + return !ignoredRegex.test(kv[0]); // Return true iff the key doesn't match any of the regexes. + }); + }) + .map(function(kv) { + return kv.join('='); // Join each [key, value] array into a 'key=value' string + }) + .join('&'); // Join the array of 'key=value' strings into a string with '&' in between each + + return url.toString(); + }; + + +var hashParamName = '_sw-precache'; +var urlsToCacheKeys = new Map( + precacheConfig.map(function(item) { + var relativeUrl = item[0]; + var hash = item[1]; + var absoluteUrl = new URL(relativeUrl, self.location); + var cacheKey = createCacheKey(absoluteUrl, hashParamName, hash, false); + return [absoluteUrl.toString(), cacheKey]; + }) +); + +function setOfCachedUrls(cache) { + return cache.keys().then(function(requests) { + return requests.map(function(request) { + return request.url; + }); + }).then(function(urls) { + return new Set(urls); + }); +} + +self.addEventListener('install', function(event) { + event.waitUntil( + caches.open(cacheName).then(function(cache) { + return setOfCachedUrls(cache).then(function(cachedUrls) { + return Promise.all( + Array.from(urlsToCacheKeys.values()).map(function(cacheKey) { + // If we don't have a key matching url in the cache already, add it. + if (!cachedUrls.has(cacheKey)) { + var request = new Request(cacheKey, {credentials: 'same-origin'}); + return fetch(request).then(function(response) { + // Bail out of installation unless we get back a 200 OK for + // every request. + if (!response.ok) { + throw new Error('Request for ' + cacheKey + ' returned a ' + + 'response with status ' + response.status); + } + + return cleanResponse(response).then(function(responseToCache) { + return cache.put(cacheKey, responseToCache); + }); + }); + } + }) + ); + }); + }).then(function() { + + // Force the SW to transition from installing -> active state + return self.skipWaiting(); + + }) + ); +}); + +self.addEventListener('activate', function(event) { + var setOfExpectedUrls = new Set(urlsToCacheKeys.values()); + + event.waitUntil( + caches.open(cacheName).then(function(cache) { + return cache.keys().then(function(existingRequests) { + return Promise.all( + existingRequests.map(function(existingRequest) { + if (!setOfExpectedUrls.has(existingRequest.url)) { + return cache.delete(existingRequest); + } + }) + ); + }); + }).then(function() { + + return self.clients.claim(); + + }) + ); +}); + + +self.addEventListener('fetch', function(event) { + if (event.request.method === 'GET') { + // Should we call event.respondWith() inside this fetch event handler? + // This needs to be determined synchronously, which will give other fetch + // handlers a chance to handle the request if need be. + var shouldRespond; + + // First, remove all the ignored parameters and hash fragment, and see if we + // have that URL in our cache. If so, great! shouldRespond will be true. + var url = stripIgnoredUrlParameters(event.request.url, ignoreUrlParametersMatching); + shouldRespond = urlsToCacheKeys.has(url); + + // If shouldRespond is false, check again, this time with 'index.html' + // (or whatever the directoryIndex option is set to) at the end. + var directoryIndex = 'index.html'; + if (!shouldRespond && directoryIndex) { + url = addDirectoryIndex(url, directoryIndex); + shouldRespond = urlsToCacheKeys.has(url); + } + + // If shouldRespond is still false, check to see if this is a navigation + // request, and if so, whether the URL matches navigateFallbackWhitelist. + var navigateFallback = ''; + if (!shouldRespond && + navigateFallback && + (event.request.mode === 'navigate') && + isPathWhitelisted([], event.request.url)) { + url = new URL(navigateFallback, self.location).toString(); + shouldRespond = urlsToCacheKeys.has(url); + } + + // If shouldRespond was set to true at any point, then call + // event.respondWith(), using the appropriate cache key. + if (shouldRespond) { + event.respondWith( + caches.open(cacheName).then(function(cache) { + return cache.match(urlsToCacheKeys.get(url)).then(function(response) { + if (response) { + return response; + } + throw Error('The cached response that was expected is missing.'); + }); + }).catch(function(e) { + // Fall back to just fetch()ing the request if some unexpected error + // prevented the cached response from being valid. + console.warn('Couldn\'t serve response for "%s" from cache: %O', event.request.url, e); + return fetch(event.request); + }) + ); + } + } +}); + + + + + + + diff --git a/docs/book.json b/docs/book.json new file mode 100644 index 0000000..71f8e87 --- /dev/null +++ b/docs/book.json @@ -0,0 +1,10 @@ +{ + "title": "Luxcena-Neo wiki", + "author": "JakobST1n", + "plugins": ["code", "pretty-term", "hints", "comment", "github", "emphasize", "api", "offline"], + "pluginsConfig": { + "github": { + "url": "https://github.com/jakobst1n/lucena-neo" + } + } +} diff --git a/src/compileAndRun/pythonSupportFiles/LuxcenaNeo/Strip.py b/src/compileAndRun/pythonSupportFiles/LuxcenaNeo/Strip.py index f9c94a0..9d45457 100644 --- a/src/compileAndRun/pythonSupportFiles/LuxcenaNeo/Strip.py +++ b/src/compileAndRun/pythonSupportFiles/LuxcenaNeo/Strip.py @@ -1,5 +1,10 @@ from neopixel import * +class Matrix: + + def __init__(self, matrix, segments): + self.t = [] + class Strip: def __init__(self, stripConf): @@ -8,10 +13,10 @@ class Strip: self.LED_FREQ_HZ = stripConf["led_freq_hz"] # LED signal frequency in hertz (usually 800khz) self.LED_CHANNEL = stripConf["led_channel"] # Set to '1' for GPIOs 13, 19, 41, 45, 53 - self.LED_INVERT = stripConf["led_invert"] # True to invert the signal, (when using NPN transistor level shift) - self.LED_PIN = stripConf["led_pin"] # 18 uses PWM, 10 uses SPI /dev/spidev0.0 - self.LED_DMA = stripConf["led_dma"] # DMA channel for generating the signal, on the newer ones, try 10 - self.LED_COUNT = sum(self.SEGMENTS) # Number of LEDs in strip + self.LED_INVERT = stripConf["led_invert"] # True to invert the signal, (when using NPN transistor level shift) + self.LED_PIN = stripConf["led_pin"] # 18 uses PWM, 10 uses SPI /dev/spidev0.0 + self.LED_DMA = stripConf["led_dma"] # DMA channel for generating the signal, on the newer ones, try 10 + self.LED_COUNT = sum(self.SEGMENTS) # Number of LEDs in strip self.LED_BRIGHTNESS = 255 @@ -28,6 +33,12 @@ class Strip: self.strip.begin() + # Setup matrix + try: + pixelMatrix = new Matrix(stripConf["matrix"], self.segments) + except: + print("Something went wrong while setting up your self-defined matrix.") + def show(self): """Update the display with the data from the LED buffer.""" self.strip.show() @@ -77,3 +88,9 @@ def Color(red, green, blue, white = 0): and 255 is the highest intensity. """ return (white << 24) | (red << 16)| (green << 8) | blue + +def hexColor(value): + value = value.lstrip('#') + lv = len(value) + rgb = tuple(int(value[i:i+lv/3], 16) for i in range(0, lv, lv/3)) + return (0 << 24) | (rgb[1] << 16) | (rgb[0] << 8) | rgb[2] -- cgit v1.2.3 From 922e5dd4dce7bb137abf01509ed1506a24fe3d99 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 29 Nov 2018 23:21:53 +0100 Subject: :hammer: Change path of runscript in service file --- bin/luxcena-neo.service | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bin') diff --git a/bin/luxcena-neo.service b/bin/luxcena-neo.service index 8448671..14f3040 100644 --- a/bin/luxcena-neo.service +++ b/bin/luxcena-neo.service @@ -2,7 +2,7 @@ Description=Luxcena Neo [Service] -ExecStart=/home/lux-neo/install/src/bin/luxcena-neo.sh +ExecStart=/home/lux-neo/src/bin/luxcena-neo.sh Restart=always RestartSec=10 -- cgit v1.2.3 From 1cb8124568ba28477ba5a574abc086d085fbd109 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 29 Nov 2018 23:23:23 +0100 Subject: :hammer: Change path to install --- bin/luxcena-neo-cli.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'bin') diff --git a/bin/luxcena-neo-cli.sh b/bin/luxcena-neo-cli.sh index 5d960c0..d3302ed 100755 --- a/bin/luxcena-neo-cli.sh +++ b/bin/luxcena-neo-cli.sh @@ -65,13 +65,13 @@ if [ "$action" == "update" ]; then systemctl stop lxucena-neo oldDir=$PWD - cd /home/lux-neo/luxcena-neo-install + cd /home/lux-neo/src runuser -l 'lux-neo' -c 'git pull' runuser -l 'lux-neo' -c 'export NODE_ENV=production' runuser -l 'lux-neo' -c 'npm i --only=production' cd $oldDir printf "Update complete, run these commands to finish it completly:\n" - printf "sudo /home/lux-neo/install/src/bin/post-update.sh\n" + printf "sudo /home/lux-neo/src/bin/post-update.sh\n" printf "sudo systemctl luxcena-neo start\n" systemctl start luxcena-neo -- cgit v1.2.3 From 5ae6b5f361d4ccee713e3675c0aef999912f4448 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 29 Nov 2018 23:29:05 +0100 Subject: :hammer: Fix some more paths Wondering if it really was worth it to change this shit. --- bin/luxcena-neo.service | 2 +- bin/luxcena-neo.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'bin') diff --git a/bin/luxcena-neo.service b/bin/luxcena-neo.service index 14f3040..efea1ad 100644 --- a/bin/luxcena-neo.service +++ b/bin/luxcena-neo.service @@ -8,7 +8,7 @@ RestartSec=10 Environment=PATH=/usr/bin:/usr/local/bin Environment=NODE_ENV=production -WorkingDirectory=/home/lux-neo/install/src/ +WorkingDirectory=/home/lux-neo/src/ [Install] WantedBy=multi-user.target diff --git a/bin/luxcena-neo.sh b/bin/luxcena-neo.sh index 6a0be31..fc41f75 100755 --- a/bin/luxcena-neo.sh +++ b/bin/luxcena-neo.sh @@ -6,4 +6,4 @@ #runuser -l pi -c "export NODE_ENV=production; node ~/luxcena-neo-install/src/app.js" export NODE_ENV=production -node /home/lux-neo/install/src/app.js >> /home/lux-neo/install/logs/service.log +node /home/lux-neo/src/app.js >> /home/lux-neo/logs/service.log -- cgit v1.2.3 From aa36d8d64acf8cfabe0602c2727a0ae7d8472860 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 29 Nov 2018 23:38:16 +0100 Subject: :hammer: More paths --- bin/luxcena-neo-cli.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bin') diff --git a/bin/luxcena-neo-cli.sh b/bin/luxcena-neo-cli.sh index d3302ed..dddf0cb 100755 --- a/bin/luxcena-neo-cli.sh +++ b/bin/luxcena-neo-cli.sh @@ -104,7 +104,7 @@ elif [ "$action" == "uninstall" ]; then fi elif [ "$action" == "conf" ]; then - nano /home/lux-neo/luxcena-neo-install/userdata/config/strip.json + nano /home/lux-neo/userdata/config/strip.json elif [ "$action" == "start" ]; then systemctl start luxcena-neo -- cgit v1.2.3 From 8e57c7786f8be63cf33cb145c4bd979a713e0fbf Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 29 Nov 2018 23:39:49 +0100 Subject: :hammer: Fix post-update script --- bin/post-update.sh | 3 +++ 1 file changed, 3 insertions(+) (limited to 'bin') diff --git a/bin/post-update.sh b/bin/post-update.sh index 59b1fe9..01b0fee 100644 --- a/bin/post-update.sh +++ b/bin/post-update.sh @@ -1,4 +1,7 @@ +oldDir=$PWD +cd /home/lux-neo/src cp bin/luxcena-neo-cli.sh /usr/bin/luxcena-neo-cli.sh +cd $oldDir echo "Post-update done..." -- cgit v1.2.3 From 96625879bbb27b758cf3ea5038b7c5f99bdca003 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 29 Nov 2018 23:44:30 +0100 Subject: :hammer: Post update script, now executable :) --- bin/post-update.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 bin/post-update.sh (limited to 'bin') diff --git a/bin/post-update.sh b/bin/post-update.sh old mode 100644 new mode 100755 -- cgit v1.2.3 From 5c133c750682d8d15c7fdcf5a57fc02aedc9303d Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Fri, 30 Nov 2018 10:44:17 +0100 Subject: :construction: Realizing runuser runs in a seperate session each time --- bin/luxcena-neo-cli.sh | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) (limited to 'bin') diff --git a/bin/luxcena-neo-cli.sh b/bin/luxcena-neo-cli.sh index dddf0cb..a8384db 100755 --- a/bin/luxcena-neo-cli.sh +++ b/bin/luxcena-neo-cli.sh @@ -64,12 +64,8 @@ if [ "$action" == "update" ]; then fi systemctl stop lxucena-neo - oldDir=$PWD - cd /home/lux-neo/src - runuser -l 'lux-neo' -c 'git pull' - runuser -l 'lux-neo' -c 'export NODE_ENV=production' - runuser -l 'lux-neo' -c 'npm i --only=production' - cd $oldDir + runuser -l 'lux-neo' -c 'git -C ~/src pull' + runuser -l 'lux-neo' -c 'export NODE_ENV=production; npm --prefix ~/src install ~/src --only=production' printf "Update complete, run these commands to finish it completly:\n" printf "sudo /home/lux-neo/src/bin/post-update.sh\n" printf "sudo systemctl luxcena-neo start\n" -- cgit v1.2.3 From 949dd6a5b0d6fce587a51904acabe3e2191924f9 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Fri, 30 Nov 2018 10:46:56 +0100 Subject: :construction: Make simple shortcut to view service status --- bin/luxcena-neo-cli.sh | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'bin') diff --git a/bin/luxcena-neo-cli.sh b/bin/luxcena-neo-cli.sh index a8384db..763bbbe 100755 --- a/bin/luxcena-neo-cli.sh +++ b/bin/luxcena-neo-cli.sh @@ -106,6 +106,10 @@ elif [ "$action" == "start" ]; then systemctl start luxcena-neo elif [ "$action" == "stop" ]; then systemctl stop luxcena-neo +elif [ "$action" == "status" ]; then + printf '\e[93m%s\e[0m\n' "---Service status------------------" + systemctl status luxcena-neo + printf '\e[93m%s\e[0m\n' "-----------------------------------" else usage fi -- cgit v1.2.3 From ae98cf39c956033c98dcf6d11be4df95f58fff47 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Fri, 30 Nov 2018 10:58:10 +0100 Subject: :construction: CLI is now self-updating! Realized that shell scripts are loaded into memory before being run. this means we can both make it update itself, and delete itself. --- bin/luxcena-neo-cli.sh | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'bin') diff --git a/bin/luxcena-neo-cli.sh b/bin/luxcena-neo-cli.sh index 763bbbe..5521749 100755 --- a/bin/luxcena-neo-cli.sh +++ b/bin/luxcena-neo-cli.sh @@ -66,9 +66,11 @@ if [ "$action" == "update" ]; then systemctl stop lxucena-neo runuser -l 'lux-neo' -c 'git -C ~/src pull' runuser -l 'lux-neo' -c 'export NODE_ENV=production; npm --prefix ~/src install ~/src --only=production' - printf "Update complete, run these commands to finish it completly:\n" - printf "sudo /home/lux-neo/src/bin/post-update.sh\n" - printf "sudo systemctl luxcena-neo start\n" + cp /home/lux-neo/src/bin/luxcena-neo-cli.sh /usr/bin/luxcena-neo-cli.sh + printf "Update complete.\n" + #printf "Update complete, run these commands to finish it completly:\n" + #printf "sudo /home/lux-neo/src/bin/post-update.sh\n" + #printf "sudo systemctl luxcena-neo start\n" systemctl start luxcena-neo elif [ "$action" == "uninstall" ]; then @@ -85,12 +87,12 @@ elif [ "$action" == "uninstall" ]; then deluser lux-neo rm -rf /home/lux-neo rm /etc/systemd/system/luxcena-neo.service + rm /usr/bin/luxcena-neo.sh + rm /usr/bin/lux-neo + tput setaf 2 - printf "\nEverything should now be gone. To remove the last piece, enter this command:\n" - tput sgr0 - tput smso - printf "sudo rm /bin/luxcena-neo\n\n" + printf "\nEverything should now be gone.\n" tput sgr0 tput setaf 8 printf "Well, some dependencies still exists. Those are:\n" -- cgit v1.2.3 From a9151cb4ccf612680b605936395a8c67d5b7e433 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Fri, 30 Nov 2018 10:59:11 +0100 Subject: :bug: Typo making service not stop while updating --- bin/luxcena-neo-cli.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bin') diff --git a/bin/luxcena-neo-cli.sh b/bin/luxcena-neo-cli.sh index 5521749..180b0c4 100755 --- a/bin/luxcena-neo-cli.sh +++ b/bin/luxcena-neo-cli.sh @@ -63,7 +63,7 @@ if [ "$action" == "update" ]; then exit 1 fi - systemctl stop lxucena-neo + systemctl stop luxcena-neo runuser -l 'lux-neo' -c 'git -C ~/src pull' runuser -l 'lux-neo' -c 'export NODE_ENV=production; npm --prefix ~/src install ~/src --only=production' cp /home/lux-neo/src/bin/luxcena-neo-cli.sh /usr/bin/luxcena-neo-cli.sh -- cgit v1.2.3 From 4aab6c3c9ba6c395bcf975eea0b90119439a8fbf Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Wed, 5 Dec 2018 23:06:59 +0100 Subject: :sparkles: Improve status function, add enable/disable start on boot --- bin/luxcena-neo-cli.sh | 40 +++++++++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 5 deletions(-) (limited to 'bin') diff --git a/bin/luxcena-neo-cli.sh b/bin/luxcena-neo-cli.sh index 180b0c4..0dfc6d8 100755 --- a/bin/luxcena-neo-cli.sh +++ b/bin/luxcena-neo-cli.sh @@ -68,9 +68,6 @@ if [ "$action" == "update" ]; then runuser -l 'lux-neo' -c 'export NODE_ENV=production; npm --prefix ~/src install ~/src --only=production' cp /home/lux-neo/src/bin/luxcena-neo-cli.sh /usr/bin/luxcena-neo-cli.sh printf "Update complete.\n" - #printf "Update complete, run these commands to finish it completly:\n" - #printf "sudo /home/lux-neo/src/bin/post-update.sh\n" - #printf "sudo systemctl luxcena-neo start\n" systemctl start luxcena-neo elif [ "$action" == "uninstall" ]; then @@ -106,12 +103,45 @@ elif [ "$action" == "conf" ]; then elif [ "$action" == "start" ]; then systemctl start luxcena-neo + if [ "$2" == "boot" ]; then + systemctl enable luxcena-neo + printf "Now starting on boot...\n" + printf "Luxcena-neo service started...\n" + elif [ "$action" == "stop" ]; then systemctl stop luxcena-neo + if [ "$2" == "boot" ]; then + systemctl disable luxcena-neo + printf "Not longer active on boot...\n" + printf "Luxcena-neo service stopped...\n" + elif [ "$action" == "status" ]; then - printf '\e[93m%s\e[0m\n' "---Service status------------------" + printf "╭─────────────────────╮\n" + printf "│ Service active: " + [ $(systemctl is-active lucxena-neo) -eq "active" ] && printf '\e[32m%s\e[0m │\n' "yes" || printf '\e[31m%s\e[0m │\n' "no" + printf "│ Starts on boot: " + [ $(systemctl is-enabled lucxena-neo) -eq "enabled" ] && printf '\e[32m%s\e[0m │\n' "yes" || printf '\e[31m%s\e[0m │\n' "no" + printf "│ Has failed: " + [ $(systemctl is-failed lucxena-neo) -eq "failed" ] && printf '\e[32m%s\e[0m │\n' "yes" || printf '\e[31m%s\e[0m │\n' "no" + printf "╰─────────────────────╯\n\n" + + printf '\e[93m%s\e[0m\n' "━━━Service status━━━━━━━━━━━━━━━━━━" systemctl status luxcena-neo - printf '\e[93m%s\e[0m\n' "-----------------------------------" + printf '\e[93m%s\e[0m\n' "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + +elif [ "$action" == "log" ]; then + if [ "$2" == "sevice" ]; then + printf '\e[93m%s\e[0m\n' "━━━Service log (press ctrl+c to exit)━━━━━━━━━━━━━━━━━━" + tail -F -n 20 /home/lux-neo/logs/service.log + if [ "$2" == "app" ]; then + printf '\e[93m%s\e[0m\n' "━━━App log (press ctrl+c to exit)━━━━━━━━━━━━━━━━━━" + tail -F -n 20 /home/lux-neo/logs/logger.log + +elif [ "$action" == "version" ] || [ "$action" == "v" ]; then + printf "Version: Unknown\n" + +elif [ "$action" == "selectBranch" ] + printf "Current Branch \n" else usage fi -- cgit v1.2.3 From 069552dc479a6c420d6440c9fdefb4ddf63eac08 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Wed, 5 Dec 2018 23:12:12 +0100 Subject: :hammer: Fix syntax --- bin/luxcena-neo-cli.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'bin') diff --git a/bin/luxcena-neo-cli.sh b/bin/luxcena-neo-cli.sh index 0dfc6d8..60adefd 100755 --- a/bin/luxcena-neo-cli.sh +++ b/bin/luxcena-neo-cli.sh @@ -106,6 +106,7 @@ elif [ "$action" == "start" ]; then if [ "$2" == "boot" ]; then systemctl enable luxcena-neo printf "Now starting on boot...\n" + fi printf "Luxcena-neo service started...\n" elif [ "$action" == "stop" ]; then @@ -113,6 +114,7 @@ elif [ "$action" == "stop" ]; then if [ "$2" == "boot" ]; then systemctl disable luxcena-neo printf "Not longer active on boot...\n" + fi printf "Luxcena-neo service stopped...\n" elif [ "$action" == "status" ]; then @@ -133,14 +135,16 @@ elif [ "$action" == "log" ]; then if [ "$2" == "sevice" ]; then printf '\e[93m%s\e[0m\n' "━━━Service log (press ctrl+c to exit)━━━━━━━━━━━━━━━━━━" tail -F -n 20 /home/lux-neo/logs/service.log + fi if [ "$2" == "app" ]; then printf '\e[93m%s\e[0m\n' "━━━App log (press ctrl+c to exit)━━━━━━━━━━━━━━━━━━" tail -F -n 20 /home/lux-neo/logs/logger.log + fi elif [ "$action" == "version" ] || [ "$action" == "v" ]; then printf "Version: Unknown\n" -elif [ "$action" == "selectBranch" ] +elif [ "$action" == "selectBranch" ]; then printf "Current Branch \n" else usage -- cgit v1.2.3 From a02968d77a3933311d8f6869967b75dad301705a Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Wed, 5 Dec 2018 23:21:22 +0100 Subject: :hammer: Fix typos and syntax --- bin/luxcena-neo-cli.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'bin') diff --git a/bin/luxcena-neo-cli.sh b/bin/luxcena-neo-cli.sh index 60adefd..a2b2336 100755 --- a/bin/luxcena-neo-cli.sh +++ b/bin/luxcena-neo-cli.sh @@ -120,11 +120,11 @@ elif [ "$action" == "stop" ]; then elif [ "$action" == "status" ]; then printf "╭─────────────────────╮\n" printf "│ Service active: " - [ $(systemctl is-active lucxena-neo) -eq "active" ] && printf '\e[32m%s\e[0m │\n' "yes" || printf '\e[31m%s\e[0m │\n' "no" + [[ "$(systemctl is-active lucxena-neo)" == *"active"* ]] && printf '\e[32m%s\e[0m │\n' "yes" || printf '\e[31m%s\e[0m │\n' "no" printf "│ Starts on boot: " - [ $(systemctl is-enabled lucxena-neo) -eq "enabled" ] && printf '\e[32m%s\e[0m │\n' "yes" || printf '\e[31m%s\e[0m │\n' "no" + [[ "$(systemctl is-enabled lucxena-neo)" == *"enabled"* ]] && printf '\e[32m%s\e[0m │\n' "yes" || printf '\e[31m%s\e[0m │\n' "no" printf "│ Has failed: " - [ $(systemctl is-failed lucxena-neo) -eq "failed" ] && printf '\e[32m%s\e[0m │\n' "yes" || printf '\e[31m%s\e[0m │\n' "no" + [[ "$(systemctl is-failed lucxena-neo)" == *"failed"* ]] && printf '\e[32m%s\e[0m │\n' "yes" || printf '\e[31m%s\e[0m │\n' "no" printf "╰─────────────────────╯\n\n" printf '\e[93m%s\e[0m\n' "━━━Service status━━━━━━━━━━━━━━━━━━" @@ -132,7 +132,7 @@ elif [ "$action" == "status" ]; then printf '\e[93m%s\e[0m\n' "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" elif [ "$action" == "log" ]; then - if [ "$2" == "sevice" ]; then + if [ "$2" == "service" ]; then printf '\e[93m%s\e[0m\n' "━━━Service log (press ctrl+c to exit)━━━━━━━━━━━━━━━━━━" tail -F -n 20 /home/lux-neo/logs/service.log fi -- cgit v1.2.3 From ddfa2c672e0a6d8e10720d55a42c3ba453acdd85 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Wed, 5 Dec 2018 23:25:15 +0100 Subject: :hammer: Add skipNode on update, and typo --- bin/luxcena-neo-cli.sh | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'bin') diff --git a/bin/luxcena-neo-cli.sh b/bin/luxcena-neo-cli.sh index a2b2336..65f2d6d 100755 --- a/bin/luxcena-neo-cli.sh +++ b/bin/luxcena-neo-cli.sh @@ -65,10 +65,15 @@ if [ "$action" == "update" ]; then systemctl stop luxcena-neo runuser -l 'lux-neo' -c 'git -C ~/src pull' - runuser -l 'lux-neo' -c 'export NODE_ENV=production; npm --prefix ~/src install ~/src --only=production' + + if [ "$2" != "skipNode" ]; then + runuser -l 'lux-neo' -c 'export NODE_ENV=production; npm --prefix ~/src install ~/src --only=production' + fi + cp /home/lux-neo/src/bin/luxcena-neo-cli.sh /usr/bin/luxcena-neo-cli.sh printf "Update complete.\n" systemctl start luxcena-neo + exit 0 elif [ "$action" == "uninstall" ]; then tput setab 1 @@ -120,11 +125,11 @@ elif [ "$action" == "stop" ]; then elif [ "$action" == "status" ]; then printf "╭─────────────────────╮\n" printf "│ Service active: " - [[ "$(systemctl is-active lucxena-neo)" == *"active"* ]] && printf '\e[32m%s\e[0m │\n' "yes" || printf '\e[31m%s\e[0m │\n' "no" + [[ "$(systemctl is-active luxcena-neo)" == *"active"* ]] && printf '\e[32m%s\e[0m │\n' "yes" || printf '\e[31m%s\e[0m │\n' "no" printf "│ Starts on boot: " - [[ "$(systemctl is-enabled lucxena-neo)" == *"enabled"* ]] && printf '\e[32m%s\e[0m │\n' "yes" || printf '\e[31m%s\e[0m │\n' "no" + [[ "$(systemctl is-enabled luxcena-neo)" == *"enabled"* ]] && printf '\e[32m%s\e[0m │\n' "yes" || printf '\e[31m%s\e[0m │\n' "no" printf "│ Has failed: " - [[ "$(systemctl is-failed lucxena-neo)" == *"failed"* ]] && printf '\e[32m%s\e[0m │\n' "yes" || printf '\e[31m%s\e[0m │\n' "no" + [[ "$(systemctl is-failed luxcena-neo)" == *"failed"* ]] && printf '\e[32m%s\e[0m │\n' "yes" || printf '\e[31m%s\e[0m │\n' "no" printf "╰─────────────────────╯\n\n" printf '\e[93m%s\e[0m\n' "━━━Service status━━━━━━━━━━━━━━━━━━" -- cgit v1.2.3 From e558550db74f80f947e283a7fbddf5d9d549f68e Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Wed, 5 Dec 2018 23:32:59 +0100 Subject: :construction: Add first line with current command when starting CLI --- bin/luxcena-neo-cli.sh | 3 +++ 1 file changed, 3 insertions(+) (limited to 'bin') diff --git a/bin/luxcena-neo-cli.sh b/bin/luxcena-neo-cli.sh index 65f2d6d..f2b0e9d 100755 --- a/bin/luxcena-neo-cli.sh +++ b/bin/luxcena-neo-cli.sh @@ -49,6 +49,9 @@ while getopts ":a:" o; do done shift $((OPTIND-1)) +printf "\n" +printf "\e[37mLuxcena-neo-cli command: \e[90m'$*'.\n\n\e[0m" + action=$1 if [ "$action" == "update" ]; then -- cgit v1.2.3 From 3ffabe1ba35565df433536a2ba370b0e4967e940 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Wed, 5 Dec 2018 23:37:47 +0100 Subject: :lipstick: Prettify welcome message --- bin/luxcena-neo-cli.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'bin') diff --git a/bin/luxcena-neo-cli.sh b/bin/luxcena-neo-cli.sh index f2b0e9d..4ecfc0f 100755 --- a/bin/luxcena-neo-cli.sh +++ b/bin/luxcena-neo-cli.sh @@ -49,8 +49,7 @@ while getopts ":a:" o; do done shift $((OPTIND-1)) -printf "\n" -printf "\e[37mLuxcena-neo-cli command: \e[90m'$*'.\n\n\e[0m" +printf "\e[37m> \e[4mLuxcena-\e[31mn\e[34me\e[34mo\e[37-cli command: \e[90m'$*'.\n\n\e[0m" action=$1 if [ "$action" == "update" ]; then -- cgit v1.2.3 From 57f370771399ca0625849d11816067a7af83a5ac Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Wed, 5 Dec 2018 23:39:26 +0100 Subject: :lipstick: Correctyly prettify --- bin/luxcena-neo-cli.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bin') diff --git a/bin/luxcena-neo-cli.sh b/bin/luxcena-neo-cli.sh index 4ecfc0f..2959dc9 100755 --- a/bin/luxcena-neo-cli.sh +++ b/bin/luxcena-neo-cli.sh @@ -49,7 +49,7 @@ while getopts ":a:" o; do done shift $((OPTIND-1)) -printf "\e[37m> \e[4mLuxcena-\e[31mn\e[34me\e[34mo\e[37-cli command: \e[90m'$*'.\n\n\e[0m" +printf "\e[37m> \e[4mLuxcena-\e[31mn\e[32me\e[34mo\e[37m-cli command: \e[90m'$*'.\n\n\e[0m" action=$1 if [ "$action" == "update" ]; then -- cgit v1.2.3 From d58f59df39ecc93eeb979d2d3da9836b2b5dfb25 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Wed, 5 Dec 2018 23:41:08 +0100 Subject: :lipstick: Maybe final styling of startmsg? --- bin/luxcena-neo-cli.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bin') diff --git a/bin/luxcena-neo-cli.sh b/bin/luxcena-neo-cli.sh index 2959dc9..b91d9b3 100755 --- a/bin/luxcena-neo-cli.sh +++ b/bin/luxcena-neo-cli.sh @@ -49,7 +49,7 @@ while getopts ":a:" o; do done shift $((OPTIND-1)) -printf "\e[37m> \e[4mLuxcena-\e[31mn\e[32me\e[34mo\e[37m-cli command: \e[90m'$*'.\n\n\e[0m" +printf "\e[4mLuxcena-\e[31mn\e[32me\e[34mo\e[37m-cli. [args: \e[90m'$*'.\n\n\e[0m]" action=$1 if [ "$action" == "update" ]; then -- cgit v1.2.3 From ff3ba1d6cc29402bd0938baa52e0cdf854a9a745 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Wed, 5 Dec 2018 23:42:01 +0100 Subject: :prettify: Now we might be getting somewhere with the styling --- bin/luxcena-neo-cli.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bin') diff --git a/bin/luxcena-neo-cli.sh b/bin/luxcena-neo-cli.sh index b91d9b3..59cf5b5 100755 --- a/bin/luxcena-neo-cli.sh +++ b/bin/luxcena-neo-cli.sh @@ -49,7 +49,7 @@ while getopts ":a:" o; do done shift $((OPTIND-1)) -printf "\e[4mLuxcena-\e[31mn\e[32me\e[34mo\e[37m-cli. [args: \e[90m'$*'.\n\n\e[0m]" +printf "\e[37mLuxcena-\e[31mn\e[32me\e[34mo\e[37m-cli. [args: \e[90m'$*']\n\n\e[0m" action=$1 if [ "$action" == "update" ]; then -- cgit v1.2.3 From 921de6d0023f09db986dbed1c25c4e27196d3fdb Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Wed, 5 Dec 2018 23:48:05 +0100 Subject: :lipstick: Add branch-change func --- bin/luxcena-neo-cli.sh | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'bin') diff --git a/bin/luxcena-neo-cli.sh b/bin/luxcena-neo-cli.sh index 59cf5b5..a3c46bf 100755 --- a/bin/luxcena-neo-cli.sh +++ b/bin/luxcena-neo-cli.sh @@ -49,7 +49,7 @@ while getopts ":a:" o; do done shift $((OPTIND-1)) -printf "\e[37mLuxcena-\e[31mn\e[32me\e[34mo\e[37m-cli. [args: \e[90m'$*']\n\n\e[0m" +printf "\e[37mLuxcena-\e[31mn\e[32me\e[34mo\e[37m-cli \e[90m[args: '$*']\n\n\e[0m" action=$1 if [ "$action" == "update" ]; then @@ -149,10 +149,16 @@ elif [ "$action" == "log" ]; then fi elif [ "$action" == "version" ] || [ "$action" == "v" ]; then - printf "Version: Unknown\n" + printf "╭─────────────────────╮\n" + printf "│ Version: Unknown │\n" + printf "│ branch : $(git branch | grep \* | cut -d ' ' -f2) │\n" + printf "╰─────────────────────╯\n\n" elif [ "$action" == "selectBranch" ]; then - printf "Current Branch \n" + printf "Current $(git branch | grep \* | cut -d ' ' -f2)Branch \n" + runuser -l 'lux-neo' -c "git -C ~/src checkout $2" + printf "\e[91mYou should now run \e[90m'sudo lux-neo update'\e[91m!\n" + else usage fi -- cgit v1.2.3 From 52cd3bb8d9c0f1f63cf30e2a474141e3385069d3 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Wed, 5 Dec 2018 23:53:19 +0100 Subject: :construction: Add path to branch-checks --- bin/luxcena-neo-cli.sh | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'bin') diff --git a/bin/luxcena-neo-cli.sh b/bin/luxcena-neo-cli.sh index a3c46bf..d744869 100755 --- a/bin/luxcena-neo-cli.sh +++ b/bin/luxcena-neo-cli.sh @@ -151,14 +151,13 @@ elif [ "$action" == "log" ]; then elif [ "$action" == "version" ] || [ "$action" == "v" ]; then printf "╭─────────────────────╮\n" printf "│ Version: Unknown │\n" - printf "│ branch : $(git branch | grep \* | cut -d ' ' -f2) │\n" + printf "│ branch : $(git branch -C /home/lux-neo/src | grep \* | cut -d ' ' -f2) │\n" printf "╰─────────────────────╯\n\n" elif [ "$action" == "selectBranch" ]; then - printf "Current $(git branch | grep \* | cut -d ' ' -f2)Branch \n" - runuser -l 'lux-neo' -c "git -C ~/src checkout $2" - printf "\e[91mYou should now run \e[90m'sudo lux-neo update'\e[91m!\n" - + printf "Current $(git -C /home/lux-neo/src branch | grep \* | cut -d ' ' -f2)Branch \n" + runuser -l 'lux-neo' -c "git -C ~/src checkout $2" || printf "\e[91mYou should now run \e[90m'sudo lux-neo update'\e[91m!\n" + else usage fi -- cgit v1.2.3 From c1392518922a6438c6828f3eb271a60163e011c6 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Wed, 5 Dec 2018 23:55:17 +0100 Subject: :construction: Make branch check work --- bin/luxcena-neo-cli.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'bin') diff --git a/bin/luxcena-neo-cli.sh b/bin/luxcena-neo-cli.sh index d744869..ba55d36 100755 --- a/bin/luxcena-neo-cli.sh +++ b/bin/luxcena-neo-cli.sh @@ -151,13 +151,13 @@ elif [ "$action" == "log" ]; then elif [ "$action" == "version" ] || [ "$action" == "v" ]; then printf "╭─────────────────────╮\n" printf "│ Version: Unknown │\n" - printf "│ branch : $(git branch -C /home/lux-neo/src | grep \* | cut -d ' ' -f2) │\n" + printf "│ branch : $(git -C /home/lux-neo/src branch | grep \* | cut -d ' ' -f2) │\n" printf "╰─────────────────────╯\n\n" elif [ "$action" == "selectBranch" ]; then printf "Current $(git -C /home/lux-neo/src branch | grep \* | cut -d ' ' -f2)Branch \n" runuser -l 'lux-neo' -c "git -C ~/src checkout $2" || printf "\e[91mYou should now run \e[90m'sudo lux-neo update'\e[91m!\n" - + else usage fi -- cgit v1.2.3 From e56c60e17f5060203c993c852272e795b3ee6224 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 6 Dec 2018 00:15:57 +0100 Subject: :construction: Stash before changing branch --- bin/luxcena-neo-cli.sh | 1 + 1 file changed, 1 insertion(+) (limited to 'bin') diff --git a/bin/luxcena-neo-cli.sh b/bin/luxcena-neo-cli.sh index ba55d36..defb766 100755 --- a/bin/luxcena-neo-cli.sh +++ b/bin/luxcena-neo-cli.sh @@ -156,6 +156,7 @@ elif [ "$action" == "version" ] || [ "$action" == "v" ]; then elif [ "$action" == "selectBranch" ]; then printf "Current $(git -C /home/lux-neo/src branch | grep \* | cut -d ' ' -f2)Branch \n" + runuser -l 'lux-neo' -c "git -C ~/src stash" runuser -l 'lux-neo' -c "git -C ~/src checkout $2" || printf "\e[91mYou should now run \e[90m'sudo lux-neo update'\e[91m!\n" else -- cgit v1.2.3