{ config, lib, osConfig, ... }: let cfg = config.myConfig.shell; in { options.myConfig.shell = { bash.enable = lib.mkEnableOption ""; zsh.enable = lib.mkEnableOption ""; starship.enable = lib.mkEnableOption ""; nixAliases = { enable = lib.mkEnableOption ""; nix-helper.enable = lib.mkEnableOption ""; }; improvedCommands.enable = lib.mkEnableOption ""; direnv.enable = lib.mkEnableOption ""; }; config = { assertions = [ { assertion = if cfg.nixAliases.nix-helper.enable then osConfig.myConfig.nix-helper.enable else true; message = "The nix-helper has to be enabled on the OS level."; } ]; programs.bash.enable = cfg.bash.enable; programs.zsh.enable = cfg.zsh.enable; programs.starship = lib.mkIf cfg.starship.enable { enable = true; enableBashIntegration = cfg.bash.enable; enableZshIntegration = cfg.zsh.enable; settings = { cmd_duration.disabled = true; directory = { truncation_length = 0; truncation_symbol = "…/"; truncate_to_repo = false; }; }; }; home.shellAliases = let nixAliases = lib.mkIf cfg.nixAliases.enable { nr = if cfg.nixAliases.nix-helper.enable then "nh os" else "sudo nixos-rebuild --flake $FLAKE"; nrs = "nr switch"; nrt = "nr test"; nrb = "nr boot"; nrrb = "nrb && reboot"; nu = "sudo nix flake update"; }; commandAliases = lib.mkIf cfg.improvedCommands.enable { cat = "bat -p"; }; in lib.mkMerge [nixAliases commandAliases]; programs.lsd = lib.mkIf cfg.improvedCommands.enable { enable = true; enableAliases = true; }; programs.bat.enable = cfg.improvedCommands.enable; programs.fzf.enable = cfg.improvedCommands.enable; programs.zoxide = lib.mkIf cfg.improvedCommands.enable { enable = true; options = ["--cmd cd"]; }; programs.direnv = lib.mkIf cfg.direnv.enable { enable = true; nix-direnv.enable = true; config.global.hide_env_diff = true; }; }; }