(when (and (fboundp 'native-comp-available-p)
(native-comp-available-p))
(setq comp-deferred-compilation t))
(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)
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))
As a heavy keyboard user, I never used the menubar anyway.
(menu-bar-mode -1)
(tool-bar-mode -1)
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)
(add-hook 'before-save-hook 'delete-trailing-whitespace)
(use-package exec-path-from-shell
:ensure t
:init (exec-path-from-shell-initialize))
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))
Enter pins inside emacs
(use-package pinentry
:init
(setenv "INSIDE_EMACS" "true")
(pinentry-start))
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))
(use-package smex
:ensure t
:bind
("M-x" . smex))
(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))
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))
(use-package flycheck
:ensure t
:init
(add-hook 'after-init-hook 'global-flycheck-mode))
(use-package magit
:ensure t
:init
(setf transient-default-level 5))
(use-package multi-vterm
:ensure t
:init)
(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)
(use-package alert :ensure t)
Wild notifier. Spiky, but works. Upon click wild-notifier
- Focuses terminal
- 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"))))
(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))
(use-package elm-mode :ensure t)
(use-package js2-mode
:ensure t
:init
(add-hook 'js-mode-hook 'js2-minor-mode))
(use-package enh-ruby-mode
:ensure t
:hook enh-ruby-mode)
(use-package vue-mode :ensure t)
(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)))