diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 8eb769e96..57b502368 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -484,6 +484,8 @@ Makefile @thiagokokada
/modules/services/window-managers/bspwm @ncfavier
/tests/modules/services/window-managers/bspwm @ncfavier
+/modules/services/window-managers/fluxbox.nix @AndersonTorres
+
/modules/services/window-managers/herbstluftwm @olmokramer
/tests/modules/services/window-managers/herbstluftwm @olmokramer
diff --git a/modules/misc/news.nix b/modules/misc/news.nix
index 7253b1ad2..b22d76596 100644
--- a/modules/misc/news.nix
+++ b/modules/misc/news.nix
@@ -696,6 +696,14 @@ in
A new module is available: 'programs.gallery-dl'.
'';
}
+
+ {
+ time = "2022-09-21T22:42:42+00:00";
+ condition = hostPlatform.isLinux;
+ message = ''
+ A new module is available: 'xsession.windowManager.fluxbox'.
+ '';
+ }
];
};
}
diff --git a/modules/modules.nix b/modules/modules.nix
index 2c1e66019..5b01c9ea3 100644
--- a/modules/modules.nix
+++ b/modules/modules.nix
@@ -276,6 +276,7 @@ let
./services/volnoti.nix
./services/window-managers/awesome.nix
./services/window-managers/bspwm/default.nix
+ ./services/window-managers/fluxbox.nix
./services/window-managers/herbstluftwm.nix
./services/window-managers/i3-sway/i3.nix
./services/window-managers/i3-sway/sway.nix
diff --git a/modules/services/window-managers/fluxbox.nix b/modules/services/window-managers/fluxbox.nix
new file mode 100644
index 000000000..ec58faf5f
--- /dev/null
+++ b/modules/services/window-managers/fluxbox.nix
@@ -0,0 +1,127 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+
+ cfg = config.xsession.windowManager.fluxbox;
+
+in {
+ meta.maintainers = [ maintainers.AndersonTorres ];
+
+ options = {
+ xsession.windowManager.fluxbox = {
+ enable = mkEnableOption "Fluxbox window manager";
+
+ package = mkOption {
+ type = types.package;
+ default = pkgs.fluxbox;
+ defaultText = literalExpression "pkgs.fluxbox";
+ description = "Package to use for running Fluxbox WM.";
+ };
+
+ init = mkOption {
+ type = types.lines;
+ default = "";
+ description = ''
+ Init configuration for Fluxbox, written to
+ ~/.fluxbox/init. Look at the
+
+ fluxbox
+ 1 manpage for details.
+ '';
+ };
+
+ apps = mkOption {
+ type = types.lines;
+ default = "";
+ description = ''
+ Apps configuration for Fluxbox, written to
+ ~/.fluxbox/apps. Look at the
+ fluxbox
+ 1 manpage for details.
+ '';
+ };
+
+ keys = mkOption {
+ type = types.lines;
+ default = "";
+ description = ''
+ Keyboard shortcuts configuration for Fluxbox, written to
+ ~/.fluxbox/keys. Look at the
+ fluxbox-keys
+ 1 manpage for details.
+ '';
+ };
+
+ menu = mkOption {
+ type = types.lines;
+ default = "";
+ description = ''
+ Menu configuration for Fluxbox, written to
+ ~/.fluxbox/menu. Look at the
+ fluxbox-menu
+ 1 manpage for details.
+ '';
+ };
+
+ slitlist = mkOption {
+ type = types.lines;
+ default = "";
+ description = ''
+ Slitlist configuration for Fluxbox, written to
+ ~/.fluxbox/slitlist. Look at the
+ fluxbox
+ 1 manpage for details.
+ '';
+ };
+
+ windowmenu = mkOption {
+ type = types.lines;
+ default = "";
+ description = ''
+ Window menu configuration for Fluxbox, written to
+ ~/.fluxbox/windowmenu. Look at the
+ fluxbox-menu
+ 1
+ manpage for details.
+ '';
+ };
+
+ extraCommandLineArgs = mkOption {
+ type = with types; listOf str;
+ default = [ ];
+ example = [ "-log" "/tmp/fluxbox.log" ];
+ description = ''
+ Extra command line arguments to pass to fluxbox.
+ Look at the
+ fluxbox
+ 1 manpage for details.
+ '';
+ };
+ };
+ };
+
+ config = mkIf cfg.enable {
+ assertions = [
+ (hm.assertions.assertPlatform "xsession.windowManager.fluxbox" pkgs
+ platforms.linux)
+ ];
+
+ home.packages = [ cfg.package ];
+
+ home.file = {
+ ".fluxbox/init" = mkIf (cfg.init != "") { text = cfg.init; };
+ ".fluxbox/apps" = mkIf (cfg.apps != "") { text = cfg.apps; };
+ ".fluxbox/keys" = mkIf (cfg.keys != "") { text = cfg.keys; };
+ ".fluxbox/menu" = mkIf (cfg.menu != "") { text = cfg.menu; };
+ ".fluxbox/slitlist" = mkIf (cfg.slitlist != "") { text = cfg.slitlist; };
+ ".fluxbox/windowmenu" =
+ mkIf (cfg.windowMenu != "") { text = cfg.windowmenu; };
+ };
+
+ xsession.windowManager.command = concatStringsSep " "
+ ([ "${cfg.package}/bin/fluxbox" ]
+ ++ escapeShellArgs (remove "" cfg.extraCommandLineArgs));
+ };
+}