Compare commits
15 Commits
918c52f6f3
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| db7d5d17a6 | |||
| 70de42923c | |||
| dae66e3608 | |||
| 2fb95b16e8 | |||
| 89ce9ab548 | |||
| 146429f594 | |||
| 13bc86f713 | |||
| e8ef6712af | |||
| d7c1b0e733 | |||
| 20ea9cc4d1 | |||
| bc9e2b7c19 | |||
| 85feb977a1 | |||
| 5356157750 | |||
| 2f31b86e65 | |||
| 6acb9b9aaa |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -6,6 +6,7 @@
|
|||||||
!alacritty/
|
!alacritty/
|
||||||
!dunst/
|
!dunst/
|
||||||
!hypr/
|
!hypr/
|
||||||
|
!hyprpanel/
|
||||||
!nvim/
|
!nvim/
|
||||||
!waybar/
|
!waybar/
|
||||||
!zathura/
|
!zathura/
|
||||||
@@ -23,3 +24,4 @@
|
|||||||
!wireplumber/
|
!wireplumber/
|
||||||
!systemd/
|
!systemd/
|
||||||
fish/fish_variables
|
fish/fish_variables
|
||||||
|
waybar/fluxo-rs
|
||||||
|
|||||||
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -22,3 +22,6 @@
|
|||||||
[submodule "fuzzel/catppuccin-fuzzel"]
|
[submodule "fuzzel/catppuccin-fuzzel"]
|
||||||
path = fuzzel/catppuccin-fuzzel
|
path = fuzzel/catppuccin-fuzzel
|
||||||
url = https://github.com/catppuccin/fuzzel.git
|
url = https://github.com/catppuccin/fuzzel.git
|
||||||
|
[submodule "nvim"]
|
||||||
|
path = nvim
|
||||||
|
url = https://git.narl.io/nvrl/nvim-config.git
|
||||||
|
|||||||
@@ -26,8 +26,8 @@ lines = 24
|
|||||||
|
|
||||||
## Blank space added around the window in pixels.
|
## Blank space added around the window in pixels.
|
||||||
[window.padding]
|
[window.padding]
|
||||||
x = 30
|
x = 3
|
||||||
y = 30
|
y = 0
|
||||||
|
|
||||||
## SCROLLING ------------------------------------------------------
|
## SCROLLING ------------------------------------------------------
|
||||||
[scrolling]
|
[scrolling]
|
||||||
|
|||||||
113
btop/btop.conf
113
btop/btop.conf
@@ -1,18 +1,18 @@
|
|||||||
#? Config file for btop v. 1.4.5
|
#? Config file for btop v.1.4.6
|
||||||
|
|
||||||
#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes.
|
#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes.
|
||||||
#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes"
|
#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes"
|
||||||
color_theme = "/home/narl/.config/btop/themes/catppuccin_mocha.theme"
|
color_theme = "/home/narl/.config/btop/themes/catppuccin_mocha.theme"
|
||||||
|
|
||||||
#* If the theme set background should be shown, set to False if you want terminal background transparency.
|
#* If the theme set background should be shown, set to False if you want terminal background transparency.
|
||||||
theme_background = False
|
theme_background = false
|
||||||
|
|
||||||
#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false.
|
#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false.
|
||||||
truecolor = True
|
truecolor = true
|
||||||
|
|
||||||
#* Set to true to force tty mode regardless if a real tty has been detected or not.
|
#* Set to true to force tty mode regardless if a real tty has been detected or not.
|
||||||
#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols.
|
#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols.
|
||||||
force_tty = False
|
force_tty = false
|
||||||
|
|
||||||
#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets.
|
#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets.
|
||||||
#* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box.
|
#* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box.
|
||||||
@@ -22,10 +22,13 @@ presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:defaul
|
|||||||
|
|
||||||
#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists.
|
#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists.
|
||||||
#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift.
|
#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift.
|
||||||
vim_keys = True
|
vim_keys = true
|
||||||
|
|
||||||
#* Rounded corners on boxes, is ignored if TTY mode is ON.
|
#* Rounded corners on boxes, is ignored if TTY mode is ON.
|
||||||
rounded_corners = True
|
rounded_corners = true
|
||||||
|
|
||||||
|
#* Use terminal synchronized output sequences to reduce flickering on supported terminals.
|
||||||
|
terminal_sync = true
|
||||||
|
|
||||||
#* Default symbols to use for graph creation, "braille", "block" or "tty".
|
#* Default symbols to use for graph creation, "braille", "block" or "tty".
|
||||||
#* "braille" offers the highest resolution but might not be included in all fonts.
|
#* "braille" offers the highest resolution but might not be included in all fonts.
|
||||||
@@ -53,44 +56,47 @@ graph_symbol_proc = "default"
|
|||||||
shown_boxes = "cpu mem net proc"
|
shown_boxes = "cpu mem net proc"
|
||||||
|
|
||||||
#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs.
|
#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs.
|
||||||
update_ms = 2000
|
update_ms = 1000
|
||||||
|
|
||||||
#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct",
|
#* 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.
|
#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly.
|
||||||
proc_sorting = "cpu lazy"
|
proc_sorting = "cpu lazy"
|
||||||
|
|
||||||
#* Reverse sorting order, True or False.
|
#* Reverse sorting order, True or False.
|
||||||
proc_reversed = False
|
proc_reversed = false
|
||||||
|
|
||||||
#* Show processes as a tree.
|
#* Show processes as a tree.
|
||||||
proc_tree = True
|
proc_tree = true
|
||||||
|
|
||||||
#* Use the cpu graph colors in the process list.
|
#* Use the cpu graph colors in the process list.
|
||||||
proc_colors = True
|
proc_colors = true
|
||||||
|
|
||||||
#* Use a darkening gradient in the process list.
|
#* Use a darkening gradient in the process list.
|
||||||
proc_gradient = 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.
|
#* 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 = false
|
||||||
|
|
||||||
#* Show process memory as bytes instead of percent.
|
#* Show process memory as bytes instead of percent.
|
||||||
proc_mem_bytes = True
|
proc_mem_bytes = true
|
||||||
|
|
||||||
#* Show cpu graph for each process.
|
#* Show cpu graph for each process.
|
||||||
proc_cpu_graphs = True
|
proc_cpu_graphs = true
|
||||||
|
|
||||||
#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate)
|
#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate)
|
||||||
proc_info_smaps = False
|
proc_info_smaps = false
|
||||||
|
|
||||||
#* Show proc box on left side of screen instead of right.
|
#* Show proc box on left side of screen instead of right.
|
||||||
proc_left = False
|
proc_left = false
|
||||||
|
|
||||||
#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop).
|
#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop).
|
||||||
proc_filter_kernel = False
|
proc_filter_kernel = false
|
||||||
|
|
||||||
#* In tree-view, always accumulate child process resources in the parent process.
|
#* In tree-view, always accumulate child process resources in the parent process.
|
||||||
proc_aggregate = False
|
proc_aggregate = false
|
||||||
|
|
||||||
|
#* Should cpu and memory usage display be preserved for dead processes when paused.
|
||||||
|
keep_dead_proc_usage = false
|
||||||
|
|
||||||
#* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available.
|
#* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available.
|
||||||
#* Select from a list of detected attributes from the options menu.
|
#* Select from a list of detected attributes from the options menu.
|
||||||
@@ -104,28 +110,28 @@ cpu_graph_lower = "Auto"
|
|||||||
show_gpu_info = "Auto"
|
show_gpu_info = "Auto"
|
||||||
|
|
||||||
#* Toggles if the lower CPU graph should be inverted.
|
#* Toggles if the lower CPU graph should be inverted.
|
||||||
cpu_invert_lower = True
|
cpu_invert_lower = true
|
||||||
|
|
||||||
#* Set to True to completely disable the lower CPU graph.
|
#* Set to True to completely disable the lower CPU graph.
|
||||||
cpu_single_graph = False
|
cpu_single_graph = false
|
||||||
|
|
||||||
#* Show cpu box at bottom of screen instead of top.
|
#* Show cpu box at bottom of screen instead of top.
|
||||||
cpu_bottom = False
|
cpu_bottom = false
|
||||||
|
|
||||||
#* Shows the system uptime in the CPU box.
|
#* Shows the system uptime in the CPU box.
|
||||||
show_uptime = True
|
show_uptime = true
|
||||||
|
|
||||||
#* Shows the CPU package current power consumption in watts. Requires running `make setcap` or `make setuid` or running with sudo.
|
#* Shows the CPU package current power consumption in watts. Requires running `make setcap` or `make setuid` or running with sudo.
|
||||||
show_cpu_watts = True
|
show_cpu_watts = true
|
||||||
|
|
||||||
#* Show cpu temperature.
|
#* Show cpu temperature.
|
||||||
check_temp = True
|
check_temp = true
|
||||||
|
|
||||||
#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors.
|
#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors.
|
||||||
cpu_sensor = "Auto"
|
cpu_sensor = "Auto"
|
||||||
|
|
||||||
#* Show temperatures for cpu cores also if check_temp is True and sensors has been found.
|
#* Show temperatures for cpu cores also if check_temp is True and sensors has been found.
|
||||||
show_coretemp = True
|
show_coretemp = true
|
||||||
|
|
||||||
#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core.
|
#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core.
|
||||||
#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine.
|
#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine.
|
||||||
@@ -137,17 +143,20 @@ cpu_core_map = ""
|
|||||||
temp_scale = "celsius"
|
temp_scale = "celsius"
|
||||||
|
|
||||||
#* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024.
|
#* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024.
|
||||||
base_10_sizes = False
|
base_10_sizes = false
|
||||||
|
|
||||||
#* Show CPU frequency.
|
#* Show CPU frequency.
|
||||||
show_cpu_freq = True
|
show_cpu_freq = true
|
||||||
|
|
||||||
|
#* How to calculate CPU frequency, available values: "first", "range", "lowest", "highest" and "average".
|
||||||
|
freq_mode = "first"
|
||||||
|
|
||||||
#* Draw a clock at top of screen, formatting according to strftime, empty string to disable.
|
#* Draw a clock at top of screen, formatting according to strftime, empty string to disable.
|
||||||
#* Special formatting: /host = hostname | /user = username | /uptime = system uptime
|
#* Special formatting: /host = hostname | /user = username | /uptime = system uptime
|
||||||
clock_format = "%X"
|
clock_format = "%X"
|
||||||
|
|
||||||
#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort.
|
#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort.
|
||||||
background_update = True
|
background_update = true
|
||||||
|
|
||||||
#* Custom cpu model name, empty string to disable.
|
#* Custom cpu model name, empty string to disable.
|
||||||
custom_cpu_name = ""
|
custom_cpu_name = ""
|
||||||
@@ -157,43 +166,43 @@ custom_cpu_name = ""
|
|||||||
disks_filter = ""
|
disks_filter = ""
|
||||||
|
|
||||||
#* Show graphs instead of meters for memory values.
|
#* Show graphs instead of meters for memory values.
|
||||||
mem_graphs = True
|
mem_graphs = true
|
||||||
|
|
||||||
#* Show mem box below net box instead of above.
|
#* Show mem box below net box instead of above.
|
||||||
mem_below_net = False
|
mem_below_net = false
|
||||||
|
|
||||||
#* Count ZFS ARC in cached and available memory.
|
#* Count ZFS ARC in cached and available memory.
|
||||||
zfs_arc_cached = True
|
zfs_arc_cached = true
|
||||||
|
|
||||||
#* If swap memory should be shown in memory box.
|
#* If swap memory should be shown in memory box.
|
||||||
show_swap = True
|
show_swap = true
|
||||||
|
|
||||||
#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk.
|
#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk.
|
||||||
swap_disk = True
|
swap_disk = true
|
||||||
|
|
||||||
#* If mem box should be split to also show disks info.
|
#* If mem box should be split to also show disks info.
|
||||||
show_disks = True
|
show_disks = true
|
||||||
|
|
||||||
#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar.
|
#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar.
|
||||||
only_physical = True
|
only_physical = true
|
||||||
|
|
||||||
#* Read disks list from /etc/fstab. This also disables only_physical.
|
#* Read disks list from /etc/fstab. This also disables only_physical.
|
||||||
use_fstab = True
|
use_fstab = true
|
||||||
|
|
||||||
#* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool)
|
#* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool)
|
||||||
zfs_hide_datasets = False
|
zfs_hide_datasets = false
|
||||||
|
|
||||||
#* Set to true to show available disk space for privileged users.
|
#* Set to true to show available disk space for privileged users.
|
||||||
disk_free_priv = False
|
disk_free_priv = false
|
||||||
|
|
||||||
#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view.
|
#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view.
|
||||||
show_io_stat = True
|
show_io_stat = true
|
||||||
|
|
||||||
#* Toggles io mode for disks, showing big graphs for disk read/write speeds.
|
#* Toggles io mode for disks, showing big graphs for disk read/write speeds.
|
||||||
io_mode = False
|
io_mode = false
|
||||||
|
|
||||||
#* Set to True to show combined read/write io graphs in io mode.
|
#* Set to True to show combined read/write io graphs in io mode.
|
||||||
io_graph_combined = False
|
io_graph_combined = false
|
||||||
|
|
||||||
#* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ".
|
#* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ".
|
||||||
#* Example: "/mnt/media:100 /:20 /boot:1".
|
#* Example: "/mnt/media:100 /:20 /boot:1".
|
||||||
@@ -205,10 +214,10 @@ net_download = 100
|
|||||||
net_upload = 100
|
net_upload = 100
|
||||||
|
|
||||||
#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest.
|
#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest.
|
||||||
net_auto = True
|
net_auto = true
|
||||||
|
|
||||||
#* Sync the auto scaling for download and upload to whichever currently has the highest scale.
|
#* Sync the auto scaling for download and upload to whichever currently has the highest scale.
|
||||||
net_sync = True
|
net_sync = true
|
||||||
|
|
||||||
#* Starts with the Network Interface specified here.
|
#* Starts with the Network Interface specified here.
|
||||||
net_iface = ""
|
net_iface = ""
|
||||||
@@ -217,26 +226,32 @@ net_iface = ""
|
|||||||
base_10_bitrate = "Auto"
|
base_10_bitrate = "Auto"
|
||||||
|
|
||||||
#* Show battery stats in top right if battery is present.
|
#* Show battery stats in top right if battery is present.
|
||||||
show_battery = True
|
show_battery = true
|
||||||
|
|
||||||
#* Which battery to use if multiple are present. "Auto" for auto detection.
|
#* Which battery to use if multiple are present. "Auto" for auto detection.
|
||||||
selected_battery = "Auto"
|
selected_battery = "Auto"
|
||||||
|
|
||||||
#* Show power stats of battery next to charge indicator.
|
#* Show power stats of battery next to charge indicator.
|
||||||
show_battery_watts = True
|
show_battery_watts = true
|
||||||
|
|
||||||
#* Set loglevel for "~/.config/btop/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG".
|
#* Set loglevel for "~/.local/state/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG".
|
||||||
#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info.
|
#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info.
|
||||||
log_level = "WARNING"
|
log_level = "WARNING"
|
||||||
|
|
||||||
|
#* Automatically save current settings to config file on exit.
|
||||||
|
save_config_on_exit = true
|
||||||
|
|
||||||
#* Measure PCIe throughput on NVIDIA cards, may impact performance on certain cards.
|
#* Measure PCIe throughput on NVIDIA cards, may impact performance on certain cards.
|
||||||
nvml_measure_pcie_speeds = True
|
nvml_measure_pcie_speeds = true
|
||||||
|
|
||||||
#* Measure PCIe throughput on AMD cards, may impact performance on certain cards.
|
#* Measure PCIe throughput on AMD cards, may impact performance on certain cards.
|
||||||
rsmi_measure_pcie_speeds = True
|
rsmi_measure_pcie_speeds = true
|
||||||
|
|
||||||
#* Horizontally mirror the GPU graph.
|
#* Horizontally mirror the GPU graph.
|
||||||
gpu_mirror_graph = True
|
gpu_mirror_graph = true
|
||||||
|
|
||||||
|
#* Set which GPU vendors to show. Available values are "nvidia amd intel"
|
||||||
|
shown_gpus = "nvidia amd intel"
|
||||||
|
|
||||||
#* Custom gpu0 model name, empty string to disable.
|
#* Custom gpu0 model name, empty string to disable.
|
||||||
custom_gpu_name0 = ""
|
custom_gpu_name0 = ""
|
||||||
|
|||||||
@@ -32,6 +32,8 @@ set -l GCR_SSH_SOCK $XDG_RUNTIME_DIR/gcr/ssh
|
|||||||
if test -S "$GCR_SSH_SOCK"
|
if test -S "$GCR_SSH_SOCK"
|
||||||
set -gx SSH_AUTH_SOCK "$GCR_SSH_SOCK"
|
set -gx SSH_AUTH_SOCK "$GCR_SSH_SOCK"
|
||||||
end
|
end
|
||||||
if uwsm check may-start && uwsm select
|
if status is-login && test -z "$DISPLAY" -a -z "$WAYLAND_DISPLAY"
|
||||||
exec uwsm start default
|
if uwsm check may-start && uwsm select
|
||||||
|
exec uwsm start default
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ general {
|
|||||||
# BACKGROUND
|
# BACKGROUND
|
||||||
background {
|
background {
|
||||||
monitor =
|
monitor =
|
||||||
path = $HOME/Pictures/exp33/exp33-oled.jpeg
|
path = $HOME/Pictures/mandelbrot.png
|
||||||
blur_passes = 0
|
blur_passes = 0
|
||||||
color = $base
|
color = $base
|
||||||
}
|
}
|
||||||
|
|||||||
1
hypr/lid_state.conf
Normal file
1
hypr/lid_state.conf
Normal file
@@ -0,0 +1 @@
|
|||||||
|
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
# Or execute your favorite apps at launch like this:
|
# Or execute your favorite apps at launch like this:
|
||||||
|
|
||||||
# exec-once = uwsm app -- waybar
|
# exec-once = uwsm app -- waybar
|
||||||
|
# exec-once = uwsm app -- hyprpanel
|
||||||
# exec-once = uwsm app -- nextcloud --background
|
# exec-once = uwsm app -- nextcloud --background
|
||||||
exec-once = uwsm app -- nm-applet --indicator
|
exec-once = uwsm app -- nm-applet --indicator
|
||||||
# exec-once = uwsm app -- rclone mount google_drive: ~/gdrive
|
# exec-once = uwsm app -- rclone mount google_drive: ~/gdrive
|
||||||
@@ -13,3 +14,4 @@ exec-once = uwsm app -- hyprpaper
|
|||||||
# exec-once = uwsm app -- /usr/lib/xdg-desktop-portal-hyprland
|
# 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 text --watch cliphist store # Stores only text data
|
||||||
exec-once = wl-paste --type image --watch cliphist store # Stores only image data
|
exec-once = wl-paste --type image --watch cliphist store # Stores only image data
|
||||||
|
exec-once = uwsm app -- ~/.cargo/bin/fluxo-rs daemon
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
|
|
||||||
# See https://wiki.hyprland.org/Configuring/Environment-variables/
|
# See https://wiki.hyprland.org/Configuring/Environment-variables/
|
||||||
|
|
||||||
|
# env = INTEL_DEBUG,noccs
|
||||||
|
# env = WLR_DRM_NO_ATOMIC,1
|
||||||
env = HYPRCURSOR_THEME,Bibata-Modern-Classic
|
env = HYPRCURSOR_THEME,Bibata-Modern-Classic
|
||||||
env = HYPRCURSOR_SIZE,24
|
env = HYPRCURSOR_SIZE,24
|
||||||
env = XCURSOR_SIZE,24
|
env = XCURSOR_SIZE,24
|
||||||
@@ -12,3 +14,4 @@ env = QT_QPA_PLATFORMTHEME,qt6ct
|
|||||||
# env = VDPAU_DRIVER,radeonsi
|
# env = VDPAU_DRIVER,radeonsi
|
||||||
env = MOZ_ENABLE_WAYLAND,1
|
env = MOZ_ENABLE_WAYLAND,1
|
||||||
env = ELECTRON_OZONE_PLATFORM_HINT,wayland
|
env = ELECTRON_OZONE_PLATFORM_HINT,wayland
|
||||||
|
env = EDITOR,nvim
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
# https://wiki.hyprland.org/Configuring/Variables/#input
|
# https://wiki.hyprland.org/Configuring/Variables/#input
|
||||||
input {
|
input {
|
||||||
kb_layout = us
|
kb_layout = us,us
|
||||||
kb_variant = dvorak-intl, intl
|
kb_variant = dvorak-intl, intl
|
||||||
# kb_variant = intl
|
# kb_variant = intl
|
||||||
kb_model =
|
kb_model =
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
|
|
||||||
# monitor = desc:Samsung Electric Company LC27G7xT H4ZRA00734, 2560x1440@90, 0x-1440, 1
|
# laptop screen
|
||||||
# monitor = desc:Samsung Electric Company LC27G7xT H4ZRA00734, 2560x1440@90, 0x-1440, 1, bitdepth, 10
|
|
||||||
monitor = desc:Samsung Electric Company LC27G7xT H4ZRA00734, 1920x1080@90, 0x-1080, 1
|
|
||||||
monitor = eDP-1, 1920x1080@60, 0x0, 1
|
monitor = eDP-1, 1920x1080@60, 0x0, 1
|
||||||
|
# samsung home monitor
|
||||||
|
monitor = desc:Samsung Electric Company LC27G7xT H4ZRA00734, 2560x1440@144, 0x-1440, 1
|
||||||
|
|
||||||
|
|
||||||
|
# lid_state fallback
|
||||||
|
source = ~/.config/hypr/lid_state.conf
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ general {
|
|||||||
resize_on_border = false
|
resize_on_border = false
|
||||||
|
|
||||||
# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
|
# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
|
||||||
allow_tearing = true
|
allow_tearing = false
|
||||||
|
|
||||||
layout = dwindle
|
layout = dwindle
|
||||||
}
|
}
|
||||||
@@ -96,7 +96,7 @@ master {
|
|||||||
misc {
|
misc {
|
||||||
force_default_wallpaper = 0 # Set to 0 or 1 to disable the anime mascot wallpapers
|
force_default_wallpaper = 0 # Set to 0 or 1 to disable the anime mascot wallpapers
|
||||||
disable_hyprland_logo = true # If true disables the random hyprland logo / anime girl background. :(
|
disable_hyprland_logo = true # If true disables the random hyprland logo / anime girl background. :(
|
||||||
vrr = 0
|
vrr = 1
|
||||||
font_family = FiraCode Nerd Font
|
font_family = FiraCode Nerd Font
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,21 @@
|
|||||||
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
|
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
|
||||||
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
|
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
|
||||||
|
|
||||||
|
# ==========================================
|
||||||
|
# VARIABLES
|
||||||
|
# ==========================================
|
||||||
|
# Dialogs and utility apps that should float in the center
|
||||||
|
$dialog_titles = ^(Open Form|Open File|Select a File|Choose a file|Open Workspace|Choose Directory|Save As|Save File|branchdialog|pinentry-gtk-2|Confirm to replace files|File Operation Progress|Open Files|Anmelden – Google Konten — Zen Browser)$
|
||||||
|
$dialog_classes = ^(pavucontrol|blueman-manager|nm-connection-editor|org.pulseaudio.pavucontrol)$
|
||||||
|
|
||||||
|
# App classes
|
||||||
|
$steam = ^(steam)$
|
||||||
|
$gamescope = ^(gamescope)$
|
||||||
|
|
||||||
|
|
||||||
|
# ==========================================
|
||||||
|
# GENERAL & FIXES
|
||||||
|
# ==========================================
|
||||||
# Ignore maximize requests from apps. You'll probably like this.
|
# Ignore maximize requests from apps. You'll probably like this.
|
||||||
# windowrule = suppress_event maximize, match:class .*
|
# windowrule = suppress_event maximize, match:class .*
|
||||||
|
|
||||||
@@ -9,45 +24,54 @@
|
|||||||
windowrule = no_blur 1, match:class ^$, match:title ^$
|
windowrule = no_blur 1, match:class ^$, match:title ^$
|
||||||
|
|
||||||
|
|
||||||
# games for tearing add the immediate rule
|
# ==========================================
|
||||||
|
# FLOATING & CENTERED DIALOGS
|
||||||
|
# ==========================================
|
||||||
|
# Make them float
|
||||||
|
windowrule = float 1, match:title $dialog_titles
|
||||||
|
windowrule = float 1, match:class $dialog_classes
|
||||||
|
|
||||||
# Float Windows
|
# Set to 800x600
|
||||||
windowrule = float 1, match:title ^(Open File|Select a File|Select Folder|Choose a file|Open Form|Open Workspace|Choose Directory|Save As|Save File|branchdialog|pinentry-gtk-2|Confirm to replace files|File Operation Progress)$
|
windowrule = size 800 600, match:title $dialog_titles
|
||||||
windowrule = float 1, match:class ^(pavucontrol|blueman-manager|nm-connection-editor)$
|
windowrule = size 800 600, match:class $dialog_classes
|
||||||
|
|
||||||
# Center and Resize Windows
|
# Center them on the screen
|
||||||
windowrule = size 800 600, match:title ^(Open Form|Open File|Select a File|Choose a file|Open Workspace|Choose Directory|Save As|Save File|branchdialog|pinentry-gtk-2|Confirm to replace files|File Operation Progress)$
|
windowrule = center 1, match:title $dialog_titles
|
||||||
windowrule = size 800 600, match:class ^(pavucontrol|blueman-manager|nm-connection-editor)$
|
windowrule = center 1, match:class $dialog_classes
|
||||||
|
|
||||||
windowrule = center 1, match:title ^(Open Form|Open File|Select a File|Choose a file|Open Workspace|Choose Directory|Save As|Save File|branchdialog|pinentry-gtk-2|Confirm to replace files|File Operation Progress)$
|
# Disable blur
|
||||||
windowrule = center 1, match:class ^(pavucontrol|blueman-manager|nm-connection-editor)$
|
windowrule = no_blur 1, match:title $dialog_titles
|
||||||
|
windowrule = no_blur 1, match:class $dialog_classes
|
||||||
|
|
||||||
windowrule = no_blur 1, match:title ^(Open Form|Open File|Select a File|Choose a file|Open Workspace|Choose Directory|Save As|Save File|branchdialog|pinentry-gtk-2|Confirm to replace files|File Operation Progress)$
|
|
||||||
windowrule = no_blur 1, match:class ^(pavucontrol|blueman-manager|nm-connection-editor)$
|
|
||||||
|
|
||||||
# Workspace Rules
|
# ==========================================
|
||||||
|
# WORKSPACE ASSIGNMENTS
|
||||||
|
# ==========================================
|
||||||
|
# Normal Workspaces
|
||||||
# windowrule = workspace 1, match:class ^(firefox)$
|
# windowrule = workspace 1, match:class ^(firefox)$
|
||||||
# windowrule = workspace 2, match:class ^(kitty)$
|
# windowrule = workspace 2, match:class ^(kitty)$
|
||||||
# windowrule = workspace 3, match:class ^(Code)$
|
# windowrule = workspace 3, match:class ^(Code)$
|
||||||
|
windowrule = workspace 1, match:class $gamescope
|
||||||
|
|
||||||
|
# Special Workspaces
|
||||||
windowrule = workspace special:virtual, match:class ^(Spotify|spotify)$
|
windowrule = workspace special:virtual, match:class ^(Spotify|spotify)$
|
||||||
windowrule = workspace special:discord, match:class ^(discord|vesktop)$
|
windowrule = workspace special:discord, match:class ^(discord|vesktop)$
|
||||||
|
|
||||||
# steam rules
|
|
||||||
|
|
||||||
windowrule = workspace 3 silent, match:class ^(steam)$, match:title ^(Steam)$
|
# ==========================================
|
||||||
windowrule = workspace 4, match:class ^(gamescope)$
|
# APP-SPECIFIC RULES: STEAM & GAMING
|
||||||
|
# ==========================================
|
||||||
|
# windowrule = workspace 3 silent, match:class $steam, match:title ^(Steam)$
|
||||||
|
|
||||||
# fixed sizes for different windows
|
# Fixed sizes for specific Steam windows
|
||||||
windowrule = size 400 800, match:title ^(Friends List)$, match:class ^(steam)$
|
windowrule = size 400 800, match:title ^(Friends List)$, match:class $steam
|
||||||
windowrule = size 1000 800, match:title ^(Steam Settings)$, match:class ^(steam)$
|
windowrule = size 1000 800, match:title ^(Steam Settings)$, match:class $steam
|
||||||
windowrule = size 1000 800, match:title ^(Add Non-Steam Game)$, match:class ^(steam)$
|
windowrule = size 1000 800, match:title ^(Add Non-Steam Game)$, match:class $steam
|
||||||
|
|
||||||
# float windows that arent the main steam window
|
# Float and disable blur for Steam windows that aren't the main window
|
||||||
windowrule = float 1, match:class ^(steam)$, match:title negative:^(Steam)$
|
windowrule = float 1, match:class $steam, match:title negative:^(Steam)$
|
||||||
windowrule = no_blur 1, match:class ^(steam)$, match:title negative:^(Steam)$
|
windowrule = no_blur 1, match:class $steam, match:title negative:^(Steam)$
|
||||||
# windowrule = center 1, match:class ^(steam)$, match:title negative:^(Steam)$
|
# windowrule = center 1, match:class $steam, match:title negative:^(Steam)$
|
||||||
|
|
||||||
# allow tearing for games started with gamescope
|
# Allow tearing for games started with Gamescope
|
||||||
windowrule = immediate 1, match:class ^(gamescope)$
|
windowrule = immediate 1, match:class $gamescope
|
||||||
|
|||||||
@@ -1,18 +1,53 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# ~/.config/hypr/scripts/lid_handler.sh
|
# ~/.config/hypr/scripts/lid_handler.sh
|
||||||
|
|
||||||
if [[ "$1" == "close" ]]; then
|
# The file that tells Hyprland to keep the lid off during reloads
|
||||||
# Lid closed: disable laptop screen if any DP-* monitor is present
|
LID_STATE_FILE="$HOME/.config/hypr/lid_state.conf"
|
||||||
# Using 'all' to detect monitors even if they are currently disabled
|
|
||||||
if hyprctl monitors all | grep -q "Monitor DP-"; then
|
|
||||||
hyprctl keyword monitor "eDP-1, disable" # Disable laptop display
|
|
||||||
|
|
||||||
# Enable all detected DP-* monitors
|
restart_ui() {
|
||||||
for monitor in $(hyprctl monitors all | grep "Monitor DP-" | awk '{print $2}'); do
|
# Spawn in background and detach
|
||||||
hyprctl keyword monitor "$monitor, enable"
|
systemctl restart --user waybar hyprpaper
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ "$1" == "close" ]]; then
|
||||||
|
# Check if ANY external monitor is connected and active
|
||||||
|
if hyprctl monitors all | grep -qE "Monitor (DP|HDMI|Type-C)-"; then
|
||||||
|
|
||||||
|
# Prevent laptop screen from turning on during manual config reloads
|
||||||
|
echo "monitor=eDP-1, disable" > "$LID_STATE_FILE"
|
||||||
|
|
||||||
|
# Extract the CURRENT live settings of all external monitors using jq
|
||||||
|
# This grabs the active resolution, refresh rate, position, and scale.
|
||||||
|
LIVE_MONITORS=$(hyprctl -j monitors | jq -c '.[] | select(.name != "eDP-1")')
|
||||||
|
|
||||||
|
# 3. Disable the laptop screen
|
||||||
|
hyprctl keyword monitor "eDP-1, disable"
|
||||||
|
|
||||||
|
# 4. Re-apply the live settings to external monitors so they don't reset
|
||||||
|
echo "$LIVE_MONITORS" | while read -r mon_json; do
|
||||||
|
NAME=$(echo "$mon_json" | jq -r '.name')
|
||||||
|
WIDTH=$(echo "$mon_json" | jq -r '.width')
|
||||||
|
HEIGHT=$(echo "$mon_json" | jq -r '.height')
|
||||||
|
REFRESH=$(echo "$mon_json" | jq -r '.refreshRate')
|
||||||
|
X=$(echo "$mon_json" | jq -r '.x')
|
||||||
|
Y=$(echo "$mon_json" | jq -r '.y')
|
||||||
|
SCALE=$(echo "$mon_json" | jq -r '.scale')
|
||||||
|
|
||||||
|
# Formats it exactly as Hyprland expects: DP-1, 1920x1080@240, 0x0, 1
|
||||||
|
hyprctl keyword monitor "$NAME, ${WIDTH}x${HEIGHT}@${REFRESH}, ${X}x${Y}, $SCALE"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# restart ui
|
||||||
|
restart_ui
|
||||||
fi
|
fi
|
||||||
|
|
||||||
elif [[ "$1" == "open" ]]; then
|
elif [[ "$1" == "open" ]]; then
|
||||||
# Lid opened: re-enable laptop screen
|
# Clear the override file so the laptop screen is allowed to turn on again
|
||||||
hyprctl keyword monitor "eDP-1, enable"
|
echo "" > "$LID_STATE_FILE"
|
||||||
|
|
||||||
|
# Let Hyprland reload itself.
|
||||||
|
# This automatically re-enables eDP-1 based on your hardcoded hyprland.conf!
|
||||||
|
hyprctl reload
|
||||||
|
|
||||||
|
restart_ui
|
||||||
fi
|
fi
|
||||||
166
hyprpanel/config.json
Normal file
166
hyprpanel/config.json
Normal file
@@ -0,0 +1,166 @@
|
|||||||
|
{
|
||||||
|
"log_level": "LOG_LEVEL_INFO",
|
||||||
|
"log_subprocesses_to_journal": false,
|
||||||
|
"dbus": {
|
||||||
|
"enabled": true,
|
||||||
|
"connect_timeout": "20s",
|
||||||
|
"connect_interval": "0.200s",
|
||||||
|
"notifications": {
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
"systray": {
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
"shortcuts": {
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
"brightness": {
|
||||||
|
"enabled": true,
|
||||||
|
"adjust_step_percent": 5,
|
||||||
|
"min_brightness": 1,
|
||||||
|
"enable_logind": true,
|
||||||
|
"hud_notifications": true
|
||||||
|
},
|
||||||
|
"power": {
|
||||||
|
"enabled": true,
|
||||||
|
"low_percent": 10,
|
||||||
|
"critical_percent": 5,
|
||||||
|
"hud_notifications": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"audio": {
|
||||||
|
"enabled": true,
|
||||||
|
"volume_step_percent": 5,
|
||||||
|
"volume_exceed_maximum": false,
|
||||||
|
"hud_notifications": true
|
||||||
|
},
|
||||||
|
"panels": [
|
||||||
|
{
|
||||||
|
"id": "panel0",
|
||||||
|
"edge": "EDGE_TOP",
|
||||||
|
"size": 34,
|
||||||
|
"monitor": "",
|
||||||
|
"modules": [
|
||||||
|
{
|
||||||
|
"pager": {
|
||||||
|
"icon_size": 14,
|
||||||
|
"active_monitor_only": false,
|
||||||
|
"scroll_wrap_workspaces": true,
|
||||||
|
"scroll_include_inactive": true,
|
||||||
|
"enable_workspace_names": false,
|
||||||
|
"pinned": [1, 2, 3, 4, 5, 6],
|
||||||
|
"preview_width": 256
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"spacer": {
|
||||||
|
"size": 8,
|
||||||
|
"expand": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"taskbar": {
|
||||||
|
"icon_size": 24,
|
||||||
|
"active_workspace_only": true,
|
||||||
|
"active_monitor_only": true,
|
||||||
|
"group_tasks": true,
|
||||||
|
"expand": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"spacer": {
|
||||||
|
"expand": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"clock": {
|
||||||
|
"time_format": "15:04",
|
||||||
|
"date_format": "%a %d %b",
|
||||||
|
"tooltip_time_format": "15:04",
|
||||||
|
"tooltip_date_format": "Monday, 02 January 2006"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"spacer": {
|
||||||
|
"expand": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"systray": {
|
||||||
|
"icon_size": 18,
|
||||||
|
"menu_icon_size": 18,
|
||||||
|
"pinned": [
|
||||||
|
"nm-applet"
|
||||||
|
],
|
||||||
|
"modules": [
|
||||||
|
{
|
||||||
|
"power": {
|
||||||
|
"icon_size": 18,
|
||||||
|
"icon_symbolic": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"spacer": {
|
||||||
|
"size": 8,
|
||||||
|
"expand": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"notifications": {
|
||||||
|
"icon_size": 18,
|
||||||
|
"notification_icon_size": 48,
|
||||||
|
"default_timeout": "7s",
|
||||||
|
"position": "POSITION_TOP_RIGHT",
|
||||||
|
"margin": 24
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"spacer": {
|
||||||
|
"size": 8,
|
||||||
|
"expand": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"audio": {
|
||||||
|
"icon_size": 18,
|
||||||
|
"icon_symbolic": true,
|
||||||
|
"command_mixer": "pavucontrol",
|
||||||
|
"enable_source": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"spacer": {
|
||||||
|
"size": 8,
|
||||||
|
"expand": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"session": {
|
||||||
|
"icon_size": 18,
|
||||||
|
"icon_symbolic": true,
|
||||||
|
"overlay_icon_size": 64,
|
||||||
|
"overlay_icon_symbolic": true,
|
||||||
|
"command_logout": "uwsm stop",
|
||||||
|
"command_reboot": "systemctl reboot",
|
||||||
|
"command_suspend": "systemctl suspend",
|
||||||
|
"command_shutdown": "systemctl poweroff"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"spacer": {
|
||||||
|
"size": 8,
|
||||||
|
"expand": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"launch_wrapper": [
|
||||||
|
"uwsm",
|
||||||
|
"app",
|
||||||
|
"--"
|
||||||
|
]
|
||||||
|
}
|
||||||
127
hyprpanel/style.css
Normal file
127
hyprpanel/style.css
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
/* Catppuccin Mocha Palette */
|
||||||
|
@define-color base #1e1e2e;
|
||||||
|
@define-color mantle #181825;
|
||||||
|
@define-color crust #11111b;
|
||||||
|
@define-color surface0 #313244;
|
||||||
|
@define-color surface1 #45475a;
|
||||||
|
@define-color surface2 #585b70;
|
||||||
|
@define-color text #cdd6f4;
|
||||||
|
@define-color subtext0 #a6adc8;
|
||||||
|
@define-color subtext1 #bac2de;
|
||||||
|
@define-color overlay0 #6c7086;
|
||||||
|
@define-color overlay1 #7f849c;
|
||||||
|
@define-color overlay2 #9399b2;
|
||||||
|
@define-color blue #89b4fa;
|
||||||
|
@define-color lavender #b4befe;
|
||||||
|
@define-color sapphire #74c7ec;
|
||||||
|
@define-color sky #89dceb;
|
||||||
|
@define-color teal #94e2d5;
|
||||||
|
@define-color green #a6e3a1;
|
||||||
|
@define-color yellow #f9e2af;
|
||||||
|
@define-color peach #fab387;
|
||||||
|
@define-color maroon #eba0ac;
|
||||||
|
@define-color red #f38ba8;
|
||||||
|
@define-color mauve #cba6f7;
|
||||||
|
@define-color flamingo #f2cdcd;
|
||||||
|
@define-color rosewater #f5e0dc;
|
||||||
|
|
||||||
|
* {
|
||||||
|
font-family: "JetBrainsMono Nerd Font";
|
||||||
|
font-size: 13px;
|
||||||
|
border: none;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
window#panel0 {
|
||||||
|
background-color: alpha(@base, 0.7);
|
||||||
|
color: @text;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pager {
|
||||||
|
margin: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pager button {
|
||||||
|
background-color: @surface0;
|
||||||
|
color: @subtext0;
|
||||||
|
border-radius: 12px;
|
||||||
|
margin: 0 2px;
|
||||||
|
padding: 0 12px;
|
||||||
|
transition: all 0.2s ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pager button.active {
|
||||||
|
background-color: @mauve;
|
||||||
|
color: @base;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pager button:hover {
|
||||||
|
background-color: @surface1;
|
||||||
|
color: @text;
|
||||||
|
}
|
||||||
|
|
||||||
|
#taskbar button {
|
||||||
|
background-color: transparent;
|
||||||
|
color: @subtext1;
|
||||||
|
border-radius: 12px;
|
||||||
|
margin: 0 2px;
|
||||||
|
padding: 0 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#taskbar button.active {
|
||||||
|
background-color: @surface0;
|
||||||
|
border-bottom: 2px solid @mauve;
|
||||||
|
}
|
||||||
|
|
||||||
|
#clock, #systray, #audio, #session, #notifications {
|
||||||
|
background-color: @surface0;
|
||||||
|
color: @text;
|
||||||
|
border-radius: 15px;
|
||||||
|
margin: 4px 3px;
|
||||||
|
padding: 0 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#notifications {
|
||||||
|
color: @yellow;
|
||||||
|
}
|
||||||
|
|
||||||
|
#clock {
|
||||||
|
color: @mauve;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
#audio {
|
||||||
|
color: @sapphire;
|
||||||
|
}
|
||||||
|
|
||||||
|
#audio.muted {
|
||||||
|
color: @subtext0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#session {
|
||||||
|
color: @red;
|
||||||
|
padding: 0 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Notifications and HUD */
|
||||||
|
#notifications {
|
||||||
|
background-color: @base;
|
||||||
|
color: @text;
|
||||||
|
border: 1px solid @surface1;
|
||||||
|
border-radius: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#hud {
|
||||||
|
background-color: alpha(@base, 0.8);
|
||||||
|
color: @text;
|
||||||
|
border-radius: 20px;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#hud .progress-bar {
|
||||||
|
background-color: @surface1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#hud .progress-bar-fill {
|
||||||
|
background-color: @mauve;
|
||||||
|
}
|
||||||
@@ -15,6 +15,8 @@ application/x-extension-xht=zen.desktop
|
|||||||
x-scheme-handler/about=google-chrome.desktop
|
x-scheme-handler/about=google-chrome.desktop
|
||||||
x-scheme-handler/unknown=google-chrome.desktop
|
x-scheme-handler/unknown=google-chrome.desktop
|
||||||
application/vnd.openxmlformats-officedocument.wordprocessingml.document=libreoffice-writer.desktop
|
application/vnd.openxmlformats-officedocument.wordprocessingml.document=libreoffice-writer.desktop
|
||||||
|
x-scheme-handler/ror2mm=r2modman.desktop
|
||||||
|
image/webp=feh.desktop
|
||||||
|
|
||||||
[Added Associations]
|
[Added Associations]
|
||||||
application/pdf=org.pwmt.zathura-pdf-poppler.desktop;
|
application/pdf=org.pwmt.zathura-pdf-poppler.desktop;
|
||||||
@@ -25,3 +27,4 @@ x-scheme-handler/https=zen.desktop;
|
|||||||
text/html=zen.desktop;
|
text/html=zen.desktop;
|
||||||
x-scheme-handler/chrome=zen.desktop;
|
x-scheme-handler/chrome=zen.desktop;
|
||||||
application/vnd.openxmlformats-officedocument.wordprocessingml.document=libreoffice-writer.desktop;
|
application/vnd.openxmlformats-officedocument.wordprocessingml.document=libreoffice-writer.desktop;
|
||||||
|
image/webp=feh.desktop;
|
||||||
|
|||||||
1
nvim
Submodule
1
nvim
Submodule
Submodule nvim added at 8d657d0f8d
334
nvim/init.lua
334
nvim/init.lua
@@ -1,334 +0,0 @@
|
|||||||
vim.o.number = true
|
|
||||||
vim.o.wrap = false
|
|
||||||
vim.o.tabstop = 4
|
|
||||||
vim.o.shiftwidth = 4
|
|
||||||
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 = ','
|
|
||||||
|
|
||||||
-- Set up 'mini.deps' (customize to your liking)
|
|
||||||
require('mini.deps').setup()
|
|
||||||
|
|
||||||
local add = MiniDeps.add
|
|
||||||
|
|
||||||
add({
|
|
||||||
source = 'williamboman/mason.nvim'
|
|
||||||
})
|
|
||||||
|
|
||||||
add({
|
|
||||||
source = 'stevearc/conform.nvim'
|
|
||||||
})
|
|
||||||
|
|
||||||
add({
|
|
||||||
source = 'williamboman/mason-lspconfig.nvim'
|
|
||||||
})
|
|
||||||
|
|
||||||
add({
|
|
||||||
source = 'mfussenegger/nvim-lint'
|
|
||||||
})
|
|
||||||
|
|
||||||
add({
|
|
||||||
source = 'akinsho/toggleterm.nvim'
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Add to current session (install if absent)
|
|
||||||
add({
|
|
||||||
source = 'neovim/nvim-lspconfig',
|
|
||||||
-- Supply dependencies near target plugin
|
|
||||||
depends = { 'williamboman/mason.nvim' },
|
|
||||||
})
|
|
||||||
|
|
||||||
add({
|
|
||||||
source = 'seblyng/roslyn.nvim',
|
|
||||||
})
|
|
||||||
|
|
||||||
add({
|
|
||||||
source = 'tris203/rzls.nvim',
|
|
||||||
})
|
|
||||||
|
|
||||||
add({
|
|
||||||
source = 'nvim-treesitter/nvim-treesitter',
|
|
||||||
-- Use 'master' while monitoring updates in 'main'
|
|
||||||
checkout = 'master',
|
|
||||||
monitor = 'main',
|
|
||||||
-- Perform action after every checkout
|
|
||||||
hooks = { post_checkout = function() vim.cmd('TSUpdate') end },
|
|
||||||
})
|
|
||||||
|
|
||||||
add({
|
|
||||||
-- Completion framework:
|
|
||||||
source = 'hrsh7th/nvim-cmp',
|
|
||||||
|
|
||||||
-- LSP completion source:
|
|
||||||
depends = {'hrsh7th/cmp-nvim-lsp',
|
|
||||||
'hrsh7th/cmp-nvim-lua',
|
|
||||||
'hrsh7th/cmp-nvim-lsp-signature-help',
|
|
||||||
'hrsh7th/cmp-vsnip',
|
|
||||||
'hrsh7th/cmp-path',
|
|
||||||
'hrsh7th/cmp-buffer',
|
|
||||||
'hrsh7th/vim-vsnip',
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
add({ source = "catppuccin/nvim", name = "catppuccin" })
|
|
||||||
|
|
||||||
require('mini.files').setup({
|
|
||||||
mappings = {
|
|
||||||
show_help = 'gh',
|
|
||||||
},
|
|
||||||
})
|
|
||||||
require('mini.icons').setup({style = 'ascii'})
|
|
||||||
require('mini.pick').setup({})
|
|
||||||
require('mini.snippets').setup({})
|
|
||||||
require('mini.notify').setup({})
|
|
||||||
require('mini.statusline').setup({})
|
|
||||||
require('mini.tabline').setup({})
|
|
||||||
require('mini.git').setup({})
|
|
||||||
local imap_expr = function(lhs, rhs)
|
|
||||||
vim.keymap.set('i', lhs, rhs, { expr = true })
|
|
||||||
end
|
|
||||||
imap_expr('<Tab>', [[pumvisible() ? "\<C-n>" : "\<Tab>"]])
|
|
||||||
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 this
|
|
||||||
-- according to other plugins. For example if 'mini.pairs' is set up, replace
|
|
||||||
-- next line with `return MiniPairs.cr()`
|
|
||||||
return '\r'
|
|
||||||
end
|
|
||||||
|
|
||||||
vim.keymap.set('i', '<CR>', 'v:lua.cr_action()', { expr = true })
|
|
||||||
require("toggleterm").setup{
|
|
||||||
size = function(term)
|
|
||||||
if term.direction == "horizontal" then
|
|
||||||
return 30
|
|
||||||
elseif term.direction == "vertical" then
|
|
||||||
return 69
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
open_mapping = [[<c-\>]],
|
|
||||||
hide_numbers = true,
|
|
||||||
shade_terminals = true,
|
|
||||||
persist_size = true,
|
|
||||||
direction = 'float',
|
|
||||||
close_on_exit = true,
|
|
||||||
shell = vim.o.shell,
|
|
||||||
}
|
|
||||||
|
|
||||||
require('nvim-treesitter.configs').setup {
|
|
||||||
ensure_installed = { "lua", "rust", "toml", "c_sharp" },
|
|
||||||
auto_install = true,
|
|
||||||
highlight = {
|
|
||||||
enable = true,
|
|
||||||
additional_vim_regex_highlighting=false,
|
|
||||||
},
|
|
||||||
ident = { enable = true },
|
|
||||||
rainbow = {
|
|
||||||
enable = true,
|
|
||||||
extended_mode = true,
|
|
||||||
max_file_lines = nil,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
require("mason").setup({
|
|
||||||
registries = {
|
|
||||||
"github:mason-org/mason-registry",
|
|
||||||
"github:Crashdummyy/mason-registry",
|
|
||||||
},
|
|
||||||
ui = {
|
|
||||||
icons = {
|
|
||||||
package_installed = "✓",
|
|
||||||
package_pending = "➜",
|
|
||||||
package_uninstalled = "✗"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
require("mason-lspconfig").setup()
|
|
||||||
vim.lsp.config('rust_analyzer', {
|
|
||||||
-- Server-specific settings. See `:help lsp-quickstart`
|
|
||||||
settings = {
|
|
||||||
['rust-analyzer'] = {},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
require('roslyn').setup({
|
|
||||||
config = {
|
|
||||||
-- the rest of your Roslyn configuration
|
|
||||||
handlers = require("rzls.roslyn_handlers"),
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
require("catppuccin").setup({
|
|
||||||
flavour = "auto", -- latte, frappe, macchiato, mocha
|
|
||||||
background = { -- :h background
|
|
||||||
light = "latte",
|
|
||||||
dark = "mocha",
|
|
||||||
},
|
|
||||||
transparent_background = false, -- disables setting the background color.
|
|
||||||
show_end_of_buffer = false, -- shows the '~' characters after the end of buffers
|
|
||||||
term_colors = false, -- sets terminal colors (e.g. `g:terminal_color_0`)
|
|
||||||
dim_inactive = {
|
|
||||||
enabled = false, -- dims the background color of inactive window
|
|
||||||
shade = "dark",
|
|
||||||
percentage = 0.15, -- percentage of the shade to apply to the inactive window
|
|
||||||
},
|
|
||||||
no_italic = false, -- Force no italic
|
|
||||||
no_bold = false, -- Force no bold
|
|
||||||
no_underline = false, -- Force no underline
|
|
||||||
styles = { -- Handles the styles of general hi groups (see `:h highlight-args`):
|
|
||||||
comments = { "italic" }, -- Change the style of comments
|
|
||||||
conditionals = { "italic" },
|
|
||||||
loops = {},
|
|
||||||
functions = {},
|
|
||||||
keywords = {},
|
|
||||||
strings = {},
|
|
||||||
variables = {},
|
|
||||||
numbers = {},
|
|
||||||
booleans = {},
|
|
||||||
properties = {},
|
|
||||||
types = {},
|
|
||||||
operators = {},
|
|
||||||
-- miscs = {}, -- Uncomment to turn off hard-coded styles
|
|
||||||
},
|
|
||||||
color_overrides = {},
|
|
||||||
custom_highlights = {},
|
|
||||||
default_integrations = true,
|
|
||||||
integrations = {
|
|
||||||
cmp = true,
|
|
||||||
gitsigns = true,
|
|
||||||
nvimtree = true,
|
|
||||||
treesitter = true,
|
|
||||||
notify = false,
|
|
||||||
mini = {
|
|
||||||
enabled = true,
|
|
||||||
indentscope_color = "",
|
|
||||||
},
|
|
||||||
-- For more plugins integrations please scroll down (https://github.com/catppuccin/nvim#integrations)
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
local sign = function(opts)
|
|
||||||
vim.fn.sign_define(opts.name, {
|
|
||||||
texthl = opts.name,
|
|
||||||
text = opts.text,
|
|
||||||
numhl = ''
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
sign({name = 'DiagnosticSignError', text = ''})
|
|
||||||
sign({name = 'DiagnosticSignWarn', text = ''})
|
|
||||||
sign({name = 'DiagnosticSignHint', text = ''})
|
|
||||||
sign({name = 'DiagnosticSignInfo', text = ''})
|
|
||||||
--Set completeopt to have a better completion experience
|
|
||||||
-- :help completeopt
|
|
||||||
-- menuone: popup even when there's only one match
|
|
||||||
-- noinsert: Do not insert text until a selection is made
|
|
||||||
-- noselect: Do not select, force to select one from the menu
|
|
||||||
-- shortness: avoid showing extra messages when using completion
|
|
||||||
-- updatetime: set updatetime for CursorHold
|
|
||||||
vim.opt.completeopt = {'menuone', 'noselect', 'noinsert'}
|
|
||||||
vim.opt.shortmess = vim.opt.shortmess + { c = true}
|
|
||||||
vim.api.nvim_set_option('updatetime', 300)
|
|
||||||
|
|
||||||
-- Fixed column for diagnostics to appear
|
|
||||||
-- Show autodiagnostic popup on cursor hover_range
|
|
||||||
-- Goto previous / next diagnostic warning / error
|
|
||||||
-- Show inlay_hints more frequently
|
|
||||||
vim.cmd([[
|
|
||||||
set signcolumn=yes
|
|
||||||
autocmd CursorHold * lua vim.diagnostic.open_float(nil, { focusable = false })
|
|
||||||
]])
|
|
||||||
|
|
||||||
vim.diagnostic.config({
|
|
||||||
virtual_text = false,
|
|
||||||
signs = true,
|
|
||||||
update_in_insert = true,
|
|
||||||
underline = true,
|
|
||||||
severity_sort = false,
|
|
||||||
float = {
|
|
||||||
border = 'rounded',
|
|
||||||
source = 'always',
|
|
||||||
header = '',
|
|
||||||
prefix = '',
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
-- 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'})
|
|
||||||
|
|
||||||
-- 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'})
|
|
||||||
vim.keymap.set('n', '<leader>fh', '<cmd>Pick help<cr>', {desc = 'Search help tags'})
|
|
||||||
|
|
||||||
vim.keymap.set('n', '<leader>h', '<cmd>wincmd h<cr>')
|
|
||||||
vim.keymap.set('n', '<leader>l', '<cmd>wincmd l<cr>')
|
|
||||||
vim.keymap.set('n', '<leader>j', '<cmd>wincmd j<cr>')
|
|
||||||
vim.keymap.set('n', '<leader>k', '<cmd>wincmd k<cr>')
|
|
||||||
|
|
||||||
-- Rust
|
|
||||||
|
|
||||||
local cmp = require'cmp'
|
|
||||||
cmp.setup({
|
|
||||||
-- Enable LSP snippets
|
|
||||||
snippet = {
|
|
||||||
expand = function(args)
|
|
||||||
vim.fn["vsnip#anonymous"](args.body)
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
mapping = {
|
|
||||||
['<C-p>'] = cmp.mapping.select_prev_item(),
|
|
||||||
['<C-n>'] = cmp.mapping.select_next_item(),
|
|
||||||
-- Add tab support
|
|
||||||
['<S-Tab>'] = cmp.mapping.select_prev_item(),
|
|
||||||
['<Tab>'] = cmp.mapping.select_next_item(),
|
|
||||||
['<C-S-f>'] = cmp.mapping.scroll_docs(-4),
|
|
||||||
['<C-f>'] = cmp.mapping.scroll_docs(4),
|
|
||||||
['<C-Space>'] = cmp.mapping.complete(),
|
|
||||||
['<C-e>'] = cmp.mapping.close(),
|
|
||||||
['<CR>'] = cmp.mapping.confirm({
|
|
||||||
behavior = cmp.ConfirmBehavior.Insert,
|
|
||||||
select = true,
|
|
||||||
})
|
|
||||||
},
|
|
||||||
-- Installed sources:
|
|
||||||
sources = {
|
|
||||||
{ name = 'path' }, -- file paths
|
|
||||||
{ name = 'nvim_lsp', keyword_length = 3 }, -- from language server
|
|
||||||
{ name = 'nvim_lsp_signature_help'}, -- display function signatures with current parameter emphasized
|
|
||||||
{ name = 'nvim_lua', keyword_length = 2}, -- complete neovim's Lua runtime API such vim.lsp.*
|
|
||||||
{ name = 'buffer', keyword_length = 2 }, -- source current buffer
|
|
||||||
{ name = 'vsnip', keyword_length = 2 }, -- nvim-cmp source for vim-vsnip
|
|
||||||
{ name = 'calc'}, -- source for math calculation
|
|
||||||
},
|
|
||||||
window = {
|
|
||||||
completion = cmp.config.window.bordered(),
|
|
||||||
documentation = cmp.config.window.bordered(),
|
|
||||||
},
|
|
||||||
formatting = {
|
|
||||||
fields = {'menu', 'abbr', 'kind'},
|
|
||||||
format = function(entry, item)
|
|
||||||
local menu_icon ={
|
|
||||||
nvim_lsp = 'λ',
|
|
||||||
vsnip = '⋗',
|
|
||||||
buffer = 'Ω',
|
|
||||||
path = '🖫',
|
|
||||||
}
|
|
||||||
item.menu = menu_icon[entry.source.name]
|
|
||||||
return item
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
Submodule nvim/pack/nvim/start/mini.nvim deleted from 432a0614f8
Submodule nvim/pack/nvim/start/nvim-lspconfig deleted from f47cd681d7
1
systemd/user/default.target.wants/narl_io_mount.service
Symbolic link
1
systemd/user/default.target.wants/narl_io_mount.service
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
/home/narl/.config/systemd/user/narl_io_mount.service
|
||||||
1
systemd/user/default.target.wants/vaulthunters_mount.service
Symbolic link
1
systemd/user/default.target.wants/vaulthunters_mount.service
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
/home/narl/.config/systemd/user/vaulthunters_mount.service
|
||||||
@@ -9,7 +9,7 @@ After=network-online.target
|
|||||||
# The command to start the mount.
|
# The command to start the mount.
|
||||||
# Replace "my-remote:" and "/path/to/local/mount" accordingly.
|
# Replace "my-remote:" and "/path/to/local/mount" accordingly.
|
||||||
# The flags below are highly recommended for a good experience.
|
# The flags below are highly recommended for a good experience.
|
||||||
ExecStart=rclone mount google_drive: %h/gdrive \
|
ExecStart=rclone mount google_drive: %h/remote/gdrive \
|
||||||
--vfs-cache-mode writes \
|
--vfs-cache-mode writes \
|
||||||
--log-file /tmp/rclone.log \
|
--log-file /tmp/rclone.log \
|
||||||
--log-level INFO
|
--log-level INFO
|
||||||
|
|||||||
21
systemd/user/narl_io_mount.service
Normal file
21
systemd/user/narl_io_mount.service
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
# ~/.config/systemd/user/rclone-mount.service
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=sshfs mount for narl.io server
|
||||||
|
# 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=sshfs -f -p 420 narl@narl.io:/opt %h/remote/narl.io
|
||||||
|
|
||||||
|
# The command to unmount gracefully.
|
||||||
|
ExecStop=fusermount -u %h/narl_io
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=10
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
# This tells systemd to start the service at user login.
|
||||||
|
WantedBy=default.target
|
||||||
22
systemd/user/vaulthunters_mount.service
Normal file
22
systemd/user/vaulthunters_mount.service
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
|
||||||
|
# ~/.config/systemd/user/rclone-mount.service
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=sshfs mount for narl.io vaulthunters server
|
||||||
|
# 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=sshfs -f -p 420 narl@vh3.narl.io:/opt/minecraft_vaulthunters %h/remote/vh3.narl.io
|
||||||
|
|
||||||
|
# The command to unmount gracefully.
|
||||||
|
ExecStop=fusermount -u %h/vaulthunters_server
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=10
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
# This tells systemd to start the service at user login.
|
||||||
|
WantedBy=default.target
|
||||||
1
systemd/user/xdg-desktop-autostart.target.wants/sunshine.service
Symbolic link
1
systemd/user/xdg-desktop-autostart.target.wants/sunshine.service
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
/usr/lib/systemd/user/sunshine.service
|
||||||
@@ -1,208 +1,188 @@
|
|||||||
// ~/.config/waybar/config.jsonc
|
// ~/.config/waybar/config.jsonc
|
||||||
{
|
[
|
||||||
"layer": "top",
|
{
|
||||||
"position": "top",
|
"name": "top",
|
||||||
// "output": "eDP-1",
|
"layer": "top",
|
||||||
"height": 30,
|
"position": "top",
|
||||||
"modules-left": ["hyprland/workspaces"],
|
"height": 34,
|
||||||
"modules-center": [],
|
"spacing": 4,
|
||||||
"modules-right": [
|
"margin-top": 6,
|
||||||
// "custom/pixelbuds_pro",
|
"margin-left": 10,
|
||||||
"custom/network",
|
"margin-right": 10,
|
||||||
"custom/mem",
|
|
||||||
"custom/cpu",
|
|
||||||
"custom/tlp",
|
|
||||||
"wireplumber#sink",
|
|
||||||
"wireplumber#source",
|
|
||||||
"tray",
|
|
||||||
"clock"
|
|
||||||
],
|
|
||||||
|
|
||||||
"hyprland/workspaces": {
|
"modules-left": [
|
||||||
"format": "{icon}",
|
"hyprland/workspaces",
|
||||||
"on-click": "activate"
|
"hyprland/window"
|
||||||
},
|
],
|
||||||
"hyprland/window": {
|
"modules-center": [
|
||||||
"format": "{}",
|
"clock"
|
||||||
"max-length": 35
|
],
|
||||||
},
|
"modules-right": [
|
||||||
"clock": {
|
"tray",
|
||||||
"format": "{:%a %d %b %H:%M}",
|
"custom/gamemode",
|
||||||
"format-alt": false,
|
"custom/power_status"
|
||||||
"on-click-right": "xdg-open https://calendar.proton.me/u/0/month &> /dev/null & disown",
|
],
|
||||||
"tooltip": false,
|
|
||||||
},
|
|
||||||
"cpu": {
|
|
||||||
"format": "CPU: {usage}%",
|
|
||||||
"tooltip": true,
|
|
||||||
"interval": 1
|
|
||||||
},
|
|
||||||
"memory": {
|
|
||||||
"format": "MEM: {used}/{total}GB",
|
|
||||||
"interval": 3
|
|
||||||
},
|
|
||||||
"network": {
|
|
||||||
"format-wifi": "{essid} ({signalStrength}%): {ipaddr}",
|
|
||||||
"format-ethernet": "{ifname}: {ipaddr}",
|
|
||||||
"format-disconnected": "Disconnected",
|
|
||||||
"tooltip-format": "{ifname} via {gwaddr}"
|
|
||||||
},
|
|
||||||
"wireplumber#sink": {
|
|
||||||
"format": "{node_name} {volume}% {icon}",
|
|
||||||
"format-muted": "{node_name} ",
|
|
||||||
"format-icons": {
|
|
||||||
"headphone": "",
|
|
||||||
"hands-free": "",
|
|
||||||
"default": ["", "", ""]
|
|
||||||
},
|
|
||||||
"on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle",
|
|
||||||
"on-click-right": "~/.config/waybar/scripts/audio.sh cycle",
|
|
||||||
"on-click-middle": "pavucontrol",
|
|
||||||
"scroll-step": 5
|
|
||||||
},
|
|
||||||
"wireplumber#source": {
|
|
||||||
"node-type": "Audio/Source",
|
|
||||||
"format": "{node_name} {volume}% ",
|
|
||||||
"format-muted": "",
|
|
||||||
"on-click": "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle",
|
|
||||||
"on-click-right": "~/.config/waybar/scripts/cycle_input.sh cycle",
|
|
||||||
"on-click-middle": "pavucontrol",
|
|
||||||
"scroll-step": 5
|
|
||||||
},
|
|
||||||
"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": {
|
// --- Standard Modules ---
|
||||||
"format": "{icon} {volume}%",
|
"hyprland/workspaces": {
|
||||||
"format-muted": " Muted",
|
"format": "{icon}",
|
||||||
"format-icons": {
|
"on-click": "activate"
|
||||||
"headphone": "",
|
|
||||||
"hands-free": "",
|
|
||||||
"headset": "",
|
|
||||||
"phone": "",
|
|
||||||
"portable": "",
|
|
||||||
"car": "",
|
|
||||||
"default": ["", ""]
|
|
||||||
},
|
},
|
||||||
"on-click": "pavucontrol & disown"
|
"hyprland/window": {
|
||||||
|
"format": "{}",
|
||||||
|
"max-length": 50
|
||||||
|
},
|
||||||
|
"clock": {
|
||||||
|
"format": "{:%a %d %b %H:%M}",
|
||||||
|
"on-click-right": "xdg-open https://calendar.proton.me/u/0/month &> /dev/null & disown",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"tray": {
|
||||||
|
"icon-size": 18,
|
||||||
|
"spacing": 10
|
||||||
|
},
|
||||||
|
|
||||||
|
"custom/gamemode": {
|
||||||
|
"format": "{}",
|
||||||
|
"return-type": "json",
|
||||||
|
"exec": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs game",
|
||||||
|
"on-click": "~/.config/hypr/scripts/gamemode.sh & disown",
|
||||||
|
"interval": 1
|
||||||
|
},
|
||||||
|
|
||||||
|
// --- Fluxo-rs Power ---
|
||||||
|
"custom/power_status": {
|
||||||
|
"format": "{} ",
|
||||||
|
"return-type": "json",
|
||||||
|
"exec": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs power",
|
||||||
|
"on-click": "~/.config/hypr/scripts/powermenu.sh & disown",
|
||||||
|
"interval": 5
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"tray": {
|
{
|
||||||
"icon-size": 18,
|
"name": "bottom",
|
||||||
"spacing": 6
|
"layer": "top",
|
||||||
},
|
"position": "bottom",
|
||||||
"custom/power": {
|
"height": 34,
|
||||||
"format": "",
|
"spacing": 4,
|
||||||
"tooltip": false,
|
"margin-bottom": 6,
|
||||||
"on-click": "~/.config/hypr/scripts/powermenu.sh & disown"
|
"margin-left": 10,
|
||||||
},
|
"margin-right": 10,
|
||||||
"custom/tlp": {
|
|
||||||
"format": "{}",
|
"modules-left": [
|
||||||
"exec": "~/.config/waybar/scripts/tlp-profile.sh",
|
"custom/sys",
|
||||||
"return-type": "json",
|
"custom/cpu",
|
||||||
"interval": 5
|
"custom/mem",
|
||||||
},
|
"custom/network",
|
||||||
"battery": {
|
"custom/disk-root"
|
||||||
"states": {
|
],
|
||||||
"warning": 30,
|
"modules-center": [
|
||||||
"critical": 15
|
],
|
||||||
},
|
"modules-right": [
|
||||||
"format": "{capacity}%",
|
"custom/bluetooth-audio",
|
||||||
"format-charging": "{capacity}%",
|
"custom/volume",
|
||||||
"format-plugged": "{capacity}%",
|
"custom/mic"
|
||||||
"format-alt": "{time} {icon}",
|
],
|
||||||
"format-full": "{capacity}%",
|
|
||||||
"format-icons": ["", "", "", "", ""]
|
// --- Fluxo-rs System & Hardware ---
|
||||||
},
|
"custom/sys": {
|
||||||
"custom/pixelbuds_pro": {
|
"format": "{}",
|
||||||
"format": "{}",
|
"return-type": "json",
|
||||||
"return-type": "json",
|
"exec": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs sys",
|
||||||
"exec": "~/.config/waybar/scripts/pixelbuds_pro_control.sh",
|
"interval": 5
|
||||||
"interval": 5,
|
},
|
||||||
"on-click": "~/.config/waybar/scripts/pixelbuds_pro_control.sh connect & disown",
|
"custom/cpu": {
|
||||||
"on-click-right": "~/.config/waybar/scripts/pixelbuds_pro_control.sh cycle_anc & disown"
|
"format": "{}",
|
||||||
},
|
"return-type": "json",
|
||||||
"custom/audio-output": {
|
"exec": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs cpu",
|
||||||
"format": "{}",
|
"on-click": "zenmonitor & disown",
|
||||||
"return-type": "json",
|
"interval": 3
|
||||||
"exec": "/home/narl/.config/waybar/scripts/audio.sh show",
|
},
|
||||||
"on-click": "/home/narl/.config/waybar/scripts/audio.sh cycle & disown",
|
"custom/mem": {
|
||||||
"interval": 1
|
"format": "{}",
|
||||||
},
|
"return-type": "json",
|
||||||
"custom/gamemode": {
|
"exec": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs mem",
|
||||||
"format": "{}",
|
"interval": 3
|
||||||
"return-type": "json",
|
},
|
||||||
"exec": "~/.config/waybar/scripts/gamemode_status.sh",
|
"custom/network": {
|
||||||
"on-click": "~/.config/hypr/scripts/gamemode.sh & disown",
|
"format": "{}",
|
||||||
"interval": 1
|
"return-type": "json",
|
||||||
},
|
"exec": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs net",
|
||||||
"custom/gpu-screen-recorder": {
|
"interval": 2
|
||||||
"format": "{}",
|
},
|
||||||
"return-type": "json",
|
|
||||||
"exec": "~/.config/waybar/scripts/gpu-screen-recorder-status.sh",
|
// --- Fluxo-rs Utilities ---
|
||||||
"on-click-right": "~/.config/hypr/scripts/replay-ctrl.sh save & disown",
|
"custom/disk-root": {
|
||||||
"on-click-middle": "nautilus ~/Videos/replay & disown",
|
"format": "{}",
|
||||||
"on-click": "~/.config/waybar/scripts/toggle-replay.sh & disown",
|
"return-type": "json",
|
||||||
"interval": 1
|
"exec": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs disk /",
|
||||||
},
|
"interval": 30
|
||||||
"custom/gpu": {
|
},
|
||||||
"format": "{}",
|
|
||||||
"return-type": "json",
|
// --- Fluxo-rs Audio & BT ---
|
||||||
"exec": "~/.config/waybar/scripts/gpu_info.sh",
|
"custom/volume": {
|
||||||
"on-click": "lact gui & disown",
|
"format": "{}",
|
||||||
"interval": 3
|
"return-type": "json",
|
||||||
},
|
"exec": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs vol",
|
||||||
"custom/cpu": {
|
"on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle",
|
||||||
"format": "{}",
|
"on-scroll-up": "wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+",
|
||||||
"return-type": "json",
|
"on-scroll-down": "wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-",
|
||||||
"exec": "~/.config/waybar/scripts/cpu_info.sh",
|
"on-click-right": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs vol --cycle",
|
||||||
"on-click": "zenmonitor & disown",
|
"on-click-middle": "pavucontrol",
|
||||||
"interval": 3
|
"interval": 1
|
||||||
},
|
},
|
||||||
"custom/mem": {
|
"custom/mic": {
|
||||||
"format": "{}",
|
"format": "{}",
|
||||||
"return-type": "json",
|
"return-type": "json",
|
||||||
"exec": "~/.config/waybar/scripts/memory.sh",
|
"exec": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs mic",
|
||||||
"interval": 3
|
"on-click": "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle",
|
||||||
},
|
"on-scroll-up": "wpctl set-volume @DEFAULT_AUDIO_SOURCE@ 5%+",
|
||||||
"custom/btrfs": {
|
"on-scroll-down": "wpctl set-volume @DEFAULT_AUDIO_SOURCE@ 5%-",
|
||||||
"format": "{}",
|
"on-click-right": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs mic --cycle",
|
||||||
"exec": "~/.config/waybar/scripts/btrfs.sh",
|
"on-click-middle": "pavucontrol",
|
||||||
"return-type": "json",
|
"interval": 1
|
||||||
"interval": 30
|
},
|
||||||
},
|
"custom/bluetooth-audio": {
|
||||||
"custom/disk-root": {
|
"format": "{}",
|
||||||
"format": "{}",
|
"return-type": "json",
|
||||||
"return-type": "json",
|
"exec": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs bt",
|
||||||
"exec": "~/.config/waybar/scripts/disk_info.sh /",
|
"on-click": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs bt menu",
|
||||||
"interval": 30
|
"on-click-right": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs bt disconnect",
|
||||||
},
|
"interval": 3
|
||||||
"custom/disk-gdrive": {
|
}
|
||||||
"format": "{}",
|
|
||||||
"return-type": "json",
|
// --- Commented Out Modules ---
|
||||||
"exec": "~/.config/waybar/scripts/disk_info.sh ~/gdrive",
|
/*
|
||||||
"interval": 30
|
"custom/gpu": {
|
||||||
},
|
"format": "{}",
|
||||||
"custom/disk-data": {
|
"return-type": "json",
|
||||||
"format": "{}",
|
"exec": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs gpu",
|
||||||
"return-type": "json",
|
"on-click": "lact gui & disown",
|
||||||
"exec": "~/.config/waybar/scripts/disk_info.sh ~/data",
|
"interval": 3
|
||||||
"interval": 30
|
},
|
||||||
},
|
"custom/btrfs": {
|
||||||
"custom/disk-games": {
|
"format": "{}",
|
||||||
"format": "{}",
|
"return-type": "json",
|
||||||
"return-type": "json",
|
"exec": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs pool",
|
||||||
"exec": "~/.config/waybar/scripts/disk_info.sh ~/games",
|
"interval": 30
|
||||||
"interval": 30
|
},
|
||||||
},
|
"custom/pixelbuds_pro": {
|
||||||
"custom/network": {
|
"format": "{}",
|
||||||
"exec": "~/.config/waybar/scripts/network.sh",
|
"return-type": "json",
|
||||||
"interval": 2, // in seconds
|
"exec": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs buds",
|
||||||
"format": "{}",
|
"on-click": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs buds connect & disown",
|
||||||
"return-type": "json"
|
"on-click-right": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs buds cycle_anc & disown",
|
||||||
|
"interval": 5
|
||||||
|
},
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
}
|
]
|
||||||
|
|||||||
@@ -5,7 +5,8 @@ DESCRIPTION=$(pactl list sources | grep -A2 "Name: $DEFAULT_SOURCE" | grep "Desc
|
|||||||
|
|
||||||
case $1 in
|
case $1 in
|
||||||
cycle)
|
cycle)
|
||||||
SOURCES=($(pactl list short sources | awk '{print $2}'))
|
# Filter out monitor sources
|
||||||
|
SOURCES=($(pactl list short sources | awk '{print $2}' | grep -v ".monitor"))
|
||||||
NUM_SOURCES=${#SOURCES[@]}
|
NUM_SOURCES=${#SOURCES[@]}
|
||||||
CURRENT_SOURCE=$(pactl info | grep 'Default Source' | cut -d ' ' -f3)
|
CURRENT_SOURCE=$(pactl info | grep 'Default Source' | cut -d ' ' -f3)
|
||||||
|
|
||||||
@@ -16,6 +17,10 @@ case $1 in
|
|||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
# If current source was a monitor or not in list, just pick the first one
|
||||||
|
if [ $NUM_SOURCES -gt 0 ]; then
|
||||||
|
pactl set-default-source "${SOURCES[0]}"
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
show)
|
show)
|
||||||
TEXT=$(echo "$DESCRIPTION" | cut -c -20)
|
TEXT=$(echo "$DESCRIPTION" | cut -c -20)
|
||||||
@@ -35,6 +40,6 @@ case $1 in
|
|||||||
printf '{"text": "%s", "tooltip": "%s", "class": "%s"}' "$TEXT" "$DESCRIPTION" "$CLASS"
|
printf '{"text": "%s", "tooltip": "%s", "class": "%s"}' "$TEXT" "$DESCRIPTION" "$CLASS"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "usage audio.sh {cycle|show}"
|
echo "usage cycle_input.sh {cycle|show}"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|||||||
@@ -28,11 +28,16 @@ TX_MBPS="0.00"
|
|||||||
|
|
||||||
# Read previous values if the stats file exists
|
# Read previous values if the stats file exists
|
||||||
if [ -f "$STATS_FILE" ]; then
|
if [ -f "$STATS_FILE" ]; then
|
||||||
source "$STATS_FILE" # This loads PREV_TIME, PREV_RX_BYTES, PREV_TX_BYTES
|
# shellcheck source=/dev/null
|
||||||
|
# Use a lock to ensure we don't source while another instance is writing
|
||||||
|
{
|
||||||
|
flock -s 200 || exit 1
|
||||||
|
source "$STATS_FILE" 2>/dev/null
|
||||||
|
} 200>"$STATS_FILE.lock"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Calculate speed if we have previous data and time has passed
|
# Calculate speed if we have previous data and time has passed
|
||||||
if [ -n "$PREV_TIME" ] && [ "$TIME_NOW" -gt "$PREV_TIME" ]; then
|
if [ -n "$PREV_TIME" ] && [ -n "$PREV_RX_BYTES" ] && [ -n "$PREV_TX_BYTES" ] && [ "$TIME_NOW" -gt "$PREV_TIME" ]; then
|
||||||
TIME_DIFF=$((TIME_NOW - PREV_TIME))
|
TIME_DIFF=$((TIME_NOW - PREV_TIME))
|
||||||
|
|
||||||
RX_BPS=$(( (RX_BYTES_NOW - PREV_RX_BYTES) / TIME_DIFF ))
|
RX_BPS=$(( (RX_BYTES_NOW - PREV_RX_BYTES) / TIME_DIFF ))
|
||||||
@@ -43,10 +48,14 @@ if [ -n "$PREV_TIME" ] && [ "$TIME_NOW" -gt "$PREV_TIME" ]; then
|
|||||||
TX_MBPS=$(printf "%.2f" "$(echo "$TX_BPS / 1024 / 1024" | bc -l)")
|
TX_MBPS=$(printf "%.2f" "$(echo "$TX_BPS / 1024 / 1024" | bc -l)")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Save current values for the next run
|
# Save current values for the next run safely using a lock
|
||||||
echo "PREV_TIME=$TIME_NOW" > "$STATS_FILE"
|
# We use a subshell with flock to ensure atomic updates and prevent race conditions
|
||||||
echo "PREV_RX_BYTES=$RX_BYTES_NOW" >> "$STATS_FILE"
|
(
|
||||||
echo "PREV_TX_BYTES=$TX_BYTES_NOW" >> "$STATS_FILE"
|
flock -x 200 || exit 1
|
||||||
|
echo "PREV_TIME=$TIME_NOW" > "$STATS_FILE"
|
||||||
|
echo "PREV_RX_BYTES=$RX_BYTES_NOW" >> "$STATS_FILE"
|
||||||
|
echo "PREV_TX_BYTES=$TX_BYTES_NOW" >> "$STATS_FILE"
|
||||||
|
) 200>"$STATS_FILE.lock"
|
||||||
|
|
||||||
# Format the main output string
|
# Format the main output string
|
||||||
OUTPUT_TEXT="$INTERFACE ($IP_ADDR): ${RX_MBPS} MB/s ${TX_MBPS} MB/s"
|
OUTPUT_TEXT="$INTERFACE ($IP_ADDR): ${RX_MBPS} MB/s ${TX_MBPS} MB/s"
|
||||||
|
|||||||
37
waybar/scripts/volume.sh
Executable file
37
waybar/scripts/volume.sh
Executable file
@@ -0,0 +1,37 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
TYPE=$1 # "mic" for source, empty for sink
|
||||||
|
|
||||||
|
if [ "$TYPE" == "mic" ]; then
|
||||||
|
TARGET="@DEFAULT_AUDIO_SOURCE@"
|
||||||
|
else
|
||||||
|
TARGET="@DEFAULT_AUDIO_SINK@"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Get volume and mute status from wpctl
|
||||||
|
OUTPUT=$(wpctl get-volume $TARGET)
|
||||||
|
VOLUME_RAW=$(echo "$OUTPUT" | awk '{print $2}')
|
||||||
|
VOLUME=$(echo "$VOLUME_RAW * 100 / 1" | bc)
|
||||||
|
MUTE=$(echo "$OUTPUT" | grep -c "MUTED")
|
||||||
|
|
||||||
|
if [ "$MUTE" -eq 1 ]; then
|
||||||
|
if [ "$TYPE" == "mic" ]; then
|
||||||
|
ICON=""
|
||||||
|
else
|
||||||
|
ICON=""
|
||||||
|
fi
|
||||||
|
printf '{"text": "%s", "class": "muted", "percentage": %d}' "$ICON" "$VOLUME"
|
||||||
|
else
|
||||||
|
if [ "$TYPE" == "mic" ]; then
|
||||||
|
ICON=""
|
||||||
|
else
|
||||||
|
if [ "$VOLUME" -le 30 ]; then
|
||||||
|
ICON=""
|
||||||
|
elif [ "$VOLUME" -le 60 ]; then
|
||||||
|
ICON=""
|
||||||
|
else
|
||||||
|
ICON=""
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
printf '{"text": "%d%% %s", "class": "unmuted", "percentage": %d}' "$VOLUME" "$ICON" "$VOLUME"
|
||||||
|
fi
|
||||||
64
waybar/scripts/volume_combined.py
Normal file
64
waybar/scripts/volume_combined.py
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
import subprocess
|
||||||
|
import json
|
||||||
|
import sys
|
||||||
|
|
||||||
|
def get_wpctl_status(target):
|
||||||
|
try:
|
||||||
|
output = subprocess.check_output(["wpctl", "get-volume", target], text=True)
|
||||||
|
parts = output.strip().split()
|
||||||
|
if len(parts) < 2:
|
||||||
|
return 0, False
|
||||||
|
vol = int(float(parts[1]) * 100)
|
||||||
|
muted = "[MUTED]" in output
|
||||||
|
return vol, muted
|
||||||
|
except:
|
||||||
|
return 0, False
|
||||||
|
|
||||||
|
def get_pactl_description(target_type):
|
||||||
|
try:
|
||||||
|
cmd_info = ["pactl", "info"]
|
||||||
|
info = subprocess.check_output(cmd_info, text=True)
|
||||||
|
search_key = "Default Sink" if target_type == "sink" else "Default Source"
|
||||||
|
default_dev = next(line.split(": ")[1] for line in info.splitlines() if search_key in line)
|
||||||
|
|
||||||
|
cmd_list = ["pactl", "list", "sinks" if target_type == "sink" else "sources"]
|
||||||
|
output = subprocess.check_output(cmd_list, text=True)
|
||||||
|
|
||||||
|
blocks = output.split("\n\n")
|
||||||
|
for block in blocks:
|
||||||
|
if f"Name: {default_dev}" in block:
|
||||||
|
for line in block.splitlines():
|
||||||
|
if "Description:" in line:
|
||||||
|
desc = line.split(": ")[1].strip()
|
||||||
|
# Add a small hint if it is a monitor, though cycle_input should prevent it
|
||||||
|
if ".monitor" in default_dev:
|
||||||
|
return "Monitor: " + desc[:11]
|
||||||
|
return desc[:20]
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
return "Unknown"
|
||||||
|
|
||||||
|
try:
|
||||||
|
target_type = sys.argv[1] if len(sys.argv) > 1 else "sink"
|
||||||
|
target = "@DEFAULT_AUDIO_SINK@" if target_type == "sink" else "@DEFAULT_AUDIO_SOURCE@"
|
||||||
|
|
||||||
|
vol, muted = get_wpctl_status(target)
|
||||||
|
name = get_pactl_description(target_type)
|
||||||
|
|
||||||
|
if muted:
|
||||||
|
icon = "" if target_type == "sink" else ""
|
||||||
|
text = f"{name} {icon}"
|
||||||
|
cls = "muted"
|
||||||
|
else:
|
||||||
|
if target_type == "sink":
|
||||||
|
if vol <= 30: icon = ""
|
||||||
|
elif vol <= 60: icon = ""
|
||||||
|
else: icon = ""
|
||||||
|
else:
|
||||||
|
icon = ""
|
||||||
|
text = f"{name} {vol}% {icon}"
|
||||||
|
cls = "unmuted"
|
||||||
|
|
||||||
|
print(json.dumps({"text": text, "class": cls, "percentage": vol}))
|
||||||
|
except Exception as e:
|
||||||
|
print(json.dumps({"text": "Error", "class": "error"}))
|
||||||
293
waybar/style.css
293
waybar/style.css
@@ -1,254 +1,133 @@
|
|||||||
/* ~/.config/waybar/style.css */
|
/* ~/.config/waybar/style.css */
|
||||||
@import "./catppuccin-waybar/themes/mocha.css";
|
@import "./catppuccin-waybar/themes/mocha.css";
|
||||||
|
|
||||||
|
/* --- Global Reset --- */
|
||||||
* {
|
* {
|
||||||
border: none;
|
border: none;
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
min-height: 0;
|
min-height: 0;
|
||||||
font-family: JetBrainsMono Nerd Font;
|
font-family: JetBrainsMono Nerd Font, monospace;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
|
transition: all 0.2s ease;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* --- Bar Background (Floating Island Style) --- */
|
||||||
window#waybar {
|
window#waybar {
|
||||||
background-color: alpha(@base, 0.4);
|
background-color: transparent;
|
||||||
padding: 4px;
|
|
||||||
transition-property: background-color;
|
|
||||||
transition-duration: 0.5s;
|
|
||||||
color: @text;
|
color: @text;
|
||||||
}
|
}
|
||||||
|
|
||||||
window#waybar.hidden {
|
/* --- Shared Island Styling --- */
|
||||||
opacity: 0.5;
|
#workspaces,
|
||||||
|
#window,
|
||||||
|
#clock,
|
||||||
|
#tray,
|
||||||
|
#custom-sys,
|
||||||
|
#custom-cpu,
|
||||||
|
#custom-gpu,
|
||||||
|
#custom-mem,
|
||||||
|
#custom-network,
|
||||||
|
#custom-btrfs,
|
||||||
|
#custom-disk-root,
|
||||||
|
#custom-pixelbuds_pro,
|
||||||
|
#custom-bluetooth-audio,
|
||||||
|
#custom-volume,
|
||||||
|
#custom-mic,
|
||||||
|
#custom-gamemode,
|
||||||
|
#custom-gpu-screen-recorder,
|
||||||
|
#custom-power_status {
|
||||||
|
background-color: alpha(@surface0, 0.95);
|
||||||
|
margin: 4px 2px;
|
||||||
|
padding: 0 12px;
|
||||||
|
border-radius: 5px;
|
||||||
|
border: 1px solid alpha(@surface1, 0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* --- Top Bar Special Handling --- */
|
||||||
|
window#waybar.top {
|
||||||
|
margin-top: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- Bottom Bar Special Handling --- */
|
||||||
|
window#waybar.bottom {
|
||||||
|
margin-bottom: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- Workspaces --- */
|
||||||
#workspaces button {
|
#workspaces button {
|
||||||
all: initial;
|
padding: 0 8px;
|
||||||
/* Remove GTK theme values (waybar #1351) */
|
margin: 4px 2px;
|
||||||
min-width: 0;
|
border-radius: 5px;
|
||||||
/* 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: 0px 12px;
|
|
||||||
margin: 0px 3px;
|
|
||||||
border-radius: 10px;
|
|
||||||
background-color: @base;
|
|
||||||
color: @subtext0;
|
color: @subtext0;
|
||||||
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
#workspaces button.active {
|
#workspaces button.active {
|
||||||
color: @text;
|
color: @blue;
|
||||||
border-bottom: 3px solid @blue;
|
background-color: @surface1;
|
||||||
}
|
|
||||||
|
|
||||||
#workspaces button:hover {
|
|
||||||
box-shadow: inherit;
|
|
||||||
text-shadow: inherit;
|
|
||||||
background-color: @surface0;
|
|
||||||
color: @text;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#workspaces button.urgent {
|
#workspaces button.urgent {
|
||||||
border-bottom: 3px solid @maroon;
|
color: @red;
|
||||||
}
|
}
|
||||||
|
|
||||||
#memory,
|
#workspaces button:hover {
|
||||||
#cpu,
|
background-color: @surface2;
|
||||||
#custom-gpu,
|
|
||||||
#custom-cpu,
|
|
||||||
#custom-mem,
|
|
||||||
#custom-power,
|
|
||||||
#custom-gamemode,
|
|
||||||
#custom-tlp,
|
|
||||||
#battery,
|
|
||||||
#backlight,
|
|
||||||
#wireplumber,
|
|
||||||
#custom-network,
|
|
||||||
#network,
|
|
||||||
#clock,
|
|
||||||
#tray,
|
|
||||||
#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 2px;
|
|
||||||
padding: 0px 10px;
|
|
||||||
background-color: @base;
|
|
||||||
color: @text;
|
color: @text;
|
||||||
}
|
}
|
||||||
|
|
||||||
#wireplumber.muted, #custom-pixelbuds_pro, #custom-audio-output.muted {
|
/* --- Clock (Centered Pill) --- */
|
||||||
background-color: @base;
|
#clock {
|
||||||
color: @subtext1;
|
color: @mauve;
|
||||||
border-bottom: 3px solid @subtext1;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
#custom-pixelbuds_pro.disconnected {
|
/* --- Power Status --- */
|
||||||
padding-right: 10px;
|
#custom-power_status {
|
||||||
padding-left: 8px;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
#custom-power_status.charging { color: @green; border-color: @green; }
|
||||||
#custom-gpu-screen-recorder,
|
#custom-power_status.bat { color: @yellow; }
|
||||||
#custom-gpu-screen-recorder.recording {
|
#custom-power_status.warning { color: @peach; }
|
||||||
padding-right: 12px;
|
#custom-power_status.critical {
|
||||||
padding-left: 4px;
|
color: @red;
|
||||||
}
|
border-color: @red;
|
||||||
|
animation: blink 1s infinite alternate;
|
||||||
#custom-gamemode {
|
|
||||||
padding-right: 9px;
|
|
||||||
padding-left: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#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 {
|
|
||||||
padding: 0 10px;
|
|
||||||
min-width: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#custom-tlp.charging {
|
|
||||||
color: @mauve;
|
|
||||||
border-bottom: 3px solid @mauve;
|
|
||||||
}
|
|
||||||
|
|
||||||
#custom-tlp.bat {
|
|
||||||
color: @sapphire;
|
|
||||||
border-bottom: 3px solid @sapphire;
|
|
||||||
}
|
|
||||||
|
|
||||||
#custom-tlp.warning {
|
|
||||||
color: @yellow;
|
|
||||||
border-bottom: 3px solid @yellow;
|
|
||||||
}
|
|
||||||
|
|
||||||
#custom-tlp.critical {
|
|
||||||
color: @red;
|
|
||||||
border-bottom: 3px solid @red;
|
|
||||||
animation-name: blink;
|
|
||||||
animation-duration: 0.8s;
|
|
||||||
animation-timing-function: linear;
|
|
||||||
animation-iteration-count: infinite;
|
|
||||||
animation-direction: alternate;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes blink {
|
@keyframes blink {
|
||||||
to {
|
to { background-color: alpha(@red, 0.4); }
|
||||||
color: @yellow;
|
|
||||||
border-bottom: 3px solid @yellow;
|
|
||||||
opacity: 0.6;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#custom-gpu.max,
|
/* --- Hardware Metrics (Left Bottom) --- */
|
||||||
#custom-cpu.max,
|
#custom-sys { color: @teal; }
|
||||||
#custom-mem.max,
|
#custom-cpu { color: @blue; }
|
||||||
#custom-btrfs.max,
|
#custom-mem { color: @lavender; }
|
||||||
#custom-disk-root.max,
|
#custom-network { color: @sapphire; }
|
||||||
#custom-disk-gdrive.max,
|
|
||||||
#custom-disk-games.max,
|
|
||||||
#custom-disk-data.max {
|
|
||||||
color: @maroon;
|
|
||||||
/* border-bottom: 3px solid @maroon; */
|
|
||||||
}
|
|
||||||
|
|
||||||
#custom-gpu.high,
|
#custom-cpu.high, #custom-mem.high { color: @yellow; }
|
||||||
#custom-gpu.high,
|
#custom-cpu.max, #custom-mem.max { color: @red; }
|
||||||
#custom-cpu.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,
|
/* --- Center Bottom Utilities --- */
|
||||||
#cpu,
|
#custom-gamemode { color: @yellow; }
|
||||||
#disk,
|
#custom-gamemode.active { color: @red; border-color: @red; }
|
||||||
#network,
|
|
||||||
#custom-network,
|
|
||||||
#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; */
|
|
||||||
}
|
|
||||||
|
|
||||||
|
/* --- Right Bottom Controls --- */
|
||||||
|
#custom-disk-root { color: @sky; }
|
||||||
|
#custom-volume { color: @mauve; }
|
||||||
|
#custom-mic { color: @flamingo; }
|
||||||
|
#custom-volume.muted, #custom-mic.muted { color: @overlay0; }
|
||||||
|
|
||||||
#backlight {
|
#custom-bluetooth-audio { color: @blue; }
|
||||||
color: @mauve;
|
|
||||||
}
|
|
||||||
|
|
||||||
#wireplumber.muted {
|
|
||||||
padding-right: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#custom-audio-output.unmuted, #wireplumber {
|
|
||||||
color: @mauve;
|
|
||||||
border-bottom: 3px solid @mauve;
|
|
||||||
}
|
|
||||||
|
|
||||||
#clock {
|
|
||||||
color: @mauve;
|
|
||||||
}
|
|
||||||
|
|
||||||
#network {
|
|
||||||
}
|
|
||||||
|
|
||||||
|
/* --- Tooltip --- */
|
||||||
tooltip {
|
tooltip {
|
||||||
border-radius: 10px;
|
background-color: alpha(@base, 0.95);
|
||||||
padding: 9px;
|
border: 1px solid @surface1;
|
||||||
background-color: @base;
|
border-radius: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
tooltip label {
|
tooltip label {
|
||||||
padding: 5px;
|
color: @text;
|
||||||
background-color: @base;
|
padding: 8px;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user