myhome/.emacs.d/init.el
2021-11-02 13:34:08 +01:00

622 lines
14 KiB
EmacsLisp

;Packages
;; package archives
(require 'package)
(setq package-enable-at-startup nil)
(setq package-archives
'(
("melpa" . "https://melpa.org/packages/")
("ELPA" . "http://tromey.com/elpa/")
("gnu" . "http://elpa.gnu.org/packages/")
("ORG" . "https://orgmode.org/elpa/")
)
)
(package-initialize)
(setq gnutls-algorithm-priority "NORMAL:-VERS-TLS1.3")
;; UTF-8
(set-language-environment "UTF-8")
;; Remove welcome screen
(setq inhibit-startup-screen t)
;; Disable menu
(menu-bar-mode 0)
;; Remove working cl
(require 'cl-lib)
(setq byte-compile-warnings '(cl-functions))
(advice-add 'sh-set-shell :around
(lambda (orig-fun &rest args)
(cl-letf (((symbol-function 'message) #'ignore))
(apply orig-fun args))))
;; install use-package
(unless (package-installed-p 'use-package)
(package-refresh-contents)
(package-install 'use-package)
)
;; Packages list refresh
(when (not package-archive-contents)
(package-refresh-contents))
;; Auto Package Update
(use-package auto-package-update
:ensure t
:config
(progn
(setq
auto-package-update-delete-old-verions t
auto-package-update-interval 5
)
(auto-package-update-maybe)
)
)
;; Set path to store "custom-set"
(setq custom-file "~/.emacs.d/emacs-custom.el")
;; Enable awesome-tab-mode
(add-to-list 'load-path (expand-file-name "~/.emacs.d/plugins"))
(require 'awesome-tab)
(awesome-tab-mode t)
(use-package awesome-tab
:load-path "~/.emacs.d/plugins"
:config
(awesome-tab-mode t))
(awesome-tab-mode t)
(global-set-key (kbd "C-x j") 'awesome-tab-backward-tab)
(global-set-key (kbd "C-x k") 'awesome-tab-forward-tab)
;; 80-charaters mode
(add-hook 'text-mode-hook 'auto-fill-mode)
(setq-default fill-column 80)
(add-hook 'prog-mode-hook #'display-fill-column-indicator-mode)
; Global turn on flycheck
(add-hook 'after-init-hook #'global-flycheck-mode)
; Org Files
(add-hook 'org-mode-hook '(lambda () (setq fill-column 80)))
(add-hook 'org-mode-hook 'auto-fill-mode)
(add-hook 'org-mode-hook 'turn-on-flyspell)
;; Latex files
(add-hook 'latex-mode-hook 'turn-on-flyspell)
(setq ispell-dictionary "pl")
;; Broswer
(setq browse-url-browser-function 'browse-url-generic
browse-url-generic-program "browser-x")
;; Amx
(use-package amx
:ensure t
:after ivy
:custom
(
(amx-backend 'ivy)
(amx-show-key-bindings t)
)
:config
(amx-mode t)
)
;; Custom theme
(add-to-list 'custom-theme-load-path
"~/.emacs.d/plugins/")
;; Switch-window
(use-package switch-window
:ensure t
:config
(setq
switch-window-increase 4
switch-window-input-style 'minibuffer
switch-window-shortcut-style 'qwerty
switch-window-threshold 2
)
(setq
switch-window-qwerty-shortcuts
'( "a" "s" "d" "f" "g" "h" "j" "k" "l")
)
:bind
([remap other-window] . switch-window)
)
;; Enable japanese
(if (condition-case nil (require 'mozc)(error nil))
(setq ecb-be-more-like-better-yes-p t)
(message "Monz not available; not configuring") )
(setq default-input-method "japanese-mozc")
;; Enable Smex
(use-package smex
:ensure t
:init
(smex-initialize)
:bind
("M-x" . smex)
)
;; reveal dependency
(use-package htmlize
:ensure t
)
(use-package ox-reveal
:ensure t
:config
;; maybe add auto-installer in the future
(setq org-reveal-root "https://cdn.jsdelivr.net/npm/reveal.js")
)
;; moveline
(use-package move-text
:ensure t
:config)
(global-set-key (kbd "M-<up>") 'move-text-up)
(global-set-key (kbd "M-<down>") 'move-text-down)
;; company
(use-package company
:ensure t
)
(global-company-mode)
(setq company-dabbrev-downcase 0)
(setq company-idle-delay 0)
;; Shell - bash
(use-package flymake-shellcheck
:ensure t
)
(use-package flycheck-bashate
:ensure t
)
(require 'bash-completion)
(bash-completion-setup)
(use-package flymake-shell
:ensure t
)
(require 'flymake-shell)
(add-hook 'sh-set-shell-hook 'flymake-shell-load)
;; Default font
(defun rc/get-default-font ()
(cond
((eq system-type 'windows-nt) "Consolas-13")
((eq system-type 'gnu/linux) "xos4 Terminus Bold 16")))
(add-to-list 'default-frame-alist `(font . ,(rc/get-default-font)))
;; Theme
(use-package gruvbox-theme
:ensure t
:config
(load-theme 'gruvbox-dark-hard t))
;; Sitebar dirred
(use-package dired-sidebar
:ensure t
:commands (dired-sidebar-toggle-sidebar))
(require 'dired-sidebar)
(global-set-key (kbd "C-x d") 'dired-sidebar-toggle-sidebar)
;; Smex
(require 'smex)
(smex-initialize)
(global-set-key (kbd "M-x") 'counsel-M-x)
;;buffer-move
(require 'buffer-move)
(global-set-key (kbd "C-x b") 'counsel-buffer-or-recentf)
(global-set-key (kbd "<C-S-up>") 'buf-move-up)
(global-set-key (kbd "<C-S-down>") 'buf-move-down)
(global-set-key (kbd "<C-S-left>") 'buf-move-left)
(global-set-key (kbd "<C-S-right>") 'buf-move-right)
;; Files
(global-set-key (kbd "C-x C-f") 'counsel-find-file)
;; Multiple-cursors
(use-package multiple-cursors
:ensure t
:config
)
(global-set-key (kbd "C-S-c C-S-c") 'mc/edit-lines)
(global-set-key (kbd "C->") 'mc/mark-next-like-this)
(global-set-key (kbd "C-<") 'mc/mark-previous-like-this)
(global-set-key (kbd "C-c C-<") 'mc/mark-all-like-this)
;; Magit
(use-package magit
:ensure t
:config
)
(global-set-key (kbd "C-x g") 'magit-status)
;; Helpers for easily building Emacs flymake checkers.
(use-package flymake-easy
:ensure t
:config
)
;; Error list
(define-key flymake-mode-map (kbd "M-n") 'flymake-goto-next-error)
(define-key flymake-mode-map (kbd "M-p") 'flymake-goto-prev-error)
;; Ruby
(use-package flymake-ruby
:ensure t
:config
)
;;robe
(use-package robe
:ensure t
:config
)
(require 'robe)
(add-hook 'ruby-mode-hook 'robe-mode)
(add-hook 'robe-mode-hook 'ac-robe-setup)
(eval-after-load 'company
'(push 'company-robe company-backends))
(require 'flymake-ruby)
(add-hook 'ruby-mode-hook 'flymake-ruby-load)
;; Docker
(use-package dockerfile-mode
:ensure t
:defer t)
;; YAML
(require 'flymake-yaml)
(use-package yaml-mode
:ensure t
:config
)
;; pip install --user yamllint
(require 'flycheck-yamllint)
(eval-after-load 'flycheck
'(add-hook 'flycheck-mode-hook 'flycheck-yamllint-setup))
;; Ansible
(use-package ansible
:ensure t
:config
)
(use-package ansible-doc
:ensure t
:config
)
(use-package company-ansible
:ensure t
:config
)
(add-to-list 'company-backends 'company-ansible)
(add-hook 'yaml-mode-hook '(lambda () (ansible 1)))
(add-hook 'yaml-mode-hook #'ansible-doc-mode)
;; Markdown-mode
(custom-set-variables
'(markdown-command "/usr/bin/pandoc"))
(use-package markdown-mode
:ensure t
:config
)
;; C++ C
(use-package auto-complete-clang
:ensure t
:config
)
;; Apache
(use-package apache-mode
:ensure t
:config
)
;; Haskell
(use-package haskell-mode
:ensure t
:config
)
(use-package flycheck-haskell
:ensure t
:config
)
(add-hook 'flycheck-mode-hook #'flycheck-haskell-setup)
;; Java
;; lsp-install-server
;; jdtls
(use-package lsp-java
:ensure t
:config
(global-set-key (kbd "C-.") 'lsp-execute-code-action)
)
(global-set-key (kbd "<f9>") 'dap-breakpoint-toggle)
(global-set-key (kbd "<f10>") 'dap-next)
(global-set-key (kbd "<f11>") 'dap-step-in)
(global-set-key (kbd "<f12>") 'lsp-jt-browser)
(global-set-key (kbd "<C-f12>") 'dap-stop-thread)
(global-set-key (kbd "<C-?>") 'comment-or-uncomment-region)
(add-hook 'dap-stopped-hook
(lambda (arg) (call-interactively #'dap-hydra)))
(setq dap-auto-configure-features '(sessions locals controls tooltip))
(require 'lsp-java)
(add-hook 'java-mode-hook #'lsp)
(require 'dap-java)
;; Treemacs
(use-package treemacs
:ensure t
:defer t
:init
(with-eval-after-load 'winum
(define-key winum-keymap (kbd "M-0") #'treemacs-select-window))
:config
(progn
(setq treemacs-collapse-dirs (if treemacs-python-executable 3 0)
treemacs-deferred-git-apply-delay 0.5
treemacs-directory-name-transformer #'identity
treemacs-display-in-side-window t
treemacs-eldoc-display t
treemacs-file-event-delay 5000
treemacs-file-extension-regex treemacs-last-period-regex-value
treemacs-file-follow-delay 0.2
treemacs-file-name-transformer #'identity
treemacs-follow-after-init t
treemacs-git-command-pipe ""
treemacs-goto-tag-strategy 'refetch-index
treemacs-indentation 2
treemacs-indentation-string " "
treemacs-is-never-other-window nil
treemacs-max-git-entries 5000
treemacs-missing-project-action 'ask
treemacs-move-forward-on-expand nil
treemacs-no-png-images nil
treemacs-no-delete-other-windows t
treemacs-project-follow-cleanup nil
treemacs-persist-file (expand-file-name ".cache/treemacs-persist" user-emacs-directory)
treemacs-position 'left
treemacs-read-string-input 'from-child-frame
treemacs-recenter-distance 0.1
treemacs-recenter-after-file-follow nil
treemacs-recenter-after-tag-follow nil
treemacs-recenter-after-project-jump 'always
treemacs-recenter-after-project-expand 'on-distance
treemacs-show-cursor nil
treemacs-show-hidden-files t
treemacs-silent-filewatch nil
treemacs-silent-refresh nil
treemacs-sorting 'alphabetic-asc
treemacs-space-between-root-nodes t
treemacs-tag-follow-cleanup t
treemacs-tag-follow-delay 1.5
treemacs-user-mode-line-format nil
treemacs-user-header-line-format nil
treemacs-width 35
treemacs-workspace-switch-cleanup nil)
;; The default width and height of the icons is 22 pixels. If you are
;; using a Hi-DPI display, uncomment this to double the icon size.
;;(treemacs-resize-icons 44)
(treemacs-follow-mode t)
(treemacs-filewatch-mode t)
(treemacs-fringe-indicator-mode 'always)
(pcase (cons (not (null (executable-find "git")))
(not (null treemacs-python-executable)))
(`(t . t)
(treemacs-git-mode 'deferred))
(`(t . _)
(treemacs-git-mode 'simple))))
:bind
(:map global-map
("M-0" . treemacs-select-window)
("C-x t 1" . treemacs-delete-other-windows)
("C-x t t" . treemacs)
("C-x t B" . treemacs-bookmark)
("C-x t C-t" . treemacs-find-file)
("C-x t M-t" . treemacs-find-tag)))
(use-package treemacs-evil
:after treemacs evil
:ensure t)
(use-package treemacs-projectile
:after treemacs projectile
:ensure t)
(use-package treemacs-icons-dired
:after treemacs dired
:ensure t
:config (treemacs-icons-dired-mode))
(use-package treemacs-magit
:after treemacs magit
:ensure t)
(use-package treemacs-persp ;;treemacs-perspective if you use perspective.el vs. persp-mode
:after treemacs persp-mode ;;or perspective vs. persp-mode
:ensure t
:config (treemacs-set-scope-type 'Perspectives))
;; Python
(setq python-shell-interpreter "python3")
(setq py-python-command "/usr/bin/python3")
(use-package company-jedi
:ensure t
:config
)
(defun my/python-mode-hook ()
(add-to-list 'company-backends 'company-jedi))
(add-hook 'python-mode-hook 'my/python-mode-hook)
(setq-default ebuild-mode-update-copyright nil)
(defun infer-indentation-style () (interactive)
(let ((space-count (how-many "^ " (point-min) (point-max)))
(tab-count (how-many "^\t" (point-min) (point-max))))
(if (> space-count tab-count) (setq indent-tabs-mode nil))
(if (> tab-count space-count) (setq indent-tabs-mode t))))
(add-hook 'python-mode-hook
(lambda ()
(if indent-tabs-mode
(setq tab-width 4
python-indent-offset 4))))
(add-hook 'python-mode-hook 'infer-indentation-style)
;; python-black
(use-package python-black
:demand t
:after python)
;;; --- Look & Feel ---
;; Org-bullets
(use-package org-bullets
:ensure t
:config
:after org
:hook (org-mode . org-bullets-mode)
:custom
(org-bullets-bullet-list '("" "" "" "" "" "" "")))
;; Helm
(use-package helm
:ensure t
:config
)
(add-hook 'helm-minibuffer-set-up-hook
'helm-hide-minibuffer-maybe)
(setq helm-autoresize-max-height 0)
(setq helm-autoresize-min-height 20)
(helm-autoresize-mode 1)
(helm-mode 1)
;; Disable scroll bar
;; no toolbar:
(if (display-graphic-p)
(progn
(tool-bar-mode -1)
(scroll-bar-mode -1)))
;; Copy
(setq select-active-regions nil)
(setq mouse-drag-copy-region t)
(global-set-key [mouse-2] 'mouse-yank-at-click)
;; Zoom in/out.
(global-set-key (kbd "M-+") 'text-scale-increase)
(global-set-key (kbd "M--") 'text-scale-decrease)
;; line numbers:
(global-display-line-numbers-mode 1)
;; scrolling:
(setq scroll-conservatively 100)
;; Whitespaces
(global-whitespace-mode 1)
(setq whitespace-display-mappings '((space-mark 32 [])))
(set-face-attribute 'whitespace-space nil :background nil :foreground "gray30")
(setq whitespace-style (quote (face tabs spaces trailing space-before-tab newline indentation empty space-after-tab space-mark tab-mark)))
(add-hook 'before-save-hook (lambda () (delete-trailing-whitespace)))
;; no "bell" (audible notification):
(setq ring-bell-function 'ignore)
;; auto reloading (reverting) buffers
(global-auto-revert-mode 1)
;; disable lock files:
(setq create-lockfiles nil)
;; disable autosave:
(setq auto-save-default nil)
;; disable backups:
(setq make-backup-files nil)
;; Pass "y or n" instead of "yes or no"
(defalias 'yes-or-no-p 'y-or-n-p)
;; Highlight parens
(show-paren-mode 1)
;; Candy
(global-prettify-symbols-mode 1)
;; Modeline
(column-number-mode 1)
(size-indication-mode 1)
;; Horizontal splitting
(defun split-and-follow-horizontally ()
(interactive)
(split-window-below)
(balance-windows)
(other-window 1)
)
(global-set-key (kbd "C-x 2") 'split-and-follow-horizontally)
;; Vertical splitting
(defun split-and-follow-vertically ()
(interactive)
(split-window-right)
(balance-windows)
(other-window 1)
)
(global-set-key (kbd "C-x 3") 'split-and-follow-vertically)
;; Kill & remove split
(defun kill-and-remove-split ()
"Kill and remove split."
(interactive)
(kill-buffer)
(delete-window)
(balance-windows)
(other-window 1)
)
(global-set-key (kbd "C-x x") 'kill-and-remove-split)
(global-set-key (kbd "<escape>") 'keyboard-escape-quit)