From 5a536877f475225fb0c3ec23988aec37f8e89dd1 Mon Sep 17 00:00:00 2001 From: Phil Bajsicki Date: Thu, 21 Sep 2023 02:46:05 +0200 Subject: [PATCH] Yes this is a mess, but I want it up and backed up just in case. This *works*, as ugly as the files are. --- .config/doom/README.org | 1822 +++++++++++++++++++++--- .config/doom/config | 6 + .config/doom/config.el | 537 +++++-- .config/doom/custom.el | 4 +- .config/doom/init.el | 239 +++- .config/doom/packages.el | 42 +- .config/fish/README.org | 24 +- .config/fish/config.fish | 13 +- .config/xmobar/tomorrow-night-xmobarrc | 7 +- .config/xmobar/xmobarrc | 19 +- .config/xmonad/README.org | 88 +- .config/xmonad/xmonad.hs | 106 +- 12 files changed, 2389 insertions(+), 518 deletions(-) create mode 100644 .config/doom/config diff --git a/.config/doom/README.org b/.config/doom/README.org index 09d2406..8ee8c99 100644 --- a/.config/doom/README.org +++ b/.config/doom/README.org @@ -1,4 +1,7 @@ #+title: Phil's Doom Emacs Config +#+TODO: ACTIVE | DISABLED +#+STARTUP: indent +#+auto_tangle: t * Intro @@ -8,75 +11,314 @@ Some of the comments are from the default config.el file that ships with Doom Em You can extract all the source/ config files from here by running Emacs and hitting ~C-c C-v t~. -A lot of these are swiped from [[https://gitlab.com/dwt1/configuring-emacs/][DT's Configuring Emacs config files.]] +A lot of these are swiped from [[https://gitlab.com/dwt1/configuring-emacs/][DT's Configuring Emacs config files]], as well as [[https://github.com/novoid/dot-emacs][Karl Voit's Emacs config.]] * config.el -** Basic settings, Theme and Display - - +** Basic settings +*** Author/ personal info #+begin_src emacs-lisp :tangle config.el (setq user-full-name "Phil Bajsicki") +#+end_src +*** Global settings +#+begin_src emacs-lisp :tangle config.el (setq global-auto-revert-mode t) +(org-edna-mode) (setq auth-sources '("~/.authinfo")) +(setq-default backup-inhibited t) -(setq straight-repository-branch "develop") - +(setq locale-coding-system 'utf-8) +(set-terminal-coding-system 'utf-8) +(set-keyboard-coding-system 'utf-8) +(set-clipboard-coding-system 'utf-8) +(prefer-coding-system 'utf-8) +#+END_SRC +*** Theming and prettifying +#+begin_src emacs-lisp :tangle config.el (after! counsel (setq counsel-outline-display-style 'title)) - - -(setq doom-themes-enable-bold t - doom-themes-enable-italic t) - -(setq doom-font (font-spec :family "Iosevka" :size 12 :weight 'semi-light) - doom-variable-pitch-font (font-spec :family "Iosevka" :size 13)) - +#+end_src +**** Doom Theme +#+begin_src emacs-lisp :tangle config.el (load-theme 'doom-one t) (doom-themes-neotree-config) (doom-themes-org-config) +#+end_src +**** Fonts +#+begin_src emacs-lisp :tangle config.el +(setq doom-themes-enable-bold t + doom-themes-enable-italic t) +(setq doom-font (font-spec :family "IosevkaTerm" :size 12) + doom-unicode-font (font-spec :family "IosevkaTerm" :size 12)) +(dolist (charset '(unicode)) + (set-fontset-font (frame-parameter nil 'font) + charset (font-spec :family "IosevkaTerm" :size 12))) +#+end_src +#+RESULTS: +: t +**** Font Family List +#+begin_src emacs-lisp :results value format: pp +(print (font-family-list)) +#+end_src + +#+RESULTS: +: ("Iosevka Nerd Font" "M+CodeLat Nerd Font Propo" "OverpassM Nerd Font Mono" "ProggyClean Nerd Font Propo" "M+CodeLat Nerd Font" "NotoSansM Nerd Font" "Iosevka Nerd Font Mono" "IosevkaTerm Nerd Font Propo" "VictorMono Nerd Font Propo" "Fira Sans" "FiraCode Nerd Font" "M+1Code Nerd Font Mono" "NotoSerif Nerd Font Propo" "UbuntuMono Nerd Font" "M+1 Nerd Font" "VictorMono Nerd Font Mono" "M+2 Nerd Font" "LiterationMono Nerd Font Mono" "NotoSans Nerd Font" "Cousine Nerd Font Mono" "JetBrainsMono Nerd Font Propo" "Hasklug Nerd Font" "Standard Symbols PS" "OpenDyslexic Nerd Font" "Noto Sans CJK TC" "DejaVuSansM Nerd Font Propo" "LiterationMono Nerd Font Propo" "IosevkaTerm Nerd Font Propo" "Noto Serif CJK KR" "IosevkaTerm Nerd Font Propo" "NotoSans Nerd Font" "NotoSansM Nerd Font Propo" "Iosevka Nerd Font Mono" "NotoSerif Nerd Font Propo" "M+1 Nerd Font" "NotoSerif Nerd Font" "Noto Serif CJK TC" "VictorMono Nerd Font Propo" "Noto Sans CJK TC" "M+CodeLat Nerd Font Mono" "VictorMono Nerd Font" "FiraCode Nerd Font Mono" "NotoSans Nerd Font Propo" "Iosevka Term" "Iosevka" "FiraCode Nerd Font Propo" "NotoSans Nerd Font" "NotoSans Nerd Font" "URW Gothic" "NotoSerif Nerd Font" "SauceCodePro Nerd Font Propo" "BlexMono Nerd Font" "Hasklug Nerd Font Mono" "NotoSans Nerd Font Propo" "NotoSans Nerd Font Propo" "InconsolataGo Nerd Font" "Overpass Nerd Font Propo" "BigBlueTermPlus Nerd Font Mono" "NotoSansM Nerd Font" "NotoSansM Nerd Font Propo" "BlexMono Nerd Font Propo" "AurulentSansM Nerd Font Propo" "NotoSans Nerd Font" "M+CodeLat Nerd Font Propo" "MesloLGSDZ Nerd Font Mono" "AurulentSansM Nerd Font Mono" "ProFontWindows Nerd Font Mono" "Cousine Nerd Font Propo" "JetBrainsMonoNL Nerd Font" "IosevkaTerm Nerd Font Propo" "Iosevka Fixed" "OpenDyslexicAlt Nerd Font Propo" "FiraCode Nerd Font" "UbuntuMono Nerd Font Propo" "Monoid Nerd Font Propo" "NotoSerif Nerd Font Propo" "Hasklug Nerd Font" "NotoSans Nerd Font" "SauceCodePro Nerd Font Mono" "Hasklug Nerd Font Mono" "Fira Sans Compressed" "NotoSansM Nerd Font Mono" "NotoSansM Nerd Font Propo" "Lilex Nerd Font Propo" "M+1Code Nerd Font" "Monoid Nerd Font" "BlexMono Nerd Font Propo" "NotoSansM Nerd Font Propo" "NotoSans Nerd Font" "NotoSerif Nerd Font" "JetBrainsMono Nerd Font" "NotoSansM Nerd Font Propo" "CaskaydiaCove Nerd Font" "VictorMono Nerd Font Propo" "NotoSansM Nerd Font Mono" "Iosevka Nerd Font" "NotoSansM Nerd Font Propo" "Iosevka" "Noto Sans CJK KR" "Noto Serif CJK JP" "Noto Sans CJK TC" "NotoSans Nerd Font" "M+1Code Nerd Font Propo" "IosevkaTerm Nerd Font" "IosevkaTerm Nerd Font Mono" "Noto Serif CJK KR" "NotoSansM Nerd Font Propo" "NotoSans Nerd Font Propo" "NotoSans Nerd Font Propo" "M+2 Nerd Font" "NotoSerif Nerd Font" "DroidSansM Nerd Font" "NotoSans Nerd Font Propo" "BlexMono Nerd Font Mono" "NotoSansM Nerd Font Mono" "Nimbus Roman" "RobotoMono Nerd Font Propo" "Noto Sans CJK SC" "Iosevka Fixed" "NotoSerif Nerd Font Propo" "Iosevka Fixed" "M+1Code Nerd Font Mono" "Noto Serif CJK HK" "NotoSerif Nerd Font Propo" "Fira Sans" "NotoSerif Nerd Font Propo" "IosevkaTerm Nerd Font Propo" "BlexMono Nerd Font" "M+1 Nerd Font" "M+CodeLat Nerd Font" "NotoSansM Nerd Font Propo" "ShureTechMono Nerd Font" "RobotoMono Nerd Font Mono" "Iosevka" "Iosevka Nerd Font" "Agave Nerd Font Mono" "BlexMono Nerd Font Mono" "NotoSans Nerd Font Propo" "BlexMono Nerd Font Mono" "Iosevka Nerd Font Mono" "Iosevka Fixed" "CaskaydiaCove Nerd Font" "IosevkaTerm Nerd Font" "BigBlueTerm437 Nerd Font" "NotoSansM Nerd Font Propo" "FiraCode Nerd Font" "Fira Sans Compressed" "Overpass Nerd Font" "Fira Code" "NotoSans Nerd Font Propo" "SauceCodePro Nerd Font Mono" "FiraCode Nerd Font Propo" "BigBlueTermPlus Nerd Font" "NotoSansM Nerd Font Mono" "Hasklug Nerd Font" "Iosevka" "M+1 Nerd Font" "Source Code Pro" "Arimo Nerd Font Propo" "NotoSansM Nerd Font Mono" "AnonymicePro Nerd Font" "Noto Serif CJK SC" "JetBrainsMono Nerd Font Propo" "Iosevka Nerd Font Propo" "Noto Sans CJK HK" "Iosevka Nerd Font Mono" "IosevkaTerm Nerd Font Mono" "VictorMono Nerd Font Mono" "Fira Sans Compressed" "VictorMono Nerd Font" "Noto Sans CJK HK" "Iosevka Term" "NotoSansM Nerd Font Propo" "IosevkaTerm Nerd Font Mono" "M+2 Nerd Font" "NotoSerif Nerd Font Propo" "NotoSerif Nerd Font" "Hurmit Nerd Font Mono" "IosevkaTerm Nerd Font" "M+2 Nerd Font" "Iosevka" "BlexMono Nerd Font" "M+CodeLatX Nerd Font" "GoMono Nerd Font" "Iosevka Nerd Font Propo" "NotoSans Nerd Font" "Iosevka" "NotoSansM Nerd Font Propo" "ProFont IIx Nerd Font" "Mononoki Nerd Font Mono" "SourceCodeVF" "NotoSerif Nerd Font" "IosevkaTerm Nerd Font Mono" "Iosevka Fixed" "VictorMono Nerd Font Mono" "Lilex Nerd Font Mono" "Iosevka Term" "Noto Serif CJK JP" "Hasklug Nerd Font Mono" "Hasklug Nerd Font Propo" "Iosevka Nerd Font" "Noto Serif CJK KR" "Noto Serif CJK HK" "VictorMono Nerd Font" "NotoSerif Nerd Font Propo" "Iosevka Nerd Font" "iMWritingMono Nerd Font Propo" "M+CodeLat Nerd Font Mono" "Overpass Nerd Font Propo" "CaskaydiaCove Nerd Font" "NotoSansM Nerd Font Mono" "Noto Serif CJK TC" "BigBlueTerm437 Nerd Font Mono" "LiterationMono Nerd Font" "OverpassM Nerd Font Propo" "VictorMono Nerd Font Mono" "M+1 Nerd Font" "NotoSansM Nerd Font Mono" "ProFont IIx Nerd Font Propo" "Fira Sans" "JetBrainsMono Nerd Font Propo" "Monofur Nerd Font" "NotoSerif Nerd Font" "NotoSansM Nerd Font Propo" "Adobe Helvetica" "VictorMono Nerd Font Propo" "M+1Code Nerd Font Propo" "Monoid Nerd Font Mono" "3270 Nerd Font Mono" "NotoSans Nerd Font Propo" "NotoSansM Nerd Font Propo" "NotoSans Nerd Font Propo" "NotoSerif Nerd Font Propo" "ProggyClean CE Nerd Font" "Inconsolata LGC Nerd Font" "NotoSerif Nerd Font Propo" "Tinos Nerd Font" "Iosevka" "Iosevka Nerd Font Mono" "NotoSansM Nerd Font Mono" "Noto Sans CJK JP" "CodeNewRoman Nerd Font Mono" "Fira Sans Condensed" "JetBrainsMono Nerd Font" "Fira Sans" "Hasklug Nerd Font Propo" "Iosevka Term" "Iosevka Nerd Font" "Iosevka Fixed" "Iosevka Nerd Font Propo" "Fira Sans Condensed" "Iosevka Fixed" "Noto Sans CJK SC" "Iosevka Nerd Font" "Noto Serif CJK SC" "NotoSerif Nerd Font Propo" "NotoSerif Nerd Font" "FiraCode Nerd Font" "NotoSansM Nerd Font" "NotoSerif Nerd Font" "Noto Serif CJK TC" "BigBlueTermPlus Nerd Font Propo" "ProggyCleanSZ Nerd Font Mono" "NotoSansM Nerd Font Propo" "ProggyClean Nerd Font Mono" "M+CodeLatX Nerd Font" "JetBrainsMonoNL Nerd Font Propo" "NotoSansM Nerd Font" "NotoSansM Nerd Font" "NotoSans Nerd Font Propo" "Arimo Nerd Font" "IosevkaTerm Nerd Font Mono" "Noto Serif CJK JP" "CaskaydiaCove Nerd Font Mono" "Iosevka Nerd Font Mono" "IosevkaTerm Nerd Font Mono" "JetBrainsMonoNL Nerd Font Mono" "JetBrainsMono Nerd Font Mono" "SauceCodePro Nerd Font Mono" "VictorMono Nerd Font Mono" "MesloLGS Nerd Font" "Ubuntu Nerd Font Propo" "Fira Sans Condensed" "Fira Sans Compressed" "Hack Nerd Font Propo" "SauceCodePro Nerd Font" "NotoSans Nerd Font" "NotoSans Nerd Font" "VictorMono Nerd Font Propo" "NotoSansM Nerd Font" "Iosevka" "Fira Sans Condensed" "JetBrainsMonoNL Nerd Font Mono" "NotoSans Nerd Font" "Iosevka Nerd Font Mono" "Cantarell" "Iosevka Nerd Font Mono" "NotoSerif Nerd Font" "Fira Sans Condensed" "Hasklug Nerd Font Propo" "NotoSerif Nerd Font Propo" "Nimbus Sans" "M+2 Nerd Font Propo" "iMWritingMono Nerd Font" "Noto Sans Mono CJK SC" "Iosevka Nerd Font Propo" "NotoSansM Nerd Font Mono" "Iosevka Nerd Font Propo" "MesloLGS Nerd Font Mono" "Agave Nerd Font" "Noto Sans Mono CJK TC" "IosevkaTerm Nerd Font Propo" "Hasklug Nerd Font" "Iosevka Nerd Font Propo" "IosevkaTerm Nerd Font Mono" "Monofur Nerd Font Mono" "SauceCodePro Nerd Font Mono" "NotoSerif Nerd Font Propo" "Noto Sans Mono CJK JP" "Fira Code" "NotoSansM Nerd Font" "NotoSansM Nerd Font Propo" "NotoSansM Nerd Font Mono" "Noto Sans Mono CJK HK" "Noto Sans Mono CJK KR" "NotoSans Nerd Font Propo" "Fira Sans" "NotoSerif Nerd Font Propo" "NotoSansM Nerd Font Mono" "M+CodeLatX Nerd Font Mono" "NotoSansM Nerd Font Propo" "VictorMono Nerd Font" "M+CodeLatX Nerd Font" "Iosevka Fixed" "Source Code Pro" "NotoSansM Nerd Font Propo" "Iosevka Fixed" "Iosevka Term" "GoMono Nerd Font Propo" "IosevkaTerm Nerd Font Propo" "ProFontWindows Nerd Font Propo" "Iosevka Nerd Font Propo" "Overpass Nerd Font" "M+CodeLatX Nerd Font" "B&H Lucida" "Noto Serif CJK SC" "Noto Serif CJK SC" "Lilex Nerd Font" "VictorMono Nerd Font Propo" "NotoSans Nerd Font" "Iosevka" "NotoSansM Nerd Font Propo" "NotoSans Nerd Font Propo" "NotoSerif Nerd Font Propo" "FreeSerif" "NotoSans Nerd Font" "Monoid Nerd Font Mono" "Noto Serif CJK HK" "M+1 Nerd Font Propo" "NotoSansM Nerd Font Mono" "NotoSansM Nerd Font Propo" "ShureTechMono Nerd Font Propo" "Iosevka Nerd Font" "GoMono Nerd Font Mono" "Nimbus Mono PS" "NotoSansM Nerd Font Mono" "M+1 Nerd Font" "NotoSerif Nerd Font" "Iosevka Term" "Iosevka Nerd Font Propo" "Symbols Nerd Font Mono" "JetBrainsMono Nerd Font Propo" "Iosevka" "Iosevka Nerd Font Mono" "InconsolataGo Nerd Font Propo" "NotoSans Nerd Font" "NotoSans Nerd Font Propo" "NotoSerif Nerd Font Propo" "Iosevka Term" "JetBrainsMono Nerd Font Propo" "Inconsolata Nerd Font Propo" "AnonymicePro Nerd Font Mono" "NotoSerif Nerd Font" "NotoSans Nerd Font" "NotoSans Nerd Font" "RobotoMono Nerd Font" "NotoSansM Nerd Font" "Ubuntu Nerd Font" "VictorMono Nerd Font Mono" "M+CodeLatX Nerd Font Propo" "RobotoMono Nerd Font Propo" "Iosevka" "JetBrainsMonoNL Nerd Font Mono" "SpaceMono Nerd Font" "M+CodeLatX Nerd Font" "NotoSansM Nerd Font" "Iosevka Term" "IosevkaTerm Nerd Font Mono" "NotoSerif Nerd Font Propo" "CaskaydiaCove Nerd Font" "Noto Sans CJK KR" "Iosevka Nerd Font Mono" "NotoSerif Nerd Font Propo" "M+2 Nerd Font Propo" "Adobe Times" "NotoSans Nerd Font Propo" "NotoSansM Nerd Font Mono" "FiraMono Nerd Font Mono" "iMWritingMono Nerd Font Mono" "ProFont IIx Nerd Font Mono" "Fira Sans Condensed" "IosevkaTerm Nerd Font" "NotoSans Nerd Font Propo" "NotoSansM Nerd Font" "WenQuanYi Micro Hei Mono" "NotoSerif Nerd Font" "Nimbus Sans Narrow" "JetBrainsMonoNL Nerd Font Mono" "Iosevka" "MesloLGM Nerd Font Mono" "NotoSans Nerd Font Propo" "OverpassM Nerd Font" "NotoSansM Nerd Font Propo" "Iosevka Nerd Font Mono" "Iosevka Term" "Iosevka Fixed" "VictorMono Nerd Font" "BlexMono Nerd Font Mono" "M+CodeLat Nerd Font" "VictorMono Nerd Font Mono" "Fira Mono" "Iosevka Nerd Font" "NotoSansM Nerd Font Propo" "URW Bookman" "Source Code Pro" "M+1Code Nerd Font Propo" "Iosevka Term" "NotoSans Nerd Font" "Noto Serif CJK KR" "Agave Nerd Font Propo" "FiraMono Nerd Font Propo" "Fira Code" "ShureTechMono Nerd Font Mono" "NotoSansM Nerd Font" "BlexMono Nerd Font Propo" "Fira Sans Compressed" "OverpassM Nerd Font Mono" "NotoSerif Nerd Font" "NotoSansM Nerd Font" "CaskaydiaCove Nerd Font Propo" "M+1Code Nerd Font Mono" "Fira Sans Compressed" "NotoSerif Nerd Font Propo" "JetBrainsMonoNL Nerd Font Propo" "NotoSansM Nerd Font Propo" "Iosevka" "M+CodeLat Nerd Font" "LiterationSerif Nerd Font Propo" "Iosevka" "M+2 Nerd Font" "M+CodeLatX Nerd Font Mono" "SpaceMono Nerd Font Mono" "3270 Nerd Font Propo" "NotoSansM Nerd Font Mono" "IosevkaTerm Nerd Font Mono" "Iosevka Term" "NotoSansM Nerd Font Mono" "InconsolataGo Nerd Font Mono" "SauceCodePro Nerd Font Propo" "Iosevka Nerd Font" "NotoSans Nerd Font Propo" "3270 Nerd Font Mono" "Adobe Utopia" "Iosevka Nerd Font Propo" "Fira Sans" "M+2 Nerd Font Propo" "FiraCode Nerd Font Mono" "IosevkaTerm Nerd Font" "NotoSansM Nerd Font Propo" "Iosevka" "Iosevka Nerd Font" "M+CodeLat Nerd Font" "NotoSansM Nerd Font" "Overpass Nerd Font" "M+2 Nerd Font" "Fira Sans Compressed" "IosevkaTerm Nerd Font" "NotoSansM Nerd Font" "VictorMono Nerd Font" "M+1 Nerd Font Propo" "NotoSansM Nerd Font" "iMWritingDuo Nerd Font" "Iosevka Fixed" "IosevkaTerm Nerd Font Propo" "LiterationSans Nerd Font" "NotoSans Nerd Font Propo" "NotoSansM Nerd Font" "CaskaydiaCove Nerd Font Propo" "FiraCode Nerd Font Mono" "NotoSansM Nerd Font Mono" "Symbols Nerd Font" "DaddyTimeMono Nerd Font Propo" "Iosevka Term" "Iosevka Term" "NotoSans Nerd Font Propo" "Adobe New Century Schoolbook" "Noto Sans CJK HK" "Overpass Nerd Font" "Mononoki Nerd Font Propo" "NotoMono Nerd Font Mono" "Hasklug Nerd Font Propo" "Iosevka Term" "Noto Sans CJK KR" "VictorMono Nerd Font" "SauceCodePro Nerd Font Mono" "BlexMono Nerd Font Propo" "Source Code Pro" "Noto Sans CJK SC" "IosevkaTerm Nerd Font Propo" "FiraCode Nerd Font Mono" "MesloLGSDZ Nerd Font Propo" "M+1Code Nerd Font Propo" "Noto Sans CJK HK" "M+2 Nerd Font" "Iosevka" "Iosevka Nerd Font Mono" "IosevkaTerm Nerd Font Mono" "Fira Sans" "Inconsolata LGC Nerd Font Mono" "Bitstream Charter" "Iosevka" "NotoSerif Nerd Font Propo" "NotoSansM Nerd Font" "IosevkaTerm Nerd Font" "NotoSansM Nerd Font Mono" "DEC Terminal" "Iosevka Term" "M+CodeLat Nerd Font Mono" "SauceCodePro Nerd Font" "Iosevka Term" "BitstromWera Nerd Font Propo" "BitstromWera Nerd Font Mono" "Fira Mono" "Fira Sans" "Iosevka Nerd Font Mono" "3270 Nerd Font Mono" "DejaVuSansM Nerd Font" "Iosevka Nerd Font" "iMWritingQuat Nerd Font Propo" "FiraMono Nerd Font Propo" "IosevkaTerm Nerd Font Propo" "Fira Sans" "Fira Sans Compressed" "M+CodeLat Nerd Font" "Iosevka" "Iosevka" "Iosevka Term" "M+1 Nerd Font Propo" "Iosevka Nerd Font Propo" "NotoSansM Nerd Font Propo" "C059" "Noto Sans CJK JP" "VictorMono Nerd Font Propo" "Noto Sans CJK SC" "Overpass Nerd Font Propo" "Iosevka Term" "Liberation Mono" "JetBrainsMonoNL Nerd Font Propo" "NotoSansM Nerd Font" "Terminess Nerd Font Propo" "M+1Code Nerd Font" "Iosevka Nerd Font Mono" "Noto Serif CJK TC" "NotoSans Nerd Font" "JetBrainsMono Nerd Font" "github-octicons" "OverpassM Nerd Font Mono" "Hasklug Nerd Font Mono" "VictorMono Nerd Font Propo" "VictorMono Nerd Font Mono" "DaddyTimeMono Nerd Font" "LiterationSerif Nerd Font" "Lekton Nerd Font" "M+1 Nerd Font Propo" "Iosevka Term" "IosevkaTerm Nerd Font Propo" "JetBrainsMonoNL Nerd Font Propo" "NotoSans Nerd Font" "NotoSerif Nerd Font" "NotoSansM Nerd Font" "Iosevka Term" "Fira Sans Condensed" "NotoSerif Nerd Font Propo" "RobotoMono Nerd Font Mono" "Hurmit Nerd Font" "NotoMono Nerd Font Propo" "M+1Code Nerd Font Mono" "NotoSerif Nerd Font Propo" "NotoSerif Nerd Font" "Material Icons" "M+2 Nerd Font" "OpenDyslexicM Nerd Font Mono" "Iosevka" "NotoSansM Nerd Font Mono" "JetBrainsMono Nerd Font" "IosevkaTerm Nerd Font Propo" "MesloLGMDZ Nerd Font Mono" "JetBrainsMono Nerd Font Mono" "NotoSans Nerd Font" "IosevkaTerm Nerd Font" "Fira Sans Compressed" "all-the-icons" "JetBrainsMono Nerd Font Propo" "Noto Sans CJK JP" "JetBrainsMono Nerd Font Mono" "Noto Serif CJK TC" "Noto Serif CJK TC" "M+2 Nerd Font Propo" "IosevkaTerm Nerd Font Mono" "M+CodeLat Nerd Font Propo" "Monoid Nerd Font" "WenQuanYi Micro Hei" "NotoSansM Nerd Font" "Iosevka Nerd Font Propo" "JetBrainsMonoNL Nerd Font Propo" "FiraMono Nerd Font" "SauceCodePro Nerd Font Propo" "Noto Sans CJK JP" "Iosevka Fixed" "Mononoki Nerd Font" "FantasqueSansM Nerd Font" "RobotoMono Nerd Font" "Hack Nerd Font Mono" "MesloLGLDZ Nerd Font Mono" "VictorMono Nerd Font" "NotoSansM Nerd Font Mono" "NotoSansM Nerd Font Mono" "LiterationSans Nerd Font Propo" "NotoSerif Nerd Font Propo" "NotoSerif Nerd Font" "JetBrainsMonoNL Nerd Font" "DroidSansM Nerd Font Propo" "NotoSans Nerd Font" "Hasklug Nerd Font Propo" "OverpassM Nerd Font" "iMWritingDuo Nerd Font Propo" "NotoSansM Nerd Font" "Fira Sans Compressed" "Iosevka Term" "NotoSans Nerd Font Propo" "Iosevka Fixed" "Iosevka Term" "M+CodeLatX Nerd Font" "ComicShannsMono Nerd Font Propo" "JetBrainsMono Nerd Font" "SpaceMono Nerd Font Propo" "Iosevka Nerd Font Propo" "NotoSansM Nerd Font" "NotoSansM Nerd Font Mono" "M+CodeLatX Nerd Font Propo" "3270 Nerd Font" "NotoSerif Nerd Font Propo" "M+CodeLat Nerd Font Mono" "Iosevka Fixed" "Iosevka" "Noto Serif CJK JP" "Ubuntu Nerd Font" "HeavyData Nerd Font Propo" "NotoSerif Nerd Font Propo" "Fira Sans" "OpenDyslexicAlt Nerd Font" "Overpass Nerd Font Propo" "B&H LucidaBright" "Z003" "M+CodeLatX Nerd Font Propo" "ComicShannsMono Nerd Font" "Iosevka Nerd Font Propo" "M+CodeLatX Nerd Font Propo" "Iosevka Fixed" "Iosevka Fixed" "Iosevka" "BigBlueTerm437 Nerd Font Propo" "NotoSans Nerd Font" "NotoSansM Nerd Font" "Iosevka Fixed" "FiraCode Nerd Font Propo" "HeavyData Nerd Font" "M+CodeLatX Nerd Font Mono" "NotoSansM Nerd Font" "Overpass Nerd Font Propo" "NotoSerif Nerd Font" "D050000L" "BlexMono Nerd Font" "M+CodeLatX Nerd Font Mono" "NotoSerif Nerd Font" "IosevkaTerm Nerd Font Propo" "Iosevka Fixed" "CaskaydiaCove Nerd Font Propo" "Iosevka Fixed" "Hack Nerd Font" "IosevkaTerm Nerd Font Mono" "NotoSerif Nerd Font" "Iosevka Fixed" "Noto Serif CJK SC" "CaskaydiaCove Nerd Font Mono" "Iosevka Nerd Font Propo" "Adobe Courier" "Hasklug Nerd Font" "CaskaydiaCove Nerd Font" "Liberation Serif" "Lilex Nerd Font Propo" "M+1 Nerd Font" "Iosevka Fixed" "M+1Code Nerd Font Propo" "NotoSansM Nerd Font Mono" "NotoSans Nerd Font" "M+2 Nerd Font Propo" "Hurmit Nerd Font Propo" "RobotoMono Nerd Font" "Iosevka Fixed" "JetBrainsMonoNL Nerd Font" "Fira Sans Condensed" "Iosevka" "Ubuntu Nerd Font Propo" "JoyPixels" "Overpass Nerd Font" "Monofur Nerd Font Propo" "Noto Sans CJK JP" "Iosevka Fixed" "IosevkaTerm Nerd Font" "IosevkaTerm Nerd Font Mono" "M+CodeLatX Nerd Font Mono" "3270 Nerd Font" "RobotoMono Nerd Font Propo" "Noto Serif CJK JP" "NotoSans Nerd Font" "M+1 Nerd Font Propo" "NotoSansM Nerd Font Mono" "M+CodeLat Nerd Font Propo" "MesloLGS Nerd Font Propo" "NotoSerif Nerd Font Propo" "RobotoMono Nerd Font Propo" "Overpass Nerd Font Propo" "JetBrainsMono Nerd Font Mono" "M+1Code Nerd Font" "Iosevka Term" "JetBrainsMonoNL Nerd Font" "Iosevka Nerd Font Mono" "AurulentSansM Nerd Font" "RobotoMono Nerd Font Propo" "Iosevka Term" "Noto Serif CJK SC" "Noto Serif CJK HK" "CaskaydiaCove Nerd Font Propo" "Fira Sans Condensed" "Noto Sans CJK TC" "Noto Sans CJK SC" "NotoSerif Nerd Font Propo" "BlexMono Nerd Font Mono" "NotoSansM Nerd Font" "Noto Sans CJK KR" "RobotoMono Nerd Font" "SauceCodePro Nerd Font" "Iosevka Term" "NotoSansM Nerd Font Propo" "Noto Sans CJK HK" "B&H LucidaTypewriter" "Noto Sans CJK KR" "RobotoMono Nerd Font" "M+2 Nerd Font Propo" "Noto Sans CJK JP" "Iosevka" "NotoSans Nerd Font Propo" "UbuntuMono Nerd Font Mono" "Iosevka Fixed" "BitstromWera Nerd Font" "JetBrainsMonoNL Nerd Font Mono" "Bitstream Terminal" "Iosevka Nerd Font" "Liberation Sans" "file-icons" "iMWritingQuat Nerd Font" "BlexMono Nerd Font" "NotoSansM Nerd Font Mono" "M+1Code Nerd Font" "Iosevka" "Noto Sans CJK SC" "CaskaydiaCove Nerd Font Mono" "Iosevka Nerd Font" "Iosevka Nerd Font Propo" "Iosevka Fixed" "NotoSans Nerd Font Propo" "Iosevka" "Iosevka Term" "IosevkaTerm Nerd Font Propo" "M+1 Nerd Font" "NotoSansM Nerd Font" "ProFontWindows Nerd Font" "NotoSerif Nerd Font Propo" "M+1 Nerd Font Propo" "Noto Sans CJK TC" "VictorMono Nerd Font Propo" "BlexMono Nerd Font Propo" "ProggyClean Nerd Font" "Noto Sans CJK HK" "Fira Sans" "BlexMono Nerd Font Propo" "M+CodeLat Nerd Font Propo" "Iosevka Fixed" "VictorMono Nerd Font Mono" "NotoSans Nerd Font" "NotoSansM Nerd Font Mono" "Hurmit Nerd Font" "MesloLGL Nerd Font" "Lilex Nerd Font Mono" "CodeNewRoman Nerd Font Propo" "DroidSansM Nerd Font Mono" "MesloLGL Nerd Font Mono" "Terminess Nerd Font" "MesloLGM Nerd Font Propo" "FreeSans" "NotoSerif Nerd Font Propo" "NotoSansM Nerd Font" "M+1Code Nerd Font Mono" "NotoSans Nerd Font" "NotoSerif Nerd Font" "JetBrainsMonoNL Nerd Font" "Fira Code" "FiraCode Nerd Font" "Fira Sans" "Fira Sans Condensed" "Iosevka Fixed" "NotoSerif Nerd Font" "VictorMono Nerd Font" "Noto Sans CJK KR" "3270 Nerd Font Propo" "Fira Sans Condensed" "FiraCode Nerd Font Propo" "Noto Color Emoji" "Source Code Pro" "IosevkaTerm Nerd Font Mono" "FiraMono Nerd Font Mono" "SauceCodePro Nerd Font Propo" "NotoSans Nerd Font Propo" "Hasklug Nerd Font Mono" "NotoMono Nerd Font" "M+1Code Nerd Font Mono" "Iosevka Fixed" "Iosevka Nerd Font" "IosevkaTerm Nerd Font" "JetBrainsMonoNL Nerd Font" "JetBrainsMono Nerd Font" "SauceCodePro Nerd Font" "VictorMono Nerd Font" "IosevkaTerm Nerd Font Propo" "Noto Serif CJK JP" "Iosevka" "Iosevka Term" "NotoSerif Nerd Font" "3270 Nerd Font" "JetBrainsMonoNL Nerd Font Propo" "MesloLGMDZ Nerd Font Propo" "NotoSansM Nerd Font Mono" "VictorMono Nerd Font" "ComicShannsMono Nerd Font Mono" "DaddyTimeMono Nerd Font Mono" "NotoSerif Nerd Font" "Iosevka Fixed" "3270 Nerd Font Propo" "VictorMono Nerd Font Mono" "Iosevka Fixed" "MesloLGL Nerd Font Propo" "Iosevka Term" "JetBrainsMonoNL Nerd Font Mono" "Source Code Pro" "ProggyCleanSZ Nerd Font Propo" "FontAwesome" "Lekton Nerd Font Propo" "Inconsolata LGC Nerd Font Propo" "JetBrainsMono Nerd Font" "Iosevka" "Overpass Nerd Font" "Hurmit Nerd Font Mono" "JetBrainsMono Nerd Font Mono" "NotoSansM Nerd Font" "FiraCode Nerd Font Mono" "IosevkaTerm Nerd Font" "NotoSansM Nerd Font Propo" "Noto Serif CJK KR" "Fira Sans Condensed" "M+CodeLat Nerd Font Propo" "NotoSerif Nerd Font" "Hasklug Nerd Font Mono" "ProggyClean CE Nerd Font Propo" "ProggyCleanSZ Nerd Font" "Hasklug Nerd Font Propo" "OverpassM Nerd Font Propo" "MesloLGSDZ Nerd Font" "BlexMono Nerd Font" "NotoSerif Nerd Font" "Noto Serif CJK HK" "NotoSans Nerd Font Propo" "IosevkaTerm Nerd Font Propo" "M+1Code Nerd Font" "DejaVuSansM Nerd Font Mono" "NotoSans Nerd Font Propo" "Iosevka Nerd Font Mono" "Iosevka Nerd Font Propo" "MesloLGLDZ Nerd Font" "NotoSans Nerd Font Propo" "SauceCodePro Nerd Font" "JetBrainsMono Nerd Font Mono" "AnonymicePro Nerd Font Propo" "Iosevka Term" "IosevkaTerm Nerd Font" "P052" "FiraMono Nerd Font" "NotoSansM Nerd Font Propo" "NotoSansM Nerd Font Mono" "NotoSerif Nerd Font" "NotoSansM Nerd Font Propo" "M+CodeLat Nerd Font Mono" "JetBrainsMono Nerd Font Propo" "NotoSerif Nerd Font Propo" "M+CodeLatX Nerd Font Propo" "NotoSerif Nerd Font" "NotoSerif Nerd Font Propo" "M+CodeLat Nerd Font Mono" "NotoSansM Nerd Font Propo" "MesloLGMDZ Nerd Font" "OpenDyslexic Nerd Font Propo" "JetBrainsMonoNL Nerd Font Mono" "M+CodeLatX Nerd Font Mono" "RobotoMono Nerd Font Mono" "Noto Sans CJK TC" "Overpass Nerd Font" "Monoid Nerd Font Propo" "NotoSans Nerd Font Propo" "Cousine Nerd Font" "NotoSerif Nerd Font Propo" "RobotoMono Nerd Font Mono" "IosevkaTerm Nerd Font" "SauceCodePro Nerd Font Propo" "NotoSans Nerd Font" "NotoSansM Nerd Font" "Tinos Nerd Font Propo" "Inconsolata Nerd Font Mono" "VictorMono Nerd Font Mono" "VictorMono Nerd Font Propo" "Lilex Nerd Font" "CodeNewRoman Nerd Font" "Iosevka" "Iosevka" "VictorMono Nerd Font Propo" "OpenDyslexicM Nerd Font Propo" "NotoSans Nerd Font Propo" "NotoSansM Nerd Font Propo" "RobotoMono Nerd Font Mono" "ProggyClean CE Nerd Font Mono" "Ubuntu Nerd Font Propo" "Fira Sans" "SauceCodePro Nerd Font" "Inconsolata Nerd Font" "Lekton Nerd Font Mono" "MesloLGLDZ Nerd Font Propo" "BlexMono Nerd Font Mono" "BlexMono Nerd Font Propo" "Ubuntu Nerd Font" "Iosevka Term" "Iosevka Nerd Font" "FantasqueSansM Nerd Font Mono" "OpenDyslexicM Nerd Font" "BlexMono Nerd Font Mono" "Fira Sans Condensed" "CaskaydiaCove Nerd Font Mono" "NotoSansM Nerd Font Mono" "Iosevka Fixed" "IosevkaTerm Nerd Font Mono" "M+CodeLatX Nerd Font Propo" "NotoSerif Nerd Font" "IosevkaTerm Nerd Font" "NotoSerif Nerd Font" "SauceCodePro Nerd Font Mono" "NotoSansM Nerd Font" "NotoSansM Nerd Font Mono" "Hurmit Nerd Font Propo" "IosevkaTerm Nerd Font Mono" "NotoSansM Nerd Font Mono" "M+1Code Nerd Font" "M+2 Nerd Font Propo" "NotoSansM Nerd Font" "NotoSans Nerd Font" "Fira Sans Compressed" "M+2 Nerd Font Propo" "CaskaydiaCove Nerd Font Propo" "IosevkaTerm Nerd Font" "Fira Sans Compressed" "FantasqueSansM Nerd Font Propo" "Ubuntu Nerd Font" "Fira Sans Condensed" "NotoSans Nerd Font Propo" "OverpassM Nerd Font" "BlexMono Nerd Font" "FreeMono" "Fira Code" "JetBrainsMonoNL Nerd Font" "Iosevka Term" "VictorMono Nerd Font Propo" "Terminess Nerd Font Mono" "MesloLGM Nerd Font" "Ubuntu Nerd Font Propo" "NotoSansM Nerd Font Propo" "Hasklug Nerd Font" "VictorMono Nerd Font Mono" "NotoSerif Nerd Font" "M+1 Nerd Font Propo" "Iosevka" "Fira Sans Compressed" "CaskaydiaCove Nerd Font Mono" "Overpass Nerd Font Propo" "NotoSans Nerd Font" "Iosevka" "Fira Sans Compressed" "NotoSansM Nerd Font Mono" "NotoSans Nerd Font" "JetBrainsMono Nerd Font Mono" "NotoSansM Nerd Font Propo" "NotoSansM Nerd Font" "SauceCodePro Nerd Font Propo" "VictorMono Nerd Font" "NotoSans Nerd Font Propo" "JetBrainsMonoNL Nerd Font Propo" "NotoSerif Nerd Font" "Iosevka Term" "Iosevka Fixed" "M+1 Nerd Font Propo" "FiraCode Nerd Font Propo" "Fira Sans" "M+1Code Nerd Font Propo" "Weather Icons" "Noto Serif CJK HK" "Fira Sans" "IosevkaTerm Nerd Font" "Noto Serif CJK KR" "OverpassM Nerd Font Propo" "iosevka extrabold" "iosevka extralight" "iosevka heavy" "iosevka light" "iosevka medium" "iosevka semibold" "iosevka thin" "iosevka" "courier" "helvetica" "new century schoolbook" "symbol" "times" "utopia" "lucida" "lucidabright" "lucidatypewriter" "charter" "terminal" "courier" "helvetica" "new century schoolbook" "symbol" "times" "utopia" "lucida" "lucidabright" "lucidatypewriter" "charter" "terminal" "courier" "helvetica" "new century schoolbook" "symbol" "times" "utopia" "lucida" "lucidabright" "lucidatypewriter" "charter" "terminal" "courier" "helvetica" "new century schoolbook" "symbol" "times" "utopia" "lucida" "lucidabright" "lucidatypewriter" "charter" "terminal" "fixed" "Iosevka Nerd Font" "M+CodeLat Nerd Font Propo" "OverpassM Nerd Font Mono" "ProggyClean Nerd Font Propo" "M+CodeLat Nerd Font" "NotoSansM Nerd Font" "Iosevka Nerd Font Mono" "IosevkaTerm Nerd Font Propo" "VictorMono Nerd Font Propo" "Fira Sans" "FiraCode Nerd Font" "M+1Code Nerd Font Mono" "NotoSerif Nerd Font Propo" "UbuntuMono Nerd Font" "M+1 Nerd Font" "VictorMono Nerd Font Mono" "M+2 Nerd Font" "LiterationMono Nerd Font Mono" "NotoSans Nerd Font" "Cousine Nerd Font Mono" "JetBrainsMono Nerd Font Propo" "Hasklug Nerd Font" "Standard Symbols PS" "OpenDyslexic Nerd Font" "Noto Sans CJK TC" "DejaVuSansM Nerd Font Propo" "LiterationMono Nerd Font Propo" "IosevkaTerm Nerd Font Propo" "Noto Serif CJK KR" "IosevkaTerm Nerd Font Propo" "NotoSans Nerd Font" "NotoSansM Nerd Font Propo" "Iosevka Nerd Font Mono" "NotoSerif Nerd Font Propo" "M+1 Nerd Font" "NotoSerif Nerd Font" "Noto Serif CJK TC" "VictorMono Nerd Font Propo" "Noto Sans CJK TC" "M+CodeLat Nerd Font Mono" "VictorMono Nerd Font" "FiraCode Nerd Font Mono" "NotoSans Nerd Font Propo" "Iosevka Term" "Iosevka" "FiraCode Nerd Font Propo" "NotoSans Nerd Font" "NotoSans Nerd Font" "URW Gothic" "NotoSerif Nerd Font" "SauceCodePro Nerd Font Propo" "BlexMono Nerd Font" "Hasklug Nerd Font Mono" "NotoSans Nerd Font Propo" "NotoSans Nerd Font Propo" "InconsolataGo Nerd Font" "Overpass Nerd Font Propo" "BigBlueTermPlus Nerd Font Mono" "NotoSansM Nerd Font" "NotoSansM Nerd Font Propo" "BlexMono Nerd Font Propo" "AurulentSansM Nerd Font Propo" "NotoSans Nerd Font" "M+CodeLat Nerd Font Propo" "MesloLGSDZ Nerd Font Mono" "AurulentSansM Nerd Font Mono" "ProFontWindows Nerd Font Mono" "Cousine Nerd Font Propo" "JetBrainsMonoNL Nerd Font" "IosevkaTerm Nerd Font Propo" "Iosevka Fixed" "OpenDyslexicAlt Nerd Font Propo" "FiraCode Nerd Font" "UbuntuMono Nerd Font Propo" "Monoid Nerd Font Propo" "NotoSerif Nerd Font Propo" "Hasklug Nerd Font" "NotoSans Nerd Font" "SauceCodePro Nerd Font Mono" "Hasklug Nerd Font Mono" "Fira Sans Compressed" "NotoSansM Nerd Font Mono" "NotoSansM Nerd Font Propo" "Lilex Nerd Font Propo" "M+1Code Nerd Font" "Monoid Nerd Font" "BlexMono Nerd Font Propo" "NotoSansM Nerd Font Propo" "NotoSans Nerd Font" "NotoSerif Nerd Font" "JetBrainsMono Nerd Font" "NotoSansM Nerd Font Propo" "CaskaydiaCove Nerd Font" "VictorMono Nerd Font Propo" "NotoSansM Nerd Font Mono" "Iosevka Nerd Font" "NotoSansM Nerd Font Propo" "Iosevka" "Noto Sans CJK KR" "Noto Serif CJK JP" "Noto Sans CJK TC" "NotoSans Nerd Font" "M+1Code Nerd Font Propo" "IosevkaTerm Nerd Font" "IosevkaTerm Nerd Font Mono" "Noto Serif CJK KR" "NotoSansM Nerd Font Propo" "NotoSans Nerd Font Propo" "NotoSans Nerd Font Propo" "M+2 Nerd Font" "NotoSerif Nerd Font" "DroidSansM Nerd Font" "NotoSans Nerd Font Propo" "BlexMono Nerd Font Mono" "NotoSansM Nerd Font Mono" "Nimbus Roman" "RobotoMono Nerd Font Propo" "Noto Sans CJK SC" "Iosevka Fixed" "NotoSerif Nerd Font Propo" "Iosevka Fixed" "M+1Code Nerd Font Mono" "Noto Serif CJK HK" "NotoSerif Nerd Font Propo" "Fira Sans" "NotoSerif Nerd Font Propo" "IosevkaTerm Nerd Font Propo" "BlexMono Nerd Font" "M+1 Nerd Font" "M+CodeLat Nerd Font" "NotoSansM Nerd Font Propo" "ShureTechMono Nerd Font" "RobotoMono Nerd Font Mono" "Iosevka" "Iosevka Nerd Font" "Agave Nerd Font Mono" "BlexMono Nerd Font Mono" "NotoSans Nerd Font Propo" "BlexMono Nerd Font Mono" "Iosevka Nerd Font Mono" "Iosevka Fixed" "CaskaydiaCove Nerd Font" "IosevkaTerm Nerd Font" "BigBlueTerm437 Nerd Font" "NotoSansM Nerd Font Propo" "FiraCode Nerd Font" "Fira Sans Compressed" "Overpass Nerd Font" "Fira Code" "NotoSans Nerd Font Propo" "SauceCodePro Nerd Font Mono" "FiraCode Nerd Font Propo" "BigBlueTermPlus Nerd Font" "NotoSansM Nerd Font Mono" "Hasklug Nerd Font" "Iosevka" "M+1 Nerd Font" "Source Code Pro" "Arimo Nerd Font Propo" "NotoSansM Nerd Font Mono" "AnonymicePro Nerd Font" "Noto Serif CJK SC" "JetBrainsMono Nerd Font Propo" "Iosevka Nerd Font Propo" "Noto Sans CJK HK" "Iosevka Nerd Font Mono" "IosevkaTerm Nerd Font Mono" "VictorMono Nerd Font Mono" "Fira Sans Compressed" "VictorMono Nerd Font" "Noto Sans CJK HK" "Iosevka Term" "NotoSansM Nerd Font Propo" "IosevkaTerm Nerd Font Mono" "M+2 Nerd Font" "NotoSerif Nerd Font Propo" "NotoSerif Nerd Font" "Hurmit Nerd Font Mono" "IosevkaTerm Nerd Font" "M+2 Nerd Font" "Iosevka" "BlexMono Nerd Font" "M+CodeLatX Nerd Font" "GoMono Nerd Font" "Iosevka Nerd Font Propo" "NotoSans Nerd Font" "Iosevka" "NotoSansM Nerd Font Propo" "ProFont IIx Nerd Font" "Mononoki Nerd Font Mono" "SourceCodeVF" "NotoSerif Nerd Font" "IosevkaTerm Nerd Font Mono" "Iosevka Fixed" "VictorMono Nerd Font Mono" "Lilex Nerd Font Mono" "Iosevka Term" "Noto Serif CJK JP" "Hasklug Nerd Font Mono" "Hasklug Nerd Font Propo" "Iosevka Nerd Font" "Noto Serif CJK KR" "Noto Serif CJK HK" "VictorMono Nerd Font" "NotoSerif Nerd Font Propo" "Iosevka Nerd Font" "iMWritingMono Nerd Font Propo" "M+CodeLat Nerd Font Mono" "Overpass Nerd Font Propo" "CaskaydiaCove Nerd Font" "NotoSansM Nerd Font Mono" "Noto Serif CJK TC" "BigBlueTerm437 Nerd Font Mono" "LiterationMono Nerd Font" "OverpassM Nerd Font Propo" "VictorMono Nerd Font Mono" "M+1 Nerd Font" "NotoSansM Nerd Font Mono" "ProFont IIx Nerd Font Propo" "Fira Sans" "JetBrainsMono Nerd Font Propo" "Monofur Nerd Font" "NotoSerif Nerd Font" "NotoSansM Nerd Font Propo" "Adobe Helvetica" "VictorMono Nerd Font Propo" "M+1Code Nerd Font Propo" "Monoid Nerd Font Mono" "3270 Nerd Font Mono" "NotoSans Nerd Font Propo" "NotoSansM Nerd Font Propo" "NotoSans Nerd Font Propo" "NotoSerif Nerd Font Propo" "ProggyClean CE Nerd Font" "Inconsolata LGC Nerd Font" "NotoSerif Nerd Font Propo" "Tinos Nerd Font" "Iosevka" "Iosevka Nerd Font Mono" "NotoSansM Nerd Font Mono" "Noto Sans CJK JP" "CodeNewRoman Nerd Font Mono" "Fira Sans Condensed" "JetBrainsMono Nerd Font" "Fira Sans" "Hasklug Nerd Font Propo" "Iosevka Term" "Iosevka Nerd Font" "Iosevka Fixed" "Iosevka Nerd Font Propo" "Fira Sans Condensed" "Iosevka Fixed" "Noto Sans CJK SC" "Iosevka Nerd Font" "Noto Serif CJK SC" "NotoSerif Nerd Font Propo" "NotoSerif Nerd Font" "FiraCode Nerd Font" "NotoSansM Nerd Font" "NotoSerif Nerd Font" "Noto Serif CJK TC" "BigBlueTermPlus Nerd Font Propo" "ProggyCleanSZ Nerd Font Mono" "NotoSansM Nerd Font Propo" "ProggyClean Nerd Font Mono" "M+CodeLatX Nerd Font" "JetBrainsMonoNL Nerd Font Propo" "NotoSansM Nerd Font" "NotoSansM Nerd Font" "NotoSans Nerd Font Propo" "Arimo Nerd Font" "IosevkaTerm Nerd Font Mono" "Noto Serif CJK JP" "CaskaydiaCove Nerd Font Mono" "Iosevka Nerd Font Mono" "IosevkaTerm Nerd Font Mono" "JetBrainsMonoNL Nerd Font Mono" "JetBrainsMono Nerd Font Mono" "SauceCodePro Nerd Font Mono" "VictorMono Nerd Font Mono" "MesloLGS Nerd Font" "Ubuntu Nerd Font Propo" "Fira Sans Condensed" "Fira Sans Compressed" "Hack Nerd Font Propo" "SauceCodePro Nerd Font" "NotoSans Nerd Font" "NotoSans Nerd Font" "VictorMono Nerd Font Propo" "NotoSansM Nerd Font" "Iosevka" "Fira Sans Condensed" "JetBrainsMonoNL Nerd Font Mono" "NotoSans Nerd Font" "Iosevka Nerd Font Mono" "Cantarell" "Iosevka Nerd Font Mono" "NotoSerif Nerd Font" "Fira Sans Condensed" "Hasklug Nerd Font Propo" "NotoSerif Nerd Font Propo" "Nimbus Sans" "M+2 Nerd Font Propo" "iMWritingMono Nerd Font" "Noto Sans Mono CJK SC" "Iosevka Nerd Font Propo" "NotoSansM Nerd Font Mono" "Iosevka Nerd Font Propo" "MesloLGS Nerd Font Mono" "Agave Nerd Font" "Noto Sans Mono CJK TC" "IosevkaTerm Nerd Font Propo" "Hasklug Nerd Font" "Iosevka Nerd Font Propo" "IosevkaTerm Nerd Font Mono" "Monofur Nerd Font Mono" "SauceCodePro Nerd Font Mono" "NotoSerif Nerd Font Propo" "Noto Sans Mono CJK JP" "Fira Code" "NotoSansM Nerd Font" "NotoSansM Nerd Font Propo" "NotoSansM Nerd Font Mono" "Noto Sans Mono CJK HK" "Noto Sans Mono CJK KR" "NotoSans Nerd Font Propo" "Fira Sans" "NotoSerif Nerd Font Propo" "NotoSansM Nerd Font Mono" "M+CodeLatX Nerd Font Mono" "NotoSansM Nerd Font Propo" "VictorMono Nerd Font" "M+CodeLatX Nerd Font" "Iosevka Fixed" "Source Code Pro" "NotoSansM Nerd Font Propo" "Iosevka Fixed" "Iosevka Term" "GoMono Nerd Font Propo" "IosevkaTerm Nerd Font Propo" "ProFontWindows Nerd Font Propo" "Iosevka Nerd Font Propo" "Overpass Nerd Font" "M+CodeLatX Nerd Font" "B&H Lucida" "Noto Serif CJK SC" "Noto Serif CJK SC" "Lilex Nerd Font" "VictorMono Nerd Font Propo" "NotoSans Nerd Font" "Iosevka" "NotoSansM Nerd Font Propo" "NotoSans Nerd Font Propo" "NotoSerif Nerd Font Propo" "FreeSerif" "NotoSans Nerd Font" "Monoid Nerd Font Mono" "Noto Serif CJK HK" "M+1 Nerd Font Propo" "NotoSansM Nerd Font Mono" "NotoSansM Nerd Font Propo" "ShureTechMono Nerd Font Propo" "Iosevka Nerd Font" "GoMono Nerd Font Mono" "Nimbus Mono PS" "NotoSansM Nerd Font Mono" "M+1 Nerd Font" "NotoSerif Nerd Font" "Iosevka Term" "Iosevka Nerd Font Propo" "Symbols Nerd Font Mono" "JetBrainsMono Nerd Font Propo" "Iosevka" "Iosevka Nerd Font Mono" "InconsolataGo Nerd Font Propo" "NotoSans Nerd Font" "NotoSans Nerd Font Propo" "NotoSerif Nerd Font Propo" "Iosevka Term" "JetBrainsMono Nerd Font Propo" "Inconsolata Nerd Font Propo" "AnonymicePro Nerd Font Mono" "NotoSerif Nerd Font" "NotoSans Nerd Font" "NotoSans Nerd Font" "RobotoMono Nerd Font" "NotoSansM Nerd Font" "Ubuntu Nerd Font" "VictorMono Nerd Font Mono" "M+CodeLatX Nerd Font Propo" "RobotoMono Nerd Font Propo" "Iosevka" "JetBrainsMonoNL Nerd Font Mono" "SpaceMono Nerd Font" "M+CodeLatX Nerd Font" "NotoSansM Nerd Font" "Iosevka Term" "IosevkaTerm Nerd Font Mono" "NotoSerif Nerd Font Propo" "CaskaydiaCove Nerd Font" "Noto Sans CJK KR" "Iosevka Nerd Font Mono" "NotoSerif Nerd Font Propo" "M+2 Nerd Font Propo" "Adobe Times" "NotoSans Nerd Font Propo" "NotoSansM Nerd Font Mono" "FiraMono Nerd Font Mono" "iMWritingMono Nerd Font Mono" "ProFont IIx Nerd Font Mono" "Fira Sans Condensed" "IosevkaTerm Nerd Font" "NotoSans Nerd Font Propo" "NotoSansM Nerd Font" "WenQuanYi Micro Hei Mono" "NotoSerif Nerd Font" "Nimbus Sans Narrow" "JetBrainsMonoNL Nerd Font Mono" "Iosevka" "MesloLGM Nerd Font Mono" "NotoSans Nerd Font Propo" "OverpassM Nerd Font" "NotoSansM Nerd Font Propo" "Iosevka Nerd Font Mono" "Iosevka Term" "Iosevka Fixed" "VictorMono Nerd Font" "BlexMono Nerd Font Mono" "M+CodeLat Nerd Font" "VictorMono Nerd Font Mono" "Fira Mono" "Iosevka Nerd Font" "NotoSansM Nerd Font Propo" "URW Bookman" "Source Code Pro" "M+1Code Nerd Font Propo" "Iosevka Term" "NotoSans Nerd Font" "Noto Serif CJK KR" "Agave Nerd Font Propo" "FiraMono Nerd Font Propo" "Fira Code" "ShureTechMono Nerd Font Mono" "NotoSansM Nerd Font" "BlexMono Nerd Font Propo" "Fira Sans Compressed" "OverpassM Nerd Font Mono" "NotoSerif Nerd Font" "NotoSansM Nerd Font" "CaskaydiaCove Nerd Font Propo" "M+1Code Nerd Font Mono" "Fira Sans Compressed" "NotoSerif Nerd Font Propo" "JetBrainsMonoNL Nerd Font Propo" "NotoSansM Nerd Font Propo" "Iosevka" "M+CodeLat Nerd Font" "LiterationSerif Nerd Font Propo" "Iosevka" "M+2 Nerd Font" "M+CodeLatX Nerd Font Mono" "SpaceMono Nerd Font Mono" "3270 Nerd Font Propo" "NotoSansM Nerd Font Mono" "IosevkaTerm Nerd Font Mono" "Iosevka Term" "NotoSansM Nerd Font Mono" "InconsolataGo Nerd Font Mono" "SauceCodePro Nerd Font Propo" "Iosevka Nerd Font" "NotoSans Nerd Font Propo" "3270 Nerd Font Mono" "Adobe Utopia" "Iosevka Nerd Font Propo" "Fira Sans" "M+2 Nerd Font Propo" "FiraCode Nerd Font Mono" "IosevkaTerm Nerd Font" "NotoSansM Nerd Font Propo" "Iosevka" "Iosevka Nerd Font" "M+CodeLat Nerd Font" "NotoSansM Nerd Font" "Overpass Nerd Font" "M+2 Nerd Font" "Fira Sans Compressed" "IosevkaTerm Nerd Font" "NotoSansM Nerd Font" "VictorMono Nerd Font" "M+1 Nerd Font Propo" "NotoSansM Nerd Font" "iMWritingDuo Nerd Font" "Iosevka Fixed" "IosevkaTerm Nerd Font Propo" "LiterationSans Nerd Font" "NotoSans Nerd Font Propo" "NotoSansM Nerd Font" "CaskaydiaCove Nerd Font Propo" "FiraCode Nerd Font Mono" "NotoSansM Nerd Font Mono" "Symbols Nerd Font" "DaddyTimeMono Nerd Font Propo" "Iosevka Term" "Iosevka Term" "NotoSans Nerd Font Propo" "Adobe New Century Schoolbook" "Noto Sans CJK HK" "Overpass Nerd Font" "Mononoki Nerd Font Propo" "NotoMono Nerd Font Mono" "Hasklug Nerd Font Propo" "Iosevka Term" "Noto Sans CJK KR" "VictorMono Nerd Font" "SauceCodePro Nerd Font Mono" "BlexMono Nerd Font Propo" "Source Code Pro" "Noto Sans CJK SC" "IosevkaTerm Nerd Font Propo" "FiraCode Nerd Font Mono" "MesloLGSDZ Nerd Font Propo" "M+1Code Nerd Font Propo" "Noto Sans CJK HK" "M+2 Nerd Font" "Iosevka" "Iosevka Nerd Font Mono" "IosevkaTerm Nerd Font Mono" "Fira Sans" "Inconsolata LGC Nerd Font Mono" "Bitstream Charter" "Iosevka" "NotoSerif Nerd Font Propo" "NotoSansM Nerd Font" "IosevkaTerm Nerd Font" "NotoSansM Nerd Font Mono" "DEC Terminal" "Iosevka Term" "M+CodeLat Nerd Font Mono" "SauceCodePro Nerd Font" "Iosevka Term" "BitstromWera Nerd Font Propo" "BitstromWera Nerd Font Mono" "Fira Mono" "Fira Sans" "Iosevka Nerd Font Mono" "3270 Nerd Font Mono" "DejaVuSansM Nerd Font" "Iosevka Nerd Font" "iMWritingQuat Nerd Font Propo" "FiraMono Nerd Font Propo" "IosevkaTerm Nerd Font Propo" "Fira Sans" "Fira Sans Compressed" "M+CodeLat Nerd Font" "Iosevka" "Iosevka" "Iosevka Term" "M+1 Nerd Font Propo" "Iosevka Nerd Font Propo" "NotoSansM Nerd Font Propo" "C059" "Noto Sans CJK JP" "VictorMono Nerd Font Propo" "Noto Sans CJK SC" "Overpass Nerd Font Propo" "Iosevka Term" "Liberation Mono" "JetBrainsMonoNL Nerd Font Propo" "NotoSansM Nerd Font" "Terminess Nerd Font Propo" "M+1Code Nerd Font" "Iosevka Nerd Font Mono" "Noto Serif CJK TC" "NotoSans Nerd Font" "JetBrainsMono Nerd Font" "github-octicons" "OverpassM Nerd Font Mono" "Hasklug Nerd Font Mono" "VictorMono Nerd Font Propo" "VictorMono Nerd Font Mono" "DaddyTimeMono Nerd Font" "LiterationSerif Nerd Font" "Lekton Nerd Font" "M+1 Nerd Font Propo" "Iosevka Term" "IosevkaTerm Nerd Font Propo" "JetBrainsMonoNL Nerd Font Propo" "NotoSans Nerd Font" "NotoSerif Nerd Font" "NotoSansM Nerd Font" "Iosevka Term" "Fira Sans Condensed" "NotoSerif Nerd Font Propo" "RobotoMono Nerd Font Mono" "Hurmit Nerd Font" "NotoMono Nerd Font Propo" "M+1Code Nerd Font Mono" "NotoSerif Nerd Font Propo" "NotoSerif Nerd Font" "Material Icons" "M+2 Nerd Font" "OpenDyslexicM Nerd Font Mono" "Iosevka" "NotoSansM Nerd Font Mono" "JetBrainsMono Nerd Font" "IosevkaTerm Nerd Font Propo" "MesloLGMDZ Nerd Font Mono" "JetBrainsMono Nerd Font Mono" "NotoSans Nerd Font" "IosevkaTerm Nerd Font" "Fira Sans Compressed" "all-the-icons" "JetBrainsMono Nerd Font Propo" "Noto Sans CJK JP" "JetBrainsMono Nerd Font Mono" "Noto Serif CJK TC" "Noto Serif CJK TC" "M+2 Nerd Font Propo" "IosevkaTerm Nerd Font Mono" "M+CodeLat Nerd Font Propo" "Monoid Nerd Font" "WenQuanYi Micro Hei" "NotoSansM Nerd Font" "Iosevka Nerd Font Propo" "JetBrainsMonoNL Nerd Font Propo" "FiraMono Nerd Font" "SauceCodePro Nerd Font Propo" "Noto Sans CJK JP" "Iosevka Fixed" "Mononoki Nerd Font" "FantasqueSansM Nerd Font" "RobotoMono Nerd Font" "Hack Nerd Font Mono" "MesloLGLDZ Nerd Font Mono" "VictorMono Nerd Font" "NotoSansM Nerd Font Mono" "NotoSansM Nerd Font Mono" "LiterationSans Nerd Font Propo" "NotoSerif Nerd Font Propo" "NotoSerif Nerd Font" "JetBrainsMonoNL Nerd Font" "DroidSansM Nerd Font Propo" "NotoSans Nerd Font" "Hasklug Nerd Font Propo" "OverpassM Nerd Font" "iMWritingDuo Nerd Font Propo" "NotoSansM Nerd Font" "Fira Sans Compressed" "Iosevka Term" "NotoSans Nerd Font Propo" "Iosevka Fixed" "Iosevka Term" "M+CodeLatX Nerd Font" "ComicShannsMono Nerd Font Propo" "JetBrainsMono Nerd Font" "SpaceMono Nerd Font Propo" "Iosevka Nerd Font Propo" "NotoSansM Nerd Font" "NotoSansM Nerd Font Mono" "M+CodeLatX Nerd Font Propo" "3270 Nerd Font" "NotoSerif Nerd Font Propo" "M+CodeLat Nerd Font Mono" "Iosevka Fixed" "Iosevka" "Noto Serif CJK JP" "Ubuntu Nerd Font" "HeavyData Nerd Font Propo" "NotoSerif Nerd Font Propo" "Fira Sans" "OpenDyslexicAlt Nerd Font" "Overpass Nerd Font Propo" "B&H LucidaBright" "Z003" "M+CodeLatX Nerd Font Propo" "ComicShannsMono Nerd Font" "Iosevka Nerd Font Propo" "M+CodeLatX Nerd Font Propo" "Iosevka Fixed" "Iosevka Fixed" "Iosevka" "BigBlueTerm437 Nerd Font Propo" "NotoSans Nerd Font" "NotoSansM Nerd Font" "Iosevka Fixed" "FiraCode Nerd Font Propo" "HeavyData Nerd Font" "M+CodeLatX Nerd Font Mono" "NotoSansM Nerd Font" "Overpass Nerd Font Propo" "NotoSerif Nerd Font" "D050000L" "BlexMono Nerd Font" "M+CodeLatX Nerd Font Mono" "NotoSerif Nerd Font" "IosevkaTerm Nerd Font Propo" "Iosevka Fixed" "CaskaydiaCove Nerd Font Propo" "Iosevka Fixed" "Hack Nerd Font" "IosevkaTerm Nerd Font Mono" "NotoSerif Nerd Font" "Iosevka Fixed" "Noto Serif CJK SC" "CaskaydiaCove Nerd Font Mono" "Iosevka Nerd Font Propo" "Adobe Courier" "Hasklug Nerd Font" "CaskaydiaCove Nerd Font" "Liberation Serif" "Lilex Nerd Font Propo" "M+1 Nerd Font" "Iosevka Fixed" "M+1Code Nerd Font Propo" "NotoSansM Nerd Font Mono" "NotoSans Nerd Font" "M+2 Nerd Font Propo" "Hurmit Nerd Font Propo" "RobotoMono Nerd Font" "Iosevka Fixed" "JetBrainsMonoNL Nerd Font" "Fira Sans Condensed" "Iosevka" "Ubuntu Nerd Font Propo" "JoyPixels" "Overpass Nerd Font" "Monofur Nerd Font Propo" "Noto Sans CJK JP" "Iosevka Fixed" "IosevkaTerm Nerd Font" "IosevkaTerm Nerd Font Mono" "M+CodeLatX Nerd Font Mono" "3270 Nerd Font" "RobotoMono Nerd Font Propo" "Noto Serif CJK JP" "NotoSans Nerd Font" "M+1 Nerd Font Propo" "NotoSansM Nerd Font Mono" "M+CodeLat Nerd Font Propo" "MesloLGS Nerd Font Propo" "NotoSerif Nerd Font Propo" "RobotoMono Nerd Font Propo" "Overpass Nerd Font Propo" "JetBrainsMono Nerd Font Mono" "M+1Code Nerd Font" "Iosevka Term" "JetBrainsMonoNL Nerd Font" "Iosevka Nerd Font Mono" "AurulentSansM Nerd Font" "RobotoMono Nerd Font Propo" "Iosevka Term" "Noto Serif CJK SC" "Noto Serif CJK HK" "CaskaydiaCove Nerd Font Propo" "Fira Sans Condensed" "Noto Sans CJK TC" "Noto Sans CJK SC" "NotoSerif Nerd Font Propo" "BlexMono Nerd Font Mono" "NotoSansM Nerd Font" "Noto Sans CJK KR" "RobotoMono Nerd Font" "SauceCodePro Nerd Font" "Iosevka Term" "NotoSansM Nerd Font Propo" "Noto Sans CJK HK" "B&H LucidaTypewriter" "Noto Sans CJK KR" "RobotoMono Nerd Font" "M+2 Nerd Font Propo" "Noto Sans CJK JP" "Iosevka" "NotoSans Nerd Font Propo" "UbuntuMono Nerd Font Mono" "Iosevka Fixed" "BitstromWera Nerd Font" "JetBrainsMonoNL Nerd Font Mono" "Bitstream Terminal" "Iosevka Nerd Font" "Liberation Sans" "file-icons" "iMWritingQuat Nerd Font" "BlexMono Nerd Font" "NotoSansM Nerd Font Mono" "M+1Code Nerd Font" "Iosevka" "Noto Sans CJK SC" "CaskaydiaCove Nerd Font Mono" "Iosevka Nerd Font" "Iosevka Nerd Font Propo" "Iosevka Fixed" "NotoSans Nerd Font Propo" "Iosevka" "Iosevka Term" "IosevkaTerm Nerd Font Propo" "M+1 Nerd Font" "NotoSansM Nerd Font" "ProFontWindows Nerd Font" "NotoSerif Nerd Font Propo" "M+1 Nerd Font Propo" "Noto Sans CJK TC" "VictorMono Nerd Font Propo" "BlexMono Nerd Font Propo" "ProggyClean Nerd Font" "Noto Sans CJK HK" "Fira Sans" "BlexMono Nerd Font Propo" "M+CodeLat Nerd Font Propo" "Iosevka Fixed" "VictorMono Nerd Font Mono" "NotoSans Nerd Font" "NotoSansM Nerd Font Mono" "Hurmit Nerd Font" "MesloLGL Nerd Font" "Lilex Nerd Font Mono" "CodeNewRoman Nerd Font Propo" "DroidSansM Nerd Font Mono" "MesloLGL Nerd Font Mono" "Terminess Nerd Font" "MesloLGM Nerd Font Propo" "FreeSans" "NotoSerif Nerd Font Propo" "NotoSansM Nerd Font" "M+1Code Nerd Font Mono" "NotoSans Nerd Font" "NotoSerif Nerd Font" "JetBrainsMonoNL Nerd Font" "Fira Code" "FiraCode Nerd Font" "Fira Sans" "Fira Sans Condensed" "Iosevka Fixed" "NotoSerif Nerd Font" "VictorMono Nerd Font" "Noto Sans CJK KR" "3270 Nerd Font Propo" "Fira Sans Condensed" "FiraCode Nerd Font Propo" "Noto Color Emoji" "Source Code Pro" "IosevkaTerm Nerd Font Mono" "FiraMono Nerd Font Mono" "SauceCodePro Nerd Font Propo" "NotoSans Nerd Font Propo" "Hasklug Nerd Font Mono" "NotoMono Nerd Font" "M+1Code Nerd Font Mono" "Iosevka Fixed" "Iosevka Nerd Font" "IosevkaTerm Nerd Font" "JetBrainsMonoNL Nerd Font" "JetBrainsMono Nerd Font" "SauceCodePro Nerd Font" "VictorMono Nerd Font" "IosevkaTerm Nerd Font Propo" "Noto Serif CJK JP" "Iosevka" "Iosevka Term" "NotoSerif Nerd Font" "3270 Nerd Font" "JetBrainsMonoNL Nerd Font Propo" "MesloLGMDZ Nerd Font Propo" "NotoSansM Nerd Font Mono" "VictorMono Nerd Font" "ComicShannsMono Nerd Font Mono" "DaddyTimeMono Nerd Font Mono" "NotoSerif Nerd Font" "Iosevka Fixed" "3270 Nerd Font Propo" "VictorMono Nerd Font Mono" "Iosevka Fixed" "MesloLGL Nerd Font Propo" "Iosevka Term" "JetBrainsMonoNL Nerd Font Mono" "Source Code Pro" "ProggyCleanSZ Nerd Font Propo" "FontAwesome" "Lekton Nerd Font Propo" "Inconsolata LGC Nerd Font Propo" "JetBrainsMono Nerd Font" "Iosevka" "Overpass Nerd Font" "Hurmit Nerd Font Mono" "JetBrainsMono Nerd Font Mono" "NotoSansM Nerd Font" "FiraCode Nerd Font Mono" "IosevkaTerm Nerd Font" "NotoSansM Nerd Font Propo" "Noto Serif CJK KR" "Fira Sans Condensed" "M+CodeLat Nerd Font Propo" "NotoSerif Nerd Font" "Hasklug Nerd Font Mono" "ProggyClean CE Nerd Font Propo" "ProggyCleanSZ Nerd Font" "Hasklug Nerd Font Propo" "OverpassM Nerd Font Propo" "MesloLGSDZ Nerd Font" "BlexMono Nerd Font" "NotoSerif Nerd Font" "Noto Serif CJK HK" "NotoSans Nerd Font Propo" "IosevkaTerm Nerd Font Propo" "M+1Code Nerd Font" "DejaVuSansM Nerd Font Mono" "NotoSans Nerd Font Propo" "Iosevka Nerd Font Mono" "Iosevka Nerd Font Propo" "MesloLGLDZ Nerd Font" "NotoSans Nerd Font Propo" "SauceCodePro Nerd Font" "JetBrainsMono Nerd Font Mono" "AnonymicePro Nerd Font Propo" "Iosevka Term" "IosevkaTerm Nerd Font" "P052" "FiraMono Nerd Font" "NotoSansM Nerd Font Propo" "NotoSansM Nerd Font Mono" "NotoSerif Nerd Font" "NotoSansM Nerd Font Propo" "M+CodeLat Nerd Font Mono" "JetBrainsMono Nerd Font Propo" "NotoSerif Nerd Font Propo" "M+CodeLatX Nerd Font Propo" "NotoSerif Nerd Font" "NotoSerif Nerd Font Propo" "M+CodeLat Nerd Font Mono" "NotoSansM Nerd Font Propo" "MesloLGMDZ Nerd Font" "OpenDyslexic Nerd Font Propo" "JetBrainsMonoNL Nerd Font Mono" "M+CodeLatX Nerd Font Mono" "RobotoMono Nerd Font Mono" "Noto Sans CJK TC" "Overpass Nerd Font" "Monoid Nerd Font Propo" "NotoSans Nerd Font Propo" "Cousine Nerd Font" "NotoSerif Nerd Font Propo" "RobotoMono Nerd Font Mono" "IosevkaTerm Nerd Font" "SauceCodePro Nerd Font Propo" "NotoSans Nerd Font" "NotoSansM Nerd Font" "Tinos Nerd Font Propo" "Inconsolata Nerd Font Mono" "VictorMono Nerd Font Mono" "VictorMono Nerd Font Propo" "Lilex Nerd Font" "CodeNewRoman Nerd Font" "Iosevka" "Iosevka" "VictorMono Nerd Font Propo" "OpenDyslexicM Nerd Font Propo" "NotoSans Nerd Font Propo" "NotoSansM Nerd Font Propo" "RobotoMono Nerd Font Mono" "ProggyClean CE Nerd Font Mono" "Ubuntu Nerd Font Propo" "Fira Sans" "SauceCodePro Nerd Font" "Inconsolata Nerd Font" "Lekton Nerd Font Mono" "MesloLGLDZ Nerd Font Propo" "BlexMono Nerd Font Mono" "BlexMono Nerd Font Propo" "Ubuntu Nerd Font" "Iosevka Term" "Iosevka Nerd Font" "FantasqueSansM Nerd Font Mono" "OpenDyslexicM Nerd Font" "BlexMono Nerd Font Mono" "Fira Sans Condensed" "CaskaydiaCove Nerd Font Mono" "NotoSansM Nerd Font Mono" "Iosevka Fixed" "IosevkaTerm Nerd Font Mono" "M+CodeLatX Nerd Font Propo" "NotoSerif Nerd Font" "IosevkaTerm Nerd Font" "NotoSerif Nerd Font" "SauceCodePro Nerd Font Mono" "NotoSansM Nerd Font" "NotoSansM Nerd Font Mono" "Hurmit Nerd Font Propo" "IosevkaTerm Nerd Font Mono" "NotoSansM Nerd Font Mono" "M+1Code Nerd Font" "M+2 Nerd Font Propo" "NotoSansM Nerd Font" "NotoSans Nerd Font" "Fira Sans Compressed" "M+2 Nerd Font Propo" "CaskaydiaCove Nerd Font Propo" "IosevkaTerm Nerd Font" "Fira Sans Compressed" "FantasqueSansM Nerd Font Propo" "Ubuntu Nerd Font" "Fira Sans Condensed" "NotoSans Nerd Font Propo" "OverpassM Nerd Font" "BlexMono Nerd Font" "FreeMono" "Fira Code" "JetBrainsMonoNL Nerd Font" "Iosevka Term" "VictorMono Nerd Font Propo" "Terminess Nerd Font Mono" "MesloLGM Nerd Font" "Ubuntu Nerd Font Propo" "NotoSansM Nerd Font Propo" "Hasklug Nerd Font" "VictorMono Nerd Font Mono" "NotoSerif Nerd Font" "M+1 Nerd Font Propo" "Iosevka" "Fira Sans Compressed" "CaskaydiaCove Nerd Font Mono" "Overpass Nerd Font Propo" "NotoSans Nerd Font" "Iosevka" "Fira Sans Compressed" "NotoSansM Nerd Font Mono" "NotoSans Nerd Font" "JetBrainsMono Nerd Font Mono" "NotoSansM Nerd Font Propo" "NotoSansM Nerd Font" "SauceCodePro Nerd Font Propo" "VictorMono Nerd Font" "NotoSans Nerd Font Propo" "JetBrainsMonoNL Nerd Font Propo" "NotoSerif Nerd Font" "Iosevka Term" "Iosevka Fixed" "M+1 Nerd Font Propo" "FiraCode Nerd Font Propo" "Fira Sans" "M+1Code Nerd Font Propo" "Weather Icons" "Noto Serif CJK HK" "Fira Sans" "IosevkaTerm Nerd Font" "Noto Serif CJK KR" "OverpassM Nerd Font Propo") + + + +**** Transparency +#+begin_src emacs-lisp :tangle config.el (set-frame-parameter nil 'alpha-background 70) - -(add-to-list 'default-frame-alist '(alpha-background . 70)) - +(add-to-list 'default-frame-alist '(alpha-background . 80)) +#+end_src +**** Helpers for text editing +#+begin_src emacs-lisp :tangle config.el (setq display-line-numbers-type 'relative) (setq next-screen-context-lines 4) - -(after! persp-mode - (setq persp-emacsclient-init-frame-behaviour-override "main")) -(setq doom-modeline-persp-name t) - +(setq-default global-visual-line-mode t) +(setq x-stretch-cursor t) +(setq column-number-mode t) #+end_src +*** set start of week to Monday (not sunday) http://sunsite.univie.ac.at/textbooks/emacs/emacs_33.html +#+BEGIN_SRC emacs-lisp +(setq-default calendar-week-start-day 1) +#+END_SRC + +** Package settings +*** Straight +#+begin_src emacs-lisp :tangle config.el +(setq straight-repository-branch "develop") +#+end_src +** emojify-mode +#+begin_src emacs-lisp :tangle no +(global-emojify-mode) +(global-emojify-mode-line-mode) +#+end_src + +** Global Keybinds +Setting this here because I experiment with these occasionally and want them reset properly eaach time. + +#+begin_src emacs-lisp :tangle config.el +(global-set-key "\C-g" 'keyboard-quit) +(global-set-key "\C-cu" 'browse-url-chrome) +#+end_src + +#+RESULTS: +: browse-url-chrome ** org-mode If you use `org' and don't want your org files in the default location below, change `org-directory'. It must be set before org loads! Make .org file automatically open in org-mode. +*** org +**** Basic settings #+begin_src emacs-lisp :tangle config.el (add-to-list 'auto-mode-alist '("\\.org\\'" . org-mode)) (setq org-directory "~/enc/org/") -(setq org-contacts-files - (file-expand-wildcards "~/enc/org/*.org")) + (setq org-enforce-todo-dependencies t) + (setq org-insert-heading-respect-content nil) + (setq org-reverse-note-order nil) + (setq org-show-following-heading t) + (setq org-show-hierarchy-above t) + (setq org-show-siblings nil) + (setq org-deadline-warning-days 7) + (setq org-blank-before-new-entry (quote ((heading . t) + (plain-list-item . nil)))) +(setq org-todo-repeat-to-state "LOOP") +(setq org-remove-highlights-with-change nil) +(setq org-read-date-prefer-future nil) +(setq org-special-ctrl-a/e t) +(setq org-special-ctrl-k t) +(setq org-yank-adjusted-subtrees t) +(setq org-M-RET-may-split-line t) +(setq org-log-done (quote time)) +(setq org-log-into-drawer t) +(setq org-catch-invisible-edits "smart") -(setq-default org-enforce-todo-dependencies t) +(setq org-completion-use-ido t) +(setq org-use-property-inheritance nil) +(setq org-hierarchical-todo-statistics t) +(org-align-tags t) +#+end_src +***** Automatically write =CREATED= properties in the =PROPERTIES= drawer: +#+BEGIN_SRC emacs-lisp + (org-expiry-insinuate) + ;; not checked yet: (setq org-expiry-handler-function 'org-expiry-archive-subtree) +#+END_SRC +**** DISABLED Split lines? +Ensure that hitting ~M-~ splits the line it's on. This is useful when I'm typing something long, and then decide to turn a paragraph into a list +#+begin_src emacs-lisp :tangle no + +#+end_src +**** my-org-tree-to-indirect-buffer +#+begin_quote +This beautiful piece of code was done by [[https://www.reddit.com/user/github-alphapapa][alphapapa]] and published on +[[https://www.reddit.com/r/orgmode/comments/dbsngi/finally_solving_the_lack_of_a_treeview_navigation/f26qpzr/][reddit]]. Its purpose is to provide more than one indirect buffer when +using =org-tree-to-indirect-buffer()= (via ~C-c C-x b~). Further more, +it has a different way of naming these buffers. + +Using an advice, the original function gets overwritten. +#+end_quote +--Karl Voit + +#+BEGIN_SRC emacs-lisp +(defun my-org-tree-to-indirect-buffer (&optional arg) + "Create indirect buffer and narrow it to current subtree. +The buffer is named after the subtree heading, with the filename +appended. If a buffer by that name already exists, it is +selected instead of creating a new buffer." + (interactive "P") + (let* ((new-buffer-p) + (pos (point)) + (buffer-name (let* ((heading (org-get-heading t t)) + (level (org-outline-level)) + (face (intern (concat "outline-" (number-to-string level)))) + (heading-string (propertize (org-link-display-format heading) + 'face face))) + (concat heading-string "::" (buffer-name)))) + (new-buffer (or (get-buffer buffer-name) + (prog1 (condition-case nil + (make-indirect-buffer (current-buffer) buffer-name 'clone) + (error (make-indirect-buffer (current-buffer) buffer-name))) + (setq new-buffer-p t))))) + (switch-to-buffer new-buffer) + (when new-buffer-p + ;; I don't understand why setting the point again is necessary, but it is. + (goto-char pos) + (rename-buffer buffer-name) + (org-narrow-to-subtree)))) + +(advice-add 'org-tree-to-indirect-buffer :override 'my-org-tree-to-indirect-buffer) +#+END_SRC + + +**** my-org-retrieve-url-from-point → C-c o +#+begin_quote +I wanted a function that does not open an web URL within Org mode (via +=C-c C-o=) but rather copies its URL to the system clipboard for +non-Emacs apps to paste. + +Lucky me, I found the ready-to-use solution [[https://emacs.stackexchange.com/a/3990][on this page]] which I bind to previously unused =C-c o=: +#+end_quote +--Karl Voit + +#+BEGIN_SRC emacs-lisp +(defun my-org-retrieve-url-from-point () + (interactive) + (let* ((link-info (assoc :link (org-context))) + (text (when link-info + ;; org-context seems to return nil if the current element + ;; starts at buffer-start or ends at buffer-end + (buffer-substring-no-properties (or (cadr link-info) (point-min)) + (or (caddr link-info) (point-max)))))) + (if (not text) + (error "Not in org link") + (add-text-properties 0 (length text) '(yank-handler (my-yank-org-link)) text) + (kill-new text)))) +#+END_SRC + +#+BEGIN_SRC emacs-lisp +(global-set-key (kbd "C-c o") 'my-org-retrieve-url-from-point) +#+END_SRC +**** org-element cache verification +2022-01-16: This has a positive impact on the performance as long as +you would not need it for consistency warnings. Re-enable it if +something is fishy and you want the self-check functionality again. + +#+BEGIN_SRC emacs-lisp +(setq org-element--cache-self-verify nil) +#+END_SRC + +**** Theming +:PROPERTIES: +:ID: b663a9ef-f08e-436f-913d-98e4234cf2cd +:END: +#+begin_src emacs-lisp config.el +(setq org-fontify-todo-headline t) +(setq org-footnote-section nil) +(setq org-table-duration-hour-zero-padding nil) (setq org-superstar-headline-bullets-list '("⁖" "◉" "○" "✸" "✿")) +(setq org-use-property-inheritance '(category columns archive logging)) #+end_src +https://www.emacswiki.org/emacs/TruncateLines =M-x toggle-truncate-lines= +#+BEGIN_SRC emacs-lisp +(setq-default truncate-lines t) +(setq org-src-fontify-natively t) +(setq org-hide-leading-stars t) -Ensure that hitting ~M-~ splits the line it's on. This is useful when I'm typing something long, and then decide to turn a paragraph into a li +;;disabled;(setq org-agenda-dim-blocked-tasks t) +;;disabled 2020-07-07;; (setq org-agenda-dim-blocked-tasks 'invisible) +(setq org-agenda-dim-blocked-tasks nil);; show blocked tasks +#+END_SRC + +***** Set the width of inline images: +#+BEGIN_SRC emacs-lisp + (setq org-image-actual-width '(600)) +#+END_SRC + +***** org-modern #+begin_src emacs-lisp :tangle config.el -(setq org-M-RET-may-split-line '((default . t))) +(modify-all-frames-parameters + '((right-divider-width . 2) + (internal-border-width . 0))) +(dolist (face '(window-divider + window-divider-first-pixel + window-divider-last-pixel)) + (face-spec-reset-face face) + (set-face-foreground face (face-attribute 'default :background))) +(set-face-background 'fringe (face-attribute 'default :background)) + +(setq + ;; Edit settings + org-auto-align-tags nil + org-tags-column 0 + org-catch-invisible-edits 'show-and-error + org-insert-heading-respect-content t + + ;; Org styling, hide markup etc. + org-hide-emphasis-markers t + org-pretty-entities t + org-ellipsis "…" + + ;; Agenda styling + org-agenda-tags-column 0 + org-agenda-block-separator ?─ + org-agenda-time-grid + '((daily today require-timed) + (800 1000 1200 1400 1600 1800 2000) + " ┄┄┄┄┄ " "┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄") + org-agenda-current-time-string + "⌚ now ─────────────────────────────────────────────────") + +(global-org-modern-mode) + #+end_src -*** org-contacts +**** Dependencies #+begin_src emacs-lisp :tangle config.el -(setq org-contacts-files '("~/enc/org/people.org")) -#+end_src - +(setq-default org-enforce-todo-dependencies t) +(setq org-enforce-todo-checkbox-dependencies t) +#+END_SRC +*** Hooks +**** append and update time-stamps for =Time-stamp: <>= in headers: +#+begin_src emacs-lisp :tangle config.el +(add-hook 'write-file-hooks 'time-stamp) +(add-hook 'org-mode-hook + (lambda () + ;; yasnippet + ;;disabled; (make-variable-buffer-local 'yas/trigger-key) + ;;disabled; (org-set-local 'yas/trigger-key [tab]) + ;;disabled; (define-key yas/keymap [tab] 'yas/next-field-group) + ;; flyspell mode for spell checking everywhere + ;;disabled; (flyspell-mode 1) + ;; auto-fill mode on + (auto-fill-mode 1))) + #+end_src *** Keybinds #+begin_src emacs-lisp :tangle config.el @@ -84,54 +326,21 @@ Ensure that hitting ~M-~ splits the line it's on. This is useful when I' (global-set-key "\C-ch" 'counsel-org-link) (global-set-key "\C-cne" 'elgantt-open) (global-set-key "\C-cnn" 'org-capture) - #+end_src -*** Timestamp keybinds +**** Timestamp keybinds Inserts timestamps in the proper format. ~'(16)~ stands for two universal arguments, keeping the command from prompting for the time. Two keybinds here, which insert an active or inactive timestamp. #+begin_src emacs-lisp :tangle config.el (global-set-key "\C-cia" '(lambda ()(interactive) - (org-timestamp '(16)))) + (org-time-stamp '(16)))) (global-set-key "\C-cii" '(lambda () (interactive) - (org-timestamp-inactive '(16)))) + (org-time-stamp-inactive '(16)))) #+end_src -*** Automated timestamps in headings -I need this because hitting the above is tedious, as I keep my journals, expenses and therapy notes in org-roam. - -For the files whose paths match the strings in the function, it will advise the org-insert-heading function to insert an inactive timestamp into the new heading. - -This turns making new entries from ~C- C-i i~ into just ~C-~. Much easier, and I don't have to think about this any more. - -#+begin_src emacs-lisp :tangle config.el -(add-hook 'org-insert-heading-hook - (lambda () - (if - (or - (string-match "journal" buffer-file-name) - (string-match "money" buffer-file-name) - (string-match "therapy" buffer-file-name)) - ((lambda () - (interactive) - (org-timestamp-inactive '(16)))) - (setq 'org-insert-heading-hook nil) - ))) - -#+end_src - - -*** Theming. - -#+begin_src emacs-lisp config.el -(setq org-fontify-todo-headline t) -(setq org-footnote-section nil) -(setq org-table-duration-hour-zero-padding nil) - -#+end_src - *** Todo keywords #+begin_src emacs-lisp :tangle config.el -(setq org-todo-keywords +(after! org + (setq org-todo-keywords '((sequence "INBOX(i)" "TASK(t)" ; A task that needs doing & is ready to do @@ -149,33 +358,69 @@ This turns making new entries from ~C- C-i i~ into just ~C-~. Mu "YES(y)" ; take action "NO(n)")) ; don't take action org-todo-keyword-faces - '(("[-]" . +org-todo-active) - ("STRT" . +org-todo-active) - ("[?]" . +org-todo-onhold) - ("WAIT" . +org-todo-onhold) - ("HOLD" . +org-todo-onhold) - ("PROJ" . +org-todo-project) - ("NO" . +org-todo-cancel) - ("KILL" . +org-todo-cancel))) - -(setq hl-todo-keyword-faces - '(("HOLD" . "#d0bf8f") - ("TODO" . "#cc9393") - ("NEXT" . "#dca3a3") - ("THEM" . "#dc8cc3") - ("PROG" . "#7cb8bb") - ("OKAY" . "#7cb8bb") - ("DONT" . "#5f7f5f") - ("FAIL" . "#8c5353") - ("DONE" . "#afd8af") - ("NOTE" . "#d0bf8f") - ("KLUDGE" . "#d0bf8f") - ("HACK" . "#d0bf8f") - ("TEMP" . "#d0bf8f") - ("FIXME" . "#cc9393") - ("XXXX*" . "#cc9393"))) + '( + ("INBOX" :foreground "cyan" :weight bold) + ("TASK" :foreground "purple" :weight bold) + ("PROJ" :foreground "violet" :weight bold) + ("LOOP" :foreground "magenta" :weight bold) + ("WAIT" :foreground "yellow" :weight bold) + ("HOLD" :foreground "orange" :weight bold) + ("DONE" :foreground "green" :weight bold) + ("KILL" :foreground "grey" :weight bold)))) #+end_src +#+RESULTS: +| INBOX | :foreground | cyan | :weight | bold | +| TASK | :foreground | purple | :weight | bold | +| PROJ | :foreground | violet | :weight | bold | +| LOOP | :foreground | magenta | :weight | bold | +| WAIT | :foreground | yellow | :weight | bold | +| HOLD | :foreground | orange | :weight | bold | +| DONE | :foreground | green | :weight | bold | +| KILL | :foreground | grey | :weight | bold | + +Change font for DONE tasks +- https://lists.gnu.org/archive/html/emacs-orgmode/2007-03/msg00179.html +#+BEGIN_SRC emacs-lisp :tangle no +(setq org-fontify-done-headline t) +(custom-set-faces + '(org-done ((t (:foreground "PaleGreen" + :weight normal + :strike-through t)))) + '(org-headline-done + ((((class color) (min-colors 16) (background dark)) + (:foreground "LightSalmon" :strike-through t))))) +#+END_SRC + +*** Automated timestamps in headings +I need this because hitting the above is tedious. + +For the files whose paths match the strings in the function, it will advise the org-insert-heading function to insert an inactive timestamp into the new heading. + +This turns making new entries from ~C- C-i i~ into just ~C-~. Much easier, and I don't have to think about this any more. + +#+begin_src emacs-lisp :tangle config.el +(add-hook 'org-insert-heading-hook + (lambda () + (if + (or + (string-match "journal.org" buffer-file-name) + (string-match "money" buffer-file-name) + (string-match "therapy.org" buffer-file-name)) + ((lambda () + (interactive) + (org-time-stamp-inactive '(16)) + (newline))) + (setq org-insert-heading-hook nil) + ))) + +#+end_src + +#+RESULTS: +| lambda | nil | (if (or (string-match journal buffer-file-name) (string-match money buffer-file-name) (string-match therapy buffer-file-name)) ((lambda nil (interactive) (org-timestamp-inactive '(16)) (newline))) (setq 'org-insert-heading-hook nil)) | +| lambda | nil | (if (or (string-match journal buffer-file-name) (string-match money buffer-file-name) (string-match therapy buffer-file-name)) (progn (org-timestamp-inactive '(16)) (newline)) (progn (signal 'wrong-type-argument (list 'symbolp ''org-insert-heading-hook)))) | + + *** Capture templates #+begin_src emacs-lisp :tangle config.el @@ -196,7 +441,365 @@ This turns making new entries from ~C- C-i i~ into just ~C-~. Mu :BIRTHDAY: :END:"))) #+end_src -*** Org-wild-notifier + +*** preserving all heading levels when archiving + +Karl Voit: + +#+begin_quote +Preserve the hierarchy when archiving: [[https://fuco1.github.io/2017-04-20-Archive-subtrees-under-the-same-hierarchy-as-original-in-the-archive-files.html][blog article]], [[https://gist.github.com/Fuco1/e86fb5e0a5bb71ceafccedb5ca22fcfb][source code (GitHub gist)]] +#+end_quote + +#+BEGIN_SRC emacs-lisp +(setq org-archive-default-command #'org-archive-subtree-hierarchically) + +(defun org-archive-subtree-hierarchically (&optional prefix) + (interactive "P") + (let* ((fix-archive-p (and (not prefix) + (not (use-region-p)))) + (afile (car (org-archive--compute-location + (or (org-entry-get nil "ARCHIVE" 'inherit) org-archive-location)))) + (buffer (or (find-buffer-visiting afile) (find-file-noselect afile)))) + (org-archive-subtree prefix) + (when fix-archive-p + (with-current-buffer buffer + (goto-char (point-max)) + (while (org-up-heading-safe)) + (let* ((olpath (org-entry-get (point) "ARCHIVE_OLPATH")) + (path (and olpath (split-string olpath "/"))) + (level 1) + tree-text) + (when olpath + (org-mark-subtree) + (setq tree-text (buffer-substring (region-beginning) (region-end))) + (let (this-command (inhibit-message t)) (org-cut-subtree)) ; we don’t want to see "Cut subtree" messages + (goto-char (point-min)) + (save-restriction + (widen) + (-each path + (lambda (heading) + (if (re-search-forward + (rx-to-string + `(: bol (repeat ,level "*") (1+ " ") ,heading)) nil t) + (org-narrow-to-subtree) + (goto-char (point-max)) + (unless (looking-at "^") + (insert "\n")) + (insert (make-string level ?*) + " " + heading + "\n")) + (cl-incf level))) + (widen) + (org-end-of-subtree t t) + (org-paste-subtree level tree-text)))))))) +#+END_SRC +*** my-dired-insert-lfile-link-list-to-other-org-window() + +#+begin_quote +| 2022-06-20 | I had this idea and implemented it | + +Development task: id:2022-06-20-implement-add-lfile-links-to-buffer-with-marked-dired-files + +[[https://emacs.stackexchange.com/questions/60359/is-there-a-quicker-way-to-create-links-to-attachments][This stackexchange snippet]] had the almost exactly perfect code which I adapted. + +The idea of the process is: + +1. I have an Org-mode buffer and a dired buffer side-by-side (which is my usual setup). +2. I place the cursor in the Org-mode buffer so that I may add a list. +3. I switch to the dired buffer and mark one or more files. +4. I invoke this function. + +This results in a list that gets added to the Org-mode buffer similar to: + +: - [[lfile:This is an example.odt][This is an example.odt]] +: - [[lfile:2022-06-20 an image.png][2022-06-20 an image.png]] +#+end_quote + + +#+begin_src emacs-lisp :results none + (defun my-dired-insert-lfile-link-list-to-other-org-window (files) + ;; adapted by Karl Voit from https://emacs.stackexchange.com/a/60369 + (interactive + (list (dired-get-marked-files))) + (unless (eq major-mode 'dired-mode) + (user-error "This command must be triggered in a dired buffer")) + (let ((dired-win (selected-window)) + (orgmode-win + (get-window-with-predicate + (lambda (window) + (with-current-buffer (window-buffer window) + (eq major-mode 'org-mode)))))) + (unless orgmode-win + (user-error + "Can't attach to subtree. No window displaying an Org buffer")) + (select-window orgmode-win) + (dolist (file files) + (let* ((fname (file-name-nondirectory file)) + (link (format "lfile:%s" fname)) + (desc fname)) + ;;(push (list link desc) org-stored-links) ;; original idea was to insert to this buffer in order to paste via C-c C-l + (insert (format "%s" (concat "- [[" link "][" desc "]]\n"))) + )) + (select-window dired-win))) +#+end_src + + +*** link colors +#+begin_quote +| 2021-01-11 | moved commands to =my-set-linkcolors= and defined 3 categories of colors | + +- I got the idea from: https://www.reddit.com/r/emacs/comments/hywxef/visually_differentiate_between_links_to_files_and/ +- possible values for faces: https://kitchingroup.cheme.cmu.edu/blog/2016/11/04/New-link-features-in-org-9/ + - and =add-face-text-property=: https://www.gnu.org/software/emacs/manual/html_node/elisp/Faces.html#Faces +- Emacs colors: http://www.raebear.net/computers/emacs-colors/ +- If you are interested in taking this any further: https://github.com/stardiviner/org-link-beautify +#+end_quote + + +#+BEGIN_SRC emacs-lisp +(setq my-linkcolor-org "wheat3") +(setq my-linkcolor-file "MediumSeaGreen") +(setq my-linkcolor-web "DeepSkyBlue") + +(defun my-set-linkcolors () + "Defines the colors of various link colors" + (interactive) + + ;; Org links -------------------------------------------------------------------------- + + (org-link-set-parameters "id" :face `(:foreground ,my-linkcolor-org :underline t)) + (org-link-set-parameters "contact" :face `(:foreground ,my-linkcolor-org :underline t)) + + ;; File links -------------------------------------------------------------------------- + + (org-link-set-parameters "file" :face `(:foreground ,my-linkcolor-file :underline t)) + ;; defined elsewhere;; (org-link-set-parameters "tsfile" :face '`(:foreground "DarkSeaGreen" :underline t)) + (org-link-set-parameters "pdf" :face `(:foreground ,my-linkcolor-file :underline t)) + + (org-link-set-parameters "EPA" :face `(:foreground ,my-linkcolor-file :underline t)) + (org-link-set-parameters "EPAAFO" :face `(:foreground ,my-linkcolor-file :underline t)) + (org-link-set-parameters "JAFO" :face `(:foreground ,my-linkcolor-file :underline t)) + (org-link-set-parameters "DAKEPA" :face `(:foreground ,my-linkcolor-file :underline t)) + (org-link-set-parameters "BMTSK" :face `(:foreground ,my-linkcolor-file :underline t)) + (org-link-set-parameters "ISO" :face `(:foreground ,my-linkcolor-file :underline t)) + + (org-link-set-parameters "gemSpec_DS_Anbieter" + :face `(:foreground ,my-linkcolor-file :underline t)) + (org-link-set-parameters "gemSpec_Net" + :face `(:foreground ,my-linkcolor-file :underline t)) + (org-link-set-parameters "gemSpec_PKI" + :face `(:foreground ,my-linkcolor-file :underline t)) + (org-link-set-parameters "gemSpec_IDP_Dienst" + :face `(:foreground ,my-linkcolor-file :underline t)) + + (org-link-set-parameters "messageid" + :face `(:foreground ,my-linkcolor-file :underline t)) + + ;; Web links -------------------------------------------------------------------------- + + (org-link-set-parameters "http" :face `(:foreground ,my-linkcolor-web :underline t)) + (org-link-set-parameters "https" :face `(:foreground ,my-linkcolor-web :underline t)) + +) + +(defun my-set-linkcolors () + "Defines the colors of various link colors" + (interactive) + + ;; Org links -------------------------------------------------------------------------- + + (org-link-set-parameters "id" :face '(:foreground "wheat3" :underline t)) + (org-link-set-parameters "contact" :face '(:foreground "wheat3" :underline t)) + + ;; File links -------------------------------------------------------------------------- + + (org-link-set-parameters "file" :face '(:foreground "MediumSeaGreen" :underline t)) + ;; defined elsewhere;; (org-link-set-parameters "tsfile" :face ''(:foreground "DarkSeaGreen" :underline t)) + (org-link-set-parameters "pdf" :face '(:foreground "MediumSeaGreen" :underline t)) + + (org-link-set-parameters "EPA" :face '(:foreground "MediumSeaGreen" :underline t)) + (org-link-set-parameters "EPAAFO" :face '(:foreground "MediumSeaGreen" :underline t)) + (org-link-set-parameters "JAFO" :face '(:foreground "MediumSeaGreen" :underline t)) + (org-link-set-parameters "DAKEPA" :face '(:foreground "MediumSeaGreen" :underline t)) + (org-link-set-parameters "BMTSK" :face '(:foreground "MediumSeaGreen" :underline t)) + + (org-link-set-parameters "gemSpec_DS_Anbieter" + :face '(:foreground "MediumSeaGreen" :underline t)) + (org-link-set-parameters "gemSpec_Net" + :face '(:foreground "MediumSeaGreen" :underline t)) + (org-link-set-parameters "gemSpec_PKI" + :face '(:foreground "MediumSeaGreen" :underline t)) + (org-link-set-parameters "gemSpec_IDP_Dienst" + :face '(:foreground "MediumSeaGreen" :underline t)) + + (org-link-set-parameters "messageid" + :face '(:foreground "MediumSeaGreen" :underline t)) + + ;; Web links -------------------------------------------------------------------------- + + (org-link-set-parameters "http" :face '(:foreground "DeepSkyBlue" :underline t)) + (org-link-set-parameters "https" :face '(:foreground "DeepSkyBlue" :underline t)) + +) + +(my-set-linkcolors) ;; set colors when loading +#+END_SRC + +- test links + - file: [[file:foo/bar.txt]] [[file:foo/bar.txt][description]] + - tsfile: [[tsfile:foo/bar.txt]] [[tsfile:foo/bar.txt][description]] + - lfile: [[lfile:foo/bar.txt]] [[tsfile:foo/bar.txt][description]] + - pdf: pdf:foo.pdf [[pdf:foo.pdf][description]] + + - http: http://Karl-Voit.at [[http://Karl-Voit.at][description]] + - https: https://Karl-Voit.at [[https://Karl-Voit.at][description]] + + - id: id:foo-bar [[id:foo-bar][description]] + - contact: [[contact:example]] [[contact:example][description]] + - message-id: [[messageid:foobar@example.com][Email link]] + + - EPA: [[EPA:1234]] [[EPA:1234][description]] + - EPAAFO: [[EPAAFO:1234]] [[EPAAFO:1234][description]] + - JAFO: [[JAFO:1234]] [[JAFO:1234][description]] + - DAKEPA: [[DAKEPA:1234]] [[DAKEPA:1234][description]] + - BMTSK: [[BMTSK:1234]] [[BMTSK:1234][description]] + +- as of [2021-01-11 Mon] (before unifying color concept): + - Org links had: snow3 + - File links: DarkSeaGreen, wheat2 + - Web links: DeepSkyBlue + + +** org-babel +#+begin_src emacs-lisp :tangle config.el +(add-hook 'org-babel-after-execute-hook 'org-display-inline-images) +#+end_src + +When some code generates an image file, display it in the results: + +2022-01-16: this has some performance impact because it affects all babel blocks of the current file + +#+BEGIN_SRC emacs-lisp :tangle no +(add-hook 'org-babel-after-execute-hook 'org-display-inline-images) +#+END_SRC + +#+BEGIN_SRC emacs-lisp +(add-hook 'org-babel-after-execute-hook + (lambda () + (unless (eq this-command 'org-babel-tangle) + (org-display-inline-images nil nil + ;; 2023-02-08: org-back...-or-point-min doesn't exist any more: (save-excursion (org-back-to-heading-or-point-min t)) + (save-excursion (org-back-to-heading t)) + (save-excursion (or (outline-next-heading) (point-max))))))) +#+END_SRC + + +** org-export +*** LaTeX +**** + +** org-super-links + +***** Quick related link function +#+begin_src emacs-lisp :tangle config.el +(defun org-super-links-quick-related () + (interactive) + (let ((org-super-links-link-prefix "\nrelated: ")) + (org-super-links-link))) + +(setq org-super-links-related-into-drawer t) +(setq org-super-links-related-drawer-default-name "RELATED" + org-super-links-link-prefix 'org-super-links-link-prefix-timestamp) + +(setq org-export-with-broken-links t) ;; avoiding error on export + +#+end_src + +***** Keybinds +:PROPERTIES: +:ID: 86ac73be-4cf1-4262-8aa8-e03c519b5b6e +:END: +Replace org-store-link and org-insert-link with org-super-links alternatives. +#+begin_src emacs-lisp :tangle config.el +(global-unset-key (kbd "C-c l")) +(global-set-key (kbd "C-c l l") 'org-super-links-link) +(global-set-key (kbd "C-c l s") 'org-super-links-store-link) +(global-set-key (kbd "C-c l i") 'org-super-links-insert-drawer-link) +(global-set-key (kbd "C-c l r") 'org-super-links-quick-related) +(global-set-key (kbd "C-c l d") 'org-super-links-delete-link) +#+end_src + +#+RESULTS: +: org-super-links-delete-link + +** org-super-agenda +#+begin_src emacs-lisp :tangle config.el +(org-super-agenda-mode) + (setq super-agenda-groups + '(;; Each group has an implicit boolean OR operator between its selectors. + (:name "Today" ; Optionally specify section name + :time-grid t ; Items that appear on the time grid + ) + (:name "DEADLINES" :deadline t :order 1) + (:name "Focus | [A]" :tag "Focus" :priority "A" :order 2 :face (:append t :weight bold)) + ;; (:name "Important" :priority "A" :order 4) + ;; (:name "Habits" :habit t :order 3) + ;; (:name "Shopping" :tag "Besorgung" :order 8) + ;; Boolean AND group matches items that match all subgroups + ;; :and (:tag "shopping" :tag "@town") + ;; Multiple args given in list with implicit OR + ;; :tag ("food" "dinner")) + ;; :habit t + ;; :tag "personal") + (:name "Started" :and (:todo "TASK" :not (:tag "someday") :not (:priority "C") :not (:priority "B") ) :order 10) + ;;(:name "Space-related (non-moon-or-planet-related)" + ;; ;; Regexps match case-insensitively on the entire entry + ;; :and (:regexp ("space" "NASA") + ;; ;; Boolean NOT also has implicit OR between selectors + ;; :not (:regexp "moon" :tag "planet"))) + ;;(:name "BWG" :tag "@BWG" :order 16) + ;; (:name "read" :tag "2read" :order 22) + ;; Groups supply their own section names when none are given + (:name "Someday" :and ( :todo ("WAIT" "HOLD" "INBOX") :tag "someday" :not (:priority "C") :not (:priority "B")) + ;; Show this group at the end of the agenda (since it has the + ;; highest number). If you specified this group last, items + ;; with these todo keywords that e.g. have priority A would be + ;; displayed in that group instead, because items are grouped + ;; out in the order the groups are listed. + :order 25) + + ;; "other items": an auto-group with order 99 ---------------------------- + + (:name "Prio ≤ B" :priority<= "B" + ;; Show this section after "Today" and "Important", because + ;; their order is unspecified, defaulting to 0. Sections + ;; are displayed lowest-number-first. + :order 105) + (:name "reward" + :tag ("reward" "lp") + :order 110 + ) + (:name "Waiting…" :todo "WAIT" :order 118) ; Set order of this section + + ;; After the last group, the agenda will display items that didn't + ;; match any of these groups, with the default order position of 99 + )) + + (defun my-super-agenda() + "generates my super-agenda" + (interactive) + (org-super-agenda-mode) + (let + ((org-super-agenda-groups super-agenda-groups)) + (org-agenda nil "a") + ) + ) + #+end_src + + + +** Org-wild-notifier This lets me get desktop notifications for TODO items. #+begin_src emacs-lisp :tangle config.el @@ -207,7 +810,52 @@ This lets me get desktop notifications for TODO items. (setq org-wild-notifier-keyword-whitelist '("TODO")) #+end_src -*** Org-refile +** org-id +*** my-id-get-or-generate +Straight from Karl Voit's config. + +#+BEGIN_SRC emacs-lisp +(defun my-id-get-or-generate() +"Returns the ID property if set or generates and returns a new one if not set. + The generated ID is stripped off potential progress indicator cookies and + sanitized to get a slug. Furthermore, it is prepended with an ISO date-stamp + if none was found before." + (interactive) + (when (not (org-id-get)) + (progn + (let* ( + (my-heading-text (nth 4 (org-heading-components)));; retrieve heading string + (my-heading-text (replace-regexp-in-string "\\(\\[[0-9]+%\\]\\)" "" my-heading-text));; remove progress indicators like "[25%]" + (my-heading-text (replace-regexp-in-string "\\(\\[[0-9]+/[0-9]+\\]\\)" "" my-heading-text));; remove progress indicators like "[2/7]" + (my-heading-text (replace-regexp-in-string "\\(\\[#[ABC]\\]\\)" "" my-heading-text));; remove priority indicators like "[#A]" + (my-heading-text (replace-regexp-in-string "\\[\\[\\(.+?\\)\\]\\[" "" my-heading-text t));; removes links, keeps their description and ending brackets +;; (my-heading-text (replace-regexp-in-string "[<\\[][12][0-9]\\{3\\}-[0-9]\\{2\\}-[0-9]\\{2\\}\\( .*?\\)[>\\]]" "" my-heading-text t));; removes day of week and time from date- and time-stamps (doesn't work somehow) + (my-heading-text (replace-regexp-in-string "<[12][0-9]\\{3\\}-[0-9]\\{2\\}-[0-9]\\{2\\}\\( .*?\\)>" "" my-heading-text t));; removes day of week and time from active date- and time-stamps + (my-heading-text (replace-regexp-in-string "\\[[12][0-9]\\{3\\}-[0-9]\\{2\\}-[0-9]\\{2\\}\\( .*?\\)\\]" "" my-heading-text t));; removes day of week and time from inactive date- and time-stamps + (new-id (my-generate-sanitized-alnum-dash-string my-heading-text));; get slug from heading text + (my-created-property (assoc "CREATED" (org-entry-properties))) ;; nil or content of CREATED time-stamp + ) + (when (not (string-match "[12][0-9][0-9][0-9]-[01][0-9]-[0123][0-9]-.+" new-id)) + ;; only if no ISO date-stamp is found at the beginning of the new id: + (if my-created-property (progn + ;; prefer date-stamp of CREATED property (if found): + (setq my-created-datestamp (substring (org-entry-get nil "CREATED" nil) 1 11)) ;; returns "2021-12-16" or nil (if no CREATED property) + (setq new-id (concat my-created-datestamp "-" new-id)) + ) + ;; use today's date-stamp if no CREATED property is found: + (setq new-id (concat (format-time-string "%Y-%m-%d-") new-id)))) + (org-set-property "ID" new-id) + ) + ) + ) + (kill-new (concat "id:" (org-id-get)));; put ID in kill-ring + (org-id-get);; retrieve the current ID in any case as return value +) + + +#+END_SRC + +** Org-refile #+begin_src emacs-lisp :tangle config.el (setq org-refile-targets '((nil :maxlevel . 9) @@ -217,6 +865,10 @@ This lets me get desktop notifications for TODO items. #+end_src (setq find-file-visit-truename t) +** org-contacts +#+begin_src emacs-lisp :tangle config.el +(setq org-contacts-files '("~/enc/org/people.org")) +#+end_src ** org-roam *** Keybinds @@ -241,46 +893,21 @@ This lets me get desktop notifications for TODO items. (setq org-roam-capture-templates '(("n" "default" plain "%?" - :if-new (file+head "%<%Y.%m.%d.%H\:%M>-${slug}.org" "#+title: ${title}\n") + :if-new (file+head "${slug}.org" "#+title: ${title}\n#+category: ${title}\n#+filetags: \n") + :empty-lines 1 :unnarrowed t) ("j" "journal" plain "%?" - :if-new (file+head "journal/journal-%<%Y.%m.%d.%H\:%M>-${slug}.org" "#+title: ${title}\n") + :if-new (file+head "journal/journal-${slug}.org" "#+title: ${title}\n#+category: 📔${title}\n#+filetags: 📔\n") :empty-lines 1 :unnarrowed t) ("t" "Therapy" plain - " -,* Sytuacja -,** Myśli -,** Emocje -,** Zachowania -,** Argumenty potwierdzające myśli -,** Argumenty podważające -,** Myśli alternatywne -,** Emocje alternatywne- -,** Zachowania alternatywne -" - :if-new (file+head "therapy/therapy-%<%Y.%m.%d.%H\:%M>-${slug}.org" "#+title: ${title}\n") + "#+title: ${title}\n" + :if-new (file+head "therapy/therapy-${slug}.org" "#+title: ${title}\n#+category: 📗 ${title}\n#+filetags: 📗\n") :empty-lines 1 :unnarrowed))) #+end_src -** org-roam-ui -#+begin_src emacs-lisp :tangle config.el -(use-package! websocket - :after org-roam) -(use-package! org-roam-ui - :after org-roam ;; or :after org -;; normally we'd recommend hooking orui after org-roam, but since org-roam does not have -;; a hookable mode anymore, you're advised to pick something yourself -;; if you don't care about startup time, use -;; :hook (after-init . org-roam-ui-mode) - :config - (setq org-roam-ui-sync-theme t - org-roam-ui-follow t - org-roam-ui-update-on-save t - org-roam-ui-open-on-start t)) -#+end_src ** org-elgantt #+begin_src emacs-lisp :tangle config.el @@ -314,6 +941,7 @@ This lets me get desktop notifications for TODO items. (define-key org-agenda-map "a" 'org-agenda) #+end_src + *** Settings #+begin_src emacs-lisp :tangle config.el @@ -329,13 +957,539 @@ This lets me get desktop notifications for TODO items. org-agenda-insert-diary-extract-time t org-log-into-drawer t org-clock-into-drawer t - org-agenda-log-mode-items '(closed clock state)) + org-agenda-log-mode-items '(closed clock state) + org-agenda-prefix-format "%l %i %c %s %t") + (setq org-agenda-compact-blocks t) + (setq org-agenda-use-tag-inheritance (quote (agenda)));; agenda performance + (setq org-agenda-span 1) + (add-hook 'org-agenda-mode-hook '(lambda () (hl-line-mode 1))) (setq org-agenda-custom-commands (quote (("x" "Phil's view" agenda "" - ((org-agenda-prefix-format " %i %b %-12:c %s %t ")))))) + ((org-agenda-prefix-format " %i %-12:c %s %t ")))))) #+end_src +**** From Karl Voit +Keep tasks with dates off the global todo lists: +#+BEGIN_SRC emacs-lisp :tangle config.el +(setq org-agenda-todo-ignore-with-date nil) +#+END_SRC + +Allow deadlines which are due soon to appear on the global todo lists: +#+BEGIN_SRC emacs-lisp :tangle config.el +(setq org-agenda-todo-ignore-deadlines (quote far)) +#+END_SRC + +Keep tasks scheduled in the future off the global todo lists +#+BEGIN_SRC emacs-lisp :tangle config.el +(setq org-agenda-todo-ignore-scheduled (quote future)) +#+END_SRC + +Remove completed deadline tasks from the agenda view +#+BEGIN_SRC emacs-lisp :tangle config.el +(setq org-agenda-skip-deadline-if-done t) +#+END_SRC + +Remove completed scheduled tasks from the agenda view +#+BEGIN_SRC emacs-lisp :tangle config.el +(setq org-agenda-skip-scheduled-if-done t) +#+END_SRC + +Remove completed items from search results +#+BEGIN_SRC emacs-lisp :tangle no +(setq org-agenda-skip-timestamp-if-done t) +#+END_SRC + +Include agenda archive files when searching for things +#+BEGIN_SRC emacs-lisp :tangle config.el +(setq org-agenda-text-search-extra-files (quote (agenda-archives))) +#+END_SRC + +show state changes in log-mode of agenda +#+BEGIN_SRC emacs-lisp :tangle config.el +(setq org-agenda-log-mode-items (quote (state))) +#+END_SRC + +http://orgmode.org/worg/org-faq.html +#+BEGIN_SRC emacs-lisp :tangle config.el +;(setq org-agenda-skip-additional-timestamps-same-entry t) +(setq org-agenda-skip-additional-timestamps-same-entry nil) +#+END_SRC + +do not search for time in heading when displaying a date-stamp +#+BEGIN_SRC emacs-lisp :tangle config.el +(setq org-agenda-search-headline-for-time nil) +#+END_SRC + +open agenda in same buffer, full size +#+BEGIN_SRC emacs-lisp :tangle config.el +(setq org-agenda-window-setup 'current-window) +#+END_SRC + +add diary entries in agenda view +http://orgmode.org/org.html#Weekly_002fdaily-agenda +#+BEGIN_SRC emacs-lisp :tangle config.el + (setq org-agenda-include-diary t) +#+END_SRC + +Show all future entries for repeating tasks +#+BEGIN_SRC emacs-lisp :tangle config.el + (setq org-agenda-repeating-timestamp-show-all t) +#+END_SRC + +Show all agenda dates - even if they are empty +#+BEGIN_SRC emacs-lisp :tangle config.el + (setq org-agenda-show-all-dates t) +#+END_SRC + +Sorting order for tasks on the agenda +#+BEGIN_SRC emacs-lisp :tangle config.el + (setq org-agenda-sorting-strategy + (quote ((agenda habit-down time-up user-defined-up priority-down category-keep) + (todo priority-down category-keep) + (tags priority-down category-keep) + (search category-keep)))) +#+END_SRC + +Start the weekly agenda today +#+BEGIN_SRC emacs-lisp :tangle config.el +(setq org-agenda-start-on-weekday nil) +#+END_SRC + +Non-nil means skip timestamp line if same entry shows because of deadline. +#+BEGIN_SRC emacs-lisp :tangle config.el + (setq org-agenda-skip-timestamp-if-deadline-is-shown t) +#+END_SRC + +Agenda sorting functions +#+BEGIN_SRC emacs-lisp :tangle config.el + (setq org-agenda-cmp-user-defined 'bh/agenda-sort) +#+END_SRC + +Enable display of the time grid so we can see the marker for the current time +#+BEGIN_SRC emacs-lisp :tangle no +(setq org-agenda-time-grid + ((daily today remove-match) + #("----------------" 0 16 + (org-heading t)) + (800 1000 1200 1400 1600 1800 2000))) +#+END_SRC + +Display tags farther right +#+BEGIN_SRC emacs-lisp :tangle config.el + ;;(setq org-agenda-tags-column -102) + (setq org-tags-column -101); for powerplantwin 23" TFT turned 90 + ; degrees; should *not* differ between + ; systems! Otherwise Org-files gets + ; re-formatted after switching + ; system + ;;(when (my-system-type-is-windows) + ;; ;;(setq org-agenda-tags-column -103);; for 23" TFT turned 90 degrees + ;; (setq org-agenda-tags-column -117);; for 24" TFT turned 90 degrees + ;; ) + ;;(when (my-system-is-sting) + ;; (setq org-agenda-tags-column -117);; -117 for 23" TFT sting, rotated 90° + ;; ) + (setq org-agenda-tags-column (- (- (window-total-width) 3))) ;; total width minus 3 +#+END_SRC + +Sticky agendas remain opened in the background so that you don't +need to regenerate them each time you hit the corresponding +keystroke. This is a big time saver. +#+BEGIN_SRC emacs-lisp :tangle no +(setq org-agenda-sticky t) +#+END_SRC + +Scrolling through agenda using C-p and C-n instead of PageUp/PageDown +also in agenda. Default setting is C-p/C-n for scrolling one line at a +time. + +#+BEGIN_SRC emacs-lisp :tangle config.el +(define-key org-agenda-mode-map (kbd "C-p") 'my-scroll-down-half) +(define-key org-agenda-mode-map (kbd "C-n") 'my-scroll-up-half) +#+END_SRC + +From [[https://www.reddit.com/r/orgmode/comments/cc5vz5/how_to_avoid_duplicates_in_orgsuperagenda/][reddit]] I got the settings that deadlines are not shown when +SCHEDULED is set: +#+BEGIN_SRC emacs-lisp :tangle config.el +(setq org-agenda-skip-scheduled-if-deadline-is-shown nil) +;;(setq org-agenda-skip-deadline-prewarning-if-scheduled t) +#+END_SRC + +From [[https://www.reddit.com/r/orgmode/comments/e4stk2/adding_a_separator_line_between_days_in_emacs/][reddit]]: Adding a separator line between days. +Disabled 2020-01-03 because I usually see one single day only. +#+BEGIN_SRC emacs-lisp :tangle no +(setq org-agenda-format-date (lambda (date) (concat "\n" + (make-string (window-width) 9472) + "\n" + (org-agenda-format-date-aligned date)))) +#+END_SRC + + +**** habits + +«Org has the ability to track the consistency of a special category of +TODOs, called “habits”.» + +- http://orgmode.org/manual/Tracking-your-habits.html +- http://orgmode.org/worg/org-tutorials/tracking-habits.html + +- global STYLE property values for completion +#+BEGIN_SRC emacs-lisp :tangle config.el + (setq org-global-properties (quote (("STYLE_ALL" . "habit")))) +#+END_SRC + +- position the habit graph on the agenda to the right of the default +#+BEGIN_SRC emacs-lisp :tangle config.el + (setq org-habit-graph-column 100) +#+END_SRC + +**** my-org-obfuscate-agenda-item +:PROPERTIES: +:CREATED: [2018-09-01 Sat 14:38] +:END: + +This was originally developed by [[https://github.com/alphapapa][alphapapa]] as =org-agenda-sharpie()= +and published on [[https://github.com/alphapapa/org-super-agenda/issues/43#issuecomment-403268926][GitHub]]. + +When invoked on an agenda item, you can enter some text and the agenda +item gets temporarily overwritten. You can use this to obfuscate or +"overwrite" agenda entries before making a screenshot for public use. + +#+BEGIN_SRC emacs-lisp :tangle config.el +(defun org-agenda-sharpie () + "Censor the text of items in the agenda." + (interactive) + (let (regexp old-heading new-heading properties) + ;; Save face properties of line in agenda to reapply to changed text + (setq properties (text-properties-at (point))) + + ;; Go to source buffer + (org-with-point-at (org-find-text-property-in-string 'org-marker + (buffer-substring (line-beginning-position) + (line-end-position))) + ;; Save old heading text and ask for new text + (line-beginning-position) + (unless (org-at-heading-p) + ;; Not sure if necessary + (org-back-to-heading)) + (setq old-heading (when (looking-at org-complex-heading-regexp) + (match-string 4)))) + (unless old-heading + (error "Can't find heading. How can this be?")) + ;; Back to agenda buffer + (setq new-heading (read-from-minibuffer "Overwrite visible heading with: ")) + (add-text-properties 0 (length new-heading) properties new-heading) + ;; Replace agenda text + (save-excursion + (let ((inhibit-read-only t)) + (goto-char (line-beginning-position)) + (when (search-forward old-heading (line-end-position)) + (replace-match new-heading 'fixedcase 'literal)))))) +#+END_SRC + +*** Exports +Export subtree (by default) instead of whole buffer: +http://orgmode.org/manual/The-Export-Dispatcher.html + +#+BEGIN_SRC emacs-lisp :tangle config.el +(setq org-export-initial-scope 'subtree) +#+END_SRC + +#+RESULTS: +: subtree + +With a densly interconnected Org knowledge-base (e.g., see +=org-super-links=) and a "few but large Org mode files" in combination +with "I'm using export methods on sub-heading levels mostly", you end +up with errors that are caused by links that link stuff which is +outside of the sub-heading hierarchy which should be currently +exported. + +Therefore, you'll need this setting for preventing those errors. +Please be aware that you won't get notified when links that should be +part of the export result get broken because of a typo or similar. + +#+BEGIN_SRC emacs-lisp :tangle config.el +(setq org-export-with-broken-links t) +#+END_SRC +**** LaTeX classes + +http://orgmode.org/org.html#Header-and-sectioning + +BEGIN of LaTeX class definitions +#+BEGIN_SRC emacs-lisp :tangle config.el +(with-eval-after-load 'ox-latex + ;;(message (concat "################################################\norg-latex-classes = [" org-latex-classes "]")) +#+END_SRC + +Customized «scrartcl» +#+BEGIN_SRC emacs-lisp :tangle config.el + (add-to-list 'org-latex-classes + '("scrartcl" + "\\documentclass\[a4paper,parskip=half\]\{scrartcl\}" + ("\\section\{%s\}" . "\\section*\{%s\}") + ("\\subsection\{%s\}" . "\\subsection*\{%s\}") + ("\\subsubsection\{%s\}" . "\\subsubsection*\{%s\}"))) +#+END_SRC + +«scrartclsmall» +- 2014-10-16: does NOT work yet. Most probably because savetrees does not work well with inputenc +#+BEGIN_SRC emacs-lisp + (add-to-list 'org-latex-classes + '("scrartclsmall" + "\\documentclass\[a4paper,parskip=half\]\{scrartcl\}\\usepackage\{savetrees\}" + ("\\section\{%s\}" . "\\section*\{%s\}") + ("\\subsection\{%s\}" . "\\subsection*\{%s\}") + ("\\subsubsection\{%s\}" . "\\subsubsection*\{%s\}"))) +#+END_SRC + +«detego» +- 2017-09-13: +#+BEGIN_SRC emacs-lisp :tangle config.el + (add-to-list 'org-latex-classes + '("detego" + "\\documentclass\[a4paper,parskip=half,11pt,headinclude=false,footinclude=false\]\{scrartcl\} + \\usepackage\[ngerman,american\]\{babel\}\\usepackage\{eurosym\}\\usepackage\{xspace\}\\usepackage\[usenames,dvipsnames\]\{xcolor\} + \\usepackage\[protrusion=true,factor=900\]\{microtype\}\\usepackage\{enumitem\} + \\definecolor\{DispositionColor\}\{RGB\}\{0,54,90\} + \\usepackage\{helvet\} + \\renewcommand\{\\familydefault\}\{\\sfdefault\} + \\DeclareRobustCommand\{\\myacro\}\[1\]\{\\textsc\{\\lowercase\{#1\}\}\} %% abbrevations using small caps + \\usepackage{scrlayer-scrpage} \\rehead{\\includegraphics\[height=1cm\]{{c:/Users/karl.voit/.emacs.d/bin/images/Detego-Logo-209x41.png}}} \\pagestyle{scrheadings} %% Logo in header + \\newenvironment{NOTES}{}{} %% declares org-reveal environment in PDF output + \\usepackage[space]{grffile} %% enable spaces in filenames of includegraphics + %% colorful headings: + %\\setheadsepline\{.4pt\}\[\\color\{DispositionColor\}\] + \\renewcommand\{\\headfont\}\{\\normalfont\\sffamily\\color\{DispositionColor\}\} + \\renewcommand\{\\pnumfont\}\{\\normalfont\\sffamily\\color\{DispositionColor\}\} + \\addtokomafont\{disposition\}\{\\color\{DispositionColor\}\} + \\addtokomafont\{caption\}\{\\color\{DispositionColor\}\\footnotesize\} + \\addtokomafont\{captionlabel\}\{\\color\{DispositionColor\}\} + + \\usepackage\{enumitem\} + \\setlist\{noitemsep\} %% kills the space between items + + " + ("\\section\{%s\}" . "\\section*\{%s\}") + ("\\subsection\{%s\}" . "\\subsection*\{%s\}") + ("\\subsubsection\{%s\}" . "\\subsubsection*\{%s\}"))) +#+END_SRC + +«rise» +- 2019-12-16 +#+BEGIN_SRC emacs-lisp :tangle config.el + (add-to-list 'org-latex-classes + '("rise" + "\\documentclass\[a4paper,parskip=half,11pt,headinclude=false,footinclude=false\]\{scrartcl\} + \\usepackage\[ngerman,american\]\{babel\}\\usepackage\{eurosym\}\\usepackage\{xspace\}\\usepackage\[usenames,dvipsnames\]\{xcolor\} + \\usepackage\[protrusion=true,factor=900\]\{microtype\}\\usepackage\{enumitem\} + \\definecolor\{DispositionColor\}\{RGB\}\{0,54,90\} + \\usepackage\{helvet\} + \\renewcommand\{\\familydefault\}\{\\sfdefault\} + \\DeclareRobustCommand\{\\myacro\}\[1\]\{\\textsc\{\\lowercase\{#1\}\}\} %% abbrevations using small caps + \\usepackage{scrlayer-scrpage} \\rehead{\\includegraphics\[height=1cm\]{{c:/Users/karl.voit/.emacs.d/bin/images/RISE_logo_202x500.jpeg}}} \\pagestyle{scrheadings} %% Logo in header + \\newenvironment{NOTES}{}{} %% declares org-reveal environment in PDF output + \\usepackage[space]{grffile} %% enable spaces in filenames of includegraphics + %% colorful headings: + %\\setheadsepline\{.4pt\}\[\\color\{DispositionColor\}\] + \\renewcommand\{\\headfont\}\{\\normalfont\\sffamily\\color\{DispositionColor\}\} + \\renewcommand\{\\pnumfont\}\{\\normalfont\\sffamily\\color\{DispositionColor\}\} + \\addtokomafont\{disposition\}\{\\color\{DispositionColor\}\} + \\addtokomafont\{caption\}\{\\color\{DispositionColor\}\\footnotesize\} + \\addtokomafont\{captionlabel\}\{\\color\{DispositionColor\}\} + + \\usepackage\{enumitem\} + \\setlist\{noitemsep\} %% kills the space between items + + " + ("\\section\{%s\}" . "\\section*\{%s\}") + ("\\subsection\{%s\}" . "\\subsection*\{%s\}") + ("\\subsubsection\{%s\}" . "\\subsubsection*\{%s\}"))) +#+END_SRC + +«lyrics» +- 2017-03-23: 2-column layout sans-serif for lyrics +#+BEGIN_SRC emacs-lisp :tangle config.el + (add-to-list 'org-latex-classes + '("lyrics" + "\\documentclass\[a4paper,parskip=half\]\{scrartcl\} + \\renewcommand*\\sfdefault\{lcmss\} \\renewcommand*\\familydefault\{\\sfdefault\}" + ("\\section\{%s\}" . "\\section*\{%s\}") + ("\\subsection\{%s\}" . "\\subsection*\{%s\}") + ("\\subsubsection\{%s\}" . "\\subsubsection*\{%s\}"))) +#+END_SRC + +«lyrics2» 2 column version of «lyrics» +#+BEGIN_SRC emacs-lisp :tangle config.el + (add-to-list 'org-latex-classes + '("lyrics2" + "\\documentclass\[a4paper,parskip=half,twocolumn\]\{scrartcl\} + \\renewcommand*\\sfdefault\{lcmss\} \\renewcommand*\\familydefault\{\\sfdefault\}" + ("\\section\{%s\}" . "\\section*\{%s\}") + ("\\subsection\{%s\}" . "\\subsection*\{%s\}") + ("\\subsubsection\{%s\}" . "\\subsubsection*\{%s\}"))) + +#+END_SRC + +Adding TUGRAZ letter export class format +- compare: http://orgmode.org/worg/org-tutorials/org-latex-export.html +#+BEGIN_SRC emacs-lisp :tangle no +(add-to-list 'org-export-latex-classes + '("TUGRAZletter" + "\\documentclass{scrlttr2} + \\usepackage{tugrazletter} + [NO-DEFAULT-PACKAGES] + [EXTRA]" + ("\\section{%s}" . "\\section*{%s}"))) +#+END_SRC + +#+begin_src emacs-lisp :tangle config.el +(add-to-list 'org-latex-classes + '("memoirbook" + "\\documentclass[a5paper,12pt]{memoir}" + ;; "\\semiisopage[8]" + ;; "\\hypersetup{colorlinks=true,linkcolor={Blue},urlcolor={Blue}}" ;; genera un problema al exportar + ("\\chapter{%s}" . "\\chapter*{%s}") + ("\\section{%s}" . "\\section*{%s}") + ("\\subsection{%s}" . "\\subsection*{%s}") + ("\\subsubsection{%s}" . "\\subsubsection*{%s}") + ("\\paragraph{%s}" . "\\paragraph*{%s}") + ("\\subparagraph{%s}" . "\\subparagraph*{%s}"))) + +'(org-export-latex-default-class "memoir") + +#+end_src + + +END of LaTeX class definitions +#+BEGIN_SRC emacs-lisp :tangle config.el + );; with-eval-after-load +#+END_SRC + +**** ox-asciidoc - Export to AsciiDoc + +https://github.com/yashi/org-asciidoc - «An Org Mode Exporter Backend For AsciiDoc» + +#+BEGIN_SRC emacs-lisp :tangle config.el + (use-package ox-asciidoc + ;;:ensure t ;; install package if not found OR: (setq use-package-always-ensure t) + :defer 110 + ) +#+END_SRC + +**** Org-Reveal - generate nice presentations out of Org-mode + +https://github.com/yjwen/org-reveal +#+BEGIN_QUOTE +- =Reveal.js= is a tool for creating good-looking HTML presentations, authored by Hakim El Hattab. +- For an example of a reveal.js presentation, see [[http://lab.hakim.se/reveal-js/#/][here]]. +- =Org-Reveal= exports your Org documents to reveal.js presentations. +- With Org-reveal, you can create beautiful presentations with 3D effects from simple but powerful Org contents. +#+END_QUOTE + +#+BEGIN_SRC emacs-lisp :tangle no +(use-package ox-reveal + :ensure t + ;;:if (my-system-type-is-windows) + :defer 110 + :config + + ;;(setq org-reveal-root "file:///d:/reveal.js") + (cond ((my-system-type-is-gnu) + (setq org-reveal-root "https://cdn.jsdelivr.net/npm/reveal.js") + (setq org-reveal-extra-css "file:///home/vk/.emacs.d/bin/reveal_theme_night_local.css")) + ((string-equal system-name "GRZN17009") + (setq org-reveal-root "file:///C:/Users/karl.voit/.emacs.d/bin/reveal.js/") + (setq org-reveal-extra-css "file:///C:/Users/karl.voit/.emacs.d/bin/reveal_theme_night_local.css")) + ((string-equal system-name "cosmo") + (setq org-reveal-root "file:///C:/Users/John/AppData/Roaming/.emacs.d/bin/reveal.js/") + (setq org-reveal-extra-css "file:///C:/Users/John/AppData/Roaming/.emacs.d/bin/reveal_theme_night_local.css")) + (t + (setq org-reveal-root "http://cdn.jsdelivr.net/reveal.js/3.0.0/")) + ) + + ;; my preferred defaults: + (setq org-reveal-hlevel 2) + (setq org-reveal-postamble "

Created by Karl.

") + (setq org-reveal-center nil) + (setq org-reveal-progress t) + (setq org-reveal-history nil) + (setq org-reveal-control t) + (setq org-reveal-keyboard t) + (setq org-reveal-overview nil) + (setq org-reveal-transition "default") + ;; - transitions: + ;; - default + ;; - cube + ;; - page + ;; - concave + ;; - zoom + ;; - linear + ;; - fade + ;; - none + (setq org-reveal-theme "night") + ;; - Styles: + ;; - black (default) + ;; - white + ;; - league + ;; - gray one + ;; - sky + ;; - nice bright one + ;; - beige + ;; - nice bright one + ;; - simple + ;; - bright + ;; - serif + ;; - old school + ;; - blood + ;; - cool! + ;; - *night* + ;; - very nice + ;; - moon + ;; - solarized +) +#+END_SRC + +#+RESULTS: +: t + + + +**** my-org-copy-region-as-markdown + +| 2022-05-03 | initial setup and disabled because of error | + +I've found this nugget on http://mbork.pl/2021-05-02_Org-mode_to_Markdown_via_the_clipboard. + +I often work with tools that accept Markdown as input syntax. When I +prefer Org-mode for authoring, I just have to mark the result in a +region, invoke this snippet and paste in the other tool. + +Please enable Markdown export as stated on https://lists.gnu.org/archive/html/emacs-orgmode/2022-05/msg00062.html + +: (require 'ox-md) + +#+BEGIN_SRC emacs-lisp :tangle config.el +(defun my-org-copy-region-as-markdown () + "Copy the region (in Org) to the system clipboard as Markdown." + (interactive) + (if (use-region-p) + (let* ((region + (buffer-substring-no-properties + (region-beginning) + (region-end))) + (markdown + (org-export-string-as region 'md t '(:with-toc nil)))) + (gui-set-selection 'CLIPBOARD markdown)))) +#+END_SRC + +Debugging: + +#+BEGIN_SRC emacs-lisp :tangle no +(setq region "/foo/ *bar* https://example.com baz") +(org-export-string-as region 'md t '(:with-toc nil)) +#+END_SRC ** yasnippets #+begin_src emacs-lisp :tangle config.el @@ -350,6 +1504,70 @@ This lets me get desktop notifications for TODO items. ("mp4" . "mpv"))) #+end_src +** mode-icons +#+begin_src emacs-lisp :tangle config.el + (mode-icons-mode) + (add-hook 'dired-mode-hook #'mode-icons--mode-disable) ;; with mode-icons, visiting a dir with dired takes up *lots* of CPU for =mode-icons-reset= (performance-issue) +#+end_src +** csv-mode +#+begin_src emacs-lisp :tangle config.el +(add-to-list 'auto-mode-alist '("\\.[Cc][Ss][Vv]\\'" . csv-mode)) +(autoload 'csv-mode "csv-mode" + "Major mode for editing comma-separated value files." t) +#+end_src +** whisper.el (S2T; speech to text) + +- https://github.com/natrys/whisper.el + +#+BEGIN_QUOTE +You will use these functions: + +- =whisper-run= : Toggle between recording from your microphone and transcribing +- =whisper-file= : Same as before but transcribes a local file on disk + +Invoking =whisper-run= with a prefix argument (C-u) has the same effect as =whisper-file= . + +Both of these functions will automatically compile whisper.cpp +dependency and download language model the first time they are run. +When recording is in progress, invoking them stops it and starts +transcribing. Otherwise if compilation, download (of model file) or +transcription job is in progress, calling them again cancels that. +#+END_QUOTE + +Use =whisper-run= once to start recording and a second time for start +the translation process which puts the text into the buffer. This +works *offline* (without cloud or network) and amazingly well for English. + +#+BEGIN_SRC emacs-lisp :results none +(use-package whisper + :load-path (lambda () (expand-file-name (concat my-user-emacs-directory "contrib/whisper.el/"))) +;; :bind ("C-H-r" . whisper-run) + :config + (setq whisper-install-directory (concat my-user-emacs-directory "bin/") + whisper-model "base" + whisper-language "de" + whisper-translate nil) + :defer 110 +) +#+END_SRC + + + + +** hledger-mode +#+begin_src emacs-lisp :tangle config.el +;; To open files with .journal extension in hledger-mode +(add-to-list 'auto-mode-alist '("\\.journal\\'" . hledger-mode)) + +;; Provide the path to you journal file. +;; The default location is too opinionated. +(setq hledger-jfile "~/enc/org/hledger/2023.journal") + +;;; Auto-completion for account names +;; For company-mode users, +(add-to-list 'company-backends 'hledger-company) +#+end_src + * custom.el Custom variables. Note that this file is generally set up automatically by Emacs, so I'm not exporting this block. I'm keeping the default warning commants in just for completion here. #+begin_src emacs-lisp :tangle no @@ -358,8 +1576,6 @@ Custom variables. Note that this file is generally set up automatically by Emacs ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. - '(org-safe-remote-resources - '("\\`https://bajsicki\\.com/org-html-themes/org/theme-readtheorg\\.setup\\'"))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. @@ -369,95 +1585,206 @@ Custom variables. Note that this file is generally set up automatically by Emacs #+end_src * init.el This is the state as of <2023-08-12 Sat>. I'm sure Doom Emacs will expand/ change/ add/ remove things over time, but this is what I use right now. -** input + #+begin_src emacs-lisp :tangle init.el +;;; init.el -*- lexical-binding: t; -*- + +;; This file controls what Doom modules are enabled and what order they load +;; in. Remember to run 'doom sync' after modifying it! + +;; NOTE Press 'SPC h d h' (or 'C-h d h' for non-vim users) to access Doom's +;; documentation. There you'll find a link to Doom's Module Index where all +;; of our modules are listed, including what flags they support. + +;; NOTE Move your cursor over a module's name (or its flags) and press 'K' (or +;; 'C-c c k' for non-vim users) to view its documentation. This works on +;; flags as well (those symbols that start with a plus). +;; +;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its +;; directory (for easy access to its source code). + (doom! :input + ;;bidi ; (tfel ot) thgir etirw uoy gnipleh + ;;chinese + ;;japanese + ;;layout ; auie,ctsrnm is the superior home row + + :completion + company ; the ultimate code completion backend + ;;helm ; the *other* search engine for love and life + ;;ido ; the other *other* search engine... + ;;ivy ; a search engine for love and life + vertico ; the search engine of the future + + :ui + ;;deft ; notational velocity for Emacs + doom ; what makes DOOM look the way it does + doom-dashboard ; a nifty splash screen for Emacs + doom-quit ; DOOM quit-message prompts when you quit Emacs + ;;(emoji +unicode) ; 🙂 + ;;hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW + ;;hydra + indent-guides ; highlighted indent columns + (ligatures +extra +iosevka) ; ligatures and symbols to make your code pretty again + ;;minimap ; show a map of the code on the side + modeline ; snazzy, Atom-inspired modeline, plus API + nav-flash ; blink cursor line after big motions + ;;neotree ; a project drawer, like NERDTree for vim + ophints ; highlight the region an operation acts on + (popup +defaults) ; tame sudden yet inevitable temporary windows + ;;tabs ; a tab bar for Emacs + treemacs ; a project drawer, like neotree but cooler + unicode ; extended unicode support for various languages + (vc-gutter +pretty) ; vcs diff in the fringe + vi-tilde-fringe ; fringe tildes to mark beyond EOB + ;;window-select ; visually switch windows + workspaces ; tab emulation, persistence & separate workspaces + ;;zen ; distraction-free coding or writing + + :editor + ;;(evil +everywhere); come to the dark side, we have cookies + file-templates ; auto-snippets for empty files + fold ; (nigh) universal code folding + (format +onsave) ; automated prettiness + ;;god ; run Emacs commands without modifier keys + ;;lispy ; vim for lisp, for people who don't like vim + ;;multiple-cursors ; editing in many places at once + ;;objed ; text object editing for the innocent + ;;parinfer ; turn lisp into python, sort of + ;;rotate-text ; cycle region at point between text candidates + snippets ; my elves. They type so I don't have to + word-wrap ; soft wrapping with language-aware indent + + :emacs + dired ; making dired pretty [functional] + electric ; smarter, keyword-based electric-indent + ;;ibuffer ; interactive buffer management + (undo +tree) ; persistent, smarter undo for your inevitable mistakes + vc ; version-control and Emacs, sitting in a tree + + :term + ;;eshell ; the elisp shell that works everywhere + ;;shell ; simple shell REPL for Emacs + ;;term ; basic terminal emulator for Emacs + vterm ; the best terminal emulation in Emacs + + :checkers + syntax ; tasing you for every semicolon you forget + (spell +flyspell) ; tasing you for misspelling mispelling + grammar ; tasing grammar mistake every you make + + :tools + ;;ansible + ;;biblio ; Writes a PhD for you (citation needed) + ;;collab ; buffers with friends + ;;debugger ; FIXME stepping through code, to help you add bugs + ;;direnv + ;;docker + ;;editorconfig ; let someone else argue about tabs vs spaces + ;;ein ; tame Jupyter notebooks with emacs + (eval +overlay) ; run code, run (also, repls) + ;;gist ; interacting with github gists + lookup ; navigate your code and its documentation + lsp ; M-x vscode + magit ; a git porcelain for Emacs + ;;make ; run make tasks from Emacs + ;;pass ; password manager for nerds + pdf ; pdf enhancements + ;;prodigy ; FIXME managing external services & code builders + rgb ; creating color strings + ;;taskrunner ; taskrunner for all your projects + ;;terraform ; infrastructure as code + ;;tmux ; an API for interacting with tmux + ;;tree-sitter ; syntax and parsing, sitting in a tree... + ;;upload ; map local to remote projects via ssh/ftp + + :os + (:if IS-MAC macos) ; improve compatibility with macOS + ;;tty ; improve the terminal Emacs experience + + :lang + ;;agda ; types of types of types of types... + ;;beancount ; mind the GAAP + (cc +lsp) ; C > C++ == 1 + clojure ; java with a lisp + common-lisp ; if you've seen one lisp, you've seen them all + ;;coq ; proofs-as-programs + ;;crystal ; ruby at the speed of c + ;;csharp ; unity, .NET, and mono shenanigans + data ; config/data formats + ;;(dart +flutter) ; paint ui and not much else + ;;dhall + ;;elixir ; erlang done right + ;;elm ; care for a cup of TEA? + emacs-lisp ; drown in parentheses + ;;erlang ; an elegant language for a more civilized age + ;;ess ; emacs speaks statistics + ;;factor + ;;faust ; dsp, but you get to keep your soul + ;;fortran ; in FORTRAN, GOD is REAL (unless declared INTEGER) + ;;fsharp ; ML stands for Microsoft's Language + ;;fstar ; (dependent) types and (monadic) effects and Z3 + gdscript ; the language you waited for + ;;(go +lsp) ; the hipster dialect + ;;(graphql +lsp) ; Give queries a REST + (haskell +lsp) ; a language that's lazier than I am + ;;hy ; readability of scheme w/ speed of python + ;;idris ; a language you can depend on + json ; At least it ain't XML + ;;(java +lsp) ; the poster child for carpal tunnel syndrome + javascript ; all(hope(abandon(ye(who(enter(here)))))) + julia ; a better, faster MATLAB + ;;kotlin ; a better, slicker Java(Script) + latex ; writing papers in Emacs has never been so fun + ;;lean ; for folks with too much to prove + ;;ledger ; be audit you can be + lua ; one-based indices? one-based indices + markdown ; writing docs for people to ignore + ;;nim ; python + lisp at the speed of c + nix ; I hereby declare "nix geht mehr!" + ;;ocaml ; an objective camel + org ; organize your plain life in plain text + php ; perl's insecure younger brother + plantuml ; diagrams for confusing people more + ;;purescript ; javascript, but functional + python ; beautiful is better than ugly + ;;qt ; the 'cutest' gui framework ever + ;;racket ; a DSL for DSLs + raku ; the artist formerly known as perl6 + ;;rest ; Emacs as a REST client + ;;rst ; ReST in peace + ;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"} + ;;(rust +lsp) ; Fe2O3.unwrap().unwrap().unwrap().unwrap() + ;;scala ; java, but good + ;;(scheme +guile) ; a fully conniving family of lisps + sh ; she sells {ba,z,fi}sh shells on the C xor + ;;sml + ;;solidity ; do you need a blockchain? No. + ;;swift ; who asked for emoji variables? + ;;terra ; Earth and Moon in alignment for performance. + web ; the tubes + yaml ; JSON, but readable + zig ; C, but simpler + + :email + ;;(mu4e +org +gmail) + ;;notmuch + ;;(wanderlust +gmail) + + :app + calendar + ;;emms + everywhere ; *leave* Emacs!? You must be joking + ;;irc ; how neckbeards socialize + (rss +org) ; emacs as an RSS reader + ;;twitter ; twitter client https://twitter.com/vnought + + :config + ;;literate + (default +bindings +smartparens)) + #+end_src -** completion -#+begin_src emacs-lisp :tangle init.el -:completion -company -ivy -#+end_src -** ui -#+begin_src emacs-lisp :tangle init.el -:ui -doom -doom-dashboard -doom-quit -(emoji +unicode) -hl-todo -ligatures -modeline -ophints -(popup +defaults) -treemacs -unicode -vi-tilde-fringe -workspaces -#+end_src -** editor -#+begin_src emacs-lisp :tangle init.el -:editor -file-templates -fold -(format +onsave) -snippets -word-wrap -#+end_src -** emacs -#+begin_src emacs-lisp :tangle init.el -:emacs -dired -electric -undo -vc -#+end_src -** term -#+begin_src emacs-lisp :tangle init.el -:term -vterm -#+end_src -** checkers -#+begin_src emacs-lisp :tangle init.el -:checkers -syntax -#+end_src -** tools -#+begin_src emacs-lisp :tangle init.el -:tools -(eval +overlay) -lookup -lsp -magit -pdf -#+end_src -** lang -#+begin_src emacs-lisp :tangle init.el -:lang -common-lisp -data -emacs-lisp -(haskell +lsp) -latex -(org +pretty) -plantuml -raku -shipsweb -rust -yaml -zig -#+end_src -** config -#+begin_src emacs-lisp :tangle init.el -:config -;literate -(default +bindings +smartparens) -#+end_src -** closing -#+begin_src emacs-lisp :tangle init.el -) -#+end_src + * packages.el ** Info from the included (default) comments: To install a package with Doom you must declare them here and run 'doom sync' on the command line, then restart Emacs for the changes to take effect -- or use 'M-x doom/reload'. @@ -539,42 +1866,79 @@ release. You can ~unpin!~ them. Note ~(unpin! t)~ unpins all the packages and ca (package! fish-mode) (package! typescript-mode) (package! wc-mode) -#+end_src -*** Ivy -#+begin_src emacs-lisp :tangle packages.el -(package! ivy) -(package! ivy-xref) +(package! plantuml-mode) +(package! csv-mode) #+end_src *** dired #+begin_src emacs-lisp :tangle packages.el (package! dired-open) #+end_src -*** Org -- org-roam pinned to ca873f7 because of https://github.com/org-roam/org-roam/issues/2361 - +*** various? #+begin_src emacs-lisp :tangle packages.el +;; (package! helm-xref) +#+end_src + +*** Org +#+begin_src emacs-lisp :tangle packages.el +;; Fix for org-roam link issue +(package! org :pin "ca873f7") +(package! org-auto-tangle) +(package! org-modern) +(package! org-ql) +(package! org-sidebar + :recipe ( + :host github + :repo "alphapapa/org-sidebar" + )) (package! org-contacts) (package! org-bullets) (package! org-download) (package! org-cliplink) -(package! org-roam :pin "ca873f7") -(package! org-ql) +(package! org-roam) +(package! org-super-agenda) (package! org-wild-notifier) -(unpin! org-roam) -(package! org-roam-ui) #+end_src *** Org-depend Ensure task dependencies are met. -#+begin_src emacs-lisp :tangle packages.el +#+begin_src emacs-lisp :tangle no (package! org-depend :recipe ( :host github :repo "fgeller/org-mode" :files ("contrib/lisp/org-depend.el"))) #+end_src +*** org-edna +:PROPERTIES: +:ID: a6c4440f-10b5-4353-acc9-bfcab0a089a3 +:END: +#+begin_src emacs-lisp :tangle packages.el +(package! org-edna) +(package! org-super-links + :recipe ( + :type git + :host github + :repo "toshism/org-super-links" + :branch "develop" + )) +#+end_src *** Elgantt +:PROPERTIES: +:ID: 2d5897d1-6e8c-4163-a131-42daef5856cb +:END: Pretty Gantt chart for your agenda. #+begin_src emacs-lisp :tangle packages.el (package! elgantt :recipe (:host github :repo "legalnonsense/elgantt")) #+end_src +*** mode-icons +#+begin_src emacs-lisp :tangle packages.el +(package! mode-icons) +#+end_src +*** qrencode +#+begin_src emacs-lisp :tangle packages.el +(package! qrencode) +#+end_src +*** hledger +#+begin_src emacs-lisp :tangle packages.el +(package! hledger-mode) +#+end_src diff --git a/.config/doom/config b/.config/doom/config new file mode 100644 index 0000000..ea6a64c --- /dev/null +++ b/.config/doom/config @@ -0,0 +1,6 @@ +(global-unset-key (kbd "C-c l")) +(global-set-key (kbd "C-c l l") 'org-super-links-link) +(global-set-key (kbd "C-c l s") 'org-super-links-store-link) +(global-set-key (kbd "C-c l i") 'org-super-links-insert-drawer-link) +(global-set-key (kbd "C-c l r") 'org-super-links-quick-related) +(global-set-key (kbd "C-c l d") 'org-super-links-delete-link) diff --git a/.config/doom/config.el b/.config/doom/config.el index 9ad9287..5d7fcf9 100644 --- a/.config/doom/config.el +++ b/.config/doom/config.el @@ -1,49 +1,122 @@ (setq user-full-name "Phil Bajsicki") (setq global-auto-revert-mode t) +(org-edna-mode) (setq auth-sources '("~/.authinfo")) +(setq-default backup-inhibited t) -(setq straight-repository-branch "develop") +(setq locale-coding-system 'utf-8) +(set-terminal-coding-system 'utf-8) +(set-keyboard-coding-system 'utf-8) +(set-clipboard-coding-system 'utf-8) +(prefer-coding-system 'utf-8) (after! counsel (setq counsel-outline-display-style 'title)) - -(setq doom-themes-enable-bold t - doom-themes-enable-italic t) - -(setq doom-font (font-spec :family "Iosevka" :size 12 :weight 'semi-light) - doom-variable-pitch-font (font-spec :family "Iosevka" :size 13)) - (load-theme 'doom-one t) (doom-themes-neotree-config) (doom-themes-org-config) -(set-frame-parameter nil 'alpha-background 70) +(setq doom-themes-enable-bold t + doom-themes-enable-italic t) +(setq doom-font (font-spec :family "IosevkaTerm" :size 12) + doom-unicode-font (font-spec :family "IosevkaTerm" :size 12)) +(dolist (charset '(unicode)) + (set-fontset-font (frame-parameter nil 'font) + charset (font-spec :family "IosevkaTerm" :size 12))) -(add-to-list 'default-frame-alist '(alpha-background . 70)) +(set-frame-parameter nil 'alpha-background 70) +(add-to-list 'default-frame-alist '(alpha-background . 80)) (setq display-line-numbers-type 'relative) (setq next-screen-context-lines 4) +(setq-default global-visual-line-mode t) +(setq x-stretch-cursor t) +(setq column-number-mode t) -(after! persp-mode - (setq persp-emacsclient-init-frame-behaviour-override "main")) -(setq doom-modeline-persp-name t) +(setq straight-repository-branch "develop") + +(global-set-key "\C-g" 'keyboard-quit) +(global-set-key "\C-cu" 'browse-url-chrome) (add-to-list 'auto-mode-alist '("\\.org\\'" . org-mode)) (setq org-directory "~/enc/org/") -(setq org-contacts-files - (file-expand-wildcards "~/enc/org/*.org")) + (setq org-enforce-todo-dependencies t) + (setq org-insert-heading-respect-content nil) + (setq org-reverse-note-order nil) + (setq org-show-following-heading t) + (setq org-show-hierarchy-above t) + (setq org-show-siblings nil) + (setq org-deadline-warning-days 7) + (setq org-blank-before-new-entry (quote ((heading . t) + (plain-list-item . nil)))) +(setq org-todo-repeat-to-state "LOOP") +(setq org-remove-highlights-with-change nil) +(setq org-read-date-prefer-future nil) +(setq org-special-ctrl-a/e t) +(setq org-special-ctrl-k t) +(setq org-yank-adjusted-subtrees t) +(setq org-M-RET-may-split-line t) +(setq org-log-done (quote time)) +(setq org-log-into-drawer t) +(setq org-catch-invisible-edits "smart") + +(setq org-completion-use-ido t) +(setq org-use-property-inheritance nil) + +(setq org-hierarchical-todo-statistics t) +(org-align-tags t) + +(modify-all-frames-parameters + '((right-divider-width . 2) + (internal-border-width . 0))) +(dolist (face '(window-divider + window-divider-first-pixel + window-divider-last-pixel)) + (face-spec-reset-face face) + (set-face-foreground face (face-attribute 'default :background))) +(set-face-background 'fringe (face-attribute 'default :background)) + +(setq + ;; Edit settings + org-auto-align-tags nil + org-tags-column 0 + org-catch-invisible-edits 'show-and-error + org-insert-heading-respect-content t + + ;; Org styling, hide markup etc. + org-hide-emphasis-markers t + org-pretty-entities t + org-ellipsis "…" + + ;; Agenda styling + org-agenda-tags-column 0 + org-agenda-block-separator ?─ + org-agenda-time-grid + '((daily today require-timed) + (800 1000 1200 1400 1600 1800 2000) + " ┄┄┄┄┄ " "┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄") + org-agenda-current-time-string + "⌚ now ─────────────────────────────────────────────────") + +(global-org-modern-mode) (setq-default org-enforce-todo-dependencies t) +(setq org-enforce-todo-checkbox-dependencies t) -(setq org-superstar-headline-bullets-list - '("⁖" "◉" "○" "✸" "✿")) - -(setq org-M-RET-may-split-line '((default . t))) - -(setq org-contacts-files '("~/enc/org/people.org")) +(add-hook 'write-file-hooks 'time-stamp) +(add-hook 'org-mode-hook + (lambda () + ;; yasnippet + ;;disabled; (make-variable-buffer-local 'yas/trigger-key) + ;;disabled; (org-set-local 'yas/trigger-key [tab]) + ;;disabled; (define-key yas/keymap [tab] 'yas/next-field-group) + ;; flyspell mode for spell checking everywhere + ;;disabled; (flyspell-mode 1) + ;; auto-fill mode on + (auto-fill-mode 1))) (global-set-key "\C-cl" 'org-store-link) (global-set-key "\C-ch" 'counsel-org-link) @@ -51,23 +124,12 @@ (global-set-key "\C-cnn" 'org-capture) (global-set-key "\C-cia" '(lambda ()(interactive) - (org-timestamp '(16)))) + (org-time-stamp '(16)))) (global-set-key "\C-cii" '(lambda () (interactive) - (org-timestamp-inactive '(16)))) + (org-time-stamp-inactive '(16)))) -(add-hook 'org-insert-heading-hook - (lambda () - (if - (or - (string-match "journal" buffer-file-name) - (string-match "therapy" buffer-file-name)) - ((lambda () - (interactive) - (org-timestamp-inactive '(16)))) - (setq 'org-insert-heading-hook nil) - ))) - -(setq org-todo-keywords +(after! org + (setq org-todo-keywords '((sequence "INBOX(i)" "TASK(t)" ; A task that needs doing & is ready to do @@ -85,31 +147,29 @@ "YES(y)" ; take action "NO(n)")) ; don't take action org-todo-keyword-faces - '(("[-]" . +org-todo-active) - ("STRT" . +org-todo-active) - ("[?]" . +org-todo-onhold) - ("WAIT" . +org-todo-onhold) - ("HOLD" . +org-todo-onhold) - ("PROJ" . +org-todo-project) - ("NO" . +org-todo-cancel) - ("KILL" . +org-todo-cancel))) + '( + ("INBOX" :foreground "cyan" :weight bold) + ("TASK" :foreground "purple" :weight bold) + ("PROJ" :foreground "violet" :weight bold) + ("LOOP" :foreground "magenta" :weight bold) + ("WAIT" :foreground "yellow" :weight bold) + ("HOLD" :foreground "orange" :weight bold) + ("DONE" :foreground "green" :weight bold) + ("KILL" :foreground "grey" :weight bold)))) -(setq hl-todo-keyword-faces - '(("HOLD" . "#d0bf8f") - ("TODO" . "#cc9393") - ("NEXT" . "#dca3a3") - ("THEM" . "#dc8cc3") - ("PROG" . "#7cb8bb") - ("OKAY" . "#7cb8bb") - ("DONT" . "#5f7f5f") - ("FAIL" . "#8c5353") - ("DONE" . "#afd8af") - ("NOTE" . "#d0bf8f") - ("KLUDGE" . "#d0bf8f") - ("HACK" . "#d0bf8f") - ("TEMP" . "#d0bf8f") - ("FIXME" . "#cc9393") - ("XXXX*" . "#cc9393"))) +(add-hook 'org-insert-heading-hook + (lambda () + (if + (or + (string-match "journal.org" buffer-file-name) + (string-match "money" buffer-file-name) + (string-match "therapy.org" buffer-file-name)) + ((lambda () + (interactive) + (org-time-stamp-inactive '(16)) + (newline))) + (setq org-insert-heading-hook nil) + ))) (setq org-capture-templates '(("t" "inbox" entry (file+headline "~/enc/org/phil.org" "Inbox") "* TODO %i%?") ("i" "idea" entry (file+headline "~/enc/org/phil.org" "Ideas") "* %?") @@ -128,6 +188,87 @@ :BIRTHDAY: :END:"))) +(add-hook 'org-babel-after-execute-hook 'org-display-inline-images) + +(defun org-super-links-quick-related () + (interactive) + (let ((org-super-links-link-prefix "\nrelated: ")) + (org-super-links-link))) + +(setq org-super-links-related-into-drawer t) +(setq org-super-links-related-drawer-default-name "RELATED" + org-super-links-link-prefix 'org-super-links-link-prefix-timestamp) + +(setq org-export-with-broken-links t) ;; avoiding error on export + +(global-unset-key (kbd "C-c l")) +(global-set-key (kbd "C-c l l") 'org-super-links-link) +(global-set-key (kbd "C-c l s") 'org-super-links-store-link) +(global-set-key (kbd "C-c l i") 'org-super-links-insert-drawer-link) +(global-set-key (kbd "C-c l r") 'org-super-links-quick-related) +(global-set-key (kbd "C-c l d") 'org-super-links-delete-link) + +(org-super-agenda-mode) + (setq super-agenda-groups + '(;; Each group has an implicit boolean OR operator between its selectors. + (:name "Today" ; Optionally specify section name + :time-grid t ; Items that appear on the time grid + ) + (:name "DEADLINES" :deadline t :order 1) + (:name "Focus | [A]" :tag "Focus" :priority "A" :order 2 :face (:append t :weight bold)) + ;; (:name "Important" :priority "A" :order 4) + ;; (:name "Habits" :habit t :order 3) + ;; (:name "Shopping" :tag "Besorgung" :order 8) + ;; Boolean AND group matches items that match all subgroups + ;; :and (:tag "shopping" :tag "@town") + ;; Multiple args given in list with implicit OR + ;; :tag ("food" "dinner")) + ;; :habit t + ;; :tag "personal") + (:name "Started" :and (:todo "TASK" :not (:tag "someday") :not (:priority "C") :not (:priority "B") ) :order 10) + ;;(:name "Space-related (non-moon-or-planet-related)" + ;; ;; Regexps match case-insensitively on the entire entry + ;; :and (:regexp ("space" "NASA") + ;; ;; Boolean NOT also has implicit OR between selectors + ;; :not (:regexp "moon" :tag "planet"))) + ;;(:name "BWG" :tag "@BWG" :order 16) + ;; (:name "read" :tag "2read" :order 22) + ;; Groups supply their own section names when none are given + (:name "Someday" :and ( :todo ("WAIT" "HOLD" "INBOX") :tag "someday" :not (:priority "C") :not (:priority "B")) + ;; Show this group at the end of the agenda (since it has the + ;; highest number). If you specified this group last, items + ;; with these todo keywords that e.g. have priority A would be + ;; displayed in that group instead, because items are grouped + ;; out in the order the groups are listed. + :order 25) + + ;; "other items": an auto-group with order 99 ---------------------------- + + (:name "Prio ≤ B" :priority<= "B" + ;; Show this section after "Today" and "Important", because + ;; their order is unspecified, defaulting to 0. Sections + ;; are displayed lowest-number-first. + :order 105) + (:name "reward" + :tag ("reward" "lp") + :order 110 + ) + (:name "Waiting…" :todo "WAIT" :order 118) ; Set order of this section + + ;; After the last group, the agenda will display items that didn't + ;; match any of these groups, with the default order position of 99 + )) + + (defun my-super-agenda() + "generates my super-agenda" + (interactive) + (org-super-agenda-mode) + (let + ((org-super-agenda-groups super-agenda-groups)) + (org-agenda nil "a") + ) + ) + (org-wild-notifier-mode) (setq org-wild-notifier-alert-time '(10)) @@ -139,6 +280,8 @@ (setq org-outline-path-complete-in-steps nil) (setq org-refile-use-outline-path t) +(setq org-contacts-files '("~/enc/org/people.org")) + (define-prefix-command 'org-roam-map) (global-set-key "\C-r" 'org-roam-map) (define-key org-roam-map "o" 'org-roam-buffer-toggle) @@ -156,44 +299,20 @@ (setq org-roam-capture-templates '(("n" "default" plain "%?" - :if-new (file+head "%<%Y.%m.%d.%H\:%M>-${slug}.org" "#+title: ${title}\n") + :if-new (file+head "${slug}.org" "#+title: ${title}\n#+category: ${title}\n#+filetags: \n") + :empty-lines 1 :unnarrowed t) ("j" "journal" plain "%?" - :if-new (file+head "journal/journal-%<%Y.%m.%d.%H\:%M>-${slug}.org" "#+title: ${title}\n") + :if-new (file+head "journal/journal-${slug}.org" "#+title: ${title}\n#+category: 📔${title}\n#+filetags: 📔\n") :empty-lines 1 :unnarrowed t) ("t" "Therapy" plain - " -* Sytuacja -** Myśli -** Emocje -** Zachowania -** Argumenty potwierdzające myśli -** Argumenty podważające -** Myśli alternatywne -** Emocje alternatywne- -** Zachowania alternatywne -" - :if-new (file+head "therapy/therapy-%<%Y.%m.%d.%H\:%M>-${slug}.org" "#+title: ${title}\n") + "#+title: ${title}\n" + :if-new (file+head "therapy/therapy-${slug}.org" "#+title: ${title}\n#+category: 📗 ${title}\n#+filetags: 📗\n") :empty-lines 1 :unnarrowed))) -(use-package! websocket - :after org-roam) - -(use-package! org-roam-ui - :after org-roam ;; or :after org -;; normally we'd recommend hooking orui after org-roam, but since org-roam does not have -;; a hookable mode anymore, you're advised to pick something yourself -;; if you don't care about startup time, use -;; :hook (after-init . org-roam-ui-mode) - :config - (setq org-roam-ui-sync-theme t - org-roam-ui-follow t - org-roam-ui-update-on-save t - org-roam-ui-open-on-start t)) - (add-to-list 'load-path "~/.emacs.d/.local/straight/repos/elgantt/") (setq elgantt-header-type 'outline @@ -231,12 +350,230 @@ org-agenda-insert-diary-extract-time t org-log-into-drawer t org-clock-into-drawer t - org-agenda-log-mode-items '(closed clock state)) + org-agenda-log-mode-items '(closed clock state) + org-agenda-prefix-format "%l %i %c %s %t") + (setq org-agenda-compact-blocks t) + (setq org-agenda-use-tag-inheritance (quote (agenda)));; agenda performance + (setq org-agenda-span 1) + (add-hook 'org-agenda-mode-hook '(lambda () (hl-line-mode 1))) (setq org-agenda-custom-commands (quote (("x" "Phil's view" agenda "" - ((org-agenda-prefix-format " %i %b %-12:c %s %t ")))))) + ((org-agenda-prefix-format " %i %-12:c %s %t ")))))) + +(setq org-agenda-todo-ignore-with-date nil) + +(setq org-agenda-todo-ignore-deadlines (quote far)) + +(setq org-agenda-todo-ignore-scheduled (quote future)) + +(setq org-agenda-skip-deadline-if-done t) + +(setq org-agenda-skip-scheduled-if-done t) + +(setq org-agenda-text-search-extra-files (quote (agenda-archives))) + +(setq org-agenda-log-mode-items (quote (state))) + +;(setq org-agenda-skip-additional-timestamps-same-entry t) +(setq org-agenda-skip-additional-timestamps-same-entry nil) + +(setq org-agenda-search-headline-for-time nil) + +(setq org-agenda-window-setup 'current-window) + + (setq org-agenda-include-diary t) + + (setq org-agenda-repeating-timestamp-show-all t) + + (setq org-agenda-show-all-dates t) + + (setq org-agenda-sorting-strategy + (quote ((agenda habit-down time-up user-defined-up priority-down category-keep) + (todo priority-down category-keep) + (tags priority-down category-keep) + (search category-keep)))) + +(setq org-agenda-start-on-weekday nil) + + (setq org-agenda-skip-timestamp-if-deadline-is-shown t) + + (setq org-agenda-cmp-user-defined 'bh/agenda-sort) + + ;;(setq org-agenda-tags-column -102) + (setq org-tags-column -101); for powerplantwin 23" TFT turned 90 + ; degrees; should *not* differ between + ; systems! Otherwise Org-files gets + ; re-formatted after switching + ; system + ;;(when (my-system-type-is-windows) + ;; ;;(setq org-agenda-tags-column -103);; for 23" TFT turned 90 degrees + ;; (setq org-agenda-tags-column -117);; for 24" TFT turned 90 degrees + ;; ) + ;;(when (my-system-is-sting) + ;; (setq org-agenda-tags-column -117);; -117 for 23" TFT sting, rotated 90° + ;; ) + (setq org-agenda-tags-column (- (- (window-total-width) 3))) ;; total width minus 3 + +(define-key org-agenda-mode-map (kbd "C-p") 'my-scroll-down-half) +(define-key org-agenda-mode-map (kbd "C-n") 'my-scroll-up-half) + +(setq org-agenda-skip-scheduled-if-deadline-is-shown nil) +;;(setq org-agenda-skip-deadline-prewarning-if-scheduled t) + + (setq org-global-properties (quote (("STYLE_ALL" . "habit")))) + + (setq org-habit-graph-column 100) + +(defun org-agenda-sharpie () + "Censor the text of items in the agenda." + (interactive) + (let (regexp old-heading new-heading properties) + ;; Save face properties of line in agenda to reapply to changed text + (setq properties (text-properties-at (point))) + + ;; Go to source buffer + (org-with-point-at (org-find-text-property-in-string 'org-marker + (buffer-substring (line-beginning-position) + (line-end-position))) + ;; Save old heading text and ask for new text + (line-beginning-position) + (unless (org-at-heading-p) + ;; Not sure if necessary + (org-back-to-heading)) + (setq old-heading (when (looking-at org-complex-heading-regexp) + (match-string 4)))) + (unless old-heading + (error "Can't find heading. How can this be?")) + ;; Back to agenda buffer + (setq new-heading (read-from-minibuffer "Overwrite visible heading with: ")) + (add-text-properties 0 (length new-heading) properties new-heading) + ;; Replace agenda text + (save-excursion + (let ((inhibit-read-only t)) + (goto-char (line-beginning-position)) + (when (search-forward old-heading (line-end-position)) + (replace-match new-heading 'fixedcase 'literal)))))) + +(setq org-export-initial-scope 'subtree) + +(setq org-export-with-broken-links t) + +(with-eval-after-load 'ox-latex + ;;(message (concat "################################################\norg-latex-classes = [" org-latex-classes "]")) + + (add-to-list 'org-latex-classes + '("scrartcl" + "\\documentclass\[a4paper,parskip=half\]\{scrartcl\}" + ("\\section\{%s\}" . "\\section*\{%s\}") + ("\\subsection\{%s\}" . "\\subsection*\{%s\}") + ("\\subsubsection\{%s\}" . "\\subsubsection*\{%s\}"))) + + (add-to-list 'org-latex-classes + '("detego" + "\\documentclass\[a4paper,parskip=half,11pt,headinclude=false,footinclude=false\]\{scrartcl\} + \\usepackage\[ngerman,american\]\{babel\}\\usepackage\{eurosym\}\\usepackage\{xspace\}\\usepackage\[usenames,dvipsnames\]\{xcolor\} + \\usepackage\[protrusion=true,factor=900\]\{microtype\}\\usepackage\{enumitem\} + \\definecolor\{DispositionColor\}\{RGB\}\{0,54,90\} + \\usepackage\{helvet\} + \\renewcommand\{\\familydefault\}\{\\sfdefault\} + \\DeclareRobustCommand\{\\myacro\}\[1\]\{\\textsc\{\\lowercase\{#1\}\}\} %% abbrevations using small caps + \\usepackage{scrlayer-scrpage} \\rehead{\\includegraphics\[height=1cm\]{{c:/Users/karl.voit/.emacs.d/bin/images/Detego-Logo-209x41.png}}} \\pagestyle{scrheadings} %% Logo in header + \\newenvironment{NOTES}{}{} %% declares org-reveal environment in PDF output + \\usepackage[space]{grffile} %% enable spaces in filenames of includegraphics + %% colorful headings: + %\\setheadsepline\{.4pt\}\[\\color\{DispositionColor\}\] + \\renewcommand\{\\headfont\}\{\\normalfont\\sffamily\\color\{DispositionColor\}\} + \\renewcommand\{\\pnumfont\}\{\\normalfont\\sffamily\\color\{DispositionColor\}\} + \\addtokomafont\{disposition\}\{\\color\{DispositionColor\}\} + \\addtokomafont\{caption\}\{\\color\{DispositionColor\}\\footnotesize\} + \\addtokomafont\{captionlabel\}\{\\color\{DispositionColor\}\} + + \\usepackage\{enumitem\} + \\setlist\{noitemsep\} %% kills the space between items + + " + ("\\section\{%s\}" . "\\section*\{%s\}") + ("\\subsection\{%s\}" . "\\subsection*\{%s\}") + ("\\subsubsection\{%s\}" . "\\subsubsection*\{%s\}"))) + + (add-to-list 'org-latex-classes + '("rise" + "\\documentclass\[a4paper,parskip=half,11pt,headinclude=false,footinclude=false\]\{scrartcl\} + \\usepackage\[ngerman,american\]\{babel\}\\usepackage\{eurosym\}\\usepackage\{xspace\}\\usepackage\[usenames,dvipsnames\]\{xcolor\} + \\usepackage\[protrusion=true,factor=900\]\{microtype\}\\usepackage\{enumitem\} + \\definecolor\{DispositionColor\}\{RGB\}\{0,54,90\} + \\usepackage\{helvet\} + \\renewcommand\{\\familydefault\}\{\\sfdefault\} + \\DeclareRobustCommand\{\\myacro\}\[1\]\{\\textsc\{\\lowercase\{#1\}\}\} %% abbrevations using small caps + \\usepackage{scrlayer-scrpage} \\rehead{\\includegraphics\[height=1cm\]{{c:/Users/karl.voit/.emacs.d/bin/images/RISE_logo_202x500.jpeg}}} \\pagestyle{scrheadings} %% Logo in header + \\newenvironment{NOTES}{}{} %% declares org-reveal environment in PDF output + \\usepackage[space]{grffile} %% enable spaces in filenames of includegraphics + %% colorful headings: + %\\setheadsepline\{.4pt\}\[\\color\{DispositionColor\}\] + \\renewcommand\{\\headfont\}\{\\normalfont\\sffamily\\color\{DispositionColor\}\} + \\renewcommand\{\\pnumfont\}\{\\normalfont\\sffamily\\color\{DispositionColor\}\} + \\addtokomafont\{disposition\}\{\\color\{DispositionColor\}\} + \\addtokomafont\{caption\}\{\\color\{DispositionColor\}\\footnotesize\} + \\addtokomafont\{captionlabel\}\{\\color\{DispositionColor\}\} + + \\usepackage\{enumitem\} + \\setlist\{noitemsep\} %% kills the space between items + + " + ("\\section\{%s\}" . "\\section*\{%s\}") + ("\\subsection\{%s\}" . "\\subsection*\{%s\}") + ("\\subsubsection\{%s\}" . "\\subsubsection*\{%s\}"))) + + (add-to-list 'org-latex-classes + '("lyrics" + "\\documentclass\[a4paper,parskip=half\]\{scrartcl\} + \\renewcommand*\\sfdefault\{lcmss\} \\renewcommand*\\familydefault\{\\sfdefault\}" + ("\\section\{%s\}" . "\\section*\{%s\}") + ("\\subsection\{%s\}" . "\\subsection*\{%s\}") + ("\\subsubsection\{%s\}" . "\\subsubsection*\{%s\}"))) + + (add-to-list 'org-latex-classes + '("lyrics2" + "\\documentclass\[a4paper,parskip=half,twocolumn\]\{scrartcl\} + \\renewcommand*\\sfdefault\{lcmss\} \\renewcommand*\\familydefault\{\\sfdefault\}" + ("\\section\{%s\}" . "\\section*\{%s\}") + ("\\subsection\{%s\}" . "\\subsection*\{%s\}") + ("\\subsubsection\{%s\}" . "\\subsubsection*\{%s\}"))) + +(add-to-list 'org-latex-classes + '("memoirbook" + "\\documentclass[a5paper,12pt]{memoir}" + ;; "\\semiisopage[8]" + ;; "\\hypersetup{colorlinks=true,linkcolor={Blue},urlcolor={Blue}}" ;; genera un problema al exportar + ("\\chapter{%s}" . "\\chapter*{%s}") + ("\\section{%s}" . "\\section*{%s}") + ("\\subsection{%s}" . "\\subsection*{%s}") + ("\\subsubsection{%s}" . "\\subsubsection*{%s}") + ("\\paragraph{%s}" . "\\paragraph*{%s}") + ("\\subparagraph{%s}" . "\\subparagraph*{%s}"))) + +'(org-export-latex-default-class "memoir") + + );; with-eval-after-load + + (use-package ox-asciidoc + ;;:ensure t ;; install package if not found OR: (setq use-package-always-ensure t) + :defer 110 + ) + +(defun my-org-copy-region-as-markdown () + "Copy the region (in Org) to the system clipboard as Markdown." + (interactive) + (if (use-region-p) + (let* ((region + (buffer-substring-no-properties + (region-beginning) + (region-end))) + (markdown + (org-export-string-as region 'md t '(:with-toc nil)))) + (gui-set-selection 'CLIPBOARD markdown)))) (setq doom-snippets-enable-short-helpers t) @@ -245,3 +582,21 @@ ("png" . "sxiv") ("mkv" . "mpv") ("mp4" . "mpv"))) + + (mode-icons-mode) + (add-hook 'dired-mode-hook #'mode-icons--mode-disable) ;; with mode-icons, visiting a dir with dired takes up *lots* of CPU for =mode-icons-reset= (performance-issue) + +(add-to-list 'auto-mode-alist '("\\.[Cc][Ss][Vv]\\'" . csv-mode)) +(autoload 'csv-mode "csv-mode" + "Major mode for editing comma-separated value files." t) + +;; To open files with .journal extension in hledger-mode +(add-to-list 'auto-mode-alist '("\\.journal\\'" . hledger-mode)) + +;; Provide the path to you journal file. +;; The default location is too opinionated. +(setq hledger-jfile "~/enc/org/hledger/2023.journal") + +;;; Auto-completion for account names +;; For company-mode users, +(add-to-list 'company-backends 'hledger-company) diff --git a/.config/doom/custom.el b/.config/doom/custom.el index 9713426..1f32ebb 100644 --- a/.config/doom/custom.el +++ b/.config/doom/custom.el @@ -3,8 +3,10 @@ ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. + '(ignored-local-variable-values '((org-ql-ask-unsafe-queries))) + '(magit-todos-insert-after '(bottom) nil nil "Changed by setter of obsolete option `magit-todos-insert-at'") '(org-safe-remote-resources - '("\\`https://bajsicki\\.com/org-html-themes/org/theme-readtheorg\\.setup\\'"))) + '("\\`https://lvxnox\\.com/org-html-themes/org/theme-readtheorg\\.setup\\'" "\\`https://bajsicki\\.com/org-html-themes/org/theme-readtheorg\\.setup\\'"))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. diff --git a/.config/doom/init.el b/.config/doom/init.el index 58fcd40..1c7024a 100644 --- a/.config/doom/init.el +++ b/.config/doom/init.el @@ -1,66 +1,195 @@ +;;; init.el -*- lexical-binding: t; -*- + +;; This file controls what Doom modules are enabled and what order they load +;; in. Remember to run 'doom sync' after modifying it! + +;; NOTE Press 'SPC h d h' (or 'C-h d h' for non-vim users) to access Doom's +;; documentation. There you'll find a link to Doom's Module Index where all +;; of our modules are listed, including what flags they support. + +;; NOTE Move your cursor over a module's name (or its flags) and press 'K' (or +;; 'C-c c k' for non-vim users) to view its documentation. This works on +;; flags as well (those symbols that start with a plus). +;; +;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its +;; directory (for easy access to its source code). + (doom! :input + ;;bidi ; (tfel ot) thgir etirw uoy gnipleh + ;;chinese + ;;japanese + ;;layout ; auie,ctsrnm is the superior home row -:completion -company -ivy + :completion + company ; the ultimate code completion backend + ;;helm ; the *other* search engine for love and life + ;;ido ; the other *other* search engine... + ;;ivy ; a search engine for love and life + vertico ; the search engine of the future -:ui -doom -doom-dashboard -doom-quit -(emoji +unicode) -hl-todo -ligatures -modeline -ophints -(popup +defaults) -treemacs -unicode -vi-tilde-fringe -workspaces + :ui + ;;deft ; notational velocity for Emacs + doom ; what makes DOOM look the way it does + doom-dashboard ; a nifty splash screen for Emacs + doom-quit ; DOOM quit-message prompts when you quit Emacs + ;;(emoji +unicode) ; 🙂 + ;;hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW + ;;hydra + indent-guides ; highlighted indent columns + (ligatures +extra +iosevka) ; ligatures and symbols to make your code pretty again + ;;minimap ; show a map of the code on the side + modeline ; snazzy, Atom-inspired modeline, plus API + nav-flash ; blink cursor line after big motions + ;;neotree ; a project drawer, like NERDTree for vim + ophints ; highlight the region an operation acts on + (popup +defaults) ; tame sudden yet inevitable temporary windows + ;;tabs ; a tab bar for Emacs + treemacs ; a project drawer, like neotree but cooler + unicode ; extended unicode support for various languages + (vc-gutter +pretty) ; vcs diff in the fringe + vi-tilde-fringe ; fringe tildes to mark beyond EOB + ;;window-select ; visually switch windows + workspaces ; tab emulation, persistence & separate workspaces + ;;zen ; distraction-free coding or writing -:editor -file-templates -fold -(format +onsave) -snippets -word-wrap + :editor + ;;(evil +everywhere); come to the dark side, we have cookies + file-templates ; auto-snippets for empty files + fold ; (nigh) universal code folding + (format +onsave) ; automated prettiness + ;;god ; run Emacs commands without modifier keys + ;;lispy ; vim for lisp, for people who don't like vim + ;;multiple-cursors ; editing in many places at once + ;;objed ; text object editing for the innocent + ;;parinfer ; turn lisp into python, sort of + ;;rotate-text ; cycle region at point between text candidates + snippets ; my elves. They type so I don't have to + word-wrap ; soft wrapping with language-aware indent -:emacs -dired -electric -undo -vc + :emacs + dired ; making dired pretty [functional] + electric ; smarter, keyword-based electric-indent + ;;ibuffer ; interactive buffer management + (undo +tree) ; persistent, smarter undo for your inevitable mistakes + vc ; version-control and Emacs, sitting in a tree -:term -vterm + :term + ;;eshell ; the elisp shell that works everywhere + ;;shell ; simple shell REPL for Emacs + ;;term ; basic terminal emulator for Emacs + vterm ; the best terminal emulation in Emacs -:checkers -syntax + :checkers + syntax ; tasing you for every semicolon you forget + (spell +flyspell) ; tasing you for misspelling mispelling + grammar ; tasing grammar mistake every you make -:tools -(eval +overlay) -lookup -lsp -magit -pdf + :tools + ;;ansible + ;;biblio ; Writes a PhD for you (citation needed) + ;;collab ; buffers with friends + ;;debugger ; FIXME stepping through code, to help you add bugs + ;;direnv + ;;docker + ;;editorconfig ; let someone else argue about tabs vs spaces + ;;ein ; tame Jupyter notebooks with emacs + (eval +overlay) ; run code, run (also, repls) + ;;gist ; interacting with github gists + lookup ; navigate your code and its documentation + lsp ; M-x vscode + magit ; a git porcelain for Emacs + ;;make ; run make tasks from Emacs + ;;pass ; password manager for nerds + pdf ; pdf enhancements + ;;prodigy ; FIXME managing external services & code builders + rgb ; creating color strings + ;;taskrunner ; taskrunner for all your projects + ;;terraform ; infrastructure as code + ;;tmux ; an API for interacting with tmux + ;;tree-sitter ; syntax and parsing, sitting in a tree... + ;;upload ; map local to remote projects via ssh/ftp -:lang -common-lisp -data -emacs-lisp -(haskell +lsp) -latex -(org +pretty) -plantuml -raku -shipsweb -rust -yaml -zig + :os + (:if IS-MAC macos) ; improve compatibility with macOS + ;;tty ; improve the terminal Emacs experience -:config -;literate -(default +bindings +smartparens) + :lang + ;;agda ; types of types of types of types... + ;;beancount ; mind the GAAP + (cc +lsp) ; C > C++ == 1 + clojure ; java with a lisp + common-lisp ; if you've seen one lisp, you've seen them all + ;;coq ; proofs-as-programs + ;;crystal ; ruby at the speed of c + ;;csharp ; unity, .NET, and mono shenanigans + data ; config/data formats + ;;(dart +flutter) ; paint ui and not much else + ;;dhall + ;;elixir ; erlang done right + ;;elm ; care for a cup of TEA? + emacs-lisp ; drown in parentheses + ;;erlang ; an elegant language for a more civilized age + ;;ess ; emacs speaks statistics + ;;factor + ;;faust ; dsp, but you get to keep your soul + ;;fortran ; in FORTRAN, GOD is REAL (unless declared INTEGER) + ;;fsharp ; ML stands for Microsoft's Language + ;;fstar ; (dependent) types and (monadic) effects and Z3 + gdscript ; the language you waited for + ;;(go +lsp) ; the hipster dialect + ;;(graphql +lsp) ; Give queries a REST + (haskell +lsp) ; a language that's lazier than I am + ;;hy ; readability of scheme w/ speed of python + ;;idris ; a language you can depend on + json ; At least it ain't XML + ;;(java +lsp) ; the poster child for carpal tunnel syndrome + javascript ; all(hope(abandon(ye(who(enter(here)))))) + julia ; a better, faster MATLAB + ;;kotlin ; a better, slicker Java(Script) + latex ; writing papers in Emacs has never been so fun + ;;lean ; for folks with too much to prove + ;;ledger ; be audit you can be + lua ; one-based indices? one-based indices + markdown ; writing docs for people to ignore + ;;nim ; python + lisp at the speed of c + nix ; I hereby declare "nix geht mehr!" + ;;ocaml ; an objective camel + org ; organize your plain life in plain text + php ; perl's insecure younger brother + plantuml ; diagrams for confusing people more + ;;purescript ; javascript, but functional + python ; beautiful is better than ugly + ;;qt ; the 'cutest' gui framework ever + ;;racket ; a DSL for DSLs + raku ; the artist formerly known as perl6 + ;;rest ; Emacs as a REST client + ;;rst ; ReST in peace + ;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"} + ;;(rust +lsp) ; Fe2O3.unwrap().unwrap().unwrap().unwrap() + ;;scala ; java, but good + ;;(scheme +guile) ; a fully conniving family of lisps + sh ; she sells {ba,z,fi}sh shells on the C xor + ;;sml + ;;solidity ; do you need a blockchain? No. + ;;swift ; who asked for emoji variables? + ;;terra ; Earth and Moon in alignment for performance. + web ; the tubes + yaml ; JSON, but readable + zig ; C, but simpler -) + :email + ;;(mu4e +org +gmail) + ;;notmuch + ;;(wanderlust +gmail) + + :app + calendar + ;;emms + everywhere ; *leave* Emacs!? You must be joking + ;;irc ; how neckbeards socialize + (rss +org) ; emacs as an RSS reader + ;;twitter ; twitter client https://twitter.com/vnought + + :config + ;;literate + (default +bindings +smartparens)) diff --git a/.config/doom/packages.el b/.config/doom/packages.el index 6bbd080..925f5ab 100644 --- a/.config/doom/packages.el +++ b/.config/doom/packages.el @@ -15,27 +15,45 @@ (package! fish-mode) (package! typescript-mode) (package! wc-mode) - -(package! ivy) -(package! ivy-xref) +(package! plantuml-mode) +(package! csv-mode) (package! dired-open) +;; (package! helm-xref) + +;; Fix for org-roam link issue +(package! org :pin "ca873f7") +(package! org-auto-tangle) +(package! org-modern) +(package! org-ql) +(package! org-sidebar + :recipe ( + :host github + :repo "alphapapa/org-sidebar" + )) (package! org-contacts) (package! org-bullets) (package! org-download) (package! org-cliplink) -(package! org-roam :pin "ca873f7") -(package! org-ql) +(package! org-roam) +(package! org-super-agenda) (package! org-wild-notifier) -(unpin! org-roam) -(package! org-roam-ui) -(package! org-depend - :recipe ( - :host github - :repo "fgeller/org-mode" - :files ("contrib/lisp/org-depend.el"))) +(package! org-edna) +(package! org-super-links + :recipe ( + :type git + :host github + :repo "toshism/org-super-links" + :branch "develop" + )) (package! elgantt :recipe (:host github :repo "legalnonsense/elgantt")) + +(package! mode-icons) + +(package! qrencode) + +(package! hledger-mode) diff --git a/.config/fish/README.org b/.config/fish/README.org index 64c75e6..2eb39f9 100644 --- a/.config/fish/README.org +++ b/.config/fish/README.org @@ -21,7 +21,7 @@ set VISUAL "emacsclient -c -a emacs" set QT_QPA_PLATFORMTHEME "qt6ct" set SSH_AUTH_SOCK $XDG_RUNTIME_DIR/ssh-agent.socket set GNUPGHOME "~/enc/keys/gnupg" - +set LEDGER_FILE "~/enc/org/hledger/2023.journal" #+end_src * Manpager @@ -241,27 +241,6 @@ alias .5='cd ../../../../..' #+begin_src fish alias vim='nvim' #+end_src -** emacs -Aliases for [[https://github.com/doomemacs/doomemacs][Doom Emacs]]. - -*** em -Opens emacs in the terminal. -#+begin_src fish -alias em='/usr/bin/emacs -nw' -#+end_src -*** emacs -Calls ~emacsclient -c -a 'emacs'~. -#+begin_src fish -alias emacs="emacsclient -c -a 'emacs'" -#+end_src -*** doom -These aliases call the ~doom~ script from ~~/.config/emacs/bin~. -#+begin_src fish -alias doomsync="~/.config/emacs/bin/doom sync" -alias doomdoctor="~/.config/emacs/bin/doom doctor" -alias doomupgrade="~/.config/emacs/bin/doom upgrade" -alias doompurge="~/.config/emacs/bin/doom purge" -#+end_src ** exa These bindings change the way ~ls~ behaves by calling ~exa~ instead. #+begin_src fish @@ -319,7 +298,6 @@ Ask for confirmation before overwriting files. #+begin_src fish alias cp="cp -i" alias mv='mv -i' -alias rm='rm -i' #+end_src ** df, free Make the output human-readable by default. diff --git a/.config/fish/config.fish b/.config/fish/config.fish index ebbcb54..c50e7c2 100644 --- a/.config/fish/config.fish +++ b/.config/fish/config.fish @@ -6,6 +6,9 @@ set TERM "xterm-256color" set EDITOR "emacsclient -t -a ''" set VISUAL "emacsclient -c -a emacs" set QT_QPA_PLATFORMTHEME "qt6ct" +set SSH_AUTH_SOCK $XDG_RUNTIME_DIR/ssh-agent.socket +set GNUPGHOME "~/enc/keys/gnupg" +set LEDGER_FILE "~/enc/org/hledger/2023.journal" set -x MANPAGER "sh -c 'col -bx | bat -l man -p'" @@ -164,15 +167,6 @@ alias .5='cd ../../../../..' alias vim='nvim' -alias em='/usr/bin/emacs -nw' - -alias emacs="emacsclient -c -a 'emacs'" - -alias doomsync="~/.config/emacs/bin/doom sync" -alias doomdoctor="~/.config/emacs/bin/doom doctor" -alias doomupgrade="~/.config/emacs/bin/doom upgrade" -alias doompurge="~/.config/emacs/bin/doom purge" - alias ls='exa -al --color=always --group-directories-first' alias la='exa -a --color=always --group-directories-first' alias ll='exa -l --color=always --group-directories-first' @@ -200,7 +194,6 @@ alias fgrep='fgrep --color=auto' alias cp="cp -i" alias mv='mv -i' -alias rm='rm -i' alias df='df -h' alias free='free -m' diff --git a/.config/xmobar/tomorrow-night-xmobarrc b/.config/xmobar/tomorrow-night-xmobarrc index a280f0b..674cb62 100644 --- a/.config/xmobar/tomorrow-night-xmobarrc +++ b/.config/xmobar/tomorrow-night-xmobarrc @@ -32,12 +32,14 @@ Config { , persistent = True , iconRoot = ".config/xmonad/xpm/" -- default: "." , commands = [ + Run UnsafeXMonadLog + , Run StdinReader -- Echos a "penguin" icon in front of the kernel output. -- Run Com "echo" ["\xf17c"] "penguin" 3600 -- Get kernel version (script found in .local/bin) -- , Run Com ".local/bin/kernel" [] "kernel" 36000 -- Cpu usage in percent - Run Cpu ["-t", "\xf108 cpu: %","-H","50","--high","red"] 20 + , Run Cpu ["-t", "\xf108 cpu: %","-H","50","--high","red"] 20 -- Ram used number and percent , Run Memory ["-t", "\xf233 mem: M %"] 20 -- Disk space free @@ -59,8 +61,7 @@ Config { -- Script that dynamically adjusts xmobar padding depending on number of trayer icons. , Run Com ".config/xmobar/trayer-padding-icon.sh" [] "trayerpad" 20 -- Prints out the left side items such as workspaces, layout, etc. - , Run UnsafeStdinReader ] , sepChar = "%" , alignSep = "}{" - , template = "%UnsafeStdinReader% }{ %cpu% %memory% %disku% %uparrow% %uptime% %baticon% %battery% %date% %trayerpad%" + , template = "%UnsafeXMonadLog% }{ %cpu% %memory% %disku% %uparrow% %uptime% %baticon% %battery% %date% %trayerpad%" diff --git a/.config/xmobar/xmobarrc b/.config/xmobar/xmobarrc index 5c67dd3..5b1eff4 100644 --- a/.config/xmobar/xmobarrc +++ b/.config/xmobar/xmobarrc @@ -23,38 +23,23 @@ Config { font = "xft:Ubuntu:weight=bold:size=8:antialias=true:hinting , persistent = True , iconRoot = ".xmonad/xpm/" -- default: "." , commands = [ - -- Echos a "penguin" icon in front of the kernel output. Run Com "echo" ["\xf17c"] "penguin" 3600 - -- Get kernel version (script found in .local/bin) , Run Com ".local/bin/kernel" [] "kernel" 36000 - -- Cpu usage in percent , Run Cpu ["-t", "\xf108 cpu: (%)","-H","50","--high","red"] 20 - -- Ram used number and percent , Run Memory ["-t", "\xf233 mem: M (%)"] 20 - -- Disk space free , Run DiskU [("/", "\xf0c7 /: free")] [] 60 , Run DiskU [("/home/", "\xf0c7 /home: free")] [] 60 - - -- Echos an "up arrow" icon in front of the uptime output. , Run Com "echo" ["\xf0aa"] "uparrow" 3600 - -- Uptime , Run Uptime ["-t", "uptime: d h"] 360 - -- Echos a "bell" icon in front of the pacman updates. , Run Com "echo" ["\xf0f3"] "bell" 3600 - -- Check for pacman updates (script found in .local/bin) , Run Com ".local/bin/pacupdate" [] "pacupdate" 36000 - -- Echos a "battery" icon in front of the pacman updates. , Run Com "echo" ["\xf242"] "baticon" 3600 - -- Battery , Run BatteryP ["BAT0"] ["-t", " (%)"] 360 - -- Time and date , Run Date "\xf017 %b %d %Y - (%H:%M) " "date" 50 - -- Script that dynamically adjusts xmobar padding depending on number of trayer icons. , Run Com ".config/xmobar/trayer-padding-icon.sh" [] "trayerpad" 20 - -- Prints out the left side items such as workspaces, layout, etc. - , Run UnsafeXMonadLog + , Run XMonadLog ] , sepChar = "%" , alignSep = "}{" - , template = " | %UnsafeXmonadLog% }{ %penguin% %kernel% %cpu% %memory% %disku% %uparrow% %uptime% %bell% %pacupdate% %baticon% %battery% %date% %trayerpad%" + , template = "| %XmonadLog }{ %penguin% %kernel% %cpu% %memory% %disku% %uparrow% %uptime% %bell% %baticon% %battery% %date% %trayerpad%" } diff --git a/.config/xmonad/README.org b/.config/xmonad/README.org index 9781991..1cac534 100644 --- a/.config/xmonad/README.org +++ b/.config/xmonad/README.org @@ -19,10 +19,10 @@ - [[#border-width-and-spacing][Border Width and Spacing]] - [[#layouts-1][Layouts]] - [[#theming-for-tabs-sublayout][Theming for tabs (sub)layout]] - - [[#clickable-workspaces-in-xmobar][Clickable workspaces in XMobar]] - [[#workspace-definitions][Workspace definitions]] - [[#manage-hook][Manage Hook]] - [[#startup-hook][Startup Hook]] + - [[#pretty-print-for-xmobar][Pretty Print for XMobar]] - [[#main-xmonad-loop][Main XMonad loop]] - [[#xmobar][XMobar]] - [[#xmonad--managehook][XMonad & manageHook]] @@ -131,6 +131,7 @@ import XMonad.Prompt.OrgMode #+begin_src haskell import XMonad.Util.Dmenu import XMonad.Util.EZConfig +import XMonad.Util.Loggers import XMonad.Util.NamedActions import XMonad.Util.NamedScratchpad import XMonad.Util.Run (runProcessWithInput, safeSpawn, spawnPipe) @@ -212,11 +213,6 @@ myTabTheme = def { fontName = "xft:Iosevka-9" #+end_src -** Clickable workspaces in XMobar -#+begin_src haskell -mySB = statusBarProp "xmobar" (clickablePP xmobarPP) -#+end_src - ** Workspace definitions #+begin_src haskell @@ -224,13 +220,9 @@ myWorkspaces = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "e", "w", "g", "d", "b", "j", "f", "o", "u", "r", "s", "t", "h", "v", "y", "n", "a", "i", "l", - "x", "c", "m", "k", "q", "z", "p" - ] + "x", "c", "m", "k", "q", "z", "p"] -myWorkspaceIndices = M.fromList $ zipWith (,) myWorkspaces [1..] -- (,) == \x y -> (x,y) -clickable ws = ""++ws++"" - where i = fromJust $ M.lookup ws myWorkspaceIndices #+end_src ** Manage Hook @@ -311,23 +303,67 @@ Emacs daemon for emacsclient. spawnOn "e" "/usr/bin/emacsclient" spawnOn "j" "keepassxc" #+end_src + + +** Pretty Print for XMobar + +#+begin_src haskell +myXmobarPP :: PP +myXmobarPP = def + { ppSep = magenta " " + , ppTitleSanitize = xmobarStrip + , ppCurrent = xmobarBorder "Top" "#8be9fd" 2 + , ppHidden = white + , ppHiddenNoWindows = lowWhite + , ppUrgent = red . wrap (yellow "!") (yellow "!") + , ppOrder = \[ws, l, _, wins] -> [ws, l, wins] + , ppExtras = [logTitles formatFocused formatUnfocused] + } + where + formatFocused = wrap (white "[") (white "]") . magenta . ppWindow + formatUnfocused = wrap (lowWhite "[") (lowWhite "]") . blue . ppWindow + + -- | Windows should have *some* title, which should not not exceed a + -- sane length. + ppWindow :: String -> String + ppWindow = xmobarRaw . (\w -> if null w then "untitled" else w) . shorten 30 + + blue, lowWhite, magenta, red, white, yellow :: String -> String + magenta = xmobarColor "#ff79c6" "" + blue = xmobarColor "#bd93f9" "" + white = xmobarColor "#f8f8f2" "" + yellow = xmobarColor "#f1fa8c" "" + red = xmobarColor "#ff5555" "" + lowWhite = xmobarColor "#bbbbbb" "" + +#+end_src +#+begin_src haskell +xmobar0 = statusBarProp "xmobar -x 0 ~/.config/xmobar/xmobarrc" (pure myXmobarPP) +xmobar1 = statusBarProp "xmobar -x 1 ~/.config/xmobar/xmobarrc" (pure myXmobarPP) +xmobar2 = statusBarProp "xmobar -x 2 ~/.config/xmobar/xmobarrc" (pure myXmobarPP) +#+end_src * Main XMonad loop #+begin_src haskell main :: IO () main = do #+end_src + ** XMobar Launching three instances of xmobar on their monitors. -#+begin_src haskell - xmproc0 <- spawnPipe ("xmobar -x 0 $HOME/.config/xmobar/tomorrow-night-xmobarrc") - xmproc1 <- spawnPipe ("xmobar -x 1 $HOME/.config/xmobar/tomorrow-night-xmobarrc") - xmproc2 <- spawnPipe ("xmobar -x 2 $HOME/.config/xmobar/tomorrow-night-xmobarrc") - +#+begin_src haskell :tangle no + xmproc0 <- spawnPipe ("xmobar -x 0 $HOME/.config/xmobar/xmobarrc") + xmproc1 <- spawnPipe ("xmobar -x 1 $HOME/.config/xmobar/xmobarrc") + xmproc2 <- spawnPipe ("xmobar -x 2 $HOME/.config/xmobar/xmobarrc") #+end_src + ** XMonad & manageHook #+begin_src haskell - xmonad $ ewmh $ docks $ def + xmonad + $ ewmh + $ docks + $ withSB (xmobar0 <> xmobar1 <> xmobar2) + $ def { manageHook = myManageHook <+> manageDocks #+end_src *** handleEventHook @@ -352,26 +388,30 @@ This lets alacritty be swallowed when it opens a GUI application. , borderWidth = myBorderWidth , normalBorderColor = colorBack , focusedBorderColor = color15 + , logHook = updatePointer (0.5, 0.5) (0, 0) + } #+end_src *** logHook Define logHook. ppOutput streams into the three instances of XMobar. -#+begin_src haskell - , logHook = dynamicLogWithPP xmobarPP +#+begin_src haskell :tangle no + + , logHook = dynamicLogWithPP { ppOutput = \x -> hPutStrLn xmproc0 x >> hPutStrLn xmproc1 x >> hPutStrLn xmproc2 x + } #+end_src **** Colors/ clicks -#+begin_src haskell +#+begin_src haskell :tangle no , ppCurrent = xmobarColor color06 "" . wrap ("") "" - , ppVisible = xmobarColor color06 "" . clickable + , ppVisible = xmobarColor color06 "" , ppHidden = xmobarColor color05 "" . wrap - ("") "" . clickable - , ppHiddenNoWindows = xmobarColor color05 "" . clickable + ("") "" + , ppHiddenNoWindows = xmobarColor color05 "" #+end_src **** Window Title, Separators, etc. -#+begin_src haskell +#+begin_src haskell :tangle no -- Title of active window , ppTitle = xmobarColor colorFore "" . shorten 48 -- Separator character diff --git a/.config/xmonad/xmonad.hs b/.config/xmonad/xmonad.hs index 99f5cc0..cb9cf39 100644 --- a/.config/xmonad/xmonad.hs +++ b/.config/xmonad/xmonad.hs @@ -62,6 +62,7 @@ import XMonad.Prompt.OrgMode import XMonad.Util.Dmenu import XMonad.Util.EZConfig +import XMonad.Util.Loggers import XMonad.Util.NamedActions import XMonad.Util.NamedScratchpad import XMonad.Util.Run (runProcessWithInput, safeSpawn, spawnPipe) @@ -107,19 +108,11 @@ myTabTheme = def { fontName = "xft:Iosevka-9" , activeTextColor = colorBack , inactiveTextColor = colorFore } -mySB = statusBarProp "xmobar" (clickablePP xmobarPP) - myWorkspaces = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "e", "w", "g", "d", "b", "j", "f", "o", "u", "r", "s", "t", "h", "v", "y", "n", "a", "i", "l", - "x", "c", "m", "k", "q", "z", "p" - ] - -myWorkspaceIndices = M.fromList $ zipWith (,) myWorkspaces [1..] -- (,) == \x y -> (x,y) - -clickable ws = ""++ws++"" - where i = fromJust $ M.lookup ws myWorkspaceIndices + "x", "c", "m", "k", "q", "z", "p"] myManageHook = manageSpawn <> composeAll [ className =? "confirm" --> doFloat @@ -133,7 +126,6 @@ myManageHook = manageSpawn <> composeAll , className =? "splash" --> doFloat , className =? "toolbar" --> doFloat , className =? "zoom" --> doFloat - , className =? "lxqt-openssh-askpass" --> doFloat , className =? "Yad" --> doCenterFloat , (className =? "firefox" <&&> resource =? "Dialog") --> doFloat -- Float Firefox Dialog , isFullscreen --> doFullFloat @@ -161,22 +153,54 @@ myStartupHook = do spawnOnce "/usr/bin/emacs --daemon" - spawnOnOnce "1" "firefox-developer-edition" - spawnOnOnce "2" "evolution" - spawnOnOnce "3" "discord" - spawnOnOnce "6" "google-chrome-stable --profile-directory='Profile 1'" - spawnOnOnce "9" "steam" - spawnOnOnce "e" "/usr/bin/emacsclient" - spawnOnOnce "j" "keepassxc ~/enc/keys/Passwords.kdbx" + spawnOn "1" "firefox-developer-edition" + spawnOn "2" "evolution" + spawnOn "9" "steam" + spawnOn "3" "discord" + spawnOn "6" "google-chrome-stable" + spawnOn "e" "/usr/bin/emacsclient" + spawnOn "j" "keepassxc" + +myXmobarPP :: PP +myXmobarPP = def + { ppSep = magenta " " + , ppTitleSanitize = xmobarStrip + , ppCurrent = xmobarBorder "Top" "#8be9fd" 2 + , ppHidden = white + , ppHiddenNoWindows = lowWhite + , ppUrgent = red . wrap (yellow "!") (yellow "!") + , ppOrder = \[ws, l, _, wins] -> [ws, l, wins] + , ppExtras = [logTitles formatFocused formatUnfocused] + } + where + formatFocused = wrap (white "[") (white "]") . magenta . ppWindow + formatUnfocused = wrap (lowWhite "[") (lowWhite "]") . blue . ppWindow + + -- | Windows should have *some* title, which should not not exceed a + -- sane length. + ppWindow :: String -> String + ppWindow = xmobarRaw . (\w -> if null w then "untitled" else w) . shorten 30 + + blue, lowWhite, magenta, red, white, yellow :: String -> String + magenta = xmobarColor "#ff79c6" "" + blue = xmobarColor "#bd93f9" "" + white = xmobarColor "#f8f8f2" "" + yellow = xmobarColor "#f1fa8c" "" + red = xmobarColor "#ff5555" "" + lowWhite = xmobarColor "#bbbbbb" "" + +xmobar0 = statusBarProp "xmobar -x 0 ~/.config/xmobar/xmobarrc" (pure myXmobarPP) +xmobar1 = statusBarProp "xmobar -x 1 ~/.config/xmobar/xmobarrc" (pure myXmobarPP) +xmobar2 = statusBarProp "xmobar -x 2 ~/.config/xmobar/xmobarrc" (pure myXmobarPP) main :: IO () main = do - xmproc0 <- spawnPipe ("xmobar -x 0 $HOME/.config/xmobar/tomorrow-night-xmobarrc") - xmproc1 <- spawnPipe ("xmobar -x 1 $HOME/.config/xmobar/tomorrow-night-xmobarrc") - xmproc2 <- spawnPipe ("xmobar -x 2 $HOME/.config/xmobar/tomorrow-night-xmobarrc") - - xmonad $ ewmh $ docks $ def + xmonad + $ ewmh + $ docks + $ withSB (xmobar0 <> xmobar1 <> xmobar2) + $ def { manageHook = myManageHook <+> manageDocks , handleEventHook = swallowEventHook (className =? "Alacritty" <||> className =? "st-256color" <||> className =? "XTerm") (return True) @@ -196,30 +220,8 @@ main = do , borderWidth = myBorderWidth , normalBorderColor = colorBack , focusedBorderColor = color15 - - , logHook = dynamicLogWithPP xmobarPP - { ppOutput = \x -> hPutStrLn xmproc0 x - >> hPutStrLn xmproc1 x - >> hPutStrLn xmproc2 x - - , ppCurrent = xmobarColor color06 "" . wrap - ("") "" - , ppVisible = xmobarColor color06 "" . clickable - , ppHidden = xmobarColor color05 "" . wrap - ("") "" . clickable - , ppHiddenNoWindows = xmobarColor color05 "" . clickable - - -- Title of active window - , ppTitle = xmobarColor colorFore "" . shorten 48 - -- Separator character - , ppSep = " | " - -- Urgent workspace - , ppUrgent = xmobarColor color02 "" . wrap "!" "!" - -- Adding # of windows on current workspace to the bar - , ppExtras = [windowCount] - -- order of things in xmobar - , ppOrder = \(ws:l:t:ex) -> [ws,l]++ex++[t] - } >> updatePointer (0.5, 0.5) (0.0, 0.0) } + , logHook = updatePointer (0.5, 0.5) (0, 0) + } `additionalKeysP` [ ("M-s 1", (windows $ W.greedyView $ myWorkspaces !! 0)) @@ -328,7 +330,7 @@ main = do , ("C-S-M1-j", onGroup W.focusUp') , ("C-S-M1-y", onGroup W.focusDown') - , ("C-M1-S-0", sequence_ [spawn "xmonad --recompile", spawn "xmonad --restart"]) + , ("C-M1-S-0", sequence_ [spawn "xmonad --restart", spawn "xmonad --recompile"]) , ("M-S-M1-C-0", io exitSuccess) , ("S-C-M1-q", kill1) , ("M-S-C-M1-q", killAll) @@ -337,16 +339,14 @@ main = do , ("M-e", spawn "emacsclient -c -a 'emacs'") , ("M-", spawn "alacritty") , ("M-S-", spawn "feh --randomize --bg-fill /usr/share/backgrounds/archlinux/*") + , ("M-", spawn "dm-maim") , ("", spawn "flameshot gui") - , ("M-c i", orgPromptRefileTo def "Inbox" "TODO" "~/enc/org/phil.org") - + , ("M-c i", orgPrompt def "TODO" "~/enc/org/inbox.org") + , ("M-c l", orgPromptPrimary def "LINK" "~/enc/org/inbox.org") + , ("M-c n", orgPrompt def "NOTE" "~/enc/org/inbox.org") , ("M-c p", orgPromptRefile def "TODO" "~/enc/org/phil.org") - , ("M-c n", orgPromptRefileTo def "Inbox" "NOTE" "~/enc/org/phil.org") - - , ("M-c l", orgPromptPrimary def "" "~/enc/org/bookmarks.org") - -- Time! Timestamps! , ("M-w l", spawn "sleep 0.5 && xdotool type \"$(date +'%Y.%m.%d %H:%M:%S %Z')\"") , ("M-w e", spawn "sleep 0.5 && xdotool type \"$(TZ=America/New_York date +'%Y.%m.%d %H:%M:%S %Z')\"")