X-Git-Url: https://git.shemshak.org/~bandali/configs/blobdiff_plain/e2178fd3f770735f942409300876a0d22c470a0d..8146824a5a0175e7e51e5cba82ef88cf105ef50d:/init.el?ds=sidebyside diff --git a/init.el b/init.el index 57861bb..4dff474 100644 --- a/init.el +++ b/init.el @@ -1,6 +1,6 @@ ;;; init.el --- bandali's emacs configuration -*- lexical-binding: t -*- -;; Copyright (C) 2018-2019 Amin Bandali +;; Copyright (C) 2018-2020 Amin Bandali ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by @@ -239,6 +239,40 @@ For disabling the behaviour for certain buffers and/or modes." (interactive) (kill-buffer (current-buffer))) +(defun b/move-indentation-or-beginning-of-line (arg) + "Move to the indentation or to the beginning of line." + (interactive "^p") + ;; (if (bolp) + ;; (back-to-indentation) + ;; (move-beginning-of-line arg)) + (if (= (point) + (progn (back-to-indentation) + (point))) + (move-beginning-of-line arg))) + +(defun b/join-line-top () + "Like `join-line', but join next line to the current line." + (interactive) + (join-line 1)) + +(defun b/duplicate-line-or-region (&optional n) + "Duplicate the current line, or region (if active). +Make N (default: 1) copies of the current line or region." + (interactive "*p") + (let ((u-r-p (use-region-p)) ; if region is active + (n1 (or n 1))) + (save-excursion + (let ((text + (if u-r-p + (buffer-substring (region-beginning) (region-end)) + (prog1 (thing-at-point 'line) + (end-of-line) + (if (eobp) + (newline) + (forward-line 1)))))) + (dotimes (_ (abs n1)) + (insert text)))))) + ;;; Defaults @@ -261,7 +295,7 @@ For disabling the behaviour for certain buffers and/or modes." ;; scroll-margin 1 ;; scroll-conservatively 10000 scroll-step 1 - scroll-conservatively 10 + scroll-conservatively 101 scroll-preserve-screen-position 1 ;; focus follows mouse mouse-autoselect-window t) @@ -490,7 +524,9 @@ For disabling the behaviour for certain buffers and/or modes." ;;; General bindings (bind-keys + ("C-a" . b/move-indentation-or-beginning-of-line) ("C-c a i" . ielm) + ("C-c d" . b/duplicate-line-or-region) ("C-c e b" . eval-buffer) ("C-c e e" . eval-last-sexp) @@ -511,6 +547,8 @@ For disabling the behaviour for certain buffers and/or modes." ("C-S-h C" . describe-char) ("C-S-h F" . describe-face) + ("C-S-j" . b/join-line-top) + ("C-c x" . execute-extended-command) ("C-x k" . b/kill-current-buffer) @@ -549,6 +587,8 @@ For disabling the behaviour for certain buffers and/or modes." (require 'bandali-org) +(require 'bandali-theme) + ;; *the* right way to do git (use-package magit :bind (("C-x g" . magit-status) @@ -651,16 +691,26 @@ For disabling the behaviour for certain buffers and/or modes." (require 'bandali-message) (require 'bandali-ebdb) +;; IRC (with ERC and ZNC) +(require 'bandali-erc) + +(use-package scpaste + :config + (setq scpaste-http-destination "https://p.bndl.org" + scpaste-scp-destination "p:~")) + ;;; Editing -(comment + ;; highlight uncommitted changes in the left fringe (use-package diff-hl :defer 0.6 :config (setq diff-hl-draw-borders nil) (global-diff-hl-mode) - :hook (magit-post-refresh . diff-hl-magit-post-refresh)) + :hook + ((magit-pre-refresh . diff-hl-magit-pre-refresh) + (magit-post-refresh . diff-hl-magit-post-refresh))) ;; display Lisp objects at point in the echo area (use-package eldoc @@ -711,8 +761,8 @@ For disabling the behaviour for certain buffers and/or modes." (use-package conf-mode :mode "\\.*rc$") -(use-package sh-mode - :mode "\\.bashrc$") +(use-package sh-script + :mode ("\\.bashrc$" . sh-mode)) (use-package company :disabled @@ -733,6 +783,7 @@ For disabling the behaviour for certain buffers and/or modes." ) (use-package flycheck + :disabled :defer 0.6 :hook (prog-mode . flycheck-mode) :bind @@ -747,10 +798,11 @@ For disabling the behaviour for certain buffers and/or modes." (setq flycheck-check-syntax-automatically '(mode-enabled save)) :custom (flycheck-mode-line-prefix "flyc")) -(use-package flyspell) +;; (use-package flyspell) ;; http://endlessparentheses.com/ispell-and-apostrophes.html (use-package ispell + :disabled :defer 0.6 :config ;; ’ can be part of a word @@ -788,34 +840,29 @@ For disabling the behaviour for certain buffers and/or modes." (setq indent-tabs-mode nil)) (add-hook 'lisp-interaction-mode-hook #'indent-spaces-mode)) -(use-package reveal - :hook (emacs-lisp-mode . reveal-mode)) - -(use-package elisp-mode) - -;; (use-package alloy-mode -;; :straight (:host github :repo "dwwmmn/alloy-mode") -;; :mode "\\.\\(als\\|dsh\\)\\'" -;; :config -;; (setq alloy-basic-offset 2) -;; ;; (defun b/alloy-simple-indent (start end) -;; ;; (interactive "r") -;; ;; ;; (if (region-active-p) -;; ;; ;; (indent-rigidly start end alloy-basic-offset) -;; ;; ;; (if (bolp) -;; ;; ;; (indent-rigidly (line-beginning-position) -;; ;; ;; (line-end-position) -;; ;; ;; alloy-basic-offset))) -;; ;; (indent-to (+ (current-column) alloy-basic-offset))) -;; :bind (:map alloy-mode-map -;; ("RET" . electric-newline-and-maybe-indent) -;; ;; ("TAB" . b/alloy-simple-indent) -;; ("TAB" . indent-for-tab-command)) -;; :hook (alloy-mode . (lambda () (setq-local indent-tabs-mode nil)))) - -(eval-when-compile (defvar lean-mode-map)) +(use-package alloy-mode + :mode "\\.\\(als\\|dsh\\)\\'" + :config + (setq alloy-basic-offset 2) + ;; (defun b/alloy-simple-indent (start end) + ;; (interactive "r") + ;; ;; (if (region-active-p) + ;; ;; (indent-rigidly start end alloy-basic-offset) + ;; ;; (if (bolp) + ;; ;; (indent-rigidly (line-beginning-position) + ;; ;; (line-end-position) + ;; ;; alloy-basic-offset))) + ;; (indent-to (+ (current-column) alloy-basic-offset))) + :bind (:map alloy-mode-map + ("RET" . electric-newline-and-maybe-indent) + ;; ("TAB" . b/alloy-simple-indent) + ("TAB" . indent-for-tab-command)) + :hook (alloy-mode . (lambda () (setq-local indent-tabs-mode nil)))) + (use-package lean-mode + :disabled :defer 0.4 + :init (eval-when-compile (defvar lean-mode-map)) :bind (:map lean-mode-map ("S-SPC" . company-complete)) :config @@ -827,8 +874,6 @@ For disabling the behaviour for certain buffers and/or modes." lean-input-user-translations '(("/" "/"))) (lean-input-setup)) -(use-package mhtml-mode) - (use-package sgml-mode :config (setq sgml-basic-offset 0)) @@ -846,26 +891,30 @@ For disabling the behaviour for certain buffers and/or modes." (setq emmet-move-cursor-between-quotes t) :hook (css-mode html-mode sgml-mode)) -(use-package geiser) +(use-package geiser + :disabled) (use-package geiser-guile + :disabled :config (setq geiser-guile-load-path "~/src/git/guix")) -(use-package guix) - -(comment - (use-package auctex - :custom - (font-latex-fontify-sectioning 'color))) +(use-package guix + :disabled) (use-package go-mode :disabled) (use-package po-mode + :disabled :hook (po-mode . (lambda () (run-with-timer 0.1 nil 'View-exit)))) +(use-package auctex + :disabled + :custom + (font-latex-fontify-sectioning 'color)) + (use-package tex-mode :config (cl-delete-if @@ -879,94 +928,8 @@ For disabling the behaviour for certain buffers and/or modes." ;; :mode "\\.grg\\'") -;;; Theme - -(add-to-list 'custom-theme-load-path - (expand-file-name - (convert-standard-filename "lisp") user-emacs-directory)) -(load-theme 'tangomod t) - -(use-package smart-mode-line - :commands (sml/apply-theme) - :demand - :config - ;; thanks, but no thnaks; don't make fixed-width fills. - (defun sml/fill-for-buffer-identification () "") - (setq sml/theme 'tangomod) - (sml/setup) - (smart-mode-line-enable)) - -(use-package doom-modeline - :disabled - :demand - :hook (after-init . doom-modeline-init) - :custom - (doom-modeline-buffer-file-name-style 'relative-to-project)) - -(use-package doom-themes) - -(use-package moody - :disabled - :demand - :config - (setq x-underline-at-descent-line t) - (let ((line (face-attribute 'mode-line :underline))) - (set-face-attribute 'mode-line nil :overline line) - (set-face-attribute 'mode-line-inactive nil :overline line) - (set-face-attribute 'mode-line-inactive nil :underline line) - (set-face-attribute 'mode-line nil :box nil) - (set-face-attribute 'mode-line-inactive nil :box nil) - (set-face-attribute 'mode-line-inactive nil :background "#e1e1e1")) ; d3d7cf - (moody-replace-mode-line-buffer-identification) - (moody-replace-vc-mode)) - -(use-package mini-modeline - :disabled - :demand - :config (mini-modeline-mode)) - -(defvar b/org-mode-font-lock-keywords - '(("[ \t]*\\(#\\+\\(BEGIN\\|END\\|begin\\|end\\)_\\(\\S-+\\)\\)[ \t]*\\([^\n:]*\\)" - (1 '(:foreground "#5a5b5a" :background "#292b2b") t) ; directive - (3 '(:foreground "#81a2be" :background "#292b2b") t) ; kind - (4 '(:foreground "#c5c8c6") t))) ; title - "For use with the `doom-tomorrow-night' theme.") - -(defun b/lights-on () - "Enable my favourite light theme." - (interactive) - (mapc #'disable-theme custom-enabled-themes) - (load-theme 'tangomod t) - (when (featurep 'smart-mode-line) - (sml/apply-theme 'tangomod)) - (font-lock-remove-keywords - 'org-mode b/org-mode-font-lock-keywords) - (when (featurep 'erc-hl-nicks) - (erc-hl-nicks-reset-face-table)) - (when (featurep 'exwm-systemtray) - (exwm-systemtray--refresh))) - -(defun b/lights-off () - "Go dark." - (interactive) - (mapc #'disable-theme custom-enabled-themes) - (load-theme 'doom-one t) - (when (featurep 'smart-mode-line) - (sml/apply-theme 'automatic)) - (font-lock-add-keywords - 'org-mode b/org-mode-font-lock-keywords t) - (when (featurep 'erc-hl-nicks) - (erc-hl-nicks-reset-face-table)) - (when (featurep 'exwm-systemtray) - (exwm-systemtray--refresh))) - -(bind-keys - ("C-c t d" . b/lights-off) - ("C-c t l" . b/lights-on)) - - ;;; Emacs enhancements & auxiliary packages - +(comment (use-package man :config (setq Man-width 80)) @@ -1031,12 +994,6 @@ For disabling the behaviour for certain buffers and/or modes." ("C-c j" . crux-top-join-line) ("C-S-j" . crux-top-join-line))) -(use-package mwim - :bind (("C-a" . mwim-beginning-of-code-or-line) - ("C-e" . mwim-end-of-code-or-line) - ("" . mwim-beginning-of-line-or-code) - ("" . mwim-end-of-line-or-code))) - (use-package projectile :disabled :defer 0.5 @@ -1258,12 +1215,7 @@ For disabling the behaviour for certain buffers and/or modes." (use-package window :bind - (("C-c w e" . (lambda () - (interactive) - (split-window-right) - (other-window 1) - (erc-switch-to-buffer))) - ("C-c w s l" . (lambda () + (("C-c w s l" . (lambda () (interactive) (split-window-right) (other-window 1))) @@ -1335,10 +1287,6 @@ For disabling the behaviour for certain buffers and/or modes." (goto-char (cdr macro))) (reftex-this-word))))) -(use-package minions - :demand - :config (minions-mode)) - (use-package dmenu :custom (dmenu-prompt-string "run: ") @@ -1354,12 +1302,6 @@ For disabling the behaviour for certain buffers and/or modes." :config (eosd-start)) -(use-package scpaste - :disabled - :config - (setq scpaste-http-destination "https://p.bndl.org" - scpaste-scp-destination "nix:/var/www/p.bndl.org")) - (use-package eww :bind ("C-c a e w" . eww) :custom @@ -1367,82 +1309,6 @@ For disabling the behaviour for certain buffers and/or modes." (getenv "XDG_DOWNLOAD_DIR")))) -;;; IRC (with ERC and ZNC) - -(use-package erc - :bind (("C-c b b" . erc-switch-to-buffer) - :map erc-mode-map - ("M-a" . erc-track-switch-buffer)) - :custom - (erc-join-buffer 'bury) - (erc-lurker-hide-list '("JOIN" "PART" "QUIT")) - (erc-nick "bandali") - (erc-prompt "erc>") - (erc-rename-buffers t) - (erc-server-reconnect-attempts 5) - (erc-server-reconnect-timeout 3) - :config - (defun erc-cmd-OPME () - "Request chanserv to op me." - (erc-message "PRIVMSG" - (format "chanserv op %s %s" - (erc-default-target) - (erc-current-nick)) nil)) - (defun erc-cmd-DEOPME () - "Deop myself from current channel." - (erc-cmd-DEOP (format "%s" (erc-current-nick)))) - (add-to-list 'erc-modules 'keep-place) - (add-to-list 'erc-modules 'notifications) - (add-to-list 'erc-modules 'smiley) - (add-to-list 'erc-modules 'spelling) - (add-to-list 'erc-modules 'scrolltoplace) - (erc-update-modules)) - -(use-package erc-fill - :after erc - :custom - (erc-fill-column 77) - (erc-fill-function 'erc-fill-static) - (erc-fill-static-center 18)) - -(use-package erc-pcomplete - :after erc - :custom - (erc-pcomplete-nick-postfix ", ")) - -(use-package erc-track - :after erc - :bind (("C-c a e t d" . erc-track-disable) - ("C-c a e t e" . erc-track-enable)) - :custom - (erc-track-enable-keybindings nil) - (erc-track-exclude-types '("JOIN" "MODE" "NICK" "PART" "QUIT" - "324" "329" "332" "333" "353" "477")) - (erc-track-position-in-mode-line t) - (erc-track-priority-faces-only 'all) - (erc-track-shorten-function nil)) - -(use-package erc-hl-nicks - :after erc) - -(use-package erc-scrolltoplace - :after erc) - -(use-package znc - :bind (("C-c a e e" . znc-erc) - ("C-c a e a" . znc-all)) - :config - (let ((pwd (let ((auth (auth-source-search :host "znca"))) - (cond - ((null auth) (error "Couldn't find znca's authinfo")) - (t (funcall (plist-get (car auth) :secret))))))) - (setq znc-servers - `(("znc.shemshak.org" 1337 t - ((freenode "amin/freenode" ,pwd))) - ("znc.shemshak.org" 1337 t - ((oftc "amin/oftc" ,pwd))))))) - - ;;; Post initialization )