92 lines
2.4 KiB
Nix
92 lines
2.4 KiB
Nix
{
|
|
|
|
config,
|
|
zsh,
|
|
|
|
pkgs ? (import ../pkgs.nix).edge {},
|
|
|
|
}: 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 "$@"
|
|
'';
|
|
|
|
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);
|
|
};
|
|
|
|
configFile = pkgs.writeText "alacritty-config" (
|
|
builtins.replaceStrings
|
|
["$HINTS"]
|
|
[(builtins.toJSON hints)]
|
|
(builtins.readFile ./alacritty.yml)
|
|
);
|
|
|
|
shellEntrypoint = pkgs.writeShellScript "alacritty-shell-entrypoint" ''
|
|
exec ${alacrittyUnwrap} "${zsh}/bin/zsh" "$@"
|
|
'';
|
|
|
|
alacritty = pkgs.writeShellScriptBin "alacritty" ''
|
|
set -e -x
|
|
|
|
host_ld_lib_path="$(
|
|
ldconfig -v 2>/dev/null \
|
|
| grep -v ^$'\t' \
|
|
| tr -s ':\n' ':' \
|
|
| head -c-1 \
|
|
)"
|
|
|
|
bin_ld_lib_path="$(
|
|
objdump -x ${pkgs.alacritty}/bin/alacritty \
|
|
| grep "RUNPATH" \
|
|
| awk '{print $2}' \
|
|
)"
|
|
|
|
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
|
|
)"
|
|
|
|
# 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} \
|
|
-e "${shellEntrypoint}"
|
|
'';
|
|
}
|