-;;; init.el --- mab's emacs configuration -*- lexical-binding: t -*-
+;;; init.el --- bandali's emacs configuration -*- lexical-binding: t -*-
-;; Copyright (C) 2018-2019 Amin Bandali <mab@gnu.org>
+;; Copyright (C) 2018-2019 Amin Bandali <bandali@gnu.org>
;; 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
;;; Commentary:
-;; Emacs configuration of Amin Bandali, computer scientist, free
-;; software activist, GNU maintainer & webmaster. Packages are
-;; installed from GNU Guix, for purely functional and fully
-;; reproducible package management. Before switching to GNU Guix,
-;; I used straight.el for package management, and before that, Borg.
+;; GNU Emacs configuration of Amin Bandali, computer scientist,
+;; Free Software activist, and GNU maintainer & webmaster. Packages
+;; are installed through GNU Guix for a fully reproducible setup.
+;; Before switching to Guix, I used straight.el, and before that Borg.
;; Over the years, I've taken inspiration from configurations of many
;; great people. Some that I can remember off the top of my head are:
(setq b/emacs-initialized t
gc-cons-threshold b/gc-cons-threshold
gc-cons-percentage b/gc-cons-percentage
- file-name-handler-alist b/file-name-handler-alist))
+ file-name-handler-alist b/file-name-handler-alist)
+ (with-eval-after-load 'exwm-workspace
+ (setq-default
+ mode-line-format
+ (append
+ mode-line-format
+ '((:eval
+ (format
+ "[%s]" (number-to-string
+ exwm-workspace-current-index))))))))
(add-hook 'after-init-hook #'b/post-init)
;; increase number of lines kept in *Messages* log
;;; whoami
(setq user-full-name "Amin Bandali"
- user-mail-address "mab@gnu.org")
+ user-mail-address "bandali@gnu.org")
\f
;;; comment macro
\f
;;; Initial setup
-(defvar b/exwm-p (string= (system-name) "jirud")
+(defvar b/exwm-p (string= (system-name) "chaman")
"Whether or not we will be using `exwm'.")
;; keep ~/.emacs.d clean
(exec-path-from-shell-initialize)
;; while we're at it, let's fix access to our running ssh-agent
(exec-path-from-shell-copy-env "SSH_AGENT_PID")
- (exec-path-from-shell-copy-env "SSH_AUTH_SOCK"))
+ (exec-path-from-shell-copy-env "SSH_AUTH_SOCK")
+ (exec-path-from-shell-copy-env "XDG_DOWNLOAD_DIR"))
;; start up emacs server. see
;; https://www.gnu.org/software/emacs/manual/html_node/emacs/Emacs-Server.html#Emacs-Server
(display-time-mode)
:custom
(display-time-default-load-average nil)
- (display-time-format "%a %b %-e, %-l:%M%P")
+ (display-time-format "%a %b %-e %-l:%M%P")
(display-time-mail-icon '(image :type xpm :file "gnus/gnus-pointer.xpm" :ascent center))
(display-time-use-mail-icon t))
([XF86AudioMute] .
(lambda ()
(interactive)
- (start-process "" nil "pamixer" "--toggle-mute")))
+ (start-process "" nil "amixer" "set" "'Master',0" "toggle")))
([XF86AudioLowerVolume] .
(lambda ()
(interactive)
(start-process
- "" nil "pamixer" "--allow-boost" "--decrease" "5")))
+ "" nil "amixer" "set" "'Master',0" "5%-")))
([XF86AudioRaiseVolume] .
(lambda ()
(interactive)
(start-process
- "" nil "pamixer" "--allow-boost" "--increase" "5")))
+ "" nil "amixer" "set" "'Master',0" "5%+")))
([XF86AudioPlay] .
(lambda ()
(interactive)
(exwm-manage-finish . (lambda ()
(when exwm-class-name
(cond
- ((string= exwm-class-name "Abrowser")
+ ((string= exwm-class-name "IceCat")
(exwm-input-set-local-simulation-keys
`(,@exwm-input-simulation-keys
([?\C-\S-d] . [?\C-d]))))
("C-S-l" . b/eshell-clear)
("M-r" . counsel-esh-history)
;; ([tab] . company-complete)
- :map eshell-hist-mode-map
- ("M-r" . counsel-esh-history)))
+ )
+ (if (version< "27" emacs-version)
+ (bind-keys :map eshell-hist-mode-map
+ ("M-r" . counsel-esh-history))
+ (bind-keys :map eshell-mode-map
+ ("M-r" . counsel-esh-history))))
:hook (eshell-mode . b/eshell-setup)
:custom
(mode . message-mode)))
("web"
(or
- (mode . web-mode)
+ ;; (mode . web-mode)
+ (mode . mhtml-mode)
(mode . css-mode)
(mode . scss-mode)
(mode . js2-mode)))
("\\.flac\\'" "mpv")))
:bind (:map dired-mode-map
("b" . dired-up-directory)
- ("e" . dired-ediff-files)
- ("E" . dired-toggle-read-only)
+ ("E" . dired-ediff-files)
+ ("e" . dired-toggle-read-only)
("\\" . dired-hide-details-mode)
("z" . (lambda ()
(interactive)
;; alternative: hs-lint https://github.com/ndmitchell/hlint/blob/20e116a043f2073c57b17b24ae6364b5e433ba7e/data/hs-lint.el
)
+(use-package mhtml-mode)
+
(use-package sgml-mode
:config
(setq sgml-basic-offset 2))
(setq css-indent-offset 2))
(use-package web-mode
+ :disabled
:mode "\\.html\\'"
:config
(b/setq-every 2
(web-mode-enable-auto-indentation nil))
(use-package emmet-mode
- :after (:any web-mode css-mode sgml-mode)
+ :after (:any mhtml-mode css-mode sgml-mode)
:bind* (("C-)" . emmet-next-edit-point)
("C-(" . emmet-prev-edit-point))
:config
(unbind-key "C-j" emmet-mode-keymap)
(setq emmet-move-cursor-between-quotes t)
- :hook (web-mode css-mode html-mode sgml-mode))
+ :hook (css-mode html-mode sgml-mode))
(comment
(use-package meghanada
: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))
(interactive)
(mapc #'disable-theme custom-enabled-themes)
(load-theme 'tangomod t)
- (sml/apply-theme 'tangomod)
+ (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)
(interactive)
(mapc #'disable-theme custom-enabled-themes)
(load-theme 'doom-one t)
- (sml/apply-theme 'automatic)
+ (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)
"C-c f n" "footnote")
(which-key-add-major-mode-key-based-replacements 'org-mode
"C-c C-v" "org-babel")
- (which-key-add-major-mode-key-based-replacements 'web-mode
- "C-c C-a" "web/attributes"
- "C-c C-b" "web/blocks"
- "C-c C-d" "web/dom"
- "C-c C-e" "web/element"
- "C-c C-t" "web/tags")
(which-key-mode)
:custom
;; easily type pretty quotes & other typography, like ‘’“”-–—«»‹›
(use-package typo
+ :disabled
:defer 0.5
:config
- :hook (((text-mode erc-mode web-mode) . typo-mode)
- ((tex-mode git-commit-mode) . (lambda ()(typo-mode -1)))))
+ :hook ((html-mode mhtml-mode) . typo-mode))
(use-package electric
:disabled
("C-c D b" . debbugs-gnu-bugs)
("C-c D e" .
(lambda ()
- (interactive)
+ (interactive) ; bug-gnu-emacs
(setq debbugs-gnu-current-suppress t)
(debbugs-gnu debbugs-gnu-default-severities '("emacs"))))
- ("C-c D g" .
+ ("C-c D g" . ; bug-gnuzilla
(lambda ()
(interactive)
(setq debbugs-gnu-current-suppress t)
(debbugs-gnu debbugs-gnu-default-severities '("gnuzilla"))))
- ("C-c D G" .
+ ("C-c D G b" . ; bug-guix
(lambda ()
(interactive)
(setq debbugs-gnu-current-suppress t)
- (debbugs-gnu debbugs-gnu-default-severities '("guix"))))))
+ (debbugs-gnu debbugs-gnu-default-severities '("guix"))))
+ ("C-c D G p" . ; guix-patches
+ (lambda ()
+ (interactive)
+ (setq debbugs-gnu-current-suppress t)
+ (debbugs-gnu debbugs-gnu-default-severities '("guix-patches"))))))
(use-package org-ref
:init
(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
+ (eww-download-directory (file-name-as-directory
+ (getenv "XDG_DOWNLOAD_DIR"))))
+
\f
;;; Email (with Gnus)
read-mail-command 'gnus)
(use-package gnus
- :bind (("s-m" . gnus)
+ :bind (("s-m" . gnus-plugged)
("s-M" . gnus-unplugged)
- ("C-c a m" . gnus)
+ ("C-c a m" . gnus-plugged)
("C-c a M" . gnus-unplugged))
:init
(setq
(setq gnus-message-replysign t
gnus-posting-styles
'((".*"
- (address "mab@gnu.org"))
+ (address "bandali@gnu.org"))
("nnimap\\+gnu:l\\..*"
(signature nil))
("nnimap\\+gnu:.*"
(use-package mm-uu
:config
- (set-face-attribute 'mm-uu-extract nil :extend t)
+ (when (version< "27" emacs-version)
+ (set-face-attribute 'mm-uu-extract nil :extend t))
:custom
(mm-uu-diff-groups-regexp
"\\(gmane\\|gnu\\|l\\)\\..*\\(diff\\|commit\\|cvs\\|bug\\|dev\\)"))
message-subscribed-address-functions
'(gnus-find-subscribed-addresses)
message-dont-reply-to-names
- "\\(\\(\\(amin\\|mab\\)@shemshak\\.org\\)\\|\\(.*@aminb\\.org\\)\\|\\(\\(mab\\|bandali\\|aminb?\\)@gnu\\.org\\)\\|\\(a?bandali@\\(csclub\\.\\)?uwaterloo\\.ca\\)\\)")
+ "\\(\\(\\(amin\\|mab\\)@shemshak\\.org\\)\\|\\(.*@aminb\\.org\\)\\|\\(\\(bandali\\|mab\\|aminb?\\)@gnu\\.org\\)\\|\\(a?bandali@\\(csclub\\.\\)?uwaterloo\\.ca\\)\\)")
;; (require 'company-ebdb)
:hook (;; (message-setup . mml-secure-message-sign-pgpmime)
(message-mode . flyspell-mode)