You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1069 lines
26KB

  1. ;;; Use-package
  2. ;; Use package and melpa as source
  3. (require 'package)
  4. (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))
  5. (add-to-list 'package-archives '("gnu" . "http://elpa.gnu.org/packages/"))
  6. (setq package-enable-at-startup nil)
  7. (package-initialize)
  8. ;; use-package
  9. (setq-default
  10. use-package-always-ensure t
  11. use-package-expand-minimally t
  12. use-package-verbose nil
  13. use-package-enable-imenu-support t)
  14. (unless (package-installed-p 'use-package)
  15. (package-refresh-contents)
  16. (package-install 'use-package))
  17. (eval-when-compile (require 'use-package))
  18. ;;; Custom and options
  19. ;;;; Custom file
  20. (setq custom-file "~/dotfiles/.emacs.d/custom.el")
  21. (load custom-file)
  22. ;;;; Options
  23. ;;;;; Mode-line
  24. (setq
  25. ;; Mnemonics for eol
  26. eol-mnemonic-unix "(Unix)"
  27. ;; Display total size of buffer and column index
  28. size-indication-mode t
  29. ;; Column numbers
  30. column-number-mode t
  31. ;; Column numbers from 1
  32. column-number-indicator-zero-based nil)
  33. ;;;;; Backup
  34. (setq
  35. ;; delete excess backup versions silently
  36. delete-old-versions t
  37. ;; make backup files
  38. make-backup-files t
  39. ;; Use version control on backups
  40. version-control t
  41. ;; don't make backups file when in version controlled dir
  42. vc-make-backup-files nil
  43. ;; which directory to put backups file
  44. backup-directory-alist `(("." . "~/.emacs.d/backups")))
  45. ;;;;; Autosave
  46. (setq
  47. ;; Enable
  48. auto-save-default t
  49. ;; Set interval and timeout
  50. auto-save-interval 300
  51. auto-save-timeout 30
  52. ;; Set directory for auto-saves
  53. auto-save-file-name-transforms '((".*" "~/.emacs.d/auto-save/" t)))
  54. ;;;;; Scrolling
  55. (setq
  56. scroll-margin 10
  57. hscroll-margin 10
  58. scroll-conservatively 100000
  59. scroll-preserve-screen-position 1
  60. hscroll-step 1
  61. maximum-scroll-margin 0.5)
  62. ;;;;; Window placement
  63. (setq
  64. display-buffer-alist
  65. `(("*R Dired"
  66. (display-buffer-reuse-window display-buffer-in-side-window)
  67. (side . right)
  68. (slot . -1)
  69. (window-width . 0.2)
  70. (reusable-frames . nil))
  71. ("*R:"
  72. (display-buffer-reuse-window display-buffer-at-bottom)
  73. (window-height . 0.3)
  74. (reusable-frames . nil))
  75. ("\\*Help\\[R"
  76. (display-buffer-reuse-window display-buffer-in-side-window)
  77. (side . right)
  78. (slot . 2)
  79. (window-width . 0.4)
  80. (reusable-frames . nil))
  81. ("*Help*"
  82. (display-buffer-reuse-window display-buffer-at-bottom)
  83. (slot . 1)
  84. (window-height . 0.3)
  85. (reusable-frames . nil))
  86. ("magit-diff"
  87. (display-buffer-reuse-window display-buffer-in-side-window)
  88. (side . left)
  89. (slot . 1)
  90. (window-width . 0.4)
  91. (reusable-frames . nil))
  92. ("magit"
  93. (display-buffer-reuse-window display-buffer-in-side-window)
  94. (side . left)
  95. (window-width . 0.4)
  96. (reusable-frames . nil))))
  97. ;;;;; Disable GUI
  98. (menu-bar-mode -1)
  99. (tool-bar-mode -1)
  100. (scroll-bar-mode -1)
  101. (blink-cursor-mode -1)
  102. (tooltip-mode -1)
  103. (setq
  104. inhibit-startup-screen t
  105. inhibit-startup-message t
  106. inhibit-startup-echo-area-message t)
  107. ;;;;; UTF8
  108. (setq
  109. coding-system-for-read 'utf-8
  110. coding-system-for-write 'utf-8)
  111. ;; Prefer UTF-8
  112. (prefer-coding-system 'utf-8)
  113. (set-default-coding-systems 'utf-8)
  114. (set-terminal-coding-system 'utf-8)
  115. (set-keyboard-coding-system 'utf-8)
  116. ;;;;; Line numbers
  117. ;; Show line numbers
  118. (global-display-line-numbers-mode t)
  119. ;; Show absolute line numbers in narrowed state
  120. (setq-default display-line-numbers-widen t)
  121. ;; No limit to line number displayed
  122. (setq line-number-display-limit nil)
  123. ;;;;; Set proxy at work
  124. (when (string-equal (system-name) "hegp")
  125. (setq url-proxy-services '(("no_proxy" . "127.0.0.1")
  126. ("http" . "proxym-inter.aphp.fr:8080")
  127. ("https" . "proxym-inter.aphp.fr:8080"))))
  128. ;;;;; Misc
  129. (setq
  130. ;; Kill debug windows after use
  131. debugger-bury-or-kill 'kill
  132. ;; Set tramp terminal type
  133. tramp-terminal-type "tramp"
  134. ;; Scroll smoothly with mouse
  135. mouse-wheel-scroll-amount '(2 ((shift) . 1) ((control)))
  136. ;; Indent two spaces
  137. standard-indent 2
  138. ;; don't ask for confirmation when opening symlinked file
  139. vc-follow-symlinks t
  140. ;; silent bell when you make a mistake
  141. ring-bell-function 'ignore
  142. ;; Identity
  143. user-full-name "Maxime Wack"
  144. user-mail-address "maximewack@free.fr"
  145. ;; GC and file size limits
  146. gc-cons-threshold 50000000
  147. large-file-warning-threshold 100000000
  148. ;; Filename in title
  149. frame-title-format
  150. '((:eval (if (buffer-file-name)
  151. (abbreviate-file-name (buffer-file-name))
  152. "%b")))
  153. )
  154. (setq-default
  155. ;; Show empty lines at the end of the buffer
  156. indicate-empty-lines t
  157. ;; Spaces for indent
  158. tab-width 2
  159. ;; Don't use tabs in indentation
  160. indent-tabs-mode nil)
  161. ;; Set transparency
  162. (set-frame-parameter (selected-frame) 'alpha '(85 . 90))
  163. ;; Font
  164. (unless (string-equal (system-name) "hegp")
  165. (set-frame-font "Fira Code 10" nil t))
  166. ;; Replace yes/no with y/n
  167. (fset 'yes-or-no-p 'y-or-n-p)
  168. ;; Disable package-selected-packages
  169. (defun package--save-selected-packages (&rest opt) nil)
  170. ;;; Packages
  171. ;;;; Keys
  172. ;;;;; General
  173. (use-package general
  174. :demand
  175. :config
  176. (general-create-definer spcleader
  177. :states '(normal visual insert emacs)
  178. :prefix "SPC"
  179. :non-normal-prefix "M-SPC")
  180. (spcleader
  181. "RET" 'eval-defun
  182. "." 'eval-expression
  183. "k" '((lambda () (interactive) (kill-buffer nil)) :which-key "kill buffer")
  184. "K" 'kill-some-buffers
  185. "$" '((lambda () (interactive) (find-file "~/.emacs")) :which-key "open config")
  186. "#" '((lambda () (interactive) (load-file "~/.emacs")) :which-key "reload config")
  187. "l" 'reposition-window
  188. "W" '(count-words-region :which-key "word count")
  189. "w" 'toggle-truncate-lines)
  190. (spcleader
  191. "n" '(:ignore t :which-key "Narrow")
  192. "nr" 'narrow-to-region
  193. "np" 'narrow-to-page
  194. "nf" 'narrow-to-defun
  195. "nc" 'polymode-toggle-chunk-narrowing
  196. "nw" 'widen))
  197. ;;;;; Hydra
  198. (use-package hydra)
  199. ;;;;; Evil
  200. ;;;;;; Evil
  201. (use-package evil
  202. :demand
  203. :config
  204. (evil-mode t)
  205. (setq evil-want-integration nil
  206. evil-want-keybinding nil
  207. evil-want-Y-yank-to-eol t
  208. ;; Colored cursors based on evil-state
  209. evil-emacs-state-cursor '("red" box)
  210. evil-normal-state-cursor '("green" box)
  211. evil-visual-state-cursor '("orange" box)
  212. evil-insert-state-cursor '("red" bar)
  213. evil-replace-state-cursor '("red" bar)
  214. evil-operator-state-cursor '("red" hollow)
  215. ;; use NORMAL mode/state EVERYWHERE by default
  216. evil-default-state 'normal
  217. evil-motion-state-modes nil
  218. evil-normal-state-modes nil
  219. evil-insert-state-modes nil
  220. ;; Use emacs state in these selected modes
  221. evil-emacs-state-modes nil
  222. ;; and don't let modes override the INSERT state (!)
  223. evil-overriding-maps nil
  224. evil-intercept-maps nil)
  225. (defhydra hydra-window (:color red :timeout 1)
  226. "Windows"
  227. ("t" evil-window-left)
  228. ("T" evil-window-move-far-left)
  229. ("s" evil-window-down)
  230. ("S" evil-window-move-very-bottom)
  231. ("d" evil-window-up)
  232. ("D" evil-window-move-very-top)
  233. ("r" evil-window-right)
  234. ("R" evil-window-move-far-right)
  235. ("+" (evil-window-increase-height 4))
  236. ("-" (evil-window-decrease-height 4))
  237. ("/" (evil-window-decrease-width 4))
  238. ("*" (evil-window-increase-width 4))
  239. ("h" evil-window-split)
  240. ("v" evil-window-vsplit)
  241. ("c" evil-window-delete)
  242. ("o" delete-other-windows)
  243. ("é" nil "Cancel"))
  244. :general
  245. (:states 'visual
  246. "l" 'evil-delete
  247. "H" 'evil-change
  248. "J" 'evil-join)
  249. (:states '(visual normal motion emacs)
  250. "é" 'hydra-window/body)
  251. (:states '(normal motion)
  252. "t" 'evil-backward-char
  253. "s" 'evil-next-visual-line
  254. "d" 'evil-previous-visual-line
  255. "r" 'evil-forward-char
  256. "T" 'evil-window-top
  257. "S" 'evil-scroll-down
  258. "D" 'evil-scroll-up
  259. "R" 'evil-window-bottom
  260. "l" 'evil-delete
  261. "L" 'evil-delete-line
  262. "h" 'evil-replace
  263. "H" 'evil-replace-state
  264. "gs" 'evil-next-line
  265. "gd" 'evil-previous-line
  266. "M" 'evil-window-middle
  267. "j" 'evil-find-char-to
  268. ";" 'evil-repeat-find-char-reverse
  269. "," 'evil-repeat-find-char
  270. "C-a" 'evil-numbers/inc-at-pt
  271. "C-x" 'evil-numbers/dec-at-pt
  272. "C-s" 'evil-scroll-line-down
  273. "C-d" 'evil-scroll-line-up
  274. "C-o" 'evil-jump-backward)
  275. (:states 'insert
  276. "C-r" 'counsel-yank-pop
  277. "C-u" 'counsel-unicode-char))
  278. ;;;;;; Evil-numbers
  279. (use-package evil-numbers)
  280. ;;;;;; Evil-escape
  281. (use-package evil-escape
  282. :config
  283. (evil-escape-mode t)
  284. (setq-default evil-escape-key-sequence "ii"
  285. evil-escape-delay 0.2))
  286. ;;;;;; Evil-commentary
  287. (use-package evil-commentary
  288. :demand
  289. :config
  290. (evil-commentary-mode t)
  291. :general
  292. (:states 'normal
  293. "gcc" 'evil-commentary-line))
  294. ;;;;;; Evil-surround
  295. (use-package evil-surround
  296. :config
  297. (global-evil-surround-mode))
  298. ;;;;;; Evil-lion
  299. (use-package evil-lion
  300. :general
  301. (spcleader
  302. "a" 'evil-lion-left
  303. "A" 'evil-lion-right))
  304. ;;;;; Which-key
  305. (use-package which-key
  306. :config
  307. (which-key-mode t)
  308. (setq which-key-allow-evil-operators t))
  309. ;;;; Basics
  310. ;;;;; Built-in
  311. ;;;;;; Package
  312. (use-package package
  313. :general
  314. (:keymaps 'package-menu-mode-map
  315. :states 'normal
  316. "q" 'quit-window))
  317. ;;;;;; Custom
  318. (use-package cus-edit
  319. :ensure nil
  320. :config
  321. (add-to-list 'evil-emacs-state-modes 'Custom-mode))
  322. ;;;;;; Ediff
  323. (use-package ediff
  324. :config
  325. (setq ediff-merge-split-window-function 'split-window-vertically
  326. ediff-window-setup-function 'ediff-setup-windows-plain)
  327. (add-to-list 'evil-emacs-state-modes 'ediff-mode))
  328. ;;;;;; Debugger
  329. (use-package debug
  330. :demand
  331. :config
  332. (add-to-list 'evil-emacs-state-modes 'debugger-mode))
  333. ;;;;;; Paren
  334. (use-package paren
  335. :config
  336. (show-paren-mode t)
  337. (setq show-paren-delay 0))
  338. ;;;;;; Flyspell
  339. (use-package flyspell
  340. :general
  341. (spcleader
  342. "s" '(:ignore t :which-key "Flyspell")
  343. "ss" 'flyspell-goto-next-error
  344. "sd" 'flyspell-check-previous-highlighted-word
  345. "sc" 'ispell-word
  346. "sf" '((lambda () (interactive) (ispell-change-dictionary "francais") (flyspell-buffer)) :which-key "Switch to French")
  347. "sa" '((lambda () (interactive) (ispell-change-dictionary "american") (flyspell-buffer)) :which-key "Switch to American"))
  348. (:states 'insert
  349. "C-s" 'flyspell-check-previous-highlighted-word)
  350. :hook (prog-mode . flyspell-prog-mode))
  351. ;;;;;; Tar-mode
  352. (use-package tar-mode
  353. :general
  354. (:keymaps 'tar-mode-map
  355. :states 'normal
  356. "RET" 'tar-extract-other-window))
  357. ;;;;;; Whitespace
  358. (use-package whitespace
  359. :config
  360. (setq whitespace-style
  361. '(face
  362. tabs
  363. spaces
  364. trailing
  365. empty
  366. space-mark
  367. tab-mark
  368. ))
  369. (global-whitespace-mode t)
  370. :hook (before-save . whitespace-cleanup))
  371. ;;;;;; Info
  372. (use-package info
  373. :general
  374. (:keymaps 'Info-mode-map
  375. :states 'normal
  376. "ð" 'Info-backward-node
  377. "ß" 'Info-forward-node
  378. "Þ" 'Info-up
  379. "þ" 'Info-up
  380. "q" 'Info-exit
  381. "ẞ" 'Info-next
  382. "Ð" 'Info-prev
  383. "gr" 'Info-history-forward
  384. "gt" 'Info-history-back
  385. "s" 'evil-scroll-line-down
  386. "d" 'evil-scroll-line-up))
  387. ;;;;;; Highlight line
  388. (use-package hl-line
  389. :config
  390. (global-hl-line-mode t)
  391. :custom-face
  392. (hl-line ((t (:background "gray10")))))
  393. ;;;;;; Simple
  394. (use-package simple
  395. :ensure nil
  396. :config
  397. (global-visual-line-mode t)
  398. :custom-face
  399. (italic ((t (:family "Fira Code Italic"
  400. :foundry "Fira Code Italic")))))
  401. ;;;;;; Revert
  402. (use-package autorevert
  403. :config
  404. (global-auto-revert-mode t))
  405. ;;;;;; Elisp
  406. (use-package elisp-mode
  407. :ensure nil
  408. :config
  409. ;; No size limit to output in elisp mode
  410. (setq eval-expression-print-length nil)
  411. :general
  412. (:keymaps 'emacs-lisp-mode-map
  413. :states 'normal
  414. "RET" 'eval-defun)
  415. (:keymaps 'emacs-lisp-mode-map
  416. :states 'visual
  417. "RET" '(lambda (start end)
  418. (interactive "r")
  419. (eval-region start end t))))
  420. ;;;;;; Help
  421. (use-package help-mode
  422. :ensure nil
  423. :general
  424. (spcleader
  425. "h" '(:ignore t :which-key "Help")
  426. "hh" 'help-for-help
  427. "ha" 'apropos-command
  428. "hb" 'counsel-descbinds
  429. "hv" 'counsel-describe-variable
  430. "hf" 'counsel-describe-function
  431. "ho" 'counsel-info-lookup-symbol
  432. "hm" 'describe-mode
  433. "hp" 'finder-by-keyword
  434. "hP" 'describe-package
  435. "hk" 'describe-key
  436. "hK" 'Info-goto-emacs-key-command-node
  437. "hi" 'info
  438. "hF" 'counsel-faces
  439. "hc" 'counsel-colors-emacs
  440. "hL" 'describe-language-environment)
  441. (:keymaps 'help-mode-map
  442. :states 'normal
  443. "TAB" 'forward-button
  444. "q" 'quit-window
  445. "P" 'help-go-back
  446. "N" 'help-go-forward)
  447. :hook (help-mode . (lambda ()
  448. (setq buffer-face-mode-face '(:background "#102030"))
  449. (buffer-face-mode 1))))
  450. ;;;;;; Markdown
  451. (use-package markdown-mode
  452. :config
  453. (setq markdown-asymmetric-header t)
  454. :custom-face
  455. (markdown-header-face-1 ((t (:inherit 'outline-1))))
  456. (markdown-header-face-2 ((t (:inherit 'outline-2))))
  457. (markdown-header-face-3 ((t (:inherit 'outline-3))))
  458. (markdown-header-face-4 ((t (:inherit 'outline-4))))
  459. (markdown-header-face-5 ((t (:inherit 'outline-5))))
  460. (markdown-bold-face ((t (:foreground "#ede0ce"))))
  461. (markdown-italic-face ((t (:foreground "#ede0ce"))))
  462. (markdown-header-delimiter-face ((t (:foreground "gray30")))))
  463. ;;;;;; Eshell
  464. ;; eshell-mode-map is not ppoulated outside of eshell
  465. ;; So we need to define bindings in a hook
  466. (defun maxx/eshell-keys ()
  467. (evil-define-key*
  468. 'insert
  469. eshell-mode-map
  470. "ð" 'eshell-previous-matching-input-from-input
  471. "ß" 'eshell-next-matching-input-from-input
  472. "þ" 'eshell-backward-argument
  473. "®" 'eshell-forward-argument
  474. "Þ" 'eshell-kill-input
  475. "Ð" 'eshell-previous-prompt
  476. "ẞ" 'eshell-next-prompt
  477. "C-l" 'eshell/clear)
  478. )
  479. (use-package eshell
  480. :config
  481. (setq eshell-scroll-to-bottom-on-input t)
  482. (add-to-list 'evil-insert-state-modes 'eshell-mode)
  483. :hook (eshell-first-time-mode . maxx/eshell-keys))
  484. ;;;;;; Zoom
  485. (use-package face-remap
  486. :config
  487. (defhydra hydra-zoom (:color red)
  488. "Zoom"
  489. ("+" text-scale-increase)
  490. ("-" text-scale-decrease)
  491. ("/" (text-scale-adjust 0) "Reset"))
  492. :general
  493. (:states 'normal
  494. "C-+" 'hydra-zoom/text-scale-increase
  495. "C--" 'hydra-zoom/text-scale-decrease
  496. "C-/" '(lambda () (interactive) (text-scale-adjust 0))))
  497. ;;;;;; Minibuffer
  498. (use-package minibuffer
  499. :ensure nil
  500. :general
  501. (:keymaps 'read-expression-map
  502. "ð" 'previous-line-or-history-element
  503. "ß" 'next-line-or-history-element))
  504. ;;;;; Undo-tree
  505. (use-package undo-tree
  506. :demand
  507. :config
  508. (global-undo-tree-mode)
  509. (setq undo-tree-auto-save-history t
  510. undo-tree-history-directory-alist '(("." . "~/.emacs.d/undo"))
  511. undo-tree-enable-undo-in-region nil)
  512. :general
  513. (spcleader
  514. "u" 'undo-tree-visualize)
  515. (:keymaps 'undo-tree-visualizer-mode-map
  516. :states 'normal
  517. "q" 'undo-tree-visualizer-quit
  518. "SPC u" 'undo-tree-visualizer-quit
  519. "d" 'undo-tree-visualize-undo
  520. "s" 'undo-tree-visualize-redo
  521. "D" 'undo-tree-visualizer-toggle-diff))
  522. ;;;;; Avy
  523. (use-package avy
  524. :config
  525. (setq avy-keys '(?t ?s ?r ?n)
  526. avy-background t
  527. avy-highlight-first t)
  528. :general
  529. (spcleader
  530. "SPC" '(avy-goto-char-timer :which-key "Avy"))
  531. :custom-face
  532. (avy-goto-char-timer-face ((t (:background nil :foreground "red2" :weight bold))))
  533. (avy-lead-face ((t (:background nil :foreground "red1"))))
  534. (avy-lead-face-0 ((t (:background nil :foreground "red4"))))
  535. (avy-lead-face-1 ((t (:background nil :foreground "red4"))))
  536. (avy-lead-face-2 ((t (:background nil :foreground "red4")))))
  537. ;;;;; Ace-link
  538. (use-package ace-link
  539. :general
  540. (:keymaps '(Info-mode-map help-mode-map)
  541. :states 'normal
  542. "f" 'ace-link))
  543. ;;;;; Doom
  544. ;;;;;; Doom theme
  545. (use-package doom-themes
  546. :config
  547. (load-theme 'doom-peacock t)
  548. (setq doom-themes-enable-bold t
  549. doom-themes-enable-italic t)
  550. (doom-themes-visual-bell-config))
  551. ;;;;;; Doom modeline
  552. (use-package doom-modeline
  553. :config
  554. (setq doom-modeline-enable-word-count t)
  555. ;; first time run M-x all-the-icons-install-fonts
  556. :hook (after-init . doom-modeline-mode))
  557. ;;;;; Expand region
  558. (use-package expand-region
  559. :config
  560. (defhydra hydra-expand-region (:color red)
  561. "Expand-region"
  562. ("m" er/expand-region)
  563. ("M" er/contract-region))
  564. :general
  565. (spcleader
  566. "m" 'hydra-expand-region/er/expand-region
  567. "M" 'hydra-expand-region/er/contract-region))
  568. ;;;;; Autopairs
  569. (use-package autopair
  570. :config
  571. (autopair-global-mode))
  572. ;;;;; Minions
  573. (use-package minions
  574. :config
  575. (minions-mode t)
  576. (setq minions-mode-line-lighter ""))
  577. ;;;; Completion
  578. ;;;;; Ivy
  579. ;;;;;; Ivy
  580. (use-package ivy
  581. :config
  582. (setf (alist-get 'counsel-describe-function ivy-initial-inputs-alist) ""
  583. (alist-get 'counsel-describe-function ivy-initial-inputs-alist) "")
  584. (setq ivy-wrap t
  585. ivy-height 15
  586. ivy-use-virtual-buffers t
  587. ivy-count-format "(%d/%d) "
  588. ivy-extra-directories nil
  589. ivy-re-builders-alist '((t . ivy--regex-ignore-order)))
  590. :general
  591. (:keymaps '(ivy-mode-map ivy-minibuffer-map)
  592. "ð" 'ivy-previous-line
  593. "ß" 'ivy-next-line
  594. "ẞ" '(lambda ()
  595. (interactive)
  596. (scroll-other-window 1))
  597. "Ð" '(lambda ()
  598. (interactive)
  599. (scroll-other-window -1))
  600. "®" 'ivy-done
  601. "þ" '(lambda ()
  602. (interactive)
  603. (kill-buffer (ivy-state-current ivy-last)))
  604. "_" 'maxx/counsel-describe))
  605. ;;;;;; Ivy-posframe
  606. (use-package ivy-posframe
  607. :config
  608. (setq ivy-posframe-display-functions-alist '((t . ivy-posframe-display-at-frame-top-center)))
  609. (when (display-graphic-p) (ivy-posframe-mode)))
  610. ;;;;;; Counsel
  611. (use-package counsel
  612. :general
  613. (spcleader
  614. "i" 'counsel-imenu
  615. "f" 'counsel-find-file
  616. "b" 'counsel-switch-buffer
  617. "x" 'counsel-M-x
  618. "/" 'counsel-grep-or-swiper)
  619. ("M-x" 'counsel-M-x))
  620. (defun maxx/counsel-describe ()
  621. "Display help for object at point in counsel"
  622. (interactive)
  623. (let ((inhibit-message t)
  624. (object (intern (ivy-state-current ivy-last))))
  625. (describe-symbol object)))
  626. ;;;;; Company
  627. (use-package company
  628. :demand
  629. :config
  630. (global-company-mode t)
  631. (setq company-idle-delay 0
  632. tab-always-indent 'complete
  633. company-minimum-prefix-length 2)
  634. :general
  635. (:keymaps 'company-active-map
  636. "ß" 'company-select-next
  637. "ð" 'company-select-previous
  638. "Ð" 'company-previous-page
  639. "ẞ" 'company-next-page
  640. "þ" 'company-abort
  641. "®" 'company-complete
  642. "_" 'company-show-doc-buffer))
  643. ;;;; Projectile
  644. ;;;;; Projectile
  645. (use-package projectile
  646. :config
  647. (setq projectile-project-search-path '("~/Projects")))
  648. ;;;;; Counsel-projectile
  649. (use-package counsel-projectile
  650. :general
  651. (spcleader
  652. "p" '(:ignore t :which-key "Projectile")
  653. "pf" 'counsel-projectile-find-file
  654. "pb" 'counsel-projectile-switch-to-buffer
  655. "pp" 'counsel-projectile-switch-project
  656. "pg" 'counsel-projectile-grep
  657. "p SPC" 'counsel-projectile))
  658. ;;;; ESS
  659. ;;;;; ESS
  660. (use-package ess
  661. :config
  662. (setq ess-ask-for-ess-directory nil)
  663. (add-to-list 'evil-insert-state-modes 'comint-mode)
  664. :general
  665. (:keymaps 'ess-r-mode-map
  666. :states 'normal
  667. "RET" 'ess-eval-line-and-step)
  668. (:keymaps 'ess-r-mode-map
  669. :states 'visual
  670. "RET" 'ess-eval-region)
  671. (:keymaps 'ess-r-mode-map
  672. :states 'insert
  673. "»" '(lambda () (interactive) (insert "%>%")))
  674. (:keymaps 'inferior-ess-r-mode-map
  675. :states 'insert
  676. "ð" 'comint-previous-matching-input-from-input
  677. "ß" 'comint-next-matching-input-from-input
  678. "»" '(lambda () (interactive) (insert "%>%")))
  679. (:keymaps 'inferior-ess-r-mode-map
  680. :states '(insert normal)
  681. "C-d" 'evil-scroll-line-up
  682. "C-s" 'evil-scroll-line-down)
  683. (:keymaps 'inferior-ess-r-mode-map
  684. :states 'normal
  685. "i" '(lambda ()
  686. (interactive)
  687. (if (= (line-number-at-pos) (count-lines (point-min) (point-max)))
  688. (evil-insert 1)
  689. (progn (goto-char (point-max))
  690. (evil-append 1))))
  691. )
  692. :hook (ess-mode . (lambda ()
  693. (setq-local prettify-symbols-alist '(("%>%" . "|>")))
  694. (prettify-symbols-mode))))
  695. ;;;;; Poly-R
  696. (use-package poly-R
  697. :general
  698. (:keymaps '(markdown-mode-map ess-mode-map)
  699. :states 'normal
  700. "<tab>" 'markdown-cycle
  701. "ð" 'markdown-previous-visible-heading
  702. "ß" 'markdown-next-visible-heading
  703. "Ð" 'markdown-outline-previous-same-level
  704. "ẞ" 'markdown-outline-next-same-level
  705. "þ" 'markdown-hide-subtree
  706. "®" '(lambda () (interactive)
  707. (markdown-show-children)
  708. (markdown-show-entry))
  709. "Þ" 'markdown-up-heading
  710. "M-r" 'markdown-demote
  711. "M-t" 'markdown-promote
  712. "M-d" 'markdown-move-up
  713. "M-s" 'markdown-move-down))
  714. ;;;; Git
  715. ;;;;; Magit
  716. (use-package magit
  717. :config
  718. (add-to-list 'evil-emacs-state-modes 'magit-mode)
  719. (add-to-list 'evil-emacs-state-modes 'git-rebase-mode)
  720. :general
  721. (spcleader
  722. "g" '(:ignore t :which-key "Magit")
  723. "gd" 'magit-file-dispatch
  724. "gs" 'magit-status)
  725. (:keymaps '(magit-hunk-section-map
  726. magit-file-section-map
  727. magit-staged-section-map
  728. magit-unstaged-section-map
  729. magit-revision-mode-map
  730. magit-section-map
  731. magit-refs-mode-map
  732. magit-log-mode-map
  733. magit-diff-mode-map
  734. magit-untracked-section-map
  735. magit-status-mode-map
  736. magit-stash-section-map)
  737. "ð" 'magit-section-backward
  738. "ß" 'magit-section-forward
  739. "þ" 'magit-section-hide
  740. "®" 'magit-section-show
  741. "s" 'magit-next-line
  742. "d" 'magit-previous-line
  743. "q" 'quit-window)
  744. (:keymaps '(magit-hunk-section-map
  745. magit-status-mode-map
  746. magit-unstaged-section-map
  747. magit-untracked-section-map)
  748. "+" 'magit-stage
  749. "-" 'magit-unstage))
  750. ;;;;; Smerge
  751. (use-package smerge-mode
  752. :general
  753. (:keymaps 'smerge-mode-map
  754. :states 'normal
  755. "RET" 'smerge-keep-current))
  756. ;;;;; Git-gutter-fringe
  757. (use-package git-gutter-fringe
  758. :config
  759. (global-git-gutter-mode t))
  760. ;;;; Slime
  761. (use-package slime
  762. :config
  763. (setq inferior-lisp-program "clisp"))
  764. ;;;; Flycheck
  765. (use-package flycheck
  766. :config
  767. (global-flycheck-mode))
  768. ;;;; Org
  769. ;;;;; Org
  770. (use-package org
  771. :demand
  772. :config
  773. (org-babel-do-load-languages
  774. 'org-babel-load-languages
  775. '((python . t)
  776. (R . t)
  777. (emacs-lisp . t)))
  778. (setq org-directory "~/Private/Org"
  779. org-agenda-files (directory-files-recursively "~/Private/Org/" "org$")
  780. org-default-notes-file "~/Private/Org/agenda.org"
  781. org-deadline-warning-days 7
  782. org-startup-folded t
  783. org-startup-with-inline-images t
  784. org-agenda-span 'fortnight
  785. org-agenda-skip-scheduled-if-deadline-is-shown t
  786. org-agenda-skip-deadline-prewarning-if-scheduled 'pre-scheduled
  787. org-agenda-todo-ignore-deadlines 'all
  788. org-agenda-todo-ignore-scheduled 'all
  789. org-agenda-sorting-strategy
  790. '((agenda deadline-up priority-down)
  791. (todo priority-down category-keep)
  792. (tags priority-down category-keep)
  793. (search category-keep))
  794. org-list-demote-modify-bullet '(("+" . "-") ("-" . "+") ("*" . "+"))
  795. org-hide-block-startup t
  796. org-link-abbrev-alist
  797. '(("gh" . "https://github.com/")
  798. ("git" . "https://git.maximewack.com/")))
  799. (setq org-capture-templates
  800. '(("t"
  801. "todo"
  802. entry (file+headline org-default-notes-file"Tasks")
  803. "* TODO %^{todo}\n %? \n %a")
  804. ("n"
  805. "note"
  806. entry (file+olp+datetree org-default-notes-file"Notes")
  807. "* %^{title}\n %?")))
  808. (defface org-checkbox-done-text
  809. '((t (:foreground "DimGrey" :strike-through t)))
  810. "Face for text of checked boxes")
  811. (font-lock-add-keywords
  812. 'org-mode
  813. `(("^[ \t]*\\(?:[-+*]\\|[0-9]+[).]\\)[ \t]+\\(\\(?:\\[@\\(?:start:\\)?[0-9]+\\][ \t]*\\)?\\[\\(?:X\\|\\([0-9]+\\)/\\2\\)\\][^\n]*\n\\)"
  814. 1 'org-checkbox-done-text prepend))
  815. 'append)
  816. :general
  817. (spcleader
  818. "o" '(:ignore t :which-key "Org")
  819. "oo" '((lambda () (interactive) (find-file org-default-notes-file)) :which-key "Open org file")
  820. "oa" 'org-agenda
  821. "oc" 'org-capture
  822. "ol" 'org-insert-link
  823. "oL" 'org-store-link)
  824. (:keymaps 'org-mode-map
  825. :states 'normal
  826. "<RET>" 'org-open-at-point
  827. "<tab>" 'outshine-cycle
  828. "S-<tab>" 'outshine-cycle-buffer
  829. "M-s" 'org-metadown
  830. "M-d" 'org-metaup
  831. "M-r" 'org-metaright
  832. "M-t" 'org-metaleft
  833. "M-S" 'org-shiftmetadown
  834. "M-D" 'org-shiftmetaup
  835. "M-R" 'org-shiftmetaright
  836. "M-T" 'org-shiftmetaleft
  837. "C-s" 'org-shiftdown
  838. "C-d" 'org-shiftup
  839. "C-r" 'org-shiftright
  840. "C-t" 'org-shiftleft
  841. "Þ" 'outline-up-heading
  842. "Ð" 'outline-backward-same-level
  843. "ẞ" 'outline-forward-same-level
  844. "þ" 'outshine-kbd-M-<left>
  845. "®" 'outshine-kbd-M-<right>
  846. "ð" 'org-previous-visible-heading
  847. "ß" 'org-next-visible-heading)
  848. :hook
  849. (org-mode . (lambda ()
  850. (push '("[ ]" . "☐") prettify-symbols-alist)
  851. (push '("[X]" . "☑" ) prettify-symbols-alist)
  852. (push '("[-]" . "☒" ) prettify-symbols-alist)
  853. (prettify-symbols-mode)))
  854. :custom-face
  855. (outline-1 ((t (:height 1.9 :background nil))))
  856. (outline-2 ((t (:height 1.6))))
  857. (outline-3 ((t (:height 1.4))))
  858. (outline-4 ((t (:height 1.2))))
  859. (outline-5 ((t (:height 1.1)))))
  860. ;;;;; Org-bullets
  861. (use-package org-bullets
  862. :config
  863. (setq org-hide-leading-stars t)
  864. :hook (org-mode . org-bullets-mode))
  865. ;;;;; Outshine
  866. (use-package outshine
  867. :general
  868. (:keymaps 'outshine-mode-map
  869. :states 'normal
  870. "<tab>" 'outshine-cycle
  871. "S-<tab>" 'outshine-cycle-buffer
  872. "ð" 'outline-previous-visible-heading
  873. "ß" 'outline-next-visible-heading
  874. "Ð" 'outline-backward-same-level
  875. "ẞ" 'outline-forward-same-level
  876. "Þ" 'outline-up-heading
  877. "þ" 'outshine-kbd-M-<left>
  878. "®" 'outshine-kbd-M-<right>
  879. "M-t" 'outshine-kbd-M-S-<left>
  880. "M-r" 'outshine-kbd-M-S-<right>
  881. "M-d" 'outshine-kbd-M-S-<up>
  882. "M-s" 'outshine-kbd-M-S-<down>
  883. )
  884. :hook (emacs-lisp-mode . outshine-mode))