diff --git a/.luarc.json b/.luarc.json new file mode 100644 index 0000000..5dc4338 --- /dev/null +++ b/.luarc.json @@ -0,0 +1,10 @@ +{ + "workspace": { + "library": [ + "/nix/store/k1jc5h9ls6j600hcpjciqn0s29whas63-hyprland-0.55.0+date=2026-05-11_5e441ca/share/hypr/stubs/hl.meta.lua" + ] + }, + "diagnostics": { + "globals": ["hl"] + } +} diff --git a/animations.conf b/animations.conf deleted file mode 100644 index cdc05bd..0000000 --- a/animations.conf +++ /dev/null @@ -1,19 +0,0 @@ -animations { - enabled = true - - bezier = heavyOvershoot, 0.53, 0.51, 0.3, 1.22 - bezier = lightOvershoot, 0.33, 0.61, 0.63, 1.19 - bezier = smoothSnap, 0.32, 0.51, 0.44, 1 - bezier = smoothIn, 0.25, 1, 0.5, 1 - bezier = smoothOutOvershoot, 0.46, -0.25, 0.81, 0.51 - - animation = workspaces, 1, 2.5, heavyOvershoot, slidefade 30% - animation = specialWorkspace, 1, 2, smoothIn, slidefadevert -80% - animation = specialWorkspaceOut, 1, 1.7, smoothOutOvershoot, slidefadevert -80% - - animation = windows, 1, 2, smoothIn, slide right - animation = windowsMove, 1, 2, smoothSnap - animation = windowsOut, 1, 4, heavyOvershoot, popin 30% - - animation = fade, 1, 2, smoothIn -} diff --git a/autoload.lua b/autoload.lua new file mode 100644 index 0000000..19e210b --- /dev/null +++ b/autoload.lua @@ -0,0 +1,25 @@ +-- ~/.config/hypr/autoload.lua + +-- Path to search +local modules = os.getenv("HOME") .. "/.config/hypr/modules" + +-- Get all files in modules dir +local p = io.popen('find -L "' .. modules .. '" -name "*.lua" -type f | sort') +if not p then + return +end + +-- Recursively search and return modules +for path in p:lines() do + local ok, err = pcall(dofile, path) + -- If you fucked up the syntax like an idiot + if not ok then + hl.notification.create({ + text = "autoload: " .. path .. "\n" .. tostring(err), + timeout = 8000, + icon = "warning", + }) + end +end + +p:close() diff --git a/binds.conf b/binds.conf deleted file mode 100644 index dc3c9c2..0000000 --- a/binds.conf +++ /dev/null @@ -1,58 +0,0 @@ -# Script Path -$scrPath = ~/.config/scripts - -# Assign apps -$term = kitty -$file = nemo -$browser = firefox -$launcher = $scrPath/otter-launch.sh - -# Window/Session actions -bind = $mainMod, backspace, exec, $scrPath/dontkillsteam.sh # close focused window -bind = $mainMod, d, exec, $launcher - -# Super key to drag windows -binds { - drag_threshold = 10 - scroll_event_delay = 0 -} -bindm = $submod, mouse:272, movewindow -bindr = $submod, mouse:272, layoutmsg, promote -bindc = $submod, mouse:272, togglefloating - -# Resize floating window with scrollwheels -bind = $submod, mouse_down, resizeactive, 0 -30 -bind = $submod, mouse_up, resizeactive, 0 30 -bind = $submod, mouse_left, resizeactive, 30 0 -bind = $submod, mouse_right, resizeactive, -30 0 -bind = $submod, space, togglefloating, # toggle the window between focus and float - -# Screenshot/Screencapture -bind = Super+SHIFT, S, exec, grimblast copy area - -# Move/Change window focus -bind = $mainMod, h, layoutmsg, focus l -bind = $mainMod, l, layoutmsg, focus r -bind = $mainMod, k, movefocus, u -bind = $mainMod, j, movefocus, d - -# Resize floating windows with keyboard -bind = $submod ctrl, h, resizeactive, -50 0 -bind = $submod ctrl, l, resizeactive, 50 0 -bind = $submod ctrl, k, resizeactive, 0 50 -bind = $submod ctrl, j, resizeactive, 0 -50 - -# Change window positions with keyboard -bind = $mainMod SHIFT, H, swapwindow, l -bind = $mainMod SHIFT, L, swapwindow, r -bind = $mainMod SHIFT, K, swapwindow, u -bind = $mainMod SHIFT, J, swapwindow, d - -# Move/Switch to special workspace (scratchpad) -bind = $mainMod, MINUS, togglespecialworkspace, scratch -bind = $mainMod SHIFT, MINUS, movetoworkspacesilent, special:scratch - -# Music workspace -bind = $mainMod, m, togglespecialworkspace, music - -source = ~/.config/hypr/binds-local.conf diff --git a/cat.png b/cat.png deleted file mode 100644 index deb6a04..0000000 Binary files a/cat.png and /dev/null differ diff --git a/hyprland.conf b/hyprland.conf deleted file mode 100644 index 66450e0..0000000 --- a/hyprland.conf +++ /dev/null @@ -1,8 +0,0 @@ -source = ~/.config/hypr/rules.conf -source = ~/.config/hypr/local.conf -source = ~/.config/hypr/binds.conf -source = ~/.config/hypr/style.conf -source = ~/.config/hypr/animations.conf -source = ~/.config/hypr/input.conf -source = ~/.config/hypr/windows.conf -source = ~/.config/hypr/startup.conf diff --git a/hyprland.lua b/hyprland.lua new file mode 100644 index 0000000..3f2eae0 --- /dev/null +++ b/hyprland.lua @@ -0,0 +1,15 @@ +-- Get hostname from envvars or something +local handle = io.popen("hostname") +Hostname = "unknown" -- Default fallback + +-- If there is a hostname at all +if handle then + local result = handle:read("*l") -- Read the first line + handle:close() + if result then + Hostname = result:gsub("%s+", "") -- Remove whitespace/newlines + end +end + +-- Import everything else +require("autoload") diff --git a/hyprlock.conf b/hyprlock.conf deleted file mode 100644 index a2d0ea5..0000000 --- a/hyprlock.conf +++ /dev/null @@ -1,109 +0,0 @@ -source = $HOME/.config/hypr/mocha.conf - -$accent = $mauve -$accentAlpha = $mauveAlpha -$font = JetBrainsMono Nerd Font - -# GENERAL -general { - hide_cursor = true -} - -# BACKGROUND -background { - monitor = - path = $HOME/.config/background - blur_passes = 0 - color = $base -} - - -# LAYOUT -label { - monitor = - text = Layout: $LAYOUT - color = $text - font_size = 25 - font_family = $font - position = 30, -30 - halign = left - valign = top -} - -# TIME -label { - monitor = - text = $TIME - color = $text - font_size = 90 - font_family = $font - position = -30, 0 - halign = right - valign = top -} - -# DATE -label { - monitor = - text = cmd[update:43200000] date +"%A, %d %B %Y" - color = $text - font_size = 25 - font_family = $font - position = -30, -150 - halign = right - valign = top -} - -# FINGERPRINT -{ - monitor = ""; - text = "$FPRINTPROMPT"; - color = "$text"; - font_size = 14; - font_family = $font; - position = "0, -107"; - halign = "center"; - valign = "center"; -} - -image { - path = $HOME/.config/hypr/cat.png - size = 240 - border_color = transparent - rounding = 0 - position = 0, 7px -} - -# USER AVATAR -image { - monitor = - path = $HOME/.face - size = 100 - border_color = $accent - position = 0, 75 - halign = center - valign = center -} - -# INPUT FIELD -input-field { - monitor = - size = 300, 60 - outline_thickness = 4 - dots_size = 0.2 - dots_spacing = 0.2 - dots_center = true - outer_color = $accent - inner_color = $surface0 - font_color = $text - fade_on_empty = false - placeholder_text = 󰌾 Logged in as $USER - hide_input = false - check_color = $accent - fail_color = $red - fail_text = $FAIL ($ATTEMPTS) - capslock_color = $yellow - position = 0, -47 - halign = center - valign = center -} diff --git a/input.conf b/input.conf deleted file mode 100644 index 6a18fbe..0000000 --- a/input.conf +++ /dev/null @@ -1,38 +0,0 @@ -input { - kb_layout = gb - follow_mouse = 1 - - touchpad { - natural_scroll = true - disable_while_typing = true - } - - sensitivity = -0.3 - force_no_accel = false - tablet { - left_handed = true - output = current - } -} - -cursor { - inactive_timeout = 2 - warp_on_change_workspace = 1 - hide_on_key_press = true - warp_on_toggle_special = 1 -} - -device { - name = 2.4g-wireless-optical-mouse--mouse - sensitivity = -0.65 - accel_profile = adaptive -} - -device { - name = wacom-bamboo-16fg-4x5-finger - flip_x = true - flip_y = true - natural_scroll = false - sensitivity = 0.3 - accel_profile = adaptive -} diff --git a/mocha.conf b/mocha.conf deleted file mode 100644 index 8ccb56a..0000000 --- a/mocha.conf +++ /dev/null @@ -1,78 +0,0 @@ - -$rosewater = rgb(f5e0dc) -$rosewaterAlpha = f5e0dc - -$flamingo = rgb(f2cdcd) -$flamingoAlpha = f2cdcd - -$pink = rgb(f5c2e7) -$pinkAlpha = f5c2e7 - -$mauve = rgb(cba6f7) -$mauveAlpha = cba6f7 - -$red = rgb(f38ba8) -$redAlpha = f38ba8 - -$maroon = rgb(eba0ac) -$maroonAlpha = eba0ac - -$peach = rgb(fab387) -$peachAlpha = fab387 - -$yellow = rgb(f9e2af) -$yellowAlpha = f9e2af - -$green = rgb(a6e3a1) -$greenAlpha = a6e3a1 - -$teal = rgb(94e2d5) -$tealAlpha = 94e2d5 - -$sky = rgb(89dceb) -$skyAlpha = 89dceb - -$sapphire = rgb(74c7ec) -$sapphireAlpha = 74c7ec - -$blue = rgb(89b4fa) -$blueAlpha = 89b4fa - -$lavender = rgb(b4befe) -$lavenderAlpha = b4befe - -$text = rgb(cdd6f4) -$textAlpha = cdd6f4 - -$subtext1 = rgb(bac2de) -$subtext1Alpha = bac2de - -$subtext0 = rgb(a6adc8) -$subtext0Alpha = a6adc8 - -$overlay2 = rgb(9399b2) -$overlay2Alpha = 9399b2 - -$overlay1 = rgb(7f849c) -$overlay1Alpha = 7f849c - -$overlay0 = rgb(6c7086) -$overlay0Alpha = 6c7086 - -$surface2 = rgb(585b70) -$surface2Alpha = 585b70 - -$surface1 = rgb(45475a) -$surface1Alpha = 45475a - -$surface0 = rgb(313244) -$surface0Alpha = 313244 - -$base = rgb(1e1e2e) -$baseAlpha = 1e1e2e - -$mantle = rgb(181825) -$mantleAlpha = 181825 - -$crust = rgb(11111b) -$crustAlpha = 11111b diff --git a/modules/.luarc.json b/modules/.luarc.json new file mode 100644 index 0000000..5dc4338 --- /dev/null +++ b/modules/.luarc.json @@ -0,0 +1,10 @@ +{ + "workspace": { + "library": [ + "/nix/store/k1jc5h9ls6j600hcpjciqn0s29whas63-hyprland-0.55.0+date=2026-05-11_5e441ca/share/hypr/stubs/hl.meta.lua" + ] + }, + "diagnostics": { + "globals": ["hl"] + } +} diff --git a/modules/binds.lua b/modules/binds.lua new file mode 100644 index 0000000..4d5fdb4 --- /dev/null +++ b/modules/binds.lua @@ -0,0 +1,119 @@ +-- Set modifier keys +local mainMod = "SUPER + " +local subMod = mainMod +local keyboardString = "qwertyuiop" +local keybindIndex = 1 + +-- Set different modifiers on laptop +if Hostname == "mobile02" then + mainMod = "ALT + " + subMod = "SUPER + " + keyboardString = "1234567890" + keybindIndex = 2 +end + +-- Delete windows +hl.bind(mainMod .. " + backspace", hl.dsp.window.close()) + +-- If otter is open, focus it, if not make a new window +hl.bind(mainMod .. "d", function() + if hl.get_windows({ class = "otter" })[1] ~= nil then + hl.dispatch(hl.dsp.focus({ window = "class:otter" })) + else + hl.exec_cmd("kitty --class otter --title otter-launcher -e sh -c 'sleep 0.05 && otter-launcher'") + end +end) + +-- Open windows +local globalAppBinds = { + { key = { "RETURN" }, dispatch = "kitty" }, + { key = { "f", "o" }, dispatch = "firefox" }, + { key = { "s" }, dispatch = "nemo" }, +} + +for _, bind in ipairs(globalAppBinds) do + if bind.key[keybindIndex] then + hl.bind(mainMod .. bind.key[keybindIndex], hl.dsp.exec_cmd(bind.dispatch)) + else + hl.bind(mainMod .. bind.key[1], hl.dsp.exec_cmd(bind.dispatch)) + end +end + +-- Workspace functions +local keyboardSplit = {} + +for char in keyboardString:gmatch(".") do + table.insert(keyboardSplit, char) +end + +for index, bind in ipairs(keyboardSplit) do + hl.bind(mainMod .. bind, hl.dsp.focus({ workspace = index })) + hl.bind(mainMod .. "SHIFT + " .. bind, hl.dsp.window.move({ workspace = index, follow = false })) +end + + + +-- Music workspace +hl.bind(mainMod .. "m", hl.dsp.workspace.toggle_special("music")) + +-- Move windows with hjkl +hl.bind(mainMod .. "SHIFT + h", hl.dsp.layout("swapcol l")) +hl.bind(mainMod .. "SHIFT + l", hl.dsp.layout("swapcol r")) +hl.bind(mainMod .. "k", hl.dsp.focus({ direction = "up" })) +hl.bind(mainMod .. "j", hl.dsp.focus({ direction = "down" })) + +-- Function to get window position relative to monitor +local function normalise_current_window_pos() + local active = hl.get_active_window() + if active then + local xpos = active.at.x + -- If on right monitor + if xpos > 1920 then + xpos = xpos - 1920 + return xpos + -- If on left monitor + elseif xpos < 1 then + xpos = xpos + 1920 + return xpos + else + return xpos + end + end +end + +hl.bind(mainMod .. "h", function() + local pos = normalise_current_window_pos() + if pos then + -- 9 derived from 5 gap plus 3 border (8), so first pixel of window is 9 + if pos == 9 then + -- If first window, then move to monitor to the left + hl.dispatch(hl.dsp.focus({ monitor = "-1" })) + end + end + hl.dispatch(hl.dsp.layout("move -col")) +end) + +hl.bind(mainMod .. "l", function() + -- Move before so you can detect if it is the last window + hl.dispatch(hl.dsp.layout("move +col")) + if not normalise_current_window_pos() then + -- Go back a window + hl.dispatch(hl.dsp.layout("move -col")) + -- Move to monitor to the right + hl.dispatch(hl.dsp.focus({ monitor = "+1" })) + end +end) + +-- Fullscreen with b +hl.bind(mainMod .. "b", hl.dsp.window.fullscreen({ action = "toggle" })) + +-- Special workspace +hl.bind(mainMod .. "minus", hl.dsp.workspace.toggle_special("scratch")) +hl.bind(mainMod .. "SHIFT + minus", hl.dsp.window.move({ workspace = "special:scratch", follow = false })) + +-- Float resize and move window with mouse +hl.bind(subMod .. "mouse:272", hl.dsp.window.drag(), { mouse = true }) +hl.bind(subMod .. "mouse:272", hl.dsp.window.float(), { mouse = true, click = true }) +hl.bind(subMod .. "mouse:272", hl.dsp.layout("promote"), { mouse = true, release = true }) + +hl.bind(subMod .. "SHIFT + mouse:272", hl.dsp.window.resize(), { mouse = true }) diff --git a/modules/events.lua b/modules/events.lua new file mode 100644 index 0000000..9b40e3e --- /dev/null +++ b/modules/events.lua @@ -0,0 +1,32 @@ +local appList = { + "waybar", + "dunst", + "wpaperd -d", + "wayvnc 0.0.0.0 --output=DP-1", + "syncthing -home=/home/user01/.config/syncthing -no-browser", + "gotify-desktop", + "sleep 10 && curl -X POST -H 'Content-Type: application/json' -d '{'ref':'$(git -C ~/.dotfiles rev-parse HEAD)', 'status':'$(git -C ~/.dotfiles diff --quiet && echo 'clean' || echo 'dirty')'}' https://n8n.voidarc.co.uk/webhook/config-checker", +} + +local localAppList +if Hostname == "HACKSTATION" then + -- If on desktop do all the decoration nonsense + localAppList = { + "kitten panel --edge=background -o background_opacity=0 --output-name HDMI-A-1 sh -c 'cmatrix -b -C magenta -a -u 10'", + "kitten panel --edge=background -o background_opacity=0 --output-name DP-2 sh -c 'cava'", + } +elseif Hostname == "mobile02" then + -- If on laptop, launch way-edges + localAppList = { + "way-edges", + } +end + +table.insert(appList, localAppList) + +-- For everything in the applist run it on startup +hl.on("hyprland.start", function() + for _, command in ipairs(appList) do + hl.exec_cmd(command) + end +end) diff --git a/modules/mocha.lua b/modules/mocha.lua new file mode 100644 index 0000000..f21d444 --- /dev/null +++ b/modules/mocha.lua @@ -0,0 +1,133 @@ +return { + name = "mocha", + rosewater = { + hex = "#f5e0dc", + rgb = { 245, 224, 220 }, + hsl = { 10, 0.56, 0.91 }, + }, + flamingo = { + hex = "#f2cdcd", + rgb = { 242, 205, 205 }, + hsl = { 0, 0.59, 0.88 }, + }, + pink = { + hex = "#f5c2e7", + rgb = { 245, 194, 231 }, + hsl = { 316, 0.72, 0.86 }, + }, + mauve = { + hex = "#cba6f7", + rgb = { 203, 166, 247 }, + hsl = { 267, 0.84, 0.81 }, + }, + red = { + hex = "#f38ba8", + rgb = { 243, 139, 168 }, + hsl = { 343, 0.81, 0.75 }, + }, + maroon = { + hex = "#eba0ac", + rgb = { 235, 160, 172 }, + hsl = { 350, 0.65, 0.77 }, + }, + peach = { + hex = "#fab387", + rgb = { 250, 179, 135 }, + hsl = { 23, 0.92, 0.75 }, + }, + yellow = { + hex = "#f9e2af", + rgb = { 249, 226, 175 }, + hsl = { 41, 0.86, 0.83 }, + }, + green = { + hex = "#a6e3a1", + rgb = { 166, 227, 161 }, + hsl = { 115, 0.54, 0.76 }, + }, + teal = { + hex = "#94e2d5", + rgb = { 148, 226, 213 }, + hsl = { 170, 0.57, 0.73 }, + }, + sky = { + hex = "#89dceb", + rgb = { 137, 220, 235 }, + hsl = { 189, 0.71, 0.73 }, + }, + sapphire = { + hex = "#74c7ec", + rgb = { 116, 199, 236 }, + hsl = { 199, 0.76, 0.69 }, + }, + blue = { + hex = "#89b4fa", + rgb = { 137, 180, 250 }, + hsl = { 217, 0.92, 0.76 }, + }, + lavender = { + hex = "#b4befe", + rgb = { 180, 190, 254 }, + hsl = { 232, 0.97, 0.85 }, + }, + text = { + hex = "#cdd6f4", + rgb = { 205, 214, 244 }, + hsl = { 226, 0.64, 0.88 }, + }, + subtext1 = { + hex = "#bac2de", + rgb = { 186, 194, 222 }, + hsl = { 227, 0.35, 0.80 }, + }, + subtext0 = { + hex = "#a6adc8", + rgb = { 166, 173, 200 }, + hsl = { 228, 0.24, 0.72 }, + }, + overlay2 = { + hex = "#9399b2", + rgb = { 147, 153, 178 }, + hsl = { 228, 0.17, 0.64 }, + }, + overlay1 = { + hex = "#7f849c", + rgb = { 127, 132, 156 }, + hsl = { 230, 0.13, 0.55 }, + }, + overlay0 = { + hex = "#6c7086", + rgb = { 108, 112, 134 }, + hsl = { 231, 0.11, 0.47 }, + }, + surface2 = { + hex = "#585b70", + rgb = { 88, 91, 112 }, + hsl = { 233, 0.12, 0.39 }, + }, + surface1 = { + hex = "#45475a", + rgb = { 69, 71, 90 }, + hsl = { 234, 0.13, 0.31 }, + }, + surface0 = { + hex = "#313244", + rgb = { 49, 50, 68 }, + hsl = { 237, 0.16, 0.23 }, + }, + base = { + hex = "#1e1e2e", + rgb = { 30, 30, 46 }, + hsl = { 240, 0.21, 0.15 }, + }, + mantle = { + hex = "#181825", + rgb = { 24, 24, 37 }, + hsl = { 240, 0.21, 0.12 }, + }, + crust = { + hex = "#11111b", + rgb = { 17, 17, 27 }, + hsl = { 240, 0.23, 0.09 }, + }, +} diff --git a/modules/monitors.lua b/modules/monitors.lua new file mode 100644 index 0000000..bcb90c5 --- /dev/null +++ b/modules/monitors.lua @@ -0,0 +1,28 @@ +if Hostname == "HACKSTATION" then + hl.monitor({ + output = "DP-1", + position = "0x0", + mode = "1920x1080@60", + scale = "1", + }) + + hl.monitor({ + output = "DP-2", + position = "1920x0", + mode = "1920x1080@60", + scale = "1", + }) + + hl.monitor({ + output = "HDMI-A-1", + position = "-1920x0", + mode = "1920x1080@60", + scale = "1", + }) + + hl.workspace_rule({ workspace = "1", monitor = "DP-1" }) + hl.workspace_rule({ workspace = "2", monitor = "HDMI-A-1" }) + hl.workspace_rule({ workspace = "3", monitor = "DP-2" }) +else + hl.monitor({ output = "", mode = "preferred", position = "auto", scale = "1.2" }) +end diff --git a/modules/rules.lua b/modules/rules.lua new file mode 100644 index 0000000..be323ab --- /dev/null +++ b/modules/rules.lua @@ -0,0 +1,96 @@ +-- Size for otter launcher +hl.window_rule({ + name = "otter-launcher", + match = { + class = "otter", + }, + float = true, + animation = "popin 80%", + size = { 410, 220 }, + opaque = true, +}) + +-- Dont dim youtube windows +hl.window_rule({ + name = "nodim-youtube", + match = { + class = "^(firefox|Firefox)$", + title = "^(.*YouTube.*)$", + }, + no_dim = true, + opaque = true, +}) + +-- Define windows that float +local standardFloatingWindows = { + { class = "^(xdg-desktop-portal-gtk)$" }, + { class = "^(firefox)$", title = "^(.*Save.*)" }, +} + +-- For every window that floats make a rule +for _, window in ipairs(standardFloatingWindows) do + hl.window_rule({ + name = "float file selector", + match = { + -- both are optional ig + class = window.class or "", + title = window.title or "", + }, + float = true, + animation = "popin 70%", + size = { 800, 500 }, + }) +end + +-- Don't dim fullscreen windows +hl.window_rule({ + name = "nodim fullscreen", + match = { + fullscreen = true, + }, + no_dim = true, + opaque = true, +}) + +hl.window_rule({ + name = "jelly slide", + match = { + class = "^(jf-tui)$", + }, + animation = "slide top", +}) + +-- Define gaps for music workspace +hl.workspace_rule({ + workspace = "special:music", + gaps_out = { + left = 400, + right = 400, + bottom = 400, + }, + animation = "slidefadevert", +}) + +-- Something from the example idk +hl.window_rule({ + name = "move-hyprland-run", + match = { class = "hyprland-run" }, + + move = "20 monitor_h-120", + float = true, +}) + +-- Fix some dragging issues with XWayland +hl.window_rule({ + name = "fix-xwayland-drags", + match = { + class = "^$", + title = "^$", + xwayland = true, + float = true, + fullscreen = false, + pin = false, + }, + + no_focus = true, +}) diff --git a/modules/settings/.luarc.json b/modules/settings/.luarc.json new file mode 100644 index 0000000..5dc4338 --- /dev/null +++ b/modules/settings/.luarc.json @@ -0,0 +1,10 @@ +{ + "workspace": { + "library": [ + "/nix/store/k1jc5h9ls6j600hcpjciqn0s29whas63-hyprland-0.55.0+date=2026-05-11_5e441ca/share/hypr/stubs/hl.meta.lua" + ] + }, + "diagnostics": { + "globals": ["hl"] + } +} diff --git a/modules/settings/animations.lua b/modules/settings/animations.lua new file mode 100644 index 0000000..c79a321 --- /dev/null +++ b/modules/settings/animations.lua @@ -0,0 +1,77 @@ +local beziers = { + -- Overshoot + { name = "heavyOvershoot", points = { 0.53, 0.51, 0.4, 1.22 } }, + { name = "lightOvershoot", points = { 0.33, 0.61, 0.63, 1.19 } }, + + -- Linear + { name = "smoothSnap", points = { 0.32, 0.51, 0.44, 1 } }, + { name = "smoothIn", points = { 0.25, 1, 0.5, 1 } }, + { name = "smoothOutOvershoot", points = { 0.46, -0.25, 0.81, 0.51 } }, + + -- Springs + { name = "hardSpring", kind = "spring" }, + { name = "mediumSpring", kind = "spring", stiffness = 50, dampening = 10 }, + { name = "looseSpring", kind = "spring", dampening = 5, stiffness = 50 }, +} + +-- For every curve in the table (ik it says bezier stfu) +for _, bezier in ipairs(beziers) do + -- If there are points then its not a spring + if bezier.points then + hl.curve(bezier.name, { + type = "bezier", + points = { { bezier.points[1], bezier.points[2] }, { bezier.points[3], bezier.points[4] } }, + }) + -- If its a spring + elseif bezier.kind == "spring" then + hl.curve(bezier.name, { + type = "spring", + -- If all the parameters are empty make a spring with the values from the wiki + mass = bezier.mass or 1, + stiffness = bezier.stiffness or 70, + dampening = bezier.dampening or 10, + }) + else + -- You fucked something up + hl.notification.create({ text = "invalid curve generated", icon = "warning", timeout = 8000 }) + end +end + +local animations = { + -- Default animation + { leaf = "global", speed = 5, spring = "mediumSpring" }, + + -- Window animations + { leaf = "windows", speed = 2, spring = "mediumSpring", style = "slide right" }, + { leaf = "windowsOut", speed = 2, bezier = "heavyOvershoot", style = "popin 30%" }, + + -- Fade + { leaf = "fade", speed = 2, bezier = "smoothIn" }, + + -- Workspaces and Special + { leaf = "workspaces", speed = 2, bezier = "heavyOvershoot", style = "slidefade 20%" }, + { leaf = "specialWorkspace", speed = 5, spring = "mediumSpring", style = "slidefadevert -80%" }, +} + +-- For every entry in the animation table +for _, anim in ipairs(animations) do + -- If there is a bezier param + if anim.bezier then + hl.animation({ + leaf = anim.leaf, + enabled = true, + speed = anim.speed, + bezier = anim.bezier or "", + style = anim.style or "", + }) + elseif anim.spring then + -- Make a spring instead bcs apparently they're different idk + hl.animation({ + leaf = anim.leaf, + enabled = true, + speed = anim.speed, + spring = anim.spring or "", + style = anim.style or "", + }) + end +end diff --git a/modules/settings/input.lua b/modules/settings/input.lua new file mode 100644 index 0000000..70bb48f --- /dev/null +++ b/modules/settings/input.lua @@ -0,0 +1,33 @@ +hl.config({ + input = { + kb_layout = "gb", -- Goddamn kier starmer + follow_mouse = 1, -- Moving to a window will focus it + + touchpad = { + natural_scroll = true, -- Better scrolling + disable_while_typing = true, -- Sanity + }, + + sensitivity = -0.3, -- DPI is too high ffs + force_no_accel = false, -- I love mouse acceleration + tablet = { + left_handed = true, -- Top 10 disabilities + output = "current", -- Make the tablet usable + }, + }, + cursor = { + inactive_timeout = 2, -- Hide white thing on the screen + hide_on_key_press = true, -- Hide white thing when typing + warp_on_change_workspace = 1, -- Make it go to workspaces + warp_on_toggle_special = 1, -- Go to special workspaces too + persistent_warps = true, -- Go back to where it was when I warp + }, +}) + +if Hostname == "mobile02" then + hl.config({ + input = { -- If on laptop make caps the escape key but make it be capslock when shift caps is pressed + kb_options = "caps:escape_shifted_capslock", + }, + }) +end diff --git a/modules/settings/style.lua b/modules/settings/style.lua new file mode 100644 index 0000000..55bac43 --- /dev/null +++ b/modules/settings/style.lua @@ -0,0 +1,60 @@ +-- Import catppuccin colors +local ctp = require("modules.mocha") +hl.config({ + + -- gaps and colors + general = { + gaps_in = 3, + resize_on_border = true, + gaps_out = { top = 5, right = 6, bottom = 6, left = 6 }, + border_size = 3, + layout = "scrolling", + col = { + active_border = { + colors = { "rgba(" .. ctp.mauve.hex:sub(2) .. "cc)", "rgba(" .. ctp.red.hex:sub(2) .. "cc)" }, + angle = 45, + }, + inactive_border = { + colors = { "rgba(" .. ctp.surface1.hex:sub(2) .. "cc)", "rgba(" .. ctp.lavender.hex:sub(2) .. "cc)" }, + angle = 45, + }, + }, + }, + + -- Scrolling layout settings + scrolling = { + column_width = 0.8, + follow_min_visible = 0.1, + focus_fit_method = 1, + wrap_focus = false, + wrap_swapcol = false, + }, + + -- Window appearence + decoration = { + rounding = 10, + rounding_power = 2, + + -- Change transparency of focused and unfocused windows + active_opacity = 1.0, + inactive_opacity = 0.8, + dim_inactive = true, + dim_strength = 0.2, + + blur = { + enabled = true, + size = 2, + passes = 3, + vibrancy = 0.5, + }, + }, + + -- Remove irritants + ecosystem = { + no_update_news = true, + no_donation_nag = true, + }, +}) + +hl.env("XCURSOR_SIZE", "20") +hl.env("HYPRCURSOR_SIZE", "20") diff --git a/rules.conf b/rules.conf deleted file mode 100644 index 80dfb52..0000000 --- a/rules.conf +++ /dev/null @@ -1,155 +0,0 @@ -windowrule { - name = nodim-youtube - no_dim = on - opaque = on - match:class = ^(firefox|Firefox)$ - match:title = ^(.*YouTube.*)$ -} - -windowrule { - name = nodim-delfin - no_dim = on - opaque = on - match:class = ^(cafe.avery.Delfin)$ -} - -windowrule { - name = float-firefoxDialogue - float = on - match:title = ^(About Mozilla Firefox)$ -} - -windowrule { - name = file-browser - float = on - size = 800 500 - animation = popin - match:class = ^(xdg-desktop-portal-gtk)$ -} - -windowrule { - name = firefox-pip - float = on - match:class = ^(firefox)$ - match:title = ^(Picture-in-Picture)$ -} - -windowrule { - name = float-history - float = on - match:class = ^(firefox)$ - match:title = ^(Library)$ -} - -windowrule { - name = nwg-look - float = on - match:class = ^(nwg-look)$ -} - -windowrule { - name = volume-control - float = on - match:class = ^(org.pulseaudio.pavucontrol)$ -} - -windowrule { - name = blueman-size - float = on - size = 600 400 - animation = popin - match:class = ^(.blueman-manager-wrapped)$ -} - -windowrule { - name = float-nm - float = on - match:class = ^(nm-applet)$ -} - -windowrule { - name = float-nm - float = on - match:class = ^(nm-connection-editor)$ -} - -windowrule { - name = float-auth-agent - float = on - match:class = ^(org.kde.polkit-kde-authentication-agent-1)$ -} - -windowrule { - name = firefox-popups - size = 800 500 - animation = popin - match:class = ^(firefox)$ - match:title = ^(.*Save.*) -} - -windowrule { - name = otter-launcher-initial - size = 425 220 - float = on - opaque = on - animation = popin 50% - match:class = ^(otter)$ -} - -windowrule { - name = jellyfin tui - animation = slide top - match:class = ^(jf-tui)$ -} - -windowrule { - name = nodim-fullscreen - match:fullscreen = 1 - no_dim = on -} - -windowrule { - name = nodim-kitty - match:class = ^(kitty)$ - opaque = on - xray = on -} - -layerrule { - name = layerrule-1 - blur = on - ignore_alpha = 0 - match:namespace = notifications -} - -layerrule { - name = something to do with wlogout - blur = on - match:namespace = logout_dialog -} - -layerrule { - name = layerrule-3 - blur = on - ignore_alpha = 0 - match:namespace = waybar -} - -layerrule { - name = layerrule-4 - ignore_alpha = 0 - blur = on - animation = popin 70% - match:namespace = otter-panel -} - -layerrule { - name = layerrule-5 - animation = slide right - blur = on - ignore_alpha = 0 - match:namespace = swaync-control-center -} - -workspace = special:music, gapsout:5 400 400 400 -workspace = special:scratch, gapsout:20 20 20 20 diff --git a/startup.conf b/startup.conf deleted file mode 100644 index c9ac52d..0000000 --- a/startup.conf +++ /dev/null @@ -1,15 +0,0 @@ -exec-once = $scrPath/resetxdgportal.sh # reset XDPH for screenshare -exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP # for XDPH -exec-once = dbus-update-activation-environment --systemd --all # for XDPH -exec-once = dconf write /org/gnome/desktop/interface/color-scheme '"prefer-dark"' -exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP # for XDPH -exec-once = $scrPath/polkitkdeauth.sh # authentication dialogue for GUI apps -exec-once = waybar # System bar -exec-once = sleep 10 && curl -X POST -H "Content-Type: application/json" -d "{\"ref\":\"$(git -C ~/.dotfiles rev-parse HEAD)\", \"status\":\"$(git -C ~/.dotfiles diff --quiet && echo "clean" || echo "dirty")\"}" https://n8n.voidarc.co.uk/webhook/config-checker # check if config is up to date -exec-once = elephant # Data for Walker -exec-once = walker --gapplication-service # make walker faster -exec-once = dunst # Notifications -exec-once = ~/.config/scripts/.venv/bin/python ~/.config/scripts/notify.py # Android notification forwarding -exec-once = wayvnc 0.0.0.0 --output=DP-1 # runs vnc server on all interfaces -exec-once = syncthing -home=/home/user01/.config/syncthing -no-browser # starts syncthing in background -exec-once = gotify-desktop # gotify daemon for service notifications diff --git a/windows.conf b/windows.conf deleted file mode 100644 index ddc927d..0000000 --- a/windows.conf +++ /dev/null @@ -1 +0,0 @@ -monitor = , preferred, auto, 1.2