Compare commits

...

53 Commits

Author SHA1 Message Date
f1b6bcb4c5 feat(waybar): delete autohide dock 2026-03-28 19:51:28 +01:00
4f77f73860 feat(waybar): delete autohide dock 2026-03-28 19:50:59 +01:00
b76e27d466 feat(waybar): add autohide dock 2026-03-28 19:50:28 +01:00
b58473de89 feat(btop): do some change - I have no idea 2026-03-28 17:59:31 +01:00
8ad47eff6a feat(yabai): add new ignored windows 2026-03-26 11:32:41 +01:00
e9d9ec86a3 feat(waybar): update 2026-03-15 13:09:33 +01:00
262acb7d8b feat(yabai): remove system settings 2026-03-07 03:49:24 +01:00
53ebb35539 feat(hypr): implement display and keyboard backlight dimming 2026-03-06 20:11:41 +01:00
9d7e338070 feat(hypr): implement display and keyboard backlight dimming 2026-03-06 20:00:54 +01:00
9273a6cb4d feat(hypr): implement display and keyboard backlight dimming 2026-03-06 19:48:08 +01:00
b6fa9dc31e feat(hypr): implement display and keyboard backlight dimming 2026-03-06 19:35:59 +01:00
f659be1b00 feat(hypr): configure hyprlock 2026-03-06 19:02:18 +01:00
27225053bd feat(hypr): add signal to autostart 2026-03-06 17:05:07 +01:00
e0f9e19c58 feat(hypr): update config to make it usable 2026-03-06 14:04:00 +01:00
3b2cc7714b feat(yabai): do not manage system settings 2026-03-06 11:43:43 +01:00
f0530f3fff feat(skhd): update shortcuts 2026-03-05 09:26:36 +01:00
de693c786d feat(skhd): update shortcuts 2026-03-05 09:23:54 +01:00
5cda9c37f9 feat(skhd): update shortcuts 2026-03-05 09:23:53 +01:00
b284ef3b8e fix(hypr): fix randrwall 2026-03-02 13:57:04 +01:00
9e6bf9618f feat(hypr): add more shortcuts 2026-03-02 12:50:39 +01:00
5f0d18b1d0 feat(logid): enable logid support 2026-03-02 12:50:08 +01:00
a123cd42f0 feat(hypr): update monitor configuration and lid behavior 2026-03-02 11:29:21 +01:00
8ff188b3fa feat(yabai): update rules 2026-02-26 10:18:59 +01:00
d5bb18adfd feat(hyprlock): update 2026-02-25 02:41:26 +01:00
7e3062121a feat(waybar): update 2026-02-25 02:26:16 +01:00
9dc6bd9eb0 feat(hyprlock): update 2026-02-25 02:15:59 +01:00
4454b0bb03 feat(hyprlock): update 2026-02-25 02:07:48 +01:00
74dda82f24 feat(hyprlock): update 2026-02-25 01:35:25 +01:00
566513de78 feat(hyprlock): update 2026-02-25 00:43:12 +01:00
dfca6b4752 feat(waybar): update 2026-02-25 00:39:08 +01:00
916a07c80c feat: open btop on system stats 2026-02-25 00:21:25 +01:00
c21e5736d8 feat: add battery and weather script 2026-02-25 00:16:54 +01:00
de1e39b5c4 feat(btop): add btop config 2026-02-24 21:59:26 +01:00
ac3bc6e779 feat(waybar): update 2026-02-24 21:45:17 +01:00
70e15917f4 feat(waybar): update 2026-02-24 21:35:00 +01:00
cb167933f5 feat(hypr): use rofi 2026-02-24 20:33:56 +01:00
1c0acb4323 fix(skhd): only use left option 2026-02-24 14:24:38 +01:00
ecd351208d feat(skhd): add shortcuts to open apps 2026-02-24 09:49:46 +01:00
799c63507a feat(fish): configure ssh 2026-02-23 19:39:55 +01:00
aef8985b3e feat(waybar): update 2026-02-23 19:35:58 +01:00
6bcf153975 feat(hypr): use dnf version of seafile for autostart 2026-02-23 00:34:47 +01:00
ac9c0798d1 style(hypr): update hyprlock config 2026-02-23 00:24:33 +01:00
5f5f338661 style(hypr): update hyprlock config 2026-02-22 22:58:37 +01:00
1628b90398 feat: update hypridle 2026-02-22 22:54:33 +01:00
18d1d6faf0 feat: initialize hyprlock 2026-02-22 22:50:39 +01:00
2e8a421f1c feat(hypr): add media key bindings 2026-02-22 21:39:56 +01:00
815823b7d6 feat(waybar): update 2026-02-22 21:24:19 +01:00
70c90fb23c fix(traefik): fix config 2026-02-21 11:49:29 +01:00
3ff4460d12 feat(waybar): update 2026-02-21 11:48:48 +01:00
3af7c43665 feat(waybar): rizing 2026-02-20 22:24:07 +01:00
46f13b7cff feat(waybar): update 2026-02-20 18:29:27 +01:00
e5659ce2ff feat(waybar): update 2026-02-20 17:53:12 +01:00
f84cd6d66a refactor(hypr): create environment file 2026-02-20 17:53:12 +01:00
44 changed files with 1607 additions and 213 deletions

272
btop/btop.conf Normal file
View File

@@ -0,0 +1,272 @@
#? Config file for btop v.1.4.6
#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes.
#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes"
color_theme = "/home/stereov/.config/btop/themes/catppuccin-mocha.theme"
#* If the theme set background should be shown, set to False if you want terminal background transparency.
theme_background = true
#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false.
truecolor = true
#* Set to true to force tty mode regardless if a real tty has been detected or not.
#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols.
force_tty = false
#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets.
#* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box.
#* Use whitespace " " as separator between different presets.
#* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty"
presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty"
#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists.
#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift.
vim_keys = false
#* Rounded corners on boxes, is ignored if TTY mode is ON.
rounded_corners = true
#* Use terminal synchronized output sequences to reduce flickering on supported terminals.
terminal_sync = true
#* Default symbols to use for graph creation, "braille", "block" or "tty".
#* "braille" offers the highest resolution but might not be included in all fonts.
#* "block" has half the resolution of braille but uses more common characters.
#* "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY.
#* Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view.
graph_symbol = "braille"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_cpu = "default"
# Graph symbol to use for graphs in gpu box, "default", "braille", "block" or "tty".
graph_symbol_gpu = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_mem = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_net = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_proc = "default"
#* Manually set which boxes to show. Available values are "cpu mem net proc" and "gpu0" through "gpu5", separate values with whitespace.
shown_boxes = "mem net proc cpu"
#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs.
update_ms = 2000
#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct",
#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly.
proc_sorting = "cpu lazy"
#* Reverse sorting order, True or False.
proc_reversed = false
#* Show processes as a tree.
proc_tree = false
#* Use the cpu graph colors in the process list.
proc_colors = true
#* Use a darkening gradient in the process list.
proc_gradient = true
#* If process cpu usage should be of the core it's running on or usage of the total available cpu power.
proc_per_core = false
#* Show process memory as bytes instead of percent.
proc_mem_bytes = true
#* Show cpu graph for each process.
proc_cpu_graphs = true
#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate)
proc_info_smaps = false
#* Show proc box on left side of screen instead of right.
proc_left = false
#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop).
proc_filter_kernel = false
#* In tree-view, always accumulate child process resources in the parent process.
proc_aggregate = false
#* Should cpu and memory usage display be preserved for dead processes when paused.
keep_dead_proc_usage = false
#* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available.
#* Select from a list of detected attributes from the options menu.
cpu_graph_upper = "Auto"
#* Sets the CPU stat shown in lower half of the CPU graph, "total" is always available.
#* Select from a list of detected attributes from the options menu.
cpu_graph_lower = "Auto"
#* If gpu info should be shown in the cpu box. Available values = "Auto", "On" and "Off".
show_gpu_info = "Auto"
#* Toggles if the lower CPU graph should be inverted.
cpu_invert_lower = true
#* Set to True to completely disable the lower CPU graph.
cpu_single_graph = false
#* Show cpu box at bottom of screen instead of top.
cpu_bottom = false
#* Shows the system uptime in the CPU box.
show_uptime = true
#* Shows the CPU package current power consumption in watts. Requires running `make setcap` or `make setuid` or running with sudo.
show_cpu_watts = true
#* Show cpu temperature.
check_temp = true
#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors.
cpu_sensor = "Auto"
#* Show temperatures for cpu cores also if check_temp is True and sensors has been found.
show_coretemp = true
#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core.
#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine.
#* Format "x:y" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries.
#* Example: "4:0 5:1 6:3"
cpu_core_map = ""
#* Which temperature scale to use, available values: "celsius", "fahrenheit", "kelvin" and "rankine".
temp_scale = "celsius"
#* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024.
base_10_sizes = false
#* Show CPU frequency.
show_cpu_freq = true
#* How to calculate CPU frequency, available values: "first", "range", "lowest", "highest" and "average".
freq_mode = "first"
#* Draw a clock at top of screen, formatting according to strftime, empty string to disable.
#* Special formatting: /host = hostname | /user = username | /uptime = system uptime
clock_format = "%X"
#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort.
background_update = true
#* Custom cpu model name, empty string to disable.
custom_cpu_name = ""
#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ".
#* Only disks matching the filter will be shown. Prepend exclude= to only show disks not matching the filter. Examples: disk_filter="/boot /home/user", disks_filter="exclude=/boot /home/user"
disks_filter = ""
#* Show graphs instead of meters for memory values.
mem_graphs = true
#* Show mem box below net box instead of above.
mem_below_net = false
#* Count ZFS ARC in cached and available memory.
zfs_arc_cached = true
#* If swap memory should be shown in memory box.
show_swap = true
#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk.
swap_disk = true
#* If mem box should be split to also show disks info.
show_disks = true
#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar.
only_physical = true
#* Read disks list from /etc/fstab. This also disables only_physical.
use_fstab = true
#* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool)
zfs_hide_datasets = false
#* Set to true to show available disk space for privileged users.
disk_free_priv = false
#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view.
show_io_stat = true
#* Toggles io mode for disks, showing big graphs for disk read/write speeds.
io_mode = false
#* Set to True to show combined read/write io graphs in io mode.
io_graph_combined = false
#* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ".
#* Example: "/mnt/media:100 /:20 /boot:1".
io_graph_speeds = ""
#* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False.
net_download = 100
net_upload = 100
#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest.
net_auto = true
#* Sync the auto scaling for download and upload to whichever currently has the highest scale.
net_sync = true
#* Starts with the Network Interface specified here.
net_iface = ""
#* "True" shows bitrates in base 10 (Kbps, Mbps). "False" shows bitrates in binary sizes (Kibps, Mibps, etc.). "Auto" uses base_10_sizes.
base_10_bitrate = "Auto"
#* Show battery stats in top right if battery is present.
show_battery = true
#* Which battery to use if multiple are present. "Auto" for auto detection.
selected_battery = "Auto"
#* Show power stats of battery next to charge indicator.
show_battery_watts = true
#* Set loglevel for "~/.local/state/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG".
#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info.
log_level = "WARNING"
#* Automatically save current settings to config file on exit.
save_config_on_exit = true
#* Measure PCIe throughput on NVIDIA cards, may impact performance on certain cards.
nvml_measure_pcie_speeds = true
#* Measure PCIe throughput on AMD cards, may impact performance on certain cards.
rsmi_measure_pcie_speeds = true
#* Horizontally mirror the GPU graph.
gpu_mirror_graph = true
#* Set which GPU vendors to show. Available values are "nvidia amd intel"
shown_gpus = "nvidia amd intel"
#* Custom gpu0 model name, empty string to disable.
custom_gpu_name0 = ""
#* Custom gpu1 model name, empty string to disable.
custom_gpu_name1 = ""
#* Custom gpu2 model name, empty string to disable.
custom_gpu_name2 = ""
#* Custom gpu3 model name, empty string to disable.
custom_gpu_name3 = ""
#* Custom gpu4 model name, empty string to disable.
custom_gpu_name4 = ""
#* Custom gpu5 model name, empty string to disable.
custom_gpu_name5 = ""

View File

@@ -0,0 +1,83 @@
# Main background, empty for terminal default, need to be empty if you want transparent background
theme[main_bg]="#1e1e2e"
# Main text color
theme[main_fg]="#cdd6f4"
# Title color for boxes
theme[title]="#cdd6f4"
# Highlight color for keyboard shortcuts
theme[hi_fg]="#89b4fa"
# Background color of selected item in processes box
theme[selected_bg]="#45475a"
# Foreground color of selected item in processes box
theme[selected_fg]="#89b4fa"
# Color of inactive/disabled text
theme[inactive_fg]="#7f849c"
# Color of text appearing on top of graphs, i.e uptime and current network graph scaling
theme[graph_text]="#f5e0dc"
# Background color of the percentage meters
theme[meter_bg]="#45475a"
# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
theme[proc_misc]="#f5e0dc"
# CPU, Memory, Network, Proc box outline colors
theme[cpu_box]="#cba6f7" #Mauve
theme[mem_box]="#a6e3a1" #Green
theme[net_box]="#eba0ac" #Maroon
theme[proc_box]="#89b4fa" #Blue
# Box divider line and small boxes line color
theme[div_line]="#6c7086"
# Temperature graph color (Green -> Yellow -> Red)
theme[temp_start]="#a6e3a1"
theme[temp_mid]="#f9e2af"
theme[temp_end]="#f38ba8"
# CPU graph colors (Teal -> Lavender)
theme[cpu_start]="#94e2d5"
theme[cpu_mid]="#74c7ec"
theme[cpu_end]="#b4befe"
# Mem/Disk free meter (Mauve -> Lavender -> Blue)
theme[free_start]="#cba6f7"
theme[free_mid]="#b4befe"
theme[free_end]="#89b4fa"
# Mem/Disk cached meter (Sapphire -> Lavender)
theme[cached_start]="#74c7ec"
theme[cached_mid]="#89b4fa"
theme[cached_end]="#b4befe"
# Mem/Disk available meter (Peach -> Red)
theme[available_start]="#fab387"
theme[available_mid]="#eba0ac"
theme[available_end]="#f38ba8"
# Mem/Disk used meter (Green -> Sky)
theme[used_start]="#a6e3a1"
theme[used_mid]="#94e2d5"
theme[used_end]="#89dceb"
# Download graph colors (Peach -> Red)
theme[download_start]="#fab387"
theme[download_mid]="#eba0ac"
theme[download_end]="#f38ba8"
# Upload graph colors (Green -> Sky)
theme[upload_start]="#a6e3a1"
theme[upload_mid]="#94e2d5"
theme[upload_end]="#89dceb"
# Process box color gradient for threads, mem and cpu usage (Sapphire -> Mauve)
theme[process_start]="#74c7ec"
theme[process_mid]="#b4befe"
theme[process_end]="#cba6f7"

View File

@@ -18,6 +18,10 @@ set -x STARSHIP_CONFIG $HOME/.config/starship/starship.toml
# Set default kubectl editor
set -x KUBE_EDITOR nvim
if not set -q SSH_AUTH_SOCK
eval (ssh-agent -c) >/dev/null
end
# Docker
alias dc="docker compose"
alias dl="docker logs"

View File

@@ -5,17 +5,20 @@
# Autostart necessary processes (like notifications daemons, status bars, etc.)
# Or execute your favorite apps at launch like this:
exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
exec-once = gnome-keyring-daemon --start --components=secrets
exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_TYPE XDG_SESSION_DESKTOP
exec-once = waybar
exec-once = swww-daemon
exec-once = swaync
exec-once = sh -c "/home/stereov/.local/share/JetBrains/Toolbox/bin/jetbrains-toolbox %u & sleep 6 && hyprctl dispatch closewindow class:jetbrains-toolbox"
exec-once = "/home/stereov/Developer/antistereov/randrwall/randrwall.py reload"
exec-once = ~/.config/hypr/scripts/cover-listener.sh
exec-once = hypridle
exec-once = gsettings set org.gnome.desktop.interface gtk-theme 'adw-gtk3-dark'
exec-once = gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'
exec-once = flatpak run com.seafile.Client
exec-once = curl -s https://zenquotes.io/api/random > ~/.cache/quote.json
exec-once = "/usr/libexec/polkit-mate-authentication-agent-1"
exec-once = seafile-applet
exec-once = flatpak run org.signal.Signal

View File

@@ -4,7 +4,11 @@
# See https://wiki.hyprland.org/Configuring/Keywords/
source = ~/.config/hypr/bindings/tiling.conf
source = ~/.config/hypr/bindings/hyprshot.conf
source = ~/.config/hypr/bindings/lock.conf
source = ~/.config/hypr/bindings/media.conf
source = ~/.config/hypr/bindings/programs.conf
source = ~/.config/hypr/bindings/randrwall.conf

1
hypr/bindings/lock.conf Normal file
View File

@@ -0,0 +1 @@
bind = CTRL ALT, Q, exec, hyprlock

19
hypr/bindings/media.conf Normal file
View File

@@ -0,0 +1,19 @@
# Only display the OSD on the currently focused monitor
$osdclient = swayosd-client --monitor "$(hyprctl monitors -j | jq -r '.[] | select(.focused == true).name')"
# Laptop multimedia keys for volume and LCD brightness (with OSD)
bindeld = ,XF86AudioRaiseVolume, Volume up, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
bindeld = ,XF86AudioLowerVolume, Volume down, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
bindeld = ,XF86AudioMute, Mute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
bindeld = ,XF86AudioMicMute, Mute microphone, exec, $osdclient --input-volume mute-toggle
bindeld = ,XF86MonBrightnessUp, Brightness up, exec, brightnessctl set +5%
bindeld = ,XF86MonBrightnessDown, Brightness down, exec, brightnessctl set 5%-
# Requires playerctl
bindld = , XF86AudioNext, Next track, exec, playerctl next
bindld = , XF86AudioPause, Pause, exec, playerctl play-pause
bindld = , XF86AudioPlay, Play, exec, playerctl play-pause
bindld = , XF86AudioPrev, Previous track, exec, playerctl previous
# Switch audio output with Super + Mute
bindld = SUPER, XF86AudioMute, Switch audio output, exec, omarchy-cmd-audio-switch

View File

@@ -0,0 +1,6 @@
bind = $mainMod, RETURN, exec, $terminal
bind = $mainMod, W, killactive,
bind = $mainMod, M, exit,
bind = $mainMod, E, exec, $fileManager
bind = $mainMod, B, exec, $browser
bind = ALT, space, exec, $menu

View File

@@ -1,5 +1,4 @@
$randrwall = "/home/stereov/Developer/antistereov/randrwall/randrwall.py"
$randrwall = "/home/stereov/.config/hypr/scripts/randrwall.py"
bind = SUPER SHIFT, W, exec, $randrwall random
bind = SUPER SHIFT, F, exec, $randrwall favorite

View File

@@ -1,14 +1,7 @@
$mainMod = SUPER # Sets "Windows" key as main modifier
# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
bind = $mainMod, RETURN, exec, $terminal
bind = $mainMod, W, killactive,
bind = $mainMod, M, exit,
bind = $mainMod, E, exec, $fileManager
bind = $mainMod, B, exec, $browser
bind = $mainMod, F, togglefloating,
bind = ALT, space, exec, $menu
bind = $mainMod, P, pseudo, # dwindle
bind = $mainMod SHIFT, J, togglesplit, # dwindle
@@ -18,6 +11,9 @@ bind = $mainMod, L, movefocus, r
bind = $mainMod, K, movefocus, u
bind = $mainMod, J, movefocus, d
bind = CTRL ALT, left, workspace, e-1
bind = CTRL ALT, right, workspace, e+1
# Resize with Mod + Shift + HJKL (repeatable)
binde = $mainMod ALT, L, resizeactive, 50 0
binde = $mainMod ALT, H, resizeactive, -50 0
@@ -66,4 +62,3 @@ bind = $mainMod, mouse_up, workspace, e-1
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow

25
hypr/environment.conf Normal file
View File

@@ -0,0 +1,25 @@
#############################
### ENVIRONMENT VARIABLES ###
#############################
# See https://wiki.hyprland.org/Configuring/Environment-variables/
env = XCURSOR_SIZE,24
env = HYPRCURSOR_SIZE,24
env = GDK_SCALE,1
env = XCURSOR_SIZE,24
env = QT_AUTO_SCREEN_SCALE_FACTOR,0
env = QT_SCALE_FACTOR,1
env = _JAVA_AWT_WM_NONREPARENTING,1
env = AWT_TOOLKIT,MToolkit
env = WINIT_X11_SCALE_FACTOR,1
env = XWAYLAND_NO_GLAMOR,0
env = XDG_CURRENT_DESKTOP,Hyprland
env = XDG_SESSION_TYPE,wayland
env = XDG_SESSION_DESKTOP,Hyprland
xwayland {
force_zero_scaling = true
}

View File

@@ -1,22 +1,29 @@
general {
lock_cmd = omarchy-lock-screen # lock screen and 1password
lock_cmd = hyprlock # lock screen and 1password
before_sleep_cmd = loginctl lock-session # lock before suspend.
after_sleep_cmd = hyprctl dispatch dpms on # to avoid having to press a key twice to turn on the display.
inhibit_sleep = 3 # wait until screen is locked
}
listener {
timeout = 150 # 2.5min
on-timeout = pidof hyprlock || omarchy-launch-screensaver # start screensaver (if we haven't locked already)
timeout = 290
on-timeout = ~/.config/hypr/scripts/dim-display.sh dim
on-resume = ~/.config/hypr/scripts/dim-display.sh restore
}
listener {
timeout = 151 # 5min
on-timeout = loginctl lock-session # lock screen when timeout has passed
timeout = 300
on-timeout = loginctl lock-session
}
listener {
timeout = 330 # 5.5min
timeout = 300
on-timeout = ~/.config/hypr/scripts/dim-keyboard.sh dim
on-resume = ~/.config/hypr/scripts/dim-keyboard.sh restore
}
listener {
timeout = 305 # 5.5min
on-timeout = hyprctl dispatch dpms off # screen off when timeout has passed
on-resume = hyprctl dispatch dpms on && brightnessctl -r # screen on when activity is detected
}

View File

@@ -4,29 +4,7 @@ source = ~/.config/hypr/programs.conf
source = ~/.config/hypr/bindings.conf
source = ~/.config/hypr/input.conf
source = ~/.config/hypr/looknfeel.conf
#############################
### ENVIRONMENT VARIABLES ###
#############################
# See https://wiki.hyprland.org/Configuring/Environment-variables/
env = XCURSOR_SIZE,24
env = HYPRCURSOR_SIZE,24
env = GDK_SCALE,1
env = XCURSOR_SIZE,24
env = QT_AUTO_SCREEN_SCALE_FACTOR,0
env = QT_SCALE_FACTOR,1
env = _JAVA_AWT_WM_NONREPARENTING,1
env = AWT_TOOLKIT,MToolkit
env = WINIT_X11_SCALE_FACTOR,1
env = XWAYLAND_NO_GLAMOR,0
xwayland {
force_zero_scaling = true
}
source = ~/.config/hypr/environment.conf
##############################
### WINDOWS AND WORKSPACES ###

View File

@@ -2,46 +2,144 @@ $color = rgba(#1e1e2e, 1.0)
$inner_color = rgba(#1e1e2e, 0.8)
$outer_color = rgba(#cdd6f4, 1.0)
$font_color = rgba(#cdd6f4, 1.0)
$check_color = rgba(#89b4fa, 1.0)
$check_color = rgba(#380000, 1.0)
general {
ignore_empty_input = true
no_fade_in = true
no_fade_out = true
hide_cursor = false
grace = 0
disable_loading_bar = false
}
background {
monitor =
color = $color
path = ~/.config/omarchy/current/background
path = ~/Pictures/Wallpapers/current
blur_passes = 3
}
animations {
enabled = false
enabled = true
}
# DATE
label {
monitor =
text = cmd[update:1000] echo "$(date +"%A, %B %d")"
color = rgba(242, 243, 244, 0.75)
font_size = 16
font_family = Lexend Light
position = 0, 300
halign = center
valign = center
}
# TIME
label {
monitor =
text = cmd[update:1000] echo "$(date +"%H:%M")"
color = rgba(242, 243, 244, 0.75)
font_size = 150
font_family = Lexend Extrabold
position = 0, 200
halign = center
valign = center
}
# NETWORK
label {
monitor =
text = cmd[update:2000] ~/.config/hypr/scripts/net-status.sh
color = rgba(242, 243, 244, 0.8)
font_size = 14
font_family = Lexend
position = 100, 100
halign = bottom
valign = left
}
# BATTERY
label {
monitor =
text = cmd[update:1000] echo "$(~/.config/hypr/scripts/battery.sh)"
font_family = lexend
font_size = 14
position = -100, 100
halign = right
valign = bottom
}
# WEATHER
label {
monitor =
text = cmd[update:600000] echo "$(~/.config/hypr/scripts/weather.sh | jq -r .text)"
font_family = lexend
font_size = 14
position = -200, 100
halign = right
valign = bottom
}
# NOW PLAYING
image {
monitor =
path = ~/.cache/nowplaying-cover.jpg
size = 300
rounding = 20
position = 0, -150
halign = center
valign = center
border_size = 0
reload_time = 1
}
label {
monitor =
text = cmd[update:1000] playerctl metadata title || jq -r '.[0].q' ~/.cache/quote.json
color = rgba(242, 243, 244, 0.8)
font_size = 14
font_family = Lexend
position = 0, -320
halign = center
valign = center
}
label {
monitor =
text = cmd[update:1000] playerctl metadata artist || jq -r '.[0].a' ~/.cache/quote.json
color = rgba(242, 243, 244, 0.8)
font_size = 14
font_family = Lexend Bold
position = 0, -345
halign = center
valign = center
}
input-field {
monitor =
size = 650, 100
position = 0, 0
size = 300, 50
position = 0, 100
halign = center
valign = center
valign = bottom
inner_color = $inner_color
inner_color = rgba(242, 243, 244, 0.8)
outer_color = $outer_color
outline_thickness = 4
font_family = JetBrainsMono Nerd Font
font_family = Lexend
font_color = $font_color
placeholder_text = Enter Password
check_color = $check_color
fail_text = <i>$FAIL ($ATTEMPTS)</i>
fail_text = $FAIL
rounding = 0
rounding = 10
shadow_passes = 0
fade_on_empty = false
fade_on_empty = true
}
auth {
fingerprint:enabled = false
fingerprint:enabled = true
}

View File

@@ -6,7 +6,7 @@
input {
kb_layout = us
kb_variant = altgr-intl
kb_options = caps:swapescape
kb_options = caps:escape
kb_rules =
follow_mouse = 1

View File

@@ -82,5 +82,5 @@ layerrule {
name = waybar_blur
match:namespace = waybar
blur = on
ignore_alpha = 0.5
ignore_alpha = 0.1
}

View File

@@ -4,6 +4,9 @@
# See https://wiki.hyprland.org/Configuring/Monitors/
monitor=,preferred, auto, auto
monitor=eDP-1, 2256x1504, auto, 1.175
monitor=DP-10, 3440x1440, -3440x0, 1
monitor=eDP-1, 2256x1504, 0x0, 1.175
monitor=DP-10, 3840x2160, -640x-1800, 1.2
bindl = , switch:on:Lid Switch, exec, ~/.config/hypr/scripts/lid.sh off
bindl = , switch:off:Lid Switch, exec, ~/.config/hypr/scripts/lid.sh on

View File

@@ -8,6 +8,6 @@
$terminal = kitty
$fileManager = nautilus
$browser = flatpak run app.zen_browser.zen
$menu = wofi --show drun --allow-images
$menu = rofi -show drun -terminal kitty -kb-cancel Escape -theme ~/.local/share/rofi/themes/modern/style.rasi

55
hypr/scripts/battery.sh Executable file
View File

@@ -0,0 +1,55 @@
#!/usr/bin/env bash
set -euo pipefail
# Find battery + AC device (works on most laptops)
BAT="$(ls -1 /sys/class/power_supply 2>/dev/null | grep -E '^BAT|^CMB|^BATT' | head -n1 || true)"
AC="$(ls -1 /sys/class/power_supply 2>/dev/null | grep -E '^AC|^ADP|^ACAD' | head -n1 || true)"
if [[ -z "${BAT}" ]]; then
echo " --%" # unknown
exit 0
fi
BAT_PATH="/sys/class/power_supply/${BAT}"
STATUS="$(<"${BAT_PATH}/status")" # Charging|Discharging|Full|Not charging|Unknown
CAPACITY="$(<"${BAT_PATH}/capacity")" # 0-100
#  0-10,  11-35,  36-60,  61-85,  86-100
if ((CAPACITY <= 10)); then
if [[ "${STATUS}" == "Charging" || "${STATUS}" == "Not charging" || "${STATUS}" == "Full" ]]; then
ICON="󰢜 "
else
ICON="󰁺 "
fi
elif ((CAPACITY <= 30)); then
if [[ "${STATUS}" == "Charging" || "${STATUS}" == "Not charging" || "${STATUS}" == "Full" ]]; then
ICON="󰂇 "
else
ICON="󰁼 "
fi
elif ((CAPACITY <= 60)); then
if [[ "${STATUS}" == "Charging" || "${STATUS}" == "Not charging" || "${STATUS}" == "Full" ]]; then
ICON="󰂉 "
else
ICON="󰁿 "
fi
elif ((CAPACITY <= 80)); then
if [[ "${STATUS}" == "Charging" || "${STATUS}" == "Not charging" || "${STATUS}" == "Full" ]]; then
ICON="󰂊 "
else
ICON="󰂁 "
fi
else
if [[ "${STATUS}" == "Charging" || "${STATUS}" == "Not charging" ]]; then
ICON="󰂅 "
else
ICON="󰁹 "
fi
fi
# If full, show a nicer indicator
if [[ "${STATUS}" == "Full" ]]; then
CHG_IND=" " # nf-fa-check
fi
echo "${ICON} ${CAPACITY}%"

5
hypr/scripts/cover-listener.sh Executable file
View File

@@ -0,0 +1,5 @@
#!/bin/bash
playerctl metadata --follow --format "{{mpris:artUrl}}" | while read -r _; do
~/.config/hypr/scripts/cover.sh
done

23
hypr/scripts/cover.sh Executable file
View File

@@ -0,0 +1,23 @@
#!/bin/bash
CACHE="$HOME/.cache/nowplaying-cover.jpg"
TMP="$HOME/.cache/nowplaying-cover.tmp.jpg"
status=$(playerctl status 2>/dev/null)
if [ "$status" != "Playing" ]; then
rm -f "$CACHE"
exit 0
fi
url=$(playerctl metadata mpris:artUrl)
[ -z "$url" ] && rm -f "$CACHE" && exit 0
if [[ "$url" == file://* ]]; then
cp "${url#file://}" "$TMP"
else
curl -sL "$url" -o "$TMP"
fi
mv -f "$TMP" "$CACHE"

35
hypr/scripts/dim-display.sh Executable file
View File

@@ -0,0 +1,35 @@
#!/usr/bin/env bash
set -euo pipefail
SCREEN_DEVICE="amdgpu_bl1"
STATE_DIR="${XDG_RUNTIME_DIR:-/tmp}/hypridle"
SCREEN_STATE_FILE="$STATE_DIR/screen"
mkdir -p "$STATE_DIR"
save_current() {
brightnessctl -d "$SCREEN_DEVICE" g >"$SCREEN_STATE_FILE"
}
dim() {
save_current
brightnessctl -d "$SCREEN_DEVICE" set 10%
}
restore() {
[[ -f "$SCREEN_STATE_FILE" ]] && brightnessctl -d "$SCREEN_DEVICE" s "$(cat "$SCREEN_STATE_FILE")"
}
case "${1:-}" in
dim)
dim
;;
restore)
restore
;;
*)
echo "Usage: $0 {dim|restore}"
exit 1
;;
esac

35
hypr/scripts/dim-keyboard.sh Executable file
View File

@@ -0,0 +1,35 @@
#!/usr/bin/env bash
set -euo pipefail
KBD_DEVICE="chromeos::kbd_backlight"
STATE_DIR="${XDG_RUNTIME_DIR:-/tmp}/hypridle"
KBD_STATE_FILE="$STATE_DIR/kbd"
mkdir -p "$STATE_DIR"
save_current() {
brightnessctl -d "$KBD_DEVICE" g >"$KBD_STATE_FILE"
}
dim() {
save_current
brightnessctl -d "$KBD_DEVICE" set 0
}
restore() {
[[ -f "$KBD_STATE_FILE" ]] && brightnessctl -d "$KBD_DEVICE" s "$(cat "$KBD_STATE_FILE")"
}
case "${1:-}" in
dim)
dim
;;
restore)
restore
;;
*)
echo "Usage: $0 {dim|restore}"
exit 1
;;
esac

40
hypr/scripts/lid.sh Executable file
View File

@@ -0,0 +1,40 @@
#!/usr/bin/env bash
set -euo pipefail
ACTION="${1:-}" # "on" oder "off"
LAPTOP="eDP-1"
LAPTOP_MODE="2256x1504"
LAPTOP_SCALE="1.175"
has_external() {
hyprctl monitors | awk '/^Monitor /{print $2}' | grep -vq "^${LAPTOP}$"
}
enable_laptop() {
hyprctl keyword monitor "${LAPTOP}, ${LAPTOP_MODE}, 0x0, ${LAPTOP_SCALE}"
hyprctl dispatch dpms on "${LAPTOP}" 2>/dev/null || true
}
disable_laptop() {
hyprctl keyword monitor "${LAPTOP}, disable"
}
case "$ACTION" in
off)
if has_external; then
disable_laptop
else
disable_laptop
hyprlock
fi
;;
on)
enable_laptop
;;
*)
echo "usage: $0 {on|off}" >&2
exit 2
;;
esac

38
hypr/scripts/net-status.sh Executable file
View File

@@ -0,0 +1,38 @@
#!/bin/bash
IFACE="wlp1s0"
# Prüfen ob Interface existiert
if [ ! -d "/sys/class/net/$IFACE" ]; then
echo "󰤮 no iface"
exit 0
fi
STATE=$(cat /sys/class/net/$IFACE/operstate 2>/dev/null)
if [ "$STATE" != "up" ]; then
echo "󰤮 Disconnected"
exit 0
fi
# SSID holen
SSID=$(iw dev "$IFACE" link 2>/dev/null | awk -F': ' '/SSID/ {print $2}')
SIGNAL=$(iw dev "$IFACE" link 2>/dev/null | awk -F'signal: ' '/signal/ {print $2}' | awk '{print $1}')
if [ -z "$SSID" ]; then
echo "󰤮 Disconnected"
exit 0
fi
# Icon je nach dBm (realistische Werte: -30 sehr stark, -90 sehr schwach)
if ((SIGNAL >= -50)); then
ICON="󰤨 " # stark
elif ((SIGNAL >= -65)); then
ICON="󰤥 " # mittel
elif ((SIGNAL >= -75)); then
ICON="󰤢 " # schwach
else
ICON="󰤟 " # sehr schwach
fi
echo "${ICON} ${SSID}"

11
hypr/scripts/nowplaying.sh Executable file
View File

@@ -0,0 +1,11 @@
#!/bin/bash
status=$(playerctl status 2>/dev/null)
if [ "$status" = "Playing" ]; then
artist=$(playerctl metadata artist)
title=$(playerctl metadata title)
echo "$artist - $title"
else
echo ""
fi

309
hypr/scripts/randrwall.py Executable file
View File

@@ -0,0 +1,309 @@
#!/usr/bin/env python3
import argparse
import json
from os import environ
import random
import shutil
import subprocess
import sys
from pathlib import Path
from urllib.parse import quote
import urllib.request
HOME = Path.home()
BASE_DIR = HOME / "Pictures" / "Wallpapers"
FAV_DIR = BASE_DIR / "favorites"
CACHE_DIR = BASE_DIR / "cache"
CURRENT = BASE_DIR / "current"
STATE_FILE = HOME / ".cache" / "randrwall_state.json"
DEFAULT_TAGS = [
"space",
"nebula",
"cyberpunk",
"minimal",
"architecture",
"landscape",
"fantasy",
"digital art",
]
ATLEAST = "3840x2160"
RATIOS = "16x9,21x9"
SORTING = "random"
CATEGORIES = "110"
PURITY = "100"
def load_env_file(path: Path) -> None:
if not path.exists():
return
for line in path.read_text().splitlines():
line = line.strip()
if not line or line.startswith("#"):
continue
if "=" not in line:
continue
k, v = line.split("=", 1)
environ.setdefault(k.strip(), v.strip())
load_env_file(Path() / ".env")
API_KEY = environ.get("WALLHAVEN_API_KEY")
def run(cmd: list[str]) -> None:
subprocess.run(cmd, check=True)
def ensure_dirs() -> None:
FAV_DIR.mkdir(parents=True, exist_ok=True)
CACHE_DIR.mkdir(parents=True, exist_ok=True)
STATE_FILE.parent.mkdir(parents=True, exist_ok=True)
def read_state() -> dict:
if STATE_FILE.exists():
try:
return json.loads(STATE_FILE.read_text(encoding="utf-8"))
except Exception:
return {}
return {}
def write_state(state: dict) -> None:
STATE_FILE.write_text(json.dumps(state, indent=2), encoding="utf-8")
def is_image(path: Path) -> bool:
return path.suffix.lower() in {".jpg", ".jpeg", ".png", ".webp"}
def swww_set(path: Path) -> None:
run(
[
"swww",
"img",
str(path),
]
)
def pick_random_from(dir_path: Path) -> Path | None:
if not dir_path.exists():
return None
imgs = [p for p in dir_path.iterdir() if p.is_file() and is_image(p)]
if not imgs:
return None
return random.choice(imgs)
UA = "randrwall/0.1 (+https://gitea.stereov.io/antistereov/randrwall)"
HEADERS = {
"User-Agent": UA,
"Referer": "https://wallhaven.cc/",
"Accept": "*/*",
}
def http_get_json(url: str, timeout: int = 15) -> dict:
req = urllib.request.Request(url, headers=HEADERS)
with urllib.request.urlopen(req, timeout=timeout) as resp:
return json.loads(resp.read().decode("utf-8"))
def wallhaven_search_random(tags: list[str]) -> str:
tag = random.choice(tags)
q = quote(tag)
params = (
f"q={q}"
f"&categories={CATEGORIES}"
f"$purity={PURITY}"
f"&atleast={ATLEAST}"
f"&ratios={quote(RATIOS)}"
f"&sorting={SORTING}"
"&order=desc"
"&page=1"
)
if API_KEY:
print("Using API key")
params += f"&apiKey={API_KEY}"
url = f"https://wallhaven.cc/api/v1/search?{params}"
data = http_get_json(url)
arr = data.get("data") or []
if not arr:
raise RuntimeError(f"Wallhaven: no results for tag='{tag}'")
item = random.choice(arr)
path = item.get("path")
if not path:
raise RuntimeError("Wallhaven: response does not contain 'path'")
return path
def prune_cache(max_files: int = 10) -> None:
if max_files <= 0:
return
files = [p for p in CACHE_DIR.iterdir() if p.is_file() and is_image(p)]
files.sort(key=lambda p: p.stat().st_mtime, reverse=True)
for p in files[max_files:]:
try:
p.unlink()
except Exception:
pass
def download_to_cache(url: str) -> Path:
filename = url.split("/")[-1]
out = CACHE_DIR / filename
if out.exists() and out.stat().st_size > 0:
return out
tmp_path = CACHE_DIR / (filename + ".part")
req = urllib.request.Request(url, headers=HEADERS, method="GET")
try:
with urllib.request.urlopen(req, timeout=30) as resp:
if resp.status != 200:
raise RuntimeError(f"Download failed: HTTP {resp.status}")
with open(tmp_path, "wb") as f:
shutil.copyfileobj(resp, f)
tmp_path.replace(out)
prune_cache()
return out
finally:
try:
if tmp_path.exists():
tmp_path.unlink()
except Exception:
pass
def copy_to_current(img: Path) -> None:
shutil.copy2(img, CURRENT)
def cmd_random(args: argparse.Namespace) -> None:
ensure_dirs()
state = read_state()
use_fav = random.random() < args.fav_weight
fav_pick = pick_random_from(FAV_DIR) if use_fav else None
if fav_pick is not None:
swww_set(fav_pick)
state["current"] = str(fav_pick)
state["source"] = "favorites"
write_state(state)
print(f"Set (favorites): {fav_pick}")
copy_to_current(fav_pick)
return
url = wallhaven_search_random(args.tags)
img = download_to_cache(url)
swww_set(img)
copy_to_current(img)
state["current"] = str(img)
state["source"] = "wallhaven"
state["wallhaven_url"] = url
write_state(state)
print(f"Set (download): {img}")
def cmd_favorite(args: argparse.Namespace) -> None:
ensure_dirs()
state = read_state()
cur = state.get("current")
if not cur:
print(
"No current wallpaper found in state. Please set one first via 'random'",
file=sys.stderr,
)
sys.exit(1)
src = Path(cur)
if not src.exists():
print(f"Current wallpaper does not exist anymore: {src}", file=sys.stderr)
sys.exit(1)
dest = FAV_DIR / src.name
if dest.exists():
print(f"Already in favorites: {dest}")
return
shutil.copy2(src, dest)
print(f"Saved to favorites: {dest}")
def reload(args: argparse.Namespace) -> None:
ensure_dirs()
state = read_state()
cur = state.get("current")
if not cur:
print(
"No current wallpaper found in state. Please set one first via 'random'",
file=sys.stderr,
)
sys.exit(1)
src = Path(cur)
if not src.exists():
print(f"Current wallpaper does not exist anymore: {src}", file=sys.stderr)
sys.exit(1)
swww_set(cur)
def main() -> None:
parser = argparse.ArgumentParser(
description="Hyprland wallpaper helper (swww + wallhaven + favorites"
)
sub = parser.add_subparsers(dest="cmd", required=True)
p_random = sub.add_parser(
"random", help="Set random wallpaper (favorites or download)"
)
p_random.add_argument(
"--fav-weight",
type=float,
default=0.3,
help="Probability to pick from favorites (0..1). Default: 0.3",
)
p_random.add_argument(
"--tags",
nargs="+",
default=DEFAULT_TAGS,
help=f"Wall haven tags list. Default: {DEFAULT_TAGS}",
)
p_random.set_defaults(func=cmd_random)
p_fav = sub.add_parser("favorite", help="Save current wallpaper to favorites")
p_fav.set_defaults(func=cmd_favorite)
p_fav = sub.add_parser("reload", help="Reload current wallpaper")
p_fav.set_defaults(func=reload)
args = parser.parse_args()
args.func(args)
if __name__ == "__main__":
main()

102
hypr/scripts/weather.sh Executable file
View File

@@ -0,0 +1,102 @@
#!/bin/bash
# --- CONFIGURATION ---
LAT="51.0509" # Replace with your Latitude
LON="13.7383" # Replace with your Longitude
UNITS="metric" # Use "metric" for Celsius, "imperial" for Fahrenheit
TZ="Europe/Berlin"
# ---------------------
if [[ "$UNITS" == "metric" ]]; then
TEMP_UNIT="celsius"
LABEL="°C"
else
TEMP_UNIT="fahrenheit"
LABEL="°F"
fi
# Fetch the weather data
RESPONSE=$(curl -s "https://api.open-meteo.com/v1/forecast?latitude=${LAT}&longitude=${LON}&current=temperature_2m,weather_code,is_day&timezone=${TZ}")
# Check if curl failed to get a response
if [ -z "$RESPONSE" ]; then
echo "No connection"
exit 1
fi
TEMP=$(echo "$RESPONSE" | jq -r '.current.temperature_2m | round')
CODE=$(echo "$RESPONSE" | jq -r '.current.weather_code')
IS_DAY=$(echo "$RESPONSE" | jq -r '.current.is_day')
case "$CODE" in
0)
if [[ "$IS_DAY" == "1" ]]; then
ICON=" " # nf-weather-day_sunny
else
ICON=" " # nf-weather-night_clear
fi
DESC="Clear sky"
;;
1 | 2)
if [[ "$IS_DAY" == "1" ]]; then
ICON=" " # nf-weather-day_cloudy
else
ICON=" " # nf-weather-night_alt_cloudy
fi
DESC="Partly cloudy"
;;
3)
ICON=" " # nf-weather-cloudy
DESC="Overcast"
;;
45 | 48)
ICON=" " # nf-weather-fog
DESC="Fog"
;;
51 | 53 | 55)
ICON=" " # nf-weather-sprinkle
DESC="Drizzle"
;;
56 | 57)
ICON=" "
DESC="Freezing drizzle"
;;
61 | 63 | 65)
ICON=" " # nf-weather-rain
DESC="Rain"
;;
66 | 67)
ICON=" "
DESC="Freezing rain"
;;
71 | 73 | 75 | 77)
ICON=" " # nf-weather-snow
DESC="Snow"
;;
80 | 81 | 82)
ICON=" " # nf-weather-showers
DESC="Rain showers"
;;
85 | 86)
ICON=" "
DESC="Snow showers"
;;
95)
ICON=" " # nf-weather-thunderstorm
DESC="Thunderstorm"
;;
96 | 99)
ICON=" "
DESC="Thunderstorm with hail"
;;
esac
# Determine unit label
if [ "$UNITS" = "metric" ]; then
LABEL="°C"
else
LABEL="°F"
fi
# Final JSON output for Waybar
echo "{\"text\": \"${ICON} ${TEMP}${LABEL}\", \"tooltip\": \"${DESC}\"}"

View File

@@ -28,7 +28,8 @@ devices: (
}
buttons: (
{ // thumb button
{
// thumb button
cid: 0xc3; action =
{
type: "Gestures";
@@ -56,6 +57,7 @@ devices: (
{
direction: "left";
mode: "OnRelease";
action = {
type: "Keypress";
keys: ["KEY_LEFTCTRL", "KEY_LEFTALT", "KEY_RIGHT"];
@@ -72,11 +74,10 @@ devices: (
{
direction: "None";
mode: "OnRelease";
action =
{
action = {
type: "Keypress";
keys: ["KEY_LEFTMETA"];
};
}
},
{
direction: "LEFT";

View File

@@ -57,3 +57,7 @@ alt + shift - 0 : yabai -m window --space 10
# Toggle pseudo scratchpad window: float, sticky, and center it on grid
alt - p : yabai -m window --toggle sticky --toggle float --grid 4:4:1:1:2:2
lalt - return : open -a kitty
lalt - b : open -a "Zen" --new
lalt - e : open -a "Finder"
lalt - w : skhd -k "cmd - w"

View File

@@ -7,48 +7,57 @@
"gtk-layer-shell": true,
"passthrough": false,
"fixed-center": true,
"modules-left": ["hyprland/workspaces", "hyprland/window"],
"modules-center": ["mpris"],
"modules-left": [
"hyprland/workspaces",
"hyprland/window"
],
"modules-right": [
"cpu",
"memory",
"pulseaudio",
"clock",
"clock#simpleclock",
"custom/weather",
"custom/tailscale",
"network",
"battery",
"tray",
"custom/notification",
"custom/power",
"custom/power"
],
"custom/spotify": {
"format": " {}",
"return-type": "json",
"on-click": "playerctl -p spotify play-pause",
"on-click-right": "spotifatius toggle-liked",
"on-click-middle": "playerctl -p spotify next",
"exec": "spotifatius monitor",
},
"mpris": {
"player": "spotify",
"dynamic-order": ["artist", "title"],
"format": "{player_icon} {dynamic}",
"format-paused": "{status_icon} <i>{dynamic}</i>",
"status-icons": {
"paused": "",
},
"player-icons": {
"default": "",
},
"format": "{cover_art} {artist} - {title}",
"icon-size": 20,
"max-length": 40
},
"hyprland/workspaces": {
"on-click": "activate",
"format": "{id}",
"format": "{windows}",
"all-outputs": true,
"disable-scroll": false,
"active-only": false,
"window-rewrite": {
"class<*>": "󰘔 ",
"class<firefox>": "󰈹 ",
"class<app.zen_browser.zen>": "󰖟 ",
"class<kitty>": " ",
"class<com.seafile.seafile-applet>": "󰅟 ",
"class<org.gnome.Nautilus>": " ",
"class<org.gnome.Software>": " ",
"class<chromium-browser>": " ",
"class<chrome-web.telegram.org__-Default>": " ",
"class<chrome-music.youtube.com__-Default>": " "
},
"window-rewrite-default": " "
},
"hyprland/window": {
"format": "{title}",
"icon": true,
"icon-size": 22,
"seperate-outputs": true,
"rewrite": {
"": " Empty Workspace"
}
},
"tray": {
"show-passive-items": true,
@@ -79,37 +88,61 @@
"format": " {usage}%",
"tooltip": true,
"interval": 1,
"on-click": "kitty btop"
},
"memory": {
"format": " {used:0.1f}Gi",
"on-click": "kitty btop"
},
"pulseaudio": {
"format": "{icon} {volume}%",
"format-muted": " muted",
"format-icons": {
"headphone": " ",
"default": [" ", " ", " "],
"default": [
" ",
" ",
" "
]
},
"on-click": "pavucontrol",
"on-click": "pavucontrol"
},
"battery": {
"format": "{icon} {capacity}%",
"format-icons": ["", "", "", "", ""],
"format-charging": "󱐋{icon} {capacity}%",
"format-plugged": "󱐋{icon} {capacity}%",
"format-icons": [
"󰂎",
"󰁺",
"󰁻",
"󰁼",
"󰁽",
"󰁾",
"󰁿",
"󰂀"
],
"states": {
"critical": 25,
"critical": 15,
"warning": 30
},
"events": {
"on-dischargin-critical": "notify-send -u critical 'Low Battery'"
"on-discharging-critical": "notify-send -u critical 'Low Battery'"
}
},
"custom/sep": {
"format": "|",
"tooltip": false,
"tooltip": false
},
"custom/power": {
"tooltip": false,
"on-click": "wlogout -p layer-shell &",
"format": "⏻",
"format": "⏻"
},
"custom/nowplaying": {
"exec": "~/.config/waybar/scripts/nowplaying.sh",
"interval": 2,
"return-type": "json",
"on-click": "playerctl play-pause"
},
"custom/notification": {
"escape": true,
@@ -119,9 +152,44 @@
"format-icons": {
"none": "󰅺",
"notification": "󰡟",
"dnd-notification": "󰂛",
"": "󱏬",
"inhibited": "󰂛"
},
"on-click": "sleep 0.1 && swaync-client -t -sw",
"return-type": "json",
"tooltip": false,
"tooltip": false
},
"custom/weather": {
"format": "{}",
"interval": 600,
"exec": "~/.config/hypr/scripts/weather.sh", // or your dotfiles folder if you use stow
"return-type": "json",
"on-click": "gnome-weather"
},
"custom/tailscale": {
"exec": "~/.config/waybar/scripts/tailscale.sh",
"interval": 5,
"return-type": "json",
"on-click": "~/.config/waybar/scripts/tailscale-toggle.sh",
"tooltip": true
},
"network": {
"interface": "wlp1s0",
"format": "",
"format-icons": [
"󰤟 ",
"󰤢 ",
"󰤥 ",
"󰤨 "
],
"format-wifi": "{icon} {essid}",
"format-ethernet": "󰈀 Ethernet",
"format-disconnected": "󰤮 Disconnected",
"tooltip-format": "{ifname}",
"tooltip-format-wifi": "{essid} ({signalStrength}%)",
"tooltip-format-ethernet": "{ifname}",
"tooltip-format-disconnected": "Disconnected",
"max-length": 50
}
}

24
waybar/scripts/nowplaying.sh Executable file
View File

@@ -0,0 +1,24 @@
#!/bin/bash
CACHE="$HOME/.cache/waybar-cover.jpg"
TMP="$HOME/.cache/waybar-cover.tmp.jpg"
status=$(playerctl status 2>/dev/null)
if [ "$status" = "Playing" ]; then
artist=$(playerctl metadata artist)
title=$(playerctl metadata title)
url=$(playerctl metadata mpris:artUrl)
if [[ "$url" == file://* ]]; then
cp "${url#file://}" "$TMP"
else
curl -sL "$url" -o "$TMP"
fi
mv -f "$TMP" "$CACHE"
echo "{\"text\": \"$artist - $title\", \"tooltip\": \"$artist - $title\", \"class\": \"playing\", \"alt\": \"$CACHE\"}"
else
echo "{\"text\": \"󰐎 \", \"class\": \"stopped\"}"
fi

View File

@@ -0,0 +1,7 @@
#!/usr/bin/env bash
if tailscale status --json 2>/dev/null | grep -q '"BackendState": "Running"'; then
tailscale down
else
tailscale up
fi

7
waybar/scripts/tailscale.sh Executable file
View File

@@ -0,0 +1,7 @@
#!/usr/bin/env bash
if tailscale status --json 2>/dev/null | grep -q '"BackendState": "Running"'; then
echo '{"text":"󰛳  ","class":"connected","tooltip":"Tailscale Connected"}'
else
echo '{"text":"󰛳  ","class":"disconnected","tooltip":"Tailscale Disconnected"}'
fi

View File

@@ -1,64 +1,107 @@
@define-color bg #1e1e2e;
@define-color accent #ffffff;
@define-color accent #b4befe;
* {
min-height: 0;
min-width: 0;
font-family: "Adwaita Sans", "JetBrainsMono Nerd Font";
font-family: "Lexend", "JetBrainsMono Nerd Font";
font-size: 13px;
font-weight: 400;
}
#workspaces {
background: transparent;
}
window#waybar {
min-height: 0;
background: transparent;
}
window#waybar.empty #window {
background-color: transparent;
#window {
font-weight: 700;
}
#workspaces button {
padding: 0.1rem 0.6rem;
margin: 0.1rem 0.25rem;
padding-left: 5px;
padding-right: 0;
margin-top: 3px;
padding-top: 0;
padding-bottom: 0;
border: 0;
margin-left: 4px;
margin-right: 0;
min-height: 10px;
min-width: 24px;
border-radius: 6px;
background-color: alpha(@bg, 0.6);
color: #cdd6f4;
background: alpha(@bg, 0.3);
transition:
all 180ms cubic-bezier(.4,0,.2,1),
color 800ms cubic-bezier(.4, 0, .2, 1);
opacity: 0.3;
}
#workspaces button label {
font-size: 18px;
letter-spacing: -3px;
}
#workspaces button:hover {
color: #1e1e2e;
background-color: alpha(#cdd6f4, 0.3);
background: rgba(255,255,255,0.45);
opacity: 0.4;
}
#workspaces button.active {
background-color: alpha(@accent, 0.6);
color: black
min-width: 34px;
background: white;
background: alpha(@bg,0.3);
color: white;
border: 1px solid alpha(white, 0.7);
opacity: 1.0;
}
#workspaces button.visible {
background: alpha(@bg,0.3);
}
#workspaces button.urgent {
background-color: alpha(@bg, 0.5);
color: #f38ba8;
background: #ff5f5f;
}
#clock,
#pulseaudio,
#custom-nowplaying,
#custom-logo,
#custom-power,
#custom-spotify,
#custom-notification,
#custom-tailscale,
#custom-weather,
#cpu,
#tray,
#memory,
#battery,
#network,
#window,
#mpris {
padding: 0.1rem 0.6rem;
margin: 0.1rem 0.25rem;
border-radius: 6px;
/* background-color: #181825; */
background-color: alpha(@bg, 0.6);
background-color: alpha(@bg, 0.3);
margin-top: 3px;
margin-left: 3px;
margin-right: 3px;
}
#custom-nowplaying {
padding-left: 40px;
background-size: 30px 30px;
background-repeat: no-repeat;
background-position: left center;
background-image: url('/home/stereov/.cache/nowplaying-cover.jpg')
}
#mpris.playing {

BIN
wlogout/icons/hibernate.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
wlogout/icons/lock.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

BIN
wlogout/icons/logout.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

BIN
wlogout/icons/reboot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
wlogout/icons/shutdown.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
wlogout/icons/suspend.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

36
wlogout/layout Normal file
View File

@@ -0,0 +1,36 @@
{
"label" : "lock",
"action" : "hyprlock",
"text" : "Lock",
"keybind" : "l"
}
{
"label" : "logout",
"action" : "hyprctl dispatch exit",
"text" : "Logout",
"keybind" : "e"
}
{
"label" : "suspend",
"action" : "systemctl suspend",
"text" : "Suspend",
"keybind" : "u"
}
{
"label" : "hibernate",
"action" : "systemctl hibernate",
"text" : "Hibernate",
"keybind" : "h"
}
{
"label" : "shutdown",
"action" : "systemctl poweroff",
"text" : "Shutdown",
"keybind" : "s"
}
{
"label" : "reboot",
"action" : "systemctl reboot",
"text" : "Reboot",
"keybind" : "r"
}

43
wlogout/style.css Normal file
View File

@@ -0,0 +1,43 @@
window {
font-family: "Lexend";
font-size: 12pt;
color: #cdd6f4;
background-color: rgba(30, 30, 46, 0.9);
}
button {
background-repeat: no-repeat;
background-position: center;
background-size: 25%;
border-style: solid;
border-width: 3px;
background-color: rgba(12, 12, 12, 0.3);
border-color: #313244;
margin: 5px;
border-radius: 20px;
transition: all 0.3s ease-in-out;
}
#lock {
background-image: image(url("icons/lock.png"));
}
#logout {
background-image: image(url("icons/logout.png"));
}
#suspend {
background-image: image(url("icons/suspend.png"));
}
#hibernate {
background-image: image(url("icons/hibernate.png"));
}
#reboot {
background-image: image(url("icons/reboot.png"));
}
#shutdown {
background-image: image(url("icons/shutdown.png"));
}

View File

@@ -21,24 +21,35 @@ yabai -m rule --add title='^Archive Utility$' manage=off
yabai -m rule --add app="^IntelliJ IDEA$" title="^Welcome to IntelliJ IDEA$" manage=off
yabai -m rule --add app="^WebStorm$" title="^Welcome to WebStorm$" manage=off
yabai -m rule --add app="^(IntelliJ IDEA|WebStorm)$" title="^Add File to Git$" manage=off
yabai -m rule --add app="^(IntelliJ IDEA|WebStorm)$" title="^Delete$" manage=off
yabai -m rule --add app="^(IntelliJ IDEA|WebStorm)$" title="^Push Commits" manage=off
yabai -m rule --add app="^(IntelliJ IDEA|WebStorm)$" title="^Update Project$" manage=off
yabai -m rule --add app="^(IntelliJ IDEA|WebStorm)$" title="^New Project$" manage=off
yabai -m rule --add app="^(IntelliJ IDEA|WebStorm)$" title="^Clone Repository$" manage=off
yabai -m rule --add app="^(IntelliJ IDEA|WebStorm)$" title="^Project Structure$" manage=off
yabai -m rule --add app="^(IntelliJ IDEA|WebStorm)$" title="^Settings$" manage=off
yabai -m rule --add app="^(IntelliJ IDEA|WebStorm)$" title="^Run/Debug Configurations$" manage=off
yabai -m rule --add app="^(IntelliJ IDEA|WebStorm)$" title="^Data Sources and Drivers$" manage=off
yabai -m rule --add app="^(IntelliJ IDEA|WebStorm)$" title="^Choose Plugins to Install or Enable$" manage=off
yabai -m rule --add app="^(IntelliJ IDEA|WebStorm)$" title="^Create New Branch$" manage=off
yabai -m rule --add app="^(IntelliJ IDEA|WebStorm)$" title="^Copy$" manage=off
yabai -m rule --add app="^(IntelliJ IDEA|WebStorm)$" title="^Rename$" manage=off
yabai -m rule --add app="^(IntelliJ IDEA|WebStorm)$" title="^Rename Branch" manage=off
yabai -m rule --add app="^(IntelliJ IDEA|WebStorm)$" title="^Rollback Changes$" manage=off
yabai -m rule --add app="^(IntelliJ IDEA|WebStorm)$" title="^Copy Files/Directory$" manage=off
yabai -m rule --add app="^(IntelliJ IDEA|WebStorm)$" title="^Choose Package$" manage=off
jetbrains_dialogs=(
"^Add File to Git$"
"^Delete$"
"^Push Commits"
"^Update Project$"
"^New Project$"
"^Clone Repository$"
"^Project Structure$"
"^Settings$"
"^Run/Debug Configurations$"
"^Data Sources and Drivers$"
"^Choose Plugins to Install or Enable$"
"^Create New Branch$"
"^Copy$"
"^Rename$"
"^Rename Branch"
"^Rollback Changes$"
"^Copy Files/Directory$"
"^Choose Package$"
"^Move Package$"
"^Move$"
"^Git Editor$"
"^Create New Tag"
)
for title in "${jetbrains_dialogs[@]}"; do
yabai -m rule --add app="^(IntelliJ IDEA|WebStorm)$" title="$title" manage=off
done
# float settings windows
yabai -m rule --add title='Settings$' manage=off