Files
dotfiles/dotfiles/emacs.d/kat-mode.org
2026-02-01 00:54:25 -08:00

5.1 KiB

evil

(use-package evil
  :demand t
  :config
  (progn
    (evil-mode +1)))

(use-package evil-leader
  :demand t
  :config
  (global-evil-leader-mode))

(use-package evil-org
  :demand t
  :after (org evil-leader)
  :config
  (progn
    (add-hook 'org-mode-hook 'evil-org-mode)))

This makes evil-mode play nice with org-fc

(use-package org-fc
  :demand t
  :config
  (progn
    (evil-define-minor-mode-key '(normal insert emacs) 'org-fc-review-flip-mode
      (kbd "RET") 'org-fc-review-flip
      (kbd "n") 'org-fc-review-flip
      (kbd "s") 'org-fc-review-suspend-card
      (kbd "q") 'org-fc-review-quit)

    (evil-define-minor-mode-key '(normal insert emacs) 'org-fc-review-rate-mode
      (kbd "a") 'org-fc-review-rate-again
      (kbd "h") 'org-fc-review-rate-hard
      (kbd "g") 'org-fc-review-rate-good
      (kbd "e") 'org-fc-review-rate-easy
      (kbd "s") 'org-fc-review-suspend-card
      (kbd "q") 'org-fc-review-quit)))

Appearance

(setq imalison:dark-theme 'dracula)

org-mode

(setq imalison:org-whoami "Kat Huang")
(setq org-directory "~/org/")  ; This is the directory where you want to save your Org files. Change as necessary.
(add-to-list 'org-capture-templates
             '("j" "Journal" entry (file+datetree "~/org/daily-journal.org")
               "* %?\nEntered on %U\n  %i\n  %a"))
(setq org-capture-templates
      (append org-capture-templates
              '(("r" "Weekly Review" entry
                 (file+datetree "~/org/weekly_reviews.org")
                 (file "~/org/weekly_review_template.org")))))

Journal

(setq imalison:journal-template-filepath
      (imalison:join-paths org-directory "templates" "daily-journal-template.org"))

Insert a link to a task selected from agenda

(defun imalison:insert-link-to-agenda ()
  (interactive)
  (let ((all-tasks '()))
    ;; Step 1: Get the list of all org-agenda-files
    (dolist (file (org-agenda-files))
      ;; Step 2: For each file, search for all TODO headings
      (with-current-buffer (find-file-noselect file)
        (org-map-entries
         (lambda ()
           (let ((heading (org-get-heading t t t t))
                 (marker (point-marker)))
             (add-to-list 'all-tasks (cons heading marker)))))))
    ;; Step 3: Prompt the user to select a task from the list of all TODO headings
    (let* ((selected-task (completing-read "Select a task: " all-tasks nil t))
           (selected-marker (cdr (assoc selected-task all-tasks)))
           (file (marker-buffer selected-marker))
           (pos (marker-position selected-marker)))
      ;; Step 4: Insert a link to the selected task
      (insert (format "[[file:%s::%d][%s]]" (buffer-file-name file) pos selected-task)))))

org-babel

javascript

(use-package ob-js
  :ensure nil
  :after org
  :config
  (progn
    (add-to-list 'org-babel-load-languages '(js . t))
    (org-babel-do-load-languages 'org-babel-load-languages org-babel-load-languages)
    (add-to-list 'org-babel-tangle-lang-exts '("js" . "js"))))

Show daily scheduled tasks at a few points in the day

(use-package org-wild-notifier
  :after org
  :custom
  ((org-wild-notifier-day-wide-alert-times '("10am" "5pm" "10pm"))))

kat forgets to save her files

(auto-save-visited-mode +1)

Display line numbers in programming modes

(defun imalison:enable-display-line-numbers-mode ()
  (display-line-numbers-mode +1))
(add-hook 'prog-mode-hook 'imalison:enable-display-line-numbers-mode)

Disable autoflake

(use-package apheleia
  :demand t
  :config
  (progn
    (setf (alist-get 'python-mode apheleia-mode-alist)
          '(isort black))
    (setf (alist-get 'python-ts-mode apheleia-mode-alist)
          (alist-get 'python-mode apheleia-mode-alist))))

Packages

(use-package org-drill)
(require 'package)
(add-to-list 'package-archives
             '("melpa" . "https://melpa.org/packages/") t)
(package-initialize)

Disable wild notifactions

(setq org-wild-notifier-day-wide-alert-times nil)

Swift

(require 'package)
(add-to-list 'package-archives
             '("melpa" . "https://melpa.org/packages/") t)
(package-initialize)

(unless (package-installed-p 'swift-mode)
  (package-refresh-contents)
  (package-install 'swift-mode))

(unless (package-installed-p 'lsp-mode)
  (package-refresh-contents)
  (package-install 'lsp-mode))

;; Swift Mode
(require 'swift-mode)
(add-to-list 'auto-mode-alist '("\\.swift\\'" . swift-mode))

;; LSP Mode
(require 'lsp-mode)
(add-hook 'swift-mode-hook #'lsp)

;; Set the path to SourceKit-LSP if it's not in your PATH
(setq lsp-sourcekit-executable "/path/to/sourcekit-lsp")

;; Optional: Set the path to your Swift toolchain if necessary
(setq lsp-sourcekit-executable-args '("-toolchain" "/path/to/swift-toolchain"))