From 41b78e06f918893b6de4f410eb4df4634eb49997 Mon Sep 17 00:00:00 2001 From: Andre Date: Sat, 13 Jul 2024 13:27:13 -0400 Subject: [PATCH] Flatpak: make bindfs an optional parameter --- hosts/Khanda/default.nix | 2 ++ modules/ui/flatpak.nix | 74 +++++++++++++++++++++++++++++++--------- 2 files changed, 60 insertions(+), 16 deletions(-) diff --git a/hosts/Khanda/default.nix b/hosts/Khanda/default.nix index 8cd88f6..27bdbe6 100644 --- a/hosts/Khanda/default.nix +++ b/hosts/Khanda/default.nix @@ -79,6 +79,8 @@ in "org.keepassxc.KeePassXC" "org.mozilla.firefox" ]; + + useBindFS = true; }; }; diff --git a/modules/ui/flatpak.nix b/modules/ui/flatpak.nix index 6a9044f..4eaa2de 100644 --- a/modules/ui/flatpak.nix +++ b/modules/ui/flatpak.nix @@ -10,11 +10,10 @@ let cfg = config.aux.system.ui.flatpak; in -with lib; { options = { aux.system.ui.flatpak = { - enable = mkEnableOption (mdDoc "Enables Flatpak support."); + enable = lib.mkEnableOption { description = "Enables Flatpak support."; }; packages = lib.mkOption { description = "Flatpak packages to install."; type = lib.types.listOf lib.types.str; @@ -31,25 +30,68 @@ with lib; } ]; }; + useBindFS = lib.mkEnableOption { + description = "Whether to use a BindFS mount to support custom themes and cursors. May cause performance issues."; + }; }; }; - config = mkIf cfg.enable { - # Enable Flatpak - services.flatpak = { - enable = true; + config = lib.mkMerge [ + (lib.mkIf cfg.enable { + # Enable Flatpak + services.flatpak = { + enable = true; - # Manage all Flatpak packages and remotes - uninstallUnmanaged = true; + # Manage all Flatpak packages and remotes + uninstallUnmanaged = true; - # Enable automatic updates alongside nixos-rebuild - update.onActivation = true; + # Enable automatic updates alongside nixos-rebuild + update.onActivation = true; - # Add remote(s) - remotes = cfg.remotes; + # Add remote(s) + remotes = cfg.remotes; - # Install base Flatpaks. For details, see https://github.com/gmodena/nix-flatpak - packages = cfg.packages; - }; - }; + # Install base Flatpaks. For details, see https://github.com/gmodena/nix-flatpak + packages = cfg.packages; + }; + }) + (lib.mkIf cfg.useBindFS { + # Workaround for getting Flatpak apps to use system fonts, icons, and cursors + # For details (and source), see https://github.com/NixOS/nixpkgs/issues/119433#issuecomment-1767513263 + # NOTE: If fonts in Flatpaks appear incorrect (like squares), run this command to regenerate the font cache: + # flatpak list --columns=application | xargs -I %s -- flatpak run --command=fc-cache %s -f -v + system.fsPackages = [ pkgs.bindfs ]; + fileSystems = + let + mkRoSymBind = path: { + device = path; + fsType = "fuse.bindfs"; + options = [ + "ro" + "resolve-symlinks" + "x-gvfs-hide" + ]; + }; + aggregatedIcons = pkgs.buildEnv { + name = "system-icons"; + paths = with pkgs; [ + (lib.mkIf config.aux.system.ui.desktops.gnome.enable gnome-themes-extra) + (lib.mkIf config.aux.system.ui.desktops.kde.enable kdePackages.breeze-icons) + papirus-icon-theme + qogir-icon-theme + ]; + pathsToLink = [ "/share/icons" ]; + }; + aggregatedFonts = pkgs.buildEnv { + name = "system-fonts"; + paths = config.fonts.packages; + pathsToLink = [ "/share/fonts" ]; + }; + in + { + "/usr/share/icons" = mkRoSymBind "${aggregatedIcons}/share/icons"; + "/usr/local/share/fonts" = mkRoSymBind "${aggregatedFonts}/share/fonts"; + }; + }) + ]; }