From c650ad3754c4226be05c7fc46d20e6e8c46781b5 Mon Sep 17 00:00:00 2001 From: Amin Bandali Date: Sat, 17 Mar 2018 10:13:13 -0400 Subject: [PATCH 01/16] a few small tweaks --- getmail/.getmail/getmailrc | 1 + gnupg/.gnupg/gpg-agent.conf | 3 +++ latexmk/.latexmkrc | 2 +- rofi/.config/rofi/config | 2 +- 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/getmail/.getmail/getmailrc b/getmail/.getmail/getmailrc index acacba9..188c621 100644 --- a/getmail/.getmail/getmailrc +++ b/getmail/.getmail/getmailrc @@ -2,6 +2,7 @@ type = SimplePOP3SSLRetriever server = fencepost.gnu.org username = aminb +password_command = ("gpg2", "--no-tty", "-q", "-d", "~/.passwd/gnu.gpg") port = 995 use_apop = True diff --git a/gnupg/.gnupg/gpg-agent.conf b/gnupg/.gnupg/gpg-agent.conf index 5a5cdd4..d54305a 100644 --- a/gnupg/.gnupg/gpg-agent.conf +++ b/gnupg/.gnupg/gpg-agent.conf @@ -1,2 +1,5 @@ +default-cache-ttl 43200 +max-cache-ttl 43200 + default-cache-ttl-ssh 10800 max-cache-ttl-ssh 10800 diff --git a/latexmk/.latexmkrc b/latexmk/.latexmkrc index fba0b29..c86e34e 100644 --- a/latexmk/.latexmkrc +++ b/latexmk/.latexmkrc @@ -1,4 +1,4 @@ -$pdf_previewer = "zathura %O %S"; +$pdf_previewer = "start okular %O %S"; $clean_ext = "aux out"; #$pdf_update_method = 4; #$pdf_update_command = "zathura %O %S"; diff --git a/rofi/.config/rofi/config b/rofi/.config/rofi/config index 6b5a1ac..e9947be 100644 --- a/rofi/.config/rofi/config +++ b/rofi/.config/rofi/config @@ -14,4 +14,4 @@ rofi.monitor: -1 !rofi.theme: /usr/share/rofi/themes//Paper.rasi !rofi.theme: /usr/share/rofi/themes//sidebar.rasi -rofi.theme: /usr/share/rofi/themes//gruvbox-light.rasi +rofi.theme: .nix-profile/share/rofi/themes//gruvbox-light.rasi -- 2.20.1 From 149b29f1d745f8da7ed0da386282e61ae5057af2 Mon Sep 17 00:00:00 2001 From: Amin Bandali Date: Mon, 16 Apr 2018 15:52:06 -0400 Subject: [PATCH 02/16] terrible commit message incoming: many changes --- bspwm/.config/bspwm/bspwmrc | 12 +++++++----- compton/.config/compton.conf | 2 ++ git/.gitconfig | 2 ++ gnupg/.gnupg/gpg-agent.conf | 2 ++ redshift/.config/redshift.conf | 6 ++++-- rofi/.config/rofi/config | 2 +- sxhkd/.config/sxhkd/sxhkdrc | 16 ++++++++-------- x/.Xresources.d/rxvt-unicode | 2 +- x/.xprofile | 1 - zathura/.config/zathura/zathurarc | 3 +++ zsh/.zimrc | 7 ++++--- zsh/.zprofile | 23 +++++++++++++---------- zsh/.zshrc | 8 ++------ 13 files changed, 49 insertions(+), 37 deletions(-) diff --git a/bspwm/.config/bspwm/bspwmrc b/bspwm/.config/bspwm/bspwmrc index 250dc1d..0234073 100755 --- a/bspwm/.config/bspwm/bspwmrc +++ b/bspwm/.config/bspwm/bspwmrc @@ -3,18 +3,18 @@ sxhkd & sh ~/.fehbg & xfce4-panel -d & -pnmixer & compton & -nm-applet & +sleep 0.5 && pasystray --notify=all & bspc monitor -d I II III IV V VI VII VIII IX X #bspc monitor eDP-1 -d I II III IV V #bspc monitor HDMI-1 -d VI VII VIII IX X -bspc config border_width 2 -bspc config window_gap 8 +#bspc config border_width 2 +#bspc config window_gap 8 +bspc config window_gap 0 -#bspc config top_padding 20 +bspc config bottom_padding 26 bspc config split_ratio 0.52 bspc config borderless_monocle true @@ -54,3 +54,5 @@ bspc rule -a discord state=floating bspc rule -a X2goclient state=floating bspc rule -a SimpleScreenRecorder state=floating bspc rule -a Gimp state=floating +bspc rule -a Wrapper-2.0 state=floating +bspc rule -a Zathura state=tiled diff --git a/compton/.config/compton.conf b/compton/.config/compton.conf index 6f1fb25..9c2e2b7 100644 --- a/compton/.config/compton.conf +++ b/compton/.config/compton.conf @@ -79,6 +79,8 @@ glx-no-stencil = true; # Recommended. glx-copy-from-front = false; # Useful with --glx-swap-method, # glx-use-copysubbuffermesa = true; # Recommended if it works. Breaks VSync. # glx-no-rebind-pixmap = true; # Recommended if it works. +glx-no-rebind-pixmap = true; # Recommended if it works. +#glx-swap-method = "4"; # See man page. glx-swap-method = "4"; # See man page. # Window type settings diff --git a/git/.gitconfig b/git/.gitconfig index aed8242..158c670 100644 --- a/git/.gitconfig +++ b/git/.gitconfig @@ -11,3 +11,5 @@ git = !exec git [core] autocrlf = input +[color] + ui = auto diff --git a/gnupg/.gnupg/gpg-agent.conf b/gnupg/.gnupg/gpg-agent.conf index d54305a..c456de2 100644 --- a/gnupg/.gnupg/gpg-agent.conf +++ b/gnupg/.gnupg/gpg-agent.conf @@ -3,3 +3,5 @@ max-cache-ttl 43200 default-cache-ttl-ssh 10800 max-cache-ttl-ssh 10800 + +#pinentry-program /usr/bin/pinentry-qt diff --git a/redshift/.config/redshift.conf b/redshift/.config/redshift.conf index ced1805..d574809 100644 --- a/redshift/.config/redshift.conf +++ b/redshift/.config/redshift.conf @@ -7,7 +7,9 @@ ;temp-day=6500 temp-day=6200 ;temp-night=4800 -temp-night=5500 +;temp-night=5000 +;temp-night=4500 +temp-night=4000 ; Enable/Disable a smooth transition between day and night ; 0 will cause a direct change from day to night screen temperature. @@ -22,7 +24,7 @@ transition=1 ;brightness-night=0.4 ; Set the screen gamma (for all colors, or each color channel ; individually) -gamma=0.8 +;gamma=0.8 ;gamma=1.0 ;gamma=0.8:0.7:0.8 ; This can also be set individually for day and night since diff --git a/rofi/.config/rofi/config b/rofi/.config/rofi/config index e9947be..6b5a1ac 100644 --- a/rofi/.config/rofi/config +++ b/rofi/.config/rofi/config @@ -14,4 +14,4 @@ rofi.monitor: -1 !rofi.theme: /usr/share/rofi/themes//Paper.rasi !rofi.theme: /usr/share/rofi/themes//sidebar.rasi -rofi.theme: .nix-profile/share/rofi/themes//gruvbox-light.rasi +rofi.theme: /usr/share/rofi/themes//gruvbox-light.rasi diff --git a/sxhkd/.config/sxhkd/sxhkdrc b/sxhkd/.config/sxhkd/sxhkdrc index 8134bac..5329d62 100644 --- a/sxhkd/.config/sxhkd/sxhkdrc +++ b/sxhkd/.config/sxhkd/sxhkdrc @@ -21,7 +21,7 @@ super + backslash rofi -show window -display-run '> ' -display-window ' 🗔 ' # password manager -super + shift + space +alt + space rofi-pass # firefox @@ -65,8 +65,8 @@ XF86LaunchB toggle-presentation-mode # monitor brightness -#XF86MonBrightness{Up,Down} -# light -{A,U} 5 +XF86MonBrightness{Up,Down} + light -{A,U} 5 super + apostrophe rofi-light @@ -91,9 +91,9 @@ super + {w,q} super + m bspc desktop -l next -# if the current node is automatic, send it to the last manual, otherwise pull the last leaf +# send the newest marked node to the newest preselected node super + y - bspc query -N -n focused.automatic && bspc node -n last.!automatic || bspc node last.leaf -n focused + bspc node newest.marked.local -n newest.!automatic.local # swap the current node and the biggest node super + g @@ -108,8 +108,8 @@ super + {t,shift + t,s,f} bspc node -t {tiled,pseudo_tiled,floating,fullscreen} # set the node flags -super + ctrl + {x,y,z} - bspc node -g {locked,sticky,private} +super + ctrl + {m,x,y,z} + bspc node -g {marked,locked,sticky,private} # # focus/swap @@ -133,7 +133,7 @@ super + bracket{left,right} # send to next/prev desktop super + shift + bracket{left,right} - bspc node -d {prev,next} + bspc node -d {prev,next} --follow # focus the last node/desktop super + {grave,Tab} diff --git a/x/.Xresources.d/rxvt-unicode b/x/.Xresources.d/rxvt-unicode index a276d3a..56df5fc 100644 --- a/x/.Xresources.d/rxvt-unicode +++ b/x/.Xresources.d/rxvt-unicode @@ -23,7 +23,7 @@ URxvt.keysym.Shift-Down: command:\033]721;1\007 URxvt.perl-ext-common: default,clipboard,url-select,keyboard-select URxvt.perl-ext: bidi URxvt.bidi.enabled: 1 -URxvt.url-select.launcher: firefox-nightly +URxvt.url-select.launcher: firefox URxvt.url-select.underline: true URxvt.keysym.M-u: perl:url-select:select_next URxvt.keysym.M-Escape: perl:keyboard-select:activate diff --git a/x/.xprofile b/x/.xprofile index fe9c5cb..bfe65ea 100644 --- a/x/.xprofile +++ b/x/.xprofile @@ -5,7 +5,6 @@ setxkbmap -option ctrl:rctrl_ralt setxkbmap -option altwin:swap_alt_win #xmodmap .Xmodmap -#light -Scrs "intel_backlight" 75 light -Scrs "intel_backlight" 2 source $HOME/.zprofile diff --git a/zathura/.config/zathura/zathurarc b/zathura/.config/zathura/zathurarc index 8e04570..74d70b5 100644 --- a/zathura/.config/zathura/zathurarc +++ b/zathura/.config/zathura/zathurarc @@ -1,3 +1,6 @@ set smooth-scroll true set selection-clipboard clipboard set zoom-step 05 +set default-bg "#272727" +set statusbar-bg "#272727" +set inputbar-bg "#373737" diff --git a/zsh/.zimrc b/zsh/.zimrc index 1ef71b2..4c056aa 100644 --- a/zsh/.zimrc +++ b/zsh/.zimrc @@ -25,8 +25,9 @@ zmodules=(directory environment git git-info history input ssh utility custom \ # Set your desired prompt here zprompt_theme='pure' -PURE_PROMPT_SYMBOL=λ -#PURE_PROMPT_SYMBOL=➜ +#PURE_PROMPT_SYMBOL=λ +#PURE_PROMPT_SYMBOL=δ +PURE_PROMPT_SYMBOL=➜ # # Completion @@ -89,7 +90,7 @@ zssh_ids=(id_rsa plasma_id_rsa id_ed25519 id_rsa_aur) # # Set (optional) pacman front-end. -zpacman_frontend='pacaur' +zpacman_frontend='yay' # Load any helper scripts as defined here #zpacman_helper=(aur) diff --git a/zsh/.zprofile b/zsh/.zprofile index e1a2700..35dbce9 100644 --- a/zsh/.zprofile +++ b/zsh/.zprofile @@ -6,20 +6,23 @@ export XDG_DATA_HOME=$HOME/.local/share export XDG_DATA_DIRS=/usr/local/share:/usr/share export MAILDIR="$HOME/mail" export CVS_RSH=ssh -export MATHMODELS=$HOME/src/eiffel/mathmodels -export RUST_SRC_PATH=~/.multirust/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src +#export MATHMODELS=$HOME/src/eiffel/mathmodels +#export RUST_SRC_PATH=~/.multirust/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src +#export PATH=$PATH:$HOME/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/ # Eiffel2Java stuff -export JAVA_HOME=/usr/lib/jvm/default -export CPATH=$CPATH:"$JAVA_HOME/include:$JAVA_HOME/include/linux" -export LIBRARY_PATH=$LIBRARY_PATH:"$JAVA_HOME/jre/lib/amd64/server" -export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"$JAVA_HOME/jre/lib/amd64/server" +#export JAVA_HOME=/usr/lib/jvm/default +#export CPATH=$CPATH:"$JAVA_HOME/include:$JAVA_HOME/include/linux" +#export LIBRARY_PATH=$LIBRARY_PATH:"$JAVA_HOME/jre/lib/amd64/server" +#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"$JAVA_HOME/jre/lib/amd64/server" -export PATH="$HOME/usr/build/pvs:$PATH" -export SBCLISP_HOME=/usr/share/sbcl-source -export PVS_LIBRARY_PATH="$HOME/usr/build/pvs/nasalib" +#export PATH="$HOME/usr/build/pvs:$PATH" +#export SBCLISP_HOME=/usr/share/sbcl-source +#export PVS_LIBRARY_PATH="$HOME/usr/build/pvs/nasalib" export MOZ_USE_XINPUT2=1 +export JAVA_HOME=/usr/lib/jvm/java-8-openjdk +export ANDROID_JACK_VM_ARGS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4G" -if [ -e /home/amin/.nix-profile/etc/profile.d/nix.sh ]; then . /home/amin/.nix-profile/etc/profile.d/nix.sh; fi # added by Nix installer +#if [ -e /home/amin/.nix-profile/etc/profile.d/nix.sh ]; then . /home/amin/.nix-profile/etc/profile.d/nix.sh; fi # added by Nix installer diff --git a/zsh/.zshrc b/zsh/.zshrc index e26b165..5d00ab0 100644 --- a/zsh/.zshrc +++ b/zsh/.zshrc @@ -2,6 +2,7 @@ #export WORDCHARS='*?_-.[]~=&;!#$%^(){}<>' #export WORDCHARS='*?-[]~=&;!#$%^(){}<>' export WORDCHARS='*?[]~=&;!#$%^(){}<>' +#ZLE_SPACE_SUFFIX_CHARS=$'|&' #disable -r time # disable shell reserved word #alias time='time -p' # -p for POSIX output @@ -57,14 +58,9 @@ alias scl=systemctl alias jcl=journalctl alias m="mbsync -Va; getmail; notmuch new" alias best="youtube-dl -f best" -alias ace="ssh amin@ace.aminb.org" +alias ace="mosh amin@ace.aminb.org" alias nix="ssh amin@aminb.org" -alias mutt=neomutt -alias p=pacaur -alias psyu="pacaur -Syu" -alias pS="pacaur -S" -alias t=trizen aur() { cd ~/usr/build git clone https://aur.archlinux.org/${1}.git -- 2.20.1 From 2cd437c2930d79219eed784f373d21389706aa4e Mon Sep 17 00:00:00 2001 From: Amin Bandali Date: Thu, 19 Apr 2018 16:31:46 -0400 Subject: [PATCH 03/16] [latexmk] use zathura instead of okular --- latexmk/.latexmkrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/latexmk/.latexmkrc b/latexmk/.latexmkrc index c86e34e..c965b3d 100644 --- a/latexmk/.latexmkrc +++ b/latexmk/.latexmkrc @@ -1,4 +1,4 @@ -$pdf_previewer = "start okular %O %S"; +$pdf_previewer = "start zathura %O %S"; $clean_ext = "aux out"; #$pdf_update_method = 4; #$pdf_update_command = "zathura %O %S"; -- 2.20.1 From 35ea1ba40ebdaff54de627a98d2785058cf74ac1 Mon Sep 17 00:00:00 2001 From: Amin Bandali Date: Fri, 20 Apr 2018 18:13:10 -0400 Subject: [PATCH 04/16] add stub for new org-based Emacs configuration --- emacs/README.org | 1 + emacs/init.org | 66 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 120000 emacs/README.org create mode 100644 emacs/init.org diff --git a/emacs/README.org b/emacs/README.org new file mode 120000 index 0000000..e909bb4 --- /dev/null +++ b/emacs/README.org @@ -0,0 +1 @@ +init.org \ No newline at end of file diff --git a/emacs/init.org b/emacs/init.org new file mode 100644 index 0000000..1801baf --- /dev/null +++ b/emacs/init.org @@ -0,0 +1,66 @@ +#+title: =aminb='s Emacs Init file +#+property: header-args :results silent :comments link :tangle ~/dotfiles/emacs/init.el + +* Intro + +TODO: description + +TODO: toc + +* Header + +** First line + +#+begin_src emacs-lisp :comments none +;;; init.el --- Amin Bandali's Emacs config -*- lexical-binding: t ; eval: (view-mode 1)-*- +#+end_src + +Enable =view-mode=, which both makes the file read-only (as a reminder +that =init.el= is an auto-generated file, not supposed to be edited), +and provides some convenient key bindings for browsing through the +file. + +** License + +#+begin_src emacs-lisp :comments none +;; Copyright (C) 2018 Amin Bandali + +;; This program is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . +#+end_src + +** Commentary + +#+begin_src emacs-lisp +;;; Commentary: + +;; Emacs configuration of Amin Bandali, computer scientist and functional +;; programmer. + +;; THIS FILE IS AUTO-GENERATED FROM `init.org'. +#+end_src + +* Config + +#+begin_src emacs-lisp +;;; Code: +#+end_src + +TODO + +* Footer + +#+begin_src emacs-lisp :comments none + +;;; init.el ends here +#+end_src -- 2.20.1 From 6089982a89bcec4c02874f5a2af5cd879a473017 Mon Sep 17 00:00:00 2001 From: Amin Bandali Date: Fri, 20 Apr 2018 19:02:09 -0400 Subject: [PATCH 05/16] optimize and measure emacs startup time, saner indentation for org src blocks --- emacs/.gitignore | 8 ++++++++ emacs/init.org | 46 ++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 emacs/.gitignore diff --git a/emacs/.gitignore b/emacs/.gitignore new file mode 100644 index 0000000..2de0f3c --- /dev/null +++ b/emacs/.gitignore @@ -0,0 +1,8 @@ +*.elc +/init.el +/auto-save-list/ +/var/ +/elpa/ +/recentf +/smex-items +/network-security.data diff --git a/emacs/init.org b/emacs/init.org index 1801baf..7c74728 100644 --- a/emacs/init.org +++ b/emacs/init.org @@ -41,7 +41,7 @@ file. ** Commentary -#+begin_src emacs-lisp +#+begin_src emacs-lisp :comments none ;;; Commentary: ;; Emacs configuration of Amin Bandali, computer scientist and functional @@ -52,15 +52,53 @@ file. * Config -#+begin_src emacs-lisp +#+begin_src emacs-lisp :comments none ;;; Code: #+end_src -TODO +** Org + +#+begin_src emacs-lisp +(setq org-src-tab-acts-natively t + org-src-preserve-indentation nil + org-edit-src-content-indentation 0) +#+end_src + +** Startup time + +Measure and display startup time. Also, temporarily increase +~gc-cons-threshhold~ during startup to reduce reduce garbage +collection frequency. Taken from [[https://github.com/dieggsy/dotfiles/tree/3d95bc08033920e077855caf545a975eba52d28d/emacs.d#startup-time][here]]. + +#+begin_src emacs-lisp +(defconst aminb/emacs-start-time (current-time)) +(defconst aminb/gc-cons-threshold gc-cons-threshold) +(defconst aminb/gc-cons-percentage gc-cons-percentage) +(defvar aminb/file-name-handler-alist file-name-handler-alist) +(setq gc-cons-threshold 400000000 + gc-cons-percentage 0.6 + file-name-handler-alist nil + ;; sidesteps a bug when profiling with esup + esup-child-profile-require-level 0) +#+end_src + +Reset the variables back to default after init. + +#+begin_src emacs-lisp +(add-hook + 'after-init-hook + `(lambda () + (setq gc-cons-threshold aminb/gc-cons-threshold + gc-cons-percentage aminb/gc-cons-percentage + file-name-handler-alist aminb/file-name-handler-alist) + (let ((elapsed (float-time (time-subtract (current-time) + aminb/emacs-start-time)))) + (message "Loading %s...done (%.3fs) [after-init]" + ,load-file-name elapsed)))) +#+end_src * Footer #+begin_src emacs-lisp :comments none - ;;; init.el ends here #+end_src -- 2.20.1 From bab98ee5ee2763f7f5eca67c482a523a5bec929c Mon Sep 17 00:00:00 2001 From: Amin Bandali Date: Fri, 20 Apr 2018 19:17:14 -0400 Subject: [PATCH 06/16] set `custom-file' and load it --- emacs/.gitignore | 1 + emacs/init.org | 29 +++++++++++++++++++++-------- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/emacs/.gitignore b/emacs/.gitignore index 2de0f3c..46eda09 100644 --- a/emacs/.gitignore +++ b/emacs/.gitignore @@ -1,6 +1,7 @@ *.elc /init.el /auto-save-list/ +/etc/ /var/ /elpa/ /recentf diff --git a/emacs/init.org b/emacs/init.org index 7c74728..bca8b9f 100644 --- a/emacs/init.org +++ b/emacs/init.org @@ -56,14 +56,6 @@ file. ;;; Code: #+end_src -** Org - -#+begin_src emacs-lisp -(setq org-src-tab-acts-natively t - org-src-preserve-indentation nil - org-edit-src-content-indentation 0) -#+end_src - ** Startup time Measure and display startup time. Also, temporarily increase @@ -97,6 +89,27 @@ Reset the variables back to default after init. ,load-file-name elapsed)))) #+end_src +** Custom file (=custom.el=) + +I'm not planning on using the custom file much, but even so, I +definitely don't want it mixing with =init.el=. So, here, let's give +it it's own file. + +#+begin_src emacs-lisp +(setq custom-file (expand-file-name + "etc/custom.el" + user-emacs-directory)) +(load custom-file) +#+end_src + +** Org + +#+begin_src emacs-lisp +(setq org-src-tab-acts-natively t + org-src-preserve-indentation nil + org-edit-src-content-indentation 0) +#+end_src + * Footer #+begin_src emacs-lisp :comments none -- 2.20.1 From fd134a2b5330c76b04e8777a8dc001722c706a37 Mon Sep 17 00:00:00 2001 From: Amin Bandali Date: Fri, 20 Apr 2018 21:00:30 -0400 Subject: [PATCH 07/16] add straight.el, use-package, and no-littering --- emacs/.gitignore | 2 + emacs/init.org | 97 ++++++++++++++++++++++++++++-- emacs/straight/versions/default.el | 6 ++ 3 files changed, 100 insertions(+), 5 deletions(-) create mode 100644 emacs/straight/versions/default.el diff --git a/emacs/.gitignore b/emacs/.gitignore index 46eda09..1787c54 100644 --- a/emacs/.gitignore +++ b/emacs/.gitignore @@ -3,6 +3,8 @@ /auto-save-list/ /etc/ /var/ +/straight/* +!/straight/versions /elpa/ /recentf /smex-items diff --git a/emacs/init.org b/emacs/init.org index bca8b9f..db79586 100644 --- a/emacs/init.org +++ b/emacs/init.org @@ -50,7 +50,7 @@ file. ;; THIS FILE IS AUTO-GENERATED FROM `init.org'. #+end_src -* Config +* Initial setup #+begin_src emacs-lisp :comments none ;;; Code: @@ -89,6 +89,94 @@ Reset the variables back to default after init. ,load-file-name elapsed)))) #+end_src +** Package management + +*** [[https://github.com/raxod502/straight.el][=straight.el=]] + +#+begin_quote +Next-generation, purely functional package manager for the Emacs +hacker. +#+end_quote + +=straight.el= allows me to have a fully reproducible Emacs setup. + +**** Bootstrap + +#+begin_src emacs-lisp +(let ((bootstrap-file (concat user-emacs-directory "straight/repos/straight.el/bootstrap.el")) + (bootstrap-version 3)) + (unless (file-exists-p bootstrap-file) + (with-current-buffer + (url-retrieve-synchronously + "https://raw.githubusercontent.com/raxod502/straight.el/develop/install.el" + 'silent 'inhibit-cookies) + (goto-char (point-max)) + (eval-print-last-sexp))) + (load bootstrap-file nil 'nomessage)) +#+end_src + +**** Useful helpers + +#+begin_src emacs-lisp +(defun straight-reload-init () + "Reload init.el." + (interactive) + (straight-transaction + (straight-mark-transaction-as-init) + (message "Reloading init.el...") + (load user-init-file nil 'nomessage) + (message "Reloading init.el... done."))) + +(defun straight-eval-buffer () + "Evaluate the current buffer as Elisp code." + (interactive) + (message "Evaluating %s..." (buffer-name)) + (straight-transaction + (if (null buffer-file-name) + (eval-buffer) + (when (string= buffer-file-name user-init-file) + (straight-mark-transaction-as-init)) + (load-file buffer-file-name))) + (message "Evaluating %s... done." (buffer-name))) +#+end_src + +*** =use-package= + +#+begin_quote +A use-package declaration for simplifying your .emacs. +#+end_quote + +=use-package= is an awesome utility for managing and configuring +packages in a neatly organized way and without compromising on +performance. So let's install it using =striaght.el= and have it use +=straight.el= for installing packages. + +#+begin_src emacs-lisp +(straight-use-package 'use-package) +(setq straight-use-package-by-default t) +#+end_src + +** No littering in =~/.emacs.d= + +#+begin_quote +Help keeping ~/.emacs.d clean. +#+end_quote + +By default, even for Emacs' built-in packages, the configuration files +and persistent data are all over the place. Use =no-littering= to help +contain the mess. + +#+begin_src emacs-lisp +(use-package no-littering + :demand t + :config + (savehist-mode 1) + (add-to-list 'savehist-additional-variables 'kill-ring) + (save-place-mode 1) + (setq auto-save-file-name-transforms + `((".*" ,(no-littering-expand-var-file-name "auto-save/") t)))) +#+end_src + ** Custom file (=custom.el=) I'm not planning on using the custom file much, but even so, I @@ -96,10 +184,9 @@ definitely don't want it mixing with =init.el=. So, here, let's give it it's own file. #+begin_src emacs-lisp -(setq custom-file (expand-file-name - "etc/custom.el" - user-emacs-directory)) -(load custom-file) +(setq custom-file (no-littering-expand-etc-file-name "custom.el")) +(when (file-exists-p custom-file) + (load custom-file)) #+end_src ** Org diff --git a/emacs/straight/versions/default.el b/emacs/straight/versions/default.el new file mode 100644 index 0000000..acd7f64 --- /dev/null +++ b/emacs/straight/versions/default.el @@ -0,0 +1,6 @@ +(("epkgs" . "9a82406a27f95eb551cb5cab74298ac4a58f3e93") + ("melpa" . "cb43431d7a7276cdf1ea741b2b218bc46c2722f9") + ("no-littering" . "9bffebc0f4858a06ba374f1d48a7dffd3537b93e") + ("straight.el" . "23669af11f88eb4f92c2b8882e70921f6503c9f0") + ("use-package" . "512aa50b025018cb8574498d868814f73c02bb9b")) +:jupiter -- 2.20.1 From 204986be04daf07b694937e372e94ba458374238 Mon Sep 17 00:00:00 2001 From: Amin Bandali Date: Fri, 20 Apr 2018 21:08:28 -0400 Subject: [PATCH 08/16] better backup settings --- emacs/init.org | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/emacs/init.org b/emacs/init.org index db79586..b0570d3 100644 --- a/emacs/init.org +++ b/emacs/init.org @@ -91,7 +91,7 @@ Reset the variables back to default after init. ** Package management -*** [[https://github.com/raxod502/straight.el][=straight.el=]] +*** =straight.el= #+begin_quote Next-generation, purely functional package manager for the Emacs @@ -189,6 +189,17 @@ it it's own file. (load custom-file)) #+end_src +** Backups + +Emacs' default backup settings aren't that great. Let's use more +sensible options. See documentation for the ~make-backup-file~ +variable. + +#+begin_src emacs-lisp +(setq backup-by-copying t + version-control t) +#+end_src + ** Org #+begin_src emacs-lisp -- 2.20.1 From abdc6c0798685f379780592d6e93a7fe03893309 Mon Sep 17 00:00:00 2001 From: Amin Bandali Date: Fri, 20 Apr 2018 21:14:22 -0400 Subject: [PATCH 09/16] add toc --- emacs/init.org | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/emacs/init.org b/emacs/init.org index b0570d3..e21b0bd 100644 --- a/emacs/init.org +++ b/emacs/init.org @@ -5,7 +5,13 @@ TODO: description -TODO: toc +* Contents :toc_1:noexport: + +- [[#intro][Intro]] +- [[#header][Header]] +- [[#initial-setup][Initial setup]] +- [[#config][Config]] +- [[#footer][Footer]] * Header @@ -200,6 +206,8 @@ variable. version-control t) #+end_src +* Config + ** Org #+begin_src emacs-lisp -- 2.20.1 From 279a98e285014f0cc06fc0f32dd9ec91d2862f6a Mon Sep 17 00:00:00 2001 From: Amin Bandali Date: Fri, 20 Apr 2018 21:34:41 -0400 Subject: [PATCH 10/16] add CUSOTM_IDs to make toc links work in Emacs --- emacs/init.org | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/emacs/init.org b/emacs/init.org index e21b0bd..1e44cab 100644 --- a/emacs/init.org +++ b/emacs/init.org @@ -14,6 +14,9 @@ TODO: description - [[#footer][Footer]] * Header +:PROPERTIES: +:CUSTOM_ID: header +:END: ** First line @@ -57,6 +60,9 @@ file. #+end_src * Initial setup +:PROPERTIES: +:CUSTOM_ID: initial-setup +:END: #+begin_src emacs-lisp :comments none ;;; Code: @@ -207,6 +213,9 @@ variable. #+end_src * Config +:PROPERTIES: +:CUSTOM_ID: config +:END: ** Org @@ -217,6 +226,9 @@ variable. #+end_src * Footer +:PROPERTIES: +:CUSTOM_ID: footer +:END: #+begin_src emacs-lisp :comments none ;;; init.el ends here -- 2.20.1 From 63a849c3da1bd6eb3e0cc722ab0419b3d68c4f57 Mon Sep 17 00:00:00 2001 From: Amin Bandali Date: Sat, 21 Apr 2018 11:21:02 -0400 Subject: [PATCH 11/16] Use my initials, ab, for prefixing my functions and vars --- emacs/init.org | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/emacs/init.org b/emacs/init.org index 1e44cab..5f96e69 100644 --- a/emacs/init.org +++ b/emacs/init.org @@ -75,10 +75,10 @@ Measure and display startup time. Also, temporarily increase collection frequency. Taken from [[https://github.com/dieggsy/dotfiles/tree/3d95bc08033920e077855caf545a975eba52d28d/emacs.d#startup-time][here]]. #+begin_src emacs-lisp -(defconst aminb/emacs-start-time (current-time)) -(defconst aminb/gc-cons-threshold gc-cons-threshold) -(defconst aminb/gc-cons-percentage gc-cons-percentage) -(defvar aminb/file-name-handler-alist file-name-handler-alist) +(defconst ab--emacs-start-time (current-time)) +(defconst ab--gc-cons-threshold gc-cons-threshold) +(defconst ab--gc-cons-percentage gc-cons-percentage) +(defvar ab--file-name-handler-alist file-name-handler-alist) (setq gc-cons-threshold 400000000 gc-cons-percentage 0.6 file-name-handler-alist nil @@ -92,15 +92,18 @@ Reset the variables back to default after init. (add-hook 'after-init-hook `(lambda () - (setq gc-cons-threshold aminb/gc-cons-threshold - gc-cons-percentage aminb/gc-cons-percentage - file-name-handler-alist aminb/file-name-handler-alist) + (setq gc-cons-threshold ab--gc-cons-threshold + gc-cons-percentage ab--gc-cons-percentage + file-name-handler-alist ab--file-name-handler-alist) (let ((elapsed (float-time (time-subtract (current-time) - aminb/emacs-start-time)))) + ab--emacs-start-time)))) (message "Loading %s...done (%.3fs) [after-init]" ,load-file-name elapsed)))) #+end_src +Note that I'll be using my initials, =ab=, as a prefix for the +variables and functions I define throughout my init file. + ** Package management *** =straight.el= @@ -155,7 +158,7 @@ hacker. *** =use-package= #+begin_quote -A use-package declaration for simplifying your .emacs. +A use-package declaration for simplifying your .emacs #+end_quote =use-package= is an awesome utility for managing and configuring @@ -171,7 +174,7 @@ performance. So let's install it using =striaght.el= and have it use ** No littering in =~/.emacs.d= #+begin_quote -Help keeping ~/.emacs.d clean. +Help keeping ~/.emacs.d clean #+end_quote By default, even for Emacs' built-in packages, the configuration files -- 2.20.1 From e4cd0d4952436f8fdc2c009aaf1a8d8ab25a8006 Mon Sep 17 00:00:00 2001 From: Amin Bandali Date: Sat, 21 Apr 2018 11:55:11 -0400 Subject: [PATCH 12/16] [emacs] add naming conventions --- emacs/init.org | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/emacs/init.org b/emacs/init.org index 5f96e69..5aa530e 100644 --- a/emacs/init.org +++ b/emacs/init.org @@ -59,6 +59,24 @@ file. ;; THIS FILE IS AUTO-GENERATED FROM `init.org'. #+end_src +** Naming conventions + +The conventions below were inspired by [[https://github.com/hlissner/doom-emacs][Doom]]'s conventions, found +[[https://github.com/hlissner/doom-emacs/blob/5dacbb7cb1c6ac246a9ccd15e6c4290def67757c/core/core.el#L3-L17][here]]. Naturally, I use my initials, =ab=, instead of =doom=. + +#+begin_src emacs-lisp :comments none +;; Naming conventions: +;; +;; ab-... public variables or non-interactive functions +;; ab--... private anything (non-interactive), not safe for direct use +;; ab/... an interactive function; safe for M-x or keybinding +;; ab:... an evil operator, motion, or command +;; ab|... a hook function +;; ab*... an advising function +;; ab@... a hydra command +;; ab!... a macro +#+end_src + * Initial setup :PROPERTIES: :CUSTOM_ID: initial-setup @@ -101,9 +119,6 @@ Reset the variables back to default after init. ,load-file-name elapsed)))) #+end_src -Note that I'll be using my initials, =ab=, as a prefix for the -variables and functions I define throughout my init file. - ** Package management *** =straight.el= -- 2.20.1 From 1446ab91e68b8e0d2d36ccccc5a3f7432c3e6937 Mon Sep 17 00:00:00 2001 From: Amin Bandali Date: Sat, 21 Apr 2018 20:11:40 -0400 Subject: [PATCH 13/16] [emacs] updates to initial setup and core defaults --- emacs/init.org | 111 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 108 insertions(+), 3 deletions(-) diff --git a/emacs/init.org b/emacs/init.org index 5aa530e..454766c 100644 --- a/emacs/init.org +++ b/emacs/init.org @@ -74,7 +74,7 @@ The conventions below were inspired by [[https://github.com/hlissner/doom-emacs] ;; ab|... a hook function ;; ab*... an advising function ;; ab@... a hydra command -;; ab!... a macro +;; ...! a macro #+end_src * Initial setup @@ -148,7 +148,7 @@ hacker. **** Useful helpers #+begin_src emacs-lisp -(defun straight-reload-init () +(defun ab/reload-init () "Reload init.el." (interactive) (straight-transaction @@ -157,7 +157,7 @@ hacker. (load user-init-file nil 'nomessage) (message "Reloading init.el... done."))) -(defun straight-eval-buffer () +(defun ab/eval-buffer () "Evaluate the current buffer as Elisp code." (interactive) (message "Evaluating %s..." (buffer-name)) @@ -219,6 +219,39 @@ it it's own file. (load custom-file)) #+end_src +** Better =$PATH= handling + +Let's use [[https://github.com/purcell/exec-path-from-shell][exec-path-from-shell]] to make Emacs use the =$PATH= as set up +in my shell. + +#+begin_src emacs-lisp +(use-package exec-path-from-shell + :defer 1 + :init + (setq exec-path-from-shell-check-startup-files nil) + :config + (exec-path-from-shell-initialize) + ;; while we're at it, let's fix access to our running ssh-agent + (exec-path-from-shell-copy-env "SSH_AGENT_PID") + (exec-path-from-shell-copy-env "SSH_AUTH_SOCK")) +#+end_src + +** Server + +Start server if not already running. Alternatively, can be done by +issuing =emacs --daemon= in the terminal, which can be automated with +a systemd service or using =brew services start emacs= on macOS. I use +Emacs as my window manager (via =exwm=), so I always start Emacs on +login; so starting the server from inside Emacs is good enough for me. + +See [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Emacs-Server.html#Emacs-Server][Using Emacs as a Server]]. + +#+begin_src emacs-lisp +(require 'server) +(unless (server-running-p) + (server-start)) +#+end_src + ** Backups Emacs' default backup settings aren't that great. Let's use more @@ -230,6 +263,78 @@ variable. version-control t) #+end_src +* Core +:PROPERTIES: +:CUSTOM_ID: core +:END: + +** Defaults + +*** Disable disabled commands + +Emacs disables some commands by default that could persumably be +confusing for novice users. Let's disable that. + +#+begin_src emacs-lisp +(setq disabled-command-function nil) +#+end_src + +*** Kill-ring + +Save what I copy into clipboard from other applications into Emacs' +kill-ring, which would allow me to still be able to easily access it +in case I kill (cut or copy) something else inside Emacs before +yanking (pasting) what I'd originally intended to. + +#+begin_src emacs-lisp +(setq save-interprogram-paste-before-kill t) +#+end_src + +*** Keep more =*Messages*= + +#+begin_src emacs-lisp +(setq message-log-max 10000) +#+end_src + +*** Lazy-person-friendly yes/no prompts + +Lazy people would prefer to type fewer keystrokes, especially for yes +or no questions. I'm lazy. + +#+begin_src emacs-lisp +(defalias 'yes-or-no-p #'y-or-n-p) +#+end_src + +*** =*scratch*= + +Let's customize the =*scratch*= buffer a bit. First off, I don't need +the default hint. + +#+begin_src emacs-lisp +(setq initial-scratch-message "") +#+end_src + +Also, let's use Text mode as the major mode, in case I want to +customize it (=*scratch*='s default major mode, Fundamental mode, +can't really be customized). + +#+begin_src emacs-lisp +(setq initial-major-mode 'text-mode) +#+end_src + +*** More useful frame titles + +Show either the file name or the buffer name (in case the buffer isn't +visiting a file). Borrowed from Emacs Prelude. + +#+begin_src emacs-lisp +(setq frame-title-format + '("" invocation-name " - " + (:eval (if (buffer-file-name) + (abbreviate-file-name (buffer-file-name)) + "%b")))) +#+end_src + * Config :PROPERTIES: :CUSTOM_ID: config -- 2.20.1 From 056eba24a096c9e6ea355936063d5f60741265e3 Mon Sep 17 00:00:00 2001 From: Amin Bandali Date: Sat, 21 Apr 2018 20:17:08 -0400 Subject: [PATCH 14/16] [emacs] add Core to the TOC, move the backups section to core --- emacs/init.org | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/emacs/init.org b/emacs/init.org index 454766c..388a4e2 100644 --- a/emacs/init.org +++ b/emacs/init.org @@ -10,6 +10,7 @@ TODO: description - [[#intro][Intro]] - [[#header][Header]] - [[#initial-setup][Initial setup]] +- [[#core][Core]] - [[#config][Config]] - [[#footer][Footer]] @@ -252,17 +253,6 @@ See [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Emacs-Server.htm (server-start)) #+end_src -** Backups - -Emacs' default backup settings aren't that great. Let's use more -sensible options. See documentation for the ~make-backup-file~ -variable. - -#+begin_src emacs-lisp -(setq backup-by-copying t - version-control t) -#+end_src - * Core :PROPERTIES: :CUSTOM_ID: core @@ -335,6 +325,17 @@ visiting a file). Borrowed from Emacs Prelude. "%b")))) #+end_src +** Backups + +Emacs' default backup settings aren't that great. Let's use more +sensible options. See documentation for the ~make-backup-file~ +variable. + +#+begin_src emacs-lisp +(setq backup-by-copying t + version-control t) +#+end_src + * Config :PROPERTIES: :CUSTOM_ID: config -- 2.20.1 From 421132e97dc7a4275f294962e53fae9d2bfbd262 Mon Sep 17 00:00:00 2001 From: Amin Bandali Date: Sat, 21 Apr 2018 21:15:47 -0400 Subject: [PATCH 15/16] [emacs] add core packages --- emacs/init.org | 119 +++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 111 insertions(+), 8 deletions(-) diff --git a/emacs/init.org b/emacs/init.org index 388a4e2..cda34f3 100644 --- a/emacs/init.org +++ b/emacs/init.org @@ -3,7 +3,10 @@ * Intro -TODO: description +This org file is tangled to [[./init.el][init.el]] and constitutes my Emacs +configuration. =straight.el=, =use-package=, =general.el=, =exwm=, +=org-mode=, and =magit= are some of the awesome packages powering my +Emacs setup. * Contents :toc_1:noexport: @@ -11,7 +14,6 @@ TODO: description - [[#header][Header]] - [[#initial-setup][Initial setup]] - [[#core][Core]] -- [[#config][Config]] - [[#footer][Footer]] * Header @@ -286,6 +288,13 @@ yanking (pasting) what I'd originally intended to. (setq message-log-max 10000) #+end_src +*** Minibuffer + +#+begin_src emacs-lisp +(setq enable-recursive-minibuffers t + resize-mini-windows t) +#+end_src + *** Lazy-person-friendly yes/no prompts Lazy people would prefer to type fewer keystrokes, especially for yes @@ -325,7 +334,7 @@ visiting a file). Borrowed from Emacs Prelude. "%b")))) #+end_src -** Backups +*** Backups Emacs' default backup settings aren't that great. Let's use more sensible options. See documentation for the ~make-backup-file~ @@ -336,12 +345,45 @@ variable. version-control t) #+end_src -* Config -:PROPERTIES: -:CUSTOM_ID: config -:END: +** Packages + +The packages in this section are absolutely essential to my everyday +workflow, and they play key roles in how I do my computing. They +immensely enhance the Emacs experience for me; both using Emacs, and +customizing it. + +*** [[https://github.com/noctuid/general.el][general.el]] + +#+begin_quote +More convenient key definitions in emacs +#+end_quote + +More like /the most/ convenient key definitions in Emacs. + +#+begin_src emacs-lisp +(use-package general + :demand t + :config) +#+end_src -** Org +*** [[https://github.com/ch11ng/exwm][exwm]] (window manager) + +#+begin_src emacs-lisp +(use-package exwm + :config + (require 'exwm-config) + (exwm-config-default)) +#+end_src + +*** [[https://orgmode.org/][Org mode]] + +#+begin_quote +Org mode is for keeping notes, maintaining TODO lists, planning +projects, and authoring documents with a fast and effective plain-text +system. +#+end_quote + +In short, my favourite way of life. #+begin_src emacs-lisp (setq org-src-tab-acts-natively t @@ -349,6 +391,67 @@ variable. org-edit-src-content-indentation 0) #+end_src +*** [[https://magit.vc/][Magit]] + +#+begin_quote +It's Magit! A Git porcelain inside Emacs. +#+end_quote + +Not just how I do git, but /the/ way to do git. + +#+begin_src emacs-lisp +(use-package magit + :general + ("s-g" 'magit-status)) +#+end_src + +*** [[https://github.com/abo-abo/swiper][Ivy]] (and friends) + +#+begin_quote +Ivy - a generic completion frontend for Emacs, Swiper - isearch with +an overview, and more. Oh, man! +#+end_quote + +There's no way I could top that, so I won't attempt to. + +**** Ivy + +#+begin_src emacs-lisp +(use-package ivy + :general + (ivy-minibuffer-map + [escape] 'keyboard-escape-quit + "C-j" 'ivy-next-line + "C-k" 'ivy-previous-line + [S-up] 'ivy-previous-history-element + [S-down] 'ivy-next-history-element + "DEL" 'ivy-backward-delete-char) + :config + (ivy-mode 1)) +#+end_src + +**** Swiper + +#+begin_src emacs-lisp +(use-package swiper + :general ("C-s" 'swiper)) +#+end_src + +**** Counsel + +#+begin_src emacs-lisp +(use-package counsel + :general + ("M-x" 'counsel-M-x + "C-x C-f" 'counsel-find-file + "s-r" 'counsel-recentf) + (imap minibuffer-local-map + "C-r" 'counsel-minibuffer-history) + :config + (counsel-mode 1) + (defalias 'locate #'counsel-locate)) +#+end_src + * Footer :PROPERTIES: :CUSTOM_ID: footer -- 2.20.1 From f763cac6434967fdd77ac09ac565acfe6ef80224 Mon Sep 17 00:00:00 2001 From: Amin Bandali Date: Sat, 21 Apr 2018 21:48:31 -0400 Subject: [PATCH 16/16] [emacs] update straight versions lockfile Forgot to include this in the last commit. --- emacs/straight/versions/default.el | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/emacs/straight/versions/default.el b/emacs/straight/versions/default.el index acd7f64..f66cebf 100644 --- a/emacs/straight/versions/default.el +++ b/emacs/straight/versions/default.el @@ -1,6 +1,17 @@ -(("epkgs" . "9a82406a27f95eb551cb5cab74298ac4a58f3e93") +(("dash.el" . "a74f4cfcdc8d0642a9f602ad494f0354f27dacc9") + ("emacs-async" . "8bb64e398897d1cc000fc295c5157b4ad1a7bd5b") + ("epkgs" . "9a82406a27f95eb551cb5cab74298ac4a58f3e93") + ("exec-path-from-shell" . "54ea2f9c3c81d18b96e4d33c4c547e02eee420dc") + ("exwm" . "5448fb75fac0bfa56e15c8f3630fafc24c07f109") + ("general.el" . "2b2011bc58dc2588fa61e7aca8646e60f10d9d80") + ("ghub" . "4831933da059ee084a16016558b9ccd8c581a8ff") + ("magit" . "d2de500a9f4373d58799cf400c195db7ac97f010") + ("magit-popup" . "a0b22e30d135d4f83a9227b3fa13b1377f9be0df") ("melpa" . "cb43431d7a7276cdf1ea741b2b218bc46c2722f9") ("no-littering" . "9bffebc0f4858a06ba374f1d48a7dffd3537b93e") ("straight.el" . "23669af11f88eb4f92c2b8882e70921f6503c9f0") - ("use-package" . "512aa50b025018cb8574498d868814f73c02bb9b")) + ("swiper" . "cd2aab02dd646daf544613d76e4adb3eef462cea") + ("use-package" . "512aa50b025018cb8574498d868814f73c02bb9b") + ("with-editor" . "ad5bb005ed3afec2d8b9b2bc1df19fb9b5e2dd84") + ("xelb" . "33d465d869f17153171c454e3bf6c1aa67374f49")) :jupiter -- 2.20.1