276 lines
8.3 KiB
EmacsLisp
276 lines
8.3 KiB
EmacsLisp
;;; init.el --- spacemacs like config
|
|
;; foosinn
|
|
|
|
;;; Commentary:
|
|
;; my config
|
|
|
|
;;; Code:
|
|
|
|
;; sane defaults
|
|
(setq delete-old-versions -1 ) ; delete excess backup versions silently
|
|
(setq version-control t ) ; use version control
|
|
(setq vc-make-backup-files t ) ; make backups file even when in version controlled dir
|
|
(setq backup-directory-alist `(("." . "~/.emacs.d/backups")) ) ; which directory to put backups file
|
|
(setq vc-follow-symlinks t ) ; don't ask for confirmation when opening symlinked file
|
|
(setq auto-save-file-name-transforms '((".*" "~/.emacs.d/auto-save-list/" t)) ) ;transform backups file name
|
|
(setq inhibit-startup-screen t ) ; inhibit useless and old-school startup screen
|
|
(setq ring-bell-function 'ignore ) ; silent bell when you make a mistake
|
|
(setq coding-system-for-read 'utf-8 ) ; use utf-8 by default
|
|
(setq coding-system-for-write 'utf-8 )
|
|
(setq sentence-end-double-space nil) ; sentence SHOULD end with only a point.
|
|
(setq default-fill-column 80) ; toggle wrapping text at the 80th character
|
|
(setq initial-scratch-message "Welcome in Emacs") ; print a default message in the empty scratch buffer opened at startup
|
|
|
|
;; package manager
|
|
(require 'package)
|
|
(setq package-enable-at-startup nil) ; tells emacs not to load any packages before starting up
|
|
(setq package-archives '(("org" . "http://orgmode.org/elpa/")
|
|
("gnu" . "http://elpa.gnu.org/packages/")
|
|
("melpa" . "https://melpa.org/packages/")))
|
|
(package-initialize)
|
|
|
|
;; use package
|
|
(unless (package-installed-p 'use-package)
|
|
(package-refresh-contents)
|
|
(package-install 'use-package))
|
|
(require 'use-package)
|
|
|
|
;; themes
|
|
(use-package doom-themes :ensure t
|
|
:config
|
|
(load-theme 'doom-dracula t))
|
|
(use-package all-the-icons :ensure t)
|
|
(use-package doom-modeline :ensure t
|
|
:hook (after-init . doom-modeline-mode))
|
|
(set-face-attribute 'default nil
|
|
:family "Meslo LG S DZ"
|
|
:height 105
|
|
:weight 'normal
|
|
:width 'normal)
|
|
|
|
;; evil config
|
|
(use-package evil :ensure t
|
|
:config (evil-mode 1))
|
|
(use-package evil-surround
|
|
:ensure t
|
|
:config
|
|
(global-evil-surround-mode 1)
|
|
(evil-define-key 'visual evil-surround-mode-map "s" 'evil-surround-region)
|
|
)
|
|
|
|
;; ivy config
|
|
(use-package ivy :ensure t
|
|
:config
|
|
(ivy-mode 1)
|
|
(setq ivy-use-virtual-buffers t)
|
|
(setq enable-recursive-minibuffers t)
|
|
(setq ivy-re-builders-alist
|
|
'((swiper . ivy--regex-plus)
|
|
(t . ivy--regex-fuzzy)))
|
|
|
|
|
|
;; better movement
|
|
(define-key ivy-minibuffer-map (kbd "C-j") 'ivy-next-line)
|
|
(define-key ivy-minibuffer-map (kbd "C-k") 'ivy-previous-line)
|
|
(define-key ivy-minibuffer-map (kbd "C-h") (kbd "DEL"))
|
|
(define-key ivy-minibuffer-map (kbd "C-S-h") help-map)
|
|
(define-key ivy-minibuffer-map (kbd "C-l") 'ivy-alt-done)
|
|
(define-key ivy-minibuffer-map (kbd "<escape>") 'minibuffer-keyboard-quit))
|
|
(use-package ivy-xref :ensure t
|
|
:init (if (< emacs-major-version 27)
|
|
(setq xref-show-xrefs-function #'ivy-xref-show-xrefs)
|
|
(setq xref-show-definitions-function #'ivy-xref-show-defs)))
|
|
|
|
;; counsel
|
|
(use-package counsel :ensure t
|
|
:config (counsel-mode 1))
|
|
(use-package counsel-projectile :ensure t)
|
|
(use-package swiper :ensure t)
|
|
|
|
;; projectile
|
|
(use-package projectile :ensure t
|
|
:config (projectile-mode +1))
|
|
|
|
;; which key
|
|
(use-package which-key :ensure t
|
|
:config
|
|
(which-key-mode 1)
|
|
(which-key-setup-side-window-bottom)
|
|
(which-key-setup-minibuffer)
|
|
(setq which-key-idle-delay .3)
|
|
)
|
|
|
|
;; langs
|
|
(use-package go-mode :ensure t)
|
|
|
|
;; code-with-fun
|
|
(use-package company
|
|
:config
|
|
(global-company-mode 1)
|
|
(setq company-idle-delay 0.2
|
|
company-minimum-prefix-length 2
|
|
company-require-match nil
|
|
company-dabbrev-ignore-case nil
|
|
company-dabbrev-downcase nil)
|
|
)
|
|
(use-package lsp-mode :ensure t
|
|
:commands (lsp lsp-deferred)
|
|
:hook (go-mode . lsp-deferred)
|
|
:config
|
|
(setq lsp-auto-configure t
|
|
lsp-prefer-flymake nil
|
|
lsp-auto-guess-root nil)
|
|
)
|
|
(use-package flycheck :ensure t
|
|
:init (global-flycheck-mode))
|
|
(use-package lsp-ui :ensure t
|
|
:commands lsp-ui-mode)
|
|
(use-package company-lsp :ensure t
|
|
:commands company-lsp)
|
|
(use-package yasnippet :ensure t
|
|
:config (yas-global-mode 1))
|
|
(use-package yasnippet-snippets :ensure t)
|
|
|
|
;; treemacs
|
|
(use-package treemacs :ensure t)
|
|
(use-package lsp-treemacs :ensure t
|
|
:commands lsp-treemacs-errors-list)
|
|
(use-package treemacs-evil :ensure t
|
|
:after treemacs evil)
|
|
(use-package treemacs-evil :ensure t
|
|
:after treemacs evil)
|
|
(use-package treemacs-evil :ensure t
|
|
:after treemacs evil)
|
|
|
|
;; magit
|
|
(use-package evil-magit :ensure t)
|
|
(use-package magit :ensure t)
|
|
|
|
;; general config
|
|
(use-package general :ensure t
|
|
:config
|
|
(menu-bar-mode -1)
|
|
(toggle-scroll-bar -1)
|
|
(tool-bar-mode -1)
|
|
(general-define-key
|
|
:states '(normal visual insert emacs)
|
|
:prefix "SPC"
|
|
:non-normal-prefix "C-SPC"
|
|
|
|
;; simple command
|
|
"'" '(iterm-focus :which-key "iterm")
|
|
"?" '(iterm-goto-filedir-or-home :which-key "iterm - goto dir")
|
|
"/" 'counsel-ag
|
|
"TAB" '(switch-to-other-buffer :which-key "prev buffer")
|
|
"SPC" '(avy-goto-word-or-subword-1 :which-key "go to char")
|
|
|
|
;; Applications
|
|
"a" '(:ignore t :which-key "Applications")
|
|
"ar" 'ranger
|
|
"ad" 'dired
|
|
|
|
;; Files
|
|
"ff" 'counsel-find-file
|
|
"fL" 'counsel-locate
|
|
|
|
;; Git
|
|
"g" '(:ignore t :which-key "Magit")
|
|
"gfh" 'magit-log-buffer-file
|
|
"gm" 'magit-dispatch-popup
|
|
"gs" 'magit-status
|
|
"gS" 'magit-stage-file
|
|
"gU" 'magit-unstage-file
|
|
|
|
;; Langs
|
|
"mf" 'lsp-format-buffer
|
|
"mgg" 'lsp-find-definition
|
|
"mh" 'lsp-describe-thing-at-point
|
|
"mj" 'imenu
|
|
|
|
;; Projectile
|
|
"p" '(:ignore t :which-key "Projectile")
|
|
"p SPC" 'counsel-projectile
|
|
"pb" 'counsel-projectile-switch-to-buffer
|
|
"pd" 'counsel-projectile-find-dir
|
|
"pp" 'counsel-projectile-switch-project
|
|
"pf" 'counsel-projectile-find-file
|
|
"pr" 'projectile-recentf
|
|
|
|
;; Swyper
|
|
"s" '(:ignore t :which-key "Swyper")
|
|
"ss" 'swiper
|
|
"sb" 'swiper-all
|
|
|
|
;; Treemacs
|
|
"ft" 'treemacs
|
|
"fB" 'treemacs-bookmark
|
|
"fT" 'treemacs-find-file
|
|
"f M-t" 'treemacs-find-tag
|
|
|
|
;; Window
|
|
"w" '(:ignore t :which-key "Window")
|
|
"w=" 'balance-windows-area
|
|
"wd" 'evil-window-delete
|
|
"w <down>" 'evil-window-down
|
|
"wf" 'follow-mode
|
|
"wF" 'make-frame
|
|
"wh" 'evil-window-left
|
|
"wH" 'evil-window-move-far-left
|
|
"wj" 'evil-window-down
|
|
"wJ" 'evil-window-move-very-bottom
|
|
"wK" 'evil-window-move-very-top
|
|
"wk" 'evil-window-up
|
|
"w <left>" 'evil-window-left
|
|
"wL" 'evil-window-move-far-right
|
|
"wl" 'evil-window-right
|
|
"wm" 'toggle-maximize-buffer
|
|
"wo" 'other-frame
|
|
"w <right>" 'evil-window-right
|
|
"w <S-down>" 'evil-window-move-very-bottom
|
|
"w <S-left>" 'evil-window-move-far-left
|
|
"w-" 'split-window-below
|
|
"w/" 'split-window-right
|
|
"w <S-right>" 'evil-window-move-far-right
|
|
"ws" 'split-window-below
|
|
"wS" 'split-window-below-and-focus
|
|
"w <S-up>" 'evil-window-move-very-top
|
|
"w <up>" 'evil-window-up
|
|
"wU" 'winner-redo
|
|
"wu" 'winner-undo
|
|
"wv" 'split-window-right
|
|
"wV" 'split-window-right-and-focus
|
|
"ww" 'other-window
|
|
"wx" 'kill-buffer-and-window
|
|
|
|
|
|
))
|
|
|
|
;; custom functions
|
|
(defun toggle-maximize-buffer () "Maximize buffer."
|
|
(interactive)
|
|
(save-excursion
|
|
(if (and (= 1 (length (window-list)))
|
|
(assoc ?_ register-alist))
|
|
(jump-to-register ?_)
|
|
(progn
|
|
(window-configuration-to-register ?_)
|
|
(delete-other-windows)))))
|
|
|
|
|
|
;; other
|
|
|
|
(custom-set-variables
|
|
;; custom-set-variables was added by Custom.
|
|
;; If you edit it by hand, you could mess it up, so be careful.
|
|
;; Your init file should contain only one such instance.
|
|
;; If there is more than one, they won't work right.
|
|
'(package-selected-packages (quote (evy use-package general evil avy))))
|
|
(custom-set-faces
|
|
;; custom-set-faces was added by Custom.
|
|
;; If you edit it by hand, you could mess it up, so be careful.
|
|
;; Your init file should contain only one such instance.
|
|
;; If there is more than one, they won't work right.
|
|
)
|
|
|
|
(provide 'init)
|
|
;;; init.el ends here
|