dotfiles

A steaming hot pile of sh...ell scripts and configuration files.
git clone https://kaka.farm/~git/dotfiles
Log | Files | Refs

kakafarm-utils.el (8856B)


      1 ;;; -*- lexical-binding:t -*-
      2 
      3 (defun kakafarm/call-process-with-string-as-input (program &optional input-string &rest args)
      4   (with-temp-buffer
      5     (let ((our-output-buffer (current-buffer)))
      6       (if input-string
      7           (with-temp-buffer
      8             (let ((our-input-buffer (current-buffer)))
      9               (progn
     10                 (erase-buffer)
     11                 (insert input-string)
     12                 (apply 'call-process-region
     13                        (buffer-end -1)
     14                        (buffer-end 1)
     15                        program
     16                        nil
     17                        our-output-buffer
     18                        nil
     19                        args))))
     20         (apply 'call-process
     21                program
     22                nil
     23                our-output-buffer
     24                nil
     25                args)))
     26     (buffer-string)))
     27 
     28 (list (kakafarm/call-process-with-string-as-input "cat"
     29                                                   "cat says moo")
     30       (kakafarm/call-process-with-string-as-input "echo"
     31                                                   nil
     32                                                   "-n"
     33                                                   "echo echo echo"))
     34 
     35 ;; Uploading README.html from README.org stuff.
     36 (defun kakafarm/srht-repo-id (repository-name)
     37   "Returns the unique numerical I Dentification associated with
     38 every sourcehut repository.
     39 
     40 https://www.tomsdiner.org/blog/post_0003_sourcehut_readme_org_export.html"
     41 
     42   (interactive "sRepo name: ")
     43   (let* ((srht (netrc-machine (netrc-parse "~/.netrc.gpg")
     44                               "repo.git.sr.ht"))
     45          (srht-token (netrc-get srht
     46                                 "password"))
     47          (our-response (with-temp-buffer
     48                          (call-process "curl"
     49                                        nil
     50                                        (list (current-buffer) nil)
     51                                        nil
     52                                        "--oauth2-bearer" srht-token
     53                                        "-G"
     54                                        "--data-urlencode"
     55                                        (concat "query=query { me { repository(name: \""
     56                                                repository-name
     57                                                "\") { id } } }")
     58                                        "https://git.sr.ht/query")
     59                          (buffer-string)))
     60          (repository-id (string-trim (kakafarm/call-process-with-string-as-input "jq"
     61                                                                                  our-response
     62                                                                                  ".data.me.repository.id"))))
     63     (if (called-interactively-p)
     64         (message "Repository ID: %S" repository-id)
     65       repository-id)))
     66 
     67 (defun kakafarm/srht-set-readme (repository-id)
     68   "Export the current file to HTML and set the result as README for
     69 the sourcehut repo identified by ID.
     70 
     71 https://www.tomsdiner.org/blog/post_0003_sourcehut_readme_org_export.html"
     72 
     73   (interactive "sRepository ID: ")
     74   (let* ((srht (netrc-machine (netrc-parse "~/.netrc.gpg")
     75                               "repo.git.sr.ht"))
     76          (srht-token (netrc-get srht
     77                                 "password"))
     78          (readme.html (org-export-as (org-export-get-backend 'html)
     79                                      nil
     80                                      nil
     81                                      t))
     82          (our-json-query (kakafarm/call-process-with-string-as-input
     83                           "jq"
     84                           readme.html
     85                           "-sR"
     86                           (concat "
     87 { \"query\": \"mutation UpdateRepo($id: Int!, $readme: String!) { updateRepository(id: $id, input: { readme: $readme }) { id } }\",
     88     \"variables\": {
     89         \"id\": " repository-id ",
     90         \"readme\": .
     91     }
     92 }"))))
     93     (kakafarm/call-process-with-string-as-input "curl"
     94                                                 our-json-query
     95                                                 "--oauth2-bearer" srht-token
     96                                                 "-H" "Content-Type: application/json"
     97                                                 "-d@-"
     98                                                 "https://git.sr.ht/query")))
     99 
    100 (defun kakafarm/percent-read ()
    101   "Display percent read by current cursor location vs. total characters in file."
    102   (interactive)
    103   (message "%.2f%%"
    104            (* 100
    105               (/ (float (- (point) 1))
    106                  (+ 1 (buffer-size))))))
    107 
    108 (defun kakafarm/sentence-end-double-nilify-for-read-only-buffers ()
    109   "Set `sentence-end-double-space' in read-only buffer to `nil'."
    110   (when buffer-read-only
    111     (setq-local sentence-end-double-space
    112                 nil)))
    113 
    114 (defun kakafarm/elfeed-sort-feed-tags (a-feed)
    115   (cond
    116    ((stringp a-feed)
    117     a-feed)
    118    (t
    119     (let* ((feed-url (car a-feed))
    120            (tags (cdr a-feed))
    121            (tags-as-strings (mapcar #'symbol-name
    122                                     tags))
    123            (sorted-tags (sort tags-as-strings
    124                               #'string-lessp))
    125            (tags-as-symbols (mapcar #'intern sorted-tags)))
    126       (cons feed-url tags-as-symbols)))))
    127 
    128 (defun kakafarm/elfeed-compare-feeds-urls (feed-a feed-b)
    129   (string-lessp (car feed-a)
    130                 (car feed-b)))
    131 
    132 (defun kakafarm/elfeed-sort-feeds (feeds)
    133   (sort (mapcar #'kakafarm/elfeed-sort-feed-tags
    134            feeds)
    135         #'kakafarm/elfeed-compare-feeds-urls))
    136 
    137 (defun kakafarm/org-roam-keyword-is-filetags-p (keyword-node)
    138   (equal (org-element-property :key
    139                                keyword-node)
    140          "FILETAGS"))
    141 
    142 (defun kakafarm/org-roam-filetags-keyword-is-publishable-p (filestags-keyword-node)
    143   (seq-contains-p (split-string (org-element-property :value
    144                                                       filestags-keyword-node)
    145                                 ":")
    146                   "publish"))
    147 
    148 (defun kakafarm/org-roam-publishable-node-p (org-filename)
    149   (with-temp-buffer
    150     (insert-file-contents org-filename)
    151     (org-element-map (org-element-parse-buffer) 'keyword
    152                      (lambda (keyword)
    153                        (and (kakafarm/org-roam-keyword-is-filetags-p keyword)
    154                             (kakafarm/org-roam-filetags-keyword-is-publishable-p keyword)))
    155                      nil
    156                      t)))
    157 
    158 (defun kakafarm/org-roam-sitemap (title list-of-org-links)
    159   (message (format "kakafarm/org-roam-sitemap title: %S; list-of-links: %S\n"
    160                    title
    161                    list-of-org-links))
    162   ;; (let ((a-publishable-org-roam-node
    163   ;;        (seq-filter (lambda (org-link-list)
    164   ;;                      (pcase org-link-list
    165   ;;                        (`(,org-link)
    166   ;;                         (with-temp-buffer
    167   ;;                           (insert org-link)
    168   ;;                           (org-element-map (org-element-parse-buffer) 'link
    169   ;;                             (lambda (link)
    170   ;;                               ;; Check if file linked is publishable.
    171   ;;                               (kakafarm/org-roam-publishable-node-p
    172   ;;                                (concat "~/mine/roam/"
    173   ;;                                        (org-element-property :path
    174   ;;                                                              link))))
    175   ;;                             nil
    176   ;;                             t)))))
    177   ;;                    list-of-org-links)))
    178   ;;   (message "poop %S" a-publishable-org-roam-node))
    179 
    180   (concat
    181    "# -*- encoding: utf-8 -*-\n"
    182    "#+OPTIONS: ^:nil author:nil html-postamble:nil\n"
    183    ;;"#SETUPFILE: ./simple_inline.theme\n" ; No theme yet.
    184    "#+FILETAGS: publish\n"
    185    "#+TITLE: " title "\n\n"
    186    (org-list-to-org list-of-org-links) "\n"
    187 
    188    ;; TODO: No sitemap SVG yet because it shows all the fucking
    189    ;; files in the org-roam database.
    190    ;;
    191    ;;"file:sitemap.svg\n"
    192    ))
    193 
    194 (defun kakafarm/org-roam-publication-wrapper (plist filename pubdir)
    195   ;; (when (kakafarm/org-roam-publishable-node-p filename)
    196   ;;   nil)
    197   ;;(org-roam-graph) ; How the fuck do I make this one not show every fucking node in the org-roam database?!
    198   (org-html-publish-to-html plist
    199                             filename
    200                             pubdir)
    201   (setq kakafarm/org-roam-project-publish-time
    202         (cadr (current-time))))
    203 
    204 (defun kakafarm/org-roam-custom-link-builder (node)
    205   (let ((node-file (org-roam-node-file node)))
    206     ;; (when (kakafarm/org-roam-publishable-node-p node-file)
    207     ;;   nil)
    208     (message (format "kakafarm/org-roam-custom-link-builder: %S" node))
    209     (concat (file-name-base node-file)
    210             ".html")))
    211 
    212 (defun kakafarm/recenter-top-bottom (original-function &rest arguments)
    213   (if (null (car arguments))
    214       (apply original-function '(4))
    215     (apply original-function arguments)))