loadout/alacritty/default.nix
2024-01-06 13:29:11 +01:00

64 lines
1.6 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 __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" ''
# TODO this might break things, especially if the machine is not using
# nvidia, but more investigation is needed. But it at least lets us get rid
# of nixGL.
export LD_LIBRARY_PATH=/usr/lib
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}"
'';
}