From f60da05d0b0c3882165d60f1a5886b6183a0bcb4 Mon Sep 17 00:00:00 2001 From: Bobby Rong Date: Mon, 19 Dec 2022 17:39:42 +0800 Subject: cinnamon.nemo-with-extensions: init --- pkgs/desktops/cinnamon/default.nix | 5 +++ pkgs/desktops/cinnamon/nemo/default.nix | 10 ++++-- .../cinnamon/nemo/load-extensions-from-env.patch | 40 ++++++++++++++++++++++ pkgs/desktops/cinnamon/nemo/wrapper.nix | 37 ++++++++++++++++++++ 4 files changed, 90 insertions(+), 2 deletions(-) create mode 100644 pkgs/desktops/cinnamon/nemo/load-extensions-from-env.patch create mode 100644 pkgs/desktops/cinnamon/nemo/wrapper.nix (limited to 'pkgs') 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; +} -- cgit 1.4.1