;; General Settings (setq inhibit-startup-screen t) (setq vc-follow-symlinks t) (setq backup-directory-alist `((".*" . "~/.emacs.d/saves")) delete-old-versions t) (setq auto-save-file-name-transforms `((".*" ,temporary-file-directory t))) (setq delete-by-moving-to-trash t) (setq user-full-name "Joseph Ferano" user-mail-address "joseph@ferano.io") (setq gc-cons-threshold 50000000) (setq large-file-warning-threshold 100000000) (global-auto-revert-mode t) (fset 'yes-or-no-p 'y-or-n-p) (prefer-coding-system 'utf-8) (set-default-coding-systems 'utf-8) (set-terminal-coding-system 'utf-8) (set-keyboard-coding-system 'utf-8) (define-key key-translation-map (kbd "ESC") (kbd "C-g")) (add-hook 'text-mode-hook (lambda () (setq fill-column 90) (turn-on-auto-fill))) (put 'narrow-to-region 'disabled nil) (put 'dired-find-alternate-file 'disabled nil) (require 'server) (if (not (server-running-p)) (server-start)) (add-hook 'prog-mode (lambda () (modify-syntax-entry ?_ "w"))) (setq default-directory "/home/joe") ;; Visuals (scroll-bar-mode -1) (tool-bar-mode -1) (menu-bar-mode -1) (tooltip-mode -1) (defun joe/flash-mode-line () (invert-face 'mode-line) (run-with-timer 0.1 nil #'invert-face 'mode-line)) ;; (setq visible-bell nil ring-bell-function 'joe/flash-mode-line) (setq-default display-line-numbers 'relative) (dolist (mode '(dashboard-mode-hook org-mode-hook term-mode-hook eww-mode-hook vterm-mode-hook eshell-mode-hook dired-mode-hook shell-mode-hook magit-mode-hook)) (add-hook mode (lambda () (display-line-numbers-mode 0)))) (make-variable-buffer-local 'global-hl-line-mode) (set-window-margins nil 0) (setq-default right-fringe-width 10) (setq scroll-margin 0 scroll-conservatively 100000 scroll-preserve-screen-position 1) (global-hl-line-mode +1) (column-number-mode +1) (set-face-attribute 'default nil :font "Fira Code Nerd Font" :height 105) (setq-default line-spacing 5) (add-hook 'dashboard-mode-hook (lambda () (setq-local line-spacing 12))) (set-face-foreground 'minibuffer-prompt nil) ;; Text Settings (setq-default c-basic-offset 4) ;; This is annoying (setq-default indent-tabs-mode nil) (setq-default tab-width 4) (setq indent-line-function 'insert-tab) (set-default 'truncate-lines t) (set-default 'truncate-partial-width-windows nil) (defadvice text-scale-increase (around all-buffers (arg) activate) (dolist (buffer (buffer-list)) (with-current-buffer buffer ad-do-it))) (defun joe/edit-init() "Edit 'init.el' quickly" (interactive) (find-file user-init-file)) (defun joe/show-full-path () "Show the full path file name in the minibuffer." (interactive) (message (buffer-file-name))) (defun joe/toggle-buffer-mode () "Toggles the current major mode between actual and fundamental mode. This will act as a way to easily get all of the evil keybindings in buffers like magit, without compromises." (interactive) (let ((previous-mode major-mode)) (unless (boundp 'joe/buffer-previous-mode) (setq-local joe/buffer-previous-mode major-mode)) (if (equal major-mode 'fundamental-mode) (funcall joe/buffer-previous-mode) (progn (fundamental-mode) (setq-local joe/buffer-previous-mode previous-mode))))) (defun joe/revert-buffer-no-confirm () "Revert buffer without confirmation." (interactive) (revert-buffer :ignore-auto :noconfirm)) (require 'package) (setq package-archives '(("org" . "http://orgmode.org/elpa/") ("gnu" . "http://elpa.gnu.org/packages/") ("melpa" . "https://melpa.org/packages/"))) ;; ("marmalade" . "http://marmalade-repo.org/packages/"))) (add-hook 'before-save-hook 'whitespace-cleanup) ;; Packages (package-initialize) ;; Why we use this line ;; https://www.reddit.com/r/emacs/comments/1rdstn/set_packageenableatstartup_to_nil_for_slightly/ (setq package-enable-at-startup nil) (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. '(ansi-color-faces-vector [default default default italic underline success warning error]) '(beacon-color "#f2777a") '(custom-safe-themes '("aaa4c36ce00e572784d424554dcc9641c82d1155370770e231e10c649b59a074" default)) '(feebleline-msg-functions '((feebleline-line-number :align right :post "" :fmt "%5s") (feebleline-column-number :pre ":" :fmt "%-2s") (feebleline-file-directory :face feebleline-dir-face :post "") (feebleline-file-or-buffer-name :face font-lock-keyword-face :post "") (feebleline-file-modified-star :face font-lock-warning-face :post "") (feebleline-git-branch :face feebleline-git-face :pre " - "))) '(flycheck-color-mode-line-face-to-color 'mode-line-buffer-id) '(frame-background-mode 'dark) '(package-selected-packages '(consult-eglot eglot lsp-ui nano-modeline mini-modeline simple-modeline dimmer pdf-tools dap-mode csharp-mode consult-lsp lsp-mode consult flycheck all-the-icons-completion kind-icon mini-modeline good-scroll shelldon pcomplete-extension corfu-doc esh-autosuggest fish-completion cape corfu highlight-quoted writeroom-mode mini-frame dirvish ranger evil-goggles magit multi-vterm evil-collection smartparens vterm all-the-icons-dired all-the-icons org-bullets select-themes fsharp-mode fish-mode find-file-in-project helpful ahk-mode rainbow-delimiters doom-themes marginalia selectrum-prescient prescient selectrum avy evil-commentary evil-embrace evil-snipe evil-surround undo-tree which-key dashboard)) '(window-divider-mode nil)) (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. '(evil-goggles-delete-face ((t (:inherit 'shadow)))) '(evil-goggles-paste-face ((t (:inherit 'lazy-highlight)))) '(evil-goggles-yank-face ((t (:inherit 'isearch-fail)))) '(magit-diff-hunk-heading-highlight ((t (:extend t :background "cornflower blue" :foreground "#212337" :weight bold))))) (dolist (p package-selected-packages) (when (not (package-installed-p p)) (package-install p))) (setq custom-safe-themes t) (load-theme 'doom-vibrant t) ;; (load-theme 'doom-flatwhite t) (setq evil-want-keybinding nil) (setq evil-undo-system 'undo-tree) (setq evil-want-C-u-scroll t) (setq evil-want-Y-yank-to-eol t) (require 'highlight-quoted) (add-hook 'emacs-lisp-mode-hook 'highlight-quoted-mode) (global-undo-tree-mode) (setq undo-tree-visualizer-diff t) (setq undo-tree-history-directory-alist '(("." . "~/.emacs.vanilla/undo"))) (require 'evil) (evil-mode) (require 'evil-collection) (evil-collection-init) (save-place-mode t) (setq save-place-file "~/.emacs.vanilla/places") (require 'dired) (if (eq system-type 'windows-nt) (setq ls-lisp-dirs-first t) (setq dired-listing-switches "-ahlgo -v --group-directories-first")) ;; (require 'dimmer) ;; (setq dimmer-adjustment-mode :both) ;; (dimmer-mode 1) (defun joe/dired-open-with-wsl-open () "Open file under cursor with wsl-open which should launch it on the windows side." (interactive) (shell-command (format "wsl-open %s" (dired-get-filename)))) (defun joe/dired-find-file-other-window () "In Dired, visit this file or directory in another window." (interactive) (find-file-other-window (dired-get-file-for-visit))) (defun joe/dired-open-file () "In dired, open the file named on this line." (interactive) (let* ((file (dired-get-filename nil t))) (call-process "xdg-open" nil 0 nil file))) (defun joe/bookmark-set-and-save () "In dired, open the file named on this line." (interactive) (bookmark-set) (bookmark-save)) (add-hook 'dired-mode-hook (lambda () (rename-buffer (concat "Dired - " dired-directory)) (all-the-icons-dired-mode) (evil-define-key 'normal dired-mode-map (kbd "-") (lambda () (interactive) (find-alternate-file ".."))) (evil-define-key 'normal dired-mode-map (kbd "o") (lambda () (interactive) (joe/dired-open-file))) (evil-define-key 'normal dired-mode-map (kbd "s") (lambda () (interactive) (dired-sort-toggle-or-edit))) (evil-define-key 'normal dired-mode-map (kbd "") (lambda () (interactive) (dired-find-alternate-file))))) (defun lsp-related-stuff () (evil-define-key 'normal 'global (kbd "M-s") 'consult-imenu) (evil-define-key 'normal 'global (kbd "M-i") 'eldoc) (evil-define-key 'normal 'global (kbd "M-e") 'flycheck-next-error) (evil-define-key 'normal 'global (kbd "M-E") 'flycheck-previous-error)) (add-hook 'prog-mode-hook 'lsp-related-stuff) ;; (require 'dired-jump) (evil-define-key 'normal 'global (kbd "-") 'dired-jump) (require 'dashboard) (dashboard-setup-startup-hook) (setq initial-buffer-choice (lambda () (get-buffer-create "*dashboard*"))) (setq dashboard-startup-banner 'logo) (setq dashboard-center-content t) (setq dashboard-set-file-icons t) (setq dashboard-set-heading-icons t) (require 'which-key) (setq which-key-idle-delay 0.3) (which-key-mode) (which-key-add-keymap-based-replacements evil-normal-state-map "f" '("Files") "b" '("Buffers") "d" '("Dired") "g" '("Git") "t" '("Tabs") "p" '("Packages") "s" '("Shell (vterm)") "h" '("Help")) (evil-set-leader 'normal (kbd "SPC")) ;; TODO: We need 3 bindings; 1.) close buffer 2.) close window 3.) close buffer and window ;; To disable a keybinding just bind it to nil (evil-define-key 'normal 'global (kbd "w") 'save-buffer) (evil-define-key 'normal 'global (kbd "q") 'kill-buffer-and-window) (evil-define-key 'normal 'global (kbd "h") 'help-command) (evil-define-key 'normal 'global (kbd "k") 'kill-this-buffer) (evil-define-key 'normal 'global (kbd "hf") 'helpful-callable) (evil-define-key 'normal 'global (kbd "hv") 'helpful-variable) (evil-define-key 'normal 'global (kbd "hk") 'helpful-key) (evil-define-key 'normal 'global (kbd "ho") 'helpful-symbol) (evil-define-key 'normal 'global (kbd "hg") 'helpful-at-point) (evil-define-key 'normal 'global (kbd "fb") 'bookmark-jump) (evil-define-key 'normal 'global (kbd "fr") 'joe/recentf-open-files) (evil-define-key 'normal 'global (kbd "ff") 'ffip) (evil-define-key 'normal 'global (kbd "fi") 'joe/edit-init) (evil-define-key 'normal 'global (kbd "bl") 'mode-line-other-buffer) (evil-define-key 'normal 'global (kbd "bb") 'switch-to-buffer) (evil-define-key 'normal 'global (kbd "bi") 'ibuffer) (evil-define-key 'normal 'global (kbd "bm") 'joe/toggle-buffer-mode) (evil-define-key 'normal 'global (kbd "br") 'joe/revert-buffer-no-confirm) (evil-define-key 'normal 'global (kbd "bk") 'kill-this-buffer) (evil-define-key 'normal 'global (kbd "gg") 'magit-status) (evil-define-key 'normal 'global (kbd "gc") 'magit-clone) (evil-define-key 'normal 'global (kbd "pi") 'package-install) (evil-define-key 'normal 'global (kbd "pd") 'package-delete) (evil-define-key 'normal 'global (kbd "pf") 'package-refresh-contents) (evil-define-key 'normal 'global (kbd "pl") 'package-list-packages) (evil-define-key 'normal 'global (kbd "pr") 'package-reinstall) (evil-define-key 'normal 'global (kbd "tt") 'multi-vterm) (evil-define-key 'normal 'global (kbd "tn") 'multi-vterm-next) (evil-define-key 'normal 'global (kbd "tv") 'vterm-other-window) (evil-define-key 'normal 'global (kbd "Ba") 'joe/bookmark-set-and-save) (evil-define-key 'normal 'global (kbd "Bd") 'bookmark-delete) ;; (evil-define-key 'insert vterm-mode-map (kbd "C-t") #'multi-vterm-dedicated-toggle) ;; (evil-define-key 'normal vterm-mode-map (kbd "C-t") #'multi-vterm-dedicated-toggle) (evil-define-key 'normal 'global (kbd "cc") 'joe/compile) (defun joe/half-scroll-down () (interactive) (good-scroll-move (/ (good-scroll--window-usable-height) 2))) (defun joe/half-scroll-up () (interactive) (good-scroll-move (- (/ (good-scroll--window-usable-height) 2)))) ;; (setq good-scroll-avoid-vscroll-reset 1) ;; (evil-define-key 'normal 'global (kbd "C-e") 'good-scroll-up) ;; (evil-define-key 'normal 'global (kbd "C-y") 'good-scroll-down) ;; (evil-define-key 'normal 'global (kbd "C-d") 'joe/half-scroll-down) ;; (evil-define-key 'normal 'global (kbd "C-u") 'joe/half-scroll-up) ;; (evil-define-key 'normal 'global (kbd "C-f") 'good-scroll-up-full-screen) ;; (evil-define-key 'normal 'global (kbd "C-b") 'good-scroll-down-full-screen) (evil-define-key 'normal 'global (kbd "C-h") 'evil-window-left) (evil-define-key 'normal 'global (kbd "C-j") 'evil-window-down) (evil-define-key 'normal 'global (kbd "C-k") 'evil-window-up) (evil-define-key 'normal 'global (kbd "C-l") 'evil-window-right) (evil-define-key 'normal 'global (kbd "M-h") 'tab-previous) (evil-define-key 'normal 'global (kbd "M-l") 'tab-next) (evil-define-key 'normal 'global (kbd "tn") 'tab-new) (evil-define-key 'normal 'global (kbd "tc") 'tab-close) ;; (evil-define-key 'normal 'global (kbd "M-h") 'tab-line-switch-to-prev-tab) ;; (evil-define-key 'normal 'global (kbd "M-l") 'tab-line-switch-to-next-tab) (defvar global-evil-leader-map (make-sparse-keymap)) (evil-define-key 'normal 'global-evil-leader-map (kbd "SPC") 'evil-send-leader) (define-minor-mode global-evil-leader-mode "Minor mode to make evil leader global" :global t :keymap global-evil-leader-map) (global-evil-leader-mode) ;; (require 'mini-modeline) ;; (mini-modeline-mode 1) (require 'nano-modeline) (nano-modeline-mode 1) (require 'evil-surround) (global-evil-surround-mode 1) (require 'evil-snipe) (evil-snipe-override-mode 1) (require 'evil-commentary) (evil-commentary-mode) (require 'avy) (setq avy-keys '(?a ?s ?d ?f ?w ?e ?r ?u ?i ?o ?h ?j ?k ?l ?x ?c ?m)) (setq avy-all-windows t) (setq avy-background t) (defvar avy-map (make-sparse-keymap)) (define-key evil-normal-state-map (kbd ",") avy-map) (define-key avy-map "b" #'avy-goto-word-0-above) (define-key avy-map "w" #'avy-goto-word-0-below) (define-key avy-map "c" #'avy-goto-char-timer) (require 'org-bullets) (defun joe/org-mode-setup () (org-bullets-mode) (org-indent-mode)) (add-hook 'org-mode-hook 'joe/org-mode-setup) (require 'selectrum) (require 'prescient) (selectrum-mode +1) (selectrum-prescient-mode +1) (prescient-persist-mode +1) (marginalia-mode +1) (advice-add #'marginalia-cycle :after (lambda () (when (bound-and-true-p selectrum-mode) (selectrum-exhibit)))) (setq marginalia-annotators '(marginalia-annotators-heavy marginalia-annotators-light nil)) (defun joe/recentf-open-files () "Use `completing-read' to open a recent file." (interactive) (let ((files (mapcar 'abbreviate-file-name recentf-list))) (find-file (completing-read "Find recent file: " files nil t)))) (require 'recentf) (setq recentf-max-saved-items 1000) (setq recentf-max-menu-items 500) (recentf-mode t) (run-at-time t (* 5 60) 'recentf-save-list) (defun recentf-push-buffers-in-frame () (walk-windows (lambda (win) (let ((bfn (buffer-local-value 'buffer-file-name (window-buffer win)))) (and bfn (recentf-add-file bfn)))))) (add-to-list 'window-configuration-change-hook 'recentf-push-buffers-in-frame) (defun recentf-add-dired-directory () (when (and (stringp dired-directory) (equal "" (file-name-nondirectory dired-directory))) (recentf-add-file dired-directory))) (add-hook 'dired-mode-hook 'recentf-add-dired-directory) ;; Magic advice to rename entries in recentf when moving files in ;; dired. (defun rjs/recentf-rename-notify (oldname newname &rest args) (if (file-directory-p newname) (rjs/recentf-rename-directory oldname newname) (rjs/recentf-rename-file oldname newname))) (defun rjs/recentf-rename-file (oldname newname) (setq recentf-list (mapcar (lambda (name) (if (string-equal name oldname) newname name)) recentf-list))) (defun rjs/recentf-rename-directory (oldname newname) ;; oldname, newname and all entries of recentf-list should already ;; be absolute and normalised so I think this can just test whether ;; oldname is a prefix of the element. (setq recentf-list (mapcar (lambda (name) (if (string-prefix-p oldname name) (concat newname (substring name (length oldname))) name)) recentf-list))) (advice-add 'dired-rename-file :after #'rjs/recentf-rename-notify) (require 'smartparens) (smartparens-global-mode +1) (show-paren-mode +1) (sp-pair "'" nil :actions :rem) (require 'vterm) (setq vterm-shell "/bin/fish") (setq vterm-timer-delay 0.01) (setq vterm-buffer-name-string "VTerm - %s") (setq vterm-max-scrollback 100000) (add-hook 'vterm-mode-hook (lambda () (setq global-hl-line-mode nil)) (evil-define-key 'normal vterm-mode-map (kbd "(") 'vterm-previous-prompt) (evil-define-key 'normal vterm-mode-map (kbd ")") 'vterm-next-prompt)) (require 'find-file-in-project) (setq ffip-use-rust-fd 't) (require 'evil-goggles) (evil-goggles-mode) (setq evil-goggles-duration 0.075) (setq evil-goggles-pulse t) (setq evil-goggles-async-duration 0.55) (modify-all-frames-parameters '((right-divider-width . 5) (internal-border-width . 10))) ;; (dolist (face '(window-divider ;; window-divider-first-pixel ;; window-divider-last-pixel)) ;; (face-spec-reset-face face) ;; (set-face-foreground face "#333")) ;; (set-face-background 'fringe (face-attribute 'default :background)) (require 'mini-frame) (mini-frame-mode) (setq mini-frame-show-parameters '((top . 0.2) (width . 0.6) (height . 0.25) (left . 0.5))) (setq mini-frame-color-shift-step 18) (setq mini-frame-internal-border-color "dark") (setq x-gtk-resize-child-frames nil) (require 'corfu) (global-corfu-mode) (setq corfu-auto t) (setq corfu-scroll-margin 10) (setq corfu-preselect-first nil) (setq corfu-preview-current t) (setq corfu-echo-documentation t) (setq corfu-quit-no-match t) (setq corfu-auto-prefix 1) (setq corfu-auto-delay 0) (setq corfu-max-width 100 corfu-min-width 50) (require 'kind-icon) (setq kind-icon-default-face 'corfu-default) (add-to-list 'corfu-margin-formatters #'kind-icon-margin-formatter) (require 'all-the-icons-completion) (all-the-icons-completion-mode) (add-hook 'marginalia-mode-hook #'all-the-icons-completion-marginalia-setup) (load-file "~/.emacs.vanilla/elpa/ligature.el/ligature.el") (require 'ligature) (global-ligature-mode) (ligature-set-ligatures 'prog-mode '("|||>" "<|||" "<==>" "" "---" "-<<" "<~~" "<~>" "<*>" "<||" "<|>" "<$>" "<==" "<=>" "<=<" "<->" "<--" "<-<" "<<=" "<<-" "<<<" "<+>" "" "###" "#_(" "..<" "..." "+++" "/==" "///" "_|_" "www" "&&" "^=" "~~" "~@" "~=" "~>" "~-" "**" "*>" "*/" "||" "|}" "|]" "|=" "|>" "|-" "{|" "[|" "]#" "::" ":=" ":>" ":<" "$>" "==" "=>" "!=" "!!" ">:" ">=" ">>" ">-" "-~" "-|" "->" "--" "-<" "<~" "<*" "<|" "<:" "<$" "<=" "<>" "<-" "<<" "<+" "" "++" "?:" "?=" "?." "??" ";;" "/*" "/=" "/>" "//" "__" "~~" "(*" "*)" "\\\\" "://")) (add-to-list 'completion-at-point-functions #'cape-file) (define-key corfu-map (kbd "M-d") #'corfu-doc-toggle) (define-key corfu-map (kbd "M-p") #'corfu-doc-scroll-down) (define-key corfu-map (kbd "M-n") #'corfu-doc-scroll-up) ;; (require 'lsp) (require 'consult) ;; (require 'consult-lsp) (require 'dap-mode) (require 'dap-netcore) (require 'dap-gdb-lldb) (setq dap-print-io t) (require 'eglot) (require 'consult-eglot) (defun joe/compile () (interactive) (compile "make run")) ;; (dap-register-debug-template "NetCoreDdg Launch (4)" ;; (list :type "coreclr" ;; :request "launch" ;; :mode "launch" ;; :name "NetCoreDbg Launch" ;; :cwd nil ;; :dap-compilation "dotnet build" ;; :program "${workspaceFolder}/bin/Debug/net6.0/${workspaceFolderBasename}")) ;; (dap-register-debug-provider ;; "coreclr" ;; 'dap-netcore--populate-args) ;; (add-to-list 'load-path (expand-file-name "~/.emacs.vanilla/elpa/aweshell/")) ;; (require 'aweshell) ;; (require 'fish-completion) ;; (global-fish-completion-mode) ;; (setq evil-collection-company-use-tng nil) ;; (require 'slime) ;; (setq inferior-lisp-program "/usr/bin/sbcl") ;; (require 'feebleline) ;; (feebleline-mode) ;; (setq feebleline-msg-functions ;; '((feebleline-git-branch :align right :face feebleline-git-face :pre " - ") ;; (feebleline-file-directory :align right :face feebleline-dir-face :post "") ;; (feebleline-file-or-buffer-name :align right :face font-lock-keyword-face :post "") ;; (feebleline-file-modified-star :align right :face font-lock-warning-face :post "") ;; (feebleline-line-number :align right :post "" :fmt "%5s") ;; (feebleline-column-number :align right :pre ":" :fmt "%-2s"))) ;; (add-hook 'slime-mode-hook ;; (lambda () ;; ;; (setq global-hl-line-mode nil) ;; (evil-define-key 'normal slime-repl-mode-map (kbd "(") 'slime-repl-previous-prompt) ;; (evil-define-key 'normal slime-repl-mode-map (kbd ")") 'slime-repl-next-prompt) ;; (evil-define-key 'normal slime-repl-mode-map (kbd "C-j") 'evil-window-down) ;; (evil-define-key 'normal slime-repl-mode-map (kbd "C-k") 'evil-window-up))) ;; (setq slime-contribs '(slime-fancy slime-company)) ;; (define-advice fit-frame-to-buffer (:around (f &rest args) dont-skip-ws-for-mini-frame) ;; (cl-letf* ((orig (symbol-function #'window-text-pixel-size)) ;; ((symbol-function #'window-text-pixel-size) ;; (lambda (win from to &rest args) ;; (apply orig ;; (append (list win from ;; (if (and (window-minibuffer-p win) ;; (frame-root-window-p win) ;; (eq t to)) ;; nil ;; to)) ;; args))))) ;; (apply f args))) ;; (require 'eglot) ;; (require 'eglot-fsharp) ;; (require 'consult-eglot) ;; (require 'sublimity) ;; (require 'sublimity-scroll) ;; (sublimity-mode 1) ;; (setq sublimity-scroll-weight 14 ;; sublimity-scroll-drift-length 6) ;; TODO: Packages to check out ;; expand-region ;; projectile ;; Hydra (we can use it for some of the ideas I've had about repeating and arranging stuff) ;; CTRLF (figure out if it does anything interesting) ;; Embark (provides ivy style "actions" on fuzzy searches for selectrum) ;; exec-path-from-shell ;; company-quickhelp ;; flycheck ;; evil-mc ;; markdown-preview-mode ;; markdown-mode ;; company-mode ;; company ;; omnisharp ;; sly ;; ))) ;; '(send-mail-function (quote smtpmail-send-it)))