Files
nix/packages/devkit/zsh/default.nix

61 lines
1.8 KiB
Nix

{
symlinkJoin,
makeWrapper,
pkgs,
lib,
zsh ? pkgs.zsh,
addPath ? [],
# .zshrc
zshrc-prepend ? "",
zshrc-append ? "",
}: let
zsh-syntax-highlighting = "${pkgs.zsh-syntax-highlighting}/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh";
zsh-autosuggestions = "${pkgs.zsh-autosuggestions}/share/zsh-autosuggestions/zsh-autosuggestions.zsh";
zshrc-prepend-file = pkgs.writeText ".zshrc_prepend" zshrc-prepend;
zshrc-append-file = pkgs.writeText ".zshrc_append" zshrc-append;
drv = symlinkJoin ({
paths = pkgs.writeShellScriptBin "zsh" ''
${
if (builtins.length addPath) > 0
then "export PATH=\"$PATH:${lib.makeBinPath addPath}\""
else ""
}
${lib.getExe zsh} "$@"
'';
nativeBuildInputs = [makeWrapper];
postBuild = ''
wrapProgram $out/bin/zsh \
--set-default 'ZSH_PLUGIN_SYNTAXHIGHLIGHING' '${zsh-syntax-highlighting}' \
--set-default 'ZSH_PLUGIN_AUTOSUGGESTIONS' '${zsh-autosuggestions}' \
--set-default 'ZSHRC_PREPEND' '${zshrc-prepend-file}' \
--set-default 'ZSHRC_APPEND' '${zshrc-append-file}' \
--set-default 'ZDOTDIR' '${./.}'
'';
}
// {inherit (zsh) name pname meta man;});
in
pkgs.stdenv.mkDerivation (rec {
name = drv.name;
pname = drv.pname;
buildCommand = let
desktopEntry = pkgs.makeDesktopItem {
name = pname;
desktopName = name;
exec = "${lib.getExe drv}";
terminal = true;
};
in ''
mkdir -p $out/bin
cp ${lib.getExe drv} $out/bin
mkdir -p $out/share/applications
cp ${desktopEntry}/share/applications/${pname}.desktop $out/share/applications/${pname}.desktop
'';
}
// {inherit (zsh) meta man;})