|
;; Config file |
|
|
|
;; Setup MELPA |
|
(require 'package) |
|
(let* ((no-ssl (and (memq system-type '(windows-nt ms-dos)) |
|
(not (gnutls-available-p)))) |
|
(proto (if no-ssl "http" "https"))) |
|
(when no-ssl |
|
(warn "\ |
|
Your version of Emacs does not support SSL connections, |
|
which is unsafe because it allows man-in-the-middle attacks. |
|
There are two things you can do about this warning: |
|
1. Install an Emacs version that does support SSL and be safe. |
|
2. Remove this warning from your init file so you won't see it again.")) |
|
;; Comment/uncomment these two lines to enable/disable MELPA and MELPA Stable as desired |
|
(add-to-list 'package-archives (cons "melpa" (concat proto "://melpa.org/packages/")) t) |
|
;;(add-to-list 'package-archives (cons "melpa-stable" (concat proto "://stable.melpa.org/packages/")) t) |
|
(when (< emacs-major-version 24) |
|
;; For important compatibility libraries like cl-lib |
|
(add-to-list 'package-archives (cons "gnu" (concat proto "://elpa.gnu.org/packages/"))))) |
|
|
|
(setq custom-file "~/.emacs.d/custom.el") |
|
(load custom-file) |
|
|
|
|
|
|
|
;; Added by Package.el. This must come before configurations of |
|
;; installed packages. Don't delete this line. If you don't want it, |
|
;; just comment it out by adding a semicolon to the start of the line. |
|
;; You may delete these explanatory comments. |
|
(package-initialize) |
|
|
|
|
|
(toggle-frame-maximized) |
|
|
|
(setq backup-directory-alist '(("." . "~/.emacs.d/backup")) |
|
backup-by-copying t ; Don't delink hardlinks |
|
version-control t ; Use version numbers on backups |
|
delete-old-versions t ; Automatically delete excess backups |
|
kept-new-versions 20 ; how many of the newest versions to keep |
|
kept-old-versions 5 ; and how many of the old |
|
) |
|
(electric-pair-mode t) |
|
|
|
(use-package projectile |
|
:ensure t |
|
:init |
|
(require 'projectile) |
|
(define-key projectile-mode-map (kbd "C-c p") 'projectile-command-map) |
|
(projectile-global-mode) |
|
(setq projectile-enable-caching t)) |
|
|
|
|
|
(defun setup-c-indentation () |
|
"Configure indentation right on C modes" |
|
(setq-default c-basic-offset 4 |
|
tab-width 4 |
|
indent-tabs-mode nil) |
|
(c-set-offset 'arglist-intro '+)) |
|
|
|
(defun setup-windmove () |
|
(global-set-key [M-left] 'windmove-left) ; move to left window |
|
(global-set-key [M-right] 'windmove-right) ; move to right window |
|
(global-set-key [M-up] 'windmove-up) ; move to upper window |
|
(global-set-key [M-down] 'windmove-down) ; move to lower window |
|
) |
|
|
|
(defun setup-custom-keys () |
|
(global-set-key (kbd "M-s") 'replace-string) |
|
(global-set-key (kbd "C-c r") 'revert-buffer) |
|
|
|
;; delete non needed whitespace |
|
;; this might be in a before-save-hook, but I want to do only when I want |
|
;; and markdown uses trailing whitespaces for non-new-paragraph-newline |
|
(global-set-key (kbd "C-c w") 'delete-trailing-whitespace) |
|
(global-set-key (kbd "C-c ! l") 'flymake-show-diagnostics-buffer)) |
|
|
|
(defun setup-highlight () |
|
(global-hl-line-mode) |
|
(set-face-attribute hl-line-face nil :underline nil)) |
|
|
|
(defun setup-mode-hooks () |
|
;; (add-hook 'c-mode-hook #'lsp) |
|
;; (add-hook 'php-mode-hook #'lsp) |
|
(add-hook 'markdown-mode-hook 'auto-fill-mode) |
|
(add-hook 'latex-mode-hook 'auto-fill-mode) |
|
(add-hook 'css-mode-hook 'rainbow-mode) |
|
(add-hook 'html-mode-hook 'emmet-mode) |
|
(setq lsp-clients-clangd-executable "/usr/lib/llvm-10/bin/clangd")) ; 100mb |
|
|
|
(setup-c-indentation) |
|
(setup-highlight) |
|
(show-paren-mode 1) |
|
|
|
; Set node correctly so that emacs will find the typescript language server |
|
(setq exec-path (append exec-path '("~/.nvm/versions/node/v12.18.4/bin"))) |
|
(setenv "PATH" (concat (getenv "PATH") ":~/.nvm/versions/node/v12.18.4/bin")) |
|
|
|
|
|
|
|
(require 'use-package) |
|
|
|
(use-package windmove |
|
:ensure t |
|
:config (setup-windmove)) |
|
|
|
(use-package move-text |
|
:ensure t |
|
:bind (("M-S-<up>" . move-text-up) |
|
("M-S-<down>" . move-text-down))) |
|
|
|
(use-package idomenu |
|
:ensure t |
|
:init (ido-grid-mode 1) |
|
:config (ido-mode t)) |
|
|
|
(use-package expand-region |
|
:ensure t |
|
:bind ("C-=" . er/expand-region)) |
|
|
|
(use-package multiple-cursors |
|
:ensure t |
|
:bind (("M-s-<down>" . mc/mark-next-like-this) |
|
("M-s-<up>" . mc/mark-previous-like-this) |
|
("C-c C-<" . mc/mark-all-like-this) |
|
("M-s-c M-s-c" . mc/edit-lines))) |
|
|
|
(use-package web-mode |
|
:mode ("\\.html\\'" |
|
"\\.phtml\\'" |
|
"\\.tpl\\'" |
|
"\\.[agj]sp\\'" |
|
"\\.as[cp]x\\'" |
|
"\\.erb\\'" |
|
"\\.mustache\\'" |
|
"\\.djhtml\\'")) |
|
|
|
(use-package rjsx-mode |
|
:mode ("\\.jsx\\'")) |
|
|
|
(use-package js2-mode |
|
:mode ("\\.js\\'")) |
|
|
|
(use-package magit |
|
:ensure t |
|
:bind (("C-c g" . magit-status))) |
|
|
|
(use-package forge |
|
:after magit) |
|
|
|
(use-package geiser |
|
:ensure t) |
|
|
|
(use-package geiser-guile |
|
:ensure t |
|
:after geiser) |
|
|
|
(use-package yasnippet ; Snippets |
|
:ensure t |
|
:config |
|
(setq |
|
yas-verbosity 1 ; No need to be so verbose |
|
yas-wrap-around-region t) |
|
|
|
(with-eval-after-load 'yasnippet |
|
(setq yas-snippet-dirs '(yasnippet-snippets-dir))) |
|
|
|
(yas-reload-all) |
|
(yas-global-mode)) |
|
|
|
(use-package yasnippet-snippets ; Collection of snippets |
|
:ensure t) |
|
|
|
(use-package recentf |
|
:ensure t |
|
:init |
|
(recentf-mode 1) |
|
(setq recentf-max-menu-items 25) |
|
(setq recentf-max-saved-items 25) |
|
:bind (("\C-c C-r" . recentf-open-files))) |
|
|
|
(use-package org |
|
:ensure t |
|
:bind (("\C-c l" . org-store-link) |
|
("\C-c a" . org-agenda)) |
|
:config |
|
(setq org-log-done t)) |
|
|
|
(use-package hl-todo |
|
:ensure t |
|
:bind (("\C-c h p" . hl-todo-previous) |
|
("\C-c h n" . hl-todo-next) |
|
("\C-c h o" . hl-todo-occur) |
|
("\C-c h i" . hl-todo-insert))) |
|
|
|
|
|
(use-package smart-mode-line |
|
:config (sml/setup)) |
|
|
|
(use-package rainbow-delimiters |
|
:hook ((c++-mode . rainbow-delimiters-mode) |
|
(js2-mode . rainbow-delimiters-mode))) |
|
|
|
(setq lsp-keymap-prefix "C-c s") |
|
|
|
(use-package which-key |
|
:ensure t) |
|
|
|
(use-package lsp-mode |
|
:ensure t |
|
:init |
|
(require 'lsp-ido) |
|
|
|
;; required by lsp-mode to work nicely |
|
(setq read-process-output-max (* 1024 1024)) ;; 1mb |
|
(setq gc-cons-threshold 100000000) ; 100mb |
|
(which-key-mode) |
|
|
|
:hook ((c++-mode . lsp) |
|
(js2-mode . lsp) |
|
(python-mode . lsp) |
|
(lsp . #'lsp-enable-which-key-integration) |
|
; (rust-mode . lsp) |
|
(typescript-mode . lsp)) |
|
|
|
:config |
|
(setq lsp-clients-clangd-args '("-j=8" "-background-index" "-log=error")) |
|
:bind (("\C-c s" . lsp-command-map) |
|
("\C-c f" . lsp-format-buffer)) |
|
:commands lsp) |
|
|
|
(use-package elpy |
|
:ensure t |
|
:config |
|
(setq elpy-rpc-python-command "~/anaconda3/bin/python3")) |
|
|
|
(use-package lsp-jedi |
|
:ensure t |
|
:init |
|
(setq lsp-jedi-executable-command "~/anaconda3/bin/jedi-language-server") |
|
:config |
|
(with-eval-after-load "lsp-mode" |
|
(add-to-list 'lsp-disabled-clients 'pyls))) |
|
|
|
|
|
(setup-mode-hooks) |
|
(setup-custom-keys) |