From fa498ca7289d8cd9b2545d74ec431e251e0eda31 Mon Sep 17 00:00:00 2001
From: "L. S. Leary" <LSLeary@users.noreply.github.com>
Date: Wed, 20 Apr 2022 05:38:22 +1200
Subject: [PATCH] flake.nix: Provide a NixOS module corresponding to that of
 the xmonad (core) flake.

---
 flake.nix | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/flake.nix b/flake.nix
index f3751535..04a5da34 100644
--- a/flake.nix
+++ b/flake.nix
@@ -6,13 +6,24 @@
     xmonad.url = github:xmonad/xmonad;
   };
   outputs = { self, flake-utils, nixpkgs, git-ignore-nix, xmonad }:
+  with xmonad.lib;
   let
     hoverlay = final: prev: hself: hsuper: {
       xmonad-contrib = hself.callCabal2nix "xmonad-contrib"
         (git-ignore-nix.lib.gitignoreSource ./.) { };
     };
-    overlay = xmonad.lib.fromHOL hoverlay { };
+    overlay = fromHOL hoverlay { };
     overlays = xmonad.overlays ++ [ overlay ];
+    nixosModule = { config, lib, ... }: with lib;
+      let
+        cfg = config.services.xserver.windowManager.xmonad;
+        comp = { inherit (cfg.flake) prefix compiler; };
+      in {
+        config = mkIf (cfg.flake.enable && cfg.enableContribAndExtras) {
+          nixpkgs.overlays = [ (fromHOL hoverlay comp) ];
+        };
+      };
+    nixosModules = xmonad.nixosModules ++ [ nixosModule ];
   in flake-utils.lib.eachDefaultSystem (system:
   let
     pkgs = import nixpkgs { inherit system overlays; };
@@ -27,5 +38,5 @@
       nativeBuildInputs = [ pkgs.cabal-install ];
     });
     defaultPackage = pkgs.haskellPackages.xmonad-contrib;
-  }) // { inherit hoverlay overlay overlays; } ;
+  }) // { inherit hoverlay overlay overlays nixosModule nixosModules; } ;
 }