From 1156b46714a8dcd14a65fe8fa50886315b398f17 Mon Sep 17 00:00:00 2001 From: Gleb Mazovetskiy Date: Sun, 3 Sep 2023 19:52:44 +0000 Subject: [PATCH] Set up default settings for a GitHub Codespace --- .devcontainer/Dockerfile | 43 +++++++++++++++++++++++++++ .devcontainer/devcontainer.json | 30 +++++++++++++++++++ .devcontainer/fluxbox/apps | 7 +++++ .devcontainer/fluxbox/menu | 20 +++++++++++++ docs/gh-codespaces-ports-browser.png | Bin 0 -> 20510 bytes docs/github-codespaces.md | 13 ++++++++ 6 files changed, 113 insertions(+) create mode 100644 .devcontainer/Dockerfile create mode 100644 .devcontainer/devcontainer.json create mode 100644 .devcontainer/fluxbox/apps create mode 100644 .devcontainer/fluxbox/menu create mode 100644 docs/gh-codespaces-ports-browser.png create mode 100644 docs/github-codespaces.md diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 000000000..668b596c9 --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,43 @@ +ARG VARIANT=debian-12 +FROM mcr.microsoft.com/devcontainers/base:${VARIANT} +USER root + +# Install APT packages +RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ + && apt-get -y install tar curl zip unzip bash-completion build-essential ripgrep htop \ + ninja-build ccache g++ mold gdb clang-format clang-tidy \ + rpm pkg-config cmake git smpq gettext libsdl2-dev libsdl2-image-dev libsodium-dev \ + libpng-dev libbz2-dev libfmt-dev libgtest-dev libgmock-dev libsimpleini-dev zsh \ + qtbase5-dev qt6-base-dev ristretto \ + && apt-get autoremove -y && apt-get clean -y && rm -rf /var/lib/apt/lists/* + +# Install devilutionx-graphics-tools +RUN git clone https://github.com/diasurgical/devilutionx-graphics-tools.git /tmp/devilutionx-graphics-tools && \ + cd /tmp/devilutionx-graphics-tools && \ + cmake -S. -Bbuild-rel -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF && \ + cmake --build build-rel -j $(getconf _NPROCESSORS_ONLN) && \ + cmake --install build-rel --component Binaries && \ + rm -rf /tmp/devilutionx-graphics-tools + +# Install devilutionx-mpq-tools +RUN git clone https://github.com/diasurgical/devilutionx-mpq-tools.git /tmp/devilutionx-mpq-tools && \ + cd /tmp/devilutionx-mpq-tools && \ + cmake -S. -Bbuild-rel -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF && \ + cmake --build build-rel -j $(getconf _NPROCESSORS_ONLN) && \ + cmake --install build-rel && \ + rm -rf /tmp/devilutionx-mpq-tools + +# Install d1-graphics-tool +RUN curl -O -L https://github.com/diasurgical/d1-graphics-tool/releases/latest/download/D1GraphicsTool-Linux-x64.deb && \ + dpkg -i D1GraphicsTool-Linux-x64.deb && \ + rm D1GraphicsTool-Linux-x64.deb + +# Download spawn.mpq and fonts.mpq +RUN curl --create-dirs -O -L --output-dir /usr/local/share/diasurgical/devilutionx/ \ + https://github.com/diasurgical/devilutionx-assets/releases/latest/download/spawn.mpq && \ + curl --create-dirs -O -L --output-dir /usr/local/share/diasurgical/devilutionx/ \ + https://github.com/diasurgical/devilutionx-assets/releases/latest/download/fonts.mpq && \ + chown -R vscode: /usr/local/share/diasurgical/ + +# Desktop environment configuration +COPY fluxbox /home/vscode/.fluxbox/ diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 000000000..6bdd635a3 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,30 @@ +{ + "build": { + "dockerfile": "Dockerfile" + }, + "customizations": { + "vscode": { + "extensions": [ + "github.vscode-github-actions", + "ms-vscode.cmake-tools" + ] + } + }, + "features": { + // https://github.com/devcontainers/features/tree/main/src/desktop-lite + "ghcr.io/devcontainers/features/desktop-lite:1": { + "webPort": 6080, + "password": "vscode" + }, + "ghcr.io/devcontainers-contrib/features/zsh-plugins:0": {}, + "ghcr.io/stuartleeks/dev-container-features/shell-history:0": {} + }, + "forwardPorts": [ + 6080 + ], + "portsAttributes": { + "6080": { + "label": "desktop" + } + } +} diff --git a/.devcontainer/fluxbox/apps b/.devcontainer/fluxbox/apps new file mode 100644 index 000000000..df1a03c86 --- /dev/null +++ b/.devcontainer/fluxbox/apps @@ -0,0 +1,7 @@ +[transient] (role=GtkFileChooserDialog) + [Dimensions] {70% 70%} + [Position] (CENTER) {0 0} +[end] +[app] (name=AppRun) (class=tiled) + [Fullscreen] {yes} +[end] diff --git a/.devcontainer/fluxbox/menu b/.devcontainer/fluxbox/menu new file mode 100644 index 000000000..a01a06abc --- /dev/null +++ b/.devcontainer/fluxbox/menu @@ -0,0 +1,20 @@ +[begin] ( Application Menu ) + [exec] (File Manager) { nautilus /workspaces/devilutionX } + [exec] (D1 Graphics Tool) { D1GraphicsTool } <> + [exec] (Text Editor) { mousepad } <> + [exec] (Terminal) { tilix -w ~ -e $(readlink -f /proc/$$/exe) -il } <> + [exec] (Web Browser) { x-www-browser --disable-dev-shm-usage } <> + [submenu] (System) {} + [exec] (Set Resolution) { tilix -t "Set Resolution" -e bash /usr/local/bin/set-resolution } <> + [exec] (Edit Application Menu) { mousepad ~/.fluxbox/menu } <> + [exec] (Passwords and Keys) { seahorse } <> + [exec] (Top Processes) { tilix -t "Top" -e htop } <> + [exec] (Disk Utilization) { tilix -t "Disk Utilization" -e ncdu / } <> + [exec] (Editres) {editres} <> + [exec] (Xfontsel) {xfontsel} <> + [exec] (Xkill) {xkill} <> + [exec] (Xrefresh) {xrefresh} <> + [end] + [config] (Configuration) + [workspaces] (Workspaces) +[end] diff --git a/docs/gh-codespaces-ports-browser.png b/docs/gh-codespaces-ports-browser.png new file mode 100644 index 0000000000000000000000000000000000000000..6778f5a287abf8a3213924c4531b04e54543ac14 GIT binary patch literal 20510 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 IIDI+f-=r(F0ssI2 literal 0 HcmV?d00001 diff --git a/docs/github-codespaces.md b/docs/github-codespaces.md new file mode 100644 index 000000000..690d0a319 --- /dev/null +++ b/docs/github-codespaces.md @@ -0,0 +1,13 @@ +# Developing with GitHub Codespaces + +A GitHub codespace container with all dependencies and several useful tools preinstalled is configured in the `.devcontainer` directory. + +You can go to https://github.dev/diasurgical/devilutionX/ and immediately begin developing. + +To view the graphical desktop of the container, click Ports > Browser. + +The password is `vscode`. + +![screenshot](gh-codespaces-ports-browser.png) + +For more information about the deskopt envorinonment, see https://github.com/devcontainers/features/tree/main/src/desktop-lite \ No newline at end of file