diff --git a/modules/nixos/programs/kiwmi.nix b/modules/nixos/programs/kiwmi.nix
new file mode 100644
index 00000000..ac9ab49c
--- /dev/null
+++ b/modules/nixos/programs/kiwmi.nix
@@ -0,0 +1,33 @@
+{ config, options, lib, pkgs, ... }:
+
+let
+ cfg = config.programs.kiwmi;
+
+ package = cfg.package.override { inherit extraOptions; };
+in {
+ options.programs.kiwmi = {
+ enable = lib.mkEnableOption "Kiwmi, a fully programmable Wayland compositor";
+ package = lib.mkOption {
+ description = "The package containing the kiwmi and kiwmic.";
+ type = lib.types.package;
+ default = pkgs.kiwmi;
+ };
+ extraOptions = lib.mkOption {
+ description = "Command line arguments passed to Kiwmi.";
+ type = with lib.types; listOf str;
+ default = [ ];
+ defaultText = "[ ]";
+ example = [ "-c" "./config/kiwmi/init.lua" ];
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ environment.systemPackages = [ package ];
+ services.xserver.displayManager.sessionPackages = [ package ];
+
+ xdg.portal = {
+ enable = true;
+ extraPortal = [ pkgs.xdg-desktop-portal-wlr ];
+ };
+ };
+}