diff --git a/dotfiles/.config/hypr/.initial_startup_done b/dotfiles/.config/hypr/.initial_startup_done new file mode 100644 index 0000000..e69de29 diff --git a/dotfiles/.config/hypr/UserConfigs/00-Readme b/dotfiles/.config/hypr/UserConfigs/00-Readme new file mode 100644 index 0000000..91a0a55 --- /dev/null +++ b/dotfiles/.config/hypr/UserConfigs/00-Readme @@ -0,0 +1,6 @@ +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# HyprFlux Dots + +Settings have been massivily modified as to work in a more simple mannor + +I will update the Hyprland-Dots wiki for guidance. Make sure to check out changelogs as well diff --git a/dotfiles/.config/hypr/UserConfigs/ENVariables.conf b/dotfiles/.config/hypr/UserConfigs/ENVariables.conf new file mode 100644 index 0000000..15cad88 --- /dev/null +++ b/dotfiles/.config/hypr/UserConfigs/ENVariables.conf @@ -0,0 +1,89 @@ +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# Environment variables. See https://wiki.hyprland.org/Configuring/Environment-variables/ + +# Set your defaults editor through ENV in ~/.config/hypr/UserConfigs/01-UserDefaults.conf + +# environment-variables +# Toolkit Backend Variables +env = GDK_BACKEND,wayland,x11,* +env = QT_QPA_PLATFORM,wayland;xcb +env = CLUTTER_BACKEND,wayland + +#Run SDL2 applications on Wayland. +#Remove or set to x11 if games that provide older versions of SDL cause compatibility issues +#env = SDL_VIDEODRIVER,wayland + +# xdg Specifications +env = XDG_CURRENT_DESKTOP,Hyprland +env = XDG_SESSION_DESKTOP,Hyprland +env = XDG_SESSION_TYPE,wayland + +# QT Variables +env = QT_AUTO_SCREEN_SCALE_FACTOR,1 +env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1 +env = QT_QPA_PLATFORMTHEME,qt5ct +env = QT_QPA_PLATFORMTHEME,qt6ct + +# hyprland-qt-support +env = QT_QUICK_CONTROLS_STYLE,org.hyprland.style + +# xwayland apps scale fix (useful if you are use monitor scaling). +# Set same value if you use scaling in Monitors.conf +# 1 is 100% 1.5 is 150% +# see https://wiki.hyprland.org/Configuring/XWayland/ +env = GDK_SCALE,1 +env = QT_SCALE_FACTOR,1 + +# Bibata-Modern-Ice-Cursor +# NOTE! You must have the hyprcursor version to activate this. +# https://wiki.hyprland.org/Hypr-Ecosystem/hyprcursor/ +env = HYPRCURSOR_THEME,Bibata-Modern-Classic +env = HYPRCURSOR_SIZE,24 + +# firefox +env = MOZ_ENABLE_WAYLAND,1 + +# electron >28 apps (may help) ## +# https://www.electronjs.org/docs/latest/api/environment-variables +env = ELECTRON_OZONE_PLATFORM_HINT,auto # auto selects Wayland if possible, X11 otherwise + +# NVIDIA +# This is from Hyprland Wiki. Below will be activated nvidia gpu detected +# See hyprland wiki https://wiki.hyprland.org/Nvidia/#environment-variables + +#env = LIBVA_DRIVER_NAME,nvidia +#env = __GLX_VENDOR_LIBRARY_NAME,nvidia +#env = NVD_BACKEND,direct +#env = GSK_RENDERER,ngl + +# additional ENV's for nvidia. Caution, activate with care +#env = GBM_BACKEND,nvidia-drm + +#env = __GL_GSYNC_ALLOWED,1 #adaptive Vsync +#env = __NV_PRIME_RENDER_OFFLOAD,1 +#env = __VK_LAYER_NV_optimus,NVIDIA_only +#env = WLR_DRM_NO_ATOMIC,1 + +# FOR VM and POSSIBLY NVIDIA +# LIBGL_ALWAYS_SOFTWARE software mesa rendering +#env = LIBGL_ALWAYS_SOFTWARE,1 # Warning. May cause hyprland to crash +#env = WLR_RENDERER_ALLOW_SOFTWARE,1 + +# nvidia firefox (for hardware acceleration on FF)? +# check this post https://github.com/elFarto/nvidia-vaapi-driver#configuration +#env = MOZ_DISABLE_RDD_SANDBOX,1 +#env = EGL_PLATFORM,wayland + +#### Aquamarine Environment Variables #### ( Hyprland > 0.45 ) +# https://wiki.hyprland.org/Configuring/Environment-variables/#aquamarine-environment-variables----ref-httpsgithubcomhyprwmaquamarineblobmaindocsenvmd--- +# env = AQ_TRACE,1 # Enables more verbose logging. +# env = AQ_DRM_DEVICES,/dev/dri/card1:/dev/dri/card0 # Set an explicit list of DRM devices (GPUs) to use. It’s a colon-separated list of paths, with the first being the primary. E.g. /dev/dri/card1:/dev/dri/card0 +# env = AQ_MGPU_NO_EXPLICIT,1 # Disables explicit syncing on mgpu buffers +# env = AQ_NO_MODIFIERS,1 # Disables modifiers for DRM buffers + +#### Hyprland Environment Variables #### +# https://wiki.hyprland.org/Configuring/Environment-variables/#hyprland-environment-variables +# env = HYPRLAND_TRACE,1 # Enables more verbose logging. +# env = HYPRLAND_NO_RT,1 # Disables realtime priority setting by Hyprland. +# env = HYPRLAND_NO_SD_NOTIFY,1 # If systemd, disables the 'sd_notify' calls. +# env = HYPRLAND_NO_SD_VARS,1 # Disables management of variables in systemd and dbus activation environments. diff --git a/dotfiles/.config/hypr/UserConfigs/Keybinds.conf b/dotfiles/.config/hypr/UserConfigs/Keybinds.conf new file mode 100644 index 0000000..208766d --- /dev/null +++ b/dotfiles/.config/hypr/UserConfigs/Keybinds.conf @@ -0,0 +1,210 @@ +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# This is where you put your own keybinds. Be Mindful to check as well ~/.config/hypr/configs/Keybinds.conf to avoid conflict +# if you think I should replace the Pre-defined Keybinds in ~/.config/hypr/configs/Keybinds.conf , submit an issue or let me know in DC and present me a valid reason as to why, such as conflicting with global shortcuts, etc etc + +# See https://wiki.hyprland.org/Configuring/Keywords/ for more settings and variables +# See also Laptops.conf for laptops keybinds + +# /* ---- ✴️ Variables ✴️ ---- */ # +$mainMod = SUPER +$scriptsDir = $HOME/.config/hypr/scripts +$UserScripts = $HOME/.config/hypr/UserScripts + +# settings for User defaults apps - set your default terminal and file manager on this file +$edit=${EDITOR:-nvim} + +# These two are for UserKeybinds.conf & Waybar Modules +$term = foot # Terminal +$files = thunar # File Manager + +# Default Search Engine for ROFI Search (SUPER S) +$Search_Engine = "https://www.google.com/search?q={}" + +# common shortcuts +bind = $mainMod, SPACE, exec, .config/rofi/launchers/type-4/launcher.sh # desktop overview (if installed) +bind = $mainMod, Q, killactive, # close active (not kill) +bind = $mainMod SHIFT, Q, exec, $scriptsDir/KillActiveProcess.sh # Kill active process +bind = $mainMod, Return, exec, $term #terminal +bind = $mainMod, F, exec, $files #file manager +bind = $mainMod, B, exec, zen-browser # Launch Zen Browser New Everytime +bind = $mainMod, V, exec, $scriptsDir/ClipManager.sh # Clipboard Manager +bind = $mainMod, C, exec, code --ozone-platform=x11 # Visual Studio Code +bind = $mainMod, O, exec, obsidian --ozone-platform=x11 # Obsidian +bind = $mainMod, X, exec, vesktop # Vesktop(Discord) +bind = $mainMod, M, exec, fdm # Free Downlaod Manager +bind = $mainMod, W, exec, waypaper # Wayland Wallpaper Setter +bind = $mainMod, L, exec, hyprlock # Screen Locker +bind = $mainMod, DELETE, exec, ~/.config/rofi/powermenu/type-2/powermenu.sh # Power Menu +bind = $mainMod, S, exec, cd /home/thomas/hyprmod && uv run hyprmod # Hyprmod - A Hyprland settings manager (if installed) +bind = $mainMod SHIFT, R, exec, $scriptsDir/Refresh.sh # Refresh waybar, swaync, rofirrr +bind = $mainMod, N, exec, swaync-client -t -sw # swayNC notification panel + +# FEATURES / EXTRAS +bind = $mainMod SHIFT, F, fullscreen # whole full screen +bind = $mainMod SHIFT, SPACE, togglefloating, #Float Mode + + +# Desktop zooming or magnifier +bind = $mainMod ALT, mouse_down, exec, hyprctl keyword cursor:zoom_factor "$(hyprctl getoption cursor:zoom_factor | awk 'NR==1 {factor = $2; if (factor < 1) {factor = 1}; print factor * 2.0}')" +bind = $mainMod ALT, mouse_up, exec, hyprctl keyword cursor:zoom_factor "$(hyprctl getoption cursor:zoom_factor | awk 'NR==1 {factor = $2; if (factor < 1) {factor = 1}; print factor / 2.0}')" + +## NOTES for ja (Hyprland version 0.39 (Ubuntu 24.04)) +#bind = $mainMod ALT, mouse_down, exec, hyprctl keyword misc:cursor_zoom_factor "$(hyprctl getoption misc:cursor_zoom_factor | awk 'NR==1 {factor = $2; if (factor < 1) {factor = 1}; print factor * 2.0}')" +#bind = $mainMod ALT, mouse_up, exec, hyprctl keyword misc:cursor_zoom_factor "$(hyprctl getoption misc:cursor_zoom_factor | awk 'NR==1 {factor = $2; if (factor < 1) {factor = 1}; print factor / 2.0}')" + +# Waybar / Bar related +bind = $mainMod CTRL ALT, B, exec, pkill -SIGUSR1 waybar # Toggle hide/show waybar + +# FEATURES / EXTRAS (UserScripts) +bind = $mainMod SHIFT, A, exec, $scriptsDir/Animations.sh #hyprland animations menu +bind = $mainMod SHIFT, Z, exec, $UserScripts/ZshChangeTheme.sh # Change oh-my-zsh theme + +####################################################################################################################################### +#Default Keybinds# +####################################################################################################################################### + + +bind = CTRL ALT, Delete, exec, hyprctl dispatch exit 0 # exit Hyprland + +# Master Layout +bind = $mainMod CTRL, D, layoutmsg, removemaster +bind = $mainMod, I, layoutmsg, addmaster +bind = $mainMod, J, layoutmsg, cyclenext +bind = $mainMod, K, layoutmsg, cycleprev +bind = $mainMod CTRL, Return, layoutmsg, swapwithmaster + +# Dwindle Layout +bind = $mainMod SHIFT, I, togglesplit # only works on dwindle layout +bind = $mainMod, P, pseudo, # dwindle + +# Special Keys / Hot Keys +bindel = , xf86audioraisevolume, exec, $scriptsDir/Volume.sh --inc # volume up +bindel = , xf86audiolowervolume, exec, $scriptsDir/Volume.sh --dec # volume down +bindl = , xf86AudioMicMute, exec, $scriptsDir/Volume.sh --toggle-mic # mic mute +bindl = , xf86audiomute, exec, $scriptsDir/Volume.sh --toggle # mute +bindl = , xf86Sleep, exec, systemctl suspend # sleep button +bindl = , xf86Rfkill, exec, $scriptsDir/AirplaneMode.sh # Airplane mode + +# media controls using keyboards +bindl = , xf86AudioPlayPause, exec, $scriptsDir/MediaCtrl.sh --pause +bindl = , xf86AudioPause, exec, $scriptsDir/MediaCtrl.sh --pause +bindl = , xf86AudioPlay, exec, $scriptsDir/MediaCtrl.sh --pause +bindl = , xf86AudioNext, exec, $scriptsDir/MediaCtrl.sh --nxt +bindl = , xf86AudioPrev, exec, $scriptsDir/MediaCtrl.sh --prv +bindl = , xf86audiostop, exec, $scriptsDir/MediaCtrl.sh --stop + +# Resize windows +binde = $mainMod SHIFT, left, resizeactive,-50 0 +binde = $mainMod SHIFT, right, resizeactive,50 0 +binde = $mainMod SHIFT, up, resizeactive,0 -50 +binde = $mainMod SHIFT, down, resizeactive,0 50 + +# Move windows +bind = $mainMod CTRL, left, movewindow, l +bind = $mainMod CTRL, right, movewindow, r +bind = $mainMod CTRL, up, movewindow, u +bind = $mainMod CTRL, down, movewindow, d + +# Swap windows +bind = $mainMod ALT, left, swapwindow, l +bind = $mainMod ALT, right, swapwindow, r +bind = $mainMod ALT, up, swapwindow, u +bind = $mainMod ALT, down, swapwindow, d + +# 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 related +bind = $mainMod, tab, workspace, m+1 +bind = $mainMod SHIFT, tab, workspace, m-1 + +# Special workspace +# bind = $mainMod SHIFT, U, movetoworkspace, special +# bind = $mainMod, U, togglespecialworkspace, +bind = $mainMod, U, togglespecialworkspace, nyx +bind = $mainMod SHIFT, U, movetoworkspace, special:nyx + + +# The following mappings use the key codes to better support various keyboard layouts +# 1 is code:10, 2 is code 11, etc +# Switch workspaces with mainMod + [0-9] +bind = $mainMod, code:10, workspace, 1 # NOTE: code:10 = key 1 +bind = $mainMod, code:11, workspace, 2 # NOTE: code:11 = key 2 +bind = $mainMod, code:12, workspace, 3 # NOTE: code:12 = key 3 +bind = $mainMod, code:13, workspace, 4 # NOTE: code:13 = key 4 +bind = $mainMod, code:14, workspace, 5 # NOTE: code:14 = key 5 +bind = $mainMod, code:15, workspace, 6 # NOTE: code:15 = key 6 +bind = $mainMod, code:16, workspace, 7 # NOTE: code:16 = key 7 +bind = $mainMod, code:17, workspace, 8 # NOTE: code:17 = key 8 +bind = $mainMod, code:18, workspace, 9 # NOTE: code:18 = key 9 +bind = $mainMod, code:19, workspace, 10 # NOTE: code:19 = key 0 + +# Move active window and follow to workspace mainMod + SHIFT [0-9] +bind = $mainMod SHIFT, code:10, movetoworkspace, 1 # NOTE: code:10 = key 1 +bind = $mainMod SHIFT, code:11, movetoworkspace, 2 # NOTE: code:11 = key 2 +bind = $mainMod SHIFT, code:12, movetoworkspace, 3 # NOTE: code:12 = key 3 +bind = $mainMod SHIFT, code:13, movetoworkspace, 4 # NOTE: code:13 = key 4 +bind = $mainMod SHIFT, code:14, movetoworkspace, 5 # NOTE: code:14 = key 5 +bind = $mainMod SHIFT, code:15, movetoworkspace, 6 # NOTE: code:15 = key 6 +bind = $mainMod SHIFT, code:16, movetoworkspace, 7 # NOTE: code:16 = key 7 +bind = $mainMod SHIFT, code:17, movetoworkspace, 8 # NOTE: code:17 = key 8 +bind = $mainMod SHIFT, code:18, movetoworkspace, 9 # NOTE: code:18 = key 9 +bind = $mainMod SHIFT, code:19, movetoworkspace, 10 # NOTE: code:19 = key 0 +bind = $mainMod SHIFT, bracketleft, movetoworkspace, -1 # brackets [ +bind = $mainMod SHIFT, bracketright, movetoworkspace, +1 # brackets ] + +# Move active window to a workspace silently mainMod + CTRL [0-9] +bind = $mainMod CTRL, code:10, movetoworkspacesilent, 1 # NOTE: code:10 = key 1 +bind = $mainMod CTRL, code:11, movetoworkspacesilent, 2 # NOTE: code:11 = key 2 +bind = $mainMod CTRL, code:12, movetoworkspacesilent, 3 # NOTE: code:12 = key 3 +bind = $mainMod CTRL, code:13, movetoworkspacesilent, 4 # NOTE: code:13 = key 4 +bind = $mainMod CTRL, code:14, movetoworkspacesilent, 5 # NOTE: code:14 = key 5 +bind = $mainMod CTRL, code:15, movetoworkspacesilent, 6 # NOTE: code:15 = key 6 +bind = $mainMod CTRL, code:16, movetoworkspacesilent, 7 # NOTE: code:16 = key 7 +bind = $mainMod CTRL, code:17, movetoworkspacesilent, 8 # NOTE: code:17 = key 8 +bind = $mainMod CTRL, code:18, movetoworkspacesilent, 9 # NOTE: code:18 = key 9 +bind = $mainMod CTRL, code:19, movetoworkspacesilent, 10 # NOTE: code:19 = key 0 +bind = $mainMod CTRL, bracketleft, movetoworkspacesilent, -1 # brackets [ +bind = $mainMod CTRL, bracketright, movetoworkspacesilent, +1 # brackets ] + +# Scroll through existing workspaces with mainMod + scroll +bind = $mainMod, mouse_down, workspace, e+1 +bind = $mainMod, mouse_up, workspace, e-1 +bind = $mainMod, period, workspace, e+1 +bind = $mainMod, comma, workspace, e-1 + +# Move/resize windows with mainMod + LMB/RMB and dragging +bindm = $mainMod, mouse:272, movewindow # NOTE: mouse:272 = left click +bindm = $mainMod, mouse:273, resizewindow # NOTE: mouse:272 = right click + +######################################################################################################### +# Laptop specific keybinds +######################################################################################################### + +# for disabling Touchpad. hyprctl devices to get device name. +$Touchpad_Device=asue1209:00-04f3:319f-touchpad + +binde = , xf86KbdBrightnessDown, exec, $scriptsDir/BrightnessKbd.sh --dec # decrease keyboard brightness +binde = , xf86KbdBrightnessUp, exec, $scriptsDir/BrightnessKbd.sh --inc # increase keyboard brightness +bind = , xf86Launch1, exec, rog-control-center # ASUS Armory crate button +bind = , xf86Launch3, exec, asusctl led-mode -n # FN+F4 Switch keyboard RGB profile +bind = , xf86Launch4, exec, asusctl profile -n # FN+F5 change of fan profiles (Quite, Balance, Performance) +binde = , xf86MonBrightnessDown, exec, $scriptsDir/Brightness.sh --dec # decrease monitor brightness +binde = , xf86MonBrightnessUp, exec, $scriptsDir/Brightness.sh --inc # increase monitor brightness +bind = , xf86TouchpadToggle, exec, $scriptsDir/TouchPad.sh # disable touchpad + +# Screenshot keybindings using F6 (no PrinSrc button) +#bind = $mainMod, F6, exec, $scriptsDir/ScreenShot.sh --now # screenshot +#bind = $mainMod SHIFT, F6, exec, $scriptsDir/ScreenShot.sh --area # screenshot (area) +#bind = $mainMod CTRL, F6, exec, $scriptsDir/ScreenShot.sh --in5 # # screenshot (5 secs delay) +#bind = $mainMod ALT, F6, exec, $scriptsDir/ScreenShot.sh --in10 # screenshot (10 secs delay) +#bind = ALT, F6, exec, $scriptsDir/ScreenShot.sh --active # screenshot (active window only) + +$TOUCHPAD_ENABLED = true +device { + name = $Touchpad_Device + enabled = $TOUCHPAD_ENABLED +} diff --git a/dotfiles/.config/hypr/UserConfigs/LaptopDisplay.conf b/dotfiles/.config/hypr/UserConfigs/LaptopDisplay.conf new file mode 100644 index 0000000..9f76658 --- /dev/null +++ b/dotfiles/.config/hypr/UserConfigs/LaptopDisplay.conf @@ -0,0 +1,4 @@ +# NOTE, THIS FILE IS BEING USED by disabling Laptop display monitor behaviour when closing lid. +# See notes on Laptops.conf + +#monitor = eDP-1, preferred, auto, 1 diff --git a/dotfiles/.config/hypr/UserConfigs/Laptops.conf b/dotfiles/.config/hypr/UserConfigs/Laptops.conf new file mode 100644 index 0000000..d603417 --- /dev/null +++ b/dotfiles/.config/hypr/UserConfigs/Laptops.conf @@ -0,0 +1,31 @@ +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# See https://wiki.hyprland.org/Configuring/Keywords/ for more variable settings +# These configs are mostly for laptops. This is addemdum to Keybinds.conf + +$mainMod = SUPER +$scriptsDir = $HOME/.config/hypr/scripts +$UserConfigs = $HOME/.config/hypr/UserConfigs + + +# Below are useful when you are connecting your laptop in external display +# Suggest you edit below for your laptop display +# From WIKI This is to disable laptop monitor when lid is closed. +# consult https://wiki.hyprland.org/hyprland-wiki/pages/Configuring/Binds/#switches +#bindl = , switch:off:Lid Switch,exec,hyprctl keyword monitor "eDP-1, preferred, auto, 1" +#bindl = , switch:on:Lid Switch,exec,hyprctl keyword monitor "eDP-1, disable" + + +# WARNING! Using this method has some caveats!! USE THIS PART WITH SOME CAUTION! +# CONS of doing this, is that you need to set up your wallpaper (SUPER W) and choose wallpaper. +# CAVEATS! Sometimes the Main Laptop Monitor DOES NOT have display that it needs to re-connect your external monitor +# One work around is to ensure that before shutting down laptop, MAKE SURE your laptop lid is OPEN!! +# Make sure to comment (put # on the both the bindl = , switch ......) above +# NOTE: Display for laptop are being generated into LaptopDisplay.conf +# This part is to be use if you do not want your main laptop monitor to wake up during say wallpaper change etc + +#bindl = , switch:off:Lid Switch,exec,echo "monitor = eDP-1, preferred, auto, 1" > $UserConfigs/LaptopDisplay.conf +#bindl = , switch:on:Lid Switch,exec,echo "monitor = eDP-1, disable" > $UserConfigs/LaptopDisplay.conf + +# for laptop-lid action (to erase the last entry) +#exec-once = echo "monitor = eDP-1, preferred, auto, 1" > $HOME/.config/hypr/UserConfigs/LaptopDisplay.conf +# diff --git a/dotfiles/.config/hypr/UserConfigs/Startup_Apps.conf b/dotfiles/.config/hypr/UserConfigs/Startup_Apps.conf new file mode 100644 index 0000000..4726ba3 --- /dev/null +++ b/dotfiles/.config/hypr/UserConfigs/Startup_Apps.conf @@ -0,0 +1,43 @@ +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# Commands and Apps to be executed at launch + +$scriptsDir = $HOME/.config/hypr/scripts + +# wallpaper stuff +exec-once = awww-daemon --format xrgb +#exec-once = mpvpaper '*' -o "load-scripts=no no-audio --loop" $livewallpaper + +# Startup +exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP +exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP + +# Polkit (Polkit Gnome / KDE) +exec-once = $scriptsDir/Polkit.sh + +# starup apps +exec-once = nm-applet --indicator +exec-once = swaync +#exec-once = ags +#exec-once = blueman-applet +#exec-once = rog-control-center +exec-once = waybar +exec-once = qs # quickshell AGS Desktop Overview alternative + +#clipboard manager +exec-once = wl-paste --type text --watch cliphist store +exec-once = wl-paste --type image --watch cliphist store + +# Starting hypridle to start hyprlock +exec-once = hypridle + +exec-once = hyprctl dispatch workspace 3 +exec-once = /usr/bin/Plexamp.AppImage && +exec-once = sleep 3 && vesktop +exec-once = hyprctl dispatch workspace 1 +exec-once = bitwarden-desktop --ozone-platform-hint=auto --silent + +# Here are list of features available but disabled by default +# exec-once = awww-daemon --format xrgb && awww img $HOME/Pictures/wallpapers/mecha-nostalgia.png # persistent wallpaper + +# xdg-desktop-portal-hyprland (should be auto starting. However, you can force to start) +#exec-once = $scriptsDir/PortalHyprland.sh diff --git a/dotfiles/.config/hypr/UserConfigs/UserAnimations.conf b/dotfiles/.config/hypr/UserConfigs/UserAnimations.conf new file mode 100644 index 0000000..c8e89e0 --- /dev/null +++ b/dotfiles/.config/hypr/UserConfigs/UserAnimations.conf @@ -0,0 +1,26 @@ +# HyprFlux — https://github.com/ahmad9059/HyprFlux + +animations { + enabled = yes + + bezier = wind, 0.05, 0.9, 0.1, 1.05 + bezier = winIn, 0.1, 1.1, 0.1, 1.1 + bezier = winOut, 0.3, -0.3, 0, 1 + bezier = liner, 1, 1, 1, 1 + bezier = overshot, 0.05, 0.9, 0.1, 1.05 + bezier = smoothOut, 0.5, 0, 0.99, 0.99 + bezier = smoothIn, 0.5, -0.5, 0.68, 1.5 + + animation = windows, 1, 6, wind, slide + animation = windowsIn, 1, 5, winIn, slide + animation = windowsOut, 1, 3, smoothOut, slide + animation = windowsMove, 1, 5, wind, slide + animation = border, 1, 1, liner + animation = borderangle, 1, 180, liner, loop #used by rainbow borders and rotating colors + animation = fade, 1, 3, smoothOut + animation = workspaces, 1, 5, overshot + + # animations for -git or version >0.42.0 + animation = workspacesIn, 1, 5, winIn, slide + animation = workspacesOut, 1, 5, winOut, slide +} \ No newline at end of file diff --git a/dotfiles/.config/hypr/UserConfigs/UserDecorations.conf b/dotfiles/.config/hypr/UserConfigs/UserDecorations.conf new file mode 100644 index 0000000..9139a5d --- /dev/null +++ b/dotfiles/.config/hypr/UserConfigs/UserDecorations.conf @@ -0,0 +1,58 @@ +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# Decoration Settings + +# Hyprland Wiki Links +# Animation - https://wiki.hyprland.org/Configuring/Animations/ +# Decoration - https://wiki.hyprland.org/Configuring/Variables/#decoration + +# HyprFlux static color palette +source = $HOME/.config/hypr/colours/hyprflux-colors.conf + +general { + border_size = 0 + gaps_in = 2 + gaps_out = 4 + + # col.active_border = $color12 + # col.inactive_border = $color10 +} + +decoration { + rounding = 10 + + active_opacity = 1.0 + inactive_opacity = 0.9 + fullscreen_opacity = 1.0 + + dim_inactive = true + dim_strength = 0.1 + dim_special = 0.8 + + shadow { + enabled = false + range = 3 + render_power = 1 + + color = $color12 + color_inactive = $color10 + } + + + blur { + enabled = true + size = 6 + passes = 2 + ignore_opacity = true + new_optimizations = true + special = true + popups = true + } +} + +group { + col.border_active = $color15 + + groupbar { + col.active = $color0 + } +} diff --git a/dotfiles/.config/hypr/UserConfigs/UserSettings.conf b/dotfiles/.config/hypr/UserConfigs/UserSettings.conf new file mode 100644 index 0000000..f1d1b24 --- /dev/null +++ b/dotfiles/.config/hypr/UserConfigs/UserSettings.conf @@ -0,0 +1,118 @@ +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# User Settings +# This is where you put your own settings as this will not be touched during update +# if the upgrade.sh is used. + +# refer to Hyprland wiki for more info https://wiki.hyprland.org/Configuring/Variables/ + +# NOTE: some settings are in ~/.config/hypr/UserConfigs/UserDecorAnimations.conf + +dwindle { + pseudotile = true + preserve_split = true + #smart_split = true + special_scale_factor = 1 +} + +master { + new_status = master + new_on_top = 1 + mfact = 0.5 +} + +general { + resize_on_border = true + + layout = dwindle +} + +input { + kb_layout = gb + kb_variant = + kb_model = + kb_options = + kb_rules = + repeat_rate = 50 + repeat_delay = 300 + sensitivity = 0 #mouse sensitivity + #accel_profile = # flat or adaptive or blank or EMPTY means libinput’s default mode + numlock_by_default = true + left_handed = false + follow_mouse = 1 + float_switch_override_focus = false + + touchpad { + disable_while_typing = true + natural_scroll = true + clickfinger_behavior = false + middle_button_emulation = false + tap-to-click = true + drag_lock = false + } + + # below for devices with touchdevice ie. touchscreen + touchdevice { + enabled = true + } + + # below is for table see link above for proper variables + tablet { + transform = 0 + left_handed = 0 + } +} + +gestures { + # workspace_swipe = true + # workspace_swipe_fingers = 3 + workspace_swipe_distance = 500 + workspace_swipe_invert = true + workspace_swipe_min_speed_to_force = 30 + workspace_swipe_cancel_ratio = 0.5 + workspace_swipe_create_new = true + workspace_swipe_forever = true + #workspace_swipe_use_r = true #uncomment if wanted a forever create a new workspace with swipe right +} + +misc { + disable_hyprland_logo = true + disable_splash_rendering = true + vfr = true + vrr = 2 + mouse_move_enables_dpms = true + enable_swallow = off + swallow_regex = ^(kitty)$ + focus_on_activate = false + initial_workspace_tracking = 0 + middle_click_paste = false + enable_anr_dialog = true # Application not Responding (ANR) + anr_missed_pings = 15 # ANR Threshold default 1 is too low +} + +#opengl { +# nvidia_anti_flicker = true +#} + +binds { + workspace_back_and_forth = true + allow_workspace_cycles = true + pass_mouse_when_bound = false +} + +#Could help when scaling and not pixelating +xwayland { + enabled = true + force_zero_scaling = true +} + +render { + direct_scanout = 0 +} + +cursor { + sync_gsettings_theme = true + no_hardware_cursors = 2 # change to 1 if want to disable + enable_hyprcursor = true + warp_on_change_workspace = 2 + no_warps = true +} diff --git a/dotfiles/.config/hypr/UserConfigs/WindowRules-copy.conf b/dotfiles/.config/hypr/UserConfigs/WindowRules-copy.conf new file mode 100644 index 0000000..cc58d0f --- /dev/null +++ b/dotfiles/.config/hypr/UserConfigs/WindowRules-copy.conf @@ -0,0 +1,744 @@ +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# For window rules and layerrules +# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more + +# NOTES: This is only for Hyprland > 0.48 + +# note for ja: This should NOT be implemented on Debian and Ubuntu + +# windowrule - tags - add apps under appropriate tag to use the same settings +# browser tags +windowrule { + name = windowrule-1 + tag = +browser + match:class = ^([Ff]irefox|org.mozilla.firefox|[Ff]irefox-esr|[Ff]irefox-bin)$ +} + +windowrule { + name = windowrule-2 + tag = +browser + match:class = ^([Gg]oogle-chrome(-beta|-dev|-unstable)?)$ +} + +windowrule { + name = windowrule-3 + tag = +browser + match:class = ^(chrome-.+-Default)$ # Chrome PWAs +} + +# windowrule = tag +browser, class:^([Cc]hromium)$ +windowrule { + name = windowrule-4 + tag = +browser + match:class = ^([Mm]icrosoft-edge(-stable|-beta|-dev|-unstable))$ +} + +windowrule { + name = windowrule-5 + tag = +browser + match:class = ^(Brave-browser(-beta|-dev|-unstable)?)$ +} + +windowrule { + name = windowrule-6 + tag = +browser + match:class = ^([Tt]horium-browser|[Cc]achy-browser)$ +} + +windowrule { + name = windowrule-7 + tag = +browser + match:class = ^(zen-alpha|zen)$ +} + + +# notif tags +windowrule { + name = windowrule-8 + tag = +notif + match:class = ^(swaync-control-center|swaync-notification-window|swaync-client|class)$ +} + + +# HyprFlux settings tag +windowrule { + name = windowrule-9 + tag = +HyprFlux_Cheat + match:title = ^(HyprFlux Quick Cheat Sheet)$ +} + +windowrule { + name = windowrule-10 + tag = +HyprFlux_Settings + match:title = ^(HyprFlux Settings)$ +} + +windowrule { + name = windowrule-11 + tag = +HyprFlux-Settings + match:class = ^(nwg-displays|nwg-look)$ +} + + +# terminal tags +windowrule { + name = windowrule-12 + tag = +terminal + match:class = ^(Alacritty|kitty|kitty-dropterm)$ +} + + +# email tags +windowrule { + name = windowrule-13 + tag = +email + match:class = ^([Tt]hunderbird|org.gnome.Evolution)$ +} + +windowrule { + name = windowrule-14 + tag = +email + match:class = ^(eu.betterbird.Betterbird)$ +} + + +# project tags +windowrule { + name = windowrule-15 + tag = +projects + match:class = ^(codium|codium-url-handler|VSCodium)$ +} + +windowrule { + name = windowrule-16 + tag = +projects + match:class = ^(VSCode|code-url-handler)$ +} + +windowrule { + name = windowrule-17 + tag = +projects + match:class = ^(jetbrains-.+)$ # JetBrains IDEs +} + + +# screenshare tags +windowrule { + name = windowrule-18 + tag = +screenshare + match:class = ^(com.obsproject.Studio)$ +} + + +# IM tags +# windowrule = tag +im, class:^([Dd]iscord|[Ww]ebCord|[Vv]esktop)$ +windowrule { + name = windowrule-19 + tag = +im + center = on + float = on + size = (monitor_w*0.6) (monitor_h*0.7) + match:class = ^([Ff]erdium)$ +} + +windowrule { + name = windowrule-20 + tag = +im + match:class = ^([Ww]hatsapp-for-linux)$ +} + +windowrule { + name = windowrule-21 + tag = +im + match:class = ^(ZapZap|com.rtosta.zapzap)$ +} + +windowrule { + name = windowrule-22 + tag = +im + match:class = ^(org.telegram.desktop|io.github.tdesktop_x64.TDesktop)$ +} + +windowrule { + name = windowrule-23 + tag = +im + match:class = ^(teams-for-linux)$ +} + +windowrule { + name = windowrule-24 + tag = +im + match:class = ^(im.riot.Riot|Element)$ # Element Matrix client +} + + +# game tags +windowrule { + name = windowrule-25 + tag = +games + match:class = ^(gamescope)$ +} + +windowrule { + name = windowrule-26 + tag = +games + match:class = ^(steam_app_\d+)$ +} + + +# gamestore tags +windowrule { + name = windowrule-27 + tag = +gamestore + match:class = ^([Ss]team)$ +} + +windowrule { + name = windowrule-28 + tag = +gamestore + match:title = ^([Ll]utris)$ +} + +windowrule { + name = windowrule-29 + tag = +gamestore + match:class = ^(com.heroicgameslauncher.hgl)$ +} + + +# file-manager tags +windowrule { + name = windowrule-30 + tag = +file-manager + match:class = ^([Tt]hunar|org.gnome.Nautilus|[Pp]cmanfm-qt)$ +} + +windowrule { + name = windowrule-31 + tag = +file-manager + match:class = ^(app.drey.Warp)$ +} + + +# wallpaper tags +windowrule { + name = windowrule-32 + tag = +wallpaper + match:class = ^([Ww]aytrogen)$ +} + + +# multimedia tags +windowrule { + name = windowrule-33 + tag = +multimedia + match:class = ^([Aa]udacious)$ +} + + +# multimedia-video tags +windowrule { + name = windowrule-34 + tag = +multimedia_video + match:class = ^([Mm]pv|vlc)$ +} + + +# settings tags +windowrule { + name = windowrule-35 + tag = +settings + center = on + match:title = ^(ROG Control)$ +} + +windowrule { + name = windowrule-36 + tag = +settings + match:class = ^(wihotspot(-gui)?)$ # wifi hotspot +} + +windowrule { + name = windowrule-37 + tag = +settings + match:class = ^([Bb]aobab|org.gnome.[Bb]aobab)$ # Disk usage analyzer +} + +windowrule { + name = windowrule-38 + tag = +settings + match:class = ^(gnome-disks|wihotspot(-gui)?)$ +} + +windowrule { + name = windowrule-39 + tag = +settings + match:title = (Kvantum Manager) +} + +windowrule { + name = windowrule-40 + tag = +settings + match:class = ^(file-roller|org.gnome.FileRoller)$ # archive manager +} + +windowrule { + name = windowrule-41 + tag = +settings + match:class = ^(nm-applet|nm-connection-editor|blueman-manager)$ +} + +windowrule { + name = windowrule-42 + tag = +settings + center = on + match:class = ^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$ +} + +windowrule { + name = windowrule-43 + tag = +settings + match:class = ^(qt5ct|qt6ct|[Yy]ad)$ +} + +windowrule { + name = windowrule-44 + tag = +settings + match:class = (xdg-desktop-portal-gtk) +} + +windowrule { + name = windowrule-45 + tag = +settings + match:class = ^(org.kde.polkit-kde-authentication-agent-1)$ +} + +windowrule { + name = windowrule-46 + tag = +settings + match:class = ^([Rr]ofi)$ +} + + + +# Custom rule +windowrule { + name = windowrule-47 + tile = on + match:class = ^([Cc]hromium)$ +} + +windowrule { + name = windowrule-48 + size = (monitor_w*0.25) (monitor_h*0.55) + float = on + match:class = ^(com.network.manager)$ +} + +windowrule { + name = windowrule-49 + workspace = special:nyx + match:class = ^([Vv]esktop|[Dd]iscord|[Ss]potify)$ +} + + +# viewer tags +windowrule { + name = windowrule-50 + tag = +viewer + match:class = ^(gnome-system-monitor|org.gnome.SystemMonitor|io.missioncenter.MissionCenter)$ # system monitor +} + +windowrule { + name = windowrule-51 + tag = +viewer + match:class = ^(evince)$ # document viewer +} + +windowrule { + name = windowrule-52 + tag = +viewer + match:class = ^(eog|org.gnome.Loupe)$ # image viewer +} + + +# Some special override rules +windowrule { + name = windowrule-53 + no_blur = on + opacity = 1.0 + match:tag = multimedia_video* +} + + + + +# POSITION +# windowrule = center,floating:1 # warning, it cause even the menu to float and center. +windowrule { + name = windowrule-54 + center = on + float = on + size = (monitor_w*0.65) (monitor_h*0.9) + match:tag = HyprFlux_Cheat* +} + +windowrule { + name = windowrule-55 + center = on + float = on + match:class = ([Tt]hunar) + match:title = negative:(.*[Tt]hunar.*) +} + +windowrule { + name = windowrule-56 + center = on + float = on + match:tag = HyprFlux-Settings* +} + +windowrule { + name = windowrule-57 + center = on + match:title = ^(Keybindings)$ +} + +windowrule { + name = windowrule-58 + center = on + size = (monitor_w*0.6) (monitor_h*0.7) + match:class = ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$ +} + +windowrule { + name = windowrule-59 + move = ((monitor_w*0.61)) ((monitor_h*0.07)) + float = on + size = (monitor_w*0.38) (monitor_h*0.38) + pin = on + keep_aspect_ratio = on + match:title = ^(Picture-in-Picture)$ +} + +#windowrule = move 72% 7%,title:^(Firefox)$ + +# windowrule to avoid idle for fullscreen apps +#windowrule = idleinhibit fullscreen, class:^(*)$ +#windowrule = idleinhibit fullscreen, title:^(*)$ +windowrule { + name = windowrule-60 + idle_inhibit = fullscreen + match:fullscreen = 1 +} + + +# windowrule move to workspace +windowrule { + name = windowrule-61 + workspace = 1 + match:tag = projects* +} + +windowrule { + name = windowrule-62 + workspace = 1 + match:tag = email* +} + +windowrule { + name = windowrule-63 + workspace = 2 + match:tag = browser* +} + +windowrule { + name = windowrule-64 + workspace = 3 + match:class = ^([Tt]hunar)$ +} + +windowrule { + name = windowrule-65 + workspace = 4 + match:tag = im* +} + +windowrule { + name = windowrule-66 + workspace = 5 + match:tag = gamestore* +} + +windowrule { + name = windowrule-67 + workspace = 8 + no_blur = on + fullscreen = on + match:tag = games* +} + +windowrule { + name = windowrule-68 + workspace = 1 + match:class = ^(kitty)$ + match:title = ^(tmuxifier)$ +} + +windowrule { + name = windowrule-69 + workspace = 9 + match:class = ^(virt-viewer)$ +} + +windowrule { + name = windowrule-70 + workspace = 10 + match:class = ^([Oo]bsidian)$ +} + + +# windowrule move to workspace (silent) +windowrule { + name = windowrule-71 + workspace = 4 silent + match:tag = screenshare* +} + +windowrule { + name = windowrule-72 + workspace = 9 silent + match:class = ^(virt-manager)$ +} + +windowrule { + name = windowrule-73 + workspace = 9 silent + match:class = ^(.virt-manager-wrapped)$ +} + +windowrule { + name = windowrule-74 + workspace = 9 silent + match:tag = multimedia* +} + + +# FLOAT +windowrule { + name = windowrule-75 + float = on + opacity = 0.9 0.7 + size = (monitor_w*0.7) (monitor_h*0.7) + match:tag = wallpaper* +} + +windowrule { + name = windowrule-76 + float = on + opacity = 0.8 0.7 + size = (monitor_w*0.7) (monitor_h*0.7) + match:tag = settings* +} + +windowrule { + name = windowrule-77 + float = on + match:tag = viewer* +} + +windowrule { + name = windowrule-78 + float = on + match:class = ([Zz]oom|onedriver|onedriver-launcher)$ +} + +windowrule { + name = windowrule-79 + float = on + match:class = (org.gnome.Calculator) + match:title = (Calculator) +} + +windowrule { + name = windowrule-80 + float = on + match:class = ^(mpv|com.github.rafostar.Clapper)$ +} + +windowrule { + name = windowrule-81 + float = on + match:class = ^([Qq]alculate-gtk)$ +} + +#windowrule = float, class:^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$ +#windowrule = float, title:^(Firefox)$ +windowrule { + name = windowrule-82 + float = on + match:class = ^(fdm|freedownloadmanager)$ +} + +windowrule { + name = windowrule-83 + float = on + match:class = ^(proton-authenticator)$ +} + +windowrule { + name = windowrule-84 + float = on + match:class = ^([Ww]indscribe)$ +} + + + +# windowrule - ######### float popups and dialogue ####### +windowrule { + name = windowrule-85 + float = on + center = on + match:title = ^(Authentication Required)$ +} + +windowrule { + name = windowrule-86 + float = on + match:class = (codium|codium-url-handler|VSCodium) + match:title = negative:(.*codium.*|.*VSCodium.*) +} + +windowrule { + name = windowrule-87 + float = on + match:class = ^(com.heroicgameslauncher.hgl)$ + match:title = negative:(Heroic Games Launcher) +} + +windowrule { + name = windowrule-88 + float = on + match:class = ^([Ss]team)$ + match:title = negative:^([Ss]team)$ +} + + +windowrule { + name = windowrule-89 + float = on + size = (monitor_w*0.7) (monitor_h*0.6) + center = on + match:title = ^(Add Folder to Workspace)$ +} + + +windowrule { + name = windowrule-90 + float = on + size = (monitor_w*0.7) (monitor_h*0.6) + center = on + match:title = ^(Save As)$ +} + + +windowrule { + name = windowrule-91 + float = on + size = (monitor_w*0.7) (monitor_h*0.6) + match:initial_title = (Open Files) +} + + +windowrule { + name = windowrule-92 + float = on + center = on + size = (monitor_w*0.16) (monitor_h*0.12) + match:title = ^(SDDM Background)$ #HyprFlux YAD for setting SDDM background +} + +# END of float popups and dialogue ####### + +# OPACITY +# windowrule = opacity 0.9 0.7, tag:browser* +# windowrule = opacity 0.9 0.8, tag:projects* +# windowrule = opacity 0.94 0.86, tag:im* +# windowrule = opacity 0.94 0.86, tag:multimedia* +# windowrule = opacity 0.9 0.8, tag:file-manager* +windowrule { + name = windowrule-93 + opacity = 0.8 0.7 + match:tag = terminal* +} + +# windowrule = opacity 0.82 0.75, tag:viewer* +windowrule { + name = windowrule-94 + opacity = 0.8 0.7 + match:class = ^(gedit|org.gnome.TextEditor|mousepad)$ +} + +windowrule { + name = windowrule-95 + opacity = 0.9 0.8 + match:class = ^(deluge)$ +} + +windowrule { + name = windowrule-96 + opacity = 0.9 0.8 + match:class = ^(seahorse)$ # gnome-keyring gui +} + +# windowrule = opacity 0.95 0.75, title:^(Picture-in-Picture)$ + +# SIZE + +#windowrule = size 25% 25%, title:^(Firefox)$ + +# PINNING +#windowrule = pin,title:^(Firefox)$ + +# windowrule - extras + +# BLUR & FULLSCREEN + +#windowrule = bordercolor rgb(EE4B55) rgb(880808), fullscreen:1 +#windowrule = bordercolor rgb(282737) rgb(1E1D2D), floating:1 +#windowrule = opacity 0.8 0.8, pinned:1 + + + +# LAYER RULES +layerrule { + name = layerrule-1 + blur = on + ignore_alpha = 0 + match:namespace = rofi +} + +layerrule { + name = layerrule-2 + blur = on + ignore_alpha = 0 + match:namespace = notifications +} + +layerrule { + name = layerrule-3 + blur = on + ignore_alpha = 0.5 + match:namespace = quickshell:overview +} + + +#layerrule = ignorealpha 0.5, tag:notif* + +#layerrule = ignorezero, class:^([Rr]ofi)$ +#layerrule = blur, class:^([Rr]ofi)$ +#layerrule = unset,class:^([Rr]ofi)$ +#layerrule = ignorezero, + +#layerrule = ignorezero, overview +#layerrule = blur, overview diff --git a/dotfiles/.config/hypr/UserConfigs/WindowRules.conf b/dotfiles/.config/hypr/UserConfigs/WindowRules.conf new file mode 100644 index 0000000..06db134 --- /dev/null +++ b/dotfiles/.config/hypr/UserConfigs/WindowRules.conf @@ -0,0 +1,666 @@ +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# For window rules and layerrules +# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more + +# NOTES: This is only for Hyprland > 0.48 + +# note for ja: This should NOT be implemented on Debian and Ubuntu + +# windowrule - tags - add apps under appropriate tag to use the same settings +# browser tags +windowrule { + name = windowrule-1 + tag = +browser + match:class = ^([Ff]irefox|org.mozilla.firefox|[Ff]irefox-esr|[Ff]irefox-bin)$ +} + +windowrule { + name = rustdesk + tag = +rustdesk + match:class = ^(rustdesk)$, xwayland +} + +windowrule { + name = windowrule-2 + tag = +browser + match:class = ^([Gg]oogle-chrome(-beta|-dev|-unstable)?)$ +} + +windowrule { + name = windowrule-3 + tag = +browser + match:class = ^(chrome-.+-Default)$ # Chrome PWAs +} + +# windowrule = tag +browser, class:^([Cc]hromium)$ +windowrule { + name = windowrule-4 + tag = +browser + match:class = ^([Mm]icrosoft-edge(-stable|-beta|-dev|-unstable))$ +} + +windowrule { + name = windowrule-5 + tag = +browser + match:class = ^(Brave-browser(-beta|-dev|-unstable)?)$ +} + +windowrule { + name = windowrule-6 + tag = +browser + match:class = ^([Tt]horium-browser|[Cc]achy-browser)$ +} + +windowrule { + name = windowrule-7 + tag = +browser + match:class = ^(zen-alpha|zen)$ +} + + +# notif tags +windowrule { + name = windowrule-8 + tag = +notif + match:class = ^(swaync-control-center|swaync-notification-window|swaync-client|class)$ +} + + +# HyprFlux settings tag +windowrule { + name = windowrule-9 + tag = +HyprFlux_Cheat + match:title = ^(HyprFlux Quick Cheat Sheet)$ +} + +windowrule { + name = windowrule-10 + tag = +HyprFlux_Settings + match:title = ^(HyprFlux Settings)$ +} + +windowrule { + name = windowrule-11 + tag = +HyprFlux-Settings + match:class = ^(nwg-displays|nwg-look)$ +} + + +# terminal tags +windowrule { + name = windowrule-12 + tag = +terminal + match:class = ^(Alacritty|kitty|kitty-dropterm)$ +} + + +# email tags +windowrule { + name = windowrule-13 + tag = +email + match:class = ^([Tt]hunderbird|org.gnome.Evolution)$ +} + +windowrule { + name = windowrule-14 + tag = +email + match:class = ^(eu.betterbird.Betterbird)$ +} + + +# project tags +windowrule { + name = windowrule-15 + tag = +projects + match:class = ^(codium|codium-url-handler|VSCodium)$ +} + +windowrule { + name = windowrule-16 + tag = +projects + match:class = ^(VSCode|code-url-handler)$ +} + +windowrule { + name = windowrule-17 + tag = +projects + match:class = ^(jetbrains-.+)$ # JetBrains IDEs +} + + +# screenshare tags +windowrule { + name = windowrule-18 + tag = +screenshare + match:class = ^(com.obsproject.Studio)$ +} + + +# IM tags +# windowrule = tag +im, class:^([Dd]iscord|[Ww]ebCord|[Vv]esktop)$ +windowrule { + name = windowrule-19 + tag = +im + center = on + float = on + size = (monitor_w*0.6) (monitor_h*0.7) + match:class = ^([Ff]erdium)$ +} + +windowrule { + name = windowrule-20 + tag = +im + match:class = ^([Ww]hatsapp-for-linux)$ +} + +windowrule { + name = windowrule-21 + tag = +im + match:class = ^(ZapZap|com.rtosta.zapzap)$ +} + +windowrule { + name = windowrule-22 + tag = +im + match:class = ^(org.telegram.desktop|io.github.tdesktop_x64.TDesktop)$ +} + +windowrule { + name = windowrule-23 + tag = +im + match:class = ^(teams-for-linux)$ +} + +windowrule { + name = windowrule-24 + tag = +im + match:class = ^(im.riot.Riot|Element)$ # Element Matrix client +} + + +# game tags +windowrule { + name = windowrule-25 + tag = +games + match:class = ^(gamescope)$ +} + +windowrule { + name = windowrule-26 + tag = +games + match:class = ^(steam_app_\d+)$ +} + + +# gamestore tags +windowrule { + name = windowrule-27 + tag = +gamestore + match:class = ^([Ss]team)$ +} + +windowrule { + name = windowrule-28 + tag = +gamestore + match:title = ^([Ll]utris)$ +} + +windowrule { + name = windowrule-29 + tag = +gamestore + match:class = ^(com.heroicgameslauncher.hgl)$ +} + + +# file-manager tags +windowrule { + name = windowrule-30 + tag = +file-manager + match:class = ^([Tt]hunar|org.gnome.Nautilus|[Pp]cmanfm-qt)$ +} + +windowrule { + name = windowrule-31 + tag = +file-manager + match:class = ^(app.drey.Warp)$ +} + + +# wallpaper tags +windowrule { + name = windowrule-32 + tag = +wallpaper + match:class = ^([Ww]aytrogen)$ +} + + +# multimedia tags +windowrule { + name = windowrule-33 + tag = +multimedia + match:class = ^([Aa]udacious)$ +} + + +# multimedia-video tags +windowrule { + name = windowrule-34 + tag = +multimedia_video + match:class = ^([Mm]pv|vlc)$ +} + + +# settings tags +windowrule { + name = windowrule-35 + tag = +settings + center = on + match:title = ^(ROG Control)$ +} + +windowrule { + name = windowrule-36 + tag = +settings + match:class = ^(wihotspot(-gui)?)$ # wifi hotspot +} + +windowrule { + name = windowrule-37 + tag = +settings + match:class = ^([Bb]aobab|org.gnome.[Bb]aobab)$ # Disk usage analyzer +} + +windowrule { + name = windowrule-38 + tag = +settings + match:class = ^(gnome-disks|wihotspot(-gui)?)$ +} + +windowrule { + name = windowrule-39 + tag = +settings + match:title = (Kvantum Manager) +} + +windowrule { + name = windowrule-40 + tag = +settings + match:class = ^(file-roller|org.gnome.FileRoller)$ # archive manager +} + +windowrule { + name = windowrule-41 + tag = +settings + match:class = ^(nm-applet|nm-connection-editor|blueman-manager)$ +} + +windowrule { + name = windowrule-42 + tag = +settings + center = on + match:class = ^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$ +} + +windowrule { + name = windowrule-43 + tag = +settings + match:class = ^(qt5ct|qt6ct|[Yy]ad)$ +} + +windowrule { + name = windowrule-44 + tag = +settings + match:class = (xdg-desktop-portal-gtk) +} + +windowrule { + name = windowrule-45 + tag = +settings + match:class = ^(org.kde.polkit-kde-authentication-agent-1)$ +} + +windowrule { + name = windowrule-46 + tag = +settings + match:class = ^([Rr]ofi)$ +} + +# Custom rule +windowrule { + name = windowrule-47 + tile = on + match:class = ^([Cc]hromium)$ +} + +windowrule { + name = windowrule-48 + size = (monitor_w*0.25) (monitor_h*0.55) + float = on + match:class = ^(com.network.manager)$ +} + +windowrule { + name = windowrule-49 + workspace = special:nyx + match:class = ^([Vv]esktop|[Dd]iscord|[Ss]potify)$ +} + +windowrule { + name = windowrule-255 + size = (monitor_w*0.75) (monitor_h*0.80) + float = on + match:class = ^([Bb]itwarden)$ +} + +# viewer tags +windowrule { + name = windowrule-50 + tag = +viewer + match:class = ^(gnome-system-monitor|org.gnome.SystemMonitor|io.missioncenter.MissionCenter)$ # system monitor +} + +windowrule { + name = windowrule-51 + tag = +viewer + match:class = ^(evince)$ # document viewer +} + +windowrule { + name = windowrule-52 + tag = +viewer + match:class = ^(eog|org.gnome.Loupe)$ # image viewer +} + + +# Some special override rules +windowrule { + name = windowrule-53 + no_blur = on + opacity = 1.0 + match:tag = multimedia_video* +} + + + + +# POSITION +# windowrule = center,floating:1 # warning, it cause even the menu to float and center. +windowrule { + name = windowrule-54 + center = on + float = on + size = (monitor_w*0.65) (monitor_h*0.9) + match:tag = HyprFlux_Cheat* +} + +windowrule { + name = windowrule-55 + center = on + float = on + match:class = ([Tt]hunar) + match:title = negative:(.*[Tt]hunar.*) +} + +windowrule { + name = windowrule-56 + center = on + float = on + match:tag = HyprFlux-Settings* +} + +windowrule { + name = windowrule-57 + center = on + match:title = ^(Keybindings)$ +} + +windowrule { + name = windowrule-58 + center = on + size = (monitor_w*0.6) (monitor_h*0.7) + match:class = ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$ +} + +windowrule { + name = windowrule-59 + move = ((monitor_w*0.61)) ((monitor_h*0.07)) + float = on + size = (monitor_w*0.38) (monitor_h*0.38) + pin = on + keep_aspect_ratio = on + match:title = ^(Picture-in-Picture)$ +} + +#windowrule = move 72% 7%,title:^(Firefox)$ + +# windowrule to avoid idle for fullscreen apps +#windowrule = idleinhibit fullscreen, class:^(*)$ +#windowrule = idleinhibit fullscreen, title:^(*)$ +windowrule { + name = windowrule-60 + idle_inhibit = fullscreen + match:fullscreen = 1 +} + +# Discord to workspace 3 +windowrule = match:class ^([Vv]esktop|[Dd]iscord|[Ss]potify|[Pp]lexamp)$, workspace 3 +windowrule = match:class ^([Pp]lexamp), size 20% 20% + +# FLOAT +windowrule { + name = windowrule-75 + float = on + opacity = 0.9 0.7 + size = (monitor_w*0.7) (monitor_h*0.7) + match:tag = wallpaper* +} + +windowrule { + name = windowrule-76 + float = on + opacity = 0.8 0.7 + size = (monitor_w*0.7) (monitor_h*0.7) + match:tag = settings* +} + +windowrule { + name = windowrule-77 + float = on + match:tag = viewer* +} + +windowrule { + name = windowrule-78 + float = on + match:class = ([Zz]oom|onedriver|onedriver-launcher)$ +} + +windowrule { + name = windowrule-79 + float = on + match:class = (org.gnome.Calculator) + match:title = (Calculator) +} + +windowrule { + name = windowrule-80 + float = on + match:class = ^(mpv|com.github.rafostar.Clapper)$ +} + +windowrule { + name = windowrule-81 + float = on + match:class = ^([Qq]alculate-gtk)$ +} + +#windowrule = float, class:^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$ +#windowrule = float, title:^(Firefox)$ +windowrule { + name = windowrule-82 + float = on + match:class = ^(fdm|freedownloadmanager)$ +} + +windowrule { + name = windowrule-83 + float = on + match:class = ^(proton-authenticator)$ +} + +windowrule { + name = windowrule-84 + float = on + match:class = ^([Ww]indscribe)$ +} + + + +# windowrule - ######### float popups and dialogue ####### +windowrule { + name = windowrule-85 + float = on + center = on + match:title = ^(Authentication Required)$ +} + +windowrule { + name = windowrule-86 + float = on + match:class = (codium|codium-url-handler|VSCodium) + match:title = negative:(.*codium.*|.*VSCodium.*) +} + +windowrule { + name = windowrule-87 + float = on + match:class = ^(com.heroicgameslauncher.hgl)$ + match:title = negative:(Heroic Games Launcher) +} + +windowrule { + name = windowrule-88 + float = on + match:class = ^([Ss]team)$ + match:title = negative:^([Ss]team)$ +} + + +windowrule { + name = windowrule-89 + float = on + size = (monitor_w*0.7) (monitor_h*0.6) + center = on + match:title = ^(Add Folder to Workspace)$ +} + + +windowrule { + name = windowrule-90 + float = on + size = (monitor_w*0.7) (monitor_h*0.6) + center = on + match:title = ^(Save As)$ +} + + +windowrule { + name = windowrule-91 + float = on + size = (monitor_w*0.7) (monitor_h*0.6) + match:initial_title = (Open Files) +} + + +windowrule { + name = windowrule-92 + float = on + center = on + size = (monitor_w*0.16) (monitor_h*0.12) + match:title = ^(SDDM Background)$ #HyprFlux YAD for setting SDDM background +} + +# END of float popups and dialogue ####### + +# OPACITY +# windowrule = opacity 0.9 0.7, tag:browser* +# windowrule = opacity 0.9 0.8, tag:projects* +# windowrule = opacity 0.94 0.86, tag:im* +# windowrule = opacity 0.94 0.86, tag:multimedia* +# windowrule = opacity 0.9 0.8, tag:file-manager* +windowrule { + name = windowrule-93 + opacity = 0.8 0.7 + match:tag = terminal* +} + +# windowrule = opacity 0.82 0.75, tag:viewer* +windowrule { + name = windowrule-94 + opacity = 0.8 0.7 + match:class = ^(gedit|org.gnome.TextEditor|mousepad)$ +} + +windowrule { + name = windowrule-95 + opacity = 0.9 0.8 + match:class = ^(deluge)$ +} + +windowrule { + name = windowrule-96 + opacity = 0.9 0.8 + match:class = ^(seahorse)$ # gnome-keyring gui +} + +# windowrule = opacity 0.95 0.75, title:^(Picture-in-Picture)$ + +# SIZE + +#windowrule = size 25% 25%, title:^(Firefox)$ + +# PINNING +#windowrule = pin,title:^(Firefox)$ + +# windowrule - extras + +# BLUR & FULLSCREEN + +#windowrule = bordercolor rgb(EE4B55) rgb(880808), fullscreen:1 +#windowrule = bordercolor rgb(282737) rgb(1E1D2D), floating:1 +#windowrule = opacity 0.8 0.8, pinned:1 + + + +# LAYER RULES +layerrule { + name = layerrule-1 + blur = on + ignore_alpha = 0 + match:namespace = rofi +} + +layerrule { + name = layerrule-2 + blur = on + ignore_alpha = 0 + match:namespace = notifications +} + +layerrule { + name = layerrule-3 + blur = on + ignore_alpha = 0.5 + match:namespace = quickshell:overview +} + + +#layerrule = ignorealpha 0.5, tag:notif* + +#layerrule = ignorezero, class:^([Rr]ofi)$ +#layerrule = blur, class:^([Rr]ofi)$ +#layerrule = unset,class:^([Rr]ofi)$ +#layerrule = ignorezero, + +#layerrule = ignorezero, overview +#layerrule = blur, overview diff --git a/dotfiles/.config/hypr/UserConfigs/monitors.conf b/dotfiles/.config/hypr/UserConfigs/monitors.conf new file mode 100644 index 0000000..8449297 --- /dev/null +++ b/dotfiles/.config/hypr/UserConfigs/monitors.conf @@ -0,0 +1,12 @@ +# Generated with hyprdynamicmonitors freeze. +# This is a template that you can edit, it is just a starter that pulled your current monitor setup, +# adjust as needed. +# You can use templates here etc, see https://github.com/fiffeek/hyprdynamicmonitors/blob/main/examples/basic/hyprconfigs/template.go.tmpl. +# Monitors are given arbitrary tags (the "monitor" prefix and the ID coming from hyprland). +# If you are using tui to edit, leave this at the end of your file (the last monitor config applies) +# and leave the markers. +# <<<<< TUI AUTO START +monitor=desc:LG Electronics LG ULTRAWIDE 0x0002E68A,2560x1080@60.00000,1920x-740,1.00000000,transform,3,vrr,0 +monitor=desc:HP Inc. HP 524pf VNG447017D,1920x1080@100.00000,-1920x0,1.00000000,transform,0,vrr,0 +monitor=desc:Acer Technologies VG240Y S 0x126191DE,1920x1080@165.00301,0x0,1.00000000,transform,0,vrr,1,bitdepth,10,cm,wide +# <<<<< TUI AUTO END diff --git a/dotfiles/.config/hypr/UserConfigs/workspaces.conf b/dotfiles/.config/hypr/UserConfigs/workspaces.conf new file mode 100644 index 0000000..1c7f747 --- /dev/null +++ b/dotfiles/.config/hypr/UserConfigs/workspaces.conf @@ -0,0 +1,30 @@ +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# NOTE: This will be overwritten by NWG-Displays +# once you use and click apply. +# +# *********************************************************** # + +# You can set workspace rules to achieve workspace-specific behaviors. +# For instance, you can define a workspace where all windows are drawn without borders or gaps. + +# https://wiki.hyprland.org/Configuring/Workspace-Rules/ + +# Assigning workspace to a certain monitor. Below are just examples +workspace = 1, monitor:DP-2, default=true +workspace = 2, monitor:DP-1, default=true +workspace = 3, monitor:HDMI-A-1, default=true +# workspace = 4, monitor:eDP-1 +# workspace = 5, monitor:DP-2 +# workspace = 6, monitor:DP-2 +# workspace = 7, monitor:DP-2 +# workspace = 8, monitor:DP-2 + + +# example rules (from wiki) +# workspace = 3, rounding:false, decorate:false +# workspace = name:coding, rounding:false, decorate:false, gapsin:0, gapsout:0, border:false, decorate:false, monitor:DP-1 +# workspace = 8,bordersize:8 +# workspace = name:Hello, monitor:DP-1, default:true +# workspace = name:gaming, monitor:desc:Chimei Innolux Corporation 0x150C, default:true +# workspace = 5, on-created-empty:[float] firefox +# workspace = special:scratchpad, on-created-empty:foot diff --git a/dotfiles/.config/hypr/UserScripts/00-Readme b/dotfiles/.config/hypr/UserScripts/00-Readme new file mode 100755 index 0000000..9a9faed --- /dev/null +++ b/dotfiles/.config/hypr/UserScripts/00-Readme @@ -0,0 +1,3 @@ +# Place your new scripts here. +# If you need to edit a script from main script (~/.config/hypr/scripts), copy it on this directory, and edit. +# Make sure to update as well the keybinds in ~/.config/hypr/UserConfigs directory if any script is linked to it diff --git a/dotfiles/.config/hypr/UserScripts/Weather.py b/dotfiles/.config/hypr/UserScripts/Weather.py new file mode 100755 index 0000000..af77e4b --- /dev/null +++ b/dotfiles/.config/hypr/UserScripts/Weather.py @@ -0,0 +1,146 @@ +#!/usr/bin/env python3 +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# original code https://gist.github.com/Surendrajat/ff3876fd2166dd86fb71180f4e9342d7 +# weather using python + +import requests +import json +import os +from pyquery import PyQuery # install using `pip install pyquery` + +# weather icons +weather_icons = { + "sunnyDay": "󰖙", + "clearNight": "󰖔", + "cloudyFoggyDay": "", + "cloudyFoggyNight": "", + "rainyDay": "", + "rainyNight": "", + "snowyIcyDay": "", + "snowyIcyNight": "", + "severe": "", + "default": "", +} + + +# Get current location based on IP address +def get_location(): + response = requests.get("https://ipinfo.io") + data = response.json() + loc = data["loc"].split(",") + return float(loc[0]), float(loc[1]) + + +# Get latitude and longitude +latitude, longitude = get_location() + +# Open-Meteo API endpoint +url = f"https://weather.com/en-PH/weather/today/l/{latitude},{longitude}" + +# manual location_id +# NOTE: if you want to add manually, make sure you disable def get_location above +# to get your own location_id, go to https://weather.com & search your location. +# once you choose your location, you can see the location_id in the URL(64 chars long hex string) +# like this: https://weather.com/en-PH/weather/today/l/bca47d1099e762a012b9a139c36f30a0b1e647f69c0c4ac28b537e7ae9c1c200 +# location_id = "bca47d1099e762a012b9a139c36f30a0b1e647f69c0c4ac28b537e7ae9c1c200" # TODO + +# NOTE to change to deg F, change the URL to your preffered location after weather.com +# Default is English-Philippines with Busan, South Korea as location_id +# get html page +# url = "https://weather.com/en-PH/weather/today/l/" + location_id + +html_data = PyQuery(url=url) + +# current temperature +temp = html_data("span[data-testid='TemperatureValue']").eq(0).text() + +# current status phrase +status = html_data("div[data-testid='wxPhrase']").text() +status = f"{status[:16]}.." if len(status) > 17 else status + +# status code +status_code = html_data("#regionHeader").attr("class").split(" ")[2].split("-")[2] + +# status icon +icon = ( + weather_icons[status_code] + if status_code in weather_icons + else weather_icons["default"] +) + +# temperature feels like +temp_feel = html_data( + "div[data-testid='FeelsLikeSection'] > span > span[data-testid='TemperatureValue']" +).text() +temp_feel_text = f"Feels like {temp_feel}c" + +# min-max temperature +temp_min = ( + html_data("div[data-testid='wxData'] > span[data-testid='TemperatureValue']") + .eq(1) + .text() +) +temp_max = ( + html_data("div[data-testid='wxData'] > span[data-testid='TemperatureValue']") + .eq(0) + .text() +) +temp_min_max = f" {temp_min}\t\t {temp_max}" + +# wind speed +wind_speed = str(html_data("span[data-testid='Wind'] > span").text()) +wind_text = f" {wind_speed}" + +# humidity +humidity = html_data("span[data-testid='PercentageValue']").text() +humidity_text = f" {humidity}" + +# visibility +visibility = html_data("span[data-testid='VisibilityValue']").text() +visibility_text = f" {visibility}" + +# air quality index +air_quality_index = html_data("text[data-testid='DonutChartValue']").text() + +# hourly rain prediction +prediction = html_data("section[aria-label='Hourly Forecast']")( + "div[data-testid='SegmentPrecipPercentage'] > span" +).text() +prediction = prediction.replace("Chance of Rain", "") +prediction = f"\n\n (hourly) {prediction}" if len(prediction) > 0 else prediction + +# tooltip text +tooltip_text = str.format( + "\t\t{}\t\t\n{}\n{}\n{}\n\n{}\n{}\n{}{}", + f'{temp}', + f" {icon}", + f"{status}", + f"{temp_feel_text}", + f"{temp_min_max}", + f"{wind_text}\t{humidity_text}", + f"{visibility_text}\tAQI {air_quality_index}", + f" {prediction}", +) + +# print waybar module data +out_data = { + "text": f"{icon} {temp}", + "alt": status, + "tooltip": tooltip_text, + "class": status_code, +} +print(json.dumps(out_data)) + +simple_weather = ( + f"{icon} {status}\n" + + f" {temp} ({temp_feel_text})\n" + + f"{wind_text} \n" + + f"{humidity_text} \n" + + f"{visibility_text} AQI{air_quality_index}\n" +) + +try: + with open(os.path.expanduser("~/.cache/.weather_cache"), "w") as file: + file.write(simple_weather) +except Exception as e: + print(f"Error writing to cache: {e}") diff --git a/dotfiles/.config/hypr/UserScripts/Weather.sh b/dotfiles/.config/hypr/UserScripts/Weather.sh new file mode 100755 index 0000000..30b77c7 --- /dev/null +++ b/dotfiles/.config/hypr/UserScripts/Weather.sh @@ -0,0 +1,87 @@ +#!/bin/bash +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# weather info from wttr. https://github.com/chubin/wttr.in +# Remember to add city + +city= +cachedir="$HOME/.cache/rbn" +cachefile=${0##*/}-$1 + +if [ ! -d $cachedir ]; then + mkdir -p $cachedir +fi + +if [ ! -f $cachedir/$cachefile ]; then + touch $cachedir/$cachefile +fi + +# Save current IFS +SAVEIFS=$IFS +# Change IFS to new line. +IFS=$'\n' + +cacheage=$(($(date +%s) - $(stat -c '%Y' "$cachedir/$cachefile"))) +if [ $cacheage -gt 1740 ] || [ ! -s $cachedir/$cachefile ]; then + data=($(curl -s https://en.wttr.in/"$city"$1\?0qnT 2>&1)) + echo ${data[0]} | cut -f1 -d, > $cachedir/$cachefile + echo ${data[1]} | sed -E 's/^.{15}//' >> $cachedir/$cachefile + echo ${data[2]} | sed -E 's/^.{15}//' >> $cachedir/$cachefile +fi + +weather=($(cat $cachedir/$cachefile)) + +# Restore IFSClear +IFS=$SAVEIFS + +temperature=$(echo ${weather[2]} | sed -E 's/([[:digit:]]+)\.\./\1 to /g') + +#echo ${weather[1]##*,} + +# https://fontawesome.com/icons?s=solid&c=weather +case $(echo ${weather[1]##*,} | tr '[:upper:]' '[:lower:]') in +"clear" | "sunny") + condition="" + ;; +"partly cloudy") + condition="󰖕" + ;; +"cloudy") + condition="" + ;; +"overcast") + condition="" + ;; +"fog" | "freezing fog") + condition="" + ;; +"patchy rain possible" | "patchy light drizzle" | "light drizzle" | "patchy light rain" | "light rain" | "light rain shower" | "mist" | "rain") + condition="󰼳" + ;; +"moderate rain at times" | "moderate rain" | "heavy rain at times" | "heavy rain" | "moderate or heavy rain shower" | "torrential rain shower" | "rain shower") + condition="" + ;; +"patchy snow possible" | "patchy sleet possible" | "patchy freezing drizzle possible" | "freezing drizzle" | "heavy freezing drizzle" | "light freezing rain" | "moderate or heavy freezing rain" | "light sleet" | "ice pellets" | "light sleet showers" | "moderate or heavy sleet showers") + condition="󰼴" + ;; +"blowing snow" | "moderate or heavy sleet" | "patchy light snow" | "light snow" | "light snow showers") + condition="󰙿" + ;; +"blizzard" | "patchy moderate snow" | "moderate snow" | "patchy heavy snow" | "heavy snow" | "moderate or heavy snow with thunder" | "moderate or heavy snow showers") + condition="" + ;; +"thundery outbreaks possible" | "patchy light rain with thunder" | "moderate or heavy rain with thunder" | "patchy light snow with thunder") + condition="" + ;; +*) + condition="" + echo -e "{\"text\":\""$condition"\", \"alt\":\""${weather[0]}"\", \"tooltip\":\""${weather[0]}: $temperature ${weather[1]}"\"}" + ;; +esac + +#echo $temp $condition + +echo -e "{\"text\":\""$temperature $condition"\", \"alt\":\""${weather[0]}"\", \"tooltip\":\""${weather[0]}: $temperature ${weather[1]}"\"}" + +cached_weather=" $temperature \n$condition ${weather[1]}" + +echo -e $cached_weather > "$HOME/.cache/.weather_cache" \ No newline at end of file diff --git a/dotfiles/.config/hypr/UserScripts/ZshChangeTheme.sh b/dotfiles/.config/hypr/UserScripts/ZshChangeTheme.sh new file mode 100755 index 0000000..2b9f404 --- /dev/null +++ b/dotfiles/.config/hypr/UserScripts/ZshChangeTheme.sh @@ -0,0 +1,69 @@ +#!/bin/bash +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# Script for Oh my ZSH theme ( CTRL SHIFT O) + +# preview of theme can be view here: https://github.com/ohmyzsh/ohmyzsh/wiki/Themes +# after choosing theme, TTY need to be closed and re-open + +# Variables +iDIR="$HOME/.config/swaync/images" +rofi_theme="$HOME/.config/rofi/config-zsh-theme.rasi" + +if [ -n "$(grep -i nixos < /etc/os-release)" ]; then + notify-send -i "$iDIR/note.png" "NOT Supported" "Sorry NixOS does not support this HyprFlux feature" + exit 1 +fi + +themes_dir="$HOME/.oh-my-zsh/themes" +file_extension=".zsh-theme" + + +themes_array=($(find -L "$themes_dir" -type f -name "*$file_extension" -exec basename {} \; | sed -e "s/$file_extension//")) + +# Add "Random" option to the beginning of the array +themes_array=("Random" "${themes_array[@]}") + +rofi_command="rofi -i -dmenu -config $rofi_theme" + +menu() { + for theme in "${themes_array[@]}"; do + echo "$theme" + done +} + +main() { + choice=$(menu | ${rofi_command}) + + # if nothing selected, script won't change anything + if [ -z "$choice" ]; then + exit 0 + fi + + zsh_path="$HOME/.zshrc" + var_name="ZSH_THEME" + + if [[ "$choice" == "Random" ]]; then + # Pick a random theme from the original themes_array (excluding "Random") + random_theme=${themes_array[$((RANDOM % (${#themes_array[@]} - 1) + 1))]} + theme_to_set="$random_theme" + notify-send -i "$iDIR/ja.png" "Random theme:" "selected: $random_theme" + else + # Set theme to the selected choice + theme_to_set="$choice" + notify-send -i "$iDIR/ja.png" "Theme selected:" "$choice" + fi + + if [ -f "$zsh_path" ]; then + sed -i "s/^$var_name=.*/$var_name=\"$theme_to_set\"/" "$zsh_path" + notify-send -i "$iDIR/ja.png" "OMZ theme" "applied. restart your terminal" + else + notify-send -i "$iDIR/error.png" "E-R-R-O-R" "~.zshrc file not found!" + fi +} + +# Check if rofi is already running +if pidof rofi > /dev/null; then + pkill rofi +fi + +main diff --git a/dotfiles/.config/hypr/animations/00-default.conf b/dotfiles/.config/hypr/animations/00-default.conf new file mode 100644 index 0000000..1bb8d42 --- /dev/null +++ b/dotfiles/.config/hypr/animations/00-default.conf @@ -0,0 +1,25 @@ +# HyprFlux — https://github.com/ahmad9059/HyprFlux +animations { + enabled = yes + + bezier = wind, 0.05, 0.9, 0.1, 1.05 + bezier = winIn, 0.1, 1.1, 0.1, 1.1 + bezier = winOut, 0.3, -0.3, 0, 1 + bezier = liner, 1, 1, 1, 1 + bezier = overshot, 0.05, 0.9, 0.1, 1.05 + bezier = smoothOut, 0.5, 0, 0.99, 0.99 + bezier = smoothIn, 0.5, -0.5, 0.68, 1.5 + + animation = windows, 1, 6, wind, slide + animation = windowsIn, 1, 5, winIn, slide + animation = windowsOut, 1, 3, smoothOut, slide + animation = windowsMove, 1, 5, wind, slide + animation = border, 1, 1, liner + animation = borderangle, 1, 180, liner, loop #used by rainbow borders and rotating colors + animation = fade, 1, 3, smoothOut + animation = workspaces, 1, 5, overshot + + # animations for -git or version >0.42.0 + animation = workspacesIn, 1, 5, winIn, slide + animation = workspacesOut, 1, 5, winOut, slide +} \ No newline at end of file diff --git a/dotfiles/.config/hypr/animations/01-default - v2.conf b/dotfiles/.config/hypr/animations/01-default - v2.conf new file mode 100644 index 0000000..4f2585f --- /dev/null +++ b/dotfiles/.config/hypr/animations/01-default - v2.conf @@ -0,0 +1,26 @@ +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# old animations + +animations { + enabled = yes + + bezier = myBezier, 0.05, 0.9, 0.1, 1.05 + bezier = linear, 0.0, 0.0, 1.0, 1.0 + bezier = wind, 0.05, 0.9, 0.1, 1.05 + bezier = winIn, 0.1, 1.1, 0.1, 1.1 + bezier = winOut, 0.3, -0.3, 0, 1 + bezier = slow, 0, 0.85, 0.3, 1 + bezier = overshot, 0.7, 0.6, 0.1, 1.1 + bezier = bounce, 1.1, 1.6, 0.1, 0.85 + bezier = sligshot, 1, -1, 0.15, 1.25 + bezier = nice, 0, 6.9, 0.5, -4.20 + + animation = windowsIn, 1, 5, slow, popin + animation = windowsOut, 1, 5, winOut, popin + animation = windowsMove, 1, 5, wind, slide + animation = border, 1, 10, linear + animation = borderangle, 1, 180, linear, loop #used by rainbow borders and rotating colors + animation = fade, 1, 5, overshot + animation = workspaces, 1, 5, wind + animation = windows, 1, 5, bounce, popin +} \ No newline at end of file diff --git a/dotfiles/.config/hypr/animations/03- Disable Animation.conf b/dotfiles/.config/hypr/animations/03- Disable Animation.conf new file mode 100644 index 0000000..4958cce --- /dev/null +++ b/dotfiles/.config/hypr/animations/03- Disable Animation.conf @@ -0,0 +1,4 @@ +# HyprFlux — https://github.com/ahmad9059/HyprFlux +animations { + enabled = no +} \ No newline at end of file diff --git a/dotfiles/.config/hypr/animations/END-4.conf b/dotfiles/.config/hypr/animations/END-4.conf new file mode 100644 index 0000000..c38939f --- /dev/null +++ b/dotfiles/.config/hypr/animations/END-4.conf @@ -0,0 +1,39 @@ +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# name "End-4" +# credit https://github.com/end-4/dots-hyprland + +animations { + enabled = true + # Animation curves + + bezier = linear, 0, 0, 1, 1 + bezier = md3_standard, 0.2, 0, 0, 1 + bezier = md3_decel, 0.05, 0.7, 0.1, 1 + bezier = md3_accel, 0.3, 0, 0.8, 0.15 + bezier = overshot, 0.05, 0.9, 0.1, 1.1 + bezier = crazyshot, 0.1, 1.5, 0.76, 0.92 + bezier = hyprnostretch, 0.05, 0.9, 0.1, 1.0 + bezier = menu_decel, 0.1, 1, 0, 1 + bezier = menu_accel, 0.38, 0.04, 1, 0.07 + bezier = easeInOutCirc, 0.85, 0, 0.15, 1 + bezier = easeOutCirc, 0, 0.55, 0.45, 1 + bezier = easeOutExpo, 0.16, 1, 0.3, 1 + bezier = softAcDecel, 0.26, 0.26, 0.15, 1 + bezier = md2, 0.4, 0, 0.2, 1 # use with .2s duration + # Animation configs + animation = windows, 1, 3, md3_decel, popin 60% + animation = windowsIn, 1, 3, md3_decel, popin 60% + animation = windowsOut, 1, 3, md3_accel, popin 60% + animation = border, 1, 10, default + animation = fade, 1, 3, md3_decel + # animation = layers, 1, 2, md3_decel, slide + animation = layersIn, 1, 3, menu_decel, slide + animation = layersOut, 1, 1.6, menu_accel + animation = fadeLayersIn, 1, 2, menu_decel + animation = fadeLayersOut, 1, 4.5, menu_accel + animation = workspaces, 1, 7, menu_decel, slide + # animation = workspaces, 1, 2.5, softAcDecel, slide + # animation = workspaces, 1, 7, menu_decel, slidefade 15% + # animation = specialWorkspace, 1, 3, md3_decel, slidefadevert 15% + animation = specialWorkspace, 1, 3, md3_decel, slidevert +} diff --git a/dotfiles/.config/hypr/animations/HYDE - Vertical.conf b/dotfiles/.config/hypr/animations/HYDE - Vertical.conf new file mode 100644 index 0000000..151f161 --- /dev/null +++ b/dotfiles/.config/hypr/animations/HYDE - Vertical.conf @@ -0,0 +1,33 @@ +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# name "Vertical" +# credit https://github.com/prasanthrangan/hyprdots + +animations { + enabled = yes + + bezier = fluent_decel, 0, 0.2, 0.4, 1 + bezier = easeOutCirc, 0, 0.55, 0.45, 1 + bezier = easeOutCubic, 0.33, 1, 0.68, 1 + bezier = easeinoutsine, 0.37, 0, 0.63, 1 + + # Windows + animation = windowsIn, 1, 1.5, easeinoutsine, popin 60% # window open + animation = windowsOut, 1, 1.5, easeOutCubic, popin 60% # window close. + animation = windowsMove, 1, 1.5, easeinoutsine, slide # everything in between, moving, dragging, resizing. + + # Fading + animation = fade, 1, 2.5, fluent_decel + + animation = fadeLayersIn, 0 + animation = border, 0 + + + # Layers + animation = layers, 1, 1.5, easeinoutsine, popin + + # Workspaces + #animation = workspaces, 1, 3, fluent_decel, slidefade 30% # styles: slide, slidevert, fade, slidefade, slidefadevert + animation = workspaces, 1, 3, fluent_decel, slidefadevert 30% # styles: slide, slidevert, fade, slidefade, slidefadevert + + animation = specialWorkspace, 1, 2, fluent_decel, slidefade 10% +} diff --git a/dotfiles/.config/hypr/animations/HYDE - default.conf b/dotfiles/.config/hypr/animations/HYDE - default.conf new file mode 100644 index 0000000..ba20714 --- /dev/null +++ b/dotfiles/.config/hypr/animations/HYDE - default.conf @@ -0,0 +1,20 @@ +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# name "Default" +# credit https://github.com/prasanthrangan/hyprdots + +animations { + enabled = yes + bezier = wind, 0.05, 0.9, 0.1, 1.05 + bezier = winIn, 0.1, 1.1, 0.1, 1.1 + bezier = winOut, 0.3, -0.3, 0, 1 + bezier = liner, 1, 1, 1, 1 + animation = windows, 1, 6, wind, slide + animation = windowsIn, 1, 6, winIn, slide + animation = windowsOut, 1, 5, winOut, slide + animation = windowsMove, 1, 5, wind, slide + animation = border, 1, 1, liner + animation = borderangle, 1, 30, liner, once + animation = fade, 1, 10, default + animation = workspaces, 1, 5, wind + animation = specialWorkspace, 1, 5, wind, slidevert +} diff --git a/dotfiles/.config/hypr/animations/HYDE - minimal-1.conf b/dotfiles/.config/hypr/animations/HYDE - minimal-1.conf new file mode 100644 index 0000000..d701f23 --- /dev/null +++ b/dotfiles/.config/hypr/animations/HYDE - minimal-1.conf @@ -0,0 +1,26 @@ +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# name "Minimal-1" +# credit https://github.com/prasanthrangan/hyprdots- + +animations { + enabled = true + + # █▄▄ █▀▀ ▀█ █ █▀▀ █▀█   █▀▀ █░█ █▀█ █░█ █▀▀ + # █▄█ ██▄ █▄ █ ██▄ █▀▄   █▄▄ █▄█ █▀▄ ▀▄▀ ██▄ + bezier = wind, 0.05, 0.9, 0.1, 1.05 + bezier = winIn, 0.1, 1.1, 0.1, 1.1 + bezier = winOut, 0.3, -0.3, 0, 1 + bezier = liner, 1, 1, 1, 1 + + + #▄▀█ █▄░█ █ █▀▄▀█ ▄▀█ ▀█▀ █ █▀█ █▄░█ + #█▀█ █░▀█ █ █░▀░█ █▀█ ░█░ █ █▄█ █░▀█ + animation = windows, 1, 6, wind, slide + animation = windowsIn, 1, 6, winIn, slide + animation = windowsOut, 1, 5, winOut, slide + animation = windowsMove, 1, 5, wind, slide + animation = border, 1, 1, liner + animation = borderangle, 1, 30, liner, once + animation = fade, 1, 10, default + animation = workspaces, 1, 5, wind +} diff --git a/dotfiles/.config/hypr/animations/HYDE - minimal-2.conf b/dotfiles/.config/hypr/animations/HYDE - minimal-2.conf new file mode 100644 index 0000000..b8fa273 --- /dev/null +++ b/dotfiles/.config/hypr/animations/HYDE - minimal-2.conf @@ -0,0 +1,15 @@ +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# name "Minimal-2" +# credit https://github.com/prasanthrangan/hyprdots + +animations { + enabled = yes + + bezier = quart, 0.25, 1, 0.5, 1 + + animation = windows, 1, 6, quart, slide + animation = border, 1, 6, quart + animation = borderangle, 1, 6, quart + animation = fade, 1, 6, quart + animation = workspaces, 1, 6, quart +} \ No newline at end of file diff --git a/dotfiles/.config/hypr/animations/HYDE - optimized.conf b/dotfiles/.config/hypr/animations/HYDE - optimized.conf new file mode 100644 index 0000000..8d6f61c --- /dev/null +++ b/dotfiles/.config/hypr/animations/HYDE - optimized.conf @@ -0,0 +1,40 @@ +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# name "Optimized" +# credit https://github.com/prasanthrangan/hyprdots + +animations { + enabled = true + bezier = wind, 0.05, 0.85, 0.03, 0.97 + bezier = winIn, 0.07, 0.88, 0.04, 0.99 + bezier = winOut, 0.20, -0.15, 0, 1 + bezier = liner, 1, 1, 1, 1 + bezier = md3_standard, 0.12, 0, 0, 1 + bezier = md3_decel, 0.05, 0.80, 0.10, 0.97 + bezier = md3_accel, 0.20, 0, 0.80, 0.08 + bezier = overshot, 0.05, 0.85, 0.07, 1.04 + bezier = crazyshot, 0.1, 1.22, 0.68, 0.98 + bezier = hyprnostretch, 0.05, 0.82, 0.03, 0.94 + bezier = menu_decel, 0.05, 0.82, 0, 1 + bezier = menu_accel, 0.20, 0, 0.82, 0.10 + bezier = easeInOutCirc, 0.75, 0, 0.15, 1 + bezier = easeOutCirc, 0, 0.48, 0.38, 1 + bezier = easeOutExpo, 0.10, 0.94, 0.23, 0.98 + bezier = softAcDecel, 0.20, 0.20, 0.15, 1 + bezier = md2, 0.30, 0, 0.15, 1 + + bezier = OutBack, 0.28, 1.40, 0.58, 1 + bezier = easeInOutCirc, 0.78, 0, 0.15, 1 + + animation = border, 1, 1.6, liner + animation = borderangle, 1, 82, liner, once + animation = windowsIn, 1, 3.2, winIn, slide + animation = windowsOut, 1, 2.8, easeOutCirc + animation = windowsMove, 1, 3.0, wind, slide + animation = fade, 1, 1.8, md3_decel + animation = layersIn, 1, 1.8, menu_decel, slide + animation = layersOut, 1, 1.5, menu_accel + animation = fadeLayersIn, 1, 1.6, menu_decel + animation = fadeLayersOut, 1, 1.8, menu_accel + animation = workspaces, 1, 4.0, menu_decel, slide + animation = specialWorkspace, 1, 2.3, md3_decel, slidefadevert 15% +} diff --git a/dotfiles/.config/hypr/animations/ML4W - classic.conf b/dotfiles/.config/hypr/animations/ML4W - classic.conf new file mode 100644 index 0000000..e693197 --- /dev/null +++ b/dotfiles/.config/hypr/animations/ML4W - classic.conf @@ -0,0 +1,14 @@ +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# name "Classic" +# credit https://github.com/mylinuxforwork/dotfiles + +animations { + enabled = true + 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 +} diff --git a/dotfiles/.config/hypr/animations/ML4W - dynamic.conf b/dotfiles/.config/hypr/animations/ML4W - dynamic.conf new file mode 100644 index 0000000..0fdbbe5 --- /dev/null +++ b/dotfiles/.config/hypr/animations/ML4W - dynamic.conf @@ -0,0 +1,19 @@ +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# name "Dynamic" +# credit https://github.com/mylinuxforwork/dotfiles + +animations { + enabled = true + bezier = wind, 0.05, 0.9, 0.1, 1.05 + bezier = winIn, 0.1, 1.1, 0.1, 1.1 + bezier = winOut, 0.3, -0.3, 0, 1 + bezier = liner, 1, 1, 1, 1 + animation = windows, 1, 6, wind, slide + animation = windowsIn, 1, 6, winIn, slide + animation = windowsOut, 1, 5, winOut, slide + animation = windowsMove, 1, 5, wind, slide + animation = border, 1, 1, liner + animation = borderangle, 1, 30, liner, loop + animation = fade, 1, 10, default + animation = workspaces, 1, 5, wind +} diff --git a/dotfiles/.config/hypr/animations/ML4W - fast.conf b/dotfiles/.config/hypr/animations/ML4W - fast.conf new file mode 100644 index 0000000..7dc1824 --- /dev/null +++ b/dotfiles/.config/hypr/animations/ML4W - fast.conf @@ -0,0 +1,23 @@ +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# name "Fast" +# credit https://github.com/mylinuxforwork/dotfiles + +animations { + enabled = true + bezier = linear, 0, 0, 1, 1 + bezier = md3_standard, 0.2, 0, 0, 1 + bezier = md3_decel, 0.05, 0.7, 0.1, 1 + bezier = md3_accel, 0.3, 0, 0.8, 0.15 + bezier = overshot, 0.05, 0.9, 0.1, 1.1 + bezier = crazyshot, 0.1, 1.5, 0.76, 0.92 + bezier = hyprnostretch, 0.05, 0.9, 0.1, 1.0 + bezier = fluent_decel, 0.1, 1, 0, 1 + bezier = easeInOutCirc, 0.85, 0, 0.15, 1 + bezier = easeOutCirc, 0, 0.55, 0.45, 1 + bezier = easeOutExpo, 0.16, 1, 0.3, 1 + animation = windows, 1, 3, md3_decel, popin 60% + animation = border, 1, 10, default + animation = fade, 1, 2.5, md3_decel + animation = workspaces, 1, 3.5, easeOutExpo, slide + animation = specialWorkspace, 1, 3, md3_decel, slidevert +} \ No newline at end of file diff --git a/dotfiles/.config/hypr/animations/ML4W - high.conf b/dotfiles/.config/hypr/animations/ML4W - high.conf new file mode 100644 index 0000000..e94d627 --- /dev/null +++ b/dotfiles/.config/hypr/animations/ML4W - high.conf @@ -0,0 +1,19 @@ +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# name "High" +# credit https://github.com/mylinuxforwork/dotfiles + +animations { + enabled = true + bezier = wind, 0.05, 0.9, 0.1, 1.05 + bezier = winIn, 0.1, 1.1, 0.1, 1.1 + bezier = winOut, 0.3, -0.3, 0, 1 + bezier = liner, 1, 1, 1, 1 + animation = windows, 1, 6, wind, slide + animation = windowsIn, 1, 6, winIn, slide + animation = windowsOut, 1, 5, winOut, slide + animation = windowsMove, 1, 5, wind, slide + animation = border, 1, 1, liner + animation = borderangle, 1, 30, liner, once + animation = fade, 1, 10, default + animation = workspaces, 1, 5, wind +} diff --git a/dotfiles/.config/hypr/animations/ML4W - moving.conf b/dotfiles/.config/hypr/animations/ML4W - moving.conf new file mode 100644 index 0000000..70a8dcd --- /dev/null +++ b/dotfiles/.config/hypr/animations/ML4W - moving.conf @@ -0,0 +1,19 @@ +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# name "Moving" +# credit https://github.com/mylinuxforwork/dotfiles + + +animations { + enabled = true + bezier = overshot, 0.05, 0.9, 0.1, 1.05 + bezier = smoothOut, 0.5, 0, 0.99, 0.99 + bezier = smoothIn, 0.5, -0.5, 0.68, 1.5 + animation = windows, 1, 5, overshot, slide + animation = windowsOut, 1, 3, smoothOut + animation = windowsIn, 1, 3, smoothOut + animation = windowsMove, 1, 4, smoothIn, slide + animation = border, 1, 5, default + animation = fade, 1, 5, smoothIn + animation = fadeDim, 1, 5, smoothIn + animation = workspaces, 1, 6, default +} diff --git a/dotfiles/.config/hypr/animations/ML4W - standard.conf b/dotfiles/.config/hypr/animations/ML4W - standard.conf new file mode 100644 index 0000000..bedbb3d --- /dev/null +++ b/dotfiles/.config/hypr/animations/ML4W - standard.conf @@ -0,0 +1,14 @@ +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# name "Standard" +# credit https://github.com/mylinuxforwork/dotfiles + +animations { + enabled = true + 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 +} diff --git a/dotfiles/.config/hypr/animations/Mahaveer - me-1.conf b/dotfiles/.config/hypr/animations/Mahaveer - me-1.conf new file mode 100644 index 0000000..34dd4a5 --- /dev/null +++ b/dotfiles/.config/hypr/animations/Mahaveer - me-1.conf @@ -0,0 +1,54 @@ +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# name "Me-1" +# credit https://github.com/mahaveergurjar + +animations { + enabled = true + # Animation curves + bezier = wind, 0.05, 0.9, 0.1, 1.05 + bezier = winIn, 0.1, 1.1, 0.1, 1.1 + bezier = winOut, 0.3, -0.3, 0, 1 + bezier = liner, 1, 1, 1, 1 + # bezier = linear, 0, 0, 1, 1 + bezier = md3_standard, 0.2, 0, 0, 1 + bezier = md3_decel, 0.05, 0.7, 0.1, 1 + bezier = md3_accel, 0.3, 0, 0.8, 0.15 + bezier = overshot, 0.05, 0.9, 0.1, 1.1 + bezier = crazyshot, 0.1, 1.5, 0.76, 0.92 + bezier = hyprnostretch, 0.05, 0.9, 0.1, 1.0 + bezier = menu_decel, 0.1, 1, 0, 1 + bezier = menu_accel, 0.38, 0.04, 1, 0.07 + bezier = easeInOutCirc, 0.85, 0, 0.15, 1 + bezier = easeOutCirc, 0, 0.55, 0.45, 1 + bezier = easeOutExpo, 0.16, 1, 0.3, 1 + bezier = softAcDecel, 0.26, 0.26, 0.15, 1 + bezier = md2, 0.4, 0, 0.2, 1 # use with .2s duration + + # Animation configs + # animation = windows, 1, 3, md3_decel, popin 60% + # animation = windowsIn, 1, 3, md3_decel, popin 60% + # animation = windowsOut, 1, 3, md3_accel, popin 60% + # animation = windows, 1, 6, wind, slide + animation = border, 1, 1, liner + animation = borderangle, 1, 30, liner, once + animation = windows, 1, 6, wind, slide + animation = windowsIn, 1, 6, winIn, slide + animation = windowsOut, 1, 5, winOut, slide + animation = windowsMove, 1, 5, wind, slide + + # animation = border, 1, 10, default + animation = fade, 1, 3, md3_decel + # animation = layers, 1, 2, md3_decel, slide + animation = layersIn, 1, 3, menu_decel, slide + animation = layersOut, 1, 1.6, menu_accel + animation = fadeLayersIn, 1, 2, menu_decel + animation = fadeLayersOut, 1, 4.5, menu_accel + animation = workspaces, 1, 7, menu_decel, slide + animation = workspaces, 1, 5, wind + # animation = workspaces, 1, 2.5, softAcDecel, slide + # animation = workspaces, 1, 7, menu_decel, slidefade 15% + animation = specialWorkspace, 1, 3, md3_decel, slidefadevert 15% + animation = specialWorkspace, 1, 3, md3_decel, slidevert +} + + diff --git a/dotfiles/.config/hypr/animations/Mahaveer - me-2.conf b/dotfiles/.config/hypr/animations/Mahaveer - me-2.conf new file mode 100644 index 0000000..cdb5c50 --- /dev/null +++ b/dotfiles/.config/hypr/animations/Mahaveer - me-2.conf @@ -0,0 +1,29 @@ +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# name "Me-2" +# credit https://github.com/mahaveergurjar + + +animations { + enabled = yes + + bezier = wind, 0.05, 0.9, 0.1, 1.05 + bezier = winIn, 0.1, 1.1, 0.1, 1.1 + bezier = winOut, 0.3, -0.3, 0, 1 + bezier = liner, 1, 1, 1, 1 + bezier = overshot, 0.05, 0.9, 0.1, 1.05 + bezier = smoothOut, 0.5, 0, 0.99, 0.99 + bezier = smoothIn, 0.5, -0.5, 0.68, 1.5 + + animation = windows, 1, 6, wind, slide + animation = windowsIn, 1, 5, winIn, slide + animation = windowsOut, 1, 3, smoothOut, slide + animation = windowsMove, 1, 5, wind, slide + animation = border, 1, 1, liner + animation = borderangle, 1, 180, liner, loop #used by rainbow borders and rotating colors + animation = fade, 1, 3, smoothOut + animation = workspaces, 1, 5, overshot + + # animations for -git or version >0.42.0 + animation = workspacesIn, 1, 5, winIn, slide + animation = workspacesOut, 1, 5, winOut, slide +} \ No newline at end of file diff --git a/dotfiles/.config/hypr/application-style.conf b/dotfiles/.config/hypr/application-style.conf new file mode 100644 index 0000000..87cfb62 --- /dev/null +++ b/dotfiles/.config/hypr/application-style.conf @@ -0,0 +1,8 @@ +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# as per Hyprland wiki: hyprland-qt-support provides a QML style for hypr* qt6 apps + +roundess = 2 + +border_width = 0 + +reduce_motion = false \ No newline at end of file diff --git a/dotfiles/.config/hypr/colours/hyprflux-colors.conf b/dotfiles/.config/hypr/colours/hyprflux-colors.conf new file mode 100644 index 0000000..98d9092 --- /dev/null +++ b/dotfiles/.config/hypr/colours/hyprflux-colors.conf @@ -0,0 +1,21 @@ +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# HyprFlux static color palette + +$background = rgb(010102) +$foreground = rgb(FDF8FE) +$color0 = rgb(313131) +$color1 = rgb(09050C) +$color2 = rgb(221647) +$color3 = rgb(2C1A40) +$color4 = rgb(5E3887) +$color5 = rgb(7344A6) +$color6 = rgb(BAB0BD) +$color7 = rgb(F3ECF5) +$color8 = rgb(AAA5AC) +$color9 = rgb(0B0711) +$color10 = rgb(2D1D5F) +$color11 = rgb(3B2355) +$color12 = rgb(7D4AB4) +$color13 = rgb(9A5BDD) +$color14 = rgb(F8EAFC) +$color15 = rgb(F3ECF5) diff --git a/dotfiles/.config/hypr/hypridle.conf b/dotfiles/.config/hypr/hypridle.conf new file mode 100644 index 0000000..5852afa --- /dev/null +++ b/dotfiles/.config/hypr/hypridle.conf @@ -0,0 +1,50 @@ +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# Hypridle +# Original config submitted by https://github.com/SherLock707 + +$iDIR="$HOME/.config/swaync/images/profile-pic.jpg" + +general { + lock_cmd = pidof hyprlock || hyprlock # runs hyprlock if it is not already running (this is always run when "loginctl lock-session" is called) + # unlock_cmd = killall hyprlock # kills hyprlock when unlocking (this is always run when "loginctl unlock-session" is called) + before_sleep_cmd = loginctl lock-session # ensures that the session is locked before going to sleep + after_sleep_cmd = hyprctl dispatch dpms on # turn of screen after sleep (not strictly necessary, but just in case) + ignore_dbus_inhibit = false # whether to ignore dbus-sent idle-inhibit requests (used by e.g. firefox or steam) +} + +# turn off screen faster if session is already locked +# (disabled by default) +# listener { +# timeout = 30 # 30 seconds +# on-timeout = pidof hyprlock && hyprctl dispatch dpms off # turns off the screen if hyprlock is active +# on-resume = pidof hyprlock && hyprctl dispatch dpms on # command to run when activity is detected after timeout has fired. +# } + +# Warn +listener { + timeout = 540 # 9 min + on-timeout = notify-send -i $iDIR " You are idle!" # command to run when timeout has passed + on-resume = notify-send -i $iDIR " Oh! you're Back" " Hello !!!" # command to run when activity is detected after timeout has fired. +} + +# Screenlock +listener { + timeout = 600 # 10 min + on-timeout = loginctl lock-session # command to run when timeout has passed + #on-resume = notify-send -i $iDIR " System Unlocked!" # command to run when activity is detected after timeout has fired. +} + +# Turn off screen +# (disabled by default) +# listener { +# timeout = 630 # 10.5 min +# on-timeout = hyprctl dispatch dpms off # command to run when timeout has passed +# on-resume = hyprctl dispatch dpms on # command to run when activity is detected after timeout has fired. +# } + +# Suspend # disabled by default +# listener { + # timeout = 1200 # 20 min + # on-timeout = systemctl suspend # command to run when timeout has passed + # on-resume = notify-send -i $iDIR " Oh! you're back" "Hello !!!" # command to run when activity is detected after timeout has fired. +# } diff --git a/dotfiles/.config/hypr/hyprland-gui.conf b/dotfiles/.config/hypr/hyprland-gui.conf new file mode 100644 index 0000000..216c346 --- /dev/null +++ b/dotfiles/.config/hypr/hyprland-gui.conf @@ -0,0 +1,15 @@ +# Generated by HyprMod + +general:allow_tearing = 1 +general:snap:enabled = 0 +misc:vrr = 1 + +# Monitors +monitor = DP-2, 1920x1080@165.00Hz, 0x0, 1, bitdepth, 10, cm, wide + +# Keybinds +unbind = SUPER SHIFT, Print +unbind = SUPER, up +bind = SUPER, Print, exec, hyprshot -o $HOME/Pictures/Screenshots -m region +bind = SUPER, up, movefocus, u +bind = SUPER SHIFT, Print, exec, hyprshot -o $HOME/Pictures/Screenshots -m window diff --git a/dotfiles/.config/hypr/hyprland.conf b/dotfiles/.config/hypr/hyprland.conf new file mode 100644 index 0000000..f6682f2 --- /dev/null +++ b/dotfiles/.config/hypr/hyprland.conf @@ -0,0 +1,34 @@ +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# always refer to Hyprland wiki +# https://wiki.hyprland.org/ + +# Initial boot script enable to apply initial wallpapers, theming, new settings etc. +# suggest not to change this or delete this including deleting referrence file in ~/.config/hypr/.initial_startup_done +# as long as the referrence file is present, this initial-boot.sh will not execute +exec-once = $HOME/.config/hypr/initial-boot.sh + +# ## This is where you want to start tinkering +$UserConfigs = $HOME/.config/hypr/UserConfigs # User Configs directory path + +source= $UserConfigs/Startup_Apps.conf # put your start-up packages on this file + +source= $UserConfigs/ENVariables.conf # Environment variables to load + +source= $UserConfigs/WindowRules.conf # all about Hyprland Window Rules and Layer Rules + +source= $UserConfigs/UserDecorations.conf # Decorations config file + +source= $UserConfigs/UserAnimations.conf # Animation config file + +source= $UserConfigs/Keybinds.conf # Put your own keybinds here + +source= $UserConfigs/UserSettings.conf # Main Hyprland Settings. + +# nwg-displays +source= $UserConfigs/monitors.conf +source= $UserConfigs/workspaces.conf + +exec = gsettings set org.gnome.desktop.interface cursor-theme Future-black Cursors + +# HyprMod managed settings +source = /home/thomas/.config/hypr/hyprland-gui.conf diff --git a/dotfiles/.config/hypr/hyprlock.conf b/dotfiles/.config/hypr/hyprlock.conf new file mode 100644 index 0000000..af004ea --- /dev/null +++ b/dotfiles/.config/hypr/hyprlock.conf @@ -0,0 +1,120 @@ +# BACKGROUND +background { + monitor = + path = screenshot + blur_passes = 3 + contrast = 0.8916 + brightness = 0.8172 + vibrancy = 0.1696 + vibrancy_darkness = 0.0 +} + +# GENERAL +general { + no_fade_in = false + grace = 0 + disable_loading_bar = false +} + +# Profie-Photo +image { + monitor = DP-2 + path = $HOME/.config/hypr/hyprlock/profile-picture.jpg + border_size = 2 + border_color = rgba(255, 255, 255, 0) + size = 300 + rounding = -1 + rotate = 0 + reload_time = -1 + reload_cmd = + position = 0, 0 + halign = center + valign = center +} + +# Day-Month-Date +label { + monitor = DP-2 + text = cmd[update:1000] echo -e "$(LC_TIME=en_US.UTF-8 date +"%A, %B %d")" + color = rgba(216, 222, 233, 0.90) + font_size = 25 + font_family = SF Pro Display Semibold + position = 0, 400 + halign = center + valign = center +} + +# Time +label { + monitor = DP-2 + text = cmd[update:1000] echo "$(date +"%I:%M")" + color = rgba(216, 222, 233, 0.90) + font_size = 120 + font_family = SF Pro Display Bold + position = 0, 280 + halign = center + valign = center +} + +# USER-BOX +shape { + monitor = DP-2 + size = 280, 55 + color = rgba(255, 255, 255, .1) + rounding = -1 + border_size = 0 + border_color = rgba(253, 198, 135, 0) + rotate = 0 + xray = false # if true, make a "hole" in the background (rectangle of specified size, no rotation) + position = 0, -250 + halign = center + valign = center +} + +# USER +label { + monitor = DP-2 + text =  $USER + color = rgba(216, 222, 233, 0.80) + outline_thickness = 2 + dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8 + dots_spacing = 0.2 # Scale of dots' absolute size, 0.0 - 1.0 + dots_center = true + font_size = 18 + font_family = SF Pro Display Bold + position = 0, -250 + halign = center + valign = center +} + +# INPUT FIELD +input-field { + monitor = DP-2 + size = 280, 55 + outline_thickness = 2 + dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8 + dots_spacing = 0.2 # Scale of dots' absolute size, 0.0 - 1.0 + dots_center = true + outer_color = rgba(0, 0, 0, 0) + inner_color = rgba(255, 255, 255, 0.1) + font_color = rgb(200, 200, 200) + fade_on_empty = false + font_family = SF Pro Display Bold + placeholder_text = 🔒 Enter Pass + hide_input = false + position = 0, -310 + halign = center + valign = center +} + +# CURRENT SONG +label { + monitor = DP-2 + text = cmd[update:1000] echo "$(~/.config/hypr/hyprlock/Scripts/songdetail.sh)" + color = rgba(255, 255, 255, 0.6) + font_size = 18 + font_family = JetBrains Mono Nerd, SF Pro Display Bold + position = 0, 90 + halign = center + valign = bottom +} diff --git a/dotfiles/.config/hypr/hyprlock/Fonts/JetBrains/JetBrains Mono Nerd.ttf b/dotfiles/.config/hypr/hyprlock/Fonts/JetBrains/JetBrains Mono Nerd.ttf new file mode 100644 index 0000000..f9f0185 Binary files /dev/null and b/dotfiles/.config/hypr/hyprlock/Fonts/JetBrains/JetBrains Mono Nerd.ttf differ diff --git a/dotfiles/.config/hypr/hyprlock/Fonts/SF Pro Display/SF Pro Display Bold.otf b/dotfiles/.config/hypr/hyprlock/Fonts/SF Pro Display/SF Pro Display Bold.otf new file mode 100755 index 0000000..ee79a7f Binary files /dev/null and b/dotfiles/.config/hypr/hyprlock/Fonts/SF Pro Display/SF Pro Display Bold.otf differ diff --git a/dotfiles/.config/hypr/hyprlock/Fonts/SF Pro Display/SF Pro Display Regular.otf b/dotfiles/.config/hypr/hyprlock/Fonts/SF Pro Display/SF Pro Display Regular.otf new file mode 100755 index 0000000..120603c Binary files /dev/null and b/dotfiles/.config/hypr/hyprlock/Fonts/SF Pro Display/SF Pro Display Regular.otf differ diff --git a/dotfiles/.config/hypr/hyprlock/Scripts/songdetail.sh b/dotfiles/.config/hypr/hyprlock/Scripts/songdetail.sh new file mode 100755 index 0000000..df5ad1a --- /dev/null +++ b/dotfiles/.config/hypr/hyprlock/Scripts/songdetail.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +song_info=$(playerctl metadata --format ' {{title}} 󰝚 󰚺 {{artist}}  ') + +echo "$song_info" diff --git a/dotfiles/.config/hypr/hyprlock/profile-picture.jpg b/dotfiles/.config/hypr/hyprlock/profile-picture.jpg new file mode 100644 index 0000000..b86e638 Binary files /dev/null and b/dotfiles/.config/hypr/hyprlock/profile-picture.jpg differ diff --git a/dotfiles/.config/hypr/initial-boot.sh b/dotfiles/.config/hypr/initial-boot.sh new file mode 100755 index 0000000..af9d820 --- /dev/null +++ b/dotfiles/.config/hypr/initial-boot.sh @@ -0,0 +1,39 @@ +#!/bin/bash +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# A bash script designed to run only once dotfiles installed + +# THIS SCRIPT CAN BE DELETED ONCE SUCCESSFULLY BOOTED!! And also, edit ~/.config/hypr/configs/Settings.conf +# NOT necessary to do since this script is only designed to run only once as long as the marker exists +# marker file is located at ~/.config/hypr/.initial_startup_done +# However, I do highly suggest not to touch it since again, as long as the marker exist, script wont run + +# Variables +scriptsDir=$HOME/.config/hypr/scripts +kvantum_theme="catppuccin-mocha-blue" +color_scheme="prefer-dark" +gtk_theme="Material-DeepOcean-BL" +icon_theme="Papirus-Dark" +cursor_theme="Moga-Cursor" + +# Check if a marker file exists. +if [ ! -f "$HOME/.config/hypr/.initial_startup_done" ]; then + sleep 1 + + # initiate GTK dark mode and apply icon and cursor theme + gsettings set org.gnome.desktop.interface color-scheme $color_scheme >/dev/null 2>&1 & + gsettings set org.gnome.desktop.interface gtk-theme $gtk_theme >/dev/null 2>&1 & + gsettings set org.gnome.desktop.interface icon-theme $icon_theme >/dev/null 2>&1 & + gsettings set org.gnome.desktop.interface cursor-theme $cursor_theme >/dev/null 2>&1 & + gsettings set org.gnome.desktop.interface cursor-size 24 >/dev/null 2>&1 & + + # waybar style + #if [ -L "$HOME/.config/waybar/config" ]; then + ## ln -sf "$waybar_style" "$HOME/.config/waybar/style.css" + # "$scriptsDir/Refresh.sh" > /dev/null 2>&1 & + #fi + + # Create a marker file to indicate that the script has been executed. + touch "$HOME/.config/hypr/.initial_startup_done" + + exit +fi diff --git a/dotfiles/.config/hypr/scripts/AirplaneMode.sh b/dotfiles/.config/hypr/scripts/AirplaneMode.sh new file mode 100755 index 0000000..b21e21d --- /dev/null +++ b/dotfiles/.config/hypr/scripts/AirplaneMode.sh @@ -0,0 +1,16 @@ +#!/bin/bash +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# Airplane Mode. Turning on or off all wifi using rfkill. + +notif="$HOME/.config/swaync/images/ja.png" + +# Check if any wireless device is blocked +wifi_blocked=$(rfkill list wifi | grep -o "Soft blocked: yes") + +if [ -n "$wifi_blocked" ]; then + rfkill unblock wifi + notify-send -u low -i "$notif" " Airplane" " mode: OFF" +else + rfkill block wifi + notify-send -u low -i "$notif" " Airplane" " mode: ON" +fi diff --git a/dotfiles/.config/hypr/scripts/Animations.sh b/dotfiles/.config/hypr/scripts/Animations.sh new file mode 100755 index 0000000..6057aa2 --- /dev/null +++ b/dotfiles/.config/hypr/scripts/Animations.sh @@ -0,0 +1,31 @@ +#!/bin/bash +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# For applying Animations from different users + +# Check if rofi is already running +if pidof rofi >/dev/null; then + pkill rofi +fi + +# Variables +iDIR="$HOME/.config/swaync/images" +SCRIPTSDIR="$HOME/.config/hypr/scripts" +animations_dir="$HOME/.config/hypr/animations" +UserConfigs="$HOME/.config/hypr/UserConfigs" +rofi_theme="$HOME/.config/rofi/config-Animations.rasi" +msg='❗NOTE:❗ This will copy animations into UserAnimations.conf' +# list of animation files, sorted alphabetically with numbers first +animations_list=$(find -L "$animations_dir" -maxdepth 1 -type f | sed 's/.*\///' | sed 's/\.conf$//' | sort -V) + +# Rofi Menu +chosen_file=$(echo "$animations_list" | rofi -i -dmenu -config $rofi_theme -mesg "$msg") + +# Check if a file was selected +if [[ -n "$chosen_file" ]]; then + full_path="$animations_dir/$chosen_file.conf" + cp "$full_path" "$UserConfigs/UserAnimations.conf" + notify-send -u low -i "$iDIR/ja.png" "$chosen_file" "Hyprland Animation Loaded" +fi + +sleep 1 +"$SCRIPTSDIR/RefreshNoWaybar.sh" diff --git a/dotfiles/.config/hypr/scripts/Brightness.sh b/dotfiles/.config/hypr/scripts/Brightness.sh new file mode 100755 index 0000000..f02f039 --- /dev/null +++ b/dotfiles/.config/hypr/scripts/Brightness.sh @@ -0,0 +1,69 @@ +#!/bin/bash +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# Script for Monitor backlights (if supported) using brightnessctl + +iDIR="$HOME/.config/swaync/icons" +notification_timeout=1000 +step=10 # INCREASE/DECREASE BY THIS VALUE + +# Get current brightness as an integer (without %) +get_brightness() { + brightnessctl -m | cut -d, -f4 | tr -d '%' +} + +# Determine the icon based on brightness level +get_icon_path() { + local brightness=$1 + local level=$(( (brightness + 19) / 20 * 20 )) # Round up to next 20 + if (( level > 100 )); then + level=100 + fi + echo "$iDIR/brightness-${level}.png" +} + +# Send notification +send_notification() { + local brightness=$1 + local icon_path=$2 + + notify-send -e \ + -h string:x-canonical-private-synchronous:brightness_notif \ + -h int:value:"$brightness" \ + -u low \ + -i "$icon_path" \ + "Screen" "Brightness: ${brightness}%" +} + +# Change brightness and notify +change_brightness() { + local delta=$1 + local current new icon + + current=$(get_brightness) + new=$((current + delta)) + + # Clamp between 5 and 100 + (( new < 5 )) && new=5 + (( new > 100 )) && new=100 + + brightnessctl set "${new}%" + + icon=$(get_icon_path "$new") + send_notification "$new" "$icon" +} + +# Main +case "$1" in + "--get") + get_brightness + ;; + "--inc") + change_brightness "$step" + ;; + "--dec") + change_brightness "-$step" + ;; + *) + get_brightness + ;; +esac \ No newline at end of file diff --git a/dotfiles/.config/hypr/scripts/BrightnessKbd.sh b/dotfiles/.config/hypr/scripts/BrightnessKbd.sh new file mode 100755 index 0000000..e645740 --- /dev/null +++ b/dotfiles/.config/hypr/scripts/BrightnessKbd.sh @@ -0,0 +1,51 @@ +#!/bin/bash +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# Script for keyboard backlights (if supported) using brightnessctl + +iDIR="$HOME/.config/swaync/icons" + +# Get keyboard brightness +get_kbd_backlight() { + echo $(brightnessctl -d '*::kbd_backlight' -m | cut -d, -f4) +} + +# Get icons +get_icon() { + current=$(get_kbd_backlight | sed 's/%//') + if [ "$current" -le "20" ]; then + icon="$iDIR/brightness-20.png" + elif [ "$current" -le "40" ]; then + icon="$iDIR/brightness-40.png" + elif [ "$current" -le "60" ]; then + icon="$iDIR/brightness-60.png" + elif [ "$current" -le "80" ]; then + icon="$iDIR/brightness-80.png" + else + icon="$iDIR/brightness-100.png" + fi +} +# Notify +notify_user() { + notify-send -e -h string:x-canonical-private-synchronous:brightness_notif -h int:value:$current -h boolean:SWAYNC_BYPASS_DND:true -u low -i "$icon" "Keyboard" "Brightness:$current%" +} + +# Change brightness +change_kbd_backlight() { + brightnessctl -d *::kbd_backlight set "$1" && get_icon && notify_user +} + +# Execute accordingly +case "$1" in + "--get") + get_kbd_backlight + ;; + "--inc") + change_kbd_backlight "+30%" + ;; + "--dec") + change_kbd_backlight "30%-" + ;; + *) + get_kbd_backlight + ;; +esac diff --git a/dotfiles/.config/hypr/scripts/ClipManager.sh b/dotfiles/.config/hypr/scripts/ClipManager.sh new file mode 100755 index 0000000..f63e649 --- /dev/null +++ b/dotfiles/.config/hypr/scripts/ClipManager.sh @@ -0,0 +1,49 @@ +#!/bin/bash +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# Clipboard Manager. This script uses cliphist, rofi, and wl-copy. + +# Variables +rofi_theme="$HOME/.config/rofi/config-clipboard.rasi" +msg='👀 **note** CTRL DEL = cliphist del (entry) or ALT DEL - cliphist wipe (all)' +# Actions: +# CTRL Del to delete an entry +# ALT Del to wipe clipboard contents + +# Check if rofi is already running +if pidof rofi > /dev/null; then + pkill rofi +fi + +while true; do + result=$( + rofi -i -dmenu \ + -kb-custom-1 "Control-Delete" \ + -kb-custom-2 "Alt-Delete" \ + -config $rofi_theme < <(cliphist list) \ + -mesg "$msg" + ) + + case "$?" in + 1) + exit + ;; + 0) + case "$result" in + "") + continue + ;; + *) + cliphist decode <<<"$result" | wl-copy + exit + ;; + esac + ;; + 10) + cliphist delete <<<"$result" + ;; + 11) + cliphist wipe + ;; + esac +done + diff --git a/dotfiles/.config/hypr/scripts/DarkLight.sh b/dotfiles/.config/hypr/scripts/DarkLight.sh new file mode 100755 index 0000000..bbcbaa5 --- /dev/null +++ b/dotfiles/.config/hypr/scripts/DarkLight.sh @@ -0,0 +1,242 @@ +#!/bin/bash +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# For Dark and Light switching +# Note: Scripts are looking for keywords Light or Dark except for wallpapers as the are in a separate directories + +# Paths +wallpaper_base_path="$HOME/Pictures/wallpapers/Dynamic-Wallpapers" +dark_wallpapers="$wallpaper_base_path/Dark" +light_wallpapers="$wallpaper_base_path/Light" +hypr_config_path="$HOME/.config/hypr" +swaync_style="$HOME/.config/swaync/style.css" +ags_style="$HOME/.config/ags/user/style.css" +SCRIPTSDIR="$HOME/.config/hypr/scripts" +notif="$HOME/.config/swaync/images/bell.png" +hyprflux_rofi="$HOME/.config/rofi/wallust/hyprflux-colors.rasi" + +kitty_conf="$HOME/.config/kitty/kitty.conf" + + +# intial kill process +for pid in waybar rofi swaync ags swaybg; do + killall -SIGUSR1 "$pid" +done + + +# Initialize awww if needed +awww query || awww-daemon --format xrgb + +# Set awww options +awww="awww img" +effect="--transition-bezier .43,1.19,1,.4 --transition-fps 60 --transition-type grow --transition-pos 0.925,0.977 --transition-duration 2" + +# Determine current theme mode +if [ "$(cat $HOME/.cache/.theme_mode)" = "Light" ]; then + next_mode="Dark" + # Logic for Dark mode + wallpaper_path="$dark_wallpapers" +else + next_mode="Light" + # Logic for Light mode + wallpaper_path="$light_wallpapers" +fi + +# Function to update theme mode for the next cycle +update_theme_mode() { + echo "$next_mode" > "$HOME/.cache/.theme_mode" +} + +# Function to notify user +notify_user() { + notify-send -u low -i "$notif" " Switching to" " $1 mode" +} + + +# Function to set Waybar style +set_waybar_style() { + theme="$1" + waybar_styles="$HOME/.config/waybar/style" + waybar_style_link="$HOME/.config/waybar/style.css" + style_prefix="\\[${theme}\\].*\\.css$" + + style_file=$(find -L "$waybar_styles" -maxdepth 1 -type f -regex ".*$style_prefix" | shuf -n 1) + + if [ -n "$style_file" ]; then + ln -sf "$style_file" "$waybar_style_link" + else + echo "Style file not found for $theme theme." + fi +} + +# Call the function after determining the mode +set_waybar_style "$next_mode" +notify_user "$next_mode" + + +# swaync color change +if [ "$next_mode" = "Dark" ]; then + sed -i '/@define-color noti-bg/s/rgba([0-9]*,\s*[0-9]*,\s*[0-9]*,\s*[0-9.]*);/rgba(0, 0, 0, 0.8);/' "${swaync_style}" + #sed -i '/@define-color noti-bg-alt/s/#.*;/#111111;/' "${swaync_style}" +else + sed -i '/@define-color noti-bg/s/rgba([0-9]*,\s*[0-9]*,\s*[0-9]*,\s*[0-9.]*);/rgba(255, 255, 255, 0.9);/' "${swaync_style}" + #sed -i '/@define-color noti-bg-alt/s/#.*;/#F0F0F0;/' "${swaync_style}" +fi + +# ags color change +if command -v ags >/dev/null 2>&1; then + if [ "$next_mode" = "Dark" ]; then + sed -i '/@define-color noti-bg/s/rgba([0-9]*,\s*[0-9]*,\s*[0-9]*,\s*[0-9.]*);/rgba(0, 0, 0, 0.4);/' "${ags_style}" + sed -i '/@define-color text-color/s/rgba([0-9]*,\s*[0-9]*,\s*[0-9]*,\s*[0-9.]*);/rgba(255, 255, 255, 0.7);/' "${ags_style}" + sed -i '/@define-color noti-bg-alt/s/#.*;/#111111;/' "${ags_style}" + else + sed -i '/@define-color noti-bg/s/rgba([0-9]*,\s*[0-9]*,\s*[0-9]*,\s*[0-9.]*);/rgba(255, 255, 255, 0.4);/' "${ags_style}" + sed -i '/@define-color text-color/s/rgba([0-9]*,\s*[0-9]*,\s*[0-9]*,\s*[0-9.]*);/rgba(0, 0, 0, 0.7);/' "${ags_style}" + sed -i '/@define-color noti-bg-alt/s/#.*;/#F0F0F0;/' "${ags_style}" + fi +fi + +# kitty background color change +if [ "$next_mode" = "Dark" ]; then + sed -i '/^foreground /s/^foreground .*/foreground #dddddd/' "${kitty_conf}" + sed -i '/^background /s/^background .*/background #000000/' "${kitty_conf}" + sed -i '/^cursor /s/^cursor .*/cursor #dddddd/' "${kitty_conf}" +else + sed -i '/^foreground /s/^foreground .*/foreground #000000/' "${kitty_conf}" + sed -i '/^background /s/^background .*/background #dddddd/' "${kitty_conf}" + sed -i '/^cursor /s/^cursor .*/cursor #000000/' "${kitty_conf}" +fi + +for pid_kitty in $(pidof kitty); do + kill -SIGUSR1 "$pid_kitty" +done + +# Set Dynamic Wallpaper for Dark or Light Mode +if [ "$next_mode" = "Dark" ]; then + next_wallpaper="$(find -L "${dark_wallpapers}" -type f \( -iname "*.jpg" -o -iname "*.png" \) -print0 | shuf -n1 -z | xargs -0)" +else + next_wallpaper="$(find -L "${light_wallpapers}" -type f \( -iname "*.jpg" -o -iname "*.png" \) -print0 | shuf -n1 -z | xargs -0)" +fi + +# Update wallpaper using awww command +$awww "${next_wallpaper}" $effect + + +# Set Kvantum Manager theme & QT5/QT6 settings +if [ "$next_mode" = "Dark" ]; then + kvantum_theme="catppuccin-mocha-blue" + #qt5ct_color_scheme="$HOME/.config/qt5ct/colors/Catppuccin-Mocha.conf" + #qt6ct_color_scheme="$HOME/.config/qt6ct/colors/Catppuccin-Mocha.conf" +else + kvantum_theme="catppuccin-latte-blue" + #qt5ct_color_scheme="$HOME/.config/qt5ct/colors/Catppuccin-Latte.conf" + #qt6ct_color_scheme="$HOME/.config/qt6ct/colors/Catppuccin-Latte.conf" +fi + +sed -i "s|^color_scheme_path=.*$|color_scheme_path=$qt5ct_color_scheme|" "$HOME/.config/qt5ct/qt5ct.conf" +sed -i "s|^color_scheme_path=.*$|color_scheme_path=$qt6ct_color_scheme|" "$HOME/.config/qt6ct/qt6ct.conf" +kvantummanager --set "$kvantum_theme" + + +# set the rofi color for background +if [ "$next_mode" = "Dark" ]; then + sed -i '/^background:/s/.*/background: rgba(0,0,0,0.7);/' $hyprflux_rofi +else + sed -i '/^background:/s/.*/background: rgba(255,255,255,0.9);/' $hyprflux_rofi +fi + + +# GTK themes and icons switching +set_custom_gtk_theme() { + mode=$1 + gtk_themes_directory="$HOME/.themes" + icon_directory="$HOME/.icons" + color_setting="org.gnome.desktop.interface color-scheme" + theme_setting="org.gnome.desktop.interface gtk-theme" + icon_setting="org.gnome.desktop.interface icon-theme" + + if [ "$mode" == "Light" ]; then + search_keywords="*Light*" + gsettings set $color_setting 'prefer-light' + elif [ "$mode" == "Dark" ]; then + search_keywords="*Dark*" + gsettings set $color_setting 'prefer-dark' + else + echo "Invalid mode provided." + return 1 + fi + + themes=() + icons=() + + while IFS= read -r -d '' theme_search; do + themes+=("$(basename "$theme_search")") + done < <(find "$gtk_themes_directory" -maxdepth 1 -type d -iname "$search_keywords" -print0) + + while IFS= read -r -d '' icon_search; do + icons+=("$(basename "$icon_search")") + done < <(find "$icon_directory" -maxdepth 1 -type d -iname "$search_keywords" -print0) + + if [ ${#themes[@]} -gt 0 ]; then + if [ "$mode" == "Dark" ]; then + selected_theme=${themes[RANDOM % ${#themes[@]}]} + else + selected_theme=${themes[$RANDOM % ${#themes[@]}]} + fi + echo "Selected GTK theme for $mode mode: $selected_theme" + gsettings set $theme_setting "$selected_theme" + + # Flatpak GTK apps (themes) + if command -v flatpak &> /dev/null; then + flatpak --user override --filesystem=$HOME/.themes + sleep 0.5 + flatpak --user override --env=GTK_THEME="$selected_theme" + fi + else + echo "No $mode GTK theme found" + fi + + if [ ${#icons[@]} -gt 0 ]; then + if [ "$mode" == "Dark" ]; then + selected_icon=${icons[RANDOM % ${#icons[@]}]} + else + selected_icon=${icons[$RANDOM % ${#icons[@]}]} + fi + echo "Selected icon theme for $mode mode: $selected_icon" + gsettings set $icon_setting "$selected_icon" + + ## QT5ct icon_theme + sed -i "s|^icon_theme=.*$|icon_theme=$selected_icon|" "$HOME/.config/qt5ct/qt5ct.conf" + sed -i "s|^icon_theme=.*$|icon_theme=$selected_icon|" "$HOME/.config/qt6ct/qt6ct.conf" + + # Flatpak GTK apps (icons) + if command -v flatpak &> /dev/null; then + flatpak --user override --filesystem=$HOME/.icons + sleep 0.5 + flatpak --user override --env=ICON_THEME="$selected_icon" + fi + else + echo "No $mode icon theme found" + fi +} + +# Call the function to set GTK theme and icon theme based on mode +set_custom_gtk_theme "$next_mode" + +# Update theme mode for the next cycle +update_theme_mode + + +# kill process +for pid1 in waybar rofi swaync ags swaybg; do + killall "$pid1" +done + +sleep 1 +${SCRIPTSDIR}/Refresh.sh + +sleep 0.5 +# Display notifications for theme and icon changes +notify-send -u low -i "$notif" " Themes switched to:" " $next_mode Mode" + +exit 0 + diff --git a/dotfiles/.config/hypr/scripts/KillActiveProcess.sh b/dotfiles/.config/hypr/scripts/KillActiveProcess.sh new file mode 100755 index 0000000..051b803 --- /dev/null +++ b/dotfiles/.config/hypr/scripts/KillActiveProcess.sh @@ -0,0 +1,10 @@ +#!/bin/bash +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# Copied from Discord post. Thanks to @Zorg + + +# Get id of an active window +active_pid=$(hyprctl activewindow | grep -o 'pid: [0-9]*' | cut -d' ' -f2) + +# Close active window +kill $active_pid \ No newline at end of file diff --git a/dotfiles/.config/hypr/scripts/MediaCtrl.sh b/dotfiles/.config/hypr/scripts/MediaCtrl.sh new file mode 100755 index 0000000..1594427 --- /dev/null +++ b/dotfiles/.config/hypr/scripts/MediaCtrl.sh @@ -0,0 +1,61 @@ +#!/bin/bash +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# Playerctl + +music_icon="$HOME/.config/swaync/icons/music.png" + +# Play the next track +play_next() { + playerctl next + show_music_notification +} + +# Play the previous track +play_previous() { + playerctl previous + show_music_notification +} + +# Toggle play/pause +toggle_play_pause() { + playerctl play-pause + show_music_notification +} + +# Stop playback +stop_playback() { + playerctl stop + notify-send -e -u low -i $music_icon " Playback:" " Stopped" +} + +# Display notification with song information +show_music_notification() { + status=$(playerctl status) + if [[ "$status" == "Playing" ]]; then + song_title=$(playerctl metadata title) + song_artist=$(playerctl metadata artist) + notify-send -e -u low -i $music_icon "Now Playing:" "$song_title by $song_artist" + elif [[ "$status" == "Paused" ]]; then + notify-send -e -u low -i $music_icon " Playback:" " Paused" + fi +} + +# Get media control action from command line argument +case "$1" in + "--nxt") + play_next + ;; + "--prv") + play_previous + ;; + "--pause") + toggle_play_pause + ;; + "--stop") + stop_playback + ;; + *) + echo "Usage: $0 [--nxt|--prv|--pause|--stop]" + exit 1 + ;; +esac diff --git a/dotfiles/.config/hypr/scripts/MonitorProfiles.sh b/dotfiles/.config/hypr/scripts/MonitorProfiles.sh new file mode 100755 index 0000000..82e3a5c --- /dev/null +++ b/dotfiles/.config/hypr/scripts/MonitorProfiles.sh @@ -0,0 +1,42 @@ +#!/bin/bash +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# For applying Pre-configured Monitor Profiles + +# Check if rofi is already running +if pidof rofi > /dev/null; then + pkill rofi +fi + +# Variables +iDIR="$HOME/.config/swaync/images" +SCRIPTSDIR="$HOME/.config/hypr/scripts" +monitor_dir="$HOME/.config/hypr/Monitor_Profiles" +target="$HOME/.config/hypr/monitors.conf" +rofi_theme="$HOME/.config/rofi/config-Monitors.rasi" +msg='❗NOTE:❗ This will overwrite $HOME/.config/hypr/monitors.conf' + +# Define the list of files to ignore +ignore_files=( + "README" +) + +# list of Monitor Profiles, sorted alphabetically with numbers first +mon_profiles_list=$(find -L "$monitor_dir" -maxdepth 1 -type f | sed 's/.*\///' | sed 's/\.conf$//' | sort -V) + +# Remove ignored files from the list +for ignored_file in "${ignore_files[@]}"; do + mon_profiles_list=$(echo "$mon_profiles_list" | grep -v -E "^$ignored_file$") +done + +# Rofi Menu +chosen_file=$(echo "$mon_profiles_list" | rofi -i -dmenu -config $rofi_theme -mesg "$msg") + +if [[ -n "$chosen_file" ]]; then + full_path="$monitor_dir/$chosen_file.conf" + cp "$full_path" "$target" + + notify-send -u low -i "$iDIR/ja.png" "$chosen_file" "Monitor Profile Loaded" +fi + +sleep 1 +${SCRIPTSDIR}/RefreshNoWaybar.sh & \ No newline at end of file diff --git a/dotfiles/.config/hypr/scripts/Polkit.sh b/dotfiles/.config/hypr/scripts/Polkit.sh new file mode 100755 index 0000000..f2320d3 --- /dev/null +++ b/dotfiles/.config/hypr/scripts/Polkit.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# This script starts the first available Polkit agent from a list of possible locations + +# List of potential Polkit agent file paths +polkit=( + "/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1" + "/usr/libexec/hyprpolkitagent" + "/usr/lib/hyprpolkitagent" + "/usr/lib/hyprpolkitagent/hyprpolkitagent" + "/usr/lib/polkit-kde-authentication-agent-1" + "/usr/lib/polkit-gnome-authentication-agent-1" + "/usr/libexec/polkit-gnome-authentication-agent-1" + "/usr/libexec/polkit-mate-authentication-agent-1" + "/usr/lib/x86_64-linux-gnu/libexec/polkit-kde-authentication-agent-1" + "/usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1" +) + +executed=false + +# Loop through the list of paths +for file in "${polkit[@]}"; do + if [ -e "$file" ] && [ ! -d "$file" ]; then + echo "Found: $file — executing..." + exec "$file" + executed=true + break + fi +done + +# Fallback message if nothing executed +if [ "$executed" == false ]; then + echo "No valid Polkit agent found. Please install one." +fi diff --git a/dotfiles/.config/hypr/scripts/PortalHyprland.sh b/dotfiles/.config/hypr/scripts/PortalHyprland.sh new file mode 100755 index 0000000..c69aca8 --- /dev/null +++ b/dotfiles/.config/hypr/scripts/PortalHyprland.sh @@ -0,0 +1,16 @@ +#!/bin/bash +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# For manually starting xdg-desktop-portal-hyprland + +sleep 1 +killall xdg-desktop-portal-hyprland +killall xdg-desktop-portal-wlr +killall xdg-desktop-portal-gnome +killall xdg-desktop-portal +sleep 1 +/usr/lib/xdg-desktop-portal-hyprland & +/usr/libexec/xdg-desktop-portal-hyprland & +sleep 2 +/usr/lib/xdg-desktop-portal & +/usr/libexec/xdg-desktop-portal & + diff --git a/dotfiles/.config/hypr/scripts/Refresh.sh b/dotfiles/.config/hypr/scripts/Refresh.sh new file mode 100755 index 0000000..110f287 --- /dev/null +++ b/dotfiles/.config/hypr/scripts/Refresh.sh @@ -0,0 +1,55 @@ +#!/bin/bash +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# Scripts for refreshing waybar, rofi, swaync + +SCRIPTSDIR=$HOME/.config/hypr/scripts +UserScripts=$HOME/.config/hypr/UserScripts + +# Define file_exists function +file_exists() { + if [ -e "$1" ]; then + return 0 # File exists + else + return 1 # File does not exist + fi +} + +# Kill already running processes +_ps=(waybar rofi swaync ags) +for _prs in "${_ps[@]}"; do + if pidof "${_prs}" >/dev/null; then + pkill "${_prs}" + fi +done + +# ensure waybar fully reloads +killall -SIGUSR2 waybar + +# quit ags & relaunch ags +#ags -q && ags & + +# quit quickshell & relaunch quickshell +pkill qs && qs & + +# some process to kill +for pid in $(pidof waybar rofi swaync ags swaybg); do + kill -SIGUSR1 "$pid" +done + +#Restart waybar +sleep 1 +waybar & + +# relaunch swaync +sleep 0.5 +swaync > /dev/null 2>&1 & +# reload swaync +swaync-client --reload-config + +# Relaunching rainbow borders if the script exists +sleep 1 +if file_exists "${UserScripts}/RainbowBorders.sh"; then + ${UserScripts}/RainbowBorders.sh & +fi + +exit 0 \ No newline at end of file diff --git a/dotfiles/.config/hypr/scripts/Sounds.sh b/dotfiles/.config/hypr/scripts/Sounds.sh new file mode 100755 index 0000000..aee0ef4 --- /dev/null +++ b/dotfiles/.config/hypr/scripts/Sounds.sh @@ -0,0 +1,77 @@ +#!/bin/bash +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# This script is used to play system sounds. +# Script is used by Volume.Sh and ScreenShots.sh + +theme="freedesktop" # Set the theme for the system sounds. +mute=false # Set to true to mute the system sounds. + +# Mute individual sounds here. +muteScreenshots=false +muteVolume=false + +# Exit if the system sounds are muted. +if [[ "$mute" = true ]]; then + exit 0 +fi + +# Choose the sound to play. +if [[ "$1" == "--screenshot" ]]; then + if [[ "$muteScreenshots" = true ]]; then + exit 0 + fi + soundoption="screen-capture.*" +elif [[ "$1" == "--volume" ]]; then + if [[ "$muteVolume" = true ]]; then + exit 0 + fi + soundoption="audio-volume-change.*" +elif [[ "$1" == "--error" ]]; then + if [[ "$muteScreenshots" = true ]]; then + exit 0 + fi + soundoption="dialog-error.*" +else + echo -e "Available sounds: --screenshot, --volume, --error" + exit 0 +fi + +# Set the directory defaults for system sounds. +if [ -d "/run/current-system/sw/share/sounds" ]; then + systemDIR="/run/current-system/sw/share/sounds" # NixOS +else + systemDIR="/usr/share/sounds" +fi +userDIR="$HOME/.local/share/sounds" +defaultTheme="freedesktop" + +# Prefer the user's theme, but use the system's if it doesn't exist. +sDIR="$systemDIR/$defaultTheme" +if [ -d "$userDIR/$theme" ]; then + sDIR="$userDIR/$theme" +elif [ -d "$systemDIR/$theme" ]; then + sDIR="$systemDIR/$theme" +fi + +# Get the theme that it inherits. +iTheme=$(cat "$sDIR/index.theme" | grep -i "inherits" | cut -d "=" -f 2) +iDIR="$sDIR/../$iTheme" + +# Find the sound file and play it. +sound_file=$(find -L $sDIR/stereo -name "$soundoption" -print -quit) +if ! test -f "$sound_file"; then + sound_file=$(find -L $iDIR/stereo -name "$soundoption" -print -quit) + if ! test -f "$sound_file"; then + sound_file=$(find -L $userDIR/$defaultTheme/stereo -name "$soundoption" -print -quit) + if ! test -f "$sound_file"; then + sound_file=$(find -L $systemDIR/$defaultTheme/stereo -name "$soundoption" -print -quit) + if ! test -f "$sound_file"; then + echo "Error: Sound file not found." + exit 1 + fi + fi + fi +fi + +# pipewire priority, fallback pulseaudio +pw-play "$sound_file" || pa-play "$sound_file" \ No newline at end of file diff --git a/dotfiles/.config/hypr/scripts/TouchPad.sh b/dotfiles/.config/hypr/scripts/TouchPad.sh new file mode 100755 index 0000000..3c9415c --- /dev/null +++ b/dotfiles/.config/hypr/scripts/TouchPad.sh @@ -0,0 +1,32 @@ +#!/bin/bash +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# For disabling touchpad. +# Edit the Touchpad_Device on ~/.config/hypr/UserConfigs/Laptops.conf according to your system +# use hyprctl devices to get your system touchpad device name +# source https://github.com/hyprwm/Hyprland/discussions/4283?sort=new#discussioncomment-8648109 + +notif="$HOME/.config/swaync/images/ja.png" + +export STATUS_FILE="$XDG_RUNTIME_DIR/touchpad.status" + +enable_touchpad() { + printf "true" >"$STATUS_FILE" + notify-send -u low -i $notif " Enabling" " touchpad" + hyprctl keyword '$TOUCHPAD_ENABLED' "true" -r +} + +disable_touchpad() { + printf "false" >"$STATUS_FILE" + notify-send -u low -i $notif " Disabling" " touchpad" + hyprctl keyword '$TOUCHPAD_ENABLED' "false" -r +} + +if ! [ -f "$STATUS_FILE" ]; then + enable_touchpad +else + if [ $(cat "$STATUS_FILE") = "true" ]; then + disable_touchpad + elif [ $(cat "$STATUS_FILE") = "false" ]; then + enable_touchpad + fi +fi diff --git a/dotfiles/.config/hypr/scripts/Volume.sh b/dotfiles/.config/hypr/scripts/Volume.sh new file mode 100755 index 0000000..bf8f18c --- /dev/null +++ b/dotfiles/.config/hypr/scripts/Volume.sh @@ -0,0 +1,143 @@ +#!/bin/bash +# HyprFlux — https://github.com/ahmad9059/HyprFlux +# Scripts for volume controls for audio and mic + +iDIR="$HOME/.config/swaync/icons" +sDIR="$HOME/.config/hypr/scripts" + +# Get Volume +get_volume() { + volume=$(pamixer --get-volume) + if [[ "$volume" -eq "0" ]]; then + echo "Muted" + else + echo "$volume %" + fi +} + +# Get icons +get_icon() { + current=$(get_volume) + if [[ "$current" == "Muted" ]]; then + echo "$iDIR/volume-mute.png" + elif [[ "${current%\%}" -le 30 ]]; then + echo "$iDIR/volume-low.png" + elif [[ "${current%\%}" -le 60 ]]; then + echo "$iDIR/volume-mid.png" + else + echo "$iDIR/volume-high.png" + fi +} + +# Notify +notify_user() { + if [[ "$(get_volume)" == "Muted" ]]; then + notify-send -e -h string:x-canonical-private-synchronous:volume_notif -h boolean:SWAYNC_BYPASS_DND:true -u low -i "$(get_icon)" " Volume:" " Muted" + else + notify-send -e -h int:value:"$(get_volume | sed 's/%//')" -h string:x-canonical-private-synchronous:volume_notif -h boolean:SWAYNC_BYPASS_DND:true -u low -i "$(get_icon)" " Volume Level:" " $(get_volume)" && + "$sDIR/Sounds.sh" --volume + fi +} + +# Increase Volume +inc_volume() { + if [ "$(pamixer --get-mute)" == "true" ]; then + toggle_mute + else + pamixer -i 5 --allow-boost --set-limit 150 && notify_user + fi +} + +# Decrease Volume +dec_volume() { + if [ "$(pamixer --get-mute)" == "true" ]; then + toggle_mute + else + pamixer -d 5 && notify_user + fi +} + +# Toggle Mute +toggle_mute() { + if [ "$(pamixer --get-mute)" == "false" ]; then + pamixer -m && notify-send -e -u low -h boolean:SWAYNC_BYPASS_DND:true -i "$iDIR/volume-mute.png" " Mute" + elif [ "$(pamixer --get-mute)" == "true" ]; then + pamixer -u && notify-send -e -u low -h boolean:SWAYNC_BYPASS_DND:true -i "$(get_icon)" " Volume:" " Switched ON" + fi +} + +# Toggle Mic +toggle_mic() { + if [ "$(pamixer --default-source --get-mute)" == "false" ]; then + pamixer --default-source -m && notify-send -e -u low -h boolean:SWAYNC_BYPASS_DND:true -i "$iDIR/microphone-mute.png" " Microphone:" " Switched OFF" + elif [ "$(pamixer --default-source --get-mute)" == "true" ]; then + pamixer -u --default-source u && notify-send -e -u low -h boolean:SWAYNC_BYPASS_DND:true -i "$iDIR/microphone.png" " Microphone:" " Switched ON" + fi +} +# Get Mic Icon +get_mic_icon() { + current=$(pamixer --default-source --get-volume) + if [[ "$current" -eq "0" ]]; then + echo "$iDIR/microphone-mute.png" + else + echo "$iDIR/microphone.png" + fi +} + +# Get Microphone Volume +get_mic_volume() { + volume=$(pamixer --default-source --get-volume) + if [[ "$volume" -eq "0" ]]; then + echo "Muted" + else + echo "$volume %" + fi +} + +# Notify for Microphone +notify_mic_user() { + volume=$(get_mic_volume) + icon=$(get_mic_icon) + notify-send -e -h int:value:"$volume" -h "string:x-canonical-private-synchronous:volume_notif" -h boolean:SWAYNC_BYPASS_DND:true -u low -i "$icon" " Mic Level:" " $volume" +} + +# Increase MIC Volume +inc_mic_volume() { + if [ "$(pamixer --default-source --get-mute)" == "true" ]; then + toggle_mic + else + pamixer --default-source -i 5 && notify_mic_user + fi +} + +# Decrease MIC Volume +dec_mic_volume() { + if [ "$(pamixer --default-source --get-mute)" == "true" ]; then + toggle-mic + else + pamixer --default-source -d 5 && notify_mic_user + fi +} + +# Execute accordingly +if [[ "$1" == "--get" ]]; then + get_volume +elif [[ "$1" == "--inc" ]]; then + inc_volume +elif [[ "$1" == "--dec" ]]; then + dec_volume +elif [[ "$1" == "--toggle" ]]; then + toggle_mute +elif [[ "$1" == "--toggle-mic" ]]; then + toggle_mic +elif [[ "$1" == "--get-icon" ]]; then + get_icon +elif [[ "$1" == "--get-mic-icon" ]]; then + get_mic_icon +elif [[ "$1" == "--mic-inc" ]]; then + inc_mic_volume +elif [[ "$1" == "--mic-dec" ]]; then + dec_mic_volume +else + get_volume +fi \ No newline at end of file