diff --git a/user/app/emacs/init.el b/user/app/emacs/init.el index 0753945b..954188d4 100644 --- a/user/app/emacs/init.el +++ b/user/app/emacs/init.el @@ -10,183 +10,145 @@ ;; ;;; Code: -; Text -(setq inhibit-startup-message t) +;; Startup hook for mainly gui related things +(add-hook 'emacs-startup-hook #'(lambda () + ;; No startup screen + (setq inhibit-startup-message t) -; I want declarative config, no custom -(setq custom-file "/dev/null") + ;; Transparent background + (set-frame-parameter nil 'alpha-background 85) + (add-to-list 'default-frame-alist '(alpha-background . 85)) + (add-to-list 'default-frame-alist '(inhibit-double-buffering . t)) -; Some sane settings -(scroll-bar-mode -1) ; Disable visible scrollbar -(tool-bar-mode -1) ; Disable the toolbar -(tooltip-mode -1) ; Disable tooltips -(set-fringe-mode 10) ; Give some breathing room -(blink-cursor-mode 0) ; No blinking -(global-hl-line-mode) ; Where am I? + ;; I want declarative config, no custom + (setq custom-file "/dev/null") -; (Somewhat) precision scrolling -(pixel-scroll-mode 1) -(pixel-scroll-precision-mode 1) -(setq touch-screen-precision-scroll t) + ;; Disable the menu bar + (menu-bar-mode -1) -;; Mouse & Smooth Scroll -;; Scroll one line at a time (less "jumpy" than defaults) -(when (display-graphic-p) - (setq mouse-wheel-scroll-amount '(1 ((shift) . 1)) - mouse-wheel-progressive-speed nil)) -(setq scroll-step 1 - scroll-margin 1 - scroll-conservatively 101) -(global-visual-line-mode 1) ; Visual lines make more sense + ;; Disable visible scrollbar + (scroll-bar-mode -1) -;; Garbage collection to speed things up -(add-hook 'after-init-hook - #'(lambda () - (setq gc-cons-threshold 120000))) -(add-hook 'focus-out-hook 'garbage-collect) + ;; Disable the toolbar + (tool-bar-mode -1) -;; auto revert buffers -(setq global-auto-revert-mode t) -(setq auto-revert-use-notify t) + ;; Disable tooltips + (tooltip-mode -1) -;; For camelCase -(global-subword-mode 1) + ;; Breathing room + (set-fringe-mode 10) -;; ripgrep as grep -(setq grep-command "rg -nS --no-heading " - grep-use-null-device nil) + ;; No blinking + (blink-cursor-mode 0) -;; I prefer visual lines -(setq display-line-numbers-type 'visual - line-move-visual t) -(add-hook 'prog-mode-hook 'display-line-numbers-mode) + ;; Highlight current line + (global-hl-line-mode) -(menu-bar-mode -1) ; Disable the menu bar + ;; Bigger text + (set-face-attribute 'default nil :height 150) -(set-frame-parameter nil 'alpha-background 85) -(add-to-list 'default-frame-alist '(alpha-background . 85)) -(add-to-list 'default-frame-alist '(inhibit-double-buffering . t)) + ;; Fira and glyphs + (when (window-system) + (set-frame-font "FiraCode Nerd Font")) + (let ((alist '((33 . ".\\(?:\\(?:==\\|!!\\)\\|[!=]\\)") + (35 . ".\\(?:###\\|##\\|_(\\|[#(?[_{]\\)") + (36 . ".\\(?:>\\)") + (37 . ".\\(?:\\(?:%%\\)\\|%\\)") + (38 . ".\\(?:\\(?:&&\\)\\|&\\)") + (42 . ".\\(?:\\(?:\\*\\*/\\)\\|\\(?:\\*[*/]\\)\\|[*/>]\\)") + (43 . ".\\(?:\\(?:\\+\\+\\)\\|[+>]\\)") + (45 . ".\\(?:\\(?:-[>-]\\|<<\\|>>\\)\\|[<>}~-]\\)") + (46 . ".\\(?:\\(?:\\.[.<]\\)\\|[.=-]\\)") + (47 . ".\\(?:\\(?:\\*\\*\\|//\\|==\\)\\|[*/=>]\\)") + (48 . ".\\(?:x[a-zA-Z]\\)") + (58 . ".\\(?:::\\|[:=]\\)") + (59 . ".\\(?:;;\\|;\\)") + (60 . ".\\(?:\\(?:!--\\)\\|\\(?:~~\\|->\\|\\$>\\|\\*>\\|\\+>\\|--\\|<[<=-]\\|=[<=>]\\||>\\)\\|[*$+~/<=>|-]\\)") + (61 . ".\\(?:\\(?:/=\\|:=\\|<<\\|=[=>]\\|>>\\)\\|[<=>~]\\)") + (62 . ".\\(?:\\(?:=>\\|>[=>-]\\)\\|[=>-]\\)") + (63 . ".\\(?:\\(\\?\\?\\)\\|[:=?]\\)") + (91 . ".\\(?:]\\)") + (92 . ".\\(?:\\(?:\\\\\\\\\\)\\|\\\\\\)") + (94 . ".\\(?:=\\)") + (119 . ".\\(?:ww\\)") + (123 . ".\\(?:-\\)") + (124 . ".\\(?:\\(?:|[=|]\\)\\|[=>|]\\)") + (126 . ".\\(?:~>\\|~~\\|[>=@~-]\\)") + ))) + (dolist (char-regexp alist) + (set-char-table-range composition-function-table (car char-regexp) + `([,(cdr char-regexp) 0 font-shape-gstring]))) -;; Make ESC quit prompts -(global-set-key (kbd "") 'keyboard-escape-quit) + (dashboard-setup-startup-hook)) -(setq scroll-preserve-screen-position nil) -(setq redisplay-skip-fontification-on-input t) -(require 'use-package) -(setq use-package-always-ensure t) -(use-package command-log-mode) + )) -;; Enable vertico -(use-package vertico - :custom - (vertico-scroll-margin 0) ;; Different scroll margin - (vertico-count 20) ;; Show more candidates - (vertico-resize nil) ;; Grow and shrink the Vertico minibuffer - (vertico-cycle t) ;; Enable cycling for `vertico-next/previous' - :init - (vertico-mode)) -;; Completion -(use-package hotfuzz) -(use-package orderless) -(setq completion-styles '(orderless flex hotfuzz)) +(add-hook 'after-init-hook #'(lambda () + ;; Garbage collection threshold + (setq gc-cons-threshold 120000) + (add-hook 'focus-out-hook 'garbage-collect) -;; Magit -(use-package magit) + ;; Auto revert + (global-auto-revert-mode 1) + (setq auto-revert-use-notify t + revert-without-query t) -;; Projectile -(use-package projectile - :init - (projectile-mode +1)) + ;; camelCase and PascalCase + (global-subword-mode 1) -;; Enable vim -(setq evil-want-keybinding nil) + ;; ripgrep as grep + (setq grep-command "rg -nS --no-heading " + grep-use-null-device nil) -(use-package evil - :init - (setq evil-want-keybinding nil) - :config - (evil-set-leader nil (kbd "C-SPC")) - (evil-set-leader 'normal (kbd "SPC")) - (evil-set-leader 'motion (kbd "SPC")) - (setq evil-respect-visual-line-mode t) - (evil-mode 1)) + ;; "y" or "n" instead of "yes" or "no" + (setq use-short-answers t) -(use-package evil-collection - :init - (setq evil-want-keybinding nil) - :config - (evil-collection-init)) + ;; Make ESC quit prompts + (global-set-key (kbd "") 'keyboard-escape-quit) -;; based on http://emacsredux.com/blog/2013/04/03/delete-file-and-buffer/ -(defun delete-file-and-buffer () - "Kill the current buffer and deletes the file it is visiting." - (interactive) - (let ((filename (buffer-file-name))) - (if filename - (if (y-or-n-p (concat "Do you really want to delete file " filename " ?")) - (progn - (delete-file filename) - (message "Deleted file %s." filename) - (kill-buffer))) - (message "Not a file visiting buffer!")))) + ;; Mouse & Smooth Scroll + (setq scroll-step 1 + scroll-margin 1 + scroll-conservatively 101 + scroll-preserve-screen-position nil + redisplay-skip-fontification-on-input t) -(evil-define-key 'motion 'global (kbd "j") 'evil-next-visual-line) -(evil-define-key 'motion 'global (kbd "k") 'evil-previous-visual-line) -(evil-define-key 'motion 'global (kbd ".") 'find-file) -(evil-define-key 'motion 'global (kbd "bi") 'ibuffer) -(evil-define-key 'motion 'global (kbd "bd") 'delete-buffer) -(evil-define-key 'motion 'global (kbd "bn") 'next-buffer) -(evil-define-key 'motion 'global (kbd "bp") 'previous-buffer) -(evil-define-key 'motion 'global (kbd "pp") 'projectile-switch-project) -(evil-define-key 'motion 'global (kbd "pf") 'projectile-find-file) -(evil-define-key 'motion 'global (kbd "pa") 'projectile-add-known-project) -(evil-define-key 'motion 'global (kbd "gg") 'magit-status) -(evil-define-key 'motion 'global (kbd "hv") 'describe-variable) -(evil-define-key 'motion 'global (kbd "hf") 'describe-function) -(evil-define-key 'motion 'global (kbd "hk") 'describe-key) -(evil-define-key 'motion 'global (kbd "hF") 'describe-face) -(evil-define-key 'motion 'global (kbd "ws") 'evil-window-split) -(evil-define-key 'motion 'global (kbd "wv") 'evil-window-vsplit) -(defun evil-window-split-follow () - (interactive) - (let ((evil-split-window-below t)) - (evil-window-split))) -(defun evil-window-vsplit-follow () - (interactive) - (let ((evil-vsplit-window-right t)) - (evil-window-vsplit))) -(evil-define-key 'motion 'global (kbd "wS") 'evil-window-split-follow) -(evil-define-key 'motion 'global (kbd "wV") 'evil-window-vsplit-follow) -(evil-define-key 'motion 'global (kbd "wd") 'evil-window-delete) -(evil-define-key 'motion 'global (kbd "wj") 'evil-window-down) -(evil-define-key 'motion 'global (kbd "wk") 'evil-window-up) -(evil-define-key 'motion 'global (kbd "wh") 'evil-window-left) -(evil-define-key 'motion 'global (kbd "wl") 'evil-window-right) -(evil-define-key 'motion 'global (kbd "fd") 'delete-file-and-buffer) -(evil-define-key 'motion 'org-mode-map (kbd "mll") 'org-insert-link) -(define-key magit-mode-map (kbd "SPC") nil) + ;; Visual lines make more sense + (global-visual-line-mode 1) -(global-set-key (kbd "C-j") 'evil-window-down) -(global-set-key (kbd "C-k") 'evil-window-up) -(global-set-key (kbd "C-h") 'evil-window-left) -(global-set-key (kbd "C-l") 'evil-window-right) + ;; Line numbers + (setq display-line-numbers-type 'visual + line-move-visual t) + (add-hook 'prog-mode-hook 'display-line-numbers-mode) -(setq magit-display-buffer-function 'magit-display-buffer-fullframe-status-v1) -(setq magit-bury-buffer-function 'magit-restore-window-configuration) -(add-hook 'git-commit-mode-hook 'evil-insert-state) + ;; Fix stupid backup confirmations + (setq backup-directory-alist '("." "~/.emacs.d/cache/backups")) + (setq tramp-auto-save-directory "/dev/null"))) +;; Packages + +;; I am a nerd (use-package nerd-icons + :ensure t) + +;; Theme and modeline +(use-package doom-themes :ensure t :config (setq doom-themes-enable-bold t - doom-themes-enable-italic t) - (setq custom-theme-directory "~/.config/emacs/themes") - (load-theme 'doom-stylix t) - ) + doom-themes-enable-italic t + custom-theme-directory "~/.config/emacs/themes") + (load-theme 'doom-stylix t)) +(use-package doom-modeline + :ensure t + :init (doom-modeline-mode 1) + :custom ((doom-modeline-height 15))) + +;; Dashboard (use-package dashboard :ensure t :config @@ -213,57 +175,133 @@ :height 1.0 :v-adjust 0 :face 'font-lock-keyword-face)) - (setq initial-buffer-choice (lambda () (get-buffer-create dashboard-buffer-name))) - (dashboard-setup-startup-hook) - (set-face-attribute 'default nil :height 150) ; Bigger text - (when (window-system) - (set-frame-font "FiraCode Nerd Font")) - (let ((alist '((33 . ".\\(?:\\(?:==\\|!!\\)\\|[!=]\\)") - (35 . ".\\(?:###\\|##\\|_(\\|[#(?[_{]\\)") - (36 . ".\\(?:>\\)") - (37 . ".\\(?:\\(?:%%\\)\\|%\\)") - (38 . ".\\(?:\\(?:&&\\)\\|&\\)") - (42 . ".\\(?:\\(?:\\*\\*/\\)\\|\\(?:\\*[*/]\\)\\|[*/>]\\)") - (43 . ".\\(?:\\(?:\\+\\+\\)\\|[+>]\\)") - (45 . ".\\(?:\\(?:-[>-]\\|<<\\|>>\\)\\|[<>}~-]\\)") - (46 . ".\\(?:\\(?:\\.[.<]\\)\\|[.=-]\\)") - (47 . ".\\(?:\\(?:\\*\\*\\|//\\|==\\)\\|[*/=>]\\)") - (48 . ".\\(?:x[a-zA-Z]\\)") - (58 . ".\\(?:::\\|[:=]\\)") - (59 . ".\\(?:;;\\|;\\)") - (60 . ".\\(?:\\(?:!--\\)\\|\\(?:~~\\|->\\|\\$>\\|\\*>\\|\\+>\\|--\\|<[<=-]\\|=[<=>]\\||>\\)\\|[*$+~/<=>|-]\\)") - (61 . ".\\(?:\\(?:/=\\|:=\\|<<\\|=[=>]\\|>>\\)\\|[<=>~]\\)") - (62 . ".\\(?:\\(?:=>\\|>[=>-]\\)\\|[=>-]\\)") - (63 . ".\\(?:\\(\\?\\?\\)\\|[:=?]\\)") - (91 . ".\\(?:]\\)") - (92 . ".\\(?:\\(?:\\\\\\\\\\)\\|\\\\\\)") - (94 . ".\\(?:=\\)") - (119 . ".\\(?:ww\\)") - (123 . ".\\(?:-\\)") - (124 . ".\\(?:\\(?:|[=|]\\)\\|[=>|]\\)") - (126 . ".\\(?:~>\\|~~\\|[>=@~-]\\)") - ) - )) - (dolist (char-regexp alist) - (set-char-table-range composition-function-table (car char-regexp) - `([,(cdr char-regexp) 0 font-shape-gstring]))))) + (setq initial-buffer-choice (lambda () (get-buffer-create dashboard-buffer-name)))) -; Fix stupid backup confirmations -(setq backup-directory-alist '("." "~/.emacs.d/cache/backups")) -(setq tramp-auto-save-directory "/dev/null") +;; Setup treesitter +(require 'treesit) +(treesit-major-mode-setup) + +;; use-package +(require 'use-package) +(setq use-package-always-ensure t) + +;; command-log-mode +(use-package command-log-mode) + +;; Enable vertico +(use-package vertico + :custom + (vertico-scroll-margin 0) ;; Different scroll margin + (vertico-count 20) ;; Show more candidates + (vertico-resize nil) ;; Grow and shrink the Vertico minibuffer + (vertico-cycle t) ;; Enable cycling for `vertico-next/previous' + :init + (vertico-mode)) + +;; Completion +(use-package hotfuzz) +(use-package orderless) +(setq completion-styles '(orderless flex hotfuzz)) + +;; Magit +(use-package magit + :config + (setq magit-display-buffer-function 'magit-display-buffer-fullframe-status-v1) + (setq magit-bury-buffer-function 'magit-restore-window-configuration) + (add-hook 'git-commit-mode-hook 'evil-insert-state)) + +;; Projectile +(use-package projectile + :init + (projectile-mode +1)) + +;; Enable vim +(setq evil-want-keybinding nil) + +(use-package evil + :init + (setq evil-want-keybinding nil) + :config + (evil-set-leader nil (kbd "C-SPC")) + (evil-set-leader 'normal (kbd "SPC")) + (evil-set-leader 'motion (kbd "SPC")) + (setq evil-respect-visual-line-mode t) + (evil-mode 1)) + +(use-package evil-collection + :init + (setq evil-want-keybinding nil) + :config + (evil-collection-init) + + ;; Visual mode keybinds + (evil-define-key 'motion 'global (kbd "j") 'evil-next-visual-line) + (evil-define-key 'motion 'global (kbd "k") 'evil-previous-visual-line) + + ;; File and buffer keybinds + (evil-define-key 'motion 'global (kbd ".") 'find-file) + (evil-define-key 'motion 'global (kbd "bi") 'ibuffer) + (evil-define-key 'motion 'global (kbd "bd") 'delete-buffer) + (evil-define-key 'motion 'global (kbd "bn") 'next-buffer) + (evil-define-key 'motion 'global (kbd "bp") 'previous-buffer) + ;; based on http://emacsredux.com/blog/2013/04/03/delete-file-and-buffer/ + (defun delete-file-and-buffer () + "Kill the current buffer and deletes the file it is visiting." + (interactive) + (let ((filename (buffer-file-name))) + (if filename + (if (y-or-n-p (concat "Do you really want to delete file " filename " ?")) + (progn + (delete-file filename) + (message "Deleted file %s." filename) + (kill-buffer))) + (message "Not a file visiting buffer!")))) + (evil-define-key 'motion 'global (kbd "fd") 'delete-file-and-buffer) + + ;; Project keybinds + (evil-define-key 'motion 'global (kbd "pp") 'projectile-switch-project) + (evil-define-key 'motion 'global (kbd "pf") 'projectile-find-file) + (evil-define-key 'motion 'global (kbd "pa") 'projectile-add-known-project) + (evil-define-key 'motion 'global (kbd "gg") 'magit-status) + + ;; Describe keybinds + (evil-define-key 'motion 'global (kbd "hv") 'describe-variable) + (evil-define-key 'motion 'global (kbd "hf") 'describe-function) + (evil-define-key 'motion 'global (kbd "hk") 'describe-key) + (evil-define-key 'motion 'global (kbd "hF") 'describe-face) + + ;; Window keybinds + (evil-define-key 'motion 'global (kbd "ws") 'evil-window-split) + (evil-define-key 'motion 'global (kbd "wv") 'evil-window-vsplit) + (defun evil-window-split-follow () + (interactive) + (let ((evil-split-window-below t)) + (evil-window-split))) + (defun evil-window-vsplit-follow () + (interactive) + (let ((evil-vsplit-window-right t)) + (evil-window-vsplit))) + (evil-define-key 'motion 'global (kbd "wS") 'evil-window-split-follow) + (evil-define-key 'motion 'global (kbd "wV") 'evil-window-vsplit-follow) + + (evil-define-key 'motion 'global (kbd "wd") 'evil-window-delete) + (evil-define-key 'motion 'global (kbd "wj") 'evil-window-down) + (evil-define-key 'motion 'global (kbd "wk") 'evil-window-up) + (evil-define-key 'motion 'global (kbd "wh") 'evil-window-left) + (evil-define-key 'motion 'global (kbd "wl") 'evil-window-right) + + + (evil-define-key 'motion 'org-mode-map (kbd "mll") 'org-insert-link) + (define-key magit-mode-map (kbd "SPC") nil) + + (global-set-key (kbd "C-j") 'evil-window-down) + (global-set-key (kbd "C-k") 'evil-window-up) + (global-set-key (kbd "C-h") 'evil-window-left) + (global-set-key (kbd "C-l") 'evil-window-right)) (require 'sudo-edit) (setq sudo-edit-local-method "doas") (setq auth-source-save-behavior nil) - (evil-define-key 'normal 'global (kbd "fU") 'sudo-edit) (evil-define-key 'normal 'global (kbd "fu") 'sudo-edit-find-file) -(use-package doom-themes - :ensure t - :init ) - -(use-package doom-modeline - :ensure t - :init (doom-modeline-mode 1) - :custom ((doom-modeline-height 15)))