From c9b855d26abed36e1c8a7e162b12af00ad01bd9a Mon Sep 17 00:00:00 2001 From: Daneel Date: Mon, 23 Feb 2026 17:09:34 +0100 Subject: [PATCH] feat: add link-hint, olivetti, org-modern, org-fragtog, org-super-agenda, org-noter, gptel-rewrite, git-link, forge --- config.el | 165 ++++++++++++++++++++++++++++++++++++++++++++++++++++ init.el | 2 +- packages.el | 15 +++++ 3 files changed, 181 insertions(+), 1 deletion(-) diff --git a/config.el b/config.el index 7b09603..8e7662f 100644 --- a/config.el +++ b/config.el @@ -1092,3 +1092,168 @@ Otherwise: runs interactive ement-connect, then opens rooms after sync." ("\\.mm\\'" . default) ("\\.x?html?\\'" . default) ("\\.pdf\\'" . emacs)))) ; find-file → pdf-view-mode via auto-mode-alist + + +;;; ============================================================ +;;; NAVIGATION — link-hint, avy +;;; ============================================================ + +(use-package! link-hint + :defer t + :commands (link-hint-open-link link-hint-copy-link)) + +(map! :leader + (:prefix ("j" . "jump") + :desc "Open link (link-hint)" "k" #'link-hint-open-link + :desc "Copy link URL" "K" #'link-hint-copy-link + :desc "Avy goto char-2" "j" #'avy-goto-char-2 + :desc "Avy goto line" "l" #'avy-goto-line)) + + +;;; ============================================================ +;;; WRITING — olivetti-mode +;;; ============================================================ + +(use-package! olivetti + :defer t + :config + (setq olivetti-body-width 90)) + +(add-hook 'org-mode-hook #'olivetti-mode) +(add-hook 'markdown-mode-hook #'olivetti-mode) + +(map! :leader + (:prefix ("t" . "toggle") + :desc "Olivetti mode" "o" #'olivetti-mode)) + + +;;; ============================================================ +;;; ORG-MODERN — lepší vizuální styl org-mode +;;; ============================================================ + +(use-package! org-modern + :after org + :config + (setq org-modern-star '("◉" "○" "✸" "✿") + org-modern-table t + org-modern-checkbox t) + (global-org-modern-mode)) + + +;;; ============================================================ +;;; ORG-FRAGTOG — auto-render LaTeX fragmentů +;;; ============================================================ + +(use-package! org-fragtog + :after org + :hook (org-mode . org-fragtog-mode)) + + +;;; ============================================================ +;;; ORG-SUPER-AGENDA — skupiny v agenda view +;;; ============================================================ + +(use-package! org-super-agenda + :after org-agenda + :config + (setq org-super-agenda-groups + '((:name "Dnes" + :scheduled today + :deadline today) + (:name "Brzy" + :deadline (before ,(org-read-date nil nil "+3d"))) + (:name "Čekám" + :todo "WAIT") + (:name "Projekt Kyndryl" + :tag ("kyndryl" "work")) + (:name "ZTJ" + :tag "ztj") + (:name "Ostatní" + :anything t))) + (org-super-agenda-mode)) + + +;;; ============================================================ +;;; ORG-NOTER — PDF anotace +;;; ============================================================ + +(use-package! org-noter + :after (:any org pdf-view) + :config + (setq org-noter-notes-window-location 'horizontal-split)) + +(map! :leader + (:prefix ("o" . "open") + :desc "org-noter" "n" #'org-noter + :desc "org-noter insert note" "N" #'org-noter-insert-note)) + + +;;; ============================================================ +;;; GPTEL — region rewrite & org heading prompt +;;; ============================================================ + +(after! gptel + (defun my/gptel-rewrite-region (beg end) + "Pošli označený region do GPTel s instrukcí 'vylepši text' a nahraď odpovědí." + (interactive "r") + (let ((text (buffer-substring-no-properties beg end))) + (gptel-request + (concat "Vylepši následující text. Vrať POUZE vylepšený text, nic jiného:\n\n" text) + :callback (lambda (response info) + (if response + (save-excursion + (delete-region beg end) + (goto-char beg) + (insert response) + (message "GPTel: text vylepšen")) + (message "GPTel rewrite failed: %s" (plist-get info :status))))))) + + (defun my/gptel-org-heading-prompt () + "Pošle aktuální org heading + obsah jako kontext do GPTel chatu." + (interactive) + (unless (derived-mode-p 'org-mode) + (user-error "Pouze v org-mode")) + (let* ((heading (org-get-heading t t t t)) + (content (save-excursion + (org-back-to-heading t) + (let ((beg (point))) + (org-end-of-subtree t t) + (buffer-substring-no-properties beg (point)))))) + (gptel content) + (message "GPTel: heading '%s' odeslán jako kontext" heading))) + + (map! :leader + (:prefix ("o g" . "GPTel") + :desc "Rewrite region" "r" #'my/gptel-rewrite-region + :desc "Org heading → GPTel" "p" #'my/gptel-org-heading-prompt))) + + +;;; ============================================================ +;;; GIT — git-link +;;; ============================================================ + +(use-package! git-link + :defer t + :config + (setq git-link-default-branch "master") + ;; Přidat podporu pro Gitea na git.apps.sukany.cz + (add-to-list 'git-link-remote-alist + '("git\\.apps\\.sukany\\.cz" git-link-gitea)) + (add-to-list 'git-link-commit-remote-alist + '("git\\.apps\\.sukany\\.cz" git-link-commit-gitea))) + +(map! :leader + (:prefix ("g" . "git") + :desc "Copy git link" "y" #'git-link + :desc "Copy git link commit" "Y" #'git-link-commit)) + + +;;; ============================================================ +;;; FORGE — Gitea integrace +;;; ============================================================ +;; Vyžaduje Gitea API token v ~/.authinfo: +;; machine git.apps.sukany.cz login daneel^forge password + +(after! forge + (add-to-list 'forge-alist + '("git.apps.sukany.cz" "git.apps.sukany.cz/api/v1" "git.apps.sukany.cz" forge-gitea-repository))) diff --git a/init.el b/init.el index ef54983..9a75c0b 100644 --- a/init.el +++ b/init.el @@ -53,7 +53,7 @@ (eval +overlay) lookup (lsp +eglot) ;; <- pro “chytrý” completion přes CAPF - magit + (magit +forge) make pdf tmux diff --git a/packages.el b/packages.el index 19f8d3f..6bf2cc2 100644 --- a/packages.el +++ b/packages.el @@ -74,3 +74,18 @@ (package! org-pandoc-import :recipe (:host github :repo "tecosaur/org-pandoc-import")) +;; Navigation +(package! link-hint) + +;; Writing +(package! olivetti) + +;; Org enhancements +(package! org-modern) +(package! org-fragtog) +(package! org-super-agenda) +(package! org-noter) + +;; Git +(package! git-link) +