Adithya Chari

Email: contact@adchari.dev

Sourcehut: adchari

LinkedIn: adithyachari

Resume: Click Here

~/adchari/.emacs/

;;; -*- 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")))