diff --git a/modules/programs/bash.nix b/modules/programs/bash.nix
index f9ad47494..3d4496f76 100644
--- a/modules/programs/bash.nix
+++ b/modules/programs/bash.nix
@@ -99,6 +99,17 @@ in
         '';
       };
 
+      bashrcExtra = mkOption {
+        # Hide for now, may want to rename in the future.
+        visible = false;
+        default = "";
+        type = types.lines;
+        description = ''
+          Extra commands that should be added to
+          <filename>~/.bashrc</filename>.
+        '';
+      };
+
       initExtra = mkOption {
         default = "";
         type = types.lines;
@@ -139,6 +150,25 @@ in
         mapAttrsToList export (cfg.sessionVariables // globalEnvVars)
       );
     in mkIf cfg.enable {
+      programs.bash.bashrcExtra = ''
+        # Commands that should be applied only for interactive shells.
+        if [[ -n $PS1 ]]; then
+          ${export "HISTSIZE" cfg.historySize}
+          ${export "HISTFILESIZE" cfg.historyFileSize}
+          ${exportIfNonEmpty "HISTCONTROL" histControlStr}
+          ${exportIfNonEmpty "HISTIGNORE" histIgnoreStr}
+
+          ${shoptsStr}
+
+          ${aliasesStr}
+
+          ${cfg.initExtra}
+
+          ${optionalString cfg.enableAutojump
+            ". ${pkgs.autojump}/share/autojump/autojump.bash"}
+        fi
+      '';
+
       home.file.".bash_profile".text = ''
         # -*- mode: sh -*-
 
@@ -160,22 +190,7 @@ in
       home.file.".bashrc".text = ''
         # -*- mode: sh -*-
 
-        # Skip if not running interactively.
-        [ -z "$PS1" ] && return
-
-        ${export "HISTSIZE" cfg.historySize}
-        ${export "HISTFILESIZE" cfg.historyFileSize}
-        ${exportIfNonEmpty "HISTCONTROL" histControlStr}
-        ${exportIfNonEmpty "HISTIGNORE" histIgnoreStr}
-
-        ${shoptsStr}
-
-        ${aliasesStr}
-
-        ${cfg.initExtra}
-
-        ${optionalString cfg.enableAutojump
-          ". ${pkgs.autojump}/share/autojump/autojump.bash"}
+        ${cfg.bashrcExtra}
       '';
 
       home.packages =