git.iko.soy/typeable/nixpkgs
on master help sign in
Merge pull request #105151 from B4dM4n/copy-desktop-hook

copyDesktopItems: add new setup-hook

commitdb29c15173d23c1574d618cfc05dae63f85c315e authorFrederik Rietdijk <freddyrietdijk@fridh.nl> dateSun 29 Nov 2020, 13:26 (6 years ago) parentda817c1b65a1ab
10 files changed+98−35
pkgs/applications/audio/goattracker/default.nix+8−3 pkgs/applications/networking/mailreaders/thunderbird/68.nix+7−6 pkgs/applications/networking/mailreaders/thunderbird/default.nix+8−6 pkgs/applications/office/softmaker/generic.nix+4−6 pkgs/build-support/setup-hooks/copy-desktop-items.sh+42 pkgs/games/minecraft/default.nix+8−3 pkgs/games/xonotic/default.nix+4−3 pkgs/tools/misc/jdiskreport/default.nix+6−3 pkgs/tools/security/jd-gui/default.nix+9−5 pkgs/top-level/all-packages.nix+2
pkgs/applications/audio/goattracker/default.nix+8−3
@@ -1,6 +1,7 @@
11{ stdenv
22, fetchurl
33, unzip
4+, copyDesktopItems
45, makeDesktopItem
56, imagemagick
67, SDL
@@ -37,7 +38,7 @@ in stdenv.mkDerivation rec {
3738 };
3839 sourceRoot = (if isStereo then "gt2stereo/trunk" else "goattrk2") + "/src";
3940
40− nativeBuildInputs = [ unzip imagemagick ];
41+ nativeBuildInputs = [ copyDesktopItems unzip imagemagick ];
4142 buildInputs = [ SDL ];
4243
4344 # PREFIX gets treated as BINDIR.
@@ -51,11 +52,16 @@ in stdenv.mkDerivation rec {
5152
5253 # Other files get installed during the build phase.
5354 installPhase = ''
55+ runHook preInstall
56+
5457 convert goattrk2.bmp goattracker.png
5558 install -Dm644 goattracker.png $out/share/icons/hicolor/32x32/apps/goattracker.png
56− ${desktopItem.buildCommand}
59+
60+ runHook postInstall
5761 '';
5862
63+ desktopItems = [ desktopItem ];
64+
5965 meta = {
6066 description = "A crossplatform music editor for creating Commodore 64 music. Uses reSID library by Dag Lem and supports alternatively HardSID & CatWeasel devices"
6167 + optionalString isStereo " - Stereo version";
@@ -66,4 +72,3 @@ in stdenv.mkDerivation rec {
6672 platforms = platforms.all;
6773 };
6874}
69−
pkgs/applications/networking/mailreaders/thunderbird/68.nix+7−6
@@ -4,6 +4,7 @@
44, bzip2
55, cargo
66, common-updater-scripts
7+, copyDesktopItems
78, coreutils
89, curl
910, dbus
@@ -83,6 +84,7 @@ stdenv.mkDerivation rec {
8384 nativeBuildInputs = [
8485 autoconf213
8586 cargo
87+ copyDesktopItems
8688 gnused
8789 llvmPackages.llvm
8890 m4
@@ -262,8 +264,8 @@ stdenv.mkDerivation rec {
262264
263265 doCheck = false;
264266
265− postInstall = let
266− desktopItem = makeDesktopItem {
267+ desktopItems = [
268+ (makeDesktopItem {
267269 categories = lib.concatStringsSep ";" [ "Application" "Network" ];
268270 desktopName = "Thunderbird";
269271 genericName = "Mail Reader";
@@ -283,12 +285,11 @@ stdenv.mkDerivation rec {
283285 "x-scheme-handler/snews"
284286 "x-scheme-handler/nntp"
285287 ];
286− };
287− in ''
288+ })
289+ ];
290+ postInstall = ''
288291 # TODO: Move to a dev output?
289292 rm -rf $out/include $out/lib/thunderbird-devel-* $out/share/idl
290−
291− ${desktopItem.buildCommand}
292293 '';
293294
294295 preFixup = ''
pkgs/applications/networking/mailreaders/thunderbird/default.nix+8−6
@@ -2,6 +2,7 @@
22, bzip2
33, cargo
44, common-updater-scripts
5+, copyDesktopItems
56, coreutils
67, curl
78, dbus
@@ -82,6 +83,7 @@ stdenv.mkDerivation rec {
8283 nativeBuildInputs = [
8384 autoconf213
8485 cargo
86+ copyDesktopItems
8587 gnused
8688 llvmPackages.llvm
8789 m4
@@ -257,8 +259,8 @@ stdenv.mkDerivation rec {
257259
258260 doCheck = false;
259261
260− postInstall = let
261− desktopItem = makeDesktopItem {
262+ desktopItems = [
263+ (makeDesktopItem {
262264 categories = lib.concatStringsSep ";" [ "Application" "Network" ];
263265 desktopName = "Thunderbird";
264266 genericName = "Mail Reader";
@@ -278,12 +280,12 @@ stdenv.mkDerivation rec {
278280 "x-scheme-handler/snews"
279281 "x-scheme-handler/nntp"
280282 ];
281− };
282− in ''
283+ })
284+ ];
285+
286+ postInstall = ''
283287 # TODO: Move to a dev output?
284288 rm -rf $out/include $out/lib/thunderbird-devel-* $out/share/idl
285−
286− ${desktopItem.buildCommand}
287289 '';
288290
289291 preFixup = ''
pkgs/applications/office/softmaker/generic.nix+4−6
@@ -1,4 +1,4 @@
1−{ stdenv, fetchurl, autoPatchelfHook, makeDesktopItem, makeWrapper
1+{ stdenv, fetchurl, autoPatchelfHook, makeDesktopItem, makeWrapper, copyDesktopItems
22
33 # Dynamic Libraries
44, curl, libGL, libX11, libXext, libXmu, libXrandr, libXrender
@@ -27,6 +27,7 @@ in stdenv.mkDerivation {
2727
2828 nativeBuildInputs = [
2929 autoPatchelfHook
30+ copyDesktopItems
3031 makeWrapper
3132 ];
3233
@@ -110,17 +111,14 @@ in stdenv.mkDerivation {
110111 # remove broken symbolic links
111112 find $out -xtype l -ls -exec rm {} \;
112113
113− # Add desktop items
114− ${desktopItems.planmaker.buildCommand}
115− ${desktopItems.presentations.buildCommand}
116− ${desktopItems.textmaker.buildCommand}
117−
118114 # Add mime types
119115 install -D -t $out/share/mime/packages ${pname}/mime/softmaker-*office*${shortEdition}.xml
120116
121117 runHook postInstall
122118 '';
123119
120+ desktopItems = builtins.attrValues desktopItems;
121+
124122 meta = with stdenv.lib; {
125123 description = "An office suite with a word processor, spreadsheet and presentation program";
126124 homepage = "https://www.softmaker.com/";
pkgs/build-support/setup-hooks/copy-desktop-items.shnew file+42
@@ -0,0 +1,42 @@
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+}
pkgs/games/minecraft/default.nix+8−3
@@ -1,6 +1,7 @@
11{ stdenv
22, fetchurl
33, nixosTests
4+, copyDesktopItems
45, makeDesktopItem
56, makeWrapper
67, wrapGAppsHook
@@ -38,7 +39,6 @@ let
3839 comment = "Official launcher for Minecraft, a sandbox-building game";
3940 desktopName = "Minecraft Launcher";
4041 categories = "Game;";
41− fileValidation = false;
4242 };
4343
4444 envLibPath = stdenv.lib.makeLibraryPath [
@@ -100,7 +100,7 @@ stdenv.mkDerivation rec {
100100 sha256 = "0w8z21ml79kblv20wh5lz037g130pxkgs8ll9s3bi94zn2pbrhim";
101101 };
102102
103− nativeBuildInputs = [ makeWrapper wrapGAppsHook ];
103+ nativeBuildInputs = [ makeWrapper wrapGAppsHook copyDesktopItems ];
104104 buildInputs = [ gobject-introspection ];
105105
106106 sourceRoot = ".";
@@ -110,11 +110,14 @@ stdenv.mkDerivation rec {
110110 dontBuild = true;
111111
112112 installPhase = ''
113+ runHook preInstall
114+
113115 mkdir -p $out/opt
114116 mv minecraft-launcher $out/opt
115117
116− ${desktopItem.buildCommand}
117118 install -D $icon $out/share/icons/hicolor/symbolic/apps/minecraft-launcher.svg
119+
120+ runHook postInstall
118121 '';
119122
120123 preFixup = ''
@@ -140,6 +143,8 @@ stdenv.mkDerivation rec {
140143 "''${gappsWrapperArgs[@]}"
141144 '';
142145
146+ desktopItems = [ desktopItem ];
147+
143148 meta = with stdenv.lib; {
144149 description = "Official launcher for Minecraft, a sandbox-building game";
145150 homepage = "https://minecraft.net";
pkgs/games/xonotic/default.nix+4−3
@@ -1,5 +1,5 @@
11{ lib, stdenv, fetchurl, fetchzip, makeWrapper, runCommandNoCC, makeDesktopItem
2−, xonotic-data
2+, xonotic-data, copyDesktopItems
33, # required for both
44 unzip, libjpeg, zlib, libvorbis, curl
55, # glx
@@ -131,7 +131,8 @@ in rec {
131131
132132 xonotic = runCommandNoCC "xonotic${variant}-${version}" {
133133 inherit xonotic-unwrapped;
134− buildInputs = [ makeWrapper ];
134+ nativeBuildInputs = [ makeWrapper copyDesktopItems ];
135+ desktopItems = [ desktopItem ];
135136 passthru = {
136137 inherit version;
137138 meta = meta // {
@@ -151,7 +152,7 @@ in rec {
151152 '' + lib.optionalString (withSDL || withGLX) ''
152153 mkdir -p $out/share
153154 ln -s ${xonotic-unwrapped}/share/icons $out/share/icons
154− ${desktopItem.buildCommand}
155+ copyDesktopItems
155156 '' + ''
156157 for binary in $out/bin/xonotic-*; do
157158 wrapProgram $binary --add-flags "-basedir ${xonotic-data}"
pkgs/tools/misc/jdiskreport/default.nix+6−3
@@ -1,4 +1,4 @@
1−{ stdenv, fetchurl, unzip, jre, makeDesktopItem }:
1+{ stdenv, fetchurl, unzip, jre, makeDesktopItem, copyDesktopItems }:
22
33let
44 desktopItem = makeDesktopItem {
@@ -18,11 +18,12 @@ stdenv.mkDerivation {
1818 sha256 = "0d5mzkwsbh9s9b1vyvpaawqc09b0q41l2a7pmwf7386b1fsx6d58";
1919 };
2020
21+ nativeBuildInputs = [ copyDesktopItems ];
2122 buildInputs = [ unzip ];
2223 inherit jre;
2324
2425 installPhase = ''
25− source $stdenv/setup
26+ runHook preInstall
2627
2728 unzip $src
2829
@@ -38,9 +39,11 @@ stdenv.mkDerivation {
3839 EOF
3940 chmod +x $out/bin/jdiskreport
4041
41− ${desktopItem.buildCommand}
42+ runHook postInstall
4243 '';
4344
45+ desktopItems = [ desktopItem ];
46+
4447 meta = with stdenv.lib; {
4548 homepage = "http://www.jgoodies.com/freeware/jdiskreport/";
4649 description = "A graphical utility to visualize disk usage";
pkgs/tools/security/jd-gui/default.nix+9−5
@@ -1,4 +1,4 @@
1−{ stdenv, fetchFromGitHub, jre, jdk, gradle_5, makeDesktopItem, perl, writeText, runtimeShell }:
1+{ stdenv, fetchFromGitHub, jre, jdk, gradle_5, makeDesktopItem, copyDesktopItems, perl, writeText, runtimeShell }:
22
33let
44 pname = "jd-gui";
@@ -55,9 +55,9 @@ let
5555 }
5656 '';
5757
58− desktopItem = launcher: makeDesktopItem {
58+ desktopItem = makeDesktopItem {
5959 name = "jd-gui";
60− exec = "${launcher} %F";
60+ exec = "jd-gui %F";
6161 icon = "jd-gui";
6262 comment = "Java Decompiler JD-GUI";
6363 desktopName = "JD-GUI";
@@ -71,7 +71,7 @@ in stdenv.mkDerivation rec {
7171 inherit pname version src;
7272 name = "${pname}-${version}";
7373
74− nativeBuildInputs = [ jdk gradle_5 ];
74+ nativeBuildInputs = [ jdk gradle_5 copyDesktopItems ];
7575
7676 buildPhase = ''
7777 export GRADLE_USER_HOME=$(mktemp -d)
@@ -81,6 +81,8 @@ in stdenv.mkDerivation rec {
8181 installPhase = let
8282 jar = "$out/share/jd-gui/${name}.jar";
8383 in ''
84+ runHook preInstall
85+
8486 mkdir -p $out/bin $out/share/{jd-gui,icons/hicolor/128x128/apps}
8587 cp build/libs/${name}.jar ${jar}
8688 cp src/linux/resources/jd_icon_128.png $out/share/icons/hicolor/128x128/apps/jd-gui.png
@@ -92,9 +94,11 @@ in stdenv.mkDerivation rec {
9294 EOF
9395 chmod +x $out/bin/jd-gui
9496
95− ${(desktopItem "$out/bin/jd-gui").buildCommand}
97+ runHook postInstall
9698 '';
9799
100+ desktopItems = [ desktopItem ];
101+
98102 meta = with stdenv.lib; {
99103 description = "Fast Java Decompiler with powerful GUI";
100104 homepage = "https://java-decompiler.github.io/";
pkgs/top-level/all-packages.nix+2
@@ -463,6 +463,8 @@ in
463463
464464 madonctl = callPackage ../applications/misc/madonctl { };
465465
466+ copyDesktopItems = makeSetupHook { } ../build-support/setup-hooks/copy-desktop-items.sh;
467+
466468 makeDesktopItem = callPackage ../build-support/make-desktopitem { };
467469
468470 makeAutostartItem = callPackage ../build-support/make-startupitem { };