{ pkgs, lib, config, ... }: let modifier = config.wayland.windowManager.sway.config.modifier; term = config.wayland.windowManager.sway.config.terminal; # 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}"; gtk-theme = config.gtk.theme.name; icon-theme = config.gtk.iconTheme.name; cursor-theme = config.gtk.cursorTheme.name; in '' export XDG_DATA_DIRS=${datadir}:$XDG_DATA_DIRS gnome_schema=org.gnome.desktop.interface gsettings set $gnome_schema gtk-theme '${gtk-theme}' gsettings set $gnome_schema icon-theme '${icon-theme}' gsettings set $gnome_schema cursor-theme '${cursor-theme}' ''; }; in { imports = [ ./swaylock.nix ./waybar.nix ./gtk.nix ./dunst.nix ./rofi.nix ]; home.packages = with pkgs; [ configure-gtk pipewire wireplumber wl-clipboard swayimg brightnessctl ]; programs.rofi.package = pkgs.rofi-wayland; wayland.windowManager.sway = { enable = true; wrapperFeatures.gtk = true; xwayland = true; extraSessionCommands = '' export GDK_BACKEND=wayland,x11 export QT_QPA_PLATFORM=wayland export QT_WAYLAND_DISABLE_WINDOWDECORATION="1"''; config = { input."*".xkb_layout = "gb"; fonts = { names = ["FiraCode Nerd Font" "FiraCode Nerd Font Mono"]; size = 12.0; }; gaps = { inner = lib.mkDefault 5; outer = lib.mkDefault 20; }; bars = [{command = "${pkgs.waybar}/bin/waybar";}]; assigns = { "2" = [{app_id = "firefox";}]; "3" = [ {class = "Signal";} {app_id = "fractal";} {app_id = "discord";} {class = "teams-for-linux";} ]; "4" = [{class = "Nxplayer.bin";}]; }; floating.criteria = [ {app_id = "pavucontrol";} {app_id = ".blueman-manager-wrapped";} {app_id = "otpclient";} {app_id = "thunar";} {app_id = "^swayimg.*$";} ]; startup = [ { command = "dbus-sway-environment"; always = true; } { command = "configure-gtk"; always = true; } {command = "dunst";} ]; modifier = lib.mkDefault "Mod1"; terminal = lib.mkDefault "${pkgs.wezterm}/bin/wezterm"; window.titlebar = false; workspaceAutoBackAndForth = true; keybindings = lib.mkOptionDefault { "${modifier}+Return" = "exec ${term}"; "${modifier}+space" = "exec ${pkgs.rofi}/bin/rofi -show drun"; "${modifier}+F1" = "exec ${pkgs.swaylock}/bin/swaylock"; "${modifier}+w" = "exec ${pkgs.firefox}/bin/firefox"; "${modifier}+f" = "exec ${pkgs.xfce.thunar}/bin/thunar"; "${modifier}+p" = "exec powermenu"; }; colors = { focused = { border = "#4c7899"; background = "#285577"; text = "#ffffff"; indicator = "#2e9ef4"; childBorder = "#285577"; }; focusedInactive = { border = "#333333"; background = "#5f676a"; text = "#ffffff"; indicator = "#484e50"; childBorder = "#5f676a"; }; unfocused = { border = "#333333"; background = "#222222"; text = "#888888"; indicator = "#292d2e"; childBorder = "#222222"; }; urgent = { border = "#2f343a"; background = "#900000"; text = "#ffffff"; indicator = "#900000"; childBorder = "#900000"; }; placeholder = { border = "#000000"; background = "#0c0c0c"; text = "#ffffff"; indicator = "#000000"; childBorder = "#0c0c0c"; }; background = "#ffffff"; }; }; }; }