Skip to content

pprobst/yukimacs-doom

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

yukimacs-doom

./screenshot.png

Table of Contents

Installation

Make sure you have Doom Emacs already installed, then:

git clone https://github.com/pprobst/yukimacs-doom.git ~/.config/doom

git clone --depth 1 https://gitlab.com/protesilaos/iosevka-comfy.git ~/.local/share/fonts/iosevka-comfy

General

Shell configuration

Fix Fish shell compatibility issues (non-POSIX shell).

(setq shell-file-name (executable-find "bash"))
(setq-default vterm-shell "/usr/bin/fish")
(setq-default explicit-shell-file-name "/usr/bin/fish")

User

Some functionality uses this to identify you, e.g. GPG configuration, email clients, file templates and snippets. It is optional.

;(setq user-full-name "pprobst"
;      user-mail-address "pprobst@insiberia.net")

Font

Doom exposes five (optional) variables for controlling fonts in Doom:

  • doom-font – the primary font to use.
  • doom-variable-pitch-font – a non-monospace font (where applicable)
  • doom-big-font – used for doom-big-font-mode; use this for presentations or streaming.
  • doom-unicode-font – for unicode glyphs.
  • doom-serif-font – for the fixed-pitch-serif face; See C-h v doom-font for documentation and more examples of what they accept.
(setq doom-font (font-spec :family "Aporetic Sans Mono" :size 15)
      doom-variable-pitch-font (font-spec :family "Aporetic Sans Mono" :size 15)
      doom-big-font (font-spec :family "Aporetic Sans Mono" :size 20))

(after! doom-themes
  (setq doom-themes-enable-bold t
        doom-themes-enable-italic t))

(custom-set-faces!
    '(font-lock-comment-face :slant italic)
    '(font-lock-keyword-face :slant italic))

Theme

;; Some dark themes
;;(setq doom-theme 'yukimacs)
;;(setq doom-theme 'modus-vivendi-tinted)
;;(setq doom-theme 'modus-vivendi)
;;(setq doom-theme 'doom-one)
;;(setq doom-theme 'doom-gruvbox)
;;(setq doom-theme 'doom-tomorrow-night)
(setq doom-theme 'doom-tokyo-night)

;; Some light themes
;;(setq doom-theme 'modus-operandi)
;;(setq doom-theme 'modus-operandi-tinted)
;;(setq doom-theme 'doom-one-light)
;;(setq doom-theme 'doom-gruvbox-light)
;;(setq doom-theme 'doom-tomorrow-day)

Dashboard

(setq fancy-splash-image "~/.config/doom/banners/yukimacs-logo-classic-smaller.png")

QoL

Indent guides

(use-package! indent-bars
  :hook ((prog-mode) . indent-bars-mode)) ; or whichever modes you prefer
(setq
    indent-bars-color '(highlight :face-bg t :blend 0.15)
    indent-bars-pattern "."
    indent-bars-width-frac 0.5
    indent-bars-pad-frac 0.25
    indent-bars-zigzag nil
    indent-bars-color-by-depth '(:regexp "outline-\\([0-9]+\\)" :blend 1) ; blend=1: blend with BG only
    indent-bars-highlight-current-depth '(:blend 0.5) ; pump up the BG blend on current
    indent-bars-display-on-blank-lines t)

Display Line Numbers

;; For relative line numbers, set this to `relative`.
(setq display-line-numbers-type t)

Open specific files

(map! :leader
      (:prefix ("=" . "open file")
       :desc "Edit doom config.org"  "c" #'(lambda () (interactive) (find-file "~/.config/doom/config.org"))
       :desc "Edit doom init.el"     "i" #'(lambda () (interactive) (find-file "~/.config/doom/init.el"))
       :desc "Edit doom packages.el" "p" #'(lambda () (interactive) (find-file "~/.config/doom/packages.el"))))

Switches cursor automatically to new window

(defun split-and-follow-horizontally ()
    (interactive)
    (split-window-below)
    (balance-windows)
    (other-window 1))
(global-set-key (kbd "C-x 2") 'split-and-follow-horizontally)

(defun split-and-follow-vertically ()
    (interactive)
    (split-window-right)
    (balance-windows)
    (other-window 1))
(global-set-key (kbd "C-x 3") 'split-and-follow-vertically)

Disable lsp-lens-mode for performance

(setq lsp-lens-enable nil)

Dired

File associations

(setq dired-open-extensions '(("jpg" . "nsxiv")
                              ("png" . "nsxiv")
                              ("mkv" . "mpv")
                              ("mp3" . "mpv")
                              ("mp4" . "mpv")))

Org

Org mode

(custom-set-faces!
    '(org-level-1 :inherit outline-1 :height 1.3)
    '(org-level-2 :inherit outline-2 :height 1.2)
    '(org-level-3 :inherit outline-3 :height 1.1)
    '(org-level-4 :inherit outline-4 :height 1.0)
    '(org-level-5 :inherit outline-5 :height 1.0))

Org-roam

A plain-text personal knowledge management system.

(use-package! org-roam
:custom
(org-roam-directory "~/Notes")
(org-roam-completion-everywhere t)
(org-roam-capture-templates
    ;; "d" is the letter you'll press to choose the template.
    ;; "default" is the full name of the template.
    ;; plain is the type of text being inserted.
    ;; "%?" is the text that will be inserted.
    ;; unnarrowed t ensures that the full file will be displayed when captured.
    '(("d" "default" plain "%?"
        :if-new (file+head "%<%Y-%m-%d-%H%M%S>-${slug}.org" "#+title: ${title}\n#+date: %U\n")
        :unnarrowed t)
    ("p" "project" plain "* Goals\n\n%?\n\n* Tasks\n\n** TODO Add initial tasks\n\n* Dates\n\n"
        :if-new (file+head "%<%Y-%m-%d-%H%M%S>-${slug}.org" "#+title: ${title}\n#+filetags: project")
        :unnarrowed t)))
    (org-roam-dailies-capture-templates
        '(("d" "default daily" entry
        "* %<%H:%M> %?"
        :if-new (file+head "%<%Y-%m-%d>.org" "#+title: %<%Y-%m-%d %A>\n#+filetags: daily"))
        ("t" "task" entry
        "* TODO %?"
        :if-new (file+head "%<%Y-%m-%d>.org" "#+title: %<%Y-%m-%d %A>\n#+filetags: daily")
        :unnarrowed t)))
:bind (("C-c n l" . org-roam-buffer-toggle)
        ("C-c n f" . org-roam-node-find)
        ("C-c n i" . org-roam-node-insert)
        ("C-c n t" . org-roam-tag-add)
        ("C-c n a" . org-roam-alias-add)
        ("C-c n o" . org-id-get-create)
        :map org-mode-map
        ("C-M-i" . completion-at-point)
        :map org-roam-dailies-map
        ("Y" . org-roam-dailies-capture-yesterday)
        ("T" . org-roam-dailies-capture-tomorrow))
:bind-keymap
("C-c n d" . org-roam-dailies-map)
:config
(org-roam-setup)
(require 'org-roam-dailies) ;; Ensure the keymap is available
(org-roam-db-autosync-mode))

(defun bms/org-roam-rg-search ()
  "Search org-roam directory using consult-ripgrep. With live-preview."
  (interactive)
  (let ((consult-ripgrep "rg --null --multiline --ignore-case --type org --line-buffered --color=always --max-columns=500 --no-heading --line-number . -e ARG OPTS"))
    (consult-ripgrep org-roam-directory)))
(global-set-key (kbd "C-c rr") 'bms/org-roam-rg-search)

Packages

Beacon

Briefly highlights the cursor when switching windows/buffers.

(beacon-mode 1)

Treemacs

Display files in a tree-like structure.

(use-package! treemacs
:config
(setq treemacs-width 30)
:bind (:map global-map
    ("C-x t t" . treemacs)
    ("C-x t 1" . treemacs-select-window)))

History length

Remember more minibuffer/command history.

(setq-default history-length 1000)

Auto-activation snippets

(use-package! aas
  :commands aas-mode)

;; Same as above but specifically for LaTeX.
(use-package! laas
  :hook (LaTeX-mode . laas-mode)
  :config
  (defun laas-tex-fold-maybe ()
    (unless (equal "/" aas-transient-snippet-key)
      (+latex-fold-last-macro-a)))
  (add-hook 'aas-post-snippet-expand-hook #'laas-tex-fold-maybe))

YASnippet

Nested snippets.

(setq yas-triggers-in-field t)

Keycast

Show what you’re doing on-screen.

(use-package! keycast
  :after doom-modeline
  :commands keycast-mode
  :config
  (define-minor-mode keycast-mode
    "Show current command and its key binding in the mode line."
    :global t
    (if keycast-mode
        (progn
          (add-hook 'pre-command-hook 'keycast--update t)
          (add-to-list 'global-mode-string '("" keycast-mode-line " ")))
      (remove-hook 'pre-command-hook 'keycast--update)
      (setq global-mode-string (remove '("" keycast-mode-line " ") global-mode-string))))
  (keycast-mode))

Imenu-list

Imenu produces menus for accessing locations in documents, typically in the current buffer. ‘imenu-list’ has imenu displayed as a vertical split that you can toggle show/hide.

COMMANDDESCRIPTIONKEYBINDING
imenu-list-smart-toggleToggle imenu shown in a sidebarSPC t i
(setq imenu-list-focus-after-activation t)
(map! :leader
      (:prefix ("t" . "Toggle")
       :desc "Toggle imenu shown in a sidebar" "i" #'imenu-list-smart-toggle))

info-colors

Colorful manual pages.

(use-package! info-colors
  :commands (info-colors-fontify-node))

(add-hook 'Info-selection-hook 'info-colors-fontify-node)

ruff-format

Configure ruff as the Python formatter (built into Doom’s Python module). Format-on-save is already enabled via the (format +onsave) flag in init.el.

(set-formatter! 'ruff :modes '(python-mode python-ts-mode))

Agent-shell

Interactive shell for ACP-compatible coding agents (Claude, etc.). Requires the external claude-agent-acp binary on PATH: npm install -g @agentclientprotocol/claude-agent-acp. Anthropic uses login-based authentication by default (no API key stored here).

(use-package! agent-shell
  :defer t
  :init
  (require 'acp)
  :config
  (setq agent-shell-anthropic-authentication
        (agent-shell-anthropic-make-authentication :login t)))

LaTeX

;; Change file viewer.
(setq +latex-viewers '(zathura))

;; Using cdlatex’s snippets despite having yasnippet.
(map! :map cdlatex-mode-map
      :i "TAB" #'cdlatex-tab)

Python LSP Configuration

Configure basedpyright as the language server for Python.

(setq lsp-pyright-langserver-command "basedpyright")

About

Yukimacs, but Doom.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors