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