thunar: improvements (close #10306)

Add the possibility to specify plugin set to
be used as overridable `thunar` derivation argument.

New nixos config attribute:
`services.xserver.desktopManager.xfce.thunarPlugins`
that allows user to specify plugins in the context
of nixos.

Tests:

- With and without plugins.
- Using the nixos attributes.

authored by Raymond Gauthier and committed by Vladimír Čunát 662bbb52 b2409581

+111 -32
+9 -1
nixos/modules/services/x11/desktop-managers/xfce.nix
··· 18 18 description = "Enable the Xfce desktop environment."; 19 19 }; 20 20 21 + services.xserver.desktopManager.xfce.thunarPlugins = mkOption { 22 + default = []; 23 + type = types.listOf types.package; 24 + example = literalExample "[ pkgs.xfce.thunar-archive-plugin ]"; 25 + description = '' 26 + A list of plugin that should be installed with Thunar. 27 + ''; 28 + }; 21 29 }; 22 30 23 31 ··· 49 57 pkgs.xfce.mousepad 50 58 pkgs.xfce.ristretto 51 59 pkgs.xfce.terminal 52 - pkgs.xfce.thunar 60 + (pkgs.xfce.thunar.override { thunarPlugins = cfg.thunarPlugins; }) 53 61 pkgs.xfce.xfce4icontheme 54 62 pkgs.xfce.xfce4panel 55 63 pkgs.xfce.xfce4session
+38
pkgs/desktops/xfce/core/thunar-build.nix
··· 1 + { stdenv, fetchurl, pkgconfig, intltool 2 + , gtk, dbus_glib, libstartup_notification, libnotify, libexif, pcre, udev 3 + , exo, libxfce4util, xfconf, xfce4panel 4 + }: 5 + 6 + stdenv.mkDerivation rec { 7 + p_name = "thunar"; 8 + ver_maj = "1.6"; 9 + ver_min = "10"; 10 + 11 + src = fetchurl { 12 + url = "mirror://xfce/src/xfce/${p_name}/${ver_maj}/Thunar-${ver_maj}.${ver_min}.tar.bz2"; 13 + sha256 = "7e9d24067268900e5e44d3325e60a1a2b2f8f556ec238ec12574fbea15fdee8a"; 14 + }; 15 + 16 + name = "${p_name}-build-${ver_maj}.${ver_min}"; 17 + 18 + patches = [ ./thunarx_plugins_directory.patch ]; 19 + 20 + buildInputs = [ 21 + pkgconfig intltool 22 + gtk dbus_glib libstartup_notification libnotify libexif pcre udev 23 + exo libxfce4util xfconf xfce4panel 24 + ]; 25 + # TODO: optionality? 26 + 27 + enableParallelBuilding = true; 28 + 29 + preFixup = "rm $out/share/icons/hicolor/icon-theme.cache"; 30 + 31 + meta = { 32 + homepage = http://thunar.xfce.org/; 33 + description = "Xfce file manager"; 34 + license = stdenv.lib.licenses.gpl2Plus; 35 + platforms = stdenv.lib.platforms.linux; 36 + maintainers = [ stdenv.lib.maintainers.eelco ]; 37 + }; 38 + }
+58 -27
pkgs/desktops/xfce/core/thunar.nix
··· 1 - { stdenv, fetchurl, pkgconfig, intltool 2 - , gtk, dbus_glib, libstartup_notification, libnotify, libexif, pcre, udev 3 - , exo, libxfce4util, xfconf, xfce4panel 1 + { stdenv, buildEnv, runCommand, makeWrapper, lndir, thunar-build 2 + , thunarPlugins ? [] 4 3 }: 5 4 6 - stdenv.mkDerivation rec { 7 - p_name = "thunar"; 8 - ver_maj = "1.6"; 9 - ver_min = "10"; 5 + with stdenv.lib; 6 + 7 + let 8 + 9 + build = thunar-build; 10 + 11 + replaceLnExeListWithWrapped = exeDir: exeNameList: mkWrapArgs: '' 12 + exeDir="${exeDir}" 13 + oriDir=`realpath -e "$exeDir"` 14 + unlink "$exeDir" 15 + mkdir -p "$exeDir" 16 + lndir "$oriDir" "$exeDir" 17 + 18 + exeList="${concatStrings (intersperse " " (map (x: "${exeDir}/${x}") exeNameList))}" 19 + 20 + for exe in $exeList; do 21 + oriExe=`realpath -e "$exe"` 22 + rm -f "$exe" 23 + makeWrapper "$oriExe" "$exe" ${concatStrings (intersperse " " mkWrapArgs)} 24 + done 25 + ''; 26 + 27 + name = "${build.p_name}-${build.ver_maj}.${build.ver_min}"; 28 + 29 + meta = { 30 + inherit (build.meta) homepage license platforms; 10 31 11 - src = fetchurl { 12 - url = "mirror://xfce/src/xfce/${p_name}/${ver_maj}/Thunar-${ver_maj}.${ver_min}.tar.bz2"; 13 - sha256 = "7e9d24067268900e5e44d3325e60a1a2b2f8f556ec238ec12574fbea15fdee8a"; 32 + description = build.meta.description + optionalString 33 + (0 != length thunarPlugins) 34 + " (with plugins: ${concatStrings (intersperse ", " (map (x: x.name) thunarPlugins))})"; 35 + maintainers = build.meta.maintainers /*++ [ jraygauthier ]*/; 14 36 }; 15 - name = "${p_name}-${ver_maj}.${ver_min}"; 16 37 17 - patches = [ ./thunarx_plugins_directory.patch ]; 38 + in 18 39 19 - buildInputs = [ 20 - pkgconfig intltool 21 - gtk dbus_glib libstartup_notification libnotify libexif pcre udev 22 - exo libxfce4util xfconf xfce4panel 23 - ]; 24 - # TODO: optionality? 40 + # TODO: To be replaced with `buildEnv` awaiting missing features. 41 + runCommand name { 42 + inherit build; 43 + inherit meta; 25 44 26 - enableParallelBuilding = true; 45 + nativeBuildInputs = [ makeWrapper lndir ]; 27 46 28 - preFixup = "rm $out/share/icons/hicolor/icon-theme.cache"; 47 + dontPatchELF = true; 48 + dontStrip = true; 29 49 30 - meta = { 31 - homepage = http://thunar.xfce.org/; 32 - description = "Xfce file manager"; 33 - license = stdenv.lib.licenses.gpl2Plus; 34 - platforms = stdenv.lib.platforms.linux; 35 - maintainers = [ stdenv.lib.maintainers.eelco ]; 50 + } 51 + (let 52 + buildWithPlugins = buildEnv { 53 + name = "thunar-build-with-plugins"; 54 + paths = [ build ] ++ thunarPlugins; 36 55 }; 37 - } 56 + 57 + in '' 58 + mkdir -p $out 59 + pushd ${buildWithPlugins} > /dev/null 60 + for d in `find . -maxdepth 1 -name "*" -printf "%f\n" | tail -n+2`; do 61 + ln -s "${buildWithPlugins}/$d" "$out/$d" 62 + done 63 + popd > /dev/null 64 + 65 + ${replaceLnExeListWithWrapped "$out/bin" [ "thunar" "thunar-settings" ] [ 66 + "--set THUNARX_MODULE_DIR \"${buildWithPlugins}/lib/thunarx-2\"" 67 + ]} 68 + '')
+2
pkgs/desktops/xfce/default.nix
··· 26 26 libxfce4ui_gtk3 = libxfce4ui.override { withGtk3 = true; }; 27 27 libxfce4util = callPackage ./core/libxfce4util.nix { }; 28 28 libxfcegui4 = callPackage ./core/libxfcegui4.nix { }; 29 + thunar-build = callPackage ./core/thunar-build.nix { }; 29 30 thunar = callPackage ./core/thunar.nix { }; 31 + thunarx-2-dev = thunar-build; # Plugins need only the `thunarx-2` part of the package. Awaiting multiple outputs. 30 32 thunar_volman = callPackage ./core/thunar-volman.nix { }; # ToDo: probably inside Thunar now 31 33 thunar-archive-plugin 32 34 = callPackage ./thunar-plugins/archive { };
+2 -2
pkgs/desktops/xfce/thunar-plugins/archive/default.nix
··· 1 1 { stdenv, fetchFromGitHub, pkgconfig, xfce4_dev_tools 2 2 , gtk 3 - , thunar 3 + , thunarx-2-dev 4 4 , exo, libxfce4util, libxfce4ui 5 5 , xfconf, udev, libnotify 6 6 }: ··· 21 21 buildInputs = [ 22 22 pkgconfig 23 23 xfce4_dev_tools 24 - thunar 24 + thunarx-2-dev 25 25 exo gtk libxfce4util libxfce4ui 26 26 xfconf udev libnotify 27 27 ];
+2 -2
pkgs/desktops/xfce/thunar-plugins/dropbox/default.nix
··· 1 1 { stdenv, fetchurl, pkgconfig 2 2 , gtk 3 - , thunar, python2 3 + , thunarx-2-dev, python2 4 4 }: 5 5 6 6 stdenv.mkDerivation rec { ··· 17 17 buildInputs = [ 18 18 pkgconfig 19 19 gtk 20 - thunar python2 20 + thunarx-2-dev python2 21 21 ]; 22 22 23 23 configurePhase = "python2 waf configure --prefix=$out";