Compare commits

...
37 Commits
Author SHA1 Message Date
chris d07b2e5079 Fix apps 2026-07-21 22:04:54 +01:00
chris dcd46eafb9 Update shortcuts 2026-07-21 21:11:31 +01:00
chris 02ac673d4c Tmuxinator 2026-07-04 20:36:28 +01:00
chris f6b10474ef Update krita shortcut 2026-07-04 20:24:30 +01:00
chris 4a8e3d6208 Update remapper 2026-07-03 21:13:06 +01:00
chris f3fad0a963 Alias to mount root history 2026-07-03 20:35:05 +01:00
chris f8145fd3c9 Update nvim 2026-07-03 20:19:46 +01:00
chris 9b7e3d795c Fix issue with sddm 2026-07-01 22:17:32 +01:00
chris 137764c885 Trying to figure out Enpass 2026-06-29 19:13:54 +01:00
chris da03abc876 Comment 2026-06-28 22:53:41 +01:00
chris f56487246c Workspaces bruh 2026-06-28 22:45:03 +01:00
chris 4fc7944c48 Finalise workspaces config 2026-06-28 20:26:30 +01:00
chris 46d9fa3f6a Load workspace config first 2026-06-28 15:41:48 +01:00
chris 0b589161ff Workspaces 2026-06-27 19:38:20 +01:00
chris de178fa25a Figuring out workspaces 2026-06-27 17:04:05 +01:00
chris 18304e4f61 Fix workspaces on laptop 2026-06-27 12:51:49 +01:00
chris d15d5c9199 Update import 2026-06-26 22:57:40 +01:00
chris 935ddeaaca Input config 2026-06-26 22:33:19 +01:00
chris a43a24e8ba Better bindings 2026-06-21 16:44:45 +01:00
chris fecc16e904 Update suspend script 2026-06-21 15:33:12 +01:00
chris 6632b23566 Update lock timeout 2026-06-21 15:32:04 +01:00
chris c3c51b1fdb Update tablet area 2026-06-20 19:58:50 +01:00
chris 53b459e774 Update krita config 2026-06-20 19:56:18 +01:00
chris e95644eb13 Add input-remapper config for xp pen ack05 2026-06-19 22:03:49 +01:00
chris 70afed92d6 nvim 2026-06-18 21:50:21 +01:00
chris f3f7591b8b Add krita shortcuts 2026-06-16 22:12:56 +01:00
chris 454e17dea4 Scrolling in ghostty 2026-06-12 19:30:03 +01:00
chris 6324dea7b0 Locking 2026-06-12 14:29:25 +01:00
chris 1382e22abd Locking 2026-06-12 14:23:30 +01:00
chris 480ef3b5f4 Let steam pick a size 2026-06-12 11:27:10 +01:00
chris b05099be72 Fix 2026-06-09 22:15:47 +01:00
chris 5b9b7f50dd Tablet stuff 2026-06-09 21:53:08 +01:00
chris 72c989af32 Refactor workspaces 2026-06-08 18:28:10 +01:00
chris 3febae6f7f Configuring hypr 2026-06-07 22:38:07 +01:00
chris 1abceb0217 Fix Enpass 2026-06-07 20:58:21 +01:00
chris c6d9fc2cc8 Trying to figure out scaling 2026-06-07 20:38:55 +01:00
chris deb94ccecf Finish hypr config 2026-06-07 19:32:56 +01:00
44 changed files with 910 additions and 1585 deletions
+92 -2
View File
@@ -1,5 +1,5 @@
{ {
"Revision": "0.6.6.2", "Revision": "0.6.7",
"Profiles": [ "Profiles": [
{ {
"Tablet": "Wacom PTH-451", "Tablet": "Wacom PTH-451",
@@ -135,8 +135,98 @@
"MouseButtons": [], "MouseButtons": [],
"MouseScrollUp": null, "MouseScrollUp": null,
"MouseScrollDown": null, "MouseScrollDown": null,
"WheelBindings": [],
"DisablePressure": false, "DisablePressure": false,
"DisableTilt": false "DisableTilt": false,
"EnableDragBindings": false
}
},
{
"Tablet": "XP-Pen Deco Pro LW Gen2",
"OutputMode": {
"Path": "OpenTabletDriver.Desktop.Output.LinuxArtistMode",
"Settings": [],
"Enable": true
},
"Filters": [],
"AbsoluteModeSettings": {
"Display": {
"Width": 2560.0,
"Height": 1440.0,
"X": 1280.0,
"Y": 720.0,
"Rotation": 0.0
},
"Tablet": {
"Width": 278.99,
"Height": 156.93187,
"X": 139.495,
"Y": 86.995,
"Rotation": 0.0
},
"EnableClipping": true,
"EnableAreaLimiting": false,
"LockAspectRatio": true
},
"RelativeModeSettings": {
"XSensitivity": 10.0,
"YSensitivity": 10.0,
"RelativeRotation": 0.0,
"RelativeResetDelay": "00:00:00.1000000"
},
"Bindings": {
"TipActivationThreshold": 1.0,
"TipButton": {
"Path": "OpenTabletDriver.Desktop.Binding.AdaptiveBinding",
"Settings": [
{
"Property": "Binding",
"Value": "Tip"
}
],
"Enable": true
},
"EraserActivationThreshold": 1.0,
"EraserButton": {
"Path": "OpenTabletDriver.Desktop.Binding.AdaptiveBinding",
"Settings": [
{
"Property": "Binding",
"Value": "Eraser"
}
],
"Enable": true
},
"PenButtons": [
{
"Path": "OpenTabletDriver.Desktop.Binding.AdaptiveBinding",
"Settings": [
{
"Property": "Binding",
"Value": "Button 1"
}
],
"Enable": true
},
{
"Path": "OpenTabletDriver.Desktop.Binding.AdaptiveBinding",
"Settings": [
{
"Property": "Binding",
"Value": "Button 2"
}
],
"Enable": true
}
],
"AuxButtons": [],
"MouseButtons": [],
"MouseScrollUp": null,
"MouseScrollDown": null,
"WheelBindings": [],
"DisablePressure": false,
"DisableTilt": false,
"EnableDragBindings": false
} }
} }
], ],
+6
View File
@@ -0,0 +1,6 @@
column_width = 160
line_endings = "Unix"
indent_type = "Spaces"
indent_width = 4
quote_style = "AutoPreferSingle"
call_parentheses = "None"
-10
View File
@@ -1,10 +0,0 @@
source = ~/.config/hypr/autostart.conf
source = ~/.config/hypr/bindings.conf
source = ~/.config/hypr/envs.conf
source = ~/.config/hypr/looknfeel.conf
source = ~/.config/hypr/input.conf
source = ~/.config/hypr/windows.conf
source = ~/.config/hypr/monitors.conf
source = ~/.config/hypr/looknfeel.conf
source = ~/.config/hypr/autostart.conf
source = ~/.config/hypr/workspaces.conf
-183
View File
@@ -1,183 +0,0 @@
# Browser types
windowrule = tag +chromium-based-browser, match:class ((google-)?[cC]hrom(e|ium)|[bB]rave-browser|[mM]icrosoft-edge|Vivaldi-stable|helium)
windowrule = tag +firefox-based-browser, match:class ([fF]irefox|zen|librewolf)
windowrule = tag -default-opacity, match:tag chromium-based-browser
windowrule = tag -default-opacity, match:tag firefox-based-browser
# Video apps: remove chromium browser tag so they don't get opacity applied
windowrule = tag -chromium-based-browser, match:class (chrome-youtube.com__-Default|chrome-app.zoom.us__wc_home-Default)
windowrule = tag -default-opacity, match:class (chrome-youtube.com__-Default|chrome-app.zoom.us__wc_home-Default)
# Force chromium-based browsers into a tile to deal with --app bug
windowrule = tile on, match:tag chromium-based-browser
# Only a subtle opacity change, but not for video sites
windowrule = opacity 1.0 0.97, match:tag chromium-based-browser
windowrule = opacity 1.0 0.97, match:tag firefox-based-browser
windowrule {
name = geforce
match:class = GeForceNOW
idle_inhibit = fullscreen
}
# Remove 1px border around hyprshot screenshots
layerrule = no_anim on, match:namespace selection
# Jetbrains
# Fix splash screen showing in weird places and prevent annoying focus takeovers
windowrule {
name = jetbrains-splash
match:class = ^(jetbrains-.*)$
match:title = ^(splash)$
match:float = 1
tag = +jetbrains-splash
center = on
no_focus = on
border_size = 0
}
# Center popups/find windows
windowrule {
name = jetbrains-popup
match:class = ^(jetbrains-.*)
match:title = ^()$
match:float = 1
tag = +jetbrains
center = on
# Enabling this makes it possible to provide input in popup dialogs (search window, new file, etc.)
stay_focused = on
border_size = 0
min_size = (monitor_w*0.5) (monitor_h*0.5)
}
# Disable window flicker when autocomplete or tooltips appear
windowrule {
name = jetbrains-tooltip
match:class = ^(jetbrains-.*)$
match:title = ^(win.*)$
match:float = 1
no_initial_focus = on
}
# Disable mouse focus
windowrule {
name = jetbrains-focus
no_follow_mouse = on
match:class = ^(jetbrains-.*)$
}
# Keep enpass focused
windowrule {
name = enpass-assistant
match:title = ^(Enpass Assistant)$
match:class = ^(Enpass)$
stay_focused = on
center = on
}
# Float LocalSend and fzf file picker
windowrule = float on, match:class (Share|localsend)
windowrule = center on, match:class (Share|localsend)
# Picture-in-picture overlays
windowrule = tag +pip, match:title (Picture.?in.?[Pp]icture)
windowrule = tag -default-opacity, match:tag pip
windowrule = float on, match:tag pip
windowrule = pin on, match:tag pip
windowrule = size 600 338, match:tag pip
windowrule = keep_aspect_ratio on, match:tag pip
windowrule = border_size 0, match:tag pip
windowrule = opacity 1 1, match:tag pip
windowrule = move (monitor_w-window_w-40) (monitor_h*0.04), match:tag pip
# qemu
windowrule = tag -default-opacity, match:class qemu
windowrule = opacity 1 1, match:class qemu
# Retroarch
windowrule = fullscreen on, match:class com.libretro.RetroArch
windowrule = workspace 5, match:class com.libretro.RetroArch
windowrule = tag -default-opacity, match:class com.libretro.RetroArch
windowrule = opacity 1 1, match:class com.libretro.RetroArch
windowrule = idle_inhibit fullscreen, match:class com.libretro.RetroArch
# Scratchpad apps
windowrule = workspace special:scratchpad, match:class Spotify
windowrule = workspace special:scratchpad, match:class signal
windowrule = workspace special:scratchpad, match:class ^(chrome-discord.com__channels_@me-Default)$
windowrule = workspace special:scratchpad, match:class ^(chrome-web.whatsapp.com__-Default)$
# Float Nextcloud
windowrule = float on, match:class com.nextcloud.desktopclient.nextcloud
# Position drawing
windowrule = workspace 5, match:class (krita)
windowrule = tag -default-opacity, match:class (krita)
windowrule = opacity 1 1, match:class (krita)
# Position TV
windowrule = workspace 7, match:class ^(chrome-youtube.com__-Default)$
windowrule = workspace 7, match:class ^(chrome-netflix.com__-Default)$
# Float Steam
windowrule = float on, match:class steam
windowrule = workspace 7, match:class steam
windowrule = center on, match:class steam, match:title Steam
windowrule = tag -default-opacity, match:class steam.*
windowrule = opacity 1 1, match:class steam.*
windowrule = size 1100 700, match:class steam, match:title Steam
windowrule = size 460 800, match:class steam, match:title Friends List
windowrule = idle_inhibit fullscreen, match:class steam
# Float Lunar Client
windowrule = float on, match:class lunarclient
windowrule = workspace 7, match:class lunarclient
windowrule = center on, match:class lunarclient
windowrule = tag -default-opacity, match:class lunarclient
windowrule = opacity 1 1, match:class lunarclient
windowrule = size 1100 700, match:class lunarclient
windowrule = idle_inhibit fullscreen, match:class lunarclient
# Floating windows
windowrule = float on, match:tag floating-window
windowrule = center on, match:tag floating-window
windowrule = size 875 600, match:tag floating-window
windowrule = tag +floating-window, match:class (org.station.bluetui|org.station.impala|org.station.wiremix|org.station.btop|org.station.terminal|org.station.bash|org.gnome.NautilusPreviewer|org.gnome.Evince|com.gabm.satty|Station|About|TUI.float|imv|mpv)
windowrule = tag +floating-window, match:class (xdg-desktop-portal-gtk|sublime_text|DesktopEditors|org.gnome.Nautilus), match:title ^(Open.*Files?|Open [F|f]older.*|Save.*Files?|Save.*As|Save|All Files|.*wants to [open|save].*|[C|c]hoose.*)
windowrule = float on, match:class org.gnome.Calculator
# Fullscreen screensaver
windowrule = fullscreen on, match:class org.station.screensaver
windowrule = float on, match:class org.station.screensaver
windowrule = animation slide, match:class org.station.screensaver
# No transparency on media windows
windowrule = tag -default-opacity, match:class ^(zoom|vlc|mpv|org.kde.kdenlive|com.obsproject.Studio|com.github.PintaProject.Pinta|imv|org.gnome.NautilusPreviewer)$
windowrule = opacity 1 1, match:class ^(zoom|vlc|mpv|org.kde.kdenlive|com.obsproject.Studio|com.github.PintaProject.Pinta|imv|org.gnome.NautilusPreviewer)$
# Popped window rounding
windowrule = rounding 8, match:tag pop
# Prevent idle while open
windowrule = idle_inhibit always, match:tag noidle
# Prevent Telegram from stealing focus on new messages
windowrule = focus_on_activate off, match:class org.telegram.desktop
# Define terminal tag to style them uniformly
windowrule = tag +terminal, match:class (Alacritty|kitty|com.mitchellh.ghostty)
windowrule = tag -default-opacity, match:tag terminal
windowrule = opacity 0.97 0.9, match:tag terminal
# Application-specific animation
layerrule = no_anim on, match:namespace walker
# Webcam overlay for screen recording
windowrule = float on, match:title WebcamOverlay
windowrule = pin on, match:title WebcamOverlay
windowrule = no_initial_focus on, match:title WebcamOverlay
windowrule = no_dim on, match:title WebcamOverlay
windowrule = move (monitor_w-window_w-40) (monitor_h-window_h-40), match:title WebcamOverlay
+225 -232
View File
@@ -1,395 +1,388 @@
-- Browser types -- Browser types
hl.window_rule({ hl.window_rule {
name = "chromium-browser-tags", name = 'chromium-browser-tags',
tag = "+chromium-based-browser", tag = '+chromium-based-browser',
match = { match = {
class = "((google-)?[cC]hrom(e|ium)|[bB]rave-browser|[mM]icrosoft-edge|Vivaldi-stable|helium)", class = '((google-)?[cC]hrom(e|ium)|[bB]rave-browser|[mM]icrosoft-edge|Vivaldi-stable|helium)',
}, },
}) }
hl.window_rule({ hl.window_rule {
name = "firefox-tags", name = 'firefox-tags',
tag = "+firefox-based-browser", tag = '+firefox-based-browser',
match = { match = {
class = "([fF]irefox|zen|librewolf)", class = '([fF]irefox|zen|librewolf)',
}, },
}) }
hl.window_rule({ hl.window_rule {
name = "chromium-browser-opacity-tags", name = 'chromium-browser-opacity-tags',
tag = "-default-opacity", tag = '-default-opacity',
match = { match = {
tag = "chromium-based-browser", tag = 'chromium-based-browser',
}, },
}) }
hl.window_rule({ hl.window_rule {
name = "firefox-browser-opacity-tags", name = 'firefox-browser-opacity-tags',
tag = "-default-opacity", tag = '-default-opacity',
match = { match = {
tag = "firefox-based-browser", tag = 'firefox-based-browser',
}, },
}) }
-- Video apps: remove chromium browser tag so they don't get opacity applied -- Video apps: remove chromium browser tag so they don't get opacity applied
hl.window_rule({ hl.window_rule {
name = "video-apps-no-browser-tag", name = 'video-apps-no-browser-tag',
tag = "-chromium-based-browser", tag = '-chromium-based-browser',
match = { match = {
class = "(chrome-youtube.com__-Default|chrome-app.zoom.us__wc_home-Default)", class = '(chrome-youtube.com__-Default|chrome-app.zoom.us__wc_home-Default)',
}, },
}) }
hl.window_rule({ hl.window_rule {
name = "video-apps-no-opacity-tag", name = 'video-apps-no-opacity-tag',
tag = "-default-opacity", tag = '-default-opacity',
match = { match = {
class = "(chrome-youtube.com__-Default|chrome-app.zoom.us__wc_home-Default)", class = '(chrome-youtube.com__-Default|chrome-app.zoom.us__wc_home-Default)',
}, },
}) }
-- Force chromium-based browsers into a tile to deal with --app bug -- Force chromium-based browsers into a tile to deal with --app bug
hl.window_rule({ hl.window_rule {
name = "chromium-tile", name = 'chromium-tile',
tile = true, tile = true,
match = { match = {
tag = "chromium-based-browser", tag = 'chromium-based-browser',
}, },
}) }
-- Only a subtle opacity change, but not for video sites -- Only a subtle opacity change, but not for video sites
hl.window_rule({ hl.window_rule {
name = "chromium-browser-subtle-opacity", name = 'chromium-browser-subtle-opacity',
opacity = "1.0 0.97", opacity = '1.0 0.97',
match = { match = {
tag = "chromium-based-browser", tag = 'chromium-based-browser',
}, },
}) }
hl.window_rule({ hl.window_rule {
name = "firefox-browser-subtle-opacity", name = 'firefox-browser-subtle-opacity',
opacity = "1.0 0.97", opacity = '1.0 0.97',
match = { match = {
tag = "firefox-based-browser", tag = 'firefox-based-browser',
}, },
}) }
hl.window_rule({ hl.window_rule {
name = "geforce-now", name = 'geforce-now',
idle_inhibit = "fullscreen", idle_inhibit = 'fullscreen',
match = { match = {
class = "GeForceNOW", class = 'GeForceNOW',
}, },
}) }
-- Remove 1px border around hyprshot screenshots -- Remove 1px border around hyprshot screenshots
hl.layer_rule({ hl.layer_rule {
name = "no-anim-for-selection", name = 'no-anim-for-selection',
match = { namespace = "selection" }, match = { namespace = 'selection' },
no_anim = true, no_anim = true,
}) }
-- Jetbrains -- Jetbrains
-- Fix splash screen showing in weird places and prevent annoying focus takeovers -- Fix splash screen showing in weird places and prevent annoying focus takeovers
hl.window_rule({ hl.window_rule {
name = "jetbrains-splash", name = 'jetbrains-splash',
tag = "+jetbrains-splash", tag = '+jetbrains-splash',
center = true, center = true,
no_focus = true, no_focus = true,
border_size = 0, border_size = 0,
match = { match = {
class = "^(jetbrains-.*)$", class = '^(jetbrains-.*)$',
title = "^(splash)$", title = '^(splash)$',
float = true, float = true,
}, },
}) }
-- Center popups/find windows -- Center popups/find windows
hl.window_rule({ hl.window_rule {
name = "jetbrains-popups", name = 'jetbrains-popups',
center = true, center = true,
stay_focused = true, stay_focused = true,
border_size = 0, border_size = 0,
min_size = { "(monitor_w*0.5)", "(monitor_h*0.5)" }, min_size = { '(monitor_w*0.5)', '(monitor_h*0.5)' },
tag = "+jetbrains", tag = '+jetbrains',
match = { match = {
class = "^(jetbrains-.*)$", class = '^(jetbrains-.*)$',
title = "^()$", title = '^()$',
float = true, float = true,
}, },
}) }
-- Disable window flicker when autocomplete or tooltips appear -- Disable window flicker when autocomplete or tooltips appear
hl.window_rule({ hl.window_rule {
name = "jetbrains-tooltip", name = 'jetbrains-tooltip',
no_initial_focus = true, no_initial_focus = true,
match = { match = {
class = "^(jetbrains-.*)$", class = '^(jetbrains-.*)$',
title = "^(win.*)$", title = '^(win.*)$',
float = true, float = true,
}, },
}) }
-- Disable mouse focus -- Disable mouse focus
hl.window_rule({ hl.window_rule {
name = "jetbrains-no-follow-mouse", name = 'jetbrains-no-follow-mouse',
no_follow_mouse = true, no_follow_mouse = true,
match = { match = {
class = "^(jetbrains-.*)$", class = '^(jetbrains-.*)$',
}, },
}) }
-- Keep enpass focused -- Keep enpass focused
hl.window_rule({ hl.window_rule {
name = "enpass-assistant", name = 'enpass-assistant',
stay_focused = true, stay_focused = true,
center = true, center = true,
match = { match = {
class = "^(Enpass)$", class = '^(Enpass)$',
title = "^(Enpass Assistant)$", title = '^(Enpass Assistant)$',
}, },
}) }
-- Float LocalSend and fzf file picker -- Float LocalSend and fzf file picker
hl.window_rule({ hl.window_rule {
name = "localsend-float", name = 'localsend-float',
float = true, float = true,
center = true, center = true,
match = { match = {
class = "(localsend|Share|fzf-file-picker)", class = '(localsend|Share|fzf-file-picker)',
}, },
}) }
-- Picture-in-picture overlays -- Picture-in-picture overlays
hl.window_rule({ hl.window_rule {
name = "pip-overlay", name = 'pip-overlay',
tag = "+pip", tag = '+pip',
match = { match = {
title = "(Picture.?in.?[Pp]icture)", title = '(Picture.?in.?[Pp]icture)',
}, },
}) }
hl.window_rule({ hl.window_rule {
name = "pip-overlay", name = 'pip-overlay',
tag = "-default-opacity", tag = '-default-opacity',
float = true, float = true,
pin = true, pin = true,
size = { 600, 338 }, size = { 600, 338 },
keep_aspect_ratio = true, keep_aspect_ratio = true,
border_size = 0, border_size = 0,
opacity = "1 1", opacity = '1 1',
match = { match = {
tag = "pip", tag = 'pip',
}, },
}) }
-- Retroarch -- Retroarch
hl.window_rule({ hl.window_rule {
name = "retroarch-fullscreen", name = 'retroarch-fullscreen',
fullscreen = true, fullscreen = true,
workspace = 5, workspace = 'name:Gaming_1',
tag = "-default-opacity", tag = '-default-opacity',
opacity = "1 1", opacity = '1 1',
idle_inhibit = "fullscreen", idle_inhibit = 'fullscreen',
match = { match = {
class = "com.libretro.RetroArch", class = 'com.libretro.RetroArch',
}, },
}) }
-- Scratchpad apps -- Scratchpad apps
hl.window_rule({ hl.window_rule {
name = "spotify-scratchpad", name = 'spotify-scratchpad',
workspace = "special:scratchpad", workspace = 'special:music',
match = { match = {
class = "Spotify", class = 'Spotify|psysonic',
}, },
}) }
hl.window_rule({ hl.window_rule {
name = "signal-scratchpad", name = 'comms-scratchpad',
workspace = "special:scratchpad", workspace = 'special:comms',
match = { match = {
class = "signal", class = '^(chrome-discord.com__channels_@me-Default|chrome-web.whatsapp.com__-Default|signal)$',
}, },
}) }
hl.window_rule({ hl.window_rule {
name = "discord-scratchpad", name = 'superproductivity-scratchpad',
workspace = "special:scratchpad", workspace = 'special:prod',
match = { match = {
class = "^(chrome-discord.com__channels_@me-Default)$", class = '^(superproductivity|org.station.notes)$',
}, },
}) }
-- Float Nextcloud -- Float Nextcloud
hl.window_rule({ hl.window_rule {
name = "nextcloud-float", name = 'nextcloud-float',
float = true, float = true,
match = { match = {
class = "com.nextcloud.desktopclient.nextcloud", class = 'com.nextcloud.desktopclient.nextcloud',
}, },
}) }
-- Position drawing -- Position drawing
hl.window_rule({ hl.window_rule {
name = "krita-drawing", name = 'krita-drawing',
workspace = 5, workspace = 'name:Art_1',
tag = "-default-opacity", tag = '-default-opacity',
opacity = "1 1", opacity = '1 1',
match = { match = {
class = "(krita)", class = '(krita)',
}, },
}) }
-- Position TV
hl.window_rule({
name = "tv-apps",
workspace = 7,
match = {
class = "(chrome-youtube.com__-Default|chrome-netflix.com__-Default)",
},
})
-- Float Steam -- Float Steam
hl.window_rule({ hl.window_rule {
name = "steam-float", name = 'steam-float',
float = true, float = true,
workspace = 7, no_initial_focus = true,
idle_inhibit = "fullscreen", workspace = 'name:Gaming_1',
idle_inhibit = 'fullscreen',
match = { match = {
class = "steam", class = 'steam',
}, },
}) }
hl.window_rule({ hl.window_rule {
name = "steam-app-size", name = 'steam-app-size',
center = true, center = true,
size = { 1100, 700 },
match = { match = {
class = "steam", class = 'steam',
title = "Steam", title = 'Steam',
}, },
}) }
hl.window_rule({ hl.window_rule {
name = "steam-opacity", name = 'steam-opacity',
tag = "-default-opacity", tag = '-default-opacity',
opacity = "1 1", opacity = '1 1',
match = { match = {
class = "steam.*", class = 'steam.*',
}, },
}) }
hl.window_rule({ hl.window_rule {
name = "steam-friends-size", name = 'steam-friends-size',
size = { 460, 800 }, size = { 460, 800 },
match = { match = {
class = "steam", class = 'steam',
title = "Friends List", title = 'Friends List',
}, },
}) }
-- Float Lunar Client -- Float Lunar Client
hl.window_rule({ hl.window_rule {
name = "lunar-client-float", name = 'atlauncher-float',
float = true, float = true,
workspace = 7, workspace = 'name:Gaming_1',
center = true, center = true,
size = { 1100, 700 }, size = { 1100, 700 },
tag = "-default-opacity", tag = '-default-opacity',
opacity = "1 1", opacity = '1 1',
idle_inhibit = "fullscreen", idle_inhibit = 'fullscreen',
match = { match = {
class = "lunarclient", class = 'atlauncher',
}, },
}) }
-- Floating windows -- Floating windows
hl.window_rule({ hl.window_rule {
name = "floating-window-tags", name = 'floating-window-tags',
tag = "+floating-window", tag = '+floating-window',
match = { match = {
class = "(org.station.bluetui|org.station.impala|org.station.wiremix|org.station.btop|org.station.terminal|org.station.bash|org.gnome.NautilusPreviewer|org.gnome.Evince|com.gabm.satty|Station|About|TUI.float|imv|mpv)", class = '(org.station.bluetui|org.station.impala|org.station.wiremix|org.station.btop|org.station.terminal|org.station.bash|org.gnome.NautilusPreviewer|org.gnome.Evince|com.gabm.satty|Station|About|TUI.float|imv|mpv)',
}, },
}) }
hl.window_rule({ hl.window_rule {
name = "floating-dialog-tags", name = 'floating-dialog-tags',
tag = "+floating-window", tag = '+floating-window',
match = { match = {
class = "(xdg-desktop-portal-gtk|sublime_text|DesktopEditors|org.gnome.Nautilus)", class = '(xdg-desktop-portal-gtk|sublime_text|DesktopEditors|org.gnome.Nautilus)',
title = "^(Open.*Files?|Open [F|f]older.*|Save.*Files?|Save.*As|Save|All Files|.*wants to [open|save].*|[C|c]hoose.*)", title = '^(Open.*Files?|Open [F|f]older.*|Save.*Files?|Save.*As|Save|All Files|.*wants to [open|save].*|[C|c]hoose.*)',
}, },
}) }
hl.window_rule({ hl.window_rule {
name = "floating-window-tags", name = 'floating-window-tags',
tag = "+floating-window", tag = '+floating-window',
float = true, float = true,
center = true, center = true,
size = { 875, 600 }, size = { 875, 600 },
match = { match = {
tag = "floating-window", tag = 'floating-window',
}, },
}) }
-- Calculator float -- Calculator float
hl.window_rule({ hl.window_rule {
name = "calculator-float", name = 'calculator-float',
float = true, float = true,
match = { match = {
class = "org.gnome.Calculator", class = 'org.gnome.Calculator',
}, },
}) }
-- Fullscreen screensaver -- Fullscreen screensaver
hl.window_rule({ hl.window_rule {
name = "screensaver-fullscreen", name = 'screensaver-fullscreen',
fullscreen = true, fullscreen = true,
float = true, float = true,
animation = "slide", animation = 'slide',
match = { match = {
class = "org.station.screensaver", class = 'org.station.screensaver',
}, },
}) }
-- No transparency on media windows -- No transparency on media windows
hl.window_rule({ hl.window_rule {
name = "media-no-opacity", name = 'media-no-opacity',
tag = "-default-opacity", tag = '-default-opacity',
opacity = "1 1", opacity = '1 1',
match = { match = {
class = "^(zoom|vlc|mpv|org.kde.kdenlive|com.obsproject.Studio|com.github.PintaProject.Pinta|imv|org.gnome.NautilusPreviewer)$", class = '^(zoom|vlc|mpv|org.kde.kdenlive|com.obsproject.Studio|com.github.PintaProject.Pinta|imv|org.gnome.NautilusPreviewer)$',
}, },
}) }
-- Popped window rounding -- Popped window rounding
hl.window_rule({ hl.window_rule {
name = "popped-window-rounding", name = 'popped-window-rounding',
rounding = 8, rounding = 8,
match = { match = {
tag = "pop", tag = 'pop',
}, },
}) }
-- Prevent idle while open -- Prevent idle while open
hl.window_rule({ hl.window_rule {
name = "idle-inhibit-apps", name = 'idle-inhibit-apps',
idle_inhibit = "always", idle_inhibit = 'always',
match = { match = {
tag = "noidle", tag = 'noidle',
}, },
}) }
-- Prevent Telegram from stealing focus on new messages -- Prevent Telegram from stealing focus on new messages
hl.window_rule({ hl.window_rule {
name = "telegram-no-focus-steal", name = 'telegram-no-focus-steal',
focus_on_activate = false, focus_on_activate = false,
match = { match = {
class = "org.telegram.desktop", class = 'org.telegram.desktop',
}, },
}) }
-- Define terminal tag to style them uniformly -- Define terminal tag to style them uniformly
hl.window_rule({ hl.window_rule {
name = "terminal-tags", name = 'terminal-tags',
tag = "+terminal", tag = '+terminal',
match = { match = {
class = "(Alacritty|kitty|com.mitchellh.ghostty)", class = '(Alacritty|kitty|com.mitchellh.ghostty)',
}, },
}) }
hl.window_rule({ hl.window_rule {
name = "terminal-opacity-tags", name = 'terminal-opacity-tags',
tag = "-default-opacity", tag = '-default-opacity',
opacity = "0.97 0.9", opacity = '0.97 0.9',
match = { match = {
tag = "terminal", tag = 'terminal',
}, },
}) }
-- Application-specific animation -- Application-specific animation
hl.layer_rule({ hl.layer_rule {
name = "walker-no-anim", name = 'walker-no-anim',
no_anim = true, no_anim = true,
match = { namespace = "walker" }, match = { namespace = 'walker' },
}) }
-- Webcam overlay for screen recording -- Webcam overlay for screen recording
hl.window_rule({ hl.window_rule {
name = "webcam-overlay", name = 'webcam-overlay',
float = true, float = true,
pin = true, pin = true,
no_initial_focus = true, no_initial_focus = true,
no_dim = true, no_dim = true,
size = { 320, 180 }, size = { 320, 180 },
position = { "(monitor_w-360)", "(monitor_h-220)" }, move = { '(monitor_w-360)', '(monitor_h-220)' },
match = { match = {
title = "WebcamOverlay", title = 'WebcamOverlay',
}, },
}) }
-12
View File
@@ -1,12 +0,0 @@
exec-once = uwsm-app -- hypridle
exec-once = uwsm-app -- mako
exec-once = uwsm app -- hyprsunset
# exec-once = Enpass
# exec-once = uwsm-app -- waybar
exec-once = uwsm-app -- fcitx5 --disable notificationitem
exec-once = station-bg-random
exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
# Slow app launch fix -- set systemd vars
exec-once = systemctl --user import-environment $(env | cut -d'=' -f 1)
exec-once = dbus-update-activation-environment --systemd --all
+3 -1
View File
@@ -3,7 +3,9 @@ hl.on("hyprland.start", function()
hl.exec_cmd("uwsm-app -- mako") hl.exec_cmd("uwsm-app -- mako")
hl.exec_cmd("uwsm-app -- hyprsunset") hl.exec_cmd("uwsm-app -- hyprsunset")
hl.exec_cmd("uwsm-app -- fcitx5 --disable notificationitem") hl.exec_cmd("uwsm-app -- fcitx5 --disable notificationitem")
-- hl.exec_cmd("Enpass") hl.exec_cmd("uwsm-app -- Enpass -minimize")
hl.exec_cmd("uwsm-app -- steam")
hl.exec_cmd("nextcloud")
hl.exec_cmd("station-bg-random") hl.exec_cmd("station-bg-random")
hl.exec_cmd("/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1") hl.exec_cmd("/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1")
hl.exec_cmd("dbus-update-activation-environment --systemd --all") hl.exec_cmd("dbus-update-activation-environment --systemd --all")
-205
View File
@@ -1,205 +0,0 @@
# ==========================
# Media
# ==========================
# Only display the OSD on the currently focused monitor
$osdclient = swayosd-client --monitor "$(hyprctl monitors -j | jq -r '.[] | select(.focused == true).name')"
# Laptop multimedia keys for volume and LCD brightness (with OSD)
bindeld = ,XF86AudioRaiseVolume, Volume up, exec, $osdclient --output-volume raise
bindeld = ,XF86AudioLowerVolume, Volume down, exec, $osdclient --output-volume lower
bindeld = ,XF86AudioMute, Mute, exec, $osdclient --output-volume mute-toggle
bindeld = ,XF86AudioMicMute, Mute microphone, exec, $osdclient --input-volume mute-toggle
bindeld = ,XF86MonBrightnessUp, Brightness up, exec, station-brightness-display +5%
bindeld = ,XF86MonBrightnessDown, Brightness down, exec, station-brightness-display 5%-
bindeld = ,XF86KbdBrightnessUp, Keyboard brightness up, exec, station-brightness-keyboard up
bindeld = ,XF86KbdBrightnessDown, Keyboard brightness down, exec, station-brightness-keyboard down
bindld = ,XF86KbdLightOnOff, Keyboard backlight cycle, exec, station-brightness-keyboard cycle
# Precise 1% multimedia adjustments with Alt modifier
bindeld = ALT, XF86AudioRaiseVolume, Volume up precise, exec, $osdclient --output-volume +1
bindeld = ALT, XF86AudioLowerVolume, Volume down precise, exec, $osdclient --output-volume -1
bindeld = ALT, XF86MonBrightnessUp, Brightness up precise, exec, station-brightness-display +1%
bindeld = ALT, XF86MonBrightnessDown, Brightness down precise, exec, station-brightness-display 1%-
# Requires playerctl
bindld = , XF86AudioNext, Next track, exec, $osdclient --playerctl next
bindld = , XF86AudioPause, Pause, exec, $osdclient --playerctl play-pause
bindld = , XF86AudioPlay, Play, exec, $osdclient --playerctl play-pause
bindld = , XF86AudioPrev, Previous track, exec, $osdclient --playerctl previous
# Switch audio output with Super + Mute
bindld = SUPER, XF86AudioMute, Switch audio output, exec, station-cmd-audio-switch
# ==========================
# Copy & Paste
# ==========================
bindd = SUPER, C, Universal copy, sendshortcut, CTRL, Insert,
bindd = SUPER, V, Universal paste, sendshortcut, SHIFT, Insert,
bindd = SUPER, X, Universal cut, sendshortcut, CTRL, X,
bindd = SUPER, A, Universal cut, sendshortcut, CTRL, A,
bindd = SUPER CTRL, V, Clipboard manager, exec, station-launch-walker -m clipboard
# Close windows
bindd = SUPER, Q, Close window, killactive,
# ==========================
# Tiling
# ==========================
bindd = SUPER, P, Pseudo window, pseudo, # dwindle
bindd = SUPER, F, Full screen, fullscreen, 0
bindd = SUPER CTRL, F, Full width, fullscreen, 1
bindd = SUPER, T, Pop window out (float & pin), exec, station-hyprland-window-pop
bindd = SUPER CTRL, L, Toggle workspace layout, exec, station-hyprland-workspace-layout-toggle
# Move focus with SUPER + arrow keys
bindd = SUPER, H, Move window focus left, movefocus, l
bindd = SUPER, L, Move window focus right, movefocus, r
bindd = SUPER, K, Move window focus up, movefocus, u
bindd = SUPER, J, Move window focus down, movefocus, d
# Control scratchpad
bindd = SUPER, S, Toggle scratchpad, togglespecialworkspace, scratchpad
bindd = SUPER ALT, S, Move window to scratchpad, movetoworkspacesilent, special:scratchpad
# Cycle through applications on active workspace
bindd = SUPER, TAB, Cycle to next window, cyclenext, visible
bindd = SUPER SHIFT, TAB, Cycle to prev window, cyclenext, visible prev
bindd = SUPER, TAB, Reveal active window on top, bringactivetotop
bindd = SUPER SHIFT, TAB, Reveal active window on top, bringactivetotop
# Resize active window
bindd = SUPER, code:20, Expand window left, resizeactive, -100 0 # - key
bindd = SUPER, code:21, Shrink window left, resizeactive, 100 0 # = key
bindd = SUPER SHIFT, code:20, Shrink window up, resizeactive, 0 -100
bindd = SUPER SHIFT, code:21, Expand window down, resizeactive, 0 100
# Scroll through existing workspaces with SUPER + scroll
bindd = SUPER, mouse_down, Scroll active workspace forward, workspace, e+1
bindd = SUPER, mouse_up, Scroll active workspace backward, workspace, e-1
# Move/resize windows with mainMod + LMB/RMB and dragging
bindmd = SUPER, mouse:272, Move window, movewindow
bindmd = SUPER, mouse:273, Resize window, resizewindow
# Toggle groups
bindd = SUPER, G, Toggle window grouping, togglegroup
bindd = SUPER ALT, G, Move active window out of group, moveoutofgroup
# Join groups
bindd = SUPER ALT, LEFT, Move window to group on left, moveintogroup, l
bindd = SUPER ALT, RIGHT, Move window to group on right, moveintogroup, r
bindd = SUPER ALT, UP, Move window to group on top, moveintogroup, u
bindd = SUPER ALT, DOWN, Move window to group on bottom, moveintogroup, d
# Navigate a single set of grouped windows
bindd = SUPER ALT, TAB, Next window in group, changegroupactive, f
bindd = SUPER ALT SHIFT, TAB, Previous window in group, changegroupactive, b
# Window navigation for grouped windows
bindd = SUPER CTRL, LEFT, Move grouped window focus left, changegroupactive, b
bindd = SUPER CTRL, RIGHT, Move grouped window focus right, changegroupactive, f
# Scroll through a set of grouped windows with SUPER + ALT + scroll
bindd = SUPER ALT, mouse_down, Next window in group, changegroupactive, f
bindd = SUPER ALT, mouse_up, Previous window in group, changegroupactive, b
# Activate window in a group by number
bindd = SUPER ALT, code:10, Switch to group window 1, changegroupactive, 1
bindd = SUPER ALT, code:11, Switch to group window 2, changegroupactive, 2
bindd = SUPER ALT, code:12, Switch to group window 3, changegroupactive, 3
bindd = SUPER ALT, code:13, Switch to group window 4, changegroupactive, 4
bindd = SUPER ALT, code:14, Switch to group window 5, changegroupactive, 5
# ==========================
# Utilities
# ==========================
# Menus
bindd = SUPER, SPACE, Launch apps, exec, station-launch-walker
bindd = SUPER CTRL, E, Emoji picker, exec, station-launch-walker -m symbols
bindd = SUPER CTRL, C, Capture menu, exec, station-menu capture
bindd = SUPER CTRL, O, Toggle menu, exec, station-menu toggle
bindd = SUPER ALT, SPACE, Station menu, exec, station-menu
bindd = SUPER, ESCAPE, System menu, exec, station-menu system
bindld = , XF86PowerOff, Power menu, exec, station-menu system
bindd = SUPER, K, Show key bindings, exec, station-menu-keybindings
bindd = , XF86Calculator, Calculator, exec, gnome-calculator
# Aesthetics
bindd = SUPER SHIFT, SPACE, Toggle top bar, exec, station-toggle-waybar
bindd = SUPER CTRL, SPACE, Theme background menu, exec, station-menu background
# bindd = SUPER SHIFT CTRL, SPACE, Theme menu, exec, station-menu theme
bindd = SUPER, BACKSPACE, Toggle window transparency, exec, hyprctl dispatch setprop "address:$(hyprctl activewindow -j | jq -r '.address')" opaque toggle
bindd = SUPER SHIFT, BACKSPACE, Toggle window gaps, exec, station-hyprland-window-gaps-toggle
bindd = SUPER CTRL, Backspace, Toggle single-window square aspect, exec, station-hyprland-window-single-square-aspect-toggle
# Notifications
bindd = SUPER, COMMA, Dismiss last notification, exec, makoctl dismiss
bindd = SUPER SHIFT, COMMA, Dismiss all notifications, exec, makoctl dismiss --all
bindd = SUPER CTRL, COMMA, Toggle silencing notifications, exec, station-toggle-notification-silencing
bindd = SUPER ALT, COMMA, Invoke last notification, exec, makoctl invoke
bindd = SUPER SHIFT ALT, COMMA, Restore last notification, exec, makoctl restore
# Toggles
bindd = SUPER CTRL, I, Toggle locking on idle, exec, station-toggle-idle
bindd = SUPER CTRL, N, Toggle nightlight, exec, station-toggle-nightlight
# Captures
bindd = , PRINT, Screenshot, exec, station-cmd-screenshot
bindd = ALT, PRINT, Screenrecording, exec, station-menu screenrecord
bindd = SUPER, PRINT, Color picker, exec, pkill hyprpicker || hyprpicker -a
# File sharing
# bindd = SUPER CTRL, S, Share, exec, station-menu share
# Waybar-less information
bindd = SUPER CTRL ALT, T, Show time, exec, notify-send " $(date +"%A %H:%M — %d %B W%V %Y")"
bindd = SUPER CTRL ALT, B, Show battery remaining, exec, notify-send "󰁹 Battery is at $(station-battery-remaining)%"
bindd = SUPER CTRL ALT, W, Show active window name and class, exec, notify-send "$(hyprctl activewindow -j | jq -r '"Window: \(.title)\nClass: \(.class)"')"
# Control panels
bindd = SUPER CTRL, A, Audio controls, exec, station-launch-audio
bindd = SUPER CTRL, B, Bluetooth controls, exec, station-launch-bluetooth
bindd = SUPER CTRL, W, Wifi controls, exec, station-launch-wifi
bindd = SUPER CTRL, T, Activity, exec, station-launch-tui btop
# Dictation
# bindd = SUPER CTRL, X, Toggle dictation, exec, voxtype record toggle
# Zoom
bindd = SUPER CTRL, Z, Zoom in, exec, hyprctl keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor -j | jq '.float + 1')
bindd = SUPER CTRL ALT, Z, Reset zoom, exec, hyprctl keyword cursor:zoom_factor 1
# Lock system
# bindd = SUPER CTRL, L, Lock system, exec, station-lock-screen
# ==========================
# Applications
# ==========================
bindd = SUPER, RETURN, Terminal, exec, uwsm-app -- xdg-terminal-exec
bindd = SUPER ALT, RETURN, Tmux, exec, uwsm-app -- xdg-terminal-exec --dir="$(station-cmd-terminal-cwd)" tmux new
bindd = SUPER SHIFT, F, File manager, exec, uwsm-app -- nautilus --new-window
bindd = SUPER ALT SHIFT, F, File manager (cwd), exec, uwsm-app -- nautilus --new-window "$(station-cmd-terminal-cwd)"
bindd = SUPER SHIFT, B, Browser, exec, /home/chris/.local/bin/station-launch-browser
bindd = SUPER SHIFT ALT, B, Browser (private), exec, station-launch-browser --private
bindd = SUPER SHIFT, M, Music, exec, station-launch-or-focus spotify
bindd = SUPER SHIFT, N, Editor, exec, station-launch-editor
# bindd = SUPER SHIFT, D, Docker, exec, station-launch-tui lazydocker
bindd = SUPER SHIFT, G, Signal, exec, station-launch-or-focus ^signal$ "uwsm-app -- signal-desktop"
bindd = SUPER SHIFT, O, Obsidian, exec, station-launch-or-focus ^obsidian$ "uwsm-app -- obsidian -disable-gpu --enable-wayland-ime"
# bindd = SUPER SHIFT, W, Typora, exec, uwsm-app -- typora --enable-wayland-ime
bindd = SUPER SHIFT, SLASH, Passwords, exec, Enpass showassistant
bindd = SUPER SHIFT, E, Email, exec, station-launch-or-focus mailspring
# If your web app url contains #, type it as ## to prevent hyprland treating it as a comment
bindd = SUPER SHIFT, A, ChatGPT, exec, station-launch-webapp "https://gemini.google.com/app"
bindd = SUPER SHIFT, C, Calendar, exec, station-launch-webapp "https://tower.scarif.space/apps/calendar"
bindd = SUPER SHIFT, Y, YouTube, exec, station-launch-or-focus-webapp "YouTube" "https://youtube.com/"
bindd = SUPER SHIFT ALT, G, WhatsApp, exec, station-launch-or-focus-webapp WhatsApp "https://web.whatsapp.com/"
bindd = SUPER SHIFT CTRL, G, Google Maps, exec, station-launch-or-focus-webapp "Google Maps" "https://maps.google.com"
# bindd = SUPER SHIFT, P, Google Photos, exec, station-launch-or-focus-webapp "Google Photos" "https://photos.google.com/"
# bindd = SUPER SHIFT, X, X, exec, station-launch-webapp "https://x.com/"
# bindd = SUPER SHIFT ALT, X, X Post, exec, station-launch-webapp "https://x.com/compose/post"
# Add extra bindings
bind = SUPER SHIFT, R, exec, ghostty -e ssh scarif
+240 -292
View File
@@ -2,365 +2,313 @@
-- Media -- Media
-- ========================== -- ==========================
-- Only display the OSD on the currently focused monitor -- Only display the OSD on the currently focused monitor
local osdclient = "swayosd-client --monitor \"$(hyprctl monitors -j | jq -r '.[] | select(.focused == true).name')\"" local osdclient = 'swayosd-client --monitor "$(hyprctl monitors -j | jq -r \'.[] | select(.focused == true).name\')"'
local exec = hl.dsp.exec_cmd
local shortcut = hl.dsp.send_shortcut
local function bind(key, cmd, desc, opts)
opts = opts or {}
opts.desc = desc
hl.bind(key, cmd, opts)
end
local function bindl(key, cmd, desc, opts)
opts = opts or {}
opts.locked = true
bind(key, cmd, desc, opts)
end
local function bindlr(key, cmd, desc, opts)
opts = opts or {}
opts.repeating = true
bindl(key, cmd, desc, opts)
end
local function notify(text)
hl.notification.create { text = text, duration = 2000 }
end
-- Laptop multimedia keys for volume and LCD brightness (with OSD) -- Laptop multimedia keys for volume and LCD brightness (with OSD)
hl.bind( bindlr('XF86AudioRaiseVolume', exec(osdclient .. ' --output-volume raise'), 'Volume up')
"XF86AudioRaiseVolume", bindlr('XF86AudioRaiseVolume', exec(osdclient .. ' --output-volume raise'), 'Volume up')
hl.dsp.exec_cmd(osdclient .. " --output-volume raise"), bindlr('XF86AudioLowerVolume', exec(osdclient .. ' --output-volume lower'), 'Volume down')
{ locked = true, repeating = true, description = "Volume up" } bindlr('XF86AudioMute', exec(osdclient .. ' --output-volume mute-toggle'), 'Mute')
) bindlr('XF86AudioMicMute', exec(osdclient .. ' --input-volume mute-toggle'), 'Mute microphone')
hl.bind( bindlr('XF86MonBrightnessUp', exec 'station-brightness-display +5%', 'Brightness up')
"XF86AudioRaiseVolume", bindlr('XF86MonBrightnessDown', exec 'station-brightness-display 5%-', 'Brightness down')
hl.dsp.exec_cmd(osdclient .. " --output-volume raise"), bindlr('XF86KbdBrightnessUp', exec 'station-brightness-keyboard up', 'Keyboard brightness up')
{ locked = true, repeating = true, description = "Volume up" } bindlr('XF86KbdBrightnessDown', exec 'station-brightness-keyboard down', 'Keyboard brightness down')
) bindl('XF86KbdLightOnOff', exec 'station-brightness-keyboard cycle', 'Keyboard backlight cycle')
hl.bind(
"XF86AudioLowerVolume",
hl.dsp.exec_cmd(osdclient .. " --output-volume lower"),
{ locked = true, repeating = true, description = "Volume down" }
)
hl.bind(
"XF86AudioMute",
hl.dsp.exec_cmd(osdclient .. " --output-volume mute-toggle"),
{ locked = true, repeating = true, description = "Mute" }
)
hl.bind(
"XF86AudioMicMute",
hl.dsp.exec_cmd(osdclient .. " --input-volume mute-toggle"),
{ locked = true, repeating = true, description = "Mute microphone" }
)
hl.bind(
"XF86MonBrightnessUp",
hl.dsp.exec_cmd("station-brightness-display +5%"),
{ locked = true, repeating = true, description = "Brightness up" }
)
hl.bind(
"XF86MonBrightnessDown",
hl.dsp.exec_cmd("station-brightness-display 5%-"),
{ locked = true, repeating = true, description = "Brightness down" }
)
hl.bind(
"XF86KbdBrightnessUp",
hl.dsp.exec_cmd("station-brightness-keyboard up"),
{ locked = true, repeating = true, description = "Keyboard brightness up" }
)
hl.bind(
"XF86KbdBrightnessDown",
hl.dsp.exec_cmd("station-brightness-keyboard down"),
{ locked = true, repeating = true, description = "Keyboard brightness down" }
)
hl.bind(
"XF86KbdLightOnOff",
hl.dsp.exec_cmd("station-brightness-keyboard cycle"),
{ locked = true, description = "Keyboard backlight cycle" }
)
-- Precise 1% multimedia adjustments with Alt modifier -- Precise 1% multimedia adjustments with Alt modifier
hl.bind( bindlr('ALT + XF86AudioRaiseVolume', exec '$osdclient --output-volume +1', 'Volume up precise')
"ALT + XF86AudioRaiseVolume", bindlr('ALT + XF86AudioLowerVolume', exec '$osdclient --output-volume -1', 'Volume down precise')
hl.dsp.exec_cmd("$osdclient --output-volume +1"), bindlr('ALT + XF86MonBrightnessUp', exec 'station-brightness-display +1%', 'Brightness up precise')
{ locked = true, repeating = true, description = "Volume up precise" } bindlr('ALT + XF86MonBrightnessDown', exec 'station-brightness-display 1%-', 'Brightness down precise')
)
hl.bind(
"ALT + XF86AudioLowerVolume",
hl.dsp.exec_cmd("$osdclient --output-volume -1"),
{ locked = true, repeating = true, description = "Volume down precise" }
)
hl.bind(
"ALT + XF86MonBrightnessUp",
hl.dsp.exec_cmd("station-brightness-display +1%"),
{ locked = true, repeating = true, description = "Brightness up precise" }
)
hl.bind(
"ALT + XF86MonBrightnessDown",
hl.dsp.exec_cmd("station-brightness-display 1%-"),
{ locked = true, repeating = true, description = "Brightness down precise" }
)
-- Requires playerctl -- Requires playerctl
hl.bind( bindl('XF86AudioNext', exec(osdclient .. ' --playerctl next'), 'Next track')
"F86AudioNext", bindl('XF86AudioPause', exec(osdclient .. ' --playerctl play-pause'), 'Pause')
hl.dsp.exec_cmd(osdclient .. " --playerctl next"), bindl('XF86AudioPlay', exec(osdclient .. ' --playerctl play-pause'), 'Play')
{ locked = true, description = "Next track" } bindl('XF86AudioPrev', exec(osdclient .. ' --playerctl previous'), 'Previous track')
)
hl.bind(
"F86AudioPause",
hl.dsp.exec_cmd(osdclient .. " --playerctl play-pause"),
{ locked = true, description = "Pause" }
)
hl.bind(
"F86AudioPlay",
hl.dsp.exec_cmd(osdclient .. " --playerctl play-pause"),
{ locked = true, description = "Play" }
)
hl.bind(
"F86AudioPrev",
hl.dsp.exec_cmd(osdclient .. " --playerctl previous"),
{ locked = true, description = "Previous track" }
)
-- Switch audio output with Super + Mute -- Switch audio output with Super + Mute
hl.bind( bindl('SUPER + XF86AudioMute', exec 'station-cmd-audio-switch', 'Switch audio output')
"SUPER + XF86AudioMute",
hl.dsp.exec_cmd("station-cmd-audio-switch"),
{ locked = true, description = "Switch audio output" }
)
-- ========================== -- ==========================
-- Copy & Paste -- Copy & Paste
-- ========================== -- ==========================
hl.bind("SUPER + C", hl.dsp.send_shortcut("CTRL + Insert"), { description = "Universal copy" }) bind('SUPER + C', shortcut { mods = 'CTRL', key = 'Insert' }, 'Universal copy')
hl.bind("SUPER + V", hl.dsp.send_shortcut("SHIFT + Insert"), { description = "Universal paste" }) bind('SUPER + V', shortcut { mods = 'SHIFT', key = 'Insert' }, 'Universal paste')
hl.bind("SUPER + X", hl.dsp.send_shortcut("CTRL + X"), { description = "Universal cut" }) bind('SUPER + X', shortcut { mods = 'CRTL', key = 'X' }, 'Universal cut')
hl.bind("SUPER + A", hl.dsp.send_shortcut("CTRL + A"), { description = "Universal cut" }) bind('SUPER + A', shortcut { mods = 'CTRL', key = 'A' }, 'Universal cut')
hl.bind( bind('SUPER + CTRL + V', exec 'station-launch-walker -m clipboard', 'Clipboard manager')
"SUPER + CTRL + V",
hl.dsp.exec_cmd("station-launch-walker -m clipboard"),
{ description = "Clipboard manager" }
)
-- Close windows -- Close windows
hl.bind("SUPER + Q", hl.dsp.window.kill(), { description = "Close window" }) bind('SUPER + Q', hl.dsp.window.close(), 'Close window')
-- ========================== -- ==========================
-- Tiling -- Tiling
-- ========================== -- ==========================
hl.bind("SUPER + P", hl.dsp.window.pseudo()--[[# dwindle]], { description = "Pseudo window" }) bind('SUPER + P', hl.dsp.window.pseudo()--[[# dwindle]], 'Pseudo window')
hl.bind("SUPER + F", hl.dsp.window.fullscreen(0), { description = "Full screen" }) bind('SUPER + F', hl.dsp.window.fullscreen(0), 'Full screen')
hl.bind("SUPER + CTRL + F", hl.dsp.window.fullscreen(1), { description = "Full width" }) bind('SUPER + CTRL + F', hl.dsp.window.fullscreen(1), 'Full width')
hl.bind("SUPER + T", hl.dsp.exec_cmd("station-hyprland-window-pop"), { description = "Pop window out (float & pin)" }) bind('SUPER + T', function()
hl.bind( local width = 1300
"SUPER + CTRL + L", local height = 900
hl.dsp.exec_cmd("station-hyprland-workspace-layout-toggle"), local pinned = hl.get_active_window().pinned
{ description = "Toggle workspace layout" }
) if pinned then
hl.dispatch(hl.dsp.window.pin())
hl.dispatch(hl.dsp.window.float { action = 'toggle' })
hl.dispatch(hl.dsp.window.tag { tag = '-pop' })
else
hl.dispatch(hl.dsp.window.float { action = 'toggle' })
hl.dispatch(hl.dsp.window.resize { x = width, y = height })
hl.dispatch(hl.dsp.window.center())
hl.dispatch(hl.dsp.window.pin())
hl.dispatch(hl.dsp.window.alter_zorder { mode = 'top' })
hl.dispatch(hl.dsp.window.tag { tag = '+pop' })
end
end, 'Pop window out (float & pin)')
bind('SUPER + CTRL + L', function()
local layouts = { 'dwindle', 'scrolling', 'monocle', 'master' }
local workspace = hl.get_active_workspace()
if hl.get_active_special_workspace() then
workspace = hl.get_active_special_workspace()
end
local next_layout = 'dwindle'
if not workspace then
return
end
for i = 1, #layouts do
if layouts[i] == workspace.tiled_layout then
local next_layout_idx = (i % #layouts) + 1
next_layout = layouts[next_layout_idx]
break
end
end
if workspace.special then
hl.workspace_rule { workspace = tostring(workspace.name), layout = next_layout }
else
hl.workspace_rule { workspace = tostring(workspace.id), layout = next_layout }
end
notify('󱂬 Workspace layout set to ' .. next_layout)
end, 'Toggle workspace layout')
-- Move focus with SUPER + arrow keys -- Move focus with SUPER + arrow keys
hl.bind("SUPER + H", hl.dsp.focus({ direction = "left" }), { description = "Move window focus left" }) bind('SUPER + H', hl.dsp.focus { direction = 'left' }, 'Move window focus left')
hl.bind("SUPER + L", hl.dsp.focus({ description = "right" }), { description = "Move window focus right" }) bind('SUPER + L', hl.dsp.focus { direction = 'right' }, 'Move window focus right')
hl.bind("SUPER + K", hl.dsp.focus({ direction = "up" }), { description = "Move window focus up" }) bind('SUPER + K', hl.dsp.focus { direction = 'up' }, 'Move window focus up')
hl.bind("SUPER + J", hl.dsp.focus({ direction = "down" }), { description = "Move window focus down" }) bind('SUPER + J', hl.dsp.focus { direction = 'down' }, 'Move window focus down')
hl.bind("SUPER + SHIFT + H", hl.dsp.window.move({ direction = "left" }), { description = "Move window left" }) bind('SUPER + SHIFT + H', hl.dsp.window.move { direction = 'left' }, 'Move window left')
hl.bind("SUPER + SHIFT + L", hl.dsp.window.move({ direction = "right" }), { description = "Move window right" }) bind('SUPER + SHIFT + L', hl.dsp.window.move { direction = 'right' }, 'Move window right')
hl.bind("SUPER + SHIFT + K", hl.dsp.window.move({ direction = "up" }), { description = "Move window up" }) bind('SUPER + SHIFT + K', hl.dsp.window.move { direction = 'up' }, 'Move window up')
hl.bind("SUPER + SHIFT + J", hl.dsp.window.move({ direction = "down" }), { description = "Move window down" }) bind('SUPER + SHIFT + J', hl.dsp.window.move { direction = 'down' }, 'Move window down')
-- Control scratchpad -- Control scratchpad
hl.bind("SUPER + S", hl.dsp.workspace.toggle_special("scratchpad"), { description = "Toggle scratchpad" }) bind('SUPER + S', hl.dsp.workspace.toggle_special 'scratchpad', 'Toggle scratchpad')
hl.bind( bind('SUPER + ALT + S', hl.dsp.window.move { workspace = 'special:scratchpad' }, 'Move window to scratchpad')
"SUPER + ALT + S", bind('SUPER + N', function()
hl.dsp.window.move({ worspace = "special:scratchpad" }), hl.dispatch(hl.dsp.workspace.toggle_special 'prod')
{ description = "Move window to scratchpad" } local windows = hl.get_windows { workspace = 'special:prod' }
) if #windows == 0 then
hl.exec_cmd 'station-launch-or-focus ^superProductivity$ "uwsm-app -- super-productivity"'
hl.exec_cmd 'uwsm-app -- xdg-terminal-exec --app-id=org.station.notes nvim ~/Tower/Documents/Notes'
end
end, 'Toggle productivity workspace')
bind('SUPER + M', function()
hl.dispatch(hl.dsp.workspace.toggle_special 'music')
local windows = hl.get_windows { workspace = 'special:music' }
if #windows == 0 then
hl.exec_cmd 'station-launch-or-focus spotify'
hl.exec_cmd 'station-launch-or-focus psysonic'
end
end, 'Toggle music workspace')
bind('SUPER + D', function()
hl.dispatch(hl.dsp.workspace.toggle_special 'comms')
local windows = hl.get_windows { workspace = 'special:comms' }
if #windows == 0 then
hl.exec_cmd 'station-launch-or-focus ^signal$ "uwsm-app -- signal-desktop"'
hl.exec_cmd 'station-launch-or-focus ^chrome-web.whatsapp.com__-Default$ "station-launch-webapp https://web.whatsapp.com"'
hl.exec_cmd 'station-launch-or-focus ^chrome-discord.com__channels_@me-Default$ "station-launch-webapp https://discord.com/channels/@me"'
end
end, 'Toggle comms workspace')
-- Cycle through applications on active workspace -- Cycle through applications on active workspace
hl.bind("SUPER + TAB", hl.dsp.window.cycle_next({ next = true }), { description = "Cycle to next window" }) bind('SUPER + TAB', hl.dsp.window.cycle_next { next = true }, 'Cycle to next window')
hl.bind("SUPER + SHIFT + TAB", hl.dsp.window.cycle_next({ next = false }), { description = "Cycle to prev window" }) bind('SUPER + SHIFT + TAB', hl.dsp.window.cycle_next { next = false }, 'Cycle to prev window')
-- hl.bind("SUPER + TAB", /*bringactivetotop*/, { description = "Reveal active window on top" }) -- bind("SUPER + TAB", /*bringactivetotop*/, "Reveal active window on top")
-- hl.bind("SUPER SHIFT + TAB", /*bringactivetotop*/, { description = "Reveal active window on top" }) -- bind("SUPER SHIFT + TAB", /*bringactivetotop*/, "Reveal active window on top")
-- Resize active window -- Resize active window
hl.bind("SUPER + code:20", hl.dsp.window.resize({ x = -100, y = 0 }), { description = "Expand window left" }) bind('SUPER + code:20', hl.dsp.window.resize { x = -100, y = 0 }, 'Expand window left')
hl.bind("SUPER + code:21", hl.dsp.window.resize({ x = 100, y = 0 }), { description = "Shrink window left" }) bind('SUPER + code:21', hl.dsp.window.resize { x = 100, y = 0 }, 'Shrink window left')
hl.bind("SUPER + SHIFT + code:20", hl.dsp.window.resize({ x = 0, y = -100 }), { description = "Shrink window up" }) bind('SUPER + SHIFT + code:20', hl.dsp.window.resize { x = 0, y = -100 }, 'Shrink window up')
hl.bind("SUPER + SHIFT + code:21", hl.dsp.window.resize({ x = 0, y = 100 }), { description = "Expand window down" }) bind('SUPER + SHIFT + code:21', hl.dsp.window.resize { x = 0, y = 100 }, 'Expand window down')
-- Move/resize windows with mainMod + LMB/RMB and dragging -- Move/resize windows with mainMod + LMB/RMB and dragging
hl.bind("SUPER + mouse:272", hl.dsp.window.drag(), { mouse = true, description = "Move window" }) bind('SUPER + mouse:272', hl.dsp.window.drag(), 'Move window', { mouse = true })
hl.bind("SUPER + mouse:273", hl.dsp.window.resize(), { mouse = true, description = "Move window" }) bind('SUPER + mouse:273', hl.dsp.window.resize(), 'Resize window', { mouse = true })
-- Toggle current window to be a group or stack in other window manager lingo -- Toggle current window to be a group or stack in other window manager lingo
hl.bind("SUPER + G", hl.dsp.group.toggle()) bind('SUPER + G', hl.dsp.group.toggle(), 'Toggle window to a group')
-- Move to the next tab group window -- Move to the next tab group window
hl.bind("SUPER + bracketleft", hl.dsp.group.prev()) bind('SUPER + bracketleft', hl.dsp.group.prev(), 'Move to previous window in the group')
hl.bind("SUPER + bracketright", hl.dsp.group.next()) bind('SUPER + bracketright', hl.dsp.group.next(), 'Move to next window in the group')
-- Move current window in the tab group -- Move current window in the tab group
hl.bind("SUPER + SHIFT + bracketleft", hl.dsp.group.move_window({ direction = "left" })) bind('SUPER + SHIFT + bracketleft', hl.dsp.group.move_window { direction = 'left' }, 'Move window left in group')
hl.bind("SUPER + SHIFT + bracketright", hl.dsp.group.move_window({ direction = "right" })) bind('SUPER + SHIFT + bracketright', hl.dsp.group.move_window { direction = 'right' }, 'Move window right in group')
-- Move current window out of the tab group -- Move current window out of the tab group
hl.bind("SUPER + CTRL + bracketleft", hl.dsp.window.move({ out_of_group = "left" })) bind('SUPER + CTRL + bracketleft', hl.dsp.window.move { out_of_group = 'left' }, 'Move window out of group left')
hl.bind("SUPER + CTRL + bracketright", hl.dsp.window.move({ out_of_group = "right" })) bind('SUPER + CTRL + bracketright', hl.dsp.window.move { out_of_group = 'right' }, 'Move window out of group right')
-- Move current window into an existing tab group or create a new one -- Move current window into an existing tab group or create a new one
hl.bind("SUPER + SHIFT + CTRL + bracketleft", hl.dsp.window.move({ into_or_create_group = "left" })) bind('SUPER + SHIFT + CTRL + bracketleft', hl.dsp.window.move { into_or_create_group = 'left' }, 'Move window into group left')
hl.bind("SUPER + SHIFT + CTRL + bracketright", hl.dsp.window.move({ into_or_create_group = "right" })) bind('SUPER + SHIFT + CTRL + bracketright', hl.dsp.window.move { into_or_create_group = 'right' }, 'Move window into group right')
-- ========================== -- ==========================
-- Utilities -- Utilities
-- ========================== -- ==========================
-- Menus -- Menus
hl.bind("SUPER + SPACE", hl.dsp.exec_cmd("station-launch-walker"), { description = "Launch apps" }) bind('SUPER + SPACE', exec 'station-launch-walker', 'Launch apps')
hl.bind("SUPER + CTRL + E", hl.dsp.exec_cmd("station-launch-walker -m symbols"), { description = "Emoji picker" }) bind('SUPER + CTRL + E', exec 'station-launch-walker -m symbols', 'Emoji picker')
hl.bind("SUPER + CTRL + C", hl.dsp.exec_cmd("station-menu capture"), { description = "Capture menu" }) bind('SUPER + CTRL + C', exec 'station-menu capture', 'Capture menu')
hl.bind("SUPER + CTRL + O", hl.dsp.exec_cmd("station-menu toggle"), { description = "Toggle menu" }) bind('SUPER + CTRL + O', exec 'station-menu toggle', 'Toggle menu')
hl.bind("SUPER + ALT + SPACE", hl.dsp.exec_cmd("station-menu"), { description = "Station menu" }) bind('SUPER + ALT + SPACE', exec 'station-menu', 'Station menu')
hl.bind("SUPER + ESCAPE", hl.dsp.exec_cmd("station-menu system"), { description = "System menu" }) bind('SUPER + ESCAPE', exec 'station-menu system', 'System menu')
hl.bind("F86PowerOff", hl.dsp.exec_cmd("station-menu system"), { locked = true, description = "Power menu" }) bindl('XF86PowerOff', exec 'station-menu system', 'Power menu')
hl.bind("SUPER + K", hl.dsp.exec_cmd("station-menu-keybindings"), { description = "Show key bindings" }) bind('SUPER + K', exec 'station-menu-keybindings', 'Show key bindings')
hl.bind("XF86Calculator", hl.dsp.exec_cmd("gnome-calculator"), { description = "Calculator" }) bind('XF86Calculator', exec 'gnome-calculator', 'Calculator')
-- Aesthetics -- Aesthetics
hl.bind("SUPER + SHIFT + SPACE", hl.dsp.exec_cmd("station-toggle-waybar"), { description = "Toggle top bar" }) bind('SUPER + SHIFT + SPACE', exec 'station-toggle-waybar', 'Toggle top bar')
hl.bind("SUPER + CTRL + SPACE", hl.dsp.exec_cmd("station-menu background"), { description = "Theme background menu" }) bind('SUPER + CTRL + SPACE', exec 'station-menu background', 'Theme background menu')
-- hl.bind("SUPER SHIFT CTRL + SPACE", hl.dsp.exec_cmd("station-menu theme"), { description = "Theme menu" }) -- bind("SUPER SHIFT CTRL + SPACE", exec("station-menu theme"), "Theme menu")
hl.bind( bind('SUPER + BACKSPACE', exec 'hyprctl dispatch setprop "address:$(hyprctl activewindow -j | jq -r \'.address\')" opaque toggle', 'Toggle window transparency')
"SUPER + BACKSPACE", bind('SUPER + SHIFT + BACKSPACE', function()
hl.dsp.exec_cmd("hyprctl dispatch setprop \"address:$(hyprctl activewindow -j | jq -r '.address')\" opaque toggle"), local gaps = hl.get_config 'general.gaps_out'
{ description = "Toggle window transparency" } if gaps.top == 0 then
) hl.config {
hl.bind( general = {
"SUPER + SHIFT + BACKSPACE", gaps_out = 10,
hl.dsp.exec_cmd("station-hyprland-window-gaps-toggle"), gaps_in = 5,
{ description = "Toggle window gaps" } border_size = 2,
) },
hl.bind( }
"SUPER + CTRL + Backspace", else
hl.dsp.exec_cmd("station-hyprland-window-single-square-aspect-toggle"), hl.config {
{ description = "Toggle single-window square aspect" } general = {
) gaps_out = 0,
gaps_in = 0,
border_size = 0,
},
}
end
end, 'Toggle window gaps')
-- Notifications -- Notifications
hl.bind("SUPER + COMMA", hl.dsp.exec_cmd("makoctl dismiss"), { description = "Dismiss last notification" }) bind('SUPER + COMMA', exec 'makoctl dismiss', 'Dismiss last notification')
hl.bind( bind('SUPER + SHIFT + COMMA', exec 'makoctl dismiss --all', 'Dismiss all notifications')
"SUPER + SHIFT + COMMA", bind('SUPER + CTRL + COMMA', exec 'station-toggle-notification-silencing', 'Toggle silencing notifications')
hl.dsp.exec_cmd("makoctl dismiss --all"), bind('SUPER + ALT + COMMA', exec 'makoctl invoke', 'Invoke last notification')
{ description = "Dismiss all notifications" } bind('SUPER + SHIFT + ALT + COMMA', exec 'makoctl restore', 'Restore last notification')
)
hl.bind(
"SUPER + CTRL + COMMA",
hl.dsp.exec_cmd("station-toggle-notification-silencing"),
{ description = "Toggle silencing notifications" }
)
hl.bind("SUPER + ALT + COMMA", hl.dsp.exec_cmd("makoctl invoke"), { description = "Invoke last notification" })
hl.bind(
"SUPER + SHIFT + ALT + COMMA",
hl.dsp.exec_cmd("makoctl restore"),
{ description = "Restore last notification" }
)
-- Toggles -- Toggles
hl.bind("SUPER + CTRL + I", hl.dsp.exec_cmd("station-toggle-idle"), { description = "Toggle locking on idle" }) bind('SUPER + CTRL + I', exec 'station-toggle-idle', 'Toggle locking on idle')
hl.bind("SUPER + CTRL + N", hl.dsp.exec_cmd("station-toggle-nightlight"), { description = "Toggle nightlight" }) bind('SUPER + CTRL + N', exec 'station-toggle-nightlight', 'Toggle nightlight')
-- Captures -- Captures
hl.bind("PRINT", hl.dsp.exec_cmd("station-cmd-screenshot"), { description = "Screenshot" }) bind('PRINT', exec 'station-cmd-screenshot', 'Screenshot')
hl.bind("ALT + PRINT", hl.dsp.exec_cmd("station-menu screenrecord"), { description = "Screenrecording" }) bind('ALT + PRINT', exec 'station-menu screenrecord', 'Screenrecording')
hl.bind("SUPER + PRINT", hl.dsp.exec_cmd("pkill hyprpicker || hyprpicker -a"), { description = "Color picker" }) bind('SUPER + PRINT', exec 'pkill hyprpicker || hyprpicker -a', 'Color picker')
-- File sharing -- File sharing
-- hl.bind("SUPER CTRL + S", hl.dsp.exec_cmd("station-menu share"), { description = "Share" }) -- bind("SUPER CTRL + S", exec("station-menu share"), "Share")
-- Waybar-less information -- Waybar-less information
hl.bind( bind('SUPER + CTRL + ALT + T', exec 'notify " $(date +"%A %H:%M — %d %B W%V %Y")"', 'Show time')
"SUPER + CTRL ALT + T", bind('SUPER + CTRL + ALT + B', exec 'notify-send "󰁹 Battery is at $(station-battery-remaining)%"', 'Show battery remaining')
hl.dsp.exec_cmd('notify-send " $(date +"%A %H:%M — %d %B W%V %Y")"'), bind('SUPER + CTRL + ALT + W', function()
{ description = "Show time" } local window = hl.get_active_window()
) notify('Window: ' .. window.title .. '\nClass: ' .. window.class)
hl.bind( end, 'Show active window name and class')
"SUPER + CTRL ALT + B",
hl.dsp.exec_cmd('notify-send "󰁹 Battery is at $(station-battery-remaining)%"'),
{ description = "Show battery remaining" }
)
hl.bind(
"SUPER + CTRL ALT + W",
hl.dsp.exec_cmd('notify-send "$(hyprctl activewindow -j | jq -r \'"Window: (.title)\nClass: (.class)"\')"'),
{ description = "Show active window name and class" }
)
-- Control panels -- Control panels
hl.bind("SUPER + CTRL + A", hl.dsp.exec_cmd("station-launch-audio"), { description = "Audio controls" }) bind('SUPER + CTRL + A', exec 'station-launch-audio', 'Audio controls')
hl.bind("SUPER + CTRL + B", hl.dsp.exec_cmd("station-launch-bluetooth"), { description = "Bluetooth controls" }) bind('SUPER + CTRL + B', exec 'station-launch-bluetooth', 'Bluetooth controls')
hl.bind("SUPER + CTRL + W", hl.dsp.exec_cmd("station-launch-wifi"), { description = "Wifi controls" }) bind('SUPER + CTRL + W', exec 'station-launch-wifi', 'Wifi controls')
hl.bind("SUPER + CTRL + T", hl.dsp.exec_cmd("station-launch-tui btop"), { description = "Activity" }) bind('SUPER + CTRL + T', exec 'station-launch-tui btop', 'Activity')
-- Dictation -- Dictation
-- hl.bind("SUPER CTRL + X", hl.dsp.exec_cmd("voxtype record toggle"), { description = "Toggle dictation" }) -- bind("SUPER CTRL + X", exec("voxtype record toggle"), "Toggle dictation")
-- Zoom -- Zoom
hl.bind( bind('SUPER + CTRL + Z', exec "hyprctl keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor -j | jq '.float + 1')", 'Zoom in')
"SUPER + CTRL + Z", bind('SUPER + CTRL + ALT + Z', exec 'hyprctl keyword cursor:zoom_factor 1', 'Reset zoom')
hl.dsp.exec_cmd("hyprctl keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor -j | jq '.float + 1')"),
{ description = "Zoom in" }
)
hl.bind("SUPER + CTRL ALT + Z", hl.dsp.exec_cmd("hyprctl keyword cursor:zoom_factor 1"), { description = "Reset zoom" })
-- Lock system -- Lock system
-- hl.bind("SUPER CTRL + L", hl.dsp.exec_cmd("station-lock-screen"), { description = "Lock system" }) -- bind("SUPER CTRL + L", exec("station-lock-screen"), "Lock system")
-- ========================== -- ==========================
-- Applications -- Applications
-- ========================== -- ==========================
hl.bind("SUPER + RETURN", hl.dsp.exec_cmd("uwsm-app -- xdg-terminal-exec"), { description = "Terminal" }) bind('SUPER + RETURN', exec 'uwsm-app -- xdg-terminal-exec', 'Terminal')
hl.bind( bind('SUPER + ALT + RETURN', exec 'uwsm-app -- xdg-terminal-exec --dir="$(station-cmd-terminal-cwd)" tmux new', 'Tmux')
"SUPER + ALT + RETURN", bind('SUPER + SHIFT + F', exec 'uwsm-app -- nautilus --new-window', 'File manager')
hl.dsp.exec_cmd('uwsm-app -- xdg-terminal-exec --dir="$(station-cmd-terminal-cwd)" tmux new'), bind('SUPER + ALT + SHIFT + F', exec 'uwsm-app -- nautilus --new-window "$(station-cmd-terminal-cwd)"', 'File manager (cwd)')
{ description = "Tmux" } bind('SUPER + SHIFT + B', exec 'station-launch-browser', 'Browser')
) bind('SUPER + SHIFT + ALT + B', exec 'station-launch-browser --private', 'Browser (private)')
hl.bind("SUPER + SHIFT + F", hl.dsp.exec_cmd("uwsm-app -- nautilus --new-window"), { description = "File manager" }) bind('SUPER + SHIFT + S', exec 'station-launch-or-focus spotify', 'Spotify')
hl.bind( bind('SUPER + SHIFT + M', exec 'station-launch-or-focus psysonic', 'Music')
"SUPER + ALT SHIFT + F", -- bind("SUPER SHIFT + D", exec("station-launch-tui lazydocker"), "Docker")
hl.dsp.exec_cmd('uwsm-app -- nautilus --new-window "$(station-cmd-terminal-cwd)"'), bind('SUPER + SHIFT + G', exec 'station-launch-or-focus ^signal$ "uwsm-app -- signal-desktop"', 'Signal')
{ description = "File manager (cwd)" } bind('SUPER + SHIFT + D', exec 'station-launch-or-focus ^chrome-discord.com__channels_@me-Default$ "uwsm-app -- discord"', 'Discord')
) bind('SUPER + SHIFT + W', exec 'station-launch-or-focus ^chrome-web.whatsapp.com__-Default$ "uwsm-app -- whatsapp"', 'Whatsapp')
hl.bind( bind('SUPER + SHIFT + P', exec 'station-launch-or-focus ^superProductivity$ "uwsm-app -- super-productivity"', 'Super Productivity')
"SUPER + SHIFT + B", bind('SUPER + SHIFT + N', exec 'uwsm-app -- xdg-terminal-exec --app-id=org.station.notes nvim ~/Tower/Documents/Notes', 'Editor')
hl.dsp.exec_cmd("/home/chris/.local/bin/station-launch-browser"), -- bind("SUPER SHIFT + W", exec("uwsm-app -- typora --enable-wayland-ime"), "Typora")
{ description = "Browser" } bind('SUPER + SHIFT + SLASH', exec 'Enpass showassistant', 'Passwords')
) bind('SUPER + SHIFT + E', exec 'station-launch-or-focus mailspring', 'Email')
hl.bind(
"SUPER + SHIFT ALT + B",
hl.dsp.exec_cmd("station-launch-browser --private"),
{ description = "Browser (private)" }
)
hl.bind("SUPER + SHIFT + M", hl.dsp.exec_cmd("station-launch-or-focus spotify"), { description = "Music" })
hl.bind("SUPER + SHIFT + N", hl.dsp.exec_cmd("station-launch-editor"), { description = "Editor" })
-- hl.bind("SUPER SHIFT + D", hl.dsp.exec_cmd("station-launch-tui lazydocker"), { description = "Docker" })
hl.bind(
"SUPER + SHIFT + G",
hl.dsp.exec_cmd('station-launch-or-focus ^signal$ "uwsm-app -- signal-desktop"'),
{ description = "Signal" }
)
hl.bind(
"SUPER + SHIFT + O",
hl.dsp.exec_cmd('station-launch-or-focus ^obsidian$ "uwsm-app -- obsidian -disable-gpu --enable-wayland-ime"'),
{ description = "Obsidian" }
)
-- hl.bind("SUPER SHIFT + W", hl.dsp.exec_cmd("uwsm-app -- typora --enable-wayland-ime"), { description = "Typora" })
hl.bind("SUPER + SHIFT + SLASH", hl.dsp.exec_cmd("Enpass showassistant"), { description = "Passwords" })
hl.bind("SUPER + SHIFT + E", hl.dsp.exec_cmd("station-launch-or-focus mailspring"), { description = "Email" })
hl.bind( bind('SUPER + SHIFT + A', exec 'station-launch-webapp "https://gemini.google.com/app"', 'ChatGPT')
"SUPER + SHIFT + A", bind('SUPER + SHIFT + C', exec 'station-launch-webapp "https://tower.scarif.space/apps/calendar"', 'Calendar')
hl.dsp.exec_cmd('station-launch-webapp "https://gemini.google.com/app"'), bind('SUPER + SHIFT + Y', exec 'station-launch-or-focus-webapp "YouTube" "https://youtube.com/"', 'YouTube')
{ description = "ChatGPT" } bind('SUPER + SHIFT + ALT + G', exec 'station-launch-or-focus-webapp WhatsApp "https://web.whatsapp.com/"', 'WhatsApp')
) bind('SUPER + SHIFT + CTRL + G', exec 'station-launch-or-focus-webapp "Google Maps" "https://maps.google.com"', 'Google Maps')
hl.bind( -- bind("SUPER SHIFT + P", exec("station-launch-or-focus-webapp "Google Photos" "https://photos.google.com/""), "Google Photos")
"SUPER + SHIFT + C", -- bind("SUPER SHIFT + X", exec("station-launch-webapp "https://x.com/""), "X")
hl.dsp.exec_cmd('station-launch-webapp "https://tower.scarif.space/apps/calendar"'), -- bind("SUPER SHIFT ALT + X", exec("station-launch-webapp "https://x.com/compose/post""), "X Post")
{ description = "Calendar" }
)
hl.bind(
"SUPER + SHIFT + Y",
hl.dsp.exec_cmd('station-launch-or-focus-webapp "YouTube" "https://youtube.com/"'),
{ description = "YouTube" }
)
hl.bind(
"SUPER + SHIFT + ALT + G",
hl.dsp.exec_cmd('station-launch-or-focus-webapp WhatsApp "https://web.whatsapp.com/"'),
{ description = "WhatsApp" }
)
hl.bind(
"SUPER + SHIFT + CTRL + G",
hl.dsp.exec_cmd('station-launch-or-focus-webapp "Google Maps" "https://maps.google.com"'),
{ description = "Google Maps" }
)
-- hl.bind("SUPER SHIFT + P", hl.dsp.exec_cmd("station-launch-or-focus-webapp "Google Photos" "https://photos.google.com/""), { description = "Google Photos" })
-- hl.bind("SUPER SHIFT + X", hl.dsp.exec_cmd("station-launch-webapp "https://x.com/""), { description = "X" })
-- hl.bind("SUPER SHIFT ALT + X", hl.dsp.exec_cmd("station-launch-webapp "https://x.com/compose/post""), { description = "X Post" })
-- Add extra bindings -- Add extra bindings
hl.bind("SUPER + SHIFT + R", hl.dsp.exec_cmd("ghostty -e ssh scarif"), { description = "SSH to scarif" }) bind('SUPER + SHIFT + R', exec 'ghostty -e ssh scarif', 'SSH to scarif')
-29
View File
@@ -1,29 +0,0 @@
# Cursor size
env = XCURSOR_SIZE,24
env = HYPRCURSOR_SIZE,24
# Force all apps to use Wayland
env = GDK_BACKEND,wayland,x11,*
env = QT_QPA_PLATFORM,wayland;xcb
env = QT_STYLE_OVERRIDE,kvantum
env = SDL_VIDEODRIVER,wayland,x11
env = MOZ_ENABLE_WAYLAND,1
env = ELECTRON_OZONE_PLATFORM_HINT,wayland
env = OZONE_PLATFORM,wayland
env = XDG_SESSION_TYPE,wayland
# Allow better support for screen sharing (Google Meet, Discord, etc)
env = XDG_CURRENT_DESKTOP,Hyprland
env = XDG_SESSION_DESKTOP,Hyprland
xwayland {
force_zero_scaling = true
}
# Use XCompose file
env = XCOMPOSEFILE,~/.config/xcompose
# Don't show update on first launch
ecosystem {
no_update_news = true
}
+14 -14
View File
@@ -1,28 +1,28 @@
general { general {
lock_cmd = station-lock-screen # lock screen lock_cmd = pidof hyprlock || hyprlock --grace 10 # lock screen
before_sleep_cmd = loginctl lock-session # lock before suspend. # before_sleep_cmd = loginctl lock-session # lock before suspend.
after_sleep_cmd = sleep 1 && hyprctl dispatch dpms on # delay for PAM readiness, then turn on display. # after_sleep_cmd = sleep 1 && hyprctl dispatch dpms on # delay for PAM readiness, then turn on display.
inhibit_sleep = 3 # wait until screen is locked inhibit_sleep = 3 # wait until screen is locked
} }
listener { listener {
timeout = 300 # 5min timeout = 300 # 5 minutes
on-timeout = pidof hyprlock || station-launch-screensaver # start screensaver (if we haven't locked already) on-timeout = notify-send "You are idle and will be locked soon!" # command to run when timeout has passed.
on-resume = notify-send "Welcome back!" # command to run when activity is detected after timeout has fired.
} }
listener { # listener {
timeout = 301 # 5min # timeout = 20 # 6 minutes
on-timeout = loginctl lock-session # lock screen when timeout has passed # on-timeout = loginctl lock-session # lock screen when timeout has passed
} # }
listener { listener {
timeout = 330 # 5.5min timeout = 330 # 5.5min
on-timeout = brightnessctl -sd '*::kbd_backlight' set 0 # save state and turn off keyboard backlight on-timeout = hyprctl dispatch 'hl.dsp.dpms({ action = "disable" })' # screen off when timeout has passed
on-resume = brightnessctl -rd '*::kbd_backlight' # restore keyboard backlight on-resume = hyprctl dispatch 'hl.dsp.dpms({ action = "enable" })' && brightnessctl -r # screen on when activity is detected after timeout has fired.
} }
listener { listener {
timeout = 330 # 5.5min timeout = 360 # 6 minutes
on-timeout = station-system-suspend # suspend when timeout has passed on-timeout = systemctl suspend # suspend pc
on-resume = hyprctl dispatch dpms on && brightnessctl -r # screen on when activity is detected
} }
+1 -1
View File
@@ -1,8 +1,8 @@
require("autostart") require("autostart")
require("workspaces")
require("bindings") require("bindings")
require("envs") require("envs")
require("looknfeel") require("looknfeel")
require("input") require("input")
require("windows") require("windows")
require("monitors") require("monitors")
require("workspaces")
-71
View File
@@ -1,71 +0,0 @@
# https://wiki.hyprland.org/Configuring/Variables/#input
input {
# Use multiple keyboard layouts and switch between them with Left Alt + Right Alt
kb_layout = gb,ro
# Use a specific keyboard variant if needed (e.g. intl for international keyboards)
# kb_variant = intl
# kb_model =
kb_options = compose:caps
# kb_rules =
# Change speed of keyboard repeat
repeat_rate = 40
repeat_delay = 600
# Start with numlock on by default
numlock_by_default = true
follow_mouse = 1
# Increase sensitivity for mouse/trackpad (default: 0)
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
# Turn off mouse acceleration (default: false)
# force_no_accel = true
# Use natural (inverse) scrolling
# natural_scroll = true
# Use two-finger clicks for right-click instead of lower-right corner
# clickfinger_behavior = true
# Control the speed of your scrolling
scroll_factor = 0.4
# Enable the touchpad while typing
# disable_while_typing = false
# Left-click-and-drag with three fingers
# drag_3fg = 1
touchpad {
# Use natural (inverse) scrolling
natural_scroll = false
# Use two-finger clicks for right-click instead of lower-right corner
# clickfinger_behavior = true
# Control the speed of your scrolling
scroll_factor = 0.4
# Enable the touchpad while typing
# disable_while_typing = false
# Left-click-and-drag with three fingers
# drag_3fg = 1
}
}
misc {
key_press_enables_dpms = true # key press will trigger wake
mouse_move_enables_dpms = true # mouse move will trigger wake
}
# Scroll nicely in the terminal
windowrule = match:class (Alacritty|kitty), scroll_touchpad 1.5
windowrule = match:class com.mitchellh.ghostty, scroll_touchpad 0.2
# Enable touchpad gestures for changing workspaces
# See https://wiki.hyprland.org/Configuring/Gestures/
# gesture = 3, horizontal, workspace
+16 -8
View File
@@ -64,19 +64,12 @@ hl.config({
}) })
-- Scroll nicely in the terminal -- Scroll nicely in the terminal
hl.window_rule({
name = "Scroll nicely in the terminal",
match = {
class = "(Alacritty|kitty)",
},
scroll_touchpad = 1.5,
})
hl.window_rule({ hl.window_rule({
name = "Scroll nicely in the terminal", name = "Scroll nicely in the terminal",
match = { match = {
class = "com.mitchellh.ghostty", class = "com.mitchellh.ghostty",
}, },
scroll_touchpad = 0.2, scroll_mouse = 1.5,
}) })
-- Enable touchpad gestures for changing workspaces -- Enable touchpad gestures for changing workspaces
@@ -86,3 +79,18 @@ hl.window_rule({
-- direction = "horizontal", -- direction = "horizontal",
-- action = "workspace", -- action = "workspace",
-- }) -- })
-- for _, tablet in ipairs({ "wacom-intuos-pro-s-pen", "wacom-intuos-pro-s-(wl)-pen" }) do
-- local monitor_id = "DP-1"
-- local monitor = hl.get_monitor(monitor_id)
-- local ratio = monitor.width / monitor.height
-- local tablet_size = { width = 157.48, height = 98.425 }
-- local new_tablet_height = tablet_size.width / ratio
--
-- hl.device({
-- name = tablet,
-- output = monitor_id,
-- active_area_size = { tablet_size.width, new_tablet_height },
-- active_area_position = { 0.0, (tablet_size.height - new_tablet_height) / 2 },
-- })
-- end
-162
View File
@@ -1,162 +0,0 @@
# Variables
# $activeBorderColor = rgba(33ccffee) rgba(00ff99ee) 45deg
# $inactiveBorderColor = rgba(595959aa)
source = ~/.cache/wal/colors-hyprland.conf
$activeBorderColor = $color14
$inactiveBorderColor = $background
# https://wiki.hyprland.org/Configuring/Variables/#general
general {
gaps_in = 5
gaps_out = 10
border_size = 2
# https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
col.active_border = $activeBorderColor
col.inactive_border = $inactiveBorderColor
# Set to true enable resizing windows by clicking and dragging on borders and gaps
resize_on_border = false
# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
allow_tearing = false
# layout = scrolling # Change to niri-like side-scrolling layout
layout = dwindle
}
# https://wiki.hyprland.org/Configuring/Variables/#decoration
decoration {
# rounding = 8 # Use round window corners
rounding = 0
# Dim unfocused windows (0.0 = no dim, 1.0 = fully dimmed)
# dim_inactive = true
# dim_strength = 0.15
shadow {
enabled = true
range = 2
render_power = 3
color = rgba(1a1a1aee)
}
# https://wiki.hyprland.org/Configuring/Variables/#blur
blur {
enabled = true
size = 2
passes = 2
special = true
brightness = 0.60
contrast = 0.75
}
}
# https://wiki.hypr.land/Configuring/Variables/#group
group {
col.border_active = $activeBorderColor
col.border_inactive = $inactiveBorderColor
# col.border_locked_active = -1
# col.border_locked_inactive = -1
groupbar {
font_size = 12
font_family = monospace
font_weight_active = ultraheavy
font_weight_inactive = normal
indicator_height = 0
indicator_gap = 5
height = 22
gaps_in = 5
gaps_out = 0
text_color = rgb(ffffff)
text_color_inactive = rgba(ffffff90)
col.active = rgba(00000040)
col.inactive = rgba(00000020)
gradients = true
gradient_rounding = 0
gradient_round_only_edges = false
}
}
# https://wiki.hyprland.org/Configuring/Variables/#animations
animations {
# enabled = no # Disable all animations
enabled = yes, please :)
# Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
bezier = easeOutQuint,0.23,1,0.32,1
bezier = easeInOutCubic,0.65,0.05,0.36,1
bezier = linear,0,0,1,1
bezier = almostLinear,0.5,0.5,0.75,1.0
bezier = quick,0.15,0,0.1,1
animation = global, 1, 10, default
animation = border, 1, 5.39, easeOutQuint
animation = windows, 1, 4.79, easeOutQuint
animation = windowsIn, 1, 4.1, easeOutQuint, popin 87%
animation = windowsOut, 1, 1.49, linear, popin 87%
animation = fadeIn, 1, 1.73, almostLinear
animation = fadeOut, 1, 1.46, almostLinear
animation = fade, 1, 3.03, quick
animation = layers, 1, 3.81, easeOutQuint
animation = layersIn, 1, 4, easeOutQuint, fade
animation = layersOut, 1, 1.5, linear, fade
animation = fadeLayersIn, 1, 1.79, almostLinear
animation = fadeLayersOut, 1, 1.39, almostLinear
animation = workspaces, 0, 0, ease
}
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
dwindle {
# pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
preserve_split = true # You probably want this
force_split = 2 # Always split on the right
}
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
master {
new_status = master
}
# https://wiki.hyprland.org/Configuring/Variables/#misc
misc {
disable_hyprland_logo = true
disable_splash_rendering = true
focus_on_activate = true
anr_missed_pings = 3
on_focus_under_fullscreen = 1
disable_watchdog_warning = true
}
# https://wiki.hypr.land/Configuring/Variables/#cursor
cursor {
hide_on_key_press = true
warp_on_change_workspace = 1
}
# Auto toggle scratchpad on switching workspace from scratchpad
binds {
hide_special_on_workspace_change = true
}
# https://wiki.hypr.land/Configuring/Variables/#layout
layout {
# Avoid overly wide single-window layouts on wide screens
# single_window_aspect_ratio = 1 1
}
# Style Gum confirm to match terminal theme
env = GUM_CONFIRM_PROMPT_FOREGROUND,6 # Cyan
env = GUM_CONFIRM_SELECTED_FOREGROUND,0 # Black
env = GUM_CONFIRM_SELECTED_BACKGROUND,2 # Green
env = GUM_CONFIRM_UNSELECTED_FOREGROUND,7 # White
env = GUM_CONFIRM_UNSELECTED_BACKGROUND,8 # Dark grey
+2 -2
View File
@@ -1,6 +1,6 @@
-- Variables -- Variables
local colors = dofile(os.getenv("HOME") .. "/.cache/wal/colors.lua") local colors = dofile(os.getenv("HOME") .. "/.cache/wal/colors-hypr.lua")
local activeBorderColor = colors.color14 local activeBorderColor = colors.color14
local inactiveBorderColor = colors.background local inactiveBorderColor = colors.background
@@ -26,7 +26,7 @@ hl.config({
allow_tearing = false, allow_tearing = false,
-- layout = scrolling, # Change to niri-like side-scrolling layout -- layout = scrolling, # Change to niri-like side-scrolling layout
layout = dwindle, layout = "dwindle",
}, },
-- https://wiki.hyprland.org/Configuring/Variables/#decoration -- https://wiki.hyprland.org/Configuring/Variables/#decoration
-25
View File
@@ -1,25 +0,0 @@
# See https://wiki.hyprland.org/Configuring/Monitors/
# List current monitors and resolutions possible: hyprctl monitors
# Format: monitor = [port], resolution, position, scale
# Optimized for retina-class 2x displays, like 13" 2.8K, 27" 5K, 32" 6K.
# monitor=eDP-1,3840x2160,0x0,2
monitor=desc:Samsung Electric Company LU28R55 HNMN500475,3840x2160,auto-left,1.5
monitor=desc:Samsung Electric Company LU28R55 HNMN500462,3840x2160,auto-right,1.5
# monitor=HDMI-A-1,preferred,auto,auto
# Good compromise for 27" or 32" 4K monitors (but fractional!)
# env = GDK_SCALE,1.75
# monitor=,preferred,auto,1.6
# Straight 1x setup for low-resolution displays like 1080p or 1440p
# Or for ultrawide monitors like 34" 3440x1440 or 49" 5120x1440
# env = GDK_SCALE,1
# monitor=,preferred,auto,1
# Portrait/rotated secondary monitor (transform: 1 = 90°, 3 = 270°)
# monitor = DP-2, preferred, auto, 1, transform, 1
# Example for Framework 13 w/ 6K XDR Apple display
# monitor = DP-5, 6016x3384@60, auto, 2
# monitor = eDP-1, 2880x1920@120, auto, 2
-40
View File
@@ -1,14 +1,6 @@
-- See https://wiki.hyprland.org/Configuring/Monitors/ -- See https://wiki.hyprland.org/Configuring/Monitors/
-- List current monitors and resolutions possible: hyprctl monitors -- List current monitors and resolutions possible: hyprctl monitors
-- Format: monitor = [port], resolution, position, scale
-- Optimized for retina-class 2x displays, like 13" 2.8K, 27" 5K, 32" 6K.
-- hl.monitor({
-- output = "eDP-1",
-- mode = "3840x2160",
-- position = "0x0",
-- scale = 2,
-- })
hl.monitor({ hl.monitor({
output = "desc:Samsung Electric Company LU28R55 HNMN500475", output = "desc:Samsung Electric Company LU28R55 HNMN500475",
mode = "3840x2160", mode = "3840x2160",
@@ -21,35 +13,3 @@ hl.monitor({
position = "auto-right", position = "auto-right",
scale = 1.5, scale = 1.5,
}) })
-- hl.monitor({
-- output = "HDMI-A-1",
-- mode = "preferred",
-- position = "auto",
-- scale = "auto",
-- })
-- Good compromise for 27" or 32" 4K monitors (but fractional!)
-- hl.env("GDK_SCALE", 1.75)
-- hl.monitor({
-- mode = "preferred",
-- position = "auto",
-- scale = 1.6,
-- })
-- Straight 1x setup for low-resolution displays like 1080p or 1440p
-- Or for ultrawide monitors like 34" 3440x1440 or 49" 5120x1440
-- hl.env("GDK_SCALE", 1)
-- hl.monitor({
-- mode = "preferred",
-- position = "auto",
-- scale = 1,
-- })
-- Portrait/rotated secondary monitor (transform: 1 = 90°, 3 = 270°)
-- hl.monitor({
-- output = "DP-2",
-- mode = "preferred",
-- position = "auto",
-- scale = 1,
-- transform = 1,
-- })
-15
View File
@@ -1,15 +0,0 @@
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
# Hyprland 0.53+ syntax
windowrule = suppress_event maximize, match:class .*
# Tag all windows for default opacity (apps can override with -default-opacity tag)
windowrule = tag +default-opacity, match:class .*
# Fix some dragging issues with XWayland
windowrule = no_focus on, match:class ^$, match:title ^$, match:xwayland 1, match:float 1, match:fullscreen 0, match:pin 0
# App-specific tweaks (may remove default-opacity tag)
source = ~/.config/hypr/apps.conf
# Apply default opacity after apps have had a chance to opt out
windowrule = opacity 0.97 0.9, match:tag default-opacity
+1 -8
View File
@@ -1,11 +1,4 @@
-- See https://wiki.hyprland.org/Configuring/Window-Rules/ for more -- See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
-- Hyprland 0.53+ syntax
hl.window_rule({
name = "suppress-maximise-events",
match = { class = ".*" },
supress_event = "maximize",
})
-- Tag all windows for default opacity (apps can override with -default-opacity tag) -- Tag all windows for default opacity (apps can override with -default-opacity tag)
hl.window_rule({ hl.window_rule({
name = "default-opacity", name = "default-opacity",
@@ -34,5 +27,5 @@ require("apps")
hl.window_rule({ hl.window_rule({
name = "apply-opacity", name = "apply-opacity",
match = { tag = "default-opacity" }, match = { tag = "default-opacity" },
opacity = "0.97, 0.9", opacity = "0.97 0.9",
}) })
-33
View File
@@ -1,33 +0,0 @@
workspace = 1, monitor:DP-1
workspace = 2, monitor:DP-2
workspace = 3, monitor:DP-1
workspace = 4, monitor:DP-2
workspace = 5, monitor:DP-1
workspace = 6, monitor:DP-2
workspace = 7, monitor:DP-1
workspace = 8, monitor:DP-2
workspace = 9, monitor:DP-1
workspace = 10, monitor:DP-2
bindd = SUPER, code:10, Switch to Home, workspace, 2
bindd = SUPER, code:10, Switch to Home, workspace, 1
bindd = SUPER, code:11, Switch to Dev, workspace, 4
bindd = SUPER, code:11, Switch to Dev, workspace, 3
bindd = SUPER, code:12, Switch to Art, workspace, 6
bindd = SUPER, code:12, Switch to Art, workspace, 5
bindd = SUPER, code:13, Switch to Gaming, workspace, 8
bindd = SUPER, code:13, Switch to Gaming, workspace, 7
bindd = SUPER, code:14, Switch to Writing, workspace, 10
bindd = SUPER, code:14, Switch to Writing, workspace, 9
# Move active window to a workspace with SUPER + SHIFT + [1-9; 0]
bindd = SUPER SHIFT, code:10, Move window to workspace 1, exec, station-move-to-workspace 1
bindd = SUPER SHIFT, code:11, Move window to workspace 1, exec, station-move-to-workspace 2
bindd = SUPER SHIFT, code:12, Move window to workspace 1, exec, station-move-to-workspace 3
bindd = SUPER SHIFT, code:13, Move window to workspace 1, exec, station-move-to-workspace 4
bindd = SUPER SHIFT, code:14, Move window to workspace 1, exec, station-move-to-workspace 5
bindd = SUPER SHIFT, L, Move window to right monitor, movewindow, r
bindd = SUPER SHIFT, H, Move window to left monitor, movewindow, l
bindd = SUPER SHIFT, J, Move window to right monitor, movewindow, d
bindd = SUPER SHIFT, K, Move window to left monitor, movewindow, u
+55 -74
View File
@@ -1,78 +1,59 @@
local workspace_map = {
"Home",
"Dev",
"Art",
"Gaming",
"Writing",
}
local function setup_monitors()
local monitors = hl.get_monitors()
local monitor_count = #monitors
-- Move active window to a workspace with SUPER + SHIFT + [1-5]
for i = 1, #workspace_map do
for j = monitor_count, 1, -1 do
local monitor = monitors[j]
-- local workspace_id = "name:" .. workspace_map[i] .. "_" .. j
local workspace_id = (i - 1) * monitor_count + j
local workspace_name = workspace_map[i] .. "_" .. j
hl.workspace_rule({ hl.workspace_rule({
workspace = 1, -- workspace = (i - 1) * monitor_count + j,
monitor = "DP-1", -- default_name = workspace_name,
}) workspace = "name:" .. workspace_name,
hl.workspace_rule({ monitor = monitor.name,
workspace = 2, default = i == 1,
monitor = "DP-2",
})
hl.workspace_rule({
workspace = 3,
monitor = "DP-1",
})
hl.workspace_rule({
workspace = 4,
monitor = "DP-2",
})
hl.workspace_rule({
workspace = 5,
monitor = "DP-1",
})
hl.workspace_rule({
workspace = 6,
monitor = "DP-2",
})
hl.workspace_rule({
workspace = 7,
monitor = "DP-1",
})
hl.workspace_rule({
workspace = 8,
monitor = "DP-2",
})
hl.workspace_rule({
workspace = 9,
monitor = "DP-1",
})
hl.workspace_rule({
workspace = 10,
monitor = "DP-2",
}) })
hl.bind("SUPER + code:10", hl.dsp.focus({ workspace = 2 }), { description = "Switch to Home" }) hl.bind(
hl.bind("SUPER + code:10", hl.dsp.focus({ workspace = 1 }), { description = "Switch to Home" }) "SUPER + code:1" .. (i - 1),
hl.bind("SUPER + code:11", hl.dsp.focus({ workspace = 4 }), { description = "Switch to Dev" }) hl.dsp.focus({ workspace = "name:" .. workspace_name }),
hl.bind("SUPER + code:11", hl.dsp.focus({ workspace = 3 }), { description = "Switch to Dev" }) { description = "Switch to workspace " .. workspace_map[i] }
hl.bind("SUPER + code:12", hl.dsp.focus({ workspace = 6 }), { description = "Switch to Art" }) )
hl.bind("SUPER + code:12", hl.dsp.focus({ workspace = 5 }), { description = "Switch to Art" }) end
hl.bind("SUPER + code:13", hl.dsp.focus({ workspace = 8 }), { description = "Switch to Gaming" })
hl.bind("SUPER + code:13", hl.dsp.focus({ workspace = 7 }), { description = "Switch to Gaming" })
hl.bind("SUPER + code:14", hl.dsp.focus({ workspace = 10 }), { description = "Switch to Writing" })
hl.bind("SUPER + code:14", hl.dsp.focus({ workspace = 9 }), { description = "Switch to Writing" })
-- Move active window to a workspace with SUPER + SHIFT + [1-9; 0] hl.bind("SUPER + SHIFT + code:1" .. (i - 1), function()
hl.bind( local active_window = hl.get_active_window()
"SUPER + SHIFT + code:10", local active_workspace = active_window.workspace
hl.dsp.window.move({ workspace = 1 }), local active_workspace_name = active_workspace.name
{ description = "Move window to workspace 1" } local monitor_suffix = active_workspace_name:match("_(%d+)$") or "1"
) local new_workspace = "name:" .. workspace_map[i] .. "_" .. monitor_suffix
hl.bind( -- local new_workspace = (i - 1) * monitor_count + active_workspace.id
"SUPER + SHIFT + code:11", hl.dispatch(hl.dsp.window.move({ workspace = new_workspace, window = active_window, follow = false }))
hl.dsp.window.move({ workspace = 2 }), end, { description = "Move window to workspace " .. workspace_map[i] })
{ description = "Move window to workspace 2" } end
)
hl.bind( -- A hack to move to the Home workspace when Hyprland first loads
"SUPER + SHIFT + code:12", for j = monitor_count, 1, -1 do
hl.dsp.window.move({ workspace = 3 }), if hl.get_workspaces()[j].id > 0 and monitor_count == 2 then
{ description = "Move window to workspace 3" } hl.dispatch(hl.dsp.focus({ workspace = "name:Home_" .. j }))
) end
hl.bind( for k, window in pairs(hl.get_windows({ workspace = j })) do
"SUPER + SHIFT + code:13", hl.dispatch(hl.dsp.window.move({ window = window, workspace = "name:Home_1", follow = true }))
hl.dsp.window.move({ workspace = 4 }), end
{ description = "Move window to workspace 4" } end
) end
hl.bind(
"SUPER + SHIFT + code:14", hl.on("monitor.added", setup_monitors)
hl.dsp.window.move({ workspace = 5 }), hl.on("monitor.removed", setup_monitors)
{ description = "Move window to workspace 5" } hl.on("config.reloaded", setup_monitors)
)
@@ -0,0 +1,188 @@
[
{
"input_combination": [
{
"type": 1,
"code": 29,
"origin_hash": "baf704e91c9cdbc75e73e4a3e3f9849b"
},
{
"type": 1,
"code": 42,
"origin_hash": "baf704e91c9cdbc75e73e4a3e3f9849b"
},
{
"type": 1,
"code": 44,
"origin_hash": "baf704e91c9cdbc75e73e4a3e3f9849b"
}
],
"target_uinput": "keyboard",
"output_symbol": "KEY_LEFTCTRL + KEY_LEFTSHIFT + KEY_Z",
"name": "K10 (Default: Control_L + Shift_L + z)",
"mapping_type": "key_macro"
},
{
"input_combination": [
{
"type": 1,
"code": 57,
"origin_hash": "baf704e91c9cdbc75e73e4a3e3f9849b"
}
],
"target_uinput": "keyboard",
"output_symbol": "KEY_E",
"name": "K9 (Default: space) (New: e)",
"mapping_type": "key_macro"
},
{
"input_combination": [
{
"type": 1,
"code": 29,
"origin_hash": "baf704e91c9cdbc75e73e4a3e3f9849b"
},
{
"type": 1,
"code": 44,
"origin_hash": "baf704e91c9cdbc75e73e4a3e3f9849b"
}
],
"target_uinput": "keyboard",
"output_symbol": "KEY_LEFTCTRL + KEY_Z",
"name": "K8 (Default: Control_L + z)",
"mapping_type": "key_macro"
},
{
"input_combination": [
{
"type": 1,
"code": 42,
"origin_hash": "baf704e91c9cdbc75e73e4a3e3f9849b"
}
],
"target_uinput": "keyboard",
"output_symbol": "KEY_LEFTSHIFT",
"name": "K5 (Default: Shift_L)",
"mapping_type": "key_macro"
},
{
"input_combination": [
{
"type": 1,
"code": 29,
"origin_hash": "baf704e91c9cdbc75e73e4a3e3f9849b"
},
{
"type": 1,
"code": 49,
"origin_hash": "baf704e91c9cdbc75e73e4a3e3f9849b"
}
],
"target_uinput": "keyboard",
"output_symbol": "KEY_LEFTCTRL + KEY_BACKSPACE",
"name": "K2 (Default: Control_L + n) (New: Control_L + BackSpace)",
"mapping_type": "key_macro"
},
{
"input_combination": [
{
"type": 1,
"code": 29,
"origin_hash": "baf704e91c9cdbc75e73e4a3e3f9849b"
},
{
"type": 1,
"code": 78,
"origin_hash": "baf704e91c9cdbc75e73e4a3e3f9849b"
}
],
"target_uinput": "keyboard",
"output_symbol": "if_eq($wheel, 2, modify(KEY_LEFTCTRL, modify(KEY_LEFTSHIFT, key(KEY_EQUAL))), modify(KEY_LEFTCTRL, key(KEY_RIGHTBRACE)))",
"name": "Rotate clockwise (Default: Control_L + KP_Add)",
"mapping_type": "key_macro"
},
{
"input_combination": [
{
"type": 1,
"code": 29,
"origin_hash": "baf704e91c9cdbc75e73e4a3e3f9849b"
},
{
"type": 1,
"code": 74,
"origin_hash": "baf704e91c9cdbc75e73e4a3e3f9849b"
}
],
"target_uinput": "keyboard",
"output_symbol": "if_eq($wheel, 2, modify(KEY_LEFTCTRL, key(KEY_KPMINUS)), modify(KEY_LEFTCTRL, key(KEY_LEFTBRACE)))",
"name": "Rotate anticlockwise (Default: Control_L + KP_Subtract)",
"mapping_type": "key_macro"
},
{
"input_combination": [
{
"type": 1,
"code": 63,
"origin_hash": "baf704e91c9cdbc75e73e4a3e3f9849b"
}
],
"target_uinput": "keyboard",
"output_symbol": "KEY_B",
"name": "K3 (Default: KEY_F5) (New: b)",
"mapping_type": "key_macro"
},
{
"input_combination": [
{
"type": 1,
"code": 29,
"origin_hash": "baf704e91c9cdbc75e73e4a3e3f9849b"
}
],
"target_uinput": "keyboard",
"output_symbol": "KEY_LEFTCTRL",
"name": "K6 (Default: Control_L)",
"mapping_type": "key_macro"
},
{
"input_combination": [
{
"type": 1,
"code": 56,
"origin_hash": "baf704e91c9cdbc75e73e4a3e3f9849b"
}
],
"target_uinput": "keyboard",
"output_symbol": "KEY_ESC",
"name": "K7 (Default: Alt_L) (New: Escape)",
"mapping_type": "key_macro"
},
{
"input_combination": [
{
"type": 1,
"code": 24,
"origin_hash": "baf704e91c9cdbc75e73e4a3e3f9849b"
}
],
"target_uinput": "keyboard",
"output_symbol": "if_eq($wheel, 1, set(wheel, 2), set(wheel, 1))",
"name": "K1 (Default: Control_L + o) (New: Toggle wheel)",
"mapping_type": "key_macro"
},
{
"input_combination": [
{
"type": 1,
"code": 31,
"origin_hash": "baf704e91c9cdbc75e73e4a3e3f9849b"
}
],
"target_uinput": "keyboard",
"output_symbol": "KEY_B",
"name": "K4 (Default: Control_L + s) (New: Control_L l)",
"mapping_type": "key_macro"
}
]
+9
View File
@@ -0,0 +1,9 @@
[Shortcuts]
add_new_paint_layer=Ctrl+L
clear=Ctrl+Backspace
erase_action=;\s
eraser_preset_action=E
fill_selection_background_color=none
fill_selection_background_color_opacity=;\s
krita_filter_levels=;\s
svg_weight_light=;\s
+6
View File
@@ -126,6 +126,12 @@ function dut() {
sudo du -hax -t"${threshold}G" /* --exclude=/{proc,sys,dev,run} sudo du -hax -t"${threshold}G" /* --exclude=/{proc,sys,dev,run}
} }
function mount_old_roots() {
sudo mkdir -p /mnt/btrfs-root
sudo mount -t btrfs -o subvolid=5 /dev/nvme0n1p2 /mnt/btrfs-root
cd /mnt/btrfs-root/old_roots
}
function gh() { function gh() {
local -a commands=( local -a commands=(
"Recover deleted file: git checkout HEAD -- <file>" "Recover deleted file: git checkout HEAD -- <file>"
+2
View File
@@ -1,6 +1,8 @@
cac ${XDG_CACHE_HOME:-$HOME/.cache} cac ${XDG_CACHE_HOME:-$HOME/.cache}
cf ${XDG_CONFIG_HOME:-$HOME/.config} cf ${XDG_CONFIG_HOME:-$HOME/.config}
nv ${XDG_CONFIG_HOME:-$HOME/.config}/nvim/lua nv ${XDG_CONFIG_HOME:-$HOME/.config}/nvim/lua
hy ${XDG_CONFIG_HOME:-$HOME/.config}/hypr
nx ${XDG_CONFIG_HOME:-$HOME/.config}/nixos
D ${XDG_DOWNLOAD_DIR:-$HOME/Downloads} D ${XDG_DOWNLOAD_DIR:-$HOME/Downloads}
d ${XDG_DOCUMENTS_DIR:-$HOME/Tower/Documents} d ${XDG_DOCUMENTS_DIR:-$HOME/Tower/Documents}
dt ${XDG_DATA_HOME:-$HOME/.local/share} dt ${XDG_DATA_HOME:-$HOME/.local/share}
+7 -1
View File
@@ -3,9 +3,15 @@
# profile file. Runs on login. Environmental variables are set here. # profile file. Runs on login. Environmental variables are set here.
# Adds `~/.local/bin` to $PATH # Adds `~/.local/bin` to $PATH
if [ -n "$ZSH_VERSION" ]; then
export PATH="$PATH:${$(find ~/.local/bin -type d -printf %p:)%%:}:$(yarn global bin):$HOME/.config/composer/vendor/bin" export PATH="$PATH:${$(find ~/.local/bin -type d -printf %p:)%%:}:$(yarn global bin):$HOME/.config/composer/vendor/bin"
else
# POSIX-compatible fallback
LOCAL_BIN_DIRS=$(find ~/.local/bin -type d -printf '%p:' 2>/dev/null)
export PATH="$PATH:${LOCAL_BIN_DIRS%:}:$HOME/.config/composer/vendor/bin"
fi
unsetopt PROMPT_SP [ -n "$ZSH_VERSION" ] && unsetopt PROMPT_SP
# Default programs # Default programs
export EDITOR="nvim" export EDITOR="nvim"
+2
View File
@@ -2,6 +2,8 @@
alias cac="cd /home/chris/.cache && ls" \ alias cac="cd /home/chris/.cache && ls" \
cf="cd /home/chris/.config && ls" \ cf="cd /home/chris/.config && ls" \
nv="cd /home/chris/.config/nvim/lua && ls" \ nv="cd /home/chris/.config/nvim/lua && ls" \
hy="cd /home/chris/.config/hypr && ls" \
nx="cd /home/chris/.config/nixos && ls" \
D="cd /home/chris/Downloads && ls" \ D="cd /home/chris/Downloads && ls" \
d="cd /home/chris/Tower/Documents && ls" \ d="cd /home/chris/Tower/Documents && ls" \
dt="cd /home/chris/.local/share && ls" \ dt="cd /home/chris/.local/share && ls" \
+2
View File
@@ -1,6 +1,8 @@
hash -d cac=/home/chris/.cache hash -d cac=/home/chris/.cache
hash -d cf=/home/chris/.config hash -d cf=/home/chris/.config
hash -d nv=/home/chris/.config/nvim/lua hash -d nv=/home/chris/.config/nvim/lua
hash -d hy=/home/chris/.config/hypr
hash -d nx=/home/chris/.config/nixos
hash -d D=/home/chris/Downloads hash -d D=/home/chris/Downloads
hash -d d=/home/chris/Tower/Documents hash -d d=/home/chris/Tower/Documents
hash -d dt=/home/chris/.local/share hash -d dt=/home/chris/.local/share
+2 -2
View File
@@ -2,8 +2,8 @@ name: runcats
root: ~/Code/Sites/runcats/ root: ~/Code/Sites/runcats/
on_project_start: on_project_start:
- go-task up - go-task up
- $BROWSER http://dev.runcats.test:8001 - $BROWSER http://dev.runcats.test:8001 &> /dev/null &
- $BROWSER http://mail.runcats.test - $BROWSER http://mail.runcats.test &> /dev/null &
on_project_exit: go-task down on_project_exit: go-task down
startup_window: editor startup_window: editor
windows: windows:
+14 -12
View File
@@ -17,22 +17,24 @@
"hyprland/workspaces": { "hyprland/workspaces": {
"on-click": "activate", "on-click": "activate",
"format": "{icon}", "format": "{icon}",
"sort-by": "id",
"format-icons": { "format-icons": {
"default": "", "default": "",
"1": "", "Home_1": "",
"2": "", "Dev_1": "",
"3": "", "Art_1": "",
"4": "", "Gaming_1": "",
"5": "", "Writing_1": "󱚍",
"6": "", "Home_2": "",
"7": "", "Dev_2": "",
"8": "", "Art_2": "",
"9": "󱚍", "Gaming_2": "",
"10": "󱚍", "Writing_2": "󱚍",
}, },
"persistent-workspaces": { "persistent-workspaces": {
"DP-1": [1, 3, 5, 7, 9], "eDP-1": ["Home_1", "Dev_1", "Art_1", "Gaming_1", "Writing_1"],
"DP-2": [2, 4, 6, 8, 10] "DP-1": ["Home_1", "Dev_1", "Art_1", "Gaming_1", "Writing_1"],
"DP-2": ["Home_2", "Dev_2", "Art_2", "Gaming_2", "Writing_2"],
} }
}, },
"custom/station": { "custom/station": {
+4 -4
View File
@@ -2,11 +2,11 @@
show_hidden = true show_hidden = true
[[plugin.prepend_fetchers]] [[plugin.prepend_fetchers]]
id = "git" url = "*"
name = "*"
run = "git" run = "git"
group = "git"
[[plugin.prepend_fetchers]] [[plugin.prepend_fetchers]]
id = "git" url = "*/"
name = "*/"
run = "git" run = "git"
group = "git"
@@ -1,15 +0,0 @@
#!/bin/bash
# Toggles the window gaps globally between no gaps and the default 10/5/2.
gaps=$(hyprctl getoption general:gaps_out -j | jq -r '.custom' | awk '{print $1}')
if [[ $gaps == "0" ]]; then
hyprctl keyword general:gaps_out 10
hyprctl keyword general:gaps_in 5
hyprctl keyword general:border_size 2
else
hyprctl keyword general:gaps_out 0
hyprctl keyword general:gaps_in 0
hyprctl keyword general:border_size 0
fi
-46
View File
@@ -1,46 +0,0 @@
#!/bin/bash
# Toggle to pop-out a tile to stay fixed on a display basis.
# Usage:
# station-hyprland-window-pop [width height [x y]]
#
# Arguments:
# width Optional. Width of the floating window. Default: 1300
# height Optional. Height of the floating window. Default: 900
# x Optional. X position of the window. Must provide both X and Y to take effect.
# y Optional. Y position of the window. Must provide both X and Y to take effect.
#
# Behavior:
# - If the window is already pinned, it will be unpinned and removed from the pop layer.
# - If the window is not pinned, it will be floated, resized, moved/centered, pinned, brought to top, and popped.
width=${1:-1300}
height=${2:-900}
x=${3:-}
y=${4:-}
active=$(hyprctl activewindow -j)
pinned=$(echo "$active" | jq ".pinned")
addr=$(echo "$active" | jq -r ".address")
if [[ $pinned == "true" ]]; then
hyprctl -q --batch \
"dispatch pin address:$addr;" \
"dispatch togglefloating address:$addr;" \
"dispatch tagwindow -pop address:$addr;"
elif [[ -n $addr ]]; then
hyprctl dispatch togglefloating address:$addr
hyprctl dispatch resizeactive exact $width $height address:$addr
if [[ -n $x && -n $y ]]; then
hyprctl dispatch moveactive $x $y address:$addr
else
hyprctl dispatch centerwindow address:$addr
fi
hyprctl -q --batch \
"dispatch pin address:$addr;" \
"dispatch alterzorder top address:$addr;" \
"dispatch tagwindow +pop address:$addr;"
fi
@@ -1,13 +0,0 @@
#!/bin/bash
# Check current single_window_aspect_ratio setting
CURRENT_VALUE=$(hyprctl getoption "layout:single_window_aspect_ratio" 2>/dev/null | head -1)
# Parse vec2 output: "vec2: [1, 1]" or "vec2: [0, 0]"
if [[ $CURRENT_VALUE == *"[1, 1]"* ]]; then
hyprctl keyword layout:single_window_aspect_ratio "0 0"
notify-send " Disable single-window square aspect ratio"
else
hyprctl keyword layout:single_window_aspect_ratio "1 1"
notify-send " Enable single-window square aspect"
fi
@@ -1,16 +0,0 @@
#!/bin/bash
# Toggle the layout on the current active workspace between dwindle and scrolling
ACTIVE_WORKSPACE=$(hyprctl activeworkspace -j | jq -r '.id')
CURRENT_LAYOUT=$(hyprctl activeworkspace -j | jq -r '.tiledLayout')
case "$CURRENT_LAYOUT" in
dwindle) NEW_LAYOUT=scrolling ;;
scrolling) NEW_LAYOUT=monocle ;;
monocle) NEW_LAYOUT=master ;;
*) NEW_LAYOUT=dwindle ;;
esac
hyprctl keyword workspace $ACTIVE_WORKSPACE, layout:$NEW_LAYOUT
notify-send "󱂬 Workspace layout set to $NEW_LAYOUT"
-12
View File
@@ -1,12 +0,0 @@
#!/bin/bash
# Locks the system using hyprlock, but not before ensuring the screensaver stopped.
# Lock the screen
pidof hyprlock || hyprlock &
# Set keyboard layout to default (first layout)
hyprctl switchxkblayout all 0 > /dev/null 2>&1
# Avoid running screensaver when locked
pkill -f org.station.screensaver
+1 -1
View File
@@ -241,7 +241,7 @@ show_system_menu() {
case $(menu "System" "$options") in case $(menu "System" "$options") in
*Screensaver*) station-launch-screensaver force ;; *Screensaver*) station-launch-screensaver force ;;
*Lock*) station-lock-screen ;; *Lock*) station-lock-screen ;;
*Suspend*) systemctl suspend ;; *Suspend*) hyprctl dispatch 'hl.dsp.dpms({ action = "disable" })' && systemctl suspend ;;
*Hibernate*) systemctl hibernate ;; *Hibernate*) systemctl hibernate ;;
*Logout*) station-system-logout ;; *Logout*) station-system-logout ;;
*Restart*) station-system-reboot ;; *Restart*) station-system-reboot ;;
-12
View File
@@ -1,12 +0,0 @@
#!/bin/bash
# Moves the active window to the relevant workspace
workspace=$1
active_window=$(hyprctl activewindow -j | jq -r ".address")
active_workspace=$(hyprctl activeworkspace -j | jq -r ".id")
new_workspace=$((($workspace*2)-($active_workspace%2)))
hyprctl dispatch movetoworkspacesilent "$new_workspace,address:$active_window"
@@ -6,22 +6,19 @@ bmfiles="${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-files"
# Output locations. Unactivated progs should go to /dev/null. # Output locations. Unactivated progs should go to /dev/null.
shell_shortcuts="${XDG_CONFIG_HOME:-$HOME/.config}/shell/shortcutrc" shell_shortcuts="${XDG_CONFIG_HOME:-$HOME/.config}/shell/shortcutrc"
zsh_named_dirs="${XDG_CONFIG_HOME:-$HOME/.config}/shell/zshnameddirrc" zsh_named_dirs="${XDG_CONFIG_HOME:-$HOME/.config}/shell/zshnameddirrc"
lf_shortcuts="${XDG_CONFIG_HOME:-$HOME/.config}/lf/shortcutrc"
# Remove, prepare files # Remove, prepare files
rm -f "$lf_shortcuts" "$zsh_named_dirs" 2>/dev/null rm -f "$zsh_named_dirs" 2>/dev/null
printf "# vim: filetype=sh\\nalias " > "$shell_shortcuts" printf "# vim: filetype=sh\\nalias " > "$shell_shortcuts"
# Format the `directories` file in the correct syntax and sent it to all three configs. # Format the `directories` file in the correct syntax and sent it to all three configs.
eval "echo \"$(cat "$bmdirs")\"" | \ eval "echo \"$(cat "$bmdirs")\"" | \
awk "!/^\s*#/ && !/^\s*\$/ {gsub(\"\\\s*#.*$\",\"\"); awk "!/^\s*#/ && !/^\s*\$/ {gsub(\"\\\s*#.*$\",\"\");
printf(\"%s=\42cd %s && ls\42 \\\\\n\",\$1,\$2) >> \"$shell_shortcuts\" ; printf(\"%s=\42cd %s && ls\42 \\\\\n\",\$1,\$2) >> \"$shell_shortcuts\" ;
printf(\"hash -d %s=%s \n\",\$1,\$2) >> \"$zsh_named_dirs\" ; printf(\"hash -d %s=%s \n\",\$1,\$2) >> \"$zsh_named_dirs\"}"
printf(\"map C%s cd \42%s\42 \n\",\$1,\$2) >> \"$lf_shortcuts\" }"
# Format the `files` file in the correct syntax and sent it to both configs. # Format the `files` file in the correct syntax and sent it to both configs.
eval "echo \"$(cat "$bmfiles")\"" | \ eval "echo \"$(cat "$bmfiles")\"" | \
awk "!/^\s*#/ && !/^\s*\$/ {gsub(\"\\\s*#.*$\",\"\"); awk "!/^\s*#/ && !/^\s*\$/ {gsub(\"\\\s*#.*$\",\"\");
printf(\"%s=\42\$EDITOR %s\42 \\\\\n\",\$1,\$2) >> \"$shell_shortcuts\" ; printf(\"%s=\42\$EDITOR %s\42 \\\\\n\",\$1,\$2) >> \"$shell_shortcuts\" ;
printf(\"hash -d %s=%s \n\",\$1,\$2) >> \"$zsh_named_dirs\" ; printf(\"hash -d %s=%s \n\",\$1,\$2) >> \"$zsh_named_dirs\"}"
printf(\"map E%s \$\$EDITOR \42%s\42 \n\",\$1,\$2) >> \"$lf_shortcuts\" }"
-12
View File
@@ -1,12 +0,0 @@
#!/bin/bash
STATE_FILE=~/.local/state/station/toggles/screensaver-off
if [[ -f $STATE_FILE ]]; then
rm -f $STATE_FILE
notify-send "󱄄 Screensaver enabled"
else
mkdir -p "$(dirname $STATE_FILE)"
touch $STATE_FILE
notify-send "󱄄 Screensaver disabled"
fi
@@ -3,6 +3,7 @@ Version=1.0
Name=Discord Name=Discord
Comment=Discord Comment=Discord
Exec=station-launch-webapp https://discord.com/channels/@me Exec=station-launch-webapp https://discord.com/channels/@me
Exec=station-launch-or-focus ^chrome-discord.com__channels_@me-Default$ "station-launch-webapp https://discord.com/channels/@me"
Terminal=false Terminal=false
Type=Application Type=Application
Icon=/home/chris/.local/share/applications/icons/Discord.png Icon=/home/chris/.local/share/applications/icons/Discord.png
+1 -1
View File
@@ -2,7 +2,7 @@
Version=1.0 Version=1.0
Name=WhatsApp Name=WhatsApp
Comment=WhatsApp Comment=WhatsApp
Exec=station-launch-webapp https://web.whatsapp.com Exec=station-launch-or-focus ^chrome-web.whatsapp.com__-Default$ "station-launch-webapp https://web.whatsapp.com"
Terminal=false Terminal=false
Type=Application Type=Application
Icon=/home/chris/.local/share/applications/icons/WhatsApp Icon=/home/chris/.local/share/applications/icons/WhatsApp