Install this version:
emerge -a =games-util/deadlock-modmanager-9999
If this version is masked, you can unmask it using the autounmask tool or standard emerge options:
autounmask =games-util/deadlock-modmanager-9999
Or alternatively:
emerge --autounmask-write -a =games-util/deadlock-modmanager-9999
| Version | EAPI | Keywords | Slot |
|---|---|---|---|
| 9999 | 8 | 0 |
# Copyright 2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
inherit desktop git-r3 xdg
DESCRIPTION="Mod manager for Valve's Deadlock (live git)"
HOMEPAGE="https://github.com/deadlock-mod-manager/deadlock-mod-manager"
EGIT_REPO_URI="https://github.com/deadlock-mod-manager/deadlock-mod-manager.git"
EGIT_CHECKOUT_DIR="${WORKDIR}/${PN}"
S="${WORKDIR}/${PN}/apps/desktop"
LICENSE="GPL-3+"
SLOT="0"
# Live ebuild: no KEYWORDS
PROPERTIES="live"
# pnpm + cargo both want network access during build (npm registry,
# crates.io). Network sandbox must be disabled when emerging this:
# FEATURES="-network-sandbox" emerge games-util/deadlock-modmanager
RESTRICT="mirror network-sandbox"
RDEPEND="
x11-libs/gtk+:3
net-libs/webkit-gtk:4.1
net-libs/libsoup:3.0
dev-libs/glib:2
x11-libs/cairo
x11-libs/pango
x11-libs/gdk-pixbuf
dev-libs/openssl:=
app-arch/bzip2
"
# sys-apps/pnpm-bin lives in the ::guru overlay. Users must enable
# ::guru (or provide pnpm by other means) before emerging this.
BDEPEND="
dev-lang/rust:=
llvm-core/clang
llvm-core/llvm
llvm-core/lld
net-libs/nodejs
net-misc/curl
sys-apps/pnpm-bin
virtual/pkgconfig
dev-lang/perl
dev-lang/nasm
"
src_unpack() {
git-r3_src_unpack
}
src_compile() {
export VITE_API_URL="https://api.deadlockmods.app"
# Force the GNU toolchain. unrar_sys' bundled C++ uses libc++ ABI
# symbols (std::__1::*) when built with clang++; gcc-15 also
# accepts `-stdlib=libc++` (which unrar_sys' build.rs passes via
# `flag_if_supported`), so the resulting libunrar.a ends up with
# libc++ symbols regardless of which compiler runs. We therefore
# always link the final binary against libc++ (provided by
# dev-libs/libcxx, installed by clang).
export CC=gcc
export CXX=g++
# Prefer bundled implementations; avoid accidental system detection.
export ZSTD_SYS_USE_PKG_CONFIG=0
unset ZSTD_LIB_DIR
export UNRAR_SYS_STATIC=1
export UNRAR_SYS_FORCE_VENDOR=1
unset UNRAR_LIB_DIR
pnpm install || die "pnpm install failed"
# Build the Vite frontend bundle into apps/desktop/dist/.
# Tauri's `frontendDist` (../dist relative to src-tauri) embeds
# this directory into the final binary at compile time. Without
# it, tauri bakes in the dev server URL and the binary tries to
# connect to http://localhost:1420 at runtime.
pnpm ui:build || die "pnpm ui:build failed"
cd src-tauri || die
# Two-stage build:
#
# 1) Build all dependency crates with `cargo build` (no extra link
# flags). This produces the dependency rlibs *and* the per-crate
# static archives created by build scripts (most importantly
# libring_core_0_17_14_.a from ring's perlasm pipeline and
# libunrar.a / libunrar_sys.a from unrar_sys' bundled C++).
#
# 2) Re-link the final `deadlock-mod-manager` binary with
# `cargo rustc -- <flags>` so the extra link arguments apply
# *only* to the leaf binary (avoiding propagation to host build
# scripts and dependency dylibs that would otherwise fail).
#
# The extra link arguments work around two issues:
#
# - rust-lld bundled with rustc >=1.83 cannot resolve ring's
# perlasm-generated symbols, so we force GNU bfd ld.
# - rustc/cargo (>= 1.95) does not propagate the
# `cargo:rustc-link-lib=static=...` directives emitted by
# ring's and unrar_sys' build.rs to the final link line, even
# though the matching `-L` search paths are propagated. We
# therefore force the missing static libs in by hand.
#
# `--features tauri/custom-protocol` is required: tauri's
# generate_context!() macro chooses between the embedded
# `frontendDist` bundle and the `devUrl` dev server based on
# `cfg!(not(feature = "custom-protocol"))`. The official
# `tauri build` CLI passes this feature implicitly; bare
# `cargo build` does not, so without it the release binary
# bakes in `http://localhost:1420` and the WebView fails with
# "Could not connect to localhost: Connection refused".
#
# `cargo build` is allowed to fail because its own final link of
# the binary will hit those same missing symbols - the explicit
# `cargo rustc` re-link below is what actually produces the
# binary.
cargo build --release --features tauri/custom-protocol
cargo rustc --release --features tauri/custom-protocol \
--bin deadlock-mod-manager -- \
-C link-arg=-fuse-ld=bfd \
-C link-arg=-lbz2 \
-C link-arg=-lring_core_0_17_14_ \
-C link-arg=-lunrar \
-C link-arg=-lc++ \
-C link-arg=-lgcc \
|| die "cargo rustc (final link) failed"
[[ -x ../target/release/deadlock-mod-manager ]] \
|| die "binary not produced at expected path"
}
src_install() {
newbin target/release/deadlock-mod-manager deadlock-modmanager
# Icons
insinto /usr/share/icons/hicolor/32x32/apps
doins src-tauri/icons/32x32.png
insinto /usr/share/icons/hicolor/128x128/apps
doins src-tauri/icons/128x128.png
insinto /usr/share/icons/hicolor/256x256/apps
newins src-tauri/icons/128x128@2x.png deadlock-modmanager.png
# Desktop entry
domenu "${FILESDIR}/deadlock-modmanager.desktop"
dodoc ../../README.md
}
x11-libs/gtk+:3 net-libs/webkit-gtk:4.1 net-libs/libsoup:3.0 dev-libs/glib:2 x11-libs/cairo x11-libs/pango x11-libs/gdk-pixbuf dev-libs/openssl:= app-arch/bzip2
dev-lang/rust:= llvm-core/clang llvm-core/llvm llvm-core/lld net-libs/nodejs net-misc/curl sys-apps/pnpm-bin virtual/pkgconfig dev-lang/perl dev-lang/nasm