Skip to content

akhramov/emacs.d

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Emacs configuration

Bootstraping and tools

Packages

Very first thing to do: native-comp

(when (and (fboundp 'native-comp-available-p)
       (native-comp-available-p))
  (setq comp-deferred-compilation t))

Package sources

(require 'package)
(setq gnutls-algorithm-priority "NORMAL:-VERS-TLS1.3")

Use MELPA as primary source

(add-to-list 'package-archives
             '("melpa" . "https://melpa.org/packages/"))

Add org-contrib repo.

(add-to-list 'package-archives '("org" . "https://orgmode.org/elpa/"))

We’re all set up.

(package-initialize)

use-package

Don’t forget to install use-package. use-package is the core of this config.

(unless (package-installed-p 'use-package) (package-install 'use-package))

Tuning defaults

Turning off menubar

As a heavy keyboard user, I never used the menubar anyway.

(menu-bar-mode -1)
(tool-bar-mode -1)

Enabling downcase and upcase region commands

I’m not sure why beginners find downcase-region and upcase-region commands confusing. Let’s enable them.

(put 'downcase-region 'disabled nil)
(put 'upcase-region 'disabled nil)

Deleting trailing whitespaces before save

(add-hook 'before-save-hook 'delete-trailing-whitespace)

Setting up environment

(use-package exec-path-from-shell
  :ensure t
  :init (exec-path-from-shell-initialize))

Customize

Customizations will be stored in customizations.el

(use-package customizations
  :defer t
  :init
  (setq custom-file (locate-user-emacs-file "customizations.el"))
  (load custom-file))

Features

Crypto

Enter pins inside emacs

(use-package pinentry
  :init
  (setenv "INSIDE_EMACS" "true")
  (pinentry-start))

Command completion

Ivy

This config uses Ivy as completion frontend.

(use-package ivy :ensure t)

multi-term is for managing terminal buffers. Ivy is for managing multi-term.

(use-package ivy-mt
  :load-path
  (lambda () (locate-user-emacs-file "lisp"))
  :bind
  ("C-x p" . ivy-mt)
  :config
  (defun ivy-mt-buffer-list ()
    "Retrieve buffers list."
    (if (projectile-project-p)
	(projectile-project-buffers)
      (buffer-list)))

  (defun ivy-mt-launch-term ()
    "Launch new terminal."
    (if (projectile-project-p)
	(cd (projectile-project-root)))

    (call-interactively 'multi-vterm)))

Other completion functions

(use-package counsel :ensure t)

(use-package counsel-projectile
  :ensure t
  :init (counsel-projectile-mode))

M-x enhancement

(use-package smex
  :ensure t
  :bind
  ("M-x" . smex))

Project interaction

(use-package projectile
   :init
   (define-key projectile-mode-map (kbd "C-c p") 'projectile-command-map)
   (projectile-mode)
   :custom
   (projectile-switch-project-action
      (lambda ()
        (progn
         (require 'subr-x)
         (if-let* ((last-buffer (nth 1 (projectile-project-buffers))))
                   (switch-to-buffer last-buffer)
           (projectile-dired))))))

Switch to project buffers using projectile-switch-to-buffer, fallback to switch-to-buffer otherwise.

(use-package akhramov-projectile-switch-to-buffer
  :load-path
  (lambda () (locate-user-emacs-file "package/lisp"))
  :bind
  ("C-x b" . akhramov-projectile-switch-to-buffer))

Editing plugins

Drop-in replacement for standard comment-dwim

(use-package comment-dwim-2
  :ensure t
  :bind
  ("M-;" . comment-dwim-2))

Multicursor support

(use-package multiple-cursors
  :ensure t
  :bind
  ("M-]" . mc/mark-next-like-this))

Linting

(use-package flycheck
  :ensure t
  :init
  (add-hook 'after-init-hook 'global-flycheck-mode))

VCS

Git

(use-package magit
  :ensure t
  :init
  (setf transient-default-level 5))

Terminal support

(use-package multi-vterm
  :ensure t
  :init)

Org and authoring

(use-package org-mode
  :bind ("C-c a" . org-agenda))
(use-package org-wild-notifier
  :ensure t
  :init (org-wild-notifier-mode))
(use-package gnuplot
  :ensure t)

Misc

Alerts

(use-package alert :ensure t)

Wild notifier. Spiky, but works. Upon click wild-notifier

  1. Focuses terminal
  2. Executes commands (e.g. switch-buffer)
(when (string-equal system-type "darwin")
  (use-package wild-notifier
    :init (setf alert-default-style 'wild)
    :load-path (lambda () (locate-user-emacs-file "lisp"))))

Languages

Agda

(use-package agda2-mode
  :mode "\\.agda\\'"
  :load-path
  (lambda () (file-name-directory (shell-command-to-string "agda-mode locate")))
  :init
  (bind-key "C-c ." 'agda2-goal-and-context-and-inferred)
  (bind-key "C-c C-s" 'agda2-solve-maybe-all))

Elm

(use-package elm-mode :ensure t)

Javascript

(use-package js2-mode
  :ensure t
  :init
  (add-hook 'js-mode-hook 'js2-minor-mode))

Ruby

(use-package enh-ruby-mode
  :ensure t
  :hook enh-ruby-mode)

Vue

(use-package vue-mode :ensure t)

LSP languages

(use-package lsp-mode :ensure t)
(use-package typescript-mode
   :ensure t
  :hook ((typescript-mode . lsp)))
(use-package typescript-mode
   :ensure t
  :hook ((typescript-mode . lsp)))
(use-package lsp-java
   :ensure t
  :hook ((java-mode . lsp)))
(use-package rust-ts-mode
  :hook ((rust-ts-mode . lsp)))

About

My emacs configuration

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published