aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/nixos/modules/services/x11/window-managers/i3.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/nixos/modules/services/x11/window-managers/i3.nix')
-rw-r--r--nixpkgs/nixos/modules/services/x11/window-managers/i3.nix78
1 files changed, 78 insertions, 0 deletions
diff --git a/nixpkgs/nixos/modules/services/x11/window-managers/i3.nix b/nixpkgs/nixos/modules/services/x11/window-managers/i3.nix
new file mode 100644
index 00000000000..0ef55d5f2c0
--- /dev/null
+++ b/nixpkgs/nixos/modules/services/x11/window-managers/i3.nix
@@ -0,0 +1,78 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+ cfg = config.services.xserver.windowManager.i3;
+in
+
+{
+ options.services.xserver.windowManager.i3 = {
+ enable = mkEnableOption "i3 window manager";
+
+ configFile = mkOption {
+ default = null;
+ type = with types; nullOr path;
+ description = ''
+ Path to the i3 configuration file.
+ If left at the default value, $HOME/.i3/config will be used.
+ '';
+ };
+
+ extraSessionCommands = mkOption {
+ default = "";
+ type = types.lines;
+ description = ''
+ Shell commands executed just before i3 is started.
+ '';
+ };
+
+ package = mkOption {
+ type = types.package;
+ default = pkgs.i3;
+ defaultText = "pkgs.i3";
+ example = "pkgs.i3-gaps";
+ description = ''
+ i3 package to use.
+ '';
+ };
+
+ extraPackages = mkOption {
+ type = with types; listOf package;
+ default = with pkgs; [ dmenu i3status i3lock ];
+ example = literalExample ''
+ with pkgs; [
+ dmenu
+ i3status
+ i3lock
+ ]
+ '';
+ description = ''
+ Extra packages to be installed system wide.
+ '';
+ };
+ };
+
+ config = mkIf cfg.enable {
+ services.xserver.windowManager.session = [{
+ name = "i3";
+ start = ''
+ ${cfg.extraSessionCommands}
+
+ ${cfg.package}/bin/i3 ${optionalString (cfg.configFile != null)
+ "-c /etc/i3/config"
+ } &
+ waitPID=$!
+ '';
+ }];
+ environment.systemPackages = [ cfg.package ] ++ cfg.extraPackages;
+ environment.etc."i3/config" = mkIf (cfg.configFile != null) {
+ source = cfg.configFile;
+ };
+ };
+
+ imports = [
+ (mkRemovedOptionModule [ "services" "xserver" "windowManager" "i3-gaps" "enable" ]
+ "Use services.xserver.windowManager.i3.enable and set services.xserver.windowManager.i3.package to pkgs.i3-gaps to use i3-gaps.")
+ ];
+}