]> git.armaanb.net Git - config.org.git/blob - config.org
Fix parens
[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 ** Java
551 *** Evaluate current buffer
552 Stolen from https://stackoverflow.com/questions/19953924/how-do-you-run-java-codes-in-emacs
553 #+begin_src emacs-lisp
554   (defun java-eval-buffer ()
555     "run current program (that requires no input)"
556     (interactive)
557     (let* ((source (file-name-nondirectory buffer-file-name))
558            (out    (file-name-sans-extension source))
559            (class  (concat out ".class")))
560       (save-buffer)
561       (shell-command (format "rm -f %s && javac %s" class source))
562       (if (file-exists-p class)
563           (shell-command (format "java %s" out) "*scratch*")
564         (progn
565           (set (make-local-variable 'compile-command)
566                (format "javac %s" source))
567           (command-execute 'compile)))))
568 #+end_src
569 * General text editing
570 ** Indentation
571 Indent after every change.
572 #+begin_src emacs-lisp
573   (use-package aggressive-indent
574     :config (global-aggressive-indent-mode))
575 #+end_src
576 ** Spell checking
577 Spell check in text mode, and in prog-mode comments.
578 #+begin_src emacs-lisp
579   (dolist (hook '(text-mode-hook))
580     (add-hook hook (lambda () (flyspell-mode))))
581   (dolist (hook '(change-log-mode-hook log-edit-mode-hook))
582     (add-hook hook (lambda () (flyspell-mode -1))))
583   (add-hook 'prog-mode (lambda () (flyspell-prog mode)))
584 #+end_src
585 ** Expand tabs to spaces
586 #+begin_src emacs-lisp
587   (setq-default tab-width 2)
588 #+end_src
589 ** Copy kill ring to clipboard
590 #+begin_src emacs-lisp
591   (setq x-select-enable-clipboard t)
592   (defun copy-kill-ring-to-xorg ()
593     "Copy the current kill ring to the xorg clipboard."
594     (interactive)
595     (x-select-text (current-kill 0)))
596 #+end_src
597 ** Save place
598 Opens file where you left it.
599 #+begin_src emacs-lisp
600   (save-place-mode)
601 #+end_src
602 ** Writing mode
603 Distraction free writing a la junegunn/goyo.
604 #+begin_src emacs-lisp
605   (use-package olivetti
606     :config
607     (evil-leader/set-key "o" 'olivetti-mode))
608 #+end_src
609 ** Abbreviations
610 Abbreviate things!
611 #+begin_src emacs-lisp
612   (setq abbrev-file-name "~/.emacs.d/abbrevs.el")
613   (setq save-abbrevs 'silent)
614   (setq-default abbrev-mode t)
615 #+end_src
616 ** TRAMP
617 #+begin_src emacs-lisp
618   (setq tramp-default-method "ssh")
619 #+end_src
620 ** Don't ask about following symlinks in vc
621 #+begin_src emacs-lisp
622   (setq vc-follow-symlinks t)
623 #+end_src
624 ** Don't ask to save custom dictionary
625 #+begin_src emacs-lisp
626   (setq ispell-silently-savep t)
627 #+end_src
628 ** Open file as root
629 #+begin_src emacs-lisp
630   (defun doas-edit (&optional arg)
631     "Edit currently visited file as root.
632
633     With a prefix ARG prompt for a file to visit.
634     Will also prompt for a file to visit if current
635     buffer is not visiting a file.
636
637     Modified from Emacs Redux."
638     (interactive "P")
639     (if (or arg (not buffer-file-name))
640         (find-file (concat "/doas:root@localhost:"
641                            (ido-read-file-name "Find file(as root): ")))
642       (find-alternate-file (concat "/doas:root@localhost:" buffer-file-name))))
643
644     (global-set-key (kbd "C-x C-r") #'doas-edit)
645 #+end_src
646 * Keybindings
647 ** Switch windows
648 #+begin_src emacs-lisp
649   (use-package ace-window
650     :bind ("M-o" . ace-window))
651 #+end_src
652 ** Kill current buffer
653 Makes "C-x k" binding faster.
654 #+begin_src emacs-lisp
655   (substitute-key-definition 'kill-buffer 'kill-buffer-and-window global-map)
656 #+end_src
657 * Other settings
658 ** OpenSCAD
659 #+begin_src emacs-lisp
660   (use-package scad-mode)
661 #+end_src
662 ** Control backup files
663 Stop backup files from spewing everywhere.
664 #+begin_src emacs-lisp
665   (setq backup-directory-alist `(("." . "~/.emacs.d/backups")))
666 #+end_src
667 ** Make yes/no easier
668 #+begin_src emacs-lisp
669   (defalias 'yes-or-no-p 'y-or-n-p)
670 #+end_src
671 ** Move customize file
672 No more clogging up init.el.
673 #+begin_src emacs-lisp
674   (setq custom-file "~/.emacs.d/custom.el")
675   (load custom-file)
676 #+end_src
677 ** Better help
678 #+begin_src emacs-lisp
679   (use-package helpful
680     :commands (helpful-callable helpful-variable helpful-command helpful-key)
681     :custom
682     (counsel-describe-function-function #'helpful-callable)
683     (counsel-describe-variable-function #'helpful-variable)
684     :bind
685     ([remap describe-function] . counsel-describe-function)
686     ([remap describe-command] . helpful-command)
687     ([remap describe-variable] . counsel-describe-variable)
688     ([remap describe-key] . helpful-key))
689 #+end_src
690 ** GPG
691 #+begin_src emacs-lisp
692   (use-package epa-file
693     :straight (:type built-in)
694     :custom
695     (epa-file-select-keys nil)
696     (epa-file-encrypt-to '("me@armaanb.net"))
697     (password-cache-expiry (* 60 15)))
698
699   (use-package pinentry
700     :config (pinentry-start))
701 #+end_src
702 ** Pastebin
703 #+begin_src emacs-lisp
704   (use-package 0x0
705     :straight (0x0 :type git :repo "https://git.sr.ht/~zge/nullpointer-emacs")
706     :custom (0x0-default-service 'envs)
707     :config (evil-leader/set-key
708               "00" '0x0-upload
709               "0f" '0x0-upload-file
710               "0s" '0x0-upload-string
711               "0c" '0x0-upload-kill-ring
712               "0p" '0x0-upload-popup))
713 #+end_src
714 * Tangles
715 ** Spectrwm
716 *** General settings
717 #+begin_src conf :tangle ~/.spectrwm.conf
718   workspace_limit = 5
719   warp_pointer = 1
720   modkey = Mod4
721   autorun = ws[1]:/home/armaa/Code/scripts/autostart
722 #+end_src
723 *** Bar
724 #+begin_src conf :tangle ~/.spectrwm.conf
725   bar_enabled = 0
726   bar_font = xos4 Fira Code:pixelsize=14:antialias=true # any installed font
727 #+end_src
728 *** Keybindings
729 **** WM actions
730 #+begin_src conf :tangle ~/.spectrwm.conf
731   program[term] = st -e tmux
732   program[screenshot_all] = flameshot gui
733   program[notif] = /home/armaa/Code/scripts/setter status
734   program[pass] = /home/armaa/Code/scripts/passmenu
735
736   bind[notif] = MOD+n
737   bind[pass] = MOD+Shift+p
738 #+end_src
739 **** Media keys
740 #+begin_src conf :tangle ~/.spectrwm.conf
741   program[paup] = /home/armaa/Code/scripts/setter audio +5
742   program[padown] = /home/armaa/Code/scripts/setter audio -5
743   program[pamute] = /home/armaa/Code/scripts/setter audio
744   program[brigup] = /home/armaa/Code/scripts/setter brightness +10%
745   program[brigdown] = /home/armaa/Code/scripts/setter brightness 10%-
746   program[next] = playerctl next
747   program[prev] = playerctl previous
748   program[pause] = playerctl play-pause
749
750   bind[padown] = XF86AudioLowerVolume
751   bind[paup] = XF86AudioRaiseVolume
752   bind[pamute] = XF86AudioMute
753   bind[brigdown] = XF86MonBrightnessDown
754   bind[brigup] = XF86MonBrightnessUp
755   bind[pause] = XF86AudioPlay
756   bind[next] = XF86AudioNext
757   bind[prev] = XF86AudioPrev
758 #+end_src
759 **** HJKL
760 #+begin_src conf :tangle ~/.spectrwm.conf
761   program[h] = xdotool keyup h key --clearmodifiers Left
762   program[j] = xdotool keyup j key --clearmodifiers Down
763   program[k] = xdotool keyup k key --clearmodifiers Up
764   program[l] = xdotool keyup l key --clearmodifiers Right
765
766   bind[h] = MOD + Control + h
767   bind[j] = MOD + Control + j
768   bind[k] = MOD + Control + k
769   bind[l] = MOD + Control + l
770 #+end_src
771 **** Programs
772 #+begin_src conf :tangle ~/.spectrwm.conf
773   program[email] = emacsclient -c --eval "(mu4e)"
774   program[irc] = emacsclient -c --eval '(switch-to-buffer "irc.armaanb.net:6697")'
775   program[emacs] = emacsclient -c
776   program[firefox] = firefox
777   program[calc] = st -e because -l
778   program[emacs-anywhere] = emacsclient --eval "(emacs-everywhere)"
779
780   bind[email] = MOD+Control+1
781   bind[irc] = MOD+Control+2
782   bind[firefox] = MOD+Control+3
783   bind[emacs-anywhere] = MOD+Control+4
784   bind[calc] = MOD+Control+5
785   bind[emacs] = MOD+Control+Return
786 #+end_src
787 **** Quirks
788 #+begin_src conf :tangle ~/.spectrwm.conf
789   quirk[Castle Menu] = FLOAT
790   quirk[momen] = FLOAT
791 #+end_src
792 ** Ash
793 *** Options
794 #+begin_src conf :tangle ~/.config/ash/ashrc
795   set -o vi
796 #+end_src
797 *** Functions
798 **** Update all packages
799 #+begin_src shell :tangle ~/.config/ash/ashrc
800   color=$(tput setaf 5)
801   reset=$(tput sgr0)
802
803   apu() {
804       doas echo "${color}== upgrading with yay ==${reset}"
805       yay
806       echo ""
807       echo "${color}== checking for pacnew files ==${reset}"
808       doas pacdiff
809       echo
810       echo "${color}== upgrading flatpaks ==${reset}"
811       flatpak update
812       echo ""
813       echo "${color}== updating nvim plugins ==${reset}"
814       nvim +PlugUpdate +PlugUpgrade +qall
815       echo "Updated nvim plugins"
816       echo ""
817       echo "${color}You are entirely up to date!${reset}"
818   }
819 #+end_src
820 **** Clean all packages
821 #+begin_src shell :tangle ~/.config/ash/ashrc
822   apap() {
823       doas echo "${color}== cleaning pacman orphans ==${reset}"
824       (pacman -Qtdq | doas pacman -Rns - 2> /dev/null) || echo "No orphans"
825       echo ""
826       echo "${color}== cleaning flatpaks ==${reset}"
827       flatpak remove --unused
828       echo ""
829       echo "${color}== cleaning nvim plugins ==${reset}"
830       nvim +PlugClean +qall
831       echo "Cleaned nvim plugins"
832       echo ""
833       echo "${color}All orphans cleaned!${reset}"
834   }
835 #+end_src
836 **** Interact with 0x0
837 #+begin_src shell :tangle ~/.config/ash/ashrc
838   zxz="https://envs.sh"
839   ufile() { curl -F"file=@$1" "$zxz" ; }
840   upb() { curl -F"file=@-;" "$zxz" ; }
841   uurl() { curl -F"url=$1" "$zxz" ; }
842   ushort() { curl -F"shorten=$1" "$zxz" ; }
843   uclip() { xclip -out | curl -F"file=@-;" "$zxz" ; }
844 #+end_src
845 **** Finger
846 #+begin_src shell :tangle ~/.config/ash/ashrc
847   finger() {
848       user=$(echo "$1" | cut -f 1 -d '@')
849       host=$(echo "$1" | cut -f 2 -d '@')
850       echo $user | nc "$host" 79
851   }
852 #+end_src
853 **** Upload to ftp.armaanb.net
854 #+begin_src shell :tangle ~/.config/ash/ashrc
855   pubup() {
856       rsync "$1" "root@armaanb.net:/var/ftp/pub/${2}"
857       echo "https://ftp.armaanb.net/pub/"$(basename "$1") | tee /dev/tty | xclip -sel c
858   }
859 #+end_src
860 *** Exports
861 #+begin_src shell :tangle ~/.config/ash/ashrc
862   export EDITOR="emacsclient -c"
863   export VISUAL="$EDITOR"
864   export TERM=xterm-256color # for compatability
865
866   export GPG_TTY="$(tty)"
867   export MANPAGER='nvim +Man!'
868   export PAGER='less'
869
870   export GTK_USE_PORTAL=1
871
872   export PATH="/home/armaa/.local/bin:$PATH" # prioritize .local/bin
873   export PATH="/home/armaa/Code/scripts:$PATH" # prioritize my scripts
874   export PATH="/home/armaa/Code/scripts/bin:$PATH" # prioritize my bins
875   export PATH="$PATH:/home/armaa/.cargo/bin"
876   export PATH="$PATH:/home/armaa/.local/share/gem/ruby/2.7.0/bin"
877   export PATH="$PATH:/usr/sbin"
878   export PATH="$PATH:/opt/FreeTube/freetube"
879
880   export LC_ALL="en_US.UTF-8"
881   export LC_CTYPE="en_US.UTF-8"
882   export LANGUAGE="en_US.UTF-8"
883
884   export KISS_PATH="/home/armaa/Virtual/kiss/home/armaa/kiss-repo"
885   export KISS_PATH="$KISS_PATH:/home/armaa/Clone/repo-main/core"
886   export KISS_PATH="$KISS_PATH:/home/armaa/Clone/repo-main/extra"
887   export KISS_PATH="$KISS_PATH:/home/armaa/Clone/repo-main/xorg"
888   export KISS_PATH="$KISS_PATH:/home/armaa/Clone/repo-main/testing"
889   export KISS_PATH="$KISS_PATH:/home/armaa/Clone/repo-community/community"
890 #+end_src
891 *** Aliases
892 **** SSH
893 #+begin_src shell :tangle ~/.config/ash/ashrc
894   alias bhoji-drop='ssh -p 23 root@armaanb.net'
895   alias irc='ssh root@armaanb.net -t abduco -A irc catgirl freenode'
896   alias union='ssh 192.168.1.18'
897   alias mine='ssh -p 23 root@pickupserver.cc'
898   alias tcf='ssh root@204.48.23.68'
899   alias ngmun='ssh root@157.245.89.25'
900   alias prox='ssh root@192.168.1.224'
901   alias ncq='ssh root@143.198.123.17'
902   alias envs='ssh acheam@envs.net'
903 #+end_src
904 **** File management
905 #+begin_src shell :tangle ~/.config/ash/ashrc
906   alias ls='ls -lh --group-directories-first'
907   alias la='ls -A'
908   alias df='df -h / /boot'
909   alias du='du -h'
910   alias free='free -h'
911   alias cp='cp -riv'
912   alias rm='rm -iv'
913   alias mv='mv -iv'
914   alias ln='ln -v'
915   alias grep='grep -in --color=auto'
916   alias mkdir='mkdir -pv'
917   alias lanex='java -jar ~/.local/share/lxc/lanxchange.jar'
918   alias vim=$EDITOR
919   alias emacs=$EDITOR
920 #+end_src
921 **** System management
922 #+begin_src shell :tangle ~/.config/ash/ashrc
923   alias pkill='pkill -i'
924   alias crontab='crontab-argh'
925   alias sudo='doas'
926   alias pasu='git -C ~/.password-store push'
927   alias yadu='yadm add -u && yadm commit -m "Updated `date -Iseconds`" && \
928     yadm push'
929 #+end_src
930 **** Networking
931 #+begin_src shell :tangle ~/.config/ash/ashrc
932   alias ping='ping -c 10'
933   alias gps='gpg --keyserver keyserver.ubuntu.com --search-keys'
934   alias gpp='gpg --keyserver keyserver.ubuntu.com --recv-key'
935   alias plan='T=$(mktemp) && \
936         rsync root@armaanb.net:/etc/finger/plan.txt "$T" && \
937         TT=$(mktemp) && \
938         head -n -2 $T > $TT && \
939         vim $TT && \
940         echo "\nLast updated: $(date -R)" >> "$TT" && \
941         fold -sw 72 "$TT" > "$T"| \
942         rsync "$T" root@armaanb.net:/etc/finger/plan.txt'
943 #+end_src
944 **** Virtual machines, chroots
945 #+begin_src shell :tangle ~/.config/ash/ashrc
946   alias ckiss="doas chrooter ~/Virtual/kiss"
947   alias cdebian="doas chrooter ~/Virtual/debian bash"
948   alias cwindows='devour qemu-system-x86_64 \
949     -smp 3 \
950     -cpu host \
951     -enable-kvm \
952     -m 3G \
953     -device VGA,vgamem_mb=64 \
954     -device intel-hda \
955     -device hda-duplex \
956     -net nic \
957     -net user,smb=/home/armaa/Public \
958     -drive format=qcow2,file=/home/armaa/Virtual/windows.qcow2'
959 #+end_src
960 **** Python
961 #+begin_src shell :tangle ~/.config/ash/ashrc
962   alias pip="python -m pip"
963   alias black="black -l 79"
964 #+end_src
965 **** Latin
966 #+begin_src shell :tangle ~/.config/ash/ashrc
967   alias words='gen-shell -c "words"'
968   alias words-e='gen-shell -c "words ~E"'
969 #+end_src
970 **** Devour
971 #+begin_src shell :tangle ~/.config/ash/ashrc
972   alias zathura='devour zathura'
973   alias cad='devour openscad'
974   alias feh='devour feh'
975 #+end_src
976 **** Pacman
977 #+begin_src shell :tangle ~/.config/ash/ashrc
978   alias aps='yay -Ss'
979   alias api='yay -Syu'
980   alias apii='doas pacman -S'
981   alias app='yay -Rns'
982   alias azf='pacman -Q | fzf'
983   alias favorites='pacman -Qe | cut -d " " -f 1 > ~/Documents/favorites'
984 #+end_src
985 **** Other
986 #+begin_src shell :tangle ~/.config/ash/ashrc
987   alias bigrandomfile='dd if=/dev/urandom of=1GB-urandom bs=1M count=1024 \
988     iflag=fullblock status=progress'
989   alias bigboringfile='dd if=/dev/zero of=1GB-zero bs=1M count=1024 \
990     iflag=fullblock status=progress'
991   alias ytmusic="youtube-dl -x --add-metadata  --audio-format aac \
992     --restrict-filenames -o '%(title)s.%(ext)s'"
993   alias cal="cal -3 --color=auto"
994   alias bc='bc -l'
995 #+end_src
996 ** IPython
997 #+begin_src python :tangle ~/.ipython/profile_default/ipython_config.py
998   c.TerminalInteractiveShell.editing_mode = 'vi'
999   c.InteractiveShell.colors = 'linux'
1000   c.TerminalInteractiveShell.confirm_exit = False
1001 #+end_src
1002 ** MPV
1003 Make MPV play a little bit smoother.
1004 #+begin_src conf :tangle ~/.config/mpv/mpv.conf
1005   ytdl-format="bestvideo[height<=?1080]+bestaudio/best"
1006   hwdec=auto-copy
1007 #+end_src
1008 ** Inputrc
1009 For any GNU Readline programs
1010 #+begin_src conf :tangle ~/.inputrc
1011   set editing-mode emacs
1012 #+end_src
1013 ** Git
1014 *** User
1015 #+begin_src conf :tangle ~/.gitconfig
1016   [user]
1017   name = Armaan Bhojwani
1018   email = me@armaanb.net
1019   signingkey = 0FEB9471E19C49C60CFBEB133C9ED82FFE788E4A
1020 #+end_src
1021 *** Init
1022 #+begin_src conf :tangle ~/.gitconfig
1023   [init]
1024   defaultBranch = main
1025 #+end_src
1026 *** GPG
1027 #+begin_src conf :tangle ~/.gitconfig
1028   [gpg]
1029   program = gpg
1030 #+end_src
1031 *** Sendemail
1032 #+begin_src conf :tangle ~/.gitconfig
1033   [sendemail]
1034   smtpserver = smtp.mailbox.org
1035   smtpuser = me@armaanb.net
1036   smtpencryption = ssl
1037   smtpserverport = 465
1038   confirm = auto
1039 #+end_src
1040 *** Submodules
1041 #+begin_src conf :tangle ~/.gitconfig
1042   [submodule]
1043   recurse = true
1044 #+end_src
1045 *** Aliases
1046 #+begin_src conf :tangle ~/.gitconfig
1047   [alias]
1048   stat = diff --stat
1049   sclone = clone --depth 1
1050   sclean = clean -dfX
1051   a = add
1052   aa = add .
1053   c = commit
1054   quickfix = commit . --amend --no-edit
1055   p = push
1056   subup = submodule update --remote
1057   loc = diff --stat 4b825dc642cb6eb9a060e54bf8d69288fbee4904 # Empty hash
1058   pushnc = push -o skip-ci
1059 #+end_src
1060 *** Commits
1061 #+begin_src conf :tangle ~/.gitconfig
1062   [commit]
1063   gpgsign = true
1064   verbose = true
1065 #+end_src
1066 ** Dunst
1067 Lightweight notification daemon.
1068 *** General
1069 #+begin_src conf :tangle ~/.config/dunst/dunstrc
1070   [global]
1071   font = "JetBrains Mono Medium Nerd Font 11"
1072   allow_markup = yes
1073   format = "<b>%s</b>\n%b"
1074   sort = no
1075   indicate_hidden = yes
1076   alignment = center
1077   bounce_freq = 0
1078   show_age_threshold = 60
1079   word_wrap = yes
1080   ignore_newline = no
1081   geometry = "400x5-10+10"
1082   transparency = 0
1083   idle_threshold = 120
1084   monitor = 0
1085   sticky_history = yes
1086   line_height = 0
1087   separator_height = 1
1088   padding = 8
1089   horizontal_padding = 8
1090   max_icon_size = 32
1091   separator_color = "#ffffff"
1092   startup_notification = false
1093 #+end_src
1094 *** Modes
1095 #+begin_src conf :tangle ~/.config/dunst/dunstrc
1096   [frame]
1097   width = 1
1098   color = "#ffffff"
1099
1100   [shortcuts]
1101   close = mod4+c
1102   close_all = mod4+shift+c
1103   history = mod4+ctrl+c
1104
1105   [urgency_low]
1106   background = "#222222"
1107   foreground = "#ffffff"
1108   highlight = "#ffffff"
1109   timeout = 5
1110
1111   [urgency_normal]
1112   background = "#222222"
1113   foreground = "#ffffff"
1114   highlight = "#ffffff"
1115   timeout = 15
1116
1117   [urgency_critical]
1118   background = "#222222"
1119   foreground = "#a60000"
1120   highlight = "#ffffff"
1121   timeout = 0
1122 #+end_src
1123 ** Zathura
1124 *** Options
1125 #+begin_src conf :tangle ~/.config/zathura/zathurarc
1126   map <C-i> recolor
1127   map <A-b> toggle_statusbar
1128   set selection-clipboard clipboard
1129   set scroll-step 200
1130
1131   set window-title-basename "true"
1132   set selection-clipboard "clipboard"
1133 #+end_src
1134 *** Colors
1135 #+begin_src conf :tangle ~/.config/zathura/zathurarc
1136   set default-bg         "#000000"
1137   set default-fg         "#ffffff"
1138   set render-loading     true
1139   set render-loading-bg  "#000000"
1140   set render-loading-fg  "#ffffff"
1141
1142   set recolor-lightcolor "#000000" # bg
1143   set recolor-darkcolor  "#ffffff" # fg
1144   set recolor            "true"
1145 #+end_src
1146 ** Firefox
1147 *** Swap tab and URL bars
1148 #+begin_src css :tangle ~/.mozilla/firefox/armaan-release/chrome/userChrome.css
1149   #nav-bar {
1150       -moz-box-ordinal-group: 1 !important;
1151   }
1152
1153   #PersonalToolbar {
1154       -moz-box-ordinal-group: 2 !important;
1155   }
1156
1157   #titlebar {
1158       -moz-box-ordinal-group: 3 !important;
1159   }
1160 #+end_src
1161 *** Hide URL bar when not focused.
1162 #+begin_src css :tangle ~/.mozilla/firefox/armaan-release/chrome/userChrome.css
1163   #navigator-toolbox:not(:focus-within):not(:hover) {
1164       margin-top: -30px;
1165   }
1166
1167   #navigator-toolbox {
1168       transition: 0.1s margin-top ease-out;
1169   }
1170 #+end_src
1171 *** Black screen by default
1172 userChrome.css:
1173 #+begin_src css :tangle ~/.mozilla/firefox/armaan-release/chrome/userChrome.css
1174   #main-window,
1175   #browser,
1176   #browser vbox#appcontent tabbrowser,
1177   #content,
1178   #tabbrowser-tabpanels,
1179   #tabbrowser-tabbox,
1180   browser[type="content-primary"],
1181   browser[type="content"] > html,
1182   .browserContainer {
1183       background: black !important;
1184       color: #fff !important;
1185   }
1186 #+end_src
1187
1188 userContent.css:
1189 #+begin_src css :tangle ~/.mozilla/firefox/armaan-release/chrome/userContent.css
1190   @-moz-document url("about:home"), url("about:blank"), url("about:newtab") {
1191       body {
1192           background: black !important;
1193       }
1194   }
1195 #+end_src
1196 ** Xresources
1197 Modus operandi theme.
1198 #+begin_src conf :tangle ~/.Xresources
1199   ! special
1200   ,*.foreground:   #ffffff
1201   ,*.background:   #000000
1202   ,*.cursorColor:  #ffffff
1203
1204   ! black
1205   ,*.color0:       #000000
1206   ,*.color8:       #555555
1207
1208   ! red
1209   ,*.color1:       #ff8059
1210   ,*.color9:       #ffa0a0
1211
1212   ! green
1213   ,*.color2:       #00fc50
1214   ,*.color10:      #88cf88
1215
1216   ! yellow
1217   ,*.color3:       #eecc00
1218   ,*.color11:      #d2b580
1219
1220   ! blue
1221   ,*.color4:       #29aeff
1222   ,*.color12:      #92baff
1223
1224   ! magenta
1225   ,*.color5:       #feacd0
1226   ,*.color13:      #e0b2d6
1227
1228   ! cyan
1229   ,*.color6:       #00d3d0
1230   ,*.color14:      #a0bfdf
1231
1232   ! white
1233   ,*.color7:       #eeeeee
1234   ,*.color15:      #dddddd
1235 #+end_src
1236 ** Tmux
1237 #+begin_src conf :tangle ~/.tmux.conf
1238   set -g status off
1239   set -g mouse on
1240   set-window-option -g mode-keys vi
1241 #+end_src
1242 ** GPG
1243 *** Config
1244 #+begin_src conf :tangle ~/.gnupg/gpg.conf
1245   default-key 3C9ED82FFE788E4A
1246   use-agent
1247 #+end_src
1248 *** Agent
1249 #+begin_src conf :tangle ~/.gnupg/gpg-agent.conf
1250   pinentry-program /sbin/pinentry-gnome3
1251   max-cache-ttl 600
1252   default-cache-ttl 600
1253   allow-emacs-pinentry
1254 #+end_src