diff --git a/bar/waybar/config.jsonc b/bar/waybar/config.jsonc new file mode 100755 index 0000000..f2b6b8b --- /dev/null +++ b/bar/waybar/config.jsonc @@ -0,0 +1,140 @@ +{ + "layer": "top", + "position": "top", + "mod": "dock", + "exclusive": true, + "passthrough": false, + "gtk-layer-shell": true, + "height": 50, + "modules-left": ["clock","custom/weather","wlr/workspaces"], + "modules-center": ["hyprland/window"], + "modules-right": ["network", "bluetooth", "temperature","custom/power_profile","battery","backlight","pulseaudio","pulseaudio#microphone","tray"], + "hyprland/window": { + "format": "{}" + }, + + "wlr/workspaces": { + "disable-scroll": true, + "all-outputs": true, + "on-click": "activate", + "persistent_workspaces": { + "1": [], + "2": [], + "3": [], + "4": [], + "5": [], + "6": [], + "7": [], + "8": [], + "9": [], + "10": [] + } + }, + + "custom/power_profile":{ + //shows the current power profile and switches to next on click + "exec": "asusctl profile -p | sed s:'Active profile is'::", + "interval": 30, + "format": "󰈐{}", + "on-click": "asusctl profile -n; pkill -SIGRTMIN+8 waybar", + "signal": 8 + }, + + "custom/weather" : { + //shows the current weather and forecast + "tooltip" : true, + "format" : "{}", + "interval" : 30, + "exec" : "~/.config/waybar/scripts/waybar-wttr.py", + "return-type" : "json" + }, + + "tray": { + "icon-size": 18, + "spacing": 10 + }, + + "clock": { + "format": "{: %H:%M  %a, %b %e}", + "tooltip-format": "{:%Y %B}\n{calendar}" + }, + + "backlight": { + "device": "asus::kbd_backlight", + "format": "{icon} {percent}%", + "format-icons": ["", "", ""], + "on-scroll-up": "brightnessctl set 1%+", + "on-scroll-down": "brightnessctl set 1%-", + "min-length": 6 + }, + + "battery": { + "states": { + "good": 95, + "warning": 30, + "critical": 20 + }, + "format": "{icon} {capacity}%", + "format-charging": " {capacity}%", + "format-plugged": " {capacity}%", + "format-alt": "{time} {icon}", + "format-icons": ["", "", "", "", ""] + }, + + "pulseaudio": { + "format": "{icon} {volume}%", + "tooltip": false, + "format-muted": " Muted", + "on-click": "pamixer -t", + "on-scroll-up": "pamixer -i 5", + "on-scroll-down": "pamixer -d 5", + "scroll-step": 5, + "format-icons": { + "headphone": "", + "hands-free": "", + "headset": "", + "phone": "", + "portable": "", + "car": "", + "default": ["", "", ""] + } + }, + + "pulseaudio#microphone": { + "format": "{format_source}", + "format-source": " {volume}%", + "format-source-muted": " Muted", + "on-click": "pamixer --default-source -t", + "on-scroll-up": "pamixer --default-source -i 5", + "on-scroll-down": "pamixer --default-source -d 5", + "scroll-step": 5 + }, + + "temperature": { + "thermal-zone": 0, + "critical-threshold": 80, + "format": "{temperatureC}°C ", + "format-critical": "{temperatureC}°C " + }, + + "network": { + "interface": "wlan0", // (Optional) To force the use of this interface + "format-wifi": " {signalStrength}%", + "format-ethernet": "{ifname}: {ipaddr}/{cidr} ", + "tooltip-format": "{essid} - {ifname} via {gwaddr} ", + "format-linked": "{ifname} (No IP) ", + "format-disconnected": "Disconnected ⚠", + "format-alt": "{ifname}:{essid} {ipaddr}/{cidr}" + }, + + "bluetooth": { + "format": " {status}", + "format-disabled": "", // an empty format will hide the module + "format-connected": " {num_connections}", + "tooltip-format": "{device_alias}", + "tooltip-format-connected": " {device_enumerate}", + "tooltip-format-enumerate-connected": "{device_alias}", + "on-click": "/usr/bin/blueman-manager" + } +} + diff --git a/bar/waybar/scripts/waybar-wttr.py b/bar/waybar/scripts/waybar-wttr.py new file mode 100755 index 0000000..8bd0a0f --- /dev/null +++ b/bar/waybar/scripts/waybar-wttr.py @@ -0,0 +1,120 @@ +#!/usr/bin/env python + +import json +import requests +from datetime import datetime + +WEATHER_CODES = { + '113': '☀️ ', + '116': '⛅ ', + '119': '☁️ ', + '122': '☁️ ', + '143': '☁️ ', + '176': '🌧️', + '179': '🌧️', + '182': '🌧️', + '185': '🌧️', + '200': '⛈️ ', + '227': '🌨️', + '230': '🌨️', + '248': '☁️ ', + '260': '☁️ ', + '263': '🌧️', + '266': '🌧️', + '281': '🌧️', + '284': '🌧️', + '293': '🌧️', + '296': '🌧️', + '299': '🌧️', + '302': '🌧️', + '305': '🌧️', + '308': '🌧️', + '311': '🌧️', + '314': '🌧️', + '317': '🌧️', + '320': '🌨️', + '323': '🌨️', + '326': '🌨️', + '329': '❄️ ', + '332': '❄️ ', + '335': '❄️ ', + '338': '❄️ ', + '350': '🌧️', + '353': '🌧️', + '356': '🌧️', + '359': '🌧️', + '362': '🌧️', + '365': '🌧️', + '368': '🌧️', + '371': '❄️', + '374': '🌨️', + '377': '🌨️', + '386': '🌨️', + '389': '🌨️', + '392': '🌧️', + '395': '❄️ ' +} + +data = {} + + +weather = requests.get("https://wttr.in/?format=j1").json() + + +def format_time(time): + return time.replace("00", "").zfill(2) + + +def format_temp(temp): + return (hour['FeelsLikeC']+"°").ljust(3) + + +def format_chances(hour): + chances = { + "chanceoffog": "Fog", + "chanceoffrost": "Frost", + "chanceofovercast": "Overcast", + "chanceofrain": "Rain", + "chanceofsnow": "Snow", + "chanceofsunshine": "Sunshine", + "chanceofthunder": "Thunder", + "chanceofwindy": "Wind" + } + + conditions = [] + for event in chances.keys(): + if int(hour[event]) > 0: + conditions.append(chances[event]+" "+hour[event]+"%") + return ", ".join(conditions) + +tempint = int(weather['current_condition'][0]['FeelsLikeF']) +extrachar = '' +if tempint > 0 and tempint < 10: + extrachar = '+' + + +data['text'] = ' '+WEATHER_CODES[weather['current_condition'][0]['weatherCode']] + \ + " "+extrachar+weather['current_condition'][0]['FeelsLikeC']+"°" + +data['tooltip'] = f"{weather['current_condition'][0]['weatherDesc'][0]['value']} {weather['current_condition'][0]['temp_C']}°\n" +data['tooltip'] += f"Feels like: {weather['current_condition'][0]['FeelsLikeC']}°\n" +data['tooltip'] += f"Wind: {weather['current_condition'][0]['windspeedKmph']}Km/h\n" +data['tooltip'] += f"Humidity: {weather['current_condition'][0]['humidity']}%\n" +for i, day in enumerate(weather['weather']): + data['tooltip'] += f"\n" + if i == 0: + data['tooltip'] += "Today, " + if i == 1: + data['tooltip'] += "Tomorrow, " + data['tooltip'] += f"{day['date']}\n" + data['tooltip'] += f"⬆️ {day['maxtempC']}° ⬇️ {day['mintempF']}° " + data['tooltip'] += f"🌅 {day['astronomy'][0]['sunrise']} 🌇 {day['astronomy'][0]['sunset']}\n" + for hour in day['hourly']: + if i == 0: + if int(format_time(hour['time'])) < datetime.now().hour-2: + continue + data['tooltip'] += f"{format_time(hour['time'])} {WEATHER_CODES[hour['weatherCode']]} {format_temp(hour['FeelsLikeC'])} {hour['weatherDesc'][0]['value']}, {format_chances(hour)}\n" + + +print(json.dumps(data)) + diff --git a/bar/waybar/style.css b/bar/waybar/style.css new file mode 100755 index 0000000..98b1476 --- /dev/null +++ b/bar/waybar/style.css @@ -0,0 +1,154 @@ +* { + border: none; + border-radius: 0; + font-family: "JetBrainsMono Nerd Font", "Font Awesome 6 Free"; + font-weight: bold; + font-size: 16px; + min-height: 0; +} + +window#waybar { + background: rgba(21, 18, 27, 0); + color: #cdd6f4; +} + +tooltip { + background: #1e1e2e; + border-radius: 10px; + border-width: 2px; + border-style: solid; + border-color: #11111b; +} + +#workspaces button { + padding: 5px; + color: #313244; + margin-right: 5px; +} + +#workspaces button.active { + color: #a6adc8; +} + +#workspaces button.focused { + color: #a6adc8; + background: #eba0ac; + border-radius: 10px; +} + +#workspaces button.urgent { + color: #11111b; + background: #a6e3a1; + border-radius: 10px; +} + +#workspaces button:hover { + background: #11111b; + color: #cdd6f4; + border-radius: 10px; +} + +#custom-power_profile, +#custom-weather, +#window, +#clock, +#battery, +#pulseaudio, +#network, +#bluetooth, +#temperature, +#workspaces, +#tray, +#backlight { + background: #1e1e2e; + opacity: 0.8; + padding: 0px 10px; + margin: 3px 0px; + margin-top: 10px; + border: 1px solid #181825; +} + +#temperature { + border-radius: 10px 0px 0px 10px; +} + +#temperature.critical { + color: #eba0ac; +} + +#backlight { + border-radius: 10px 0px 0px 10px; +} + +#tray { + border-radius: 10px; + margin-right: 10px; +} + +#workspaces { + background: #1e1e2e; + border-radius: 10px; + margin-left: 10px; + padding-right: 0px; + padding-left: 5px; +} + +#custom-power_profile { + color: #a6e3a1; + border-left: 0px; + border-right: 0px; +} + +#window { + border-radius: 10px; + margin-left: 60px; + margin-right: 60px; +} + +#clock { + color: #fab387; + border-radius: 10px 0px 0px 10px; + margin-left: 10px; + border-right: 0px; +} + +#network { + color: #f9e2af; + border-radius: 10px 0px 0px 10px; + border-left: 0px; + border-right: 0px; +} + +#bluetooth { + color: #89b4fa; + border-radius: 0px 10px 10px 0px; + margin-right: 10px +} + +#pulseaudio { + color: #89b4fa; + border-left: 0px; + border-right: 0px; +} + +#pulseaudio.microphone { + color: #cba6f7; + border-left: 0px; + border-right: 0px; + border-radius: 0px 10px 10px 0px; + margin-right: 10px; +} + +#battery { + color: #a6e3a1; + border-radius: 0 10px 10px 0; + margin-right: 10px; + border-left: 0px; +} + +#custom-weather { + border-radius: 0px 10px 10px 0px; + border-right: 0px; + margin-left: 0px; +} + diff --git a/de/hypr/gamemode.sh b/de/hypr/gamemode.sh new file mode 100755 index 0000000..350f52f --- /dev/null +++ b/de/hypr/gamemode.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env sh +HYPRGAMEMODE=$(hyprctl getoption animations:enabled | awk 'NR==2{print $2}') +if [ "$HYPRGAMEMODE" = 1 ] ; then + hyprctl --batch "\ + keyword animations:enabled 0;\ + keyword decoration:drop_shadow 0;\ + keyword decoration:blur 0;\ + keyword general:gaps_in 0;\ + keyword general:gaps_out 0;\ + keyword general:border_size 1;\ + keyword decoration:rounding 0" + exit +fi +hyprctl reload diff --git a/de/hypr/hyprland.conf b/de/hypr/hyprland.conf new file mode 100644 index 0000000..89636d0 --- /dev/null +++ b/de/hypr/hyprland.conf @@ -0,0 +1,127 @@ + +######################################################################################## +AUTOGENERATED HYPR CONFIG. +PLEASE USE THE CONFIG PROVIDED IN THE GIT REPO /examples/hypr.conf AND EDIT IT, +OR EDIT THIS ONE ACCORDING TO THE WIKI INSTRUCTIONS. +######################################################################################## + +# +# Please note not all available settings / options are set here. +# For a full list, see the wiki +# + +# See https://wiki.hyprland.org/Configuring/Monitors/ +monitor=,preferred,auto,auto + +# unscale XWayland +xwayland { + force_zero_scaling = true +} + +# See https://wiki.hyprland.org/Configuring/Keywords/ for more + +# Execute your favorite apps at launch +# exec-once = waybar & hyprpaper & firefox + +# Source a file (multi-file configs) +# source = ~/.config/hypr/myColors.conf + +# For all categories, see https://wiki.hyprland.org/Configuring/Variables/ +input { + kb_layout = fr + kb_variant = + kb_model = + kb_options = + kb_rules = + + follow_mouse = 1 + + touchpad { + natural_scroll = no + } + + sensitivity = 0 # -1.0 - 1.0, 0 means no modification. +} + +general { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + gaps_in = 5 + gaps_out = 20 + border_size = 2 + col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg + col.inactive_border = rgba(595959aa) + + layout = dwindle +} + +decoration { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + rounding = 10 + + blur { + enabled = true + size = 3 + passes = 1 + } + + drop_shadow = yes + shadow_range = 4 + shadow_render_power = 3 + col.shadow = rgba(1a1a1aee) +} + +animations { + enabled = yes + + # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more + + bezier = myBezier, 0.05, 0.9, 0.1, 1.05 + + animation = windows, 1, 7, myBezier + animation = windowsOut, 1, 7, default, popin 80% + animation = border, 1, 10, default + animation = borderangle, 1, 8, default + animation = fade, 1, 7, default + animation = workspaces, 1, 6, default +} + +dwindle { + # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more + pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = yes # you probably want this +} + +master { + # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more + new_is_master = true +} + +gestures { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + workspace_swipe = off +} + +# Example per-device config +# See https://wiki.hyprland.org/Configuring/Keywords/#executing for more +device:epic-mouse-v1 { + sensitivity = -0.5 +} + +# Example windowrule v1 +# windowrule = float, ^(kitty)$ +# Example windowrule v2 +# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$ +# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more + +# Variables +$terminal = alacritty + +# Modular sourcing +$confDir = ~/.config/hypr/hyprland.conf.d +source = $confDir/environment.conf +source = $confDir/bindings.conf +source = $confDir/windowrules.conf +source = $confDir/startup.conf + diff --git a/de/hypr/hyprland.conf.d/bindings.conf b/de/hypr/hyprland.conf.d/bindings.conf new file mode 100644 index 0000000..d0ce144 --- /dev/null +++ b/de/hypr/hyprland.conf.d/bindings.conf @@ -0,0 +1,90 @@ +# See https://wiki.hyprland.org/Configuring/Keywords/ for more +$mainMod = SUPER + +# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more +bind = $mainMod, RETURN, exec, $terminal +bind = $mainMod, Q, killactive, +bind = $mainMod SHIFT, E, exit, +bind = $mainMod, E, exec, dolphin +bind = $mainMod, B, exec, firefox +bind = $mainMod SHIFT, SPACE, togglefloating, +bind = $mainMod, R, exec, wofi --show drun +bind = $mainMod, P, pseudo, # dwindle +bind = $mainMod, J, togglesplit, # dwindle + +# Screenshots +bind = $mainMod, F6, exec, grim -g "$(slurp)" - | wl-copy + +# ROG G15 Strix (2021) Specific binds +# bind = ,156, exec, rog-control-center # ASUS Armory crate key + +bind = ,XF86AudioMute, exec, swayosd-client --output-volume mute-toggle # Speaker Mute FN+F1 +bind = ,XF86AudioLowerVolume, exec, swayosd-client --output-volume lower # Volume lower key +bind = ,XF86AudioRaiseVolume, exec, swayosd-client --output-volume raise # Volume Higher key +bind = ,XF86AudioMicMute, exec, swayosd-client --input-volume mute-toggle # Mic mute key + +bind = ,XF86MonBrightnessDown, exec, swayosd-client --brightness lower # Screen brightness down FN+F7 +bind = ,XF86MonBrightnessUp, exec, swayosd-client --brightness raise # Screen brightness up FN+F8 +bind = ,237, exec, brightnessctl -d asus::kbd_backlight set 33%- # Keyboard brightness down FN+F2 +bind = ,238, exec, brightnessctl -d asus::kbd_backlight set 33%+ # Keyboard brightnes up FN+F3 +bind = ,XF86TouchpadToggle, exec, ~/.local/bin/toggle-touchpad +bind = ,XF86Sleep, exec, ~/.local/bin/togglescreen +# Led profile +bind = ,XF86Launch3, exec, asusctl led-mode -n +# Wayland gamemode +bind = WIN, F5, exec, ~/.config/hypr/gamemode.sh + +# Waybar +bind = $mainMod, 64, exec, pkill -SIGUSR1 '^waybar$' + +# Audio controls +bind = , XF86AudioPlay, exec, playerctl play-pause +bind = , XF86AudioPause, exec, playerctl pause-pause +bind = , XF86AudioNext, exec, playerctl next +bind = , XF86AudioPrev, exec, playerctl previous + +# 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 + +# Moving windows +bind = $mainMod SHIFT, left, movewindow, l +bind = $mainMod SHIFT, right, movewindow, r +bind = $mainMod SHIFT, up, movewindow, u +bind = $mainMod SHIFT, down, movewindow, d + +bind = $mainMod, 10, workspace, 1 +bind = $mainMod, 11, workspace, 2 +bind = $mainMod, 12, workspace, 3 +bind = $mainMod, 13, workspace, 4 +bind = $mainMod, 14, workspace, 5 +bind = $mainMod, 15, workspace, 6 +bind = $mainMod, 16, workspace, 7 +bind = $mainMod, 17, workspace, 8 +bind = $mainMod, 18, workspace, 9 +bind = $mainMod, 19, workspace, 10 + +# Moving to workspaces +bind = $mainMod SHIFT, 10, movetoworkspacesilent, 1 +bind = $mainMod SHIFT, 11, movetoworkspacesilent, 2 +bind = $mainMod SHIFT, 12, movetoworkspacesilent, 3 +bind = $mainMod SHIFT, 13, movetoworkspacesilent, 4 +bind = $mainMod SHIFT, 14, movetoworkspacesilent, 5 +bind = $mainMod SHIFT, 15, movetoworkspacesilent, 6 +bind = $mainMod SHIFT, 16, movetoworkspacesilent, 7 +bind = $mainMod SHIFT, 17, movetoworkspacesilent, 8 +bind = $mainMod SHIFT, 18, movetoworkspacesilent, 9 +bind = $mainMod SHIFT, 19, movetoworkspacesilent, 10 + +# 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 + +# Fullscreen +bind = $mainMod, F, fullscreen diff --git a/de/hypr/hyprland.conf.d/environment.conf b/de/hypr/hyprland.conf.d/environment.conf new file mode 100644 index 0000000..b6ec1d2 --- /dev/null +++ b/de/hypr/hyprland.conf.d/environment.conf @@ -0,0 +1,34 @@ +# Backend +env = GDK_BACKEND, wayland,x11 +env = SDL_VIDEODRIVER, wayland +env = CLUTTER_BACKEND, wayland +env = _JAVA_AWT_WM_NONREPARENTING=1 + +# XDG +env = XDG_CURRENT_DESKTOP, Hyprland +env = XDG_SESSION_TYPE, wayland +env = XDG_SESSION_DESKTOP, Hyprland + +# Qt +env = QT_AUTO_SCREEN_SCALE_FACTOR, 1 +env = QT_QPA_PLATFORM, wayland;xcb +env = QT_WAYLAND_DISABLE_WINDOWDECORATION, 1 +env = QT_QPA_PLATFORMTHEME, qt6ct + +# Theming +env = GTK_THEME, Dracula +env = XCURSOR_SIZE, 24 + +# Applications +env = BROWSER, firefox +env = EDITOR, helix + +# Firefox +env = MOZ_ENABLE_WAYLAND, 1 + +#NVIDIA +env = __GLX_VENDOR_LIBRARY_NAME,nvidia +# env = __VK_LAYER_NV_optimus=NVIDIA_only +# env = __NV_PRIME_RENDER_OFFLOAD,1 # Tends to crash DE +env = __GL_THREADED_OPTIMIZATIONS,1 + diff --git a/de/hypr/hyprland.conf.d/startup.conf b/de/hypr/hyprland.conf.d/startup.conf new file mode 100644 index 0000000..d8d8589 --- /dev/null +++ b/de/hypr/hyprland.conf.d/startup.conf @@ -0,0 +1,7 @@ +# Startup +exec-once = waybar +exec-once = hyprpaper +exec-once = artix-pipewire-launcher +exec-once = /usr/lib/xdg-desktop-portal-hyprland +exec-once = swayosd-server +exec-once = udiskie diff --git a/de/hypr/hyprland.conf.d/windowrules.conf b/de/hypr/hyprland.conf.d/windowrules.conf new file mode 100644 index 0000000..ab3c19a --- /dev/null +++ b/de/hypr/hyprland.conf.d/windowrules.conf @@ -0,0 +1,11 @@ +# Window rules + +# Workspace 4 +windowrule = workspace 9 silent, ^(WebCord)$ + +# Floating windows +windowrule = float, ^(connman-gtk)$ +windowrule = float, ^(blueman-manager)$ +windowrule = size 40% 40%, ^(blueman-manager)$ +windowrule = center, ^(blueman-manager)$ + diff --git a/de/hypr/hyprpaper.conf b/de/hypr/hyprpaper.conf new file mode 100644 index 0000000..1cd3c97 --- /dev/null +++ b/de/hypr/hyprpaper.conf @@ -0,0 +1,7 @@ +# Preload +preload = ~/Images/Wallpapers/ExylCollection/Desktop Flute Altar by Exyl.png + +# Definition +wallpaper = , ~/Images/Wallpapers/ExylCollection/Desktop Flute Altar by Exyl.png + + diff --git a/sync b/sync index 31535bb..3daa3e4 100755 --- a/sync +++ b/sync @@ -13,6 +13,7 @@ parser.add_argument('action', choices=['save', 'restore']) synced_files = [ ('editor/helix/', '~/.config/helix/'), ('de/i3/', '~/.config/i3/'), + ('de/hypr/', '~/.config/hypr/'), ('shell/bash/.bashrc', '~/.bashrc'), ('shell/bash/.bash_aliases', '~/.bash_aliases'), ('shell/bash/.bash_env', '~/.bash_env'), @@ -20,6 +21,7 @@ synced_files = [ ('shell/nu/.nu_aliases', '~/.nu_aliases'), ('term/rio/', '~/.config/rio/'), ('term/alacritty/', '~/.config/alacritty/'), + ('bar/waybar/', '~/.config/waybar/'), ] def save():