user/settings/zsh.nix (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | { config
, lib
, pkgs
, ...
}:
let
inherit (pkgs) stdenv;
zshrc = ".config/zsh/.zshrc";
mkZshPlugin = attrs@{ name, file ? "${name}.plugin.zsh", ... }: {
inherit name file;
src = stdenv.mkDerivation {
inherit (attrs) src;
name = "zsh-plugin-${attrs.name}";
buildInputs = [ pkgs.zsh ];
buildPhase = ''
zsh -c 'for f in **/*.zsh; zcompile "$f"'
'';
installPhase = ''
cp -a $PWD $out/
'';
};
};
in
{
home.packages = with pkgs; [
zsh-completions
];
home.sessionVariables = {
GHQ_ROOT = lib.mkDefault "${config.home.homeDirectory}/projects";
};
programs.zsh = {
enable = true;
enableAutosuggestions = true;
enableCompletion = true;
defaultKeymap = "emacs";
dotDir = ".config/zsh";
history = {
expireDuplicatesFirst = true;
extended = true;
path = "${config.home.homeDirectory}/.local/share/zsh/history";
save = 200000;
size = 100000;
share = false;
ignorePatterns = [
"rm *"
"trash *"
"pkill *"
"* aria2c *"
];
};
localVariables = {
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE = "fg=8";
};
plugins = map mkZshPlugin [
{
name = "zsh-bd";
file = "bd.plugin.zsh";
src = pkgs.zsh-bd.src;
}
{
name = "zsh-autopair";
src = pkgs.zsh-autopair.src;
}
{
name = "anyframe";
src = pkgs.fetchFromGitHub {
owner = "mollifier";
repo = "anyframe";
rev = "598675303044df8e9d04722f3adff4f63a238922";
# date = 2017-07-19T21:59:49+09:00;
sha256 = "08bjm1dd2mpv8rk8x6yvm6gj490rgimmiq7ln4jr5hik2k3mm82r";
};
}
{
name = "zsh-powerlevel10k";
src = pkgs.zsh-powerlevel10k.src;
file = "dummy";
}
];
# Put this in /etc/paths.d/ on Darwin instead
envExtra = lib.optionalString (!stdenv.isDarwin) ''
if [[ ''${path[(I)$HOME/.local/bin ]} ]]
then
path=($HOME/.local/bin $path)
fi
'';
initExtraFirst = ''
if [[ $TERM != "dumb" ]]
then
if [[ -r "${config.xdg.cacheHome}/p10k-instant-prompt-''${(%):-%n}.zsh" ]]; then
source "${config.xdg.cacheHome}/p10k-instant-prompt-''${(%):-%n}.zsh"
fi
typeset -g POWERLEVEL9K_DISABLE_CONFIGURATION_WIZARD=true
source $ZDOTDIR/plugins/zsh-powerlevel10k/powerlevel10k.zsh-theme
fi
'';
initExtra =
''
typeset -T GHQ_ROOT ghq_root
function hist-freq-subcommands () {
fc -l -m "$1*" -10000 | cut -d' ' -f4- | sort | uniq -c | sort -gr | head -n100 | less
}
source ${pkgs.fzf}/share/fzf/key-bindings.zsh
source ${pkgs.fzf}/share/fzf/completion.zsh
''
+ builtins.readFile ../zsh/zshrc
+ (
if stdenv.isDarwin
then builtins.readFile ../zsh/zshrc.darwin
else ""
);
};
home.file."${config.xdg.configHome}/zsh/.p10k.zsh".source = ../zsh/p10k.zsh;
}
|