aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/list-desktop-files
blob: 91bb2cf9af9931126ac9bb00ae97c5457339eb35 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/usr/bin/env -S scsh -e main -s
;; -*- mode: scheme; -*-
!#

;; https://cookbook.scheme.org/split-string/
(define (string-split char-delimiter? string)
  (define (maybe-add a b parts)
    (if (= a b) parts (cons (substring string a b) parts)))
  (let ((n (string-length string)))
    (let loop ((a 0) (b 0) (parts '()))
      (if (< b n)
          (if (not (char-delimiter? (string-ref string b)))
              (loop a (+ b 1) parts)
              (loop (+ b 1) (+ b 1) (maybe-add a b parts)))
          (reverse (maybe-add a b parts))))))

(define (char-space? char)
  (char=? char #\space))

(define (read-application file)
  (let* ((output (string-trim-right
                 (run/string (| (grep -EHi "^name=" ,file)
                                (head -n 1)
                                (sed "s/:name=/ /i")))))
         (strings (string-split char-space? output)))
    (cons (car strings) (string-join (cdr strings) " "))))

(define (main args)
  (let* ((files (run/strings (find /usr/share/applications
                                   ,(string-append (getenv "HOME") "/.local/share/applications")
                                   ,(string-append (getenv "HOME") "/.local/share/flatpak/exports/share/applications")
                                   -type "f,l"
                                   -name "*.desktop")))
         (applications (map read-application files)))
    (for-each (lambda (pair)
                (format #t "~a\t~a~%" (cdr pair) (file-name-nondirectory (car pair))))
              applications)))