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