diff --git a/base.sh b/base.sh
deleted file mode 100644
index 5a0c085..0000000
--- a/base.sh
+++ /dev/null
@@ -1,204 +0,0 @@
-## Dockerfile
-cat >Dockerfile <<- 'Dockerfile'
-# syntax = docker/dockerfile:1.2
-FROM quay.io/archlinux/archlinux:base-devel
-USER root
-
-# Docker ENV variables
-# # Required
-# ENV MYVNC_VNCPASS
-# # Optional
-# ENV MYVNC_CUSTOM_TITLE
-# ENV MYVNC_PROXYPATH (eg, "/subpath/" or "/subpath")
-# ENV MYVNC_VNCSHARING (eg, "true" to allow sharing (defaults to "false"))
-# ENV MYVNC_VNCSERVER_HOST (eg, localhost or 192.168.1.1)
-# ENV MYVNC_VNCSERVER_PORT (eg, 5900)
-
-# Build ARG for additional pacman packages to install (eg, openssh)
-ARG pkg
-
-# Install packages
-COPY mirrorlist /etc/pacman.d/mirrorlist
-RUN pacman-key --init \
- && sed -i '/ParallelDownloads/c ParallelDownloads = 10' /etc/pacman.conf \
- && pacman -Sy --ask 4 archlinux-keyring \
- && pacman -Su --ask 4 --needed \
- sudo bash-completion ${pkg} \
- inetutils python-numpy python-setuptools \
- nginx-mainline \
- && pacman -Scc --ask 4 \
- && useradd --create-home --gid users --shell /usr/bin/bash user \
- && echo 'user ALL=(ALL:ALL) NOPASSWD: MISCELLANEOUS, /usr/bin/nginx' >/etc/sudoers.d/zz-DOCKER \
- && echo 'Defaults lecture = never' >>/etc/sudoers.d/zz-DOCKER \
- && passwd -l root >/dev/null 2>&1 \
- && sed '/^http {/a\ \
- include /app/nginx/\*.conf;\n\ \
- types_hash_max_size 4096;\n\ \
- server_names_hash_bucket_size 128;\n' -i /etc/nginx/nginx.conf \
- && mkdir -p /app/init.d /app/nginx /app/logs
-
-# Install noVNC
-COPY novnc /app/novnc
-
-# Install all init scripts
-COPY docker-entrypoint.sh /docker-entrypoint.sh
-COPY 01-init.sh 10-novnc.sh 10-nginx.sh /app/init.d/
-
-# Proper permissions
-RUN chmod +x /docker-entrypoint.sh /app/init.d/* \
- && chown -R user:users /app
-
-# Default environment
-USER user
-WORKDIR /home/user
-ENV DISPLAY=:0
-ENV SHELL=/usr/bin/bash
-
-# Expose nginx port for VNC webui
-EXPOSE 6900
-
-# Docker entrypoint
-ENTRYPOINT ["/docker-entrypoint.sh"]
-Dockerfile
-
-## Init script, always runs first
-cat >01-init.sh <<- '01-init.sh'
-#!/usr/bin/env bash
-# Create base directories
-for dir in vnc config ssh
-do
- [ -d ~/.${dir} ] || mkdir -p ~/.${dir}
-done
-
-## OPTIONAL: More commands may be added below
-
-01-init.sh
-
-## NoVNC setup
-cat >10-novnc.sh <<- '10-novnc.sh'
-#!/usr/bin/env bash
-# Turn vnc sharing on/off
-if [[ ${MYVNC_VNCSHARING} == "true" ]] || [[ ${MYVNC_VNCSHARING} == "1" ]]
-then
- _MYVNC_VNCSHARING=true
-else
- _MYVNC_VNCSHARING=false
-fi
-
-# Always default to remote scaling
-sed -i "/UI.initSetting\|resize/ s/resize', '.*');/resize', 'scale');/" /app/novnc/app/ui.js
-
-# Always default to autoconnect=true
-sed -i "/let autoconnect/ s/autoconnect', .*);/autoconnect', true);/" /app/novnc/app/ui.js
-
-# Change vnc shared view settings (defaults to false/off)
-sed -i "/UI.initSetting\|shared/ s/shared', .*);/shared', ${_MYVNC_VNCSHARING});/" /app/novnc/app/ui.js
-
-# NoVNC custom title
-sed -i "/
noVNC<\/title>/ s/noVNC/${MYVNC_CUSTOM_TITLE:-noVNC}/g" /app/novnc/*.html
-
-# Apply subpath to websocket
-if [[ ${MYVNC_PROXYPATH} == "/" ]]
-then
- unset _MYVNC_PROXYPATH
-elif [ ${MYVNC_PROXYPATH} ]
-then
- _MYVNC_PROXYPATH=$(echo ${MYVNC_PROXYPATH%/} | sed "s|^.*/||")
- sed -i "/UI.initSetting/ s|websockify|${_MYVNC_PROXYPATH}/&|" /app/novnc/app/ui.js
-fi
-
-# Start NoVNC
-/app/novnc/utils/novnc_proxy \
- --listen 6080 \
- --vnc ${MYVNC_VNCSERVER_HOST:-localhost}:${MYVNC_VNCSERVER_PORT:-5900} \
- --file-only &
-10-novnc.sh
-
-## Nginx setup
-cat >10-nginx.sh <<- '10-nginx.sh'
-#!/usr/bin/env bash
-# Reformat path
-if [[ ${MYVNC_PROXYPATH} == "/" ]]
-then
- unset _MYVNC_PROXYPATH
-elif [ ${MYVNC_PROXYPATH} ]
-then
- _MYVNC_PROXYPATH=$(echo ${MYVNC_PROXYPATH%/} | sed "s|^.*/||;s|^|/|")
-fi
-
-# Add novnc virtual proxy conf
-cat >/app/nginx/novnc.conf <<- novnc
-upstream vnc_proxy {
- server 127.0.0.1:6080;
-}
-
-server {
- listen 6900;
-
- location ${_MYVNC_PROXYPATH}/websockify {
- proxy_http_version 1.1;
- proxy_pass http://vnc_proxy/;
- proxy_set_header Upgrade \$http_upgrade;
- proxy_set_header Connection "upgrade";
-
- # VNC connection timeout
- proxy_read_timeout 3600s;
- proxy_send_timeout 3600s;
-
- # Disable cache
- proxy_buffering off;
- }
-
- location ${_MYVNC_PROXYPATH}/ {
- index vnc.html;
- alias /app/novnc/;
- try_files \$uri \$uri/ /vnc.html;
-
- # In the location block related to noVNC
- add_header Cache-Control no-cache;
- }
-}
-novnc
-
-# Start nginx
-sudo /usr/bin/nginx -g "daemon off;" &
-10-nginx.sh
-
-## Docker entrypoint
-cat >docker-entrypoint.sh <<- 'docker-entrypoint.sh'
-#!/usr/bin/env bash
-# Export all variables
-set -a
-
-# Abort if an error is encountered
-set -e
-
-# SSH config
-if [ -f ~/.ssh/id_ed25519 ]
-then
- chmod 0600 ~/.ssh/id_ed25519
-fi
-
-# Run all scripts in init folder
-for file in /app/init.d/*.sh
-do
- /usr/bin/bash -c ${file} >>/app/logs/$(echo ${file} | sed 's|/app/init.d/||;s|\.sh$||').log
-done
-
-# Read cli parameters
-exec "${@}" &
-
-# Monitor log
-tail -f /app/logs/*.log
-docker-entrypoint.sh
-
-## Fetch latest mirrorlist
-curl --fail --silent https://myvelabs.com/lab/archlinux/raw/branch/master/mirrorlist -o mirrorlist
-
-## Docker build
-# eg, ARCHPKG=openssh
-# eg, BUILDTAG=base
-DOCKER_BUILDKIT=1 docker build ./. \
- --build-arg pkg=${ARCHPKG:-""} \
- --tag myvnc/${BUILDTAG:-base} \
- && rm -f Dockerfile *.sh mirrorlist
\ No newline at end of file
diff --git a/base/Dockerfile b/base/Dockerfile
new file mode 100644
index 0000000..29faa29
--- /dev/null
+++ b/base/Dockerfile
@@ -0,0 +1,59 @@
+# syntax = docker/dockerfile:1.2
+FROM quay.io/archlinux/archlinux:base-devel
+USER root
+
+# Docker ENV variables
+# # Required
+# ENV MYVNC_VNCPASS
+# # Optional
+# ENV MYVNC_CUSTOM_TITLE
+# ENV MYVNC_PROXYPATH (eg, "/subpath/" or "/subpath")
+# ENV MYVNC_VNCSHARING (eg, "true" to allow sharing (defaults to "false"))
+# ENV MYVNC_VNCSERVER_HOST (eg, localhost or 192.168.1.1)
+# ENV MYVNC_VNCSERVER_PORT (eg, 5900)
+
+# Build ARG for additional pacman packages to install (eg, openssh)
+ARG pkg
+
+# Install packages
+COPY mirrorlist /etc/pacman.d/mirrorlist
+RUN pacman-key --init \
+ && sed -i '/ParallelDownloads/c ParallelDownloads = 10' /etc/pacman.conf \
+ && pacman -Sy --ask 4 archlinux-keyring \
+ && pacman -Su --ask 4 --needed \
+ sudo bash-completion ${pkg} \
+ inetutils python-numpy python-setuptools \
+ nginx-mainline \
+ && pacman -Scc --ask 4 \
+ && useradd --create-home --gid users --shell /usr/bin/bash user \
+ && echo 'user ALL=(ALL:ALL) NOPASSWD: MISCELLANEOUS, /usr/bin/nginx' >/etc/sudoers.d/zz-DOCKER \
+ && echo 'Defaults lecture = never' >>/etc/sudoers.d/zz-DOCKER \
+ && passwd -l root >/dev/null 2>&1 \
+ && sed '/^http {/a\ \
+ include /app/nginx/\*.conf;\n\ \
+ types_hash_max_size 4096;\n\ \
+ server_names_hash_bucket_size 128;\n' -i /etc/nginx/nginx.conf \
+ && mkdir -p /app/init.d /app/nginx /app/logs
+
+# Install noVNC
+COPY novnc /app/novnc
+
+# Install all init scripts
+COPY docker-entrypoint.sh /docker-entrypoint.sh
+COPY 01-init.sh 10-novnc.sh 10-nginx.sh /app/init.d/
+
+# Proper permissions
+RUN chmod +x /docker-entrypoint.sh /app/init.d/* \
+ && chown -R user:users /app
+
+# Default environment
+USER user
+WORKDIR /home/user
+ENV DISPLAY=:0
+ENV SHELL=/usr/bin/bash
+
+# Expose nginx port for VNC webui
+EXPOSE 6900
+
+# Docker entrypoint
+ENTRYPOINT ["/docker-entrypoint.sh"]
diff --git a/base/app/entrypoint b/base/app/entrypoint
new file mode 100755
index 0000000..b1ea375
--- /dev/null
+++ b/base/app/entrypoint
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+# Export all variables
+set -a
+
+# Abort if an error is encountered
+set -e
+
+# SSH config
+if [ -f ~/.ssh/id_ed25519 ]
+then
+ chmod 0600 ~/.ssh/id_ed25519
+fi
+
+# Run all scripts in init folder
+for file in /app/init.d/*.sh
+do
+ /usr/bin/bash -c ${file} >>/app/logs/$(echo ${file} | sed 's|/app/init.d/||;s|\.sh$||').log
+done
+
+# Read cli parameters
+exec "${@}" &
+
+# Monitor log
+tail -f /app/logs/*.log
diff --git a/base/app/init.d/01-init.sh b/base/app/init.d/01-init.sh
new file mode 100755
index 0000000..23a21d3
--- /dev/null
+++ b/base/app/init.d/01-init.sh
@@ -0,0 +1,6 @@
+#!/usr/bin/env bash
+# Create base directories
+for dir in vnc config ssh
+do
+ [ -d ~/.${dir} ] || mkdir -p ~/.${dir}
+done
diff --git a/base/app/init.d/10-nginx.sh b/base/app/init.d/10-nginx.sh
new file mode 100755
index 0000000..c369e18
--- /dev/null
+++ b/base/app/init.d/10-nginx.sh
@@ -0,0 +1,46 @@
+#!/usr/bin/env bash
+# Reformat path
+if [[ ${MYVNC_PROXYPATH} == "/" ]]
+then
+ unset _MYVNC_PROXYPATH
+elif [ ${MYVNC_PROXYPATH} ]
+then
+ _MYVNC_PROXYPATH=$(echo ${MYVNC_PROXYPATH%/} | sed "s|^.*/||;s|^|/|")
+fi
+
+# Add novnc virtual proxy conf
+cat >/app/nginx/novnc.conf <<- novnc
+upstream vnc_proxy {
+ server 127.0.0.1:6080;
+}
+
+server {
+ listen 6900;
+
+ location ${_MYVNC_PROXYPATH}/websockify {
+ proxy_http_version 1.1;
+ proxy_pass http://vnc_proxy/;
+ proxy_set_header Upgrade \$http_upgrade;
+ proxy_set_header Connection "upgrade";
+
+ # VNC connection timeout
+ proxy_read_timeout 3600s;
+ proxy_send_timeout 3600s;
+
+ # Disable cache
+ proxy_buffering off;
+ }
+
+ location ${_MYVNC_PROXYPATH}/ {
+ index vnc.html;
+ alias /app/novnc/;
+ try_files \$uri \$uri/ /vnc.html;
+
+ # In the location block related to noVNC
+ add_header Cache-Control no-cache;
+ }
+}
+novnc
+
+# Start nginx
+sudo /usr/bin/nginx -g "daemon off;" &
diff --git a/base/app/init.d/10-novnc.sh b/base/app/init.d/10-novnc.sh
new file mode 100755
index 0000000..afa6d4c
--- /dev/null
+++ b/base/app/init.d/10-novnc.sh
@@ -0,0 +1,36 @@
+#!/usr/bin/env bash
+# Turn vnc sharing on/off
+if [[ ${MYVNC_VNCSHARING} == "true" ]] || [[ ${MYVNC_VNCSHARING} == "1" ]]
+then
+ _MYVNC_VNCSHARING=true
+else
+ _MYVNC_VNCSHARING=false
+fi
+
+# Always default to remote scaling
+sed -i "/UI.initSetting\|resize/ s/resize', '.*');/resize', 'scale');/" /app/novnc/app/ui.js
+
+# Always default to autoconnect=true
+sed -i "/let autoconnect/ s/autoconnect', .*);/autoconnect', true);/" /app/novnc/app/ui.js
+
+# Change vnc shared view settings (defaults to false/off)
+sed -i "/UI.initSetting\|shared/ s/shared', .*);/shared', ${_MYVNC_VNCSHARING});/" /app/novnc/app/ui.js
+
+# NoVNC custom title
+sed -i "/noVNC<\/title>/ s/noVNC/${MYVNC_CUSTOM_TITLE:-noVNC}/g" /app/novnc/*.html
+
+# Apply subpath to websocket
+if [[ ${MYVNC_PROXYPATH} == "/" ]]
+then
+ unset _MYVNC_PROXYPATH
+elif [ ${MYVNC_PROXYPATH} ]
+then
+ _MYVNC_PROXYPATH=$(echo ${MYVNC_PROXYPATH%/} | sed "s|^.*/||")
+ sed -i "/UI.initSetting/ s|websockify|${_MYVNC_PROXYPATH}/&|" /app/novnc/app/ui.js
+fi
+
+# Start NoVNC
+/app/novnc/utils/novnc_proxy \
+ --listen 6080 \
+ --vnc ${MYVNC_VNCSERVER_HOST:-localhost}:${MYVNC_VNCSERVER_PORT:-5900} \
+ --file-only &
diff --git a/novnc/.github/ISSUE_TEMPLATE/bug_report.md b/base/app/novnc/.github/ISSUE_TEMPLATE/bug_report.md
similarity index 100%
rename from novnc/.github/ISSUE_TEMPLATE/bug_report.md
rename to base/app/novnc/.github/ISSUE_TEMPLATE/bug_report.md
diff --git a/novnc/.github/ISSUE_TEMPLATE/config.yml b/base/app/novnc/.github/ISSUE_TEMPLATE/config.yml
similarity index 100%
rename from novnc/.github/ISSUE_TEMPLATE/config.yml
rename to base/app/novnc/.github/ISSUE_TEMPLATE/config.yml
diff --git a/novnc/.github/ISSUE_TEMPLATE/feature_request.md b/base/app/novnc/.github/ISSUE_TEMPLATE/feature_request.md
similarity index 100%
rename from novnc/.github/ISSUE_TEMPLATE/feature_request.md
rename to base/app/novnc/.github/ISSUE_TEMPLATE/feature_request.md
diff --git a/novnc/.github/workflows/deploy.yml b/base/app/novnc/.github/workflows/deploy.yml
similarity index 100%
rename from novnc/.github/workflows/deploy.yml
rename to base/app/novnc/.github/workflows/deploy.yml
diff --git a/novnc/.github/workflows/lint.yml b/base/app/novnc/.github/workflows/lint.yml
similarity index 100%
rename from novnc/.github/workflows/lint.yml
rename to base/app/novnc/.github/workflows/lint.yml
diff --git a/novnc/.github/workflows/test.yml b/base/app/novnc/.github/workflows/test.yml
similarity index 100%
rename from novnc/.github/workflows/test.yml
rename to base/app/novnc/.github/workflows/test.yml
diff --git a/novnc/.github/workflows/translate.yml b/base/app/novnc/.github/workflows/translate.yml
similarity index 100%
rename from novnc/.github/workflows/translate.yml
rename to base/app/novnc/.github/workflows/translate.yml
diff --git a/novnc/.gitignore b/base/app/novnc/.gitignore
similarity index 100%
rename from novnc/.gitignore
rename to base/app/novnc/.gitignore
diff --git a/novnc/.gitmodules b/base/app/novnc/.gitmodules
similarity index 100%
rename from novnc/.gitmodules
rename to base/app/novnc/.gitmodules
diff --git a/novnc/AUTHORS b/base/app/novnc/AUTHORS
similarity index 100%
rename from novnc/AUTHORS
rename to base/app/novnc/AUTHORS
diff --git a/novnc/LICENSE.txt b/base/app/novnc/LICENSE.txt
similarity index 100%
rename from novnc/LICENSE.txt
rename to base/app/novnc/LICENSE.txt
diff --git a/novnc/README.md b/base/app/novnc/README.md
similarity index 100%
rename from novnc/README.md
rename to base/app/novnc/README.md
diff --git a/novnc/app/error-handler.js b/base/app/novnc/app/error-handler.js
similarity index 100%
rename from novnc/app/error-handler.js
rename to base/app/novnc/app/error-handler.js
diff --git a/novnc/app/images/alt.svg b/base/app/novnc/app/images/alt.svg
similarity index 100%
rename from novnc/app/images/alt.svg
rename to base/app/novnc/app/images/alt.svg
diff --git a/novnc/app/images/clipboard.svg b/base/app/novnc/app/images/clipboard.svg
similarity index 100%
rename from novnc/app/images/clipboard.svg
rename to base/app/novnc/app/images/clipboard.svg
diff --git a/novnc/app/images/connect.svg b/base/app/novnc/app/images/connect.svg
similarity index 100%
rename from novnc/app/images/connect.svg
rename to base/app/novnc/app/images/connect.svg
diff --git a/novnc/app/images/ctrl.svg b/base/app/novnc/app/images/ctrl.svg
similarity index 100%
rename from novnc/app/images/ctrl.svg
rename to base/app/novnc/app/images/ctrl.svg
diff --git a/novnc/app/images/ctrlaltdel.svg b/base/app/novnc/app/images/ctrlaltdel.svg
similarity index 100%
rename from novnc/app/images/ctrlaltdel.svg
rename to base/app/novnc/app/images/ctrlaltdel.svg
diff --git a/novnc/app/images/disconnect.svg b/base/app/novnc/app/images/disconnect.svg
similarity index 100%
rename from novnc/app/images/disconnect.svg
rename to base/app/novnc/app/images/disconnect.svg
diff --git a/novnc/app/images/drag.svg b/base/app/novnc/app/images/drag.svg
similarity index 100%
rename from novnc/app/images/drag.svg
rename to base/app/novnc/app/images/drag.svg
diff --git a/novnc/app/images/error.svg b/base/app/novnc/app/images/error.svg
similarity index 100%
rename from novnc/app/images/error.svg
rename to base/app/novnc/app/images/error.svg
diff --git a/novnc/app/images/esc.svg b/base/app/novnc/app/images/esc.svg
similarity index 100%
rename from novnc/app/images/esc.svg
rename to base/app/novnc/app/images/esc.svg
diff --git a/novnc/app/images/expander.svg b/base/app/novnc/app/images/expander.svg
similarity index 100%
rename from novnc/app/images/expander.svg
rename to base/app/novnc/app/images/expander.svg
diff --git a/novnc/app/images/fullscreen.svg b/base/app/novnc/app/images/fullscreen.svg
similarity index 100%
rename from novnc/app/images/fullscreen.svg
rename to base/app/novnc/app/images/fullscreen.svg
diff --git a/novnc/app/images/handle.svg b/base/app/novnc/app/images/handle.svg
similarity index 100%
rename from novnc/app/images/handle.svg
rename to base/app/novnc/app/images/handle.svg
diff --git a/novnc/app/images/handle_bg.svg b/base/app/novnc/app/images/handle_bg.svg
similarity index 100%
rename from novnc/app/images/handle_bg.svg
rename to base/app/novnc/app/images/handle_bg.svg
diff --git a/novnc/app/images/icons/Makefile b/base/app/novnc/app/images/icons/Makefile
similarity index 100%
rename from novnc/app/images/icons/Makefile
rename to base/app/novnc/app/images/icons/Makefile
diff --git a/novnc/app/images/icons/novnc-icon-sm.svg b/base/app/novnc/app/images/icons/novnc-icon-sm.svg
similarity index 100%
rename from novnc/app/images/icons/novnc-icon-sm.svg
rename to base/app/novnc/app/images/icons/novnc-icon-sm.svg
diff --git a/novnc/app/images/icons/novnc-icon.svg b/base/app/novnc/app/images/icons/novnc-icon.svg
similarity index 100%
rename from novnc/app/images/icons/novnc-icon.svg
rename to base/app/novnc/app/images/icons/novnc-icon.svg
diff --git a/novnc/app/images/icons/novnc-ios-120.png b/base/app/novnc/app/images/icons/novnc-ios-120.png
similarity index 100%
rename from novnc/app/images/icons/novnc-ios-120.png
rename to base/app/novnc/app/images/icons/novnc-ios-120.png
diff --git a/novnc/app/images/icons/novnc-ios-152.png b/base/app/novnc/app/images/icons/novnc-ios-152.png
similarity index 100%
rename from novnc/app/images/icons/novnc-ios-152.png
rename to base/app/novnc/app/images/icons/novnc-ios-152.png
diff --git a/novnc/app/images/icons/novnc-ios-167.png b/base/app/novnc/app/images/icons/novnc-ios-167.png
similarity index 100%
rename from novnc/app/images/icons/novnc-ios-167.png
rename to base/app/novnc/app/images/icons/novnc-ios-167.png
diff --git a/novnc/app/images/icons/novnc-ios-180.png b/base/app/novnc/app/images/icons/novnc-ios-180.png
similarity index 100%
rename from novnc/app/images/icons/novnc-ios-180.png
rename to base/app/novnc/app/images/icons/novnc-ios-180.png
diff --git a/novnc/app/images/icons/novnc-ios-40.png b/base/app/novnc/app/images/icons/novnc-ios-40.png
similarity index 100%
rename from novnc/app/images/icons/novnc-ios-40.png
rename to base/app/novnc/app/images/icons/novnc-ios-40.png
diff --git a/novnc/app/images/icons/novnc-ios-58.png b/base/app/novnc/app/images/icons/novnc-ios-58.png
similarity index 100%
rename from novnc/app/images/icons/novnc-ios-58.png
rename to base/app/novnc/app/images/icons/novnc-ios-58.png
diff --git a/novnc/app/images/icons/novnc-ios-60.png b/base/app/novnc/app/images/icons/novnc-ios-60.png
similarity index 100%
rename from novnc/app/images/icons/novnc-ios-60.png
rename to base/app/novnc/app/images/icons/novnc-ios-60.png
diff --git a/novnc/app/images/icons/novnc-ios-80.png b/base/app/novnc/app/images/icons/novnc-ios-80.png
similarity index 100%
rename from novnc/app/images/icons/novnc-ios-80.png
rename to base/app/novnc/app/images/icons/novnc-ios-80.png
diff --git a/novnc/app/images/icons/novnc-ios-87.png b/base/app/novnc/app/images/icons/novnc-ios-87.png
similarity index 100%
rename from novnc/app/images/icons/novnc-ios-87.png
rename to base/app/novnc/app/images/icons/novnc-ios-87.png
diff --git a/novnc/app/images/icons/novnc-ios-icon.svg b/base/app/novnc/app/images/icons/novnc-ios-icon.svg
similarity index 100%
rename from novnc/app/images/icons/novnc-ios-icon.svg
rename to base/app/novnc/app/images/icons/novnc-ios-icon.svg
diff --git a/novnc/app/images/icons/novnc.ico b/base/app/novnc/app/images/icons/novnc.ico
similarity index 100%
rename from novnc/app/images/icons/novnc.ico
rename to base/app/novnc/app/images/icons/novnc.ico
diff --git a/novnc/app/images/info.svg b/base/app/novnc/app/images/info.svg
similarity index 100%
rename from novnc/app/images/info.svg
rename to base/app/novnc/app/images/info.svg
diff --git a/novnc/app/images/keyboard.svg b/base/app/novnc/app/images/keyboard.svg
similarity index 100%
rename from novnc/app/images/keyboard.svg
rename to base/app/novnc/app/images/keyboard.svg
diff --git a/novnc/app/images/power.svg b/base/app/novnc/app/images/power.svg
similarity index 100%
rename from novnc/app/images/power.svg
rename to base/app/novnc/app/images/power.svg
diff --git a/novnc/app/images/settings.svg b/base/app/novnc/app/images/settings.svg
similarity index 100%
rename from novnc/app/images/settings.svg
rename to base/app/novnc/app/images/settings.svg
diff --git a/novnc/app/images/tab.svg b/base/app/novnc/app/images/tab.svg
similarity index 100%
rename from novnc/app/images/tab.svg
rename to base/app/novnc/app/images/tab.svg
diff --git a/novnc/app/images/toggleextrakeys.svg b/base/app/novnc/app/images/toggleextrakeys.svg
similarity index 100%
rename from novnc/app/images/toggleextrakeys.svg
rename to base/app/novnc/app/images/toggleextrakeys.svg
diff --git a/novnc/app/images/warning.svg b/base/app/novnc/app/images/warning.svg
similarity index 100%
rename from novnc/app/images/warning.svg
rename to base/app/novnc/app/images/warning.svg
diff --git a/novnc/app/images/windows.svg b/base/app/novnc/app/images/windows.svg
similarity index 100%
rename from novnc/app/images/windows.svg
rename to base/app/novnc/app/images/windows.svg
diff --git a/novnc/app/locale/README b/base/app/novnc/app/locale/README
similarity index 100%
rename from novnc/app/locale/README
rename to base/app/novnc/app/locale/README
diff --git a/novnc/app/locale/cs.json b/base/app/novnc/app/locale/cs.json
similarity index 100%
rename from novnc/app/locale/cs.json
rename to base/app/novnc/app/locale/cs.json
diff --git a/novnc/app/locale/de.json b/base/app/novnc/app/locale/de.json
similarity index 100%
rename from novnc/app/locale/de.json
rename to base/app/novnc/app/locale/de.json
diff --git a/novnc/app/locale/el.json b/base/app/novnc/app/locale/el.json
similarity index 100%
rename from novnc/app/locale/el.json
rename to base/app/novnc/app/locale/el.json
diff --git a/novnc/app/locale/es.json b/base/app/novnc/app/locale/es.json
similarity index 100%
rename from novnc/app/locale/es.json
rename to base/app/novnc/app/locale/es.json
diff --git a/novnc/app/locale/fr.json b/base/app/novnc/app/locale/fr.json
similarity index 100%
rename from novnc/app/locale/fr.json
rename to base/app/novnc/app/locale/fr.json
diff --git a/novnc/app/locale/it.json b/base/app/novnc/app/locale/it.json
similarity index 100%
rename from novnc/app/locale/it.json
rename to base/app/novnc/app/locale/it.json
diff --git a/novnc/app/locale/ja.json b/base/app/novnc/app/locale/ja.json
similarity index 100%
rename from novnc/app/locale/ja.json
rename to base/app/novnc/app/locale/ja.json
diff --git a/novnc/app/locale/ko.json b/base/app/novnc/app/locale/ko.json
similarity index 100%
rename from novnc/app/locale/ko.json
rename to base/app/novnc/app/locale/ko.json
diff --git a/novnc/app/locale/nl.json b/base/app/novnc/app/locale/nl.json
similarity index 100%
rename from novnc/app/locale/nl.json
rename to base/app/novnc/app/locale/nl.json
diff --git a/novnc/app/locale/pl.json b/base/app/novnc/app/locale/pl.json
similarity index 100%
rename from novnc/app/locale/pl.json
rename to base/app/novnc/app/locale/pl.json
diff --git a/novnc/app/locale/pt_BR.json b/base/app/novnc/app/locale/pt_BR.json
similarity index 100%
rename from novnc/app/locale/pt_BR.json
rename to base/app/novnc/app/locale/pt_BR.json
diff --git a/novnc/app/locale/ru.json b/base/app/novnc/app/locale/ru.json
similarity index 100%
rename from novnc/app/locale/ru.json
rename to base/app/novnc/app/locale/ru.json
diff --git a/novnc/app/locale/sv.json b/base/app/novnc/app/locale/sv.json
similarity index 100%
rename from novnc/app/locale/sv.json
rename to base/app/novnc/app/locale/sv.json
diff --git a/novnc/app/locale/tr.json b/base/app/novnc/app/locale/tr.json
similarity index 100%
rename from novnc/app/locale/tr.json
rename to base/app/novnc/app/locale/tr.json
diff --git a/novnc/app/locale/zh_CN.json b/base/app/novnc/app/locale/zh_CN.json
similarity index 100%
rename from novnc/app/locale/zh_CN.json
rename to base/app/novnc/app/locale/zh_CN.json
diff --git a/novnc/app/locale/zh_TW.json b/base/app/novnc/app/locale/zh_TW.json
similarity index 100%
rename from novnc/app/locale/zh_TW.json
rename to base/app/novnc/app/locale/zh_TW.json
diff --git a/novnc/app/localization.js b/base/app/novnc/app/localization.js
similarity index 100%
rename from novnc/app/localization.js
rename to base/app/novnc/app/localization.js
diff --git a/novnc/app/sounds/CREDITS b/base/app/novnc/app/sounds/CREDITS
similarity index 100%
rename from novnc/app/sounds/CREDITS
rename to base/app/novnc/app/sounds/CREDITS
diff --git a/novnc/app/sounds/bell.mp3 b/base/app/novnc/app/sounds/bell.mp3
similarity index 100%
rename from novnc/app/sounds/bell.mp3
rename to base/app/novnc/app/sounds/bell.mp3
diff --git a/novnc/app/sounds/bell.oga b/base/app/novnc/app/sounds/bell.oga
similarity index 100%
rename from novnc/app/sounds/bell.oga
rename to base/app/novnc/app/sounds/bell.oga
diff --git a/novnc/app/styles/Orbitron700.ttf b/base/app/novnc/app/styles/Orbitron700.ttf
similarity index 100%
rename from novnc/app/styles/Orbitron700.ttf
rename to base/app/novnc/app/styles/Orbitron700.ttf
diff --git a/novnc/app/styles/Orbitron700.woff b/base/app/novnc/app/styles/Orbitron700.woff
similarity index 100%
rename from novnc/app/styles/Orbitron700.woff
rename to base/app/novnc/app/styles/Orbitron700.woff
diff --git a/novnc/app/styles/base.css b/base/app/novnc/app/styles/base.css
similarity index 100%
rename from novnc/app/styles/base.css
rename to base/app/novnc/app/styles/base.css
diff --git a/novnc/app/styles/input.css b/base/app/novnc/app/styles/input.css
similarity index 100%
rename from novnc/app/styles/input.css
rename to base/app/novnc/app/styles/input.css
diff --git a/novnc/app/ui.js b/base/app/novnc/app/ui.js
similarity index 100%
rename from novnc/app/ui.js
rename to base/app/novnc/app/ui.js
diff --git a/novnc/app/webutil.js b/base/app/novnc/app/webutil.js
similarity index 100%
rename from novnc/app/webutil.js
rename to base/app/novnc/app/webutil.js
diff --git a/novnc/core/base64.js b/base/app/novnc/core/base64.js
similarity index 100%
rename from novnc/core/base64.js
rename to base/app/novnc/core/base64.js
diff --git a/novnc/core/crypto/aes.js b/base/app/novnc/core/crypto/aes.js
similarity index 100%
rename from novnc/core/crypto/aes.js
rename to base/app/novnc/core/crypto/aes.js
diff --git a/novnc/core/crypto/bigint.js b/base/app/novnc/core/crypto/bigint.js
similarity index 100%
rename from novnc/core/crypto/bigint.js
rename to base/app/novnc/core/crypto/bigint.js
diff --git a/novnc/core/crypto/crypto.js b/base/app/novnc/core/crypto/crypto.js
similarity index 100%
rename from novnc/core/crypto/crypto.js
rename to base/app/novnc/core/crypto/crypto.js
diff --git a/novnc/core/crypto/des.js b/base/app/novnc/core/crypto/des.js
similarity index 100%
rename from novnc/core/crypto/des.js
rename to base/app/novnc/core/crypto/des.js
diff --git a/novnc/core/crypto/dh.js b/base/app/novnc/core/crypto/dh.js
similarity index 100%
rename from novnc/core/crypto/dh.js
rename to base/app/novnc/core/crypto/dh.js
diff --git a/novnc/core/crypto/md5.js b/base/app/novnc/core/crypto/md5.js
similarity index 100%
rename from novnc/core/crypto/md5.js
rename to base/app/novnc/core/crypto/md5.js
diff --git a/novnc/core/crypto/rsa.js b/base/app/novnc/core/crypto/rsa.js
similarity index 100%
rename from novnc/core/crypto/rsa.js
rename to base/app/novnc/core/crypto/rsa.js
diff --git a/novnc/core/decoders/copyrect.js b/base/app/novnc/core/decoders/copyrect.js
similarity index 100%
rename from novnc/core/decoders/copyrect.js
rename to base/app/novnc/core/decoders/copyrect.js
diff --git a/novnc/core/decoders/hextile.js b/base/app/novnc/core/decoders/hextile.js
similarity index 100%
rename from novnc/core/decoders/hextile.js
rename to base/app/novnc/core/decoders/hextile.js
diff --git a/novnc/core/decoders/jpeg.js b/base/app/novnc/core/decoders/jpeg.js
similarity index 100%
rename from novnc/core/decoders/jpeg.js
rename to base/app/novnc/core/decoders/jpeg.js
diff --git a/novnc/core/decoders/raw.js b/base/app/novnc/core/decoders/raw.js
similarity index 100%
rename from novnc/core/decoders/raw.js
rename to base/app/novnc/core/decoders/raw.js
diff --git a/novnc/core/decoders/rre.js b/base/app/novnc/core/decoders/rre.js
similarity index 100%
rename from novnc/core/decoders/rre.js
rename to base/app/novnc/core/decoders/rre.js
diff --git a/novnc/core/decoders/tight.js b/base/app/novnc/core/decoders/tight.js
similarity index 100%
rename from novnc/core/decoders/tight.js
rename to base/app/novnc/core/decoders/tight.js
diff --git a/novnc/core/decoders/tightpng.js b/base/app/novnc/core/decoders/tightpng.js
similarity index 100%
rename from novnc/core/decoders/tightpng.js
rename to base/app/novnc/core/decoders/tightpng.js
diff --git a/novnc/core/decoders/zrle.js b/base/app/novnc/core/decoders/zrle.js
similarity index 100%
rename from novnc/core/decoders/zrle.js
rename to base/app/novnc/core/decoders/zrle.js
diff --git a/novnc/core/deflator.js b/base/app/novnc/core/deflator.js
similarity index 100%
rename from novnc/core/deflator.js
rename to base/app/novnc/core/deflator.js
diff --git a/novnc/core/display.js b/base/app/novnc/core/display.js
similarity index 100%
rename from novnc/core/display.js
rename to base/app/novnc/core/display.js
diff --git a/novnc/core/encodings.js b/base/app/novnc/core/encodings.js
similarity index 100%
rename from novnc/core/encodings.js
rename to base/app/novnc/core/encodings.js
diff --git a/novnc/core/inflator.js b/base/app/novnc/core/inflator.js
similarity index 100%
rename from novnc/core/inflator.js
rename to base/app/novnc/core/inflator.js
diff --git a/novnc/core/input/domkeytable.js b/base/app/novnc/core/input/domkeytable.js
similarity index 100%
rename from novnc/core/input/domkeytable.js
rename to base/app/novnc/core/input/domkeytable.js
diff --git a/novnc/core/input/fixedkeys.js b/base/app/novnc/core/input/fixedkeys.js
similarity index 100%
rename from novnc/core/input/fixedkeys.js
rename to base/app/novnc/core/input/fixedkeys.js
diff --git a/novnc/core/input/gesturehandler.js b/base/app/novnc/core/input/gesturehandler.js
similarity index 100%
rename from novnc/core/input/gesturehandler.js
rename to base/app/novnc/core/input/gesturehandler.js
diff --git a/novnc/core/input/keyboard.js b/base/app/novnc/core/input/keyboard.js
similarity index 100%
rename from novnc/core/input/keyboard.js
rename to base/app/novnc/core/input/keyboard.js
diff --git a/novnc/core/input/keysym.js b/base/app/novnc/core/input/keysym.js
similarity index 100%
rename from novnc/core/input/keysym.js
rename to base/app/novnc/core/input/keysym.js
diff --git a/novnc/core/input/keysymdef.js b/base/app/novnc/core/input/keysymdef.js
similarity index 100%
rename from novnc/core/input/keysymdef.js
rename to base/app/novnc/core/input/keysymdef.js
diff --git a/novnc/core/input/util.js b/base/app/novnc/core/input/util.js
similarity index 100%
rename from novnc/core/input/util.js
rename to base/app/novnc/core/input/util.js
diff --git a/novnc/core/input/vkeys.js b/base/app/novnc/core/input/vkeys.js
similarity index 100%
rename from novnc/core/input/vkeys.js
rename to base/app/novnc/core/input/vkeys.js
diff --git a/novnc/core/input/xtscancodes.js b/base/app/novnc/core/input/xtscancodes.js
similarity index 100%
rename from novnc/core/input/xtscancodes.js
rename to base/app/novnc/core/input/xtscancodes.js
diff --git a/novnc/core/ra2.js b/base/app/novnc/core/ra2.js
similarity index 100%
rename from novnc/core/ra2.js
rename to base/app/novnc/core/ra2.js
diff --git a/novnc/core/rfb.js b/base/app/novnc/core/rfb.js
similarity index 100%
rename from novnc/core/rfb.js
rename to base/app/novnc/core/rfb.js
diff --git a/novnc/core/util/browser.js b/base/app/novnc/core/util/browser.js
similarity index 100%
rename from novnc/core/util/browser.js
rename to base/app/novnc/core/util/browser.js
diff --git a/novnc/core/util/cursor.js b/base/app/novnc/core/util/cursor.js
similarity index 100%
rename from novnc/core/util/cursor.js
rename to base/app/novnc/core/util/cursor.js
diff --git a/novnc/core/util/element.js b/base/app/novnc/core/util/element.js
similarity index 100%
rename from novnc/core/util/element.js
rename to base/app/novnc/core/util/element.js
diff --git a/novnc/core/util/events.js b/base/app/novnc/core/util/events.js
similarity index 100%
rename from novnc/core/util/events.js
rename to base/app/novnc/core/util/events.js
diff --git a/novnc/core/util/eventtarget.js b/base/app/novnc/core/util/eventtarget.js
similarity index 100%
rename from novnc/core/util/eventtarget.js
rename to base/app/novnc/core/util/eventtarget.js
diff --git a/novnc/core/util/int.js b/base/app/novnc/core/util/int.js
similarity index 100%
rename from novnc/core/util/int.js
rename to base/app/novnc/core/util/int.js
diff --git a/novnc/core/util/logging.js b/base/app/novnc/core/util/logging.js
similarity index 100%
rename from novnc/core/util/logging.js
rename to base/app/novnc/core/util/logging.js
diff --git a/novnc/core/util/strings.js b/base/app/novnc/core/util/strings.js
similarity index 100%
rename from novnc/core/util/strings.js
rename to base/app/novnc/core/util/strings.js
diff --git a/novnc/core/websock.js b/base/app/novnc/core/websock.js
similarity index 100%
rename from novnc/core/websock.js
rename to base/app/novnc/core/websock.js
diff --git a/novnc/docs/API-internal.md b/base/app/novnc/docs/API-internal.md
similarity index 100%
rename from novnc/docs/API-internal.md
rename to base/app/novnc/docs/API-internal.md
diff --git a/novnc/docs/API.md b/base/app/novnc/docs/API.md
similarity index 100%
rename from novnc/docs/API.md
rename to base/app/novnc/docs/API.md
diff --git a/novnc/docs/EMBEDDING.md b/base/app/novnc/docs/EMBEDDING.md
similarity index 100%
rename from novnc/docs/EMBEDDING.md
rename to base/app/novnc/docs/EMBEDDING.md
diff --git a/novnc/docs/LIBRARY.md b/base/app/novnc/docs/LIBRARY.md
similarity index 100%
rename from novnc/docs/LIBRARY.md
rename to base/app/novnc/docs/LIBRARY.md
diff --git a/novnc/docs/LICENSE.BSD-2-Clause b/base/app/novnc/docs/LICENSE.BSD-2-Clause
similarity index 100%
rename from novnc/docs/LICENSE.BSD-2-Clause
rename to base/app/novnc/docs/LICENSE.BSD-2-Clause
diff --git a/novnc/docs/LICENSE.BSD-3-Clause b/base/app/novnc/docs/LICENSE.BSD-3-Clause
similarity index 100%
rename from novnc/docs/LICENSE.BSD-3-Clause
rename to base/app/novnc/docs/LICENSE.BSD-3-Clause
diff --git a/novnc/docs/LICENSE.MPL-2.0 b/base/app/novnc/docs/LICENSE.MPL-2.0
similarity index 100%
rename from novnc/docs/LICENSE.MPL-2.0
rename to base/app/novnc/docs/LICENSE.MPL-2.0
diff --git a/novnc/docs/LICENSE.OFL-1.1 b/base/app/novnc/docs/LICENSE.OFL-1.1
similarity index 100%
rename from novnc/docs/LICENSE.OFL-1.1
rename to base/app/novnc/docs/LICENSE.OFL-1.1
diff --git a/novnc/docs/flash_policy.txt b/base/app/novnc/docs/flash_policy.txt
similarity index 100%
rename from novnc/docs/flash_policy.txt
rename to base/app/novnc/docs/flash_policy.txt
diff --git a/novnc/docs/links b/base/app/novnc/docs/links
similarity index 100%
rename from novnc/docs/links
rename to base/app/novnc/docs/links
diff --git a/novnc/docs/notes b/base/app/novnc/docs/notes
similarity index 100%
rename from novnc/docs/notes
rename to base/app/novnc/docs/notes
diff --git a/novnc/docs/novnc_proxy.1 b/base/app/novnc/docs/novnc_proxy.1
similarity index 100%
rename from novnc/docs/novnc_proxy.1
rename to base/app/novnc/docs/novnc_proxy.1
diff --git a/novnc/docs/rfb_notes b/base/app/novnc/docs/rfb_notes
similarity index 100%
rename from novnc/docs/rfb_notes
rename to base/app/novnc/docs/rfb_notes
diff --git a/novnc/docs/rfbproto-3.3.pdf b/base/app/novnc/docs/rfbproto-3.3.pdf
similarity index 100%
rename from novnc/docs/rfbproto-3.3.pdf
rename to base/app/novnc/docs/rfbproto-3.3.pdf
diff --git a/novnc/docs/rfbproto-3.7.pdf b/base/app/novnc/docs/rfbproto-3.7.pdf
similarity index 100%
rename from novnc/docs/rfbproto-3.7.pdf
rename to base/app/novnc/docs/rfbproto-3.7.pdf
diff --git a/novnc/docs/rfbproto-3.8.pdf b/base/app/novnc/docs/rfbproto-3.8.pdf
similarity index 100%
rename from novnc/docs/rfbproto-3.8.pdf
rename to base/app/novnc/docs/rfbproto-3.8.pdf
diff --git a/novnc/eslint.config.mjs b/base/app/novnc/eslint.config.mjs
similarity index 100%
rename from novnc/eslint.config.mjs
rename to base/app/novnc/eslint.config.mjs
diff --git a/novnc/karma.conf.js b/base/app/novnc/karma.conf.js
similarity index 100%
rename from novnc/karma.conf.js
rename to base/app/novnc/karma.conf.js
diff --git a/novnc/package.json b/base/app/novnc/package.json
similarity index 100%
rename from novnc/package.json
rename to base/app/novnc/package.json
diff --git a/novnc/po/Makefile b/base/app/novnc/po/Makefile
similarity index 100%
rename from novnc/po/Makefile
rename to base/app/novnc/po/Makefile
diff --git a/novnc/po/cs.po b/base/app/novnc/po/cs.po
similarity index 100%
rename from novnc/po/cs.po
rename to base/app/novnc/po/cs.po
diff --git a/novnc/po/de.po b/base/app/novnc/po/de.po
similarity index 100%
rename from novnc/po/de.po
rename to base/app/novnc/po/de.po
diff --git a/novnc/po/el.po b/base/app/novnc/po/el.po
similarity index 100%
rename from novnc/po/el.po
rename to base/app/novnc/po/el.po
diff --git a/novnc/po/es.po b/base/app/novnc/po/es.po
similarity index 100%
rename from novnc/po/es.po
rename to base/app/novnc/po/es.po
diff --git a/novnc/po/fr.po b/base/app/novnc/po/fr.po
similarity index 100%
rename from novnc/po/fr.po
rename to base/app/novnc/po/fr.po
diff --git a/novnc/po/it.po b/base/app/novnc/po/it.po
similarity index 100%
rename from novnc/po/it.po
rename to base/app/novnc/po/it.po
diff --git a/novnc/po/ja.po b/base/app/novnc/po/ja.po
similarity index 100%
rename from novnc/po/ja.po
rename to base/app/novnc/po/ja.po
diff --git a/novnc/po/ko.po b/base/app/novnc/po/ko.po
similarity index 100%
rename from novnc/po/ko.po
rename to base/app/novnc/po/ko.po
diff --git a/novnc/po/nl.po b/base/app/novnc/po/nl.po
similarity index 100%
rename from novnc/po/nl.po
rename to base/app/novnc/po/nl.po
diff --git a/novnc/po/noVNC.pot b/base/app/novnc/po/noVNC.pot
similarity index 100%
rename from novnc/po/noVNC.pot
rename to base/app/novnc/po/noVNC.pot
diff --git a/novnc/po/pl.po b/base/app/novnc/po/pl.po
similarity index 100%
rename from novnc/po/pl.po
rename to base/app/novnc/po/pl.po
diff --git a/novnc/po/po2js b/base/app/novnc/po/po2js
similarity index 100%
rename from novnc/po/po2js
rename to base/app/novnc/po/po2js
diff --git a/novnc/po/pt_BR.po b/base/app/novnc/po/pt_BR.po
similarity index 100%
rename from novnc/po/pt_BR.po
rename to base/app/novnc/po/pt_BR.po
diff --git a/novnc/po/ru.po b/base/app/novnc/po/ru.po
similarity index 100%
rename from novnc/po/ru.po
rename to base/app/novnc/po/ru.po
diff --git a/novnc/po/sv.po b/base/app/novnc/po/sv.po
similarity index 100%
rename from novnc/po/sv.po
rename to base/app/novnc/po/sv.po
diff --git a/novnc/po/tr.po b/base/app/novnc/po/tr.po
similarity index 100%
rename from novnc/po/tr.po
rename to base/app/novnc/po/tr.po
diff --git a/novnc/po/xgettext-html b/base/app/novnc/po/xgettext-html
similarity index 100%
rename from novnc/po/xgettext-html
rename to base/app/novnc/po/xgettext-html
diff --git a/novnc/po/zh_CN.po b/base/app/novnc/po/zh_CN.po
similarity index 100%
rename from novnc/po/zh_CN.po
rename to base/app/novnc/po/zh_CN.po
diff --git a/novnc/po/zh_TW.po b/base/app/novnc/po/zh_TW.po
similarity index 100%
rename from novnc/po/zh_TW.po
rename to base/app/novnc/po/zh_TW.po
diff --git a/novnc/snap/hooks/configure b/base/app/novnc/snap/hooks/configure
similarity index 100%
rename from novnc/snap/hooks/configure
rename to base/app/novnc/snap/hooks/configure
diff --git a/novnc/snap/local/svc_wrapper.sh b/base/app/novnc/snap/local/svc_wrapper.sh
similarity index 100%
rename from novnc/snap/local/svc_wrapper.sh
rename to base/app/novnc/snap/local/svc_wrapper.sh
diff --git a/novnc/snap/snapcraft.yaml b/base/app/novnc/snap/snapcraft.yaml
similarity index 100%
rename from novnc/snap/snapcraft.yaml
rename to base/app/novnc/snap/snapcraft.yaml
diff --git a/novnc/tests/assertions.js b/base/app/novnc/tests/assertions.js
similarity index 100%
rename from novnc/tests/assertions.js
rename to base/app/novnc/tests/assertions.js
diff --git a/novnc/tests/fake.websocket.js b/base/app/novnc/tests/fake.websocket.js
similarity index 100%
rename from novnc/tests/fake.websocket.js
rename to base/app/novnc/tests/fake.websocket.js
diff --git a/novnc/tests/playback-ui.js b/base/app/novnc/tests/playback-ui.js
similarity index 100%
rename from novnc/tests/playback-ui.js
rename to base/app/novnc/tests/playback-ui.js
diff --git a/novnc/tests/playback.js b/base/app/novnc/tests/playback.js
similarity index 100%
rename from novnc/tests/playback.js
rename to base/app/novnc/tests/playback.js
diff --git a/novnc/tests/test.base64.js b/base/app/novnc/tests/test.base64.js
similarity index 100%
rename from novnc/tests/test.base64.js
rename to base/app/novnc/tests/test.base64.js
diff --git a/novnc/tests/test.browser.js b/base/app/novnc/tests/test.browser.js
similarity index 100%
rename from novnc/tests/test.browser.js
rename to base/app/novnc/tests/test.browser.js
diff --git a/novnc/tests/test.copyrect.js b/base/app/novnc/tests/test.copyrect.js
similarity index 100%
rename from novnc/tests/test.copyrect.js
rename to base/app/novnc/tests/test.copyrect.js
diff --git a/novnc/tests/test.deflator.js b/base/app/novnc/tests/test.deflator.js
similarity index 100%
rename from novnc/tests/test.deflator.js
rename to base/app/novnc/tests/test.deflator.js
diff --git a/novnc/tests/test.display.js b/base/app/novnc/tests/test.display.js
similarity index 100%
rename from novnc/tests/test.display.js
rename to base/app/novnc/tests/test.display.js
diff --git a/novnc/tests/test.gesturehandler.js b/base/app/novnc/tests/test.gesturehandler.js
similarity index 100%
rename from novnc/tests/test.gesturehandler.js
rename to base/app/novnc/tests/test.gesturehandler.js
diff --git a/novnc/tests/test.helper.js b/base/app/novnc/tests/test.helper.js
similarity index 100%
rename from novnc/tests/test.helper.js
rename to base/app/novnc/tests/test.helper.js
diff --git a/novnc/tests/test.hextile.js b/base/app/novnc/tests/test.hextile.js
similarity index 100%
rename from novnc/tests/test.hextile.js
rename to base/app/novnc/tests/test.hextile.js
diff --git a/novnc/tests/test.inflator.js b/base/app/novnc/tests/test.inflator.js
similarity index 100%
rename from novnc/tests/test.inflator.js
rename to base/app/novnc/tests/test.inflator.js
diff --git a/novnc/tests/test.int.js b/base/app/novnc/tests/test.int.js
similarity index 100%
rename from novnc/tests/test.int.js
rename to base/app/novnc/tests/test.int.js
diff --git a/novnc/tests/test.jpeg.js b/base/app/novnc/tests/test.jpeg.js
similarity index 100%
rename from novnc/tests/test.jpeg.js
rename to base/app/novnc/tests/test.jpeg.js
diff --git a/novnc/tests/test.keyboard.js b/base/app/novnc/tests/test.keyboard.js
similarity index 100%
rename from novnc/tests/test.keyboard.js
rename to base/app/novnc/tests/test.keyboard.js
diff --git a/novnc/tests/test.localization.js b/base/app/novnc/tests/test.localization.js
similarity index 100%
rename from novnc/tests/test.localization.js
rename to base/app/novnc/tests/test.localization.js
diff --git a/novnc/tests/test.raw.js b/base/app/novnc/tests/test.raw.js
similarity index 100%
rename from novnc/tests/test.raw.js
rename to base/app/novnc/tests/test.raw.js
diff --git a/novnc/tests/test.rfb.js b/base/app/novnc/tests/test.rfb.js
similarity index 100%
rename from novnc/tests/test.rfb.js
rename to base/app/novnc/tests/test.rfb.js
diff --git a/novnc/tests/test.rre.js b/base/app/novnc/tests/test.rre.js
similarity index 100%
rename from novnc/tests/test.rre.js
rename to base/app/novnc/tests/test.rre.js
diff --git a/novnc/tests/test.tight.js b/base/app/novnc/tests/test.tight.js
similarity index 100%
rename from novnc/tests/test.tight.js
rename to base/app/novnc/tests/test.tight.js
diff --git a/novnc/tests/test.tightpng.js b/base/app/novnc/tests/test.tightpng.js
similarity index 100%
rename from novnc/tests/test.tightpng.js
rename to base/app/novnc/tests/test.tightpng.js
diff --git a/novnc/tests/test.util.js b/base/app/novnc/tests/test.util.js
similarity index 100%
rename from novnc/tests/test.util.js
rename to base/app/novnc/tests/test.util.js
diff --git a/novnc/tests/test.websock.js b/base/app/novnc/tests/test.websock.js
similarity index 100%
rename from novnc/tests/test.websock.js
rename to base/app/novnc/tests/test.websock.js
diff --git a/novnc/tests/test.webutil.js b/base/app/novnc/tests/test.webutil.js
similarity index 100%
rename from novnc/tests/test.webutil.js
rename to base/app/novnc/tests/test.webutil.js
diff --git a/novnc/tests/test.zrle.js b/base/app/novnc/tests/test.zrle.js
similarity index 100%
rename from novnc/tests/test.zrle.js
rename to base/app/novnc/tests/test.zrle.js
diff --git a/novnc/tests/vnc_playback.html b/base/app/novnc/tests/vnc_playback.html
similarity index 100%
rename from novnc/tests/vnc_playback.html
rename to base/app/novnc/tests/vnc_playback.html
diff --git a/novnc/utils/README.md b/base/app/novnc/utils/README.md
similarity index 100%
rename from novnc/utils/README.md
rename to base/app/novnc/utils/README.md
diff --git a/novnc/utils/b64-to-binary.pl b/base/app/novnc/utils/b64-to-binary.pl
similarity index 100%
rename from novnc/utils/b64-to-binary.pl
rename to base/app/novnc/utils/b64-to-binary.pl
diff --git a/novnc/utils/convert.js b/base/app/novnc/utils/convert.js
similarity index 100%
rename from novnc/utils/convert.js
rename to base/app/novnc/utils/convert.js
diff --git a/novnc/utils/genkeysymdef.js b/base/app/novnc/utils/genkeysymdef.js
similarity index 100%
rename from novnc/utils/genkeysymdef.js
rename to base/app/novnc/utils/genkeysymdef.js
diff --git a/novnc/utils/novnc_proxy b/base/app/novnc/utils/novnc_proxy
similarity index 100%
rename from novnc/utils/novnc_proxy
rename to base/app/novnc/utils/novnc_proxy
diff --git a/novnc/utils/u2x11 b/base/app/novnc/utils/u2x11
similarity index 100%
rename from novnc/utils/u2x11
rename to base/app/novnc/utils/u2x11
diff --git a/novnc/utils/validate b/base/app/novnc/utils/validate
similarity index 100%
rename from novnc/utils/validate
rename to base/app/novnc/utils/validate
diff --git a/novnc/vendor/pako/LICENSE b/base/app/novnc/vendor/pako/LICENSE
similarity index 100%
rename from novnc/vendor/pako/LICENSE
rename to base/app/novnc/vendor/pako/LICENSE
diff --git a/novnc/vendor/pako/README.md b/base/app/novnc/vendor/pako/README.md
similarity index 100%
rename from novnc/vendor/pako/README.md
rename to base/app/novnc/vendor/pako/README.md
diff --git a/novnc/vendor/pako/lib/utils/common.js b/base/app/novnc/vendor/pako/lib/utils/common.js
similarity index 100%
rename from novnc/vendor/pako/lib/utils/common.js
rename to base/app/novnc/vendor/pako/lib/utils/common.js
diff --git a/novnc/vendor/pako/lib/zlib/adler32.js b/base/app/novnc/vendor/pako/lib/zlib/adler32.js
similarity index 100%
rename from novnc/vendor/pako/lib/zlib/adler32.js
rename to base/app/novnc/vendor/pako/lib/zlib/adler32.js
diff --git a/novnc/vendor/pako/lib/zlib/constants.js b/base/app/novnc/vendor/pako/lib/zlib/constants.js
similarity index 100%
rename from novnc/vendor/pako/lib/zlib/constants.js
rename to base/app/novnc/vendor/pako/lib/zlib/constants.js
diff --git a/novnc/vendor/pako/lib/zlib/crc32.js b/base/app/novnc/vendor/pako/lib/zlib/crc32.js
similarity index 100%
rename from novnc/vendor/pako/lib/zlib/crc32.js
rename to base/app/novnc/vendor/pako/lib/zlib/crc32.js
diff --git a/novnc/vendor/pako/lib/zlib/deflate.js b/base/app/novnc/vendor/pako/lib/zlib/deflate.js
similarity index 100%
rename from novnc/vendor/pako/lib/zlib/deflate.js
rename to base/app/novnc/vendor/pako/lib/zlib/deflate.js
diff --git a/novnc/vendor/pako/lib/zlib/gzheader.js b/base/app/novnc/vendor/pako/lib/zlib/gzheader.js
similarity index 100%
rename from novnc/vendor/pako/lib/zlib/gzheader.js
rename to base/app/novnc/vendor/pako/lib/zlib/gzheader.js
diff --git a/novnc/vendor/pako/lib/zlib/inffast.js b/base/app/novnc/vendor/pako/lib/zlib/inffast.js
similarity index 100%
rename from novnc/vendor/pako/lib/zlib/inffast.js
rename to base/app/novnc/vendor/pako/lib/zlib/inffast.js
diff --git a/novnc/vendor/pako/lib/zlib/inflate.js b/base/app/novnc/vendor/pako/lib/zlib/inflate.js
similarity index 100%
rename from novnc/vendor/pako/lib/zlib/inflate.js
rename to base/app/novnc/vendor/pako/lib/zlib/inflate.js
diff --git a/novnc/vendor/pako/lib/zlib/inftrees.js b/base/app/novnc/vendor/pako/lib/zlib/inftrees.js
similarity index 100%
rename from novnc/vendor/pako/lib/zlib/inftrees.js
rename to base/app/novnc/vendor/pako/lib/zlib/inftrees.js
diff --git a/novnc/vendor/pako/lib/zlib/messages.js b/base/app/novnc/vendor/pako/lib/zlib/messages.js
similarity index 100%
rename from novnc/vendor/pako/lib/zlib/messages.js
rename to base/app/novnc/vendor/pako/lib/zlib/messages.js
diff --git a/novnc/vendor/pako/lib/zlib/trees.js b/base/app/novnc/vendor/pako/lib/zlib/trees.js
similarity index 100%
rename from novnc/vendor/pako/lib/zlib/trees.js
rename to base/app/novnc/vendor/pako/lib/zlib/trees.js
diff --git a/novnc/vendor/pako/lib/zlib/zstream.js b/base/app/novnc/vendor/pako/lib/zlib/zstream.js
similarity index 100%
rename from novnc/vendor/pako/lib/zlib/zstream.js
rename to base/app/novnc/vendor/pako/lib/zlib/zstream.js
diff --git a/novnc/vnc.html b/base/app/novnc/vnc.html
similarity index 100%
rename from novnc/vnc.html
rename to base/app/novnc/vnc.html
diff --git a/novnc/vnc_lite.html b/base/app/novnc/vnc_lite.html
similarity index 100%
rename from novnc/vnc_lite.html
rename to base/app/novnc/vnc_lite.html
diff --git a/base/up b/base/up
new file mode 100755
index 0000000..a8bafb5
--- /dev/null
+++ b/base/up
@@ -0,0 +1,11 @@
+## Docker build
+# eg, ARCHPKG=openssh
+# eg, BUILDTAG=base
+
+## Fetch latest mirrorlist
+curl --fail --silent https://myvelabs.com/lab/archlinux/raw/branch/master/mirrorlist -o mirrorlist
+
+DOCKER_BUILDKIT=1 docker build ./. \
+ --build-arg pkg=${ARCHPKG:-""} \
+ --tag myvnc/${BUILDTAG:-base} \
+ && rm -f Dockerfile *.sh mirrorlist
diff --git a/firefox.sh b/firefox/firefox.sh
similarity index 100%
rename from firefox.sh
rename to firefox/firefox.sh
diff --git a/base:i3.sh b/i3/i3.sh
similarity index 100%
rename from base:i3.sh
rename to i3/i3.sh
diff --git a/webtop:plasma.sh b/plasma/webtop:plasma.sh
similarity index 100%
rename from webtop:plasma.sh
rename to plasma/webtop:plasma.sh
diff --git a/remmina.sh b/remmina.sh
deleted file mode 100644
index 1e7101a..0000000
--- a/remmina.sh
+++ /dev/null
@@ -1,54 +0,0 @@
-## Dockerfile
-cat >Dockerfile <<- 'Dockerfile'
-# syntax = docker/dockerfile:1.2
-FROM myvnc/base:i3
-USER root
-
-# Choose a terminal
-ENV TERMINAL=terminator
-
-# install packages
-RUN --mount=type=cache,sharing=locked,target=/var/cache/pacman \
- pacman -Syu --ask 4 --needed \
- remmina libvncserver \
- ${TERMINAL} \
- openssh \
- && pacman -Scc --ask 4
-
-# Tigervnc
-COPY 20-remmina.sh /app/init.d/
-RUN chmod +x /app/init.d/*
-
-# Reset user home directory
-USER user
-WORKDIR /home/user
-Dockerfile
-
-## Remmina setup
-cat >20-remmina.sh <<- '20-remmina.sh'
-#!/usr/bin/env bash
-# Remmina config
-cat >~/.config/i3/config.d/remmina.conf <<- 'remmina.conf'
-# Open terminal
-exec --no-startup-id i3-msg 'workspace "2"; exec /usr/bin/${TERMINAL}'
-
-# Maximize
-for_window [class="remmina"] move container to workspace "1"
-for_window [class="${TERMINAL}"] move container to workspace "2"
-remmina.conf
-
-# Remmina startup
-install /dev/stdin ~/.config/i3/startapp.sh <<- startapp.sh
-#!/usr/bin/env bash
-# Run remmina
-while true
-do
- /usr/bin/remmina
-done
-startapp.sh
-20-remmina.sh
-
-## Docker build
-DOCKER_BUILDKIT=1 docker build ./. \
- --tag myvnc/remmina \
- && rm -f Dockerfile *.sh
\ No newline at end of file