Sway: Difference between revisions
imported>O8opi m pactl is not in the nixpkgs, enable pulseaudio instead |
imported>Danielbarter No edit summary |
||
Line 1: | Line 1: | ||
Sway is a tiling | Sway is a tiling Wayland compositor and a drop-in replacement for the i3 window manager for X11. It works with your existing i3 configuration and supports most of i3's features, plus a few extras. | ||
[https://github.com/swaywm/sway/wiki/i3-Migration-Guide i3 migration guide] | [https://github.com/swaywm/sway/wiki/i3-Migration-Guide i3 migration guide] | ||
== Installation == | == Installation == | ||
=== | Here is a minimal configuration where everything you would expect (like screen sharing and gtk themes) work: | ||
<syntaxhighlight lang="nix"> | |||
{ config, pkgs, lib, ... }: | |||
let | |||
# bash script to let dbus know about important env variables and | |||
# propogate 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; [ | |||
alacritty # gpu accelerated terminal | |||
sway | |||
dbus-sway-environment | |||
configure-gtk | |||
wayland | |||
glib # gsettings | |||
dracula-theme # gtk theme | |||
gnome3.adwaita-icon-theme # default gnome cursors | |||
swaylock | swaylock | ||
swayidle | swayidle | ||
wl-clipboard | grim # screenshot functionality | ||
slurp # screenshot functionality | |||
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 | |||
]; | ]; | ||
services.pipewire = { | |||
enable = true; | |||
alsa.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 ]; | |||
gtkUsePortal = true; | |||
}; | |||
# enable sway window manager | |||
programs.sway = { | |||
enable = true; | |||
wrapperFeatures.gtk = true; | |||
}; | |||
</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 | |||
}} | |||
=== Brightness and volume === | === Brightness and volume === | ||
{{file|/etc/nixos/configuration.nix|nix|<nowiki> | {{file|/etc/nixos/configuration.nix|nix|<nowiki> | ||
users.users.yourusername.extraGroups = [ "video" ]; | users.users.yourusername.extraGroups = [ "video" ]; | ||
# or | # or | ||
Line 94: | Line 128: | ||
# Brightness | # Brightness | ||
bindsym XF86MonBrightnessDown exec | bindsym XF86MonBrightnessDown exec light -U 10 | ||
bindsym XF86MonBrightnessUp exec | bindsym XF86MonBrightnessUp exec light -A 10 | ||
# Volume | # Volume | ||
Line 103: | Line 137: | ||
}} | }} | ||
=== Additional packages === | === Additional packages === | ||
Line 187: | Line 147: | ||
{{app|wofi|Launcher/menu program for wlroots based wayland compositors such as sway|https://hg.sr.ht/~scoopta/wofi|wofi}} | {{app|wofi|Launcher/menu program for wlroots based wayland compositors such as sway|https://hg.sr.ht/~scoopta/wofi|wofi}} | ||
{{app|flashfocus|Simple focus animations for tiling window managers|https://github.com/fennerm/flashfocus|flashfocus}} | {{app|flashfocus|Simple focus animations for tiling window managers|https://github.com/fennerm/flashfocus|flashfocus}} | ||
{{app|i3-ratiosplit|Configurable window size on creation|https://github.com/333fred/i3-ratiosplit|i3-ratiosplit}} | {{app|i3-ratiosplit|Configurable window size on creation|https://github.com/333fred/i3-ratiosplit|i3-ratiosplit}} | ||
Line 193: | Line 152: | ||
[[Category:Window managers]] | [[Category:Window managers]] |
Revision as of 15:54, 4 June 2022
Sway is a tiling Wayland compositor and a drop-in replacement for the i3 window manager for X11. It works with your existing i3 configuration and supports most of i3's features, plus a few extras. i3 migration guide
Installation
Here is a minimal configuration where everything you would expect (like screen sharing and gtk themes) work:
{ config, pkgs, lib, ... }:
let
# bash script to let dbus know about important env variables and
# propogate 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; [
alacritty # gpu accelerated terminal
sway
dbus-sway-environment
configure-gtk
wayland
glib # gsettings
dracula-theme # gtk theme
gnome3.adwaita-icon-theme # default gnome cursors
swaylock
swayidle
grim # screenshot functionality
slurp # screenshot functionality
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
];
services.pipewire = {
enable = true;
alsa.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 ];
gtkUsePortal = true;
};
# enable sway window manager
programs.sway = {
enable = true;
wrapperFeatures.gtk = true;
};
and here are the relevent things you should add to your sway config:
sway config
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
Brightness and volume
/etc/nixos/configuration.nix
users.users.yourusername.extraGroups = [ "video" ];
# or
programs.light.enable = true;
hardware.pulseaudio.enable = true;
sway config
# Brightness
bindsym XF86MonBrightnessDown exec light -U 10
bindsym XF86MonBrightnessUp exec light -A 10
# Volume
bindsym XF86AudioRaiseVolume exec 'pactl set-sink-volume @DEFAULT_SINK@ +1%'
bindsym XF86AudioLowerVolume exec 'pactl set-sink-volume @DEFAULT_SINK@ -1%'
bindsym XF86AudioMute exec 'pactl set-sink-mute @DEFAULT_SINK@ toggle'
Additional packages
- waybar — Highly customizable Wayland bar for Sway and Wlroots based compositors
- autotiling — Script for sway and i3 to automatically switch the horizontal / vertical window split orientation
- gammastep — Reduces bluelight and saves your eyes
- clipman — Simple clipboard manager for Wayland
- wofi — Launcher/menu program for wlroots based wayland compositors such as sway
- flashfocus — Simple focus animations for tiling window managers
- i3-ratiosplit — Configurable window size on creation
more packages here i3 migration guide