Compare commits

...

6 commits

Author SHA1 Message Date
24a80896a8
New gptel tools
All checks were successful
EVAL aarch64-linux.sisko
/ test (push) Successful in 10s
2025-05-21 17:59:56 +02:00
6d715d8878
Rename org-roam directory 2025-05-21 17:59:27 +02:00
a7f927516e
Format 2025-05-21 17:59:21 +02:00
fd793b791d
Backup roam directory with unison 2025-05-21 17:58:55 +02:00
5692a37c88
Add org-roam-download 2025-05-21 17:58:22 +02:00
ff5359cd50
Disable syncthing 2025-05-21 17:58:04 +02:00
7 changed files with 82 additions and 20 deletions

View file

@ -927,7 +927,7 @@ This is meant to be an helper to be called from the window manager."
(require 'org-roam-protocol) (require 'org-roam-protocol)
:custom :custom
(org-roam-v2-ack t) (org-roam-v2-ack t)
(org-roam-directory (file-truename "~/org")) (org-roam-directory (file-truename "~/roam"))
(org-roam-complete-everywhere 't) (org-roam-complete-everywhere 't)
(org-roam-dailies-capture-templates (org-roam-dailies-capture-templates
'( '(
@ -970,23 +970,23 @@ This is meant to be an helper to be called from the window manager."
"Check if node was created in given time range" "Check if node was created in given time range"
#'org-roam-node-date #'org-roam-node-date
#'(lambda (node-date start-date end-date) #'(lambda (node-date start-date end-date)
(let ((node-date (condition-case nil (let ((node-date (condition-case nil
;; if the entry is not from the journal (i.e. the filename is not something like "2024-10-10.org") ;; if the entry is not from the journal (i.e. the filename is not something like "2024-10-10.org")
;; then it's always discarded (the epoch time is given to it) ;; then it's always discarded (the epoch time is given to it)
(encode-time (org-parse-time-string node-date)) (encode-time (org-parse-time-string node-date))
(error (encode-time (org-parse-time-string "<1970-01-01>"))))) (error (encode-time (org-parse-time-string "<1970-01-01>")))))
(start-date (encode-time (org-parse-time-string start-date))) (start-date (encode-time (org-parse-time-string start-date)))
(end-date (encode-time (org-parse-time-string end-date)))) (end-date (encode-time (org-parse-time-string end-date))))
(and (time-less-p start-date node-date) (and (time-less-p start-date node-date)
(time-less-p node-date end-date))) (time-less-p node-date end-date)))
)) ))
(defun ccr/org-roam-spent-hours (client &optional date-start date-end) (defun ccr/org-roam-spent-hours (client &optional date-start date-end)
"Return the total spent hours on something (usually a client)" "Return the total spent hours on something (usually a client)"
(let* ((query-tags `(tags ,client "billable")) (let* ((query-tags `(tags ,client "billable"))
(query (if (and date-start date-end) (query (if (and date-start date-end)
`(and ,query-tags (date-range ,date-start ,date-end)) `(and ,query-tags (date-range ,date-start ,date-end))
query-tags))) query-tags)))
(apply #'+(mapcar #'org-roam-node-spent (org-roam-ql-nodes query)))))) (apply #'+(mapcar #'org-roam-node-spent (org-roam-ql-nodes query))))))
(use-package org-roam-ql (use-package org-roam-ql
@ -1027,6 +1027,13 @@ This is meant to be an helper to be called from the window manager."
org-roam-ui-update-on-save t org-roam-ui-update-on-save t
org-roam-ui-open-on-start nil)) org-roam-ui-open-on-start nil))
(use-package org-download
:after org
:custom (org-download-image-dir (concat org-roam-directory "/images"))
:bind
(:map org-mode-map
(("M-p" . org-download-clipboard))))
(use-package gptel (use-package gptel
:custom :custom
(gptel-model 'google/gemini-2.5-flash-preview) (gptel-model 'google/gemini-2.5-flash-preview)
@ -1057,7 +1064,7 @@ This is meant to be an helper to be called from the window manager."
(defun ccr/edit-buffer (buffer-name old-string new-string) (defun ccr/edit-buffer (buffer-name old-string new-string)
"In BUFFER-NAME, replace OLD-STRING with NEW-STRING." "In BUFFER-NAME, replace OLD-STRING with NEW-STRING."
(with-current-buffer buffer-name (with-current-buffer buffer-name
(let ((case-fold-search nil)) ;; Case-sensitive search (let ((case-fold-search nil)) ;; Case-sensitive search
(save-excursion (save-excursion
(goto-char (point-min)) (goto-char (point-min))
(let ((count 0)) (let ((count 0))
@ -1152,6 +1159,23 @@ This is meant to be an helper to be called from the window manager."
:type string :type string
:description "The text to append to the buffer.")) :description "The text to append to the buffer."))
:category "emacs") :category "emacs")
,(gptel-make-tool
:function (lambda (buffer text)
(with-current-buffer (get-buffer-create buffer)
(save-excursion
(goto-char (point-max))
(insert text)))
(format "Appended text to buffer %s" buffer))
:name "append_to_buffer"
:description "Append text to an Emacs buffer. If the buffer does not exist, it will be created."
:confirm t
:args (list '(:name "buffer"
:type string
:description "The name of the buffer to append text to.")
'(:name "text"
:type string
:description "The text to append to the buffer."))
:category "emacs")
,(gptel-make-tool ,(gptel-make-tool
:name "EditBuffer" :name "EditBuffer"
:function #'ccr/edit-buffer :function #'ccr/edit-buffer
@ -1185,6 +1209,22 @@ This is meant to be an helper to be called from the window manager."
:description "Content to write to the buffer" :description "Content to write to the buffer"
:required t)) :required t))
:category "edit") :category "edit")
,(gptel-make-tool
:function (lambda (title body)
(org-roam-capture-
:templates `(("d" "" plain "%?" :target (file+head "%<%Y%m%d%H%M%S>-${slug}.org" ,(concat "#+title: ${title}\n\n" body)))) ; override default template
:node (org-roam-node-create :title title)
:props '(:unnarrowed 't :tags "gptel"))
)
:name "create_org_roam_note"
:description "Create a new org-roam note."
:args (list '(:name "title"
:type string
:description "The name of the note to create. Try to automatically infere it and ask only if dubious.")
'(:name "body"
:type string
:description "The body of the note write in an org language, aovoid starting with an headline as first line. Feel free to exploit the org syntax."))
:category "org-roam")
)) ))

View file

@ -0,0 +1,24 @@
{ pkgs, lib, ... }:
{
home.packages = [ pkgs.unison ];
services.unison = {
enable = true;
pairs = {
"roam" = {
roots = [
# Pair of roots to synchronize
"/home/ccr/roam"
"ssh://root@sisko.wg.aciceri.dev//mnt/hd/roam"
];
commandOptions = {
auto = "true";
batch = "true";
log = "false";
repeat = "watch";
sshcmd = lib.getExe pkgs.openssh;
ui = "text";
};
};
};
};
}

View file

@ -28,13 +28,11 @@
"pam" "pam"
"wireguard-client" "wireguard-client"
"greetd" "greetd"
"syncthing"
"mount-sisko" "mount-sisko"
"adb" "adb"
"binfmt" "binfmt"
"prometheus-exporters" "prometheus-exporters"
"alloy" "alloy"
"syncthing"
"zerotier" "zerotier"
] ]
++ [ ./disko.nix ]; ++ [ ./disko.nix ];

View file

@ -31,7 +31,6 @@
"wireguard-client" "wireguard-client"
"binfmt" "binfmt"
"greetd" "greetd"
"syncthing"
"hass-poweroff" "hass-poweroff"
"forgejo-runners" "forgejo-runners"
"teamviewer" "teamviewer"
@ -99,6 +98,7 @@
"pantalaimon" "pantalaimon"
"moonlight" "moonlight"
"gimp" "gimp"
"unison"
]; ];
extraGroups = [ "plugdev" ]; extraGroups = [ "plugdev" ];
backupPaths = [ ]; backupPaths = [ ];

View file

@ -29,7 +29,6 @@
"wireguard-client" "wireguard-client"
"binfmt" "binfmt"
"greetd" "greetd"
# "syncthing"
"teamviewer" "teamviewer"
"sunshine" "sunshine"
"mount-sisko" "mount-sisko"

View file

@ -26,7 +26,6 @@
"atuin" "atuin"
"immich" "immich"
"paperless" "paperless"
"syncthing"
"atticd" "atticd"
"jellyfin" "jellyfin"
"matrix" "matrix"
@ -114,6 +113,7 @@
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
cifs-utils cifs-utils
unison
]; ];
powerManagement.scsiLinkPolicy = "med_power_with_dipm"; powerManagement.scsiLinkPolicy = "med_power_with_dipm";

View file

@ -188,6 +188,7 @@ let
org-roam org-roam
org-roam-ql org-roam-ql
org-roam-ui org-roam-ui
org-download
visual-fill-column visual-fill-column
consult-org-roam consult-org-roam
pass pass