ELisp Snippet: auto reformat node title and rename file to match
(defun my/rename-org-roam-visited-file ()
(interactive)
(let* ((node (org-roam-node-at-point t))
(replacement-title (concat "(" (url-host (url-generic-parse-url (car (org-roam-node-refs node)))) ") " (org-roam-node-title node)))
(replacement-title-property (concat "#+title: " replacement-title))
(current-file-name (buffer-file-name (current-buffer))))
(if (not (and current-file-name (file-exists-p current-file-name)))
(message "Buffer is not visiting a file!")
(perform-replace "^#\\+title\\: .*$" replacement-title-property nil t nil nil nil (point-min) (point-max) nil nil)
(save-buffer)
(let* ((node (org-roam-node-at-point t))
(slug (org-roam-node-slug node))
(new-file-name (concat (file-name-directory current-file-name) slug ".org")))
(cond
((vc-backend current-file-name)
(vc-rename-file current-file-name new-file-name)
(org-roam-db-autosync--rename-file-a current-file-name new-file-name))
(t
(rename-file current-file-name new-file-name 1)
(set-visited-file-name new-file-name t t)))))))
(bind-key (kbd "m") #'my/rename-org-roam-visited-file custom-leader-map)