Pomotroid is a pomodoro timer application written in rust with powered by webview technology. Since you need several language processors I wrote a dockerfile to make an executable from the source.

You are supposed to have the source code of pomotroid and the poroject root is the build context for Docker to use the below Dockerfile.

FROM rust:bookworm AS build
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
    --mount=type=cache,target=/var/lib/apt,sharing=locked \
    apt update && apt-get --no-install-recommends install -y \
        libasound2-dev \
        libayatana-appindicator3-dev librsvg2-dev \
        libssl-dev \
        libwebkit2gtk-4.1-dev \
        patchelf \
        xdg-utils \
    ;

COPY --link --from=node:22-bookworm-slim /usr/local/bin /usr/local/bin
COPY --link --from=node:22-bookworm-slim /usr/local/lib/node_modules /usr/local/lib/node_modules
COPY --link --from=node:22-bookworm-slim /usr/local/include /usr/local/include

WORKDIR /work
RUN --mount=type=bind,target=.,rw=true \
    npm install && \
    npm run tauri build && \
    cp -ar src-tauri/target/ /build

FROM scratch AS final
COPY --from=build /build /

Compilation is comfirmed in the version of 6dc4cb596dd52132ef559215068552df348bf3e1.

DMABUF Problem

Perhaps you face some warnings and pomotroid stucks with empty window but its background color. You can set an environment variable to disable DMABUF to workaround it:

WEBKIT_DISABLE_DMABUF_RENDERER=1 pomotroid

Alternatively, you can set it in the program:

diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs
index 16c43ee..ac760c3 100644
--- a/src-tauri/src/lib.rs
+++ b/src-tauri/src/lib.rs
@@ -33,8 +33,23 @@ use commands::{
     window_set_visibility,
 };
 
+#[cfg(target_os = "linux")]
+fn configure_linux_webkit_env() {
+    if std::env::var_os("WEBKIT_DISABLE_DMABUF_RENDERER").is_none() {
+        // Some Linux environments deny GBM/DRM buffer creation to WebKitGTK,
+        // which leaves the app stuck on the window background color. Pomotroid
+        // does not need GPU-backed rendering, so prefer the software path.
+        unsafe {
+            std::env::set_var("WEBKIT_DISABLE_DMABUF_RENDERER", "1");
+        }
+    }
+}
+
 #[cfg_attr(mobile, tauri::mobile_entry_point)]
 pub fn run() {
+    #[cfg(target_os = "linux")]
+    configure_linux_webkit_env();
+
     tauri::Builder::default()
         .plugin(
             LogBuilder::new()