Initial working version
This commit is contained in:
commit
cc1c1af46e
18 changed files with 288 additions and 0 deletions
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[submodule "evil"]
|
||||||
|
path = evil
|
||||||
|
url = https://github.com/emacs-evil/evil.git
|
12
LICENCE
Normal file
12
LICENCE
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
Copyright (c) 2019 by Vladan Popovic <vladanovic@gmail.com>
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
purpose with or without fee is hereby granted.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||||
|
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||||
|
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||||
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||||
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||||
|
PERFORMANCE OF THIS SOFTWARE.
|
17
README.rst
Normal file
17
README.rst
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
My custom emacs configuration
|
||||||
|
=============================
|
||||||
|
|
||||||
|
**IT'S EVIL!!!**
|
||||||
|
|
||||||
|
Tested on:
|
||||||
|
|
||||||
|
* Rust
|
||||||
|
* Elm
|
||||||
|
* Systemd
|
||||||
|
|
||||||
|
Installation
|
||||||
|
============
|
||||||
|
|
||||||
|
Clone the repository as ~/.emacs.d/ (not inside it), e.g.::
|
||||||
|
|
||||||
|
git clone https://path-to-this-repo.git ~/.emacs.d
|
23
custom.el
Normal file
23
custom.el
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
(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.
|
||||||
|
'(elm-compile-arguments '("--output=elm-couchapp/_attachments/index.html"))
|
||||||
|
'(elm-compile-command '("elm make"))
|
||||||
|
'(elm-format-on-save t)
|
||||||
|
'(elm-interactive-command '("elm" "repl"))
|
||||||
|
'(elm-package-command '("elm" "package"))
|
||||||
|
'(elm-package-json "elm.json")
|
||||||
|
'(elm-reactor-command '("elm" "reactor"))
|
||||||
|
'(elm-tags-exclude-elm-stuff nil)
|
||||||
|
'(elm-tags-on-save 1)
|
||||||
|
'(package-selected-packages
|
||||||
|
'(material-theme racer evil-mode helm rust-mode highlight-parentheses-mode merlin forge magit yaml-mode neotree lsp-rust hindent hi2 flycheck-haskell ac-haskell-process lsp-haskell haste haskell-snippets haskell-mode rainbow-identifiers elm-test-runner flycheck-elm elm-mode company ztree ac-etags sqlformat cargo evil)))
|
||||||
|
;;
|
||||||
|
(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.
|
||||||
|
)
|
1
evil
Submodule
1
evil
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit c861d2f6be8207a8919675ce76db583df071b4d5
|
29
init.el
Normal file
29
init.el
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
;; Load emacs customizations.
|
||||||
|
;; The customization file shouldn't should be only
|
||||||
|
(setq custom-file "~/.emacs.d/custom.el")
|
||||||
|
(load custom-file)
|
||||||
|
|
||||||
|
;; Configure emacs packages.
|
||||||
|
(setq should-install-packages t) ;; Define this before everything to speed up startup.
|
||||||
|
(require 'package)
|
||||||
|
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
|
||||||
|
(package-initialize)
|
||||||
|
|
||||||
|
(setq dotfiles-dir (file-name-directory
|
||||||
|
(or (buffer-file-name) (file-chase-links load-file-name))))
|
||||||
|
|
||||||
|
(add-to-list 'load-path (concat dotfiles-dir "modules"))
|
||||||
|
|
||||||
|
;; Emacs customization / global plugin configuration
|
||||||
|
(require 'jenga-company)
|
||||||
|
(require 'jenga-emacs)
|
||||||
|
(require 'jenga-evil)
|
||||||
|
(require 'jenga-helm)
|
||||||
|
(require 'jenga-magit)
|
||||||
|
(require 'jenga-org)
|
||||||
|
(require 'jenga-theme)
|
||||||
|
|
||||||
|
;; Custom languages and highlighting
|
||||||
|
(require 'jenga-elm)
|
||||||
|
(require 'jenga-rust)
|
||||||
|
(require 'jenga-systemd)
|
12
modules/jenga-company.el
Normal file
12
modules/jenga-company.el
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
;;;; Company configuration.
|
||||||
|
(require 'jenga-functions)
|
||||||
|
(instl 'company)
|
||||||
|
|
||||||
|
;; Allign annotations in company auto-complete list.
|
||||||
|
(setq company-tooltip-align-annotations t)
|
||||||
|
(add-hook 'after-init-hook 'global-company-mode)
|
||||||
|
|
||||||
|
(setq tab-always-indent 'complete)
|
||||||
|
(add-to-list 'completion-styles 'initials t)
|
||||||
|
|
||||||
|
(provide 'jenga-company)
|
17
modules/jenga-elm.el
Normal file
17
modules/jenga-elm.el
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
;;;; Elm mode configuration.
|
||||||
|
(require 'jenga-functions)
|
||||||
|
(instl 'elm-mode)
|
||||||
|
|
||||||
|
(add-hook 'elm-mode-hook #'company-mode)
|
||||||
|
(add-hook 'elm-mode-hook #'rainbow-delimiters-mode)
|
||||||
|
(add-hook 'elm-mode-hook (lambda () (setq evil-auto-indent nil)))
|
||||||
|
|
||||||
|
;; Turn on Elm mode with *.elm files.
|
||||||
|
(add-to-list 'auto-mode-alist '("\\.elm\\'" . elm-mode))
|
||||||
|
(add-to-list 'company-backends 'company-elm)
|
||||||
|
|
||||||
|
(setq elm-format-on-save t
|
||||||
|
elm-tags-on-save t
|
||||||
|
elm-tags-exclude-elm-stuff nil)
|
||||||
|
|
||||||
|
(provide 'jenga-elm)
|
39
modules/jenga-emacs.el
Normal file
39
modules/jenga-emacs.el
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
;; Persist command history
|
||||||
|
(savehist-mode 1)
|
||||||
|
|
||||||
|
;; Disable the splash screen (to enable it agin, replace the t with 0).
|
||||||
|
(setq inhibit-splash-screen t)
|
||||||
|
|
||||||
|
;; Disable the menu.
|
||||||
|
(tool-bar-mode -1)
|
||||||
|
;; Enable transient mark mode.
|
||||||
|
(transient-mark-mode 1)
|
||||||
|
|
||||||
|
;; Highlight paired parentheses when cursor is over one.
|
||||||
|
(show-paren-mode 1)
|
||||||
|
|
||||||
|
;;;; TAGS configuration.
|
||||||
|
;; Goto tag with M-.
|
||||||
|
(global-set-key "\M-." 'etags-select-find-tag)
|
||||||
|
;; Automatically load TAGS file (if exists) when opening emacs.
|
||||||
|
(let ((my-tags-file (locate-dominating-file default-directory "TAGS")))
|
||||||
|
(when my-tags-file
|
||||||
|
(message "Loading tags file: %s" my-tags-file)
|
||||||
|
(visit-tags-table my-tags-file)))
|
||||||
|
|
||||||
|
;;(setq split-height-threshold nil)
|
||||||
|
;;(setq split-width-threshold 0)
|
||||||
|
(global-set-key (kbd "S-C-h") 'shrink-window-horizontally)
|
||||||
|
(global-set-key (kbd "S-C-l") 'enlarge-window-horizontally)
|
||||||
|
(global-set-key (kbd "S-C-j") 'shrink-window)
|
||||||
|
(global-set-key (kbd "S-C-k") 'enlarge-window)
|
||||||
|
|
||||||
|
(setq-default display-line-numbers-type 'absolute
|
||||||
|
display-line-numbers-current-absolute t
|
||||||
|
display-line-numbers-width 4
|
||||||
|
display-line-numbers-widen t)
|
||||||
|
|
||||||
|
(add-hook 'text-mode-hook #'display-line-numbers-mode)
|
||||||
|
(add-hook 'prog-mode-hook #'display-line-numbers-mode)
|
||||||
|
|
||||||
|
(provide 'jenga-emacs)
|
16
modules/jenga-evil.el
Normal file
16
modules/jenga-evil.el
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
;;;; Evil mode configuration.
|
||||||
|
;;(unless (package-installed-p 'evil)
|
||||||
|
;; (package-refresh-contents)
|
||||||
|
;; (package-install 'evil))
|
||||||
|
(add-to-list 'load-path "~/.emacs.d/evil")
|
||||||
|
(setq evil-want-C-u-scroll t)
|
||||||
|
|
||||||
|
;; Enable Evil mode.
|
||||||
|
(require 'evil)
|
||||||
|
(evil-mode 1)
|
||||||
|
|
||||||
|
(eval-after-load "evil-maps"
|
||||||
|
;; Unset Evil's "M-." keymap so that TAGS definitions can be followed.
|
||||||
|
(define-key evil-normal-state-map "\M-." nil))
|
||||||
|
|
||||||
|
(provide 'jenga-evil)
|
7
modules/jenga-functions.el
Normal file
7
modules/jenga-functions.el
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
(defun instl (pckg)
|
||||||
|
(unless (and should-install-packages (package-installed-p pckg))
|
||||||
|
(package-refresh-contents)
|
||||||
|
(package-install pckg))
|
||||||
|
(require pckg))
|
||||||
|
|
||||||
|
(provide 'jenga-functions)
|
32
modules/jenga-helm.el
Normal file
32
modules/jenga-helm.el
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
;;;; Heml mode configuration.
|
||||||
|
(require 'jenga-functions)
|
||||||
|
(instl 'helm)
|
||||||
|
|
||||||
|
(require 'helm-config)
|
||||||
|
|
||||||
|
(helm-mode 1)
|
||||||
|
(setq helm-autoresize-max-height 0)
|
||||||
|
(setq helm-autoresize-min-height 20)
|
||||||
|
(helm-autoresize-mode 1)
|
||||||
|
|
||||||
|
;; The default "C-x c" is quite close to "C-x C-c", which quits Emacs.
|
||||||
|
;; Changed to "C-c h". Note: We must set "C-c h" globally, because we
|
||||||
|
;; cannot change `helm-command-prefix-key' once `helm-config' is loaded.
|
||||||
|
(global-set-key (kbd "C-c h") 'helm-command-prefix)
|
||||||
|
(global-unset-key (kbd "C-x c"))
|
||||||
|
|
||||||
|
(define-key helm-map (kbd "<tab>") 'helm-execute-persistent-action) ; rebind tab to run persistent action
|
||||||
|
(define-key helm-map (kbd "C-i") 'helm-execute-persistent-action) ; make TAB work in terminal
|
||||||
|
(define-key helm-map (kbd "C-z") 'helm-select-action) ; list actions using C-z
|
||||||
|
|
||||||
|
(when (executable-find "firefox")
|
||||||
|
(setq helm-google-suggest-use-curl-p t))
|
||||||
|
|
||||||
|
(setq helm-split-window-in-side-p t ; Open helm buffer inside current window, not occupy whole other window
|
||||||
|
helm-move-to-line-cycle-in-source t ; Move to end or beginning of source when reaching top or bottom of source.
|
||||||
|
helm-ff-search-library-in-sexp t ; Search for library in `require' and `declare-function' sexp.
|
||||||
|
helm-scroll-amount 8 ; Scroll 8 lines other window using M-<next>/M-<prior>
|
||||||
|
helm-ff-file-name-history-use-recentf t
|
||||||
|
helm-echo-input-in-header-line t)
|
||||||
|
|
||||||
|
(provide 'jenga-helm)
|
5
modules/jenga-magit.el
Normal file
5
modules/jenga-magit.el
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
;;;; Magit configuration.
|
||||||
|
(require 'jenga-functions)
|
||||||
|
(instl 'magit)
|
||||||
|
|
||||||
|
(provide 'jenga-magit)
|
16
modules/jenga-ocaml.el
Normal file
16
modules/jenga-ocaml.el
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
;; OCaml
|
||||||
|
(let ((opam-share (ignore-errors (car (process-lines "opam" "config" "var" "share")))))
|
||||||
|
(when (and opam-share (file-directory-p opam-share))
|
||||||
|
(add-to-list 'load-path (expand-file-name "emacs/site-lisp" opam-share))
|
||||||
|
(autoload 'merlin-mode "merlin" nil t nil)
|
||||||
|
(add-hook 'tuareg-mode-hook 'merlin-mode t)
|
||||||
|
(add-hook 'caml-mode-hook 'merlin-mode t)))
|
||||||
|
|
||||||
|
; Make company aware of merlin
|
||||||
|
(with-eval-after-load 'company
|
||||||
|
(add-to-list 'company-backends 'merlin-company-backend))
|
||||||
|
|
||||||
|
; Enable company on merlin managed buffers
|
||||||
|
(add-hook 'merlin-mode-hook 'company-mode)
|
||||||
|
|
||||||
|
(provide 'jenga-ocaml)
|
9
modules/jenga-org.el
Normal file
9
modules/jenga-org.el
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
;;;; Org mode configuration.
|
||||||
|
;; Enable Org mode.
|
||||||
|
(require 'jenga-functions)
|
||||||
|
(instl 'org)
|
||||||
|
|
||||||
|
;; Turn on Org mode on .org files.
|
||||||
|
(add-to-list 'auto-mode-alist '("\\.org$" . org-mode))
|
||||||
|
|
||||||
|
(provide 'jenga-org)
|
30
modules/jenga-rust.el
Normal file
30
modules/jenga-rust.el
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
;;;; Rust mode configuration.
|
||||||
|
;; Add rust load hooks.
|
||||||
|
(require 'jenga-functions)
|
||||||
|
(instl 'rust-mode)
|
||||||
|
(instl 'racer)
|
||||||
|
|
||||||
|
(add-hook 'rust-mode-hook #'racer-mode)
|
||||||
|
(add-hook 'racer-mode-hook #'eldoc-mode)
|
||||||
|
(add-hook 'racer-mode-hook #'company-mode)
|
||||||
|
(add-hook 'rust-mode-hook 'cargo-minor-mode)
|
||||||
|
|
||||||
|
;; Turn on Rust mode with *.rs files.
|
||||||
|
(add-to-list 'auto-mode-alist '("\\.rs\\'" . rust-mode))
|
||||||
|
;; Auto-format with rustfmt on save.
|
||||||
|
(setq rust-format-on-save t)
|
||||||
|
|
||||||
|
;; Show company auto-complete list on *.rs files by pressing TAB.
|
||||||
|
(define-key rust-mode-map (kbd "TAB") #'company-indent-or-complete-common)
|
||||||
|
;; Use M-. keybinding to follow tag.
|
||||||
|
(define-key rust-mode-map (kbd "M-.") 'racer-find-definition)
|
||||||
|
;; Use M-h keybinding to open symbol documentation.
|
||||||
|
(define-key rust-mode-map (kbd "M-h") 'racer-describe)
|
||||||
|
;; Use C-c C-c keybinding to compile with `cargo build`.
|
||||||
|
(define-key rust-mode-map (kbd "C-c C-b") 'cargo-process-build)
|
||||||
|
;; Use C-c C-r keybinding to run with `cargo run`.
|
||||||
|
(define-key rust-mode-map (kbd "C-c C-r") 'cargo-process-run)
|
||||||
|
;; Use C-c C-t keybinding to test with `cargo test`.
|
||||||
|
(define-key rust-mode-map (kbd "C-c C-t") 'cargo-process-test)
|
||||||
|
|
||||||
|
(provide 'jenga-rust)
|
13
modules/jenga-systemd.el
Normal file
13
modules/jenga-systemd.el
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
(add-to-list 'auto-mode-alist '("\\.service\\'" . conf-unix-mode))
|
||||||
|
(add-to-list 'auto-mode-alist '("\\.timer\\'" . conf-unix-mode))
|
||||||
|
(add-to-list 'auto-mode-alist '("\\.target\\'" . conf-unix-mode))
|
||||||
|
(add-to-list 'auto-mode-alist '("\\.mount\\'" . conf-unix-mode))
|
||||||
|
(add-to-list 'auto-mode-alist '("\\.automount\\'" . conf-unix-mode))
|
||||||
|
(add-to-list 'auto-mode-alist '("\\.slice\\'" . conf-unix-mode))
|
||||||
|
(add-to-list 'auto-mode-alist '("\\.socket\\'" . conf-unix-mode))
|
||||||
|
(add-to-list 'auto-mode-alist '("\\.path\\'" . conf-unix-mode))
|
||||||
|
(add-to-list 'auto-mode-alist '("\\.netdev\\'" . conf-unix-mode))
|
||||||
|
(add-to-list 'auto-mode-alist '("\\.network\\'" . conf-unix-mode))
|
||||||
|
(add-to-list 'auto-mode-alist '("\\.link\\'" . conf-unix-mode))
|
||||||
|
|
||||||
|
(provide 'jenga-systemd)
|
7
modules/jenga-theme.el
Normal file
7
modules/jenga-theme.el
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
;; Use material theme on black background.
|
||||||
|
(unless (package-installed-p 'material-theme)
|
||||||
|
(package-refresh-contents)
|
||||||
|
(package-install 'material-theme))
|
||||||
|
(require 'material-theme)
|
||||||
|
|
||||||
|
(provide 'jenga-theme)
|
Loading…
Reference in a new issue