.
This commit is contained in:
parent
7529c0c5c4
commit
735aa76ea3
57 changed files with 3366 additions and 2482 deletions
|
|
@ -36,26 +36,38 @@ in
|
|||
systemd.user.services.antigravity2api = {
|
||||
Unit = {
|
||||
Description = "Antigravity API to OpenAI Proxy";
|
||||
After = [ "network.target" ];
|
||||
After = [ "network-online.target" ];
|
||||
Wants = [ "network-online.target" ];
|
||||
};
|
||||
|
||||
Service = {
|
||||
WorkingDirectory = workDir;
|
||||
ExecStartPre = pkgs.writeShellScript "antigravity2api-init" ''
|
||||
export PATH="${pkgs.coreutils}/bin:$PATH"
|
||||
export PATH="${pkgs.coreutils}/bin:${pkgs.iputils}/bin:$PATH"
|
||||
mkdir -p "${workDir}"
|
||||
|
||||
# Ensure network exists (Not needed for host network)
|
||||
# ${pkgs.podman}/bin/podman network create antigravity-net --ignore >/dev/null 2>&1 || true
|
||||
|
||||
# Wait for connectivity to 8.8.8.8 (Google DNS) used by the container
|
||||
echo "Waiting for internet connectivity..."
|
||||
until ping -c1 -W1 8.8.8.8 >/dev/null 2>&1; do
|
||||
sleep 2
|
||||
done
|
||||
echo "Connectivity check passed."
|
||||
|
||||
cat > "${workDir}/.env" <<EOF
|
||||
API_KEY=${cfg.credentials.apiKey}
|
||||
ADMIN_USERNAME=${cfg.credentials.username}
|
||||
ADMIN_PASSWORD=${cfg.credentials.password}
|
||||
SYSTEM_INSTRUCTION="你是聊天机器人,名字叫萌萌,如同名字这般,你的性格是软软糯糯萌萌哒的,专门为用户提供聊天和情绪价值,协助进行小说创作或者角色扮演"
|
||||
SYSTEM_INSTRUCTION=""
|
||||
OFFICIAL_SYSTEM_PROMPT="You are Antigravity, a powerful agentic AI coding assistant designed by the Google Deepmind team working on Advanced Agentic Coding.You are pair programming with a USER to solve their coding task. The task may require creating a new codebase, modifying or debugging an existing codebase, or simply answering a question.**Proactiveness**"
|
||||
EOF
|
||||
'';
|
||||
|
||||
ExecStart = ''
|
||||
${pkgs.podman}/bin/podman run --replace --rm --name antigravity2api \
|
||||
-p 127.0.0.1:8045:8045 \
|
||||
--network=host \
|
||||
-v ${workDir}/data:/app/data \
|
||||
-v ${workDir}/public/images:/app/public/images \
|
||||
-v ${workDir}/.env:/app/.env \
|
||||
|
|
|
|||
|
|
@ -70,6 +70,33 @@ in
|
|||
pkgs.lxqt.lxqt-policykit
|
||||
pkgs.libnotify
|
||||
pkgs.swww
|
||||
(pkgs.writeShellScriptBin "freeze-shot" ''
|
||||
# Capture the screen to a temp file
|
||||
file=$(mktemp --suffix=.png)
|
||||
${pkgs.grim}/bin/grim "$file"
|
||||
|
||||
# Open imv in fullscreen to simulate freeze
|
||||
# We run it in the background
|
||||
${pkgs.imv}/bin/imv -f "$file" &
|
||||
pid=$!
|
||||
|
||||
# Give imv a moment to open
|
||||
sleep 0.2
|
||||
|
||||
# Run slurp to select region
|
||||
geometry=$(${pkgs.slurp}/bin/slurp)
|
||||
|
||||
# Close the "frozen" overlay
|
||||
kill "$pid"
|
||||
|
||||
# If we got a selection, crop and copy
|
||||
if [ -n "$geometry" ]; then
|
||||
${pkgs.imagemagick}/bin/magick "$file" -crop "$geometry" - | ${pkgs.wl-clipboard}/bin/wl-copy
|
||||
fi
|
||||
|
||||
# Cleanup
|
||||
rm "$file"
|
||||
'')
|
||||
];
|
||||
|
||||
xdg.portal = {
|
||||
|
|
@ -234,7 +261,7 @@ in
|
|||
|
||||
Mod+Shift+E { spawn "bemoji" "-t"; }
|
||||
|
||||
Print { spawn "sh" "-c" "grim -g \"$(slurp)\" - | wl-copy"; }
|
||||
Print { spawn "freeze-shot"; }
|
||||
|
||||
// Browsers
|
||||
Mod+W { spawn "firefox"; }
|
||||
|
|
|
|||
|
|
@ -61,6 +61,29 @@ in
|
|||
mShadow = mocha.crust;
|
||||
};
|
||||
|
||||
plugins = {
|
||||
sources = [
|
||||
{
|
||||
enabled = true;
|
||||
name = "Official Noctalia Plugins";
|
||||
url = "https://github.com/noctalia-dev/noctalia-plugins";
|
||||
branch = "main"; # Explicitly set branch just in case
|
||||
}
|
||||
];
|
||||
states = {
|
||||
"assistant-panel" = {
|
||||
enabled = true;
|
||||
sourceUrl = "https://github.com/noctalia-dev/noctalia-plugins";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
pluginSettings = {
|
||||
"assistant-panel" = {
|
||||
service = "openai";
|
||||
};
|
||||
};
|
||||
|
||||
settings = {
|
||||
colorSchemes = {
|
||||
darkMode = true;
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ let
|
|||
glfw
|
||||
];
|
||||
|
||||
defaultJvmArgs = "-XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+AlwaysActAsServerClassMachine -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:+UseNUMA -XX:NmethodSweepActivity=1 -XX:ReservedCodeCacheSize=400M -XX:NonNMethodCodeHeapSize=12M -XX:ProfiledCodeHeapSize=194M -XX:NonProfiledCodeHeapSize=194M -XX:-DontCompileHugeMethods -XX:MaxNodeLimit=240000 -XX:NodeLimitFudgeFactor=8000 -XX:+UseVectorCmov -XX:+PerfDisableSharedMem -XX:+UseFastUnorderedTimeStamps -XX:+UseCriticalJavaThreadPriority -XX:ThreadPriorityPolicy=1 -XX:AllocatePrefetchStyle=3 -XX:+UseShenandoahGC -XX:ShenandoahGCMode=iu -XX:ShenandoahGuaranteedGCInterval=1000000 -XX:AllocatePrefetchStyle=1 -XX:ConcGCThreads=4";
|
||||
defaultJvmArgs = "-Djava.net.preferIPv4Stack=true -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+AlwaysActAsServerClassMachine -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:+UseNUMA -XX:NmethodSweepActivity=1 -XX:ReservedCodeCacheSize=400M -XX:NonNMethodCodeHeapSize=12M -XX:ProfiledCodeHeapSize=194M -XX:NonProfiledCodeHeapSize=194M -XX:-DontCompileHugeMethods -XX:MaxNodeLimit=240000 -XX:NodeLimitFudgeFactor=8000 -XX:+UseVectorCmov -XX:+PerfDisableSharedMem -XX:+UseFastUnorderedTimeStamps -XX:+UseCriticalJavaThreadPriority -XX:ThreadPriorityPolicy=1 -XX:AllocatePrefetchStyle=3 -XX:+UseShenandoahGC -XX:ShenandoahGCMode=iu -XX:ShenandoahGuaranteedGCInterval=1000000 -XX:AllocatePrefetchStyle=1 -XX:ConcGCThreads=4";
|
||||
|
||||
in
|
||||
{
|
||||
|
|
@ -66,225 +66,230 @@ in
|
|||
|
||||
config = lib.mkIf cfg.enable {
|
||||
home.packages = [
|
||||
(bwrapperPkgs.mkBwrapper {
|
||||
app = {
|
||||
id = "org.prismlauncher.PrismLauncher";
|
||||
package = pkgs.prismlauncher.overrideAttrs (old: {
|
||||
pname = "prismlauncher";
|
||||
version = old.version or "9.1"; # Fallback or keep current if valid
|
||||
buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.jemalloc ];
|
||||
(
|
||||
let
|
||||
sandboxed = bwrapperPkgs.mkBwrapper {
|
||||
app = {
|
||||
id = "org.prismlauncher.PrismLauncher";
|
||||
package = pkgs.prismlauncher.overrideAttrs (old: {
|
||||
pname = "prismlauncher";
|
||||
version = old.version or "9.1"; # Fallback or keep current if valid
|
||||
buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.jemalloc ];
|
||||
|
||||
# Keep runtimeLibs in closure without injecting them into environment
|
||||
postInstall = (old.postInstall or "") + ''
|
||||
mkdir -p $out/share/prismlauncher-sandboxed
|
||||
echo "${lib.makeLibraryPath runtimeLibs}" > $out/share/prismlauncher-sandboxed/libs
|
||||
'';
|
||||
# Keep runtimeLibs in closure without injecting them into environment
|
||||
postInstall = (old.postInstall or "") + ''
|
||||
mkdir -p $out/share/prismlauncher-sandboxed
|
||||
echo "${lib.makeLibraryPath runtimeLibs}" > $out/share/prismlauncher-sandboxed/libs
|
||||
'';
|
||||
|
||||
qtWrapperArgs = (old.qtWrapperArgs or [ ]) ++ [
|
||||
"--set JEMALLOC_PATH ${pkgs.jemalloc}/lib/libjemalloc.so"
|
||||
"--prefix LD_PRELOAD : ${pkgs.jemalloc}/lib/libjemalloc.so"
|
||||
qtWrapperArgs = (old.qtWrapperArgs or [ ]) ++ [
|
||||
"--set JEMALLOC_PATH ${pkgs.jemalloc}/lib/libjemalloc.so"
|
||||
"--prefix LD_PRELOAD : ${pkgs.jemalloc}/lib/libjemalloc.so"
|
||||
];
|
||||
});
|
||||
|
||||
env = {
|
||||
# Propagate XDG_DATA_DIRS so themes/icons can be found
|
||||
BROWSER = "firefox";
|
||||
QT_QPA_PLATFORM = "xcb";
|
||||
GDK_BACKEND = "x11";
|
||||
NO_AT_BRIDGE = "1";
|
||||
QT_QPA_PLATFORMTHEME = "";
|
||||
QT_STYLE_OVERRIDE = "fusion";
|
||||
|
||||
# Sanitize Desktop Environment to prevent loading conflicting platform themes
|
||||
XDG_CURRENT_DESKTOP = "X-Generic";
|
||||
XDG_SESSION_TYPE = "x11";
|
||||
GTK_USE_PORTAL = "0";
|
||||
GTK_THEME = "Adwaita"; # Force a safe theme or empty?
|
||||
|
||||
# Unset potential conflict variables
|
||||
GTK_MODULES = "";
|
||||
GTK3_MODULES = "";
|
||||
};
|
||||
};
|
||||
|
||||
sockets.x11 = true;
|
||||
sockets.wayland = true;
|
||||
flatpak.enable = false;
|
||||
|
||||
fhsenv.opts = {
|
||||
unshareUser = true;
|
||||
unshareUts = false;
|
||||
unshareCgroup = false;
|
||||
unsharePid = false;
|
||||
unshareNet = false;
|
||||
unshareIpc = false;
|
||||
};
|
||||
|
||||
fhsenv.bwrap.baseArgs = lib.mkForce [
|
||||
"--new-session"
|
||||
"--proc /proc"
|
||||
"--dev /dev"
|
||||
"--dev-bind /dev/dri /dev/dri"
|
||||
"--tmpfs /home"
|
||||
"--tmpfs /tmp"
|
||||
"--tmpfs /run"
|
||||
"--dir /run/user"
|
||||
"--dir /run/user/${toString cfg.uid}"
|
||||
# Bind ro system paths commonly needed
|
||||
"--ro-bind-try /run/opengl-driver /run/opengl-driver"
|
||||
"--ro-bind-try /run/opengl-driver-32 /run/opengl-driver-32"
|
||||
"--dir /run/systemd/resolve"
|
||||
"--ro-bind-try /run/systemd/resolve /run/systemd/resolve"
|
||||
"--ro-bind /run/dbus /run/dbus"
|
||||
];
|
||||
});
|
||||
|
||||
env = {
|
||||
# Propagate XDG_DATA_DIRS so themes/icons can be found
|
||||
BROWSER = "firefox";
|
||||
QT_QPA_PLATFORM = "xcb";
|
||||
GDK_BACKEND = "x11";
|
||||
NO_AT_BRIDGE = "1";
|
||||
QT_QPA_PLATFORMTHEME = "";
|
||||
QT_STYLE_OVERRIDE = "fusion";
|
||||
|
||||
# Sanitize Desktop Environment to prevent loading conflicting platform themes
|
||||
XDG_CURRENT_DESKTOP = "X-Generic";
|
||||
XDG_SESSION_TYPE = "x11";
|
||||
GTK_USE_PORTAL = "0";
|
||||
GTK_THEME = "Adwaita"; # Force a safe theme or empty?
|
||||
|
||||
# Unset potential conflict variables
|
||||
GTK_MODULES = "";
|
||||
GTK3_MODULES = "";
|
||||
};
|
||||
};
|
||||
|
||||
sockets.x11 = true;
|
||||
sockets.wayland = true;
|
||||
flatpak.enable = false;
|
||||
|
||||
fhsenv.opts = {
|
||||
unshareUser = true;
|
||||
unshareUts = false;
|
||||
unshareCgroup = false;
|
||||
unsharePid = false;
|
||||
unshareNet = false;
|
||||
unshareIpc = false;
|
||||
};
|
||||
|
||||
fhsenv.bwrap.baseArgs = lib.mkForce [
|
||||
"--new-session"
|
||||
"--proc /proc"
|
||||
"--dev /dev"
|
||||
"--dev-bind /dev/dri /dev/dri"
|
||||
"--tmpfs /home"
|
||||
"--tmpfs /tmp"
|
||||
"--tmpfs /run"
|
||||
"--dir /run/user"
|
||||
"--dir /run/user/${toString cfg.uid}"
|
||||
# Bind ro system paths commonly needed
|
||||
"--ro-bind-try /run/opengl-driver /run/opengl-driver"
|
||||
"--ro-bind-try /run/opengl-driver-32 /run/opengl-driver-32"
|
||||
"--dir /run/systemd/resolve"
|
||||
"--ro-bind-try /run/systemd/resolve /run/systemd/resolve"
|
||||
"--ro-bind /run/dbus /run/dbus"
|
||||
];
|
||||
|
||||
mounts = {
|
||||
read = [
|
||||
"$HOME/.config/fontconfig"
|
||||
"$HOME/.local/share/fonts"
|
||||
"$HOME/.icons"
|
||||
"$HOME/.themes"
|
||||
"$HOME/.local/share/themes"
|
||||
"$HOME/.config/qt6ct"
|
||||
"$HOME/.config/Kvantum"
|
||||
"$HOME/.config/MangoHud"
|
||||
"$HOME/Downloads"
|
||||
];
|
||||
readWrite = [
|
||||
"$HOME/.local/share/PrismLauncher"
|
||||
"$HOME/.cache/PrismLauncher"
|
||||
];
|
||||
};
|
||||
|
||||
dbus.enable = false;
|
||||
|
||||
script.preCmds.stage2 =
|
||||
let
|
||||
glfwPath = "${cfg.glfwPackage}/lib/libglfw.so.3";
|
||||
|
||||
# We need to access the sandbox-utils.nix. Since it's in system modules,
|
||||
# we can't easily import it relative to here if it's not exported.
|
||||
# But the content was small, let's inline what we need or check if we can source it.
|
||||
# For now, I'll assume the dbus-proxy logic is needed.
|
||||
|
||||
# Reimplementing mkDbusProxyScript from sandbox-utils.nix inline to avoid path dependency
|
||||
mkDbusProxyScript =
|
||||
{ appId, proxyArgs }:
|
||||
let
|
||||
proxyArgsStr = lib.escapeShellArgs proxyArgs;
|
||||
appDir = "$XDG_RUNTIME_DIR/app/${appId}";
|
||||
proxySocket = "${appDir}/bus";
|
||||
in
|
||||
''
|
||||
mkdir -p "${appDir}"
|
||||
# Start xdg-dbus-proxy
|
||||
${pkgs.xdg-dbus-proxy}/bin/xdg-dbus-proxy \
|
||||
"$DBUS_SESSION_BUS_ADDRESS" "${proxySocket}" \
|
||||
${proxyArgsStr} &
|
||||
DBUS_PROXY_PID=$!
|
||||
|
||||
# Kill proxy on exit
|
||||
trap "kill $DBUS_PROXY_PID" EXIT
|
||||
|
||||
# Wait for socket to be created
|
||||
for i in {1..50}; do
|
||||
if [ -S "${proxySocket}" ]; then
|
||||
break
|
||||
fi
|
||||
if ! kill -0 $DBUS_PROXY_PID 2>/dev/null; then
|
||||
echo "xdg-dbus-proxy died unexpectedly"
|
||||
exit 1
|
||||
fi
|
||||
sleep 0.1
|
||||
done
|
||||
'';
|
||||
|
||||
dbusScript = mkDbusProxyScript {
|
||||
appId = "org.prismlauncher.PrismLauncher";
|
||||
proxyArgs = [
|
||||
"--filter"
|
||||
"--talk=org.freedesktop.portal.*"
|
||||
"--call=org.freedesktop.portal.*=*@/org/freedesktop/portal/desktop"
|
||||
"--talk=org.freedesktop.Notifications"
|
||||
"--own=org.prismlauncher.PrismLauncher"
|
||||
"--own=org.prismlauncher.PrismLauncher.*"
|
||||
mounts = {
|
||||
read = [
|
||||
"$HOME/.config/fontconfig"
|
||||
"$HOME/.local/share/fonts"
|
||||
"$HOME/.icons"
|
||||
"$HOME/.themes"
|
||||
"$HOME/.local/share/themes"
|
||||
"$HOME/.config/qt6ct"
|
||||
"$HOME/.config/Kvantum"
|
||||
"$HOME/.config/MangoHud"
|
||||
"$HOME/Downloads"
|
||||
];
|
||||
readWrite = [
|
||||
"$HOME/.local/share/PrismLauncher"
|
||||
"$HOME/.cache/PrismLauncher"
|
||||
];
|
||||
};
|
||||
in
|
||||
''
|
||||
${dbusScript}
|
||||
|
||||
# Sanitize Environment
|
||||
unset QT_QPA_PLATFORMTHEME
|
||||
unset GTK_THEME
|
||||
unset XDG_CURRENT_DESKTOP
|
||||
export QT_QPA_PLATFORM=xcb
|
||||
export GDK_BACKEND=x11
|
||||
export NO_AT_BRIDGE=1
|
||||
dbus.enable = false;
|
||||
|
||||
# Force Configs (JVM Args + GLFW)
|
||||
cfg="$HOME/.local/share/PrismLauncher/prismlauncher.cfg"
|
||||
if [ -f "$cfg" ]; then
|
||||
# JVM Args
|
||||
if ${pkgs.gnugrep}/bin/grep -q "^JvmArgs=" "$cfg"; then
|
||||
${pkgs.gnused}/bin/sed -i "s|^JvmArgs=.*|JvmArgs=${cfg.jvmArgs}|" "$cfg"
|
||||
else
|
||||
if ${pkgs.gnugrep}/bin/grep -q "^\\[General\\]" "$cfg"; then
|
||||
${pkgs.gnused}/bin/sed -i "/^\\[General\\]/a JvmArgs=${cfg.jvmArgs}" "$cfg"
|
||||
else
|
||||
echo "JvmArgs=${cfg.jvmArgs}" >> "$cfg"
|
||||
fi
|
||||
fi
|
||||
script.preCmds.stage2 =
|
||||
let
|
||||
glfwPath = "${cfg.glfwPackage}/lib/libglfw.so.3";
|
||||
|
||||
# GLFW Settings
|
||||
# 1. CustomGLFWPath
|
||||
if ${pkgs.gnugrep}/bin/grep -q "^CustomGLFWPath=" "$cfg"; then
|
||||
${pkgs.gnused}/bin/sed -i "s|^CustomGLFWPath=.*|CustomGLFWPath=${glfwPath}|" "$cfg"
|
||||
else
|
||||
echo "CustomGLFWPath=${glfwPath}" >> "$cfg"
|
||||
fi
|
||||
# We need to access the sandbox-utils.nix. Since it's in system modules,
|
||||
# we can't easily import it relative to here if it's not exported.
|
||||
# But the content was small, let's inline what we need or check if we can source it.
|
||||
# For now, I'll assume the dbus-proxy logic is needed.
|
||||
|
||||
# 2. UseNativeGLFW
|
||||
if ${pkgs.gnugrep}/bin/grep -q "^UseNativeGLFW=" "$cfg"; then
|
||||
${pkgs.gnused}/bin/sed -i "s|^UseNativeGLFW=.*|UseNativeGLFW=true|" "$cfg"
|
||||
else
|
||||
echo "UseNativeGLFW=true" >> "$cfg"
|
||||
fi
|
||||
fi
|
||||
'';
|
||||
# Reimplementing mkDbusProxyScript from sandbox-utils.nix inline to avoid path dependency
|
||||
mkDbusProxyScript =
|
||||
{ appId, proxyArgs }:
|
||||
let
|
||||
proxyArgsStr = lib.escapeShellArgs proxyArgs;
|
||||
appDir = "$XDG_RUNTIME_DIR/app/${appId}";
|
||||
proxySocket = "${appDir}/bus";
|
||||
in
|
||||
''
|
||||
mkdir -p "${appDir}"
|
||||
# Start xdg-dbus-proxy
|
||||
${pkgs.xdg-dbus-proxy}/bin/xdg-dbus-proxy \
|
||||
"$DBUS_SESSION_BUS_ADDRESS" "${proxySocket}" \
|
||||
${proxyArgsStr} &
|
||||
DBUS_PROXY_PID=$!
|
||||
|
||||
fhsenv.bwrap.additionalArgs = [
|
||||
# D-Bus proxy
|
||||
''--bind "$XDG_RUNTIME_DIR/bus" "$XDG_RUNTIME_DIR/bus"''
|
||||
# Note: The original code bound a specific path TO ./bus.
|
||||
# "''--bind "$XDG_RUNTIME_DIR/app/org.prismlauncher.PrismLauncher/bus" "$XDG_RUNTIME_DIR/bus"''"
|
||||
# But mkDbusProxyScript (if standard) creates a socket.
|
||||
# The logic in prismlauncher-sandboxed.nix imported sandbox-utils.nix.
|
||||
# I'll try to match the original bind logic if possible.
|
||||
# Kill proxy on exit
|
||||
trap "kill $DBUS_PROXY_PID" EXIT
|
||||
|
||||
# The original code had:
|
||||
# ''--bind "$XDG_RUNTIME_DIR/app/org.prismlauncher.PrismLauncher/bus" "$XDG_RUNTIME_DIR/bus"''
|
||||
# But my inline mkDbusProxyScript sets up "$XDG_RUNTIME_DIR/bus" as the listen socket *inside* the script execution?
|
||||
# Wait, xdg-dbus-proxy runs inside the outer unshared namespace or outside?
|
||||
# In mkBwrapper, preCmds run *inside* the bwrap?
|
||||
# No, typically preCmds run before the final exec?
|
||||
# Actually, looking at nix-bwrapper, `preCmds.stage2` runs *inside* the sandbox?
|
||||
# Wait for socket to be created
|
||||
for i in {1..50}; do
|
||||
if [ -S "${proxySocket}" ]; then
|
||||
break
|
||||
fi
|
||||
if ! kill -0 $DBUS_PROXY_PID 2>/dev/null; then
|
||||
echo "xdg-dbus-proxy died unexpectedly"
|
||||
exit 1
|
||||
fi
|
||||
sleep 0.1
|
||||
done
|
||||
'';
|
||||
|
||||
# Let's start with the binds exactly as they were, assuming `sandbox-utils` logic.
|
||||
# If I can't import sandbox-utils, I have to rely on what I can see.
|
||||
# The original `sandbox-utils.nix` likely set up the proxy.
|
||||
# I will copy the binds from the original file.
|
||||
dbusScript = mkDbusProxyScript {
|
||||
appId = "org.prismlauncher.PrismLauncher";
|
||||
proxyArgs = [
|
||||
"--filter"
|
||||
"--talk=org.freedesktop.portal.*"
|
||||
"--call=org.freedesktop.portal.*=*@/org/freedesktop/portal/desktop"
|
||||
"--talk=org.freedesktop.Notifications"
|
||||
"--own=org.prismlauncher.PrismLauncher"
|
||||
"--own=org.prismlauncher.PrismLauncher.*"
|
||||
];
|
||||
};
|
||||
in
|
||||
''
|
||||
${dbusScript}
|
||||
|
||||
''--bind "$XDG_RUNTIME_DIR/app/org.prismlauncher.PrismLauncher/bus" "$XDG_RUNTIME_DIR/bus"''
|
||||
# Sanitize Environment
|
||||
unset QT_QPA_PLATFORMTHEME
|
||||
unset GTK_THEME
|
||||
unset XDG_CURRENT_DESKTOP
|
||||
export QT_QPA_PLATFORM=xcb
|
||||
export GDK_BACKEND=x11
|
||||
export NO_AT_BRIDGE=1
|
||||
|
||||
# Wayland socket
|
||||
''--bind "$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY" "$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY"''
|
||||
# Force Configs (JVM Args + GLFW)
|
||||
cfg="$HOME/.local/share/PrismLauncher/prismlauncher.cfg"
|
||||
if [ -f "$cfg" ]; then
|
||||
# JVM Args
|
||||
if ${pkgs.gnugrep}/bin/grep -q "^JvmArgs=" "$cfg"; then
|
||||
${pkgs.gnused}/bin/sed -i "s|^JvmArgs=.*|JvmArgs=${cfg.jvmArgs}|" "$cfg"
|
||||
else
|
||||
if ${pkgs.gnugrep}/bin/grep -q "^\\[General\\]" "$cfg"; then
|
||||
${pkgs.gnused}/bin/sed -i "/^\\[General\\]/a JvmArgs=${cfg.jvmArgs}" "$cfg"
|
||||
else
|
||||
echo "JvmArgs=${cfg.jvmArgs}" >> "$cfg"
|
||||
fi
|
||||
fi
|
||||
|
||||
# PipeWire + Pulse
|
||||
''--bind "$XDG_RUNTIME_DIR/pipewire-0" "$XDG_RUNTIME_DIR/pipewire-0"''
|
||||
''--bind "$XDG_RUNTIME_DIR/pulse" "$XDG_RUNTIME_DIR/pulse"''
|
||||
];
|
||||
})
|
||||
# GLFW Settings
|
||||
# 1. CustomGLFWPath
|
||||
if ${pkgs.gnugrep}/bin/grep -q "^CustomGLFWPath=" "$cfg"; then
|
||||
${pkgs.gnused}/bin/sed -i "s|^CustomGLFWPath=.*|CustomGLFWPath=${glfwPath}|" "$cfg"
|
||||
else
|
||||
echo "CustomGLFWPath=${glfwPath}" >> "$cfg"
|
||||
fi
|
||||
|
||||
# 2. UseNativeGLFW
|
||||
if ${pkgs.gnugrep}/bin/grep -q "^UseNativeGLFW=" "$cfg"; then
|
||||
${pkgs.gnused}/bin/sed -i "s|^UseNativeGLFW=.*|UseNativeGLFW=true|" "$cfg"
|
||||
else
|
||||
echo "UseNativeGLFW=true" >> "$cfg"
|
||||
fi
|
||||
fi
|
||||
'';
|
||||
|
||||
fhsenv.bwrap.additionalArgs = [
|
||||
# D-Bus proxy
|
||||
''--bind "$XDG_RUNTIME_DIR/bus" "$XDG_RUNTIME_DIR/bus"''
|
||||
# Note: The original code bound a specific path TO ./bus.
|
||||
# "''--bind "$XDG_RUNTIME_DIR/app/org.prismlauncher.PrismLauncher/bus" "$XDG_RUNTIME_DIR/bus"''"
|
||||
# But mkDbusProxyScript (if standard) creates a socket.
|
||||
# The logic in prismlauncher-sandboxed.nix imported sandbox-utils.nix.
|
||||
# I'll try to match the original bind logic if possible.
|
||||
|
||||
# The original code had:
|
||||
# ''--bind "$XDG_RUNTIME_DIR/app/org.prismlauncher.PrismLauncher/bus" "$XDG_RUNTIME_DIR/bus"''
|
||||
# But my inline mkDbusProxyScript sets up "$XDG_RUNTIME_DIR/bus" as the listen socket *inside* the script execution?
|
||||
# Wait, xdg-dbus-proxy runs inside the outer unshared namespace or outside?
|
||||
# In mkBwrapper, preCmds run *inside* the bwrap?
|
||||
# No, typically preCmds run before the final exec?
|
||||
# Actually, looking at nix-bwrapper, `preCmds.stage2` runs *inside* the sandbox?
|
||||
|
||||
# Let's start with the binds exactly as they were, assuming `sandbox-utils` logic.
|
||||
# If I can't import sandbox-utils, I have to rely on what I can see.
|
||||
# The original `sandbox-utils.nix` likely set up the proxy.
|
||||
# I will copy the binds from the original file.
|
||||
|
||||
''--bind "$XDG_RUNTIME_DIR/app/org.prismlauncher.PrismLauncher/bus" "$XDG_RUNTIME_DIR/bus"''
|
||||
|
||||
# Wayland socket
|
||||
''--bind "$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY" "$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY"''
|
||||
|
||||
# PipeWire + Pulse
|
||||
''--bind "$XDG_RUNTIME_DIR/pipewire-0" "$XDG_RUNTIME_DIR/pipewire-0"''
|
||||
''--bind "$XDG_RUNTIME_DIR/pulse" "$XDG_RUNTIME_DIR/pulse"''
|
||||
];
|
||||
};
|
||||
in
|
||||
sandboxed
|
||||
)
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue