Merge pull request #105151 from B4dM4n/copy-desktop-hook

copyDesktopItems: add new setup-hook

authored by Frederik Rietdijk and committed by GitHub db29c151 da817c1a

+98 -35
+8 -3
pkgs/applications/audio/goattracker/default.nix
··· 1 1 { stdenv 2 2 , fetchurl 3 3 , unzip 4 + , copyDesktopItems 4 5 , makeDesktopItem 5 6 , imagemagick 6 7 , SDL ··· 37 38 }; 38 39 sourceRoot = (if isStereo then "gt2stereo/trunk" else "goattrk2") + "/src"; 39 40 40 - nativeBuildInputs = [ unzip imagemagick ]; 41 + nativeBuildInputs = [ copyDesktopItems unzip imagemagick ]; 41 42 buildInputs = [ SDL ]; 42 43 43 44 # PREFIX gets treated as BINDIR. ··· 51 52 52 53 # Other files get installed during the build phase. 53 54 installPhase = '' 55 + runHook preInstall 56 + 54 57 convert goattrk2.bmp goattracker.png 55 58 install -Dm644 goattracker.png $out/share/icons/hicolor/32x32/apps/goattracker.png 56 - ${desktopItem.buildCommand} 59 + 60 + runHook postInstall 57 61 ''; 62 + 63 + desktopItems = [ desktopItem ]; 58 64 59 65 meta = { 60 66 description = "A crossplatform music editor for creating Commodore 64 music. Uses reSID library by Dag Lem and supports alternatively HardSID & CatWeasel devices" ··· 66 72 platforms = platforms.all; 67 73 }; 68 74 } 69 -
+7 -6
pkgs/applications/networking/mailreaders/thunderbird/68.nix
··· 4 4 , bzip2 5 5 , cargo 6 6 , common-updater-scripts 7 + , copyDesktopItems 7 8 , coreutils 8 9 , curl 9 10 , dbus ··· 83 84 nativeBuildInputs = [ 84 85 autoconf213 85 86 cargo 87 + copyDesktopItems 86 88 gnused 87 89 llvmPackages.llvm 88 90 m4 ··· 262 264 263 265 doCheck = false; 264 266 265 - postInstall = let 266 - desktopItem = makeDesktopItem { 267 + desktopItems = [ 268 + (makeDesktopItem { 267 269 categories = lib.concatStringsSep ";" [ "Application" "Network" ]; 268 270 desktopName = "Thunderbird"; 269 271 genericName = "Mail Reader"; ··· 283 285 "x-scheme-handler/snews" 284 286 "x-scheme-handler/nntp" 285 287 ]; 286 - }; 287 - in '' 288 + }) 289 + ]; 290 + postInstall = '' 288 291 # TODO: Move to a dev output? 289 292 rm -rf $out/include $out/lib/thunderbird-devel-* $out/share/idl 290 - 291 - ${desktopItem.buildCommand} 292 293 ''; 293 294 294 295 preFixup = ''
+8 -6
pkgs/applications/networking/mailreaders/thunderbird/default.nix
··· 2 2 , bzip2 3 3 , cargo 4 4 , common-updater-scripts 5 + , copyDesktopItems 5 6 , coreutils 6 7 , curl 7 8 , dbus ··· 82 83 nativeBuildInputs = [ 83 84 autoconf213 84 85 cargo 86 + copyDesktopItems 85 87 gnused 86 88 llvmPackages.llvm 87 89 m4 ··· 257 259 258 260 doCheck = false; 259 261 260 - postInstall = let 261 - desktopItem = makeDesktopItem { 262 + desktopItems = [ 263 + (makeDesktopItem { 262 264 categories = lib.concatStringsSep ";" [ "Application" "Network" ]; 263 265 desktopName = "Thunderbird"; 264 266 genericName = "Mail Reader"; ··· 278 280 "x-scheme-handler/snews" 279 281 "x-scheme-handler/nntp" 280 282 ]; 281 - }; 282 - in '' 283 + }) 284 + ]; 285 + 286 + postInstall = '' 283 287 # TODO: Move to a dev output? 284 288 rm -rf $out/include $out/lib/thunderbird-devel-* $out/share/idl 285 - 286 - ${desktopItem.buildCommand} 287 289 ''; 288 290 289 291 preFixup = ''
+4 -6
pkgs/applications/office/softmaker/generic.nix
··· 1 - { stdenv, fetchurl, autoPatchelfHook, makeDesktopItem, makeWrapper 1 + { stdenv, fetchurl, autoPatchelfHook, makeDesktopItem, makeWrapper, copyDesktopItems 2 2 3 3 # Dynamic Libraries 4 4 , curl, libGL, libX11, libXext, libXmu, libXrandr, libXrender ··· 27 27 28 28 nativeBuildInputs = [ 29 29 autoPatchelfHook 30 + copyDesktopItems 30 31 makeWrapper 31 32 ]; 32 33 ··· 110 111 # remove broken symbolic links 111 112 find $out -xtype l -ls -exec rm {} \; 112 113 113 - # Add desktop items 114 - ${desktopItems.planmaker.buildCommand} 115 - ${desktopItems.presentations.buildCommand} 116 - ${desktopItems.textmaker.buildCommand} 117 - 118 114 # Add mime types 119 115 install -D -t $out/share/mime/packages ${pname}/mime/softmaker-*office*${shortEdition}.xml 120 116 121 117 runHook postInstall 122 118 ''; 119 + 120 + desktopItems = builtins.attrValues desktopItems; 123 121 124 122 meta = with stdenv.lib; { 125 123 description = "An office suite with a word processor, spreadsheet and presentation program";
+42
pkgs/build-support/setup-hooks/copy-desktop-items.sh
··· 1 + # shellcheck shell=bash 2 + 3 + # Setup hook that installs specified desktop items. 4 + # 5 + # Example usage in a derivation: 6 + # 7 + # { …, makeDesktopItem, copyDesktopItems, … }: 8 + # 9 + # let desktopItem = makeDesktopItem { … }; in 10 + # stdenv.mkDerivation { 11 + # … 12 + # nativeBuildInputs = [ copyDesktopItems ]; 13 + # 14 + # desktopItems = [ desktopItem ]; 15 + # … 16 + # } 17 + # 18 + # This hook will copy files which are either given by full path 19 + # or all '*.desktop' files placed inside the 'share/applications' 20 + # folder of each `desktopItems` argument. 21 + 22 + postInstallHooks+=(copyDesktopItems) 23 + 24 + copyDesktopItems() { 25 + if [ "${dontCopyDesktopItems-}" = 1 ]; then return; fi 26 + 27 + if [ -z "$desktopItems" ]; then 28 + return 29 + fi 30 + 31 + for desktopItem in $desktopItems; do 32 + if [[ -f "$desktopItem" ]]; then 33 + echo "Copying '$f' into '$out/share/applications'" 34 + install -D -m 444 -t "$out"/share/applications "$f" 35 + else 36 + for f in "$desktopItem"/share/applications/*.desktop; do 37 + echo "Copying '$f' into '$out/share/applications'" 38 + install -D -m 444 -t "$out"/share/applications "$f" 39 + done 40 + fi 41 + done 42 + }
+8 -3
pkgs/games/minecraft/default.nix
··· 1 1 { stdenv 2 2 , fetchurl 3 3 , nixosTests 4 + , copyDesktopItems 4 5 , makeDesktopItem 5 6 , makeWrapper 6 7 , wrapGAppsHook ··· 38 39 comment = "Official launcher for Minecraft, a sandbox-building game"; 39 40 desktopName = "Minecraft Launcher"; 40 41 categories = "Game;"; 41 - fileValidation = false; 42 42 }; 43 43 44 44 envLibPath = stdenv.lib.makeLibraryPath [ ··· 100 100 sha256 = "0w8z21ml79kblv20wh5lz037g130pxkgs8ll9s3bi94zn2pbrhim"; 101 101 }; 102 102 103 - nativeBuildInputs = [ makeWrapper wrapGAppsHook ]; 103 + nativeBuildInputs = [ makeWrapper wrapGAppsHook copyDesktopItems ]; 104 104 buildInputs = [ gobject-introspection ]; 105 105 106 106 sourceRoot = "."; ··· 110 110 dontBuild = true; 111 111 112 112 installPhase = '' 113 + runHook preInstall 114 + 113 115 mkdir -p $out/opt 114 116 mv minecraft-launcher $out/opt 115 117 116 - ${desktopItem.buildCommand} 117 118 install -D $icon $out/share/icons/hicolor/symbolic/apps/minecraft-launcher.svg 119 + 120 + runHook postInstall 118 121 ''; 119 122 120 123 preFixup = '' ··· 139 142 --run "cd /tmp" \ 140 143 "''${gappsWrapperArgs[@]}" 141 144 ''; 145 + 146 + desktopItems = [ desktopItem ]; 142 147 143 148 meta = with stdenv.lib; { 144 149 description = "Official launcher for Minecraft, a sandbox-building game";
+4 -3
pkgs/games/xonotic/default.nix
··· 1 1 { lib, stdenv, fetchurl, fetchzip, makeWrapper, runCommandNoCC, makeDesktopItem 2 - , xonotic-data 2 + , xonotic-data, copyDesktopItems 3 3 , # required for both 4 4 unzip, libjpeg, zlib, libvorbis, curl 5 5 , # glx ··· 131 131 132 132 xonotic = runCommandNoCC "xonotic${variant}-${version}" { 133 133 inherit xonotic-unwrapped; 134 - buildInputs = [ makeWrapper ]; 134 + nativeBuildInputs = [ makeWrapper copyDesktopItems ]; 135 + desktopItems = [ desktopItem ]; 135 136 passthru = { 136 137 inherit version; 137 138 meta = meta // { ··· 151 152 '' + lib.optionalString (withSDL || withGLX) '' 152 153 mkdir -p $out/share 153 154 ln -s ${xonotic-unwrapped}/share/icons $out/share/icons 154 - ${desktopItem.buildCommand} 155 + copyDesktopItems 155 156 '' + '' 156 157 for binary in $out/bin/xonotic-*; do 157 158 wrapProgram $binary --add-flags "-basedir ${xonotic-data}"
+6 -3
pkgs/tools/misc/jdiskreport/default.nix
··· 1 - { stdenv, fetchurl, unzip, jre, makeDesktopItem }: 1 + { stdenv, fetchurl, unzip, jre, makeDesktopItem, copyDesktopItems }: 2 2 3 3 let 4 4 desktopItem = makeDesktopItem { ··· 18 18 sha256 = "0d5mzkwsbh9s9b1vyvpaawqc09b0q41l2a7pmwf7386b1fsx6d58"; 19 19 }; 20 20 21 + nativeBuildInputs = [ copyDesktopItems ]; 21 22 buildInputs = [ unzip ]; 22 23 inherit jre; 23 24 24 25 installPhase = '' 25 - source $stdenv/setup 26 + runHook preInstall 26 27 27 28 unzip $src 28 29 ··· 38 39 EOF 39 40 chmod +x $out/bin/jdiskreport 40 41 41 - ${desktopItem.buildCommand} 42 + runHook postInstall 42 43 ''; 44 + 45 + desktopItems = [ desktopItem ]; 43 46 44 47 meta = with stdenv.lib; { 45 48 homepage = "http://www.jgoodies.com/freeware/jdiskreport/";
+9 -5
pkgs/tools/security/jd-gui/default.nix
··· 1 - { stdenv, fetchFromGitHub, jre, jdk, gradle_5, makeDesktopItem, perl, writeText, runtimeShell }: 1 + { stdenv, fetchFromGitHub, jre, jdk, gradle_5, makeDesktopItem, copyDesktopItems, perl, writeText, runtimeShell }: 2 2 3 3 let 4 4 pname = "jd-gui"; ··· 55 55 } 56 56 ''; 57 57 58 - desktopItem = launcher: makeDesktopItem { 58 + desktopItem = makeDesktopItem { 59 59 name = "jd-gui"; 60 - exec = "${launcher} %F"; 60 + exec = "jd-gui %F"; 61 61 icon = "jd-gui"; 62 62 comment = "Java Decompiler JD-GUI"; 63 63 desktopName = "JD-GUI"; ··· 71 71 inherit pname version src; 72 72 name = "${pname}-${version}"; 73 73 74 - nativeBuildInputs = [ jdk gradle_5 ]; 74 + nativeBuildInputs = [ jdk gradle_5 copyDesktopItems ]; 75 75 76 76 buildPhase = '' 77 77 export GRADLE_USER_HOME=$(mktemp -d) ··· 81 81 installPhase = let 82 82 jar = "$out/share/jd-gui/${name}.jar"; 83 83 in '' 84 + runHook preInstall 85 + 84 86 mkdir -p $out/bin $out/share/{jd-gui,icons/hicolor/128x128/apps} 85 87 cp build/libs/${name}.jar ${jar} 86 88 cp src/linux/resources/jd_icon_128.png $out/share/icons/hicolor/128x128/apps/jd-gui.png ··· 92 94 EOF 93 95 chmod +x $out/bin/jd-gui 94 96 95 - ${(desktopItem "$out/bin/jd-gui").buildCommand} 97 + runHook postInstall 96 98 ''; 99 + 100 + desktopItems = [ desktopItem ]; 97 101 98 102 meta = with stdenv.lib; { 99 103 description = "Fast Java Decompiler with powerful GUI";
+2
pkgs/top-level/all-packages.nix
··· 463 463 464 464 madonctl = callPackage ../applications/misc/madonctl { }; 465 465 466 + copyDesktopItems = makeSetupHook { } ../build-support/setup-hooks/copy-desktop-items.sh; 467 + 466 468 makeDesktopItem = callPackage ../build-support/make-desktopitem { }; 467 469 468 470 makeAutostartItem = callPackage ../build-support/make-startupitem { };