Compare commits
2 commits
c919bf81ba
...
34540b02af
Author | SHA1 | Date | |
---|---|---|---|
|
34540b02af | ||
|
24928350fe |
21 changed files with 1286 additions and 30 deletions
1
.config/dinit.d/audio.d/pipewire
Symbolic link
1
.config/dinit.d/audio.d/pipewire
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
../pipewire
|
1
.config/dinit.d/audio.d/pipewire-pulse
Symbolic link
1
.config/dinit.d/audio.d/pipewire-pulse
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
../pipewire-pulse
|
1
.config/dinit.d/audio.d/wireplumber
Symbolic link
1
.config/dinit.d/audio.d/wireplumber
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
../wireplumber
|
|
@ -1,5 +1,2 @@
|
||||||
type = internal
|
type = internal
|
||||||
depends-on = pipewire
|
waits-for.d = audio.d
|
||||||
depends-on = pipewire-pulse
|
|
||||||
depends-on = wireplumber
|
|
||||||
restart = yes
|
|
||||||
|
|
3
.config/dinit.d/env-sv
Normal file
3
.config/dinit.d/env-sv
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
type = scripted
|
||||||
|
command = env
|
||||||
|
log-type = buffer
|
0
.config/dinit.d/xdg-portal.target
Normal file
0
.config/dinit.d/xdg-portal.target
Normal file
|
@ -11,7 +11,7 @@ shell=/bin/zsh
|
||||||
# title=foot
|
# title=foot
|
||||||
# locked-title=no
|
# locked-title=no
|
||||||
|
|
||||||
font=ProFontWindowsNerdFontMono:size=11.5
|
font=UbuntuMono:size=12
|
||||||
# font-bold=<bold variant of regular font>
|
# font-bold=<bold variant of regular font>
|
||||||
# font-italic=<italic variant of regular font>
|
# font-italic=<italic variant of regular font>
|
||||||
# font-bold-italic=<bold+italic variant of regular font>
|
# font-bold-italic=<bold+italic variant of regular font>
|
||||||
|
@ -48,7 +48,7 @@ initial-window-size-pixels=740x420
|
||||||
# command-focused=no
|
# command-focused=no
|
||||||
|
|
||||||
[scrollback]
|
[scrollback]
|
||||||
# lines=1000
|
lines=2000
|
||||||
# multiplier=3.0
|
# multiplier=3.0
|
||||||
# indicator-position=relative
|
# indicator-position=relative
|
||||||
# indicator-format=
|
# indicator-format=
|
||||||
|
|
|
@ -7,7 +7,7 @@ width=0
|
||||||
|
|
||||||
[main]
|
[main]
|
||||||
dpi-aware=no
|
dpi-aware=no
|
||||||
font=ProFontWindowsNerdFontMono:size=18
|
font=UbuntuMono:size=16
|
||||||
horizontal-pad=10
|
horizontal-pad=10
|
||||||
icon-theme=Papirus-Dark
|
icon-theme=Papirus-Dark
|
||||||
image-size-ratio=0.0
|
image-size-ratio=0.0
|
||||||
|
|
18
.config/gtklock/style.css
Normal file
18
.config/gtklock/style.css
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
@import url("/home/n/.cache/wal/colors-waybar.css");
|
||||||
|
|
||||||
|
* {
|
||||||
|
color: @foreground;
|
||||||
|
background-color: @background;
|
||||||
|
font-family: "Roboto";
|
||||||
|
}
|
||||||
|
|
||||||
|
#window-box {
|
||||||
|
padding: 10px;
|
||||||
|
border-radius: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
window {
|
||||||
|
background-image: url("/home/n/.cache/current_wallpaper.png");
|
||||||
|
background-position: center;
|
||||||
|
background-size: cover;
|
||||||
|
}
|
|
@ -1,9 +1,9 @@
|
||||||
font=ProFontWindowsNerdFontMono 12
|
font=Ubuntu 10
|
||||||
default-timeout=8000
|
default-timeout=8000
|
||||||
margin=8
|
margin=8
|
||||||
border-size=2
|
border-size=2
|
||||||
icon-path=/usr/share/icons/Papirus-Dark
|
icon-path=/usr/share/icons/Papirus-Dark
|
||||||
|
|
||||||
text-color=#c5c5c4
|
text-color=#c0c1c2
|
||||||
background-color=#181916
|
background-color=#03070C
|
||||||
border-color=#3764A3
|
border-color=#939270
|
||||||
|
|
|
@ -28,4 +28,5 @@ cmp.setup({
|
||||||
})
|
})
|
||||||
|
|
||||||
require('lspconfig').clangd.setup({capabilities=capabilities})
|
require('lspconfig').clangd.setup({capabilities=capabilities})
|
||||||
|
require('lspconfig').zls.setup({capabilities=capabilities})
|
||||||
require('lspconfig').pylsp.setup({capabilities=capabilities})
|
require('lspconfig').pylsp.setup({capabilities=capabilities})
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
{
|
{
|
||||||
"LuaSnip": { "branch": "master", "commit": "03c8e67eb7293c404845b3982db895d59c0d1538" },
|
"LuaSnip": { "branch": "master", "commit": "03c8e67eb7293c404845b3982db895d59c0d1538" },
|
||||||
"cmp-nvim-lsp": { "branch": "main", "commit": "99290b3ec1322070bcfb9e846450a46f6efa50f0" },
|
"cmp-nvim-lsp": { "branch": "main", "commit": "99290b3ec1322070bcfb9e846450a46f6efa50f0" },
|
||||||
"lazy.nvim": { "branch": "main", "commit": "7e6c863bc7563efbdd757a310d17ebc95166cef3" },
|
"lazy.nvim": { "branch": "main", "commit": "d8f26efd456190241afd1b0f5235fe6fdba13d4a" },
|
||||||
"nvim-cmp": { "branch": "main", "commit": "b555203ce4bd7ff6192e759af3362f9d217e8c89" },
|
"nvim-cmp": { "branch": "main", "commit": "8c82d0bd31299dbff7f8e780f5e06d2283de9678" },
|
||||||
"nvim-lspconfig": { "branch": "master", "commit": "ff2b85abaa810f6611233dbe6d31c07510ebf43d" },
|
"nvim-lspconfig": { "branch": "master", "commit": "339ccc81e08793c3af9b83882a6ebd90c9cc0d3b" },
|
||||||
"pywal16.nvim": { "branch": "main", "commit": "446ae689c8e4569b9537cddadb28d6e939658ea5" }
|
"pywal16.nvim": { "branch": "main", "commit": "446ae689c8e4569b9537cddadb28d6e939658ea5" }
|
||||||
}
|
}
|
||||||
|
|
344
.config/pipewire/pipewire.conf
Normal file
344
.config/pipewire/pipewire.conf
Normal file
|
@ -0,0 +1,344 @@
|
||||||
|
# Daemon config file for PipeWire version "1.2.6" #
|
||||||
|
#
|
||||||
|
# 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 = [ 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 = 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 } ] }
|
||||||
|
]
|
|
@ -7,6 +7,7 @@ riverctl map normal Super+Control S spawn 'pkill -9 slurp || grim -g "$(slurp)"
|
||||||
riverctl map normal Super Print spawn 'grim | wl-copy -t image/png'
|
riverctl map normal Super Print spawn 'grim | wl-copy -t image/png'
|
||||||
riverctl map normal Super V spawn pavucontrol
|
riverctl map normal Super V spawn pavucontrol
|
||||||
riverctl map normal Super Escape spawn 'gtklock -d'
|
riverctl map normal Super Escape spawn 'gtklock -d'
|
||||||
|
riverctl map normal Super E spawn nemo
|
||||||
|
|
||||||
# Super+Q to close the focused view
|
# Super+Q to close the focused view
|
||||||
riverctl map normal Super Slash close
|
riverctl map normal Super Slash close
|
||||||
|
@ -31,8 +32,8 @@ riverctl map normal Super Period focus-output next
|
||||||
riverctl map normal Super Comma focus-output previous
|
riverctl map normal Super Comma focus-output previous
|
||||||
|
|
||||||
# Super+Shift+{Period,Comma} to send the focused view to the next/previous output
|
# Super+Shift+{Period,Comma} to send the focused view to the next/previous output
|
||||||
riverctl map normal Super+Shift Period send-to-output -current-tags next
|
riverctl map normal Super+Shift Period send-to-output next
|
||||||
riverctl map normal Super+Shift Comma send-to-output -current-tags previous
|
riverctl map normal Super+Shift Comma send-to-output previous
|
||||||
|
|
||||||
# Super+Alt+{H,J,K,L} to move views
|
# Super+Alt+{H,J,K,L} to move views
|
||||||
riverctl map normal Super+Alt H move left 100
|
riverctl map normal Super+Alt H move left 100
|
||||||
|
|
|
@ -23,10 +23,6 @@ riverctl declare-mode passthrough
|
||||||
riverctl default-layout bsp-layout
|
riverctl default-layout bsp-layout
|
||||||
river-bsp-layout --inner-gap 2 --outer-gap 4 --split-perc 0.5 --og-top 0 &
|
river-bsp-layout --inner-gap 2 --outer-gap 4 --split-perc 0.5 --og-top 0 &
|
||||||
|
|
||||||
# Set focus-follow and cursos-warp
|
|
||||||
riverctl focus-follows-cursor normal
|
|
||||||
riverctl set-cursor-warp on-output-change
|
|
||||||
|
|
||||||
|
|
||||||
# --- Device input settings --------------
|
# --- Device input settings --------------
|
||||||
|
|
||||||
|
@ -38,3 +34,6 @@ riverctl set-repeat 50 300
|
||||||
|
|
||||||
# Natural scroll
|
# Natural scroll
|
||||||
riverctl input pointer-1160-4639-DELL08B8:00_0488:121F_Touchpad natural-scroll enabled
|
riverctl input pointer-1160-4639-DELL08B8:00_0488:121F_Touchpad natural-scroll enabled
|
||||||
|
|
||||||
|
# Set focus-follow
|
||||||
|
riverctl focus-follows-cursor normal
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
font=ProFontWindowsNerdFontMono 12
|
font=Ubuntu 10
|
||||||
default-timeout=8000
|
default-timeout=8000
|
||||||
margin=8
|
margin=8
|
||||||
border-size=2
|
border-size=2
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
@import url("/home/n/.cache/wal/colors-waybar.css");
|
@import url("/home/n/.cache/wal/colors-waybar.css");
|
||||||
|
|
||||||
* {
|
* {
|
||||||
font-family: "ProFontWindowsNerdFontMono";
|
font-family: "UbuntuMono";
|
||||||
font-size: 10px;
|
font-size: 16px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
color: @foreground;
|
color: @foreground;
|
||||||
|
@ -34,20 +34,17 @@ tooltip label {
|
||||||
}
|
}
|
||||||
|
|
||||||
#battery {
|
#battery {
|
||||||
font-size: 16px;
|
|
||||||
color: @foreground;
|
color: @foreground;
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#clock {
|
#clock {
|
||||||
font-size: 16px;
|
|
||||||
min-width: 50px;
|
min-width: 50px;
|
||||||
color: @foreground;
|
color: @foreground;
|
||||||
}
|
}
|
||||||
|
|
||||||
#custom-notification {
|
#custom-notification {
|
||||||
font-family: "NotoMonoNerdFont-Regular";
|
font-family: "NotoMonoNerdFont-Regular";
|
||||||
font-size: 16px;
|
|
||||||
color: @foreground;
|
color: @foreground;
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
|
@ -61,7 +58,6 @@ tooltip label {
|
||||||
}
|
}
|
||||||
|
|
||||||
#tags * {
|
#tags * {
|
||||||
font-size: 16px;
|
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
865
.config/wireplumber/wireplumber.conf
Normal file
865
.config/wireplumber/wireplumber.conf
Normal file
|
@ -0,0 +1,865 @@
|
||||||
|
## The WirePlumber configuration
|
||||||
|
|
||||||
|
context.spa-libs = {
|
||||||
|
## SPA factory name to library mappings
|
||||||
|
## Used to find SPA factory names. It maps a SPA factory name regular
|
||||||
|
## expression to a library name that should contain that factory.
|
||||||
|
##
|
||||||
|
## Syntax:
|
||||||
|
## <factory-name regex> = <library-name>
|
||||||
|
|
||||||
|
api.alsa.* = alsa/libspa-alsa
|
||||||
|
api.bluez5.* = bluez5/libspa-bluez5
|
||||||
|
api.v4l2.* = v4l2/libspa-v4l2
|
||||||
|
api.libcamera.* = libcamera/libspa-libcamera
|
||||||
|
audio.convert.* = audioconvert/libspa-audioconvert
|
||||||
|
support.* = support/libspa-support
|
||||||
|
}
|
||||||
|
|
||||||
|
context.modules = [
|
||||||
|
## PipeWire modules to load.
|
||||||
|
## These modules are loaded before a connection to pipewire is attempted.
|
||||||
|
## This section should be kept minimal and load only the modules that are
|
||||||
|
## necessary for the protocol to work.
|
||||||
|
##
|
||||||
|
## If ifexists is given, the module is ignored when it is not found.
|
||||||
|
## If nofail is given, module initialization failures are ignored.
|
||||||
|
##
|
||||||
|
## Syntax:
|
||||||
|
## {
|
||||||
|
## name = <module-name>
|
||||||
|
## [ args = { <key> = <value> ... } ]
|
||||||
|
## [ flags = [ ifexists | nofail ] ]
|
||||||
|
## }
|
||||||
|
|
||||||
|
# Uses RTKit to boost the data thread priority. Also allows clamping
|
||||||
|
# of utilisation when using the Completely Fair Scheduler on Linux.
|
||||||
|
{
|
||||||
|
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 }
|
||||||
|
|
||||||
|
## Support for metadata objects
|
||||||
|
{ name = libpipewire-module-metadata }
|
||||||
|
]
|
||||||
|
|
||||||
|
wireplumber.profiles = {
|
||||||
|
## Syntax:
|
||||||
|
## <profile> = {
|
||||||
|
## inherits = [ other, profile, names ] # optional
|
||||||
|
## # optional is the default
|
||||||
|
## <feature name> = [ required | optional | disabled ]
|
||||||
|
## ...
|
||||||
|
## }
|
||||||
|
|
||||||
|
# The default profile
|
||||||
|
main = {
|
||||||
|
inherits = [ base ]
|
||||||
|
|
||||||
|
metadata.sm-settings = required
|
||||||
|
metadata.sm-objects = required
|
||||||
|
|
||||||
|
policy.standard = required
|
||||||
|
|
||||||
|
hardware.audio = required
|
||||||
|
hardware.bluetooth = required
|
||||||
|
hardware.video-capture = required
|
||||||
|
}
|
||||||
|
|
||||||
|
# Profile for running on a systemwide level
|
||||||
|
main-systemwide = {
|
||||||
|
inherits = [ main, mixin.systemwide-session ]
|
||||||
|
}
|
||||||
|
|
||||||
|
# Typical profile for embedded use cases, systemwide without maintaining state
|
||||||
|
main-embedded = {
|
||||||
|
inherits = [ main, mixin.systemwide-session, mixin.stateless ]
|
||||||
|
}
|
||||||
|
|
||||||
|
# Profile for video-only use cases (camera & screen sharing)
|
||||||
|
video-only = {
|
||||||
|
inherits = [ main ]
|
||||||
|
hardware.audio = disabled
|
||||||
|
hardware.bluetooth = disabled
|
||||||
|
}
|
||||||
|
|
||||||
|
##
|
||||||
|
## Profiles for multi-instance setup
|
||||||
|
##
|
||||||
|
|
||||||
|
policy = {
|
||||||
|
inherits = [ base ]
|
||||||
|
metadata.sm-settings = required
|
||||||
|
metadata.sm-objects = required
|
||||||
|
policy.standard = required
|
||||||
|
}
|
||||||
|
|
||||||
|
audio = {
|
||||||
|
inherits = [ base ]
|
||||||
|
hardware.audio = required
|
||||||
|
}
|
||||||
|
|
||||||
|
bluetooth = {
|
||||||
|
inherits = [ base ]
|
||||||
|
hardware.bluetooth = required
|
||||||
|
}
|
||||||
|
|
||||||
|
video-capture = {
|
||||||
|
inherits = [ base ]
|
||||||
|
hardware.video-capture = required
|
||||||
|
}
|
||||||
|
|
||||||
|
##
|
||||||
|
## The following are not complete profiles, but blocks that can be inherited
|
||||||
|
##
|
||||||
|
|
||||||
|
# The bare minimum that all instances should have by default
|
||||||
|
base = {
|
||||||
|
check.no-media-session = required
|
||||||
|
support.settings = required
|
||||||
|
support.log-settings = required
|
||||||
|
}
|
||||||
|
|
||||||
|
# Disable features that are meant only for user sessions
|
||||||
|
mixin.systemwide-session = {
|
||||||
|
support.reserve-device = disabled
|
||||||
|
monitor.alsa.reserve-device = disabled
|
||||||
|
|
||||||
|
support.portal-permissionstore = disabled
|
||||||
|
script.client.access-portal = disabled
|
||||||
|
|
||||||
|
support.logind = disabled
|
||||||
|
monitor.bluez.seat-monitoring = disabled
|
||||||
|
}
|
||||||
|
|
||||||
|
# Disable storing/restoring runtime state information regarding
|
||||||
|
# default nodes selection, profiles, routes and stream volume / properties
|
||||||
|
# This makes sense for embedded systems that should always reboot to a default
|
||||||
|
# state, not remembering any of the user's runtime changes
|
||||||
|
mixin.stateless = {
|
||||||
|
hooks.device.profile.state = disabled
|
||||||
|
hooks.device.routes.state = disabled
|
||||||
|
hooks.default-nodes.state = disabled
|
||||||
|
hooks.stream.state = disabled
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
wireplumber.components = [
|
||||||
|
## WirePlumber components to load.
|
||||||
|
## These components are loaded after a connection to pipewire is established.
|
||||||
|
## type is mandatory; rest of the tags are optional
|
||||||
|
##
|
||||||
|
## Syntax:
|
||||||
|
## {
|
||||||
|
## name = <component-name>
|
||||||
|
## type = <component-type>
|
||||||
|
## arguments = { <json object> }
|
||||||
|
##
|
||||||
|
## # Feature that this component provides
|
||||||
|
## provides = <feature>
|
||||||
|
##
|
||||||
|
## # List of features that must be provided before this component is loaded
|
||||||
|
## requires = [ <features> ]
|
||||||
|
##
|
||||||
|
## # List of features that would offer additional functionality if provided
|
||||||
|
## # but are not strictly required
|
||||||
|
## wants = [ <features> ]
|
||||||
|
## }
|
||||||
|
|
||||||
|
## Check to avoid loading together with media-session
|
||||||
|
{
|
||||||
|
name = ensure-no-media-session, type = built-in
|
||||||
|
provides = check.no-media-session
|
||||||
|
}
|
||||||
|
|
||||||
|
## Makes a secondary connection to PipeWire for exporting objects
|
||||||
|
{
|
||||||
|
name = export-core, type = built-in
|
||||||
|
provides = support.export-core
|
||||||
|
}
|
||||||
|
|
||||||
|
## Enables creating local nodes that are exported to pipewire
|
||||||
|
## This is needed for LocalNode() / WpImplNode
|
||||||
|
## This should be used with the export-core to avoid protocol deadlocks,
|
||||||
|
## unless you know what you are doing
|
||||||
|
{
|
||||||
|
name = libpipewire-module-client-node, type = pw-module
|
||||||
|
provides = pw.client-node
|
||||||
|
wants = [ support.export-core ]
|
||||||
|
}
|
||||||
|
|
||||||
|
## Enables creating local devices that are exported to pipewire
|
||||||
|
## This is needed for SpaDevice() / WpSpaDevice
|
||||||
|
## This should be used with the export-core to avoid protocol deadlocks,
|
||||||
|
## unless you know what you are doing
|
||||||
|
{
|
||||||
|
name = libpipewire-module-client-device, type = pw-module
|
||||||
|
provides = pw.client-device
|
||||||
|
wants = [ support.export-core ]
|
||||||
|
}
|
||||||
|
|
||||||
|
# Provides a node factory to create SPA nodes
|
||||||
|
# You need this to use LocalNode("spa-node-factory", ...)
|
||||||
|
{
|
||||||
|
name = libpipewire-module-spa-node-factory, type = pw-module
|
||||||
|
provides = pw.node-factory.spa
|
||||||
|
requires = [ pw.client-node ]
|
||||||
|
}
|
||||||
|
|
||||||
|
## Provides a node factory to create SPA nodes wrapped in an adapter
|
||||||
|
## You need this to use LocalNode("adapter", ...)
|
||||||
|
{
|
||||||
|
name = libpipewire-module-adapter, type = pw-module
|
||||||
|
provides = pw.node-factory.adapter
|
||||||
|
requires = [ pw.client-node ]
|
||||||
|
}
|
||||||
|
|
||||||
|
## Provides the "sm-settings" metadata object
|
||||||
|
{
|
||||||
|
name = libwireplumber-module-settings, type = module
|
||||||
|
arguments = { metadata.name = sm-settings }
|
||||||
|
provides = metadata.sm-settings
|
||||||
|
}
|
||||||
|
|
||||||
|
## Activates a global WpSettings instance, providing settings from
|
||||||
|
## the sm-settings metadata object. Note that this blocks and waits for the
|
||||||
|
## sm-settings metadata object to become available, so one instance must
|
||||||
|
## provide that, while others should only load this to access settings
|
||||||
|
{
|
||||||
|
name = settings-instance, type = built-in
|
||||||
|
arguments = { metadata.name = sm-settings }
|
||||||
|
provides = support.settings
|
||||||
|
after = [ metadata.sm-settings ]
|
||||||
|
}
|
||||||
|
|
||||||
|
## Log level settings
|
||||||
|
{
|
||||||
|
name = libwireplumber-module-log-settings, type = module
|
||||||
|
provides = support.log-settings
|
||||||
|
}
|
||||||
|
|
||||||
|
## The lua scripting engine
|
||||||
|
{
|
||||||
|
name = libwireplumber-module-lua-scripting, type = module
|
||||||
|
provides = support.lua-scripting
|
||||||
|
}
|
||||||
|
|
||||||
|
## Module listening for pipewire objects to push events
|
||||||
|
{
|
||||||
|
name = libwireplumber-module-standard-event-source, type = module
|
||||||
|
provides = support.standard-event-source
|
||||||
|
}
|
||||||
|
|
||||||
|
## The shared D-Bus connection
|
||||||
|
{
|
||||||
|
name = libwireplumber-module-dbus-connection, type = module
|
||||||
|
provides = support.dbus
|
||||||
|
}
|
||||||
|
|
||||||
|
## Module managing the portal permissions
|
||||||
|
{
|
||||||
|
name = libwireplumber-module-portal-permissionstore, type = module
|
||||||
|
provides = support.portal-permissionstore
|
||||||
|
requires = [ support.dbus ]
|
||||||
|
}
|
||||||
|
|
||||||
|
## Needed for device reservation to work
|
||||||
|
{
|
||||||
|
name = libwireplumber-module-reserve-device, type = module
|
||||||
|
provides = support.reserve-device
|
||||||
|
requires = [ support.dbus ]
|
||||||
|
}
|
||||||
|
|
||||||
|
## logind integration to enable certain functionality only on the active seat
|
||||||
|
{
|
||||||
|
name = libwireplumber-module-logind, type = module
|
||||||
|
provides = support.logind
|
||||||
|
}
|
||||||
|
|
||||||
|
## Session item factories
|
||||||
|
{
|
||||||
|
name = libwireplumber-module-si-node, type = module
|
||||||
|
provides = si.node
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = libwireplumber-module-si-audio-adapter, type = module
|
||||||
|
provides = si.audio-adapter
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = libwireplumber-module-si-standard-link, type = module
|
||||||
|
provides = si.standard-link
|
||||||
|
}
|
||||||
|
|
||||||
|
## API to access default nodes from scripts
|
||||||
|
{
|
||||||
|
name = libwireplumber-module-default-nodes-api, type = module
|
||||||
|
provides = api.default-nodes
|
||||||
|
}
|
||||||
|
|
||||||
|
## API to access mixer controls
|
||||||
|
{
|
||||||
|
name = libwireplumber-module-mixer-api, type = module
|
||||||
|
provides = api.mixer
|
||||||
|
}
|
||||||
|
|
||||||
|
## API to get notified about file changes
|
||||||
|
{
|
||||||
|
name = libwireplumber-module-file-monitor-api, type = module
|
||||||
|
provides = api.file-monitor
|
||||||
|
}
|
||||||
|
|
||||||
|
## Provide the "default" pw_metadata
|
||||||
|
{
|
||||||
|
name = metadata.lua, type = script/lua
|
||||||
|
arguments = { metadata.name = default }
|
||||||
|
provides = metadata.default
|
||||||
|
}
|
||||||
|
|
||||||
|
## Provide the "filters" pw_metadata
|
||||||
|
{
|
||||||
|
name = metadata.lua, type = script/lua
|
||||||
|
arguments = { metadata.name = filters }
|
||||||
|
provides = metadata.filters
|
||||||
|
}
|
||||||
|
|
||||||
|
## Provide the "sm-objects" pw_metadata, supporting dynamic loadable objects
|
||||||
|
{
|
||||||
|
name = sm-objects.lua, type = script/lua
|
||||||
|
provides = metadata.sm-objects
|
||||||
|
}
|
||||||
|
|
||||||
|
## Device monitors' optional features
|
||||||
|
{
|
||||||
|
type = virtual, provides = monitor.alsa.reserve-device,
|
||||||
|
requires = [ support.reserve-device ]
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = virtual, provides = monitor.alsa-midi.monitoring,
|
||||||
|
requires = [ api.file-monitor ]
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = virtual, provides = monitor.bluez.seat-monitoring,
|
||||||
|
requires = [ support.logind ]
|
||||||
|
}
|
||||||
|
|
||||||
|
## Device monitors
|
||||||
|
{
|
||||||
|
name = monitors/alsa.lua, type = script/lua
|
||||||
|
provides = monitor.alsa
|
||||||
|
requires = [ support.export-core, pw.client-device ]
|
||||||
|
wants = [ monitor.alsa.reserve-device ]
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = monitors/bluez.lua, type = script/lua
|
||||||
|
provides = monitor.bluez
|
||||||
|
requires = [ support.export-core,
|
||||||
|
pw.client-device,
|
||||||
|
pw.client-node,
|
||||||
|
pw.node-factory.adapter ]
|
||||||
|
wants = [ monitor.bluez.seat-monitoring ]
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = monitors/bluez-midi.lua, type = script/lua
|
||||||
|
provides = monitor.bluez-midi
|
||||||
|
requires = [ support.export-core,
|
||||||
|
pw.client-device,
|
||||||
|
pw.client-node,
|
||||||
|
pw.node-factory.spa ]
|
||||||
|
wants = [ monitor.bluez.seat-monitoring ]
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = monitors/alsa-midi.lua, type = script/lua
|
||||||
|
provides = monitor.alsa-midi
|
||||||
|
wants = [ monitor.alsa-midi.monitoring ]
|
||||||
|
}
|
||||||
|
## v4l2 monitor
|
||||||
|
{
|
||||||
|
name = monitors/v4l2/name-device.lua, type = script/lua
|
||||||
|
provides = hooks.monitor.v4l2-name-device
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = monitors/v4l2/create-device.lua, type = script/lua
|
||||||
|
provides = hooks.monitor.v4l2-create-device
|
||||||
|
requires = [ support.export-core,
|
||||||
|
pw.client-device,
|
||||||
|
support.standard-event-source ]
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = monitors/v4l2/name-node.lua, type = script/lua
|
||||||
|
provides = hooks.monitor.v4l2-name-node
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = monitors/v4l2/create-node.lua, type = script/lua
|
||||||
|
provides = hooks.monitor.v4l2-create-node
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = monitors/v4l2/enumerate-device.lua, type = script/lua
|
||||||
|
provides = monitor.v4l2
|
||||||
|
requires = [ support.export-core,
|
||||||
|
pw.client-device,
|
||||||
|
support.standard-event-source,
|
||||||
|
hooks.monitor.v4l2-create-device,
|
||||||
|
hooks.monitor.v4l2-create-node ]
|
||||||
|
wants = [ hooks.monitor.v4l2-name-device,
|
||||||
|
hooks.monitor.v4l2-name-node ]
|
||||||
|
}
|
||||||
|
## libcamera monitor
|
||||||
|
{
|
||||||
|
name = monitors/libcamera/name-device.lua, type = script/lua
|
||||||
|
provides = hooks.monitor.libcamera-name-device
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = monitors/libcamera/create-device.lua, type = script/lua
|
||||||
|
provides = hooks.monitor.libcamera-create-device
|
||||||
|
requires = [ support.export-core,
|
||||||
|
pw.client-device,
|
||||||
|
support.standard-event-source ]
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = monitors/libcamera/name-node.lua, type = script/lua
|
||||||
|
provides = hooks.monitor.libcamera-name-node
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = monitors/libcamera/create-node.lua, type = script/lua
|
||||||
|
provides = hooks.monitor.libcamera-create-node
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = monitors/libcamera/enumerate-device.lua, type = script/lua
|
||||||
|
provides = monitor.libcamera
|
||||||
|
requires = [ support.export-core,
|
||||||
|
pw.client-device,
|
||||||
|
support.standard-event-source,
|
||||||
|
hooks.monitor.libcamera-create-device,
|
||||||
|
hooks.monitor.libcamera-create-node ]
|
||||||
|
wants = [ hooks.monitor.libcamera-name-device,
|
||||||
|
hooks.monitor.libcamera-name-node ]
|
||||||
|
}
|
||||||
|
|
||||||
|
## Client access configuration hooks
|
||||||
|
{
|
||||||
|
name = client/access-default.lua, type = script/lua
|
||||||
|
provides = script.client.access-default
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = client/access-portal.lua, type = script/lua
|
||||||
|
provides = script.client.access-portal
|
||||||
|
requires = [ support.portal-permissionstore ]
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = client/access-snap.lua, type = script/lua
|
||||||
|
provides = script.client.access-snap
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = virtual, provides = policy.client.access
|
||||||
|
wants = [ script.client.access-default,
|
||||||
|
script.client.access-portal,
|
||||||
|
script.client.access-snap ]
|
||||||
|
}
|
||||||
|
|
||||||
|
## Device profile selection hooks
|
||||||
|
{
|
||||||
|
name = device/select-profile.lua, type = script/lua
|
||||||
|
provides = hooks.device.profile.select
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = device/find-preferred-profile.lua, type = script/lua
|
||||||
|
provides = hooks.device.profile.find-preferred
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = device/find-best-profile.lua, type = script/lua
|
||||||
|
provides = hooks.device.profile.find-best
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = device/state-profile.lua, type = script/lua
|
||||||
|
provides = hooks.device.profile.state
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = device/apply-profile.lua, type = script/lua
|
||||||
|
provides = hooks.device.profile.apply
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = device/autoswitch-bluetooth-profile.lua, type = script/lua
|
||||||
|
provides = hooks.device.profile.autoswitch-bluetooth
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = virtual, provides = policy.device.profile
|
||||||
|
requires = [ hooks.device.profile.select,
|
||||||
|
hooks.device.profile.autoswitch-bluetooth,
|
||||||
|
hooks.device.profile.apply ]
|
||||||
|
wants = [ hooks.device.profile.find-best, hooks.device.profile.find-preferred,
|
||||||
|
hooks.device.profile.state ]
|
||||||
|
}
|
||||||
|
|
||||||
|
# Device route selection hooks
|
||||||
|
{
|
||||||
|
name = device/select-routes.lua, type = script/lua
|
||||||
|
provides = hooks.device.routes.select
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = device/find-best-routes.lua, type = script/lua
|
||||||
|
provides = hooks.device.routes.find-best
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = device/state-routes.lua, type = script/lua
|
||||||
|
provides = hooks.device.routes.state
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = device/apply-routes.lua, type = script/lua
|
||||||
|
provides = hooks.device.routes.apply
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = virtual, provides = policy.device.routes
|
||||||
|
requires = [ hooks.device.routes.select,
|
||||||
|
hooks.device.routes.apply ]
|
||||||
|
wants = [ hooks.device.routes.find-best,
|
||||||
|
hooks.device.routes.state ]
|
||||||
|
}
|
||||||
|
|
||||||
|
## Default nodes selection hooks
|
||||||
|
{
|
||||||
|
name = default-nodes/rescan.lua, type = script/lua
|
||||||
|
provides = hooks.default-nodes.rescan
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = default-nodes/find-selected-default-node.lua, type = script/lua
|
||||||
|
provides = hooks.default-nodes.find-selected
|
||||||
|
requires = [ metadata.default ]
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = default-nodes/find-best-default-node.lua, type = script/lua
|
||||||
|
provides = hooks.default-nodes.find-best
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = default-nodes/state-default-nodes.lua, type = script/lua
|
||||||
|
provides = hooks.default-nodes.state
|
||||||
|
requires = [ metadata.default ]
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = default-nodes/apply-default-node.lua, type = script/lua,
|
||||||
|
provides = hooks.default-nodes.apply
|
||||||
|
requires = [ metadata.default ]
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = virtual, provides = policy.default-nodes
|
||||||
|
requires = [ hooks.default-nodes.rescan,
|
||||||
|
hooks.default-nodes.apply ]
|
||||||
|
wants = [ hooks.default-nodes.find-selected,
|
||||||
|
hooks.default-nodes.find-best,
|
||||||
|
hooks.default-nodes.state ]
|
||||||
|
}
|
||||||
|
|
||||||
|
## Node configuration hooks
|
||||||
|
{
|
||||||
|
name = node/create-item.lua, type = script/lua
|
||||||
|
provides = hooks.node.create-session-item
|
||||||
|
requires = [ si.audio-adapter, si.node ]
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = node/suspend-node.lua, type = script/lua
|
||||||
|
provides = hooks.node.suspend
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = node/state-stream.lua, type = script/lua
|
||||||
|
provides = hooks.stream.state
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = node/filter-forward-format.lua, type = script/lua
|
||||||
|
provides = hooks.filter.forward-format
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = virtual, provides = policy.node
|
||||||
|
requires = [ hooks.node.create-session-item ]
|
||||||
|
wants = [ hooks.node.suspend
|
||||||
|
hooks.stream.state
|
||||||
|
hooks.filter.forward-format ]
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = node/software-dsp.lua, type = script/lua
|
||||||
|
provides = node.software-dsp
|
||||||
|
}
|
||||||
|
|
||||||
|
## Linking hooks
|
||||||
|
{
|
||||||
|
name = linking/rescan.lua, type = script/lua
|
||||||
|
provides = hooks.linking.rescan
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = linking/find-media-role-target.lua, type = script/lua
|
||||||
|
provides = hooks.linking.target.find-media-role
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = linking/find-defined-target.lua, type = script/lua
|
||||||
|
provides = hooks.linking.target.find-defined
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = linking/find-filter-target.lua, type = script/lua
|
||||||
|
provides = hooks.linking.target.find-filter
|
||||||
|
requires = [ metadata.filters ]
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = linking/find-default-target.lua, type = script/lua
|
||||||
|
provides = hooks.linking.target.find-default
|
||||||
|
requires = [ api.default-nodes ]
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = linking/find-best-target.lua, type = script/lua
|
||||||
|
provides = hooks.linking.target.find-best
|
||||||
|
requires = [ metadata.filters ]
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = linking/get-filter-from-target.lua, type = script/lua
|
||||||
|
provides = hooks.linking.target.get-filter-from
|
||||||
|
requires = [ metadata.filters ]
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = linking/prepare-link.lua, type = script/lua
|
||||||
|
provides = hooks.linking.target.prepare-link
|
||||||
|
requires = [ api.default-nodes ]
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = linking/link-target.lua, type = script/lua
|
||||||
|
provides = hooks.linking.target.link
|
||||||
|
requires = [ si.standard-link ]
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = virtual, provides = policy.linking.standard
|
||||||
|
requires = [ hooks.linking.rescan,
|
||||||
|
hooks.linking.target.prepare-link,
|
||||||
|
hooks.linking.target.link ]
|
||||||
|
wants = [ hooks.linking.target.find-media-role,
|
||||||
|
hooks.linking.target.find-defined,
|
||||||
|
hooks.linking.target.find-filter,
|
||||||
|
hooks.linking.target.find-default,
|
||||||
|
hooks.linking.target.find-best,
|
||||||
|
hooks.linking.target.get-filter-from ]
|
||||||
|
}
|
||||||
|
|
||||||
|
## Linking: Role-based priority system
|
||||||
|
{
|
||||||
|
name = linking/rescan-media-role-links.lua, type = script/lua
|
||||||
|
provides = hooks.linking.role-based.rescan
|
||||||
|
requires = [ api.mixer ]
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = virtual, provides = policy.linking.role-based
|
||||||
|
requires = [ policy.linking.standard,
|
||||||
|
hooks.linking.role-based.rescan ]
|
||||||
|
}
|
||||||
|
|
||||||
|
## Standard policy definition
|
||||||
|
{
|
||||||
|
type = virtual, provides = policy.standard
|
||||||
|
requires = [ policy.client.access
|
||||||
|
policy.device.profile
|
||||||
|
policy.device.routes
|
||||||
|
policy.default-nodes
|
||||||
|
policy.linking.standard
|
||||||
|
policy.linking.role-based
|
||||||
|
policy.node
|
||||||
|
support.standard-event-source ]
|
||||||
|
}
|
||||||
|
|
||||||
|
## Load targets
|
||||||
|
{
|
||||||
|
type = virtual, provides = hardware.audio
|
||||||
|
wants = [ monitor.alsa, monitor.alsa-midi ]
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = virtual, provides = hardware.bluetooth
|
||||||
|
wants = [ monitor.bluez, monitor.bluez-midi ]
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = virtual, provides = hardware.video-capture
|
||||||
|
wants = [ monitor.v4l2, monitor.libcamera ]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
wireplumber.components.rules = [
|
||||||
|
## Rules to apply on top of wireplumber.components
|
||||||
|
## Syntax:
|
||||||
|
## {
|
||||||
|
## matches = [
|
||||||
|
## {
|
||||||
|
## [ <key> = <value> ... ]
|
||||||
|
## }
|
||||||
|
## ...
|
||||||
|
## ]
|
||||||
|
## actions = {
|
||||||
|
## <override|merge> = {
|
||||||
|
## [ <key> = <value> ... ]
|
||||||
|
## }
|
||||||
|
## ...
|
||||||
|
## }
|
||||||
|
## }
|
||||||
|
|
||||||
|
{
|
||||||
|
matches = [
|
||||||
|
{
|
||||||
|
type = "script/lua"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
actions = {
|
||||||
|
merge = {
|
||||||
|
requires = [ support.lua-scripting ]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{
|
||||||
|
matches = [
|
||||||
|
{
|
||||||
|
provides = "~hooks.*"
|
||||||
|
name = "!~monitors/.*"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
actions = {
|
||||||
|
merge = {
|
||||||
|
before = [ support.standard-event-source ]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{
|
||||||
|
matches = [
|
||||||
|
{ provides = "~monitor.*" }
|
||||||
|
]
|
||||||
|
actions = {
|
||||||
|
merge = {
|
||||||
|
after = [ support.standard-event-source ]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
wireplumber.settings.schema = {
|
||||||
|
## Bluetooth
|
||||||
|
bluetooth.use-persistent-storage = {
|
||||||
|
description = "Whether to use persistent BT storage or not"
|
||||||
|
type = "bool"
|
||||||
|
default = true
|
||||||
|
}
|
||||||
|
bluetooth.autoswitch-to-headset-profile = {
|
||||||
|
description = "Whether to autoswitch to BT headset profile or not"
|
||||||
|
type = "bool"
|
||||||
|
default = true
|
||||||
|
}
|
||||||
|
|
||||||
|
## Device
|
||||||
|
device.restore-profile = {
|
||||||
|
description = "Whether to restore device profile or not"
|
||||||
|
type = "bool"
|
||||||
|
default = true
|
||||||
|
}
|
||||||
|
device.restore-routes = {
|
||||||
|
description = "Whether to restore device routes or not"
|
||||||
|
type = "bool"
|
||||||
|
default = true
|
||||||
|
}
|
||||||
|
device.routes.default-sink-volume = {
|
||||||
|
description = "The default volume for sink devices"
|
||||||
|
type = "float"
|
||||||
|
default = 0.064
|
||||||
|
min = 0.0
|
||||||
|
max = 1.0
|
||||||
|
}
|
||||||
|
device.routes.default-source-volume = {
|
||||||
|
description = "The default volume for source devices"
|
||||||
|
type = "float"
|
||||||
|
default = 1.0
|
||||||
|
min = 0.0
|
||||||
|
max = 1.0
|
||||||
|
}
|
||||||
|
|
||||||
|
## Linking
|
||||||
|
linking.role-based.duck-level = {
|
||||||
|
description = "The volume level to apply when ducking (= reducing volume for a higher priority stream to be audible) in the role-based linking policy"
|
||||||
|
type = "float"
|
||||||
|
default = 0.3
|
||||||
|
min = 0.0
|
||||||
|
max = 1.0
|
||||||
|
}
|
||||||
|
linking.allow-moving-streams = {
|
||||||
|
description = "Whether to allow metadata to move streams at runtime or not"
|
||||||
|
type = "bool"
|
||||||
|
default = true
|
||||||
|
}
|
||||||
|
linking.follow-default-target = {
|
||||||
|
description = "Whether to allow streams follow the default device or not"
|
||||||
|
type = "bool"
|
||||||
|
default = true
|
||||||
|
}
|
||||||
|
|
||||||
|
## Monitor
|
||||||
|
monitor.camera-discovery-timeout = {
|
||||||
|
description = "The camera discovery timeout in milliseconds"
|
||||||
|
type = "int"
|
||||||
|
default = 1000
|
||||||
|
min = 0
|
||||||
|
max = 60000
|
||||||
|
}
|
||||||
|
|
||||||
|
## Node
|
||||||
|
node.features.audio.no-dsp = {
|
||||||
|
description = "Whether to never convert audio to F32 format or not"
|
||||||
|
type = "bool"
|
||||||
|
default = false
|
||||||
|
}
|
||||||
|
node.features.audio.monitor-ports = {
|
||||||
|
description = "Whether to enable monitor ports on audio nodes or not"
|
||||||
|
type = "bool"
|
||||||
|
default = true
|
||||||
|
}
|
||||||
|
node.features.audio.control-port = {
|
||||||
|
description = "Whether to enable control ports on audio nodes or not"
|
||||||
|
type = "bool"
|
||||||
|
default = false
|
||||||
|
}
|
||||||
|
node.stream.restore-props = {
|
||||||
|
description = "Whether to restore properties on stream nodes or not"
|
||||||
|
type = "bool"
|
||||||
|
default = true
|
||||||
|
}
|
||||||
|
node.stream.restore-target = {
|
||||||
|
description = "Whether to restore target on stream nodes or not"
|
||||||
|
type = "bool"
|
||||||
|
default = true
|
||||||
|
}
|
||||||
|
node.stream.default-playback-volume = {
|
||||||
|
description = "The default volume for playback nodes"
|
||||||
|
type = "float"
|
||||||
|
default = 1.0
|
||||||
|
min = 0.0
|
||||||
|
max = 1.0
|
||||||
|
}
|
||||||
|
node.stream.default-capture-volume = {
|
||||||
|
description = "The default volume for capture nodes"
|
||||||
|
type = "float"
|
||||||
|
default = 1.0
|
||||||
|
min = 0.0
|
||||||
|
max = 1.0
|
||||||
|
}
|
||||||
|
node.stream.default-media-role = {
|
||||||
|
description = "A media.role to assign on streams that have none specified"
|
||||||
|
type = "string"
|
||||||
|
default = null
|
||||||
|
}
|
||||||
|
node.filter.forward-format = {
|
||||||
|
description = "Whether to forward format on filter nodes or not"
|
||||||
|
type = "bool"
|
||||||
|
default = false
|
||||||
|
}
|
||||||
|
node.restore-default-targets = {
|
||||||
|
description = "Whether to restore default targets or not"
|
||||||
|
type = "bool"
|
||||||
|
default = true
|
||||||
|
}
|
||||||
|
}
|
|
@ -30,8 +30,8 @@ xkb_symbols "basic" {
|
||||||
key <AD11> {[ bracketleft, braceleft ]};
|
key <AD11> {[ bracketleft, braceleft ]};
|
||||||
key <AD12> {[ bracketright, braceright ]};
|
key <AD12> {[ bracketright, braceright ]};
|
||||||
key <BKSL> {[ backslash, bar ]};
|
key <BKSL> {[ backslash, bar ]};
|
||||||
key <BKSP> {[ Caps_Lock, NoSymbol ]}; // Swap Backspace with Caps Lock
|
key <BKSP> {[ U0133, U0132 ]}; // Swap Backspace with Caps Lock
|
||||||
key <CAPS> {[ BackSpace, NoSymbol ]}; // Swap Caps Lock with Backspace
|
key <CAPS> {[ BackSpace, NoSymbol ]}; // Swap Caps Lock with Backspace
|
||||||
|
|
||||||
key <AC01> {[ a, A ]};
|
key <AC01> {[ a, A ]};
|
||||||
key <AC02> {[ s, S ]};
|
key <AC02> {[ s, S ]};
|
||||||
|
|
31
README.md
31
README.md
|
@ -4,4 +4,33 @@
|
||||||
|
|
||||||
Hallo,
|
Hallo,
|
||||||
|
|
||||||
These are my dotfiles, simply copy the files to their correct place and relog after running `wal -i <wallpaper.png>`.
|
These are my dotfiles, simply copy the files to their correct place and relog after running:
|
||||||
|
|
||||||
|
``` shell-session
|
||||||
|
sh$ wall.sh <wallpaper.png>
|
||||||
|
```
|
||||||
|
|
||||||
|
Here is a list of the packages which are used for this setup:
|
||||||
|
* River
|
||||||
|
* Neovim
|
||||||
|
* Pywal16
|
||||||
|
* Foot
|
||||||
|
* Fuzzel
|
||||||
|
* Dinit (as user service manager)
|
||||||
|
* Mako
|
||||||
|
* Gtklock
|
||||||
|
* Kanshi
|
||||||
|
* Pipewire and Wireplumber
|
||||||
|
* Orchis theme
|
||||||
|
* Slurp and Grim
|
||||||
|
|
||||||
|
Some optional programs I also use:
|
||||||
|
* Firefox
|
||||||
|
* Gtklock
|
||||||
|
* Vlc
|
||||||
|
* Fastfetch
|
||||||
|
* Dconf (for setting the gtk theme)
|
||||||
|
* Eye of gnome
|
||||||
|
* Nemo
|
||||||
|
* Transmission
|
||||||
|
* Playerctl
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 2.6 MiB After Width: | Height: | Size: 2.9 MiB |
Loading…
Reference in a new issue