{ 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"; }; installGaming = lib.mkOption { default = false; example = true; description = "Whether to install gaming software on the system."; }; 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.lists.flatten [ [ git glib # gsettings grim pavucontrol slurp swaylock swayidle wl-clipboard xdg-utils zsh # Add to gaming only installs lutris wine-wayland # Video utils davinci-resolve-studio imv mpv gimp ] config.swaywm.systemPackages # (lib.mkIf config.swaywm.installGaming [ # pkgs.lutris # ]) ]; programs.zsh.enable = true; programs.steam.enable = config.swaywm.installGaming; ### ## Services ### services.openssh.enable = true; services.dbus.enable = true; services.pipewire = { enable = true; alsa.enable = true; pulse.enable = true; }; # kdeconnect setup programs.kdeconnect.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; }; }; }