]> git.armaanb.net Git - config.org.git/blob - config.org
Don't ask about context when entering mu4e
[config.org.git] / config.org
1 #+TITLE: System Configuration
2 #+DESCRIPTION: Personal system configuration in org-mode format.
3 #+AUTHOR: Armaan Bhojwani
4 #+EMAIL: me@armaanb.net
5
6 * Welcome
7 Welcome to my system configuration! This file contains my Emacs configuration, but also my config files for many of the other programs on my system!
8 ** Compatability
9 I am currently using GCCEmacs 28 from the feature/native-comp branch, so some settings may not be available for older versions of Emacs. This is a purely personal configuration, so while I can garuntee that it works on my setup, I can't for anything else.
10 ** Choices
11 I chose to create a powerful, yet not overly heavy Emacs configuration. Things like LSP mode are important to my workflow and help me be productive, so despite its weight, it is kept. Things like a fancy modeline or icons on the other hand, do not increase my productivity, and create visual clutter, and thus have been excluded.
12
13 Another important choice has been to integrate Emacs into a large part of my computing environment (see [[*EmacsOS]]). I use Email, IRC, et cetera, all through Emacs which simplifies my workflow.
14
15 Lastly, I use Evil mode. I think modal keybindings are simple and more ergonomic than standard Emacs style, and Vim keybindings are what I'm comfortable with and are pervasive throughout computing.
16 ** TODOs
17 *** TODO Turn keybinding and hook declarations into use-package declarations where possible
18 *** TODO Include offlineimap config
19 ** License
20 Released under the [[https://opensource.org/licenses/MIT][MIT license]] by Armaan Bhojwani, 2021. Note that many snippets are taken from online, and other sources, who are credited for their work at the snippet.
21 * Package management
22 ** Bootstrap straight.el
23 straight.el is really nice for managing package, and it integrates nicely with use-package. It uses the bootstrapping system defined here for installation.
24 #+begin_src emacs-lisp
25   (defvar bootstrap-version)
26   (let ((bootstrap-file
27          (expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory))
28         (bootstrap-version 5))
29     (unless (file-exists-p bootstrap-file)
30       (with-current-buffer
31           (url-retrieve-synchronously
32            "https://raw.githubusercontent.com/raxod502/straight.el/develop/install.el"
33            'silent 'inhibit-cookies)
34         (goto-char (point-max))
35         (eval-print-last-sexp)))
36     (load bootstrap-file nil 'nomessage))
37 #+end_src
38 ** Replace use-package with straight
39 #+begin_src emacs-lisp
40   (straight-use-package 'use-package)
41   (setq straight-use-package-by-default t)
42 #+end_src
43 * Visual options
44 ** Theme
45 Very nice high contrast theme.
46
47 Its fine to set this here because I run Emacs in daemon mode, but if I were not, then putting it in early-init.el would be a better choice to eliminate the window being white before the theme is loaded.
48 #+begin_src emacs-lisp
49   (setq modus-themes-slanted-constructs t
50         modus-themes-bold-constructs t
51         modus-themes-mode-line '3d
52         modus-themes-scale-headings t
53         modus-themes-diffs 'desaturated)
54   (load-theme 'modus-vivendi t)
55 #+end_src
56 ** Typography
57 *** Font
58 Great programming font with ligatures.
59 #+begin_src emacs-lisp
60   (add-to-list 'default-frame-alist '(font . "JetBrainsMonoNF-12"))
61 #+end_src
62 *** Ligatures
63 #+begin_src emacs-lisp
64   (use-package ligature
65     :straight (ligature :type git :host github :repo "mickeynp/ligature.el")
66     :config
67     (ligature-set-ligatures
68      '(prog-mode text-mode)
69      '("-|" "-~" "---" "-<<" "-<" "--" "->" "->>" "-->" "/=" "/=="
70        "/>" "//" "/*" "*>" "*/" "<-" "<<-" "<=>" "<=" "<|" "<||"
71        "<|||" "<|>" "<:" "<>" "<-<" "<<<" "<==" "<<=" "<=<" "<==>"
72        "<-|" "<<" "<~>" "<=|" "<~~" "<~" "<$>" "<$" "<+>" "<+" "</>"
73        "</" "<*" "<*>" "<->" "<!--" ":>" ":<" ":::" "::" ":?" ":?>"
74        ":=" "::=" "=>>" "==>" "=/=" "=!=" "=>" "===" "=:=" "==" "!=="
75        "!!" "!=" ">]" ">:" ">>-" ">>=" ">=>" ">>>" ">-" ">=" "&&&"
76        "&&" "|||>" "||>" "|>" "|]" "|}" "|=>" "|->" "|=" "||-" "|-"
77        "||=" "||" ".." ".?" ".=" ".-" "..<" "..." "+++" "+>" "++"
78        "[||]" "[<" "[|" "{|" "?." "?=" "?:" "##" "###" "####" "#["
79        "#{" "#=" "#!" "#:" "#_(" "#_" "#?" "#(" ";;" "_|_" "__" "~~"
80        "~~>" "~>" "~-" "~@" "$>" "^=" "]#"))
81     (global-ligature-mode t))
82 #+end_src
83 ** Line numbers
84 Display relative line numbers except in some modes
85 #+begin_src emacs-lisp
86   (global-display-line-numbers-mode)
87   (setq display-line-numbers-type 'relative)
88   (dolist (no-line-num '(term-mode-hook
89                          pdf-view-mode-hook
90                          shell-mode-hook
91                          org-mode-hook
92                          eshell-mode-hook))
93     (add-hook no-line-num (lambda () (display-line-numbers-mode 0))))
94 #+end_src
95 ** Highlight matching parenthesis
96 #+begin_src emacs-lisp
97   (use-package paren
98     :config (show-paren-mode)
99     :custom (show-paren-style 'parenthesis))
100 #+end_src
101 ** Modeline
102 *** Show current function
103 #+begin_src emacs-lisp
104   (which-function-mode)
105 #+end_src
106 *** Make position in file more descriptive
107 Show current column and file size.
108 #+begin_src emacs-lisp
109   (column-number-mode)
110   (size-indication-mode)
111 #+end_src
112 *** Hide minor modes
113 #+begin_src emacs-lisp
114   (use-package minions
115     :config (minions-mode))
116 #+end_src
117 ** Ruler
118 Show a ruler at a certain number of chars depending on mode.
119 #+begin_src emacs-lisp
120   (setq display-fill-column-indicator-column 80)
121   (global-display-fill-column-indicator-mode)
122 #+end_src
123 ** Keybinding hints
124 Whenever starting a key chord, show possible future steps.
125 #+begin_src emacs-lisp
126   (use-package which-key
127     :config (which-key-mode)
128     :custom (which-key-idle-delay 0.3))
129 #+end_src
130 ** Highlight TODOs in comments
131 #+begin_src emacs-lisp
132   (use-package hl-todo
133     :straight (hl-todo :type git :host github :repo "tarsius/hl-todo")
134     :config (global-hl-todo-mode 1))
135 #+end_src
136 ** Don't lose cursor
137 #+begin_src emacs-lisp
138   (blink-cursor-mode)
139 #+end_src
140 ** Visual line mode
141 Soft wrap words and do operations by visual lines.
142 #+begin_src emacs-lisp
143   (add-hook 'text-mode-hook 'visual-line-mode 1)
144 #+end_src
145 ** Display number of matches in search
146 #+begin_src emacs-lisp
147   (use-package anzu
148     :config (global-anzu-mode))
149 #+end_src
150 ** Visual bell
151 Inverts modeline instead of audible bell or the standard visual bell.
152 #+begin_src emacs-lisp
153   (setq visible-bell nil
154         ring-bell-function
155         (lambda () (invert-face 'mode-line)
156           (run-with-timer 0.1 nil #'invert-face 'mode-line)))
157 #+end_src
158 * Evil mode
159 ** General
160 #+begin_src emacs-lisp
161   (use-package evil
162     :custom (select-enable-clipboard nil)
163     :config
164     (evil-mode)
165     (fset 'evil-visual-update-x-selection 'ignore) ;; Keep clipboard and register seperate
166     ;; Use visual line motions even outside of visual-line-mode buffers
167     (evil-global-set-key 'motion "j" 'evil-next-visual-line)
168     (evil-global-set-key 'motion "k" 'evil-previous-visual-line)
169     (global-set-key (kbd "<escape>") 'keyboard-escape-quit))
170 #+end_src
171 ** Evil collection
172 #+begin_src emacs-lisp
173   (use-package evil-collection
174     :after evil
175     :init (evil-collection-init)
176     :custom (evil-collection-setup-minibuffer t))
177 #+end_src
178 ** Surround
179 tpope prevails!
180 #+begin_src emacs-lisp
181   (use-package evil-surround
182     :config (global-evil-surround-mode))
183 #+end_src
184 ** Leader key
185 #+begin_src emacs-lisp
186   (use-package evil-leader
187     :straight (evil-leader :type git :host github :repo "cofi/evil-leader")
188     :config
189     (evil-leader/set-leader "<SPC>")
190     (global-evil-leader-mode))
191 #+end_src
192 ** Nerd commenter
193 #+begin_src emacs-lisp
194   ;; Nerd commenter
195   (use-package evil-nerd-commenter
196     :bind (:map evil-normal-state-map
197                 ("gc" . evilnc-comment-or-uncomment-lines))
198     :custom (evilnc-invert-comment-line-by-line nil))
199 #+end_src
200 ** Undo redo
201 Fix the oopsies!
202 #+begin_src emacs-lisp
203   (evil-set-undo-system 'undo-redo)
204 #+end_src
205 ** Number incrementing
206 Add back C-a/C-x
207 #+begin_src emacs-lisp
208   (use-package evil-numbers
209     :straight (evil-numbers :type git :host github :repo "juliapath/evil-numbers")
210     :bind (:map evil-normal-state-map
211                 ("C-M-a" . evil-numbers/inc-at-pt)
212                 ("C-M-x" . evil-numbers/dec-at-pt)))
213 #+end_src
214 ** Evil org
215 *** Init
216 #+begin_src emacs-lisp
217   (use-package evil-org
218     :after org
219     :hook (org-mode . evil-org-mode)
220     :config
221     (evil-org-set-key-theme '(textobjects insert navigation shift todo)))
222   (use-package evil-org-agenda
223     :straight (:type built-in)
224     :after evil-org
225     :config (evil-org-agenda-set-keys))
226 #+end_src
227 *** Leader maps
228 #+begin_src emacs-lisp
229   (evil-leader/set-key-for-mode 'org-mode
230     "T" 'org-show-todo-tree
231     "a" 'org-agenda
232     "c" 'org-archive-subtree)
233 #+end_src
234 * Org mode
235 ** General
236 #+begin_src emacs-lisp
237   (use-package org
238     :straight (:type built-in)
239     :commands (org-capture org-agenda)
240     :custom
241     (org-ellipsis " ▾")
242     (org-agenda-start-with-log-mode t)
243     (org-agenda-files (quote ("~/Org/tasks.org" "~/Org/break.org")))
244     (org-log-done 'time)
245     (org-log-into-drawer t)
246     (org-src-tab-acts-natively t)
247     (org-src-fontify-natively t)
248     (org-startup-indented t)
249     (org-hide-emphasis-markers t)
250     (org-fontify-whole-block-delimiter-line nil)
251     :bind ("C-c a" . org-agenda))
252 #+end_src
253 ** Tempo
254 #+begin_src emacs-lisp
255   (use-package org-tempo
256     :after org
257     :straight (:type built-in)
258     :config
259     ;; TODO: There's gotta be a more efficient way to write this
260     (add-to-list 'org-structure-template-alist '("el" . "src emacs-lisp"))
261     (add-to-list 'org-structure-template-alist '("sp" . "src conf :tangle ~/.spectrwm.conf"))
262     (add-to-list 'org-structure-template-alist '("ash" . "src shell :tangle ~/.config/ash/ashrc"))
263     (add-to-list 'org-structure-template-alist '("ipy" . "src python :tangle ~/.ipython/"))
264     (add-to-list 'org-structure-template-alist '("pi" . "src conf :tangle ~/.config/picom/picom.conf"))
265     (add-to-list 'org-structure-template-alist '("git" . "src conf :tangle ~/.gitconfig"))
266     (add-to-list 'org-structure-template-alist '("du" . "src conf :tangle ~/.config/dunst/dunstrc"))
267     (add-to-list 'org-structure-template-alist '("za" . "src conf :tangle ~/.config/zathura/zathurarc"))
268     (add-to-list 'org-structure-template-alist '("ff1" . "src css :tangle ~/.mozilla/firefox/armaan-release/chrome/userChrome.css"))
269     (add-to-list 'org-structure-template-alist '("ff2" . "src css :tangle ~/.mozilla/firefox/armaan-release/chrome/userContent.css"))
270     (add-to-list 'org-structure-template-alist '("xr" . "src conf :tangle ~/.Xresources"))
271     (add-to-list 'org-structure-template-alist '("tm" . "src conf :tangle ~/.tmux.conf"))
272     (add-to-list 'org-structure-template-alist '("gp" . "src conf :tangle ~/.gnupg/gpg.conf"))
273     (add-to-list 'org-structure-template-alist '("ag" . "src conf :tangle ~/.gnupg/gpg-agent.conf")))
274 #+end_src
275 * Autocompletion
276 ** Ivy
277 Simple, but not too simple autocompletion.
278 #+begin_src emacs-lisp
279   (use-package ivy
280     :bind (("C-s" . swiper)
281            :map ivy-minibuffer-map
282            ("TAB" . ivy-alt-done)
283            :map ivy-switch-buffer-map
284            ("M-d" . ivy-switch-buffer-kill))
285     :config (ivy-mode))
286 #+end_src
287 ** Ivy-rich
288 #+begin_src emacs-lisp
289   (use-package ivy-rich
290     :after (ivy counsel)
291     :config (ivy-rich-mode))
292 #+end_src
293 ** Counsel
294 Ivy everywhere.
295 #+begin_src emacs-lisp
296   (use-package counsel
297     :bind (("C-M-j" . 'counsel-switch-buffer)
298            :map minibuffer-local-map
299            ("C-r" . 'counsel-minibuffer-history))
300     :custom (counsel-linux-app-format-function #'counsel-linux-app-format-function-name-only)
301     :config (counsel-mode))
302 #+end_src
303 ** Remember frequent commands
304 #+begin_src emacs-lisp
305   (use-package ivy-prescient
306     :after counsel
307     :custom (ivy-prescient-enable-filtering nil)
308     :config
309     (prescient-persist-mode)
310     (ivy-prescient-mode))
311 #+end_src
312 ** Swiper
313 Better search utility.
314 #+begin_src emacs-lisp
315   (use-package swiper)
316 #+end_src
317 * EmacsOS
318 ** RSS
319 Use elfeed for RSS. I have another file with all the feeds in it.
320 #+begin_src emacs-lisp
321   (use-package elfeed
322     :bind (("C-c e" . elfeed))
323     :config
324     (load "~/.emacs.d/feeds.el")
325     (add-hook 'elfeed-new-entry-hook
326               (elfeed-make-tagger :feed-url "youtube\\.com"
327                                   :add '(youtube)))
328     :bind (:map elfeed-search-mode-map ("C-c C-o" . 'elfeed-show-visit)))
329
330   (use-package elfeed-goodies
331     :after elfeed
332     :config (elfeed-goodies/setup))
333 #+end_src
334 ** Email
335 Use mu4e for reading emails.
336
337 I use `offlineimap` to sync my maildirs. It is slower than mbsync, but is fast enough for me, especially when ran with the =-q= option.
338
339 Contexts are a not very well known feature of mu4e that makes it super easy to manage multiple accounts. Much better than some of the hacky methods and external packages that I've seen.
340 #+begin_src emacs-lisp
341   (use-package smtpmail
342     :straight (:type built-in))
343   (use-package mu4e
344     :load-path "/usr/share/emacs/site-lisp/mu4e"
345     :straight (:build nil)
346     :bind (("C-c m" . mu4e))
347     :config
348     (setq user-full-name "Armaan Bhojwani"
349           smtpmail-local-domain "armaanb.net"
350           smtpmail-stream-type 'ssl
351           smtpmail-smtp-service '465
352           mu4e-change-filenames-when-moving t
353           mu4e-get-mail-command "offlineimap -q"
354           message-citation-line-format "On %a %d %b %Y at %R, %f wrote:\n"
355           message-citation-line-function 'message-insert-formatted-citation-line
356           mu4e-completing-read-function 'ivy-completing-read
357           mu4e-confirm-quit nil
358           mu4e-view-use-gnus t
359           mail-user-agent 'mu4e-user-agent
360           mail-context-policy 'pick-first
361           mu4e-contexts
362           `( ,(make-mu4e-context
363                :name "school"
364                :enter-func (lambda () (mu4e-message "Entering school context"))
365                :leave-func (lambda () (mu4e-message "Leaving school context"))
366                :match-func (lambda (msg)
367                              (when msg
368                                (string-match-p "^/school" (mu4e-message-field msg :maildir))))
369                :vars '((user-mail-address . "abhojwani22@nobles.edu")
370                        (mu4e-sent-folder . "/school/Sent")
371                        (mu4e-drafts-folder . "/school/Drafts")
372                        (mu4e-trash-folder . "/school/Trash")
373                        (mu4e-refile-folder . "/school/Archive")
374                        (message-cite-reply-position . above)
375                        (user-mail-address . "abhojwani22@nobles.edu")
376                        (smtpmail-smtp-user . "abhojwani22@nobles.edu")
377                        (smtpmail-smtp-server . "smtp.gmail.com")))
378              ,(make-mu4e-context
379                :name "personal"
380                :enter-func (lambda () (mu4e-message "Entering personal context"))
381                :leave-func (lambda () (mu4e-message "Leaving personal context"))
382                :match-func (lambda (msg)
383                              (when msg
384                                (string-match-p "^/personal" (mu4e-message-field msg :maildir))))
385                :vars '((mu4e-sent-folder . "/personal/Sent")
386                        (mu4e-drafts-folder . "/personal/Drafts")
387                        (mu4e-trash-folder . "/personal/Trash")
388                        (mu4e-refile-folder . "/personal/Archive")
389                        (user-mail-address . "me@armaanb.net")
390                        (message-cite-reply-position . below)
391                        (smtpmail-smtp-user . "me@armaanb.net")
392                        (smtpmail-smtp-server . "smtp.mailbox.org")))))
393     (add-to-list 'mu4e-bookmarks
394                  '(:name "Unified inbox"
395                          :query "maildir:\"/personal/INBOX\" or maildir:\"/school/INBOX\""
396                          :key ?b))
397     :hook ((mu4e-compose-mode . flyspell-mode)
398            (mu4e-compose-mode . auto-fill-mode)
399            (mu4e-view-mode-hook . turn-on-visual-line-mode)))
400
401 #+end_src
402 Discourage Gnus from displaying HTML emails
403 #+begin_src emacs-lisp
404   (with-eval-after-load "mm-decode"
405     (add-to-list 'mm-discouraged-alternatives "text/html")
406     (add-to-list 'mm-discouraged-alternatives "text/richtext"))
407 #+end_src
408 ** Default browser
409 Set EWW as default browser except for videos.
410 #+begin_src emacs-lisp
411   (defun browse-url-mpv (url &optional new-window)
412     "Open URL in MPV."
413     (start-process "mpv" "*mpv*" "mpv" url))
414
415   (setq browse-url-handlers
416         (quote
417          (("youtu\\.?be" . browse-url-mpv)
418           ("peertube.*" . browse-url-mpv)
419           ("vid.*" . browse-url-mpv)
420           ("vid.*" . browse-url-mpv)
421           ("." . eww-browse-url)
422           )))
423 #+end_src
424 ** EWW
425 Some EWW enhancements.
426 *** Give buffer a useful name
427 #+begin_src emacs-lisp
428   ;; From https://protesilaos.com/dotemacs/
429   (defun prot-eww--rename-buffer ()
430     "Rename EWW buffer using page title or URL.
431         To be used by `eww-after-render-hook'."
432     (let ((name (if (eq "" (plist-get eww-data :title))
433                     (plist-get eww-data :url)
434                   (plist-get eww-data :title))))
435       (rename-buffer (format "*%s # eww*" name) t)))
436
437   (use-package eww
438     :straight (:type built-in)
439     :bind (("C-c w" . eww))
440     :hook (eww-after-render-hook prot-eww--rename-buffer))
441 #+end_src
442 *** Keybinding
443 #+begin_src emacs-lisp
444   (global-set-key (kbd "C-c w") 'eww)
445 #+end_src
446 ** IRC
447 #+begin_src emacs-lisp
448   (use-package circe
449     :config
450     (enable-lui-track)
451     (enable-circe-color-nicks))
452
453   (defun fetch-password (&rest params)
454     (require 'auth-source)
455     (let ((match (car (apply 'auth-source-search params))))
456       (if match
457           (let ((secret (plist-get match :secret)))
458             (if (functionp secret)
459                 (funcall secret)
460               secret))
461         (error "Password not found for %S" params))))
462
463   (setq circe-network-options
464         '(("pounce"
465            :host "irc.armaanb.net"
466            :nick "emacs"
467            :use-tls t
468            :port "6697"
469            :pass (lambda (fetch-password
470                           :login "emacs"
471                           :machine "irc.armaanb.net"
472                           :port 6697))))
473
474         (circe "pounce")
475 #+end_src
476 * Emacs IDE
477 ** Code cleanup
478 #+begin_src emacs-lisp
479   (use-package blacken
480     :hook (python-mode . blacken-mode)
481     :config (setq blacken-line-length 79))
482
483   ;; Purge whitespace
484   (use-package ws-butler
485     :config (ws-butler-global-mode))
486 #+end_src
487 ** Flycheck
488 #+begin_src emacs-lisp
489   (use-package flycheck
490     :config (global-flycheck-mode))
491 #+end_src
492 ** Project management
493 #+begin_src emacs-lisp
494   (use-package projectile
495     :config (projectile-mode)
496     :custom ((projectile-completion-system 'ivy))
497     :bind-keymap
498     ("C-c p" . projectile-command-map)
499     :init
500     (when (file-directory-p "~/Code")
501       (setq projectile-project-search-path '("~/Code")))
502     (setq projectile-switch-project-action #'projectile-dired))
503
504   (use-package counsel-projectile
505     :after projectile
506     :config (counsel-projectile-mode))
507 #+end_src
508 ** Dired
509 #+begin_src emacs-lisp
510   (use-package dired
511     :straight (:type built-in)
512     :commands (dired dired-jump)
513     :custom ((dired-listing-switches "-agho --group-directories-first"))
514     :config (evil-collection-define-key 'normal 'dired-mode-map
515               "h" 'dired-single-up-directory
516               "l" 'dired-single-buffer))
517
518   (use-package dired-single
519     :commands (dired dired-jump))
520
521   (use-package dired-open
522     :commands (dired dired-jump)
523     :custom (dired-open-extensions '(("png" . "feh")
524                                      ("mkv" . "mpv"))))
525
526   (use-package dired-hide-dotfiles
527     :hook (dired-mode . dired-hide-dotfiles-mode)
528     :config
529     (evil-collection-define-key 'normal 'dired-mode-map
530       "H" 'dired-hide-dotfiles-mode))
531 #+end_src
532 ** Git
533 *** Magit
534 # TODO: Write a command that commits hunk, skipping staging step.
535 #+begin_src emacs-lisp
536   (use-package magit)
537 #+end_src
538 *** Colored diff in line number area
539 #+begin_src emacs-lisp
540   (use-package diff-hl
541     :straight (diff-hl :type git :host github :repo "dgutov/diff-hl")
542     :hook ((magit-pre-refresh-hook . diff-hl-magit-pre-refresh)
543            (magit-post-refresh-hook . diff-hl-magit-post-refresh))
544     :config (global-diff-hl-mode))
545 #+end_src
546 *** Email
547 #+begin_src emacs-lisp
548   (use-package piem)
549   (use-package git-email
550     :straight (git-email :repo "https://git.sr.ht/~yoctocell/git-email")
551     :config (git-email-piem-mode))
552 #+end_src
553 ** Java
554 *** Evaluate current buffer
555 Stolen from https://stackoverflow.com/questions/19953924/how-do-you-run-java-codes-in-emacs
556 #+begin_src emacs-lisp
557   (defun java-eval-buffer ()
558     "run current program (that requires no input)"
559     (interactive)
560     (let* ((source (file-name-nondirectory buffer-file-name))
561            (out    (file-name-sans-extension source))
562            (class  (concat out ".class")))
563       (save-buffer)
564       (shell-command (format "rm -f %s && javac %s" class source))
565       (if (file-exists-p class)
566           (shell-command (format "java %s" out) "*scratch*")
567         (progn
568           (set (make-local-variable 'compile-command)
569                (format "javac %s" source))
570           (command-execute 'compile)))))
571 #+end_src
572 * General text editing
573 ** Indentation
574 Indent after every change.
575 #+begin_src emacs-lisp
576   (use-package aggressive-indent
577     :config (global-aggressive-indent-mode))
578 #+end_src
579 ** Spell checking
580 Spell check in text mode, and in prog-mode comments.
581 #+begin_src emacs-lisp
582   (dolist (hook '(text-mode-hook))
583     (add-hook hook (lambda () (flyspell-mode))))
584   (dolist (hook '(change-log-mode-hook log-edit-mode-hook))
585     (add-hook hook (lambda () (flyspell-mode -1))))
586   (add-hook 'prog-mode (lambda () (flyspell-prog mode)))
587 #+end_src
588 ** Expand tabs to spaces
589 #+begin_src emacs-lisp
590   (setq-default tab-width 2)
591 #+end_src
592 ** Copy kill ring to clipboard
593 #+begin_src emacs-lisp
594   (setq x-select-enable-clipboard t)
595   (defun copy-kill-ring-to-xorg ()
596     "Copy the current kill ring to the xorg clipboard."
597     (interactive)
598     (x-select-text (current-kill 0)))
599 #+end_src
600 ** Save place
601 Opens file where you left it.
602 #+begin_src emacs-lisp
603   (save-place-mode)
604 #+end_src
605 ** Writing mode
606 Distraction free writing a la junegunn/goyo.
607 #+begin_src emacs-lisp
608   (use-package olivetti
609     :config
610     (evil-leader/set-key "o" 'olivetti-mode))
611 #+end_src
612 ** Abbreviations
613 Abbreviate things!
614 #+begin_src emacs-lisp
615   (setq abbrev-file-name "~/.emacs.d/abbrevs.el")
616   (setq save-abbrevs 'silent)
617   (setq-default abbrev-mode t)
618 #+end_src
619 ** TRAMP
620 #+begin_src emacs-lisp
621   (setq tramp-default-method "ssh")
622 #+end_src
623 ** Don't ask about following symlinks in vc
624 #+begin_src emacs-lisp
625   (setq vc-follow-symlinks t)
626 #+end_src
627 ** Don't ask to save custom dictionary
628 #+begin_src emacs-lisp
629   (setq ispell-silently-savep t)
630 #+end_src
631 ** Open file as root
632 #+begin_src emacs-lisp
633   (defun doas-edit (&optional arg)
634     "Edit currently visited file as root.
635
636     With a prefix ARG prompt for a file to visit.
637     Will also prompt for a file to visit if current
638     buffer is not visiting a file.
639
640     Modified from Emacs Redux."
641     (interactive "P")
642     (if (or arg (not buffer-file-name))
643         (find-file (concat "/doas:root@localhost:"
644                            (ido-read-file-name "Find file(as root): ")))
645       (find-alternate-file (concat "/doas:root@localhost:" buffer-file-name))))
646
647     (global-set-key (kbd "C-x C-r") #'doas-edit)
648 #+end_src
649 * Keybindings
650 ** Switch windows
651 #+begin_src emacs-lisp
652   (use-package ace-window
653     :bind ("M-o" . ace-window))
654 #+end_src
655 ** Kill current buffer
656 Makes "C-x k" binding faster.
657 #+begin_src emacs-lisp
658   (substitute-key-definition 'kill-buffer 'kill-buffer-and-window global-map)
659 #+end_src
660 * Other settings
661 ** OpenSCAD
662 #+begin_src emacs-lisp
663   (use-package scad-mode)
664 #+end_src
665 ** Control backup files
666 Stop backup files from spewing everywhere.
667 #+begin_src emacs-lisp
668   (setq backup-directory-alist `(("." . "~/.emacs.d/backups")))
669 #+end_src
670 ** Make yes/no easier
671 #+begin_src emacs-lisp
672   (defalias 'yes-or-no-p 'y-or-n-p)
673 #+end_src
674 ** Move customize file
675 No more clogging up init.el.
676 #+begin_src emacs-lisp
677   (setq custom-file "~/.emacs.d/custom.el")
678   (load custom-file)
679 #+end_src
680 ** Better help
681 #+begin_src emacs-lisp
682   (use-package helpful
683     :commands (helpful-callable helpful-variable helpful-command helpful-key)
684     :custom
685     (counsel-describe-function-function #'helpful-callable)
686     (counsel-describe-variable-function #'helpful-variable)
687     :bind
688     ([remap describe-function] . counsel-describe-function)
689     ([remap describe-command] . helpful-command)
690     ([remap describe-variable] . counsel-describe-variable)
691     ([remap describe-key] . helpful-key))
692 #+end_src
693 ** GPG
694 #+begin_src emacs-lisp
695   (use-package epa-file
696     :straight (:type built-in)
697     :custom
698     (epa-file-select-keys nil)
699     (epa-file-encrypt-to '("me@armaanb.net"))
700     (password-cache-expiry (* 60 15)))
701
702   (use-package pinentry
703     :config (pinentry-start))
704 #+end_src
705 ** Pastebin
706 #+begin_src emacs-lisp
707   (use-package 0x0
708     :straight (0x0 :type git :repo "https://git.sr.ht/~zge/nullpointer-emacs")
709     :custom (0x0-default-service 'envs)
710     :config (evil-leader/set-key
711               "00" '0x0-upload
712               "0f" '0x0-upload-file
713               "0s" '0x0-upload-string
714               "0c" '0x0-upload-kill-ring
715               "0p" '0x0-upload-popup))
716 #+end_src
717 * Tangles
718 ** Spectrwm
719 *** General settings
720 #+begin_src conf :tangle ~/.spectrwm.conf
721   workspace_limit = 5
722   warp_pointer = 1
723   modkey = Mod4
724   autorun = ws[1]:/home/armaa/Code/scripts/autostart
725 #+end_src
726 *** Bar
727 #+begin_src conf :tangle ~/.spectrwm.conf
728   bar_enabled = 0
729   bar_font = xos4 Fira Code:pixelsize=14:antialias=true # any installed font
730 #+end_src
731 *** Keybindings
732 **** WM actions
733 #+begin_src conf :tangle ~/.spectrwm.conf
734   program[term] = st -e tmux
735   program[screenshot_all] = flameshot gui
736   program[notif] = /home/armaa/Code/scripts/setter status
737   program[pass] = /home/armaa/Code/scripts/passmenu
738
739   bind[notif] = MOD+n
740   bind[pass] = MOD+Shift+p
741 #+end_src
742 **** Media keys
743 #+begin_src conf :tangle ~/.spectrwm.conf
744   program[paup] = /home/armaa/Code/scripts/setter audio +5
745   program[padown] = /home/armaa/Code/scripts/setter audio -5
746   program[pamute] = /home/armaa/Code/scripts/setter audio
747   program[brigup] = /home/armaa/Code/scripts/setter brightness +10%
748   program[brigdown] = /home/armaa/Code/scripts/setter brightness 10%-
749   program[next] = playerctl next
750   program[prev] = playerctl previous
751   program[pause] = playerctl play-pause
752
753   bind[padown] = XF86AudioLowerVolume
754   bind[paup] = XF86AudioRaiseVolume
755   bind[pamute] = XF86AudioMute
756   bind[brigdown] = XF86MonBrightnessDown
757   bind[brigup] = XF86MonBrightnessUp
758   bind[pause] = XF86AudioPlay
759   bind[next] = XF86AudioNext
760   bind[prev] = XF86AudioPrev
761 #+end_src
762 **** HJKL
763 #+begin_src conf :tangle ~/.spectrwm.conf
764   program[h] = xdotool keyup h key --clearmodifiers Left
765   program[j] = xdotool keyup j key --clearmodifiers Down
766   program[k] = xdotool keyup k key --clearmodifiers Up
767   program[l] = xdotool keyup l key --clearmodifiers Right
768
769   bind[h] = MOD + Control + h
770   bind[j] = MOD + Control + j
771   bind[k] = MOD + Control + k
772   bind[l] = MOD + Control + l
773 #+end_src
774 **** Programs
775 #+begin_src conf :tangle ~/.spectrwm.conf
776   program[email] = emacsclient -c --eval "(mu4e)"
777   program[irc] = emacsclient -c --eval '(switch-to-buffer "irc.armaanb.net:6697")'
778   program[rss] = emacsclient -c --eval '(elfeed)'
779   program[emacs] = emacsclient -c
780   program[firefox] = firefox
781   program[calc] = st -e because -l
782
783   bind[email] = MOD+Control+1
784   bind[irc] = MOD+Control+2
785   bind[rss] = MOD+Control+3
786   bind[firefox] = MOD+Control+4
787   bind[calc] = MOD+Control+5
788   bind[emacs] = MOD+Control+Return
789 #+end_src
790 **** Quirks
791 #+begin_src conf :tangle ~/.spectrwm.conf
792   quirk[Castle Menu] = FLOAT
793   quirk[momen] = FLOAT
794 #+end_src
795 ** Ash
796 *** Options
797 #+begin_src conf :tangle ~/.config/ash/ashrc
798   set -o vi
799 #+end_src
800 *** Functions
801 **** Update all packages
802 #+begin_src shell :tangle ~/.config/ash/ashrc
803   color=$(tput setaf 5)
804   reset=$(tput sgr0)
805
806   apu() {
807       doas echo "${color}== upgrading with yay ==${reset}"
808       yay
809       echo ""
810       echo "${color}== checking for pacnew files ==${reset}"
811       doas pacdiff
812       echo
813       echo "${color}== upgrading flatpaks ==${reset}"
814       flatpak update
815       echo ""
816       echo "${color}== updating nvim plugins ==${reset}"
817       nvim +PlugUpdate +PlugUpgrade +qall
818       echo "Updated nvim plugins"
819       echo ""
820       echo "${color}You are entirely up to date!${reset}"
821   }
822 #+end_src
823 **** Clean all packages
824 #+begin_src shell :tangle ~/.config/ash/ashrc
825   apap() {
826       doas echo "${color}== cleaning pacman orphans ==${reset}"
827       (pacman -Qtdq | doas pacman -Rns - 2> /dev/null) || echo "No orphans"
828       echo ""
829       echo "${color}== cleaning flatpaks ==${reset}"
830       flatpak remove --unused
831       echo ""
832       echo "${color}== cleaning nvim plugins ==${reset}"
833       nvim +PlugClean +qall
834       echo "Cleaned nvim plugins"
835       echo ""
836       echo "${color}All orphans cleaned!${reset}"
837   }
838 #+end_src
839 **** Interact with 0x0
840 #+begin_src shell :tangle ~/.config/ash/ashrc
841   zxz="https://envs.sh"
842   ufile() { curl -F"file=@$1" "$zxz" ; }
843   upb() { curl -F"file=@-;" "$zxz" ; }
844   uurl() { curl -F"url=$1" "$zxz" ; }
845   ushort() { curl -F"shorten=$1" "$zxz" ; }
846   uclip() { xclip -out | curl -F"file=@-;" "$zxz" ; }
847 #+end_src
848 **** Finger
849 #+begin_src shell :tangle ~/.config/ash/ashrc
850   finger() {
851       user=$(echo "$1" | cut -f 1 -d '@')
852       host=$(echo "$1" | cut -f 2 -d '@')
853       echo $user | nc "$host" 79
854   }
855 #+end_src
856 **** Upload to ftp.armaanb.net
857 #+begin_src shell :tangle ~/.config/ash/ashrc
858   pubup() {
859       rsync "$1" "root@armaanb.net:/var/ftp/pub/${2}"
860       echo "https://ftp.armaanb.net/pub/"$(basename "$1") | tee /dev/tty | xclip -sel c
861   }
862 #+end_src
863 *** Exports
864 #+begin_src shell :tangle ~/.config/ash/ashrc
865   export EDITOR="emacsclient -c"
866   export VISUAL="$EDITOR"
867   export TERM=xterm-256color # for compatability
868
869   export GPG_TTY="$(tty)"
870   export MANPAGER='nvim +Man!'
871   export PAGER='less'
872
873   export GTK_USE_PORTAL=1
874
875   export PATH="/home/armaa/.local/bin:$PATH" # prioritize .local/bin
876   export PATH="/home/armaa/Code/scripts:$PATH" # prioritize my scripts
877   export PATH="/home/armaa/Code/scripts/bin:$PATH" # prioritize my bins
878   export PATH="$PATH:/home/armaa/.cargo/bin"
879   export PATH="$PATH:/home/armaa/.local/share/gem/ruby/2.7.0/bin"
880   export PATH="$PATH:/usr/sbin"
881   export PATH="$PATH:/opt/FreeTube/freetube"
882
883   export LC_ALL="en_US.UTF-8"
884   export LC_CTYPE="en_US.UTF-8"
885   export LANGUAGE="en_US.UTF-8"
886
887   export KISS_PATH="/home/armaa/Virtual/kiss/home/armaa/kiss-repo"
888   export KISS_PATH="$KISS_PATH:/home/armaa/Clone/repo-main/core"
889   export KISS_PATH="$KISS_PATH:/home/armaa/Clone/repo-main/extra"
890   export KISS_PATH="$KISS_PATH:/home/armaa/Clone/repo-main/xorg"
891   export KISS_PATH="$KISS_PATH:/home/armaa/Clone/repo-main/testing"
892   export KISS_PATH="$KISS_PATH:/home/armaa/Clone/repo-community/community"
893 #+end_src
894 *** Aliases
895 **** SSH
896 #+begin_src shell :tangle ~/.config/ash/ashrc
897   alias bhoji-drop='ssh -p 23 root@armaanb.net'
898   alias irc='ssh root@armaanb.net -t abduco -A irc catgirl freenode'
899   alias union='ssh 192.168.1.18'
900   alias mine='ssh -p 23 root@pickupserver.cc'
901   alias tcf='ssh root@204.48.23.68'
902   alias ngmun='ssh root@157.245.89.25'
903   alias prox='ssh root@192.168.1.224'
904   alias ncq='ssh root@143.198.123.17'
905   alias envs='ssh acheam@envs.net'
906 #+end_src
907 **** File management
908 #+begin_src shell :tangle ~/.config/ash/ashrc
909   alias ls='ls -lh --group-directories-first'
910   alias la='ls -A'
911   alias df='df -h / /boot'
912   alias du='du -h'
913   alias free='free -h'
914   alias cp='cp -riv'
915   alias rm='rm -iv'
916   alias mv='mv -iv'
917   alias ln='ln -v'
918   alias grep='grep -in --color=auto'
919   alias mkdir='mkdir -pv'
920   alias lanex='java -jar ~/.local/share/lxc/lanxchange.jar'
921   alias vim=$EDITOR
922   alias emacs=$EDITOR
923 #+end_src
924 **** System management
925 #+begin_src shell :tangle ~/.config/ash/ashrc
926   alias pkill='pkill -i'
927   alias crontab='crontab-argh'
928   alias sudo='doas'
929   alias pasu='git -C ~/.password-store push'
930   alias yadu='yadm add -u && yadm commit -m "Updated `date -Iseconds`" && \
931     yadm push'
932 #+end_src
933 **** Networking
934 #+begin_src shell :tangle ~/.config/ash/ashrc
935   alias ping='ping -c 10'
936   alias gps='gpg --keyserver keyserver.ubuntu.com --search-keys'
937   alias gpp='gpg --keyserver keyserver.ubuntu.com --recv-key'
938   alias plan='T=$(mktemp) && \
939         rsync root@armaanb.net:/etc/finger/plan.txt "$T" && \
940         TT=$(mktemp) && \
941         head -n -2 $T > $TT && \
942         vim $TT && \
943         echo "\nLast updated: $(date -R)" >> "$TT" && \
944         fold -sw 72 "$TT" > "$T"| \
945         rsync "$T" root@armaanb.net:/etc/finger/plan.txt'
946 #+end_src
947 **** Virtual machines, chroots
948 #+begin_src shell :tangle ~/.config/ash/ashrc
949   alias ckiss="doas chrooter ~/Virtual/kiss"
950   alias cdebian="doas chrooter ~/Virtual/debian bash"
951   alias cwindows='devour qemu-system-x86_64 \
952     -smp 3 \
953     -cpu host \
954     -enable-kvm \
955     -m 3G \
956     -device VGA,vgamem_mb=64 \
957     -device intel-hda \
958     -device hda-duplex \
959     -net nic \
960     -net user,smb=/home/armaa/Public \
961     -drive format=qcow2,file=/home/armaa/Virtual/windows.qcow2'
962 #+end_src
963 **** Python
964 #+begin_src shell :tangle ~/.config/ash/ashrc
965   alias pip="python -m pip"
966   alias black="black -l 79"
967 #+end_src
968 **** Latin
969 #+begin_src shell :tangle ~/.config/ash/ashrc
970   alias words='gen-shell -c "words"'
971   alias words-e='gen-shell -c "words ~E"'
972 #+end_src
973 **** Devour
974 #+begin_src shell :tangle ~/.config/ash/ashrc
975   alias zathura='devour zathura'
976   alias cad='devour openscad'
977   alias feh='devour feh'
978 #+end_src
979 **** Pacman
980 #+begin_src shell :tangle ~/.config/ash/ashrc
981   alias aps='yay -Ss'
982   alias api='yay -Syu'
983   alias apii='doas pacman -S'
984   alias app='yay -Rns'
985   alias azf='pacman -Q | fzf'
986   alias favorites='pacman -Qe | cut -d " " -f 1 > ~/Documents/favorites'
987 #+end_src
988 **** Other
989 #+begin_src shell :tangle ~/.config/ash/ashrc
990   alias bigrandomfile='dd if=/dev/urandom of=1GB-urandom bs=1M count=1024 \
991     iflag=fullblock status=progress'
992   alias bigboringfile='dd if=/dev/zero of=1GB-zero bs=1M count=1024 \
993     iflag=fullblock status=progress'
994   alias ytmusic="youtube-dl -x --add-metadata  --audio-format aac \
995     --restrict-filenames -o '%(title)s.%(ext)s'"
996   alias cal="cal -3 --color=auto"
997   alias bc='bc -l'
998 #+end_src
999 ** IPython
1000 #+begin_src python :tangle ~/.ipython/profile_default/ipython_config.py
1001   c.TerminalInteractiveShell.editing_mode = 'vi'
1002   c.InteractiveShell.colors = 'linux'
1003   c.TerminalInteractiveShell.confirm_exit = False
1004 #+end_src
1005 ** MPV
1006 Make MPV play a little bit smoother.
1007 #+begin_src conf :tangle ~/.config/mpv/mpv.conf
1008   ytdl-format="bestvideo[height<=?1080]+bestaudio/best"
1009   hwdec=auto-copy
1010 #+end_src
1011 ** Inputrc
1012 For any GNU Readline programs
1013 #+begin_src conf :tangle ~/.inputrc
1014   set editing-mode emacs
1015 #+end_src
1016 ** Git
1017 *** User
1018 #+begin_src conf :tangle ~/.gitconfig
1019   [user]
1020   name = Armaan Bhojwani
1021   email = me@armaanb.net
1022   signingkey = 0FEB9471E19C49C60CFBEB133C9ED82FFE788E4A
1023 #+end_src
1024 *** Init
1025 #+begin_src conf :tangle ~/.gitconfig
1026   [init]
1027   defaultBranch = main
1028 #+end_src
1029 *** GPG
1030 #+begin_src conf :tangle ~/.gitconfig
1031   [gpg]
1032   program = gpg
1033 #+end_src
1034 *** Sendemail
1035 #+begin_src conf :tangle ~/.gitconfig
1036   [sendemail]
1037   smtpserver = smtp.mailbox.org
1038   smtpuser = me@armaanb.net
1039   smtpencryption = ssl
1040   smtpserverport = 465
1041   confirm = auto
1042 #+end_src
1043 *** Submodules
1044 #+begin_src conf :tangle ~/.gitconfig
1045   [submodule]
1046   recurse = true
1047 #+end_src
1048 *** Aliases
1049 #+begin_src conf :tangle ~/.gitconfig
1050   [alias]
1051   stat = diff --stat
1052   sclone = clone --depth 1
1053   sclean = clean -dfX
1054   a = add
1055   aa = add .
1056   c = commit
1057   quickfix = commit . --amend --no-edit
1058   p = push
1059   subup = submodule update --remote
1060   loc = diff --stat 4b825dc642cb6eb9a060e54bf8d69288fbee4904 # Empty hash
1061   pushnc = push -o skip-ci
1062 #+end_src
1063 *** Commits
1064 #+begin_src conf :tangle ~/.gitconfig
1065   [commit]
1066   gpgsign = true
1067   verbose = true
1068 #+end_src
1069 ** Dunst
1070 Lightweight notification daemon.
1071 *** General
1072 #+begin_src conf :tangle ~/.config/dunst/dunstrc
1073   [global]
1074   font = "JetBrains Mono Medium Nerd Font 11"
1075   allow_markup = yes
1076   format = "<b>%s</b>\n%b"
1077   sort = no
1078   indicate_hidden = yes
1079   alignment = center
1080   bounce_freq = 0
1081   show_age_threshold = 60
1082   word_wrap = yes
1083   ignore_newline = no
1084   geometry = "400x5-10+10"
1085   transparency = 0
1086   idle_threshold = 120
1087   monitor = 0
1088   sticky_history = yes
1089   line_height = 0
1090   separator_height = 1
1091   padding = 8
1092   horizontal_padding = 8
1093   max_icon_size = 32
1094   separator_color = "#ffffff"
1095   startup_notification = false
1096 #+end_src
1097 *** Modes
1098 #+begin_src conf :tangle ~/.config/dunst/dunstrc
1099   [frame]
1100   width = 1
1101   color = "#ffffff"
1102
1103   [shortcuts]
1104   close = mod4+c
1105   close_all = mod4+shift+c
1106   history = mod4+ctrl+c
1107
1108   [urgency_low]
1109   background = "#222222"
1110   foreground = "#ffffff"
1111   highlight = "#ffffff"
1112   timeout = 5
1113
1114   [urgency_normal]
1115   background = "#222222"
1116   foreground = "#ffffff"
1117   highlight = "#ffffff"
1118   timeout = 15
1119
1120   [urgency_critical]
1121   background = "#222222"
1122   foreground = "#a60000"
1123   highlight = "#ffffff"
1124   timeout = 0
1125 #+end_src
1126 ** Zathura
1127 *** Options
1128 #+begin_src conf :tangle ~/.config/zathura/zathurarc
1129   map <C-i> recolor
1130   map <A-b> toggle_statusbar
1131   set selection-clipboard clipboard
1132   set scroll-step 200
1133
1134   set window-title-basename "true"
1135   set selection-clipboard "clipboard"
1136 #+end_src
1137 *** Colors
1138 #+begin_src conf :tangle ~/.config/zathura/zathurarc
1139   set default-bg         "#000000"
1140   set default-fg         "#ffffff"
1141   set render-loading     true
1142   set render-loading-bg  "#000000"
1143   set render-loading-fg  "#ffffff"
1144
1145   set recolor-lightcolor "#000000" # bg
1146   set recolor-darkcolor  "#ffffff" # fg
1147   set recolor            "true"
1148 #+end_src
1149 ** Firefox
1150 *** Swap tab and URL bars
1151 #+begin_src css :tangle ~/.mozilla/firefox/armaan-release/chrome/userChrome.css
1152   #nav-bar {
1153       -moz-box-ordinal-group: 1 !important;
1154   }
1155
1156   #PersonalToolbar {
1157       -moz-box-ordinal-group: 2 !important;
1158   }
1159
1160   #titlebar {
1161       -moz-box-ordinal-group: 3 !important;
1162   }
1163 #+end_src
1164 *** Hide URL bar when not focused.
1165 #+begin_src css :tangle ~/.mozilla/firefox/armaan-release/chrome/userChrome.css
1166   #navigator-toolbox:not(:focus-within):not(:hover) {
1167       margin-top: -30px;
1168   }
1169
1170   #navigator-toolbox {
1171       transition: 0.1s margin-top ease-out;
1172   }
1173 #+end_src
1174 *** Black screen by default
1175 userChrome.css:
1176 #+begin_src css :tangle ~/.mozilla/firefox/armaan-release/chrome/userChrome.css
1177   #main-window,
1178   #browser,
1179   #browser vbox#appcontent tabbrowser,
1180   #content,
1181   #tabbrowser-tabpanels,
1182   #tabbrowser-tabbox,
1183   browser[type="content-primary"],
1184   browser[type="content"] > html,
1185   .browserContainer {
1186       background: black !important;
1187       color: #fff !important;
1188   }
1189 #+end_src
1190
1191 userContent.css:
1192 #+begin_src css :tangle ~/.mozilla/firefox/armaan-release/chrome/userContent.css
1193   @-moz-document url("about:home"), url("about:blank"), url("about:newtab") {
1194       body {
1195           background: black !important;
1196       }
1197   }
1198 #+end_src
1199 ** Xresources
1200 Modus operandi theme.
1201 #+begin_src conf :tangle ~/.Xresources
1202   ! special
1203   ,*.foreground:   #ffffff
1204   ,*.background:   #000000
1205   ,*.cursorColor:  #ffffff
1206
1207   ! black
1208   ,*.color0:       #000000
1209   ,*.color8:       #555555
1210
1211   ! red
1212   ,*.color1:       #ff8059
1213   ,*.color9:       #ffa0a0
1214
1215   ! green
1216   ,*.color2:       #00fc50
1217   ,*.color10:      #88cf88
1218
1219   ! yellow
1220   ,*.color3:       #eecc00
1221   ,*.color11:      #d2b580
1222
1223   ! blue
1224   ,*.color4:       #29aeff
1225   ,*.color12:      #92baff
1226
1227   ! magenta
1228   ,*.color5:       #feacd0
1229   ,*.color13:      #e0b2d6
1230
1231   ! cyan
1232   ,*.color6:       #00d3d0
1233   ,*.color14:      #a0bfdf
1234
1235   ! white
1236   ,*.color7:       #eeeeee
1237   ,*.color15:      #dddddd
1238 #+end_src
1239 ** Tmux
1240 #+begin_src conf :tangle ~/.tmux.conf
1241   set -g status off
1242   set -g mouse on
1243   set-window-option -g mode-keys vi
1244 #+end_src
1245 ** GPG
1246 *** Config
1247 #+begin_src conf :tangle ~/.gnupg/gpg.conf
1248   default-key 3C9ED82FFE788E4A
1249   use-agent
1250 #+end_src
1251 *** Agent
1252 #+begin_src conf :tangle ~/.gnupg/gpg-agent.conf
1253   pinentry-program /sbin/pinentry-gnome3
1254   max-cache-ttl 600
1255   default-cache-ttl 600
1256   allow-emacs-pinentry
1257 #+end_src