Skip to content

Instantly share code, notes, and snippets.

@marcs-feh
Last active July 1, 2023 22:41
Show Gist options
  • Save marcs-feh/49629dff27dcfb43d112cd64d5689760 to your computer and use it in GitHub Desktop.
Save marcs-feh/49629dff27dcfb43d112cd64d5689760 to your computer and use it in GitHub Desktop.
;; Options for this config file
(defconst option/alternative-evil-esc (kbd "C-c"))
(defconst user/font "JetBrains Mono NL Light")
(defconst user/font-height 120)
(defconst user/theme 'modus-vivendi)
(defconst user/use-alt-window-navigation t)
;; Disable startup message, scrollbar, toolbar, menu bar and visual bell for a
;; cleaner UI. Also use smaller tab width
(setq inhibit-startup-message t)
(scroll-bar-mode -1)
(tool-bar-mode -1)
(menu-bar-mode -1)
(setq visible-bell nil)
(setq-default tab-width 4)
(setq-default truncate-lines t)
;; Only cycle through buffers that represent files
(set-frame-parameter (selected-frame) 'buffer-predicate #'buffer-file-name)
;; Allow Emacs' window to be any size and not snap to characters
(setq frame-resize-pixelwise t)
;; Dont have a bunch of dired buffers
(setq dired-kill-when-opening-new-dired-buffer t)
;; Disable auto-save and backup files.
(setq auto-save-default nil)
(setq make-backup-files nil)
;; make so that ESC can quit prompts.
(global-set-key (kbd "<escape>") 'keyboard-escape-quit)
;; Make scrolling smoother and make lines scroll sooner.
(setq scroll-step 1)
(setq scroll-margin 8)
;; (setq scroll-conservatively 9999)
;; Show line and column numbers. Add fringes to the sides of the screen
(global-display-line-numbers-mode)
(column-number-mode)
;; (fringe-mode '(16 . 24))
;; Performance enhancing options, garbage collect on idle and window focus loss
;; wait until Emacs has allocated more memory before running gc. Disable show-paren
(defun MiB (n) (* n 1024 1024))
(add-hook 'after-init-hook
#'(lambda () (setq gc-cons-threshold (MiB 64))))
(add-hook 'focus-out-hook 'garbage-collect)
(run-with-idle-timer 5 t 'garbage-collect)
(show-paren-mode 0)
;; Package Manager
(require 'package)
(setq package-archives
'(("melpa" . "https://melpa.org/packages/")
("org" . "https://orgmode.org/elpa/")
("elpa" . "https://elpa.gnu.org/packages/")))
(package-initialize)
;; Ensure use-package is available
(unless (package-installed-p 'use-package)
(package-install 'use-package))
(require 'use-package)
(setq use-package-always-ensure t)
;; Vim style keys
(use-package evil
:ensure t
:init
(setq evil-want-integration t)
(setq evil-want-keybinding nil)
(setq evil-want-C-u-scroll t)
(setq evil-want-C-i-jump nil)
(setq evil-want-fine-undo 'fine)
:config
(evil-mode 1)
(evil-set-undo-system 'undo-redo))
;; Vim style keys for most of Emacs already existing functionlity
(use-package evil-collection
:after evil
:config
(evil-collection-init))
;; Unclutter statusbar
(use-package diminish)
;; Fuzzy finder
(use-package swiper)
;; Completion framework
(use-package ivy
:diminish
:bind
(:map ivy-minibuffer-map
("TAB" . ivy-alt-done)
("C-l" . ivy-alt-done)
("C-j" . ivy-next-line)
("C-k" . ivy-previous-line)
:map ivy-switch-buffer-map
("C-k" . ivy-previous-line)
("C-l" . ivy-done)
("C-d" . ivy-switch-buffer-kill)
:map ivy-reverse-i-search-map
("C-k" . ivy-previous-line)
("C-d" . ivy-reverse-i-search-kill))
:config
(ivy-mode 1))
;; LSP support
(use-package lsp-mode
:init
;; set prefix for lsp-command-keymap (few alternatives - "C-l", "C-c l")
(setq lsp-keymap-prefix "C-c l")
:hook
((zig-mode . lsp)
(c++-mode . lsp))
;; if you want which-key integration
;; (lsp-mode . lsp-enable-which-key-integration)
:commands lsp)
(use-package lsp-ivy :commands lsp-ivy-workspace-symbol)
;; Zig mode
(use-package zig-mode)
;; Go mode
(use-package go-mode)
;; Diminish minor modes
(diminish 'evil-collection-unimpaired-mode)
;; Keybinds
(evil-set-leader nil (kbd "SPC"))
(evil-global-set-key
'normal (kbd "C-s") 'save-buffer)
(evil-global-set-key
'normal (kbd "C-f") 'swiper)
(evil-global-set-key
'normal (kbd "C-o") 'other-window)
(evil-global-set-key
'normal (kbd "<leader>c") 'comment-line)
(evil-global-set-key
'normal (kbd "<leader>e") 'find-file)
(evil-global-set-key
'normal (kbd "<leader>f") 'switch-to-buffer)
(evil-global-set-key
'normal (kbd "<leader>x") 'kill-buffer-and-window)
(evil-global-set-key
'normal (kbd "<leader>k") 'kill-buffer)
(evil-global-set-key
'normal (kbd "<leader>q") 'delete-window)
(evil-global-set-key
'normal (kbd "<leader>sh") 'split-window-below)
(evil-global-set-key
'normal (kbd "<leader>sv") 'split-window-right)
(evil-global-set-key
'normal (kbd "<leader>sv") 'split-window-right)
(evil-global-set-key
'normal (kbd "L") 'evil-next-buffer)
(evil-global-set-key
'normal (kbd "H") 'evil-prev-buffer)
(evil-global-set-key
'insert option/alternative-evil-esc (kbd "<escape>"))
(evil-global-set-key
'normal (kbd "M-f") 'other-window)
(evil-global-set-key
'visual option/alternative-evil-esc (kbd "<escape>"))
(evil-global-set-key
'visual option/alternative-evil-esc (kbd "<escape>"))
;; Window navigation (requires Alt bindings that are commonly used by some window managers)
(when user/use-alt-window-navigation
(evil-global-set-key 'normal (kbd "M-j") 'evil-window-down)
(evil-global-set-key 'normal (kbd "M-h") 'evil-window-left)
(evil-global-set-key 'normal (kbd "M-l") 'evil-window-right)
(evil-global-set-key 'normal (kbd "M-k") 'evil-window-up))
;; Load things
(load-theme user/theme t)
(set-face-attribute 'default nil
:font user/font
:height user/font-height)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment