{ config, lib, pkgs, ... }: { programs.sway = { enable = true; wrapperFeatures.gtk = true; # so that gtk works properly }; home-manager.users.james = { home.packages = with pkgs; [ autotiling dmenu kitty mako swayidle swaylock wl-clipboard wofi (writeTextFile { name = "sway-entry"; destination = "/bin/sway-entry"; executable = true; text = '' #! ${pkgs.bash}/bin/bash # first import environment variables from the login manager # function is currently deprecated. It should be rolled back in the future systemctl --user import-environment # then start the service exec systemctl --user start sway.service ''; }) ]; }; systemd.user.targets.sway-session = { description = "Sway compositor session"; documentation = [ "man:systemd.special(7)" ]; bindsTo = [ "graphical-session.target" ]; wants = [ "graphical-session-pre.target" ]; after = [ "graphical-session-pre.target" ]; }; systemd.user.services.sway = { description = "Sway - Wayland window manager"; documentation = [ "man:sway(5)" ]; bindsTo = [ "graphical-session.target" ]; wants = [ "graphical-session-pre.target" ]; after = [ "graphical-session-pre.target" ]; # We explicitly unset PATH here, as we want it to be set by # systemctl --user import-environment in startsway environment.PATH = lib.mkForce null; serviceConfig = { Type = "simple"; ExecStart = '' ${pkgs.dbus}/bin/dbus-run-session ${pkgs.sway}/bin/sway --debug ''; Restart = "on-failure"; RestartSec = 1; TimeoutStopSec = 10; }; }; users.users.james.extraGroups = [ "video" "audio" ]; }