diff --git a/404.html b/404.html index a62ddc7..246a19f 100644 --- a/404.html +++ b/404.html @@ -18,13 +18,6 @@ - - - - - - - diff --git a/_cv/index.html b/_cv/index.html index ae610ff..0b2a37b 100644 --- a/_cv/index.html +++ b/_cv/index.html @@ -18,13 +18,6 @@ - - - - - - - @@ -98,82 +91,82 @@
Pursuing a degree of Candidate of Engineering Sciences (2022 - current)
| Specialty | -2.3.5 Mathematical and Software Support For Computer Systems, Complexes and Computer Networks | -
|---|---|
| Supervisor | -Ivan I. Kholod | -
| Department | -Department of Information Systems | -
| Faculty | -Faculty of Computer Science and Technology | -
| Dissertation title | -Examination of Application of Federated Learning For Text Analysis in Recommender Systems | -
| Specialty | +2.3.5 Mathematical and Software Support For Computer Systems, Complexes and Computer Networks | +
| Supervisor | +Ivan I. Kholod | +
| Department | +Department of Information Systems | +
| Faculty | +Faculty of Computer Science and Technology | +
| Dissertation title | +Examination of Application of Federated Learning For Text Analysis in Recommender Systems | +
Master’s Degree (2020 - 2022)
| Specialty | -09.04.04 Software Engineering | -
|---|---|
| Department | -Department of Software Engineering and Computer Applications | -
| Faculty | -Faculty of Computer Science and Technology | -
| Thesis title | -Application of Text Analysis Methods to Recommend Educational Trajectories | -
| Specialty | +09.04.04 Software Engineering | +
| Department | +Department of Software Engineering and Computer Applications | +
| Faculty | +Faculty of Computer Science and Technology | +
| Thesis title | +Application of Text Analysis Methods to Recommend Educational Trajectories | +
Bachelor’s Degree (2016 - 2020)
| Specialty | -09.03.04 Software Engineering | -
|---|---|
| Department | -Department of Software Engineering and Computer Applications | -
| Faculty | -Faculty of Computer Science and Technology | -
| Thesis title | -Development of the Software of Generation of Data Accounting System Mockups | -
| Specialty | +09.03.04 Software Engineering | +
| Department | +Department of Software Engineering and Computer Applications | +
| Faculty | +Faculty of Computer Science and Technology | +
| Thesis title | +Development of the Software of Generation of Data Accounting System Mockups | +
| Guix dependency | -
|---|
| xrdb | -
| Guix dependency | +
| xrdb | +
if [ -z "$IS_ANDROID" ]; then
xrdb ~/.Xresources
@@ -282,16 +275,16 @@
source /etc/bashrc
fi
| Guix dependency | -
|---|
| xhost | -
| Guix dependency | +
| xhost | +
Allow other users to access X server. Necessary for stuff like aw-watcher-window.
xhost +local:root > /dev/null 2>&1
@@ -435,18 +428,18 @@
}
| Guix dependency | -Description | -
|---|---|
| fish | -An alternative non POSIX-compliant shell | -
| Guix dependency | +Description | +
| fish | +An alternative non POSIX-compliant shell | +
Fish shell is a non-POSIX-compliant shell, which offers some fancy UI & UX features.
Launch starship
@@ -474,16 +467,16 @@ alias ll="ls -h" end| Guix dependency | -
|---|
| dt-colorscripts | -
| Guix dependency | +
| dt-colorscripts | +
Launch a random DT’s colorscript unless ran inside tmux or Emacs.
if ! test -n "$TMUX"; and ! test -n "$IS_EMACS"; and type -q colorscript
@@ -544,32 +537,32 @@
end
| Guix dependency | -
|---|
| nushell-bin | -
| Guix dependency | +
| nushell-bin | +
A structured shell. I don’t use it as of now, but perhaps one day.
| Guix dependency | -Description | -
|---|---|
| starship-bin | -my prompt of choice | -
| Guix dependency | +Description | +
| starship-bin | +my prompt of choice | +
Starship is a nice cross-shell prompt, written in Rust.
References:
@@ -654,19 +647,19 @@ symbol = " "| Guix dependency | -
|---|
| tmux | -
| python-tmuxp | -
| Guix dependency | +
| tmux | +
| python-tmuxp | +
tmux is my terminal multiplexer of choice.
It provides pretty sane defaults, so the config is not too large. I rebind the prefix to C-a though.
bind r source-file ~/.tmux.conf
| Guix dependency | -
|---|
| xclip | -
| Guix dependency | +
| xclip | +
Make tmux copy to clipboard as well
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -selection clipboard -i"
@@ -741,16 +734,16 @@
source ~/.tmux.line.conf
Alacritty
-
-
-Guix dependency
-
-
-
-
-alacritty
-
-
+
+
+ Guix dependency
+
+
+
+
+ alacritty
+
+
Alacritty is a GPU-accelerated terminal emulator. I haven’t found it to be an inch faster than st, but yml configuration is way more convenient than patches.
References:
@@ -827,18 +820,18 @@
- { key: NumpadSubtract, mods: Control, action: DecreaseFontSize }
| Guix dependency | -Description | -
|---|---|
| bottom-bin | -resource monitor | -
| Guix dependency | +Description | +
| bottom-bin | +resource monitor | +
bottom is a TUI system monitor.
See the default config for the avaliable options.
@@ -859,106 +852,106 @@ keymap_mode = "vim-insert"| Guix dependency | -Description | -
|---|---|
| ncurses | -Provides stuff like clear |
-
| exa | -ls replacement, written in Rust |
-
| bat | -cat clone with syntax highlighting |
-
| htop | -Interactive process viewer | -
| nethogs | -A tool to group processed by used bandwidth | -
| osync | -rsync wrapper | -
| neofetch | -Fetch system info | -
| fzf | -fuzzy finder | -
| p7zip | -archiver | -
| password-store | -CLI password manager | -
| zip | -- |
| unzip | -- |
| jmtpfs | -A tool to mount MTP devices (e.g. Android) | -
| tokei | -Count lines of code | -
| sshfs | -Mount stuff over SSH | -
| lftp | -File transfer | -
| git-lfs | -- |
| glibc-locales | -- |
| direnv | -- |
| jless-bin | -JSON viewer | -
| megacmd | -mega.nz client | -
| ncdu | -disk usage analyzer | -
| openssl | -- |
| Guix dependency | +Description | +
| ncurses | +Provides stuff like clear |
+
| exa | +ls replacement, written in Rust |
+
| bat | +cat clone with syntax highlighting |
+
| htop | +Interactive process viewer | +
| nethogs | +A tool to group processed by used bandwidth | +
| osync | +rsync wrapper | +
| neofetch | +Fetch system info | +
| fzf | +fuzzy finder | +
| p7zip | +archiver | +
| password-store | +CLI password manager | +
| zip | ++ |
| unzip | ++ |
| jmtpfs | +A tool to mount MTP devices (e.g. Android) | +
| tokei | +Count lines of code | +
| sshfs | +Mount stuff over SSH | +
| lftp | +File transfer | +
| git-lfs | ++ |
| glibc-locales | ++ |
| direnv | ++ |
| jless-bin | +JSON viewer | +
| megacmd | +mega.nz client | +
| ncdu | +disk usage analyzer | +
| openssl | ++ |
Occasionally I can’t exclude certain files from ripgrep via the VCS settings, so here is a simple config to ignore certain files globally.
@@ -986,20 +979,20 @@autocommit <repository> [-F]
Environment:
| Variable | -Description | -Default value | -
|---|---|---|
TIMEOUT_MIN |
-Default timeout | -60 | -
| Variable | +Description | +Default value | +
TIMEOUT_MIN |
+ Default timeout | +60 | +
Here’s roughly what the script is doing:
pkg update
Then install the following packages:
| Package | -
|---|
| yadm | -
| gnupg | -
| git | -
| which | -
| starship | -
| atuin | -
| vim | -
| tmux | -
| emacs | -
| make | -
| clang | -
| ripgrep | -
| cmake | -
| gperf | -
| iproute2 | -
| wakatime-cli | -
| Package | +
| yadm | +
| gnupg | +
| git | +
| which | +
| starship | +
| atuin | +
| vim | +
| tmux | +
| emacs | +
| make | +
| clang | +
| ripgrep | +
| cmake | +
| gperf | +
| iproute2 | +
| wakatime-cli | +
Run
termux-setup-storage
diff --git a/configs/desktop/index.html b/configs/desktop/index.html
index a4e6d57..b7646ac 100644
--- a/configs/desktop/index.html
+++ b/configs/desktop/index.html
@@ -18,13 +18,6 @@
-
-
-
-
-
-
-
@@ -91,18 +84,18 @@
Some remarks
Removed features:
-
-
-Feature
-Last commit
-
-
-
-
-rofi-buku
-e22476b0cc6315e104e5ce4de5559a61c830c429
-
-
+
+
+ Feature
+ Last commit
+
+
+
+
+ rofi-buku
+ e22476b0cc6315e104e5ce4de5559a61c830c429
+
+
Global customization
Colors
@@ -128,78 +121,78 @@
This table used to have values, now it has only keys:
| color | -key | -
|---|---|
| black | -color0 | -
| red | -color1 | -
| green | -color2 | -
| yellow | -color3 | -
| blue | -color4 | -
| magenta | -color5 | -
| cyan | -color6 | -
| white | -color7 | -
| light-black | -color8 | -
| light-red | -color9 | -
| light-green | -color10 | -
| light-yellow | -color11 | -
| light-blue | -color12 | -
| light-magenta | -color13 | -
| light-cyan | -color14 | -
| light-white | -color15 | -
| color | +key | +
| black | +color0 | +
| red | +color1 | +
| green | +color2 | +
| yellow | +color3 | +
| blue | +color4 | +
| magenta | +color5 | +
| cyan | +color6 | +
| white | +color7 | +
| light-black | +color8 | +
| light-red | +color9 | +
| light-green | +color10 | +
| light-yellow | +color11 | +
| light-blue | +color12 | +
| light-magenta | +color13 | +
| light-cyan | +color14 | +
| light-white | +color15 | +
A few programs I use to customize the apperance are listed below.
| Guix dependency | -Description | -
|---|---|
| matcha-theme | -My preferred GTK theme | -
| papirus-icon-theme | -My preferred Icon theme | -
| gnome-themes-standard | -- |
| xsettingsd | -X11 settings daemon | -
| gnome-themes-extra | -- |
| Guix dependency | +Description | +
| matcha-theme | +My preferred GTK theme | +
| papirus-icon-theme | +My preferred Icon theme | +
| gnome-themes-standard | ++ |
| xsettingsd | +X11 settings daemon | +
| gnome-themes-extra | ++ |
xsettingsd is a lightweight daemon which configures X11 applications. It is launched with shepherd in the Services section.
@@ -287,9 +280,9 @@ x-scheme-handler/about=qutebrowser.desktop x-scheme-handler/unknown=qutebrowser.desktop x-scheme-handler/tg=userapp-Telegram Desktop-7PVWF1.desktop -image/png=feh.desktop -image/jpg=feh.desktop -image/jpeg=feh.desktop +image/png=com.interversehq.qView.desktop +image/jpg=com.interversehq.qView.desktop +image/jpeg=com.interversehq.qView.desktop application/pdf=org.pwmt.zathura.desktop [Added Associations] @@ -297,26 +290,26 @@ application/pdf=org.pwmt.zathura.desktop| Guix dependency | -Description | -
|---|---|
| xrandr | -X11 CLI to RandR | -
| xgamma | -A tool to alter monitor’s gamma correction | -
| xinput | -Configure input devices | -
| Guix dependency | +Description | +
| xrandr | +X11 CLI to RandR | +
| xgamma | +A tool to alter monitor’s gamma correction | +
| xinput | +Configure input devices | +
Set screen layout & other params depending on hostname
hostname=$(hostname)
@@ -339,22 +332,22 @@
Xsession
First things first, Emacs has to be launched as a window manager. On a more conventional system I’d create a .desktop file in some system folder that can be seen by a login manager, but in the case of Guix it’s a bit more complicated, because all such folders are not meant to be changed manually.
-
-
-Category
-Guix dependency
-
-
-
-
-desktop-misc
-xinit
-
-
-desktop-misc
-xss-lock
-
-
+
+
+ Category
+ Guix dependency
+
+
+
+
+ desktop-misc
+ xinit
+
+
+ desktop-misc
+ xss-lock
+
+
However, GDM, the login manager that seems to be the default on Guix, launches ~/.xsession on the startup if it’s present, which is just fine for my purposes.
# Source .profile
@@ -787,52 +780,37 @@
(advice-add #'posframe--create-posframe :after #'my/setup-posframe)
(advice-add #'ivy-posframe-cleanup :after #'my/restore-posframe))
Linux app
-counsel-linux-app is a counsel interface to select a Linux desktop application.
+I switched to app-launcher from counsel-linux-app after migrating from Ivy.
By default, it also shows paths from /gnu/store, so there is a custom formatter function.
-(defun my/counsel-linux-app-format-function (name comment _exec)
- (format "% -45s%s"
- (propertize
- (ivy--truncate-string name 45)
- 'face 'counsel-application-name)
- (if comment
- (concat ": " (ivy--truncate-string comment 100))
- "")))
-
-(setq counsel-linux-app-format-function #'my/counsel-linux-app-format-function)
+(use-package app-launcher
+ :straight '(app-launcher :host github :repo "SebastienWae/app-launcher"))
Also, by default it tries to launch stuff with gtk-launch, which is in the gtk+ package.
-
-
-Category
-Guix dependency
-
-
-
-
-desktop-misc
-gtk+:bin
-
-
+
+
+ Category
+ Guix dependency
+
+
+
+
+ desktop-misc
+ gtk+:bin
+
+
-password-store-ivy
-password-store-ivy is another package of mine, inspired by rofi-pass.
-(use-package password-store-ivy
- :straight (:host github :repo "SqrtMinusOne/password-store-ivy")
- :after (exwm))
+password-store-completion
+password-store-completion is another package of mine, inspired by rofi-pass.
+(use-package password-store-completion
+ :straight (:host github :repo "SqrtMinusOne/password-store-completion")
+ :after (exwm)
+ :config
+ (require 'password-store-embark)
+ (password-store-embark-mode))
emojis
emojify is an Emacs package that adds emoji display to Emacs. While its primary capacity is no longer necessary in Emacs 28, it a few functions to insert emojis are still handy.
(use-package emojify
:straight t)
-
Because I occasionally want to type emojis to other programs, I reuse a function from password-store-ivy:
-(defun my/emojify-type ()
- "Type an emoji."
- (interactive)
- (let ((emoji (emojify-completing-read "Type emoji: ")))
- (kill-new emoji)
- (password-store-ivy--async-commands
- (list
- (password-store-ivy--get-wait-command 10)
- "xdotool key Shift+Insert"))))
Keybindings
EXWM keybindings
Setting keybindings for EXWM. This actually has to be in the :config block of the use-package form, that is it has to be run after EXWM is loaded, so I use noweb to put this block in the correct place.
@@ -852,7 +830,7 @@
"<print>" (my/app-command "flameshot gui")
"<mode-line> s-<mouse-4>" #'perspective-exwm-cycle-all-buffers-backward
"<mode-line> s-<mouse-5>" #'perspective-exwm-cycle-all-buffers-forward
- "M-x" #'counsel-M-x
+ "M-x" #'execute-extended-command
"M-SPC" (general-key "SPC"))
Simulation keys.
(setq exwm-input-simulation-keys `((,(kbd "M-w") . ,(kbd "C-w"))
@@ -902,17 +880,17 @@
(,(kbd "s-.") . persp-next)
;; Switch buffers
- (,(kbd "s-e") . persp-ivy-switch-buffer)
- (,(kbd "s-E") . my/persp-ivy-switch-buffer-other-window)
+ (,(kbd "s-e") . persp-switch-to-buffer*)
+ ;; (,(kbd "s-E") . my/persp-ivy-switch-buffer-other-window)
;; Resize windows
(,(kbd "s-r") . my/exwm-resize-hydra/body)
;; Apps & stuff
- (,(kbd "s-p") . counsel-linux-app)
+ (,(kbd "s-p") . app-launcher-run-app)
(,(kbd "s-P") . async-shell-command)
(,(kbd "s-;") . my/exwm-apps-hydra/body)
- (,(kbd "s--") . password-store-ivy)
+ (,(kbd "s--") . password-store-completion)
(,(kbd "s-=") . my/emojify-type)
(,(kbd "s-i") . ,(my/app-command "copyq menu"))
@@ -1254,22 +1232,22 @@
(exwm-enable))
i3wm
-
-
-Guix dependency
-Disabled
-
-
-
-
-i3-gaps
-
-
-
-i3lock
-true
-
-
+
+
+ Guix dependency
+ Disabled
+
+
+
+
+ i3-gaps
+
+
+
+ i3lock
+ true
+
+
i3lock is disabled because the global one has to be used.
i3wm is a manual tiling window manager, which is currently my window manager of choice. I’ve tried several alternatives, including xmonad & EXWM, but i3 seems to fit my workflow best and decided to switch to EXWM. This section is kept for a few cases when I need to be extra sure that my WM doesn’t fail.
@@ -1307,16 +1285,16 @@
bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'"
Managing windows
-
-
-Guix dependency
-
-
-
-
-rust-i3-switch-tabs
-
-
+
+
+ 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 for details.
@@ -1507,16 +1485,16 @@
bindsym $mod+Shift+g mode "outer gaps"
| Guix dependency | -
|---|
| python-i3-balance-workspace | -
| Guix dependency | +
| python-i3-balance-workspace | +
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 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.
@@ -1752,20 +1730,20 @@ # exec "bash ~/bin/autostart.sh"| Category | -Guix dependency | -Description | -
|---|---|---|
| desktop-polybar | -polybar | -statusbar | -
| Category | +Guix dependency | +Description | +
| desktop-polybar | +polybar | +statusbar | +
Polybar is a nice-looking, WM-agnostic statusbar program.
Don’t forget to install the Google Noto Color Emoji font. Guix package with all Noto fonts is way too large.
@@ -1825,28 +1803,28 @@block1 block2
And set the foreground and background colors like that:
| - | block1 | -glyph | -block2 | -
|---|---|---|---|
| foreground | -F1 | -B2 | -F2 | -
| background | -B1 | -B1 | -B2 | -
| + | block1 | +glyph | +block2 | +
| foreground | +F1 | +B2 | +F2 | +
| background | +B1 | +B1 | +B2 | +
So, that’s a start. First, let’s define the glyph symbols in the polybar config:
[glyph]
@@ -1856,154 +1834,154 @@
As we want to interweave polybar modules with these glyphs in the right order and with the right colors, it is reasonable to define a single source of truth:
-
-
-Index
-Module
-Color
-Glyph
-
-
-
-
-1
-pulseaudio
-light-magenta
-+
-
-
-2
-mpd
-magenta
-+
-
-
-16
-nvidia
-light-cyan
-+
-
-
-3
-cpu
-cyan
-+
-
-
-15
-temperature
-cyan
-+
-
-
-9
-battery
-cyan
-+
-
-
-4
-ram-memory
-light-green
-+
-
-
-5
-swap-memory
-green
-+
-
-
-6
-bandwidth
-light-red
-+
-
-
-7
-openvpn
-light-red
-
-
-
-8
-xkeyboard
-red
-+
-
-
-10
-weather
-light-yellow
-+
-
-
-12
-sun
-yellow
-+
-
-
-13
-aw-afk
-light-blue
-+
-
-
-14
-date
-blue
-+
-
-
+
+
+ Index
+ Module
+ Color
+ Glyph
+
+
+
+
+ 1
+ pulseaudio
+ light-magenta
+ +
+
+
+ 2
+ mpd
+ magenta
+ +
+
+
+ 16
+ nvidia
+ light-cyan
+ +
+
+
+ 3
+ cpu
+ cyan
+ +
+
+
+ 15
+ temperature
+ cyan
+ +
+
+
+ 9
+ battery
+ cyan
+ +
+
+
+ 4
+ ram-memory
+ light-green
+ +
+
+
+ 5
+ swap-memory
+ green
+ +
+
+
+ 6
+ bandwidth
+ light-red
+ +
+
+
+ 7
+ openvpn
+ light-red
+
+
+
+ 8
+ xkeyboard
+ red
+ +
+
+
+ 10
+ weather
+ light-yellow
+ +
+
+
+ 12
+ sun
+ yellow
+ +
+
+
+ 13
+ aw-afk
+ light-blue
+ +
+
+
+ 14
+ date
+ blue
+ +
+
+
Also excluding some modules from certain monitors, which for now is about excluding battery from the monitors of my desktop PC:
-
-
-Monitor
-Exclude
-
-
-
-
-DVI-D-0
-battery
-
-
-HDMI-A-0
-battery
-
-
-HDMI-0
-battery
-
-
-DP-1
-battery
-
-
-eDP
-nvidia
-
-
-eDP-1
-nvidia
-
-
-DVI-D-0
-nvidia
-
-
-HDMI-A-0
-nvidia
-
-
-HDMI-1
-nvidia
-
-
+
+
+ Monitor
+ Exclude
+
+
+
+
+ DVI-D-0
+ battery
+
+
+ HDMI-A-0
+ battery
+
+
+ HDMI-0
+ battery
+
+
+ DP-1
+ battery
+
+
+ eDP
+ nvidia
+
+
+ eDP-1
+ nvidia
+
+
+ DVI-D-0
+ nvidia
+
+
+ HDMI-A-0
+ nvidia
+
+
+ HDMI-1
+ nvidia
+
+
Another thing we need to do is to set the color of modules in accordance with the polybar_modules table. The background can be determined from the Color column with the following code block:
@@ -2020,26 +1998,26 @@
Most of these combinations can be inferred from the polybar_modules table, the rest are defined in another table:
-
-
-Color 1
-Color 2
-
-
-
-
-background
-white
-
-
-background
-light-magenta
-
-
-blue
-background
-
-
+
+
+ Color 1
+ Color 2
+
+
+
+
+ background
+ white
+
+
+ background
+ light-magenta
+
+
+ blue
+ background
+
+
(let* ((monitors
@@ -2586,30 +2564,30 @@
'
ipstack-vpn
-
-
-Category
-Guix dependency
-Description
-
-
-
-
-desktop-polybar
-bind:utils
-Provides dig
-
-
-desktop-polybar
-curl
-
-
-
-desktop-polybar
-jq
-util to work with JSONs
-
-
+
+
+ Category
+ Guix dependency
+ Description
+
+
+
+
+ desktop-polybar
+ bind:utils
+ Provides dig
+
+
+ desktop-polybar
+ curl
+
+
+
+ desktop-polybar
+ jq
+ util to work with JSONs
+
+
A module to get a country of the current IP and openvpn status. Uses ipstack API.
ip=$(dig +short +timeout=1 myip.opendns.com @resolver1.opendns.com 2> /dev/null)
@@ -2721,18 +2699,18 @@
interval = 1200
sun
-
-
-Category
-Guix dependency
-
-
-
-
-desktop-polybar
-sunwait
-
-
+
+
+ Category
+ Guix dependency
+
+
+
+
+ desktop-polybar
+ sunwait
+
+
Prints out the time of sunrise/sunset. Uses sunwait
declare -A LAT_DATA=(
@@ -2770,18 +2748,18 @@
aw-afk
Prints out a current uptime and non-AFK time from ActivityWatch server
-
-
-Category
-Guix dependency
-
-
-
-
-desktop-polybar
-dateutils
-
-
+
+
+ Category
+ Guix dependency
+
+
+
+
+ desktop-polybar
+ dateutils
+
+
afk_event=$(curl -s -X GET "http://localhost:5600/api/0/buckets/aw-watcher-afk_$(hostname)/events?limit=1" -H "accept: application/json")
status=$(echo ${afk_event} | jq -r '.[0].data.status')
@@ -2886,18 +2864,18 @@
label-urgent-padding = 1
Rofi
-
-
-Category
-Guix dependency
-
-
-
-
-desktop-rofi
-rofi
-
-
+
+
+ Category
+ Guix dependency
+
+
+
+
+ desktop-rofi
+ rofi
+
+
rofi is another dynamic menu generator. It can act as dmenu replacement but offers a superset of dmenu’s features.
Theme
@@ -3056,37 +3034,37 @@
fi
| Category | -Guix dependency | -
|---|---|
| desktop-rofi | -python-rofimoji | -
| Category | +Guix dependency | +
| desktop-rofi | +python-rofimoji | +
| Category | -Guix dependency | -
|---|---|
| desktop-rofi | -rofi-pass | -
| desktop-rofi | -xset | -
| Category | +Guix dependency | +
| desktop-rofi | +rofi-pass | +
| desktop-rofi | +xset | +
A nice pass frontend for Rofi, which is even packaged for Guix.
USERNAME_field='username'
@@ -3095,16 +3073,16 @@
clip=both
| Guix dependency | -
|---|
| flameshot | -
| Guix dependency | +
| flameshot | +
flameshot is my program of choice to make screenshots.
As it overwrites its own config all the time, I do not keep the file in VC.
@@ -3151,19 +3129,19 @@ TYPE_UNDO=Ctrl+Z| Guix dependency | -
|---|
| dunst | -
| libnotify | -
| Guix dependency | +
| dunst | +
| libnotify | +
dunst is a lightweight notification daemon.
My customizations of the original config consist mostly of changing colors. Check out the default config or man dunst for the description of settings.
| Guix dependency | -
|---|
| keynav | -
| Guix dependency | +
| keynav | +
| Type | -Note | -
|---|---|
| SYMLINK | -./config/keynavrc -> .keynavrc | -
| Type | +Note | +
| SYMLINK | +./config/keynavrc -> .keynavrc | +
keynav is a program for controlling mouse with keyboard, mostly by screen bisection. This is a poor replacement for a proper keyboard-drived sofware, but…
References:
@@ -3628,16 +3606,16 @@ ]| Guix dependency | -
|---|
| picom | -
| Guix dependency | +
| picom | +
picom is a compositor for X11. It allows effects such as transparency, blurring, etc.
Check out the sample configuration to get an idea on what’s possible. I only have some basic settings in mine.
@@ -3717,30 +3695,30 @@ };| Category | -Guix dependency | -
|---|---|
| office | -zathura | -
| office | -zathura-ps | -
| office | -zathura-pdf-mupdf | -
| office | -zathura-djvu | -
| Category | +Guix dependency | +
| office | +zathura | +
| office | +zathura-ps | +
| office | +zathura-pdf-mupdf | +
| office | +zathura-djvu | +
Zathura is a pdf viewer with vim-like keybindings.
@@ -4122,253 +4100,253 @@This section generates manifests for various desktop software that I’m using.
| Category | -Guix dependency | -
|---|---|
| browsers | -ungoogled-chromium | -
| browsers | -firefox | -
| Category | +Guix dependency | +
| browsers | +ungoogled-chromium | +
| browsers | +firefox | +
| Category | -Guix dependency | -
|---|---|
| office | -libreoffice | -
| office | -gimp | -
| office | -krita | -
| office | -ffmpeg | -
| office | -kdenlive | -
| office | -inkscape | -
| office | -okular | -
| office | -obs | -
| Category | +Guix dependency | +
| office | +libreoffice | +
| office | +gimp | +
| office | +krita | +
| office | +ffmpeg | +
| office | +kdenlive | +
| office | +inkscape | +
| office | +okular | +
| office | +obs | +
| Category | -Guix dependency | -
|---|---|
| latex | -texlive | -
| latex | -texlab-bin | -
| latex | -biber | -
| latex | -python-pygments | -
| latex | -font-microsoft-web-core-fonts | -
| Category | +Guix dependency | +
| latex | +texlive | +
| latex | +texlab-bin | +
| latex | +biber | +
| latex | +python-pygments | +
| latex | +font-microsoft-web-core-fonts | +
| Category | -Guix dependency | -Disabled | -
|---|---|---|
| dev | -micromamba-bin | -- |
| dev | -pandoc | -- |
| dev | -docker-compose | -- |
| dev | -postgresql | -- |
| dev | -virt-manager | -- |
| dev | -dnsmasq | -- |
| dev | -git-filter-repo | -- |
| dev | -node | -- |
| dev | -openjdk:jdk | -- |
| dev | -go | -- |
| dev | -gopls | -- |
| dev | -pkg-config | -- |
| dev | -gcc-toolchain | -- |
| dev | -lua | -- |
| dev | -libfaketime | -- |
| dev | -hugo-extended | -- |
| dev | -make | -- |
| dev | -sbcl | -t | -
| dev | -git-lfs | -- |
| dev | -mysql | -t | -
| dev | -gource | -- |
| dev | -php | -- |
| dev | -python | -- |
| dev | -python-virtualenv | -- |
| dev | -leiningen | -- |
| dev | -socat | -- |
| dev | -wireshark | -- |
| dev | -python-chess | -- |
| dev | -python-cairosvg | -- |
| Category | +Guix dependency | +Disabled | +
| dev | +micromamba-bin | ++ |
| dev | +pandoc | ++ |
| dev | +docker-compose | ++ |
| dev | +postgresql | ++ |
| dev | +virt-manager | ++ |
| dev | +dnsmasq | ++ |
| dev | +git-filter-repo | ++ |
| dev | +node | ++ |
| dev | +openjdk:jdk | ++ |
| dev | +go | ++ |
| dev | +gopls | ++ |
| dev | +pkg-config | ++ |
| dev | +gcc-toolchain | ++ |
| dev | +lua | ++ |
| dev | +libfaketime | ++ |
| dev | +hugo-extended | ++ |
| dev | +make | ++ |
| dev | +sbcl | +t | +
| dev | +git-lfs | ++ |
| dev | +mysql | +t | +
| dev | +gource | ++ |
| dev | +php | ++ |
| dev | +python | ++ |
| dev | +python-virtualenv | ++ |
| dev | +leiningen | ++ |
| dev | +socat | ++ |
| dev | +wireshark | ++ |
| dev | +python-chess | ++ |
| dev | +python-cairosvg | ++ |
A lot of proprietary desktop applications can be installed most easily with flatpak & flathub.
| Guix dependency | -
|---|
| flatpak | -
| xdg-desktop-portal | -
| Guix dependency | +
| flatpak | +
| xdg-desktop-portal | +
After installation, add the following repositories:
flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
@@ -4430,30 +4408,30 @@
Packages to install:
| Flatpak dependency | -Channel | -
|---|---|
| com.github.wwmm.pulseeffects | -flathub | -
| com.discordapp.Discord | -flathub | -
| com.jetbrains.DataGrip | -flathub | -
| chat.rocket.RocketChat | -flathub | -
| Flatpak dependency | +Channel | +
| com.github.wwmm.pulseeffects | +flathub | +
| com.discordapp.Discord | +flathub | +
| com.jetbrains.DataGrip | +flathub | +
| chat.rocket.RocketChat | +flathub | +
(mapconcat
(lambda (c) (concat "flatpak install -y --user " (nth 1 c) " " (nth 0 c)))
@@ -4461,18 +4439,18 @@
"\n")
| Type | -Description | -
|---|---|
| TODO | -Make nix manifest? | -
| Type | +Description | +
| TODO | +Make nix manifest? | +
I probably should’ve used nix, as almost every program I packaged so far exists in the Nix repo.
But it’s easy enough to use Nix on Guix.
@@ -4485,55 +4463,55 @@GNU Shepherd is a service management system for GNU Guix.
I previously used supervisor, but shepherd also seems pretty capable.
| Guix dependency | -
|---|
| shepherd | -
| Guix dependency | +
| shepherd | +
| Category | -Guix dependency | -
|---|---|
| music | -mpd | -
| music | -ncmpcpp | -
| music | -picard | -
| music | -mpd-mpc | -
| music | -shntool | -
| music | -cuetools | -
| music | -flac | -
| Category | +Guix dependency | +
| music | +mpd | +
| music | +ncmpcpp | +
| music | +picard | +
| music | +mpd-mpc | +
| music | +shntool | +
| music | +cuetools | +
| music | +flac | +
Music player daemon
(define mpd
@@ -4561,16 +4539,16 @@
ActivityWatch is a FOSS time tracker. It tracks screen and application usage and has integrations with browsers, Emacs, etc.
| Guix dependency | -
|---|
| activitywatch-bin | -
| Guix dependency | +
| activitywatch-bin | +
aw-server
(define aw-server
@@ -4736,140 +4714,145 @@
Other desktop programs I use are listed below.
| Category | -Guix dependency | -Description | -
|---|---|---|
| desktop-misc | -xprop | -Tool to display properties of X windows | -
| desktop-misc | -arandr | -GUI to xrandr | -
| desktop-misc | -light | -Control screen brightness | -
| desktop-misc | -ponymix | -Control PulseAudio CLI | -
| desktop-misc | -pavucontrol | -Control PulseAudio GUI | -
| desktop-misc | -network-manager-applet | -Applet to manage network connections | -
| desktop-misc | -xmodmap | -Program to modify keybindings on X server | -
| desktop-misc | -fontconfig | -- |
| desktop-misc | -polkit-gnome | -Polkit authentication agent | -
| desktop-misc | -feh | -Image viewer. Used to set background | -
| desktop-misc | -copyq | -Clipboard manager | -
| desktop-misc | -thunar | -My preferred GUI file manager | -
| desktop-misc | -xdg-utils | -gives xdg-open and stuff | -
| desktop-misc | -gnome-font-viewer | -view fonts | -
| desktop-misc | -qbittorrent | -torrent client | -
| desktop-misc | -anydesk | -Remote desktop software | -
| desktop-misc | -gnome-disk-utility | -Manage disks | -
| desktop-misc | -gparted | -Manage partitions | -
| desktop-misc | -xev | -Test input | -
| desktop-misc | -bluez | -Provides bluetoothctl | -
| desktop-misc | -telegram-desktop | -- |
| desktop-misc | -font-google-noto-emoji | -- |
| desktop-misc | -remmina | -- |
| desktop-misc | -android-file-transfer | -- |
| desktop-misc | -mcron | -- |
| Category | +Guix dependency | +Description | +
| desktop-misc | +xprop | +Tool to display properties of X windows | +
| desktop-misc | +arandr | +GUI to xrandr | +
| desktop-misc | +light | +Control screen brightness | +
| desktop-misc | +ponymix | +Control PulseAudio CLI | +
| desktop-misc | +pavucontrol | +Control PulseAudio GUI | +
| desktop-misc | +network-manager-applet | +Applet to manage network connections | +
| desktop-misc | +xmodmap | +Program to modify keybindings on X server | +
| desktop-misc | +fontconfig | ++ |
| desktop-misc | +polkit-gnome | +Polkit authentication agent | +
| desktop-misc | +feh | +Image viewer. Used to set background | +
| desktop-misc | +qview | +Image viewer | +
| desktop-misc | +copyq | +Clipboard manager | +
| desktop-misc | +thunar | +My preferred GUI file manager | +
| desktop-misc | +xdg-utils | +gives xdg-open and stuff | +
| desktop-misc | +gnome-font-viewer | +view fonts | +
| desktop-misc | +qbittorrent | +torrent client | +
| desktop-misc | +anydesk | +Remote desktop software | +
| desktop-misc | +gnome-disk-utility | +Manage disks | +
| desktop-misc | +gparted | +Manage partitions | +
| desktop-misc | +xev | +Test input | +
| desktop-misc | +bluez | +Provides bluetoothctl | +
| desktop-misc | +telegram-desktop | ++ |
| desktop-misc | +font-google-noto-emoji | ++ |
| desktop-misc | +remmina | ++ |
| desktop-misc | +android-file-transfer | ++ |
| desktop-misc | +mcron | ++ |
(my/format-guix-dependencies)
@@ -4930,7 +4913,7 @@
diff --git a/configs/emacs/index.html b/configs/emacs/index.html
index 1d71362..6a87900 100644
--- a/configs/emacs/index.html
+++ b/configs/emacs/index.html
@@ -18,13 +18,6 @@
-
-
-
-
-
-
-
@@ -123,110 +116,110 @@ Emacs is also particularly great at writing Lisp code, e.g. Clojure, Common Lisp
Some remarks
I decided not to keep configs for features that I do not use anymore because this config is already huge. But here are the last commits that had these features presented.
-
-
-Feature
-Last commit
-
-
-
-
-org-roam dailies
-d2648918fcc338bd5c1cd6d5c0aa60a65077ccf7
-
-
-org-roam projects
-025278a1e180e86f3aade20242e4ac1cdc1a2f13
-
-
-treemacs
-3d87852745caacc0863c747f1fa9871d367240d2
-
-
-tab-bar.el
-19ff54db9fe21fd5bdf404a8d2612176baa8a6f5
-
-
-spaceline
-19ff54db9fe21fd5bdf404a8d2612176baa8a6f5
-
-
-code compass
-8594d6f53e42c70bbf903e168607841854818a38
-
-
-vue-mode
-8594d6f53e42c70bbf903e168607841854818a38
-
-
-svelte-mode
-8594d6f53e42c70bbf903e168607841854818a38
-
-
-pomidor
-8594d6f53e42c70bbf903e168607841854818a38
-
-
-elfeed-score
-8e591e0d2afd909ae5be00caf17f9b17c6cd8b61
-
-
-org-trello
-3f5967a5f63928ea9c8567d8d9f31e84cdbbc21f
-
-
-jabber
-9b0e73a4703ff35a2d30fd704200052888191217
-
-
-wallabag
-9b0e73a4703ff35a2d30fd704200052888191217
-
-
-conda
-609fc84e439b11ea5064f3a948079daebb654aca
-
-
-notmuch tags keybindings
-eac134c5456051171c1c777254f503cc71ce12cd
-
-
-expand-region
-ab0d01c525f2b44dd64ec09747daf0fced4bd9c7
-
-
-org-latex-impatient
-ab0d01c525f2b44dd64ec09747daf0fced4bd9c7
-
-
-dired-single
-ab0d01c525f2b44dd64ec09747daf0fced4bd9c7
-
-
-progidy
-ab0d01c525f2b44dd64ec09747daf0fced4bd9c7
-
-
-tree-sitter
-1920a48aec49837d63fa88ca315928dc4e9d14c2
-
-
-org-roam-protocol
-2f0c20eb01b8899d00d129cc7ca5c6b263c69c65
-
-
-eshell-info-banner
-4ccc0bbc412b68e1401533264d801d86b1fc8cc7
-
-
-aweshell
-4ccc0bbc412b68e1401533264d801d86b1fc8cc7
-
-
-link tasks to meetings
-23496bfacc31ffedf2092da04e4e602b71373425
-
-
+
+
+ Feature
+ Last commit
+
+
+
+
+ org-roam dailies
+ d2648918fcc338bd5c1cd6d5c0aa60a65077ccf7
+
+
+ org-roam projects
+ 025278a1e180e86f3aade20242e4ac1cdc1a2f13
+
+
+ treemacs
+ 3d87852745caacc0863c747f1fa9871d367240d2
+
+
+ tab-bar.el
+ 19ff54db9fe21fd5bdf404a8d2612176baa8a6f5
+
+
+ spaceline
+ 19ff54db9fe21fd5bdf404a8d2612176baa8a6f5
+
+
+ code compass
+ 8594d6f53e42c70bbf903e168607841854818a38
+
+
+ vue-mode
+ 8594d6f53e42c70bbf903e168607841854818a38
+
+
+ svelte-mode
+ 8594d6f53e42c70bbf903e168607841854818a38
+
+
+ pomidor
+ 8594d6f53e42c70bbf903e168607841854818a38
+
+
+ elfeed-score
+ 8e591e0d2afd909ae5be00caf17f9b17c6cd8b61
+
+
+ org-trello
+ 3f5967a5f63928ea9c8567d8d9f31e84cdbbc21f
+
+
+ jabber
+ 9b0e73a4703ff35a2d30fd704200052888191217
+
+
+ wallabag
+ 9b0e73a4703ff35a2d30fd704200052888191217
+
+
+ conda
+ 609fc84e439b11ea5064f3a948079daebb654aca
+
+
+ notmuch tags keybindings
+ eac134c5456051171c1c777254f503cc71ce12cd
+
+
+ expand-region
+ ab0d01c525f2b44dd64ec09747daf0fced4bd9c7
+
+
+ org-latex-impatient
+ ab0d01c525f2b44dd64ec09747daf0fced4bd9c7
+
+
+ dired-single
+ ab0d01c525f2b44dd64ec09747daf0fced4bd9c7
+
+
+ progidy
+ ab0d01c525f2b44dd64ec09747daf0fced4bd9c7
+
+
+ tree-sitter
+ 1920a48aec49837d63fa88ca315928dc4e9d14c2
+
+
+ org-roam-protocol
+ 2f0c20eb01b8899d00d129cc7ca5c6b263c69c65
+
+
+ eshell-info-banner
+ 4ccc0bbc412b68e1401533264d801d86b1fc8cc7
+
+
+ aweshell
+ 4ccc0bbc412b68e1401533264d801d86b1fc8cc7
+
+
+ link tasks to meetings
+ 23496bfacc31ffedf2092da04e4e602b71373425
+
+
Initial setup
Setting up the environment, performance tuning and a few basic settings.
@@ -529,7 +522,7 @@ Emacs is also particularly great at writing Lisp code, e.g. Clojure, Common Lisp
:after evil
:config
(evil-collection-init
- '(eww devdocs proced emms pass calendar dired ivy debug guix calc
+ '(eww devdocs proced emms pass calendar dired debug guix calc
docker ibuffer geiser pdf info elfeed edebug bookmark company
vterm flycheck profiler cider explain-pause-mode notmuch custom
xref eshell helpful compile comint git-timemachine magit prodigy
@@ -653,7 +646,8 @@ Emacs is also particularly great at writing Lisp code, e.g. Clojure, Common Lisp
"l" 'next-buffer
"h" 'previous-buffer
"k" 'kill-buffer
- "b" 'persp-ivy-switch-buffer
+ ;; "b" 'persp-ivy-switch-buffer
+ "b" #'persp-switch-to-buffer*
"r" 'revert-buffer
"u" 'ibuffer)
(setq default-input-method "russian-computer")
I also want to call xkb-switch in EXWM buffers with the same keybindig.
| Guix dependency | -
|---|
| xkb-switch | -
| Guix dependency | +
| xkb-switch | +
(defun my/toggle-input-method ()
(interactive)
@@ -971,7 +965,31 @@ Emacs is also particularly great at writing Lisp code, e.g. Clojure, Common Lisp
)
Input accented characters.
-(use-package accent
+(defvar my/default-accents
+ '((a . ä)
+ (o . ö)
+ (u . ü)
+ (s . ß)
+ (A . Ä)
+ (O . Ö)
+ (U . Ü)
+ (S . ẞ)))
+
+(defun my/accent (arg)
+ (interactive "P")
+ (require 'accent)
+ (message "%s" arg)
+ (let* ((after? (eq accent-position 'after))
+ (char (if after? (char-after) (char-before)))
+ (curr (intern (string char)))
+ (default-diac (cdr (assoc curr my/default-accents))))
+ (if (and default-diac (not arg))
+ (progn
+ (delete-char (if after? 1 -1))
+ (insert (format "%c" default-diac)))
+ (call-interactively #'accent-company))))
+
+(use-package accent
:straight (:host github :repo "eliascotto/accent")
:init
(general-define-key
@@ -979,7 +997,7 @@ Emacs is also particularly great at writing Lisp code, e.g. Clojure, Common Lisp
"gs" #'accent-company)
(general-define-key
:states '(normal insert)
- "M-n" #'accent-company)
+ "M-n" #'my/accent)
:commands (accent-menu)
:config
(general-define-key
@@ -999,16 +1017,15 @@ Emacs is also particularly great at writing Lisp code, e.g. Clojure, Common Lisp
:straight t
:config
(projectile-mode +1)
- (setq projectile-project-search-path '("~/Code" "~/Documents")))
-
-(use-package counsel-projectile
- :after (counsel projectile)
- :straight t)
+ (setq projectile-project-search-path '("~/Code" "~/Documents"))
+ (general-define-key
+ :keymaps 'projectile-command-map
+ "b" #'consult-project-buffer))
(my-leader-def
"p" '(:keymap projectile-command-map :which-key "projectile"))
-(general-nmap "C-p" 'counsel-projectile-find-file)
+(general-nmap "C-p" #'projectile-find-file)
Git & Magit
Magit is a git interface for Emacs.
A few CLI alternatives:
@@ -1044,16 +1061,16 @@ Emacs is also particularly great at writing Lisp code, e.g. Clojure, Common Lisp
:straight t
:commands (git-timemachine))
| Guix dependency | -
|---|
| difftastic-bin | -
| Guix dependency | +
| difftastic-bin | +
difftastic.el is a wrapper package for difftastic.
(use-package difftastic
@@ -1202,7 +1219,7 @@ Emacs is also particularly great at writing Lisp code, e.g. Clojure, Common Lisp
"o" #'point-to-register
"c" #'my/register-clear
"r" #'jump-to-register
- "R" #'counsel-register
+ "R" #'consult-register
"w" #'window-configuration-to-register)
References:
@@ -1221,23 +1238,11 @@ Emacs is also particularly great at writing Lisp code, e.g. Clojure, Common Lisp(defun my/mark-ring-clear ()
(interactive)
(setq mark-ring nil))
-A variant of counsel-mark-ring to work with global-mark-ring:
(defun my/counsel-global-mark-ring ()
- "Browse `mark-ring' interactively.
-Obeys `widen-automatically', which see."
- (interactive)
- (let* ((counsel--mark-ring-calling-point (point))
- (marks (copy-sequence global-mark-ring))
- (marks (delete-dups marks))
- (candidates (counsel-mark--get-candidates marks)))
- (if candidates
- (counsel-mark--ivy-read "Mark: " candidates 'my/counsel-global-mark-ring)
- (message "Mark ring is empty"))))
Keybindings:
(my-leader-def
:infix "g"
- "g" #'counsel-mark-ring
- "G" #'my/counsel-global-mark-ring
+ "G" #'consult-global-mark
+ "g" #'consult-mark
"C" #'my/mark-ring-clear
"m" #'my/push-mark-no-activate)
@@ -1267,120 +1272,173 @@ Emacs is also particularly great at writing Lisp code, e.g. Clojure, Common Lisp
:straight t
:commands (ace-link-info ace-link-help ace-link-woman ace-link-eww))
Minibuffer completion tools for Emacs.
-References:
-(use-package ivy
+vertico
+vertico is a vertical completion framework. I switched to it from Ivy (and to Ivy from Helm).
+(use-package vertico
:straight t
:config
- (setq ivy-use-virtual-buffers t)
- (ivy-mode))
-
-(use-package counsel
- :straight t
- :after ivy
+ (setq enable-recursive-minibuffers t)
+ (general-define-key
+ :keymaps '(vertico-map)
+ "M-j" #'vertico-next
+ "M-k" #'vertico-previous
+ "TAB" #'minibuffer-complete)
+ (vertico-mode))
+
Add prompt indicator to completing-read-multiple:
+(defun crm-indicator (args)
+ (cons (format "[CRM%s] %s"
+ (replace-regexp-in-string
+ "\\`\\[.*?]\\*\\|\\[.*?]\\*\\'" ""
+ crm-separator)
+ (car args))
+ (cdr args)))
+(with-eval-after-load 'crm
+ (advice-add #'completing-read-multiple :filter-args #'crm-indicator))
+
Persist history over Emacs restarts.
+(use-package savehist
+ :init
+ (savehist-mode))
+
Vertico extensions
+Vertico has a lot of extensions.
+vertico-directory simplifies directory navigation.
+(use-package vertico-directory
+ :after (vertico)
:config
- (counsel-mode))
+ (general-define-key
+ :keymaps '(vertico-map)
+ "RET" #'vertico-directory-enter
+ "DEL" #'vertico-directory-delete-char)
+ (add-hook 'rfn-eshadow-update-overlay-hook #'vertico-directory-tidy))
+
vertico-grid enabled grid display. It is useful when there are no annotations in the completion buffer.
+(use-package vertico-grid
+ :after (vertico))
+
vertico-multiform enables per-mode configuration.
+(defun my/sort-directories-first (files)
+ (setq files (vertico-sort-alpha files))
+ (nconc (seq-filter (lambda (x) (string-suffix-p "/" x)) files)
+ (seq-remove (lambda (x) (string-suffix-p "/" x)) files)))
-(use-package swiper
- :defer t
+(use-package vertico-multiform
+ :after vertico
+ :config
+ (vertico-multiform-mode)
+ (general-define-key
+ :keymap 'vertico-multiform-map
+ "M-b" #'vertico-multiform-buffer
+ "M-g" #'vertico-multiform-grid)
+ (setq vertico-multiform-categories
+ '((file (vertico-sort-function . my/sort-directories-first))
+ (password-store-pass grid)))
+ (setq vertico-multiform-commands
+ '((eshell-atuin-history (vertico-sort-function . nil))
+ (my/index-nav (vertico-sort-function . nil))
+ (org-ql-view (vertico-sort-function . nil))
+ (my/consult-line (vertico-sort-function . nil)))))
+
orderless
+orderless is a flexible completion style framework. Completion style refers to the way entries are filtered in the completion buffer.
+I used to use prescient.el with Ivy; unlike prescient, orderless doesn’t sort completion entries.
+(use-package orderless
+ :straight t
+ :config
+ (setq completion-styles '(orderless basic))
+ (setq completion-category-defaults nil)
+ (setq completion-category-overrides
+ '((file (styles partial-completion))))
+ (setq orderless-matching-styles
+ '(orderless-literal orderless-initialism orderless-regexp)))
+
Disable orderless for company:
+(defun company-completion-styles (capf-fn &rest args)
+ (let ((completion-styles '(basic partial-completion)))
+ (apply capf-fn args)))
+
+(with-eval-after-load 'company
+ (advice-add 'company-capf :around #'company-completion-styles))
+
consult
+consult provides various commands based on the completing-read API.
+(use-package consult
:straight t)
-
ivy-rich
-ivy-rich provides a more informative interface for ivy.
-(use-package ivy-rich
+
marginalia
+marginalia provides annotations in the completion interface.
+(use-package marginalia
:straight t
- :after ivy
:config
- (ivy-rich-mode 1)
- (setcdr (assq t ivy-format-functions-alist) #'ivy-format-function-line))
-
prescient
-A package that enhances sorting & filtering of candidates. ivy-prescient adds integration with Ivy.
-References:
-
-
-(use-package ivy-prescient
+ (marginalia-mode)
+ (push '(projectile-find-file . file)
+ marginalia-command-categories))
+
embark
+embark provides minibuffer actions.
+(use-package embark
:straight t
- :after counsel
+ :commands (embark-act embark-dwim embark-bindings)
+ :init
+ (general-define-key
+ "M-e" #'embark-act))
+
+(use-package embark-consult
+ :straight t
+ :after (embark)
:config
- (ivy-prescient-mode +1)
- (setq ivy-prescient-retain-classic-highlighting t)
- (prescient-persist-mode 1)
- (setq ivy-prescient-sort-commands
- '(:not swiper
- swiper-isearch
- ivy-switch-buffer
- ;; ivy-resume
- ;; ivy--restore-session
- lsp-ivy-workspace-symbol
- dap-switch-stack-frame
- my/dap-switch-stack-frame
- dap-switch-session
- dap-switch-thread
- counsel-grep
- ;; counsel-find-file
- counsel-git-grep
- counsel-rg
- counsel-ag
- counsel-ack
- counsel-fzf
- counsel-pt
- counsel-imenu
- counsel-yank-pop
- counsel-recentf
- counsel-buffer-or-recentf
- proced-filter-interactive
- proced-sort-interactive
- perspective-exwm-switch-perspective
- my/persp-ivy-switch-buffer-other-window
- lsp-execute-code-action
- dired-recent-open
- org-ql-view
- my/index-nav
- org-set-effort
- eshell-atuin-history))
- ;; Do not use prescient in find-file
- (ivy--alist-set 'ivy-sort-functions-alist #'read-file-name-internal #'ivy-sort-file-function-default))
+ (add-hook 'embark-collect-mode #'consult-preview-at-point-mode))
+
Use which-key like indicator. Take from the Embark wiki.
+(defun embark-which-key-indicator ()
+ "An embark indicator that displays keymaps using which-key.
+The which-key help message will show the type and value of the
+current target followed by an ellipsis if there are further
+targets."
+ (lambda (&optional keymap targets prefix)
+ (if (null keymap)
+ (which-key--hide-popup-ignore-command)
+ (which-key--show-keymap
+ (if (eq (plist-get (car targets) :type) 'embark-become)
+ "Become"
+ (format "Act on %s '%s'%s"
+ (plist-get (car targets) :type)
+ (embark--truncate-target (plist-get (car targets) :target))
+ (if (cdr targets) "…" "")))
+ (if prefix
+ (pcase (lookup-key keymap prefix 'accept-default)
+ ((and (pred keymapp) km) km)
+ (_ (key-binding prefix 'accept-default)))
+ keymap)
+ nil nil t (lambda (binding)
+ (not (string-suffix-p "-argument" (cdr binding))))))))
+
+(defun embark-hide-which-key-indicator (fn &rest args)
+ "Hide the which-key indicator immediately when using the completing-read prompter."
+ (which-key--hide-popup-ignore-command)
+ (let ((embark-indicators
+ (remq #'embark-which-key-indicator embark-indicators)))
+ (apply fn args)))
+
+(with-eval-after-load 'embark
+ (advice-add #'embark-completing-read-prompter
+ :around #'embark-hide-which-key-indicator)
+ (setq embark-indicators (delq #'embark-mixed-indicator embark-indicators))
+ (push #'embark-which-key-indicator embark-indicators))
keybindings
Setting up quick access to various completions.
(my-leader-def
:infix "f"
"" '(:which-key "various completions")'
- ;; "b" 'counsel-switch-buffer
- "b" 'persp-ivy-switch-buffer
+ "b" #'persp-switch-to-buffer*
"e" 'micromamba-activate
"f" 'project-find-file
- "c" 'counsel-yank-pop
- "a" 'counsel-rg
- "d" 'deadgrep
- "A" 'counsel-ag)
+ "c" 'consult-yank-pop
+ "a" 'consult-ripgrep
+ "d" 'deadgrep)
(general-define-key
:states '(insert normal)
- "C-y" 'counsel-yank-pop)
+ "C-y" 'consult-yank-pop)
-(defun my/swiper-isearch ()
+(defun my/consult-line ()
(interactive)
(if current-prefix-arg
- (swiper-all)
- (swiper-isearch)))
+ (call-interactively #'consult-line-multi)
+ (consult-line nil t)))
-(my-leader-def "SPC SPC" 'ivy-resume)
-(my-leader-def "s" 'my/swiper-isearch)
-
-(general-define-key
- :keymaps '(ivy-minibuffer-map swiper-map)
- "M-j" 'ivy-next-line
- "M-k" 'ivy-previous-line
- "<C-return>" 'ivy-call
- "M-RET" 'ivy-immediate-done
- [escape] 'minibuffer-keyboard-quit)
+;; (my-leader-def "SPC SPC" 'ivy-resume)
+(my-leader-def "s" 'my/consult-line)
company
A completion framework for Emacs.
References:
@@ -1917,9 +1975,9 @@ Emacs is also particularly great at writing Lisp code, e.g. Clojure, Common Lisp
"//" "///" "/*" "*/" "/=" "//=" "/==" "@_" "__"))
(global-ligature-mode t))
I switched to nerd-icons from all-the-icons.
Run M-x all-the-icons-install-fonts at first setup.
(use-package all-the-icons
- :if (display-graphic-p)
+(use-package nerd-icons
:straight t)
Text highlight
Highlight indent guides.
@@ -2051,8 +2109,8 @@ Emacs is also particularly great at writing Lisp code, e.g. Clojure, Common Lisp
"gN" 'persp-kill)
(general-define-key
:keymaps 'perspective-map
- "b" 'persp-ivy-switch-buffer
- "x" 'persp-ivy-switch-buffer
+ "b" 'persp-switch-to-buffer
+ "x" 'persp-switch-to-buffer*
"u" 'persp-ibuffer))
Move the current buffer to a perspective and switch to it.
@@ -2069,19 +2127,6 @@ Emacs is also particularly great at writing Lisp code, e.g. Clojure, Common Lisp (call-interactively #'persp-switch) (persp-add-buffer (buffer-name buffer)) (switch-to-buffer buffer))) -Switch to a perspective buffer in other window.
-(defun my/persp-ivy-switch-buffer-other-window (arg)
- (interactive "P")
- (declare-function ivy-switch-buffer-other-window "ivy.el")
- (persp--switch-buffer-ivy-counsel-helper
- arg
- (lambda ()
- (ivy-read "Switch to buffer in other window: " #'internal-complete-buffer
- :keymap ivy-switch-buffer-map
- :preselect (buffer-name (other-buffer (current-buffer)))
- :action #'ivy--switch-buffer-other-window-action
- :matcher #'ivy--switch-buffer-matcher
- :caller 'ivy-switch-buffer))))
Add keybindings to the default map.
(with-eval-after-load 'perspective
(general-define-key
@@ -2681,18 +2726,18 @@ Emacs is also particularly great at writing Lisp code, e.g. Clojure, Common Lisp
Emmet
Emmet is a toolkit which greatly speeds up typing HTML & CSS.
-
-
-Type
-Note
-
-
-
-
-TODO
-make expand div[disabled] as <div disabled></div>
-
-
+
+
+ Type
+ Note
+
+
+
+
+ TODO
+ make expand div[disabled] as <div disabled></div>
+
+
My bit of config here:
@@ -2954,18 +2999,18 @@ Emacs is also particularly great at writing Lisp code, e.g. Clojure, Common Lisp
(my/list-sty)))))
| Note | -Type | -
|---|---|
| TODO | -Move yasnippet snippets here? Maybe extract to a separate file? | -
| Note | +Type | +
| TODO | +Move yasnippet snippets here? Maybe extract to a separate file? | +
Autogenerate snippets for greek letters. I have a few blocks like this because it’s faster & more flexible than usual yasnippet snippets.
@@ -3137,16 +3182,16 @@ Emacs is also particularly great at writing Lisp code, e.g. Clojure, Common Lisp :straight t)| Guix dependency | -
|---|
| plantuml | -
| Guix dependency | +
| plantuml | +
(use-package plantuml-mode
:straight t
@@ -3394,16 +3439,16 @@ Emacs is also particularly great at writing Lisp code, e.g. Clojure, Common Lisp
yapf is a formatter for Python files.
| Guix dependency | -
|---|
| python-yapf | -
| Guix dependency | +
| python-yapf | +
References:
black is a formatter for Python files.
| Guix dependency | -
|---|
| python-black | -
| Guix dependency | +
| python-black | +
(use-package python-black
:straight t
@@ -3444,16 +3489,16 @@ Emacs is also particularly great at writing Lisp code, e.g. Clojure, Common Lisp
isort is a Python package to sort Python imports.
| Guix dependency | -
|---|
| python-isort | -
| Guix dependency | +
| python-isort | +
References:
Support for text with magic comments.
| Guix dependency | -Disabled | -
|---|---|
| python-jupytext | -t | -
| Guix dependency | +Disabled | +
| python-jupytext | +t | +
(use-package code-cells
:straight t
@@ -3747,22 +3792,22 @@ Emacs is also particularly great at writing Lisp code, e.g. Clojure, Common Lisp
| Guix dependencies | -Disabled | -
|---|---|
| omnisharp | -t | -
| dotnet | -t | -
| Guix dependencies | +Disabled | +
| omnisharp | +t | +
| dotnet | +t | +
Disabled that for now because it depends on the old tree sitter.
(use-package csharp-mode
@@ -4009,7 +4054,7 @@ Emacs is also particularly great at writing Lisp code, e.g. Clojure, Common Lisp
(interactive)
(let* ((files
(thread-last
- '("projects" "misc")
+ '("projects" "misc" "learning")
(mapcar (lambda (f)
(directory-files (concat org-directory "/" f) t (rx ".org" eos))))
(apply #'append)
@@ -4836,7 +4881,7 @@ Emacs is also particularly great at writing Lisp code, e.g. Clojure, Common Lisp
(set-keymap-parent map crm-local-completion-map)
(define-key map " " 'self-insert-command)
map))
- (ivy-prescient-sort-commands nil)
+ (vertico-sort-function nil)
(categories (completing-read-multiple
"Categories: "
'("TEACH" "EDU" "JOB" "LIFE" "COMP"))))
@@ -5476,7 +5521,7 @@ Emacs is also particularly great at writing Lisp code, e.g. Clojure, Common Lisp
(set-keymap-parent map crm-local-completion-map)
(define-key map " " 'self-insert-command)
map))
- (ivy-prescient-sort-commands nil))
+ (vertico-sort-function nil))
(mapconcat
#'identity
(completing-read-multiple
@@ -5527,44 +5572,49 @@ Emacs is also particularly great at writing Lisp code, e.g. Clojure, Common Lisp
I use Zotero to manage my bibliograhy.
There is a Zotero extension called better bibtex, which allows for having one bibtex file that is always syncronized with the library. That comes quite handy for Emacs integration.
-org-ref is an excellent package by John Kitchin that provides support for managing citations and references in Org Mode.
-It may have become less relevant since org-cite was merged into plain Org, but org-ref is still just as usable.
As of now, this package loads Helm on start. To avoid this, I have to exclude Helm from the Package-requires in the org-ref.el file. I haven’t found a way to do this without modifying the package source yet.
There’s a package called org-roam-bibtex that allows to keep literature notes in org-roam and access them from org-ref, but as for now I store literature notes separately.
citar is a package that works with citations.
+(use-package citar
+ :straight t
+ :init
+ (my-leader-def "fB" #'citar-open)
+ :commands (citar-open citar-insert-citation)
+ :config
+ (setq
+ org-cite-global-bibliography '("~/30-39 Life/32 org-mode/library.bib")
+ org-cite-insert-processor 'citar
+ org-cite-follow-processor 'citar
+ org-cite-activate-processor 'citar
+ citar-bibliography org-cite-global-bibliography)
+ (add-hook 'latex-mode #'citar-capf-setup)
+ (add-hook 'org-mode #'citar-capf-setup))
+
+(use-package citar-embark
+ :after (citar embark)
+ :straight t
+ :config
+ (citar-embark-mode))
+org-ref is a package by John Kitchin that provides support for citations and cross-references in Org Mode.
+I’ve switched to citar for citations because org-ref only works with Ivy and Helm. Fortunately, org-ref is designed to co-exist with citar and org-cite.
Also, at some point the package loaded Helm on start, so I exclude these files from the recipe.
(use-package org-ref
:straight (:files (:defaults "citeproc" (:exclude "*helm*")))
:if (not my/remote-server)
:init
(setq bibtex-dialect 'biblatex)
- (setq bibtex-completion-bibliography '("~/30-39 Life/32 org-mode/library.bib"))
- (setq bibtex-completion-library-path '("~/30-39 Life/33 Library"))
- (setq bibtex-completion-notes-path "~/Documents/org-mode/literature-notes")
- (setq bibtex-completion-display-formats
- '((t . "${author:36} ${title:*} ${note:10} ${year:4} ${=has-pdf=:1}${=type=:7}")))
- (setq bibtex-completion-pdf-open-function
- (lambda (file)
- (start-process "dired-open" nil
- "xdg-open" (file-truename file))))
+ (add-hook 'bibtex-mode 'smartparens-mode)
:after (org)
:config
- (with-eval-after-load 'ivy-bibtex
- (require 'org-ref-ivy))
(general-define-key
:keymaps 'org-mode-map
"C-c l" #'org-ref-insert-link-hydra/body)
(general-define-key
:keymaps 'bibtex-mode-map
- "M-RET" 'org-ref-bibtex-hydra/body))
-ivy-bibtex is an Ivy interface to bibtex. It uses the same configuration variables as org-ref, or rather, both packages use variables from the built-in bibtex.el
(use-package ivy-bibtex
- :after (org-ref)
- :straight t
- :init
- (my-leader-def "fB" 'ivy-bibtex))
-
-(add-hook 'bibtex-mode 'smartparens-mode)
+ "M-RET" 'org-ref-bibtex-hydra/body)
+ (setq org-ref-insert-cite-function
+ (lambda ()
+ (call-interactively #'citar-insert-citation))))
org-roam is a plain-text knowledge database.
Things I tried with Org Roam:
@@ -5582,22 +5632,22 @@ Didn’t work out as I expected, so I’ve madeorg-journal-tags
| Guix dependency | -Disabled | -
|---|---|
| emacs-emacsql-sqlite3 | -t | -
| graphviz | -- |
| Guix dependency | +Disabled | +
| emacs-emacsql-sqlite3 | +t | +
| graphviz | ++ |
About installing the package on Guix (CREDIT: thanks @Ashraz on the SystemCrafters discord)
@@ -5624,7 +5674,6 @@ Didn’t work out as I expected, so I’ve madeorg-journal-tags :init (setq org-roam-file-extensions '("org")) (setq org-roam-v2-ack t) - (setq orb-insert-interface 'ivy-bibtex) (setq org-roam-node-display-template (concat "${title:*} " (propertize "${tags:10}" 'face 'org-tag))) :config (org-roam-setup) @@ -5949,6 +5998,7 @@ Didn’t work out as I expected, so I’ve madeorg-journal-tags- [ ] Clear email inbox - [ ] Reconcile ledger - [ ] Clear [[file:~/Downloads][downloads]] and [[file:~/00-Scratch][scratch]] folders +- [ ] Process [[file:~/30-39 Life/35 Photos/35.00 Inbox/][photo inbox]] - [ ] Process [[file:../inbox.org][inbox]] - [ ] Create [[file:../recurring.org][recurring tasks]] for next week - [ ] Check agenda (-1 / +2 weeks): priorities, deadlines @@ -6342,8 +6392,7 @@ Didn’t work out as I expected, so I’ve madeorg-journal-tags"M-r" #'wdired-change-to-wdired-mode "<left>" #'dired-up-directory "<right>" #'dired-find-file - "M-<return>" #'dired-open-xdg) - (dired-async-mode)) + "M-<return>" #'dired-open-xdg)) (defun my/dired-home () "Open dired at $HOME" @@ -6416,26 +6465,34 @@ Didn’t work out as I expected, so I’ve madeorg-journal-tags"C-x C-d" nil))Display icons for files.
- -
- - - -Note -Type -- - + +ACHTUNG -This plugin is slow as hell with TRAMP or in -gnu/store+ + + +Note +Type ++ +ACHTUNG +This plugin is slow as hell with TRAMP or in +gnu/store(use-package all-the-icons-dired :straight t + :disabled t :after (dired) :if (display-graphic-p) :hook (dired-mode . (lambda () (unless (string-match-p "/gnu/store" default-directory) (all-the-icons-dired-mode))))) +(use-package nerd-icons-dired + :straight t + :after (dired) + :hook (dired-mode . (lambda () + (unless (or (file-remote-p default-directory) + (string-match-p "/gnu/store" default-directory)) + (nerd-icons-dired-mode)))))Provides stuff like
dired-open-xdg(use-package dired-open :straight t @@ -6470,6 +6527,22 @@ Didn’t work out as I expected, so I’ve madeorg-journal-tags:after (dired) :init (my-leader-def "aa" #'avy-dired-goto-line)) +dired-rsync allows using
+rsyncinstead of the default synchronous copy operation.(use-package dired-rsync + :straight t + :after (dired) + :config + (add-to-list 'global-mode-string '(:eval dired-rsync-modeline-status)) + (general-define-key + :states '(normal) + :keymaps '(dired-mode-map) + "C" #'dired-rsync + "gC" #'dired-rsync-transient + "gd" #'dired-do-copy)) + +(use-package dired-rsync-transient + :straight t + :after (dired))Subdirectories
Subdirectories are one of the interesting features of Dired. It allows displaying multiple folders on the same window.
I add my own keybindings and some extra functionality.
@@ -7417,16 +7490,16 @@ Didn’t work out as I expected, so I’ve madeorg-journal-tagsrdrview
rdrview is a command-line tool to strip webpages from clutter, extracting only parts related to the actual content. It’s a standalone port of the corresponding feature of Firefox, called Reader View.
- -
- - - -Guix dependency -- - + +rdrview -+ + + +Guix dependency ++ +rdrview +It seems like the tool isn’t available in a whole lot of package repositories, but it’s pretty easy to compile. I’ve put together a Guix definition, which one day I’ll submit to the upstream.
Integrating rdrview with Emacs
@@ -7732,16 +7805,16 @@ Didn’t work out as I expected, so I’ve madeorg-journal-tagsGetting subtitles
Finally, let’s get to transcripts.
- -
- - - -Guix dependency -- - + +python-youtube-transcript-api -+ + + +Guix dependency ++ +python-youtube-transcript-api +In principle, the YouTube API allows for downloading subtitles, but I’ve found this awesome Python script which does the same. You can install it from
pip, or here’s mine Guix definition once again.Much like the previous cases, we need to invoke the program and save the output. The WebVTT format will work well enough for our purposes. Here comes the function:
@@ -7847,16 +7920,16 @@ Didn’t work out as I expected, so I’ve madeorg-journal-tagsOpenAI Whisper is an amazing speech recognition toolkit.
The implementation by OpenAI is rather slow on my PC (speed around 0.75 on tiny.en), but whisper.cpp by Georgi Gerganov works much faster (5.9x). I’ve packaged the latter for Guix.
- -
- - - -Guix dependency -- - + +whisper-cpp -+ + + +Guix dependency ++ +whisper-cpp +Running it from Emacs
Running the program from Emacs is rather straightforward with asyncronous processes.
@@ -8204,19 +8277,19 @@ Didn’t work out as I expected, so I’ve madeorg-journal-tagsAfter all this is done, run
M-x emms-cache-set-from-mpd-allto set cache from MPD. If everything is correct, EMMS browser will be populated with MPD database.MPV
- -
- - - -Guix dependency -- -mpv -- - + +yt-dlp -+ + + +Guix dependency ++ +mpv ++ +yt-dlp +mpv is a decent media player, which has found a place in this configuration because it integrates with
youtube-dlyt-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:
@@ -9100,22 +9173,22 @@ Didn’t work out as I expected, so I’ve madeorg-journal-tagsTelega
telega.el is a Telegam client for Emacs.
- -
- - - -Guix dependency -- -tdlib-1.8.16 -- -font-gnu-unifont -- - + +font-gnu-freefont -+ + + +Guix dependency ++ +tdlib-1.8.16 ++ +font-gnu-unifont ++ +font-gnu-freefont +(use-package telega :straight t @@ -9895,7 +9968,10 @@ Didn’t work out as I expected, so I’ve madeorg-journal-tags:commands (ed))Filesystem
First, we need to create non-existing folders and remove folders that aren’t supposed to exist.
To do that, we need to find all such folders:
-(defun my/index--filesystem-tree-mapping (full-tree tree &optional active-paths) +(defvar my/index-keep-files + '(".dtrash")) + +(defun my/index--filesystem-tree-mapping (full-tree tree &optional active-paths) "Return a \"sync state\" between the filesystem and the tree. FULL-TREE and TREE are forms as defined by `my/index--tree-get'. TREE @@ -9930,10 +10006,15 @@ Didn’t work out as I expected, so I’ve madeorg-journal-tags(has-to-exist . ,folder-has-to-exist) (children . ,(append (cl-loop for f in extra-folders - collect `((path . ,f) - (exists . t) - (has-to-exist . nil) - (extra . t))) + collect + `((path . ,f) + (exists . t) + (has-to-exist + . ,(member + (file-name-nondirectory + (directory-file-name f)) + my/index-keep-files)) + (extra . t))) (my/index--filesystem-tree-mapping (alist-get :children elem) tree active-paths)))))))And generate commands from the results of the above:
@@ -10378,7 +10459,7 @@ Didn’t work out as I expected, so I’ve madeorg-journal-tags(cons (car (last (alist-get :names item))) (alist-get :path item))) nav)) - (ivy-prescient-sort-commands nil)) + (vertico-sort-function nil)) (cdr (assoc (completing-read "Index: " collection nil t) @@ -10475,16 +10556,16 @@ Didn’t work out as I expected, so I’ve madeorg-journal-tagsscreenshot.el
Tecosaur’s plugin to make beautiful code screenshots.
- -
- - - -Guix dependency -- - + +imagemagick -+ + + +Guix dependency ++ +imagemagick +(use-package screenshot :straight (:repo "tecosaur/screenshot" @@ -10556,16 +10637,16 @@ Didn’t work out as I expected, so I’ve madeorg-journal-tagshledger
is a plain-text double-entry accounting software. I use it for managing my personal finances, and thus far it’s great.
- -
- - - -Guix dependency -- - + +hledger -+ + + +Guix dependency ++ +hledger +(use-package hledger-mode :straight t @@ -10692,6 +10773,8 @@ Didn’t work out as I expected, so I’ve madeorg-journal-tags(cond ((string-match-p (rx bos (? "CAPTURE-") (= 14 num) "-" (* not-newline) ".org" eos) name) "<ORG-ROAM>") + ((string-match-p (rx "german" (* not-newline) ".org" eos) name) + "<LEARNING>") ((string-match-p (rx bos (+ num) "-" (+ num) "-" (+ num) ".org" eos) name) "<ORG-JOURNAL>") ((string-match-p (rx bos "EXWM") name) @@ -10751,13 +10834,13 @@ Didn’t work out as I expected, so I’ve madeorg-journal-tags(defun my/zone-with-select () (interactive) - (ivy-read "Zone programs" - (cl-pairlis - (cl-mapcar 'symbol-name original-zone-programs) - original-zone-programs) - :action (lambda (elem) - (setq zone-programs (vector (cdr elem))) - (zone)))) + (let ((zone-programs + (vector + (intern + (completing-read + "Zone programs" + (cl-mapcar 'symbol-name original-zone-programs)))))) + (zone)))Gource
Gource is a program that draws an animated graph of users changing the repository over time.
Although it can work without extra effort (just run
@@ -11011,30 +11094,30 @@ I’ve seen a couple of cases where people would swap their username and emagourcein a git repo), there are some tweaks that can be done:Guix settings
- -
- - - -Guix dependency -Description -- -emacs-vterm -The vterm package -- -ripgrep -A recursive search tool -- -the-silver-searcher -Another recursive search tool -- - + +texinfo -- + + + +Guix dependency +Description ++ +emacs-vterm +The vterm package ++ +ripgrep +A recursive search tool ++ +the-silver-searcher +Another recursive search tool ++ +texinfo ++ (when (fboundp #'my/format-guix-dependencies) @@ -11128,9 +11211,12 @@ I’ve seen a couple of cases where people would swap their username and ema- Completion
sudo herd restart libvirtd-
diff --git a/configs/guix/index.html b/configs/guix/index.html index a6011c4..f5df78e 100644 --- a/configs/guix/index.html +++ b/configs/guix/index.html @@ -18,13 +18,6 @@ - - - - - - - @@ -546,72 +539,72 @@- Ivy, counsel, swiper
-- ivy-rich
-- prescient
+- vertico
+- Vertico extensions
+- orderless
+- consult
+- marginalia
+- embark
- keybindings
- company
Don’t forget to install
JetBrainsMono Nerd Font.Misc software & notes
- -
- - - -Category -Guix dependency -Description -- -system -patchelf -A program to modify existsing ELF executables -- -system -glibc -A lot of stuff, including ELF interpeter and -ldd- -system -tor-client -- - -system -torsocks -- - -system -vnstat -- - - + +system -nss-certs -- + + + +Category +Guix dependency +Description ++ +system +patchelf +A program to modify existsing ELF executables ++ +system +glibc +A lot of stuff, including ELF interpeter and +ldd+ +system +tor-client ++ + +system +torsocks ++ + +system +vnstat ++ + +system +nss-certs ++ OpenVPN
- -
- - - -Category -Guix dependency -- -system -openvpn -- -system -openvpn-update-resolve-conf -- -system -openresolv -- - + +system -vpnc -+ + + +Category +Guix dependency ++ +system +openvpn ++ +system +openvpn-update-resolve-conf ++ +system +openresolv ++ +system +vpnc +Update : My censors seem to be putting sticks in the wheels of OpenVPN… Switched to Wireguard for now. It can be configured with Network Manager.
I’m not sure how to properly spin up VPN on Guix, so here is what ended I’m doing after some trial and error.
@@ -787,18 +780,18 @@ Also not necessary now. Justherd stop vpnandsudo pkill vpnwakatime-cli
- -
- - - -Note -Description -- - + +TODO -Package this for Guix -+ + + +Note +Description ++ +TODO +Package this for Guix +Before I figure out how to package this for Guix:
diff --git a/configs/index.html b/configs/index.html index d001a71..00712e8 100644 --- a/configs/index.html +++ b/configs/index.html @@ -19,13 +19,6 @@ - - - - - - - diff --git a/configs/index.xml b/configs/index.xml index c56d8e7..3dc34cf 100644 --- a/configs/index.xml +++ b/configs/index.xml @@ -12,42 +12,42 @@ https://sqrtminusone.xyz/configs/console/
Mon, 01 Jan 0001 00:00:00 +0000 https://sqrtminusone.xyz/configs/console/ -No matter from which side you approach penguins, more always come from behind A friend of mine Colors Noweb function to get colors. (let ((color (or (my/color-value name)))) (if (> quote 0) (concat "\"" color "\"") color)) (let ((val (if (ct-light-p (my/color-value name)) (my/color-value 'black) (my/color-value 'white)))) (if (eq quote 1) (concat "\"" val "\"") val)) (setq-local org-confirm-babel-evaluate nil) .profile Environment export QT_QPA_PLATFORMTHEME="qt5ct" export QT_AUTO_SCREEN_SCALE_FACTOR=0 Set ripgrep config path +<blockquote> <p>No matter from which side you approach penguins, more always come from behind</p> </blockquote> <ul> <li>A friend of mine</li> </ul> <h2 id="colors">Colors</h2> <p>Noweb function to get colors.</p> <p><a id="code-snippet--get-color"></a></p> <div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">let</span> ((<span style="color:#19177c">color</span> (<span style="color:#008000">or</span> (<span style="color:#19177c">my/color-value</span> <span style="color:#19177c">name</span>)))) </span></span><span style="display:flex;"><span> (<span style="color:#008000">if</span> (<span style="color:#00f">></span> <span style="color:#008000">quote</span> <span style="color:#666">0</span>) </span></span><span style="display:flex;"><span> (<span style="color:#00f">concat</span> <span style="color:#ba2121">"\""</span> <span style="color:#19177c">color</span> <span style="color:#ba2121">"\""</span>) </span></span><span style="display:flex;"><span> <span style="color:#19177c">color</span>)) </span></span></code></pr Desktop https://sqrtminusone.xyz/configs/desktop/Mon, 01 Jan 0001 00:00:00 +0000 https://sqrtminusone.xyz/configs/desktop/ -My general desktop environment configuration. Parts prefixed with (OFF) are not used, but kept for historic purposes. For some reason GitHub’s org renderer ignores TODO status, hence such a prefix. Round brackets instead of square ones to prevent GitHub’s org renderer from screwing up. References: A few cases of literate configuration. A few interesting ways in which literate configuration is used in this file. Some remarks Removed features: Feature Last commit rofi-buku e22476b0cc6315e104e5ce4de5559a61c830c429 Global customization Colors I used to define color codes here (see previous version of the file), now I just get colors from the current Emacs theme. +<p>My general desktop environment configuration.</p> <p>Parts prefixed with (OFF) are not used, but kept for historic purposes. For some reason GitHub’s org renderer ignores TODO status, hence such a prefix. Round brackets instead of square ones to prevent GitHub’s org renderer from screwing up.</p> <p>References:</p> <ul> <li><a href="https://sqrtminusone.xyz/posts/2022-02-12-literate/">A few cases of literate configuration</a>. A few interesting ways in which literate configuration is used in this file.</li> </ul> <h2 id="some-remarks">Some remarks</h2> <p>Removed features:</p> Emacs config https://sqrtminusone.xyz/configs/emacs/Mon, 01 Jan 0001 00:00:00 +0000 https://sqrtminusone.xyz/configs/emacs/ -One day we won’t hate one another, no young boy will march to war and I will clean up my Emacs config. But that day isn’t today. Me, <2021-05-27 Thu 17:35> in commit 93a0573. Adapted from The Dark Element - “The Pallbearer Walks Alone”. T_T Introduction My configuration of GNU Emacs, an awesome text editor piece of software that can do almost anything. At the moment of writing this, that “almost anything” includes: +<blockquote> <p>One day we won’t hate one another, no young boy will march to war and I will clean up my Emacs config. But that day isn’t today.</p> </blockquote> <ul> <li>Me, <span class="timestamp-wrapper"><span class="timestamp"><2021-05-27 Thu 17:35> </span></span> in commit 93a0573. Adapted from <a href="https://www.youtube.com/watch?v=pIdBinlW40E">The Dark Element - “The Pallbearer Walks Alone”</a>. T_T</li> </ul> <h2 id="introduction">Introduction</h2> <p>My configuration of <a href="https://www.gnu.org/software/emacs/">GNU Emacs</a>, an awesome <del>text editor</del> piece of software that can do almost anything.</p> Guix https://sqrtminusone.xyz/configs/guix/Mon, 01 Jan 0001 00:00:00 +0000 https://sqrtminusone.xyz/configs/guix/ -GNU Guix is (1) a transactional package manager and (2) a GNU/Linux distribution. My personal selling points are declarative package configuration and transactional upgrades. References: Official help System Crafters wiki Pjotr Prins’ Guix notes Davil Wilson’s YouTube series Profiles A profile is a way to group Guix packages. Amongst its advantages, profiles can be defined by manifests, which in turn can be stored in VCS. References: Guix Profiles in Practice Activate profiles A script to activate guix profiles. +<p><a href="https://guix.gnu.org/">GNU Guix</a> is (1) a transactional package manager and (2) a GNU/Linux distribution.</p> <p>My personal selling points are declarative package configuration and transactional upgrades.</p> <p>References:</p> <ul> <li><a href="https://guix.gnu.org/en/help/">Official help</a></li> <li><a href="https://wiki.systemcrafters.cc/guix">System Crafters wiki</a></li> <li><a href="https://gitlab.com/pjotrp/guix-notes">Pjotr Prins’ Guix notes</a></li> <li><a href="https://www.youtube.com/watch?v=iBaqOK75cho&list=PLEoMzSkcN8oNxnj7jm5V2ZcGc52002pQU">Davil Wilson’s YouTube series</a></li> </ul> <h2 id="profiles">Profiles</h2> <p>A profile is a way to group Guix packages. Amongst its advantages, profiles can be defined by manifests, which in turn can be stored in VCS.</p> Mon, 01 Jan 0001 00:00:00 +0000 https://sqrtminusone.xyz/configs/mail/ -:TOC: :include all :depth 3 My email configration. Currently I use lieer to fetch emails from Gmail, davmail & offlineimap to fetch emails from MS Exchange, notmuch to index, msmtp to send emails. Also using notmuch frontend from Emacs. My problem with any particular mail setup was that I use Gmail labels quite extensively, and handling these over IMAP is rather awkward. Notmuch seems to be the only software that provides the same first-class support for labels. +<p>:TOC: :include all :depth 3</p> <p>My email configration. Currently I use <a href="https://github.com/gauteh/lieer">lieer</a> to fetch emails from Gmail, <a href="http://davmail.sourceforge.net/">davmail</a> & <a href="http://www.offlineimap.org/">offlineimap</a> to fetch emails from MS Exchange, <a href="https://notmuchmail.org/">notmuch</a> to index, <a href="https://marlam.de/msmtp/">msmtp</a> to send emails. Also using notmuch frontend from Emacs.</p> <p>My problem with any particular mail setup was that I use Gmail labels quite extensively, and handling these over IMAP is rather awkward. Notmuch seems to be the only software that provides the same first-class support for labels.</p> - diff --git a/configs/mail/index.html b/configs/mail/index.html index 8caf7b0..07790e2 100644 --- a/configs/mail/index.html +++ b/configs/mail/index.html @@ -18,13 +18,6 @@ - - - - - - - @@ -92,16 +85,16 @@
My dotfiles https://sqrtminusone.xyz/configs/readme/Mon, 01 Jan 0001 00:00:00 +0000 https://sqrtminusone.xyz/configs/readme/ -These are my GNU/Linux configuration files. View at GitHub. I use the literate configuration strategy via Emacs’ Org Mode wherever possible. It has its pros and cons, but I find it pretty nice to keep the configs interweaved with comments in a handful of files. The files themselves are managed and deployed via yadm, although I use Org Mode for things like config templating. My current GNU/Linux distribution is GNU Guix. +<figure><img src="https://sqrtminusone.xyz/ox-hugo/works-on-my-machine.svg"> </figure> <p>These are my GNU/Linux configuration files. <a href="https://github.com/SqrtMinusOne/dotfiles">View at GitHub</a>.</p> <p>I use the <a href="https://leanpub.com/lit-config/read">literate configuration</a> strategy via Emacs’ <a href="https://orgmode.org/">Org Mode</a> wherever possible. It has its pros and cons, but I find it pretty nice to keep the configs interweaved with comments in a handful of files.</p> <p>The files themselves are managed and deployed via <a href="https://yadm.io/">yadm</a>, although I use Org Mode for things like config templating.</p> Lieer
- -
- - - -Guix dependency -- - + +python-lieer -+ + + +Guix dependency ++ +python-lieer +Lieer is a program to link up Gmail and notmuch. Basically, it downloads mail from Gmail via API, stores them in Maildir, and synchronizes labels with notmuch.
I have a separate directory in my
@@ -134,16 +127,16 @@Shepherd service is defined in Desktop.org.
OfflineIMAP
- -
- - - -Guix dependency -- - + +offlineimap -+ + + +Guix dependency ++ +offlineimap +OfflineIMAP is a program that can synchronize IMAP mailbox and Maildir. Lieer does everything by itself, but my pirate Exchange IMAP needs this program. There is also isync, but there I had some weird issues with duplicate UIDs, which don’t occur for OfflineIMAP.
I have a few options for setting a username and password. First, I can run
@@ -175,19 +168,19 @@ sslcacertfile = /etc/ssl/certs/ca-certificates.crtpassinremotepasswordeval, and while this will work, it will keep my keyring unlocked because I want to runofflineimapevery couple of minutes.Notmuch
- -
- - - -Guix dependency -- -notmuch -- - + +parallel -+ + + +Guix dependency ++ +notmuch ++ +parallel +Notmuch is an email indexer program, which handles labels in a way somewhat similar to Gmail. It also provides a frontend for Emacs, but it’s not the only one available.
Config
@@ -224,66 +217,66 @@So, here are the rules which match tags & folders:
- -
- - - -tag -folder -- -inbox -INBOX -- -sent -Sent -- -spam -Junk -- -trash -Trash -- -job.digital -Job_Digital -- -job.digital.docs -Job_Digital.Docs -- -job.digital.support -Job_Digital.Support -- -job.digital.superservice -Job_Digital.Superservice -- -job.digital.applicants -Job_Digital.Applicants -- -job.digital.testers -Job_Digital.Testers -- -job.moevm -Job_Moevm -- -etu -Etu -- - + +etu.grad-school -Etu.Grad_School -+ + + +tag +folder ++ +inbox +INBOX ++ +sent +Sent ++ +spam +Junk ++ +trash +Trash ++ +job.digital +Job_Digital ++ +job.digital.docs +Job_Digital.Docs ++ +job.digital.support +Job_Digital.Support ++ +job.digital.superservice +Job_Digital.Superservice ++ +job.digital.applicants +Job_Digital.Applicants ++ +job.digital.testers +Job_Digital.Testers ++ +job.moevm +Job_Moevm ++ +etu +Etu ++ +etu.grad-school +Etu.Grad_School +And below is a noweb function, which generates the following commands for notmuch to execute:
@@ -406,16 +399,16 @@ Remove
TAGfrom emails which are outside the matchingPATH(job "*/5 * * * * " "~/bin/scripts/check-email")MSMTP
- -
- - - -Guix dependency -- - + +msmtp -+ + + +Guix dependency ++ +msmtp +Sending emails can be done with MSMTP. It automatially chooses the email address and server based on the contents of the message, which is handy if there are multiple mailboxes to be managed.
defaults @@ -448,16 +441,16 @@ RemoveTAGfrom emails which are outside the matchingPATHpasswordeval "pass show Job/Digital/Email/pvkorytov@etu.ru | head -n 1"Emacs
- -
- - - -Guix dependency -- - + +emacs-notmuch -+ + + +Guix dependency ++ +emacs-notmuch +Finally, Emacs configuration. Let’s start with some variables:
(setq user-mail-address "thexcloud@gmail.com") @@ -522,62 +515,62 @@ RemoveTAGfrom emails which are outside the matchingPATHnotmuch-message-mode 0 "mail")- -
- - - -Root tag -Prefix -Keybinding description -- -main -m -thexcloud@gmail.com -- -progin -p -progin6304@gmail.com -- - + +pvkorytov -v -pvkorytov@etu.ru -+ + + +Root tag +Prefix +Keybinding description ++ +main +m +thexcloud@gmail.com ++ +progin +p +progin6304@gmail.com ++ +pvkorytov +v +pvkorytov@etu.ru +- -
- - - -Tag -Prefix -Name -- -inbox -i -inbox -- -unread -u -unread -- -sent -s -sent -- - + +- a -all mail -+ + + +Tag +Prefix +Name ++ +inbox +i +inbox ++ +unread +u +unread ++ +sent +s +sent ++ ++ a +all mail +The following formats the tables above to a proper syntax for
@@ -617,6 +610,7 @@ Removesetq notmuch-saved-searches:TAGfrom emails which are outside the matchingPATH (sign) (encrypt))))Tuning signature
+Edit : Apparently this was a feature, not a bug. Disabling this.
By default,
message.elinserts the signature at the bottom of the message, like this:<message text> @@ -640,8 +634,9 @@ RemoveTAGfrom emails which are outside the matchingPATH> StuffSo here I modifiy the citation function to insert the signature like in the second example for
certain cases.Edit : for consistency’s sake, I’ll make the signature on the top for all cases.
+Edit : see above
(defun my/message-insert-signature-need-on-top () - t) + nil)Then advice the
notmuch-mua-replyfunction:(defun my/message-maybe-fix-signature (&rest _) (when (my/message-insert-signature-need-on-top) diff --git a/configs/readme/index.html b/configs/readme/index.html index 17ee4a6..acfb2e8 100644 --- a/configs/readme/index.html +++ b/configs/readme/index.html @@ -18,13 +18,6 @@ - - - - - - - diff --git a/emacs-packages/index.html b/emacs-packages/index.html index ed5bffd..80e614f 100644 --- a/emacs-packages/index.html +++ b/emacs-packages/index.html @@ -18,13 +18,6 @@ - - - - - - - @@ -149,13 +142,13 @@- Git repo: https://github.com/SqrtMinusOne/elfeed-summary
- Package at MELPA: https://melpa.org/#/elfeed-summary
-password-store-ivy
-Auto-type fields from pass entries. Essentially, this is a reimplementation of rofi-pass with Ivy which I made after migrating to EXWM. I used to use the package with ivy-posframe, but the latter turned out to be unnecessary.
-I might archive this if I switch to a different completion framework (or even ditch the WM), which is why I’m not submitting it anywhere. But the package is pretty simple.
+password-store-completion
+Auto-type fields from pass entries. Essentially, this is a reimplementation of rofi-pass with
+completing-readwhich I made after migrating to EXWM.It was called
password-store-ivybefore, but I’ve changed the name after I switched to vertico and addedcompleting-read(+ embark integration) to the package.-
- Package name:
-password-store-ivy- Homepage: https://sqrtminusone.xyz/packages/password-store-ivy
-- Git repo: https://github.com/SqrtMinusOne/password-store-ivy
+- Package name:
+password-store-completion- Homepage: https://sqrtminusone.xyz/packages/password-store-completion
+- Git repo: https://github.com/SqrtMinusOne/password-store-completion
Org Journal Tags
The package extends org-journal by introducing “tags” that reference a journal section or subset thereof. These tags can be later queried. The package also provides a UI with statistics about tags and things like records on this day a year ago.
@@ -215,7 +208,7 @@- Elfeed Sync
- avy-dired
- Elfeed Summary
-- password-store-ivy
+- password-store-completion
- Org Journal Tags
- EXWM Modeline
- perspective-exwm
diff --git a/index.html b/index.html index 61aec03..8313e11 100644 --- a/index.html +++ b/index.html @@ -1,6 +1,6 @@ - + @@ -20,13 +20,6 @@ - - - - - - - diff --git a/index.xml b/index.xml index 261419b..296ed8c 100644 --- a/index.xml +++ b/index.xml @@ -37,55 +37,55 @@ </span></span><span style="display:flex;"><span>(<span style="color:#008000">setq</span> <span style="color:#19177c">eshell-atuin-history-format</span> <span style="color:#ba2121">"%-160c %t + %d"</span>) </span></span></code></pre></div><p>The available flags are:</p> <table> -<thead> -<tr> -<th>Flag</th> -<th>atuin field (see <code>help atuin search</code>)</th> -<th>Required</th> -</tr> -</thead> -<tbody> -<tr> -<td>%t</td> -<td><code>time</code></td> -<td><strong>+</strong></td> -</tr> -<tr> -<td>%c</td> -<td><code>command</code></td> -<td><strong>+</strong></td> -</tr> -<tr> -<td>%e</td> -<td><code>exit</code></td> -<td></td> -</tr> -<tr> -<td>%d</td> -<td><code>duration</code></td> -<td></td> -</tr> -<tr> -<td>%i</td> -<td><code>directory</code></td> -<td></td> -</tr> -<tr> -<td>%u</td> -<td><code>user</code></td> -<td></td> -</tr> -<tr> -<td>%h</td> -<td><code>host</code></td> -<td></td> -</tr> -<tr> -<td>%r</td> -<td><code>relativetime</code></td> -<td></td> -</tr> -</tbody> + <thead> + <tr> + <th style="text-align: left">Flag</th> + <th style="text-align: left">atuin field (see <code>help atuin search</code>)</th> + <th style="text-align: left">Required</th> + </tr> + </thead> + <tbody> + <tr> + <td style="text-align: left">%t</td> + <td style="text-align: left"><code>time</code></td> + <td style="text-align: left"><strong>+</strong></td> + </tr> + <tr> + <td style="text-align: left">%c</td> + <td style="text-align: left"><code>command</code></td> + <td style="text-align: left"><strong>+</strong></td> + </tr> + <tr> + <td style="text-align: left">%e</td> + <td style="text-align: left"><code>exit</code></td> + <td style="text-align: left"></td> + </tr> + <tr> + <td style="text-align: left">%d</td> + <td style="text-align: left"><code>duration</code></td> + <td style="text-align: left"></td> + </tr> + <tr> + <td style="text-align: left">%i</td> + <td style="text-align: left"><code>directory</code></td> + <td style="text-align: left"></td> + </tr> + <tr> + <td style="text-align: left">%u</td> + <td style="text-align: left"><code>user</code></td> + <td style="text-align: left"></td> + </tr> + <tr> + <td style="text-align: left">%h</td> + <td style="text-align: left"><code>host</code></td> + <td style="text-align: left"></td> + </tr> + <tr> + <td style="text-align: left">%r</td> + <td style="text-align: left"><code>relativetime</code></td> + <td style="text-align: left"></td> + </tr> + </tbody> </table> <p>See <a href="https://www.gnu.org/software/emacs/manual/html_node/elisp/Custom-Format-Strings.html">(emacs) Custom Format Strings</a> for information on the general <code>format-spec</code> syntax.</p> <p>I suspect the package might be slow if your history has a lot of records (I haven’t checked yet). In this case, it might be worth setting a limit:</p> @@ -186,70 +186,70 @@ </span></span><span style="display:flex;"><span>- [2023-12-13 Wed 19:30]--[2023-12-13 Wed 19:40] => 0:10 : DONE Thing 1 </span></span></code></pre></div><p>The following built-in predicates are currently available:</p> <table> -<thead> -<tr> -<th>Name</th> -<th>Comment</th> -<th>Customization variables</th> -</tr> -</thead> -<tbody> -<tr> -<td>Category</td> -<td></td> -<td></td> -</tr> -<tr> -<td>Org file</td> -<td></td> -<td></td> -</tr> -<tr> -<td>Outline path</td> -<td></td> -<td></td> -</tr> -<tr> -<td>Tags</td> -<td>Sorted alphabetically</td> -<td></td> -</tr> -<tr> -<td>Headline</td> -<td>Last item of the outline path</td> -<td></td> -</tr> -<tr> -<td>Day</td> -<td></td> -<td><code>org-clock-agg-day-format</code></td> -</tr> -<tr> -<td>Week</td> -<td></td> -<td><code>org-clock-agg-week-format</code></td> -</tr> -<tr> -<td>Month</td> -<td></td> -<td><code>org-clock-agg-month-format</code></td> -</tr> -<tr> -<td>TODO keyword</td> -<td></td> -<td></td> -</tr> -<tr> -<td>Is done</td> -<td></td> -<td></td> -</tr> -<tr> -<td>Selected props</td> -<td></td> -<td><code>org-clock-agg-properties</code></td> -</tr> -</tbody> + <thead> + <tr> + <th style="text-align: left">Name</th> + <th style="text-align: left">Comment</th> + <th style="text-align: left">Customization variables</th> + </tr> + </thead> + <tbody> + <tr> + <td style="text-align: left">Category</td> + <td style="text-align: left"></td> + <td style="text-align: left"></td> + </tr> + <tr> + <td style="text-align: left">Org file</td> + <td style="text-align: left"></td> + <td style="text-align: left"></td> + </tr> + <tr> + <td style="text-align: left">Outline path</td> + <td style="text-align: left"></td> + <td style="text-align: left"></td> + </tr> + <tr> + <td style="text-align: left">Tags</td> + <td style="text-align: left">Sorted alphabetically</td> + <td style="text-align: left"></td> + </tr> + <tr> + <td style="text-align: left">Headline</td> + <td style="text-align: left">Last item of the outline path</td> + <td style="text-align: left"></td> + </tr> + <tr> + <td style="text-align: left">Day</td> + <td style="text-align: left"></td> + <td style="text-align: left"><code>org-clock-agg-day-format</code></td> + </tr> + <tr> + <td style="text-align: left">Week</td> + <td style="text-align: left"></td> + <td style="text-align: left"><code>org-clock-agg-week-format</code></td> + </tr> + <tr> + <td style="text-align: left">Month</td> + <td style="text-align: left"></td> + <td style="text-align: left"><code>org-clock-agg-month-format</code></td> + </tr> + <tr> + <td style="text-align: left">TODO keyword</td> + <td style="text-align: left"></td> + <td style="text-align: left"></td> + </tr> + <tr> + <td style="text-align: left">Is done</td> + <td style="text-align: left"></td> + <td style="text-align: left"></td> + </tr> + <tr> + <td style="text-align: left">Selected props</td> + <td style="text-align: left"></td> + <td style="text-align: left"><code>org-clock-agg-properties</code></td> + </tr> + </tbody> </table> <p>Ensure to use <code>setopt</code> to set the variables; otherwise, the customization logic will not be invoked:</p> <div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#19177c">setopt</span> <span style="color:#19177c">org-clock-agg-properties</span> <span style="color:#666">'</span>(<span style="color:#ba2121">"PROJECT_NAME"</span>)) @@ -2783,50 +2783,50 @@ To mark such entries as read, run <code>M-x elfeed-sync-read-ttrss-old< <p>Groups can also be generated automatically.</p> <p>Available keybindings in the summary mode:</p> <table> -<thead> -<tr> -<th>Keybinding</th> -<th>Command</th> -<th>Description</th> -</tr> -</thead> -<tbody> -<tr> -<td><code>RET</code></td> -<td><code>elfeed-summary--action</code></td> -<td>Open thing under the cursor (a feed, search, or a group). If there is at least one unread item, it will show only unread items.</td> -</tr> -<tr> -<td><code>M-RET</code></td> -<td><code>elfeed-summary--action-show-read</code></td> -<td>Open thing under the cursor, but always include read items</td> -</tr> -<tr> -<td><code>q</code></td> -<td>…</td> -<td>Quit the summary buffer</td> -</tr> -<tr> -<td><code>r</code></td> -<td><code>elfeed-summary--refresh</code></td> -<td>Refresh the summary buffer</td> -</tr> -<tr> -<td><code>R</code></td> -<td><code>elfeed-summary-update</code></td> -<td>Run update for elfeed feeds</td> -</tr> -<tr> -<td><code>u</code></td> -<td><code>elfeed-summary-toggle-only-unread</code></td> -<td>Toggle showing only unread entries</td> -</tr> -<tr> -<td><code>U</code></td> -<td><code>elfeed-summary--action-mark-read</code></td> -<td>Mark everything in the entry under the cursor as read</td> -</tr> -</tbody> + <thead> + <tr> + <th style="text-align: left">Keybinding</th> + <th style="text-align: left">Command</th> + <th style="text-align: left">Description</th> + </tr> + </thead> + <tbody> + <tr> + <td style="text-align: left"><code>RET</code></td> + <td style="text-align: left"><code>elfeed-summary--action</code></td> + <td style="text-align: left">Open thing under the cursor (a feed, search, or a group). If there is at least one unread item, it will show only unread items.</td> + </tr> + <tr> + <td style="text-align: left"><code>M-RET</code></td> + <td style="text-align: left"><code>elfeed-summary--action-show-read</code></td> + <td style="text-align: left">Open thing under the cursor, but always include read items</td> + </tr> + <tr> + <td style="text-align: left"><code>q</code></td> + <td style="text-align: left">…</td> + <td style="text-align: left">Quit the summary buffer</td> + </tr> + <tr> + <td style="text-align: left"><code>r</code></td> + <td style="text-align: left"><code>elfeed-summary--refresh</code></td> + <td style="text-align: left">Refresh the summary buffer</td> + </tr> + <tr> + <td style="text-align: left"><code>R</code></td> + <td style="text-align: left"><code>elfeed-summary-update</code></td> + <td style="text-align: left">Run update for elfeed feeds</td> + </tr> + <tr> + <td style="text-align: left"><code>u</code></td> + <td style="text-align: left"><code>elfeed-summary-toggle-only-unread</code></td> + <td style="text-align: left">Toggle showing only unread entries</td> + </tr> + <tr> + <td style="text-align: left"><code>U</code></td> + <td style="text-align: left"><code>elfeed-summary--action-mark-read</code></td> + <td style="text-align: left">Mark everything in the entry under the cursor as read</td> + </tr> + </tbody> </table> <p>The standard keybindings from <a href="https://magit.vc/manual/magit.html#Sections">magit-section</a> are also available, for instance <code>TAB</code> toggles the visibility of the current group. <a href="https://github.com/emacs-evil/evil">evil-mode</a> is also supported.</p> <h2 id="configuration">Configuration</h2> @@ -3145,39 +3145,44 @@ assigned to group with the least amount of members.</li>- -
@@ -3353,33 +3364,33 @@ assigned to group with the least amount of members.</li> </span></span><span style="display:flex;"><span>#+end_src </span></span></code></pre></div><p><code>sunwait</code> is declared in an Org table that looks like that:</p> <table> -<thead> -<tr> -<th>Category</th> -<th>Guix dependency</th> -</tr> -</thead> -<tbody> -<tr> -<td>desktop-polybar</td> -<td>sunwait</td> -</tr> -</tbody> + <thead> + <tr> + <th style="text-align: left">Category</th> + <th style="text-align: left">Guix dependency</th> + </tr> + </thead> + <tbody> + <tr> + <td style="text-align: left">desktop-polybar</td> + <td style="text-align: left">sunwait</td> + </tr> + </tbody> </table> <p>Such tables are spread through my <code>Desktop.org</code>, for instance, here is another one for a polybar module that depends on dateutils:</p> <table> -<thead> -<tr> -<th>Category</th> -<th>Guix dependency</th> -</tr> -</thead> -<tbody> -<tr> -<td>desktop-polybar</td> -<td>dateutils</td> -</tr> -</tbody> + <thead> + <tr> + <th style="text-align: left">Category</th> + <th style="text-align: left">Guix dependency</th> + </tr> + </thead> + <tbody> + <tr> + <td style="text-align: left">desktop-polybar</td> + <td style="text-align: left">dateutils</td> + </tr> + </tbody> </table> <p>Thus I made a function that extracts packages from all such tables from the current Org buffer. The rules are as follows:</p> <ul> @@ -3498,28 +3509,28 @@ assigned to group with the least amount of members.</li> <div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>block1 block2 </span></span></code></pre></div><p>And set the foreground and background colors like that:</p> <table> -<thead> -<tr> -<th></th> -<th>block1</th> -<th>glyph</th> -<th>block2</th> -</tr> -</thead> -<tbody> -<tr> -<td>foreground</td> -<td>F1</td> -<td>B2</td> -<td>F2</td> -</tr> -<tr> -<td>background</td> -<td>B1</td> -<td>B1</td> -<td>B2</td> -</tr> -</tbody> + <thead> + <tr> + <th style="text-align: left"></th> + <th style="text-align: left">block1</th> + <th style="text-align: left">glyph</th> + <th style="text-align: left">block2</th> + </tr> + </thead> + <tbody> + <tr> + <td style="text-align: left">foreground</td> + <td style="text-align: left">F1</td> + <td style="text-align: left">B2</td> + <td style="text-align: left">F2</td> + </tr> + <tr> + <td style="text-align: left">background</td> + <td style="text-align: left">B1</td> + <td style="text-align: left">B1</td> + <td style="text-align: left">B2</td> + </tr> + </tbody> </table> <p>So, that’s a start. First, let’s define the glyph symbols in the polybar config:</p> <div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">[glyph]</span> @@ -3818,35 +3829,35 @@ timestamps by their date.</li> <p>Pressing <code>RET</code> opens the corresponding org-journal entry.</p> <p>Pressing <code>s</code> opens the query constructor buffer. If opened from inside the query results, the query constructor has 4 additional options:</p> <table> -<thead> -<tr> -<th>Command</th> -<th>Set operation</th> -<th>Description</th> -</tr> -</thead> -<tbody> -<tr> -<td><strong>Union</strong></td> -<td>old ∪ new</td> -<td>Add records of the new query to the displayed records</td> -</tr> -<tr> -<td><strong>Intersection</strong></td> -<td>old ∩ new</td> -<td>Leave only those records that are both displayed and in the new query</td> -</tr> -<tr> -<td><strong>Difference from current</strong></td> -<td>old \ new</td> -<td>Exclude records of the new query from the displayed records</td> -</tr> -<tr> -<td><strong>Difference to current</strong></td> -<td>new \ old</td> -<td>Exclude displayed records from ones of the new query</td> -</tr> -</tbody> + <thead> + <tr> + <th style="text-align: left">Command</th> + <th style="text-align: left">Set operation</th> + <th style="text-align: left">Description</th> + </tr> + </thead> + <tbody> + <tr> + <td style="text-align: left"><strong>Union</strong></td> + <td style="text-align: left">old ∪ new</td> + <td style="text-align: left">Add records of the new query to the displayed records</td> + </tr> + <tr> + <td style="text-align: left"><strong>Intersection</strong></td> + <td style="text-align: left">old ∩ new</td> + <td style="text-align: left">Leave only those records that are both displayed and in the new query</td> + </tr> + <tr> + <td style="text-align: left"><strong>Difference from current</strong></td> + <td style="text-align: left">old \ new</td> + <td style="text-align: left">Exclude records of the new query from the displayed records</td> + </tr> + <tr> + <td style="text-align: left"><strong>Difference to current</strong></td> + <td style="text-align: left">new \ old</td> + <td style="text-align: left">Exclude displayed records from ones of the new query</td> + </tr> + </tbody> </table> <p>Thus it is possible to make any query that can be described as a sequence of such set operations.</p> <h2 id="advanced-usage">Advanced usage</h2> @@ -4538,74 +4549,74 @@ interval = 1 <h2 id="alternatives">Alternatives</h2> <p>There is a number of packages with a similar purpose, here is a rough comparison of features:</p> <table> -<thead> -<tr> -<th>Package</th> -<th>3rd party integrations</th> -<th>Control method (1)</th> -<th>Persistent history</th> -<th>Persistent state</th> -<th>Notifications</th> -</tr> -</thead> -<tbody> -<tr> -<td><a href="https://github.com/SqrtMinusOne/pomm.el">pomm.el</a></td> -<td>-</td> -<td>transient.el</td> -<td>CSV</td> -<td>+</td> -<td>alert.el + sounds</td> -</tr> -<tr> -<td><a href="https://github.com/marcinkoziej/org-pomodoro/tree/master">org-pomodoro</a></td> -<td>Org Mode!</td> -<td>via Org commands</td> -<td>via Org mode</td> -<td>-</td> -<td>alert.el + sounds</td> -</tr> -<tr> -<td><a href="https://github.com/TatriX/pomidor/">pomidor</a></td> -<td>-</td> -<td>self-cooked interactive buffer</td> -<td>custom delimited format?</td> -<td>+, but saving on-demand</td> -<td>alert.el + sounds</td> -</tr> -<tr> -<td><a href="https://github.com/baudtack/pomodoro.el/">pomodoro.el</a></td> -<td>-</td> -<td>-</td> -<td>-</td> -<td>-</td> -<td>notifications.el + sounds</td> -</tr> -<tr> -<td><a href="https://github.com/konr/tomatinho/">tomatinho</a></td> -<td>-</td> -<td>self-cooked interactive buffer</td> -<td>-</td> -<td>-</td> -<td>message + sounds</td> -</tr> -<tr> -<td><a href="https://github.com/ferfebles/redtick">redtick</a></td> -<td>-</td> -<td>mode-line icon</td> -<td>+</td> -<td>-</td> -<td>sounds</td> -</tr> -<tr> -<td><a href="https://github.com/abo-abo/gtk-pomodoro-indicator">gtk-pomodoro-indicator</a></td> -<td>GTK panel</td> -<td>CLI</td> -<td>-</td> -<td>-, but the program is independent of Emacs</td> -<td>GTK notifications</td> -</tr> -</tbody> + <thead> + <tr> + <th style="text-align: left">Package</th> + <th style="text-align: left">3rd party integrations</th> + <th style="text-align: left">Control method (1)</th> + <th style="text-align: left">Persistent history</th> + <th style="text-align: left">Persistent state</th> + <th style="text-align: left">Notifications</th> + </tr> + </thead> + <tbody> + <tr> + <td style="text-align: left"><a href="https://github.com/SqrtMinusOne/pomm.el">pomm.el</a></td> + <td style="text-align: left">-</td> + <td style="text-align: left">transient.el</td> + <td style="text-align: left">CSV</td> + <td style="text-align: left">+</td> + <td style="text-align: left">alert.el + sounds</td> + </tr> + <tr> + <td style="text-align: left"><a href="https://github.com/marcinkoziej/org-pomodoro/tree/master">org-pomodoro</a></td> + <td style="text-align: left">Org Mode!</td> + <td style="text-align: left">via Org commands</td> + <td style="text-align: left">via Org mode</td> + <td style="text-align: left">-</td> + <td style="text-align: left">alert.el + sounds</td> + </tr> + <tr> + <td style="text-align: left"><a href="https://github.com/TatriX/pomidor/">pomidor</a></td> + <td style="text-align: left">-</td> + <td style="text-align: left">self-cooked interactive buffer</td> + <td style="text-align: left">custom delimited format?</td> + <td style="text-align: left">+, but saving on-demand</td> + <td style="text-align: left">alert.el + sounds</td> + </tr> + <tr> + <td style="text-align: left"><a href="https://github.com/baudtack/pomodoro.el/">pomodoro.el</a></td> + <td style="text-align: left">-</td> + <td style="text-align: left">-</td> + <td style="text-align: left">-</td> + <td style="text-align: left">-</td> + <td style="text-align: left">notifications.el + sounds</td> + </tr> + <tr> + <td style="text-align: left"><a href="https://github.com/konr/tomatinho/">tomatinho</a></td> + <td style="text-align: left">-</td> + <td style="text-align: left">self-cooked interactive buffer</td> + <td style="text-align: left">-</td> + <td style="text-align: left">-</td> + <td style="text-align: left">message + sounds</td> + </tr> + <tr> + <td style="text-align: left"><a href="https://github.com/ferfebles/redtick">redtick</a></td> + <td style="text-align: left">-</td> + <td style="text-align: left">mode-line icon</td> + <td style="text-align: left">+</td> + <td style="text-align: left">-</td> + <td style="text-align: left">sounds</td> + </tr> + <tr> + <td style="text-align: left"><a href="https://github.com/abo-abo/gtk-pomodoro-indicator">gtk-pomodoro-indicator</a></td> + <td style="text-align: left">GTK panel</td> + <td style="text-align: left">CLI</td> + <td style="text-align: left">-</td> + <td style="text-align: left">-, but the program is independent of Emacs</td> + <td style="text-align: left">GTK notifications</td> + </tr> + </tbody> </table> <p>Be sure to check those out if this one doesn’t quite fit your workflow!</p> <p>(1) Means of timer control with exception to Emacs interactive commands</p> diff --git a/packages/avy-dired/index.html b/packages/avy-dired/index.html index bb416cb..1066b02 100644 --- a/packages/avy-dired/index.html +++ b/packages/avy-dired/index.html @@ -18,13 +18,6 @@ - - - - - - - diff --git a/packages/biome/index.html b/packages/biome/index.html index 7dba8f7..98285d7 100644 --- a/packages/biome/index.html +++ b/packages/biome/index.html @@ -18,13 +18,6 @@ - - - - - - - diff --git a/packages/elfeed-summary/index.html b/packages/elfeed-summary/index.html index 3263e72..1a3f71e 100644 --- a/packages/elfeed-summary/index.html +++ b/packages/elfeed-summary/index.html @@ -18,13 +18,6 @@ - - - - - - - @@ -110,50 +103,50 @@password-store-ivy - https://sqrtminusone.xyz/packages/password-store-ivy/ +password-store-completion + https://sqrtminusone.xyz/packages/password-store-completion/Sun, 13 Feb 2022 00:00:00 +0000 -https://sqrtminusone.xyz/packages/password-store-ivy/ +https://sqrtminusone.xyz/packages/password-store-completion/ - <p>A <a href="https://www.passwordstore.org/">pass</a> frontend based on <a href="https://github.com/abo-abo/swiper#ivy">Ivy</a>, made primarily to use with <a href="https://github.com/ch11ng/exwm">EXWM</a> and <a href="https://github.com/tumashu/ivy-posframe">ivy-posframe</a>. Types fields from entries.</p> -<p>Also take a look at Nicolas Petton’s <a href="https://github.com/NicolasPetton/pass">pass</a>, <code>password-store-ivy</code> is designed as complementary to the Nicolas’ package.</p> -<p>This package is made with Ivy because I need some fine-tuning like actions and turning off sorting in some completions, and Ivy happens to be the completion system I’m using now.</p> + <p>A completion-based pass frontend inspired by <a href="https://github.com/carnager/rofi-pass">rofi-pass</a>. Integrates with <a href="https://github.com/abo-abo/swiper">Ivy</a> or <a href="https://github.com/oantolin/embark">Embark</a>.</p> +<p>The main purpose is typing passwords with <code>xdotool</code> (useful in <a href="https://github.com/emacs-exwm/exwm">EXWM</a>).</p> +<p>Also take a look at Nicolas Petton’s <a href="https://github.com/NicolasPetton/pass">pass</a>. <code>password-store-completion</code> is designed as complementary to Nicolas’ package.</p> <h2 id="installation">Installation</h2> -<p>As the package isn’t yet available anywhere but in this repository, you can clone the repository, add it to the load-path and require the package. My preferred way is <code>use-package</code> with <code>straight</code>:</p> -<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">use-package</span> <span style="color:#19177c">password-store-ivy</span> -</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> (<span style="color:#008000">:host</span> <span style="color:#19177c">github</span> <span style="color:#008000">:repo</span> <span style="color:#ba2121">"SqrtMinusOne/password-store-ivy"</span>) -</span></span><span style="display:flex;"><span> <span style="color:#008000">:after</span> (<span style="color:#19177c">exwm</span>)) -</span></span></code></pre></div><p>This package types stuff with <code>xdotool</code>, so you need to have that available in your <code>$PATH</code>.</p> -<h2 id="usage">Usage</h2> +<p>As the package isn’t yet available anywhere but in this repository, you can clone the repository, add it to the load-path, and require the package. My preferred way is <code>use-package</code> with <code>straight</code>:</p> +<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">use-package</span> <span style="color:#19177c">password-store-completion</span> +</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> (<span style="color:#008000">:host</span> <span style="color:#19177c">github</span> <span style="color:#008000">:repo</span> <span style="color:#ba2121">"SqrtMinusOne/password-store-completion"</span>)) +</span></span></code></pre></div><p><code>xdotool</code> has to be available in <code>$PATH</code>.</p> +<p>For Ivy integration:</p> +<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">require</span> <span style="color:#19177c">'password-store-ivy</span>) +</span></span></code></pre></div><p>Also be sure to load the main package before Ivy.</p> +<p>For Embark integration:</p> +<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">require</span> <span style="color:#19177c">'password-store-embark</span>) +</span></span><span style="display:flex;"><span>(<span style="color:#19177c">password-store-embark-mode</span>) +</span></span></code></pre></div><h2 id="usage">Usage</h2> <p>Emacs’ built-in <a href="https://www.gnu.org/software/emacs/manual/html_node/auth/The-Unix-password-store.html">password store</a> integration has to be set up.</p> -<p>The only command is <code>M-x password-store-ivy</code>, which invokes Ivy to select an entry from the pass database. Available commands in the selection buffer:</p> +<p>For Ivy integration, the command is <code>M-x password-store-ivy</code>, which invokes Ivy to select an entry from the pass database. Available commands in the selection buffer:</p> <ul> -<li><code>M-a</code>. Perform autotype</li> -<li><code>M-p</code>. Type password</li> -<li><code>M-u</code>. Type username</li> -<li><code>M-U</code>. Type url</li> -<li><code>M-f</code>. Select a field to type</li> +<li><code>M-a</code>: Perform autotype</li> +<li><code>M-p</code>: Type password</li> +<li><code>M-u</code>: Type username</li> +<li><code>M-U</code>: Type URL</li> +<li><code>M-f</code>: Select a field to type</li> </ul> +<p>For other completion frameworks, run <code>M-x password-store-completion</code>. If Embark integration is enabled, the same actions are added.</p> <h2 id="customization">Customization</h2> -<p>There are a few parameters that control delays:</p> +<p>The following parameters control delays:</p> <ul> -<li><code>password-store-ivy-initial-wait</code> controls the initial delay before starting to type a sequence (in milliseconds)</li> -<li><code>password-store-ivy-delay</code> controls the delay between typing characters (in milliseconds)</li> +<li><code>password-store-completion-initial-wait</code> controls the initial delay before starting to type a sequence (in milliseconds)</li> +<li><code>password-store-completion-delay</code> controls the delay between typing characters (in milliseconds)</li> </ul> -<p>There is also <code>password-store-ivy-sequences</code> that determines the sequence of actions <code>password-store-ivy</code> performs.</p> -<p>It is an alist with the following required keys (corresponding to the basic actions):</p> +<p><code>password-store-completion-sequences</code> determines the steps of sequences. It is an alist; the keys correspond to the default sequences:</p> <ul> <li><code>autotype</code></li> <li><code>password</code></li> @@ -3186,12 +3191,12 @@ assigned to group with the least amount of members.</li> </ul> <p>The values are lists of the following elements:</p> <ul> -<li><code>wait</code>. Wait for <code>password-store-ivy-initial-wait</code> milliseconds</li> -<li><code>(wait <milliseconds>)</code>. Wait for <code><milliseconds></code>.</li> -<li><code>(key <key>)</code>. Type <code><key></code>.</li> -<li><code>(field <field>)</code>. Type <code><field></code> of entry.</li> +<li><code>wait</code>: Wait for <code>password-store-completion-initial-wait</code> milliseconds</li> +<li><code>(wait <milliseconds>)</code>: Wait for <code><milliseconds></code></li> +<li><code>(key <key>)</code>: Type <code><key></code></li> +<li><code>(field <field>)</code>: Type <code><field></code> of entry</li> </ul> -<p>For example, the starting values:</p> +<p>The default value is as follows:</p> <div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span><span style="color:#666">'</span>((<span style="color:#19177c">autotype</span> <span style="color:#666">.</span> (<span style="color:#19177c">wait</span> </span></span><span style="display:flex;"><span> (<span style="color:#19177c">field</span> <span style="color:#666">.</span> <span style="color:#ba2121">"username"</span>) </span></span><span style="display:flex;"><span> (<span style="color:#19177c">key</span> <span style="color:#666">.</span> <span style="color:#ba2121">"Tab"</span>) @@ -3200,13 +3205,19 @@ assigned to group with the least amount of members.</li> </span></span><span style="display:flex;"><span> (<span style="color:#19177c">password</span> <span style="color:#666">.</span> (<span style="color:#19177c">wait</span> (<span style="color:#19177c">field</span> <span style="color:#666">.</span> <span style="color:#19177c">secret</span>))) </span></span><span style="display:flex;"><span> (<span style="color:#19177c">username</span> <span style="color:#666">.</span> (<span style="color:#19177c">wait</span> (<span style="color:#19177c">field</span> <span style="color:#666">.</span> <span style="color:#ba2121">"username"</span>))) </span></span><span style="display:flex;"><span> (<span style="color:#19177c">url</span> <span style="color:#666">.</span> (<span style="color:#19177c">wait</span> (<span style="color:#19177c">field</span> <span style="color:#666">.</span> <span style="color:#ba2121">"url"</span>)))) -</span></span></code></pre></div><p>In addition to the global override, sequences can be overriden per-entry with a field called <code>sequence-<name></code>, where <code><name></code> is a key of <code>password-store-ivy-sequences</code>.</p> -<p>For example, here is an override to press <code>Tab</code> twice:</p> +</span></span></code></pre></div><p>Sequences can also be overridden in a particular entry with a field called <code>sequence-<name></code>, where <code><name></code> is a key of <code>password-store-completion-sequences</code>.</p> +<p>For example, to press <code>Tab</code> twice in the <code>autotype</code> sequence:</p> <div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span><pass> </span></span><span style="display:flex;"><span>username: thexcloud@gmail.com </span></span><span style="display:flex;"><span>url: <url> </span></span><span style="display:flex;"><span>sequence-autotype: (wait (field . "username") (key . "Tab") (key . "Tab") (field . secret) (key . "Return")) -</span></span></code></pre></div> +</span></span></code></pre></div><p>Or, create a custom sequence:</p> +<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span><pass> +</span></span><span style="display:flex;"><span>username: thexcloud@gmail.com +</span></span><span style="display:flex;"><span>url: <url> +</span></span><span style="display:flex;"><span>sequence-doubletab: (wait (field . "username") (key . "Tab") (key . "Tab") (field . secret) (key . "Return")) +</span></span></code></pre></div><p>Custom sequences can be run in the field selection interface (<code>M-f</code> in Ivy, <code>M-x embark-act f</code> in Embark).</p> + Groups can also be generated automatically.
Available keybindings in the summary mode:
- -
- - - -Keybinding -Command -Description -- -- RET- elfeed-summary--actionOpen thing under the cursor (a feed, search, or a group). If there is at least one unread item, it will show only unread items. -- -- M-RET- elfeed-summary--action-show-readOpen thing under the cursor, but always include read items -- -- q… -Quit the summary buffer -- -- r- elfeed-summary--refreshRefresh the summary buffer -- -- R- elfeed-summary-updateRun update for elfeed feeds -- -- u- elfeed-summary-toggle-only-unreadToggle showing only unread entries -- - + +- U- elfeed-summary--action-mark-readMark everything in the entry under the cursor as read -+ + + +Keybinding +Command +Description ++ ++ RET+ elfeed-summary--actionOpen thing under the cursor (a feed, search, or a group). If there is at least one unread item, it will show only unread items. ++ ++ M-RET+ elfeed-summary--action-show-readOpen thing under the cursor, but always include read items ++ ++ q… +Quit the summary buffer ++ ++ r+ elfeed-summary--refreshRefresh the summary buffer ++ ++ R+ elfeed-summary-updateRun update for elfeed feeds ++ ++ u+ elfeed-summary-toggle-only-unreadToggle showing only unread entries ++ ++ U+ elfeed-summary--action-mark-readMark everything in the entry under the cursor as read +The standard keybindings from magit-section are also available, for instance
TABtoggles the visibility of the current group. evil-mode is also supported.Configuration
diff --git a/packages/elfeed-sync/index.html b/packages/elfeed-sync/index.html index b7c2571..7fff950 100644 --- a/packages/elfeed-sync/index.html +++ b/packages/elfeed-sync/index.html @@ -18,13 +18,6 @@ - - - - - - - diff --git a/packages/eshell-atuin/index.html b/packages/eshell-atuin/index.html index ac16ae6..40b27fa 100644 --- a/packages/eshell-atuin/index.html +++ b/packages/eshell-atuin/index.html @@ -18,13 +18,6 @@ - - - - - - - @@ -109,55 +102,55 @@ (setq eshell-atuin-history-format "%-160c %t + %d")The available flags are:
- -
- - - -Flag -atuin field (see -help atuin search)Required -- -%t -- time+ -- -%c -- command+ -- -%e -- exit- - -%d -- duration- - -%i -- directory- - -%u -- user- - -%h -- host- - - + +%r -- relativetime- + + + +Flag +atuin field (see +help atuin search)Required ++ +%t ++ time+ ++ +%c ++ command+ ++ +%e ++ exit+ + +%d ++ duration+ + +%i ++ directory+ + +%u ++ user+ + +%h ++ host+ + +%r ++ relativetime+ See (emacs) Custom Format Strings for information on the general
format-specsyntax.I suspect the package might be slow if your history has a lot of records (I haven’t checked yet). In this case, it might be worth setting a limit:
diff --git a/packages/exwm-modeline/index.html b/packages/exwm-modeline/index.html index 327e1cb..3a225f7 100644 --- a/packages/exwm-modeline/index.html +++ b/packages/exwm-modeline/index.html @@ -18,13 +18,6 @@ - - - - - - - diff --git a/packages/index.html b/packages/index.html index 44944ee..683a57e 100644 --- a/packages/index.html +++ b/packages/index.html @@ -19,13 +19,6 @@ - - - - - - - @@ -92,7 +85,7 @@- 2022-03-26 | elfeed-summary
-- 2022-02-13 | password-store-ivy
+- 2022-02-13 | password-store-completion
- 2022-02-06 | org-journal-tags
diff --git a/packages/index.xml b/packages/index.xml index 72e0253..c37feb4 100644 --- a/packages/index.xml +++ b/packages/index.xml @@ -37,55 +37,55 @@ </span></span><span style="display:flex;"><span>(<span style="color:#008000">setq</span> <span style="color:#19177c">eshell-atuin-history-format</span> <span style="color:#ba2121">"%-160c %t + %d"</span>) </span></span></code></pre></div><p>The available flags are:</p> <table> -<thead> -<tr> -<th>Flag</th> -<th>atuin field (see <code>help atuin search</code>)</th> -<th>Required</th> -</tr> -</thead> -<tbody> -<tr> -<td>%t</td> -<td><code>time</code></td> -<td><strong>+</strong></td> -</tr> -<tr> -<td>%c</td> -<td><code>command</code></td> -<td><strong>+</strong></td> -</tr> -<tr> -<td>%e</td> -<td><code>exit</code></td> -<td></td> -</tr> -<tr> -<td>%d</td> -<td><code>duration</code></td> -<td></td> -</tr> -<tr> -<td>%i</td> -<td><code>directory</code></td> -<td></td> -</tr> -<tr> -<td>%u</td> -<td><code>user</code></td> -<td></td> -</tr> -<tr> -<td>%h</td> -<td><code>host</code></td> -<td></td> -</tr> -<tr> -<td>%r</td> -<td><code>relativetime</code></td> -<td></td> -</tr> -</tbody> + <thead> + <tr> + <th style="text-align: left">Flag</th> + <th style="text-align: left">atuin field (see <code>help atuin search</code>)</th> + <th style="text-align: left">Required</th> + </tr> + </thead> + <tbody> + <tr> + <td style="text-align: left">%t</td> + <td style="text-align: left"><code>time</code></td> + <td style="text-align: left"><strong>+</strong></td> + </tr> + <tr> + <td style="text-align: left">%c</td> + <td style="text-align: left"><code>command</code></td> + <td style="text-align: left"><strong>+</strong></td> + </tr> + <tr> + <td style="text-align: left">%e</td> + <td style="text-align: left"><code>exit</code></td> + <td style="text-align: left"></td> + </tr> + <tr> + <td style="text-align: left">%d</td> + <td style="text-align: left"><code>duration</code></td> + <td style="text-align: left"></td> + </tr> + <tr> + <td style="text-align: left">%i</td> + <td style="text-align: left"><code>directory</code></td> + <td style="text-align: left"></td> + </tr> + <tr> + <td style="text-align: left">%u</td> + <td style="text-align: left"><code>user</code></td> + <td style="text-align: left"></td> + </tr> + <tr> + <td style="text-align: left">%h</td> + <td style="text-align: left"><code>host</code></td> + <td style="text-align: left"></td> + </tr> + <tr> + <td style="text-align: left">%r</td> + <td style="text-align: left"><code>relativetime</code></td> + <td style="text-align: left"></td> + </tr> + </tbody> </table> <p>See <a href="https://www.gnu.org/software/emacs/manual/html_node/elisp/Custom-Format-Strings.html">(emacs) Custom Format Strings</a> for information on the general <code>format-spec</code> syntax.</p> <p>I suspect the package might be slow if your history has a lot of records (I haven’t checked yet). In this case, it might be worth setting a limit:</p> @@ -186,70 +186,70 @@ </span></span><span style="display:flex;"><span>- [2023-12-13 Wed 19:30]--[2023-12-13 Wed 19:40] => 0:10 : DONE Thing 1 </span></span></code></pre></div><p>The following built-in predicates are currently available:</p> <table> -<thead> -<tr> -<th>Name</th> -<th>Comment</th> -<th>Customization variables</th> -</tr> -</thead> -<tbody> -<tr> -<td>Category</td> -<td></td> -<td></td> -</tr> -<tr> -<td>Org file</td> -<td></td> -<td></td> -</tr> -<tr> -<td>Outline path</td> -<td></td> -<td></td> -</tr> -<tr> -<td>Tags</td> -<td>Sorted alphabetically</td> -<td></td> -</tr> -<tr> -<td>Headline</td> -<td>Last item of the outline path</td> -<td></td> -</tr> -<tr> -<td>Day</td> -<td></td> -<td><code>org-clock-agg-day-format</code></td> -</tr> -<tr> -<td>Week</td> -<td></td> -<td><code>org-clock-agg-week-format</code></td> -</tr> -<tr> -<td>Month</td> -<td></td> -<td><code>org-clock-agg-month-format</code></td> -</tr> -<tr> -<td>TODO keyword</td> -<td></td> -<td></td> -</tr> -<tr> -<td>Is done</td> -<td></td> -<td></td> -</tr> -<tr> -<td>Selected props</td> -<td></td> -<td><code>org-clock-agg-properties</code></td> -</tr> -</tbody> + <thead> + <tr> + <th style="text-align: left">Name</th> + <th style="text-align: left">Comment</th> + <th style="text-align: left">Customization variables</th> + </tr> + </thead> + <tbody> + <tr> + <td style="text-align: left">Category</td> + <td style="text-align: left"></td> + <td style="text-align: left"></td> + </tr> + <tr> + <td style="text-align: left">Org file</td> + <td style="text-align: left"></td> + <td style="text-align: left"></td> + </tr> + <tr> + <td style="text-align: left">Outline path</td> + <td style="text-align: left"></td> + <td style="text-align: left"></td> + </tr> + <tr> + <td style="text-align: left">Tags</td> + <td style="text-align: left">Sorted alphabetically</td> + <td style="text-align: left"></td> + </tr> + <tr> + <td style="text-align: left">Headline</td> + <td style="text-align: left">Last item of the outline path</td> + <td style="text-align: left"></td> + </tr> + <tr> + <td style="text-align: left">Day</td> + <td style="text-align: left"></td> + <td style="text-align: left"><code>org-clock-agg-day-format</code></td> + </tr> + <tr> + <td style="text-align: left">Week</td> + <td style="text-align: left"></td> + <td style="text-align: left"><code>org-clock-agg-week-format</code></td> + </tr> + <tr> + <td style="text-align: left">Month</td> + <td style="text-align: left"></td> + <td style="text-align: left"><code>org-clock-agg-month-format</code></td> + </tr> + <tr> + <td style="text-align: left">TODO keyword</td> + <td style="text-align: left"></td> + <td style="text-align: left"></td> + </tr> + <tr> + <td style="text-align: left">Is done</td> + <td style="text-align: left"></td> + <td style="text-align: left"></td> + </tr> + <tr> + <td style="text-align: left">Selected props</td> + <td style="text-align: left"></td> + <td style="text-align: left"><code>org-clock-agg-properties</code></td> + </tr> + </tbody> </table> <p>Ensure to use <code>setopt</code> to set the variables; otherwise, the customization logic will not be invoked:</p> <div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#19177c">setopt</span> <span style="color:#19177c">org-clock-agg-properties</span> <span style="color:#666">'</span>(<span style="color:#ba2121">"PROJECT_NAME"</span>)) @@ -795,50 +795,50 @@ To mark such entries as read, run <code>M-x elfeed-sync-read-ttrss-old< <p>Groups can also be generated automatically.</p> <p>Available keybindings in the summary mode:</p> <table> -<thead> -<tr> -<th>Keybinding</th> -<th>Command</th> -<th>Description</th> -</tr> -</thead> -<tbody> -<tr> -<td><code>RET</code></td> -<td><code>elfeed-summary--action</code></td> -<td>Open thing under the cursor (a feed, search, or a group). If there is at least one unread item, it will show only unread items.</td> -</tr> -<tr> -<td><code>M-RET</code></td> -<td><code>elfeed-summary--action-show-read</code></td> -<td>Open thing under the cursor, but always include read items</td> -</tr> -<tr> -<td><code>q</code></td> -<td>…</td> -<td>Quit the summary buffer</td> -</tr> -<tr> -<td><code>r</code></td> -<td><code>elfeed-summary--refresh</code></td> -<td>Refresh the summary buffer</td> -</tr> -<tr> -<td><code>R</code></td> -<td><code>elfeed-summary-update</code></td> -<td>Run update for elfeed feeds</td> -</tr> -<tr> -<td><code>u</code></td> -<td><code>elfeed-summary-toggle-only-unread</code></td> -<td>Toggle showing only unread entries</td> -</tr> -<tr> -<td><code>U</code></td> -<td><code>elfeed-summary--action-mark-read</code></td> -<td>Mark everything in the entry under the cursor as read</td> -</tr> -</tbody> + <thead> + <tr> + <th style="text-align: left">Keybinding</th> + <th style="text-align: left">Command</th> + <th style="text-align: left">Description</th> + </tr> + </thead> + <tbody> + <tr> + <td style="text-align: left"><code>RET</code></td> + <td style="text-align: left"><code>elfeed-summary--action</code></td> + <td style="text-align: left">Open thing under the cursor (a feed, search, or a group). If there is at least one unread item, it will show only unread items.</td> + </tr> + <tr> + <td style="text-align: left"><code>M-RET</code></td> + <td style="text-align: left"><code>elfeed-summary--action-show-read</code></td> + <td style="text-align: left">Open thing under the cursor, but always include read items</td> + </tr> + <tr> + <td style="text-align: left"><code>q</code></td> + <td style="text-align: left">…</td> + <td style="text-align: left">Quit the summary buffer</td> + </tr> + <tr> + <td style="text-align: left"><code>r</code></td> + <td style="text-align: left"><code>elfeed-summary--refresh</code></td> + <td style="text-align: left">Refresh the summary buffer</td> + </tr> + <tr> + <td style="text-align: left"><code>R</code></td> + <td style="text-align: left"><code>elfeed-summary-update</code></td> + <td style="text-align: left">Run update for elfeed feeds</td> + </tr> + <tr> + <td style="text-align: left"><code>u</code></td> + <td style="text-align: left"><code>elfeed-summary-toggle-only-unread</code></td> + <td style="text-align: left">Toggle showing only unread entries</td> + </tr> + <tr> + <td style="text-align: left"><code>U</code></td> + <td style="text-align: left"><code>elfeed-summary--action-mark-read</code></td> + <td style="text-align: left">Mark everything in the entry under the cursor as read</td> + </tr> + </tbody> </table> <p>The standard keybindings from <a href="https://magit.vc/manual/magit.html#Sections">magit-section</a> are also available, for instance <code>TAB</code> toggles the visibility of the current group. <a href="https://github.com/emacs-evil/evil">evil-mode</a> is also supported.</p> <h2 id="configuration">Configuration</h2> @@ -1157,39 +1157,44 @@ assigned to group with the least amount of members.</li>- -
@@ -1319,35 +1330,35 @@ timestamps by their date.</li> <p>Pressing <code>RET</code> opens the corresponding org-journal entry.</p> <p>Pressing <code>s</code> opens the query constructor buffer. If opened from inside the query results, the query constructor has 4 additional options:</p> <table> -<thead> -<tr> -<th>Command</th> -<th>Set operation</th> -<th>Description</th> -</tr> -</thead> -<tbody> -<tr> -<td><strong>Union</strong></td> -<td>old ∪ new</td> -<td>Add records of the new query to the displayed records</td> -</tr> -<tr> -<td><strong>Intersection</strong></td> -<td>old ∩ new</td> -<td>Leave only those records that are both displayed and in the new query</td> -</tr> -<tr> -<td><strong>Difference from current</strong></td> -<td>old \ new</td> -<td>Exclude records of the new query from the displayed records</td> -</tr> -<tr> -<td><strong>Difference to current</strong></td> -<td>new \ old</td> -<td>Exclude displayed records from ones of the new query</td> -</tr> -</tbody> + <thead> + <tr> + <th style="text-align: left">Command</th> + <th style="text-align: left">Set operation</th> + <th style="text-align: left">Description</th> + </tr> + </thead> + <tbody> + <tr> + <td style="text-align: left"><strong>Union</strong></td> + <td style="text-align: left">old ∪ new</td> + <td style="text-align: left">Add records of the new query to the displayed records</td> + </tr> + <tr> + <td style="text-align: left"><strong>Intersection</strong></td> + <td style="text-align: left">old ∩ new</td> + <td style="text-align: left">Leave only those records that are both displayed and in the new query</td> + </tr> + <tr> + <td style="text-align: left"><strong>Difference from current</strong></td> + <td style="text-align: left">old \ new</td> + <td style="text-align: left">Exclude records of the new query from the displayed records</td> + </tr> + <tr> + <td style="text-align: left"><strong>Difference to current</strong></td> + <td style="text-align: left">new \ old</td> + <td style="text-align: left">Exclude displayed records from ones of the new query</td> + </tr> + </tbody> </table> <p>Thus it is possible to make any query that can be described as a sequence of such set operations.</p> <h2 id="advanced-usage">Advanced usage</h2> @@ -1652,74 +1663,74 @@ interval = 1 <h2 id="alternatives">Alternatives</h2> <p>There is a number of packages with a similar purpose, here is a rough comparison of features:</p> <table> -<thead> -<tr> -<th>Package</th> -<th>3rd party integrations</th> -<th>Control method (1)</th> -<th>Persistent history</th> -<th>Persistent state</th> -<th>Notifications</th> -</tr> -</thead> -<tbody> -<tr> -<td><a href="https://github.com/SqrtMinusOne/pomm.el">pomm.el</a></td> -<td>-</td> -<td>transient.el</td> -<td>CSV</td> -<td>+</td> -<td>alert.el + sounds</td> -</tr> -<tr> -<td><a href="https://github.com/marcinkoziej/org-pomodoro/tree/master">org-pomodoro</a></td> -<td>Org Mode!</td> -<td>via Org commands</td> -<td>via Org mode</td> -<td>-</td> -<td>alert.el + sounds</td> -</tr> -<tr> -<td><a href="https://github.com/TatriX/pomidor/">pomidor</a></td> -<td>-</td> -<td>self-cooked interactive buffer</td> -<td>custom delimited format?</td> -<td>+, but saving on-demand</td> -<td>alert.el + sounds</td> -</tr> -<tr> -<td><a href="https://github.com/baudtack/pomodoro.el/">pomodoro.el</a></td> -<td>-</td> -<td>-</td> -<td>-</td> -<td>-</td> -<td>notifications.el + sounds</td> -</tr> -<tr> -<td><a href="https://github.com/konr/tomatinho/">tomatinho</a></td> -<td>-</td> -<td>self-cooked interactive buffer</td> -<td>-</td> -<td>-</td> -<td>message + sounds</td> -</tr> -<tr> -<td><a href="https://github.com/ferfebles/redtick">redtick</a></td> -<td>-</td> -<td>mode-line icon</td> -<td>+</td> -<td>-</td> -<td>sounds</td> -</tr> -<tr> -<td><a href="https://github.com/abo-abo/gtk-pomodoro-indicator">gtk-pomodoro-indicator</a></td> -<td>GTK panel</td> -<td>CLI</td> -<td>-</td> -<td>-, but the program is independent of Emacs</td> -<td>GTK notifications</td> -</tr> -</tbody> + <thead> + <tr> + <th style="text-align: left">Package</th> + <th style="text-align: left">3rd party integrations</th> + <th style="text-align: left">Control method (1)</th> + <th style="text-align: left">Persistent history</th> + <th style="text-align: left">Persistent state</th> + <th style="text-align: left">Notifications</th> + </tr> + </thead> + <tbody> + <tr> + <td style="text-align: left"><a href="https://github.com/SqrtMinusOne/pomm.el">pomm.el</a></td> + <td style="text-align: left">-</td> + <td style="text-align: left">transient.el</td> + <td style="text-align: left">CSV</td> + <td style="text-align: left">+</td> + <td style="text-align: left">alert.el + sounds</td> + </tr> + <tr> + <td style="text-align: left"><a href="https://github.com/marcinkoziej/org-pomodoro/tree/master">org-pomodoro</a></td> + <td style="text-align: left">Org Mode!</td> + <td style="text-align: left">via Org commands</td> + <td style="text-align: left">via Org mode</td> + <td style="text-align: left">-</td> + <td style="text-align: left">alert.el + sounds</td> + </tr> + <tr> + <td style="text-align: left"><a href="https://github.com/TatriX/pomidor/">pomidor</a></td> + <td style="text-align: left">-</td> + <td style="text-align: left">self-cooked interactive buffer</td> + <td style="text-align: left">custom delimited format?</td> + <td style="text-align: left">+, but saving on-demand</td> + <td style="text-align: left">alert.el + sounds</td> + </tr> + <tr> + <td style="text-align: left"><a href="https://github.com/baudtack/pomodoro.el/">pomodoro.el</a></td> + <td style="text-align: left">-</td> + <td style="text-align: left">-</td> + <td style="text-align: left">-</td> + <td style="text-align: left">-</td> + <td style="text-align: left">notifications.el + sounds</td> + </tr> + <tr> + <td style="text-align: left"><a href="https://github.com/konr/tomatinho/">tomatinho</a></td> + <td style="text-align: left">-</td> + <td style="text-align: left">self-cooked interactive buffer</td> + <td style="text-align: left">-</td> + <td style="text-align: left">-</td> + <td style="text-align: left">message + sounds</td> + </tr> + <tr> + <td style="text-align: left"><a href="https://github.com/ferfebles/redtick">redtick</a></td> + <td style="text-align: left">-</td> + <td style="text-align: left">mode-line icon</td> + <td style="text-align: left">+</td> + <td style="text-align: left">-</td> + <td style="text-align: left">sounds</td> + </tr> + <tr> + <td style="text-align: left"><a href="https://github.com/abo-abo/gtk-pomodoro-indicator">gtk-pomodoro-indicator</a></td> + <td style="text-align: left">GTK panel</td> + <td style="text-align: left">CLI</td> + <td style="text-align: left">-</td> + <td style="text-align: left">-, but the program is independent of Emacs</td> + <td style="text-align: left">GTK notifications</td> + </tr> + </tbody> </table> <p>Be sure to check those out if this one doesn’t quite fit your workflow!</p> <p>(1) Means of timer control with exception to Emacs interactive commands</p> diff --git a/packages/lyrics-fetcher/index.html b/packages/lyrics-fetcher/index.html index 06375d1..38a8eca 100644 --- a/packages/lyrics-fetcher/index.html +++ b/packages/lyrics-fetcher/index.html @@ -18,13 +18,6 @@ - - - - - - - diff --git a/packages/micromamba/index.html b/packages/micromamba/index.html index 385686e..9eb1d04 100644 --- a/packages/micromamba/index.html +++ b/packages/micromamba/index.html @@ -18,13 +18,6 @@ - - - - - - - diff --git a/packages/org-clock-agg/index.html b/packages/org-clock-agg/index.html index d849f16..06a083f 100644 --- a/packages/org-clock-agg/index.html +++ b/packages/org-clock-agg/index.html @@ -18,13 +18,6 @@ - - - - - - - @@ -150,70 +143,70 @@ - [2023-12-13 Wed 19:30]--[2023-12-13 Wed 19:40] => 0:10 : DONE Thing 1password-store-ivy - https://sqrtminusone.xyz/packages/password-store-ivy/ +password-store-completion + https://sqrtminusone.xyz/packages/password-store-completion/Sun, 13 Feb 2022 00:00:00 +0000 -https://sqrtminusone.xyz/packages/password-store-ivy/ +https://sqrtminusone.xyz/packages/password-store-completion/ - <p>A <a href="https://www.passwordstore.org/">pass</a> frontend based on <a href="https://github.com/abo-abo/swiper#ivy">Ivy</a>, made primarily to use with <a href="https://github.com/ch11ng/exwm">EXWM</a> and <a href="https://github.com/tumashu/ivy-posframe">ivy-posframe</a>. Types fields from entries.</p> -<p>Also take a look at Nicolas Petton’s <a href="https://github.com/NicolasPetton/pass">pass</a>, <code>password-store-ivy</code> is designed as complementary to the Nicolas’ package.</p> -<p>This package is made with Ivy because I need some fine-tuning like actions and turning off sorting in some completions, and Ivy happens to be the completion system I’m using now.</p> + <p>A completion-based pass frontend inspired by <a href="https://github.com/carnager/rofi-pass">rofi-pass</a>. Integrates with <a href="https://github.com/abo-abo/swiper">Ivy</a> or <a href="https://github.com/oantolin/embark">Embark</a>.</p> +<p>The main purpose is typing passwords with <code>xdotool</code> (useful in <a href="https://github.com/emacs-exwm/exwm">EXWM</a>).</p> +<p>Also take a look at Nicolas Petton’s <a href="https://github.com/NicolasPetton/pass">pass</a>. <code>password-store-completion</code> is designed as complementary to Nicolas’ package.</p> <h2 id="installation">Installation</h2> -<p>As the package isn’t yet available anywhere but in this repository, you can clone the repository, add it to the load-path and require the package. My preferred way is <code>use-package</code> with <code>straight</code>:</p> -<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">use-package</span> <span style="color:#19177c">password-store-ivy</span> -</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> (<span style="color:#008000">:host</span> <span style="color:#19177c">github</span> <span style="color:#008000">:repo</span> <span style="color:#ba2121">"SqrtMinusOne/password-store-ivy"</span>) -</span></span><span style="display:flex;"><span> <span style="color:#008000">:after</span> (<span style="color:#19177c">exwm</span>)) -</span></span></code></pre></div><p>This package types stuff with <code>xdotool</code>, so you need to have that available in your <code>$PATH</code>.</p> -<h2 id="usage">Usage</h2> +<p>As the package isn’t yet available anywhere but in this repository, you can clone the repository, add it to the load-path, and require the package. My preferred way is <code>use-package</code> with <code>straight</code>:</p> +<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">use-package</span> <span style="color:#19177c">password-store-completion</span> +</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> (<span style="color:#008000">:host</span> <span style="color:#19177c">github</span> <span style="color:#008000">:repo</span> <span style="color:#ba2121">"SqrtMinusOne/password-store-completion"</span>)) +</span></span></code></pre></div><p><code>xdotool</code> has to be available in <code>$PATH</code>.</p> +<p>For Ivy integration:</p> +<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">require</span> <span style="color:#19177c">'password-store-ivy</span>) +</span></span></code></pre></div><p>Also be sure to load the main package before Ivy.</p> +<p>For Embark integration:</p> +<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">require</span> <span style="color:#19177c">'password-store-embark</span>) +</span></span><span style="display:flex;"><span>(<span style="color:#19177c">password-store-embark-mode</span>) +</span></span></code></pre></div><h2 id="usage">Usage</h2> <p>Emacs’ built-in <a href="https://www.gnu.org/software/emacs/manual/html_node/auth/The-Unix-password-store.html">password store</a> integration has to be set up.</p> -<p>The only command is <code>M-x password-store-ivy</code>, which invokes Ivy to select an entry from the pass database. Available commands in the selection buffer:</p> +<p>For Ivy integration, the command is <code>M-x password-store-ivy</code>, which invokes Ivy to select an entry from the pass database. Available commands in the selection buffer:</p> <ul> -<li><code>M-a</code>. Perform autotype</li> -<li><code>M-p</code>. Type password</li> -<li><code>M-u</code>. Type username</li> -<li><code>M-U</code>. Type url</li> -<li><code>M-f</code>. Select a field to type</li> +<li><code>M-a</code>: Perform autotype</li> +<li><code>M-p</code>: Type password</li> +<li><code>M-u</code>: Type username</li> +<li><code>M-U</code>: Type URL</li> +<li><code>M-f</code>: Select a field to type</li> </ul> +<p>For other completion frameworks, run <code>M-x password-store-completion</code>. If Embark integration is enabled, the same actions are added.</p> <h2 id="customization">Customization</h2> -<p>There are a few parameters that control delays:</p> +<p>The following parameters control delays:</p> <ul> -<li><code>password-store-ivy-initial-wait</code> controls the initial delay before starting to type a sequence (in milliseconds)</li> -<li><code>password-store-ivy-delay</code> controls the delay between typing characters (in milliseconds)</li> +<li><code>password-store-completion-initial-wait</code> controls the initial delay before starting to type a sequence (in milliseconds)</li> +<li><code>password-store-completion-delay</code> controls the delay between typing characters (in milliseconds)</li> </ul> -<p>There is also <code>password-store-ivy-sequences</code> that determines the sequence of actions <code>password-store-ivy</code> performs.</p> -<p>It is an alist with the following required keys (corresponding to the basic actions):</p> +<p><code>password-store-completion-sequences</code> determines the steps of sequences. It is an alist; the keys correspond to the default sequences:</p> <ul> <li><code>autotype</code></li> <li><code>password</code></li> @@ -1198,12 +1203,12 @@ assigned to group with the least amount of members.</li> </ul> <p>The values are lists of the following elements:</p> <ul> -<li><code>wait</code>. Wait for <code>password-store-ivy-initial-wait</code> milliseconds</li> -<li><code>(wait <milliseconds>)</code>. Wait for <code><milliseconds></code>.</li> -<li><code>(key <key>)</code>. Type <code><key></code>.</li> -<li><code>(field <field>)</code>. Type <code><field></code> of entry.</li> +<li><code>wait</code>: Wait for <code>password-store-completion-initial-wait</code> milliseconds</li> +<li><code>(wait <milliseconds>)</code>: Wait for <code><milliseconds></code></li> +<li><code>(key <key>)</code>: Type <code><key></code></li> +<li><code>(field <field>)</code>: Type <code><field></code> of entry</li> </ul> -<p>For example, the starting values:</p> +<p>The default value is as follows:</p> <div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span><span style="color:#666">'</span>((<span style="color:#19177c">autotype</span> <span style="color:#666">.</span> (<span style="color:#19177c">wait</span> </span></span><span style="display:flex;"><span> (<span style="color:#19177c">field</span> <span style="color:#666">.</span> <span style="color:#ba2121">"username"</span>) </span></span><span style="display:flex;"><span> (<span style="color:#19177c">key</span> <span style="color:#666">.</span> <span style="color:#ba2121">"Tab"</span>) @@ -1212,13 +1217,19 @@ assigned to group with the least amount of members.</li> </span></span><span style="display:flex;"><span> (<span style="color:#19177c">password</span> <span style="color:#666">.</span> (<span style="color:#19177c">wait</span> (<span style="color:#19177c">field</span> <span style="color:#666">.</span> <span style="color:#19177c">secret</span>))) </span></span><span style="display:flex;"><span> (<span style="color:#19177c">username</span> <span style="color:#666">.</span> (<span style="color:#19177c">wait</span> (<span style="color:#19177c">field</span> <span style="color:#666">.</span> <span style="color:#ba2121">"username"</span>))) </span></span><span style="display:flex;"><span> (<span style="color:#19177c">url</span> <span style="color:#666">.</span> (<span style="color:#19177c">wait</span> (<span style="color:#19177c">field</span> <span style="color:#666">.</span> <span style="color:#ba2121">"url"</span>)))) -</span></span></code></pre></div><p>In addition to the global override, sequences can be overriden per-entry with a field called <code>sequence-<name></code>, where <code><name></code> is a key of <code>password-store-ivy-sequences</code>.</p> -<p>For example, here is an override to press <code>Tab</code> twice:</p> +</span></span></code></pre></div><p>Sequences can also be overridden in a particular entry with a field called <code>sequence-<name></code>, where <code><name></code> is a key of <code>password-store-completion-sequences</code>.</p> +<p>For example, to press <code>Tab</code> twice in the <code>autotype</code> sequence:</p> <div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span><pass> </span></span><span style="display:flex;"><span>username: thexcloud@gmail.com </span></span><span style="display:flex;"><span>url: <url> </span></span><span style="display:flex;"><span>sequence-autotype: (wait (field . "username") (key . "Tab") (key . "Tab") (field . secret) (key . "Return")) -</span></span></code></pre></div> +</span></span></code></pre></div><p>Or, create a custom sequence:</p> +<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span><pass> +</span></span><span style="display:flex;"><span>username: thexcloud@gmail.com +</span></span><span style="display:flex;"><span>url: <url> +</span></span><span style="display:flex;"><span>sequence-doubletab: (wait (field . "username") (key . "Tab") (key . "Tab") (field . secret) (key . "Return")) +</span></span></code></pre></div><p>Custom sequences can be run in the field selection interface (<code>M-f</code> in Ivy, <code>M-x embark-act f</code> in Embark).</p> + The following built-in predicates are currently available:
- -
- - - -Name -Comment -Customization variables -- -Category -- - - -Org file -- - - -Outline path -- - - -Tags -Sorted alphabetically -- - -Headline -Last item of the outline path -- - -Day -- - org-clock-agg-day-format- -Week -- - org-clock-agg-week-format- -Month -- - org-clock-agg-month-format- -TODO keyword -- - - -Is done -- - - - + +Selected props -- - org-clock-agg-properties+ + + +Name +Comment +Customization variables ++ +Category ++ + + +Org file ++ + + +Outline path ++ + + +Tags +Sorted alphabetically ++ + +Headline +Last item of the outline path ++ + +Day ++ + org-clock-agg-day-format+ +Week ++ + org-clock-agg-week-format+ +Month ++ + org-clock-agg-month-format+ +TODO keyword ++ + + +Is done ++ + + +Selected props ++ + org-clock-agg-propertiesEnsure to use
setoptto set the variables; otherwise, the customization logic will not be invoked:(setopt org-clock-agg-properties '("PROJECT_NAME")) diff --git a/packages/org-journal-tags/index.html b/packages/org-journal-tags/index.html index f4603ef..7036a87 100644 --- a/packages/org-journal-tags/index.html +++ b/packages/org-journal-tags/index.html @@ -18,13 +18,6 @@ - - - - - - - @@ -176,35 +169,35 @@ timestamps by their date.Pressing
RETopens the corresponding org-journal entry.Pressing
sopens the query constructor buffer. If opened from inside the query results, the query constructor has 4 additional options:- -
- - - -Command -Set operation -Description -- -Union -old ∪ new -Add records of the new query to the displayed records -- -Intersection -old ∩ new -Leave only those records that are both displayed and in the new query -- -Difference from current -old \ new -Exclude records of the new query from the displayed records -- - + +Difference to current -new \ old -Exclude displayed records from ones of the new query -+ + + +Command +Set operation +Description ++ +Union +old ∪ new +Add records of the new query to the displayed records ++ +Intersection +old ∩ new +Leave only those records that are both displayed and in the new query ++ +Difference from current +old \ new +Exclude records of the new query from the displayed records ++ +Difference to current +new \ old +Exclude displayed records from ones of the new query +Thus it is possible to make any query that can be described as a sequence of such set operations.
Advanced usage
diff --git a/packages/password-store-ivy/index.html b/packages/password-store-completion/index.html similarity index 62% rename from packages/password-store-ivy/index.html rename to packages/password-store-completion/index.html index 8d4cf4d..53f8cc2 100644 --- a/packages/password-store-ivy/index.html +++ b/packages/password-store-completion/index.html @@ -3,7 +3,7 @@ -password-store-ivy +password-store-completion @@ -18,13 +18,6 @@ - - - - - - - @@ -74,45 +67,50 @@- password-store-ivy + password-store-completion - +
- password-store-ivy + password-store-completion - +
-A pass frontend based on Ivy, made primarily to use with EXWM and ivy-posframe. Types fields from entries.
-Also take a look at Nicolas Petton’s pass,
-password-store-ivyis designed as complementary to the Nicolas’ package.This package is made with Ivy because I need some fine-tuning like actions and turning off sorting in some completions, and Ivy happens to be the completion system I’m using now.
+A completion-based pass frontend inspired by rofi-pass. Integrates with Ivy or Embark.
+The main purpose is typing passwords with
+xdotool(useful in EXWM).Also take a look at Nicolas Petton’s pass.
password-store-completionis designed as complementary to Nicolas’ package.Installation
-As the package isn’t yet available anywhere but in this repository, you can clone the repository, add it to the load-path and require the package. My preferred way is
-use-packagewithstraight:(use-package password-store-ivy - :straight (:host github :repo "SqrtMinusOne/password-store-ivy") - :after (exwm)) -This package types stuff with
-xdotool, so you need to have that available in your$PATH.Usage
+As the package isn’t yet available anywhere but in this repository, you can clone the repository, add it to the load-path, and require the package. My preferred way is
+use-packagewithstraight:(use-package password-store-completion + :straight (:host github :repo "SqrtMinusOne/password-store-completion")) ++
xdotoolhas to be available in$PATH.For Ivy integration:
+(require 'password-store-ivy) +Also be sure to load the main package before Ivy.
+For Embark integration:
+(require 'password-store-embark) +(password-store-embark-mode) +Usage
Emacs’ built-in password store integration has to be set up.
-The only command is
+M-x password-store-ivy, which invokes Ivy to select an entry from the pass database. Available commands in the selection buffer:For Ivy integration, the command is
M-x password-store-ivy, which invokes Ivy to select an entry from the pass database. Available commands in the selection buffer:-
+- -
M-a. Perform autotype- -
M-p. Type password- -
M-u. Type username- -
M-U. Type url- +
M-f. Select a field to type- +
M-a: Perform autotype- +
M-p: Type password- +
M-u: Type username- +
M-U: Type URLM-f: Select a field to typeFor other completion frameworks, run
M-x password-store-completion. If Embark integration is enabled, the same actions are added.Customization
-There are a few parameters that control delays:
+The following parameters control delays:
-
-- -
password-store-ivy-initial-waitcontrols the initial delay before starting to type a sequence (in milliseconds)- +
password-store-ivy-delaycontrols the delay between typing characters (in milliseconds)- +
password-store-completion-initial-waitcontrols the initial delay before starting to type a sequence (in milliseconds)password-store-completion-delaycontrols the delay between typing characters (in milliseconds)There is also
-password-store-ivy-sequencesthat determines the sequence of actionspassword-store-ivyperforms.It is an alist with the following required keys (corresponding to the basic actions):
+
password-store-completion-sequencesdetermines the steps of sequences. It is an alist; the keys correspond to the default sequences:
autotype- @@ -121,12 +119,12 @@
passwordThe values are lists of the following elements:
-
-- -
wait. Wait forpassword-store-ivy-initial-waitmilliseconds- -
(wait <milliseconds>). Wait for<milliseconds>.- -
(key <key>). Type<key>.- +
(field <field>). Type<field>of entry.- +
wait: Wait forpassword-store-completion-initial-waitmilliseconds- +
(wait <milliseconds>): Wait for<milliseconds>- +
(key <key>): Type<key>(field <field>): Type<field>of entryFor example, the starting values:
+The default value is as follows:
'((autotype . (wait (field . "username") (key . "Tab") @@ -135,13 +133,19 @@ (password . (wait (field . secret))) (username . (wait (field . "username"))) (url . (wait (field . "url")))) -In addition to the global override, sequences can be overriden per-entry with a field called
-sequence-<name>, where<name>is a key ofpassword-store-ivy-sequences.For example, here is an override to press
+Tabtwice:Sequences can also be overridden in a particular entry with a field called
+sequence-<name>, where<name>is a key ofpassword-store-completion-sequences.For example, to press
Tabtwice in theautotypesequence:+<pass> username: thexcloud@gmail.com url: <url> sequence-autotype: (wait (field . "username") (key . "Tab") (key . "Tab") (field . secret) (key . "Return")) -Or, create a custom sequence:
+<pass> +username: thexcloud@gmail.com +url: <url> +sequence-doubletab: (wait (field . "username") (key . "Tab") (key . "Tab") (field . secret) (key . "Return")) +Custom sequences can be run in the field selection interface (
+M-fin Ivy,M-x embark-act fin Embark).diff --git a/packages/perspective-exwm/index.html b/packages/perspective-exwm/index.html index 54c9a01..fc3b0c4 100644 --- a/packages/perspective-exwm/index.html +++ b/packages/perspective-exwm/index.html @@ -18,13 +18,6 @@ - - - - - - - diff --git a/packages/pomm/index.html b/packages/pomm/index.html index 67c910a..e19d81e 100644 --- a/packages/pomm/index.html +++ b/packages/pomm/index.html @@ -18,13 +18,6 @@ - - - - - - - @@ -195,74 +188,74 @@ interval = 1Alternatives
There is a number of packages with a similar purpose, here is a rough comparison of features:
- -
- - - -Package -3rd party integrations -Control method (1) -Persistent history -Persistent state -Notifications -- -pomm.el -- -transient.el -CSV -+ -alert.el + sounds -- -org-pomodoro -Org Mode! -via Org commands -via Org mode -- -alert.el + sounds -- -pomidor -- -self-cooked interactive buffer -custom delimited format? -+, but saving on-demand -alert.el + sounds -- -pomodoro.el -- -- -- -- -notifications.el + sounds -- -tomatinho -- -self-cooked interactive buffer -- -- -message + sounds -- -redtick -- -mode-line icon -+ -- -sounds -- - + +gtk-pomodoro-indicator -GTK panel -CLI -- --, but the program is independent of Emacs -GTK notifications -+ + + +Package +3rd party integrations +Control method (1) +Persistent history +Persistent state +Notifications ++ +pomm.el +- +transient.el +CSV ++ +alert.el + sounds ++ +org-pomodoro +Org Mode! +via Org commands +via Org mode +- +alert.el + sounds ++ +pomidor +- +self-cooked interactive buffer +custom delimited format? ++, but saving on-demand +alert.el + sounds ++ +pomodoro.el +- +- +- +- +notifications.el + sounds ++ +tomatinho +- +self-cooked interactive buffer +- +- +message + sounds ++ +redtick +- +mode-line icon ++ +- +sounds ++ +gtk-pomodoro-indicator +GTK panel +CLI +- +-, but the program is independent of Emacs +GTK notifications +Be sure to check those out if this one doesn’t quite fit your workflow!
(1) Means of timer control with exception to Emacs interactive commands
diff --git a/packages/reverso/index.html b/packages/reverso/index.html index 4de6cc3..08ab29b 100644 --- a/packages/reverso/index.html +++ b/packages/reverso/index.html @@ -18,13 +18,6 @@ - - - - - - - diff --git a/posts/2021-02-27-gmail/index.html b/posts/2021-02-27-gmail/index.html index 2217053..6b9df43 100644 --- a/posts/2021-02-27-gmail/index.html +++ b/posts/2021-02-27-gmail/index.html @@ -18,13 +18,6 @@ - - - - - - - diff --git a/posts/2021-05-01-org-python/index.html b/posts/2021-05-01-org-python/index.html index 2fa0ba4..c45f965 100644 --- a/posts/2021-05-01-org-python/index.html +++ b/posts/2021-05-01-org-python/index.html @@ -18,13 +18,6 @@ - - - - - - - diff --git a/posts/2021-09-07-emms/index.html b/posts/2021-09-07-emms/index.html index 0e8d95b..788e919 100644 --- a/posts/2021-09-07-emms/index.html +++ b/posts/2021-09-07-emms/index.html @@ -18,13 +18,6 @@ - - - - - - - diff --git a/posts/2021-10-04-emacs-i3/index.html b/posts/2021-10-04-emacs-i3/index.html index de4f177..ccf99cf 100644 --- a/posts/2021-10-04-emacs-i3/index.html +++ b/posts/2021-10-04-emacs-i3/index.html @@ -18,13 +18,6 @@ - - - - - - - diff --git a/posts/2022-01-03-exwm/index.html b/posts/2022-01-03-exwm/index.html index 54405f9..24bc82a 100644 --- a/posts/2022-01-03-exwm/index.html +++ b/posts/2022-01-03-exwm/index.html @@ -18,13 +18,6 @@ - - - - - - - diff --git a/posts/2022-02-12-literate/index.html b/posts/2022-02-12-literate/index.html index 16671da..85dcb2a 100644 --- a/posts/2022-02-12-literate/index.html +++ b/posts/2022-02-12-literate/index.html @@ -18,13 +18,6 @@ - - - - - - - @@ -213,33 +206,33 @@ #+end_src
sunwaitis declared in an Org table that looks like that:- -
- - - -Category -Guix dependency -- - + +desktop-polybar -sunwait -+ + + +Category +Guix dependency ++ +desktop-polybar +sunwait +Such tables are spread through my
Desktop.org, for instance, here is another one for a polybar module that depends on dateutils:- -
- - - -Category -Guix dependency -- - + +desktop-polybar -dateutils -+ + + +Category +Guix dependency ++ +desktop-polybar +dateutils +Thus I made a function that extracts packages from all such tables from the current Org buffer. The rules are as follows:
@@ -358,28 +351,28 @@
block1 block2And set the foreground and background colors like that:
- -
- - - -- block1 -glyph -block2 -- -foreground -F1 -B2 -F2 -- - + +background -B1 -B1 -B2 -+ + + ++ block1 +glyph +block2 ++ +foreground +F1 +B2 +F2 ++ +background +B1 +B1 +B2 +So, that’s a start. First, let’s define the glyph symbols in the polybar config:
[glyph] diff --git a/posts/2022-05-09-pdf/index.html b/posts/2022-05-09-pdf/index.html index 327757c..e378b5a 100644 --- a/posts/2022-05-09-pdf/index.html +++ b/posts/2022-05-09-pdf/index.html @@ -18,13 +18,6 @@ - - - - - - - diff --git a/posts/2022-09-16-vosk/index.html b/posts/2022-09-16-vosk/index.html index 1767271..de0b32e 100644 --- a/posts/2022-09-16-vosk/index.html +++ b/posts/2022-09-16-vosk/index.html @@ -18,13 +18,6 @@ - - - - - - - diff --git a/posts/2023-01-02-gource/index.html b/posts/2023-01-02-gource/index.html index 9bf0c98..b8c125b 100644 --- a/posts/2023-01-02-gource/index.html +++ b/posts/2023-01-02-gource/index.html @@ -18,13 +18,6 @@ - - - - - - - diff --git a/posts/2023-04-13-emacs/index.html b/posts/2023-04-13-emacs/index.html index c96750e..f4fd16f 100644 --- a/posts/2023-04-13-emacs/index.html +++ b/posts/2023-04-13-emacs/index.html @@ -18,13 +18,6 @@ - - - - - - - diff --git a/posts/2023-11-11-index/index.html b/posts/2023-11-11-index/index.html index 0d02d5d..c8af356 100644 --- a/posts/2023-11-11-index/index.html +++ b/posts/2023-11-11-index/index.html @@ -18,13 +18,6 @@ - - - - - - - diff --git a/posts/hello-world/index.html b/posts/hello-world/index.html index 82af520..72166d9 100644 --- a/posts/hello-world/index.html +++ b/posts/hello-world/index.html @@ -18,13 +18,6 @@ - - - - - - - diff --git a/posts/index.html b/posts/index.html index 9d6691e..d4673d7 100644 --- a/posts/index.html +++ b/posts/index.html @@ -19,13 +19,6 @@ - - - - - - - diff --git a/posts/index.xml b/posts/index.xml index dedd5cf..1651854 100644 --- a/posts/index.xml +++ b/posts/index.xml @@ -2138,33 +2138,33 @@ I’ve seen a couple of cases where people would swap their username and </span></span><span style="display:flex;"><span>#+end_src </span></span></code></pre></div><p><code>sunwait</code> is declared in an Org table that looks like that:</p> <table> -<thead> -<tr> -<th>Category</th> -<th>Guix dependency</th> -</tr> -</thead> -<tbody> -<tr> -<td>desktop-polybar</td> -<td>sunwait</td> -</tr> -</tbody> + <thead> + <tr> + <th style="text-align: left">Category</th> + <th style="text-align: left">Guix dependency</th> + </tr> + </thead> + <tbody> + <tr> + <td style="text-align: left">desktop-polybar</td> + <td style="text-align: left">sunwait</td> + </tr> + </tbody> </table> <p>Such tables are spread through my <code>Desktop.org</code>, for instance, here is another one for a polybar module that depends on dateutils:</p> <table> -<thead> -<tr> -<th>Category</th> -<th>Guix dependency</th> -</tr> -</thead> -<tbody> -<tr> -<td>desktop-polybar</td> -<td>dateutils</td> -</tr> -</tbody> + <thead> + <tr> + <th style="text-align: left">Category</th> + <th style="text-align: left">Guix dependency</th> + </tr> + </thead> + <tbody> + <tr> + <td style="text-align: left">desktop-polybar</td> + <td style="text-align: left">dateutils</td> + </tr> + </tbody> </table> <p>Thus I made a function that extracts packages from all such tables from the current Org buffer. The rules are as follows:</p> <ul> @@ -2283,28 +2283,28 @@ I’ve seen a couple of cases where people would swap their username and <div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>block1 block2 </span></span></code></pre></div><p>And set the foreground and background colors like that:</p> <table> -<thead> -<tr> -<th></th> -<th>block1</th> -<th>glyph</th> -<th>block2</th> -</tr> -</thead> -<tbody> -<tr> -<td>foreground</td> -<td>F1</td> -<td>B2</td> -<td>F2</td> -</tr> -<tr> -<td>background</td> -<td>B1</td> -<td>B1</td> -<td>B2</td> -</tr> -</tbody> + <thead> + <tr> + <th style="text-align: left"></th> + <th style="text-align: left">block1</th> + <th style="text-align: left">glyph</th> + <th style="text-align: left">block2</th> + </tr> + </thead> + <tbody> + <tr> + <td style="text-align: left">foreground</td> + <td style="text-align: left">F1</td> + <td style="text-align: left">B2</td> + <td style="text-align: left">F2</td> + </tr> + <tr> + <td style="text-align: left">background</td> + <td style="text-align: left">B1</td> + <td style="text-align: left">B1</td> + <td style="text-align: left">B2</td> + </tr> + </tbody> </table> <p>So, that’s a start. First, let’s define the glyph symbols in the polybar config:</p> <div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">[glyph]</span> diff --git a/sitemap.xml b/sitemap.xml index 4700b24..aef42a4 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -191,7 +191,7 @@- https://sqrtminusone.xyz/packages/password-store-ivy/ +https://sqrtminusone.xyz/packages/password-store-completion/ 2022-02-13T00:00:00+00:00 diff --git a/stats/all.png b/stats/all.png index e9218cf..bcc818f 100644 Binary files a/stats/all.png and b/stats/all.png differ diff --git a/stats/emacs-vim.png b/stats/emacs-vim.png index 3396763..cff1637 100644 Binary files a/stats/emacs-vim.png and b/stats/emacs-vim.png differ diff --git a/stats/literate-config.png b/stats/literate-config.png index e51b3e7..07afbd6 100644 Binary files a/stats/literate-config.png and b/stats/literate-config.png differ diff --git a/tags/elfeed/index.html b/tags/elfeed/index.html index 381e651..60de0c7 100644 --- a/tags/elfeed/index.html +++ b/tags/elfeed/index.html @@ -19,13 +19,6 @@ - - - - - - - diff --git a/tags/elfeed/index.xml b/tags/elfeed/index.xml index ec16778..41393e7 100644 --- a/tags/elfeed/index.xml +++ b/tags/elfeed/index.xml @@ -13,14 +13,14 @@ https://sqrtminusone.xyz/posts/2022-09-16-vosk/Fri, 16 Sep 2022 00:00:00 +0000 https://sqrtminusone.xyz/posts/2022-09-16-vosk/ -Edit <2022-10-13 Thu>: Just a couple of days after this post, OpenAI released a speech recognition model called Whisper, which is so much better than anything I’ve ever seen before. I’ve decided to leave this post as it is, but check the Emacs config for the updated version. In my experience, finding something in a podcast is particularly troublesome. For example, occasionally I want to refer to some line in the podcast to make an org-roam node, e. +<p><strong>Edit <span class="timestamp-wrapper"><span class="timestamp"><2022-10-13 Thu></span></span>:</strong> Just a couple of days after this post, OpenAI released a speech recognition model called <a href="https://openai.com/blog/whisper/">Whisper</a>, which is so much better than anything I’ve ever seen before. I’ve decided to leave this post as it is, but check the <a href="https://sqrtminusone.xyz/configs/emacs/#podcast-transcripts">Emacs config</a> for the updated version.</p> <p>In my experience, finding something in a podcast is particularly troublesome. For example, occasionally I want to refer to some line in the podcast to make an <a href="https://github.com/org-roam/org-roam">org-roam</a> node, e.g. I want to check that I got that part right.</p> - diff --git a/tags/emacs/index.html b/tags/emacs/index.html index f3ce576..3c13ffa 100644 --- a/tags/emacs/index.html +++ b/tags/emacs/index.html @@ -19,13 +19,6 @@ - - - - - - - diff --git a/tags/emacs/index.xml b/tags/emacs/index.xml index ed2d0de..1edae4f 100644 --- a/tags/emacs/index.xml +++ b/tags/emacs/index.xml @@ -13,77 +13,77 @@ https://sqrtminusone.xyz/posts/2023-11-11-index/
My EMMS and elfeed setup https://sqrtminusone.xyz/posts/2021-09-07-emms/Wed, 08 Sep 2021 00:00:00 +0000 https://sqrtminusone.xyz/posts/2021-09-07-emms/ -Intro This is the current state of my quest to live in Emacs, at least in part of reading RSS and music. Even before I lost my mind about customizing obscure keyboard-driven software, I tried Inoreader, self-hosted FreshRSS, and then newsboat from the RSS side and ncmpcpp+MPD from the audio player side. At some point, I got curious about whether I can do the same in Emacs. The respective emacs packages, elfeed and EMMS, proved somewhat tricky to set up, i. +<h2 id="intro">Intro</h2> <figure><img src="https://sqrtminusone.xyz/images/emms/emms-screenshot.png"> </figure> <p>This is the current state of my quest to live in Emacs, at least in part of reading RSS and music.</p> <p>Even before I lost my mind about customizing obscure keyboard-driven software, I tried Inoreader, self-hosted FreshRSS, and then newsboat from the RSS side and ncmpcpp+MPD from the audio player side. At some point, I got curious about whether I can do the same in Emacs.</p> Sat, 11 Nov 2023 00:00:00 +0000 https://sqrtminusone.xyz/posts/2023-11-11-index/ -The post describes a Johnny.Decimal-inspired filesystem structure, declared in an org file and synchronized across machines. Different folders are available on different machines. Intro My filesystem is, shall we say, not the most orderly place. It’s been somewhat messy, and messy in different ways across my three machines. For instance, my laptop had work projects in ~/Code/Job, my work machine had just ~/Code, and so forth. Strangely, I couldn’t find and existing solution to that problem. +<div class="abstract"> <p>The post describes a Johnny.Decimal-inspired filesystem structure, declared in an org file and synchronized across machines. Different folders are available on different machines.</p> </div> <h2 id="intro">Intro</h2> <p>My filesystem is, shall we say, not the most orderly place.</p> <center> <iframe src="https://emacs.ch/@sqrtminusone/110514686718545191/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="500" allowfullscreen="allowfullscreen"></iframe><script src="https://emacs.ch/embed.js" async="async"></script> </center> <p>It’s been somewhat messy, and messy in different ways across my three machines. For instance, my laptop had work projects in <code>~/Code/Job</code>, my work machine had just <code>~/Code</code>, and so forth.</p> 916 days of Emacs https://sqrtminusone.xyz/posts/2023-04-13-emacs/Thu, 13 Apr 2023 00:00:00 +0000 https://sqrtminusone.xyz/posts/2023-04-13-emacs/ -Poof I made my free-time disappear - Ellis Kenyő, on being called an "elisp mage" Little did I know on the fateful day of [2020-10-09 Fri], when I had installed GNU Emacs. I wasn’t thinking about the ethical aspects of free software, the aesthetics of Lisp, or these other things with which an occasional layperson might explain how an almost half a century old program can still be in active use. +<style> .quote-title { margin-left: 24px; } </style> <blockquote> <p>Poof I made my free-time disappear</p> </blockquote> <p class="quote-title">- <a href="https://elken.dev">Ellis Kenyő</a>, on being called an "elisp mage" <p>Little did I know on the fateful day of <strong><span class="timestamp-wrapper"><span class="timestamp">[2020-10-09 Fri]</span></span></strong>, when I had installed <a href="https://www.gnu.org/software/emacs/">GNU Emacs</a>. I wasn’t thinking about the <a href="https://www.gnu.org/philosophy/philosophy.html">ethical aspects</a> of free software, the <a href="https://www.webofstories.com/play/marvin.minsky/44">aesthetics of Lisp</a>, or these other things with which an occasional layperson might explain how an almost <a href="https://www.jwz.org/doc/emacs-timeline.html">half a century old</a> program can still be in <a href="https://emacsconf.org/2022/talks/survey/">active use</a>.</p> Running Gource with Emacs https://sqrtminusone.xyz/posts/2023-01-02-gource/Mon, 02 Jan 2023 00:00:00 +0000 https://sqrtminusone.xyz/posts/2023-01-02-gource/ -Gource is a program that draws an animated graph of users changing the repository over time. Although it can work without extra effort (just run gource in a git repo), there are some tweaks that can be done: Gource supports using custom pictures for users. Gravatar is an obvious place to get these. Occasionally, the same people have different names and/or emails in history. It may happen when people use forges like GitLab or just have different settings on different machines. +<figure><img src="https://sqrtminusone.xyz/images/gource/gource.png"> </figure> <p><a href="https://gource.io/">Gource</a> is a program that draws an animated graph of users changing the repository over time.</p> <p>Although it can work without extra effort (just run <code>gource</code> in a <a href="https://git-scm.com/">git</a> repo), there are some tweaks that can be done:</p> <ul> <li>Gource supports using custom pictures for users. <a href="https://en.gravatar.com/">Gravatar</a> is an obvious place to get these.</li> <li>Occasionally, the same people have different names and/or emails in history.<br /> It may happen when people use forges like <a href="https://gitlab.com/">GitLab</a> or just have different settings on different machines. It would be nice to merge these names.</li> <li>Visualizing the history of multiple repositories (e.g. frontend and backend) requires combining multiple gource logs.</li> </ul> <p>So, why not try doing that with Emacs?</p> Podcast transcripts with elfeed & speech recognition engine https://sqrtminusone.xyz/posts/2022-09-16-vosk/Fri, 16 Sep 2022 00:00:00 +0000 https://sqrtminusone.xyz/posts/2022-09-16-vosk/ -Edit <2022-10-13 Thu>: Just a couple of days after this post, OpenAI released a speech recognition model called Whisper, which is so much better than anything I’ve ever seen before. I’ve decided to leave this post as it is, but check the Emacs config for the updated version. In my experience, finding something in a podcast is particularly troublesome. For example, occasionally I want to refer to some line in the podcast to make an org-roam node, e. +<p><strong>Edit <span class="timestamp-wrapper"><span class="timestamp"><2022-10-13 Thu></span></span>:</strong> Just a couple of days after this post, OpenAI released a speech recognition model called <a href="https://openai.com/blog/whisper/">Whisper</a>, which is so much better than anything I’ve ever seen before. I’ve decided to leave this post as it is, but check the <a href="https://sqrtminusone.xyz/configs/emacs/#podcast-transcripts">Emacs config</a> for the updated version.</p> <p>In my experience, finding something in a podcast is particularly troublesome. For example, occasionally I want to refer to some line in the podcast to make an <a href="https://github.com/org-roam/org-roam">org-roam</a> node, e.g. I want to check that I got that part right.</p> Extending elfeed with PDF viewer and subtitles fetcher https://sqrtminusone.xyz/posts/2022-05-09-pdf/Tue, 10 May 2022 00:00:00 +0000 https://sqrtminusone.xyz/posts/2022-05-09-pdf/ -Intro elfeed is one of the most popular Emacs packages, and it’s also one in which I ended up investing a lot of effort. I wrote about the EMMS integration and even made a custom frontpage to my liking. However, sites frequently limit the amount of information shipped in the RSS feed. Oftentimes the entry doesn’t include the entire content (of which, by the way, this blog was guilty). Also, there’s non-textual content, of which in this post I consider YouTube subscriptions. +<h2 id="intro">Intro</h2> <p><a href="https://github.com/skeeto/elfeed">elfeed</a> is one of the most popular Emacs packages, and it’s also one in which I ended up investing a lot of effort. I wrote about the <a href="https://sqrtminusone.xyz/posts/2021-09-07-emms/">EMMS integration</a> and even made a <a href="https://github.com/SqrtMinusOne/elfeed-summary">custom frontpage</a> to my liking.</p> <p>However, sites frequently limit the amount of information shipped in the RSS feed. Oftentimes the entry doesn’t include the entire content (of which, by the way, this blog was guilty).</p> A few cases of literate configuration https://sqrtminusone.xyz/posts/2022-02-12-literate/Sat, 12 Feb 2022 00:00:00 +0000 https://sqrtminusone.xyz/posts/2022-02-12-literate/ -A post that arose from the discussion of literate configuration on the System Crafters Discord. I am using the literate configuration strategy (based on Emacs’ Org Mode) to manage most of my configuration files. A piece of such a configuration can be as simple as an Org file, which is tangled to one or many plain-text configuration files, but it can be more. In my opinion, a literate configuration can be more straightforward and concise than a “normal” one, thanks to Org Mode’s capabilities of working with source code. +<p>A post that arose from the discussion of literate configuration on the <a href="https://systemcrafters.net/">System Crafters</a> Discord.</p> <p>I am using the <a href="https://leanpub.com/lit-config">literate configuration</a> strategy (based on <a href="https://orgmode.org/">Emacs’ Org Mode</a>) to manage most of my configuration files. A piece of such a configuration can be as simple as an Org file, which is tangled to one or many plain-text configuration files, but it can be more.</p> <p>In my opinion, a literate configuration can be more straightforward and concise than a “normal” one, thanks to Org Mode’s capabilities of <a href="https://orgmode.org/manual/Working-with-Source-Code.html">working with source code</a>. So here I present a few examples from my configuration where I think this is the case:</p> Using EXWM and perspective.el on multi-monitor setup https://sqrtminusone.xyz/posts/2022-01-03-exwm/Mon, 03 Jan 2022 00:00:00 +0000 https://sqrtminusone.xyz/posts/2022-01-03-exwm/ -I wrote about Emacs and i3 integration around two months ago. Shortly after however, I decided to give EXWM another try, mainly because my largest reservation - lack of performance - seems to have been resolved by updates to the native compilation since my first attempt. Or I may have lost some sensitivity to that issue. Regardless, the second dive into EXWM thus far feels successful, and I think it’s the right time to share some of my thoughts on the subject. +<p>I wrote about <a href="https://sqrtminusone.xyz/posts/2021-10-04-emacs-i3/">Emacs and i3</a> integration around two months ago. Shortly after however, I decided to give EXWM another try, mainly because my largest reservation - lack of performance - seems to have been resolved by updates to the native compilation since my first attempt. Or I may have lost some sensitivity to that issue. Regardless, the second dive into EXWM thus far feels successful, and I think it’s the right time to share some of my thoughts on the subject.</p> Getting a consistent set of keybindings between i3 and Emacs https://sqrtminusone.xyz/posts/2021-10-04-emacs-i3/Wed, 06 Oct 2021 00:00:00 +0000 https://sqrtminusone.xyz/posts/2021-10-04-emacs-i3/ -Intro 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, 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? +<h2 id="intro">Intro</h2> <p>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 <a href="https://i3wm.org">i3wm</a>, 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.</p> <p>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 <a href="https://xmonad.org/">XMonad</a>, for instance.</p> My EMMS and elfeed setup https://sqrtminusone.xyz/posts/2021-09-07-emms/Wed, 08 Sep 2021 00:00:00 +0000 https://sqrtminusone.xyz/posts/2021-09-07-emms/ -Intro This is the current state of my quest to live in Emacs, at least in part of reading RSS and music. Even before I lost my mind about customizing obscure keyboard-driven software, I tried Inoreader, self-hosted FreshRSS, and then newsboat from the RSS side and ncmpcpp+MPD from the audio player side. At some point, I got curious about whether I can do the same in Emacs. The respective emacs packages, elfeed and EMMS, proved somewhat tricky to set up, i. +<h2 id="intro">Intro</h2> <figure><img src="https://sqrtminusone.xyz/images/emms/emms-screenshot.png"> </figure> <p>This is the current state of my quest to live in Emacs, at least in part of reading RSS and music.</p> <p>Even before I lost my mind about customizing obscure keyboard-driven software, I tried Inoreader, self-hosted FreshRSS, and then newsboat from the RSS side and ncmpcpp+MPD from the audio player side. At some point, I got curious about whether I can do the same in Emacs.</p> Replacing Jupyter Notebook with Org Mode https://sqrtminusone.xyz/posts/2021-05-01-org-python/Sat, 01 May 2021 00:00:00 +0000 https://sqrtminusone.xyz/posts/2021-05-01-org-python/ -Why? Jupyter Notebook and its successor Jupyter Lab providing an interactive development environment for many programming languages are in lots of ways great pieces of software. But while I was using the former, and then the latter, I was also an as-full-time-as-one-can-get NeoVim user. “As one can get” is because, of course, there is no sensible way to extend the NeoVim editing experience to the Jupyter ecosystem. A possibility for change appeared with my discovery of Emacs not so long ago. +<figure><img src="https://sqrtminusone.xyz/images/org-python/org-python-screenshot.png"> </figure> <h2 id="why">Why?</h2> <p><a href="https://jupyter-notebook.readthedocs.io/en/stable/">Jupyter Notebook</a> and its successor <a href="https://jupyterlab.readthedocs.io/en/stable/">Jupyter Lab</a> providing an interactive development environment for many programming languages are in lots of ways great pieces of software.</p> <p>But while I was using the former, and then the latter, I was also an as-full-time-as-one-can-get NeoVim user. “As one can get” is because, of course, there is no sensible way to extend the NeoVim editing experience to the Jupyter ecosystem.</p> - diff --git a/tags/emms/index.html b/tags/emms/index.html index 2d2115c..e49aa24 100644 --- a/tags/emms/index.html +++ b/tags/emms/index.html @@ -19,13 +19,6 @@ - - - - - - - diff --git a/tags/emms/index.xml b/tags/emms/index.xml index 042c9c9..f9b0864 100644 --- a/tags/emms/index.xml +++ b/tags/emms/index.xml @@ -13,7 +13,7 @@ https://sqrtminusone.xyz/posts/2021-09-07-emms/
Multiple Gmail accounts & labels with Emacs https://sqrtminusone.xyz/posts/2021-02-27-gmail/Sat, 27 Feb 2021 00:00:00 +0000 https://sqrtminusone.xyz/posts/2021-02-27-gmail/ -Intro For quite some time, e-mail seemed like an anomaly in my workflow. I am a long time Gmail user, and my decade-old account has a somewhat formidable quantity of labels and filters. My messages are often assigned multiple labels, and I also like to keep only a bunch of messages in the inbox. Although, in my opinion, Gmail web UI was and still is leagues ahead of many of its competitors and even allows keyboard-centric workflow, it’s awkward to use with a keyboard-driven browser, and for no money on Earth I would enable browser notifications. +<h2 id="intro">Intro</h2> <p>For quite some time, e-mail seemed like an anomaly in my workflow. I am a long time Gmail user, and my decade-old account has a somewhat formidable quantity of labels and filters. My messages are often assigned multiple labels, and I also like to keep only a bunch of messages in the inbox.</p> <p>Although, in my opinion, Gmail web UI was and still is leagues ahead of many of its competitors and even allows keyboard-centric workflow, it’s awkward to use with a keyboard-driven browser, and for no money on Earth I would enable browser notifications.</p> Wed, 08 Sep 2021 00:00:00 +0000 https://sqrtminusone.xyz/posts/2021-09-07-emms/ -Intro This is the current state of my quest to live in Emacs, at least in part of reading RSS and music. Even before I lost my mind about customizing obscure keyboard-driven software, I tried Inoreader, self-hosted FreshRSS, and then newsboat from the RSS side and ncmpcpp+MPD from the audio player side. At some point, I got curious about whether I can do the same in Emacs. The respective emacs packages, elfeed and EMMS, proved somewhat tricky to set up, i. +<h2 id="intro">Intro</h2> <figure><img src="https://sqrtminusone.xyz/images/emms/emms-screenshot.png"> </figure> <p>This is the current state of my quest to live in Emacs, at least in part of reading RSS and music.</p> <p>Even before I lost my mind about customizing obscure keyboard-driven software, I tried Inoreader, self-hosted FreshRSS, and then newsboat from the RSS side and ncmpcpp+MPD from the audio player side. At some point, I got curious about whether I can do the same in Emacs.</p> diff --git a/tags/exwm/index.html b/tags/exwm/index.html index 8b71ee7..4581401 100644 --- a/tags/exwm/index.html +++ b/tags/exwm/index.html @@ -19,13 +19,6 @@ - - - - - - - diff --git a/tags/exwm/index.xml b/tags/exwm/index.xml index 09282ad..c119e62 100644 --- a/tags/exwm/index.xml +++ b/tags/exwm/index.xml @@ -13,7 +13,7 @@ https://sqrtminusone.xyz/posts/2022-01-03-exwm/Mon, 03 Jan 2022 00:00:00 +0000 https://sqrtminusone.xyz/posts/2022-01-03-exwm/ -I wrote about Emacs and i3 integration around two months ago. Shortly after however, I decided to give EXWM another try, mainly because my largest reservation - lack of performance - seems to have been resolved by updates to the native compilation since my first attempt. Or I may have lost some sensitivity to that issue. Regardless, the second dive into EXWM thus far feels successful, and I think it’s the right time to share some of my thoughts on the subject. +<p>I wrote about <a href="https://sqrtminusone.xyz/posts/2021-10-04-emacs-i3/">Emacs and i3</a> integration around two months ago. Shortly after however, I decided to give EXWM another try, mainly because my largest reservation - lack of performance - seems to have been resolved by updates to the native compilation since my first attempt. Or I may have lost some sensitivity to that issue. Regardless, the second dive into EXWM thus far feels successful, and I think it’s the right time to share some of my thoughts on the subject.</p> diff --git a/tags/i3wm/index.html b/tags/i3wm/index.html index f3a057e..3636839 100644 --- a/tags/i3wm/index.html +++ b/tags/i3wm/index.html @@ -19,13 +19,6 @@ - - - - - - - diff --git a/tags/i3wm/index.xml b/tags/i3wm/index.xml index 02eeb9a..f5a43e0 100644 --- a/tags/i3wm/index.xml +++ b/tags/i3wm/index.xml @@ -13,7 +13,7 @@ https://sqrtminusone.xyz/posts/2021-10-04-emacs-i3/Wed, 06 Oct 2021 00:00:00 +0000 https://sqrtminusone.xyz/posts/2021-10-04-emacs-i3/ -Intro 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, 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? +<h2 id="intro">Intro</h2> <p>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 <a href="https://i3wm.org">i3wm</a>, 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.</p> <p>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 <a href="https://xmonad.org/">XMonad</a>, for instance.</p> diff --git a/tags/index.html b/tags/index.html index cdd7c4d..0caf587 100644 --- a/tags/index.html +++ b/tags/index.html @@ -19,13 +19,6 @@ - - - - - - - diff --git a/tags/mail/index.html b/tags/mail/index.html index ff21e5a..736a266 100644 --- a/tags/mail/index.html +++ b/tags/mail/index.html @@ -19,13 +19,6 @@ - - - - - - - diff --git a/tags/mail/index.xml b/tags/mail/index.xml index 618ebbe..1e816d8 100644 --- a/tags/mail/index.xml +++ b/tags/mail/index.xml @@ -13,7 +13,7 @@ https://sqrtminusone.xyz/posts/2021-02-27-gmail/Sat, 27 Feb 2021 00:00:00 +0000 https://sqrtminusone.xyz/posts/2021-02-27-gmail/ -Intro For quite some time, e-mail seemed like an anomaly in my workflow. I am a long time Gmail user, and my decade-old account has a somewhat formidable quantity of labels and filters. My messages are often assigned multiple labels, and I also like to keep only a bunch of messages in the inbox. Although, in my opinion, Gmail web UI was and still is leagues ahead of many of its competitors and even allows keyboard-centric workflow, it’s awkward to use with a keyboard-driven browser, and for no money on Earth I would enable browser notifications. +<h2 id="intro">Intro</h2> <p>For quite some time, e-mail seemed like an anomaly in my workflow. I am a long time Gmail user, and my decade-old account has a somewhat formidable quantity of labels and filters. My messages are often assigned multiple labels, and I also like to keep only a bunch of messages in the inbox.</p> <p>Although, in my opinion, Gmail web UI was and still is leagues ahead of many of its competitors and even allows keyboard-centric workflow, it’s awkward to use with a keyboard-driven browser, and for no money on Earth I would enable browser notifications.</p> diff --git a/tags/org-mode/index.html b/tags/org-mode/index.html index d2fa275..18bb9ff 100644 --- a/tags/org-mode/index.html +++ b/tags/org-mode/index.html @@ -19,13 +19,6 @@ - - - - - - - diff --git a/tags/org-mode/index.xml b/tags/org-mode/index.xml index ddd1c30..a2da5fe 100644 --- a/tags/org-mode/index.xml +++ b/tags/org-mode/index.xml @@ -13,14 +13,14 @@ https://sqrtminusone.xyz/posts/2022-05-09-pdf/Tue, 10 May 2022 00:00:00 +0000 https://sqrtminusone.xyz/posts/2022-05-09-pdf/ -Intro elfeed is one of the most popular Emacs packages, and it’s also one in which I ended up investing a lot of effort. I wrote about the EMMS integration and even made a custom frontpage to my liking. However, sites frequently limit the amount of information shipped in the RSS feed. Oftentimes the entry doesn’t include the entire content (of which, by the way, this blog was guilty). Also, there’s non-textual content, of which in this post I consider YouTube subscriptions. +<h2 id="intro">Intro</h2> <p><a href="https://github.com/skeeto/elfeed">elfeed</a> is one of the most popular Emacs packages, and it’s also one in which I ended up investing a lot of effort. I wrote about the <a href="https://sqrtminusone.xyz/posts/2021-09-07-emms/">EMMS integration</a> and even made a <a href="https://github.com/SqrtMinusOne/elfeed-summary">custom frontpage</a> to my liking.</p> <p>However, sites frequently limit the amount of information shipped in the RSS feed. Oftentimes the entry doesn’t include the entire content (of which, by the way, this blog was guilty).</p> - diff --git a/tags/org/index.html b/tags/org/index.html index d573cd1..3645ab1 100644 --- a/tags/org/index.html +++ b/tags/org/index.html @@ -19,13 +19,6 @@ - - - - - - - diff --git a/tags/org/index.xml b/tags/org/index.xml index c1a7cd0..24c3f41 100644 --- a/tags/org/index.xml +++ b/tags/org/index.xml @@ -13,7 +13,7 @@ https://sqrtminusone.xyz/posts/2021-05-01-org-python/
A few cases of literate configuration https://sqrtminusone.xyz/posts/2022-02-12-literate/Sat, 12 Feb 2022 00:00:00 +0000 https://sqrtminusone.xyz/posts/2022-02-12-literate/ -A post that arose from the discussion of literate configuration on the System Crafters Discord. I am using the literate configuration strategy (based on Emacs’ Org Mode) to manage most of my configuration files. A piece of such a configuration can be as simple as an Org file, which is tangled to one or many plain-text configuration files, but it can be more. In my opinion, a literate configuration can be more straightforward and concise than a “normal” one, thanks to Org Mode’s capabilities of working with source code. +<p>A post that arose from the discussion of literate configuration on the <a href="https://systemcrafters.net/">System Crafters</a> Discord.</p> <p>I am using the <a href="https://leanpub.com/lit-config">literate configuration</a> strategy (based on <a href="https://orgmode.org/">Emacs’ Org Mode</a>) to manage most of my configuration files. A piece of such a configuration can be as simple as an Org file, which is tangled to one or many plain-text configuration files, but it can be more.</p> <p>In my opinion, a literate configuration can be more straightforward and concise than a “normal” one, thanks to Org Mode’s capabilities of <a href="https://orgmode.org/manual/Working-with-Source-Code.html">working with source code</a>. So here I present a few examples from my configuration where I think this is the case:</p> Sat, 01 May 2021 00:00:00 +0000 https://sqrtminusone.xyz/posts/2021-05-01-org-python/ -Why? Jupyter Notebook and its successor Jupyter Lab providing an interactive development environment for many programming languages are in lots of ways great pieces of software. But while I was using the former, and then the latter, I was also an as-full-time-as-one-can-get NeoVim user. “As one can get” is because, of course, there is no sensible way to extend the NeoVim editing experience to the Jupyter ecosystem. A possibility for change appeared with my discovery of Emacs not so long ago. +<figure><img src="https://sqrtminusone.xyz/images/org-python/org-python-screenshot.png"> </figure> <h2 id="why">Why?</h2> <p><a href="https://jupyter-notebook.readthedocs.io/en/stable/">Jupyter Notebook</a> and its successor <a href="https://jupyterlab.readthedocs.io/en/stable/">Jupyter Lab</a> providing an interactive development environment for many programming languages are in lots of ways great pieces of software.</p> <p>But while I was using the former, and then the latter, I was also an as-full-time-as-one-can-get NeoVim user. “As one can get” is because, of course, there is no sensible way to extend the NeoVim editing experience to the Jupyter ecosystem.</p> diff --git a/tags/orgmode/index.html b/tags/orgmode/index.html index 46f46df..6cb46a8 100644 --- a/tags/orgmode/index.html +++ b/tags/orgmode/index.html @@ -19,13 +19,6 @@ - - - - - - - diff --git a/tags/orgmode/index.xml b/tags/orgmode/index.xml index aa832ed..2719302 100644 --- a/tags/orgmode/index.xml +++ b/tags/orgmode/index.xml @@ -13,7 +13,7 @@ https://sqrtminusone.xyz/posts/2023-11-11-index/Sat, 11 Nov 2023 00:00:00 +0000 https://sqrtminusone.xyz/posts/2023-11-11-index/ -The post describes a Johnny.Decimal-inspired filesystem structure, declared in an org file and synchronized across machines. Different folders are available on different machines. Intro My filesystem is, shall we say, not the most orderly place. It’s been somewhat messy, and messy in different ways across my three machines. For instance, my laptop had work projects in ~/Code/Job, my work machine had just ~/Code, and so forth. Strangely, I couldn’t find and existing solution to that problem. +<div class="abstract"> <p>The post describes a Johnny.Decimal-inspired filesystem structure, declared in an org file and synchronized across machines. Different folders are available on different machines.</p> </div> <h2 id="intro">Intro</h2> <p>My filesystem is, shall we say, not the most orderly place.</p> <center> <iframe src="https://emacs.ch/@sqrtminusone/110514686718545191/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="500" allowfullscreen="allowfullscreen"></iframe><script src="https://emacs.ch/embed.js" async="async"></script> </center> <p>It’s been somewhat messy, and messy in different ways across my three machines. For instance, my laptop had work projects in <code>~/Code/Job</code>, my work machine had just <code>~/Code</code>, and so forth.</p>