aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkrolyxon <me@krolyxon.com>2026-08-13 21:12:42 +0530
committerkrolyxon <me@krolyxon.com>2026-08-13 21:12:42 +0530
commitf130f7e92715d76633e6739ca02d67aadd49cc3b (patch)
tree22c9889a7f2b7774e803c56300d4190c7e98b6de
parent19f3cf8d636ee2f9272fb9fbee3089b1edf686a1 (diff)
Hyprland: switch to .lua files since .conf is getting deprecated
For the most part everything has been ported to .lua smoothly, the screen rotation keybind doesn't work for now, i'll fix that later. But everything else seems to be working fine. Have gotten rid of split-monitor-workspaces for now to see if i really need it in my current workflow, if need occurs, install this: https://github.com/zjeffer/split-monitor-workspaces
-rw-r--r--.config/hypr/hyprland.conf87
-rw-r--r--.config/hypr/hyprland.lua100
-rw-r--r--.config/hypr/source/appearance.conf77
-rw-r--r--.config/hypr/source/appearance.lua93
-rw-r--r--.config/hypr/source/environment_variables.conf25
-rw-r--r--.config/hypr/source/environment_variables.lua34
-rw-r--r--.config/hypr/source/input.conf27
-rw-r--r--.config/hypr/source/input.lua36
-rw-r--r--.config/hypr/source/keybinds.conf118
-rw-r--r--.config/hypr/source/keybinds.lua151
-rw-r--r--.config/hypr/source/permissions.conf12
-rw-r--r--.config/hypr/source/permissions.lua41
-rw-r--r--.config/mimeapps.list4
-rw-r--r--.config/shell/profile2
14 files changed, 460 insertions, 347 deletions
diff --git a/.config/hypr/hyprland.conf b/.config/hypr/hyprland.conf
deleted file mode 100644
index 8165499..0000000
--- a/.config/hypr/hyprland.conf
+++ /dev/null
@@ -1,87 +0,0 @@
-source = $HOME/.cache/wal/colors-hyprland.conf
-autogenerated = 0
-
-# 1. PROGRAMS
-$terminal = foot
-$menu = fuzzel
-$browser = zen-browser
-
-# 2. AUTOSTART
-exec-once = (hyprpm reload -n & kanshi & waybar & swaync & gammastep & hypridle)
-exec-once = ~/.local/bin/setwall -n
-exec-once = systemctl --user start hyprpolkitagent
-
-plugin {
- hyprsplit {
- num_workspaces = 10
- persistent_workspaces = true
- }
-}
-
-# 3. ENVIRONMENT VARIABLES
-source = ~/.config/hypr/source/environment_variables.conf
-
-
-# 4. PLUGIN SETTINGS
-plugin {
- split-monitor-workspaces {
- count = 10
- keep_focused = 1
- enable_notifications = 0
- enable_persistent_workspaces = 1
- }
-}
-
-# 5. PERMISSIONS
-source = ~/.config/hypr/source/permissions.conf
-
-
-# 6. LOOK AND FEEL
-source = ~/.config/hypr/source/appearance.conf
-
-# 7. INPUT
-source = ~/.config/hypr/source/input.conf
-
-# 8. KEYBINDINGS
-source = ~/.config/hypr/source/keybinds.conf
-
-
-##############################
-### WINDOWS AND WORKSPACES ###
-##############################
-
-# See https://wiki.hypr.land/Configuring/Window-Rules/ for more
-# See https://wiki.hypr.land/Configuring/Workspace-Rules/ for workspace rules
-
-# Example windowrules that are useful
-
-windowrule {
- # Ignore maximize requests from all apps. You'll probably like this.
- name = suppress-maximize-events
- match:class = .*
-
- suppress_event = maximize
-}
-
-windowrule {
- # Fix some dragging issues with XWayland
- name = fix-xwayland-drags
- match:class = ^$
- match:title = ^$
- match:xwayland = true
- match:float = true
- match:fullscreen = false
- match:pin = false
-
- no_focus = true
-}
-
-# Hyprland-run windowrule
-windowrule {
- name = move-hyprland-run
-
- match:class = hyprland-run
-
- move = 20 monitor_h-120
- float = yes
-}
diff --git a/.config/hypr/hyprland.lua b/.config/hypr/hyprland.lua
new file mode 100644
index 0000000..c93e8e6
--- /dev/null
+++ b/.config/hypr/hyprland.lua
@@ -0,0 +1,100 @@
+
+terminal = "foot"
+menu = "fuzzel"
+browser = "librewolf"
+mainMod = "SUPER"
+
+-- -----------------------------------------------------
+-- Path to home
+-- -----------------------------------------------------
+HOME = os.getenv("HOME")
+
+
+-- Theme (pywal)
+require(os.getenv("HOME") .. "/.cache/wal/colors.lua")
+
+
+-- -----------------------------------------------------
+-- Autostart
+-- -----------------------------------------------------
+
+hl.on("hyprland.start", function()
+ hl.exec_cmd("hyprpm reload -n")
+ hl.exec_cmd("kanshi")
+ hl.exec_cmd("waybar")
+ hl.exec_cmd("swaync")
+ hl.exec_cmd("gammastep")
+ hl.exec_cmd("hypridle")
+ hl.exec_cmd(os.getenv("HOME") .. "/.local/bin/setwall -n")
+ hl.exec_cmd("systemctl --user start hyprpolkitagent")
+end)
+
+--------------------------------------------------
+-- Plugins
+--------------------------------------------------
+
+-- hl.config({
+-- plugin = {
+-- hyprsplit = {
+-- num_workspaces = 10,
+-- persistent_workspaces = true,
+-- },
+--
+-- ["split-monitor-workspaces"] = {
+-- count = 10,
+-- keep_focused = true,
+-- enable_notifications = false,
+-- enable_persistent_workspaces = true,
+-- },
+-- },
+-- })
+
+-- -----------------------------------------------------
+-- SOURCE FILES
+-- -----------------------------------------------------
+require("source.environment_variables")
+require("source.permissions")
+require("source.appearance")
+require("source.input")
+require("source.keybinds")
+
+
+--------------------------------------------------
+-- Window rules
+--------------------------------------------------
+
+hl.window_rule({
+ name = "suppress-maximize-events",
+
+ match = {
+ class = ".*",
+ },
+
+ suppress_event = "maximize",
+})
+
+hl.window_rule({
+ name = "fix-xwayland-drags",
+
+ match = {
+ class = "^$",
+ title = "^$",
+ xwayland = true,
+ float = true,
+ fullscreen = false,
+ pin = false,
+ },
+
+ no_focus = true,
+})
+
+hl.window_rule({
+ name = "move-hyprland-run",
+
+ match = {
+ class = "hyprland-run",
+ },
+
+ move = "20 monitor_h-120",
+ float = true,
+})
diff --git a/.config/hypr/source/appearance.conf b/.config/hypr/source/appearance.conf
deleted file mode 100644
index c18a94c..0000000
--- a/.config/hypr/source/appearance.conf
+++ /dev/null
@@ -1,77 +0,0 @@
-general {
- gaps_in = 2
- gaps_out = 2
- border_size = 2
- resize_on_border = false
- allow_tearing = false
- # col.active_border = $color14 $color0 $color0 $color14 45deg # Gradient border
- col.active_border = $color14 $color14 $color14 $color14 45deg
- col.inactive_border = $color0 $color0 $color0 $color0 45deg
- layout = master
-}
-
-decoration {
- # rounding = 8
-
-
- # blur {
- # enabled = true
- # size = 3
- # passes = 1
- # }
-
-
- blur {
- enabled = true
- size = 3
- passes = 3
- new_optimizations = true
- vibrancy = 0.1696
- ignore_opacity = true
- }
-}
-
-animations {
- enabled = false
- bezier = myBezier, 0.05, 0.9, 0.1, 1.05
- animation = windows, 1, 2, myBezier
- animation = windowsOut, 1, 2, default, popin 80%
- animation = border, 1, 10, default
- animation = borderangle, 1, 8, default
- animation = fade, 1, 7, default
- animation = workspaces, 1, 1, default
-}
-
-# Ref https://wiki.hypr.land/Configuring/Workspace-Rules/
-# "Smart gaps" / "No gaps when only"
-# uncomment all if you wish to use that.
-# workspace = w[tv1], gapsout:0, gapsin:0
-# workspace = f[1], gapsout:0, gapsin:0
-# windowrule = bordersize 0, floating:0, onworkspace:w[tv1]
-# windowrule = rounding 0, floating:0, onworkspace:w[tv1]
-# windowrule = bordersize 0, floating:0, onworkspace:f[1]
-# windowrule = rounding 0, floating:0, onworkspace:f[1]
-
-# See https://wiki.hypr.land/Configuring/Dwindle-Layout/ for more
-dwindle {
- preserve_split = true # You probably want this
-}
-
-# See https://wiki.hypr.land/Configuring/Master-Layout/ for more
-master {
- new_status = master
- new_on_top = true
-
-}
-
-# https://wiki.hypr.land/Configuring/Variables/#misc
-misc {
- force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers
- disable_hyprland_logo = true# If true disables the random hyprland logo / anime girl background. :(
- disable_splash_rendering = true
- mouse_move_enables_dpms = true
- key_press_enables_dpms = true
- vrr = 0 # Disable adaptive sync
-}
-
-
diff --git a/.config/hypr/source/appearance.lua b/.config/hypr/source/appearance.lua
new file mode 100644
index 0000000..55b8c9f
--- /dev/null
+++ b/.config/hypr/source/appearance.lua
@@ -0,0 +1,93 @@
+-- source/appearance.lua
+
+
+hl.config({
+ --------------------------------------------------
+ -- General
+ --------------------------------------------------
+ general = {
+ gaps_in = 2,
+ gaps_out = 2,
+ border_size = 2,
+
+ resize_on_border = false,
+ allow_tearing = false,
+
+ layout = "master",
+
+ -- Pywal colors
+ -- active_border = "$color14 $color14 $color14 $color14 45deg",
+ -- inactive_border = "$color0 $color0 $color0 $color0 45deg",
+
+ -- Gradient example
+ -- active_border = "$color14 $color0 $color0 $color14 45deg",
+ },
+
+ --------------------------------------------------
+ -- Decoration
+ --------------------------------------------------
+ decoration = {
+ -- rounding = 8,
+
+ blur = {
+ enabled = true,
+ size = 3,
+ passes = 3,
+ new_optimizations = true,
+ vibrancy = 0.1696,
+ ignore_opacity = true,
+ },
+ },
+
+ --------------------------------------------------
+ -- Animations
+ --------------------------------------------------
+ animations = {
+ enabled = false,
+
+ bezier = {
+ {
+ name = "myBezier",
+ points = {0.05, 0.9, 0.1, 1.05},
+ },
+ },
+
+ animation = {
+ {"windows", 1, 2, "myBezier"},
+ {"windowsOut", 1, 2, "default", "popin 80%"},
+ {"border", 1, 10, "default"},
+ {"borderangle", 1, 8, "default"},
+ {"fade", 1, 7, "default"},
+ {"workspaces", 1, 1, "default"},
+ },
+ },
+
+ --------------------------------------------------
+ -- Dwindle
+ --------------------------------------------------
+ dwindle = {
+ preserve_split = true,
+ },
+
+ --------------------------------------------------
+ -- Master
+ --------------------------------------------------
+ master = {
+ new_status = "master",
+ new_on_top = true,
+ },
+
+ --------------------------------------------------
+ -- Misc
+ --------------------------------------------------
+ misc = {
+ force_default_wallpaper = -1,
+ disable_hyprland_logo = true,
+ disable_splash_rendering = true,
+
+ mouse_move_enables_dpms = true,
+ key_press_enables_dpms = true,
+
+ vrr = 0,
+ },
+})
diff --git a/.config/hypr/source/environment_variables.conf b/.config/hypr/source/environment_variables.conf
deleted file mode 100644
index 6e64446..0000000
--- a/.config/hypr/source/environment_variables.conf
+++ /dev/null
@@ -1,25 +0,0 @@
-# See https://wiki.hypr.land/Configuring/Environment-variables/
-env = HYPRSHOT_DIR,/home/krolyxon/pix/ss/
-env = XCURSOR_SIZE,24
-env = HYPRCURSOR_SIZE,24
-# env = GTK_THEME,Tokyonight-Dark
-
-# XDG Specifications
-env = XDG_CURRENT_DESKTOP,Hyprland
-env = XDG_SESSION_TYPE,wayland
-env = XDG_SESSION_DESKTOP,Hyprland
-
-# Toolkit
-env = GDK_BACKEND,wayland,x11,* # GTK: Use Wayland if available; if not, try X11 and then any other GDK backend.
-env = QT_QPA_PLATFORM,wayland;xcb # Qt: Use Wayland if available, fall back to X11 if not
-env = SDL_VIDEODRIVER,Wayland # Run SDL2 applications on Wayland. Remove or set to x11 if games that provide older versions of SDL cause compatibility issues
-env = CLUTTER_BACKEND,wayland # Clutter applications to try and use the Wayland backend
-
-# Force NVIDIA as primary GPU
-# env = __NV_PRIME_RENDER_OFFLOAD,1
-# env = __GLX_VENDOR_LIBRARY_NAME,nvidia
-# env = __VK_LAYER_NV_optimus,NVIDIA_only
-# env = GBM_BACKEND,nvidia-drm
-# env = WLR_NO_HARDWARE_CURSORS,1
-# env = LIBVA_DRIVER_NAME,nvidia
-
diff --git a/.config/hypr/source/environment_variables.lua b/.config/hypr/source/environment_variables.lua
new file mode 100644
index 0000000..4335859
--- /dev/null
+++ b/.config/hypr/source/environment_variables.lua
@@ -0,0 +1,34 @@
+-- source/environment_variables.lua
+
+--------------------------------------------------
+-- Environment Variables
+--------------------------------------------------
+local envs = {
+ HYPRSHOT_DIR = "/home/krolyxon/pix/ss/",
+ XCURSOR_SIZE = "24",
+ HYPRCURSOR_SIZE = "24",
+
+ XDG_CURRENT_DESKTOP = "Hyprland",
+ XDG_SESSION_TYPE = "wayland",
+ XDG_SESSION_DESKTOP = "Hyprland",
+
+ GDK_BACKEND = "wayland,x11,*",
+ QT_QPA_PLATFORM = "wayland;xcb",
+ SDL_VIDEODRIVER = "Wayland",
+ CLUTTER_BACKEND = "wayland",
+}
+
+for k, v in pairs(envs) do
+ hl.env(k, v)
+end
+
+--------------------------------------------------
+-- NVIDIA (uncomment if needed)
+--------------------------------------------------
+
+-- hl.env("__NV_PRIME_RENDER_OFFLOAD", "1")
+-- hl.env("__GLX_VENDOR_LIBRARY_NAME", "nvidia")
+-- hl.env("__VK_LAYER_NV_optimus", "NVIDIA_only")
+-- hl.env("GBM_BACKEND", "nvidia-drm")
+-- hl.env("WLR_NO_HARDWARE_CURSORS", "1")
+-- hl.env("LIBVA_DRIVER_NAME", "nvidia")
diff --git a/.config/hypr/source/input.conf b/.config/hypr/source/input.conf
deleted file mode 100644
index 3febb3e..0000000
--- a/.config/hypr/source/input.conf
+++ /dev/null
@@ -1,27 +0,0 @@
-# https://wiki.hypr.land/Configuring/Variables/#input
-input {
- kb_layout = us
- kb_variant =
- kb_model =
- kb_options =
- kb_rules =
-
- follow_mouse = 1
-
- sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
-
- touchpad {
- natural_scroll = false
- }
-
- repeat_delay = 300
- repeat_rate = 50
-}
-
-# Example per-device config
-# See https://wiki.hypr.land/Configuring/Keywords/#per-device-input-configs for more
-device {
- name = epic-mouse-v1
- sensitivity = -0.5
-}
-
diff --git a/.config/hypr/source/input.lua b/.config/hypr/source/input.lua
new file mode 100644
index 0000000..e41e0ac
--- /dev/null
+++ b/.config/hypr/source/input.lua
@@ -0,0 +1,36 @@
+-- source/input.lua
+
+--------------------------------------------------
+-- Global Input
+--------------------------------------------------
+
+hl.config({
+ input = {
+ kb_layout = "us",
+ kb_variant = "",
+ kb_model = "",
+ kb_options = "",
+ kb_rules = "",
+
+ follow_mouse = 1,
+
+ -- -1.0 .. 1.0
+ sensitivity = 0,
+
+ touchpad = {
+ natural_scroll = false,
+ },
+
+ repeat_delay = 300,
+ repeat_rate = 50,
+ },
+})
+
+--------------------------------------------------
+-- Per-device Configuration
+--------------------------------------------------
+
+hl.device({
+ name = "epic-mouse-v1",
+ sensitivity = -0.5,
+})
diff --git a/.config/hypr/source/keybinds.conf b/.config/hypr/source/keybinds.conf
deleted file mode 100644
index eda98b1..0000000
--- a/.config/hypr/source/keybinds.conf
+++ /dev/null
@@ -1,118 +0,0 @@
-###################
-### KEYBINDINGS ###
-###################
-
-# See https://wiki.hypr.land/Configuring/Keywords/
-$mainMod = SUPER # Sets "Windows" key as main modifier
-
-# Example binds, see https://wiki.hypr.land/Configuring/Binds/ for more
-bind = $mainMod, Return, exec, $terminal
-bind = $mainMod SHIFT, X, killactive,
-bind = $mainMod SHIFT, Q, exit,
-bind = $mainMod, F, Fullscreen
-bind = $mainMod SHIFT, F, Fullscreen, 1
-# bind = $mainMod SHIFT, R, togglefloating,
-# Smart Float: Toggle float -> Resize to 90% -> Center
-bind = $mainMod SHIFT, R, exec, if hyprctl -j activewindow | jq -e '.floating | not'; then hyprctl --batch "dispatch togglefloating; dispatch resizeactive exact 90% 90%; dispatch centerwindow"; else hyprctl dispatch togglefloating; fi
-bind = $mainMod, R, exec, $menu
-#bind = $mainMod SHIFT, P, pseudo, # dwindle
-binde = $mainMod, tab, cyclenext, prev
-bind = $mainMod, b, exec, killall waybar || waybar
-bind = $mainMod, grave, exec, fuzzelunicode
-bind = $mainMod, escape, exec, sysact
-
-# Applications
-bind = $mainMod, W, exec, $browser
-bind = ,PRINT, exec, hypr_screenshot.sh
-bind = $mainMod SHIFT, P, exec, hypr_screenshot.sh
-
-# Music Controls
-bind = $mainMod, m, exec, $terminal -e zsh -i -c "ncmpcpp"
-bind = $mainMod, p, exec, mpc toggle
-binde = $mainMod, period, exec, mpc seek +10
-binde = $mainMod, comma, exec, mpc seek -10
-bind = $mainMod SHIFT, period, exec, mpc next
-bind = $mainMod SHIFT, comma, exec, mpc prev
-
-# Swap current focused window with master
-bind = $mainMod, space, layoutmsg, swapwithmaster
-
-# Resize windows with h/j/k/l
-binde = $mainMod, h, resizeactive, -30 0
-binde = $mainMod, l, resizeactive, 30 0
-binde = $mainMod, k, resizeactive, 0 -30
-binde = $mainMod, j, resizeactive, 0 30
-
-# Switch workspaces with mainMod + [0-9]
-bind = $mainMod, 1, split-workspace, 1
-bind = $mainMod, 2, split-workspace, 2
-bind = $mainMod, 3, split-workspace, 3
-bind = $mainMod, 4, split-workspace, 4
-bind = $mainMod, 5, split-workspace, 5
-bind = $mainMod, 6, split-workspace, 6
-bind = $mainMod, 7, split-workspace, 7
-bind = $mainMod, 8, split-workspace, 8
-bind = $mainMod, 9, split-workspace, 9
-bind = $mainMod, 0, split-workspace, 10
-
-# Move active window to a workspace with mainMod + SHIFT + [0-9]
-bind = $mainMod SHIFT, 1, split-movetoworkspacesilent, 1
-bind = $mainMod SHIFT, 2, split-movetoworkspacesilent, 2
-bind = $mainMod SHIFT, 3, split-movetoworkspacesilent, 3
-bind = $mainMod SHIFT, 4, split-movetoworkspacesilent, 4
-bind = $mainMod SHIFT, 5, split-movetoworkspacesilent, 5
-bind = $mainMod SHIFT, 6, split-movetoworkspacesilent, 6
-bind = $mainMod SHIFT, 7, split-movetoworkspacesilent, 7
-bind = $mainMod SHIFT, 8, split-movetoworkspacesilent, 8
-bind = $mainMod SHIFT, 9, split-movetoworkspacesilent, 9
-bind = $mainMod SHIFT, 0, split-movetoworkspacesilent, 10
-
-# Example special workspace (scratchpad)
-bind = $mainMod, S, togglespecialworkspace, magic
-bind = $mainMod SHIFT, S, movetoworkspace, special:magic
-
-# Scratchpad like DWM
-workspace = special:h, on-created-empty: $terminal
-bind = $mainMod SHIFT, Return, togglespecialworkspace, h
-
-
-# Accessibility: Zoom
-cursor:zoom_disable_aa = true
-# Zoom In
-binded = SUPER, equal, Zoom In, exec, sh -c "hyprctl keyword cursor:zoom_factor \"$(hyprctl getoption cursor:zoom_factor | awk 'NR==1 {print $2 * 1.25}')\""
-# Zoom Out
-binded = SUPER, minus, Zoom Out, exec, sh -c "hyprctl keyword cursor:zoom_factor \"$(hyprctl getoption cursor:zoom_factor | awk 'NR==1 {val = $2 / 1.25; if (val < 1.0) val = 1.0; print val}')\""
-# Reset Zoom
-bindld = SUPER, BACKSPACE, Reset Zoom, exec, hyprctl keyword cursor:zoom_factor 1.0
-
-# Screen Rotate
-bindld = $mainMod CTRL, comma, Rotate Screen Anti-Clockwise, exec, hypr_screen_rotate.sh +90
-bindld = $mainMod CTRL, period, Rotate Screen Clockwise, exec, hypr_screen_rotate.sh -90
-
-# --- Hyprshade (Visual Filters) ---
-bindd = $mainMod CTRL, S, Shader Menu, exec, hypr_shader_menu.sh
-bindld = $mainMod CTRL, X, Disable Shader, exec, hyprshade off
-bindld = $mainMod CTRL, V, Vibrant Shader, exec, hyprshade on vibrance
-
-# Scroll through existing workspaces with mainMod + scroll
-bind = $mainMod, mouse_down, workspace, e+1
-bind = $mainMod, mouse_up, workspace, e-1
-
-# Move/resize windows with mainMod + LMB/RMB and dragging
-bindm = $mainMod, mouse:272, movewindow
-bindm = $mainMod, mouse:273, resizewindow
-
-# Laptop multimedia keys for volume and LCD brightness
-bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+
-bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
-bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
-bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
-bindel = , XF86MonBrightnessDown, exec, ~/.local/bin/brictl -
-bindel = , XF86MonBrightnessUp, exec, ~/.local/bin/brictl +
-
-
-# Requires playerctl
-bindl = , XF86AudioNext, exec, playerctl next
-bindl = , XF86AudioPause, exec, playerctl play-pause
-bindl = , XF86AudioPlay, exec, playerctl play-pause
-bindl = , XF86AudioPrev, exec, playerctl previous
diff --git a/.config/hypr/source/keybinds.lua b/.config/hypr/source/keybinds.lua
new file mode 100644
index 0000000..d71cc01
--- /dev/null
+++ b/.config/hypr/source/keybinds.lua
@@ -0,0 +1,151 @@
+---------------------
+---- KEYBINDINGS ----
+---------------------
+-- See https://wiki.hypr.land/Configuring/Basics/Binds/ for more
+
+hl.bind(mainMod .. " + Return", hl.dsp.exec_cmd(terminal))
+hl.bind(mainMod .. " + SHIFT + X", hl.dsp.window.close())
+hl.bind(mainMod .. " + SHIFT + Q", hl.dsp.exit())
+hl.bind(mainMod .. " + F", hl.dsp.window.fullscreen({ mode = "fullscreen", action = "toggle" }))
+hl.bind(mainMod .. " + SHIFT + F", hl.dsp.window.fullscreen({ mode = "maximized", action = "toggle" }))
+
+-- bind = $mainMod SHIFT, R, togglefloating,
+-- Smart Float: Toggle float -> Resize to 90% -> Center
+hl.bind(
+ mainMod .. "+ SHIFT + R",
+ hl.dsp.exec_cmd([[
+ if hyprctl activewindow | grep -q 'floating: 0'; then
+ W=$(hyprctl monitors -j | jq '.[] | select(.focused) | ((.width / .scale) * 0.9) | floor')
+ H=$(hyprctl monitors -j | jq '.[] | select(.focused) | ((.height / .scale) * 0.9) | floor')
+ hyprctl --batch "dispatch hl.dsp.window.float({action='set'}); dispatch hl.dsp.window.resize({x=${W}, y=${H}, relative=false})"
+ hyprctl dispatch "hl.dsp.window.center()"
+ else
+ hyprctl dispatch "hl.dsp.window.float({action='unset'})"
+ fi
+ ]]),
+ { description = "Smart Float" }
+)
+
+
+hl.bind(mainMod .. " + R", hl.dsp.exec_cmd(menu))
+-- bind = $mainMod SHIFT, P, pseudo, # dwindle
+-- (left commented out to mirror the original file)
+hl.bind(mainMod .. " + Tab", hl.dsp.window.cycle_next({ next = false }), { repeating = true })
+hl.bind(mainMod .. " + b", hl.dsp.exec_cmd("killall waybar || waybar"))
+hl.bind(mainMod .. " + grave", hl.dsp.exec_cmd("fuzzelunicode"))
+hl.bind(mainMod .. " + escape", hl.dsp.exec_cmd("sysact"))
+
+-- Applications
+hl.bind(mainMod .. " + W", hl.dsp.exec_cmd(browser))
+hl.bind("PRINT", hl.dsp.exec_cmd("hypr_screenshot.sh"))
+hl.bind(mainMod .. " + SHIFT + P", hl.dsp.exec_cmd("hypr_screenshot.sh"))
+
+-- Music Controls
+hl.bind(mainMod .. " + m", hl.dsp.exec_cmd(terminal .. " -e zsh -i -c \"ncmpcpp\""))
+hl.bind(mainMod .. " + p", hl.dsp.exec_cmd("mpc toggle"))
+hl.bind(mainMod .. " + period", hl.dsp.exec_cmd("mpc seek +10"), { repeating = true })
+hl.bind(mainMod .. " + comma", hl.dsp.exec_cmd("mpc seek -10"), { repeating = true })
+hl.bind(mainMod .. " + SHIFT + period", hl.dsp.exec_cmd("mpc next"))
+hl.bind(mainMod .. " + SHIFT + comma", hl.dsp.exec_cmd("mpc prev"))
+
+-- Swap current focused window with master
+hl.bind(mainMod .. " + space", hl.dsp.layout("swapwithmaster"))
+
+-- Resize windows with h/j/k/l
+hl.bind(mainMod .. " + h", hl.dsp.window.resize({ x = -30, y = 0, relative = true}), { repeating = true })
+hl.bind(mainMod .. " + l", hl.dsp.window.resize({ x = 30, y = 0, relative = true}), { repeating = true })
+hl.bind(mainMod .. " + k", hl.dsp.window.resize({ x = 0, y = -30, relative = true }), { repeating = true })
+hl.bind(mainMod .. " + j", hl.dsp.window.resize({ x = 0, y = 30, relative = true }), { repeating = true })
+
+
+-- -----------------------------------------------------
+-- Workspace switching
+-- -----------------------------------------------------
+
+for i = 1, 10 do
+ local key = i % 10 -- 10 maps to key 0
+
+ -- Switch to workspace
+ hl.bind(
+ mainMod .. " + " .. key,
+ hl.dsp.focus({ workspace = i })
+ )
+
+ -- Move active window to workspace
+ hl.bind(
+ mainMod .. " + SHIFT + " .. key,
+ hl.dsp.window.move({ workspace = i, follow = false })
+ )
+end
+
+-- Example special workspace (scratchpad)
+hl.bind(mainMod .. " + S", hl.dsp.workspace.toggle_special("magic"))
+hl.bind(mainMod .. " + SHIFT + S", hl.dsp.window.move({ workspace = "special:magic" }))
+
+-- Scratchpad like DWM
+hl.workspace_rule({ workspace = "special:h", on_created_empty = terminal })
+hl.bind(mainMod .. " + SHIFT + Return", hl.dsp.workspace.toggle_special("h"))
+
+-- --- Accessibility: Zoom ---
+hl.config({ cursor = { zoom_disable_aa = true } })
+
+hl.bind(
+ "SUPER + equal",
+ function()
+ local z = hl.get_config("cursor.zoom_factor")
+ hl.config({ cursor = { zoom_factor = z * 1.25 } })
+ end,
+ { description = "Zoom In", repeating = true }
+)
+
+hl.bind(
+ "SUPER + minus",
+ function()
+ local z = hl.get_config("cursor.zoom_factor")
+ local nz = z / 1.25
+ if nz < 1.0 then nz = 1.0 end
+ hl.config({ cursor = { zoom_factor = nz } })
+ end,
+ { description = "Zoom Out", repeating = true }
+)
+
+hl.bind(
+ "SUPER + BACKSPACE",
+ function()
+ hl.config({ cursor = { zoom_factor = 1.0 } })
+ end,
+ { description = "Reset Zoom", locked = true }
+)
+
+-- Screen Rotate
+hl.bind(mainMod .. " + CTRL + comma", hl.dsp.exec_cmd("hypr_screen_rotate.sh +90"),
+ { locked = true, desc = "Rotate Screen Anti-Clockwise" })
+hl.bind(mainMod .. " + CTRL + period", hl.dsp.exec_cmd("hypr_screen_rotate.sh -90"),
+ { locked = true, desc = "Rotate Screen Clockwise" })
+
+-- --- Hyprshade (Visual Filters) ---
+hl.bind(mainMod .. " + CTRL + S", hl.dsp.exec_cmd("hypr_shader_menu.sh"), { desc = "Shader Menu" })
+hl.bind(mainMod .. " + CTRL + X", hl.dsp.exec_cmd("hyprshade off"), { locked = true, desc = "Disable Shader" })
+hl.bind(mainMod .. " + CTRL + V", hl.dsp.exec_cmd("hyprshade on vibrance"), { locked = true, desc = "Vibrant Shader" })
+
+-- Scroll through existing workspaces with mainMod + scroll
+hl.bind(mainMod .. " + mouse_down", hl.dsp.focus({ workspace = "e+1" }))
+hl.bind(mainMod .. " + mouse_up", hl.dsp.focus({ workspace = "e-1" }))
+
+-- Move/resize windows with mainMod + LMB/RMB and dragging
+hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true })
+hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true })
+
+-- Laptop multimedia keys for volume and LCD brightness
+hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+"), { locked = true, repeating = true })
+hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"), { locked = true, repeating = true })
+hl.bind("XF86AudioMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"), { locked = true, repeating = true })
+hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"), { locked = true, repeating = true })
+hl.bind("XF86MonBrightnessDown", hl.dsp.exec_cmd("~/.local/bin/brictl -"), { locked = true, repeating = true })
+hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("~/.local/bin/brictl +"), { locked = true, repeating = true })
+
+-- Requires playerctl
+hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), { locked = true })
+hl.bind("XF86AudioPause", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true })
+hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true })
+hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), { locked = true })
diff --git a/.config/hypr/source/permissions.conf b/.config/hypr/source/permissions.conf
deleted file mode 100644
index 9de32d7..0000000
--- a/.config/hypr/source/permissions.conf
+++ /dev/null
@@ -1,12 +0,0 @@
-ecosystem {
- enforce_permissions = 1
-}
-
-permission = /usr/(bin|local/bin)/grim, screencopy, allow
-permission = /usr/(bin|local/bin)/hyprlock, screencopy, allow
-permission = /usr/(bin|local/bin)/hyprpicker , screencopy, allow
-permission = /usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland, screencopy, allow
-permission = /usr/(bin|local/bin)/hyprpm, plugin, allow
-permission = ${lib.escapeRegex (lib.getExe config.programs.hyprlock.package)}, screencopy, allow
-
-
diff --git a/.config/hypr/source/permissions.lua b/.config/hypr/source/permissions.lua
new file mode 100644
index 0000000..c33fb51
--- /dev/null
+++ b/.config/hypr/source/permissions.lua
@@ -0,0 +1,41 @@
+hl.config({
+ ecosystem = {
+ enforce_permissions = true,
+ },
+})
+
+hl.permission({
+ binary = "/usr/(bin|local/bin)/grim",
+ type = "screencopy",
+ mode = "allow",
+})
+
+hl.permission({
+ binary = "/usr/(bin|local/bin)/hyprlock",
+ type = "screencopy",
+ mode = "allow",
+})
+
+hl.permission({
+ binary = "/usr/(bin|local/bin)/hyprpicker",
+ type = "screencopy",
+ mode = "allow",
+})
+
+hl.permission({
+ binary = "/usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland",
+ type = "screencopy",
+ mode = "allow",
+})
+
+hl.permission({
+ binary = "/usr/(bin|local/bin)/hyprpm",
+ type = "plugin",
+ mode = "allow",
+})
+
+hl.permission({
+ binary = "${lib.escapeRegex (lib.getExe config.programs.hyprlock.package)}",
+ type = "screencopy",
+ mode = "allow",
+})
diff --git a/.config/mimeapps.list b/.config/mimeapps.list
index e7652ec..aa09745 100644
--- a/.config/mimeapps.list
+++ b/.config/mimeapps.list
@@ -14,6 +14,10 @@ x-scheme-handler/lbry=lbry.desktop
inode/directory=file.desktop
x-scheme-handler/tonsite=org.telegram.desktop.desktop
x-scheme-handler/tuta=tutanota-desktop.desktop
+x-scheme-handler/http=librewolf.desktop
+x-scheme-handler/https=librewolf.desktop
+text/html=librewolf.desktop
+application/xhtml+xml=librewolf.desktop
[Added Associations]
x-scheme-handler/tonsite=org.telegram.desktop.desktop;
diff --git a/.config/shell/profile b/.config/shell/profile
index e8da8f9..552d3a9 100644
--- a/.config/shell/profile
+++ b/.config/shell/profile
@@ -3,7 +3,7 @@
export EDITOR="nvim"
export TERMINAL="foot"
export TERMINAL_PROG="foot"
-export BROWSER="zen-browser"
+export BROWSER="librewolf"
export XDG_CONFIG_HOME="$HOME/.config"
export XDG_DATA_HOME="$HOME/.local/share"