grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / x11 / window-managers / i3.nix
blob4b2fb40585a70ced1d9c293a160b4625299c963a
1 { config, lib, pkgs, ... }:
3 with lib;
5 let
6   cfg = config.services.xserver.windowManager.i3;
7   updateSessionEnvironmentScript = ''
8     systemctl --user import-environment PATH DISPLAY XAUTHORITY DESKTOP_SESSION XDG_CONFIG_DIRS XDG_DATA_DIRS XDG_RUNTIME_DIR XDG_SESSION_ID DBUS_SESSION_BUS_ADDRESS || true
9     dbus-update-activation-environment --systemd --all || true
10   '';
14   options.services.xserver.windowManager.i3 = {
15     enable = mkEnableOption "i3 window manager";
17     configFile = mkOption {
18       default     = null;
19       type        = with types; nullOr path;
20       description = ''
21         Path to the i3 configuration file.
22         If left at the default value, $HOME/.i3/config will be used.
23       '';
24     };
26     updateSessionEnvironment = mkOption {
27       default = true;
28       type = types.bool;
29       description = ''
30         Whether to run dbus-update-activation-environment and systemctl import-environment before session start.
31         Required for xdg portals to function properly.
32       '';
33     };
35     extraSessionCommands = mkOption {
36       default     = "";
37       type        = types.lines;
38       description = ''
39         Shell commands executed just before i3 is started.
40       '';
41     };
43     package = mkPackageOption pkgs "i3" { };
45     extraPackages = mkOption {
46       type = with types; listOf package;
47       default = with pkgs; [ dmenu i3status i3lock ];
48       defaultText = literalExpression ''
49         with pkgs; [
50           dmenu
51           i3status
52           i3lock
53         ]
54       '';
55       description = ''
56         Extra packages to be installed system wide.
57       '';
58     };
59   };
61   config = mkIf cfg.enable {
62     services.xserver.windowManager.session = [{
63       name  = "i3";
64       start = ''
65         ${cfg.extraSessionCommands}
67         ${lib.optionalString cfg.updateSessionEnvironment updateSessionEnvironmentScript}
69         ${cfg.package}/bin/i3 ${optionalString (cfg.configFile != null)
70           "-c /etc/i3/config"
71         } &
72         waitPID=$!
73       '';
74     }];
75     environment.systemPackages = [ cfg.package ] ++ cfg.extraPackages;
76     environment.etc."i3/config" = mkIf (cfg.configFile != null) {
77       source = cfg.configFile;
78     };
79   };
81   imports = [
82     (mkRemovedOptionModule [ "services" "xserver" "windowManager" "i3-gaps" "enable" ]
83       "i3-gaps was merged into i3. Use services.xserver.windowManager.i3.enable instead.")
84   ];