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)); + }; +}