{ lib, config, pkgs, ... }: with lib; let psCfg = config.pub-solar; in { options.pub-solar.sway = { enable = mkEnableOption "Life in boxes"; terminal = mkOption { type = types.nullOr types.str; default = "alacritty"; description = "Choose sway's default terminal"; }; v4l2loopback.enable = mkOption { type = types.bool; default = true; description = "WebCam streaming tool"; }; }; config = mkIf psCfg.sway.enable (mkMerge [ (mkIf (psCfg.sway.v4l2loopback.enable) { boot.extraModulePackages = with config.boot.kernelPackages; [v4l2loopback]; boot.kernelModules = ["v4l2loopback"]; boot.extraModprobeConfig = '' options v4l2loopback exclusive_caps=1 devices=3 ''; }) { environment.systemPackages = with pkgs; [ linuxPackages.v4l2loopback ]; programs.sway.enable = true; xdg.portal = { enable = true; wlr = { enable = true; settings = { screencast = { max_fps = 30; chooser_type = "simple"; chooser_cmd = "${pkgs.slurp}/bin/slurp -f %o -or"; }; }; }; extraPortals = with pkgs; [xdg-desktop-portal-gtk]; }; services.pipewire.enable = true; home-manager = with pkgs; pkgs.lib.setAttrByPath ["users" psCfg.user.name] { home.packages = with pkgs; [ sway grim kanshi mako slurp swaynotificationcenter swayidle swaylock swaybg xwayland libappindicator-gtk3 wl-clipboard wf-recorder brightnessctl gammastep geoclue2 xsettingsd ydotool sway-launcher record-screen import-gtk-settings s wcwd ]; programs.waybar.enable = true; #programs.waybar.systemd.enable = true; systemd.user.services.swaynotificationcenter = import ./swaynotificationcenter.service.nix pkgs; systemd.user.services.sway = import ./sway.service.nix {inherit pkgs psCfg;}; systemd.user.services.swayidle = import ./swayidle.service.nix {inherit pkgs psCfg;}; systemd.user.services.xsettingsd = import ./xsettingsd.service.nix {inherit pkgs psCfg;}; systemd.user.services.waybar = import ./waybar.service.nix {inherit pkgs psCfg;}; systemd.user.targets.sway-session = import ./sway-session.target.nix {inherit pkgs psCfg;}; xdg.configFile."sway/config".text = import ./config/config.nix {inherit config pkgs;}; xdg.configFile."sway/config.d/colorscheme.conf".source = ./config/config.d/colorscheme.conf; xdg.configFile."sway/config.d/theme.conf".source = ./config/config.d/theme.conf; xdg.configFile."sway/config.d/gaps.conf".source = ./config/config.d/gaps.conf; xdg.configFile."sway/config.d/custom-keybindings.conf".source = ./config/config.d/custom-keybindings.conf; xdg.configFile."sway/config.d/mode_system.conf".text = import ./config/config.d/mode_system.conf.nix {inherit pkgs psCfg;}; xdg.configFile."sway/config.d/applications.conf".source = ./config/config.d/applications.conf; xdg.configFile."sway/config.d/systemd.conf".source = ./config/config.d/systemd.conf; }; } ]); }