#+begin_src emacs-lisp
(setq modus-themes-slanted-constructs t
modus-themes-bold-constructs t
- modus-themes-org-blocks 'rainbow
+ modus-themes-org-blocks 'grayscale
modus-themes-mode-line '3d
modus-themes-scale-headings t
modus-themes-region 'no-extend
(ligature-set-ligatures
'(prog-mode text-mode)
'("-|" "-~" "---" "-<<" "-<" "--" "->" "->>" "-->" "///" "/=" "/=="
- "/>" "//" "/*" "*>" "***" "*/" "<-" "<<-" "<=>" "<=" "<|" "<||"
+ "/>" "//" "/*" "*>" "*/" "<-" "<<-" "<=>" "<=" "<|" "<||"
"<|||" "<|>" "<:" "<>" "<-<" "<<<" "<==" "<<=" "<=<" "<==>" "<-|"
"<<" "<~>" "<=|" "<~~" "<~" "<$>" "<$" "<+>" "<+" "</>" "</" "<*"
"<*>" "<->" "<!--" ":>" ":<" ":::" "::" ":?" ":?>" ":=" "::=" "=>>"
:config (evil-goggles-mode)
(evil-goggles-use-diff-faces))
#+end_src
-** Highlight "TODO" comments
+** Highlight TODOs in comments
#+begin_src emacs-lisp
(use-package hl-todo
:straight (hl-todo :type git :host github :repo "tarsius/hl-todo")
- :config (global-hl-todo-mode))
+ :config (global-hl-todo-mode 1))
#+end_src
** Don't lose cursor
#+begin_src emacs-lisp
:custom (evilnc-invert-comment-line-by-line nil))
#+end_src
** Undo tree
-Fix the oopsies!
+Fix the oopsies! Maybe replace with undo-fu or Emacs 28 built in undo-redo.
#+begin_src emacs-lisp
(use-package undo-tree
:custom
:custom
(org-ellipsis " ▾")
(org-agenda-start-with-log-mode t)
+ (org-agenda-files (quote ("~/Org/tasks.org" "~/Org/break.org")))
(org-log-done 'time)
(org-log-into-drawer t)
(org-src-tab-acts-natively t)
(org-src-fontify-natively t)
(org-startup-indented t)
(org-hide-emphasis-markers t)
- (org-fontify-whole-block-delimiter-line nil))
-#+end_src
-** Automatically tangle
-#+begin_src emacs-lisp
- (add-hook 'org-mode-hook
- (lambda () (add-hook 'after-save-hook #'org-babel-tangle
- :append :local)))
+ (org-fontify-whole-block-delimiter-line nil)
+ :bind ("C-c a" . org-agenda))
#+end_src
** Tempo
#+begin_src emacs-lisp
(add-to-list 'org-structure-template-alist '("al" . "src yml :tangle ~/.config/alacritty/alacritty.yml"))
(add-to-list 'org-structure-template-alist '("ipy" . "src python :tangle ~/.ipython/"))
(add-to-list 'org-structure-template-alist '("pi" . "src conf :tangle ~/.config/picom/picom.conf"))
- (add-to-list 'org-structure-template-alist '("git" . "src plain :tangle ~/.gitconfig")))
+ (add-to-list 'org-structure-template-alist '("git" . "src conf :tangle ~/.gitconfig"))
+ (add-to-list 'org-structure-template-alist '("du" . "src conf :tangle ~/.config/dunst/dunstrc")))
#+end_src
* Autocompletion
** Ivy
:map ivy-minibuffer-map
("TAB" . ivy-alt-done)
:map ivy-switch-buffer-map
- ("C-d" . ivy-switch-buffer-kill))
+ ("M-d" . ivy-switch-buffer-kill))
:config (ivy-mode))
#+end_src
** Ivy-rich
#+begin_src emacs-lisp
(use-package ivy-rich
- :after ivy
+ :after (ivy counsel)
:config (ivy-rich-mode))
#+end_src
** Counsel
:load-path "/usr/share/emacs/site-lisp/mu4e"
:bind (("C-c m" . mu4e))
:config
-
(setq user-full-name "Armaan Bhojwani"
smtpmail-local-domain "armaanb.net"
smtpmail-stream-type 'ssl
(smtpmail-smtp-server "smtp.mailbox.org")
(mu4e-drafts-folder . "/school/Drafts")
(mu4e-trash-folder . "/school/Trash")))))
-
(add-to-list 'mu4e-bookmarks
- '(
- :name "Unified inbox"
- :query "maildir:\"/personal/INBOX\" or maildir:\"/school/INBOX\""
- :key ?b)))
+ '(:name "Unified inbox"
+ :query "maildir:\"/personal/INBOX\" or maildir:\"/school/INBOX\""
+ :key ?b)))
#+end_src
** Calendar
#+begin_src emacs-lisp
Another file has more specific network configuration.
#+begin_src emacs-lisp
(use-package circe
- :config
- (load "~/.emacs.d/irc.el"))
- (use-package circe-color-nicks
- :after circe
- :straight (:type built-in))
+ :config (load-file "~/.emacs.d/irc.el"))
+
(use-package circe-chanop
- :after circe
- :straight (:type built-in))
+ :straight (:type built-in)
+ :after circe)
+
+ (use-package circe-color-nicks
+ :straight (:type built-in)
+ :after circe)
#+end_src
** Default browser
-Set EWW as default browser except for videos
+Set EWW as default browser except for videos.
#+begin_src emacs-lisp
(defun browse-url-mpv (url &optional new-window)
"Open URL in MPV."
(start-process "mpv" "*mpv*" "mpv" url))
- (setq browse-url-browser-function
+ (setq browse-url-handlers
(quote
(("youtu\\.?be" . browse-url-mpv)
- ("." . eww-browse-url))))
+ ("." . eww-browse-url)
+ )))
+#+end_src
+** EWW
+Some EWW enhancements.
+*** Give buffer a useful name
+#+begin_src emacs-lisp
+ ;; From https://protesilaos.com/dotemacs/
+ (defun prot-eww--rename-buffer ()
+ "Rename EWW buffer using page title or URL.
+ To be used by `eww-after-render-hook'."
+ (let ((name (if (eq "" (plist-get eww-data :title))
+ (plist-get eww-data :url)
+ (plist-get eww-data :title))))
+ (rename-buffer (format "*%s # eww*" name) t)))
+
+ (add-hook 'eww-after-render-hook #'prot-eww--rename-buffer)
+#+end_src
+*** Better entrypoint
+#+begin_src emacs-lisp
+ ;; From https://protesilaos.com/dotemacs/
+ (defun prot-eww-browse-dwim (url &optional arg)
+ "Visit a URL, maybe from `eww-prompt-history', with completion.
+
+ With optional prefix ARG (\\[universal-argument]) open URL in a
+ new eww buffer.
+
+ If URL does not look like a valid link, run a web query using
+ `eww-search-prefix'.
+
+ When called from an eww buffer, provide the current link as
+ initial input."
+ (interactive
+ (list
+ (completing-read "Query:" eww-prompt-history
+ nil nil (plist-get eww-data :url) 'eww-prompt-history)
+ current-prefix-arg))
+ (eww url (if arg 4 nil)))
+
+ (global-set-key (kbd "C-c w") 'prot-eww-browse-dwim)
#+end_src
** Emacs Anywhere
Use Emacs globally. Use the Emacs daemon and bind a key in your wm to
#+end_src
** Git
*** Magit
+# TODO: Write a command that commits hunk, skipping staging step.
#+begin_src emacs-lisp
(use-package magit
- :hook (git-commit-setup-hook . pinentry-start))
+ :hook (magit-mode-hook. pinentry-start))
#+end_src
*** Colored diff in line number area
#+begin_src emacs-lisp
(use-package diff-hl
:straight (diff-hl :type git :host github :repo "dgutov/diff-hl")
+ :hook ((magit-pre-refresh-hook . diff-hl-magit-pre-refresh)
+ (magit-post-refresh-hook . diff-hl-magit-post-refresh))
:config (global-diff-hl-mode))
#+end_src
+* General text editing
+** Indentation
+Indent after every change.
+#+begin_src emacs-lisp
+ (use-package aggressive-indent
+ :config (global-aggressive-indent-mode))
+#+end_src
+** Spell checking
+Spell check in text mode, and in prog-mode comments.
+#+begin_src emacs-lisp
+ (dolist (hook '(text-mode-hook))
+ (add-hook hook (lambda () (flyspell-mode))))
+ (dolist (hook '(change-log-mode-hook log-edit-mode-hook))
+ (add-hook hook (lambda () (flyspell-mode -1))))
+ (add-hook 'prog-mode (lambda () (flyspell-prog mode)))
+#+end_src
+** Expand tabs to spaces
+#+begin_src emacs-lisp
+ (setq-default tab-width 2)
+#+end_src
+** Copy kill ring to clipboard
+#+begin_src emacs-lisp
+ (setq x-select-enable-clipboard t)
+ (defun copy-kill-ring-to-xorg ()
+ "Copy the current kill ring to the xorg clipboard."
+ (interactive)
+ (x-select-text (current-kill 0)))
+#+end_src
+** Browse kill ring
+#+begin_src emacs-lisp
+ (use-package browse-kill-ring)
+#+end_src
+** Save place
+Opens file where you left it.
+#+begin_src emacs-lisp
+ (save-place-mode)
+#+end_src
+** Writing mode
+Distraction free writing a la junegunn/goyo.
+#+begin_src emacs-lisp
+ (use-package olivetti
+ :config
+ (evil-leader/set-key "o" 'olivetti-mode))
+#+end_src
+** Abbreviations
+Abbreviate things!
+#+begin_src emacs-lisp
+ (setq abbrev-file-name "~/.emacs.d/abbrevs")
+ (setq save-abbrevs 'silent)
+ (setq-default abbrev-mode t)
+#+end_src
+** TRAMP
+#+begin_src emacs-lisp
+ (setq tramp-default-method "ssh")
+#+end_src
* Functions
** Easily convert splits
Converts splits from horizontal to vertical and vice versa. Lifted from EmacsWiki.
(substitute-key-definition 'kill-buffer 'kill-buffer-and-window global-map)
#+end_src
* Other settings
-** Save place
-Opens file where you left it.
-#+begin_src emacs-lisp
- (save-place-mode)
-#+end_src
** OpenSCAD
Render OpenSCAD files, and add a preview window.
(use-package scad-preview
:straight (scad-preview :type git :host github :repo "Armaanb/scad-preview"))
#+end_src
-** Writing mode
-Distraction free writing a la junegunn/goyo.
-#+begin_src emacs-lisp
- (use-package olivetti
- :config
- (evil-leader/set-key "o" 'olivetti-mode))
-#+end_src
** Control backup files
Stop backup files from spewing everywhere.
#+begin_src emacs-lisp
(setq backup-directory-alist `(("." . "~/.emacs.d/backups")))
#+end_src
-** Abbreviations
-Abbreviate things!
-#+begin_src emacs-lisp
- (setq abbrev-file-name "~/.emacs.d/abbrevs")
- (setq save-abbrevs 'silent)
- (setq-default abbrev-mode t)
-#+end_src
-** Expand tabs to spaces
-#+begin_src emacs-lisp
- (setq-default tab-width 2)
-#+end_src
** Make yes/no easier
#+begin_src emacs-lisp
(defalias 'yes-or-no-p 'y-or-n-p)
"0c" '0x0-upload-kill-ring
"0p" '0x0-upload-popup))
#+end_src
-** Copy kill ring to clipboard
-#+begin_src emacs-lisp
- (setq x-select-enable-clipboard t)
- (defun copy-kill-ring-to-xorg ()
- "Copy the current kill ring to the xorg clipboard."
- (interactive)
- (x-select-text (current-kill 0)))
-#+end_src
-** Browse kill ring
-#+begin_src emacs-lisp
- (use-package browse-kill-ring)
-#+end_src
* Tangles
** Spectrwm
*** General settings
color_focus = rgb:83/a5/98
color_focus_maximized = rgb:d6/5d/0e
color_unfocus = rgb:58/58/58
-
+#+end_src
+*** Bar
+#+begin_src conf :tangle ~/.spectrwm.conf
bar_enabled = 0
bar_font = xos4 Fira Code:pixelsize=14:antialias=true # any installed font
#+end_src
*** User
#+begin_src plain :tangle ~/.gitconfig
[user]
- name = Armaan Bhojwani
- email = me@armaanb.net
- signingkey = 0FEB9471E19C49C60CFBEB133C9ED82FFE788E4A
+ name = Armaan Bhojwani
+ email = me@armaanb.net
+ signingkey = 0FEB9471E19C49C60CFBEB133C9ED82FFE788E4A
#+end_src
*** Init
#+begin_src plain :tangle ~/.gitconfig
[init]
- defaultBranch = main
+ defaultBranch = main
#+end_src
*** GPG
#+begin_src plain :tangle ~/.gitconfig
[gpg]
- program = gpg
+ program = gpg
#+end_src
*** Sendemail
#+begin_src plain :tangle ~/.gitconfig
[sendemail]
- smtpserver = smtp.mailbox.org
- smtpuser = me@armaanb.net
- smtpencryption = ssl
- smtpserverport = 465
- confirm = auto
+ smtpserver = smtp.mailbox.org
+ smtpuser = me@armaanb.net
+ smtpencryption = ssl
+ smtpserverport = 465
+ confirm = auto
#+end_src
*** Submodules
#+begin_src plain :tangle ~/.gitconfig
[submodule]
- recurse = true
+ recurse = true
#+end_src
*** Aliases
#+begin_src plain :tangle ~/.gitconfig
[alias]
- stat = diff --stat
- sclone = clone --depth 1
- sclean = clean -dfX
- a = add
- aa = add .
- c = commit
- p = push
- subup = submodule update --remote
- loc = diff --stat 4b825dc642cb6eb9a060e54bf8d69288fbee4904 # Empty hash
- mirror = git config --global alias.mirrormirror
+ stat = diff --stat
+ sclone = clone --depth 1
+ sclean = clean -dfX
+ a = add
+ aa = add .
+ c = commit
+ p = push
+ subup = submodule update --remote
+ loc = diff --stat 4b825dc642cb6eb9a060e54bf8d69288fbee4904 # Empty hash
+ mirror = git config --global alias.mirrormirror
#+end_src
*** Commits
#+begin_src plain :tangle ~/.gitconfig
[commit]
- gpgsign = true
+ gpgsign = true
+#+end_src
+** Dunst
+Lightweight notification daemon. Gruvbox colors, based on https://github.com/a-schaefers/i3-wm-gruvbox-theme/
+*** General
+#+begin_src conf :tangle ~/.config/dunst/dunstrc
+ [global]
+ font = "JetBrains Mono Medium Nerd Font 11"
+ allow_markup = yes
+ format = "<b>%s</b>\n%b"
+ sort = no
+ indicate_hidden = yes
+ alignment = center
+ bounce_freq = 0
+ show_age_threshold = 60
+ word_wrap = yes
+ ignore_newline = no
+ geometry = "400x5-20+20"
+ transparency = 0
+ idle_threshold = 120
+ monitor = 0
+ sticky_history = yes
+ line_height = 0
+ separator_height = 4
+ padding = 8
+ horizontal_padding = 8
+ max_icon_size = 32
+ separator_color = "#585858"
+ startup_notification = false
+#+end_src
+*** Modes
+#+begin_src conf :tangle ~/.config/dunst/dunstrc
+ [frame]
+ width = 4
+ color = "#585858"
+
+ [shortcuts]
+ close = mod4+c
+ close_all = mod4+shift+c
+ history = mod4+ctrl+c
+
+ [urgency_low]
+ background = "#282828"
+ foreground = "#ebdbb2"
+ highlight = "#ebdbb2"
+ timeout = 5
+
+ [urgency_normal]
+ background = "#282828"
+ foreground = "#ebdbb2"
+ highlight = "#ebdbb2"
+ timeout = 15
+
+ [urgency_critical]
+ background = "#282828"
+ foreground = "#cc241d"
+ highlight = "#ebdbb2"
+ timeout = 0
#+end_src