diff --git a/system/nixos/configuration.nix b/system/nixos/configuration.nix
index 2c9264dd..069fa05c 100644
--- a/system/nixos/configuration.nix
+++ b/system/nixos/configuration.nix
@@ -68,14 +68,21 @@ in
   # Enable the X11 windowing system.
   services.xserver.enable = true;
 
-  # Enable the KDE Plasma Desktop Environment.
-  services.xserver.displayManager.defaultSession = "sway";
-  services.xserver.displayManager.sddm.enable = true;
-
-  # Configure keymap in X11
   services.xserver = {
+    # Configure keymap in X11.
     layout = "gb";
     xkbVariant = "";
+
+    displayManager = {
+      defaultSession = "none+i3";
+      sddm.enable = true;
+    };
+
+    windowManager.i3 = {
+      enable = true;
+      package = pkgs.i3-gaps;
+      extraPackages = with pkgs; [ i3status i3lock i3blocks ];
+    };
   };
 
   # Configure console keymap
@@ -123,25 +130,11 @@ in
       configure-gtk
       ffmpegthumbnailer
       shotwell
-      swaybg
       xfce.thunar
       xfce.thunar-volman
       xfce.tumbler
-      wl-clipboard
     ];
 
-  xdg.portal = {
-    enable = true;
-    wlr.enable = true;
-    # gtk portal needed to make gtk apps happy
-    extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
-  };
-
-  programs.sway = {
-    enable = true;
-    wrapperFeatures.gtk = true;
-  };
-
   # Some programs need SUID wrappers, can be configured further or are
   # started in user sessions.
   # programs.mtr.enable = true;
diff --git a/system/nixos/home-manager/default.nix b/system/nixos/home-manager/default.nix
index b334ec2e..805f6fce 100644
--- a/system/nixos/home-manager/default.nix
+++ b/system/nixos/home-manager/default.nix
@@ -19,9 +19,6 @@ in
     pkgs.via
     pkgs.vial
     pkgs.vlc
-    pkgs.wl-mirror
-    pkgs.wob
-    pkgs.wofi
     pkgs.xcape
     pkgs.zoom-us
   ];
diff --git a/system/nixos/home-manager/desktop.nix b/system/nixos/home-manager/desktop.nix
index 633b1d61..7fa35816 100644
--- a/system/nixos/home-manager/desktop.nix
+++ b/system/nixos/home-manager/desktop.nix
@@ -3,7 +3,7 @@
 {
   imports = [
     ./modules/alacritty.nix
-    ./modules/sway.nix
+    ./modules/i3.nix
   ];
 
   xdg.configFile.wallpaper = {
diff --git a/system/nixos/home-manager/modules/i3.nix b/system/nixos/home-manager/modules/i3.nix
new file mode 100644
index 00000000..fa6c5b60
--- /dev/null
+++ b/system/nixos/home-manager/modules/i3.nix
@@ -0,0 +1,69 @@
+{ config, inputs, self, ... }:
+
+let
+  modifier = "Mod4";
+in
+{
+  home.file.".background-image".source = ../../../../config/wallpaper/wallpaper.jpg;
+
+  services.autorandr.enable = true;
+
+  programs.autorandr = {
+    enable = true;
+
+    profiles = {
+      default = {
+        # config = {
+        #   "eDP-1" = {
+        #     dpi = 96;
+        #     enable = true;
+        #     mode = "1920x1080";
+        #     primary = true;
+        #     rate = "60";
+        #   };
+        # };
+      };
+    };
+  };
+
+  xsession.windowManager.i3 = {
+    enable = true;
+
+    config = {
+      assigns = {
+        "1" = [{ class = "firefox"; }];
+        "2" = [{ class = "Alacritty"; }];
+        "3" = [{ class = "vlc"; }];
+        "9" = [
+          { class = "Slack"; }
+          { class = "discord"; }
+        ];
+      };
+
+      modifier = modifier;
+
+      keybindings = inputs.nixpkgs.lib.mkOptionDefault {
+        "${modifier}+Shift+b" = "exec firefox";
+        # "${modifier}+tab" = "workspace back_and_forth";
+      };
+
+      terminal = "alacritty";
+
+      window = {
+        border = 0;
+        hideEdgeBorders = "none";
+      };
+    };
+
+    extraConfig = ''
+      set $laptop eDP-1
+      bindswitch --reload --locked lid:on output $laptop disable
+      bindswitch --reload --locked lid:off output $laptop enable
+
+      default_border none
+      default_floating_border none
+      smart_borders on
+      smart_gaps on
+    '';
+  };
+}
diff --git a/system/nixos/home-manager/modules/sway.nix b/system/nixos/home-manager/modules/sway.nix
deleted file mode 100644
index 19909ef2..00000000
--- a/system/nixos/home-manager/modules/sway.nix
+++ /dev/null
@@ -1,197 +0,0 @@
-{ config, inputs, pkgs, ... }:
-
-{
-  services.swayidle = {
-    enable = true;
-
-    events = [
-      {
-        event = "before-sleep";
-        command = "${pkgs.swaylock}/bin/swaylock --daemonize --image ~/.config/wallpaper/wallpaper.jpg";
-      }
-    ];
-  };
-
-  services.swayidle.timeouts = [
-    {
-      timeout = 300;
-      command = "${pkgs.swaylock}/bin/swaylock --daemonize --image ~/.config/wallpaper/wallpaper.jpg";
-    }
-
-    {
-      timeout = 600;
-      command = "swaymsg 'output * dpms off'";
-      resumeCommand = "swaymsg 'output * dpms on'";
-    }
-  ];
-
-  programs.swaylock = {
-    enable = true;
-
-    settings = {
-      daemonize = true;
-      image = "~/.config/wallpaper/wallpaper.jpg";
-    };
-  };
-
-  programs.i3status-rust = {
-    enable = true;
-
-    bars = {
-      default = {
-        blocks = [
-          {
-            block = "net";
-            format = " $ip ";
-          }
-          {
-            block = "battery";
-            format = " $icon $percentage $time ";
-          }
-          {
-            block = "cpu";
-          }
-          {
-            block = "memory";
-            format = " $icon $mem_total_used_percents.eng(w:2) ";
-            format_alt = " $icon_swap $swap_used_percents.eng(w:2) ";
-          }
-          {
-            block = "disk_space";
-            path = "/";
-            info_type = "available";
-            alert_unit = "GB";
-            interval = 20;
-            warning = 20.0;
-            alert = 10.0;
-            format = " $icon $available.eng(w:2) ";
-          }
-          {
-            block = "time";
-            interval = 1;
-            format = " $timestamp.datetime(f:'%F %T') ";
-          }
-        ];
-
-        settings = {
-          theme = {
-            theme = "plain";
-            overrides = {
-              critical_bg = "#222222";
-              good_bg = "#222222";
-              good_fg = "#ffffff";
-              idle_bg = "#222222";
-              idle_fg = "#ffffff";
-              info_bg = "#222222";
-              info_fg = "#ffffff";
-              separator_bg = "#222222";
-              warning_bg = "#222222";
-              warning_fg = "#ffffff";
-            };
-          };
-        };
-      };
-    };
-  };
-
-  wayland.windowManager.sway = {
-    enable = true;
-
-    config = {
-      assigns = {
-        "1" = [{ app_id = "firefox"; }];
-        "2" = [{ app_id = "Alacritty"; }];
-        "3" = [{ class = "vlc"; }];
-        "9" = [
-          { class = "Slack"; }
-          { class = "discord"; }
-        ];
-        # Get app_id with swaymsg -t get_tree
-      };
-
-      bars = [
-        {
-          colors.background = "#222222";
-
-          fonts = {
-            names = [ "JetBrainsMono Nerd Font Mono" ];
-            size = 12.0;
-          };
-
-          statusCommand = "i3status-rs ~/.config/i3status-rust/config-default.toml";
-          trayPadding = 10;
-        }
-      ];
-
-      gaps = {
-        inner = 0;
-        smartBorders = "on";
-        # smartGaps = true;
-      };
-
-      input = {
-        "*" = {
-          xkb_layout = "gb";
-        };
-
-        "type:touchpad" = {
-          dwt = "enabled";
-          tap = "enabled";
-        };
-      };
-
-      keybindings =
-        let modifier = config.wayland.windowManager.sway.config.modifier;
-        in inputs.nixpkgs.lib.mkOptionDefault {
-          "${modifier}+Escape" = "exec swaylock --daemonize";
-          "${modifier}+Shift+b" = "exec firefox";
-          "${modifier}+tab" = "workspace back_and_forth";
-        };
-
-      menu = "wofi --show run";
-      modifier = "Mod4";
-
-      output = {
-        "*" = {
-          bg = "~/.config/wallpaper/wallpaper.jpg fill";
-        };
-
-        eDP-1 = {
-          scale = "1.0";
-        };
-      };
-
-      terminal = "alacritty";
-
-      window.border = 3;
-    };
-
-    extraConfig = ''
-      set $laptop eDP-1
-      bindswitch --reload --locked lid:on output $laptop disable
-      bindswitch --reload --locked lid:off output $laptop enable
-
-      set $WOBSOCK $XDG_RUNTIME_DIR/wob.sock
-      exec rm -f $WOBSOCK && mkfifo $WOBSOCK && tail -f $WOBSOCK | wob
-
-      bindsym XF86AudioRaiseVolume exec pamixer -ui 2 && pamixer --get-volume > $WOBSOCK
-      bindsym XF86AudioLowerVolume exec pamixer -ud 2 && pamixer --get-volume > $WOBSOCK
-      bindsym XF86AudioMute exec pamixer --toggle-mute && ( [ "$(pamixer --get-mute)" = "true" ] && echo 0 > $WOBSOCK ) || pamixer --get-volume > $WOBSOCK
-
-      bindsym XF86MonBrightnessDown exec brightnessctl set 5%- | sed -En 's/.*\(([0-9]+)%\).*/\1/p' > $WOBSOCK
-      bindsym XF86MonBrightnessUp exec brightnessctl set +5% | sed -En 's/.*\(([0-9]+)%\).*/\1/p' > $WOBSOCK
-
-      exec alacritty
-      exec firefox
-
-      for_window [class="vlc"] inhibit_idle fullscreen
-
-      for_window [app_id="zoom"] floating enable
-      for_window [app_id="zoom" title="Choose ONE of the audio conference options"] floating enable
-      for_window [app_id="firefox" title="Firefox — Sharing Indicator"] floating enable
-      for_window [app_id="zoom" title="zoom"] floating enable
-      for_window [app_id="zoom" title="Zoom Meeting"] floating disable
-      for_window [app_id="zoom" title="Zoom - Free Account"] floating disable
-    '';
-  };
-}