{ lib, config, pkgs, ... }: { options.swaywm = { enable = lib.mkEnableOption "Enable sway window manager."; useNonFree = lib.mkOption { default = false; example = true; description = "Whether to enable non-free software in the sway config"; }; systemPackages = lib.mkOption { default = []; description = "Add any additional packages desired. Merged with sway defaults."; }; }; config = lib.mkIf config.swaywm.enable { nixpkgs.config.allowUnfree = config.swaywm.useNonFree; ### ## XDG portal setup ### xdg.portal = { config = { common = { default = [ "wlr" ]; }; }; extraPortals = with pkgs; [ # xdg-desktop-portal-kde xdg-desktop-portal-gtk ]; wlr.enable = true; enable = true; }; xdg.sounds.enable = true; ### ## System Packages ### environment.systemPackages = with pkgs; lib.mkMerge [ [ git glib # gsettings grim pavucontrol slurp swaylock swayidle wget wl-clipboard xdg-utils zsh ] config.swaywm.systemPackages ]; programs.zsh.enable = true; programs.steam.enable = true; ### ## Services ### services.openssh.enable = true; services.dbus.enable = true; services.pipewire = { enable = true; alsa.enable = true; pulse.enable = true; }; # Firewall networking.firewall = { enable = true; allowedTCPPortRanges = [ {from = 1714; to = 1764;} # KDE Connnect ]; allowedUDPPortRanges = [ {from = 1714; to = 1764;} # KDE Connnect ]; }; ### ## Misc ### sound.enable = true; # Necessary for home-manager sway setup security.polkit.enable = true; hardware.opengl = { enable = true; driSupport = true; }; }; }