Compare commits

..
19 Commits
Author SHA1 Message Date
jfmonty2 eb1fd1afb8 update package-install script 2026-10-02 10:31:30 -04:00
jfmonty2 9dda262876 remove another old script replaced by Lua 2026-10-02 10:08:58 -04:00
jfmonty2 c2c5656cac update inputrc (omarchy 4 has ctrl+delete bound by default) 2026-10-02 10:08:25 -04:00
jfmonty2 a21a2fbd8a remove old waybar configs 2026-10-02 10:05:23 -04:00
jfmonty2 bad0afde9a update shikane service to properly wait for graphical session to come up 2026-10-02 10:04:57 -04:00
jfmonty2 c5926b669c update workspace plugin to work with named workspaces 2026-10-02 10:03:04 -04:00
jfmonty2 cdbd3e7308 update Mise config 2026-10-02 10:01:40 -04:00
jfmonty2 f7d3b6e288 update Zed config 2026-10-02 10:01:35 -04:00
jfmonty2 b8fc830342 remove old scripts (mostly replaced by inline Lua) 2026-10-02 10:00:16 -04:00
jfmonty2 f27247fe9e remove alacritty config (we're on Foot now) 2026-10-02 09:59:51 -04:00
jfmonty2 c392ce7c9c update hyprsunset config 2026-10-02 09:59:09 -04:00
jfmonty2 89bb7c9509 delete old configs (superseded by default configs stored elsewhere) 2026-10-02 09:58:45 -04:00
jfmonty2 4ca101620e migrate input config to new Lua format 2026-10-02 09:58:13 -04:00
jfmonty2 d1496a2812 migrate window config to new Lua format 2026-10-02 09:58:05 -04:00
jfmonty2 66d3b6d136 migrate main Hyprland config to new Lua format 2026-10-02 09:57:53 -04:00
jfmonty2 0a64655a1e migrate autostart to new Lua format 2026-10-02 09:57:33 -04:00
jfmonty2 755ca204e4 migrate keybinds to new Lua format 2026-10-02 09:57:17 -04:00
jfmonty2 e0e7e616cb add Slack.desktop 2026-09-30 21:50:31 -04:00
jfmonty2 53ac490efc tweak workspace indicator 2026-09-30 21:50:14 -04:00
31 changed files with 375 additions and 576 deletions

No files matched your search

-24
View File
@@ -1,24 +0,0 @@
general.import = [ "~/.config/omarchy/current/theme/alacritty.toml" ]
[env]
TERM = "xterm-256color"
[font]
normal = { family = "CaskaydiaMono Nerd Font", style = "Regular" }
bold = { family = "CaskaydiaMono Nerd Font", style = "Bold" }
italic = { family = "CaskaydiaMono Nerd Font", style = "Italic" }
size = 10
[window]
padding.x = 14
padding.y = 14
decorations = "None"
[keyboard]
bindings = [
{ key = "F11", action = "ToggleFullscreen" },
{ key = "Insert", mods = "Shift", action = "Paste" },
{ key = "Insert", mods = "Control", action = "Copy" },
{ key = "Return", mods = "Shift", chars = "\u001B\r" }
]
-8
View File
@@ -1,8 +0,0 @@
# Extra autostart processes
# assign workspaces to preferred monitors
exec = ~/.local/bin/assign-workspace-monitors
# autostart various apps in their own special workspaces
exec-once = [workspace special:slack silent] slack
exec-once = [workspace special:1password silent] 1password
+8
View File
@@ -0,0 +1,8 @@
-- Extra autostart processes.
-- o.launch_on_start("my-service")
hl.on("hyprland.start", function()
hl.exec_cmd(o.launch_webapp("https://app.slack.com/client"), { workspace = "special:slack silent" })
end)
o.launch_on_start("1password")
-70
View File
@@ -1,70 +0,0 @@
# Application bindings
$terminal = uwsm-app -- xdg-terminal-exec
$browser = omarchy-launch-browser
bindd = SUPER, return, Terminal, exec, $terminal --dir=$(omarchy-cmd-terminal-cwd)
bindd = SUPER, F, File manager, exec, uwsm app -- nautilus --new-window
bindd = SUPER, B, Browser, exec, $browser
bindd = SUPER SHIFT, B, Browser (private), exec, $browser --private
bindd = SUPER, M, Music, exec, omarchy-launch-or-focus spotify
bindd = SUPER, N, Notes, exec, heynote
bindd = SUPER, T, Activity, exec, omarchy-launch-tui btop
bindd = SUPER ALT, D, Docker, exec, omarchy-launch-tui lazydocker
# If your web app url contains #, type it as ## to prevent hyperland treat it as comments
bindd = SUPER, A, Claude, exec, omarchy-launch-webapp "https://claude.ai/new"
bindd = SUPER, E, Email, exec, omarchy-launch-webapp "https://mail.google.com/mail/u/0/"
bindd = SUPER, Y, YouTube, exec, omarchy-launch-webapp "https://youtube.com/"
bindd = SUPER, G, GitLab, exec, omarchy-launch-webapp "https://gitlab.modg.net/"
bindd = SUPER ALT, G, Google Messages, exec, omarchy-launch-or-focus-webapp "Google Messages" "https://messages.google.com/web/conversations"
bindd = SUPER, O, modgoffice, exec, omarchy-launch-webapp "https://office.modg.org"
# lazy apps: Launch if not currently running, otherwise just switch to that app
bindd = SUPER, D, Open/focus DataGrip, exec, ~/.local/bin/lazy-app class:jetbrains-datagrip ~/.local/share/JetBrains/Toolbox/apps/datagrip/bin/datagrip
# omarchy uses swapwindow for these binds, but I prefer movewindow so that it can cross monitor boundaries
unbind = SUPER SHIFT, LEFT
unbind = SUPER SHIFT, RIGHT
unbind = SUPER SHIFT, UP
unbind = SUPER SHIFT, DOWN
bindd = SUPER SHIFT, left, Move window to the left, movewindow, l
bindd = SUPER SHIFT, right, Move window to the right, movewindow, r
bindd = SUPER SHIFT, up, Move window up, movewindow, u
bindd = SUPER SHIFT, down, Move window down, movewindow, d
bindd = SUPER ALT, left, Move current workspace to the left, movecurrentworkspacetomonitor, l
bindd = SUPER ALT, right, Move current workspace to the right, movecurrentworkspacetomonitor, r
bindd = SUPER ALT, up, Move current workspace up, movecurrentworkspacetomonitor, u
bindd = SUPER ALT, down, Move current workspace down, movecurrentworkspacetomonitor, d
# create a new workspace
bindd = SUPER, grave, Create a mew workspace, exec, ~/.local/bin/new-workspace
# keybinds for background apps
bindd = SUPER, S, Show/hide Slack, togglespecialworkspace, slack
bindd = SUPER, period, 1Password quick access, exec, 1password --quick-access
bindd = SUPER CTRL, period, Show/hide 1Password, togglespecialworkspace, 1password
bindd = SUPER, Z, Show Creddy, exec, creddy shortcut show-window
# I'm used to super+L to lock screen
bindd = SUPER, L, Lock screen, exec, omarchy-lock-screen
# I don't want ctrl+alt+delete to affect my "special" apps
unbind = CTRL ALT, DELETE
bindd = CTRL ALT, DELETE, Close all windows (except special), exec, ~/.local/bin/close-non-special-windows
# for WHATEVER reason, hyprland refuses to use the numeric symbols for keypad keys,
# so we have to use the navigation symbols instead
bindd = SUPER, KP_End, Switch to workspace 1, workspace, 1
bindd = SUPER, KP_Down, Switch to workspace 2, workspace, 2
bindd = SUPER, KP_Next, Switch to workspace 3, workspace, 3
bindd = SUPER, KP_Left, Switch to workspace 4, workspace, 4
bindd = SUPER, KP_Begin, Switch to workspace 5, workspace, 5
bindd = SUPER, KP_Right, Switch to workspace 6, workspace, 6
bindd = SUPER, KP_Home, Switch to workspace 7, workspace, 7
bindd = SUPER, KP_Up, Switch to workspace 8, workspace, 8
bindd = SUPER, KP_Prior, Switch to workspace 9, workspace, 9
# I miss notifications a lot
bindd = SUPER ALT, N, Toggle latest notification, exec, ~/.local/bin/toggle-last-notification
+165
View File
@@ -0,0 +1,165 @@
-- Keep only your personal keybinding overrides here. Add new bindings or
-- unbind defaults before replacing them.
-- See current bindings and descriptions:
-- omarchy menu keybindings --print
-- To disable every Omarchy default binding, set this in
-- ~/.config/hypr/hyprland.lua before require("default.hypr.omarchy"), then add
-- only the bindings you want below:
-- omarchy_default_bindings = false
-- To disable all preinstalled app/webapp bindings, set:
-- omarchy_preinstalled_bindings = false
-- Add a new binding.
-- o.bind("SUPER + SHIFT + R", "SSH", "alacritty -e ssh your-server")
-- Change an existing binding by unbinding it first, then binding the key again.
-- This example changes SUPER+SPACE from the launcher to the Omarchy root menu.
-- hl.unbind("SUPER + SPACE")
-- o.bind("SUPER + SPACE", "Omarchy menu", "omarchy-menu toggle root")
-- Disable a default binding without replacing it.
-- hl.unbind("SUPER + SHIFT + B")
-- Logitech MX Keys examples:
-- o.bind("SUPER + SHIFT + S", nil, "omarchy-capture-screenshot")
-- o.bind("SUPER + H", nil, "voxtype record toggle")
-- o.bind("SUPER + PERIOD", nil, "omarchy-shell shell toggle omarchy.emojis")
--- **********************
--- WINDOW MANAGEMENT
--- **********************
--- I prefer `move` over `swap` because it works closer to how I expect
hl.unbind("SUPER + SHIFT + LEFT")
hl.unbind("SUPER + SHIFT + RIGHT")
hl.unbind("SUPER + SHIFT + UP")
hl.unbind("SUPER + SHIFT + DOWN")
o.bind("SUPER + SHIFT + LEFT", "Move window to the left", hl.dsp.window.move({ direction = "l" }))
o.bind("SUPER + SHIFT + RIGHT", "Move window to the right", hl.dsp.window.move({ direction = "r" }))
o.bind("SUPER + SHIFT + UP", "Move window up", hl.dsp.window.move({ direction = "u" }))
o.bind("SUPER + SHIFT + DOWN", "Move window down", hl.dsp.window.move({ direction = "d" }))
-- these default to "Move window to group on <direction>"
hl.unbind("SUPER + ALT + LEFT")
hl.unbind("SUPER + ALT + RIGHT")
hl.unbind("SUPER + ALT + UP")
hl.unbind("SUPER + ALT + DOWN")
o.bind("SUPER + ALT + LEFT", "Move current workspace to the left", hl.dsp.workspace.move({ monitor = "l" }))
o.bind("SUPER + ALT + RIGHT", "Move current workspace to the right", hl.dsp.workspace.move({ monitor = "r" }))
o.bind("SUPER + ALT + UP", "Move current workspace up", hl.dsp.workspace.move({ monitor = "u" }))
o.bind("SUPER + ALT + DOWN", "Move current workspace down", hl.dsp.workspace.move({ monitor = "d" }))
-- for WHATEVER reason, hyprland refuses to use the numeric symbols for keypad keys,
-- so we have to use the navigation symbols instead
o.bind("SUPER + KP_End", "Switch to workspace 1", hl.dsp.focus({ workspace = "1" }))
o.bind("SUPER + KP_Down", "Switch to workspace 2", hl.dsp.focus({ workspace = "2" }))
o.bind("SUPER + KP_Next", "Switch to workspace 3", hl.dsp.focus({ workspace = "3" }))
o.bind("SUPER + KP_Left", "Switch to workspace 4", hl.dsp.focus({ workspace = "4" }))
o.bind("SUPER + KP_Begin", "Switch to workspace 5", hl.dsp.focus({ workspace = "5" }))
o.bind("SUPER + KP_Right", "Switch to workspace 6", hl.dsp.focus({ workspace = "6" }))
o.bind("SUPER + KP_Home", "Switch to workspace 7", hl.dsp.focus({ workspace = "7" }))
o.bind("SUPER + KP_Up", "Switch to workspace 8", hl.dsp.focus({ workspace = "8" }))
o.bind("SUPER + KP_Prior", "Switch to workspace 9", hl.dsp.focus({ workspace = "9" }))
-- find the numerically-next empty workspace and create it on the current monitor
o.bind("SUPER + grave", "Create a new workspace", function()
for i = 1, 100 do
local workspace = hl.get_workspace(i)
if not workspace then
hl.dispatch(hl.dsp.focus({ workspace = i }))
break
end
end
end)
-- I don't fullscreen often, so it's fine if it's less reachable, and I want this for files
hl.unbind("SUPER + F")
o.bind("SUPER + F11", "Full screen", hl.dsp.window.fullscreen({ mode = "fullscreen" }))
-- I don't really use window grouping either
hl.unbind("SUPER + G")
o.bind("SUPER + CTRL + G", "Toggle window grouping", hl.dsp.group.toggle())
-- I don't want ctrl + alt + delete to affect my special windows
hl.unbind("CTRL + ALT + DELETE")
o.bind("CTRL + ALT + DELETE", "Close all windows", function()
for _, window in pairs(hl.get_windows()) do
if not window.workspace.special then
hl.dispatch(hl.dsp.window.close({ window = "address:" .. window.address }))
end
end
hl.dispatch(hl.dsp.focus({ workspace = 2 }))
end)
--- **********************
--- APPLICATIONS
--- **********************
-- I don't use all the default apps, and I don't like the default super + shift prefix
-- so I unbind all default app keybinds (except terminal)
hl.unbind("SUPER + SHIFT + RETURN") -- Browser
hl.unbind("SUPER + SHIFT + F") -- File manager
hl.unbind("SUPER + ALT + SHIFT + F") -- File manager (cwd)
hl.unbind("SUPER + SHIFT + B") -- Browser
hl.unbind("SUPER + SHIFT + ALT + B") -- Browser (private)
hl.unbind("SUPER + SHIFT + N") -- Editor
hl.unbind("SUPER + ALT + RETURN") -- Tmux
hl.unbind("SUPER + CTRL + RETURN") -- Herdr
hl.unbind("SUPER + SHIFT + M") -- Music
hl.unbind("SUPER + SHIFT + ALT + M") -- Music TUI
hl.unbind("SUPER + SHIFT + D") -- Docker
hl.unbind("SUPER + SHIFT + G") -- Signal
hl.unbind("SUPER + SHIFT + O") -- Obsidian
hl.unbind("SUPER + SHIFT + W") -- Omawrite
hl.unbind("SUPER + SHIFT + SLASH") -- Passwords
hl.unbind("SUPER + SHIFT + A") -- ChatGPT
hl.unbind("SUPER + SHIFT + ALT + A") -- Grok
hl.unbind("SUPER + SHIFT + C") -- Calendar
hl.unbind("SUPER + SHIFT + E") -- Email
hl.unbind("SUPER + SHIFT + ALT + E") -- New email
hl.unbind("SUPER + SHIFT + Y") -- YouTube
hl.unbind("SUPER + SHIFT + ALT + G") -- WhatsApp
hl.unbind("SUPER + SHIFT + CTRL + G") -- Google Messages
hl.unbind("SUPER + SHIFT + P") -- Google Photos
hl.unbind("SUPER + SHIFT + S") -- Google Maps
hl.unbind("SUPER + SHIFT + X") -- X
hl.unbind("SUPER + SHIFT + ALT + X") -- X Post
o.bind("SUPER + B", "Browser", { omarchy = "browser" })
o.bind("SUPER + ALT + B", "Browser (private)", { omarchy = "browser --private" })
o.bind("SUPER + F", "File manager", { omarchy = "nautilus" })
o.bind("SUPER + N", "Notes", { launch = "heynote" })
o.bind("SUPER + D", "Launch or focus DataGrip", { launch = "datagrip", focus = "^jetbrains-datagrip$" })
-- persistent background(-ish) apps
hl.unbind("SUPER + S") -- defaults to "scratchpad"
o.bind("SUPER + S", "Slack", hl.dsp.workspace.toggle_special("slack"))
o.bind("SUPER + period", "1Password Quick Access", "1password --quick-access")
hl.unbind("SUPER + CTRL + period") -- defaults to "transcode"
o.bind("CTRL + SUPER + period", "1Password", hl.dsp.workspace.toggle_special("1password"))
o.bind("SUPER + Z", "Show Creddy", "creddy shortcut show-window")
-- I don't want to run most webapps as completely standalone windows,
-- but it is convenient to have hotkeys for some of them
o.bind("SUPER + A", "Claude", "omarchy-launch-browser https://claude.ai/new")
o.bind("SUPER + E", "Email", "omarchy-launch-browser https://mail.google.com/mail/u/0")
o.bind("SUPER + ALT + E", "Email (personal)", "omarchy-launch-browser https://mail.google.com/mail/u/1")
o.bind("SUPER + G", "GitLab", "omarchy-launch-browser https://gitlab.modg.net")
-- I want to be able to summon a new browser tab from wherever I am
o.bind("SUPER + I", "New browser tab", function()
-- Omarchy tags any properly-integrated browser with one of these tags
local browser = hl.get_window("tag:(chromium|firefox)-based-browser.*")
if browser then
local window = "address:" .. browser.address
hl.dispatch(hl.dsp.send_shortcut({ mods = "CTRL", key = "T", window = window }))
hl.dispatch(hl.dsp.focus({ window = window }))
else
hl.exec_cmd("omarchy-launch-browser")
end
end)
-3
View File
@@ -1,3 +0,0 @@
# Extra env variables
# Note: You must relaunch Hyprland after changing envs (use Super+Esc, then Relaunch)
# env = MY_GLOBAL_ENV,setting
-22
View File
@@ -1,22 +0,0 @@
general {
lock_cmd = omarchy-lock-screen # lock screen and 1password
before_sleep_cmd = loginctl lock-session # lock before suspend.
after_sleep_cmd = hyprctl dispatch dpms on # to avoid having to press a key twice to turn on the display.
inhibit_sleep = 3 # wait until screen is locked
}
listener {
timeout = 150 # 2.5min
on-timeout = pidof hyprlock || omarchy-launch-screensaver # start screensaver (if we haven't locked already)
}
listener {
timeout = 151 # 5min
on-timeout = loginctl lock-session # lock screen when timeout has passed
}
listener {
timeout = 330 # 5.5min
on-timeout = hyprctl dispatch dpms off # screen off when timeout has passed
on-resume = hyprctl dispatch dpms on && brightnessctl -r # screen on when activity is detected
}
-22
View File
@@ -1,22 +0,0 @@
# Learn how to configure Hyprland: https://wiki.hyprland.org/Configuring/
# Use defaults Omarchy defaults (but don't edit these directly!)
source = ~/.local/share/omarchy/default/hypr/autostart.conf
source = ~/.local/share/omarchy/default/hypr/bindings/media.conf
source = ~/.local/share/omarchy/default/hypr/bindings/tiling.conf
source = ~/.local/share/omarchy/default/hypr/bindings/utilities.conf
source = ~/.local/share/omarchy/default/hypr/envs.conf
source = ~/.local/share/omarchy/default/hypr/looknfeel.conf
source = ~/.local/share/omarchy/default/hypr/input.conf
source = ~/.local/share/omarchy/default/hypr/windows.conf
source = ~/.config/omarchy/current/theme/hyprland.conf
# Change your own setup in these files (and overwrite any settings from defaults!)
source = ~/.config/hypr/monitors.conf
source = ~/.config/hypr/input.conf
source = ~/.config/hypr/bindings.conf
source = ~/.config/hypr/envs.conf
source = ~/.config/hypr/looknfeel.conf
source = ~/.config/hypr/autostart.conf
source = ~/.config/hypr/windows.conf
+30
View File
@@ -0,0 +1,30 @@
-- Learn how to configure Hyprland: https://wiki.hypr.land/Configuring/Start/
-- Omarchy's bootstrap keeps path setup out of this user config.
dofile((os.getenv("OMARCHY_PATH") or "/usr/share/omarchy") .. "/default/hypr/bootstrap.lua")
-- Disable all Omarchy default bindings. Add your own in hypr/bindings.lua.
-- omarchy_default_bindings = false
--
-- Or disable only bindings for Omarchy's preinstalled apps/web apps while
-- keeping core window-manager bindings:
-- omarchy_preinstalled_bindings = false
-- Load Omarchy defaults.
require("default.hypr.omarchy")
-- Put your personal overrides in these files. They're loaded after Omarchy's
-- defaults so package updates can improve the defaults without rewriting your
-- ~/.config/hypr files.
require("hypr.monitors")
require("hypr.input")
require("hypr.bindings")
require("hypr.looknfeel")
require("hypr.autostart")
require("hypr.windows")
-- Toggle config flags dynamically.
require("default.hypr.toggles")
-- Add any other personal Hyprland configuration below.
-- o.window("qemu", { workspace = "5" })
+10 -2
View File
@@ -1,6 +1,14 @@
# Makes hyprsunset do nothing to the screen by default # Makes hyprsunset do nothing to the screen by default
# Without this, the default applies some tint to the monitor # Without this, the default applies some tint to the monitor
profile { profile {
time = 00:00 time = 07:00
identity = true identity = true
} }
# To enable auto switch to nightlight, add to your .config/hypr/autostart.lua:
# o.launch_on_start("hyprsunset")
# and use the following:
# profile {
# time = 20:00
# temperature = 4000
# }
-38
View File
@@ -1,38 +0,0 @@
# Control your input devices
# See https://wiki.hypr.land/Configuring/Variables/#input
input {
# Use multiple keyboard layouts and switch between them with Left Alt + Right Alt
# kb_layout = us,dk,eu
kb_layout = us
kb_options = compose:ralt # ,grp:alts_toggle
# Change speed of keyboard repeat
repeat_rate = 40
repeat_delay = 600
# Increase sensitity for mouse/trackpack (default: 0)
sensitivity = -0.25
# enable numlock automatically
numlock_by_default = true
touchpad {
# 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
}
}
# Scroll faster in the terminal
windowrule = match:class (Alacritty|kitty), scroll_touchpad 1.5
windowrule = match:class com.mitchellh.ghostty, scroll_touchpad 0.2
device {
name = pixa3854:00-093a:0274-touchpad
sensitivity = 0.0
}
+65
View File
@@ -0,0 +1,65 @@
-- Keep only your personal input overrides here. Uncommented settings below
-- replace Omarchy's defaults.
-- Keyboard layout and options.
-- See https://wiki.hypr.land/Configuring/Basics/Variables/#input
-- hl.config({
-- input = {
-- -- Use multiple keyboard layouts and switch between them with Left Alt + Right Alt.
-- kb_layout = "us,dk,eu",
-- kb_options = "compose:caps,shift:both_capslock_cancel,grp:alts_toggle",
--
-- -- Use a specific keyboard variant if needed (e.g. intl for international keyboards).
-- kb_variant = "intl",
--
-- -- Change speed of keyboard repeat.
-- repeat_rate = 40,
-- repeat_delay = 250,
--
-- -- Start with numlock on by default.
-- numlock_by_default = true,
--
-- -- Increase sensitivity for mouse/trackpad (default: 0).
-- sensitivity = 0.35,
--
-- -- Turn off mouse acceleration (default: adaptive).
-- accel_profile = "flat",
--
-- touchpad = {
-- -- 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,
-- },
-- },
-- })
-- App-specific touchpad scroll speeds.
-- o.window("(Alacritty|kitty|foot)", { scroll_touchpad = 1.5 })
-- o.window("com.mitchellh.ghostty", { scroll_touchpad = 0.2 })
-- Enable touchpad gestures for changing workspaces.
-- See https://wiki.hypr.land/Configuring/Advanced-and-Cool/Gestures/
-- hl.gesture({ fingers = 3, direction = "horizontal", action = "workspace" })
-- Enable touchpad gestures for moving focus (helpful on scrolling layout).
-- hl.gesture({ fingers = 3, direction = "left", action = function() hl.dispatch(hl.dsp.focus({ direction = "l" })) end })
-- hl.gesture({ fingers = 3, direction = "right", action = function() hl.dispatch(hl.dsp.focus({ direction = "r" })) end })
-- disable the built-in capslock override because I actually use capslock for its original purpose
hl.config({
input = {
kb_options = "caps:capslock",
},
})
-20
View File
@@ -1,20 +0,0 @@
# See https://wiki.hyprland.org/Configuring/Monitors/
# List current monitors and resolutions possible: hyprctl monitors
# Format: monitor = [port], resolution, position, scale
# You must relaunch Hyprland after changing any envs (use Super+Esc, then Relaunch)
# Optimized for retina-class 2x displays, like 13" 2.8K, 27" 5K, 32" 6K.
env = GDK_SCALE,1.5
monitor = , preferred, auto, auto
# Good compromise for 27" or 32" 4K monitors (but fractional!)
# env = GDK_SCALE,1.75
# monitor=,preferred,auto,1.666667
# Straight 1x setup for low-resolution displays like 1080p or 1440p
# env = GDK_SCALE,1
# monitor=,preferred,auto,1
# Example for Framework 13 w/ 6K XDR Apple display
# monitor = DP-5, 6016x3384@60, auto, 2
# monitor = eDP-1, 2880x1920@120, auto, 2
-18
View File
@@ -1,18 +0,0 @@
# datagrip gets its own named workspace
windowrule = workspace name:DataGrip, match:class jetbrains-datagrip
# creddy gets some special treatment
# windowrule = workspace special:creddy, class:creddy
windowrule = float 1, match:class creddy
windowrule = size 800 600, match:class creddy
# this just gets ignored when monitor 2 isn't present, which is perfect
windowrule = monitor 1, match:class creddy
windowrule = workspace special:slack, match:class Slack
# excluding floating windows allows the unlock and quick-access popups to show in any workspace
windowrule = workspace special:1password, match:class 1Password, match:float 0
# quick-access popup doesn't resize automatically when its content changes
# windowrule = size 550 404, class:1Password, title:Quick.*
windowrule = persistent_size 1, match:class 1Password, match:title Quick.*
+19
View File
@@ -0,0 +1,19 @@
-- technically these are workspace rules, not window rules, sue me
hl.workspace_rule({ workspace = "1", monitor = "desc:Samsung Electric Company LS27A800U", default = true })
hl.workspace_rule({ workspace = "2", monitor = "desc:Seanix Technology Inc NX-EDG27X", default = true })
hl.workspace_rule({ workspace = "3", monitor = "desc:BOE 0x0BCA", default = true })
-- datagrip gets its own named workspace
o.window("jetbrains-datagrip", { workspace = "name:DataGrip" })
-- creddy gets some special treatment
-- this just gets ignored when monitor 1 isn't present, which is perfect
o.window("creddy", { float = true, size = { 800, 600 }, monitor = 1 })
o.window("chrome-app.slack.com__client-Default", { workspace = "special:slack" })
-- If Slack dies or gets killed, I can relaunch it simply by re-summoning the workspace
hl.workspace_rule({ workspace = "special:slack", on_created_empty = o.launch_webapp("https://app.slack.com/client") })
-- excluding floating windows allows the unlock and quick-access popups to show in any workspace
o.window({ class = "com.onepassword.OnePassword", float = false }, { workspace = "special:1password" })
-3
View File
@@ -1,3 +0,0 @@
workspace = 1, monitor:DP-11
workspace = 2, monitor:DP-12
workspace = 3, monitor:eDP-1
+16 -23
View File
@@ -1,42 +1,35 @@
[settings]
idiomatic_version_file_enable_tools = ["ruby"]
experimental = true
[settings.ruby]
[tools] [tools]
chezmoi = "latest" chezmoi = "latest"
cosign = "latest" claude = "latest"
"pipx:modgcli" = "latest" codex = "latest"
mold = "latest" gh = "latest"
node = "latest" node = "26.8.2"
rust = "latest"
uv = "latest" uv = "latest"
yay = "latest" mold = "latest"
k9s = "latest" rust = "latest"
awscli = "latest" awscli = "latest"
kubectl = "latest" kubectl = "latest"
difftastic = "latest" difftastic = "latest"
rg = "latest"
duckdb = "latest"
tokei = "latest" tokei = "latest"
claude = "latest"
"cargo:shikane" = "latest"
xh = "latest" xh = "latest"
"pipx:asciinema" = "latest" "pypi:asciinema" = "latest"
[tools."pypi:modgcli"]
version = "latest"
registry_url = "https://gitlab.modg.net/api/v4/groups/10/-/packages/pypi/simple/{}/"
uvx_args = "--index https://gitlab.modg.net/api/v4/groups/10/-/packages/pypi/simple"
minimum_release_age = "0s"
[tools."gitlab:tools/setconf"] [tools."gitlab:tools/setconf"]
version = "latest" version = "latest"
api_url = "https://gitlab.modg.net/api/v4" api_url = "https://gitlab.modg.net/api/v4"
bin = "setconf" bin = "setconf"
minimum_release_age = "0s"
[tools."pipx:harlequin"] [settings.upgrade]
version = "latest" auto_prune = false
extras = "postgres,odbc"
[settings.python] [settings.python]
uv_venv_auto = true uv_venv_auto = true
[settings.pipx]
registry_url = "https://gitlab.modg.net/api/v4/groups/10/-/packages/pypi/simple/{}/"
@@ -45,24 +45,37 @@ BarWidget {
return null return null
} }
// Hyprland gives named workspaces negative ids, as it does special
// (scratchpad) workspaces; only the latter have a "special:" name.
function isNamed(ws) {
return ws !== null && ws.id < 0 && String(ws.name).indexOf("special") !== 0
}
// Numbered workspaces 1-10 in order, then named ones alphabetically.
function workspaceIds() { function workspaceIds() {
var ids = [] var numbered = []
var named = []
var values = Hyprland.workspaces.values var values = Hyprland.workspaces.values
for (var i = 0; i < values.length; i++) { for (var i = 0; i < values.length; i++) {
var ws = values[i] var ws = values[i]
if (ws.id <= 0 || ws.id > 10) continue
if (root.monitor && ws.monitor !== root.monitor) continue if (root.monitor && ws.monitor !== root.monitor) continue
ids.push(ws.id) if (ws.id > 0 && ws.id <= 10) numbered.push(ws.id)
else if (root.isNamed(ws)) named.push(ws)
} }
ids.sort(function(left, right) { return left - right }) numbered.sort(function(left, right) { return left - right })
return ids named.sort(function(left, right) { return String(left.name).localeCompare(String(right.name)) })
return numbered.concat(named.map(function(ws) { return ws.id }))
} }
function focusWorkspace(id) { function focusWorkspace(id) {
if (!root.bar) return if (!root.bar) return
root.bar.run("hyprctl dispatch " + Util.shellQuote("hl.dsp.focus({ workspace = \"" + id + "\" })")) var ws = root.workspaceById(id)
var target = root.isNamed(ws)
? "name:" + String(ws.name).replace(/\\/g, "\\\\").replace(/"/g, "\\\"")
: String(id)
root.bar.run("hyprctl dispatch " + Util.shellQuote("hl.dsp.focus({ workspace = \"" + target + "\" })"))
} }
readonly property real trailingGap: root.vertical ? 0 : Style.spaceReal(1.5) readonly property real trailingGap: root.vertical ? 0 : Style.spaceReal(1.5)
@@ -92,17 +105,22 @@ BarWidget {
id: button id: button
bar: root.bar bar: root.bar
text: modelData === 10 ? "0" : String(modelData) readonly property bool named: root.isNamed(workspace)
text: named ? String(workspace.name) : (modelData === 10 ? "0" : String(modelData))
// WidgetButton's own label can't be bolded, so draw our own instead. // WidgetButton's own label can't be bolded, so draw our own instead.
labelVisible: false labelVisible: false
opacity: occupied || focused ? 1 : 0.5 opacity: occupied || focused ? 1 : 0.5
horizontalMargin: 6 horizontalMargin: 6
verticalPadding: 6 verticalPadding: 6
fixedWidth: root.vertical ? root.barSize : Style.space(20) // Numbers get a fixed slot; names get as much room as they need.
fixedWidth: root.vertical ? root.barSize
: (named ? Math.max(Style.space(20), label.implicitWidth + Style.space(12)) : Style.space(20))
fixedHeight: root.barSize fixedHeight: root.barSize
onPressed: function() { root.focusWorkspace(modelData) } onPressed: function() { root.focusWorkspace(modelData) }
Text { Text {
id: label
anchors.centerIn: parent anchors.centerIn: parent
textFormat: Text.PlainText textFormat: Text.PlainText
text: button.text text: button.text
@@ -110,7 +128,6 @@ BarWidget {
font.family: button.fontFamily font.family: button.fontFamily
font.pixelSize: button.fontSize font.pixelSize: button.fontSize
font.bold: button.focused font.bold: button.focused
font.underline: button.focused
renderType: Text.NativeRendering renderType: Text.NativeRendering
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter verticalAlignment: Text.AlignVCenter
+3 -2
View File
@@ -1,11 +1,12 @@
[Unit] [Unit]
Description=Shikane monitor manager Description=Shikane monitor manager
PartOf=graphical-session.target
After=graphical-session.target After=graphical-session.target
[Service] [Service]
Type=simple Type=simple
ExecStart=/usr/bin/mise exec -- shikane ExecStart=/usr/bin/shikane
[Install] [Install]
WantedBy=default.target WantedBy=graphical-session.target
-139
View File
@@ -1,139 +0,0 @@
{
"reload_style_on_change": true,
"layer": "top",
"position": "top",
"spacing": 0,
"height": 26,
"modules-left": ["custom/omarchy", "hyprland/workspaces"],
"modules-center": ["clock", "custom/update", "custom/voxtype", "custom/screenrecording-indicator"],
"modules-right": [
"group/tray-expander",
"bluetooth",
"network",
"pulseaudio",
"cpu",
"battery"
],
"hyprland/workspaces": {
"on-click": "activate",
"format": "{icon}",
"format-icons": {
"on-click": "activate",
"format": "{icon}",
},
},
"custom/omarchy": {
"format": "<span font='omarchy'>\ue900</span>",
"on-click": "omarchy-menu",
"on-click-right": "xdg-terminal-exec",
"tooltip-format": "Omarchy Menu\n\nSuper + Alt + Space"
},
"custom/update": {
"format": "",
"exec": "omarchy-update-available",
"on-click": "omarchy-launch-floating-terminal-with-presentation omarchy-update",
"tooltip-format": "Omarchy update available",
"signal": 7,
"interval": 21600
},
"cpu": {
"interval": 5,
"format": "󰍛",
"on-click": "omarchy-launch-or-focus-tui btop"
},
"clock": {
"format": "{:L%A %H:%M}",
"format-alt": "{:L%d %B W%V %Y}",
"tooltip": false,
"on-click-right": "omarchy-launch-floating-terminal-with-presentation omarchy-tz-select"
},
"network": {
"format-icons": ["󰤯", "󰤟", "󰤢", "󰤥", "󰤨"],
"format": "{icon}",
"format-wifi": "{icon}",
"format-ethernet": "󰀂",
"format-disconnected": "󰤮",
"tooltip-format-wifi": "{essid} ({frequency} GHz)\n⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}",
"tooltip-format-ethernet": "⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}",
"tooltip-format-disconnected": "Disconnected",
"interval": 3,
"spacing": 1,
"on-click": "omarchy-launch-wifi"
},
"battery": {
"format": "{capacity}% {icon}",
"format-discharging": "{icon}",
"format-charging": "{icon}",
"format-plugged": "",
"format-icons": {
"charging": ["󰢜", "󰂆", "󰂇", "󰂈", "󰢝", "󰂉", "󰢞", "󰂊", "󰂋", "󰂅"],
"default": ["󰁺", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"]
},
"format-full": "󰂅",
"tooltip-format-discharging": "{power:>1.0f}W↓ {capacity}%",
"tooltip-format-charging": "{power:>1.0f}W↑ {capacity}%",
"interval": 5,
"on-click": "omarchy-menu power",
"states": {
"warning": 20,
"critical": 10
}
},
"bluetooth": {
"format": "",
"format-disabled": "󰂲",
"format-off": "󰂲",
"format-connected": "󰂱",
"format-no-controller": "",
"tooltip-format": "Devices connected: {num_connections}",
"on-click": "omarchy-launch-bluetooth"
},
"pulseaudio": {
"format": "{icon}",
"on-click": "omarchy-launch-audio",
"on-click-right": "pamixer -t",
"tooltip-format": "Playing at {volume}%",
"scroll-step": 5,
"format-muted": "",
"format-icons": {
"headphone": "",
"default": ["", "", ""]
}
},
"group/tray-expander": {
"orientation": "inherit",
"drawer": {
"transition-duration": 600,
"children-class": "tray-group-item"
},
"modules": ["custom/expand-icon", "tray"]
},
"custom/expand-icon": {
"format": "",
"tooltip": false
},
"custom/screenrecording-indicator": {
"on-click": "omarchy-cmd-screenrecord",
"exec": "$OMARCHY_PATH/default/waybar/indicators/screen-recording.sh",
"signal": 8,
"return-type": "json"
},
"custom/voxtype": {
"exec": "omarchy-voxtype-status",
"return-type": "json",
"format": "{icon}",
"format-icons": {
"idle": "",
"recording": "󰍬",
"transcribing": "󰔟"
},
"tooltip": true,
"on-click-right": "omarchy-voxtype-config",
"on-click": "omarchy-voxtype-model"
},
"tray": {
"icon-size": 12,
"spacing": 17
}
}
-97
View File
@@ -1,97 +0,0 @@
@import "../omarchy/current/theme/waybar.css";
* {
background-color: @background;
/* color: @foreground; */
border: none;
border-radius: 0;
min-height: 0;
font-family: 'CaskaydiaMono Nerd Font';
font-size: 12px;
}
.modules-left {
margin-left: 8px;
}
.modules-right {
margin-right: 8px;
}
#workspaces button {
all: initial;
padding: 0 6px;
margin: 0 1.5px;
min-width: 9px;
}
#workspaces button.empty {
opacity: 0.5;
}
#workspaces button.active {
color: #bfe28c;
}
#cpu,
#battery,
#pulseaudio,
#custom-omarchy,
#custom-screenrecording-indicator,
#custom-update {
min-width: 12px;
margin: 0 7.5px;
}
#tray {
margin-right: 16px;
}
#bluetooth {
margin-right: 17px;
}
#network {
margin-right: 13px;
}
#custom-expand-icon {
margin-right: 18px;
}
tooltip {
padding: 2px;
}
#custom-update {
font-size: 10px;
}
#clock {
margin-left: 5px;
}
.hidden {
opacity: 0;
}
#custom-screenrecording-indicator {
min-width: 12px;
margin-left: 5px;
font-size: 10px;
padding-bottom: 1px;
}
#custom-screenrecording-indicator.active {
color: #a55555;
}
#custom-voxtype {
min-width: 12px;
margin: 0 0 0 7.5px;
}
#custom-voxtype.recording {
color: #a55555;
}
+16 -1
View File
@@ -7,10 +7,25 @@
// custom settings, run `zed: open default settings` from the // custom settings, run `zed: open default settings` from the
// command palette (cmd-shift-p / ctrl-shift-p) // command palette (cmd-shift-p / ctrl-shift-p)
{ {
"cli_default_open_behavior": "new_window",
"icon_theme": {
"mode": "dark",
"light": "Zed (Default)",
"dark": "Zed (Default)"
},
"outline_panel": {
"dock": "left"
},
"project_panel": {
"dock": "left"
},
"git_panel": { "git_panel": {
"dock": "left",
"tree_view": true "tree_view": true
}, },
"agent": { "agent": {
"sidebar_side": "right",
"dock": "right",
"model_parameters": [], "model_parameters": [],
"default_profile": "write" "default_profile": "write"
}, },
@@ -29,7 +44,7 @@
"theme": { "theme": {
"mode": "system", "mode": "system",
"light": "One Light", "light": "One Light",
"dark": "One Dark" "dark": "Omazed"
}, },
"languages": { "languages": {
"JSON": { "JSON": {
-2
View File
@@ -1,5 +1,3 @@
# Ctrl-Backspace: delete previous word # Ctrl-Backspace: delete previous word
"\C-H": backward-kill-word "\C-H": backward-kill-word
# Ctrl-Delete: delete next word
"\e[3;5~": kill-word
@@ -1,43 +0,0 @@
#!/usr/bin/python
import json
import subprocess
CONFIG = [
{'make': 'Samsung Electric Company', 'model': 'LS27A800U', 'position': 'left', 'workspace': 1},
{'make': 'Seanix Technology Inc', 'model': 'NX-EDG27X', 'position': 'center', 'workspace': 2},
{'make': 'BOE', 'model': '0x0BCA', 'position': 'right', 'workspace': 3},
]
p = subprocess.run(
['hyprctl', 'monitors', '-j'],
capture_output=True,
check=True,
encoding='utf-8'
)
monitors = json.loads(p.stdout)
# print('monitors:', monitors)
monitor_ids = {}
for mon in monitors:
for conf in CONFIG:
if conf['make'] == mon['make'] and conf['model'] == mon['model']:
monitor_ids[ conf['position'] ] = mon['id']
if len(monitor_ids) == len(CONFIG):
print('config matched, assigning:')
dispatches = []
for conf in CONFIG:
workspace = conf['workspace']
monitor_id = monitor_ids[ conf['position'] ]
# move workspace to desired monitor
dispatches.append(f"dispatch moveworkspacetomonitor {workspace} {monitor_id}")
# focus the workspace so that it's visible after moving
dispatches.append(f"workspace {workspace}")
cmd = ['hyprctl', '--batch', ' ; '.join(dispatches)]
print('\n'.join(cmd))
subprocess.run(cmd, check=True)
else:
print('config not matched')
@@ -1,9 +0,0 @@
#!/bin/bash
# Close all open windows that aren't in special:* workspaces
hyprctl clients -j |
jq -r '.[] | select(.workspace.name | startswith("special:") | not) | .address' |
xargs -I{} hyprctl dispatch closewindow address:{}
# Move to first workspace
hyprctl dispatch workspace 1
+7 -5
View File
@@ -1,12 +1,14 @@
#!/usr/bin/bash #!/usr/bin/bash
sudo pacman -U https://git.jfmonty2.com/jfmonty2/creddy/releases/download/v0.6.5/creddy-0.6.5-1-x86_64.pkg.tar.zst set -ex
wget -O /tmp/creddy.pkg.tar.zst \
https://git.jfmonty2.com/jfmonty2/creddy/releases/download/v0.6.5/creddy-0.6.5-1-x86_64.pkg.tar.zst
sudo pacman -U /tmp/creddy.pkg.tar.zst
sudo pacman -S unixodbc sudo pacman -S unixodbc
sudo pacman -S vulkan-radeon
sudo pacman -R amdvlk
sudo pacman -S dnsutils sudo pacman -S dnsutils
sudo pacman -S wget
yay msodbcsql17 yay msodbcsql17
yay wayfreeze-git
yay heynote-bin yay heynote-bin
yay galendae
-7
View File
@@ -1,7 +0,0 @@
#!/usr/bin/bash
# generate ids from 1-100, remove the ids of existing workspaces, take the
# first of the remaining numbers and you have the first available workspace id
FIRST_AVAILABLE=$(hyprctl workspaces -j | jq '[range(1; 100)] - map(.id) | .[0]')
hyprctl dispatch workspace $FIRST_AVAILABLE
@@ -1,8 +0,0 @@
#!/bin/bash
if [[ $(makoctl list) == '' ]]; then
makoctl restore
else
makoctl dismiss
fi
+1
View File
@@ -0,0 +1 @@
/home/joe/.local/share/JetBrains/Toolbox/scripts/datagrip
-1
View File
@@ -1 +0,0 @@
/usr/bin/zeditor
@@ -0,0 +1,9 @@
[Desktop Entry]
Version=1.0
Name=Slack
Comment=Slack
Exec=omarchy-launch-webapp "https://app.slack.com/client"
Terminal=false
Type=Application
Icon=slack
StartupNotify=true