;; (setq max-lisp-eval-depth 20200)
;; (setq max-specpdl-size 3000)
(use-package exec-path-from-shell
:ensure t)
(when (memq window-system '(mac ns x))
(exec-path-from-shell-initialize))
(fset 'yes-or-no-p 'y-or-n-p)
;; (setq scroll-step 1)
(setq mac-option-modifier 'super)
(setq mac-command-modifier 'meta)
(setq make-backup-files nil) ; stop creating backup~ files
(setq auto-save-default nil) ; stop creating #autosave# files
(setq create-lockfiles nil)
(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)
(add-to-list 'comint-output-filter-functions 'ansi-color-process-output)
;; (defun paste-from-x-clipboard()
;; (interactive)
;; (shell-command
;; (cond
;; ;; (*cygwin* "getclip")
;; ;; (*is-a-mac* "pbpaste")
;; (t "xsel -ob"))
;; 1))
;; (defun my/paste-in-minibuffer ()
;; (local-set-key (kbd "M-v") 'paste-from-x-clipboard))
;; (add-hook 'minibuffer-setup-hook 'my/paste-in-minibuffer)
(setq auto-window-vscroll nil)
(setq scroll-preserve-screen-position 1)
(cua-mode t)
(desktop-save-mode 1)
(auto-save-visited-mode 1)
;; (use-package real-auto-save
;; :ensure t
;; :config
;; (progn
;; (add-hook 'prog-mode-hook 'real-auto-save-mode)
;; (add-hook 'org-mode-hook 'real-auto-save-mode))
;; (setq real-auto-save-interval 20))
(global-font-lock-mode 1)
(defvar ha/fixed-font-family
(cond ((x-list-fonts "PragmataPro Liga") "PragmataPro Liga")
((x-list-fonts "Menlo") "Menlo")
((x-list-fonts "Source Code Pro") "Source Code Pro")
((x-list-fonts "Anonymous Pro") "Anonymous Pro")
((x-list-fonts "M+ 1mn") "M+ 1mn"))
"My fixed width font based on what is installed, `nil' if not defined.")
(defvar ha/variable-font-tuple
(cond ((x-list-fonts "PragmataPro Liga") '(:font "PragmataPro Liga"))
((x-list-fonts "Menlo") '(:font "Menlo"))
((x-list-fonts "Lucida Grande") '(:font "Lucida Grande"))
((x-list-fonts "Verdana") '(:font "Verdana"))
((x-family-fonts "Sans Serif") '(:family "Sans Serif"))
(nil (warn "Cannot find a Sans Serif Font. Install Source Sans Pro.")))
"My variable width font available to org-mode files and whatnot.")
(setq prettify-symbols-unprettify-at-point 'right-edge)
(defconst pragmatapro-prettify-symbols-alist
(mapcar (lambda (s)
`(,(car s)
.
,(vconcat
(apply 'vconcat
(make-list
(- (length (car s)) 1)
(vector (decode-char 'ucs #X0020) '(Br . Bl))))
(vector (decode-char 'ucs (cadr s))))))
'(
;; ("[ERROR]" #XE380)
;; ("[DEBUG]" #XE381)
;; ("[INFO]" #XE382)
;; ("[WARN]" #XE383)
;; ("[WARNING]" #XE384)
;; ("[ERR]" #XE385)
;; ("[FATAL]" #XE386)
;; ("[TRACE]" #XE387)
;; ("[FIXME]" #XE388)
;; ("[TODO]" #XE389)
;; ("[BUG]" #XE38A)
;; ("[NOTE]" #XE38B)
;; ("[HACK]" #XE38C)
;; ("[MARK]" #XE38D)
;; ("!!" #XE900)
;; ("!=" #XE901)
;; ("!==" #XE902)
;; ("!!!" #XE903)
;; ("!≡" #XE904)
;; ("!≡≡" #XE905)
;; ("!>" #XE906)
;; ("!=<" #XE907)
;; ("#(" #XE920)
;; ("#_" #XE921)
;; ("#{" #XE922)
;; ("#?" #XE923)
;; ("#>" #XE924)
;; ("##" #XE925)
;; ("#_(" #XE926)
;; ("%=" #XE930)
;; ("%>" #XE931)
;; ("%>%" #XE932)
;; ("%<%" #XE933)
;; ("&%" #XE940)
;; ("&&" #XE941)
;; ("&*" #XE942)
;; ("&+" #XE943)
;; ("&-" #XE944)
;; ("&/" #XE945)
;; ("&=" #XE946)
;; ("&&&" #XE947)
;; ("&>" #XE948)
;; ("$>" #XE955)
;; ("***" #XE960)
;; ("*=" #XE961)
;; ("*/" #XE962)
;; ("*>" #XE963)
;; ("++" #XE970)
;; ("+++" #XE971)
;; ("+=" #XE972)
;; ("+>" #XE973)
;; ("++=" #XE974)
;; ("--" #XE980)
;; ("-<" #XE981)
;; ("-<<" #XE982)
;; ("-=" #XE983)
;; ("->" #XE984)
;; ("->>" #XE985)
;; ("---" #XE986)
;; ("-->" #XE987)
;; ("-+-" #XE988)
;; ("-\\/" #XE989)
;; ("-|>" #XE98A)
;; ("-<|" #XE98B)
;; (".." #XE990)
;; ("..." #XE991)
;; ("..<" #XE992)
;; (".>" #XE993)
;; (".~" #XE994)
;; (".=" #XE995)
;; ("/*" #XE9A0)
;; ("//" #XE9A1)
;; ("/>" #XE9A2)
;; ("/=" #XE9A3)
;; ("/==" #XE9A4)
;; ("///" #XE9A5)
;; ("/**" #XE9A6)
;; (":::" #XE9AF)
;; ("::" #XE9B0)
;; (":=" #XE9B1)
;; (":≡" #XE9B2)
;; (":>" #XE9B3)
;; (":=>" #XE9B4)
;; (":(" #XE9B5)
;; (":-(" #XE9B6)
;; (":)" #XE9B7)
;; (":-)" #XE9B8)
;; (":/" #XE9B9)
;; (":\\" #XE9BA)
;; (":3" #XE9BB)
;; (":D" #XE9BC)
;; (":P" #XE9BD)
;; (":>:" #XE9BE)
;; (":<:" #XE9BF)
;; ("<$>" #XE9C0)
;; ("<*" #XE9C1)
;; ("<*>" #XE9C2)
;; ("<+>" #XE9C3)
;; ("<-" #XE9C4)
;; ("<<" #XE9C5)
;; ("<<<" #XE9C6)
;; ("<<=" #XE9C7)
;; ("<=" #XE9C8)
;; ("<=>" #XE9C9)
;; ("<>" #XE9CA)
;; ("<|>" #XE9CB)
;; ("<<-" #XE9CC)
;; ("<|" #XE9CD)
;; ("<=<" #XE9CE)
;; ("<~" #XE9CF)
;; ("<~~" #XE9D0)
;; ("<<~" #XE9D1)
;; ("<$" #XE9D2)
;; ("<+" #XE9D3)
;; ("<!>" #XE9D4)
;; ("<@>" #XE9D5)
;; ("<#>" #XE9D6)
;; ("<%>" #XE9D7)
;; ("<^>" #XE9D8)
;; ("<&>" #XE9D9)
;; ("<?>" #XE9DA)
;; ("<.>" #XE9DB)
;; ("</>" #XE9DC)
;; ("<\\>" #XE9DD)
;; ("<\">" #XE9DE)
;; ("<:>" #XE9DF)
;; ("<~>" #XE9E0)
;; ("<**>" #XE9E1)
;; ("<<^" #XE9E2)
;; ("<!" #XE9E3)
;; ("<@" #XE9E4)
;; ("<#" #XE9E5)
;; ("<%" #XE9E6)
;; ("<^" #XE9E7)
;; ("<&" #XE9E8)
;; ("<?" #XE9E9)
;; ("<." #XE9EA)
;; ("</" #XE9EB)
;; ("<\\" #XE9EC)
;; ("<\"" #XE9ED)
;; ("<:" #XE9EE)
;; ("<->" #XE9EF)
;; ("<!--" #XE9F0)
;; ("<--" #XE9F1)
;; ("<~<" #XE9F2)
;; ("<==>" #XE9F3)
;; ("<|-" #XE9F4)
;; ("<<|" #XE9F5)
;; ("<-<" #XE9F7)
;; ("<-->" #XE9F8)
;; ("<<==" #XE9F9)
;; ("<==" #XE9FA)
;; ("==<" #XEA00)
;; ("==" #XEA01)
;; ("===" #XEA02)
;; ("==>" #XEA03)
("=>" #XE890)
;; ("=~" #XEA05)
;; ("=>>" #XEA06)
;; ("=/=" #XEA07)
;; ("=~=" #XEA08)
;; ("==>>" #XEA09)
;; ("≡≡" #XEA10)
;; ("≡≡≡" #XEA11)
;; ("≡:≡" #XEA12)
;; (">-" #XEA20)
;; (">=" #XEA21)
;; (">>" #XEA22)
;; (">>-" #XEA23)
;; (">==" #XEA24)
;; (">>>" #XEA25)
;; (">=>" #XEA26)
;; (">>^" #XEA27)
;; (">>|" #XEA28)
;; (">!=" #XEA29)
;; (">->" #XEA2A)
;; ("??" #XEA40)
;; ("?~" #XEA41)
;; ("?=" #XEA42)
;; ("?>" #XEA43)
;; ("???" #XEA44)
;; ("?." #XEA45)
;; ("^=" #XEA48)
;; ("^." #XEA49)
;; ("^?" #XEA4A)
;; ("^.." #XEA4B)
;; ("^<<" #XEA4C)
;; ("^>>" #XEA4D)
;; ("^>" #XEA4E)
;; ("\\\\" #XEA50)
;; ("\\>" #XEA51)
;; ("\\/-" #XEA52)
;; ("@>" #XEA57)
;; ("|=" #XEA60)
;; ("||" #XEA61)
;; ("|>" #XEA62)
;; ("|||" #XEA63)
;; ("|+|" #XEA64)
;; ("|->" #XEA65)
;; ("|-->" #XEA66)
;; ("|=>" #XEA67)
;; ("|==>" #XEA68)
;; ("|>-" #XEA69)
;; ("|<<" #XEA6A)
;; ("||>" #XEA6B)
;; ("|>>" #XEA6C)
;; ("|-" #XEA6D)
;; ("||-" #XEA6E)
;; ("~=" #XEA70)
;; ("~>" #XEA71)
;; ("~~>" #XEA72)
;; ("~>>" #XEA73)
;; ("[[" #XEA80)
;; ("]]" #XEA81)
;; ("\">" #XEA90)
;; ("_|_" #XEA97)
)))
(defun add-pragmatapro-prettify-symbols-alist ()
(dolist (alias pragmatapro-prettify-symbols-alist)
(push alias prettify-symbols-alist)))
(toggle-scroll-bar -1)
(tool-bar-mode -1)
(menu-bar-mode -1)
(set-frame-parameter nil 'fullscreen 'fullboth)
;; hide all
(defun my-hide-all()
;; (interactive)
(hs-minor-mode))
;; (hs-hide-all))
(add-hook 'prog-mode-hook 'my-hide-all)
(setq default-frame-alist '((cursor-color . "#E552F7")))
(global-hl-line-mode -1)
(use-package color-theme-sanityinc-tomorrow
:ensure t)
(color-theme-sanityinc-tomorrow--define-theme night)
;; (use-package color-theme
;; :ensure t
;; :init (require 'color-theme)
;; :config (use-package color-theme-sanityinc-tomorrow
;; :ensure t))
(use-package git-gutter-fringe
:ensure t
:diminish git-gutter-mode
:init (setq git-gutter-fr:side 'left-fringe)
:config (global-git-gutter-mode t))
(setq-default left-fringe-width 1)
;; (setq-default right-fringe-width 3)
(set-background-color "#121212")
(fringe-helper-define 'git-gutter-fr:added nil
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX")
(fringe-helper-define 'git-gutter-fr:deleted nil
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX")
(fringe-helper-define 'git-gutter-fr:modified nil
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX"
"XXXXXXXX")
(use-package diff-hl
:ensure t
:init
:config
(setq diff-hl-side 'right)
(add-hook 'dired-mode-hook 'diff-hl-dired-mode))
(use-package minions
:ensure t
:config (minions-mode 1))
;; (set-face-background 'vertical-border "#1d1f21")
;; (set-face-foreground 'vertical-border (face-background 'vertical-border))
;; (setq-default left-margin-width 10 right-margin-width 8) ; Define new widths
;; (setq-default left-margin-width 1 right-margin-width 1)
;; (set-window-buffer nil (current-buffer)) ; Use them now.
;; (set-window-margins (selected-window) nil nil)
(set-fringe-mode 0)
(setq mode-line-format t)
(set-default 'truncate-lines t)
(set-default 'word-wrap t)
(use-package rainbow-delimiters
:ensure t
:config
(add-hook 'prog-mode-hook 'rainbow-delimiters-mode))
(use-package editorconfig
:ensure t
:config
(editorconfig-mode 1))
(setq default-tab-width 2)
(show-paren-mode 2)
(use-package autopair
:ensure t
:diminish autopair-mode
:config
(progn
;; (add-hook 'rust-mode #'(lambda () (autopair-mode)))
;; (add-hook 'paredit-mode-hook #'make-turn-off-autopair-mode)
;;(autopair-global-mode 1)
))
;; (autopair-global-mode)
(setq indent-tabs-mode nil)
(use-package tramp
:ensure t)
(use-package hyperbole :ensure t)
(when (require 'dired-sync nil t)
(define-key dired-mode-map (kbd "C-c s") 'dired-do-sync))
(setq dired-auto-revert-buffer t)
(setq dired-dwim-target t)
(setq dired-icon-mode nil)
(define-key dired-mode-map (kbd "n") nil)
;; (use-package dired-icon
;; :ensure t
;; :config
;; (progn (add-hook 'dired-mode-hook 'dired-icon-mode)))
(use-package ivy
:ensure t
:config
(progn
(with-eval-after-load 'ido)
(ido-mode -1)
(ivy-mode 1)))
(use-package ag
:ensure t)
(use-package projectile
:ensure t
:config (projectile-global-mode)
(setq projectile-enable-config t)
(setq projectile-completion-system 'ivy))
(use-package ace-jump-mode
:ensure
:bind ("C-c SPC" . ace-jump-mode))
;; disabl in help mode
(global-unset-key (kbd "C-h"))
(global-set-key (kbd "C-h") 'evil-window-left)
(global-unset-key (kbd "C-l"))
(global-set-key (kbd "C-l") 'evil-window-right)
(use-package evil
:ensure t
:init
(progn
(setq evil-default-cursor t)
(use-package evil-leader
:ensure t
:init (global-evil-leader-mode t)
:config
(progn
(setq evil-leader/in-all-states t)
(setq evil-leader/leader "SPC")
(evil-leader/set-key
"u" 'switch-to-buffer
;; "u" 'browse-url
"h" 'ace-jump-char-mode
"s" 'find-file
"b" 'previous-buffer
"mm" 'ibuffer
"m/" 'ibuffer-filter-by-filename
"ma" 'ibuffer-filter-disable
"f" 'projectile-find-file
"ts" 'projectile-ag
"rb" 'revert-buffer
"tr" 'google-translate-query-translate
"gs" 'magit-status
"gn" 'git-gutter:next-hunk
"gp" 'git-gutter:previous-hunk
"ga" 'smerge-keep-all
)))
(evil-mode))
(use-package evil-surround
:ensure t
:config
(global-evil-surround-mode 1))
(use-package evil-commentary
:ensure t
:bind (:map evil-normal-state-map ("M-/" . evil-commentary)))
;; ("gc" . evil-commentary)))
:config
(progn
;; (define-key evil-insert-state-map (kbd "j") 'bw-evil-escape-if-next-char-is-j)
(setq evil-search-module 'evil-search)
(setq evil-shift-width 2)
(evil-add-to-alist
'evil-surround-pairs-alist
?\( '("(" . ")")
?\[ '("[" . "]")
?\{ '("{" . "}")
?\) '("( " . " )")
?\] '("[ " . " ]")
?\} '("{ " . " }"))))
(use-package evil-mc
:ensure t
;; :commands (evil-mc-make-cursor-here evil-mc-pause-cursors evil-mc-undo-all-cursors)
;; :init (global-evil-mc-mode t)
;; :bind (:map evil-mc-key-map
;; ("M-p" . nil)
;; )
:config
(global-evil-mc-mode +1)
)
;; (define-key evil-mc-key-map (kbd "M-p") nil)
(with-eval-after-load 'evil
(defalias #'forward-evil-word #'forward-evil-symbol))
(setq evil-emacs-state-modes (delq 'ibuffer-mode evil-emacs-state-modes))
(define-key evil-normal-state-map (kbd "M-.") nil)
(define-key evil-insert-state-map (kbd "M-.") nil)
(define-key evil-normal-state-map (kbd "C-h") 'evil-window-left)
(define-key evil-normal-state-map (kbd "C-j") 'evil-window-down)
(define-key evil-normal-state-map (kbd "C-k") 'evil-window-up)
(define-key evil-normal-state-map (kbd "C-l") 'evil-window-right)
(define-key evil-normal-state-map (kbd "C-!") 'split-window-horizontally)
(define-key evil-normal-state-map (kbd "C-#") 'split-window-vertically)
(define-key evil-normal-state-map (kbd "C-@") 'other-frame)
;; (define-key evil-normal-state-map (kbd "C-/") 'next-multiframe-window)
(global-unset-key "\M-h")
(define-key evil-normal-state-map (kbd "M-h") 'previous-buffer)
(define-key evil-normal-state-map (kbd "&") (kbd "v%"))
;; (define-key evil-insert-state-map (kbd "TAB") 'tab-to-tab-stop)
(define-key evil-normal-state-map (kbd "TAB") 'hs-toggle-hiding)
(define-key evil-normal-state-map (kbd "C-n") 'evil-search-next)
(define-key evil-normal-state-map (kbd "M-v") 'evil-paste-before)
(define-key evil-insert-state-map (kbd "M-v") 'evil-paste-before)
(define-key evil-normal-state-map (kbd "M-s") 'save-buffer)
(define-key evil-insert-state-map (kbd "M-h") 'evil-normal-state)
(define-key dired-mode-map (kbd "n") 'evil-search-next)
(define-key evil-normal-state-map (kbd "{") 'scroll-down)
(define-key evil-normal-state-map (kbd "}") 'scroll-up)
;; (with-eval-after-load 'evil
;; (define-key evil-motion-state-map (kbd "RET") nil)
;; (define-key xref--xref-buffer-mode-map (kbd "RET") 'xref-goto-xref)
;; )
;; swap lines
;; (defun move-line-up ()
;; "Move up the current line."
;; (interactive)
;; (transpose-lines 1)
;; (forward-line -2)
;; (indent-according-to-mode))
;; (defun move-line-down ()
;; "Move down the current line."
;; (interactive)
;; (forward-line 1)
;; (transpose-lines 1)
;; (forward-line -1)
;; (indent-according-to-mode))
;; (global-unset-key (kbd "M-n"))
;; (global-unset-key (kbd "M-p"))
;; (define-key evil-normal-state-map (kbd "M-n") nil)
;; (define-key evil-normal-state-map (kbd "M-p") nil)
;; (define-key evil-normal-state-map (kbd "M-n") 'move-line-down)
;; (define-key evil-normal-state-map (kbd "M-p") 'move-line-up)
(setq ibuffer-saved-filter-groups
(quote (("default"
("dired" (mode . dired-mode))
("TS" (mode . typescript-mode))
("planner" (or
(name . "^\\*Calendar\\*$")
(name . "^diary$")
(mode . muse-mode)))
("emacs" (or
(name . "^\\*scratch\\*$")
(name . "^\\*Messages\\*$")))
("cider" (name . "^\\*cider"))
("lsp" (name . "^\\*EGLOT"))
("gnus" (or
(mode . message-mode)
(mode . bbdb-mode)
(mode . mail-mode)
(mode . gnus-group-mode)
(mode . gnus-summary-mode)
(mode . gnus-article-mode)
(name . "^\\.bbdb$")
(name . "^\\.newsrc-dribble")))))))
(add-hook 'ibuffer-mode-hook
(lambda ()
(ibuffer-switch-to-saved-filter-groups "default")))
(require 'ob)
(require 'ob-clojure)
(use-package ob-http
:ensure t)
(org-babel-do-load-languages 'org-babel-load-languages
'(
(shell . t)
(js . t)
(clojure . t)
(http . t)))
(setq org-confirm-babel-evaluate t)
(use-package org-bullets
:ensure t
:config (add-hook 'org-mode-hook 'org-bullets-mode))
(use-package ob-async
:ensure t)
(use-package ob-mongo
:ensure t)
(setq org-src-fontify-natively t)
(setq org-hide-emphasis-markers t)
(add-hook 'org-mode-hook '(lambda ()
(visual-line-mode t)))
(defun org-src-color-blocks-light ()
"Colors the block headers and footers to make them stand out more for lighter themes"
(interactive)
(custom-set-faces
'(org-block-begin-line
((t (:underline "#A7A6AA" :foreground "#008ED1" :background "#EAEAFF"))))
'(org-block-background
((t (:background "#FFFFEA"))))
'(org-block
((t (:background "#FFFFEA"))))
'(org-block-end-line
((t (:overline "#A7A6AA" :foreground "#008ED1" :background "#EAEAFF"))))))
(defun org-src-color-blocks-dark ()
"Colors the block headers and footers to make them stand out more for dark themes"
(interactive)
(custom-set-faces
'(org-block-begin-line
((t (:foreground "#008ED1" :background "#002E41"))))
'(org-block-background
((t (:background "#000000"))))
'(org-block
((t (:background "#000000"))))
'(org-block-end-line
((t (:foreground "#008ED1" :background "#002E41"))))))
;; -------- babel src
(with-eval-after-load 'org
(defvar-local rasmus/org-at-src-begin -1
"Variable that holds whether last position was a ")
(defvar rasmus/ob-header-symbol ?☰
"Symbol used for babel headers")
(defun rasmus/org-prettify-symbols ()
(mapc (apply-partially 'add-to-list 'prettify-symbols-alist)
(cl-reduce 'append
(mapcar (lambda (x) (list x (cons (upcase (car x)) (cdr x))))
`(("#+begin_src" . ?✎) ;; ➤ 🖝 ➟ ➤ ✎
("#+end_src" . ?□) ;; ⏹
("#+header:" . ,rasmus/ob-header-symbol)
("#+begin_quote" . ?»)
("#+end_quote" . ?«)))))
(turn-on-prettify-symbols-mode))
;; (add-hook 'post-command-hook 'rasmus/org-prettify-src t t))
(add-hook 'org-mode-hook #'rasmus/org-prettify-symbols))
(defun org-summary-todo (n-done n-not-done)
"Switch entry to DONE when all subentries are done, to TODO otherwise."
(let (org-log-done org-log-states) ; turn off logging
(org-todo (if (= n-not-done 0) "DONE" "TODO"))))
(add-hook 'org-after-todo-statistics-hook 'org-summary-todo)
(defun ha/change-theme (theme org-block-style)
"Changes the color scheme and reset the mode line."
(funcall theme)
(funcall org-block-style)
(let*
((ha/fixed-font-tuple (list :font ha/fixed-font-family))
(base-font-color (face-foreground 'default nil 'default))
(background-color (face-background 'default nil 'default))
(primary-color (face-foreground 'mode-line nil))
(secondary-color (face-background 'secondary-selection nil 'region))
(base-height (face-attribute 'default :height))
(headline `(:inherit default :weight bold :foreground ,base-font-color)))
(when ha/fixed-font-family
(set-frame-font ha/fixed-font-family)
(set-face-attribute 'default nil :font ha/fixed-font-family :height 130)
(set-face-font 'default ha/fixed-font-family))
;; Noticeable?
;; (set-face-attribute 'region nil :background "#ffff50" :foreground "black")
;; Subtle?
(set-face-attribute 'region nil :background "#0000bb" :foreground 'unspecified)
;; (set-face-background 'vertical-border "#1d1f21")
;; (set-face-foreground 'vertical-border (face-background 'vertical-border))
(custom-theme-set-faces 'ha/org-theme
`(org-agenda-structure ((t (:inherit default :height 2.0 :underline nil))))
`(org-verbatim ((t (:inherit 'fixed-pitched :foreground "#aef"))))
`(org-table ((t (:inherit 'fixed-pitched))))
`(org-block ((t (:inherit 'fixed-pitched))))
`(org-block-background ((t (:inherit 'fixed-pitched))))
`(org-block-begin-line ((t (:inherit 'fixed-pitched))))
`(org-block-end-line ((t (:inherit 'fixed-pitched))))
`(org-document-title ((t (,@headline ,@ha/variable-font-tuple :height 1.5 :underline nil)))))))
;; (custom-theme-set-faces 'ha/org-theme
;; `(org-agenda-structure ((t (:inherit default :height 2.0 :underline nil))))
;; `(org-verbatim ((t (:inherit 'fixed-pitched :foreground "#aef"))))
;; `(org-table ((t (:inherit 'fixed-pitched))))
;; `(org-block ((t (:inherit 'fixed-pitched))))
;; `(org-block-background ((t (:inherit 'fixed-pitched))))
;; `(org-block-begin-line ((t (:inherit 'fixed-pitched))))
;; `(org-block-end-line ((t (:inherit 'fixed-pitched)))))))
;; `(org-level-8 ((t (,@headline ,@ha/variable-font-tuple))))
;; `(org-level-7 ((t (,@headline ,@ha/variable-font-tuple))))
;; `(org-level-6 ((t (,@headline ,@ha/variable-font-tuple))))
;; `(org-level-5 ((t (,@headline ,@ha/variable-font-tuple))))
;; `(org-level-4 ((t (,@headline ,@ha/variable-font-tuple
;; :height 1.1))))
;; `(org-level-3 ((t (,@headline ,@ha/variable-font-tuple
;; :height 1.1))))
;; `(org-level-2 ((t (,@headline ,@ha/variable-font-tuple
;; :height 1.1))))
;; `(org-level-1 ((t (,@headline ,@ha/variable-font-tuple
;; :height 2.1))))
;; `(org-document-title ((t (,@headline ,@ha/variable-font-tuple :height 1.5 :underline nil)))))
(deftheme ha/org-theme "Sub-theme to beautify org mode")
(ha/change-theme 'color-theme-sanityinc-tomorrow-night 'org-src-color-blocks-dark)
;; (custom-set-faces
;; '(mode-line ((t (:background "blue4" :foreground "gray90"))))
;; '(mode-line-inactive ((t (:background "#404045" :foreground "gray60"))))
;; '(mode-line-buffer-id ((t ( :foreground "gold1" :weight ultra-bold))))
;; '(which-func ((t ( :foreground "orange"))))
;; '(show-paren-match ((t (:background "default" :foreground "#afa" :weight ultra-bold))))
;; '(show-paren-mismatch ((t (:background "default" :foreground "#cc6666" :weight ultra-bold)))))
;; (set-face-attribute 'region nil :background "#00a")
(add-to-list 'org-emphasis-alist
'("*" (:foreground "#E552F7")
))
(use-package magit
:ensure t)
(use-package evil-magit
:ensure t)
(use-package flycheck
:ensure t)
(use-package company
:ensure t
:config
(progn
;; (setq company-auto-complete nil)
(setq company-idle-delay 1)))
(with-eval-after-load 'company
(define-key company-active-map (kbd "M-n") nil)
(define-key company-active-map (kbd "M-p") nil)
(define-key company-active-map (kbd "C-n") #'company-select-next)
(define-key company-active-map (kbd "C-p") #'company-select-previous))
;; (define-key company-active-map (kbd "C--") #'company-complete-common))
;; (define-key company-active-map [tab] 'company-complete-common-or-cycle)
;; (define-key company-active-map (kbd "TAB") 'company-complete-common-or-cycle))
;; (define-key company-active-map [tab] 'company-complete-common)
;; (define-key company-active-map (kbd "TAB") 'company-complete-common)
;; (define-key company-active-map (kbd "M--") 'company-complete-common)
;; (setq company-auto-complete 'company-explicit-action-p)
(defun in-template-file ()
(let* ((filename (buffer-file-name))
(extension (car (last (split-string filename "\\.")))))
(string= "html" extension)))
(defun jump-to-file-by-extension (extension)
(let* ((filename (buffer-file-name))
(file-components (append (butlast (split-string filename
"\\."))
(list extension))))
(find-file (mapconcat 'identity file-components "."))))
;;; Assumes that Header and Source file are in same directory
(defun objc-jump-between-header-source ()
(interactive)
(if (in-template-file)
(jump-to-file-by-extension "ts")
(jump-to-file-by-extension "html")))
;; (defun objc-mode-customizations ()
;; (define-key objc-mode-map (kbd "C-c t") 'objc-jump-between-header-source))
(eval-after-load "mhtml-mode"
'(progn
(define-key html-mode-map (kbd "C-c c") 'objc-jump-between-header-source)
))
(eval-after-load "typescript-mode"
'(progn
(define-key typescript-mode-map (kbd "C-c c") 'objc-jump-between-header-source)
(evil-leader/set-key "ee" 'lsp-execute-code-action)
(evil-leader/set-key "ef" 'lsp-find-references)
(evil-leader/set-key "er" 'lsp-ui-flycheck-list)
))
;; (add-hook 'objc-mode-hook 'objc-mode-customizations)
;; (use-package js2-mode
;; :ensure t
;; :mode "\\.js\\'")
;; (defun setup-tide-mode ()
;; "Set up Tide mode."
;; (interactive)
;; (tide-setup)
;; (flycheck-mode +1)
;; (setq flycheck-check-syntax-automatically '(save-mode-enabled))
;; (eldoc-mode +1)
;; (tide-hl-identifier-mode +1)
;; (company-mode +1)
;; ;; (prettier-js-mode)
;; (electric-pair-mode)
;; (hs-minor-mode))
;; (use-package tide
;; :ensure t
;; :config
;; (progn
;; (setq company-tooltip-align-annotations t)
;; (add-hook 'typescript-mode-hook #'setup-tide-mode)
;; (add-hook 'js2-mode-hook #'setup-tide-mode)
;; ;; (evil-leader/set-key "." 'tide-jump-to-definition)
;; ;; (evil-leader/set-key "," 'tide-jump-back)
;; )
;; )
;; (add-hook 'js2-mode-hook #'setup-tide-mode)
;; (setq js2-mode-show-parse-errors nil
;; js2-mode-show-strict-warnings nil)
;; (use-package indium
;; :ensure t)
;; (add-hook 'tide-mode-hook
;; (progn
;; (evil-leader/set-key "." 'tide-jump-to-definition)
;; ))
;; (add-hook 'js2-mode-hook #'setup-tide-mode)
;; (setq js2-mode-show-parse-errors nil
;; js2-mode-show-strict-warnings nil)
(use-package lsp-mode
:init
(setq lsp-ui-doc-enable nil)
:hook (
(mhtml-mode . lsp)
(html-mode . lsp)
(typescript-mode . lsp)
(before-save . lsp-organize-imports))
:commands lsp)
;; :config
;;(kbd "M-,") 'cider-pop-back)
;; (evil-leader/set-key "." 'lsp-find-definition)
(setq flymake-no-changes-timeout 2)
;; (use-package lsp-ui
;; :ensure t
;; :commands lsp-ui-mode
;; :config
;; (setq
;; lsp-ui-sideline-enable t
;; lsp-ui-doc-enable nil
;; lsp-ui-flycheck-enable t
;; lsp-ui-imenu-enable t
;; lsp-ui-sideline-ignore-duplicate t))
(use-package company-lsp
:ensure t
:commands company-lsp
:config
(push 'company-lsp company-backends)
(setq company-lsp-async t)
(setq company-lsp-cache-candidates 'auto))
(use-package lsp-treemacs :ensure t :commands lsp-treemacs-errors-list)
(setenv "TSSERVER_LOG_FILE" "/dev/null")
(setq lsp-clients-angular-language-server-command
'("node"
"/home/konstantin/.nvm/versions/node/v10.17.0/lib/node_modules/@angular/language-server"
"--ngProbeLocations"
"/home/konstantin/.nvm/versions/node/v10.17.0/lib/node_modules"
"--tsProbeLocations"
"/home/konstantin/.nvm/versions/node/v10.17.0/lib/node_modules"
"--stdio"))
(use-package prettier-js
:ensure t)
(eval-after-load 'typescript-mode
'(progn
(add-hook 'typescript-mode-hook #'add-node-modules-path)
(add-hook 'typescript-mode-hook #'prettier-js-mode)))
(add-hook 'json-mode-hook
(lambda ()
(prettier-js-mode -1)))
(setq gc-cons-threshold 100000000)
(setq read-process-output-max (* 1024 1024)) ;; 1mb
(setq lsp-prefer-capf t)
(setq lsp-idle-delay 0.500)
(setq flycheck-checker-error-threshold 5000)
;; (use-package lsp-mode
;; :ensure t
;; :init
;; (add-hook 'prog-major-mode #'lsp-prog-major-mode-enable)
;; ;; (lsp-ui-mode nil)
;; ;; (flymake-mode nil)
;; :config
;; ;; (setq lsp-response-timeout 25)
;; (setq lsp-auto-configure t)
;; (setq lsp-prefer-flymake nil)
;; )
;; (use-package lsp-ui
;; :ensure t
;; :init
;; (add-hook 'lsp-mode-hook 'lsp-ui-mode)
;; :config
;; ;; (setq lsp-ui-sideline-enable t
;; ;; lsp-ui-sideline-show-symbol t
;; ;; lsp-ui-sideline-show-hover t
;; ;; lsp-ui-sideline-show-code-actions t
;; ;; lsp-ui-sideline-update-mode 'point)
;; (setq lsp-ui-doc-enable nil
;; lsp-ui-peek-enable nil
;; lsp-ui-sideline-enable nil
;; lsp-ui-imenu-enable nil
;; ;; lsp-ui-flycheck-enable nil
;; ))
;; (require 'lsp)
;; (require 'lsp-clients)
;; (add-hook 'js-mode-hook #'lsp)
;; (defcustom lsp-on-change-idle-timer-timeout 0.2
;; "Timeout to send `textDocument/didChange' notification"
;; :group 'lsp-mode
;; :type 'number)
;; (defvar lsp-on-change-idle-timer-id nil)
;; (defun my-lsp-on-change-timer-advice (orig-func &rest args)
;; "Add an idle timer to lsp-on-change"
;; (-some->> lsp-on-change-idle-timer-id (cancel-timer))
;; (setq lsp-on-change-idle-timer-id
;; (run-with-idle-timer lsp-on-change-idle-timer-timeout nil
;; (lambda ()
;; (funcall orig-func (point-min) (point-max) (- (point-max) (point-min)))
;; (setq lsp-on-change-idle-timer-id nil)))))
;; (advice-add 'lsp-on-change :around 'my-lsp-on-change-timer-advice)
;; (add-hook 'typescript-mode-hook #'lsp)
;; (require 'lsp-javascript-typescript)
;; (use-package lsp-javascript-typescript
;; :ensure t
;; :init
;; (add-to-list 'js-mode-hook #'lsp-javascript-typescript-enable)
;; (add-to-list 'typescript-mode-hook #'lsp-javascript-typescript-enable))
(use-package eglot
:ensure t)
;; (add-hook 'js-mode-hook 'eglot-ensure)
;; (add-hook 'typescript-mode-hook 'eglot-ensure)
;; (add-hook 'tide 'eglot-ensure)
;; (use-package paredit
;; :ensure t
;; :init
;; (progn
;; (add-hook 'emacs-lisp-mode-hook 'paredit-mode)
;; (add-hook 'clojure-mode-hook 'paredit-mode)
;; (add-hook 'clojurescript-mode-hook 'paredit-mode)
;; (add-hook 'clojurec-mode-hook 'paredit-mode)
;; (add-hook 'cider-repl-mode-hook 'paredit-mode)))
(use-package parinfer
:ensure t
:init
(progn
(add-hook 'clojure-mode-hook 'parinfer-mode)
(add-hook 'clojurescript-mode-hook 'parinfer-mode)
(add-hook 'clojurec-mode-hook 'parinfer-mode)
(add-hook 'cider-repl-mode-hook 'parinfer-mode)))
(use-package paren-face
:ensure t
:init
;; (global-paren-face-mode)
:config
(add-hook 'clojure-mode-hook (lambda () (setq paren-face-regexp "#?[](){}[]"))))
(use-package clojure-mode
:mode (("\\.edn$" . clojure-mode))
:config
(progn
(setq clojure-align-forms-automatically t)
(define-clojure-indent
(defroutes 'defun)
(GET 2)
(POST 2)
(PUT 2)
(DELETE 2)
(HEAD 2)
(ANY 2)
(context 2)
(let-routes 1))
(define-clojure-indent
(form-to 1))
(define-clojure-indent
(match 1)
(are 2)
(checking 2)
(async 1))
(define-clojure-indent
(select 1)
(insert 1)
(update 1)
(delete 1))
(define-clojure-indent
(run* 1)
(fresh 1))
(define-clojure-indent
(extend-freeze 2)
(extend-thaw 1))
(define-clojure-indent
(go-loop 1))
(define-clojure-indent
(this-as 1)
(specify 1)
(specify! 1))
(define-clojure-indent
(s/fdef 1))
(setq clojure--prettify-symbols-alist
'(("fn" . ?λ)))
(defun toggle-nrepl-buffer ()
"Toggle the nREPL REPL on and off"
(interactive)
(if (string-match "cider-repl" (buffer-name (current-buffer)))
(delete-window)
(cider-switch-to-repl-buffer)))
(defun cider-save-and-refresh ()
(interactive)
(save-buffer)
(call-interactively 'cider-refresh))
(defun cider-eval-last-sexp-and-append ()
(interactive)
(cider-eval-last-sexp '(1)))
(evil-leader/set-key "eb" 'cider-eval-buffer)
(evil-leader/set-key "el" 'cider-eval-last-sexp)
(evil-leader/set-key "er" 'cider-eval-region)
(evil-leader/set-key "ee" 'cider-eval-defun-at-point)
;; (evil-leader/set-key "ea" 'cider-eval-last-sexp-and-append)
(evil-leader/set-key "ec" 'cider-eval-last-sexp-and-replace)
;; (evil-leader/set-key "ef" 'cider-eval-sexp-at-point)
(evil-leader/set-key "ea" 'cider-eval-buffer)
(evil-leader/set-key "et" 'cider-test-run-test)
(evil-leader/set-key "cd" 'cider-doc)
(evil-leader/set-key "cc" 'cider-connect)
(evil-leader/set-key "cj" 'cider-jack-in)
(evil-leader/set-key "cJ" 'cider-jack-in-clj&cljs)
(evil-leader/set-key "ct" 'cider-test-run-ns-tests)
(evil-leader/set-key "cT" 'cider-test-run-project-tests)
(evil-leader/set-key "cn" 'cider-repl-set-ns)
(evil-leader/set-key "cr" 'toggle-nrepl-buffer)
(evil-leader/set-key "cf" 'cider-save-and-refresh)
(evil-leader/set-key "ci" 'cider-inspect-last-result)
(global-set-key (kbd "s-r") 'cider-save-and-refresh)))
(use-package cider
:ensure t
:config
(progn
(setq nrepl-hide-special-buffers t)
(setq cider-popup-stacktraces-in-repl t)
(setq cider-repl-history-file "~/.emacs.d/nrepl-history")
(setq cider-repl-pop-to-buffer-on-connect nil)
(setq cider-auto-select-error-buffer nil)
(setq cider-prompt-save-file-on-load nil)
(setq cider-repl-display-help-banner nil)
(setq cider-repl-use-pretty-printing t)
(setq cider-refresh-before-fn "reloaded.repl/suspend")
(setq cider-refresh-after-fn "reloaded.repl/resume")
(setq cider-cljs-lein-repl "(do (reloaded.repl/go) (user/cljs-repl))")
(setq cider-prompt-for-symbol nil)
(evil-define-key '(insert normal) cider-mode-map
(kbd "M-.") 'cider-find-var
(kbd "M-,") 'cider-pop-back)))
(require 'ob)
(require 'ob-clojure)
(setq org-babel-clojure-backend 'cider)
(setq cljr-middleware-ignored-paths '("test\.*"))
(remove-hook 'text-mode-hook 'turn-on-auto-fill)
(add-hook 'clojure-mode-hook 'prettify-symbols-mode)
(add-hook 'clojure-mode-hook 'idle-highlight-mode)
(use-package pg
:ensure t)
(use-package rust-mode
:ensure t)
(use-package racer
:ensure t)
(add-hook 'rust-mode-hook #'racer-mode)
(add-hook 'racer-mode-hook #'eldoc-mode)
(add-hook 'racer-mode-hook #'company-mode)
(define-key rust-mode-map (kbd "TAB") #'company-indent-or-complete-common)
(setq company-tooltip-align-annotations t)
(setq rust-format-on-save t)
(add-hook
'rust-mode-hook
(lambda ()
(setq-local electric-pair-inhibit-predicate
`(lambda (c)
(if (char-equal c ?<) t (,electric-pair-inhibit-predicate c))))
(electric-pair-mode)))
(add-hook 'rust-mode-hook #'(lambda () (flycheck-mode)))
(use-package cargo
:ensure t)
(add-hook 'rust-mode-hook #'cargo-minor-mode)
(use-package flycheck-rust
:ensure t)
(add-hook 'rust-mode-hook #'flycheck-rust-setup)
(use-package google-translate
:ensure t
:config
(setq google-translate-default-source-language "en")
(setq google-translate-default-target-language "ru"))
(setq counsel-dash-browser-func 'eww-browse-url)
(setq alert-default-style 'mode-line)
(use-package pomidor
:ensure t
:config (setq pomidor-sound-tick nil
pomidor-sound-tack nil)
:hook (pomidor-mode . (lambda ()
(display-line-numbers-mode -1) ; Emacs 26.1+
(setq left-fringe-width 0 right-fringe-width 0)
(setq left-margin-width 2 right-margin-width 0)
;; force fringe update
(set-window-buffer nil (current-buffer)))))
(custom-set-variables
'(ediff-window-setup-function 'ediff-setup-windows-plain)
'(ediff-diff-options "-w")
'(ediff-split-window-function 'split-window-horizontally))
(setq ediff-combination-pattern '("" A "" B "" Ancestor))