Jump to content

Sway: Difference between revisions

1,760 bytes removed ,  3 May
imported>Nyadiia
m (Update Home Manager URL to new site)
 
(8 intermediate revisions by 7 users not shown)
Line 6: Line 6:


=== Using NixOS ===
=== Using NixOS ===
Here is a minimal configuration (without [[Home Manager]]) where everything you would expect (like screen sharing and gtk themes) work:
Here is a minimal configuration:
<syntaxhighlight lang="nix">
<syntaxhighlight lang="nix">
{ config, pkgs, lib, ... }:
{ config, pkgs, lib, ... }:
let
  # bash script to let dbus know about important env variables and
  # propagate them to relevent services run at the end of sway config
  # see
  # https://github.com/emersion/xdg-desktop-portal-wlr/wiki/"It-doesn't-work"-Troubleshooting-Checklist
  # note: this is pretty much the same as  /etc/sway/config.d/nixos.conf but also restarts 
  # some user services to make sure they have the correct environment variables
  dbus-sway-environment = pkgs.writeTextFile {
    name = "dbus-sway-environment";
    destination = "/bin/dbus-sway-environment";
    executable = true;
    text = ''
      dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=sway
      systemctl --user stop pipewire pipewire-media-session xdg-desktop-portal xdg-desktop-portal-wlr
      systemctl --user start pipewire pipewire-media-session xdg-desktop-portal xdg-desktop-portal-wlr
    '';
  };
  # currently, there is some friction between sway and gtk:
  # https://github.com/swaywm/sway/wiki/GTK-3-settings-on-Wayland
  # the suggested way to set gtk settings is with gsettings
  # for gsettings to work, we need to tell it where the schemas are
  # using the XDG_DATA_DIR environment variable
  # run at the end of sway config
  configure-gtk = pkgs.writeTextFile {
    name = "configure-gtk";
    destination = "/bin/configure-gtk";
    executable = true;
    text = let
      schema = pkgs.gsettings-desktop-schemas;
      datadir = "${schema}/share/gsettings-schemas/${schema.name}";
    in ''
      export XDG_DATA_DIRS=${datadir}:$XDG_DATA_DIRS
      gnome_schema=org.gnome.desktop.interface
      gsettings set $gnome_schema gtk-theme 'Dracula'
    '';
  };
in
{
{
   environment.systemPackages = with pkgs; [
   environment.systemPackages = with pkgs; [
    alacritty # gpu accelerated terminal
    dbus-sway-environment
    configure-gtk
    wayland
    xdg-utils # for opening default programs when clicking links
    glib # gsettings
    dracula-theme # gtk theme
    gnome3.adwaita-icon-theme  # default gnome cursors
    swaylock
    swayidle
     grim # screenshot functionality
     grim # screenshot functionality
     slurp # screenshot functionality
     slurp # screenshot functionality
     wl-clipboard # wl-copy and wl-paste for copy/paste from stdin / stdout
     wl-clipboard # wl-copy and wl-paste for copy/paste from stdin / stdout
    bemenu # wayland clone of dmenu
     mako # notification system developed by swaywm maintainer
     mako # notification system developed by swaywm maintainer
    wdisplays # tool to configure displays
   ];
   ];


  services.pipewire = {
   # Enable the gnome-keyring secrets vault.  
    enable = true;
   # Will be exposed through DBus to programs willing to store secrets.
    alsa.enable = true;
   services.gnome.gnome-keyring.enable = true;
    pulse.enable = true;
  };
 
  # xdg-desktop-portal works by exposing a series of D-Bus interfaces
   # known as portals under a well-known name
  # (org.freedesktop.portal.Desktop) and object path
   # (/org/freedesktop/portal/desktop).
  # The portal interfaces include APIs for file access, opening URIs,
  # printing and others.
   services.dbus.enable = true;
  xdg.portal = {
    enable = true;
    wlr.enable = true;
    # gtk portal needed to make gtk apps happy
    extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
  };


   # enable sway window manager
   # enable sway window manager
Line 97: Line 28:
}
}
</syntaxhighlight>
</syntaxhighlight>
and here are the relevent things you should add to your sway config:
{{file|sway config|bash|
set $menu bemenu-run
# screenshots
bindsym $mod+c exec grim  -g "$(slurp)" /tmp/$(date +'%H:%M:%S.png')
exec dbus-sway-environment
exec configure-gtk
}}


A few general comments:
A few general comments:
* There is some friction between GTK theming and sway. Currently the sway developers suggest using gsettings to set gtk theme attributes as described here [https://github.com/swaywm/sway/wiki/GTK-3-settings-on-Wayland]. There is currently a plan to allow GTK theme attributes to be set directly in the sway config.
* There is some friction between GTK theming and sway. Currently the sway developers suggest using gsettings to set gtk theme attributes as described here [https://github.com/swaywm/sway/wiki/GTK-3-settings-on-Wayland]. There is currently a plan to allow GTK theme attributes to be set directly in the sway config.
* Running sway as a systemd user service is not recommended [https://github.com/swaywm/sway/wiki/Systemd-integration#running-sway-itself-as-a---user-service] [https://github.com/swaywm/sway/issues/5160]
* Running sway as a systemd user service is not recommended [https://github.com/swaywm/sway/wiki/Systemd-integration#running-sway-itself-as-a---user-service] [https://github.com/swaywm/sway/issues/5160]
* This wiki page was gutted and rewritten in June 2022. See [https://discourse.nixos.org/t/some-lose-ends-for-sway-on-nixos-which-we-should-fix/17728] for the related discussion.


=== Using Home Manager ===
=== Using Home Manager ===
Line 165: Line 80:


=== Systemd services ===
=== Systemd services ===
Kanshi is output configuration daemon. As explained above, we don't run sway itself as a systemd service. There are auxiliary daemons that we do want to run as systemd services, for example Kanshi [https://sr.ht/~emersion/kanshi/], which implements monitor hot swapping. It would be enabled as follows:
Kanshi is an output configuration daemon. As explained above, we don't run sway itself as a systemd service. There are auxiliary daemons that we do want to run as systemd services, for example Kanshi [https://sr.ht/~emersion/kanshi/], which implements monitor hot swapping. It would be enabled as follows:
{{file|/etc/nixos/configuration.nix|nix|<nowiki>
{{file|/etc/nixos/configuration.nix|nix|<nowiki>
   # kanshi systemd service
   # kanshi systemd service
Line 182: Line 97:
}}
}}
When you launch sway, the systemd service is started.  
When you launch sway, the systemd service is started.  
=== Using greeter ===
Installing a greeter based on [https://search.nixos.org/options?channel=unstable&show=services.greetd.settings&from=0&size=50&sort=relevance&type=packages&query=greetd greetd] is the most straightforward way to launch Sway.
Tuigreet does not even need a separate compositor to launch.
{{file|/etc/nixos/configuration.nix|nix|<nowiki>
services.greetd = {                                                     
  enable = true;                                                       
  settings = {                                                         
    default_session = {                                                 
      command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd sway";
      user = "greeter";                                                 
    };                                                                 
  };                                                                   
};                                                                     
</nowiki>}}


== Troubleshooting ==
== Troubleshooting ==
Line 254: Line 186:
Enabling this option allows any program run by the "users" group to request real-time priority.
Enabling this option allows any program run by the "users" group to request real-time priority.


=== WLR Error when trying to launch sway ===


When this happens on a new nixos system, enabling opengl in configuration.nix may fix this issue. 
<syntaxhighlight lang="nix">
hardware.opengl.enable = true;
</syntaxhighlight>
[[Category:Window managers]]
[[Category:Window managers]]
[[Category:Applications]]
[[Category:Applications]]
4

edits