{ lib, pkgs, config, ... }: let programName = "zsh"; programAssets = ../../../assets/system/conf/${programName}; # Read the config file that will be injected into Zsh zshInitFile = "${programAssets}/zsh.conf"; # Toggle for this module enableProgram = config.enableZsh or false; # User reference username = config.defaultUser or "henrov"; in { # Top-level toggle options.enableZsh = lib.mkEnableOption "Enable Zsh terminal with Oh-My-Zsh"; # Only apply configuration if enabled config = lib.mkIf enableProgram { # Install Zsh system-wide environment.systemPackages = [ pkgs.zsh ]; # Enable Zsh + Oh-My-Zsh programs.zsh.enable = true; programs.zsh.ohMyZsh.enable = true; programs.zsh.ohMyZsh.theme = "catppuccin-mocha"; programs.zsh.ohMyZsh.plugins = [ "git" "docker" "direnv" "zsh-autosuggestions" "zsh-completions" "zsh-history-substring-search" ]; # Use the contents of zsh.conf as shellInit programs.zsh.shellInit = builtins.readFile zshInitFile; }; }