package main
import (
"context"
"dagger/swap-watchdog/internal/dagger"
)
type SwapWatchdog struct{}
func (m *SwapWatchdog) BuildLinux(ctx context.Context,
src *dagger.Directory,
goToolchain *dagger.Directory,
) *dagger.Directory {
nixPkgs := "gtk3 dbus pkg-config gcc cargo rustc git patchelf"
const hostInterp = "/lib64/ld-linux-x86-64.so.2"
base := dag.Container().
From("nixos/nix:latest").
WithDirectory("/usr/local/go", goToolchain).
WithEnvVariable("PATH", "/usr/local/go/bin:/root/.nix-profile/bin:/nix/var/nix/profiles/default/bin:/nix/var/nix/profiles/default/sbin:/usr/bin:/bin").
WithEnvVariable("GOROOT", "/usr/local/go").
WithMountedCache("/root/.cache/go-build", dag.CacheVolume("swap-watchdog-go-build")).
WithMountedCache("/root/.cargo/registry", dag.CacheVolume("swap-watchdog-cargo-registry"))
goBuilt := base.
WithDirectory("/src", src).
WithWorkdir("/src").
WithExec([]string{"sh", "-c", `set -e
nix-shell -p ` + nixPkgs + ` --run '
set -e
mkdir -p /out
CGO_ENABLED=1 go build -o /out/swap-watchdog ./cmd/swap-watchdog
CGO_ENABLED=1 go build -o /out/force-quit-gui ./cmd/force-quit-gui
patchelf --set-interpreter ` + hostInterp + ` /out/force-quit-gui
'`})
kdotoolBuilt := base.
WithExec([]string{"sh", "-c", `set -e
nix-shell -p ` + nixPkgs + ` --run '
set -e
git clone --depth 1 https://github.com/jinliu/kdotool /tmp/kdotool
cd /tmp/kdotool
cargo build --release
mkdir -p /out
cp target/release/kdotool /out/kdotool
patchelf --set-interpreter ` + hostInterp + ` /out/kdotool
'`})
return dag.Directory().
WithFile("swap-watchdog", goBuilt.File("/out/swap-watchdog")).
WithFile("force-quit-gui", goBuilt.File("/out/force-quit-gui")).
WithFile("kdotool", kdotoolBuilt.File("/out/kdotool"))
}