This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; emacs housekeeping | |
(tool-bar-mode -1) | |
(scroll-bar-mode -1) | |
(setq create-lockfiles nil) | |
; delete excess backup versions silently | |
(setq delete-old-versions -1) | |
; use version control | |
(setq version-control t) | |
; make backups file even when in version controlled dir | |
(setq vc-make-backup-files t) | |
; which directory to put backups file | |
(setq backup-directory-alist `(("." . "~/.emacs.d/backups"))) | |
; don't ask for confirmation when opening symlinked file | |
(setq vc-follow-symlinks t) | |
; transform backups file name | |
(setq auto-save-file-name-transforms '((".*" "~/.emacs.d/auto-save-list/" t))) | |
; inhibit useless and old-school startup screen | |
(setq inhibit-startup-screen t) | |
; silent bell when you make a mistake | |
(setq ring-bell-function 'ignore) | |
; use utf-8 by default | |
(setq coding-system-for-read 'utf-8) | |
(setq coding-system-for-write 'utf-8) | |
; sentence SHOULD end with only a point. | |
(setq sentence-end-double-space nil) | |
; toggle wrapping text at the 80th character | |
(setq default-fill-column 80) | |
; Open to inbox file | |
(find-file "~/Dropbox/darrellbanks.com/org/tasks/inbox.org") | |
;; package management | |
(require 'package) | |
(setq package-enable-at-startup nil) | |
(package-initialize) | |
(setq package-archives '(("org" . "http://orgmode.org/elpa/") | |
("gnu" . "http://elpa.gnu.org/packages/") | |
("melpa" . "https://melpa.org/packages/"))) | |
;; path management | |
(use-package exec-path-from-shell | |
:ensure t) | |
(when (memq window-system '(mac ns x)) | |
(exec-path-from-shell-initialize)) | |
(defun goto-init-file () | |
"Open the init file." | |
(interactive) | |
(find-file user-init-file)) | |
;; magit | |
(use-package magit :ensure t) | |
;; org mode | |
(use-package org | |
:config | |
(setq org-return-follows-link t) | |
(setq org-confirm-babel-evaluate nil) | |
(setq org-agenda-files '("~/Dropbox/darrellbanks.com/org/projects")) | |
(setq org-outline-path-complete-in-steps nil) | |
(setq org-refile-use-outline-path nil) | |
(setq org-todo-keyword-faces '(("NOTE" . "#ffb951"))) | |
(setq org-todo-keywords '((sequence "TODO(t)" "PROGRESS(p)" "|" "DONE(d)" "NOTE(n)"))) | |
(setq org-refile-targets '((nil :maxlevel . 1) | |
(org-agenda-files :maxlevel . 1))) | |
(setq org-capture-templates | |
'(("t" "Todo" entry (file "~/Dropbox/darrellbanks.com/org/tasks/inbox.org") | |
"* TODO %?") | |
("n" "Note" entry (file "~/Dropbox/darrellbanks.com/org/tasks/inbox.org") | |
"* NOTE %?"))) | |
(org-babel-do-load-languages | |
'org-babel-load-languages | |
'((shell . t) | |
(js . t) | |
(python . t))) | |
(org-mode-restart)) | |
(define-skeleton babel-skeleton | |
"Header info for a emacs-org file." | |
"#+TITLE:" str " \n" | |
"#+AUTHOR: Darrell Banks\n" | |
"#+email: howdy@changeset.io\n" | |
"#+INFOJS_OPT: \n" | |
"#+BABEL: :session *js* :session *python* :cache yes :results output graphics :exports both :tangle yes \n" | |
"-----" | |
) | |
;; org-roam | |
(use-package org-roam | |
:ensure t | |
:init | |
(setq org-roam-directory "~/Dropbox/darrellbanks.com/org/notes") | |
(setq org-link-file-path-type 'absolute) | |
:config | |
(org-roam-db-autosync-mode)) | |
(use-package org-roam-ui | |
:after org-roam | |
:config | |
(setq org-roam-ui-sync-theme t | |
org-roam-ui-follow t | |
org-roam-ui-update-on-save t | |
org-roam-ui-open-on-start t)) | |
;; Hugo | |
(use-package ox-hugo | |
:ensure t) | |
(setq org-hugo-base-dir "~/Dropbox/darrellbanks.com" | |
time-stamp-active t | |
time-stamp-start "#\\+lastmod:[ \t]*" | |
time-stamp-end "$" | |
time-stamp-format "%04Y-%02m-%02d") | |
(add-hook 'before-save-hook 'time-stamp nil) | |
;; Visual settings | |
;; - org mode | |
(use-package org-superstar | |
:ensure t | |
:init | |
(org-superstar-mode 1) | |
:config | |
(setq org-superstar-special-todo-items t)) | |
;; - font | |
(set-face-attribute 'default nil :font "MonoLisa" :height 180) | |
;; - icons | |
(use-package all-the-icons :ensure t) | |
;; - company | |
(use-package company | |
:ensure t | |
:init | |
(add-hook 'after-init-hook 'global-company-mode)) | |
;; - modeline | |
(use-package doom-modeline | |
:ensure t | |
:init (doom-modeline-mode 1)) | |
;; - indents | |
(setq-default indent-tabs-mode nil) | |
(setq-default tab-width 2) | |
(setq indent-line-function 'insert-space) | |
;; - themes | |
(use-package doom-themes | |
:ensure t | |
:config | |
;; Global settings (defaults) | |
(setq doom-themes-enable-bold t ; if nil, bold is universally disabled | |
doom-themes-enable-italic t) ; if nil, italics is universally disabled | |
(load-theme 'modus-vivendi t) | |
;; Corrects (and improves) org-mode's native fontification. | |
(doom-themes-org-config)) | |
;; use-package | |
(unless (package-installed-p 'use-package) ; unless it is already installed | |
(package-refresh-contents) ; updage packages archive | |
(package-install 'use-package)) ; and install the most recent version of use-package | |
(setq use-package-always-ensure t) | |
;; projectile | |
(use-package projectile :ensure t | |
:config | |
(projectile-global-mode)) | |
;; Editing | |
;; - brackets | |
(electric-pair-mode 1) | |
;; Languages | |
;; tree sitter | |
(setq treesit-extra-load-path '("~/ThirdParty/tree-sitter-module/dist")) | |
(add-to-list 'auto-mode-alist '("\\.css\\'" . css-ts-mode)) | |
(add-to-list 'auto-mode-alist '("\\.py\\'" . python-ts-mode)) | |
(add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-ts-mode)) | |
(add-to-list 'auto-mode-alist '("\\.tsx\\'" . tsx-ts-mode)) | |
;; PlantUML | |
(use-package plantuml-mode :ensure t | |
:mode (("\\.plantuml$" . plantuml-mode))) | |
(setq plantuml-executable-path "/opt/homebrew/bin/plantuml") | |
(setq plantuml-default-exec-mode 'executable) | |
;; Markdown | |
(use-package markdown-mode :ensure t) | |
;; - Eglot | |
(use-package eglot | |
:config | |
(add-to-list 'eglot-server-programs | |
'(web-mode . ("svelteserver" "--stdio")))) | |
(add-hook 'typescript-ts-mode-hook 'eglot-ensure) | |
(add-hook 'tsx-ts-mode-hook 'eglot-ensure) | |
(add-hook 'python-ts-mode-hook 'eglot-ensure) | |
(add-hook 'json-ts-mode-hook 'eglot-ensure) | |
(add-hook 'js-ts-mode-hook 'eglot-ensure) | |
(add-hook 'web-mode-hook 'eglot-ensure) | |
(add-hook 'scala-mode 'eglot-ensure) | |
;; - python | |
(add-hook 'python-ts-mode-hook 'eglot-ensure) | |
;; - haskell | |
(use-package haskell-mode :ensure t) | |
;; - web | |
(use-package web-mode :ensure t | |
:mode (("\\.html$" . web-mode))) | |
(use-package svelte-mode :ensure t | |
:mode (("\\.svelte$" . web-mode) | |
)) | |
;; - scala | |
(use-package scala-mode | |
:interpreter ("scala" . scala-mode)) | |
;; - prettier | |
(use-package prettier-js :ensure t | |
:init | |
(add-hook 'typescript-ts-mode-hook 'prettier-js-mode) | |
(add-hook 'js-mode-hook 'prettier-js-mode) | |
(add-hook 'svelte-mode-hook 'prettier-js-mode) | |
(add-hook 'web-mode-hook 'prettier-js-mode)) | |
;; flycheck | |
(use-package flycheck :ensure t) | |
;; treemacs | |
(use-package treemacs :ensure t) | |
(use-package treemacs-evil :ensure t) | |
(use-package treemacs-projectile :ensure t) | |
;; evil-mc | |
(use-package evil-mc | |
:ensure t | |
:config | |
(global-evil-mc-mode 1)) | |
;; ivy | |
(use-package ivy | |
:ensure t | |
:custom | |
(ivy-use-selectable-prompt t) | |
(ivy-count-format "(%d/%d) ") | |
(ivy-use-virtual-buffers t) | |
:config | |
(ivy-mode)) | |
(use-package ivy-rich | |
:ensure t | |
:after ivy | |
:custom | |
(ivy-virtual-abbreviate 'full | |
ivy-rich-switch-buffer-align-virtual-buffer t | |
ivy-rich-path-style 'abbrev) | |
:config | |
(ivy-set-display-transformer 'ivy-switch-buffer | |
'ivy-rich-switch-buffer-transformer)) | |
(use-package all-the-icons-ivy | |
:ensure t | |
:init (add-hook 'after-init-hook 'all-the-icons-ivy-setup)) | |
(use-package counsel | |
:after ivy | |
:ensure t | |
:config | |
(counsel-mode)) | |
(use-package counsel-projectile :ensure t) | |
;; movement | |
(use-package avy :ensure t) | |
(use-package wgrep :ensure t) | |
(use-package swiper :ensure t) | |
(use-package imenu-list :ensure t | |
:init | |
(setq imenu-list-auto-resize t) | |
(setq imenu-list-focus-after-activation t)) | |
;; Evil Mode | |
(use-package evil | |
:ensure t | |
:config | |
(evil-set-undo-system 'undo-redo) | |
(evil-mode)) | |
;; Key Bindings | |
(use-package which-key :ensure t | |
:init (which-key-mode)) | |
(use-package general :ensure t | |
:config | |
(general-evil-setup t) | |
;; xref keys | |
(general-define-key | |
:states '(normal) | |
:keymaps 'xref--xref-buffer-mode-map | |
"TAB" 'xref-goto-xref) | |
;; org keys | |
(general-define-key | |
:states '(normal visual) | |
:keymaps 'org-mode-map | |
"t" 'org-todo | |
"." 'org-time-stamp | |
"-" 'org-ctrl-c-minus | |
"+" 'org-ctrl-c-ctrl-c | |
"*" 'org-ctrl-c-star | |
"^" 'org-sort | |
"{" 'org-edit-src-code | |
"|" 'org-table-create-or-convert-from-region | |
"RET" 'org-open-at-point | |
"TAB" 'org-cycle) | |
(general-define-key | |
:states '(normal) | |
:prefix "," | |
:keymaps 'org-mode-map | |
"<backtab>" 'org-promote-subtree | |
"," "C-c C-c" | |
"/" 'org-sparse-tree | |
"b" '(:ignore t :which-key "Babel") | |
"bi" 'org-insert-structure-template | |
"bx" 'org-babel-execute-src-block | |
"bh" 'org-babel-insert-header-arg | |
"bn" 'org-babel-next-src-block | |
"bp" 'org-babel-previous-src-block | |
"bs" 'babel-skeleton | |
"c" '(:ignore t :which-key "Clocks") | |
"ci" 'org-clock-in | |
"co" 'org-clock-out | |
"cs" 'org-schedule | |
"cd" 'org-deadline | |
"t" 'org-set-tags-command | |
"o" 'org-occur | |
"r" 'org-refile | |
"A" 'org-archive-subtree | |
"il" 'org-insert-link | |
"RET" 'org-meta-return | |
"TAB" 'org-demote-subtree | |
) | |
;; general keys | |
(general-define-key | |
:states '(normal visual insert emacs treemacs) | |
:prefix "SPC" | |
:non-normal-prefix "C-SPC" | |
;; M-x | |
"SPC" '(counsel-M-x :which-key "M-x") | |
;; Applications | |
"a" '(:ignore t :which-key "Applications") | |
"ao" '(:ignore t :which-key "Org") | |
"aoa" '(org-agenda :which-key "Agenda") | |
"aoc" '(org-capture :which-key "Capture") | |
"ao>" '(org-goto-calendar :which-key "Go To Calendar") | |
"at" '(:ignore t :which-key "Treemacs") | |
"atd" '(treemacs-select-directory :which-key "Select Directory") | |
"aor" '(:ignore t :which-key "Org Roam") | |
"aori" '(org-roam-node-insert :which-key "Insert Node") | |
"aorf" '(org-roam-node-find :which-key "Find Node") | |
"aoru" '(org-roam-ui-open :which-key "Open UI") | |
"aos" '(org-edit-src-exit :which-key "Exit Src Edit") | |
;; Buffers | |
"b" '(:ignore t :which-key "Buffers") | |
"bl" '(list-buffers :which-key "List Buffers") | |
"bb" '(ivy-switch-buffer :which-key "Switch Buffer (ivy)") | |
"bd" '(kill-this-buffer :which-key "Kill Buffer") | |
"bp" '(previous-buffer :which-key "Previous Buffer") | |
"bn" '(next-buffer :which-key "Next Buffer") | |
"bs" '(scratch-buffer :which-key "Scratch Buffer") | |
;; Toggles | |
"t" '(:ignore t :which-key "Toggles") | |
"tl" '(display-line-numbers-mode :which-key "Line Numbers") | |
"ti" '(imenu-list-smart-toggle :which-key "IMenu List") | |
;; Avy | |
"j" '(:ignore t :which-key "Jump To") | |
"jl" '(avy-goto-line :which-key "Jump To Line (avy)") | |
"jw" '(avy-goto-word-1 :which-key "Jump To Worg (avy)") | |
;; Counsel | |
"/" '(counsel-ag :which-key "Search in project") | |
"p" '(:ignore t :which-key "Projectile") | |
"pp" '(counsel-projectile-switch-project :which-key "Switch Project (projectile)") | |
"pf" '(counsel-projectile-find-file :which-key "Find Files In Project (projectile)") | |
;; Files | |
"f" '(:ignore t :which-key "Files") | |
"fed" '(goto-init-file :which-key "Go to init file") | |
"ft" '(treemacs :which-key "Treemacs Filetree") | |
;; Windows | |
"w" '(:ignore t :which-key "Windows") | |
"wd" '(delete-window :which-key "Delete Window") | |
"w/" '(split-window-right :which-key "Split Window Right") | |
"w-" '(split-window-below :which-key "Split Window Below") | |
"wh" '(windmove-left :which-key "Move to Window on Left") | |
"wl" '(windmove-right :which-key "Move to Window on Right") | |
"wj" '(windmove-down :which-key "Move to Window Below") | |
"wk" '(windmove-up :which-key "Move to Window Above") | |
;; Eglot | |
"gg" '(eglot-find-typeDefinition :which-key "Find Definition") | |
"gi" '(eglot-find-implementation :which-key "Find Implementation") | |
;; Emacs | |
"q" '(:ignore t :which-key "Quit") | |
"qr" '(restart-emacs :which-key "Restart Emacs") | |
;; Images | |
"i" '(:ignore t :which-key "Images") | |
"ii" '(image-increase-size :which-key "Increase Size") | |
)) | |
(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. | |
'(connection-local-criteria-alist | |
'(((:application tramp :protocol "flatpak") | |
tramp-container-connection-local-default-flatpak-profile) | |
((:application tramp :machine "localhost") | |
tramp-connection-local-darwin-ps-profile) | |
((:application tramp :machine "W30WC2359V") | |
tramp-connection-local-darwin-ps-profile) | |
((:application tramp) | |
tramp-connection-local-default-system-profile tramp-connection-local-default-shell-profile) | |
((:application eshell) | |
eshell-connection-default-profile))) | |
'(connection-local-profile-alist | |
'((tramp-container-connection-local-default-flatpak-profile | |
(tramp-remote-path "/app/bin" tramp-default-remote-path "/bin" "/usr/bin" "/sbin" "/usr/sbin" "/usr/local/bin" "/usr/local/sbin" "/local/bin" "/local/freeware/bin" "/local/gnu/bin" "/usr/freeware/bin" "/usr/pkg/bin" "/usr/contrib/bin" "/opt/bin" "/opt/sbin" "/opt/local/bin")) | |
(tramp-connection-local-darwin-ps-profile | |
(tramp-process-attributes-ps-args "-acxww" "-o" "pid,uid,user,gid,comm=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" "-o" "state=abcde" "-o" "ppid,pgid,sess,tty,tpgid,minflt,majflt,time,pri,nice,vsz,rss,etime,pcpu,pmem,args") | |
(tramp-process-attributes-ps-format | |
(pid . number) | |
(euid . number) | |
(user . string) | |
(egid . number) | |
(comm . 52) | |
(state . 5) | |
(ppid . number) | |
(pgrp . number) | |
(sess . number) | |
(ttname . string) | |
(tpgid . number) | |
(minflt . number) | |
(majflt . number) | |
(time . tramp-ps-time) | |
(pri . number) | |
(nice . number) | |
(vsize . number) | |
(rss . number) | |
(etime . tramp-ps-time) | |
(pcpu . number) | |
(pmem . number) | |
(args))) | |
(tramp-connection-local-busybox-ps-profile | |
(tramp-process-attributes-ps-args "-o" "pid,user,group,comm=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" "-o" "stat=abcde" "-o" "ppid,pgid,tty,time,nice,etime,args") | |
(tramp-process-attributes-ps-format | |
(pid . number) | |
(user . string) | |
(group . string) | |
(comm . 52) | |
(state . 5) | |
(ppid . number) | |
(pgrp . number) | |
(ttname . string) | |
(time . tramp-ps-time) | |
(nice . number) | |
(etime . tramp-ps-time) | |
(args))) | |
(tramp-connection-local-bsd-ps-profile | |
(tramp-process-attributes-ps-args "-acxww" "-o" "pid,euid,user,egid,egroup,comm=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" "-o" "state,ppid,pgid,sid,tty,tpgid,minflt,majflt,time,pri,nice,vsz,rss,etimes,pcpu,pmem,args") | |
(tramp-process-attributes-ps-format | |
(pid . number) | |
(euid . number) | |
(user . string) | |
(egid . number) | |
(group . string) | |
(comm . 52) | |
(state . string) | |
(ppid . number) | |
(pgrp . number) | |
(sess . number) | |
(ttname . string) | |
(tpgid . number) | |
(minflt . number) | |
(majflt . number) | |
(time . tramp-ps-time) | |
(pri . number) | |
(nice . number) | |
(vsize . number) | |
(rss . number) | |
(etime . number) | |
(pcpu . number) | |
(pmem . number) | |
(args))) | |
(tramp-connection-local-default-shell-profile | |
(shell-file-name . "/bin/sh") | |
(shell-command-switch . "-c")) | |
(tramp-connection-local-default-system-profile | |
(path-separator . ":") | |
(null-device . "/dev/null")) | |
(eshell-connection-default-profile | |
(eshell-path-env-list)))) | |
'(custom-safe-themes | |
'("eb7cd622a0916358a6ef6305e661c6abfad4decb4a7c12e73d6df871b8a195f8" "11873c4fbf465b956889adfa9182495db3bf214d9a70c0f858f07f6cc91cbd47" "d395c1793e0d64797d711c870571a0033174ca321ed48444efbe640bf692bf4f" "b2779867957a4b9de84bcd33c5ded92e943c710c4c5c5b7fc874786eaf63ca5c" "7ea883b13485f175d3075c72fceab701b5bf76b2076f024da50dff4107d0db25" "8d8207a39e18e2cc95ebddf62f841442d36fcba01a2a9451773d4ed30b632443" "570263442ce6735821600ec74a9b032bc5512ed4539faf61168f2fdf747e0668" "00cec71d41047ebabeb310a325c365d5bc4b7fab0a681a2a108d32fb161b4006" "adaf421037f4ae6725aa9f5654a2ed49e2cd2765f71e19a7d26a454491b486eb" "60ada0ff6b91687f1a04cc17ad04119e59a7542644c7c59fc135909499400ab8" "9d29a302302cce971d988eb51bd17c1d2be6cd68305710446f658958c0640f68" "a9abd706a4183711ffcca0d6da3808ec0f59be0e8336868669dc3b10381afb6f" "991ca4dbb23cab4f45c1463c187ac80de9e6a718edc8640003892a2523cb6259" "f458b92de1f6cf0bdda6bce23433877e94816c3364b821eb4ea9852112f5d7dc" "bf948e3f55a8cd1f420373410911d0a50be5a04a8886cabe8d8e471ad8fdba8e" "2f8eadc12bf60b581674a41ddc319a40ed373dd4a7c577933acaff15d2bf7cc6" "680f62b751481cc5b5b44aeab824e5683cf13792c006aeba1c25ce2d89826426" "a589c43f8dd8761075a2d6b8d069fc985660e731ae26f6eddef7068fece8a414" "7a424478cb77a96af2c0f50cfb4e2a88647b3ccca225f8c650ed45b7f50d9525" "49acd691c89118c0768c4fb9a333af33e3d2dca48e6f79787478757071d64e68" "e9776d12e4ccb722a2a732c6e80423331bcb93f02e089ba2a4b02e85de1cf00e" "e0d42a58c84161a0744ceab595370cbe290949968ab62273aed6212df0ea94b4" "b6a32f5bbe3c636432bdaa0bb7a5e24f7419cb1787135cc6295ac07d2fac628a" "0f4182fe2e7d9020f9ac275b11ca6f7d5a4cb4937764f3f8f73ab005c1fd6a23" "30dc9873c16a0efb187bb3f8687c16aae46b86ddc34881b7cae5273e56b97580" "1d89fcf0105dd8778e007239c481643cc5a695f2a029c9f30bd62c9d5df6418d" default)) | |
'(package-selected-packages | |
'(haskell-mode modus-themes org-roam-ui all-the-icons-ivy web-mode doom-modeline all-the-icons evil avy))) | |
(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. | |
'(default ((t (:background nil))))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment