aboutsummaryrefslogtreecommitdiff
path: root/diff.txt
blob: 93dc30eba684fa6d077ca85b7fa8b3fe8ada0713 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
Modified regular file config.org:
    ...
 337  337: ** Auth
 338  338: To send mail, we need to log into everything.
 339  339: Instead of typing out passwords every time, we use the ~~.authinfo.gpg~ file (can also be without the gpg encryption).
 340     : First we install & set up pinentry.
 341     : #+begin_src emacs-lisp :tangle ~/.config/doom/packages.el
 342     : (package! pinentry)
 343     : #+end_src
 344  340: 
 345     : #+begin_src emacs-lisp
 346     : (use-package! pinentry
 347     :   :config
 348     :   (pinentry-start))
 349     : (setq epg-pinentry-mode 'loopback)
 350     : #+end_src
 351     : To read the file:
      341: Read authinfo.gpg, the file containing the secrets
 352  342: #+begin_src emacs-lisp
 353  343: (setq auth-sources '("~/.authinfo.gpg"))
 354  344: #+end_src
    ...
1400 1390:   (add-hook 'nov-mode-hook
1401 1391:             (lambda ()
1402 1392:               (face-remap-add-relative 'variable-pitch
1403     :                                        :family "Georgia" :height 1.3))) ; different font for reading
     1393:                                        :family "Libron" :height 1.3))) ; different font for reading
1404 1394:   (add-hook 'nov-mode-hook #'writeroom-mode)                            ; center text & stuff
1405 1395:   #+end_src
1406 1396: 
    ...
1420 1410: (package! try)
1421 1411: #+end_src
1422 1412: That's about all ~try~ needs.
     1413: ** hledger-mode
     1414: hledger mode lets you manage hledger via Emacs.
     1415: #+begin_src emacs-lisp :tangle ~/.config/doom/packages.el
     1416:   (package! hledger-mode)
     1417:   (package! company)                    ; needed for autocompletion
     1418: #+end_src
     1419: 
     1420: First we have to set up company, which is needed for autocompletion in hledger-mode
     1421: #+begin_src emacs-lisp
     1422:   (use-package! company
     1423:     :ensure t
     1424:     :defer nil)
     1425: #+end_src
     1426: 
     1427: 
     1428: Then, we set up hledger-mode
     1429: #+begin_src emacs-lisp
     1430: (use-package! hledger-mode
     1431:   :mode ("\\.journal\\'" "\\.hledger\\'")
     1432:   :custom
     1433:   (hledger-jfile (expand-file-name "~/.hledger.journal"))
     1434:   :after (company cape)
     1435:   :config
     1436:   (add-hook 'hledger-mode-hook
     1437:             (lambda ()
     1438:               (add-hook 'completion-at-point-functions
     1439:                         (cape-company-to-capf #'hledger-company)
     1440:                         nil t))))
     1441: #+end_src
1423 1442: * Tramp
1424 1443: 
1425 1444: Tramp is a way to edit files via SSH and root owned files in Emacs.
    ...
1434 1453:                  (tramp-remote-shell-args ("-c"))
1435 1454:                  (tramp-connection-timeout 10))))
1436 1455: #+end_src
     1456: * EXWM
     1457: #+begin_quote
     1458: Who needs a WM if you have Emacs?
     1459: #+end_quote
     1460: EXWM is the Emacs X Window Manager.
     1461: #+begin_src emacs-lisp :tangle ~/.config/doom/packages.el
     1462: (package! exwm)
     1463: (package! edwina)                       ; dynamic tiling
     1464: (package! exwm-edit)                    ; edit X text fields in an Emacs buffer
     1465: (package! exwm-mff)                     ; mouse follows focus
     1466: (package! app-launcher :recipe (:host github :repo "SebastienWae/app-launcher"))
     1467: #+end_src
     1468: 
     1469: ** Helpers and bindings
     1470: #+begin_src emacs-lisp
     1471: (defconst my/exwm-session-p (and (getenv "EXWM") t))
     1472: 
     1473: (defun my/spawn (cmd)
     1474:   "Return a command that runs shell CMD."
     1475:   (lambda () (interactive) (start-process-shell-command cmd nil cmd)))
     1476: 
     1477: (defun my/run-once (cmd)
     1478:   "Run CMD only if no process named like its executable is already running."
     1479:   (let ((name (file-name-nondirectory (car (split-string cmd)))))
     1480:     (start-process-shell-command
     1481:      cmd nil (format "pgrep -x %s >/dev/null || %s" (shell-quote-argument name) cmd))))
     1482: 
     1483: (defun my/close-window ()
     1484:   (interactive)
     1485:   (kill-buffer)
     1486:   (when (cdr (window-list))
     1487:     (edwina-delete-window)))
     1488: 
     1489: (defconst my/spawn-binds
     1490:   '(("s-<return>" . "alacritty") ("s-w" . "vivaldi") ("s-e" . "xfe")
     1491:     ("s-s" . "discord") ("s-x" . "loginctl lock-session")
     1492:     ("<print>" . "screenshot") ("S-<print>" . "screenrecord")
     1493:     ("s-S" . "screenshot select") ("s-R" . "screenrecord select")
     1494:     ("<XF86AudioRaiseVolume>" . "wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%+")
     1495:     ("<XF86AudioLowerVolume>" . "wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-")
     1496:     ("<XF86AudioMute>"        . "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle")
     1497:     ("<XF86AudioPlay>"        . "playerctl play-pause")
     1498:     ("<XF86AudioNext>"        . "playerctl next")
     1499:     ("<XF86AudioPrev>"        . "playerctl previous")))
     1500: 
     1501: (defconst my/wm-binds
     1502:   '(("s-r" . exwm-reset)
     1503:     ("s-p" . app-launcher-run-app)
     1504:     ("s-j" . edwina-select-next-window)
     1505:     ("s-k" . edwina-select-previous-window)
     1506:     ("s-J" . edwina-swap-next-window)
     1507:     ("s-K" . edwina-swap-previous-window)
     1508:     ("s-h" . edwina-dec-mfact)
     1509:     ("s-l" . edwina-inc-mfact)
     1510:     ("s-H" . edwina-inc-nmaster)
     1511:     ("s-L" . edwina-dec-nmaster)
     1512:     ("s-m" . edwina-zoom)               ; promote to master, dwm-style
     1513:     ("s-q" . my/close-window)
     1514:     ("s-f" . exwm-floating-toggle-floating)
     1515:     ("C-s-q" . save-buffers-kill-emacs)))
     1516: 
     1517: (defconst my/ws-binds
     1518:   (cl-loop for i from 0 below 9
     1519:            for sym in '("!" "@" "#" "$" "%" "^" "&" "*" "(")
     1520:            collect (cons (format "s-%d" (1+ i))
     1521:                          (let ((ws i)) (lambda () (interactive) (exwm-workspace-switch-create ws))))
     1522:            collect (cons (format "s-%s" sym)
     1523:                          (let ((ws i)) (lambda () (interactive) (exwm-workspace-move-window ws))))))
     1524: 
     1525: (defun my/exwm-key (spec)
     1526:   (cons (kbd (car spec))
     1527:         (if (stringp (cdr spec)) (my/spawn (cdr spec)) (cdr spec))))
     1528: #+end_src
     1529: 
     1530: ** EXWM itself
     1531: #+begin_src emacs-lisp
     1532: (use-package! exwm
     1533:   :when my/exwm-session-p
     1534:   :config
     1535:   (setenv "EXWM" nil)
     1536:   (setq exwm-workspace-number 9
     1537:         exwm-manage-configurations
     1538:         '(((member exwm-class-name '("Alacritty")) char-mode t)
     1539:           ((equal exwm-class-name "discord") workspace 8)
     1540:           ((member exwm-class-name '("Pavucontrol" "Blueman-manager" "ssh-askpass" "Gcr-prompter"))
     1541:            floating t)
     1542:           ((equal exwm-title "pinentry") floating t))
     1543:         exwm-input-global-keys
     1544:         (mapcar #'my/exwm-key (append my/spawn-binds my/wm-binds my/ws-binds))
     1545:         exwm-input-simulation-keys
     1546:         '(([?\C-b] . [left])   ([?\C-f] . [right])
     1547:           ([?\C-p] . [up])     ([?\C-n] . [down])
     1548:           ([?\C-a] . [home])   ([?\C-e] . [end])
     1549:           ([?\C-d] . [delete]) ([?\C-k] . [S-end delete])
     1550:           ([?\C-w] . [?\C-x])  ([?\M-w] . [?\C-c]) ([?\C-y] . [?\C-v])))
     1551: 
     1552:   (cl-pushnew ?\C-c exwm-input-prefix-keys)
     1553: 
     1554:   (add-hook 'exwm-update-class-hook
     1555:             (lambda () (exwm-workspace-rename-buffer exwm-class-name)))
     1556:   (add-hook 'exwm-update-title-hook
     1557:             (lambda ()
     1558:               (exwm-workspace-rename-buffer
     1559:                (format "%s | %s" exwm-class-name
     1560:                        (truncate-string-to-width (or exwm-title "") 40 nil nil "…")))))
     1561: 
     1562:   (add-hook 'exwm-mode-hook #'doom-mark-buffer-as-real-h)
     1563:   (advice-add #'suspend-frame :override #'ignore)
     1564: 
     1565:   (add-hook 'exwm-init-hook
     1566:             (lambda ()
     1567:               (start-process-shell-command
     1568:                "dbus-env" nil "dbus-update-activation-environment DISPLAY XAUTHORITY")
     1569:               (dolist (c '("feh --bg-scale ~/Pictures/floating_gnu.png" "xset m 0"))
     1570:                 (start-process-shell-command c nil c))
     1571:               (my/run-once "~/.cargo/bin/mprisence")))
     1572: 
     1573:   (if (fboundp 'exwm-systemtray-mode) (exwm-systemtray-mode 1) (exwm-systemtray-enable))
     1574:   (if (fboundp 'exwm-wm-mode) (exwm-wm-mode 1) (exwm-enable))) ; 0.34+ vs 0.33
     1575: 
     1576: (use-package! exwm-edit
     1577:   :when my/exwm-session-p
     1578:   :after exwm
     1579:   :config (setq exwm-edit-split "below"))
     1580: 
     1581: (use-package! exwm-mff
     1582:   :when my/exwm-session-p
     1583:   :hook (exwm-init . exwm-mff-mode))
     1584: #+end_src
     1585: ** Edwina
     1586: Edwina lets EXWM become a dynamically tiling window manager.
     1587: #+begin_src emacs-lisp
     1588: (use-package! edwina
     1589:   :when my/exwm-session-p
     1590:   :after exwm
     1591:   :config
     1592:   (setq display-buffer-base-action '(display-buffer-below-selected)
     1593:         edwina-mfact 0.50
     1594:         edwina-narrow-threshold 0)
     1595:   (edwina-mode 1))
     1596: #+end_src
1437 1597: * Evil
1438 1598: ~Mapping at its finest~
1439 1599: EVIl mode emulates VIM bindings in Emacs.
    ...