{config, lib, ...}: let cfg = config.sharedPrograms; in { options.sharedPrograms = { enable = lib.mkEnableOption "enable all basic programs with Stylix auto-theming"; bat.enable = lib.mkEnableOption "enable bat (cat replacement)"; fzf.enable = lib.mkEnableOption "enable fzf (fuzzy finder)"; btop.enable = lib.mkEnableOption "enable btop (system monitor)"; mpv.enable = lib.mkEnableOption "enable mpv (media player)"; wofi.enable = lib.mkEnableOption "enable wofi (application launcher)"; foot.enable = lib.mkEnableOption "enable foot (terminal emulator)"; }; config = lib.mkMerge [ # When sharedPrograms.enable is true, enable all programs (lib.mkIf cfg.enable { sharedPrograms.bat.enable = lib.mkDefault true; sharedPrograms.fzf.enable = lib.mkDefault true; sharedPrograms.btop.enable = lib.mkDefault true; sharedPrograms.mpv.enable = lib.mkDefault true; sharedPrograms.wofi.enable = lib.mkDefault true; sharedPrograms.foot.enable = lib.mkDefault true; }) # Individual program configurations (lib.mkIf cfg.bat.enable { programs.bat.enable = true; }) (lib.mkIf cfg.fzf.enable { programs.fzf = { enable = true; enableZshIntegration = true; }; }) (lib.mkIf cfg.btop.enable { programs.btop.enable = true; }) (lib.mkIf cfg.mpv.enable { programs.mpv.enable = true; }) (lib.mkIf cfg.wofi.enable { programs.wofi.enable = true; }) (lib.mkIf cfg.foot.enable { programs.foot = { enable = true; settings = { main = { pad = "4x4"; }; }; }; }) ]; }