summaryrefslogtreecommitdiffstats
path: root/2024/organizers-notebook/index.org
diff options
context:
space:
mode:
Diffstat (limited to '2024/organizers-notebook/index.org')
-rw-r--r--2024/organizers-notebook/index.org384
1 files changed, 315 insertions, 69 deletions
diff --git a/2024/organizers-notebook/index.org b/2024/organizers-notebook/index.org
index 97ad77c6..bbb1032a 100644
--- a/2024/organizers-notebook/index.org
+++ b/2024/organizers-notebook/index.org
@@ -1,4 +1,4 @@
-# [[elisp:(progn (memoize 'emacsconf-get-talk-info "5 seconds") (org-md-export-to-markdown) (memoize-restore 'emacsconf-get-talk-info))][Export this file to Markdown]]
+# [[elisp:(progn (memoize 'emacsconf-get-talk-info "5 seconds") (org-md-export-to-markdown) (memoize-restore 'emacsconf-get-talk-info))][EPpxport this file to Markdown]]
#+TAGS: emacsconf
# [[elisp:(memoize 'emacsconf-get-talk-info "5 seconds")][Memoize emacsconf-get-talk-info]] - [[elisp:(memoize-restore 'emacsconf-get-talk-info)][Unmemoize]]
#+todo: TODO(t) SOMEDAY STARTED INPROGRESS(i) WAITING(w) STANDBY(s) BLOCKED(b) | DONE(x) CANCELLED(c)
@@ -125,7 +125,7 @@ interests you!
| Audio normalization | Core org handling it | Other volunteer | Multiple volunteers |
| Video resolution | Usual reminders | Extra reminders | Everyone remembering to use a large font size |
| Intros | Standard, recorded | Reviewed by speakers | More details/context |
-
+ | Pad | v1.9.7 | v2.x | |
* Phases
:PROPERTIES:
:CUSTOM_ID: phases
@@ -150,18 +150,14 @@ CLOSED: [2024-06-11 Tue 19:21] DEADLINE: <2024-06-14 Fri>
**** DONE Post CFP in the usual places
CLOSED: [2024-09-17 Tue 16:45]
emacsconf-discuss, reddit.com/r/emacs, Emacs News, emacs-tangents, Mastodon, X
-** Draft schedule
+** DONE Draft schedule
+CLOSED: [2024-11-02 Sat 11:38]
:PROPERTIES:
:CUSTOM_ID: draft-schedule
:END:
#+NAME: schedule
-
-*** Option: 2 tracks
-:PROPERTIES:
-:CUSTOM_ID: sched-2-tracks
-:END:
-#+begin_src emacs-lisp :results value replace :exports none :eval never-export :var filename="schedule-2-tracks.svg"
+#+begin_src emacs-lisp :results value replace :exports none :eval never-export :var filename="schedule-1.5-tracks.svg"
(require 'emacsconf)
(require 'emacsconf-schedule)
(setq emacsconf-schedule-tracks
@@ -173,8 +169,8 @@ emacsconf-discuss, reddit.com/r/emacs, Emacs News, emacs-tangents, Mastodon, X
:start "2024-12-08 9:00"
:end "2024-12-08 18:00"
:tracks ("General" "Development"))))
-(let ((emacsconf-schedule-default-buffer-minutes 20)
- (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 30)
+(let ((emacsconf-schedule-default-buffer-minutes 10)
+ (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 20)
(emacsconf-schedule-break-time 10)
(emacsconf-schedule-lunch-time 60)
(emacsconf-use-absolute-url t)
@@ -183,53 +179,52 @@ emacsconf-discuss, reddit.com/r/emacs, Emacs News, emacs-tangents, Mastodon, X
(emacsconf-schedule-validation-functions
'(emacsconf-schedule-validate-time-constraints
;; emacsconf-schedule-validate-live-q-and-a-sessions-are-staggered
+ emacsconf-schedule-validate-no-cancelled-talks
emacsconf-schedule-validate-all-talks-present
emacsconf-schedule-validate-no-duplicates)))
(setq emacsconf-schedule-plan
'(("GEN Saturday, Dec 7" :start "2024-12-07 09:00" :set-track "General")
sat-open
papers ; <= 10:00
+ project ; any
+ org-update ; <= 13:00 EST Sat or >= 15:00 Sat or <= 14:00 Sun, Sat preferred
color ; <= 12:00 sat pref
- flp ; any, Sat pref
- hyperdrive ; >= 11:00 Sat
(lunch :start "12:00")
- emacs30 ; probably any
theme ; >= 12:30
- water ; >= 13:00 Sat, same speaker as shell >= 10:00 EST Sat and <= 16:00 EST Sat
- shell ; >= 13:00 Sat >= 10:00 EST Sat and <= 16:00 EST Sat
- students
+ (water :time 15) ; >= 13:00 Sat, same speaker as shell
+ shell ; >= 13:00 Sat
+ casual ; >= 13:00
+ hyperdrive ; >= 13:30 Sat
writing ; >= 15:30 Sat
- sat-close
+ emacs30 ; probably any
+ (sat-close :start "17:00")
("DEV Saturday, Dec 7" :start "2024-12-07 10:00" :set-track "Development")
gypsum ; <= 11:00
rust ; Dec 7
+ p-search ; any
(lunch :start "12:00")
- julia ; >= 13:00
- regex ; <= 12:00 sun or >= 12:00 sat
+ (julia :buffer 15) ; >= 13:00
+ guile ; >= 12:00
+ secrets ; >= 13:00
(mcclim :time 60) ; >= 14:00
repro ; any
("GEN Sunday, Dec 8" :start "2024-12-08 09:00" :set-track "General")
sun-open
links ; <= 10:30
- (org-teach :buffer 20) ; any
- (hyperbole :buffer 20)
- (hywiki :buffer 20) ; >= 10:00
+ regex ; <= 12:00 sun or >= 12:00 sat
+ learning ; <= 13:00
language ; <= 12:00
+ (org-teach :buffer 15) ; any
+ (hyperbole :buffer 15)
(lunch :start "12:00")
- literate ; >= 13:00
- casual ; >= 13:00
- learning ; any
- project ; any
- sharing ; any, same speaker as learning
- (sun-close :start "16:50")
- ("DEV Sunday, Dec 8" :start "2024-12-08 10:00" :set-track "Development")
- pgmacs ; <= 15:00
- graph ; <= 12:00
- (lunch :start "12:00")
- blee ; any
- p-search ; any
- secrets ; >= 13:00
- (transducers :start "16:00") ; >= 16:00 sun
+ (hywiki :buffer 15) ; >= 10:00
+ (pgmacs :buffer 15) ; <= 15:00
+ (blee :buffer 10) ; any
+ (literate :buffer 15) ; >= 13:00
+ students ; >= 14:00 Sun
+ sharing ; >= 13:00
+ (transducers) ; >= 16:00 sun
+ (sun-close :start "17:00")
))
(setq emacsconf-schedule-draft (emacsconf-schedule-prepare (emacsconf-schedule-inflate-sexp emacsconf-schedule-plan)))
(prog1 (string-join (emacsconf-schedule-validate emacsconf-schedule-draft) "\n")
@@ -244,22 +239,56 @@ emacsconf-discuss, reddit.com/r/emacs, Emacs News, emacs-tangents, Mastodon, X
(clear-image-cache)))
#+end_src
+#+RESULTS: schedule
+:results:
+:end:
+
#+RESULTS:
:results:
:end:
-[[file:schedule-2-tracks.svg]]
+[[file:schedule-1.5-tracks.svg]]
-Coloring by availability:
+Legend:
- light blue: constraint is <= a time
- peach: constraint is >= a time
-
-*** Option: 1.5 tracks
+- solid line: Q&A will be through BigBlueButton web conference
+- dashed line: Q&A will be IRC/Etherpad during the event or e-mail after the event
+
+Notes:
+
+- Updates:
+ - [2024-10-27 Sun] Removed emacsconf:graph, moved emacsconf:p-search earlier; also emacsconf:learning needs to be in the morning, so I moved emacsconf:pgmacs and emacsconf:org-teach around.
+ - [2024-10-22 Tue] Swapped emacsconf:org-teach and emacsconf:blee
+ - [2024-10-21 Mon] Extended emacsconf:blee
+ - [2024-10-17 Thu] Added emacsconf:org-update to Saturday morning, moving emacsconf:org-teach to Sunday afternoon
+ - [2024-10-15 Tue] Swapped emacsconf:students and emacsconf:literate for availability reasons
+ - [2024-10-13 Sun] Moved emacsconf:hyperdrive to the afternoon (swapping with emacsconf:flp) because of changed availability
+ - [2024-10-12 Sat] I fixed the time constraint for emacsconf:students (needs to be in the afternoon), so I moved emacsconf:hyperbole to the morning.
+- General approach:
+ - I've mostly tried to alternate IRC/pad Q&A with live Q&A.
+ - 1.5 tracks keeps things faster-paced than the 2-track option.
+- Sat:
+ - Gen track:
+ - emacsconf:papers, emacsconf:project, emacsconf:org-teach, emacsconf:flp, emacsconf:color should be pretty general
+ - emacsconf:color and emacsconf:theme are both theme-related. emacsconf:color needs to be in the morning and emacsconf:theme needs to be in the afternoon, so I put them on either side of the lunch break.
+ - Other afternoon talks: emacsconf:water and emacsconf:shell are by the same speaker. emacsconf:casual, emacsconf:hyperdrive, and emacsconf:writing will probably be good for a general audience. These speakers are only available in the afternoon, so this part of the schedule is a bit tight.
+ - I put emacsconf:emacs30 at the end of Saturday to act sort of as a keynote. Closing remarks on Saturday are usually very light, so we could skip them.
+ - Dev track:
+ - emacsconf:gypsum, emacsconf:rust, emacsconf:julia, emacsconf:guile, and emacsconf:mcclim are about other projects
+ - emacsconf:graph, emacsconf:p-search, emacsconf:secrets, and emacsconf:repro will probably be more dev-focused
+- Sun:
+ - Sunday morning last year had some packet loss issues at around 9:30, so we'll start with some talks that don't have BBB Q&A: emacsconf:students, emacsconf:links, emacsconf:regex
+ - emacsconf:blee and emacsconf:language are probably general-audience
+ - emacsconf:pgmacs, emacsconf:regex, and emacsconf:transducers are all development-oriented, but are on the general track for scheduling purposes. [[emacsconf:transducers]] can only be on Sunday afternoon at 4pm because of availability.
+ - I've separated emacsconf:hyperbole and emacsconf:hywiki by lunch so that people who are interested in that can attend the live Q&A for both without worrying about missing things.
+ - emacsconf:learning, emacsconf:sharing, emacsconf:literate will probably be good for a general audience
+
+*** Option: 2 tracks :noexport:
:PROPERTIES:
-:CUSTOM_ID: sched-1.5-tracks
+:CUSTOM_ID: sched-2-tracks
:END:
-
-#+begin_src emacs-lisp :results value replace :exports none :eval never-export :var filename="schedule-1.5-tracks.svg"
+#+begin_src emacs-lisp :results value replace :exports none :eval never-export :var filename="schedule-2-tracks.svg"
(require 'emacsconf)
(require 'emacsconf-schedule)
(setq emacsconf-schedule-tracks
@@ -271,8 +300,8 @@ Coloring by availability:
:start "2024-12-08 9:00"
:end "2024-12-08 18:00"
:tracks ("General" "Development"))))
-(let ((emacsconf-schedule-default-buffer-minutes 10)
- (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 20)
+(let ((emacsconf-schedule-default-buffer-minutes 20)
+ (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 30)
(emacsconf-schedule-break-time 10)
(emacsconf-schedule-lunch-time 60)
(emacsconf-use-absolute-url t)
@@ -287,45 +316,48 @@ Coloring by availability:
'(("GEN Saturday, Dec 7" :start "2024-12-07 09:00" :set-track "General")
sat-open
papers ; <= 10:00
- links ; <= 10:30
- org-teach ; any
- language ; <= 12:00
- hyperdrive ; >= 11:00 Sat
color ; <= 12:00 sat pref
+ flp ; any, Sat pref
+ hyperdrive ; >= 11:00 Sat
(lunch :start "12:00")
emacs30 ; probably any
theme ; >= 12:30
- water ; >= 13:00 Sat, same speaker as shell
- shell ; >= 13:00 Sat
- flp ; any, Sat pref
+ water ; >= 13:00 Sat, same speaker as shell >= 10:00 EST Sat and <= 16:00 EST Sat
+ shell ; >= 13:00 Sat >= 10:00 EST Sat and <= 16:00 EST Sat
+ students
writing ; >= 15:30 Sat
sat-close
("DEV Saturday, Dec 7" :start "2024-12-07 10:00" :set-track "Development")
gypsum ; <= 11:00
rust ; Dec 7
- graph ; <= 12:00
(lunch :start "12:00")
julia ; >= 13:00
- regex ; <= 12:00 sun or >= 12:00 sat
- secrets ; >= 13:00
+ guile ; >= 12:00
(mcclim :time 60) ; >= 14:00
+ regex ; <= 12:00 sun or >= 12:00 sat
repro ; any
("GEN Sunday, Dec 8" :start "2024-12-08 09:00" :set-track "General")
sun-open
- pgmacs ; <= 15:00
- p-search ; any
- hyperbole
- hywiki ; >= 10:00
- project ; any
- blee ; any
+ links ; <= 10:30
+ (org-teach :buffer 20) ; any
+ (hyperbole :buffer 20)
+ (hywiki :buffer 20) ; >= 10:00
+ language ; <= 12:00
(lunch :start "12:00")
- casual ; >= 13:00
- learning ; >= 13:00
- sharing ; any, same speaker as learning
literate ; >= 13:00
- students
- (transducers :start "16:00") ; >= 16:00 sun
+ casual ; >= 13:00
+ learning ; any
+ project ; any
+ sharing ; any
(sun-close :start "16:50")
+ ("DEV Sunday, Dec 8" :start "2024-12-08 10:00" :set-track "Development")
+ pgmacs ; <= 15:00
+ graph ; <= 12:00
+ (lunch :start "12:00")
+ blee ; any
+ p-search ; any
+ secrets ; >= 13:00
+ (transducers :start "16:00") ; >= 16:00 sun
))
(setq emacsconf-schedule-draft (emacsconf-schedule-prepare (emacsconf-schedule-inflate-sexp emacsconf-schedule-plan)))
(prog1 (string-join (emacsconf-schedule-validate emacsconf-schedule-draft) "\n")
@@ -342,11 +374,225 @@ Coloring by availability:
#+RESULTS:
:results:
-saturday closing remarks: Starts at 16:10 before 16:30
:end:
-[[file:schedule-1.5-tracks.svg]]
+[[file:schedule-2-tracks.svg]]
Coloring by availability:
- light blue: constraint is <= a time
- peach: constraint is >= a time
+* TODO [#A] Check EmacsConf infrastructure :project:
+
+- [X] IRC
+- [ ] Streaming assets
+- [ ] Publishing to the wiki
+- [ ] Web conference
+- [ ] OBS
+- [ ] Publishing to the media server
+- [ ] Etherpad
+- [ ] Streaming
+- [ ] Toobnix
+- [ ] YouTube
+
+** WAITING [#A] bbb.emacsverse.org replacement
+DEADLINE: <2024-11-15 Fri>
+:PROPERTIES:
+:CREATED: [2024-11-02 Sat 11:38]
+:END:
+
+- Delegated to Corwin for now, will get back to stressing out about it in a couple of weeks
+- May need to spin up a Linode and either pay for it for a few weeks or figure out how to spin it down and up again
+ - [[#bbb][BigBlueButton replacement]]
+- Possibly relevant: dynamic DNS?
+ https://www.linode.com/community/questions/7945/custom-dynamic-dns
+ Can also update manually
+*** TODO Create meeting rooms for each speaker
+SCHEDULED: <2024-11-15 Fri>
+:PROPERTIES:
+:CREATED: [2024-11-02 Sat 11:50]
+:END:
+** IRC web client
+*** WAITING Ask libera.chat to increase connections allowed from chat.emacsconf.org on Dec 7 and 8
+** IRC announcements
+*** DONE Confirm manual IRC announcements
+CLOSED: [2024-11-02 Sat 12:05]
+*** TODO Confirm automated IRC announcements from res
+** Media
+
+*** TODO Switch public media to unprotected root before the conference
+SCHEDULED: <2024-11-29 Fri>
+:PROPERTIES:
+:CREATED: [2024-11-12 Tue 14:18]
+:END:
+
+1. Clear public media directory.
+2. Set =media_protect_root= to false in Ansible =group_vars/all.yml=.
+3. =ansible-playbook -i inventory.yml prod-playbook.yml --tags media=
+
+You can generate the index with =emacsconf-publish-update-media=.
+** TODO Publishing resources to the wiki
+ansible-playbook -i inventory.yml prod-playbook.yml --tags publish
+
+
+
+** TODO Publishing videos to the media server
+** Playing videos, switching to windows
+
+*** TODO Generate test videos for everything
+*** TODO Document how to get that set up again
+** Etherpad
+*** TODO Generate pads for all the talks
+*** TODO Generate the main index
+** TODO Do a dry run
+SCHEDULED: <2024-11-22 Fri>
+:PROPERTIES:
+:CREATED: [2024-11-02 Sat 11:40]
+:END:
+*** DONE Generate all the test assets
+CLOSED: [2024-11-06 Wed 18:52]
+:PROPERTIES:
+:Effort: 0:15
+:END:
+:LOGBOOK:
+CLOCK: [2024-11-06 Wed 18:47]--[2024-11-06 Wed 18:52] => 0:05
+:END:
+*** TODO Test connecting to VNC and streaming via OBS
+SCHEDULED: <2024-11-07 Thu>
+:PROPERTIES:
+:CREATED: [2024-11-06 Wed 18:52]
+:END:
+* Processes and notes
+** ERC
+
+Some convenient commands are defined in emacsconf-el:emacsconf-erc.el.
+
+| /opall | Grant operator status in the Emacsconf channels |
+| /deopall | Remove operator status in the Emacsconf channels |
+| /conftopic | Set the first part of the topic |
+
+* Decisions
+:PROPERTIES:
+:CUSTOM_ID: decisions
+:END:
+** BigBlueButton replacement
+:PROPERTIES:
+:CUSTOM_ID: bbb
+:END:
+
+The server running bbb.emacsverse.org has been decommissioned, since the nonprofit that shared it with us is defunct.
+
+- We'd like to figure out what our live Q&A setup is going to be for EmacsConf 2024 (Dec 7-8).
+- Nice to have: Hosting for other Emacs meetups like Emacs APAC and OrgMeetup
+- [[https://sachachua.com/blog/2023/12/emacsconf-backstage-figuring-out-our-maximum-number-of-simultaneous-bigbluebutton-users/][Stats from last year]]: 31 meetings, 84 unique users, 62 max simultaneous users, 6 max simultaneous meetings, 27 max users in one meeting, 36 unique talking
+ - also includes some notes on hosting
+- Nice thing about running our own server: we can make one room per speaker, pre-assign their URLs, and let people stay as long as they want in recorded Q&A sessions
+
+Recommendation:
+
+We spin up a shared CPU 4GB under bandali's Linode
+account (for bandwidth pooling and easier
+reimbursement), do the setup/testing over the next
+few weeks, scale up to dedicated CPU 16GB a day or
+two before the conference, and keep it at that
+level until the recordings are all done. I have
+access to that Linode account, so I can set it up.
+If bandali can configure emacsverse.org to be
+handled by Linode, I can manage the DNS changes,
+or he can change bbb.emacsverse.org to the IP
+address of the new node.
+
+Some options:
+
+- Linode with 16GB RAM and 8 cores
+ - Advantages: can experiment with both Galene and BBB, manage things ourselves, have filesystem access
+ - Disadvantages: needs someone to do it
+ - Base pricing
+ - Shared CPU 4GB 80GB storage: hourly USD 0.04, monthly USD 24
+ - Dedicated CPU 16GB: hourly USD 0.22, monthly USD 144 - meets minimum requirements and can probably support 200 simultaneous ([[https://docs.bigbluebutton.org/support/faq/][FAQ]])
+ - Shared CPU 8GB 160GB storage: hourly USD 0.07
+ - Shared CPU 16GB 320GB storage: hourly USD 0.14
+ - Last year
+ - Block storage: $1/10GB/month
+ - 125M/hour - [[https://docs.bigbluebutton.org/support/faq/#what-is-the-disk-space-usage-for-storing-one-hour-of-recordings][FAQ]]
+ - In 2023, we had 31 hours of trimmed recordings (main + answers),
+ - (* 31 0.125) 3.875, oh, maybe we can get away with 10GB storage and add another chunk of 10GB midway if we need it, or extend the dedicated
+ - Actually, block storage probably not needed if we're going to keep the big instance up until the recordings are done
+ - Ideas
+ - *Option A: Run a small instance continuously, scale up for the conference, pull the recordings off, spin the instance down* - est total USD 60+tax
+ - There are three weeks between now and the conference (* 0.04 24 7 3) USD 20
+ - Last year, recordings were available within three days after the conference
+ - Let's plan for a week at high capacity. (* 0.22 24 7) USD 36.96
+ - and a month of 10GB, possibly up to 30GB. USD 3
+ - That's probably small enough that it doesn't make as much sense to try to fully spin down for a week in between now and the conference (* 0.04 24 7) - which would save USD 6.72 but require figuring out backing up, etc.
+ - *Option B: Run a slightly larger shared CPU instance from now until shortly before the conference, then scale up* in case BBB does not work for installation/testing with less memory; block storage probably not needed
+ - (* 0.07 24 7 3) USD 35.28 for 8GB, total (+ 35.28 36.96) USD 72.24
+ - (* 0.14 24 7 3) USD 70.56 for 16GB, total (+ 70.56 36.96) USD 107.52
+
+- Ask FSF if we can borrow their BBB or Galene, maybe limit it to cycling among 6 or 7 rooms
+ - Waiting for feedback; Corwin has asked them
+- Pay for BigBlueButton hosting; can we find one that's compatible with our commitment to freedom?
+ - https://bigbluebutton.host/plans/#economyplans - Economy 120 (USD 130/month) or Economy 80 (USD 85/month), custom URL
+ - https://www.bigbluemeeting.com/#pricing - 100 concurrent users: USD 125/month, custom URL
+ - https://www.mynaparrot.com/affordable-bigbluebutton-hosting
+ - 100 concurrent users: USD 79/month
+ - 200 concurrent users and custom URL: USD 15 setup fee + USD 149/month
+ - https://www.webhostingzone.org/solutions/bigbluebutton-hosting.html - 150 concurrent, USD 75/month
+ - https://bbbplugin.com/en/pricing/bigbluebutton-for-api/ - 250 concurrent, USD 49 setup + USD 108.80/month
+ - https://biggerbluebutton.com/plans
+ - 150 concurrent users, 10 concurrent meetings, USD 40/month
+ - custom domain, 600 concurrent users, USD 149/month
+ - Compare with Linode pricing
+- Try to squeeze it onto res.emacsconf.org
+ - Tricky to run on a shared server; it likes to use a lot of ports and strongly recommends running it on its own server
+- Go back to using meet.jit.si?
+ - Free:
+ - Need to check speed, reliability
+ - Can send RTMP from the meeting itself
+ - [2024-11-13 Wed] I attended Ihor's
+ OrgMeetup, which he hosted on meet.jit.si. I
+ think he had bandwidth issues at some point
+ and we lost his audio. I remember we ran
+ into that problem before, too, when we used
+ Jitsi for one of the Emacsconfs. Free Jitsi
+ hosting might not be the right fit for us.
+ - Paid: USD 99/month + $0.01/min for recordings + $0.01 min (optional) for RTMP streaming
+- Galene?
+ - [2024-10-31 Thu] I checked out Galene in the last Emacs Berlin meeting. It's promising, but I think the user interface might still need a bit of work. Simple deployment (run one Go binary, I think), but muting/unmuting doesn't trigger enabling the microphone, and the chat was buggy to get to on my mobile device. Supposed to have support for raising hands.
+
+
+* Support code
+:PROPERTIES:
+:CUSTOM_ID: support-code
+:END:
+
+#+begin_src emacs-lisp
+(defun my-ox-link-path (link _ info)
+ (let* ((raw-path (org-element-property :path link)))
+ (setq raw-path
+ (org-export-file-uri
+ (org-publish-file-relative-name raw-path info)))
+ ;; Possibly append `:html-link-home' to relative file
+ ;; name.
+ (let ((home (and (plist-get info :html-link-home)
+ (org-trim (plist-get info :html-link-home)))))
+ (when (and home
+ (plist-get info :html-link-use-abs-url)
+ (not (file-name-absolute-p raw-path)))
+ (setq raw-path (concat (file-name-as-directory home) raw-path))))
+ raw-path))
+
+(defun my-org-md-link (link desc info)
+ (if (string= (org-element-property :type link) "file")
+ (let ((path (my-ox-link-path link desc info)))
+ (if (string= (file-name-extension path) "svg")
+ (with-temp-buffer
+ (insert-file-contents-literally path)
+ (buffer-string))
+ (org-md-link link desc info)))
+ (org-md-link link desc info)))
+
+(with-eval-after-load 'ox-md
+ (setf
+ (alist-get 'link (org-export-backend-transcoders (org-export-get-backend 'md)))
+ 'my-org-md-link))
+#+end_src