This is my emacs configuration in an org-mode file, very neat and tidy, please keep it like that. Also, make sure to start your emacs server with the emacs –daemon command.
(setq gc-cons-threshold 100000000)
(setq read-process-output-max (* 1024 1024))
(add-hook 'after-init-hook #'(lambda ()
(setq gc-cons-threshold 800000)))
(setq byte-compile-warnings '(cl-functions)) ; i'm using old packages lol
(setq initial-buffer-choice (lambda () (get-buffer "*dashboard*"))) ; pull up the dashboard
(delete-selection-mode 1) ; delete selected text when inserting
(show-paren-mode 1) ; highlight pairing parenthesis
(electric-pair-mode 1) ; automatically match parenthesis
(global-unset-key (kbd "C-z")) ; don't send emacs to the background
(setq visible-bell 1) ; silence please
;; scroll with ctrl+mousewheel like other editors do
(global-set-key (kbd "<C-wheel-up>") 'text-scale-increase)
(global-set-key (kbd "<C-wheel-down>") 'text-scale-decrease)
;; insert unicode characters
(global-set-key (kbd "C-S-u") 'insert-char)
;; comment line
(global-set-key (kbd "C-x ;") 'comment-line)
(global-set-key (kbd "C-x C-;") 'comment-line)
;; don't truncate lines, please
(set-default 'truncate-lines t)
No extra package needed.
(defun pulse-line (_)
(pulse-momentary-highlight-one-line (point)))
(setq window-selection-change-functions '(pulse-line))
UI Elements
(setq inhibit-splash-screen t)
(setq inhibit-startup-message t)
(visual-line-mode nil)
(menu-bar-mode -1) ;; hide menu bar
(tool-bar-mode -1) ;; hide tool bar
(scroll-bar-mode -1) ;; hide scroll bar
(setq linum-format "%4d ") ;; set number lines format
(add-hook 'prog-mode-hook
(if (or
(not (fboundp 'linum-mode))
(and (fboundp 'display-line-numbers-mode) (display-graphic-p)))
'display-line-numbers-mode
'linum-mode)) ;; show line numbers in programming modes
;;(global-display-line-numbers-mode)
(setq frame-title-format '(buffer-file-name "Emacs: %b (%f)" "Emacs: %b"))
My emacs look and feel for every day work.
(use-package spacemacs-theme
:config (load-theme 'spacemacs-dark t))
I like to use doom-modeline even tho I don’t use doom emacs myself.
(use-package simple-modeline
:hook (after-init . simple-modeline-mode))
You don’t need to look at anything else than EMACS, so let’s make it fullscreen…
(setq default-frame-alist '((undecorated . t))) ; and you don't need window decorations either
(add-to-list 'default-frame-alist '(fullscreen . maximized))
(defconst emacs-tmp-dir (expand-file-name (format "emacs%d" (user-uid)) temporary-file-directory))
(setq
backup-by-copying t
delete-old-versions t
kept-new-versions 6
kept-old-versions 2
version-control t
auto-save-list-file-prefix emacs-tmp-dir
auto-save-file-name-transforms `((".*" ,emacs-tmp-dir t))
backup-directory-alist `((".*" . ,emacs-tmp-dir)))
(setq create-lockfiles nil)
(defun mer/reload-config ()
"This function will reload my configuration file."
(interactive)
(load-file user-init-file))
(defun mer/edit-config ()
"Easy access to my emacs config."
(interactive)
(find-file user-init-file))
(defun mer/show-full-file-path ()
"Show the full file name of the current buffer in the minibuffer."
(interactive)
(message (concat "File path: " (buffer-file-name))))
(defun mer/xdg-open ()
"Open dired file with external program."
(interactive)
(setq file (dired-get-file-for-visit))
(shell-command (concat "xdg-open " (shell-quote-argument file))))
(defun mer/dos2unix ()
"Replace DOS eolns CR LF with Unix eolns CR"
(interactive)
(goto-char (point-min))
(while (search-forward "\r" nil t) (replace-match "")))
Initial setup for use-package.
(require 'package)
(setq package-enable-at-startup nil)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))
(unless package--initialized (package-initialize))
(unless (package-installed-p 'use-package)
(package-refresh-contents)
(package-install 'use-package))
(eval-when-compile
(require 'use-package))
(setq use-package-always-ensure t)
And now the packages.
Just packages that I liked and installed into Emacs, not related to a specific programming language but still cool.
(use-package dashboard
:config
(dashboard-setup-startup-hook)
(setq dashboard-startup-banner "~/.face")
(setq dashboard-center-content t)
(setq dashboard-items '((recents . 5)
(bookmarks . 5)))
(setq dashboard-display-icons-p t)
(setq dashboard-set-heading-icons t)
(setq dashboard-set-file-icons t)
(dashboard-modify-heading-icons '((recents . "file-text")
(bookmarks . "book"))))
(use-package magit)
A proper terminal emulator in emacs.
(use-package vterm)
(use-package neotree
:config
(global-set-key [f8] 'neotree-toggle)
(setq neo-theme (if (display-graphic-p) 'icons 'arrow))
(setq neo-smart-open t))
(use-package ivy
:init (ivy-mode))
Very nice search tool for emacs. It replaces the normal search bound to Ctrl+s.
(use-package swiper
:config
(global-set-key "\C-s" 'swiper))
Just so I can show cool emojis inside emacs. 🤓
(use-package emojify
:config
(global-emojify-mode t))
Show all the cool icons please.
(use-package all-the-icons)
Very cool undo-redo solution.
(use-package undo-tree
:init (global-undo-tree-mode)
:config (setq-default undo-tree-auto-save-history nil))
(use-package company
:init (global-company-mode t)
:config
;;navigate minibuffer
(define-key company-active-map (kbd "C-n") 'company-select-next)
(define-key company-active-map (kbd "C-p") 'company-select-previous)
;; Provide instant autocompletion.
(setq company-idle-delay 0.0))
Aliquam erat volutpat. Nunc eleifend leo vitae magna. In id erat non orci commodo lobortis. Proin neque massa, cursus ut, gravida ut, lobortis eget, lacus. Sed diam. Praesent fermentum tempor tellus. Nullam tempus. Mauris ac felis vel velit tristique imperdiet. Donec at pede. Etiam vel neque nec dui dignissim bibendum. Vivamus id enim. Phasellus neque orci, porta a, aliquet quis, semper a, massa. Phasellus purus. Pellentesque tristique imperdiet tortor. Nam euismod tellus id erat.
(use-package lorem-ipsum)
Packages specific to programming languages.
This thing connects to language server protocols very easily.
(use-package eglot
:config (global-set-key [f4] 'eglot)
:hook ((prog-mode-hook . eglot)))
(use-package go-mode
:config (add-to-list 'auto-mode-alist '("\\.go\\'" . go-mode)))
(use-package lua-mode
:config (add-to-list 'auto-mode-alist '("\\.lua\\'" . lua-mode)))
Ye… Org mode is superior but sometimes I need to pull up a nasty markdown file.
(use-package markdown-mode
:mode ("README\\.md\\'" . gfm-mode)
:init (setq markdown-command "multimarkdown"))
(use-package emmet-mode
:config
(add-hook 'css-mode-hook 'emmet-mode)
(add-hook 'html-mode-hook 'emmet-mode)
(add-hook 'web-mode-hook 'emmet-mode))
(use-package skewer-mode
:config
(add-hook 'js2-mode-hook 'skewer-mode)
(add-hook 'css-mode-hook 'skewer-css-mode)
(add-hook 'html-mode-hook 'skewer-html-mode))
(use-package impatient-mode
:config
(add-hook 'css-mode-hook 'impatient-mode)
(add-hook 'html-mode-hook 'impatient-mode))
This allows you to insert links in org mode from your clipboard.
(use-package org-cliplink
:config (global-set-key (kbd "C-x p i") 'org-cliplink))
(use-package org-download
:init (add-hook 'org-mode-hook 'org-download-enable))
Better org mode styling.
(use-package org-bullets
:hook ((org-mode . org-bullets-mode)
(org-mode . org-indent-mode)))
Some editing bindings
(global-set-key [mouse-3] 'mouse-popup-menubar-stuff)
(global-set-key (kbd "C->") 'indent-rigidly-right-to-tab-stop)
(global-set-key (kbd "C-<") 'indent-rigidly-left-to-tab-stop)
Open this config file with a key stroke.
(global-set-key (kbd "<f6>") (lambda() (interactive)(find-file "~/.emacs.d/")))
Some key bindings for emacs modes and functions
(global-set-key "\C-ce" 'eww)
(global-set-key "\C-cs" 'vterm)
(global-set-key "\C-xb" 'ibuffer)
(global-set-key "\C-ck" 'delete-frame)
(global-set-key "\C-cc" 'mer/edit-config)
(global-set-key "\C-cq" 'mer/reload-config)
(global-set-key "\C-cf" 'mer/show-full-file-path)
(eval-after-load "dired"
'(progn (define-key dired-mode-map (kbd "M-o") 'other-window)
(define-key dired-mode-map (kbd "\C-co") 'mer/xdg-open)))
(global-set-key "\C-cy" 'yas-insert-snippet)
I find myself using this web browser more often so I figured out I would tweak it a tiny bit.
(setq eww-download-directory "~/Downloads/"
eww-desktop-remove-duplicates t
eww-history-limit 20
eww-search-prefix "https://lite.duckduckgo.com/lite/?q=")