diff --git a/flake.lock b/flake.lock index 5071c58..c3bbb09 100644 --- a/flake.lock +++ b/flake.lock @@ -26,11 +26,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1747519437, - "narHash": "sha256-uv9Wv59d+mckS2CkorOF484wp2G5TNGijdoBZ5RkAk0=", + "lastModified": 1748080874, + "narHash": "sha256-sUebEzAkrY8Aq5G0GHFyRddmRNGP/a2iTtV7ISNvi/c=", "owner": "catppuccin", "repo": "nix", - "rev": "3ba714046ee32373e88166e6e9474d6ae6a5b734", + "rev": "0ba11b12be81f0849a89ed17ab635164ea8f0112", "type": "github" }, "original": { @@ -83,11 +83,11 @@ ] }, "locked": { - "lastModified": 1747621015, - "narHash": "sha256-j0fo1rNxZvmFLMaE945UrbLJZAHTlQmq0/QMgOP4GTs=", + "lastModified": 1748225455, + "narHash": "sha256-AzlJCKaM4wbEyEpV3I/PUq5mHnib2ryEy32c+qfj6xk=", "owner": "nix-community", "repo": "disko", - "rev": "cec44d77d9dacf0c91d3d51aff128fefabce06ee", + "rev": "a894f2811e1ee8d10c50560551e50d6ab3c392ba", "type": "github" }, "original": { @@ -122,11 +122,11 @@ "nixpkgs-stable": "nixpkgs-stable" }, "locked": { - "lastModified": 1747618089, - "narHash": "sha256-mbzwxQlxNamIMErEfwWRZ+ECmlQzxJ4eJvOM6/fxV5s=", + "lastModified": 1748248657, + "narHash": "sha256-zqhc7qyoRmgZpkvjocYEui9xYlzL90nqPf40zADGruM=", "owner": "nix-community", "repo": "emacs-overlay", - "rev": "1b2bc802bbac29f4695e39fbf982944c0999b45d", + "rev": "e048433838750a5fd9036e56dd8f59affa6d676b", "type": "github" }, "original": { @@ -387,11 +387,11 @@ ] }, "locked": { - "lastModified": 1747565775, - "narHash": "sha256-B6jmKHUEX1jxxcdoYHl7RVaeohtAVup8o3nuVkzkloA=", + "lastModified": 1748227609, + "narHash": "sha256-SaSdslyo6UGDpPUlmrPA4dWOEuxCy2ihRN9K6BnqYsA=", "owner": "nix-community", "repo": "home-manager", - "rev": "97118a310eb8e13bc1b9b12d67267e55b7bee6c8", + "rev": "d23d20f55d49d8818ac1f1b2783671e8a6725022", "type": "github" }, "original": { @@ -464,11 +464,11 @@ "lix": { "flake": false, "locked": { - "lastModified": 1747664434, - "narHash": "sha256-ph9fCCvzgZ1PNOu82SSoceX/tYZ5MfmX3PkBxBiNxwA=", + "lastModified": 1748182888, + "narHash": "sha256-tm3yi3KL+KjMnLZFXKR1ioI/Rk8DIa2n1NNE6I99BpU=", "ref": "refs/heads/main", - "rev": "eb18a90afbe0ade000d957cda344a5bcb3d565d4", - "revCount": 17900, + "rev": "dbff52bfbc48ead789888bf24422d0ef6f7ba9a8", + "revCount": 17946, "type": "git", "url": "https://git@git.lix.systems/lix-project/lix" }, @@ -489,11 +489,11 @@ ] }, "locked": { - "lastModified": 1746839253, - "narHash": "sha256-pRwi8Wn8Yofj459gq+3oIRy8F3SXeEJ6mzfIAUgM9nA=", + "lastModified": 1747667424, + "narHash": "sha256-7EICjbmG6lApWKhFtwvZovdcdORY1CEe6/K7JwtpYfs=", "ref": "refs/heads/main", - "rev": "58baedd53f9da81fd728a4f3b08c378e5ba9ae58", - "revCount": 142, + "rev": "3c23c6ae2aecc1f76ae7993efe1a78b5316f0700", + "revCount": 144, "type": "git", "url": "https://git.lix.systems/lix-project/nixos-module" }, @@ -505,11 +505,11 @@ "mobile-nixos": { "flake": false, "locked": { - "lastModified": 1743812405, - "narHash": "sha256-BedQ9Z3+nqtp9BRjHjJNPUeLIMVbTsP3Udbz0b1cUn0=", + "lastModified": 1748200777, + "narHash": "sha256-ELbQ7Apk0QzfhO8WjQIqEBuN2bEnGQHNxeiOSx/mU38=", "owner": "NixOS", "repo": "mobile-nixos", - "rev": "6679fd7a8dd4ccf4aa538b82216723861cfe61a2", + "rev": "6e249e58b5d8166738ebcfd401f05f7496049dd3", "type": "github" }, "original": { @@ -569,11 +569,11 @@ }, "nixosHardware": { "locked": { - "lastModified": 1747129300, - "narHash": "sha256-L3clA5YGeYCF47ghsI7Tcex+DnaaN/BbQ4dR2wzoiKg=", + "lastModified": 1747900541, + "narHash": "sha256-dn64Pg9xLETjblwZs9Euu/SsjW80pd6lr5qSiyLY1pg=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "e81fd167b33121269149c57806599045fd33eeed", + "rev": "11f2d9ea49c3e964315215d6baa73a8d42672f06", "type": "github" }, "original": { @@ -647,11 +647,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1747485343, - "narHash": "sha256-YbsZyuRE1tobO9sv0PUwg81QryYo3L1F3R3rF9bcG38=", + "lastModified": 1748037224, + "narHash": "sha256-92vihpZr6dwEMV6g98M5kHZIttrWahb9iRPBm1atcPk=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "9b5ac7ad45298d58640540d0323ca217f32a6762", + "rev": "f09dede81861f3a83f7f06641ead34f02f37597f", "type": "github" }, "original": { @@ -711,11 +711,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1747542820, - "narHash": "sha256-GaOZntlJ6gPPbbkTLjbd8BMWaDYafhuuYRNrxCGnPJw=", + "lastModified": 1748026106, + "narHash": "sha256-6m1Y3/4pVw1RWTsrkAK2VMYSzG4MMIj7sqUy7o8th1o=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "292fa7d4f6519c074f0a50394dbbe69859bb6043", + "rev": "063f43f2dbdef86376cc29ad646c45c46e93234c", "type": "github" }, "original": { @@ -742,11 +742,11 @@ }, "nixpkgs_6": { "locked": { - "lastModified": 1747542820, - "narHash": "sha256-GaOZntlJ6gPPbbkTLjbd8BMWaDYafhuuYRNrxCGnPJw=", + "lastModified": 1748026106, + "narHash": "sha256-6m1Y3/4pVw1RWTsrkAK2VMYSzG4MMIj7sqUy7o8th1o=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "292fa7d4f6519c074f0a50394dbbe69859bb6043", + "rev": "063f43f2dbdef86376cc29ad646c45c46e93234c", "type": "github" }, "original": { @@ -1009,11 +1009,11 @@ ] }, "locked": { - "lastModified": 1747469671, - "narHash": "sha256-bo1ptiFoNqm6m1B2iAhJmWCBmqveLVvxom6xKmtuzjg=", + "lastModified": 1748243702, + "narHash": "sha256-9YzfeN8CB6SzNPyPm2XjRRqSixDopTapaRsnTpXUEY8=", "owner": "numtide", "repo": "treefmt-nix", - "rev": "ab0378b61b0d85e73a8ab05d5c6029b5bd58c9fb", + "rev": "1f3f7b784643d488ba4bf315638b2b0a4c5fb007", "type": "github" }, "original": { diff --git a/hmModules/emacs/init.el b/hmModules/emacs/init.el index 7959261..843265a 100644 --- a/hmModules/emacs/init.el +++ b/hmModules/emacs/init.el @@ -28,6 +28,7 @@ (eglot-events-buffer-size 0) ; disable events logging, it should be enabled only when debuggigng LSP servers (eglot-sync-connect-nil 0) ; disable UI freeze when opening big files (eglot-connect-timeout nil) ; never timeout + :bind (("C-q" . eglot-code-action-quickfix)) ) (use-package consult-eglot @@ -163,8 +164,8 @@ :after marginalia :config (nerd-icons-completion-mode +1) :hook ( - (marginalia-mode . nerd-icons-completion-marginalia-setup) - (ibuffer-mode . nerd-icons-completion-marginalia-setup))) + (marginalia-mode . nerd-icons-completion-marginalia-setup) + (ibuffer-mode . nerd-icons-completion-marginalia-setup))) (use-package nerd-icons-ibuffer :hook (ibuffer-mode . nerd-icons-ibuffer-mode)) @@ -208,7 +209,7 @@ (treemacs-display-current-project-exclusively t) (treemacs-git-mode 'deferred) :bind (("C-c w t" . treemacs-select-window) - ("C-c o T" . treemacs)) + ("C-c o T" . treemacs)) ) (use-package meow @@ -219,8 +220,8 @@ (require 'meow-tree-sitter) (meow-tree-sitter-register-defaults) (add-hook 'after-make-frame-functions (defun ccr/meow--prepare-face (_) - (meow--prepare-face) - (remove-hook 'after-make-frame-functions 'ccr/meow--prepare-face))) + (meow--prepare-face) + (remove-hook 'after-make-frame-functions 'ccr/meow--prepare-face))) (add-to-list 'meow-mode-state-list '(eshell-mode . insert)) (add-to-list 'meow-mode-state-list '(eat-mode . insert)) (add-to-list 'meow-mode-state-list '(notmuch-hello-mode . insert)) @@ -331,44 +332,44 @@ "Interactively vertically resize the window" (interactive "cHit >/< to enlarge/shrink") (cond ((eq key (string-to-char ">")) - (enlarge-window-horizontally ccr/v-resize-amount) - (call-interactively 'ccr/v-resize)) - ((eq key (string-to-char "<")) - (enlarge-window-horizontally (- ccr/v-resize-amount)) - (call-interactively 'ccr/v-resize)) - (t (push key unread-command-events)))) + (enlarge-window-horizontally ccr/v-resize-amount) + (call-interactively 'ccr/v-resize)) + ((eq key (string-to-char "<")) + (enlarge-window-horizontally (- ccr/v-resize-amount)) + (call-interactively 'ccr/v-resize)) + (t (push key unread-command-events)))) (defun ccr/h-resize (key) "Interactively horizontally resize the window" (interactive "cHit >/< to enlarge/shrink") (cond ((eq key (string-to-char ">")) - (enlarge-window ccr/h-resize-amount) - (call-interactively 'ccr/h-resize)) - ((eq key (string-to-char "<")) - (enlarge-window (- ccr/h-resize-amount)) - (call-interactively 'ccr/h-resize)) - (t (push key unread-command-events)))) + (enlarge-window ccr/h-resize-amount) + (call-interactively 'ccr/h-resize)) + ((eq key (string-to-char "<")) + (enlarge-window (- ccr/h-resize-amount)) + (call-interactively 'ccr/h-resize)) + (t (push key unread-command-events)))) :bind (("C-c w k" . windmove-up) - ("C-c w l" . windmove-right) - ("C-c w j" . windmove-down) - ("C-c w h" . windmove-left) - ("M-k" . windmove-up) - ("M-l" . windmove-right) - ("M-j" . windmove-down) - ("M-h" . windmove-left) - ("C-c w " . windmove-up) - ("C-c w " . windmove-right) - ("C-c w " . windmove-down) - ("C-c w " . windmove-left) - ("C-c w q" . delete-window) - ("C-c w K" . windmove-delete-up) - ("C-c w L" . windmove-delete-right) - ("C-c w J" . windmove-delete-down) - ("C-c w H" . windmove-delete-left) - ("C-c w x" . kill-buffer-and-window) - ("C-c w v" . split-window-right) - ("C-c w s" . split-window-below) - ("C-c w V" . ccr/v-resize) - ("C-c w S" . ccr/h-resize))) + ("C-c w l" . windmove-right) + ("C-c w j" . windmove-down) + ("C-c w h" . windmove-left) + ("M-k" . windmove-up) + ("M-l" . windmove-right) + ("M-j" . windmove-down) + ("M-h" . windmove-left) + ("C-c w " . windmove-up) + ("C-c w " . windmove-right) + ("C-c w " . windmove-down) + ("C-c w " . windmove-left) + ("C-c w q" . delete-window) + ("C-c w K" . windmove-delete-up) + ("C-c w L" . windmove-delete-right) + ("C-c w J" . windmove-delete-down) + ("C-c w H" . windmove-delete-left) + ("C-c w x" . kill-buffer-and-window) + ("C-c w v" . split-window-right) + ("C-c w s" . split-window-below) + ("C-c w V" . ccr/v-resize) + ("C-c w S" . ccr/h-resize))) (use-package vertico :custom @@ -379,10 +380,10 @@ (vertico-cycle t) (vertico-mode t) :bind (:map vertico-map - (("DEL" . vertico-directory-delete-char) - ("C-DEL" . vertico-directory-delete-word) - ("M-q" . vertico-quick-insert) - ("C-q" . vertico-quick-exit)))) + (("DEL" . vertico-directory-delete-char) + ("C-DEL" . vertico-directory-delete-word) + ("M-q" . vertico-quick-insert) + ("C-q" . vertico-quick-exit)))) ;; (use-package vertico-posframe ;; :after vertico @@ -417,7 +418,7 @@ ("C-c f f" . consult-find) ("C-c F" . consult-ripgrep) ("C-c f" . consult-find) - ("C-c l" . consult-line) + ("C-c l" . consult-line) ("C-c L" . consult-focus-lines) ("C-c m" . consult-mark) ("C-c o o" . consult-outline) @@ -445,9 +446,9 @@ (tab-always-indent 'complete) (kind-icon-default-face 'corfu-default) :bind (:map corfu-map - (("M-d" . corfu-doc-toggle) - ("M-l" . corfu-show-location) - ("SPC" . corfu-insert-separator))) + (("M-d" . corfu-doc-toggle) + ("M-l" . corfu-show-location) + ("SPC" . corfu-insert-separator))) :init (global-corfu-mode)) @@ -458,7 +459,7 @@ (use-package prog-mode :hook ((prog-mode . hl-line-mode) - (prog-mode . display-line-numbers-mode))) + (prog-mode . display-line-numbers-mode))) (use-package which-key :delight :config (which-key-mode) @@ -500,28 +501,28 @@ (use-package nix-ts-mode :hook ( - (nix-ts-mode . (lambda () - (require 'eglot) - (add-to-list 'eglot-server-programs - '(nix-ts-mode . ("nixd"))) - (eglot-ensure))) - (nix-ts-mode . electric-pair-mode) - (nix-ts-mode . (lambda () (setq-local indent-bars-spacing-override 2) (indent-bars-mode))) - (nix-ts-mode . (lambda () - (setq-local - treesit-font-lock-settings - (append treesit-font-lock-settings - (treesit-font-lock-rules - :language 'nix - :feature 'function - :override t - `((formal) @font-lock-type-face) - - :language 'nix - :feature 'function - `((attrpath) @font-lock-function-name-face) - ))))) - ) + (nix-ts-mode . (lambda () + (require 'eglot) + (add-to-list 'eglot-server-programs + '(nix-ts-mode . ("nixd"))) + (eglot-ensure))) + (nix-ts-mode . electric-pair-mode) + (nix-ts-mode . (lambda () (setq-local indent-bars-spacing-override 2) (indent-bars-mode))) + (nix-ts-mode . (lambda () + (setq-local + treesit-font-lock-settings + (append treesit-font-lock-settings + (treesit-font-lock-rules + :language 'nix + :feature 'function + :override t + `((formal) @font-lock-type-face) + + :language 'nix + :feature 'function + `((attrpath) @font-lock-function-name-face) + ))))) + ) :mode "\\.nix\\'" ) @@ -533,33 +534,33 @@ (use-package python-ts-mode :hook ((python-ts-mode . (lambda () - (require 'eglot) - (add-to-list 'eglot-server-programs - '(python-ts-mode . ("jedi-language-server"))) - (eglot-ensure)))) + (require 'eglot) + (add-to-list 'eglot-server-programs + '(python-ts-mode . ("jedi-language-server"))) + (eglot-ensure)))) :mode "\\.py\\'") (use-package solidity-mode :hook ((solidity-mode . (lambda () - (require 'eglot) - (add-to-list 'eglot-server-programs - '(solidity-mode . ("nomicfoundation-solidity-language-server" "--stdio"))) - (eglot-ensure)))) + (require 'eglot) + (add-to-list 'eglot-server-programs + '(solidity-mode . ("nomicfoundation-solidity-language-server" "--stdio"))) + (eglot-ensure)))) :mode "\\.sol\\'") (use-package typescript-ts-mode :hook ((typescript-ts-mode . (lambda () - (require 'eglot) - (eglot-ensure)))) + (require 'eglot) + (eglot-ensure)))) :mode "\\.ts\\'") (use-package rust-mode :init (setq rust-mode-treesitter-derive t) :hook ((rust-mode . (lambda () - (require 'eglot) - (eglot-ensure))))) + (require 'eglot) + (eglot-ensure))))) (use-package haskell-ts-mode :hook ((haskell--ts-mode . eglot-ensure)) @@ -581,11 +582,11 @@ :after eglot :config (add-to-list 'eglot-server-programs - '(terraform-mode . ("terraform-lsp"))) + '(terraform-mode . ("terraform-lsp"))) :hook ((terraform-mode . eglot-ensure) - ;; (terraform-mode . tree-sitter-hl-mode) - (terraform-mode . (lambda () (setq indent-bars-spacing-override 2) (indent-bars-mode))) - )) + ;; (terraform-mode . tree-sitter-hl-mode) + (terraform-mode . (lambda () (setq indent-bars-spacing-override 2) (indent-bars-mode))) + )) (use-package yaml-mode :hook (yaml-mode . yaml-ts-mode)) @@ -629,7 +630,7 @@ (use-package aggressive-indent :hook ((lisp-mode . aggressive-indent-mode) - (emacs-lisp-mode . aggressive-indent-mode))) + (emacs-lisp-mode . aggressive-indent-mode))) (use-package eldoc :delight) @@ -679,8 +680,8 @@ (eat-eshell-mode) (eat-eshell-visual-command-mode) :custom ((eshell-prefer-lisp-functions t) - (eshell-history-size 10000) - (eshell-banner-message "")) + (eshell-history-size 10000) + (eshell-banner-message "")) :config (defun ccr/start-eshell () ;; Used from outside Emacs by emacsclient --eval (eshell 'N) @@ -694,17 +695,17 @@ ;; (add-to-list 'eshell-modules-list 'eshell-smart) ;; plan 9 style (setq ccr/eshell-aliases - '((g . magit) - (gl . magit-log) - (d . dired) - (o . find-file) - (oo . find-file-other-window) - (l . (lambda () (eshell/ls '-la))) - (eshell/clear . eshell/clear-scrollback))) + '((g . magit) + (gl . magit-log) + (d . dired) + (o . find-file) + (oo . find-file-other-window) + (l . (lambda () (eshell/ls '-la))) + (eshell/clear . eshell/clear-scrollback))) (mapc (lambda (alias) - (defalias (car alias) (cdr alias))) - ccr/eshell-aliases) + (defalias (car alias) (cdr alias))) + ccr/eshell-aliases) (defun ccr/eshell-get-current-input () @@ -712,35 +713,35 @@ (when (eq major-mode 'eshell-mode) (let ((start (save-excursion (eshell-bol) (point))) (end (point-at-eol))) - (buffer-substring-no-properties start end)))) + (buffer-substring-no-properties start end)))) (defun ccr/eshell-replace-current-input (new-input) (when (eq major-mode 'eshell-mode) (let ((inhibit-read-only t)) - (eshell-bol) - (delete-region (point) (point-at-eol)) - (insert new-input) - (end-of-line)))) + (eshell-bol) + (delete-region (point) (point-at-eol)) + (insert new-input) + (end-of-line)))) (defun ccr/eshell-history () (interactive) (when (eq major-mode 'eshell-mode) (let* ((current-input (ccr/eshell-get-current-input)) (eshell-history (when (and eshell-history-file-name - (file-readable-p eshell-history-file-name)) + (file-readable-p eshell-history-file-name)) (f-read-text eshell-history-file-name))) (bash-history (when (file-readable-p "~/.bash_history") (f-read-text "~/.bash_history"))) (history (split-string (concat (or eshell-history "") "\n" (or bash-history "")) "\n" t)) (selection (completing-read "History: " history nil t current-input))) - (ccr/eshell-replace-current-input selection)))) + (ccr/eshell-replace-current-input selection)))) :bind (("C-c o e" . project-eshell) - (:map eshell-mode-map - ("C-r" . ccr/eshell-history) - ("C-" . corfu-send) - ))) ;; i.e. just C-r in semi-char-mode + (:map eshell-mode-map + ("C-r" . ccr/eshell-history) + ("C-" . corfu-send) + ))) ;; i.e. just C-r in semi-char-mode (use-package eshell-command-not-found :custom ((eshell-command-not-found-command "command-not-found")) @@ -757,7 +758,7 @@ (use-package eshell-prompt-extras :custom ((eshell-highlight-prompt nil) - (eshell-prompt-function 'epe-theme-lambda))) + (eshell-prompt-function 'epe-theme-lambda))) (use-package popper :custom @@ -786,35 +787,36 @@ (use-package org :hook ((org-mode . variable-pitch-mode) - (org-mode . visual-line-mode) - (org-mode . visual-fill-column-mode)) + (org-mode . visual-line-mode) + (org-mode . visual-fill-column-mode)) :custom ((org-log-done nil) - (org-return-follows-link t) - (org-hide-emphasis-markers t) - (visual-fill-column-center-text t) - (visual-fill-column-width 100) - (fill-column 100) - (org-capture-templates '( - ("j" "Work Log Entry" - entry (file+datetree "~/org/work-log.org") - "* %?" - :empty-lines 0) - ("n" "Note" - entry (file+headline "~/org/notes.org" "Random Notes") - "** %?" - :empty-lines 0) - )) - (org-auto-align-tags nil) - (org-tags-column 0) - (org-catch-invisible-edits 'show-and-error) - (org-special-ctrl-a/e t) - (org-insert-heading-respect-content t) - (org-pretty-entities t) - (org-ellipsis "…") - ) + (org-return-follows-link t) + (org-hide-emphasis-markers t) + (visual-fill-column-center-text t) + (visual-fill-column-width 100) + (fill-column 100) + (org-capture-templates '( + ("j" "Work Log Entry" + entry (file+datetree "~/org/work-log.org") + "* %?" + :empty-lines 0) + ("n" "Note" + entry (file+headline "~/org/notes.org" "Random Notes") + "** %?" + :empty-lines 0) + )) + (org-auto-align-tags nil) + (org-tags-column 0) + (org-catch-invisible-edits 'show-and-error) + (org-special-ctrl-a/e t) + (org-insert-heading-respect-content t) + (org-pretty-entities t) + (org-ellipsis "…") + (org-use-sub-superscripts nil) + ) :bind (("C-c o l" . org-store-link) - ("C-c o c" . org-capture) - ("C-c b o" . org-switchb)) + ("C-c o c" . org-capture) + ("C-c b o" . org-switchb)) :config (defun ccr/org-capture (key) "Capture a note using the template KEY and close the frame when done. @@ -927,8 +929,8 @@ This is meant to be an helper to be called from the window manager." (require 'org-roam-protocol) :custom (org-roam-v2-ack t) - (org-roam-directory (file-truename "~/org")) - (org-roam-complete-everywhere 't) + (org-roam-directory (file-truename "~/roam")) + (org-roam-completion-everywhere 't) (org-roam-dailies-capture-templates '( ("d" "Generic entry" entry @@ -943,20 +945,14 @@ This is meant to be an helper to be called from the window manager." (org-roam-capture-ref-templates '( ("r" "Web entry" entry - "* ${Title} \n:PROPERTIES:\n:URL: ${ref}\n:END:\n %i" - :target (file+head "daily/%<%Y-%m-%d>.org" "#+TITLE: %<%Y-%m-%d>") + "** %i \n:PROPERTIES:\n:URL: ${ref}\n:END:" + :target (file+olp "inbox.org" ("Web entries")) :create-id t) ) ) :config (org-roam-db-autosync-mode) - ;; In order to automatically add an org id for some capture templates (using the :create-id keyword) - (defun ccr/org-capture-maybe-create-id () - (when (org-capture-get :create-id) - (org-id-get-create))) - (add-hook 'org-capture-mode-hook #'ccr/org-capture-maybe-create-id) - ;; The following functions name are relevant because org-roam-ql columns in queries use their suffix (defun org-roam-node-spent (node) "Return the hours spent as number" @@ -970,24 +966,26 @@ This is meant to be an helper to be called from the window manager." "Check if node was created in given time range" #'org-roam-node-date #'(lambda (node-date start-date end-date) - (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") - ;; then it's always discarded (the epoch time is given to it) - (encode-time (org-parse-time-string node-date)) - (error (encode-time (org-parse-time-string "<1970-01-01>"))))) - (start-date (encode-time (org-parse-time-string start-date))) - (end-date (encode-time (org-parse-time-string end-date)))) - (and (time-less-p start-date node-date) - (time-less-p node-date end-date))) - )) + (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") + ;; then it's always discarded (the epoch time is given to it) + (encode-time (org-parse-time-string node-date)) + (error (encode-time (org-parse-time-string "<1970-01-01>"))))) + (start-date (encode-time (org-parse-time-string start-date))) + (end-date (encode-time (org-parse-time-string end-date)))) + (and (time-less-p start-date node-date) + (time-less-p node-date end-date))) + )) (defun ccr/org-roam-spent-hours (client &optional date-start date-end) "Return the total spent hours on something (usually a client)" (let* ((query-tags `(tags ,client "billable")) - (query (if (and date-start date-end) - `(and ,query-tags (date-range ,date-start ,date-end)) - query-tags))) - (apply #'+(mapcar #'org-roam-node-spent (org-roam-ql-nodes query)))))) + (query (if (and date-start date-end) + `(and ,query-tags (date-range ,date-start ,date-end)) + query-tags))) + (apply #'+(mapcar #'org-roam-node-spent (org-roam-ql-nodes query))))) + :bind + (("C-c n i" . org-roam-node-insert))) (use-package org-roam-ql :after org-roam @@ -1027,6 +1025,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-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 :custom (gptel-model 'google/gemini-2.5-flash-preview) @@ -1057,7 +1062,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) "In BUFFER-NAME, replace OLD-STRING with NEW-STRING." (with-current-buffer buffer-name - (let ((case-fold-search nil)) ;; Case-sensitive search + (let ((case-fold-search nil)) ;; Case-sensitive search (save-excursion (goto-char (point-min)) (let ((count 0)) @@ -1152,6 +1157,23 @@ This is meant to be an helper to be called from the window manager." :type string :description "The text to append to the buffer.")) :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 :name "EditBuffer" :function #'ccr/edit-buffer @@ -1185,6 +1207,22 @@ This is meant to be an helper to be called from the window manager." :description "Content to write to the buffer" :required t)) :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") )) diff --git a/hmModules/unison/default.nix b/hmModules/unison/default.nix new file mode 100644 index 0000000..081f052 --- /dev/null +++ b/hmModules/unison/default.nix @@ -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"; + }; + }; + }; + }; +} diff --git a/hosts/default.nix b/hosts/default.nix index cf4fc6f..efdd865 100644 --- a/hosts/default.nix +++ b/hosts/default.nix @@ -59,6 +59,7 @@ "git-workspace-tokens".owner = "ccr"; "autistici-password".owner = "ccr"; "restic-hetzner-password" = { }; + "nix-netrc" = { }; }; }; @@ -87,6 +88,7 @@ "restic-hetzner-password" = { }; "forgejo-runners-token".owner = "nixuser"; "forgejo-nix-access-tokens".owner = "nixuser"; + "nix-netrc" = { }; }; }; @@ -119,6 +121,8 @@ group = "forgejo"; }; "matrix-registration-shared-secret".owner = "matrix-synapse"; + "arbi-config".owner = "arbi"; + "nix-netrc" = { }; }; }; @@ -142,9 +146,7 @@ "cachix-personal-token".owner = "ccr"; "git-workspace-tokens".owner = "ccr"; "autistici-password".owner = "ccr"; - "restic-hetzner-password" = { }; - "forgejo-runners-token".owner = "nixuser"; - "forgejo-nix-access-tokens".owner = "nixuser"; + "nix-netrc" = { }; }; }; diff --git a/hosts/kirk/default.nix b/hosts/kirk/default.nix index 72cebd5..0ccd677 100644 --- a/hosts/kirk/default.nix +++ b/hosts/kirk/default.nix @@ -28,13 +28,11 @@ "pam" "wireguard-client" "greetd" - "syncthing" "mount-sisko" "adb" "binfmt" "prometheus-exporters" "alloy" - "syncthing" "zerotier" ] ++ [ ./disko.nix ]; diff --git a/hosts/picard/default.nix b/hosts/picard/default.nix index 3cbb5d2..02271ff 100644 --- a/hosts/picard/default.nix +++ b/hosts/picard/default.nix @@ -31,7 +31,6 @@ "wireguard-client" "binfmt" "greetd" - "syncthing" "hass-poweroff" "forgejo-runners" "teamviewer" @@ -99,6 +98,7 @@ "pantalaimon" "moonlight" "gimp" + "unison" ]; extraGroups = [ "plugdev" ]; backupPaths = [ ]; diff --git a/hosts/pike/default.nix b/hosts/pike/default.nix index 2248933..c1c2579 100644 --- a/hosts/pike/default.nix +++ b/hosts/pike/default.nix @@ -29,7 +29,6 @@ "wireguard-client" "binfmt" "greetd" - # "syncthing" "teamviewer" "sunshine" "mount-sisko" @@ -169,4 +168,16 @@ enable = true; algorithm = "zstd"; }; + + hardware.nvidia-container-toolkit.enable = true; + services.xserver.videoDrivers = [ "nvidia" ]; + hardware.nvidia.open = true; + hardware.nvidia.prime = { + offload = { + enable = true; + enableOffloadCmd = true; + }; + intelBusId = "PCI:0:2:0"; + nvidiaBusId = "PCI:1:0:0"; + }; } diff --git a/hosts/sisko/default.nix b/hosts/sisko/default.nix index 13a9b0d..e4a3c17 100644 --- a/hosts/sisko/default.nix +++ b/hosts/sisko/default.nix @@ -26,7 +26,6 @@ "atuin" "immich" "paperless" - "syncthing" "atticd" "jellyfin" "matrix" @@ -114,6 +113,7 @@ environment.systemPackages = with pkgs; [ cifs-utils + unison ]; powerManagement.scsiLinkPolicy = "med_power_with_dipm"; diff --git a/modules/arbi/default.nix b/modules/arbi/default.nix index 02ab9e5..3417b51 100644 --- a/modules/arbi/default.nix +++ b/modules/arbi/default.nix @@ -1,4 +1,4 @@ -{ config, pkgs, ... }: +{ config, ... }: let rev = "d531730d9640160f0519ef4b3640f8da49dd96f8"; arbi-flake = builtins.getFlake "git+ssh://git@github.com/aciceri/arbi.git?rev=${rev}"; @@ -9,11 +9,7 @@ in services.arbi = { enable = true; log_level = "debug"; - configFile = pkgs.writeText "arbi-config.kdl" '' - endpoint "wss://eth-mainnet.g.alchemy.com/v2/" - pairs_file "pairs.json" - concurrency 4 - ''; + configFile = config.age.secrets.arbi-config.path; }; environment.persistence."/persist".directories = [ diff --git a/modules/jellyfin/default.nix b/modules/jellyfin/default.nix index c9cdeaa..6586166 100644 --- a/modules/jellyfin/default.nix +++ b/modules/jellyfin/default.nix @@ -5,7 +5,10 @@ openFirewall = true; }; - users.users.jellyfin.extraGroups = [ "transmission" ]; + users.users.jellyfin.extraGroups = [ + "transmission" + "amule" + ]; environment.persistence."/persist".directories = [ config.services.jellyfin.dataDir diff --git a/modules/nix/default.nix b/modules/nix/default.nix index 000ede4..ef46e63 100644 --- a/modules/nix/default.nix +++ b/modules/nix/default.nix @@ -20,20 +20,20 @@ "root" "@wheel" ]; - netrc-file = "/etc/nix/netrc"; + netrc-file = config.age.secrets.nix-netrc.path; substituters = [ - # "s3://cache?profile=default®ion=eu-south-1&scheme=https&endpoint=cache.aciceri.dev" "https://cache.iog.io" "https://cache.lix.systems" "https://nix-community.cachix.org" - "https://mlabs.cachix.org" + # "https://mlabs.cachix.org" + "http://sisko.wg.aciceri.dev:8081/nixfleet" ]; trusted-public-keys = [ - # "cache.aciceri.dev~1:nJMfcBnYieY2WMbYDG0s9S5qUhU+V4RPL+X9zcxXxZY=" "hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ=" "cache.lix.systems:aBnZUw8zA7H35Cz2RyKFVs3H4PlGTLawyY5KRbvJR8o=" "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" - "mlabs.cachix.org-1:gStKdEqNKcrlSQw5iMW6wFCj3+b+1ASpBVY2SYuNV2M=" + # "mlabs.cachix.org-1:gStKdEqNKcrlSQw5iMW6wFCj3+b+1ASpBVY2SYuNV2M=" + "nixfleet:Bud23440n6mMTmgq/7U+mk91zlLjnx2X3lQQrCBCCU4=" ]; deprecated-features = [ "url-literals" ]; }; diff --git a/modules/restic/default.nix b/modules/restic/default.nix index 52cd712..f973ce9 100644 --- a/modules/restic/default.nix +++ b/modules/restic/default.nix @@ -42,6 +42,7 @@ in "/persist" "/mnt/hd/immich" "/mnt/hd/paperless" + "/mnt/hd/roam" ]; exclude = [ " /persist/var/lib/containers" ]; passwordFile = config.age.secrets.SISKO_RESTIC_PASSWORD.path; diff --git a/packages/emacs/packages.nix b/packages/emacs/packages.nix index 9ab2c44..4852658 100644 --- a/packages/emacs/packages.nix +++ b/packages/emacs/packages.nix @@ -188,6 +188,7 @@ let org-roam org-roam-ql org-roam-ui + org-download visual-fill-column consult-org-roam pass diff --git a/secrets/arbi-config.age b/secrets/arbi-config.age new file mode 100644 index 0000000..0e31ccf Binary files /dev/null and b/secrets/arbi-config.age differ diff --git a/secrets/nix-netrc.age b/secrets/nix-netrc.age new file mode 100644 index 0000000..7b0438f Binary files /dev/null and b/secrets/nix-netrc.age differ diff --git a/secrets/secrets.nix b/secrets/secrets.nix index 7b341b1..fd1bca9 100644 --- a/secrets/secrets.nix +++ b/secrets/secrets.nix @@ -153,6 +153,17 @@ with keys.users; ccr-ssh sisko ]; + "arbi-config.age".publicKeys = [ + ccr-ssh + sisko + ]; + "nix-netrc.age".publicKeys = [ + ccr-ssh + sisko + pike + picard + kirk + ]; # WireGuard "picard-wireguard-private-key.age".publicKeys = [