{ pkgs, lib, config, ... }: { options = { zsh.jump = { enable = lib.mkEnableOption "enables jump in zsh"; show-destination = lib.mkEnableOption "Echoes the folder jump changed to after jumping"; }; zsh.extraLines = lib.mkOption { type = lib.types.listOf lib.types.str; default = [ ]; description = "List of extra commands to run on zsh init"; }; zsh.histFile = lib.mkOption { type = lib.types.str; default = "$HOME/.zsh_history"; description = "Path to the zsh history file"; }; zsh.direnv = lib.mkEnableOption "Enable direnv hook"; }; config = { programs.lsd.enable = true; programs.zsh.enable = true; programs.zsh.enableCompletion = true; programs.zsh.dotDir = ".config/zsh"; programs.zsh.autosuggestion = { enable = true; }; programs.zsh.syntaxHighlighting = { enable = true; }; programs.zsh.history.path = config.zsh.histFile; programs.zsh.shellAliases = { ls = "lsd"; nix-rebuild = "nixos-rebuild --use-remote-sudo switch --flake /etc/nixos"; nd = "nix develop -c zsh"; }; programs.zsh.oh-my-zsh = { enable = true; theme = "robbyrussell"; plugins = [ "git" "sudo" ]; }; # programs.zsh.initExtra = lib.concatStringsSep "\n" ([ # "echo zsh" # ] ++ lib.lists.optionals config.zsh.jump.enable # "eval"); programs.zsh.initExtra = lib.concatStringsSep "\n" ( # Add any extra lines to the zsh config config.zsh.extraLines ++ # Add jump shell script to list if jump is enabled ( if config.zsh.jump.show-destination then [ "eval \"$(jump shell zsh --bind=z)\"" '' j() { z $1; echo $(pwd) } '' ] else [ "eval \"$(jump shell zsh)\"" ] ) ++ ( if config.zsh.direnv then [ "eval \"$(direnv hook zsh)\"" ] else [ ] ) # ++ # ( # if config.programs.nix-index.enable && config.programs.nix-index.enableZshIntegration then # [ "source ${pkgs.nix-index}/etc/profile.d/command-not-found.sh" ] # else # [] # ) ); }; }