clean up config, separate files

This commit is contained in:
opfez 2021-05-16 17:40:41 +02:00
parent c929ef8cd2
commit 7a06ab6054
5 changed files with 257 additions and 247 deletions

View File

@ -1,84 +1,40 @@
(defun copy-whole-line ()
(interactive)
(save-excursion
(kill-new
(buffer-substring
(point-at-bol)
(point-at-eol)))))
(global-set-key (kbd "C-c w l") 'copy-whole-line)
(defun kill-all-buffers ()
(interactive)
(mapc 'kill-buffer (buffer-list)))
(global-set-key (kbd "C-c k k") 'kill-all-buffers)
(defun split-and-follow-horizontally ()
(interactive)
(split-window-below)
(balance-windows)
(other-window 1))
(global-set-key (kbd "C-x 2") 'split-and-follow-horizontally)
(defun split-and-follow-vertically ()
(interactive)
(split-window-right)
(balance-windows)
(other-window 1))
(global-set-key (kbd "C-x 3") 'split-and-follow-vertically)
(defun switch-to-previous-buffer ()
(interactive)
(switch-to-buffer (other-buffer (current-buffer) 1)))
(global-set-key (kbd "C-x b") 'switch-to-previous-buffer)
(global-set-key (kbd "C-c b") 'switch-to-buffer)
;; compilation
;;; Compilation
(setq compile-command "make ")
;; C-m functions as \r, so pressing C-x C-m C-m will call compile and skip the prompt.
(global-set-key (kbd "C-x C-m") 'compile)
;; Nicer movement in compilation-mode.
(add-hook 'compilation-mode-hook
(lambda () (local-set-key (kbd "n") 'compilation-next-error)))
(add-hook 'compilation-mode-hook
(lambda () (local-set-key (kbd "p") 'compilation-previous-error)))
(defun mark-line ()
;; Function for selecting the current line.
(defun fez/mark-line ()
"Selects the current line with the mark."
(interactive)
(move-beginning-of-line nil)
(set-mark (point))
(move-end-of-line nil))
(global-unset-key (kbd "C-x C-z")) ; disable suspend frame
(global-set-key (kbd "C-x C-z") 'mark-line)
(global-unset-key (kbd "C-z")) ; disable suspend frame
(global-set-key (kbd "C-x C-x") 'other-window)
(global-set-key (kbd "C-x C-b") 'bs-show)
(defun toggle-indent ()
;; Toggle between indenting with tabs or spaces.
(defun fez/toggle-indent ()
(interactive)
(setq-default indent-tabs-mode (not indent-tabs-mode)))
(global-set-key [f5] (lambda ()
(interactive)
(disable-theme 'basic)
(load-theme 'magik)))
(global-set-key [f6] (lambda ()
(interactive)
(disable-theme 'magik)
(load-theme 'basic)))
(defun current-line-empty-p ()
(defun fez/current-line-empty-p ()
(save-excursion
(beginning-of-line)
(looking-at-p "[[:space:]]*$")))
(defun flash-region (&optional timeout)
(defun fez/flash-region (&optional timeout)
"Temporarily highlight region from START to END. Taken from SLIME source code and modified."
(interactive)
(transient-mark-mode)
(save-excursion
(mark-defun)
(while (current-line-empty-p)
;; Don't mark the line above the s-expression.
(while (fez/current-line-empty-p)
(forward-char))
(let* ((start (region-beginning))
(end (region-end))
@ -87,3 +43,31 @@
(overlay-put overlay 'face 'secondary-selection)
(run-with-timer (or timeout 0.2) nil 'delete-overlay overlay)))
(transient-mark-mode))
;; Eshell convinience commands.
(defalias 'open 'find-file-other-window)
(defalias 'clean 'eshell/clear-scrollback)
;;; Keybinds
;; C-x C-z and C-z are normally mapped to suspend-frame, an absolutely useless function.
;; Unbind them before making the keybind useful.
(global-unset-key (kbd "C-x C-z"))
(global-unset-key (kbd "C-z"))
(global-set-key (kbd "C-x C-z") 'fez/mark-line)
;; Better buffer management (smol).
(global-set-key (kbd "C-x C-b") 'bs-show)
;; Insipiration from Nyxt, kill the current buffer.
(global-set-key (kbd "C-x C-k") 'kill-this-buffer)
;; Binds for switching between light and dark themes.
(global-set-key [f5] (lambda ()
(interactive)
(disable-theme 'basic)
(load-theme 'magik)))
(global-set-key [f6] (lambda ()
(interactive)
(disable-theme 'magik)
(load-theme 'basic)))

41
essential.el Normal file
View File

@ -0,0 +1,41 @@
;; Essential stuff to load.
;; This includes starting the package manager, setting the theme etc.
;; call package-initialize manually, disable automatic initialization:
(setq package-enable-at-startup nil)
;; Hello, yes this is me.
(setq user-mail-address "opfez@disroot.org")
(setq user-full-name "opfez")
(setq add-log-mailing-address "opfez@disroot.org")
;; If this isn't set, we can't download packages. It's weird.
(setq gnutls-algorithm-priority "NORMAL:-VERS-TLS1.3")
;; Manually installed modes.
(add-to-list 'load-path "~/.emacs.d/plugins/")
;; Package
(require 'package)
(setq package-archives '(("gnu" . "http://mirrors.163.com/elpa/gnu/")
("melpa" . "https://melpa.org/packages/")))
(package-initialize)
;; Set up use-package for installing all other packages.
(unless (package-installed-p 'use-package)
(package-refresh-contents)
(package-install 'use-package))
;; Autothemer is required for the theme I'm using, so it's essential!
(use-package autothemer
:ensure t)
;; Load custom colour scheme.
(add-to-list 'custom-theme-load-path "~/.emacs.d/themes/")
(load-theme 'magik t)
;; Make the cursor visible in new frames
(defun fez/correct-cursor-colour (frame)
(modify-frame-parameters frame
'((cursor-color . "#ffffff"))))
(add-hook 'after-make-frame-functions 'fez/correct-cursor-colour)

136
init.el
View File

@ -1,39 +1,36 @@
;; call package-initialize manually, disable automatic initialization:
(setq package-enable-at-startup nil)
;; Load essentials.
(load "~/.emacs.d/essential.el")
;; Packages
;; Packages.
(load "~/.emacs.d/packages.el")
;; Convenient functions
(load "~/.emacs.d/functions.el")
;; Correct bad defaults.
(load "~/.emacs.d/tweaks.el")
;; Tab width
;; Additional functions, keybinds.
(load "~/.emacs.d/custom.el")
;; Start an emacs server from this session, if it isn't already running.
;; This is useful for stuff like Nyxt where we can launch and emacsclient to
;; evaluate forms.
(when (not (server-running-p))
(server-start))
;; Tab width.
(setq-default tab-width 4)
;; No tabs when editing Lisp
;;(add-hook 'lisp-mode-hook '(setq indent-tabs-mode nil))
;;(add-hook 'scheme-mode-hook '(setq indent-tabs-mode nil))
;; Use spaces by default.
(setq-default indent-tabs-mode nil)
;; Remove useless stuff
(menu-bar-mode 0)
(tool-bar-mode 0)
(scroll-bar-mode 0)
;;; Appearance
;; The font is set in fontconfig. Usually it's UW Ttyp0 or Gohufont
(set-frame-font "monospace 12")
(setq default-frame-alist '((font . "monospace 12")))
;; UTF-8!!!!
(set-language-environment "UTF-8")
;; Appearance
(set-frame-font "monospace 13")
(setq default-frame-alist '((font . "monospace 13")))
(set-face-italic 'font-lock-comment-face nil) ; disable italics
; theme set in packages.el
(add-to-list 'custom-theme-load-path "~/.emacs.d/themes/")
(load-theme 'magik t)
(global-linum-mode)
(blink-cursor-mode nil)
;; Highlight current line.
(when window-system (global-hl-line-mode t))
;; Highlight matching parentheses.
(show-paren-mode t)
(setq confirm-kill-emacs 'y-or-n-p)
;; Mode line
(line-number-mode t)
@ -41,102 +38,43 @@
(setq display-time-24hr-format t)
(display-time-mode t)
;; disable creation of backup files
(setq make-backup-files nil)
(setq auto-save-default nil)
;; pretty lambdas
;(setq-default prettify-symbols-alist '(("lambda" . 955)))
;(global-prettify-symbols-mode 1)
;; Y or N instead of Yes or No
(defalias 'yes-or-no-p 'y-or-n-p)
;; Smaller skips when cursor reaches end of screen
(setq scroll-conservatively 100)
;; Disable bell
(setq ring-bell-function 'ignore)
;; Subword for camelCase words
(global-subword-mode t)
;; "lambda" => λ
;; Apparently messes up indentation or something? be wary of use.
(setq-default prettify-symbols-alist '(("lambda" . 955)))
(global-prettify-symbols-mode 1)
;; Electric pair mode
(setq electric-pair-pairs '((?\( . ?\))
(?\[ . ?\])
(?\{ . ?\})
(?\" . ?\")
))
(?\[ . ?\])
(?\{ . ?\})
(?\" . ?\")))
(electric-pair-mode t)
(setq user-mail-address "opfez@disroot.org")
(setq user-full-name "opFez")
(setq add-log-mailing-address "opfez@disroot.org")
;; windmove
(global-set-key (kbd "C-S-j") 'windmove-left)
(global-set-key (kbd "C-S-k") 'windmove-down)
(global-set-key (kbd "C-S-l") 'windmove-up)
(global-set-key (kbd "C-:") 'windmove-right)
;; Terminal
(defvar term-shell "/bin/mksh")
(defadvice ansi-term (before force-bash)
(interactive (list term-shell)))
(ad-activate 'ansi-term)
;; C configuration
(setq c-default-style "linux"
c-basic-offset 4)
;; Scheme configuration
;; (setq geiser-active-implementations '(guile))
(setq geiser-active-implementations '(guile))
(setq geiser-guile-binary "/usr/bin/guile")
;; for ncurses development, uncomment this:
;; (setq geiser-guile-binary "/usr/local/bin/guile-ncurses-shell")
;; (setq geiser-active-implementations '(mit))
(setq geiser-active-implementations '(chez))
;; (setq geiser-active-implementations '(chez))
;; Disable bold fonts
(defun remap-faces-default-attributes ()
(let ((family (face-attribute 'default :family))
(height (face-attribute 'default :height)))
(mapcar (lambda (face)
(face-remap-add-relative
face :family family :slant 'normal :weight 'normal :height height))
(face-list))))
(when (display-graphic-p)
(add-hook 'minibuffer-setup-hook 'remap-faces-default-attributes)
(add-hook 'change-major-mode-after-body-hook 'remap-faces-default-attributes))
;; Eshell
(defalias 'open 'find-file-other-window)
(defalias 'clean 'eshell/clear-scrollback)
;; 80 character limit when writing text
(add-hook 'text-mode-hook 'turn-on-auto-fill)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(column-number-mode t)
'(custom-safe-themes
'("a6473f7abf949f4a6a1a9cc0dd37ea2e35ba3cea65d3442b98d65c5c5c5cb8d7" "b026761932dac55edfc103de7267ab1db5cd7cc183e06654a2be976cf3a09b9c" "2eeeb1813d66b7d1b858ecf7e4623f774ee555f4b6c1e6de93a1875c03af41de" "5a5e51dc0d54d7626f182dcc1712ed0bad80085db52da3fbe737be4f58d983d0" "4c5f4e96bbde8ab012c661b04c887d9cf65ee9fc37abcce661aabd3a098a69e9" "9c25bd583aa28e4a96af84c9bcf4b5c917bb2ec907ac9d5ab745e54b27104ec6" default))
'(display-time-mode t)
'(org-babel-load-languages '((awk . t) (lisp . t) (emacs-lisp . t) (C . t)))
'(org-confirm-babel-evaluate nil)
'(package-selected-packages
'(frames-only-mode exwm geiser-mit basic-theme geiser-chicken geiser-guile disaster multiple-cursors nasm-mode carp-mode flycheck ido-mode move-text undo-tree sorcery-theme autothemer rust-mode paredit forth-mode avy swiper auto-package-update magit expand-region go-mode tao-themes tao-theme almost-mono-themes use-package))
'(pdf-view-midnight-colors '("#dddddd" . "#000000"))
'(show-paren-mode t)
'(tool-bar-mode nil))
'(selectrum use-package undo-tree swiper slime rust-mode paredit nasm-mode multiple-cursors move-text magit helm haskell-mode god-mode go-mode geiser-mit geiser-guile geiser-chicken geiser-chez frames-only-mode exwm expand-region elpher dumb-jump disk-usage disaster dashboard basic-theme avy autothemer auto-package-update)))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)
;;
(put 'downcase-region 'disabled nil)

View File

@ -1,103 +1,57 @@
(setq gnutls-algorithm-priority "NORMAL:-VERS-TLS1.3")
;; Manually installed modes
(add-to-list 'load-path "~/.emacs.d/plugins/")
;; Package
(require 'package)
(setq package-archives '(("gnu" . "http://mirrors.163.com/elpa/gnu/")
("melpa" . "https://melpa.org/packages/")))
(package-initialize)
;; use-package
(unless (package-installed-p 'use-package)
(package-refresh-contents)
(package-install 'use-package))
;; auto-package-update automatically updates packages and removes old ones
;; Automatically update packages and removes old ones.
(use-package auto-package-update
:ensure t
:config
(setq auto-package-update-delete-old-versions t)
(setq auto-package-update-hide-results t)
(auto-package-update-maybe)
)
;; support color theme
(use-package autothemer
:ensure t)
(auto-package-update-maybe))
;; Light theme for using laptop outside.
(use-package basic-theme
:ensure t)
;; better incremental search with minibuffer
(use-package swiper
:ensure t
:bind ("C-s" . 'swiper))
;; (use-package almost-mono-themes
;; :ensure t
;; :init
;; (load-theme 'almost-mono-black t))
;; Languages
(use-package nasm-mode
:ensure t
:config
(add-to-list 'auto-mode-alist '("\\.\\(asm\\|s\\)$" . nasm-mode))
(setq nasm-basic-offset 4))
;;; Languages
(use-package haskell-mode
:ensure t
:config
(setq haskell-interactive-popup-errors nil)
:init
(add-hook 'haskell-mode-hook 'interactive-haskell-mode))
(use-package go-mode
:ensure t)
(use-package rust-mode
:ensure t)
(use-package elpher
(use-package geiser
:ensure t
:config
;; Make geiser flash the region being evaluated on C-c C-c, like SLIME does.
(add-hook 'geiser-mode-hook
(lambda ()
(define-key geiser-mode-map (kbd "C-c C-c") nil) ;; remove default C-c C-c binding
(local-set-key (kbd "C-c C-c") (lambda ()
(interactive)
(fez/flash-region)
(geiser-eval-definition)))))
;; geiser requires extra packages for every implementation you want to use
(use-package geiser-guile
:ensure t)
(use-package geiser-mit
:ensure t)
(use-package geiser-chez
:ensure t))
(use-package slime
:ensure t
:config
(setq inferior-lisp-program "sbcl"))
(use-package geiser
;; Amazing s-expression editing mode.
(use-package paredit
:ensure t
:config
(add-hook 'geiser-mode-hook
(lambda ()
(define-key geiser-mode-map (kbd "C-c C-c") nil) ;; remove default C-c C-c binding
(local-set-key (kbd "C-c C-c") (lambda ()
(interactive)
(flash-region)
(geiser-eval-definition))))))
(use-package geiser-guile
:ensure t)
(use-package geiser-mit
:ensure t)
(use-package geiser-chez
:ensure t)
(use-package geiser-chicken
:ensure t
:config
(setq geiser-chicken-binary "chicken-csi"))
(use-package disaster
:ensure t
:config
(add-hook 'c-mode-hook
(lambda () (local-set-key (kbd "C-c d") #'disaster))))
(add-hook 'scheme-mode-hook 'paredit-mode)
(add-hook 'lisp-mode-hook 'paredit-mode)
(add-hook 'emacs-lisp-mode-hook 'paredit-mode))
;;; Utility packages
;; undo-tree is mainly used for its redo functionality.
(use-package undo-tree
:ensure t
:bind
@ -106,6 +60,7 @@
:config
(global-undo-tree-mode))
;; Nice startup screen.
(use-package dashboard
:ensure t
:config
@ -115,31 +70,28 @@
(setq dashboard-set-footer nil)
(dashboard-setup-startup-hook))
;; Easier selection for s-expressions and other things.
(use-package expand-region
:ensure t
:bind
("C-=" . er/expand-region)
:config
(global-set-key (kbd "C-=") 'er/expand-region)
(pending-delete-mode t)) ; if you start typing while a word is selected, overwrite it
;; Move lines of text up or down.
(use-package move-text
:ensure t
:config
(global-set-key (kbd "M-p") 'move-text-up)
(global-set-key (kbd "M-n") 'move-text-down))
;; Multiple cursors make it easier to refactor stuff.
(use-package multiple-cursors
:ensure t
:config
(global-set-key (kbd "C->") 'mc/mark-next-like-this))
(use-package paredit
:ensure t
:config
(add-hook 'scheme-mode-hook 'paredit-mode)
(add-hook 'lisp-mode-hook 'paredit-mode)
(add-hook 'emacs-lisp-mode-hook 'paredit-mode))
;; jump to definitions and files with M-.
;; Jump to definitions and files with M-.
(use-package dumb-jump
:ensure t
:config
@ -150,18 +102,30 @@
:ensure t
:bind ("M-s" . avy-goto-char))
;; self explanatory
;; Amazing git porcelain.
(use-package magit
:ensure t)
(use-package ido
;; Minibuffer completion. Vertical display and faster than ido.
(use-package selectrum
:ensure t
:config
(ido-mode))
(selectrum-mode t))
;; (use-package flycheck
;; :ensure t
;; :config
;; )
;; better incremental search with minibuffer
(use-package swiper
:ensure t
:bind ("C-s" . 'swiper))
;; Instead of opening windows inside of Emacs, create new frames. This is great
;; for tiling window managers.
(use-package frames-only-mode
:ensure t
:config
(frames-only-mode))
;; Mode for browsing gemini/gopher sites.
(use-package elpher
:ensure t)
(provide 'packages)

83
tweaks.el Normal file
View File

@ -0,0 +1,83 @@
;;; tweaks.el
;; The settings in this file mostly correct bad defaults and add stuff I will
;; never really tinker with. Settings that are more subject to change can be
;; found in init.el.
;; Remove useless stuff.
(menu-bar-mode 0)
(tool-bar-mode 0)
(scroll-bar-mode 0)
(defun my/disable-scroll-bars (frame)
(modify-frame-parameters frame
'((vertical-scroll-bars . nil)
(horizontal-scroll-bars . nil))))
(add-hook 'after-make-frame-functions 'my/disable-scroll-bars)
;; Make sure UTF-8 is used.
(set-language-environment "UTF-8")
;; Disable italic text.
(set-face-italic 'font-lock-comment-face nil)
;; Disable bold text (looks huge, can't remember where I found it)
(defun remap-faces-default-attributes ()
(let ((family (face-attribute 'default :family))
(height (face-attribute 'default :height)))
(mapcar (lambda (face)
(face-remap-add-relative
face :family family :slant 'normal :weight 'normal :height height))
(face-list))))
(when (display-graphic-p)
(add-hook 'minibuffer-setup-hook 'remap-faces-default-attributes)
(add-hook 'change-major-mode-after-body-hook 'remap-faces-default-attributes))
;; Move backup files to another folder.
(setq backup-directory-alist '((".*" . "~/.emacs.d/backups/"))
auto-save-file-name-transforms '((".*" "~/.emacs.d/backups/" t)))
;; don't create .#<filename> files.
(setq create-lockfiles nil)
;; save minibuffer history between sessions.
(savehist-mode 1)
;; Y or N instead of Yes or No.
(defalias 'yes-or-no-p 'y-or-n-p)
;; Smaller skips when cursor reaches end of screen.
(setq scroll-conservatively 100)
;; Disable bell.
(setq ring-bell-function 'ignore)
;; Subword for camelCase words (useful for Haskell).
(global-subword-mode t)
;; Make ansi-term not ask for shell every time it starts.
(defvar term-shell "/bin/mksh")
(defadvice ansi-term (before force-bash)
(interactive (list term-shell)))
(ad-activate 'ansi-term)
;; Set the character limit to 80 and autowrap at character limit when writing text.
(setq-default fill-column 80)
(add-hook 'text-mode-hook 'turn-on-auto-fill)
;; I don't remember what this does, but it's probably important.
(put 'downcase-region 'disabled nil)
;; Line numbers
(global-linum-mode)
;; Ask before closing Emacs
(setq confirm-kill-emacs 'y-or-n-p)
;; Mark files with shebangs as executable automatically (thanks archenoth!)
(add-hook 'after-save-hook 'executable-make-buffer-file-executable-if-script-p)
;; delete trailing whitespace before saving
(add-hook 'before-save-hook 'delete-trailing-whitespace)
;; Disable custom adding stuff to init.el by making it add stuff to a file in /tmp instead.
;; Thanks Christopher Wellons! (first comment at https://irreal.org/blog/?p=3765)
(setq custom-file (make-temp-file "emacs-custom"))