{ config, zsh, pkgs ? (import ../pkgs.nix).stable {}, }: rec { defaultXDGOpenRules = [ { name = "open-url"; pattern = "(ipfs:|ipns:|magnet:|mailto:|gemini:|gopher:|https:|http:|news:|file:|git:|ssh:|ftp:)[^<>\"\\s{-}\\^⟨⟩`]+"; xdgOpen = "$1"; } ]; xdgOpenRules = defaultXDGOpenRules ++ config.alacritty.xdgOpenRules; alacrittyUnwrap = pkgs.writeShellScript "alacritty-unwrap" '' unset LD_LIBRARY_PATH unset LIBGL_DRIVERS_PATH unset LIBVA_DRIVERS_PATH unset __EGL_VENDOR_LIBRARY_DIRS exec "$@" ''; hintsFileBody = { hints = { enabled = (builtins.map (r: { regex = r.pattern; hyperlinks = true; command = (pkgs.writeShellScript "alacritty-hints-${r.name}" '' ${alacrittyUnwrap} xdg-open "${r.xdgOpen}" ''); post_processing = true; mouse.enabled = true; } ) xdgOpenRules); }; }; hintsFile = (pkgs.formats.toml {}).generate "alacritty-hints.toml" hintsFileBody; configFile = { colorsFile, }: pkgs.writeText "alacritty-config" ( builtins.replaceStrings ["$HINTS_FILE" "$COLORS_FILE"] ["${hintsFile}" "${colorsFile}"] (builtins.readFile ./alacritty.toml) ); shellEntrypoint = pkgs.writeShellScript "alacritty-shell-entrypoint" '' exec ${alacrittyUnwrap} "${zsh}/bin/zsh" "$@" ''; mkAlacritty = { name ? "alacritty", colorsFile ? ./colors-dark.toml, }: pkgs.writeShellScriptBin name '' set -e -x source "${pkgs.ldUtils}" host_ld_lib_path="$(host_ld_lib_path)" host_dri_path="$( echo "$host_ld_lib_path" \ | tr -s ':' '\n' \ | while read d; do if [ -d "$d/dri" ]; then echo "$d"/dri; fi; done \ | tr '\n' ':' \ | head -c-1 )" bin_ld_lib_path="$(bin_ld_lib_path "${pkgs.alacritty}/bin/alacritty")" # overwrite LD_LIBRARY_PATH such that the binary's ld search path is still # searched first, but afterwards the host's ld search path is looked # through. Similarly, the dri paths are set to be the hosts. This allows us # to use the host's graphics drivers for alacritty. export LD_LIBRARY_PATH="$bin_ld_lib_path":"$host_ld_lib_path" export LIBGL_DRIVERS_PATH="$host_dri_path" export LIBVA_DRIVERS_PATH="$host_dri_path" export __EGL_VENDOR_LIBRARY_DIRS=/usr/share/glvnd/egl_vendor.d exec ${pkgs.alacritty}/bin/alacritty \ -o font.size=${builtins.toString config.alacritty.fontSize} \ --config-file ${configFile { inherit colorsFile; }} \ -e "${shellEntrypoint}" ''; alacritty = mkAlacritty {}; alacrittyLight = mkAlacritty { name = "alacritty-light"; colorsFile = ./colors-light.toml; }; }