summary refs log tree commit diff
path: root/pkgs/desktops
diff options
context:
space:
mode:
authorBobby Rong <rjl931189261@126.com>2022-12-19 17:39:42 +0800
committerBobby Rong <rjl931189261@126.com>2022-12-20 10:59:37 +0800
commitf60da05d0b0c3882165d60f1a5886b6183a0bcb4 (patch)
tree62fc05d547072864ec79f43f8e3676a64e1faa07 /pkgs/desktops
parent5cc5f394d7bc74ed9ce8b5dd59831e8053b74330 (diff)
downloadnixpkgs-f60da05d0b0c3882165d60f1a5886b6183a0bcb4.tar
nixpkgs-f60da05d0b0c3882165d60f1a5886b6183a0bcb4.tar.gz
nixpkgs-f60da05d0b0c3882165d60f1a5886b6183a0bcb4.tar.bz2
nixpkgs-f60da05d0b0c3882165d60f1a5886b6183a0bcb4.tar.lz
nixpkgs-f60da05d0b0c3882165d60f1a5886b6183a0bcb4.tar.xz
nixpkgs-f60da05d0b0c3882165d60f1a5886b6183a0bcb4.tar.zst
nixpkgs-f60da05d0b0c3882165d60f1a5886b6183a0bcb4.zip
cinnamon.nemo-with-extensions: init
Diffstat (limited to 'pkgs/desktops')
-rw-r--r--pkgs/desktops/cinnamon/default.nix5
-rw-r--r--pkgs/desktops/cinnamon/nemo/default.nix10
-rw-r--r--pkgs/desktops/cinnamon/nemo/load-extensions-from-env.patch40
-rw-r--r--pkgs/desktops/cinnamon/nemo/wrapper.nix37
4 files changed, 90 insertions, 2 deletions
diff --git a/pkgs/desktops/cinnamon/default.nix b/pkgs/desktops/cinnamon/default.nix
index fbff8c60fa3..afa5307fb07 100644
--- a/pkgs/desktops/cinnamon/default.nix
+++ b/pkgs/desktops/cinnamon/default.nix
@@ -12,6 +12,10 @@ lib.makeScope pkgs.newScope (self: with self; {
     installPhase = "mv svg $out/share/iso-flags-svg";
   });
 
+  # Extensions added here will be shipped by default
+  nemoExtensions = [
+  ];
+
   # blueberry -> pkgs/tools/bluetooth/blueberry/default.nix
   bulky = callPackage ./bulky { };
   cinnamon-common = callPackage ./cinnamon-common { };
@@ -25,6 +29,7 @@ lib.makeScope pkgs.newScope (self: with self; {
   cinnamon-settings-daemon = callPackage ./cinnamon-settings-daemon { };
   cjs = callPackage ./cjs { };
   nemo = callPackage ./nemo { };
+  nemo-with-extensions = callPackage ./nemo/wrapper.nix { };
   mint-artwork = callPackage ./mint-artwork { };
   mint-cursor-themes = callPackage ./mint-cursor-themes { };
   mint-themes = callPackage ./mint-themes { };
diff --git a/pkgs/desktops/cinnamon/nemo/default.nix b/pkgs/desktops/cinnamon/nemo/default.nix
index 6af812141d3..ef5762cd141 100644
--- a/pkgs/desktops/cinnamon/nemo/default.nix
+++ b/pkgs/desktops/cinnamon/nemo/default.nix
@@ -25,8 +25,6 @@ stdenv.mkDerivation rec {
   pname = "nemo";
   version = "5.6.1";
 
-  # TODO: add plugins support (see https://github.com/NixOS/nixpkgs/issues/78327)
-
   src = fetchFromGitHub {
     owner = "linuxmint";
     repo = pname;
@@ -35,6 +33,10 @@ stdenv.mkDerivation rec {
   };
 
   patches = [
+    # Load extensions from NEMO_EXTENSION_DIR environment variable
+    # https://github.com/NixOS/nixpkgs/issues/78327
+    ./load-extensions-from-env.patch
+
     # Don't populate nemo actions from /run/current-system/sw/share
     # They should only be loaded exactly once from $out/share
     # https://github.com/NixOS/nixpkgs/issues/190781
@@ -70,12 +72,16 @@ stdenv.mkDerivation rec {
     "--localedir=${cinnamon-translations}/share/locale"
   ];
 
+  # Taken from libnemo-extension.pc.
+  passthru.extensiondir = "lib/nemo/extensions-3.0";
+
   meta = with lib; {
     homepage = "https://github.com/linuxmint/nemo";
     description = "File browser for Cinnamon";
     license = [ licenses.gpl2 licenses.lgpl2 ];
     platforms = platforms.linux;
     maintainers = teams.cinnamon.members;
+    mainProgram = "nemo";
   };
 }
 
diff --git a/pkgs/desktops/cinnamon/nemo/load-extensions-from-env.patch b/pkgs/desktops/cinnamon/nemo/load-extensions-from-env.patch
new file mode 100644
index 00000000000..610b3490cac
--- /dev/null
+++ b/pkgs/desktops/cinnamon/nemo/load-extensions-from-env.patch
@@ -0,0 +1,40 @@
+diff --git a/libnemo-private/nemo-module.c b/libnemo-private/nemo-module.c
+index 92bcff5..ecadcd8 100644
+--- a/libnemo-private/nemo-module.c
++++ b/libnemo-private/nemo-module.c
+@@ -209,11 +209,16 @@ void
+ nemo_module_setup (void)
+ {
+ 	static gboolean initialized = FALSE;
++	const gchar *extensiondir = NULL;
+ 
+ 	if (!initialized) {
+ 		initialized = TRUE;
+ 		
+-		load_module_dir (NEMO_EXTENSIONDIR);
++		extensiondir = g_getenv ("NEMO_EXTENSION_DIR");
++		if (extensiondir == NULL) {
++			extensiondir = NEMO_EXTENSIONDIR;
++		}
++		load_module_dir (extensiondir);
+ 
+ 		eel_debug_call_at_shutdown (free_module_objects);
+ 	}
+diff --git a/src/nemo-extensions-list.c b/src/nemo-extensions-list.c
+index 944fc5f..983c396 100644
+--- a/src/nemo-extensions-list.c
++++ b/src/nemo-extensions-list.c
+@@ -129,7 +129,12 @@ module_get_extensions_for_type (GType type)
+ int
+ main (int argc, char *argv[])
+ {
+-    populate_from_directory (NEMO_EXTENSIONDIR);
++    const gchar *extensiondir = NULL;
++    extensiondir = g_getenv ("NEMO_EXTENSION_DIR");
++    if (extensiondir == NULL) {
++        extensiondir = NEMO_EXTENSIONDIR;
++    }
++    populate_from_directory (extensiondir);
+ 
+     GList *nd_providers;
+     GList *l;
diff --git a/pkgs/desktops/cinnamon/nemo/wrapper.nix b/pkgs/desktops/cinnamon/nemo/wrapper.nix
new file mode 100644
index 00000000000..ae94ff9ae84
--- /dev/null
+++ b/pkgs/desktops/cinnamon/nemo/wrapper.nix
@@ -0,0 +1,37 @@
+{ symlinkJoin
+, lib
+, makeWrapper
+, nemo
+, nemoExtensions
+, extensions ? [ ]
+, useDefaultExtensions ? true
+}:
+
+let
+  selectedExtensions = extensions ++ (lib.optionals useDefaultExtensions nemoExtensions);
+in
+symlinkJoin {
+  name = "nemo-with-extensions-${nemo.version}";
+
+  paths = [ nemo ] ++ selectedExtensions;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postBuild = ''
+    for f in $(find $out/bin/ $out/libexec/ -type l -not -path "*/.*"); do
+      wrapProgram "$f" \
+        --set "NEMO_EXTENSION_DIR" "$out/${nemo.extensiondir}"
+    done
+
+    # Point to wrapped binary in all service files
+    for file in "share/dbus-1/services/nemo.FileManager1.service" \
+      "share/dbus-1/services/nemo.service"
+    do
+      rm "$out/$file"
+      substitute "${nemo}/$file" "$out/$file" \
+        --replace "${nemo}" "$out"
+    done
+  '';
+
+  inherit (nemo) meta;
+}