From d4541842a4a3d18cc49f987cdd361745fa8077e9 Mon Sep 17 00:00:00 2001 From: arindy Date: Thu, 6 Aug 2026 18:02:26 +0200 Subject: [PATCH] adds vesktop, obs, nvim and easyeffects config --- .config/easyeffects/db/bassEnhancerrc | 2 + .config/easyeffects/db/compressorrc | 2 + .config/easyeffects/db/easyeffectsrc | 23 + .config/easyeffects/db/filterrc | 3 + .config/easyeffects/db/gaterc | 3 + .config/easyeffects/db/limiterrc | 2 + .config/easyeffectsrc | 2 + .config/nvim/init.lua | 988 ++++++++++++++++++ .config/nvim/lazy-lock.json | 25 + .config/nvim/lua/themes/Serpensortia.lua | 353 +++++++ .../basic/profiles/Arindy/basic.ini | 114 ++ .../basic/profiles/Arindy/service.json | 1 + .../basic/profiles/Arindy/service.json.bak | 1 + .config/obs-studio/basic/scenes/Untitled.json | 245 +++++ .../obs-studio/basic/scenes/Untitled.json.bak | 245 +++++ .config/obs-studio/global.ini | 20 + .../plugin_config/obs-websocket/config.json | 8 + .../rtmp-services/amazon_ivs_ingests.json | 130 +++ .../plugin_config/rtmp-services/package.json | 1 + .../plugin_config/rtmp-services/services.json | 1 + .../rtmp-services/twitch_ingests.json | 130 +++ .config/obs-studio/user.ini | 78 ++ .config/vesktop/settings.json | 7 + .config/vesktop/settings/quickCss.css | 0 .config/vesktop/settings/settings.json | 603 +++++++++++ .config/vesktop/themes/Serpensortia.theme.css | 636 +++++++++++ 26 files changed, 3623 insertions(+) create mode 100644 .config/easyeffects/db/bassEnhancerrc create mode 100644 .config/easyeffects/db/compressorrc create mode 100644 .config/easyeffects/db/easyeffectsrc create mode 100644 .config/easyeffects/db/filterrc create mode 100644 .config/easyeffects/db/gaterc create mode 100644 .config/easyeffects/db/limiterrc create mode 100644 .config/easyeffectsrc create mode 100644 .config/nvim/init.lua create mode 100644 .config/nvim/lazy-lock.json create mode 100644 .config/nvim/lua/themes/Serpensortia.lua create mode 100644 .config/obs-studio/basic/profiles/Arindy/basic.ini create mode 100644 .config/obs-studio/basic/profiles/Arindy/service.json create mode 100644 .config/obs-studio/basic/profiles/Arindy/service.json.bak create mode 100644 .config/obs-studio/basic/scenes/Untitled.json create mode 100644 .config/obs-studio/basic/scenes/Untitled.json.bak create mode 100644 .config/obs-studio/global.ini create mode 100644 .config/obs-studio/plugin_config/obs-websocket/config.json create mode 100644 .config/obs-studio/plugin_config/rtmp-services/amazon_ivs_ingests.json create mode 100644 .config/obs-studio/plugin_config/rtmp-services/package.json create mode 100644 .config/obs-studio/plugin_config/rtmp-services/services.json create mode 100644 .config/obs-studio/plugin_config/rtmp-services/twitch_ingests.json create mode 100644 .config/obs-studio/user.ini create mode 100644 .config/vesktop/settings.json create mode 100644 .config/vesktop/settings/quickCss.css create mode 100644 .config/vesktop/settings/settings.json create mode 100644 .config/vesktop/themes/Serpensortia.theme.css diff --git a/.config/easyeffects/db/bassEnhancerrc b/.config/easyeffects/db/bassEnhancerrc new file mode 100644 index 0000000..b312400 --- /dev/null +++ b/.config/easyeffects/db/bassEnhancerrc @@ -0,0 +1,2 @@ +[soe][BassEnhancer#0] +amount=2 diff --git a/.config/easyeffects/db/compressorrc b/.config/easyeffects/db/compressorrc new file mode 100644 index 0000000..3826e39 --- /dev/null +++ b/.config/easyeffects/db/compressorrc @@ -0,0 +1,2 @@ +[sie][Compressor#0] +sidechainMode=1 diff --git a/.config/easyeffects/db/easyeffectsrc b/.config/easyeffects/db/easyeffectsrc new file mode 100644 index 0000000..8f7887d --- /dev/null +++ b/.config/easyeffects/db/easyeffectsrc @@ -0,0 +1,23 @@ +[Presets] +lastLoadedInputPreset=male_voices_with_noise_reduction + +[StreamInputs] +inputDevice=alsa_input.usb-Kingston_HyperX_Quadcast_HyperX_QuadCast_SharkLatan-00.iec958-stereo +mostUsedPresets=male_voices_with_noise_reduction +plugins=gate#0,compressor#0,filter#0,deesser#0,rnnoise#0,limiter#0 +useDefaultInputDevice=false +usedPresets=male_voices_with_noise_reduction:1 +visiblePlugin=gate#0 + +[StreamOutputs] +outputDevice=alsa_output.pci-0000_09_00.4.pro-output-0 +plugins=bass_enhancer#0 +useDefaultOutputDevice=false +visiblePage=pluginsPage +visiblePlugin=bass_enhancer#0 + +[Window] +autostartOnLogin=true +height=1362 +noWindowAfterStarting=true +width=1255 diff --git a/.config/easyeffects/db/filterrc b/.config/easyeffects/db/filterrc new file mode 100644 index 0000000..78121dc --- /dev/null +++ b/.config/easyeffects/db/filterrc @@ -0,0 +1,3 @@ +[sie][Filter#0] +bypass=true +frequency=80 diff --git a/.config/easyeffects/db/gaterc b/.config/easyeffects/db/gaterc new file mode 100644 index 0000000..51f0781 --- /dev/null +++ b/.config/easyeffects/db/gaterc @@ -0,0 +1,3 @@ +[sie][Gate#0] +attack=5 +bypass=true diff --git a/.config/easyeffects/db/limiterrc b/.config/easyeffects/db/limiterrc new file mode 100644 index 0000000..c00761c --- /dev/null +++ b/.config/easyeffects/db/limiterrc @@ -0,0 +1,2 @@ +[sie][Limiter#0] +threshold=-1 diff --git a/.config/easyeffectsrc b/.config/easyeffectsrc new file mode 100644 index 0000000..204b975 --- /dev/null +++ b/.config/easyeffectsrc @@ -0,0 +1,2 @@ +[UiSettings] +ColorScheme=KritaDarker diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua new file mode 100644 index 0000000..dffb204 --- /dev/null +++ b/.config/nvim/init.lua @@ -0,0 +1,988 @@ +-- Set as the leader key +-- See `:help mapleader` +-- NOTE: Must happen before plugins are loaded (otherwise wrong leader will be used) +vim.g.mapleader = " " +vim.g.maplocalleader = " " + +-- Set to true if you have a Nerd Font installed and selected in the terminal +vim.g.have_nerd_font = true + +-- [[ Setting options ]] +-- See `:help vim.o` +-- NOTE: You can change these options as you wish! +-- For more options, you can see `:help option-list` + +-- Make line numbers default +vim.o.number = true +-- You can also add relative line numbers, to help with jumping. +-- Experiment for yourself to see if you like it! +vim.o.relativenumber = true + +-- Enable mouse mode, can be useful for resizing splits for example! +vim.o.mouse = "a" + +-- Don't show the mode, since it's already in the status line +vim.o.showmode = false + +-- Sync clipboard between OS and Neovim. +-- Schedule the setting after `UiEnter` because it can increase startup-time. +-- Remove this option if you want your OS clipboard to remain independent. +-- See `:help 'clipboard'` +vim.schedule(function() + vim.o.clipboard = "unnamedplus" +end) + +-- Enable break indent +vim.o.breakindent = true + +-- Enable undo/redo changes even after closing and reopening a file +vim.o.undofile = true + +-- Case-insensitive searching UNLESS \C or one or more capital letters in the search term +vim.o.ignorecase = true +vim.o.smartcase = true + +-- Keep signcolumn on by default +vim.o.signcolumn = "yes" + +-- Decrease update time +vim.o.updatetime = 250 + +-- Decrease mapped sequence wait time +vim.o.timeoutlen = 300 + +-- Configure how new splits should be opened +vim.o.splitright = true +vim.o.splitbelow = true + +-- Sets how neovim will display certain whitespace characters in the editor. +-- See `:help 'list'` +-- and `:help 'listchars'` +-- +-- Notice listchars is set using `vim.opt` instead of `vim.o`. +-- It is very similar to `vim.o` but offers an interface for conveniently interacting with tables. +-- See `:help lua-options` +-- and `:help lua-guide-options` +vim.o.list = true +vim.opt.listchars = { tab = "» ", trail = "·", nbsp = "␣" } + +-- Preview substitutions live, as you type! +vim.o.inccommand = "split" + +-- Show which line your cursor is on +vim.o.cursorline = true + +-- Minimal number of screen lines to keep above and below the cursor. +vim.o.scrolloff = 10 + +-- if performing an operation that would fail due to unsaved changes in the buffer (like `:q`), +-- instead raise a dialog asking if you wish to save the current file(s) +-- See `:help 'confirm'` +vim.o.confirm = true + +-- [[ Basic Keymaps ]] +-- See `:help vim.keymap.set()` + +-- Clear highlights on search when pressing in normal mode +-- See `:help hlsearch` +vim.keymap.set("n", "", "nohlsearch") + +-- Diagnostic Config & Keymaps +-- See :help vim.diagnostic.Opts +vim.diagnostic.config({ + update_in_insert = false, + severity_sort = true, + float = { border = "rounded", source = "if_many" }, + underline = { severity = { min = vim.diagnostic.severity.WARN } }, + + -- Can switch between these as you prefer + virtual_text = true, -- Text shows up at the end of the line + virtual_lines = false, -- Text shows up underneath the line, with virtual lines + + -- Auto open the float, so you can easily read the errors when jumping with `[d` and `]d` + jump = { float = true }, +}) + +vim.keymap.set("n", "q", vim.diagnostic.setloclist, { desc = "Open diagnostic [Q]uickfix list" }) + +-- Exit terminal mode in the builtin terminal with a shortcut that is a bit easier +-- for people to discover. Otherwise, you normally need to press , which +-- is not what someone will guess without a bit more experience. +-- +-- NOTE: This won't work in all terminal emulators/tmux/etc. Try your own mapping +-- or just use to exit terminal mode +vim.keymap.set("t", "", "", { desc = "Exit terminal mode" }) + +-- TIP: Disable arrow keys in normal mode +-- vim.keymap.set('n', '', 'echo "Use h to move!!"') +-- vim.keymap.set('n', '', 'echo "Use l to move!!"') +-- vim.keymap.set('n', '', 'echo "Use k to move!!"') +-- vim.keymap.set('n', '', 'echo "Use j to move!!"') + +-- Keybinds to make split navigation easier. +-- Use CTRL+ to switch between windows +-- +-- See `:help wincmd` for a list of all window commands +vim.keymap.set("n", "", "", { desc = "Move focus to the left window" }) +vim.keymap.set("n", "", "", { desc = "Move focus to the right window" }) +vim.keymap.set("n", "", "", { desc = "Move focus to the lower window" }) +vim.keymap.set("n", "", "", { desc = "Move focus to the upper window" }) + +-- NOTE: Some terminals have colliding keymaps or are not able to send distinct keycodes +-- vim.keymap.set("n", "", "H", { desc = "Move window to the left" }) +-- vim.keymap.set("n", "", "L", { desc = "Move window to the right" }) +-- vim.keymap.set("n", "", "J", { desc = "Move window to the lower" }) +-- vim.keymap.set("n", "", "K", { desc = "Move window to the upper" }) + +-- [[ Basic Autocommands ]] +-- See `:help lua-guide-autocommands` + +-- Highlight when yanking (copying) text +-- Try it with `yap` in normal mode +-- See `:help vim.hl.on_yank()` +vim.api.nvim_create_autocmd("TextYankPost", { + desc = "Highlight when yanking (copying) text", + group = vim.api.nvim_create_augroup("kickstart-highlight-yank", { clear = true }), + callback = function() + vim.hl.on_yank() + end, +}) + +-- [[ Install `lazy.nvim` plugin manager ]] +-- See `:help lazy.nvim.txt` or https://github.com/folke/lazy.nvim for more info +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + error("Error cloning lazy.nvim:\n" .. out) + end +end + +---@type vim.Option +local rtp = vim.opt.rtp +rtp:prepend(lazypath) + +-- [[ Configure and install plugins ]] +-- +-- To check the current status of your plugins, run +-- :Lazy +-- +-- You can press `?` in this menu for help. Use `:q` to close the window +-- +-- To update plugins you can run +-- :Lazy update +-- +-- NOTE: Here is where you install your plugins. +-- TODO: CleanUp +require("lazy").setup({ + opts = { + change_detection = { + notify = false, + }, + checker = { + enabled = true, + notify = false, + }, + }, + -- NOTE: Plugins can be added via a link or github org/name. To run setup automatically, use `opts = {}` + { "NMAC427/guess-indent.nvim", opts = {} }, + + -- Alternatively, use `config = function() ... end` for full control over the configuration. + -- If you prefer to call `setup` explicitly, use: + -- { + -- 'lewis6991/gitsigns.nvim', + -- config = function() + -- require('gitsigns').setup({ + -- -- Your gitsigns configuration here + -- }) + -- end, + -- } + -- + -- Here is a more advanced example where we pass configuration + -- options to `gitsigns.nvim`. + -- + -- See `:help gitsigns` to understand what the configuration keys do + { -- Adds git related signs to the gutter, as well as utilities for managing changes + "lewis6991/gitsigns.nvim", + ---@module 'gitsigns' + ---@type Gitsigns.Config + ---@diagnostic disable-next-line: missing-fields + opts = { + signs = { + add = { text = "+" }, ---@diagnostic disable-line: missing-fields + change = { text = "~" }, ---@diagnostic disable-line: missing-fields + delete = { text = "_" }, ---@diagnostic disable-line: missing-fields + topdelete = { text = "‾" }, ---@diagnostic disable-line: missing-fields + changedelete = { text = "~" }, ---@diagnostic disable-line: missing-fields + }, + }, + }, + + -- NOTE: Plugins can also be configured to run Lua code when they are loaded. + -- + -- This is often very useful to both group configuration, as well as handle + -- lazy loading plugins that don't need to be loaded immediately at startup. + -- + -- For example, in the following configuration, we use: + -- event = 'VimEnter' + -- + -- which loads which-key before all the UI elements are loaded. Events can be + -- normal autocommands events (`:help autocmd-events`). + -- + -- Then, because we use the `opts` key (recommended), the configuration runs + -- after the plugin has been loaded as `require(MODULE).setup(opts)`. + + { -- Useful plugin to show you pending keybinds. + "folke/which-key.nvim", + event = "VimEnter", + ---@module 'which-key' + ---@type wk.Opts + ---@diagnostic disable-next-line: missing-fields + opts = { + -- delay between pressing a key and opening which-key (milliseconds) + delay = 0, + icons = { mappings = vim.g.have_nerd_font }, + + -- Document existing key chains + gspec = { + { "s", group = "[S]earch", mode = { "n", "v" } }, + { "t", group = "[T]oggle" }, + { "h", group = "Git [H]unk", mode = { "n", "v" } }, -- Enable gitsigns recommended keymaps first + { "gr", group = "LSP Actions", mode = { "n" } }, + }, + }, + }, + + -- NOTE: Plugins can specify dependencies. + -- + -- The dependencies are proper plugin specifications as well - anything + -- you do for a plugin at the top level, you can do for a dependency. + -- + -- Use the `dependencies` key to specify the dependencies of a particular plugin + + { -- Fuzzy Finder (files, lsp, etc) + "nvim-telescope/telescope.nvim", + -- By default, Telescope is included and acts as your picker for everything. + + -- If you would like to switch to a different picker (like snacks, or fzf-lua) + -- you can disable the Telescope plugin by setting enabled to false and enable + -- your replacement picker by requiring it explicitly (e.g. 'custom.plugins.snacks') + + -- Note: If you customize your config for yourself, + -- it’s best to remove the Telescope plugin config entirely + -- instead of just disabling it here, to keep your config clean. + enabled = true, + event = "VimEnter", + dependencies = { + "nvim-lua/plenary.nvim", + { -- If encountering errors, see telescope-fzf-native README for installation instructions + "nvim-telescope/telescope-fzf-native.nvim", + + -- `build` is used to run some command when the plugin is installed/updated. + -- This is only run then, not every time Neovim starts up. + build = "make", + + -- `cond` is a condition used to determine whether this plugin should be + -- installed and loaded. + cond = function() + return vim.fn.executable("make") == 1 + end, + }, + { "nvim-telescope/telescope-ui-select.nvim" }, + + -- Useful for getting pretty icons, but requires a Nerd Font. + { "nvim-tree/nvim-web-devicons", enabled = vim.g.have_nerd_font }, + }, + config = function() + -- Telescope is a fuzzy finder that comes with a lot of different things that + -- it can fuzzy find! It's more than just a "file finder", it can search + -- many different aspects of Neovim, your workspace, LSP, and more! + -- + -- The easiest way to use Telescope, is to start by doing something like: + -- :Telescope help_tags + -- + -- After running this command, a window will open up and you're able to + -- type in the prompt window. You'll see a list of `help_tags` options and + -- a corresponding preview of the help. + -- + -- Two important keymaps to use while in Telescope are: + -- - Insert mode: + -- - Normal mode: ? + -- + -- This opens a window that shows you all of the keymaps for the current + -- Telescope picker. This is really useful to discover what Telescope can + -- do as well as how to actually do it! + + -- [[ Configure Telescope ]] + -- See `:help telescope` and `:help telescope.setup()` + require("telescope").setup({ + -- You can put your default mappings / updates / etc. in here + -- All the info you're looking for is in `:help telescope.setup()` + -- + -- defaults = { + -- mappings = { + -- i = { [''] = 'to_fuzzy_refine' }, + -- }, + -- }, + -- pickers = {} + extensions = { + ["ui-select"] = { require("telescope.themes").get_dropdown() }, + }, + }) + + -- Enable Telescope extensions if they are installed + pcall(require("telescope").load_extension, "fzf") + pcall(require("telescope").load_extension, "ui-select") + + -- See `:help telescope.builtin` + local builtin = require("telescope.builtin") + vim.keymap.set("n", "sh", builtin.help_tags, { desc = "[S]earch [H]elp" }) + vim.keymap.set("n", "sk", builtin.keymaps, { desc = "[S]earch [K]eymaps" }) + vim.keymap.set("n", "sf", builtin.find_files, { desc = "[S]earch [F]iles" }) + vim.keymap.set("n", "ss", builtin.builtin, { desc = "[S]earch [S]elect Telescope" }) + vim.keymap.set({ "n", "v" }, "sw", builtin.grep_string, { desc = "[S]earch current [W]ord" }) + vim.keymap.set("n", "sg", builtin.live_grep, { desc = "[S]earch by [G]rep" }) + vim.keymap.set("n", "sd", builtin.diagnostics, { desc = "[S]earch [D]iagnostics" }) + vim.keymap.set("n", "sr", builtin.resume, { desc = "[S]earch [R]esume" }) + vim.keymap.set("n", "s.", builtin.oldfiles, { desc = '[S]earch Recent Files ("." for repeat)' }) + vim.keymap.set("n", "sc", builtin.commands, { desc = "[S]earch [C]ommands" }) + vim.keymap.set("n", "", builtin.buffers, { desc = "[ ] Find existing buffers" }) + + -- This runs on LSP attach per buffer (see main LSP attach function in 'neovim/nvim-lspconfig' config for more info, + -- it is better explained there). This allows easily switching between pickers if you prefer using something else! + vim.api.nvim_create_autocmd("LspAttach", { + group = vim.api.nvim_create_augroup("telescope-lsp-attach", { clear = true }), + callback = function(event) + local buf = event.buf + + -- Find references for the word under your cursor. + vim.keymap.set("n", "grr", builtin.lsp_references, { buffer = buf, desc = "[G]oto [R]eferences" }) + + -- Jump to the implementation of the word under your cursor. + -- Useful when your language has ways of declaring types without an actual implementation. + vim.keymap.set( + "n", + "gri", + builtin.lsp_implementations, + { buffer = buf, desc = "[G]oto [I]mplementation" } + ) + + -- Jump to the definition of the word under your cursor. + -- This is where a variable was first declared, or where a function is defined, etc. + -- To jump back, press . + vim.keymap.set("n", "grd", builtin.lsp_definitions, { buffer = buf, desc = "[G]oto [D]efinition" }) + + -- Fuzzy find all the symbols in your current document. + -- Symbols are things like variables, functions, types, etc. + vim.keymap.set( + "n", + "gO", + builtin.lsp_document_symbols, + { buffer = buf, desc = "Open Document Symbols" } + ) + + -- Fuzzy find all the symbols in your current workspace. + -- Similar to document symbols, except searches over your entire project. + vim.keymap.set( + "n", + "gW", + builtin.lsp_dynamic_workspace_symbols, + { buffer = buf, desc = "Open Workspace Symbols" } + ) + + -- Jump to the type of the word under your cursor. + -- Useful when you're not sure what type a variable is and you want to see + -- the definition of its *type*, not where it was *defined*. + vim.keymap.set( + "n", + "grt", + builtin.lsp_type_definitions, + { buffer = buf, desc = "[G]oto [T]ype Definition" } + ) + end, + }) + + -- Override default behavior and theme when searching + vim.keymap.set("n", "/", function() + -- You can pass additional configuration to Telescope to change the theme, layout, etc. + builtin.current_buffer_fuzzy_find(require("telescope.themes").get_dropdown({ + winblend = 10, + previewer = false, + })) + end, { desc = "[/] Fuzzily search in current buffer" }) + + -- It's also possible to pass additional configuration options. + -- See `:help telescope.builtin.live_grep()` for information about particular keys + vim.keymap.set("n", "s/", function() + builtin.live_grep({ + grep_open_files = true, + prompt_title = "Live Grep in Open Files", + }) + end, { desc = "[S]earch [/] in Open Files" }) + + -- Shortcut for searching your Neovim configuration files + vim.keymap.set("n", "sn", function() + builtin.find_files({ cwd = vim.fn.stdpath("config") }) + end, { desc = "[S]earch [N]eovim files" }) + end, + }, + + -- LSP Plugins + { + -- Main LSP Configuration + "neovim/nvim-lspconfig", + dependencies = { + -- Automatically install LSPs and related tools to stdpath for Neovim + -- Mason must be loaded before its dependents so we need to set it up here. + -- NOTE: `opts = {}` is the same as calling `require('mason').setup({})` + { + "mason-org/mason.nvim", + ---@module 'mason.settings' + ---@type MasonSettings + ---@diagnostic disable-next-line: missing-fields + opts = {}, + }, + -- Maps LSP server names between nvim-lspconfig and Mason package names. + "mason-org/mason-lspconfig.nvim", + "WhoIsSethDaniel/mason-tool-installer.nvim", + + -- Useful status updates for LSP. + { "j-hui/fidget.nvim", opts = {} }, + }, + config = function() + -- Brief aside: **What is LSP?** + -- + -- LSP is an initialism you've probably heard, but might not understand what it is. + -- + -- LSP stands for Language Server Protocol. It's a protocol that helps editors + -- and language tooling communicate in a standardized fashion. + -- + -- In general, you have a "server" which is some tool built to understand a particular + -- language (such as `gopls`, `lua_ls`, `rust_analyzer`, etc.). These Language Servers + -- (sometimes called LSP servers, but that's kind of like ATM Machine) are standalone + -- processes that communicate with some "client" - in this case, Neovim! + -- + -- LSP provides Neovim with features like: + -- - Go to definition + -- - Find references + -- - Autocompletion + -- - Symbol Search + -- - and more! + -- + -- Thus, Language Servers are external tools that must be installed separately from + -- Neovim. This is where `mason` and related plugins come into play. + -- + -- If you're wondering about lsp vs treesitter, you can check out the wonderfully + -- and elegantly composed help section, `:help lsp-vs-treesitter` + + -- This function gets run when an LSP attaches to a particular buffer. + -- That is to say, every time a new file is opened that is associated with + -- an lsp (for example, opening `main.rs` is associated with `rust_analyzer`) this + -- function will be executed to configure the current buffer + vim.api.nvim_create_autocmd("LspAttach", { + group = vim.api.nvim_create_augroup("kickstart-lsp-attach", { clear = true }), + callback = function(event) + -- NOTE: Remember that Lua is a real programming language, and as such it is possible + -- to define small helper and utility functions so you don't have to repeat yourself. + -- + -- In this case, we create a function that lets us more easily define mappings specific + -- for LSP related items. It sets the mode, buffer and description for us each time. + local map = function(keys, func, desc, mode) + mode = mode or "n" + vim.keymap.set(mode, keys, func, { buffer = event.buf, desc = "LSP: " .. desc }) + end + + -- Rename the variable under your cursor. + -- Most Language Servers support renaming across files, etc. + map("grn", vim.lsp.buf.rename, "[R]e[n]ame") + + -- Execute a code action, usually your cursor needs to be on top of an error + -- or a suggestion from your LSP for this to activate. + map("gra", vim.lsp.buf.code_action, "[G]oto Code [A]ction", { "n", "x" }) + + -- WARN: This is not Goto Definition, this is Goto Declaration. + -- For example, in C this would take you to the header. + map("grD", vim.lsp.buf.declaration, "[G]oto [D]eclaration") + + -- The following two autocommands are used to highlight references of the + -- word under your cursor when your cursor rests there for a little while. + -- See `:help CursorHold` for information about when this is executed + -- + -- When you move your cursor, the highlights will be cleared (the second autocommand). + local client = vim.lsp.get_client_by_id(event.data.client_id) + if client and client:supports_method("textDocument/documentHighlight", event.buf) then + local highlight_augroup = + vim.api.nvim_create_augroup("kickstart-lsp-highlight", { clear = false }) + vim.api.nvim_create_autocmd({ "CursorHold", "CursorHoldI" }, { + buffer = event.buf, + group = highlight_augroup, + callback = vim.lsp.buf.document_highlight, + }) + + vim.api.nvim_create_autocmd({ "CursorMoved", "CursorMovedI" }, { + buffer = event.buf, + group = highlight_augroup, + callback = vim.lsp.buf.clear_references, + }) + + vim.api.nvim_create_autocmd("LspDetach", { + group = vim.api.nvim_create_augroup("kickstart-lsp-detach", { clear = true }), + callback = function(event2) + vim.lsp.buf.clear_references() + vim.api.nvim_clear_autocmds({ group = "kickstart-lsp-highlight", buffer = event2.buf }) + end, + }) + end + + -- The following code creates a keymap to toggle inlay hints in your + -- code, if the language server you are using supports them + -- + -- This may be unwanted, since they displace some of your code + if client and client:supports_method("textDocument/inlayHint", event.buf) then + map("th", function() + vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled({ bufnr = event.buf })) + end, "[T]oggle Inlay [H]ints") + end + end, + }) + + -- Enable the following language servers + -- Feel free to add/remove any LSPs that you want here. They will automatically be installed. + -- See `:help lsp-config` for information about keys and how to configure + ---@type table + local servers = { + -- clangd = {}, + -- gopls = {}, + -- pyright = {}, + -- rust_analyzer = {}, + texlab = {}, + kotlin_lsp = {}, + -- Some languages (like typescript) have entire language plugins that can be useful: + -- https://github.com/pmizio/typescript-tools.nvim + -- + -- But for many setups, the LSP (`ts_ls`) will work just fine + -- ts_ls = {}, + + stylua = {}, -- Used to format Lua code + + -- Special Lua Config, as recommended by neovim help docs + lua_ls = { + on_init = function(client) + client.server_capabilities.documentFormattingProvider = false -- Disable formatting (formatting is done by stylua) + + if client.workspace_folders then + local path = client.workspace_folders[1].name + if + path ~= vim.fn.stdpath("config") + and (vim.uv.fs_stat(path .. "/.luarc.json") or vim.uv.fs_stat(path .. "/.luarc.jsonc")) + then + return + end + end + + client.config.settings.Lua = vim.tbl_deep_extend("force", client.config.settings.Lua, { + runtime = { + version = "LuaJIT", + path = { "lua/?.lua", "lua/?/init.lua" }, + }, + workspace = { + checkThirdParty = false, + -- NOTE: this is a lot slower and will cause issues when working on your own configuration. + -- See https://github.com/neovim/nvim-lspconfig/issues/3189 + library = vim.tbl_extend("force", vim.api.nvim_get_runtime_file("", true), { + "${3rd}/luv/library", + "${3rd}/busted/library", + }), + }, + }) + end, + ---@type lspconfig.settings.lua_ls + settings = { + Lua = { + format = { enable = false }, -- Disable formatting (formatting is done by stylua) + }, + }, + }, + } + + -- Ensure the servers and tools above are installed + -- + -- To check the current status of installed tools and/or manually install + -- other tools, you can run + -- :Mason + -- + -- You can press `g?` for help in this menu. + local ensure_installed = vim.tbl_keys(servers or {}) + vim.list_extend(ensure_installed, { + -- You can add other tools here that you want Mason to install + }) + + require("mason-tool-installer").setup({ ensure_installed = ensure_installed }) + + for name, server in pairs(servers) do + vim.lsp.config(name, server) + vim.lsp.enable(name) + end + end, + }, + + { -- Autoformat + "stevearc/conform.nvim", + event = { "BufWritePre" }, + cmd = { "ConformInfo" }, + keys = { + { + "f", + function() + require("conform").format({ async = true }) + end, + mode = "", + desc = "[F]ormat buffer", + }, + }, + ---@module 'conform' + ---@type conform.setupOpts + opts = { + notify_on_error = false, + format_on_save = function(bufnr) + -- You can specify filetypes to autoformat on save here: + local enabled_filetypes = { + -- lua = true, + -- python = true, + } + if enabled_filetypes[vim.bo[bufnr].filetype] then + return { timeout_ms = 500 } + else + return nil + end + end, + default_format_opts = { + lsp_format = "fallback", -- Use external formatters if configured below, otherwise use LSP formatting. Set to `false` to disable LSP formatting entirely. + }, + -- You can also specify external formatters in here. + formatters_by_ft = { + -- rust = { 'rustfmt' }, + -- Conform can also run multiple formatters sequentially + -- python = { "isort", "black" }, + -- + -- You can use 'stop_after_first' to run the first available formatter from the list + -- javascript = { "prettierd", "prettier", stop_after_first = true }, + }, + }, + }, + + { -- Autocompletion + "saghen/blink.cmp", + event = "VimEnter", + version = "1.*", + dependencies = { + -- Snippet Engine + { + "L3MON4D3/LuaSnip", + version = "2.*", + build = (function() + -- Build Step is needed for regex support in snippets. + -- This step is not supported in many windows environments. + -- Remove the below condition to re-enable on windows. + if vim.fn.has("win32") == 1 or vim.fn.executable("make") == 0 then + return + end + return "make install_jsregexp" + end)(), + dependencies = { + -- `friendly-snippets` contains a variety of premade snippets. + -- See the README about individual language/framework/plugin snippets: + -- https://github.com/rafamadriz/friendly-snippets + -- { + -- 'rafamadriz/friendly-snippets', + -- config = function() + -- require('luasnip.loaders.from_vscode').lazy_load() + -- end, + -- }, + }, + opts = {}, + }, + }, + ---@module 'blink.cmp' + ---@type blink.cmp.Config + opts = { + keymap = { + -- 'default' (recommended) for mappings similar to built-in completions + -- to accept ([y]es) the completion. + -- This will auto-import if your LSP supports it. + -- This will expand snippets if the LSP sent a snippet. + -- 'super-tab' for tab to accept + -- 'enter' for enter to accept + -- 'none' for no mappings + -- + -- For an understanding of why the 'default' preset is recommended, + -- you will need to read `:help ins-completion` + -- + -- No, but seriously. Please read `:help ins-completion`, it is really good! + -- + -- All presets have the following mappings: + -- /: move to right/left of your snippet expansion + -- : Open menu or open docs if already open + -- / or /: Select next/previous item + -- : Hide menu + -- : Toggle signature help + -- + -- See :h blink-cmp-config-keymap for defining your own keymap + preset = "default", + + -- For more advanced Luasnip keymaps (e.g. selecting choice nodes, expansion) see: + -- https://github.com/L3MON4D3/LuaSnip?tab=readme-ov-file#keymaps + }, + + appearance = { + -- 'mono' (default) for 'Nerd Font Mono' or 'normal' for 'Nerd Font' + -- Adjusts spacing to ensure icons are aligned + nerd_font_variant = "mono", + }, + + completion = { + -- By default, you may press `` to show the documentation. + -- Optionally, set `auto_show = true` to show the documentation after a delay. + documentation = { auto_show = false, auto_show_delay_ms = 500 }, + }, + + sources = { + default = { "lsp", "path", "snippets" }, + }, + + snippets = { preset = "luasnip" }, + + -- Blink.cmp includes an optional, recommended rust fuzzy matcher, + -- which automatically downloads a prebuilt binary when enabled. + -- + -- By default, we use the Lua implementation instead, but you may enable + -- the rust implementation via `'prefer_rust_with_warning'` + -- + -- See :h blink-cmp-config-fuzzy for more information + fuzzy = { implementation = "lua" }, + + -- Shows a signature help window while you type arguments for a function + signature = { enabled = true }, + }, + }, + + { -- You can easily change to a different colorscheme. + -- Change the name of the colorscheme plugin below, and then + -- change the command in the config to whatever the name of that colorscheme is. + -- + -- If you want to see what colorschemes are already installed, you can use `:Telescope colorscheme`. + "folke/tokyonight.nvim", + priority = 1000, -- Make sure to load this before all the other start plugins. + config = function() + ---@diagnostic disable-next-line: missing-fields + require("tokyonight").setup({ + styles = { + comments = { italic = false }, -- Disable italics in comments + }, + }) + + -- Load the colorscheme here. + -- Like many other themes, this one has different styles, and you could load + -- any other, such as 'tokyonight-storm', 'tokyonight-moon', or 'tokyonight-day'. + -- vim.cmd.colorscheme("tokyonight-night") + end, + }, + require("themes.Serpensortia").setup({}), + + + -- Highlight todo, notes, etc in comments + { + "folke/todo-comments.nvim", + event = "VimEnter", + dependencies = { "nvim-lua/plenary.nvim" }, + ---@module 'todo-comments' + ---@type TodoOptions + ---@diagnostic disable-next-line: missing-fields + opts = { signs = false }, + }, + + { -- Collection of various small independent plugins/modules + "nvim-mini/mini.nvim", + config = function() + -- Better Around/Inside textobjects + -- + -- Examples: + -- - va) - [V]isually select [A]round [)]paren + -- - yiiq - [Y]ank [I]nside [I]+1 [Q]uote + -- - ci' - [C]hange [I]nside [']quote + require("mini.ai").setup({ + -- NOTE: Avoid conflicts with the built-in incremental selection mappings on Neovim>=0.12 (see `:help treesitter-incremental-selection`) + mappings = { + around_next = "aa", + inside_next = "ii", + }, + n_lines = 500, + }) + + -- Add/delete/replace surroundings (brackets, quotes, etc.) + -- + -- - saiw) - [S]urround [A]dd [I]nner [W]ord [)]Paren + -- - sd' - [S]urround [D]elete [']quotes + -- - sr)' - [S]urround [R]eplace [)] ['] + require("mini.surround").setup() + + -- Simple and easy statusline. + -- You could remove this setup call if you don't like it, + -- and try some other statusline plugin + local statusline = require("mini.statusline") + -- set use_icons to true if you have a Nerd Font + statusline.setup({ use_icons = vim.g.have_nerd_font }) + + -- You can configure sections in the statusline by overriding their + -- default behavior. For example, here we set the section for + -- cursor location to LINE:COLUMN + ---@diagnostic disable-next-line: duplicate-set-field + statusline.section_location = function() + return "%2l:%-2v" + end + + -- ... and there is more! + -- Check out: https://github.com/nvim-mini/mini.nvim + end, + }, + + { -- Highlight, edit, and navigate code + "nvim-treesitter/nvim-treesitter", + lazy = false, + build = ":TSUpdate", + branch = "main", + -- [[ Configure Treesitter ]] See `:help nvim-treesitter-intro` + config = function() + -- ensure basic parser are installed + local parsers = { + "bash", + "c", + "diff", + "html", + "lua", + "luadoc", + "markdown", + "markdown_inline", + "query", + "vim", + "vimdoc", + } + require("nvim-treesitter").install(parsers) + + ---@param buf integer + ---@param language string + local function treesitter_try_attach(buf, language) + -- check if parser exists and load it + if not vim.treesitter.language.add(language) then + return + end + -- enables syntax highlighting and other treesitter features + vim.treesitter.start(buf, language) + + -- enables treesitter based folds + -- for more info on folds see `:help folds` + -- vim.wo.foldexpr = 'v:lua.vim.treesitter.foldexpr()' + -- vim.wo.foldmethod = 'expr' + + -- check if treesitter indentation is available for this language, and if so enable it + -- in case there is no indent query, the indentexpr will fallback to the vim's built in one + local has_indent_query = vim.treesitter.query.get(language, "indents") ~= nil + + -- enables treesitter based indentation + if has_indent_query then + vim.bo.indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()" + end + end + + local available_parsers = require("nvim-treesitter").get_available() + vim.api.nvim_create_autocmd("FileType", { + callback = function(args) + local buf, filetype = args.buf, args.match + + local language = vim.treesitter.language.get_lang(filetype) + if not language then + return + end + + local installed_parsers = require("nvim-treesitter").get_installed("parsers") + + if vim.tbl_contains(installed_parsers, language) then + -- enable the parser if it is installed + treesitter_try_attach(buf, language) + elseif vim.tbl_contains(available_parsers, language) then + -- if a parser is available in `nvim-treesitter` auto install it, and enable it after the installation is done + require("nvim-treesitter").install(language):await(function() + treesitter_try_attach(buf, language) + end) + else + -- try to enable treesitter features in case the parser exists but is not available from `nvim-treesitter` + treesitter_try_attach(buf, language) + end + end, + }) + end, + }, + { + "Goshujinsama/nvim-strudel", + ft = "strudel", + build = "cd server && npm install && npm run build", + keys = { + { "", "StrudelEval", ft = "strudel", desc = "Strudel: Eval" }, + { "ss", "StrudelStop", ft = "strudel", desc = "Strudel: Stop" }, + }, + config = function() + require("strudel").setup() + end, + }, + + -- The following comments only work if you have downloaded the kickstart repo, not just copy pasted the + -- init.lua. If you want these files, they are in the repository, so you can just download them and + -- place them in the correct locations. + + -- NOTE: Next step on your Neovim journey: Add/Configure additional plugins for Kickstart + -- + -- Here are some example plugins that I've included in the Kickstart repository. + -- Uncomment any of the lines below to enable them (you will need to restart nvim). + -- + -- require 'kickstart.plugins.debug', + -- require 'kickstart.plugins.indent_line', + -- require 'kickstart.plugins.lint', + -- require 'kickstart.plugins.autopairs', + -- require 'kickstart.plugins.neo-tree', + -- require 'kickstart.plugins.gitsigns', -- adds gitsigns recommended keymaps + + -- NOTE: The import below can automatically add your own plugins, configuration, etc from `lua/custom/plugins/*.lua` + -- This is the easiest way to modularize your config. + -- + -- Uncomment the following line and add your plugins to `lua/custom/plugins/*.lua` to get going. + -- { import = 'custom.plugins' }, + -- + -- For additional information with loading, sourcing and examples see `:help lazy.nvim-🔌-plugin-spec` + -- Or use telescope! + -- In normal mode type `sh` then write `lazy.nvim-plugin` + -- you can continue same window with `sr` which resumes last telescope search +}, { ---@diagnostic disable-line: missing-fields + ui = { + -- If you are using a Nerd Font: set icons to an empty table which will use the + -- default lazy.nvim defined Nerd Font icons, otherwise define a unicode icons table + icons = vim.g.have_nerd_font and {} or { + cmd = "⌘", + config = "🛠", + event = "📅", + ft = "📂", + init = "⚙", + keys = "🗝", + plugin = "🔌", + runtime = "💻", + require = "🌙", + source = "📄", + start = "🚀", + task = "📌", + lazy = "💤 ", + }, + }, +}) + +-- The line beneath this is called `modeline`. See `:help modeline` +-- vim: ts=2 sts=2 sw=2 et diff --git a/.config/nvim/lazy-lock.json b/.config/nvim/lazy-lock.json new file mode 100644 index 0000000..61dde61 --- /dev/null +++ b/.config/nvim/lazy-lock.json @@ -0,0 +1,25 @@ +{ + "LuaSnip": { "branch": "master", "commit": "642b0c595e11608b4c18219e93b88d7637af27bc" }, + "blink.cmp": { "branch": "main", "commit": "78336bc89ee5365633bcf754d93df01678b5c08f" }, + "conform.nvim": { "branch": "master", "commit": "18aeab3d63d350dcf44d64c462cc489a3412af40" }, + "darcula-dark.nvim": { "branch": "main", "commit": "285c1fe3225ef19ef2639a3080551ee9669f263b" }, + "fidget.nvim": { "branch": "main", "commit": "889e2e96edef4e144965571d46f7a77bcc4d0ddf" }, + "gitsigns.nvim": { "branch": "main", "commit": "dd3f588bacbeb041be6facf1742e42097f62165d" }, + "guess-indent.nvim": { "branch": "main", "commit": "84a4987ff36798c2fc1169cbaff67960aed9776f" }, + "lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" }, + "mason-lspconfig.nvim": { "branch": "main", "commit": "7b01e2974a47d489bb92f47a41e4c0088ea8f86e" }, + "mason-tool-installer.nvim": { "branch": "main", "commit": "443f1ef8b5e6bf47045cb2217b6f748a223cf7dc" }, + "mason.nvim": { "branch": "main", "commit": "8e921c2b68571e978db5d4d3fef9c9a7f8755473" }, + "mini.nvim": { "branch": "main", "commit": "6a8aab4b07c6caa1d0643c1c9dccd5b2d5f5e094" }, + "nvim-lspconfig": { "branch": "master", "commit": "3de240997fc3208eb29df5e5c17ba4665961bd84" }, + "nvim-strudel": { "branch": "main", "commit": "0be8675ab8c8fc12df32ac9f9b8d75029ddf2a00" }, + "nvim-treesitter": { "branch": "main", "commit": "4916d6592ede8c07973490d9322f187e07dfefac" }, + "nvim-web-devicons": { "branch": "master", "commit": "7d8dad2c837fcdf2e65997e68657c1a21c568074" }, + "plenary.nvim": { "branch": "master", "commit": "74b06c6c75e4eeb3108ec01852001636d85a932b" }, + "telescope-fzf-native.nvim": { "branch": "main", "commit": "b25b749b9db64d375d782094e2b9dce53ad53a40" }, + "telescope-ui-select.nvim": { "branch": "master", "commit": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2" }, + "telescope.nvim": { "branch": "master", "commit": "7d324792b7943e4aa16ad007212e6acc6f9fe335" }, + "todo-comments.nvim": { "branch": "main", "commit": "31e3c38ce9b29781e4422fc0322eb0a21f4e8668" }, + "tokyonight.nvim": { "branch": "main", "commit": "cdc07ac78467a233fd62c493de29a17e0cf2b2b6" }, + "which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" } +} diff --git a/.config/nvim/lua/themes/Serpensortia.lua b/.config/nvim/lua/themes/Serpensortia.lua new file mode 100644 index 0000000..6759485 --- /dev/null +++ b/.config/nvim/lua/themes/Serpensortia.lua @@ -0,0 +1,353 @@ +---@diagnostic disable: undefined-global +local M = {} + +function M.setup() + vim.cmd("highlight clear") + if vim.fn.exists("syntax_on") == 1 then + vim.cmd("syntax reset") + end + + vim.o.termguicolors = true + vim.g.colors_name = "Serpensortia" + + local c = { + bg = "#080c08", + surface = "#131d13", + surface2 = "#424a42", + fg = "#c0c0c0", + muted = "#424a42", + border = "#0b110b", + accent = "#1c7a44", + warn = "#dc143c", + + -- richer editor palette inspired by Islands Dark / Darcula-like schemes + green = "#1c7a44", + red = "#dc143c", + blue = "#6ca0ff", + cyan = "#67c7ff", + yellow = "#d9c36a", + orange = "#d78a4a", + purple = "#b48ef7", + teal = "#4db6ac", + + subtle = "#989898", + comment = "#424a42", + add = "#0c2415", + change = "#292c29", + delete = "#320e12", + } + + local function hi(group, opts) + vim.api.nvim_set_hl(0, group, opts) + end + + -- Base UI + hi("Normal", { fg = c.fg, bg = c.bg }) + hi("NormalNC", { fg = c.fg, bg = c.bg }) + hi("NormalFloat", { fg = c.fg, bg = c.surface }) + hi("FloatBorder", { fg = c.border, bg = c.surface }) + hi("FloatTitle", { fg = c.green, bg = c.surface, bold = true }) + hi("CursorLine", { bg = c.surface }) + hi("CursorColumn", { bg = c.surface }) + hi("ColorColumn", { bg = c.surface }) + hi("Conceal", { fg = c.muted }) + hi("LineNr", { fg = c.muted, bg = c.bg }) + hi("CursorLineNr", { fg = c.green, bg = c.bg, bold = true }) + hi("SignColumn", { fg = c.fg, bg = c.bg }) + hi("EndOfBuffer", { fg = c.bg, bg = c.bg }) + hi("VertSplit", { fg = c.border, bg = c.bg }) + hi("WinSeparator", { fg = c.border, bg = c.bg }) + hi("Folded", { fg = c.muted, bg = c.surface }) + hi("FoldColumn", { fg = c.muted, bg = c.bg }) + hi("MatchParen", { fg = c.yellow, bg = c.surface2, bold = true }) + hi("Whitespace", { fg = c.border }) + hi("NonText", { fg = c.border }) + + -- Selection / search + hi("Visual", { bg = c.surface2 }) + hi("VisualNOS", { bg = c.surface2 }) + hi("Search", { fg = c.bg, bg = c.yellow, bold = true }) + hi("IncSearch", { fg = c.bg, bg = c.orange, bold = true }) + hi("CurSearch", { fg = c.bg, bg = c.orange, bold = true }) + hi("Substitute", { fg = c.bg, bg = c.green, bold = true }) + + -- Popup menu + hi("Pmenu", { fg = c.fg, bg = c.surface }) + hi("PmenuSel", { fg = c.bg, bg = c.green, bold = true }) + hi("PmenuKind", { fg = c.cyan, bg = c.surface }) + hi("PmenuKindSel", { fg = c.bg, bg = c.green, bold = true }) + hi("PmenuExtra", { fg = c.muted, bg = c.surface }) + hi("PmenuExtraSel", { fg = c.bg, bg = c.green }) + hi("PmenuSbar", { bg = c.surface2 }) + hi("PmenuThumb", { bg = c.border }) + + -- Tabs / status + hi("StatusLine", { fg = c.fg, bg = c.surface }) + hi("StatusLineNC", { fg = c.muted, bg = c.surface }) + hi("TabLine", { fg = c.muted, bg = c.surface }) + hi("TabLineSel", { fg = c.fg, bg = c.bg, bold = true }) + hi("TabLineFill", { bg = c.surface }) + hi("WinBar", { fg = c.fg, bg = c.bg }) + hi("WinBarNC", { fg = c.muted, bg = c.bg }) + + -- Syntax + hi("Comment", { fg = c.comment, italic = true }) + hi("Constant", { fg = c.yellow, bold = true }) + hi("String", { fg = c.orange }) + hi("Character", { fg = c.orange }) + hi("Number", { fg = c.yellow, bold = true }) + hi("Boolean", { fg = c.purple, bold = true }) + hi("Float", { fg = c.yellow }) + hi("Identifier", { fg = c.fg }) + hi("Function", { fg = c.green, bold = true }) + hi("Statement", { fg = c.purple, bold = true }) + hi("Conditional", { fg = c.purple, bold = true }) + hi("Repeat", { fg = c.purple, bold = true }) + hi("Label", { fg = c.orange }) + hi("Operator", { fg = c.subtle }) + hi("Keyword", { fg = c.purple, italic = true, bold = true }) + hi("Exception", { fg = c.red, bold = true }) + hi("PreProc", { fg = c.blue }) + hi("Include", { fg = c.blue, italic = true }) + hi("Define", { fg = c.purple }) + hi("Macro", { fg = c.purple, bold = true }) + hi("PreCondit", { fg = c.blue }) + hi("Type", { fg = c.cyan, bold = true }) + hi("Typedef", { fg = c.cyan, bold = true }) + hi("StorageClass", { fg = c.blue, italic = true }) + hi("Structure", { fg = c.cyan, bold = true }) + hi("Special", { fg = c.teal }) + hi("SpecialChar", { fg = c.orange }) + hi("Tag", { fg = c.green }) + hi("Delimiter", { fg = c.subtle }) + hi("SpecialComment", { fg = c.comment, italic = true }) + hi("Debug", { fg = c.red, bold = true }) + hi("Title", { fg = c.green, bold = true }) + hi("Todo", { fg = c.bg, bg = c.yellow, bold = true }) + + -- Diagnostics + hi("DiagnosticError", { fg = c.red }) + hi("DiagnosticWarn", { fg = c.orange }) + hi("DiagnosticInfo", { fg = c.blue }) + hi("DiagnosticHint", { fg = c.teal }) + hi("DiagnosticOk", { fg = c.green }) + + hi("DiagnosticVirtualTextError", { fg = c.red, bg = c.delete }) + hi("DiagnosticVirtualTextWarn", { fg = c.orange, bg = c.surface }) + hi("DiagnosticVirtualTextInfo", { fg = c.blue, bg = c.surface }) + hi("DiagnosticVirtualTextHint", { fg = c.teal, bg = c.surface }) + + hi("DiagnosticUnderlineError", { undercurl = true, sp = c.red }) + hi("DiagnosticUnderlineWarn", { undercurl = true, sp = c.orange }) + hi("DiagnosticUnderlineInfo", { undercurl = true, sp = c.blue }) + hi("DiagnosticUnderlineHint", { undercurl = true, sp = c.teal }) + + hi("DiagnosticSignError", { fg = c.red, bg = c.bg }) + hi("DiagnosticSignWarn", { fg = c.orange, bg = c.bg }) + hi("DiagnosticSignInfo", { fg = c.blue, bg = c.bg }) + hi("DiagnosticSignHint", { fg = c.teal, bg = c.bg }) + + -- LSP references / semantic-ish + hi("LspReferenceText", { bg = c.surface2 }) + hi("LspReferenceRead", { bg = c.surface2 }) + hi("LspReferenceWrite", { bg = c.surface2, bold = true }) + hi("LspInlayHint", { fg = c.muted, bg = c.surface, italic = true }) + hi("LspCodeLens", { fg = c.muted, italic = true }) + hi("LspCodeLensSeparator", { fg = c.border }) + + -- Diff / Git + hi("DiffAdd", { bg = c.add, fg = c.green }) + hi("DiffChange", { bg = c.change, fg = c.blue }) + hi("DiffDelete", { bg = c.delete, fg = c.red }) + hi("DiffText", { bg = c.blue, fg = c.bg, bold = true }) + + hi("Added", { fg = c.green }) + hi("Changed", { fg = c.blue }) + hi("Removed", { fg = c.red }) + + hi("GitSignsAdd", { fg = c.green, bg = c.bg }) + hi("GitSignsChange", { fg = c.blue, bg = c.bg }) + hi("GitSignsDelete", { fg = c.red, bg = c.bg }) + hi("GitSignsCurrentLineBlame", { fg = c.muted, italic = true }) + + -- Treesitter + hi("@comment", { link = "Comment" }) + hi("@comment.documentation", { fg = c.comment, italic = true }) + + hi("@string", { link = "String" }) + hi("@string.escape", { fg = c.yellow, bold = true }) + hi("@string.regex", { fg = c.orange }) + hi("@string.special", { fg = c.orange }) + + hi("@character", { link = "Character" }) + hi("@character.special", { fg = c.orange }) + + hi("@number", { link = "Number" }) + hi("@number.float", { link = "Float" }) + hi("@boolean", { link = "Boolean" }) + hi("@constant", { link = "Constant" }) + hi("@constant.builtin", { fg = c.yellow, italic = true }) + hi("@constant.macro", { fg = c.purple, bold = true }) + + hi("@variable", { fg = c.fg }) + hi("@variable.builtin", { fg = c.red, italic = true }) + hi("@variable.parameter", { fg = c.fg, italic = true }) + hi("@variable.member", { fg = c.cyan }) + + hi("@module", { fg = c.blue }) + hi("@module.builtin", { fg = c.blue, italic = true }) + hi("@label", { fg = c.orange }) + + hi("@function", { link = "Function" }) + hi("@function.builtin", { fg = c.blue, italic = true, bold = true }) + hi("@function.call", { fg = c.green }) + hi("@function.macro", { fg = c.purple, bold = true }) + hi("@method", { fg = c.green }) + hi("@method.call", { fg = c.green }) + + hi("@constructor", { fg = c.cyan, bold = true }) + hi("@operator", { link = "Operator" }) + + hi("@keyword", { link = "Keyword" }) + hi("@keyword.function", { fg = c.purple, bold = true }) + hi("@keyword.operator", { fg = c.purple, italic = true }) + hi("@keyword.return", { fg = c.purple, bold = true, italic = true }) + hi("@keyword.import", { fg = c.blue, italic = true }) + hi("@keyword.conditional", { fg = c.purple, bold = true }) + hi("@keyword.repeat", { fg = c.purple, bold = true }) + hi("@keyword.exception", { fg = c.red, bold = true }) + + hi("@type", { link = "Type" }) + hi("@type.builtin", { fg = c.blue, italic = true, bold = true }) + hi("@type.definition", { fg = c.cyan, bold = true }) + hi("@attribute", { fg = c.yellow }) + hi("@property", { fg = c.cyan }) + hi("@field", { fg = c.cyan }) + hi("@parameter", { fg = c.fg, italic = true }) + + hi("@punctuation.delimiter", { fg = c.subtle }) + hi("@punctuation.bracket", { fg = c.subtle }) + hi("@punctuation.special", { fg = c.orange }) + + hi("@tag", { fg = c.green, bold = true }) + hi("@tag.attribute", { fg = c.yellow }) + hi("@tag.delimiter", { fg = c.subtle }) + + -- Telescope + hi("TelescopeNormal", { fg = c.fg, bg = c.surface }) + hi("TelescopeBorder", { fg = c.border, bg = c.surface }) + hi("TelescopeTitle", { fg = c.green, bg = c.surface, bold = true }) + hi("TelescopePromptNormal", { fg = c.fg, bg = c.surface }) + hi("TelescopePromptBorder", { fg = c.border, bg = c.surface }) + hi("TelescopePromptTitle", { fg = c.bg, bg = c.green, bold = true }) + hi("TelescopePromptPrefix", { fg = c.green, bg = c.surface }) + hi("TelescopeResultsNormal", { fg = c.fg, bg = c.surface }) + hi("TelescopeResultsBorder", { fg = c.border, bg = c.surface }) + hi("TelescopePreviewNormal", { fg = c.fg, bg = c.surface }) + hi("TelescopePreviewBorder", { fg = c.border, bg = c.surface }) + hi("TelescopeSelection", { fg = c.fg, bg = c.surface2 }) + hi("TelescopeSelectionCaret", { fg = c.green, bg = c.surface2 }) + hi("TelescopeMatching", { fg = c.yellow, bold = true }) + + -- nvim-cmp + hi("CmpDocumentation", { fg = c.fg, bg = c.surface }) + hi("CmpDocumentationBorder", { fg = c.border, bg = c.surface }) + hi("CmpItemAbbr", { fg = c.fg }) + hi("CmpItemAbbrMatch", { fg = c.green, bold = true }) + hi("CmpItemAbbrMatchFuzzy", { fg = c.green, italic = true }) + hi("CmpItemAbbrDeprecated", { fg = c.muted, strikethrough = true }) + hi("CmpItemKind", { fg = c.cyan }) + hi("CmpItemMenu", { fg = c.muted }) + + hi("CmpItemKindFunction", { fg = c.green }) + hi("CmpItemKindMethod", { fg = c.green }) + hi("CmpItemKindConstructor", { fg = c.cyan }) + hi("CmpItemKindVariable", { fg = c.fg }) + hi("CmpItemKindField", { fg = c.cyan }) + hi("CmpItemKindProperty", { fg = c.cyan }) + hi("CmpItemKindClass", { fg = c.cyan }) + hi("CmpItemKindInterface", { fg = c.blue }) + hi("CmpItemKindStruct", { fg = c.cyan }) + hi("CmpItemKindModule", { fg = c.blue }) + hi("CmpItemKindKeyword", { fg = c.purple }) + hi("CmpItemKindText", { fg = c.fg }) + hi("CmpItemKindSnippet", { fg = c.orange }) + hi("CmpItemKindFile", { fg = c.fg }) + hi("CmpItemKindFolder", { fg = c.green }) + hi("CmpItemKindEnum", { fg = c.blue }) + hi("CmpItemKindEnumMember", { fg = c.yellow }) + hi("CmpItemKindConstant", { fg = c.yellow }) + hi("CmpItemKindValue", { fg = c.yellow }) + hi("CmpItemKindUnit", { fg = c.orange }) + + -- Neo-tree / NvimTree + hi("Directory", { fg = c.green, bold = true }) + hi("NeoTreeNormal", { fg = c.fg, bg = c.bg }) + hi("NeoTreeNormalNC", { fg = c.fg, bg = c.bg }) + hi("NeoTreeDirectoryName", { fg = c.green, bold = true }) + hi("NeoTreeDirectoryIcon", { fg = c.green }) + hi("NeoTreeFileName", { fg = c.fg }) + hi("NeoTreeFileIcon", { fg = c.subtle }) + hi("NeoTreeIndentMarker", { fg = c.border }) + hi("NeoTreeRootName", { fg = c.cyan, bold = true }) + hi("NeoTreeGitAdded", { fg = c.green }) + hi("NeoTreeGitModified", { fg = c.blue }) + hi("NeoTreeGitDeleted", { fg = c.red }) + hi("NeoTreeGitConflict", { fg = c.orange, bold = true }) + hi("NeoTreeFloatBorder", { fg = c.border, bg = c.surface }) + hi("NeoTreeFloatTitle", { fg = c.green, bg = c.surface, bold = true }) + hi("NvimTreeNormal", { fg = c.fg, bg = c.bg }) + hi("NvimTreeFolderName", { fg = c.green, bold = true }) + hi("NvimTreeRootFolder", { fg = c.cyan, bold = true }) + hi("NvimTreeOpenedFolderName", { fg = c.green, bold = true }) + hi("NvimTreeIndentMarker", { fg = c.border }) + hi("NvimTreeGitDirty", { fg = c.blue }) + hi("NvimTreeGitNew", { fg = c.green }) + hi("NvimTreeGitDeleted", { fg = c.red }) + + -- which-key + hi("WhichKey", { fg = c.green, bold = true }) + hi("WhichKeyGroup", { fg = c.cyan }) + hi("WhichKeyDesc", { fg = c.fg }) + hi("WhichKeySeparator", { fg = c.border }) + hi("WhichKeyFloat", { bg = c.surface }) + hi("WhichKeyBorder", { fg = c.border, bg = c.surface }) + hi("WhichKeyValue", { fg = c.muted }) + + -- Indent guides + hi("IblIndent", { fg = c.border }) + hi("IblScope", { fg = c.blue }) + hi("IndentBlanklineChar", { fg = c.border }) + hi("IndentBlanklineContextChar", { fg = c.blue }) + + -- lazy.nvim + hi("LazyNormal", { fg = c.fg, bg = c.surface }) + hi("LazyBorder", { fg = c.border, bg = c.surface }) + hi("LazyButton", { fg = c.fg, bg = c.surface2 }) + hi("LazyButtonActive", { fg = c.bg, bg = c.green, bold = true }) + hi("LazyH1", { fg = c.bg, bg = c.green, bold = true }) + hi("LazySpecial", { fg = c.purple }) + hi("LazyReasonPlugin", { fg = c.cyan }) + hi("LazyReasonEvent", { fg = c.yellow }) + hi("LazyReasonKeys", { fg = c.green }) + hi("LazyReasonCmd", { fg = c.orange }) + hi("LazyReasonStart", { fg = c.green }) + + -- Markdown / help + hi("markdownHeadingDelimiter", { fg = c.green, bold = true }) + hi("markdownCode", { fg = c.orange }) + hi("markdownCodeBlock", { fg = c.orange }) + hi("markdownLinkText", { fg = c.cyan, underline = true }) + hi("markdownUrl", { fg = c.blue, underline = true }) + hi("helpCommand", { fg = c.green }) + hi("helpExample", { fg = c.orange }) + + -- Notifications / misc + hi("ErrorMsg", { fg = c.red, bold = true }) + hi("WarningMsg", { fg = c.orange }) + hi("MoreMsg", { fg = c.green }) + hi("ModeMsg", { fg = c.cyan, bold = true }) + hi("Question", { fg = c.green, bold = true }) +end + +return M diff --git a/.config/obs-studio/basic/profiles/Arindy/basic.ini b/.config/obs-studio/basic/profiles/Arindy/basic.ini new file mode 100644 index 0000000..d59c81f --- /dev/null +++ b/.config/obs-studio/basic/profiles/Arindy/basic.ini @@ -0,0 +1,114 @@ +[General] +Name=Arindy + +[Output] +Mode=Simple +FilenameFormatting=%CCYY-%MM-%DD %hh-%mm-%ss +DelayEnable=false +DelaySec=20 +DelayPreserve=true +Reconnect=true +RetryDelay=2 +MaxRetries=25 +BindIP=default +IPFamily=IPv4+IPv6 +NewSocketLoopEnable=false +LowLatencyEnable=false + +[Stream1] +IgnoreRecommended=false +EnableMultitrackVideo=false +MultitrackVideoMaximumAggregateBitrateAuto=true +MultitrackVideoMaximumVideoTracksAuto=true + +[SimpleOutput] +FilePath=/media/edwin/obs +RecFormat2=mp4 +VBitrate=6000 +ABitrate=160 +Preset=veryfast +NVENCPreset2=p5 +RecQuality=Stream +RecRB=false +RecRBTime=20 +RecRBSize=512 +RecRBPrefix=Replay +StreamAudioEncoder=aac +RecAudioEncoder=aac +RecTracks=1 +StreamEncoder=x264 +RecEncoder=x264 +UseAdvanced=false +FileNameWithoutSpace=true + +[AdvOut] +ApplyServiceSettings=true +UseRescale=false +TrackIndex=1 +VodTrackIndex=2 +Encoder=obs_x264 +RecType=Standard +RecFilePath=/home/arindy +RecFormat2=hybrid_mp4 +RecUseRescale=false +RecTracks=1 +RecEncoder=none +FLVTrack=1 +StreamMultiTrackAudioMixes=1 +FFOutputToFile=true +FFFilePath=/home/arindy +FFVBitrate=6000 +FFVGOPSize=250 +FFUseRescale=false +FFIgnoreCompat=false +FFABitrate=160 +FFAudioMixes=1 +Track1Bitrate=160 +Track2Bitrate=160 +Track3Bitrate=160 +Track4Bitrate=160 +Track5Bitrate=160 +Track6Bitrate=160 +RecSplitFileTime=15 +RecSplitFileSize=2048 +RecRB=false +RecRBTime=20 +RecRBSize=512 +AudioEncoder=libfdk_aac +RecAudioEncoder=libfdk_aac +RecSplitFileType=Time +FFFormat= +FFFormatMimeType= +FFVEncoderId=0 +FFVEncoder= +FFAEncoderId=0 +FFAEncoder= +FFExtension=mp4 + +[Video] +BaseCX=1920 +BaseCY=1080 +OutputCX=1920 +OutputCY=1080 +FPSType=0 +FPSCommon=60 +FPSInt=30 +FPSNum=30 +FPSDen=1 +ScaleType=bicubic +ColorFormat=NV12 +ColorSpace=709 +ColorRange=Partial +SdrWhiteLevel=300 +HdrNominalPeakLevel=1000 + +[Audio] +MonitoringDeviceId=default +MonitoringDeviceName=Default +SampleRate=48000 +ChannelSetup=Stereo +MeterDecayRate=23.53 +PeakMeterType=0 + +[Panels] +CookieId=F16A3C33A65F2D3B diff --git a/.config/obs-studio/basic/profiles/Arindy/service.json b/.config/obs-studio/basic/profiles/Arindy/service.json new file mode 100644 index 0000000..0971be6 --- /dev/null +++ b/.config/obs-studio/basic/profiles/Arindy/service.json @@ -0,0 +1 @@ +{"type":"rtmp_common","settings":{"service":"Twitch","protocol":"RTMP","server":"auto","bwtest":false,"key":"live_39165563_Y8kA9k31E50ianDYygMWdOyOv66TMT","stream_key_link":"https://dashboard.twitch.tv/settings/stream","multitrack_video_configuration_url":"https://ingest.twitch.tv/api/v3/GetClientConfiguration","multitrack_video_name":"Enhanced Broadcasting","multitrack_video_disclaimer":"Enhanced Broadcasting automatically optimises your settings to encode and send multiple video qualities to Twitch. Selecting this option will send Twitch information about your computer and software setup. Learn More"}} \ No newline at end of file diff --git a/.config/obs-studio/basic/profiles/Arindy/service.json.bak b/.config/obs-studio/basic/profiles/Arindy/service.json.bak new file mode 100644 index 0000000..8646f32 --- /dev/null +++ b/.config/obs-studio/basic/profiles/Arindy/service.json.bak @@ -0,0 +1 @@ +{"type":"rtmp_common","settings":{"service":"Twitch","server":"auto","key":"live_39165563_Y8kA9k31E50ianDYygMWdOyOv66TMT","stream_key_link":"https://dashboard.twitch.tv/settings/stream","multitrack_video_configuration_url":"https://ingest.twitch.tv/api/v3/GetClientConfiguration","multitrack_video_name":"Enhanced Broadcasting","multitrack_video_disclaimer":"Enhanced Broadcasting automatically optimises your settings to encode and send multiple video qualities to Twitch. Selecting this option will send Twitch information about your computer and software setup. Learn More","protocol":"RTMP"}} \ No newline at end of file diff --git a/.config/obs-studio/basic/scenes/Untitled.json b/.config/obs-studio/basic/scenes/Untitled.json new file mode 100644 index 0000000..7c3d885 --- /dev/null +++ b/.config/obs-studio/basic/scenes/Untitled.json @@ -0,0 +1,245 @@ +{ + "name": "Untitled", + "DesktopAudioDevice1": { + "prev_ver": 536936450, + "name": "Desktop Audio", + "uuid": "5abe3188-e870-4a3f-90a1-7b4a188e474c", + "id": "pulse_output_capture", + "versioned_id": "pulse_output_capture", + "settings": { + "device_id": "default" + }, + "mixers": 255, + "sync": 0, + "flags": 0, + "volume": 1.0, + "balance": 0.5, + "enabled": true, + "muted": false, + "push-to-mute": false, + "push-to-mute-delay": 0, + "push-to-talk": false, + "push-to-talk-delay": 0, + "hotkeys": { + "libobs.mute": [], + "libobs.unmute": [], + "libobs.push-to-mute": [], + "libobs.push-to-talk": [] + }, + "deinterlace_mode": 0, + "deinterlace_field_order": 0, + "monitoring_type": 0, + "private_settings": {} + }, + "AuxAudioDevice1": { + "prev_ver": 536936450, + "name": "Mic/Aux", + "uuid": "64f713bb-c3be-4204-a83c-367d185c207e", + "id": "pulse_input_capture", + "versioned_id": "pulse_input_capture", + "settings": { + "device_id": "default" + }, + "mixers": 255, + "sync": 0, + "flags": 0, + "volume": 1.0, + "balance": 0.5, + "enabled": true, + "muted": false, + "push-to-mute": false, + "push-to-mute-delay": 0, + "push-to-talk": false, + "push-to-talk-delay": 0, + "hotkeys": { + "libobs.mute": [], + "libobs.unmute": [], + "libobs.push-to-mute": [], + "libobs.push-to-talk": [] + }, + "deinterlace_mode": 0, + "deinterlace_field_order": 0, + "monitoring_type": 0, + "private_settings": {} + }, + "sources": [ + { + "prev_ver": 536936450, + "name": "Screen Capture (PipeWire)", + "uuid": "6d5eee3c-aa2e-47f9-b521-325fa4aae3e5", + "id": "pipewire-screen-capture-source", + "versioned_id": "pipewire-screen-capture-source", + "settings": { + "RestoreToken": "" + }, + "mixers": 0, + "sync": 0, + "flags": 0, + "volume": 1.0, + "balance": 0.5, + "enabled": true, + "muted": false, + "push-to-mute": false, + "push-to-mute-delay": 0, + "push-to-talk": false, + "push-to-talk-delay": 0, + "hotkeys": {}, + "deinterlace_mode": 0, + "deinterlace_field_order": 0, + "monitoring_type": 0, + "private_settings": {} + }, + { + "prev_ver": 536936450, + "name": "Scene", + "uuid": "2f9a2fe6-26d6-4590-818b-a22e0ed0c792", + "id": "scene", + "versioned_id": "scene", + "settings": { + "id_counter": 1, + "custom_size": false, + "items": [ + { + "name": "Screen Capture (PipeWire)", + "source_uuid": "6d5eee3c-aa2e-47f9-b521-325fa4aae3e5", + "visible": true, + "locked": false, + "rot": 0.0, + "scale_ref": { + "x": 1920.0, + "y": 1080.0 + }, + "align": 5, + "bounds_type": 0, + "bounds_align": 0, + "bounds_crop": false, + "crop_left": 0, + "crop_top": 0, + "crop_right": 0, + "crop_bottom": 0, + "id": 1, + "group_item_backup": false, + "pos": { + "x": 0.0, + "y": 0.0 + }, + "pos_rel": { + "x": -1.7777777910232544, + "y": -1.0 + }, + "scale": { + "x": 0.75, + "y": 0.75 + }, + "scale_rel": { + "x": 0.75, + "y": 0.75 + }, + "bounds": { + "x": 0.0, + "y": 0.0 + }, + "bounds_rel": { + "x": 0.0, + "y": 0.0 + }, + "scale_filter": "disable", + "blend_method": "default", + "blend_type": "normal", + "show_transition": { + "duration": 300 + }, + "hide_transition": { + "duration": 300 + }, + "private_settings": {} + } + ] + }, + "mixers": 0, + "sync": 0, + "flags": 0, + "volume": 1.0, + "balance": 0.5, + "enabled": true, + "muted": false, + "push-to-mute": false, + "push-to-mute-delay": 0, + "push-to-talk": false, + "push-to-talk-delay": 0, + "hotkeys": { + "OBSBasic.SelectScene": [], + "libobs.show_scene_item.1": [], + "libobs.hide_scene_item.1": [] + }, + "deinterlace_mode": 0, + "deinterlace_field_order": 0, + "monitoring_type": 0, + "canvas_uuid": "6c69626f-6273-4c00-9d88-c5136d61696e", + "private_settings": {} + } + ], + "groups": [], + "scene_order": [ + { + "name": "Scene" + } + ], + "current_scene": "Scene", + "current_program_scene": "Scene", + "canvases": [], + "current_transition": "Fade", + "transition_duration": 300, + "transitions": [], + "quick_transitions": [ + { + "name": "Cut", + "duration": 300, + "hotkeys": [], + "id": 1, + "fade_to_black": false + }, + { + "name": "Fade", + "duration": 300, + "hotkeys": [], + "id": 2, + "fade_to_black": false + }, + { + "name": "Fade", + "duration": 300, + "hotkeys": [], + "id": 3, + "fade_to_black": true + } + ], + "saved_projectors": [], + "preview_locked": false, + "scaling_enabled": false, + "scaling_level": -41, + "scaling_off_x": 0.0, + "scaling_off_y": 0.0, + "virtual-camera": { + "type2": 3 + }, + "modules": { + "scripts-tool": [], + "output-timer": { + "streamTimerHours": 0, + "streamTimerMinutes": 0, + "streamTimerSeconds": 30, + "recordTimerHours": 0, + "recordTimerMinutes": 0, + "recordTimerSeconds": 30, + "autoStartStreamTimer": false, + "autoStartRecordTimer": false, + "pauseRecordTimer": true + } + }, + "resolution": { + "x": 1920, + "y": 1080 + }, + "version": 2 +} \ No newline at end of file diff --git a/.config/obs-studio/basic/scenes/Untitled.json.bak b/.config/obs-studio/basic/scenes/Untitled.json.bak new file mode 100644 index 0000000..07ef354 --- /dev/null +++ b/.config/obs-studio/basic/scenes/Untitled.json.bak @@ -0,0 +1,245 @@ +{ + "name": "Untitled", + "DesktopAudioDevice1": { + "prev_ver": 536936450, + "name": "Desktop Audio", + "uuid": "5abe3188-e870-4a3f-90a1-7b4a188e474c", + "id": "pulse_output_capture", + "versioned_id": "pulse_output_capture", + "settings": { + "device_id": "default" + }, + "mixers": 255, + "sync": 0, + "flags": 0, + "volume": 1.0, + "balance": 0.5, + "enabled": true, + "muted": false, + "push-to-mute": false, + "push-to-mute-delay": 0, + "push-to-talk": false, + "push-to-talk-delay": 0, + "hotkeys": { + "libobs.mute": [], + "libobs.unmute": [], + "libobs.push-to-mute": [], + "libobs.push-to-talk": [] + }, + "deinterlace_mode": 0, + "deinterlace_field_order": 0, + "monitoring_type": 0, + "private_settings": {} + }, + "AuxAudioDevice1": { + "prev_ver": 536936450, + "name": "Mic/Aux", + "uuid": "64f713bb-c3be-4204-a83c-367d185c207e", + "id": "pulse_input_capture", + "versioned_id": "pulse_input_capture", + "settings": { + "device_id": "default" + }, + "mixers": 255, + "sync": 0, + "flags": 0, + "volume": 1.0, + "balance": 0.5, + "enabled": true, + "muted": false, + "push-to-mute": false, + "push-to-mute-delay": 0, + "push-to-talk": false, + "push-to-talk-delay": 0, + "hotkeys": { + "libobs.mute": [], + "libobs.unmute": [], + "libobs.push-to-mute": [], + "libobs.push-to-talk": [] + }, + "deinterlace_mode": 0, + "deinterlace_field_order": 0, + "monitoring_type": 0, + "private_settings": {} + }, + "sources": [ + { + "prev_ver": 536936450, + "name": "Screen Capture (PipeWire)", + "uuid": "6d5eee3c-aa2e-47f9-b521-325fa4aae3e5", + "id": "pipewire-screen-capture-source", + "versioned_id": "pipewire-screen-capture-source", + "settings": { + "RestoreToken": "" + }, + "mixers": 0, + "sync": 0, + "flags": 0, + "volume": 1.0, + "balance": 0.5, + "enabled": true, + "muted": false, + "push-to-mute": false, + "push-to-mute-delay": 0, + "push-to-talk": false, + "push-to-talk-delay": 0, + "hotkeys": {}, + "deinterlace_mode": 0, + "deinterlace_field_order": 0, + "monitoring_type": 0, + "private_settings": {} + }, + { + "prev_ver": 536936450, + "name": "Scene", + "uuid": "2f9a2fe6-26d6-4590-818b-a22e0ed0c792", + "id": "scene", + "versioned_id": "scene", + "settings": { + "id_counter": 1, + "custom_size": false, + "items": [ + { + "name": "Screen Capture (PipeWire)", + "source_uuid": "6d5eee3c-aa2e-47f9-b521-325fa4aae3e5", + "visible": true, + "locked": false, + "rot": 0.0, + "scale_ref": { + "x": 1920.0, + "y": 1080.0 + }, + "align": 5, + "bounds_type": 0, + "bounds_align": 0, + "bounds_crop": false, + "crop_left": 0, + "crop_top": 0, + "crop_right": 0, + "crop_bottom": 0, + "id": 1, + "group_item_backup": false, + "pos": { + "x": 0.0, + "y": 0.0 + }, + "pos_rel": { + "x": -1.7777777910232544, + "y": -1.0 + }, + "scale": { + "x": 0.75, + "y": 0.75 + }, + "scale_rel": { + "x": 0.75, + "y": 0.75 + }, + "bounds": { + "x": 0.0, + "y": 0.0 + }, + "bounds_rel": { + "x": 0.0, + "y": 0.0 + }, + "scale_filter": "disable", + "blend_method": "default", + "blend_type": "normal", + "show_transition": { + "duration": 300 + }, + "hide_transition": { + "duration": 300 + }, + "private_settings": {} + } + ] + }, + "mixers": 0, + "sync": 0, + "flags": 0, + "volume": 1.0, + "balance": 0.5, + "enabled": true, + "muted": false, + "push-to-mute": false, + "push-to-mute-delay": 0, + "push-to-talk": false, + "push-to-talk-delay": 0, + "hotkeys": { + "OBSBasic.SelectScene": [], + "libobs.show_scene_item.1": [], + "libobs.hide_scene_item.1": [] + }, + "deinterlace_mode": 0, + "deinterlace_field_order": 0, + "monitoring_type": 0, + "canvas_uuid": "6c69626f-6273-4c00-9d88-c5136d61696e", + "private_settings": {} + } + ], + "groups": [], + "scene_order": [ + { + "name": "Scene" + } + ], + "current_scene": "Scene", + "current_program_scene": "Scene", + "canvases": [], + "current_transition": "Fade", + "transition_duration": 300, + "transitions": [], + "quick_transitions": [ + { + "name": "Cut", + "duration": 300, + "hotkeys": [], + "id": 1, + "fade_to_black": false + }, + { + "name": "Fade", + "duration": 300, + "hotkeys": [], + "id": 2, + "fade_to_black": false + }, + { + "name": "Fade", + "duration": 300, + "hotkeys": [], + "id": 3, + "fade_to_black": true + } + ], + "saved_projectors": [], + "preview_locked": false, + "scaling_enabled": false, + "scaling_level": -17, + "scaling_off_x": 0.0, + "scaling_off_y": 0.0, + "virtual-camera": { + "type2": 3 + }, + "modules": { + "scripts-tool": [], + "output-timer": { + "streamTimerHours": 0, + "streamTimerMinutes": 0, + "streamTimerSeconds": 30, + "recordTimerHours": 0, + "recordTimerMinutes": 0, + "recordTimerSeconds": 30, + "autoStartStreamTimer": false, + "autoStartRecordTimer": false, + "pauseRecordTimer": true + } + }, + "resolution": { + "x": 1920, + "y": 1080 + }, + "version": 2 +} \ No newline at end of file diff --git a/.config/obs-studio/global.ini b/.config/obs-studio/global.ini new file mode 100644 index 0000000..6f9f7d4 --- /dev/null +++ b/.config/obs-studio/global.ini @@ -0,0 +1,20 @@ +[General] +MaxLogs=10 +InfoIncrement=-1 +ProcessPriority=Normal +EnableAutoUpdates=true +BrowserHWAccel=true +LastVersion=536936450 + +[Video] +Renderer=OpenGL + +[Locations] +Configuration=/home/arindy/.config +SceneCollections=/home/arindy/.config +Profiles=/home/arindy/.config +PluginManagerSettings=/home/arindy/.config + +[PropertiesWindow] +cx=720 +cy=580 diff --git a/.config/obs-studio/plugin_config/obs-websocket/config.json b/.config/obs-studio/plugin_config/obs-websocket/config.json new file mode 100644 index 0000000..63609b8 --- /dev/null +++ b/.config/obs-studio/plugin_config/obs-websocket/config.json @@ -0,0 +1,8 @@ +{ + "alerts_enabled": false, + "auth_required": true, + "first_load": false, + "server_enabled": false, + "server_password": "***", + "server_port": 4455 +} diff --git a/.config/obs-studio/plugin_config/rtmp-services/amazon_ivs_ingests.json b/.config/obs-studio/plugin_config/rtmp-services/amazon_ivs_ingests.json new file mode 100644 index 0000000..7e8e04b --- /dev/null +++ b/.config/obs-studio/plugin_config/rtmp-services/amazon_ivs_ingests.json @@ -0,0 +1,130 @@ +{ + "ingests": [ + { + "_id": 0, + "availability": 1.0, + "default": false, + "name": "Default", + "url_template": "rtmp://ingest.global-contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://ingest.global-contribute.live-video.net/app/{stream_key}", + "priority": 0 + }, + { + "_id": 1, + "availability": 1.0, + "default": false, + "name": "Europe (Frankfurt)", + "url_template": "rtmp://euc10.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://euc10.contribute.live-video.net/app/{stream_key}", + "priority": 1 + }, + { + "_id": 2, + "availability": 1.0, + "default": false, + "name": "Europe (Paris)", + "url_template": "rtmp://euw30.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://euw30.contribute.live-video.net/app/{stream_key}", + "priority": 2 + }, + { + "_id": 3, + "availability": 1.0, + "default": false, + "name": "Europe (Stockholm)", + "url_template": "rtmp://eun10.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://eun10.contribute.live-video.net/app/{stream_key}", + "priority": 3 + }, + { + "_id": 4, + "availability": 1.0, + "default": false, + "name": "Europe (Ireland)", + "url_template": "rtmp://euw10.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://euw10.contribute.live-video.net/app/{stream_key}", + "priority": 4 + }, + { + "_id": 5, + "availability": 1.0, + "default": false, + "name": "Asia Pacific (Mumbai)", + "url_template": "rtmp://aps30.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://aps30.contribute.live-video.net/app/{stream_key}", + "priority": 5 + }, + { + "_id": 6, + "availability": 1.0, + "default": false, + "name": "US East (N. Virginia)", + "url_template": "rtmp://use10.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://use10.contribute.live-video.net/app/{stream_key}", + "priority": 6 + }, + { + "_id": 7, + "availability": 1.0, + "default": false, + "name": "US East (Ohio)", + "url_template": "rtmp://use20.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://use20.contribute.live-video.net/app/{stream_key}", + "priority": 7 + }, + { + "_id": 8, + "availability": 1.0, + "default": false, + "name": "Asia Pacific (Seoul)", + "url_template": "rtmp://apn20.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://apn20.contribute.live-video.net/app/{stream_key}", + "priority": 8 + }, + { + "_id": 9, + "availability": 1.0, + "default": false, + "name": "US West (Oregon)", + "url_template": "rtmp://usw20.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://usw20.contribute.live-video.net/app/{stream_key}", + "priority": 9 + }, + { + "_id": 10, + "availability": 1.0, + "default": false, + "name": "Asia Pacific (Tokyo)", + "url_template": "rtmp://apn10.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://apn10.contribute.live-video.net/app/{stream_key}", + "priority": 10 + }, + { + "_id": 11, + "availability": 1.0, + "default": false, + "name": "South America (São Paulo)", + "url_template": "rtmp://sae10.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://sae10.contribute.live-video.net/app/{stream_key}", + "priority": 11 + }, + { + "_id": 12, + "availability": 1.0, + "default": false, + "name": "Asia Pacific (Singapore)", + "url_template": "rtmp://aps10.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://aps10.contribute.live-video.net/app/{stream_key}", + "priority": 12 + }, + { + "_id": 13, + "availability": 1.0, + "default": false, + "name": "Asia Pacific (Sydney)", + "url_template": "rtmp://aps20.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://aps20.contribute.live-video.net/app/{stream_key}", + "priority": 13 + } + ] +} diff --git a/.config/obs-studio/plugin_config/rtmp-services/package.json b/.config/obs-studio/plugin_config/rtmp-services/package.json new file mode 100644 index 0000000..d0d6def --- /dev/null +++ b/.config/obs-studio/plugin_config/rtmp-services/package.json @@ -0,0 +1 @@ +{"$schema":"schema/package-schema.json","url":"https://obsproject.com/obs2_update/rtmp-services/v5","version":286,"files":[{"name":"services.json","version":286}]} diff --git a/.config/obs-studio/plugin_config/rtmp-services/services.json b/.config/obs-studio/plugin_config/rtmp-services/services.json new file mode 100644 index 0000000..ffa9400 --- /dev/null +++ b/.config/obs-studio/plugin_config/rtmp-services/services.json @@ -0,0 +1 @@ +{"$schema":"schema/service-schema-v5.json","format_version":5,"services":[{"name":"Twitch","common":true,"stream_key_link":"https://dashboard.twitch.tv/settings/stream","multitrack_video_configuration_url":"https://ingest.twitch.tv/api/v3/GetClientConfiguration","multitrack_video_name":"Enhanced Broadcasting","multitrack_video_learn_more_link":"https://help.twitch.tv/s/article/multiple-encodes","servers":[{"name":"Asia: Hong Kong","url":"rtmp://live-hkg.twitch.tv/app"},{"name":"Asia: Seoul, South Korea","url":"rtmp://live-sel.twitch.tv/app"},{"name":"Asia: Singapore","url":"rtmp://live-sin.twitch.tv/app"},{"name":"Asia: Taipei, Taiwan","url":"rtmp://live-tpe.twitch.tv/app"},{"name":"Asia: Tokyo, Japan","url":"rtmp://live-tyo.twitch.tv/app"},{"name":"Australia: Sydney","url":"rtmp://live-syd.twitch.tv/app"},{"name":"EU: Amsterdam, NL","url":"rtmp://live-ams.twitch.tv/app"},{"name":"EU: Berlin, DE","url":"rtmp://live-ber.twitch.tv/app"},{"name":"Europe: Copenhagen, DK","url":"rtmp://live-cph.twitch.tv/app"},{"name":"EU: Frankfurt, DE","url":"rtmp://live-fra.twitch.tv/app"},{"name":"EU: Helsinki, FI","url":"rtmp://live-hel.twitch.tv/app"},{"name":"EU: Lisbon, Portugal","url":"rtmp://live-lis.twitch.tv/app"},{"name":"EU: London, UK","url":"rtmp://live-lhr.twitch.tv/app"},{"name":"EU: Madrid, Spain","url":"rtmp://live-mad.twitch.tv/app"},{"name":"EU: Marseille, FR","url":"rtmp://live-mrs.twitch.tv/app"},{"name":"EU: Milan, Italy","url":"rtmp://live-mil.twitch.tv/app"},{"name":"EU: Norway, Oslo","url":"rtmp://live-osl.twitch.tv/app"},{"name":"EU: Paris, FR","url":"rtmp://live-cdg.twitch.tv/app"},{"name":"EU: Prague, CZ","url":"rtmp://live-prg.twitch.tv/app"},{"name":"EU: Stockholm, SE","url":"rtmp://live-arn.twitch.tv/app"},{"name":"EU: Vienna, Austria","url":"rtmp://live-vie.twitch.tv/app"},{"name":"EU: Warsaw, Poland","url":"rtmp://live-waw.twitch.tv/app"},{"name":"NA: Mexico City","url":"rtmp://live-qro.twitch.tv/app"},{"name":"NA: Quebec, Canada","url":"rtmp://live-ymq.twitch.tv/app"},{"name":"NA: Toronto, Canada","url":"rtmp://live-yto.twitch.tv/app"},{"name":"South America: Argentina","url":"rtmp://live-eze.twitch.tv/app"},{"name":"South America: Chile","url":"rtmp://live-scl.twitch.tv/app"},{"name":"South America: Lima, Peru","url":"rtmp://live-lim.twitch.tv/app"},{"name":"South America: Medellin, Colombia","url":"rtmp://live-mde.twitch.tv/app"},{"name":"South America: Rio de Janeiro, Brazil","url":"rtmp://live-rio.twitch.tv/app"},{"name":"South America: Sao Paulo, Brazil","url":"rtmp://live-sao.twitch.tv/app"},{"name":"US Central: Dallas, TX","url":"rtmp://live-dfw.twitch.tv/app"},{"name":"US Central: Denver, CO","url":"rtmp://live-den.twitch.tv/app"},{"name":"US Central: Houston, TX","url":"rtmp://live-hou.twitch.tv/app"},{"name":"US Central: Salt Lake City, UT","url":"rtmp://live-slc.twitch.tv/app"},{"name":"US East: Ashburn, VA","url":"rtmp://live-iad.twitch.tv/app"},{"name":"US East: Atlanta, GA","url":"rtmp://live-atl.twitch.tv/app"},{"name":"US East: Chicago","url":"rtmp://live-ord.twitch.tv/app"},{"name":"US East: Miami, FL","url":"rtmp://live-mia.twitch.tv/app"},{"name":"US East: New York, NY","url":"rtmp://live-jfk.twitch.tv/app"},{"name":"US West: Los Angeles, CA","url":"rtmp://live-lax.twitch.tv/app"},{"name":"US West: Phoenix, AZ","url":"rtmp://live-phx.twitch.tv/app"},{"name":"US West: Portland, Oregon","url":"rtmp://live-pdx.twitch.tv/app"},{"name":"US West: San Francisco, CA","url":"rtmp://live-sfo.twitch.tv/app"},{"name":"US West: San Jose, CA","url":"rtmp://live-sjc.twitch.tv/app"},{"name":"US West: Seattle, WA","url":"rtmp://live-sea.twitch.tv/app"}],"recommended":{"keyint":2,"max video bitrate":6000,"max audio bitrate":320,"x264opts":"scenecut=0"},"supported video codecs":["h264"]},{"name":"YouTube - HLS","common":false,"more_info_link":"https://developers.google.com/youtube/v3/live/guides/ingestion-protocol-comparison","stream_key_link":"https://www.youtube.com/live_dashboard","protocol":"HLS","supported video codecs":["h264","hevc"],"servers":[{"name":"Primary YouTube ingest server","url":"https://a.upload.youtube.com/http_upload_hls?cid={stream_key}©=0&file=out.m3u8"},{"name":"Backup YouTube ingest server","url":"https://b.upload.youtube.com/http_upload_hls?cid={stream_key}©=1&file=out.m3u8"}],"recommended":{"keyint":2,"output":"ffmpeg_hls_muxer","max video bitrate":51000,"max audio bitrate":160}},{"name":"YouTube - RTMPS","common":true,"stream_key_link":"https://www.youtube.com/live_dashboard","alt_names":["YouTube / YouTube Gaming","YouTube - RTMP","YouTube - RTMPS (Beta)"],"supported video codecs":["h264","hevc","av1"],"servers":[{"name":"Primary YouTube ingest server","url":"rtmps://a.rtmps.youtube.com:443/live2"},{"name":"Backup YouTube ingest server","url":"rtmps://b.rtmps.youtube.com:443/live2?backup=1"},{"name":"Primary YouTube ingest server (legacy RTMP)","url":"rtmp://a.rtmp.youtube.com/live2"},{"name":"Backup YouTube ingest server (legacy RTMP)","url":"rtmp://b.rtmp.youtube.com/live2?backup=1"}],"recommended":{"keyint":2,"max video bitrate":51000,"max audio bitrate":160}},{"name":"Loola.tv","common":false,"servers":[{"name":"US East: Virginia","url":"rtmp://rtmp.loola.tv/push"},{"name":"EU Central: Germany","url":"rtmp://rtmp-eu.loola.tv/push"},{"name":"South America: Brazil","url":"rtmp://rtmp-sa.loola.tv/push"},{"name":"Asia/Pacific: Singapore","url":"rtmp://rtmp-sg.loola.tv/push"},{"name":"Middle East: Bahrain","url":"rtmp://rtmp-me.loola.tv/push"}],"recommended":{"keyint":2,"profile":"high","max video bitrate":2500,"max audio bitrate":160,"bframes":2,"x264opts":"scenecut=0"},"supported video codecs":["h264"]},{"name":"Lovecast","servers":[{"name":"Default","url":"rtmp://live-a.lovecastapp.com:5222/app"}],"recommended":{"keyint":2,"profile":"main","max video bitrate":8000,"max audio bitrate":192,"supported resolutions":["1920x1080","1280x720"],"max fps":30},"supported video codecs":["h264"]},{"name":"Luzento.com - RTMP","stream_key_link":"https://cms.luzento.com/dashboard/stream-key?from=OBS","servers":[{"name":"Primary","url":"rtmp://ingest.luzento.com/live"},{"name":"Primary (Test)","url":"rtmp://ingest.luzento.com/test"}],"recommended":{"keyint":2,"max video bitrate":6000,"max audio bitrate":256,"bframes":2,"x264opts":"scenecut=0"},"supported video codecs":["h264"]},{"name":"Web.TV","servers":[{"name":"Primary","url":"rtmp://live3.origins.web.tv/liveext"}],"recommended":{"keyint":2,"profile":"main","max video bitrate":3500,"max audio bitrate":160},"supported video codecs":["h264"]},{"name":"GoodGame.ru","servers":[{"name":"Моscow","url":"rtmp://msk.goodgame.ru:1940/live"}],"supported video codecs":["h264"]},{"name":"Vaughn Live / iNSTAGIB","servers":[{"name":"US: Vint Hill, VA","url":"rtmp://live-iad.vaughnsoft.net/live"},{"name":"US: Vint Hill, VA #2","url":"rtmp://live-iad2.vaughnsoft.net/live"},{"name":"US: Dallas, TX","url":"rtmp://live-dfw.vaughnsoft.net/live"},{"name":"US: Denver, CO","url":"rtmp://live-den.vaughnsoft.net/live"},{"name":"US: New York, NY","url":"rtmp://live-nyc.vaughnsoft.net/live"},{"name":"US: Miami, FL","url":"rtmp://live-mia.vaughnsoft.net/live"},{"name":"US: Seattle, WA","url":"rtmp://live-sea.vaughnsoft.net/live"},{"name":"CA: Toronto","url":"rtmp://live-tor.vaughnsoft.net/live"},{"name":"EU: Amsterdam, NL","url":"rtmp://live-ams.vaughnsoft.net/live"},{"name":"EU: London, UK","url":"rtmp://live-lhr.vaughnsoft.net/live"},{"name":"EU: Paris, FR","url":"rtmp://live-lhr.vaughnsoft.net/live"},{"name":"Tokyo, JP","url":"rtmp://live-lhr.vaughnsoft.net/live"}],"recommended":{"keyint":2,"max video bitrate":15000,"max audio bitrate":320},"supported video codecs":["h264"]},{"name":"Breakers.TV","servers":[{"name":"US: Vint Hill, VA","url":"rtmp://live-iad.vaughnsoft.net/live"},{"name":"US: Vint Hill, VA #2","url":"rtmp://live-iad2.vaughnsoft.net/live"},{"name":"US: Dallas, TX","url":"rtmp://live-dfw.vaughnsoft.net/live"},{"name":"US: Denver, CO","url":"rtmp://live-den.vaughnsoft.net/live"},{"name":"US: New York, NY","url":"rtmp://live-nyc.vaughnsoft.net/live"},{"name":"US: Miami, FL","url":"rtmp://live-mia.vaughnsoft.net/live"},{"name":"US: Seattle, WA","url":"rtmp://live-sea.vaughnsoft.net/live"},{"name":"CA: Toronto","url":"rtmp://live-tor.vaughnsoft.net/live"},{"name":"EU: Amsterdam, NL","url":"rtmp://live-ams.vaughnsoft.net/live"},{"name":"EU: London, UK","url":"rtmp://live-lhr.vaughnsoft.net/live"},{"name":"EU: Paris, FR","url":"rtmp://live-lhr.vaughnsoft.net/live"},{"name":"Tokyo, JP","url":"rtmp://live-lhr.vaughnsoft.net/live"}],"recommended":{"keyint":2,"max video bitrate":15000,"max audio bitrate":320},"supported video codecs":["h264"]},{"name":"Facebook Live","common":true,"stream_key_link":"https://www.facebook.com/live/producer?ref=OBS","servers":[{"name":"Default","url":"rtmps://rtmp-api.facebook.com:443/rtmp/"}],"recommended":{"keyint":2,"profile":"main","supported resolutions":["1920x1080","1280x720","852x480","640x360"],"bitrate matrix":[{"res":"640x360","fps":30,"max bitrate":1000},{"res":"640x360","fps":60,"max bitrate":1500},{"res":"852x480","fps":30,"max bitrate":2000},{"res":"852x480","fps":60,"max bitrate":3000},{"res":"1280x720","fps":30,"max bitrate":4000},{"res":"1280x720","fps":60,"max bitrate":6000},{"res":"1920x1080","fps":30,"max bitrate":6000},{"res":"1920x1080","fps":60,"max bitrate":9000}],"max fps":60,"max video bitrate":9000,"max audio bitrate":128},"supported video codecs":["h264"]},{"name":"Restream.io","alt_names":["Restream.io - RTMP","Restream.io - FTL"],"common":true,"stream_key_link":"https://restream.io/settings/streaming-setup?from=OBS","servers":[{"name":"Autodetect","url":"rtmp://live.restream.io/live"},{"name":"EU-West (London, GB)","url":"rtmp://london.restream.io/live"},{"name":"EU-West (Amsterdam, NL)","url":"rtmp://amsterdam.restream.io/live"},{"name":"EU-West (Paris, FR)","url":"rtmp://paris.restream.io/live"},{"name":"EU-Central (Frankfurt, DE)","url":"rtmp://frankfurt.restream.io/live"},{"name":"EU-South (Madrid, Spain)","url":"rtmp://madrid.restream.io/live"},{"name":"Turkey (Istanbul)","url":"rtmp://istanbul.restream.io/live"},{"name":"US-West (Seattle, WA)","url":"rtmp://seattle.restream.io/live"},{"name":"US-West (San Jose, CA)","url":"rtmp://sanjose.restream.io/live"},{"name":"US-Central (Dallas, TX)","url":"rtmp://dallas.restream.io/live"},{"name":"US-East (Chicago, IL)","url":"rtmp://chicago.restream.io/live"},{"name":"US-East (New York, NY)","url":"rtmp://newyork.restream.io/live"},{"name":"US-East (Washington, DC)","url":"rtmp://washington.restream.io/live"},{"name":"NA-East (Toronto, Canada)","url":"rtmp://toronto.restream.io/live"},{"name":"SA (Saint Paul, Brazil)","url":"rtmp://saopaulo.restream.io/live"},{"name":"India (Bangalore)","url":"rtmp://bangalore.restream.io/live"},{"name":"Asia (Hong Kong)","url":"rtmp://hongkong.restream.io/live"},{"name":"Asia (Singapore)","url":"rtmp://singapore.restream.io/live"},{"name":"Asia (Seoul, South Korea)","url":"rtmp://seoul.restream.io/live"},{"name":"Asia (Tokyo, Japan)","url":"rtmp://tokyo.restream.io/live"},{"name":"Australia (Sydney)","url":"rtmp://sydney.restream.io/live"}],"recommended":{"keyint":2},"supported video codecs":["h264"]},{"name":"Castr.io","servers":[{"name":"US-East (Chicago, IL)","url":"rtmp://cg.castr.io/static"},{"name":"US-East (New York, NY)","url":"rtmp://ny.castr.io/static"},{"name":"US-East (Miami, FL)","url":"rtmp://mi.castr.io/static"},{"name":"US-West (Seattle, WA)","url":"rtmp://se.castr.io/static"},{"name":"US-West (Los Angeles, CA)","url":"rtmp://la.castr.io/static"},{"name":"US-Central (Dallas, TX)","url":"rtmp://da.castr.io/static"},{"name":"NA-East (Toronto, CA)","url":"rtmp://qc.castr.io/static"},{"name":"Mexico","url":"rtmp://mexico.castr.io/static"},{"name":"Sao Paulo, BR","url":"rtmp://br.castr.io/static"},{"name":"Colombia","url":"rtmp://bogota.castr.io/static"},{"name":"Santiago, Chile","url":"rtmp://santiago.castr.io/static"},{"name":"Istanbul, TR","url":"rtmp://istanbul.castr.io/static"},{"name":"Tel Aviv, IL","url":"rtmp://telaviv.castr.io/static"},{"name":"EU-West (London, UK)","url":"rtmp://uk.castr.io/static"},{"name":"EU-West (Paris, FR)","url":"rtmp://paris.castr.io/static"},{"name":"EU-West (Madrid, ES)","url":"rtmp://madrid.castr.io/static"},{"name":"EU-Central (Frankfurt, DE)","url":"rtmp://fr.castr.io/static"},{"name":"EU-Central (Milan, IT)","url":"rtmp://milan.castr.io/static"},{"name":"EU-North (Stockholm, SE)","url":"rtmp://stockholm.castr.io/static"},{"name":"EU-North (Copenhagen, DK)","url":"rtmp://copenhagen.castr.io/static"},{"name":"Russia (Moscow)","url":"rtmp://ru.castr.io/static"},{"name":"Asia (Singapore)","url":"rtmp://sg.castr.io/static"},{"name":"Asia (Hong Kong, HK)","url":"rtmp://hongkong.castr.io/static"},{"name":"Asia (India)","url":"rtmp://in.castr.io/static"},{"name":"Australia (Sydney)","url":"rtmp://au.castr.io/static"},{"name":"UAE (Dubai)","url":"rtmp://dubai.castr.io/static"},{"name":"Africa (Johannesburg, ZA)","url":"rtmp://southafrica.castr.io/static"},{"name":"Africa (Lagos, NG)","url":"rtmp://lagos.castr.io/static"},{"name":"US Central","url":"rtmp://us-central.castr.io/static"},{"name":"US West","url":"rtmp://us-west.castr.io/static"},{"name":"US East","url":"rtmp://us-east.castr.io/static"},{"name":"US South","url":"rtmp://us-south.castr.io/static"},{"name":"South America","url":"rtmp://south-am.castr.io/static"},{"name":"EU Central","url":"rtmp://eu-central.castr.io/static"},{"name":"Singapore","url":"rtmp://sg-central.castr.io/static"}],"recommended":{"keyint":2},"supported video codecs":["h264"]},{"name":"Boomstream","servers":[{"name":"Default","url":"rtmp://live.boomstream.com/live"}],"supported video codecs":["h264"]},{"name":"Meridix Live Sports Platform","servers":[{"name":"Primary","url":"rtmp://publish.meridix.com/live"}],"recommended":{"max video bitrate":3500},"supported video codecs":["h264"]},{"name":"SOOP Korea","alt_names":["AfreecaTV","아프리카TV","Afreeca.TV"],"servers":[{"name":"Asia : Korea","url":"rtmp://stream.sooplive.co.kr/app/"},{"name":"North America : US East","url":"rtmp://rtmp-esu.sooplive.co.kr/app/"},{"name":"North America : US West","url":"rtmp://rtmp-wsu.sooplive.co.kr/app/"},{"name":"South America : Brazil","url":"rtmp://rtmp-brz.sooplive.co.kr/app/"},{"name":"Europe : UK","url":"rtmp://rtmp-uk.sooplive.co.kr/app/"},{"name":"Asia : Singapore","url":"rtmp://rtmp-sgp.sooplive.co.kr/app/"}],"recommended":{"keyint":2,"profile":"main","max video bitrate":8000,"max audio bitrate":192},"supported video codecs":["h264"]},{"name":"CAM4","servers":[{"name":"CAM4","url":"rtmp://origin.cam4.com/cam4-origin-live"}],"recommended":{"keyint":1,"profile":"baseline","max video bitrate":3000,"max audio bitrate":128},"supported video codecs":["h264"]},{"name":"ePlay","servers":[{"name":"ePlay Primary","url":"rtmp://live.eplay.link/origin"}],"recommended":{"keyint":2,"profile":"main","max video bitrate":7500,"max audio bitrate":192},"supported video codecs":["h264"]},{"name":"Picarto","servers":[{"name":"Autoselect closest server","url":"rtmp://live.us.picarto.tv/golive"},{"name":"Los Angeles, USA","url":"rtmp://live.us-losangeles.picarto.tv/golive"},{"name":"Dallas, USA","url":"rtmp://live.us-dallas.picarto.tv/golive"},{"name":"Miami, USA","url":"rtmp://live.us-miami.picarto.tv/golive"},{"name":"New York, USA","url":"rtmp://live.us-newyork.picarto.tv/golive"},{"name":"Europe","url":"rtmp://live.eu-west1.picarto.tv/golive"}],"recommended":{"keyint":2,"profile":"main","max video bitrate":3500},"supported video codecs":["h264"]},{"name":"Uscreen","servers":[{"name":"Default","url":"rtmp://global-live.uscreen.app:5222/app"}],"recommended":{"keyint":2,"max video bitrate":8000,"max audio bitrate":192},"supported video codecs":["h264"]},{"name":"Stripchat","servers":[{"name":"Auto","url":"rtmp://live.doppiocdn.com/ext"}],"recommended":{"keyint":2,"profile":"main","bframes":0,"max video bitrate":6000,"max audio bitrate":128,"x264opts":"tune=zerolatency"},"supported video codecs":["h264"]},{"name":"CamSoda","servers":[{"name":"North America","url":"rtmp://obs-ingest-na.livemediahost.com/cam_obs"},{"name":"South America","url":"rtmp://obs-ingest-sa.livemediahost.com/cam_obs"},{"name":"Asia","url":"rtmp://obs-ingest-as.livemediahost.com/cam_obs"},{"name":"Europe","url":"rtmp://obs-ingest-eu.livemediahost.com/cam_obs"},{"name":"Oceania","url":"rtmp://obs-ingest-oc.livemediahost.com/cam_obs"}],"recommended":{"supported resolutions":["1920x1080","1280x720","852x480","480x360"],"max fps":30,"max video bitrate":6000,"max audio bitrate":160,"x264opts":"tune=zerolatency"},"supported video codecs":["h264"]},{"name":"Chaturbate","stream_key_link":"https://chaturbate.com/b/?useExternalSoftware=true","more_info_link":"https://support.chaturbate.com/hc/en-us/articles/360037971952-How-do-I-set-up-OBS","servers":[{"name":"Global Main Fastest - Recommended","url":"rtmp://global.live.mmcdn.com/live-origin"},{"name":"Global Backup","url":"rtmp://global-backup.live.mmcdn.com/live-origin"},{"name":"Asia: Mumbai, India","url":"rtmp://bom.live.mmcdn.com/live-origin"},{"name":"Asia: Singapore","url":"rtmp://sin.live.mmcdn.com/live-origin"},{"name":"Asia: Taiwan","url":"rtmp://tsa.live.mmcdn.com/live-origin"},{"name":"Asia: Tokyo, Japan","url":"rtmp://nrt.live.mmcdn.com/live-origin"},{"name":"Australasia: Sydney, Australia","url":"rtmp://syd.live.mmcdn.com/live-origin"},{"name":"EU East: Sofia, Bulgaria","url":"rtmp://sof.live.mmcdn.com/live-origin"},{"name":"EU East: Warsaw, Poland","url":"rtmp://waw.live.mmcdn.com/live-origin"},{"name":"EU North: Helsinki, Finland","url":"rtmp://hel.live.mmcdn.com/live-origin"},{"name":"EU West: Amsterdam, Netherlands","url":"rtmp://ams.live.mmcdn.com/live-origin"},{"name":"EU West: Frankfurt, Germany","url":"rtmp://fra.live.mmcdn.com/live-origin"},{"name":"EU West: Madrid, Spain","url":"rtmp://mad.live.mmcdn.com/live-origin"},{"name":"EU West: Milan, Italy","url":"rtmp://mxp.live.mmcdn.com/live-origin"},{"name":"EU West: Rotterdam, Netherlands","url":"rtmp://rtm.live.mmcdn.com/live-origin"},{"name":"South America: Bogota, Colombia","url":"rtmp://bog.live.mmcdn.com/live-origin"},{"name":"South America: Sao Paulo, Brazil","url":"rtmp://gru.live.mmcdn.com/live-origin"},{"name":"US Central: Austin, TX","url":"rtmp://aus.live.mmcdn.com/live-origin"},{"name":"US Central: Chicago, IL","url":"rtmp://chi.live.mmcdn.com/live-origin"},{"name":"US East: Ashburn, VA","url":"rtmp://ash.live.mmcdn.com/live-origin"},{"name":"US East: Atlanta, GA","url":"rtmp://atl.live.mmcdn.com/live-origin"},{"name":"US East: Miami, FL","url":"rtmp://mia.live.mmcdn.com/live-origin"},{"name":"US West: Los Angeles, CA","url":"rtmp://lax.live.mmcdn.com/live-origin"},{"name":"US West: Phoenix, AZ","url":"rtmp://phx.live.mmcdn.com/live-origin"},{"name":"US West: Salt Lake City, UT","url":"rtmp://slc.live.mmcdn.com/live-origin"},{"name":"US West: Seattle, WA","url":"rtmp://sea.live.mmcdn.com/live-origin"}],"recommended":{"keyint":2,"max video bitrate":50000,"max audio bitrate":192,"supported resolutions":["3840x2160","2560x1440","1920x1080","1280x720","960x540","852x480","640x360"],"max fps":60},"supported video codecs":["h264"]},{"name":"WpStream","more_info_link":"https://wpstream.net/obs-more-info","stream_key_link":"https://wpstream.net/obs-get-stream-key","servers":[{"name":"Closest server - Automatic","url":"rtmp://ingest.wpstream.net/golive"},{"name":"North America","url":"rtmp://ingest-na.wpstream.net/golive"},{"name":"Europe","url":"rtmp://ingest-eu.wpstream.net/golive"},{"name":"Asia","url":"rtmp://ingest-as.wpstream.net/golive"},{"name":"South America","url":"rtmp://ingest-sa.wpstream.net/golive"},{"name":"Australia & Oceania","url":"rtmp://ingest-au.wpstream.net/golive"}],"recommended":{"keyint":2,"max audio bitrate":160},"supported video codecs":["h264"]},{"name":"Twitter","common":true,"stream_key_link":"https://studio.twitter.com/producer/sources","alt_names":["Twitter / Periscope"],"servers":[{"name":"US West: California","url":"rtmp://ca.pscp.tv:80/x"},{"name":"US West: Oregon","url":"rtmp://or.pscp.tv:80/x"},{"name":"US East: Virginia","url":"rtmp://va.pscp.tv:80/x"},{"name":"South America: Brazil","url":"rtmp://br.pscp.tv:80/x"},{"name":"EU West: France","url":"rtmp://fr.pscp.tv:80/x"},{"name":"EU West: Ireland","url":"rtmp://ie.pscp.tv:80/x"},{"name":"EU Central: Germany","url":"rtmp://de.pscp.tv:80/x"},{"name":"Asia/Pacific: Australia","url":"rtmp://au.pscp.tv:80/x"},{"name":"Asia/Pacific: India","url":"rtmp://in.pscp.tv:80/x"},{"name":"Asia/Pacific: Japan","url":"rtmp://jp.pscp.tv:80/x"},{"name":"Asia/Pacific: Korea","url":"rtmp://kr.pscp.tv:80/x"},{"name":"Asia/Pacific: Singapore","url":"rtmp://sg.pscp.tv:80/x"}],"recommended":{"keyint":3,"max video bitrate":12000,"max audio bitrate":128,"max fps":60},"supported video codecs":["h264"]},{"name":"Switchboard Live","alt_names":["Switchboard Live (Joicaster)"],"servers":[{"name":"Default","url":"rtmps://live.sb.zone:443/live"}],"recommended":{"keyint":2,"profile":"high"},"supported video codecs":["h264"]},{"name":"Eventials","servers":[{"name":"Default","url":"rtmp://transmission.eventials.com/eventialsLiveOrigin"}],"recommended":{"keyint":1,"profile":"baseline","max video bitrate":900,"max audio bitrate":96},"supported video codecs":["h264"]},{"name":"EventLive.pro","servers":[{"name":"Default","url":"rtmp://go.eventlive.pro/live"}],"recommended":{"keyint":2,"max video bitrate":3000,"max audio bitrate":192,"supported resolutions":["1920x1080","1280x720"],"max fps":30},"supported video codecs":["h264"]},{"name":"Lahzenegar - StreamG | لحظه‌نگار - استریمجی","servers":[{"name":"Primary","url":"rtmp://rtmp.lahzecdn.com/pro"},{"name":"Iran","url":"rtmp://rtmp-iran.lahzecdn.com/pro"}],"recommended":{"keyint":2,"profile":"main","max video bitrate":4000,"max audio bitrate":192},"supported video codecs":["h264"]},{"name":"MyLive","servers":[{"name":"Default","url":"rtmp://stream.mylive.in.th/live"}],"recommended":{"keyint":2,"profile":"main","max video bitrate":7000,"max audio bitrate":192},"supported video codecs":["h264"]},{"name":"Trovo","alt_names":["Madcat"],"stream_key_link":"https://studio.trovo.live/mychannel/stream","servers":[{"name":"Default","url":"rtmp://livepush.trovo.live/live/"}],"recommended":{"keyint":2,"max video bitrate":9000,"max audio bitrate":160,"x264opts":"scenecut=0"},"supported video codecs":["h264"]},{"name":"Mixcloud","servers":[{"name":"Default","url":"rtmp://rtmp.mixcloud.com/broadcast"}],"recommended":{"keyint":2,"max video bitrate":6000,"max audio bitrate":320,"supported resolutions":["1280x720","852x480","480x360"],"max fps":30,"x264opts":"scenecut=0"},"supported video codecs":["h264"]},{"name":"SermonAudio Cloud","alt_names":["SermonAudio.com"],"servers":[{"name":"Primary","url":"rtmp://webcast.sermonaudio.com/sa"}],"recommended":{"max video bitrate":2000,"max audio bitrate":128},"supported video codecs":["h264"]},{"name":"Vimeo","servers":[{"name":"Default","url":"rtmp://rtmp.cloud.vimeo.com/live"}],"supported video codecs":["h264"]},{"name":"Aparat","servers":[{"name":"Default","url":"rtmp://rtmp.cdn.asset.aparat.com:443/event"}],"recommended":{"keyint":2,"max video bitrate":6000,"max audio bitrate":320,"x264opts":"scenecut=0"},"supported video codecs":["h264"]},{"name":"KakaoTV","servers":[{"name":"Default","url":"rtmp://rtmp.play.kakao.com/kakaotv"}],"recommended":{"max video bitrate":8000,"max audio bitrate":192},"supported video codecs":["h264"]},{"name":"Piczel.tv","servers":[{"name":"US East: 1","url":"rtmp://boston.piczel.tv/live"},{"name":"US East: 2","url":"rtmp://boston-2.piczel.tv/live"},{"name":"France","url":"rtmp://france.piczel.tv/live"},{"name":"Brazil","url":"rtmp://brazil.piczel.tv/live"}],"recommended":{"keyint":4,"max video bitrate":2500,"max audio bitrate":256,"x264opts":"tune=zerolatency"},"supported video codecs":["h264"]},{"name":"DLive","servers":[{"name":"Default","url":"rtmp://stream.dlive.tv/live"}],"recommended":{"keyint":2,"max video bitrate":6000,"max audio bitrate":160},"supported video codecs":["h264"]},{"name":"Lightcast.com","servers":[{"name":"North America 1","url":"rtmp://ingest-na1.live.lightcast.com/in"},{"name":"North America 2","url":"rtmp://ingest-na2.live.lightcast.com/in"},{"name":"Europe","url":"rtmp://ingest-eu1.live.lightcast.com/in"}],"recommended":{"keyint":2,"max video bitrate":6000,"max audio bitrate":320,"x264opts":"scenecut=0"},"supported video codecs":["h264"]},{"name":"Bongacams","servers":[{"name":"Automatic / Default","url":"rtmp://auto.origin.gnsbc.com:1934/live"},{"name":"Automatic / Backup","url":"rtmp://origin.bcvidorigin.com:1934/live"},{"name":"Europe","url":"rtmp://z-eu.origin.gnsbc.com:1934/live"},{"name":"North America","url":"rtmp://z-us.origin.gnsbc.com:1934/live"}],"recommended":{"keyint":2,"max video bitrate":6000,"max audio bitrate":192,"bframes":0,"x264opts":"tune=zerolatency"},"supported video codecs":["h264"]},{"name":"OnlyFans.com","stream_key_link":"https://onlyfans.com/my/settings/other","servers":[{"name":"CloudBeta","url":"rtmp://cloudbetastreaming.onlyfans.com/live"}],"recommended":{"keyint":2,"profile":"main","max video bitrate":2500,"max audio bitrate":192,"bframes":0,"x264opts":"tune=zerolatency"},"supported video codecs":["h264"]},{"name":"Steam","common":false,"servers":[{"name":"Default","url":"rtmp://ingest-rtmp.broadcast.steamcontent.com/app"}],"recommended":{"keyint":2,"profile":"high","max video bitrate":7000,"max audio bitrate":128},"supported video codecs":["h264"]},{"name":"Konduit.live","servers":[{"name":"Default","url":"rtmp://rtmp.konduit.live/live"}],"recommended":{"keyint":2,"x264opts":"scenecut=0"},"supported video codecs":["h264"]},{"name":"niconico (ニコニコ生放送)","more_info_link":"https://qa.nicovideo.jp/faq/show/701","alt_names":["niconico, premium member (ニコニコ生放送 プレミアム会員)","niconico, free member (ニコニコ生放送 一般会員)"],"servers":[{"name":"Default","url":"rtmp://liveorigin.dlive.nicovideo.jp/live/input"}],"recommended":{"keyint":2,"profile":"high","max audio bitrate":192,"max video bitrate":5808,"x264opts":"tune=zerolatency"},"supported video codecs":["h264"]},{"name":"Nimo TV","servers":[{"name":"Global:2","url":"rtmp://txpush.rtmp.nimo.tv/live/"},{"name":"Global:3","url":"rtmp://alpush.rtmp.nimo.tv/live/"}],"recommended":{"keyint":2,"max video bitrate":6000,"max audio bitrate":160},"supported video codecs":["h264"]},{"name":"XLoveCam.com","servers":[{"name":"Europe(main)","url":"rtmp://nl.eu.stream.xlove.com/performer-origin"},{"name":"Europe(Romania)","url":"rtmp://ro.eu.stream.xlove.com/performer-origin"},{"name":"Europe(Russia)","url":"rtmp://ru.eu.stream.xlove.com/performer-origin"},{"name":"North America(US East)","url":"rtmp://usec.na.stream.xlove.com/performer-origin"},{"name":"North America(US West)","url":"rtmp://uswc.na.stream.xlove.com/performer-origin"},{"name":"North America(Canada)","url":"rtmp://ca.na.stream.xlove.com/performer-origin"},{"name":"South America","url":"rtmp://co.sa.stream.xlove.com/performer-origin"},{"name":"Asia","url":"rtmp://sg.as.stream.xlove.com/performer-origin"}],"recommended":{"x264opts":"scenecut=0"},"supported video codecs":["h264"]},{"name":"AngelThump","servers":[{"name":"Auto","url":"rtmp://ingest.angelthump.com/live"},{"name":"New York 3","url":"rtmp://nyc-ingest.angelthump.com:1935/live"},{"name":"San Francisco 2","url":"rtmp://sfo-ingest.angelthump.com:1935/live"},{"name":"Singapore 1","url":"rtmp://sgp-ingest.angelthump.com:1935/live"},{"name":"London 1","url":"rtmp://lon-ingest.angelthump.com:1935/live"},{"name":"Frankfurt 1","url":"rtmp://fra-ingest.angelthump.com:1935/live"},{"name":"Toronto 1","url":"rtmp://tor-ingest.angelthump.com:1935/live"},{"name":"Amsterdam 3","url":"rtmp://ams-ingest.angelthump.com:1935/live"}],"recommended":{"keyint":2,"profile":"high","max video bitrate":3500,"max audio bitrate":160},"supported video codecs":["h264"]},{"name":"api.video","servers":[{"name":"Default","url":"rtmp://broadcast.api.video/s"}],"recommended":{"keyint":2,"max video bitrate":20000,"max audio bitrate":192},"supported video codecs":["h264"]},{"name":"SHOWROOM","protocol":"RTMP","servers":[{"name":"Default","url":"https://www.showroom-live.com/api/obs/streaming_info?obs_key="}],"recommended":{"keyint":2,"profile":"main","max video bitrate":1500,"max audio bitrate":160,"x264opts":"tune=zerolatency"},"supported video codecs":["h264"]},{"name":"Mux","servers":[{"name":"Global (RTMPS)","url":"rtmps://global-live.mux.com:443/app"},{"name":"Global (RTMP)","url":"rtmp://global-live.mux.com:5222/app"}],"recommended":{"keyint":2,"max video bitrate":5000,"max audio bitrate":160},"supported video codecs":["h264"]},{"name":"Viloud","servers":[{"name":"Default","url":"rtmp://live.viloud.tv:5222/app"}],"recommended":{"keyint":2,"max video bitrate":5000,"max audio bitrate":160},"supported video codecs":["h264"]},{"name":"MyFreeCams","servers":[{"name":"Automatic","url":"rtmp://publish.myfreecams.com/NxServer"},{"name":"Australia","url":"rtmp://publish-syd.myfreecams.com/NxServer"},{"name":"East Asia","url":"rtmp://publish-tyo.myfreecams.com/NxServer"},{"name":"Europe (East)","url":"rtmp://publish-buh.myfreecams.com/NxServer"},{"name":"Europe (West)","url":"rtmp://publish-ams.myfreecams.com/NxServer"},{"name":"North America (East Coast)","url":"rtmp://publish-ord.myfreecams.com/NxServer"},{"name":"North America (West Coast)","url":"rtmp://publish-tuk.myfreecams.com/NxServer"},{"name":"South America","url":"rtmp://publish-sao.myfreecams.com/NxServer"}],"recommended":{"keyint":1,"profile":"high","max fps":60,"max video bitrate":10000,"max audio bitrate":192,"x264opts":"tune=zerolatency scenecut=0"},"supported video codecs":["h264"]},{"name":"PolyStreamer.com","servers":[{"name":"Auto-select closest server","url":"rtmp://live.polystreamer.com/live"},{"name":"United States - West","url":"rtmp://us-west.live.polystreamer.com/live"},{"name":"United States - East","url":"rtmp://us-east.live.polystreamer.com/live"},{"name":"Australia","url":"rtmp://aus.live.polystreamer.com/live"},{"name":"India","url":"rtmp://ind.live.polystreamer.com/live"},{"name":"Germany","url":"rtmp://deu.live.polystreamer.com/live"},{"name":"Japan","url":"rtmp://jpn.live.polystreamer.com/live"},{"name":"Singapore","url":"rtmp://sgp.live.polystreamer.com/live"}],"recommended":{"keyint":2},"supported video codecs":["h264"]},{"name":"OPENREC.tv - Premium member (プレミアム会員)","stream_key_link":"https://www.openrec.tv/login?keep_login=true&url=https://www.openrec.tv/dashboard/live?from=obs","servers":[{"name":"Default","url":"rtmp://a.station.openrec.tv:1935/live1"}],"recommended":{"keyint":2,"max video bitrate":5000,"max audio bitrate":160},"supported video codecs":["h264"]},{"name":"nanoStream Cloud / bintu","more_info_link":"https://www.nanocosmos.de/obs","stream_key_link":"https://bintu-cloud-frontend.nanocosmos.de/organisation","servers":[{"name":"bintu-stream global ingest (rtmp)","url":"rtmp://bintu-stream.nanocosmos.de/live"},{"name":"bintu-stream global ingest (rtmps)","url":"rtmps://bintu-stream.nanocosmos.de:1937/live"},{"name":"bintu-vtrans global ingest with transcoding/ABR (rtmp)","url":"rtmp://bintu-vtrans.nanocosmos.de/live"},{"name":"bintu-vtrans global ingest with transcoding/ABR (rtmps)","url":"rtmps://bintu-vtrans.nanocosmos.de:1937/live"},{"name":"bintu-stream Europe (EU)","url":"rtmp://bintu-stream-eu.nanocosmos.de/live"},{"name":"bintu-stream USA West (USW)","url":"rtmp://bintu-stream-usw.nanocosmos.de/live"},{"name":"bintu-stream US East (USE)","url":"rtmp://bintu-stream-use.nanocosmos.de/live"},{"name":"bintu-stream Asia South (ASS)","url":"rtmp://bintu-stream-ass.nanocosmos.de/live"},{"name":"bintu-vtrans Europe (EU)","url":"rtmp://bintu-vtrans-eu.nanocosmos.de/live"},{"name":"bintu-vtrans USA West (USW)","url":"rtmp://bintu-vtrans-usw.nanocosmos.de/live"},{"name":"bintu-vtrans US East (USE)","url":"rtmp://bintu-vtrans-use.nanocosmos.de/live"},{"name":"bintu-vtrans Asia South (ASS)","url":"rtmp://bintu-vtrans-ass.nanocosmos.de/live"},{"name":"bintu-vtrans Australia (AU)","url":"rtmp://bintu-vtrans-au.nanocosmos.de/live"}],"recommended":{"keyint":2,"profile":"baseline","bframes":0,"max video bitrate":5000,"max audio bitrate":192,"x264opts":"tune=zerolatency b-pyramid=0 scenecut=0"},"supported video codecs":["h264"]},{"name":"Dacast","protocol":"RTMP","servers":[{"name":"Default","url":"https://developer.dacast.com/v3/encoder-setup/"}],"recommended":{"keyint":1,"profile":"high","max video bitrate":7000,"max audio bitrate":128},"supported video codecs":["h264"]},{"name":"Bilibili Live - RTMP | 哔哩哔哩直播 - RTMP","more_info_link":"https://link.bilibili.com/p/help/index?id=4#/tools-tutorial","stream_key_link":"https://link.bilibili.com/p/center/index#/my-room/start-live","alt_names":["Bilibili Live"],"servers":[{"name":"Global - Primary | 全球 - 主要","url":"rtmp://live-push.bilivideo.com/live-bvc/"},{"name":"Non Chinese Mainland - Primary | 非中国大陆地区 - 主要","url":"rtmp://bdy.live-push.bilivideo.com/live-bvc/"},{"name":"Chinese Mainland - Backup | 中国大陆地区 - 备用","url":"rtmp://txy2.live-push.bilivideo.com/live-bvc/"},{"name":"Non Chinese Mainland - Backup | 非中国大陆地区 - 备用","url":"rtmp://txy.live-push.bilivideo.com/live-bvc/"}],"supported video codecs":["h264","hevc"]},{"name":"BoxCast","stream_key_link":"https://dashboard.boxcast.com/#/sources","servers":[{"name":"BoxCast","url":"rtmp://rtmp.boxcast.com/live"}],"supported video codecs":["h264"]},{"name":"Disciple Media","servers":[{"name":"Default","url":"rtmp://rtmp.disciplemedia.com/b-fme"}],"supported video codecs":["h264"]},{"name":"Jio Games","servers":[{"name":"Primary","url":"rtmp://livepub1.api.engageapps.jio/live"},{"name":"Secondary","url":"rtmp://livepub2.api.engageapps.jio/live"}],"recommended":{"keyint":2,"max video bitrate":32000,"max audio bitrate":256},"supported video codecs":["h264"]},{"name":"Kuaishou Live","stream_key_link":"https://studio.kuaishou.com/live/list","servers":[{"name":"Default","url":"rtmp://open-push.voip.yximgs.com/gifshow/"},{"name":"North America","url":"rtmp://tx.push.yximgs.com/live/"}],"supported video codecs":["h264"]},{"name":"PhoneLiveStreaming","stream_key_link":"https://app.phonelivestreaming.com/media/rtmp","servers":[{"name":"PhoneLiveStreaming","url":"rtmp://live.phonelivestreaming.com/live/"}],"recommended":{"keyint":2,"max video bitrate":128,"max audio bitrate":160},"supported video codecs":["h264"]},{"name":"Sympla","servers":[{"name":"Sympla RTMP","url":"rtmp://rtmp.sympla.com.br:5222/app"}],"recommended":{"keyint":2,"max video bitrate":5000,"max audio bitrate":160},"supported video codecs":["h264"]},{"name":"Livepush","more_info_link":"https://docs.livepush.io/en/articles/5065323-how-to-stream-live-from-obs-to-livepush","servers":[{"name":"Livepush Global (Default)","url":"rtmp://dc-global.livepush.io/live"},{"name":"Chicago, US","url":"rtmp://us-central-ch.livepush.io/live"},{"name":"New York, US","url":"rtmp://us-east-ny.livepush.io/live"},{"name":"Los Angeles, US","url":"rtmp://us-west-la.livepush.io/live"},{"name":"Miami, US","url":"rtmp://us-south-mia.livepush.io/live"},{"name":"Dallas, US","url":"rtmp://us-central-dal.livepush.io/live"},{"name":"Montreal, CA","url":"rtmp://ca-central-mon.livepush.io/live"},{"name":"Toronto, CA","url":"rtmp://ca-south-tor.livepush.io/live"},{"name":"Sydney, AU","url":"rtmp://au-east-syd.livepush.io/live"},{"name":"London, UK","url":"rtmp://uk-central-ldn.livepush.io/live"},{"name":"Milan, Italy","url":"rtmp://it-north-mln.livepush.io/live"},{"name":"Paris, FR","url":"rtmp://fr-central-par.livepush.io/live"},{"name":"Singapore","url":"rtmp://as-southeast-sg.livepush.io/live"},{"name":"Bangalore, IN","url":"rtmp://in-south-blr.livepush.io/live"}],"recommended":{"keyint":2,"max video bitrate":16000},"supported video codecs":["h264"]},{"name":"Vindral","more_info_link":"https://docs.vindral.com/docs/vindral-cdn/","stream_key_link":"https://portal.cdn.vindral.com/channels","servers":[{"name":"Global","url":"rtmps://rtmp.global.cdn.vindral.com/publish"}],"recommended":{"keyint":1,"profile":"high","bframes":0,"max video bitrate":20000,"max audio bitrate":192},"supported video codecs":["h264"]},{"name":"Whowatch (ふわっち)","more_info_link":"https://whowatch.tv/help/encoder","stream_key_link":"https://whowatch.tv/publish","servers":[{"name":"default","url":"rtmp://live.whowatch.tv/live/"}],"recommended":{"keyint":2,"max video bitrate":1800,"max audio bitrate":192},"supported video codecs":["h264"]},{"name":"IRLToolkit","stream_key_link":"https://irl.run/settings/ingest/","servers":[{"name":"Global (Recommended)","url":"rtmps://stream.global.irl.run/ingest"},{"name":"Los Angeles, US","url":"rtmps://stream.lax.irl.run/ingest"},{"name":"Dallas, US","url":"rtmps://stream.dal.irl.run/ingest"},{"name":"New York, US","url":"rtmps://stream.ewr.irl.run/ingest"},{"name":"Miami, US","url":"rtmps://stream.mia.irl.run/ingest"},{"name":"Amsterdam, NL","url":"rtmps://stream.ams.irl.run/ingest"},{"name":"Frankfurt, DE","url":"rtmps://stream.fra.irl.run/ingest"},{"name":"Singapore","url":"rtmps://stream.sin.irl.run/ingest"},{"name":"Tokyo, JP","url":"rtmps://stream.tyo.irl.run/ingest"},{"name":"Sydney, AU","url":"rtmps://stream.syd.irl.run/ingest"}],"recommended":{"keyint":2,"bframes":2,"max video bitrate":20000,"max audio bitrate":256},"supported video codecs":["h264"]},{"name":"Bitmovin","more_info_link":"https://developer.bitmovin.com/docs/overview","stream_key_link":"https://bitmovin.com/dashboard/streams?streamsTab=LIVE","servers":[{"name":"Streams Live","url":"rtmp://live-input.bitmovin.com/streams"}],"recommended":{"keyint":2},"supported video codecs":["h264"]},{"name":"Enchant.events","more_info_link":"https://docs.enchant.events/knowledge-base-y4pOb","servers":[{"name":"Primary RTMPS","url":"rtmps://stream.enchant.cloud:443/live"}],"recommended":{"keyint":2,"profile":"high","max video bitrate":9000,"max audio bitrate":192},"supported video codecs":["h264"]},{"name":"Joystick.TV","more_info_link":"https://support.joystick.tv/live_streaming/","stream_key_link":"https://joystick.tv/stream-settings","servers":[{"name":"North America","url":"rtmp://live.joystick.tv/live/"},{"name":"Europe","url":"rtmp://eu.live.joystick.tv/live/"}],"recommended":{"keyint":2,"max video bitrate":7500,"max audio bitrate":192,"max fps":60,"profile":"main","bframes":0,"x264opts":"tune=zerolatency scenecut=0"},"supported video codecs":["h264"]},{"name":"Livepeer Studio","more_info_link":"https://docs.livepeer.org/guides/developing/stream-via-obs","stream_key_link":"https://livepeer.studio/dashboard/streams","servers":[{"name":"Global (RTMP)","url":"rtmp://rtmp.livepeer.com/live"},{"name":"Global (RTMP Primary)","url":"rtmp://rtmp-a.livepeer.com/live"},{"name":"Global (RTMP Backup)","url":"rtmp://rtmp-b.livepeer.com/live"}],"recommended":{"keyint":1,"profile":"high","bframes":0,"max video bitrate":20000,"max audio bitrate":512},"supported video codecs":["h264"]},{"name":"MasterStream.iR | مستراستریم | ری استریم و استریم همزمان","common":false,"more_info_link":"https://masterstream.ir/webpage/page/docs","stream_key_link":"https://masterstream.ir/control-panel/streaming","servers":[{"name":"Iran Server 1 - Bandwidth Required","url":"rtmp://live1.masterstream.ir/live"},{"name":"Iran Server 2 - Bandwidth Required","url":"rtmp://live2.masterstream.ir/live"},{"name":"Iran Server 3 - Bandwidth Required","url":"rtmp://live3.masterstream.ir/live"},{"name":"Iran Server 4 - Bandwidth Required","url":"rtmp://live4.masterstream.ir/live"},{"name":"Iran Server 5 - Bandwidth Required","url":"rtmp://live5.masterstream.ir/live"},{"name":"International Server 1","url":"rtmp://ilive1.masterstream.ir/live"},{"name":"International Server 2","url":"rtmp://ilive2.masterstream.ir/live"},{"name":"International Server 3","url":"rtmp://ilive3.masterstream.ir/live"},{"name":"International Server 4","url":"rtmp://ilive4.masterstream.ir/live"}],"protocol":"RTMP","supported video codecs":["h264"],"recommended":{"keyint":2,"supported resolutions":["1920x1080","1280x720","852x480","640x360"],"max video bitrate":6000,"max audio bitrate":320,"x264opts":"scenecut=0"}},{"name":"PandaTV | 팬더티비","common":false,"servers":[{"name":"Default","url":"rtmp://rtmp.pandalive.co.kr/app"}],"recommended":{"keyint":2,"supported resolutions":["1920x1080","1280x720","852x480","640x360"],"max video bitrate":7500,"max audio bitrate":320,"x264opts":"scenecut=0"},"supported video codecs":["h264"]},{"name":"Vault - by CommanderRoot","common":false,"more_info_link":"https://vault.root-space.eu/","stream_key_link":"https://vault.root-space.eu/recordings","servers":[{"name":"EU - Central","url":"rtmp://ingest-eu-central.vault.root-space.eu/app"},{"name":"US - West","url":"rtmp://ingest-us-west.vault.root-space.eu/app"}],"protocol":"RTMP","supported video codecs":["h264"],"supported audio codecs":["aac"],"recommended":{"keyint":2,"max video bitrate":7800,"max audio bitrate":320,"x264opts":"scenecut=0"}},{"name":"CHZZK","common":false,"stream_key_link":"https://studio.chzzk.naver.com/setting","servers":[{"name":"Default","url":"rtmp://global-rtmp.lip2.navercorp.com:8080/relay"}],"supported video codecs":["h264"],"recommended":{"keyint":1,"bframes":0,"max fps":60,"max video bitrate":8000,"max audio bitrate":192,"x264opts":"tune=zerolatency scenecut=0","supported resolutions":["1920x1080"]}},{"name":"Streamway","common":false,"more_info_link":"https://support.streamway.in/how-to-connect-obs-studio-to-streamway/","stream_key_link":"https://app.streamway.in/broadcasts","servers":[{"name":"Primary","url":"rtmp://injest.streamway.in/LiveApp"},{"name":"Backup","url":"rtmps://bkp.streamway.in:443/live"}],"protocol":"RTMP","supported video codecs":["h264"],"recommended":{"keyint":2}},{"name":"SharePlay.tv","common":false,"stream_key_link":"https://playstudio.shareplay.tv/stream/settings","servers":[{"name":"Default (Auto Detect)","url":"rtmp://stream.shareplay.tv"},{"name":"Atlanta, Georgia, USA","url":"rtmp://live-us-atl-stream.shareplay.tv"},{"name":"Chicago, Illinois, USA","url":"rtmp://live-us-ord-stream.shareplay.tv"},{"name":"Dallas, Texas, USA","url":"rtmp://live-us-dfw-stream.shareplay.tv"},{"name":"Los Angeles, California, USA","url":"rtmp://live-us-lax-stream.shareplay.tv"},{"name":"Seattle, Washington, USA","url":"rtmp://live-us-sea-stream.shareplay.tv"},{"name":"Washington D.C., USA","url":"rtmp://live-us-iad-stream.shareplay.tv"},{"name":"Toronto, Canada","url":"rtmp://live-ca-yyz-stream.shareplay.tv"},{"name":"Paris, France","url":"rtmp://live-fr-par-stream.shareplay.tv"},{"name":"London, UK","url":"rtmp://live-uk-lhr-stream.shareplay.tv"},{"name":"Sydney, Australia","url":"rtmp://live-au-syd-stream.shareplay.tv"}],"supported video codecs":["h264"],"recommended":{"keyint":2,"max video bitrate":12000,"max audio bitrate":320}},{"name":"sheeta","common":false,"more_info_link":"https://partner-support.sheeta.com/hc/ja/articles/4404573942425-%E7%94%9F%E6%94%BE%E9%80%81%E3%81%AE%E9%85%8D%E4%BF%A1%E6%96%B9%E6%B3%95","servers":[{"name":"Default","url":"rtmp://lsm.sheeta.com:1935/lsm"}],"protocol":"RTMP","supported video codecs":["h264"],"supported audio codecs":["aac"],"recommended":{"keyint":1,"profile":"main","supported resolutions":["1920x1080","1280x720","854x480","640x480"],"bitrate matrix":[{"res":"1920x1080","fps":30,"max bitrate":6000},{"res":"1280x720","fps":30,"max bitrate":4700},{"res":"854x480","fps":30,"max bitrate":3400},{"res":"640x480","fps":30,"max bitrate":3400},{"res":"1920x1080","fps":60,"max bitrate":9000},{"res":"1280x720","fps":60,"max bitrate":7000},{"res":"854x480","fps":60,"max bitrate":5000},{"res":"640x480","fps":60,"max bitrate":5000}],"max fps":60,"max video bitrate":9000,"max audio bitrate":512,"x264opts":"scenecut=0","output":"rtmp_output"}},{"name":"Amazon IVS","supported video codecs":["h264"],"servers":[{"name":"Asia: China, Hong Kong (6) (RTMPS)","url":"rtmps://hkg06.contribute.live-video.net/app"},{"name":"Asia: India, Bangalore (1) (RTMPS)","url":"rtmps://blr01.contribute.live-video.net/app"},{"name":"Asia: India, Chennai (RTMPS)","url":"rtmps://maa01.contribute.live-video.net/app"},{"name":"Asia: India, Hyderabad (1) (RTMPS)","url":"rtmps://hyd01.contribute.live-video.net/app"},{"name":"Asia: India, Mumbai (RTMPS)","url":"rtmps://bom01.contribute.live-video.net/app"},{"name":"Asia: India, New Delhi (RTMPS)","url":"rtmps://del01.contribute.live-video.net/app"},{"name":"Asia: Indonesia, Cikarang Barat (1) (RTMPS)","url":"rtmps://jkt01.contribute.live-video.net/app"},{"name":"Asia: Indonesia, Jakarta (2) (RTMPS)","url":"rtmps://jkt02.contribute.live-video.net/app"},{"name":"Asia: Japan, Osaka (1) (RTMPS)","url":"rtmps://osa01.contribute.live-video.net/app"},{"name":"Asia: Japan, Tokyo (3) (RTMPS)","url":"rtmps://tyo03.contribute.live-video.net/app"},{"name":"Asia: Japan, Tokyo (5) (RTMPS)","url":"rtmps://tyo05.contribute.live-video.net/app"},{"name":"Asia: Manila, Philippines (1) (RTMPS)","url":"rtmps://mnl01.contribute.live-video.net/app"},{"name":"Asia: Singapore (1) (RTMPS)","url":"rtmps://sin01.contribute.live-video.net/app"},{"name":"Asia: Singapore (4) (RTMPS)","url":"rtmps://sin04.contribute.live-video.net/app"},{"name":"Asia: South Korea, Seoul (3) (RTMPS)","url":"rtmps://sel03.contribute.live-video.net/app"},{"name":"Asia: South Korea, Seoul (4) (RTMPS)","url":"rtmps://sel04.contribute.live-video.net/app"},{"name":"Asia: Taiwan, Taipei (1) (RTMPS)","url":"rtmps://tpe01.contribute.live-video.net/app"},{"name":"Asia: Taiwan, Taipei (3) (RTMPS)","url":"rtmps://tpe03.contribute.live-video.net/app"},{"name":"Asia: Thailand, Bangkok (2) (RTMPS)","url":"rtmps://bkk02.contribute.live-video.net/app"},{"name":"Europe: Austria, Vienna (2) (RTMPS)","url":"rtmps://vie02.contribute.live-video.net/app"},{"name":"Europe: Czech Republic, Prague (RTMPS)","url":"rtmps://prg03.contribute.live-video.net/app"},{"name":"Europe: Denmark, Copenhagen (RTMPS)","url":"rtmps://cph.contribute.live-video.net/app"},{"name":"Europe: Finland, Helsinki (3) (RTMPS)","url":"rtmps://hel03.contribute.live-video.net/app"},{"name":"Europe: France, Marseille (RTMPS)","url":"rtmps://mrs.contribute.live-video.net/app"},{"name":"Europe: France, Marseille (2) (RTMPS)","url":"rtmps://mrs02.contribute.live-video.net/app"},{"name":"Europe: France, Paris (10) (RTMPS)","url":"rtmps://cdg10.contribute.live-video.net/app"},{"name":"Europe: France, Paris (2) (RTMPS)","url":"rtmps://cdg02.contribute.live-video.net/app"},{"name":"Europe: Germany, Berlin (RTMPS)","url":"rtmps://ber.contribute.live-video.net/app"},{"name":"Europe: Germany, Dusseldorf (1) (RTMPS)","url":"rtmps://dus01.contribute.live-video.net/app"},{"name":"Europe: Germany, Frankfurt (2) (RTMPS)","url":"rtmps://fra02.contribute.live-video.net/app"},{"name":"Europe: Germany, Frankfurt (5) (RTMPS)","url":"rtmps://fra05.contribute.live-video.net/app"},{"name":"Europe: Germany, Frankfurt (6) (RTMPS)","url":"rtmps://fra06.contribute.live-video.net/app"},{"name":"Europe: Germany, Munich (1) (RTMPS)","url":"rtmps://muc01.contribute.live-video.net/app"},{"name":"Europe: Italy, Milan (2) (RTMPS)","url":"rtmps://mil02.contribute.live-video.net/app"},{"name":"Europe: Netherlands, Amsterdam (2) (RTMPS)","url":"rtmps://ams02.contribute.live-video.net/app"},{"name":"Europe: Netherlands, Amsterdam (3) (RTMPS)","url":"rtmps://ams03.contribute.live-video.net/app"},{"name":"Europe: Norway, Oslo (RTMPS)","url":"rtmps://osl.contribute.live-video.net/app"},{"name":"Europe: Poland, Warsaw (2) (RTMPS)","url":"rtmps://waw02.contribute.live-video.net/app"},{"name":"Europe: Spain, Madrid (1) (RTMPS)","url":"rtmps://mad01.contribute.live-video.net/app"},{"name":"Europe: Spain, Madrid (2) (RTMPS)","url":"rtmps://mad02.contribute.live-video.net/app"},{"name":"Europe: Sweden, Stockholm (3) (RTMPS)","url":"rtmps://arn03.contribute.live-video.net/app"},{"name":"Europe: Sweden, Stockholm (4) (RTMPS)","url":"rtmps://arn04.contribute.live-video.net/app"},{"name":"Europe: UK, London (3) (RTMPS)","url":"rtmps://lhr03.contribute.live-video.net/app"},{"name":"Europe: UK, London (4) (RTMPS)","url":"rtmps://lhr04.contribute.live-video.net/app"},{"name":"Europe: UK, London (8) (RTMPS)","url":"rtmps://lhr08.contribute.live-video.net/app"},{"name":"NA: Canada, Quebec (RTMPS)","url":"rtmps://ymq03.contribute.live-video.net/app"},{"name":"NA: Canada, Toronto (RTMPS)","url":"rtmps://yto.contribute.live-video.net/app"},{"name":"NA: Mexico, Queretaro (3) (RTMPS)","url":"rtmps://qro03.contribute.live-video.net/app"},{"name":"NA: Mexico, Queretaro (4) (RTMPS)","url":"rtmps://qro04.contribute.live-video.net/app"},{"name":"Oceania: Australia, Sydney (2) (RTMPS)","url":"rtmps://syd02.contribute.live-video.net/app"},{"name":"Oceania: Australia, Sydney (3) (RTMPS)","url":"rtmps://syd03.contribute.live-video.net/app"},{"name":"South America: Brazil, Fortaleza (1) (RTMPS)","url":"rtmps://for01.contribute.live-video.net/app"},{"name":"South America: Brazil, Rio de Janeiro (3) (RTMPS)","url":"rtmps://rio03.contribute.live-video.net/app"},{"name":"South America: Brazil, Rio de Janeiro (4) (RTMPS)","url":"rtmps://rio04.contribute.live-video.net/app"},{"name":"South America: Brazil, Sao Paulo (RTMPS)","url":"rtmps://sao03.contribute.live-video.net/app"},{"name":"South America: Brazil, Sao Paulo (5) (RTMPS)","url":"rtmps://sao05.contribute.live-video.net/app"},{"name":"South America: Buenos Aires, Argentina (1) (RTMPS)","url":"rtmps://bue01.contribute.live-video.net/app"},{"name":"South America: Colombia, Bogota (1) (RTMPS)","url":"rtmps://bog01.contribute.live-video.net/app"},{"name":"US Central: Dallas, TX (RTMPS)","url":"rtmps://dfw.contribute.live-video.net/app"},{"name":"US Central: Dallas, TX (2) (RTMPS)","url":"rtmps://dfw02.contribute.live-video.net/app"},{"name":"US Central: Denver, CO (52) (RTMPS)","url":"rtmps://den52.contribute.live-video.net/app"},{"name":"US Central: Garland, TX (56) (RTMPS)","url":"rtmps://dfw56.contribute.live-video.net/app"},{"name":"US Central: Houston, TX (50) (RTMPS)","url":"rtmps://iah50.contribute.live-video.net/app"},{"name":"US East: Ashburn, VA (5) (RTMPS)","url":"rtmps://iad05.contribute.live-video.net/app"},{"name":"US East: Atlanta, GA (RTMPS)","url":"rtmps://atl.contribute.live-video.net/app"},{"name":"US East: Chicago, IL (3) (RTMPS)","url":"rtmps://ord03.contribute.live-video.net/app"},{"name":"US East: Chicago, IL (56) (RTMPS)","url":"rtmps://ord56.contribute.live-video.net/app"},{"name":"US East: McAllen, TX (1) (RTMPS)","url":"rtmps://mfe01.contribute.live-video.net/app"},{"name":"US East: Miami, FL (5) (RTMPS)","url":"rtmps://mia05.contribute.live-video.net/app"},{"name":"US East: New York, NY (RTMPS)","url":"rtmps://jfk.contribute.live-video.net/app"},{"name":"US East: New York, NY (50) (RTMPS)","url":"rtmps://jfk50.contribute.live-video.net/app"},{"name":"US West: Los Angeles, CA (RTMPS)","url":"rtmps://lax.contribute.live-video.net/app"},{"name":"US West: Salt Lake City, UT (RTMPS)","url":"rtmps://slc.contribute.live-video.net/app"},{"name":"US West: San Francisco, CA (RTMPS)","url":"rtmps://sfo.contribute.live-video.net/app"},{"name":"US West: San Jose, California (6) (RTMPS)","url":"rtmps://sjc06.contribute.live-video.net/app"},{"name":"US West: Seattle, WA (RTMPS)","url":"rtmps://sea.contribute.live-video.net/app"},{"name":"US West: Seattle, WA (2) (RTMPS)","url":"rtmps://sea02.contribute.live-video.net/app"},{"name":"Asia: China, Hong Kong (6) (RTMP)","url":"rtmp://hkg06.contribute.live-video.net/app"},{"name":"Asia: India, Bangalore (1) (RTMP)","url":"rtmp://blr01.contribute.live-video.net/app"},{"name":"Asia: India, Chennai (RTMP)","url":"rtmp://maa01.contribute.live-video.net/app"},{"name":"Asia: India, Hyderabad (1) (RTMP)","url":"rtmp://hyd01.contribute.live-video.net/app"},{"name":"Asia: India, Mumbai (RTMP)","url":"rtmp://bom01.contribute.live-video.net/app"},{"name":"Asia: India, New Delhi (RTMP)","url":"rtmp://del01.contribute.live-video.net/app"},{"name":"Asia: Indonesia, Cikarang Barat (1) (RTMP)","url":"rtmp://jkt01.contribute.live-video.net/app"},{"name":"Asia: Indonesia, Jakarta (2) (RTMP)","url":"rtmp://jkt02.contribute.live-video.net/app"},{"name":"Asia: Japan, Osaka (1) (RTMP)","url":"rtmp://osa01.contribute.live-video.net/app"},{"name":"Asia: Japan, Tokyo (3) (RTMP)","url":"rtmp://tyo03.contribute.live-video.net/app"},{"name":"Asia: Japan, Tokyo (5) (RTMP)","url":"rtmp://tyo05.contribute.live-video.net/app"},{"name":"Asia: Manila, Philippines (1) (RTMP)","url":"rtmp://mnl01.contribute.live-video.net/app"},{"name":"Asia: Singapore (1) (RTMP)","url":"rtmp://sin01.contribute.live-video.net/app"},{"name":"Asia: Singapore (4) (RTMP)","url":"rtmp://sin04.contribute.live-video.net/app"},{"name":"Asia: South Korea, Seoul (3) (RTMP)","url":"rtmp://sel03.contribute.live-video.net/app"},{"name":"Asia: South Korea, Seoul (4) (RTMP)","url":"rtmp://sel04.contribute.live-video.net/app"},{"name":"Asia: Taiwan, Taipei (1) (RTMP)","url":"rtmp://tpe01.contribute.live-video.net/app"},{"name":"Asia: Taiwan, Taipei (3) (RTMP)","url":"rtmp://tpe03.contribute.live-video.net/app"},{"name":"Asia: Thailand, Bangkok (2) (RTMP)","url":"rtmp://bkk02.contribute.live-video.net/app"},{"name":"Europe: Austria, Vienna (2) (RTMP)","url":"rtmp://vie02.contribute.live-video.net/app"},{"name":"Europe: Czech Republic, Prague (RTMP)","url":"rtmp://prg03.contribute.live-video.net/app"},{"name":"Europe: Denmark, Copenhagen (RTMP)","url":"rtmp://cph.contribute.live-video.net/app"},{"name":"Europe: Finland, Helsinki (3) (RTMP)","url":"rtmp://hel03.contribute.live-video.net/app"},{"name":"Europe: France, Marseille (RTMP)","url":"rtmp://mrs.contribute.live-video.net/app"},{"name":"Europe: France, Marseille (2) (RTMP)","url":"rtmp://mrs02.contribute.live-video.net/app"},{"name":"Europe: France, Paris (10) (RTMP)","url":"rtmp://cdg10.contribute.live-video.net/app"},{"name":"Europe: France, Paris (2) (RTMP)","url":"rtmp://cdg02.contribute.live-video.net/app"},{"name":"Europe: Germany, Berlin (RTMP)","url":"rtmp://ber.contribute.live-video.net/app"},{"name":"Europe: Germany, Dusseldorf (1) (RTMP)","url":"rtmp://dus01.contribute.live-video.net/app"},{"name":"Europe: Germany, Frankfurt (2) (RTMP)","url":"rtmp://fra02.contribute.live-video.net/app"},{"name":"Europe: Germany, Frankfurt (5) (RTMP)","url":"rtmp://fra05.contribute.live-video.net/app"},{"name":"Europe: Germany, Frankfurt (6) (RTMP)","url":"rtmp://fra06.contribute.live-video.net/app"},{"name":"Europe: Germany, Munich (1) (RTMP)","url":"rtmp://muc01.contribute.live-video.net/app"},{"name":"Europe: Italy, Milan (2) (RTMP)","url":"rtmp://mil02.contribute.live-video.net/app"},{"name":"Europe: Netherlands, Amsterdam (2) (RTMP)","url":"rtmp://ams02.contribute.live-video.net/app"},{"name":"Europe: Netherlands, Amsterdam (3) (RTMP)","url":"rtmp://ams03.contribute.live-video.net/app"},{"name":"Europe: Norway, Oslo (RTMP)","url":"rtmp://osl.contribute.live-video.net/app"},{"name":"Europe: Poland, Warsaw (2) (RTMP)","url":"rtmp://waw02.contribute.live-video.net/app"},{"name":"Europe: Spain, Madrid (1) (RTMP)","url":"rtmp://mad01.contribute.live-video.net/app"},{"name":"Europe: Spain, Madrid (2) (RTMP)","url":"rtmp://mad02.contribute.live-video.net/app"},{"name":"Europe: Sweden, Stockholm (3) (RTMP)","url":"rtmp://arn03.contribute.live-video.net/app"},{"name":"Europe: Sweden, Stockholm (4) (RTMP)","url":"rtmp://arn04.contribute.live-video.net/app"},{"name":"Europe: UK, London (3) (RTMP)","url":"rtmp://lhr03.contribute.live-video.net/app"},{"name":"Europe: UK, London (4) (RTMP)","url":"rtmp://lhr04.contribute.live-video.net/app"},{"name":"Europe: UK, London (8) (RTMP)","url":"rtmp://lhr08.contribute.live-video.net/app"},{"name":"NA: Canada, Quebec (RTMP)","url":"rtmp://ymq03.contribute.live-video.net/app"},{"name":"NA: Canada, Toronto (RTMP)","url":"rtmp://yto.contribute.live-video.net/app"},{"name":"NA: Mexico, Queretaro (3) (RTMP)","url":"rtmp://qro03.contribute.live-video.net/app"},{"name":"NA: Mexico, Queretaro (4) (RTMP)","url":"rtmp://qro04.contribute.live-video.net/app"},{"name":"Oceania: Australia, Sydney (2) (RTMP)","url":"rtmp://syd02.contribute.live-video.net/app"},{"name":"Oceania: Australia, Sydney (3) (RTMP)","url":"rtmp://syd03.contribute.live-video.net/app"},{"name":"South America: Brazil, Fortaleza (1) (RTMP)","url":"rtmp://for01.contribute.live-video.net/app"},{"name":"South America: Brazil, Rio de Janeiro (3) (RTMP)","url":"rtmp://rio03.contribute.live-video.net/app"},{"name":"South America: Brazil, Rio de Janeiro (4) (RTMP)","url":"rtmp://rio04.contribute.live-video.net/app"},{"name":"South America: Brazil, Sao Paulo (RTMP)","url":"rtmp://sao03.contribute.live-video.net/app"},{"name":"South America: Brazil, Sao Paulo (5) (RTMP)","url":"rtmp://sao05.contribute.live-video.net/app"},{"name":"South America: Buenos Aires, Argentina (1) (RTMP)","url":"rtmp://bue01.contribute.live-video.net/app"},{"name":"South America: Colombia, Bogota (1) (RTMP)","url":"rtmp://bog01.contribute.live-video.net/app"},{"name":"US Central: Dallas, TX (RTMP)","url":"rtmp://dfw.contribute.live-video.net/app"},{"name":"US Central: Dallas, TX (2) (RTMP)","url":"rtmp://dfw02.contribute.live-video.net/app"},{"name":"US Central: Denver, CO (52) (RTMP)","url":"rtmp://den52.contribute.live-video.net/app"},{"name":"US Central: Garland, TX (56) (RTMP)","url":"rtmp://dfw56.contribute.live-video.net/app"},{"name":"US Central: Houston, TX (50) (RTMP)","url":"rtmp://iah50.contribute.live-video.net/app"},{"name":"US East: Ashburn, VA (5) (RTMP)","url":"rtmp://iad05.contribute.live-video.net/app"},{"name":"US East: Atlanta, GA (RTMP)","url":"rtmp://atl.contribute.live-video.net/app"},{"name":"US East: Chicago, IL (3) (RTMP)","url":"rtmp://ord03.contribute.live-video.net/app"},{"name":"US East: Chicago, IL (56) (RTMP)","url":"rtmp://ord56.contribute.live-video.net/app"},{"name":"US East: McAllen, TX (1) (RTMP)","url":"rtmp://mfe01.contribute.live-video.net/app"},{"name":"US East: Miami, FL (5) (RTMP)","url":"rtmp://mia05.contribute.live-video.net/app"},{"name":"US East: New York, NY (RTMP)","url":"rtmp://jfk.contribute.live-video.net/app"},{"name":"US East: New York, NY (50) (RTMP)","url":"rtmp://jfk50.contribute.live-video.net/app"},{"name":"US West: Los Angeles, CA (RTMP)","url":"rtmp://lax.contribute.live-video.net/app"},{"name":"US West: Salt Lake City, UT (RTMP)","url":"rtmp://slc.contribute.live-video.net/app"},{"name":"US West: San Francisco, CA (RTMP)","url":"rtmp://sfo.contribute.live-video.net/app"},{"name":"US West: San Jose, California (6) (RTMP)","url":"rtmp://sjc06.contribute.live-video.net/app"},{"name":"US West: Seattle, WA (RTMP)","url":"rtmp://sea.contribute.live-video.net/app"},{"name":"US West: Seattle, WA (2) (RTMP)","url":"rtmp://sea02.contribute.live-video.net/app"}],"multitrack_video_configuration_url":"https://ingest.contribute.live-video.net/api/v3/GetClientConfiguration","recommended":{"keyint":2,"x264opts":"scenecut=0"}},{"name":"Dolby OptiView Real-time","alt_names":["Dolby Millicast"],"common":false,"more_info_link":"https://optiview.dolby.com/docs/millicast/using-obs/","stream_key_link":"https://streaming.dolby.io","multitrack_video_configuration_url":"https://director.millicast.com/api/multitrackvideo/configuration","multitrack_video_name":"Enhanced Broadcasting","multitrack_video_learn_more_link":"https://optiview.dolby.com/docs/millicast/obs-enhanced-broadcasting-multitrack-video/","servers":[{"name":"Global (RTMPS)","url":"rtmps://rtmp-auto.millicast.com:443/v2/pub"},{"name":"Global (RTMP)","url":"rtmp://rtmp-auto.millicast.com:1935/v2/pub"},{"name":"Bangalore, India (RTMPS)","url":"rtmps://rtmp-blr-1.millicast.com:443/v2/pub"},{"name":"Bangalore, India (RTMP)","url":"rtmp://rtmp-blr-1.millicast.com:1935/v2/pub"},{"name":"Frankfurt, Germany (RTMPS)","url":"rtmps://rtmp-fra-1.millicast.com:443/v2/pub"},{"name":"Frankfurt, Germany (RTMP)","url":"rtmp://rtmp-fra-1.millicast.com:1935/v2/pub"},{"name":"Ashburn, Virginia, USA (RTMPS)","url":"rtmps://rtmp-iad-1.millicast.com:443/v2/pub"},{"name":"Ashburn, Virginia, USA (RTMP)","url":"rtmp://rtmp-iad-1.millicast.com:1935/v2/pub"},{"name":"London, England (RTMPS)","url":"rtmps://rtmp-lon-1.millicast.com:443/v2/pub"},{"name":"London, England (RTMP)","url":"rtmp://rtmp-lon-1.millicast.com:1935/v2/pub"},{"name":"Phoenix, AZ, USA (RTMPS)","url":"rtmps://rtmp-phx-1.millicast.com:443/v2/pub"},{"name":"Phoenix, AZ, USA (RTMP)","url":"rtmp://rtmp-phx-1.millicast.com:1935/v2/pub"},{"name":"Sao Paulo, Brazil (RTMPS)","url":"rtmps://rtmp-sao-1.millicast.com:443/v2/pub"},{"name":"Sao Paulo, Brazil (RTMP)","url":"rtmp://rtmp-sao-1.millicast.com:1935/v2/pub"},{"name":"Singapore (RTMPS)","url":"rtmps://rtmp-sgp-1.millicast.com:443/v2/pub"},{"name":"Singapore (RTMP)","url":"rtmp://rtmp-sgp-1.millicast.com:1935/v2/pub"},{"name":"Sydney, Australia (RTMPS)","url":"rtmps://rtmp-syd-1.millicast.com:443/v2/pub"},{"name":"Sydney, Australia (RTMP)","url":"rtmp://rtmp-syd-1.millicast.com:1935/v2/pub"}],"supported video codecs":["h264","hevc","av1"],"recommended":{"keyint":1,"bframes":0}},{"name":"NFHS Network","more_info_link":"https://support.nfhsnetwork.com/hc/en-us","stream_key_link":"https://console.nfhsnetwork.com/nfhs-events/","servers":[{"name":"Manual Broadcasts","url":"rtmp://video.nfhsnetwork.com/manual"}],"recommended":{"supported resolutions":["1920x1080","1280x720","640x360"],"max fps":60},"supported video codecs":["h264"]},{"name":"VRCDN - Live","more_info_link":"https://vrcdn.live","servers":[{"name":"Automatic","url":"rtmp://ingest.vrcdn.live/live"}],"supported video codecs":["h264"],"recommended":{"keyint":1,"max video bitrate":6000}},{"name":"SOOP Global","common":false,"more_info_link":"https://sooplive.helpshift.com/hc/en/3-soop/faq/20","stream_key_link":"https://www.sooplive.com/dashboard","servers":[{"name":"Default","url":"rtmp://global-stream.sooplive.com/app"}],"protocol":"RTMP","supported video codecs":["h264"],"supported audio codecs":["aac"],"recommended":{"keyint":1,"profile":"main","bframes":0,"supported resolutions":["1920x1080","1280x720","960x540","640x360"],"bitrate matrix":[{"res":"640x360","fps":30,"max bitrate":500},{"res":"640x360","fps":60,"max bitrate":1000},{"res":"960x540","fps":30,"max bitrate":2000},{"res":"960x540","fps":60,"max bitrate":2000},{"res":"1280x720","fps":30,"max bitrate":4000},{"res":"1280x720","fps":60,"max bitrate":4000},{"res":"1920x1080","fps":30,"max bitrate":8000},{"res":"1920x1080","fps":60,"max bitrate":8000}],"max fps":60,"max video bitrate":8000,"max audio bitrate":192}},{"name":"Sportify","more_info_link":"https://www.homegroundapp.com","servers":[{"name":"Default","url":"rtmp://stream.homegroundapp.com/live"}],"recommended":{"keyint":2,"max video bitrate":3500,"max audio bitrate":192,"supported resolutions":["1920x1080","1280x720"],"max fps":30},"supported video codecs":["h264"]}]} diff --git a/.config/obs-studio/plugin_config/rtmp-services/twitch_ingests.json b/.config/obs-studio/plugin_config/rtmp-services/twitch_ingests.json new file mode 100644 index 0000000..7e8e04b --- /dev/null +++ b/.config/obs-studio/plugin_config/rtmp-services/twitch_ingests.json @@ -0,0 +1,130 @@ +{ + "ingests": [ + { + "_id": 0, + "availability": 1.0, + "default": false, + "name": "Default", + "url_template": "rtmp://ingest.global-contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://ingest.global-contribute.live-video.net/app/{stream_key}", + "priority": 0 + }, + { + "_id": 1, + "availability": 1.0, + "default": false, + "name": "Europe (Frankfurt)", + "url_template": "rtmp://euc10.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://euc10.contribute.live-video.net/app/{stream_key}", + "priority": 1 + }, + { + "_id": 2, + "availability": 1.0, + "default": false, + "name": "Europe (Paris)", + "url_template": "rtmp://euw30.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://euw30.contribute.live-video.net/app/{stream_key}", + "priority": 2 + }, + { + "_id": 3, + "availability": 1.0, + "default": false, + "name": "Europe (Stockholm)", + "url_template": "rtmp://eun10.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://eun10.contribute.live-video.net/app/{stream_key}", + "priority": 3 + }, + { + "_id": 4, + "availability": 1.0, + "default": false, + "name": "Europe (Ireland)", + "url_template": "rtmp://euw10.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://euw10.contribute.live-video.net/app/{stream_key}", + "priority": 4 + }, + { + "_id": 5, + "availability": 1.0, + "default": false, + "name": "Asia Pacific (Mumbai)", + "url_template": "rtmp://aps30.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://aps30.contribute.live-video.net/app/{stream_key}", + "priority": 5 + }, + { + "_id": 6, + "availability": 1.0, + "default": false, + "name": "US East (N. Virginia)", + "url_template": "rtmp://use10.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://use10.contribute.live-video.net/app/{stream_key}", + "priority": 6 + }, + { + "_id": 7, + "availability": 1.0, + "default": false, + "name": "US East (Ohio)", + "url_template": "rtmp://use20.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://use20.contribute.live-video.net/app/{stream_key}", + "priority": 7 + }, + { + "_id": 8, + "availability": 1.0, + "default": false, + "name": "Asia Pacific (Seoul)", + "url_template": "rtmp://apn20.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://apn20.contribute.live-video.net/app/{stream_key}", + "priority": 8 + }, + { + "_id": 9, + "availability": 1.0, + "default": false, + "name": "US West (Oregon)", + "url_template": "rtmp://usw20.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://usw20.contribute.live-video.net/app/{stream_key}", + "priority": 9 + }, + { + "_id": 10, + "availability": 1.0, + "default": false, + "name": "Asia Pacific (Tokyo)", + "url_template": "rtmp://apn10.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://apn10.contribute.live-video.net/app/{stream_key}", + "priority": 10 + }, + { + "_id": 11, + "availability": 1.0, + "default": false, + "name": "South America (São Paulo)", + "url_template": "rtmp://sae10.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://sae10.contribute.live-video.net/app/{stream_key}", + "priority": 11 + }, + { + "_id": 12, + "availability": 1.0, + "default": false, + "name": "Asia Pacific (Singapore)", + "url_template": "rtmp://aps10.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://aps10.contribute.live-video.net/app/{stream_key}", + "priority": 12 + }, + { + "_id": 13, + "availability": 1.0, + "default": false, + "name": "Asia Pacific (Sydney)", + "url_template": "rtmp://aps20.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://aps20.contribute.live-video.net/app/{stream_key}", + "priority": 13 + } + ] +} diff --git a/.config/obs-studio/user.ini b/.config/obs-studio/user.ini new file mode 100644 index 0000000..2993d84 --- /dev/null +++ b/.config/obs-studio/user.ini @@ -0,0 +1,78 @@ +[General] +Pre19Defaults=false +Pre21Defaults=false +Pre23Defaults=false +Pre24.1Defaults=false +ConfirmOnExit=true +HotkeyFocusType=NeverDisableHotkeys +FirstRun=true + +[BasicWindow] +PreviewEnabled=true +PreviewProgramMode=true +SceneDuplicationMode=true +SwapScenesMode=true +SnappingEnabled=true +ScreenSnapping=true +SourceSnapping=true +CenterSnapping=false +SnapDistance=10 +SpacingHelpersEnabled=true +RecordWhenStreaming=false +KeepRecordingWhenStreamStops=false +SysTrayEnabled=true +SysTrayWhenStarted=false +SaveProjectors=false +ShowTransitions=true +ShowListboxToolbars=true +ShowStatusBar=true +ShowSourceIcons=true +ShowContextToolbars=true +StudioModeLabels=true +VerticalVolControl=true +MultiviewMouseSwitch=true +MultiviewDrawNames=true +MultiviewDrawAreas=true +MediaControlsCountdownTimer=true +geometry=AdnQywADAAAAAAoA///6YAAADvX////hAAAAAAAAAAD////+/////gAAAAICAAAACgAAAAoA///6YAAADvX////h +DockState=AAAA/wAAAAD9AAAAAgAAAAEAAALPAAAFSvwCAAAAA/sAAAAYAGMAbwBuAHQAcgBvAGwAcwBEAG8AYwBrAQAAABYAAAGtAAAAsgD////7AAAAEgBzAHQAYQB0AHMARABvAGMAawEAAAHGAAACYgAAAP0A////+wAAABIAbQBpAHgAZQByAEQAbwBjAGsBAAAEKwAAATUAAADvAP///wAAAAMAAAIkAAAAgvwBAAAAA/sAAAAUAHMAYwBlAG4AZQBzAEQAbwBjAGsBAAAAAAAAAK0AAACYAP////sAAAAWAHMAbwB1AHIAYwBlAHMARABvAGMAawEAAACwAAAArwAAAJgA////+wAAAB4AdAByAGEAbgBzAGkAdABpAG8AbgBzAEQAbwBjAGsBAAABYgAAAMIAAADBAP///wAAAiQAAATFAAAAAQAAAAIAAAABAAAAAvwAAAAA +AlwaysOnTop=false +EditPropertiesMode=false +DocksLocked=true +SideDocks=true +gridMode=false +OverflowAlwaysVisible=true +OverflowHidden=false +OverflowSelectionHidden=false +TransitionOnDoubleClick=true +WarnBeforeStartingStream=true +WarnBeforeStoppingStream=true +WarnBeforeStoppingRecord=false +VerticalVolumeControl=true +MixerShowInactive=false +MixerKeepInactiveLast=false +MixerShowHidden=false +MixerKeepHiddenLast=false + +[Appearance] +FontScale=10 +Density=-3 +Theme=com.obsproject.Yami.Acri + +[Basic] +Profile=Arindy +ProfileDir=Arindy +SceneCollection=Untitled +SceneCollectionFile=Untitled.json +ConfigOnNewProfile=true + +[Accessibility] +SelectRed=255 +SelectGreen=65280 +SelectBlue=16744192 +MixerGreen=2522918 +MixerYellow=2523007 +MixerRed=2500223 +MixerGreenActive=5046092 +MixerYellowActive=5046271 +MixerRedActive=5000447 diff --git a/.config/vesktop/settings.json b/.config/vesktop/settings.json new file mode 100644 index 0000000..1792272 --- /dev/null +++ b/.config/vesktop/settings.json @@ -0,0 +1,7 @@ +{ + "discordBranch": "stable", + "minimizeToTray": true, + "arRPC": true, + "splashColor": "rgb(220, 220, 223)", + "splashBackground": "rgba(0, 0, 0, 0)" +} \ No newline at end of file diff --git a/.config/vesktop/settings/quickCss.css b/.config/vesktop/settings/quickCss.css new file mode 100644 index 0000000..e69de29 diff --git a/.config/vesktop/settings/settings.json b/.config/vesktop/settings/settings.json new file mode 100644 index 0000000..65bb8bc --- /dev/null +++ b/.config/vesktop/settings/settings.json @@ -0,0 +1,603 @@ +{ + "autoUpdate": true, + "autoUpdateNotification": true, + "useQuickCss": true, + "themeLinks": [], + "eagerPatches": false, + "enabledThemes": [ + "Serpensortia.theme.css" + ], + "enableReactDevtools": false, + "frameless": false, + "transparent": true, + "winCtrlQ": false, + "windowsMaterial": "none", + "disableMinSize": false, + "winNativeTitleBar": false, + "plugins": { + "ChatInputButtonAPI": { + "enabled": false + }, + "CommandsAPI": { + "enabled": true + }, + "DynamicImageModalAPI": { + "enabled": false + }, + "MemberListDecoratorsAPI": { + "enabled": false + }, + "MessageAccessoriesAPI": { + "enabled": true + }, + "MessageDecorationsAPI": { + "enabled": false + }, + "MessageEventsAPI": { + "enabled": true + }, + "MessagePopoverAPI": { + "enabled": false + }, + "MessageUpdaterAPI": { + "enabled": false + }, + "ServerListAPI": { + "enabled": true + }, + "UserSettingsAPI": { + "enabled": true + }, + "AccountPanelServerProfile": { + "enabled": false + }, + "AlwaysAnimate": { + "enabled": false + }, + "AlwaysExpandRoles": { + "enabled": false + }, + "AlwaysTrust": { + "enabled": false + }, + "AnonymiseFileNames": { + "enabled": true + }, + "AppleMusicRichPresence": { + "enabled": false + }, + "WebRichPresence (arRPC)": { + "enabled": false + }, + "BetterFolders": { + "enabled": true, + "sidebar": true, + "sidebarAnim": true, + "closeAllFolders": false, + "closeAllHomeButton": false, + "closeOthers": false, + "forceOpen": false, + "keepIcons": false, + "showFolderIcon": 1 + }, + "BetterGifAltText": { + "enabled": false + }, + "BetterGifPicker": { + "enabled": false + }, + "BetterRoleContext": { + "enabled": false + }, + "BetterRoleDot": { + "enabled": false + }, + "BetterSessions": { + "enabled": false + }, + "BetterSettings": { + "enabled": false + }, + "BetterUploadButton": { + "enabled": false + }, + "BiggerStreamPreview": { + "enabled": true + }, + "BlurNSFW": { + "enabled": false + }, + "CallTimer": { + "enabled": false + }, + "CharacterCounter": { + "enabled": false + }, + "ClearURLs": { + "enabled": true + }, + "ClientTheme": { + "enabled": false + }, + "ColorSighted": { + "enabled": false + }, + "ConsoleJanitor": { + "enabled": false + }, + "ConsoleShortcuts": { + "enabled": false + }, + "CopyEmojiMarkdown": { + "enabled": false + }, + "CopyFileContents": { + "enabled": false + }, + "CopyStickerLinks": { + "enabled": false + }, + "CopyUserURLs": { + "enabled": false + }, + "CrashHandler": { + "enabled": true + }, + "CustomCommands": { + "enabled": false + }, + "CustomIdle": { + "enabled": false + }, + "CustomRPC": { + "enabled": false + }, + "Dearrow": { + "enabled": true, + "hideButton": false, + "replaceElements": 0, + "dearrowByDefault": true + }, + "Decor": { + "enabled": false + }, + "DisableCallIdle": { + "enabled": false + }, + "DontRoundMyTimestamps": { + "enabled": false + }, + "Experiments": { + "enabled": false + }, + "ExpressionCloner": { + "enabled": false + }, + "F8Break": { + "enabled": false + }, + "FakeNitro": { + "enabled": false + }, + "FakeProfileThemes": { + "enabled": false + }, + "FavoriteEmojiFirst": { + "enabled": false + }, + "FixCodeblockGap": { + "enabled": false + }, + "FixImagesQuality": { + "enabled": true, + "originalImagesInChat": false + }, + "FixSpotifyEmbeds": { + "enabled": false + }, + "FixYoutubeEmbeds": { + "enabled": true + }, + "ForceOwnerCrown": { + "enabled": false + }, + "FriendInvites": { + "enabled": false + }, + "FullSearchContext": { + "enabled": false + }, + "FullUserInChatbox": { + "enabled": false + }, + "GameActivityToggle": { + "enabled": true, + "location": "PANEL", + "oldIcon": false + }, + "GifPaste": { + "enabled": false + }, + "GreetStickerPicker": { + "enabled": false + }, + "HideMedia": { + "enabled": false + }, + "iLoveSpam": { + "enabled": false + }, + "IgnoreActivities": { + "enabled": false + }, + "ImageFilename": { + "enabled": false + }, + "ImageLink": { + "enabled": false + }, + "ImageZoom": { + "enabled": false + }, + "ImplicitRelationships": { + "enabled": false + }, + "IrcColors": { + "enabled": false + }, + "KeepCurrentChannel": { + "enabled": false + }, + "LoadingQuotes": { + "enabled": false + }, + "MemberCount": { + "enabled": false + }, + "MentionAvatars": { + "enabled": false + }, + "MessageClickActions": { + "enabled": false + }, + "MessageLatency": { + "enabled": false + }, + "MessageLinkEmbeds": { + "enabled": false + }, + "MessageLogger": { + "enabled": false + }, + "MoreQuickReactions": { + "enabled": false + }, + "MusicRichPresence": { + "enabled": false + }, + "MutualGroupDMs": { + "enabled": false + }, + "NewGuildSettings": { + "enabled": false + }, + "NoBlockedMessages": { + "enabled": false + }, + "NoDevtoolsWarning": { + "enabled": false + }, + "NoF1": { + "enabled": true + }, + "NoMaskedUrlPaste": { + "enabled": false + }, + "NoMiddleClickPaste": { + "enabled": false + }, + "NoMosaic": { + "enabled": false + }, + "NoOnboardingDelay": { + "enabled": false + }, + "NoPendingCount": { + "enabled": false + }, + "NoProfileThemes": { + "enabled": false + }, + "NoReplyMention": { + "enabled": false + }, + "NoServerEmojis": { + "enabled": false + }, + "NoTypingAnimation": { + "enabled": false + }, + "NoUnblockToJump": { + "enabled": false + }, + "NotificationVolume": { + "enabled": false + }, + "OnePingPerDM": { + "enabled": false + }, + "oneko": { + "enabled": false + }, + "OpenInApp": { + "enabled": true, + "spotify": true + }, + "OverrideForumDefaults": { + "enabled": false + }, + "PauseInvitesForever": { + "enabled": false + }, + "PermissionFreeWill": { + "enabled": false + }, + "PermissionsViewer": { + "enabled": false + }, + "petpet": { + "enabled": false + }, + "PictureInPicture": { + "enabled": false + }, + "PinDMs": { + "enabled": false + }, + "PlainFolderIcon": { + "enabled": false + }, + "PlatformIndicators": { + "enabled": false + }, + "PreviewMessage": { + "enabled": false + }, + "QuickMention": { + "enabled": false + }, + "QuickReply": { + "enabled": false + }, + "ReactErrorDecoder": { + "enabled": false + }, + "ReadAllNotificationsButton": { + "enabled": true + }, + "RelationshipNotifier": { + "enabled": false + }, + "ReplaceGoogleSearch": { + "enabled": true + }, + "ReplyTimestamp": { + "enabled": false + }, + "RevealAllSpoilers": { + "enabled": false + }, + "ReverseImageSearch": { + "enabled": false + }, + "ReviewDB": { + "enabled": false + }, + "RoleColorEverywhere": { + "enabled": true, + "chatMentions": true, + "memberList": true, + "voiceUsers": true, + "reactorsList": true, + "pollResults": true, + "colorChatMessages": false + }, + "SecretRingToneEnabler": { + "enabled": false + }, + "Summaries": { + "enabled": false + }, + "SendTimestamps": { + "enabled": false + }, + "ServerInfo": { + "enabled": false + }, + "ServerListIndicators": { + "enabled": false + }, + "ShikiCodeblocks": { + "enabled": false + }, + "ShowAllMessageButtons": { + "enabled": false + }, + "ShowConnections": { + "enabled": false + }, + "ShowHiddenChannels": { + "enabled": false + }, + "ShowHiddenThings": { + "enabled": false + }, + "ShowMeYourName": { + "enabled": true, + "mode": "user-nick", + "friendNicknames": "dms", + "displayNames": false, + "inReplies": false + }, + "ShowTimeoutDuration": { + "enabled": false + }, + "SilentMessageToggle": { + "enabled": false + }, + "SilentTyping": { + "enabled": false + }, + "SortFriendRequests": { + "enabled": false + }, + "SpotifyControls": { + "enabled": false + }, + "SpotifyCrack": { + "enabled": false + }, + "SpotifyShareCommands": { + "enabled": false + }, + "StartupTimings": { + "enabled": false + }, + "StickerPaste": { + "enabled": false + }, + "StreamerModeOnStream": { + "enabled": false + }, + "SuperReactionTweaks": { + "enabled": false + }, + "TenorGifSearch": { + "enabled": false + }, + "TextReplace": { + "enabled": false + }, + "ThemeAttributes": { + "enabled": false + }, + "Translate": { + "enabled": false + }, + "TypingIndicator": { + "enabled": false + }, + "TypingTweaks": { + "enabled": false + }, + "Unindent": { + "enabled": false + }, + "UnlockedAvatarZoom": { + "enabled": false + }, + "UnsuppressEmbeds": { + "enabled": false + }, + "UserMessagesPronouns": { + "enabled": false + }, + "UserVoiceShow": { + "enabled": false + }, + "USRBG": { + "enabled": false + }, + "ValidReply": { + "enabled": false + }, + "ValidUser": { + "enabled": false + }, + "VoiceChatDoubleClick": { + "enabled": false + }, + "VcNarrator": { + "enabled": false + }, + "VencordToolbox": { + "enabled": false + }, + "ViewIcons": { + "enabled": false + }, + "ViewRaw": { + "enabled": false + }, + "VoiceDownload": { + "enabled": false + }, + "VoiceMessages": { + "enabled": false + }, + "VolumeBooster": { + "enabled": false + }, + "WebKeybinds": { + "enabled": true + }, + "WebScreenShareFixes": { + "enabled": true + }, + "WhoReacted": { + "enabled": false + }, + "XSOverlay": { + "enabled": false + }, + "YoutubeAdblock": { + "enabled": false + }, + "BadgeAPI": { + "enabled": true + }, + "NoTrack": { + "enabled": true, + "disableAnalytics": true + }, + "Settings": { + "enabled": true, + "settingsLocation": "aboveNitro", + "includeVencordInfoWhenCopying": true + }, + "ConcatenatedComponentExtractor": { + "enabled": true + }, + "ContextMenuAPI": { + "enabled": true + }, + "DisableDeepLinks": { + "enabled": true + }, + "NoticesAPI": { + "enabled": true + }, + "SupportHelper": { + "enabled": true + }, + "WebContextMenus": { + "enabled": true + } + }, + "uiElements": { + "chatBarButtons": {}, + "messagePopoverButtons": {} + }, + "notifications": { + "timeout": 5000, + "position": "bottom-right", + "useNative": "not-focused", + "logLimit": 50 + }, + "cloud": { + "authenticated": false, + "url": "https://api.vencord.dev/", + "settingsSync": false, + "settingsSyncVersion": 1785959318526 + } +} \ No newline at end of file diff --git a/.config/vesktop/themes/Serpensortia.theme.css b/.config/vesktop/themes/Serpensortia.theme.css new file mode 100644 index 0000000..022574e --- /dev/null +++ b/.config/vesktop/themes/Serpensortia.theme.css @@ -0,0 +1,636 @@ +/** + * @name Serpensortia + * @author Sithego + * @version 0.1 + * @description Self-contained BetterDiscord theme generated by Sithego + */ + +:root { + --sithego-bg: #080c08; + --sithego-surface: #131d13; + --sithego-surface-alt: #424a42; + --sithego-text: #c0c0c0; + --sithego-muted: #424a42; + --sithego-border: #0b110b; + --sithego-accent: #1c7a44; + --sithego-warn: #dc143c; + + --sithego-shell-bg: transparent; + --sithego-panel-bg: rgba(19, 29, 19, 0.16); + --sithego-panel-bg-strong: rgba(66, 74, 66, 0.22); + --sithego-guilds-bg: rgba(8, 12, 8, 0.10); + --sithego-hover: rgba(66, 74, 66, 0.24); + --sithego-selected: rgba(28, 122, 68, 0.18); + --sithego-selected-strong: rgba(28, 122, 68, 0.28); + --sithego-border-alpha: rgba(11, 17, 11, 0.30); + --sithego-input-bg: rgba(66, 74, 66, 0.20); + --sithego-danger-bg: rgba(220, 20, 60, 0.20); + --sithego-unread-bar: rgba(192, 192, 192, 0.92); + --sithego-mention-badge: rgba(220, 20, 60, 0.92); + --sithego-mention-bg: rgba(28, 122, 68, 0.18); + + --sithego-radius-sm: 4px; + --sithego-radius: 8px; + --sithego-radius-lg: 16px; + + --background-primary: transparent; + --background-secondary: transparent; + --background-secondary-alt: transparent; + --background-tertiary: transparent; + --background-floating: var(--sithego-panel-bg); + --background-base-lowest: transparent; + --background-base-low: transparent; + --background-base-lower: transparent; + --background-base-high: transparent; + --background-base-higher: transparent; + --background-modifier-hover: var(--sithego-hover); + --background-modifier-active: var(--sithego-selected); + --background-modifier-selected: var(--sithego-selected-strong); + --background-modifier-accent: var(--sithego-hover); + + --text-normal: var(--sithego-text); + --text-muted: var(--sithego-muted); + --text-link: var(--sithego-accent); + --header-primary: var(--sithego-text); + --header-secondary: var(--sithego-muted); + --interactive-normal: var(--sithego-text); + --interactive-hover: var(--sithego-accent); + --interactive-active: var(--sithego-text); + --interactive-muted: var(--sithego-muted); + + --channels-default: var(--sithego-muted); + --channeltextarea-background: var(--sithego-input-bg); + --scrollbar-thin-thumb: var(--sithego-border-alpha); + --scrollbar-thin-track: transparent; + + --button-filled-brand-background: var(--sithego-selected-strong); + --button-filled-brand-background-hover: rgba(28, 122, 68, 0.36); + --button-filled-brand-background-active: rgba(28, 122, 68, 0.42); + + --status-danger: var(--sithego-warn); + --info-danger-foreground: var(--sithego-warn); + --border-subtle: var(--sithego-border-alpha); + --border-normal: var(--sithego-border-alpha); +} + +/* fully transparent app shell */ +html, +body, +#app-mount, +[class*="app_"], +[class*="bg_"], +[class*="layer_"], +[class*="layers_"], +[class*="base_"], +[class*="container_"], +[class*="content_"], +[class*="chat_"], +[class*="sidebar_"], +[class*="membersWrap_"], +[class*="members_"], +[class*="panels_"], +[class*="standardSidebarView_"], +[class*="contentRegion_"], +[class*="sidebarRegion_"], +[class*="peopleColumn_"], +[class*="nowPlayingColumn_"], +[class*="applicationStore_"], +[class*="pageWrapper_"], +main, +section { + background: transparent !important; + box-shadow: none !important; + color: var(--sithego-text) !important; +} + +/* guild bar */ +[class*="guilds_"] { + background: var(--sithego-guilds-bg) !important; + border-right: 1px solid var(--sithego-border-alpha) !important; + backdrop-filter: none !important; + -webkit-backdrop-filter: none !important; +} + +/* keep guild/server icon containers crisp */ +[data-list-item-id^="guildsnav_"], +[data-list-item-id^="guildsnav_"] *, +[class*="guilds_"] [class*="listItem_"], +[class*="guilds_"] [class*="blobContainer_"], +[class*="guilds_"] [class*="wrapper_"], +[class*="guilds_"] svg, +[class*="guilds_"] img, +[class*="guilds_"] foreignObject { + backdrop-filter: none !important; + -webkit-backdrop-filter: none !important; + filter: none !important; +} + +/* glass panels */ +[class*="sidebar_"] nav, +[class*="chatContent_"], +[class*="members_"], +[class*="panels_"], +[class*="container_"][class*="themed_"], +[class*="header_"], +[class*="title_"], +[class*="searchBar_"], +[class*="menu_"], +[class*="root_"], +[class*="modal_"], +[class*="autocomplete_"], +[class*="messagesPopoutWrap_"], +[class*="contentWrapper_"], +[class*="drawerSizingWrapper_"], +[class*="focusLock_"], +[class*="card_"], +[class*="bar_"], +[class*="footer_"], +form { + background: var(--sithego-panel-bg) !important; + border: 1px solid var(--sithego-border-alpha) !important; + border-radius: var(--sithego-radius) !important; + color: var(--sithego-text) !important; + box-shadow: none !important; + backdrop-filter: blur(12px) !important; + -webkit-backdrop-filter: blur(12px) !important; +} + +/* inputs */ +input, +textarea, +[class*="input_"], +[class*="channelTextArea_"], +[class*="editor_"] { + background: var(--sithego-input-bg) !important; + color: var(--sithego-text) !important; + border: 1px solid var(--sithego-border-alpha) !important; + border-radius: var(--sithego-radius-sm) !important; + box-shadow: none !important; + backdrop-filter: blur(10px) !important; + -webkit-backdrop-filter: blur(10px) !important; +} + +/* buttons */ +button, +[class*="button_"], +[role="button"], +[class*="item_"], +[class*="tabBarItem_"] { + background: transparent !important; + border: 1px solid transparent !important; + border-radius: var(--sithego-radius-sm) !important; + box-shadow: none !important; +} + +button:hover, +[class*="button_"]:hover, +[role="button"]:hover, +[class*="item_"]:hover, +[class*="interactive_"]:hover, +[class*="clickable_"]:hover { + background: var(--sithego-hover) !important; + color: var(--sithego-accent) !important; + border-color: var(--sithego-border-alpha) !important; +} + +[class*="selected_"], +[class*="modeSelected_"], +[class*="item_"][aria-selected="true"], +[class*="clickable_"][class*="selected_"], +[aria-checked="true"] { + background: var(--sithego-selected) !important; + color: var(--sithego-text) !important; + border-color: rgba(28, 122, 68, 0.45) !important; +} + +/* regular text */ +[class*="markup_"], +[class*="messageContent_"], +[class*="topic_"], +[class*="title_"], +[class*="defaultColor"], +[class*="text-md"], +[class*="text-sm"], +[class*="text-xs"] { + color: var(--sithego-text) !important; +} + +/* muted secondary text */ +[class*="subtext_"], +[class*="description_"], +[class*="hint_"], +[class*="membersGroup_"], +[class*="channelName_"], +[class*="subtitle_"] { + color: var(--sithego-muted) !important; +} + +a, +[class*="anchor_"] { + color: var(--sithego-accent) !important; +} + +/* generic icons */ +[class*="icon_"] { + color: var(--sithego-muted) !important; +} + +button:hover [class*="icon_"], +[class*="button_"]:hover [class*="icon_"], +[class*="item_"]:hover [class*="icon_"], +[class*="selected_"] [class*="icon_"] { + color: var(--sithego-accent) !important; +} + +/* keep guild icons visible */ +[class*="guilds_"] svg, +[data-list-item-id^="guildsnav_"] svg, +[class*="blobContainer_"] svg, +[class*="listItem_"] svg { + color: inherit !important; + fill: currentColor !important; +} + +/* keep guild list scrollable */ +[class*="guilds_"] [class*="scroller_"] { + overflow-y: auto !important; + overflow-x: visible !important; +} + +/* let native guild indicator render outside bounds */ +[class*="guilds_"] [class*="listItem_"], +[class*="guilds_"] [class*="blobContainer_"], +[class*="guilds_"] [class*="wrapper_"], +[class*="guilds_"] [class*="overlay_"], +[data-list-item-id^="guildsnav_"], +[data-list-item-id^="guildsnav_"] > div { + overflow: visible !important; +} + +/* position guild items so the native indicator can anchor correctly */ +[class*="listItem_"], +[class*="blobContainer_"] { + position: relative !important; +} + +/* native guild unread/selected indicator wrapper */ +[class*="guilds_"] [class*="overlay_"], +[class*="guilds_"] [class*="wrapper_"][aria-hidden="true"] { + overflow: visible !important; + opacity: 1 !important; + visibility: visible !important; + z-index: 40 !important; +} + +/* native indicator element */ +[class*="guilds_"] [class*="overlay_"] [class*="item_"], +[class*="guilds_"] [class*="wrapper_"][aria-hidden="true"] [class*="item_"] { + display: block !important; + opacity: 1 !important; + visibility: visible !important; + background: var(--sithego-accent) !important; + border-radius: 999px !important; + box-shadow: none !important; +} + +/* preserve the small unread pill */ +[class*="guilds_"] [class*="overlay_"] [class*="item_"][style*="height: 8px"], +[class*="guilds_"] [class*="wrapper_"][aria-hidden="true"] [class*="item_"][style*="height: 8px"] { + width: 10px !important; + height: 10px !important; + min-height: 10px !important; +} + +/* preserve the larger active/unread variant */ +[class*="guilds_"] [class*="overlay_"] [class*="item_"][style*="height: 40px"], +[class*="guilds_"] [class*="overlay_"] [class*="item_"][style*="height: 32px"], +[class*="guilds_"] [class*="overlay_"] [class*="item_"][style*="height: 24px"], +[class*="guilds_"] [class*="wrapper_"][aria-hidden="true"] [class*="item_"][style*="height: 40px"], +[class*="guilds_"] [class*="wrapper_"][aria-hidden="true"] [class*="item_"][style*="height: 32px"], +[class*="guilds_"] [class*="wrapper_"][aria-hidden="true"] [class*="item_"][style*="height: 24px"] { + width: 4px !important; + height: 20px !important; + min-height: 20px !important; +} + +/* don't let selected guild styling hide the native rail */ +[class*="guilds_"] [aria-selected="true"] { + box-shadow: inset 0 0 0 1px rgba(28, 122, 68, 0.35) !important; +} + +/* keep guild badges visible */ +[class*="guilds_"] [class*="numberBadge_"], +[class*="guilds_"] [class*="iconBadge_"], +[class*="guilds_"] [class*="lowerBadge_"], +[class*="guilds_"] [class*="upperBadge_"] { + background: var(--sithego-accent) !important; + color: #080c08 !important; + border: 1px solid rgba(220, 20, 60, 0.45) !important; + border-radius: 999px !important; + box-shadow: none !important; +} + +/* CHANNEL INDICATORS */ +[class*="modeUnreadImportant_"], +[class*="modeUnread_"], +[class*="channel_"][class*="unread_"] { + position: relative !important; +} + +[class*="modeUnreadImportant_"] [class*="name_"], +[class*="modeUnread_"] [class*="name_"], +[class*="channel_"][class*="unread_"] [class*="name_"] { + color: var(--sithego-accent) !important; + font-weight: 600 !important; +} + +[class*="modeUnreadImportant_"]::before, +[class*="modeUnread_"]::before, +[class*="channel_"][class*="unread_"]::before { + content: ""; + position: absolute; + left: 0; + top: 6px; + bottom: 6px; + width: 3px; + border-radius: 999px; + background: var(--sithego-accent) !important; + opacity: 1 !important; +} + +[class*="unread_"][class*="wrapper_"], +[class*="wrapper_"][aria-label] [class*="unread_"], +[class*="content_"] [class*="unread_"] { + background: var(--sithego-accent) !important; + color: var(--sithego-accent) !important; + opacity: 1 !important; + border-radius: 999px !important; +} + +/* channel mention badges */ +[class*="children_"] > [class*="numberBadge_"], +[class*="link_"] [class*="numberBadge_"], +[class*="containerDefault_"] [class*="numberBadge_"] { + background: var(--sithego-accent) !important; + color: #080c08 !important; + border: 1px solid rgba(220, 20, 60, 0.45) !important; + border-radius: 999px !important; + box-shadow: none !important; +} + +/* mention-highlighted channels */ +[class*="modeUnreadImportant_"][class*="mentions_"], +[class*="modeSelected_"][class*="mentions_"] { + background: rgba(220, 20, 60, 0.10) !important; + border-radius: var(--sithego-radius-sm) !important; +} + +/* mention badges */ +[class*="numberBadge_"], +[class*="iconBadge_"], +[class*="mentionsBadge_"], +[class*="badge_"] { + border-radius: 999px !important; +} + +[class*="numberBadge_"]:not([style*="background-color: rgb(36, 128, 70)"]), +[class*="mentionsBadge_"], +[class*="stack_"] > [class*="badge_"] { + background: var(--sithego-mention-badge) !important; + color: #080c08 !important; + border: 1px solid rgba(220, 20, 60, 0.45) !important; + box-shadow: none !important; +} + +/* mentioned messages */ +[class*="mentioned_"] { + background: var(--sithego-mention-bg) !important; + border-left: 2px solid var(--sithego-accent) !important; +} + +[class*="mentioned_"]::before { + background: var(--sithego-accent) !important; +} + +/* unread / jump bars */ +[class*="newMessagesBar_"], +[class*="jumpToPresentBar_"] { + background: var(--sithego-selected-strong) !important; + color: var(--sithego-text) !important; + border: 1px solid rgba(28, 122, 68, 0.40) !important; + border-radius: var(--sithego-radius-sm) !important; +} +/* keep channel scroller unread bars readable */ +[class*="unreadTop_"], +[class*="unreadBottom_"] { + background: transparent !important; + border: 0 !important; + border-radius: 0 !important; + padding: 0 !important; + min-height: 0 !important; + height: auto !important; + overflow: visible !important; + display: none !important; +} + +/* style only the actual unread bar */ +[class*="unreadTop_"] > [class*="unreadBar_"], +[class*="unreadBottom_"] > [class*="unreadBar_"], +[class*="unreadTop_"] > [class*="bar_"][class*="unread_"], +[class*="unreadBottom_"] > [class*="bar_"][class*="unread_"] { + display: flex !important; + align-items: center !important; + justify-content: center !important; + width: calc(100% - 12px) !important; + min-width: 0 !important; + height: 18px !important; + min-height: 18px !important; + margin: 0 6px !important; + padding: 0 8px !important; + background: var(--sithego-selected) !important; + color: var(--sithego-text) !important; + border: 1px solid rgba(28, 122, 68, 0.35) !important; + border-radius: 999px !important; + box-shadow: none !important; + opacity: 1 !important; +} + +/* unread bar containers should stay invisible */ +[class*="unreadTop_"], +[class*="unreadBottom_"] { + background: transparent !important; + border: 0 !important; + border-radius: 0 !important; + padding: 0 !important; + margin: 0 !important; + min-height: 0 !important; + height: auto !important; + overflow: visible !important; +} + +/* style only the actual unread bar */ +[class*="unreadTop_"] > [class*="unreadBar_"], +[class*="unreadBottom_"] > [class*="unreadBar_"], +[class*="unreadTop_"] > [class*="bar_"][class*="unread_"], +[class*="unreadBottom_"] > [class*="bar_"][class*="unread_"] { + display: inline-flex !important; + flex-direction: row !important; + align-items: center !important; + justify-content: center !important; + position: relative !important; + inset: auto !important; + width: calc(100% - 12px) !important; + max-width: calc(100% - 12px) !important; + min-width: 0 !important; + height: 18px !important; + min-height: 18px !important; + margin: 0 6px !important; + padding: 0 8px !important; + background: var(--sithego-selected) !important; + color: var(--sithego-text) !important; + border: 1px solid rgba(28, 122, 68, 0.35) !important; + border-radius: 999px !important; + box-shadow: none !important; + opacity: 1 !important; + transform: none !important; +} + +/* keep the unread bar text centered inside the pill */ +[class*="unreadTop_"] > [class*="unreadBar_"] [class*="text_"], +[class*="unreadBottom_"] > [class*="unreadBar_"] [class*="text_"], +[class*="unreadTop_"] > [class*="bar_"][class*="unread_"] [class*="text_"], +[class*="unreadBottom_"] > [class*="bar_"][class*="unread_"] [class*="text_"] { + display: inline !important; + position: static !important; + inset: auto !important; + margin: 0 !important; + padding: 0 !important; + width: auto !important; + height: auto !important; + line-height: 1 !important; + font-size: 10px !important; + font-weight: 700 !important; + letter-spacing: 0.04em !important; + text-align: center !important; + color: var(--sithego-text) !important; + white-space: nowrap !important; + transform: none !important; + translate: none !important; + top: auto !important; + bottom: auto !important; + left: auto !important; + right: auto !important; + opacity: 1 !important; + visibility: visible !important; +} + +/* neutralize pseudo elements that can offset label placement */ +[class*="unreadTop_"] > [class*="unreadBar_"]::before, +[class*="unreadBottom_"] > [class*="unreadBar_"]::before, +[class*="unreadTop_"] > [class*="unreadBar_"]::after, +[class*="unreadBottom_"] > [class*="unreadBar_"]::after, +[class*="unreadTop_"] > [class*="bar_"][class*="unread_"]::before, +[class*="unreadBottom_"] > [class*="bar_"][class*="unread_"]::before, +[class*="unreadTop_"] > [class*="bar_"][class*="unread_"]::after, +[class*="unreadBottom_"] > [class*="bar_"][class*="unread_"]::after { + transform: none !important; +} + +/* don't turn structural unread wrappers into pills */ +[class*="wrapper_"][aria-label] [class*="unread_"]:not([class*="unreadBar_"]):not([class*="unreadTop_"]):not([class*="unreadBottom_"]):not([class*="bar_"]), +[class*="content_"] [class*="unread_"]:not([class*="unreadBar_"]):not([class*="unreadTop_"]):not([class*="unreadBottom_"]):not([class*="bar_"]) { + background: var(--sithego-accent) !important; + color: var(--sithego-accent) !important; + opacity: 1 !important; + border-radius: 999px !important; +} + +/* don't turn structural unread wrappers into green pills */ +[class*="wrapper_"][aria-label] [class*="unread_"]:not([class*="unreadBar_"]):not([class*="unreadTop_"]):not([class*="unreadBottom_"]):not([class*="bar_"]), +[class*="content_"] [class*="unread_"]:not([class*="unreadBar_"]):not([class*="unreadTop_"]):not([class*="unreadBottom_"]):not([class*="bar_"]) { + background: var(--sithego-accent) !important; + color: var(--sithego-accent) !important; + opacity: 1 !important; + border-radius: 999px !important; +} +/* mention pills */ +[class*="mention"] { + background: var(--sithego-mention-bg) !important; + color: var(--sithego-accent) !important; + border: 1px solid rgba(220, 20, 60, 0.35) !important; +} + +/* separators */ +[class*="divider_"], +hr { + border-color: var(--sithego-border-alpha) !important; +} + +/* danger */ +[class*="error_"], +[class*="danger_"], +[class*="colorDanger"] { + color: var(--sithego-warn) !important; +} + +[class*="lookFilled_"][class*="colorBrand_"] { + background: var(--button-filled-brand-background) !important; + color: var(--sithego-text) !important; + border-color: rgba(28, 122, 68, 0.45) !important; +} + +[class*="lookFilled_"][class*="colorRed_"] { + background: var(--sithego-danger-bg) !important; + color: var(--sithego-text) !important; + border-color: rgba(220, 20, 60, 0.45) !important; +} + +/* attached autocomplete / emote popup */ +[class*="autocompleteAttached_"], +[class*="autocompleteAttached_"] [class*="container_"], +[class*="autocompleteAttached_"] [class*="content_"], +[class*="autocompleteAttached_"] [class*="scroller_"], +[class*="autocompleteAttached_"] [class*="header_"] { + background: var(--sithego-surface) !important; + border-color: var(--sithego-border-alpha) !important; + color: var(--sithego-text) !important; +} + +[class*="clickable_"][role="option"] > [class*="base_"]:hover, +[class*="clickable_"][role="option"][aria-selected="true"] > [class*="base_"] { + background: var(--sithego-accent) !important; +} + +/* scrollbars */ +::-webkit-scrollbar-thumb { + background: var(--sithego-border-alpha) !important; + border-radius: var(--sithego-radius-sm) !important; +} + +::-webkit-scrollbar-track { + background: transparent !important; +} + +body { + --custom-guild-sidebar-width: 500px !important; + --user-area-width: 450px !important; + --custom-member-list-width: 550px !important; +} + +[class*="topBar_"] { + position: fixed !important; + top: -600px !important; + left: 50% !important; + transform: translateX(-50%) !important; + z-index: 1000 !important; + width: 800px !important; + + color: var(--sithego-accent) !important; + + padding: 12px 16px !important; + background: var(--sithego-bg) !important; + border: 1px solid var(--sithego-border-alpha) !important; + border-radius: var(--sithego-radius) !important; + backdrop-filter: blur(12px) !important; + -webkit-backdrop-filter: blur(12px) !important; +} \ No newline at end of file