From fca83b0b977177d3d4818b456234dad3e7637cd6 Mon Sep 17 00:00:00 2001 From: Maciej Szlosarczyk Date: Tue, 16 Jul 2019 21:04:35 +0300 Subject: [PATCH] First version of use-package --- 01mac.el | 21 +++++---- 02ivy.el | 33 +++++++------ 03hydra.el | 89 ++++++++++++++++++----------------- 04magit.el | 14 +++--- 05prog-mode.el | 103 ++++++++++++++++++++++++----------------- 06company-yasnippet.el | 31 ++++++++----- 07projectile.el | 22 +++++---- 09ispell.el | 11 +++-- 10themes.el | 11 +++-- 20clojure.el | 4 ++ 20elixir.el | 6 ++- 20ruby.el | 18 +++---- 20rust.el | 4 ++ 20web.el | 7 +++ init.el | 37 +-------------- 15 files changed, 214 insertions(+), 197 deletions(-) diff --git a/01mac.el b/01mac.el index 74feaee..84cf4be 100644 --- a/01mac.el +++ b/01mac.el @@ -111,12 +111,12 @@ ;;;;;;;;;;;;;;;;;;;;;; Shell stuff ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on) -;; Add pgp binary -(add-to-list 'exec-path "/usr/local/bin") - -; Use Shells variables -(when (memq window-system '(mac ns)) - (exec-path-from-shell-initialize)) +;; Allow to execute path from shell +(use-package exec-path-from-shell + :if (memq window-system '(mac ns)) + :ensure t + :config (add-to-list 'exec-path "/usr/local/bin") + (exec-path-from-shell-initialize)) ;;;;;;;;;;;;;;;;;;;;;; Font configuration ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -145,6 +145,9 @@ (scroll-bar-mode -1) ;;;;;;;;;;;;;;;;; Record frequency of different commands. Review them later -(require 'keyfreq) -(keyfreq-mode 1) -(keyfreq-autosave-mode 1) +(use-package keyfreq + :defer t + :ensure t) + +(keyfreq-mode t) +(keyfreq-autosave-mode t) diff --git a/02ivy.el b/02ivy.el index 754fde0..054e93d 100644 --- a/02ivy.el +++ b/02ivy.el @@ -1,17 +1,20 @@ -(setq-default ivy-use-virtual-buffers t ;; Display recent files in ivy-switch-buffer - ivy-count-format "(%d of %d) " ;; Current candidate count style - ivy-display-style 'fancy ;; Formatting style - ) +(use-package ivy + :requires (counsel swiper) + :ensure t + :config (setq-default ivy-use-virtual-buffers t ;; Display recent files in ivy-switch-buffer + ivy-count-format "(%d of %d) " ;; Current candidate count style + ivy-display-style 'fancy) ;; Formatting style + :bind ("C-c a" . counsel-ag) + ("C-c a" . counsel-ag) + ("C-c b" . ivy-switch-buffer) + ("C-c t" . counsel-find-file) -(global-set-key (kbd "C-c a") 'counsel-ag) -(global-set-key (kbd "C-c b") 'ivy-switch-buffer) -(global-set-key (kbd "C-c t") 'counsel-find-file) + ("C-c C-s" . swiper) ;; Find things by regexp + ("M-x" . counsel-M-x) ;; M-x on steroids -(global-set-key (kbd "C-c C-s") 'swiper) ;; Find things by regexp -(global-set-key (kbd "M-x") 'counsel-M-x) ;; M-x on steroids - -(global-set-key (kbd " f") 'counsel-describe-function) -(global-set-key (kbd " v") 'counsel-describe-variable) -(global-set-key (kbd " l") 'counsel-find-library) -(global-set-key (kbd " i") 'counsel-info-lookup-symbol) -(global-set-key (kbd " u") 'counsel-unicode-char) + (" f" . counsel-describe-function) + (" v" . counsel-describe-variable) + (" l" . counsel-find-library) + (" i" . counsel-info-lookup-symbol) + (" u" . counsel-unicode-char) + ("C-c b" . ivy-switch-buffer)) diff --git a/03hydra.el b/03hydra.el index 9701b66..e34765a 100644 --- a/03hydra.el +++ b/03hydra.el @@ -1,7 +1,8 @@ -(require 'hydra) - -(defhydra hydra-file-switcher-menu (:color teal :hint nil) - " +(use-package hydra + :ensure t + :config + (defhydra hydra-file-switcher-menu (:color teal :hint nil) + " ^Ivy^ ^Projectile^ ^Magit^ ^^^^^^^^------------------------------------------------------------------------ _a_: ag _s_: Switch project _m_: Git status @@ -11,25 +12,23 @@ _t_: Find file _g_: ag in current project _M_: Git blame ^^ _n_: New project ^^ _i_: ielm console " - ("q" nil "cancel" :color pink) + ("q" nil "cancel" :color pink) - ("a" counsel-ag) - ("b" ivy-switch-buffer) - ("t" counsel-find-file) - ("s" counsel-projectile-switch-project) - ("f" counsel-projectile-find-file) - ("g" counsel-projectile-ag) - ("c" projectile-invalidate-cache) - ("n" projectile-add-known-project) - ("i" ielm) - ("m" magit-status) - ("C" magit-checkout) - ("M" magit-blame)) + ("a" counsel-ag) + ("b" ivy-switch-buffer) + ("t" counsel-find-file) + ("s" counsel-projectile-switch-project) + ("f" counsel-projectile-find-file) + ("g" counsel-projectile-ag) + ("c" projectile-invalidate-cache) + ("n" projectile-add-known-project) + ("i" ielm) + ("m" magit-status) + ("C" magit-checkout) + ("M" magit-blame)) -(global-set-key (kbd "C-c p") 'hydra-file-switcher-menu/body) - -(defhydra hydra-programming-actions (:color teal :hint nil) - " + (defhydra hydra-programming-actions (:color teal :hint nil) + " Programming actions ^Code Manipulation^ ^Code Completion^ @@ -41,22 +40,20 @@ _a_: align regexp _e_: eval region _s_: swiper " - ("q" nil "cancel" :color pink) + ("q" nil "cancel" :color pink) - ("c" comment-line) - ("r" vr/replace) - ("i" indent-region) - ("a" align-regexp) - ("e" eval-region) - ("s" swiper) + ("c" comment-line) + ("r" vr/replace) + ("i" indent-region) + ("a" align-regexp) + ("e" eval-region) + ("s" swiper) - ("y" company-yasnippet) - ("m" company-complete)) + ("y" company-yasnippet) + ("m" company-complete)) -(global-set-key (kbd "C-c c") 'hydra-programming-actions/body) - -(defhydra hydra-window-actions (:color teal :hint nil) - " + (defhydra hydra-window-actions (:color teal :hint nil) + " Window actions ^Windows^ ^Move around^ @@ -68,17 +65,19 @@ _v_: split vertically __: Move up ^^ _p_: Previous buffer ^^ _n_: Next buffer " - ("q" nil "cancel" :color pink) + ("q" nil "cancel" :color pink) - ("k" kill-buffer-and-window) - ("h" split-window-below) - ("v" split-window-right) + ("k" kill-buffer-and-window) + ("h" split-window-below) + ("v" split-window-right) - ("" windmove-left) - ("" windmove-right) - ("" windmove-up) - ("" windmove-down) - ("p" previous-buffer) - ("n" next-buffer)) + ("" windmove-left) + ("" windmove-right) + ("" windmove-up) + ("" windmove-down) + ("p" previous-buffer) + ("n" next-buffer)) -(global-set-key (kbd "C-c w") 'hydra-window-actions/body) + :bind ("C-c p" . hydra-file-switcher-menu/body) + ("C-c c" . hydra-programming-actions/body) + ("C-c w" . hydra-window-actions/body)) diff --git a/04magit.el b/04magit.el index 33c8fb2..12cdcc9 100644 --- a/04magit.el +++ b/04magit.el @@ -1,8 +1,8 @@ ;;; Magit - -(require 'magit) - -(global-set-key (kbd " c") 'magit-checkout) -(global-set-key (kbd " b") 'magit-blame) -(define-key magit-blame-mode-map (kbd " b") 'magit-blame-quit) -(global-set-key (kbd " g") 'magit-status) +(use-package magit + :ensure t + :bind (" c" . magit-checkout) + (" b" . magit-blame) + (" g" . magit-status) + (:map magit-blame-mode-map + (" b" . 'magit-blame-quit))) diff --git a/05prog-mode.el b/05prog-mode.el index 4e81f64..03e76c3 100644 --- a/05prog-mode.el +++ b/05prog-mode.el @@ -2,59 +2,76 @@ ;;; Wrap long lines (toggle-truncate-lines t) - -;;; Show trailing whitespace and remove whitespace on save -(require 'whitespace) -(add-hook 'prog-mode-hook 'whitespace-mode) -(add-hook 'text-mode-hook 'whitespace-mode) -(setq whitespace-style '(face trailing empty)) - -;;; Cleanup whitespace on save -(add-hook 'before-save-hook 'whitespace-cleanup) - -;;; Tabs are spaces and are general at 2. Guide indent with lines -(setq-default indent-tabs-mode nil) - -;;; Insert newline on save -(setq require-final-newline t) - -;;; Match parenthasis (left-right) -(electric-pair-mode 1) - -;;; Rainbow parenthesis -(add-hook 'prog-mode-hook 'rainbow-delimiters-mode) -(add-hook 'text-mode-hook 'rainbow-delimiters-mode) - -;;; Show hex colors as colors -(add-hook 'prog-mode-hook 'rainbow-mode) -(add-hook 'text-mode-hook 'rainbow-mode) -(require 'lsp-mode) - ;;; When pasting/writing over a selection, replace it. (delete-selection-mode 1) -;; Dash -(define-key prog-mode-map (kbd "C-s C-d") 'dash-at-point) ;; Jump to dash definition -(define-key text-mode-map (kbd "C-s C-d") 'dash-at-point) ;; Jump to dash definition -(add-to-list - 'dash-at-point-mode-alist - '(enh-ruby-mode . "ruby,rubygems,rails")) ;; Configure lookup for Ruby mode - ;; When possible, show code documentation (global-eldoc-mode 1) -;; Revert tags automatically +;; Revert tag tables without asking (setq tags-revert-without-query 1) -;; Use flycheck globally to check syntax and compile languages -(global-flycheck-mode 1) +;;; Show trailing whitespace and remove whitespace on save +(use-package whitespace + :commands whitespace-mode + :ensure t + :hook (((prog-mode text-mode) . whitespace-mode) + (before-save . whitespace-cleanup)) + :init (setq whitespace-style #'(face trailing empty)) + ;;; Insert newline on save + (setq require-final-newline t) + ;;; Tabs are spaces and are general at 2. Guide indent + ;;; with lines + (setq-default indent-tabs-mode nil)) -;; Function for definiting indentation +;; Use colorful, matching parens +(use-package rainbow-delimiters + :commands rainbow-delimiters-mode + :ensure t + :hook (((prog-mode text-mode) . rainbow-delimiters-mode)) + :init + ;;; Match parenthasis (left-right) + (electric-pair-mode 1)) + +;;; Show hex colors as colors +(use-package rainbow-mode + :commands rainbow-mode + :ensure t + :hook ((prog-mode text-mode) . rainbow-mode)) + +(use-package lsp-mode + :ensure t) + +;; Dash integration +(use-package dash-at-point + :commands dash-at-point + :ensure t + :bind (:map prog-mode-map ("C-s C-d" . dash-at-point) + :map text-mode-map ("C-s C-d" . dash-at-point)) + :config + (add-to-list 'dash-at-point-mode-alist + ;; Configure lookup for Ruby mode + '(enh-ruby-mode . "ruby,rubygems,rails"))) + + +;; Use flycheck globally to check syntax and compile languages +(use-package flycheck + :commands flycheck-define-checker + :ensure t + :defer t + :config (global-flycheck-mode t)) + +;; By default, use 2 spaces for indentation +(setq tab-width 2) +(setq tab-stop-list (number-sequence tab-width 200 tab-width)) + +;; Ensure indentation in steps: (defun set-indent (step) "Set indentation to X STEPs." (interactive "NNumber of columns for one step: ") - (setq tab-width step) - (setq tab-stop-list (number-sequence step 200 step))) + (setq-local tab-width step) + (setq-local tab-stop-list (number-sequence step 200 step))) -;; Enforce column width by number -(global-column-enforce-mode 1) +(use-package column-enforce-mode + :ensure t + :config (global-column-enforce-mode t)) diff --git a/06company-yasnippet.el b/06company-yasnippet.el index aa4b05a..e86a6cf 100644 --- a/06company-yasnippet.el +++ b/06company-yasnippet.el @@ -1,7 +1,17 @@ ;; Company completion framework configuration -(require 'company); Add completion +(use-package company + :commands (company-indent-or-complete-common company-yasnippet) + :requires (yasnippet + yasnippet-snippets + lsp-mode + company-lsp + lsp-ui) + :ensure t + :defer t) + +(global-company-mode 1) +(yas-global-mode 1) -;; Company configuration (setq-default company-minimum-prefix-length 2 ; minimum prefix character number for auto complete. company-idle-delay 0.1 @@ -20,17 +30,14 @@ ;; company-async-timeout 2 ) -(global-company-mode 1) -(yas-global-mode 1) - ;; Absolute defaults for company mode -(setq-default company-backends - '((company-files ; files & directory - company-keywords ; keywords - company-capf - ) - (company-dabbrev company-abbrev) - )) +(setq company-backends + '((company-files ; files & directory + company-keywords ; keywords + company-capf + ) + (company-dabbrev company-abbrev) + )) (setq-default company-lsp-cache-candidates 1 ;; Cache LSP results diff --git a/07projectile.el b/07projectile.el index b78a8fb..b8edec5 100644 --- a/07projectile.el +++ b/07projectile.el @@ -1,12 +1,14 @@ -(require 'projectile) - -(setq-default projectile-completion-system 'ivy ;; Use ivy as completion system - projectile-enable-caching t ;; Cache project files - projectile-file-exists-local-cache-expire (* 3 60) ;; keep cache for 3 minutes - projectile-sort-order (quote recently-active) ;; Order by recently active projects - projectile-globally-ignored-directories - (append '("node_modules" ".svn" "_build" "tmp" "log") projectile-globally-ignored-directories) - ;; Add certain folders to ignored - ) +(use-package projectile + :ensure t + :requires (counsel counsel-projectile) + :config + (setq-default projectile-completion-system 'ivy ;; Use ivy as completion system + projectile-enable-caching t ;; Cache project files + projectile-file-exists-local-cache-expire (* 3 60) ;; keep cache for 3 minutes + projectile-sort-order (quote recently-active) ;; Order by recently active projects + projectile-globally-ignored-directories + (append '("node_modules" ".svn" "_build" "tmp" "log") projectile-globally-ignored-directories) + ;; Add certain folders to ignored + )) (projectile-mode t) diff --git a/09ispell.el b/09ispell.el index b800c21..ce6b742 100644 --- a/09ispell.el +++ b/09ispell.el @@ -1,6 +1,7 @@ -(require 'ispell) ;; Highlight misspelled words -(setq ispell-program-name "aspell") -(setq ispell-extra-args - '("--run-together" "--run-together-limit=5" "--run-together-min=2")) -(add-hook 'prog-mode-hook 'flyspell-mode) +(use-package ispell + :ensure t + :config (setq ispell-program-name "aspell") + (setq ispell-extra-args + '("--run-together" "--run-together-limit=5" "--run-together-min=2")) + :hook ((prog-mode text-mode) . flyspell-mode)) diff --git a/10themes.el b/10themes.el index a716b6b..4e3c232 100644 --- a/10themes.el +++ b/10themes.el @@ -1,9 +1,10 @@ ;; Use smart-mode-line -(require 'smart-mode-line) - -(setq-default sml/no-confirm-load-theme t) -(setq-default display-time-format "%H:%M") ;; time format to display on mode line -(sml/setup) +(use-package smart-mode-line + :ensure t + :config + (setq-default sml/no-confirm-load-theme t) + (setq-default display-time-format "%H:%M") ;; time format to display on mode line + (sml/setup)) (load "~/.emacs.d/10themes-base16-not-harmonic.el" t) (load-theme 'base16-mexico-light t t) diff --git a/20clojure.el b/20clojure.el index d4a46a5..dc44009 100644 --- a/20clojure.el +++ b/20clojure.el @@ -1,3 +1,7 @@ +(use-package cider + :requires clojure-mode + :ensure t) + (add-hook 'clojure-mode-hook 'cider-mode) (defun activate-clojure-mode () diff --git a/20elixir.el b/20elixir.el index bdf71b8..a03a6e1 100644 --- a/20elixir.el +++ b/20elixir.el @@ -1,4 +1,6 @@ -(require 'alchemist) +(use-package alchemist + :requires (ruby-end-mode) + :ensure t) (defun activate-elixir-mode () "All things Elixir." @@ -9,9 +11,9 @@ (add-to-list (make-local-variable 'company-backends) '(alchemist-company company-yasnippet))) +(add-hook 'elixir-mode-hook 'alchemist-mode) (add-hook 'alchemist-mode-hook 'activate-elixir-mode) (add-hook 'elixir-mode-hook 'ruby-end-mode) -(add-hook 'elixir-mode-hook 'alchemist-mode) ;; Eex Web mode (add-to-list 'auto-mode-alist '("\\.eex\\'" . web-mode)) diff --git a/20ruby.el b/20ruby.el index d31da66..72dfa27 100644 --- a/20ruby.el +++ b/20ruby.el @@ -1,14 +1,13 @@ ;; Require Enhanced Ruby Mode -(require 'enh-ruby-mode) -(define-key enh-ruby-mode-map (kbd "C-c \\") 'nil) - -(add-hook 'ruby-mode-hook 'enh-ruby-mode) -(add-hook 'enh-ruby-mode-hook 'rspec-mode) -(add-hook 'enh-ruby-mode-hook 'ruby-end-mode) - -(eval-after-load 'rspec-mode - '(rspec-install-snippets)) +(use-package enh-ruby-mode + :requires (rspec-mode ruby-end-mode) + :ensure t + :config + (add-hook 'enh-ruby-mode-hook 'rspec-mode) + (add-hook 'enh-ruby-mode-hook 'ruby-end-mode) + (eval-after-load 'rspec-mode + '(rspec-install-snippets))) (defun activate-ruby-mode () "All things for ruby mode." @@ -34,6 +33,7 @@ (format "ctags -e -R --languages=ruby -f %sTAGS %s. $(bundle list --paths)" (projectile-project-root) (projectile-project-root)))) +(add-hook 'ruby-mode-hook 'enh-ruby-mode) (add-hook 'enh-ruby-mode-hook 'activate-ruby-mode) ;;; ERB specific things diff --git a/20rust.el b/20rust.el index b627b73..d70599f 100644 --- a/20rust.el +++ b/20rust.el @@ -1,3 +1,7 @@ +(use-package racer + :ensure t + :requires (racer flycheck-rust)) + (defun activate-rust-mode () "All things for Rust mode" (interactive) diff --git a/20web.el b/20web.el index 7ef202f..bb134ec 100644 --- a/20web.el +++ b/20web.el @@ -1,3 +1,10 @@ +(use-package web-mode + :ensure t) + +(use-package js2-mode + :requires (web-mode company-web lsp) + :ensure t) + ;; Use js2-mode for javascript editing (add-to-list 'auto-mode-alist '("\\.js\\'" . js2-mode)) (add-to-list 'auto-mode-alist '("\\.json\\'" . js2-mode)) diff --git a/init.el b/init.el index 1443fad..fc66fa7 100644 --- a/init.el +++ b/init.el @@ -14,53 +14,18 @@ ;; list the packages you want (setq package-list '( - keyfreq ;; Record how often emacs commands are executed - exec-path-from-shell ;; Allow to execute path from shell - - rainbow-delimiters ;; Colorize matching parens - rainbow-mode ;; Make color symbols like #FFF colorfull - - magit ;; Git interface for Emacs - column-enforce-mode ;; Enforce column length of X window-purpose ;; Make sure that windows are of grouped by ;; purpose. - ;;; Helm replacements - ivy - counsel - swiper - hydra ;; Create nice text menus without memorizing too much - - ;;; Code - dash-at-point - - company ;; Code completion framework - yasnippet ;; Code snippets framework - yasnippet-snippets ;; Actual snippets for various languages - flycheck ;; Compilation framework visual-regexp ;; Regexp replacement with preview in ;; current buffer. - ;; Language server protocol - lsp-mode - company-lsp - lsp-ui - - ;; Project management - projectile - counsel-projectile - ;; Themes smart-mode-line base16-theme flatui-theme planet-theme - ;; Ruby - enh-ruby-mode ;; Enhanced Ruby mode - ruby-end ;; Insert end for methods automatically - rspec-mode ;; RSpec yasnippets - ;; Elixir alchemist @@ -102,6 +67,8 @@ (unless (package-installed-p package) (package-install package))) +(require 'use-package) + ;; Additional files (load "~/.emacs.d/01mac.el") (load "~/.emacs.d/02macros.el")