GNU bug report logs - #70099
[PATCH] gnu: flatpak: Pass system icons and fonts.

Previous Next

Package: guix-patches;

Reported by: Zheng Junjie <zhengjunjie <at> iscas.ac.cn>

Date: Sun, 31 Mar 2024 06:44:02 UTC

Severity: normal

Tags: patch

To reply to this bug, email your comments to 70099 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to guix-patches <at> gnu.org:
bug#70099; Package guix-patches. (Sun, 31 Mar 2024 06:44:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Zheng Junjie <zhengjunjie <at> iscas.ac.cn>:
New bug report received and forwarded. Copy sent to guix-patches <at> gnu.org. (Sun, 31 Mar 2024 06:44:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Zheng Junjie <zhengjunjie <at> iscas.ac.cn>
To: guix-patches <at> gnu.org
Subject: [PATCH] gnu: flatpak: Pass system icons and fonts.
Date: Sun, 31 Mar 2024 14:43:07 +0800
* gnu/packages/patches/flatpak-fix-fonts-icons.patch: New patch.
* gnu/packages/package-management.scm(flatpak): Use it.
* gnu/local.mk(dist_patch_DATA): Register it.

Change-Id: I0359d0d9bf10120a8b784c910c50d0e4a9b7a616
---
 gnu/local.mk                                  |  1 +
 gnu/packages/package-management.scm           |  4 +-
 .../patches/flatpak-fix-fonts-icons.patch     | 89 +++++++++++++++++++
 3 files changed, 93 insertions(+), 1 deletion(-)
 create mode 100644 gnu/packages/patches/flatpak-fix-fonts-icons.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index f2b480bded..2c1d794ec9 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1209,6 +1209,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/firebird-riscv64-support-pt2.patch	\
   %D%/packages/patches/flann-cmake-3.11.patch			\
   %D%/packages/patches/flatpak-fix-path.patch			\
+  %D%/packages/patches/flatpak-fix-fonts-icons.patch	\
   %D%/packages/patches/flatpak-unset-gdk-pixbuf-for-sandbox.patch	\
   %D%/packages/patches/fluxbox-1.3.7-no-dynamic-cursor.patch	\
   %D%/packages/patches/fluxbox-1.3.7-gcc.patch			\
diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index a0ede07d54..5e47f6aa1e 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -24,6 +24,7 @@
 ;;; Copyright © 2023 jgart <jgart <at> dismail.de>
 ;;; Copyright © 2023 Mădălin Ionel Patrașcu <madalinionel.patrascu <at> mdc-berlin.de>
 ;;; Copyright © 2024 Arun Isaac <arunisaac <at> systemreboot.net>
+;;; Copyright © 2024 Zheng Junjie <873216071 <at> qq.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -2019,7 +2020,8 @@ (define-public flatpak
        (sha256
         (base32 "16b7f7n2mms6zgm0lj3fn86ny11xjn8cd3mrk1slwhvwnv8dnd4a"))
        (patches
-        (search-patches "flatpak-fix-path.patch"
+        (search-patches "flatpak-fix-fonts-icons.patch"
+                        "flatpak-fix-path.patch"
                         "flatpak-unset-gdk-pixbuf-for-sandbox.patch"))))
 
     ;; Wrap 'flatpak' so that GIO_EXTRA_MODULES is set, thereby allowing GIO to
diff --git a/gnu/packages/patches/flatpak-fix-fonts-icons.patch b/gnu/packages/patches/flatpak-fix-fonts-icons.patch
new file mode 100644
index 0000000000..5b9d855b2e
--- /dev/null
+++ b/gnu/packages/patches/flatpak-fix-fonts-icons.patch
@@ -0,0 +1,89 @@
+modify from https://github.com/NixOS/nixpkgs/pull/262462
+
+diff --git a/common/flatpak-run.c b/common/flatpak-run.c
+index 94ad013..5c9f55e 100644
+--- a/common/flatpak-run.c
++++ b/common/flatpak-run.c
+@@ -871,6 +871,49 @@ out:
+   return res;
+ }
+ 
++static void
++get_gnu_closure (GHashTable *closure, const gchar *source_path)
++{
++  if (g_file_test (source_path, G_FILE_TEST_IS_SYMLINK))
++    {
++      g_autofree gchar *path = g_malloc(PATH_MAX);
++      realpath(source_path, path);
++      if (g_str_has_prefix(path, "/gnu/store/"))
++        {
++          *strchr(path + strlen("/gnu/store/"), '/') = 0;
++          g_hash_table_add(closure, g_steal_pointer (&path));
++        }
++    }
++  else if (g_file_test (source_path, G_FILE_TEST_IS_DIR))
++    {
++      g_autoptr(GDir) dir = g_dir_open(source_path, 0, NULL);
++      const gchar *file_name;
++      while ((file_name = g_dir_read_name(dir)))
++        {
++          g_autofree gchar *path = g_build_filename (source_path, file_name, NULL);
++          get_gnu_closure (closure, path);
++        }
++    }
++}
++
++static void
++add_gnu_store_symlink_targets (FlatpakBwrap *bwrap, const gchar *source_path)
++{
++  GHashTable *closure = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
++
++  get_gnu_closure(closure, source_path);
++
++  GHashTableIter iter;
++  gpointer path;
++  g_hash_table_iter_init(&iter, closure);
++  while (g_hash_table_iter_next(&iter, &path, NULL))
++    {
++      flatpak_bwrap_add_args (bwrap, "--ro-bind", path, path, NULL);
++    }
++
++  g_hash_table_destroy(closure);
++}
++
+ static void
+ add_font_path_args (FlatpakBwrap *bwrap)
+ {
+@@ -898,6 +946,18 @@ add_font_path_args (FlatpakBwrap *bwrap)
+                               "\t<remap-dir as-path=\"%s\">/run/host/fonts</remap-dir>\n",
+                               SYSTEM_FONTS_DIR);
+     }
++  else if (g_file_test ("/run/current-system/profile/share/fonts", G_FILE_TEST_EXISTS))
++    {
++      add_gnu_store_symlink_targets (bwrap, "/run/current-system/profile/share/fonts");
++      flatpak_bwrap_add_args (bwrap,
++                              "--ro-bind",
++                              "/run/current-system/profile/share/fonts",
++                              "/run/host/fonts",
++                              NULL);
++      g_string_append_printf (xml_snippet,
++                              "\t<remap-dir as-path=\"%s\">/run/host/fonts</remap-dir>\n",
++                              "/run/current-system/profile/share/fonts");
++    }
+ 
+   if (g_file_test ("/usr/local/share/fonts", G_FILE_TEST_EXISTS))
+     {
+@@ -998,6 +1058,13 @@ add_icon_path_args (FlatpakBwrap *bwrap)
+                               "--ro-bind", "/usr/share/icons", "/run/host/share/icons",
+                               NULL);
+     }
++  else if (g_file_test ("/run/current-system/profile/share/icons", G_FILE_TEST_IS_DIR))
++    {
++      add_gnu_store_symlink_targets (bwrap, "/run/current-system/profile/share/icons");
++      flatpak_bwrap_add_args (bwrap,
++                              "--ro-bind", "/run/current-system/profile/share/icons", "/run/host/share/icons",
++                              NULL);
++    }
+ 
+   user_icons_path = g_build_filename (g_get_user_data_dir (), "icons", NULL);
+   user_icons = g_file_new_for_path (user_icons_path);

base-commit: f5558ee0cc1a11a8b61d3f4d43f05dd79d53ac77
-- 
2.41.0





This bug report was last modified 33 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.