Email: contact@adchari.dev
Sourcehut: adchari
LinkedIn: adithyachari
Resume: Click Here
;;; -*- lexical-binding: t; -*-
;;; Defaults
(setq gc-cons-threshold 100000000)
(add-function :after after-focus-change-function 'garbage-collect)
(setq backup-directory-alist `((".*" . ,temporary-file-directory))
auto-save-file-name-transforms `((".*" ,temporary-file-directory t)))
(setq custom-file "~/.emacs.d/custom.el")
(when (file-exists-p custom-file) (load custom-file))
(setq visible-bell nil
ring-bell-function 'flash-mode-line)
(defun flash-mode-line ()
"Temporarily invert mode line."
(invert-face 'mode-line)
(run-with-timer 0.1 nil #'invert-face 'mode-line))
;;; Features
(global-auto-revert-mode)
(put 'narrow-to-region 'disabled nil)
(unless (display-graphic-p)
(xterm-mouse-mode 1))
(pixel-scroll-precision-mode)
;;; Package management
(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)
;;; Theming
(setq inhibit-startup-screen t
initial-major-mode 'fundamental-mode
use-short-answers t)
(setq-default cursor-type 'bar
indent-tabs-mode nil
tab-width 4)
(setq initial-frame-alist '((fullscreen . maximized))
default-frame-alist '((fullscreen . maximized)))
(set-face-attribute 'default nil :family "Fira Code" :height 120)
(tool-bar-mode -1)
(scroll-bar-mode -1)
(menu-bar-mode -1)
(setq modus-themes-bold-constructs t
modus-themes-italic-constructs t)
(load-theme 'modus-vivendi)
;;; Keybindings
(global-set-key (kbd "C-c r") #'rgrep)
(global-set-key (kbd "C-c a") #'calc)
(global-set-key (kbd "C-c q") #'display-line-numbers-mode)
(global-set-key (kbd "C-x C-b") #'ibuffer)
;;; Packages
(use-package ace-window
:bind ("C-c w" . ace-window)
:init (setq aw-keys '(?a ?s ?d ?f ?g ?h ?j ?k ?l)))
(use-package aggressive-indent
:config (global-aggressive-indent-mode 1))
(use-package avy
:bind (("C-c j j" . avy-goto-char-2)
("C-c j l" . avy-goto-line)))
(use-package bm
:bind (("C-c b b" . bm-toggle)
("C-c b n" . bm-next)
("C-c b p" . bm-previous)
("C-c b l" . bm-show-all)
("C-c b s" . bm-buffer-save))
:init
(setq-default bm-buffer-persistence t)
(setq bm-highlight-style 'bm-highlight-only-fringe
bm-restore-repository-on-load t
bm-repository-file "~/.emacs.d/bm-repository"
bm-cycle-all-buffers t))
(use-package cape
:init
(add-to-list 'completion-at-point-functions #'cape-file)
(add-to-list 'completion-at-point-functions #'cape-dabbrev)
(add-to-list 'completion-at-point-functions #'cape-keyword)
(add-to-list 'completion-at-point-functions #'cape-history)
(add-to-list 'completion-at-point-functions #'cape-dict))
(use-package corfu
:init
(setq corfu-auto t
corfu-quit-no-match 'separator
tab-always-indent 'complete
completion-cycle-threshold 5)
(global-corfu-mode)
(corfu-popupinfo-mode))
(use-package corfu-terminal
:init (unless (display-graphic-p)
(corfu-terminal-mode 1)))
(use-package deadgrep
:bind ("C-c s" . deadgrep))
(use-package editorconfig
:config (editorconfig-mode 1))
(use-package eglot
: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 f" . eglot-format)
("C-c l R" . eglot-reconnect))
:config
(add-to-list 'eglot-server-programs
'(c++-mode . ("clangd" "--query-driver=/**/*")))
(add-to-list 'eglot-server-programs
'(python-mode . ("ty" "server"))))
(use-package exec-path-from-shell
:config (exec-path-from-shell-initialize))
(use-package magit
:bind (("C-c g" . magit-status)
("C-c ?" . magit-blame))
:init (setq 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 smartparens
:config (smartparens-global-mode t))
(use-package vterm
:bind (("C-c t" . vterm)
:map vterm-mode-map
("C-q" . vterm-send-next-key))
:init (setq vterm-shell "/bin/zsh"))
(use-package vundo
:bind ("C-c u" . vundo)
:init (setq 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))
(use-package yasnippet
:bind (("C-c y n" . yas-new-snippet)
("C-c y i" . yas-insert-snippet)
("C-c y f" . yas-visit-snippet-file))
:init (setq yas-snippet-dirs '("~/.emacs.d/snippets/"))
:config (yas-global-mode t))
;;; Languages
(use-package
cc-mode
:mode (("\\.h\\'" . c++-mode)
("\\.hpp\\'" . c++-mode)
("\\.cpp\\'" . c++-mode)
("\\.cxx\\'" . c++-mode))
:hook (c++-mode . eglot-ensure))
(use-package clang-format
:hook (c++-mode . clang-format-on-save-mode)
:init
(setq clang-format-style "file")
(setq-default clang-format-fallback-style "Google"))
(use-package python
:mode ("\\.py\\'" . python-mode)
:hook (python-mode . eglot-ensure))
(use-package rust-mode
:mode ("\\.rs\\'")
:hook (rust-mode . eglot-ensure)
:config (setq rust-format-on-save t))
(use-package cargo
:hook (rust-mode . cargo-minor-mode))
(use-package tex
:ensure auctex
:mode ("\\.tex\\'" . latex-mode)
:config
(setq TeX-auto-save t
TeX-parse-self t
TeX-save-query nil)
(TeX-global-PDF-mode t))
;;; Other
(use-package pdf-tools
:mode ("\\.pdf\\'" . pdf-view-mode)
:config (pdf-loader-install))
(use-package markdown-mode
:mode ("\\.md\\'"))
(use-package csv-mode
:mode ("\\.csv\\'"))
(use-package json-mode
:mode ("\\.json\\'"))
(use-package yaml-mode
:mode ("\\.yaml\\'"))
(use-package protobuf-mode
:mode ("\\.proto\\'"))
;; Conditional
(when (string= (system-name) "boxspren")
(if (file-exists-p "~/misc/conf/personal.el")
(load-file "~/misc/conf/personal.el")))
(when (string= (system-name) "boxspren")
(if (file-exists-p "~/misc/conf/work.el")
(load-file "~/misc/conf/work.el")))