]> git.armaanb.net Git - config.org.git/blob - config.org
Remove emacs-anywhere
[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           mu4e-contexts
361           `( ,(make-mu4e-context
362                :name "school"
363                :enter-func (lambda () (mu4e-message "Entering school context"))
364                :leave-func (lambda () (mu4e-message "Leaving school context"))
365                :match-func (lambda (msg)
366                              (when msg
367                                (string-match-p "^/school" (mu4e-message-field msg :maildir))))
368                :vars '((user-mail-address . "abhojwani22@nobles.edu")
369                        (mu4e-sent-folder . "/school/Sent")
370                        (mu4e-drafts-folder . "/school/Drafts")
371                        (mu4e-trash-folder . "/school/Trash")
372                        (mu4e-refile-folder . "/school/Archive")
373                        (message-cite-reply-position . above)
374                        (user-mail-address . "abhojwani22@nobles.edu")
375                        (smtpmail-smtp-user . "abhojwani22@nobles.edu")
376                        (smtpmail-smtp-server . "smtp.gmail.com")))
377              ,(make-mu4e-context
378                :name "personal"
379                :enter-func (lambda () (mu4e-message "Entering personal context"))
380                :leave-func (lambda () (mu4e-message "Leaving personal context"))
381                :match-func (lambda (msg)
382                              (when msg
383                                (string-match-p "^/personal" (mu4e-message-field msg :maildir))))
384                :vars '((mu4e-sent-folder . "/personal/Sent")
385                        (mu4e-drafts-folder . "/personal/Drafts")
386                        (mu4e-trash-folder . "/personal/Trash")
387                        (mu4e-refile-folder . "/personal/Archive")
388                        (user-mail-address . "me@armaanb.net")
389                        (message-cite-reply-position . below)
390                        (smtpmail-smtp-user . "me@armaanb.net")
391                        (smtpmail-smtp-server . "smtp.mailbox.org")))))
392     (add-to-list 'mu4e-bookmarks
393                  '(:name "Unified inbox"
394                          :query "maildir:\"/personal/INBOX\" or maildir:\"/school/INBOX\""
395                          :key ?b))
396     :hook ((mu4e-compose-mode . flyspell-mode)
397            (mu4e-compose-mode . auto-fill-mode)
398            (mu4e-view-mode-hook . turn-on-visual-line-mode)))
399
400 #+end_src
401 Discourage Gnus from displaying HTML emails
402 #+begin_src emacs-lisp
403   (with-eval-after-load "mm-decode"
404     (add-to-list 'mm-discouraged-alternatives "text/html")
405     (add-to-list 'mm-discouraged-alternatives "text/richtext"))
406 #+end_src
407 ** Default browser
408 Set EWW as default browser except for videos.
409 #+begin_src emacs-lisp
410   (defun browse-url-mpv (url &optional new-window)
411     "Open URL in MPV."
412     (start-process "mpv" "*mpv*" "mpv" url))
413
414   (setq browse-url-handlers
415         (quote
416          (("youtu\\.?be" . browse-url-mpv)
417           ("peertube.*" . browse-url-mpv)
418           ("vid.*" . browse-url-mpv)
419           ("vid.*" . browse-url-mpv)
420           ("." . eww-browse-url)
421           )))
422 #+end_src
423 ** EWW
424 Some EWW enhancements.
425 *** Give buffer a useful name
426 #+begin_src emacs-lisp
427   ;; From https://protesilaos.com/dotemacs/
428   (defun prot-eww--rename-buffer ()
429     "Rename EWW buffer using page title or URL.
430         To be used by `eww-after-render-hook'."
431     (let ((name (if (eq "" (plist-get eww-data :title))
432                     (plist-get eww-data :url)
433                   (plist-get eww-data :title))))
434       (rename-buffer (format "*%s # eww*" name) t)))
435
436   (use-package eww
437     :straight (:type built-in)
438     :bind (("C-c w" . eww))
439     :hook (eww-after-render-hook prot-eww--rename-buffer))
440 #+end_src
441 *** Keybinding
442 #+begin_src emacs-lisp
443   (global-set-key (kbd "C-c w") 'eww)
444 #+end_src
445 ** IRC
446 #+begin_src emacs-lisp
447   (use-package circe
448     :config
449     (enable-lui-track)
450     (enable-circe-color-nicks))
451
452   (defun fetch-password (&rest params)
453     (require 'auth-source)
454     (let ((match (car (apply 'auth-source-search params))))
455       (if match
456           (let ((secret (plist-get match :secret)))
457             (if (functionp secret)
458                 (funcall secret)
459               secret))
460         (error "Password not found for %S" params))))
461
462   (setq circe-network-options
463         '(("pounce"
464            :host "irc.armaanb.net"
465            :nick "emacs"
466            :use-tls t
467            :port "6697"
468            :pass (lambda (fetch-password
469                           :login "emacs"
470                           :machine "irc.armaanb.net"
471                           :port 6697))))
472
473         (circe "pounce")
474 #+end_src
475 * Emacs IDE
476 ** Code cleanup
477 #+begin_src emacs-lisp
478   (use-package blacken
479     :hook (python-mode . blacken-mode)
480     :config (setq blacken-line-length 79))
481
482   ;; Purge whitespace
483   (use-package ws-butler
484     :config (ws-butler-global-mode))
485 #+end_src
486 ** Flycheck
487 #+begin_src emacs-lisp
488   (use-package flycheck
489     :config (global-flycheck-mode))
490 #+end_src
491 ** Project management
492 #+begin_src emacs-lisp
493   (use-package projectile
494     :config (projectile-mode)
495     :custom ((projectile-completion-system 'ivy))
496     :bind-keymap
497     ("C-c p" . projectile-command-map)
498     :init
499     (when (file-directory-p "~/Code")
500       (setq projectile-project-search-path '("~/Code")))
501     (setq projectile-switch-project-action #'projectile-dired))
502
503   (use-package counsel-projectile
504     :after projectile
505     :config (counsel-projectile-mode))
506 #+end_src
507 ** Dired
508 #+begin_src emacs-lisp
509   (use-package dired
510     :straight (:type built-in)
511     :commands (dired dired-jump)
512     :custom ((dired-listing-switches "-agho --group-directories-first"))
513     :config (evil-collection-define-key 'normal 'dired-mode-map
514               "h" 'dired-single-up-directory
515               "l" 'dired-single-buffer))
516
517   (use-package dired-single
518     :commands (dired dired-jump))
519
520   (use-package dired-open
521     :commands (dired dired-jump)
522     :custom (dired-open-extensions '(("png" . "feh")
523                                      ("mkv" . "mpv"))))
524
525   (use-package dired-hide-dotfiles
526     :hook (dired-mode . dired-hide-dotfiles-mode)
527     :config
528     (evil-collection-define-key 'normal 'dired-mode-map
529       "H" 'dired-hide-dotfiles-mode))
530 #+end_src
531 ** Git
532 *** Magit
533 # TODO: Write a command that commits hunk, skipping staging step.
534 #+begin_src emacs-lisp
535   (use-package magit)
536 #+end_src
537 *** Colored diff in line number area
538 #+begin_src emacs-lisp
539   (use-package diff-hl
540     :straight (diff-hl :type git :host github :repo "dgutov/diff-hl")
541     :hook ((magit-pre-refresh-hook . diff-hl-magit-pre-refresh)
542            (magit-post-refresh-hook . diff-hl-magit-post-refresh))
543     :config (global-diff-hl-mode))
544 #+end_src
545 *** Email
546 #+begin_src emacs-lisp
547   (use-package piem)
548   (use-package git-email
549     :straight (git-email :repo "https://git.sr.ht/~yoctocell/git-email")
550     :config (git-email-piem-mode))
551 #+end_src
552 ** Java
553 *** Evaluate current buffer
554 Stolen from https://stackoverflow.com/questions/19953924/how-do-you-run-java-codes-in-emacs
555 #+begin_src emacs-lisp
556   (defun java-eval-buffer ()
557     "run current program (that requires no input)"
558     (interactive)
559     (let* ((source (file-name-nondirectory buffer-file-name))
560            (out    (file-name-sans-extension source))
561            (class  (concat out ".class")))
562       (save-buffer)
563       (shell-command (format "rm -f %s && javac %s" class source))
564       (if (file-exists-p class)
565           (shell-command (format "java %s" out) "*scratch*")
566         (progn
567           (set (make-local-variable 'compile-command)
568                (format "javac %s" source))
569           (command-execute 'compile)))))
570 #+end_src
571 * General text editing
572 ** Indentation
573 Indent after every change.
574 #+begin_src emacs-lisp
575   (use-package aggressive-indent
576     :config (global-aggressive-indent-mode))
577 #+end_src
578 ** Spell checking
579 Spell check in text mode, and in prog-mode comments.
580 #+begin_src emacs-lisp
581   (dolist (hook '(text-mode-hook))
582     (add-hook hook (lambda () (flyspell-mode))))
583   (dolist (hook '(change-log-mode-hook log-edit-mode-hook))
584     (add-hook hook (lambda () (flyspell-mode -1))))
585   (add-hook 'prog-mode (lambda () (flyspell-prog mode)))
586 #+end_src
587 ** Expand tabs to spaces
588 #+begin_src emacs-lisp
589   (setq-default tab-width 2)
590 #+end_src
591 ** Copy kill ring to clipboard
592 #+begin_src emacs-lisp
593   (setq x-select-enable-clipboard t)
594   (defun copy-kill-ring-to-xorg ()
595     "Copy the current kill ring to the xorg clipboard."
596     (interactive)
597     (x-select-text (current-kill 0)))
598 #+end_src
599 ** Save place
600 Opens file where you left it.
601 #+begin_src emacs-lisp
602   (save-place-mode)
603 #+end_src
604 ** Writing mode
605 Distraction free writing a la junegunn/goyo.
606 #+begin_src emacs-lisp
607   (use-package olivetti
608     :config
609     (evil-leader/set-key "o" 'olivetti-mode))
610 #+end_src
611 ** Abbreviations
612 Abbreviate things!
613 #+begin_src emacs-lisp
614   (setq abbrev-file-name "~/.emacs.d/abbrevs.el")
615   (setq save-abbrevs 'silent)
616   (setq-default abbrev-mode t)
617 #+end_src
618 ** TRAMP
619 #+begin_src emacs-lisp
620   (setq tramp-default-method "ssh")
621 #+end_src
622 ** Don't ask about following symlinks in vc
623 #+begin_src emacs-lisp
624   (setq vc-follow-symlinks t)
625 #+end_src
626 ** Don't ask to save custom dictionary
627 #+begin_src emacs-lisp
628   (setq ispell-silently-savep t)
629 #+end_src
630 ** Open file as root
631 #+begin_src emacs-lisp
632   (defun doas-edit (&optional arg)
633     "Edit currently visited file as root.
634
635     With a prefix ARG prompt for a file to visit.
636     Will also prompt for a file to visit if current
637     buffer is not visiting a file.
638
639     Modified from Emacs Redux."
640     (interactive "P")
641     (if (or arg (not buffer-file-name))
642         (find-file (concat "/doas:root@localhost:"
643                            (ido-read-file-name "Find file(as root): ")))
644       (find-alternate-file (concat "/doas:root@localhost:" buffer-file-name))))
645
646     (global-set-key (kbd "C-x C-r") #'doas-edit)
647 #+end_src
648 * Keybindings
649 ** Switch windows
650 #+begin_src emacs-lisp
651   (use-package ace-window
652     :bind ("M-o" . ace-window))
653 #+end_src
654 ** Kill current buffer
655 Makes "C-x k" binding faster.
656 #+begin_src emacs-lisp
657   (substitute-key-definition 'kill-buffer 'kill-buffer-and-window global-map)
658 #+end_src
659 * Other settings
660 ** OpenSCAD
661 #+begin_src emacs-lisp
662   (use-package scad-mode)
663 #+end_src
664 ** Control backup files
665 Stop backup files from spewing everywhere.
666 #+begin_src emacs-lisp
667   (setq backup-directory-alist `(("." . "~/.emacs.d/backups")))
668 #+end_src
669 ** Make yes/no easier
670 #+begin_src emacs-lisp
671   (defalias 'yes-or-no-p 'y-or-n-p)
672 #+end_src
673 ** Move customize file
674 No more clogging up init.el.
675 #+begin_src emacs-lisp
676   (setq custom-file "~/.emacs.d/custom.el")
677   (load custom-file)
678 #+end_src
679 ** Better help
680 #+begin_src emacs-lisp
681   (use-package helpful
682     :commands (helpful-callable helpful-variable helpful-command helpful-key)
683     :custom
684     (counsel-describe-function-function #'helpful-callable)
685     (counsel-describe-variable-function #'helpful-variable)
686     :bind
687     ([remap describe-function] . counsel-describe-function)
688     ([remap describe-command] . helpful-command)
689     ([remap describe-variable] . counsel-describe-variable)
690     ([remap describe-key] . helpful-key))
691 #+end_src
692 ** GPG
693 #+begin_src emacs-lisp
694   (use-package epa-file
695     :straight (:type built-in)
696     :custom
697     (epa-file-select-keys nil)
698     (epa-file-encrypt-to '("me@armaanb.net"))
699     (password-cache-expiry (* 60 15)))
700
701   (use-package pinentry
702     :config (pinentry-start))
703 #+end_src
704 ** Pastebin
705 #+begin_src emacs-lisp
706   (use-package 0x0
707     :straight (0x0 :type git :repo "https://git.sr.ht/~zge/nullpointer-emacs")
708     :custom (0x0-default-service 'envs)
709     :config (evil-leader/set-key
710               "00" '0x0-upload
711               "0f" '0x0-upload-file
712               "0s" '0x0-upload-string
713               "0c" '0x0-upload-kill-ring
714               "0p" '0x0-upload-popup))
715 #+end_src
716 * Tangles
717 ** Spectrwm
718 *** General settings
719 #+begin_src conf :tangle ~/.spectrwm.conf
720   workspace_limit = 5
721   warp_pointer = 1
722   modkey = Mod4
723   autorun = ws[1]:/home/armaa/Code/scripts/autostart
724 #+end_src
725 *** Bar
726 #+begin_src conf :tangle ~/.spectrwm.conf
727   bar_enabled = 0
728   bar_font = xos4 Fira Code:pixelsize=14:antialias=true # any installed font
729 #+end_src
730 *** Keybindings
731 **** WM actions
732 #+begin_src conf :tangle ~/.spectrwm.conf
733   program[term] = st -e tmux
734   program[screenshot_all] = flameshot gui
735   program[notif] = /home/armaa/Code/scripts/setter status
736   program[pass] = /home/armaa/Code/scripts/passmenu
737
738   bind[notif] = MOD+n
739   bind[pass] = MOD+Shift+p
740 #+end_src
741 **** Media keys
742 #+begin_src conf :tangle ~/.spectrwm.conf
743   program[paup] = /home/armaa/Code/scripts/setter audio +5
744   program[padown] = /home/armaa/Code/scripts/setter audio -5
745   program[pamute] = /home/armaa/Code/scripts/setter audio
746   program[brigup] = /home/armaa/Code/scripts/setter brightness +10%
747   program[brigdown] = /home/armaa/Code/scripts/setter brightness 10%-
748   program[next] = playerctl next
749   program[prev] = playerctl previous
750   program[pause] = playerctl play-pause
751
752   bind[padown] = XF86AudioLowerVolume
753   bind[paup] = XF86AudioRaiseVolume
754   bind[pamute] = XF86AudioMute
755   bind[brigdown] = XF86MonBrightnessDown
756   bind[brigup] = XF86MonBrightnessUp
757   bind[pause] = XF86AudioPlay
758   bind[next] = XF86AudioNext
759   bind[prev] = XF86AudioPrev
760 #+end_src
761 **** HJKL
762 #+begin_src conf :tangle ~/.spectrwm.conf
763   program[h] = xdotool keyup h key --clearmodifiers Left
764   program[j] = xdotool keyup j key --clearmodifiers Down
765   program[k] = xdotool keyup k key --clearmodifiers Up
766   program[l] = xdotool keyup l key --clearmodifiers Right
767
768   bind[h] = MOD + Control + h
769   bind[j] = MOD + Control + j
770   bind[k] = MOD + Control + k
771   bind[l] = MOD + Control + l
772 #+end_src
773 **** Programs
774 #+begin_src conf :tangle ~/.spectrwm.conf
775   program[email] = emacsclient -c --eval "(mu4e)"
776   program[irc] = emacsclient -c --eval '(switch-to-buffer "irc.armaanb.net:6697")'
777   program[emacs] = emacsclient -c
778   program[firefox] = firefox
779   program[calc] = st -e because -l
780
781   bind[email] = MOD+Control+1
782   bind[irc] = MOD+Control+2
783   bind[firefox] = MOD+Control+3
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