InnocentZero's Treasure Chest

HomeFeedAbout MeList of interesting people

08 Apr 2025

My System Config

Step 1: Get the latest Arch ISO

Here is the download page. Fetch a copy.

Step 2: Prepare a USB

Simplest method of all is to copy the ISO to the pen drive. Alternately, use Ventoy. If you use ventoy, you can turn on secure boot support.

Step 3: Boot the ISO

Turn off secure-boot and then boot into the system using the ISO.

Step 3.1: Connect to the internet

Use iwd

TL;DR

iwctl will open a prompt that also has autocomplete.

  • device list
  • device /name/ set-property Powered on
  • adapter /adapter/ set-property Powered on
  • station /name/ scan
  • station /name/ get-networks
  • station /name/ connect SSID

Step 3.2: Get latest version of archinstall

pacman -Sy archinstall

Step 4: Install using archinstall

[2025-03-24 Mon 22:26] <- Step 3.2: Get latest version of archinstall

In the archinstall menu:

arch_install.png

Choose global mirrors, choose disk config with btrfs and zstd enabled alongside using default subvolumes, add encryption to the btrfs partition, enable swap on zram, use systemd-boot as bootloader, enable Unified kernel images, DO NOT set a root password, add a sudo user, in profile select Desktop > Sway, select polkit to be the seat access, change greeter to sddm, select pipewire for audio, select linux kernel (hardened sucks ass), select network-manager for network config, install it, and wait.

Step 5: Post install steps from ISO

Once done, use the ISO and mount the encrypted drive as follows:

cryptsetup --allow-discards --persistent open /path/to/dev root

This will allow Step 11: zram setup and fstrim to be used.

After this, mount the root partition and NOT THE SUBVOLUME! This is needed for Step 7: Post package drama I: Kernel

mount /dev/mapper/root /mnt

You should see a couple of folders (subvols actually) when you do it. Now run

btrfs subvolume set-default /mnt/@

Now unmount and remount and check if root subvolume was properly mounted directly or not. We need to do this because of this. And we need the default later on here.

Step 6: Packages

Install git. Clone paru's repo and cd into it and run makepkg -si. This should install paru. Now install emacs and somehow run org babel tangle from CLI. You might want to move some of the files to their respective places after you change the username.

Step 7: Post package drama I: Kernel

[2025-03-24 Mon 22:26] <- Step 5: Post install steps from ISO

mkinitcpio

Now we need to make a lot of tweaks over here. First up, edit /etc/mkinitcpio.conf and change the contents to something like this:

MODULES=(btrfs)
BINARIES=()
FILES=()
HOOKS=(base systemd autodetect microcode keyboard modconf kms sd-vconsole block sd-encrypt filesystems fsck)

The module array is needed for the filesystem. The hooks array has some important elements:

  • base: needed as a dep for fsck (since it pulls /bin/sh, otherwise pretty useless)
  • systemd: actual init
  • sd-vconsole: lets you type the encrypt pass
  • sd-encrypt: will autodecrypt based on a fixed format file

linux.preset

Change it to this:

# mkinitcpio preset file for the 'linux' package

#ALL_config="/etc/mkinitcpio.conf"
ALL_kver="/boot/vmlinuz-linux"
microcode=(/boot/*-ucode.img)

PRESETS=('default' 'fallback')

#default_config="/etc/mkinitcpio.conf"
#default_image="/boot/initramfs-linux.img"
default_uki="/boot/EFI/Linux/arch-linux.efi"
default_options="--splash=/usr/share/systemd/bootctl/splash-arch.bmp"

#fallback_config="/etc/mkinitcpio.conf"
#fallback_image="/boot/initramfs-linux-fallback.img"
fallback_uki="/boot/EFI/Linux/arch-linux-fallback.efi"
fallback_options="-S autodetect"

Regenerate the uki.

Kernel cmdline and crypttab

[2025-03-24 Mon 22:26] <- Step 5: Post install steps from ISO

Now, we have the fstab set up for us already by archinstall script. We need to set up the crypttab.initramfs to be able to unlock the root partition at boot.

These are the contents of /etc/crypttab.initramfs

root /dev/path_to_dev none tpm2-device=auto

For kernel cmdline, you need a single option, quiet (to suppress the noisy boot messages). In my case the file happened to be /etc/kernel/cmdline, it could be anywhere mentioned here though.

Secure Boot using sbctl

Over here the archwiki and upstream README pretty much suffice.

Make sure to run sbctl enroll-keys -m to enroll the microsoft keys as well!!

Add an mkinitcpio post hook that signs all the enrolled binaries as well

cat << EOF > /etc/initcpio/post/uki-sbctl
#!/usr/bin/env bash
echo "signing all files"
sbctl sign-all -g
EOF
chmod +x /etc/initcpio/post/uki-sbctl

This assumes that all the files were already listed in sbctl's database.

Unlocking LUKS via TPM

Now add a second slot to the LUKS container and enroll a key to bind with TPM (make sure secure boot is on for this).

Rest, follow this section.

I personally bound it to pcr7 only and use a pin alongside. I don't have much idea on what's a good combination.

Step 8: Post package drama II: Remaining packages

Install rustup for Rust development.

Flatpak and pipx should be installed on their own after this.

Step 9: Meta stuff to be set up

  • xdg-user-dirs: xdg-user-dirs-update
  • copy the lock@.service from dotfiles to /etc/systemd/system/
    • Run systemctl enable lock@(id -u)
  • Copy issue and paru.conf to /etc
  • Move over the rest of the stuff mentioned in the dotfiles.
  • Copy over the gtk-3.0 and gtk-4.0 themes to all the flatpak config folders.
  • Move librewolf's chrome folder to its designated spot.
  • Refresh font-cache: fc-cache -fv
  • Add insults to sudo
  • Run topgrade once to sync everything
  • rebuild bat's cache: bat cache --build
  • Copy over the cursor theme to two different locations: ~/.icons and ~/.local/share/icons. Yes both places. It doesn't work for flatpaks otherwise.
    • Download any you want. I use oreo grey cursors.
  • From the config folder, copy the themes folder to ~/.local/share/themes/. I took a massive pain to set that shit up.

Step 10: Battery, Bluetooth, Music and Firewall

  • Enable bluetooth.service
  • Enable tlp.service and mask systemd-rfkill.{service,socket}
  • Enable ufw.service (defaults are mostly good)

Step 11: zram setup and fstrim

Step 12: pacman related stuff

  • paccache.timer: clears cache often
  • pacman-filesdb-refresh.timer: refreshes packmac-filesystem
  • reflector.timer: refresh mirrorlists based on speed

Step 13: Disable SDDM and other things

I don't use it, as I launch sway straight from tty. systemctl disable sddm.service

Run

  • metapac clean
  • systemctl --user enable idle.service
  • systemctl --user enable bg.service
  • systemctl --user enable cliphist.service
  • systemctl --user enable waybar.service
  • systemctl --user enable wireplumber.service

Step 14: Restart

Bin

This is for validating your network session on IITM subnet from the CLI. I write this in bash because it's helpful for arch/server installations

super_secure_curl() { # shits actually weaker key exchange lmao
    curl -w "%{response_code}\n" --silent --output /dev/null --ciphers DEFAULT@SECLEVEL=1 -k $@
}

read -p "Enter roll number: " roll

stty -echo
read -p "Enter password: " pass
stty echo

response=$(super_secure_curl -c cookies.txt https://netaccess.iitm.ac.in/account/login)
if [ $response == "200" ]; then
    response=$(super_secure_curl -X POST -b cookies.txt --data-raw "userLogin=$roll&userPassword=$pass&submit=" https://netaccess.iitm.ac.in/account/login)
    if [ $response == "302" ]; then
        response=$(super_secure_curl -X POST -b cookies.txt --data-raw "duration=2&approveBtn=" https://netaccess.iitm.ac.in/account/approve)
        if [ $response == "302" ]; then
            printf "\nLogged in!"
        else
            printf "\nFailed!"
        fi
    else
        printf "\nFailed!"
    fi
else
    printf "\nFailed!"
fi

[ -f cookies.txt ] && rm cookies.txt

Bashrc

This is a useful function that makes sure that only one instance of a dir is in $PATH

append_path()  {
    case ":$PATH:" in
        *:"$1":*) ;;
        *)
            PATH="${PATH:+$PATH:}$1"
            ;;
    esac
}

Rest of path madness

test -r '/home/innocentzero/.opam/opam-init/init.sh' && . '/home/innocentzero/.opam/opam-init/init.sh' > /dev/null 2> /dev/null || true

append_path '/home/innocentzero/.local/bin/'
append_path '/home/innocentzero/bin/'
append_path '/home/innocentzero/.cargo/bin/'
append_path '/home/innocentzero/.ghcup/bin'
append_path '/home/innocentzero/.cabal/bin'

export PATH

# unload the path function
unset -f append_path

some important env exports

# important stuff
export TERM=kitty
export TERMINAL=kitty
export EDITOR=helix

# set bat as the highlighter for man
export MANPAGER="sh -c 'col -bx | bat -l man -p'"
export MANROFFOPT="-c"

# Qt decorations off
export QT_WAYLAND_FORCE_DPI=physical
export QT_WAYLAND_DISABLE_WINDOWDECORATION=1
export _JAVA_AWT_WM_NONREPARENTING=1

export GPG_TTY=$(tty)

other helpful initializations

# init zoxide
eval "$(zoxide init bash)"

# in place of command -h
help() {
    "$@" --help 2>&1 | bathelp
}

. "$HOME/.cargo/env"

[ -f "/home/innocentzero/.ghcup/env" ] && . "/home/innocentzero/.ghcup/env" # ghcup-env

Start up niri at tty0 (This is how I start up)

# set env variables for sway to work properly
if [ "$(tty)" = "/dev/tty1" ]; then

    # Make sure there's no already running session.
    if systemctl --user -q is-active niri.service; then
        echo 'A niri session is already running.'
        exit 1
    fi

    # Reset failed state of all user units.
    systemctl --user reset-failed

    # Import the login manager environment.
    systemctl --user import-environment

    # DBus activation environment is independent from systemd. While most of
    # dbus-activated services are already using `SystemdService` directive, some
    # still don't and thus we should set the dbus environment with a separate
    # command.
    if hash dbus-update-activation-environment 2> /dev/null; then
        dbus-update-activation-environment --all
    fi

    # Start niri and wait for it to terminate.
    systemctl --user --wait start niri.service

    # Force stop of graphical-session.target.
    systemctl --user start --job-mode=replace-irreversibly niri-shutdown.target

    # Unset environment that we've set.
    systemctl --user unset-environment WAYLAND_DISPLAY XDG_SESSION_TYPE XDG_CURRENT_DESKTOP NIRI_SOCKET
fi

Dconf

dconf write "/org/gnome/desktop/interface/gtk-theme" "'adw-gtk3-dark'"

Make sure the themes folder is included in the right place.

Emacs

theme.el

;;; doom-themes-base.el --- base faces for all doom themes -*- lexical-binding: t; -*-
;;; Commentary: foo
;;; Code:

;; These are used as a basis for every Doom theme defined with `def-doom-theme',
;; as a set of reasonble defaults. They are intended to be overidden where it
;; makes sense to.
(defvar doom-themes-base-faces
  '((bold
     :weight 'bold
     :foreground
     (if bold
         'unspecified
       base8))
    (bold-italic :inherit '(bold italic))
    (italic :slant 'italic)
    (escape-glyph :foreground cyan)
    (default :background bg :foreground fg)
    (fringe :inherit 'default :foreground base4)
    (region
     :background region
     :distant-foreground (doom-darken fg 0.2)
     :extend t)
    (highlight
     :background highlight
     :foreground base0
     :distant-foreground base8)
    (cursor :background highlight)
    (shadow :foreground base5)
    (minibuffer-prompt :foreground highlight)
    (tooltip :background bg-alt :foreground fg)
    (secondary-selection :background grey :extend t)
    (lazy-highlight
     (&dark
      :background (doom-darken highlight 0.3)
      :foreground base8
      :distant-foreground base0
      :weight 'bold)
     (&light
      :background (doom-blend bg highlight 0.7)
      :foreground base0
      :distant-foreground base8))
    (match :foreground green :background base0 :weight 'bold)
    (trailing-whitespace :background red)
    (nobreak-space :inherit 'escape-glyph :underline t)
    (vertical-border
     :background vertical-bar
     :foreground vertical-bar)
    (link :foreground highlight :underline t :weight 'bold)
    (error :foreground error)
    (warning :foreground warning)
    (success :foreground success)
    ;;;; font-lock-* faces
    (font-lock-builtin-face :foreground builtin)
    (font-lock-comment-face :foreground comments)
    (font-lock-comment-delimiter-face
     :inherit 'font-lock-comment-face)
    (font-lock-doc-face
     :inherit 'font-lock-comment-face
     :foreground doc-comments)
    (font-lock-constant-face :foreground constants)
    (font-lock-function-name-face :foreground functions)
    (font-lock-keyword-face :foreground keywords)
    (font-lock-string-face :foreground strings)
    (font-lock-type-face :foreground type)
    (font-lock-variable-name-face :foreground variables)
    (font-lock-number-face :foreground numbers)
    (font-lock-warning-face :inherit 'warning)
    (font-lock-negation-char-face
     :inherit 'bold
     :foreground operators)
    (font-lock-preprocessor-face :inherit 'bold :foreground operators)
    (font-lock-preprocessor-char-face
     :inherit 'bold
     :foreground operators)
    (font-lock-regexp-grouping-backslash
     :inherit 'bold
     :foreground operators)
    (font-lock-regexp-grouping-construct
     :inherit 'bold
     :foreground operators)
    ;;;; mode-line / header-line
    (mode-line :background bg :foreground fg :distant-foreground bg)
    (mode-line-active :inherit 'mode-line)
    (mode-line-inactive
     :background bg-alt
     :foreground fg-alt
     :distant-foreground bg-alt)
    (mode-line-emphasis :foreground highlight :distant-foreground bg)
    (mode-line-highlight :inherit 'highlight :distant-foreground bg)
    (mode-line-buffer-id :weight 'bold)
    (header-line :inherit 'mode-line)
    (header-line-highlight :inherit 'mode-line-highlight)
    ;;;; tab-line/tab-bar (Emacs 27+)
    (tab-line :background bg-alt :foreground bg-alt)
    (tab-line-tab :background bg :foreground fg)
    (tab-line-tab-inactive
     :inherit 'tab-line-tab
     :background bg-alt
     :foreground fg-alt)
    (tab-line-tab-inactive-alternate :inherit 'tab-line-tab-inactive)
    (tab-line-tab-current :background bg :foreground fg)
    ;; (tab-line-special )
    (tab-line-highlight :inherit 'tab-line-tab)
    (tab-line-close-highlight :foreground highlight)
    ((tab-bar &inherit tab-line))
    ((tab-bar-tab &inherit tab-line-tab))
    ((tab-bar-tab-inactive &inherit tab-line-tab-inactive))
    ;;;; Line numbers
    ;; 1. Line number faces must explicitly disable its text style attributes
    ;;    because nearby faces may "bleed" into the line numbers otherwise.
    ;; 2. All other line number plugin faces should &inherit from these.
    (line-number
     :inherit 'default
     :foreground base5
     :distant-foreground 'unspecified
     :weight 'normal
     :italic 'unspecified
     :underline 'unspecified
     :strike-through 'unspecified)
    (line-number-current-line
     :inherit '(hl-line default)
     :foreground fg
     :distant-foreground 'unspecified
     :weight 'normal
     :italic 'unspecified
     :underline 'unspecified
     :strike-through 'unspecified)

    ;;;; --- Package faces ----------------------
    ;; What follows are faces for all the packages doom-themes explicitly
    ;; supports. Headings are formatted as such:
    ;;
    ;;   PACKAGE [<built-in>] [<modes:some-mode[, ...]>]
    ;;
    ;; The purpose of this is to make it easy to jump to via `imenu', or search
    ;; for with isearch, swiper, etc.
    ;;;; agda-mode <modes:agda2-mode>
    (agda2-highlight-keyword-face :inherit 'font-lock-keyword-face)
    (agda2-highlight-string-face :inherit 'font-lock-string-face)
    (agda2-highlight-number-face :inherit 'font-lock-string-face)
    (agda2-highlight-symbol-face
     :inherit 'font-lock-variable-name-face)
    (agda2-highlight-primitive-type-face
     :inherit 'font-lock-type-face)
    (agda2-highlight-bound-variable-face
     :inherit 'font-lock-variable-name-face)
    (agda2-highlight-inductive-constructor-face
     :inherit 'font-lock-type-face)
    (agda2-highlight-coinductive-constructor-face
     :inherit 'font-lock-type-face)
    (agda2-highlight-datatype-face :inherit 'font-lock-type-face)
    (agda2-highlight-field-face :inherit 'font-lock-type-face)
    (agda2-highlight-function-face
     :inherit 'font-lock-function-name-face)
    (agda2-highlight-module-face
     :inherit 'font-lock-variable-name-face)
    (agda2-highlight-postulate-face :inherit 'font-lock-type-face)
    (agda2-highlight-primitive-face :inherit 'font-lock-type-face)
    (agda2-highlight-macro-face
     :inherit 'font-lock-function-name-face)
    (agda2-highlight-record-face :inherit 'font-lock-type-face)
    (agda2-highlight-error-face :inherit 'font-lock-warning-face)
    (agda2-highlight-dotted-face
     :inherit 'font-lock-variable-name-face)
    (agda2-highlight-unsolved-meta-face
     :inherit 'font-lock-warning-face)
    (agda2-highlight-unsolved-constraint-face
     :inherit 'font-lock-warning-face)
    (agda2-highlight-termination-problem-face
     :inherit 'font-lock-warning-face)
    (agda2-highlight-positivity-problem-face
     :inherit 'font-lock-warning-face)
    (agda2-highlight-incomplete-pattern-face
     :inherit 'font-lock-warning-face)
    (agda2-highlight-typechecks-face :inherit 'font-lock-warning-face)
    ;;;; auctex <modes:latex-mode>
    (font-latex-bold-face :inherit 'bold)
    (font-latex-italic-face :inherit 'italic)
    (font-latex-math-face :foreground blue)
    (font-latex-sedate-face :inherit 'font-lock-keyword-face)
    (font-latex-sectioning-0-face
     :foreground blue
     :weight 'ultra-bold)
    (font-latex-sectioning-1-face
     :foreground magenta
     :weight 'semi-bold)
    (font-latex-sectioning-2-face
     :foreground violet
     :weight 'semi-bold)
    (font-latex-sectioning-3-face
     :foreground (doom-lighten blue 0.3)
     :weight 'semi-bold)
    (font-latex-sectioning-4-face
     :foreground (doom-lighten magenta 0.3)
     :weight 'semi-bold)
    (font-latex-sectioning-5-face
     :foreground (doom-lighten violet 0.3)
     :weight 'semi-bold)
    (font-latex-script-char-face :foreground dark-blue)
    (font-latex-string-face :inherit 'font-lock-string-face)
    (font-latex-warning-face :inherit 'font-lock-warning-face)
    (font-latex-verbatim-face
     :inherit 'fixed-pitch
     :foreground violet
     :slant 'italic)
    (TeX-error-description-error :inherit 'error :weight 'bold)
    (TeX-error-description-warning :inherit 'warning :weight 'bold)
    (TeX-error-description-tex-said :inherit 'success :weight 'bold)
    ;;;; alert
    (alert-high-face :inherit bold :foreground warning)
    (alert-low-face :foreground grey)
    (alert-moderate-face :inherit bold :foreground fg-alt)
    (alert-trivial-face :foreground doc-comments)
    (alert-urgent-face :inherit bold :foreground error)
    ;;;; all-the-icons
    (all-the-icons-blue :foreground blue)
    (all-the-icons-blue-alt :foreground teal)
    (all-the-icons-cyan :foreground cyan)
    (all-the-icons-cyan-alt :foreground cyan)
    (all-the-icons-dblue :foreground dark-blue)
    (all-the-icons-dcyan :foreground dark-cyan)
    (all-the-icons-dgreen :foreground (doom-darken green 0.3))
    (all-the-icons-dmaroon :foreground (doom-darken magenta 0.3))
    (all-the-icons-dorange :foreground (doom-darken orange 0.3))
    (all-the-icons-dpink :foreground (doom-lighten red 0.15))
    (all-the-icons-dpurple :foreground (doom-darken violet 0.3))
    (all-the-icons-dred :foreground (doom-darken red 0.3))
    (all-the-icons-dsilver :foreground (doom-lighten grey 0.1))
    (all-the-icons-dyellow :foreground (doom-darken yellow 0.3))
    (all-the-icons-green :foreground green)
    (all-the-icons-lblue :foreground (doom-lighten blue 0.3))
    (all-the-icons-lcyan :foreground (doom-lighten cyan 0.3))
    (all-the-icons-lgreen :foreground (doom-lighten green 0.3))
    (all-the-icons-lmaroon :foreground (doom-lighten magenta 0.3))
    (all-the-icons-lorange :foreground (doom-lighten orange 0.3))
    (all-the-icons-lpink :foreground (doom-lighten red 0.55))
    (all-the-icons-lpurple :foreground (doom-lighten violet 0.3))
    (all-the-icons-lred :foreground (doom-lighten red 0.3))
    (all-the-icons-lsilver :foreground (doom-lighten grey 0.7))
    (all-the-icons-lyellow :foreground (doom-lighten yellow 0.3))
    (all-the-icons-maroon :foreground magenta)
    (all-the-icons-orange :foreground orange)
    (all-the-icons-pink :foreground (doom-lighten red 0.35))
    (all-the-icons-purple :foreground violet)
    (all-the-icons-purple-alt
     :foreground (doom-blend violet grey 0.15))
    (all-the-icons-red :foreground red)
    (all-the-icons-red-alt :foreground (doom-blend red grey 0.15))
    (all-the-icons-silver :foreground (doom-lighten grey 0.45))
    (all-the-icons-yellow :foreground yellow)
    ;;;; all-the-icons-dired
    (all-the-icons-dired-dir-face :foreground doc-comments)
    ;;;; annotate
    (annotate-annotation
     :background (doom-blend highlight bg 0.1)
     :foreground doc-comments)
    (annotate-annotation-secondary
     :background (doom-blend green bg 0.1)
     :foreground doc-comments)
    (annotate-highlight
     :background (doom-blend highlight bg 0.1)
     :underline highlight)
    (annotate-highlight-secondary
     :background (doom-blend green bg 0.1)
     :underline green)
    ;;;; ansi-color <built-in>
    (ansi-color-black :foreground bg :background bg)
    (ansi-color-red :foreground red :background red)
    (ansi-color-green :foreground green :background green)
    (ansi-color-yellow :foreground yellow :background yellow)
    (ansi-color-blue :foreground blue :background blue)
    (ansi-color-magenta :foreground magenta :background magenta)
    (ansi-color-cyan :foreground cyan :background cyan)
    (ansi-color-white :foreground fg :background fg)
    ;; This color is used effectively as grayed out foreground text.
    ;; base5 and up have too much contrast in light themes;
    ;; base5 and lower have too little contrast in dark themes.
    (ansi-color-bright-black
     (&light :foreground base4 :background base4)
     (&dark :foreground base6 :background base6))
    (ansi-color-bright-red
     :foreground (doom-lighten red 0.15)
     :background (doom-lighten red 0.15))
    (ansi-color-bright-green
     :foreground (doom-lighten green 0.15)
     :background (doom-lighten green 0.15))
    (ansi-color-bright-yellow
     :foreground (doom-lighten yellow 0.15)
     :background (doom-lighten yellow 0.15))
    (ansi-color-bright-blue
     :foreground (doom-lighten blue 0.15)
     :background (doom-lighten blue 0.15))
    (ansi-color-bright-magenta
     :foreground (doom-lighten magenta 0.15)
     :background (doom-lighten magenta 0.15))
    (ansi-color-bright-cyan
     :foreground (doom-lighten cyan 0.15)
     :background (doom-lighten cyan 0.15))
    (ansi-color-bright-white :foreground base8 :background base8)
    ;;;; anzu
    (anzu-replace-highlight
     :background base0
     :foreground red
     :weight 'bold
     :strike-through t)
    (anzu-replace-to
     :background base0
     :foreground green
     :weight 'bold)
    ;;;; avy
    (avy-background-face :foreground comments)
    (avy-lead-face
     :background highlight
     :foreground bg
     :distant-foreground fg
     :weight 'bold)
    (avy-lead-face-0
     (&all :inherit 'avy-lead-face)
     (&dark :background (doom-lighten highlight 0.3))
     (&light :background (doom-darken highlight 0.3)))
    (avy-lead-face-1
     (&all :inherit 'avy-lead-face)
     (&dark :background (doom-lighten highlight 0.6))
     (&light :background (doom-darken highlight 0.6)))
    (avy-lead-face-2
     (&all :inherit 'avy-lead-face)
     (&dark :background (doom-lighten highlight 0.9))
     (&light :background (doom-darken highlight 0.9)))
    ;;;; bookmark
    (bookmark-face
     :background (doom-blend highlight bg 0.1)
     :extend t)
    ;;;; bookmark+
    (bmkp-*-mark :foreground bg :background yellow)
    (bmkp->-mark :foreground yellow)
    (bmkp-D-mark :foreground bg :background red)
    (bmkp-X-mark :foreground red)
    (bmkp-a-mark :background red)
    (bmkp-bad-bookmark :foreground bg :background yellow)
    (bmkp-bookmark-file :foreground violet :background bg-alt)
    (bmkp-bookmark-list :background bg-alt)
    (bmkp-buffer :foreground blue)
    (bmkp-desktop :foreground bg :background violet)
    (bmkp-file-handler :background red)
    (bmkp-function :foreground green)
    (bmkp-gnus :foreground orange)
    (bmkp-heading :foreground yellow)
    (bmkp-info :foreground cyan)
    (bmkp-light-autonamed :foreground bg-alt :background cyan)
    (bmkp-light-autonamed-region :foreground bg-alt :background red)
    (bmkp-light-fringe-autonamed
     :foreground bg-alt
     :background violet)
    (bmkp-light-fringe-non-autonamed
     :foreground bg-alt
     :background green)
    (bmkp-light-mark :foreground bg :background cyan)
    (bmkp-light-non-autonamed :foreground bg :background violet)
    (bmkp-light-non-autonamed-region :foreground bg :background red)
    (bmkp-local-directory :foreground bg :background violet)
    (bmkp-local-file-with-region :foreground yellow)
    (bmkp-local-file-without-region :foreground comments)
    (bmkp-man :foreground violet)
    (bmkp-no-jump :foreground comments)
    (bmkp-no-local :foreground yellow)
    (bmkp-non-file :foreground green)
    (bmkp-remote-file :foreground orange)
    (bmkp-sequence :foreground blue)
    (bmkp-su-or-sudo :foreground red)
    (bmkp-t-mark :foreground violet)
    (bmkp-url :foreground blue :underline t)
    (bmkp-variable-list :foreground green)
    ;;;; calfw
    (cfw:face-title
     :foreground blue
     :weight 'bold
     :height 2.0
     :inherit 'variable-pitch)
    (cfw:face-header
     :foreground (doom-blend blue bg 0.8)
     :weight 'bold)
    (cfw:face-sunday
     :foreground (doom-blend red bg 0.8)
     :weight 'bold)
    (cfw:face-saturday
     :foreground (doom-blend red bg 0.8)
     :weight 'bold)
    (cfw:face-holiday :background bg-alt :weight 'bold)
    (cfw:face-grid :foreground vertical-bar)
    (cfw:face-periods :foreground yellow)
    (cfw:face-toolbar)
    (cfw:face-toolbar-button-off
     :foreground base6
     :weight 'bold
     :inherit 'variable-pitch)
    (cfw:face-toolbar-button-on
     :foreground blue
     :weight 'bold
     :inherit 'variable-pitch)
    (cfw:face-default-content :foreground fg)
    (cfw:face-day-title :foreground fg :weight 'bold)
    (cfw:face-today-title
     :foreground bg
     :background blue
     :weight 'bold)
    (cfw:face-default-day :weight 'bold)
    (cfw:face-today :weight 'bold)
    (cfw:face-annotation :foreground violet)
    (cfw:face-disable :foreground grey)
    (cfw:face-select :background region)
    ;;;; centaur-tabs
    ((centaur-tabs-default &inherit tab-bar) :box nil)
    ((centaur-tabs-selected &inherit tab-bar-tab) :box nil)
    ((centaur-tabs-unselected &inherit tab-bar-tab-inactive) :box nil)
    (centaur-tabs-selected-modified :background bg :foreground teal)
    (centaur-tabs-unselected-modified
     :background bg-alt
     :foreground teal)
    (centaur-tabs-active-bar-face
     :background
     (if (bound-and-true-p -modeline-bright)
         modeline-bg
       highlight))
    (centaur-tabs-modified-marker-selected
     :foreground
     (if (bound-and-true-p -modeline-bright)
         modeline-bg
       highlight)
     :inherit 'centaur-tabs-selected)
    (centaur-tabs-modified-marker-unselected
     :foreground
     (if (bound-and-true-p -modeline-bright)
         modeline-bg
       highlight)
     :inherit 'centaur-tabs-unselected)
    ;;;; company
    (company-tooltip :inherit 'tooltip)
    (company-tooltip-common
     :foreground highlight
     :distant-foreground base0
     :weight 'bold)
    (company-tooltip-search
     :background highlight
     :foreground bg
     :distant-foreground fg
     :weight 'bold)
    (company-tooltip-search-selection
     :background (doom-darken selection 0.25))
    (company-tooltip-selection :background selection :weight 'bold)
    (company-tooltip-mouse
     :background magenta
     :foreground bg
     :distant-foreground fg)
    (company-tooltip-annotation
     :foreground violet
     :distant-foreground bg)
    (company-scrollbar-bg :inherit 'tooltip)
    (company-scrollbar-fg :background highlight)
    (company-preview :foreground comments)
    (company-preview-common :background base3 :foreground highlight)
    (company-preview-search :inherit 'company-tooltip-search)
    (company-template-field :inherit 'match)
    ;;;; company-box
    (company-box-candidate :foreground fg)
    ;;;; corfu
    (corfu-default :inherit 'tooltip)
    (corfu-current :background bg :foreground fg)
    ;;;; circe
    (circe-fool :foreground doc-comments)
    (circe-highlight-nick-face :weight 'bold :foreground constants)
    (circe-prompt-face :weight 'bold :foreground highlight)
    (circe-server-face :foreground comments)
    (circe-my-message-face :weight 'bold)
    ;;;; cperl <built-in>
    (cperl-array-face
     :weight 'bold
     :inherit 'font-lock-variable-name-face)
    (cperl-hash-face
     :weight 'bold
     :slant 'italic
     :inherit 'font-lock-variable-name-face)
    (cperl-nonoverridable-face :inherit 'font-lock-builtin-face)
    ;;;; compilation <built-in>
    (compilation-column-number :inherit 'font-lock-comment-face)
    (compilation-line-number :foreground highlight)
    (compilation-error :inherit 'error :weight 'bold)
    (compilation-warning :inherit 'warning :slant 'italic)
    (compilation-info :inherit 'success)
    (compilation-mode-line-exit :inherit 'compilation-info)
    (compilation-mode-line-fail :inherit 'compilation-error)
    ;;;; custom <built-in>
    (custom-button
     :foreground blue
     :background bg
     :box '(:line-width 1 :style nil))
    (custom-button-unraised
     :foreground violet
     :background bg
     :box '(:line-width 1 :style nil))
    (custom-button-pressed-unraised
     :foreground bg
     :background violet
     :box '(:line-width 1 :style nil))
    (custom-button-pressed
     :foreground bg
     :background blue
     :box '(:line-width 1 :style nil))
    (custom-button-mouse
     :foreground bg
     :background blue
     :box '(:line-width 1 :style nil))
    (custom-variable-button :foreground green :underline t)
    (custom-saved
     :foreground green
     :background (doom-blend green bg 0.2)
     :bold bold)
    (custom-comment :foreground fg :background region)
    (custom-comment-tag :foreground grey)
    (custom-modified
     :foreground blue
     :background (doom-blend blue bg 0.2))
    (custom-variable-tag :foreground magenta)
    (custom-visibility :foreground blue :underline 'unspecified)
    (custom-group-subtitle :foreground red)
    (custom-group-tag :foreground violet)
    (custom-group-tag-1 :foreground blue)
    (custom-set :foreground yellow :background bg)
    (custom-themed :foreground yellow :background bg)
    (custom-invalid
     :foreground red
     :background (doom-blend red bg 0.2))
    (custom-variable-obsolete :foreground grey :background bg)
    (custom-state
     :foreground green
     :background (doom-blend green bg 0.2))
    (custom-changed :foreground blue :background bg)
    ;;;; cider
    ;; (cider-stacktrace-error-class-face :inherit 'font-lock-warning-face)
    ;; (cider-stacktrace-error-message-face :inherit 'font-lock-doc-face)
    ;; (cider-stacktrace-filter-active-face :inherit 'button :underline t :weight 'normal)
    ;; (cider-stacktrace-filter-inactive-face :inherit 'cider-stacktrace-filter-active-face :underline nil)
    ;; (cider-stacktrace-face :inherit 'default)
    ;; (cider-stacktrace-ns-face :inherit 'font-lock-comment-face)
    ;; (cider-stacktrace-fn-face :inherit 'default :weight 'bold)
    ;; (cider-docview-emphasis-face :inherit 'default :underline t)
    ;; (cider-docview-strong-face :inherit 'default :underline t :weight 'bold)
    ;; (cider-docview-literal-face :inherit 'font-lock-string-face)
    ;; (cider-docview-table-border-face :inherit 'shadow)
    (cider-debug-code-overlay-face :background base3)
    ;; (cider-debug-prompt-face :inherit font-lock-builtin-face :underline t)
    (cider-enlightened-face
     :inherit 'cider-result-overlay-face
     :box `(:color ,orange :line-width -1))
    (cider-enlightened-local-face :foreground orange :weight 'bold)
    ;; (cider-repl-prompt-face :inherit 'font-lock-keyword-face)
    ;; (cider-repl-stdout-face :inherit 'font-lock-string-face)
    ;; (cider-repl-stderr-face :inherit 'font-lock-warning-face)
    ;; (cider-repl-input-face :weight 'bold)
    ;; (cider-repl-result-face )
    (cider-result-overlay-face
     :background base3
     :box `(:line-width -1 :color ,base5))
    (cider-fringe-good-face :foreground green)
    (cider-deprecated-face :background (doom-blend bg yellow 0.8))
    (cider-instrumented-face :background (doom-blend bg red 0.8))
    (cider-traced-face :background (doom-blend bg cyan 0.8))
    ;; (cider-reader-conditional-face :inherit 'font-lock-comment-face)
    (cider-error-highlight-face
     `((((supports :underline (:style wave)))
        (:inherit
         unspecified
         :underline (:style wave :color ,(car error))))
       (t (:inherit font-lock-warning-face :underline t))))
    (cider-warning-highlight-face
     `((((supports :underline (:style wave)))
        (:underline
         (:style wave :color ,(car warning))
         :inherit unspecified))
       (t
        (:inherit
         font-lock-warning-face
         :underline (:color ,(car warning))))))
    (cider-test-failure-face :background (doom-blend bg error 0.7))
    (cider-test-error-face :background orange)
    (cider-test-success-face
     (&light :foreground base0 :background green)
     (&dark :foreground green :background base0))
    ;;;; diff-hl
    (diff-hl-change :foreground vc-modified :background vc-modified)
    (diff-hl-delete :foreground vc-deleted :background vc-deleted)
    (diff-hl-insert :foreground vc-added :background vc-added)
    ;;;; diff-mode <built-in>
    (diff-added :inherit 'hl-line :foreground green)
    (diff-changed :foreground violet)
    (diff-context
     (&dark :foreground (doom-darken fg 0.12))
     (&light :foreground (doom-lighten fg 0.12)))
    (diff-removed :foreground red :background base3)
    (diff-header :foreground cyan)
    (diff-file-header :foreground blue)
    (diff-hunk-header :foreground violet)
    (diff-refine-added :inherit 'diff-added :inverse-video t)
    (diff-refine-changed :inherit 'diff-changed :inverse-video t)
    (diff-refine-removed :inherit 'diff-removed :inverse-video t)
    ;;;; dired <built-in>
    (dired-directory :foreground builtin)
    (dired-ignored :foreground comments)
    (dired-flagged :foreground red)
    (dired-header :foreground blue :weight 'bold)
    (dired-mark :foreground orange :weight 'bold)
    (dired-marked :foreground magenta :weight 'bold :inverse-video t)
    (dired-perm-write :foreground fg :underline t)
    (dired-symlink :foreground cyan :weight 'bold)
    (dired-warning :foreground warning)
    ;;;; dired+
    (diredp-file-name :foreground base8)
    (diredp-dir-name :foreground base8 :weight 'bold)
    (diredp-ignored-file-name :foreground base5)
    (diredp-compressed-file-suffix :foreground base5)
    (diredp-symlink :foreground violet)
    (diredp-dir-heading :foreground blue :weight 'bold)
    (diredp-file-suffix :foreground violet)
    (diredp-read-priv :foreground magenta)
    (diredp-write-priv :foreground green)
    (diredp-exec-priv :foreground yellow)
    (diredp-rare-priv :foreground red :weight 'bold)
    (diredp-dir-priv :foreground blue :weight 'bold)
    (diredp-no-priv :foreground base5)
    (diredp-number :foreground magenta)
    (diredp-date-time :foreground blue)
    ;;;; dired-k
    (dired-k-modified :foreground vc-modified :weight 'bold)
    (dired-k-commited :foreground green :weight 'bold)
    (dired-k-added :foreground vc-added :weight 'bold)
    (dired-k-untracked :foreground teal :weight 'bold)
    (dired-k-ignored :foreground base5 :weight 'bold)
    (dired-k-directory :foreground blue :weight 'bold)
    ;;;; dired-subtree
    (dired-subtree-depth-1-face :background (doom-darken bg-alt 0.02))
    (dired-subtree-depth-2-face :background (doom-darken bg-alt 0.04))
    (dired-subtree-depth-3-face :background (doom-darken bg-alt 0.06))
    (dired-subtree-depth-4-face :background (doom-darken bg-alt 0.08))
    (dired-subtree-depth-5-face :background (doom-darken bg-alt 0.10))
    (dired-subtree-depth-6-face :background (doom-darken bg-alt 0.12))
    ;;;; diredfl
    (diredfl-autofile-name :foreground base4)
    (diredfl-compressed-file-name :foreground yellow)
    (diredfl-compressed-file-suffix
     :foreground (doom-blend orange bg 0.6))
    (diredfl-date-time :foreground cyan :weight 'light)
    (diredfl-deletion
     :foreground red
     :background (doom-blend red bg 0.2)
     :weight 'bold)
    (diredfl-deletion-file-name
     :foreground red
     :background (doom-blend red bg 0.2))
    (diredfl-dir-heading :foreground blue :weight 'bold)
    (diredfl-dir-name :foreground blue)
    (diredfl-dir-priv :foreground blue)
    (diredfl-exec-priv :foreground green)
    (diredfl-executable-tag :foreground green)
    (diredfl-file-name :foreground fg)
    (diredfl-file-suffix :foreground (doom-blend fg bg 0.6))
    (diredfl-flag-mark
     :foreground yellow
     :background (doom-blend yellow bg 0.2)
     :weight 'bold)
    (diredfl-flag-mark-line :background (doom-blend yellow bg 0.1))
    (diredfl-ignored-file-name :foreground comments)
    (diredfl-link-priv :foreground violet)
    (diredfl-no-priv :inherit 'shadow)
    (diredfl-number :foreground orange)
    (diredfl-other-priv :foreground magenta)
    (diredfl-rare-priv :foreground fg)
    (diredfl-read-priv :foreground yellow)
    (diredfl-symlink :foreground violet)
    (diredfl-tagged-autofile-name :foreground base5)
    (diredfl-write-priv :foreground red)
    ;;;; disk-usage
    (disk-usage-children :foreground yellow)
    (disk-usage-percent :foreground violet)
    (disk-usage-size :foreground blue)
    (disk-usage-symlink :foreground cyan :weight 'bold)
    ;;;; doom-modeline
    (doom-modeline-eldoc-bar :background green)
    (doom-modeline-bar-inactive) ; transparent
    ;;;; doom-themes
    (doom-themes-visual-bell :background error)
    ;;;; ediff <built-in>
    (ediff-fine-diff-A
     :background (doom-blend selection bg 0.7)
     :weight 'bold
     :extend t)
    (ediff-fine-diff-B :inherit 'ediff-fine-diff-A)
    (ediff-fine-diff-C :inherit 'ediff-fine-diff-A)
    (ediff-current-diff-A
     :background (doom-blend selection bg 0.3)
     :extend t)
    (ediff-current-diff-B :inherit 'ediff-current-diff-A)
    (ediff-current-diff-C :inherit 'ediff-current-diff-A)
    (ediff-even-diff-A :inherit 'hl-line)
    (ediff-even-diff-B :inherit 'ediff-even-diff-A)
    (ediff-even-diff-C :inherit 'ediff-even-diff-A)
    (ediff-odd-diff-A :inherit 'ediff-even-diff-A)
    (ediff-odd-diff-B :inherit 'ediff-odd-diff-A)
    (ediff-odd-diff-C :inherit 'ediff-odd-diff-A)
    ;;;; elfeed
    (elfeed-log-debug-level-face :foreground comments)
    (elfeed-log-error-level-face :inherit 'error)
    (elfeed-log-info-level-face :inherit 'success)
    (elfeed-log-warn-level-face :inherit 'warning)
    (elfeed-search-date-face :foreground violet)
    (elfeed-search-feed-face :foreground blue)
    (elfeed-search-tag-face :foreground comments)
    (elfeed-search-title-face :foreground comments)
    (elfeed-search-filter-face :foreground violet)
    (elfeed-search-unread-count-face :foreground yellow)
    (elfeed-search-unread-title-face :foreground fg :weight 'bold)
    ;;;; elixir-mode <modes:elixir-mode>
    (elixir-atom-face
     (&light :foreground dark-blue) (&dark :foreground cyan))
    (elixir-attribute-face :foreground violet)
    ;;;; elscreen
    (elscreen-tab-background-face :background bg)
    (elscreen-tab-control-face :background bg :foreground bg)
    (elscreen-tab-current-screen-face
     :background bg-alt
     :foreground fg)
    (elscreen-tab-other-screen-face :background bg :foreground fg-alt)
    ;;;; embark
    ((embark-target &inherit vertico-current))
    ;;;; enh-ruby-mode <modes:enh-ruby-mode>
    (enh-ruby-heredoc-delimiter-face :inherit 'font-lock-string-face)
    (enh-ruby-op-face :foreground operators)
    (enh-ruby-regexp-delimiter-face :inherit 'enh-ruby-regexp-face)
    (enh-ruby-regexp-face :foreground constants)
    (enh-ruby-string-delimiter-face :inherit 'font-lock-string-face)
    (erm-syn-errline :underline `(:style wave :color ,error))
    (erm-syn-warnline :underline `(:style wave :color ,warning))
    ;;;; erc <built-in>
    (erc-button :weight 'bold :underline t)
    (erc-default-face :inherit 'default)
    (erc-action-face :weight 'bold)
    (erc-command-indicator-face :weight 'bold)
    (erc-direct-msg-face :foreground magenta)
    (erc-error-face :inherit 'error)
    (erc-header-line
     :background (doom-darken bg-alt 0.15)
     :foreground highlight)
    (erc-input-face :foreground green)
    (erc-current-nick-face :foreground green :weight 'bold)
    (erc-timestamp-face :foreground blue :weight 'bold)
    (erc-nick-default-face :weight 'bold)
    (erc-nick-msg-face :foreground magenta)
    (erc-nick-prefix-face :inherit 'erc-nick-default-face)
    (erc-my-nick-face :foreground green :weight 'bold)
    (erc-my-nick-prefix-face :inherit 'erc-my-nick-face)
    (erc-notice-face :foreground comments)
    (erc-prompt-face :foreground highlight :weight 'bold)
    ;;;; eshell <built-in>
    (eshell-prompt :foreground highlight :weight 'bold)
    (eshell-ls-archive :foreground magenta)
    (eshell-ls-backup :foreground yellow)
    (eshell-ls-clutter :foreground red)
    (eshell-ls-directory :foreground blue)
    (eshell-ls-executable :foreground green)
    (eshell-ls-missing :foreground red)
    (eshell-ls-product :foreground orange)
    (eshell-ls-readonly :foreground orange)
    (eshell-ls-special :foreground violet)
    (eshell-ls-symlink :foreground cyan)
    (eshell-ls-unreadable :foreground base5)
    ;;;; evil
    (evil-ex-info :foreground error :slant 'italic)
    (evil-ex-search
     :background highlight
     :foreground base0
     :weight 'bold)
    (evil-ex-substitute-matches
     :background base0
     :foreground red
     :weight 'bold
     :strike-through t)
    (evil-ex-substitute-replacement
     :background base0
     :foreground green
     :weight 'bold)
    (evil-search-highlight-persist-highlight-face
     :inherit 'lazy-highlight)
    ;;;; evil-mc
    (evil-mc-cursor-default-face
     :background magenta
     :foreground base0)
    (evil-mc-region-face :inherit 'region)
    (evil-mc-cursor-bar-face
     :height 1
     :background magenta
     :foreground base0)
    (evil-mc-cursor-hbar-face :underline `(:color ,highlight))
    ;;;; evil-snipe
    (evil-snipe-first-match-face
     :foreground highlight
     :background dark-blue
     :weight 'bold)
    (evil-snipe-matches-face
     :foreground highlight
     :underline t
     :weight 'bold)
    ;;;; evil-googles
    (evil-goggles-default-face
     :inherit 'region
     :background (doom-blend region bg 0.5))
    ;;;; eww
    (eww-form-checkbox :inherit 'eww-form-file)
    (eww-form-file :inherit 'eww-form-submit :background bg-alt)
    (eww-form-select :inherit 'eww-form-submit :background bg-alt)
    (eww-form-submit
     :inherit 'eww-form-text
     :box `(:line-width 2 :style released-button)
     :background base2)
    (eww-form-text
     :box `(:line-width 1 :color ,base3)
     :background bg
     :foreground fg
     :distant-foreground bg)
    (eww-form-textarea :inherit 'eww-form-text)
    (eww-invalid-certificate :foreground error)
    (eww-valid-certificate :foreground highlight)
    ;;;; eyebrowse
    (eyebrowse-mode-line-active :weight 'bold :foreground highlight)
    ;;;; flycheck
    (flycheck-error :underline `(:style wave :color ,red))
    (flycheck-warning :underline `(:style wave :color ,yellow))
    (flycheck-info :underline `(:style wave :color ,green))
    (flycheck-fringe-error :inherit 'fringe :foreground error)
    (flycheck-fringe-warning :inherit 'fringe :foreground warning)
    (flycheck-fringe-info :inherit 'fringe :foreground success)
    ;;;; flycheck-posframe
    (flycheck-posframe-face :inherit 'default)
    (flycheck-posframe-background-face :background bg-alt)
    (flycheck-posframe-error-face
     :inherit 'flycheck-posframe-face
     :foreground error)
    (flycheck-posframe-info-face
     :inherit 'flycheck-posframe-face
     :foreground fg)
    (flycheck-posframe-warning-face
     :inherit 'flycheck-posframe-face
     :foreground warning)
    ;;;; flymake
    (flymake-error :underline `(:style wave :color ,red))
    (flymake-note :underline `(:style wave :color ,green))
    (flymake-warning :underline `(:style wave :color ,orange))
    ;;;; flyspell <built-in>
    (flyspell-incorrect
     :underline `(:style wave :color ,error)
     :inherit 'unspecified)
    (flyspell-duplicate
     :underline `(:style wave :color ,warning)
     :inherit 'unspecified)
    ;;;; flx-ido
    (flx-highlight-face
     :weight 'bold
     :foreground yellow
     :underline nil)
    ;;;; forge
    (forge-dimmed :inherit 'magit-dimmed)
    (forge-pullreq-open :inherit 'forge-issue-open)
    (forge-pullreq-merged :inherit 'forge-issue-completed)
    (forge-pullreq-rejected :inherit 'forge-issue-unplanned)
    ;;;; git-commit
    (git-commit-summary :foreground strings)
    (git-commit-overlong-summary
     :inherit 'error
     :background base0
     :slant 'italic
     :weight 'bold)
    (git-commit-nonempty-second-line
     :inherit 'git-commit-overlong-summary)
    (git-commit-keyword :foreground cyan :slant 'italic)
    (git-commit-pseudo-header :foreground doc-comments :slant 'italic)
    (git-commit-known-pseudo-header
     :foreground doc-comments
     :weight 'bold
     :slant 'italic)
    (git-commit-comment-branch-local :foreground magenta)
    (git-commit-comment-branch-remote :foreground green)
    (git-commit-comment-detached :foreground orange)
    (git-commit-comment-heading :foreground keywords)
    (git-commit-comment-file :foreground violet)
    (git-commit-comment-action)
    ;;;; git-gutter
    (git-gutter:modified :inherit 'fringe :foreground vc-modified)
    (git-gutter:added :inherit 'fringe :foreground vc-added)
    (git-gutter:deleted :inherit 'fringe :foreground vc-deleted)
    ;;;; git-gutter+
    (git-gutter+-modified
     :inherit 'fringe
     :foreground vc-modified
     :background 'unspecified)
    (git-gutter+-added
     :inherit 'fringe
     :foreground vc-added
     :background 'unspecified)
    (git-gutter+-deleted
     :inherit 'fringe
     :foreground vc-deleted
     :background 'unspecified)
    ;;;; git-gutter-fringe
    ((git-gutter-fr:modified &inherit git-gutter:modified))
    ((git-gutter-fr:added &inherit git-gutter:added))
    ((git-gutter-fr:deleted &inherit git-gutter:deleted))
    ;;;; gnus (built-in)
    (gnus-group-mail-1 :weight 'bold :foreground fg)
    (gnus-group-mail-2 :inherit 'gnus-group-mail-1)
    (gnus-group-mail-3 :inherit 'gnus-group-mail-1)
    (gnus-group-mail-1-empty :foreground base5)
    (gnus-group-mail-2-empty :inherit 'gnus-group-mail-1-empty)
    (gnus-group-mail-3-empty :inherit 'gnus-group-mail-1-empty)
    (gnus-group-news-1 :inherit 'gnus-group-mail-1)
    (gnus-group-news-2 :inherit 'gnus-group-news-1)
    (gnus-group-news-3 :inherit 'gnus-group-news-1)
    (gnus-group-news-4 :inherit 'gnus-group-news-1)
    (gnus-group-news-5 :inherit 'gnus-group-news-1)
    (gnus-group-news-6 :inherit 'gnus-group-news-1)
    (gnus-group-news-1-empty :inherit 'gnus-group-mail-1-empty)
    (gnus-group-news-2-empty :inherit 'gnus-group-news-1-empty)
    (gnus-group-news-3-empty :inherit 'gnus-group-news-1-empty)
    (gnus-group-news-4-empty :inherit 'gnus-group-news-1-empty)
    (gnus-group-news-5-empty :inherit 'gnus-group-news-1-empty)
    (gnus-group-news-6-empty :inherit 'gnus-group-news-1-empty)
    (gnus-group-mail-low :inherit 'gnus-group-mail-1 :weight 'normal)
    (gnus-group-mail-low-empty :inherit 'gnus-group-mail-1-empty)
    (gnus-group-news-low
     :inherit 'gnus-group-mail-1
     :foreground base5)
    (gnus-group-news-low-empty
     :inherit 'gnus-group-news-low
     :weight 'normal)
    (gnus-header-content :inherit 'message-header-other)
    (gnus-header-from :inherit 'message-header-other)
    (gnus-header-name :inherit 'message-header-name)
    (gnus-header-newsgroups :inherit 'message-header-other)
    (gnus-header-subject :inherit 'message-header-subject)
    (gnus-summary-cancelled :foreground red :strike-through t)
    (gnus-summary-high-ancient
     :foreground (doom-lighten base5 0.2)
     :inherit 'italic)
    (gnus-summary-high-read :foreground (doom-lighten fg 0.2))
    (gnus-summary-high-ticked :foreground (doom-lighten magenta 0.2))
    (gnus-summary-high-unread :foreground (doom-lighten green 0.2))
    (gnus-summary-low-ancient
     :foreground (doom-darken base5 0.2)
     :inherit 'italic)
    (gnus-summary-low-read :foreground (doom-darken fg 0.2))
    (gnus-summary-low-ticked :foreground (doom-darken magenta 0.2))
    (gnus-summary-low-unread :foreground (doom-darken green 0.2))
    (gnus-summary-normal-ancient :foreground base5 :inherit 'italic)
    (gnus-summary-normal-read :foreground fg)
    (gnus-summary-normal-ticked :foreground magenta)
    (gnus-summary-normal-unread :foreground green :inherit 'bold)
    (gnus-summary-selected :foreground blue :weight 'bold)
    (gnus-cite-1 :foreground violet)
    (gnus-cite-2 :foreground yellow)
    (gnus-cite-3 :foreground magenta)
    (gnus-cite-4 :foreground green)
    (gnus-cite-5 :foreground green)
    (gnus-cite-6 :foreground green)
    (gnus-cite-7 :foreground magenta)
    (gnus-cite-8 :foreground magenta)
    (gnus-cite-9 :foreground magenta)
    (gnus-cite-10 :foreground yellow)
    (gnus-cite-11 :foreground yellow)
    (gnus-signature :foreground yellow)
    (gnus-x-face :background base5 :foreground fg)
    ;;;; goggles
    (goggles-changed :inherit 'region)
    (goggles-removed
     :background (doom-blend red bg-alt 0.25)
     :extend t)
    (goggles-added :background (doom-blend green bg-alt 0.25))
    ;;;; helm
    (helm-selection
     (&all :inherit 'bold :background selection :extend t)
     (&dark :distant-foreground highlight)
     (&light :distant-foreground base0))
    (helm-match
     :inherit 'bold
     :foreground highlight
     :distant-foreground base8)
    (helm-source-header
     :background base2
     :foreground keywords
     :weight 'bold)
    (helm-visible-mark :inherit '(bold highlight))
    (helm-moccur-buffer :inherit 'link)
    (helm-ff-file :foreground fg)
    (helm-ff-prefix :foreground keywords)
    (helm-ff-dotted-directory :foreground grey)
    (helm-ff-directory :foreground variables)
    (helm-ff-executable :foreground base8 :inherit 'italic)
    (helm-grep-match :foreground highlight :distant-foreground red)
    (helm-grep-file :foreground methods)
    (helm-grep-lineno :foreground base5)
    (helm-grep-finish :foreground green)
    ;;;; helm-swoop
    (helm-swoop-target-line-face
     :foreground highlight
     :inverse-video t)
    (helm-swoop-target-line-block-face :foreground yellow)
    (helm-swoop-target-word-face :foreground green :inherit 'bold)
    (helm-swoop-target-number-face :foreground base5)
    ;;;; helm-rg
    (helm-rg-active-arg-face :foreground green :weight 'normal)
    (helm-rg-base-rg-cmd-face :foreground grey :weight 'normal)
    (helm-rg-colon-separator-ripgrep-output-face :foreground base8)
    (helm-rg-directory-cmd-face
     :foreground (doom-darken yellow 0.25)
     :background base0
     :weight 'normal)
    (helm-rg-directory-header-face
     :foreground base8
     :background base0
     :weight 'bold)
    (helm-rg-error-message :foreground red)
    (helm-rg-extra-arg-face :foreground yellow :weight 'normal)
    (helm-rg-file-match-face :foreground cyan :underline t)
    (helm-rg-inactive-arg-face :foreground grey :weight 'normal)
    (helm-rg-line-number-match-face :foreground orange :underline t)
    (helm-rg-match-text-face :foreground base8 :background violet)
    (helm-rg-title-face
     :foreground violet
     :background base0
     :weight 'bold)
    ;;;; helpful
    (helpful-heading :weight 'bold :height 1.2)
    ;;;; hi-lock <built-in>
    (hi-yellow :background yellow)
    (hi-pink :background magenta)
    (hi-red-b :foreground red :weight 'bold)
    (hi-green :background green)
    (hi-green-b :foreground green :weight 'bold)
    (hi-blue :background blue)
    (hi-blue-b :foreground blue :weight 'bold)
    ;; (hi-black-b  :weight 'bold)
    ;; (hi-black-hb :inherit 'variable-pitch :weight 'bold :height 1.67)
    ;;;; hideshow <built-in>
    (+fold-hideshow-folded-face ; this is defined in Doom Emacs, only
     :inherit 'font-lock-comment-face
     :weight 'light
     :background (doom-darken bg 0.15))
    ;;;; highlight-numbers-mode
    (highlight-numbers-number :inherit 'bold :foreground numbers)
    ;;;; highlight-indentation-mode
    (highlight-indentation-face :inherit 'hl-line)
    (highlight-indentation-current-column-face :background base1)
    (highlight-indentation-guides-odd-face
     :inherit 'highlight-indentation-face)
    (highlight-indentation-guides-even-face
     :inherit 'highlight-indentation-face)
    ;;;; highlight-quoted-mode
    (highlight-quoted-symbol :foreground type)
    (highlight-quoted-quote :foreground operators)
    ;;;; highlight-symbol
    (highlight-symbol-face
     (&dark
      :background (doom-lighten region 0.1)
      :distant-foreground fg-alt)
     (&light
      :background (doom-darken region 0.1)
      :distant-foreground fg-alt))
    ;;;; highlight-thing
    (highlight-thing
     (&dark
      :background (doom-lighten region 0.1)
      :distant-foreground fg-alt)
     (&light
      :background (doom-darken region 0.1)
      :distant-foreground fg-alt))
    ;;;; hl-fill-column-face
    (hl-fill-column-face :inherit '(hl-line shadow))
    ;;;; hl-line (built-in)
    (hl-line :background bg-alt :extend t)
    ;;;; hl-todo
    (hl-todo :foreground red :weight 'bold)
    ;;;; hlinum
    (linum-highlight-face :foreground fg :weight 'normal)
    ;;;; hydra
    (hydra-face-red :foreground red :weight 'bold)
    (hydra-face-blue :foreground blue :weight 'bold)
    (hydra-face-amaranth :foreground magenta :weight 'bold)
    (hydra-face-pink :foreground violet :weight 'bold)
    (hydra-face-teal :foreground teal :weight 'bold)
    ;;;; iedit
    (iedit-occurrence
     :foreground magenta
     :weight 'bold
     :inverse-video t)
    (iedit-read-only-occurrence :inherit 'region)
    ;;;; ido <built-in>
    (ido-first-match :foreground orange)
    (ido-indicator :foreground red :background bg)
    (ido-only-match :foreground green)
    (ido-subdir :foreground violet)
    (ido-virtual :foreground comments)
    ;;;; imenu-list
    ;; (imenu-list-entry-face)
    (imenu-list-entry-face-0 :foreground highlight)
    (imenu-list-entry-subalist-face-0
     :inherit 'imenu-list-entry-face-0
     :weight 'bold)
    (imenu-list-entry-face-1 :foreground green)
    (imenu-list-entry-subalist-face-1
     :inherit 'imenu-list-entry-face-1
     :weight 'bold)
    (imenu-list-entry-face-2 :foreground yellow)
    (imenu-list-entry-subalist-face-2
     :inherit 'imenu-list-entry-face-2
     :weight 'bold)
    ;;;; indent-guide
    ((indent-guide-face &inherit highlight-indentation-face))
    ;;;; isearch <built-in>
    (isearch :inherit 'lazy-highlight :weight 'bold)
    (isearch-fail :background error :foreground base0 :weight 'bold)
    ;;;; ivy
    (ivy-current-match :background region :extend t)
    (ivy-minibuffer-match-face-1
     :foreground (doom-lighten grey 0.14)
     :weight 'light)
    (ivy-minibuffer-match-face-2
     :inherit 'ivy-minibuffer-match-face-1
     :foreground magenta
     :background base1
     :weight 'semi-bold)
    (ivy-minibuffer-match-face-3
     :inherit 'ivy-minibuffer-match-face-2
     :foreground green
     :weight 'semi-bold)
    (ivy-minibuffer-match-face-4
     :inherit 'ivy-minibuffer-match-face-2
     :foreground yellow
     :weight 'semi-bold)
    (ivy-minibuffer-match-highlight :foreground violet)
    (ivy-highlight-face :foreground violet)
    (ivy-confirm-face :foreground success)
    (ivy-match-required-face :foreground error)
    (ivy-virtual :inherit 'italic :foreground doc-comments)
    (ivy-modified-buffer :inherit 'bold :foreground warning)
    ;;;; ivy-posframe
    (ivy-posframe :background (doom-darken bg-alt 0.2))
    (ivy-posframe-border :inherit 'internal-border)
    ;;;; selectrum
    (selectrum-current-candidate :background region :extend t)
    ;;;; vertico
    (vertico-current :background region :extend t)
    ;;;; vertico-posframe
    ;;(vertico-posframe :inherit 'default)
    (vertico-posframe-border :background grey)
    (vertico-posframe-border-2 :background red)
    (vertico-posframe-border-3 :background green)
    (vertico-posframe-border-4 :background blue)
    (vertico-posframe-border-fallback :background yellow)
    ;;;; jabber
    (jabber-activity-face :foreground red :weight 'bold)
    (jabber-activity-personal-face :foreground blue :weight 'bold)
    (jabber-chat-error :foreground red :weight 'bold)
    (jabber-chat-prompt-foreign :foreground red :weight 'bold)
    (jabber-chat-prompt-local :foreground blue :weight 'bold)
    (jabber-chat-prompt-system :foreground green :weight 'bold)
    (jabber-chat-text-foreign :foreground fg)
    (jabber-chat-text-local :foreground fg)
    (jabber-rare-time-face :foreground green)
    (jabber-roster-user-away :foreground yellow)
    (jabber-roster-user-chatty :foreground green :weight 'bold)
    (jabber-roster-user-dnd :foreground red)
    (jabber-roster-user-error :foreground red)
    (jabber-roster-user-offline :foreground fg)
    (jabber-roster-user-online :foreground green :weight 'bold)
    (jabber-roster-user-xa :foreground cyan)
    ;;;; jdee <modes:jdee-mode>
    (jdee-font-lock-number-face :foreground numbers)
    (jdee-font-lock-operator-face :foreground operators)
    (jdee-font-lock-constant-face :inherit 'font-lock-constant-face)
    (jdee-font-lock-constructor-face :foreground methods)
    (jdee-font-lock-public-face :inherit 'font-lock-keyword-face)
    (jdee-font-lock-protected-face :inherit 'font-lock-keyword-face)
    (jdee-font-lock-private-face :inherit 'font-lock-keyword-face)
    (jdee-font-lock-modifier-face :inherit 'font-lock-type-face)
    (jdee-font-lock-doc-tag-face :foreground violet)
    (jdee-font-lock-italic-face :inherit 'italic)
    (jdee-font-lock-bold-face :inherit 'bold)
    (jdee-font-lock-link-face
     :foreground blue
     :italic nil
     :underline t)
    ;;;; js2-mode <modes:js2-mode,js2-jsx-mode>
    (js2-function-param :foreground variables)
    (js2-function-call :foreground functions)
    (js2-object-property :foreground violet)
    (js2-jsdoc-tag :foreground doc-comments)
    (js2-external-variable :foreground operators)
    ;;;; keycast
    (keycast-command :inherit 'mode-line-emphasis)
    (keycast-key :inherit '(bold mode-line-highlight))
    ;;;; ledger-mode <modes:ledger-mode>
    (ledger-font-posting-date-face :foreground blue)
    (ledger-font-posting-amount-face :foreground yellow)
    (ledger-font-posting-account-face :foreground base8)
    (ledger-font-payee-cleared-face :foreground violet :weight 'bold)
    (ledger-font-payee-uncleared-face :foreground base5 :weight 'bold)
    (ledger-font-xact-highlight-face :background base0)
    ;;;; linum <built-in>
    ((linum &inherit line-number))
    ;;;; linum-relative
    ((linum-relative-current-face &inherit line-number-current-line))
    ;;;; lui
    (lui-time-stamp-face :foreground violet)
    (lui-highlight-face :foreground highlight)
    (lui-button-face :foreground builtin :underline t)
    ;;;; magit
    (magit-bisect-bad :foreground red)
    (magit-bisect-good :foreground green)
    (magit-bisect-skip :foreground orange)
    (magit-blame-hash :foreground cyan)
    (magit-blame-date :foreground red)
    (magit-blame-heading
     :foreground orange
     :background base3
     :extend t)
    (magit-branch-current :foreground blue)
    (magit-branch-local :foreground cyan)
    (magit-branch-remote :foreground green)
    (magit-cherry-equivalent :foreground violet)
    (magit-cherry-unmatched :foreground cyan)
    (magit-diff-added
     :foreground (doom-darken vc-added 0.2)
     :background (doom-blend vc-added bg 0.1)
     :extend t)
    (magit-diff-added-highlight
     :foreground vc-added
     :background (doom-blend vc-added bg 0.2)
     :weight 'bold
     :extend t)
    (magit-diff-base
     :foreground (doom-darken orange 0.2)
     :background (doom-blend orange bg 0.1)
     :extend t)
    (magit-diff-base-highlight
     :foreground orange
     :background (doom-blend orange bg 0.2)
     :weight 'bold
     :extend t)
    (magit-diff-context
     :foreground (doom-darken fg 0.4)
     :background bg
     :extend t)
    (magit-diff-context-highlight
     :foreground fg
     :background bg-alt
     :extend t)
    (magit-diff-file-heading :foreground fg :weight 'bold :extend t)
    (magit-diff-file-heading-selection
     :foreground magenta
     :background dark-blue
     :weight 'bold
     :extend t)
    (magit-diff-hunk-heading
     :foreground bg
     :background (doom-blend violet bg 0.3)
     :extend t)
    (magit-diff-hunk-heading-highlight
     :foreground bg
     :background violet
     :weight 'bold
     :extend t)
    (magit-diff-lines-heading
     :foreground yellow
     :background red
     :extend t
     :extend t)
    (magit-diff-removed
     :foreground (doom-darken vc-deleted 0.2)
     :background (doom-blend vc-deleted base3 0.1)
     :extend t)
    (magit-diff-removed-highlight
     :foreground vc-deleted
     :background (doom-blend vc-deleted base3 0.2)
     :weight 'bold
     :extend t)
    (magit-diffstat-added :foreground vc-added)
    (magit-diffstat-removed :foreground vc-deleted)
    (magit-dimmed :foreground fg-alt)
    (magit-hash :foreground comments)
    (magit-header-line
     :background dark-blue
     :foreground base8
     :weight 'bold
     :box `(:line-width 3 :color ,dark-blue))
    (magit-filename :foreground violet)
    (magit-log-author :foreground orange)
    (magit-log-date :foreground blue)
    (magit-log-graph :foreground comments)
    (magit-process-ng :inherit 'error)
    (magit-process-ok :inherit 'success)
    (magit-reflog-amend :foreground magenta)
    (magit-reflog-checkout :foreground blue)
    (magit-reflog-cherry-pick :foreground green)
    (magit-reflog-commit :foreground green)
    (magit-reflog-merge :foreground green)
    (magit-reflog-other :foreground cyan)
    (magit-reflog-rebase :foreground magenta)
    (magit-reflog-remote :foreground cyan)
    (magit-reflog-reset :inherit 'error)
    (magit-refname :foreground comments)
    (magit-section-heading :foreground blue :weight 'bold :extend t)
    (magit-section-heading-selection
     :foreground orange
     :weight 'bold
     :extend t)
    (magit-section-highlight :inherit 'hl-line)
    (magit-section-secondary-heading
     :foreground violet
     :weight 'bold
     :extend t)
    (magit-sequence-drop :foreground red)
    (magit-sequence-head :foreground blue)
    (magit-sequence-part :foreground orange)
    (magit-sequence-stop :foreground green)
    (magit-signature-bad :inherit 'error)
    (magit-signature-error :inherit 'error)
    (magit-signature-expired :foreground orange)
    (magit-signature-good :inherit 'success)
    (magit-signature-revoked :foreground magenta)
    (magit-signature-untrusted :foreground yellow)
    (magit-tag :foreground yellow)
    ;;;; make-mode <built-in> <modes:makefile-mode,makefile-automake-mode,makefile-makepp-mode,makefile-gmake-mode,makefile-imake-mode,makefile-bsdmake-mode>
    (makefile-targets :foreground blue)
    ;;;; man <built-in> <mode:Man-mode>
    (Man-overstrike :inherit 'bold :foreground operators)
    (Man-underline :inherit 'underline :foreground keywords)
    ;;;; markdown-mode <modes:markdown-mode,gfm-mode>
    (markdown-header-face :inherit 'bold :foreground highlight)
    (markdown-header-delimiter-face :inherit 'markdown-header-face)
    (markdown-metadata-key-face :foreground red)
    (markdown-list-face :foreground red)
    (markdown-link-face :foreground highlight)
    (markdown-url-face :foreground magenta :weight 'normal)
    (markdown-italic-face :inherit 'italic :foreground violet)
    (markdown-bold-face :inherit 'bold :foreground orange)
    (markdown-markup-face :foreground operators)
    (markdown-blockquote-face
     :inherit 'italic
     :foreground doc-comments)
    (markdown-pre-face :foreground strings)
    (markdown-code-face :background base3 :extend t)
    (markdown-reference-face :foreground doc-comments)
    (markdown-inline-code-face
     :inherit '(markdown-code-face markdown-pre-face)
     :extend nil)
    (markdown-html-attr-name-face
     :inherit 'font-lock-variable-name-face)
    (markdown-html-attr-value-face :inherit 'font-lock-string-face)
    (markdown-html-entity-face :inherit 'font-lock-variable-name-face)
    (markdown-html-tag-delimiter-face :inherit 'markdown-markup-face)
    (markdown-html-tag-name-face :inherit 'font-lock-keyword-face)
    ;;;; marginalia
    (marginalia-documentation :inherit 'font-lock-doc-face)
    (marginalia-file-priv-dir :foreground blue)
    (marginalia-file-priv-exec :foreground green)
    (marginalia-file-priv-link :foreground violet)
    (marginalia-file-priv-other :foreground magenta)
    (marginalia-file-priv-rare :foreground fg)
    (marginalia-file-priv-read :foreground yellow)
    (marginalia-file-priv-write :foreground red)
    (marginalia-number :foreground numbers)
    (marginalia-size :foreground violet)
    (marginalia-lighter :foreground violet)
    ;;;; message <built-in>
    (message-header-name :foreground green)
    (message-header-subject :foreground highlight :weight 'bold)
    (message-header-to :foreground highlight :weight 'bold)
    (message-header-cc
     :inherit 'message-header-to
     :foreground (doom-darken highlight 0.15))
    (message-header-other :foreground violet)
    (message-header-newsgroups :foreground yellow)
    (message-header-xheader :foreground doc-comments)
    (message-separator :foreground comments)
    (message-mml :foreground comments :slant 'italic)
    ((message-cited-text &inherit gnus-cite-1))
    ((message-cited-text-1 &inherit gnus-cite-2))
    ((message-cited-text-2 &inherit gnus-cite-3))
    ((message-cited-text-3 &inherit gnus-cite-4))
    ((message-cited-text-4 &inherit gnus-cite-5))
    ;;;; mic-paren
    (paren-face-match
     :foreground red
     :background base0
     :weight 'ultra-bold)
    (paren-face-mismatch
     :foreground base0
     :background red
     :weight 'ultra-bold)
    (paren-face-no-match
     :inherit 'paren-face-mismatch
     :weight 'ultra-bold)
    ;;;; minimap
    (minimap-current-line-face :background selection)
    (minimap-active-region-background :background vertical-bar)
    ;; mm
    (mm-uu-extract
     :background (doom-blend highlight base2 0.07)
     :foreground (doom-blend highlight fg 0.15))
    ;;;; mmm-mode
    (mmm-init-submode-face :background (doom-blend red bg 0.1))
    (mmm-cleanup-submode-face :background (doom-blend yellow bg 0.1))
    (mmm-declaration-submode-face
     :background (doom-blend cyan bg 0.1))
    (mmm-comment-submode-face :background (doom-blend blue bg 0.1))
    (mmm-output-submode-face :background (doom-blend violet bg 0.1))
    (mmm-special-submode-face :background (doom-blend green bg 0.1))
    (mmm-code-submode-face :background bg-alt)
    (mmm-default-submode-face) ; make transparent
    ;;;; multiple cursors
    (mc/cursor-face :inherit 'cursor)
    ;;;; nav-flash
    (nav-flash-face
     :background selection
     :foreground base8
     :weight 'bold)
    ;;;; neotree
    (neo-root-dir-face
     :foreground strings
     :background bg
     :box `(:line-width 4 :color ,bg))
    (neo-file-link-face :foreground fg)
    (neo-dir-link-face :foreground highlight)
    (neo-expand-btn-face :foreground highlight)
    (neo-vc-edited-face :foreground yellow)
    (neo-vc-added-face :foreground green)
    (neo-vc-removed-face :foreground red :strike-through t)
    (neo-vc-conflict-face :foreground magenta :weight 'bold)
    (neo-vc-ignored-face :foreground comments)
    (doom-neotree-dir-face :foreground highlight)
    (doom-neotree-file-face :foreground base8)
    (doom-neotree-hidden-file-face :foreground comments)
    (doom-neotree-text-file-face :foreground fg)
    (doom-neotree-data-file-face :foreground violet)
    (doom-neotree-media-file-face
     :inherit 'doom-neotree-hidden-file-face)
    ;;;; nerd-icons
    (nerd-icons-blue :foreground blue)
    (nerd-icons-blue-alt :foreground teal)
    (nerd-icons-cyan :foreground cyan)
    (nerd-icons-cyan-alt :foreground cyan)
    (nerd-icons-dblue :foreground dark-blue)
    (nerd-icons-dcyan :foreground dark-cyan)
    (nerd-icons-dgreen :foreground (doom-darken green 0.3))
    (nerd-icons-dmaroon :foreground (doom-darken magenta 0.3))
    (nerd-icons-dorange :foreground (doom-darken orange 0.3))
    (nerd-icons-dpink :foreground (doom-lighten red 0.15))
    (nerd-icons-dpurple :foreground (doom-darken violet 0.3))
    (nerd-icons-dred :foreground (doom-darken red 0.3))
    (nerd-icons-dsilver :foreground (doom-lighten grey 0.1))
    (nerd-icons-dyellow :foreground (doom-darken yellow 0.3))
    (nerd-icons-green :foreground green)
    (nerd-icons-lblue :foreground (doom-lighten blue 0.3))
    (nerd-icons-lcyan :foreground (doom-lighten cyan 0.3))
    (nerd-icons-lgreen :foreground (doom-lighten green 0.3))
    (nerd-icons-lmaroon :foreground (doom-lighten magenta 0.3))
    (nerd-icons-lorange :foreground (doom-lighten orange 0.3))
    (nerd-icons-lpink :foreground (doom-lighten red 0.55))
    (nerd-icons-lpurple :foreground (doom-lighten violet 0.3))
    (nerd-icons-lred :foreground (doom-lighten red 0.3))
    (nerd-icons-lsilver :foreground (doom-lighten grey 0.7))
    (nerd-icons-lyellow :foreground (doom-lighten yellow 0.3))
    (nerd-icons-maroon :foreground magenta)
    (nerd-icons-orange :foreground orange)
    (nerd-icons-pink :foreground (doom-lighten red 0.35))
    (nerd-icons-purple :foreground violet)
    (nerd-icons-purple-alt :foreground (doom-blend violet grey 0.15))
    (nerd-icons-red :foreground red)
    (nerd-icons-red-alt :foreground (doom-blend red grey 0.15))
    (nerd-icons-silver :foreground (doom-lighten grey 0.45))
    (nerd-icons-yellow :foreground yellow)
    ;;;; nerd-icons-completion
    (nerd-icons-completion-dir-face :foreground doc-comments)
    ;;;; nerd-icons-dired
    (nerd-icons-dired-dir-face :foreground doc-comments)
    ;;;; nlinum
    ((nlinum-current-line &inherit line-number-current-line))
    ;;;; nlinum-hl
    ((nlinum-hl-face &inherit line-number-current-line))
    ;;;; nlinum-relative
    ((nlinum-relative-current-face &inherit line-number-current-line))
    ;;;; notmuch
    ;; (notmuch-crypto-decryption               :foreground blue-l)
    ;; (notmuch-crypto-part-header              :foreground yellow-l)
    ;; (notmuch-crypto-signature-bad            :foreground red-l)
    ;; (notmuch-crypto-signature-good           :foreground base1)
    ;; (notmuch-crypto-signature-good-key       :foreground aqua-l)
    ;; (notmuch-crypto-signature-unknown        :foreground yellow)
    ;; (notmuch-hello-logo-background           :foreground fg)
    (notmuch-message-summary-face :foreground grey)
    (notmuch-search-count :foreground comments)
    (notmuch-search-date :foreground numbers)
    (notmuch-search-flagged-face
     :foreground (doom-blend red base4 0.5))
    (notmuch-search-matching-authors :foreground blue)
    (notmuch-search-non-matching-authors :foreground fg)
    (notmuch-search-subject :foreground fg)
    (notmuch-search-unread-face :weight 'bold)
    (notmuch-tag-added :foreground green :weight 'normal)
    (notmuch-tag-deleted :foreground red :weight 'normal)
    (notmuch-tag-face :foreground yellow :weight 'normal)
    (notmuch-tag-flagged :foreground yellow :weight 'normal)
    (notmuch-tag-unread :foreground yellow :weight 'normal)
    (notmuch-tree-match-author-face :foreground blue :weight 'bold)
    (notmuch-tree-match-date-face :foreground numbers :weight 'bold)
    (notmuch-tree-match-face :foreground fg)
    (notmuch-tree-match-subject-face :foreground fg)
    (notmuch-tree-match-tag-face :foreground yellow)
    (notmuch-tree-match-tree-face :foreground comments)
    (notmuch-tree-no-match-author-face :foreground blue)
    (notmuch-tree-no-match-date-face :foreground numbers)
    (notmuch-tree-no-match-face :foreground base5)
    (notmuch-tree-no-match-subject-face :foreground base5)
    (notmuch-tree-no-match-tag-face :foreground yellow)
    (notmuch-tree-no-match-tree-face :foreground yellow)
    (notmuch-wash-cited-text :foreground base4)
    (notmuch-wash-toggle-button :foreground fg)
    ;;;; lsp-mode
    (lsp-face-highlight-textual
     (&all :weight 'bold)
     (&light
      :background base3
      :foreground base0
      :distant-foreground base8)
     (&dark
      :background (doom-blend highlight bg 0.3)
      :foreground base8
      :distant-foreground base0))
    (lsp-face-highlight-read :inherit 'lsp-face-highlight-textual)
    (lsp-face-highlight-write :inherit 'lsp-face-highlight-textual)
    (lsp-headerline-breadcrumb-separator-face :inherit 'shadow)
    ;;;; lsp-ui
    (lsp-ui-doc-background :inherit 'tooltip)
    (lsp-ui-peek-filename :inherit 'mode-line-buffer-id)
    (lsp-ui-peek-header
     :foreground fg
     :background (doom-lighten bg 0.1)
     :bold bold)
    (lsp-ui-peek-selection :foreground bg :background blue :bold bold)
    (lsp-ui-peek-list :background (doom-darken bg 0.1))
    (lsp-ui-peek-peek :background (doom-darken bg 0.1))
    (lsp-ui-peek-highlight :inherit 'isearch :box t)
    (lsp-ui-peek-line-number :foreground success)
    (lsp-ui-sideline-code-action
     :foreground (doom-blend highlight bg 0.85))
    (lsp-ui-sideline-current-symbol :inherit 'highlight)
    (lsp-ui-sideline-symbol-info
     :foreground (doom-blend comments bg 0.85)
     :background bg-alt
     :extend t)
    ;;;; objed
    (objed-mode-line :inherit 'warning :weight 'bold)
    (objed-hl :inherit 'region :background (doom-blend region bg 0.5))
    ;;;; orderless
    (orderless-match-face-0
     :weight 'bold
     :foreground (doom-blend blue fg 0.6)
     :background (doom-blend blue bg 0.1))
    (orderless-match-face-1
     :weight 'bold
     :foreground (doom-blend magenta fg 0.6)
     :background (doom-blend magenta bg 0.1))
    (orderless-match-face-2
     :weight 'bold
     :foreground (doom-blend green fg 0.6)
     :background (doom-blend green bg 0.1))
    (orderless-match-face-3
     :weight 'bold
     :foreground (doom-blend yellow fg 0.6)
     :background (doom-blend yellow bg 0.1))
    ;;;; org <built-in> <modes:org-mode>
    (org-archived :foreground doc-comments)
    (org-block :background base3 :extend t)
    (org-block-background :background base3 :extend t)
    (org-block-begin-line :inherit 'org-block :foreground comments)
    (org-block-end-line :inherit 'org-block-begin-line)
    (org-checkbox :inherit 'org-todo)
    (org-checkbox-statistics-done :inherit 'org-done)
    (org-checkbox-statistics-todo :inherit 'org-todo)
    (org-cite :foreground (doom-blend teal fg 0.9))
    (org-cite-key :foreground (doom-blend teal fg 0.6) :underline t)
    (org-code :inherit 'org-block :foreground orange)
    (org-date :foreground yellow)
    (org-default :inherit 'variable-pitch)
    (org-document-info :foreground builtin)
    (org-document-title :foreground builtin :weight 'bold)
    (org-done
     :inherit 'org-headline-done
     :strike-through nil
     :weight 'bold)
    (org-drawer :foreground comments)
    (org-ellipsis :foreground comments :underline nil)
    (org-footnote :foreground orange)
    (org-formula :foreground cyan)
    (org-headline-done :foreground base5)
    (org-hide :foreground bg)
    (org-latex-and-related :foreground base8 :weight 'bold)
    (org-link :inherit 'link :foreground highlight)
    (org-list-dt :foreground highlight)
    (org-meta-line :foreground doc-comments)
    (org-priority :foreground red)
    (org-property-value :foreground doc-comments)
    (org-quote :inherit 'org-block :slant 'italic)
    (org-special-keyword :foreground doc-comments)
    (org-table :foreground violet)
    (org-tag :foreground doc-comments :weight 'normal)
    (org-todo :foreground green :bold 'inherit)
    (org-verbatim :foreground green)
    (org-warning :foreground warning)
    ;; Omitted because we rely on style they inherit from the outline-N faces
    ;;(org-level-1)
    ;;(org-level-2)
    ;;(org-level-3)
    ;;(org-level-4)
    ;;(org-level-5)
    ;;(org-level-6)
    ;;(org-level-7)
    ;;(org-level-8)
    ;;;; org-agenda <built-in>
    (org-agenda-done :inherit 'org-done)
    (org-agenda-dimmed-todo-face :foreground comments)
    (org-agenda-date :foreground violet :weight 'ultra-bold)
    (org-agenda-date-today
     :foreground (doom-lighten violet 0.4)
     :weight 'ultra-bold)
    (org-agenda-date-weekend
     :foreground (doom-darken violet 0.4)
     :weight 'ultra-bold)
    (org-agenda-structure :foreground fg :weight 'ultra-bold)
    (org-agenda-clocking :background (doom-blend blue bg 0.2))
    (org-upcoming-deadline :foreground (doom-blend fg bg 0.8))
    (org-upcoming-distant-deadline :foreground (doom-blend fg bg 0.5))
    (org-scheduled :foreground fg)
    (org-scheduled-today :foreground base7)
    (org-scheduled-previously :foreground base8)
    (org-time-grid :foreground comments)
    (org-sexp-date :foreground fg)
    ;;;; org-habit
    (org-habit-clear-face :weight 'bold :background base4)
    (org-habit-clear-future-face :weight 'bold :background base3)
    (org-habit-ready-face
     :weight 'bold
     :background (doom-blend blue bg-alt 0.5))
    (org-habit-ready-future-face
     :weight 'bold
     :background (doom-blend blue bg-alt 0.3))
    (org-habit-alert-face
     :weight 'bold
     :background (doom-blend yellow bg-alt 0.5))
    (org-habit-alert-future-face
     :weight 'bold
     :background (doom-blend yellow bg-alt 0.3))
    (org-habit-overdue-face
     :weight 'bold
     :background (doom-blend red bg-alt 0.5))
    (org-habit-overdue-future-face
     :weight 'bold
     :background (doom-blend red bg-alt 0.3))
    ;;;; org-journal <modes:org-journal-mode>
    (org-journal-highlight :foreground highlight)
    (org-journal-calendar-entry-face
     :foreground magenta
     :slant 'italic)
    (org-journal-calendar-scheduled-face
     :foreground red
     :slant 'italic)
    ;;;; org-pomodoro
    (org-pomodoro-mode-line :foreground red)
    (org-pomodoro-mode-line-overtime
     :foreground warning
     :weight 'bold)
    ;;;; org-ref
    (org-ref-acronym-face :foreground violet)
    (org-ref-cite-face :foreground yellow :weight 'light :underline t)
    (org-ref-glossary-face :foreground magenta)
    (org-ref-label-face :foreground blue)
    (org-ref-ref-face :inherit 'link :foreground teal)
    ;;;; outline <built-in>
    ;; NOTE org-mode's org-level-N faces inherit these outline-N faces.
    (outline-1 :foreground blue :weight 'bold :extend t)
    (outline-2 :foreground magenta :weight 'bold :extend t)
    (outline-3 :foreground violet :weight 'bold :extend t)
    (outline-4
     :foreground (doom-lighten blue 0.25)
     :weight 'bold
     :extend t)
    (outline-5
     :foreground (doom-lighten magenta 0.25)
     :weight 'bold
     :extend t)
    (outline-6
     :foreground (doom-lighten blue 0.5)
     :weight 'bold
     :extend t)
    (outline-7
     :foreground (doom-lighten magenta 0.5)
     :weight 'bold
     :extend t)
    (outline-8
     :foreground (doom-lighten blue 0.8)
     :weight 'bold
     :extend t)
    ;;;; parenface
    (paren-face :foreground comments)
    ;;;; parinfer
    (parinfer-pretty-parens:dim-paren-face :foreground base5)
    (parinfer-smart-tab:indicator-face :foreground base5)
    ;;;; perspective
    (persp-selected-face :foreground blue :weight 'bold)
    ;;;; persp-mode
    (persp-face-lighter-default :foreground highlight :weight 'bold)
    (persp-face-lighter-buffer-not-in-persp :foreground doc-comments)
    (persp-face-lighter-nil-persp :foreground comments)
    ;;;; pkgbuild-mode <modes:pkgbuild-mode>
    (pkgbuild-error-face :underline `(:style wave :color ,red))
    ;;;; popup
    (popup-face :inherit 'tooltip)
    (popup-tip-face
     :inherit 'popup-face
     :foreground violet
     :background base0)
    (popup-selection-face :background selection)
    ;;;; power
    (powerline-active0 :inherit 'mode-line :background bg)
    (powerline-active1
     :inherit 'mode-line
     :background (doom-lighten 'bg 0.025))
    (powerline-active2
     :inherit 'mode-line
     :foreground base8
     :background (doom-lighten 'bg 0.08))
    (powerline-inactive0
     :inherit 'mode-line-inactive
     :background base2)
    (powerline-inactive1
     :inherit 'mode-line-inactive
     :background (doom-lighten 'base2 0.02))
    (powerline-inactive2
     :inherit 'mode-line-inactive
     :background (doom-lighten 'base2 0.04))
    ;;;; rainbow-delimiters
    (rainbow-delimiters-depth-1-face :foreground blue)
    (rainbow-delimiters-depth-2-face :foreground magenta)
    (rainbow-delimiters-depth-3-face :foreground green)
    (rainbow-delimiters-depth-4-face :foreground violet)
    (rainbow-delimiters-depth-5-face :foreground teal)
    (rainbow-delimiters-depth-6-face :foreground blue)
    (rainbow-delimiters-depth-7-face :foreground magenta)
    (rainbow-delimiters-depth-8-face :foreground green)
    (rainbow-delimiters-depth-9-face :foreground violet)
    (rainbow-delimiters-base-error-face
     :inherit 'rainbow-delimiters-base-face
     :foreground error)
    (rainbow-delimiters-base-face :inherit 'default)
    (rainbow-delimiters-unmatched-face
     :foreground red
     :weight 'bold
     :inverse-video t)
    (rainbow-delimiters-mismatched-face
     :inherit 'rainbow-delimiters-unmatched-face)
    ;;;; re-builder <built-in>
    (reb-match-0 :foreground orange :inverse-video t)
    (reb-match-1 :foreground magenta :inverse-video t)
    (reb-match-2 :foreground green :inverse-video t)
    (reb-match-3 :foreground yellow :inverse-video t)
    ;;;; rjsx-mode <modes:rjsx-mode>
    (rjsx-tag :foreground type)
    (rjsx-attr :foreground functions)
    ;;;; rpm-spec-mode <modes:rpm-spec-mode>
    (rpm-spec-macro-face :foreground yellow)
    (rpm-spec-var-face :foreground violet)
    (rpm-spec-tag-face :foreground blue)
    (rpm-spec-obsolete-tag-face :foreground red)
    (rpm-spec-package-face :foreground orange)
    (rpm-spec-dir-face :foreground green)
    (rpm-spec-doc-face :foreground orange)
    (rpm-spec-ghost-face :foreground comments)
    (rpm-spec-section-face :foreground magenta)
    ;;;; rst <built-in> <modes:rst-mode>
    (rst-block :inherit 'font-lock-constant-face)
    (rst-level-1 :inherit 'rst-adornment :weight 'bold)
    (rst-level-2 :inherit 'rst-adornment :weight 'bold)
    (rst-level-3 :inherit 'rst-adornment :weight 'bold)
    (rst-level-4 :inherit 'rst-adornment :weight 'bold)
    (rst-level-5 :inherit 'rst-adornment :weight 'bold)
    (rst-level-6 :inherit 'rst-adornment :weight 'bold)
    ;;;; sh-script <built-in> <modes:sh-mode,shell-script-mode>
    (sh-heredoc :inherit 'font-lock-string-face :weight 'normal)
    (sh-quoted-exec :inherit 'font-lock-preprocessor-face)
    ;;;; show-paren <built-in>
    ((show-paren-match &inherit paren-face-match))
    ((show-paren-mismatch &inherit paren-face-mismatch))
    ;;;; smart-mode-line
    (sml/charging :foreground green)
    (sml/discharging :foreground yellow :weight 'bold)
    (sml/filename :foreground violet :weight 'bold)
    (sml/git :foreground blue)
    (sml/modified :foreground cyan)
    (sml/outside-modified :foreground cyan)
    (sml/process :weight 'bold)
    (sml/read-only :foreground cyan)
    (sml/sudo :foreground orange :weight 'bold)
    (sml/vc-edited :foreground green)
    ;;;; smartparens
    (sp-pair-overlay-face :background region)
    ((sp-show-pair-match-face &inherit show-paren-match))
    ((sp-show-pair-mismatch-face &inherit show-paren-mismatch))
    ;;;; smerge-tool
    (smerge-lower :background (doom-blend green bg 0.2))
    (smerge-upper :background (doom-blend red base3 0.2))
    (smerge-base :background (doom-blend blue bg 0.2))
    (smerge-markers
     :background comments
     :foreground bg
     :distant-foreground fg
     :weight 'bold)
    (smerge-refined-added :inherit 'diff-added :inverse-video t)
    (smerge-refined-removed :inherit 'diff-removed :inverse-video t)
    ;; Emacs <25 compatibility
    ((smerge-mine &inherit smerge-upper))
    ((smerge-other &inherit smerge-lower))
    ;;;; solaire-mode
    (solaire-default-face :inherit 'default :background bg-alt)
    (solaire-hl-line-face :inherit 'hl-line :background bg :extend t)
    (solaire-org-hide :inherit 'org-hide :foreground bg-alt)
    ;;;; spaceline
    (spaceline-highlight-face :background highlight)
    (spaceline-modified :background vc-modified)
    (spaceline-unmodified :background constants)
    (spaceline-python-venv
     :foreground magenta
     :distant-foreground violet)
    (spaceline-flycheck-error
     :inherit 'error
     :distant-background base0)
    (spaceline-flycheck-warning
     :inherit 'warning
     :distant-background base0)
    (spaceline-flycheck-info
     :inherit 'success
     :distant-background base0)
    (spaceline-evil-normal :background blue)
    (spaceline-evil-insert :background green)
    (spaceline-evil-emacs :background cyan)
    (spaceline-evil-replace :background orange)
    (spaceline-evil-visual :background grey)
    (spaceline-evil-motion :background magenta)
    ;;;; spell-fu
    (spell-fu-incorrect-face
     `((((supports :underline (:style wave)))
        (:underline (:style wave :color ,(car error))))
       (t (:inherit error :underline t))))
    ;;;; stripe-buffer
    (stripe-highlight
     (&light :background base5) (&dark :background base3))
    ;;;; symbol-overlay
    (symbol-overlay-default-face
     (&dark
      :background (doom-lighten region 0.1)
      :distant-foreground fg-alt)
     (&light
      :background (doom-darken region 0.1)
      :distant-foreground fg-alt))
    (symbol-overlay-face-1
     :background (doom-blend blue bg 0.4)
     :distant-foreground fg-alt)
    (symbol-overlay-face-2
     :background (doom-blend violet bg 0.4)
     :distant-foreground fg-alt)
    (symbol-overlay-face-3
     :background (doom-blend yellow bg 0.3)
     :distant-foreground fg-alt)
    (symbol-overlay-face-4
     :background (doom-blend orange bg 0.3)
     :distant-foreground fg-alt)
    (symbol-overlay-face-5
     :background (doom-blend red bg 0.3)
     :distant-foreground fg-alt)
    (symbol-overlay-face-6
     :background (doom-blend magenta bg 0.3)
     :distant-foreground fg-alt)
    (symbol-overlay-face-7
     :background (doom-blend green bg 0.4)
     :distant-foreground fg-alt)
    (symbol-overlay-face-8
     :background (doom-blend cyan bg 0.2)
     :distant-foreground fg-alt)
    ;;;; swiper
    (swiper-line-face :background blue :foreground base0)
    (swiper-match-face-1
     :inherit 'unspecified
     :background base0
     :foreground base5)
    (swiper-match-face-2
     :inherit 'unspecified
     :background orange
     :foreground base0
     :weight 'bold)
    (swiper-match-face-3
     :inherit 'unspecified
     :background magenta
     :foreground base0
     :weight 'bold)
    (swiper-match-face-4
     :inherit 'unspecified
     :background green
     :foreground base0
     :weight 'bold)
    ;;;; tabbar
    (tabbar-default :foreground bg :background bg :height 1.0)
    (tabbar-highlight
     :foreground fg
     :background selection
     :distant-foreground bg)
    (tabbar-button :foreground fg :background bg)
    (tabbar-button-highlight :inherit 'tabbar-button :inverse-video t)
    (tabbar-modified
     :inherit 'tabbar-default
     :foreground red
     :weight 'bold)
    (tabbar-unselected :inherit 'tabbar-default :foreground base5)
    (tabbar-unselected-modified :inherit 'tabbar-modified)
    (tabbar-selected
     :inherit 'tabbar-default
     :weight 'bold
     :foreground fg
     :background bg-alt)
    (tabbar-selected-modified
     :inherit 'tabbar-selected
     :foreground green)
    ;;;; telephone-line
    (telephone-line-accent-active :foreground fg :background base4)
    (telephone-line-accent-inactive :foreground fg :background base2)
    (telephone-line-projectile :foreground green)
    (telephone-line-evil :foreground fg :weight 'bold)
    (telephone-line-evil-insert
     :background (doom-blend green bg 0.5)
     :weight 'bold)
    (telephone-line-evil-normal
     :background (doom-blend red bg 0.5)
     :weight 'bold)
    (telephone-line-evil-visual
     :background (doom-blend orange bg 0.5)
     :weight 'bold)
    (telephone-line-evil-replace
     :background (doom-color bg-alt)
     :weight 'bold)
    (telephone-line-evil-motion
     :background (doom-blend blue bg 0.5)
     :weight 'bold)
    (telephone-line-evil-operator
     :background (doom-blend violet bg 0.5)
     :weight 'bold)
    (telephone-line-evil-emacs
     :background (doom-blend magenta bg 0.5)
     :weight 'bold)
    ;;;; term <built-in>
    (term :foreground fg)
    (term-bold :weight 'bold)
    (term-color-black :background base0 :foreground base0)
    (term-color-red :background red :foreground red)
    (term-color-green :background green :foreground green)
    (term-color-yellow :background yellow :foreground yellow)
    (term-color-blue :background blue :foreground blue)
    (term-color-magenta :background magenta :foreground magenta)
    (term-color-cyan :background cyan :foreground cyan)
    (term-color-white :background base8 :foreground base8)
    ;;;; terraform-mode
    (terraform--resource-type-face :foreground type)
    (terraform--resource-name-face :foreground strings)
    ;;;; tldr
    (tldr-command-itself
     :foreground bg
     :background green
     :weight 'semi-bold)
    (tldr-title :foreground yellow :bold t :height 1.4)
    (tldr-description :foreground fg :weight 'semi-bold)
    (tldr-introduction
     :foreground (doom-blend blue bg 0.8)
     :weight 'semi-bold)
    (tldr-code-block
     :foreground green
     :background region
     :weight 'semi-bold)
    (tldr-command-argument :foreground fg :background region)
    ;;;; typescript-mode <modes:typescript-mode,typescript-tsx-mode>
    (typescript-jsdoc-tag :foreground doc-comments)
    (typescript-jsdoc-type
     :foreground (doom-darken doc-comments 0.15))
    (typescript-jsdoc-value
     :foreground (doom-lighten doc-comments 0.15))
    ;;;; treemacs
    (treemacs-directory-face :foreground fg)
    (treemacs-file-face :foreground fg)
    (treemacs-fringe-indicator-face :foreground highlight)
    (treemacs-git-added-face :foreground vc-added)
    (treemacs-git-conflict-face :foreground red)
    (treemacs-git-modified-face :foreground violet)
    (treemacs-git-untracked-face :inherit 'font-lock-doc-face)
    (treemacs-on-failure-pulse-face
     :foreground base0
     :background error
     :extend t)
    (treemacs-on-success-pulse-face
     :foreground base0
     :background success
     :extend t)
    (treemacs-root-face
     :inherit 'font-lock-string-face
     :weight 'bold
     :height 1.2)
    (treemacs-tags-face :foreground highlight)
    ;;;; treemacs-nerd-icons
    (treemacs-nerd-icons-file-face :foreground doc-comments)
    (treemacs-nerd-icons-root-face
     :inherit 'font-lock-string-face
     :weight 'bold
     :height 1.2)
    ;;;; ts-fold
    (ts-fold-fringe-face)
    ((ts-fold-replacement-face &inherit +fold-hideshow-folded-face))
    ((ts-fold-replacement-mouse-face
      &inherit +fold-hideshow-folded-face)
     :box '(:line-width -1 :style released-button))
    ;;;; twittering-mode
    (twitter-divider ; custom face in Doom Emacs
     (&light :underline `(:color ,(doom-lighten vertical-bar 0.2)))
     (&dark :underline `(:color ,(doom-darken vertical-bar 0.2))))
    ;;;; undo-tree
    (undo-tree-visualizer-default-face :foreground base5)
    (undo-tree-visualizer-current-face
     :foreground green
     :weight 'bold)
    (undo-tree-visualizer-unmodified-face :foreground base5)
    (undo-tree-visualizer-active-branch-face :foreground blue)
    (undo-tree-visualizer-register-face :foreground yellow)
    ;;;; vimish-fold
    (vimish-fold-overlay
     :inherit 'font-lock-comment-face
     :background base0
     :weight 'light)
    (vimish-fold-fringe :foreground magenta)
    ;;;; visual-regexp
    (vr/group-0 :background blue :foreground bg)
    (vr/group-1 :background magenta :foreground bg)
    (vr/group-2 :background green :foreground bg)
    (vr/match-0 :background (doom-blend green bg 0.2) :foreground fg)
    (vr/match-1 :background (doom-blend green bg 0.4) :foreground fg)
    (vr/match-separator-face :inherit 'bold :foreground red)
    ;;;; volatile-highlights
    (vhl/default-face :background grey)
    ;;;; vterm
    (vterm-color-black
     :background (doom-lighten base0 0.25)
     :foreground base0)
    (vterm-color-red
     :background (doom-lighten red 0.25)
     :foreground red)
    (vterm-color-green
     :background (doom-lighten green 0.25)
     :foreground green)
    (vterm-color-yellow
     :background (doom-lighten yellow 0.25)
     :foreground yellow)
    (vterm-color-blue
     :background (doom-lighten blue 0.25)
     :foreground blue)
    (vterm-color-magenta
     :background (doom-lighten magenta 0.25)
     :foreground magenta)
    (vterm-color-cyan
     :background (doom-lighten cyan 0.25)
     :foreground cyan)
    (vterm-color-white
     :background (doom-lighten base8 0.25)
     :foreground base8)
    ;;;; web-mode <modes:web-mode>
    (web-mode-block-control-face :foreground builtin)
    (web-mode-block-delimiter-face :foreground builtin)
    (web-mode-css-property-name-face :foreground type)
    (web-mode-doctype-face :foreground comments)
    (web-mode-html-tag-face :foreground methods)
    (web-mode-html-tag-bracket-face :foreground methods)
    (web-mode-html-attr-name-face :foreground type)
    (web-mode-html-attr-value-face :foreground strings)
    (web-mode-html-entity-face :foreground cyan :inherit 'italic)
    (web-mode-block-control-face :foreground orange)
    (web-mode-html-tag-bracket-face :foreground operators)
    (web-mode-json-key-face :foreground strings)
    (web-mode-json-context-face :foreground strings)
    (web-mode-keyword-face :foreground keywords)
    (web-mode-string-face :foreground strings)
    (web-mode-type-face :foreground type)
    ;;;; wgrep <built-in>
    (wgrep-face :weight 'bold :foreground green :background base5)
    (wgrep-delete-face :foreground base3 :background red)
    (wgrep-done-face :foreground blue)
    (wgrep-file-face :foreground comments)
    (wgrep-reject-face :foreground red :weight 'bold)
    ;;;; which-func
    (which-func :foreground blue)
    ;;;; which-key
    (which-key-key-face :foreground green)
    (which-key-group-description-face :foreground violet)
    (which-key-command-description-face :foreground blue)
    (which-key-local-map-description-face :foreground magenta)
    ;;;; whitespace <built-in>
    (whitespace-empty :background base3)
    (whitespace-space :foreground base4)
    (whitespace-newline :foreground base4)
    (whitespace-tab
     :foreground base4
     :background
     (if (default-value 'indent-tabs-mode)
         'unspecified
       base3))
    (whitespace-indentation
     :foreground base4
     :background
     (if (default-value 'indent-tabs-mode)
         base3
       'unspecified))
    (whitespace-trailing :inherit 'trailing-whitespace)
    (whitespace-line :background base0 :foreground red :weight 'bold)
    ;;;; widget
    (widget-button-pressed :foreground red)
    (widget-documentation :foreground green)
    (widget-single-line-field
     :background base3
     :distant-foreground bg)
    (widget-field
     :background base3
     :distant-foreground bg
     :box `(:line-width -1 :color ,grey)
     :extend t)
    ;;;; window-divider
    (window-divider :inherit 'vertical-border)
    (window-divider-first-pixel :inherit 'window-divider)
    (window-divider-last-pixel :inherit 'window-divider)
    ;;;; window-tool-bar
    (window-tool-bar-button :background bg :foreground fg)
    (window-tool-bar-button-hover
     :inherit 'highlight
     :distant-foreground bg)
    (window-tool-bar-button-disabled
     :background bg-alt
     :foreground fg-alt)
    ;;;; winum
    (winum-face :inherit 'bold :foreground highlight)
    ;;;; woman <built-in>
    (woman-bold :inherit 'Man-overstrike)
    (woman-italic :inherit 'Man-underline)
    ;;;; xah-elisp-mode
    (xah-elisp-at-symbol :inherit 'font-lock-warning-face)
    (xah-elisp-cap-variable :inherit 'font-lock-preprocessor-face)
    (xah-elisp-command-face :inherit 'font-lock-type-face)
    (xah-elisp-dollar-symbol :inherit 'font-lock-variable-name-face)
    ;;;; workgroups2
    (wg-current-workgroup-face
     :foreground base0
     :background highlight)
    (wg-other-workgroup-face :foreground base5)
    (wg-divider-face :foreground grey)
    (wg-brace-face :foreground highlight)
    ;;;; yasnippet
    (yas-field-highlight-face :inherit 'match)
    ;;;; xref <built-in>
    ((xref-file-header &inherit compilation-info))
    ((xref-line-number &inherit compilation-line-number))
    ((xref-match &inherit match)))
  ;;;; --- END Package faces ------------------

  "TODO")

;;;; --- Package variables ------------------
(defvar doom-themes-base-vars
  '(
    ;;;; ansi-color <built-in> DEPRECATED
    (ansi-color-names-vector
     (vconcat
      (mapcar
       #'doom-color '(bg red green yellow blue magenta cyan fg))))
    ;;;; rustic <modes:rustic-mode>
    (rustic-ansi-faces
     (vconcat
      (mapcar
       #'doom-color '(bg red green yellow blue magenta cyan fg))))
    ;;;; exwm
    (exwm-floating-border-color (doom-color 'vertical-bar))
    ;;;; fill-column-indicator
    (fci-rule-color (doom-color 'base5))
    ;;;; jdee <modes:jdee-mode>
    (jdee-db-spec-breakpoint-face-colors
     `(cons ,(doom-color 'base0) ,(doom-color 'grey)))
    (jdee-db-requested-breakpoint-face-colors
     `(cons ,(doom-color 'base0) ,(doom-color 'green)))
    (jdee-db-active-breakpoint-face-colors
     `(cons ,(doom-color 'base0) ,(doom-color 'highlight)))
    ;;;; highlight-tail
    (highlight-tail-colors
     `((,(doom-blend green bg 0.1) . 0)
       (,(doom-blend cyan bg 0.1) . 20)))
    ;;;; objed
    (objed-cursor-color (doom-color 'red))
    ;;;; pdf-tools
    (pdf-view-midnight-colors
     `(cons ,(doom-color 'fg) ,(doom-color 'bg)))
    ;;;; vc <built-in>
    (vc-annotate-color-map
     `(list
       (cons 20 ,(doom-color 'green))
       (cons 40 ,(doom-blend 'yellow 'green (/ 1.0 3)))
       (cons 60 ,(doom-blend 'yellow 'green (/ 2.0 3)))
       (cons 80 ,(doom-color 'yellow))
       (cons 100 ,(doom-blend 'orange 'yellow (/ 1.0 3)))
       (cons 120 ,(doom-blend 'orange 'yellow (/ 2.0 3)))
       (cons 140 ,(doom-color 'orange))
       (cons 160 ,(doom-blend 'magenta 'orange (/ 1.0 3)))
       (cons 180 ,(doom-blend 'magenta 'orange (/ 2.0 3)))
       (cons 200 ,(doom-color 'magenta))
       (cons 220 ,(doom-blend 'red 'magenta (/ 1.0 3)))
       (cons 240 ,(doom-blend 'red 'magenta (/ 2.0 3)))
       (cons 260 ,(doom-color 'red))
       (cons 280 ,(doom-blend 'grey 'red (/ 1.0 4)))
       (cons 300 ,(doom-blend 'grey 'red (/ 2.0 4)))
       (cons 320 ,(doom-blend 'grey 'red (/ 3.0 4)))
       (cons 340 ,(doom-color 'base5))
       (cons 360 ,(doom-color 'base5))))
    (vc-annotate-very-old-color nil)
    (vc-annotate-background (doom-color 'bg)))
  ;;;; --- END Package variables --------------
  "TODO")

(provide 'doom-themes-base)
;;; doom-themes-base.el ends here
;;; doom-themes.el --- an opinionated pack of modern color-themes -*- lexical-binding: t; -*-
;; aaaaaaaaa
;; Copyright (C) 2016-2024 Henrik Lissner
;;
;; Author: Henrik Lissner <contact@henrik.io>
;; Maintainer: Henrik Lissner <contact@henrik.io>
;; Maintainer: Emmanuel Bustos Torres <ema2159@gmail.com>
;; Created: May 22, 2016
;; Version: 2.3.0
;; Keywords: themes faces
;; Homepage: https://github.com/doomemacs/themes
;; Package-Requires: ((emacs "25.1") (cl-lib "0.5"))
;;
;; This file is not part of GNU Emacs.
;;
;;; Commentary:
;;
;; doomemacs/themes is an megapack of popular themes, including aesthetic
;; extensions for popular packages.
;;
;; Themes in this pack:
;;  - doom-1337 -- ported from VSCode's 1337 theme (ported by @ccmywish)
;;  - doom-acario-dark -- an original dark theme (ported by @gagbo)
;;  - doom-acario-light -- an original light theme (ported by @gagbo)
;;  - doom-ayu-dark -- inspired by Ayu Dark (ported by @ashton)
;;  - doom-ayu-light -- inspirted by Ayu Light (ported by @LoveSponge)
;;  - doom-ayu-mirage -- inspired by Ayu Mirage (ported by @LoveSponge)
;;  - doom-badger -- inspired by cann's Badger colorscheme (ported by @jsoa)
;;  - doom-challenger-deep -- inspired by Vim's Challenger Deep theme (ported by @fuxialexander)
;;  - doom-city-lights -- inspired by Atom's City Lights theme (ported by @fuxialexander)
;;  - doom-dark+ -- ported from equinusocio's VSCode Theme, dark+ (ported by @ema2159)
;;  - doom-dracula -- inspired by the popular Dracula theme (ported by @fuxialexander)
;;  - doom-earl-grey -- a gentle color scheme, for code (ported by @JuneKelly)
;;  - doom-ephemeral -- inspired by the Ephemeral Theme from elenapan's dotfiles (ported by @karetsu)
;;  - doom-fairy-floss -- a candy colored theme by sailorhg (ported by @ema2159)
;;  - doom-feather-dark -- a purple-tinted theme, inspired by doom-one (by @Plunne)
;;  - doom-feather-light -- a light variable of feather-dark, inspired by doom-one (by @Plunne)
;;  - doom-flatwhite -- inspired by Atom's Flatwhite Syntax theme (ported by @JuneKelly)
;;  - doom-gruvbox -- inspired by morhetz's Gruvbox (ported by @JongW)
;;  - doom-gruvbox-light -- inspired by morhetz's Gruvbox (light) (ported by @jsoa)
;;  - doom-henna -- based on VSCode's Henna theme (ported by @jsoa)
;;  - doom-homage-black -- a minimalistic, colorless theme inspired by eziam, tao, and jbeans (ported by @mskorzhinskiy)
;;  - doom-homage-white -- minimal white theme inspired by editors from 2000s (ported by @mskorzhinskiy)
;;  - doom-horizon -- ported from VSCode Horizon (ported by @karetsu)
;;  - doom-Iosvkem -- ported from the default dark theme for Adobe Brackets (ported by @neutaaaaan)
;;  - doom-ir-black -- ported from Vim's ir_black colorscheme (ported by @legendre6891)
;;  - doom-lantern -- based on Gitleptune's Lantern theme (ported by @paladhammika)
;;  - doom-laserwave -- a clean synthwave/outrun theme inspired by VSCode's Laserwave (ported by @hyakt)
;;  - doom-manegarm -- an original autumn-inspired dark theme (ported by @kenranunderscore)
;;  - doom-material -- adapted from equinusocio's Material themes (ported by @tam5)
;;  - doom-material-dark -- inspired by Material Theme by xrei (ported by @trev-dev)
;;  - doom-meltbus -- a dark (mostly) monochromatic theme (ported by @spacefrogg)
;;  - doom-miramare -- a port of Franbach's Miramare theme; a variant of Grubox (ported by @sagittaros)
;;  - doom-molokai -- inspired by Tomas Restrepo's Molokai (ported by @hlissner)
;;  - doom-monokai-classic -- port of Monokai Classic (ported by @ema2159)
;;  - doom-monokai-machine -- port of Monokai Classic (ported by @minikN)
;;  - doom-monokai-octagon -- port of Monokai Octagon (ported by @minikN)
;;  - doom-monokai-pro -- Port of Monokai Pro (ported by @minikN)
;;  - doom-monokai-ristretto -- Port of Monokai Ristretto (ported by @minikN)
;;  - doom-monokai-spectrum -- port of Monokai Spectrum (ported by @minikN)
;;  - doom-moonlight -- inspired by VS code's Moonlight (ported by @Brettm12345)
;;  - doom-nord -- dark variant of Nord (ported by @fuxialexander)
;;  - doom-nord-aurora -- a light variant of Nord (ported by @MoskitoHero)
;;  - doom-nord-light -- light variant of Nord (ported by @fuxialexander)
;;  - doom-nova -- inspired by Trevord Miller's Nova (ported by @bigardone)
;;  - doom-oceanic-next -- inspired by Oceanic Next (ported by @juanwolf)
;;  - doom-oksolar-dark -- an OKLab variant of Solarized dark (ported by @logc)
;;  - doom-oksolar-light -- an OKLab variant of Solarized light (ported by @logc)
;;  - doom-old-hope -- inspired by An Old Hope, in a galaxy far far away (ported by @teesloane)
;;  - doom-one -- inspired by Atom One Dark (ported by @hlissner)
;;  - doom-one-light -- inspired by Atom One Light (ported by @ztlevi)
;;  - doom-opera -- an original light theme (ported by @jwintz)
;;  - doom-opera-light -- an original light theme (ported by @jwintz)
;;  - doom-outrun-electric -- a high contrast, neon theme inspired by Outrun Electric on VSCode (ported by @ema2159)
;;  - doom-palenight -- adapted from equinusocio's Material themes (ported by @Brettm12345)
;;  - doom-peacock -- inspired by daylerees' Peacock (ported by @teesloane)
;;  - doom-pine -- a green flavor of doom-gruvbox (by @RomanHargrave)
;;  - doom-plain -- inspired by gko's plain theme for VSCode (ported by @das-s)
;;  - doom-plain-dark -- inspired by gko's plain theme for VSCode (ported by @das-s)
;;  - doom-rouge -- ported from VSCode's Rouge Theme (ported by @das-s)
;;  - doom-shades-of-purple -- a port of VSCode's Shades of Purple (ported by @jwbaldwin)
;;  - doom-snazzy -- inspired by Hyper Snazzy (ported by @ar1a)
;;  - doom-solarized-dark -- a dark variant of Solarized (ported by @ema2159)
;;  - doom-solarized-dark-high-contrast -- a high-contrast variant of Solarized Dark (ported by @jmorag)
;;  - doom-solarized-light -- a light variant of Solarized (ported by @fuxialexander)
;;  - doom-sourcerer -- a port of xero's Sourcerer (ported by @fm0xb)
;;  - doom-spacegrey -- I'm sure you've heard of it (ported by @teesloane)
;;  - doom-tokyo-night -- inspired by VSCode's Tokyo Night theme (ported by @FosterHangdaan)
;;  - doom-tomorrow-day -- a light variant of Tomorrow (ported by @emacswatcher)
;;  - doom-tomorrow-night -- One of the dark variants of Tomorrow (ported by @hlissner)
;;  - doom-vibrant -- a more vibrant variant of doom-one (ported by @hlissner)
;;  - doom-wilmersdorf -- port of Ian Pan's Wilmersdorf (ported by @ema2159)
;;  - doom-xcode -- based off of Apple's Xcode Dark Theme (ported by @kadenbarlow)
;;  - doom-zenburn -- port of the popular Zenburn theme (ported by @jsoa)
;;
;; ## Install
;;
;;   `M-x package-install RET doom-themes`
;;
;; A comprehensive configuration example:
;;
;;   (require 'doom-themes)
;;
;;   ;; Global settings (defaults)
;;   (setq doom-themes-enable-bold t    ; if nil, bold is universally disabled
;;         doom-themes-enable-italic t) ; if nil, italics is universally disabled
;;
;;   ;; Load the theme (doom-one, doom-molokai, etc); keep in mind that each
;;   ;; theme may have their own settings.
;;   (load-theme 'doom-one t)
;;
;;   ;; Enable flashing mode-line on errors
;;   (doom-themes-visual-bell-config)
;;
;;   ;; Enable custom neotree theme
;;   (doom-themes-neotree-config)  ; all-the-icons fonts must be installed!
;;
;;; Code:

(require 'cl-lib)
(require 'doom-themes-base)

(defgroup doom-themes nil
  "Options for doom-themes."
  :group 'faces)

(defcustom doom-themes-padded-modeline nil
  "Default value for padded-modeline setting for themes that support it."
  :group 'doom-themes
  :type '(choice integer boolean))

;;
(defcustom doom-themes-enable-bold t
  "If nil, bold will be disabled across all faces."
  :group 'doom-themes
  :type 'boolean)

(defcustom doom-themes-enable-italic t
  "If nil, italics will be disabled across all faces."
  :group 'doom-themes
  :type 'boolean)


;;
;;; API

(defvar doom-themes--colors nil)
(defvar doom--min-colors '(257 256 16))
(defvar doom--quoted-p nil)
(defvar doom-themes--faces nil)

(defun doom-themes--colors-p (item)
  (declare (pure t) (side-effect-free t))
  (when item
    (cond
     ((listp item)
      (let ((car (car item)))
        (cond
         ((memq car '(quote doom-color))
          nil)

         ((memq car '(backquote \`))
          (let ((doom--quoted-p t))
            (doom-themes--colors-p (cdr item))))

         ((eq car '\,)
          (let (doom--quoted-p)
            (doom-themes--colors-p (cdr item))))

         ((or (doom-themes--colors-p car)
              (doom-themes--colors-p (cdr-safe item)))))))

     ((and (symbolp item)
           (not (keywordp item))
           (not doom--quoted-p)
           (not (equal (substring (symbol-name item) 0 1) "-"))
           (assq item doom-themes--colors))))))

(defun doom-themes--apply-faces (new-faces &optional default-faces)
  (declare (pure t) (side-effect-free t))
  (let ((default-faces (or default-faces doom-themes-base-faces))
        (faces
         (make-hash-table
          :test #'eq
          :size
          (+ (length default-faces) (length new-faces))))
        (directives (make-hash-table :test #'eq)))
    (dolist (spec
             (append
              (mapcar #'copy-sequence default-faces) new-faces))
      (if (listp (car spec))
          (cl-destructuring-bind
           (face action &optional arg) (car spec)
           (unless (assq face new-faces)
             (puthash face (list action arg (cdr spec)) directives)))
        (puthash (car spec) (cdr spec) faces)))
    (cl-loop
     for
     face
     being
     the
     hash-keys
     of
     directives
     for
     (action target spec)
     =
     (gethash face directives)
     unless
     (memq action '(&inherit &extend &override))
     do
     (error "Invalid operation (%s) for '%s' face" action face)
     if
     (eq (car spec) 'quote)
     do
     (error "Can't extend literal face spec (for '%s')" face)
     ;; TODO Add &all/&light/&dark extension support
     else
     if
     (memq (car spec) '(&all &light &dark))
     do
     (error
      "Can't extend face with &all, &light or &dark specs (for '%s')"
      face)
     else
     do
     (puthash
      face
      (let ((old-spec (gethash (or target face) faces))
            (plist spec))
        ;; remove duplicates
        (while (keywordp (car plist))
          (setq
           old-spec (plist-put old-spec (car plist) (cadr plist))
           plist (cddr plist)))
        old-spec)
      faces))
    (let (results)
      (maphash
       (lambda (face plist)
         (when (keywordp (car plist))
           ;; TODO Clean up duplicates in &all/&light/&dark blocks
           (dolist (prop
                    (append
                     (unless doom-themes-enable-bold
                       '(:weight normal :bold unspecified))
                     (unless doom-themes-enable-italic
                       '(:slant normal :italic unspecified))))
             (when (and (plist-member plist prop)
                        (not (eq (plist-get plist prop) 'inherit)))
               (plist-put
                plist prop
                (if (memq prop '(:weight :slant))
                    (quote 'normal))))))
         (push (cons face plist) results))
       faces)
      (nreverse results))))

(defun doom-themes--colorize (item type)
  (declare (pure t) (side-effect-free t))
  (when item
    (let ((doom--quoted-p doom--quoted-p))
      (cond
       ((listp item)
        (cond
         ((memq (car item) '(quote doom-color))
          item)
         ((eq (car item) 'doom-ref)
          (doom-themes--colorize (apply #'doom-ref (cdr item)) type))
         ((let* ((item (append item nil))
                 (car (car item))
                 (doom--quoted-p
                  (cond
                   ((memq car '(backquote \`))
                    t)
                   ((eq car '\,)
                    nil)
                   (t
                    doom--quoted-p))))
            (cons
             car
             (cl-loop
              for
              i
              in
              (cdr item)
              collect
              (doom-themes--colorize i type)))))))

       ((and (symbolp item)
             (not (keywordp item))
             (not doom--quoted-p)
             (not (equal (substring (symbol-name item) 0 1) "-"))
             (assq item doom-themes--colors))
        `(doom-color ',item ',type))

       (item)))))

(defun doom-themes--build-face (face)
  (declare (pure t) (side-effect-free t))
  `(list
    ',(car face)
    ,(let ((face-body (cdr face)))
       (cond
        ((keywordp (car face-body))
         (let ((real-attrs face-body)
               defs)
           (if (doom-themes--colors-p real-attrs)
               (dolist (cl
                        doom--min-colors `(list ,@ (nreverse defs)))
                 (push `(list
                         '((class color) (min-colors ,cl))
                         (list
                          ,@ (doom-themes--colorize real-attrs cl)))
                       defs))
             `(list (list 't (list ,@real-attrs))))))

        ((memq
          (car-safe (car face-body))
          '(quote backquote
                  \`))
         (car face-body))

        ((let (all-attrs
               defs)
           (dolist (attrs face-body `(list ,@ (nreverse defs)))
             (cond
              ((eq (car attrs) '&all)
               (setq all-attrs (append all-attrs (cdr attrs))))

              ((memq (car attrs) '(&dark &light))
               (let ((bg
                      (if (eq (car attrs) '&dark)
                          'dark
                        'light))
                     (real-attrs (append all-attrs (cdr attrs) '())))
                 (cond
                  ((doom-themes--colors-p real-attrs)
                   (dolist (cl doom--min-colors)
                     (push `(list
                             '((class color)
                               (min-colors ,cl)
                               (background ,bg))
                             (list
                              ,@
                              (doom-themes--colorize real-attrs cl)))
                           defs)))

                  ((push `(list
                           '((background ,bg)) (list ,@real-attrs))
                         defs)))))))))))))


;;
;;; Color helper functions

;; Shamelessly *borrowed* from solarized
;;;###autoload
(defun doom-name-to-rgb (color)
  "Retrieves the hexadecimal string repesented the named COLOR (e.g. \"red\")
for FRAME (defaults to the current frame)."
  (cl-loop
   with
   div
   =
   (float (car (tty-color-standard-values "#ffffff")))
   for
   x
   in
   (tty-color-standard-values (downcase color))
   collect
   (/ x div)))

;;;###autoload
(defun doom-blend (color1 color2 alpha)
  "Blend two colors (hexidecimal strings) together by a coefficient ALPHA (a
float between 0 and 1)"
  (when (and color1 color2)
    (cond
     ((and color1 color2 (symbolp color1) (symbolp color2))
      (doom-blend (doom-color color1) (doom-color color2) alpha))

     ((or (listp color1) (listp color2))
      (cl-loop
       for x in color1 when
       (if (listp color2)
           (pop color2)
         color2)
       collect (doom-blend x it alpha)))

     ((and (string-prefix-p "#" color1) (string-prefix-p "#" color2))
      (apply (lambda (r g b)
               (format "#%02x%02x%02x" (* r 255) (* g 255) (* b 255)))
             (cl-loop
              for
              it
              in
              (doom-name-to-rgb color1)
              for
              other
              in
              (doom-name-to-rgb color2)
              collect
              (+ (* alpha it) (* other (- 1 alpha))))))

     (color1))))

;;;###autoload
(defun doom-darken (color alpha)
  "Darken a COLOR (a hexidecimal string) by a coefficient ALPHA (a float between
0 and 1)."
  (cond
   ((and color (symbolp color))
    (doom-darken (doom-color color) alpha))

   ((listp color)
    (cl-loop for c in color collect (doom-darken c alpha)))

   ((doom-blend color "#000000" (- 1 alpha)))))

;;;###autoload
(defun doom-lighten (color alpha)
  "Brighten a COLOR (a hexidecimal string) by a coefficient ALPHA (a float
between 0 and 1)."
  (cond
   ((and color (symbolp color))
    (doom-lighten (doom-color color) alpha))

   ((listp color)
    (cl-loop for c in color collect (doom-lighten c alpha)))

   ((doom-blend color "#FFFFFF" (- 1 alpha)))))

;;;###autoload
(defun doom-color (name &optional type)
  "Retrieve a specific color named NAME (a symbol) from the current theme."
  (let ((colors
         (if (listp name)
             name
           (cdr-safe (assq name doom-themes--colors)))))
    (and colors
         (cond
          ((listp colors)
           (let ((i (or (plist-get '(256 1 16 2 8 3) type) 0)))
             (if (> i (1- (length colors)))
                 (car (last colors))
               (nth i colors))))
          (t
           colors)))))

;;;###autoload
(defun doom-ref (face prop &optional class)
  "TODO"
  (let ((spec
         (or (cdr (assq face doom-themes--faces))
             (error "Couldn't find the '%s' face" face))))
    (when (memq
           (car spec)
           '(quote backquote
                   \`))
      (user-error "Can't fetch the literal spec for '%s'" face))
    (when class
      (setq spec (cdr (assq class spec)))
      (unless spec
        (error
         "Couldn't find the '%s' class in the '%s' face" class face)))
    (unless (plist-member spec prop)
      (error
       "Couldn't find the '%s' property in the '%s' face%s" prop face
       (if class
           (format "'s '%s' class" class)
         "")))
    (plist-get spec prop)))


;;
;;; Defining themes

(defun doom-themes-prepare-facelist (custom-faces)
  "Return an alist of face definitions for `custom-theme-set-faces'.

Faces in EXTRA-FACES override the default faces."
  (declare (pure t) (side-effect-free t))
  (setq doom-themes--faces (doom-themes--apply-faces custom-faces))
  (mapcar #'doom-themes--build-face doom-themes--faces))

(defun doom-themes-prepare-varlist (vars)
  "Return an alist of variable definitions for `custom-theme-set-variables'.

Variables in EXTRA-VARS override the default ones."
  (declare (pure t) (side-effect-free t))
  (cl-loop
   for
   (var val)
   in
   (append doom-themes-base-vars vars)
   collect
   `(list ',var ,val)))

;;;###autoload
(defun doom-themes-set-faces (theme &rest faces)
  "Customize THEME (a symbol) with FACES.

If THEME is nil, it applies to all themes you load. FACES is a list of Doom
theme face specs. These is a simplified spec. For example:

  (doom-themes-set-faces \\='user
    \\='(default :background red :foreground blue)
    \\='(doom-modeline-bar :background (if -modeline-bright modeline-bg highlight))
    \\='(doom-modeline-buffer-file :inherit \\='mode-line-buffer-id :weight \\='bold)
    \\='(doom-modeline-buffer-path :inherit \\='mode-line-emphasis :weight \\='bold)
    \\='(doom-modeline-buffer-project-root :foreground green :weight \\='bold))"
  (declare (indent defun))
  (apply #'custom-theme-set-faces
         (or theme 'user)
         (eval
          `(let* ((bold ,doom-themes-enable-bold)
                  (italic ,doom-themes-enable-italic)
                  ,@
                  (cl-loop
                   for
                   (var . val)
                   in
                   doom-themes--colors
                   collect
                   `(,var ',val)))
             (list ,@ (mapcar #'doom-themes--build-face faces))))))

(defmacro def-doom-theme
    (name docstring defs &optional extra-faces extra-vars)
  "Define a DOOM theme, named NAME (a symbol)."
  (declare (doc-string 2))
  (let ((doom-themes--colors defs))
    `(let* ((bold doom-themes-enable-bold)
            (italic doom-themes-enable-italic)
            ,@defs)
       (setq doom-themes--colors
             (list
              ,@
              (cl-loop
               for (var val) in defs collect `(cons ',var ,val))))
       (deftheme ,name
         ,docstring)
       (custom-theme-set-faces ',name
                               ,@
                               (doom-themes-prepare-facelist
                                extra-faces))
       (custom-theme-set-variables ',name
                                   ,@
                                   (doom-themes-prepare-varlist
                                    extra-vars))
       (unless bold
         (set-face-bold 'bold 'unspecified))
       (unless italic
         (set-face-italic 'italic 'unspecified))
       (provide-theme ',name))))

;;;###autoload
(when (and (boundp 'custom-theme-load-path) load-file-name)
  (let* ((base (file-name-directory load-file-name))
         (dir (expand-file-name "themes/" base)))
    (add-to-list
     'custom-theme-load-path
     (or (and (file-directory-p dir) dir) base))))

(provide 'doom-themes)
;;; doom-themes.el ends here
;;; doom-tokyo-night-theme.el --- inspired by VSCode's Tokyo Night theme -*- lexical-binding: t; no-byte-compile: t; -*-
;;
;; Added: December 15, 2021 (#650)
;; Author: FosterHangdaan <https://github.com/FosterHangdaan>
;; Maintainer:
;; Source: https://github.com/enkia/tokyo-night-vscode-theme
;;
;;; Commentary:
;;; Code:

(require 'doom-themes)


;;
;;; Variables

(defgroup doom-tokyonight-black-theme nil
  "Options for doom-themes"
  :group 'doom-themes)

(defcustom doom-tokyo-night-brighter-modeline nil
  "If non-nil, more vivid colors will be used to style the mode-line."
  :group 'doom-tokyo-night-theme
  :type 'boolean)

(defcustom doom-tokyo-night-brighter-comments nil
  "If non-nil, comments will be highlighted in more vivid colors."
  :group 'doom-tokyo-night-theme
  :type 'boolean)

(defcustom doom-tokyo-night-comment-bg
  doom-tokyo-night-brighter-comments
  "If non-nil, comments will have a subtle, darker background. Enhancing their legibility."
  :group 'doom-tokyo-night-theme
  :type 'boolean)

(defcustom doom-tokyo-night-padded-modeline nil
  "If non-nil, adds a 4px padding to the mode-line. Can be an integer to determine the exact padding."
  :group 'doom-tokyo-night-theme
  :type '(or integer boolean))


;;
;;; Theme definition

(def-doom-theme
 doom-tokyonight-black
 "A clean, dark theme that celebrates the lights of downtown Tokyo at night."

 ; Color Scheme
 ; gui       256
 ; "#f7768e" "#f7768e" => This keyword, HTML elements, Regex group symbol, CSS units, Terminal Red
 ; "#ff9e64" "#ff9e64" => Number and Boolean constants, Language support constants
 ; "#e0af68" "#e0af68" => Function parameters, Regex character sets, Terminal Yellow
 ; "#9ece6a" "#9ece6a" => Strings, CSS class names
 ; "#73daca" "#73daca" => Object literal keys, Markdown links, Terminal Green
 ; "#b4f9f8" "#b4f9f8" => Regex literal strings
 ; "#2ac3de" "#2ac3de" => Language support functions, CSS HTML elements
 ; "#7dcfff" "#7dcfff" => Object properties, Regex quantifiers and flags, Markdown headings, Terminal Cyan, Markdown code, Import/export keywords
 ; "#7aa2f7" "#7aa2f7" => Function names, CSS property names, Terminal Blue
 ; "#bb9af7" "#bb9af7" => Control Keywords, Storage Types, Regex symbols and operators, HTML Attributes, Terminal Magenta
 ; "#c0caf5" "#c0caf5" => Variables, Class names, Terminal White
 ; "#a9b1d6" "#a9b1d6" => Editor foreground
 ; "#9aa5ce" "#9aa5ce" => Markdown Text, HTML Text
 ; "#cfc9c2" "#cfc9c2" => Parameters inside functions (semantic highlighting only)
 ; "#565f89" "#565f89" => Comments
 ; "#414868" "#414868" => Terminal black
 ; "#24283b" "#24283b" => Editor background (Storm)
 ; "#1a1b26" "#1a1b26" => Editor background (Night)

 ;; name        default   256       16
 ((bg '("#0a0a0a" nil nil))
  (bg-alt '("#0c0c0c" nil nil))
  (base0 '("#1c1c1c" "#1c1c1c" "black"))
  (base1 '("#51587a" "#51587a" "brightblack"))
  (base2 '("#61698b" "#61698b" "brightblack"))
  (base3 '("#71799d" "#71799d" "brightblack"))
  (base4 '("#8189af" "#8189af" "brightblack"))
  (base5 '("#9099c0" "#9099c0" "brightblack"))
  (base6 '("#a0aad2" "#a0aad2" "brightblack"))
  (base7 '("#b0bae3" "#b0bae3" "brightblack"))
  (base8 '("#c0caf5" "#c0caf5" "white"))
  (fg-alt '("#c0caf5" "#c0caf5" "brightwhite"))
  (fg '("#a9b1d6" "#a9b1d6" "white"))

  (grey base4)
  (red '("#f7768e" "#f7768e" "red"))
  (orange '("#ff9e64" "#ff9e64" "brightred"))
  (green '("#73daca" "#73daca" "green"))
  (teal '("#2ac3de" "#2ac3de" "brightgreen"))
  (yellow '("#e0af68" "#e0af68" "yellow"))
  (blue '("#7aa2f7" "#7aa2f7" "brightblue"))
  (dark-blue '("#565f89" "#565f89" "blue"))
  (magenta '("#bb9af7" "#bb9af7" "magenta"))
  (violet '("#9aa5ce" "#9aa5ce" "brightmagenta"))
  (cyan '("#b4f9f8" "#b4f9f8" "brightcyan"))
  (dark-cyan '("#7dcfff" "#7dcfff" "cyan"))
  ; Additional custom colors
  (slate-gray '("dark slate gray" nil nil))
  (dark-green '("#9ece6a" "#9ece6a" "green"))
  (brown '("#cfc9c2" "#cfc9c2" "yellow"))

  ;; face categories -- required for all themes
  (highlight cyan)
  (vertical-bar (doom-lighten bg 0.05))
  (selection base0)
  (hl-line slate-gray)
  (builtin red)
  (comments
   (if doom-tokyo-night-brighter-comments
       base5
     base1))
  (doc-comments
   (doom-lighten
    (if doom-tokyo-night-brighter-comments
        base5
      base1)
    0.25))
  (constants orange)
  (functions blue)
  (keywords magenta)
  (methods blue)
  (operators dark-cyan)
  (type base8)
  (strings dark-green)
  (variables base8)
  (numbers orange)
  (region base0)
  (error red)
  (warning yellow)
  (success green)
  (vc-modified orange)
  (vc-added green)
  (vc-deleted red)

  ;; custom categories
  (hidden `(,(car bg) "black" "black"))
  (-modeline-bright doom-tokyo-night-brighter-modeline)
  (-modeline-pad
   (when doom-tokyo-night-padded-modeline
     (if (integerp doom-tokyo-night-padded-modeline)
         doom-tokyo-night-padded-modeline
       4)))

  (modeline-fg 'unspecified)
  (modeline-fg-alt base5)

  (modeline-bg
   (if -modeline-bright
       base3
     `(,(doom-darken (car bg) 0.15) ,@ (cdr base0))))
  (modeline-bg-l
   (if -modeline-bright
       base3
     `(,(doom-darken (car bg) 0.1) ,@ (cdr base0))))
  (modeline-bg-inactive (doom-darken bg 0.1))
  (modeline-bg-inactive-l `(,(car bg) ,@ (cdr base1))))


 ;; --- Extra Faces ------------------------
 (((line-number-current-line &override) :foreground base8)
  ((line-number &override) :foreground comments :background "#101010")
  ((hl-line &override) :background slate-gray)

  (font-lock-comment-face
   :foreground comments
   :background
   (if doom-tokyo-night-comment-bg
       (doom-lighten bg 0.05)
     'unspecified))
  (font-lock-doc-face
   :inherit 'font-lock-comment-face
   :foreground doc-comments)

  ;;; Doom Modeline
  (doom-modeline-bar
   :background
   (if -modeline-bright
       modeline-bg
     highlight))
  (doom-modeline-buffer-path :foreground base8 :weight 'normal)
  (doom-modeline-buffer-file :foreground brown :weight 'normal)

  (mode-line
   :background modeline-bg
   :foreground modeline-fg
   :box
   (if -modeline-pad
       `(:line-width ,-modeline-pad :color ,modeline-bg)))
  (mode-line-inactive
   :background modeline-bg-inactive
   :foreground modeline-fg-alt
   :box
   (if -modeline-pad
       `(:line-width ,-modeline-pad :color ,modeline-bg-inactive)))
  (mode-line-emphasis
   :foreground
   (if -modeline-bright
       base8
     highlight))
  (mode-line-buffer-id :foreground highlight)

  ;;; Indentation
  (whitespace-indentation :background bg)
  (whitespace-tab :background bg)

  ;;; Ivy
  (ivy-subdir :foreground blue)
  (ivy-minibuffer-match-face-1 :foreground green :background bg-alt)
  (ivy-minibuffer-match-face-2 :foreground orange :background bg-alt)
  (ivy-minibuffer-match-face-3 :foreground red :background bg-alt)
  (ivy-minibuffer-match-face-4 :foreground yellow :background bg-alt)

  ;;; Elscreen
  (elscreen-tab-other-screen-face
   :background "#353a42"
   :foreground "#1e2022")

  ;;; Solaire
  (solaire-mode-line-face
   :inherit 'mode-line
   :background modeline-bg-l
   :box
   (if -modeline-pad
       `(:line-width ,-modeline-pad :color ,modeline-bg-l)))
  (solaire-mode-line-inactive-face
   :inherit 'mode-line-inactive
   :background modeline-bg-inactive-l
   :box
   (if -modeline-pad
       `(:line-width ,-modeline-pad :color ,modeline-bg-inactive-l)))

  ;;; Telephone
  (telephone-line-accent-active
   :inherit 'mode-line
   :background (doom-lighten bg 0.2))
  (telephone-line-accent-inactive
   :inherit 'mode-line
   :background (doom-lighten bg 0.05))
  (telephone-line-evil-emacs
   :inherit 'mode-line
   :background dark-blue)

  ;;;; rainbow-delimiters
  (rainbow-delimiters-depth-1-face :foreground fg)
  (rainbow-delimiters-depth-2-face :foreground blue)
  (rainbow-delimiters-depth-3-face :foreground orange)
  (rainbow-delimiters-depth-4-face :foreground green)
  (rainbow-delimiters-depth-5-face :foreground cyan)
  (rainbow-delimiters-depth-6-face :foreground yellow)
  (rainbow-delimiters-depth-7-face :foreground teal)

  ;;; Treemacs
  (treemacs-root-face :foreground magenta :weight 'bold :height 1.2)
  (doom-themes-treemacs-root-face
   :foreground magenta
   :weight 'ultra-bold
   :height 1.2)
  (doom-themes-treemacs-file-face :foreground fg-alt)
  (treemacs-directory-face :foreground base8)
  (treemacs-file-face :foreground fg)
  (treemacs-git-modified-face :foreground green)
  (treemacs-git-renamed-face :foreground yellow)

  ;;; Magit
  (magit-section-heading :foreground blue)
  (magit-branch-remote :foreground orange)
  (magit-diff-our
   :foreground (doom-darken red 0.2)
   :background (doom-darken red 0.7))
  (magit-diff-our-highlight
   :foreground red
   :background (doom-darken red 0.5)
   :weight 'bold)
  (magit-diff-removed
   :foreground (doom-darken red 0.2)
   :background (doom-darken red 0.7))
  (magit-diff-removed-highlight
   :foreground red
   :background (doom-darken red 0.5)
   :weight 'bold)

  ;; --- Major-Mode Faces -------------------
  ;;; elisp
  (highlight-quoted-symbol :foreground yellow)

  ;;; js2-mode
  (js2-function-param :foreground yellow)
  (js2-object-property :foreground green)

  ;;; typescript-mode
  (typescript-this-face :foreground red)
  (typescript-access-modifier-face :foreground brown)

  ;;; rjsx-mode
  (rjsx-tag :foreground red)
  (rjsx-text :foreground violet)
  (rjsx-attr :foreground magenta :slant 'italic :weight 'medium)
  (rjsx-tag-bracket-face :foreground (doom-darken red 0.3))

  ;;; css-mode / scss-mode
  (css-property :foreground blue)
  (css-selector :foreground teal)
  (css-pseudo-class :foreground orange)

  ;;; markdown-mode
  (markdown-markup-face :foreground violet)
  (markdown-header-face :inherit 'bold :foreground dark-cyan)
  (markdown-blockquote-face
   :foreground violet
   :background (doom-lighten bg 0.04))
  (markdown-table-face
   :foreground violet
   :background (doom-lighten bg 0.04))
  ((markdown-code-face &override)
   :foreground dark-cyan
   :background (doom-lighten bg 0.04))

  ;;; org-mode
  (org-hide :foreground hidden)
  (org-block :background (doom-darken base2 0.65))
  (org-block-begin-line
   :background (doom-darken base2 0.65)
   :foreground comments
   :extend t)
  (solaire-org-hide-face :foreground hidden)

  ;;; web-mode
  (web-mode-json-context-face :foreground brown)
  (web-mode-json-key-face :foreground teal)
  ;;;; Block
  (web-mode-block-delimiter-face :foreground yellow)
  ;;;; Code
  (web-mode-constant-face :foreground constants)
  (web-mode-variable-name-face :foreground variables)
  ;;;; CSS
  (web-mode-css-pseudo-class-face :foreground orange)
  (web-mode-css-property-name-face :foreground blue)
  (web-mode-css-selector-face :foreground teal)
  (web-mode-css-function-face :foreground yellow)
  ;;;; HTML
  (web-mode-html-attr-engine-face :foreground yellow)
  (web-mode-html-attr-equal-face :foreground operators)
  (web-mode-html-attr-name-face :foreground magenta)
  (web-mode-html-tag-bracket-face :foreground (doom-darken red 0.3))
  (web-mode-html-tag-face :foreground red))


 ;; --- extra variables ---------------------
 ;; ()
 )

;;; doom-tokyo-night-theme.el ends here
;;; aaaaa

System

Visual stuff

  • Remove some GUI stuff because muh-minimalism
    (tool-bar-mode -1) ; Hide the outdated icons
    (scroll-bar-mode -1) ; Hide the always-visible scrollbar
    (set-fringe-mode 10) ; Give some breathing room
    (menu-bar-mode -1) ; Disable the menu bar
    
  • Initial splash screen (replaced by dashboard)
    (setq inhibit-splash-screen t) ; Remove the "Welcome to GNU Emacs" splash screen
    (setq initial-scratch-message nil) ; remove initial message
    (defun display-startup-echo-area-message ()
      (message "")) ; no message
    
  • unicode characters
    (set-charset-priority 'unicode) ; utf-8
    (setq
     locale-coding-system 'utf-8
     coding-system-for-read 'utf-8
     coding-system-for-write 'utf-8)
    (set-terminal-coding-system 'utf-8)
    (set-keyboard-coding-system 'utf-8)
    (set-selection-coding-system 'utf-8)
    (prefer-coding-system 'utf-8)
    (setq line-spacing 0.1)
    (setq default-process-coding-system '(utf-8-unix . utf-8-unix))
    

Convenience

  • Yes or no messages (change with y-n)
    (setq use-file-dialog nil) ; Ask for textual confirmation instead of GUI
    (defalias 'yes-or-no-p 'y-or-n-p) ; use y/n 
    
  • Auto pairing of brackets
    (electric-pair-mode 1) ; electric pair mode
    
  • Basic stuff
    (setq backup-directory-alist '(("." . "~/.cache/emacs-backup"))) ; emacs backup
    (setq native-comp-async-report-warnings-errors nil) ; warnings off
    (setq load-prefer-newer t) ; prefer newer packages
    (setq-default indent-tabs-mode nil) ; no tabs, only spaces
    
  • Line numbering
    (defun i0/enable-line-numbers ()
      "Enable relative line numbers"
      (interactive)
      (display-line-numbers-mode)
      (setq display-line-numbers 'relative))
    
    (add-hook 'prog-mode-hook #'i0/enable-line-numbers t)
    (add-hook 'conf-toml-mode-hook #'i0/enable-line-numbers t)
    (add-hook 'toml-mode-hook #'i0/enable-line-numbers t)
    (add-hook 'toml-ts-mode-hook #'i0/enable-line-numbers t)
    (add-hook 'typst-ts-mode-hook #'i0/enable-line-numbers t)
    

Dired options

(setq dired-kill-when-opening-new-dired-buffer t)
(setq dired-listing-switches "-alh")

Elpaca

I don't really know what's happening here, I copied from somewhere.

(defvar elpaca-directory (expand-file-name "elpaca/" user-emacs-directory))
(defvar elpaca-builds-directory (expand-file-name "builds/" elpaca-directory))
(defvar elpaca-repos-directory (expand-file-name "repos/" elpaca-directory))
(defvar elpaca-order
  '(elpaca
    :repo "https://github.com/progfolio/elpaca.git"
    :ref nil
    :files (:defaults (:exclude "extensions"))
    :build (:not elpaca--activate-package)))
(let* ((repo (expand-file-name "elpaca/" elpaca-repos-directory))
       (build (expand-file-name "elpaca/" elpaca-builds-directory))
       (order (cdr elpaca-order))
       (default-directory repo))
  (add-to-list
   'load-path
   (if (file-exists-p build)
       build
     repo))
  (unless (file-exists-p repo)
    (make-directory repo t)
    (when (< emacs-major-version 28)
      (require 'subr-x))
    (condition-case-unless-debug err
        (if-let ((buffer (pop-to-buffer-same-window "*elpaca-bootstrap*"))
                 ((zerop
                   (call-process "git"
                                 nil
                                 buffer
                                 t
                                 "clone"
                                 (plist-get order :repo)
                                 repo)))
                 ((zerop
                   (call-process "git"
                                 nil
                                 buffer
                                 t
                                 "checkout"
                                 (or (plist-get order :ref) "--"))))
                 (emacs (concat invocation-directory invocation-name))
                 ((zerop
                   (call-process emacs
                                 nil
                                 buffer
                                 nil
                                 "-Q"
                                 "-L"
                                 "."
                                 "--batch"
                                 "--eval"
                                 "(byte-recompile-directory \".\" 0 'force)")))
                 ((require 'elpaca))
                 ((elpaca-generate-autoloads "elpaca" repo)))
          (progn
            (message "%s" (buffer-string))
            (kill-buffer buffer))
          (error
           "%s"
           (with-current-buffer buffer
             (buffer-string))))
      ((error) (warn "%s" err) (delete-directory repo 'recursive))))
  (unless (require 'elpaca-autoloads nil t)
    (require 'elpaca)
    (elpaca-generate-autoloads "elpaca" repo)
    (load "./elpaca-autoloads")))
(add-hook 'after-init-hook #'elpaca-process-queues)
(elpaca `(,@elpaca-order))


; Install use-package support
(elpaca
 elpaca-use-package
 ;; Enable :elpaca use-package keyword.
 (elpaca-use-package-mode)
 ;; Assume :elpaca t unless otherwise specified.
 (setq elpaca-use-package-by-default t))

;; Block until current queue processed.
(elpaca-wait)

(setq custom-file (expand-file-name "customs.el" user-emacs-directory))
(add-hook 'elpaca-after-init-hook (lambda () (load custom-file 'noerror)))

GCMH (Faster startups??)

(use-package gcmh :demand t :config (gcmh-mode 1))

Vim go brrr

Vim mode in gen

Enables vim mode in buffer.

Emacs already has a vi mode called Viper.

The base package with its options. Not sure what the options mean but the mini buffer one enables vim binds in mini-buffer as well so yay!

(use-package
 evil
 :demand
 :init
 (setq
  evil-want-keybinding nil
  evil-respect-visual-line-mode t
  evil-want-minibuffer t
  evil-mode-line-format nil
  evil-undo-system 'undo-redo)
 :config
 (evil-mode 1)
 (evil-global-set-key 'normal (kbd "U") 'evil-redo)
 (evil-set-initial-state 'org-agenda-mode 'normal)
 (advice-add
  'evil-find-char
  :around
  (lambda (orig-fun &rest args)
    (let ((evil-cross-lines t))
      (apply orig-fun args))))

 (advice-add
  'evil-find-char-backward
  :around
  (lambda (orig-fun &rest args)
    (let ((evil-cross-lines t))
      (apply orig-fun args))))

 (advice-add
  'evil-find-char-to
  :around
  (lambda (orig-fun &rest args)
    (let ((evil-cross-lines t))
      (apply orig-fun args))))

 (advice-add
  'evil-find-char-to-backward
  :around
  (lambda (orig-fun &rest args)
    (let ((evil-cross-lines t))
      (apply orig-fun args)))))

Additional set of packages that allow vim binds left and right

(use-package evil-collection :after evil :demand t :config (evil-collection-init))

Commenting

gc for commenting

(use-package evil-commentary :config (evil-commentary-mode))

Looks

Theming

  • Theme doom-tokyonight variant
    (setq custom-safe-themes t)
    (add-to-list 'load-path "~/.config/emacs/themes/")
    (load "doom-tokyonight-black-theme")
    (enable-theme 'doom-tokyonight-black)
    
  • Modeline
    ;; (use-package doom-modeline :ensure t :config (doom-modeline-mode 1))
    (use-package
     telephone-line
     :custom
     (telephone-line-lhs
           '((evil . (telephone-line-evil-tag-segment))
             (accent
              .
              (telephone-line-vc-segment
               telephone-line-erc-modified-channels-segment
               telephone-line-process-segment))
             (nil . (telephone-line-projectile-segment))))
     (telephone-line-rhs
           '((nil . (telephone-line-misc-info-segment))
             (accent
              .
              (telephone-line-major-mode-segment
               telephone-line-atom-eol-segment))
             (evil . (telephone-line-airline-position-segment))))
     :config (telephone-line-mode 1))
    
  • Icons
    (use-package nerd-icons :ensure t)
    
    (use-package all-the-icons)
    (elpaca-wait)
    
    (use-package all-the-icons-dired :hook (dired-mode . all-the-icons-dired-mode))
    

Dashboard

Lots of stuff happening at once.

First take care of the icons, then what all to display, and projectile

Then I check for it being a daemon or not and if it is, open dashboard mode on opening a new frame.

(use-package
 dashboard
 :ensure t
 :after (nerd-icons all-the-icons)
 :custom
 (dashboard-icon-type 'all-the-icons)
 (dashboard-items '((projects . 5) (agenda . 5)))
 (dashboard-startup-banner "/home/innocentzero/.config/emacs/ginkgo.txt")
 (dashboard-vertically-center-content t)
 (dashboard-center-content t)
 (dashboard-projects-backend 'projectile)
 (dashboard-set-heading-icons t)
 (dashboard-set-file-icons t)

 :init
 (setq initial-buffer-choice
       (lambda ()
         (get-buffer-create dashboard-buffer-name)
         (dashboard-open)))
 :config (dashboard-setup-startup-hook)
 :hook
 ((elpaca-after-init . #'dashboard-insert-startupify-lists)
  (elpaca-after-init . #'dashboard-initialize)))

here lies the logo

⠀⠀⠀⠀⠀⠀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠹⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠘⢷⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠻⣆⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣠⣤⣴⣶⣦⡀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣽⣿⣶⣶⣶⣶⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣇⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⣠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀
⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀
⠀⠀⠀⢀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡏⠀⠀
⠀⠀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠀⠀⠀
⠀⠀⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡏⢿⣿⣿⣿⣿⣿⠟⠀⠀⠀⠀
⠀⠀⠀⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠙⠻⠿⠋⠁⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠈⠛⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠙⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀

Tab bar

(use-package
 centaur-tabs
 :custom
 (centaur-tabs-cycle-scope 'tabs)
 (centaur-tabs-style "bar")
 (centaur-tabs-height 32)
 (centaur-tabs-set-icons t)
 (centaur-tabs-set-modified-marker t)
 (centaur-tabs-set-close-button nil)
 (centaur-tabs-set-bar 'over)
 (centaur-tabs-mode t)
 :hook
 (dashboard-mode . centaur-tabs-local-mode)
 (himalaya-list-envelopes-mode . centaur-tabs-local-mode)
 (calendar-mode . centaur-tabs-local-mode)
 (org-agenda-mode . centaur-tabs-local-mode))

Programming utils

Project management

(use-package
 projectile
 :demand
 :config (projectile-mode +1)
 :custom (projectile-enable-caching t))

Highlight TODO

(use-package
 hl-todo
 :custom
  (hl-todo-highlight-punctuation ":")
  (hl-todo-keyword-faces
  '(("TODO" . "#CC3333")
    ("FIXME" . "#FF0000")
    ("DEBUG" . "#A020F0")
    ("GOTCHA" . "#FF4500")
    ("STUB" . "#1E90FF")))
 :hook (prog-mode . hl-todo-mode))

Git

(use-package transient)
(use-package
 magit
 :after transient
 :commands (magit magit-status)
 :custom (transient-default-level 7))
;; useful for signing git commits from inside emacs
(use-package pinentry :init (pinentry-start))

Diff highlights

(use-package
 diff-hl
 :init
 (add-hook 'magit-pre-refresh-hook 'diff-hl-magit-pre-refresh)
 (add-hook 'magit-post-refresh-hook 'diff-hl-magit-post-refresh)
 :config (global-diff-hl-mode))

Completions

(use-package
 vertico
 :config
 (vertico-mode)
 (setq vertico-count 10)
 :custom
 (evil-complete-next-minibuffer-func 'vertico-next)
 (evil-complete-previous-minibuffer-func 'vertico-previous))

(use-package
 company
 :init (global-company-mode)
 :custom (company-minimum-prefix-length 2))

(use-package helpful)
  • Fuzzy finding in mini buffer
    (use-package
     orderless
     :config
     (setq
      completion-styles '(orderless basic)
      completion-category-defaults nil
      completion-category-overrides '((file (styles . (partial-completion)))))
    
     (set-face-attribute 'orderless-match-face-0 nil :weight 'normal)
     (set-face-attribute 'orderless-match-face-1 nil :weight 'normal)
     (set-face-attribute 'orderless-match-face-2 nil :weight 'normal)
     (set-face-attribute 'orderless-match-face-3 nil :weight 'normal))
    
  • Documentation in mini buffer
    (use-package marginalia :config (marginalia-mode))
    
  • Snippets
    (use-package yasnippet :config (yas-global-mode))
    

Filetree

side preview of filetree

(use-package
 treemacs
 :hook (treemacs-mode . (lambda () (display-line-numbers-mode 0)))
 :custom
 (treemacs-follow-mode t)
 (treemacs-filewatch-mode t)
 (treemacs-fringe-indicator-mode #'always))

(use-package treemacs-evil :after (treemacs evil))

iBuffer

(use-package
 ibuffer-vc
 :hook
 (ibuffer
  .
  (lambda ()
    (ibuffer-vc-set-filter-groups-by-vc-root)
    (unless (eq ibuffer-sorting-mode 'alphabetic)
      (ibuffer-do-sort-by-alphabetic))))
 :custom
 (ibuffer-formats
  '((mark
     modified
     read-only
     vc-status-mini
     " "
     (name 18 18 :left :elide)
     " "
     (size 9 -1 :right)
     " "
     (mode 16 16 :left :elide)
     " "
     (vc-status 16 16 :left)
     " "
     vc-relative-file))))

Jumping around

(use-package avy)

Code outline

(use-package
 minimap
 :custom
 (minimap-window-location 'right))

Actual Programming

get path from shell

(use-package exec-path-from-shell :config (exec-path-from-shell-initialize))

Tree sitter

(setq treesit-language-source-alist
      '((nu
         "https://github.com/nushell/tree-sitter-nu" "main" "src")))
(use-package
 treesit-auto
 :custom
 (treesit-auto-install 'prompt)
 (treesit-font-lock-level 4)
 :config (global-treesit-auto-mode)
 :hook
 (nu-ts-mode . prettify-symbols-mode)
 (rust-ts-mode . prettify-symbols-mode)
 (c-ts-mode . prettify-symbols-mode)
 (python-ts-mode . prettify-symbols-mode)
 (c++-ts-mode . prettify-symbols-mode))

(use-package
 treesit-fold
 :ensure
 (treesit-fold
  :type git
  :host github
  :repo "emacs-tree-sitter/treesit-fold"))

Indentation bars

(use-package
 indent-bars
 :custom (indent-bars-treesit-support t)
 :hook
 ((emacs-lisp-mode
   python-mode rust-ts-mode c-ts-mode c++-ts-mode bash-ts-mode neocaml-mode)
  . indent-bars-mode))

LSP booster

(use-package flymake)
(use-package
 eglot
 :hook
 (c++-mode . eglot-ensure)
 (c++-ts-mode . eglot-ensure)
 (c-mode . eglot-ensure)
 (c-ts-mode . eglot-ensure)
 (rust-ts-mode . eglot-ensure)
 (conf-toml-mode . eglot-ensure)
 (python-mode . eglot-ensure)
 (python-ts-mode . eglot-ensure)
 (haskell-mode . eglot-ensure)
 (haskell-ts-mode . eglot-ensure)
 (typst-ts-mode . eglot-ensure)
 (bash-ts-mode . eglot-ensure)
 (neocaml-mode . eglot-ensure)
 (sh-mode . eglot-ensure)
 (nushell-ts-mode . eglot-ensure)
 :config
 (add-to-list
  'eglot-server-programs
  '((toml-ts-mode toml-mode conf-toml-mode)
    .
    ("taplo" "lsp" "stdio")))
 (add-to-list
  'eglot-server-programs
  '((rust-ts-mode) . ("rustup" "run" "stable" "rust-analyzer")))
 (add-to-list
  'eglot-server-programs '((nushell-ts-mode) . ("nu" "--lsp")))
 (add-to-list
  'eglot-server-programs '((typst-ts-mode) . ("tinymist")))
 (add-to-list
  'eglot-server-programs
  '((sh-mode bash-ts-mode) . ("bash-language-server" "start")))
 (add-to-list
  'eglot-server-programs
  '((neocaml-mode ocaml-ts-mode) . ("ocamllsp" "--stdio"))))

Bytecode compilation

(use-package
 eglot-booster
 :ensure (:host github :repo "jdtsmith/eglot-booster")
 :after eglot
 :config (eglot-booster-mode))

Rust

(add-to-list 'auto-mode-alist '("\\.rs\\'" . rust-ts-mode))

OCaml

(use-package
 neocaml
 :ensure (neocaml :type git :host github :repo "bbatsov/neocaml")
 :hook (neocaml-mode . prettify-symbols-mode)
 (neocaml-mode
  . (lambda () (setq-local indent-line-function 'indent-relative))))

(use-package dune)

(use-package dune-format :hook (dune-mode . dune-format-on-save-mode))

Typst

Eglot config needs to be top-level cuz fuck tinymist

(use-package
 typst-ts-mode
 :ensure
 (:type
  git
  :host codeberg
  :repo "meow_king/typst-ts-mode"
  :files (:defaults "*.el"))
 :config
 (setq-default eglot-workspace-configuration
               '(:exportPdf
                 "onSave"
                 :outputPath "$root/target/$dir/$name"
                 :fontPaths ["./fonts/"]
                 :formatterMode "typstyle")))

Lisp

  • Rainbow brackets
    (use-package
     rainbow-delimiters
     :hook
     (neocaml-mode . (lambda () (rainbow-delimiters-mode)))
     (emacs-lisp-mode . (lambda () (rainbow-delimiters-mode))))
    
  • Formatter
    (use-package
     elisp-autofmt
     :commands (elisp-autofmt-mode elisp-autofmt-buffer)
     :config (setq elisp-autofmt-on-save-p 'always)
     :hook (emacs-lisp-mode . elisp-autofmt-mode))
    

Markdown

(use-package
 markdown-mode
 :mode ("README\\.md\\'" . gfm-mode)
 :init (setq markdown-command "multimarkdown")
 :config (setq markdown-fontify-code-blocks-natively t))

Auctex

(defun my-latex-compile ()
  (TeX-command-run-all nil))

(use-package
 auctex
 :hook
 (LaTeX-mode
  . (lambda () (add-hook 'after-save-hook 'my-latex-compile nil nil)))
 :custom
 (TeX-parse-self t)
 (TeX-auto-save t)
 (TeX-PDF-mode t)
 :config
 (add-hook
  'TeX-after-compilation-finished-functions #'TeX-revert-document-buffer))

Other random modes

(use-package cmake-font-lock)

(use-package
 haskell-ts-mode
 :hook (haskell-ts-mode . prettify-symbols-mode))

(use-package
 nushell-ts-mode
 :ensure (:host github :repo "herbertjones/nushell-ts-mode"))

(use-package proof-general)

(use-package
 company-coq
 :after proof-general
 :hook (coq-mode . company-coq-mode))

(use-package
 fstar-mode
 :custom
 (fstar-subp-prover-args
  '("--include" "/home/innocentzero/.opam/cs6225/lib/pulse/")))

(use-package ledger-mode)

ORG!

Font Hook

(defun i0/org-font-setup ()
  "Replace hyphen list with dot"
  (setq evil-auto-indent nil)
  (setq org-src-fontify-natively t)
  (org-indent-mode)
  (display-fill-column-indicator-mode 0)
  (set-face-attribute 'org-level-1 nil :height 200)
  (set-face-attribute 'org-level-2 nil :height 180)
  (set-face-attribute 'org-level-3 nil :height 160)
  (set-face-attribute 'org-level-4 nil :height 140))

ORG ID hook

(defun i0/org-add-ids-to-headlines-in-file ()
  "Add ID properties to all headlines in the current file which
  do not already have one."
  (interactive)
  (org-map-entries 'org-id-get-create))

Actual

Ok lots of stuff happening here

  • First hook sets up the font properties we described above
  • Second hook adds node IDs every single time I save the files
  • demand makes sure it loads so that the org files are also loaded for dashboard and stuff
  • custom
    • first one sets up the org-agenda-files path
    • second one makes the line numbers vanish
    • org todo keywords
    • org tags for tagging todos
    • capture templates for schedule and todos
    • latex processing in buffer
    • org-agenda log drawer thing
    • stuff
    • refiling target for TODOs (not like I ever do it)
  • config
    • first one is to save buffers after refiling
    • second one sets up code block templates since I keep using them
    • third one loads org babel for haskell, lisp and python
(use-package
 org
 :hook
 ((org-mode . i0/org-font-setup)
  (org-mode
   .
   (lambda ()
     (add-hook 'before-save-hook 'i0/org-add-ids-to-headlines-in-file
               nil t)))
  (org-mode . turn-on-flyspell))
 :demand t
 :after org-contrib
 :custom (org-agenda-files '("~/Isfaruls_home/org_home"))

 (display-line-numbers nil)

 (org-todo-keywords
  '((""
     "TODO(t)"
     "DREAM(D)"
     "ONGOING(o)"
     "NEXT(n)"
     "|"
     "DONE(d!)"
     "CANCELLED(c@)")))

 (org-tag-alist
  '(("@home" . ?H)
    ("@acads" . ?W)
    ("@oss" . ?C)
    ("@work" . ?s)
    ("@club" . ?p)
    ("@blogging" . ?w)))

 (org-capture-templates
  '(("t"
     "Task"
     entry
     (file "~/Isfaruls_home/org_home/Tasks.org")
     "* TODO %?\n    %U\n    %i"
     :empty-lines 1)
    ("s" "Schedule" entry
     (file
      "~/Isfaruls_home/org_home/Schedule.org")
     "* %?\n     %U\n      %i")
    ("S" "Spending" entry
     (file
      "~/Isfaruls_home/org_home/Finances.org")
     "%?\n     %U\n    %i")))

 (org-preview-latex-default-process 'dvisvgm)
 (org-latex-create-formula-image-program 'dvisvgm)
 (org-startup-with-inline-images t)
 (org-startup-with-latex-preview t)

 (org-log-done 'time)
 (org-log-into-drawer t)
 (org-agenda-start-with-log-mode t)

 (org-auto-align-tags t)
 (org-catch-invisible-edits 'show-and-error)
 (org-special-ctrl-a/e t)
 (org-insert-heading-respect-content t)
 (org-hide-emphasis-markers t)
 (org-pretty-entities t)
 (org-agenda-remove-tags t)

 (org-refile-targets
  '(("~/Isfaruls_home/org_home/Tasks.org" :maxlevel . 1)))

 :config (advice-add 'org-refile :after 'org-save-all-org-buffers)

 (require 'org-tempo)
 (add-to-list 'org-modules 'org-tempo)
 (add-to-list 'org-structure-template-alist '("sh" . "src shell"))
 (add-to-list 'org-structure-template-alist '("py" . "src python"))
 (add-to-list 'org-structure-template-alist '("hs" . "src haskell"))
 (add-to-list
  'org-structure-template-alist '("el" . "src emacs-lisp"))
 (add-to-list 'org-structure-template-alist '("cpp" . "src cpp"))

 (org-babel-do-load-languages
  'org-babel-load-languages
  '((haskell . t) (python . t) (emacs-lisp . t) (ledger . t) (shell . t)))
 (setq org-babel-python-command "/usr/bin/python3")
 (setq org-confirm-babel-evaluate nil))

Org contrib

(use-package org-contrib)

Visuals

  • Centering and table alignment
    (defun i0/org-mode-visual-fill ()
      (setq
       visual-fill-column-width 100
       visual-fill-column-center-text t)
      (visual-fill-column-mode 1))
    
    (use-package visual-fill-column :hook (org-mode . i0/org-mode-visual-fill))
    
    (use-package valign :hook (org-mode . valign-mode))
    
  • Org bullets and related
    (use-package
     org-superstar
     :demand t
     :hook (org-mode . org-superstar-mode)
     :config (setq org-superstar-remove-leading-stars t))
    

Journalling using Org

(use-package
 org-journal
 :after org
 :config
 (setq
  org-journal-dir "~/Isfaruls_home/org_home/"
  org-journal-file-type 'yearly
  org-journal-date-format "%A, %d %B %Y"
  org-journal-enable-agenda-integration t))

Reminders

(use-package
 org-alert
 :after org
 :config
 (setq
  alert-default-style 'libnotify
  org-alert-interval 300
  org-alert-notify-cutoff 10)
 (org-alert-enable))

Org Node

(use-package
 org-node
 :after org
 :config
 (org-node-backlink-mode)
 (org-node-cache-mode))

Org clocking from CLI

(defun org-clock-status ()
  (if (org-clock-is-active)
      (format "%s"
              (org-clock-get-clock-string))
    "No active clock"))
(defun cli-org-clock-in (heading)
  (find-file "~/Isfaruls_home/org_home/Schedule.org")
  (org-clock-in-new heading)
  (save-buffer))

(defun cli-org-clock-out ()
  (org-clock-out)
  (find-file "~/Isfaruls_home/org_home/Schedule.org")
  (save-buffer))

(defun org-clock-in-new (heading)
  (goto-char (point-max))
  (unless (bolp)
    (insert "\n"))
  (insert "* " heading "\n")
  (org-insert-time-stamp (current-time) t t)
  (insert "\n")
  (org-clock-in))

Gen stuff

PDF reader

(use-package
 pdf-tools
 :init (pdf-tools-install)
 :config (setq pdf-view-midnight-colors '("#cccccc" . "#0a0a0a")))

Email

(use-package
 himalaya
 :after evil
 :init (setenv "RUST_LOG" "None")
 :config
 (evil-define-state
  himail
  "Himalaya state"
  :cursor '(bar . 0)
  :enable (motion))
 (evil-set-initial-state 'himalaya-list-envelopes-mode 'himail)
 (evil-define-key
  'himail
  himalaya-list-envelopes-mode-map
  "a"
  (lambda ()
    (interactive)
    (himalaya-reply-to-current-message))
  "A"
  (lambda ()
    (interactive)
    (himalaya-reply-to-current-message t))
  "d"
  'himalaya-delete-marked-messages
  "f"
  (lambda ()
    (interactive)
    (himalaya-forward-current-message))
  "gg"
  (lambda ()
    (interactive)
    (evil-goto-first-line))
  "i"
  'himalaya-write-new-message
  "j"
  'evil-next-line
  "k"
  'evil-previous-line
  "n"
  'himalaya-list-envelopes-next-page
  "p"
  'himalaya-list-envelopes-prev-page
  "q"
  'quit-window
  "v"
  'himalaya-mark-envelope-forward
  "V"
  'himalaya-unmark-envelope-backward
  "y"
  'himalaya-copy-marked-messages
  (kbd "<escape>")
  'himalaya-unmark-all-envelopes
  (kbd "<return>")
  'himalaya-read-message-at-point))

Music

(use-package listen)

Media

(use-package empv :ensure (:host github :repo "isamert/empv.el"))

Keybinds

Which key integration

(use-package
 which-key
 :demand t
 :config
 (which-key-mode))

Keybind defs

Some functions for matching the parentheses like in helix.

(defun i0/insert-pair (char)
  (interactive "cEnter character: ")
  (unless (= char 27) ;; Do nothing if ESC is pressed
    (let* ((pairs '((?\( . ?\)) (?\[ . ?\]) (?\{ . ?\}) (?\< . ?\>)))
           (closing (or (cdr (assoc char pairs)) char)))
      (if (region-active-p)
          (insert-pair 1 char closing)
        (insert (string char) (string closing))
        (backward-char)))))

(defun revert-buffer-no-confirm ()
  "Revert buffer without confirmation."
  (interactive)
  (revert-buffer :ignore-auto :noconfirm))

(defun prev-error ()
  "go to previous error"
  (interactive)
  (flymake-goto-prev-error))

(defun i0/force-delete ()
  "delete permanently"
  (interactive)
  (treemacs-delete-file t))
(use-package
 general
 :demand
 :config

 ;; tab navigation
 (general-define-key
  :states '(normal visual)
  :keymaps
  '(override)
  "H"
  '(centaur-tabs-backward :which-key "previous tab")
  "L"
  '(centaur-tabs-forward :which-key "next tab"))

 ;; unbind conflicting stuff
 (general-auto-unbind-keys)

 ;; rebind m in insert mode lol
 (general-define-key :states 'insert "m" 'self-insert-command)

 ;; helix paren keybinds
 (general-define-key
  :states '(normal visual)
  :prefix
  "m"
  "<escape>"
  '(keyboard-escape-quit :which-key t)
  "m"
  '(evil-jump-item :which-key "goto matching")
  "s"
  '(i0/insert-pair :which-key "add surrounding pair"))

 ;; overridden space binds
 (general-define-key
  :states '(normal visual treemacs himail)
  :keymaps 'override
  :prefix-map 'overriding
  :prefix "SPC"

  ;; new file in project root
  "SPC"
  '(projectile-find-file :which-key "find file")

  ;; abort mini buffer
  "<escape>"
  '(abort-minibuffers :which-key "exit minibuf")

  ;; AI
  "a"
  '(:ignore t :which-key "AI")
  "a <escape>"
  '(keyboard-escape-quit :which-key t)
  "a b"
  '(ellama-send-buffer-to-new-chat :which-key "send buffer to ellama")
  "a c"
  '(ellama-chat :which-key "AI Chat")
  "a C"
  '(ellama-code-complete :which-key "AI Complete")

  ;; buffer actions
  "b"
  '(:ignore t :which-key "buffer")
  "b <escape>"
  '(keyboard-escape-quit :which-key t)
  "b b"
  '(ibuffer :which-key "list buffers")
  "b d"
  '(kill-current-buffer :which-key "kill buffer")
  "b r"
  '(revert-buffer-no-confirm :which-key "reload buffer")

  ;; git stuff
  "g"
  '(:ignore t :which-key "git")
  "g <escape>"
  '(keyboard-escape-quit :which-key t)
  "g o"
  '(magit :which-key "open")
  "g g"
  '(magit-status :which-key "status")
  "g l"
  '(magit-log :which-key "log")

  ;; helpful keybinds
  "h"
  '(:ignore t :which-key "helpful")
  "h <escape>"
  '(keyboard-escape-quit :which-key t)
  "h f"
  '(helpful-function :which-key "search for function")
  "h c"
  '(helpful-callable :which-key "search for callable")
  "h v"
  '(helpful-variable :which-key "search for variable")
  "h s"
  '(helpful-symbol :which-key "search for symbol")
  "h k"
  '(helpful-key :which-key "search for key")

  ;; jumping around
  "j"
  '(avy-goto-char-2 :which-key "jump")

  ;; org mode globals
  "o"
  '(:ignore t :which-key "org")
  "o <escape>"
  '(keyboard-escape-quit :which-key t)
  "o a"
  '(org-agenda :which-key "Show agenda")
  "o c"
  '(org-capture :which-key "capture something")
  "o j"
  '(org-journal-new-entry :which-key "new journal entry")

  ;; projectile keybinds
  "p"
  '(:ignore t :which-key "projects")
  "p <escape>"
  '(keyboard-escape-quit :which-key t)
  "p p"
  '(projectile-switch-project :which-key "switch project")
  "p a"
  '(projectile-add-known-project :which-key "add project")
  "p r"
  '(projectile-remove-known-project :which-key "remove project")

  "r"
  '(restart-emacs :which-key "restart emacs")

  "t"
  '(treemacs-add-and-display-current-project-exclusively
    :which-key "treemacs")

  ;; window manipulation
  "w"
  '(:ignore t :which-key "windows")
  "w <escape>"
  '(keyboard-escape-quit :which-key t)
  "w v"
  '(split-window-right :which-key "split vertical")
  "w b"
  '(split-window-below :which-key "split horizontal")
  "w l"
  '(evil-window-right :which-key "goto right window")
  "w h"
  '(evil-window-left :which-key "goto left window")
  "w j"
  '(evil-window-down :which-key "goto below window")
  "w k"
  '(evil-window-up :which-key "goto above window")
  "w q"
  '(delete-window :which-key "delete window")

  "x"
  '(execute-extended-command :which-key "execute command"))

 ;; errors and hunks
 (general-define-key
  :states '(normal visual)
  :prefix
  "]"
  "<escape>"
  '(keyboard-escape-quit :which-key t)
  "g"
  '(diff-hl-next-hunk :which-key "next hunk")
  "d"
  '(flymake-goto-next-error :which-key "next error"))

 ;; errors and hunks pt 2
 (general-define-key
  :states '(normal visual)
  :prefix
  "["
  "<escape>"
  '(keyboard-escape-quit :which-key t)
  "g"
  '(diff-hl-previous-hunk :which-key "previous hunk")
  "d"
  '(prev-error :which-key "next error"))

 ;; non overriding keybinds
 (general-define-key
  :states '(normal visual)
  :prefix-map 'non-overriding
  :prefix "SPC"

  ;; org and fstar have their own variants
  "f"
  '(:ignore t :which-key "folding")
  "f <escape>"
  '(keyboard-escape-quit :which-key t)
  "f a"
  '(treesit-fold-close-all :which-key "fold all")
  "f o"
  '(treesit-fold-open :which-key "open fold here")
  "f c"
  '(treesit-fold-close :which-key "close fold here")

  ;; lsp keybinds are overridden in fstar and elisp buffers
  "l"
  '(:ignore t :which-key "lsp")
  "l <escape>"
  '(keyboard-escape-quit :which-key t)
  "l a"
  '(eglot-code-actions :which-key "code actions")
  "l q"
  '(eglot-shutdown :which-key "shut down lsp")
  "l r"
  '(eglot-rename :which-key "rename symbol")
  "l R"
  '(xref-find-references :which-key "find references")
  "l i"
  '(eglot-find-implementation :which-key "find implementation")
  "l g"
  '(eglot-find-typeDefinition :which-key "find definition")
  "l f"
  '(eglot-format :which-key "format buffer")
  "l d"
  '(eglot-find-declaration :which-key "find declaration")
  "l c"
  '(evil-commentary :which-key "Comment"))

 (general-define-key
  :states '(normal visual)
  :keymaps '(emacs-lisp-mode-map)
  :prefix "SPC"

  "l f" '(elisp-autofmt-buffer :which-key "format buffer"))

 (general-define-key
  :states '(visual)
  :keymaps '(emacs-lisp-mode-map)
  :prefix
  "SPC"
  "l e"
  '(eval-region :which-key "evaluate region"))

 ;; org
 (general-define-key
  :states '(normal visual)
  :keymaps 'org-mode-map
  :prefix "SPC"

  "f"
  '(:ignore t :which-key "folding")
  "f <escape>"
  '(keyboard-escape-quit :which-key t)
  "f a"
  '(org-fold-hide-sublevels :which-key "fold all subs")
  "f o"
  '(org-fold-show-subtree :which-key "open fold here")
  "f c"
  '(org-fold-hide-subtree :which-key "close fold here")

  "o d"
  '(org-deadline :which-key "Add a deadline")
  "o s"
  '(org-schedule :which-key "Add schedule")
  "o t"
  '(org-todo :which-key "Toggle todo")
  "o h"
  '(org-insert-link :which-key "add link")
  "o i"
  '(org-toggle-inline-images :which-key "toggle images")
  "o e"
  '(org-ctrl-c-ctrl-c :which-key "evaluate region")
  "o x"
  '(org-latex-preview :which-key "toggle Latex")
  "o o"
  '(org-edit-special :which-key "edit block"))

 ;; fstar
 (general-define-key
  :states '(normal visual)
  :keymaps 'fstar-mode-map
  :prefix
  "SPC"
  "f"
  '(:ignore t :which-key "evaluate")
  "f <escape>"
  '(keyboard-escape-quit :which-key t)
  "f j"
  '(fstar-subp-advance-next :which-key "evaluate next-block")
  "l g"
  '(fstar-jump-to-definition :which-key "Jump to definition")
  "f v"
  '(fstar-cli-verify :which-key "Verify buffer")
  "f s"
  '(fstar-subp-start :which-key "Start FStar")
  "f v"
  '(fstar-cli-verify :which-key "Verify buffer"))

 ;; coq
 (general-define-key
  :states '(normal visual)
  :keymaps 'coq-mode-map
  :prefix "SPC"

  "c"
  '(:ignore t :which-key "Coq")
  "c <escape>"
  '(keyboard-escape-quit :which-key t)
  "c c"
  '(proof-goto-point :which-key "evaluate till cursor")
  "c j"
  '(proof-toolbar-next :which-key "evaluate next command")))

Fonts

This hook sets it up for every frame because for some reason emacs chooses to mess with me otherwise.

(defun my-frame-init ()
  (progn
    (set-face-attribute 'default nil
                        :font "ProFont IIx Nerd Font Mono"
                        :height 115
                        :weight 'medium)
    (set-face-attribute 'italic nil
                        :font "Source Code Pro Italic"
                        :height 115
                        :slant 'oblique
                        :weight 'medium)
    (set-face-attribute 'font-lock-comment-face nil
                        :font "Source Code Pro Semibold Italic"
                        :height 115
                        :slant 'oblique
                        :weight 'semi-bold)))

(if (daemonp)
    (add-hook
     'after-make-frame-functions
     (lambda (frame)
       (select-frame frame)
       (my-frame-init)))
  (my-frame-init))

Fastfetch

// Note that you must replace the image path to an existing image to display it.

{
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
    "logo": {
        "type": "kitty",
        "source": "~/.config/fastfetch/arch.png",
        "width": 56,
        "height": 28
    },
    "display": {
        "separator": "  "
    },
    "modules": [
        {
            "type": "custom", // HardwareStart
            // {#1} is equivalent to `\u001b[1m`. {#} is equivalent to `\u001b[m`
            "format": "┌─────────── {#1}Hardware Information{#} ───────────┐"
        },
        {
            "type": "host",
            "key": "  󰌢"
        },
        {
            "type": "cpu",
            "key": "  󰻠"
        },
        {
            "type": "gpu",
            "key": "  󰍛"
        },
        {
            "type": "disk",
            "key": "  "
        },
        {
            "type": "memory",
            "key": "  󰑭"
        },
        {
            "type": "swap",
            "key": "  󰓡"
        },
        {
            "type": "display",
            "key": "  󰍹"
        },
        {
            "type": "brightness",
            "key": "  󰃞"
        },
        {
            "type": "battery",
            "key": "  "
        },
        {
            "type": "poweradapter",
            "key": "  "
        },
        {
            "type": "bluetooth",
            "key": "  "
        },
        {
            "type": "sound",
            "key": "  "
        },
        {
            "type": "gamepad",
            "key": "  "
        },
        {
            "type": "custom", // SoftwareStart
            "format": "├─────────── {#1}Software Information{#} ───────────┤"
        },
        {
            "type": "title",
            "key": "  ",
            "format": "{1}@{2}"
        },
        {
            "type": "os",
            "key": "  " // Just get your distro's logo off nerdfonts.com
        },
        {
            "type": "kernel",
            "key": "  ",
            "format": "{1} {2}"
        },
        {
            "type": "lm",
            "key": "  󰧨"
        },
        {
            "type": "de",
            "key": "  "
        },
        {
            "type": "wm",
            "key": "  "
        },
        {
            "type": "shell",
            "key": "  "
        },
        {
            "type": "terminal",
            "key": "  "
        },
        {
            "type": "terminalfont",
            "key": "  "
        },
        {
            "type": "theme",
            "key": "  󰉼"
        },
        {
            "type": "icons",
            "key": "  󰀻"
        },
        {
            "type": "wallpaper",
            "key": "  󰸉"
        },
        {
            "type": "packages",
            "key": "  󰏖"
        },
        {
            "type": "uptime",
            "key": "  󰅐"
        },
        {
            "type": "media",
            "key": "  󰝚"
        },
        {
            "type": "localip",
            "key": "  󰩟",
            "compact": true
        },
        {
            "type": "wifi",
            "key": "  ",
            "format": "{4}" // ssid
        },
        {
            "type": "locale",
            "key": "  "
        },
        {
            "type": "custom", // InformationEnd
            "format": "└────────────────────────────────────────────┘"
        },
        {
            "type": "colors",
            "paddingLeft": 2,
            "symbol": "circle"
        }
    ]
}

The base64 encoded arch logo

The script that converts it.

data=iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAABmJLR0QA/wD/AP+gvaeTAAAh30lEQVR42u1dCXhV1bVOHdo61gpkYlZkVGYIGRgEGQRERRSHarXvtX36fG1tawdfnw9bv7Zqn8q9N8EQIcm9SZAAEbVVX61Fn2M1knvOzZ1yE8B5aOvQCiKG3LfWyT3h5OQmufM95+z//7714SfJJdl7//9ee+2118rJAYRFgd0zO9/mnouRAAABkWeTqvLssgsjAQCC4euVzV/Ls0ufjtrk+Tz3fk8eRgQABEK+Tb6ZBCA8olwOT97svQMjAgAiuf92SWYBYJtW7Xs3p7L5RIwKAAiAYeXuMpX8bNOrfeGJD8pXY2QAQIjdX3ZpBWBiVSuLwMsYGQCwOIY7/EOI9J9pBWD0Jk+4pC4QPqu8dQ5GCAAsjFy79GMt+dnyyUpJAKZt9eJKEAAsi3D4S0T2oF4A2GbV+MPzXIHP2EPAQAGAFc/+NvmCaORnm1TlDc+vD4bP2+r7BUYKAKzo/jukHf0JAMcBWADm1vrfymlsPB6jBQAWwrBybz4R/Uh/AsDGgUAWgSlbveswYgBgLff/FwORn20G5QOwAMyu8T2HEQMAq2BD+Lg8h7R/MAGYQPkALAB8IzB+S3AaBg4ArLD7O9yrByM/28gKWREAtpm1vi0YOQCwggDYpcdiEQAlDuDqjgOUuPwHx1S3nIHRAwATo7DcM5KI3RmrAEzf6uvxAigm8FOMIACY2/3/VazkZxu/ubVHAOY5/Qc4foBRBAAzYsOeE4jUb8cjAFwfQBUA5UagNnAxBhIATIh8m7QuHvKrRjt/jwBQYtDTGEkAMKP7b5eeSkQAztvi7RGAsvpg17nOtkkYTQAwEXJtnrOJzEcTEYCxD3h6HQOKav0PYEQBwEzuv126JxHya58H93gBdf5Px9lCp2NUAcAEILJ+hYj8QaICoJYJ6xUMrPHdgpEFADO4/3b3N5Ihv/46UEkMqguGuJ4ARhcAjO7+26TnkhWAQkfv68DuK0HvhRhdADAwCso9k4jAXckKANucWr/OC/A/iREGAAMjz+6250cCeaolKgBqlaBj1tZZVO87B6MMAAZEYWXzyUTcDwscvQUgUTEYUdH3GFDi9Nsw0gBgxN3fIf0rk5wFQG+JisFc3TGgrC7wyaJG76kYbQAwnPsvvcrBO9WiCUG8YjD5QW8fL6DUFbwZow0ABsKw8pbpTO7h5ccEQG+JiMHIKMeA+XVBH0YcAIy0+9ukKiY5C4DekhWDIqe/rwhsCy7BqAOAATD0rsBp+Q7pH/yUV7Xh5akTg3PpGLBAJwBl9YFHMfIAYADk2+SbmdwctdeKwGCCEKsYjKbPZQHQWeeyxsBYjD4AZFsAHJKskF9vKRQDqhEYXtjQWwQW1gfvxegDQBZR4JAXMIE5WKdaOsTgXKoRwAKgs78vc0qnYBYAIEvgdl+jiOCjKnqLwIBiUBG/GHDrsCgCwLGA72MWACALGGrfW0jEPaIKgNZGxiMIMYoB3wboBWBBfaANrwQBIAugK7o7mdS8O6uWTjGYTMeARQ1tivUSgW2hNZgNAMgguOgHuebvjSHSj9EIwGBiMCoJMeDPVAVAa/MbAnswIwCQybO/TbqOyawKgNbSKQZFzkD4/G1timm8ga4yF3oJAkDGUODwvMLFO7UWqxjEc1TQC8EUSgpSBUBrC+sDTswKAGTi7G+T5jE5zyLSn6UTgXSLwahNcvh8OvcvJtIv7iUAbZ8tadiXh9kBgHTv/uXuOpX8eotVDMYkIQb8RFgVAK3RU+E7MTsAkM7df5OUSzvx4bMrPWGtZVIMJlS1RhWA8xva3r+QgpOYJQBIE3Id7tuZ3OMqWxXTC0E8YhDPUUEvBHT/H1UEqHrwtzFLAJAOULPPkQ7p7XMi5NdbJsWAWoeHlzzU1mOqANCtQCsmCgDS4f7b3euZqCwAWktGDBINIvK/cYFGALRCsLChbSlmCwBSDMrGe4EbdqimF4JMi0ExvRBkEVBNFYGFDYEnMFsAkEJwyS8mo1YAUiUGiQYRz9viCy/d3tZLBC5QvIBQ55K60GTMGgCkCJT2u7U/8mdLDMaSCCwmwrMIqKaKwPnbgpsxawCQCtff4R9CO+4hvn5TLdVikGgQkXMClm4P9RIBNhKGfy5v9J6J2QOAJEEVeX7OpJ+oEQCjiAH/+90CoLVuL2CBK7gBswcAyaCy+cTRm+S3JkYEQGupFoNEg4hcHmxZHxEI8THgr8WNb56ESQSABEEFP69nYnOfPtWMJgZTt/oUAdAaCwB7AfNq/f+BWQSABEFnf4m787BpRSBdYpBIEHEcGZN9eWOojxDMb2jryNkQPg4zCQBxYli5tILJqwqA1owmBtxKnAVAaywAnBcw1+W/CrMJAHFidIX0NL+/15pRxYA/fzkF/1boRICNWom5MZsAEAdyKzxTiXRdXI6bTS8ERhSD0rqAIgBaYwHg9OAilw/pwQAQ++4v158XIb/eMiEGiQQRORioFwBVBErqA09jVgEgBgzZ5B4+vqr1cxYArZlBDJZsC0YVAfYCZtd652J2AWDw3f9/eDdVTS8EmRKDRI4KHAy8cEdIMb0IlLgCOzG7ADAAuNPvhErvJ9M0AmAmMVCCgY1tPSKgFQPyAjpn1XjOxiwDQD+g0ts/YaJP01m2xCCRIGIJBQNX7mhXTC8C85x+PBICgKigtN/xmz1vTidyqzbNhGLAn3khkV0VAa0YUEXhz6Y6pVxMNgDoMHyT+1qF+NXHBMAIYpBIEJFah4dXEelX6USAbwTmuny/xWwDgA4TNrdKCvn1ZkIxmLbV2yMAWmMRoE5CH00p956KGQeACAor5AuY2FxsUzUjiUEiQUS++lu1s73bNCLAKcJzawO3YtYBIILxVZ4/zqzxhdm0ImBmMZhFv0uPAGiNRIDSg9/kKseYeUB4jLDL5xGhu1QB0JqRxCCRIOIyegy0mki/WicC7AXMqQncgNkHcPav8rhm1fjDWrOKGMyjbsKqAGiNvYAF9W3enHD4S1gBgNAggr48mzLo2PRCYDQxiDeIyH+upOu/i4j0F+lEgIuGzN4aWIcVAAgNKqw5ZFatX1JFwGpiUFoX7BEArfFRoAxPhQEgJ6eowZM3x+kPzNGJgBHFIN4g4lTqH7B6Zyi8Zle7YloRYC9gZnXrRVgBgPCY5fIVzK7xhVgEVLOKGHDhUFUAtMZHAXok1IzZBwDCjHrf6CKn/4BWBIwoBvEGEfnrecePJgJcRpweCS3D7AMAxwScgbGUKPMGN92YG0UIzCoGixoG9AKew8wDQASzXYEJRP53VREwohjEG0Tkz2HCX7yrQzG9F3DeZv9CzDwARFDs8o4rqvXvpyNBWC8EZhWDxVQxSBUArbEXUORC2TDA6mhsPH52rW8LX/3FGhOYW+trZxFQzVBiEGcQcSZ9/cW041/S1KGYVgS4nNjUKt88LBLAsphW7f0WnXfDxS7/gdkPemfE8j18O1BUG2zVioCZxYB7BagCoDUOEtLP/yRWCWBNUIcc2s1DXDGHrdjpPzjHFbgmlm+lANrQeS7/a1RRh6vqhI0kBvEGEfmzLyEv4FIi/aU6EaCuwl2TtvpmYrEAlsOMas+1pRHya40i/o1UJeeUwb6/dEvgtCKX/1lVBLItBsnEDZaSF6AKgNY4FjCnxvsoVgtgLdCjF3oY42MB0FqPN1AXaCuq8c8a1BOo3v9V8gSeKKZjhF4IzCQG/NmXNrWH1z7coZhWBKiOwNEJVYGpWDSAZTCn1re+jIiuWmkUK6kLHprrDN4y2Au5KY3eL1PX3UeKlVhCt2VLDJKJGyynNGBVALTGsYA5Ti9KiAPWQakzIM2ndFitCPQnBsXOwCsznZ5Jg3kU9LV3a0XAbGIwR+cFaG3xtlDnOVWDjAEAmAFEwLVMfr0NLAbBQ8V1wTsGa61dUt/2vVJXoLMkihCYQQyW9eMFcHIQPY6qx+oBTA8i9mv8GEa1eMSAYgN/GSw2MK8uuJ6PDywCqmVLDOK9UVC9gMuI9Jf18QKCX5xbiUYigIlR4mpbRVVwuRJuWCsC8YlBsJOOBZtmVXZ8rd8jhss7n0Tgfa0IZFIMkgkiXkA3AqoAaI29APr3arCKANNifkPwZVUAtJaYGATfK3H6r+8vSMhZg0RuqeeK0SRioHgBRPh1u7tNKwJLHgp+PuNB32isJMB8u78zsJhfwGktFWLAAcWSOn/U57PFjW+eREeHRn2uQSbEIJm4wRIqIa4KgNbYCyhCOzHAjFhQH3ieWmFxO6zwoiiWrBhQ8O+54tro6cSlLv9tFEg8WhIl8ciIYsB/t5ZyAC7fvU8xrQiQF3B4apU0AisKME/gz+VfxC/fVAHQWmrFIPAFkb1m0bb9Y/rGH/yXEeE/1icdpVMMkgkiLn4o2CMAWmMvYF5toByrCjANzm9oe5YFQGvpFIOy+sAR8ghcHAfo5YU0HhhL5G/pLwPRSGKg3ghEEwF6QHRoxpZAIVYWYHzXvyGwmM+0qumFIL1i0PZZGZ2Zi+pCI3rFBZyB+v4zEFMrBskEEUk4+/cCnIEKrC7A8CCCP89XW1oRyLQYsEdApN1R8qDv3B4haPB/d35d4LOB05GzLwb8UvCKR/Yp1tsLCB6e4vSOwgoDjOv613UsYfLrLYticJQI+6eSet+C7thEcFqZK+AbLB05WTFIJoi4iMZBFQCt8XPhebgRAIwM2qVeiCYARhAD8gqe48DgokbvqaX1wepY3yZkQwzY5V9PpF+vEwEav8PICwAMiWUNbUu5uCXbYCKQTTGgm4PXS+sDv6TMwZvoSPBRbG8T4heDZIKI9HP1CIDW+LkwFVXZgtUGGA5U5OIlVQC0ZlwxCHxK2YVPLKAMw/geKmVGDFZTA9ErifRX6kSAxurI1KrAWKw4wDBYsd2/fBmRXWvmEoP4HyrFJAZJBBH5M6+gRCBVBFTjh0JzXcEarDrAMFi+ve0VLnDBphcCiEHiYsDjeeWj+7pNIwI0Ll9Mqvadg5UHZB0rm9pXrGjsJr/eIAbJBRH5/62jHb9HBCLGD4UoWIh6AYAB3P/G0KssAFqDGKRODPh3verR/YppRWDpQ+2dM7Z6J2MFAlnDmsbQmguJ8KqtiGIQg+SDiPxcWBUB1Tg5aJ4rsB2rEMgaVu1sf3XljmMCADFIjxjwz3E1kf5qnQgsb2zvnFbjnYKVCGQc1OLqUia/3iAG0cUg2SDiGqoWrIqAauwFFNf5d2E1AhnHRTva964iwqsGMUivGPBnXUVn/2se6y0CNH5HZ9Z60EcAyODuv7t9/eqdoTCbVgQgBgOLQbJBxJU0PiwAWuMUYQoWopsQkBmEqSYfNa/wqAKgNYhBesWA/5vzAPQisGJHqIvqBczG6gQyEfj7Jnev0RrEIHYxSDaIyH0F9QLAokAC8ThWJ5BWXN4YPn7NrlAbB6TW6EQAYpA5MeD6gd/QicDKHe1ds2taS7FKgfTt/o2hG/mpqioAWoMYxC4GyQYR+fuveWyfIgKq8bVgWZ3/KaxSIC1YtGfPCUT+/YoAaA1ikBUx4LG69vf7e4kAHc/oJWGwDKsVSDku2hm6he7+w6qtiWYQg5jFIBVBxPWUB8AioBpfC1Lhkz9jtQIpxYWPh75y6a72ty5pOiYAEIPsiwH/zNdpBICNx77Y6V+IVQukbvffEbqNya83iEFyYpCK60UOCLIIqMYBQfq7/8OqBVJD/sfeOZnI/j6Xo1INYmAcMVhMpcS/oREAtot3dYQX1IWWYfUCSWPl9rZfqS2rtSIAMUiNGKTiepF/9+v+cKDH+CiweFvoRaxeILmzf13odCL5h2t1veutJAZMYCYS59tzLT7u1Td9qy987hZvePKD3vCEqlbFzqlsDY/T2PjNx2xSlVf5+mn0fdOrfUqnH67ow3f2TNxMiAHXC9SKAM8HlUBfgVUMJIzVje136/vWm1EMeOfmqzMuuT2VSMqkHb3JEy50yOE8u5R2yycbUSGHz670KGLBAsNNQFggmPSpuF5cGgkIfpPIz8b/TZ/bjFUMJIQlTf4h1J32Ey5JtU4nAkYWA97Vmewza3zKzj2yIjMkT0YcWIz4Z2VhYM+BCZ2IGPD4qwLAxnO0oL5tLVYzEDcu3hUqV8mvNyOJAROe3Xfe2cc+4FEIlWcBG0XCNZFEYQYdKUojnsJgYsB/8vn/eiL/9RERoK7DgZwN4eOwooGYceUf3yhct3vfwct3c8/6Y2YUMeCFzsQ4iwifZxHCD2bDy2Xl6MIxhjKNIOiFgGMdqgCwcdGQMmfwWqxqIGZc1tSxhWvSX6ETgGyJgUp6dpFHGNylz5SNIEHgYwMHHNUjgyoCTPobHj+gGIsAvSDcl9PYeDxWNjA4+Xe1nUXEP6wKgN4yJQZMfF7UIH1scQQ+/vAtBB8XOKjIRwFVBPiGgAqI3ojVDQyKdU2hHfqedJkUA75/ZzeXdziQOzHjoCJfafIDoW9FRGDZ9tDbi6r3fxUrHOgXlzbtm0aE/yJaY8rBBCEZMeAdn9Na+YwLAqfO2CNYQt4AZwbSjQ5dgwZuxSoH+nf/H25/cjDyp1IMOAOPd/vh2O3TYgUOSWku0lNUpD74wVSndApWOtAHlzcdKF7/SEdXvAKQiBhwoAq7fWaMb0q0dQToaHAHVjvQVwB2dzyfDPkHE4N1SlJKUAlWgZiZNQ6kHistFvyEMiKHYMUDPVi7q21VKsmvNT7jc6LOKETys2ac8lyiOQoU1QbuwaoHju3+D3e8lmric1Sf891xvjeG8TsETYHRg5MqfQVY+UDO2t0dV6d6x+fAE4hvwKNA9bGjwFynbxNWv+DYEA4fd8XufcFUEH9dhPi4vzfHUYCeCh+eXu0fAxYIjEse7rgRxBfLuJbBMS/AXwsWCIrvNDefSJH/15OJ8vN1HmedgVjmPAqU1bV1TnnAOxlsEBCUdvuzRMnPxSc4qAQymfcooCYIzan1ob24aLj2f987hc7+78dLfH5qyi/QQCLz25hN3bcCpXXBoxNr5FlghVC7f+g38RCfX+adRzXvQBxr2RSqedjtBfifBCtEufNvfPNMOr9/FE+AL1O182CZf0as1iacXOWdD3aIcO//cEd5LORHgE+QwiKUock1BKga8ktgh8XBpb6ueGTfwYGIzzX2uAQ2yCGO8cMs9gKmbPUvB0ssvfu3O/sjPr/J5+uhfBBC2KvB2TWBlpxw+EtgihUDfw91jKez/xE98fl5LruASN3F1SDHe6Zs9a4DW6y4+ze1P6InP9eOwzkfpr0apCKjKCNuNaxuDM6lXvJHVeJzIw3uUINFD9Mbtzibstl/PVhjqd2/41n1iS53zBH0nP9Wnl1uoj9/nWuTrsu3y5ez5dmkq8huo//fQCbjalDinI99OZXNJ4I5FsCKnaHlnLfPCR8CPth5P98h/Y4IPi/W4BZ9z1gShp/Q90iiigC3Uxu/2XcT2GMBzK8LNJ8lXhmuv9FOtuFM28unJzN2eTb5gjyH1CykCJTL74y498WTwCATI88hXyzc4rVJVckSvxfIc8i3u2+gz/5YtLHMdbh/CBaZFdQKis68XnEWrPxOvkNema7hLHDsHU3ewJ8FE4EPht4VOA1kMuPub5f+RaCF2lq40Tsq7YNK3kCu3X2XYF7A7WCTyTCGWkDR5L0hxCKlXfmM+1rOyLC4fp/sqCAi8PFwB8qImwr5NulWUcg/Jkv97iIeVpcYXoB0N1hlEvBuSJP2dwGCfVKmd/6+IuD+mSBewGeF5Z6RYJcpzv7ybwRYkAdy7/fkGSTWcr8otytgl8Ex1L63kCbroMUX4xe5Gz0lxrptkZ4WQAQ6C8o9k8AyI+/+pNKWT1Wl+IbRxn3IJvdwvjITIBawAywzKArt8kTeHS2+CJ8y6nt1zkEQwAvoyi9vmQO2GfPs32TxxXe48H5pgqHnwOGuE0AEngHbDHft555r9SupXLv030afBw5M0s/6oeWPAjb3MrDOULu/9IzFF137OFvoK2aYCyLHdwXIv2hG6TDD7P4tqwRIR73WNBPSfSvgs/5RwL0e7Ms2qHQTTUaLxRdbW86GPSeYyiNzSFcKEAtoQ9GQrLub0nXWP2/K15hTmN1uy8+N3f1vYGGWwGdi2mn2W3yRvc4utSmPZg73FQJ4AW8XVjafDDZmY/enYg0CpJ/eZt7j2Z4T6ObiTQECgj8HGzOMyIOfv1l8cX1ulHz/JET6dgG8gI/wXDjj135CPPjZZvZ5GlbuzWchw3NhIGUYbpNG0KAfsr5r6V5tEbFuEkCsD/G6BDszsqDcW0WoQmOWxB9cCeK5cMbAzzEFePDDL/6cVpkzjpLT7/QpngsDqXAnfy9GqS/5YmvNm9QoSFehnWBpmpBvkxcKUn7qCAXPTrXUlS0lMwkyd138MA1sTTXo4QUN7oti7P7uF6w2fZFXgl2CiMAzIGyqd38xsspUAfiVNY9vkkeYXgJ4LpxC0IMLfnghUDOKxZYUAJt0nzhz6HbzewiQNzVn/5sFIv/RvHukUyzqAawRq60YngsnDQ6G0WC+J04bKilg1bmMFA4Vqa9gx5QN3i+DxcnsGnQeFmzRPGTta1zpXaH6CuK5cOIYel9zgSAJJMK8LKPXgY+LJejyO1Y90mVgt3BXitaPngJlF1ncA7hTuDnFc+H4IUiN/762UTrX0h6AcSo4vc29FTOUm/DRiHu9Z4LV8V0Z7RaO/GRn2l4+3dpBXXeZgca7lVJ3b8q3y5ezt5nO4iV4Lhwf+ecJlDWmtQ+tPrcGvQl4PtfeUqpcOTvcU0gUNnDZ7xSvQXQXjiPy/4KIuz9XN7b85HandBuxlgOTfVuuzXO2Jl4xljaj75Fn8KySn4Hnwhk4IzrclwpKfn4C/IQIc0w7bNDIZdgocm+jJ8xD+3guDukH9PcvJeEZfMGxLbC8P1ARSRokv6gCYPUcAM3O+pIJ5uLvyh1+lHTeAsfe0fR3/8XdmvBcOKURYgFaSg1smwURgD+YaE5e7fd5Lx1n+Ik6kbo2jnwVPBeOuigoWUJJmhBYAGgh3SOGAMgu873xl5x5m6Tc/n4nvr2hIi7f4ZsFPBdO7Ox/u+C7P/f/u10QAbCZdI76PRZovQL6muWRylVdeC4cC/m5WIRD+ofwAmCXfizGNa/7tyafq+cL75cmDBrs7L5S5OPBkShz/Rq6C6sDZZMqRCd/JG/8FkFiAL+2QhlwWre3xtK2rXCjd1TE6zmM58L6wSElFTLlN2oMQP6JIAJgpfcALcPKW6bHtNYpEYg83Y0aIdgn/HNhGoRHQP4e+08hPD67/EuLzdthpYdjjC3cqcbFOLVKstDPhQWq8htjIpB8hxgCQKm21pzDl/Mq5LNiHYcCh7yAg4VidhfmlFCb/AqI38t+LcgtgIX7Osqf0G3OtTEPBt0oDL0rcJp4kX9x6sTHkwpcIcbcux0ClHbbMapC/jpC/FHAPe8oGLIfpO9jjUIIgF2qEWQ+9+U65GIwvu8C+DHIHtV93CPIEaBJoHn9gjyeH+HOPwJ2izijCmSPah5Bbn5eFG5uHdKjOBLkiNYcIm77myAC0CHm/LpDseYMWDT44zm7+701yN6fnXFfyxkCCMBBgef4UL7dfYOgu7+8HSQf2ArsntlWXgNcaAPzrLwFKOeWd+KQ3yEVCVrnD+2ktF4gRcUxx8ceFVFWYL4YAkC/LCY8pk4y/2XtY6BhyoIbxRN4M7+8ZY7VEz/WYrJj9gAetvhGcCfmuG/FYEoDv96aMy5ea+9k7Q2LC8AfMMf9in+l5eICXFYZExufWflcKHrZtxjSwZ/jAjmWmOyvVzZ/jX6pDzCx8TwrlV/hSjJWJH8kCewQ5nlQe73QIc20gtr/BpPZr3GjCZmbRXA15IKN8iwhroXod+TFTY9lbqRXc9W0RrwpabphwXwBfjBn2nkebpNGCJ7wobfO7sXuruRedPrGEyKDjjynkudzQaRW4PPRaughLmAyKGWUha/yKwW4Fly+rWUVL3JQPTZwiW0eMxrD+7vHUHgheMpU3YWH2dwzBHXr/knVbnZxfXjuHgMqp2gzua9lDJfO4itSUatH84Zqpquep4SZHJv0V54cpcU0NTcBXdMMqruntBjvLq75tkgxI95Yja/WDnmlAE8799OOdBe3MR+wSQSQZjEIH5e70VNCx4S7RXhhSFmDjxt7QqhGOr9pt2rKJu86vPuguINRNx+lEccGS4uBQ1piXNffJn/bau/zuX4d7zIgvbk8g2E2aT6/uOM5tNaRU37FkGtRucqxRpZXJ8cw+NHKiHtfPAlsMjnYK+Urxu46/JaoRUGezhXGc7/MX+udk3K+h/t564K7+5IL/QO6TXCbvbKQoXIDTNzc83NlZ6AdAi6+WODMS06yMWuyGgXb/91AZ3+pymQD+BZ7LPm2vcNABbGhvFehvA1aEz6TreEPOGEq+0pa7plkkuaenJj0FN/Xx9LRFRAvcKiJFZiiWS1vYtl3/+lu0uAD9R7nmHM2GVY5EAuG2vcWkov9U+Xq1+CZp1l9Os53kkZ+V61ES0UqvAikFEoHK7t8tZHL2SnFRbPmMjmkZgO6+Y/l2ltKsXyBVILTcCMP3DqN1nmo0C5PzLzrb6zijp/z5HA8AksVSKvXS+2/I+8QjFTYJLM9JcdU7/8qVy0xQitmnowhm9zDsTSBTIJvkCK5L0Zoc9eV0SakRLqfZ/kXPsBBGr7CwVIEsno0UDJgpe9ne0OkWMCzGfmFI51dPs5SBpSbjx78JBRLDzAUKNisPAm3S69mMTloZfp3f7vbng11y3V4lmKVAYYHZZSSEFzIazYLtSmktD5PH+pwj89wvbbn6Ze6CKsKMOfxgAqX2KQ/ZdYLkL6Zxt1fbsrMm2f3CyA+YCkhsEtPZyrNPS2vWCNNHbtAfABIQggc0p/TfmS2uX+U8nONQk4QHwDMIAQfprSKMLesTtMP+iKID4h9NJD3pCcg6P5tSn7IKRu8X+YCBCA+AKQ1RvBMqjsOF5Z7Ria/+ysVVFJ3j89XJJhyAOiLSEXtltQdreUtSf1AZ9zXckaKiiq+zkUX8A4fAAZBdx7B5SnyujuTajRLd4q/S7aqLqfs8tsBzCwAxAHKLIxUKno3yTLijyZGfiqgobSrTuwf/pSDEMjVB4Akj+DUbYo3UeXhW6LJQRvd58f/D9ulbQn8Y0e40GJWq5QAgAWhvMHp7p6cyKb8l7iK3uaXt8yJM+mHv7aRiD8OUwUAaRSCjd5RkWrGnXEmB62NZ/ePJ23xqUKHNBNTAwCZAwf3IgVMYy0gGoypPB598ZpYWxQldLYAACB1MQK7tDjWJ8jkBXx34E9TmnvK3sEeGyhXeuiKCwDGgHp1SF2rB6mg9c6ALezJTbhpgA84yEGIoXcFTsOIA4AB4wOVzScrNwYDdemyyb+I+s2R0kbv9hfgK3DsHY0hBgDjg/sa9BsoJHHgVn7RzhJ3RiH/yxktNggAQOo8AgrO9/PG4P5eX8hVdXVNEl9Xau+hYSYAmB788I443a4to59r85zd8wW5Dne12mqISx0jdRcALAZOLe6uXvxRhOv13eSv8EzlDD5urBH1bAAAgGXAhUIijU2OcIt0rvN3CzU5mIyhAQBxwJwnz/+H/w+jVB9fej6PtgAAAABJRU5ErkJggg==
echo "$data" | base64 -d > ~/.config/fastfetch/arch.png

Fontconfig

Make sure Fira code is installed on your system.

<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
<alias>
<family>monospace</family>
<prefer><family>FiraCode</family></prefer>
</alias>
</fontconfig>

Gammastep

[general]
temp-day=6500
temp-night=3500

fade=0

dawn-time=5:00-6:45
dusk-time=18:35-20:15

gamma-day=1.0
gamma-night=0.7
adjustment-method=wayland

GDB

GDB Early Init

Quiet startup

set startup-quietly on

GDB init

You'd need to put gef's script in place. It is too large to be added here.

set disassembly-flavor intel
set debuginfod enabled off
source ~/.gdbinit_gef.py

GTK

3.0

This defines the colors for most part

@define-color accent_color #dddddd;
@define-color accent_bg_color #0a0a0a;
@define-color accent_fg_color #ffffff;
@define-color destructive_color #ff7b63;
@define-color destructive_bg_color #c01c28;
@define-color destructive_fg_color #dddddd;
@define-color success_color #8ff0a4;
@define-color success_bg_color #26a269;
@define-color success_fg_color #dddddd;
@define-color warning_color #f8e45c;
@define-color warning_bg_color #cd9309;
@define-color warning_fg_color rgba(0, 0, 0, 0.8);
@define-color error_color #ff7b63;
@define-color error_bg_color #c01c28;
@define-color error_fg_color #dddddd;
@define-color window_bg_color #0A0A0A;
@define-color window_fg_color #dddddd;
@define-color view_bg_color #0A0A0A;
@define-color view_fg_color @window_fg_color;
@define-color headerbar_bg_color @window_bg_color;
@define-color headerbar_fg_color @window_fg_color;
@define-color headerbar_border_color #dddddd;
@define-color headerbar_backdrop_color @window_bg_color;
@define-color headerbar_shade_color rgba(0, 0, 0, 0.36);
@define-color card_bg_color rgba(255, 255, 255, 0.08);
@define-color card_fg_color @window_fg_color;
@define-color card_shade_color rgba(0, 0, 0, 0.36);
@define-color dialog_bg_color @popover_bg_color;
@define-color dialog_fg_color @popover_fg_color;
@define-color popover_bg_color #202020;
@define-color popover_fg_color @view_fg_color;
@define-color shade_color rgba(0,0,0,0.36);
@define-color scrollbar_outline_color rgba(0,0,0,0.5);
@define-color blue_1 #99c1f1;
@define-color blue_2 #62a0ea;
@define-color blue_3 #3584e4;
@define-color blue_4 #1c71d8;
@define-color blue_5 #1a5fb4;
@define-color green_1 #8ff0a4;
@define-color green_2 #57e389;
@define-color green_3 #33d17a;
@define-color green_4 #2ec27e;
@define-color green_5 #26a269;
@define-color yellow_1 #f9f06b;
@define-color yellow_2 #f8e45c;
@define-color yellow_3 #f6d32d;
@define-color yellow_4 #f5c211;
@define-color yellow_5 #e5a50a;
@define-color orange_1 #ffbe6f;
@define-color orange_2 #ffa348;
@define-color orange_3 #ff7800;
@define-color orange_4 #e66100;
@define-color orange_5 #c64600;
@define-color red_1 #f66151;
@define-color red_2 #ed333b;
@define-color red_3 #e01b24;
@define-color red_4 #c01c28;
@define-color red_5 #a51d2d;
@define-color purple_1 #dc8add;
@define-color purple_2 #c061cb;
@define-color purple_3 #9141ac;
@define-color purple_4 #813d9c;
@define-color purple_5 #613583;
@define-color brown_1 #cdab8f;
@define-color brown_2 #b5835a;
@define-color brown_3 #986a44;
@define-color brown_4 #865e3c;
@define-color brown_5 #63452c;
@define-color light_1 #ffffff;
@define-color light_2 #f6f5f4;
@define-color light_3 #deddda;
@define-color light_4 #c0bfbc;
@define-color light_5 #9a9996;
@define-color dark_1 #77767b;
@define-color dark_2 #5e5c64;
@define-color dark_3 #3d3846;
@define-color dark_4 #241f31;
@define-color dark_5 #000000;

This defines other random stuff

[Settings]
gtk-cursor-theme-name=breeze_cursors
gtk-cursor-theme-size=24
gtk-decoration-layout=':'
gtk-enable-animations=true
gtk-font-name=Noto Sans,  13
gtk-theme-name=adw-gtk3-dark
gtk-primary-button-warps-slider=false
gtk-xft-dpi=127872

[AdwStyleManager]
color-scheme=ADW_COLOR_SCHEME_PREFER_DARK

4.0

This defines the colors for most part

@define-color accent_color #dddddd;
@define-color accent_bg_color #0a0a0a;
@define-color accent_fg_color #ffffff;
@define-color destructive_color #ff7b63;
@define-color destructive_bg_color #c01c28;
@define-color destructive_fg_color #dddddd;
@define-color success_color #8ff0a4;
@define-color success_bg_color #26a269;
@define-color success_fg_color #dddddd;
@define-color warning_color #f8e45c;
@define-color warning_bg_color #cd9309;
@define-color warning_fg_color rgba(0, 0, 0, 0.8);
@define-color error_color #ff7b63;
@define-color error_bg_color #c01c28;
@define-color error_fg_color #dddddd;
@define-color window_bg_color #0A0A0A;
@define-color window_fg_color #dddddd;
@define-color view_bg_color #0A0A0A;
@define-color view_fg_color @window_fg_color;
@define-color headerbar_bg_color @window_bg_color;
@define-color headerbar_fg_color @window_fg_color;
@define-color headerbar_border_color #dddddd;
@define-color headerbar_backdrop_color @window_bg_color;
@define-color headerbar_shade_color rgba(0, 0, 0, 0.36);
@define-color card_bg_color rgba(255, 255, 255, 0.08);
@define-color card_fg_color @window_fg_color;
@define-color card_shade_color rgba(0, 0, 0, 0.36);
@define-color dialog_bg_color @popover_bg_color;
@define-color dialog_fg_color @popover_fg_color;
@define-color popover_bg_color #202020;
@define-color popover_fg_color @view_fg_color;
@define-color shade_color rgba(0,0,0,0.36);
@define-color scrollbar_outline_color rgba(0,0,0,0.5);
@define-color blue_1 #99c1f1;
@define-color blue_2 #62a0ea;
@define-color blue_3 #3584e4;
@define-color blue_4 #1c71d8;
@define-color blue_5 #1a5fb4;
@define-color green_1 #8ff0a4;
@define-color green_2 #57e389;
@define-color green_3 #33d17a;
@define-color green_4 #2ec27e;
@define-color green_5 #26a269;
@define-color yellow_1 #f9f06b;
@define-color yellow_2 #f8e45c;
@define-color yellow_3 #f6d32d;
@define-color yellow_4 #f5c211;
@define-color yellow_5 #e5a50a;
@define-color orange_1 #ffbe6f;
@define-color orange_2 #ffa348;
@define-color orange_3 #ff7800;
@define-color orange_4 #e66100;
@define-color orange_5 #c64600;
@define-color red_1 #f66151;
@define-color red_2 #ed333b;
@define-color red_3 #e01b24;
@define-color red_4 #c01c28;
@define-color red_5 #a51d2d;
@define-color purple_1 #dc8add;
@define-color purple_2 #c061cb;
@define-color purple_3 #9141ac;
@define-color purple_4 #813d9c;
@define-color purple_5 #613583;
@define-color brown_1 #cdab8f;
@define-color brown_2 #b5835a;
@define-color brown_3 #986a44;
@define-color brown_4 #865e3c;
@define-color brown_5 #63452c;
@define-color light_1 #ffffff;
@define-color light_2 #f6f5f4;
@define-color light_3 #deddda;
@define-color light_4 #c0bfbc;
@define-color light_5 #9a9996;
@define-color dark_1 #77767b;
@define-color dark_2 #5e5c64;
@define-color dark_3 #3d3846;
@define-color dark_4 #241f31;
@define-color dark_5 #000000;

This defines other random stuff

[Settings]
gtk-cursor-theme-name=breeze_cursors
gtk-cursor-theme-size=24
gtk-decoration-layout=':'
gtk-enable-animations=true
gtk-font-name=Noto Sans,  13
gtk-icon-theme-name=adwaita-dark
gtk-primary-button-warps-slider=false
gtk-xft-dpi=127872

[AdwStyleManager]
color-scheme=ADW_COLOR_SCHEME_PREFER_DARK

Helix

Config

Editor settings

theme = "tokyonight"

[editor]
scrolloff = 10
line-number = "relative"
mouse = false
scroll-lines = 5
completion-replace = true
true-color = true
rulers = [81]
bufferline = "multiple"
cursorline = true
end-of-line-diagnostics = "hint"
default-yank-register = "+"

[editor.inline-diagnostics]
cursor-line = "warning"

[editor.statusline]
left = ["mode", "spinner", "diagnostics"]
center = [
  "version-control",
  "file-name",
  "read-only-indicator",
  "file-modification-indicator",
]
right = [
  "selections",
  "register",
  "position",
  "primary-selection-length",
  "file-encoding",
]
separator = "⟩"
mode.normal = "NORMAL"
mode.insert = "INSERT"
mode.select = "SELECT"

[editor.cursor-shape]
insert = "bar"
normal = "block"
select = "underline"

[editor.file-picker]
hidden = false

[editor.indent-guides]
character = "┊"
render = true

[editor.lsp]
display-messages = true
display-inlay-hints = true

Keybinds - spacelix lmao

[keys.normal]
X = ["extend_line_up", "extend_to_line_bounds"]
G = "goto_last_line"
0 = "goto_line_start"
H = "goto_previous_buffer"
L = "goto_next_buffer"

[keys.normal.m]
r = "no_op"
d = "no_op"
a = "no_op"
i = "no_op"

[keys.normal." "]
" " = "file_picker"
r = ":config-reload"
t = "file_picker_in_current_buffer_directory"
x = "command_palette"
h = "no_op"
o = "no_op"
f = "no_op"
p = "no_op"
c = "no_op"

[keys.normal." ".b]
b = "buffer_picker"
d = ":buffer-close"
r = ":reload"

[keys.normal." ".d]
n = "goto_next_diag"
p = "goto_prev_diag"

[keys.normal." ".g]
g = "no_op"
l = "no_op"
n = "goto_next_change"
p = "goto_prev_change"

[keys.normal." ".l]
a = "code_action"
q = ":lsp-stop"
r = "rename_symbol"
R = "goto_reference"
i = "goto_implementation"
g = "goto_definition"
f = ":fmt"
d = "goto_declaration"
c = "toggle_comments"

[keys.normal." ".w]
v = ":vsplit-new"
b = ":hsplit-new"
l = "jump_view_right"
h = "jump_view_left"
j = "jump_view_down"
k = "jump_view_up"
q = "wclose"

[keys.select]
X = ["extend_line_up", "extend_to_line_bounds"]
G = "goto_last_line"
0 = "goto_line_start"

[keys.select.m]
r = "no_op"
d = "no_op"
a = "no_op"
i = "no_op"

[keys.select." "]
" " = "file_picker"
r = ":config-reload"
t = "file_picker_in_current_buffer_directory"
H = "goto_previous_buffer"
L = "goto_next_buffer"
x = "command_palette"
h = "no_op"
o = "no_op"
f = "no_op"
p = "no_op"
c = "no_op"

[keys.select." ".b]
b = "buffer_picker"
d = ":buffer-close"
r = ":reload"

[keys.select." ".d]
n = "goto_next_diag"
j = "goto_prev_diag"

[keys.select." ".l]
a = "code_action"
q = ":lsp-stop"
r = "rename_symbol"
R = "goto_reference"
i = "goto_implementation"
g = "goto_definition"
f = ":fmt"
d = "goto_declaration"
c = "toggle_comments"

[keys.select." ".w]
v = ":vsplit-new"
b = ":hsplit-new"
l = "jump_view_right"
h = "jump_view_left"
j = "jump_view_down"
k = "jump_view_up"
q = "wclose"

Language config

Tree-sitter config

# Language support configuration.
# See the languages documentation: 
# https://docs.helix-editor.com/master/languages.html
use-grammars = { only = [
  "rust",
  "sway",
  "c",
  "cpp",
  "bash",
  "cmake",
  "make",
  "markdown",
  "latex",
  "toml",
  "json",
  "json5",
  "javascript",
  "css",
  "html",
  "python",
  "typst",
  "ocaml",
  "yaml",
  "nasm",
  "gas",
] }

Rust

[language-server.rust-analyzer.config]
inlayHints.bindingModeHints.enable = true
check.command = "clippy"

[[language]]
name = "rust"

Web

[[language]]
name = "json"
formatter = { command = 'prettier', args = ["--parser", "jsonc"] }

[[language]]
name = "javascript"
formatter = { command = 'prettier', args = ["--parser", "typescript"] }

[[language]]
name = "css"
formatter = { command = "prettier", args = ["--parser", "css"] }

[[language]]
name = "html"
formatter = { command = "prettier", args = ["--parser", "html"] }

Python

[language-server.pylsp.config.pylsp]
plugins.black.enabled = true
plugins.pylint.enabled = true
plugins.pyflakes.enabled = false
plugins.pyls_mypy.enabled = false
plugins.pyls_mypy.live_mode = false
plugins.isort.enabled = false
plugins.rope_autoimport.enabled = false

[[language]]
name = "python"
language-servers = ["pylsp"]

Remaining

[[language]]
name = "bash"
auto-format = true
formatter = { command = "shfmt", args = ["-i", "4", "-ci", "-sr", "-kp"] }
indent = { tab-width = 4, unit = "    " }


[[language]]
name = "make"
auto-format = true

[[language]]
name = "ocaml"
auto-format = true
formatter = { command = "ocamlformat", args = ["-", "--impl"] }

[[language]]
name = "markdown"
auto-format = true

[[language]]
name = "typst"
auto-format = true
language-servers = ["tinymist"]

[language-server.tinymist]
command = "tinymist"

[language-server.tinymist.config]
exportPdf = "onSave"
outputPath = "$root/target/$dir/$name"
fontPaths = ["./fonts/"]
typstExtraArgs = ["main.typ"]
formatterMode = "typstyle"

Themes

# Author: Paul Graydon <untimely.creation97@proton.me>

attribute = { fg = "cyan" }
comment = { fg = "comment", modifiers = ["italic"] }
"comment.block.documentation" = { fg = "yellow" }
constant = { fg = "orange" }
"constant.builtin" = { fg = "aqua" }
"constant.character" = { fg = "light-green" }
"constant.character.escape" = { fg = "magenta" }
constructor = { fg = "aqua" }
function = { fg = "blue", modifiers = ["italic"] }
"function.builtin" = { fg = "aqua" }
"function.macro" = { fg = "cyan" }
"function.special" = { fg = "cyan" }
keyword = { fg = "purple", modifiers = ["italic"] }
"keyword.control" = { fg = "magenta" }
"keyword.control.import" = { fg = "cyan" }
"keyword.control.return" = { fg = "purple", modifiers = ["italic"] }
"keyword.directive" = { fg = "cyan" }
"keyword.function" = { fg = "magenta" }
"keyword.operator" = { fg = "magenta" }
label = { fg = "blue" }
namespace = { fg = "cyan" }
operator = { fg = "turquoise" }
punctuation = { fg = "turquoise" }
special = { fg = "aqua" }
string = { fg = "light-green" }
"string.regexp" = { fg = "light-cyan" }
"string.special" = { fg = "aqua" }
tag = { fg = "magenta" }
type = { fg = "aqua" }
"type.builtin" = { fg = "aqua" }
"type.enum.variant" = { fg = "orange" }
variable = { fg = "fg" }
"variable.builtin" = { fg = "red" }
"variable.other.member" = { fg = "green" }
"variable.parameter" = { fg = "yellow", modifiers = ["italic"] }

"markup.bold" = { modifiers = ["bold"] }
"markup.heading" = { fg = "blue", modifiers = ["bold"] }
"markup.heading.completion" = { bg = "bg-menu", fg = "fg" }
"markup.heading.hover" = { bg = "fg-selected" }
"markup.italic" = { modifiers = ["italic"] }
"markup.link" = { fg = "blue", underline = { style = "line" } }
"markup.link.label" = { fg = "teal" }
"markup.link.text" = { fg = "teal" }
"markup.link.url" = { underline = { style = "line" } }
"markup.list" = { fg = "orange", modifiers = ["bold"] }
"markup.normal.completion" = { fg = "comment" }
"markup.normal.hover" = { fg = "fg-dark" }
"markup.raw" = { fg = "teal" }
"markup.raw.inline" = { bg = "black", fg = "blue" }
"markup.strikethrough" = { modifiers = ["crossed_out"] }

"diff.delta" = { fg = "change" }
"diff.delta.moved" = { fg = "blue" }
"diff.minus" = { fg = "delete" }
"diff.plus" = { fg = "add" }

error = { fg = "error" }
warning = { fg = "yellow" }
info = { fg = "info" }
hint = { fg = "hint" }
"diagnostic.error" = { underline = { style = "curl", color = "error" } }
"diagnostic.warning" = { underline = { style = "curl", color = "yellow"} }
"diagnostic.info" = { underline = { style = "curl", color = "info"} }
"diagnostic.hint" = { underline = { style = "curl", color = "hint" } }
"diagnostic.unnecessary" = { modifiers = ["dim"] }
"diagnostic.deprecated" = { modifiers = ["crossed_out"] }

# "ui.background" = { bg = "bg", fg = "fg" }
"ui.cursor" = { modifiers = ["reversed"] }
"ui.cursor.match" = { fg = "orange", modifiers = ["bold"] }
"ui.cursorline.primary" = { bg = "bg-menu" }
"ui.help" = { bg = "bg-menu", fg = "fg" }
"ui.linenr" = { fg = "fg-gutter" }
"ui.linenr.selected" = { fg = "fg-linenr" }
"ui.menu" = { bg = "bg-menu", fg = "fg" }
"ui.menu.selected" = { bg = "fg-selected" }
"ui.popup" = { bg = "bg-menu", fg = "border-highlight" }
"ui.selection" = { bg = "bg-selection" }
"ui.selection.primary" = { bg = "bg-selection" }
"ui.statusline" = { bg = "bg-menu", fg = "fg-dark" }
"ui.statusline.inactive" = { bg = "bg-menu", fg = "fg-gutter" }
"ui.statusline.normal" = { bg = "blue", fg = "bg", modifiers = ["bold"] }
"ui.statusline.insert" = { bg = "light-green", fg = "bg", modifiers = ["bold"] }
"ui.statusline.select" = { bg = "magenta", fg = "bg", modifiers = ["bold"] }
"ui.text" = { bg = "bg", fg = "fg" }
"ui.text.focus" = { bg = "bg-focus" }
"ui.text.inactive" = { fg = "comment", modifiers = ["italic"] }
"ui.text.info" = { bg = "bg-menu", fg = "fg" }
"ui.text.directory" = { fg = "cyan" }
"ui.virtual.ruler" = { bg = "fg-gutter" }
"ui.virtual.whitespace" = { fg = "fg-gutter" }
"ui.virtual.inlay-hint" = {  bg = "bg-inlay", fg = "teal" }
"ui.virtual.jump-label" = {  fg = "orange", modifiers = ["bold"] }
"ui.window" = { fg = "border", modifiers = ["bold"] }

[palette]
red = "#f7768e"
orange = "#ff9e64"
yellow = "#e0af68"
light-green = "#9ece6a"
green = "#73daca"
aqua = "#2ac3de"
teal = "#1abc9c"
turquoise = "#89ddff"
light-cyan = "#b4f9f8"
cyan = "#7dcfff"
blue = "#7aa2f7"
purple = "#9d7cd8"
magenta = "#bb9af7"
comment = "#565f89"
black = "#414868"

add = "#449dab"
change = "#6183bb"
delete = "#914c54"

error = "#db4b4b"
info = "#0db9d7"
hint = "#1abc9c"

fg = "#c0caf5"
fg-dark = "#a9b1d6"
fg-gutter = "#3b4261"
fg-linenr = "#737aa2"
fg-selected = "#343a55"
border = "#15161e"
border-highlight = "#27a1b9"
bg = "#0a0a0a"
bg-inlay = "#1a2b32"
bg-selection = "#283457"
bg-menu = "#16161e"
bg-focus = "#292e42"

/etc/issue

Manually copy paste it, to, well /etc/issue

\e[1;31m▀▀▀▀▀▀▀ \e[1;32m▀▀▀▀▀▀▀▀▀▀   \e[1;36m▀▀▀▀▀       ▀▀▀▀▀
\e[1;31m▀▀▀▀▀▀▀ \e[1;32m▀▀▀▀▀▀▀▀▀▀▀▀ \e[1;36m▀▀▀▀▀▀     ▀▀▀▀▀▀
\e[1;31m  ▀▀▀   \e[1;32m  ▀▀▀    ▀▀▀ \e[1;36m  ▀▀▀▀▀   ▀▀▀▀▀
\e[1;31m  ▀▀▀   \e[1;32m  ▀▀▀▀▀▀▀▀   \e[1;36m  ▀▀▀▀▀▀ ▀▀▀▀▀▀
\e[1;31m  ▀▀▀   \e[1;32m  ▀▀▀▀▀▀▀▀   \e[1;36m  ▀▀▀ ▀▀▀▀▀ ▀▀▀
\e[1;31m  ▀▀▀   \e[1;32m  ▀▀▀    ▀▀▀ \e[1;36m  ▀▀▀  ▀▀▀  ▀▀▀
\e[1;31m▀▀▀▀▀▀▀ \e[1;32m▀▀▀▀▀▀▀▀▀▀▀▀ \e[1;36m▀▀▀▀▀   ▀   ▀▀▀▀▀
\e[1;31m▀▀▀▀▀▀▀ \e[1;32m▀▀▀▀▀▀▀▀▀▀   \e[1;36m▀▀▀▀▀       ▀▀▀▀▀

\e[1;97m██████ ██    \e[1;31m▓▓\e[1;97m       ██    ████▄          ██
  ██   ██▄▄  ▄▄ ▄▄▄▄  ██ ▄▄ ██ ██  ▄▄▄   ▄▄██
  ██   ██▀██ ██ ██▀██ ██ ██ ██ ██ ██▀██ ██▀██
  ██   ██ ██ ██ ██ ██ ██▐█▌ ██▄██ ▀▀ ██ ██ ██
  ██   ██ ██ ██ ██ ██ ████  ██▀▀  ▄████ ██ ██
  ██   ██ ██ ██ ██ ██ ██▐█▌ ██    ██ ██ ██ ██
  ██   ██ ██ ██ ██ ██ ██ ██ ██    ██▄██ ██▄██
  ▀▀   ▀▀ ▀▀ ▀▀ ▀▀ ▀▀ ▀▀ ▀▀ ▀▀     ▀▀▀▀  ▀▀▀▀

Kitty

Font and cursor settings

font_family Fira Code Retina
bold_font Fira Code Bold
italic_font Source Code Pro Italic
font_size 12.0
force_ltr no

disable_ligatures cursor
font_features FiraCode-Retina +ss05 +ss03 +ss09 +ss07 +zero +ss06
font_features FiraCode-Bold +ss05 +ss03 +ss09 +ss07 +zero +ss06

box_drawing_scale 0.001, 1, 1.5, 2

cursor #cccccc
cursor_text_color #111111
cursor_shape beam
cursor_beam_thickness 1.5
cursor_underline_thickness 2.0
cursor_blink_interval -1
cursor_stop_blinking_after 15.0

Basic actions + mouse mapping

scrollback_lines 1000
scrollback_pager less --chop-long-lines --RAW-CONTROL-CHARS +INPUT_LINE_NUMBER
scrollback_pager_history_size 1000

url_color #0087bd
url_style curly
open_url_with default
url_prefixes file ftp ftps gemini git gopher http https irc ircs kitty mailto news sftp ssh
detect_urls no

copy_on_select no
paste_actions quote-urls-at-prompt
strip_trailing_spaces never
select_by_word_characters @-./_~?&=%+#
click_interval -1.0

focus_follows_mouse no

pointer_shape_when_grabbed arrow
default_pointer_shape beam
pointer_shape_when_dragging beam

mouse_map left click ungrabbed mouse_handle_click selection link prompt
mouse_map shift+left click grabbed,ungrabbed mouse_handle_click selection link prompt
mouse_map ctrl+shift+left release grabbed,ungrabbed mouse_handle_click link
mouse_map ctrl+shift+left press grabbed discard_event
mouse_map middle release ungrabbed paste_from_selection
mouse_map left press ungrabbed mouse_selection normal
mouse_map ctrl+alt+left press ungrabbed mouse_selection rectangle
mouse_map left doublepress ungrabbed mouse_selection word
mouse_map left triplepress ungrabbed mouse_selection line
mouse_map ctrl+alt+left triplepress ungrabbed mouse_selection line_from_point
mouse_map right press ungrabbed mouse_selection extend
mouse_map shift+middle release ungrabbed,grabbed paste_selection
mouse_map shift+middle press grabbed discard_event
mouse_map shift+left press ungrabbed,grabbed mouse_selection normal
mouse_map ctrl+shift+alt+left press ungrabbed,grabbed mouse_selection rectangle
mouse_map shift+left doublepress ungrabbed,grabbed mouse_selection word
mouse_map shift+left triplepress ungrabbed,grabbed mouse_selection line
mouse_map ctrl+shift+alt+left triplepress ungrabbed,grabbed mouse_selection line_from_point
mouse_map shift+right press ungrabbed,grabbed mouse_selection extend
mouse_map ctrl+shift+right press ungrabbed mouse_show_command_output

rendering and colors

repaint_delay 10
input_delay 3
sync_to_monitor yes

enable_audio_bell no
visual_bell_duration 0
visual_bell_color none
window_alert_on_bell yes
bell_on_tab " "
command_on_bell none
bell_path none

remember_window_size  yes
initial_window_width  960
initial_window_height 540

enabled_layouts all
window_resize_step_cells 2
window_resize_step_lines 2

window_border_width 0.5pt
draw_minimal_borders yes
window_margin_width 0
single_window_margin_width -1
window_padding_width 0
placement_strategy center
active_border_color #ffffff
inactive_border_color #ffffff
bell_border_color #ff5a00

inactive_text_alpha 1.0

resize_debounce_time 0.1
resize_in_steps no
visual_window_select_characters 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ

confirm_os_window_close -1
hide_window_decorations yes
window_logo_path none
window_logo_position bottom-right
window_logo_alpha 0.5

tab_bar_edge top
tab_bar_margin_width 0.0
tab_bar_margin_height 0.0 0.0
tab_bar_style powerline
tab_bar_align left
tab_bar_min_tabs 1
tab_switch_strategy previous
tab_fade 0.25 0.5 0.75 1
tab_separator "┋"
tab_powerline_style slanted
tab_activity_symbol ""
active_tab_foreground   #ffffff
active_tab_background   #999999
active_tab_font_style   bold
inactive_tab_foreground #ccc
inactive_tab_background #0A0A0A
inactive_tab_font_style normal
tab_bar_background none
tab_bar_margin_color none

foreground #999999
background #0A0A0A
background_opacity 1.00
dim_opacity 0.75
selection_foreground #000000
selection_background #cccccc

color0 #000000
color8 #767676
color1 #cc0403
color9 #f2201f
color2  #19cb00
color10 #23fd00
color3  #cecb00
color11 #fffd00
color4  #0d73cc
color12 #1a8fff
color5  #cb1ed1
color13 #fd28ff
color6  #0dcdcd
color14 #14ffff
color7  #dddddd
color15 #ffffff

mark1_foreground black
mark1_background #98d3cb
mark2_foreground black
mark2_background #f2dcd3
mark3_foreground black
mark3_background #f274bc

Random BS

shell /usr/bin/nu
editor .

close_on_child_death no

allow_remote_control no
listen_on none

update_check_interval 24

clipboard_control write-clipboard write-primary read-clipboard-ask read-primary-ask
clipboard_max_size 64
allow_hyperlinks yes

shell_integration no-cursor
notify_on_cmd_finish unfocused 1.0 command notify-send "job finished with status: %s" %c

allow_cloning ask
clone_source_strategies venv,conda,env_var,path

term xterm-kitty

display settings

linux_display_server wayland
wayland_titlebar_color #0A0A0A
macos_titlebar_color system
macos_option_as_alt no
macos_hide_from_tasks no
macos_quit_when_last_window_closed no
macos_window_resizable yes
macos_thicken_font 0
macos_traditional_fullscreen no
macos_show_window_title_in all
macos_menubar_title_max_length 0
macos_custom_beam_cursor no
macos_colorspace srgb

Keybinds

kitty_mod alt
map kitty_mod+c copy_to_clipboard
map kitty_mod+v paste_from_clipboard
map kitty_mod+s paste_from_selection
map kitty_mod+up scroll_line_up
map kitty_mod+k  scroll_line_up
map kitty_mod+down scroll_line_down
map kitty_mod+j    scroll_line_down
map kitty_mod+u scroll_page_up
map kitty_mod+d scroll_page_down
map kitty_mod+z scroll_to_prompt -1
map kitty_mod+g show_last_command_output
map kitty_mod+enter new_window
map kitty_mod+shift+enter launch --cwd=current
map kitty_mod+x close_window
map kitty_mod+] next_window
map kitty_mod+[ previous_window
map kitty_mod+r start_resizing_window
map kitty_mod+n focus_visible_window
map kitty_mod+l next_tab
map kitty_mod+h previous_tab
map kitty_mod+t launch --type=tab
map kitty_mod+w close_tab
map kitty_mod+q close_os_window
map kitty_mod+. move_tab_forward
map kitty_mod+, move_tab_backward
map kitty_mod+i set_tab_title
map kitty_mod+y next_layout
map kitty_mod+equal change_font_size all +2.0
map kitty_mod+minus change_font_size all -2.0
map kitty_mod+backspace change_font_size all 0

Mimeapps

[Default Applications]
application/pdf=org.pwmt.zathura.desktop
image/jpeg=swappy.desktop
image/png=swappy.desktop
text/plain=emacsclient.desktop
text/x-csrc=emacsclient.desktop

[Added Associations]
application/pdf=org.pwmt.zathura.desktop;
image/jpeg=swappy.desktop;
application/x-qemu-disk=org.gnome.Boxes.desktop;
image/png=swappy.desktop;
text/plain=emacsclient.desktop;
text/x-csrc=emacsclient.desktop;

Niri

Config

Input config

// https://github.com/YaLTeR/niri/wiki/Configuration:-Input
input {
    keyboard {
        xkb {
            options "compose:ralt,caps:swapescape"
        }
    }

    touchpad {
        tap
        dwt
        natural-scroll
        accel-speed 0.2
        accel-profile "adaptive"
    }

    warp-mouse-to-focus
}

Output configuration

// https://github.com/YaLTeR/niri/wiki/Configuration:-Outputs
output "eDP-1" {
    mode "1920x1080@60.0"
    scale 1
    transform "normal"
    position x=1280 y=0
}

Layout config

// https://github.com/YaLTeR/niri/wiki/Configuration:-Layout
layout {
    gaps 5
    empty-workspace-above-first 
    // center-focused-column "always"
    background-color "#ffffff"
    default-column-display "tabbed"

    tab-indicator {
        hide-when-single-tab
    }  

    preset-column-widths {
        proportion 0.33333
        proportion 0.5
        proportion 0.66667
    }
    default-column-width { proportion 0.5; }
    focus-ring {
        width 3
        active-gradient from="#7fc8ff" to="#ffcc00" angle=45
        inactive-gradient from="#505050" to="#eeeeee" angle=45
    }


    border {
        off
        width 4
        active-color "#ffc87f"
        inactive-color "#505050"
    }

    struts {
        left 15
        right 15
    }
}

Other random window rules

prefer-no-csd

screenshot-path "~/Pictures/Screenshots/screenshot-%Y-%m-%d-%H-%M-%S.png"

animations {
    slowdown 0.5
}

window-rule {
    match app-id=r#"firefox$"# title="^Picture-in-Picture$"
    open-floating true
}

window-rule {
    match app-id=r#"floating_kitty$"#
    open-floating true
}

window-rule {
    match app-id=r#"^org\.keepassxc\.KeePassXC$"#
    match app-id=r#"^org\.gnome\.World\.Secrets$"#

    block-out-from "screen-capture"
}

window-rule {
    geometry-corner-radius 7
    clip-to-geometry true
}

hotkey-overlay {
    skip-at-startup
}

Keybinds

binds {
    Mod+Shift+Slash { show-hotkey-overlay; }

    Mod+Return { spawn "kitty"; }
    Mod+Shift+Return { spawn "kitty" "--app-id=floating_kitty"; }
    Mod+D { spawn "rofi" "-show" "drun"; }
    Super+Alt+L { spawn "systemctl" "suspend"; }
    Mod+E { spawn "emacsclient" "-nc"; }
    Mod+B { spawn "flatpak" "run" "io.gitlab.librewolf-community"; }

    XF86AudioRaiseVolume   allow-when-locked=true { spawn "~/.config/niri/media-control" "volume_up"; }
    XF86AudioLowerVolume   allow-when-locked=true { spawn "~/.config/niri/media-control" "volume_down"; }
    XF86AudioMute          allow-when-locked=true { spawn "~/.config/niri/media-control" "volume_mute"; }
    XF86AudioMicMute       allow-when-locked=true { spawn "~/.config/niri/media-control" "mic_mute"; }
    XF86MonBrightnessUp    allow-when-locked=true { spawn "~/.config/niri/media-control" "brightness_up"; }
    XF86MonBrightnessDown  allow-when-locked=true { spawn "~/.config/niri/media-control" "brightness_down"; }

    Mod+Q { close-window; }

    Mod+Left  { focus-column-left; }
    Mod+Down  { focus-window-down; }
    Mod+Up    { focus-window-up; }
    Mod+Right { focus-column-right; }
    Mod+H     { focus-column-left; }
    Mod+J     { focus-window-down; }
    Mod+K     { focus-window-up; }
    Mod+L     { focus-column-right; }

    Mod+Shift+Left  { move-column-left; }
    Mod+Shift+Down  { move-window-down; }
    Mod+Shift+Up    { move-window-up; }
    Mod+Shift+Right { move-column-right; }
    Mod+Shift+H     { move-column-left; }
    Mod+Shift+J     { move-window-down; }
    Mod+Shift+K     { move-window-up; }
    Mod+Shift+L     { move-column-right; }

    Mod+Home { focus-column-first; }
    Mod+End  { focus-column-last; }
    Mod+Shift+Home { move-column-to-first; }
    Mod+Shift+End  { move-column-to-last; }

    Mod+Ctrl+Left  { focus-monitor-left; }
    Mod+Ctrl+Down { focus-monitor-down; }
    Mod+Ctrl+Up    { focus-monitor-up; }
    Mod+Ctrl+Right { focus-monitor-right; }
    Mod+Ctrl+H     { focus-monitor-left; }
    Mod+Ctrl+J     { focus-monitor-down; }
    Mod+Ctrl+K     { focus-monitor-up; }
    Mod+Ctrl+L     { focus-monitor-right; }

    Mod+Alt+Ctrl+Left  { move-column-to-monitor-left; }
    Mod+Alt+Ctrl+Down  { move-column-to-monitor-down; }
    Mod+Alt+Ctrl+Up    { move-column-to-monitor-up; }
    Mod+Alt+Ctrl+Right { move-column-to-monitor-right; }
    Mod+Alt+Ctrl+H     { move-column-to-monitor-left; }
    Mod+Alt+Ctrl+J     { move-column-to-monitor-down; }
    Mod+Alt+Ctrl+K     { move-column-to-monitor-up; }
    Mod+Alt+Ctrl+L     { move-column-to-monitor-right; }

    Mod+Page_Down      { focus-workspace-down; }
    Mod+Page_Up        { focus-workspace-up; }
    Mod+N              { focus-workspace-down; }
    Mod+P              { focus-workspace-up; }
    Mod+Ctrl+Page_Down { move-column-to-workspace-down; }
    Mod+Ctrl+Page_Up   { move-column-to-workspace-up; }
    Mod+Ctrl+U         { move-column-to-workspace-down; }
    Mod+Ctrl+I         { move-column-to-workspace-up; }

    Mod+Shift+Page_Down { move-workspace-down; }
    Mod+Shift+Page_Up   { move-workspace-up; }
    Mod+Shift+U         { move-workspace-down; }
    Mod+Shift+I         { move-workspace-up; }

    Mod+WheelScrollDown      cooldown-ms=150 { focus-workspace-down; }
    Mod+WheelScrollUp        cooldown-ms=150 { focus-workspace-up; }
    Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; }
    Mod+Ctrl+WheelScrollUp   cooldown-ms=150 { move-column-to-workspace-up; }

    Mod+WheelScrollRight      { focus-column-right; }
    Mod+WheelScrollLeft       { focus-column-left; }
    Mod+Ctrl+WheelScrollRight { move-column-right; }
    Mod+Ctrl+WheelScrollLeft  { move-column-left; }

    Mod+Shift+WheelScrollDown      { focus-column-right; }
    Mod+Shift+WheelScrollUp        { focus-column-left; }
    Mod+Ctrl+Shift+WheelScrollDown { move-column-right; }
    Mod+Ctrl+Shift+WheelScrollUp   { move-column-left; }

    Mod+1 { focus-workspace 1; }
    Mod+2 { focus-workspace 2; }
    Mod+3 { focus-workspace 3; }
    Mod+4 { focus-workspace 4; }
    Mod+5 { focus-workspace 5; }
    Mod+6 { focus-workspace 6; }
    Mod+7 { focus-workspace 7; }
    Mod+8 { focus-workspace 8; }
    Mod+9 { focus-workspace 9; }
    Mod+Shift+1 { move-column-to-workspace 1; }
    Mod+Shift+2 { move-column-to-workspace 2; }
    Mod+Shift+3 { move-column-to-workspace 3; }
    Mod+Shift+4 { move-column-to-workspace 4; }
    Mod+Shift+5 { move-column-to-workspace 5; }
    Mod+Shift+6 { move-column-to-workspace 6; }
    Mod+Shift+7 { move-column-to-workspace 7; }
    Mod+Shift+8 { move-column-to-workspace 8; }
    Mod+Shift+9 { move-column-to-workspace 9; }

    Mod+Shift+Space  { consume-window-into-column; }
    Mod+Space { expel-window-from-column; }
    Mod+M { toggle-column-tabbed-display; }
    Mod+BracketLeft  { consume-or-expel-window-left; }
    Mod+BracketRight { consume-or-expel-window-right; }

    Mod+R { switch-preset-column-width; }
    Mod+Shift+R { switch-preset-window-height; }
    Mod+Ctrl+R { reset-window-height; }
    Mod+F { maximize-column; }
    Mod+Shift+F { fullscreen-window; }
    Mod+C { center-column; }

    Mod+Minus { set-column-width "-10%"; }
    Mod+Equal { set-column-width "+10%"; }

    Mod+Shift+Minus { set-window-height "-10%"; }
    Mod+Shift+Equal { set-window-height "+10%"; }

    Print { screenshot; }
    Ctrl+Print { screenshot-screen; }
    Alt+Print { screenshot-window; }
    Mod+Ctrl+Print { spawn "~/.config/niri/swayrec"; }
    Mod+Alt+Print { spawn "~/.config/niri/swaymirror"; }

    Mod+Shift+N { spawn "~/.config/rofi/network/rofi-network-manager.sh"; }
    Mod+Shift+B { spawn "blueberry"; }

    Mod+Escape { spawn "~/.config/rofi/shutdown/shutdown"; }

    Mod+U { spawn "swaync-client" "-C"; }
    Mod+I { spawn "swaync-client" "-t"; }


    Mod+Shift+S { spawn "kitty" "pulsemixer"; }
    Mod+Shift+V { spawn "bash" "-c" "/usr/bin/cliphist list | rofi -dmenu -mesg | /usr/bin/cliphist decode | wl-copy"; }

    Mod+Shift+P { power-off-monitors; }
}

Overview

overview {
    backdrop-color "#0a0a0a"
    zoom 0.33
}

Helper scripts

volume_step=5
mic_volume_step=5
brightness_step=5
max_volume=100
mic_max_volume=100
notification_timeout=-1
download_album_art=true
show_album_art=true
show_music_in_volume_indicator=true

function get_volume {
    pactl get-sink-volume @DEFAULT_SINK@ | grep -Po '[0-9]{1,3}(?=%)' | head -1
}

function get_mute {
    pactl get-sink-mute @DEFAULT_SINK@ | grep -Po '(?<=Mute: )(yes|no)'
}

function get_mic_volume {
    pactl get-source-volume @DEFAULT_SOURCE@ | grep -Po '[0-9]{1,3}(?=%)' | head -1
}

function get_mic_mute {
    pactl get-source-mute @DEFAULT_SOURCE@ | grep -Po '(?<=Mute: )(yes|no)'
}

function get_brightness {
    declare -i absb
    declare -i relb
    absb=$(brightnessctl g)
    maxb=$(brightnessctl m)
    absb=$((absb * 100))
    echo $((absb / maxb))
}

function get_volume_icon {
    volume=$(get_volume)
    mute=$(get_mute)
    if [ "$volume" -eq 0 ] || [ "$mute" == "yes" ]; then
        volume_icon="🔇"
    elif [ "$volume" -lt 50 ]; then
        volume_icon=" "
    else
        volume_icon=" "
    fi
}

function get_mic_icon {
    mute=$(get_mic_mute)
    if [ "$mute" == "yes" ]; then
        mic_icon=" "
    else
        mic_icon=""
    fi
}

function get_brightness_icon {
    brightness_icon=""
}

function get_album_art {
    url=$(playerctl -f "{{mpris:artUrl}}" metadata)
    if [[ $url == "file://"* ]]; then
        album_art="${url/file:\/\//}"
    elif [[ $url == "http://"* ]] && [[ $download_album_art == "true" ]]; then
        # Identify filename from URL
        filename="$(echo $url | sed "s/.*\///")"

        # Download file to /tmp if it doesn't exist
        if [ ! -f "/tmp/$filename" ]; then
            wget -O "/tmp/$filename" "$url"
        fi

        album_art="/tmp/$filename"
    elif [[ $url == "https://"* ]] && [[ $download_album_art == "true" ]]; then
        # Identify filename from URL
        filename="$(echo $url | sed "s/.*\///")"

        # Download file to /tmp if it doesn't exist
        if [ ! -f "/tmp/$filename" ]; then
            wget -O "/tmp/$filename" "$url"
        fi

        album_art="/tmp/$filename"
    else
        album_art=""
    fi
}

function show_volume_notif {
    volume=$(get_mute)
    get_volume_icon

    if [[ $show_music_in_volume_indicator == "true" ]]; then
        current_song=$(playerctl -f "{{title}} - {{artist}}" metadata)

        if [[ $show_album_art == "true" ]]; then
            get_album_art
        fi
        notify-send -e -t $notification_timeout -h string:x-canonical-private-synchronous:test -h int:value:$volume -i "$album_art" "$volume_icon $volume%" "$current_song"
    else
        notify-send -e -t $notification_timeout -h string:x-canonical-private-synchronous:test -h int:value:$volume "$volume_icon $volume%"
    fi
}

function show_music_notif {
    song_title=$(playerctl -f "{{title}}" metadata)
    song_artist=$(playerctl -f "{{artist}}" metadata)
    song_album=$(playerctl -f "{{album}}" metadata)

    if [[ $show_album_art == "true" ]]; then
        get_album_art
    fi
    notify-send -e -t $notification_timeout -h string:x-canonical-private-synchronous:test -i "$album_art" "$song_title" "$song_artist - $song_album"
}

function show_mic_notif {
    volume=$(get_mic_volume)
    get_mic_icon

    notify-send -e -t $notification_timeout -h string:x-canonical-private-synchronous:test -h int:value:$volume "$mic_icon $volume%"
}

function show_brightness_notif {
    brightness=$(get_brightness)
    get_brightness_icon
    notify-send -e -t $notification_timeout -h string:x-canonical-private-synchronous:test -h int:value:$brightness "$brightness_icon $brightness%"
}

case $1 in
    volume_up)
        pactl set-sink-mute @DEFAULT_SINK@ 0
        volume=$(get_volume)
        if [ $(("$volume" + "$volume_step")) -gt $max_volume ]; then
            pactl set-sink-volume @DEFAULT_SINK@ $max_volume%
        else
            pactl set-sink-volume @DEFAULT_SINK@ +$volume_step%
        fi
        show_volume_notif
        ;;

    volume_down)
        # Lowers volume and displays the notification
        pactl set-sink-volume @DEFAULT_SINK@ -$volume_step%
        show_volume_notif
        ;;

    volume_mute)
        # Toggles mute and displays the notification
        pactl set-sink-mute @DEFAULT_SINK@ toggle
        show_volume_notif
        ;;

    # Brightness =========================================================
    brightness_up)
        # Increases brightness and displays the notification
        brightnessctl s +$brightness_step%
        show_brightness_notif
        ;;

    brightness_down)
        # Decreases brightness and displays the notification
        brightnessctl s $brightness_step%-
        show_brightness_notif
        ;;

    # Media keys =========================================================
    next)
        # Skips to the next song and displays the notification
        playerctl next
        sleep 0.5 && show_music_notif
        ;;

    prev)
        # Skips to the previous song and displays the notification
        playerctl previous
        sleep 0.5 && show_music_notif
        ;;

    play_pause)
        # Pauses/resumes playback and displays the notification
        playerctl play-pause
        show_music_notif
        ;;

    # Microphone =========================================================
    mic_up)
        # Unmutes and increases volume, then displays the notification
        pactl set-source-mute @DEFAULT_SOURCE@ 0

        mic_volume=$(get_mic_volume)
        if [ $(("$mic_volume" + "$mic_volume_step")) -gt $mic_max_volume ]; then
            pactl set-source-volume @DEFAULT_SOURCE@ $mic_max_volume%
        else
            pactl set-source-volume @DEFAULT_SOURCE@ +$mic_volume_step%
        fi
        show_mic_notif
        ;;

    mic_down)
        # Lowers volume and displays the notification
        pactl set-source-volume @DEFAULT_SOURCE@ -$mic_volume_step%
        show_mic_notif
        ;;

    mic_mute)
        pactl set-source-mute @DEFAULT_SOURCE@ toggle
        show_mic_notif
        ;;
esac
pipectl -o -n mirror | wl-mirror -S eDP-1 &

psid=$!
while ps -C wl-mirror; do
    cmd=$(notify-send --app-name="mirror" --action="freeze=Freeze Screen" --action="default=Stop Sharing" --action="unfreeze=Unfreeze Screen" "Options")
    case "$cmd" in
        "unfreeze")
            echo --unfreeze | pipectl -i -n mirror
            ;;
        "freeze")
            echo --freeze | pipectl -i -n mirror
            ;;
        "default")
            kill -s TERM $psid
            ;;
    esac
done
TIMESTAMP=$(date +%+4Y_%m_%d_%H_%M_%S_%N)
SCREENCAST_PATH="/home/innocentzero/Videos/recording_$TIMESTAMP.mp4"

geometry="$(slurp -b '#AFAFAFAF' -c '#3F3F3FAF' -s '#00000000' -w 3 -d)"
wf-recorder -g "$geometry" --audio=Combined.monitor -c h264_vaapi -d /dev/dri/renderD128 --file="$SCREENCAST_PATH" &

sleep 1

psid=$(ps -C wf-recorder | tail -n1 | awk '{print $1;}')
notify-send --app-name="wfrec" --action="default=Finish recording" "Finish recording"
kill -s TERM "$psid"

Nushell

env

Prompt

$env.PROMPT_COMMAND = {|| }
$env.PROMPT_COMMAND_RIGHT = {|| }

$env.PROMPT_INDICATOR = {|| "> " }
$env.PROMPT_INDICATOR_VI_INSERT = {|| ": " }
$env.PROMPT_INDICATOR_VI_NORMAL = {|| "> " }
$env.PROMPT_MULTILINE_INDICATOR = {|| "::: " }

Env variables are converted from and to strings in nushell

$env.ENV_CONVERSIONS = {
    "PATH": {
        from_string: { |s| $s | split row (char esep) | path expand --no-symlink }
        to_string: { |v| $v | path expand --no-symlink | str join (char esep) }
    }
    "Path": {
        from_string: { |s| $s | split row (char esep) | path expand --no-symlink }
        to_string: { |v| $v | path expand --no-symlink | str join (char esep) }
    }
}

Library and plugin paths

$env.NU_LIB_DIRS = [
    ($nu.default-config-dir | path join 'scripts')
    ($nu.data-dir | path join 'completions')
]

$env.NU_PLUGIN_DIRS = [
    ($nu.default-config-dir | path join 'plugins') 
]

tty support for GPG key signing

$env.GPG_TTY = (tty)

theme

let tokyonight = {
    separator: "#a9b1d6"
    leading_trailing_space_bg: { attr: "n" }
    header: { fg: "#9ece6a" attr: "b" }
    empty: "#7aa2f7"
    bool: {|| if $in { "#7dcfff" } else { "light_gray" } }
    int: "#a9b1d6"
    filesize: {|e|
        if $e == 0b {
            "#a9b1d6"
        } else if $e < 1mb {
            "#7dcfff"
        } else {{ fg: "#7aa2f7" }}
    }
    duration: "#a9b1d6"
    date: {|| (date now) - $in |
        if $in < 1hr {
            { fg: "#f7768e" attr: "b" }
        } else if $in < 6hr {
            "#f7768e"
        } else if $in < 1day {
            "#e0af68"
        } else if $in < 3day {
            "#9ece6a"
        } else if $in < 1wk {
            { fg: "#9ece6a" attr: "b" }
        } else if $in < 6wk {
            "#7dcfff"
        } else if $in < 52wk {
            "#7aa2f7"
        } else { "dark_gray" }
    }
    range: "#a9b1d6"
    float: "#a9b1d6"
    string: "#a9b1d6"
    nothing: "#a9b1d6"
    binary: "#a9b1d6"
    cellpath: "#a9b1d6"
    row_index: { fg: "#9ece6a" attr: "b" }
    record: "#a9b1d6"
    list: "#a9b1d6"
    block: "#a9b1d6"
    hints: "dark_gray"
    search_result: { fg: "#f7768e" bg: "#a9b1d6" }

    shape_and: { fg: "#bb9af7" attr: "b" }
    shape_binary: { fg: "#bb9af7" attr: "b" }
    shape_block: { fg: "#7aa2f7" attr: "b" }
    shape_bool: "#7dcfff"
    shape_custom: "#9ece6a"
    shape_datetime: { fg: "#7dcfff" attr: "b" }
    shape_directory: "#7dcfff"
    shape_external: "#7dcfff"
    shape_externalarg: { fg: "#9ece6a" attr: "b" }
    shape_filepath: "#7dcfff"
    shape_flag: { fg: "#7aa2f7" attr: "b" }
    shape_float: { fg: "#bb9af7" attr: "b" }
    shape_garbage: { fg: "#FFFFFF" bg: "#FF0000" attr: "b" }
    shape_globpattern: { fg: "#7dcfff" attr: "b" }
    shape_int: { fg: "#bb9af7" attr: "b" }
    shape_internalcall: { fg: "#7dcfff" attr: "b" }
    shape_list: { fg: "#7dcfff" attr: "b" }
    shape_literal: "#7aa2f7"
    shape_match_pattern: "#9ece6a"
    shape_matching_brackets: { attr: "u" }
    shape_nothing: "#7dcfff"
    shape_operator: "#e0af68"
    shape_or: { fg: "#bb9af7" attr: "b" }
    shape_pipe: { fg: "#bb9af7" attr: "b" }
    shape_range: { fg: "#e0af68" attr: "b" }
    shape_record: { fg: "#7dcfff" attr: "b" }
    shape_redirection: { fg: "#bb9af7" attr: "b" }
    shape_signature: { fg: "#9ece6a" attr: "b" }
    shape_string: "#9ece6a"
    shape_string_interpolation: { fg: "#7dcfff" attr: "b" }
    shape_table: { fg: "#7aa2f7" attr: "b" }
    shape_variable: "#bb9af7"

    background: "#1a1b26"
    foreground: "#c0caf5"
    cursor: "#c0caf5"
}

config

Meta stuff

$env.config.show_banner = false
$env.config.error_style = "fancy"
$env.config.filesize.unit = "metric"
$env.config.color_config = $tokyonight 
$env.config.footer_mode = 25 
$env.config.float_precision = 2
$env.config.buffer_editor = "" 
$env.config.use_ansi_coloring = true
$env.config.bracketed_paste = true
$env.config.edit_mode = "vi"
$env.config.use_kitty_protocol = true
$env.config.highlight_resolved_externals = false 
$env.config.recursion_limit = 50

ls and rm

$env.config.ls = {use_ls_colors: true, clickable_links: false}
$env.config.rm = {always_trash: true}

table definitions

$env.config.table = {
  mode: rounded
  index_mode: always
  show_empty: true
  padding: {left: 1, right: 1}
  trim: {
    methodology: truncating
    truncating_suffix: "..."
  }
  header_on_separator: false
}

History

$env.config.history = {
    max_size: 100_000
    sync_on_enter: false
    file_format: "sqlite"
    isolation: true 
}

Cursor shape

$env.config.cursor_shape = {
  vi_insert: line
  vi_normal: block
}

Shell protocols

$env.config.shell_integration = {
    osc2: true
    osc7: true
    osc8: true
    osc9_9: false
    osc133: true
    osc633: true
    reset_application_mode: true
}

garbage collection

$env.config.plugin_gc = {
    default: {
        enabled: true
        stop_after: 10sec
    }
}

completions

$env.config.completions = {
    case_sensitive: false 
    quick: true
    partial: true
    algorithm: "prefix"
    external: {
        enable: true
        max_results: 100
        completer: null
    }
    use_ls_colors: true
}
let fish_completer = {|spans|
    fish --command $"complete '--do-complete=($spans | str join ' ')'"
    | from tsv --flexible --noheaders --no-infer
    | rename value description
    | update value {
        if ($in | path exists) {$'"($in | str replace "\"" "\\\"" )"'} else {$in}
    }
}

let external_completer = {|spans|
    let expanded_alias = scope aliases
    | where name == $spans.0
    | get -i 0.expansion

    let spans = if $expanded_alias != null {
        $spans
        | skip 1
        | prepend ($expanded_alias | split row ' ' | take 1)
    } else {
        $spans
    }

    do $fish_completer $spans
}
$env.config.completions.external.completer = $external_completer

Hooks

⠀⠀⠀⠀⠀⠀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠹⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠘⢷⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠻⣆⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣠⣤⣴⣶⣦⡀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣽⣿⣶⣶⣶⣶⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣇⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⣠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀
⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀
⠀⠀⠀⢀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡏⠀⠀
⠀⠀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠀⠀⠀
⠀⠀⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡏⢿⣿⣿⣿⣿⣿⠟⠀⠀⠀⠀
⠀⠀⠀⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠙⠻⠿⠋⠁⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠈⠛⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠙⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
$env.config.hooks = {
    # pre_prompt: [{ cat ~/.config/nushell/ginkgo.txt }]
    display_output: "if (term size).columns >= 100 { table -e } else { table }"
}

Keybinds

$env.config.keybindings = [
    {
        name: completion_menu
        modifier: none
        keycode: tab
        mode: [emacs vi_normal vi_insert]
        event: {
            until: [
                { send: menu name: completion_menu }
                { send: menunext }
                { edit: complete }
            ]
        }
    }
    {
        name: ide_completion_menu
        modifier: control
        keycode: char_n
        mode: [emacs vi_normal vi_insert]
        event: {
            until: [
                { send: menu name: ide_completion_menu }
                { send: menunext }
                { edit: complete }
            ]
        }
    }
    {
        name: history_menu
        modifier: control
        keycode: char_r
        mode: [emacs, vi_insert, vi_normal]
        event: { send: menu name: history_menu }
    }
    {
        name: help_menu
        modifier: none
        keycode: f1
        mode: [emacs, vi_insert, vi_normal]
        event: { send: menu name: help_menu }
    }
    {
        name: completion_previous_menu
        modifier: shift
        keycode: backtab
        mode: [emacs, vi_normal, vi_insert]
        event: { send: menuprevious }
    }
    {
        name: next_page_menu
        modifier: control
        keycode: char_x
        mode: emacs
        event: { send: menupagenext }
    }
    {
        name: undo_or_previous_page_menu
        modifier: control
        keycode: char_z
        mode: emacs
        event: {
            until: [
                { send: menupageprevious }
                { edit: undo }
            ]
        }
    }
    {
        name: escape
        modifier: none
        keycode: escape
        mode: [emacs, vi_normal, vi_insert]
        event: { send: esc }    # NOTE: does not appear to work
    }
    {
        name: cancel_command
        modifier: control
        keycode: char_c
        mode: [emacs, vi_normal, vi_insert]
        event: { send: ctrlc }
    }
    {
        name: quit_shell
        modifier: control
        keycode: char_d
        mode: [emacs, vi_normal, vi_insert]
        event: { send: ctrld }
    }
    {
        name: clear_screen
        modifier: control
        keycode: char_l
        mode: [emacs, vi_normal, vi_insert]
        event: [
        { 
            send: clearscreen 
        }
        ]
    }
    {
        name: search_history
        modifier: control
        keycode: char_q
        mode: [emacs, vi_normal, vi_insert]
        event: { send: searchhistory }
    }
    {
        name: open_command_editor
        modifier: control
        keycode: char_o
        mode: [emacs, vi_normal, vi_insert]
        event: { send: openeditor }
    }
    {
        name: move_up
        modifier: none
        keycode: up
        mode: [emacs, vi_normal, vi_insert]
        event: {
            until: [
                { send: menuup }
                { send: up }
            ]
        }
    }
    {
        name: move_down
        modifier: none
        keycode: down
        mode: [emacs, vi_normal, vi_insert]
        event: {
            until: [
                { send: menudown }
                { send: down }
            ]
        }
    }
    {
        name: move_left
        modifier: none
        keycode: left
        mode: [emacs, vi_normal, vi_insert]
        event: {
            until: [
                { send: menuleft }
                { send: left }
            ]
        }
    }
    {
        name: move_right_or_take_history_hint
        modifier: none
        keycode: right
        mode: [emacs, vi_normal, vi_insert]
        event: {
            until: [
                { send: historyhintcomplete }
                { send: menuright }
                { send: right }
            ]
        }
    }
    {
        name: move_one_word_left
        modifier: control
        keycode: left
        mode: [emacs, vi_normal, vi_insert]
        event: { edit: movewordleft }
    }
    {
        name: move_one_word_right_or_take_history_hint
        modifier: control
        keycode: right
        mode: [emacs, vi_normal, vi_insert]
        event: {
            until: [
                { send: historyhintwordcomplete }
                { edit: movewordright }
            ]
        }
    }
    {
        name: move_to_line_start
        modifier: none
        keycode: home
        mode: [emacs, vi_normal, vi_insert]
        event: { edit: movetolinestart }
    }
    {
        name: move_to_line_start
        modifier: control
        keycode: char_a
        mode: [emacs, vi_normal, vi_insert]
        event: { edit: movetolinestart }
    }
    {
        name: move_to_line_end_or_take_history_hint
        modifier: none
        keycode: end
        mode: [emacs, vi_normal, vi_insert]
        event: {
            until: [
                { send: historyhintcomplete }
                { edit: movetolineend }
            ]
        }
    }
    {
        name: move_to_line_end_or_take_history_hint
        modifier: control
        keycode: char_e
        mode: [emacs, vi_normal, vi_insert]
        event: {
            until: [
                { send: historyhintcomplete }
                { edit: movetolineend }
            ]
        }
    }
    {
        name: move_to_line_start
        modifier: control
        keycode: home
        mode: [emacs, vi_normal, vi_insert]
        event: { edit: movetolinestart }
    }
    {
        name: move_to_line_end
        modifier: control
        keycode: end
        mode: [emacs, vi_normal, vi_insert]
        event: { edit: movetolineend }
    }
    {
        name: move_up
        modifier: control
        keycode: char_p
        mode: [emacs, vi_normal, vi_insert]
        event: {
            until: [
                { send: menuup }
                { send: up }
            ]
        }
    }
    {
        name: move_down
        modifier: control
        keycode: char_t
        mode: [emacs, vi_normal, vi_insert]
        event: {
            until: [
                { send: menudown }
                { send: down }
            ]
        }
    }
    {
        name: delete_one_character_backward
        modifier: none
        keycode: backspace
        mode: [emacs, vi_insert]
        event: { edit: backspace }
    }
    {
        name: delete_one_word_backward
        modifier: control
        keycode: backspace
        mode: [emacs, vi_insert]
        event: { edit: backspaceword }
    }
    {
        name: delete_one_character_forward
        modifier: none
        keycode: delete
        mode: [emacs, vi_insert]
        event: { edit: delete }
    }
    {
        name: delete_one_character_forward
        modifier: control
        keycode: delete
        mode: [emacs, vi_insert]
        event: { edit: delete }
    }
    {
        name: delete_one_character_backward
        modifier: control
        keycode: char_h
        mode: [emacs, vi_insert]
        event: { edit: backspace }
    }
    {
        name: delete_one_word_backward
        modifier: control
        keycode: char_w
        mode: [emacs, vi_insert]
        event: { edit: backspaceword }
    }
    {
        name: move_left
        modifier: none
        keycode: backspace
        mode: vi_normal
        event: { edit: moveleft }
    }
    {
        name: newline_or_run_command
        modifier: none
        keycode: enter
        mode: emacs
        event: { send: enter }
    }
    {
        name: move_left
        modifier: control
        keycode: char_b
        mode: emacs
        event: {
            until: [
                { send: menuleft }
                { send: left }
            ]
        }
    }
    {
        name: move_right_or_take_history_hint
        modifier: control
        keycode: char_f
        mode: emacs
        event: {
            until: [
                { send: historyhintcomplete }
                { send: menuright }
                { send: right }
            ]
        }
    }
    {
        name: redo_change
        modifier: control
        keycode: char_g
        mode: emacs
        event: { edit: redo }
    }
    {
        name: undo_change
        modifier: control
        keycode: char_z
        mode: emacs
        event: { edit: undo }
    }
    {
        name: paste_before
        modifier: control
        keycode: char_y
        mode: emacs
        event: { edit: pastecutbufferbefore }
    }
    {
        name: cut_word_left
        modifier: control
        keycode: char_w
        mode: emacs
        event: { edit: cutwordleft }
    }
    {
        name: cut_line_to_end
        modifier: control
        keycode: char_k
        mode: emacs
        event: { edit: cuttoend }
    }
    {
        name: cut_line_from_start
        modifier: control
        keycode: char_u
        mode: emacs
        event: { edit: cutfromstart }
    }
    {
        name: swap_graphemes
        modifier: control
        keycode: char_t
        mode: emacs
        event: { edit: swapgraphemes }
    }
    {
        name: move_one_word_left
        modifier: alt
        keycode: left
        mode: emacs
        event: { edit: movewordleft }
    }
    {
        name: move_one_word_right_or_take_history_hint
        modifier: alt
        keycode: right
        mode: emacs
        event: {
            until: [
                { send: historyhintwordcomplete }
                { edit: movewordright }
            ]
        }
    }
    {
        name: move_one_word_left
        modifier: alt
        keycode: char_b
        mode: emacs
        event: { edit: movewordleft }
    }
    {
        name: move_one_word_right_or_take_history_hint
        modifier: alt
        keycode: char_f
        mode: emacs
        event: {
            until: [
                { send: historyhintwordcomplete }
                { edit: movewordright }
            ]
        }
    }
    {
        name: delete_one_word_forward
        modifier: alt
        keycode: delete
        mode: emacs
        event: { edit: deleteword }
    }
    {
        name: delete_one_word_backward
        modifier: alt
        keycode: backspace
        mode: emacs
        event: { edit: backspaceword }
    }
    {
        name: delete_one_word_backward
        modifier: alt
        keycode: char_m
        mode: emacs
        event: { edit: backspaceword }
    }
    {
        name: cut_word_to_right
        modifier: alt
        keycode: char_d
        mode: emacs
        event: { edit: cutwordright }
    }
    {
        name: upper_case_word
        modifier: alt
        keycode: char_u
        mode: emacs
        event: { edit: uppercaseword }
    }
    {
        name: lower_case_word
        modifier: alt
        keycode: char_l
        mode: emacs
        event: { edit: lowercaseword }
    }
    {
        name: capitalize_char
        modifier: alt
        keycode: char_c
        mode: emacs
        event: { edit: capitalizechar }
    }
    # The following bindings with `*system` events require that Nushell has
    # been compiled with the `system-clipboard` feature.
    # This should be the case for Windows, macOS, and most Linux distributions
    # Not available for example on Android (termux)
    # If you want to use the system clipboard for visual selection or to
    # paste directly, uncomment the respective lines and replace the version
    # using the internal clipboard.
    {
        name: copy_selection
        modifier: control_shift
        keycode: char_c
        mode: emacs
        event: { edit: copyselection }
        # event: { edit: copyselectionsystem }
    }
    {
        name: cut_selection
        modifier: control_shift
        keycode: char_x
        mode: emacs
        event: { edit: cutselection }
    }
    {
        name: select_all
        modifier: control_shift
        keycode: char_a
        mode: emacs
        event: { edit: selectall }
    }
]

Menus

$env.config.menus = [
      {
          name: completion_menu
          only_buffer_difference: false
          marker: "| "
          type: {
              layout: columnar
              columns: 4
              col_width: 20 
              col_padding: 2
          }
          style: {
              text: cyan
              selected_text: { attr: b }
              description_text:  violet
              match_text: { attr: u }
              selected_match_text: { attr: ub }
          }
      }
      {
          name: ide_completion_menu
          only_buffer_difference: false
          marker: "| "
          type: {
              layout: ide
              min_completion_width: 0,
              max_completion_width: 50,
              max_completion_height: 10,
              padding: 0,
              border: true,
              cursor_offset: 0,
              description_mode: "prefer_right"
              min_description_width: 0
              max_description_width: 50
              max_description_height: 10
              description_offset: 1
              correct_cursor_pos: false
          }
          style: {
              text: cyan
              selected_text: { attr: b }
              description_text:  violet
              match_text: { attr: u }
              selected_match_text: { attr: ub }
          }
      }
      {
          name: history_menu
          only_buffer_difference: true
          marker: "? "
          type: {
              layout: list
              page_size: 10
          }
          style: {
              text: cyan
              selected_text: { attr: b }
              description_text:  violet
          }
      }
      {
          name: help_menu
          only_buffer_difference: true
          marker: "? "
          type: {
              layout: description
              columns: 4
              col_width: 20
              col_padding: 2
              selection_rows: 4
              description_rows: 10
          }
          style: {
              text: cyan
              selected_text: { attr: b }
              description_text:  violet
          }
      }
  ]

meta stuff

def gl [] { 
  git log --pretty=%h»¦«%s»¦«%aN»¦«%aE»¦«%aD -n 5 | lines
  | split column "»¦«" commit subject name email date
  | upsert date {|d| $d.date | into datetime}
}

External scripts

get all of the below in config

source zoxide.nu
source typst-completions.nu
source cargo-completions.nu
source hx.nu

cat ~/.config/nushell/ginkgo.txt 

zoxide

Add cd hooks

export-env {
  $env.config = (
    $env.config?
    | default {}
    | upsert hooks { default {} }
    | upsert hooks.env_change { default {} }
    | upsert hooks.env_change.PWD { default [] }
  )
  let __zoxide_hooked = (
    $env.config.hooks.env_change.PWD | any { try { get __zoxide_hook } catch { false } }
  )
  if not $__zoxide_hooked {
    $env.config.hooks.env_change.PWD = ($env.config.hooks.env_change.PWD | append {
      __zoxide_hook: true,
      code: {|_, dir| zoxide add -- $dir}
    })
  }
}

Define direct jumping

def --env --wrapped __zoxide_z [...rest: string] {
  let path = match $rest {
    [] => {'~'},
    [ '-' ] => {'-'},
    [ $arg ] if ($arg | path expand | path type) == 'dir' => {$arg}
    _ => {
      zoxide query --exclude $env.PWD -- ...$rest | str trim -r -c "\n"
    }
  }
  cd $path
}

Completer and functions

def "nu-complete zoxide path" [context: string] {
  let parts = $context | split row " " | skip 1
  {
    options: {
      sort: false
      completion_algorithm: prefix
      positional: false
      case_sensitive: false
    }
    completions: (zoxide query --list --exclude $env.PWD -- ...$parts | lines)
  }
}

def --env --wrapped z [...rest: string@"nu-complete zoxide path"] {
  __zoxide_z ...$rest
}

Typst

Verbosity and commands

def verbosity [] {
  [
    {value:0, description:"none"}
    {value:1, description:"warning & error"}
    {value:2, description:"info"} 
    {value:3, description:"debug"}
    {value:4, description:"trace"}
  ]
}

def commands [] {
  [
    "compile"
    "watch"
    "fonts"
    "help"
  ]
}

main command completions

export extern "typst" [
  command?: string@commands
  --font-path: path                   
  --root: path                        
  --verbosity(-v): number@"verbosity" 
  --help(-h)                          
  --version(-V)                       
]

compile command completions

export extern "typst compile" [
  input: path                         # Path to the input file
  output?: path                       # Path to the output file
  --open                              # Opens the output file after compilation using the default PDF viewer
  --flamegraph                        # Produces a flamegraph of the compilation process and saves it to the given file or to `flamegraph.svg` in the current working directory
  --help(-h)                          # Print help
]

watch command completions

export extern "typst watch" [
  input: path
  output?: path
  --open
  --flamegraph
  --help(-h)
]

fonts command completion

export extern "typst fonts" [
  --variants
  --help(-h)
]

help completions

export extern "typst help" [
  command?: string@commands
]

Aliases

alias "typst c" = typst compile
alias "typst w" = typst watch

Cargo

def "nu-complete cargo targets" [type: string] {
  ^cargo metadata --format-version=1 --offline --no-deps | from json | get packages.targets | flatten | where ($type in $it.kind) | get name
}
def "nu-complete cargo bins" [] { nu-complete cargo targets bin }
def "nu-complete cargo examples" [] { nu-complete cargo targets example }

def "nu-complete cargo packages" [] {
  let metadata = (^cargo metadata --format-version=1 --offline --no-deps)
  if $metadata == '' {
    []
  } else {
    $metadata | from json | get workspace_members | split column ' ' | get column1
  }
}

def "nu-complete cargo color" [] {
  ['auto', 'always', 'never']
}

def "nu-complete cargo profiles" [] {
  open Cargo.toml | get profile | transpose | get column0
}

def "nu-complete cargo features" [] {
  open Cargo.toml | get features | transpose | get column0
}

def "nu-complete cargo subcommands" [] {
  ^cargo --list | lines | skip 1 | str join "\n" | from ssv --noheaders | get column1
}
def "nu-complete cargo vcs" [] {
  [
    'git',
    'hg',
    'pijul',
    'fossil',
    'none'
  ]
}

export extern "cargo build" [
  --package(-p): string@"nu-complete cargo packages"  
  --workspace         
  --exclude: string@"nu-complete cargo packages" 
  --lib               
  --bin: string@"nu-complete cargo bins" 
  --bins             
  --example: string@"nu-complete cargo examples" 
  --examples        
  --test: string    
  --tests           
  --bench: string   
  --benches         
  --all-targets     
  --features(-F): string@"nu-complete cargo features" 
  --all-features      
  --no-default-features
  --target: string    
  --release(-r)      
  --profile: string@"nu-complete cargo profiles" 
  --ignore-rust-version 
  --timings: string    
  --target-dir: path  
  --out-dir: path    
  --verbose(-v)     
  --quiet(-q)      
  --color: string@"nu-complete cargo color"  
  --message-format: string 
  --build-plan 
  --manifest-path: path  
  --frozen           
  --locked          
  --offline        
  -Z: any         
  -h, --help     
  --jobs(-j): number 
  --future-incompat-report 
]

export extern "cargo check" [
  --package(-p): string@"nu-complete cargo packages" 
  --workspace 
  --all 
  --exclude: string@"nu-complete cargo packages"
  --lib 
  --bin: string@"nu-complete cargo bins"
  --example: string@"nu-complete cargo examples"
  --examples 
  --test: string 
  --tests 
  --bench: string 
  --benches 
  --all-targets 
  --features(-F): string@"nu-complete cargo features" 
  --all-features 
  --no-default-features 
  --target: string 
  --release(-r) 
  --profile: string@"nu-complete cargo profiles" 
  --ignore-rust-version 
  --timings: string    
  --target-dir: path  
  --verbose(-v)      
  --quiet(-q)       
  --color: string@"nu-complete cargo color"  
  --message-format: string 
  --manifest-path: path  
  --frozen           
  --locked          
  --offline        
  -Z: any         
  -h, --help     
  --jobs(-j): number 
  --keep-going 
  --future-incompat-report 
]

export extern "cargo clean" [
  --package(-p): string@"nu-complete cargo packages"
  --doc                    
  --release               
  --profile              
  --target-dir: path    
  --target: string     
  --verbose(-v)       
  --quiet(-q)        
  --color: string@"nu-complete cargo color"
  --message-format: string 
  --manifest-path: path    
  --frozen                
  --locked               
  --offline             
  -Z: any              
  -h, --help          
]

export extern "cargo doc" [
  --open             
  --no-deps         
  --document-private-items  
  --package(-p): string@"nu-complete cargo packages"
  --workspace            
  --exclude: string@"nu-complete cargo packages" 
  --lib: string             
  --bin: string@"nu-complete cargo bins"
  --bins                    
  --example: string@"nu-complete cargo examples" 
  --examples                
  --features(-F): string@"nu-complete cargo features"
  --all-features           
  --no-default-features    
  --target: string         
  --release(-r)            
  --profile: string@"nu-complete cargo profiles" 
  --ignore-rust-version     
  --timings: string         
  --target-dir: path        
  --verbose(-v)             
  --quiet(-q)               
  --color: string@"nu-complete cargo color" 
  --message-format: string  
  --manifest-path: path    
  --frozen                
  --locked               
  --offline             
  -Z: any              
  -h, --help          
  --jobs(-j): number  
  --keep-going       
]

export extern "cargo new" [
  path: path         
  --bin              
  --lib              
  --edition: number  
  --name: string     
  --vcs: string@"nu-complete cargo vcs"
  --registry: string  
  --verbose(-v)       
  --quiet(-q)         
  --color: string@"nu-complete cargo color"  
  -Z: any             
  -h, --help          
]

export extern "cargo init" [
  path: path 
  --bin 
  --lib
  --edition: number 
  --name: string 
  --vcs: string@"nu-complete cargo vcs" 
  --registry: string 
  --verbose(-v)      
  --quiet(-q)        
  --color: string@"nu-complete cargo color"
  -Z: any            
  -h, --help         
]

export extern "cargo run" [
  ...args: any                              
  --bin: string@"nu-complete cargo bins"   
  --example: string@"nu-complete cargo examples" 
  --quiet(-q)                               
  --package(-p): string@"nu-complete cargo packages" 
  --jobs(-j): number                        
  --release                                
  --profile: string@"nu-complete cargo profiles"
  --features(-F): string@"nu-complete cargo features"
  --all-features                            
  --no-default-features                     
  --target: string                          
  --target-dir: path                        
  --manifest-path: path                     
  --message-format: string                  
  --unit-graph                              
  --ignore-rust-version                     
  --verbose(-v)                             
  --color: string@"nu-complete cargo color" 
  --frozen                                  
  --locked                                  
  --offline                                 
  --config: string                          
  -Z: string                                
  --help(-h)                                
]

export extern "cargo test" [
  test_arg_separator?: string
   ...args: any     
  --no-run       
  --no-fail-fast 
  --package(-p): string@"nu-complete cargo packages" 
  --workspace 
  --exclude: string@"nu-complete cargo packages" 
  --lib 
  --bin: string@"nu-complete cargo bins" 
  --bins 
  --example: string@"nu-complete cargo examples" 
  --examples 
  --test: string 
  --tests 
  --bench: string 
  --benches 
  --all-targets 
  --doc 
  --features(-F): string@"nu-complete cargo features" 
  --all-features 
  --no-default-features 
  --target: string 
  --release(-r) 
  --profile: string@"nu-complete cargo profiles" 
  --ignore-rust-version 
  --timings: string 
  --target-dir: path 
  --verbose(-v) 
  --quiet(-q) 
  --color: string@"nu-complete cargo color" 
  --message-format: string 
  --manifest-path: path 
  --frozen 
  --locked  
  --offline 
  --help(-h) 
  -Z: any 
  --jobs(-j): number 
  --keep-going 
  --future-incompat-report 
]

export extern "cargo bench" [
  bench_option_separator?: string
  ...options: any 
  --no-run 
  --no-fail-fast 
  --package(-p): string@"nu-complete cargo packages" 
  --workspace 
  --exclude: string@"nu-complete cargo packages" 
  --lib 
  --bin: string@"nu-complete cargo bins" 
  --bins 
  --example: string@"nu-complete cargo examples" 
  --examples 
  --test: string 
  --tests 
  --bench: string 
  --benches 
  --all-targets 
  --features(-F): string@"nu-complete cargo features" 
  --all-features 
  --no-default-features 
  --target: string 
  --profile: string@"nu-complete cargo profiles" 
  --ignore-rust-version 
  --timings: string 
  --target-dir: path 
  --verbose(-v) 
  --quiet(-q) 
  --color: string@"nu-complete cargo color"  
  --message-format: string 
  --build-plan 
  --manifest-path: path  
  --frozen 
  --locked 
  --offline 
  -Z: any 
  -h, --help 
  --jobs(-j): number 
  --keep-going 
]


export extern "cargo update" [
  --package(-p): string@"nu-complete cargo packages" 
  --aggressive 
  --precise: any 
  --workspace(-w) 
  --dry-run 
  --verbose(-v) 
  --quiet(-q) 
  --color: string@"nu-complete cargo color" 
  --manifest-path: path 
  --frozen 
  --locked  
  --offline 
  --help(-h) 
  -Z: any 
]

export extern "cargo search" [
  query: string 
  --limit: number 
  --index: string 
  --registry: string 
  --verbose(-v) 
  --quiet(-q) 
  --color: string@"nu-complete cargo color" 
  --help(-h) 
  -Z: any      
]

export extern "cargo publish" [
  --dry-run 
  --token: any 
  --no-verify 
  --allow-dirty 
  --index: string 
  --registry: string 
  --package(-p): string@"nu-complete cargo packages" 
  --target: string 
  --target-dir: path 
  --features(-F): string@"nu-complete cargo features" 
  --all-features 
  --no-default-features 
  --verbose(-v) 
  --quiet(-q) 
  --color: string@"nu-complete cargo color" 
  --manifest-path: path 
  --frozen 
  --locked  
  --offline 
  --help(-h) 
  -Z: any 
  --jobs(-j): number 
  --keep-going 
]


export extern "cargo install" [
  crate?: string 
  --version: string 
  --vers: string    
  --git: string 
  --branch: string 
  --tag: string 
  --rev: string 
  --path: path 
  --list 
  --force(-f) 
  --no-track 
  --bin: string@"nu-complete cargo bins" 
  --bins 
  --example: string@"nu-complete cargo examples" 
  --examples 
  --root: path 
  --registry: string 
  --index: string 
  --features(-F): string@"nu-complete cargo features" 
  --all-features 
  --no-default-features 
  --target: string 
  --target-dir: path 
  --debug 
  --profile: string@"nu-complete cargo profiles" 
  --timings: string 
  --frozen 
  --locked  
  --offline 
  --jobs(-j): number 
  --verbose(-v) 
  --quiet(-q) 
  --color: string@"nu-complete cargo color" 
  --message-format: string 
  -Z: any            
  -h, --help         
]


export extern "cargo uninstall" [
  package?: string@"nu-complete cargo packages" 
  --package(-p): string@"nu-complete cargo packages" 
  --bin: string@"nu-complete cargo bins" 
  --root: path 
  --verbose(-v) 
  --quiet(-q) 
  --color: string@"nu-complete cargo color" 
  -Z: any            
  -h, --help         
]




export extern "cargo metadata"  [
  --no-deps 
  --format-version: number 
  --filter-platform: string  
  --features(-F): string@"nu-complete cargo features" 
  --all-features 
  --no-default-features 
  --verbose(-v) 
  --quiet(-q) 
  --color: string@"nu-complete cargo color" 
  --manifest-path: path 
  --frozen 
  --locked  
  --offline 
  --help(-h) 
  -Z: any 
]


export extern "cargo help" [
  subcommand: string@"nu-complete cargo subcommands"
  --color: string@"nu-complete cargo color" 
  --config: string 
  --frozen         
  --locked         
  --offline        
  --verbose(-v)    
  -Z: any          
]


export extern "cargo clippy" [
  --no-deps      
  --fix          
  --version(-V)  
  --help(-h)     
  --warn(-W)     
  --allow(-A)    
  --deny(-D)     
  --forbid(-F)   
  --package(-p): string@"nu-complete cargo packages" 
  --workspace 
  --all 
  --exclude: string@"nu-complete cargo packages" 
  --lib 
  --bin: string@"nu-complete cargo bins" 
  --example: string@"nu-complete cargo examples" 
  --examples 
  --test: string 
  --tests 
  --bench: string 
  --benches 
  --all-targets 
  --features(-F): string@"nu-complete cargo features" 
  --all-features 
  --no-default-features 
  --target: string 
  --release(-r) 
  --profile: string@"nu-complete cargo profiles" 
  --ignore-rust-version 
  --timings: string    
  --target-dir: path  
  --verbose(-v)      
  --quiet(-q)        
  --color: string@"nu-complete cargo color"  
  --message-format: string 
  --manifest-path: path  
  --frozen           
  --locked           
  --offline          
  -Z: any            
  -h, --help         
  --jobs(-j): number 
  --keep-going 
  --future-incompat-report 
  -Z: any
]


export extern "cargo install-update" [
  --all(-a)             
  --allow-no-update(-i) 
  --downdate(-d)        
  --force(-f)           
  --git(-g)             
  --help(-h)            
  --list(-l)            
  --quiet(-q)           
  --version(-V)         
  --cargo-dir(-c)       
  --filter(-s)          
  --install-cargo(-r)   
  --temp-dir(-t)        
]


export extern "cargo add" [
  --no-default-features   
  --default-features      
  --features(-F)          
  --optional              
  --verbose(-v)           
  --no-optional          
  --color: string@"nu-complete cargo color" 
  --rename                
  --locked                
  --package(-p)           
  --offline               
  --quiet(-q)             
  --config                
  --dry-run               
  --help(-h)              
  --path                  
  --git                   
  --branch                
  --tag                 
  --rev                
  --registry          
  --dev              
  --build           
  --target         
  ...args
]

Helix

Health categories

def health_categories [] {
    let languages = ^hx --health languages | detect columns | get Language | where { $in != null }
    let completions = [ "all", "clipboard", "languages" ] | append $languages
    return $completions
}

grammar categories

def grammar_categories [] { ["fetch", "build"] }

completion

export extern helix [
    --help(-h),                                 
    --tutor,                                    
    --health: string@health_categories,         
    --grammar(-g): string@grammar_categories,   
    --config(-c): glob,                         
    -v,                                         
    --log: glob,                                
    --version(-V),                              
    --vsplit,                                   
    --hsplit,                                   
    --working-dir(-w): glob,                    
    ...files: glob,                             
]

Aliasing

export alias hx = helix

Rofi

Gen config

configuration {
        show-icons: true;
        sidebar-mode: true;
        hover-select: true;
        me-select-entry: "";
        modi: "drun,filebrowser,window";
        me-accept-entry: [MousePrimary];
    kb-mode-next: "Alt+l";
    kb-mode-previous: "Alt+h";
}
*{
        font: "ProFontWindows Nerd Font 19"; //Font
        //Colors
        foreground:#CCCCCC; //Text
        background:#0A0A0A; //Background
        accent:#EEEEEE; //Highlight
        foreground-selection:@foreground; //Selection_fg
        background-selection:#555555; //Selection_bg

        transparent: #ffffff00;
        background-color: @transparent;
        text-color: @foreground;
        selected-normal-foreground: @foreground-selection;
        normal-foreground: @foreground;
        alternate-normal-background: @transparent;
        selected-urgent-foreground: @foreground;
        urgent-foreground: @foreground;
        alternate-urgent-background: @background;
        active-foreground: @accent;
        selected-active-foreground: @background-selection;
        alternate-normal-foreground: @foreground;
        alternate-active-background: @background;
        bordercolor: @background;
        normal-background: @transparent;
        selected-normal-background: @background-selection;
        separatorcolor: @accent;
        urgent-background: @accent;
        alternate-urgent-foreground: @foreground;
        selected-urgent-background: @accent;
        alternate-active-foreground: @foreground;
        selected-active-background: @transparent;
        active-background: @transparent;
}
window {
        text-color: @foreground;
        background-color: @background;
        border-radius: 6px;
        padding: 10;
}
mainbox {
        border:	0;
        padding: 0;
}
textbox {
        text-color: @foreground;
    background-color: #0A0A0A;
}
listview {
        spacing: 4px;
        dynamic: true;
    columns: 2;
        fixed-height: false;
        border:	0;
        scrollbar: false;
        text-color: @separatorcolor;
}
element {
        border:	0;
        padding: 0;
        border-radius: 4px;
}
element-text {
        background-color: inherit;
        text-color: inherit;
}
element.normal.normal {
        text-color: @normal-foreground;
        background-color: @normal-background;
}
element.normal.urgent {
        text-color: @urgent-foreground;
        background-color: @urgent-background;
}
element.normal.active {
        text-color: @active-foreground;
        background-color: @active-background;
}
element.selected.normal {
        text-color: @selected-normal-foreground;
        background-color: @selected-normal-background;
}
element.selected.urgent {
        text-color: @selected-urgent-foreground;
        background-color: @selected-urgent-background;
}
element.selected.active {
        text-color: @selected-active-foreground;
        background-color: @selected-active-background;
}
element.alternate.normal {
        text-color: @alternate-normal-foreground;
        background-color: @alternate-normal-background;
}
element.alternate.urgent {
        text-color: @alternate-urgent-foreground;
        background-color: @alternate-urgent-background;
}
element.alternate.active {
        text-color: @alternate-active-foreground;
        background-color: @alternate-active-background;
}
mode-switcher {
        border: 0;
}
button selected {
        text-color: @selected-normal-foreground;
        background-color: @selected-normal-background;
}
button normal {
        text-color: @foreground;
}
inputbar {
        children: [textbox-prompt-colon,entry];
}
textbox-prompt-colon{
        expand: false;
        margin: 0 10px 0 0;
    border-radius: 5px;
        str: " Type ";
    background-color: #cccccc;
    text-color: #0a0a0a;
}
entry {
        placeholder: "Begin Typing";
}

Network

# Default Values
LOCATION=0
QRCODE_LOCATION=$LOCATION
Y_AXIS=0
X_AXIS=0
NOTIFICATIONS="off"
QRCODE_DIR="/tmp/"
WIDTH_FIX_MAIN=1
WIDTH_FIX_STATUS=10
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PASSWORD_ENTER="if connection is stored,hit enter/esc."
WIRELESS_INTERFACES=($(nmcli device | awk '$2=="wifi" {print $1}'))
WIRELESS_INTERFACES_PRODUCT=()
WLAN_INT=0
WIRED_INTERFACES=($(nmcli device | awk '$2=="ethernet" {print $1}'))
WIRED_INTERFACES_PRODUCT=()
ASCII_OUT=false
CHANGE_BARS=false
SIGNAL_STRENGTH_0="0"
SIGNAL_STRENGTH_1="1"
SIGNAL_STRENGTH_2="12"
SIGNAL_STRENGTH_3="123"
SIGNAL_STRENGTH_4="1234"
VPN_PATTERN='(wireguard|vpn)'
function initialization() {
    for i in "${WIRELESS_INTERFACES[@]}"; do WIRELESS_INTERFACES_PRODUCT+=("$(nmcli -f general.product device show "$i" | awk '{print $2}')"); done
    for i in "${WIRED_INTERFACES[@]}"; do WIRED_INTERFACES_PRODUCT+=("$(nmcli -f general.product device show "$i" | awk '{print $2}')"); done
    wireless_interface_state && ethernet_interface_state
}
function notification() {
    [[ "$NOTIFICATIONS" == "true" && -x "$(command -v notify-send)" ]] && notify-send -r "5" -u "normal" $1 "$2"
}
function wireless_interface_state() {

    [[ ${#WIRELESS_INTERFACES[@]} -eq "0" ]] || {
        ACTIVE_SSID=$(nmcli device status | grep "^${WIRELESS_INTERFACES[WLAN_INT]}." | awk '{print $4}')
        WIFI_CON_STATE=$(nmcli device status | grep "^${WIRELESS_INTERFACES[WLAN_INT]}." | awk '{print $3}')
        { [[ "$WIFI_CON_STATE" == "unavailable" ]] && WIFI_LIST="***Wi-Fi Disabled***" && WIFI_SWITCH="~Wi-Fi On" && OPTIONS="${WIFI_LIST}\n${WIFI_SWITCH}\n~Scan\n"; } || { [[ "$WIFI_CON_STATE" =~ "connected" ]] && {
            PROMPT=${WIRELESS_INTERFACES_PRODUCT[WLAN_INT]}[${WIRELESS_INTERFACES[WLAN_INT]}]
            WIFI_LIST=$(nmcli --fields SSID,SECURITY,BARS device wifi list ifname "${WIRELESS_INTERFACES[WLAN_INT]}")
            wifi_list
            [[ "$ACTIVE_SSID" == "--" ]] && WIFI_SWITCH="~Scan\n~Manual/Hidden\n~Wi-Fi Off" || WIFI_SWITCH="~Scan\n~Disconnect\n~Manual/Hidden\n~Wi-Fi Off"
            OPTIONS="${WIFI_LIST}\n${WIFI_SWITCH}\n"
        }; }
    }
}
function ethernet_interface_state() {
    [[ ${#WIRED_INTERFACES[@]} -eq "0" ]] || {
        WIRED_CON_STATE=$(nmcli device status | grep "ethernet" | head -1 | awk '{print $3}')
        { [[ "$WIRED_CON_STATE" == "disconnected" ]] && WIRED_SWITCH="~Eth On"; } || { [[ "$WIRED_CON_STATE" == "connected" ]] && WIRED_SWITCH="~Eth Off"; } || { [[ "$WIRED_CON_STATE" == "unavailable" ]] && WIRED_SWITCH="***Wired Unavailable***"; } || { [[ "$WIRED_CON_STATE" == "connecting" ]] && WIRED_SWITCH="***Wired Initializing***"; }
        OPTIONS="${OPTIONS}${WIRED_SWITCH}\n"
    }
}
function rofi_menu() {
    { [[ ${#WIRELESS_INTERFACES[@]} -gt "1" ]] && OPTIONS="${OPTIONS}~Change Wifi Interface\n~More Options"; } || { OPTIONS="${OPTIONS}~More Options"; }
    { [[ "$WIRED_CON_STATE" == "connected" ]] && PROMPT="${WIRED_INTERFACES_PRODUCT}[$WIRED_INTERFACES]"; } || PROMPT="${WIRELESS_INTERFACES_PRODUCT[WLAN_INT]}[${WIRELESS_INTERFACES[WLAN_INT]}]"
    SELECTION=$(echo -e "$OPTIONS" | rofi_cmd "$OPTIONS" $WIDTH_FIX_MAIN "-a 0")
    SSID=$(echo "$SELECTION" | sed "s/\s\{2,\}/\|/g" | awk -F "|" '{print $1}')
    selection_action
}
function rofi_cmd() {
    { [[ -n "${1}" ]] && WIDTH=$(echo -e "$1" | awk '{print length}' | sort -n | tail -1) && ((WIDTH += $2)) && ((WIDTH = WIDTH / 2)); } || { ((WIDTH = $2 / 2)); }
    rofi -dmenu -mesg
}
function change_wireless_interface() {
    { [[ ${#WIRELESS_INTERFACES[@]} -eq "2" ]] && { [[ $WLAN_INT -eq "0" ]] && WLAN_INT=1 || WLAN_INT=0; }; } || {
        LIST_WLAN_INT=""
        for i in "${!WIRELESS_INTERFACES[@]}"; do LIST_WLAN_INT=("${LIST_WLAN_INT[@]}${WIRELESS_INTERFACES_PRODUCT[$i]}[${WIRELESS_INTERFACES[$i]}]\n"); done
        LIST_WLAN_INT[-1]=${LIST_WLAN_INT[-1]::-2}
        CHANGE_WLAN_INT=$(echo -e "${LIST_WLAN_INT[@]}" | rofi_cmd "${LIST_WLAN_INT[@]}" $WIDTH_FIX_STATUS)
        for i in "${!WIRELESS_INTERFACES[@]}"; do [[ $CHANGE_WLAN_INT == "${WIRELESS_INTERFACES_PRODUCT[$i]}[${WIRELESS_INTERFACES[$i]}]" ]] && WLAN_INT=$i && break; done
    }
    wireless_interface_state && ethernet_interface_state
    rofi_menu
}
function scan() {
    [[ "$WIFI_CON_STATE" =~ "unavailable" ]] && change_wifi_state "Wi-Fi" "Enabling Wi-Fi connection" "on" && sleep 2
    notification "-t 0 Wifi" "Please Wait Scanning"
    WIFI_LIST=$(nmcli --fields SSID,SECURITY,BARS device wifi list ifname "${WIRELESS_INTERFACES[WLAN_INT]}" --rescan yes)
    wifi_list
    wireless_interface_state && ethernet_interface_state
    notification "-t 1 Wifi" "Please Wait Scanning"
    rofi_menu
}
function wifi_list() {
    WIFI_LIST=$(echo -e "$WIFI_LIST" | awk -F'  +' '{ if (!seen[$1]++) print}' | awk '$1!="--" {print}' | awk '$1 !~ "^'"${ACTIVE_SSID}"'"')
    [[ $ASCII_OUT == "true" ]] && WIFI_LIST=$(echo -e "$WIFI_LIST" | sed 's/\(..*\)\*\{4,4\}/\1▂▄▆█/g' | sed 's/\(..*\)\*\{3,3\}/\1▂▄▆_/g' | sed 's/\(..*\)\*\{2,2\}/\1▂▄__/g' | sed 's/\(..*\)\*\{1,1\}/\1▂___/g')
    [[ $CHANGE_BARS == "true" ]] && WIFI_LIST=$(echo -e "$WIFI_LIST" | sed 's/\(.*\)▂▄▆█/\1'$SIGNAL_STRENGTH_4'/' | sed 's/\(.*\)▂▄▆_/\1'$SIGNAL_STRENGTH_3'/' | sed 's/\(.*\)▂▄__/\1'$SIGNAL_STRENGTH_2'/' | sed 's/\(.*\)▂___/\1'$SIGNAL_STRENGTH_1'/' | sed 's/\(.*\)____/\1'$SIGNAL_STRENGTH_0'/')
}
function change_wifi_state() {
    notification "$1" "$2"
    nmcli radio wifi "$3"
}
function change_wired_state() {
    notification "$1" "$2"
    nmcli device "$3" "$4"
}
function net_restart() {
    notification "$1" "$2"
    nmcli networking off && sleep 3 && nmcli networking on
}
function disconnect() {
    ACTIVE_SSID=$(nmcli -t -f GENERAL.CONNECTION dev show "${WIRELESS_INTERFACES[WLAN_INT]}" | cut -d ':' -f2)
    notification "$1" "You're now disconnected from Wi-Fi network '$ACTIVE_SSID'"
    nmcli con down id "$ACTIVE_SSID"
}
function check_wifi_connected() {
    [[ "$(nmcli device status | grep "^${WIRELESS_INTERFACES[WLAN_INT]}." | awk '{print $3}')" == "connected" ]] && disconnect "Connection_Terminated"
}
function connect() {
    check_wifi_connected
    notification "-t 0 Wi-Fi" "Connecting to $1"
    { [[ $(nmcli dev wifi con "$1" password "$2" ifname "${WIRELESS_INTERFACES[WLAN_INT]}" | grep -c "successfully activated") -eq "1" ]] && notification "Connection_Established" "You're now connected to Wi-Fi network '$1'"; } || notification "Connection_Error" "Connection can not be established"
}
function enter_passwword() {
    PROMPT="Enter_Password" && PASS=$(echo "$PASSWORD_ENTER" | rofi_cmd "$PASSWORD_ENTER" 4 "-password")
}
function enter_ssid() {
    PROMPT="Enter_SSID" && SSID=$(rofi_cmd "" 40)
}
function stored_connection() {
    check_wifi_connected
    notification "-t 0 Wi-Fi" "Connecting to $1"
    { [[ $(nmcli dev wifi con "$1" ifname "${WIRELESS_INTERFACES[WLAN_INT]}" | grep -c "successfully activated") -eq "1" ]] && notification "Connection_Established" "You're now connected to Wi-Fi network '$1'"; } || notification "Connection_Error" "Connection can not be established"
}
function ssid_manual() {
    enter_ssid
    [[ -n $SSID ]] && {
        enter_passwword
        { [[ -n "$PASS" ]] && [[ "$PASS" != "$PASSWORD_ENTER" ]] && connect "$SSID" "$PASS"; } || stored_connection "$SSID"
    }
}
function ssid_hidden() {
    enter_ssid
    [[ -n $SSID ]] && {
        enter_passwword && check_wifi_connected
        [[ -n "$PASS" ]] && [[ "$PASS" != "$PASSWORD_ENTER" ]] && {
            nmcli con add type wifi con-name "$SSID" ssid "$SSID" ifname "${WIRELESS_INTERFACES[WLAN_INT]}"
            nmcli con modify "$SSID" wifi-sec.key-mgmt wpa-psk
            nmcli con modify "$SSID" wifi-sec.psk "$PASS"
        } || [[ $(nmcli -g NAME con show | grep -c "$SSID") -eq "0" ]] && nmcli con add type wifi con-name "$SSID" ssid "$SSID" ifname "${WIRELESS_INTERFACES[WLAN_INT]}"
        notification "-t 0 Wifi" "Connecting to $SSID"
        { [[ $(nmcli con up id "$SSID" | grep -c "successfully activated") -eq "1" ]] && notification "Connection_Established" "You're now connected to Wi-Fi network '$SSID'"; } || notification "Connection_Error" "Connection can not be established"
    }
}
function interface_status() {
    local -n INTERFACES=$1 && local -n INTERFACES_PRODUCT=$2
    for i in "${!INTERFACES[@]}"; do
        CON_STATE=$(nmcli device status | grep "^${INTERFACES[$i]}." | awk '{print $3}')
        INT_NAME=${INTERFACES_PRODUCT[$i]}[${INTERFACES[$i]}]
        [[ "$CON_STATE" == "connected" ]] && STATUS="$INT_NAME:\n\t$(nmcli -t -f GENERAL.CONNECTION dev show "${INTERFACES[$i]}" | awk -F '[:]' '{print $2}') ~ $(nmcli -t -f IP4.ADDRESS dev show "${INTERFACES[$i]}" | awk -F '[:/]' '{print $2}')" || STATUS="$INT_NAME: ${CON_STATE^}"
        echo -e "${STATUS}"
    done
}
function status() {
    OPTIONS=""
    [[ ${#WIRED_INTERFACES[@]} -ne "0" ]] && ETH_STATUS="$(interface_status WIRED_INTERFACES WIRED_INTERFACES_PRODUCT)" && OPTIONS="${OPTIONS}${ETH_STATUS}"
    [[ ${#WIRELESS_INTERFACES[@]} -ne "0" ]] && WLAN_STATUS="$(interface_status WIRELESS_INTERFACES WIRELESS_INTERFACES_PRODUCT)" && { [[ -n ${OPTIONS} ]] && OPTIONS="${OPTIONS}\n${WLAN_STATUS}" || OPTIONS="${OPTIONS}${WLAN_STATUS}"; }
    ACTIVE_VPN=$(nmcli -g NAME,TYPE con show --active | awk '/:'$VPN_PATTERN'/ {sub(/:'$VPN_PATTERN'.*/, ""); print}')
    [[ -n $ACTIVE_VPN ]] && OPTIONS="${OPTIONS}\n${ACTIVE_VPN}[VPN]: $(nmcli -g ip4.address con show "${ACTIVE_VPN}" | awk -F '[:/]' '{print $1}')"
    echo -e "$OPTIONS" | rofi_cmd "$OPTIONS" $WIDTH_FIX_STATUS "" "mainbox{children:[listview];}"
}
function share_pass() {
    SSID=$(nmcli dev wifi show-password | grep -oP '(?<=SSID: ).*' | head -1)
    PASSWORD=$(nmcli dev wifi show-password | grep -oP '(?<=Password: ).*' | head -1)
    OPTIONS="SSID: ${SSID}\nPassword: ${PASSWORD}"
    [[ -x "$(command -v qrencode)" ]] && OPTIONS="${OPTIONS}\n~QrCode"
    SELECTION=$(echo -e "$OPTIONS" | rofi_cmd "$OPTIONS" $WIDTH_FIX_STATUS "-a -1" "mainbox{children:[listview];}")
    selection_action
}
function gen_qrcode() {
    DIRECTIONS=("Center" "Northwest" "North" "Northeast" "East" "Southeast" "South" "Southwest" "West")
    TMP_SSID="${SSID// /_}"
    [[ -e $QRCODE_DIR$TMP_SSID.png ]] || qrencode -t png -o $QRCODE_DIR$TMP_SSID.png -l H -s 25 -m 2 --dpi=192 "WIFI:S:""$SSID"";T:""$(nmcli dev wifi show-password | grep -oP '(?<=Security: ).*' | head -1)"";P:""$PASSWORD"";;"
    rofi_cmd "" "0" "" "entry{enabled:false;}window{location:""${DIRECTIONS[QRCODE_LOCATION]}"";border-radius:6mm;padding:1mm;width:100mm;height:100mm;
        background-image:url(\"$QRCODE_DIR$TMP_SSID.png\",both);}"
}
function manual_hidden() {
    OPTIONS="~Manual\n~Hidden" && SELECTION=$(echo -e "$OPTIONS" | rofi_cmd "$OPTIONS" $WIDTH_FIX_STATUS "" "mainbox{children:[listview];}")
    selection_action
}
function vpn() {
    ACTIVE_VPN=$(nmcli -g NAME,TYPE con show --active | awk '/:'$VPN_PATTERN'/ {sub(/:'$VPN_PATTERN'.*/, ""); print}')
    [[ $ACTIVE_VPN ]] && OPTIONS="~Deactive $ACTIVE_VPN" || OPTIONS="$(nmcli -g NAME,TYPE connection | awk '/:'$VPN_PATTERN'/ {sub(/:'$VPN_PATTERN'.*/, ""); print}')"
    VPN_ACTION=$(echo -e "$OPTIONS" | rofi_cmd "$OPTIONS" "$WIDTH_FIX_STATUS" "" "mainbox {children:[listview];}")
    [[ -n "$VPN_ACTION" ]] && { { [[ "$VPN_ACTION" =~ "~Deactive" ]] && nmcli connection down "$ACTIVE_VPN" && notification "VPN_Deactivated" "$ACTIVE_VPN"; } || {
         notification "-t 0 Activating_VPN" "$VPN_ACTION"
                VPN_OUTPUT=$(nmcli connection up "$VPN_ACTION" 2> /dev/null)
        { [[ $(echo "$VPN_OUTPUT" | grep -c "Connection successfully activated") -eq "1" ]] && notification "VPN_Successfully_Activated" "$VPN_ACTION"; } || notification "Error_Activating_VPN" "Check your configuration for $VPN_ACTION"
    }; }
}
function more_options() {
    OPTIONS=""
    [[ "$WIFI_CON_STATE" == "connected" ]] && OPTIONS="~Share Wifi Password\n"
    OPTIONS="${OPTIONS}~Status\n~Restart Network"
    [[ $(nmcli -g NAME,TYPE connection | awk '/:'$VPN_PATTERN'/ {sub(/:'$VPN_PATTERN'.*/, ""); print}') ]] && OPTIONS="${OPTIONS}\n~VPN"
    [[ -x "$(command -v nm-connection-editor)" ]] && OPTIONS="${OPTIONS}\n~Open Connection Editor"
    SELECTION=$(echo -e "$OPTIONS" | rofi_cmd "$OPTIONS" "$WIDTH_FIX_STATUS" "" "mainbox {children:[listview];}")
    selection_action
}
function selection_action() {
    case "$SELECTION" in
        "~Disconnect") disconnect "Connection_Terminated" ;;
        "~Scan") scan ;;
        "~Status") status ;;
        "~Share Wifi Password") share_pass ;;
        "~Manual/Hidden") manual_hidden ;;
        "~Manual") ssid_manual ;;
        "~Hidden") ssid_hidden ;;
        "~Wi-Fi On") change_wifi_state "Wi-Fi" "Enabling Wi-Fi connection" "on" ;;
        "~Wi-Fi Off") change_wifi_state "Wi-Fi" "Disabling Wi-Fi connection" "off" ;;
        "~Eth Off") change_wired_state "Ethernet" "Disabling Wired connection" "disconnect" "${WIRED_INTERFACES}" ;;
        "~Eth On") change_wired_state "Ethernet" "Enabling Wired connection" "connect" "${WIRED_INTERFACES}" ;;
        "***Wi-Fi Disabled***") ;;
        "***Wired Unavailable***") ;;
        "***Wired Initializing***") ;;
        "~Change Wifi Interface") change_wireless_interface ;;
        "~Restart Network") net_restart "Network" "Restarting Network" ;;
        "~QrCode") gen_qrcode ;;
        "~More Options") more_options ;;
        "~Open Connection Editor") nm-connection-editor ;;
        "~VPN") vpn ;;
        *)
            [[ -n "$SELECTION" ]] && [[ "$WIFI_LIST" =~ .*"$SELECTION".* ]] && {
                [[ "$SSID" == "*" ]] && SSID=$(echo "$SELECTION" | sed "s/\s\{2,\}/\|/g " | awk -F "|" '{print $3}')
                { [[ "$ACTIVE_SSID" == "$SSID" ]] && nmcli con up "$SSID" ifname "${WIRELESS_INTERFACES[WLAN_INT]}"; } || {
                    [[ "$SELECTION" =~ "WPA2" ]] || [[ "$SELECTION" =~ "WEP" ]] && enter_passwword
                    { [[ -n "$PASS" ]] && [[ "$PASS" != "$PASSWORD_ENTER" ]] && connect "$SSID" "$PASS"; } || stored_connection "$SSID"
                }
            }
            ;;
    esac
}
function main() {
    initialization && rofi_menu
}
main

Shutdown

declare -A opts

opts[shutdown]="  Shutdown"
opts[suspend]=" 󰒲 Suspend"
opts[logout]=" 󰗼 Logout"
opts[reboot]=" 󰜉 Restart"

gen_list() {
    printf '%s\n' "${opts[@]}"
}

opt=$(gen_list | rofi -dmenu -mesg)

case "$opt" in
    "${opts[shutdown]}")
        systemctl poweroff
        ;;
    "${opts[suspend]}")
        systemctl suspend
        ;;
    "${opts[logout]}")
        niri msg action quit
        ;;
    "${opts[reboot]}")
        systemctl reboot
        ;;
esac

Starship

In nushell

export-env { $env.STARSHIP_SHELL = "nu"; load-env {
    STARSHIP_SESSION_KEY: (random chars -l 16)
    PROMPT_INDICATOR: ""
    PROMPT_INDICATOR_VI_INSERT: ": "
    PROMPT_INDICATOR_VI_NORMAL: "〉"
    PROMPT_MULTILINE_INDICATOR: "::: "
    PROMPT_COMMAND: {||
        # jobs are not supported
        (
            ^/usr/bin/starship prompt
                --cmd-duration $env.CMD_DURATION_MS
                $"--status=($env.LAST_EXIT_CODE)"
                --terminal-width (term size).columns
        )
    }

    config: ($env.config? | default {} | merge {
        render_right_prompt_on_last_line: true
    })

    PROMPT_COMMAND_RIGHT: {||
        (
            ^/usr/bin/starship prompt
                --right
                --cmd-duration $env.CMD_DURATION_MS
                $"--status=($env.LAST_EXIT_CODE)"
                --terminal-width (term size).columns
        )
    }
}}

Import it in config

use starship.nu

config

essential stuff

[status]
disabled = false
symbol = ''
format = '[\[$symbol$common_meaning$signal_name$maybe_int\]]($style) '
not_executable_symbol = ''
not_found_symbol = ''
sigint_symbol = ''
signal_symbol = ''
map_symbol = true

[cmd_duration]
format = '\[[⏱ $duration]($style)\]'

[git_branch]
symbol = " "
format = '\[[$symbol  $branch]($style)\]'

[git_status]
disabled = false
format = '([\[$stashed$deleted$renamed$modified$staged$untracked\]]($style))'

[os]
disabled = false
format = '\[[$symbol]($style)\]'

[os.symbols]
Arch = " "

[directory]
read_only = " 󰌾 "

[custom.jj]
ignore_timeout = true
description = "The current jj status"
detect_folders = [".jj"]
symbol = "🥋 "
command = '''
jj log --revisions @ --no-graph --ignore-working-copy --color always --limit 1 --template '
  separate(" ",
    change_id.shortest(4),
    bookmarks,
    "|",
    concat(
      if(conflict, "💥"),
      if(divergent, "🚧"),
      if(hidden, "👻"),
      if(immutable, "🔒"),
    ),
    raw_escape_sequence("\x1b[1;32m") ++ if(empty, "(empty)"),
    raw_escape_sequence("\x1b[1;32m") ++ coalesce(
      truncate_end(29, description.first_line(), "…"),
      "(no description set)",
    ) ++ raw_escape_sequence("\x1b[0m"),
  )
'
'''

disable everything else

[typst]
disabled = true

[aws]
disabled = true

[bun]
disabled = true

[c]
disabled = true

[cmake]
disabled = true


[cobol]
disabled = true

[conda]
disabled = true

[crystal]
disabled = true

[daml]
disabled = true

[dart]
disabled = true

[deno]
disabled = true

[docker_context]
disabled = true

[dotnet]
disabled = true

[elixir]
disabled = true

[elm]
disabled = true

[erlang]
disabled = true

[fennel]
disabled = true

[fossil_branch]
disabled = true

[gcloud]
disabled = true

[golang]
disabled = true

[gradle]
disabled = true

[guix_shell]
disabled = true

[haskell]
disabled = true

[haxe]
disabled = true

[helm]
disabled = true

[hg_branch]
disabled = true

[java]
disabled = true

[julia]
disabled = true

[kotlin]
disabled = true

[kubernetes]
disabled = true

[lua]
disabled = true

[memory_usage]
disabled = true

[meson]
disabled = true

[nim]
disabled = true

[nix_shell]
disabled = true

[nodejs]
disabled = true

[ocaml]
disabled = true

[opa]
disabled = true

[openstack]
disabled = true

[package]
disabled = true

[perl]
disabled = true

[php]
disabled = true

[pijul_channel]
disabled = true

[pulumi]
disabled = true

[purescript]
disabled = true

[python]
disabled = true

[raku]
disabled = true

[red]
disabled = true

[ruby]
disabled = true

[rust]
disabled = true

[scala]
disabled = true

[spack]
disabled = true

[sudo]
disabled = true

[swift]
disabled = true

[terraform]
disabled = true

[username]
disabled = true

[vagrant]
disabled = true

[vlang]
disabled = true

[zig]
disabled = true

[solidity]
disabled = true

[rlang]
disabled = true

[buf]
disabled = true

[hostname]
disabled = true

Swappy

[Default]
save_dir=$HOME/Pictures/Swappy
save_filename_format=swappy_%Y_%m_%d_%H_%M_%S.png
show_panel=false
line_size=5
text_size=20
text_font=sans-serif
paint_mode=brush
early_exit=false
fill_shape=false

Swaync

The regular config

{
  "$schema": "/etc/xdg/swaync/configSchema.json",
  "positionX": "right",
  "positionY": "top",
  "layer": "overlay",
  "control-center-layer": "top",
  "layer-shell": true,
  "cssPriority": "application",
  "control-center-margin-top": 0,
  "control-center-margin-bottom": 0,
  "control-center-margin-right": 0,
  "control-center-margin-left": 0,
  "notification-2fa-action": true,
  "notification-inline-replies": false,
  "notification-icon-size": 64,
  "notification-body-image-height": 100,
  "notification-body-image-width": 200,
  "timeout": 10,
  "timeout-low": 5,
  "timeout-critical": 0,
  "fit-to-screen": false,
  "relative-timestamps": true,
  "control-center-width": 500,
  "control-center-height": 500,
  "notification-window-width": 500,
  "keyboard-shortcuts": true,
  "image-visibility": "when-available",
  "transition-time": 200,
  "hide-on-clear": false,
  "hide-on-action": true,
  "script-fail-notify": true,
  "scripts": {},
  "notification-visibility": {},
  "widgets": ["inhibitors", "title", "dnd", "mpris", "notifications"],
  "widget-config": {
    "inhibitors": {
      "text": "Inhibitors",
      "button-text": "Clear All",
      "clear-all-button": true
    },
    "title": {
      "text": "Notifications",
      "clear-all-button": true,
      "button-text": "Clear All"
    },
    "dnd": {
      "text": "Do Not Disturb"
    },
    "mpris": {
      "image-size": 96,
      "image-radius": 12
    },
    "label": {
      "max-lines": 5,
      "text": "Label Text"
    }
  }
}

Colors and CSS

Defining colors

@define-color cc-bg rgba(10, 10, 10, 1);
@define-color noti-border-color rgba(204, 204, 204, 1);
@define-color noti-bg rgba(10, 10, 10, 1);
@define-color noti-bg-opaque rgb(10, 10, 10);
@define-color noti-bg-darker rgb(10, 10, 10);
@define-color noti-bg-hover rgb(56, 56, 56);
@define-color noti-bg-hover-opaque rgb(56, 56, 56);
@define-color noti-bg-focus rgba(68, 68, 68, 0.6);
@define-color noti-close-bg rgba(255, 255, 255, 0.1);
@define-color noti-close-bg-hover rgba(255, 255, 255, 0.15);
@define-color text-color rgb(204, 204, 204);
@define-color text-color-disabled rgb(150, 150, 150);
@define-color bg-selected rgb(0, 128, 255);

Notification row

.notification-row {
  outline: none;
}

.notification-row:focus,
.notification-row:hover {
  background: @noti-bg-focus;
}

.notification-row .notification-background {
  padding: 6px 12px;
}

.notification-row .notification-background .close-button {
  /* The notification Close Button */
  background: @noti-close-bg;
  color: @text-color;
  text-shadow: none;
  padding: 0;
  border-radius: 100%;
  margin-top: 5px;
  margin-right: 5px;
  box-shadow: none;
  border: none;
  min-width: 24px;
  min-height: 24px;
}

.notification-row .notification-background .close-button:hover {
  box-shadow: none;
  background: @noti-close-bg-hover;
  transition: background 0.15s ease-in-out;
  border: none;
}

.notification-row .notification-background .notification {
  /* The actual notification */
  border-radius: 12px;
  border: 1px solid @noti-border-color;
  padding: 0;
  transition: background 0.15s ease-in-out;
  background: @noti-bg;
}

.notification-row .notification-background .notification.low {
  /* Low Priority Notification */
}

.notification-row .notification-background .notification.normal {
  /* Normal Priority Notification */
}

.notification-row .notification-background .notification.critical {
  /* Critical Priority Notification */
}

.notification-row .notification-background .notification .notification-action,
.notification-row
  .notification-background
  .notification
  .notification-default-action {
  padding: 4px;
  margin: 0;
  box-shadow: none;
  background: transparent;
  border: none;
  color: @text-color;
  transition: background 0.15s ease-in-out;
}

.notification-row
  .notification-background
  .notification
  .notification-action:hover,
.notification-row
  .notification-background
  .notification
  .notification-default-action:hover {
  -gtk-icon-effect: none;
  background: @noti-bg-hover;
}

.notification-row
  .notification-background
  .notification
  .notification-default-action {
  /* The large action that also displays the notification summary and body */
  border-radius: 12px;
}

.notification-row
  .notification-background
  .notification
  .notification-default-action:not(:only-child) {
  /* When alternative actions are visible */
  border-bottom-left-radius: 0px;
  border-bottom-right-radius: 0px;
}

.notification-row
  .notification-background
  .notification
  .notification-default-action
  .notification-content {
  background: transparent;
  border-radius: 12px;
  padding: 4px;
}

.notification-row
  .notification-background
  .notification
  .notification-default-action
  .notification-content
  .image {
  /* Notification Primary Image */
  -gtk-icon-effect: none;
  border-radius: 100px;
  /* Size in px */
  margin: 4px;
}

.notification-row
  .notification-background
  .notification
  .notification-default-action
  .notification-content
  .app-icon {
  /* Notification app icon (only visible when the primary image is set) */
  -gtk-icon-effect: none;
  -gtk-icon-shadow: 0 1px 4px black;
  margin: 6px;
}

.notification-row
  .notification-background
  .notification
  .notification-default-action
  .notification-content
  .text-box
  .summary {
  /* Notification summary/title */
  font-size: 16px;
  font-weight: bold;
  background: transparent;
  color: @text-color;
  text-shadow: none;
}

.notification-row
  .notification-background
  .notification
  .notification-default-action
  .notification-content
  .text-box
  .time {
  /* Notification time-ago */
  font-size: 16px;
  font-weight: bold;
  background: transparent;
  color: @text-color;
  text-shadow: none;
  margin-right: 30px;
}

.notification-row
  .notification-background
  .notification
  .notification-default-action
  .notification-content
  .text-box
  .body {
  /* Notification body */
  font-size: 15px;
  font-weight: normal;
  background: transparent;
  color: @text-color;
  text-shadow: none;
}

.notification-row
  .notification-background
  .notification
  .notification-default-action
  .notification-content
  progressbar {
  /* The optional notification progress bar */
  margin: 4px;
  box-shadow: none;
  border-radius: 6px;
  padding: 4px;
  background-color: @text-color;
}

progressbar {
  color: @text-color;
}

.notification-row
  .notification-background
  .notification
  .notification-default-action
  .notification-content
  .body-image {
  /* The "extra" optional bottom notification image */
  margin-top: 4px;
  background-color: white;
  border-radius: 12px;
  -gtk-icon-effect: none;
}

.notification-row
  .notification-background
  .notification
  .notification-default-action
  .notification-content
  .inline-reply {
  /* The inline reply section */
  margin-top: 4px;
}

.notification-row
  .notification-background
  .notification
  .notification-default-action
  .notification-content
  .inline-reply
  .inline-reply-entry {
  background: @noti-bg-darker;
  /* background: rgb(100, 100, 100); */
  color: @text-color;
  caret-color: @text-color;
  border: 1px solid @noti-border-color;
  border-radius: 12px;
}

.notification-row
  .notification-background
  .notification
  .notification-default-action
  .notification-content
  .inline-reply
  .inline-reply-button {
  margin-left: 4px;
  background: @noti-bg;
  border: 1px solid @noti-border-color;
  border-radius: 12px;
  color: @text-color;
}

.notification-row
  .notification-background
  .notification
  .notification-default-action
  .notification-content
  .inline-reply
  .inline-reply-button:disabled {
  background: initial;
  color: @text-color-disabled;
  border: 1px solid @noti-border-color;
  border-color: transparent;
}

.notification-row
  .notification-background
  .notification
  .notification-default-action
  .notification-content
  .inline-reply
  .inline-reply-button:hover {
  background: @noti-bg-hover;
}

.notification-row .notification-background .notification .notification-action {
  /* The alternative actions below the default action */
  border-top: 1px solid @noti-border-color;
  border-radius: 0px;
  border-right: 1px solid @noti-border-color;
}

.notification-row
  .notification-background
  .notification
  .notification-action:first-child {
  /* add bottom border radius to eliminate clipping */
  border-bottom-left-radius: 12px;
}

.notification-row
  .notification-background
  .notification
  .notification-action:last-child {
  border-bottom-right-radius: 12px;
  border-right: none;
}

Notification group

.notification-group {
  /* Styling only for Grouped Notifications */
}

.notification-group.low {
  /* Low Priority Group */
}

.notification-group.normal {
  /* Low Priority Group */
}

.notification-group.critical {
  /* Low Priority Group */
}

.notification-group .notification-group-buttons,
.notification-group .notification-group-headers {
  margin: 0 16px;
  color: @text-color;
}

.notification-group .notification-group-headers {
  /* Notification Group Headers */
}

.notification-group .notification-group-headers .notification-group-icon {
  color: @text-color;
}

.notification-group .notification-group-headers .notification-group-header {
  color: @text-color;
}

.notification-group .notification-group-buttons {
  /* Notification Group Buttons */
}

.notification-group.collapsed .notification-row .notification {
  background-color: @noti-bg-opaque;
}

.notification-group.collapsed .notification-row:not(:last-child) {
  /* Top notification in stack */
  /* Set lower stacked notifications opacity to 0 */
}

.notification-group.collapsed
  .notification-row:not(:last-child)
  .notification-action,
.notification-group.collapsed
  .notification-row:not(:last-child)
  .notification-default-action {
  opacity: 0;
}

.notification-group.collapsed:hover
  .notification-row:not(:only-child)
  .notification {
  background-color: @noti-bg-hover-opaque;
}

/* fooo */

Control centre

.control-center {
  /* The Control Center which contains the old notifications + widgets */
  background: @cc-bg;
  color: @text-color;
  border-radius: 12px;
  margin: 5px;
}

.control-center .control-center-list-placeholder {
  /* The placeholder when there are no notifications */
  opacity: 0.5;
}

.control-center .control-center-list {
  /* List of notifications */
  background: transparent;
}

.control-center .control-center-list .notification {
  box-shadow:
    0 0 0 1px rgba(0, 0, 0, 0.3),
    0 1px 3px 1px rgba(0, 0, 0, 0.7),
    0 2px 6px 2px rgba(0, 0, 0, 0.3);
}

.control-center .control-center-list .notification .notification-default-action,
.control-center .control-center-list .notification .notification-action {
  transition:
    opacity 400ms ease-in-out,
    background 0.15s ease-in-out;
}

.control-center
  .control-center-list
  .notification
  .notification-default-action:hover,
.control-center .control-center-list .notification .notification-action:hover {
  background-color: @noti-bg-hover;
}

Meta stuff

.blank-window {
  /* Window behind control center and on all other monitors */
  background: transparent;
}

.floating-notifications {
  background: transparent;
}

.floating-notifications .notification {
  box-shadow: none;
}

Widgets

.widget-title {
  color: @text-color;
  margin: 8px;
  font-size: 1.5rem;
}

.widget-title > button {
  font-size: initial;
  color: @text-color;
  text-shadow: none;
  background: @noti-bg;
  border: 1px solid @noti-border-color;
  box-shadow: none;
  border-radius: 12px;
}

.widget-title > button:hover {
  background: @noti-bg-hover;
}

/* DND widget */
.widget-dnd {
  color: @text-color;
  margin: 8px;
  font-size: 1.1rem;
}

.widget-dnd > switch {
  font-size: initial;
  border-radius: 12px;
  background: @noti-bg;
  border: 1px solid @noti-border-color;
  box-shadow: none;
}

.widget-dnd > switch:checked {
  background: @bg-selected;
}

.widget-dnd > switch slider {
  background: @noti-bg-hover;
  border-radius: 12px;
}

/* Label widget */
.widget-label {
  margin: 8px;
}

.widget-label > label {
  font-size: 1.1rem;
}

/* Buttons widget */
.widget-buttons-grid {
  padding: 8px;
  margin: 8px;
  border-radius: 12px;
  background-color: @noti-bg;
}

.widget-buttons-grid > flowbox > flowboxchild > button {
  background: @noti-bg;
  border-radius: 12px;
}

.widget-buttons-grid > flowbox > flowboxchild > button.toggle:checked {
  /* style given to the active toggle button */
}

/* Menubar widget */
.widget-menubar > box > .menu-button-bar > button {
  border: none;
  background: transparent;
}

.topbar-buttons > button {
  /* Name defined in config after # */
  border: none;
  background: transparent;
}

/* Volume widget */
.widget-volume {
  background-color: @noti-bg;
  padding: 8px;
  margin: 8px;
  border-radius: 12px;
}

.widget-volume > box > button {
  background: transparent;
  border: none;
}

.per-app-volume {
  background-color: @noti-bg-alt;
  padding: 4px 8px 8px 8px;
  margin: 0px 8px 8px 8px;
  border-radius: 12px;
}

/* Backlight widget */
.widget-backlight {
  background-color: @noti-bg;
  padding: 8px;
  margin: 8px;
  border-radius: 12px;
}

/* Inhibitors widget */
.widget-inhibitors {
  margin: 8px;
  font-size: 1.5rem;
}

.widget-inhibitors > button {
  font-size: initial;
  color: @text-color;
  text-shadow: none;
  background: @noti-bg;
  border: 1px solid @noti-border-color;
  box-shadow: none;
  border-radius: 12px;
}

.widget-inhibitors > button:hover {
  background: @noti-bg-hover;
}

Systemd

Symlink all of them, including waybar.service , to niri.service.wants

Sets the background

[Unit]
PartOf=graphical-session.target
After=graphical-session.target
Requisite=graphical-session.target

[Service]
ExecStart=/home/innocentzero/.config/systemd/user/setwall
Restart=on-failure

The corresponding script

configpath="/home/innocentzero/.config/waypaper/config.ini"
filepath=$(grep wallpaper "$configpath" | sed 's|^.*= ||g' | sed "s|^~|$HOME|g")
echo "$(date "+%Y-%m-%d %I:%M:%S") - Setting wallpaper $filepath"
exec swaybg --image "$filepath" --mode "fill" --output "*"

Start cliphist

[Unit]
PartOf=graphical-session.target
After=graphical-session.target
Requisite=graphical-session.target

[Service]
ExecStart=/usr/bin/wl-paste --watch /usr/bin/cliphist store
Restart=on-failure

Start server

[Unit]
PartOf=graphical-session.target
After=graphical-session.target
Requisite=graphical-session.target

[Service]
ExecStart=/usr/bin/python3 -m http.server -d /home/innocentzero/Isfaruls_home/age -b 127.0.0.1 8080
Restart=on-failure

Start vesktop

[Unit]
PartOf=graphical-session.target
After=graphical-session.target
Requisite=graphical-session.target

[Service]
ExecStart=/usr/bin/flatpak run dev.vencord.Vesktop --start-minimized
Restart=on-failure

Start gammastep

[Unit]
PartOf=graphical-session.target
After=graphical-session.target
Requisite=graphical-session.target

[Service]
ExecStart=/usr/bin/gammastep-indicator
Restart=on-failure

Screen locking

Set idle lock. Symlink to niri.service.wants

[Unit]
PartOf=graphical-session.target
After=graphical-session.target
Requisite=graphical-session.target

[Service]
ExecStart=/usr/bin/swayidle -w timeout 45 'notify-send --app-name=screenlockwarning "Screen will lock soon"' timeout 60 'systemctl suspend'
Restart=on-failure
let image = (open /home/innocentzero/.config/waypaper/config.ini | lines | split column ' ' | get 8 | get column3)
cp ($image | str replace '~' $env.HOME) /tmp/lock.png
/usr/bin/gtklock -c /home/innocentzero/.config/gtklock/style.css

Corresponding css for gtklock

window {
        background-image: url("/tmp/lock.png");
        background-position: center;
        background-size: cover;
}

copy this to /etc/systemd/system/lock@.service then run systemctl enable lock@$(id -u) in bash.

[Unit]
Description=Lock
After=sleep.target
After=suspend.target

[Service]
User=%i
Type=forking
Environment=WAYLAND_DISPLAY=wayland-1
Environment=XDG_RUNTIME_DIR=/run/user/%i
ExecStart=/home/innocentzero/bin/lock

[Install]
WantedBy=sleep.target
WantedBy=suspend.target

NWG agendas and todos

Enable todo and agenda on the screen. Symlink to niri.service.wants

window {
  font-family: "Monospace";
  color: rgba(255, 255, 255, 1)
}

#box-outer {
  /* Define attributes of the box surrounding icons here */
  background-color: rgba(255, 255, 255, 0);
}

#box-inner {
  background-color: rgba(10, 10, 10, 0.5);
  border-radius: 15px; /* Applies to all corners */
  padding: 10px;
}
[Unit]
PartOf=graphical-session.target
After=graphical-session.target
Requisite=graphical-session.target

[Service]
ExecStart=/usr/bin/nwg-wrapper -p left -a start -ml 15 -mt 10 -j center -r 60000 -s /home/innocentzero/.config/nwg-wrapper/agenda.nu -c /home/innocentzero/.config/nwg-wrapper/agenda.css
Restart=on-failure
emacs -batch -Q -l /home/innocentzero/.config/nwg-wrapper/agenda.el | if ($in | is-empty) { "Nothing to do" } else { $in | from csv --noheaders | reject column0 column5 column7 column8 column9 column10 | rename timeline type status tags time | update timeline {|it| $it.timeline | str substring 0..15} | table --theme dots }
(require 'org)


(setq org-agenda-files
   '("/home/innocentzero/Isfaruls_home/org_home/"))

(setq org-todo-keywords
         '((""
            "TODO(t)"
            "DREAM(D)"
            "ONGOING(o)"
            "NEXT(n)"
            "|"
            "DONE(d!)"
            "CANCELLED(c@)")))

(setq org-agenda-custom-commands
      '(("X" agenda ""
         ((org-agenda-span (quote day))
          (org-agenda-with-colors nil))
         ("agenda"))))

(setq org-element-use-cache nil)

(org-batch-agenda-csv "X")
[Unit]
PartOf=graphical-session.target
After=graphical-session.target
Requisite=graphical-session.target

[Service]
ExecStart=/usr/bin/nwg-wrapper -a end -ml 15 -mb 10 -p left -r 60000 -s /home/innocentzero/.config/nwg-wrapper/todos.nu -c /home/innocentzero/.config/nwg-wrapper/agenda.css
Restart=on-failure
emacs -batch -Q -l /home/innocentzero/.config/nwg-wrapper/todos.el | if ($in | is-empty) { "Nothing to do" } else { $in | from csv --noheaders  | reject column0 column2 column5 column6 column7 column8 column9 column10 | rename todo status tags | table --theme dots }
(require 'org)


(setq org-agenda-files
   '("/home/innocentzero/Isfaruls_home/org_home/"))

(setq org-todo-keywords
         '((""
            "TODO(t)"
            "DREAM(D)"
            "ONGOING(o)"
            "NEXT(n)"
            "|"
            "DONE(d!)"
            "CANCELLED(c@)")))

(setq org-element-use-cache nil)

(org-batch-agenda-csv "t")

Waybar

Colors

Gen settings

* {
  /* `otf-font-awesome` is required to be installed for icons */
  font-family:
    FontAwesome, SymbolsNerdFontMono, ProfontWindowsNerdFontMono, FiraCode,
    Roboto, Helvetica, Arial, sans-serif;
  font-size: 15px;
  min-height: 20px;
  border-radius: 15px;
}

#window {
  margin: 0 2px 0 2px;
}

window#waybar {
  background-color: transparent;
  color: #ffffff;
  font-weight: 800;
  transition-property: background-color;
  transition-duration: 0.5s;
  border: none;
  padding: 0px 0px 0px 0px;
  margin: 0px;
}

window#waybar.hidden {
  opacity: 0.2;
}

Button settings

button {
  /* Use box-shadow instead of border so the text isn't offset */
  box-shadow: inset 0 -3px transparent;
  /* Avoid rounded borders under each button name */
  border: none;
  /* border-radius: 7px; */
}

/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */
button:hover {
  background: inherit;
  box-shadow: inset 0 -3px #ffffff;
}

Workspaces

#workspaces {
  border: 2px solid #00aaaa;
  margin-top: 2px;
  margin-bottom: 2px;
}

/* If workspaces is the leftmost module, omit left margin */
.modules-left > widget:first-child > #workspaces {
  margin-left: 0;
}

Workspace buttons

#workspaces button {
  padding: 0 5px;
  background-color: transparent;
  color: #ccc;
}

#workspaces button.persistent {
  padding: 0 5px;
  background-color: transparent;
  color: #222;
}

#workspaces button:hover {
  background: rgba(0, 0, 0, 0.2);
}

#workspaces button.focused {
  background-color: transparent;
  /* box-shadow: inset 0 -3px #ffffff; */
  color: #00aa00;
}

#workspaces button.urgent {
  background-color: #999999;
}

#workspaces button.active {
  color: #0000aa;
}

Almost gen settings for everything else

#workspaces,
#mode,
#clock,
#battery,
#cpu,
#memory,
#disk,
#temperature,
#backlight,
#network,
#pulseaudio,
#wireplumber,
#privacy,
#mpd,
#cava,
#user,
#tray,
#mode,
#idle_inhibitor,
#scratchpad,
#custom-dnd,
#custom-orgclock,
#custom-cpubars,
#custom-audio_idle_inhibitor {
  border: 2px solid #00aaaa;
  padding: 0 10px;
  margin-top: 2px;
  margin-bottom: 2px;
  background-color: #222;
  color: #ccc;
  margin-left: 2px;
}

Battery

#battery.charging,
#battery.plugged {
  color: #ffffff;
  background-color: #224422;
}

@keyframes blink {
  to {
    background-color: #ffffff;
    color: #000000;
  }
}

#battery.critical:not(.charging) {
  background-color: #442222;
  animation-name: blink;
  animation-duration: 0.5s;
  animation-timing-function: linear;
  animation-iteration-count: infinite;
  animation-direction: alternate;
}

label:focus {
  background-color: #000000;
}

Network and audio

#network.disconnected {
  background-color: #442222;
}

#pulseaudio.muted {
  background-color: #223333;
}

#wireplumber.muted {
  background-color: #222233;
}

temp and tray

#temperature.critical {
  background-color: #442222;
}

#tray > .passive {
  -gtk-icon-effect: dim;
}

#tray > .needs-attention {
  -gtk-icon-effect: highlight;
  background-color: #eb4d4b;
}

idle inhibitor

#idle_inhibitor.activated {
  background-color: #555555;
}

Config

// starting brace lmao
{

Gen settings

// Waybar at top layer
"layer": "top", 

// Waybar position (top|bottom|left|right)
"position": "top",

//margin from top
"margin-top": 5,
//margin left and right
"margin-left": 5,
"margin-right": 5,

// Gaps between modules (px)
"spacing": 1, 

Module orders

// Choose the order of the modules
"modules-left": ["niri/workspaces", "idle_inhibitor", "user", "pulseaudio", "backlight", "clock"],
"modules-center": ["custom/orgclock"],
"modules-right": [ "network", "cpu", "memory", "temperature", "battery",  "tray"],

Sway module configs

// Modules configuration
 "sway/workspaces": {
     "disable-scroll": false,
     "all-outputs": false,
     "warp-on-scroll": false,
     "format": "{icon}",
     "format-icons": {
        "1": "一",
        "2": "二",
        "3": "三",
        "4": "四",
        "5": "五",
        "6": "六",
        "7": "七",
        "8": "八",
        "9": "九",
        "10": "十"
     },
     "persistent-workspaces": {
        "1": [],
        "2": [],
        "3": [],
        "4": [],
        "5": [],
        "6": [],
        "7": [],
        "8": [],
        "9": [],
        "10": []
     }
 },
"sway/mode": {
    "format": "󰩨 "
},

"sway/window": {
    "format": "{}",
    "max-length": 15,
},

"sway/scratchpad": {
    "format": "{icon} {count}",
    "show-empty": false,
    "format-icons": ["", " "],
    "tooltip": true,
    "tooltip-format": "{app}: {title}"
},

Left stuff - regular

"idle_inhibitor": {
    "format": "{icon}",
    "format-icons": {
        "activated": " ",
        "deactivated": " "
    }
},

"clock": {
    "format": "{:%H%M %a, %d-%m-%Y}",
     "tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
},

"user": {
        "format": "{work_H}h ↑",
        "interval": 60,
        "height": 20,
        "width": 30,
        "icon": true
},

"backlight": {
    // "device": "acpi_video1",
    "format": "{percent}% {icon}",
    "format-icons": [" ", " ", " ", " ", " ", " ", " ", " ", " "]
},

"wireplumber": {
    "format": "{volume}% {icon}",
    "format-muted": "",
    "format-bluetooth": "{volume}% {icon} ",
    "format-bluetooth-muted": "󰓄 {icon} ",
    "format-muted": "󰸈 {format_source}",
    "on-click": "pavucontrol",
    "format-icons": {
        "headphone": " ",
        "hands-free": "󱈘 ",
        "headset": "󰋎 ",
        "phone": " ",
        "portable": " ",
        "car": " ",
        "default": [" ", "󰕾 ", " "]
    }
},
"pulseaudio": {
    "scroll-step": 1, // %, can be a float
    "format": "{volume}% {icon} {format_source}",
    "format-bluetooth": "{volume}% {icon}  {format_source}",
    "format-bluetooth-muted": "󰓄 {icon}  {format_source}",
    "format-muted": "󰸈 {format_source}",
    "format-source": "{volume}%  ",
    "format-source-muted": " ",
    "format-icons": {
        "headphone": " ",
        "hands-free": "󱈘 ",
        "headset": "󰋎 ",
        "phone": " ",
        "portable": " ",
        "car": " ",
        "default": [" ", "󰕾 ", " "]
    }
},

right stuff - regular

"tray": {
    "icon-size": 21,
    "spacing": 10
},

"cpu": {
     "interval": 1,
     "format": "{icon0}{icon1}{icon2}{icon3}{icon4}{icon5}{icon6}{icon7}{icon8}{icon9}{icon10}{icon11}",
     "format-icons": [
          "<span color='#69ff94'>▁</span>", // green
          "<span color='#2aa9ff'>▂</span>", // blue
          "<span color='#f8f8f2'>▃</span>", // white
          "<span color='#f8f8f2'>▄</span>", // white
          "<span color='#ffffa5'>▅</span>", // yellow
          "<span color='#ffffa5'>▆</span>", // yellow
          "<span color='#ff9977'>▇</span>", // orange
          "<span color='#dd532e'>█</span>"  // red
     ]
},

"memory": {
    "format": "{:3}%  "
},

"temperature": {
    // "thermal-zone": 2,
    "hwmon-path": "/sys/class/hwmon/hwmon5/temp1_input",
    "critical-threshold": 60,
    "format-critical": "{temperatureC}°C {icon}",
    "format": "{temperatureC}°C {icon}",
    "format-icons": ["" ,"", "", "", ""]
},

"battery": {
    "states": {
        "warning": 30,
        "critical": 15
    },
    "format": "{capacity}% {icon} {time}",
    "format-charging": "{capacity}%  {time}",
    "format-plugged": "{capacity}%  {time}",
    "format-icons": [" ", " ", " ", " ", " "],
    "format-time": "{H}:{m}",
    "interval" : 3
},

"network": {
    "format-wifi": "{essid} ({signalStrength}%)  ",
    "format-ethernet": "{ipaddr}/{cidr} 󰈀 ",
    "tooltip-format": "{ifname} via {gwaddr} 󰔧 ",
    "format-linked": "{ifname} (No IP)  ",
    "format-disconnected": "Disconnected ⚠",
    "format-alt": "{ifname}: {ipaddr}/{cidr}"
},

"niri/workspaces": {
    "format": "{icon}",
    "format-icons": {
                // Named workspaces
                // (you need to configure them in niri)
                // Icons by state
                "active": "",
                "default": ""
          }
},
"custom/orgclock": {
    "exec": "/home/innocentzero/.config/waybar/orgclock.sh",
    "interval": 60

}
// end brace lmao
}

XDG Desktop Portal

[preferred]
default=gnome;
org.freedesktop.impl.portal.Access=gnome;
org.freedesktop.impl.portal.Secret=gnome-keyring;

Zathura

set recolor-darkcolor "#eeeeee"
set recolor-lightcolor "#0a0a0a"
set statusbar-bg "#0a0a0a"
set recolor-keephue true
map i recolor
Tags: config

Other posts
Creative Commons License
This website by Md Isfarul Haque is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.