{ 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"; }; vnc.enable = mkEnableOption "Enable vnc service"; 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 ]; gtkUsePortal = true; }; services.pipewire.enable = true; home-manager = with pkgs; pkgs.lib.setAttrByPath [ "users" psCfg.user.name ] { home.packages = with pkgs; [ sway grim kanshi mako slurp 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.mako = import ./mako.service.nix { inherit pkgs psCfg; }; 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; }; systemd.user.services.wayvnc = mkIf psCfg.sway.vnc.enable (import ./wayvnc.service.nix pkgs); 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; xdg.configFile."wayvnc/config".text = import ./config/wayvnc/config.nix { inherit psCfg; inherit pkgs; }; }; }) ]); }