{"id":21392713,"url":"https://github.com/in-line/emacs.d","last_synced_at":"2026-01-03T12:05:29.357Z","repository":{"id":114420627,"uuid":"186906598","full_name":"In-line/emacs.d","owner":"In-line","description":null,"archived":false,"fork":false,"pushed_at":"2019-07-11T21:35:42.000Z","size":43525,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-23T01:25:19.674Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Emacs Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/In-line.png","metadata":{"files":{"readme":"README.org","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-05-15T21:41:50.000Z","updated_at":"2019-05-25T20:32:18.000Z","dependencies_parsed_at":null,"dependency_job_id":"c1658893-2951-4cae-ab18-d7d39e49f7ae","html_url":"https://github.com/In-line/emacs.d","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/In-line%2Femacs.d","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/In-line%2Femacs.d/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/In-line%2Femacs.d/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/In-line%2Femacs.d/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/In-line","download_url":"https://codeload.github.com/In-line/emacs.d/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243878437,"owners_count":20362432,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-22T13:42:24.788Z","updated_at":"2026-01-03T12:05:24.325Z","avatar_url":"https://github.com/In-line.png","language":"Emacs Lisp","funding_links":[],"categories":[],"sub_categories":[],"readme":": Emacs Config\n#+INFOJS_OPT: view:t toc:t ltoc:t mouse:underline buttons:0 path:https://www.linux.org.ru/tango/combined.css\n#+HTML_HEAD: \u003clink rel=\"stylesheet\" type=\"text/css\" href=\"http://www.pirilampo.org/styles/readtheorg/css/htmlize.css\"/\u003e\n#+HTML_HEAD: \u003clink rel=\"stylesheet\" type=\"text/css\" href=\"http://www.pirilampo.org/styles/readtheorg/css/readtheorg.css\"/\u003e\n#+PROPERTY: header-args:emacs-lisp :tangle \"init.el\"\n* Foreword and keynotes\n** Use Use-package\n   I try to keep my configuration as declarative as possible, thanks to [[https://github.com/jwiegley/use-package][Use-package]] — it's very easy now.\n\n   - use-package is used for built-in packages or libraries too (without :ensure)\n\n   - each variable/face setting or each function call belongs to the one and only package which provides the symbol\n   To find out, where do they belong to, use /M-x describe-variable/, /M-x describe-face/ or /M-x describe-function/ accordingly.\n\n   - [[https://www.gnu.org/software/emacs/manual/html_node/elisp/Setting-Variables.html][setq]] is almost always means changing customizable variable, so can be rewritten with [[https://www.gnu.org/software/emacs/manual/html_node/elisp/Applying-Customizations.html][customize-set-variable]] and therefore with [[https://github.com/jwiegley/use-package#customizing-variables][:custom]] keyword, besides that some defcustoms [[https://www.gnu.org/software/emacs/manual/html_node/elisp/Variable-Definitions.html#Variable-Definitions][have get/set functions]], and just setq-ing them won't do the trick. It even supports inline comments so you can trace the changes.\n\n   At the same time I don't use [[http://www.gnu.org/software/emacs/manual/html_node/emacs/Easy-Customization.html][Customization]] interface, and my own [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Saving-Customizations.html][custom-file]] is =/dev/null=.\n   An example\n     #+BEGIN_SRC emacs-lisp :tangle no\n       ;; \"Don't show splash screen\"\n       (setq inhibit-startup-screen t)\n     #+END_SRC\n     becomes\n     #+BEGIN_SRC emacs-lisp :tangle no\n       :custom\n       (inhibit-startup-screen t \"Don't show splash screen\")\n     #+END_SRC\n\n   - [[https://www.gnu.org/software/emacs/manual/html_node/elisp/Face-Attributes.html][set-face-attribute]] and stuff like that → [[https://github.com/jwiegley/use-package#customizing-faces][:custom-face]]\n     #+BEGIN_SRC emacs-lisp :tangle no\n       (set-face-attributes 'Man-overstrike nil :inherit font-lock-type-face :bold t)\n     #+END_SRC\n     becomes\n     #+BEGIN_SRC emacs-lisp :tangle no\n       :custom-face\n       (Man-overstrike ((t (:inherit font-lock-type-face :bold t))))\n     #+END_SRC\n   - [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Hooks.html][add-hook]] → [[https://github.com/jwiegley/use-package#hooks][:hook]]\n   - [[https://www.gnu.org/software/emacs/manual/html_node/elisp/Changing-Key-Bindings.html][define-key]] → [[https://github.com/jwiegley/use-package#key-binding][:bind]]\n   - Don't forget to use [[https://github.com/jwiegley/use-package#loading-packages-in-sequence][:after]] if you need one package to be loaded after another.\n\n   All defuns should go to packages/libraries. [[https://github.com/quelpa/quelpa][Quelpa]] really helps with that — I can make a package from whatever source I want.\n\n** Fonts and colors.\n   Hardcoding these can break themes, so I use [[https://www.gnu.org/software/emacs/manual/html_node/elisp/Face-Attributes.html][:inherit]] for customizations.\n\n** Keybindings\n   - I try not to hardcode bindings starting with /C-x/, /C-c/ and /C-h/, which are [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Prefix-Keymaps.html#Prefix-Keymaps][bound]] to ~ctl-x-map~, ~mode-specific-map~ and ~help-map~ respectively. Not that I'm not happy with all these defaults (except /C-h/, see *simple* package below), but just in case if I want to rebind them to something else (/SPC/, /mouse-1/, break, gas or whatever), I can do it, at least for my own bindings — sadly, some plugins hardcode them (and that causes many issues for alternative bindings users), but I hope it will change someday.\n\n   - I use named prefix keymaps so they are visible in minibuffer while [[https://github.com/justbur/emacs-which-key][Which-key]] is active.\n\n   - I use [[https://www.gnu.org/software/emacs/manual/html_node/elisp/Remapping-Commands.html][remap]] if I want to rebind a command to a \"better\" version of it and do an explicit keys declaration, when I rebind it to something completely different.\n\n   - Where mnemonics conflicts with ergonomics - prefer the former.\n\n* Package system\n** Initialization\n   By default, Emacs knows about [[https://elpa.gnu.org/][GNU ELPA]] only, add [[https://melpa.org][some]] [[https://orgmode.org/elpa.html][more]] repositories.\n   #+BEGIN_SRC emacs-lisp\n     (require 'package)\n     (setq package-archives\n           `(,@package-archives\n             (\"melpa\" . \"https://melpa.org/packages/\")\n             ;; (\"marmalade\" . \"https://marmalade-repo.org/packages/\")\n             (\"org\" . \"https://orgmode.org/elpa/\")\n             ;; (\"user42\" . \"https://download.tuxfamily.org/user42/elpa/packages/\")\n             ;; (\"emacswiki\" . \"https://mirrors.tuna.tsinghua.edu.cn/elpa/emacswiki/\")\n             ;; (\"sunrise\" . \"http://joseito.republika.pl/sunrise-commander/\")\n             ))\n     (package-initialize)\n   #+END_SRC\n** [[https://github.com/jwiegley/use-package][Use-package]] installation and setup\n   It can't install itself so we have to bootstrap it\n   #+BEGIN_SRC emacs-lisp\n     (setq package-enable-at-startup nil)\n\n     (unless (package-installed-p 'use-package)\n       (package-refresh-contents)\n       (package-install 'use-package))\n\n     (eval-when-compile\n       (require 'use-package))\n\n     (put 'use-package 'lisp-indent-function 1)\n\n     (use-package use-package-core\n       :custom\n       (use-package-enable-imenu-support t))\n     ;; for startup profiling only\n     ;; (use-package use-package-core\n     ;;   :custom\n     ;;   (use-package-verbose t)\n     ;;   (use-package-minimum-reported-time 0.01))\n   #+END_SRC\n\n   Now we can use it to extend its own functionality by some more useful keywords.\n   #+BEGIN_SRC emacs-lisp\n     (use-package system-packages\n       :ensure t\n       :custom\n       (system-packages-noconfirm t))\n\n     (use-package use-package-ensure-system-package :ensure t)\n\n     ;; :diminish keyword\n     (use-package diminish :ensure t)\n\n     ;; :bind keyword\n     (use-package bind-key :ensure t)\n\n     ;; :quelpa keyword\n     (use-package quelpa\n       :ensure t\n       :defer t\n       :custom\n       (quelpa-update-melpa-p nil \"Don't update the MELPA git repo.\"))\n\n     (use-package quelpa-use-package :ensure t)\n\n     (use-package use-package-custom-update\n       :quelpa\n       (use-package-custom-update :repo \"a13/use-package-custom-update\" :fetcher github :version original))\n\n     (use-package use-package-secrets\n       :custom\n       (use-package-secrets-default-directory \"~/.emacs.d/secrets\")\n       :quelpa\n       (use-package-secrets :repo \"a13/use-package-secrets\" :fetcher github :version original))\n\n   #+END_SRC\n\n** [[https://github.com/Malabarba/paradox][Modernized Package Menu]]\n   #+BEGIN_SRC emacs-lisp\n     (use-package paradox\n       :ensure t\n       :defer 1\n       :config\n       (paradox-enable))\n   #+END_SRC\n\n* Global defaults\n** Common\n   These were defined in C code, so use ~emacs~ pseudo-package to set them.\n   #+BEGIN_SRC emacs-lisp\n     (use-package emacs\n       :init\n       (put 'narrow-to-region 'disabled nil)\n       (put 'downcase-region 'disabled nil)\n       :custom\n       (scroll-step 1)\n       (inhibit-startup-screen t \"Don't show splash screen\")\n       (use-dialog-box nil \"Disable dialog boxes\")\n       (x-gtk-use-system-tooltips nil)\n       (enable-recursive-minibuffers t \"Allow minibuffer commands in the minibuffer\")\n       (indent-tabs-mode nil \"Spaces!\")\n       (debug-on-quit nil))\n   #+END_SRC\n**  Default keybindings customization and other built-in settings\n\n   Disable suspending on C-z\n   #+BEGIN_SRC emacs-lisp\n     (use-package frame\n       :bind\n       (\"C-z\" . nil))\n   #+END_SRC\n\n   C-c C-g always quits minubuffer\n   #+BEGIN_SRC emacs-lisp\n     (use-package delsel\n       :bind\n       (:map mode-specific-map\n             (\"C-g\" . minibuffer-keyboard-quit)))\n   #+END_SRC\n\n   Make /C-w/ and /C-h/ kill a word/char before cursor (see [[http://unix-kb.cat-v.org/][Unix keyboard shortcuts]], don't know what to do with /C-u/ though)\n   #+BEGIN_SRC emacs-lisp\n     (use-package simple\n       :custom\n       (kill-ring-max 3000)\n       :diminish\n       (visual-line-mode . \" ↩\")\n       (auto-fill-function . \" ↵\")\n       :config\n       (column-number-mode t)\n       (toggle-truncate-lines 1)\n       :bind\n       ;; remap ctrl-w/ctrl-h\n       ((\"C-w\" . backward-kill-word)\n        (\"C-h\" . delete-backward-char)\n        :map ctl-x-map\n        (\"C-k\" . kill-region)\n        (\"K\" . kill-current-buffer)))\n   #+END_SRC\n\n   But we still need to access help somehow\n   #+BEGIN_SRC emacs-lisp\n     (use-package help\n       :bind\n       ((\"C-?\" . help-command)\n        :map mode-specific-map\n        (\"h\" . help-command)))\n   #+END_SRC\n\n   Who uses list-buffers?\n   #+BEGIN_SRC emacs-lisp\n     (use-package ibuffer\n       :bind\n       ([remap list-buffers] . ibuffer))\n   #+END_SRC\n\n\n** Files\n   Saving\n   #+BEGIN_SRC emacs-lisp\n     (use-package files\n       :hook\n       (before-save . delete-trailing-whitespace)\n       :custom\n       (require-final-newline t)\n       ;; backup settings\n       (backup-by-copying t)\n       (backup-directory-alist\n        `((\".*\" . ,(expand-file-name\n                    (concat user-emacs-directory \"backups\")))))\n       (delete-old-versions t)\n       (kept-new-versions 6)\n       (kept-old-versions 2)\n       (version-control t))\n\n     (use-package autorevert\n       :diminish auto-revert-mode)\n   #+END_SRC\n\n   #+begin_src emacs-lisp\n     (use-package recentf\n       :custom\n       (recentf-auto-cleanup 30)\n       :config\n       (run-with-idle-timer 30 t 'recentf-save-list))\n   #+end_src\n\n   [[https://github.com/a13/iqa.el][Quick access to init files]]\n   #+BEGIN_SRC emacs-lisp\n     (use-package iqa\n       :ensure t\n       :custom\n       (iqa-user-init-file (concat user-emacs-directory \"README.org\") \"Edit README.org by default.\")\n       :config\n       (iqa-setup-default))\n   #+END_SRC\n\n   I don't use [[http://www.gnu.org/software/emacs/manual/html_node/emacs/Easy-Customization.html][Customize]], so put [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Saving-Customizations.html][custom-file]] \"nowhere\". Alternatively, one can use `(make-temp-file \"emacs-custom\")'\n   #+BEGIN_SRC emacs-lisp\n     (use-package cus-edit\n       :custom\n       (custom-file null-device \"Don't store customizations\"))\n   #+END_SRC\n\n   Somehow file-related too\n   #+BEGIN_SRC emacs-lisp\n     (use-package vlf\n       :ensure t\n       :after (ivy counsel)\n       :config\n       (ivy-add-actions 'counsel-find-file '((\"l\" vlf \"view large file\"))))\n\n     (use-package epa\n       :defer t\n       :custom\n       (epg-gpg-program \"gpg\")\n       (epa-pinentry-mode nil))\n\n     (use-package uniquify\n       :custom\n       (uniquify-buffer-name-style 'forward))\n   #+END_SRC\n\n** Tramp\n   #+BEGIN_SRC emacs-lisp\n     (use-package tramp\n       :defer t\n       :config\n       (put 'temporary-file-directory 'standard-value '(\"/tmp\"))\n       :custom\n       (tramp-backup-directory-alist backup-directory-alist)\n       (tramp-default-method \"ssh\")\n       (tramp-default-proxies-alist nil))\n\n     (use-package sudo-edit\n       :ensure t\n       :bind (:map ctl-x-map\n                   (\"M-s\" . sudo-edit)))\n\n   #+END_SRC\n** Uncategorized\n   [[https://github.com/purcell/exec-path-from-shell][Get environment variables from the shell]]\n   #+BEGIN_SRC emacs-lisp\n     (use-package exec-path-from-shell\n       :ensure t\n       :defer 0.1\n       :config\n       (exec-path-from-shell-initialize))\n   #+END_SRC\n\n* Eshell\n  #+BEGIN_SRC emacs-lisp\n    (use-package em-smart\n      :defer t\n      :config\n      (eshell-smart-initialize)\n      :custom\n      (eshell-where-to-jump 'begin)\n      (eshell-review-quick-commands nil)\n      (eshell-smart-space-goes-to-end t))\n\n    (use-package esh-help\n      :ensure t\n      :defer t\n      :config\n      (setup-esh-help-eldoc))\n\n    (use-package esh-autosuggest\n      :ensure t\n      :hook (eshell-mode . esh-autosuggest-mode))\n\n    (use-package eshell-toggle\n      :custom\n      (eshell-toggle-use-projectile-root t)\n      (eshell-toggle-run-command nil)\n      :quelpa\n      (eshell-toggle :repo \"a13/eshell-toggle\" :fetcher github :version original)\n      :bind\n      (\"M-`\" . eshell-toggle))\n\n    (use-package eshell-fringe-status\n      :ensure t\n      :hook\n      (eshell-mode . 'eshell-fringe-status-mode))\n  #+END_SRC\n* Dired\n  #+BEGIN_SRC emacs-lisp\n    (use-package ls-lisp\n      :defer t\n      :custom\n      (ls-lisp-emulation 'MS-Windows)\n      (ls-lisp-ignore-case t)\n      (ls-lisp-verbosity nil))\n\n    (use-package dired\n      :custom (dired-dwim-target t \"guess a target directory\")\n      :hook\n      (dired-mode . dired-hide-details-mode))\n\n    (use-package dired-x\n      :bind\n      ([remap list-directory] . dired-jump)\n      :custom\n      ;; do not bind C-x C-j since it's used by jabber.el\n      (dired-bind-jump nil))\n\n    (use-package dired-toggle\n      :ensure t\n      :defer t)\n\n    (use-package dired-hide-dotfiles\n      :ensure t\n      :bind\n      (:map dired-mode-map\n            (\".\" . dired-hide-dotfiles-mode))\n      :hook\n      (dired-mode . dired-hide-dotfiles-mode))\n\n    (use-package diredfl\n      :ensure t\n      :hook\n      (dired-mode . diredfl-mode))\n\n    (use-package async\n      :ensure t\n      :defer t\n      :init\n      (dired-async-mode t))\n\n    (use-package dired-rsync\n      :ensure t\n      :bind\n      (:map dired-mode-map\n            (\"r\" . dired-rsync)))\n\n    (use-package dired-launch\n      :ensure t\n      :hook\n      (dired-mode . dired-launch-mode))\n\n    (use-package dired-git-info\n      :ensure t\n      :bind\n      (:map dired-mode-map\n            (\")\" . dired-git-info-mode)))\n  #+END_SRC\n\n* Interface\n\n** Localization\n   #+BEGIN_SRC emacs-lisp\n     (use-package mule\n       :config\n       (prefer-coding-system 'utf-8)\n       (set-language-environment \"UTF-8\")\n       (set-terminal-coding-system 'utf-8))\n\n     (use-package ispell\n       :defer t\n       :custom\n       (ispell-local-dictionary-alist\n        '((\"russian\"\n           \"[АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯабвгдеёжзийклмнопрстуфхцчшщьыъэюяіїєґ’A-Za-z]\"\n           \"[^АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯабвгдеёжзийклмнопрстуфхцчшщьыъэюяіїєґ’A-Za-z]\"\n           \"[-']\"  nil (\"-d\" \"uk_UA,ru_RU,en_US\") nil utf-8)))\n       (ispell-program-name \"hunspell\")\n       (ispell-dictionary \"russian\")\n       (ispell-really-aspell nil)\n       (ispell-really-hunspell t)\n       (ispell-encoding8-command t)\n       (ispell-silently-savep t))\n\n     (use-package flyspell\n       :defer t\n       :custom\n       (flyspell-delay 1))\n\n     (use-package flyspell-correct-ivy\n       :ensure t\n       :demand t\n       :bind (:map flyspell-mode-map\n                   (\"C-c $\" . flyspell-correct-at-point)))\n   #+END_SRC\n\n** Fonts\n   Though [[https://www.gnu.org/software/emacs/manual/html_node/elisp/Font-Selection.html][face-font-family-alternatives]] here is not a list of proper font family lists,\n   it's the only way to set up substitutions for the font if it isn't present in the system.\n   #+BEGIN_SRC emacs-lisp\n     (use-package faces\n       :defer 0.1\n       :custom\n       (face-font-family-alternatives '((\"Consolas\" \"Monaco\" \"Monospace\")))\n       :config\n       (set-face-attribute 'default\n                           nil\n                           :family (caar face-font-family-alternatives)\n                           :weight 'regular\n                           :width 'semi-condensed\n                           ;; (/ (* 19 (display-pixel-height)) (display-mm-height))\n                           :height 160)\n       (set-fontset-font \"fontset-default\" 'cyrillic\n                         (font-spec :registry \"iso10646-1\" :script 'cyrillic)))\n   #+END_SRC\n\n** Color themes\n   #+BEGIN_SRC emacs-lisp\n     (use-package lor-theme\n       :config\n       (load-theme 'lor t)\n       :quelpa\n       (lor-theme :repo \"a13/lor-theme\" :fetcher github :version original))\n   #+END_SRC\n\n** GUI\n   Disable gui elements we don't need:\n   #+BEGIN_SRC emacs-lisp\n     (use-package tool-bar\n       :config\n       (tool-bar-mode -1))\n\n     (use-package scroll-bar\n       :config\n       (scroll-bar-mode -1))\n\n     (use-package menu-bar\n       :config\n       (menu-bar-mode -1)\n       :bind\n       ([S-f10] . menu-bar-mode))\n\n     (use-package tooltip\n       :defer t\n       :custom\n       (tooltip-mode -1))\n   #+END_SRC\n\n   Add those we want instead:\n   #+BEGIN_SRC emacs-lisp\n     (use-package time\n       :defer t\n       :custom\n       (display-time-default-load-average nil)\n       (display-time-24hr-format t)\n       :config\n       (display-time-mode t))\n\n     (use-package fancy-battery\n       :ensure t\n       :hook\n       (after-init . fancy-battery-mode))\n\n     (use-package yahoo-weather\n       :ensure t\n       :bind (:map mode-specific-map\n                   (\"w\" . yahoo-weather-mode))\n       :custom\n       (yahoo-weather-guess-location-function #'yahoo-weather-ipinfo)\n       (yahoo-weather-location \"Kyiv, UA\"))\n   #+END_SRC\n\n   Fancy stuff\n   #+BEGIN_SRC emacs-lisp\n     (use-package font-lock+\n       :quelpa\n       (font-lock+ :repo \"emacsmirror/font-lock-plus\" :fetcher github))\n\n     (use-package all-the-icons\n       :ensure t\n       :defer t\n       :config\n       (setq all-the-icons-mode-icon-alist\n             `(,@all-the-icons-mode-icon-alist\n               (package-menu-mode all-the-icons-octicon \"package\" :v-adjust 0.0)\n               (jabber-chat-mode all-the-icons-material \"chat\" :v-adjust 0.0)\n               (jabber-roster-mode all-the-icons-material \"contacts\" :v-adjust 0.0)\n               (telega-chat-mode all-the-icons-fileicon \"telegram\" :v-adjust 0.0\n                                 :face all-the-icons-blue-alt)\n               (telega-root-mode all-the-icons-material \"contacts\" :v-adjust 0.0))))\n\n     (use-package all-the-icons-dired\n       :ensure t\n       :hook\n       (dired-mode . all-the-icons-dired-mode))\n\n     (use-package all-the-icons-ivy\n       :ensure t\n       :after ivy\n       :custom\n       (all-the-icons-ivy-buffer-commands '() \"Don't use for buffers.\")\n       :config\n       (all-the-icons-ivy-setup))\n\n     (use-package doom-modeline\n       :ensure t\n       :hook\n       (after-init . doom-modeline-init)\n       :custom\n       (doom-modeline-major-mode-icon t)\n       (doom-modeline-buffer-file-name-style 'buffer-name)\n       (doom-modeline-icon t))\n   #+END_SRC\n\n   Dashboard\n   #+BEGIN_SRC emacs-lisp\n     (use-package dashboard\n       :ensure t\n       :config\n       (dashboard-setup-startup-hook)\n       :custom\n       (initial-buffer-choice (lambda () (get-buffer \"*dashboard*\")))\n       (dashboard-items '((recents  . 5)\n                          (bookmarks . 5)\n                          (projects . 5)\n                          ;; (agenda . 5)\n                          (registers . 5))))\n   #+END_SRC\n\n   And the winner is…\n   #+BEGIN_SRC emacs-lisp\n     (use-package winner\n       :config\n       (winner-mode 1))\n   #+END_SRC\n** Highlighting\n   #+BEGIN_SRC emacs-lisp\n     (use-package paren\n       :config\n       (show-paren-mode t))\n\n     (use-package hl-line\n       :hook\n       (prog-mode . hl-line-mode))\n\n     (use-package highlight-numbers\n       :ensure t\n       :hook\n       (prog-mode . highlight-numbers-mode))\n\n     (use-package highlight-escape-sequences\n       :ensure t\n       :config (hes-mode))\n\n     (use-package hl-todo\n       :ensure t\n       :hook ((prog-mode . hl-todo-mode)\n              (yaml-mode . hl-todo-mode)))\n\n     (use-package page-break-lines\n       :ensure t\n       :config\n       (global-page-break-lines-mode))\n\n     (use-package rainbow-delimiters\n       :ensure t\n       :hook\n       (prog-mode . rainbow-delimiters-mode))\n\n     (use-package rainbow-identifiers\n       :ensure t\n       :custom\n       (rainbow-identifiers-cie-l*a*b*-lightness 80)\n       (rainbow-identifiers-cie-l*a*b*-saturation 50)\n       (rainbow-identifiers-choose-face-function\n        #'rainbow-identifiers-cie-l*a*b*-choose-face)\n       :hook\n       (emacs-lisp-mode . rainbow-identifiers-mode) ; actually, turns it off\n       (prog-mode . rainbow-identifiers-mode))\n\n     (use-package rainbow-mode\n       :ensure t\n       :diminish rainbow-mode\n       :hook prog-mode)\n   #+END_SRC\n\n* Minibuffer (search, commands)\n  I prefer [[https://github.com/abo-abo/swiper][Ivy/Counsel/Swiper]] over Helm\n  #+BEGIN_SRC emacs-lisp\n    ;; counsel-M-x can use this one\n    (use-package smex :ensure t)\n\n    (use-package ivy\n      :ensure t\n      :diminish ivy-mode\n      :custom\n      ;; (ivy-re-builders-alist '((t . ivy--regex-fuzzy)))\n      (ivy-count-format \"%d/%d \" \"Show anzu-like counter\")\n      (ivy-use-selectable-prompt t \"Make the prompt line selectable\")\n      :custom-face\n      (ivy-current-match ((t (:inherit 'hl-line))))\n      :bind\n      (:map mode-specific-map\n            (\"C-r\" . ivy-resume))\n      :config\n      (ivy-mode t))\n\n    (use-package ivy-xref\n      :ensure t\n      :defer t\n      :custom\n      (xref-show-xrefs-function #'ivy-xref-show-xrefs \"Use Ivy to show xrefs\"))\n\n    (use-package counsel\n      :ensure t\n      :bind\n      (([remap menu-bar-open] . counsel-tmm)\n       ([remap insert-char] . counsel-unicode-char)\n       ([remap isearch-forward] . counsel-grep-or-swiper)\n       :map mode-specific-map\n       :prefix-map counsel-prefix-map\n       :prefix \"c\"\n       (\"a\" . counsel-apropos)\n       (\"b\" . counsel-bookmark)\n       (\"B\" . counsel-bookmarked-directory)\n       (\"c w\" . counsel-colors-web)\n       (\"c e\" . counsel-colors-emacs)\n       (\"d\" . counsel-dired-jump)\n       (\"f\" . counsel-file-jump)\n       (\"F\" . counsel-faces)\n       (\"g\" . counsel-org-goto)\n       (\"h\" . counsel-command-history)\n       (\"H\" . counsel-minibuffer-history)\n       (\"i\" . counsel-imenu)\n       (\"j\" . counsel-find-symbol)\n       (\"l\" . counsel-locate)\n       (\"L\" . counsel-find-library)\n       (\"m\" . counsel-mark-ring)\n       (\"o\" . counsel-outline)\n       (\"O\" . counsel-find-file-extern)\n       (\"p\" . counsel-package)\n       (\"r\" . counsel-recentf)\n       (\"s g\" . counsel-grep)\n       (\"s r\" . counsel-rg)\n       (\"s s\" . counsel-ag)\n       (\"t\" . counsel-org-tag)\n       (\"v\" . counsel-set-variable)\n       (\"w\" . counsel-wmctrl)\n       :map help-map\n       (\"F\" . counsel-describe-face))\n      :init\n      (counsel-mode))\n\n    (use-package swiper :ensure t)\n\n    (use-package counsel-world-clock\n      :ensure t\n      :after counsel\n      :bind\n      (:map counsel-prefix-map\n            (\"C\" .  counsel-world-clock)))\n\n    (use-package ivy-rich\n      :ensure t\n      :config\n      (ivy-rich-mode 1))\n  #+END_SRC\n  Usually, I don't use isearch, but just in case\n  #+BEGIN_SRC emacs-lisp\n    (use-package isearch\n      :bind\n      ;; TODO: maybe get a keybinding from global map\n      (:map isearch-mode-map\n            (\"C-h\" . isearch-delete-char)))\n  #+END_SRC\n  Indicate minibuffer depth\n  #+BEGIN_SRC emacs-lisp\n    (use-package mb-depth\n      :config\n      (minibuffer-depth-indicate-mode 1))\n  #+END_SRC\n* Quick jumps\n  Ace-jump is dead, long live [[https://github.com/abo-abo/avy][Avy]]!\n  #+BEGIN_SRC emacs-lisp\n    (use-package avy\n      :ensure t\n      :config\n      (avy-setup-default)\n      :bind\n      ((\"C-:\" .   avy-goto-char-timer)\n       :map goto-map\n       (\"M-g\" . avy-goto-line)\n       :map search-map\n       (\"M-s\" . avy-goto-word-1)))\n\n    (use-package avy-zap\n      :ensure t\n      :bind\n      ([remap zap-to-char] . avy-zap-to-char))\n\n    (use-package ace-jump-buffer\n      :ensure t\n      :bind\n      (:map goto-map\n            (\"b\" . ace-jump-buffer)))\n\n    (use-package ace-window\n      :ensure t\n      :custom\n      (aw-keys '(?a ?s ?d ?f ?g ?h ?j ?k ?l) \"Use home row for selecting.\")\n      (aw-scope 'frame \"Highlight only current frame.\")\n      :bind\n      (\"M-o\" . ace-window))\n\n    (use-package link-hint\n      :ensure t\n      :bind\n      ((\"\u003cXF86Search\u003e\" . link-hint-open-link)\n       (\"S-\u003cXF86Search\u003e\" . link-hint-copy-link)\n       :map mode-specific-map\n       :prefix-map link-hint-keymap\n       :prefix \"l\"\n       (\"o\" . link-hint-open-link)\n       (\"c\" . link-hint-copy-link)))\n\n    (use-package ace-link\n      :ensure t\n      :after link-hint ; to use prefix keymap\n      :bind\n      (:map link-hint-keymap\n            (\"l\" . counsel-ace-link))\n      :config\n      (ace-link-setup-default))\n\n\n  #+END_SRC\n\n* Regions/Kill ring/Clipboard\n  #+BEGIN_SRC emacs-lisp\n    (use-package select\n      :custom\n      (selection-coding-system 'utf-8)\n      (select-enable-clipboard t \"Use the clipboard\"))\n\n    (use-package expand-region\n      :ensure t\n      :bind\n      ((\"C-=\" . er/expand-region)\n       (\"C-+\" . er/contract-region)\n       :map mode-specific-map\n       :prefix-map region-prefix-map\n       :prefix \"r\"\n       (\"(\" . er/mark-inside-pairs)\n       (\")\" . er/mark-outside-pairs)\n       (\"'\" . er/mark-inside-quotes)\n       ([34] . er/mark-outside-quotes) ; it's just a quotation mark\n       (\"o\" . er/mark-org-parent)\n       (\"u\" . er/mark-url)\n       (\"b\" . er/mark-org-code-block)\n       (\".\" . er/mark-method-call)\n       (\"\u003e\" . er/mark-next-accessor)\n       (\"w\" . er/mark-word)\n       (\"d\" . er/mark-defun)\n       (\"e\" . er/mark-email)\n       (\",\" . er/mark-symbol)\n       (\"\u003c\" . er/mark-symbol-with-prefix)\n       (\";\" . er/mark-comment)\n       (\"s\" . er/mark-sentence)\n       (\"S\" . er/mark-text-sentence)\n       (\"p\" . er/mark-paragraph)\n       (\"P\" . er/mark-text-paragraph)))\n\n    (use-package elec-pair\n      :config\n      (electric-pair-mode))\n\n    (use-package edit-indirect\n      :ensure t\n      :after expand-region ; to use region-prefix-map\n      :bind\n      (:map region-prefix-map\n            (\"r\" . edit-indirect-region)))\n\n    (use-package clipmon\n      :ensure t\n      :defer 0.1\n      :config\n      (clipmon-mode))\n\n    (use-package copy-as-format\n      :ensure t\n      :custom\n      (copy-as-format-default \"slack\" \"or Telegram\")\n      :bind\n      (:map mode-specific-map\n            :prefix-map copy-as-format-prefix-map\n            :prefix \"f\"\n            (\"f\" . copy-as-format)\n            (\"a\" . copy-as-format-asciidoc)\n            (\"b\" . copy-as-format-bitbucket)\n            (\"d\" . copy-as-format-disqus)\n            (\"g\" . copy-as-format-github)\n            (\"l\" . copy-as-format-gitlab)\n            (\"c\" . copy-as-format-hipchat)\n            (\"h\" . copy-as-format-html)\n            (\"j\" . copy-as-format-jira)\n            (\"m\" . copy-as-format-markdown)\n            (\"w\" . copy-as-format-mediawiki)\n            (\"o\" . copy-as-format-org-mode)\n            (\"p\" . copy-as-format-pod)\n            (\"r\" . copy-as-format-rst)\n            (\"s\" . copy-as-format-slack)))\n\n  #+END_SRC\n\n* Help\n  #+BEGIN_SRC emacs-lisp\n    (use-package man\n      :custom\n      (Man-notify-method 'pushy \"show manpage HERE\")\n      :custom-face\n      (Man-overstrike ((t (:inherit font-lock-type-face :bold t))))\n      (Man-underline ((t (:inherit font-lock-keyword-face :underline t)))))\n\n    (use-package info-colors\n      :ensure t\n      :hook\n      (Info-selection #'info-colors-fontify-node))\n\n    (use-package keyfreq\n      :ensure t\n      :config\n      (keyfreq-mode 1)\n      (keyfreq-autosave-mode 1))\n\n    (use-package which-key\n      :ensure t\n      :diminish which-key-mode\n      :config\n      (which-key-mode))\n\n    (use-package free-keys\n      :ensure t\n      :defer t\n      :commands free-keys)\n\n    (use-package helpful\n      :ensure t\n      :defer t)\n  #+END_SRC\n\n* Internet\n** Jabber\n   #+BEGIN_SRC emacs-lisp\n     (use-package jabber\n       :defer t\n       :secret\n       (jabber-connect-all \"jabber.el.gpg\")\n       :config\n       (setq jabber-history-enabled t\n             jabber-use-global-history nil\n             fsm-debug nil)\n       :custom\n       (jabber-auto-reconnect t)\n       (jabber-chat-buffer-format \"*-jc-%n-*\")\n       (jabber-groupchat-buffer-format \"*-jg-%n-*\")\n       (jabber-chat-foreign-prompt-format \"▼ [%t] %n\u003e \")\n       (jabber-chat-local-prompt-format \"▲ [%t] %n\u003e \")\n       (jabber-muc-colorize-foreign t)\n       (jabber-muc-private-buffer-format \"*-jmuc-priv-%g-%n-*\")\n       (jabber-rare-time-format \"%e %b %Y %H:00\")\n       (jabber-resource-line-format \"   %r - %s [%p]\")\n       (jabber-roster-buffer \"*-jroster-*\")\n       (jabber-roster-line-format \"%c %-17n\")\n       (jabber-roster-show-bindings nil)\n       (jabber-roster-show-title nil)\n       (jabber-roster-sort-functions (quote (jabber-roster-sort-by-status jabber-roster-sort-by-displayname jabber-roster-sort-by-group)))\n       (jabber-show-offline-contacts nil)\n       (jabber-show-resources nil))\n\n     (use-package jabber-otr\n       :ensure t\n       :defer t)\n\n     (use-package point-im\n       :defines point-im-reply-id-add-plus\n       :after jabber\n       :quelpa\n       (point-im :repo \"a13/point-im.el\" :fetcher github :version original)\n       :config\n       (setq point-im-reply-id-add-plus nil)\n       :hook\n       (jabber-chat-mode . point-im-mode))\n\n   #+END_SRC\n\n** Slack\n   #+BEGIN_SRC emacs-lisp\n     (use-package slack\n       :ensure t\n       :secret\n       (slack-start \"work.el.gpg\")\n       :commands (slack-start)\n       :custom\n       (slack-buffer-emojify t) ;; if you want to enable emoji, default nil\n       (slack-prefer-current-team t))\n\n     ;; TODO: move somewhere\n     (use-package alert\n       :ensure t\n       :commands (alert)\n       :custom\n       (alert-default-style 'libnotify))\n\n   #+END_SRC\n** Web\n\n   #+BEGIN_SRC emacs-lisp\n     (use-package shr\n       :defer t\n       :custom\n       (shr-use-fonts nil))\n\n     (use-package shr-color\n       :defer t\n       :custom\n       (shr-color-visible-luminance-min 80 \"Improve the contrast\"))\n\n     (use-package eww\n       :defer t\n       :custom\n       (eww-search-prefix \"https://duckduckgo.com/html/?kd=-1\u0026q=\"))\n\n     (use-package browse-url\n       :bind\n       ([f5] . browse-url)\n       :config\n       (setq browse-url-browser-function 'browse-url-generic\n             browse-url-generic-program \"x-www-browser\")\n\n       (defun feh-browse (url \u0026rest ignore)\n         \"Browse image using feh.\"\n         (interactive (browse-url-interactive-arg \"URL: \"))\n         (start-process (concat \"feh \" url) nil \"feh\" url))\n\n       (defun mpv-browse (url \u0026rest ignore)\n         \"Browse video using mpv.\"\n         (interactive (browse-url-interactive-arg \"URL: \"))\n         (start-process (concat \"mpv --loop-file=inf\" url) nil \"mpv\" \"--loop-file=inf\" url))\n\n       (defvar browse-url-images-re\n         '(\"\\\\.\\\\(jpe?g\\\\|png\\\\)\\\\(:large\\\\|:orig\\\\)?\\\\(\\\\?.*\\\\)?$\"\n           \"^https?://img-fotki\\\\.yandex\\\\.ru/get/\"\n           \"^https?://pics\\\\.livejournal\\\\.com/.*/pic/\"\n           \"^https?://l-userpic\\\\.livejournal\\\\.com/\"\n           \"^https?://img\\\\.leprosorium\\\\.com/[0-9]+$\")\n         \"Image URLs regular expressions list.\")\n\n       (defvar browse-url-videos-re\n         '(\"\\\\.\\\\(gifv?\\\\|avi\\\\|AVI\\\\|mp[4g]\\\\|MP4\\\\|webm\\\\)$\"\n           \"^https?://\\\\(www\\\\.youtube\\\\.com\\\\|youtu\\\\.be\\\\|coub\\\\.com\\\\|vimeo\\\\.com\\\\|www\\\\.liveleak\\\\.com\\\\)/\"\n           \"^https?://www\\\\.facebook\\\\.com/.*/videos?/\"))\n\n       (setq browse-url-browser-function\n             (append\n              (mapcar (lambda (re)\n                        (cons re #'eww-browse-url))\n                      browse-url-images-re)\n              (mapcar (lambda (re)\n                        (cons re #'mpv-browse))\n                      browse-url-videos-re)\n              '((\".\" . browse-url-xdg-open)))))\n\n     (use-package webjump\n       :bind\n       (([S-f5] . webjump))\n       :config\n       (setq webjump-sites\n             (append '((\"debian packages\" .\n                        [simple-query \"packages.debian.org\" \"http://packages.debian.org/\" \"\"]))\n                     webjump-sample-sites)))\n\n     (use-package atomic-chrome\n       :ensure t\n       :defer t\n       :custom\n       (atomic-chrome-url-major-mode-alist\n        '((\"reddit\\\\.com\" . markdown-mode)\n          (\"github\\\\.com\" . gfm-mode)\n          (\"redmine\" . textile-mode))\n        \"Major modes for URLs.\")\n       :config\n       (atomic-chrome-start-server))\n\n     (use-package shr-tag-pre-highlight\n       :ensure t\n       ;;:defer t\n       :after shr\n       :config\n       :custom-update\n       (shr-external-rendering-functions\n        '((pre . shr-tag-pre-highlight))))\n\n     (use-package google-this\n       :ensure t\n       :bind\n       (:map mode-specific-map\n             (\"g\" . 'google-this-mode-submap)))\n\n     (use-package multitran\n       :ensure t\n       :defer t)\n\n     (use-package imgbb\n       :ensure t\n       :defer t)\n   #+END_SRC\n\n** E-mail\n   #+BEGIN_SRC emacs-lisp\n     (use-package mu4e\n       :load-path \"/usr/share/emacs/site-lisp/mu4e\"\n       ;; let's install it now, since mu4e packages aren't available yet\n       :ensure-system-package (mu . mu4e))\n\n     (use-package smtpmail\n       :custom\n       (smtpmail-queue-mail nil \"start in normal mode\")\n       ;;set up queue for offline email\n       (smtpmail-queue-dir \"~/.mail/queue/cur\" \"use `mu mkdir ~/.mail/queue` to set up first\"))\n\n     (use-package mu4e-vars\n       :defer t\n       :custom\n       (mu4e-view-show-images t \"enable inline images\")\n       (mu4e-maildir (expand-file-name \"~/.mail/work\"))\n       (mu4e-completing-read-function 'completing-read \"ivy does all the work\")\n       (mu4e-get-mail-command \"mbsync work\" \"sync with mbsync\")\n       (mu4e-change-filenames-when-moving t \"rename files when moving, needed for mbsync\")\n       :config\n       ;; use imagemagick, if available\n       (when (fboundp 'imagemagick-register-types)\n         (imagemagick-register-types)))\n\n     (use-package mu4e-contrib\n       :defer t\n       :custom\n       (mu4e-html2text-command 'mu4e-shr2text))\n   #+END_SRC\n\n* Org\n  #+BEGIN_SRC emacs-lisp\n    (use-package calendar\n      :defer t\n      :custom\n      (calendar-week-start-day 1))\n\n    (use-package org\n      :defer t\n      ;; to be sure we have the latest Org version\n      :ensure org-plus-contrib\n      :hook\n      (org-mode . variable-pitch-mode)\n      (org-mode . visual-line-mode)\n      :custom\n      (org-src-tab-acts-natively t))\n\n    (use-package org-passwords\n      :ensure org-plus-contrib\n      :bind\n      (:map org-mode-map\n            (\"C-c C-p p\" . org-passwords-copy-password)\n            (\"C-c C-p u\" . org-passwords-copy-username)\n            (\"C-c C-p o\" . org-passwords-open-url)))\n\n    (use-package org-bullets\n      :ensure t\n      :custom\n      ;; org-bullets-bullet-list\n      ;; default: \"◉ ○ ✸ ✿\"\n      ;; large: ♥ ● ◇ ✚ ✜ ☯ ◆ ♠ ♣ ♦ ☢ ❀ ◆ ◖ ▶\n      ;; Small: ► • ★ ▸\n      (org-bullets-bullet-list '(\"•\"))\n      ;; others: ▼, ↴, ⬎, ⤷,…, and ⋱.\n      ;; (org-ellipsis \"⤵\")\n      (org-ellipsis \"…\")\n      :hook\n      (org-mode . org-bullets-mode))\n\n    (use-package htmlize\n      :defer t\n      :custom\n      (org-html-htmlize-output-type 'css)\n      (org-html-htmlize-font-prefix \"org-\"))\n\n    (use-package org-jira\n      :defer t\n      :custom\n      (jiralib-url \"http://jira:8080\"))\n\n  #+END_SRC\n\n* Programming-related\n\n   #+BEGIN_SRC emacs-lisp\n     (use-package ibuffer-vc\n       :ensure t\n       :config\n       (define-ibuffer-column icon\n         (:name \"Icon\" :inline t)\n         (all-the-icons-ivy--icon-for-mode major-mode))\n       :custom\n       (ibuffer-formats\n        '((mark modified read-only vc-status-mini \" \"\n                (name 18 18 :left :elide)\n                \" \"\n                (size 9 -1 :right)\n                \" \"\n                (mode 16 16 :left :elide)\n                \" \"\n                filename-and-process)) \"include vc status info\")\n       :hook\n       (ibuffer . (lambda ()\n                    (ibuffer-vc-set-filter-groups-by-vc-root)\n                    (unless (eq ibuffer-sorting-mode 'alphabetic)\n                      (ibuffer-do-sort-by-alphabetic)))))\n\n     (use-package gitconfig-mode\n       :ensure t\n       :defer t)\n\n     (use-package gitignore-mode\n       :ensure t\n       :defer t)\n\n     (use-package magit\n       :ensure t\n       :custom\n       (magit-completing-read-function 'ivy-completing-read \"Force Ivy usage.\")\n       :bind\n       (:map mode-specific-map\n             :prefix-map magit-prefix-map\n             :prefix \"m\"\n             ((\"a\" . magit-stage-file) ; the closest analog to git add\n              (\"b\" . magit-blame)\n              (\"B\" . magit-branch)\n              (\"c\" . magit-checkout)\n              (\"C\" . magit-commit)\n              (\"d\" . magit-diff)\n              (\"D\" . magit-discard)\n              (\"f\" . magit-fetch)\n              (\"g\" . vc-git-grep)\n              (\"G\" . magit-gitignore)\n              (\"i\" . magit-init)\n              (\"l\" . magit-log)\n              (\"m\" . magit)\n              (\"M\" . magit-merge)\n              (\"n\" . magit-notes-edit)\n              (\"p\" . magit-pull-branch)\n              (\"P\" . magit-push-current)\n              (\"r\" . magit-reset)\n              (\"R\" . magit-rebase)\n              (\"s\" . magit-status)\n              (\"S\" . magit-stash)\n              (\"t\" . magit-tag)\n              (\"T\" . magit-tag-delete)\n              (\"u\" . magit-unstage)\n              (\"U\" . magit-update-index))))\n\n     (use-package magithub\n       :ensure t\n       :after magit\n       :custom\n       (magithub-clone-default-directory \"~/git/\")\n       :bind\n       (:map magit-prefix-map\n             (\"h b\" . magithub-browse)\n             (\"h c\" . magithub-clone)\n             (\"h C\" . magithub-create)\n             (\"h f\" . magithub-fork))\n       :config\n       (magithub-feature-autoinject t))\n\n     (use-package browse-at-remote\n       :ensure t\n       :after link-hint\n       :bind\n       (:map link-hint-keymap\n             (\"r\" . browse-at-remote)\n             (\"k\" . browse-at-remote-kill)))\n\n     (use-package smerge-mode\n       :defer t\n       :diminish smerge-mode)\n\n     (use-package diff-hl\n       :ensure t\n       :hook\n       ((magit-post-refresh . diff-hl-magit-post-refresh)\n        (prog-mode . diff-hl-mode)\n        (org-mode . diff-hl-mode)\n        (dired-mode . diff-hl-dired-mode)))\n\n     (use-package smart-comment\n       :ensure t\n       :bind (\"M-;\" . smart-comment))\n\n     (use-package projectile\n       :ensure t\n       :bind\n       (:map mode-specific-map (\"p\" . projectile-command-map))\n       :custom\n       (projectile-project-root-files-functions\n        '(projectile-root-local\n          projectile-root-top-down\n          projectile-root-bottom-up\n          projectile-root-top-down-recurring))\n       (projectile-completion-system 'ivy))\n\n     (use-package counsel-projectile\n       :ensure t\n       :after counsel projectile\n       :config\n       (counsel-projectile-mode))\n   #+END_SRC\n** Search\n   #+BEGIN_SRC emacs-lisp\n     (use-package ag\n       :defer t\n       :ensure-system-package (ag . silversearcher-ag)\n       :custom\n       (ag-highlight-search t \"Highlight the current search term.\"))\n\n     (use-package dumb-jump\n       :defer t\n       :custom\n       (dumb-jump-selector 'ivy)\n       (dumb-jump-prefer-searcher 'ag))\n   #+END_SRC\n** Autocompletion\n\n   [[http://company-mode.github.io/][Company]]. There's also Auto-Complete as an alternative.\n   #+BEGIN_SRC emacs-lisp\n     (use-package company\n       :ensure t\n       :diminish company-mode\n       :bind\n       (:map company-active-map\n             (\"C-n\" . company-select-next-or-abort)\n             (\"C-p\" . company-select-previous-or-abort))\n       :hook\n       (after-init . global-company-mode))\n\n     (use-package company-quickhelp\n       :ensure t\n       :defer t\n       :custom\n       (company-quickhelp-delay 3)\n       :config\n       (company-quickhelp-mode 1))\n\n     (use-package company-shell\n       :ensure t\n       :after company\n       :defer t\n       :custom-update\n       (company-backends '(company-shell)))\n\n     (use-package company-emoji\n       :ensure t\n       :after company\n       :defer t\n       ;; :ensure-system-package fonts-symbola\n       :custom-update\n       (company-backends '(company-emoji))\n\n       :config\n       (set-fontset-font t 'symbol\n                         (font-spec :family\n                                    (if (eq system-type 'darwin)\n                                        \"Apple Color Emoji\"\n                                      \"Symbola\"))\n                         nil 'prepend))\n   #+END_SRC\n\n** Snippets\n   #+BEGIN_SRC emacs-lisp\n     (use-package autoinsert\n       :hook\n       (find-file . auto-insert))\n\n     (use-package yasnippet\n       :ensure t\n       :diminish yas-minor-mode\n       :custom\n       (yas-prompt-functions '(yas-completing-prompt yas-ido-prompt))\n       :config\n       (yas-reload-all)\n       :hook\n       (prog-mode  . yas-minor-mode))\n   #+END_SRC\n\n** Checking/linting\n   #+BEGIN_SRC emacs-lisp\n     (use-package flycheck\n       :diminish flycheck-mode\n       :hook\n       (prog-mode . flycheck-mode))\n\n     (use-package avy-flycheck\n       :defer t\n       :config\n       (avy-flycheck-setup))\n   #+END_SRC\n\n** Languages support\n\n   [[https://xkcd.com/297/][https://imgs.xkcd.com/comics/lisp_cycles.png]]\n\n*** Emacs Lisp\n\n    #+BEGIN_SRC emacs-lisp\n      (use-package lisp\n        :hook\n        (after-save . check-parens))\n\n      (use-package highlight-defined\n        :ensure t\n        :custom\n        (highlight-defined-face-use-itself t)\n        :hook\n        (emacs-lisp-mode . highlight-defined-mode))\n\n      (use-package highlight-quoted\n        :ensure t\n        :hook\n        (emacs-lisp-mode . highlight-quoted-mode))\n\n      (use-package eros\n        :ensure t\n        :hook\n        (emacs-lisp-mode . eros-mode))\n\n      (use-package suggest\n        :ensure t\n        :defer t)\n\n      (use-package ipretty\n        :ensure t\n        :config\n        (ipretty-mode 1))\n\n      (use-package nameless\n        :ensure t\n        :hook\n        (emacs-lisp-mode .  nameless-mode)\n        :custom\n        (nameless-global-aliases '())\n        (nameless-private-prefix t))\n\n      ;; bind-key can't bind to keymaps\n      (use-package erefactor\n        :ensure t\n        :defer t)\n\n      (use-package flycheck-package\n        :ensure t\n        :defer t\n        :after flycheck\n        (flycheck-package-setup))\n\n      ;; (use-package dash\n      ;;   :custom\n      ;;   (dash-enable-fontlock t))\n    #+END_SRC\n\n*** Scheme\n    #+BEGIN_SRC emacs-lisp\n      (use-package geiser\n        :ensure t\n        :defer t)\n    #+END_SRC\n\n*** Clojure\n\n    #+BEGIN_SRC emacs-lisp\n      (use-package clojure-mode\n        :ensure t\n        :defer t\n        :config\n        (define-clojure-indent\n          (alet 'defun)\n          (mlet 'defun)))\n\n      (use-package clojure-snippets\n        :ensure t\n        :defer t)\n\n      (use-package cider\n        :ensure t\n        :defer t\n        :custom\n        (cider-repl-display-help-banner nil)\n        :config\n        ;; sadly, we can't use :diminish keyword here, yet\n        (diminish 'cider-mode\n                  '(:eval (format \" 🍏%s\" (cider--modeline-info)))))\n\n      (use-package kibit-helper\n        :ensure t\n        :defer t)\n\n    #+END_SRC\n\n*** Common Lisp\n\n    Disabled for now…\n\n    #+BEGIN_SRC emacs-lisp\n      (use-package slime\n        :ensure t\n        :disabled\n        :config\n        (setq inferior-lisp-program \"/usr/bin/sbcl\"\n              lisp-indent-function 'common-lisp-indent-function\n              slime-complete-symbol-function 'slime-fuzzy-complete-symbol\n              slime-startup-animation nil)\n        (slime-setup '(slime-fancy))\n        (setq slime-net-coding-system 'utf-8-unix))\n    #+END_SRC\n\n*** Erlang\n    #+BEGIN_SRC emacs-lisp\n      (use-package erlang\n        :ensure t\n        :defer t\n        :custom\n        (erlang-compile-extra-opts '(debug_info))\n        :config\n        (require 'erlang-start))\n\n\n      (use-package company-erlang\n        :ensure t\n        :hook\n        (erlang-mode #'company-erlang-init))\n    #+END_SRC\n\n*** Lua\n\n    #+BEGIN_SRC emacs-lisp\n      (use-package lua-mode\n        :ensure t\n        :defer t)\n    #+END_SRC\n\n*** JS\n\n    #+BEGIN_SRC emacs-lisp\n      (use-package conkeror-minor-mode\n        :ensure t\n        :disabled\n        :defer t\n        :hook\n        (js-mode . (lambda ()\n                     (when (string-match \"conkeror\" (or (buffer-file-name) \"\"))\n                       (conkeror-minor-mode 1)))))\n\n      (use-package json-mode\n        :ensure t\n        :defer t)\n\n      (use-package graphql-mode\n        :ensure t\n        :mode \"\\\\.graphql\\\\'\"\n        :custom\n        (graphql-url \"http://localhost:8000/api/graphql/query\"))\n\n    #+END_SRC\n\n*** Shell\n    #+BEGIN_SRC emacs-lisp\n      (use-package sh-script\n        :mode ((\"zshecl\" . sh-mode)\n               (\"\\\\.zsh\\\\'\" . sh-mode))\n        :custom\n        ;; zsh\n        (system-uses-terminfo nil))\n\n      (use-package executable\n        :hook\n        (after-save . executable-make-buffer-file-executable-if-script-p))\n    #+END_SRC\n*** Configuration files\n    #+BEGIN_SRC emacs-lisp\n      (use-package apt-sources-list\n        :ensure t)\n\n      (use-package ssh-config-mode\n        :ensure t\n        :init\n        (autoload 'ssh-config-mode \"ssh-config-mode\" t)\n        :mode\n        ((\"/\\\\.ssh/config\\\\'\"     . ssh-config-mode)\n         (\"/sshd?_config\\\\'\"      . ssh-config-mode)\n         (\"/known_hosts\\\\'\"       . ssh-known-hosts-mode)\n         (\"/authorized_keys2?\\\\'\" . ssh-authorized-keys-mode))\n        :hook\n        (ssh-config-mode . turn-on-font-lock))\n    #+END_SRC\n\n*** Markup\n    #+BEGIN_SRC emacs-lisp\n      (use-package markdown-mode\n        :ensure t\n        :ensure-system-package markdown\n        :mode ((\"\\\\`README\\\\.md\\\\'\" . gfm-mode)\n               (\"\\\\.md\\\\'\"          . markdown-mode)\n               (\"\\\\.markdown\\\\'\"    . markdown-mode))\n        :custom\n        (markdown-command \"markdown\"))\n\n      (use-package jira-markup-mode\n        :ensure t\n        :defer t\n        :after atomic-chrome\n        :mode (\"\\\\.confluence$\" . jira-markup-mode)\n        :custom-update\n        (atomic-chrome-url-major-mode-alist\n         '((\"atlassian\\\\.net$\" . jira-markup-mode))))\n\n    #+END_SRC\n\n*** Misc\n    #+BEGIN_SRC emacs-lisp\n      (use-package csv-mode\n        :ensure t\n        :mode\n        ((\"\\\\.[Cc][Ss][Vv]\\\\'\" . csv-mode)))\n    #+END_SRC\n\n*** HTTP\n    #+BEGIN_SRC emacs-lisp\n      (use-package restclient\n        :ensure t\n        :mode\n        (\"\\\\.http\\\\'\" . restclient-mode))\n\n      (use-package restclient-test\n        :ensure t\n        :hook\n        (restclient-mode-hook . restclient-test-mode))\n\n      (use-package ob-restclient\n        :ensure t\n        :after org restclient\n        :init\n        (org-babel-do-load-languages\n         'org-babel-load-languages\n         '((restclient . t))))\n\n      (use-package company-restclient\n        :ensure t\n        :after (company restclient)\n        :custom-update\n        (company-backends '(company-restclient)))\n    #+END_SRC\n\n* External utilities\n** Network\n   #+BEGIN_SRC emacs-lisp\n     (use-package net-utils\n       :ensure-system-package traceroute\n       :bind\n       (:map mode-specific-map\n             :prefix-map net-utils-prefix-map\n             :prefix \"n\"\n             (\"p\" . ping)\n             (\"i\" . ifconfig)\n             (\"w\" . iwconfig)\n             (\"n\" . netstat)\n             (\"p\" . ping)\n             (\"a\" . arp)\n             (\"r\" . route)\n             (\"h\" . nslookup-host)\n             (\"d\" . dig)\n             (\"s\" . smbclient)\n             (\"t\" . traceroute)))\n   #+END_SRC\n** Docker\n   #+BEGIN_SRC emacs-lisp\n     (use-package docker\n       :ensure t\n       :bind\n       (:map mode-specific-map\n             (\"d\" . docker)))\n\n     ;; not sure if these two should be here\n     (use-package dockerfile-mode\n       :ensure t\n       :defer t\n       :mode \"Dockerfile\\\\'\")\n\n     (use-package docker-compose-mode\n       :ensure t\n       :defer t)\n   #+END_SRC\n\n** Misc\n   [[https://github.com/syohex/emacs-emamux][Tmux interaction]]\n   #+BEGIN_SRC emacs-lisp\n     (use-package emamux\n       :ensure t\n       :defer t)\n   #+END_SRC\n\n   Debian stuff\n   #+BEGIN_SRC emacs-lisp\n     (use-package debian-el\n       :ensure t\n       :defer t)\n   #+END_SRC\n\n* [[https://github.com/a13/reverse-im.el][Reverse-im]]\n\n  Shortcuts with non-English layout.\n  #+BEGIN_SRC emacs-lisp\n    (use-package reverse-im\n      :ensure t\n      :custom-update\n      (load-path \"~/.xkb/contrib\")\n      (reverse-im-modifiers '(super))\n      (reverse-im-input-methods\n       (if (require 'unipunct nil t)\n           \"russian-unipunct\"\n         \"russian-computer\"))\n      :config\n      (reverse-im-mode t))\n  #+END_SRC\n\n* The end…\n\n  #+BEGIN_SRC emacs-lisp\n\n    ;; Local Variables:\n    ;; eval: (add-hook 'after-save-hook (lambda ()(org-babel-tangle)) nil t)\n    ;; End:\n\n  #+END_SRC\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fin-line%2Femacs.d","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fin-line%2Femacs.d","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fin-line%2Femacs.d/lists"}