Major Refactor
This commit is contained in:
289
README.org
289
README.org
@@ -6,7 +6,30 @@ Points of intrest:
|
|||||||
- Machine specific settings are stored in a separate ~custom.el~ file.
|
- Machine specific settings are stored in a separate ~custom.el~ file.
|
||||||
- Both files are loaded automatically.
|
- Both files are loaded automatically.
|
||||||
- When Exporting HTML from ~org-mode~ the style from the ~org-theme.css~ file is inlined automatically.
|
- When Exporting HTML from ~org-mode~ the style from the ~org-theme.css~ file is inlined automatically.
|
||||||
* Set up UI
|
* Set up ~use-package~
|
||||||
|
State that we will need package support and define a macro for adding package repos to the archives
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(require 'package)
|
||||||
|
(defmacro append-to-list (target suffix)
|
||||||
|
"Append SUFFIX to TARGET in place."
|
||||||
|
`(setq ,target (append ,target ,suffix)))
|
||||||
|
|
||||||
|
;; add to the package repos
|
||||||
|
(append-to-list package-archives
|
||||||
|
'(("melpa" . "http://melpa.org/packages/")
|
||||||
|
("org-elpa" . "https://orgmode.org/elpa/")))
|
||||||
|
(package-initialize)
|
||||||
|
(unless (package-installed-p 'use-package)
|
||||||
|
(package-refresh-contents)
|
||||||
|
(package-install 'use-package))
|
||||||
|
|
||||||
|
(require 'use-package)
|
||||||
|
(setq use-package-always-ensure t)
|
||||||
|
(use-package gnu-elpa-keyring-update)
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
* Fix defaults
|
||||||
|
** Hide UI elements
|
||||||
Remove all those UI elements. They do not look good and waste space.
|
Remove all those UI elements. They do not look good and waste space.
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(tool-bar-mode -1)
|
(tool-bar-mode -1)
|
||||||
@@ -15,52 +38,76 @@ Remove all those UI elements. They do not look good and waste space.
|
|||||||
(tooltip-mode -1)
|
(tooltip-mode -1)
|
||||||
(fringe-mode -1)
|
(fringe-mode -1)
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
* Set up package repositories
|
** Disable file backups
|
||||||
** Require package support
|
Emacs, loves to clutter directories with backup files.
|
||||||
State that we will need package support and define a macro for adding package repos to the archives
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(require 'package)
|
(setq make-backup-files nil)
|
||||||
(defmacro append-to-list (target suffix)
|
(setq auto-save-default nil)
|
||||||
"Append SUFFIX to TARGET in place."
|
(setq create-lockfiles nil)
|
||||||
`(setq ,target (append ,target ,suffix)))
|
#+END_SRC
|
||||||
|
** Other settings
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
;; The default encoding should be utf-8 everywhere
|
||||||
|
(prefer-coding-system 'utf-8)
|
||||||
|
|
||||||
|
;; All "Yes or No" questions can be shortend to "y or n".
|
||||||
|
(defalias 'yes-or-no-p 'y-or-n-p)
|
||||||
|
|
||||||
|
;; No more startup messages and screens
|
||||||
|
(setq inhibit-startup-screen t)
|
||||||
|
(setq initial-scratch-message nil)
|
||||||
|
(defun display-startup-echo-area-message ()
|
||||||
|
(message "Welcome Back!"))
|
||||||
|
|
||||||
|
;; Highlight matching braces
|
||||||
|
(show-paren-mode t)
|
||||||
|
|
||||||
|
;; cua-mode. Like any other editor
|
||||||
|
(cua-mode t)
|
||||||
|
|
||||||
|
;; Configure the cursor
|
||||||
|
(setq-default
|
||||||
|
cursor-type 'bar
|
||||||
|
indent-tabs-mode nil
|
||||||
|
cursor-in-non-selected-windows nil)
|
||||||
|
|
||||||
|
;; Default column with
|
||||||
|
(set-fill-column 95)
|
||||||
|
|
||||||
|
;; Start up in the home directory
|
||||||
|
(setq default-directory "~/")
|
||||||
|
|
||||||
|
;; Make C-k always kill the whole line
|
||||||
|
(setq kill-whole-line t)
|
||||||
|
|
||||||
|
;; Do not ding. Ever.
|
||||||
|
(setq ring-bell-function 'ignore)
|
||||||
|
|
||||||
|
;; Dialogues always go in the modeline.
|
||||||
|
(setq use-dialog-box nil)
|
||||||
|
#+end_src
|
||||||
|
** Keybindings
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(bind-key "C-x k" 'kill-buffer-with-prejudice)
|
||||||
|
(bind-key "C-x C-k" 'kill-buffer-and-window)
|
||||||
|
(bind-key "M-p" 'switch-to-previous-buffer)
|
||||||
|
(bind-key "M-i" 'delete-indentation)
|
||||||
|
(bind-key "C-+" 'text-scale-increase)
|
||||||
|
(bind-key "C--" 'text-scale-decrease)
|
||||||
|
;; buffer-list is not a good default
|
||||||
|
(bind-key "C-x C-b" 'ibuffer)
|
||||||
|
(bind-key "C-c n" 'display-line-numbers-mode)
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
** Add package repos
|
Unbind useless keys.
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(append-to-list package-archives
|
(unbind-key "C-<tab>") ;; prevent switching to tab mode randomly
|
||||||
'(("melpa" . "http://melpa.org/packages/")
|
(unbind-key "C-h n") ;; I have never wanted to see emacs news ever
|
||||||
("org-elpa" . "https://orgmode.org/elpa/")))
|
(unbind-key "C-h C-n") ;; why on earth is it bound to two keybindings??
|
||||||
|
(unbind-key "C-x C-d") ;; list-directory is utterly useless given the existence of dired
|
||||||
|
(unbind-key "C-x C-r") ;; as is find-file-read-only
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
* Useful functions
|
||||||
** Ensure ~use-package~ command is present
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(package-initialize)
|
|
||||||
|
|
||||||
(unless (package-installed-p 'use-package)
|
|
||||||
(package-refresh-contents)
|
|
||||||
(package-install 'use-package))
|
|
||||||
|
|
||||||
(require 'use-package)
|
|
||||||
|
|
||||||
(setq use-package-always-ensure t)
|
|
||||||
|
|
||||||
(use-package gnu-elpa-keyring-update)
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
* Set Backup Location
|
|
||||||
Emacs, by default clutters the file system with backup files.
|
|
||||||
We do not want them to be right next to the actual file, so we tell emacs to use dedicated directory to store them.
|
|
||||||
While we are at it, we also set rule for how many version emacs should keep as backups.
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(setq backup-directory-alist `(("." . "~/.emacs-backup")))
|
|
||||||
(setq backup-by-copying t)
|
|
||||||
(setq delete-old-versions t
|
|
||||||
kept-new-versions 6
|
|
||||||
kept-old-versions 2
|
|
||||||
version-control t)
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
* Define useful functions
|
|
||||||
** Edit the config file
|
** Edit the config file
|
||||||
A simple funtion to open this file for quick editing.
|
A simple funtion to open this file for quick editing.
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
@@ -84,12 +131,14 @@ Reindet the whole buffer with ~F12~
|
|||||||
(interactive)
|
(interactive)
|
||||||
(split-window-right)
|
(split-window-right)
|
||||||
(other-window 1))
|
(other-window 1))
|
||||||
|
(bind-key "C-c 3" 'split-right-and-enter)
|
||||||
|
|
||||||
(defun split-below-and-enter ()
|
(defun split-below-and-enter ()
|
||||||
"Split the window down and enter it."
|
"Split the window down and enter it."
|
||||||
(interactive)
|
(interactive)
|
||||||
(split-window-below)
|
(split-window-below)
|
||||||
(other-window 1))
|
(other-window 1))
|
||||||
|
(bind-key "C-c 2" 'split-below-and-enter)
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
** Quick buffer switching
|
** Quick buffer switching
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
@@ -98,33 +147,8 @@ Reindet the whole buffer with ~F12~
|
|||||||
(interactive)
|
(interactive)
|
||||||
(switch-to-buffer (other-buffer (current-buffer) 1)))
|
(switch-to-buffer (other-buffer (current-buffer) 1)))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
** Fold all except the current heading
|
|
||||||
With this all other subtrees in the buffer van be collapsed, leaving only the subtree at the point expanded
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(defun org-show-current-heading-tidily ()
|
|
||||||
(interactive) ;Inteactive
|
|
||||||
"Show next entry, keeping other entries closed."
|
|
||||||
(if (save-excursion (end-of-line) (outline-invisible-p))
|
|
||||||
(progn (org-show-entry) (show-children))
|
|
||||||
(outline-back-to-heading)
|
|
||||||
(unless (and (bolp) (org-on-heading-p))
|
|
||||||
(org-up-heading-safe)
|
|
||||||
(hide-subtree)
|
|
||||||
(error "Boundary reached"))
|
|
||||||
(org-overview)
|
|
||||||
(org-reveal t)
|
|
||||||
(org-show-entry)
|
|
||||||
(show-children)))
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
And it should be accessible with a quick keystroke:
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(global-set-key "\M-s" 'org-show-current-heading-tidily)
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
* Theming
|
* Theming
|
||||||
Apply a nice looking theme.
|
Apply a nice looking theme.
|
||||||
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
;; Light Theme
|
;; Light Theme
|
||||||
(use-package modus-operandi-theme)
|
(use-package modus-operandi-theme)
|
||||||
@@ -141,8 +165,8 @@ Apply a nice looking theme.
|
|||||||
'(internal-border-width . 10)
|
'(internal-border-width . 10)
|
||||||
'(font . "Roboto Mono Light 10"))))
|
'(font . "Roboto Mono Light 10"))))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
Use a nice looking modeline package
|
|
||||||
|
|
||||||
|
Use a nice looking modeline package
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(use-package telephone-line)
|
(use-package telephone-line)
|
||||||
(telephone-line-mode 1)
|
(telephone-line-mode 1)
|
||||||
@@ -502,10 +526,6 @@ Treemacs makes navigating folders and files much easier. This is the default con
|
|||||||
treemacs-tag-follow-delay 1.5
|
treemacs-tag-follow-delay 1.5
|
||||||
treemacs-width 35)
|
treemacs-width 35)
|
||||||
|
|
||||||
;; The default width and height of the icons is 22 pixels. If you are
|
|
||||||
;; using a Hi-DPI display, uncomment this to double the icon size.
|
|
||||||
;;(treemacs-resize-icons 44)
|
|
||||||
|
|
||||||
(treemacs-follow-mode t)
|
(treemacs-follow-mode t)
|
||||||
(treemacs-filewatch-mode t)
|
(treemacs-filewatch-mode t)
|
||||||
(treemacs-fringe-indicator-mode t)
|
(treemacs-fringe-indicator-mode t)
|
||||||
@@ -548,7 +568,7 @@ elfeed can be extended with various hooks for ease of used
|
|||||||
(elfeed-make-tagger :before "2 weeks ago"
|
(elfeed-make-tagger :before "2 weeks ago"
|
||||||
:remove 'unread))
|
:remove 'unread))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
* Additional Package Imports
|
* Misc packages
|
||||||
** All The Icons
|
** All The Icons
|
||||||
We want to have some nice looking icons
|
We want to have some nice looking icons
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
@@ -642,98 +662,7 @@ Ag.el allows you to search using ~ag~ from inside Emacs. You can filter by file
|
|||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(use-package ag)
|
(use-package ag)
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
* Set Variables
|
* Programming
|
||||||
** General Emacs Options
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(setq
|
|
||||||
compilation-always-kill t ; Never prompt to kill a compilation session.
|
|
||||||
compilation-scroll-output 'first-error ; Always scroll to the bottom.
|
|
||||||
make-backup-files nil ; No backups, thanks.
|
|
||||||
auto-save-default nil ; Or autosaves. What's the difference between autosaves and backups?
|
|
||||||
create-lockfiles nil ; Emacs sure loves to put lockfiles everywhere.
|
|
||||||
default-directory "~/" ; Home sweet home.
|
|
||||||
inhibit-startup-screen t ; No need to see GNU agitprop.
|
|
||||||
kill-whole-line t ; Lets C-k delete the whole line
|
|
||||||
require-final-newline t ; Auto-insert trailing newlines.
|
|
||||||
ring-bell-function 'ignore ; Do not ding. Ever.
|
|
||||||
use-dialog-box nil ; Dialogues always go in the modeline.
|
|
||||||
initial-scratch-message nil ; SHUT UP SHUT UP SHUT UP
|
|
||||||
save-interprogram-paste-before-kill t ; preserve paste to system ring
|
|
||||||
enable-recursive-minibuffers t ; don't fucking freak out if I use the minibuffer twice
|
|
||||||
sentence-end-double-space nil ; are you fucking kidding me with this shit
|
|
||||||
confirm-kill-processes nil ; don't whine at me when I'm quitting.
|
|
||||||
mark-even-if-inactive nil ; prevent really unintuitive undo behavior
|
|
||||||
load-prefer-newer t ; load newest file version available
|
|
||||||
)
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
** Read environment variables from the shell
|
|
||||||
When not running on a windows system, we can use the env variables in emacs
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(use-package exec-path-from-shell
|
|
||||||
:if (not (eq system-type 'windows-nt))
|
|
||||||
:config
|
|
||||||
(exec-path-from-shell-initialize))
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
** Show the current filename in titlebar
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(setq frame-title-format
|
|
||||||
'((:eval user-login-name) "@" (:eval (system-name)) ": " (:eval (if (buffer-file-name)
|
|
||||||
(abbreviate-file-name (buffer-file-name))
|
|
||||||
"%b")) " [%*]"))
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
** Default encoding
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(prefer-coding-system 'utf-8)
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
** Shorten "yes or no" questions
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(defalias 'yes-or-no-p 'y-or-n-p)
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
** Always highlight the current line
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(global-hl-line-mode t)
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
** Always highlight matching braces
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(show-paren-mode t)
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
** Allow selection override
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(delete-selection-mode t)
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
** Behave like a normal text editor
|
|
||||||
Changed: No more CUA, ~C-c~ is used in to many places that are broken by cua-mode
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(cua-mode t)
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
** Set cursor and indet mode
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(setq-default
|
|
||||||
cursor-type 'bar
|
|
||||||
indent-tabs-mode nil
|
|
||||||
cursor-in-non-selected-windows nil)
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
** Set default column width
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(set-fill-column 95)
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
* Hooks
|
|
||||||
** Remove trailing whitespace on file close
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(add-hook 'before-save-hook 'delete-trailing-whitespace)
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
** Elisp
|
** Elisp
|
||||||
Some customization for writing elisp
|
Some customization for writing elisp
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
@@ -745,36 +674,6 @@ Some customization for writing elisp
|
|||||||
|
|
||||||
(add-hook 'emacs-lisp-mode-hook 'my-elisp-mode-hook)
|
(add-hook 'emacs-lisp-mode-hook 'my-elisp-mode-hook)
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
* Global Key Bindings
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(bind-key "C-x k" 'kill-buffer-with-prejudice)
|
|
||||||
(bind-key "C-x C-k" 'kill-buffer-and-window)
|
|
||||||
(bind-key "C-c 5" 'query-replace-regexp) ;; stupid vestigial binding
|
|
||||||
(bind-key "M-/" 'hippie-expand)
|
|
||||||
(bind-key "C-c \\" 'align-regexp)
|
|
||||||
(bind-key "C-c m" 'compile)
|
|
||||||
(bind-key "C-c 3" 'split-right-and-enter)
|
|
||||||
(bind-key "C-c 2" 'split-below-and-enter)
|
|
||||||
(bind-key "M-p" 'switch-to-previous-buffer)
|
|
||||||
(bind-key "C-c /" 'comment-or-uncomment-region)
|
|
||||||
(bind-key "C-c x" 'ESC-prefix)
|
|
||||||
(bind-key "M-i" 'delete-indentation)
|
|
||||||
(bind-key "C-+" 'text-scale-increase)
|
|
||||||
(bind-key "C--" 'text-scale-decrease)
|
|
||||||
(bind-key "C-<" 'beginning-of-buffer)
|
|
||||||
(bind-key "C->" 'end-of-buffer)
|
|
||||||
(bind-key "C-x C-b" 'ibuffer) ;; buffer-list is not a good default
|
|
||||||
(bind-key "C-c n" 'line-number-mode)
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
** Unbind some default key bindings
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(unbind-key "C-<tab>") ;; prevent switching to tab mode randomly
|
|
||||||
(unbind-key "C-h n") ;; I have never wanted to see emacs news ever
|
|
||||||
(unbind-key "C-h C-n") ;; why on earth is it bound to two keybindings??
|
|
||||||
(unbind-key "C-x C-d") ;; list-directory is utterly useless given the existence of dired
|
|
||||||
(unbind-key "C-x C-r") ;; as is find-file-read-only
|
|
||||||
#+END_SRC
|
|
||||||
* Load additional files
|
* Load additional files
|
||||||
All information about the current user should reside in the ~personal.el~ file.
|
All information about the current user should reside in the ~personal.el~ file.
|
||||||
This file contains personal information like name, email or other identifying information.
|
This file contains personal information like name, email or other identifying information.
|
||||||
|
|||||||
Reference in New Issue
Block a user