mirror of
https://github.com/SqrtMinusOne/sqrtminusone.github.io.git
synced 2025-12-10 15:53:03 +03:00
chore: update configs
This commit is contained in:
parent
f790d8687f
commit
88f448647f
11 changed files with 945 additions and 220 deletions
|
|
@ -13,11 +13,14 @@ draft = false
|
|||
### Environment {#environment}
|
||||
|
||||
```sh
|
||||
# export EDITOR=/usr/bin/vim
|
||||
# export BROWSER=/usr/bin/firefox
|
||||
export QT_QPA_PLATFORMTHEME="qt5ct"
|
||||
export QT_AUTO_SCREEN_SCALE_FACTOR=0
|
||||
# export GTK2_RC_FILES="$HOME/.gtkrc-2.0"
|
||||
```
|
||||
|
||||
Set ripgrep config path
|
||||
|
||||
```sh
|
||||
export RIPGREP_CONFIG_PATH=$HOME/.config/ripgrep/ripgreprc
|
||||
```
|
||||
|
||||
|
||||
|
|
@ -458,6 +461,7 @@ Enable vi keybindings & aliases. The alias syntax is the same as in bash, so it'
|
|||
fish_vi_key_bindings
|
||||
|
||||
<<shell-aliases>>
|
||||
alias cad="conda activate (basename (pwd))"
|
||||
```
|
||||
|
||||
| Guix dependency |
|
||||
|
|
@ -920,6 +924,24 @@ key_bindings:
|
|||
| unzip | |
|
||||
| jmtpfs | A tool to mount MTP devices (e.g. Android) |
|
||||
| tokei | Count lines of code |
|
||||
| sshfs | Mount stuff over SSH |
|
||||
|
||||
|
||||
### ripgrep config {#ripgrep-config}
|
||||
|
||||
Occasionally I can't exclude certain files from ripgrep via the VCS settings, so here is a simple config to ignore certain files globally.
|
||||
|
||||
```text
|
||||
--ignore-file=/home/pavel/.config/ripgrep/ripgrepignore
|
||||
```
|
||||
|
||||
The corresponding ignore file:
|
||||
|
||||
```text
|
||||
*.ts.snap
|
||||
```
|
||||
|
||||
By default ripgrep doesn't read any configs, so it is necessary to set the `RIPGREP_CONFIG_PATH` variable in the [.profile.](#environment)
|
||||
|
||||
|
||||
## Misc scripts {#misc-scripts}
|
||||
|
|
|
|||
|
|
@ -69,6 +69,7 @@ Parts prefixed with (OFF) are not used, but kept for historic purposes. For some
|
|||
- [Buku bookmarks](#buku-bookmarks)
|
||||
- [Man pages](#man-pages)
|
||||
- [pass](#pass)
|
||||
- [emojis](#emojis)
|
||||
- [Flameshot](#flameshot)
|
||||
- [dunst](#dunst)
|
||||
- [keynav](#keynav)
|
||||
|
|
@ -1107,9 +1108,13 @@ if [[ -z $ip || $ip == *"timed out"* ]]; then
|
|||
fi
|
||||
ip_info=$(curl -s http://api.ipstack.com/${ip}?access_key=${API_KEY})
|
||||
# emoji=$(echo $ip_info | jq -r '.location.country_flag_emoji')
|
||||
code=$(echo $ip_info | jq -r '.country_code')
|
||||
code=$(echo $ip_info | jq -r '.country_code' 2> /dev/null)
|
||||
vpn=$(pgrep -a openvpn$ | head -n 1 | awk '{print $NF }' | cut -d '.' -f 1)
|
||||
|
||||
if [[ -z $code ]]; then
|
||||
code="??"
|
||||
fi
|
||||
|
||||
if [ -n "$vpn" ]; then
|
||||
echo "%{u<<get-color(name="blue")>>}%{+u} $code %{u-}"
|
||||
else
|
||||
|
|
@ -1753,6 +1758,13 @@ clip=both
|
|||
```
|
||||
|
||||
|
||||
#### emojis {#emojis}
|
||||
|
||||
| Guix dependency |
|
||||
|-----------------|
|
||||
| rofi-emoji |
|
||||
|
||||
|
||||
## Flameshot {#flameshot}
|
||||
|
||||
| Guix dependency |
|
||||
|
|
@ -2395,6 +2407,9 @@ This section generates manifests for various desktop software that I'm using.
|
|||
| dev | hugo-extended |
|
||||
| dev | make |
|
||||
| dev | sbcl |
|
||||
| dev | git-lfs |
|
||||
| dev | mysql |
|
||||
| dev | gource |
|
||||
|
||||
|
||||
### Manifests {#manifests}
|
||||
|
|
|
|||
|
|
@ -82,7 +82,7 @@ Parts prefixed with (OFF) are not used, but kept for historic purposes. For some
|
|||
- [Zathura](#zathura)
|
||||
- [Various software](#various-software)
|
||||
- [Browsers](#browsers)
|
||||
- [Office](#office)
|
||||
- [Office & Multimedia](#office-and-multimedia)
|
||||
- [LaTeX](#latex)
|
||||
- [Dev](#dev)
|
||||
- [Manifests](#manifests)
|
||||
|
|
@ -302,47 +302,60 @@ bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcu
|
|||
|
||||
### Managing windows {#managing-windows}
|
||||
|
||||
| Guix dependency |
|
||||
|---------------------|
|
||||
| rust-i3-switch-tabs |
|
||||
|
||||
Some keybindings for managing windows.
|
||||
|
||||
`emacs-i3-integration` is a script to pass some command to Emacs to get a consistent set of keybindings in both i3 and Emacs. Check out [the section in Emacs.org]({{< relref "Emacs" >}}) for details.
|
||||
|
||||
Kill focused windows
|
||||
|
||||
```vim
|
||||
bindsym $mod+Shift+q kill
|
||||
bindsym $mod+Shift+q exec emacs-i3-integration kill
|
||||
```
|
||||
|
||||
Change focus
|
||||
|
||||
```vim
|
||||
bindsym $mod+h focus left
|
||||
bindsym $mod+j focus down
|
||||
bindsym $mod+k focus up
|
||||
bindsym $mod+l focus right
|
||||
bindsym $mod+h exec emacs-i3-integration focus left
|
||||
bindsym $mod+j exec emacs-i3-integration focus down
|
||||
bindsym $mod+k exec emacs-i3-integration focus up
|
||||
bindsym $mod+l exec emacs-i3-integration focus right
|
||||
|
||||
bindsym $mod+Left focus left
|
||||
bindsym $mod+Down focus down
|
||||
bindsym $mod+Up focus up
|
||||
bindsym $mod+Right focus right
|
||||
bindsym $mod+Left exec emacs-i3-integration focus left
|
||||
bindsym $mod+Down exec emacs-i3-integration focus down
|
||||
bindsym $mod+Up exec emacs-i3-integration focus up
|
||||
bindsym $mod+Right exec emacs-i3-integration focus right
|
||||
```
|
||||
|
||||
Move windows around
|
||||
|
||||
```vim
|
||||
bindsym $mod+Shift+h move left
|
||||
bindsym $mod+Shift+j move down
|
||||
bindsym $mod+Shift+k move up
|
||||
bindsym $mod+Shift+l move right
|
||||
bindsym $mod+Shift+h exec emacs-i3-integration move left
|
||||
bindsym $mod+Shift+j exec emacs-i3-integration move down
|
||||
bindsym $mod+Shift+k exec emacs-i3-integration move up
|
||||
bindsym $mod+Shift+l exec emacs-i3-integration move right
|
||||
|
||||
bindsym $mod+Shift+Left move left
|
||||
bindsym $mod+Shift+Down move down
|
||||
bindsym $mod+Shift+Up move up
|
||||
bindsym $mod+Shift+Right move right
|
||||
bindsym $mod+Shift+Left exec emacs-i3-integration move left
|
||||
bindsym $mod+Shift+Down exec emacs-i3-integration move down
|
||||
bindsym $mod+Shift+Up exec emacs-i3-integration move up
|
||||
bindsym $mod+Shift+Right exec emacs-i3-integration move right
|
||||
```
|
||||
|
||||
Split windows
|
||||
|
||||
```vim
|
||||
bindsym $mod+s split h
|
||||
bindsym $mod+v split v
|
||||
bindsym $mod+s exec emacs-i3-integration split h
|
||||
bindsym $mod+v exec emacs-i3-integration split v
|
||||
```
|
||||
|
||||
Switch tabs
|
||||
|
||||
```vim
|
||||
bindsym $mod+period exec i3-switch-tabs right
|
||||
bindsym $mod+comma exec i3-switch-tabs left
|
||||
```
|
||||
|
||||
Enter fullscreen mode
|
||||
|
|
@ -350,6 +363,7 @@ Enter fullscreen mode
|
|||
```vim
|
||||
# enter fullscreen mode for the focused container
|
||||
bindsym $mod+f fullscreen toggle
|
||||
bindsym $mod+c fullscreen toggle global
|
||||
```
|
||||
|
||||
Changing layout
|
||||
|
|
@ -357,7 +371,7 @@ Changing layout
|
|||
```vim
|
||||
bindsym $mod+w layout stacking
|
||||
bindsym $mod+t layout tabbed
|
||||
bindsym $mod+e layout toggle split
|
||||
bindsym $mod+e exec emacs-i3-integration layout toggle split
|
||||
```
|
||||
|
||||
Toggle tiling/floating, switch between tiled and floating windows
|
||||
|
|
@ -428,10 +442,6 @@ bindsym $mod+Shift+7 move container to workspace $w7
|
|||
bindsym $mod+Shift+8 move container to workspace $w8
|
||||
bindsym $mod+Shift+9 move container to workspace $w9
|
||||
bindsym $mod+Shift+0 move container to workspace $w10
|
||||
|
||||
# Cycle workspaces
|
||||
bindsym $mod+comma workspace prev
|
||||
bindsym $mod+period workspace next
|
||||
```
|
||||
|
||||
|
||||
|
|
@ -575,35 +585,46 @@ bindsym $mod+Shift+g mode "outer gaps"
|
|||
|
||||
### Move & resize windows {#move-and-resize-windows}
|
||||
|
||||
A more or less standard set of keybindings to move & resize floating windows.
|
||||
| Guix dependency |
|
||||
|-----------------------------|
|
||||
| python-i3-balance-workspace |
|
||||
|
||||
Just be careful to always make a way to return from these new modes, otherwise you'd end up in a rather precarious situation.
|
||||
A more or less standard set of keybindings to move & resize floating windows. Just be careful to always make a way to return from these new modes, otherwise you'd end up in a rather precarious situation.
|
||||
|
||||
[i3-balance-workspace](https://github.com/atreyasha/i3-balance-workspace) is a small Python package to balance the i3 windows, but for the Emacs integration I also want this button to balance the Emacs windows, so here is a small script to do just that.
|
||||
|
||||
```bash
|
||||
if [[ $(xdotool getactivewindow getwindowname) =~ ^emacs(:.*)?@.* ]]; then
|
||||
emacsclient -e "(balance-windows)" &
|
||||
fi
|
||||
i3_balance_workspace
|
||||
```
|
||||
|
||||
```vim
|
||||
# resize window (you can also use the mouse for that)
|
||||
mode "resize" {
|
||||
# These bindings trigger as soon as you enter the resize mode
|
||||
|
||||
bindsym h resize shrink width 10 px or 10 ppt
|
||||
bindsym j resize grow height 10 px or 10 ppt
|
||||
bindsym k resize shrink height 10 px or 10 ppt
|
||||
bindsym l resize grow width 10 px or 10 ppt
|
||||
bindsym h exec emacs-i3-integration resize shrink width 10 px or 10 ppt
|
||||
bindsym j exec emacs-i3-integration resize grow height 10 px or 10 ppt
|
||||
bindsym k exec emacs-i3-integration resize shrink height 10 px or 10 ppt
|
||||
bindsym l exec emacs-i3-integration resize grow width 10 px or 10 ppt
|
||||
|
||||
bindsym Shift+h resize shrink width 100 px or 100 ppt
|
||||
bindsym Shift+j resize grow height 100 px or 100 ppt
|
||||
bindsym Shift+k resize shrink height 100 px or 100 ppt
|
||||
bindsym Shift+l resize grow width 100 px or 100 ppt
|
||||
bindsym Shift+h exec emacs-i3-integration resize shrink width 100 px or 100 ppt
|
||||
bindsym Shift+j exec emacs-i3-integration resize grow height 100 px or 100 ppt
|
||||
bindsym Shift+k exec emacs-i3-integration resize shrink height 100 px or 100 ppt
|
||||
bindsym Shift+l exec emacs-i3-integration resize grow width 100 px or 100 ppt
|
||||
|
||||
# same bindings, but for the arrow keys
|
||||
bindsym Left resize shrink width 10 px or 10 ppt
|
||||
bindsym Down resize grow height 10 px or 10 ppt
|
||||
bindsym Up resize shrink height 10 px or 10 ppt
|
||||
bindsym Right resize grow width 10 px or 10 ppt
|
||||
bindsym Left exec emacs-i3-integration resize shrink width 10 px or 10 ppt
|
||||
bindsym Down exec emacs-i3-integration resize grow height 10 px or 10 ppt
|
||||
bindsym Up exec emacs-i3-integration resize shrink height 10 px or 10 ppt
|
||||
bindsym Right exec emacs-i3-integration resize grow width 10 px or 10 ppt
|
||||
|
||||
bindsym Shift+Left resize shrink width 100 px or 100 ppt
|
||||
bindsym Shift+Down resize grow height 100 px or 100 ppt
|
||||
bindsym Shift+Up resize shrink height 100 px or 100 ppt
|
||||
bindsym Shift+Right resize grow width 100 px or 100 ppt
|
||||
bindsym Shift+Left exec emacs-i3-integration resize shrink width 100 px or 100 ppt
|
||||
bindsym Shift+Down exec emacs-i3-integration resize grow height 100 px or 100 ppt
|
||||
bindsym Shift+Up exec emacs-i3-integration resize shrink height 100 px or 100 ppt
|
||||
bindsym Shift+Right exec emacs-i3-integration resize grow width 100 px or 100 ppt
|
||||
|
||||
bindsym equal exec i3-emacs-balance-windows
|
||||
|
||||
# back to normal: Enter or Escape
|
||||
bindsym Return mode "default"
|
||||
|
|
@ -2333,13 +2354,16 @@ This section generates manifests for various desktop software that I'm using.
|
|||
| browsers | firefox |
|
||||
|
||||
|
||||
### Office {#office}
|
||||
### Office & Multimedia {#office-and-multimedia}
|
||||
|
||||
| Category | Guix dependency |
|
||||
|----------|-----------------|
|
||||
| office | libreoffice |
|
||||
| office | gimp |
|
||||
| office | krita |
|
||||
| office | ffmpeg |
|
||||
| office | kdenlive |
|
||||
| office | inkscape |
|
||||
|
||||
|
||||
### LaTeX {#latex}
|
||||
|
|
@ -2370,6 +2394,7 @@ This section generates manifests for various desktop software that I'm using.
|
|||
| dev | libfaketime |
|
||||
| dev | hugo-extended |
|
||||
| dev | make |
|
||||
| dev | sbcl |
|
||||
|
||||
|
||||
### Manifests {#manifests}
|
||||
|
|
@ -2756,6 +2781,7 @@ Other desktop programs I use are listed below.
|
|||
| anydesk | Remote desktop software |
|
||||
| gnome-disk-utility | Manage disks |
|
||||
| gparted | Manage partitions |
|
||||
| xev | Test input |
|
||||
|
||||
<a id="code-snippet--packages"></a>
|
||||
```emacs-lisp
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ As with other files in the repo, parts prefixed with (OFF) are not used but kept
|
|||
- [Measure startup speed](#measure-startup-speed)
|
||||
- [straight.el](#straight-dot-el)
|
||||
- [use-package](#use-package)
|
||||
- [config variants & environment](#config-variants-and-environment)
|
||||
- [Config variants & environment](#config-variants-and-environment)
|
||||
- [Performance](#performance)
|
||||
- [Garbage collection](#garbage-collection)
|
||||
- [Run garbage collection when Emacs is unfocused](#run-garbage-collection-when-emacs-is-unfocused)
|
||||
|
|
@ -124,10 +124,12 @@ As with other files in the repo, parts prefixed with (OFF) are not used but kept
|
|||
- [Managing Jupyter kernels](#managing-jupyter-kernels)
|
||||
- [Do not wrap the output in emacs-jupyter](#do-not-wrap-the-output-in-emacs-jupyter)
|
||||
- [Wrap source code output](#wrap-source-code-output)
|
||||
- [Managing a literate programming project](#managing-a-literate-programming-project)
|
||||
- [Productivity & Knowledge management](#productivity-and-knowledge-management)
|
||||
- [Capture templates & various settings](#capture-templates-and-various-settings)
|
||||
- [Custom agendas](#custom-agendas)
|
||||
- [Trello sync](#trello-sync)
|
||||
- [org-ql](#org-ql)
|
||||
- [Custom agendas](#custom-agendas)
|
||||
- [Review workflow](#review-workflow)
|
||||
- [Data from git & org-roam](#data-from-git-and-org-roam)
|
||||
- [Data from org-journal](#data-from-org-journal)
|
||||
|
|
@ -139,6 +141,7 @@ As with other files in the repo, parts prefixed with (OFF) are not used but kept
|
|||
- [org-roam-protocol](#org-roam-protocol)
|
||||
- [org-ref](#org-ref)
|
||||
- [org-roam-bibtex](#org-roam-bibtex)
|
||||
- [Managing tables](#managing-tables)
|
||||
- [UI](#ui)
|
||||
- [<span class="org-todo done OFF">OFF</span> (OFF) Instant equations preview](#off--instant-equations-preview)
|
||||
- [LaTeX fragments](#latex-fragments)
|
||||
|
|
@ -152,6 +155,7 @@ As with other files in the repo, parts prefixed with (OFF) are not used but kept
|
|||
- [LaTeX](#latex)
|
||||
- [Keybindings & stuff](#keybindings-and-stuff)
|
||||
- [Copy a link](#copy-a-link)
|
||||
- [Open a file from `org-directory`](#open-a-file-from-org-directory)
|
||||
- [Presentations](#presentations)
|
||||
- [Tools](#tools)
|
||||
- [TOC](#toc)
|
||||
|
|
@ -160,9 +164,6 @@ As with other files in the repo, parts prefixed with (OFF) are not used but kept
|
|||
- [Tables for Guix Dependencies](#tables-for-guix-dependencies)
|
||||
- [Noweb evaluations](#noweb-evaluations)
|
||||
- [yadm hook](#yadm-hook)
|
||||
- [<span class="org-todo done OFF">OFF</span> (OFF) EAF](#off--eaf)
|
||||
- [Installation](#installation)
|
||||
- [Config](#config)
|
||||
- [Programming](#programming)
|
||||
- [General setup](#general-setup)
|
||||
- [LSP](#lsp)
|
||||
|
|
@ -240,6 +241,7 @@ As with other files in the repo, parts prefixed with (OFF) are not used but kept
|
|||
- [CSV](#csv)
|
||||
- [<span class="org-todo done OFF">OFF</span> (OFF) PDF](#off--pdf)
|
||||
- [Docker](#docker)
|
||||
- [crontab](#crontab)
|
||||
- [Apps & Misc](#apps-and-misc)
|
||||
- [Managing dotfiles](#managing-dotfiles)
|
||||
- [Open Emacs config](#open-emacs-config)
|
||||
|
|
@ -249,6 +251,8 @@ As with other files in the repo, parts prefixed with (OFF) are not used but kept
|
|||
- [Notmuch](#notmuch)
|
||||
- [Elfeed](#elfeed)
|
||||
- [Some additions](#some-additions)
|
||||
- [Custom faces](#custom-faces)
|
||||
- [elfeed-score](#elfeed-score)
|
||||
- [YouTube & EMMS](#youtube-and-emms)
|
||||
- [EMMS](#emms)
|
||||
- [MPD](#mpd)
|
||||
|
|
@ -275,6 +279,9 @@ As with other files in the repo, parts prefixed with (OFF) are not used but kept
|
|||
- [Productivity](#productivity)
|
||||
- [Pomidor](#pomidor)
|
||||
- [Calendar](#calendar)
|
||||
- [<span class="org-todo done OFF">OFF</span> (OFF) EAF](#off--eaf)
|
||||
- [Installation](#installation)
|
||||
- [Config](#config)
|
||||
- [Fun](#fun)
|
||||
- [Discord integration](#discord-integration)
|
||||
- [Snow](#snow)
|
||||
|
|
@ -300,7 +307,11 @@ A small function to print out the loading time and number of GCs during the load
|
|||
(float-time
|
||||
(time-subtract after-init-time before-init-time)))
|
||||
gcs-done)))
|
||||
```
|
||||
|
||||
Set the following to `t` to print debug information during the startup. This will include the order in which the packages are loaded and the loading time of individual packages.
|
||||
|
||||
```emacs-lisp
|
||||
;; (setq use-package-verbose t)
|
||||
```
|
||||
|
||||
|
|
@ -348,11 +359,12 @@ References:
|
|||
```emacs-lisp
|
||||
(straight-use-package 'use-package)
|
||||
(eval-when-compile (require 'use-package))
|
||||
;; (setq use-package-verbose t)
|
||||
```
|
||||
|
||||
|
||||
### config variants & environment {#config-variants-and-environment}
|
||||
### Config variants & environment {#config-variants-and-environment}
|
||||
|
||||
This section is about optionating the Emacs config.
|
||||
|
||||
The following variable is true when my machine is not powerful enough for some resource-heavy packages.
|
||||
|
||||
|
|
@ -360,7 +372,7 @@ The following variable is true when my machine is not powerful enough for some r
|
|||
(setq my/lowpower (string= (system-name) "azure"))
|
||||
```
|
||||
|
||||
The following is true if Emacs is meant to be used with TRAMP over slow ssh.
|
||||
The following is true if Emacs is meant to be used with TRAMP over slow ssh. Take a look at the [TRAMP](#tramp) section for more details.
|
||||
|
||||
```emacs-lisp
|
||||
(setq my/slow-ssh
|
||||
|
|
@ -435,7 +447,7 @@ Some time has passed, and I still don't know if there is any quantifiable advant
|
|||
|
||||
#### Native compilation {#native-compilation}
|
||||
|
||||
Set number of jobs to 1 on low-power machines
|
||||
Set the number of native compilation jobs to 1 on low-power machines.
|
||||
|
||||
```emacs-lisp
|
||||
(when my/lowpower
|
||||
|
|
@ -445,11 +457,11 @@ Set number of jobs to 1 on low-power machines
|
|||
|
||||
### Anaconda {#anaconda}
|
||||
|
||||
[Anaconda](https://www.anaconda.com/) is a free package and environment manager. I currently use it to manage multiple versions of Python and Node.js
|
||||
[Anaconda](https://www.anaconda.com/) is a free package and environment manager. I currently use it to manage multiple versions of Python and Node.js. Take a look at [the corresponding entry]({{< relref "Guix" >}}) in the Guix config for details about using it on Guix.
|
||||
|
||||
The following code uses the conda package to activate the base environment on startup if Emacs is launched outside the environment.
|
||||
|
||||
Also, some strange things are happening if vterm is launched with conda activated from Emacs, so I advise `conda-env-activate` to set an auxililary environment variable.
|
||||
Also, some strange things are happening if vterm is launched with conda activated from Emacs, so I advise `conda-env-activate` to set an auxililary environment variable. This variable is used in the [shell config]({{< relref "Console" >}}).
|
||||
|
||||
References:
|
||||
|
||||
|
|
@ -476,7 +488,7 @@ References:
|
|||
|
||||
### Custom file location {#custom-file-location}
|
||||
|
||||
By default, custom writes stuff to `init.el`, which is somewhat annoying. The following makes a separate file `custom.el`
|
||||
By default, custom writes stuff to `init.el`, which is somewhat annoying. The following makes it write to a separate file `custom.el`
|
||||
|
||||
```emacs-lisp
|
||||
(setq custom-file (concat user-emacs-directory "custom.el"))
|
||||
|
|
@ -497,7 +509,7 @@ I have some variables which I don't commit to the repo, e.g. my current location
|
|||
|
||||
### No littering {#no-littering}
|
||||
|
||||
By default emacs and its packages create a lot files in `.emacs.d` and in other places. [no-littering](https://github.com/emacscollective/no-littering) is a collective effort to redirect all of this to two folders in `user-emacs-directory`.
|
||||
By default Mmacs and its packages create a lot files in `.emacs.d` and in other places. [no-littering](https://github.com/emacscollective/no-littering) is a collective effort to redirect all of that to two folders in `user-emacs-directory`.
|
||||
|
||||
```emacs-lisp
|
||||
(use-package no-littering
|
||||
|
|
@ -540,9 +552,7 @@ References:
|
|||
|
||||
#### which-key {#which-key}
|
||||
|
||||
A package that displays the available keybindings in a popup.
|
||||
|
||||
Pretty useful, as Emacs seems to have more keybindings than I can remember at any given point.
|
||||
A package that displays the available keybindings in a popup. The package is pretty useful, as Emacs seems to have more keybindings than I can remember at any given point.
|
||||
|
||||
References:
|
||||
|
||||
|
|
@ -594,7 +604,7 @@ A function to dump keybindings starting with a prefix to a buffer in tree-like f
|
|||
|
||||
### Evil mode {#evil-mode}
|
||||
|
||||
A whole ecosystem of packages that emulates the main features of Vim. Probably the best vim emulator out there.
|
||||
An entire ecosystem of packages that emulates the main features of Vim. Probably the best vim emulator out there.
|
||||
|
||||
The only problem is that the package name makes it hard to google anything by just typing "evil".
|
||||
|
||||
|
|
@ -615,15 +625,13 @@ Basic evil configuration.
|
|||
(setq evil-want-integration t)
|
||||
(setq evil-want-C-u-scroll t)
|
||||
(setq evil-want-keybinding nil)
|
||||
:config
|
||||
(evil-mode 1)
|
||||
(setq evil-search-module 'evil-search)
|
||||
(setq evil-split-window-below t)
|
||||
(setq evil-vsplit-window-right t)
|
||||
:config
|
||||
(evil-mode 1)
|
||||
;; (setq evil-respect-visual-line-mode t)
|
||||
(evil-set-undo-system 'undo-tree)
|
||||
;; (add-to-list 'evil-emacs-state-modes 'dired-mode)
|
||||
)
|
||||
(evil-set-undo-system 'undo-tree))
|
||||
```
|
||||
|
||||
|
||||
|
|
@ -639,7 +647,7 @@ Basic evil configuration.
|
|||
(global-evil-surround-mode 1))
|
||||
```
|
||||
|
||||
[evil-commentary](https://github.com/linktohack/evil-commentary) emulates commentary.vim.
|
||||
[evil-commentary](https://github.com/linktohack/evil-commentary) emulates commentary.vim. It gives actions for quick insertion and deletion of comments.
|
||||
|
||||
```emacs-lisp
|
||||
(use-package evil-commentary
|
||||
|
|
@ -684,7 +692,7 @@ Basic evil configuration.
|
|||
(evil-lion-mode))
|
||||
```
|
||||
|
||||
[evil-matchit](https://github.com/redguardtoo/evil-matchit) makes "%" to match things like tags.
|
||||
[evil-matchit](https://github.com/redguardtoo/evil-matchit) makes "%" to match things like tags. It doesn't work perfectly, so I occasionally turn it off.
|
||||
|
||||
```emacs-lisp
|
||||
(use-package evil-matchit
|
||||
|
|
@ -696,9 +704,7 @@ Basic evil configuration.
|
|||
|
||||
#### evil-collection {#evil-collection}
|
||||
|
||||
[evil-collection](https://github.com/emacs-evil/evil-collection) is a package that provides evil bindings for a lot of different packages. One can see the whole list in the [modes](https://github.com/emacs-evil/evil-collection/tree/master/modes) folder.
|
||||
|
||||
I don't enable the entire package, just the modes I need.
|
||||
[evil-collection](https://github.com/emacs-evil/evil-collection) is a package that provides evil bindings for a lot of different packages. One can see the complete list in the [modes](https://github.com/emacs-evil/evil-collection/tree/master/modes) folder.
|
||||
|
||||
```emacs-lisp
|
||||
(use-package evil-collection
|
||||
|
|
@ -805,7 +811,7 @@ Using the `SPC` key as a leader key, like in Doom Emacs or Spacemacs.
|
|||
(my-leader-def "E" 'eval-expression)
|
||||
```
|
||||
|
||||
`general.el` has a nice integration with which-key, so I use this fact to show more descriptive annotations for certain groups of keybindings (the default one is `prefix`).
|
||||
`general.el` has a nice integration with which-key, so I use that to show more descriptive annotations for certain groups of keybindings (the default annotation is just `prefix`).
|
||||
|
||||
```emacs-lisp
|
||||
(my-leader-def
|
||||
|
|
@ -844,7 +850,7 @@ The built-in profiler is a magnificent tool to troubleshoot performance issues.
|
|||
|
||||
#### Buffer switching {#buffer-switching}
|
||||
|
||||
Some keybindings I used in vim to switch buffers and can't let go of.
|
||||
Some keybindings I used in vim to switch buffers and can't let go of. But I think I started to use these less since I made an attempt in [i3 integration](#i3-integration).
|
||||
|
||||
```emacs-lisp
|
||||
(general-define-key
|
||||
|
|
@ -866,7 +872,9 @@ Some keybindings I used in vim to switch buffers and can't let go of.
|
|||
"d" 'kill-current-buffer)
|
||||
```
|
||||
|
||||
And winner-mode to keep the history of window states.
|
||||
`winner-mode` to keep the history of window states.
|
||||
|
||||
It doesn't play too well with perspective.el, that is it has a single history list for all of the perspectives. But it is still quite usable.
|
||||
|
||||
```emacs-lisp
|
||||
(winner-mode 1)
|
||||
|
|
@ -918,7 +926,7 @@ There are multiple ways to fold text in Emacs.
|
|||
|
||||
The most versatile is the built-in `hs-minor-mode`, which seems to work out of the box for Lisps, C-like languages and Python. `outline-minor-mode` works for org-mode, LaTeX and the like. There is a 3rd-party solution [origami.el](https://github.com/elp-revive/origami.el), but I don't use it at the moment.
|
||||
|
||||
Evil does a pretty good job of uniting these two in the set of vim-like keybindings. I was using `SPC` in vim, but as now this isn't an option, I set `TAB` to toggle folding.
|
||||
Evil does a pretty good job of abstracting the first two with a set of vim-like keybindings. I was using `SPC` in vim, but as now this isn't an option, I set `TAB` to toggle folding.
|
||||
|
||||
```emacs-lisp
|
||||
(general-nmap :keymaps '(hs-minor-mode-map outline-minor-mode-map)
|
||||
|
|
@ -1139,7 +1147,7 @@ References:
|
|||
|
||||
A package to keep the code intended.
|
||||
|
||||
Doesn't work too well with js ecosystem, because the LSP-based indentation is rather slow but nice for Lisps.
|
||||
Doesn't work too well with many ecosystems because the LSP-based indentation is rather slow, but nice for Lisps.
|
||||
|
||||
References:
|
||||
|
||||
|
|
@ -2156,6 +2164,7 @@ References:
|
|||
(use-package emojify
|
||||
:straight t
|
||||
:if (and (display-graphic-p) (not (or my/lowpower my/is-termux)))
|
||||
:disabled
|
||||
:hook (after-init . global-emojify-mode))
|
||||
```
|
||||
|
||||
|
|
@ -2313,7 +2322,7 @@ My config mostly follows ranger's and vifm's keybindings which I'm used to.
|
|||
|
||||
### Addons {#addons}
|
||||
|
||||
I used to use [dired+](https://www.emacswiki.org/emacs/DiredPlus), which provides a lot of extensions for dired functionality, but it also creates some new problems, so I opt out of it. Fortunately, the one feature I want from this package - adding more colors to dired buffers - is available as a separate package
|
||||
I used to use [dired+](https://www.emacswiki.org/emacs/DiredPlus), which provides a lot of extensions for dired functionality, but it also creates some new problems, so I opt out of it. Fortunately, the one feature I want from this package - adding more colors to dired buffers - is available as a separate package.
|
||||
|
||||
```emacs-lisp
|
||||
(use-package diredfl
|
||||
|
|
@ -2475,7 +2484,7 @@ Also, here is a hack to make TRAMP find `ls` on Guix:
|
|||
|
||||
A simple bookmark list for Dired, mainly to use with TRAMP. I may look into a proper bookmarking system later.
|
||||
|
||||
Bookmarks are listed in the [dired-bookmarks.el](.emacs.d/dired-bookmarks.el) file, which looks like this:
|
||||
Bookmarks are listed in the [private.el](.emacs.d/private.el) file, which has an expression like this:
|
||||
|
||||
```text
|
||||
(setq my/dired-bookmarks
|
||||
|
|
@ -2487,8 +2496,6 @@ The file itself is encrypted with yadm.
|
|||
```emacs-lisp
|
||||
(defun my/dired-bookmark-open ()
|
||||
(interactive)
|
||||
(unless (boundp 'my/dired-bookmarks)
|
||||
(load (concat user-emacs-directory "dired-bookmarks")))
|
||||
(let ((bookmarks
|
||||
(mapcar
|
||||
(lambda (el) (cons (format "%-30s %s" (car el) (cdr el)) (cdr el)))
|
||||
|
|
@ -2739,6 +2746,8 @@ Use the built-in org mode.
|
|||
:straight t
|
||||
:if (not my/remote-server)
|
||||
:defer t
|
||||
:init
|
||||
(setq org-directory (expand-file-name "~/Documents/org-mode"))
|
||||
:config
|
||||
(setq org-startup-indented t)
|
||||
(setq org-return-follows-link t)
|
||||
|
|
@ -3098,6 +3107,32 @@ Example usage:
|
|||
```
|
||||
|
||||
|
||||
#### Managing a literate programming project {#managing-a-literate-programming-project}
|
||||
|
||||
A few tricks to do literate programming.
|
||||
|
||||
I prefer to put the org files to a separate directory (e.g. `org`). So I've come up with the following solution to avoid manually prefixing the `:tangle` arguments.
|
||||
|
||||
Set up the following argument with the path to the project root:
|
||||
|
||||
```text
|
||||
#+PROPERTY: PRJ-DIR ..
|
||||
```
|
||||
|
||||
A function to do the prefixing:
|
||||
|
||||
```emacs-lisp
|
||||
(defun my/org-prj-dir (path)
|
||||
(expand-file-name path (org-entry-get nil "PRJ-DIR" t)))
|
||||
```
|
||||
|
||||
Example usage is as follows:
|
||||
|
||||
```text
|
||||
:tangle (my/org-prj-dir "sqrt_data/api/__init__.py")
|
||||
```
|
||||
|
||||
|
||||
### Productivity & Knowledge management {#productivity-and-knowledge-management}
|
||||
|
||||
My ongoing effort to get a productivity setup in Org.
|
||||
|
|
@ -3112,7 +3147,6 @@ Some inspiration:
|
|||
Used files
|
||||
|
||||
```emacs-lisp
|
||||
(setq org-directory (expand-file-name "~/Documents/org-mode"))
|
||||
(setq org-agenda-files '("inbox.org" "projects.org" "work.org" "sem-11.org" "life.org"))
|
||||
;; (setq org-default-notes-file (concat org-directory "/notes.org"))
|
||||
```
|
||||
|
|
@ -3174,8 +3208,64 @@ Log DONE time
|
|||
```
|
||||
|
||||
|
||||
#### Trello sync {#trello-sync}
|
||||
|
||||
Some of the projects I'm participating in are managed via Trello, so I use [org-trello](http://org-trello.github.io/) to keep track of them. The package has a remarkably awkward keybindings setup, so my effort to call `my-leader-def` to set keybindings I like is no less awkward.
|
||||
|
||||
Also, trello files are huge and have a lot of information and tasks which do not concern me, so I don't add them to `org-agenda-files`.
|
||||
|
||||
```emacs-lisp
|
||||
(setq org-trello-files
|
||||
(thread-last (concat org-directory "/trello")
|
||||
(directory-files)
|
||||
(seq-filter
|
||||
(lambda (f) (string-match-p (rx ".org" eos) f)))
|
||||
(mapcar
|
||||
(lambda (f) (concat org-directory "/trello/" f)))))
|
||||
```
|
||||
|
||||
```emacs-lisp
|
||||
(use-package org-trello
|
||||
:straight (:build (:not native-compile))
|
||||
:commands (org-trello-mode)
|
||||
:init
|
||||
(setq org-trello-current-prefix-keybinding "C-c o")
|
||||
(setq org-trello-add-tags nil)
|
||||
|
||||
(add-hook 'org-mode-hook
|
||||
(lambda ()
|
||||
(when (string-match-p (rx "trello") (or (buffer-file-name) ""))
|
||||
(org-trello-mode))))
|
||||
:config
|
||||
(eval
|
||||
`(my-leader-def
|
||||
:infix "o t"
|
||||
:keymaps '(org-trello-mode-map)
|
||||
"" '(:which-key "trello")
|
||||
,@(mapcan
|
||||
(lambda (b) (list (nth 1 b) (macroexp-quote (nth 0 b))))
|
||||
org-trello-interactive-command-binding-couples))))
|
||||
```
|
||||
|
||||
|
||||
#### org-ql {#org-ql}
|
||||
|
||||
[org-ql](https://github.com/alphapapa/org-ql) is a package to query the org files. I'm using it in my review workflow and for custom agenda views.
|
||||
|
||||
```emacs-lisp
|
||||
(use-package org-ql
|
||||
:straight (:fetcher github
|
||||
:repo "alphapapa/org-ql"
|
||||
:files (:defaults (:exclude "helm-org-ql.el"))))
|
||||
```
|
||||
|
||||
|
||||
#### Custom agendas {#custom-agendas}
|
||||
|
||||
Some custom agendas to fit my workflow.
|
||||
|
||||
Despite the fact that I don't add `org-trello-files` to `org-agenda-files` I still want to see them in agenda, so I use `org-ql-block` from `org-ql`.
|
||||
|
||||
```emacs-lisp
|
||||
(defun my/org-scheduled-get-time ()
|
||||
(let ((scheduled (org-get-scheduled-time (point))))
|
||||
|
|
@ -3189,6 +3279,13 @@ Log DONE time
|
|||
(todo "NEXT"
|
||||
((org-agenda-prefix-format " %i %-12:c [%e] ")
|
||||
(org-agenda-overriding-header "Next tasks")))
|
||||
(org-ql-block
|
||||
`(and
|
||||
(regexp ,(rx ":orgtrello_users:" (* nonl) "sqrtminusone"))
|
||||
(todo)
|
||||
(deadline))
|
||||
((org-agenda-files ',org-trello-files)
|
||||
(org-ql-block-header "Trello assigned")))
|
||||
(tags-todo "inbox"
|
||||
((org-agenda-overriding-header "Inbox")
|
||||
(org-agenda-prefix-format " %i %-12:c")
|
||||
|
|
@ -3203,18 +3300,6 @@ Log DONE time
|
|||
```
|
||||
|
||||
|
||||
#### org-ql {#org-ql}
|
||||
|
||||
[org-ql](https://github.com/alphapapa/org-ql) is a package to query the org files. I'm using it in my review workflow, perhaps later I'll find another usecases.
|
||||
|
||||
```emacs-lisp
|
||||
(use-package org-ql
|
||||
:straight (:fetcher github
|
||||
:repo "alphapapa/org-ql"
|
||||
:files (:defaults (:exclude "helm-org-ql.el"))))
|
||||
```
|
||||
|
||||
|
||||
#### Review workflow {#review-workflow}
|
||||
|
||||
My take on a review workflow. As a baseline, I want to have a template that lists the important changes since the last review and other basic information. I'm doing reviews regularly, but the time intervals still may vary, hence this flexibility.
|
||||
|
|
@ -3665,6 +3750,27 @@ There are some problems with org roam v2, so I disabled it as of now. I will pro
|
|||
```
|
||||
|
||||
|
||||
#### Managing tables {#managing-tables}
|
||||
|
||||
I use Org to manage some small tables which I want to process further. So here is a function that saves each table to a CSV file.
|
||||
|
||||
```emacs-lisp
|
||||
(defun my/export-org-tables-to-csv ()
|
||||
(interactive)
|
||||
(org-table-map-tables
|
||||
(lambda ()
|
||||
(when-let
|
||||
(name
|
||||
(plist-get (cadr (org-element-at-point)) :name))
|
||||
(org-table-export
|
||||
(concat
|
||||
(file-name-directory
|
||||
(buffer-file-name))
|
||||
name ".csv")
|
||||
"orgtbl-to-csv")))))
|
||||
```
|
||||
|
||||
|
||||
### UI {#ui}
|
||||
|
||||
|
||||
|
|
@ -3746,12 +3852,36 @@ Also, LaTeX fragments preview tends to break whenever the are custom `#+LATEX_HE
|
|||
|
||||
#### Better headers {#better-headers}
|
||||
|
||||
[org-superstar-mode](https://github.com/integral-dw/org-superstar-mode) is package that makes Org heading lines look a bit prettier.
|
||||
|
||||
Disabled it for now because of overlapping functionality with org-bars.
|
||||
|
||||
```emacs-lisp
|
||||
(use-package org-superstar
|
||||
:straight t
|
||||
:disabled
|
||||
:hook (org-mode . org-superstar-mode))
|
||||
```
|
||||
|
||||
[org-bars](https://github.com/tonyaldon/org-bars) highlights Org indentation with bars.
|
||||
|
||||
```emacs-lisp
|
||||
(use-package org-bars
|
||||
:straight (:repo "tonyaldon/org-bars" :host github)
|
||||
:if (display-graphic-p)
|
||||
:hook (org-mode . org-bars-mode))
|
||||
```
|
||||
|
||||
Remove the elipsis at the end of folded headlines. The elipsis seems unnecesary with org-bars.
|
||||
|
||||
```emacs-lisp
|
||||
(defun my/org-no-ellipsis-in-headlines ()
|
||||
(remove-from-invisibility-spec '(outline . t))
|
||||
(add-to-invisibility-spec 'outline))
|
||||
|
||||
(add-hook 'org-mode-hook #'my/org-no-ellipsis-in-headlines)
|
||||
```
|
||||
|
||||
|
||||
#### Org Agenda Icons {#org-agenda-icons}
|
||||
|
||||
|
|
@ -3911,6 +4041,29 @@ Add a custom LaTeX template without default packages. Packages are indented to b
|
|||
```
|
||||
|
||||
|
||||
#### Open a file from `org-directory` {#open-a-file-from-org-directory}
|
||||
|
||||
A function to open a file from `org-directory`, excluding a few directories like `roam` and `journal`.
|
||||
|
||||
```emacs-lisp
|
||||
(defun my/org-file-open ()
|
||||
(interactive)
|
||||
(let* ((default-directory org-directory)
|
||||
(project-files
|
||||
(seq-filter
|
||||
(lambda (f)
|
||||
(and
|
||||
(string-match-p (rx (* nonl) ".org" eos) f)
|
||||
(not (string-match-p (rx (| "journal" "roam" "review" "archive")) f))))
|
||||
(projectile-current-project-files))))
|
||||
(find-file
|
||||
(concat org-directory "/" (completing-read "Org file: " project-files)))))
|
||||
|
||||
(my-leader-def
|
||||
"o o" 'my/org-file-open)
|
||||
```
|
||||
|
||||
|
||||
### Presentations {#presentations}
|
||||
|
||||
Doing presentations with [org-present](https://github.com/rlister/org-present).
|
||||
|
|
@ -4146,37 +4299,6 @@ emacs -Q --batch -l run-tangle.el
|
|||
I have added this line to yadm's `post_alt` hook, so tangle is run after `yadm alt`
|
||||
|
||||
|
||||
## <span class="org-todo done OFF">OFF</span> (OFF) EAF {#off--eaf}
|
||||
|
||||
[Emacs Application Framework](https://github.com/manateelazycat/emacs-application-framework) provides a way to integrate PyQt applications with Emacs.
|
||||
|
||||
I've made it work, but don't find any uses cases for me at the moment
|
||||
|
||||
|
||||
### Installation {#installation}
|
||||
|
||||
Requirements: Node >= 14
|
||||
|
||||
```bash
|
||||
pip install qtconsole markdown qrcode[pil] PyQt5 PyQtWebEngine
|
||||
```
|
||||
|
||||
|
||||
### Config {#config}
|
||||
|
||||
```emacs-lisp
|
||||
(use-package eaf
|
||||
:straight (:host github :repo "manateelazycat/emacs-application-framework" :files ("*"))
|
||||
:init
|
||||
(use-package epc :defer t :straight t)
|
||||
(use-package ctable :defer t :straight t)
|
||||
(use-package deferred :defer t :straight t)
|
||||
:config
|
||||
(require 'eaf-evil)
|
||||
(setq eaf-evil-leader-key "SPC"))
|
||||
```
|
||||
|
||||
|
||||
## Programming {#programming}
|
||||
|
||||
|
||||
|
|
@ -5671,7 +5793,7 @@ So far I didn't find a nice SQL client for Emacs, but I occasionally run SQL que
|
|||
|
||||
(reformatter-define sqlformat
|
||||
:program (executable-find "sql-formatter")
|
||||
:args `("-l" ,my/sqlformatter-dialect))
|
||||
:args `("-l" ,my/sqlformatter-dialect, "-u"))
|
||||
|
||||
(my-leader-def
|
||||
:keymaps '(sql-mode-map)
|
||||
|
|
@ -5738,6 +5860,14 @@ References:
|
|||
```
|
||||
|
||||
|
||||
### crontab {#crontab}
|
||||
|
||||
```emacs-lisp
|
||||
(use-package crontab-mode
|
||||
:straight t)
|
||||
```
|
||||
|
||||
|
||||
## Apps & Misc {#apps-and-misc}
|
||||
|
||||
|
||||
|
|
@ -5871,7 +6001,7 @@ Using my own fork until the modifications are merged into master.
|
|||
:straight t
|
||||
:after (elfeed)
|
||||
:config
|
||||
(setq rmh-elfeed-org-files '("~/.emacs.d/elfeed.org"))
|
||||
(setq rmh-elfeed-org-files '("~/.emacs.d/private.org"))
|
||||
(elfeed-org))
|
||||
```
|
||||
|
||||
|
|
@ -5908,6 +6038,79 @@ Open a URL with eww.
|
|||
```
|
||||
|
||||
|
||||
##### Custom faces {#custom-faces}
|
||||
|
||||
Setting up custom faces for certain tags to make the feed look a bit nicer.
|
||||
|
||||
```emacs-lisp
|
||||
(defface elfeed-videos-entry
|
||||
`((t :foreground ,(doom-color 'red)))
|
||||
"Face for the elfeed entries with tag \"videos\"")
|
||||
|
||||
(defface elfeed-twitter-entry
|
||||
`((t :foreground ,(doom-color 'blue)))
|
||||
"Face for the elfeed entries with tah \"twitter\"")
|
||||
|
||||
(defface elfeed-emacs-entry
|
||||
`((t :foreground ,(doom-color 'magenta)))
|
||||
"Face for the elfeed entries with tah \"emacs\"")
|
||||
|
||||
(defface elfeed-music-entry
|
||||
`((t :foreground ,(doom-color 'green)))
|
||||
"Face for the elfeed entries with tah \"music\"")
|
||||
|
||||
(defface elfeed-podcasts-entry
|
||||
`((t :foreground ,(doom-color 'yellow)))
|
||||
"Face for the elfeed entries with tag \"podcasts\"")
|
||||
|
||||
(defface elfeed-blogs-entry
|
||||
`((t :foreground ,(doom-color 'orange)))
|
||||
"Face for the elfeed entries with tag \"blogs\"")
|
||||
|
||||
(with-eval-after-load 'elfeed
|
||||
(setq elfeed-search-face-alist
|
||||
'((twitter elfeed-twitter-entry)
|
||||
(podcasts elfeed-podcasts-entry)
|
||||
(music elfeed-music-entry)
|
||||
(videos elfeed-videos-entry)
|
||||
(emacs elfeed-emacs-entry)
|
||||
(blogs elfeed-blogs-entry)
|
||||
(unread elfeed-search-unread-title-face))))
|
||||
```
|
||||
|
||||
|
||||
##### elfeed-score {#elfeed-score}
|
||||
|
||||
[elfeed-score](https://github.com/sp1ff/elfeed-score) is a package that implements scoring for the elfeed entries. Entries are scored by a set of rules for tags/title/content/etc and sorted by that score.
|
||||
|
||||
```emacs-lisp
|
||||
(defun my/elfeed-toggle-score-sort ()
|
||||
(interactive)
|
||||
(setq elfeed-search-sort-function
|
||||
(if elfeed-search-sort-function
|
||||
nil
|
||||
#'elfeed-score-sort))
|
||||
(message "Sorting by score: %S" (if elfeed-search-sort-function "ON" "OFF"))
|
||||
(elfeed-search-update--force))
|
||||
|
||||
(use-package elfeed-score
|
||||
:straight t
|
||||
:after (elfeed)
|
||||
:init
|
||||
(setq elfeed-score-serde-score-file "~/.emacs.d/elfeed.score")
|
||||
:config
|
||||
(elfeed-score-enable)
|
||||
(setq elfeed-search-print-entry-function #'elfeed-score-print-entry)
|
||||
(general-define-key
|
||||
:states '(normal)
|
||||
:keymaps '(elfeed-search-mode-map)
|
||||
"=" elfeed-score-map)
|
||||
(general-define-key
|
||||
:keymaps '(elfeed-score-map)
|
||||
"=" #'my/elfeed-toggle-score-sort))
|
||||
```
|
||||
|
||||
|
||||
##### YouTube & EMMS {#youtube-and-emms}
|
||||
|
||||
Previously this block was opening MPV with `start-process`, but now I've managed to hook up MPV with EMMS. So there is the EMMS+elfeed "integration".
|
||||
|
|
@ -6047,15 +6250,23 @@ After all this is done, run `M-x emms-cache-set-from-mpd-all` to set cache from
|
|||
| Guix dependency |
|
||||
|-----------------|
|
||||
| mpv |
|
||||
| youtube-dl |
|
||||
| yt-dlp |
|
||||
|
||||
[mpv](https://mpv.io/) is a decent media player, which has found a place in this configuration because it integrates with youtube-dl.
|
||||
[mpv](https://mpv.io/) is a decent media player, which has found a place in this configuration because it integrates with ~~youtube-dl~~ yt-dlp.
|
||||
|
||||
It looks like YouTube has started to throttle youtube-dl, and yt-dlp has a workaround for that particular case. Just don't forget to add the following like to the mpv config:
|
||||
|
||||
```ini
|
||||
script-opts=ytdl_hook-ytdl_path=yt-dlp
|
||||
```
|
||||
|
||||
It seems a bit strange to keep the MPV config in this file, but I don't use the program outside Emacs.
|
||||
|
||||
```emacs-lisp
|
||||
(add-to-list 'emms-player-list 'emms-player-mpv t)
|
||||
```
|
||||
|
||||
Also a custom regex. My demands for MPV include running `youtube-dl`, so there is a regex that matches youtube.com or some of the video formats.
|
||||
Also a custom regex. My demands for MPV include running `yt-dlp`, so there is a regex that matches youtube.com or some of the video formats.
|
||||
|
||||
```emacs-lisp
|
||||
(emms-player-set emms-player-mpv
|
||||
|
|
@ -6064,7 +6275,7 @@ Also a custom regex. My demands for MPV include running `youtube-dl`, so there i
|
|||
(+ (? (or "https://" "http://"))
|
||||
(* nonl)
|
||||
(regexp (eval (emms-player-simple-regexp
|
||||
"mp4" "mov" "wmv" "webm" "flv" "avi" "mkv")))))))
|
||||
"mp4" "mov" "wmv" "webm" "flv" "avi" "mkv")))))))
|
||||
```
|
||||
|
||||
By default MPV plays the video in the best possible quality, which may be pretty high, even too high with limited bandwidth. So here is the logic to choose the quality.
|
||||
|
|
@ -6678,6 +6889,37 @@ Emacs' built-in calendar. Can even calculate sunrise and sunset times.
|
|||
```
|
||||
|
||||
|
||||
### <span class="org-todo done OFF">OFF</span> (OFF) EAF {#off--eaf}
|
||||
|
||||
[Emacs Application Framework](https://github.com/manateelazycat/emacs-application-framework) provides a way to integrate PyQt applications with Emacs.
|
||||
|
||||
I've made it work, but don't find any uses cases for me at the moment
|
||||
|
||||
|
||||
#### Installation {#installation}
|
||||
|
||||
Requirements: Node >= 14
|
||||
|
||||
```bash
|
||||
pip install qtconsole markdown qrcode[pil] PyQt5 PyQtWebEngine
|
||||
```
|
||||
|
||||
|
||||
#### Config {#config}
|
||||
|
||||
```emacs-lisp
|
||||
(use-package eaf
|
||||
:straight (:host github :repo "manateelazycat/emacs-application-framework" :files ("*"))
|
||||
:init
|
||||
(use-package epc :defer t :straight t)
|
||||
(use-package ctable :defer t :straight t)
|
||||
(use-package deferred :defer t :straight t)
|
||||
:config
|
||||
(require 'eaf-evil)
|
||||
(setq eaf-evil-leader-key "SPC"))
|
||||
```
|
||||
|
||||
|
||||
### Fun {#fun}
|
||||
|
||||
|
||||
|
|
@ -6732,6 +6974,17 @@ In order for this to work in Guix, a service is necessary - [Discord rich presen
|
|||
(zone))))
|
||||
```
|
||||
|
||||
Also, a function to copy a URL to the video under cursor.
|
||||
|
||||
```emacs-lisp
|
||||
(defun my/ytel-kill-url ()
|
||||
(interactive)
|
||||
(kill-new
|
||||
(concat
|
||||
"https://www.youtube.com/watch?v="
|
||||
(ytel-video-id (ytel-get-current-video)))))
|
||||
```
|
||||
|
||||
|
||||
## Guix settings {#guix-settings}
|
||||
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@ As with other files in the repo, parts prefixed with (OFF) are not used but kept
|
|||
- [xref](#xref)
|
||||
- [Folding](#folding)
|
||||
- [Zoom](#zoom)
|
||||
- [i3 integration](#i3-integration)
|
||||
- [Editing helpers](#editing-helpers)
|
||||
- [Visual fill column mode](#visual-fill-column-mode)
|
||||
- [smartparens](#smartparens)
|
||||
|
|
@ -256,6 +257,7 @@ As with other files in the repo, parts prefixed with (OFF) are not used but kept
|
|||
- [Fetching lyrics](#fetching-lyrics)
|
||||
- [Some keybindings](#some-keybindings)
|
||||
- [EMMS & mpd Fixes](#emms-and-mpd-fixes)
|
||||
- [ytel](#ytel)
|
||||
- [EWW](#eww)
|
||||
- [ERC](#erc)
|
||||
- [Google Translate](#google-translate)
|
||||
|
|
@ -948,6 +950,161 @@ Evil does a pretty good job of uniting these two in the set of vim-like keybindi
|
|||
```
|
||||
|
||||
|
||||
### i3 integration {#i3-integration}
|
||||
|
||||
One advantage of EXWM for an Emacs user is that EXWM gives one set of keybindings to manage both Emacs windows and X windows. In every other WM, like my preferred [i3wm](https://i3wm.org), two orthogonal keymaps seem to be necessary. But, as both programs are quite customizable, I want to see whether I can replicate at least some part of the EXWM goodness in i3.
|
||||
|
||||
But why not just use EXWM? One key reason is that to my taste (and perhaps on my hardware) EXWM didn't feel snappy enough. Also, I really like i3's tree-based layout structure; I feel like it fits my workflow much better than anything else I tried, including the master/stack paradigm of [XMonad](https://xmonad.org/), for instance.
|
||||
|
||||
One common point of criticism of i3 is that it is not extensible enough, especially compared to WMs that are configured in an actual programing language, like the mentioned XMonad, [Qtile](http://www.qtile.org/), [Awesome](https://awesomewm.org/), etc. But I think i3's extensibility is underappreciated, although the contents of this section may lie closer to the limits of how far one can go there.
|
||||
|
||||
The basic idea is to launch a normal i3 command with `i3-msg` in case the current window is not Emacs, otherwise pass that command to Emacs with `emacsclient`. In Emacs, execute the command if possible, otherwise pass the command back to i3.
|
||||
|
||||
This may seem like a lot of overhead, but I didn't feel it even in the worst case (i3 -> Emacs -> i3), so at least in that regard, the interaction feels seamless. The only concern is that this command flow is vulnerable to Emacs getting stuck, but it is still much less of a problem than with EXWM.
|
||||
|
||||
One interesting observation here is that Emacs windows and X windows are sort of one-level entities, so I can talk just about "windows".
|
||||
|
||||
At any rate, we need a script to do the i3 -> Emacs part:
|
||||
|
||||
```bash
|
||||
if [[ $(xdotool getactivewindow getwindowname) =~ ^emacs(:.*)?@.* ]]; then
|
||||
command="(my/emacs-i3-integration \"$@\")"
|
||||
emacsclient -e "$command"
|
||||
else
|
||||
i3-msg $@
|
||||
fi
|
||||
```
|
||||
|
||||
This script is being run from the [i3 configuration]({{< relref "Desktop" >}}).
|
||||
|
||||
For this to work, we need to make sure that Emacs starts a server, so here is an expression to do just that:
|
||||
|
||||
```emacs-lisp
|
||||
(add-hook 'after-init-hook #'server-start)
|
||||
```
|
||||
|
||||
And here is a simple macro to do the Emacs -> i3 part:
|
||||
|
||||
```emacs-lisp
|
||||
(defmacro i3-msg (&rest args)
|
||||
`(start-process "emacs-i3-windmove" nil "i3-msg" ,@args))
|
||||
```
|
||||
|
||||
Now we have to handle the required set of i3 commands. It is worth noting here that I'm not trying to implement a general mechanism to apply i3 commands to Emacs, rather I'm implementing a small subset that I use in my i3 configuration and that maps reasonably to the Emacs concepts.
|
||||
|
||||
Also, I use [evil-mode](https://github.com/emacs-evil/evil) and generally configure the software to have vim-style bindings where possible. So if you don't use evil-mode you'd have to detangle the given functions from evil, but then, I guess, you do not use super+hjkl to manage windows either.
|
||||
|
||||
First, for the `focus` command I want to move to an Emacs window in the given direction if there is one, otherwise move to an X window in the same direction. Fortunately, i3 and windmove have the same names for directions, so the function is rather straightforward.
|
||||
|
||||
One caveat here is that the minibuffer is always the bottom-most Emacs window, so it is necessary to check for that as well.
|
||||
|
||||
```emacs-lisp
|
||||
(defun my/emacs-i3-windmove (dir)
|
||||
(let ((other-window (windmove-find-other-window dir)))
|
||||
(if (or (null other-window) (window-minibuffer-p other-window))
|
||||
(i3-msg "focus" (symbol-name dir))
|
||||
(windmove-do-window-select dir))))
|
||||
```
|
||||
|
||||
For the `move` I want the following behavior:
|
||||
|
||||
- if there is space in the required directon, move the Emacs window there;
|
||||
- if there is no space in the required direction, but space in two orthogonal directions, move the Emacs window so that there is no more space in the orthogonal directions;
|
||||
- otherwise, move an X window (Emacs frame).
|
||||
|
||||
For the first part, `window-swap-states` with `windmove-find-other-window` do well enough.
|
||||
|
||||
`evil-move-window` works well for the second part. By itself it doesn't behave quite like i3, for instance, `(evil-move-window 'right)` in a three-column split would move the window from the far left side to the far right side (bypassing center). Hence the combination as described here.
|
||||
|
||||
So here is a simple predicate which checks whether there is space in the given direction.
|
||||
|
||||
```emacs-lisp
|
||||
(defun my/emacs-i3-direction-exists-p (dir)
|
||||
(some (lambda (dir)
|
||||
(let ((win (windmove-find-other-window dir)))
|
||||
(and win (not (window-minibuffer-p win)))))
|
||||
(pcase dir
|
||||
('width '(left right))
|
||||
('height '(up down)))))
|
||||
```
|
||||
|
||||
And the implementation of the move command.
|
||||
|
||||
```emacs-lisp
|
||||
(defun my/emacs-i3-move-window (dir)
|
||||
(let ((other-window (windmove-find-other-window dir))
|
||||
(other-direction (my/emacs-i3-direction-exists-p
|
||||
(pcase dir
|
||||
('up 'width)
|
||||
('down 'width)
|
||||
('left 'height)
|
||||
('right 'height)))))
|
||||
(cond
|
||||
((and other-window (not (window-minibuffer-p other-window)))
|
||||
(window-swap-states (selected-window) other-window))
|
||||
(other-direction
|
||||
(evil-move-window dir))
|
||||
(t (i3-msg "move" (symbol-name dir))))))
|
||||
```
|
||||
|
||||
Next on the line are `resize grow` and `resize shrink`. `evil-window-` functions do nicely for this task.
|
||||
|
||||
This function also checks whether there is space to resize in the given direction with the help of the predicate defined above. The command is forwarded back to i3 if there is not.
|
||||
|
||||
```emacs-lisp
|
||||
(defun my/emacs-i3-resize-window (dir kind value)
|
||||
(if (or (one-window-p)
|
||||
(not (my/emacs-i3-direction-exists-p dir)))
|
||||
(i3-msg "resize" (symbol-name kind) (symbol-name dir)
|
||||
(format "%s px or %s ppt" value value))
|
||||
(setq value (/ value 2))
|
||||
(pcase kind
|
||||
('shrink
|
||||
(pcase dir
|
||||
('width
|
||||
(evil-window-decrease-width value))
|
||||
('height
|
||||
(evil-window-decrease-height value))))
|
||||
('grow
|
||||
(pcase dir
|
||||
('width
|
||||
(evil-window-increase-width value))
|
||||
('height
|
||||
(evil-window-increase-height value)))))))
|
||||
```
|
||||
|
||||
[transpose-frame](https://github.com/emacsorphanage/transpose-frame) is a package to "transpose" the current frame layout, which behaves someone similar to the `layout toggle split` command in i3, so I'll use it as well.
|
||||
|
||||
```emacs-lisp
|
||||
(use-package transpose-frame
|
||||
:straight t
|
||||
:commands (transpose-frame))
|
||||
```
|
||||
|
||||
Finally, the entrypoint for the Emacs integration. In addition to the commands defined above, it processes `split` and `kill` commands and passes every other command back to i3.
|
||||
|
||||
```emacs-lisp
|
||||
(defun my/emacs-i3-integration (command)
|
||||
(pcase command
|
||||
((rx bos "focus")
|
||||
(my/emacs-i3-windmove
|
||||
(intern (elt (split-string command) 1))))
|
||||
((rx bos "move")
|
||||
(my/emacs-i3-move-window
|
||||
(intern (elt (split-string command) 1))))
|
||||
((rx bos "resize")
|
||||
(my/emacs-i3-resize-window
|
||||
(intern (elt (split-string command) 2))
|
||||
(intern (elt (split-string command) 1))
|
||||
(string-to-number (elt (split-string command) 3))))
|
||||
("layout toggle split" (transpose-frame))
|
||||
("split h" (evil-window-split))
|
||||
("split v" (evil-window-vsplit))
|
||||
("kill" (evil-quit))
|
||||
(- (i3-msg command))))
|
||||
```
|
||||
|
||||
|
||||
### Editing helpers {#editing-helpers}
|
||||
|
||||
|
||||
|
|
@ -3621,7 +3778,7 @@ Categories are broad labels to group agenda items.
|
|||
#### General settings {#general-settings}
|
||||
|
||||
```emacs-lisp
|
||||
(setq org-export-backends '(md html latex beamer org))
|
||||
;; (setq org-export-backends '(md html latex beamer org))
|
||||
```
|
||||
|
||||
|
||||
|
|
@ -6070,6 +6227,46 @@ The list will be in reverse order."
|
|||
```
|
||||
|
||||
|
||||
#### ytel {#ytel}
|
||||
|
||||
[ytel](https://github.com/gRastello/ytel) is a YouTube (actually Invidious) frontend, which lets one search YouTube (whereas the setup with elfeed just lets one view the pre-defined subscriptions).
|
||||
|
||||
The package doesn't provide evil bindings, so I define my own.
|
||||
|
||||
```emacs-lisp
|
||||
(use-package ytel
|
||||
:straight t
|
||||
:commands (ytel)
|
||||
:config
|
||||
(setq ytel-invidious-api-url "https://invidio.xamh.de/")
|
||||
(general-define-key
|
||||
:states '(normal)
|
||||
:keymaps 'ytel-mode-map
|
||||
"q" #'ytel-quit
|
||||
"s" #'ytel-search
|
||||
"L" #'ytel-search-next-page
|
||||
"H" #'ytel-search-previous-page
|
||||
"RET" #'my/ytel-add-emms))
|
||||
```
|
||||
|
||||
And here is the same kind of integration with EMMS as in the elfeed setup:
|
||||
|
||||
```emacs-lisp
|
||||
(with-eval-after-load 'emms
|
||||
(define-emms-source ytel (video)
|
||||
(let ((track (emms-track
|
||||
'url (concat "https://www.youtube.com/watch?v="
|
||||
(ytel-video-id video)))))
|
||||
(emms-track-set track 'info-title (ytel-video-title video))
|
||||
(emms-track-set track 'info-artist (ytel-video-author video))
|
||||
(emms-playlist-insert-track track))))
|
||||
|
||||
(defun my/ytel-add-emms ()
|
||||
(interactive)
|
||||
(emms-add-ytel (ytel-get-current-video)))
|
||||
```
|
||||
|
||||
|
||||
#### EWW {#eww}
|
||||
|
||||
Emacs built-in web browser. ~~I wonder if anyone actually uses it.~~
|
||||
|
|
|
|||
|
|
@ -107,8 +107,7 @@ Uses yadm's `post_alt` hook to create symlinks
|
|||
Mail/thexcloud/.credentials.gmailieer.json
|
||||
Mail/progin6304/.credentials.gmailieer.json
|
||||
.emacs.d/dired-bookmarks.el
|
||||
.emacs.d/elfeed.org
|
||||
.emacs.d/private.org
|
||||
.emacs.d/prodigy-config.el
|
||||
.emacs.d/private.el
|
||||
.emacs.d/.trello/sqrtminusone.el
|
||||
```
|
||||
|
|
@ -62,11 +62,10 @@
|
|||
<p>#+TOC headlines 6</p>
|
||||
<h2 id="dot-profile"><code>.profile</code></h2>
|
||||
<h3 id="environment">Environment</h3>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sh" data-lang="sh"><span style="color:#75715e"># export EDITOR=/usr/bin/vim</span>
|
||||
<span style="color:#75715e"># export BROWSER=/usr/bin/firefox</span>
|
||||
export QT_QPA_PLATFORMTHEME<span style="color:#f92672">=</span><span style="color:#e6db74">"qt5ct"</span>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sh" data-lang="sh">export QT_QPA_PLATFORMTHEME<span style="color:#f92672">=</span><span style="color:#e6db74">"qt5ct"</span>
|
||||
export QT_AUTO_SCREEN_SCALE_FACTOR<span style="color:#f92672">=</span><span style="color:#ae81ff">0</span>
|
||||
<span style="color:#75715e"># export GTK2_RC_FILES="$HOME/.gtkrc-2.0"</span>
|
||||
</code></pre></div><p>Set ripgrep config path</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sh" data-lang="sh">export RIPGREP_CONFIG_PATH<span style="color:#f92672">=</span>$HOME/.config/ripgrep/ripgreprc
|
||||
</code></pre></div><h3 id="my-paths">My paths</h3>
|
||||
<p>My script folders</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sh" data-lang="sh"><span style="color:#66d9ef">if</span> <span style="color:#f92672">[</span> -d <span style="color:#e6db74">"</span>$HOME<span style="color:#e6db74">/bin"</span> <span style="color:#f92672">]</span> ; <span style="color:#66d9ef">then</span>
|
||||
|
|
@ -353,6 +352,7 @@ alias cii<span style="color:#f92672">=</span><span style="color:#e6db74">"ex
|
|||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-fish" data-lang="fish"><span style="color:#a6e22e">fish_vi_key_bindings</span>
|
||||
|
||||
<span style="color:#e6db74"><<shell-alias</span>es<span style="color:#f92672">>></span>
|
||||
alias cad<span style="color:#f92672">=</span><span style="color:#e6db74">"conda activate (basename (pwd))"</span>
|
||||
</code></pre></div><table>
|
||||
<thead>
|
||||
<tr>
|
||||
|
|
@ -781,8 +781,18 @@ bind <span style="color:#a6e22e">-M</span> insert <span style="color:#ae81ff">\e
|
|||
<td>tokei</td>
|
||||
<td>Count lines of code</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>sshfs</td>
|
||||
<td>Mount stuff over SSH</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3 id="ripgrep-config">ripgrep config</h3>
|
||||
<p>Occasionally I can’t exclude certain files from ripgrep via the VCS settings, so here is a simple config to ignore certain files globally.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">--ignore-file=/home/pavel/.config/ripgrep/ripgrepignore
|
||||
</code></pre></div><p>The corresponding ignore file:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">*.ts.snap
|
||||
</code></pre></div><p>By default ripgrep doesn’t read any configs, so it is necessary to set the <code>RIPGREP_CONFIG_PATH</code> variable in the <a href="#environment">.profile.</a></p>
|
||||
<h2 id="misc-scripts">Misc scripts</h2>
|
||||
<h3 id="nt-exec-command-with-a-finished-notification"><code>nt</code> - exec command with a finished notification</h3>
|
||||
<p>Usage:</p>
|
||||
|
|
|
|||
|
|
@ -150,6 +150,7 @@
|
|||
<li><a href="#buku-bookmarks">Buku bookmarks</a></li>
|
||||
<li><a href="#man-pages">Man pages</a></li>
|
||||
<li><a href="#pass">pass</a></li>
|
||||
<li><a href="#emojis">emojis</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
|
@ -1106,9 +1107,13 @@ API_KEY<span style="color:#f92672">=</span>$IPSTACK_API_KEY
|
|||
<span style="color:#66d9ef">fi</span>
|
||||
ip_info<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>curl -s http://api.ipstack.com/<span style="color:#e6db74">${</span>ip<span style="color:#e6db74">}</span>?access_key<span style="color:#f92672">=</span><span style="color:#e6db74">${</span>API_KEY<span style="color:#e6db74">}</span><span style="color:#66d9ef">)</span>
|
||||
<span style="color:#75715e"># emoji=$(echo $ip_info | jq -r '.location.country_flag_emoji')</span>
|
||||
code<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>echo $ip_info | jq -r <span style="color:#e6db74">'.country_code'</span><span style="color:#66d9ef">)</span>
|
||||
code<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>echo $ip_info | jq -r <span style="color:#e6db74">'.country_code'</span> 2> /dev/null<span style="color:#66d9ef">)</span>
|
||||
vpn<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>pgrep -a openvpn$ | head -n <span style="color:#ae81ff">1</span> | awk <span style="color:#e6db74">'{print $NF }'</span> | cut -d <span style="color:#e6db74">'.'</span> -f 1<span style="color:#66d9ef">)</span>
|
||||
|
||||
<span style="color:#66d9ef">if</span> <span style="color:#f92672">[[</span> -z $code <span style="color:#f92672">]]</span>; <span style="color:#66d9ef">then</span>
|
||||
code<span style="color:#f92672">=</span><span style="color:#e6db74">"??"</span>
|
||||
<span style="color:#66d9ef">fi</span>
|
||||
|
||||
<span style="color:#66d9ef">if</span> <span style="color:#f92672">[</span> -n <span style="color:#e6db74">"</span>$vpn<span style="color:#e6db74">"</span> <span style="color:#f92672">]</span>; <span style="color:#66d9ef">then</span>
|
||||
echo <span style="color:#e6db74">"%{u<<get-color(name="</span>blue<span style="color:#e6db74">")>>}%{+u} </span>$code<span style="color:#e6db74"> %{u-}"</span>
|
||||
<span style="color:#66d9ef">else</span>
|
||||
|
|
@ -1646,7 +1651,20 @@ $BUKU -f <span style="color:#ae81ff">4</span> -p | awk -F<span style="color:#e6d
|
|||
EDITOR<span style="color:#f92672">=</span>vim
|
||||
default_autotype<span style="color:#f92672">=</span><span style="color:#e6db74">'username :tab pass'</span>
|
||||
clip<span style="color:#f92672">=</span>both
|
||||
</code></pre></div><h2 id="flameshot">Flameshot</h2>
|
||||
</code></pre></div><h4 id="emojis">emojis</h4>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Guix dependency</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>rofi-emoji</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2 id="flameshot">Flameshot</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
|
|
@ -2388,6 +2406,18 @@ clip<span style="color:#f92672">=</span>both
|
|||
<td>dev</td>
|
||||
<td>sbcl</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>dev</td>
|
||||
<td>git-lfs</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>dev</td>
|
||||
<td>mysql</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>dev</td>
|
||||
<td>gource</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3 id="manifests">Manifests</h3>
|
||||
|
|
|
|||
|
|
@ -73,7 +73,7 @@
|
|||
<li><a href="#measure-startup-speed">Measure startup speed</a></li>
|
||||
<li><a href="#straight-dot-el">straight.el</a></li>
|
||||
<li><a href="#use-package">use-package</a></li>
|
||||
<li><a href="#config-variants-and-environment">config variants & environment</a></li>
|
||||
<li><a href="#config-variants-and-environment">Config variants & environment</a></li>
|
||||
<li><a href="#performance">Performance</a>
|
||||
<ul>
|
||||
<li><a href="#garbage-collection">Garbage collection</a></li>
|
||||
|
|
@ -242,13 +242,15 @@
|
|||
<li><a href="#managing-jupyter-kernels">Managing Jupyter kernels</a></li>
|
||||
<li><a href="#do-not-wrap-the-output-in-emacs-jupyter">Do not wrap the output in emacs-jupyter</a></li>
|
||||
<li><a href="#wrap-source-code-output">Wrap source code output</a></li>
|
||||
<li><a href="#managing-a-literate-programming-project">Managing a literate programming project</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#productivity-and-knowledge-management">Productivity & Knowledge management</a>
|
||||
<ul>
|
||||
<li><a href="#capture-templates-and-various-settings">Capture templates & various settings</a></li>
|
||||
<li><a href="#custom-agendas">Custom agendas</a></li>
|
||||
<li><a href="#trello-sync">Trello sync</a></li>
|
||||
<li><a href="#org-ql">org-ql</a></li>
|
||||
<li><a href="#custom-agendas">Custom agendas</a></li>
|
||||
<li><a href="#review-workflow">Review workflow</a>
|
||||
<ul>
|
||||
<li><a href="#data-from-git-and-org-roam">Data from git & org-roam</a></li>
|
||||
|
|
@ -266,6 +268,7 @@
|
|||
</li>
|
||||
<li><a href="#org-ref">org-ref</a></li>
|
||||
<li><a href="#org-roam-bibtex">org-roam-bibtex</a></li>
|
||||
<li><a href="#managing-tables">Managing tables</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#ui">UI</a>
|
||||
|
|
@ -288,6 +291,7 @@
|
|||
<li><a href="#keybindings-and-stuff">Keybindings & stuff</a>
|
||||
<ul>
|
||||
<li><a href="#copy-a-link">Copy a link</a></li>
|
||||
<li><a href="#open-a-file-from-org-directory">Open a file from <code>org-directory</code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#presentations">Presentations</a></li>
|
||||
|
|
@ -306,12 +310,6 @@
|
|||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#off--eaf"><span class="org-todo done OFF">OFF</span> (OFF) EAF</a>
|
||||
<ul>
|
||||
<li><a href="#installation">Installation</a></li>
|
||||
<li><a href="#config">Config</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#programming">Programming</a>
|
||||
<ul>
|
||||
<li><a href="#general-setup">General setup</a>
|
||||
|
|
@ -432,6 +430,7 @@
|
|||
<li><a href="#csv">CSV</a></li>
|
||||
<li><a href="#off--pdf"><span class="org-todo done OFF">OFF</span> (OFF) PDF</a></li>
|
||||
<li><a href="#docker">Docker</a></li>
|
||||
<li><a href="#crontab">crontab</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#apps-and-misc">Apps & Misc</a>
|
||||
|
|
@ -449,6 +448,8 @@
|
|||
<li><a href="#elfeed">Elfeed</a>
|
||||
<ul>
|
||||
<li><a href="#some-additions">Some additions</a></li>
|
||||
<li><a href="#custom-faces">Custom faces</a></li>
|
||||
<li><a href="#elfeed-score">elfeed-score</a></li>
|
||||
<li><a href="#youtube-and-emms">YouTube & EMMS</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
|
@ -491,6 +492,12 @@
|
|||
<li><a href="#calendar">Calendar</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#off--eaf"><span class="org-todo done OFF">OFF</span> (OFF) EAF</a>
|
||||
<ul>
|
||||
<li><a href="#installation">Installation</a></li>
|
||||
<li><a href="#config">Config</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#fun">Fun</a>
|
||||
<ul>
|
||||
<li><a href="#discord-integration">Discord integration</a></li>
|
||||
|
|
@ -514,8 +521,8 @@
|
|||
(<span style="color:#a6e22e">float-time</span>
|
||||
(<span style="color:#a6e22e">time-subtract</span> after-init-time before-init-time)))
|
||||
gcs-done)))
|
||||
|
||||
<span style="color:#75715e">;; (setq use-package-verbose t)</span>
|
||||
</code></pre></div><p>Set the following to <code>t</code> to print debug information during the startup. This will include the order in which the packages are loaded and the loading time of individual packages.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="color:#75715e">;; (setq use-package-verbose t)</span>
|
||||
</code></pre></div><h3 id="straight-dot-el">straight.el</h3>
|
||||
<p>Straight.el is my Emacs package manager of choice. Its advantages & disadvantages over other options are listed pretty thoroughly in the README file in the repo.</p>
|
||||
<p>The following is a straight.el bootstrap script.</p>
|
||||
|
|
@ -546,11 +553,11 @@
|
|||
<!--listend-->
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(straight-use-package <span style="color:#e6db74">'use-package</span>)
|
||||
(eval-when-compile (require <span style="color:#e6db74">'use-package</span>))
|
||||
<span style="color:#75715e">;; (setq use-package-verbose t)</span>
|
||||
</code></pre></div><h3 id="config-variants-and-environment">config variants & environment</h3>
|
||||
</code></pre></div><h3 id="config-variants-and-environment">Config variants & environment</h3>
|
||||
<p>This section is about optionating the Emacs config.</p>
|
||||
<p>The following variable is true when my machine is not powerful enough for some resource-heavy packages.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(setq my/lowpower (string= (<span style="color:#a6e22e">system-name</span>) <span style="color:#e6db74">"azure"</span>))
|
||||
</code></pre></div><p>The following is true if Emacs is meant to be used with TRAMP over slow ssh.</p>
|
||||
</code></pre></div><p>The following is true if Emacs is meant to be used with TRAMP over slow ssh. Take a look at the <a href="#tramp">TRAMP</a> section for more details.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(setq my/slow-ssh
|
||||
(or
|
||||
(string= (getenv <span style="color:#e6db74">"IS_TRAMP"</span>) <span style="color:#e6db74">"true"</span>)
|
||||
|
|
@ -584,13 +591,13 @@
|
|||
(<span style="color:#a6e22e">garbage-collect</span>))))
|
||||
(add-hook <span style="color:#e6db74">'after-focus-change-function</span> <span style="color:#e6db74">'garbage-collect</span>))))
|
||||
</code></pre></div><h4 id="native-compilation">Native compilation</h4>
|
||||
<p>Set number of jobs to 1 on low-power machines</p>
|
||||
<p>Set the number of native compilation jobs to 1 on low-power machines.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(when my/lowpower
|
||||
(setq comp-async-jobs-number <span style="color:#ae81ff">1</span>))
|
||||
</code></pre></div><h3 id="anaconda">Anaconda</h3>
|
||||
<p><a href="https://www.anaconda.com/">Anaconda</a> is a free package and environment manager. I currently use it to manage multiple versions of Python and Node.js</p>
|
||||
<p><a href="https://www.anaconda.com/">Anaconda</a> is a free package and environment manager. I currently use it to manage multiple versions of Python and Node.js. Take a look at <a href="/configs/guix/">the corresponding entry</a> in the Guix config for details about using it on Guix.</p>
|
||||
<p>The following code uses the conda package to activate the base environment on startup if Emacs is launched outside the environment.</p>
|
||||
<p>Also, some strange things are happening if vterm is launched with conda activated from Emacs, so I advise <code>conda-env-activate</code> to set an auxililary environment variable.</p>
|
||||
<p>Also, some strange things are happening if vterm is launched with conda activated from Emacs, so I advise <code>conda-env-activate</code> to set an auxililary environment variable. This variable is used in the <a href="/configs/console/">shell config</a>.</p>
|
||||
<p>References:</p>
|
||||
<ul>
|
||||
<li><a href="https://docs.anaconda.com/">Anaconda docs</a></li>
|
||||
|
|
@ -610,7 +617,7 @@
|
|||
(unless (getenv <span style="color:#e6db74">"CONDA_DEFAULT_ENV"</span>)
|
||||
(conda-env-activate <span style="color:#e6db74">"general"</span>)))
|
||||
</code></pre></div><h3 id="custom-file-location">Custom file location</h3>
|
||||
<p>By default, custom writes stuff to <code>init.el</code>, which is somewhat annoying. The following makes a separate file <code>custom.el</code></p>
|
||||
<p>By default, custom writes stuff to <code>init.el</code>, which is somewhat annoying. The following makes it write to a separate file <code>custom.el</code></p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(setq custom-file (<span style="color:#a6e22e">concat</span> user-emacs-directory <span style="color:#e6db74">"custom.el"</span>))
|
||||
(<span style="color:#a6e22e">load</span> custom-file <span style="color:#e6db74">'noerror</span>)
|
||||
</code></pre></div><h3 id="private-config">Private config</h3>
|
||||
|
|
@ -619,7 +626,7 @@
|
|||
(when (<span style="color:#a6e22e">file-exists-p</span> private-file)
|
||||
(load-file private-file)))
|
||||
</code></pre></div><h3 id="no-littering">No littering</h3>
|
||||
<p>By default emacs and its packages create a lot files in <code>.emacs.d</code> and in other places. <a href="https://github.com/emacscollective/no-littering">no-littering</a> is a collective effort to redirect all of this to two folders in <code>user-emacs-directory</code>.</p>
|
||||
<p>By default Mmacs and its packages create a lot files in <code>.emacs.d</code> and in other places. <a href="https://github.com/emacscollective/no-littering">no-littering</a> is a collective effort to redirect all of that to two folders in <code>user-emacs-directory</code>.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(use-package no-littering
|
||||
:straight <span style="color:#66d9ef">t</span>)
|
||||
</code></pre></div><h3 id="prevent-emacs-from-closing">Prevent Emacs from closing</h3>
|
||||
|
|
@ -639,8 +646,7 @@
|
|||
:config
|
||||
(general-evil-setup))
|
||||
</code></pre></div><h4 id="which-key">which-key</h4>
|
||||
<p>A package that displays the available keybindings in a popup.</p>
|
||||
<p>Pretty useful, as Emacs seems to have more keybindings than I can remember at any given point.</p>
|
||||
<p>A package that displays the available keybindings in a popup. The package is pretty useful, as Emacs seems to have more keybindings than I can remember at any given point.</p>
|
||||
<p>References:</p>
|
||||
<ul>
|
||||
<li><a href="https://github.com/justbur/emacs-which-key">which-key repo</a></li>
|
||||
|
|
@ -679,7 +685,7 @@
|
|||
(my/dump-bindings-recursive prefix)))
|
||||
(switch-to-buffer-other-window <span style="color:#e6db74">"bindings"</span>))
|
||||
</code></pre></div><h3 id="evil-mode">Evil mode</h3>
|
||||
<p>A whole ecosystem of packages that emulates the main features of Vim. Probably the best vim emulator out there.</p>
|
||||
<p>An entire ecosystem of packages that emulates the main features of Vim. Probably the best vim emulator out there.</p>
|
||||
<p>The only problem is that the package name makes it hard to google anything by just typing “evil”.</p>
|
||||
<p>References:</p>
|
||||
<ul>
|
||||
|
|
@ -694,15 +700,13 @@
|
|||
(setq evil-want-integration <span style="color:#66d9ef">t</span>)
|
||||
(setq evil-want-C-u-scroll <span style="color:#66d9ef">t</span>)
|
||||
(setq evil-want-keybinding <span style="color:#66d9ef">nil</span>)
|
||||
:config
|
||||
(evil-mode <span style="color:#ae81ff">1</span>)
|
||||
(setq evil-search-module <span style="color:#e6db74">'evil-search</span>)
|
||||
(setq evil-split-window-below <span style="color:#66d9ef">t</span>)
|
||||
(setq evil-vsplit-window-right <span style="color:#66d9ef">t</span>)
|
||||
:config
|
||||
(evil-mode <span style="color:#ae81ff">1</span>)
|
||||
<span style="color:#75715e">;; (setq evil-respect-visual-line-mode t)</span>
|
||||
(evil-set-undo-system <span style="color:#e6db74">'undo-tree</span>)
|
||||
<span style="color:#75715e">;; (add-to-list 'evil-emacs-state-modes 'dired-mode)</span>
|
||||
)
|
||||
(evil-set-undo-system <span style="color:#e6db74">'undo-tree</span>))
|
||||
</code></pre></div><h4 id="addons">Addons</h4>
|
||||
<p><a href="https://github.com/emacs-evil/evil-surround">evil-surround</a> emulates one of my favorite vim plugins, surround.vim. Adds a lot of parentheses management options.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(use-package evil-surround
|
||||
|
|
@ -710,7 +714,7 @@
|
|||
:after evil
|
||||
:config
|
||||
(global-evil-surround-mode <span style="color:#ae81ff">1</span>))
|
||||
</code></pre></div><p><a href="https://github.com/linktohack/evil-commentary">evil-commentary</a> emulates commentary.vim.</p>
|
||||
</code></pre></div><p><a href="https://github.com/linktohack/evil-commentary">evil-commentary</a> emulates commentary.vim. It gives actions for quick insertion and deletion of comments.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(use-package evil-commentary
|
||||
:straight <span style="color:#66d9ef">t</span>
|
||||
:after evil
|
||||
|
|
@ -739,14 +743,13 @@
|
|||
(setq evil-lion-left-align-key (kbd <span style="color:#e6db74">"g a"</span>))
|
||||
(setq evil-lion-right-align-key (kbd <span style="color:#e6db74">"g A"</span>))
|
||||
(evil-lion-mode))
|
||||
</code></pre></div><p><a href="https://github.com/redguardtoo/evil-matchit">evil-matchit</a> makes “%” to match things like tags.</p>
|
||||
</code></pre></div><p><a href="https://github.com/redguardtoo/evil-matchit">evil-matchit</a> makes “%” to match things like tags. It doesn’t work perfectly, so I occasionally turn it off.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(use-package evil-matchit
|
||||
:straight <span style="color:#66d9ef">t</span>
|
||||
:config
|
||||
(global-evil-matchit-mode <span style="color:#ae81ff">1</span>))
|
||||
</code></pre></div><h4 id="evil-collection">evil-collection</h4>
|
||||
<p><a href="https://github.com/emacs-evil/evil-collection">evil-collection</a> is a package that provides evil bindings for a lot of different packages. One can see the whole list in the <a href="https://github.com/emacs-evil/evil-collection/tree/master/modes">modes</a> folder.</p>
|
||||
<p>I don’t enable the entire package, just the modes I need.</p>
|
||||
<p><a href="https://github.com/emacs-evil/evil-collection">evil-collection</a> is a package that provides evil bindings for a lot of different packages. One can see the complete list in the <a href="https://github.com/emacs-evil/evil-collection/tree/master/modes">modes</a> folder.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(use-package evil-collection
|
||||
:straight <span style="color:#66d9ef">t</span>
|
||||
:after evil
|
||||
|
|
@ -828,7 +831,7 @@
|
|||
|
||||
(my-leader-def <span style="color:#e6db74">"?"</span> <span style="color:#e6db74">'which-key-show-top-level</span>)
|
||||
(my-leader-def <span style="color:#e6db74">"E"</span> <span style="color:#e6db74">'eval-expression</span>)
|
||||
</code></pre></div><p><code>general.el</code> has a nice integration with which-key, so I use this fact to show more descriptive annotations for certain groups of keybindings (the default one is <code>prefix</code>).</p>
|
||||
</code></pre></div><p><code>general.el</code> has a nice integration with which-key, so I use that to show more descriptive annotations for certain groups of keybindings (the default annotation is just <code>prefix</code>).</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(my-leader-def
|
||||
<span style="color:#e6db74">"a"</span> <span style="color:#f92672">'</span>(:which-key <span style="color:#e6db74">"apps"</span>))
|
||||
</code></pre></div><h4 id="universal-argument">Universal argument</h4>
|
||||
|
|
@ -849,7 +852,7 @@
|
|||
<span style="color:#e6db74">"e"</span> <span style="color:#e6db74">'profiler-stop</span>
|
||||
<span style="color:#e6db74">"p"</span> <span style="color:#e6db74">'profiler-report</span>)
|
||||
</code></pre></div><h4 id="buffer-switching">Buffer switching</h4>
|
||||
<p>Some keybindings I used in vim to switch buffers and can’t let go of.</p>
|
||||
<p>Some keybindings I used in vim to switch buffers and can’t let go of. But I think I started to use these less since I made an attempt in <a href="#i3-integration">i3 integration</a>.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(general-define-key
|
||||
:keymaps <span style="color:#e6db74">'override</span>
|
||||
<span style="color:#e6db74">"C-<right>"</span> <span style="color:#e6db74">'evil-window-right</span>
|
||||
|
|
@ -867,7 +870,8 @@
|
|||
:keymaps <span style="color:#e6db74">'evil-window-map</span>
|
||||
<span style="color:#e6db74">"x"</span> <span style="color:#e6db74">'kill-buffer-and-window</span>
|
||||
<span style="color:#e6db74">"d"</span> <span style="color:#e6db74">'kill-current-buffer</span>)
|
||||
</code></pre></div><p>And winner-mode to keep the history of window states.</p>
|
||||
</code></pre></div><p><code>winner-mode</code> to keep the history of window states.</p>
|
||||
<p>It doesn’t play too well with perspective.el, that is it has a single history list for all of the perspectives. But it is still quite usable.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(winner-mode <span style="color:#ae81ff">1</span>)
|
||||
|
||||
(general-define-key
|
||||
|
|
@ -900,7 +904,7 @@
|
|||
</code></pre></div><h4 id="folding">Folding</h4>
|
||||
<p>There are multiple ways to fold text in Emacs.</p>
|
||||
<p>The most versatile is the built-in <code>hs-minor-mode</code>, which seems to work out of the box for Lisps, C-like languages and Python. <code>outline-minor-mode</code> works for org-mode, LaTeX and the like. There is a 3rd-party solution <a href="https://github.com/elp-revive/origami.el">origami.el</a>, but I don’t use it at the moment.</p>
|
||||
<p>Evil does a pretty good job of uniting these two in the set of vim-like keybindings. I was using <code>SPC</code> in vim, but as now this isn’t an option, I set <code>TAB</code> to toggle folding.</p>
|
||||
<p>Evil does a pretty good job of abstracting the first two with a set of vim-like keybindings. I was using <code>SPC</code> in vim, but as now this isn’t an option, I set <code>TAB</code> to toggle folding.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(general-nmap :keymaps <span style="color:#f92672">'</span>(hs-minor-mode-map outline-minor-mode-map)
|
||||
<span style="color:#e6db74">"ze"</span> <span style="color:#e6db74">'hs-hide-level</span>
|
||||
<span style="color:#e6db74">"TAB"</span> <span style="color:#e6db74">'evil-toggle-fold</span>)
|
||||
|
|
@ -1044,7 +1048,7 @@
|
|||
:straight <span style="color:#66d9ef">t</span>)
|
||||
</code></pre></div><h4 id="aggressive-indent">Aggressive Indent</h4>
|
||||
<p>A package to keep the code intended.</p>
|
||||
<p>Doesn’t work too well with js ecosystem, because the LSP-based indentation is rather slow but nice for Lisps.</p>
|
||||
<p>Doesn’t work too well with many ecosystems because the LSP-based indentation is rather slow, but nice for Lisps.</p>
|
||||
<p>References:</p>
|
||||
<ul>
|
||||
<li><a href="https://github.com/Malabarba/aggressive-indent-mode">aggressive-indent-mode repo</a></li>
|
||||
|
|
@ -1781,6 +1785,7 @@
|
|||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(use-package emojify
|
||||
:straight <span style="color:#66d9ef">t</span>
|
||||
:if (and (display-graphic-p) (not (or my/lowpower my/is-termux)))
|
||||
:disabled
|
||||
:hook (after-init <span style="color:#f92672">.</span> global-emojify-mode))
|
||||
</code></pre></div><h4 id="ligatures">Ligatures</h4>
|
||||
<p>Ligature setup for the JetBrainsMono font.</p>
|
||||
|
|
@ -1895,7 +1900,7 @@
|
|||
<span style="color:#e6db74">"ad"</span> <span style="color:#a6e22e">#'</span>dired
|
||||
<span style="color:#e6db74">"aD"</span> <span style="color:#a6e22e">#'</span>my/dired-home)
|
||||
</code></pre></div><h3 id="addons">Addons</h3>
|
||||
<p>I used to use <a href="https://www.emacswiki.org/emacs/DiredPlus">dired+</a>, which provides a lot of extensions for dired functionality, but it also creates some new problems, so I opt out of it. Fortunately, the one feature I want from this package - adding more colors to dired buffers - is available as a separate package</p>
|
||||
<p>I used to use <a href="https://www.emacswiki.org/emacs/DiredPlus">dired+</a>, which provides a lot of extensions for dired functionality, but it also creates some new problems, so I opt out of it. Fortunately, the one feature I want from this package - adding more colors to dired buffers - is available as a separate package.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(use-package diredfl
|
||||
:straight <span style="color:#66d9ef">t</span>
|
||||
:after dired
|
||||
|
|
@ -2043,14 +2048,12 @@
|
|||
<span style="color:#f92672">'</span>(tramp-own-remote-path))))
|
||||
</code></pre></div><h3 id="bookmarks">Bookmarks</h3>
|
||||
<p>A simple bookmark list for Dired, mainly to use with TRAMP. I may look into a proper bookmarking system later.</p>
|
||||
<p>Bookmarks are listed in the <a href=".emacs.d/dired-bookmarks.el">dired-bookmarks.el</a> file, which looks like this:</p>
|
||||
<p>Bookmarks are listed in the <a href=".emacs.d/private.el">private.el</a> file, which has an expression like this:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">(setq my/dired-bookmarks
|
||||
'(("sudo" . "/sudo::/")))
|
||||
</code></pre></div><p>The file itself is encrypted with yadm.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(defun my/dired-bookmark-open ()
|
||||
(interactive)
|
||||
(unless (<span style="color:#a6e22e">boundp</span> <span style="color:#e6db74">'my/dired-bookmarks</span>)
|
||||
(<span style="color:#a6e22e">load</span> (<span style="color:#a6e22e">concat</span> user-emacs-directory <span style="color:#e6db74">"dired-bookmarks"</span>)))
|
||||
(let ((bookmarks
|
||||
(<span style="color:#a6e22e">mapcar</span>
|
||||
(lambda (el) (<span style="color:#a6e22e">cons</span> (<span style="color:#a6e22e">format</span> <span style="color:#e6db74">"%-30s %s"</span> (<span style="color:#a6e22e">car</span> el) (<span style="color:#a6e22e">cdr</span> el)) (<span style="color:#a6e22e">cdr</span> el)))
|
||||
|
|
@ -2247,6 +2250,8 @@
|
|||
:straight <span style="color:#66d9ef">t</span>
|
||||
:if (not my/remote-server)
|
||||
:defer <span style="color:#66d9ef">t</span>
|
||||
:init
|
||||
(setq org-directory (<span style="color:#a6e22e">expand-file-name</span> <span style="color:#e6db74">"~/Documents/org-mode"</span>))
|
||||
:config
|
||||
(setq org-startup-indented <span style="color:#66d9ef">t</span>)
|
||||
(setq org-return-follows-link <span style="color:#66d9ef">t</span>)
|
||||
|
|
@ -2493,6 +2498,16 @@
|
|||
#+end_src
|
||||
</code></pre></div><p>Example usage:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">:post out_wrap(name="fig:chart", caption="График", data=*this*)
|
||||
</code></pre></div><h4 id="managing-a-literate-programming-project">Managing a literate programming project</h4>
|
||||
<p>A few tricks to do literate programming.</p>
|
||||
<p>I prefer to put the org files to a separate directory (e.g. <code>org</code>). So I’ve come up with the following solution to avoid manually prefixing the <code>:tangle</code> arguments.</p>
|
||||
<p>Set up the following argument with the path to the project root:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">#+PROPERTY: PRJ-DIR ..
|
||||
</code></pre></div><p>A function to do the prefixing:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(defun my/org-prj-dir (path)
|
||||
(<span style="color:#a6e22e">expand-file-name</span> path (org-entry-get <span style="color:#66d9ef">nil</span> <span style="color:#e6db74">"PRJ-DIR"</span> <span style="color:#66d9ef">t</span>)))
|
||||
</code></pre></div><p>Example usage is as follows:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">:tangle (my/org-prj-dir "sqrt_data/api/__init__.py")
|
||||
</code></pre></div><h3 id="productivity-and-knowledge-management">Productivity & Knowledge management</h3>
|
||||
<p>My ongoing effort to get a productivity setup in Org.</p>
|
||||
<p>Some inspiration:</p>
|
||||
|
|
@ -2503,8 +2518,7 @@
|
|||
<li><a href="https://rgoswami.me/posts/org-note-workflow/">Rohit Goswami: An Orgmode Note Workflow</a></li>
|
||||
</ul>
|
||||
<p>Used files</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(setq org-directory (<span style="color:#a6e22e">expand-file-name</span> <span style="color:#e6db74">"~/Documents/org-mode"</span>))
|
||||
(setq org-agenda-files <span style="color:#f92672">'</span>(<span style="color:#e6db74">"inbox.org"</span> <span style="color:#e6db74">"projects.org"</span> <span style="color:#e6db74">"work.org"</span> <span style="color:#e6db74">"sem-11.org"</span> <span style="color:#e6db74">"life.org"</span>))
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(setq org-agenda-files <span style="color:#f92672">'</span>(<span style="color:#e6db74">"inbox.org"</span> <span style="color:#e6db74">"projects.org"</span> <span style="color:#e6db74">"work.org"</span> <span style="color:#e6db74">"sem-11.org"</span> <span style="color:#e6db74">"life.org"</span>))
|
||||
<span style="color:#75715e">;; (setq org-default-notes-file (concat org-directory "/notes.org"))</span>
|
||||
</code></pre></div><p>Hotkeys</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(my-leader-def
|
||||
|
|
@ -2540,7 +2554,45 @@
|
|||
<span style="color:#f92672">'</span>(<span style="color:#e6db74">"Effort_ALL"</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">"0 0:05 0:10 0:15 0:30 0:45 1:00 2:00 4:00"</span>))
|
||||
</code></pre></div><p>Log DONE time</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(setq org-log-done <span style="color:#e6db74">'time</span>)
|
||||
</code></pre></div><h4 id="trello-sync">Trello sync</h4>
|
||||
<p>Some of the projects I’m participating in are managed via Trello, so I use <a href="http://org-trello.github.io/">org-trello</a> to keep track of them. The package has a remarkably awkward keybindings setup, so my effort to call <code>my-leader-def</code> to set keybindings I like is no less awkward.</p>
|
||||
<p>Also, trello files are huge and have a lot of information and tasks which do not concern me, so I don’t add them to <code>org-agenda-files</code>.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(setq org-trello-files
|
||||
(thread-last (<span style="color:#a6e22e">concat</span> org-directory <span style="color:#e6db74">"/trello"</span>)
|
||||
(<span style="color:#a6e22e">directory-files</span>)
|
||||
(seq-filter
|
||||
(lambda (f) (string-match-p (rx <span style="color:#e6db74">".org"</span> eos) f)))
|
||||
(<span style="color:#a6e22e">mapcar</span>
|
||||
(lambda (f) (<span style="color:#a6e22e">concat</span> org-directory <span style="color:#e6db74">"/trello/"</span> f)))))
|
||||
</code></pre></div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(use-package org-trello
|
||||
:straight (:build (:not native-compile))
|
||||
:commands (org-trello-mode)
|
||||
:init
|
||||
(setq org-trello-current-prefix-keybinding <span style="color:#e6db74">"C-c o"</span>)
|
||||
(setq org-trello-add-tags <span style="color:#66d9ef">nil</span>)
|
||||
|
||||
(add-hook <span style="color:#e6db74">'org-mode-hook</span>
|
||||
(lambda ()
|
||||
(when (string-match-p (rx <span style="color:#e6db74">"trello"</span>) (or (<span style="color:#a6e22e">buffer-file-name</span>) <span style="color:#e6db74">""</span>))
|
||||
(org-trello-mode))))
|
||||
:config
|
||||
(<span style="color:#a6e22e">eval</span>
|
||||
<span style="color:#f92672">`</span>(my-leader-def
|
||||
:infix <span style="color:#e6db74">"o t"</span>
|
||||
:keymaps <span style="color:#f92672">'</span>(org-trello-mode-map)
|
||||
<span style="color:#e6db74">""</span> <span style="color:#f92672">'</span>(:which-key <span style="color:#e6db74">"trello"</span>)
|
||||
<span style="color:#f92672">,@</span>(mapcan
|
||||
(lambda (b) (<span style="color:#a6e22e">list</span> (<span style="color:#a6e22e">nth</span> <span style="color:#ae81ff">1</span> b) (macroexp-quote (<span style="color:#a6e22e">nth</span> <span style="color:#ae81ff">0</span> b))))
|
||||
org-trello-interactive-command-binding-couples))))
|
||||
</code></pre></div><h4 id="org-ql">org-ql</h4>
|
||||
<p><a href="https://github.com/alphapapa/org-ql">org-ql</a> is a package to query the org files. I’m using it in my review workflow and for custom agenda views.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(use-package org-ql
|
||||
:straight (:fetcher github
|
||||
:repo <span style="color:#e6db74">"alphapapa/org-ql"</span>
|
||||
:files (:defaults (:exclude <span style="color:#e6db74">"helm-org-ql.el"</span>))))
|
||||
</code></pre></div><h4 id="custom-agendas">Custom agendas</h4>
|
||||
<p>Some custom agendas to fit my workflow.</p>
|
||||
<p>Despite the fact that I don’t add <code>org-trello-files</code> to <code>org-agenda-files</code> I still want to see them in agenda, so I use <code>org-ql-block</code> from <code>org-ql</code>.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(defun my/org-scheduled-get-time ()
|
||||
(let ((scheduled (org-get-scheduled-time (<span style="color:#a6e22e">point</span>))))
|
||||
(if scheduled
|
||||
|
|
@ -2553,6 +2605,13 @@
|
|||
(todo <span style="color:#e6db74">"NEXT"</span>
|
||||
((org-agenda-prefix-format <span style="color:#e6db74">" %i %-12:c [%e] "</span>)
|
||||
(org-agenda-overriding-header <span style="color:#e6db74">"Next tasks"</span>)))
|
||||
(org-ql-block
|
||||
<span style="color:#f92672">`</span>(and
|
||||
(regexp <span style="color:#f92672">,</span>(rx <span style="color:#e6db74">":orgtrello_users:"</span> (<span style="color:#a6e22e">*</span> nonl) <span style="color:#e6db74">"sqrtminusone"</span>))
|
||||
(todo)
|
||||
(deadline))
|
||||
((org-agenda-files <span style="color:#e6db74">',org-trello-files</span>)
|
||||
(org-ql-block-header <span style="color:#e6db74">"Trello assigned"</span>)))
|
||||
(tags-todo <span style="color:#e6db74">"inbox"</span>
|
||||
((org-agenda-overriding-header <span style="color:#e6db74">"Inbox"</span>)
|
||||
(org-agenda-prefix-format <span style="color:#e6db74">" %i %-12:c"</span>)
|
||||
|
|
@ -2564,12 +2623,6 @@
|
|||
(<span style="color:#e6db74">"tp"</span> <span style="color:#e6db74">"Personal tasks"</span>
|
||||
((tags-todo <span style="color:#e6db74">"personal"</span>
|
||||
((org-agenda-prefix-format <span style="color:#e6db74">" %i %-12:c [%e] "</span>)))))))
|
||||
</code></pre></div><h4 id="org-ql">org-ql</h4>
|
||||
<p><a href="https://github.com/alphapapa/org-ql">org-ql</a> is a package to query the org files. I’m using it in my review workflow, perhaps later I’ll find another usecases.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(use-package org-ql
|
||||
:straight (:fetcher github
|
||||
:repo <span style="color:#e6db74">"alphapapa/org-ql"</span>
|
||||
:files (:defaults (:exclude <span style="color:#e6db74">"helm-org-ql.el"</span>))))
|
||||
</code></pre></div><h4 id="review-workflow">Review workflow</h4>
|
||||
<p>My take on a review workflow. As a baseline, I want to have a template that lists the important changes since the last review and other basic information. I’m doing reviews regularly, but the time intervals still may vary, hence this flexibility.</p>
|
||||
<h5 id="data-from-git-and-org-roam">Data from git & org-roam</h5>
|
||||
|
|
@ -2933,6 +2986,21 @@ MimeType=x-scheme-handler/org-protocol
|
|||
:disabled
|
||||
:config
|
||||
(org-roam-bibtex-mode))
|
||||
</code></pre></div><h4 id="managing-tables">Managing tables</h4>
|
||||
<p>I use Org to manage some small tables which I want to process further. So here is a function that saves each table to a CSV file.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(defun my/export-org-tables-to-csv ()
|
||||
(interactive)
|
||||
(org-table-map-tables
|
||||
(lambda ()
|
||||
(when-let
|
||||
(name
|
||||
(<span style="color:#a6e22e">plist-get</span> (cadr (org-element-at-point)) :name))
|
||||
(org-table-export
|
||||
(<span style="color:#a6e22e">concat</span>
|
||||
(<span style="color:#a6e22e">file-name-directory</span>
|
||||
(<span style="color:#a6e22e">buffer-file-name</span>))
|
||||
name <span style="color:#e6db74">".csv"</span>)
|
||||
<span style="color:#e6db74">"orgtbl-to-csv"</span>)))))
|
||||
</code></pre></div><h3 id="ui">UI</h3>
|
||||
<h4 id="off--instant-equations-preview"><span class="org-todo done OFF">OFF</span> (OFF) Instant equations preview</h4>
|
||||
<p>Instant math previews for org mode.</p>
|
||||
|
|
@ -2989,9 +3057,23 @@ MimeType=x-scheme-handler/org-protocol
|
|||
(<span style="color:#a6e22e">plist-put</span> (<span style="color:#a6e22e">cdr</span> item) :latex-header my/latex-preview-header)))
|
||||
org-preview-latex-process-alist))
|
||||
</code></pre></div><h4 id="better-headers">Better headers</h4>
|
||||
<p><a href="https://github.com/integral-dw/org-superstar-mode">org-superstar-mode</a> is package that makes Org heading lines look a bit prettier.</p>
|
||||
<p>Disabled it for now because of overlapping functionality with org-bars.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(use-package org-superstar
|
||||
:straight <span style="color:#66d9ef">t</span>
|
||||
:disabled
|
||||
:hook (org-mode <span style="color:#f92672">.</span> org-superstar-mode))
|
||||
</code></pre></div><p><a href="https://github.com/tonyaldon/org-bars">org-bars</a> highlights Org indentation with bars.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(use-package org-bars
|
||||
:straight (:repo <span style="color:#e6db74">"tonyaldon/org-bars"</span> :host github)
|
||||
:if (display-graphic-p)
|
||||
:hook (org-mode <span style="color:#f92672">.</span> org-bars-mode))
|
||||
</code></pre></div><p>Remove the elipsis at the end of folded headlines. The elipsis seems unnecesary with org-bars.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(defun my/org-no-ellipsis-in-headlines ()
|
||||
(remove-from-invisibility-spec <span style="color:#f92672">'</span>(outline <span style="color:#f92672">.</span> <span style="color:#66d9ef">t</span>))
|
||||
(add-to-invisibility-spec <span style="color:#e6db74">'outline</span>))
|
||||
|
||||
(add-hook <span style="color:#e6db74">'org-mode-hook</span> <span style="color:#a6e22e">#'</span>my/org-no-ellipsis-in-headlines)
|
||||
</code></pre></div><h4 id="org-agenda-icons">Org Agenda Icons</h4>
|
||||
<p>Categories are broad labels to group agenda items.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(if (not my/lowpower)
|
||||
|
|
@ -3106,6 +3188,23 @@ MimeType=x-scheme-handler/org-protocol
|
|||
|
||||
(general-nmap :keymaps <span style="color:#e6db74">'org-mode-map</span>
|
||||
<span style="color:#e6db74">"C-x C-l"</span> <span style="color:#e6db74">'my/org-link-copy</span>)
|
||||
</code></pre></div><h4 id="open-a-file-from-org-directory">Open a file from <code>org-directory</code></h4>
|
||||
<p>A function to open a file from <code>org-directory</code>, excluding a few directories like <code>roam</code> and <code>journal</code>.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(defun my/org-file-open ()
|
||||
(interactive)
|
||||
(let* ((default-directory org-directory)
|
||||
(project-files
|
||||
(seq-filter
|
||||
(lambda (f)
|
||||
(and
|
||||
(string-match-p (rx (<span style="color:#a6e22e">*</span> nonl) <span style="color:#e6db74">".org"</span> eos) f)
|
||||
(not (string-match-p (rx (| <span style="color:#e6db74">"journal"</span> <span style="color:#e6db74">"roam"</span> <span style="color:#e6db74">"review"</span> <span style="color:#e6db74">"archive"</span>)) f))))
|
||||
(projectile-current-project-files))))
|
||||
(find-file
|
||||
(<span style="color:#a6e22e">concat</span> org-directory <span style="color:#e6db74">"/"</span> (<span style="color:#a6e22e">completing-read</span> <span style="color:#e6db74">"Org file: "</span> project-files)))))
|
||||
|
||||
(my-leader-def
|
||||
<span style="color:#e6db74">"o o"</span> <span style="color:#e6db74">'my/org-file-open</span>)
|
||||
</code></pre></div><h3 id="presentations">Presentations</h3>
|
||||
<p>Doing presentations with <a href="https://github.com/rlister/org-present">org-present</a>.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(use-package hide-mode-line
|
||||
|
|
@ -3289,23 +3388,7 @@ MimeType=x-scheme-handler/org-protocol
|
|||
</code></pre></div><p>To launch from CLI, run:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">emacs -Q --batch -l run-tangle.el
|
||||
</code></pre></div><p>I have added this line to yadm’s <code>post_alt</code> hook, so tangle is run after <code>yadm alt</code></p>
|
||||
<h2 id="off--eaf"><span class="org-todo done OFF">OFF</span> (OFF) EAF</h2>
|
||||
<p><a href="https://github.com/manateelazycat/emacs-application-framework">Emacs Application Framework</a> provides a way to integrate PyQt applications with Emacs.</p>
|
||||
<p>I’ve made it work, but don’t find any uses cases for me at the moment</p>
|
||||
<h3 id="installation">Installation</h3>
|
||||
<p>Requirements: Node >= 14</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">pip install qtconsole markdown qrcode<span style="color:#f92672">[</span>pil<span style="color:#f92672">]</span> PyQt5 PyQtWebEngine
|
||||
</code></pre></div><h3 id="config">Config</h3>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(use-package eaf
|
||||
:straight (:host github :repo <span style="color:#e6db74">"manateelazycat/emacs-application-framework"</span> :files (<span style="color:#e6db74">"*"</span>))
|
||||
:init
|
||||
(use-package epc :defer <span style="color:#66d9ef">t</span> :straight <span style="color:#66d9ef">t</span>)
|
||||
(use-package ctable :defer <span style="color:#66d9ef">t</span> :straight <span style="color:#66d9ef">t</span>)
|
||||
(use-package deferred :defer <span style="color:#66d9ef">t</span> :straight <span style="color:#66d9ef">t</span>)
|
||||
:config
|
||||
(require <span style="color:#e6db74">'eaf-evil</span>)
|
||||
(setq eaf-evil-leader-key <span style="color:#e6db74">"SPC"</span>))
|
||||
</code></pre></div><h2 id="programming">Programming</h2>
|
||||
<h2 id="programming">Programming</h2>
|
||||
<h3 id="general-setup">General setup</h3>
|
||||
<h4 id="lsp">LSP</h4>
|
||||
<p>LSP-mode provides an IDE-like experience for Emacs - real-time diagnostic, code actions, intelligent autocompletion, etc.</p>
|
||||
|
|
@ -4455,7 +4538,7 @@ MimeType=x-scheme-handler/org-protocol
|
|||
|
||||
(reformatter-define sqlformat
|
||||
:program (executable-find <span style="color:#e6db74">"sql-formatter"</span>)
|
||||
:args <span style="color:#f92672">`</span>(<span style="color:#e6db74">"-l"</span> <span style="color:#f92672">,</span>my/sqlformatter-dialect))
|
||||
:args <span style="color:#f92672">`</span>(<span style="color:#e6db74">"-l"</span> <span style="color:#f92672">,</span>my/sqlformatter-dialect, <span style="color:#e6db74">"-u"</span>))
|
||||
|
||||
(my-leader-def
|
||||
:keymaps <span style="color:#f92672">'</span>(sql-mode-map)
|
||||
|
|
@ -4492,6 +4575,9 @@ MimeType=x-scheme-handler/org-protocol
|
|||
:straight <span style="color:#66d9ef">t</span>
|
||||
:config
|
||||
(add-hook <span style="color:#e6db74">'dockerfile-mode</span> <span style="color:#e6db74">'smartparens-mode</span>))
|
||||
</code></pre></div><h3 id="crontab">crontab</h3>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(use-package crontab-mode
|
||||
:straight <span style="color:#66d9ef">t</span>)
|
||||
</code></pre></div><h2 id="apps-and-misc">Apps & Misc</h2>
|
||||
<h3 id="managing-dotfiles">Managing dotfiles</h3>
|
||||
<p>A bunch of functions for managing dotfiles with yadm.</p>
|
||||
|
|
@ -4586,7 +4672,7 @@ MimeType=x-scheme-handler/org-protocol
|
|||
:straight <span style="color:#66d9ef">t</span>
|
||||
:after (elfeed)
|
||||
:config
|
||||
(setq rmh-elfeed-org-files <span style="color:#f92672">'</span>(<span style="color:#e6db74">"~/.emacs.d/elfeed.org"</span>))
|
||||
(setq rmh-elfeed-org-files <span style="color:#f92672">'</span>(<span style="color:#e6db74">"~/.emacs.d/private.org"</span>))
|
||||
(elfeed-org))
|
||||
</code></pre></div><h5 id="some-additions">Some additions</h5>
|
||||
<p>Filter elfeed search buffer by the feed under the cursor.</p>
|
||||
|
|
@ -4610,6 +4696,67 @@ MimeType=x-scheme-handler/org-protocol
|
|||
(let ((link (elfeed-entry-link elfeed-show-entry)))
|
||||
(when link
|
||||
(eww link))))
|
||||
</code></pre></div><h5 id="custom-faces">Custom faces</h5>
|
||||
<p>Setting up custom faces for certain tags to make the feed look a bit nicer.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(defface elfeed-videos-entry
|
||||
<span style="color:#f92672">`</span>((<span style="color:#66d9ef">t</span> :foreground <span style="color:#f92672">,</span>(doom-color <span style="color:#e6db74">'red</span>)))
|
||||
<span style="color:#e6db74">"Face for the elfeed entries with tag \"videos\""</span>)
|
||||
|
||||
(defface elfeed-twitter-entry
|
||||
<span style="color:#f92672">`</span>((<span style="color:#66d9ef">t</span> :foreground <span style="color:#f92672">,</span>(doom-color <span style="color:#e6db74">'blue</span>)))
|
||||
<span style="color:#e6db74">"Face for the elfeed entries with tah \"twitter\""</span>)
|
||||
|
||||
(defface elfeed-emacs-entry
|
||||
<span style="color:#f92672">`</span>((<span style="color:#66d9ef">t</span> :foreground <span style="color:#f92672">,</span>(doom-color <span style="color:#e6db74">'magenta</span>)))
|
||||
<span style="color:#e6db74">"Face for the elfeed entries with tah \"emacs\""</span>)
|
||||
|
||||
(defface elfeed-music-entry
|
||||
<span style="color:#f92672">`</span>((<span style="color:#66d9ef">t</span> :foreground <span style="color:#f92672">,</span>(doom-color <span style="color:#e6db74">'green</span>)))
|
||||
<span style="color:#e6db74">"Face for the elfeed entries with tah \"music\""</span>)
|
||||
|
||||
(defface elfeed-podcasts-entry
|
||||
<span style="color:#f92672">`</span>((<span style="color:#66d9ef">t</span> :foreground <span style="color:#f92672">,</span>(doom-color <span style="color:#e6db74">'yellow</span>)))
|
||||
<span style="color:#e6db74">"Face for the elfeed entries with tag \"podcasts\""</span>)
|
||||
|
||||
(defface elfeed-blogs-entry
|
||||
<span style="color:#f92672">`</span>((<span style="color:#66d9ef">t</span> :foreground <span style="color:#f92672">,</span>(doom-color <span style="color:#e6db74">'orange</span>)))
|
||||
<span style="color:#e6db74">"Face for the elfeed entries with tag \"blogs\""</span>)
|
||||
|
||||
(with-eval-after-load <span style="color:#e6db74">'elfeed</span>
|
||||
(setq elfeed-search-face-alist
|
||||
<span style="color:#f92672">'</span>((twitter elfeed-twitter-entry)
|
||||
(podcasts elfeed-podcasts-entry)
|
||||
(music elfeed-music-entry)
|
||||
(videos elfeed-videos-entry)
|
||||
(emacs elfeed-emacs-entry)
|
||||
(blogs elfeed-blogs-entry)
|
||||
(unread elfeed-search-unread-title-face))))
|
||||
</code></pre></div><h5 id="elfeed-score">elfeed-score</h5>
|
||||
<p><a href="https://github.com/sp1ff/elfeed-score">elfeed-score</a> is a package that implements scoring for the elfeed entries. Entries are scored by a set of rules for tags/title/content/etc and sorted by that score.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(defun my/elfeed-toggle-score-sort ()
|
||||
(interactive)
|
||||
(setq elfeed-search-sort-function
|
||||
(if elfeed-search-sort-function
|
||||
<span style="color:#66d9ef">nil</span>
|
||||
<span style="color:#a6e22e">#'</span>elfeed-score-sort))
|
||||
(<span style="color:#a6e22e">message</span> <span style="color:#e6db74">"Sorting by score: %S"</span> (if elfeed-search-sort-function <span style="color:#e6db74">"ON"</span> <span style="color:#e6db74">"OFF"</span>))
|
||||
(elfeed-search-update--force))
|
||||
|
||||
(use-package elfeed-score
|
||||
:straight <span style="color:#66d9ef">t</span>
|
||||
:after (elfeed)
|
||||
:init
|
||||
(setq elfeed-score-serde-score-file <span style="color:#e6db74">"~/.emacs.d/elfeed.score"</span>)
|
||||
:config
|
||||
(elfeed-score-enable)
|
||||
(setq elfeed-search-print-entry-function <span style="color:#a6e22e">#'</span>elfeed-score-print-entry)
|
||||
(general-define-key
|
||||
:states <span style="color:#f92672">'</span>(normal)
|
||||
:keymaps <span style="color:#f92672">'</span>(elfeed-search-mode-map)
|
||||
<span style="color:#e6db74">"="</span> elfeed-score-map)
|
||||
(general-define-key
|
||||
:keymaps <span style="color:#f92672">'</span>(elfeed-score-map)
|
||||
<span style="color:#e6db74">"="</span> <span style="color:#a6e22e">#'</span>my/elfeed-toggle-score-sort))
|
||||
</code></pre></div><h5 id="youtube-and-emms">YouTube & EMMS</h5>
|
||||
<p>Previously this block was opening MPV with <code>start-process</code>, but now I’ve managed to hook up MPV with EMMS. So there is the EMMS+elfeed “integration”.</p>
|
||||
<p>The following function converts URLs from Invidious and the like to YouTube.</p>
|
||||
|
|
@ -4719,20 +4866,23 @@ MimeType=x-scheme-handler/org-protocol
|
|||
<td>mpv</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>youtube-dl</td>
|
||||
<td>yt-dlp</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><a href="https://mpv.io/">mpv</a> is a decent media player, which has found a place in this configuration because it integrates with youtube-dl.</p>
|
||||
<p><a href="https://mpv.io/">mpv</a> is a decent media player, which has found a place in this configuration because it integrates with <del>youtube-dl</del> yt-dlp.</p>
|
||||
<p>It looks like YouTube has started to throttle youtube-dl, and yt-dlp has a workaround for that particular case. Just don’t forget to add the following like to the mpv config:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-ini" data-lang="ini"><span style="color:#a6e22e">script-opts</span><span style="color:#f92672">=</span><span style="color:#e6db74">ytdl_hook-ytdl_path=yt-dlp</span>
|
||||
</code></pre></div><p>It seems a bit strange to keep the MPV config in this file, but I don’t use the program outside Emacs.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(add-to-list <span style="color:#e6db74">'emms-player-list</span> <span style="color:#e6db74">'emms-player-mpv</span> <span style="color:#66d9ef">t</span>)
|
||||
</code></pre></div><p>Also a custom regex. My demands for MPV include running <code>youtube-dl</code>, so there is a regex that matches youtube.com or some of the video formats.</p>
|
||||
</code></pre></div><p>Also a custom regex. My demands for MPV include running <code>yt-dlp</code>, so there is a regex that matches youtube.com or some of the video formats.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(emms-player-set emms-player-mpv
|
||||
<span style="color:#e6db74">'regex</span>
|
||||
(rx (or (<span style="color:#f92672">:</span> <span style="color:#e6db74">"https://"</span> (<span style="color:#a6e22e">*</span> nonl) <span style="color:#e6db74">"youtube.com"</span> (<span style="color:#a6e22e">*</span> nonl))
|
||||
(<span style="color:#a6e22e">+</span> (<span style="color:#e6db74">? </span>(or <span style="color:#e6db74">"https://"</span> <span style="color:#e6db74">"http://"</span>))
|
||||
(<span style="color:#a6e22e">*</span> nonl)
|
||||
(regexp (<span style="color:#a6e22e">eval</span> (emms-player-simple-regexp
|
||||
<span style="color:#e6db74">"mp4"</span> <span style="color:#e6db74">"mov"</span> <span style="color:#e6db74">"wmv"</span> <span style="color:#e6db74">"webm"</span> <span style="color:#e6db74">"flv"</span> <span style="color:#e6db74">"avi"</span> <span style="color:#e6db74">"mkv"</span>)))))))
|
||||
<span style="color:#e6db74">"mp4"</span> <span style="color:#e6db74">"mov"</span> <span style="color:#e6db74">"wmv"</span> <span style="color:#e6db74">"webm"</span> <span style="color:#e6db74">"flv"</span> <span style="color:#e6db74">"avi"</span> <span style="color:#e6db74">"mkv"</span>)))))))
|
||||
</code></pre></div><p>By default MPV plays the video in the best possible quality, which may be pretty high, even too high with limited bandwidth. So here is the logic to choose the quality.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(setq my/youtube-dl-quality-list
|
||||
<span style="color:#f92672">'</span>(<span style="color:#e6db74">"bestvideo[height<=720]+bestaudio/best[height<=720]"</span>
|
||||
|
|
@ -5173,6 +5323,22 @@ tag2: value2'
|
|||
|
||||
(setq calendar-latitude <span style="color:#ae81ff">59.9375</span>)
|
||||
(setq calendar-longitude <span style="color:#ae81ff">30.308611</span>)
|
||||
</code></pre></div><h3 id="off--eaf"><span class="org-todo done OFF">OFF</span> (OFF) EAF</h3>
|
||||
<p><a href="https://github.com/manateelazycat/emacs-application-framework">Emacs Application Framework</a> provides a way to integrate PyQt applications with Emacs.</p>
|
||||
<p>I’ve made it work, but don’t find any uses cases for me at the moment</p>
|
||||
<h4 id="installation">Installation</h4>
|
||||
<p>Requirements: Node >= 14</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">pip install qtconsole markdown qrcode<span style="color:#f92672">[</span>pil<span style="color:#f92672">]</span> PyQt5 PyQtWebEngine
|
||||
</code></pre></div><h4 id="config">Config</h4>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(use-package eaf
|
||||
:straight (:host github :repo <span style="color:#e6db74">"manateelazycat/emacs-application-framework"</span> :files (<span style="color:#e6db74">"*"</span>))
|
||||
:init
|
||||
(use-package epc :defer <span style="color:#66d9ef">t</span> :straight <span style="color:#66d9ef">t</span>)
|
||||
(use-package ctable :defer <span style="color:#66d9ef">t</span> :straight <span style="color:#66d9ef">t</span>)
|
||||
(use-package deferred :defer <span style="color:#66d9ef">t</span> :straight <span style="color:#66d9ef">t</span>)
|
||||
:config
|
||||
(require <span style="color:#e6db74">'eaf-evil</span>)
|
||||
(setq eaf-evil-leader-key <span style="color:#e6db74">"SPC"</span>))
|
||||
</code></pre></div><h3 id="fun">Fun</h3>
|
||||
<h4 id="discord-integration">Discord integration</h4>
|
||||
<p>Integration with Discord. Shows which file is being edited in Emacs.</p>
|
||||
|
|
@ -5209,6 +5375,13 @@ tag2: value2'
|
|||
:action (lambda (elem)
|
||||
(setq zone-programs (<span style="color:#a6e22e">vector</span> (<span style="color:#a6e22e">cdr</span> elem)))
|
||||
(zone))))
|
||||
</code></pre></div><p>Also, a function to copy a URL to the video under cursor.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-emacs-lisp" data-lang="emacs-lisp">(defun my/ytel-kill-url ()
|
||||
(interactive)
|
||||
(kill-new
|
||||
(<span style="color:#a6e22e">concat</span>
|
||||
<span style="color:#e6db74">"https://www.youtube.com/watch?v="</span>
|
||||
(ytel-video-id (ytel-get-current-video)))))
|
||||
</code></pre></div><h2 id="guix-settings">Guix settings</h2>
|
||||
<table>
|
||||
<thead>
|
||||
|
|
|
|||
|
|
@ -13,7 +13,8 @@
|
|||
|
||||
<guid>https://sqrtminusone.xyz/configs/console/</guid>
|
||||
<description>#+TOC headlines 6
|
||||
.profile Environment # export EDITOR=/usr/bin/vim # export BROWSER=/usr/bin/firefox export QT_QPA_PLATFORMTHEME=&#34;qt5ct&#34; export QT_AUTO_SCREEN_SCALE_FACTOR=0 # export GTK2_RC_FILES=&#34;$HOME/.gtkrc-2.0&#34; My paths My script folders
|
||||
.profile Environment export QT_QPA_PLATFORMTHEME=&#34;qt5ct&#34; export QT_AUTO_SCREEN_SCALE_FACTOR=0 Set ripgrep config path
|
||||
export RIPGREP_CONFIG_PATH=$HOME/.config/ripgrep/ripgreprc My paths My script folders
|
||||
if [ -d &#34;$HOME/bin&#34; ] ; then export PATH=&#34;$HOME/bin:$PATH&#34; export PATH=&#34;$HOME/bin/scripts:$PATH&#34; fi Guix settings Enable extra profiles
|
||||
if [ -z &#34;$IS_ANDROID&#34; ]; then GUIX_EXTRA_PROFILES=$HOME/.guix-extra-profiles for i in $GUIX_EXTRA_PROFILES/*; do profile=$i/$(basename &#34;$i&#34;) if [ -f &#34;$profile&#34;/etc/profile ]; then GUIX_PROFILE=&#34;$profile&#34; . &#34;$GUIX_PROFILE&#34;/etc/profile fi export XDG_DATA_DIRS=&#34;$XDG_DATA_DIRS:$profile/share&#34; unset profile done fi Set Jupyter config PATH.</description>
|
||||
</item>
|
||||
|
|
@ -26,7 +27,7 @@ if [ -z &#34;$IS_ANDROID&#34; ]; then GUIX_EXTRA_PROFILES=$HOME/.guix-ex
|
|||
<guid>https://sqrtminusone.xyz/configs/desktop/</guid>
|
||||
<description>My general desktop environment configuration.
|
||||
Parts prefixed with (OFF) are not used, but kept for historic purposes. For some reason GitHub&rsquo;s org renderer ignores TODO status, hence such a prefix. Round brackets instead of square ones to prevent GitHub&rsquo;s org renderer from screwing up.
|
||||
Table of Contents Global customization Colors Xresources Colors in Xresources Fonts Themes Device-specific settings i3wm General settings Managing windows Workspaces Rules Scratchpad Launch script i3 config Gaps &amp; borders Keybindings Move &amp; resize windows OFF (OFF) Intergration with dmenu Integration with rofi Launching apps &amp; misc keybindings Apps Media controls &amp; brightness Screenshots Colors OFF (OFF) i3blocks Keyboard Layout Autostart Polybar Launching General settings Colors Bar config Modules ipstack-vpn weather aw-afk sun SEP TSEP i3 xkeyboard mpd pulseaudio cpu ram-memory swap-memory network date battery Rofi Theme Scripts Buku bookmarks Man pages pass Flameshot dunst keynav Config Using with picom Picom Shadows Fading Opacity General settings Zathura Various software Browsers Office &amp; Multimedia LaTeX Dev Manifests Flatpak Nix Services Music GNU Mcron ActivityWatch PulseEffects xsettingsd Discord rich presence Polkit Authentication agent Xmodmap VPN Davmail Shepherd config Sync Guix settings Global customization Colors Most of the colors are from the Palenight theme.</description>
|
||||
Table of Contents Global customization Colors Xresources Colors in Xresources Fonts Themes Device-specific settings i3wm General settings Managing windows Workspaces Rules Scratchpad Launch script i3 config Gaps &amp; borders Keybindings Move &amp; resize windows OFF (OFF) Intergration with dmenu Integration with rofi Launching apps &amp; misc keybindings Apps Media controls &amp; brightness Screenshots Colors OFF (OFF) i3blocks Keyboard Layout Autostart Polybar Launching General settings Colors Bar config Modules ipstack-vpn weather aw-afk sun SEP TSEP i3 xkeyboard mpd pulseaudio cpu ram-memory swap-memory network date battery Rofi Theme Scripts Buku bookmarks Man pages pass emojis Flameshot dunst keynav Config Using with picom Picom Shadows Fading Opacity General settings Zathura Various software Browsers Office &amp; Multimedia LaTeX Dev Manifests Flatpak Nix Services Music GNU Mcron ActivityWatch PulseEffects xsettingsd Discord rich presence Polkit Authentication agent Xmodmap VPN Davmail Shepherd config Sync Guix settings Global customization Colors Most of the colors are from the Palenight theme.</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
|
|
@ -38,7 +39,7 @@ Parts prefixed with (OFF) are not used, but kept for historic purposes. For some
|
|||
<description>One day we won&rsquo;t hate one another, no young boy will march to war and I will clean up my Emacs config. But that day isn&rsquo;t today.
|
||||
My Emacs configuration.
|
||||
As with other files in the repo, parts prefixed with (OFF) are not used but kept for historic purposes.
|
||||
Table of Contents Primary setup Measure startup speed straight.el use-package config variants &amp; environment Performance Garbage collection Run garbage collection when Emacs is unfocused Native compilation Anaconda Custom file location Private config No littering Prevent Emacs from closing Global editing configuration General keybindings stuff general.</description>
|
||||
Table of Contents Primary setup Measure startup speed straight.el use-package Config variants &amp; environment Performance Garbage collection Run garbage collection when Emacs is unfocused Native compilation Anaconda Custom file location Private config No littering Prevent Emacs from closing Global editing configuration General keybindings stuff general.</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
|
|
|
|||
|
|
@ -363,10 +363,9 @@
|
|||
Mail/thexcloud/.credentials.gmailieer.json
|
||||
Mail/progin6304/.credentials.gmailieer.json
|
||||
.emacs.d/dired-bookmarks.el
|
||||
.emacs.d/elfeed.org
|
||||
.emacs.d/private.org
|
||||
.emacs.d/prodigy-config.el
|
||||
.emacs.d/private.el
|
||||
.emacs.d/.trello/sqrtminusone.el
|
||||
</code></pre></div>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue