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