From 25f506e942efe200729ec02022f18cfef8f8231d Mon Sep 17 00:00:00 2001 From: Bobby Rong Date: Mon, 19 Dec 2022 20:41:25 +0800 Subject: [PATCH] cinnamon.nemo-python: init at 5.6.0 --- pkgs/desktops/cinnamon/default.nix | 2 + .../nemo-extensions/nemo-python/default.nix | 68 +++++++++++++++++++ .../load-extensions-from-env.patch | 27 ++++++++ .../nemo-python/python-path.patch | 13 ++++ pkgs/desktops/cinnamon/nemo/wrapper.nix | 3 +- 5 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 pkgs/desktops/cinnamon/nemo-extensions/nemo-python/default.nix create mode 100644 pkgs/desktops/cinnamon/nemo-extensions/nemo-python/load-extensions-from-env.patch create mode 100644 pkgs/desktops/cinnamon/nemo-extensions/nemo-python/python-path.patch diff --git a/pkgs/desktops/cinnamon/default.nix b/pkgs/desktops/cinnamon/default.nix index ddd85d3e8ec..c84bde1c2c0 100644 --- a/pkgs/desktops/cinnamon/default.nix +++ b/pkgs/desktops/cinnamon/default.nix @@ -15,6 +15,7 @@ lib.makeScope pkgs.newScope (self: with self; { # Extensions added here will be shipped by default nemoExtensions = [ nemo-fileroller + nemo-python ]; # blueberry -> pkgs/tools/bluetooth/blueberry/default.nix @@ -31,6 +32,7 @@ lib.makeScope pkgs.newScope (self: with self; { cjs = callPackage ./cjs { }; nemo = callPackage ./nemo { }; nemo-fileroller = callPackage ./nemo-extensions/nemo-fileroller { }; + nemo-python = callPackage ./nemo-extensions/nemo-python { }; nemo-with-extensions = callPackage ./nemo/wrapper.nix { }; mint-artwork = callPackage ./mint-artwork { }; mint-cursor-themes = callPackage ./mint-cursor-themes { }; diff --git a/pkgs/desktops/cinnamon/nemo-extensions/nemo-python/default.nix b/pkgs/desktops/cinnamon/nemo-extensions/nemo-python/default.nix new file mode 100644 index 00000000000..bc43f2aa084 --- /dev/null +++ b/pkgs/desktops/cinnamon/nemo-extensions/nemo-python/default.nix @@ -0,0 +1,68 @@ +{ stdenv +, lib +, fetchFromGitHub +, meson +, pkg-config +, ninja +, glib +, gtk3 +, nemo +, python3 +, substituteAll +}: + +stdenv.mkDerivation rec { + pname = "nemo-python"; + version = "5.6.0"; + + src = fetchFromGitHub { + owner = "linuxmint"; + repo = "nemo-extensions"; + rev = version; + sha256 = "sha256-cxutiz5bc/dZ9D7XzvMWodWNYvNJPj+5IhJDPJwnb5I="; + }; + + sourceRoot = "${src.name}/nemo-python"; + + patches = [ + # Load extensions from NEMO_PYTHON_EXTENSION_DIR environment variable + # https://github.com/NixOS/nixpkgs/issues/78327 + ./load-extensions-from-env.patch + + # Required for pygobject_init (). + (substituteAll { + src = ./python-path.patch; + env = "${python3.pkgs.pygobject3}/${python3.sitePackages}"; + }) + ]; + + nativeBuildInputs = [ + meson + pkg-config + ninja + ]; + + buildInputs = [ + glib + gtk3 + nemo + python3 + python3.pkgs.pygobject3 + ]; + + postPatch = '' + # Tries to load libpython3.so via g_module_open (). + substituteInPlace meson.build \ + --replace "get_option('prefix'), get_option('libdir')" "'${python3}/lib'" + ''; + + PKG_CONFIG_LIBNEMO_EXTENSION_EXTENSIONDIR = "${placeholder "out"}/${nemo.extensiondir}"; + + meta = with lib; { + homepage = "https://github.com/linuxmint/nemo-extensions/tree/master/nemo-python"; + description = "Python bindings for the Nemo extension library"; + license = licenses.gpl2Plus; + platforms = platforms.linux; + maintainers = teams.cinnamon.members; + }; +} diff --git a/pkgs/desktops/cinnamon/nemo-extensions/nemo-python/load-extensions-from-env.patch b/pkgs/desktops/cinnamon/nemo-extensions/nemo-python/load-extensions-from-env.patch new file mode 100644 index 00000000000..ad9a4abdc38 --- /dev/null +++ b/pkgs/desktops/cinnamon/nemo-extensions/nemo-python/load-extensions-from-env.patch @@ -0,0 +1,27 @@ +diff --git a/src/nemo-python.c b/src/nemo-python.c +index 8d2acdb..900811b 100644 +--- a/src/nemo-python.c ++++ b/src/nemo-python.c +@@ -255,6 +255,7 @@ nemo_module_initialize(GTypeModule *module) + { + gchar *user_extensions_dir; + const gchar *env_string; ++ const gchar *python_extensiondir; + + env_string = g_getenv("NEMO_PYTHON_DEBUG"); + if (env_string != NULL) +@@ -269,8 +270,12 @@ nemo_module_initialize(GTypeModule *module) + + all_types = g_array_new(FALSE, FALSE, sizeof(GType)); + +- // Look in the new global path, $DATADIR/nemo-python/extensions +- nemo_python_load_dir(module, PYTHON_EXTENSION_DIR); ++ // Look in NEMO_PYTHON_EXTENSION_DIR ++ python_extensiondir = g_getenv("NEMO_PYTHON_EXTENSION_DIR"); ++ if (python_extensiondir == NULL) { ++ python_extensiondir = PYTHON_EXTENSION_DIR; ++ } ++ nemo_python_load_dir(module, python_extensiondir); + + // Look in XDG_DATA_DIR, ~/.local/share/nemo-python/extensions + user_extensions_dir = g_build_filename(g_get_user_data_dir(), diff --git a/pkgs/desktops/cinnamon/nemo-extensions/nemo-python/python-path.patch b/pkgs/desktops/cinnamon/nemo-extensions/nemo-python/python-path.patch new file mode 100644 index 00000000000..bf6db93385c --- /dev/null +++ b/pkgs/desktops/cinnamon/nemo-extensions/nemo-python/python-path.patch @@ -0,0 +1,13 @@ +diff --git a/src/nemo-python.c b/src/nemo-python.c +index 8d2acdb..ee24143 100644 +--- a/src/nemo-python.c ++++ b/src/nemo-python.c +@@ -197,7 +197,7 @@ nemo_python_init_python (void) + } + + debug("Sanitize the python search path"); +- PyRun_SimpleString("import sys; sys.path = [path for path in sys.path if path]"); ++ PyRun_SimpleString("import sys; sys.path = [path for path in sys.path if path]; sys.path.append('@env@')"); + if (PyErr_Occurred()) + { + PyErr_Print(); diff --git a/pkgs/desktops/cinnamon/nemo/wrapper.nix b/pkgs/desktops/cinnamon/nemo/wrapper.nix index ae94ff9ae84..7f7633d19a8 100644 --- a/pkgs/desktops/cinnamon/nemo/wrapper.nix +++ b/pkgs/desktops/cinnamon/nemo/wrapper.nix @@ -20,7 +20,8 @@ symlinkJoin { postBuild = '' for f in $(find $out/bin/ $out/libexec/ -type l -not -path "*/.*"); do wrapProgram "$f" \ - --set "NEMO_EXTENSION_DIR" "$out/${nemo.extensiondir}" + --set "NEMO_EXTENSION_DIR" "$out/${nemo.extensiondir}" \ + --set "NEMO_PYTHON_EXTENSION_DIR" "$out/share/nemo-python/extensions" done # Point to wrapped binary in all service files