1
0
mirror of https://github.com/tiyn/dotfiles.git synced 2026-05-01 18:11:39 +02:00

Compare commits

..

52 Commits

Author SHA1 Message Date
6714ddc776 Nvim: Updated dictionaries 2026-04-30 20:09:13 +02:00
edf34f3ca5 Nvim: Updated dictionaries 2026-04-29 07:40:16 +02:00
637edf2e96 Nvim: Agentic switched to Codex 2026-04-28 12:13:08 +02:00
a6c219414f Whisper: moved network 2026-04-28 03:35:18 +02:00
aa7161c70a Nvim: Added agentic.nvim 2026-04-28 00:54:05 +02:00
4ad2dd00c0 Merge branch 'master' of github:tiyn/dotfiles 2026-04-26 06:36:03 +02:00
30196f3653 Nvim: Knap now uses shell-escape which works better for some compiled data (for example svg) 2026-04-26 06:35:16 +02:00
6cbc979c4d Nvim: Updated dictionaries 2026-04-26 06:31:56 +02:00
5e54bed174 Nvim: R now instantly and automatically displays plots. 2026-04-25 10:47:49 +02:00
987a39c4b8 Nvim: Updated dictionaries 2026-04-21 01:41:18 +02:00
fc6cedb305 Nvim: Updated dictionaries 2026-04-19 05:54:19 +02:00
7d2523ef2c Nvim: Updated dictionaries 2026-04-18 03:14:59 +02:00
f05a3c5377 Nvim: Fixed K-key behaviour for focussing documentation 2026-04-16 09:13:39 +02:00
0bd4ea6149 Resolved Merge conflict 2026-04-16 07:58:04 +02:00
c859c4cdd9 Merge branch 'master' of github:tiyn/dotfiles 2026-04-16 07:57:16 +02:00
b83432f67e Vifm: Added shortcut for switching panes 2026-04-16 07:57:05 +02:00
17ce699530 Nvim: Updated dictionaries 2026-04-16 07:56:28 +02:00
27f5a735b7 Merge branch 'master' of github:tiyn/dotfiles 2026-04-15 06:40:04 +02:00
279babf016 Nvim: Added plugin for PlatformIO integration 2026-04-15 06:35:14 +02:00
019011572e Nvim: Updated dictionaries 2026-04-14 03:57:32 +02:00
d4e8b5de3e Nvim: Updated dictionaries 2026-04-13 07:45:04 +02:00
156bc111ef Vifm: Fixed bug for pane navigation in view mode 2026-04-12 08:42:41 +02:00
8336c9e76f Nvim: Updated plugins 2026-04-12 08:29:34 +02:00
169a7fcc57 Vifm: Updated image handling
- SVGs are now previewed with white backgrounds
- Displaying are now handled by imv instead of inkscape and therefore have white backgrounds
2026-04-12 08:21:27 +02:00
5282835ae9 Nvim: Colorcolumn is now set more intuitively 2026-04-11 10:04:50 +02:00
63aa8f2db5 Nvim: Moved autocmds into plugins 2026-04-11 09:50:11 +02:00
0b3f41af3a Nvim: Fixed bug with wilder/mason 2026-04-11 09:41:58 +02:00
ec1c20f003 Nvim: Updated plugins 2026-04-11 09:18:08 +02:00
a8e421ec41 Nvim: Updated dictionaries 2026-04-11 08:34:05 +02:00
5802436dc2 Nvim: Updated dictionaries 2026-04-10 04:29:34 +02:00
7d84ac52ec LightDM: Use symbolic links for XSessions 2026-04-09 04:02:52 +02:00
26fc686e56 Nvim: Updated dictionaries 2026-04-09 03:55:06 +02:00
ecb7adb796 Nvim: Updated dictionaries 2026-04-08 06:47:44 +02:00
c49867ebcf Nvim: Updated dictionaries 2026-04-07 00:28:02 +02:00
29c82c6a5a Nvim: Updated dictionaries 2026-04-07 00:27:23 +02:00
9815d86c78 Nvim: Updated dictionaries 2026-04-07 00:26:40 +02:00
352b695c08 Nvim: Fixed bug in live-tex-rendering 2026-04-06 05:31:16 +02:00
a87272d079 Nvim: Updated file-renamer.nvim dependencies 2026-04-06 05:30:55 +02:00
66e81c5275 Nvim: Updated dictionaries 2026-04-04 08:27:46 +02:00
4f9cdf2ed4 MimeApps: Added FreeTube 2026-04-03 03:47:21 +02:00
80d607ef2f Nvim: Updated dictionaries 2026-04-03 03:47:00 +02:00
1e1b53bfee Merge branch 'master' of github:tiyn/dotfiles 2026-03-31 23:27:42 +02:00
dfdefc005b Wayland: Moved autostart to local file 2026-03-31 23:29:40 +02:00
d6c0cda68a Xorg: Autostart EasyEffects as window 2026-03-31 23:27:37 +02:00
804a0d1d2a Pipewire: fixed naming scheme 2026-03-31 08:46:20 +02:00
edd4ef7ebb Pipewire: fixed naming scheme 2026-03-31 08:22:42 +02:00
781cb922c5 Pipewire: Added more virtual devices including virtual microphones 2026-03-31 08:18:49 +02:00
429f14f8b3 Pipewire: Added more default virtual devices 2026-03-31 07:36:44 +02:00
f1561f8847 Added Wireplumber configs 2026-03-31 04:00:46 +02:00
481da28608 Added Pipewire configs 2026-03-31 04:00:25 +02:00
f9c55afcfd Nvim: Update dictionaries 2026-03-31 02:34:24 +02:00
5da287cd34 Alias: Set alias for whisper-cli 2026-03-30 04:29:56 +02:00
47 changed files with 2332 additions and 233 deletions

11
.Rprofile Normal file
View File

@@ -0,0 +1,11 @@
if (!interactive()) {
options(device = function(...) pdf("Rplot.pdf"))
.Last <- function() {
if (dev.cur() > 1) {
dev.off()
system("xdg-open Rplot.pdf", wait = FALSE)
Sys.sleep(2)
}
}
}

View File

@@ -138,6 +138,9 @@ alias renamer="nvim +Renamer"
# weather
alias weather="curl wttr.in"
# whisper.cpp
alias whisper="whisper-cli -m ~/.local/share/whisper-cli/ggml-large-v3-turbo-german-q5_0.bin"
# wget
alias wget="wget --hsts-file=$XDG_CACHE_HOME/wget-hsts"
alias wget2c="aria2c"

View File

@@ -1,3 +1,7 @@
[options]
background = #FFFFFF
[binds]
<plus> = zoom 1

View File

@@ -28,6 +28,7 @@ x-scheme-handler/betterdiscord=discord.desktop
x-scheme-handler/discord=vesktop.desktop
x-scheme-handler/sgnl=signal.desktop
x-scheme-handler/signalcaptcha=signal.desktop
x-scheme-handler/freetube=freetube.desktop
[Added Associations]
application/vnd.openxmlformats-officedocument.wordprocessingml.document=libreoffice-writer.desktop;

View File

@@ -1,8 +1,10 @@
{
"FTerm.nvim": { "branch": "master", "commit": "d1320892cc2ebab472935242d9d992a2c9570180" },
"action-hints.nvim": { "branch": "main", "commit": "ac72c23c2e901084e0c08a743942d8d7b8c560de" },
"agentic.nvim": { "branch": "main", "commit": "3e6175c1141cc3cb5cc08e98bff01b06a0a67467" },
"auto-session": { "branch": "main", "commit": "62437532b38495551410b3f377bcf4aaac574ebe" },
"barbecue": { "branch": "main", "commit": "cd7e7da622d68136e13721865b4d919efd6325ed" },
"blink.download": { "branch": "main", "commit": "b68335357e9fcc2b20445acfcee48034376d64b5" },
"blink.download": { "branch": "main", "commit": "dda2666685a5ac3598166577d2e34f1fff6b1637" },
"blink.pairs": { "branch": "main", "commit": "4e43012356d33a26f69eae475f746fbe9f325f44" },
"cmp-buffer": { "branch": "main", "commit": "b74fab3656eea9de20a9b8116afa3cfc4ec09657" },
"cmp-dictionary": { "branch": "main", "commit": "fecc3ef2435c2be35818f8fcac4a6c5655f3a8f0" },
@@ -11,65 +13,66 @@
"cmp-under-comparator": { "branch": "master", "commit": "6857f10272c3cfe930cece2afa2406e1385bfef8" },
"cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" },
"comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" },
"conform.nvim": { "branch": "master", "commit": "086a40dc7ed8242c03be9f47fbcee68699cc2395" },
"conform.nvim": { "branch": "master", "commit": "dca1a190aa85f9065979ef35802fb77131911106" },
"cpsm": { "branch": "master", "commit": "c32a9b7dc9d5b516505bc8ab58ceb15f64735830" },
"csvview.nvim": { "branch": "main", "commit": "7022e18a0fbae9aecf99a3ba02b2a541edc2b8a1" },
"dial.nvim": { "branch": "master", "commit": "f2634758455cfa52a8acea6f142dcd6271a1bf57" },
"diffview.nvim": { "branch": "main", "commit": "4516612fe98ff56ae0415a259ff6361a89419b0a" },
"edgy.nvim": { "branch": "main", "commit": "8bfd2808994a988c975694122f68624b8a219f5f" },
"file-renamer.nvim": { "branch": "master", "commit": "09eb64474be371ac884b424b9e15cc31406c3b72" },
"file-renamer.nvim": { "branch": "master", "commit": "da78d496ffb3dd55a4c70b4a9c28686630a57d3a" },
"fterm.nvim": { "branch": "master", "commit": "d1320892cc2ebab472935242d9d992a2c9570180" },
"fzy-lua-native": { "branch": "master", "commit": "9d720745d5c2fb563c0d86c17d77612a3519c506" },
"git-blame.nvim": { "branch": "main", "commit": "5c536e2d4134d064aa3f41575280bc8a2a0e03d7" },
"gitsigns.nvim": { "branch": "main", "commit": "0a80125bace82d82847d40bc2c38a22d62c6dc2d" },
"git-blame.nvim": { "branch": "master", "commit": "2883a7460f611c2705b23f12d58d398d5ce6ec00" },
"gitsigns.nvim": { "branch": "main", "commit": "6d808f99bd63303646794406e270bd553ad7792e" },
"goto-preview": { "branch": "main", "commit": "d2d6923c9b9e0e43f0b9b566f261a8b1ae016540" },
"image.nvim": { "branch": "master", "commit": "da2be65c153ba15a14a342b05591652a6df70d58" },
"indent-blankline.nvim": { "branch": "master", "commit": "d28a3f70721c79e3c5f6693057ae929f3d9c0a03" },
"jupytext.nvim": { "branch": "main", "commit": "c8baf3ad344c59b3abd461ecc17fc16ec44d0f7b" },
"knap": { "branch": "main", "commit": "7db44d0bb760120142cc1e8f43e44976de59c2f6" },
"lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" },
"leap.nvim": { "branch": "main", "commit": "5dd5a60c58d4423e8cfbf3ca548235d82dec85a2" },
"leap.nvim": { "branch": "main", "commit": "e7ca7b92f996bcbc34beee8b244ea5ef6692b478" },
"logger.nvim": { "branch": "main", "commit": "63dd10c9b9a159fd6cfe08435d9606384ff103c5" },
"lsp_signature.nvim": { "branch": "master", "commit": "af7e4074d85d785cf6614352ba9ad3b28a1f8a56" },
"lsp_signature.nvim": { "branch": "master", "commit": "a65b38f260cc3470a05b4afb84c8d868617d476d" },
"lspkind-nvim": { "branch": "master", "commit": "c7274c48137396526b59d86232eabcdc7fed8a32" },
"lualine.nvim": { "branch": "master", "commit": "47f91c416daef12db467145e16bed5bbfe00add8" },
"luasnip": { "branch": "master", "commit": "5a1e39223db9a0498024a77b8441169d260c8c25" },
"mason-lspconfig.nvim": { "branch": "main", "commit": "a979821a975897b88493843301950c456a725982" },
"lualine.nvim": { "branch": "master", "commit": "a905eeebc4e63fdc48b5135d3bf8aea5618fb21c" },
"luasnip": { "branch": "master", "commit": "642b0c595e11608b4c18219e93b88d7637af27bc" },
"mason-lspconfig.nvim": { "branch": "main", "commit": "0c2823e0418f3d9230ff8b201c976e84de1cb401" },
"mason-null-ls.nvim": { "branch": "main", "commit": "8e7806acaa87fae64f0bfde25bb4b87c18bd19b4" },
"mason.nvim": { "branch": "main", "commit": "44d1e90e1f66e077268191e3ee9d2ac97cc18e65" },
"mason.nvim": { "branch": "main", "commit": "cb8445f8ce85d957416c106b780efd51c6298f89" },
"modes.nvim": { "branch": "main", "commit": "2badf8771dbb2d1e1066fd6a5dddaad2fc836e72" },
"molten-nvim": { "branch": "main", "commit": "a286aa914d9a154bc359131aab788b5a077a5a99" },
"neogen": { "branch": "main", "commit": "23e7e9f883d01289ebd90e98025acc860ea26366" },
"none-ls.nvim": { "branch": "main", "commit": "c9317c2a8629d4e39e7cf47be74cb67f3ab37cda" },
"none-ls.nvim": { "branch": "main", "commit": "8cd333aa66e08492d891bdad272208a620cb93a3" },
"nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" },
"nvim-cmp": { "branch": "main", "commit": "a1d504892f2bc56c2e79b65c6faded2fd21f3eca" },
"nvim-colorizer.lua": { "branch": "master", "commit": "6ed09146ee637006367b5e225be6208a1ea02579" },
"nvim-docs-view": { "branch": "master", "commit": "5676cc094d426edd39134b1eefca2cab441cca8a" },
"nvim-hlslens": { "branch": "main", "commit": "be2d7b2be01860b5445a007ff2bc72b29896db6b" },
"nvim-lilypond-suite": { "branch": "main", "commit": "a1a313fd6028a196cc9aaa8c8501838fe8cc8e2a" },
"nvim-lspconfig": { "branch": "master", "commit": "46204c8fdaa36a9aa3768780450e4bc7a210025f" },
"nvim-lilypond-suite": { "branch": "main", "commit": "e57ced9e0df33773566af795d70919d577c58ce2" },
"nvim-lspconfig": { "branch": "master", "commit": "bf5abe69c1874531f359a822d0cff4d73e26113f" },
"nvim-navic": { "branch": "master", "commit": "f5eba192f39b453675d115351808bd51276d9de5" },
"nvim-scrollbar": { "branch": "main", "commit": "f8e87b96cd6362ef8579be456afee3b38fd7e2a8" },
"nvim-surround": { "branch": "main", "commit": "61319d4bd1c5e336e197defa15bd104c51f0fb29" },
"nvim-tree.lua": { "branch": "master", "commit": "6eaf74c9919d121d2806ac3c20e757e66bd29c31" },
"nvim-treesitter": { "branch": "main", "commit": "6620ae1c44dfa8623b22d0cbf873a9e8d073b849" },
"nvim-treesitter-context": { "branch": "master", "commit": "adf4b6b0420b7be6c717ef0ac7993183d6c201b1" },
"nvim-ts-autotag": { "branch": "main", "commit": "8e1c0a389f20bf7f5b0dd0e00306c1247bda2595" },
"nvim-tree.lua": { "branch": "master", "commit": "24cfcc94372e526fd9e1c2803ede9e0f1715e33f" },
"nvim-treesitter": { "branch": "main", "commit": "4916d6592ede8c07973490d9322f187e07dfefac" },
"nvim-treesitter-context": { "branch": "master", "commit": "b0c45cefe2c8f7b55fc46f34e563bc428ef99636" },
"nvim-ts-autotag": { "branch": "main", "commit": "88c1453db4ba7dd24131086fe51fdf74e587d275" },
"nvim-ufo": { "branch": "main", "commit": "ab3eb124062422d276fae49e0dd63b3ad1062cfc" },
"nvim-web-devicons": { "branch": "master", "commit": "d7462543c9e366c0d196c7f67a945eaaf5d99414" },
"nvim-web-devicons": { "branch": "master", "commit": "8069e89df2d7259704286a5906a11c5b27d5b440" },
"nvim-yarp": { "branch": "master", "commit": "bb5f5e038bfe119d3b777845a76b0b919b35ebc8" },
"ogpt.nvim": { "branch": "main", "commit": "0fae02db8cb07391f86c3dbe807f62190a2d997f" },
"otter.nvim": { "branch": "main", "commit": "4796602953348e19fb24916557af7b89e188751f" },
"outline.nvim": { "branch": "main", "commit": "ead1820d49c8e79ce89cab1c2c318981b695c9d2" },
"otter.nvim": { "branch": "main", "commit": "a455e68a99d395889ab30a25ac3846a135e93c46" },
"outline.nvim": { "branch": "main", "commit": "c293eb56db880a0539bf9d85b4a27816960b863e" },
"pantran.nvim": { "branch": "main", "commit": "b87c3ae48cba4659587fb75abd847e5b7a7c9ca0" },
"papis.nvim": { "branch": "main", "commit": "25e69f25e51b2d46178a213356adbc28b0f918ef" },
"plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" },
"platformio.nvim": { "branch": "main", "commit": "546e1e0b5afdd970f140d0ccaf322d41c0f23941" },
"plenary.nvim": { "branch": "master", "commit": "74b06c6c75e4eeb3108ec01852001636d85a932b" },
"popup-menu.nvim": { "branch": "master", "commit": "b618bd0c824a20417d845fa0022327228e6988a2" },
"projections.nvim": { "branch": "pre_release", "commit": "889914169fa1f5c00fb8659653b5a8330fb223e6" },
"promise-async": { "branch": "main", "commit": "119e8961014c9bfaf1487bf3c2a393d254f337e2" },
"quarto-nvim": { "branch": "main", "commit": "d923bb7cfc2bde41143e1c531c28190f0fade3a2" },
"quarto-nvim": { "branch": "main", "commit": "17f1e5d664bc615478230dc0240666329efacf9b" },
"renamer.nvim": { "branch": "master", "commit": "1614d466df53899f11dd5395eaac3c09a275c384" },
"render-markdown.nvim": { "branch": "main", "commit": "e3c18ddd27a853f85a6f513a864cf4f2982b9f26" },
"render-markdown.nvim": { "branch": "main", "commit": "3f3eea97b80839f629c951ca660ffd125bfa5b34" },
"resolve.nvim": { "branch": "master", "commit": "1ed8bcc9ce7d43a0e8e05d0001c9cadb822d95a8" },
"rustaceanvim": { "branch": "master", "commit": "88575b98bb9937fb9983ddec5e532b67e75ce677" },
"spelunker.vim": { "branch": "master", "commit": "a0bc530f62798bbe053905555a4aa9ed713485eb" },
@@ -78,12 +81,12 @@
"tccs.nvim": { "branch": "master", "commit": "23fabbb0a65517307e571f63fe7a3760670086fe" },
"telescope-fzf-native.nvim": { "branch": "main", "commit": "6fea601bd2b694c6f2ae08a6c6fab14930c60e2c" },
"telescope-words.nvim": { "branch": "main", "commit": "295d51fe1e525fee18c0c164ad0ae5fb23273aa0" },
"telescope.nvim": { "branch": "master", "commit": "3333a52ff548ba0a68af6d8da1e54f9cd96e9179" },
"telescope.nvim": { "branch": "master", "commit": "5255aa27c422de944791318024167ad5d40aad20" },
"tidy.nvim": { "branch": "main", "commit": "8b6921150b16f38f48a2459a844a0c2b4c916914" },
"tiny-inline-diagnostic.nvim": { "branch": "main", "commit": "ba133b3e932416e4b9507095731a6d7276878fe8" },
"tiny-inline-diagnostic.nvim": { "branch": "main", "commit": "147af4e49f51dd48f41972de26552872b8ba7b25" },
"todo-comments.nvim": { "branch": "main", "commit": "31e3c38ce9b29781e4422fc0322eb0a21f4e8668" },
"treesj": { "branch": "main", "commit": "26bc2a8432ba3ea79ed6aa346fba780a3d372570" },
"treewalker.nvim": { "branch": "main", "commit": "a37a12b6ae937c616d4cb16b5c26c07a85899b44" },
"treesj": { "branch": "main", "commit": "5fa4e7ba3517f8fe743bb4488f9e9c7ce83330fc" },
"treewalker.nvim": { "branch": "main", "commit": "3680d19fc275f275352e9a3c05f3ec5079dfc0a7" },
"trouble.nvim": { "branch": "main", "commit": "bd67efe408d4816e25e8491cc5ad4088e708a69a" },
"undotree": { "branch": "master", "commit": "6fa6b57cda8459e1e4b2ca34df702f55242f4e4d" },
"vim-abolish": { "branch": "master", "commit": "dcbfe065297d31823561ba787f51056c147aa682" },

View File

@@ -4,113 +4,3 @@ vim.api.nvim_create_autocmd("TextYankPost", {
vim.highlight.on_yank({ higroup = "YankHighlight" })
end,
})
-- gnikdroy/projections.nvim
local Session = require("projections.session")
vim.api.nvim_create_autocmd({ "VimLeavePre" }, {
callback = function()
Session.store(vim.loop.cwd())
end,
})
vim.api.nvim_create_autocmd({ "VimEnter" }, {
callback = function()
if vim.fn.argc() ~= 0 then
return
end
local session_info = Session.info(vim.loop.cwd())
if session_info ~= nil then
Session.restore(vim.loop.cwd())
end
end,
desc = "Restore last session automatically",
})
-- benlubas/molten-nvim
local imb = function(e)
vim.schedule(function()
local kernels = vim.fn.MoltenAvailableKernels()
local try_kernel_name = function()
local metadata = vim.json.decode(io.open(e.file, "r"):read("a"))["metadata"]
return metadata.kernelspec.name
end
local ok, kernel_name = pcall(try_kernel_name)
if not ok or not vim.tbl_contains(kernels, kernel_name) then
kernel_name = nil
local venv = os.getenv("VIRTUAL_ENV") or os.getenv("CONDA_PREFIX")
if venv ~= nil then
kernel_name = string.match(venv, "/.+/(.+)")
end
end
if kernel_name ~= nil and vim.tbl_contains(kernels, kernel_name) then
vim.cmd(("MoltenInit %s"):format(kernel_name))
end
vim.cmd("MoltenImportOutput")
end)
end
vim.api.nvim_create_autocmd("BufAdd", {
pattern = { "*.ipynb" },
callback = imb,
})
vim.api.nvim_create_autocmd("BufEnter", {
pattern = { "*.ipynb" },
callback = function(e)
if vim.api.nvim_get_vvar("vim_did_enter") ~= 1 then
imb(e)
end
end,
})
local default_notebook = [[
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
""
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython"
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
]]
local function new_notebook(filename)
local path = filename .. ".ipynb"
local file = io.open(path, "w")
if file then
file:write(default_notebook)
file:close()
vim.cmd("edit " .. path)
else
print("Error: Could not open new notebook file for writing.")
end
end
vim.api.nvim_create_user_command("NewNotebook", function(opts)
new_notebook(opts.args)
end, {
nargs = 1,
complete = "file",
})

View File

@@ -4,80 +4,121 @@ Artifacts
Betreuerrolle
Bonitur
Branch
Crowd-Interaction
Branch
Branches
Crowd
Cutie
Destruction
Developer
Dictation
Dirt
Diskursartefakten
Dom
Dreams
Embedding
Entlebucher
Extraction
For-Loop
For
Formatter
Französischvokabeln
GOAT
Genervtheit
Gestresstheit
Gym
Handwerksunternehmen
Homeserver
Immigrationsgeschichte
Impro-Theater
Impro
Improtheater
Infokratie
Informatikstudierende
Informatikstudiun
Interaction
Ira
Jahreszeitenunterschied
Jahreszeitenunterschiede
Kardinälin
Kreatindosis
Königinnensubstanz
LLM-Paper
Loop
Magazinbeute
Magazinbeuten
Merge
Merges
Meta
Mods
Mono
Ne
Orgas
Paper
Platformer
Poetry
Poetry-Slam
Poetryslam
Pollenhose
SDS-Plenum
SPM-Gruppe
Presenter
Quizabend
Renamer
Repositories
Repository
Scammer
Sennenhund
Slam
Slam
Slammern
Slams
Soundness
Speech-to-Text
Speech
Speedrun
Speedruns
Spells
Stations
Sub
Terraforming
Torrenting
Uni-Theater
Trainspotter
Trefferverhältnis
Uni
Unitheater
Verification
Vokabelkarten
While-Loop
Wrap-Up-Folie
While
Wohnungslose
Wrap-Up
Xiayun
Zweifelsfall
algenverseucht
aneinandergelehnt
awkward
be
bürgerlicher
bürgerlichere
bürgerlicheren
cyber-physische
cyber
egozentristisch
en
eux
fois
gedätscht
gepiekst
geupdatet
gonna
histoire
ira
kinky
klassistisch
même
performistisch
physische
pseudomotivierend
pseudomotivierende
reingeredet
respekt-
rumgealbert
shiftete
temps
this
to
ultra
warpl
well
will
Ça
ça

View File

@@ -0,0 +1,3 @@
dockerized
keymap
synaptics

View File

@@ -1,20 +1,27 @@
AI
APV
Accuracy
Agentic
Akallabêth
Altisaur
An
Anki
Annoyed
ApoRed
Applied
Arrabbiata
Asiahung
Aule
Aules
Baez
Barros
Beater
Beek
Bela
Bennie
Berim
Betterov
Bladee
Boarding
Boelsen
Bontjes
@@ -23,65 +30,107 @@ CAR
CATS
CDSS
CUDA
Carré
Casper
Caspers
Cato
CdE
CdEs
Chrysalis
Color
Combi
Commander
Crusader
DFKI
DFKIs
DPU
Daisy's
Darth
DeepSeek
Dekarldent
Delivery
Destiny 2
Distrobox
Doom-Scrolling
Doom
Doyma
EasyEffects
Eckhoff
Edain
Elodie
Ernsting's
Euphoria
Explainable
Explodes
Eyal
FIDO-Stick
FIDO
Face
Fischerhude
Flac
Forest
Forgejo
Französischmodul
Frevert
Freverts
Friedl
Friesenturnier
Gathering
GitNex
Glaive
Glenn
Glenns
Gondor
Governikus
GrapheneOS
Greater
Grixis
Grosshardt
Gump
Guttersnipe
Haarentor
Habenhausen
Hailo
Helldivers
Hellmers
Higgers
Hillmannplatz
Hough
Hue
Hunter
Höper
IFAM
IFAMs
IMRaD
Ikigai
Immich
Int
Ira
JT
Jacobin
Jeanine
Jojen
Karamasov
Keep
Kingdoms
Kluge
KohakuHub
Kratom
Kreyenhop
Kubitschek
Käte
LLM
LLMs
LabNex
Lanz
Later
Lemmie
Lemmies
LightDM
LightDM-GTK-Greeter
LightDM-Mini-Greeter
LilyPond
Line Dance
Lounge
MEVIS
MTG
Maarten
Magic
@@ -92,18 +141,25 @@ Mathis
Matvey
Mauli
Mentos
Meret
Meshtastic
Metzener
MiiMii
Mint
MusikAka
MusikAkademie
NVIM
NVIM-Plugin
NVIM-Plugins
NVIM
NVIM
Nate
NeoVIM
Neovim
NetworkManager
NextCloud
Nim
Nobody
Noel
North
Novruz
Númenor
OFFIS
Oberhausern
@@ -111,63 +167,95 @@ Oberweseler
Odysee
Opam
OpenCloud
Ove
Overwatch
Pane
Papis
Pauper
Pentakill
Peperaci
PfingstAka
PfingstAka
PfingstAkademie
Pillion
Pluribus
PopOS
Portainer
Power
Precision
Precon
Precons
PyEnv
RStudio
Rebowl
Reed
Reeves
Reichenecker
Rocq
Ruschenbaum
SDS
SPM
Saber
Sagehorn
Sagehorner
Scheller
Schrang
Schwerdtner
Scrolling
Sedef
Severance
Shinies
Shiny
Skyrim
Snape
Softbrod
SommerAka
SommerAkademie
Souleyman
SpotiFLAC
Sprave
Stina
Stud.IP
Study
Styropyro
TCAV
Talking
Thinkpad
Till-Ove
Till
Timmendorfer
Tjark
Tornow
TrackPoint
Traefik
UDEV
Umbar
V1del
VIM
Verdener
Viano
Wechloy
Weizman
Whisper
Wife
Willenborg
WinterAka
WinterAkademie
Writhing
X.Org
Years
Ziegeleiweg
Zimin
and
baseimage-gui
ctop
eKiwi
flac
glaive
inf
jlesages
liquidctl
npy
ramdisk
systemd
xinput
zedbraxmen

View File

@@ -0,0 +1,85 @@
return {
-- agentic coding
"carlos-algms/agentic.nvim",
--- @type agentic.PartialUserConfig
opts = {
-- provider = "gemini-acp",
provider = "codex-acp",
diagnostic_icons = {
error = Error_sign,
warn = Warn_sign,
info = Info_sign,
hint = Hint_sign,
},
status_icons = {
pending = "󰄉",
in_progress = "󱥸",
completed = "󰗠",
failed = "󰅙",
},
permission_icons = {
allow_once = "󰄬",
allow_always = "󰄭",
reject_once = "󰅖",
reject_always = "",
},
chat_icons = {
user = "󰀄",
agent = "󰚩",
},
message_icons = {
thinking = "󰧑",
finished = "",
stopped = "",
error = "󰀦",
},
},
keys = {
{
"<leader>aa",
function()
require("agentic").toggle()
end,
mode = { "n", "v" },
desc = "Agentic: Toggle chat",
},
{
"<leader>af",
function()
require("agentic").add_selection_or_file_to_context()
end,
mode = { "n", "v" },
desc = "Agentic: Add file or selection to context",
},
{
"<leader>as",
function()
require("agentic").new_session()
end,
mode = { "n", "v" },
desc = "Agentic: Create new session",
},
{
"<leader>ar",
function()
require("agentic").restore_session()
end,
mode = { "n", "v" },
desc = "Agentic: Restore session",
},
{
"<leader>ad",
function()
require("agentic").add_current_line_diagnostics()
end,
desc = "Agentic: Add current line diagnostic",
},
{
"<leader>aD",
function()
require("agentic").add_buffer_diagnostics()
end,
desc = "Agentic: Add current buffer diagnostic",
},
},
}

View File

@@ -1,5 +1,8 @@
return {
-- rename files in buffer
"tiyn/file-renamer.nvim",
dependencies = {
"nvim-tree/nvim-web-devicons",
},
cmd = { "Ren", "Renamer" },
}

View File

@@ -23,12 +23,13 @@ return {
if engine == "xelatex" then
vim.g.knap_settings.textopdf = "xelatex -synctex=1 -interaction=batchmode %docroot%"
else
vim.g.knap_settings.textopdf = "pdflatex -synctex=1 -interaction=batchmode %docroot%"
vim.g.knap_settings.textopdf = "pdflatex --shell-escape -synctex=1 -interaction=batchmode %docroot%"
end
end
vim.g.knap_settings = {
delay = 100,
texoutputext = "pdf",
-- textopdf = "pdflatex --shell-escape -synctex=1 -interaction=batchmode %docroot%",
textopdf = "xelatex -synctex=1 -interaction=batchmode %docroot%",
textopdfviewerlaunch = "zathura --synctex-editor-command 'nvim --headless -es --cmd \"lua require('\"'\"'knaphelper'\"'\"').relayjump('\"'\"'%servername%'\"'\"','\"'\"'%{input}'\"'\"',%{line},0)\"' ./%outputfile%",
textopdfviewerrefresh = "reload",

View File

@@ -17,4 +17,93 @@ return {
vim.g.molten_image_provider = "image.nvim"
vim.g.molten_output_win_max_height = 20
end,
config = function()
local imb = function(e)
vim.schedule(function()
local kernels = vim.fn.MoltenAvailableKernels()
local try_kernel_name = function()
local metadata = vim.json.decode(io.open(e.file, "r"):read("a"))["metadata"]
return metadata.kernelspec.name
end
local ok, kernel_name = pcall(try_kernel_name)
if not ok or not vim.tbl_contains(kernels, kernel_name) then
kernel_name = nil
local venv = os.getenv("VIRTUAL_ENV") or os.getenv("CONDA_PREFIX")
if venv ~= nil then
kernel_name = string.match(venv, "/.+/(.+)")
end
end
if kernel_name ~= nil and vim.tbl_contains(kernels, kernel_name) then
vim.cmd(("MoltenInit %s"):format(kernel_name))
end
vim.cmd("MoltenImportOutput")
end)
end
vim.api.nvim_create_autocmd("BufAdd", {
pattern = { "*.ipynb" },
callback = imb,
})
vim.api.nvim_create_autocmd("BufEnter", {
pattern = { "*.ipynb" },
callback = function(e)
if vim.api.nvim_get_vvar("vim_did_enter") ~= 1 then
imb(e)
end
end,
})
local default_notebook = [[
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
""
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython"
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
]]
local function new_notebook(filename)
local path = filename .. ".ipynb"
local file = io.open(path, "w")
if file then
file:write(default_notebook)
file:close()
vim.cmd("edit " .. path)
else
print("Error: Could not open new notebook file for writing.")
end
end
vim.api.nvim_create_user_command("NewNotebook", function(opts)
new_notebook(opts.args)
end, {
nargs = 1,
complete = "file",
})
end,
}

View File

@@ -1,7 +1,10 @@
return {
-- folding improvements
"kevinhwang91/nvim-ufo",
dependencies = { "kevinhwang91/promise-async" },
dependencies = {
"kevinhwang91/promise-async",
"neovim/nvim-lspconfig",
},
keys = {
{
"K",
@@ -10,7 +13,7 @@ return {
if not winid then
vim.lsp.buf.hover({
border = "rounded",
focusable = false,
focusable = true, -- set to false to disable pressing K twice to focus the window
max_width = 100,
})
end

View File

@@ -9,9 +9,9 @@ return {
},
keys = {
{
"<leader>ai",
"<leader>ao",
"<cmd>OGPT<CR>",
desc = "OGPT: Open AI View",
desc = "OGPT: Toggle chat",
},
},
opts = {

View File

@@ -0,0 +1,6 @@
return {
-- integration plugin for platformio
"sbatin/platformio.nvim",
dependencies = { "numToStr/FTerm.nvim" },
cmd = { "PIO" },
}

View File

@@ -29,7 +29,31 @@ return {
},
},
config = function(_, opts)
require("projections").setup(opts)
local projections = require("projections")
local session = require("projections.session")
projections.setup(opts)
require("telescope").load_extension("projections")
vim.api.nvim_create_autocmd("VimLeavePre", {
callback = function()
session.store(vim.loop.cwd())
end,
})
vim.api.nvim_create_autocmd("VimEnter", {
callback = function()
if vim.fn.argc() ~= 0 then
return
end
vim.schedule(function()
local session_info = session.info(vim.loop.cwd())
if session_info ~= nil then
session.restore(vim.loop.cwd())
end
end)
end,
desc = "Restore last session automatically",
})
end,
}

View File

@@ -8,6 +8,8 @@ return {
function()
require("treesj").toggle()
end,
mode = "n",
desc = "Join/split block",
},
},
opts = {},

View File

@@ -63,7 +63,7 @@ return {
"renderer",
wilder.popupmenu_renderer({
highlighter = highlighters,
left = { " ", wilder.popupmenu_devicons() },
-- left = { " ", wilder.popupmenu_devicons() }, -- has problems with mason
right = { " ", wilder.popupmenu_scrollbar() },
})
)

View File

@@ -121,7 +121,7 @@ vim.diagnostic.config({
-- enable colorcolumn when textwidth is set
vim.o.cursorline = true
vim.opt_local.colorcolumn = "+" .. vim.fn.join(vim.fn.range(0, 254), ",+")
vim.opt_local.colorcolumn = "+" .. vim.fn.join(vim.fn.range(1, 254), ",+")
-- alternatively highlight only one line for colorcolumn
-- vim.o.colorcolumn = "-0"

View File

@@ -0,0 +1,136 @@
# Real-time Client config file for PipeWire version "1.2.7" #
#
# Copy and edit this file in /etc/pipewire for system-wide changes
# or in ~/.config/pipewire for local changes.
#
# It is also possible to place a file with an updated section in
# /etc/pipewire/client-rt.conf.d/ for system-wide changes or in
# ~/.config/pipewire/client-rt.conf.d/ for local changes.
#
context.properties = {
## Configure properties in the system.
#mem.warn-mlock = false
#mem.allow-mlock = true
#mem.mlock-all = false
log.level = 0
#default.clock.quantum-limit = 8192
}
context.spa-libs = {
#<factory-name regex> = <library-name>
#
# Used to find spa factory names. It maps an spa factory name
# regular expression to a library name that should contain
# that factory.
#
audio.convert.* = audioconvert/libspa-audioconvert
support.* = support/libspa-support
}
context.modules = [
#{ name = <module-name>
# ( args = { <key> = <value> ... } )
# ( flags = [ ( ifexists ) ( nofail ) ] )
# ( condition = [ { <key> = <value> ... } ... ] )
#}
#
# Loads a module with the given parameters.
# If ifexists is given, the module is ignored when it is not found.
# If nofail is given, module initialization failures are ignored.
#
# Uses realtime scheduling to boost the audio thread priorities
{ name = libpipewire-module-rt
args = {
#rt.prio = 83
#rt.time.soft = -1
#rt.time.hard = -1
}
flags = [ ifexists nofail ]
}
# The native communication protocol.
{ name = libpipewire-module-protocol-native }
# Allows creating nodes that run in the context of the
# client. Is used by all clients that want to provide
# data to PipeWire.
{ name = libpipewire-module-client-node }
# Allows creating devices that run in the context of the
# client. Is used by the session manager.
{ name = libpipewire-module-client-device }
# Makes a factory for wrapping nodes in an adapter with a
# converter and resampler.
{ name = libpipewire-module-adapter }
# Allows applications to create metadata objects. It creates
# a factory for Metadata objects.
{ name = libpipewire-module-metadata }
# Provides factories to make session manager objects.
{ name = libpipewire-module-session-manager }
]
filter.properties = {
#node.latency = 1024/48000
}
stream.properties = {
#node.latency = 1024/48000
#node.autoconnect = true
#resample.quality = 4
#channelmix.normalize = false
#channelmix.mix-lfe = true
#channelmix.upmix = true
#channelmix.upmix-method = psd # none, simple
#channelmix.lfe-cutoff = 150
#channelmix.fc-cutoff = 12000
#channelmix.rear-delay = 12.0
#channelmix.stereo-widen = 0.0
#channelmix.hilbert-taps = 0
#dither.noise = 0
}
stream.rules = [
{ matches = [
{
# all keys must match the value. ! negates. ~ starts regex.
#application.name = "pw-cat"
#node.name = "~Google Chrome$"
}
]
actions = {
update-props = {
#node.latency = 512/48000
}
}
}
]
alsa.properties = {
#alsa.deny = false
# ALSA params take a single value, an array [] of values
# or a range { min=.. max=... }
#alsa.access = [ MMAP_INTERLEAVED MMAP_NONINTERLEAVED RW_INTERLEAVED RW_NONINTERLEAVED ]
#alsa.format = [ FLOAT S32 S24 S24_3 S16 U8 ]
#alsa.rate = { min=1 max=384000 } # or [ 44100 48000 .. ]
#alsa.channels = { min=1 max=64 } # or [ 2 4 6 .. ]
#alsa.period-bytes = { min=128 max=2097152 } # or [ 128 256 1024 .. ]
#alsa.buffer-bytes = { min=256 max=4194304 } # or [ 256 512 4096 .. ]
#alsa.volume-method = cubic # linear, cubic
}
# client specific properties
alsa.rules = [
{ matches = [ { application.process.binary = "resolve" } ]
actions = {
update-props = {
alsa.buffer-bytes = 131072
}
}
}
]

View File

@@ -0,0 +1,86 @@
# Client config file for PipeWire version "1.2.7" #
#
# Copy and edit this file in /etc/pipewire for system-wide changes
# or in ~/.config/pipewire for local changes.
#
# It is also possible to place a file with an updated section in
# /etc/pipewire/client.conf.d/ for system-wide changes or in
# ~/.config/pipewire/client.conf.d/ for local changes.
#
context.properties = {
## Configure properties in the system.
#mem.warn-mlock = false
#mem.allow-mlock = true
#mem.mlock-all = false
log.level = 0
#default.clock.quantum-limit = 8192
}
context.spa-libs = {
#<factory-name regex> = <library-name>
#
# Used to find spa factory names. It maps an spa factory name
# regular expression to a library name that should contain
# that factory.
#
audio.convert.* = audioconvert/libspa-audioconvert
support.* = support/libspa-support
}
context.modules = [
#{ name = <module-name>
# ( args = { <key> = <value> ... } )
# ( flags = [ ( ifexists ) ( nofail ) ] )
# ( condition = [ { <key> = <value> ... } ... ] )
#}
#
# Loads a module with the given parameters.
# If ifexists is given, the module is ignored when it is not found.
# If nofail is given, module initialization failures are ignored.
#
# The native communication protocol.
{ name = libpipewire-module-protocol-native }
# Allows creating nodes that run in the context of the
# client. Is used by all clients that want to provide
# data to PipeWire.
{ name = libpipewire-module-client-node }
# Allows creating devices that run in the context of the
# client. Is used by the session manager.
{ name = libpipewire-module-client-device }
# Makes a factory for wrapping nodes in an adapter with a
# converter and resampler.
{ name = libpipewire-module-adapter }
# Allows applications to create metadata objects. It creates
# a factory for Metadata objects.
{ name = libpipewire-module-metadata }
# Provides factories to make session manager objects.
{ name = libpipewire-module-session-manager }
]
filter.properties = {
#node.latency = 1024/48000
}
stream.properties = {
#node.latency = 1024/48000
#node.autoconnect = true
#resample.quality = 4
#channelmix.normalize = false
#channelmix.mix-lfe = true
#channelmix.upmix = true
#channelmix.upmix-method = psd # none, simple
#channelmix.lfe-cutoff = 150
#channelmix.fc-cutoff = 12000
#channelmix.rear-delay = 12.0
#channelmix.stereo-widen = 0.0
#channelmix.hilbert-taps = 0
#dither.noise = 0
}

View File

@@ -0,0 +1,63 @@
# Filter-chain config file for PipeWire version "1.2.7" #
#
# This is a base config file for running filters.
#
# Place filter fragments in /etc/pipewire/filter-chain.conf.d/
# for system-wide changes or in ~/.config/pipewire/filter-chain.conf.d/
# for local changes.
#
# Run the filters with pipewire -c filter-chain.conf
#
context.properties = {
## Configure properties in the system.
#mem.warn-mlock = false
#mem.allow-mlock = true
#mem.mlock-all = false
log.level = 0
}
context.spa-libs = {
#<factory-name regex> = <library-name>
#
# Used to find spa factory names. It maps an spa factory name
# regular expression to a library name that should contain
# that factory.
#
audio.convert.* = audioconvert/libspa-audioconvert
support.* = support/libspa-support
}
context.modules = [
#{ name = <module-name>
# ( args = { <key> = <value> ... } )
# ( flags = [ ( ifexists ) ( nofail ) ] )
# ( condition = [ { <key> = <value> ... } ... ] )
#}
#
# Loads a module with the given parameters.
# If ifexists is given, the module is ignored when it is not found.
# If nofail is given, module initialization failures are ignored.
#
# Uses realtime scheduling to boost the audio thread priorities
{ name = libpipewire-module-rt
args = {
#rt.prio = 83
#rt.time.soft = -1
#rt.time.hard = -1
}
flags = [ ifexists nofail ]
}
# The native communication protocol.
{ name = libpipewire-module-protocol-native }
# Allows creating nodes that run in the context of the
# client. Is used by all clients that want to provide
# data to PipeWire.
{ name = libpipewire-module-client-node }
# Makes a factory for wrapping nodes in an adapter with a
# converter and resampler.
{ name = libpipewire-module-adapter }
]

139
.config/pipewire/jack.conf Normal file
View File

@@ -0,0 +1,139 @@
# JACK client config file for PipeWire version "1.2.7" #
#
# Copy and edit this file in /etc/pipewire for system-wide changes
# or in ~/.config/pipewire for local changes.
#
# It is also possible to place a file with an updated section in
# /etc/pipewire/jack.conf.d/ for system-wide changes or in
# ~/.config/pipewire/jack.conf.d/ for local changes.
#
context.properties = {
## Configure properties in the system.
#mem.warn-mlock = false
#mem.allow-mlock = true
#mem.mlock-all = false
log.level = 0
#default.clock.quantum-limit = 8192
}
context.spa-libs = {
#<factory-name regex> = <library-name>
#
# Used to find spa factory names. It maps an spa factory name
# regular expression to a library name that should contain
# that factory.
#
support.* = support/libspa-support
}
context.modules = [
#{ name = <module-name>
# ( args = { <key> = <value> ... } )
# ( flags = [ ( ifexists ) ( nofail ) ] )
# ( condition = [ { <key> = <value> ... } ... ] )
#}
#
# Loads a module with the given parameters.
# If ifexists is given, the module is ignored when it is not found.
# If nofail is given, module initialization failures are ignored.
#
#
# Boost the data thread priority.
{ name = libpipewire-module-rt
args = {
#rt.prio = 83
#rt.time.soft = -1
#rt.time.hard = -1
}
flags = [ ifexists nofail ]
}
# The native communication protocol.
{ name = libpipewire-module-protocol-native }
# Allows creating nodes that run in the context of the
# client. Is used by all clients that want to provide
# data to PipeWire.
{ name = libpipewire-module-client-node }
# Allows applications to create metadata objects. It creates
# a factory for Metadata objects.
{ name = libpipewire-module-metadata }
]
# global properties for all jack clients
jack.properties = {
#node.latency = 1024/48000
#node.rate = 1/48000
#node.quantum = 1024/48000
#node.lock-quantum = true
#node.force-quantum = 0
#jack.show-monitor = true
#jack.merge-monitor = true
#jack.show-midi = true
#jack.short-name = false
#jack.filter-name = false
#jack.filter-char = " "
#
# allow: Don't restrict self connect requests
# fail-external: Fail self connect requests to external ports only
# ignore-external: Ignore self connect requests to external ports only
# fail-all: Fail all self connect requests
# ignore-all: Ignore all self connect requests
#jack.self-connect-mode = allow
#
# allow: Allow connect request of other ports
# fail: Fail connect requests of other ports
# ignore: Ignore connect requests of other ports
#jack.other-connect-mode = allow
#jack.locked-process = true
#jack.default-as-system = false
#jack.fix-midi-events = true
#jack.global-buffer-size = false
#jack.max-client-ports = 768
#jack.fill-aliases = false
#jack.writable-input = true
}
# client specific properties
jack.rules = [
{ matches = [
{
# all keys must match the value. ! negates. ~ starts regex.
#client.name = "Carla"
#application.process.binary = "jack_simple_client"
#application.name = "~jack_simple_client.*"
}
]
actions = {
update-props = {
#node.latency = 512/48000
}
}
}
{ matches = [ { application.process.binary = "jack_bufsize" } ]
actions = {
update-props = {
jack.global-buffer-size = true # quantum set globally using metadata
}
}
}
{ matches = [ { application.process.binary = "qsynth" } ]
actions = {
update-props = {
node.always-process = false # makes qsynth idle
node.pause-on-idle = false # makes audio fade out when idle
node.passive = out # makes the sink and qsynth suspend
}
}
}
{ matches = [ { client.name = "Mixxx" } ]
actions = {
update-props = {
jack.merge-monitor = false
}
}
}
]

View File

@@ -0,0 +1,476 @@
# Simple daemon config file for PipeWire version "1.2.7" #
#
# Copy and edit this file in /etc/pipewire for system-wide changes
# or in ~/.config/pipewire for local changes.
#
# It is also possible to place a file with an updated section in
# /etc/pipewire/minimal.conf.d/ for system-wide changes or in
# ~/.config/pipewire/minimal.conf.d/ for local changes.
#
context.properties = {
## Configure properties in the system.
#library.name.system = support/libspa-support
#context.data-loop.library.name.system = support/libspa-support
#support.dbus = true
#link.max-buffers = 64
link.max-buffers = 16 # version < 3 clients can't handle more
#mem.warn-mlock = false
#mem.allow-mlock = true
#mem.mlock-all = false
#clock.power-of-two-quantum = true
#log.level = 2
#cpu.zero.denormals = false
core.daemon = true # listening for socket connections
core.name = pipewire-0 # core name and socket name
## Properties for the DSP configuration.
#default.clock.rate = 48000
#default.clock.allowed-rates = [ 48000 ]
#default.clock.quantum = 1024
#default.clock.min-quantum = 32
#default.clock.max-quantum = 2048
#default.clock.quantum-limit = 8192
#default.clock.quantum-floor = 4
#default.video.width = 640
#default.video.height = 480
#default.video.rate.num = 25
#default.video.rate.denom = 1
#
settings.check-quantum = true
settings.check-rate = true
# This config can use udev or hardcoded ALSA devices. Make sure to
# change the alsa device below when disabling udev
minimal.use-udev = true
# Load the pulseaudio emulation daemon
minimal.use-pulse = true
}
context.properties.rules = [
{ matches = [ { cpu.vm.name = !null } ]
actions = {
update-props = {
# These overrides are only applied when running in a vm.
default.clock.min-quantum = 1024
}
}
}
]
context.spa-libs = {
#<factory-name regex> = <library-name>
#
# Used to find spa factory names. It maps an spa factory name
# regular expression to a library name that should contain
# that factory.
#
audio.convert.* = audioconvert/libspa-audioconvert
audio.adapt = audioconvert/libspa-audioconvert
api.alsa.* = alsa/libspa-alsa
support.* = support/libspa-support
}
context.modules = [
#{ name = <module-name>
# ( args = { <key> = <value> ... } )
# ( flags = [ ( ifexists ) ( nofail ) ] )
# ( condition = [ { <key> = <value> ... } ... ] )
#}
#
# Loads a module with the given parameters.
# If ifexists is given, the module is ignored when it is not found.
# If nofail is given, module initialization failures are ignored.
#
# Uses realtime scheduling to boost the audio thread priorities. This uses
# RTKit if the user doesn't have permission to use regular realtime
# scheduling.
{ name = libpipewire-module-rt
args = {
nice.level = -11
rt.prio = 88
#rt.time.soft = -1
#rt.time.hard = -1
}
flags = [ ifexists nofail ]
}
# The native communication protocol.
{ name = libpipewire-module-protocol-native }
# The profile module. Allows application to access profiler
# and performance data. It provides an interface that is used
# by pw-top and pw-profiler.
{ name = libpipewire-module-profiler }
# Allows applications to create metadata objects. It creates
# a factory for Metadata objects.
{ name = libpipewire-module-metadata }
# Creates a factory for making nodes that run in the
# context of the PipeWire server.
{ name = libpipewire-module-spa-node-factory }
{ name = libpipewire-module-spa-device-factory }
# Allows creating nodes that run in the context of the
# client. Is used by all clients that want to provide
# data to PipeWire.
{ name = libpipewire-module-client-node }
# The access module can perform access checks and block
# new clients.
{ name = libpipewire-module-access
args = {
# access.allowed to list an array of paths of allowed
# apps.
#access.allowed = [
# /usr/bin/pipewire-media-session
#]
# An array of rejected paths.
#access.rejected = [ ]
# An array of paths with restricted access.
#access.restricted = [ ]
# Anything not in the above lists gets assigned the
# access.force permission.
#access.force = flatpak
}
}
# Makes a factory for wrapping nodes in an adapter with a
# converter and resampler.
{ name = libpipewire-module-adapter }
# Makes a factory for creating links between ports.
{ name = libpipewire-module-link-factory }
{ name = libpipewire-module-protocol-pulse
condition = [ { minimal.use-pulse = true } ]
}
]
pulse.properties = {
# the addresses this server listens on
server.address = [
"unix:native"
]
}
stream.properties = {
adapter.auto-port-config = { mode = dsp }
}
context.objects = [
#{ factory = <factory-name>
# ( args = { <key> = <value> ... } )
# ( flags = [ ( nofail ) ] )
# ( condition = [ { <key> = <value> ... } ... ] )
#}
#
# Creates an object from a PipeWire factory with the given parameters.
# If nofail is given, errors are ignored (and no object is created).
#
#{ factory = spa-node-factory args = { factory.name = videotestsrc node.name = videotestsrc node.description = videotestsrc "Spa:Pod:Object:Param:Props:patternType" = 1 } }
#{ factory = spa-device-factory args = { factory.name = api.jack.device foo=bar } flags = [ nofail ] }
#{ factory = spa-device-factory args = { factory.name = api.alsa.enum.udev } }
#{ factory = spa-node-factory args = { factory.name = api.alsa.seq.bridge node.name = Internal-MIDI-Bridge } }
#{ factory = adapter args = { factory.name = audiotestsrc node.name = my-test node.description = audiotestsrc } }
#{ factory = spa-node-factory args = { factory.name = api.vulkan.compute.source node.name = my-compute-source } }
# Make a default metadata store
{ factory = metadata
args = {
metadata.name = default
# metadata.values = [
# { key = default.audio.sink value = { name = somesink } }
# { key = default.audio.source value = { name = somesource } }
# ]
}
}
# A default dummy driver. This handles nodes marked with the "node.always-process"
# property when no other driver is currently active. JACK clients need this.
{ factory = spa-node-factory
args = {
factory.name = support.node.driver
node.name = Dummy-Driver
node.group = pipewire.dummy
priority.driver = 20000
}
}
{ factory = spa-node-factory
args = {
factory.name = support.node.driver
node.name = Freewheel-Driver
priority.driver = 19000
node.group = pipewire.freewheel
node.freewheel = true
#freewheel.wait = 10
}
}
# This creates a ALSA udev device that will enumerate all
# ALSA devices. Because it is using ACP and has the auto-profile
# property set, this will enable a profile and create associated
# nodes, which will be automatically configured to their best
# configuration with the auto-port-config settings.
# Extra node and device params can be given with node.param and
# device.param prefixes.
{ factory = spa-device-factory
args = {
factory.name = api.alsa.enum.udev
alsa.use-acp = true
device.object.properties = {
api.acp.auto-profile = true
api.acp.auto-port = true
device.object.properties = {
node.adapter = audio.adapt
resample.disable = false
adapter.auto-port-config = {
mode = dsp
monitor = false
control = false
position = preserve # unknown, aux
}
#node.param.Props = {
# channelVolumes = [ 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.6 ]
#}
}
#device.param.Profile = {
# #idx = 0
# name = pro-audio
#}
}
}
condition = [ { minimal.use-udev = true } ]
}
# This creates a single PCM source device for the given
# alsa device path hw:0. You can change source to sink
# to make a sink in the same way.
{ factory = adapter
args = {
factory.name = api.alsa.pcm.source
node.name = "system"
node.description = "system"
media.class = "Audio/Source"
api.alsa.path = "hw:4"
#api.alsa.period-size = 0
#api.alsa.period-num = 0
#api.alsa.headroom = 0
#api.alsa.start-delay = 0
#api.alsa.disable-mmap = false
#api.alsa.disable-batch = false
#api.alsa.use-chmap = false
#api.alsa.multirate = true
#latency.internal.rate = 0
#latency.internal.ns = 0
#clock.name = api.alsa.0
node.suspend-on-idle = true
#audio.format = "S32"
#audio.rate = 48000
#audio.allowed-rates = [ ]
#audio.channels = 4
#audio.position = [ FL FR RL RR ]
#resample.quality = 4
resample.disable = true
#monitor.channel-volumes = false
#channelmix.normalize = false
#channelmix.mix-lfe = true
#channelmix.upmix = true
#channelmix.upmix-method = psd # none, simple
#channelmix.lfe-cutoff = 150
#channelmix.fc-cutoff = 12000
#channelmix.rear-delay = 12.0
#channelmix.stereo-widen = 0.0
#channelmix.hilbert-taps = 0
#channelmix.disable = false
#dither.noise = 0
#node.param.Props = {
# params = [
# audio.channels 6
# ]
#}
adapter.auto-port-config = {
mode = dsp
monitor = false
control = false
position = unknown # aux, preserve
}
#node.param.PortConfig = {
# direction = Output
# mode = dsp
# format = {
# mediaType = audio
# mediaSubtype = raw
# format = F32
# rate = 48000
# channels = 4
# position = [ FL FR RL RR ]
# }
#}
#node.param.Props = {
# channelVolumes = [ 0.5 0.4 0.3 0.5 ]
#}
}
condition = [ { minimal.use-udev = false } ]
}
{ factory = adapter
args = {
factory.name = api.alsa.pcm.sink
node.name = "system"
node.description = "system"
media.class = "Audio/Sink"
api.alsa.path = "hw:4"
#api.alsa.period-size = 0
#api.alsa.period-num = 0
#api.alsa.headroom = 0
#api.alsa.start-delay = 0
#api.alsa.disable-mmap = false
#api.alsa.disable-batch = false
#api.alsa.use-chmap = false
#api.alsa.multirate = true
#latency.internal.rate = 0
#latency.internal.ns = 0
#clock.name = api.alsa.0
node.suspend-on-idle = true
#audio.format = "S32"
#audio.rate = 48000
#audio.allowed-rates = [ ]
#audio.channels = 2
#audio.position = "FL,FR"
#resample.quality = 4
resample.disable = true
#channelmix.normalize = false
#channelmix.mix-lfe = true
#channelmix.upmix = true
#channelmix.upmix-method = psd # none, simple
#channelmix.lfe-cutoff = 150
#channelmix.fc-cutoff = 12000
#channelmix.rear-delay = 12.0
#channelmix.stereo-widen = 0.0
#channelmix.hilbert-taps = 0
#channelmix.disable = false
#dither.noise = 0
#node.param.Props = {
# params = [
# audio.format S16
# ]
#}
adapter.auto-port-config = {
mode = dsp
monitor = false
control = false
position = unknown # aux, preserve
}
#node.param.PortConfig = {
# direction = Input
# mode = dsp
# monitor = true
# format = {
# mediaType = audio
# mediaSubtype = raw
# format = F32
# rate = 48000
# channels = 4
# }
#}
#node.param.Props = {
# channelVolumes = [ 0.5 0.4 0.3 0.5 ]
#}
}
condition = [ { minimal.use-udev = false } ]
}
# This creates a new Source node. It will have input ports
# that you can link, to provide audio for this source.
#{ factory = adapter
# args = {
# factory.name = support.null-audio-sink
# node.name = "my-mic"
# node.description = "Microphone"
# media.class = "Audio/Source/Virtual"
# audio.position = "FL,FR"
# monitor.passthrough = true
# adapter.auto-port-config = {
# mode = dsp
# monitor = true
# position = preserve # unknown, aux, preserve
# }
# }
#}
# This creates a new link between the source and the virtual
# source ports.
#{ factory = link-factory
# args = {
# link.output.node = system
# link.output.port = capture_1
# link.input.node = my-mic
# link.input.port = input_FL
# }
#}
#{ factory = link-factory
# args = {
# link.output.node = system
# link.output.port = capture_2
# link.input.node = my-mic
# link.input.port = input_FR
# }
#}
]
context.exec = [
#{ path = <program-name>
# ( args = "<arguments>" | [ <arg1> <arg2> ... ] )
# ( condition = [ { <key> = <value> ... } ... ] )
#}
#
# Execute the given program with arguments.
#
# You can optionally start the pulseaudio-server here as well
# but it is better to start it as a systemd service.
# It can be interesting to start another daemon here that listens
# on another address with the -a option (eg. -a tcp:4713).
#
##{ path = "/usr/bin/pipewire" args = "-c pipewire-pulse.conf" }
]
node.rules = [
{ matches = [
{
# all keys must match the value. ! negates. ~ starts regex.
#alsa.card_name = "ICUSBAUDIO7D"
#api.alsa.pcm.stream = "playback"
}
]
actions = {
update-props = {
#node.name = "alsa_playback.ICUSBAUDIO7D"
}
}
}
]
device.rules = [
{ matches = [
{
#alsa.card_name = "ICUSBAUDIO7D"
}
]
actions = {
update-props = {
#device.name = "alsa_card.ICUSBAUDIO7D"
#api.acp.auto-profile = false
#api.acp.auto-port = false
#device.param.Profile = {
# #idx = 0
# name = off
#}
}
}
}
]

View File

@@ -0,0 +1,153 @@
# AES67 config file for PipeWire version "1.2.7" #
#
# Copy and edit this file in /etc/pipewire for system-wide changes
# or in ~/.config/pipewire for local changes.
#
# It is also possible to place a file with an updated section in
# /etc/pipewire/pipewire-aes67.conf.d/ for system-wide changes or in
# ~/.config/pipewire/pipewire-aes67.conf.d/ for local changes.
#
context.properties = {
## Configure properties in the system.
#mem.warn-mlock = false
#mem.allow-mlock = true
#mem.mlock-all = false
#log.level = 2
#default.clock.quantum-limit = 8192
}
context.spa-libs = {
support.* = support/libspa-support
}
context.objects = [
# An example clock reading from /dev/ptp0. You can also specify the network interface name,
# pipewire will query the interface for the current active PHC index. Another option is to
# sync the ptp clock to CLOCK_TAI and then set clock.id = tai, keep in mind that tai may
# also be synced by a NTP client.
# The precedence is: device, interface, id
{ factory = spa-node-factory
args = {
factory.name = support.node.driver
node.name = PTP0-Driver
node.group = pipewire.ptp0
# This driver should only be used for network nodes marked with group
priority.driver = 100000
clock.name = "clock.system.ptp0"
### Please select the PTP hardware clock here
# Interface name is the preferred method of specifying the PHC
clock.interface = "eth0"
#clock.device = "/dev/ptp0"
#clock.id = tai
# Lower this in case of periodic out-of-sync
resync.ms = 1.5
object.export = true
}
}
]
context.modules = [
{ name = libpipewire-module-rt
args = {
nice.level = -11
#rt.prio = 83
#rt.time.soft = -1
#rt.time.hard = -1
}
flags = [ ifexists nofail ]
}
{ name = libpipewire-module-protocol-native }
{ name = libpipewire-module-client-node }
{ name = libpipewire-module-spa-node-factory }
{ name = libpipewire-module-adapter }
{ name = libpipewire-module-rtp-sap
args = {
### Please select the interface here
local.ifname = eth0
sap.ip = 239.255.255.255
sap.port = 9875
net.ttl = 32
net.loop = false
# If you use another PTPv2 daemon supporting management
# messages over a UNIX socket, specify its path here
ptp.management-socket = "/var/run/ptp4lro"
stream.rules = [
{
matches = [
{
rtp.session = "~.*"
}
]
actions = {
create-stream = {
node.virtual = false
media.class = "Audio/Source"
device.api = aes67
# You can adjust the latency buffering here. Use integer values only
sess.latency.msec = 3
node.group = pipewire.ptp0
}
}
},
{
matches = [
{
sess.sap.announce = true
}
]
actions = {
announce-stream = {}
}
}
]
}
},
{ name = libpipewire-module-rtp-sink
args = {
### Please select the interface here
local.ifname = eth0
### If you want to create multiple output streams, please copy the whole
### module-rtp-sink block, but change this multicast IP to another unused
### one keeping 239.69.x.x range unless you know you need another one
destination.ip = 239.69.150.243
destination.port = 5004
net.mtu = 1280
net.ttl = 32
net.loop = false
# These should typically be equal
# You can customize packet length, but 1 ms should work for every device
# Consult receiver documentation to ensure it supports the value you set
sess.min-ptime = 1
sess.max-ptime = 1
### Please change this, especially if you create multiple sinks
sess.name = "PipeWire RTP stream"
sess.media = "audio"
# This property is used if you aren't using ptp4l 4
sess.ts-refclk = "ptp=traceable"
sess.ts-offset = 0
# You can adjust the latency buffering here. Use integer values only
sess.latency.msec = 3
audio.format = "S24BE"
audio.rate = 48000
audio.channels = 2
# These channel names will be visible both to applications and AES67 receivers
node.channel-names = ["CH1", "CH2"]
stream.props = {
### Please change the sink name, this is necessary when you create multiple sinks
node.name = "rtp-sink"
media.class = "Audio/Sink"
node.virtual = false
device.api = aes67
sess.sap.announce = true
node.always-process = true
node.group = pipewire.ptp0
rtp.ntp = 0
rtp.fetch-ts-refclk = true
}
}
},
]

View File

@@ -0,0 +1,80 @@
# PulseAudio config file for PipeWire version "1.2.7" #
#
# Copy and edit this file in /etc/pipewire for system-wide changes
# or in ~/.config/pipewire for local changes.
#
# It is also possible to place a file with an updated section in
# /etc/pipewire/pipewire-pulse.conf.d/ for system-wide changes or in
# ~/.config/pipewire/pipewire-pulse.conf.d/ for local changes.
#
context.properties = {
## Configure properties in the system.
#mem.warn-mlock = false
#mem.allow-mlock = true
#mem.mlock-all = false
#log.level = 2
#default.clock.quantum-limit = 8192
}
context.spa-libs = {
audio.convert.* = audioconvert/libspa-audioconvert
support.* = support/libspa-support
}
context.modules = [
{ name = libpipewire-module-rt
args = {
nice.level = -11
#rt.prio = 83
#rt.time.soft = -1
#rt.time.hard = -1
}
flags = [ ifexists nofail ]
}
{ name = libpipewire-module-protocol-native }
{ name = libpipewire-module-client-node }
{ name = libpipewire-module-adapter }
{ name = libpipewire-module-avb
args = {
# contents of avb.properties can also be placed here
# to have config per server.
}
}
]
# Extra modules can be loaded here. Setup in default.pa can be moved here
context.exec = [
#{ path = "pactl" args = "load-module module-always-sink" }
]
stream.properties = {
#node.latency = 1024/48000
#node.autoconnect = true
#resample.quality = 4
#channelmix.normalize = false
#channelmix.mix-lfe = true
#channelmix.upmix = true
#channelmix.lfe-cutoff = 120
#channelmix.fc-cutoff = 6000
#channelmix.rear-delay = 12.0
#channelmix.stereo-widen = 0.1
#channelmix.hilbert-taps = 0
}
avb.properties = {
# the addresses this server listens on
#ifname = "eth0.2"
ifname = "enp3s0"
}
avb.properties.rules = [
{ matches = [ { cpu.vm.name = !null } ]
actions = {
update-props = {
# These overrides are only applied when running in a vm.
}
}
}
]

View File

@@ -0,0 +1,180 @@
# PulseAudio config file for PipeWire version "1.2.7" #
#
# Copy and edit this file in /etc/pipewire for system-wide changes
# or in ~/.config/pipewire for local changes.
#
# It is also possible to place a file with an updated section in
# /etc/pipewire/pipewire-pulse.conf.d/ for system-wide changes or in
# ~/.config/pipewire/pipewire-pulse.conf.d/ for local changes.
#
context.properties = {
## Configure properties in the system.
#mem.warn-mlock = false
#mem.allow-mlock = true
#mem.mlock-all = false
#log.level = 2
#default.clock.quantum-limit = 8192
}
context.spa-libs = {
audio.convert.* = audioconvert/libspa-audioconvert
support.* = support/libspa-support
}
context.modules = [
{ name = libpipewire-module-rt
args = {
nice.level = -11
#rt.prio = 83
#rt.time.soft = -1
#rt.time.hard = -1
#uclamp.min = 0
#uclamp.max = 1024
}
flags = [ ifexists nofail ]
}
{ name = libpipewire-module-protocol-native }
{ name = libpipewire-module-client-node }
{ name = libpipewire-module-adapter }
{ name = libpipewire-module-metadata }
{ name = libpipewire-module-protocol-pulse
args = {
# contents of pulse.properties can also be placed here
# to have config per server.
}
}
]
# Extra scripts can be started here. Setup in default.pa can be moved in
# a script or in pulse.cmd below
context.exec = [
#{ path = "pactl" args = "load-module module-always-sink" }
#{ path = "pactl" args = "upload-sample my-sample.wav my-sample" }
#{ path = "/usr/bin/sh" args = "~/.config/pipewire/default.pw" }
]
# Extra commands can be executed here.
# load-module : loads a module with args and flags
# args = "<module-name> <module-args>"
# ( flags = [ nofail ] )
pulse.cmd = [
{ cmd = "load-module" args = "module-always-sink" flags = [ ] }
{ cmd = "load-module" args = "module-device-manager" flags = [ ] }
{ cmd = "load-module" args = "module-device-restore" flags = [ ] }
{ cmd = "load-module" args = "module-stream-restore" flags = [ ] }
#{ cmd = "load-module" args = "module-switch-on-connect" }
#{ cmd = "load-module" args = "module-gsettings" flags = [ nofail ] }
]
stream.properties = {
#node.latency = 1024/48000
#node.autoconnect = true
#resample.quality = 4
#channelmix.normalize = false
#channelmix.mix-lfe = true
#channelmix.upmix = true
#channelmix.upmix-method = psd # none, simple
#channelmix.lfe-cutoff = 150
#channelmix.fc-cutoff = 12000
#channelmix.rear-delay = 12.0
#channelmix.stereo-widen = 0.0
#channelmix.hilbert-taps = 0
#dither.noise = 0
}
pulse.properties = {
# the addresses this server listens on
server.address = [
"unix:native"
#"unix:/tmp/something" # absolute paths may be used
#"tcp:4713" # IPv4 and IPv6 on all addresses
#"tcp:[::]:9999" # IPv6 on all addresses
#"tcp:127.0.0.1:8888" # IPv4 on a single address
#
#{ address = "tcp:4713" # address
# max-clients = 64 # maximum number of clients
# listen-backlog = 32 # backlog in the server listen queue
# client.access = "restricted" # permissions for clients
#}
]
#server.dbus-name = "org.pulseaudio.Server"
#pulse.allow-module-loading = true
#pulse.min.req = 128/48000 # 2.7ms
#pulse.default.req = 960/48000 # 20 milliseconds
#pulse.min.frag = 128/48000 # 2.7ms
#pulse.default.frag = 96000/48000 # 2 seconds
#pulse.default.tlength = 96000/48000 # 2 seconds
#pulse.min.quantum = 128/48000 # 2.7ms
#pulse.idle.timeout = 0 # don't pause after underruns
#pulse.default.format = F32
#pulse.default.position = [ FL FR ]
}
pulse.properties.rules = [
{ matches = [ { cpu.vm.name = !null } ]
actions = {
update-props = {
# These overrides are only applied when running in a vm.
pulse.min.quantum = 1024/48000 # 22ms
}
}
}
]
# client/stream specific properties
pulse.rules = [
{
matches = [
{
# all keys must match the value. ! negates. ~ starts regex.
#client.name = "Firefox"
#application.process.binary = "teams"
#application.name = "~speech-dispatcher.*"
}
]
actions = {
update-props = {
#node.latency = 512/48000
}
# Possible quirks:"
# force-s16-info forces sink and source info as S16 format
# remove-capture-dont-move removes the capture DONT_MOVE flag
# block-source-volume blocks updates to source volume
# block-sink-volume blocks updates to sink volume
#quirks = [ ]
}
}
{
# skype does not want to use devices that don't have an S16 sample format.
matches = [
{ application.process.binary = "teams" }
{ application.process.binary = "teams-insiders" }
{ application.process.binary = "skypeforlinux" }
]
actions = { quirks = [ force-s16-info ] }
}
{
# firefox marks the capture streams as don't move and then they
# can't be moved with pavucontrol or other tools.
matches = [ { application.process.binary = "firefox" } ]
actions = { quirks = [ remove-capture-dont-move ] }
}
{
# speech dispatcher asks for too small latency and then underruns.
matches = [ { application.name = "~speech-dispatcher.*" } ]
actions = {
update-props = {
pulse.min.req = 512/48000 # 10.6ms
pulse.min.quantum = 512/48000 # 10.6ms
pulse.idle.timeout = 5 # pause after 5 seconds of underrun
}
}
}
#{
# matches = [ { application.process.binary = "Discord" } ]
# actions = { quirks = [ block-source-volume ] }
#}
]

View File

@@ -0,0 +1,344 @@
# Daemon config file for PipeWire version "1.2.7" #
#
# Copy and edit this file in /etc/pipewire for system-wide changes
# or in ~/.config/pipewire for local changes.
#
# It is also possible to place a file with an updated section in
# /etc/pipewire/pipewire.conf.d/ for system-wide changes or in
# ~/.config/pipewire/pipewire.conf.d/ for local changes.
#
context.properties = {
## Configure properties in the system.
#library.name.system = support/libspa-support
#context.data-loop.library.name.system = support/libspa-support
#support.dbus = true
#link.max-buffers = 64
link.max-buffers = 16 # version < 3 clients can't handle more
#mem.warn-mlock = false
#mem.allow-mlock = true
#mem.mlock-all = false
#clock.power-of-two-quantum = true
#log.level = 2
#cpu.zero.denormals = false
#loop.rt-prio = -1 # -1 = use module-rt prio, 0 disable rt
#loop.class = data.rt
#thread.affinity = [ 0 1 ] # optional array of CPUs
#context.num-data-loops = 1 # -1 = num-cpus, 0 = no data loops
#
#context.data-loops = [
# { loop.rt-prio = -1
# loop.class = [ data.rt audio.rt ]
# #library.name.system = support/libspa-support
# thread.name = data-loop.0
# #thread.affinity = [ 0 1 ] # optional array of CPUs
# }
#]
core.daemon = true # listening for socket connections
core.name = pipewire-0 # core name and socket name
## Properties for the DSP configuration.
#default.clock.rate = 48000
default.clock.allowed-rates = [ 44100 48000 ] # This is not default because: https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-PipeWire#setting-global-sample-rate
#default.clock.quantum = 1024
#default.clock.min-quantum = 32
#default.clock.max-quantum = 2048
#default.clock.quantum-limit = 8192
#default.clock.quantum-floor = 4
#default.video.width = 640
#default.video.height = 480
#default.video.rate.num = 25
#default.video.rate.denom = 1
#
#settings.check-quantum = false
#settings.check-rate = false
# keys checked below to disable module loading
module.x11.bell = true
# enables autoloading of access module, when disabled an alternative
# access module needs to be loaded.
module.access = true
# enables autoloading of module-jackdbus-detect
module.jackdbus-detect = true
}
context.properties.rules = [
{ matches = [ { cpu.vm.name = !null } ]
actions = {
update-props = {
# These overrides are only applied when running in a vm.
default.clock.min-quantum = 1024
}
}
}
]
context.spa-libs = {
#<factory-name regex> = <library-name>
#
# Used to find spa factory names. It maps an spa factory name
# regular expression to a library name that should contain
# that factory.
#
audio.convert.* = audioconvert/libspa-audioconvert
avb.* = avb/libspa-avb
api.alsa.* = alsa/libspa-alsa
api.v4l2.* = v4l2/libspa-v4l2
api.libcamera.* = libcamera/libspa-libcamera
api.bluez5.* = bluez5/libspa-bluez5
api.vulkan.* = vulkan/libspa-vulkan
api.jack.* = jack/libspa-jack
support.* = support/libspa-support
video.convert.* = videoconvert/libspa-videoconvert
#videotestsrc = videotestsrc/libspa-videotestsrc
#audiotestsrc = audiotestsrc/libspa-audiotestsrc
}
context.modules = [
#{ name = <module-name>
# ( args = { <key> = <value> ... } )
# ( flags = [ ( ifexists ) ( nofail ) ] )
# ( condition = [ { <key> = <value> ... } ... ] )
#}
#
# Loads a module with the given parameters.
# If ifexists is given, the module is ignored when it is not found.
# If nofail is given, module initialization failures are ignored.
# If condition is given, the module is loaded only when the context
# properties all match the match rules.
#
# Uses realtime scheduling to boost the audio thread priorities. This uses
# RTKit if the user doesn't have permission to use regular realtime
# scheduling. You can also clamp utilisation values to improve scheduling
# on embedded and heterogeneous systems, e.g. Arm big.LITTLE devices.
{ name = libpipewire-module-rt
args = {
nice.level = -11
rt.prio = 88
#rt.time.soft = -1
#rt.time.hard = -1
#uclamp.min = 0
#uclamp.max = 1024
}
flags = [ ifexists nofail ]
}
# The native communication protocol.
{ name = libpipewire-module-protocol-native
args = {
# List of server Unix sockets, and optionally permissions
#sockets = [ { name = "pipewire-0" }, { name = "pipewire-0-manager" } ]
}
}
# The profile module. Allows application to access profiler
# and performance data. It provides an interface that is used
# by pw-top and pw-profiler.
{ name = libpipewire-module-profiler }
# Allows applications to create metadata objects. It creates
# a factory for Metadata objects.
{ name = libpipewire-module-metadata }
# Creates a factory for making devices that run in the
# context of the PipeWire server.
{ name = libpipewire-module-spa-device-factory }
# Creates a factory for making nodes that run in the
# context of the PipeWire server.
{ name = libpipewire-module-spa-node-factory }
# Allows creating nodes that run in the context of the
# client. Is used by all clients that want to provide
# data to PipeWire.
{ name = libpipewire-module-client-node }
# Allows creating devices that run in the context of the
# client. Is used by the session manager.
{ name = libpipewire-module-client-device }
# The portal module monitors the PID of the portal process
# and tags connections with the same PID as portal
# connections.
{ name = libpipewire-module-portal
flags = [ ifexists nofail ]
}
# The access module can perform access checks and block
# new clients.
{ name = libpipewire-module-access
args = {
# Socket-specific access permissions
#access.socket = { pipewire-0 = "default", pipewire-0-manager = "unrestricted" }
# Deprecated legacy mode (not socket-based),
# for now enabled by default if access.socket is not specified
#access.legacy = true
}
condition = [ { module.access = true } ]
}
# Makes a factory for wrapping nodes in an adapter with a
# converter and resampler.
{ name = libpipewire-module-adapter }
# Makes a factory for creating links between ports.
{ name = libpipewire-module-link-factory }
# Provides factories to make session manager objects.
{ name = libpipewire-module-session-manager }
# Use libcanberra to play X11 Bell
{ name = libpipewire-module-x11-bell
args = {
#sink.name = "@DEFAULT_SINK@"
#sample.name = "bell-window-system"
#x11.display = null
#x11.xauthority = null
}
flags = [ ifexists nofail ]
condition = [ { module.x11.bell = true } ]
}
{ name = libpipewire-module-jackdbus-detect
args = {
#jack.library = libjack.so.0
#jack.server = null
#jack.client-name = PipeWire
#jack.connect = true
#tunnel.mode = duplex # source|sink|duplex
source.props = {
#audio.channels = 2
#midi.ports = 1
#audio.position = [ FL FR ]
# extra sink properties
}
sink.props = {
#audio.channels = 2
#midi.ports = 1
#audio.position = [ FL FR ]
# extra sink properties
}
}
flags = [ ifexists nofail ]
condition = [ { module.jackdbus-detect = true } ]
}
]
context.objects = [
#{ factory = <factory-name>
# ( args = { <key> = <value> ... } )
# ( flags = [ ( nofail ) ] )
# ( condition = [ { <key> = <value> ... } ... ] )
#}
#
# Creates an object from a PipeWire factory with the given parameters.
# If nofail is given, errors are ignored (and no object is created).
# If condition is given, the object is created only when the context properties
# all match the match rules.
#
#{ factory = spa-node-factory args = { factory.name = videotestsrc node.name = videotestsrc node.description = videotestsrc "Spa:Pod:Object:Param:Props:patternType" = 1 } }
#{ factory = spa-device-factory args = { factory.name = api.jack.device foo=bar } flags = [ nofail ] }
#{ factory = spa-device-factory args = { factory.name = api.alsa.enum.udev } }
#{ factory = spa-node-factory args = { factory.name = api.alsa.seq.bridge node.name = Internal-MIDI-Bridge } }
#{ factory = adapter args = { factory.name = audiotestsrc node.name = my-test node.description = audiotestsrc } }
#{ factory = spa-node-factory args = { factory.name = api.vulkan.compute.source node.name = my-compute-source } }
# A default dummy driver. This handles nodes marked with the "node.always-process"
# property when no other driver is currently active. JACK clients need this.
{ factory = spa-node-factory
args = {
factory.name = support.node.driver
node.name = Dummy-Driver
node.group = pipewire.dummy
node.sync-group = sync.dummy
priority.driver = 200000
#clock.id = monotonic # realtime | tai | monotonic-raw | boottime
#clock.name = "clock.system.monotonic"
}
}
{ factory = spa-node-factory
args = {
factory.name = support.node.driver
node.name = Freewheel-Driver
priority.driver = 190000
node.group = pipewire.freewheel
node.sync-group = sync.dummy
node.freewheel = true
#freewheel.wait = 10
}
}
# This creates a new Source node. It will have input ports
# that you can link, to provide audio for this source.
#{ factory = adapter
# args = {
# factory.name = support.null-audio-sink
# node.name = "my-mic"
# node.description = "Microphone"
# media.class = "Audio/Source/Virtual"
# audio.position = "FL,FR"
# monitor.passthrough = true
# }
#}
# This creates a single PCM source device for the given
# alsa device path hw:0. You can change source to sink
# to make a sink in the same way.
#{ factory = adapter
# args = {
# factory.name = api.alsa.pcm.source
# node.name = "alsa-source"
# node.description = "PCM Source"
# media.class = "Audio/Source"
# api.alsa.path = "hw:0"
# api.alsa.period-size = 1024
# api.alsa.headroom = 0
# api.alsa.disable-mmap = false
# api.alsa.disable-batch = false
# audio.format = "S16LE"
# audio.rate = 48000
# audio.channels = 2
# audio.position = "FL,FR"
# }
#}
# Use the metadata factory to create metadata and some default values.
#{ factory = metadata
# args = {
# metadata.name = my-metadata
# metadata.values = [
# { key = default.audio.sink value = { name = somesink } }
# { key = default.audio.source value = { name = somesource } }
# ]
# }
#}
]
context.exec = [
#{ path = <program-name>
# ( args = "<arguments>" | [ <arg1> <arg2> ... ] )
# ( condition = [ { <key> = <value> ... } ... ] )
#}
#
# Execute the given program with arguments.
# If condition is given, the program is executed only when the context
# properties all match the match rules.
#
# You can optionally start the session manager here,
# but it is better to start it as a systemd service.
# Run the session manager with -h for options.
#
#{ path = "/usr/bin/pipewire-media-session" args = ""
# condition = [ { exec.session-manager = null } { exec.session-manager = true } ] }
#
# You can optionally start the pulseaudio-server here as well
# but it is better to start it as a systemd service.
# It can be interesting to start another daemon here that listens
# on another address with the -a option (eg. -a tcp:4713).
#
#{ path = "/usr/bin/pipewire" args = [ "-c" "pipewire-pulse.conf" ]
# condition = [ { exec.pipewire-pulse = null } { exec.pipewire-pulse = true } ] }
]

View File

@@ -0,0 +1,19 @@
context.objects = [
{ factory = adapter
args = {
factory.name = support.null-audio-sink
node.name = "blackhole-sink-1"
node.description = "Blackhole Sink 1"
media.class = Audio/Sink
audio.position = [ FL FR ]
monitor.channel-volumes = true
monitor.passthrough = true
adapter.auto-port-config = {
mode = dsp
monitor = true
position = preserve
}
}
}
]

View File

@@ -0,0 +1,18 @@
context.objects = [
{ factory = adapter
args = {
factory.name = support.null-audio-sink
node.name = "virtual-sink-1"
node.description = "Virtual Sink 1"
media.class = Audio/Sink
audio.position = [ FL FR ]
monitor.channel-volumes = true
monitor.passthrough = true
adapter.auto-port-config = {
mode = dsp
monitor = true
position = preserve
}
}
}
]

View File

@@ -0,0 +1,18 @@
context.objects = [
{ factory = adapter
args = {
factory.name = support.null-audio-sink
node.name = "virtual-sink-2"
node.description = "Virtual Sink 2"
media.class = Audio/Sink
audio.position = [ FL FR ]
monitor.channel-volumes = true
monitor.passthrough = true
adapter.auto-port-config = {
mode = dsp
monitor = true
position = preserve
}
}
}
]

View File

@@ -0,0 +1,16 @@
context.modules = [{
name = libpipewire-module-loopback
args = {
audio.position = [ FL FR ]
capture.props = {
media.class = "Audio/Sink"
node.name = "application-loopback-1-sink"
node.description = "Application Loopback 1 Sink"
}
playback.props = {
media.class = "Stream/Output/Audio"
node.name = "application-loopback-1-playback"
node.description = "Application Loopback 1 Playback"
}
}
}]

View File

@@ -0,0 +1,16 @@
context.modules = [{
name = libpipewire-module-loopback
args = {
audio.position = [ FL FR ]
capture.props = {
media.class = "Audio/Sink"
node.name = "application-loopback-2-sink"
node.description = "Application Loopback 2 Sink"
}
playback.props = {
media.class = "Stream/Output/Audio"
node.name = "application-loopback-2-playback"
node.description = "Application Loopback 2 Playback"
}
}
}]

View File

@@ -0,0 +1,20 @@
context.modules = [
{
name = libpipewire-module-loopback
args = {
audio.position = [ FL FR ]
capture.props = {
media.class = "Stream/Input/Audio"
node.name = "device-loopback-1-recording"
node.description = "Device Loopback 1 Recording"
}
playback.props = {
media.class = "Stream/Output/Audio"
node.name = "device-loopback-1-playback"
node.description = "Device Loopback 1 Playback"
}
audio.volume = 0.5
audio.mute = true
}
}
]

View File

@@ -0,0 +1,20 @@
context.modules = [
{
name = libpipewire-module-loopback
args = {
audio.position = [ FL FR ]
capture.props = {
media.class = "Stream/Input/Audio"
node.name = "device-loopback-2-recording"
node.description = "Device Loopback 2 Recording"
}
playback.props = {
media.class = "Stream/Output/Audio"
node.name = "device-loopback-2-playback"
node.description = "Device Loopback 2 Playback"
}
audio.volume = 0.5
audio.mute = true
}
}
]

View File

@@ -0,0 +1,20 @@
context.modules = [
{
name = libpipewire-module-loopback
args = {
audio.position = [ FL FR ]
capture.props = {
media.class = "Stream/Input/Audio"
node.name = "virtual-source-1-recording"
node.description = "Virtual Source 1 Recording"
}
playback.props = {
media.class = "Audio/Source"
node.name = "virtual-source-1-source"
node.description = "Virtual Source 1 Source"
}
}
}
]

View File

@@ -0,0 +1,20 @@
context.modules = [
{
name = libpipewire-module-loopback
args = {
audio.position = [ FL FR ]
capture.props = {
media.class = "Stream/Input/Audio"
node.name = "virtual-source-2-recording"
node.description = "Virtual Source 2 Recording"
}
playback.props = {
media.class = "Audio/Source"
node.name = "virtual-source-2-source"
node.description = "Virtual Source 2 Source"
}
}
}
]

View File

@@ -217,11 +217,6 @@ fileviewer *.epub,*.kepub
\ %pc
\ vifmimg clear
" svg
filextype *.svg
\ {View in inkview}
\ inkview %f,
" Audio
filetype *.wav,*.mp3,*.flac,*.m4a,*.wma,*.ape,*.ac3,*.og[agx],*.spx,*.opus,*.aac
\ {Play using mpv}
@@ -266,7 +261,7 @@ filetype *.[1-8] man ./%c
fileviewer *.[1-8] man ./%c | col -b
" Images
filextype *.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm,*.webp
filextype *.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm,*.webp,*.svg,*.svgz
\ {View in imv}
\ imv %c %d &,
fileviewer <image/*>
@@ -481,6 +476,19 @@ vnoremap rr :!lp %f<cr>
nnoremap cn :!cleanname %f<cr>
vnoremap cn :!cleanname %f<cr>
" Improved pane navigation for normal and view mode
nnoremap <C-h> <C-w>h
nnoremap <C-l> <C-w>l
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-x> <C-w>x
qnoremap <C-h> <C-w>h
qnoremap <C-l> <C-w>l
qnoremap <C-j> <C-w>j
qnoremap <C-k> <C-w>k
qnoremap <C-x> <C-w>x
" ------------------------------------------------------------------------------
" Various customization examples

View File

@@ -13,19 +13,4 @@ dunst &
dunstctl rule dnd_low disable &
dunstctl rule dnd_normal disable &
swhks && swhkd &
pavucontrol &
easyeffects --gapplication-service &
nextcloud &
keepassxc &
zen-browser &
discord &
signal-desktop &
Telegram &
threema-beta &
thunderbird &
# monitor toggle &
# touchpad off &
# xset r rate 300 50 & # Speed xrate up
# redshift & # redshift for saving your eyes
easyeffects &

View File

@@ -0,0 +1,23 @@
# ALSA node property overrides for virtual machine hardware
monitor.alsa.rules = [
# Generic PCI cards on any VM type
{
matches = [
{
node.name = "~alsa_input.pci.*"
cpu.vm.name = "~.*"
}
{
node.name = "~alsa_output.pci.*"
cpu.vm.name = "~.*"
}
]
actions = {
update-props = {
api.alsa.period-size = 1024
api.alsa.headroom = 2048
}
}
}
]

View File

@@ -11,4 +11,4 @@ sxhkd & # for shortcuts
dunstctl rule dnd_low disable & # disable dnd for low urgencies
dunstctl rule dnd_normal disable & # disable dnd for normal urgencies
xss-lock -- slock & # enable locking the screen upon sleep
easyeffects --gapplication-service & # start audio server
easyeffects & # start audio server

View File

@@ -1,7 +1,7 @@
set statusbar-h-padding 0
set statusbar-v-padding 0
set guioptions none
set page-padding 1
#set page-padding 1
map u scroll full-up
map d scroll full-down
map D toggle_page_mode

2
.dmrc
View File

@@ -1,2 +1,2 @@
[Desktop]
Session=xinitrc
Session=default

View File

@@ -15,7 +15,7 @@ vipercmd="carbon" #"silicon"
cd "$dir" || exit
textype() { \
command="pdflatex"
command="pdflatex --shell-escape"
( sed 5q "$file" | grep -i -q 'xelatex' ) && command="xelatex"
$command --output-directory="$dir" "$base" &&
grep -i addbibresource "$file" >/dev/null &&

View File

@@ -4,53 +4,55 @@ PCACHE="$HOME/.cache/vifm/thumbnail.$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' --
export PCACHE="${PCACHE%% *}"
pclear() {
printf '{"action": "remove", "identifier": "vifm-preview"}\n' > "$FIFO_UEBERZUG"
printf '{"action": "remove", "identifier": "vifm-preview"}\n' >"$FIFO_UEBERZUG"
}
image() {
printf '{"action": "add", "identifier": "vifm-preview", "x": "%s", "y": "%s", "width": "%s", "height": "%s", "scaler": "contain", "path": "%s"}\n' "$2" "$3" "$4" "$5" "$6" > "$FIFO_UEBERZUG"
printf '{"action": "add", "identifier": "vifm-preview", "x": "%s", "y": "%s", "width": "%s", "height": "%s", "scaler": "contain", "path": "%s"}\n' "$2" "$3" "$4" "$5" "$6" >"$FIFO_UEBERZUG"
}
main() {
case "$1" in
"clear")
pclear "$@"
;;
"draw")
FILE="$PWD/$6"
image "$1" "$2" "$3" "$4" "$5" "$FILE"
;;
"video")
[ ! -f "$PCACHE" ] && \
ffmpegthumbnailer -i "$6" -o "${PCACHE}.jpg" -s 0 -q 5
image "$1" "$2" "$3" "$4" "$5" "${PCACHE}.jpg"
;;
"epub")
[ ! -f "$PCACHE" ] && \
epub-thumbnailer "$6" "$PCACHE" 1024
image "$1" "$2" "$3" "$4" "$5" "$PCACHE"
;;
"pdf")
[ ! -f "${PCACHE}.jpg" ] && \
pdftoppm -jpeg -f 1 -singlefile "$6" "$PCACHE"
image "$1" "$2" "$3" "$4" "$5" "${PCACHE}.jpg"
;;
"djvu")
[ ! -f "${PCACHE}.jpg" ] && \
ddjvu -format=tiff -quality=90 -page=1 "$6" "$PCACHE.jpg"
image "$1" "$2" "$3" "$4" "$5" "${PCACHE}.jpg"
;;
"audio")
[ ! -f "${PCACHE}.jpg" ] && \
ffmpeg -hide_banner -i "$6" "${PCACHE}.jpg" -y >/dev/null
image "$1" "$2" "$3" "$4" "$5" "${PCACHE}.jpg"
;;
"font")
[ ! -f "${PCACHE}.jpg" ] && \
fontpreview -i "$6" -o "${PCACHE}.jpg"
image "$1" "$2" "$3" "$4" "$5" "${PCACHE}.jpg"
;;
*)
"clear")
pclear "$@"
;;
"draw")
FILE="$PWD/$6"
TMP="${PCACHE}.jpg"
convert "$FILE" -background white -alpha remove -alpha off "$TMP" 2>/dev/null || cp "$FILE" "$TMP"
image "$1" "$2" "$3" "$4" "$5" "$TMP"
;;
"video")
[ ! -f "$PCACHE" ] &&
ffmpegthumbnailer -i "$6" -o "${PCACHE}.jpg" -s 0 -q 5
image "$1" "$2" "$3" "$4" "$5" "${PCACHE}.jpg"
;;
"epub")
[ ! -f "$PCACHE" ] &&
epub-thumbnailer "$6" "$PCACHE" 1024
image "$1" "$2" "$3" "$4" "$5" "$PCACHE"
;;
"pdf")
[ ! -f "${PCACHE}.jpg" ] &&
pdftoppm -jpeg -f 1 -singlefile "$6" "$PCACHE"
image "$1" "$2" "$3" "$4" "$5" "${PCACHE}.jpg"
;;
"djvu")
[ ! -f "${PCACHE}.jpg" ] &&
ddjvu -format=tiff -quality=90 -page=1 "$6" "$PCACHE.jpg"
image "$1" "$2" "$3" "$4" "$5" "${PCACHE}.jpg"
;;
"audio")
[ ! -f "${PCACHE}.jpg" ] &&
ffmpeg -hide_banner -i "$6" "${PCACHE}.jpg" -y >/dev/null
image "$1" "$2" "$3" "$4" "$5" "${PCACHE}.jpg"
;;
"font")
[ ! -f "${PCACHE}.jpg" ] &&
fontpreview -i "$6" -o "${PCACHE}.jpg"
image "$1" "$2" "$3" "$4" "$5" "${PCACHE}.jpg"
;;
*) ;;
esac
}
main "$@"

View File

@@ -1,4 +1,4 @@
[Desktop Entry]
Type=Application
Name=Image viewer
Exec=sxiv -a %u
Exec=imv %u