{self, ...}: {
  programs.zoxide = {
    enable = true;
    enableZshIntegration = true;
  };
  programs.zsh = {
    enable = true;

    sessionVariables = {
      SOUNDS_ENABLED = "1";
      EDITOR = "/nixbin/nvim";
      SUDO_EDITOR = "/nixbin/nvim";
      VISUAL = "/nixbin/nvim";
      LANG = "en_US.UTF-8";
      BROWSER = "/nixbin/firefox";
      NVIM = "${self}/nixvim/config/";
      HYPRCONF = "${self}/hyprland/";
      SYSCONF = "${self}/glasshouse-desktop/sys";
    };

    oh-my-zsh = {
      enable = true;
      plugins = ["git" "fzf"];
    };

    enableCompletion = true;
    history = {
      path = "$HOME/.zsh_history";
      save = 10000;
      size = 10000;
      share = true;
    };

    autosuggestion = {
      enable = true;
      highlight = "fg=#4C566A,underline";
    };

    shellAliases = {
      grep = "grep --color=auto";
      yazi = "y";
      vi = "nvim";
      mv = "mv -v";
      cp = "cp -vr";
      gt = "gtrash";
      gtp = "gtrash put";
      grub-update = "sudo grub-mkconfig -o /boot/grub/grub.cfg";
      sr = "source ~/.zshrc";
      ".." = "cd ..";
      rm = "echo 'use \"gtp\" instead'";
      psg = "ps aux | grep -v grep | grep -i -e VSZ -e";
      mkdir = "mkdir -p";
      pk = "pkill -9 -f";
      zrc = "nvim $HOME/dots/zshell.nix";
      svcu = "systemctl --user";
      svc = "sudo systemctl";
      hyprconf = "nvim $HOME/dots/hyprland/config.nix";
      nixconf = "nvim $HOME/sysflakes/glasshouse-desktop/sys";
      hmconf = "nvim $HOME/sysflakes/glasshouse-desktop/home";
      viflake = "nvim flake.nix";
      nvimcfg = "nvim $HOME/dots/nixvim/config";
    };
    initExtra = ''

      unalias ls
      ls() {
      	eza -1 --group-directories-first --icons "$@"
      	scheck && runbg aplay ${self}/media/sound/ls.wav
      }

      y() {
      	local tmp="$(mktemp -t "yazi-cwd.XXXXXX")"
      	yazi "$@" --cwd-file="$tmp"
      	if cwd="$(command cat -- "$tmp")" && [ -n "$cwd" ] && [ "$cwd" != "$PWD" ]; then
      		builtin cd -- "$cwd"
      	fi
      	rm -f -- "$tmp"
      }

      cd() {
      	export SOUNDS_ENABLED=0
      	eza -1 --group-directories-first --icons "$@"
      	builtin cd "$@" || exit
      	export SOUNDS_ENABLED=1
      	scheck && runbg aplay ${self}/media/sound/cd.wav
      }
      if [ ! -e $HOME/.zsh_history ]; then
      	touch $HOME/.zsh_history
      	chmod 600 $HOME/.zsh_history
      fi
      setopt APPEND_HISTORY     # Append history to the history file (don't overwrite)
      setopt INC_APPEND_HISTORY # Append to the history file incrementally
      setopt SHARE_HISTORY      # Share history between all zsh sessions

      sessionVariables = {
      setopt CORRECT
      setopt NO_NOMATCH
      setopt LIST_PACKED
      setopt ALWAYS_TO_END
      setopt GLOB_COMPLETE
      setopt COMPLETE_ALIASES
      setopt COMPLETE_IN_WORD
      setopt AUTO_CD
      setopt AUTO_CONTINUE
      setopt LONG_LIST_JOBS
      setopt HIST_VERIFY
      setopt SHARE_HISTORY
      setopt HIST_IGNORE_SPACE
      setopt HIST_SAVE_NO_DUPS
      setopt HIST_IGNORE_ALL_DUPS
      setopt EXTENDED_GLOB
      setopt TRANSIENT_RPROMPT
      setopt INTERACTIVE_COMMENTS

      autoload -U compinit     # completion
      autoload -U terminfo     # terminfo keys
      zmodload -i zsh/complist # menu completion
      autoload -U promptinit   # prompt

      autoload -U up-line-or-beginning-search; zle -N up-line-or-beginning-search
      autoload -U down-line-or-beginning-search; zle -N down-line-or-beginning-search

      bindkey -v
      type starship_zle-keymap-select >/dev/null || \
      {
      	eval "$(starship init zsh)"
      }
      unalias ls
      clear
      splash
      scheck && runbg aplay ${self}/media/sound/sh-source.wav
    '';
  };
}
