Last active
March 10, 2023 14:50
-
-
Save 4lex1v/883b0f553e20e62d874f65817892c6cf to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(require 'seq) | |
(require 'dired) | |
(require 'cl-lib) | |
(setq | |
gc-cons-threshold (* 100 1024 1024) ;; 100MB | |
read-process-output-max (* 1 1024 1024)) ;; 1MB | |
(defconst USER-EMACS-DIRECTORY (file-name-directory (or load-file-name (buffer-file-name)))) | |
(defconst USER-INIT-FILE (concat USER-EMACS-DIRECTORY "init.el")) | |
(defconst IS-MAC (eq system-type 'darwin)) | |
(defconst IS-WINDOWS (eq system-type 'windows-nt)) | |
(defconst IS-UNIX (not IS-WINDOWS)) | |
(defun 4l/swap-two-windows () | |
(interactive) | |
(if (not (eq (length (window-list)) 2)) | |
(error "Can swap only two windows for now...") | |
(let* ((windows-l (window-list)) | |
(left-window (car windows-l)) | |
(lw-buffer (window-buffer left-window)) | |
(right-window (cadr windows-l)) | |
(rw-buffer (window-buffer right-window))) | |
(set-window-buffer left-window rw-buffer) | |
(set-window-buffer right-window lw-buffer)))) | |
(defun 4l/close-buffer (&optional arg) | |
(interactive "P") | |
(kill-buffer (current-buffer)) | |
(if (and (not (equal arg 'nil)) | |
(> (count-windows) 1)) | |
(delete-window))) | |
(defun 4l/close-other-window () | |
(interactive) | |
(if (> (count-windows) 1) | |
(progn | |
(other-window 1) | |
(kill-buffer (current-buffer)) | |
(delete-window)))) | |
(defun 4l/remedy-open-file () | |
(interactive) | |
(let ((filepath (buffer-file-name (current-buffer))) | |
(remedy (executable-find "remedybg.exe"))) | |
(shell-command (concat remedy " open-file " filepath) nil nil))) | |
(defun 4l/remedy-set-breakpoint-at-position () | |
(interactive) | |
(let ((filepath (buffer-file-name (current-buffer))) | |
(line (line-number-at-pos))) | |
(shell-command (concat "remedybg.exe add-breakpoint-at-file " filepath line) nil nil))) | |
(defun 4l/insert-block (end-with-semicolon-p) | |
(interactive "P") | |
(insert "{") | |
(newline-and-indent) | |
(newline) | |
(insert (if end-with-semicolon-p "};" "}")) | |
(beginning-of-line) | |
(indent-according-to-mode) | |
(forward-line -1) | |
(indent-according-to-mode)) | |
(defun 4l/close-compilation-buffer () | |
(interactive) | |
(let ((comp-window (get-buffer-window "*compilation*"))) | |
(if comp-window | |
(quit-window nil comp-window)))) | |
(defun 4l/open-compilation-buffer () | |
(interactive) | |
(if (not (get-buffer-window "*compilation*")) | |
(if (not (get-buffer "*compilation*")) | |
(4l/project-rebuild) | |
(progn | |
(display-buffer "*compilation*"))))) | |
(defun 4l/project-root () | |
(expand-file-name (cdr (project-current t)))) | |
(defun 4l/project-shell () | |
(interactive) | |
(let ((default-directory (4l/project-root))) | |
(shell))) | |
(defun 4l/rerun-premake () | |
(interactive) | |
(let ((default-directory (4l/project-root))) | |
(compile "premake5 vs2022"))) | |
(defun 4l/open-git-bash-shell () | |
(interactive) | |
"Start a git-bash.exe process on Windows as a shell" | |
(let ((default-directory (4l/project-root)) | |
(shell-file-name (executable-find "git-bash.exe")) | |
(explicit-bash-args '("--login -i"))) | |
(if (null shell-file-name) | |
(error "Couldn't find bash.exe in the path")) | |
(call-interactively 'shell))) | |
(defun 4l/project-compile () | |
"Run `compile' in the project root." | |
(declare (interactive-only compile)) | |
(interactive) | |
(let ((default-directory (4l/project-root))) | |
(compile compile-command))) | |
(defun 4l/project-rebuild () | |
(interactive) | |
(let ((default-directory (cdr (project-current t)))) | |
(call-interactively 'recompile))) | |
(let ((font-setting | |
(pcase system-type | |
('darwin "Monaco-16") | |
('windows-nt "Iosevka SS08 Slab Extended-16")))) | |
;;('windows-nt "Cascadia Mono Light-16")))) | |
(add-to-list 'initial-frame-alist (cons 'font font-setting)) | |
(setq default-frame-alist initial-frame-alist) | |
(set-frame-font font-setting)) | |
(put 'dired-find-alternate-file 'disabled nil) | |
(put 'narrow-to-region 'disabled nil) | |
(put 'narrow-to-page 'disabled nil) | |
(fset 'yes-or-no-p 'y-or-n-p) | |
(show-paren-mode t) | |
(delete-selection-mode t) | |
(global-auto-revert-mode t) | |
(prefer-coding-system 'utf-8-unix) | |
(column-number-mode 1) | |
(recentf-mode 1) | |
(blink-cursor-mode 0) | |
(tooltip-mode -1) | |
(tool-bar-mode -1) | |
(scroll-bar-mode -1) | |
(menu-bar-mode -1) | |
(setq-default | |
auto-window-vscroll nil | |
truncate-lines nil | |
initial-major-mode 'fundamental-mode | |
mode-line-default-help-echo nil | |
tab-width 2 | |
indent-tabs-mode nil | |
cursor-type 'box | |
cursor-in-non-selected-windows 'bar | |
frame-title-format "%f" | |
linum-format "%3d " | |
load-prefer-newer t | |
left-fringe-width 20 | |
word-wrap t | |
line-spacing 2 | |
buffer-file-coding-system 'utf-8-unix | |
case-fold-search nil | |
case-replace nil) | |
(setq | |
inhibit-startup-message t | |
initial-scratch-message nil | |
initial-buffer-choice nil | |
;;show-paren-delay 0.0 | |
ring-bell-function 'ignore | |
;;tramp-default-method "ssh" | |
make-backup-files nil | |
auto-save-default nil | |
kill-do-not-save-duplicates t | |
ad-redefinition-action 'accept | |
next-line-add-newlines nil | |
desktop-save-mode nil | |
;;desktop-save nil | |
default-directory "~/" | |
mouse-wheel-scroll-amount '(1) | |
mouse-wheel-progressive-speed nil | |
history-delete-duplicates t | |
custom-file (concat USER-EMACS-DIRECTORY "custom.el") | |
compilation-ask-about-save nil | |
;; Performance related settings | |
inhibit-compacting-font-caches t | |
jit-lock-defer-time 0 | |
fast-but-imprecise-scrolling t | |
search-upper-case nil | |
dabbrev-case-distinction nil | |
scroll-step 5 ;; optimal balance between scroll-speed and line flickering | |
dired-listing-switches "-lah") | |
(setq display-buffer-alist | |
`(("\\*compilation\\*" display-buffer-in-side-window | |
(side . bottom) | |
(window-height . 10) | |
(window-parameters . ((no-other-window . t) | |
(no-delete-other-windows . t))) | |
(font . "Iosevka SS08 Slab LtEx-12")))) | |
;; (when IS-WINDOWS | |
;; (let ((powershell-exe-path (executable-find "pwsh.exe"))) | |
;; (if powershell-exe-path | |
;; (setq explicit-shell-file-name powershell-exe-path)))) | |
;; To avoid acidental hits on the touchpad | |
(dolist (binding '("<mouse-1>" "<C-mouse-1>" "<C-down-mouse-1>")) | |
(define-key global-map (kbd binding) | |
(lambda nil (interactive) nil))) | |
(require 'abbrev) | |
(setq-default abbrev-mode t) | |
(require 'dabbrev) | |
(setq | |
dabbrev-case-replace t | |
dabbrev-case-fold-search t | |
dabbrev-case-distinction nil | |
dabbrev-upcase-means-case-search t) | |
(when (and (require 'ls-lisp) (require 'dired)) | |
(setq | |
ls-lisp-dirs-first t | |
ls-lisp-use-insert-directory-program nil)) | |
(global-set-key (kbd "M-n") 'forward-paragraph) | |
(global-set-key (kbd "M-p") 'backward-paragraph) | |
(global-set-key (kbd "M-g") #'goto-line) | |
(global-set-key (kbd "<M-wheel-up>") #'text-scale-increase) | |
(global-set-key (kbd "<M-wheel-down>") #'text-scale-decrease) | |
(global-set-key (kbd "C-c r") #'revert-buffer) | |
(global-set-key (kbd "<f7>") #'4l/project-compile) | |
(global-set-key (kbd "<C-f7>") #'4l/close-compilation-buffer) | |
(global-set-key (kbd "<C-M-f7>") #'4l/open-compilation-buffer) | |
(global-set-key (kbd "<f8>") #'next-error) | |
(global-set-key (kbd "<f5>") #'rg-quick-project-search) | |
;;(global-set-key (kbd "<f6>") #'rg-quick-search-default-dir) | |
(global-set-key (kbd "<f6>") #'helm-do-grep-ag) | |
(global-set-key (kbd "M-z") 'zap-up-to-char) | |
(global-set-key "\M-2" 'ibuffer) | |
(global-set-key (kbd "M-[") #'(lambda () (interactive) (4l/insert-block nil))) | |
(global-set-key (kbd "M-{") #'(lambda () (interactive) (4l/insert-block t))) | |
(global-set-key (kbd "<home>") #'back-to-indentation) | |
(require 'xref) | |
(global-set-key (kbd "C-,") 'xref-pop-marker-stack) | |
(global-set-key (kbd "C-.") 'xref-find-definitions) | |
(require 'project) | |
(global-set-key (kbd "M-1") 'project-find-file) | |
(setq | |
package-enable-at-startup nil | |
package-check-signature nil | |
package--init-file-ensured t | |
package-archives '(("melpa" . "https://melpa.org/packages/") ("gnu-devel" . "https://elpa.gnu.org/devel/"))) | |
;; https://www.reddit.com/r/emacs/comments/53zpv9/how_do_i_get_emacs_to_stop_adding_custom_fields/ | |
(defun package--save-selected-packages (&rest opt) nil) | |
(require 'package) | |
(package-initialize) | |
(defmacro ensure-installed (package-symbol) | |
`(unless (locate-library ,(symbol-name package-symbol)) | |
(package-install ',package-symbol))) | |
(ensure-installed evil) | |
(setq-default | |
evil-kill-on-visual-paste nil) | |
(setq | |
evil-default-state 'normal | |
evil-default-cursor t | |
evil-want-C-u-scroll t | |
evil-want-keybinding nil | |
evil-want-integration t | |
evil-ex-substitute-global t | |
evil-ex-search-vim-style-regexp t | |
evil-ex-interactive-search-highlight 'selected-window) | |
(require 'evil) | |
(evil-set-leader 'normal (kbd "SPC")) | |
(evil-set-initial-state 'rg 'emacs) | |
(evil-set-initial-state 'info 'emacs) | |
(evil-set-initial-state 'calc 'emacs) | |
(evil-ex-define-cmd "e[val]" #'eval-buffer) | |
(evil-ex-define-cmd "we" #'(lambda () (interactive) (save-buffer) (eval-buffer))) | |
(evil-select-search-module 'evil-search-module 'evil-search) | |
(evil-mode 1) | |
(evil-define-key nil evil-motion-state-map | |
"j" 'next-line | |
"k" 'previous-line | |
"gD" 'xref-find-definitions-other-window) | |
(evil-define-key nil evil-insert-state-map | |
(kbd "C-;") 'comment-line | |
(kbd "C-x \\") 'align-regexp | |
(kbd "C-c r") 'revert-buffer | |
(kbd "M-j") 'join-line | |
(kbd "M-[") '(lambda () (interactive) (4l/insert-block nil)) | |
(kbd "M-{") '(lambda () (interactive) (4l/insert-block t)) | |
(kbd "C-S-d") '4l/duplicate-line) | |
(evil-define-key nil evil-normal-state-map | |
"$" 'evil-end-of-visual-line | |
(kbd "C-j") 'evil-forward-paragraph | |
(kbd "C-k") 'evil-backward-paragraph | |
(kbd "C-S-o") 'evil-jump-forward | |
"m" 'back-to-indentation | |
(kbd "C-u") 'evil-scroll-up | |
(kbd "M-u") 'universal-argument | |
(kbd "M-C-o") 'ff-get-other-file) | |
(ensure-installed evil-collection) | |
(require 'evil-collection) | |
(evil-collection-init) | |
(ensure-installed evil-args) | |
(when (require 'evil-args) | |
(define-key evil-inner-text-objects-map "a" 'evil-inner-arg) | |
(define-key evil-outer-text-objects-map "a" 'evil-outer-arg) | |
(define-key evil-normal-state-map "L" 'evil-forward-arg) | |
(define-key evil-normal-state-map "H" 'evil-backward-arg) | |
(define-key evil-normal-state-map "K" 'evil-jump-out-args)) | |
(evil-define-key 'normal cc-mode-map | |
(kbd "g o") 'ff-find-other-file) | |
(ensure-installed helm) | |
(setq | |
helm-buffer-max-length nil | |
helm-idle-delay 0.0 | |
helm-input-idle-delay 0.01 | |
helm-quick-update t | |
helm-split-window-inside-p t | |
helm-buffers-fuzzy-matching t | |
helm-move-to-line-cycle-in-source t | |
helm-scroll-amount 8 | |
helm-follow-mode-persistent t | |
helm-show-completion-display-function nil | |
helm-grep-ag-command "rg --smart-case --no-heading --line-number %s %s %s" | |
helm-grep-file-path 'relative | |
helm-ff-search-library-in-sexp t | |
helm-ff-file-name-history-use-recentf t | |
helm-ff-fuzzy-matching t | |
helm-ff-preferred-shell-mode 'shell-mode) | |
(require 'helm) | |
(defun 4l/helm-open-dired () | |
(interactive) | |
(helm-exit-and-execute-action 'helm-point-file-in-dired)) | |
(helm-mode) | |
(helm-autoresize-mode) | |
(substitute-key-definition 'find-tag 'helm-etags-select global-map) | |
(ensure-installed helm-xref) | |
(global-set-key (kbd "C-x C-f") 'helm-find-files) | |
(global-set-key (kbd "C-x f") 'helm-find-files) | |
(global-set-key (kbd "<leader> ff") 'helm-find-files) | |
(global-set-key (kbd "C-c h a") 'helm-apropos) | |
(global-set-key (kbd "C-c h s") '4l/helm-git-grep-project-files) | |
(global-set-key (kbd "M-x") 'helm-M-x) | |
(global-set-key (kbd "M-2") 'helm-mini) | |
(global-set-key (kbd "M-4") 'helm-bookmarks) | |
(global-set-key (kbd "M-:") 'helm-eval-expression-with-eldoc) | |
(global-set-key (kbd "M-i") 'helm-occur) | |
(global-set-key (kbd "M-y") 'helm-show-kill-ring) | |
(global-set-key (kbd "M-.") 'helm-etags-select) | |
(define-key helm-find-files-map (kbd "C-<backspace>") 'backward-kill-word) | |
(define-key helm-find-files-map (kbd "C-d") '4l/helm-open-dired) | |
(define-key helm-map (kbd "<tab>") 'helm-execute-persistent-action) | |
(define-key helm-map (kbd "C-i") 'helm-execute-persistent-action) | |
(define-key helm-map (kbd "C-z") 'helm-select-action) | |
(define-key helm-map (kbd "C-o") 'helm-next-source) | |
(define-key helm-map (kbd "C-j") 'helm-next-line) | |
(define-key helm-map (kbd "C-k") 'helm-previous-line) | |
(define-key helm-map (kbd "C-f") 'helm-toggle-full-frame) | |
(global-set-key (kbd "C-M-i") 'helm-imenu-in-all-buffers) | |
(define-key shell-mode-map (kbd "M-r") 'helm-comint-input-ring) | |
(ensure-installed ace-window) | |
(require 'ace-window) | |
(setq aw-scope 'frame); | |
(global-set-key (kbd "M-o") 'ace-window) | |
(ensure-installed rg) | |
(setq rg-custom-type-aliases '()) | |
(when (require 'rg) | |
(rg-enable-default-bindings) | |
(if IS-WINDOWS | |
(defun rg-executable () | |
(executable-find "rg.exe")))) | |
(rg-define-search rg-quick-project-search | |
"Quick search of a query in a project" | |
:query ask | |
:format literal | |
:files "all" | |
:flags '("-i") | |
:dir project) | |
(rg-define-search rg-quick-search-default-dir | |
"Quick search of a query in the default directory" | |
:query ask | |
:format literal | |
:files "all" | |
:flags '("-i") | |
:dir current) | |
(ensure-installed flycheck) | |
(ensure-installed rust-mode) | |
(require 'rust-mode) | |
(setq | |
rust-indent-offset 2 | |
rust-format-on-save nil) | |
(global-set-key (kbd "M-.") 'find-function-at-point) | |
(global-set-key (kbd "C-c e r") 'eval-region) | |
(defconst 4l/c-lang-style ;; added later under the label '4l' | |
'((c-basic-offset . 2) | |
(c-offsets-alist . ((innamespace . [0]) | |
(inextern-lang . [0]) | |
(case-label . 2))))) | |
;; MSVC compilation errors regexp | |
(add-to-list | |
'compilation-error-regexp-alist | |
(list | |
(concat "^" "\\([^(]+\\)" "(\\([0-9]+\\)\\(?:,\\([0-9]+\\)\\)?) ?: " "\\(\\(?:error\\|\\(warning\\)\\) [^ :]+\\)") | |
1 2 3 '(5) nil '(4 font-lock-keyword-face))) | |
(require 'cc-mode) | |
(define-key c-mode-map (kbd "M-e") 'helm-etags-select) | |
(c-add-style "4l" 4l/c-lang-style) | |
(setq c-default-style "4l") | |
(add-hook 'c-mode-hook | |
(lambda () | |
(c-toggle-comment-style nil))) | |
(font-lock-add-keywords 'c++-mode '(("\\<\\(assert\\|nullptr\\|defer\\|consteval\\|constinit\\)\\>" 1 font-lock-keyword-face))) | |
(ensure-installed magit) | |
(setq magit-status-show-hashes-in-headers t) | |
(global-set-key (kbd "C-c m s") 'magit-status) | |
(global-set-key (kbd "C-c m m") 'magit-dispatch-popup) | |
(global-set-key (kbd "C-c m b") 'magit-blame) | |
(global-set-key (kbd "C-c m o") 'magit-submodule-popup) | |
(global-set-key (kbd "C-c m y") 'magit-show-refs-popup) | |
(global-set-key (kbd "C-c m e") 'magit-ediff-popup) | |
(global-set-key (kbd "C-c m l l") 'magit-log-all) | |
(global-set-key (kbd "C-c m l b") 'magit-log-buffer-file) | |
(global-set-key (kbd "C-c m l c") 'magit-log-current) | |
(global-set-key (kbd "C-c m p") 'magit-push-popup) | |
(global-set-key (kbd "C-c m f") 'magit-pull-popup) | |
(add-to-list 'magit-log-arguments "--color") | |
(defun 4l/setup-theme () | |
(interactive) | |
(let* ((fg1 "#ebc78a") (fg2 "#e1d0b1") | |
(bg1 "#142732") (bg2 "#101740") | |
(red "#ea614c") | |
(green "#a9a931") | |
(gray "#a0a79e") | |
(orange "#aaaa22")) | |
(set-face-attribute 'default nil :foreground fg1 :background bg1) | |
(set-face-attribute 'region nil :background bg2) | |
(set-face-attribute 'cursor nil :background fg1 :foreground bg1) | |
(set-face-attribute 'fringe nil :background bg1) | |
(set-face-attribute 'link nil :foreground fg1 :underline t :weight 'bold) | |
(set-face-attribute 'link-visited nil :foreground fg1 :underline t :weight 'normal) | |
(set-face-attribute 'header-line nil :foreground fg2 :background bg2) | |
(set-face-attribute 'trailing-whitespace nil :foreground bg1 :background orange) | |
(set-face-attribute 'lazy-highlight nil :foreground fg2 :background bg2) | |
(set-face-attribute 'success nil :foreground green) | |
(set-face-attribute 'warning nil :foreground orange) | |
(set-face-attribute 'error nil :foreground red) | |
(set-face-attribute 'mode-line nil :foreground bg1 :background fg1 :box nil) | |
(set-face-attribute 'mode-line-inactive nil :foreground bg1 :background gray :box nil) | |
(set-face-attribute 'mode-line-highlight nil :foreground fg1 :background bg1) | |
(set-face-attribute 'mode-line-emphasis nil :foreground bg1 :background fg1 :box nil) | |
(set-face-attribute 'font-lock-keyword-face nil :foreground red) | |
(set-face-attribute 'font-lock-builtin-face nil :foreground red) | |
(set-face-attribute 'font-lock-comment-face nil :foreground gray) | |
(set-face-attribute 'font-lock-constant-face nil :foreground fg1) | |
(set-face-attribute 'font-lock-doc-face nil :foreground gray) | |
(set-face-attribute 'font-lock-function-name-face nil :foreground fg1) | |
(set-face-attribute 'font-lock-type-face nil :foreground fg1) | |
(set-face-attribute 'font-lock-preprocessor-face nil :foreground red) | |
(set-face-attribute 'font-lock-negation-char-face nil :foreground fg1) | |
(set-face-attribute 'font-lock-string-face nil :foreground green) | |
(set-face-attribute 'font-lock-variable-name-face nil :foreground fg1) | |
(set-face-attribute 'font-lock-warning-face nil :foreground orange :underline t) | |
(set-face-attribute 'minibuffer-prompt nil :foreground red :bold t) | |
(set-face-attribute 'isearch nil :foreground red :background bg2 :underline t) | |
(set-face-attribute 'isearch-fail nil :foreground orange :background bg2 :bold t) | |
(set-face-attribute 'dired-directory nil :foreground red :underline t) | |
(set-face-attribute 'helm-header nil :foreground bg1 :background fg1 :bold t) | |
(set-face-attribute 'helm-source-header nil :foreground bg1 :background fg2 :underline nil :bold t) | |
(set-face-attribute 'helm-match nil :foreground red :underline t) | |
(set-face-attribute 'helm-visible-mark nil :foreground orange :background bg2) | |
(set-face-attribute 'helm-selection nil :background bg2) | |
(set-face-attribute 'helm-selection-line nil :background bg1) | |
(set-face-attribute 'helm-candidate-number nil :foreground bg1 :background fg1) | |
(set-face-attribute 'helm-separator nil :foreground red) | |
(set-face-attribute 'helm-buffer-not-saved nil :foreground red) | |
(set-face-attribute 'helm-buffer-process nil :foreground fg1) | |
(set-face-attribute 'helm-buffer-saved-out nil :foreground fg1) | |
(set-face-attribute 'helm-buffer-size nil :foreground fg1) | |
(set-face-attribute 'helm-ff-directory nil :foreground green :background bg1 :weight 'bold) | |
(set-face-attribute 'helm-ff-file nil :foreground fg1 :weight 'normal) | |
(set-face-attribute 'helm-ff-executable nil :foreground fg1 :weight 'normal) | |
(set-face-attribute 'helm-ff-invalid-symlink nil :foreground fg1 :weight 'bold) | |
(set-face-attribute 'helm-ff-symlink nil :foreground red :weight 'bold) | |
(set-face-attribute 'helm-ff-prefix nil :foreground bg1 :background red :weight 'normal) | |
(set-face-attribute 'helm-ff-file-extension nil :foreground fg1 :weight 'normal) | |
(set-face-attribute 'helm-grep-cmd-line nil :foreground fg1) | |
(set-face-attribute 'helm-grep-file nil :foreground fg1) | |
(set-face-attribute 'helm-grep-finish nil :foreground fg2) | |
(set-face-attribute 'helm-grep-lineno nil :foreground fg1) | |
(set-face-attribute 'helm-grep-match nil :foreground red) | |
(set-face-attribute 'helm-moccur-buffer nil :foreground fg1) | |
)) | |
(4l/setup-theme) | |
(add-hook 'server-after-make-frame-hook #'4l/setup-theme) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment