diff --git a/flake.nix b/flake.nix index 1468af3..ba3ad3e 100644 --- a/flake.nix +++ b/flake.nix @@ -29,6 +29,41 @@ }; overlay = fromHOL hoverlay { }; overlays = [ overlay ]; + nixosModule = { config, pkgs, lib, ... }: with lib; with attrsets; + let + cfg = config.services.xserver.windowManager.xmonad.flake; + comp = { inherit (cfg) prefix compiler; }; + in { + options = { + services.xserver.windowManager.xmonad.flake = with types; { + enable = mkEnableOption "flake"; + prefix = mkOption { + default = null; + type = nullOr string; + example = literalExpression "\"unstable\""; + description = '' + Specify a nested alternative pkgs by attrName. + ''; + }; + compiler = mkOption { + default = null; + type = nullOr string; + example = literalExpression "\"ghc922\""; + description = '' + Which compiler to build xmonad with. + Must be an attribute of pkgs.haskell.packages. + Sets to match. + ''; + }; + }; + }; + config = mkIf cfg.enable { + nixpkgs.overlays = [ (fromHOL hoverlay comp) ]; + services.xserver.windowManager.xmonad.haskellPackages = + getAttrFromPath (hpath comp) pkgs; + }; + }; + nixosModules = [ nixosModule ]; in flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system overlays; }; in @@ -37,5 +72,8 @@ packages = p: [ p.xmonad ]; }; defaultPackage = pkgs.haskellPackages.xmonad; - }) // { inherit hoverlay overlay overlays; lib = { inherit hpath fromHOL; }; }; + }) // { + inherit hoverlay overlay overlays nixosModule nixosModules; + lib = { inherit hpath fromHOL; }; + }; }