dotfiles

My PC Dotfiles & Website

_browser.nix (3028B)


# Browser Sandbox
{
  config,
  inputs,
  lib,
  pkgs,
  ...
}: let
  appId = "org.mozilla.firefox";
  firefox = config.programs.firefox.finalPackage;
  sandbox = (inputs.nixpak.lib.nixpak {inherit lib pkgs;}) {
    config = {sloth, ...}: {
      app = {
        package = firefox;
        binPath = "bin/firefox";
      };
      flatpak.appId = appId;

      gpu = {
        enable = true;
        provider = "nixos";
      };
      locale.enable = true;
      etc.sslCertificates.enable = true;
      dbus = {
        policies = {
          "${appId}" = "own";
          "${appId}.*" = "own";
          "org.mpris.MediaPlayer2.${appId}.*" = "own";
          "org.freedesktop.DBus" = "talk";
          "ca.desrt.dconf" = "talk";
          "org.freedesktop.portal.Desktop" = "talk";
          "org.freedesktop.portal.Documents" = "talk";
          "org.freedesktop.portal.FileChooser" = "talk";
          "org.freedesktop.portal.Notification" = "talk";
          "org.freedesktop.portal.OpenURI" = "talk";
          "org.freedesktop.portal.ScreenCast" = "talk";
          "org.freedesktop.portal.Camera" = "talk";
          "org.freedesktop.portal.Request" = "talk";
          "org.freedesktop.Notifications" = "talk";
          "org.kde.StatusNotifierWatcher" = "talk";
          "org.a11y.Bus" = "talk";
        };
        rules.broadcast."org.freedesktop.portal.*" = ["@/org/freedesktop/portal/*"];
        args = ["--filter" "--sloppy-names"];
      };

      bubblewrap = {
        network = true;
        sockets = {
          wayland = true;
          pipewire = true;
          pulse = true;
          x11 = false;
        };

        bind.rw = [
          (sloth.mkdir (sloth.concat' sloth.xdgConfigHome "/mozilla/firefox"))
          (sloth.mkdir (sloth.concat' sloth.xdgCacheHome "/mozilla"))
          sloth.xdgDownloadDir

          (sloth.concat' sloth.runtimeDir "/at-spi/bus")
          (sloth.concat' sloth.runtimeDir "/doc")
          (sloth.concat' sloth.runtimeDir "/gvfsd")
          (sloth.concat' sloth.xdgCacheHome "/fontconfig")

          (sloth.concat' sloth.runtimeDir "/app/org.keepassxc.KeePassXC")
        ];

        bind.ro = [
          "/sys/bus/pci"
          ["${firefox}/lib/firefox" "/app/etc/firefox"]
          (sloth.concat' sloth.homeDir "/.mozilla/native-messaging-hosts")

          "/run/current-system"
          "/etc/profiles/per-user/${config.home.username}"
          "/etc/xdg"

          (sloth.concat' sloth.xdgDataHome "/icons")
          (sloth.concat' sloth.xdgConfigHome "/gtk-3.0")
          (sloth.concat' sloth.xdgConfigHome "/gtk-4.0")
          (sloth.concat' sloth.xdgConfigHome "/fontconfig")
          (sloth.concat' sloth.xdgConfigHome "/dconf")
          "/etc/fonts"
          "/etc/localtime"
          "/etc/zoneinfo"
        ];

        bind.dev = ["/dev/shm"];
        tmpfs = ["/tmp"];
        newSession = true;
      };
    };
  };
in {
  config = lib.mkIf config.programs.firefox.enable {
    home.packages = [(lib.hiPrio sandbox.config.env)];
  };
}