;; -*- lexical-binding: t; -*- (require 'package) (setq package-check-signature nil package-archives '(("gnu" . "https://elpa.gnu.org/packages/") ("nongnu" . "https://elpa.nongnu.org/packages/") ("melpa" . "https://melpa.org/packages/"))) (package-initialize) (unless package-archive-contents (package-refresh-contents)) (require 'use-package) (require 'seq) (require 'treesit) (setq use-package-always-ensure t inhibit-startup-screen t initial-scratch-message nil initial-buffer-choice nil ring-bell-function #'ignore use-short-answers t create-lockfiles nil make-backup-files nil auto-save-default nil select-enable-clipboard t select-enable-primary nil save-interprogram-paste-before-kill nil confirm-nonexistent-file-or-buffer nil switch-to-buffer-obey-display-actions t custom-file (expand-file-name "custom.el" user-emacs-directory) display-line-numbers-type 'relative mouse-wheel-scroll-amount '(3 ((shift) . 1)) mouse-wheel-progressive-speed nil mouse-wheel-scroll-amount-horizontal '(3 . 1) pixel-scroll-precision-mode nil split-height-threshold nil split-width-threshold nil) (setq initial-major-mode 'text-mode) (setq initial-buffer-choice t) (setq-default indent-tabs-mode nil tab-width 4) (menu-bar-mode -1) (when (file-exists-p custom-file) (load custom-file)) (global-display-line-numbers-mode 1) (column-number-mode 1) (electric-pair-mode 1) (show-paren-mode 1) (save-place-mode 1) (recentf-mode 1) (savehist-mode 1) (xterm-mouse-mode 1) (use-package vertico :init (vertico-mode 1)) (use-package marginalia :init (marginalia-mode 1)) (use-package which-key :init (which-key-mode 1)) (use-package orderless :custom (completion-styles '(orderless basic))) (use-package consult :bind (("C-x b" . consult-buffer) ("M-s r" . consult-ripgrep) ("M-s l" . consult-line))) (use-package corfu :custom (corfu-auto t) (corfu-auto-prefix 2) :init (global-corfu-mode 1)) (use-package evil :init (setq evil-want-keybinding nil evil-want-C-u-scroll t evil-want-Y-yank-to-eol t evil-undo-system 'undo-redo evil-shift-width 4 evil-visual-x-select-clipboard nil) :config (evil-mode 1) (setq evil-echo-state nil)) (use-package evil-collection :after evil :config (evil-collection-init)) (use-package evil-surround :after evil :config (global-evil-surround-mode 1)) (use-package evil-commentary :after evil :config (evil-commentary-mode 1)) (make-directory "~/notes/" t) (use-package vterm) (use-package elcord :config (elcord-mode 1)) (use-package org :ensure nil :custom (org-directory "~/notes/") (org-agenda-files '("~/notes/")) (org-default-notes-file "~/notes/inbox.org") (org-startup-indented t) (org-log-done 'time) (org-todo-keywords '((sequence "TODO(t)" "NEXT(n)" "WAIT(w)" "|" "DONE(d)" "CANC(c)"))) (org-capture-templates '(("t" "Todo" entry (file+headline "~/notes/inbox.org" "Tasks") "* TODO %?\n %U\n") ("i" "Idea" entry (file+headline "~/notes/inbox.org" "Ideas") "* %?\n %U\n"))) :config (require 'org-tempo) (add-hook 'org-mode-hook #'visual-line-mode)) (use-package evil-org :after (evil org) :hook (org-mode . evil-org-mode) :config (require 'evil-org-agenda) (evil-org-agenda-set-keys)) (use-package denote :custom (denote-directory "~/notes/") (denote-file-type 'org)) (use-package consult-denote :after (consult denote) :config (consult-denote-mode 1)) (use-package eglot :ensure nil :hook ((c-mode . eglot-ensure) (c++-mode . eglot-ensure) (rust-mode . eglot-ensure) (go-mode . eglot-ensure) (zig-mode . eglot-ensure)) :config (add-to-list 'eglot-server-programs '((c-mode c++-mode) . ("clangd" "--background-index" "--header-insertion=never"))) (add-to-list 'eglot-server-programs '(zig-mode . ("zls")))) (use-package flymake :ensure nil :hook (prog-mode . flymake-mode)) (use-package rust-mode :mode "\\.rs\\'") (use-package go-mode :mode "\\.go\\'") (use-package zig-mode :mode "\\.zig\\'") (require 'warnings) (add-to-list 'warning-suppress-types '(bytecomp)) (defvar coast-treesit-language-sources '((bash . ("https://github.com/tree-sitter/tree-sitter-bash" "src")) (c . ("https://github.com/tree-sitter/tree-sitter-c" "src")) (cpp . ("https://github.com/tree-sitter/tree-sitter-cpp" "src")) (css . ("https://github.com/tree-sitter/tree-sitter-css" "src")) (go . ("https://github.com/tree-sitter/tree-sitter-go" "src")) (haskell . ("https://github.com/tree-sitter/tree-sitter-haskell" "src")) (html . ("https://github.com/tree-sitter/tree-sitter-html" "src")) (javascript . ("https://github.com/tree-sitter/tree-sitter-javascript" "src")) (json . ("https://github.com/tree-sitter/tree-sitter-json" "src")) (lua . ("https://github.com/tree-sitter-grammars/tree-sitter-lua" "src")) (make . ("https://github.com/tree-sitter-grammars/tree-sitter-make" "src")) (markdown . ("https://github.com/tree-sitter/tree-sitter-markdown" "src")) (python . ("https://github.com/tree-sitter/tree-sitter-python" "src")) (rust . ("https://github.com/tree-sitter/tree-sitter-rust" "src")) (toml . ("https://github.com/tree-sitter/tree-sitter-toml" "src")) (tsx . ("https://github.com/tree-sitter/tree-sitter-typescript" "tsx/src")) (typescript . ("https://github.com/tree-sitter/tree-sitter-typescript" "typescript/src")) (yaml . ("https://github.com/tree-sitter-grammars/tree-sitter-yaml" "src")))) (defun coast-treesit-install (language) (let* ((source (alist-get language coast-treesit-language-sources)) (url (car source)) (subdir (cadr source))) (when source (add-to-list 'treesit-language-source-alist (if subdir (list language url nil subdir) (list language url))) (treesit-install-language-grammar language)))) (defun my/make-terminal-transparent (&optional frame) (unless (display-graphic-p frame) (let ((target-frame (or frame (selected-frame))) (faces '(default line-number line-number-current-line fringe window-divider vertical-border hl-line))) (dolist (face faces) (when (facep face) (set-face-background face "unspecified-bg" target-frame))) (set-terminal-parameter (frame-terminal target-frame) 'background-mode 'dark)))) (add-hook 'window-setup-hook #'my/make-terminal-transparent) (add-hook 'after-make-frame-functions #'my/make-terminal-transparent) (advice-add 'load-theme :after (lambda (&rest _) (my/make-terminal-transparent))) (use-package doom-themes) (defun coast/remove-scratch-buffer () (let ((buffer (get-buffer "*scratch*"))) (when (and buffer (not (buffer-modified-p buffer)) (not (get-buffer-window buffer t))) (kill-buffer buffer)))) (add-hook 'after-init-hook #'coast/remove-scratch-buffer) (defun coast-treesit-install-missing () (dolist (language (mapcar #'car coast-treesit-language-sources)) (unless (treesit-language-available-p language) (condition-case nil (coast-treesit-install language) (error nil))))) (add-hook 'after-init-hook #'coast-treesit-install-missing) (add-hook 'emacs-startup-hook (lambda () (delete-other-windows))) (add-to-list 'load-path "/home/coast/.emacs.d/user-lisp") (require 'modeline) (use-package treemacs :ensure t :defer t :config (setq treemacs-collapse-dirs (if treemacs-python-executable 3 0) treemacs-deferred-git-apply-delay 0.5 treemacs-directory-name-transformer #'identity treemacs-display-in-side-window t treemacs-eldoc-display 'simple treemacs-file-event-delay 5000 treemacs-file-follow-delay 0.2 treemacs-follow-after-init t treemacs-expand-after-init t treemacs-indentation 2 treemacs-indentation-string " " treemacs-is-other-window nil treemacs-max-git-entries 5000 treemacs-no-png-images nil treemacs-persist-file (expand-file-name ".cache/treemacs-persist" user-emacs-directory) treemacs-recenter-distance 0.1 treemacs-file-watch-mode t treemacs-fringe-indicator-mode 'always treemacs-hide-gitignored-files-mode nil treemacs-width 30) (treemacs-resize-icons 11) (treemacs-follow-mode t) (treemacs-project-follow-mode t) (treemacs-filewatch-mode t) (treemacs-hide-gitignored-files-mode -1)) (use-package treemacs-evil :after (treemacs evil) :ensure t) (use-package treemacs-icons-dired :hook (dired-mode . treemacs-icons-dired-mode) :ensure t) (use-package treemacs-magit :after (treemacs magit) :ensure t) (defun my/treemacs-open-current-dir () "Toggle Treemacs open to current directory/project." (interactive) (require 'treemacs) (let ((state (treemacs-current-visibility))) (if (eq state 'visible) (treemacs) (treemacs-add-and-display-current-project-exclusively)))) (with-eval-after-load 'evil (evil-define-key 'normal 'global (kbd "SPC e") #'my/treemacs-open-current-dir))