Created
September 17, 2022 08:53
-
-
Save retronav/205f5e3911a953d0fff928e8b59c992d to your computer and use it in GitHub Desktop.
Sway config from nixos
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ 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; | |
}; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment