diff --git a/modules/default.nix b/modules/default.nix
index f82cfdbbc..7c67887cb 100644
--- a/modules/default.nix
+++ b/modules/default.nix
@@ -35,6 +35,7 @@ let
     ./programs/info.nix
     ./programs/lesspipe.nix
     ./programs/man.nix
+    ./programs/neovim.nix
     ./programs/rofi.nix
     ./programs/ssh.nix
     ./programs/termite.nix
diff --git a/modules/misc/news.nix b/modules/misc/news.nix
index 44b9d7f59..b177d6ce4 100644
--- a/modules/misc/news.nix
+++ b/modules/misc/news.nix
@@ -442,6 +442,12 @@ in
           December 6, 2017.
         '';
       }
+      {
+        time = "2017-11-12T00:18:59+00:00";
+        message = ''
+          A new program module is available: 'programs.neovim'.
+        '';
+      }
     ];
   };
 }
diff --git a/modules/programs/neovim.nix b/modules/programs/neovim.nix
new file mode 100644
index 000000000..8e0663f60
--- /dev/null
+++ b/modules/programs/neovim.nix
@@ -0,0 +1,74 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+
+  cfg = config.programs.neovim;
+
+in
+
+{
+  options = {
+    programs.neovim = {
+      enable = mkEnableOption "Neovim";
+
+      withPython = mkOption {
+        type = types.bool;
+        default = true;
+        description = ''
+          Enable Python 2 provider. Set to <literal>true</literal> to
+          use Python 2 plugins.
+        '';
+      };
+
+      extraPythonPackages = mkOption {
+        type = types.listOf types.package;
+        default = [ ];
+        example = literalExample "with pkgs.python2Packages; [ pandas jedi ]";
+        description = ''
+          List here Python 2 packages required for your plugins to
+          work.
+        '';
+      };
+
+      withRuby = mkOption {
+        type = types.nullOr types.bool;
+        default = true;
+        description = ''
+          Enable ruby provider.
+        '';
+      };
+
+      withPython3 = mkOption {
+        type = types.bool;
+        default = true;
+        description = ''
+          Enable Python 3 provider. Set to <literal>true</literal> to
+          use Python 3 plugins.
+        '';
+      };
+
+      extraPython3Packages = mkOption {
+        type = types.listOf types.package;
+        default = [ ];
+        example = literalExample
+          "with pkgs.python3Packages; [ python-language-server ]";
+        description = ''
+          List here Python 3 packages required for your plugins to work.
+        '';
+      };
+    };
+  };
+
+  config = mkIf cfg.enable {
+    home.packages = [
+      (pkgs.neovim.override {
+        inherit (cfg)
+          extraPython3Packages withPython3
+          extraPythonPackages withPython
+          withRuby;
+      })
+    ];
+  };
+}