163 lines
6.1 KiB
EmacsLisp
163 lines
6.1 KiB
EmacsLisp
;;; -*- lexical-binding: t -*-
|
|
(custom-set-variables
|
|
;; custom-set-variables was added by Custom.
|
|
;; If you edit it by hand, you could mess it up, so be careful.
|
|
;; Your init file should contain only one such instance.
|
|
;; If there is more than one, they won't work right.
|
|
'(package-selected-packages
|
|
'(anki-editor docker docker-compose-mode docker-tramp ejc-sql fcitx))
|
|
'(sql-connection-alist
|
|
'(("postgres" (sql-product 'postgres) (sql-user "myuser")
|
|
(sql-database "mydatabase") (sql-server "localhost") (sql-port 5433)))))
|
|
(custom-set-faces
|
|
;; custom-set-faces was added by Custom.
|
|
;; If you edit it by hand, you could mess it up, so be careful.
|
|
;; Your init file should contain only one such instance.
|
|
;; If there is more than one, they won't work right.
|
|
)
|
|
(use-package docker
|
|
:ensure t
|
|
:bind ("C-c d" . docker))
|
|
|
|
;;(setq sql-postgres-login-params (append sql-postgres-login-params '(port)))
|
|
(setq org-roam-directory (file-truename "~/org-roam/"))
|
|
(setq org-roam-node-display-template
|
|
(concat "${title:*} " (propertize "${tags:10}" 'face 'org-tag)))
|
|
(org-roam-db-autosync-mode)
|
|
(setq org-roam-complete-everywhere t)
|
|
(map! :map org-mode-map
|
|
:leader
|
|
(:prefix ("n r" . "roam")
|
|
:desc "Completion at point" "c" #'completion-at-point))
|
|
(defun insert-org-link-with-prompt ()
|
|
"Prompt for description and link, then insert Org-mode style [[link][description]]"
|
|
(interactive)
|
|
(let ((link (read-string "Link (first []): "))
|
|
(desc (read-string "Description (second []): ")))
|
|
(insert (format "[[%s][%s]]" link desc))))
|
|
(map! :leader
|
|
:desc "Insert Org link with prompt"
|
|
"i l" #'insert-org-link-with-prompt)
|
|
(use-package anki-editor
|
|
:after org
|
|
:bind (:map org-mode-map
|
|
("<f12>" . anki-editor-cloze-region-auto-incr)
|
|
("<f11>" . anki-editor-cloze-region-dont-incr)
|
|
("<f10>" . anki-editor-reset-cloze-number)
|
|
("<f9>" . anki-editor-push-tree))
|
|
:hook (org-capture-after-finalize . anki-editor-reset-cloze-number) ; Reset cloze-number after each capture.
|
|
:config
|
|
(setq anki-editor-create-decks t ;; Allow anki-editor to create a new deck if it doesn't exist
|
|
anki-editor-org-tags-as-anki-tags t)
|
|
|
|
(defun anki-editor-cloze-region-auto-incr (&optional arg)
|
|
"Cloze region without hint and increase card number."
|
|
(interactive)
|
|
(anki-editor-cloze-region my-anki-editor-cloze-number "")
|
|
(setq my-anki-editor-cloze-number (1+ my-anki-editor-cloze-number))
|
|
(forward-sexp))
|
|
(defun anki-editor-cloze-region-dont-incr (&optional arg)
|
|
"Cloze region without hint using the previous card number."
|
|
(interactive)
|
|
(anki-editor-cloze-region (1- my-anki-editor-cloze-number) "")
|
|
(forward-sexp))
|
|
(defun anki-editor-reset-cloze-number (&optional arg)
|
|
"Reset cloze number to ARG or 1"
|
|
(interactive)
|
|
(setq my-anki-editor-cloze-number (or arg 1)))
|
|
(defun anki-editor-push-tree ()
|
|
"Push all notes under a tree."
|
|
(interactive)
|
|
(anki-editor-push-notes '(4))
|
|
(anki-editor-reset-cloze-number))
|
|
;; Initialize
|
|
(anki-editor-reset-cloze-number)
|
|
)
|
|
(map! :map magit-mode-map
|
|
:leader
|
|
(:prefix ("g c a" . "file-checkout")
|
|
:desc "file checkout from branch" "c" #'magit-file-checkout))
|
|
(defun my/fcitx5-disable ()
|
|
"Disable fcitx5 input method."
|
|
(interactive)
|
|
(call-process "fcitx5-remote" nil nil nil "-c"))
|
|
|
|
(defun my/fcitx5-enable ()
|
|
"Enable fcitx5 input method."
|
|
(interactive)
|
|
(call-process "fcitx5-remote" nil nil nil "-o"))
|
|
|
|
(global-set-key (kbd "<f12>") 'my/fcitx5-disable)
|
|
(global-set-key (kbd "<f11>") 'my/fcitx5-enable)
|
|
(defun my/org-in-src-block-p ()
|
|
"Return t if point is inside an Org src block."
|
|
(when (derived-mode-p 'org-mode)
|
|
(let ((element (org-element-at-point)))
|
|
(and (eq (car element) 'src-block)
|
|
(<= (org-element-property :begin element) (point))
|
|
(< (point) (org-element-property :end element))))))
|
|
|
|
(defun my/update-fcitx5-based-on-context ()
|
|
"Enable or disable Fcitx5 based on whether point is in org-mode and not in a src block."
|
|
(when (and (bound-and-true-p evil-insert-state-minor-mode)
|
|
(derived-mode-p 'org-mode))
|
|
(if (my/org-in-src-block-p)
|
|
(call-process "fcitx5-remote" nil nil nil "-c") ; Disable
|
|
(call-process "fcitx5-remote" nil nil nil "-o")))) ; Enable
|
|
|
|
(defun my/disable-fcitx5-on-esc ()
|
|
"Always disable Fcitx5 on exiting insert state."
|
|
(call-process "fcitx5-remote" nil nil nil "-c"))
|
|
|
|
(defun my/start-fcitx5-monitor ()
|
|
"Start monitoring cursor movement during insert state in org-mode."
|
|
(add-hook 'post-command-hook #'my/update-fcitx5-based-on-context nil t))
|
|
|
|
(defun my/stop-fcitx5-monitor ()
|
|
"Stop monitoring when leaving insert state."
|
|
(remove-hook 'post-command-hook #'my/update-fcitx5-based-on-context t))
|
|
|
|
(add-hook 'evil-insert-state-entry-hook #'my/start-fcitx5-monitor)
|
|
(add-hook 'evil-insert-state-exit-hook #'my/stop-fcitx5-monitor)
|
|
(add-hook 'evil-insert-state-exit-hook #'my/disable-fcitx5-on-esc)
|
|
(setq org-hide-emphasis-markers t)
|
|
(with-eval-after-load 'org (global-org-modern-mode))
|
|
;; Minimal UI
|
|
(package-initialize)
|
|
(menu-bar-mode -1)
|
|
(tool-bar-mode -1)
|
|
(scroll-bar-mode -1)
|
|
(modus-themes-load-operandi)
|
|
|
|
;; Choose some fonts
|
|
;; (set-face-attribute 'default nil :family "Iosevka")
|
|
;; (set-face-attribute 'variable-pitch nil :family "Iosevka Aile")
|
|
;; (set-face-attribute 'org-modern-symbol nil :family "Iosevka")
|
|
|
|
;; Add frame borders and window dividers
|
|
(modify-all-frames-parameters
|
|
'((right-divider-width . 40)
|
|
(internal-border-width . 40)))
|
|
(dolist (face '(window-divider
|
|
window-divider-first-pixel
|
|
window-divider-last-pixel))
|
|
(face-spec-reset-face face)
|
|
(set-face-foreground face (face-attribute 'default :background)))
|
|
(set-face-background 'fringe (face-attribute 'default :background))
|
|
|
|
(setq
|
|
;; Edit settings
|
|
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 styling, hide markup etc.
|
|
org-hide-emphasis-markers t
|
|
org-pretty-entities t
|
|
org-agenda-tags-column 0
|
|
org-ellipsis "…")
|
|
|
|
(global-org-modern-mode)
|