Hello, I use org-roam-graph in place of org-roam-ui because its much more lean and utility oriented. The problem I am having is how to not show certain things in them, every https link I create inside a node is rendered and it clutters the graph, please share a code snippet if possible how to disable showing them. Would be also good to disable showing dailies and only non-dailies nodes?
It seems there is an undocumented variable called org-roam-graph-link-hidden-types
whose original value is “file” I modified the variable to “file” “https” as such
(setq org-roam-graph-link-hidden-types '(“file” “https”))
It works !!!
2 Likes
To answer my second question - how to exclude dailies from org-roam-graph.
This pull request achieves just that Add exclude patterns to org-roam-graph by braun-steven · Pull Request #2400 · org-roam/org-roam · GitHub
Including the patch for anyone interested. Exclude Patterns may be folder names also, the original author did not document it - but it works !
From a038c20c1e2ccd2c05679d3bbef68f41770da016 Mon Sep 17 00:00:00 2001
From: Steven Braun <steven.braun.mz@gmail.com>
Date: Sun, 26 Nov 2023 12:26:34 +0100
Subject: [PATCH] Add exclude patterns to org-roam-graph
Define org-roam-graph-exclude-patterns which allows to filter the graph nodes by title/filenames.
---
extensions/org-roam-graph.el | 78 ++++++++++++++++++++++--------------
1 file changed, 49 insertions(+), 29 deletions(-)
diff --git a/extensions/org-roam-graph.el b/extensions/org-roam-graph.el
index dde693c065..cd77529e8e 100644
--- a/extensions/org-roam-graph.el
+++ b/extensions/org-roam-graph.el
@@ -175,44 +175,64 @@ CALLBACK is passed the graph file as its sole argument."
(progn (funcall callback temp-graph)
(run-hook-with-args 'org-roam-graph-generation-hook temp-dot temp-graph))))))))
+(defcustom org-roam-graph-exclude-patterns '()
+ "List of patterns to exclude from the Org-roam graph.
+Nodes with file names or titles matching any pattern in this list will be excluded."
+ :type '(repeat string)
+ :group 'org-roam)
+
+
(defun org-roam-graph--dot (&optional edges all-nodes)
"Build the graphviz given the EDGES of the graph.
If ALL-NODES, include also nodes without edges."
(let ((org-roam-directory-temp org-roam-directory)
(nodes-table (make-hash-table :test #'equal))
(seen-nodes (list))
+ (excluded-nodes (list)) ;; List to store IDs of excluded nodes
(edges (or edges (org-roam-db-query [:select :distinct [source dest type] :from links]))))
- (pcase-dolist (`(,id ,file ,title)
- (org-roam-db-query [:select [id file title] :from nodes]))
- (puthash id (org-roam-node-create :file file :id id :title title) nodes-table))
- (with-temp-buffer
- (setq-local org-roam-directory org-roam-directory-temp)
- (insert "digraph \"org-roam\" {\n")
- (dolist (option org-roam-graph-extra-config)
- (insert (org-roam-graph--dot-option option) ";\n"))
- (insert (format " edge [%s];\n"
- (mapconcat (lambda (var)
- (org-roam-graph--dot-option var nil "\""))
- org-roam-graph-edge-extra-config
- ",")))
- (pcase-dolist (`(,source ,dest ,type) edges)
- (unless (member type org-roam-graph-link-hidden-types)
- (pcase-dolist (`(,node ,node-type) `((,source "id")
- (,dest ,type)))
- (unless (member node seen-nodes)
- (insert (org-roam-graph--format-node
- (or (gethash node nodes-table) node) node-type))
- (push node seen-nodes)))
- (insert (format " \"%s\" -> \"%s\";\n"
- (xml-escape-string source)
- (xml-escape-string dest)))))
- (when all-nodes
+
+ ;; Function to check if a string matches any of the exclude patterns
+ (cl-flet ((matches-exclude-pattern (s)
+ (seq-some (lambda (pattern)
+ (string-match pattern s))
+ org-roam-graph-exclude-patterns)))
+ ;; First, identify nodes to exclude
+ (pcase-dolist (`(,id ,file ,title)
+ (org-roam-db-query [:select [id file title] :from nodes]))
+ (if (or (matches-exclude-pattern file)
+ (matches-exclude-pattern title))
+ (push id excluded-nodes) ;; Add to excluded list
+ (puthash id (org-roam-node-create :file file :id id :title title) nodes-table))) ;; Add to nodes table
+
+ (with-temp-buffer
+ (setq-local org-roam-directory org-roam-directory-temp)
+ (insert "digraph \"org-roam\" {\n")
+ (dolist (option org-roam-graph-extra-config)
+ (insert (org-roam-graph--dot-option option) ";\n"))
+ (insert (format " edge [%s];\n"
+ (mapconcat (lambda (var)
+ (org-roam-graph--dot-option var nil "\""))
+ org-roam-graph-edge-extra-config
+ ",")))
+
+ ;; Process edges, excluding those connected to excluded nodes
+ (pcase-dolist (`(,source ,dest ,type) edges)
+ (unless (or (member source excluded-nodes)
+ (member dest excluded-nodes)
+ (member type org-roam-graph-link-hidden-types))
+ (insert (format " \"%s\" -> \"%s\";\n"
+ (xml-escape-string source)
+ (xml-escape-string dest)))))
+
+ ;; Process nodes, excluding those in the excluded list
(maphash (lambda (id node)
- (unless (member id seen-nodes)
+ (unless (member id excluded-nodes)
(insert (org-roam-graph--format-node node "id"))))
- nodes-table))
- (insert "}")
- (buffer-string))))
+ nodes-table)
+
+ (insert "}")
+ (buffer-string)))))
+
(defun org-roam-graph--connected-component (id distance)
"Return the edges for all nodes reachable from/connected to ID.
Currently - my hidden types/folders are as follows
(setq org-roam-graph-link-hidden-types '("file" ; dont render links to files
"http" ; - http links
"https" ; - https links
"fuzzy") ; - links to image files, tables etc
org-roam-graph-exclude-patterns '("notes" ; do not render anything in the notes folder
"journal") ; do not render anything in the journal folder
)