- support for roam
- support for elfeed
- minor changes
- cleared configural
This commit is contained in:
Martin Sukany
2026-02-13 13:45:08 +01:00
parent 06fda42c59
commit c32cffc759
2 changed files with 115 additions and 65 deletions

169
config.el
View File

@@ -4,9 +4,10 @@
;; Theme / UI
;; --------------------------------------------------
(setq doom-theme 'modus-vivendi-deuteranopia
display-line-numbers-type t
doom-font (font-spec :family "JetBrains Mono" :size 14)
doom-variable-pitch-font nil)
(setq display-line-numbers-type t)
;; --------------------------------------------------
;; macOS / UX
@@ -66,60 +67,82 @@ Funguje v libovolném textu, včetně Markdown linků (např. [x](./...))."
(add-hook 'markdown-mode-hook (lambda () (setq-local company-minimum-prefix-length 1)))
(add-hook 'gfm-mode-hook (lambda () (setq-local company-minimum-prefix-length 1))))
;; --------------------------------------------------
;; Org
;; --------------------------------------------------
;;; ~/.doom.d/config.el --- Org config -*- lexical-binding: t; -*-
(setq org-directory "~/org/")
;; ------------------------------------------------------------
;; ORG (Doom-friendly, minimal, bez zbytečných menu)
;; ------------------------------------------------------------
(after! org
(setq org-default-notes-file (expand-file-name "inbox.org" org-directory))
;; 1) Kde máš org soubory
;; Uprav si cestu podle sebe. Tohle je typický Doom default.
(setq org-directory "~/org/")
(setq org-agenda-files (list org-directory
(expand-file-name "projects" org-directory)
(expand-file-name "notes" org-directory)))
(setq org-todo-keywords
'((sequence "TODO(t)" "NEXT(n)" "WAIT(w@/!)" "|" "DONE(d!)" "CANCELLED(c@)")))
(setq org-log-done 'time)
(setq org-refile-targets '((org-agenda-files :maxlevel . 5))
org-outline-path-complete-in-steps nil
org-refile-use-outline-path 'file)
(defun my/project-org-file ()
"Return path to ./project.org in current Projectile project, if it exists."
(when-let ((root (projectile-project-root)))
(let ((f (expand-file-name "project.org" root)))
(when (file-exists-p f) f))))
(defun my/org-agenda-project ()
"Open Org agenda restricted to current project's project.org."
(interactive)
(let ((org-agenda-files (delq nil (list (my/project-org-file)))))
(if org-agenda-files
(org-agenda nil "a")
(user-error "No project.org found in this project"))))
;; Pomocná funkce: vrátí plnou cestu k souboru v org-directory
(defun ms/org-file (name)
"Return absolute path to NAME inside `org-directory`."
(expand-file-name name org-directory))
;; 2) Org-capture templates
;; Zachovává tvoje i/n/p a jen doplňuje chybějící věci.
(setq org-capture-templates
'(("i" "Inbox task" entry
(file "inbox.org")
`(
;; --- Tvoje původní šablony (beze změn) ---
("i" "Inbox task" entry
(file ,(ms/org-file "inbox.org"))
"* TODO %?\n%U\n%a\n")
("n" "Note" entry
(file+headline "inbox.org" "Notes")
(file+headline ,(ms/org-file "inbox.org") "Notes")
"* %?\n%U\n%a\n")
("p" "Project task" entry
(file "inbox.org")
"* TODO %? :project:\n%U\n%a\n"))))
(setq org-agenda-sorting-strategy
'((agenda priority-down time-up)
(todo priority-down)
(tags priority-down)
(search priority-down)))
(setq org-priority-highest ?A
org-priority-lowest ?C
org-priority-default ?C)
(file ,(ms/org-file "inbox.org"))
"* TODO %? :project:\n%U\n%a\n")
;; --- Doplňky (minimalisticky) ---
;; Subtask do právě clockované položky
("s" "Clocked subtask" entry (clock)
"* TODO %?\n%U\n%a\n%i"
:empty-lines 1)
;; Journal do journal.org (datetree) + automatické měření času
("j" "Journal" entry
(file+olp+datetree ,(ms/org-file "journal.org"))
"\n* %<%I:%M %p> - Journal :journal:\n\n%?\n\n"
:clock-in :clock-resume
:empty-lines 1)
;; Meeting do journal.org (datetree) + měření času
("m" "Meeting" entry
(file+olp+datetree ,(ms/org-file "journal.org"))
"* %<%I:%M %p> - %^{Meeting title} :meetings:\nContext: %a\n\n%?\n\n"
:clock-in :clock-resume
:empty-lines 1)
;; Checking Email do journal datetree
("e" "Checking Email" entry
(file+olp+datetree ,(ms/org-file "journal.org"))
"* Checking Email :email:\n\n%?"
:clock-in :clock-resume
:empty-lines 1)
;; Weight metrika do tabulky v metrics.org pod headline "Weight"
("w" "Weight" table-line
(file+headline ,(ms/org-file "metrics.org") "Weight")
"| %U | %^{Weight} | %^{Notes} |"
:kill-buffer t)
)))
;; ------------------------------------------------------------
;; (Volitelné) Kvalita života nic navíc, jen užitečné defaulty
;; ------------------------------------------------------------
(after! org
;; ať se po capture vrací do stejného okna (někomu pomáhá)
(setq org-capture-restore-window-after-quit t))
;; --------------------------------------------------
;; Dired
@@ -433,17 +456,6 @@ Funguje v libovolném textu, včetně Markdown linků (např. [x](./...))."
(setq user-mail-address "martin@sukany.cz"
user-full-name "Martin Sukany")
(map! :map mu4e-view-mode-map
:localleader
"l l" #'org-store-link
"l i" #'org-insert-link)
(map! :map mu4e-headers-mode-map
:localleader
"l l" #'org-store-link
"l i" #'org-insert-link)
;;; ================================
;;; Emacspeak robust ON/OFF for Doom
@@ -458,7 +470,7 @@ Funguje v libovolném textu, včetně Markdown linků (např. [x](./...))."
;; Emacspeak uses this to start the speech server.
(setq dtk-program my/emacspeak-wrapper)
;;(setq dtk-program "espeak")
;; State flags
(defvar my/emacspeak-loaded nil)
@@ -526,24 +538,20 @@ Funguje v libovolném textu, včetně Markdown linků (např. [x](./...))."
(:prefix ("t" . "toggle")
:desc "Speech ON" "s" #'my/emacspeak-on
:desc "Speech OFF" "S" #'my/emacspeak-off))
(setq dtk-speech-rate 300)
;; ----------------------------
;; Emacspeak defaults (global)
;; ----------------------------
(with-eval-after-load 'dtk-speak
;; Speech rate
(setq-default dtk-speech-rate 300)
;; Default punctuation mode: none / some / all
;; (Emacspeak manual: dtk-set-punctuations supports 'none 'some 'all) :contentReference[oaicite:1]{index=1}
;; (Emacspeak manual: dtk-set-punctuations supports 'none 'some 'all)
(setq dtk-speech-rate-base 300)
(setq-default dtk-punctuation-mode 'none))
(with-eval-after-load 'emacspeak
;; Typing feedback:
;; nechceš znaky, chceš slova + řádky
;; (Emacspeak manual: character/word/line echo) :contentReference[oaicite:2]{index=2}
;; (Emacspeak manual: character/word/line echo)
(setq-default emacspeak-character-echo nil)
(setq-default emacspeak-word-echo t)
(setq-default emacspeak-line-echo t))
@@ -552,3 +560,36 @@ Funguje v libovolném textu, včetně Markdown linků (např. [x](./...))."
(:prefix ("h" . "help")
:desc "Describe bindings (buffer-local)" "B" #'describe-bindings))
;; 1) ulož si globální default hodnotu
(setq dtk-default-speech-rate 400)
;; 2) aplikuj ji ve chvíli, kdy je TTS už inicializované
(with-eval-after-load 'dtk-speak
(defun my/dtk-apply-global-default-rate (&rest _)
"Apply global default speech rate after TTS init/restart."
(when (fboundp 'dtk-set-rate)
;; PREFIX arg => set GLOBAL default (per Emacspeak manual)
(ignore-errors (dtk-set-rate dtk-default-speech-rate t))))
;; po každé inicializaci/restartu TTS
(advice-add 'dtk-initialize :after #'my/dtk-apply-global-default-rate))
;; ElFeed (RSS)
(map! :leader
:desc "Elfeed" "o r" #'elfeed)
(after! org
;; pokud máš org soubory jinde než ~/org, nastav org-directory sem:
;; (setq org-directory "~/org")
;; elfeed-org: řekni mu explicitně, kde je elfeed.org
(setq rmh-elfeed-org-files
(list (expand-file-name "elfeed.org" org-directory))))
(after! elfeed
;; elfeed-org musí být inicializovaný, jinak se elfeed.org nemusí načítat
(require 'elfeed-org)
(elfeed-org))