Compare commits

..

19 Commits

Author SHA1 Message Date
a1ac6850bb updated waybar 2025-08-28 19:45:40 +02:00
bd49925080 updated style 2025-08-23 19:32:51 +02:00
f0739adf34 updated scripts 2025-08-23 19:28:41 +02:00
98bd7c5393 styles + window rules 2025-08-23 16:19:05 +02:00
01f7b4fb8e updated scripts and waybar 2025-08-18 19:31:04 +02:00
6e647070d8 i have to rework the bar... too full 2025-08-15 21:13:36 +02:00
e45ea11b28 resolved merge conflict 2025-08-15 20:10:58 +02:00
df361218f9 fixed the pixelbuds script 2025-08-15 11:10:22 +02:00
ac16d751ce fucked my pixelbuds module 2025-08-15 10:08:20 +02:00
dc3133cc94 updated gpu module 2025-08-15 09:19:05 +02:00
8eb626164b updated 2025-08-15 03:14:44 +02:00
bc86670611 fixed discord streaming 2025-08-14 03:29:50 +02:00
0eb25b77a6 added rice pics 2025-08-12 21:12:07 +02:00
30b83934d1 increased interval for pixelbuds 2025-08-09 20:52:06 +02:00
087f199ca0 added own notification script 2025-08-09 20:01:04 +02:00
e2d9f5ab05 added wireplumber confs 2025-08-09 19:11:31 +02:00
b0783e09e5 updated replay command 2025-08-09 17:18:32 +02:00
eb3c74373d increased sleep timer before replay starts 2025-08-09 15:33:10 +02:00
283a649486 added modules to waybar 2025-08-09 15:32:12 +02:00
66 changed files with 1186 additions and 661 deletions

3
.gitignore vendored
View File

@@ -20,3 +20,6 @@
!rice-2.png
!rice-3.png
!btop
!wireplumber/
!systemd/
fish/fish_variables

3
README.md Normal file
View File

@@ -0,0 +1,3 @@
# desktop rice
![image not found](./rice.png)

View File

@@ -1,4 +1,4 @@
--enable-features=AcceleratedVideoDecodeLinuxGL,DefaultANGLEVulkan,VaapiIgnoreDriverChecks,Vulkan,VulkanFromANGLE,PlatformHEVCDecoderSupport,AcceleratedVideoDecodeLinuxGL,AcceleratedVideoDecodeLinuxZeroCopyGL,AcceleratedVideoEncoder
--use-angle=vulkan
--use-gl=angle
--enable-features=AcceleratedVideoDecodeLinuxGL,DefaultANGLEVulkan,VaapiIgnoreDriverChecks,Vulkan,VulkanFromANGLE,PlatformHEVCDecoderSupport,AcceleratedVideoDecodeLinuxGL,AcceleratedVideoDecodeLinuxZeroCopyGL,AcceleratedVideoEncoder
--use-angle=vulkan
--use-gl=angle
--ozone-platform=wayland

View File

@@ -57,7 +57,7 @@ update_ms = 2000
#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct",
#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly.
proc_sorting = "cpu lazy"
proc_sorting = "cpu direct"
#* Reverse sorting order, True or False.
proc_reversed = False
@@ -72,7 +72,7 @@ proc_colors = True
proc_gradient = True
#* If process cpu usage should be of the core it's running on or usage of the total available cpu power.
proc_per_core = False
proc_per_core = True
#* Show process memory as bytes instead of percent.
proc_mem_bytes = True

View File

@@ -4,11 +4,6 @@ set fish_cursor_replace_one underscore blink
set fish_cursor_visual block
fish_vi_key_bindings
zoxide init --cmd cd fish | source
if not pgrep --full ssh-agent | string collect > /dev/null
eval (ssh-agent -c)
set -Ux SSH_AGENT_PID $SSH_AGENT_PID
set -Ux SSH_AUTH_SOCK $SSH_AUTH_SOCK
end
if uwsm check may-start && uwsm select
exec uwsm start default
end

View File

@@ -5,8 +5,8 @@ SETUVAR DATABASE_URL:sqlite\x3adatabase\x2esqlite
SETUVAR GLFW_IM_MODULE:ibus
SETUVAR MANPAGER:sh\x20\x2dc\x20\x27col\x20\x2dbx\x20\x7c\x20bat\x20\x2dl\x20man\x20\x2dp\x27
SETUVAR RUST_LOG:debug
SETUVAR --export SSH_AGENT_PID:36174
SETUVAR --export SSH_AUTH_SOCK:/tmp/ssh\x2dXXXXXXVGqONj/agent\x2e36173
SETUVAR --export SSH_AGENT_PID:967
SETUVAR --export SSH_AUTH_SOCK:/tmp/ssh\x2dXXXXXX7Ck8nI/agent\x2e966
SETUVAR SXHKD_SHELL:/usr/bin/bash
SETUVAR ZO_CMD:zo
SETUVAR Z_CMD:z

View File

@@ -0,0 +1,3 @@
function convert_discord --wraps='ffmpeg -i <source> -s 1280x720 <source>-discord.mp4' --description 'alias convert_discord=ffmpeg -i <source> -s 1280x720 <source>-discord.mp4'
ffmpeg -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -i $argv[1] -s 1280x720 (string split -r -m1 . $argv[1])[1]-discord.mp4;
end

View File

@@ -1,5 +1,13 @@
include=~/.config/fuzzel/catppuccin-fuzzel/themes/catppuccin-mocha/mauve.ini
[main]
font=FiraCode Nerd Font:size=12
font=FiraCode Nerd Font:size=14
terminal=alacritty
dpi-aware=no
prompt="> "
icon-theme=Papirus-Dark
show-actions=yes
[border]
radius=4
width=2

View File

@@ -1,5 +1,6 @@
# narls hyprland dotfiles
source = ~/.config/hypr/modules/plugins.conf
source = ~/.config/hypr/modules/monitors.conf
@@ -16,3 +17,4 @@ source = ~/.config/hypr/modules/input.conf
source = ~/.config/hypr/modules/keybinds.conf
source = ~/.config/hypr/modules/window_rules.conf

View File

@@ -1,4 +1,4 @@
# preload = ~/Pictures/red_moon/red_moon-latte.jpg
preload = ~/Pictures/wallpapers/rem-latte.jpg
preload = ~/Pictures/wallpapers/rem.jpg
# wallpaper = ,~/Pictures/red_moon/red_moon-latte.jpg
wallpaper = ,~/Pictures/wallpapers/rem-latte.jpg
wallpaper = ,~/Pictures/wallpapers/rem.jpg

View File

@@ -3,9 +3,13 @@
# Or execute your favorite apps at launch like this:
# exec-once = uwsm app -- waybar
exec-once = uwsm app -- nm-applet
# exec-once = uwsm app -- nextcloud --background
exec-once = uwsm app -- rclone mount google_drive: ~/gdrive
exec-once = uwsm app -- nm-applet --indicator
# exec-once = uwsm app -- rclone mount google_drive: ~/gdrive
exec-once = uwsm app -- protonvpn-app
exec-once = uwsm app -- hyprpaper
exec-once = uwsm app -- sh -c "/usr/bin/discord discord --enable-features=UseOzonePlatform --ozone-platform=wayland --start-minimized &> /dev/null"
# exec-once = uwsm app -- /usr/bin/discord --enable-features=UseOzonePlatform --ozone-platform=wayland --start-minimized &> /dev/null
exec-once = sleep 5 && ~/.config/hypr/scripts/replay-ctrl.sh start
# exec-once = uwsm app -- /usr/lib/xdg-desktop-portal-hyprland
exec-once = wl-paste --type text --watch cliphist store # Stores only text data
exec-once = wl-paste --type image --watch cliphist store # Stores only image data

View File

@@ -11,3 +11,4 @@ env = QT_QPA_PLATFORMTHEME,qt6ct
env = LIBVA_DRIVER_NAME,radeonsi
env = VDPAU_DRIVER,radeonsi
env = MOZ_ENABLE_WAYLAND,1
env = ELECTRON_OZONE_PLATFORM_HINT,wayland

View File

@@ -1,7 +1,13 @@
$mainMod = SUPER # Sets "Windows" key as main modifier
bind = , PRINT, exec, gscreenshot -c -s
bindr = ALT, m, exec, cliphist list | fuzzel --dmenu | cliphist decode | wl-copy
bind = , PRINT, exec, grim -g "$(slurp)" - | wl-copy
bindr = ALT SHIFT, z, exec, ~/.config/hypr/scripts/replay-ctrl.sh save
bindr = ALT, z, exec, ~/.config/hypr/scripts/replay-ctrl.sh toggle
bindr = ALT SHIFT, c, exec, ~/.config/hypr/scripts/droidcam-ctrl.sh toggle
# general binds
bind = $mainMod, RETURN, exec, $terminal
bind = $mainMod SHIFT, Q, killactive,
bind = $mainMod CTRL, L, exec, hyprlock
@@ -9,7 +15,7 @@ bind = $mainMod, E, exec, $fileManager
bind = $mainMod, V, togglefloating,
bind = $mainMod, F, fullscreen,
bind = $mainMod, SPACE, exec, $menu
bind = $mainMod, P, exec, ~/.config/hypr/scripts/powermenu.sh &
bind = $mainMod, P, exec, ~/.config/hypr/scripts/powermenu.sh
bind = $mainMod, t, togglesplit, # dwindle
bind = $mainMod, n, togglegroup

View File

@@ -1,6 +1,5 @@
# monitor = desc:Samsung Electric Company LC27G7xT H4ZRA00734, 2560x1440@240, 0x0, 1, bitdepth, 10, cm, wide
monitor = desc:Samsung Electric Company LC27G7xT H4ZRA00734, 2560x1440@240, 0x0, 1, bitdepth, 10
monitor = desc:Samsung Electric Company LC27G7xT H4ZRA00734, 2560x1440@240, 0x0, 1
# monitorv2 {
# desc = Samsung Electric Company LC27G7xT H4ZRA00734
# mode = 2560x1440@240

38
hypr/modules/plugins.conf Normal file
View File

@@ -0,0 +1,38 @@
exec-once = hyprpm reload -n
# plugin:hyprfocus {
# enabled = yes
# animate_floating = yes
# animate_workspacechange = yes
# focus_animation = shrink
# # Beziers for focus animations
# bezier = bezIn, 0.5,0.0,1.0,0.5
# bezier = bezOut, 0.0,0.5,0.5,1.0
# bezier = overshot, 0.05, 0.9, 0.1, 1.05
# bezier = smoothOut, 0.36, 0, 0.66, -0.56
# bezier = smoothIn, 0.25, 1, 0.5, 1
# bezier = realsmooth, 0.28,0.29,.69,1.08
# # Flash settings
# flash {
# flash_opacity = 0.95
# in_bezier = realsmooth
# in_speed = 0.5
# out_bezier = realsmooth
# out_speed = 3
# }
# # Shrink settings
# shrink {
# shrink_percentage = 0.95
# in_bezier = realsmooth
# in_speed = 1
# out_bezier = realsmooth
# out_speed = 2
# }
# }
#
# plugin:csgo-vulkan-fix {
# res_w = 1280
# res_h = 960
# class = gamescope
# fix_mouse = true
# }

View File

@@ -13,7 +13,7 @@ general {
# https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
# col.active_border = rgba(cba6f7ee) rgba(f38ba8ee) 45deg
col.active_border = rgb($mauveAlpha) rgb($tealAlpha) 30deg
col.active_border = rgb($mauveAlpha) rgb($blueAlpha) 30deg
col.inactive_border = rgb($surface2Alpha)
# Set to true enable resizing windows by clicking and dragging on borders and gaps

View File

@@ -11,56 +11,76 @@ windowrulev2=noblur,class:^()$,title:^()$
# games for tearing add the immediate rule
windowrule = immediate, class:^(cs2)$
windowrule = immediate, class:^(gamescope)$
# Float Windows
windowrule=float,title:^(Open File)$
windowrule=float,title:^(Select a File)$
windowrule=float,title:^(Choose a file)$
windowrule=float,title:^(Save As)$
windowrule=float,title:^(Save File)$
windowrule=float,title:^(branchdialog)$
windowrule=float,title:^(pinentry-gtk-2)$
windowrule=float,title:^(Confirm to replace files)$
windowrule=float,title:^(File Operation Progress)$
windowrule=float,class:^(pavucontrol|blueman-manager|nm-connection-editor)$
windowrulev2=float,title:^(Open File)$
windowrulev2=float,title:^(Select a File)$
windowrulev2=float,title:^(Select Folder)$
windowrulev2=float,title:^(Choose a file)$
windowrulev2=float,title:^(Save As)$
windowrulev2=float,title:^(Save File)$
windowrulev2=float,title:^(branchdialog)$
windowrulev2=float,title:^(pinentry-gtk-2)$
windowrulev2=float,title:^(Confirm to replace files)$
windowrulev2=float,title:^(File Operation Progress)$
windowrulev2=float,class:^(pavucontrol|blueman-manager|nm-connection-editor)$
# Center and Resize Windows
windowrule=size 800 600,title:^(Open File)$
windowrule=size 800 600,title:^(Select a File)$
windowrule=size 800 600,title:^(Choose a file)$
windowrule=size 800 600,title:^(Save As)$
windowrule=size 800 600,title:^(Save File)$
windowrule=size 800 600,title:^(branchdialog)$
windowrule=size 800 600,title:^(pinentry-gtk-2)$
windowrule=size 800 600,title:^(Confirm to replace files)$
windowrule=size 800 600,title:^(File Operation Progress)$
windowrule=size 800 600,class:^(pavucontrol|blueman-manager|nm-connection-editor)$
windowrule=center,title:^(Open File)$
windowrule=center,title:^(Select a File)$
windowrule=center,title:^(Choose a file)$
windowrule=center,title:^(Save As)$
windowrule=center,title:^(Save File)$
windowrule=center,title:^(branchdialog)$
windowrule=center,title:^(pinentry-gtk-2)$
windowrule=center,title:^(Confirm to replace files)$
windowrule=center,title:^(File Operation Progress)$
windowrule=center,class:^(pavucontrol|blueman-manager|nm-connection-editor)$
windowrule=noblur,title:^(Open File)$
windowrule=noblur,title:^(Select a File)$
windowrule=noblur,title:^(Choose a file)$
windowrule=noblur,title:^(Save As)$
windowrule=noblur,title:^(Save File)$
windowrule=noblur,title:^(branchdialog)$
windowrule=noblur,title:^(pinentry-gtk-2)$
windowrule=noblur,title:^(Confirm to replace files)$
windowrule=noblur,title:^(File Operation Progress)$
windowrule=noblur,class:^(pavucontrol|blueman-manager|nm-connection-editor)$
windowrulev2=size 800 600,title:^(Open File)$
windowrulev2=size 800 600,title:^(Select a File)$
windowrulev2=size 800 600,title:^(Choose a file)$
windowrulev2=size 800 600,title:^(Save As)$
windowrulev2=size 800 600,title:^(Save File)$
windowrulev2=size 800 600,title:^(branchdialog)$
windowrulev2=size 800 600,title:^(pinentry-gtk-2)$
windowrulev2=size 800 600,title:^(Confirm to replace files)$
windowrulev2=size 800 600,title:^(File Operation Progress)$
windowrulev2=size 800 600,class:^(pavucontrol|blueman-manager|nm-connection-editor)$
windowrulev2=center,title:^(Open File)$
windowrulev2=center,title:^(Select a File)$
windowrulev2=center,title:^(Choose a file)$
windowrulev2=center,title:^(Save As)$
windowrulev2=center,title:^(Save File)$
windowrulev2=center,title:^(branchdialog)$
windowrulev2=center,title:^(pinentry-gtk-2)$
windowrulev2=center,title:^(Confirm to replace files)$
windowrulev2=center,title:^(File Operation Progress)$
windowrulev2=center,class:^(pavucontrol|blueman-manager|nm-connection-editor)$
windowrulev2=noblur,title:^(Open File)$
windowrulev2=noblur,title:^(Select a File)$
windowrulev2=noblur,title:^(Choose a file)$
windowrulev2=noblur,title:^(Save As)$
windowrulev2=noblur,title:^(Save File)$
windowrulev2=noblur,title:^(branchdialog)$
windowrulev2=noblur,title:^(pinentry-gtk-2)$
windowrulev2=noblur,title:^(Confirm to replace files)$
windowrulev2=noblur,title:^(File Operation Progress)$
windowrulev2=noblur,class:^(pavucontrol|blueman-manager|nm-connection-editor)$
# Workspace Rules
# windowrule=workspace 1,class:^(firefox)$
# windowrule=workspace 2,class:^(kitty)$
# windowrule=workspace 3,class:^(Code)$
# windowrule=workspace 4,class:^(steam)$
# windowrule=workspace 5,class:^(discord)$
windowrulev2=workspace special:magic silent,class:^(Spotify)$
windowrulev2=workspace special:magic silent,class:^(spotify)$
windowrulev2=workspace special:magic silent,class:^(discord|vesktop)$
# steam rules
windowrulev2=workspace 3 silent, class:^(steam)$, title:^(Steam)$
windowrulev2=workspace 4, class:^(gamescope)$
# fixed sizes for different windows
windowrulev2=size 400 800,title:^(Friends List)$ class:^(steam)$
windowrulev2=size 1000 800,title:^(Steam Settings)$ class:^(steam)$
windowrulev2=size 1000 800,title:^(Add Non-Steam Game)$ class:^(steam)$
# float windows that arent the main steam window
windowrulev2 = float, class:^(steam)$, title:negative:^(Steam)$
windowrulev2 = noblur, class:^(steam)$, title:negative:^(Steam)$
# windowrulev2 = center, class:^(steam)$, title:negative:^(Steam)$
# allow tearing for games started with gamescope
windowrulev2 = immediate, class:^(gamescope)$

74
hypr/scripts/droidcam-ctrl.sh Executable file
View File

@@ -0,0 +1,74 @@
#!/bin/sh
PROGRAM_NAME="droidcam-cli"
PID_FILE="/tmp/droidcam.pid"
ANDROID_SERIAL=988e5035584a354b4430
start() {
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
if ps -p "$PID" > /dev/null; then
notify-send -u low "$PROGRAM_NAME" "$PROGRAM_NAME is already active."
exit 0
fi
fi
notify-send -u low "$PROGRAM_NAME" "$PROGRAM_NAME is starting ..."
ANDROID_SERIAL=$ANDROID_SERIAL droidcam-cli -a -v -size=1920x1080 adb 4747 &> /dev/null &
PID=$!
sleep 1
if ! ps -p "$PID" > /dev/null; then
notify-send -u critical "$PROGRAM_NAME" "$PROGRAM_NAME did not start"
exit 1
fi
echo "$PID" > "$PID_FILE"
}
stop() {
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
if ps -p "$PID" > /dev/null; then
kill "$PID"
rm "$PID_FILE"
notify-send -u low "$PROGRAM_NAME" "$PROGRAM_NAME has been stopped."
else
rm "$PID_FILE" # Stale PID file
notify-send -u low "$PROGRAM_NAME" "$PROGRAM_NAME is not running."
fi
else
notify-send -u low "$PROGRAM_NAME" "$PROGRAM_NAME is not running."
fi
}
toggle() {
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
if ps -p "$PID" > /dev/null; then
stop
else
rm "$PID_FILE" # Stale PID file
start
fi
else
start
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
toggle)
toggle
;;
*)
echo "Usage: $0 {start|stop|save}"
exit 1
esac
exit 0

104
hypr/scripts/replay-ctrl.sh Executable file
View File

@@ -0,0 +1,104 @@
#!/bin/sh
PROGRAM_NAME="gpu-screen-recorder"
PID_FILE="/tmp/gpu-screen-recorder.pid"
start() {
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
if ps -p "$PID" > /dev/null; then
notify-send -u low "$PROGRAM_NAME" "$PROGRAM_NAME is already active."
exit 0
fi
fi
video_path="$HOME/Videos/replay/"
mkdir -p "$video_path"
notify-send -u low "$PROGRAM_NAME" "$PROGRAM_NAME is starting ..."
gpu-screen-recorder \
-w screen \
-f 60 \
-a "default_input|default_output" \
-fm vfr \
-c mkv \
-encoder gpu \
-bm qp \
-cr full \
-tune quality \
-k av1 \
-q high \
-r 120 \
-replay-storage ram \
-ab 320 \
-cursor yes \
-sc "$HOME/.config/hypr/scripts/replay-notification.sh" \
-o "$video_path" &> /dev/null &
echo $! > "$PID_FILE"
}
stop() {
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
if ps -p "$PID" > /dev/null; then
kill "$PID"
rm "$PID_FILE"
notify-send -u low "$PROGRAM_NAME" "$PROGRAM_NAME has been stopped."
else
rm "$PID_FILE" # Stale PID file
notify-send -u low "$PROGRAM_NAME" "$PROGRAM_NAME is not running."
fi
else
notify-send -u low "$PROGRAM_NAME" "$PROGRAM_NAME is not running."
fi
}
toggle() {
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
if ps -p "$PID" > /dev/null; then
stop
else
rm "$PID_FILE" # Stale PID file
start
fi
else
start
fi
}
save() {
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
if ps -p "$PID" > /dev/null; then
pkill -SIGUSR1 -f gpu-screen-recorder
else
# The process is not running, but the PID file exists.
# This can happen if the process crashed.
# We'll remove the stale PID file.
rm "$PID_FILE"
notify-send -u low "$PROGRAM_NAME" "$PROGRAM_NAME is not running."
fi
else
notify-send -u low "$PROGRAM_NAME" "$PROGRAM_NAME is not running."
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
save)
save
;;
toggle)
toggle
;;
*)
echo "Usage: $0 {start|stop|save}"
exit 1
esac
exit 0

View File

@@ -0,0 +1,17 @@
#!/bin/sh
PROGRAM_NAME="gpu-screen-recorder"
case "$2" in
replay)
notify-send -u low "$PROGRAM_NAME" "Replay saved: $1"
;;
regular)
notify-send -u low "$PROGRAM_NAME" "Stream/Video saved: $1"
;;
*)
echo "Usage: $0 {saved_file} {replay|regular}"
exit 1
esac
exit 0

View File

@@ -0,0 +1,7 @@
#!/bin/sh
sleep 1
killall -e xdg-desktop-portal-hyprland
killall xdg-desktop-portal
/usr/lib/xdg-desktop-portal-hyprland &
sleep 2
/usr/lib/xdg-desktop-portal &

4
hypr/scripts/start_droidcam.sh Executable file
View File

@@ -0,0 +1,4 @@
#!/bin/sh
scrcpy -d
ANDROID_SERIAL=988e5035584a354b4430 droidcam-cli -a -v -size=1920x1080 adb 4747

View File

@@ -6,6 +6,9 @@ vim.o.smartcase = true
vim.o.ignorecase = true
vim.o.hlsearch = false
vim.o.signcolumn = 'yes'
vim.o.clipboard = 'unnamedplus'
vim.o.undofile = true
vim.o.undodir = '/home/narl/.cache/nvim-undodir'
vim.g.mapleader = ','
@@ -26,10 +29,6 @@ add({
source = 'williamboman/mason-lspconfig.nvim'
})
add({
source = 'mhartington/formatter.nvim'
})
add({
source = 'mfussenegger/nvim-lint'
})
@@ -62,10 +61,6 @@ add({
hooks = { post_checkout = function() vim.cmd('TSUpdate') end },
})
add({
source = 'simrat39/rust-tools.nvim'
})
add({
-- Completion framework:
source = 'hrsh7th/nvim-cmp',
@@ -103,8 +98,8 @@ imap_expr('<S-Tab>', [[pumvisible() ? "\<C-p>" : "\<S-Tab>"]])
_G.cr_action = function()
-- If there is selected item in popup, accept it with <C-y>
if vim.fn.complete_info()['selected'] ~= -1 then return '\25' end
-- Fall back to plain `<CR>`. You might want to customize according
-- to other plugins. For example if 'mini.pairs' is set up, replace
-- Fall back to plain `<CR>`. You might want to customize this
-- according to other plugins. For example if 'mini.pairs' is set up, replace
-- next line with `return MiniPairs.cr()`
return '\r'
end
@@ -161,28 +156,6 @@ vim.lsp.config('rust_analyzer', {
['rust-analyzer'] = {},
},
})
-- local mason_registry = require("mason-registry")
-- local cmd = {}
-- local roslyn_package = mason_registry.get_package("roslyn")
-- local rzls_package = mason_registry.get_package("rzls")
-- vim.list_extend(cmd, {
-- "dotnet",
-- vim.fs.joinpath(roslyn_package:get_install_path(), "libexec", "Microsoft.CodeAnalysis.LanguageServer.dll"),
-- "--stdio",
-- "--logLevel=Information",
-- "--extensionLogDirectory=" .. vim.fs.dirname(vim.lsp.get_log_path()),
-- })
--
-- local rzls_path = vim.fs.joinpath(rzls_package:get_install_path(), "libexec")
-- table.insert(
-- cmd,
-- "--razorSourceGenerator=" .. vim.fs.joinpath(rzls_path, "Microsoft.CodeAnalysis.Razor.Compiler.dll")
-- )
-- table.insert(
-- cmd,
-- "--razorDesignTimePath="
-- .. vim.fs.joinpath(rzls_path, "Targets", "Microsoft.NET.Sdk.Razor.DesignTime.targets")
-- )
require('roslyn').setup({
config = {
@@ -190,9 +163,6 @@ require('roslyn').setup({
handlers = require("rzls.roslyn_handlers"),
},
})
require('nvim-treesitter.configs').setup({
highlight = { enable = true },
})
require("catppuccin").setup({
flavour = "auto", -- latte, frappe, macchiato, mocha
@@ -289,19 +259,16 @@ vim.diagnostic.config({
},
})
vim.cmd([[
set signcolumn=yes
autocmd CursorHold * lua vim.diagnostic.open_float(nil, { focusable = false })
]])
-- setup must be called before loading
vim.cmd.colorscheme "catppuccin"
vim.keymap.set('n', '<leader>w', '<cmd>write<cr>', {desc = 'Save file'})
vim.keymap.set('n', '<leader>q', '<cmd>quitall<cr>', {desc = 'Exit vim'})
vim.keymap.set({'n', 'x', 'o'}, 'gy', '"+y', {desc = 'Copy to clipboard'})
vim.keymap.set({'n', 'x', 'o'}, 'gp', '"+p', {desc = 'Paste clipboard text'})
-- Simplified clipboard mappings
-- vim.keymap.set({'n', 'x', 'o'}, '<leader>y', '"+y', {desc = 'Copy to clipboard'})
-- vim.keymap.set({'n', 'x'}, '<leader>p', '"+p', {desc = 'Paste from clipboard'})
vim.keymap.set('n', '<leader>e', '<cmd>lua MiniFiles.open()<cr>', {desc = 'File explorer'})
vim.keymap.set('n', '<leader><space>', '<cmd>Pick buffers<cr>', {desc = 'Search open files'})
vim.keymap.set('n', '<leader>ff', '<cmd>Pick files<cr>', {desc = 'Search all files'})
@@ -313,20 +280,6 @@ vim.keymap.set('n', '<leader>j', '<cmd>wincmd j<cr>')
vim.keymap.set('n', '<leader>k', '<cmd>wincmd k<cr>')
-- Rust
--
local rt = require("rust-tools")
rt.setup({
server = {
on_attach = function(_, bufnr)
-- Hover actions
vim.keymap.set("n", "<C-space>", rt.hover_actions.hover_actions, { buffer = bufnr })
-- Code action groups
vim.keymap.set("n", "<Leader>a", rt.code_action_group.code_action_group, { buffer = bufnr })
end,
},
})
local cmp = require'cmp'
cmp.setup({

BIN
rice.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

View File

@@ -0,0 +1 @@
/usr/lib/systemd/user/gamemoded.service

View File

@@ -0,0 +1 @@
/usr/lib/systemd/user/gcr-ssh-agent.service

View File

@@ -0,0 +1 @@
/home/narl/.config/systemd/user/gdrive-mount.service

View File

@@ -0,0 +1 @@
/usr/lib/systemd/user/gnome-keyring-daemon.service

View File

@@ -0,0 +1 @@
/usr/lib/systemd/user/pipewire-pulse.service

View File

@@ -0,0 +1 @@
/usr/lib/systemd/user/pipewire.service

View File

@@ -0,0 +1,24 @@
# ~/.config/systemd/user/rclone-mount.service
[Unit]
Description=Rclone Mount for google drive
# This ensures your network is ready before it tries to mount
After=network-online.target
[Service]
# The command to start the mount.
# Replace "my-remote:" and "/path/to/local/mount" accordingly.
# The flags below are highly recommended for a good experience.
ExecStart=rclone mount google_drive: %h/gdrive \
--vfs-cache-mode writes \
--log-file /tmp/rclone.log \
--log-level INFO
# The command to unmount gracefully.
ExecStop=fusermount -u %h/gdrive
Restart=on-failure
RestartSec=10
[Install]
# This tells systemd to start the service at user login.
WantedBy=default.target

View File

@@ -0,0 +1 @@
/usr/lib/systemd/user/hyprpaper.service

View File

@@ -0,0 +1 @@
/usr/lib/systemd/user/hyprpolkitagent.service

View File

@@ -0,0 +1 @@
/home/narl/.config/systemd/user/openrgb.service

View File

@@ -0,0 +1 @@
/usr/lib/systemd/user/waybar.service

View File

@@ -0,0 +1,10 @@
[Unit]
Description=OpenRGB Autostart
After=graphical-session.target
[Service]
ExecStart=/usr/bin/openrgb --profile white_static
Restart=on-failure
[Install]
WantedBy=graphical-session.target

View File

@@ -0,0 +1 @@
/usr/lib/systemd/user/wireplumber.service

View File

@@ -0,0 +1 @@
/usr/lib/systemd/user/wireplumber.service

View File

@@ -0,0 +1 @@
/dev/null

View File

@@ -0,0 +1 @@
/usr/lib/systemd/user/gnome-keyring-daemon.socket

View File

@@ -0,0 +1 @@
/usr/lib/systemd/user/pipewire-pulse.socket

View File

@@ -0,0 +1 @@
/usr/lib/systemd/user/pipewire.socket

View File

@@ -2,22 +2,30 @@
{
"layer": "top",
"position": "top",
"height": 35,
"modules-left": ["hyprland/workspaces"],
"modules-center": [],
"modules-right": ["tray",
"wireplumber",
"custom/audio-output",
"custom/pixelbuds",
"custom/anc",
"network",
"cpu",
"memory",
"clock",
"custom/gamemode",
"custom/power"
"height": 36,
"modules-left": [
"hyprland/workspaces"
],
"modules-center": [
],
"modules-right": [
// "custom/bluetooth-audio",
// "custom/pixelbuds_pro",
"custom/mem",
"custom/cpu",
"custom/gpu",
"custom/disk-root",
"custom/disk-gdrive",
"custom/disk-data",
"custom/disk-games",
// "network",
"custom/audio-output",
"wireplumber",
"tray",
"custom/gpu-screen-recorder",
"custom/gamemode",
"clock"
],
"hyprland/workspaces": {
"format": "{icon}",
"on-click": "activate"
@@ -27,16 +35,19 @@
"max-length": 35
},
"clock": {
"format": "{:%H:%M}",
"format-alt": "{:%a, %b %d}",
"tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>"
"format": "{:%a %d %b %H:%M}",
"format-alt": false,
"on-click-right": "xdg-open https://calendar.proton.me/u/0/month &> /dev/null & disown",
"tooltip": false,
},
"cpu": {
"format": "CPU: {usage}%",
"tooltip": true
"tooltip": true,
"interval": 1
},
"memory": {
"format": "MEM: {}%"
"format": "MEM: {used}/{total}GB",
"interval": 3
},
"network": {
"format-wifi": "{essid} ({signalStrength}%): {ipaddr}",
@@ -46,16 +57,26 @@
},
"wireplumber": {
"format": "{volume}% {icon}",
"format-muted": "Muted ",
"format-muted": "--- ",
"format-icons": {
"headphone": "",
"hands-free": "",
"default": ["", ""]
"default": ["", "", ""]
},
"on-click": "pavucontrol",
"on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle",
"on-click-right": "~/.config/waybar/scripts/audio.sh cycle",
"on-click-middle": "pavucontrol",
"scroll-step": 1
},
"custom/bluetooth-audio": {
"format": "{}",
"return-type": "json",
"exec": "~/.config/waybar/scripts/bluetooth_audio.sh",
"interval": 3,
"on-click": "~/.config/waybar/scripts/bluetooth_audio.sh disconnect & disown"
},
"pulseaudio": {
"format": "{icon} {volume}%",
"format-muted": " Muted",
@@ -68,7 +89,7 @@
"car": "",
"default": ["", ""]
},
"on-click": "pavucontrol"
"on-click": "pavucontrol & disown"
},
"tray": {
"icon-size": 18,
@@ -77,7 +98,7 @@
"custom/power": {
"format": "",
"tooltip": false,
"on-click": "~/.config/hypr/scripts/powermenu.sh"
"on-click": "~/.config/hypr/scripts/powermenu.sh & disown"
},
"custom/tlp": {
"format": "{}",
@@ -97,30 +118,85 @@
"format-full": "{capacity}%",
"format-icons": ["", "", "", "", ""]
},
"custom/pixelbuds": {
"custom/pixelbuds_pro": {
"format": "{}",
"return-type": "json",
"exec": "~/.config/waybar/scripts/pixelbuds.sh",
"exec": "~/.config/waybar/scripts/pixelbuds_pro_control.sh",
"interval": 5,
"on-click": "bluetoothctl disconnect B4:23:A2:09:D3:53"
},
"custom/anc": {
"format": "{}",
"return-type": "json",
"exec": "~/.config/waybar/scripts/anc_control.sh",
"interval": 5,
"on-click": "~/.config/waybar/scripts/anc_control.sh off",
"on-click-right": "~/.config/waybar/scripts/anc_control.sh cycle"
"on-click": "~/.config/waybar/scripts/pixelbuds_pro_control.sh connect & disown",
"on-click-right": "~/.config/waybar/scripts/pixelbuds_pro_control.sh cycle_anc & disown"
},
"custom/audio-output": {
"format": "{}",
"return-type": "json",
"exec": "/home/narl/.config/waybar/scripts/get_audio_output.sh",
"on-click": "/home/narl/.config/waybar/scripts/cycle_audio_output.sh",
"exec": "/home/narl/.config/waybar/scripts/audio.sh show",
"on-click": "/home/narl/.config/waybar/scripts/audio.sh cycle & disown",
"interval": 1
},
"custom/gamemode": {
"format": "󰮂",
"on-click": "~/.config/hypr/scripts/gamemode.sh"
}
"format": "{}",
"return-type": "json",
"exec": "~/.config/waybar/scripts/gamemode_status.sh",
"on-click": "~/.config/hypr/scripts/gamemode.sh & disown",
"interval": 1
},
"custom/gpu-screen-recorder": {
"format": "{}",
"return-type": "json",
"exec": "~/.config/waybar/scripts/gpu-screen-recorder-status.sh",
"on-click-right": "~/.config/hypr/scripts/replay-ctrl.sh save & disown",
"on-click-middle": "nautilus ~/Videos/replay & disown",
"on-click": "~/.config/waybar/scripts/toggle-replay.sh & disown",
"interval": 1
},
"custom/gpu": {
"format": "{}",
"return-type": "json",
"exec": "~/.config/waybar/scripts/gpu_info.sh",
"on-click": "lact gui & disown",
"interval": 3
},
"custom/cpu": {
"format": "{}",
"return-type": "json",
"exec": "~/.config/waybar/scripts/cpu_info.sh",
"on-click": "zenmonitor & disown",
"interval": 3
},
"custom/mem": {
"format": "{}",
"return-type": "json",
"exec": "~/.config/waybar/scripts/memory.sh",
"interval": 3
},
"custom/btrfs": {
"format": "{}",
"exec": "~/.config/waybar/scripts/btrfs.sh",
"return-type": "json",
"interval": 30
},
"custom/disk-root": {
"format": "{}",
"return-type": "json",
"exec": "~/.config/waybar/scripts/disk_info.sh /",
"interval": 30
},
"custom/disk-gdrive": {
"format": "{}",
"return-type": "json",
"exec": "~/.config/waybar/scripts/disk_info.sh ~/gdrive",
"interval": 30
},
"custom/disk-data": {
"format": "{}",
"return-type": "json",
"exec": "~/.config/waybar/scripts/disk_info.sh ~/data",
"interval": 30
},
"custom/disk-games": {
"format": "{}",
"return-type": "json",
"exec": "~/.config/waybar/scripts/disk_info.sh ~/games",
"interval": 30
}
}

View File

@@ -1,73 +0,0 @@
#!/bin/bash
# --- CONFIGURATION ---
# Your Pixel Buds Pro's MAC Address
MAC_ADDRESS="B4:23:A2:09:D3:53"
# --- END CONFIGURATION ---
# First, check if the device is connected using bluetoothctl.
if bluetoothctl info "$MAC_ADDRESS" | grep -q "Connected: yes"; then
# --- DEVICE IS CONNECTED ---
# This function gets the current ANC status and formats it for Waybar.
get_status() {
# Get the mode from pbpctrl. Redirect errors to null in case of a temporary glitch.
current_mode=$(pbpctrl get anc 2>/dev/null)
# Fallback: If pbpctrl fails or returns 'unknown', hide the module.
# This handles cases where buds are connected but not fully ready.
if [[ $? -ne 0 || "$current_mode" == "unknown (0)"* || -z "$current_mode" ]]; then
echo "{}"
exit 0
fi
# Set icon and tooltip based on the current mode.
case "$current_mode" in
"active")
icon="ANC: Active"
class="anc-active"
;;
"aware")
icon="ANC: Aware"
class="anc-aware"
;;
"off")
icon="ANC: Off"
class="anc-off"
;;
*)
# Failsafe to hide the module if the mode is unrecognized.
echo "{}"
exit 0
;;
esac
echo "{\"text\":\"$icon\", \"class\":\"$class\"}"
}
# Handle click actions passed from Waybar.
case "$1" in
# Right-click: Cycle between active and aware modes.
cycle)
current_mode=$(pbpctrl get anc 2>/dev/null)
if [[ "$current_mode" == "active" ]]; then
pbpctrl set anc aware
else
pbpctrl set anc active
fi
sleep 0.1 # Brief pause for the state to update.
;;
# Left-click: Turn ANC off.
off)
pbpctrl set anc off
sleep 0.1 # Brief pause for the state to update.
;;
esac
# Always display the current status after any action or on a scheduled interval.
get_status
else
# --- DEVICE IS NOT CONNECTED ---
# Output an empty JSON object to completely hide the Waybar module.
echo "{}"
fi

40
waybar/scripts/audio.sh Executable file
View File

@@ -0,0 +1,40 @@
#!/bin/bash
DEFAULT_SINK=$(pactl info | grep 'Default Sink' | cut -d ' ' -f3)
DESCRIPTION=$(pactl list sinks | grep -A2 "Name: $DEFAULT_SINK" | grep "Description:" | cut -d ' ' -f2-)
case $1 in
cycle)
SINKS=($(pactl list short sinks | awk '{print $2}'))
NUM_SINKS=${#SINKS[@]}
CURRENT_SINK=$(pactl info | grep 'Default Sink' | cut -d ' ' -f3)
for i in "${!SINKS[@]}"; do
if [[ "${SINKS[$i]}" == "$CURRENT_SINK" ]]; then
NEXT_INDEX=$(( (i + 1) % NUM_SINKS ))
pactl set-default-sink "${SINKS[$NEXT_INDEX]}"
exit 0
fi
done
;;
show)
TEXT=$(echo "$DESCRIPTION" | cut -c -20)
if [ -z "$DESCRIPTION" ]; then
DESCRIPTION=$DEFAULT_SINK
fi
CLASS=""
case $(pactl get-sink-mute @DEFAULT_SINK@ | awk '{print $2}') in
yes)
CLASS="muted"
;;
no)
CLASS="unmuted"
;;
esac
printf '{"text": "%s", "tooltip": "%s", "class": "%s"}' "$TEXT" "$DESCRIPTION" "$CLASS"
;;
*)
echo "usage audio.sh {cycle|show}"
;;
esac

118
waybar/scripts/bluetooth_audio.sh Executable file
View File

@@ -0,0 +1,118 @@
#!/bin/bash
bt-audio-info() {
# Check if a MAC address was provided as the first argument.
if [ -z "$1" ]; then
echo "Usage: $0 <MAC_ADDRESS>"
echo "Example: $0 00:11:22:33:AA:BB"
exit 1
fi
MAC_ADDRESS="$1"
# --- Main Logic ---
# Construct the PipeWire sink name from the MAC address.
# The format is typically: bluez_output.XX_XX_XX_XX_XX_XX.a2dp_sink
# We replace colons with underscores for the format.
SINK_IDENTIFIER="bluez_output.$(echo "$MAC_ADDRESS" | tr ':' '_')"
# Use pactl to get the full details for all sinks, then find the one
# that contains our device's identifier. We use awk to print the
# entire block of text for that specific sink.
# We check for a partial match on the sink identifier because the profile
# (e.g., .a2dp_sink) can change.
sink_info=$(pactl list sinks | awk -v id="$SINK_IDENTIFIER" '/Sink #/ {p=0} $0 ~ "Name: " id {p=1} p')
# If sink_info is empty, the device might not be an audio sink or isn't connected.
if [ -z "$sink_info" ]; then
echo "Error: Could not find an active audio sink for MAC ${MAC_ADDRESS}"
echo "Please ensure the device is connected and is an audio output device."
exit 1
fi
# Get the full block of info for the device from bluetoothctl.
device_info=$(bluetoothctl info "$MAC_ADDRESS")
# --- Parse Information ---
# Parse bluetoothctl output for general device details.
alias=$(echo "$device_info" | rg "Alias:" | cut -d ' ' -f 2-)
trusted=$(echo "$device_info" | rg "Trusted:" | awk '{print $2}')
battery_raw=$(echo "$device_info" | rg "Battery Percentage:" | awk -F'[()]' '{print $2}')
# Parse pactl output for audio-specific details.
volume=$(echo "$sink_info" | rg "Volume:" | head -n1 | awk '{print $5}')
codec=$(echo "$sink_info" | rg -e 'bluetooth.codec|api.bluez5.codec' | awk -F'"' '{print $2}')
# --- Build and Display Compact Output ---
# Build the output string with all the information.
output_string="${alias} | MAC: ${MAC_ADDRESS}\n"
output_string+="Trusted: ${trusted}"
# Append battery info if available, otherwise show N/A.
if [ -n "$battery_raw" ]; then
output_string+=" | Bat: ${battery_raw}%"
else
output_string+=" | Bat: N/A"
fi
output_string+=" | Vol: ${volume} | Codec: ${codec:-N/A}"
# Print the final, single-line string.
echo "$output_string"
}
# Find the MAC address of the first connected device that is an audio sink
find_audio_device() {
default_sink_name=$(pactl get-default-sink)
# Check if the default sink is a Bluetooth device. Their names typically
# start with "bluez_output.". If not, print a message and exit.
if [[ "$default_sink_name" == bluez_output* ]]; then
# Extract the MAC address from the sink name.
# The format is bluez_output.XX_XX_XX_XX_XX_XX.profile
# We extract the middle part and replace underscores with colons.
mac_with_underscores=$(echo "$default_sink_name" | cut -d '.' -f 2)
mac=$(echo "$mac_with_underscores" | tr '_' ':')
echo "$mac"
return
fi
# else look for the first bluetooth device that provides a sink
bluetoothctl devices Connected | rg '^Device ' | awk '{print $2}' | while read -r mac;
do
# Check if the device provides the "Audio Sink" service
if bluetoothctl info "$mac" | rg -q "0000110b-0000-1000-8000-00805f9b34fb"; then
echo "$mac"
# If you only want the first audio device found, you can 'break' or 'exit' here.
break
fi
done
}
# If the script is called with "disconnect"
if [ "$1" == "disconnect" ]; then
device_mac=$(find_audio_device)
if [ -n "$device_mac" ]; then
bluetoothctl disconnect "$device_mac"
fi
echo "{}"
exit 0
fi
# Main logic to display the device name
device_mac=$(find_audio_device)
if [ -n "$device_mac" ]; then
# Get the device alias (name)
device_name=$(bluetoothctl info "$device_mac" | rg "Alias:" | cut -d ' ' -f 2-)
# Output in Waybar's JSON format
tooltip=$(bt-audio-info $device_mac)
echo "{\"text\": \"$device_name <span size='large'>󰂰</span>\", \"tooltip\": \"$tooltip\"}"
else
# Output empty string when no device is connected
echo "{}"
fi

45
waybar/scripts/btrfs.sh Executable file
View File

@@ -0,0 +1,45 @@
#!/bin/bash
# Get BTRFS filesystems
btrfs_filesystems=$(df -hT | grep btrfs)
# Initialize variables
total_used=0
total_size=0
# Process each BTRFS filesystem
while read -r line; do
size_str=$(echo "$line" | awk '{print $3}')
used_str=$(echo "$line" | awk '{print $4}')
size=$(echo "$size_str" | sed 's/[GT]//')
used=$(echo "$used_str" | sed 's/[GT]//')
if [[ $size_str == *T ]]; then
size=$(awk -v s="$size" 'BEGIN {print s*1024}')
fi
if [[ $used_str == *T ]]; then
used=$(awk -v u="$used" 'BEGIN {print u*1024}')
fi
total_size=$(awk -v total="$total_size" -v size="$size" 'BEGIN {print total+size}')
total_used=$(awk -v total="$total_used" -v used="$used" 'BEGIN {print total+used}')
done <<< "$btrfs_filesystems"
# Calculate usage percentage
usage_percentage=$(awk -v used="$total_used" -v total="$total_size" 'BEGIN {printf "%.0f", (used/total)*100}')
# Set class based on usage
if [ "$usage_percentage" -gt 95 ]; then
class="max"
elif [ "$usage_percentage" -gt 80 ]; then
class="high"
else
class="normal"
fi
text="$(printf "%.0f" $total_used)G / $(printf "%.0f" $total_size)G"
# Manually construct the JSON output
echo "{\"text\": \"$text\", \"tooltip\": \"\", \"class\": \"$class\"}"

22
waybar/scripts/cpu_info.sh Executable file
View File

@@ -0,0 +1,22 @@
#!/bin/bash
USAGE=$(mpstat 1 1 | awk '/Average:/ {print 100 - $12}')
TEMP=$(cat /sys/class/hwmon/hwmon3/temp1_input)
TEXT="$(printf "%.1f" $(echo "$USAGE"))% $(printf "%.1f" $(echo "scale=2; $TEMP"/1000 | bc -l))C"
CPU=$(lscpu | grep 'Model name' | awk -F': ' '{print $2}' | sed 's/^[ \t]*//')
# TOOLTIP=$(ps -eo %cpu,comm --sort=-%cpu | head -n 6 | sed '1d' | awk '{output = output sprintf("%.1f%%\t%s\\n", $1, $2)} END {printf "%s", output}')
# TOOLTIP=$(ps -eo %cpu,comm --sort=-%cpu | head -n 6 | sed '1d' | awk -v ncores=$(nproc) '{printf "%.1f%%\t%s\n", $1/ncores, $2}')
# TOOLTIP=$(ps -eo %cpu,comm --sort=-%cpu | head -n 6 | sed '1d' | awk -v ncores=$(nproc) '{printf "%.1f%%\t%s\\n", $1/ncores, $2}')
# TOOLTIP=$(top -b -n 1 | sed '1,7d' | head -n 5 | awk '{output = output sprintf("%.1f%%\t%s\\n", $9, $12)} END {printf "%s", output}')
CLASS=""
if (( $(echo "$USAGE > 95" | bc -l) )); then
CLASS="max"
elif (( $(echo "$USAGE > 75" | bc -l) )); then
CLASS="high"
else
CLASS="normal"
fi
# echo "{\"text\":\"CPU: $TEXT\", \"tooltip\": \"$TOOLTIP\", \"class\":\"$CLASS\"}"
echo "{\"text\":\"CPU: $TEXT\", \"class\":\"$CLASS\"}"

View File

@@ -1,12 +0,0 @@
#!/bin/bash
SINKS=($(pactl list short sinks | awk '{print $2}'))
CURRENT_SINK=$(pactl info | grep 'Default Sink' | cut -d ' ' -f3)
NUM_SINKS=${#SINKS[@]}
for i in "${!SINKS[@]}"; do
if [[ "${SINKS[$i]}" == "$CURRENT_SINK" ]]; then
NEXT_INDEX=$(( (i + 1) % NUM_SINKS ))
pactl set-default-sink "${SINKS[$NEXT_INDEX]}"
break
fi
done

31
waybar/scripts/disk_info.sh Executable file
View File

@@ -0,0 +1,31 @@
#!/bin/sh
if [ -z "$1" ]; then
echo "Usage: $0 <mountpoint>"
exit 1
fi
MOUNTPOINT=$1
# Get disk usage info
USED=$(df -h --output=used "$MOUNTPOINT" | sed '1d' | awk '{print $1}')
TOTAL=$(df -h --output=size "$MOUNTPOINT" | sed '1d' | awk '{print $1}')
PERCENTAGE=$(df --output=pcent "$MOUNTPOINT" | sed '1d' | tr -d '%' | awk '{print $1}')
# Set class based on usage
CLASS="normal"
if [ "$PERCENTAGE" -gt 95 ]; then
CLASS="max"
elif [ "$PERCENTAGE" -gt 80 ]; then
CLASS="high"
fi
# Create tooltip with more details
TOOLTIP=$(df -h "$MOUNTPOINT" | sed '1d' | awk '{printf "Used: %s\nTotal: %s\nFree: %s", $3, $2, $4}')
# Output JSON for Waybar using jq
jq -n -c \
--arg text "$1 $USED/$TOTAL" \
--arg tooltip "$TOOLTIP" \
--arg class "$CLASS" \
'{"text": $text, "tooltip": $tooltip, "class": $class}'

View File

@@ -0,0 +1,10 @@
#!/usr/bin/env sh
FORMAT_ACTIVATED="<span size='large'>󰊖</span>"
FORMAT_DEACTIVATED="<span size='large'></span>"
HYPRGAMEMODE=$(hyprctl getoption animations:enabled | awk 'NR==1{print $2}')
if [ "$HYPRGAMEMODE" = 1 ] ; then
printf "{\"text\": \"$FORMAT_DEACTIVATED\", \"tooltip\": \"Gamemode deactivated\"}"
else
printf "{\"text\": \"$FORMAT_ACTIVATED\", \"tooltip\": \"Gamemode activated\", \"class\": \"active\"}"
fi

View File

@@ -1,12 +0,0 @@
#!/bin/bash
DEFAULT_SINK=$(pactl info | grep 'Default Sink' | cut -d ' ' -f3)
DESCRIPTION=$(pactl list sinks | grep -A2 "Name: $DEFAULT_SINK" | grep "Description:" | cut -d ' ' -f2-)
if [ -z "$DESCRIPTION" ]; then
DESCRIPTION=$DEFAULT_SINK
fi
TEXT=$(echo "$DESCRIPTION" | cut -c -20)
printf '{"text": "%s", "tooltip": "%s"}
' "$TEXT" "$DESCRIPTION"

View File

@@ -0,0 +1,20 @@
#!/bin/bash
PID_FILE="/tmp/gpu-screen-recorder.pid"
FORMAT_RECORDING="<span size='large'></span>"
FORMAT_STOPPED="<span size='large'></span>"
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
if ps -p "$PID" > /dev/null; then
echo "{\"text\": \"$FORMAT_RECORDING\", \"tooltip\": \"Replay running\", \"class\": \"recording\"}"
else
# The process is not running, but the PID file exists.
# This can happen if the process crashed.
# We'll remove the stale PID file.
rm "$PID_FILE"
echo "{\"text\": \"$FORMAT_STOPPED\", \"tooltip\": \"Replay paused\"}"
fi
else
echo "{\"text\": \"$FORMAT_STOPPED\", \"tooltip\": \"Replay paused\"}"
fi

22
waybar/scripts/gpu_info.sh Executable file
View File

@@ -0,0 +1,22 @@
#!/bin/bash
USAGE=$(cat /sys/class/drm/card1/device/gpu_busy_percent)
MEM_USED=$(cat /sys/class/drm/card1/device/mem_info_vram_used)
MEM_TOTAL=$(cat /sys/class/drm/card1/device/mem_info_vram_total)
EDGE_TEMP=$(cat /sys/class/drm/card1/device/hwmon/hwmon2/temp1_input)
JUNC_TEMP=$(cat /sys/class/drm/card1/device/hwmon/hwmon2/temp2_input)
MEM_TEMP=$(cat /sys/class/drm/card1/device/hwmon/hwmon2/temp3_input)
GPU=$(/opt/rocm/bin/rocm-smi --showproductname | grep "Card Series" | awk -F':' '{print $3}' | xargs)
TEXT="$USAGE% $(printf "%.1f" $(echo "scale=2; $MEM_USED/1024/1024/1024" | bc -l))/$(printf "%.1f" $(echo "scale=2; $MEM_TOTAL/1024/1024/1024" | bc -l))GB $(printf "%.1f" $(echo "scale=2; $EDGE_TEMP/1000" | bc -l))/$(printf "%.1f" $(echo "scale=2; $MEM_TEMP/1000" | bc -l))C"
RATIO=$(echo "$MEM_USED/ $MEM_TOTAL" | bc -l)
CLASS=""
if (( $(echo "$USAGE > 95" | bc -l) )); then
CLASS="max"
elif (( $(echo "$USAGE > 75" | bc -l) )); then
CLASS="high"
else
CLASS="normal"
fi
echo "{\"text\":\"GPU: $TEXT\", \"tooltip\": \"$GPU\", \"class\":\"$CLASS\"}"

19
waybar/scripts/memory.sh Executable file
View File

@@ -0,0 +1,19 @@
#!/bin/sh
# TOOLTIP=$(ps -eo rss,comm --sort=-rss | head -n 6 | sed '1d' | awk '{output = output sprintf("%.2f GB\t%s\\n", $1/1024/1024, $2)} END {printf "%s", output}')
TOTAL=$(awk '/MemTotal/ {printf "%.2f\n", $2/1024/1024}' /proc/meminfo)
USED=$(awk '/MemTotal/ {total=$2} /MemAvailable/ {available=$2} END {printf "%.2f\n", (total-available)/1024/1024}' /proc/meminfo)
RATIO=$(echo "$USED/ $TOTAL" | bc -l)
CLASS=""
if (( $(echo "$RATIO> 95" | bc -l) )); then
CLASS="max"
elif (( $(echo "$RATIO> 75" | bc -l) )); then
CLASS="high"
else
CLASS="normal"
fi
# printf '{"text": "%s/%sGB", "tooltip": "%s", "class": "%s"}' "$USED" "$TOTAL" "$TOOLTIP" "$CLASS"
printf '{"text": "%s/%sGB", "class": "%s"}' "$USED" "$TOTAL" "$CLASS"

View File

@@ -1,49 +0,0 @@
#!/bin/bash
# --- CONFIGURATION ---
# Your Pixel Buds Pro's MAC Address
MAC_ADDRESS="B4:23:A2:09:D3:53"
# --- END CONFIGURATION ---
# Check if the device is connected using bluetoothctl.
if bluetoothctl info "$MAC_ADDRESS" | grep -q "Connected: yes"; then
# If connected, get battery info from pbpctrl.
if battery_output=$(pbpctrl show battery); then
# Use awk to grab the third field, which is the percentage or "unknown".
left_bud=$(echo "$battery_output" | grep "left bud:" | awk '{print $3}')
right_bud=$(echo "$battery_output" | grep "right bud:" | awk '{print $3}')
# If both buds are unknown (e.g., case is closed and buds are out of range),
# or if the command output is empty, hide the module.
if ([[ "$left_bud" == "unknown" ]] && [[ "$right_bud" == "unknown" ]]) || \
[[ -z "$left_bud" && -z "$right_bud" ]]; then
echo "{}"
exit 0
fi
# Prepare the display string for the left bud.
if [[ "$left_bud" == "unknown" ]]; then
left_display="L: ---"
else
left_display="L: $left_bud"
fi
# Prepare the display string for the right bud.
if [[ "$right_bud" == "unknown" ]]; then
right_display="R: ---"
else
right_display="R: $right_bud"
fi
# Format the final output for Waybar as JSON.
printf '{"text": "%s | %s", "tooltip": "Pixel Buds Pro 2", "class": "connected"}\n' "$left_display" "$right_display"
else
# pbpctrl failed to run, so hide the module.
echo "{}"
fi
else
# Not connected, output an empty JSON object to hide the module.
echo "{}"
fi

View File

@@ -0,0 +1,126 @@
#!/bin/bash
# --- CONFIGURATION ---
# Your Pixel Buds Pro's MAC Address
MAC_ADDRESS="B4:23:A2:09:D3:53"
# --- END CONFIGURATION ---
not_connected() {
printf "{\"text\": \"<span size='large'></span>\", \"tooltip\": \"Pixel Buds Pro 2 not connected\", \"class\": \"disconnected\"}\n"
exit
}
# This function gets the current status and formats it for Waybar.
get_status() {
# Get all info from pbpctrl in one go. Redirect errors to null.
battery_output=$(pbpctrl show battery 2>/dev/null)
# Fallback: If pbpctrl fails or returns 'unknown', hide the module.
if [[ $? -ne 0 || -z "$battery_output" ]]; then
not_connected
fi
# --- PARSE BATTERY INFO ---
left_bud=$(echo "$battery_output" | grep "left bud:" | awk '{print $3}')
right_bud=$(echo "$battery_output" | grep "right bud:" | awk '{print $3}')
if ([[ "$left_bud" == "unknown" ]] && [[ "$right_bud" == "unknown" ]]) || \
[[ -z "$left_bud" && -z "$right_bud" ]]; then
echo "{}"
exit
fi
if [[ "$left_bud" == "unknown" ]]; then
left_display="L: ---"
else
left_display="L: $left_bud"
fi
if [[ "$right_bud" == "unknown" ]]; then
right_display="R: ---"
else
right_display="R: $right_bud"
fi
# --- PARSE ANC INFO ---
current_mode=$(pbpctrl get anc 2>/dev/null)
case "$current_mode" in
"active")
anc_icon="ANC"
class="anc-active"
;;
"aware")
anc_icon="Aware"
class="anc-aware"
;;
"off")
anc_icon="Off"
class="anc-off"
;;
*)
anc_icon="?"
class="anc-unknown"
;;
esac
# --- FORMAT OUTPUT ---
printf '{"text": "%s | %s | %s", "tooltip": "Pixel Buds Pro 2", "class": "%s"}\n' \
"$left_display" "$right_display" "$anc_icon" "$class"
exit
}
status() {
# First, check if the device is connected using bluetoothctl.
if bluetoothctl info "$MAC_ADDRESS" | grep -q "Connected: yes"; then
# --- DEVICE IS CONNECTED ---
get_status
else
# --- DEVICE IS NOT CONNECTED ---
not_connected
fi
}
# Handle click actions passed from Waybar.
case "$1" in
cycle_anc)
current_mode=$(pbpctrl get anc 2>/dev/null)
next_mode="active"
case "$current_mode" in
active)
next_mode="aware"
;;
aware)
next_mode="off"
;;
off)
next_mode="active"
;;
esac
pbpctrl set anc "$next_mode"
sleep 0.1
exit
;;
connect)
if bluetoothctl info "$MAC_ADDRESS" | grep -q "Connected: yes"; then
notify-send "Pixel Buds Pro 2 are already connected"
exit
else
bluetoothctl connect "$MAC_ADDRESS"
exit
fi
;;
disconnect)
if bluetoothctl info "$MAC_ADDRESS" | grep -q "Connected: yes"; then
bluetoothctl disconnect "$MAC_ADDRESS"
exit
else
notify-send "Pixel Buds Pro 2 aren't connected"
exit
fi
;;
*)
status
exit
;;
esac

View File

@@ -1,54 +0,0 @@
#!/bin/bash
# Script to manage and display system76-power profiles for Waybar
# Define the available power profiles
PROFILES=("Performance" "Balanced" "Battery")
# Get the current power profile
CURRENT_PROFILE=$(system76-power profile | awk '/Power Profile/ {print $3}')
# Function to switch to the next profile
switch_next_profile() {
# Find the index of the current profile
for i in "${!PROFILES[@]}"; do
if [[ "${PROFILES[$i]}" == "$CURRENT_PROFILE" ]]; then
current_index=$i
break
fi
done
# Calculate the index of the next profile
next_index=$(((current_index + 1) % ${#PROFILES[@]}))
NEXT_PROFILE=${PROFILES[$next_index]}
# Switch to the next profile
system76-power profile "$NEXT_PROFILE"
}
# If the script is called with "next", switch the profile
if [[ "$1" == "next" ]]; then
switch_next_profile
# After switching, get the new current profile
CURRENT_PROFILE=$(system76-power profile | awk '/Power Profile/ {print $3}')
fi
# Set an icon based on the current profile
case $CURRENT_PROFILE in
"Performance")
ICON="🚀"
;;
"Balanced")
ICON="⚖️"
;;
"Battery")
ICON="🔋"
;;
*)
ICON="❓"
;;
esac
# Output in JSON format for Waybar
printf '{"text": "%s", "tooltip": "Power Profile: %s", "class": "%s"}\n' "$ICON" "$CURRENT_PROFILE" "$(echo $CURRENT_PROFILE | tr '[:upper:]' '[:lower:]')"

View File

@@ -1,2 +0,0 @@
#!/bin/bash
wlogout -p layer-shell

View File

@@ -51,4 +51,4 @@ else # Fallback for "fully-charged", "pending-charge", etc.
fi
# Output JSON for Waybar
printf '{"text": "%s %s%%", "tooltip": "%s", "class": "%s"}\n' "$icon" "$percentage" "$tooltip" "$class"
printf '{"text": "%s%% %s", "tooltip": "%s", "class": "%s"}\n' "$percentage" "$icon" "$tooltip" "$class"

View File

@@ -0,0 +1,9 @@
#!/bin/bash
PID_FILE="/tmp/gpu-screen-recorder.pid"
if [ -f "$PID_FILE" ] && ps -p "$(cat "$PID_FILE")" > /dev/null; then
$HOME/.config/hypr/scripts/replay-ctrl.sh stop
else
$HOME/.config/hypr/scripts/replay-ctrl.sh start
fi

View File

@@ -10,7 +10,7 @@
}
window#waybar {
background-color: alpha(@base, 0.6);
background-color: alpha(@base, 0.4);
padding: 10px;
transition-property: background-color;
transition-duration: 0.5s;
@@ -21,9 +21,6 @@ window#waybar.hidden {
opacity: 0.5;
}
#workspaces {
}
#workspaces button {
all: initial;
/* Remove GTK theme values (waybar #1351) */
@@ -32,29 +29,33 @@ window#waybar.hidden {
box-shadow: inset 0 -3px transparent;
/* Use box-shadow instead of border so the text isn't offset */
padding: 6px 18px;
margin: 6px 3px;
border-radius: 3px;
background-color: alpha(@base, 0.9);
color: @text;
margin: 0px 3px;
border-radius: 10px;
background-color: @base;
color: @subtext0;
}
#workspaces button.active {
border-bottom: 3px solid @green;
color: @text;
border-bottom: 3px solid @blue;
}
#workspaces button:hover {
box-shadow: inherit;
text-shadow: inherit;
background-color: @teal;
color: @base;
background-color: @surface0;
color: @text;
}
#workspaces button.urgent {
border-bottom: 3px solid @red;
border-bottom: 3px solid @maroon;
}
#memory,
#cpu,
#custom-gpu,
#custom-cpu,
#custom-mem,
#custom-power,
#custom-gamemode,
#custom-tlp,
@@ -64,38 +65,79 @@ window#waybar.hidden {
#network,
#clock,
#tray,
#custom-pixelbuds,
#custom-anc,
#custom-audio-output {
border-radius: 4px;
margin: 6px 3px;
#custom-disk-root,
#custom-disk-gdrive,
#custom-disk-games,
#custom-disk-data,
#custom-pixelbuds_pro,
#custom-bluetooth-audio,
#custom-audio-output,
#custom-btrfs,
#custom-gpu-screen-recorder {
border-radius: 10px;
margin: 0px 3px;
padding: 6px 12px;
background-color: @base;
color: @text;
}
#custom-anc.anc-active {
color: @teal;
border-bottom: 3px solid @teal;
#wireplumber.muted, #custom-pixelbuds_pro, #custom-audio-output.muted {
background-color: @base;
color: @subtext1;
border-bottom: 3px solid @subtext1;
}
#custom-anc.anc-aware {
color: @yellow;
border-bottom: 3px solid @yellow;
#custom-pixelbuds_pro.disconnected {
padding-right: 16px;
padding-left: 12px;
}
#custom-anc.anc-off {
color: @text;
border-bottom: 3px solid @text;
#custom-gpu-screen-recorder,
#custom-gpu-screen-recorder.recording {
padding-right: 18px;
padding-left: 10px;
}
#custom-anc.disconnected {
}
#custom-power,
#custom-gamemode {
color: @red;
padding: 6px 12px 6px 10px;
padding-right: 15px;
padding-left: 11px;
}
#custom-pixelbuds_pro.anc-active {
color: @sapphire;
border-bottom: 3px solid @sapphire;
}
#custom-bluetooth-audio {
color: @sapphire;
border-bottom: 3px solid @sapphire;
}
#custom-pixelbuds_pro.anc-aware {
color: @sapphire;
border-bottom: 3px solid @sapphire;
}
#custom-pixelbuds_pro.anc-off {
color: @text;
border-bottom: 3px solid @text;
}
#custom-gpu-screen-recorder,
#custom-gamemode {
background-color: @base;
color: @subtext1;
border-bottom: 3px solid @subtext1;
}
#custom-power {
color: @maroon;
}
#custom-gpu-screen-recorder.recording,
#custom-gamemode.active {
color: @maroon;
border-bottom: 3px solid @maroon;
}
#custom-tlp {
@@ -105,22 +147,22 @@ window#waybar.hidden {
#custom-tlp.charging {
color: @teal;
border-bottom: 3px solid @teal;
border-bottom: 3px solid @teal;
}
#custom-tlp.bat {
color: @sapphire;
border-bottom: 3px solid @sapphire;
border-bottom: 3px solid @sapphire;
}
#custom-tlp.warning {
color: @yellow;
border-bottom: 3px solid @yellow;
border-bottom: 3px solid @yellow;
}
#custom-tlp.critical {
color: @red;
border-bottom: 3px solid @red;
border-bottom: 3px solid @red;
animation-name: blink;
animation-duration: 0.8s;
animation-timing-function: linear;
@@ -131,15 +173,48 @@ window#waybar.hidden {
@keyframes blink {
to {
color: @yellow;
border-bottom: 3px solid @yellow;
border-bottom: 3px solid @yellow;
opacity: 0.6;
}
}
#memory,
#cpu {
#custom-gpu.max,
#custom-cpu.max,
#custom-mem.max,
#custom-btrfs.max,
#custom-disk-root.max,
#custom-disk-gdrive.max,
#custom-disk-games.max,
#custom-disk-data.max {
color: @maroon;
border-bottom: 3px solid @maroon;
/* border-bottom: 3px solid @maroon; */
}
#custom-gpu.high,
#custom-gpu.high,
#custom-mem.high,
#custom-btrfs.high,
#custom-disk-root.high,
#custom-disk-gdrive.high,
#custom-disk-games.high,
#custom-disk-data.high {
color: @yellow;
/* border-bottom: 3px solid @yellow; */
}
#memory,
#cpu,
#disk,
#custom-gpu.normal,
#custom-cpu.normal,
#custom-mem.normal,
#custom-btrfs.normal,
#custom-disk-root.normal,
#custom-disk-gdrive.normal,
#custom-disk-games.normal,
#custom-disk-data.normal {
color: @blue;
/* border-bottom: 3px solid @mauve; */
}
@@ -148,28 +223,28 @@ window#waybar.hidden {
}
#wireplumber {
color: @mauve;
padding-right: 15px;
border-bottom: 3px solid @mauve;
}
#custom-audio-output {
color: @mauve;
border-bottom: 3px solid @mauve;
padding-right: 16px;
}
#network {
color: @maroon;
}
#custom-audio-output.unmuted, #wireplumber {
color: @mauve;
padding-right: 15px;
border-bottom: 3px solid @mauve;
}
#clock {
font-family: JetBrainsMono Nerd Font;
color: @mauve;
}
#network {
padding-right: 15px;
}
tooltip {
border-radius: 8px;
border-radius: 10px;
padding: 15px;
background-color: @base;
}
@@ -178,8 +253,3 @@ tooltip label {
padding: 5px;
background-color: @base;
}
#custom-pixelbuds.connected {
color: @teal; /* A pleasant green */
border-bottom: 3px solid @teal;
}

View File

@@ -1,157 +0,0 @@
/* ~/.config/waybar/style.css */
@import "./catppuccin-waybar/themes/mocha.css";
* {
border: none;
border-radius: 0;
min-height: 0;
font-family: JetBrainsMono Nerd Font;
font-size: 13px;
}
window#waybar {
background-color: alpha(@base, 0.6);
margin: 10px;
transition-property: background-color;
transition-duration: 0.5s;
color: @text;
}
window#waybar.hidden {
opacity: 0.5;
}
#workspaces {
}
#workspaces button {
all: initial;
/* Remove GTK theme values (waybar #1351) */
min-width: 0;
/* Fix weird spacing in materia (waybar #450) */
box-shadow: inset 0 -3px transparent;
/* Use box-shadow instead of border so the text isn't offset */
padding: 6px 18px;
margin: 6px 3px;
border-radius: 3px;
background-color: alpha(@base, 0.9);
color: @text;
}
#workspaces button.active {
border-bottom: 3px solid @green;
}
#workspaces button:hover {
box-shadow: inherit;
text-shadow: inherit;
background-color: @teal;
color: @base;
}
#workspaces button.urgent {
border-bottom: 3px solid @red;
}
#memory,
#cpu,
#custom-power,
#custom-tlp,
#battery,
#backlight,
#wireplumber,
#network,
#clock,
#tray {
border-radius: 4px;
margin: 6px 3px;
padding: 6px 12px;
background-color: @base;
color: @text;
}
#custom-power {
color: @red;
padding: 6px 12px 6px 10px;
}
#custom-tlp {
padding: 0 10px;
padding-right: 10px;
margin-right: 0;
}
#custom-tlp.ac {
color: @green; /* Catppuccin Green for AC power */
}
#custom-tlp.bat {
color: @yellow; /* Catppuccin Yellow for Battery power */
}
#battery {
color: @text;
padding: 0 10px;
padding-left: 0;
margin-left: 0;
}
#battery.charging, #battery.plugged {
color: @green;
}
#battery.warning {
color: @yellow;
}
#battery.critical {
color: @red;
animation-name: blink;
animation-duration: 0.8s;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
}
@keyframes blink {
to {
color: @text;
}
}
#memory,
#cpu {
color: @maroon;
}
#backlight {
color: @mauve;
}
#wireplumber {
color: @mauve;
padding-right: 15px;
}
#network {
color: @mauve;
padding-right: 15px;
}
#clock {
font-family: JetBrainsMono Nerd Font;
color: @mauve;
}
tooltip {
border-radius: 8px;
padding: 15px;
background-color: @base;
}
tooltip label {
padding: 5px;
background-color: @base;
}

View File

@@ -1,81 +0,0 @@
/* ~/.config/waybar/style.css */
@import "./catppuccin-waybar/themes/mocha.css";
* {
font-family: "0xProto Nerd Font", FontAwesome, sans-serif;
font-size: 14px;
padding: 0 5px;
}
window#waybar {
background-color: alpha(@base, 0.9);
border-bottom: 3px solid @mauve;
color: @text;
}
#workspaces {
margin-bottom: 5px;
}
#workspaces button {
padding: 0 5px;
background-color: transparent;
color: @surface2;
}
#workspaces button.active {
color: @mauve;
border-bottom: 3px solid @pink;
}
#workspaces button:hover {
background: @surface0;
box-shadow: inherit;
text-shadow: inherit;
}
#custom-power {
color: @red;
padding: 0 10px;
}
#custom-tlp {
padding: 0 10px;
}
#custom-tlp.ac {
color: @green; /* Catppuccin Green for AC power */
}
#custom-tlp.bat {
color: @yellow; /* Catppuccin Yellow for Battery power */
}
#battery {
color: @text;
padding: 0 10px;
padding-left: 0;
}
#battery.charging, #battery.plugged {
color: @green;
}
#battery.warning {
color: @yellow;
}
#battery.critical {
color: @red;
animation-name: blink;
animation-duration: 0.8s;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
}
@keyframes blink {
to {
color: @text;
}
}

View File

@@ -0,0 +1,29 @@
monitor.alsa.rules = [
{
matches = [
{
node.name = "alsa_output.usb-iFi__by_AMR__iFi__by_AMR__HD_USB_Audio_0003-00.analog-stereo"
}
]
actions = {
update-props = {
audio.format = "S32_LE"
audio.rate = 96000
session.suspend-timeout-seconds = 0
}
}
},
{
matches = [
{
node.name = "alsa_output.hw_U192k_0"
}
]
actions = {
update-props = {
audio.format = "S32_LE"
audio.rate = 96000
}
}
}
]

37
zathura/catppuccin-mocha Normal file
View File

@@ -0,0 +1,37 @@
set default-fg rgba(205,214,244,1)
set default-bg rgba(30,30,46,1)
set completion-bg rgba(49,50,68,1)
set completion-fg rgba(205,214,244,1)
set completion-highlight-bg rgba(203,166,247,1)
set completion-highlight-fg rgba(30,30,46,1)
set completion-group-bg rgba(24,24,37,1)
set completion-group-fg rgba(205,214,244,1)
set statusbar-fg rgba(205,214,244,1)
set statusbar-bg rgba(17,17,27,1)
set inputbar-fg rgba(205,214,244,1)
set inputbar-bg rgba(30,30,46,1)
set notification-bg rgba(30,30,46,1)
set notification-fg rgba(205,214,244,1)
set notification-error-bg rgba(30,30,46,1)
set notification-error-fg rgba(243,139,168,1)
set notification-warning-bg rgba(30,30,46,1)
set notification-warning-fg rgba(249,226,175,1)
set recolor "true"
set recolor-lightcolor rgba(30,30,46,1)
set recolor-darkcolor rgba(205,214,244,1)
set index-fg rgba(205,214,244,1)
set index-bg rgba(30,30,46,1)
set index-active-fg rgba(205,214,244,1)
set index-active-bg rgba(49,50,68,1)
set render-loading-bg rgba(30,30,46,1)
set render-loading-fg rgba(205,214,244,1)
set highlight-color rgba(147,153,178,0.3)
set highlight-fg rgba(205,214,244,1)
set highlight-active-color rgba(203,166,247,0.3)