Compare commits
2 Commits
ef7df59e34
...
eca14f3542
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
eca14f3542 | ||
|
|
03ec094e1f |
87
laptop/.config/emacs/dev-settings.el
Normal file
87
laptop/.config/emacs/dev-settings.el
Normal file
@@ -0,0 +1,87 @@
|
||||
;;; dev-settings.el --- Laptop development environment
|
||||
|
||||
;;; DAP Mode
|
||||
|
||||
(use-package dap-mode
|
||||
:defer t
|
||||
:commands (dap-mode dap-debug)
|
||||
:config
|
||||
(require 'dap-gdb-lldb)
|
||||
(require 'dap-cpptools))
|
||||
|
||||
;;; C / C++
|
||||
|
||||
(use-package c-ts-mode
|
||||
:ensure nil
|
||||
:mode (("\\.c\\'" . c-ts-mode)
|
||||
("\\.h\\'" . c-ts-mode)
|
||||
("\\.cpp\\'" . c++-ts-mode)
|
||||
("\\.hpp\\'" . c++-ts-mode)
|
||||
("\\.cc\\'" . c++-ts-mode)
|
||||
("\\.cxx\\'" . c++-ts-mode))
|
||||
:hook ((c-ts-mode . eglot-ensure)
|
||||
(c++-ts-mode . eglot-ensure))
|
||||
:config
|
||||
(setq c-ts-mode-indent-offset 4))
|
||||
|
||||
;;; Go
|
||||
|
||||
(use-package go-ts-mode
|
||||
:ensure nil
|
||||
:mode "\\.go\\'"
|
||||
:hook (go-ts-mode . eglot-ensure)
|
||||
:config
|
||||
(setq go-ts-mode-indent-offset 4))
|
||||
|
||||
(with-eval-after-load 'dap-mode
|
||||
(require 'dap-dlv-go))
|
||||
|
||||
;;; Rust
|
||||
|
||||
(use-package rust-ts-mode
|
||||
:ensure nil
|
||||
:mode "\\.rs\\'"
|
||||
:hook (rust-ts-mode . eglot-ensure)
|
||||
:config
|
||||
(setq rust-ts-mode-indent-offset 4))
|
||||
|
||||
;; rust-analyzer is installed via: rustup component add rust-analyzer
|
||||
(with-eval-after-load 'eglot
|
||||
(add-to-list 'eglot-server-programs
|
||||
'(rust-ts-mode . ("rust-analyzer"))))
|
||||
|
||||
;;; Common Lisp
|
||||
|
||||
(use-package slime
|
||||
:defer t
|
||||
:commands slime
|
||||
:config
|
||||
(setq inferior-lisp-program "sbcl")
|
||||
(setq slime-contribs '(slime-fancy slime-company))
|
||||
(setq slime-lisp-implementations
|
||||
'((sbcl ("sbcl") :coding-system utf-8-unix)
|
||||
(ccl ("ccl") :coding-system utf-8-unix))))
|
||||
|
||||
(use-package slime-company
|
||||
:defer t
|
||||
:after (slime company)
|
||||
:config
|
||||
(setq slime-company-completion 'fuzzy))
|
||||
|
||||
;;; DAP Keybindings
|
||||
|
||||
(with-eval-after-load 'dap-mode
|
||||
(keymap-set dap-mode-map "C-c d d" #'dap-debug)
|
||||
(keymap-set dap-mode-map "C-c d b" #'dap-breakpoint-toggle)
|
||||
(keymap-set dap-mode-map "C-c d c" #'dap-continue)
|
||||
(keymap-set dap-mode-map "C-c d n" #'dap-next)
|
||||
(keymap-set dap-mode-map "C-c d i" #'dap-step-in)
|
||||
(keymap-set dap-mode-map "C-c d o" #'dap-step-out)
|
||||
(keymap-set dap-mode-map "C-c d r" #'dap-restart-frame)
|
||||
(keymap-set dap-mode-map "C-c d q" #'dap-disconnect)
|
||||
(keymap-set dap-mode-map "C-c d e" #'dap-eval)
|
||||
(keymap-set dap-mode-map "C-c d l" #'dap-ui-locals)
|
||||
(keymap-set dap-mode-map "C-c d s" #'dap-ui-sessions))
|
||||
|
||||
(provide 'dev-settings)
|
||||
;;; dev-settings.el ends here
|
||||
34
laptop/.config/emacs/latex-settings.el
Normal file
34
laptop/.config/emacs/latex-settings.el
Normal file
@@ -0,0 +1,34 @@
|
||||
;;; latex-settings.el --- AUCTeX / LaTeX configuration
|
||||
|
||||
(use-package auctex
|
||||
:defer t
|
||||
:init
|
||||
(setq TeX-auto-save t ; cache style info in auto/ for faster opens
|
||||
TeX-parse-self t ; parse document on open for completions
|
||||
TeX-PDF-mode t ; compile to PDF by default
|
||||
TeX-source-correlate-mode t ; SyncTeX: link editor positions to PDF
|
||||
TeX-source-correlate-start-server t)
|
||||
:hook
|
||||
((LaTeX-mode . LaTeX-math-mode)
|
||||
(LaTeX-mode . flyspell-mode)
|
||||
(LaTeX-mode . reftex-mode))
|
||||
:config
|
||||
(setq reftex-plug-into-AUCTeX t)
|
||||
;; Use zathura as the PDF viewer (SyncTeX: click in PDF jumps to source line)
|
||||
(add-to-list 'TeX-view-program-selection '(output-pdf "Zathura"))
|
||||
;; LatexMk handles multiple pdflatex passes, bibliography, index automatically
|
||||
(add-to-list 'TeX-command-list
|
||||
'("LatexMk" "latexmk -pdf -interaction=nonstopmode %s"
|
||||
TeX-run-TeX nil t :help "Run latexmk"))
|
||||
(setq TeX-command-default "LatexMk")
|
||||
|
||||
(defun rh/latex-build-pdf ()
|
||||
"Compile the current LaTeX buffer to PDF using latexmk."
|
||||
(interactive)
|
||||
(TeX-command "LatexMk" #'TeX-master-file))
|
||||
|
||||
(with-eval-after-load 'latex
|
||||
(define-key LaTeX-mode-map (kbd "C-c C-b") #'rh/latex-build-pdf)))
|
||||
|
||||
(provide 'latex-settings)
|
||||
;;; latex-settings.el ends here
|
||||
77
shared/.config/emacs/common-dev-settings.el
Normal file
77
shared/.config/emacs/common-dev-settings.el
Normal file
@@ -0,0 +1,77 @@
|
||||
;;; common-dev-settings.el --- Dev tooling shared across all hosts
|
||||
|
||||
;;; Completion
|
||||
|
||||
(use-package company
|
||||
:defer 1
|
||||
:config
|
||||
(global-company-mode)
|
||||
(setq company-idle-delay 0.2
|
||||
company-minimum-prefix-length 2
|
||||
company-show-numbers t
|
||||
company-tooltip-align-annotations t))
|
||||
|
||||
;;; LSP
|
||||
|
||||
(use-package eglot
|
||||
:ensure nil
|
||||
:defer t
|
||||
:commands (eglot eglot-ensure)
|
||||
:config
|
||||
(setq eglot-autoshutdown t
|
||||
eglot-send-changes-idle-time 0.5)
|
||||
(setq eldoc-echo-area-use-multiline-p nil)
|
||||
(add-to-list 'eglot-stay-out-of 'eldoc))
|
||||
|
||||
;;; Tree-sitter mode management
|
||||
;; Grammar sources and installation are host-specific; see dev-settings.el.
|
||||
|
||||
(use-package treesit-auto
|
||||
:custom
|
||||
(treesit-auto-install 'prompt)
|
||||
:config
|
||||
(treesit-auto-add-to-auto-mode-alist 'all)
|
||||
(global-treesit-auto-mode))
|
||||
|
||||
;;; Utilities
|
||||
|
||||
(use-package helpful
|
||||
:defer t
|
||||
:commands (helpful-callable helpful-variable helpful-key))
|
||||
|
||||
(use-package smartparens
|
||||
:defer 1
|
||||
:hook (prog-mode . smartparens-mode)
|
||||
:config
|
||||
(require 'smartparens-config))
|
||||
|
||||
(use-package yasnippet
|
||||
:defer 2
|
||||
:config
|
||||
(yas-global-mode 1))
|
||||
|
||||
(use-package yasnippet-snippets
|
||||
:defer t
|
||||
:after yasnippet)
|
||||
|
||||
;;; Emacs Lisp
|
||||
|
||||
(add-hook 'emacs-lisp-mode-hook #'eldoc-mode)
|
||||
(add-hook 'emacs-lisp-mode-hook #'company-mode)
|
||||
|
||||
;;; LSP Keybindings
|
||||
|
||||
(with-eval-after-load 'eglot
|
||||
(keymap-set eglot-mode-map "C-c l d" #'xref-find-definitions)
|
||||
(keymap-set eglot-mode-map "C-c l r" #'xref-find-references)
|
||||
(keymap-set eglot-mode-map "C-c l i" #'eglot-find-implementation)
|
||||
(keymap-set eglot-mode-map "C-c l t" #'eglot-find-typeDefinition)
|
||||
(keymap-set eglot-mode-map "C-c l h" #'eldoc-doc-buffer)
|
||||
(keymap-set eglot-mode-map "C-c l s" #'eldoc)
|
||||
(keymap-set eglot-mode-map "C-c l a" #'eglot-code-actions)
|
||||
(keymap-set eglot-mode-map "C-c l n" #'eglot-rename)
|
||||
(keymap-set eglot-mode-map "C-c l e" #'flymake-show-buffer-diagnostics)
|
||||
(keymap-set eglot-mode-map "C-c l f" #'eglot-format-buffer))
|
||||
|
||||
(provide 'common-dev-settings)
|
||||
;;; common-dev-settings.el ends here
|
||||
159
shared/.config/emacs/init.el
Normal file
159
shared/.config/emacs/init.el
Normal file
@@ -0,0 +1,159 @@
|
||||
;; init.el
|
||||
|
||||
(defun rh/load-user-file (file)
|
||||
"Load FILE from `user-emacs-directory' when it exists."
|
||||
(let ((path (expand-file-name file user-emacs-directory)))
|
||||
(when (file-exists-p path)
|
||||
(load path nil 'nomessage))))
|
||||
|
||||
;;; Startup/UI ---------------------------------------------------------------
|
||||
|
||||
(setq inhibit-startup-message t
|
||||
visible-bell t)
|
||||
|
||||
(scroll-bar-mode -1)
|
||||
(tool-bar-mode -1)
|
||||
(tooltip-mode -1)
|
||||
(menu-bar-mode -1)
|
||||
|
||||
;;; Editing Defaults ---------------------------------------------------------
|
||||
|
||||
(global-display-line-numbers-mode 1)
|
||||
(setq display-line-numbers-type 'relative)
|
||||
|
||||
(setq make-backup-files nil
|
||||
auto-save-default nil
|
||||
create-lockfiles nil)
|
||||
|
||||
(setq vc-follow-symlinks t
|
||||
find-file-visit-truename t)
|
||||
|
||||
;;; Package Manager ----------------------------------------------------------
|
||||
|
||||
(require 'package)
|
||||
|
||||
(setq package-archives '(("melpa" . "https://melpa.org/packages/")
|
||||
("elpa" . "https://elpa.gnu.org/packages/")))
|
||||
|
||||
(package-initialize)
|
||||
(unless package-archive-contents
|
||||
(package-refresh-contents))
|
||||
|
||||
(unless (package-installed-p 'use-package)
|
||||
(package-install 'use-package))
|
||||
|
||||
(require 'use-package)
|
||||
(setq use-package-always-ensure t)
|
||||
|
||||
(setq custom-file (expand-file-name "custom.el" user-emacs-directory))
|
||||
|
||||
;;; Style/Theme --------------------------------------------------------------
|
||||
|
||||
(use-package catppuccin-theme
|
||||
:init
|
||||
(setq catppuccin-flavor 'mocha)
|
||||
:config
|
||||
(load-theme 'catppuccin t))
|
||||
|
||||
;; Icons are only useful in GUI Emacs.
|
||||
(use-package all-the-icons
|
||||
:if (display-graphic-p))
|
||||
|
||||
;; Color nested delimiters in programming buffers.
|
||||
(use-package rainbow-delimiters
|
||||
:hook (prog-mode . rainbow-delimiters-mode))
|
||||
|
||||
(use-package doom-modeline
|
||||
:init
|
||||
(doom-modeline-mode 1)
|
||||
:config
|
||||
(setq doom-modeline-height 15))
|
||||
|
||||
;;; Completion/Search/Navigation ---------------------------------------------
|
||||
|
||||
(use-package vertico
|
||||
:init
|
||||
(vertico-mode))
|
||||
|
||||
(use-package consult
|
||||
:bind (("C-x b" . consult-buffer)
|
||||
("C-s" . consult-line)
|
||||
("M-y" . consult-yank-pop)))
|
||||
|
||||
(use-package orderless
|
||||
:config
|
||||
(setq completion-styles '(orderless basic)
|
||||
completion-category-defaults nil))
|
||||
|
||||
(use-package marginalia
|
||||
:init
|
||||
(marginalia-mode))
|
||||
|
||||
(use-package embark
|
||||
:bind (("C-." . embark-act)
|
||||
("M-." . embark-dwim)))
|
||||
|
||||
(use-package embark-consult
|
||||
:after (embark consult))
|
||||
|
||||
(use-package which-key
|
||||
:init
|
||||
(which-key-mode)
|
||||
:config
|
||||
(setq which-key-idle-delay 1))
|
||||
|
||||
;;; Key Bindings -------------------------------------------------------------
|
||||
|
||||
;; Make ESC quit prompts.
|
||||
(global-set-key (kbd "<escape>") #'keyboard-escape-quit)
|
||||
|
||||
;; windmove: S-Arrow to move between windows (built-in since Emacs 27).
|
||||
(windmove-default-keybindings)
|
||||
|
||||
;;; Projects -----------------------------------------------------------------
|
||||
|
||||
(use-package projectile
|
||||
:init
|
||||
(when (file-directory-p "~/src")
|
||||
(setq projectile-project-search-path '("~/src")))
|
||||
(setq projectile-switch-project-action #'projectile-dired)
|
||||
:config
|
||||
(projectile-mode 1)
|
||||
:bind-keymap
|
||||
("C-c p" . projectile-command-map))
|
||||
|
||||
(use-package consult-projectile
|
||||
:bind (("C-c h" . consult-projectile)))
|
||||
|
||||
;;; Git ----------------------------------------------------------------------
|
||||
|
||||
(use-package magit
|
||||
:commands (magit-status magit-get-current-branch)
|
||||
:bind (("C-x g" . magit-status)
|
||||
("C-x M-g" . magit-dispatch)
|
||||
("C-c M-g" . magit-file-dispatch))
|
||||
:custom
|
||||
(magit-display-buffer-function #'magit-display-buffer-same-window-except-diff-v1)
|
||||
(magit-diff-refine-hunk t)
|
||||
(magit-auto-revert-mode nil)
|
||||
(magit-process-find-password-functions '(magit-process-password-auth-source)))
|
||||
|
||||
;;; Org ----------------------------------------------------------------------
|
||||
|
||||
(defun rh/org-mode-setup ()
|
||||
(org-indent-mode)
|
||||
(visual-line-mode 1))
|
||||
|
||||
(use-package org
|
||||
:hook (org-mode . rh/org-mode-setup)
|
||||
:config
|
||||
(setq org-agenda-files
|
||||
(if (file-directory-p "~/org")
|
||||
(directory-files-recursively "~/org" "\\.org$")
|
||||
nil)))
|
||||
|
||||
(rh/load-user-file "org-bindings.el")
|
||||
(rh/load-user-file "common-dev-settings.el")
|
||||
(rh/load-user-file "dev-settings.el")
|
||||
(rh/load-user-file "latex-settings.el")
|
||||
(rh/load-user-file "custom.el")
|
||||
35
shared/.config/emacs/org-bindings.el
Normal file
35
shared/.config/emacs/org-bindings.el
Normal file
@@ -0,0 +1,35 @@
|
||||
;;; org-bindings.el --- Standard Emacs keybindings for Org mode
|
||||
|
||||
(with-eval-after-load 'org
|
||||
;; Org agenda and capture
|
||||
(global-set-key (kbd "C-c o a") 'org-agenda)
|
||||
(global-set-key (kbd "C-c o c") 'org-capture)
|
||||
|
||||
;; Link commands
|
||||
(define-key org-mode-map (kbd "C-c o l") 'org-store-link)
|
||||
(define-key org-mode-map (kbd "C-c o i") 'org-insert-link)
|
||||
|
||||
;; TODO and scheduling
|
||||
(define-key org-mode-map (kbd "C-c o t") 'org-todo)
|
||||
(define-key org-mode-map (kbd "C-c o s") 'org-schedule)
|
||||
(define-key org-mode-map (kbd "C-c o d") 'org-deadline)
|
||||
(define-key org-mode-map (kbd "C-c o T") 'org-time-stamp)
|
||||
(define-key org-mode-map (kbd "C-c o p") 'org-priority)
|
||||
|
||||
;; Checkboxes and lists
|
||||
(define-key org-mode-map (kbd "C-c o x") 'org-toggle-checkbox)
|
||||
(define-key org-mode-map (kbd "C-c o -") 'org-ctrl-c-minus)
|
||||
|
||||
;; Refile
|
||||
(define-key org-mode-map (kbd "C-c o r") 'org-refile))
|
||||
|
||||
;; Theme selection
|
||||
(global-set-key (kbd "C-c t t") 'consult-theme)
|
||||
|
||||
;; Text scaling with standard Emacs bindings
|
||||
(global-set-key (kbd "C-x C-=") 'text-scale-increase)
|
||||
(global-set-key (kbd "C-x C--") 'text-scale-decrease)
|
||||
(global-set-key (kbd "C-x C-0") 'text-scale-adjust)
|
||||
|
||||
(provide 'org-bindings)
|
||||
;;; org-bindings.el ends here
|
||||
@@ -7,6 +7,7 @@
|
||||
"guess-indent.nvim": { "branch": "main", "commit": "84a4987ff36798c2fc1169cbaff67960aed9776f" },
|
||||
"harpoon": { "branch": "harpoon2", "commit": "87b1a3506211538f460786c23f98ec63ad9af4e5" },
|
||||
"lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" },
|
||||
"lazygit.nvim": { "branch": "main", "commit": "a04ad0dbc725134edbee3a5eea29290976695357" },
|
||||
"mason-lspconfig.nvim": { "branch": "main", "commit": "0a3b42c3e503df87aef6d6513e13148381495c3a" },
|
||||
"mason-nvim-dap.nvim": { "branch": "main", "commit": "9a10e096703966335bd5c46c8c875d5b0690dade" },
|
||||
"mason-tool-installer.nvim": { "branch": "main", "commit": "443f1ef8b5e6bf47045cb2217b6f748a223cf7dc" },
|
||||
|
||||
@@ -18,6 +18,7 @@ PROMPT="%F{blue}%m %~%b"$'\n'"%(?.%F{green}%Bλ%b |.%F{red}?) %f"
|
||||
export PATH="$HOME/.local/bin:$HOME/.cargo/bin:$HOME/go/bin:$HOME/.local/bin:$PATH"
|
||||
|
||||
# Aliases
|
||||
alias e="emacsclient -t -a \"\""
|
||||
alias mailsync="mbsync -a"
|
||||
alias c="clear"
|
||||
alias cat="bat --paging=never --style=plain"
|
||||
|
||||
62
work/.config/emacs/dev-settings.el
Normal file
62
work/.config/emacs/dev-settings.el
Normal file
@@ -0,0 +1,62 @@
|
||||
;;; dev-settings.el --- Work development environment (C#, TypeScript, JavaScript, CSS, HTML)
|
||||
|
||||
;;; C#
|
||||
;; LSP server: dotnet tool install -g csharp-ls
|
||||
|
||||
(use-package csharp-ts-mode
|
||||
:ensure nil
|
||||
:mode "\\.cs\\'"
|
||||
:hook (csharp-ts-mode . eglot-ensure))
|
||||
|
||||
;;; TypeScript / TSX
|
||||
|
||||
(use-package typescript-ts-mode
|
||||
:ensure nil
|
||||
:mode (("\\.ts\\'" . typescript-ts-mode)
|
||||
("\\.tsx\\'" . tsx-ts-mode))
|
||||
:hook ((typescript-ts-mode . eglot-ensure)
|
||||
(tsx-ts-mode . eglot-ensure)))
|
||||
|
||||
;;; JavaScript / JSX
|
||||
;; typescript-language-server handles JS too; install via: npm i -g typescript-language-server typescript
|
||||
|
||||
(use-package js-ts-mode
|
||||
:ensure nil
|
||||
:mode (("\\.js\\'" . js-ts-mode)
|
||||
("\\.mjs\\'" . js-ts-mode)
|
||||
("\\.cjs\\'" . js-ts-mode)
|
||||
("\\.jsx\\'" . js-ts-mode))
|
||||
:hook (js-ts-mode . eglot-ensure)
|
||||
:config
|
||||
(setq js-indent-level 2))
|
||||
|
||||
;;; CSS
|
||||
;; LSP server: npm i -g vscode-langservers-extracted
|
||||
|
||||
(use-package css-ts-mode
|
||||
:ensure nil
|
||||
:mode "\\.css\\'"
|
||||
:hook (css-ts-mode . eglot-ensure)
|
||||
:config
|
||||
(setq css-indent-offset 2))
|
||||
|
||||
;;; HTML
|
||||
;; LSP server: npm i -g vscode-langservers-extracted
|
||||
|
||||
(use-package html-ts-mode
|
||||
:ensure nil
|
||||
:mode (("\\.html\\'" . html-ts-mode)
|
||||
("\\.htm\\'" . html-ts-mode))
|
||||
:hook (html-ts-mode . eglot-ensure))
|
||||
|
||||
;;; Prettier (formatting for JS/TS/CSS/HTML)
|
||||
|
||||
(use-package prettier
|
||||
:hook ((typescript-ts-mode . prettier-mode)
|
||||
(tsx-ts-mode . prettier-mode)
|
||||
(js-ts-mode . prettier-mode)
|
||||
(css-ts-mode . prettier-mode)
|
||||
(html-ts-mode . prettier-mode)))
|
||||
|
||||
(provide 'dev-settings)
|
||||
;;; dev-settings.el ends here
|
||||
Reference in New Issue
Block a user