summary refs log tree commit diff
path: root/pkgs
diff options
context:
space:
mode:
authorK900 <me@0upti.me>2022-02-22 17:56:15 +0300
committerJonathan Ringer <jonringer@users.noreply.github.com>2022-02-25 13:40:38 -0800
commitcb2cfba6f7690d4b8754b0dd5a504efe93d7f44d (patch)
tree63bf69cdc1c296e10bf6543aa890855cccf1da57 /pkgs
parent0c713dbed40dd87090a4632cffc7b088653f35cb (diff)
downloadnixpkgs-cb2cfba6f7690d4b8754b0dd5a504efe93d7f44d.tar
nixpkgs-cb2cfba6f7690d4b8754b0dd5a504efe93d7f44d.tar.gz
nixpkgs-cb2cfba6f7690d4b8754b0dd5a504efe93d7f44d.tar.bz2
nixpkgs-cb2cfba6f7690d4b8754b0dd5a504efe93d7f44d.tar.lz
nixpkgs-cb2cfba6f7690d4b8754b0dd5a504efe93d7f44d.tar.xz
nixpkgs-cb2cfba6f7690d4b8754b0dd5a504efe93d7f44d.tar.zst
nixpkgs-cb2cfba6f7690d4b8754b0dd5a504efe93d7f44d.zip
treewide: switch all desktop file generators to new API
Notably:
- remove explicit arguments that match the defaults
- convert everything to the right Nix types
Diffstat (limited to 'pkgs')
-rw-r--r--pkgs/applications/audio/goattracker/default.nix5
-rw-r--r--pkgs/applications/audio/jamesdsp/default.nix10
-rw-r--r--pkgs/applications/audio/lyrebird/default.nix2
-rw-r--r--pkgs/applications/audio/netease-cloud-music-gtk/default.nix1
-rw-r--r--pkgs/applications/audio/roomeqwizard/default.nix2
-rw-r--r--pkgs/applications/audio/sony-headphones-client/default.nix2
-rw-r--r--pkgs/applications/blockchains/bisq-desktop/default.nix2
-rw-r--r--pkgs/applications/blockchains/crypto-org-wallet/default.nix2
-rw-r--r--pkgs/applications/blockchains/monero-gui/default.nix2
-rw-r--r--pkgs/applications/blockchains/mycrypto/default.nix2
-rw-r--r--pkgs/applications/blockchains/wasabiwallet/default.nix2
-rw-r--r--pkgs/applications/editors/android-studio/common.nix6
-rw-r--r--pkgs/applications/editors/eclipse/build-eclipse.nix2
-rw-r--r--pkgs/applications/editors/jetbrains/common.nix6
-rw-r--r--pkgs/applications/editors/kodestudio/default.nix2
-rw-r--r--pkgs/applications/editors/leo-editor/default.nix8
-rw-r--r--pkgs/applications/editors/netbeans/default.nix2
-rw-r--r--pkgs/applications/editors/quartus-prime/default.nix2
-rw-r--r--pkgs/applications/editors/rstudio/default.nix9
-rw-r--r--pkgs/applications/editors/sublime/2/default.nix2
-rw-r--r--pkgs/applications/editors/thonny/default.nix2
-rw-r--r--pkgs/applications/editors/vis/default.nix12
-rw-r--r--pkgs/applications/editors/vscode/generic.nix35
-rw-r--r--pkgs/applications/editors/xxe-pe/default.nix2
-rw-r--r--pkgs/applications/emulators/ccemux/default.nix2
-rw-r--r--pkgs/applications/emulators/dosbox-staging/default.nix2
-rw-r--r--pkgs/applications/emulators/dosbox/default.nix2
-rw-r--r--pkgs/applications/emulators/mame/default.nix2
-rw-r--r--pkgs/applications/emulators/mgba/default.nix4
-rw-r--r--pkgs/applications/emulators/ryujinx/default.nix2
-rw-r--r--pkgs/applications/emulators/vice/default.nix2
-rw-r--r--pkgs/applications/emulators/zsnes/default.nix2
-rw-r--r--pkgs/applications/graphics/antimony/default.nix10
-rw-r--r--pkgs/applications/graphics/avocode/default.nix2
-rw-r--r--pkgs/applications/graphics/evilpixie/default.nix4
-rw-r--r--pkgs/applications/graphics/fiji/default.nix13
-rw-r--r--pkgs/applications/graphics/imagej/default.nix2
-rw-r--r--pkgs/applications/graphics/ipe/default.nix10
-rw-r--r--pkgs/applications/graphics/openboard/default.nix4
-rw-r--r--pkgs/applications/graphics/swingsane/default.nix2
-rw-r--r--pkgs/applications/graphics/write_stylus/default.nix2
-rw-r--r--pkgs/applications/graphics/xournal/default.nix4
-rw-r--r--pkgs/applications/misc/azuredatastudio/default.nix36
-rw-r--r--pkgs/applications/misc/cubiomes-viewer/default.nix2
-rw-r--r--pkgs/applications/misc/cura/stable.nix2
-rw-r--r--pkgs/applications/misc/dbeaver/default.nix2
-rw-r--r--pkgs/applications/misc/free42/default.nix6
-rw-r--r--pkgs/applications/misc/ganttproject-bin/default.nix2
-rw-r--r--pkgs/applications/misc/gkrellm/default.nix2
-rw-r--r--pkgs/applications/misc/golden-cheetah/default.nix2
-rw-r--r--pkgs/applications/misc/gpsprune/default.nix2
-rw-r--r--pkgs/applications/misc/ideamaker/default.nix4
-rw-r--r--pkgs/applications/misc/ipmiview/default.nix2
-rw-r--r--pkgs/applications/misc/keepass/default.nix7
-rw-r--r--pkgs/applications/misc/lsd2dsl/default.nix2
-rw-r--r--pkgs/applications/misc/michabo/default.nix1
-rw-r--r--pkgs/applications/misc/obinskit/default.nix2
-rw-r--r--pkgs/applications/misc/obsidian/default.nix2
-rw-r--r--pkgs/applications/misc/opentrack/default.nix2
-rw-r--r--pkgs/applications/misc/pdfsam-basic/default.nix4
-rw-r--r--pkgs/applications/misc/pdfstudio/common.nix6
-rw-r--r--pkgs/applications/misc/pgadmin/default.nix5
-rw-r--r--pkgs/applications/misc/plater/default.nix2
-rw-r--r--pkgs/applications/misc/premid/default.nix2
-rw-r--r--pkgs/applications/misc/prusa-slicer/default.nix4
-rw-r--r--pkgs/applications/misc/prusa-slicer/super-slicer.nix2
-rw-r--r--pkgs/applications/misc/robo3t/default.nix2
-rw-r--r--pkgs/applications/misc/sidequest/default.nix2
-rw-r--r--pkgs/applications/misc/simplenote/default.nix5
-rw-r--r--pkgs/applications/misc/slic3r/default.nix2
-rw-r--r--pkgs/applications/misc/snapmaker-luban/default.nix2
-rw-r--r--pkgs/applications/misc/stretchly/default.nix2
-rw-r--r--pkgs/applications/misc/sweethome3d/default.nix2
-rw-r--r--pkgs/applications/misc/sweethome3d/editors.nix2
-rw-r--r--pkgs/applications/misc/teleprompter/default.nix1
-rw-r--r--pkgs/applications/misc/toggldesktop/default.nix2
-rw-r--r--pkgs/applications/misc/trenchbroom/default.nix2
-rw-r--r--pkgs/applications/misc/tvbrowser/bin.nix8
-rw-r--r--pkgs/applications/misc/xmind/default.nix4
-rw-r--r--pkgs/applications/misc/xpdf/default.nix3
-rw-r--r--pkgs/applications/networking/aether/default.nix4
-rw-r--r--pkgs/applications/networking/apache-directory-studio/default.nix2
-rw-r--r--pkgs/applications/networking/browsers/firefox/wrapper.nix5
-rw-r--r--pkgs/applications/networking/browsers/tor-browser-bundle-bin/default.nix2
-rw-r--r--pkgs/applications/networking/browsers/vieb/default.nix4
-rw-r--r--pkgs/applications/networking/browsers/webbrowser/default.nix4
-rw-r--r--pkgs/applications/networking/charles/default.nix13
-rw-r--r--pkgs/applications/networking/cisco-packet-tracer/7.nix2
-rw-r--r--pkgs/applications/networking/cisco-packet-tracer/8.nix2
-rw-r--r--pkgs/applications/networking/dropbox/default.nix4
-rw-r--r--pkgs/applications/networking/instant-messengers/deltachat-desktop/default.nix8
-rw-r--r--pkgs/applications/networking/instant-messengers/discord/linux.nix4
-rw-r--r--pkgs/applications/networking/instant-messengers/element/element-desktop.nix8
-rw-r--r--pkgs/applications/networking/instant-messengers/gitter/default.nix2
-rw-r--r--pkgs/applications/networking/instant-messengers/gomuks/default.nix4
-rw-r--r--pkgs/applications/networking/instant-messengers/jitsi/default.nix2
-rw-r--r--pkgs/applications/networking/instant-messengers/mikutter/default.nix4
-rw-r--r--pkgs/applications/networking/instant-messengers/rambox/rambox.nix3
-rw-r--r--pkgs/applications/networking/instant-messengers/ricochet/default.nix2
-rw-r--r--pkgs/applications/networking/instant-messengers/schildichat/schildichat-desktop.nix8
-rw-r--r--pkgs/applications/networking/instant-messengers/teamspeak/client.nix2
-rw-r--r--pkgs/applications/networking/instant-messengers/tensor/default.nix4
-rw-r--r--pkgs/applications/networking/instant-messengers/wavebox/default.nix2
-rw-r--r--pkgs/applications/networking/instant-messengers/wire-desktop/default.nix6
-rw-r--r--pkgs/applications/networking/ostinato/default.nix15
-rw-r--r--pkgs/applications/networking/p2p/frostwire/default.nix2
-rw-r--r--pkgs/applications/networking/p2p/transgui/default.nix10
-rw-r--r--pkgs/applications/networking/remote/anydesk/default.nix4
-rw-r--r--pkgs/applications/networking/remote/vmware-horizon-client/default.nix2
-rw-r--r--pkgs/applications/networking/ssb-patchwork/default.nix2
-rw-r--r--pkgs/applications/networking/sync/unison/default.nix9
-rw-r--r--pkgs/applications/networking/termius/default.nix2
-rw-r--r--pkgs/applications/office/appflowy/default.nix2
-rw-r--r--pkgs/applications/office/jabref/default.nix2
-rw-r--r--pkgs/applications/office/jameica/default.nix2
-rw-r--r--pkgs/applications/office/portfolio/default.nix2
-rw-r--r--pkgs/applications/office/pyspread/default.nix2
-rw-r--r--pkgs/applications/office/softmaker/desktop_items.nix88
-rw-r--r--pkgs/applications/office/timeline/default.nix3
-rw-r--r--pkgs/applications/office/trilium/default.nix2
-rw-r--r--pkgs/applications/office/tusk/default.nix2
-rw-r--r--pkgs/applications/office/zotero/default.nix7
-rw-r--r--pkgs/applications/radio/svxlink/default.nix2
-rw-r--r--pkgs/applications/science/astronomy/gprojector/default.nix4
-rw-r--r--pkgs/applications/science/chemistry/jmol/default.nix12
-rw-r--r--pkgs/applications/science/chemistry/pymol/default.nix12
-rw-r--r--pkgs/applications/science/electronics/diylc/default.nix2
-rw-r--r--pkgs/applications/science/electronics/eagle/eagle.nix2
-rw-r--r--pkgs/applications/science/electronics/eagle/eagle7.nix2
-rw-r--r--pkgs/applications/science/logic/coq/default.nix2
-rw-r--r--pkgs/applications/science/logic/isabelle/default.nix2
-rw-r--r--pkgs/applications/science/logic/key/default.nix2
-rw-r--r--pkgs/applications/science/logic/logisim-evolution/default.nix2
-rw-r--r--pkgs/applications/science/logic/logisim/default.nix2
-rw-r--r--pkgs/applications/science/logic/tlaplus/toolbox.nix6
-rw-r--r--pkgs/applications/science/math/geogebra/default.nix4
-rw-r--r--pkgs/applications/science/misc/netlogo/default.nix2
-rw-r--r--pkgs/applications/science/programming/groove/default.nix2
-rw-r--r--pkgs/applications/terminal-emulators/mlterm/default.nix6
-rw-r--r--pkgs/applications/terminal-emulators/rxvt-unicode/default.nix2
-rw-r--r--pkgs/applications/terminal-emulators/wayst/default.nix9
-rw-r--r--pkgs/applications/version-management/gitkraken/default.nix2
-rw-r--r--pkgs/applications/version-management/smartgithg/default.nix14
-rw-r--r--pkgs/applications/video/clipgrab/default.nix2
-rw-r--r--pkgs/applications/video/streamlink-twitch-gui/bin.nix2
-rw-r--r--pkgs/applications/window-managers/berry/default.nix2
-rw-r--r--pkgs/development/embedded/stm32/stm32cubemx/default.nix2
-rw-r--r--pkgs/development/pharo/launcher/default.nix2
-rw-r--r--pkgs/development/pharo/wrapper/default.nix8
-rw-r--r--pkgs/development/python-modules/spyder/default.nix2
-rw-r--r--pkgs/development/tools/alloy/default.nix2
-rw-r--r--pkgs/development/tools/database/sqldeveloper/default.nix2
-rw-r--r--pkgs/development/tools/database/squirrel-sql/default.nix2
-rw-r--r--pkgs/development/tools/eclipse-mat/default.nix2
-rw-r--r--pkgs/development/tools/java/visualvm/default.nix2
-rw-r--r--pkgs/development/tools/jpexs/default.nix6
-rw-r--r--pkgs/development/tools/mars-mips/default.nix2
-rw-r--r--pkgs/development/tools/misc/saleae-logic-2/default.nix2
-rw-r--r--pkgs/development/tools/misc/saleae-logic/default.nix2
-rw-r--r--pkgs/development/tools/react-native-debugger/default.nix2
-rw-r--r--pkgs/development/tools/scenebuilder/default.nix4
-rw-r--r--pkgs/development/tools/scenic-view/default.nix4
-rw-r--r--pkgs/development/tools/winpdb/default.nix2
-rw-r--r--pkgs/development/web/postman/default.nix2
-rw-r--r--pkgs/development/web/protege-distribution/default.nix2
-rw-r--r--pkgs/games/90secondportraits/default.nix2
-rw-r--r--pkgs/games/abuse/default.nix2
-rw-r--r--pkgs/games/alephone/default.nix2
-rw-r--r--pkgs/games/assaultcube/default.nix2
-rw-r--r--pkgs/games/ballerburg/default.nix3
-rw-r--r--pkgs/games/brogue/default.nix3
-rw-r--r--pkgs/games/clonehero/fhs-wrapper.nix2
-rw-r--r--pkgs/games/dhewm3/default.nix2
-rw-r--r--pkgs/games/domination/default.nix2
-rw-r--r--pkgs/games/duckmarines/default.nix2
-rw-r--r--pkgs/games/ecwolf/default.nix2
-rw-r--r--pkgs/games/eduke32/default.nix2
-rw-r--r--pkgs/games/factorio/default.nix3
-rw-r--r--pkgs/games/fish-fillets-ng/default.nix2
-rw-r--r--pkgs/games/flightgear/default.nix2
-rw-r--r--pkgs/games/freedroid/default.nix2
-rw-r--r--pkgs/games/freenukum/default.nix5
-rw-r--r--pkgs/games/frogatto/default.nix4
-rw-r--r--pkgs/games/frozen-bubble/default.nix2
-rw-r--r--pkgs/games/gnujump/default.nix2
-rw-r--r--pkgs/games/gzdoom/default.nix2
-rw-r--r--pkgs/games/hyperrogue/default.nix2
-rw-r--r--pkgs/games/itch/default.nix8
-rw-r--r--pkgs/games/ivan/default.nix2
-rw-r--r--pkgs/games/lunar-client/default.nix2
-rw-r--r--pkgs/games/maelstrom/default.nix2
-rw-r--r--pkgs/games/mari0/default.nix2
-rw-r--r--pkgs/games/mindustry/default.nix1
-rw-r--r--pkgs/games/minecraft/default.nix2
-rw-r--r--pkgs/games/mrrescue/default.nix2
-rw-r--r--pkgs/games/oh-my-git/default.nix2
-rw-r--r--pkgs/games/openjk/default.nix4
-rw-r--r--pkgs/games/opensupaplex/default.nix2
-rw-r--r--pkgs/games/orthorobot/default.nix2
-rw-r--r--pkgs/games/osu-lazer/default.nix2
-rw-r--r--pkgs/games/quakespasm/default.nix2
-rw-r--r--pkgs/games/rocksndiamonds/default.nix2
-rw-r--r--pkgs/games/rott/default.nix2
-rw-r--r--pkgs/games/runelite/default.nix3
-rw-r--r--pkgs/games/sauerbraten/default.nix2
-rw-r--r--pkgs/games/scid-vs-pc/default.nix2
-rw-r--r--pkgs/games/scummvm/games.nix2
-rw-r--r--pkgs/games/sdlpop/default.nix2
-rw-r--r--pkgs/games/sienna/default.nix2
-rw-r--r--pkgs/games/starsector/default.nix2
-rw-r--r--pkgs/games/system-syzygy/default.nix2
-rw-r--r--pkgs/games/tome2/default.nix4
-rw-r--r--pkgs/games/tome4/default.nix3
-rw-r--r--pkgs/games/unciv/default.nix2
-rw-r--r--pkgs/games/unvanquished/default.nix12
-rw-r--r--pkgs/games/ut2004/wrapper.nix2
-rw-r--r--pkgs/games/vintagestory/default.nix3
-rw-r--r--pkgs/games/worldofgoo/default.nix3
-rw-r--r--pkgs/games/xbill/default.nix2
-rw-r--r--pkgs/games/xonotic/default.nix4
-rw-r--r--pkgs/servers/pulseaudio/qpaeq.nix4
-rw-r--r--pkgs/tools/X11/opentabletdriver/default.nix3
-rw-r--r--pkgs/tools/admin/winbox/default.nix7
-rw-r--r--pkgs/tools/games/jpsxdec/default.nix2
-rw-r--r--pkgs/tools/graphics/agi/default.nix4
-rw-r--r--pkgs/tools/graphics/snapdragon-profiler/default.nix4
-rw-r--r--pkgs/tools/graphics/xcolor/default.nix2
-rw-r--r--pkgs/tools/misc/hakuneko/default.nix3
-rw-r--r--pkgs/tools/misc/hdfview/default.nix2
-rw-r--r--pkgs/tools/misc/jdiskreport/default.nix3
-rw-r--r--pkgs/tools/misc/sharedown/default.nix2
-rw-r--r--pkgs/tools/security/bitwarden/default.nix2
-rw-r--r--pkgs/tools/security/ghidra/build.nix2
-rw-r--r--pkgs/tools/security/ghidra/default.nix2
-rw-r--r--pkgs/tools/security/jd-gui/default.nix6
-rw-r--r--pkgs/tools/security/open-ecard/default.nix2
-rw-r--r--pkgs/tools/text/dirdiff/default.nix2
-rw-r--r--pkgs/tools/text/hottext/default.nix2
-rw-r--r--pkgs/tools/text/xml/basex/default.nix4
239 files changed, 453 insertions, 493 deletions
diff --git a/pkgs/applications/audio/goattracker/default.nix b/pkgs/applications/audio/goattracker/default.nix
index 743417570c1..1fb848ae1ed 100644
--- a/pkgs/applications/audio/goattracker/default.nix
+++ b/pkgs/applications/audio/goattracker/default.nix
@@ -12,7 +12,6 @@ with lib;
 let
   pname = "goattracker" + optionalString isStereo "-stereo";
   desktopItem = makeDesktopItem {
-    type = "Application";
     name = pname;
     desktopName = "GoatTracker 2" + optionalString isStereo " Stereo";
     genericName = "Music Tracker";
@@ -20,8 +19,8 @@ let
       then "gt2stereo"
       else "goattrk2";
     icon = "goattracker";
-    categories = "AudioVideo;AudioVideoEditing;";
-    extraEntries = "Keywords=tracker;music;";
+    categories = [ "AudioVideo" "AudioVideoEditing" ];
+    keywords = [ "tracker" "music" ];
   };
 
 in stdenv.mkDerivation rec {
diff --git a/pkgs/applications/audio/jamesdsp/default.nix b/pkgs/applications/audio/jamesdsp/default.nix
index b4d4a02878d..16683564b2c 100644
--- a/pkgs/applications/audio/jamesdsp/default.nix
+++ b/pkgs/applications/audio/jamesdsp/default.nix
@@ -38,19 +38,15 @@ mkDerivation rec{
 
   desktopItems = [
     (makeDesktopItem {
-      name = "jamesdsp.desktop";
+      name = "jamesdsp";
       desktopName = "JamesDSP";
       genericName = "Audio effects processor";
       exec = "jamesdsp";
       icon = "jamesdsp";
       comment = "JamesDSP for Linux";
-      categories = "AudioVideo;Audio";
+      categories = [ "AudioVideo" "Audio" ];
       startupNotify = false;
-      terminal = false;
-      type = "Application";
-      extraDesktopEntries = {
-        Keywords = "equalizer;audio;effect";
-      };
+      keywords = [ "equalizer" "audio" "effect" ];
     })
   ];
 
diff --git a/pkgs/applications/audio/lyrebird/default.nix b/pkgs/applications/audio/lyrebird/default.nix
index b40dbfe65bf..81c792d95e2 100644
--- a/pkgs/applications/audio/lyrebird/default.nix
+++ b/pkgs/applications/audio/lyrebird/default.nix
@@ -15,7 +15,7 @@ let
     icon = "${placeholder "out"}/share/lyrebird/icon.png";
     desktopName = "Lyrebird";
     genericName = "Voice Changer";
-    categories = "AudioVideo;Audio;";
+    categories = [ "AudioVideo" "Audio" ];
   };
 in
 python3Packages.buildPythonApplication rec {
diff --git a/pkgs/applications/audio/netease-cloud-music-gtk/default.nix b/pkgs/applications/audio/netease-cloud-music-gtk/default.nix
index 76e1bc3923a..72027fe922b 100644
--- a/pkgs/applications/audio/netease-cloud-music-gtk/default.nix
+++ b/pkgs/applications/audio/netease-cloud-music-gtk/default.nix
@@ -11,7 +11,6 @@
 , wrapGAppsHook
 , fetchurl
 , fetchFromGitHub
-, makeDesktopItem
 }:
 rustPlatform.buildRustPackage rec {
   pname = "netease-cloud-music-gtk";
diff --git a/pkgs/applications/audio/roomeqwizard/default.nix b/pkgs/applications/audio/roomeqwizard/default.nix
index 9d4118a4391..fae8700d811 100644
--- a/pkgs/applications/audio/roomeqwizard/default.nix
+++ b/pkgs/applications/audio/roomeqwizard/default.nix
@@ -29,7 +29,7 @@ stdenv.mkDerivation rec {
     icon = pname;
     desktopName = "REW";
     genericName = "Software for audio measurements";
-    categories = "AudioVideo;";
+    categories = [ "AudioVideo" ];
   };
 
   responseFile = writeTextFile {
diff --git a/pkgs/applications/audio/sony-headphones-client/default.nix b/pkgs/applications/audio/sony-headphones-client/default.nix
index 976c4ab5702..e3e6573c432 100644
--- a/pkgs/applications/audio/sony-headphones-client/default.nix
+++ b/pkgs/applications/audio/sony-headphones-client/default.nix
@@ -31,7 +31,7 @@ stdenv.mkDerivation rec {
     icon = "SonyHeadphonesClient";
     desktopName = "Sony Headphones Client";
     comment     = "A client recreating the functionality of the Sony Headphones app";
-    categories  = "Audio;Mixer;";
+    categories  = [ "Audio" "Mixer" ];
   }) ];
 
   meta = with lib; {
diff --git a/pkgs/applications/blockchains/bisq-desktop/default.nix b/pkgs/applications/blockchains/bisq-desktop/default.nix
index 2bc3813c226..0e1e9f29112 100644
--- a/pkgs/applications/blockchains/bisq-desktop/default.nix
+++ b/pkgs/applications/blockchains/bisq-desktop/default.nix
@@ -51,7 +51,7 @@ stdenv.mkDerivation rec {
       icon = "bisq";
       desktopName = "Bisq ${version}";
       genericName = "Decentralized bitcoin exchange";
-      categories = "Network;P2P;";
+      categories = [ "Network" "P2P" ];
     })
   ];
 
diff --git a/pkgs/applications/blockchains/crypto-org-wallet/default.nix b/pkgs/applications/blockchains/crypto-org-wallet/default.nix
index 7b0a895f4a1..e45e4349756 100644
--- a/pkgs/applications/blockchains/crypto-org-wallet/default.nix
+++ b/pkgs/applications/blockchains/crypto-org-wallet/default.nix
@@ -1,4 +1,4 @@
-{ lib, fetchurl, makeDesktopItem, appimageTools, imagemagick }:
+{ lib, fetchurl, appimageTools, imagemagick }:
 
 let
   pname = "chain-desktop-wallet";
diff --git a/pkgs/applications/blockchains/monero-gui/default.nix b/pkgs/applications/blockchains/monero-gui/default.nix
index 885e8170d3f..dfc5f8b326c 100644
--- a/pkgs/applications/blockchains/monero-gui/default.nix
+++ b/pkgs/applications/blockchains/monero-gui/default.nix
@@ -76,7 +76,7 @@ stdenv.mkDerivation rec {
     icon = "monero";
     desktopName = "Monero";
     genericName = "Wallet";
-    categories  = "Network;Utility;";
+    categories  = [ "Network" "Utility" ];
   };
 
   postInstall = ''
diff --git a/pkgs/applications/blockchains/mycrypto/default.nix b/pkgs/applications/blockchains/mycrypto/default.nix
index f5dbfeb5ff9..ee7960a843b 100644
--- a/pkgs/applications/blockchains/mycrypto/default.nix
+++ b/pkgs/applications/blockchains/mycrypto/default.nix
@@ -23,7 +23,7 @@ let
     comment = "MyCrypto is a free, open-source interface for interacting with the blockchain";
     exec = pname;
     icon = "mycrypto";
-    categories = "Finance;";
+    categories = [ "Finance" ];
   };
 
 in appimageTools.wrapType2 rec {
diff --git a/pkgs/applications/blockchains/wasabiwallet/default.nix b/pkgs/applications/blockchains/wasabiwallet/default.nix
index 0b90fc10bbc..f8e20f1a05d 100644
--- a/pkgs/applications/blockchains/wasabiwallet/default.nix
+++ b/pkgs/applications/blockchains/wasabiwallet/default.nix
@@ -41,7 +41,7 @@ stdenv.mkDerivation rec {
     desktopName = "Wasabi";
     genericName = "Bitcoin wallet";
     comment = meta.description;
-    categories = "Network;Utility;";
+    categories = [ "Network" "Utility" ];
   };
 
   installPhase = ''
diff --git a/pkgs/applications/editors/android-studio/common.nix b/pkgs/applications/editors/android-studio/common.nix
index 540c59586a6..97eb5cad8d0 100644
--- a/pkgs/applications/editors/android-studio/common.nix
+++ b/pkgs/applications/editors/android-studio/common.nix
@@ -164,9 +164,9 @@ let
     icon = drvName;
     desktopName = "Android Studio (${channel} channel)";
     comment = "The official Android IDE";
-    categories = "Development;IDE;";
-    startupNotify = "true";
-    extraEntries="StartupWMClass=jetbrains-studio";
+    categories = [ "Development" "IDE" ];
+    startupNotify = true;
+    startupWMClass = "jetbrains-studio";
   };
 
   # Android Studio downloads prebuilt binaries as part of the SDK. These tools
diff --git a/pkgs/applications/editors/eclipse/build-eclipse.nix b/pkgs/applications/editors/eclipse/build-eclipse.nix
index 29c063633fc..faa89b9c877 100644
--- a/pkgs/applications/editors/eclipse/build-eclipse.nix
+++ b/pkgs/applications/editors/eclipse/build-eclipse.nix
@@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
     comment = "Integrated Development Environment";
     desktopName = "Eclipse IDE";
     genericName = "Integrated Development Environment";
-    categories = "Development;";
+    categories = [ "Development" ];
   };
 
   buildInputs = [
diff --git a/pkgs/applications/editors/jetbrains/common.nix b/pkgs/applications/editors/jetbrains/common.nix
index 709a9b4251c..a5e0a2611f0 100644
--- a/pkgs/applications/editors/jetbrains/common.nix
+++ b/pkgs/applications/editors/jetbrains/common.nix
@@ -27,11 +27,9 @@ with stdenv; lib.makeOverridable mkDerivation (rec {
     comment = lib.replaceChars ["\n"] [" "] meta.longDescription;
     desktopName = product;
     genericName = meta.description;
-    categories = "Development;";
+    categories = [ "Development" ];
     icon = mainProgram;
-    extraEntries = ''
-      StartupWMClass=${wmClass}
-    '';
+    startupWMClass = wmClass;
   };
 
   vmoptsFile = optionalString (vmopts != null) (writeText vmoptsName vmopts);
diff --git a/pkgs/applications/editors/kodestudio/default.nix b/pkgs/applications/editors/kodestudio/default.nix
index 38fb55ecf7b..e975678591c 100644
--- a/pkgs/applications/editors/kodestudio/default.nix
+++ b/pkgs/applications/editors/kodestudio/default.nix
@@ -39,7 +39,7 @@ in
       comment = "Kode Studio is an IDE for Kha based on Visual Studio Code";
       desktopName = "Kode Studio";
       genericName = "Text Editor";
-      categories = "GNOME;GTK;Utility;TextEditor;Development;";
+      categories = [ "GNOME" "GTK" "Utility" "TextEditor" "Development" ];
     };
 
     sourceRoot = ".";
diff --git a/pkgs/applications/editors/leo-editor/default.nix b/pkgs/applications/editors/leo-editor/default.nix
index ee22c591ad7..4a5f464f4bc 100644
--- a/pkgs/applications/editors/leo-editor/default.nix
+++ b/pkgs/applications/editors/leo-editor/default.nix
@@ -24,11 +24,9 @@ mkDerivation rec {
     comment = meta.description;
     desktopName = "Leo";
     genericName = "Text Editor";
-    categories = lib.concatStringsSep ";" [
-      "Application" "Development" "IDE"
-    ];
-    startupNotify = "false";
-    mimeType = lib.concatStringsSep ";" [
+    categories = [ "Application" "Development" "IDE" ];
+    startupNotify = false;
+    mimeTypes = [
       "text/plain" "text/asp" "text/x-c" "text/x-script.elisp" "text/x-fortran"
       "text/html" "application/inf" "text/x-java-source" "application/x-javascript"
       "application/javascript" "text/ecmascript" "application/x-ksh" "text/x-script.ksh"
diff --git a/pkgs/applications/editors/netbeans/default.nix b/pkgs/applications/editors/netbeans/default.nix
index f7614e76ef5..a00646437f7 100644
--- a/pkgs/applications/editors/netbeans/default.nix
+++ b/pkgs/applications/editors/netbeans/default.nix
@@ -10,7 +10,7 @@ let
     comment = "Integrated Development Environment";
     desktopName = "Apache NetBeans IDE";
     genericName = "Integrated Development Environment";
-    categories = "Development;";
+    categories = [ "Development" ];
     icon = "netbeans";
   };
 in
diff --git a/pkgs/applications/editors/quartus-prime/default.nix b/pkgs/applications/editors/quartus-prime/default.nix
index 50366863d67..5a790e78090 100644
--- a/pkgs/applications/editors/quartus-prime/default.nix
+++ b/pkgs/applications/editors/quartus-prime/default.nix
@@ -10,7 +10,7 @@ let
     icon = "quartus";
     desktopName = "Quartus";
     genericName = "Quartus Prime";
-    categories = "Development;";
+    categories = [ "Development" ];
   };
 # I think modelsim_ase/linux/vlm checksums itself, so use FHSUserEnv instead of `patchelf`
 in buildFHSUserEnv rec {
diff --git a/pkgs/applications/editors/rstudio/default.nix b/pkgs/applications/editors/rstudio/default.nix
index 04b688622be..eada77eea84 100644
--- a/pkgs/applications/editors/rstudio/default.nix
+++ b/pkgs/applications/editors/rstudio/default.nix
@@ -227,8 +227,13 @@ in
         desktopName = "RStudio";
         genericName = "IDE";
         comment = description;
-        categories = "Development;";
-        mimeType = "text/x-r-source;text/x-r;text/x-R;text/x-r-doc;text/x-r-sweave;text/x-r-markdown;text/x-r-html;text/x-r-presentation;application/x-r-data;application/x-r-project;text/x-r-history;text/x-r-profile;text/x-tex;text/x-markdown;text/html;text/css;text/javascript;text/x-chdr;text/x-csrc;text/x-c++hdr;text/x-c++src;";
+        categories = [ "Development" ];
+        mimeTypes = [
+          "text/x-r-source" "text/x-r" "text/x-R" "text/x-r-doc" "text/x-r-sweave" "text/x-r-markdown"
+          "text/x-r-html" "text/x-r-presentation" "application/x-r-data" "application/x-r-project"
+          "text/x-r-history" "text/x-r-profile" "text/x-tex" "text/x-markdown" "text/html"
+          "text/css" "text/javascript" "text/x-chdr" "text/x-csrc" "text/x-c++hdr" "text/x-c++src"
+        ];
       })
     ];
   })
diff --git a/pkgs/applications/editors/sublime/2/default.nix b/pkgs/applications/editors/sublime/2/default.nix
index 7f14bf8ae14..074584e3360 100644
--- a/pkgs/applications/editors/sublime/2/default.nix
+++ b/pkgs/applications/editors/sublime/2/default.nix
@@ -55,7 +55,7 @@ stdenv.mkDerivation rec {
     comment = meta.description;
     desktopName = "Sublime Text";
     genericName = "Text Editor";
-    categories = "TextEditor;Development;";
+    categories = [ "TextEditor" "Development" ];
     icon = "sublime_text";
   };
 
diff --git a/pkgs/applications/editors/thonny/default.nix b/pkgs/applications/editors/thonny/default.nix
index 20d25bb616f..eb6ba73b2e0 100644
--- a/pkgs/applications/editors/thonny/default.nix
+++ b/pkgs/applications/editors/thonny/default.nix
@@ -21,7 +21,7 @@ buildPythonApplication rec {
     icon = "thonny";
     desktopName = "Thonny";
     comment     = "Python IDE for beginners";
-    categories  = "Development;IDE";
+    categories  = [ "Development" "IDE" ];
   }) ];
 
   propagatedBuildInputs = with python3.pkgs; [
diff --git a/pkgs/applications/editors/vis/default.nix b/pkgs/applications/editors/vis/default.nix
index a658f95ac01..b9fcfe10221 100644
--- a/pkgs/applications/editors/vis/default.nix
+++ b/pkgs/applications/editors/vis/default.nix
@@ -50,14 +50,10 @@ stdenv.mkDerivation rec {
     comment = meta.description;
     desktopName = "vis";
     genericName = "Text editor";
-    categories = lib.concatStringsSep ";" [
-      "Application" "Development" "IDE"
-    ];
-    mimeType = lib.concatStringsSep ";" [
-      "text/plain" "application/octet-stream"
-    ];
-    startupNotify = "false";
-    terminal = "true";
+    categories = [ "Application" "Development" "IDE" ];
+    mimeTypes = [ "text/plain" "application/octet-stream" ];
+    startupNotify = false;
+    terminal = true;
   };
 
   meta = with lib; {
diff --git a/pkgs/applications/editors/vscode/generic.nix b/pkgs/applications/editors/vscode/generic.nix
index 133c5fe9cbe..672eb4b27ba 100644
--- a/pkgs/applications/editors/vscode/generic.nix
+++ b/pkgs/applications/editors/vscode/generic.nix
@@ -37,19 +37,16 @@ let
       genericName = "Text Editor";
       exec = "${executableName} %F";
       icon = "code";
-      startupNotify = "true";
-      categories = "Utility;TextEditor;Development;IDE;";
-      mimeType = "text/plain;inode/directory;";
-      extraEntries = ''
-        StartupWMClass=${shortName}
-        Actions=new-empty-window;
-        Keywords=vscode;
-
-        [Desktop Action new-empty-window]
-        Name=New Empty Window
-        Exec=${executableName} --new-window %F
-        Icon=code
-      '';
+      startupNotify = true;
+      startupWMClass = shortName;
+      categories = [ "Utility" "TextEditor" "Development" "IDE" ];
+      mimeTypes = [ "text/plain" "inode/directory" ];
+      keywords = [ "vscode" ];
+      actions.new-empty-window = {
+        name = "New Empty Window";
+        exec = "${executableName} --new-window %F";
+        icon = "code";
+      };
     };
 
     urlHandlerDesktopItem = makeDesktopItem {
@@ -59,13 +56,11 @@ let
       genericName = "Text Editor";
       exec = executableName + " --open-url %U";
       icon = "code";
-      startupNotify = "true";
-      categories = "Utility;TextEditor;Development;IDE;";
-      mimeType = "x-scheme-handler/vscode;";
-      extraEntries = ''
-        NoDisplay=true
-        Keywords=vscode;
-      '';
+      startupNotify = true;
+      categories = [ "Utility" "TextEditor" "Development" "IDE" ];
+      mimeTypes = [ "x-scheme-handler/vscode" ];
+      keywords = [ "vscode" ];
+      noDisplay = true;
     };
 
     buildInputs = [ libsecret libXScrnSaver libxshmfence ]
diff --git a/pkgs/applications/editors/xxe-pe/default.nix b/pkgs/applications/editors/xxe-pe/default.nix
index e7cfe6284e3..8734f4d31c8 100644
--- a/pkgs/applications/editors/xxe-pe/default.nix
+++ b/pkgs/applications/editors/xxe-pe/default.nix
@@ -19,7 +19,7 @@ let
     icon = "xxe";
     desktopName = "xxe";
     genericName = "XML Editor";
-    categories = "Development;IDE;TextEditor;Java";
+    categories = [ "Development" "IDE" "TextEditor" "Java" ];
   };
 in
 stdenv.mkDerivation rec {
diff --git a/pkgs/applications/emulators/ccemux/default.nix b/pkgs/applications/emulators/ccemux/default.nix
index 11f24d59e5c..8b7b1c32628 100644
--- a/pkgs/applications/emulators/ccemux/default.nix
+++ b/pkgs/applications/emulators/ccemux/default.nix
@@ -29,7 +29,7 @@ let
     comment = "A modular ComputerCraft emulator";
     desktopName = "CCEmuX";
     genericName = "ComputerCraft Emulator";
-    categories = "Emulator;";
+    categories = [ "Emulator" ];
   };
 in
 
diff --git a/pkgs/applications/emulators/dosbox-staging/default.nix b/pkgs/applications/emulators/dosbox-staging/default.nix
index 438849e7fd8..c1820646dc6 100644
--- a/pkgs/applications/emulators/dosbox-staging/default.nix
+++ b/pkgs/applications/emulators/dosbox-staging/default.nix
@@ -75,7 +75,7 @@ stdenv.mkDerivation rec {
       comment = "x86 dos emulator enhanced";
       desktopName = "DosBox-Staging";
       genericName = "DOS emulator";
-      categories = "Emulator;Game;";
+      categories = [ "Emulator" "Game" ];
     })
   ];
 
diff --git a/pkgs/applications/emulators/dosbox/default.nix b/pkgs/applications/emulators/dosbox/default.nix
index 383e943ff24..87ac444ae49 100644
--- a/pkgs/applications/emulators/dosbox/default.nix
+++ b/pkgs/applications/emulators/dosbox/default.nix
@@ -47,7 +47,7 @@ stdenv.mkDerivation rec {
       comment = "x86 dos emulator";
       desktopName = "DOSBox";
       genericName = "DOS emulator";
-      categories = "Emulator;Game;";
+      categories = [ "Emulator" "Game" ];
     })
   ];
 
diff --git a/pkgs/applications/emulators/mame/default.nix b/pkgs/applications/emulators/mame/default.nix
index e0915703003..ce3fb3d06ae 100644
--- a/pkgs/applications/emulators/mame/default.nix
+++ b/pkgs/applications/emulators/mame/default.nix
@@ -26,7 +26,7 @@ let
     exec = "mame${lib.optionalString stdenv.is64bit "64"}";
     desktopName = "MAME";
     genericName = "MAME is a multi-purpose emulation framework";
-    categories = "System;Emulator;";
+    categories = [ "System" "Emulator" ];
   };
 
   dest = "$out/opt/mame";
diff --git a/pkgs/applications/emulators/mgba/default.nix b/pkgs/applications/emulators/mgba/default.nix
index d8defe6f2e9..4424bedc6f2 100644
--- a/pkgs/applications/emulators/mgba/default.nix
+++ b/pkgs/applications/emulators/mgba/default.nix
@@ -57,8 +57,8 @@ stdenv.mkDerivation rec {
       comment = "A Game Boy Advance Emulator";
       desktopName = "mgba";
       genericName = "Game Boy Advance Emulator";
-      categories = "Game;Emulator;";
-      startupNotify = "false";
+      categories = [ "Game" "Emulator" ];
+      startupNotify = false;
     })
   ];
 
diff --git a/pkgs/applications/emulators/ryujinx/default.nix b/pkgs/applications/emulators/ryujinx/default.nix
index 2f684257114..6dbd356f24c 100644
--- a/pkgs/applications/emulators/ryujinx/default.nix
+++ b/pkgs/applications/emulators/ryujinx/default.nix
@@ -74,7 +74,7 @@ buildDotnetModule rec {
     icon = "ryujinx";
     comment = meta.description;
     type = "Application";
-    categories = "Game;";
+    categories = [ "Game" ];
   })];
 
   meta = with lib; {
diff --git a/pkgs/applications/emulators/vice/default.nix b/pkgs/applications/emulators/vice/default.nix
index ca0de2f8276..13457823a23 100644
--- a/pkgs/applications/emulators/vice/default.nix
+++ b/pkgs/applications/emulators/vice/default.nix
@@ -65,7 +65,7 @@ stdenv.mkDerivation rec {
     comment = "Commodore 64 emulator";
     desktopName = "VICE";
     genericName = "Commodore 64 emulator";
-    categories = "Emulator;";
+    categories = [ "Emulator" ];
   };
 
   preBuild = ''
diff --git a/pkgs/applications/emulators/zsnes/default.nix b/pkgs/applications/emulators/zsnes/default.nix
index ba2f5d6bdc1..a14109bc857 100644
--- a/pkgs/applications/emulators/zsnes/default.nix
+++ b/pkgs/applications/emulators/zsnes/default.nix
@@ -9,7 +9,7 @@ let
     comment = "A SNES emulator";
     desktopName = "zsnes";
     genericName = "zsnes";
-    categories = "Game;";
+    categories = [ "Game" ];
   };
 
 in stdenv.mkDerivation {
diff --git a/pkgs/applications/graphics/antimony/default.nix b/pkgs/applications/graphics/antimony/default.nix
index 8b482626c91..0b70d67b271 100644
--- a/pkgs/applications/graphics/antimony/default.nix
+++ b/pkgs/applications/graphics/antimony/default.nix
@@ -48,13 +48,9 @@ in
         genericName = "CAD Application";
         exec = "antimony %f";
         icon = "antimony";
-        terminal = "false";
-        categories = "Graphics;Science;Engineering";
-        mimeType = "application/x-extension-sb;application/x-antimony;";
-        extraEntries = ''
-          StartupWMClass=antimony
-          Version=1.0
-        '';
+        categories = [ "Graphics" "Science" "Engineering" ];
+        mimeTypes = [ "application/x-extension-sb" "application/x-antimony" ];
+        startupWMClass = "antimony";
       })
     ];
 
diff --git a/pkgs/applications/graphics/avocode/default.nix b/pkgs/applications/graphics/avocode/default.nix
index fede2c9bb51..55080f333c2 100644
--- a/pkgs/applications/graphics/avocode/default.nix
+++ b/pkgs/applications/graphics/avocode/default.nix
@@ -56,7 +56,7 @@ stdenv.mkDerivation rec {
     icon = "avocode";
     desktopName = "Avocode";
     genericName = "Design Inspector";
-    categories = "Development;";
+    categories = [ "Development" ];
     comment = "The bridge between designers and developers";
   };
 
diff --git a/pkgs/applications/graphics/evilpixie/default.nix b/pkgs/applications/graphics/evilpixie/default.nix
index 2518eb0942a..be8e00b5154 100644
--- a/pkgs/applications/graphics/evilpixie/default.nix
+++ b/pkgs/applications/graphics/evilpixie/default.nix
@@ -16,8 +16,8 @@ let
     exec = "evilpixie %F";
     icon = "evilpixie";
     genericName = "Image Editor";
-    categories = "Graphics;2DGraphics;RasterGraphics;";
-    mimeType = "image/bmp;image/gif;image/jpeg;image/jpg;image/png;image/x-pcx;image/x-targa;image/x-tga;";
+    categories = [ "Graphics" "2DGraphics" "RasterGraphics" ];
+    mimeTypes = [ "image/bmp" "image/gif" "image/jpeg" "image/jpg" "image/png" "image/x-pcx" "image/x-targa" "image/x-tga" ];
   };
 
 in mkDerivation rec {
diff --git a/pkgs/applications/graphics/fiji/default.nix b/pkgs/applications/graphics/fiji/default.nix
index 18fdc2c55ac..77ffc4b44c8 100644
--- a/pkgs/applications/graphics/fiji/default.nix
+++ b/pkgs/applications/graphics/fiji/default.nix
@@ -26,20 +26,15 @@ stdenv.mkDerivation rec {
     (makeDesktopItem {
       name = "fiji";
       exec = "fiji %F";
+      tryExec = "fiji";
       icon = "fiji";
-      mimeType = "image/*;";
+      mimeTypes = [ "image/*" ];
       comment = "Scientific Image Analysis";
       desktopName = "Fiji Is Just ImageJ";
       genericName = "Fiji Is Just ImageJ";
-      categories = "Education;Science;ImageProcessing;";
-      terminal = false;
+      categories = [ "Education" "Science" "ImageProcessing" ];
       startupNotify = true;
-      extraEntries = ''
-        Version=1.0
-        TryExec=fiji
-        X-GNOME-FullName=Fiji Is Just ImageJ
-        StartupWMClass=fiji-Main
-      '';
+      startupWMClass = "fiji-Main";
     })
   ];
 
diff --git a/pkgs/applications/graphics/imagej/default.nix b/pkgs/applications/graphics/imagej/default.nix
index 4af139b0844..f21f658ace3 100644
--- a/pkgs/applications/graphics/imagej/default.nix
+++ b/pkgs/applications/graphics/imagej/default.nix
@@ -32,7 +32,7 @@ in stdenv.mkDerivation rec {
       name = "ImageJ";
       desktopName = "ImageJ";
       icon = "imagej";
-      categories = "Science;Utility;Graphics;";
+      categories = [ "Science" "Utility" "Graphics" ];
       exec = "imagej";
     })
   ];
diff --git a/pkgs/applications/graphics/ipe/default.nix b/pkgs/applications/graphics/ipe/default.nix
index c454ed0422d..d4d00ad9c6f 100644
--- a/pkgs/applications/graphics/ipe/default.nix
+++ b/pkgs/applications/graphics/ipe/default.nix
@@ -60,12 +60,10 @@ mkDerivation rec {
       comment = "A drawing editor for creating figures in PDF format";
       exec = "ipe";
       icon = "ipe";
-      mimeType = "text/xml;application/pdf";
-      categories = "Graphics;Qt;";
-      extraDesktopEntries = {
-        StartupWMClass = "ipe";
-        StartupNotify = "true";
-      };
+      mimeTypes = [ "text/xml" "application/pdf" ];
+      categories = [ "Graphics" "Qt" ];
+      startupNotify = true;
+      startupWMClass = "ipe";
     })
   ];
 
diff --git a/pkgs/applications/graphics/openboard/default.nix b/pkgs/applications/graphics/openboard/default.nix
index b30dbab1570..cf16ecc03cb 100644
--- a/pkgs/applications/graphics/openboard/default.nix
+++ b/pkgs/applications/graphics/openboard/default.nix
@@ -79,8 +79,8 @@ in mkDerivation rec {
       icon = "OpenBoard";
       comment = "OpenBoard, an interactive white board application";
       desktopName = "OpenBoard";
-      mimeType = "application/ubz";
-      categories = "Education;";
+      mimeTypes = [ "application/ubz" ];
+      categories = [ "Education" ];
       startupNotify = true;
     })
   ];
diff --git a/pkgs/applications/graphics/swingsane/default.nix b/pkgs/applications/graphics/swingsane/default.nix
index c9d119a7d60..93a600fff84 100644
--- a/pkgs/applications/graphics/swingsane/default.nix
+++ b/pkgs/applications/graphics/swingsane/default.nix
@@ -27,7 +27,7 @@ stdenv.mkDerivation rec {
       desktopName = "SwingSane";
       genericName = "Scan from local or remote SANE servers";
       comment = meta.description;
-      categories = "Office;";
+      categories = [ "Office" ];
     };
 
   in ''
diff --git a/pkgs/applications/graphics/write_stylus/default.nix b/pkgs/applications/graphics/write_stylus/default.nix
index 65f6c46f7da..ca8cebb2ec0 100644
--- a/pkgs/applications/graphics/write_stylus/default.nix
+++ b/pkgs/applications/graphics/write_stylus/default.nix
@@ -7,7 +7,7 @@ let
     icon = "write_stylus";
     desktopName = "Write";
     genericName = "Write";
-    categories = "Office;Graphics";
+    categories = [ "Office" "Graphics" ];
   };
 in
 mkDerivation rec {
diff --git a/pkgs/applications/graphics/xournal/default.nix b/pkgs/applications/graphics/xournal/default.nix
index 7d9ab53bef8..f8312723875 100644
--- a/pkgs/applications/graphics/xournal/default.nix
+++ b/pkgs/applications/graphics/xournal/default.nix
@@ -35,8 +35,8 @@ stdenv.mkDerivation rec {
     icon = "xournal";
     desktopName = "Xournal";
     comment = meta.description;
-    categories = "Office;Graphics;";
-    mimeType = "application/pdf;application/x-xoj";
+    categories = [ "Office" "Graphics" ];
+    mimeTypes = [ "application/pdf" "application/x-xoj" ];
     genericName = "PDF Editor";
   };
 
diff --git a/pkgs/applications/misc/azuredatastudio/default.nix b/pkgs/applications/misc/azuredatastudio/default.nix
index 378a04bada9..458b0484af0 100644
--- a/pkgs/applications/misc/azuredatastudio/default.nix
+++ b/pkgs/applications/misc/azuredatastudio/default.nix
@@ -32,19 +32,16 @@ let
     genericName = "Text Editor";
     exec = "azuredatastudio --no-sandbox --unity-launch %F";
     icon = "azuredatastudio";
-    startupNotify = "true";
-    categories = "Utility;TextEditor;Development;IDE;";
-    mimeType = "text/plain;inode/directory;application/x-azuredatastudio-workspace;";
-    extraEntries = ''
-      StartupWMClass=azuredatastudio
-      Actions=new-empty-window;
-      Keywords=azuredatastudio;
-
-      [Desktop Action new-empty-window]
-      Name=New Empty Window
-      Exec=azuredatastudio --no-sandbox --new-window %F
-      Icon=azuredatastudio
-    '';
+    startupNotify = true;
+    startupWMClass = "azuredatastudio";
+    categories = [ "Utility" "TextEditor" "Development" "IDE" ];
+    mimeTypes = [ "text/plain" "inode/directory" "application/x-azuredatastudio-workspace" ];
+    keywords = [ "azuredatastudio" ];
+    actions.new-empty-window = {
+      name = "New Empty Window";
+      exec = "azuredatastudio --no-sandbox --new-window %F";
+      icon = "azuredatastudio";
+    };
   };
 
   urlHandlerDesktopItem = makeDesktopItem {
@@ -54,13 +51,12 @@ let
     genericName = "Text Editor";
     exec = "azuredatastudio --no-sandbox --open-url %U";
     icon = "azuredatastudio";
-    startupNotify = "true";
-    categories = "Utility;TextEditor;Development;IDE;";
-    mimeType = "x-scheme-handler/azuredatastudio;";
-    extraEntries = ''
-      NoDisplay=true
-      Keywords=azuredatastudio;
-    '';
+    startupNotify = true;
+    startupWMClass = "azuredatastudio";
+    categories = [ "Utility" "TextEditor" "Development" "IDE" ];
+    mimeTypes = [ "x-scheme-handler/azuredatastudio" ];
+    keywords = [ "azuredatastudio" ];
+    noDisplay = true;
   };
 in
 stdenv.mkDerivation rec {
diff --git a/pkgs/applications/misc/cubiomes-viewer/default.nix b/pkgs/applications/misc/cubiomes-viewer/default.nix
index f8f7fb8491c..777c4b97d2b 100644
--- a/pkgs/applications/misc/cubiomes-viewer/default.nix
+++ b/pkgs/applications/misc/cubiomes-viewer/default.nix
@@ -35,7 +35,7 @@ stdenv.mkDerivation rec {
     desktopName = "Cubiomes Viewer";
     exec = pname;
     icon = pname;
-    categories = "Game";
+    categories = [ "Game" ];
     comment = meta.description;
   }) ];
 
diff --git a/pkgs/applications/misc/cura/stable.nix b/pkgs/applications/misc/cura/stable.nix
index a2ec91193ea..d330a8a5ae2 100644
--- a/pkgs/applications/misc/cura/stable.nix
+++ b/pkgs/applications/misc/cura/stable.nix
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
     comment = "Cura";
     desktopName = "Cura";
     genericName = "3D printing host software";
-    categories = "GNOME;GTK;Utility;";
+    categories = [ "GNOME" "GTK" "Utility" ];
   };
 
   python_deps = with python27Packages; [ pyopengl pyserial numpy wxPython30 power setuptools ];
diff --git a/pkgs/applications/misc/dbeaver/default.nix b/pkgs/applications/misc/dbeaver/default.nix
index e87e9ba4092..ba1682f02dd 100644
--- a/pkgs/applications/misc/dbeaver/default.nix
+++ b/pkgs/applications/misc/dbeaver/default.nix
@@ -84,7 +84,7 @@ stdenv.mkDerivation rec {
       desktopName = "dbeaver";
       comment = "SQL Integrated Development Environment";
       genericName = "SQL Integrated Development Environment";
-      categories = "Development;";
+      categories = [ "Development" ];
     })
   ];
 
diff --git a/pkgs/applications/misc/free42/default.nix b/pkgs/applications/misc/free42/default.nix
index 14351990e72..e793618f9d2 100644
--- a/pkgs/applications/misc/free42/default.nix
+++ b/pkgs/applications/misc/free42/default.nix
@@ -74,8 +74,7 @@ stdenv.mkDerivation rec {
       exec = "free42bin";
       type = "Application";
       comment = meta.description;
-      categories = "Utility;Calculator;";
-      terminal = "false";
+      categories = [ "Utility" "Calculator" ];
     })
     (makeDesktopItem {
       name = "com.thomasokken.free42dec";
@@ -84,8 +83,7 @@ stdenv.mkDerivation rec {
       exec = "free42dec";
       type = "Application";
       comment = meta.description;
-      categories = "Utility;Calculator;";
-      terminal = "false";
+      categories = [ "Utility" "Calculator" ];
     })
   ];
 
diff --git a/pkgs/applications/misc/ganttproject-bin/default.nix b/pkgs/applications/misc/ganttproject-bin/default.nix
index 76a19f5188c..69466572741 100644
--- a/pkgs/applications/misc/ganttproject-bin/default.nix
+++ b/pkgs/applications/misc/ganttproject-bin/default.nix
@@ -24,7 +24,7 @@ stdenv.mkDerivation rec {
       desktopName = "GanttProject";
       genericName = "Shedule and manage projects";
       comment = meta.description;
-      categories = "Office;";
+      categories = [ "Office" ];
     };
 
     javaOptions = [
diff --git a/pkgs/applications/misc/gkrellm/default.nix b/pkgs/applications/misc/gkrellm/default.nix
index 0a62ce4ea51..523ba837f3a 100644
--- a/pkgs/applications/misc/gkrellm/default.nix
+++ b/pkgs/applications/misc/gkrellm/default.nix
@@ -56,7 +56,7 @@ stdenv.mkDerivation rec {
       desktopName = "GKrellM";
       genericName = "System monitor";
       comment = "The GNU Krell Monitors";
-      categories = "System;Monitor;";
+      categories = [ "System" "Monitor" ];
     })
   ];
 
diff --git a/pkgs/applications/misc/golden-cheetah/default.nix b/pkgs/applications/misc/golden-cheetah/default.nix
index b2a858d8d3e..7f796a2bb0c 100644
--- a/pkgs/applications/misc/golden-cheetah/default.nix
+++ b/pkgs/applications/misc/golden-cheetah/default.nix
@@ -12,7 +12,7 @@ let
     desktopName = "GoldenCheetah";
     genericName = "GoldenCheetah";
     comment = "Performance software for cyclists, runners and triathletes";
-    categories = "Utility;";
+    categories = [ "Utility" ];
   };
 in mkDerivation rec {
   pname = "golden-cheetah";
diff --git a/pkgs/applications/misc/gpsprune/default.nix b/pkgs/applications/misc/gpsprune/default.nix
index 62dccc91e60..1c898fa343c 100644
--- a/pkgs/applications/misc/gpsprune/default.nix
+++ b/pkgs/applications/misc/gpsprune/default.nix
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
       desktopName = "GpsPrune";
       genericName = "GPS Data Editor";
       comment = meta.description;
-      categories = "Education;Geoscience;";
+      categories = [ "Education" "Geoscience" ];
     })
   ];
 
diff --git a/pkgs/applications/misc/ideamaker/default.nix b/pkgs/applications/misc/ideamaker/default.nix
index 1996ba5c1ea..1e20a0d6faf 100644
--- a/pkgs/applications/misc/ideamaker/default.nix
+++ b/pkgs/applications/misc/ideamaker/default.nix
@@ -63,8 +63,8 @@ stdenv.mkDerivation rec {
     icon = pname;
     desktopName = "Ideamaker";
     genericName = meta.description;
-    categories = "Utility;Viewer;Engineering;";
-    mimeType = "application/sla";
+    categories = [ "Utility" "Viewer" "Engineering" ];
+    mimeTypes = [ "application/sla" ];
   };
 
   meta = with lib; {
diff --git a/pkgs/applications/misc/ipmiview/default.nix b/pkgs/applications/misc/ipmiview/default.nix
index 92491f4508e..4c01e52aa5d 100644
--- a/pkgs/applications/misc/ipmiview/default.nix
+++ b/pkgs/applications/misc/ipmiview/default.nix
@@ -44,7 +44,7 @@ stdenv.mkDerivation rec {
     exec = "IPMIView";
     desktopName = name;
     genericName = "Supermicro BMC manager";
-    categories = "Network";
+    categories = [ "Network" ];
   };
 
   installPhase = ''
diff --git a/pkgs/applications/misc/keepass/default.nix b/pkgs/applications/misc/keepass/default.nix
index 4276ce8a841..bc281bea16a 100644
--- a/pkgs/applications/misc/keepass/default.nix
+++ b/pkgs/applications/misc/keepass/default.nix
@@ -69,11 +69,8 @@ with builtins; buildDotnetPackage rec {
     icon = "keepass";
     desktopName = "Keepass";
     genericName = "Password manager";
-    categories = "Utility;";
-    mimeType = lib.concatStringsSep ";" [
-      "application/x-keepass2"
-      ""
-    ];
+    categories = [ "Utility" ];
+    mimeTypes = [ "application/x-keepass2" ];
   };
 
   outputFiles = [
diff --git a/pkgs/applications/misc/lsd2dsl/default.nix b/pkgs/applications/misc/lsd2dsl/default.nix
index 2dfbaeb9941..eceb9308fc0 100644
--- a/pkgs/applications/misc/lsd2dsl/default.nix
+++ b/pkgs/applications/misc/lsd2dsl/default.nix
@@ -25,7 +25,7 @@ mkDerivation rec {
     desktopName = "lsd2dsl";
     genericName = "lsd2dsl";
     comment = meta.description;
-    categories = "Dictionary;FileTools;Qt;";
+    categories = [ "Dictionary" "FileTools" "Qt" ];
   });
 
   installPhase = ''
diff --git a/pkgs/applications/misc/michabo/default.nix b/pkgs/applications/misc/michabo/default.nix
index 015a326fdc9..c356dc19786 100644
--- a/pkgs/applications/misc/michabo/default.nix
+++ b/pkgs/applications/misc/michabo/default.nix
@@ -10,7 +10,6 @@
 
 let
   desktopItem = makeDesktopItem {
-    type = "Application";
     name = "Michabo";
     desktopName = "Michabo";
     exec = "Michabo";
diff --git a/pkgs/applications/misc/obinskit/default.nix b/pkgs/applications/misc/obinskit/default.nix
index 664b2bf03ac..973a05ad1d7 100644
--- a/pkgs/applications/misc/obinskit/default.nix
+++ b/pkgs/applications/misc/obinskit/default.nix
@@ -15,7 +15,7 @@ let
     icon = "obinskit";
     desktopName = "Obinskit";
     genericName = "Obinskit keyboard configurator";
-    categories = "Utility";
+    categories = [ "Utility" ];
   };
   electron = electron_13;
 in
diff --git a/pkgs/applications/misc/obsidian/default.nix b/pkgs/applications/misc/obsidian/default.nix
index 6626c332157..5e71f7d0d10 100644
--- a/pkgs/applications/misc/obsidian/default.nix
+++ b/pkgs/applications/misc/obsidian/default.nix
@@ -15,7 +15,7 @@ let
     comment = "Knowledge base";
     icon = "obsidian";
     exec = "obsidian";
-    categories = "Office";
+    categories = [ "Office" ];
   };
 
   updateScript = writeScript "obsidian-updater" ''
diff --git a/pkgs/applications/misc/opentrack/default.nix b/pkgs/applications/misc/opentrack/default.nix
index 9bef85c2b24..009633f3273 100644
--- a/pkgs/applications/misc/opentrack/default.nix
+++ b/pkgs/applications/misc/opentrack/default.nix
@@ -45,7 +45,7 @@ in mkDerivation {
       };
       desktopName = name;
       genericName = "Head tracking software";
-      categories = "Utility;";
+      categories = [ "Utility" ];
     })
   ];
 
diff --git a/pkgs/applications/misc/pdfsam-basic/default.nix b/pkgs/applications/misc/pdfsam-basic/default.nix
index 298b4bf2c0a..745796098e8 100644
--- a/pkgs/applications/misc/pdfsam-basic/default.nix
+++ b/pkgs/applications/misc/pdfsam-basic/default.nix
@@ -35,8 +35,8 @@ stdenv.mkDerivation rec {
     comment = meta.description;
     desktopName = "PDFsam Basic";
     genericName = "PDF Split and Merge";
-    mimeType = "application/pdf;";
-    categories = "Office;";
+    mimeTypes = [ "application/pdf" ];
+    categories = [ "Office" ];
   };
 
   meta = with lib; {
diff --git a/pkgs/applications/misc/pdfstudio/common.nix b/pkgs/applications/misc/pdfstudio/common.nix
index 7240e8a026e..8c034d6636b 100644
--- a/pkgs/applications/misc/pdfstudio/common.nix
+++ b/pkgs/applications/misc/pdfstudio/common.nix
@@ -40,10 +40,8 @@ let
         exec = "${pname} %f";
         icon = "${pname}${year}";
         comment = "Views and edits PDF files";
-        mimeType = "application/pdf";
-        categories = "Office";
-        type = "Application";
-        terminal = false;
+        mimeTypes = [ "application/pdf" ];
+        categories = [ "Office" ];
       })
     ];
 
diff --git a/pkgs/applications/misc/pgadmin/default.nix b/pkgs/applications/misc/pgadmin/default.nix
index 1bcc36557af..4e9d674d0cf 100644
--- a/pkgs/applications/misc/pgadmin/default.nix
+++ b/pkgs/applications/misc/pgadmin/default.nix
@@ -52,9 +52,8 @@ stdenv.mkDerivation rec {
       genericName = "SQL Administration";
       exec = "pgadmin3";
       icon = "pgAdmin3";
-      type = "Application";
-      categories = "Development;";
-      mimeType = "text/html";
+      categories = [ "Development" ];
+      mimeTypes = [ "text/html" ];
     };
   in ''
     mkdir -p $out/share/pixmaps;
diff --git a/pkgs/applications/misc/plater/default.nix b/pkgs/applications/misc/plater/default.nix
index 9b034f9f904..e2e1906926a 100644
--- a/pkgs/applications/misc/plater/default.nix
+++ b/pkgs/applications/misc/plater/default.nix
@@ -28,7 +28,7 @@ mkDerivation rec {
     icon = pname;
     desktopName = "Ideamaker";
     genericName = meta.description;
-    categories = "Utility;Engineering;";
+    categories = ["Utility" "Engineering"];
   };
 
   postInstall = ''
diff --git a/pkgs/applications/misc/premid/default.nix b/pkgs/applications/misc/premid/default.nix
index 98ac0de3268..d2b8663d245 100644
--- a/pkgs/applications/misc/premid/default.nix
+++ b/pkgs/applications/misc/premid/default.nix
@@ -77,7 +77,7 @@ stdenv.mkDerivation rec {
       icon = pname;
       desktopName = "PreMiD";
       genericName = meta.description;
-      mimeType = "x-scheme-handler/premid";
+      mimeTypes = [ "x-scheme-handler/premid" ];
     })
   ];
 
diff --git a/pkgs/applications/misc/prusa-slicer/default.nix b/pkgs/applications/misc/prusa-slicer/default.nix
index f66bb4a3b77..d72d605f021 100644
--- a/pkgs/applications/misc/prusa-slicer/default.nix
+++ b/pkgs/applications/misc/prusa-slicer/default.nix
@@ -99,7 +99,7 @@ stdenv.mkDerivation rec {
       comment = "G-code generator for 3D printers";
       desktopName = "PrusaSlicer";
       genericName = "3D printer tool";
-      categories = "Development;";
+      categories = [ "Development" ];
     })
     (makeDesktopItem {
       name = "PrusaSlicer G-code Viewer";
@@ -108,7 +108,7 @@ stdenv.mkDerivation rec {
       comment = "G-code viewer for 3D printers";
       desktopName = "PrusaSlicer G-code Viewer";
       genericName = "G-code Viewer";
-      categories = "Development;";
+      categories = [ "Development" ];
     })
   ];
 
diff --git a/pkgs/applications/misc/prusa-slicer/super-slicer.nix b/pkgs/applications/misc/prusa-slicer/super-slicer.nix
index 930051d5b1e..de00c1174b9 100644
--- a/pkgs/applications/misc/prusa-slicer/super-slicer.nix
+++ b/pkgs/applications/misc/prusa-slicer/super-slicer.nix
@@ -39,7 +39,7 @@ let
         comment = description;
         desktopName = appname;
         genericName = "3D printer tool";
-        categories = "Development;";
+        categories = [ "Development" ];
       })
     ];
 
diff --git a/pkgs/applications/misc/robo3t/default.nix b/pkgs/applications/misc/robo3t/default.nix
index 1499cfc40dc..8c644e5f3cc 100644
--- a/pkgs/applications/misc/robo3t/default.nix
+++ b/pkgs/applications/misc/robo3t/default.nix
@@ -40,7 +40,7 @@ stdenv.mkDerivation rec {
     comment = "Query GUI for mongodb";
     desktopName = "Robo3T";
     genericName = "MongoDB management tool";
-    categories = "Development;IDE;";
+    categories = [ "Development" "IDE" ];
   };
 
   nativeBuildInputs = [ makeWrapper ];
diff --git a/pkgs/applications/misc/sidequest/default.nix b/pkgs/applications/misc/sidequest/default.nix
index a1be4a6b52e..e26a40667da 100644
--- a/pkgs/applications/misc/sidequest/default.nix
+++ b/pkgs/applications/misc/sidequest/default.nix
@@ -8,7 +8,7 @@
       exec = "SideQuest";
       desktopName = name;
       genericName = "VR App Store";
-      categories = "Settings;PackageManager;";
+      categories = [ "Settings" "PackageManager" ];
     };
 
     sidequest = stdenv.mkDerivation {
diff --git a/pkgs/applications/misc/simplenote/default.nix b/pkgs/applications/misc/simplenote/default.nix
index 675fe9cf1a5..f723ba27beb 100644
--- a/pkgs/applications/misc/simplenote/default.nix
+++ b/pkgs/applications/misc/simplenote/default.nix
@@ -46,14 +46,13 @@ let
     };
 
     desktopItem = makeDesktopItem {
-      categories = "Development";
+      categories = [ "Development" ];
       comment = "Simplenote for Linux";
       desktopName = "Simplenote";
       exec = "simplenote %U";
       icon = "simplenote";
       name = "simplenote";
-      startupNotify = "true";
-      type = "Application";
+      startupNotify = true;
     };
 
     dontBuild = true;
diff --git a/pkgs/applications/misc/slic3r/default.nix b/pkgs/applications/misc/slic3r/default.nix
index 49ff51c2f48..f4dd6c7185f 100644
--- a/pkgs/applications/misc/slic3r/default.nix
+++ b/pkgs/applications/misc/slic3r/default.nix
@@ -30,7 +30,7 @@ stdenv.mkDerivation rec {
     comment = "G-code generator for 3D printers";
     desktopName = "Slic3r";
     genericName = "3D printer tool";
-    categories = "Development;";
+    categories = [ "Development" ];
   };
 
   prePatch = ''
diff --git a/pkgs/applications/misc/snapmaker-luban/default.nix b/pkgs/applications/misc/snapmaker-luban/default.nix
index 6f2b43785c7..b5bcbabf867 100644
--- a/pkgs/applications/misc/snapmaker-luban/default.nix
+++ b/pkgs/applications/misc/snapmaker-luban/default.nix
@@ -74,7 +74,7 @@ stdenv.mkDerivation rec {
       icon = "snapmaker-luban";
       desktopName = "Snapmaker Luban";
       genericName = meta.description;
-      categories = "Office;Printing;";
+      categories = [ "Office" "Printing" ];
     })
   ];
 
diff --git a/pkgs/applications/misc/stretchly/default.nix b/pkgs/applications/misc/stretchly/default.nix
index d333640fc50..4316905e655 100644
--- a/pkgs/applications/misc/stretchly/default.nix
+++ b/pkgs/applications/misc/stretchly/default.nix
@@ -59,7 +59,7 @@ stdenv.mkDerivation rec {
     icon = icon;
     desktopName = "Stretchly";
     genericName = "Stretchly";
-    categories = "Utility;";
+    categories = [ "Utility" ];
   };
 
   meta = with lib; {
diff --git a/pkgs/applications/misc/sweethome3d/default.nix b/pkgs/applications/misc/sweethome3d/default.nix
index bfe9af76841..f2c8e6075d9 100644
--- a/pkgs/applications/misc/sweethome3d/default.nix
+++ b/pkgs/applications/misc/sweethome3d/default.nix
@@ -37,7 +37,7 @@ let
       icon = pname;
       comment =  description;
       genericName = "Computer Aided (Interior) Design";
-      categories = "Graphics;2DGraphics;3DGraphics;";
+      categories = [ "Graphics" "2DGraphics" "3DGraphics" ];
     };
 
     postPatch = ''
diff --git a/pkgs/applications/misc/sweethome3d/editors.nix b/pkgs/applications/misc/sweethome3d/editors.nix
index d6ea3fccfa6..9ef9fd0f7f4 100644
--- a/pkgs/applications/misc/sweethome3d/editors.nix
+++ b/pkgs/applications/misc/sweethome3d/editors.nix
@@ -40,7 +40,7 @@ let
       name = pname;
       comment =  description;
       genericName = "Computer Aided (Interior) Design";
-      categories = "Graphics;2DGraphics;3DGraphics;";
+      categories = [ "Graphics" "2DGraphics" "3DGraphics" ];
     };
 
     nativeBuildInputs = [ makeWrapper unzip ];
diff --git a/pkgs/applications/misc/teleprompter/default.nix b/pkgs/applications/misc/teleprompter/default.nix
index 96265356ead..7e4ac3a5701 100644
--- a/pkgs/applications/misc/teleprompter/default.nix
+++ b/pkgs/applications/misc/teleprompter/default.nix
@@ -30,7 +30,6 @@ stdenv.mkDerivation rec {
   desktopItem = makeDesktopItem {
      name = "teleprompter";
      exec = "teleprompter";
-     type = "Application";
      desktopName = "Teleprompter";
   };
 
diff --git a/pkgs/applications/misc/toggldesktop/default.nix b/pkgs/applications/misc/toggldesktop/default.nix
index 6623a8775a9..910f92a849e 100644
--- a/pkgs/applications/misc/toggldesktop/default.nix
+++ b/pkgs/applications/misc/toggldesktop/default.nix
@@ -133,7 +133,7 @@ let
   '';
 
   desktopItem = makeDesktopItem rec {
-    categories = "Utility;";
+    categories = [ "Utility" ];
     desktopName = "Toggl";
     genericName = desktopName;
     name = "toggldesktop";
diff --git a/pkgs/applications/misc/trenchbroom/default.nix b/pkgs/applications/misc/trenchbroom/default.nix
index b6ff0211691..8a702506060 100644
--- a/pkgs/applications/misc/trenchbroom/default.nix
+++ b/pkgs/applications/misc/trenchbroom/default.nix
@@ -51,7 +51,7 @@ stdenv.mkDerivation rec {
       desktopName = "TrenchBroom level editor";
       icon = "trenchbroom";
       comment = meta.description;
-      categories = "Development";
+      categories = [ "Development" ];
       exec = "trenchbroom";
     })
   ];
diff --git a/pkgs/applications/misc/tvbrowser/bin.nix b/pkgs/applications/misc/tvbrowser/bin.nix
index fa08b5f555a..bd8fdf5e48c 100644
--- a/pkgs/applications/misc/tvbrowser/bin.nix
+++ b/pkgs/applications/misc/tvbrowser/bin.nix
@@ -8,11 +8,9 @@ let
     comment = "Themeable and easy to use TV Guide";
     desktopName = "TV-Browser";
     genericName = "Electronic TV Program Guide";
-    categories = "AudioVideo;TV;Java;";
-    startupNotify = "true";
-    extraEntries = ''
-      StartupWMClass=tvbrowser-TVBrowser
-    '';
+    categories = [ "AudioVideo" "TV" "Java" ];
+    startupNotify = true;
+    startupWMClass = "tvbrowser-TVBrowser";
   };
 
 in stdenv.mkDerivation rec {
diff --git a/pkgs/applications/misc/xmind/default.nix b/pkgs/applications/misc/xmind/default.nix
index 5f71f909926..bcc4fca33b1 100644
--- a/pkgs/applications/misc/xmind/default.nix
+++ b/pkgs/applications/misc/xmind/default.nix
@@ -33,8 +33,8 @@ stdenv.mkDerivation rec {
     icon = "xmind";
     desktopName = "XMind";
     comment = meta.description;
-    categories = "Office;";
-    mimeType = "application/xmind;x-scheme-handler/xmind";
+    categories = [ "Office" ];
+    mimeTypes = [ "application/xmind" "x-scheme-handler/xmind" ];
   };
 
   installPhase = let
diff --git a/pkgs/applications/misc/xpdf/default.nix b/pkgs/applications/misc/xpdf/default.nix
index eb5ebf3a717..927b04d5e21 100644
--- a/pkgs/applications/misc/xpdf/default.nix
+++ b/pkgs/applications/misc/xpdf/default.nix
@@ -42,8 +42,7 @@ stdenv.mkDerivation rec {
     comment = "Views Adobe PDF files";
     icon = "xpdf";
     exec = "xpdf %f";
-    categories = "Office;";
-    terminal = "false";
+    categories = [ "Office" ];
   };
 
   postInstall = lib.optionalString (!stdenv.isDarwin) ''
diff --git a/pkgs/applications/networking/aether/default.nix b/pkgs/applications/networking/aether/default.nix
index 5682091237b..5f78b244ca4 100644
--- a/pkgs/applications/networking/aether/default.nix
+++ b/pkgs/applications/networking/aether/default.nix
@@ -63,8 +63,8 @@ stdenv.mkDerivation rec {
       icon = pname;
       desktopName = "Aether";
       genericName = meta.description;
-      categories = "Network;";
-      mimeType = "x-scheme-handler/aether";
+      categories = [ "Network" ];
+      mimeTypes = [ "x-scheme-handler/aether" ];
     })
   ];
 
diff --git a/pkgs/applications/networking/apache-directory-studio/default.nix b/pkgs/applications/networking/apache-directory-studio/default.nix
index d9fe26fdbdc..8b20c1aac6b 100644
--- a/pkgs/applications/networking/apache-directory-studio/default.nix
+++ b/pkgs/applications/networking/apache-directory-studio/default.nix
@@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
     comment = "Eclipse-based LDAP browser and directory client";
     desktopName = "Apache Directory Studio";
     genericName = "Apache Directory Studio";
-    categories = "Java;Network";
+    categories = [ "Java" "Network" ];
   };
 
   buildInputs = [ glib libsecret ];
diff --git a/pkgs/applications/networking/browsers/firefox/wrapper.nix b/pkgs/applications/networking/browsers/firefox/wrapper.nix
index b428687025d..76e0977f18a 100644
--- a/pkgs/applications/networking/browsers/firefox/wrapper.nix
+++ b/pkgs/applications/networking/browsers/firefox/wrapper.nix
@@ -159,11 +159,10 @@ let
         name = applicationName;
         exec = "${applicationName}${nameSuffix} %U";
         inherit icon;
-        comment = "";
         desktopName = "${desktopName}${nameSuffix}${lib.optionalString forceWayland " (Wayland)"}";
         genericName = "Web Browser";
-        categories = "Network;WebBrowser;";
-        mimeType = lib.concatStringsSep ";" [
+        categories = [ "Network" "WebBrowser" ];
+        mimeTypes = [
           "text/html"
           "text/xml"
           "application/xhtml+xml"
diff --git a/pkgs/applications/networking/browsers/tor-browser-bundle-bin/default.nix b/pkgs/applications/networking/browsers/tor-browser-bundle-bin/default.nix
index 427f6bcdc9a..cb2322551ad 100644
--- a/pkgs/applications/networking/browsers/tor-browser-bundle-bin/default.nix
+++ b/pkgs/applications/networking/browsers/tor-browser-bundle-bin/default.nix
@@ -125,7 +125,7 @@ stdenv.mkDerivation rec {
     desktopName = "Tor Browser";
     genericName = "Web Browser";
     comment = meta.description;
-    categories = "Network;WebBrowser;Security;";
+    categories = [ "Network" "WebBrowser" "Security" ];
   };
 
   buildCommand = ''
diff --git a/pkgs/applications/networking/browsers/vieb/default.nix b/pkgs/applications/networking/browsers/vieb/default.nix
index fbd0df2fd3a..d7ba8808cc7 100644
--- a/pkgs/applications/networking/browsers/vieb/default.nix
+++ b/pkgs/applications/networking/browsers/vieb/default.nix
@@ -24,8 +24,8 @@ mkYarnPackage rec {
     icon = "vieb";
     desktopName = "Web Browser";
     genericName = "Web Browser";
-    categories = "Network;WebBrowser;";
-    mimeType = lib.concatStringsSep ";" [
+    categories = [ "Network" "WebBrowser" ];
+    mimeTypes = [
       "text/html"
       "application/xhtml+xml"
       "x-scheme-handler/http"
diff --git a/pkgs/applications/networking/browsers/webbrowser/default.nix b/pkgs/applications/networking/browsers/webbrowser/default.nix
index f9be7e9ec9a..9f43f981722 100644
--- a/pkgs/applications/networking/browsers/webbrowser/default.nix
+++ b/pkgs/applications/networking/browsers/webbrowser/default.nix
@@ -29,8 +29,8 @@ in stdenv.mkDerivation rec {
     icon = "webbrowser";
     desktopName = "Web Browser";
     genericName = "Web Browser";
-    categories = "Network;WebBrowser;";
-    mimeType = lib.concatStringsSep ";" [
+    categories = [ "Network" "WebBrowser" ];
+    mimeTypes = [
       "text/html"
       "text/xml"
       "application/xhtml+xml"
diff --git a/pkgs/applications/networking/charles/default.nix b/pkgs/applications/networking/charles/default.nix
index 757f39c5b35..064213b01ae 100644
--- a/pkgs/applications/networking/charles/default.nix
+++ b/pkgs/applications/networking/charles/default.nix
@@ -11,14 +11,21 @@ let
   generic = { version, sha256, platform ? "", jdk, ... }@attrs:
   let
     desktopItem = makeDesktopItem {
-      categories = "Network;Development;WebDevelopment;Java;";
+      categories = [ "Network" "Development" "WebDevelopment" "Java" ];
       desktopName = "Charles";
       exec = "charles %F";
       genericName  = "Web Debugging Proxy";
       icon = "charles-proxy";
-      mimeType = "application/x-charles-savedsession;application/x-charles-savedsession+xml;application/x-charles-savedsession+json;application/har+json;application/vnd.tcpdump.pcap;application/x-charles-trace";
+      mimeTypes = [
+        "application/x-charles-savedsession"
+        "application/x-charles-savedsession+xml"
+        "application/x-charles-savedsession+json"
+        "application/har+json"
+        "application/vnd.tcpdump.pcap"
+        "application/x-charles-trace"
+      ];
       name = "Charles";
-      startupNotify = "true";
+      startupNotify = true;
     };
 
   in stdenv.mkDerivation {
diff --git a/pkgs/applications/networking/cisco-packet-tracer/7.nix b/pkgs/applications/networking/cisco-packet-tracer/7.nix
index 33f35ba12af..f7e73171312 100644
--- a/pkgs/applications/networking/cisco-packet-tracer/7.nix
+++ b/pkgs/applications/networking/cisco-packet-tracer/7.nix
@@ -38,7 +38,7 @@ let
     desktopName = "Cisco Packet Tracer 7";
     icon = "${ptFiles}/opt/pt/art/app.png";
     exec = "packettracer7 %f";
-    mimeType = "application/x-pkt;application/x-pka;application/x-pkz;";
+    mimeTypes = [ "application/x-pkt" "application/x-pka" "application/x-pkz" ];
   };
 
   fhs = buildFHSUserEnvBubblewrap {
diff --git a/pkgs/applications/networking/cisco-packet-tracer/8.nix b/pkgs/applications/networking/cisco-packet-tracer/8.nix
index c823dcbb1d3..1267a061429 100644
--- a/pkgs/applications/networking/cisco-packet-tracer/8.nix
+++ b/pkgs/applications/networking/cisco-packet-tracer/8.nix
@@ -94,7 +94,7 @@ let
     desktopName = "Cisco Packet Tracer 8";
     icon = "${ptFiles}/opt/pt/art/app.png";
     exec = "packettracer8 %f";
-    mimeType = "application/x-pkt;application/x-pka;application/x-pkz;";
+    mimeTypes = [ "application/x-pkt" "application/x-pka" "application/x-pkz" ];
   };
 
   fhs = buildFHSUserEnvBubblewrap {
diff --git a/pkgs/applications/networking/dropbox/default.nix b/pkgs/applications/networking/dropbox/default.nix
index 9c4340fffed..a65110b8023 100644
--- a/pkgs/applications/networking/dropbox/default.nix
+++ b/pkgs/applications/networking/dropbox/default.nix
@@ -24,8 +24,8 @@ let
     comment = "Sync your files across computers and to the web";
     desktopName = "Dropbox";
     genericName = "File Synchronizer";
-    categories = "Network;FileTransfer;";
-    startupNotify = "false";
+    categories = [ "Network" "FileTransfer" ];
+    startupNotify = false;
     icon = "dropbox";
   };
 in
diff --git a/pkgs/applications/networking/instant-messengers/deltachat-desktop/default.nix b/pkgs/applications/networking/instant-messengers/deltachat-desktop/default.nix
index fa795a11c2a..9e245b46d06 100644
--- a/pkgs/applications/networking/instant-messengers/deltachat-desktop/default.nix
+++ b/pkgs/applications/networking/instant-messengers/deltachat-desktop/default.nix
@@ -103,11 +103,9 @@ in nodePackages.deltachat-desktop.override rec {
     desktopName = "Delta Chat";
     genericName = "Delta Chat";
     comment = meta.description;
-    categories = "Network;InstantMessaging;Chat;";
-    extraEntries = ''
-      StartupWMClass=DeltaChat
-      MimeType=x-scheme-handler/openpgp4fpr;x-scheme-handler/mailto;
-    '';
+    categories = [ "Network" "InstantMessaging" "Chat" ];
+    startupWMClass = "DeltaChat";
+    mimeTypes = [ "x-scheme-handler/openpgp4fpr" "x-scheme-handler/mailto" ];
   });
 
   passthru.updateScript = ./update.sh;
diff --git a/pkgs/applications/networking/instant-messengers/discord/linux.nix b/pkgs/applications/networking/instant-messengers/discord/linux.nix
index c9e642aceb9..05833c1eeaf 100644
--- a/pkgs/applications/networking/instant-messengers/discord/linux.nix
+++ b/pkgs/applications/networking/instant-messengers/discord/linux.nix
@@ -100,8 +100,8 @@ stdenv.mkDerivation rec {
     icon = pname;
     inherit desktopName;
     genericName = meta.description;
-    categories = "Network;InstantMessaging;";
-    mimeType = "x-scheme-handler/discord";
+    categories = [ "Network" "InstantMessaging" ];
+    mimeTypes = [ "x-scheme-handler/discord" ];
   };
 
   passthru.updateScript = writeScript "discord-update-script" ''
diff --git a/pkgs/applications/networking/instant-messengers/element/element-desktop.nix b/pkgs/applications/networking/instant-messengers/element/element-desktop.nix
index c9b45b2f8b6..2ad5d8c4654 100644
--- a/pkgs/applications/networking/instant-messengers/element/element-desktop.nix
+++ b/pkgs/applications/networking/instant-messengers/element/element-desktop.nix
@@ -106,11 +106,9 @@ mkYarnPackage rec {
     desktopName = "Element";
     genericName = "Matrix Client";
     comment = meta.description;
-    categories = "Network;InstantMessaging;Chat;";
-    extraEntries = ''
-      StartupWMClass=element
-      MimeType=x-scheme-handler/element;
-    '';
+    categories = [ "Network" "InstantMessaging" "Chat" ];
+    startupWMClass = "element";
+    mimeTypes = [ "x-scheme-handler/element" ];
   };
 
   passthru = {
diff --git a/pkgs/applications/networking/instant-messengers/gitter/default.nix b/pkgs/applications/networking/instant-messengers/gitter/default.nix
index 853043b97cb..8ed85cba854 100644
--- a/pkgs/applications/networking/instant-messengers/gitter/default.nix
+++ b/pkgs/applications/networking/instant-messengers/gitter/default.nix
@@ -88,7 +88,7 @@ in stdenv.mkDerivation rec {
     icon = pname;
     desktopName = "Gitter";
     genericName = meta.description;
-    categories = "Network;InstantMessaging;";
+    categories = [ "Network" "InstantMessaging" ];
   };
 
   meta = with lib; {
diff --git a/pkgs/applications/networking/instant-messengers/gomuks/default.nix b/pkgs/applications/networking/instant-messengers/gomuks/default.nix
index 5f2a094ca36..695089c23e6 100644
--- a/pkgs/applications/networking/instant-messengers/gomuks/default.nix
+++ b/pkgs/applications/networking/instant-messengers/gomuks/default.nix
@@ -40,10 +40,10 @@ buildGoModule rec {
       makeDesktopItem {
         name = "net.maunium.gomuks.desktop";
         exec = "@out@/bin/gomuks";
-        terminal = "true";
+        terminal = true;
         desktopName = "Gomuks";
         genericName = "Matrix client";
-        categories = "Network;Chat";
+        categories = [ "Network" "Chat" ];
         comment = meta.description;
       }
     }/* $out/
diff --git a/pkgs/applications/networking/instant-messengers/jitsi/default.nix b/pkgs/applications/networking/instant-messengers/jitsi/default.nix
index e2ace1a5d35..21c28c7391a 100644
--- a/pkgs/applications/networking/instant-messengers/jitsi/default.nix
+++ b/pkgs/applications/networking/instant-messengers/jitsi/default.nix
@@ -21,7 +21,7 @@ stdenv.mkDerivation rec {
     comment = "VoIP and Instant Messaging client";
     desktopName = "Jitsi";
     genericName = "Instant Messaging";
-    categories = "Chat";
+    categories = [ "Chat" ];
   };
 
   libPath = lib.makeLibraryPath ([
diff --git a/pkgs/applications/networking/instant-messengers/mikutter/default.nix b/pkgs/applications/networking/instant-messengers/mikutter/default.nix
index c20ec46f266..ffc2eea5b86 100644
--- a/pkgs/applications/networking/instant-messengers/mikutter/default.nix
+++ b/pkgs/applications/networking/instant-messengers/mikutter/default.nix
@@ -49,9 +49,9 @@ let
       desktopName = "mikutter";
       exec = "mikutter";
       icon = "mikutter";
-      categories = "Network;";
+      categories = [ "Network" ];
       comment = description;
-      extraDesktopEntries.Keywords = "Mastodon;";
+      keywords = [ "Mastodon" ];
     };
 
   mkInfoPlist = { version }:
diff --git a/pkgs/applications/networking/instant-messengers/rambox/rambox.nix b/pkgs/applications/networking/instant-messengers/rambox/rambox.nix
index df038611c3b..d4329ed09d3 100644
--- a/pkgs/applications/networking/instant-messengers/rambox/rambox.nix
+++ b/pkgs/applications/networking/instant-messengers/rambox/rambox.nix
@@ -10,8 +10,7 @@ let
     name = pname;
     exec = pname;
     icon = pname;
-    type = "Application";
-    categories = "Network;";
+    categories = [ "Network" ];
   });
 
   appimageContents = appimageTools.extractType2 {
diff --git a/pkgs/applications/networking/instant-messengers/ricochet/default.nix b/pkgs/applications/networking/instant-messengers/ricochet/default.nix
index 0aa2d4cc677..f612ec524a7 100644
--- a/pkgs/applications/networking/instant-messengers/ricochet/default.nix
+++ b/pkgs/applications/networking/instant-messengers/ricochet/default.nix
@@ -31,7 +31,7 @@ mkDerivation rec {
     desktopName = "Ricochet";
     genericName = "Ricochet";
     comment = meta.description;
-    categories = "Office;Email;";
+    categories = [ "Office" "Email" ];
   };
 
   buildInputs = [
diff --git a/pkgs/applications/networking/instant-messengers/schildichat/schildichat-desktop.nix b/pkgs/applications/networking/instant-messengers/schildichat/schildichat-desktop.nix
index f7e2ee3c6a9..a87d57ecc91 100644
--- a/pkgs/applications/networking/instant-messengers/schildichat/schildichat-desktop.nix
+++ b/pkgs/applications/networking/instant-messengers/schildichat/schildichat-desktop.nix
@@ -108,11 +108,9 @@ stdenv.mkDerivation rec {
       desktopName = "SchildiChat";
       genericName = "Matrix Client";
       comment = meta.description;
-      categories = "Network;InstantMessaging;Chat;";
-      extraEntries = ''
-        StartupWMClass=schildichat
-        MimeType=x-scheme-handler/element;
-      '';
+      categories = [ "Network" "InstantMessaging" "Chat" ];
+      startupWMClass = "schildichat";
+      mimeTypes = [ "x-scheme-handler/element" ];
     })
   ];
 
diff --git a/pkgs/applications/networking/instant-messengers/teamspeak/client.nix b/pkgs/applications/networking/instant-messengers/teamspeak/client.nix
index 513f427ee13..ca6cc55d65a 100644
--- a/pkgs/applications/networking/instant-messengers/teamspeak/client.nix
+++ b/pkgs/applications/networking/instant-messengers/teamspeak/client.nix
@@ -23,7 +23,7 @@ let
     comment = "The TeamSpeak voice communication tool";
     desktopName = "TeamSpeak";
     genericName = "TeamSpeak";
-    categories = "Network";
+    categories = [ "Network" ];
   };
 
   fakeLess = writeShellScriptBin "less" "cat";
diff --git a/pkgs/applications/networking/instant-messengers/tensor/default.nix b/pkgs/applications/networking/instant-messengers/tensor/default.nix
index 943ec299cdb..2d5f6e2dfb7 100644
--- a/pkgs/applications/networking/instant-messengers/tensor/default.nix
+++ b/pkgs/applications/networking/instant-messengers/tensor/default.nix
@@ -32,8 +32,8 @@ mkDerivation rec {
     comment = meta.description;
     desktopName = "Tensor Matrix Client";
     genericName = meta.description;
-    categories = "Chat;Utility";
-    mimeType = "application/x-chat";
+    categories = [ "Chat" "Utility" ];
+    mimeTypes = [ "application/x-chat" ];
   };
 
   installPhase = if stdenv.isDarwin then ''
diff --git a/pkgs/applications/networking/instant-messengers/wavebox/default.nix b/pkgs/applications/networking/instant-messengers/wavebox/default.nix
index 371ac91120b..26a6b43d448 100644
--- a/pkgs/applications/networking/instant-messengers/wavebox/default.nix
+++ b/pkgs/applications/networking/instant-messengers/wavebox/default.nix
@@ -16,7 +16,7 @@ let
     icon = "wavebox";
     desktopName = name;
     genericName = name;
-    categories = "Network;";
+    categories = [ "Network" ];
   };
 
   tarball = "Wavebox_${replaceStrings ["."] ["_"] (toString version)}_linux_${bits}.tar.gz";
diff --git a/pkgs/applications/networking/instant-messengers/wire-desktop/default.nix b/pkgs/applications/networking/instant-messengers/wire-desktop/default.nix
index fc8fbdcede3..974d9a6a05d 100644
--- a/pkgs/applications/networking/instant-messengers/wire-desktop/default.nix
+++ b/pkgs/applications/networking/instant-messengers/wire-desktop/default.nix
@@ -68,16 +68,14 @@ let
     };
 
     desktopItem = makeDesktopItem {
-      categories = "Network;InstantMessaging;Chat;VideoConference";
+      categories = [ "Network" "InstantMessaging" "Chat" "VideoConference" ];
       comment = "Secure messenger for everyone";
       desktopName = "Wire";
       exec = "wire-desktop %U";
       genericName = "Secure messenger";
       icon = "wire-desktop";
       name = "wire-desktop";
-      extraEntries = ''
-        StartupWMClass=Wire
-      '';
+      startupWMClass = "Wire";
     };
 
     dontBuild = true;
diff --git a/pkgs/applications/networking/ostinato/default.nix b/pkgs/applications/networking/ostinato/default.nix
index 0719c137aba..45307504d73 100644
--- a/pkgs/applications/networking/ostinato/default.nix
+++ b/pkgs/applications/networking/ostinato/default.nix
@@ -29,21 +29,18 @@ mkDerivation rec {
   '';
 
   desktopItem = makeDesktopItem {
-    type          = "Application";
     name          = "ostinato";
     desktopName   = "Ostinato";
     genericName   = "Packet/Traffic Generator and Analyzer";
     comment       = "Network packet and traffic generator and analyzer with a friendly GUI";
-    categories    = "Network";
-    terminal      = "false";
-    startupNotify = "true";
+    categories    = [ "Network" ];
+    startupNotify = true;
     exec          = "$out/bin/ostinato";
     icon          =  ostinatoIcon;
-    extraEntries  = ''
-      GenericName[it]=Generatore ed Analizzatore di pacchetti di rete
-      Comment[it]=Generatore ed Analizzatore di pacchetti di rete con interfaccia amichevole
-    '';
-    fileValidation = false;
+    extraConfig   = {
+      "GenericName[it]" = "Generatore ed Analizzatore di pacchetti di rete";
+      "Comment[it]"     = "Generatore ed Analizzatore di pacchetti di rete con interfaccia amichevole";
+    };
   };
 
   postInstall = ''
diff --git a/pkgs/applications/networking/p2p/frostwire/default.nix b/pkgs/applications/networking/p2p/frostwire/default.nix
index b3b277bf130..e4c1c8f5b7b 100644
--- a/pkgs/applications/networking/p2p/frostwire/default.nix
+++ b/pkgs/applications/networking/p2p/frostwire/default.nix
@@ -18,7 +18,7 @@ let
     exec = "frostwire";
     icon = "frostwire";
     comment = "Search and explore all kinds of files on the Bittorrent network";
-    categories = "Network;FileTransfer;P2P;";
+    categories = [ "Network" "FileTransfer" "P2P" ];
   };
 
   # fake build to pre-download deps into fixed-output derivation
diff --git a/pkgs/applications/networking/p2p/transgui/default.nix b/pkgs/applications/networking/p2p/transgui/default.nix
index 0a2f90ecb71..da7633221a5 100644
--- a/pkgs/applications/networking/p2p/transgui/default.nix
+++ b/pkgs/applications/networking/p2p/transgui/default.nix
@@ -49,13 +49,9 @@ stdenv.mkDerivation rec {
     comment = meta.description;
     desktopName = "Transmission Remote GUI";
     genericName = "BitTorrent Client";
-    categories = lib.concatStringsSep ";" [
-      "Application" "Network" "FileTransfer" "P2P" "GTK"
-    ];
-    startupNotify = "true";
-    mimeType = lib.concatStringsSep ";" [
-      "application/x-bittorrent" "x-scheme-handler/magnet"
-    ];
+    categories = [ "Application" "Network" "FileTransfer" "P2P" "GTK" ];
+    startupNotify = true;
+    mimeTypes = [ "application/x-bittorrent" "x-scheme-handler/magnet" ];
   };
 
   postInstall = ''
diff --git a/pkgs/applications/networking/remote/anydesk/default.nix b/pkgs/applications/networking/remote/anydesk/default.nix
index 890553b338e..54d7c5c6813 100644
--- a/pkgs/applications/networking/remote/anydesk/default.nix
+++ b/pkgs/applications/networking/remote/anydesk/default.nix
@@ -12,8 +12,8 @@ let
     icon = "anydesk";
     desktopName = "AnyDesk";
     genericName = description;
-    categories = "Network;";
-    startupNotify = "false";
+    categories = [ "Network" ];
+    startupNotify = false;
   };
 
 in stdenv.mkDerivation rec {
diff --git a/pkgs/applications/networking/remote/vmware-horizon-client/default.nix b/pkgs/applications/networking/remote/vmware-horizon-client/default.nix
index ee9467467cf..be0832a075f 100644
--- a/pkgs/applications/networking/remote/vmware-horizon-client/default.nix
+++ b/pkgs/applications/networking/remote/vmware-horizon-client/default.nix
@@ -105,7 +105,7 @@ let
     desktopName = "VMware Horizon Client";
     icon = "${vmwareHorizonClientFiles}/share/icons/vmware-view.png";
     exec = "${vmwareFHSUserEnv "vmware-view"}/bin/vmware-view %u";
-    mimeType = "x-scheme-handler/vmware-view";
+    mimeTypes = [ "x-scheme-handler/vmware-view" ];
   };
 
   binLinkCommands = lib.concatMapStringsSep
diff --git a/pkgs/applications/networking/ssb-patchwork/default.nix b/pkgs/applications/networking/ssb-patchwork/default.nix
index 0223c153f5c..4d0fd119285 100644
--- a/pkgs/applications/networking/ssb-patchwork/default.nix
+++ b/pkgs/applications/networking/ssb-patchwork/default.nix
@@ -26,7 +26,7 @@ let
     comment = "Client for the decentralized social network Secure Scuttlebutt";
     desktopName = "Patchwork";
     genericName = "Patchwork";
-    categories = "Network;";
+    categories = [ "Network" ];
   };
 
 in
diff --git a/pkgs/applications/networking/sync/unison/default.nix b/pkgs/applications/networking/sync/unison/default.nix
index 9759516eddc..3e0ed7a5020 100644
--- a/pkgs/applications/networking/sync/unison/default.nix
+++ b/pkgs/applications/networking/sync/unison/default.nix
@@ -60,12 +60,9 @@ stdenv.mkDerivation rec {
     genericName = "File synchronization tool";
     exec = "unison";
     icon = "unison";
-    categories = "Utility;FileTools;GTK;";
-    extraDesktopEntries = {
-      StartupWMClass = "Unison";
-      StartupNotify = "true";
-      X-MultipleArgs = "false";
-    };
+    categories = [ "Utility" "FileTools" "GTK" ];
+    startupNotify = true;
+    startupWMClass = "Unison";
   });
 
   meta = with lib; {
diff --git a/pkgs/applications/networking/termius/default.nix b/pkgs/applications/networking/termius/default.nix
index c699781376a..e419a350489 100644
--- a/pkgs/applications/networking/termius/default.nix
+++ b/pkgs/applications/networking/termius/default.nix
@@ -24,7 +24,7 @@ stdenv.mkDerivation rec {
   };
 
   desktopItem = makeDesktopItem {
-    categories = "Network;";
+    categories = [ "Network" ];
     comment = "The SSH client that works on Desktop and Mobile";
     desktopName = "Termius";
     exec = "termius-app";
diff --git a/pkgs/applications/office/appflowy/default.nix b/pkgs/applications/office/appflowy/default.nix
index 08d5d9ce361..abc8e33fd37 100644
--- a/pkgs/applications/office/appflowy/default.nix
+++ b/pkgs/applications/office/appflowy/default.nix
@@ -62,7 +62,7 @@ stdenv.mkDerivation rec {
       desktopName = "AppFlowy";
       comment = meta.description;
       exec = "appflowy";
-      categories = "Office;";
+      categories = [ "Office" ];
     })
   ];
 
diff --git a/pkgs/applications/office/jabref/default.nix b/pkgs/applications/office/jabref/default.nix
index 964d17587a4..255dba62294 100644
--- a/pkgs/applications/office/jabref/default.nix
+++ b/pkgs/applications/office/jabref/default.nix
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
     name = "jabref";
     desktopName = "JabRef";
     genericName = "Bibliography manager";
-    categories = "Office;";
+    categories = [ "Office" ];
     icon = "jabref";
     exec = "jabref";
   };
diff --git a/pkgs/applications/office/jameica/default.nix b/pkgs/applications/office/jameica/default.nix
index 678c3bb357c..9ef7afcf958 100644
--- a/pkgs/applications/office/jameica/default.nix
+++ b/pkgs/applications/office/jameica/default.nix
@@ -17,7 +17,7 @@ let
     comment = "Free Runtime Environment for Java Applications.";
     desktopName = "Jameica";
     genericName = "Jameica";
-    categories = "Office;";
+    categories = [ "Office" ];
   };
 in
 stdenv.mkDerivation rec {
diff --git a/pkgs/applications/office/portfolio/default.nix b/pkgs/applications/office/portfolio/default.nix
index b7ec18c9866..ecabdb85a93 100644
--- a/pkgs/applications/office/portfolio/default.nix
+++ b/pkgs/applications/office/portfolio/default.nix
@@ -18,7 +18,7 @@ let
     icon = "portfolio";
     comment = "Calculate Investment Portfolio Performance";
     desktopName = "Portfolio Performance";
-    categories = "Office;";
+    categories = [ "Office" ];
   };
 
   runtimeLibs = lib.makeLibraryPath [ gtk3 webkitgtk ];
diff --git a/pkgs/applications/office/pyspread/default.nix b/pkgs/applications/office/pyspread/default.nix
index b7261dca5a4..6a63aba4a17 100644
--- a/pkgs/applications/office/pyspread/default.nix
+++ b/pkgs/applications/office/pyspread/default.nix
@@ -46,7 +46,7 @@ python3.pkgs.buildPythonApplication rec {
       desktopName = "Pyspread";
       genericName = "Spreadsheet";
       comment = meta.description;
-      categories = "Office;Development;Spreadsheet;";
+      categories = [ "Office" "Development" "Spreadsheet" ];
     })
   ];
 
diff --git a/pkgs/applications/office/softmaker/desktop_items.nix b/pkgs/applications/office/softmaker/desktop_items.nix
index 614c6574faa..dfdf45da9e5 100644
--- a/pkgs/applications/office/softmaker/desktop_items.nix
+++ b/pkgs/applications/office/softmaker/desktop_items.nix
@@ -5,38 +5,90 @@
     name = "${pname}-planmaker";
     desktopName = "${suiteName} PlanMaker";
     icon = "${pname}-pml";
-    categories = "Office;";
+    categories = [ "Office" ];
     exec = "${pname}-planmaker %F";
-    mimeType = "application/x-pmd;application/x-pmdx;application/x-pmv;application/excel;application/x-excel;application/x-ms-excel;application/x-msexcel;application/x-sylk;application/x-xls;application/xls;application/vnd.ms-excel;application/vnd.stardivision.calc;application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;application/vnd.openxmlformats-officedocument.spreadsheetml.template;application/vnd.ms-excel.sheet.macroenabled.12;application/vnd.ms-excel.template.macroEnabled.12;application/x-dif;text/spreadsheet;text/csv;application/x-prn;application/vnd.ms-excel.sheet.binary.macroenabled.12;";
-    extraEntries = ''
-      TryExec=${pname}-planmaker
-      StartupWMClass=pm
-    '';
+    tryExec = "${pname}-planmaker";
+    mimeTypes = [
+      "application/x-pmd"
+      "application/x-pmdx"
+      "application/x-pmv"
+      "application/excel"
+      "application/x-excel"
+      "application/x-ms-excel"
+      "application/x-msexcel"
+      "application/x-sylk"
+      "application/x-xls"
+      "application/xls"
+      "application/vnd.ms-excel"
+      "application/vnd.stardivision.calc"
+      "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
+      "application/vnd.openxmlformats-officedocument.spreadsheetml.template"
+      "application/vnd.ms-excel.sheet.macroenabled.12"
+      "application/vnd.ms-excel.template.macroEnabled.12"
+      "application/x-dif;text/spreadsheet;text/csv"
+      "application/x-prn"
+      "application/vnd.ms-excel.sheet.binary.macroenabled.12"
+    ];
+    startupWMClass = "pm";
   };
 
   presentations = makeDesktopItem {
     name = "${pname}-presentations";
     desktopName = "${suiteName} Presentations";
     icon = "${pname}-prl";
-    categories = "Office;";
+    categories = [ "Office" ];
     exec = "${pname}-presentations %F";
-    mimeType = "application/x-prdx;application/x-prvx;application/x-prsx;application/x-prd;application/x-prv;application/x-prs;application/ppt;application/mspowerpoint;application/vnd.ms-powerpoint;application/vnd.openxmlformats-officedocument.presentationml.presentation;application/vnd.ms-powerpoint.presentation.macroenabled.12;application/vnd.openxmlformats-officedocument.presentationml.template;application/vnd.ms-powerpoint.template.macroEnabled.12;application/vnd.ms-powerpoint.slideshow.macroenabled.12;application/vnd.openxmlformats-officedocument.presentationml.slideshow;";
-    extraEntries = ''
-      TryExec=${pname}-presentations
-      StartupWMClass=pr
-    '';
+    tryExec = "${pname}-presentations";
+    mimeTypes = [
+      "application/x-prdx"
+      "application/x-prvx"
+      "application/x-prsx"
+      "application/x-prd"
+      "application/x-prv"
+      "application/x-prs"
+      "application/ppt"
+      "application/mspowerpoint"
+      "application/vnd.ms-powerpoint"
+      "application/vnd.openxmlformats-officedocument.presentationml.presentation"
+      "application/vnd.ms-powerpoint.presentation.macroenabled.12"
+      "application/vnd.openxmlformats-officedocument.presentationml.template"
+      "application/vnd.ms-powerpoint.template.macroEnabled.12"
+      "application/vnd.ms-powerpoint.slideshow.macroenabled.12"
+      "application/vnd.openxmlformats-officedocument.presentationml.slideshow"
+    ];
+    startupWMClass = "pr";
   };
 
   textmaker = makeDesktopItem {
     name = "${pname}-textmaker";
     desktopName = "${suiteName} TextMaker";
     icon = "${pname}-tml";
-    categories = "Office;";
+    categories = [ "Office" ];
     exec = "${pname}-textmaker %F";
-    mimeType = "application/x-tmdx;application/x-tmvx;application/x-tmd;application/x-tmv;application/msword;application/vnd.ms-word;application/x-doc;text/rtf;application/rtf;application/vnd.oasis.opendocument.text;application/vnd.oasis.opendocument.text-template;application/vnd.stardivision.writer;application/vnd.sun.xml.writer;application/vnd.sun.xml.writer.template;application/vnd.openxmlformats-officedocument.wordprocessingml.document;application/vnd.ms-word.document.macroenabled.12;application/vnd.openxmlformats-officedocument.wordprocessingml.template;application/vnd.ms-word.template.macroenabled.12;application/x-pocket-word;application/x-dbf;application/msword-template;";
-    extraEntries = ''
-      TryExec=${pname}-textmaker
-      StartupWMClass=tm
-    '';
+    tryExec = "${pname}-textmaker";
+    mimeTypes = [
+      "application/x-tmdx"
+      "application/x-tmvx"
+      "application/x-tmd"
+      "application/x-tmv"
+      "application/msword"
+      "application/vnd.ms-word"
+      "application/x-doc"
+      "text/rtf"
+      "application/rtf"
+      "application/vnd.oasis.opendocument.text"
+      "application/vnd.oasis.opendocument.text-template"
+      "application/vnd.stardivision.writer"
+      "application/vnd.sun.xml.writer"
+      "application/vnd.sun.xml.writer.template"
+      "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
+      "application/vnd.ms-word.document.macroenabled.12"
+      "application/vnd.openxmlformats-officedocument.wordprocessingml.template"
+      "application/vnd.ms-word.template.macroenabled.12"
+      "application/x-pocket-word"
+      "application/x-dbf"
+      "application/msword-template"
+    ];
+    startupWMClass = "tm";
   };
 }
diff --git a/pkgs/applications/office/timeline/default.nix b/pkgs/applications/office/timeline/default.nix
index 52677716247..b8b98c19bbf 100644
--- a/pkgs/applications/office/timeline/default.nix
+++ b/pkgs/applications/office/timeline/default.nix
@@ -37,9 +37,8 @@ python3.pkgs.buildPythonApplication rec {
       name = "timeline";
       comment = "Display and navigate information on a timeline";
       icon = "timeline";
-      terminal = false;
       exec = "timeline";
-      categories = "Office;Calendar;";
+      categories = [ "Office" "Calendar" ];
     })
   ];
 
diff --git a/pkgs/applications/office/trilium/default.nix b/pkgs/applications/office/trilium/default.nix
index 0c72bc96418..c73c0b87c0c 100644
--- a/pkgs/applications/office/trilium/default.nix
+++ b/pkgs/applications/office/trilium/default.nix
@@ -8,7 +8,7 @@ let
     icon = "trilium";
     comment = description;
     desktopName = "Trilium Notes";
-    categories = "Office";
+    categories = [ "Office" ];
   };
 
   meta = with lib; {
diff --git a/pkgs/applications/office/tusk/default.nix b/pkgs/applications/office/tusk/default.nix
index d54f27f9bbf..5bfc8ebc970 100644
--- a/pkgs/applications/office/tusk/default.nix
+++ b/pkgs/applications/office/tusk/default.nix
@@ -17,7 +17,7 @@ let
     icon = icon;
     desktopName = pname;
     genericName = "Evernote desktop app";
-    categories = "Application";
+    categories = [ "Application" ];
   };
 
 in appimageTools.wrapType2 rec {
diff --git a/pkgs/applications/office/zotero/default.nix b/pkgs/applications/office/zotero/default.nix
index 74f05a0b402..6fb8aecbbca 100644
--- a/pkgs/applications/office/zotero/default.nix
+++ b/pkgs/applications/office/zotero/default.nix
@@ -94,13 +94,12 @@ stdenv.mkDerivation rec {
     name = "zotero-${version}";
     exec = "zotero -url %U";
     icon = "zotero";
-    type = "Application";
     comment = meta.description;
     desktopName = "Zotero";
     genericName = "Reference Management";
-    categories = "Office;Database;";
-    startupNotify = "true";
-    mimeType = "text/plain";
+    categories = [ "Office" "Database" ];
+    startupNotify = true;
+    mimeTypes = [ "text/plain" ];
   };
 
   installPhase = ''
diff --git a/pkgs/applications/radio/svxlink/default.nix b/pkgs/applications/radio/svxlink/default.nix
index 255f7761be9..8c1d5f2129e 100644
--- a/pkgs/applications/radio/svxlink/default.nix
+++ b/pkgs/applications/radio/svxlink/default.nix
@@ -9,7 +9,7 @@ let
     icon = "qtel";
     desktopName = name;
     genericName = "EchoLink Client";
-    categories = "HamRadio;Qt;Network;";
+    categories = [ "HamRadio" "Qt" "Network" ];
   };
 
 in stdenv.mkDerivation rec {
diff --git a/pkgs/applications/science/astronomy/gprojector/default.nix b/pkgs/applications/science/astronomy/gprojector/default.nix
index 3864058828f..26e8fe11a32 100644
--- a/pkgs/applications/science/astronomy/gprojector/default.nix
+++ b/pkgs/applications/science/astronomy/gprojector/default.nix
@@ -22,8 +22,8 @@ stdenvNoCC.mkDerivation rec {
     exec = "gprojector";
     desktopName = "G.Projector";
     comment = meta.description;
-    categories = "Science;";
-    extraEntries = "StartupWMClass = gov-nasa-giss-projector-GProjector";
+    categories = [ "Science" ];
+    startupWMClass = "gov-nasa-giss-projector-GProjector";
   }) ];
 
   buildInputs = [ jre ];
diff --git a/pkgs/applications/science/chemistry/jmol/default.nix b/pkgs/applications/science/chemistry/jmol/default.nix
index 65b1f92943d..cc983e24618 100644
--- a/pkgs/applications/science/chemistry/jmol/default.nix
+++ b/pkgs/applications/science/chemistry/jmol/default.nix
@@ -12,8 +12,16 @@ let
     exec = "jmol";
     desktopName = "JMol";
     genericName = "Molecular Modeler";
-    mimeType = "chemical/x-pdb;chemical/x-mdl-molfile;chemical/x-mol2;chemical/seq-aa-fasta;chemical/seq-na-fasta;chemical/x-xyz;chemical/x-mdl-sdf;";
-    categories = "Graphics;Education;Science;Chemistry;";
+    mimeTypes = [
+      "chemical/x-pdb"
+      "chemical/x-mdl-molfile"
+      "chemical/x-mol2"
+      "chemical/seq-aa-fasta"
+      "chemical/seq-na-fasta"
+      "chemical/x-xyz"
+      "chemical/x-mdl-sdf"
+    ];
+    categories = [ "Graphics" "Education" "Science" "Chemistry" ];
   };
 in
 stdenv.mkDerivation rec {
diff --git a/pkgs/applications/science/chemistry/pymol/default.nix b/pkgs/applications/science/chemistry/pymol/default.nix
index 39bbae77a66..5f7c0c1f6be 100644
--- a/pkgs/applications/science/chemistry/pymol/default.nix
+++ b/pkgs/applications/science/chemistry/pymol/default.nix
@@ -24,8 +24,16 @@ let
     genericName = "Molecular Modeler";
     comment = description;
     icon = pname;
-    mimeType = "chemical/x-pdb;chemical/x-mdl-molfile;chemical/x-mol2;chemical/seq-aa-fasta;chemical/seq-na-fasta;chemical/x-xyz;chemical/x-mdl-sdf;";
-    categories = "Graphics;Education;Science;Chemistry;";
+    mimeTypes = [
+      "chemical/x-pdb"
+      "chemical/x-mdl-molfile"
+      "chemical/x-mol2"
+      "chemical/seq-aa-fasta"
+      "chemical/seq-na-fasta"
+      "chemical/x-xyz"
+      "chemical/x-mdl-sdf"
+    ];
+    categories = [ "Graphics" "Education" "Science" "Chemistry" ];
   };
 in
 python3Packages.buildPythonApplication rec {
diff --git a/pkgs/applications/science/electronics/diylc/default.nix b/pkgs/applications/science/electronics/diylc/default.nix
index 987f6156b4b..ff4e3809fc2 100644
--- a/pkgs/applications/science/electronics/diylc/default.nix
+++ b/pkgs/applications/science/electronics/diylc/default.nix
@@ -27,7 +27,7 @@ let
     comment = "Multi platform circuit layout and schematic drawing tool";
     exec = "diylc";
     icon = "diylc_icon";
-    categories = "Development;Electronics;";
+    categories = [ "Development" "Electronics" ];
   };
 in
 stdenv.mkDerivation rec {
diff --git a/pkgs/applications/science/electronics/eagle/eagle.nix b/pkgs/applications/science/electronics/eagle/eagle.nix
index 2fb3b8c8b18..5b4c8eb790f 100644
--- a/pkgs/applications/science/electronics/eagle/eagle.nix
+++ b/pkgs/applications/science/electronics/eagle/eagle.nix
@@ -27,7 +27,7 @@ let
       comment = "Schematic capture and PCB layout";
       desktopName = "Eagle";
       genericName = "Schematic editor";
-      categories = "Development;";
+      categories = [ "Development" ];
     };
 
     buildInputs =
diff --git a/pkgs/applications/science/electronics/eagle/eagle7.nix b/pkgs/applications/science/electronics/eagle/eagle7.nix
index 94457c81ce9..f48d08d4079 100644
--- a/pkgs/applications/science/electronics/eagle/eagle7.nix
+++ b/pkgs/applications/science/electronics/eagle/eagle7.nix
@@ -37,7 +37,7 @@ stdenv.mkDerivation rec {
     comment = "Schematic capture and PCB layout";
     desktopName = "Eagle";
     genericName = "Schematic editor";
-    categories = "Development;";
+    categories = [ "Development" ];
   };
 
   buildInputs =
diff --git a/pkgs/applications/science/logic/coq/default.nix b/pkgs/applications/science/logic/coq/default.nix
index bdd2796addc..1be25f54e1e 100644
--- a/pkgs/applications/science/logic/coq/default.nix
+++ b/pkgs/applications/science/logic/coq/default.nix
@@ -179,7 +179,7 @@ self = stdenv.mkDerivation {
     icon = "coq";
     desktopName = "CoqIDE";
     comment = "Graphical interface for the Coq proof assistant";
-    categories = "Development;Science;Math;IDE;GTK";
+    categories = [ "Development" "Science" "Math" "IDE" "GTK" ];
   });
 
   postInstall = let suffix = if versionAtLeast "8.14" then "-core" else ""; in ''
diff --git a/pkgs/applications/science/logic/isabelle/default.nix b/pkgs/applications/science/logic/isabelle/default.nix
index 0f041002425..96e8da059a4 100644
--- a/pkgs/applications/science/logic/isabelle/default.nix
+++ b/pkgs/applications/science/logic/isabelle/default.nix
@@ -114,7 +114,7 @@ stdenv.mkDerivation rec {
     icon = "isabelle";
     desktopName = "Isabelle";
     comment = meta.description;
-    categories = "Education;Science;Math;";
+    categories = [ "Education" "Science" "Math" ];
   };
 
   meta = with lib; {
diff --git a/pkgs/applications/science/logic/key/default.nix b/pkgs/applications/science/logic/key/default.nix
index 762acbe4ec4..85a7ecb08c3 100644
--- a/pkgs/applications/science/logic/key/default.nix
+++ b/pkgs/applications/science/logic/key/default.nix
@@ -61,7 +61,7 @@ in stdenv.mkDerivation rec {
       comment = meta.description;
       desktopName = "KeY";
       genericName = "KeY";
-      categories = "Science;";
+      categories = [ "Science" ];
     })
   ];
 
diff --git a/pkgs/applications/science/logic/logisim-evolution/default.nix b/pkgs/applications/science/logic/logisim-evolution/default.nix
index 688c8c319bd..67e699bc63f 100644
--- a/pkgs/applications/science/logic/logisim-evolution/default.nix
+++ b/pkgs/applications/science/logic/logisim-evolution/default.nix
@@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
       exec = "logisim-evolution";
       icon = "logisim-evolution";
       comment = meta.description;
-      categories = "Education;";
+      categories = [ "Education" ];
     })
   ];
 
diff --git a/pkgs/applications/science/logic/logisim/default.nix b/pkgs/applications/science/logic/logisim/default.nix
index b4741aaed86..06dc024e6d2 100644
--- a/pkgs/applications/science/logic/logisim/default.nix
+++ b/pkgs/applications/science/logic/logisim/default.nix
@@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
       exec = "logisim";
       icon = "logisim";
       comment = meta.description;
-      categories = "Education;";
+      categories = [ "Education" ];
     })
   ];
 
diff --git a/pkgs/applications/science/logic/tlaplus/toolbox.nix b/pkgs/applications/science/logic/tlaplus/toolbox.nix
index 21c60d03ac1..7b1ee4384c9 100644
--- a/pkgs/applications/science/logic/tlaplus/toolbox.nix
+++ b/pkgs/applications/science/logic/tlaplus/toolbox.nix
@@ -18,10 +18,8 @@ let
     comment = "IDE for TLA+";
     desktopName = name;
     genericName = comment;
-    categories = "Development";
-    extraEntries = ''
-      StartupWMClass=TLA+ Toolbox
-    '';
+    categories = [ "Development" ];
+    startupWMClass = "TLA+ Toolbox";
   };
 
 
diff --git a/pkgs/applications/science/math/geogebra/default.nix b/pkgs/applications/science/math/geogebra/default.nix
index 7ebfe2030d4..8ab498c61d9 100644
--- a/pkgs/applications/science/math/geogebra/default.nix
+++ b/pkgs/applications/science/math/geogebra/default.nix
@@ -15,8 +15,8 @@ let
     desktopName = "Geogebra";
     genericName = "Geogebra";
     comment = meta.description;
-    categories = "Education;Science;Math;";
-    mimeType = "application/vnd.geogebra.file;application/vnd.geogebra.tool;";
+    categories = [ "Education" "Science" "Math" ];
+    mimeTypes = [ "application/vnd.geogebra.file" "application/vnd.geogebra.tool" ];
   };
 
   meta = with lib; {
diff --git a/pkgs/applications/science/misc/netlogo/default.nix b/pkgs/applications/science/misc/netlogo/default.nix
index b22c6294fba..ed92dfb90da 100644
--- a/pkgs/applications/science/misc/netlogo/default.nix
+++ b/pkgs/applications/science/misc/netlogo/default.nix
@@ -8,7 +8,7 @@ let
     icon = name;
     comment = "A multi-agent programmable modeling environment";
     desktopName = "NetLogo";
-    categories = "Science;";
+    categories = [ "Science" ];
   };
 
 in
diff --git a/pkgs/applications/science/programming/groove/default.nix b/pkgs/applications/science/programming/groove/default.nix
index 86d77072ee8..f4c323defd6 100644
--- a/pkgs/applications/science/programming/groove/default.nix
+++ b/pkgs/applications/science/programming/groove/default.nix
@@ -7,7 +7,7 @@ let
     icon = "groove";
     desktopName = "GROOVE Simulator";
     comment = "GRaphs for Object-Oriented VErification";
-    categories = "Science;ComputerScience;";
+    categories = [ "Science" "ComputerScience" ];
   };
 
 in stdenv.mkDerivation rec {
diff --git a/pkgs/applications/terminal-emulators/mlterm/default.nix b/pkgs/applications/terminal-emulators/mlterm/default.nix
index 4920372411f..d84aa984a33 100644
--- a/pkgs/applications/terminal-emulators/mlterm/default.nix
+++ b/pkgs/applications/terminal-emulators/mlterm/default.nix
@@ -106,10 +106,8 @@ stdenv.mkDerivation rec {
     comment = "Terminal emulator";
     desktopName = "mlterm";
     genericName = "Terminal emulator";
-    categories = lib.concatStringsSep ";" [
-      "Application" "System" "TerminalEmulator"
-    ];
-    startupNotify = "false";
+    categories = [ "Application" "System" "TerminalEmulator" ];
+    startupNotify = false;
   };
 
   meta = with lib; {
diff --git a/pkgs/applications/terminal-emulators/rxvt-unicode/default.nix b/pkgs/applications/terminal-emulators/rxvt-unicode/default.nix
index 0e9402cf495..1ca84149fdd 100644
--- a/pkgs/applications/terminal-emulators/rxvt-unicode/default.nix
+++ b/pkgs/applications/terminal-emulators/rxvt-unicode/default.nix
@@ -21,7 +21,7 @@ let
     comment = description;
     desktopName = "URxvt";
     genericName = pname;
-    categories = "System;TerminalEmulator;";
+    categories = [ "System" "TerminalEmulator" ];
   };
 
   fetchPatchFromAUR = { package, name, rev, sha256 }:
diff --git a/pkgs/applications/terminal-emulators/wayst/default.nix b/pkgs/applications/terminal-emulators/wayst/default.nix
index c6f39effed6..f3751e39881 100644
--- a/pkgs/applications/terminal-emulators/wayst/default.nix
+++ b/pkgs/applications/terminal-emulators/wayst/default.nix
@@ -21,15 +21,12 @@ let
   desktopItem = makeDesktopItem {
     desktopName = "Wayst";
     name = "wayst";
+    genericName = "Terminal";
     exec = "wayst";
     icon = "wayst";
-    terminal = "false";
-    categories = "System;TerminalEmulator";
+    categories = [ "System" "TerminalEmulator" ];
+    keywords = [ "wayst" "terminal" ];
     comment = "A simple terminal emulator";
-    extraEntries = ''
-      GenericName=Terminal
-      Keywords=wayst;terminal;
-    '';
   };
 in
 stdenv.mkDerivation rec {
diff --git a/pkgs/applications/version-management/gitkraken/default.nix b/pkgs/applications/version-management/gitkraken/default.nix
index b5372233c24..55a2f1627b9 100644
--- a/pkgs/applications/version-management/gitkraken/default.nix
+++ b/pkgs/applications/version-management/gitkraken/default.nix
@@ -93,7 +93,7 @@ let
       icon = pname;
       desktopName = "GitKraken";
       genericName = "Git Client";
-      categories = "Development;";
+      categories = [ "Development" ];
       comment = "Graphical Git client from Axosoft";
     }) ];
 
diff --git a/pkgs/applications/version-management/smartgithg/default.nix b/pkgs/applications/version-management/smartgithg/default.nix
index 3c0e540d228..4c147049569 100644
--- a/pkgs/applications/version-management/smartgithg/default.nix
+++ b/pkgs/applications/version-management/smartgithg/default.nix
@@ -65,23 +65,19 @@ stdenv.mkDerivation rec {
     comment = meta.description;
     icon = "smartgit";
     desktopName = "SmartGit";
-    categories = concatStringsSep ";" [
+    categories = [
       "Application"
       "Development"
       "RevisionControl"
     ];
-    mimeType = concatStringsSep ";" [
+    mimeTypes = [
       "x-scheme-handler/git"
       "x-scheme-handler/smartgit"
       "x-scheme-handler/sourcetree"
     ];
-    startupNotify = "true";
-    extraEntries = ''
-      Keywords=git
-      StartupWMClass=${name}
-      Version=1.0
-      Encoding=UTF-8
-    '';
+    startupNotify = true;
+    startupWMClass = name;
+    keywords = [ "git" ];
   };
 
   meta = with lib; {
diff --git a/pkgs/applications/video/clipgrab/default.nix b/pkgs/applications/video/clipgrab/default.nix
index 2bd30c9e529..9a1940cffc7 100644
--- a/pkgs/applications/video/clipgrab/default.nix
+++ b/pkgs/applications/video/clipgrab/default.nix
@@ -40,7 +40,7 @@ mkDerivation rec {
     desktopName = "ClipGrab";
     comment = meta.description;
     genericName = "Web video downloader";
-    categories = "Qt;AudioVideo;Audio;Video";
+    categories = [ "Qt" "AudioVideo" "Audio" "Video" ];
   };
 
   installPhase = ''
diff --git a/pkgs/applications/video/streamlink-twitch-gui/bin.nix b/pkgs/applications/video/streamlink-twitch-gui/bin.nix
index 53e87fbb2b9..911373c58e3 100644
--- a/pkgs/applications/video/streamlink-twitch-gui/bin.nix
+++ b/pkgs/applications/video/streamlink-twitch-gui/bin.nix
@@ -116,7 +116,7 @@ stdenv.mkDerivation rec {
     icon = basename;
     desktopName = "Streamlink Twitch GUI";
     genericName = meta.description;
-    categories = "AudioVideo;Network;";
+    categories = [ "AudioVideo" "Network" ];
   };
 
   meta = with lib; {
diff --git a/pkgs/applications/window-managers/berry/default.nix b/pkgs/applications/window-managers/berry/default.nix
index 23aa8ff8201..e7cc1a477c5 100644
--- a/pkgs/applications/window-managers/berry/default.nix
+++ b/pkgs/applications/window-managers/berry/default.nix
@@ -50,7 +50,7 @@ stdenv.mkDerivation rec {
       comment = meta.description;
       desktopName = "Berry Window Manager";
       genericName = "Berry Window Manager";
-      categories = "Utility;";
+      categories = [ "Utility" ];
     })
   ];
 
diff --git a/pkgs/development/embedded/stm32/stm32cubemx/default.nix b/pkgs/development/embedded/stm32/stm32cubemx/default.nix
index 9652a95ee27..7c0b1802bac 100644
--- a/pkgs/development/embedded/stm32/stm32cubemx/default.nix
+++ b/pkgs/development/embedded/stm32/stm32cubemx/default.nix
@@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
       name = "stm32CubeMX";
       exec = "stm32cubemx";
       desktopName = "STM32CubeMX";
-      categories = "Development;";
+      categories = [ "Development" ];
       comment = "STM32Cube initialization code generator";
       icon = "stm32cubemx";
     })
diff --git a/pkgs/development/pharo/launcher/default.nix b/pkgs/development/pharo/launcher/default.nix
index 23afd44b67d..d8d3bcb2cdd 100644
--- a/pkgs/development/pharo/launcher/default.nix
+++ b/pkgs/development/pharo/launcher/default.nix
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
     comment = "Launcher for Pharo distributions";
     desktopName = "Pharo";
     genericName = "Pharo";
-    categories = "Development;";
+    categories = [ "Development" ];
   };
 
   # because upstream tarball has no top-level directory.
diff --git a/pkgs/development/pharo/wrapper/default.nix b/pkgs/development/pharo/wrapper/default.nix
index 1f089295072..1202b2dce6d 100644
--- a/pkgs/development/pharo/wrapper/default.nix
+++ b/pkgs/development/pharo/wrapper/default.nix
@@ -11,11 +11,9 @@ stdenv.mkDerivation rec {
     genericName = "Pharo Virtual Machine";
     exec = "pharo %F";
     icon = "pharo";
-    terminal = "false";
-    type="Application";
-    startupNotify = "false";
-    categories = "Development;";
-    mimeType = "application/x-pharo-image";
+    startupNotify = false;
+    categories = [ "Development" ];
+    mimeTypes = [ "application/x-pharo-image" ];
   };
   unpackPhase = ''
     cp $src ./pharo-vm.sh
diff --git a/pkgs/development/python-modules/spyder/default.nix b/pkgs/development/python-modules/spyder/default.nix
index 419ac6bbb39..cfeaf08fb33 100644
--- a/pkgs/development/python-modules/spyder/default.nix
+++ b/pkgs/development/python-modules/spyder/default.nix
@@ -37,7 +37,7 @@ buildPythonPackage rec {
     comment = "Scientific Python Development Environment";
     desktopName = "Spyder";
     genericName = "Python IDE";
-    categories = "Development;IDE;";
+    categories = [ "Development" "IDE" ];
   };
 
   postPatch = ''
diff --git a/pkgs/development/tools/alloy/default.nix b/pkgs/development/tools/alloy/default.nix
index 92f7e809512..4ec5b28bdd0 100644
--- a/pkgs/development/tools/alloy/default.nix
+++ b/pkgs/development/tools/alloy/default.nix
@@ -17,7 +17,7 @@ let generic = { version, sha256 }:
       desktopName = "Alloy ${lib.versions.major version}";
       genericName = "Relational modelling tool";
       comment = meta.description;
-      categories = "Development;IDE;Education;";
+      categories = [ "Development" "IDE" "Education" ];
     };
 
     nativeBuildInputs = [ makeWrapper ];
diff --git a/pkgs/development/tools/database/sqldeveloper/default.nix b/pkgs/development/tools/database/sqldeveloper/default.nix
index ef95263185c..da43a4daf7d 100644
--- a/pkgs/development/tools/database/sqldeveloper/default.nix
+++ b/pkgs/development/tools/database/sqldeveloper/default.nix
@@ -10,7 +10,7 @@ let
     desktopName = "Oracle SQL Developer";
     genericName = "Oracle SQL Developer";
     comment = "Oracle's Oracle DB GUI client";
-    categories = "Development;";
+    categories = [ "Development" ];
   };
 in
   stdenv.mkDerivation {
diff --git a/pkgs/development/tools/database/squirrel-sql/default.nix b/pkgs/development/tools/database/squirrel-sql/default.nix
index 0220e2d61f9..e908849a3b3 100644
--- a/pkgs/development/tools/database/squirrel-sql/default.nix
+++ b/pkgs/development/tools/database/squirrel-sql/default.nix
@@ -63,7 +63,7 @@ stdenv.mkDerivation rec {
     comment = meta.description;
     desktopName = "SQuirreL SQL";
     genericName = "SQL Client";
-    categories = "Development;";
+    categories = [ "Development" ];
     icon = "squirrel-sql";
   };
 
diff --git a/pkgs/development/tools/eclipse-mat/default.nix b/pkgs/development/tools/eclipse-mat/default.nix
index 01146542d0c..7408b35fe5a 100644
--- a/pkgs/development/tools/eclipse-mat/default.nix
+++ b/pkgs/development/tools/eclipse-mat/default.nix
@@ -44,7 +44,7 @@ stdenv.mkDerivation rec {
     comment = "Eclipse Memory Analyzer";
     desktopName = "Eclipse MAT";
     genericName = "Java Memory Analyzer";
-    categories = "Development;";
+    categories = [ "Development" ];
   };
 
   unpackPhase = ''
diff --git a/pkgs/development/tools/java/visualvm/default.nix b/pkgs/development/tools/java/visualvm/default.nix
index 7f89961f9f8..ee72bc62efa 100644
--- a/pkgs/development/tools/java/visualvm/default.nix
+++ b/pkgs/development/tools/java/visualvm/default.nix
@@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
       comment = "Java Troubleshooting Tool";
       desktopName = "VisualVM";
       genericName = "Java Troubleshooting Tool";
-      categories = "Development;";
+      categories = [ "Development" ];
   };
 
   nativeBuildInputs = [ makeWrapper ];
diff --git a/pkgs/development/tools/jpexs/default.nix b/pkgs/development/tools/jpexs/default.nix
index 37d1cf7dc2e..8c0d20d328d 100644
--- a/pkgs/development/tools/jpexs/default.nix
+++ b/pkgs/development/tools/jpexs/default.nix
@@ -36,10 +36,8 @@ stdenv.mkDerivation rec {
     desktopName = "JPEXS Free Flash Decompiler";
     genericName = "Flash Decompiler";
     comment = meta.description;
-    categories = "Development;Java;";
-    extraEntries = ''
-      StartupWMClass=com-jpexs-decompiler-flash-gui-Main
-    '';
+    categories = [ "Development" "Java" ];
+    startupWMClass = "com-jpexs-decompiler-flash-gui-Main";
   };
 
   meta = with lib; {
diff --git a/pkgs/development/tools/mars-mips/default.nix b/pkgs/development/tools/mars-mips/default.nix
index 97ffd564c45..fa98ab9da8f 100644
--- a/pkgs/development/tools/mars-mips/default.nix
+++ b/pkgs/development/tools/mars-mips/default.nix
@@ -20,7 +20,7 @@ stdenvNoCC.mkDerivation rec {
       exec = "mars-mips";
       icon = "mars-mips";
       comment = "An IDE for programming in MIPS assembly language";
-      categories = "Development;IDE;";
+      categories = [ "Development" "IDE" ];
     })
   ];
 
diff --git a/pkgs/development/tools/misc/saleae-logic-2/default.nix b/pkgs/development/tools/misc/saleae-logic-2/default.nix
index 4472cae2053..242d76174ce 100644
--- a/pkgs/development/tools/misc/saleae-logic-2/default.nix
+++ b/pkgs/development/tools/misc/saleae-logic-2/default.nix
@@ -13,7 +13,7 @@ let
     comment = "Software for Saleae logic analyzers";
     desktopName = "Saleae Logic";
     genericName = "Logic analyzer";
-    categories = "Development";
+    categories = [ "Development" ];
   };
 in
 appimageTools.wrapType2 {
diff --git a/pkgs/development/tools/misc/saleae-logic/default.nix b/pkgs/development/tools/misc/saleae-logic/default.nix
index 5943b57d808..487445e0fc3 100644
--- a/pkgs/development/tools/misc/saleae-logic/default.nix
+++ b/pkgs/development/tools/misc/saleae-logic/default.nix
@@ -41,7 +41,7 @@ stdenv.mkDerivation rec {
     comment = "Software for Saleae logic analyzers";
     desktopName = "Saleae Logic";
     genericName = "Logic analyzer";
-    categories = "Development";
+    categories = [ "Development" ];
   };
 
   nativeBuildInputs = [ unzip ];
diff --git a/pkgs/development/tools/react-native-debugger/default.nix b/pkgs/development/tools/react-native-debugger/default.nix
index ea842c82089..ee03e043dd8 100644
--- a/pkgs/development/tools/react-native-debugger/default.nix
+++ b/pkgs/development/tools/react-native-debugger/default.nix
@@ -70,7 +70,7 @@ in stdenv.mkDerivation rec {
     exec = "react-native-debugger";
     desktopName = "React Native Debugger";
     genericName = "React Native Debugger";
-    categories = "Development;Debugger;";
+    categories = [ "Development" "Debugger" ];
   };
 
   meta = with lib; {
diff --git a/pkgs/development/tools/scenebuilder/default.nix b/pkgs/development/tools/scenebuilder/default.nix
index 438555998fd..3ae31bbadb9 100644
--- a/pkgs/development/tools/scenebuilder/default.nix
+++ b/pkgs/development/tools/scenebuilder/default.nix
@@ -69,8 +69,8 @@ let
     icon = "scenebuilder";
     comment = "A visual, drag'n'drop, layout tool for designing JavaFX application user interfaces.";
     desktopName = pname;
-    mimeType = "application/java;application/java-vm;application/java-archive";
-    categories = "Development";
+    mimeTypes = [ "application/java" "application/java-vm" "application/java-archive" ];
+    categories = [ "Development" ];
   };
 
 in stdenv.mkDerivation rec {
diff --git a/pkgs/development/tools/scenic-view/default.nix b/pkgs/development/tools/scenic-view/default.nix
index 6dd3e11b609..1322cfc751a 100644
--- a/pkgs/development/tools/scenic-view/default.nix
+++ b/pkgs/development/tools/scenic-view/default.nix
@@ -66,8 +66,8 @@ let
     desktopName = pname;
     exec = pname;
     comment = "JavaFx application to visualize and modify the scenegraph of running JavaFx applications.";
-    mimeType = "application/java;application/java-vm;application/java-archive";
-    categories = "Development";
+    mimeTypes = [ "application/java" "application/java-vm" "application/java-archive" ];
+    categories = [ "Development" ];
   };
 
 in stdenv.mkDerivation rec {
diff --git a/pkgs/development/tools/winpdb/default.nix b/pkgs/development/tools/winpdb/default.nix
index 58fef12cd6e..8f8d03db950 100644
--- a/pkgs/development/tools/winpdb/default.nix
+++ b/pkgs/development/tools/winpdb/default.nix
@@ -19,7 +19,7 @@ python2Packages.buildPythonApplication rec {
     comment = "Platform independend Python debugger";
     desktopName = "Winpdb";
     genericName = "Python Debugger";
-    categories = "Development;Debugger;";
+    categories = [ "Development" "Debugger" ];
   };
 
   # Don't call gnome-terminal with "--disable-factory" flag, which is
diff --git a/pkgs/development/web/postman/default.nix b/pkgs/development/web/postman/default.nix
index a45d06cb4c3..bf1ed98b473 100644
--- a/pkgs/development/web/postman/default.nix
+++ b/pkgs/development/web/postman/default.nix
@@ -25,7 +25,7 @@ stdenv.mkDerivation rec {
     comment = "API Development Environment";
     desktopName = "Postman";
     genericName = "Postman";
-    categories = "Development;";
+    categories = [ "Development" ];
   };
 
   buildInputs = [
diff --git a/pkgs/development/web/protege-distribution/default.nix b/pkgs/development/web/protege-distribution/default.nix
index 3b885e65151..a6ef66d0695 100644
--- a/pkgs/development/web/protege-distribution/default.nix
+++ b/pkgs/development/web/protege-distribution/default.nix
@@ -60,7 +60,7 @@ stdenv.mkDerivation rec {
       desktopName = "Protege Desktop";
       icon = "protege";
       comment = "OWL2 ontology editor";
-      categories = "Development";
+      categories = [ "Development" ];
       exec = "run-protege";
     })
   ];
diff --git a/pkgs/games/90secondportraits/default.nix b/pkgs/games/90secondportraits/default.nix
index 07458cc6446..1cf7829cfcd 100644
--- a/pkgs/games/90secondportraits/default.nix
+++ b/pkgs/games/90secondportraits/default.nix
@@ -16,7 +16,7 @@ let
     comment = "A silly speed painting game";
     desktopName = "90 Second Portraits";
     genericName = "90secondportraits";
-    categories = "Game;";
+    categories = [ "Game" ];
   };
 
 in
diff --git a/pkgs/games/abuse/default.nix b/pkgs/games/abuse/default.nix
index 2e863022a68..1e2d4f82f83 100644
--- a/pkgs/games/abuse/default.nix
+++ b/pkgs/games/abuse/default.nix
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
     icon = "abuse";
     desktopName = "Abuse";
     comment     = "Side-scroller action game that pits you against ruthless alien killers";
-    categories  = "Game;ActionGame;";
+    categories  = [ "Game" "ActionGame" ];
   }) ];
 
   postInstall = ''
diff --git a/pkgs/games/alephone/default.nix b/pkgs/games/alephone/default.nix
index aa76cc17b40..98b21865d7c 100644
--- a/pkgs/games/alephone/default.nix
+++ b/pkgs/games/alephone/default.nix
@@ -72,7 +72,7 @@ in self // {
         name = desktopName;
         exec = pname;
         genericName = pname;
-        categories = "Game;";
+        categories = [ "Game" ];
         comment = meta.description;
         inherit desktopName icon;
       };
diff --git a/pkgs/games/assaultcube/default.nix b/pkgs/games/assaultcube/default.nix
index 640ea81c6c6..1013be2694e 100644
--- a/pkgs/games/assaultcube/default.nix
+++ b/pkgs/games/assaultcube/default.nix
@@ -29,7 +29,7 @@ stdenv.mkDerivation rec {
     desktopName = "AssaultCube";
     comment = "A multiplayer, first-person shooter game, based on the CUBE engine. Fast, arcade gameplay.";
     genericName = "First-person shooter";
-    categories = "Game;ActionGame;Shooter";
+    categories = [ "Game" "ActionGame" "Shooter" ];
     icon = "assaultcube.png";
     exec = pname;
   };
diff --git a/pkgs/games/ballerburg/default.nix b/pkgs/games/ballerburg/default.nix
index 43b274a1282..b15abdbc470 100644
--- a/pkgs/games/ballerburg/default.nix
+++ b/pkgs/games/ballerburg/default.nix
@@ -25,11 +25,10 @@ in stdenv.mkDerivation rec {
     (makeDesktopItem {
       name = "Ballerburg";
       desktopName = "Ballerburg SDL";
-      type = "Application";
       exec = "_NET_WM_ICON=ballerburg ballerburg";
       comment = meta.description;
       icon = "ballerburg";
-      categories = "Game;";
+      categories = [ "Game" ];
     })
   ];
 
diff --git a/pkgs/games/brogue/default.nix b/pkgs/games/brogue/default.nix
index 77811e76e96..d4f1f8faeeb 100644
--- a/pkgs/games/brogue/default.nix
+++ b/pkgs/games/brogue/default.nix
@@ -26,8 +26,7 @@ stdenv.mkDerivation rec {
     comment = "Brave the Dungeons of Doom!";
     icon = "brogue";
     exec = "brogue";
-    categories = "Game;AdventureGame;";
-    terminal = "false";
+    categories = [ "Game" "AdventureGame" ];
   };
 
   installPhase = ''
diff --git a/pkgs/games/clonehero/fhs-wrapper.nix b/pkgs/games/clonehero/fhs-wrapper.nix
index 97758b2c1fa..cd7f3986b10 100644
--- a/pkgs/games/clonehero/fhs-wrapper.nix
+++ b/pkgs/games/clonehero/fhs-wrapper.nix
@@ -13,7 +13,7 @@ let
     comment = clonehero-unwrapped.meta.description;
     exec = name;
     icon = name;
-    categories = "Game;";
+    categories = [ "Game" ];
   };
 in
 buildFHSUserEnv {
diff --git a/pkgs/games/dhewm3/default.nix b/pkgs/games/dhewm3/default.nix
index a87236c48f4..da75f3fd5d1 100644
--- a/pkgs/games/dhewm3/default.nix
+++ b/pkgs/games/dhewm3/default.nix
@@ -29,7 +29,7 @@ stdenv.mkDerivation rec {
       name = "dhewm3";
       exec = "dhewm3";
       desktopName = "Doom 3";
-      categories = "Game;";
+      categories = [ "Game" ];
     })
   ];
 
diff --git a/pkgs/games/domination/default.nix b/pkgs/games/domination/default.nix
index 0dde8ab1641..dd044656534 100644
--- a/pkgs/games/domination/default.nix
+++ b/pkgs/games/domination/default.nix
@@ -11,14 +11,12 @@
 
 let
   desktopItem = makeDesktopItem {
-    type = "Application";
     name = "Domination";
     desktopName = "Domination";
     exec = "domination";
     icon = "domination";
   };
   editorDesktopItem = makeDesktopItem {
-    type = "Application";
     name = "Domination Map Editor";
     desktopName = "Domination Map Editor";
     exec = "domination-map-editor";
diff --git a/pkgs/games/duckmarines/default.nix b/pkgs/games/duckmarines/default.nix
index af34742b9fd..a4e37081ab0 100644
--- a/pkgs/games/duckmarines/default.nix
+++ b/pkgs/games/duckmarines/default.nix
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
     comment = "Duck-themed action puzzle video game";
     desktopName = "Duck Marines";
     genericName = "duckmarines";
-    categories = "Game;";
+    categories = [ "Game" ];
   };
 
   src = fetchurl {
diff --git a/pkgs/games/ecwolf/default.nix b/pkgs/games/ecwolf/default.nix
index 251b51df43a..f8ca3b40f53 100644
--- a/pkgs/games/ecwolf/default.nix
+++ b/pkgs/games/ecwolf/default.nix
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
       exec = "ecwolf";
       comment = "Enhanced Wolfenstein 3D port";
       desktopName = "Wolfenstein 3D";
-      categories = "Game;";
+      categories = [ "Game" ];
     })
   ];
 
diff --git a/pkgs/games/eduke32/default.nix b/pkgs/games/eduke32/default.nix
index c3492234961..4eb46e0ac15 100644
--- a/pkgs/games/eduke32/default.nix
+++ b/pkgs/games/eduke32/default.nix
@@ -11,7 +11,7 @@ let
     comment = "Duke Nukem 3D port";
     desktopName = "Enhanced Duke Nukem 3D";
     genericName = "Duke Nukem 3D port";
-    categories = "Game;";
+    categories = [ "Game" ];
   };
 
   wrapper = "eduke32-wrapper";
diff --git a/pkgs/games/factorio/default.nix b/pkgs/games/factorio/default.nix
index 74702a97339..4cf335a6137 100644
--- a/pkgs/games/factorio/default.nix
+++ b/pkgs/games/factorio/default.nix
@@ -53,8 +53,7 @@ let
     comment = "A game in which you build and maintain factories.";
     exec = "factorio";
     icon = "factorio";
-    type = "Application";
-    categories = "Game";
+    categories = [ "Game" ];
   };
 
   branch = if experimental then "experimental" else "stable";
diff --git a/pkgs/games/fish-fillets-ng/default.nix b/pkgs/games/fish-fillets-ng/default.nix
index 5ddad7fda4c..e610f2427a2 100644
--- a/pkgs/games/fish-fillets-ng/default.nix
+++ b/pkgs/games/fish-fillets-ng/default.nix
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
     icon = "fish-fillets-ng";
     desktopName = "Fish Fillets";
     comment     = "Puzzle game about witty fish saving the world sokoban-style";
-    categories  = "Game;LogicGame;";
+    categories  = [ "Game" "LogicGame" ];
   }) ];
 
   postInstall = ''
diff --git a/pkgs/games/flightgear/default.nix b/pkgs/games/flightgear/default.nix
index 6f4a57587de..af79a6d4b2b 100644
--- a/pkgs/games/flightgear/default.nix
+++ b/pkgs/games/flightgear/default.nix
@@ -49,7 +49,7 @@ stdenv.mkDerivation rec {
     comment = "FlightGear Flight Simulator";
     desktopName = "FlightGear";
     genericName = "Flight simulator";
-    categories = "Game;Simulation";
+    categories = [ "Game" "Simulation" ];
   };
 
   nativeBuildInputs = [ cmake wrapQtAppsHook ];
diff --git a/pkgs/games/freedroid/default.nix b/pkgs/games/freedroid/default.nix
index 266407d17db..38eb60e7e04 100644
--- a/pkgs/games/freedroid/default.nix
+++ b/pkgs/games/freedroid/default.nix
@@ -38,7 +38,7 @@ stdenv.mkDerivation rec {
     icon = pname;
     desktopName = "Freedroid Classic";
     comment     = "A clone of the classic game 'Paradroid' on Commodore 64";
-    categories  = "Game;ArcadeGame;";
+    categories  = [ "Game" "ArcadeGame" ];
   }) ];
 
   meta = with lib; {
diff --git a/pkgs/games/freenukum/default.nix b/pkgs/games/freenukum/default.nix
index ff1e8872233..0d2f833671e 100644
--- a/pkgs/games/freenukum/default.nix
+++ b/pkgs/games/freenukum/default.nix
@@ -16,12 +16,9 @@ let
     name = pname;
     exec = pname;
     icon = pname;
-    terminal = "false";
     comment = description;
-    type = "Application";
-    categories = "Game;ArcadeGame;ActionGame";
+    categories = [ "Game" "ArcadeGame" "ActionGame" ];
     genericName = pname;
-    fileValidation = false;
   };
 
 in
diff --git a/pkgs/games/frogatto/default.nix b/pkgs/games/frogatto/default.nix
index 0b53e3d0bea..f987992858d 100644
--- a/pkgs/games/frogatto/default.nix
+++ b/pkgs/games/frogatto/default.nix
@@ -7,12 +7,12 @@ let
   desktopItem = makeDesktopItem {
     name = "frogatto";
     exec = "frogatto";
-    startupNotify = "true";
+    startupNotify = true;
     icon = "${data}/share/frogatto/modules/frogatto/images/os/frogatto-icon.png";
     comment = description;
     desktopName = "Frogatto";
     genericName = "frogatto";
-    categories = "Game;ArcadeGame;";
+    categories = [ "Game" "ArcadeGame" ];
   };
   version = "unstable-2020-12-04";
 in buildEnv {
diff --git a/pkgs/games/frozen-bubble/default.nix b/pkgs/games/frozen-bubble/default.nix
index f9dd3fd6159..6738f979d00 100644
--- a/pkgs/games/frozen-bubble/default.nix
+++ b/pkgs/games/frozen-bubble/default.nix
@@ -25,7 +25,7 @@ perlPackages.buildPerlModule {
       desktopName = "Frozen Bubble";
       genericName = "Frozen Bubble";
       comment = "Arcade/reflex colour matching game";
-      categories = "Game;";
+      categories = [ "Game" ];
     })
   ];
 
diff --git a/pkgs/games/gnujump/default.nix b/pkgs/games/gnujump/default.nix
index 6f91b103458..1c918395d40 100644
--- a/pkgs/games/gnujump/default.nix
+++ b/pkgs/games/gnujump/default.nix
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
     icon = "gnujump";
     desktopName = "GNUjump";
     comment     = "Jump up the tower to survive";
-    categories  = "Game;ArcadeGame;";
+    categories  = [ "Game" "ArcadeGame" ];
   }) ];
 
   postInstall = ''
diff --git a/pkgs/games/gzdoom/default.nix b/pkgs/games/gzdoom/default.nix
index e38294ff401..a10b370e648 100644
--- a/pkgs/games/gzdoom/default.nix
+++ b/pkgs/games/gzdoom/default.nix
@@ -60,7 +60,7 @@ let
         name = "gzdoom";
         exec = "gzdoom";
         desktopName = "GZDoom";
-        categories = "Game;";
+        categories = [ "Game" ];
       })
     ];
 
diff --git a/pkgs/games/hyperrogue/default.nix b/pkgs/games/hyperrogue/default.nix
index 08427bd2920..0397bb474da 100644
--- a/pkgs/games/hyperrogue/default.nix
+++ b/pkgs/games/hyperrogue/default.nix
@@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
     comment = meta.description;
     icon = "hyperrogue";
     exec = "hyperrogue";
-    categories = "Game;AdventureGame;";
+    categories = [ "Game" "AdventureGame" ];
   };
 
   postInstall = ''
diff --git a/pkgs/games/itch/default.nix b/pkgs/games/itch/default.nix
index a8cfe8f24d7..34a2775c3c8 100644
--- a/pkgs/games/itch/default.nix
+++ b/pkgs/games/itch/default.nix
@@ -24,14 +24,12 @@ stdenvNoCC.mkDerivation rec{
     (makeDesktopItem {
       name = pname;
       exec = pname;
+      tryExec = "itch %U";
       icon = pname;
       desktopName = pname;
-      mimeType = "x-scheme-handler/itchio;x-scheme-handler/itch";
+      mimeTypes = [ "x-scheme-handler/itchio" "x-scheme-handler/itch" ];
       comment = "Install and play itch.io games easily";
-      extraDesktopEntries = {
-        TryExec = "itch %U";
-        Categories = "Game;";
-      };
+      categories = [ "Game" ];
     })
   ];
 
diff --git a/pkgs/games/ivan/default.nix b/pkgs/games/ivan/default.nix
index ce0eeea738a..53e1b3cf00e 100644
--- a/pkgs/games/ivan/default.nix
+++ b/pkgs/games/ivan/default.nix
@@ -32,7 +32,7 @@ stdenv.mkDerivation rec {
     icon = "ivan.png";
     desktopName = "IVAN";
     genericName = pname;
-    categories = "Game;AdventureGame;RolePlaying;";
+    categories = [ "Game" "AdventureGame" "RolePlaying" ];
     comment = meta.description;
   };
 
diff --git a/pkgs/games/lunar-client/default.nix b/pkgs/games/lunar-client/default.nix
index 2dc0e14daf8..dceb9755fa2 100644
--- a/pkgs/games/lunar-client/default.nix
+++ b/pkgs/games/lunar-client/default.nix
@@ -11,7 +11,7 @@ let
     comment = "Minecraft 1.7, 1.8, 1.12, 1.15, and 1.16 Client";
     desktopName = "Lunar Client";
     genericName = "Minecraft Client";
-    categories = "Game;";
+    categories = [ "Game" ];
   };
 
   appimageContents = appimageTools.extract {
diff --git a/pkgs/games/maelstrom/default.nix b/pkgs/games/maelstrom/default.nix
index 5f78e34edac..065784d605e 100644
--- a/pkgs/games/maelstrom/default.nix
+++ b/pkgs/games/maelstrom/default.nix
@@ -26,7 +26,7 @@ stdenv.mkDerivation rec {
       desktopName = "Maelstrom";
       genericName = "Maelstrom";
       comment = "An arcade-style game resembling Asteroids";
-      categories = "Game;";
+      categories = [ "Game" ];
     })
   ];
 
diff --git a/pkgs/games/mari0/default.nix b/pkgs/games/mari0/default.nix
index 55ef9f51d5b..8189c078981 100644
--- a/pkgs/games/mari0/default.nix
+++ b/pkgs/games/mari0/default.nix
@@ -10,7 +10,7 @@ let
     comment = "Crossover between Super Mario Bros. and Portal";
     desktopName = "mari0";
     genericName = "mari0";
-    categories = "Game";
+    categories = [ "Game" ];
   };
 
 in
diff --git a/pkgs/games/mindustry/default.nix b/pkgs/games/mindustry/default.nix
index d28f2b1d1e7..82df3710c57 100644
--- a/pkgs/games/mindustry/default.nix
+++ b/pkgs/games/mindustry/default.nix
@@ -66,7 +66,6 @@ let
   '';
 
   desktopItem = makeDesktopItem {
-    type = "Application";
     name = "Mindustry";
     desktopName = "Mindustry";
     exec = "mindustry";
diff --git a/pkgs/games/minecraft/default.nix b/pkgs/games/minecraft/default.nix
index 254c01fdf1b..08104310faa 100644
--- a/pkgs/games/minecraft/default.nix
+++ b/pkgs/games/minecraft/default.nix
@@ -38,7 +38,7 @@ let
     icon = "minecraft-launcher";
     comment = "Official launcher for Minecraft, a sandbox-building game";
     desktopName = "Minecraft Launcher";
-    categories = "Game;";
+    categories = [ "Game" ];
   };
 
   envLibPath = lib.makeLibraryPath [
diff --git a/pkgs/games/mrrescue/default.nix b/pkgs/games/mrrescue/default.nix
index 2328c20ef91..a873424aa24 100644
--- a/pkgs/games/mrrescue/default.nix
+++ b/pkgs/games/mrrescue/default.nix
@@ -16,7 +16,7 @@ let
     comment = "Arcade-style fire fighting game";
     desktopName = "Mr. Rescue";
     genericName = "mrrescue";
-    categories = "Game;";
+    categories = [ "Game" ];
   };
 
 in
diff --git a/pkgs/games/oh-my-git/default.nix b/pkgs/games/oh-my-git/default.nix
index 881935279fe..57fbad34057 100644
--- a/pkgs/games/oh-my-git/default.nix
+++ b/pkgs/games/oh-my-git/default.nix
@@ -66,7 +66,7 @@ stdenv.mkDerivation rec {
       desktopName = "oh-my-git";
       comment = "An interactive Git learning game!";
       genericName = "An interactive Git learning game!";
-      categories = "Game;";
+      categories = [ "Game" ];
     })
   ];
 
diff --git a/pkgs/games/openjk/default.nix b/pkgs/games/openjk/default.nix
index c16b38fc8f1..d2844809eea 100644
--- a/pkgs/games/openjk/default.nix
+++ b/pkgs/games/openjk/default.nix
@@ -8,7 +8,7 @@ let
     comment = "Open Source Jedi Academy game released by Raven Software";
     desktopName = "Jedi Academy (Multi Player)";
     genericName = "Jedi Academy";
-    categories = "Game;";
+    categories = [ "Game" ];
   };
   jasp = makeDesktopItem rec {
     name = "jasp";
@@ -17,7 +17,7 @@ let
     comment = "Open Source Jedi Academy game released by Raven Software";
     desktopName = "Jedi Academy (Single Player)";
     genericName = "Jedi Academy";
-    categories = "Game;";
+    categories = [ "Game" ];
   };
 in stdenv.mkDerivation {
   pname = "OpenJK";
diff --git a/pkgs/games/opensupaplex/default.nix b/pkgs/games/opensupaplex/default.nix
index 44fc219bef9..d3f8155f546 100644
--- a/pkgs/games/opensupaplex/default.nix
+++ b/pkgs/games/opensupaplex/default.nix
@@ -74,7 +74,7 @@ stdenv.mkDerivation rec {
     icon = "open-supaplex";
     desktopName = "OpenSupaplex";
     comment = meta.description;
-    categories = "Application;Game;";
+    categories = [ "Application" "Game" ];
   })];
 
   meta = with lib; {
diff --git a/pkgs/games/orthorobot/default.nix b/pkgs/games/orthorobot/default.nix
index c168af81ad6..34808438da7 100644
--- a/pkgs/games/orthorobot/default.nix
+++ b/pkgs/games/orthorobot/default.nix
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
     comment = "Robot game";
     desktopName = "Orthorobot";
     genericName = "orthorobot";
-    categories = "Game;";
+    categories = [ "Game" ];
   };
 
   nativeBuildInputs = [ makeWrapper ];
diff --git a/pkgs/games/osu-lazer/default.nix b/pkgs/games/osu-lazer/default.nix
index 5ddbabe042e..2b1a2f044fa 100644
--- a/pkgs/games/osu-lazer/default.nix
+++ b/pkgs/games/osu-lazer/default.nix
@@ -63,7 +63,7 @@ buildDotnetModule rec {
     icon = "osu!";
     comment = meta.description;
     type = "Application";
-    categories = "Game;";
+    categories = [ "Game" ];
   })];
 
   meta = with lib; {
diff --git a/pkgs/games/quakespasm/default.nix b/pkgs/games/quakespasm/default.nix
index ec5ae3e7d15..137b86f57b6 100644
--- a/pkgs/games/quakespasm/default.nix
+++ b/pkgs/games/quakespasm/default.nix
@@ -76,7 +76,7 @@ stdenv.mkDerivation rec {
       name = "quakespasm";
       exec = "quake";
       desktopName = "Quakespasm";
-      categories = "Game;";
+      categories = [ "Game" ];
     })
   ];
 
diff --git a/pkgs/games/rocksndiamonds/default.nix b/pkgs/games/rocksndiamonds/default.nix
index fd570e4d7c6..b01d616452b 100644
--- a/pkgs/games/rocksndiamonds/default.nix
+++ b/pkgs/games/rocksndiamonds/default.nix
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
     comment = meta.description;
     desktopName = "Rocks'n'Diamonds";
     genericName = "Tile-based puzzle";
-    categories = "Game;LogicGame;";
+    categories = [ "Game" "LogicGame" ];
   };
 
   buildInputs = [ SDL2 SDL2_image SDL2_mixer SDL2_net ];
diff --git a/pkgs/games/rott/default.nix b/pkgs/games/rott/default.nix
index cac357faf2e..b3a517dab02 100644
--- a/pkgs/games/rott/default.nix
+++ b/pkgs/games/rott/default.nix
@@ -40,7 +40,7 @@ stdenv.mkDerivation rec {
       name = "rott";
       exec = "launch-rott";
       desktopName = "Rise of the Triad: ${if buildShareware then "The HUNT Begins" else "Dark War"}";
-      categories = "Game;";
+      categories = [ "Game" ];
     })
   ];
 
diff --git a/pkgs/games/runelite/default.nix b/pkgs/games/runelite/default.nix
index 9a2ce6314cd..d342d543e2f 100644
--- a/pkgs/games/runelite/default.nix
+++ b/pkgs/games/runelite/default.nix
@@ -31,10 +31,9 @@ stdenv.mkDerivation rec {
     exec = "runelite";
     icon = icon;
     comment = "Open source Old School RuneScape client";
-    terminal = "false";
     desktopName = "RuneLite";
     genericName = "Oldschool Runescape";
-    categories = "Game";
+    categories = [ "Game" ];
   };
 
   nativeBuildInputs = [ makeWrapper unzip ];
diff --git a/pkgs/games/sauerbraten/default.nix b/pkgs/games/sauerbraten/default.nix
index 7373779c9e5..1d2e39d4164 100644
--- a/pkgs/games/sauerbraten/default.nix
+++ b/pkgs/games/sauerbraten/default.nix
@@ -42,7 +42,7 @@ stdenv.mkDerivation rec {
       icon = "sauerbraten";
       desktopName = "Sauerbraten";
       comment = "FPS that uses an improved version of the Cube engine";
-      categories = "Application;Game;ActionGame;";
+      categories = [ "Application" "Game" "ActionGame" ];
     })
   ];
 
diff --git a/pkgs/games/scid-vs-pc/default.nix b/pkgs/games/scid-vs-pc/default.nix
index e6fb00eb76c..4711ffa2f54 100644
--- a/pkgs/games/scid-vs-pc/default.nix
+++ b/pkgs/games/scid-vs-pc/default.nix
@@ -68,7 +68,7 @@ tcl.mkTclDerivation rec {
     comment = meta.description;
     icon = "scid";
     exec = "scid";
-    categories = "Game;BoardGame;";
+    categories = [ "Game" "BoardGame" ];
   };
 
   meta = with lib; {
diff --git a/pkgs/games/scummvm/games.nix b/pkgs/games/scummvm/games.nix
index 2ffd176ccf6..b146bf1bc49 100644
--- a/pkgs/games/scummvm/games.nix
+++ b/pkgs/games/scummvm/games.nix
@@ -3,7 +3,7 @@
 
 let
   desktopItem = name: short: long: description: makeDesktopItem {
-    categories  = "Game;AdventureGame;";
+    categories  = [ "Game" "AdventureGame" ];
     comment     = description;
     desktopName = long;
     exec        = "@out@/bin/${short}";
diff --git a/pkgs/games/sdlpop/default.nix b/pkgs/games/sdlpop/default.nix
index f9b91e3dc15..f9f2f6d0dc9 100644
--- a/pkgs/games/sdlpop/default.nix
+++ b/pkgs/games/sdlpop/default.nix
@@ -57,7 +57,7 @@ stdenv.mkDerivation rec {
     exec = "prince";
     desktopName = "SDLPoP";
     comment = "An open-source port of Prince of Persia";
-    categories = "Game;AdventureGame;";
+    categories = [ "Game" "AdventureGame" ];
   }) ];
 
   meta = with lib; {
diff --git a/pkgs/games/sienna/default.nix b/pkgs/games/sienna/default.nix
index 59f01f6a2c4..37138f152b6 100644
--- a/pkgs/games/sienna/default.nix
+++ b/pkgs/games/sienna/default.nix
@@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
     comment = "Fast-paced one button platformer";
     desktopName = "Sienna";
     genericName = "sienna";
-    categories = "Game;";
+    categories = [ "Game" ];
   };
 
   nativeBuildInputs = [ makeWrapper ];
diff --git a/pkgs/games/starsector/default.nix b/pkgs/games/starsector/default.nix
index 4aac0afb22b..95fb3988f28 100644
--- a/pkgs/games/starsector/default.nix
+++ b/pkgs/games/starsector/default.nix
@@ -38,7 +38,7 @@ stdenv.mkDerivation rec {
       comment = meta.description;
       genericName = "starsector";
       desktopName = "Starsector";
-      categories = "Game;";
+      categories = [ "Game" ];
     })
   ];
 
diff --git a/pkgs/games/system-syzygy/default.nix b/pkgs/games/system-syzygy/default.nix
index f01f93572ba..67bb6b71661 100644
--- a/pkgs/games/system-syzygy/default.nix
+++ b/pkgs/games/system-syzygy/default.nix
@@ -6,7 +6,7 @@ let
     exec = "@out@/bin/syzygy";
     comment = "A puzzle game";
     desktopName = "System Syzygy";
-    categories = "Game;";
+    categories = [ "Game" ];
   };
 in
 rustPlatform.buildRustPackage rec {
diff --git a/pkgs/games/tome2/default.nix b/pkgs/games/tome2/default.nix
index d40717c9a38..3440e183515 100644
--- a/pkgs/games/tome2/default.nix
+++ b/pkgs/games/tome2/default.nix
@@ -9,12 +9,10 @@ let
     name = pname;
     exec = "${pname}-x11";
     icon = pname;
-    terminal = "false";
     comment = description;
     type = "Application";
-    categories = "Game;RolePlaying;";
+    categories = [ "Game" "RolePlaying" ];
     genericName = pname;
-    fileValidation = false;
   };
 
 in stdenv.mkDerivation {
diff --git a/pkgs/games/tome4/default.nix b/pkgs/games/tome4/default.nix
index 581220c339c..70fbebe084c 100644
--- a/pkgs/games/tome4/default.nix
+++ b/pkgs/games/tome4/default.nix
@@ -15,10 +15,9 @@ stdenv.mkDerivation rec {
     name = pname;
     exec = "@out@/bin/${pname}";
     icon = pname;
-    terminal = "false";
     comment = "An open-source, single-player, role-playing roguelike game set in the world of Eyal.";
     type = "Application";
-    categories = "Game;RolePlaying;";
+    categories = [ "Game" "RolePlaying" ];
     genericName = pname;
   };
 
diff --git a/pkgs/games/unciv/default.nix b/pkgs/games/unciv/default.nix
index b6085fdce39..d58c9aee0de 100644
--- a/pkgs/games/unciv/default.nix
+++ b/pkgs/games/unciv/default.nix
@@ -14,7 +14,7 @@ let
     exec = "unciv";
     comment = "An open-source Android/Desktop remake of Civ V";
     desktopName = "Unciv";
-    categories = "Game;";
+    categories = [ "Game" ];
   };
 
   envLibPath = lib.makeLibraryPath [
diff --git a/pkgs/games/unvanquished/default.nix b/pkgs/games/unvanquished/default.nix
index f3f8c1413db..191d8c21807 100644
--- a/pkgs/games/unvanquished/default.nix
+++ b/pkgs/games/unvanquished/default.nix
@@ -135,25 +135,17 @@ in stdenv.mkDerivation rec {
       desktopName = "Unvanquished";
       comment = "FPS/RTS Game - Aliens vs. Humans";
       icon = "unvanquished";
-      terminal = false;
       exec = "unvanquished";
-      categories = "Game;ActionGame;StrategyGame;";
-      # May or may not work
+      categories = [ "Game" "ActionGame" "StrategyGame" ];
       prefersNonDefaultGPU = true;
-      fileValidation = false; # it doesn't like PrefersNonDefaultGPU
-      # yes, PrefersNonDefaultGPU is standard:
-      # https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html
     })
     (makeDesktopItem {
       name = "net.unvanquished.UnvanquishedProtocolHandler.desktop";
       desktopName = "Unvanquished (protocol handler)";
       noDisplay = true;
-      terminal = false;
       exec = "unvanquished -connect %u";
-      mimeType = "x-scheme-handler/unv";
-      # May or may not work
+      mimeTypes = [ "x-scheme-handler/unv" ];
       prefersNonDefaultGPU = true;
-      fileValidation = false; # it doesn't like PrefersNonDefaultGPU
     })
   ];
 
diff --git a/pkgs/games/ut2004/wrapper.nix b/pkgs/games/ut2004/wrapper.nix
index 0f70a07ca8f..bf344372933 100644
--- a/pkgs/games/ut2004/wrapper.nix
+++ b/pkgs/games/ut2004/wrapper.nix
@@ -27,7 +27,7 @@ let
     desktopName = "Unreal Tournament 2004";
     comment = "A first-person shooter video game developed by Epic Games and Digital Extreme";
     genericName = "First-person shooter";
-    categories = "Game;";
+    categories = [ "Game" ];
     exec = "ut2004";
   };
 
diff --git a/pkgs/games/vintagestory/default.nix b/pkgs/games/vintagestory/default.nix
index 8c2e8573177..a14e80759b5 100644
--- a/pkgs/games/vintagestory/default.nix
+++ b/pkgs/games/vintagestory/default.nix
@@ -47,8 +47,7 @@ stdenv.mkDerivation rec {
     exec = "vintagestory";
     icon = "vintagestory";
     comment = "Innovate and explore in a sandbox world";
-    type = "Application";
-    categories = "Game;";
+    categories = [ "Game" ];
   };
 
   installPhase = ''
diff --git a/pkgs/games/worldofgoo/default.nix b/pkgs/games/worldofgoo/default.nix
index fee4699aec9..00a8af6d8b7 100644
--- a/pkgs/games/worldofgoo/default.nix
+++ b/pkgs/games/worldofgoo/default.nix
@@ -8,11 +8,10 @@ let
   desktopItem = makeDesktopItem {
     desktopName = "World of Goo";
     genericName = "World of Goo";
-    categories = "Game;";
+    categories = [ "Game" ];
     exec = "WorldOfGoo.bin.${arch}";
     icon = "2dboy-worldofgoo";
     name = "worldofgoo";
-    type = "Application";
   };
 
 in
diff --git a/pkgs/games/xbill/default.nix b/pkgs/games/xbill/default.nix
index a20b52e7854..765af44936a 100644
--- a/pkgs/games/xbill/default.nix
+++ b/pkgs/games/xbill/default.nix
@@ -25,7 +25,7 @@ stdenv.mkDerivation rec {
     icon = "xbill";
     desktopName = "XBill";
     comment     = "Get rid of those Wingdows viruses!";
-    categories  = "Game;ArcadeGame;";
+    categories  = [ "Game" "ArcadeGame" ];
   }) ];
 
   postInstall = ''
diff --git a/pkgs/games/xonotic/default.nix b/pkgs/games/xonotic/default.nix
index d5374c5446d..46b0b594d72 100644
--- a/pkgs/games/xonotic/default.nix
+++ b/pkgs/games/xonotic/default.nix
@@ -50,9 +50,9 @@ let
     exec = "xonotic";
     comment = meta.description;
     desktopName = "Xonotic";
-    categories = "Game;Shooter;";
+    categories = [ "Game" "Shooter" ];
     icon = "xonotic";
-    startupNotify = "false";
+    startupNotify = false;
   };
 
   xonotic-unwrapped = stdenv.mkDerivation rec {
diff --git a/pkgs/servers/pulseaudio/qpaeq.nix b/pkgs/servers/pulseaudio/qpaeq.nix
index 1f50022a918..3761453f446 100644
--- a/pkgs/servers/pulseaudio/qpaeq.nix
+++ b/pkgs/servers/pulseaudio/qpaeq.nix
@@ -13,8 +13,8 @@ let
     icon = "audio-volume-high";
     desktopName = "qpaeq";
     genericName = "Audio equalizer";
-    categories = "AudioVideo;Audio;Mixer;";
-    startupNotify = "false";
+    categories = [ "AudioVideo" "Audio" "Mixer" ];
+    startupNotify = false;
   };
 in
 mkDerivation rec {
diff --git a/pkgs/tools/X11/opentabletdriver/default.nix b/pkgs/tools/X11/opentabletdriver/default.nix
index 7cfec7aaffc..87fc049a6d5 100644
--- a/pkgs/tools/X11/opentabletdriver/default.nix
+++ b/pkgs/tools/X11/opentabletdriver/default.nix
@@ -100,8 +100,7 @@ buildDotnetModule rec {
       exec = "otd-gui";
       icon = "otd";
       comment = meta.description;
-      type = "Application";
-      categories = "Utility;";
+      categories = [ "Utility" ];
     })
   ];
 
diff --git a/pkgs/tools/admin/winbox/default.nix b/pkgs/tools/admin/winbox/default.nix
index 64b58ee9093..38e76064b18 100644
--- a/pkgs/tools/admin/winbox/default.nix
+++ b/pkgs/tools/admin/winbox/default.nix
@@ -45,11 +45,8 @@ let
     comment = "GUI administration for Mikrotik RouterOS";
     exec = pname;
     icon = pname;
-    type = "Application";
-    categories = "Utility";
-    extraDesktopEntries = {
-      StartupWMClass = last (splitString "/" executable);
-    };
+    categories = [ "Utility" ];
+    startupWMClass = last (splitString "/" executable);
   };
 
   # The icon is also from the winbox AUR package (see above).
diff --git a/pkgs/tools/games/jpsxdec/default.nix b/pkgs/tools/games/jpsxdec/default.nix
index 2c18f29bbf3..54d3e2a968c 100644
--- a/pkgs/tools/games/jpsxdec/default.nix
+++ b/pkgs/tools/games/jpsxdec/default.nix
@@ -24,7 +24,7 @@ let
     icon = pname;
     comment = description;
     desktopName = "jPSXdec";
-    categories = "AudioVideo;Utility;";
+    categories = [ "AudioVideo" "Utility" ];
   };
 in
 stdenv.mkDerivation rec {
diff --git a/pkgs/tools/graphics/agi/default.nix b/pkgs/tools/graphics/agi/default.nix
index 0365a807327..aefa2c3f789 100644
--- a/pkgs/tools/graphics/agi/default.nix
+++ b/pkgs/tools/graphics/agi/default.nix
@@ -54,9 +54,7 @@ stdenv.mkDerivation rec {
     desktopName = "Android GPU Inspector";
     exec = "$out/bin/agi";
     icon = "agi";
-    type = "Application";
-    categories = "Development;Debugger;Graphics;3DGraphics";
-    terminal = "false";
+    categories = [ "Development" "Debugger" "Graphics" "3DGraphics" ];
   })];
 
   meta = with lib; {
diff --git a/pkgs/tools/graphics/snapdragon-profiler/default.nix b/pkgs/tools/graphics/snapdragon-profiler/default.nix
index 02a96184812..298975ef18b 100644
--- a/pkgs/tools/graphics/snapdragon-profiler/default.nix
+++ b/pkgs/tools/graphics/snapdragon-profiler/default.nix
@@ -72,10 +72,8 @@ stdenv.mkDerivation rec {
     desktopName = "Snapdragon Profiler";
     exec = "$out/bin/snapdragon-profiler";
     icon = "snapdragon-profiler";
-    type = "Application";
     comment = meta.description;
-    categories = "Development;Debugger;Graphics;3DGraphics";
-    terminal = "false";
+    categories = [ "Development" "Debugger" "Graphics" "3DGraphics" ];
   })];
 
   dontStrip = true; # Always needed on Mono
diff --git a/pkgs/tools/graphics/xcolor/default.nix b/pkgs/tools/graphics/xcolor/default.nix
index 707e9a95a12..1ef2c807bde 100644
--- a/pkgs/tools/graphics/xcolor/default.nix
+++ b/pkgs/tools/graphics/xcolor/default.nix
@@ -25,7 +25,7 @@ rustPlatform.buildRustPackage rec {
       desktopName = "XColor";
       comment = "Select colors visible anywhere on the screen to get their RGB representation";
       icon = "xcolor";
-      categories = "Graphics;";
+      categories = [ "Graphics" ];
     })
   ];
 
diff --git a/pkgs/tools/misc/hakuneko/default.nix b/pkgs/tools/misc/hakuneko/default.nix
index 0a1d070d77e..eb6101f6498 100644
--- a/pkgs/tools/misc/hakuneko/default.nix
+++ b/pkgs/tools/misc/hakuneko/default.nix
@@ -13,11 +13,10 @@ let
   desktopItem = makeDesktopItem {
     desktopName = "HakuNeko Desktop";
     genericName = "Manga & Anime Downloader";
-    categories = "Network;FileTransfer;";
+    categories = [ "Network" "FileTransfer" ];
     exec = "hakuneko";
     icon = "hakuneko-desktop";
     name = "hakuneko-desktop";
-    type = "Application";
   };
 in
 stdenv.mkDerivation rec {
diff --git a/pkgs/tools/misc/hdfview/default.nix b/pkgs/tools/misc/hdfview/default.nix
index b33fee8e0b5..6030913a228 100644
--- a/pkgs/tools/misc/hdfview/default.nix
+++ b/pkgs/tools/misc/hdfview/default.nix
@@ -32,7 +32,7 @@ stdenv.mkDerivation rec {
     exec = name;
     icon = name;
     comment = meta.description;
-    categories = "Science;DataVisualization;";
+    categories = [ "Science" "DataVisualization" ];
   };
 
   installPhase = ''
diff --git a/pkgs/tools/misc/jdiskreport/default.nix b/pkgs/tools/misc/jdiskreport/default.nix
index 22b16c7f9b3..cfdc8cba5df 100644
--- a/pkgs/tools/misc/jdiskreport/default.nix
+++ b/pkgs/tools/misc/jdiskreport/default.nix
@@ -4,10 +4,9 @@ let
   desktopItem = makeDesktopItem {
     desktopName = "JDiskReport";
     genericName = "A graphical utility to visualize disk usage";
-    categories = "Utility;";
+    categories = [ "Utility" ];
     exec = "jdiskreport";
     name = "jdiskreport";
-    type = "Application";
   };
 in
 stdenv.mkDerivation rec {
diff --git a/pkgs/tools/misc/sharedown/default.nix b/pkgs/tools/misc/sharedown/default.nix
index 048e8eb6008..78c86aeff74 100644
--- a/pkgs/tools/misc/sharedown/default.nix
+++ b/pkgs/tools/misc/sharedown/default.nix
@@ -38,7 +38,7 @@ stdenvNoCC.mkDerivation rec {
       icon = "Sharedown";
       comment = "An Application to save your Sharepoint videos for offline usage.";
       desktopName = "Sharedown";
-      categories = "Network;Archiving";
+      categories = [ "Network" "Archiving" ];
     })
   ];
 
diff --git a/pkgs/tools/security/bitwarden/default.nix b/pkgs/tools/security/bitwarden/default.nix
index 40552d14904..ad757425761 100644
--- a/pkgs/tools/security/bitwarden/default.nix
+++ b/pkgs/tools/security/bitwarden/default.nix
@@ -27,7 +27,7 @@ stdenv.mkDerivation rec {
     icon = "bitwarden";
     comment = "A secure and free password manager for all of your devices";
     desktopName = "Bitwarden";
-    categories = "Utility";
+    categories = [ "Utility" ];
   };
 
   dontBuild = true;
diff --git a/pkgs/tools/security/ghidra/build.nix b/pkgs/tools/security/ghidra/build.nix
index 831ec3b6133..bb53a1958e0 100644
--- a/pkgs/tools/security/ghidra/build.nix
+++ b/pkgs/tools/security/ghidra/build.nix
@@ -34,7 +34,7 @@ let
     icon = "ghidra";
     desktopName = "Ghidra";
     genericName = "Ghidra Software Reverse Engineering Suite";
-    categories = "Development;";
+    categories = [ "Development" ];
   };
 
   # postPatch scripts.
diff --git a/pkgs/tools/security/ghidra/default.nix b/pkgs/tools/security/ghidra/default.nix
index e57f60637e2..d65d7abc4de 100644
--- a/pkgs/tools/security/ghidra/default.nix
+++ b/pkgs/tools/security/ghidra/default.nix
@@ -19,7 +19,7 @@ let
     icon = "ghidra";
     desktopName = "Ghidra";
     genericName = "Ghidra Software Reverse Engineering Suite";
-    categories = "Development;";
+    categories = [ "Development" ];
   };
 
 in stdenv.mkDerivation rec {
diff --git a/pkgs/tools/security/jd-gui/default.nix b/pkgs/tools/security/jd-gui/default.nix
index 046abed36f0..4e7a6237404 100644
--- a/pkgs/tools/security/jd-gui/default.nix
+++ b/pkgs/tools/security/jd-gui/default.nix
@@ -62,9 +62,9 @@ let
     comment = "Java Decompiler JD-GUI";
     desktopName = "JD-GUI";
     genericName = "Java Decompiler";
-    mimeType = "application/java;application/java-vm;application/java-archive";
-    categories = "Development;Debugger;";
-    extraEntries="StartupWMClass=org-jd-gui-App";
+    mimeTypes = [ "application/java" "application/java-vm" "application/java-archive" ];
+    categories = [ "Development" "Debugger" ];
+    startupWMClass = "org-jd-gui-App";
   };
 
 in stdenv.mkDerivation rec {
diff --git a/pkgs/tools/security/open-ecard/default.nix b/pkgs/tools/security/open-ecard/default.nix
index 470e5f6530f..e7e21aec7c8 100644
--- a/pkgs/tools/security/open-ecard/default.nix
+++ b/pkgs/tools/security/open-ecard/default.nix
@@ -33,7 +33,7 @@ in stdenv.mkDerivation rec {
     comment = "Client side implementation of the eCard-API-Framework";
     icon = "oec_logo_bg-transparent.svg";
     exec = pname;
-    categories = "Utility;Security;";
+    categories = [ "Utility" "Security" ];
   };
 
   installPhase = ''
diff --git a/pkgs/tools/text/dirdiff/default.nix b/pkgs/tools/text/dirdiff/default.nix
index e0385d33245..3577242fc0e 100644
--- a/pkgs/tools/text/dirdiff/default.nix
+++ b/pkgs/tools/text/dirdiff/default.nix
@@ -41,7 +41,7 @@ stdenv.mkDerivation rec {
       desktopName = "Dirdiff";
       genericName = "Directory Diff Viewer";
       comment = "Diff and merge directory trees";
-      categories = "Development;";
+      categories = [ "Development" ];
     })
   ];
 
diff --git a/pkgs/tools/text/hottext/default.nix b/pkgs/tools/text/hottext/default.nix
index 5472c8a36cf..f6c70013b4c 100644
--- a/pkgs/tools/text/hottext/default.nix
+++ b/pkgs/tools/text/hottext/default.nix
@@ -19,7 +19,7 @@ nimPackages.buildNimPackage rec {
   HOTTEXT_FONT_PATH = "${gentium}/share/fonts/truetype/GentiumPlus-Regular.ttf";
 
   desktopItem = makeDesktopItem {
-    categories = "Utility;";
+    categories = [ "Utility" ];
     comment = meta.description;
     desktopName = pname;
     exec = pname;
diff --git a/pkgs/tools/text/xml/basex/default.nix b/pkgs/tools/text/xml/basex/default.nix
index 92fde60c23c..4d6d23054da 100644
--- a/pkgs/tools/text/xml/basex/default.nix
+++ b/pkgs/tools/text/xml/basex/default.nix
@@ -19,8 +19,8 @@ stdenv.mkDerivation rec {
     comment = "Visually query and analyse your XML data";
     desktopName = "BaseX XML Database";
     genericName = "XML database tool";
-    categories = "Development;Utility;Database";
-    mimeType = "text/xml";
+    categories = [ "Development" "Utility" "Database" ];
+    mimeTypes = [ "text/xml" ];
   });
 
   dontBuild = true;