From 50f54c5ca752ed3831bdf81f486468b9937e49bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20M=C3=B6ller?= <fabianm88@gmail.com> Date: Fri, 27 Nov 2020 13:41:09 +0100 Subject: [PATCH 1/8] copyDesktopItems: add new setup-hook --- .../setup-hooks/copy-desktop-items.sh | 42 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 + 2 files changed, 44 insertions(+) create mode 100644 pkgs/build-support/setup-hooks/copy-desktop-items.sh diff --git a/pkgs/build-support/setup-hooks/copy-desktop-items.sh b/pkgs/build-support/setup-hooks/copy-desktop-items.sh new file mode 100644 index 000000000000..f96a10f33d5c --- /dev/null +++ b/pkgs/build-support/setup-hooks/copy-desktop-items.sh @@ -0,0 +1,42 @@ +# shellcheck shell=bash + +# Setup hook that installs specified desktop items. +# +# Example usage in a derivation: +# +# { …, makeDesktopItem, copyDesktopItems, … }: +# +# let desktopItem = makeDesktopItem { … }; in +# stdenv.mkDerivation { +# … +# nativeBuildInputs = [ copyDesktopItems ]; +# +# desktopItems = [ desktopItem ]; +# … +# } +# +# This hook will copy files which are either given by full path +# or all '*.desktop' files placed inside the 'share/applications' +# folder of each `desktopItems` argument. + +postInstallHooks+=(copyDesktopItems) + +copyDesktopItems() { + if [ "${dontCopyDesktopItems-}" = 1 ]; then return; fi + + if [ -z "$desktopItems" ]; then + return + fi + + for desktopItem in $desktopItems; do + if [[ -f "$desktopItem" ]]; then + echo "Copying '$f' into '$out/share/applications'" + install -D -m 444 -t "$out"/share/applications "$f" + else + for f in "$desktopItem"/share/applications/*.desktop; do + echo "Copying '$f' into '$out/share/applications'" + install -D -m 444 -t "$out"/share/applications "$f" + done + fi + done +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 1e0c31ce6216..4004ba4f94f6 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -463,6 +463,8 @@ in madonctl = callPackage ../applications/misc/madonctl { }; + copyDesktopItems = makeSetupHook { } ../build-support/setup-hooks/copy-desktop-items.sh; + makeDesktopItem = callPackage ../build-support/make-desktopitem { }; makeAutostartItem = callPackage ../build-support/make-startupitem { }; From 65f8183685d5f24dffc332e95892fab413024560 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20M=C3=B6ller?= <fabianm88@gmail.com> Date: Fri, 27 Nov 2020 13:41:44 +0100 Subject: [PATCH 2/8] goattracker: use copyDesktopItems hook --- pkgs/applications/audio/goattracker/default.nix | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/pkgs/applications/audio/goattracker/default.nix b/pkgs/applications/audio/goattracker/default.nix index 77a04221b84b..76b5617d23c3 100644 --- a/pkgs/applications/audio/goattracker/default.nix +++ b/pkgs/applications/audio/goattracker/default.nix @@ -1,6 +1,7 @@ { stdenv , fetchurl , unzip +, copyDesktopItems , makeDesktopItem , imagemagick , SDL @@ -37,7 +38,7 @@ in stdenv.mkDerivation rec { }; sourceRoot = (if isStereo then "gt2stereo/trunk" else "goattrk2") + "/src"; - nativeBuildInputs = [ unzip imagemagick ]; + nativeBuildInputs = [ copyDesktopItems unzip imagemagick ]; buildInputs = [ SDL ]; # PREFIX gets treated as BINDIR. @@ -51,11 +52,16 @@ in stdenv.mkDerivation rec { # Other files get installed during the build phase. installPhase = '' + runHook preInstall + convert goattrk2.bmp goattracker.png install -Dm644 goattracker.png $out/share/icons/hicolor/32x32/apps/goattracker.png - ${desktopItem.buildCommand} + + runHook postInstall ''; + desktopItems = [ desktopItem ]; + meta = { description = "A crossplatform music editor for creating Commodore 64 music. Uses reSID library by Dag Lem and supports alternatively HardSID & CatWeasel devices" + optionalString isStereo " - Stereo version"; @@ -66,4 +72,3 @@ in stdenv.mkDerivation rec { platforms = platforms.all; }; } - From c3598cc7d33b9d4eb2643d28f266a971aac39cb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20M=C3=B6ller?= <fabianm88@gmail.com> Date: Fri, 27 Nov 2020 13:42:09 +0100 Subject: [PATCH 3/8] thunderbird: use copyDesktopItems hook --- .../networking/mailreaders/thunderbird/68.nix | 13 +++++++------ .../networking/mailreaders/thunderbird/default.nix | 14 ++++++++------ 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/pkgs/applications/networking/mailreaders/thunderbird/68.nix b/pkgs/applications/networking/mailreaders/thunderbird/68.nix index ee5b7c5e17b0..60dc12054841 100644 --- a/pkgs/applications/networking/mailreaders/thunderbird/68.nix +++ b/pkgs/applications/networking/mailreaders/thunderbird/68.nix @@ -4,6 +4,7 @@ , bzip2 , cargo , common-updater-scripts +, copyDesktopItems , coreutils , curl , dbus @@ -83,6 +84,7 @@ stdenv.mkDerivation rec { nativeBuildInputs = [ autoconf213 cargo + copyDesktopItems gnused llvmPackages.llvm m4 @@ -262,8 +264,8 @@ stdenv.mkDerivation rec { doCheck = false; - postInstall = let - desktopItem = makeDesktopItem { + desktopItems = [ + (makeDesktopItem { categories = lib.concatStringsSep ";" [ "Application" "Network" ]; desktopName = "Thunderbird"; genericName = "Mail Reader"; @@ -283,12 +285,11 @@ stdenv.mkDerivation rec { "x-scheme-handler/snews" "x-scheme-handler/nntp" ]; - }; - in '' + }) + ]; + postInstall = '' # TODO: Move to a dev output? rm -rf $out/include $out/lib/thunderbird-devel-* $out/share/idl - - ${desktopItem.buildCommand} ''; preFixup = '' diff --git a/pkgs/applications/networking/mailreaders/thunderbird/default.nix b/pkgs/applications/networking/mailreaders/thunderbird/default.nix index 8295e8dbc871..8f4c96bbbcfb 100644 --- a/pkgs/applications/networking/mailreaders/thunderbird/default.nix +++ b/pkgs/applications/networking/mailreaders/thunderbird/default.nix @@ -2,6 +2,7 @@ , bzip2 , cargo , common-updater-scripts +, copyDesktopItems , coreutils , curl , dbus @@ -82,6 +83,7 @@ stdenv.mkDerivation rec { nativeBuildInputs = [ autoconf213 cargo + copyDesktopItems gnused llvmPackages.llvm m4 @@ -257,8 +259,8 @@ stdenv.mkDerivation rec { doCheck = false; - postInstall = let - desktopItem = makeDesktopItem { + desktopItems = [ + (makeDesktopItem { categories = lib.concatStringsSep ";" [ "Application" "Network" ]; desktopName = "Thunderbird"; genericName = "Mail Reader"; @@ -278,12 +280,12 @@ stdenv.mkDerivation rec { "x-scheme-handler/snews" "x-scheme-handler/nntp" ]; - }; - in '' + }) + ]; + + postInstall = '' # TODO: Move to a dev output? rm -rf $out/include $out/lib/thunderbird-devel-* $out/share/idl - - ${desktopItem.buildCommand} ''; preFixup = '' From ab345bed75d14f48443f18992d4439c5a7359f0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20M=C3=B6ller?= <fabianm88@gmail.com> Date: Fri, 27 Nov 2020 13:44:18 +0100 Subject: [PATCH 4/8] softmaker-office: use copyDesktopItems hook --- pkgs/applications/office/softmaker/generic.nix | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/pkgs/applications/office/softmaker/generic.nix b/pkgs/applications/office/softmaker/generic.nix index 29ca574a4174..fbde26058e1b 100644 --- a/pkgs/applications/office/softmaker/generic.nix +++ b/pkgs/applications/office/softmaker/generic.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, autoPatchelfHook, makeDesktopItem, makeWrapper +{ stdenv, fetchurl, autoPatchelfHook, makeDesktopItem, makeWrapper, copyDesktopItems # Dynamic Libraries , curl, libGL, libX11, libXext, libXmu, libXrandr, libXrender @@ -27,6 +27,7 @@ in stdenv.mkDerivation { nativeBuildInputs = [ autoPatchelfHook + copyDesktopItems makeWrapper ]; @@ -110,17 +111,14 @@ in stdenv.mkDerivation { # remove broken symbolic links find $out -xtype l -ls -exec rm {} \; - # Add desktop items - ${desktopItems.planmaker.buildCommand} - ${desktopItems.presentations.buildCommand} - ${desktopItems.textmaker.buildCommand} - # Add mime types install -D -t $out/share/mime/packages ${pname}/mime/softmaker-*office*${shortEdition}.xml runHook postInstall ''; + desktopItems = builtins.attrValues desktopItems; + meta = with stdenv.lib; { description = "An office suite with a word processor, spreadsheet and presentation program"; homepage = "https://www.softmaker.com/"; From 81e2df3ce1e2db7e34cc54668848fbe095f7e80c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20M=C3=B6ller?= <fabianm88@gmail.com> Date: Fri, 27 Nov 2020 13:45:31 +0100 Subject: [PATCH 5/8] minecraft: use copyDesktopItems hook --- pkgs/games/minecraft/default.nix | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/pkgs/games/minecraft/default.nix b/pkgs/games/minecraft/default.nix index 1b4cf3197210..f419be8d63bf 100644 --- a/pkgs/games/minecraft/default.nix +++ b/pkgs/games/minecraft/default.nix @@ -1,6 +1,7 @@ { stdenv , fetchurl , nixosTests +, copyDesktopItems , makeDesktopItem , makeWrapper , wrapGAppsHook @@ -38,7 +39,6 @@ let comment = "Official launcher for Minecraft, a sandbox-building game"; desktopName = "Minecraft Launcher"; categories = "Game;"; - fileValidation = false; }; envLibPath = stdenv.lib.makeLibraryPath [ @@ -100,7 +100,7 @@ stdenv.mkDerivation rec { sha256 = "0w8z21ml79kblv20wh5lz037g130pxkgs8ll9s3bi94zn2pbrhim"; }; - nativeBuildInputs = [ makeWrapper wrapGAppsHook ]; + nativeBuildInputs = [ makeWrapper wrapGAppsHook copyDesktopItems ]; buildInputs = [ gobject-introspection ]; sourceRoot = "."; @@ -110,11 +110,14 @@ stdenv.mkDerivation rec { dontBuild = true; installPhase = '' + runHook preInstall + mkdir -p $out/opt mv minecraft-launcher $out/opt - ${desktopItem.buildCommand} install -D $icon $out/share/icons/hicolor/symbolic/apps/minecraft-launcher.svg + + runHook postInstall ''; preFixup = '' @@ -140,6 +143,8 @@ stdenv.mkDerivation rec { "''${gappsWrapperArgs[@]}" ''; + desktopItems = [ desktopItem ]; + meta = with stdenv.lib; { description = "Official launcher for Minecraft, a sandbox-building game"; homepage = "https://minecraft.net"; From 74088bad64c6bbcee93e50130f8207d4846c9629 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20M=C3=B6ller?= <fabianm88@gmail.com> Date: Fri, 27 Nov 2020 13:45:59 +0100 Subject: [PATCH 6/8] xonotic: use copyDesktopItems hook --- pkgs/games/xonotic/default.nix | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pkgs/games/xonotic/default.nix b/pkgs/games/xonotic/default.nix index ab6ac022b6c2..60ebdcf8eebf 100644 --- a/pkgs/games/xonotic/default.nix +++ b/pkgs/games/xonotic/default.nix @@ -1,5 +1,5 @@ { lib, stdenv, fetchurl, fetchzip, makeWrapper, runCommandNoCC, makeDesktopItem -, xonotic-data +, xonotic-data, copyDesktopItems , # required for both unzip, libjpeg, zlib, libvorbis, curl , # glx @@ -131,7 +131,8 @@ in rec { xonotic = runCommandNoCC "xonotic${variant}-${version}" { inherit xonotic-unwrapped; - buildInputs = [ makeWrapper ]; + nativeBuildInputs = [ makeWrapper copyDesktopItems ]; + desktopItems = [ desktopItem ]; passthru = { inherit version; meta = meta // { @@ -151,7 +152,7 @@ in rec { '' + lib.optionalString (withSDL || withGLX) '' mkdir -p $out/share ln -s ${xonotic-unwrapped}/share/icons $out/share/icons - ${desktopItem.buildCommand} + copyDesktopItems '' + '' for binary in $out/bin/xonotic-*; do wrapProgram $binary --add-flags "-basedir ${xonotic-data}" From 5fbffecb1451f49edc007d124aea67fe01712f4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20M=C3=B6ller?= <fabianm88@gmail.com> Date: Fri, 27 Nov 2020 13:46:18 +0100 Subject: [PATCH 7/8] jdiskreport: use copyDesktopItems hook --- pkgs/tools/misc/jdiskreport/default.nix | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/pkgs/tools/misc/jdiskreport/default.nix b/pkgs/tools/misc/jdiskreport/default.nix index 5e6c0bdd5968..ae70e0f3e613 100644 --- a/pkgs/tools/misc/jdiskreport/default.nix +++ b/pkgs/tools/misc/jdiskreport/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, unzip, jre, makeDesktopItem }: +{ stdenv, fetchurl, unzip, jre, makeDesktopItem, copyDesktopItems }: let desktopItem = makeDesktopItem { @@ -18,11 +18,12 @@ stdenv.mkDerivation { sha256 = "0d5mzkwsbh9s9b1vyvpaawqc09b0q41l2a7pmwf7386b1fsx6d58"; }; + nativeBuildInputs = [ copyDesktopItems ]; buildInputs = [ unzip ]; inherit jre; installPhase = '' - source $stdenv/setup + runHook preInstall unzip $src @@ -38,9 +39,11 @@ stdenv.mkDerivation { EOF chmod +x $out/bin/jdiskreport - ${desktopItem.buildCommand} + runHook postInstall ''; + desktopItems = [ desktopItem ]; + meta = with stdenv.lib; { homepage = "http://www.jgoodies.com/freeware/jdiskreport/"; description = "A graphical utility to visualize disk usage"; From b65a1ab2a4d2e4d34f41e94ef59f2479561bd5c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20M=C3=B6ller?= <fabianm88@gmail.com> Date: Fri, 27 Nov 2020 13:46:36 +0100 Subject: [PATCH 8/8] jd-gui: use copyDesktopItems hook --- pkgs/tools/security/jd-gui/default.nix | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/pkgs/tools/security/jd-gui/default.nix b/pkgs/tools/security/jd-gui/default.nix index c4b7706c266b..91c092922f04 100644 --- a/pkgs/tools/security/jd-gui/default.nix +++ b/pkgs/tools/security/jd-gui/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchFromGitHub, jre, jdk, gradle_5, makeDesktopItem, perl, writeText, runtimeShell }: +{ stdenv, fetchFromGitHub, jre, jdk, gradle_5, makeDesktopItem, copyDesktopItems, perl, writeText, runtimeShell }: let pname = "jd-gui"; @@ -55,9 +55,9 @@ let } ''; - desktopItem = launcher: makeDesktopItem { + desktopItem = makeDesktopItem { name = "jd-gui"; - exec = "${launcher} %F"; + exec = "jd-gui %F"; icon = "jd-gui"; comment = "Java Decompiler JD-GUI"; desktopName = "JD-GUI"; @@ -71,7 +71,7 @@ in stdenv.mkDerivation rec { inherit pname version src; name = "${pname}-${version}"; - nativeBuildInputs = [ jdk gradle_5 ]; + nativeBuildInputs = [ jdk gradle_5 copyDesktopItems ]; buildPhase = '' export GRADLE_USER_HOME=$(mktemp -d) @@ -81,6 +81,8 @@ in stdenv.mkDerivation rec { installPhase = let jar = "$out/share/jd-gui/${name}.jar"; in '' + runHook preInstall + mkdir -p $out/bin $out/share/{jd-gui,icons/hicolor/128x128/apps} cp build/libs/${name}.jar ${jar} 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 { EOF chmod +x $out/bin/jd-gui - ${(desktopItem "$out/bin/jd-gui").buildCommand} + runHook postInstall ''; + desktopItems = [ desktopItem ]; + meta = with stdenv.lib; { description = "Fast Java Decompiler with powerful GUI"; homepage = "https://java-decompiler.github.io/";