feat: add link-hint, olivetti, org-modern, org-fragtog, org-super-agenda, org-noter, gptel-rewrite, git-link, forge

This commit is contained in:
2026-02-23 17:09:34 +01:00
parent a60566d046
commit c9b855d26a
3 changed files with 181 additions and 1 deletions

165
config.el
View File

@@ -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 <TOKEN>
(after! forge
(add-to-list 'forge-alist
'("git.apps.sukany.cz" "git.apps.sukany.cz/api/v1" "git.apps.sukany.cz" forge-gitea-repository)))

View File

@@ -53,7 +53,7 @@
(eval +overlay)
lookup
(lsp +eglot) ;; <- pro “chytrý” completion přes CAPF
magit
(magit +forge)
make
pdf
tmux

View File

@@ -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)