;;; 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 "") '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) (c++-mode . lsp-deferred) (python-mode . lsp-deferred) (javascript-mode . lsp-deferred) (js-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 " '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 " 'evil-window-left "wL" 'evil-window-move-far-right "wl" 'evil-window-right "wm" 'toggle-maximize-buffer "wo" 'other-frame "w " 'evil-window-right "w " 'evil-window-move-very-bottom "w " 'evil-window-move-far-left "w-" 'split-window-below "w/" 'split-window-right "w " 'evil-window-move-far-right "ws" 'split-window-below "wS" 'split-window-below-and-focus "w " 'evil-window-move-very-top "w " '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