Sway: Difference between revisions

Phobos (talk | contribs)
m Added link to SwayFX Page
DHCP (talk | contribs)
style fixes
 
(3 intermediate revisions by one other user not shown)
Line 10: Line 10:
{
{
   environment.systemPackages = with pkgs; [
   environment.systemPackages = with pkgs; [
     wl-clipboard # wl-copy and wl-paste for copy/paste from stdin / stdout
     wl-clipboard # Copy/Paste functionality.
     mako # notification system developed by swaywm maintainer
     mako # Notification utility.
   ];
   ];


   # Enable the gnome-keyring secrets vault.
   # Enables Gnome Keyring to store secrets for applications.  
  # Will be exposed through DBus to programs willing to store secrets.
   services.gnome.gnome-keyring.enable = true;
   services.gnome.gnome-keyring.enable = true;


   # enable Sway window manager
   # Enable Sway.
   programs.sway = {
   programs.sway = {
     enable = true;
     enable = true;
Line 43: Line 42:
Then you may enable Sway in your Home Manager configuration. Here is a minimal example:
Then you may enable Sway in your Home Manager configuration. Here is a minimal example:


{{File|3=wayland.windowManager.sway = {
{{File|3=
    enable = true;
wayland.windowManager.sway = {
    wrapperFeatures.gtk = true; # Fixes common issues with GTK 3 apps
  enable = true;
    config = rec {
  wrapperFeatures.gtk = true; # Fixes common issues with GTK 3 apps
      modifier = "Mod4";
  config = rec {
      # Use kitty as default terminal
    modifier = "Mod4";
      terminal = "kitty";  
    # Use kitty as default terminal
      startup = [
    terminal = "kitty";
        # Launch Firefox on start
    startup = [
        {command = "firefox";}
      # Launch Firefox on start
      ];
      { command = "firefox"; }
    };
    ];
  };|name=/etc/nixos/home.nix|lang=nix}}
  };
};
|name=/etc/nixos/home.nix|lang=nix}}


See [https://nix-community.github.io/home-manager/options.xhtml#opt-wayland.windowManager.sway.enable Home Manager's Options for Sway] for a complete list of configuration options.
See [https://nix-community.github.io/home-manager/options.xhtml#opt-wayland.windowManager.sway.enable Home Manager's Options for Sway] for a complete list of configuration options.


You may need to activate dbus manually from .zshrc to use i.e: dunst, see [https://discourse.nixos.org/t/dunst-crashes-if-run-as-service/27671/2 Dunst crashes if run as service]
You may need to activate dbus manually from .zshrc to use i.e: dunst, see [https://discourse.nixos.org/t/dunst-crashes-if-run-as-service/27671/2 Dunst crashes if run as service]
{{Note|
It's recommended to enable a [[Secret Service]] provider, like GNOME Keyring:
{{file|home.nix|nix|<nowiki>
services.gnome-keyring.enable = true;
</nowiki>}}
}}


=== Systemd services ===
=== Systemd services ===
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://gitlab.freedesktop.org/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://gitlab.freedesktop.org/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
  systemd.user.services.kanshi = {
systemd.user.services.kanshi = {
    description = "kanshi daemon";
  description = "kanshi daemon";
    environment = {
  environment = {
      WAYLAND_DISPLAY="wayland-1";
    WAYLAND_DISPLAY="wayland-1";
      DISPLAY = ":0";
    DISPLAY = ":0";
    };  
  };  
    serviceConfig = {
  serviceConfig = {
      Type = "simple";
    Type = "simple";
      ExecStart = ''${pkgs.kanshi}/bin/kanshi -c kanshi_config_file'';
    ExecStart = ''${pkgs.kanshi}/bin/kanshi -c kanshi_config_file'';
    };
   };
   };
};
</nowiki>}}
</nowiki>}}


Line 125: Line 119:
'';
'';
</syntaxhighlight>When launched directly from the TTY, Sway will not inherit the user environment. This may cause issues with systemd user services such as application launchers or [[Swayidle]]. To fix this, add the following to your Home Manager configuration:{{file|home.nix|nix|<nowiki>
</syntaxhighlight>When launched directly from the TTY, Sway will not inherit the user environment. This may cause issues with systemd user services such as application launchers or [[Swayidle]]. To fix this, add the following to your Home Manager configuration:{{file|home.nix|nix|<nowiki>
wayland.windowManager.sway.systemd.variables = ["--all"];
wayland.windowManager.sway.systemd.variables = ["--all"];
</nowiki>}}
</nowiki>}}
=== Secret Service ===
It is recommended to enable a secret service provider such as [https://wiki.gnome.org/Projects/GnomeKeyring Gnome Keyring]. For more information on secret services check the [[Secret Service]] page.
Install and enable:
{{File|3=services.gnome.gnome-keyring.enable = true;|name=/etc/nixos/configuration.nix|lang=nix}}
In order to unlock the keyring through logins from greeters and screen locking utilities you will need to enable them through PAM.
{{File|3=security.pam.services = {
  greetd.enableGnomeKeyring = true;
  swaylock.enableGnomeKeyring = true;
  # If using a display manager such as GDM
  #gdm.enableGnomeKeyring = true;
};|name=/etc/nixos/configuration.nix|lang=nix}}


== Configuration ==
== Configuration ==
Line 132: Line 140:


=== Keyboard layout ===
=== Keyboard layout ===
Changing layout for all keyboards to German (de):<syntaxhighlight lang="console">
Changing layout for all keyboards to German (de):
<syntaxhighlight>
input * xkb_layout "de"
input * xkb_layout "de"
</syntaxhighlight>The same thing accomplished in Home Manager:<syntaxhighlight lang="nix">
</syntaxhighlight>The same thing accomplished in Home Manager:<syntaxhighlight lang="nix">
Line 139: Line 148:


=== High-DPI scaling ===
=== High-DPI scaling ===
Changing scale for all screens to factor 1.5:<syntaxhighlight lang="console">
Changing scale for all screens to factor 1.5:<syntaxhighlight>
output * scale 1.5
output * scale 1.5
</syntaxhighlight>
</syntaxhighlight>
Line 182: Line 191:
==== Touchpad ====
==== Touchpad ====
See the [https://www.mankier.com/5/sway-input sway-input man page] for options.
See the [https://www.mankier.com/5/sway-input sway-input man page] for options.
{{File|3=wayland.windowManager.sway =  
{{File|3=
   {
wayland.windowManager.sway = {
    enable = true;
   enable = true;
    config.input = {
  config.input = {
      "type:touchpad" = {
    "type:touchpad" = {
        # Enables or disables tap for specified input device.
      # Enables or disables tap for specified input device.
        tap = "enabled";
      tap = "enabled";
        # Enables or disables natural (inverted) scrolling for the specified input device.
      # Enables or disables natural (inverted) scrolling for the specified input device.
        natural_scroll = "enabled";
      natural_scroll = "enabled";
        # Enables or disables disable-while-typing for the specified input device.
      # Enables or disables disable-while-typing for the specified input device.
        dwt = "enabled";
      dwt = "enabled";
      };
     };
     };
   };|name=/etc/nixos/home.nix|lang=nix}}
   };
};
|name=/etc/nixos/home.nix|lang=nix}}


== Troubleshooting ==
== Troubleshooting ==
Line 220: Line 230:


{{File|3=home.pointerCursor = {
{{File|3=home.pointerCursor = {
    name = "Adwaita";
  name = "Adwaita";
    package = pkgs.adwaita-icon-theme;
  package = pkgs.adwaita-icon-theme;
    size = 24;
  size = 24;
    x11 = {
  x11 = {
      enable = true;
    enable = true;
      defaultCursor = "Adwaita";
    defaultCursor = "Adwaita";
    };
  };
 
  sway.enable = true;


sway.enable = true;
};|name=/etc/nixos/home.nix|lang=nix}}
};|name=/etc/nixos/home.nix|lang=nix}}


Line 237: Line 246:


<syntaxhighlight lang="nix>
<syntaxhighlight lang="nix>
 
fonts = {
  fonts = {
  packages = with pkgs; [
    packages = with pkgs; [
    noto-fonts
      noto-fonts
    noto-fonts-cjk
      noto-fonts-cjk
    noto-fonts-emoji
      noto-fonts-emoji
    font-awesome
      font-awesome
    source-han-sans
      source-han-sans
    source-han-sans-japanese
      source-han-sans-japanese
    source-han-serif-japanese
      source-han-serif-japanese
  ];
    ];
  fontconfig.defaultFonts = {
    fontconfig.defaultFonts = {
    serif = [ "Noto Serif" "Source Han Serif" ];
      serif = [ "Noto Serif" "Source Han Serif" ];
    sansSerif = [ "Noto Sans" "Source Han Sans" ];
      sansSerif = [ "Noto Sans" "Source Han Sans" ];
    };
   };
   };
 
};
</syntaxhighlight>
</syntaxhighlight>


Line 261: Line 268:


<syntaxhighlight lang="nix>
<syntaxhighlight lang="nix>
  security.pam.services.swaylock = {};
security.pam.services.swaylock = {};
</syntaxhighlight>
</syntaxhighlight>


Line 298: Line 305:
Using [[Home Manager]] add the following to your Sway configuration:
Using [[Home Manager]] add the following to your Sway configuration:
<syntaxhighlight lang="nix">
<syntaxhighlight lang="nix">
  wayland.windowManager.sway = {
wayland.windowManager.sway = {
    [...]
  [...]
    config = {
  config = {
      [...]
    [...]
      input = {
    input = {
        [...]
      [...]
        "type:touch" = {
      "type:touch" = {
          # Replace touchscreen_output_identifier with the identifier of your touchscreen.
        # Replace touchscreen_output_identifier with the identifier of your touchscreen.
          map_to_output = touchscreen_output_identifier;
        map_to_output = touchscreen_output_identifier;
        };
      };
      };
    };
    };
  };
  };
};
</syntaxhighlight>
</syntaxhighlight>


Line 436: Line 443:
     blur_passes 2
     blur_passes 2
   '';
   '';
};|name=/etc/nixos/home.nix|lang=nix}}
};|name=/etc/nixos/home.nix|lang=nix}}


=== Screen dimming with wl-gammarelay-rs ===
=== Screen dimming with wl-gammarelay-rs ===
Add <code>wl-gammarelay-rs</code> to programs.sway.extraPackages, then add the following to sway config:
Add <code>wl-gammarelay-rs</code> to <code>programs.sway.extraPackages</code>, then add the following to sway config:
<syntaxhighlight>
<syntaxhighlight>
# start daemon
# start daemon