Adithya Chari

/home/adchari/.emacs

;;; -*- lexical-binding: t; -*-

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

(require 'use-package)
(setq use-package-always-ensure t)

(use-package no-littering
  :config
  (no-littering-theme-backups)
  (setq custom-file (no-littering-expand-etc-file-name "custom.el"))
  (when (file-exists-p custom-file) (load custom-file)))

;;; Emacs
(use-package emacs
  :preface
  (defun flash-mode-line ()
    "Briefly invert the mode line, as a visual replacement for the bell."
    (invert-face 'mode-line)
    (run-with-timer 0.1 nil #'invert-face 'mode-line))

  :bind (("C-c r" . rgrep)
         ("C-c c" . calc)
         ("C-c q" . display-line-numbers-mode)
         ("C-x C-b" . ibuffer))

  :custom
  (gc-cons-threshold 100000000)
  (visible-bell nil)
  (ring-bell-function #'flash-mode-line)

  (inhibit-startup-screen t)
  (initial-major-mode 'fundamental-mode)
  (initial-frame-alist '((fullscreen . maximized)))
  (default-frame-alist '((fullscreen . maximized)))

  (use-short-answers t)
  (cursor-type 'bar)
  (xterm-update-cursor t)
  (indent-tabs-mode nil)
  (tab-width 4)

  (treesit-auto-install-grammar 'always)
  (treesit-enabled-modes t)

  :config
  (add-function :after after-focus-change-function #'garbage-collect)
  (set-face-attribute 'default nil :family "Fira Code" :height 120)

  (tool-bar-mode -1)
  (scroll-bar-mode -1)
  (menu-bar-mode -1)

  (xterm-mouse-mode t)
  (global-auto-revert-mode t)
  (pixel-scroll-precision-mode t)
  (mouse-shift-adjust-mode t)
  (put 'narrow-to-region 'disabled nil))

;;; Theme
(use-package modus-themes
  :custom
  (modus-themes-bold-constructs t)
  (modus-themes-italic-constructs t)
  (modus-themes-common-palette-overrides
   '((border-mode-line-active unspecified)
     (border-mode-line-inactive unspecified)))
  :config
  (load-theme 'modus-vivendi :no-confirm))

;;; Packages
(use-package ace-window
  :bind ("C-c w" . ace-window)
  :custom (aw-keys '(?a ?s ?d ?f ?g ?h ?j ?k ?l)))

(use-package aggressive-indent
  :config (global-aggressive-indent-mode t))

(use-package apheleia
  :config
  (setf (alist-get 'python-mode apheleia-mode-alist) '(ruff-isort ruff))
  (setf (alist-get 'python-ts-mode apheleia-mode-alist) '(ruff-isort ruff))
  (apheleia-global-mode t))

(use-package avy
  :bind ("C-c j" . avy-goto-char-timer))

(use-package cape
  :init
  (add-to-list 'completion-at-point-functions #'cape-dabbrev t)
  (add-to-list 'completion-at-point-functions #'cape-keyword t)
  (add-to-list 'completion-at-point-functions #'cape-file t)
  (add-to-list 'completion-at-point-functions #'cape-dict t))

(use-package corfu
  :custom
  (corfu-auto t)
  (corfu-quit-no-match 'separator)
  (tab-always-indent 'complete)
  (completion-cycle-threshold 5)
  :init
  (global-corfu-mode)
  (corfu-popupinfo-mode))

(use-package deadgrep
  :bind ("C-c s" . deadgrep))

(use-package editorconfig
  :config (editorconfig-mode t))

(use-package eglot
  :demand t
  :bind (:map eglot-mode-map
              ("C-c l a" . eglot-code-actions)
              ("C-c l r" . eglot-rename)
              ("C-c l h" . eldoc)
              ("C-c l R" . eglot-reconnect))
  :config
  (add-to-list 'eglot-server-programs
               '((c++-mode c++-ts-mode) . ("clangd" "--query-driver=/**/*")))
  (add-to-list 'eglot-server-programs
               '((python-mode python-ts-mode) . ("ty" "server"))))

(use-package exec-path-from-shell
  :config
  (add-to-list 'exec-path-from-shell-variables "LD_LIBRARY_PATH")
  (add-to-list 'exec-path-from-shell-variables "CAML_LD_LIBRARY_PATH")
  (exec-path-from-shell-initialize))

(use-package ghostel
  :bind ("C-c t" . ghostel))

(use-package magit
  :bind (("C-c g" . magit-status)
         ("C-c ?" . magit-blame))
  :custom (smerge-command-prefix (kbd "C-c v")))

(use-package multiple-cursors
  :bind (("C-c e" . mc/edit-lines)
         ("C->" . mc/mark-next-like-this)
         ("C-<" . mc/mark-previous-like-this)
         ("C-c C->" . mc/mark-all-like-this)))

(use-package neotree
  :bind ("C-c f" . neotree-toggle))

(use-package prescient
  :custom (prescient-filter-method '(literal prefix initialism))
  :config (prescient-persist-mode t))

(use-package corfu-prescient
  :after corfu
  :config (corfu-prescient-mode t))

(use-package vertico-prescient
  :after vertico
  :config (vertico-prescient-mode t))

(use-package smartparens
  :config
  (require 'smartparens-config)
  (smartparens-global-mode t))

(use-package vertico
  :custom (vertico-resize t)
  :init (vertico-mode))

(use-package vundo
  :bind ("C-c u" . vundo)
  :custom (vundo-compact-display t))

(use-package which-key
  :config (which-key-mode))

(use-package windmove
  :bind (("M-<up>" . windmove-up)
         ("M-<down>" . windmove-down)
         ("M-<left>" . windmove-left)
         ("M-<right>" . windmove-right)))

(use-package windsize
  :config (windsize-default-keybindings))

;;; Languages
(use-package cc-mode
  :mode ("\\.h\\'" . c++-mode)
  :hook ((c++-mode c++-ts-mode) . eglot-ensure))

(use-package python
  :hook ((python-mode python-ts-mode) . eglot-ensure))

(use-package rust-mode
  :hook ((rust-mode rust-ts-mode) . eglot-ensure))

(use-package tex
  :ensure auctex
  :custom
  (TeX-auto-save t)
  (TeX-parse-self t)
  (TeX-save-query nil))

;;; Other
(use-package pdf-tools
  :init (pdf-loader-install))

(use-package markdown-ts-mode
  :mode ("\\.md\\'" . markdown-ts-mode))

(use-package csv-mode)

(use-package protobuf-mode)

;; Conditional
(when (string= (system-name) "boxspren")
  (when (file-exists-p "~/misc/conf/personal.el")
    (load-file "~/misc/conf/personal.el")))

(when (string= (system-name) "boxspren")
  (when (file-exists-p "~/misc/conf/work.el")
    (load-file "~/misc/conf/work.el")))