Skip to content

merazi/emacs-config

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 

Repository files navigation

My Emacs Configuration File

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.

Performance

(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

Editing Tweaks

(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)

Emacs beacon

No extra package needed.

(defun pulse-line (_)
  (pulse-momentary-highlight-one-line (point)))
(setq window-selection-change-functions '(pulse-line))

Visual Tweaks

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))

Backups and temporary files

(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)

User defined functions

(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 "")))

Packages

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.

Misc packages

Just packages that I liked and installed into Emacs, not related to a specific programming language but still cool.

Dashboard

(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"))))

Magit

(use-package magit)

VTerm

A proper terminal emulator in emacs.

(use-package vterm)

Neotree

(use-package neotree
  :config
  (global-set-key [f8] 'neotree-toggle)
  (setq neo-theme (if (display-graphic-p) 'icons 'arrow))
  (setq neo-smart-open t))

Ivy

(use-package ivy
  :init (ivy-mode))

Swiper

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))

Emojify

Just so I can show cool emojis inside emacs. 🤓

(use-package emojify
  :config
  (global-emojify-mode t))

All the icons

Show all the cool icons please.

(use-package all-the-icons)

Undo tree

Very cool undo-redo solution.

(use-package undo-tree
  :init (global-undo-tree-mode)
  :config (setq-default undo-tree-auto-save-history nil))

Company mode

(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))

Lorem Ipsum

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)

Language support

Packages specific to programming languages.

Eglot

This thing connects to language server protocols very easily.

(use-package eglot
  :config (global-set-key [f4] 'eglot)
  :hook ((prog-mode-hook . eglot)))

Golang

(use-package go-mode
  :config (add-to-list 'auto-mode-alist '("\\.go\\'" . go-mode)))

Lua

(use-package lua-mode
  :config (add-to-list 'auto-mode-alist '("\\.lua\\'" . lua-mode)))

Markdown

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"))

HTML/CSS

(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))

Org Mode Related

Org Cliplink

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))

Org Download

(use-package org-download
  :init (add-hook 'org-mode-hook 'org-download-enable))

Org Modern

Better org mode styling.

(use-package org-bullets
  :hook ((org-mode . org-bullets-mode)
         (org-mode . org-indent-mode)))

Key bindings

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)

The EWW web browser

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=")

About

My emacs configuration file(s)

Resources

Stars

Watchers

Forks