aboutsummaryrefslogtreecommitdiff
path: root/pkgs/build-support/make-desktopitem
diff options
context:
space:
mode:
authorpiegames <git@piegames.de>2020-06-29 23:23:50 +0200
committerpiegames <git@piegames.de>2020-06-29 23:23:50 +0200
commit51cc55330719be8918cff038b74f5b2c5612995a (patch)
treed8130a976f1acbbc527b76cac92844895a405b6e /pkgs/build-support/make-desktopitem
parent56f8f6f31fbccd429bb3eced05c4fa46779f1211 (diff)
make-desktopitem: refactoring, documentation and improvement
- New parameter `extraDesktopEntries` to easily add some less usual entries to the desktop file - Rewrite of the core logic. Instead of a key-value-list, use an attribute set with nullable values to make it overridable - Added some comments - Some cosmetic/readability code refactors - I didn't like the doubly nested strings around the `fileValidation`
Diffstat (limited to 'pkgs/build-support/make-desktopitem')
-rw-r--r--pkgs/build-support/make-desktopitem/default.nix66
1 files changed, 37 insertions, 29 deletions
diff --git a/pkgs/build-support/make-desktopitem/default.nix b/pkgs/build-support/make-desktopitem/default.nix
index 8355a5ad29bc..f5020c036aac 100644
--- a/pkgs/build-support/make-desktopitem/default.nix
+++ b/pkgs/build-support/make-desktopitem/default.nix
@@ -1,50 +1,58 @@
{ lib, runCommandLocal, desktop-file-utils }:
-{ name
+# See https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html
+{ name # The name of the desktop file
, type ? "Application"
, exec
, icon ? null
, comment ? null
, terminal ? "false"
-, desktopName
+, desktopName # The name of the application
, genericName ? null
, mimeType ? null
, categories ? null
, startupNotify ? null
-, extraEntries ? null
+, extraDesktopEntries ? {} # Extra key-value pairs to add to the [Desktop Entry] section. This may override other values
+, extraEntries ? "" # Extra configuration. Will be appended to the end of the file and may thus contain extra sections
, fileValidation ? true # whether to validate resulting desktop file.
}:
let
- optionalEntriesList = [{k="Icon"; v=icon;}
- {k="Comment"; v=comment;}
- {k="GenericName"; v=genericName;}
- {k="MimeType"; v=mimeType;}
- {k="Categories"; v=categories;}
- {k="StartupNotify"; v=startupNotify;}];
+ # like builtins.toString, but null -> null instead of null -> ""
+ nullableToString = value: if value == null then null else builtins.toString value;
- valueNotNull = {k, v}: v != null;
- entriesToKeep = builtins.filter valueNotNull optionalEntriesList;
+ # The [Desktop entry] section of the desktop file, as attribute set.
+ mainSection = {
+ "Type" = toString type;
+ "Exec" = (nullableToString exec);
+ "Icon" = (nullableToString icon);
+ "Comment" = (nullableToString comment);
+ "Terminal" = (nullableToString terminal);
+ "Name" = toString name;
+ "GenericName" = (nullableToString genericName);
+ "MimeType" = (nullableToString mimeType);
+ "Categories" = (nullableToString categories);
+ "StartupNotify" = (nullableToString startupNotify);
+ } // extraDesktopEntries;
- mkEntry = {k, v}: k + "=" + v;
- optionalEntriesString = lib.concatMapStringsSep "\n" mkEntry entriesToKeep;
+ # Map all entries to a list of lines
+ desktopFileStrings =
+ ["[Desktop Entry]"]
+ ++ builtins.filter
+ (v: v != null)
+ (lib.mapAttrsToList
+ (name: value: if value != null then "${name}=${value}" else null)
+ mainSection
+ )
+ ++ (if extraEntries == "" then [] else ["${extraEntries}"]);
in
runCommandLocal "${name}.desktop" {}
- ''
+ (''
mkdir -p "$out/share/applications"
cat > "$out/share/applications/${name}.desktop" <<EOF
- [Desktop Entry]
- Type=${type}
- Exec=${exec}
- Terminal=${terminal}
- Name=${desktopName}
- ${optionalEntriesString}
- ${if extraEntries == null then ''EOF'' else ''
- ${extraEntries}
- EOF''}
-
- ${lib.optionalString fileValidation ''
- echo "Running desktop-file validation"
- ${desktop-file-utils}/bin/desktop-file-validate "$out/share/applications/${name}.desktop"
- ''}
- ''
+ ${builtins.concatStringsSep "\n" desktopFileStrings}
+ EOF
+ '' + lib.optionalString fileValidation ''
+ echo "Running desktop-file validation"
+ ${desktop-file-utils}/bin/desktop-file-validate "$out/share/applications/${name}.desktop"
+ '')