Add lsp integration, migrate to literate config via org doc
This commit is contained in:
parent
8e7aa7505b
commit
18a621528f
2 changed files with 333 additions and 353 deletions
322
config.org
Normal file
322
config.org
Normal file
|
|
@ -0,0 +1,322 @@
|
||||||
|
#+TITLE: Emacs Configuration
|
||||||
|
#+AUTHOR: nikolaishields
|
||||||
|
#+PROPERTY: header-args:emacs-lisp :tangle yes
|
||||||
|
#+STARTUP: overview
|
||||||
|
|
||||||
|
* Bootstrap
|
||||||
|
This configuration needs to be loaded by =init.el=. Create an =init.el= with this content:
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp :tangle no
|
||||||
|
;;; init.el --- Load org config -*- lexical-binding: t -*-
|
||||||
|
;;; Commentary:
|
||||||
|
;;; Load literate config from config.org
|
||||||
|
|
||||||
|
;;; Code:
|
||||||
|
(require 'org)
|
||||||
|
(org-babel-load-file
|
||||||
|
(expand-file-name
|
||||||
|
"config.org"
|
||||||
|
user-emacs-directory))
|
||||||
|
|
||||||
|
(provide 'init)
|
||||||
|
;;; init.el ends here
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
* Performance Optimization
|
||||||
|
Early-init optimizations for faster Emacs startup.
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
;; Garbage collection
|
||||||
|
(setq gc-cons-threshold 100000000) ; 100mb
|
||||||
|
(setq read-process-output-max (* 1024 1024)) ; 1mb
|
||||||
|
|
||||||
|
;; Faster startup
|
||||||
|
(setq package-enable-at-startup nil)
|
||||||
|
(setq site-run-file nil)
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
* Basic UI Configuration
|
||||||
|
Remove unnecessary UI elements and set basic preferences.
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
;; Disable unnecessary UI elements
|
||||||
|
(dolist (mode '(scroll-bar-mode
|
||||||
|
tool-bar-mode
|
||||||
|
tooltip-mode
|
||||||
|
menu-bar-mode))
|
||||||
|
(when (fboundp mode) (funcall mode -1)))
|
||||||
|
|
||||||
|
(set-fringe-mode 10)
|
||||||
|
(winner-mode 1)
|
||||||
|
|
||||||
|
;; Basic settings
|
||||||
|
(setq inhibit-startup-message t
|
||||||
|
visible-bell nil
|
||||||
|
ring-bell-function 'ignore
|
||||||
|
use-dialog-box nil
|
||||||
|
custom-file (locate-user-emacs-file "custom-vars.el"))
|
||||||
|
|
||||||
|
(load custom-file 'noerror 'nomessage)
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
* Package Management
|
||||||
|
Configure package archives and initialize use-package.
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(require 'package)
|
||||||
|
(setq package-archives
|
||||||
|
'(("melpa" . "https://melpa.org/packages/")
|
||||||
|
("org" . "https://orgmode.org/elpa/")
|
||||||
|
("elpa" . "https://elpa.gnu.org/packages/")))
|
||||||
|
|
||||||
|
(package-initialize)
|
||||||
|
|
||||||
|
;; Bootstrap use-package
|
||||||
|
(unless (package-installed-p 'use-package)
|
||||||
|
(package-refresh-contents)
|
||||||
|
(package-install 'use-package))
|
||||||
|
|
||||||
|
(require 'use-package)
|
||||||
|
(setq use-package-always-ensure t)
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
* Theme and Visual Settings
|
||||||
|
Configure the visual appearance of Emacs.
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
;; Theme configuration
|
||||||
|
(use-package catppuccin-theme)
|
||||||
|
(use-package doom-modeline
|
||||||
|
:init (doom-modeline-mode 1)
|
||||||
|
:custom
|
||||||
|
(doom-modeline-height 35)
|
||||||
|
(nerd-icons-scale-factor 1.35)
|
||||||
|
(doom-modeline-minor-modes-icon nil)
|
||||||
|
(doom-modeline-major-modes-icon nil)
|
||||||
|
(doom-modeline-icon t)
|
||||||
|
(doom-modeline-time-live-icon t))
|
||||||
|
|
||||||
|
;; Load theme
|
||||||
|
(setq modus-themes-mode-line '(accented borderless padded))
|
||||||
|
(load-theme 'modus-vivendi t)
|
||||||
|
|
||||||
|
;; Font configuration
|
||||||
|
(set-face-attribute 'default nil :font "FiraCode Nerd Font" :height 125)
|
||||||
|
|
||||||
|
;; Line numbers
|
||||||
|
(column-number-mode)
|
||||||
|
(global-display-line-numbers-mode t)
|
||||||
|
(dolist (mode '(term-mode-hook
|
||||||
|
vterm-mode-hook))
|
||||||
|
(add-hook mode (lambda () (display-line-numbers-mode 0))))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
* Evil Mode Configuration
|
||||||
|
Vim keybindings for Emacs.
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(use-package evil
|
||||||
|
:init
|
||||||
|
(setq evil-want-integration t
|
||||||
|
evil-want-keybinding nil)
|
||||||
|
:config
|
||||||
|
(evil-mode 1))
|
||||||
|
|
||||||
|
(use-package evil-collection
|
||||||
|
:after evil
|
||||||
|
:config
|
||||||
|
(evil-collection-init))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
* Completion Framework
|
||||||
|
Configure Vertico, Orderless, and Marginalia for enhanced completion.
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(use-package vertico
|
||||||
|
:bind (:map vertico-map
|
||||||
|
("C-j" . vertico-next)
|
||||||
|
("C-k" . vertico-previous)
|
||||||
|
("C-f" . vertico-exit)
|
||||||
|
:map minibuffer-local-map
|
||||||
|
("M-h" . backward-kill-word))
|
||||||
|
:custom
|
||||||
|
(vertico-cycle t)
|
||||||
|
:init
|
||||||
|
(vertico-mode))
|
||||||
|
|
||||||
|
(use-package orderless
|
||||||
|
:custom
|
||||||
|
(completion-styles '(orderless basic))
|
||||||
|
(completion-category-overrides '((file (styles basic partial-completion)))))
|
||||||
|
|
||||||
|
(use-package marginalia
|
||||||
|
:after vertico
|
||||||
|
:custom
|
||||||
|
(marginalia-annotators '(marginalia-annotators-heavy marginalia-annotators-light nil))
|
||||||
|
:init
|
||||||
|
(marginalia-mode))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
* Project Management
|
||||||
|
Projectile configuration for project management.
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(use-package projectile
|
||||||
|
:diminish projectile-mode
|
||||||
|
:bind
|
||||||
|
("C-M-p" . projectile-find-file)
|
||||||
|
:bind-keymap
|
||||||
|
("C-c p" . projectile-command-map)
|
||||||
|
:init
|
||||||
|
(setq projectile-project-search-path '("~/Code/git.dwavesys.local/"
|
||||||
|
"~/Code/nikolaishields/"
|
||||||
|
"~/.emacs.d/"
|
||||||
|
"/etc/nixos")
|
||||||
|
projectile-auto-discover t
|
||||||
|
projectile-enable-caching t
|
||||||
|
projectile-indexing-method 'alien)
|
||||||
|
:config
|
||||||
|
(projectile-mode)
|
||||||
|
(run-with-idle-timer 10 t #'projectile-discover-projects-in-search-path))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
* LSP Configuration
|
||||||
|
Language Server Protocol setup for development.
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(use-package lsp-mode
|
||||||
|
:init
|
||||||
|
(setq lsp-keymap-prefix "C-c l")
|
||||||
|
:hook
|
||||||
|
((python-ts-mode . lsp-deferred)
|
||||||
|
(go-ts-mode . lsp-deferred)
|
||||||
|
(rust-ts-mode . lsp-deferred)
|
||||||
|
(js-ts-mode . lsp-deferred)
|
||||||
|
(typescript-ts-mode . lsp-deferred)
|
||||||
|
(lsp-mode . lsp-enable-which-key-integration))
|
||||||
|
:commands (lsp lsp-deferred)
|
||||||
|
:custom
|
||||||
|
(lsp-enable-symbol-highlighting t)
|
||||||
|
(lsp-enable-indentation t)
|
||||||
|
(lsp-enable-on-type-formatting t)
|
||||||
|
(lsp-modeline-code-actions-enable t)
|
||||||
|
(lsp-modeline-diagnostics-enable t)
|
||||||
|
(lsp-completion-provider :capf)
|
||||||
|
(lsp-idle-delay 0.500))
|
||||||
|
|
||||||
|
(use-package lsp-ui
|
||||||
|
:hook (lsp-mode . lsp-ui-mode)
|
||||||
|
:custom
|
||||||
|
(lsp-ui-doc-enable t)
|
||||||
|
(lsp-ui-doc-show-with-cursor t)
|
||||||
|
(lsp-ui-doc-show-with-mouse nil)
|
||||||
|
(lsp-ui-doc-position 'at-point)
|
||||||
|
(lsp-ui-doc-delay 0.5)
|
||||||
|
(lsp-ui-sideline-enable t)
|
||||||
|
(lsp-ui-sideline-show-diagnostics t)
|
||||||
|
(lsp-ui-sideline-show-hover t)
|
||||||
|
(lsp-ui-sideline-show-code-actions t))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
* Development Tools
|
||||||
|
Configure completion, snippets, and syntax checking.
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(use-package company
|
||||||
|
:hook (lsp-mode . company-mode)
|
||||||
|
:custom
|
||||||
|
(company-minimum-prefix-length 1)
|
||||||
|
(company-idle-delay 0.0))
|
||||||
|
|
||||||
|
(use-package company-box
|
||||||
|
:hook (company-mode . company-box-mode))
|
||||||
|
|
||||||
|
(use-package yasnippet
|
||||||
|
:config
|
||||||
|
(yas-global-mode 1))
|
||||||
|
|
||||||
|
(use-package yasnippet-snippets
|
||||||
|
:after yasnippet)
|
||||||
|
|
||||||
|
(use-package flycheck
|
||||||
|
:init
|
||||||
|
(global-flycheck-mode))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
* Version Control
|
||||||
|
Magit configuration for Git integration.
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(use-package magit
|
||||||
|
:bind ("C-M-;" . magit-status)
|
||||||
|
:commands (magit-status magit-get-current-branch)
|
||||||
|
:custom
|
||||||
|
(magit-display-buffer-function #'magit-display-buffer-same-window-except-diff-v1))
|
||||||
|
|
||||||
|
(use-package magit-todos
|
||||||
|
:after magit
|
||||||
|
:config
|
||||||
|
(magit-todos-mode 1))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
* Terminal Support
|
||||||
|
Configure VTerm for terminal emulation.
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(use-package vterm
|
||||||
|
:commands vterm
|
||||||
|
:custom
|
||||||
|
(term-prompt-regexp "^[^#$%>\n]*[#$%>] *")
|
||||||
|
(vterm-max-scrollback 10000))
|
||||||
|
|
||||||
|
(use-package multi-vterm
|
||||||
|
:after vterm
|
||||||
|
:config
|
||||||
|
(add-hook 'vterm-mode-hook
|
||||||
|
(lambda ()
|
||||||
|
(setq-local evil-insert-state-cursor 'box)
|
||||||
|
(evil-insert-state))))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
* Tree-sitter Configuration
|
||||||
|
Modern syntax highlighting and parsing.
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(use-package treesit-auto
|
||||||
|
:config
|
||||||
|
(global-treesit-auto-mode))
|
||||||
|
|
||||||
|
(setq treesit-language-source-alist
|
||||||
|
'((bash "https://github.com/tree-sitter/tree-sitter-bash")
|
||||||
|
(cmake "https://github.com/uyha/tree-sitter-cmake")
|
||||||
|
(css "https://github.com/tree-sitter/tree-sitter-css")
|
||||||
|
(elisp "https://github.com/Wilfred/tree-sitter-elisp")
|
||||||
|
(go "https://github.com/tree-sitter/tree-sitter-go")
|
||||||
|
(html "https://github.com/tree-sitter/tree-sitter-html")
|
||||||
|
(javascript "https://github.com/tree-sitter/tree-sitter-javascript" "master" "src")
|
||||||
|
(json "https://github.com/tree-sitter/tree-sitter-json")
|
||||||
|
(python "https://github.com/tree-sitter/tree-sitter-python")
|
||||||
|
(typescript "https://github.com/tree-sitter/tree-sitter-typescript" "master" "typescript/src")
|
||||||
|
(yaml "https://github.com/ikatyang/tree-sitter-yaml")))
|
||||||
|
|
||||||
|
;; Install tree-sitter languages
|
||||||
|
(defun efs/install-treesit-language (lang)
|
||||||
|
"Install tree-sitter grammar for LANG if it's not already installed."
|
||||||
|
(unless (treesit-language-available-p lang)
|
||||||
|
(treesit-install-language-grammar lang)))
|
||||||
|
|
||||||
|
(dolist (lang '(bash cmake css elisp go html javascript json python typescript yaml))
|
||||||
|
(efs/install-treesit-language lang))
|
||||||
|
|
||||||
|
;; Remap major modes to tree-sitter versions
|
||||||
|
(setq major-mode-remap-alist
|
||||||
|
'((python-mode . python-ts-mode)
|
||||||
|
(javascript-mode . js-ts-mode)
|
||||||
|
(js-mode . js-ts-mode)
|
||||||
|
(typescript-mode . typescript-ts-mode)
|
||||||
|
(json-mode . json-ts-mode)
|
||||||
|
(css-mode . css-ts-mode)
|
||||||
|
(yaml-mode . yaml-ts-mode)
|
||||||
|
(bash-mode . bash-ts-mode)
|
||||||
|
(go-mode . go-ts-mode)))
|
||||||
|
#+end_src
|
||||||
364
init.el
364
init.el
|
|
@ -1,355 +1,13 @@
|
||||||
(scroll-bar-mode -1)
|
;;; init.el --- Load org config -*- lexical-binding: t -*-
|
||||||
(tool-bar-mode -1)
|
;;; Commentary:
|
||||||
(tooltip-mode -1)
|
;;; Load literate config from config.org
|
||||||
(set-fringe-mode 10)
|
|
||||||
(menu-bar-mode -1)
|
|
||||||
(winner-mode 1)
|
|
||||||
|
|
||||||
(setq inhibit-startup-message t)
|
;;; Code:
|
||||||
(setq visible-bell nil)
|
(require 'org)
|
||||||
(setq ring-bell-function 'ignore)
|
(org-babel-load-file
|
||||||
(setq auto-save-timeout '2)
|
(expand-file-name
|
||||||
(setq auto-save-interval '2)
|
"config.org"
|
||||||
(setq global-auto-revert-non-file-buffers t)
|
user-emacs-directory))
|
||||||
(setq custom-file (locate-user-emacs-file "custom-vars.el"))
|
|
||||||
(load custom-file 'noerror 'nomessage)
|
|
||||||
|
|
||||||
(setq use-dialog-box nil)
|
(provide 'init)
|
||||||
(global-auto-revert-mode 1)
|
;;; init.el ends here
|
||||||
(setq global-auto-rever-non-file-buffers t)
|
|
||||||
|
|
||||||
;;(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
|
|
||||||
;;(require 'package)
|
|
||||||
;;(setq package-archives '(("melpa" . "https://melpa.org/packages/")
|
|
||||||
;; ("org" . "https://orgmode.org/elpa/")
|
|
||||||
;; ("elpa" . "https://elpa.gnu.org/packages/")))
|
|
||||||
;;(package-initialize)
|
|
||||||
;;(package-refresh-contents)
|
|
||||||
|
|
||||||
(require 'package)
|
|
||||||
(setq package-archives '(("melpa" . "https://melpa.org/packages/")
|
|
||||||
("org" . "https://orgmode.org/elpa/")
|
|
||||||
("elpa" . "https://elpa.gnu.org/packages/")))
|
|
||||||
(package-initialize)
|
|
||||||
|
|
||||||
;; Initialize use-package
|
|
||||||
(unless (package-installed-p 'use-package)
|
|
||||||
(package-refresh-contents)
|
|
||||||
(package-install 'use-package))
|
|
||||||
|
|
||||||
(require 'use-package)
|
|
||||||
(setq use-package-always-ensure t)
|
|
||||||
|
|
||||||
(use-package catppuccin-theme)
|
|
||||||
(use-package doom-modeline
|
|
||||||
:ensure t
|
|
||||||
:init (doom-modeline-mode 1)
|
|
||||||
:custom (doom-modeline-height 35)
|
|
||||||
(nerd-icons-scale-factor 1.35)
|
|
||||||
(doom-modeline-minor-modes-icon nil)
|
|
||||||
(doom-modeline-major-modes-icon nil)
|
|
||||||
(doom-modeline-icon t)
|
|
||||||
(doom-modeline-time-live-icon t))
|
|
||||||
(use-package command-log-mode)
|
|
||||||
|
|
||||||
(global-set-key (kbd "<escape>") 'keyboard-escape-quit)
|
|
||||||
|
|
||||||
(setq modus-themes-mode-line '(accented borderless padded))
|
|
||||||
(load-theme 'modus-vivendi t)
|
|
||||||
|
|
||||||
(column-number-mode)
|
|
||||||
(global-display-line-numbers-mode t)
|
|
||||||
(dolist (mode '(term-mode-hook
|
|
||||||
vterm-mode-hook))
|
|
||||||
(add-hook mode (lambda () (display-line-numbers-mode 0))))
|
|
||||||
|
|
||||||
(use-package which-key
|
|
||||||
:init (which-key-mode)
|
|
||||||
:diminish which-key-mode
|
|
||||||
:config
|
|
||||||
(setq which-key-idle-delay 0))
|
|
||||||
|
|
||||||
(set-face-attribute 'default nil :font "FiraCode Nerd Font" :height 125)
|
|
||||||
|
|
||||||
(use-package kagi
|
|
||||||
:ensure t
|
|
||||||
:custom
|
|
||||||
;; Univernal Summarizer settings
|
|
||||||
(kagi-summarizer-engine "cecil")
|
|
||||||
(kagi-summarizer-default-language "EN")
|
|
||||||
(kagi-summarizer-cache t))
|
|
||||||
|
|
||||||
(use-package vterm
|
|
||||||
:commands vterm
|
|
||||||
:config
|
|
||||||
(setq term-prompt-regexp "^[^#$%>\n]*[#$%>] *")
|
|
||||||
(setq vterm-max-scrollback 10000))
|
|
||||||
|
|
||||||
(setq org-todo-keywords
|
|
||||||
'((sequence "TODO" "IN-PROGRESS" "BLOCKED" "DONE")))
|
|
||||||
|
|
||||||
|
|
||||||
(setq org-tag-alist '(("work") ("garage")))
|
|
||||||
|
|
||||||
(setq wl-copy-process nil)
|
|
||||||
(defun wl-copy (text)
|
|
||||||
(setq wl-copy-process (make-process :name "wl-copy"
|
|
||||||
:buffer nil
|
|
||||||
:command '("wl-copy" "-f" "-n")
|
|
||||||
:connection-type 'pipe
|
|
||||||
:noquery t))
|
|
||||||
(process-send-string wl-copy-process text)
|
|
||||||
(process-send-eof wl-copy-process))
|
|
||||||
(defun wl-paste ()
|
|
||||||
(if (and wl-copy-process (process-live-p wl-copy-process))
|
|
||||||
nil ; should return nil if we're the current paste owner
|
|
||||||
(shell-command-to-string "wl-paste -n | tr -d \r")))
|
|
||||||
(setq interprogram-cut-function 'wl-copy)
|
|
||||||
(setq interprogram-paste-function 'wl-paste)
|
|
||||||
|
|
||||||
;; Enable Evil
|
|
||||||
(use-package evil
|
|
||||||
:ensure t
|
|
||||||
:init
|
|
||||||
(setq evil-want-integration t)
|
|
||||||
(setq evil-want-keybinding nil)
|
|
||||||
:config
|
|
||||||
(evil-mode 1))
|
|
||||||
|
|
||||||
(use-package evil-collection
|
|
||||||
:after evil
|
|
||||||
:ensure t
|
|
||||||
:config
|
|
||||||
(evil-collection-init))
|
|
||||||
|
|
||||||
;; org
|
|
||||||
(use-package org-roam
|
|
||||||
:ensure t
|
|
||||||
:custom
|
|
||||||
(org-roam-directory (file-truename "~/Documents/notes"))
|
|
||||||
(org-roam-dailies-directory (file-truename "~/Documents/notes/daily"))
|
|
||||||
(org-roam-completion-everywhere t)
|
|
||||||
(org-roam-dailies-capture-templates
|
|
||||||
'(("d" "default" entry "* %<%I:%M %p>: %?"
|
|
||||||
:if-new (file+head "%<%Y-%m-%d>.org" "#+title: %<%Y-%m-%d>\n"))))
|
|
||||||
: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)
|
|
||||||
: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
|
|
||||||
(require 'org-roam-dailies) ;; Ensure the keymap is available
|
|
||||||
(org-roam-db-autosync-mode))
|
|
||||||
|
|
||||||
(org-roam-db-autosync-mode)
|
|
||||||
;; Bind this to C-c n I
|
|
||||||
(defun org-roam-node-insert-immediate (arg &rest args)
|
|
||||||
(interactive "P")
|
|
||||||
(let ((args (cons arg args))
|
|
||||||
(org-roam-capture-templates (list (append (car org-roam-capture-templates)
|
|
||||||
'(:immediate-finish t)))))
|
|
||||||
(apply #'org-roam-node-insert args)))
|
|
||||||
|
|
||||||
(setq org-agenda-files '("~/Documents/notes/daily/"))
|
|
||||||
(save-place-mode 1)
|
|
||||||
|
|
||||||
;; vertico
|
|
||||||
(unless (package-installed-p 'vertico)
|
|
||||||
(package-install 'vertico))
|
|
||||||
|
|
||||||
(use-package vertico
|
|
||||||
:ensure t
|
|
||||||
:bind (:map vertico-map
|
|
||||||
("C-j" . vertico-next)
|
|
||||||
("C-k" . vertico-previous)
|
|
||||||
("C-f" . vertico-exit)
|
|
||||||
:map minibuffer-local-map
|
|
||||||
("M-h" . backward-kill-word))
|
|
||||||
:custom
|
|
||||||
(vertico-cycle t)
|
|
||||||
:init
|
|
||||||
(vertico-mode))
|
|
||||||
|
|
||||||
(use-package savehist
|
|
||||||
:init
|
|
||||||
(savehist-mode))
|
|
||||||
|
|
||||||
(use-package marginalia
|
|
||||||
:after vertico
|
|
||||||
:ensure t
|
|
||||||
:custom
|
|
||||||
(marginalia-annotators '(marginalia-annotators-heavy marginalia-annotators-light nil))
|
|
||||||
:init
|
|
||||||
(marginalia-mode))
|
|
||||||
|
|
||||||
;; lsp
|
|
||||||
(use-package lsp-mode
|
|
||||||
:ensure t)
|
|
||||||
|
|
||||||
(use-package lsp-nix
|
|
||||||
:ensure lsp-mode
|
|
||||||
:after (lsp-mode)
|
|
||||||
:demand t
|
|
||||||
:custom
|
|
||||||
(lsp-nix-nil-formatter ["nixpkgs-fmt"]))
|
|
||||||
|
|
||||||
(use-package nix-mode
|
|
||||||
:hook (nix-mode . lsp-deferred)
|
|
||||||
:ensure t)
|
|
||||||
;; optionally
|
|
||||||
(use-package lsp-ui
|
|
||||||
:commands lsp-ui-mode
|
|
||||||
:config
|
|
||||||
(setq lsp-ui-doc-enable t)
|
|
||||||
(setq lsp-ui-doc-header t)
|
|
||||||
(setq lsp-ui-doc-include-signature t)
|
|
||||||
(setq lsp-ui-doc-border (face-foreground 'default))
|
|
||||||
(setq lsp-ui-sideline-show-code-actions t)
|
|
||||||
(setq lsp-ui-sideline-delay 0.05))
|
|
||||||
;; optionally if you want to use debugger
|
|
||||||
(use-package dap-mode)
|
|
||||||
|
|
||||||
(use-package magit
|
|
||||||
:bind ("C-M-;" . magit-status)
|
|
||||||
:commands (magit-status magit-get-current-branch)
|
|
||||||
:custom
|
|
||||||
(magit-display-buffer-function #'magit-display-buffer-same-window-except-diff-v1))
|
|
||||||
|
|
||||||
(use-package magit-todos
|
|
||||||
:after magit
|
|
||||||
:config (magit-todos-mode 1))
|
|
||||||
|
|
||||||
(use-package consult
|
|
||||||
:ensure t)
|
|
||||||
|
|
||||||
(use-package consult-projectile
|
|
||||||
:ensure t)
|
|
||||||
|
|
||||||
(defun dw/switch-project-action ()
|
|
||||||
"Switch to a workspace with the project name and start `magit-status'."
|
|
||||||
(persp-switch (projectile-project-name))
|
|
||||||
(magit-status))
|
|
||||||
|
|
||||||
(defun default-project-layout ()
|
|
||||||
"Set up the default window layout for any project."
|
|
||||||
(delete-other-windows) ; Close all other windows
|
|
||||||
(split-window-below) ; Split the window horizontally
|
|
||||||
(other-window 1) ; Move to the new window
|
|
||||||
(projectile-run-vterm) ; Move to the new window
|
|
||||||
(other-window 1) ; Move to the new window
|
|
||||||
(dired (projectile-project-root)) ; Open Dired in the new window
|
|
||||||
(other-window -2)) ; Move back to the second window
|
|
||||||
(defun my-universal-project-setup ()
|
|
||||||
"Set up the project-specific layout and settings for any project."
|
|
||||||
(default-project-layout))
|
|
||||||
|
|
||||||
(add-hook 'projectile-after-switch-project-hook 'my-universal-project-setup)
|
|
||||||
(use-package projectile
|
|
||||||
:diminish projectile-mode
|
|
||||||
:config (projectile-mode)
|
|
||||||
:demand t
|
|
||||||
:bind ("C-M-p" . projectile-find-file)
|
|
||||||
:bind-keymap
|
|
||||||
("C-c p" . projectile-command-map)
|
|
||||||
:init
|
|
||||||
(setq projectile-project-search-path '("~/Code/git.dwavesys.local/" "~/Code/nikolaishields/" "~/.emacs.d/" "/etc/nixos" )))
|
|
||||||
|
|
||||||
(setq projectile-auto-discover t)
|
|
||||||
(setq projectile-enable-caching t)
|
|
||||||
(run-with-idle-timer 10 t #'projectile-discover-projects-in-search-path)
|
|
||||||
(setq projectile-indexing-method 'alien)
|
|
||||||
|
|
||||||
(global-set-key (kbd "M-n") #'other-window)
|
|
||||||
|
|
||||||
;; emacs-land leader-key
|
|
||||||
(define-prefix-command '*my-leader*)
|
|
||||||
(global-set-key (kbd "C-t") *my-leader*)
|
|
||||||
|
|
||||||
;; example:
|
|
||||||
(define-key *my-leader* (kbd "C-b") #'previous-buffer)
|
|
||||||
|
|
||||||
(use-package multi-vterm :ensure t)
|
|
||||||
(use-package multi-vterm
|
|
||||||
:ensure t
|
|
||||||
:config
|
|
||||||
(add-hook 'vterm-mode-hook
|
|
||||||
(lambda ()
|
|
||||||
(setq-local evil-insert-state-cursor 'box)
|
|
||||||
(evil-insert-state)))
|
|
||||||
(define-key vterm-mode-map [return] #'vterm-send-return)
|
|
||||||
(setq vterm-keymap-exceptions nil)
|
|
||||||
(evil-define-key 'insert vterm-mode-map (kbd "C-e") #'vterm--self-insert)
|
|
||||||
(evil-define-key 'insert vterm-mode-map (kbd "C-f") #'vterm--self-insert)
|
|
||||||
(evil-define-key 'insert vterm-mode-map (kbd "C-a") #'vterm--self-insert)
|
|
||||||
(evil-define-key 'insert vterm-mode-map (kbd "C-v") #'vterm--self-insert)
|
|
||||||
(evil-define-key 'insert vterm-mode-map (kbd "C-b") #'vterm--self-insert)
|
|
||||||
(evil-define-key 'insert vterm-mode-map (kbd "C-w") #'vterm--self-insert)
|
|
||||||
(evil-define-key 'insert vterm-mode-map (kbd "C-u") #'vterm--self-insert)
|
|
||||||
(evil-define-key 'insert vterm-mode-map (kbd "C-d") #'vterm--self-insert)
|
|
||||||
(evil-define-key 'insert vterm-mode-map (kbd "C-n") #'vterm--self-insert)
|
|
||||||
(evil-define-key 'insert vterm-mode-map (kbd "C-m") #'vterm--self-insert)
|
|
||||||
(evil-define-key 'insert vterm-mode-map (kbd "C-p") #'vterm--self-insert)
|
|
||||||
(evil-define-key 'insert vterm-mode-map (kbd "C-j") #'vterm--self-insert)
|
|
||||||
(evil-define-key 'insert vterm-mode-map (kbd "C-k") #'Vterm--self-insert)
|
|
||||||
(evil-define-key 'insert vterm-mode-map (kbd "C-r") #'vterm--self-insert)
|
|
||||||
(evil-define-key 'insert vterm-mode-map (kbd "C-t") #'vterm--self-insert)
|
|
||||||
(evil-define-key 'insert vterm-mode-map (kbd "C-g") #'vterm--self-insert)
|
|
||||||
(evil-define-key 'insert vterm-mode-map (kbd "C-c") #'vterm--self-insert)
|
|
||||||
(evil-define-key 'insert vterm-mode-map (kbd "C-SPC") #'vterm--self-insert)
|
|
||||||
(evil-define-key 'normal vterm-mode-map (kbd "C-d") #'vterm--self-insert)
|
|
||||||
(evil-define-key 'normal vterm-mode-map (kbd ",c") #'multi-vterm)
|
|
||||||
(evil-define-key 'normal vterm-mode-map (kbd ",n") #'multi-vterm-next)
|
|
||||||
(evil-define-key 'normal vterm-mode-map (kbd ",p") #'multi-vterm-prev)
|
|
||||||
(evil-define-key 'normal vterm-mode-map (kbd "i") #'evil-insert-resume)
|
|
||||||
(evil-define-key 'normal vterm-mode-map (kbd "o") #'evil-insert-resume)
|
|
||||||
(evil-define-key 'normal vterm-mode-map (kbd "<return>") #'evil-insert-resume))
|
|
||||||
|
|
||||||
(use-package orderless
|
|
||||||
:ensure t
|
|
||||||
:custom
|
|
||||||
(completion-styles '(orderless basic))
|
|
||||||
(completion-category-overrides '((file (styles basic partial-completion)))))
|
|
||||||
|
|
||||||
(setq treesit-language-source-alist
|
|
||||||
'((bash "https://github.com/tree-sitter/tree-sitter-bash")
|
|
||||||
(cmake "https://github.com/uyha/tree-sitter-cmake")
|
|
||||||
(css "https://github.com/tree-sitter/tree-sitter-css")
|
|
||||||
(elisp "https://github.com/Wilfred/tree-sitter-elisp")
|
|
||||||
(go "https://github.com/tree-sitter/tree-sitter-go")
|
|
||||||
(html "https://github.com/tree-sitter/tree-sitter-html")
|
|
||||||
(javascript "https://github.com/tree-sitter/tree-sitter-javascript" "master" "src")
|
|
||||||
(json "https://github.com/tree-sitter/tree-sitter-json")
|
|
||||||
(make "https://github.com/alemuller/tree-sitter-make")
|
|
||||||
(markdown "https://github.com/ikatyang/tree-sitter-markdown")
|
|
||||||
(python "https://github.com/tree-sitter/tree-sitter-python")
|
|
||||||
(toml "https://github.com/tree-sitter/tree-sitter-toml")
|
|
||||||
(tsx "https://github.com/tree-sitter/tree-sitter-typescript" "master" "tsx/src")
|
|
||||||
(typescript "https://github.com/tree-sitter/tree-sitter-typescript" "master" "typescript/src")
|
|
||||||
(docker "https://github.com/camdencheek/tree-sitter-dockerfile")
|
|
||||||
(yaml "https://github.com/ikatyang/tree-sitter-yaml")))
|
|
||||||
|
|
||||||
(defun my-projectile-compile-project-silently ()
|
|
||||||
"Compile the project using the preset command without prompting."
|
|
||||||
(interactive)
|
|
||||||
(let ((compilation-read-command nil)) ;; Prevent prompt
|
|
||||||
(projectile-compile-project nil)))
|
|
||||||
|
|
||||||
(define-key projectile-mode-map (kbd "C-c m") 'my-projectile-compile-project-silently)
|
|
||||||
(with-eval-after-load 'ox-latex
|
|
||||||
;; Add the `mimore` LaTeX class
|
|
||||||
(add-to-list 'org-latex-classes
|
|
||||||
'("mimore"
|
|
||||||
"\\documentclass{mimore}
|
|
||||||
[NO-DEFAULT-PACKAGES]
|
|
||||||
[PACKAGES]
|
|
||||||
[EXTRA]"
|
|
||||||
("\\section{%s}" . "\\section*{%s}")
|
|
||||||
("\\subsection{%s}" . "\\subsection*{%s}")
|
|
||||||
("\\subsubsection{%s}" . "\\subsubsection*{%s}")
|
|
||||||
("\\paragraph{%s}" . "\\paragraph*{%s}")
|
|
||||||
("\\subparagraph{%s}" . "\\subparagraph*{%s}"))))
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue