files :3
This commit is contained in:
commit
461a8f9433
24
fastfetch/ascii-art.txt
Normal file
24
fastfetch/ascii-art.txt
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@##
|
||||||
|
&####
|
||||||
|
%#######
|
||||||
|
##########
|
||||||
|
#%# ############
|
||||||
|
#////### ############ ####//##
|
||||||
|
////(/#### ##############////#
|
||||||
|
##/#######################///
|
||||||
|
####...#############...####
|
||||||
|
#####...#\####/##...####
|
||||||
|
####...##&&\/\/,&###...###
|
||||||
|
####%#%%%&&&& &&&&&%%%%%###
|
||||||
|
######&&&&&& &&&&&&&#####//////////
|
||||||
|
///######&&&&&& ///&&&&&&###### //
|
||||||
|
//& #######%&&&&////// @&&&&&&### ### /////
|
||||||
|
// ####///////&&&& &//////////#
|
||||||
|
//////#######&&& ///// @&&&#########
|
||||||
|
#######% /// ########
|
||||||
|
### // ####
|
||||||
|
%#
|
||||||
|
|
116
fastfetch/config.jsonc
Normal file
116
fastfetch/config.jsonc
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
// _____ _____ _____ _____ _____ _____ _____ _____ _____
|
||||||
|
// | __| _ | __|_ _| __| __|_ _| | | |
|
||||||
|
// | __| |__ | | | | __| __| | | | --| |
|
||||||
|
// |__| |__|__|_____| |_| |__| |_____| |_| |_____|__|__| GROUPS
|
||||||
|
//
|
||||||
|
// by Bina
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
"$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
|
||||||
|
"logo": {
|
||||||
|
"source": "~/.config/fastfetch/ascii-art.txt",
|
||||||
|
"height": 20,
|
||||||
|
},
|
||||||
|
"display": {
|
||||||
|
"separator": " ➜ "
|
||||||
|
},
|
||||||
|
"modules": [
|
||||||
|
"break",
|
||||||
|
"break",
|
||||||
|
"break",
|
||||||
|
{
|
||||||
|
"type": "os",
|
||||||
|
"key": "OS ",
|
||||||
|
"keyColor": "31", // = color1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "kernel",
|
||||||
|
"key": " ├ ",
|
||||||
|
"keyColor": "31",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "packages",
|
||||||
|
"format": "{} (pacman)",
|
||||||
|
"key": " ├ ",
|
||||||
|
"keyColor": "31",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "shell",
|
||||||
|
"key": " └ ",
|
||||||
|
"keyColor": "31",
|
||||||
|
},
|
||||||
|
"break",
|
||||||
|
{
|
||||||
|
"type": "wm",
|
||||||
|
"key": "WM ",
|
||||||
|
"keyColor": "32",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "wmtheme",
|
||||||
|
"key": " ├ ",
|
||||||
|
"keyColor": "32",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "icons",
|
||||||
|
"key": " ├ ",
|
||||||
|
"keyColor": "32",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "cursor",
|
||||||
|
"key": " ├ ",
|
||||||
|
"keyColor": "32",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "terminal",
|
||||||
|
"key": " ├ ",
|
||||||
|
"keyColor": "32",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "terminalfont",
|
||||||
|
"key": " └ ",
|
||||||
|
"keyColor": "32",
|
||||||
|
},
|
||||||
|
"break",
|
||||||
|
{
|
||||||
|
"type": "host",
|
||||||
|
"format": "{5} {2}",
|
||||||
|
"key": "PC ",
|
||||||
|
"keyColor": "33",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "cpu",
|
||||||
|
"format": "{1} ({3}) @ {7} GHz",
|
||||||
|
"key": " ├ ",
|
||||||
|
"keyColor": "33",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "gpu",
|
||||||
|
"format": "{1} {2} @ {12} GHz",
|
||||||
|
"key": " ├ ",
|
||||||
|
"keyColor": "33",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "memory",
|
||||||
|
"key": " ├ ",
|
||||||
|
"keyColor": "33",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "swap",
|
||||||
|
"key": " ├ ",
|
||||||
|
"keyColor": "33",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "disk",
|
||||||
|
"key": " ├ ",
|
||||||
|
"keyColor": "33",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "monitor",
|
||||||
|
"format": "{1} {2}x{3}@{7}Hz",
|
||||||
|
"key": " └ ",
|
||||||
|
"keyColor": "33",
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
13
fish/config.fish
Normal file
13
fish/config.fish
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
if status is-interactive
|
||||||
|
# Commands to run in interactive sessions can go here
|
||||||
|
end
|
||||||
|
|
||||||
|
function fish_greeting
|
||||||
|
owoii (random choice "hello there" "owo" ">w<" "I use Arch BTW")
|
||||||
|
end
|
||||||
|
|
||||||
|
function owoii
|
||||||
|
owo --nre $argv | figlet
|
||||||
|
end
|
||||||
|
|
||||||
|
alias owofetch="hyfetch --ascii-file $HOME/.config/fastfetch/ascii-art.txt"
|
31
fish/fish_variables
Normal file
31
fish/fish_variables
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
# This file contains fish universal variable definitions.
|
||||||
|
# VERSION: 3.0
|
||||||
|
SETUVAR __fish_initialized:3400
|
||||||
|
SETUVAR fish_color_autosuggestion:brblack
|
||||||
|
SETUVAR fish_color_cancel:\x2dr
|
||||||
|
SETUVAR fish_color_command:blue
|
||||||
|
SETUVAR fish_color_comment:red
|
||||||
|
SETUVAR fish_color_cwd:green
|
||||||
|
SETUVAR fish_color_cwd_root:red
|
||||||
|
SETUVAR fish_color_end:green
|
||||||
|
SETUVAR fish_color_error:brred
|
||||||
|
SETUVAR fish_color_escape:brcyan
|
||||||
|
SETUVAR fish_color_history_current:\x2d\x2dbold
|
||||||
|
SETUVAR fish_color_host:normal
|
||||||
|
SETUVAR fish_color_host_remote:yellow
|
||||||
|
SETUVAR fish_color_normal:normal
|
||||||
|
SETUVAR fish_color_operator:brcyan
|
||||||
|
SETUVAR fish_color_param:cyan
|
||||||
|
SETUVAR fish_color_quote:yellow
|
||||||
|
SETUVAR fish_color_redirection:cyan\x1e\x2d\x2dbold
|
||||||
|
SETUVAR fish_color_search_match:bryellow\x1e\x2d\x2dbackground\x3dbrblack
|
||||||
|
SETUVAR fish_color_selection:white\x1e\x2d\x2dbold\x1e\x2d\x2dbackground\x3dbrblack
|
||||||
|
SETUVAR fish_color_status:red
|
||||||
|
SETUVAR fish_color_user:brgreen
|
||||||
|
SETUVAR fish_color_valid_path:\x2d\x2dunderline
|
||||||
|
SETUVAR fish_key_bindings:fish_default_key_bindings
|
||||||
|
SETUVAR fish_pager_color_completion:normal
|
||||||
|
SETUVAR fish_pager_color_description:yellow\x1e\x2di
|
||||||
|
SETUVAR fish_pager_color_prefix:normal\x1e\x2d\x2dbold\x1e\x2d\x2dunderline
|
||||||
|
SETUVAR fish_pager_color_progress:brwhite\x1e\x2d\x2dbackground\x3dcyan
|
||||||
|
SETUVAR fish_pager_color_selected_background:\x2dr
|
4
fish/functions/cat.fish
Normal file
4
fish/functions/cat.fish
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
function cat --wraps=bat --description 'alias cat=bat'
|
||||||
|
bat $argv
|
||||||
|
|
||||||
|
end
|
4
fish/functions/fishrc.fish
Normal file
4
fish/functions/fishrc.fish
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
function fishrc --wraps='nano ~/.config/fish/fish.config' --wraps='nano ~/.config/fish/config.fish' --description 'alias fishrc=nano ~/.config/fish/config.fish'
|
||||||
|
nano ~/.config/fish/config.fish $argv
|
||||||
|
|
||||||
|
end
|
4
fish/functions/hyprc.fish
Normal file
4
fish/functions/hyprc.fish
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
function hyprc --wraps='nano ~/.config/hypr/hyperland.conf' --wraps='nano ~/.config/hypr/hyprland.conf' --description 'alias hyprc=nano ~/.config/hypr/hyprland.conf'
|
||||||
|
nano ~/.config/hypr/hyprland.conf $argv
|
||||||
|
|
||||||
|
end
|
16
hyfetch.json
Normal file
16
hyfetch.json
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"preset": "bisexual",
|
||||||
|
"mode": "rgb",
|
||||||
|
"light_dark": "dark",
|
||||||
|
"lightness": 0.61,
|
||||||
|
"color_align": {
|
||||||
|
"mode": "horizontal",
|
||||||
|
"custom_colors": [],
|
||||||
|
"fore_back": null
|
||||||
|
},
|
||||||
|
"backend": "fastfetch",
|
||||||
|
"args": null,
|
||||||
|
"distro": null,
|
||||||
|
"pride_month_shown": [],
|
||||||
|
"pride_month_disable": false
|
||||||
|
}
|
8
hypr/hypridle.conf
Normal file
8
hypr/hypridle.conf
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
general {
|
||||||
|
#lock_cmd = notify-send "lock!" # dbus/sysd lock command (loginctl lock-session)
|
||||||
|
#unlock_cmd = notify-send "unlock!" # same as above, but unlock
|
||||||
|
before_sleep_cmd = hyprlock # command ran before sleep
|
||||||
|
#after_sleep_cmd = notify-send "Awake!" # command ran after sleep
|
||||||
|
#ignore_dbus_inhibit = false # whether to ignore dbus-sent idle-inhibit requests (used by e.g. firefox or steam)
|
||||||
|
#ignore_systemd_inhibit = false # whether to ignore systemd-inhibit --what=idle inhibitors
|
||||||
|
}
|
289
hypr/hyprland.conf
Normal file
289
hypr/hyprland.conf
Normal file
@ -0,0 +1,289 @@
|
|||||||
|
|
||||||
|
# This is an example Hyprland config file.
|
||||||
|
# Refer to the wiki for more information.
|
||||||
|
# https://wiki.hyprland.org/Configuring/
|
||||||
|
|
||||||
|
# Please note not all available settings / options are set here.
|
||||||
|
# For a full list, see the wiki
|
||||||
|
|
||||||
|
# You can split this configuration into multiple files
|
||||||
|
# Create your files separately and then link them to this file like this:
|
||||||
|
# source = ~/.config/hypr/myColors.conf
|
||||||
|
|
||||||
|
|
||||||
|
################
|
||||||
|
### MONITORS ###
|
||||||
|
################
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Monitors/
|
||||||
|
monitor= eDP-1, 2256x1504@60, 0x0, 1
|
||||||
|
|
||||||
|
|
||||||
|
###################
|
||||||
|
### MY PROGRAMS ###
|
||||||
|
###################
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Keywords/
|
||||||
|
|
||||||
|
# Set programs that you use
|
||||||
|
$terminal = cool-retro-term
|
||||||
|
$fileManager = dolphin
|
||||||
|
$menu = rofi -show drun
|
||||||
|
|
||||||
|
|
||||||
|
#################
|
||||||
|
### AUTOSTART ###
|
||||||
|
#################
|
||||||
|
|
||||||
|
# Autostart necessary processes (like notifications daemons, status bars, etc.)
|
||||||
|
# Or execute your favorite apps at launch like this:
|
||||||
|
|
||||||
|
# exec-once = $terminal
|
||||||
|
# exec-once = nm-applet &
|
||||||
|
exec-once = waybar & hyprpaper & nm-applet
|
||||||
|
exec-once = dbus-update-activation-environment --systemd --all
|
||||||
|
exec-once = kdeconnect-indicator
|
||||||
|
exec-once = hypridle
|
||||||
|
exec-once = wl-paste --watch cliphist store
|
||||||
|
exec-once = XDG_MENU_PREFIX=arch- kbuildsycoca6
|
||||||
|
|
||||||
|
#############################
|
||||||
|
### ENVIRONMENT VARIABLES ###
|
||||||
|
#############################
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Environment-variables/
|
||||||
|
|
||||||
|
env = XCURSOR_SIZE,24
|
||||||
|
env = HYPRCURSOR_SIZE,24
|
||||||
|
env = XDG_SESSION_TYPE,wayland
|
||||||
|
env = QT_QPA_PLATFORMTHEME,qt6ct
|
||||||
|
env = QT_QPA_PLATFORM,wayland
|
||||||
|
env = GTK_THEME, Adwaita:dark
|
||||||
|
|
||||||
|
#####################
|
||||||
|
### LOOK AND FEEL ###
|
||||||
|
#####################
|
||||||
|
|
||||||
|
# Refer to https://wiki.hyprland.org/Configuring/Variables/
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#general
|
||||||
|
general {
|
||||||
|
gaps_in = 5
|
||||||
|
gaps_out = 20
|
||||||
|
|
||||||
|
border_size = 2
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
|
||||||
|
col.active_border = rgba(463155ff)
|
||||||
|
col.inactive_border = rgba(251b31aa)
|
||||||
|
|
||||||
|
# Set to true enable resizing windows by clicking and dragging on borders and gaps
|
||||||
|
resize_on_border = false
|
||||||
|
|
||||||
|
# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
|
||||||
|
allow_tearing = false
|
||||||
|
|
||||||
|
layout = dwindle
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#decoration
|
||||||
|
decoration {
|
||||||
|
rounding = 10
|
||||||
|
rounding_power = 2
|
||||||
|
|
||||||
|
# Change transparency of focused and unfocused windows
|
||||||
|
active_opacity = 1.0
|
||||||
|
inactive_opacity = 1.0
|
||||||
|
|
||||||
|
shadow {
|
||||||
|
enabled = true
|
||||||
|
range = 4
|
||||||
|
render_power = 3
|
||||||
|
color = rgba(1a1a1aee)
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#blur
|
||||||
|
blur {
|
||||||
|
enabled = true
|
||||||
|
size = 3
|
||||||
|
passes = 1
|
||||||
|
|
||||||
|
vibrancy = 0.1696
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#animations
|
||||||
|
animations {
|
||||||
|
enabled = yes, please :)
|
||||||
|
|
||||||
|
# Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
|
||||||
|
|
||||||
|
bezier = easeOutQuint,0.23,1,0.32,1
|
||||||
|
bezier = easeInOutCubic,0.65,0.05,0.36,1
|
||||||
|
bezier = linear,0,0,1,1
|
||||||
|
bezier = almostLinear,0.5,0.5,0.75,1.0
|
||||||
|
bezier = quick,0.15,0,0.1,1
|
||||||
|
|
||||||
|
animation = global, 1, 10, default
|
||||||
|
animation = border, 1, 5.39, easeOutQuint
|
||||||
|
animation = windows, 1, 4.79, easeOutQuint
|
||||||
|
animation = windowsIn, 1, 4.1, easeOutQuint, popin 87%
|
||||||
|
animation = windowsOut, 1, 1.49, linear, popin 87%
|
||||||
|
animation = fadeIn, 1, 1.73, almostLinear
|
||||||
|
animation = fadeOut, 1, 1.46, almostLinear
|
||||||
|
animation = fade, 1, 3.03, quick
|
||||||
|
animation = layers, 1, 3.81, easeOutQuint
|
||||||
|
animation = layersIn, 1, 4, easeOutQuint, fade
|
||||||
|
animation = layersOut, 1, 1.5, linear, fade
|
||||||
|
animation = fadeLayersIn, 1, 1.79, almostLinear
|
||||||
|
animation = fadeLayersOut, 1, 1.39, almostLinear
|
||||||
|
animation = workspaces, 1, 1.94, almostLinear, fade
|
||||||
|
animation = workspacesIn, 1, 1.21, almostLinear, fade
|
||||||
|
animation = workspacesOut, 1, 1.94, almostLinear, fade
|
||||||
|
}
|
||||||
|
|
||||||
|
# Ref https://wiki.hyprland.org/Configuring/Workspace-Rules/
|
||||||
|
# "Smart gaps" / "No gaps when only"
|
||||||
|
# uncomment all if you wish to use that.
|
||||||
|
# workspace = w[tv1], gapsout:0, gapsin:0
|
||||||
|
# workspace = f[1], gapsout:0, gapsin:0
|
||||||
|
# windowrulev2 = bordersize 0, floating:0, onworkspace:w[tv1]
|
||||||
|
# windowrulev2 = rounding 0, floating:0, onworkspace:w[tv1]
|
||||||
|
# windowrulev2 = bordersize 0, floating:0, onworkspace:f[1]
|
||||||
|
# windowrulev2 = rounding 0, floating:0, onworkspace:f[1]
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
|
||||||
|
dwindle {
|
||||||
|
pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
|
||||||
|
preserve_split = true # You probably want this
|
||||||
|
}
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
|
||||||
|
master {
|
||||||
|
new_status = master
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#misc
|
||||||
|
misc {
|
||||||
|
force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers
|
||||||
|
disable_hyprland_logo = false # If true disables the random hyprland logo / anime girl background. :(
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#############
|
||||||
|
### INPUT ###
|
||||||
|
#############
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#input
|
||||||
|
input {
|
||||||
|
kb_layout = gb
|
||||||
|
kb_variant =
|
||||||
|
kb_model =
|
||||||
|
kb_options =
|
||||||
|
kb_rules =
|
||||||
|
|
||||||
|
follow_mouse = 1
|
||||||
|
|
||||||
|
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
|
||||||
|
|
||||||
|
touchpad {
|
||||||
|
natural_scroll = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#gestures
|
||||||
|
gestures {
|
||||||
|
workspace_swipe = true
|
||||||
|
}
|
||||||
|
|
||||||
|
# Example per-device config
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more
|
||||||
|
device {
|
||||||
|
name = epic-mouse-v1
|
||||||
|
sensitivity = -0.5
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
###################
|
||||||
|
### KEYBINDINGS ###
|
||||||
|
###################
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Keywords/
|
||||||
|
$mainMod = SUPER # Sets "Windows" key as main modifier
|
||||||
|
|
||||||
|
# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
|
||||||
|
bind = $mainMod, Q, exec, $terminal
|
||||||
|
bind = Control_L&Shift_L, Q, killactive
|
||||||
|
bind = $mainMod, L, exec, hyprlock
|
||||||
|
bind = alt&$mainMod, L, exit
|
||||||
|
bind = $mainMod, F, exec, $fileManager
|
||||||
|
bind = $mainMod&Shift_L, V, togglefloating,
|
||||||
|
bind = $mainMod, R, exec, $menu
|
||||||
|
bind = alt, space, exec, $menu
|
||||||
|
bind = $mainMod, P, pseudo, # dwindle
|
||||||
|
bind = $mainMod, J, togglesplit, # dwindle
|
||||||
|
bind = Control_L&Shift_L, F, fullscreen
|
||||||
|
|
||||||
|
# Move focus with mainMod + arrow keys
|
||||||
|
bind = $mainMod, left, movefocus, l
|
||||||
|
bind = $mainMod, right, movefocus, r
|
||||||
|
bind = $mainMod, up, movefocus, u
|
||||||
|
bind = $mainMod, down, movefocus, d
|
||||||
|
|
||||||
|
# Workspaces
|
||||||
|
bind = $mainMod&Control_L, right, workspace, +1
|
||||||
|
bind = $mainMod&Control_L, left, workspace, -1
|
||||||
|
|
||||||
|
# Move active window to a workspace
|
||||||
|
bind = $mainMod&Control_L&Shift_L, right, movetoworkspace, +1
|
||||||
|
bind = $mainMod&Control_L&Shift_L, left, movetoworkspace, -1
|
||||||
|
|
||||||
|
# Example special workspace (scratchpad)
|
||||||
|
bind = $mainMod, S, togglespecialworkspace, magic
|
||||||
|
bind = $mainMod SHIFT, S, movetoworkspace, special:magic
|
||||||
|
|
||||||
|
# Scroll through existing workspaces with mainMod + scroll
|
||||||
|
bind = $mainMod, mouse_down, workspace, e+1
|
||||||
|
bind = $mainMod, mouse_up, workspace, e-1
|
||||||
|
|
||||||
|
# Move/resize windows with mainMod + LMB/RMB and dragging
|
||||||
|
bindm = $mainMod, mouse:272, movewindow
|
||||||
|
bindm = $mainMod, mouse:273, resizewindow
|
||||||
|
|
||||||
|
# Laptop multimedia keys for volume and LCD brightness
|
||||||
|
bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
|
||||||
|
bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
|
||||||
|
bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
|
||||||
|
bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
|
||||||
|
bindel = ,XF86MonBrightnessUp, exec, brightnessctl s 10%+
|
||||||
|
bindel = ,XF86MonBrightnessDown, exec, brightnessctl s 10%-
|
||||||
|
|
||||||
|
# Requires playerctl
|
||||||
|
bindl = , XF86AudioNext, exec, playerctl next
|
||||||
|
bindl = , XF86AudioPause, exec, playerctl play-pause
|
||||||
|
bindl = , XF86AudioPlay, exec, playerctl play-pause
|
||||||
|
bindl = , XF86AudioPrev, exec, playerctl previous
|
||||||
|
|
||||||
|
bindl=,switch:Lid Switch, exec, hyprlock
|
||||||
|
bind = SUPER, V, exec, cliphist list | rofi -dmenu | cliphist decode | wl-copy
|
||||||
|
bind = , PRINT, exec, hyprshot -m region --clipboard-only
|
||||||
|
bind = $shiftMod, PRINT, exec, hyprshot -m region
|
||||||
|
|
||||||
|
##############################
|
||||||
|
### WINDOWS AND WORKSPACES ###
|
||||||
|
##############################
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
|
||||||
|
|
||||||
|
# Example windowrule v1
|
||||||
|
# windowrule = float, ^(kitty)$
|
||||||
|
|
||||||
|
# Example windowrule v2
|
||||||
|
# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$
|
||||||
|
|
||||||
|
# Ignore maximize requests from apps. You'll probably like this.
|
||||||
|
windowrulev2 = suppressevent maximize, class:.*
|
||||||
|
|
||||||
|
# Fix some dragging issues with XWayland
|
||||||
|
windowrulev2 = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0
|
284
hypr/hyprland.conf.save
Normal file
284
hypr/hyprland.conf.save
Normal file
@ -0,0 +1,284 @@
|
|||||||
|
|
||||||
|
# This is an example Hyprland config file.
|
||||||
|
# Refer to the wiki for more information.
|
||||||
|
# https://wiki.hyprland.org/Configuring/
|
||||||
|
|
||||||
|
# Please note not all available settings / options are set here.
|
||||||
|
# For a full list, see the wiki
|
||||||
|
|
||||||
|
# You can split this configuration into multiple files
|
||||||
|
# Create your files separately and then link them to this file like this:
|
||||||
|
# source = ~/.config/hypr/myColors.conf
|
||||||
|
|
||||||
|
|
||||||
|
################
|
||||||
|
### MONITORS ###
|
||||||
|
################
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Monitors/
|
||||||
|
monitor= eDP-1, 2256x1504@60, 0x0, 1
|
||||||
|
|
||||||
|
|
||||||
|
###################
|
||||||
|
### MY PROGRAMS ###
|
||||||
|
###################
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Keywords/
|
||||||
|
|
||||||
|
# Set programs that you use
|
||||||
|
$terminal = cool-retro-term
|
||||||
|
$fileManager = dolphin
|
||||||
|
$menu = rofi -show drun
|
||||||
|
|
||||||
|
|
||||||
|
#################
|
||||||
|
### AUTOSTART ###
|
||||||
|
#################
|
||||||
|
|
||||||
|
# Autostart necessary processes (like notifications daemons, status bars, etc.)
|
||||||
|
# Or execute your favorite apps at launch like this:
|
||||||
|
|
||||||
|
# exec-once = $terminal
|
||||||
|
# exec-once = nm-applet &
|
||||||
|
exec-once = waybar & hyprpaper & nm-applet
|
||||||
|
exec-once = dbus-update-activation-environment --systemd --all
|
||||||
|
exec-once = kdeconnect-indicator
|
||||||
|
exec-once = hypridle
|
||||||
|
|
||||||
|
#############################
|
||||||
|
### ENVIRONMENT VARIABLES ###
|
||||||
|
#############################
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Environment-variables/
|
||||||
|
|
||||||
|
env = XCURSOR_SIZE,24
|
||||||
|
env = HYPRCURSOR_SIZE,24
|
||||||
|
env = XDG_SESSION_TYPE,wayland
|
||||||
|
env = QT_QPA_PLATFORMTHEME,qt6ct
|
||||||
|
env = QT_QPA_PLATFORM,wayland
|
||||||
|
env = GTK_THEME, Adwaita:dark
|
||||||
|
|
||||||
|
#####################
|
||||||
|
### LOOK AND FEEL ###
|
||||||
|
#####################
|
||||||
|
|
||||||
|
# Refer to https://wiki.hyprland.org/Configuring/Variables/
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#general
|
||||||
|
general {
|
||||||
|
gaps_in = 5
|
||||||
|
gaps_out = 20
|
||||||
|
|
||||||
|
border_size = 2
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
|
||||||
|
col.active_border = rgba(463155ff)
|
||||||
|
col.inactive_border = rgba(251b31aa)
|
||||||
|
|
||||||
|
# Set to true enable resizing windows by clicking and dragging on borders and gaps
|
||||||
|
resize_on_border = false
|
||||||
|
|
||||||
|
# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
|
||||||
|
allow_tearing = false
|
||||||
|
|
||||||
|
layout = dwindle
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#decoration
|
||||||
|
decoration {
|
||||||
|
rounding = 10
|
||||||
|
rounding_power = 2
|
||||||
|
|
||||||
|
# Change transparency of focused and unfocused windows
|
||||||
|
active_opacity = 1.0
|
||||||
|
inactive_opacity = 1.0
|
||||||
|
|
||||||
|
shadow {
|
||||||
|
enabled = true
|
||||||
|
range = 4
|
||||||
|
render_power = 3
|
||||||
|
color = rgba(1a1a1aee)
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#blur
|
||||||
|
blur {
|
||||||
|
enabled = true
|
||||||
|
size = 3
|
||||||
|
passes = 1
|
||||||
|
|
||||||
|
vibrancy = 0.1696
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#animations
|
||||||
|
animations {
|
||||||
|
enabled = yes, please :)
|
||||||
|
|
||||||
|
# Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
|
||||||
|
|
||||||
|
bezier = easeOutQuint,0.23,1,0.32,1
|
||||||
|
bezier = easeInOutCubic,0.65,0.05,0.36,1
|
||||||
|
bezier = linear,0,0,1,1
|
||||||
|
bezier = almostLinear,0.5,0.5,0.75,1.0
|
||||||
|
bezier = quick,0.15,0,0.1,1
|
||||||
|
|
||||||
|
animation = global, 1, 10, default
|
||||||
|
animation = border, 1, 5.39, easeOutQuint
|
||||||
|
animation = windows, 1, 4.79, easeOutQuint
|
||||||
|
animation = windowsIn, 1, 4.1, easeOutQuint, popin 87%
|
||||||
|
animation = windowsOut, 1, 1.49, linear, popin 87%
|
||||||
|
animation = fadeIn, 1, 1.73, almostLinear
|
||||||
|
animation = fadeOut, 1, 1.46, almostLinear
|
||||||
|
animation = fade, 1, 3.03, quick
|
||||||
|
animation = layers, 1, 3.81, easeOutQuint
|
||||||
|
animation = layersIn, 1, 4, easeOutQuint, fade
|
||||||
|
animation = layersOut, 1, 1.5, linear, fade
|
||||||
|
animation = fadeLayersIn, 1, 1.79, almostLinear
|
||||||
|
animation = fadeLayersOut, 1, 1.39, almostLinear
|
||||||
|
animation = workspaces, 1, 1.94, almostLinear, fade
|
||||||
|
animation = workspacesIn, 1, 1.21, almostLinear, fade
|
||||||
|
animation = workspacesOut, 1, 1.94, almostLinear, fade
|
||||||
|
}
|
||||||
|
|
||||||
|
# Ref https://wiki.hyprland.org/Configuring/Workspace-Rules/
|
||||||
|
# "Smart gaps" / "No gaps when only"
|
||||||
|
# uncomment all if you wish to use that.
|
||||||
|
# workspace = w[tv1], gapsout:0, gapsin:0
|
||||||
|
# workspace = f[1], gapsout:0, gapsin:0
|
||||||
|
# windowrulev2 = bordersize 0, floating:0, onworkspace:w[tv1]
|
||||||
|
# windowrulev2 = rounding 0, floating:0, onworkspace:w[tv1]
|
||||||
|
# windowrulev2 = bordersize 0, floating:0, onworkspace:f[1]
|
||||||
|
# windowrulev2 = rounding 0, floating:0, onworkspace:f[1]
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
|
||||||
|
dwindle {
|
||||||
|
pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
|
||||||
|
preserve_split = true # You probably want this
|
||||||
|
}
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
|
||||||
|
master {
|
||||||
|
new_status = master
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#misc
|
||||||
|
misc {
|
||||||
|
force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers
|
||||||
|
disable_hyprland_logo = false # If true disables the random hyprland logo / anime girl background. :(
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#############
|
||||||
|
### INPUT ###
|
||||||
|
#############
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#input
|
||||||
|
input {
|
||||||
|
kb_layout = gb
|
||||||
|
kb_variant =
|
||||||
|
kb_model =
|
||||||
|
kb_options =
|
||||||
|
kb_rules =
|
||||||
|
|
||||||
|
follow_mouse = 1
|
||||||
|
|
||||||
|
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
|
||||||
|
|
||||||
|
touchpad {
|
||||||
|
natural_scroll = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#gestures
|
||||||
|
gestures {
|
||||||
|
workspace_swipe = true
|
||||||
|
}
|
||||||
|
|
||||||
|
# Example per-device config
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more
|
||||||
|
device {
|
||||||
|
name = epic-mouse-v1
|
||||||
|
sensitivity = -0.5
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
###################
|
||||||
|
### KEYBINDINGS ###
|
||||||
|
###################
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Keywords/
|
||||||
|
$mainMod = SUPER # Sets "Windows" key as main modifier
|
||||||
|
|
||||||
|
# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
|
||||||
|
bind = $mainMod, Q, exec, $terminal
|
||||||
|
bind = Control_L&Shift_L, Q, killactive
|
||||||
|
bind = $mainMod, L, exec, hyprlock
|
||||||
|
bind = alt&$mainMod, L, exit
|
||||||
|
bind = $mainMod, F, exec, $fileManager
|
||||||
|
bind = $mainMod, V, togglefloating,
|
||||||
|
bind = $mainMod, R, exec, $menu
|
||||||
|
bind = alt, space, exec, $menu
|
||||||
|
bind = $mainMod, P, pseudo, # dwindle
|
||||||
|
bind = $mainMod, J, togglesplit, # dwindle
|
||||||
|
bind = Control_L&Shift_L, F, fullscreen
|
||||||
|
|
||||||
|
# Move focus with mainMod + arrow keys
|
||||||
|
bind = $mainMod, left, movefocus, l
|
||||||
|
bind = $mainMod, right, movefocus, r
|
||||||
|
bind = $mainMod, up, movefocus, u
|
||||||
|
bind = $mainMod, down, movefocus, d
|
||||||
|
|
||||||
|
# Workspaces
|
||||||
|
bind = $mainMod&Control_L, right, workspace, +1
|
||||||
|
bind = $mainMod&Control_L, left, workspace, -1
|
||||||
|
|
||||||
|
# Move active window to a workspace
|
||||||
|
bind = $mainMod&Control_L&Shift_L, right, movetoworkspace, +1
|
||||||
|
bind = $mainMod&Control_L&Shift_L, left, movetoworkspace, -1
|
||||||
|
|
||||||
|
# Example special workspace (scratchpad)
|
||||||
|
bind = $mainMod, S, togglespecialworkspace, magic
|
||||||
|
bind = $mainMod SHIFT, S, movetoworkspace, special:magic
|
||||||
|
|
||||||
|
# Scroll through existing workspaces with mainMod + scroll
|
||||||
|
bind = $mainMod, mouse_down, workspace, e+1
|
||||||
|
bind = $mainMod, mouse_up, workspace, e-1
|
||||||
|
|
||||||
|
# Move/resize windows with mainMod + LMB/RMB and dragging
|
||||||
|
bindm = $mainMod, mouse:272, movewindow
|
||||||
|
bindm = $mainMod, mouse:273, resizewindow
|
||||||
|
|
||||||
|
# Laptop multimedia keys for volume and LCD brightness
|
||||||
|
bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
|
||||||
|
bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
|
||||||
|
bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
|
||||||
|
bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
|
||||||
|
bindel = ,XF86MonBrightnessUp, exec, brightnessctl s 10%+
|
||||||
|
bindel = ,XF86MonBrightnessDown, exec, brightnessctl s 10%-
|
||||||
|
|
||||||
|
# Requires playerctl
|
||||||
|
bindl = , XF86AudioNext, exec, playerctl next
|
||||||
|
bindl = , XF86AudioPause, exec, playerctl play-pause
|
||||||
|
bindl = , XF86AudioPlay, exec, playerctl play-pause
|
||||||
|
bindl = , XF86AudioPrev, exec, playerctl previous
|
||||||
|
|
||||||
|
bindl=,switch:Lid Switch, exec, hyprlock
|
||||||
|
|
||||||
|
##############################
|
||||||
|
### WINDOWS AND WORKSPACES ###
|
||||||
|
##############################
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
|
||||||
|
|
||||||
|
# Example windowrule v1
|
||||||
|
# windowrule = float, ^(kitty)$
|
||||||
|
|
||||||
|
# Example windowrule v2
|
||||||
|
# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$
|
||||||
|
|
||||||
|
# Ignore maximize requests from apps. You'll probably like this.
|
||||||
|
windowrulev2 = suppressevent maximize, class:.*
|
||||||
|
|
||||||
|
# Fix some dragging issues with XWayland
|
||||||
|
windowrulev2 = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0
|
69
hypr/hyprlock.conf
Normal file
69
hypr/hyprlock.conf
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
# BACKGROUND
|
||||||
|
background {
|
||||||
|
monitor =
|
||||||
|
path = /home/alfie/Pictures/other/wallpaper/puro_de.png
|
||||||
|
#color = $background
|
||||||
|
blur_passes = 2
|
||||||
|
contrast = 1
|
||||||
|
brightness = 0.5
|
||||||
|
vibrancy = 0.2
|
||||||
|
vibrancy_darkness = 0.2
|
||||||
|
}
|
||||||
|
|
||||||
|
# GENERAL
|
||||||
|
general {
|
||||||
|
no_fade_in = true
|
||||||
|
no_fade_out = true
|
||||||
|
hide_cursor = false
|
||||||
|
grace = 0
|
||||||
|
disable_loading_bar = true
|
||||||
|
}
|
||||||
|
|
||||||
|
# INPUT FIELD
|
||||||
|
input-field {
|
||||||
|
monitor =
|
||||||
|
size = 250, 60
|
||||||
|
outline_thickness = 2
|
||||||
|
dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8
|
||||||
|
dots_spacing = 0.35 # Scale of dots' absolute size, 0.0 - 1.0
|
||||||
|
dots_center = true
|
||||||
|
outer_color = rgba(0, 0, 0, 0)
|
||||||
|
inner_color = rgba(0, 0, 0, 0.2)
|
||||||
|
font_color = rgba(142, 243, 244, 0.75)
|
||||||
|
fade_on_empty = false
|
||||||
|
rounding = -1
|
||||||
|
check_color = rgb(204, 136, 34)
|
||||||
|
placeholder_text = <i><span foreground="##cdd6f4">Input Password...</span></i>
|
||||||
|
hide_input = false
|
||||||
|
position = 0, -200
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
}
|
||||||
|
|
||||||
|
# DATE
|
||||||
|
label {
|
||||||
|
monitor =
|
||||||
|
text = cmd[update:1000] echo "$(date +"%A, %B %d")"
|
||||||
|
color = rgba(242, 243, 244, 0.75)
|
||||||
|
font_size = 22
|
||||||
|
font_family = JetBrains Mono
|
||||||
|
position = 0, 300
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
}
|
||||||
|
|
||||||
|
# TIME
|
||||||
|
label {
|
||||||
|
monitor =
|
||||||
|
text = cmd[update:1000] echo "$(date +"%-I:%M")"
|
||||||
|
color = rgba(242, 243, 244, 0.75)
|
||||||
|
font_size = 95
|
||||||
|
font_family = JetBrains Mono Extrabold
|
||||||
|
position = 0, 200
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
}
|
||||||
|
|
||||||
|
auth {
|
||||||
|
fingerprint:enabled = true
|
||||||
|
}
|
3
hypr/hyprpaper.conf
Normal file
3
hypr/hyprpaper.conf
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
preload = /home/alfie/Pictures/other/wallpaper/puro_de.png
|
||||||
|
wallpaper = , /home/alfie/Pictures/other/wallpaper/puro_de.png
|
||||||
|
|
216
waybar/animation.css
Normal file
216
waybar/animation.css
Normal file
@ -0,0 +1,216 @@
|
|||||||
|
/* <<--< PHASE 1 >-->> */
|
||||||
|
|
||||||
|
#custom-ws {
|
||||||
|
color: transparent;
|
||||||
|
text-shadow: none;
|
||||||
|
animation: module_in 0.25s ease-in 0.5s forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-distro {
|
||||||
|
color: transparent;
|
||||||
|
font-size: 0;
|
||||||
|
text-shadow: none;
|
||||||
|
animation: distro_expand 0.25s ease-in 0.25s forwards,
|
||||||
|
distro_in 0.25s ease-in 0.5s forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-power {
|
||||||
|
font-size: 0;
|
||||||
|
text-shadow: none;
|
||||||
|
animation: power_expand 0.25s ease-in 0.25s forwards,
|
||||||
|
power_in 0.25s ease-in 0.5s forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* <<--< PHASE 2 >-->> */
|
||||||
|
|
||||||
|
#workspaces label {
|
||||||
|
opacity: 0;
|
||||||
|
animation: hoverable_in 0.25s ease-in 1s forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
#cpu,
|
||||||
|
#clock.time,
|
||||||
|
#idle_inhibitor,
|
||||||
|
#battery,
|
||||||
|
#battery.warning,
|
||||||
|
#battery.critical,
|
||||||
|
#battery.charging {
|
||||||
|
font-size: 0;
|
||||||
|
text-shadow: none;
|
||||||
|
animation: module_expand 0.25s ease-in 0.75s forwards,
|
||||||
|
module_in 0.25s ease-in 1s forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
#cpu {
|
||||||
|
animation: module_expand 0.25s ease-in 0.75s forwards,
|
||||||
|
module_in 0.25s ease-in 1s forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
#clock.time {
|
||||||
|
animation: module_expand 0.25s ease-in 0.75s forwards,
|
||||||
|
module_in 0.25s ease-in 1s forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
#idle_inhibitor {
|
||||||
|
animation: module_expand 0.25s ease-in 0.75s forwards,
|
||||||
|
hoverable_in 0.25s ease-in 1s forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery {
|
||||||
|
animation: module_expand 0.25s ease-in 0.75s forwards,
|
||||||
|
battery_in 0.25s ease-in 1s forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery.warning {
|
||||||
|
animation: module_expand 0.25s ease-in 0.75s forwards,
|
||||||
|
state_warning_in 0.25s ease-in 1s forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery.critical {
|
||||||
|
animation: module_expand 0.25s ease-in 0.75s forwards,
|
||||||
|
state_critical_in 0.25s ease-in 1s forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery.charging {
|
||||||
|
animation: module_expand 0.25s ease-in 0.75s forwards,
|
||||||
|
state_charging_in 0.25s ease-in 1s forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* <<--< PHASE 3 >-->> */
|
||||||
|
|
||||||
|
#memory,
|
||||||
|
#backlight {
|
||||||
|
color: transparent;
|
||||||
|
font-size: 0;
|
||||||
|
text-shadow: none;
|
||||||
|
animation: module_expand 0.25s ease-in 1.15s forwards,
|
||||||
|
module_in 0.25s ease-in 1.4s forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
#memory.warning {
|
||||||
|
color: transparent;
|
||||||
|
font-size: 0;
|
||||||
|
text-shadow: none;
|
||||||
|
animation: module_expand 0.25s ease-in 1.15s forwards,
|
||||||
|
state_warning_in 0.25s ease-in 1.4s forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
#memory.critical {
|
||||||
|
color: transparent;
|
||||||
|
font-size: 0;
|
||||||
|
text-shadow: none;
|
||||||
|
animation: module_expand 0.25s ease-in 1.15s forwards,
|
||||||
|
state_critical_in 0.25s ease-in 1.4s forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
#clock.date {
|
||||||
|
font-size: 0;
|
||||||
|
animation: module_expand 0.25s ease-in 1.15s forwards,
|
||||||
|
hoverable_in 0.25s ease-in 1.4s forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* <<--< PHASE 4 >-->> */
|
||||||
|
|
||||||
|
#window,
|
||||||
|
#custom-media {
|
||||||
|
opacity: 0;
|
||||||
|
animation: hoverable_in 0.25s ease-in 1.75s forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-cpuinfo,
|
||||||
|
#custom-wifi,
|
||||||
|
#bluetooth,
|
||||||
|
#custom-update,
|
||||||
|
#pulseaudio {
|
||||||
|
font-size: 0;
|
||||||
|
animation: module_expand 0.25s ease-in 1.5s forwards,
|
||||||
|
hoverable_in 0.25s ease-in 1.75s forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* <<--< KEYFRAMES >-->> */
|
||||||
|
|
||||||
|
/* <<--< distro icon >-->> */
|
||||||
|
|
||||||
|
@keyframes distro_expand {
|
||||||
|
to {
|
||||||
|
font-size: 14.6px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes distro_in {
|
||||||
|
to {
|
||||||
|
color: @distro-fg;
|
||||||
|
text-shadow: 0 0 1.5px rgba(0, 0, 0, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* <<--< power button >-->> */
|
||||||
|
|
||||||
|
@keyframes power_expand {
|
||||||
|
to {
|
||||||
|
font-size: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes power_in {
|
||||||
|
to {
|
||||||
|
text-shadow: 0 0 2px rgba(0, 0, 0, 0.6);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* <<--< modules >-->> */
|
||||||
|
|
||||||
|
@keyframes module_expand {
|
||||||
|
to {
|
||||||
|
font-size: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes module_in {
|
||||||
|
to {
|
||||||
|
color: @module-fg;
|
||||||
|
text-shadow: 0 0 2px rgba(0, 0, 0, 0.6);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* <<--< FIXES >-->> */
|
||||||
|
|
||||||
|
/* <<--< hoverables >-->> */
|
||||||
|
|
||||||
|
@keyframes hoverable_in {
|
||||||
|
to {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* <<--< battery >-->> */
|
||||||
|
|
||||||
|
@keyframes battery_in {
|
||||||
|
to {
|
||||||
|
color: @module-fg;
|
||||||
|
text-shadow: 0 0 2px rgba(0, 0, 0, 0.6);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* <<--< states >-->> */
|
||||||
|
|
||||||
|
@keyframes state_warning_in {
|
||||||
|
to {
|
||||||
|
color: @warning;
|
||||||
|
text-shadow: 0 0 2px rgba(0, 0, 0, 0.6);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes state_critical_in {
|
||||||
|
to {
|
||||||
|
color: @critical;
|
||||||
|
text-shadow: 0 0 2px rgba(0, 0, 0, 0.6);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes state_charging_in {
|
||||||
|
to {
|
||||||
|
color: @charging;
|
||||||
|
text-shadow: 0 0 2px rgba(0, 0, 0, 0.6);
|
||||||
|
}
|
||||||
|
}
|
522
waybar/config.jsonc
Normal file
522
waybar/config.jsonc
Normal file
@ -0,0 +1,522 @@
|
|||||||
|
{
|
||||||
|
"layer": "top",
|
||||||
|
"position": "top",
|
||||||
|
"mode": "dock",
|
||||||
|
"reload_style_on_change": true,
|
||||||
|
"gtk-layer-shell": true,
|
||||||
|
|
||||||
|
// === Positions ===
|
||||||
|
|
||||||
|
"modules-left": [
|
||||||
|
"custom/ws", // window icon
|
||||||
|
"custom/left1",
|
||||||
|
|
||||||
|
"hyprland/workspaces", // workspaces
|
||||||
|
"custom/right1",
|
||||||
|
|
||||||
|
"custom/paddw",
|
||||||
|
"hyprland/window" // window title
|
||||||
|
],
|
||||||
|
|
||||||
|
"modules-center": [
|
||||||
|
"custom/paddc",
|
||||||
|
"custom/left2",
|
||||||
|
"custom/cpuinfo", // temperature
|
||||||
|
|
||||||
|
"custom/left3",
|
||||||
|
"memory", // memory
|
||||||
|
|
||||||
|
"custom/left4",
|
||||||
|
// "custom/cpu", // cpu
|
||||||
|
"cpu", // cpu
|
||||||
|
"custom/leftin1",
|
||||||
|
|
||||||
|
"custom/left5",
|
||||||
|
"custom/distro", // distro icon
|
||||||
|
"custom/right2",
|
||||||
|
|
||||||
|
"custom/rightin1",
|
||||||
|
"idle_inhibitor", // idle inhibitor
|
||||||
|
"clock#time", // time
|
||||||
|
"custom/right3",
|
||||||
|
|
||||||
|
"clock#date", // date
|
||||||
|
"custom/right4",
|
||||||
|
|
||||||
|
"custom/wifi", // wi-fi
|
||||||
|
"bluetooth", // bluetooth
|
||||||
|
"custom/update", // system update
|
||||||
|
"custom/right5"
|
||||||
|
],
|
||||||
|
|
||||||
|
"modules-right": [
|
||||||
|
"custom/media", // media info
|
||||||
|
|
||||||
|
"tray",
|
||||||
|
|
||||||
|
"custom/left6",
|
||||||
|
"pulseaudio", // output device
|
||||||
|
|
||||||
|
"custom/left7",
|
||||||
|
// "custom/backlight", // brightness
|
||||||
|
"backlight", // brightness
|
||||||
|
|
||||||
|
"custom/left8",
|
||||||
|
"battery", // battery
|
||||||
|
|
||||||
|
"custom/leftin2",
|
||||||
|
"custom/power" // power button
|
||||||
|
],
|
||||||
|
|
||||||
|
// === Modules ===
|
||||||
|
|
||||||
|
"tray": {
|
||||||
|
"icon-size": 12,
|
||||||
|
"spacing": 10,
|
||||||
|
},
|
||||||
|
|
||||||
|
"custom/ws": {
|
||||||
|
"format": " ",
|
||||||
|
"tooltip": false,
|
||||||
|
"min-length": 3,
|
||||||
|
"max-length": 3
|
||||||
|
},
|
||||||
|
|
||||||
|
"hyprland/workspaces": {
|
||||||
|
"on-scroll-up": "hyprctl dispatch workspace -1",
|
||||||
|
"on-scroll-down": "hyprctl dispatch workspace +1",
|
||||||
|
"persistent-workspaces": {
|
||||||
|
"1": [],
|
||||||
|
"2": [],
|
||||||
|
"3": [],
|
||||||
|
"4": [],
|
||||||
|
"5": []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"hyprland/window": {
|
||||||
|
"format": "{}",
|
||||||
|
"min-length": 5,
|
||||||
|
|
||||||
|
// === Window Titles ===
|
||||||
|
|
||||||
|
"rewrite": {
|
||||||
|
// == Desktop ==
|
||||||
|
|
||||||
|
"":
|
||||||
|
"<span foreground='#89b4fa'> </span> Hyprland",
|
||||||
|
|
||||||
|
// == Terminal ==
|
||||||
|
|
||||||
|
"~": " Terminal",
|
||||||
|
"zsh": " Terminal",
|
||||||
|
"kitty": " Terminal",
|
||||||
|
"sejjy@archlinux:(.*)": " Terminal",
|
||||||
|
"(.*)sejjy@archlinux:~": " Terminal",
|
||||||
|
|
||||||
|
// == Browser ==
|
||||||
|
|
||||||
|
"(.*)Mozilla Firefox":
|
||||||
|
"<span foreground='#f38ba8'> </span> Firefox",
|
||||||
|
"(.*) — Mozilla Firefox":
|
||||||
|
"<span foreground='#f38ba8'> </span> $1",
|
||||||
|
|
||||||
|
"(.*)Zen Browser":
|
||||||
|
"<span foreground='#cdd6f4'> </span> Zen Browser",
|
||||||
|
"(.*) — Zen Browser":
|
||||||
|
"<span foreground='#cdd6f4'> </span> $1",
|
||||||
|
|
||||||
|
// == Development ==
|
||||||
|
|
||||||
|
"(.*) - Visual Studio Code":
|
||||||
|
"<span foreground='#89b4fa'> </span> $1",
|
||||||
|
"(.*)Visual Studio Code":
|
||||||
|
"<span foreground='#89b4fa'> </span> Visual Studio Code",
|
||||||
|
|
||||||
|
"nvim":
|
||||||
|
"<span foreground='#a6e3a1'> </span> Neovim",
|
||||||
|
"nvim (.*)":
|
||||||
|
"<span foreground='#a6e3a1'> </span> $1",
|
||||||
|
|
||||||
|
"vim":
|
||||||
|
"<span foreground='#a6e3a1'> </span> Vim",
|
||||||
|
"vim (.*)":
|
||||||
|
"<span foreground='#a6e3a1'> </span> $1",
|
||||||
|
|
||||||
|
"Godot":
|
||||||
|
"<span foreground='#89b4fa'> </span> Godot Engine",
|
||||||
|
"Godot Engine - (.*)":
|
||||||
|
"<span foreground='#89b4fa'> </span> $1",
|
||||||
|
"(.*) - Godot Engine":
|
||||||
|
"<span foreground='#89b4fa'> </span> $1",
|
||||||
|
|
||||||
|
// == Media ==
|
||||||
|
|
||||||
|
"(.*)Spotify":
|
||||||
|
"<span foreground='#a6e3a1'> </span> Spotify",
|
||||||
|
"(.*)Spotify Premium":
|
||||||
|
"<span foreground='#a6e3a1'> </span> Spotify Premium",
|
||||||
|
|
||||||
|
"OBS(.*)":
|
||||||
|
"<span foreground='#a6adc8'> </span> OBS Studio",
|
||||||
|
|
||||||
|
"VLC media player":
|
||||||
|
"<span foreground='#fab387'> </span> VLC Media Player",
|
||||||
|
"(.*) - VLC media player":
|
||||||
|
"<span foreground='#fab387'> </span> $1",
|
||||||
|
|
||||||
|
"(.*) - mpv":
|
||||||
|
"<span foreground='#cba6f7'> </span> $1",
|
||||||
|
|
||||||
|
"GNU Image Manipulation Program":
|
||||||
|
"<span foreground='#a6adc8'> </span> GNU Image Manipulation Program",
|
||||||
|
|
||||||
|
"qView": " qView",
|
||||||
|
|
||||||
|
"(.*).jpg": " $1.jpg",
|
||||||
|
"(.*).png": " $1.png",
|
||||||
|
"(.*).svg": " $1.svg",
|
||||||
|
|
||||||
|
// == Social ==
|
||||||
|
|
||||||
|
"vesktop":
|
||||||
|
"<span foreground='#89b4fa'> </span> Discord",
|
||||||
|
|
||||||
|
"• Discord(.*)": "Discord$1",
|
||||||
|
"(.*)Discord(.*)":
|
||||||
|
"<span foreground='#89b4fa'> </span> $1Discord$2",
|
||||||
|
|
||||||
|
// == Documents ==
|
||||||
|
|
||||||
|
"ONLYOFFICE Desktop Editors":
|
||||||
|
"<span foreground='#f38ba8'> </span> OnlyOffice Desktop",
|
||||||
|
|
||||||
|
"(.*).docx":
|
||||||
|
"<span foreground='#89b4fa'> </span> $1.docx",
|
||||||
|
"(.*).xlsx":
|
||||||
|
"<span foreground='#a6e3a1'> </span> $1.xlsx",
|
||||||
|
"(.*).pptx":
|
||||||
|
"<span foreground='#fab387'> </span> $1.pptx",
|
||||||
|
"(.*).pdf":
|
||||||
|
"<span foreground='#f38ba8'> </span> $1.pdf",
|
||||||
|
|
||||||
|
"/": " File Manager",
|
||||||
|
|
||||||
|
// == System ==
|
||||||
|
|
||||||
|
"Timeshift-gtk":
|
||||||
|
"<span foreground='#a6e3a1'> </span> Timeshift",
|
||||||
|
|
||||||
|
"Authenticate": " Authenticate"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"custom/cpuinfo": {
|
||||||
|
"exec": "~/.config/waybar/scripts/cpu-temp.sh",
|
||||||
|
"return-type": "json",
|
||||||
|
"format": "{}",
|
||||||
|
"tooltip": true,
|
||||||
|
"interval": 5,
|
||||||
|
"min-length": 8,
|
||||||
|
"max-length": 8
|
||||||
|
},
|
||||||
|
|
||||||
|
"memory": {
|
||||||
|
"states": {
|
||||||
|
"warning": 75,
|
||||||
|
"critical": 90
|
||||||
|
},
|
||||||
|
|
||||||
|
"format": " {percentage}%",
|
||||||
|
"format-critical": " {percentage}%",
|
||||||
|
"tooltip": true,
|
||||||
|
"tooltip-format": "Memory Used: {used:0.1f} GB / {total:0.1f} GB",
|
||||||
|
"interval": 5,
|
||||||
|
"min-length": 7,
|
||||||
|
"max-length": 7
|
||||||
|
},
|
||||||
|
|
||||||
|
// "custom/cpu": {
|
||||||
|
// "exec": "~/.config/waybar/scripts/cpu-usage.sh",
|
||||||
|
// "return-type": "json",
|
||||||
|
// "tooltip": true,
|
||||||
|
// "interval": 5,
|
||||||
|
// "min-length": 6,
|
||||||
|
// "max-length": 6
|
||||||
|
// },
|
||||||
|
|
||||||
|
"cpu": {
|
||||||
|
"format": " {usage}%",
|
||||||
|
"tooltip": false,
|
||||||
|
"interval": 5,
|
||||||
|
"min-length": 6,
|
||||||
|
"max-length": 6
|
||||||
|
},
|
||||||
|
|
||||||
|
"custom/distro": {
|
||||||
|
"format": " ",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
|
||||||
|
"idle_inhibitor": {
|
||||||
|
"format": "{icon}",
|
||||||
|
|
||||||
|
"format-icons": {
|
||||||
|
"activated": " ",
|
||||||
|
"deactivated": " "
|
||||||
|
},
|
||||||
|
|
||||||
|
"tooltip": true,
|
||||||
|
"tooltip-format-activated": "Presentation Mode",
|
||||||
|
"tooltip-format-deactivated": "Idle Mode",
|
||||||
|
"start-activated": false
|
||||||
|
},
|
||||||
|
|
||||||
|
"clock#time": {
|
||||||
|
"format": "{:%H:%M}",
|
||||||
|
"tooltip": true,
|
||||||
|
"tooltip-format": "Standard Time: {:%I:%M %p}",
|
||||||
|
"min-length": 6,
|
||||||
|
"max-length": 6
|
||||||
|
},
|
||||||
|
|
||||||
|
"clock#date": {
|
||||||
|
"format": " {:%m-%d}",
|
||||||
|
"tooltip-format": "<tt>{calendar}</tt>",
|
||||||
|
|
||||||
|
"calendar": {
|
||||||
|
"mode": "month",
|
||||||
|
"mode-mon-col": 6,
|
||||||
|
"on-click-right": "mode",
|
||||||
|
|
||||||
|
"format": {
|
||||||
|
"months":
|
||||||
|
"<span color='#b4befe'><b>{}</b></span>",
|
||||||
|
"weekdays":
|
||||||
|
"<span color='#a6adc8' font='7'>{}</span>",
|
||||||
|
"today":
|
||||||
|
"<span color='#f38ba8'><b>{}</b></span>"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"actions": {
|
||||||
|
"on-click": "mode",
|
||||||
|
"on-click-right": "mode"
|
||||||
|
},
|
||||||
|
|
||||||
|
"min-length": 8,
|
||||||
|
"max-length": 8
|
||||||
|
},
|
||||||
|
|
||||||
|
"custom/wifi": {
|
||||||
|
"exec": "~/.config/waybar/scripts/wifi-status.sh",
|
||||||
|
"return-type": "json",
|
||||||
|
"format": "{}",
|
||||||
|
"tooltip": true,
|
||||||
|
"on-click": "~/.config/waybar/scripts/wifi-menu.sh",
|
||||||
|
"on-click-right": "kitty --title ' Network Manager TUI' bash -c nmtui",
|
||||||
|
"interval": 1,
|
||||||
|
"min-length": 1,
|
||||||
|
"max-length": 1
|
||||||
|
},
|
||||||
|
|
||||||
|
"bluetooth": {
|
||||||
|
"format": "",
|
||||||
|
"format-disabled": "",
|
||||||
|
"format-connected": "",
|
||||||
|
"format-connected-battery": "",
|
||||||
|
|
||||||
|
"tooltip-format":
|
||||||
|
"{num_connections} connected",
|
||||||
|
"tooltip-format-disabled":
|
||||||
|
"Bluetooth Disabled",
|
||||||
|
"tooltip-format-connected":
|
||||||
|
"{num_connections} connected\n{device_enumerate}",
|
||||||
|
"tooltip-format-enumerate-connected":
|
||||||
|
"{device_alias}",
|
||||||
|
"tooltip-format-enumerate-connected-battery":
|
||||||
|
"{device_alias}: {device_battery_percentage}%",
|
||||||
|
|
||||||
|
"on-click": "~/.config/waybar/scripts/bluetooth-menu.sh",
|
||||||
|
"on-click-right": "kitty --title ' Bluetooth TUI' bash -c bluetui",
|
||||||
|
"interval": 1,
|
||||||
|
"min-length": 1,
|
||||||
|
"max-length": 1
|
||||||
|
},
|
||||||
|
|
||||||
|
"custom/update": {
|
||||||
|
"exec": "~/.config/waybar/scripts/system-update.sh",
|
||||||
|
"return-type": "json",
|
||||||
|
"format": "{}",
|
||||||
|
"on-click": "hyprctl dispatch exec '~/.config/waybar/scripts/system-update.sh up'",
|
||||||
|
"interval": 30,
|
||||||
|
"tooltip": true,
|
||||||
|
"min-length": 1,
|
||||||
|
"max-length": 1
|
||||||
|
},
|
||||||
|
|
||||||
|
"custom/media": {
|
||||||
|
"exec": "~/.config/waybar/scripts/media-player.py",
|
||||||
|
"return-type": "json",
|
||||||
|
"format": "{}",
|
||||||
|
"tooltip": "{tooltip}",
|
||||||
|
"on-click": "playerctl play-pause",
|
||||||
|
"min-length": 5,
|
||||||
|
"max-length": 35
|
||||||
|
},
|
||||||
|
|
||||||
|
"pulseaudio": {
|
||||||
|
"format": "{icon} {volume}%",
|
||||||
|
"format-muted": " {volume}%",
|
||||||
|
|
||||||
|
"format-icons": {
|
||||||
|
"default": ["", "", ""],
|
||||||
|
"headphone": "",
|
||||||
|
"headset": ""
|
||||||
|
},
|
||||||
|
|
||||||
|
"tooltip": true,
|
||||||
|
"tooltip-format": "Device: {desc}",
|
||||||
|
"on-click": "~/.config/waybar/scripts/volume-control.sh -o m",
|
||||||
|
"on-scroll-up": "~/.config/waybar/scripts/volume-control.sh -o i",
|
||||||
|
"on-scroll-down": "~/.config/waybar/scripts/volume-control.sh -o d",
|
||||||
|
"min-length": 6,
|
||||||
|
"max-length": 6
|
||||||
|
},
|
||||||
|
|
||||||
|
// "custom/backlight": {
|
||||||
|
// "exec": "~/.config/waybar/scripts/brightness-control.sh",
|
||||||
|
// "return-type": "json",
|
||||||
|
// "format": "{}",
|
||||||
|
// "tooltip": true,
|
||||||
|
// "on-scroll-up": "~/.config/waybar/scripts/brightness-control.sh -o i",
|
||||||
|
// "on-scroll-down": "~/.config/waybar/scripts/brightness-control.sh -o d",
|
||||||
|
// "interval": 1,
|
||||||
|
// "min-length": 6,
|
||||||
|
// "max-length": 6
|
||||||
|
// },
|
||||||
|
|
||||||
|
"backlight": {
|
||||||
|
"format": "{icon} {percent}%",
|
||||||
|
"format-icons": ["", "", "", "", "", "", "", "", ""],
|
||||||
|
"tooltip": false,
|
||||||
|
"on-scroll-up": "brightnessctl set 2%+",
|
||||||
|
"on-scroll-down": "brightnessctl set 2%-",
|
||||||
|
"min-length": 6,
|
||||||
|
"max-length": 6
|
||||||
|
},
|
||||||
|
|
||||||
|
"battery": {
|
||||||
|
"states": {
|
||||||
|
"warning": 30,
|
||||||
|
"critical": 15
|
||||||
|
},
|
||||||
|
|
||||||
|
"format": "{icon} {capacity}%",
|
||||||
|
"format-icons": ["", "", "", "", "", "", ""],
|
||||||
|
"format-warning": " {capacity}%",
|
||||||
|
"format-critical": " {capacity}%",
|
||||||
|
"format-charging": " {capacity}%",
|
||||||
|
|
||||||
|
"tooltip-format": "Discharging: {time}",
|
||||||
|
"tooltip-format-charging": "Charging: {time}",
|
||||||
|
"interval": 1,
|
||||||
|
"min-length": 6,
|
||||||
|
"max-length": 6
|
||||||
|
},
|
||||||
|
|
||||||
|
"custom/power": {
|
||||||
|
"format": " ",
|
||||||
|
"tooltip": true,
|
||||||
|
"tooltip-format": "Power Menu",
|
||||||
|
"on-click": "~/.config/waybar/scripts/power-menu.sh"
|
||||||
|
},
|
||||||
|
|
||||||
|
// === Padding ===
|
||||||
|
|
||||||
|
"custom/paddw": {
|
||||||
|
"format": " ",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
|
||||||
|
"custom/paddc": {
|
||||||
|
"format": " ",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
|
||||||
|
// == Left Arrows ==
|
||||||
|
|
||||||
|
"custom/left1": {
|
||||||
|
"format": "",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"custom/left2": {
|
||||||
|
"format": "",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"custom/left3": {
|
||||||
|
"format": "",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"custom/left4": {
|
||||||
|
"format": "",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"custom/left5": {
|
||||||
|
"format": "",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"custom/left6": {
|
||||||
|
"format": "",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"custom/left7": {
|
||||||
|
"format": "",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"custom/left8": {
|
||||||
|
"format": "",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
|
||||||
|
// == Right Arrows ==
|
||||||
|
|
||||||
|
"custom/right1": {
|
||||||
|
"format": "",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"custom/right2": {
|
||||||
|
"format": "",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"custom/right3": {
|
||||||
|
"format": "",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"custom/right4": {
|
||||||
|
"format": "",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"custom/right5": {
|
||||||
|
"format": "",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
|
||||||
|
// == Left Inverse ==
|
||||||
|
|
||||||
|
"custom/leftin1": {
|
||||||
|
"format": "",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"custom/leftin2": {
|
||||||
|
"format": "",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
|
||||||
|
// == Right Inverse ==
|
||||||
|
|
||||||
|
"custom/rightin1": {
|
||||||
|
"format": "",
|
||||||
|
"tooltip": false
|
||||||
|
}
|
||||||
|
}
|
105
waybar/scripts/bluetooth-menu.sh
Executable file
105
waybar/scripts/bluetooth-menu.sh
Executable file
@ -0,0 +1,105 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Author: Jesse Mirabel (@sejjy)
|
||||||
|
# GitHub: https://github.com/sejjy/mechabar
|
||||||
|
|
||||||
|
# Rofi config
|
||||||
|
config="$HOME/.config/rofi/bluetooth-menu.rasi"
|
||||||
|
|
||||||
|
# Rofi window override
|
||||||
|
override_disabled="mainbox { children: [ listview ]; } listview { lines: 1; padding: 6px; }"
|
||||||
|
|
||||||
|
get_device_icon() {
|
||||||
|
local device_mac=$1
|
||||||
|
device_info=$(bluetoothctl info "$device_mac")
|
||||||
|
device_icon=$(echo "$device_info" | grep "Icon:" | awk '{print $2}')
|
||||||
|
|
||||||
|
case "$device_icon" in
|
||||||
|
"audio-headphones" | "audio-headset") echo " " ;; # Headphones
|
||||||
|
"video-display" | "computer") echo " " ;; # Monitor
|
||||||
|
"audio-input-microphone") echo " " ;; # Microphone
|
||||||
|
"input-keyboard") echo " " ;; # Keyboard
|
||||||
|
"audio-speakers") echo " " ;; # Speakers
|
||||||
|
"input-mouse") echo " " ;; # Mouse
|
||||||
|
"phone") echo " " ;; # Phone
|
||||||
|
*)
|
||||||
|
echo " " # Default
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
# Get list of paired devices
|
||||||
|
bluetooth_devices=$(bluetoothctl devices | while read -r line; do
|
||||||
|
device_mac=$(echo "$line" | awk '{print $2}')
|
||||||
|
device_name=$(echo "$line" | awk '{$1=$2=""; print substr($0, 3)}')
|
||||||
|
icon=$(get_device_icon "$device_mac")
|
||||||
|
echo "$icon $device_name"
|
||||||
|
done)
|
||||||
|
|
||||||
|
options=$(
|
||||||
|
echo "Scan for devices "
|
||||||
|
echo "Disable Bluetooth"
|
||||||
|
echo "$bluetooth_devices"
|
||||||
|
)
|
||||||
|
option="Enable Bluetooth"
|
||||||
|
|
||||||
|
# Get Bluetooth status
|
||||||
|
bluetooth_status=$(bluetoothctl show | grep "Powered:" | awk '{print $2}')
|
||||||
|
|
||||||
|
if [[ "$bluetooth_status" == "yes" ]]; then
|
||||||
|
selected_option=$(echo -e "$options" | rofi -dmenu -i -selected-row 1 -config "${config}" -p " " || pkill -x rofi)
|
||||||
|
else
|
||||||
|
selected_option=$(echo -e "$option" | rofi -dmenu -i -selected-row 1 -config "${config}" -theme-str "${override_disabled}" -p " " || pkill -x rofi)
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Exit if no option is selected
|
||||||
|
if [ -z "$selected_option" ]; then
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Actions based on selected option
|
||||||
|
case "$selected_option" in
|
||||||
|
"Enable Bluetooth")
|
||||||
|
notify-send "Bluetooth Enabled"
|
||||||
|
rfkill unblock bluetooth
|
||||||
|
bluetoothctl power on
|
||||||
|
sleep 1
|
||||||
|
;;
|
||||||
|
"Disable Bluetooth")
|
||||||
|
notify-send "Bluetooth Disabled"
|
||||||
|
rfkill block bluetooth
|
||||||
|
bluetoothctl power off
|
||||||
|
exit
|
||||||
|
;;
|
||||||
|
"Scan for devices"*)
|
||||||
|
notify-send "Press '?' to show help."
|
||||||
|
kitty --title ' Bluetooth TUI' bash -c "bluetui" # Launch bluetui
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# Extract device name
|
||||||
|
device_name="${selected_option#* }"
|
||||||
|
device_name="${device_name## }"
|
||||||
|
|
||||||
|
if [[ -n "$device_name" ]]; then
|
||||||
|
# Get MAC address
|
||||||
|
device_mac=$(bluetoothctl devices | grep "$device_name" | awk '{print $2}')
|
||||||
|
|
||||||
|
# Trust and pair device
|
||||||
|
bluetoothctl trust "$device_mac" >/dev/null 2>&1
|
||||||
|
bluetoothctl pair "$device_mac" >/dev/null 2>&1
|
||||||
|
|
||||||
|
# Connect to device
|
||||||
|
bluetoothctl connect "$device_mac" &
|
||||||
|
sleep 3
|
||||||
|
connection_status=$(bluetoothctl info "$device_mac" | grep "Connected:" | awk '{print $2}')
|
||||||
|
|
||||||
|
if [[ "$connection_status" == "yes" ]]; then
|
||||||
|
notify-send "Connected to \"$device_name\"."
|
||||||
|
else
|
||||||
|
notify-send "Failed to connect to \"$device_name\"."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
92
waybar/scripts/brightness-control.sh
Executable file
92
waybar/scripts/brightness-control.sh
Executable file
@ -0,0 +1,92 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Print error message for invalid arguments
|
||||||
|
print_error() {
|
||||||
|
cat <<"EOF"
|
||||||
|
Usage: ./brightnesscontrol.sh <action>
|
||||||
|
Valid actions are:
|
||||||
|
i -- <i>ncrease brightness [+2%]
|
||||||
|
d -- <d>ecrease brightness [-2%]
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
# Send a notification with brightness info
|
||||||
|
send_notification() {
|
||||||
|
brightness=$(brightnessctl info | grep -oP "(?<=\()\d+(?=%)")
|
||||||
|
notify-send -r 91190 "Brightness: ${brightness}%"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Get the current brightness percentage and device name
|
||||||
|
get_brightness() {
|
||||||
|
brightness=$(brightnessctl -m | grep -o '[0-9]\+%' | head -c-2)
|
||||||
|
device=$(brightnessctl -m | head -n 1 | awk -F',' '{print $1}' | sed 's/_/ /g; s/\<./\U&/g') # Get device name
|
||||||
|
current_brightness=$(brightnessctl -m | head -n 1 | awk -F',' '{print $3}') # Get current brightness
|
||||||
|
max_brightness=$(brightnessctl -m | head -n 1 | awk -F',' '{print $5}') # Get max brightness
|
||||||
|
}
|
||||||
|
get_brightness
|
||||||
|
|
||||||
|
# Handle options
|
||||||
|
while getopts o: opt; do
|
||||||
|
case "${opt}" in
|
||||||
|
o)
|
||||||
|
case $OPTARG in
|
||||||
|
i) # Increase brightness
|
||||||
|
if [[ $brightness -lt 10 ]]; then
|
||||||
|
brightnessctl set +1%
|
||||||
|
else
|
||||||
|
brightnessctl set +2%
|
||||||
|
fi
|
||||||
|
send_notification
|
||||||
|
;;
|
||||||
|
d) # Decrease brightness
|
||||||
|
if [[ $brightness -le 1 ]]; then
|
||||||
|
brightnessctl set 1%
|
||||||
|
elif [[ $brightness -le 10 ]]; then
|
||||||
|
brightnessctl set 1%-
|
||||||
|
else
|
||||||
|
brightnessctl set 2%-
|
||||||
|
fi
|
||||||
|
send_notification
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
print_error
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
print_error
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Determine the icon based on brightness level
|
||||||
|
get_icon() {
|
||||||
|
if ((brightness <= 5)); then
|
||||||
|
icon=""
|
||||||
|
elif ((brightness <= 15)); then
|
||||||
|
icon=""
|
||||||
|
elif ((brightness <= 30)); then
|
||||||
|
icon=""
|
||||||
|
elif ((brightness <= 45)); then
|
||||||
|
icon=""
|
||||||
|
elif ((brightness <= 55)); then
|
||||||
|
icon=""
|
||||||
|
elif ((brightness <= 65)); then
|
||||||
|
icon=""
|
||||||
|
elif ((brightness <= 80)); then
|
||||||
|
icon=""
|
||||||
|
elif ((brightness <= 95)); then
|
||||||
|
icon=""
|
||||||
|
else
|
||||||
|
icon=""
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Backlight module and tooltip
|
||||||
|
get_icon
|
||||||
|
module="${icon} ${brightness}%"
|
||||||
|
|
||||||
|
tooltip="Device Name: ${device}"
|
||||||
|
tooltip+="\nBrightness: ${current_brightness} / ${max_brightness}"
|
||||||
|
|
||||||
|
echo "{\"text\": \"${module}\", \"tooltip\": \"${tooltip}\"}"
|
64
waybar/scripts/cpu-temp.sh
Executable file
64
waybar/scripts/cpu-temp.sh
Executable file
@ -0,0 +1,64 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
model=$(awk -F ': ' '/model name/{print $2}' /proc/cpuinfo | head -n 1 | sed 's/@.*//; s/ *\((R)\|(TM)\)//g; s/^[ \t]*//; s/[ \t]*$//')
|
||||||
|
|
||||||
|
# Get CPU clock speeds
|
||||||
|
get_cpu_frequency() {
|
||||||
|
freqlist=$(awk '/cpu MHz/ {print $4}' /proc/cpuinfo)
|
||||||
|
maxfreq=$(sed 's/...$//' /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq)
|
||||||
|
average_freq=$(echo "$freqlist" | tr ' ' '\n' | awk "{sum+=\$1} END {printf \"%.0f/%s MHz\", sum/NR, $maxfreq}")
|
||||||
|
echo "$average_freq"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Get CPU temperature
|
||||||
|
get_cpu_temperature() {
|
||||||
|
temp=$(sensors | awk '/Package id 0/ {print $4}' | awk -F '[+.]' '{print $2}')
|
||||||
|
if [[ -z "$temp" ]]; then
|
||||||
|
temp=$(sensors | awk '/Tctl/ {print $2}' | tr -d '+°C')
|
||||||
|
fi
|
||||||
|
if [[ -z "$temp" ]]; then
|
||||||
|
temp="N/A"
|
||||||
|
else
|
||||||
|
temp_f=$(awk "BEGIN {printf \"%.1f\", ($temp * 9 / 5) + 32}")
|
||||||
|
fi
|
||||||
|
echo "${temp:-N/A} ${temp_f:-N/A}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Get the corresponding icon based on temperature
|
||||||
|
get_temperature_icon() {
|
||||||
|
temp_value=$1
|
||||||
|
if [ "$temp_value" -ge 80 ]; then
|
||||||
|
icon="" # High temperature
|
||||||
|
elif [ "$temp_value" -ge 70 ]; then
|
||||||
|
icon="" # Medium temperature
|
||||||
|
elif [ "$temp_value" -ge 60 ]; then
|
||||||
|
icon="" # Normal temperature
|
||||||
|
else
|
||||||
|
icon="" # Low temperature
|
||||||
|
fi
|
||||||
|
echo "$icon"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Main script execution
|
||||||
|
cpu_frequency=$(get_cpu_frequency)
|
||||||
|
read -r temp_info < <(get_cpu_temperature)
|
||||||
|
temp=$(echo "$temp_info" | awk '{print $1}') # Celsius
|
||||||
|
temp_f=$(echo "$temp_info" | awk '{print $2}') # Fahrenheit
|
||||||
|
|
||||||
|
# Determine the temperature icon
|
||||||
|
thermo_icon=$(get_temperature_icon "$temp")
|
||||||
|
|
||||||
|
# Set color based on temperature
|
||||||
|
if [ "$temp" -ge 80 ]; then
|
||||||
|
# If temperature is >= 80%, set color to #f38ba8
|
||||||
|
text_output="<span color='#f38ba8'>${thermo_icon} ${temp}°C</span>"
|
||||||
|
else
|
||||||
|
# Default color
|
||||||
|
text_output="${thermo_icon} ${temp}°C"
|
||||||
|
fi
|
||||||
|
|
||||||
|
tooltip="${model}\n"
|
||||||
|
tooltip+="Clock Speed: ${cpu_frequency}\nTemperature: ${temp_f}°F"
|
||||||
|
|
||||||
|
# Module and tooltip
|
||||||
|
echo "{\"text\": \"$text_output\", \"tooltip\": \"$tooltip\"}"
|
33
waybar/scripts/cpu-usage.sh
Executable file
33
waybar/scripts/cpu-usage.sh
Executable file
@ -0,0 +1,33 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Get CPU model (removed "(R)", "(TM)", and clock speed)
|
||||||
|
model=$(awk -F ': ' '/model name/{print $2}' /proc/cpuinfo | head -n 1 | sed 's/@.*//; s/ *\((R)\|(TM)\)//g; s/^[ \t]*//; s/[ \t]*$//')
|
||||||
|
|
||||||
|
# Get CPU usage percentage
|
||||||
|
load=$(vmstat 1 2 | tail -1 | awk '{print 100 - $15}')
|
||||||
|
|
||||||
|
# Determine CPU state based on usage
|
||||||
|
if [ "$load" -ge 80 ]; then
|
||||||
|
state="Critical"
|
||||||
|
elif [ "$load" -ge 60 ]; then
|
||||||
|
state="High"
|
||||||
|
elif [ "$load" -ge 25 ]; then
|
||||||
|
state="Moderate"
|
||||||
|
else
|
||||||
|
state="Low"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Set color based on CPU load
|
||||||
|
if [ "$load" -ge 80 ]; then
|
||||||
|
# If CPU usage is >= 80%, set color to #f38ba8
|
||||||
|
text_output="<span color='#f38ba8'> ${load}%</span>"
|
||||||
|
else
|
||||||
|
# Default color
|
||||||
|
text_output=" ${load}%"
|
||||||
|
fi
|
||||||
|
|
||||||
|
tooltip="${model}"
|
||||||
|
tooltip+="\nCPU Usage: ${state}"
|
||||||
|
|
||||||
|
# Module and tooltip
|
||||||
|
echo "{\"text\": \"$text_output\", \"tooltip\": \"$tooltip\"}"
|
203
waybar/scripts/media-player.py
Executable file
203
waybar/scripts/media-player.py
Executable file
@ -0,0 +1,203 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import gi
|
||||||
|
gi.require_version("Playerctl", "2.0")
|
||||||
|
from gi.repository import Playerctl, GLib
|
||||||
|
from gi.repository.Playerctl import Player # type: ignore
|
||||||
|
import argparse
|
||||||
|
import logging
|
||||||
|
import sys
|
||||||
|
import signal
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
from typing import List
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
def signal_handler(sig, frame):
|
||||||
|
# Handle termination signals gracefully.
|
||||||
|
logger.info("Received signal to stop, exiting")
|
||||||
|
sys.stdout.write("\n")
|
||||||
|
sys.stdout.flush()
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
class PlayerManager:
|
||||||
|
def __init__(self, selected_player=None, excluded_players=[]):
|
||||||
|
self.manager = Playerctl.PlayerManager()
|
||||||
|
self.loop = GLib.MainLoop()
|
||||||
|
self.manager.connect("name-appeared", self.on_player_appeared)
|
||||||
|
self.manager.connect("player-vanished", self.on_player_vanished)
|
||||||
|
|
||||||
|
# Register signal handlers for termination
|
||||||
|
signal.signal(signal.SIGINT, signal_handler)
|
||||||
|
signal.signal(signal.SIGTERM, signal_handler)
|
||||||
|
signal.signal(signal.SIGPIPE, signal.SIG_DFL)
|
||||||
|
|
||||||
|
self.selected_player = selected_player
|
||||||
|
self.excluded_players = excluded_players.split(',') if excluded_players else []
|
||||||
|
|
||||||
|
self.init_players()
|
||||||
|
|
||||||
|
def init_players(self):
|
||||||
|
# Initialize players based on selection and exclusion criteria.
|
||||||
|
for player in self.manager.props.player_names:
|
||||||
|
if player.name not in self.excluded_players:
|
||||||
|
if self.selected_player is None or self.selected_player == player.name:
|
||||||
|
self.init_player(player)
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
# Start the GLib main loop.
|
||||||
|
logger.info("Starting main loop")
|
||||||
|
self.loop.run()
|
||||||
|
|
||||||
|
def init_player(self, player):
|
||||||
|
# Initialize a new media player.
|
||||||
|
logger.info(f"Initialize new player: {player.name}")
|
||||||
|
player_instance = Playerctl.Player.new_from_name(player)
|
||||||
|
player_instance.connect("playback-status", self.on_playback_status_changed)
|
||||||
|
player_instance.connect("metadata", self.on_metadata_changed)
|
||||||
|
self.manager.manage_player(player_instance)
|
||||||
|
self.on_metadata_changed(player_instance, player_instance.props.metadata)
|
||||||
|
|
||||||
|
def get_players(self) -> List[Player]:
|
||||||
|
# Retrieve the list of managed players.
|
||||||
|
return self.manager.props.players
|
||||||
|
|
||||||
|
def write_output(self, text, player):
|
||||||
|
# Format and send output for the player status.
|
||||||
|
logger.debug(f"Writing output: {text}")
|
||||||
|
|
||||||
|
# Determine the tooltip based on playback status
|
||||||
|
tooltip_status = f"<span color='#f38ba8'><b>Paused:</b> </span>" if player.props.status != "Playing" else ""
|
||||||
|
|
||||||
|
# Construct tooltip with track info
|
||||||
|
tooltip = f"{tooltip_status}{text}"
|
||||||
|
output = {
|
||||||
|
"text": text,
|
||||||
|
"class": "custom-" + player.props.player_name,
|
||||||
|
"alt": player.props.player_name,
|
||||||
|
"tooltip": tooltip
|
||||||
|
}
|
||||||
|
|
||||||
|
sys.stdout.write(json.dumps(output) + "\n")
|
||||||
|
sys.stdout.flush()
|
||||||
|
|
||||||
|
def clear_output(self):
|
||||||
|
# Clear the output.
|
||||||
|
sys.stdout.write("\n")
|
||||||
|
sys.stdout.flush()
|
||||||
|
|
||||||
|
def on_playback_status_changed(self, player, status, _=None):
|
||||||
|
# Handle changes in playback status.
|
||||||
|
logger.debug(f"Playback status changed for player {player.props.player_name}: {status}")
|
||||||
|
self.on_metadata_changed(player, player.props.metadata)
|
||||||
|
|
||||||
|
def get_first_playing_player(self):
|
||||||
|
# Return the first player that is currently playing.
|
||||||
|
players = self.get_players()
|
||||||
|
logger.debug(f"Getting first playing player from {len(players)} players")
|
||||||
|
|
||||||
|
for player in players[::-1]:
|
||||||
|
if player.props.status == "Playing":
|
||||||
|
return player
|
||||||
|
|
||||||
|
return players[0] if players else None
|
||||||
|
|
||||||
|
def show_most_important_player(self):
|
||||||
|
# Display the most relevant player information.
|
||||||
|
logger.debug("Showing most important player")
|
||||||
|
current_player = self.get_first_playing_player()
|
||||||
|
|
||||||
|
if current_player is not None:
|
||||||
|
self.on_metadata_changed(current_player, current_player.props.metadata)
|
||||||
|
else:
|
||||||
|
self.clear_output()
|
||||||
|
|
||||||
|
def on_metadata_changed(self, player, metadata, _=None):
|
||||||
|
logger.debug(f"Metadata changed for player {player.props.player_name}")
|
||||||
|
player_name = player.props.player_name
|
||||||
|
artist = player.get_artist()
|
||||||
|
title = player.get_title()
|
||||||
|
|
||||||
|
# Escape special characters in the title
|
||||||
|
title = title.replace("&", "&") if title else "Unknown Title"
|
||||||
|
|
||||||
|
track_info = None
|
||||||
|
if metadata:
|
||||||
|
try:
|
||||||
|
# Access track ID safely
|
||||||
|
track_id_variant = metadata.lookup_value("mpris:trackid", GLib.VariantType("s"))
|
||||||
|
track_id = track_id_variant.unpack() if track_id_variant else ""
|
||||||
|
if player_name == "spotify" and ":ad:" in track_id:
|
||||||
|
track_info = "Advertisement"
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Error accessing metadata for player {player_name}: {e}")
|
||||||
|
|
||||||
|
# Fallback to artist and title
|
||||||
|
if not track_info and artist and title:
|
||||||
|
track_info = f"<b>{title}</b> - {artist}"
|
||||||
|
elif not track_info:
|
||||||
|
track_info = title
|
||||||
|
|
||||||
|
if track_info:
|
||||||
|
prefix = (
|
||||||
|
f"<span color='#a6e3a1'> </span>" if player.props.status == "Playing" and player_name == "spotify" else
|
||||||
|
f"<span color='#f38ba8'> </span>" if player.props.status == "Playing" and player_name == "firefox" else
|
||||||
|
f"<span color='#b4befe'>\u200A \u2009\u2009\u200A</span>"
|
||||||
|
)
|
||||||
|
track_info = prefix + track_info
|
||||||
|
|
||||||
|
current_playing = self.get_first_playing_player()
|
||||||
|
if current_playing is None or current_playing.props.player_name == player.props.player_name:
|
||||||
|
self.write_output(track_info, player)
|
||||||
|
|
||||||
|
def on_player_appeared(self, _, player):
|
||||||
|
# Handle new player appearance.
|
||||||
|
logger.info(f"Player has appeared: {player.name}")
|
||||||
|
|
||||||
|
if player.name not in self.excluded_players:
|
||||||
|
if self.selected_player is None or player.name == self.selected_player:
|
||||||
|
self.init_player(player)
|
||||||
|
|
||||||
|
def on_player_vanished(self, _, player):
|
||||||
|
# Handle player disappearance.
|
||||||
|
logger.info(f"Player {player.props.player_name} has vanished")
|
||||||
|
self.show_most_important_player()
|
||||||
|
|
||||||
|
def parse_arguments():
|
||||||
|
# Parse command-line arguments.
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument("-v", "--verbose", action="count", default=0)
|
||||||
|
parser.add_argument("-x", "--exclude", help="Comma-separated list of excluded players")
|
||||||
|
parser.add_argument("--player", help="Specify player to listen to")
|
||||||
|
parser.add_argument("--enable-logging", action="store_true", help="Enable logging to a file")
|
||||||
|
return parser.parse_args()
|
||||||
|
|
||||||
|
def main():
|
||||||
|
# Main function to initialize and run the player manager.
|
||||||
|
arguments = parse_arguments()
|
||||||
|
|
||||||
|
# Initialize logging if enabled
|
||||||
|
if arguments.enable_logging:
|
||||||
|
logfile = os.path.join(os.path.dirname(os.path.realpath(__file__)), "media-player.log")
|
||||||
|
logging.basicConfig(
|
||||||
|
filename=logfile,
|
||||||
|
level=logging.DEBUG,
|
||||||
|
format="%(asctime)s %(name)s %(levelname)s:%(lineno)d %(message)s"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Set log level based on verbosity
|
||||||
|
logger.setLevel(max((3 - arguments.verbose) * 10, 0))
|
||||||
|
|
||||||
|
logger.info("Creating player manager")
|
||||||
|
|
||||||
|
if arguments.player:
|
||||||
|
logger.info(f"Filtering for player: {arguments.player}")
|
||||||
|
if arguments.exclude:
|
||||||
|
logger.info(f"Excluding players: {arguments.exclude}")
|
||||||
|
|
||||||
|
player_manager = PlayerManager(arguments.player, arguments.exclude)
|
||||||
|
player_manager.run()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
30
waybar/scripts/power-menu.sh
Executable file
30
waybar/scripts/power-menu.sh
Executable file
@ -0,0 +1,30 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
config="$HOME/.config/rofi/power-menu.rasi"
|
||||||
|
|
||||||
|
actions=$(echo -e " Lock\n Shutdown\n Reboot\n Suspend\n Hibernate\n Logout")
|
||||||
|
|
||||||
|
# Display logout menu
|
||||||
|
selected_option=$(echo -e "$actions" | rofi -dmenu -i -config "${config}" || pkill -x rofi)
|
||||||
|
|
||||||
|
# Perform actions based on the selected option
|
||||||
|
case "$selected_option" in
|
||||||
|
*Lock)
|
||||||
|
hyprlock
|
||||||
|
;;
|
||||||
|
*Shutdown)
|
||||||
|
systemctl poweroff
|
||||||
|
;;
|
||||||
|
*Reboot)
|
||||||
|
systemctl reboot
|
||||||
|
;;
|
||||||
|
*Suspend)
|
||||||
|
systemctl suspend
|
||||||
|
;;
|
||||||
|
*Hibernate)
|
||||||
|
systemctl hibernate
|
||||||
|
;;
|
||||||
|
*Logout)
|
||||||
|
hyprctl dispatch exit 0
|
||||||
|
;;
|
||||||
|
esac
|
86
waybar/scripts/system-update.sh
Executable file
86
waybar/scripts/system-update.sh
Executable file
@ -0,0 +1,86 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Check release
|
||||||
|
if [ ! -f /etc/arch-release ]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
pkg_installed() {
|
||||||
|
local pkg=$1
|
||||||
|
|
||||||
|
if pacman -Qi "${pkg}" &>/dev/null; then
|
||||||
|
return 0
|
||||||
|
elif pacman -Qi "flatpak" &>/dev/null && flatpak info "${pkg}" &>/dev/null; then
|
||||||
|
return 0
|
||||||
|
elif command -v "${pkg}" &>/dev/null; then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
get_aur_helper() {
|
||||||
|
if pkg_installed yay; then
|
||||||
|
aur_helper="yay"
|
||||||
|
elif pkg_installed paru; then
|
||||||
|
aur_helper="paru"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
get_aur_helper
|
||||||
|
export -f pkg_installed
|
||||||
|
|
||||||
|
# Trigger upgrade
|
||||||
|
if [ "$1" == "up" ]; then
|
||||||
|
trap 'pkill -RTMIN+20 waybar' EXIT
|
||||||
|
command="
|
||||||
|
$0 upgrade
|
||||||
|
${aur_helper} -Syu
|
||||||
|
if pkg_installed flatpak; then flatpak update; fi
|
||||||
|
printf '\n'
|
||||||
|
read -n 1 -p 'Press any key to continue...'
|
||||||
|
"
|
||||||
|
kitty --title " System Update" sh -c "${command}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check for AUR updates
|
||||||
|
if [ -n "$aur_helper" ]; then
|
||||||
|
aur_updates=$(${aur_helper} -Qua | grep -c '^')
|
||||||
|
else
|
||||||
|
aur_updates=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check for official repository updates
|
||||||
|
official_updates=$(
|
||||||
|
(while pgrep -x checkupdates >/dev/null; do sleep 1; done)
|
||||||
|
checkupdates | grep -c '^'
|
||||||
|
)
|
||||||
|
|
||||||
|
# Check for Flatpak updates
|
||||||
|
if pkg_installed flatpak; then
|
||||||
|
flatpak_updates=$(flatpak remote-ls --updates | grep -c '^')
|
||||||
|
else
|
||||||
|
flatpak_updates=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Calculate total available updates
|
||||||
|
total_updates=$((official_updates + aur_updates + flatpak_updates))
|
||||||
|
|
||||||
|
# Handle formatting based on AUR helper
|
||||||
|
if [ "$aur_helper" == "yay" ]; then
|
||||||
|
[ "${1}" == upgrade ] && printf "Official: %-10s\nAUR ($aur_helper): %-10s\nFlatpak: %-10s\n\n" "$official_updates" "$aur_updates" "$flatpak_updates" && exit
|
||||||
|
|
||||||
|
tooltip="Official: $official_updates\nAUR ($aur_helper): $aur_updates\nFlatpak: $flatpak_updates"
|
||||||
|
|
||||||
|
elif [ "$aur_helper" == "paru" ]; then
|
||||||
|
[ "${1}" == upgrade ] && printf "Official: %-10s\nAUR ($aur_helper): %-10s\nFlatpak: %-10s\n\n" "$official_updates" "$aur_updates" "$flatpak_updates" && exit
|
||||||
|
|
||||||
|
tooltip="Official: $official_updates\nAUR ($aur_helper): $aur_updates\nFlatpak: $flatpak_updates"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Module and tooltip
|
||||||
|
if [ $total_updates -eq 0 ]; then
|
||||||
|
echo "{\"text\":\"\", \"tooltip\":\"Packages are up to date\"}"
|
||||||
|
else
|
||||||
|
echo "{\"text\":\"\", \"tooltip\":\"${tooltip//\"/\\\"}\"}"
|
||||||
|
fi
|
111
waybar/scripts/volume-control.sh
Executable file
111
waybar/scripts/volume-control.sh
Executable file
@ -0,0 +1,111 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Define functions
|
||||||
|
print_error() {
|
||||||
|
cat <<"EOF"
|
||||||
|
Usage: ./volumecontrol.sh -[device] <actions>
|
||||||
|
...valid devices are...
|
||||||
|
i -- input device
|
||||||
|
o -- output device
|
||||||
|
p -- player application
|
||||||
|
...valid actions are...
|
||||||
|
i -- increase volume [+2]
|
||||||
|
d -- decrease volume [-2]
|
||||||
|
m -- mute [x]
|
||||||
|
EOF
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
send_notification() {
|
||||||
|
vol=$(pactl get-sink-volume @DEFAULT_SINK@ | awk '{print $5}' | sed 's/%//')
|
||||||
|
notify-send -r 91190 "Volume: ${vol}%"
|
||||||
|
}
|
||||||
|
|
||||||
|
notify_mute() {
|
||||||
|
mute=$(pactl get-sink-mute @DEFAULT_SINK@ | awk '{print $2}')
|
||||||
|
if [ "${mute}" = "yes" ]; then
|
||||||
|
notify-send -r 91190 "Muted"
|
||||||
|
else
|
||||||
|
notify-send -r 91190 "Unmuted"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
action_volume() {
|
||||||
|
case "${1}" in
|
||||||
|
i)
|
||||||
|
# Check current volume and increase only if below 100
|
||||||
|
current_vol=$(pactl get-sink-volume @DEFAULT_SINK@ | awk '{print $5}' | sed 's/%//')
|
||||||
|
if [ "$current_vol" -lt 100 ]; then
|
||||||
|
new_vol=$((current_vol + 2))
|
||||||
|
if [ "$new_vol" -gt 100 ]; then
|
||||||
|
new_vol=100
|
||||||
|
fi
|
||||||
|
pactl set-sink-volume @DEFAULT_SINK@ "${new_vol}%"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
d)
|
||||||
|
# Decrease volume, ensuring it doesn't drop below 0%
|
||||||
|
current_vol=$(pactl get-sink-volume @DEFAULT_SINK@ | awk '{print $5}' | sed 's/%//')
|
||||||
|
new_vol=$((current_vol - 2))
|
||||||
|
if [ "$new_vol" -lt 0 ]; then
|
||||||
|
new_vol=0
|
||||||
|
fi
|
||||||
|
pactl set-sink-volume @DEFAULT_SINK@ "${new_vol}%"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
select_output() {
|
||||||
|
if [ "$@" ]; then
|
||||||
|
desc="$*"
|
||||||
|
device=$(pactl list sinks | grep -C2 -F "Description: $desc" | grep Name | cut -d: -f2 | xargs)
|
||||||
|
if pactl set-default-sink "$device"; then
|
||||||
|
notify-send -r 91190 "Activated: $desc"
|
||||||
|
else
|
||||||
|
notify-send -r 91190 "Error activating $desc"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
pactl list sinks | grep -ie "Description:" | awk -F ': ' '{print $2}' | sort
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Evaluate device option
|
||||||
|
while getopts iops: DeviceOpt; do
|
||||||
|
case "${DeviceOpt}" in
|
||||||
|
i)
|
||||||
|
nsink=$(pactl list sources short | awk '{print $2}')
|
||||||
|
[ -z "${nsink}" ] && echo "ERROR: Input device not found..." && exit 0
|
||||||
|
srce="--default-source"
|
||||||
|
;;
|
||||||
|
o)
|
||||||
|
nsink=$(pactl list sinks short | awk '{print $2}')
|
||||||
|
[ -z "${nsink}" ] && echo "ERROR: Output device not found..." && exit 0
|
||||||
|
srce=""
|
||||||
|
;;
|
||||||
|
p)
|
||||||
|
nsink=$(playerctl --list-all | grep -w "${OPTARG}")
|
||||||
|
[ -z "${nsink}" ] && echo "ERROR: Player ${OPTARG} not active..." && exit 0
|
||||||
|
# shellcheck disable=SC2034
|
||||||
|
srce="${nsink}"
|
||||||
|
;;
|
||||||
|
s)
|
||||||
|
# Select an output device
|
||||||
|
select_output "$@"
|
||||||
|
exit
|
||||||
|
;;
|
||||||
|
*) print_error ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Set default variables
|
||||||
|
shift $((OPTIND - 1))
|
||||||
|
|
||||||
|
# Execute action
|
||||||
|
case "${1}" in
|
||||||
|
i) action_volume i ;;
|
||||||
|
d) action_volume d ;;
|
||||||
|
m) pactl set-sink-mute @DEFAULT_SINK@ toggle && notify_mute && exit 0 ;;
|
||||||
|
*) print_error ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
send_notification
|
126
waybar/scripts/wifi-menu.sh
Executable file
126
waybar/scripts/wifi-menu.sh
Executable file
@ -0,0 +1,126 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Author: Jesse Mirabel (@sejjy)
|
||||||
|
# GitHub: https://github.com/sejjy/mechabar
|
||||||
|
|
||||||
|
# Rofi config
|
||||||
|
config="$HOME/.config/rofi/wifi-menu.rasi"
|
||||||
|
|
||||||
|
options=$(
|
||||||
|
echo "Manual Entry"
|
||||||
|
echo "Disable Wi-Fi"
|
||||||
|
)
|
||||||
|
option_disabled="Enable Wi-Fi"
|
||||||
|
|
||||||
|
# Rofi window override
|
||||||
|
override_ssid="entry { placeholder: \"Enter SSID\"; } listview { enabled: false; }"
|
||||||
|
override_password="entry { placeholder: \"Enter password\"; } listview { enabled: false; }"
|
||||||
|
override_disabled="mainbox { children: [ listview ]; } listview { lines: 1; padding: 6px; }"
|
||||||
|
|
||||||
|
# Prompt for password
|
||||||
|
get_password() {
|
||||||
|
rofi -dmenu -password -config "${config}" -theme-str "${override_password}" -p " " || pkill -x rofi
|
||||||
|
}
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
wifi_list() {
|
||||||
|
nmcli --fields "SECURITY,SSID" device wifi list |
|
||||||
|
tail -n +2 | # Skip the header line from nmcli output
|
||||||
|
sed 's/ */ /g' | # Replace multiple spaces with a single space
|
||||||
|
sed -E "s/WPA*.?\S/ /g" | # Replace 'WPA*' with a Wi-Fi lock icon
|
||||||
|
sed "s/^--/ /g" | # Replace '--' (open networks) with an open Wi-Fi icon
|
||||||
|
sed "s/ //g" | # Remove duplicate Wi-Fi lock icons
|
||||||
|
sed "/--/d" | # Remove lines containing '--' (empty SSIDs)
|
||||||
|
awk '!seen[$0]++' # Filter out duplicate SSIDs
|
||||||
|
}
|
||||||
|
|
||||||
|
# Get Wi-Fi status
|
||||||
|
wifi_status=$(nmcli -fields WIFI g)
|
||||||
|
|
||||||
|
case "$wifi_status" in
|
||||||
|
*"enabled"*)
|
||||||
|
selected_option=$(echo "$options"$'\n'"$(wifi_list)" |
|
||||||
|
rofi -dmenu -i -selected-row 1 -config "${config}" -p " " || pkill -x rofi)
|
||||||
|
;;
|
||||||
|
*"disabled"*)
|
||||||
|
selected_option=$(echo "$option_disabled" |
|
||||||
|
rofi -dmenu -i -config "${config}" -theme-str "${override_disabled}" || pkill -x rofi)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Extract selected SSID
|
||||||
|
read -r selected_ssid <<<"${selected_option:3}"
|
||||||
|
|
||||||
|
# Actions based on selected option
|
||||||
|
case "$selected_option" in
|
||||||
|
"")
|
||||||
|
exit
|
||||||
|
;;
|
||||||
|
"Enable Wi-Fi")
|
||||||
|
notify-send "Scanning for networks..."
|
||||||
|
nmcli radio wifi on
|
||||||
|
nmcli device wifi rescan
|
||||||
|
sleep 3
|
||||||
|
;;
|
||||||
|
"Disable Wi-Fi")
|
||||||
|
notify-send "Wi-Fi Disabled"
|
||||||
|
nmcli radio wifi off
|
||||||
|
exit
|
||||||
|
;;
|
||||||
|
"Manual Entry")
|
||||||
|
# Prompt for SSID
|
||||||
|
manual_ssid=$(rofi -dmenu -config "${config}" -theme-str "${override_ssid}" -p " " || pkill -x rofi)
|
||||||
|
|
||||||
|
# Exit if no option is selected
|
||||||
|
if [ -z "$manual_ssid" ]; then
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Prompt for Wi-Fi password
|
||||||
|
wifi_password=$(get_password)
|
||||||
|
|
||||||
|
if [ -z "$wifi_password" ]; then
|
||||||
|
# Without password
|
||||||
|
if nmcli device wifi connect "$manual_ssid" | grep -q "successfully"; then
|
||||||
|
notify-send "Connected to \"$manual_ssid\"."
|
||||||
|
exit
|
||||||
|
else
|
||||||
|
notify-send "Failed to connect to \"$manual_ssid\"."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# With password
|
||||||
|
if nmcli device wifi connect "$manual_ssid" password "$wifi_password" | grep -q "successfully"; then
|
||||||
|
notify-send "Connected to \"$manual_ssid\"."
|
||||||
|
exit
|
||||||
|
else
|
||||||
|
notify-send "Failed to connect to \"$manual_ssid\"."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# Get saved connections
|
||||||
|
saved_connections=$(nmcli -g NAME connection)
|
||||||
|
|
||||||
|
if echo "$saved_connections" | grep -qw "$selected_ssid"; then
|
||||||
|
if nmcli connection up id "$selected_ssid" | grep -q "successfully"; then
|
||||||
|
notify-send "Connected to \"$selected_ssid\"."
|
||||||
|
exit
|
||||||
|
else
|
||||||
|
notify-send "Failed to connect to \"$selected_ssid\"."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# Handle secure network connection
|
||||||
|
if [[ "$selected_option" =~ ^"" ]]; then
|
||||||
|
wifi_password=$(get_password)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if nmcli device wifi connect "$selected_ssid" password "$wifi_password" | grep -q "successfully"; then
|
||||||
|
notify-send "Connected to \"$selected_ssid\"."
|
||||||
|
exit
|
||||||
|
else
|
||||||
|
notify-send "Failed to connect to \"$selected_ssid\"."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
176
waybar/scripts/wifi-status.sh
Executable file
176
waybar/scripts/wifi-status.sh
Executable file
@ -0,0 +1,176 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# This script gathers detailed Wi-Fi connection information.
|
||||||
|
# It collects the following fields:
|
||||||
|
#
|
||||||
|
# - SSID (Service Set Identifier): The name of the Wi-Fi network you
|
||||||
|
# are currently connected to. Example: "My_Network"
|
||||||
|
#
|
||||||
|
# - IP Address: The IP address assigned to the device by the router.
|
||||||
|
# This is typically a private IP within the local network. Example:
|
||||||
|
# "192.168.1.29/24" (with subnet mask)
|
||||||
|
#
|
||||||
|
# - Router (Gateway): The IP address of the router (default gateway)
|
||||||
|
# that your device uses to communicate outside the local network.
|
||||||
|
# Example: "192.168.1.1"
|
||||||
|
#
|
||||||
|
# - MAC Address: The unique Media Access Control address of the local
|
||||||
|
# device's Wi-Fi adapter. Example: "F8:34:41:07:1B:65"
|
||||||
|
#
|
||||||
|
# - Security: The encryption protocol being used to secure your Wi-Fi
|
||||||
|
# connection. Common security protocols include:
|
||||||
|
# - WPA2 (Wi-Fi Protected Access 2): The most commonly used security
|
||||||
|
# standard, offering strong encryption (AES).
|
||||||
|
# - WPA3: The latest version, providing even stronger security,
|
||||||
|
# especially in public or open networks.
|
||||||
|
# - WEP (Wired Equivalent Privacy): An outdated and insecure protocol
|
||||||
|
# that should not be used.
|
||||||
|
# Example: "WPA2" indicates that the connection is secured using WPA2
|
||||||
|
# with AES encryption.
|
||||||
|
#
|
||||||
|
# - BSSID (Basic Service Set Identifier): The MAC address of the Wi-Fi
|
||||||
|
# access point you are connected to. Example: "A4:22:49:DA:91:A0"
|
||||||
|
#
|
||||||
|
# - Channel: The wireless channel your Wi-Fi network is using. This is
|
||||||
|
# associated with the frequency band. Example: "100 (5500 MHz)"
|
||||||
|
# indicates the channel number (100) and the frequency (5500 MHz),
|
||||||
|
# which is within the 5 GHz band.
|
||||||
|
#
|
||||||
|
# - RSSI (Received Signal Strength Indicator): The strength of the
|
||||||
|
# Wi-Fi signal, typically in dBm (decibels relative to 1 milliwatt).
|
||||||
|
# Closer to 0 means stronger signal, with values like -40 dBm being
|
||||||
|
# very good. Example: "-40 dBm"
|
||||||
|
#
|
||||||
|
# - Signal: The signal quality, which is represented as a percentage,
|
||||||
|
# where higher numbers mean better signal. Example: "100"
|
||||||
|
# indicates perfect signal strength.
|
||||||
|
#
|
||||||
|
# - Rx Rate (Receive Rate): The maximum data rate (in Mbit/s) at which
|
||||||
|
# the device can receive data from the Wi-Fi access point. Example:
|
||||||
|
# "866.7 MBit/s" indicates a high-speed connection on a modern
|
||||||
|
# standard.
|
||||||
|
#
|
||||||
|
# - Tx Rate (Transmit Rate): The maximum data rate (in Mbit/s) at
|
||||||
|
# which the device can send data to the Wi-Fi access point. Example:
|
||||||
|
# "866.7 MBit/s"
|
||||||
|
#
|
||||||
|
# - PHY Mode (Physical Layer Mode): The Wi-Fi protocol or standard in
|
||||||
|
# use. Common modes include 802.11n, 802.11ac, and 802.11ax (Wi-Fi
|
||||||
|
# 6). Example: "802.11ac" indicates you're using the 5 GHz band with
|
||||||
|
# a modern high-speed standard.
|
||||||
|
|
||||||
|
if ! command -v nmcli &>/dev/null; then
|
||||||
|
echo "{\"text\": \"\", \"tooltip\": \"nmcli utility is missing\"}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if Wi-Fi is enabled
|
||||||
|
wifi_status=$(nmcli radio wifi)
|
||||||
|
|
||||||
|
if [ "$wifi_status" = "disabled" ]; then
|
||||||
|
echo "{\"text\": \"\", \"tooltip\": \"Wi-Fi Disabled\"}"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
wifi_info=$(nmcli -t -f active,ssid,signal,security dev wifi | grep "^yes")
|
||||||
|
|
||||||
|
# If no ESSID is found, set a default value
|
||||||
|
if [ -z "$wifi_info" ]; then
|
||||||
|
essid="No Connection"
|
||||||
|
signal=0
|
||||||
|
tooltip="No Connection"
|
||||||
|
else
|
||||||
|
# Some defaults
|
||||||
|
ip_address="127.0.0.1"
|
||||||
|
# gateway="127.0.0.1"
|
||||||
|
# mac_address="N/A"
|
||||||
|
security=$(echo "$wifi_info" | awk -F: '{print $4}')
|
||||||
|
# bssid="N/A"
|
||||||
|
chan="N/A"
|
||||||
|
# rssi="N/A"
|
||||||
|
# rx_bitrate=""
|
||||||
|
# tx_bitrate=""
|
||||||
|
# phy_mode=""
|
||||||
|
signal=$(echo "$wifi_info" | awk -F: '{print $3}')
|
||||||
|
|
||||||
|
active_device=$(nmcli -t -f DEVICE,STATE device status |
|
||||||
|
grep -w "connected" |
|
||||||
|
grep -v -E "^(dummy|lo:)" |
|
||||||
|
awk -F: '{print $1}')
|
||||||
|
|
||||||
|
if [ -n "$active_device" ]; then
|
||||||
|
output=$(nmcli -e no -g ip4.address,ip4.gateway,general.hwaddr device show "$active_device")
|
||||||
|
|
||||||
|
ip_address=$(echo "$output" | sed -n '1p')
|
||||||
|
# gateway=$(echo "$output" | sed -n '2p')
|
||||||
|
# mac_address=$(echo "$output" | sed -n '3p')
|
||||||
|
|
||||||
|
line=$(nmcli -e no -t -f active,bssid,chan,freq device wifi | grep "^yes")
|
||||||
|
|
||||||
|
# bssid=$(echo "$line" | awk -F':' '{print $2":"$3":"$4":"$5":"$6":"$7}')
|
||||||
|
chan=$(echo "$line" | awk -F':' '{print $8}')
|
||||||
|
freq=$(echo "$line" | awk -F':' '{print $9}')
|
||||||
|
chan="$chan ($freq)"
|
||||||
|
|
||||||
|
# if command -v iw &>/dev/null; then
|
||||||
|
# iw_output=$(iw dev "$active_device" station dump)
|
||||||
|
# rssi=$(echo "$iw_output" | grep "signal:" | awk '{print $2 " dBm"}')
|
||||||
|
|
||||||
|
# Upload speed
|
||||||
|
# rx_bitrate=$(echo "$iw_output" | grep "rx bitrate:" | awk '{print $3 " " $4}')
|
||||||
|
|
||||||
|
# Download speed
|
||||||
|
# tx_bitrate=$(echo "$iw_output" | grep "tx bitrate:" | awk '{print $3 " " $4}')
|
||||||
|
|
||||||
|
# Physical Layer Mode
|
||||||
|
# if echo "$iw_output" | grep -E -q "rx bitrate:.* VHT"; then
|
||||||
|
# phy_mode="802.11ac" # Wi-Fi 5
|
||||||
|
# elif echo "$iw_output" | grep -E -q "rx bitrate:.* HT"; then
|
||||||
|
# phy_mode="802.11n" # Wi-Fi 4
|
||||||
|
# elif echo "$iw_output" | grep -E -q "rx bitrate:.* HE"; then
|
||||||
|
# phy_mode="802.11ax" # Wi-Fi 6
|
||||||
|
# fi
|
||||||
|
# fi
|
||||||
|
|
||||||
|
# Get the current Wi-Fi ESSID
|
||||||
|
essid=$(echo "$wifi_info" | awk -F: '{print $2}')
|
||||||
|
|
||||||
|
tooltip="${essid}\n"
|
||||||
|
tooltip+="\nIP Address: ${ip_address}"
|
||||||
|
# tooltip+="\nRouter: ${gateway}"
|
||||||
|
# tooltip+="\nMAC Address: ${mac_address}"
|
||||||
|
tooltip+="\nSecurity: ${security}"
|
||||||
|
# tooltip+="\nBSSID: ${bssid}"
|
||||||
|
tooltip+="\nChannel: ${chan}"
|
||||||
|
# tooltip+="\nRSSI: ${rssi}"
|
||||||
|
tooltip+="\nStrength: ${signal} / 100"
|
||||||
|
|
||||||
|
# if [ -n "$rx_bitrate" ]; then
|
||||||
|
# tooltip+="\nRx Rate: ${rx_bitrate}"
|
||||||
|
# fi
|
||||||
|
|
||||||
|
# if [ -n "$tx_bitrate" ]; then
|
||||||
|
# tooltip+="\nTx Rate: ${tx_bitrate}"
|
||||||
|
# fi
|
||||||
|
|
||||||
|
# if [ -n "$phy_mode" ]; then
|
||||||
|
# tooltip+="\nPHY Mode: ${phy_mode}"
|
||||||
|
# fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Determine Wi-Fi icon based on signal strength
|
||||||
|
if [ "$signal" -ge 80 ]; then
|
||||||
|
icon="" # Strong signal
|
||||||
|
elif [ "$signal" -ge 60 ]; then
|
||||||
|
icon="" # Good signal
|
||||||
|
elif [ "$signal" -ge 40 ]; then
|
||||||
|
icon="" # Weak signal
|
||||||
|
elif [ "$signal" -ge 20 ]; then
|
||||||
|
icon="" # Very weak signal
|
||||||
|
else
|
||||||
|
icon="" # No signal
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Module and tooltip
|
||||||
|
echo "{\"text\": \"${icon}\", \"tooltip\": \"${tooltip}\"}"
|
383
waybar/style.css
Normal file
383
waybar/style.css
Normal file
@ -0,0 +1,383 @@
|
|||||||
|
* {
|
||||||
|
font-family: "JetBrainsMono Nerd Font";
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 16px;
|
||||||
|
min-height: 0;
|
||||||
|
padding: 0;
|
||||||
|
border: none;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@import "theme.css";
|
||||||
|
|
||||||
|
/* === Main Background === */
|
||||||
|
|
||||||
|
window#waybar {
|
||||||
|
background: @main-bg;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === Drop Shadow === */
|
||||||
|
|
||||||
|
window#waybar > box {
|
||||||
|
background-color: transparent;
|
||||||
|
box-shadow: 0 0 2px 1px rgba(0, 0, 0, 1);
|
||||||
|
margin: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === Tooltip === */
|
||||||
|
|
||||||
|
tooltip {
|
||||||
|
background: @main-bg;
|
||||||
|
border: solid;
|
||||||
|
border-width: 1.5px;
|
||||||
|
border-radius: 8px;
|
||||||
|
border-color: @main-br;
|
||||||
|
}
|
||||||
|
tooltip label {
|
||||||
|
color: @main-fg;
|
||||||
|
font-weight: normal;
|
||||||
|
margin: -1.5px 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === Workspace Buttons === */
|
||||||
|
|
||||||
|
#workspaces button {
|
||||||
|
color: @module-fg;
|
||||||
|
border-radius: 8px;
|
||||||
|
box-shadow: none;
|
||||||
|
margin: 2px 0;
|
||||||
|
padding: 0 2px;
|
||||||
|
transition: none;
|
||||||
|
}
|
||||||
|
#workspaces button:hover {
|
||||||
|
color: @hover-fg;
|
||||||
|
background: @hover-bg;
|
||||||
|
text-shadow: none;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
#workspaces button.active {
|
||||||
|
color: @active-fg;
|
||||||
|
background: @active-bg;
|
||||||
|
text-shadow: 0 0 2px rgba(0, 0, 0, 0.6);
|
||||||
|
box-shadow: 0 0 2px 1px rgba(0, 0, 0, 0.4);
|
||||||
|
margin: 2px;
|
||||||
|
padding: 0 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === General === */
|
||||||
|
|
||||||
|
#custom-ws,
|
||||||
|
#workspaces,
|
||||||
|
#window,
|
||||||
|
#custom-cpuinfo,
|
||||||
|
#memory,
|
||||||
|
#cpu,
|
||||||
|
#idle_inhibitor,
|
||||||
|
#clock,
|
||||||
|
#custom-wifi,
|
||||||
|
#bluetooth,
|
||||||
|
#custom-update,
|
||||||
|
#custom-media,
|
||||||
|
#pulseaudio,
|
||||||
|
#backlight,
|
||||||
|
#battery,
|
||||||
|
#custom-power {
|
||||||
|
opacity: 1;
|
||||||
|
color: @module-fg;
|
||||||
|
padding: 0 4px;
|
||||||
|
text-shadow: 0 0 2px rgba(0, 0, 0, 0.6);
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-left1,
|
||||||
|
#custom-left2,
|
||||||
|
#custom-left3,
|
||||||
|
#custom-left4,
|
||||||
|
#custom-left5,
|
||||||
|
#custom-left6,
|
||||||
|
#custom-left7,
|
||||||
|
#custom-left8 {
|
||||||
|
font-size: 22.68px;
|
||||||
|
margin-bottom: 0;
|
||||||
|
text-shadow: -2px 0 2px rgba(0, 0, 0, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-right1,
|
||||||
|
#custom-right2,
|
||||||
|
#custom-right3,
|
||||||
|
#custom-right4,
|
||||||
|
#custom-right5 {
|
||||||
|
font-size: 22.68px;
|
||||||
|
margin-bottom: 0;
|
||||||
|
padding-right: 3px;
|
||||||
|
text-shadow: 2px 0 2px rgba(0, 0, 0, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === Modules === */
|
||||||
|
|
||||||
|
/* == Window Icon == */
|
||||||
|
|
||||||
|
#custom-ws {
|
||||||
|
background: @main-bg;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* == Workspaces == */
|
||||||
|
|
||||||
|
#custom-left1 {
|
||||||
|
color: @workspaces;
|
||||||
|
background: @main-bg;
|
||||||
|
font-size: 22.68px;
|
||||||
|
margin-bottom: 0;
|
||||||
|
padding-left: 2px;
|
||||||
|
}
|
||||||
|
#workspaces {
|
||||||
|
background: @workspaces;
|
||||||
|
}
|
||||||
|
#custom-right1 {
|
||||||
|
color: @workspaces;
|
||||||
|
background: @main-bg;
|
||||||
|
font-size: 22.68px;
|
||||||
|
text-shadow: 3px 0 2px rgba(0, 0, 0, 0.4);
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* == Temperature == */
|
||||||
|
|
||||||
|
#custom-paddc {
|
||||||
|
padding-right: 22px;
|
||||||
|
}
|
||||||
|
#custom-left2 {
|
||||||
|
color: @cpuinfo;
|
||||||
|
background: @main-bg;
|
||||||
|
padding-left: 3px;
|
||||||
|
}
|
||||||
|
#custom-cpuinfo {
|
||||||
|
background: @cpuinfo;
|
||||||
|
padding-left: 1px;
|
||||||
|
padding-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* == Memory == */
|
||||||
|
|
||||||
|
#custom-left3 {
|
||||||
|
color: @memory;
|
||||||
|
background: @cpuinfo;
|
||||||
|
padding-left: 3px;
|
||||||
|
}
|
||||||
|
#memory {
|
||||||
|
background: @memory;
|
||||||
|
padding-left: 1px;
|
||||||
|
padding-right: 0;
|
||||||
|
}
|
||||||
|
#memory.warning {
|
||||||
|
color: @warning;
|
||||||
|
}
|
||||||
|
#memory.critical {
|
||||||
|
color: @critical;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* == CPU == */
|
||||||
|
|
||||||
|
#custom-left4 {
|
||||||
|
color: @cpu;
|
||||||
|
background: @memory;
|
||||||
|
padding-left: 3px;
|
||||||
|
}
|
||||||
|
#cpu {
|
||||||
|
background: @cpu;
|
||||||
|
}
|
||||||
|
#custom-leftin1 {
|
||||||
|
color: @cpu;
|
||||||
|
font-size: 23.5px;
|
||||||
|
margin-bottom: -1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* == Distro Icon == */
|
||||||
|
|
||||||
|
#custom-left5 {
|
||||||
|
color: @distro-bg;
|
||||||
|
background: @main-bg;
|
||||||
|
font-size: 22.68px;
|
||||||
|
text-shadow: -2px 0 2px rgba(0, 0, 0, 0.6);
|
||||||
|
margin-bottom: 0px;
|
||||||
|
padding-left: 3px;
|
||||||
|
}
|
||||||
|
#custom-distro {
|
||||||
|
color: @distro-fg;
|
||||||
|
background: @distro-bg;
|
||||||
|
font-size: 14.6px;
|
||||||
|
margin: 0 -1px -2px 0;
|
||||||
|
padding: 0 0 0 3px;
|
||||||
|
text-shadow: 0 0 1.5px rgba(0, 0, 0, 1);
|
||||||
|
}
|
||||||
|
#custom-right2 {
|
||||||
|
color: @distro-bg;
|
||||||
|
background: @main-bg;
|
||||||
|
font-size: 22.68px;
|
||||||
|
margin-bottom: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* == Time == */
|
||||||
|
|
||||||
|
#custom-rightin1 {
|
||||||
|
color: @time;
|
||||||
|
font-size: 23.5px;
|
||||||
|
margin-bottom: -1px;
|
||||||
|
}
|
||||||
|
#idle_inhibitor {
|
||||||
|
background: @time;
|
||||||
|
margin-right: -2px;
|
||||||
|
padding: 0 0 0 7px;
|
||||||
|
}
|
||||||
|
#idle_inhibitor:hover {
|
||||||
|
color: @hover-fg;
|
||||||
|
text-shadow: none;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
#clock.time {
|
||||||
|
background: @time;
|
||||||
|
padding: 0 3px 0 0;
|
||||||
|
}
|
||||||
|
#custom-right3 {
|
||||||
|
color: @time;
|
||||||
|
background: @date;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* == Date == */
|
||||||
|
|
||||||
|
#clock.date {
|
||||||
|
background: @date;
|
||||||
|
}
|
||||||
|
#clock.date:hover {
|
||||||
|
color: @hover-fg;
|
||||||
|
text-shadow: none;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
#custom-right4 {
|
||||||
|
color: @date;
|
||||||
|
background: @tray;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* == Tray == */
|
||||||
|
|
||||||
|
#custom-wifi {
|
||||||
|
padding-left: 5px;
|
||||||
|
padding-right: 8px;
|
||||||
|
background: @tray;
|
||||||
|
}
|
||||||
|
#custom-wifi:hover {
|
||||||
|
color: @hover-fg;
|
||||||
|
text-shadow: none;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bluetooth {
|
||||||
|
padding-right: 5px;
|
||||||
|
background: @tray;
|
||||||
|
}
|
||||||
|
#bluetooth:hover {
|
||||||
|
color: @hover-fg;
|
||||||
|
text-shadow: none;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-update {
|
||||||
|
padding-right: 8px;
|
||||||
|
background: @tray;
|
||||||
|
}
|
||||||
|
#custom-update:hover {
|
||||||
|
color: @hover-fg;
|
||||||
|
text-shadow: none;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
#custom-right5 {
|
||||||
|
color: @tray;
|
||||||
|
background: @main-bg;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* == Media Info == */
|
||||||
|
|
||||||
|
#custom-media {
|
||||||
|
font-weight: normal;
|
||||||
|
background-color: @main-bg;
|
||||||
|
padding-right: 8px;
|
||||||
|
padding-left: 8px;
|
||||||
|
}
|
||||||
|
#custom-media:hover {
|
||||||
|
color: @hover-fg;
|
||||||
|
text-shadow: none;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* == Output Device == */
|
||||||
|
|
||||||
|
#custom-left6 {
|
||||||
|
color: @pulseaudio;
|
||||||
|
background: @main-bg;
|
||||||
|
padding-left: 3px;
|
||||||
|
}
|
||||||
|
#pulseaudio {
|
||||||
|
background: @pulseaudio;
|
||||||
|
}
|
||||||
|
#pulseaudio:hover {
|
||||||
|
color: @hover-fg;
|
||||||
|
text-shadow: none;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* == Brightness == */
|
||||||
|
|
||||||
|
#custom-left7 {
|
||||||
|
color: @backlight;
|
||||||
|
background: @pulseaudio;
|
||||||
|
padding-left: 2px;
|
||||||
|
}
|
||||||
|
#backlight {
|
||||||
|
background: @backlight;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* == Battery == */
|
||||||
|
|
||||||
|
#custom-left8 {
|
||||||
|
color: @battery;
|
||||||
|
background: @backlight;
|
||||||
|
padding-left: 2px;
|
||||||
|
}
|
||||||
|
#battery {
|
||||||
|
color: @module-fg;
|
||||||
|
background: @battery;
|
||||||
|
}
|
||||||
|
#battery.warning {
|
||||||
|
color: @warning;
|
||||||
|
}
|
||||||
|
#battery.critical {
|
||||||
|
color: @critical;
|
||||||
|
}
|
||||||
|
#battery.charging {
|
||||||
|
color: @charging;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* == Power Button == */
|
||||||
|
|
||||||
|
#custom-leftin2 {
|
||||||
|
color: @battery;
|
||||||
|
background: @main-bg;
|
||||||
|
font-size: 23.5px;
|
||||||
|
margin-bottom: -1px;
|
||||||
|
}
|
||||||
|
#custom-power {
|
||||||
|
color: @main-bg;
|
||||||
|
background: @power;
|
||||||
|
text-shadow: 0 0 2px rgba(0, 0, 0, 0.6);
|
||||||
|
box-shadow: 1px 0 2px 1px rgba(0, 0, 0, 0.6);
|
||||||
|
border-radius: 10px;
|
||||||
|
margin: 2px 4px 2px 0;
|
||||||
|
padding: 0 6px 0 9px;
|
||||||
|
}
|
||||||
|
#custom-power:hover {
|
||||||
|
color: @hover-fg;
|
||||||
|
background: @hover-bg;
|
||||||
|
text-shadow: none;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
@import "animation.css";
|
45
waybar/theme.css
Normal file
45
waybar/theme.css
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
/*
|
||||||
|
bg - background
|
||||||
|
fg - foreground
|
||||||
|
br - border
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Main Colors */
|
||||||
|
|
||||||
|
@define-color main-fg #c7a4de;
|
||||||
|
@define-color main-bg #11111b;
|
||||||
|
@define-color main-br #cdd6f4;
|
||||||
|
|
||||||
|
@define-color active-bg #885ab0;
|
||||||
|
@define-color active-fg #11111b;
|
||||||
|
|
||||||
|
@define-color hover-bg #372542;
|
||||||
|
@define-color hover-fg rgba(219, 166, 237, 0.75);
|
||||||
|
|
||||||
|
@define-color white #ffffff;
|
||||||
|
@define-color black #000000;
|
||||||
|
|
||||||
|
/* Module Colors */
|
||||||
|
|
||||||
|
@define-color module-fg #f5e0dc;
|
||||||
|
@define-color workspaces #271f33;
|
||||||
|
|
||||||
|
@define-color cpuinfo #281d30;
|
||||||
|
@define-color memory #332440;
|
||||||
|
@define-color cpu #372542;
|
||||||
|
@define-color distro-fg #000000;
|
||||||
|
@define-color distro-bg #885ab0;
|
||||||
|
@define-color time #372542;
|
||||||
|
@define-color date #332440;
|
||||||
|
@define-color tray #281d30;
|
||||||
|
|
||||||
|
@define-color pulseaudio #281d30;
|
||||||
|
@define-color backlight #332440;
|
||||||
|
@define-color battery #372542;
|
||||||
|
@define-color power #885ab0;
|
||||||
|
|
||||||
|
/* State Colors */
|
||||||
|
|
||||||
|
@define-color warning #f9e2af;
|
||||||
|
@define-color critical #f38ba8;
|
||||||
|
@define-color charging #cdd6f4;
|
Loading…
Reference in New Issue
Block a user