{ pkgs, lib, config, ... }: let cfg = config.programs.bash; in { config = { programs = { bash = { enable = true; bashrcExtra = '' shopt -s expand_aliases shopt -s histappend ''; historySize = 100000; historyFile = "${config.xdg.stateHome}/shell_history"; historyFileSize = 100000; # TODO Check out Atuin historyControl = [ "erasedups" "ignoredups" "ignorespace" ]; }; zsh = { enable = true; autosuggestion.enable = true; enableCompletion = true; syntaxHighlighting.enable = true; historySubstringSearch.enable = true; initExtra = builtins.readFile ./zshrc.sh; defaultKeymap = "viins"; history = { size = cfg.historySize; save = cfg.historyFileSize; path = cfg.historyFile; expireDuplicatesFirst = true; }; shellAliases = cfg.shellAliases; }; }; }; }