aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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"