diff --git a/nix/hosts/lemp11/configuration.nix b/nix/hosts/lemp11/configuration.nix
index 5ebb4bfe..a7be1130 100644
--- a/nix/hosts/lemp11/configuration.nix
+++ b/nix/hosts/lemp11/configuration.nix
@@ -112,6 +112,9 @@
       layout = "gb";
       variant = "";
     };
+
+    displayManager.gdm.enable = true;
+    desktopManager.gnome.enable = true;
   };
 
   # Configure console keymap
diff --git a/nix/hosts/t490/default.nix b/nix/hosts/t490/default.nix
index 786716b0..364150d6 100644
--- a/nix/hosts/t490/default.nix
+++ b/nix/hosts/t490/default.nix
@@ -8,6 +8,7 @@
   features = {
     desktop = {
       gaming.enable = true;
+      i3.enable = true;
       peek.enable = true;
     };
   };
diff --git a/nix/modules/nixos/i3.nix b/nix/modules/nixos/i3.nix
index 2c7856b5..19aba388 100644
--- a/nix/modules/nixos/i3.nix
+++ b/nix/modules/nixos/i3.nix
@@ -1,149 +1,157 @@
 {
+  config,
   inputs,
+  lib,
   pkgs,
   self,
   username,
   ...
 }:
 
+with lib;
+
 let
   theme = import "${self}/nix/lib/theme" { inherit pkgs; };
 
   modifier = "Mod4";
 in
 {
-  services = {
-    cron = {
-      enable = true;
+  options.features.desktop.i3.enable = mkEnableOption "Enable i3";
 
-      systemCronJobs = [
-        "* * * * * opdavies ${pkgs.notify-battery}/bin/notify-battery"
-      ];
-    };
-
-    displayManager.defaultSession = "none+i3";
-
-    xserver = {
-      displayManager.lightdm.enable = true;
-
-      windowManager.i3 = {
+  config = mkIf config.features.desktop.i3.enable {
+    services = {
+      cron = {
         enable = true;
-        extraPackages = with pkgs; [
-          i3status
-          i3lock
-          i3blocks
+
+        systemCronJobs = [
+          "* * * * * opdavies ${pkgs.notify-battery}/bin/notify-battery"
         ];
       };
-    };
-  };
 
-  environment.systemPackages = with pkgs; [
-    acpi
-    libnotify
-  ];
+      displayManager.defaultSession = "none+i3";
 
-  home-manager.users.${username} = {
-    xsession.windowManager.i3 = {
-      enable = true;
+      xserver = {
+        displayManager.lightdm.enable = true;
 
-      config = {
-        assigns = {
-          "7" = [ { class = "vlc"; } ];
-          "8" = [ { class = "0ad"; } ];
-          "9" = [
-            { class = "Slack"; }
-            { class = "discord"; }
+        windowManager.i3 = {
+          enable = true;
+          extraPackages = with pkgs; [
+            i3status
+            i3lock
+            i3blocks
           ];
         };
-
-        defaultWorkspace = "workspace number 1";
-
-        modifier = modifier;
-
-        keybindings = inputs.nixpkgs.lib.mkOptionDefault {
-          "${modifier}+d" = "exec rofi -show drun";
-
-          "${modifier}+Shift+b" = "exec ${pkgs.firefox}/bin/firefox";
-          "${modifier}+Shift+f" = "exec ${pkgs.xfce.thunar}/bin/thunar";
-
-          # Change focus.
-          "${modifier}+h" = "focus left";
-          "${modifier}+j" = "focus down";
-          "${modifier}+k" = "focus up";
-          "${modifier}+l" = "focus right";
-
-          # Move focused window.
-          "${modifier}+Shift+h" = "move left";
-          "${modifier}+Shift+j" = "move down";
-          "${modifier}+Shift+k" = "move up";
-          "${modifier}+Shift+l" = "move right";
-
-          "${modifier}+Shift+s" = "exec ${pkgs.flameshot}/bin/flameshot gui";
-          "${modifier}+Shift+p" = "exec ${pkgs.autorandr}/bin/autorandr --change";
-          "${modifier}+Shift+y" = "exec ${pkgs.copyq}/bin/copyq toggle";
-
-          "XF86AudioRaiseVolume" = "exec pamixer -ui 2 && pamixer --get-volume";
-          "XF86AudioLowerVolume" = "exec pamixer -ud 2 && pamixer --get-volume";
-          "XF86AudioMute" = ''exec pamixer --toggle-mute && ( [ "$(pamixer --get-mute)" = "true" ] && echo 0'';
-
-          "XF86MonBrightnessDown" = "exec brightnessctl set 5%- | sed -En 's/.*(([0-9]+)%).*/1/p'";
-          "XF86MonBrightnessUp" = "exec brightnessctl set +5% | sed -En 's/.*(([0-9]+)%).*/1/p'";
-        };
-
-        terminal = "alacritty";
-      };
-
-      extraConfig = ''
-        set $laptop eDP-1
-        bindswitch --reload --locked lid:on output $laptop disable
-        bindswitch --reload --locked lid:off output $laptop enable
-
-        exec_always --no-startup-id caffeine
-        exec_always --no-startup-id ${pkgs.autorandr}/bin/autorandr --change
-
-        smart_borders on
-        smart_gaps on
-
-        for_window [class="copyq"] floating enable
-        for_window [class="zoom"] floating enable
-        # xprop | grep -i class
-      '';
-
-      config = {
-        bars = [
-          {
-            position = "bottom";
-            statusCommand = "${pkgs.i3status}/bin/i3status";
-            trayOutput = "none";
-          }
-        ];
-
-        gaps = {
-          smartBorders = "on";
-          smartGaps = true;
-        };
       };
     };
 
-    programs.i3status = {
-      enable = true;
+    environment.systemPackages = with pkgs; [
+      acpi
+      libnotify
+    ];
 
-      general.colors = false;
+    home-manager.users.${username} = {
+      xsession.windowManager.i3 = {
+        enable = true;
 
-      modules = {
-        "battery all".settings.last_full_capacity = true;
+        config = {
+          assigns = {
+            "7" = [ { class = "vlc"; } ];
+            "8" = [ { class = "0ad"; } ];
+            "9" = [
+              { class = "Slack"; }
+              { class = "discord"; }
+            ];
+          };
 
-        "tztime local".settings.format = "%d-%m-%Y %H:%M:%S";
-        cpu_temperature.enable = false;
-        ipv6.enable = false;
-        load.enable = false;
+          defaultWorkspace = "workspace number 1";
+
+          modifier = modifier;
+
+          keybindings = inputs.nixpkgs.lib.mkOptionDefault {
+            "${modifier}+d" = "exec rofi -show drun";
+
+            "${modifier}+Shift+b" = "exec ${pkgs.firefox}/bin/firefox";
+            "${modifier}+Shift+f" = "exec ${pkgs.xfce.thunar}/bin/thunar";
+
+            # Change focus.
+            "${modifier}+h" = "focus left";
+            "${modifier}+j" = "focus down";
+            "${modifier}+k" = "focus up";
+            "${modifier}+l" = "focus right";
+
+            # Move focused window.
+            "${modifier}+Shift+h" = "move left";
+            "${modifier}+Shift+j" = "move down";
+            "${modifier}+Shift+k" = "move up";
+            "${modifier}+Shift+l" = "move right";
+
+            "${modifier}+Shift+s" = "exec ${pkgs.flameshot}/bin/flameshot gui";
+            "${modifier}+Shift+p" = "exec ${pkgs.autorandr}/bin/autorandr --change";
+            "${modifier}+Shift+y" = "exec ${pkgs.copyq}/bin/copyq toggle";
+
+            "XF86AudioRaiseVolume" = "exec pamixer -ui 2 && pamixer --get-volume";
+            "XF86AudioLowerVolume" = "exec pamixer -ud 2 && pamixer --get-volume";
+            "XF86AudioMute" = ''exec pamixer --toggle-mute && ( [ "$(pamixer --get-mute)" = "true" ] && echo 0'';
+
+            "XF86MonBrightnessDown" = "exec brightnessctl set 5%- | sed -En 's/.*(([0-9]+)%).*/1/p'";
+            "XF86MonBrightnessUp" = "exec brightnessctl set +5% | sed -En 's/.*(([0-9]+)%).*/1/p'";
+          };
+
+          terminal = "alacritty";
+        };
+
+        extraConfig = ''
+          set $laptop eDP-1
+          bindswitch --reload --locked lid:on output $laptop disable
+          bindswitch --reload --locked lid:off output $laptop enable
+
+          exec_always --no-startup-id caffeine
+          exec_always --no-startup-id ${pkgs.autorandr}/bin/autorandr --change
+
+          smart_borders on
+          smart_gaps on
+
+          for_window [class="copyq"] floating enable
+          for_window [class="zoom"] floating enable
+          # xprop | grep -i class
+        '';
+
+        config = {
+          bars = [
+            {
+              position = "bottom";
+              statusCommand = "${pkgs.i3status}/bin/i3status";
+              trayOutput = "none";
+            }
+          ];
+
+          gaps = {
+            smartBorders = "on";
+            smartGaps = true;
+          };
+        };
       };
-    };
 
-    services.dunst = {
-      enable = true;
+      programs.i3status = {
+        enable = true;
 
-      settings.global.follow = "keyboard";
+        general.colors = false;
+
+        modules = {
+          "battery all".settings.last_full_capacity = true;
+
+          "tztime local".settings.format = "%d-%m-%Y %H:%M:%S";
+          cpu_temperature.enable = false;
+          ipv6.enable = false;
+          load.enable = false;
+        };
+      };
+
+      services.dunst = {
+        enable = true;
+
+        settings.global.follow = "keyboard";
+      };
     };
   };
 }