Make sh replacements overwrite replaced commands

Previously we only installed shell replacements, but it would be nice
if our drop-in replacements could replace the command so that we don't
need to remember to use them separately

Change-Id: Ie670c620b42ea4b4bf44bc28efb1ea936102fa60
Reviewed-on: https://git.clicks.codes/c/Chimera/NixFiles/+/415
Tested-by: Samuel Shuert <coded@clicks.codes>
Reviewed-by: Skyler Grey <minion@clicks.codes>
diff --git a/modules/home/shell/default.nix b/modules/home/shell/default.nix
index f03ad77..d7c65a5 100644
--- a/modules/home/shell/default.nix
+++ b/modules/home/shell/default.nix
@@ -14,13 +14,56 @@
     defaultAliases.enable = lib.mkEnableOption "Use sensible custom aliases";
     usefulPackages.enable = lib.mkEnableOption "Enable useful shell packages (ripgrep, wget, etc)";
     replacements = {
-      eza.enable = lib.mkEnableOption "Use eza instead of ls";
-      bfs.enable = lib.mkEnableOption "Use bfs instead of find";
-      ripgrep.enable = lib.mkEnableOption "Use ripgrep instead of grep";
-      htop.enable = lib.mkEnableOption "Use htop instead of top";
-      erdtree.enable = lib.mkEnableOption "Use erdtree instead of tree";
-      dust.enable = lib.mkEnableOption "Use dust instead of du";
-      bat.enable = lib.mkEnableOption "Use bat instead of cat";
+      defaultEnable = lib.mkEnableOption "Enable replacing everything by default";
+
+      eza.enable = lib.mkOption {
+        description = "Use eza instead of ls";
+        type = lib.types.bool;
+        default = config.chimera.shell.replacements.defaultEnable;
+        example = true;
+      };
+      bfs.enable = lib.mkOption {
+        description = "Use bfs instead of find";
+        type = lib.types.bool;
+        default = config.chimera.shell.replacements.defaultEnable;
+        example = true;
+      };
+      ripgrep.enable = lib.mkOption {
+        description = "Use ripgrep instead of grep";
+        type = lib.types.bool;
+        default = config.chimera.shell.replacements.defaultEnable;
+        example = true;
+      };
+      htop.enable = lib.mkOption {
+        description = "Use htop instead of top";
+        type = lib.types.bool;
+        default = config.chimera.shell.replacements.defaultEnable;
+        example = true;
+      };
+      erdtree.enable = lib.mkOption {
+        description = "Use erdtree instead of tree";
+        type = lib.types.bool;
+        default = config.chimera.shell.replacements.defaultEnable;
+        example = true;
+      };
+      dust.enable = lib.mkOption {
+        description = "Use dust instead of du";
+        type = lib.types.bool;
+        default = config.chimera.shell.replacements.defaultEnable;
+        example = true;
+      };
+      bat.enable = lib.mkOption {
+        description = "Use bat instead of cat";
+        type = lib.types.bool;
+        default = config.chimera.shell.replacements.defaultEnable;
+        example = true;
+      };
+      zoxide.enable = lib.mkOption {
+        description = "Use zoxide instead of cd";
+        type = lib.types.bool;
+        default = config.chimera.shell.replacements.defaultEnable;
+        example = true;
+      };
     };
   };
 
@@ -31,14 +74,41 @@
           "sudo nixos-rebuild switch --flake ${config.chimera.shell.rebuildFlakePath}";
       clr = "clear";
       edit = config.home.sessionVariables.EDITOR;
+      find = lib.mkIf config.chimera.shell.replacements.bat.enable "${pkgs.bfs}/bin/bfs";
+      grep = lib.mkIf config.chimera.shell.replacements.bat.enable "${config.programs.ripgrep.package}/bin/rg";
+      top = lib.mkIf config.chimera.shell.replacements.bat.enable "${config.programs.htop.package}/bin/htop";
+      tree = lib.mkIf config.chimera.shell.replacements.bat.enable "${pkgs.erdtree}/bin/erdtree";
+      du = lib.mkIf config.chimera.shell.replacements.bat.enable "${pkgs.dust}/bin/dust";
+      cat = lib.mkIf config.chimera.shell.replacements.bat.enable "${pkgs.bat}/bin/bat";
     };
 
-    programs = lib.mkIf config.chimera.shell.usefulPackages.enable {
-      tealdeer = {
+    programs.eza = lib.mkIf config.chimera.shell.replacements.eza.enable {
+      enable = true;
+      enableAliases = true;
+    };
+
+    programs.ripgrep = lib.mkIf config.chimera.shell.replacements.ripgrep.enable {
+      enable = true;
+      arguments = [ "--smart-case" ];
+    };
+
+    programs.htop = lib.mkIf config.chimera.shell.replacements.htop.enable {
+      enable = true;
+    };
+
+    programs.zoxide = lib.mkIf config.chimera.shell.replacements.zoxide.enable {
+      enable = true;
+      enableZshIntegration = config.chimera.shell.zsh.enable;
+      enableBashIntegration = config.chimera.shell.bash.enable;
+      options = [ "--cmd cd" ];
+    };
+
+    programs.tealdeer = lib.mkIf config.chimera.shell.usefulPackages.enable {
         enable = true;
         settings.updates.autoupdate = true;
-      };
-      jq.enable = true;
+    };
+    programs.jq = lib.mkIf config.chimera.shell.usefulPackages.enable {
+      enable = true;
     };
 
     home.packages =
@@ -52,13 +122,12 @@
             pkgs.sd
             pkgs.tokei
             pkgs.hyperfine
+            pkgs.tmux
           ]
         else
           [ ]
       )
-      ++ (if config.chimera.shell.replacements.eza.enable then [ pkgs.eza ] else [ ])
       ++ (if config.chimera.shell.replacements.bfs.enable then [ pkgs.bfs ] else [ ])
-      ++ (if config.chimera.shell.replacements.ripgrep.enable then [ pkgs.ripgrep ] else [ ])
       ++ (if config.chimera.shell.replacements.htop.enable then [ pkgs.htop ] else [ ])
       ++ (if config.chimera.shell.replacements.erdtree.enable then [ pkgs.erdtree ] else [ ])
       ++ (if config.chimera.shell.replacements.dust.enable then [ pkgs.dust ] else [ ])