Hello, Pierre Neidhardt <[email protected]> writes:
> Quite a bunch of packages need to provide their own .desktop since > upstream does not provide them. It's very evident in games.scm in > particular. Interestingly, I had the same itch recently. > It seems to be a good opportunity to factor this out. What about the > following? > > --8<---------------cut here---------------start------------->8--- > (define* (make-desktop-file destination #:key > (encoding "UTF-8") > name > (generic-name name) > comment > exec > icon > (startup-notify "true") > (terminal "false") > (type "Application") > (categories "Application")) > "Create a desktop file at DESTINATION for executable EXEC with name NAME. > Other arguments are optional." > (let ((maybe-print (lambda (key value) > (if value > (string-append key "=" value "\n") > "")))) > (mkdir-p (dirname destination)) > (with-output-to-file destination > (lambda _ > (display > (string-append > "[Desktop Entry]" "\n" > "Encoding=" encoding "\n" > "Name=" name "\n" > "GenericName=" generic-name "\n" > (maybe-print "Comment" comment) > "Exec=" exec "\n" > (maybe-print "Icon" icon) > "StartupNotify=" startup-notify "\n" > "Terminal=" terminal "\n" > "Type=" type "\n" > "Categories=" categories "\n")))))) > --8<---------------cut here---------------end--------------->8--- It looks interesting. I have a couple of suggestions, if you don't mind: - some items are missing, e.g., "Keywords". As you may know, you can have a look at <https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry- spec-latest.html> for a full list. - some items you use a list of strings instead of a string (e.g., "Keywords", "Categories"), - it would be nice to handle localized values for keys. For example `drascula' package uses "Comment[fr]". It could possibly be implemented with an alist as the value. I know Nix provides such a function, but I haven't looked at its implementation yet. Regards, -- Nicolas Goaziou
