emacs-config/init.el
2024-03-29 12:13:38 -05:00

297 lines
9.6 KiB
EmacsLisp

(scroll-bar-mode -1)
(tool-bar-mode -1)
(tooltip-mode -1)
(set-fringe-mode 10)
(menu-bar-mode -1)
(setq inhibit-startup-message t)
(setq visible-bell nil)
(setq ring-bell-function 'ignore)
(setq auto-save-timeout '5)
(setq auto-save-interval '20)
(setq global-auto-revert-non-file-buffers t)
(setq custom-file (locate-user-emacs-file "custom-vars.el"))
(load custom-file 'noerror 'nomessage)
(setq use-dialog-box nil)
(global-auto-revert-mode 1)
(setq global-auto-rever-non-file-buffers t)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
;; Comment/uncomment this line to enable MELPA Stable if desired. See `package-archive-priorities`
;; and `package-pinned-packages`. Most users will not need or want to do this.
;;(add-to-list 'package-archives '("melpa-stable" . "https://stable.melpa.org/packages/") t)
(package-initialize)
(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)
;; Initialize use-package on non-linux platforms
(unless (package-installed-p 'use-package)
(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))
(setq modus-themes-completions 'opinionated)
(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 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 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)
;; optional if you want which-key integration
(use-package which-key
:config
(which-key-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
:defer 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))
(use-package fzf
:bind (("C-c f g" . fzf-git-files)
("C-c f f" . fzf-find-file)
("C-c d" . fzf-directory)
("C-c f r" . fzf-grep)
("C-c b" . fzf-switch-buffer))
:config
(setq fzf/args "-x --print-query --margin=1,0 --no-hscroll"
fzf/executable "fzf"
fzf/git-grep-args "-i --line-number %s"
fzf/grep-command "rg --no-heading -nH"
fzf/position-bottom t
fzf/window-height 15))
(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
(when (file-directory-p "~/Code")
(setq projectile-project-search-path '("~/Code")))
(setq projectile-switch-project-action #'projectile-dired))
(use-package kubernetes-evil
:ensure t
:after kubernetes)