diff --git a/config/common.nix b/config/common.nix
index 45b622b26700dee6bb5e4e62d2fc7ae1f85b8604..395d7dfafd9772da088e50401a3472a811cbdd6c 100644
--- a/config/common.nix
+++ b/config/common.nix
@@ -1250,6 +1250,20 @@
                     };
                   };
                 };
+                ruby = lib.mkOption {
+                  type = lib.types.submodule {
+                    options = {
+                      enabled = lib.mkOption {
+                        type = lib.types.bool;
+                        default = false;
+                        example = true;
+                        description = ''
+                          Whether or not ruby has been installed.
+                        '';
+                      };
+                    };
+                  };
+                };
                 nodejs = lib.mkOption {
                   type = lib.types.submodule {
                     options = {
diff --git a/pkgs/dev/default.nix b/pkgs/dev/default.nix
index 2a1845f116e894de334e93a53742295e970f608e..a42440680ea7247a0cb266b88801e30bc0e3caef 100644
--- a/pkgs/dev/default.nix
+++ b/pkgs/dev/default.nix
@@ -3,6 +3,7 @@
     ./config.nix
     ./git
     ./python
+    ./ruby
     ./gnumake
     ./pudb
     ./nodejs
diff --git a/pkgs/dev/ruby/config.nix b/pkgs/dev/ruby/config.nix
new file mode 100644
index 0000000000000000000000000000000000000000..a1111d0cfe9d0c3af45a1e35ff85fa10a8328ff6
--- /dev/null
+++ b/pkgs/dev/ruby/config.nix
@@ -0,0 +1,4 @@
+{ config, ... }:
+{
+  config.provides.dev.ruby.enabled = true;
+}
diff --git a/pkgs/dev/ruby/default.nix b/pkgs/dev/ruby/default.nix
new file mode 100644
index 0000000000000000000000000000000000000000..5543899acbd1bf0013f42d6b0e746ebbbc6e113c
--- /dev/null
+++ b/pkgs/dev/ruby/default.nix
@@ -0,0 +1,11 @@
+{ pkgs, ... }:
+{
+  imports = [
+    ../common.nix
+    ./config.nix
+  ];
+
+  environment.systemPackages = with pkgs; [
+    ruby_3_1
+  ];
+}