Compare commits
119
Commits
e6f9ef0dab
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6eb9d01a65 | ||
|
|
f181f39145 | ||
|
|
0b70337bbd | ||
|
|
8756ad8857 | ||
|
|
1e4d26364a | ||
|
|
e82d86fa8f | ||
|
|
03abb54797 | ||
|
|
93672442f9 | ||
|
|
4380be3108 | ||
|
|
0ce884dfee | ||
|
|
a83a1c170b | ||
|
|
b304d302a7 | ||
|
|
292bb58b18 | ||
|
|
e73d3acc39 | ||
|
|
5b31d14829 | ||
|
|
4197230886 | ||
|
|
0e203b188d | ||
|
|
ecf01dad51 | ||
|
|
7902fe531e | ||
|
|
bb9f74b7cf | ||
|
|
10cfce1731 | ||
|
|
401220f3b5 | ||
|
|
3cf0f65164 | ||
|
|
e960f71340 | ||
|
|
6301e15e57 | ||
|
|
ccb95c439a | ||
|
|
2249d5c3e8 | ||
|
|
c1f57dd476 | ||
|
|
aa66340875 | ||
|
|
c2b4707b0a | ||
|
|
4b494eb433 | ||
|
|
a0ad6fa930 | ||
|
|
274e427ccb | ||
|
|
ba9fcc4948 | ||
|
|
bf9d61f6e2 | ||
|
|
9e966e127d | ||
|
|
09139ae41b | ||
|
|
5564df4247 | ||
|
|
30757c74ba | ||
|
|
936f535d0a | ||
|
|
066d525b4d | ||
|
|
aaa0015135 | ||
|
|
b9d807a78d | ||
|
|
7911b79b89 | ||
|
|
c4ad72b974 | ||
|
|
d8439564bc | ||
|
|
d5d68c5498 | ||
|
|
bf9780345d | ||
|
|
b9997088c8 | ||
|
|
869991df4b | ||
|
|
788914abdc | ||
|
|
9c353f257b | ||
|
|
5fee6bbf4e | ||
|
|
6fcdd86cff | ||
|
|
eeee8333b5 | ||
|
|
e4231f3746 | ||
|
|
ffff051459 | ||
|
|
e7b19ee993 | ||
|
|
8086430934 | ||
|
|
37d656c502 | ||
|
|
26ef19f975 | ||
|
|
cdf23af952 | ||
|
|
dcd59a6072 | ||
|
|
ba05ef2a6d | ||
|
|
17a129a2c4 | ||
|
|
71e1686b25 | ||
|
|
32085a5e15 | ||
|
|
4a8c582e81 | ||
|
|
a6aa367313 | ||
|
|
b6b738fc7b | ||
|
|
d772b3952d | ||
|
|
b2f8334999 | ||
|
|
81fc70a6d5 | ||
|
|
46b485dfa4 | ||
|
|
76c8fd9ae2 | ||
|
|
40e8237819 | ||
|
|
abe190f7f0 | ||
|
|
c740771df9 | ||
|
|
918aecbeaa | ||
|
|
8012fb09c6 | ||
|
|
bb0d7f2f1d | ||
|
|
63998d2965 | ||
|
|
2c5a2f1d5e | ||
|
|
cbedf361db | ||
|
|
a8cd242a26 | ||
|
|
521a105f35 | ||
|
|
ac490653e8 | ||
|
|
892e32439e | ||
|
|
8a3ae0f6bd | ||
|
|
b65af6a730 | ||
|
|
7b1f04b530 | ||
|
|
d605f4c388 | ||
|
|
be9f770dc9 | ||
|
|
13cb9fb6f0 | ||
|
|
21daca8042 | ||
|
|
0a4fc274b0 | ||
|
|
b88c8a0cf7 | ||
|
|
34db8af2dc | ||
|
|
77b2db55ec | ||
|
|
c53a58a55e | ||
|
|
da1b48c4c1 | ||
|
|
cd7e0dcea3 | ||
|
|
bc53931906 | ||
|
|
7ca3865bbb | ||
|
|
1b608ea553 | ||
|
|
4a8341a651 | ||
|
|
02b2a96fa9 | ||
|
|
52a9341bc0 | ||
|
|
407024a6ec | ||
|
|
2e84ce9375 | ||
|
|
f060f53d64 | ||
|
|
325408e34e | ||
|
|
80698baf41 | ||
|
|
f5c484b801 | ||
|
|
ac8514a229 | ||
|
|
aba90417a5 | ||
|
|
b82281800d | ||
|
|
fb938066a4 | ||
|
|
f58aca742d |
Binary file not shown.
+5
-2
@@ -5,5 +5,8 @@ alias wtr="wt remove @"
|
||||
alias ll="eza -l -g --icons"
|
||||
alias ls="eza -al --color=always --group-directories-first"
|
||||
alias g="git"
|
||||
alias neogit="nvim +Neogit"
|
||||
|
||||
alias ngit="nvim +Neogit"
|
||||
alias zdiff="nvim +Zdiff"
|
||||
alias review="nvim +'Zdiff origin/HEAD'"
|
||||
alias wm="workmux"
|
||||
alias wmd="workmux dashboard"
|
||||
|
||||
+19
-10
@@ -11,30 +11,39 @@ append_path "$HOME/.local/bin"
|
||||
append_path "$HOME/.cargo/bin"
|
||||
|
||||
export PATH
|
||||
if [ -x $(command -v bat) ]; then
|
||||
export PAGER="bat"
|
||||
fi
|
||||
|
||||
if [ test -x $(command -v mise) ]; then
|
||||
if [ -x $(command -v mise) ]; then
|
||||
eval "$(mise activate bash)"
|
||||
fi
|
||||
|
||||
if [ test -x $(command -v zoxide) ]; then
|
||||
if [ -x $(command -v zoxide) ]; then
|
||||
eval "$(zoxide init bash)"
|
||||
fi
|
||||
|
||||
if [ test -x $(command -v fzf) ]; then
|
||||
if [ -x $(command -v fzf) ]; then
|
||||
eval "$(fzf --bash)"
|
||||
fi
|
||||
|
||||
if [ -z "$SSH_CONNECTION" ]; then
|
||||
export SSH_AUTH_SOCK="/run/user/$UID/gnupg/S.gpg-agent.ssh"
|
||||
if [ -x $(command -v wt) ]; then
|
||||
eval "$(command wt config shell init bash)";
|
||||
fi
|
||||
|
||||
# Create a predictable symlink pointing to the current SSH auth socket
|
||||
auth_sock="$HOME/.ssh/ssh_auth_sock"
|
||||
if [ -n "$SSH_AUTH_SOCK" ] && [ "$SSH_AUTH_SOCK" != "$auth_sock" ]; then
|
||||
mkdir -p "$HOME/.ssh"
|
||||
ln -sf "$SSH_AUTH_SOCK" "$auth_sock"
|
||||
if [ -n "$SSH_CONNECTION" ]; then
|
||||
# Create a predictable symlink pointing to the current SSH auth socket
|
||||
auth_sock="$HOME/.ssh/ssh_auth_sock"
|
||||
if [ -n "$SSH_AUTH_SOCK" ] && [ "$SSH_AUTH_SOCK" != "$auth_sock" ]; then
|
||||
mkdir -p "$HOME/.ssh" && ln -snf "$SSH_AUTH_SOCK" "$auth_sock"
|
||||
fi
|
||||
else
|
||||
export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"
|
||||
fi
|
||||
|
||||
for _f in "$HOME"/.config/herdr/plugins/github/herdr-automatic-rename-*/shell/hook.bash; do
|
||||
[ -r "$_f" ] && { source "$_f"; break; }
|
||||
done
|
||||
|
||||
[[ -f ~/.bash_aliases ]] && . ~/.bash_aliases
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
MOZ_ENABLE_WAYLAND=1
|
||||
@@ -1,20 +0,0 @@
|
||||
# Create a predictable symlink to the current SSH auth socket.
|
||||
# tmux forces SSH_AUTH_SOCK to ~/.ssh/ssh_auth_sock globally
|
||||
# (see config/tmux/tmux.conf), so this symlink must exist for every
|
||||
# interactive shell -- not just bash login shells.
|
||||
#
|
||||
# For herdr (which lacks tmux's setenv -g): if we inherit a real
|
||||
# SSH_AUTH_SOCK, update the symlink. Then always export the symlink
|
||||
# path so new panes that didn't inherit the env still pick it up.
|
||||
set -l auth_sock "$HOME/.ssh/ssh_auth_sock"
|
||||
|
||||
# If we have a real socket (not the symlink), refresh the symlink
|
||||
if set -q SSH_AUTH_SOCK; and test "$SSH_AUTH_SOCK" != "$auth_sock"; and test -S "$SSH_AUTH_SOCK"
|
||||
mkdir -p "$HOME/.ssh"
|
||||
ln -sf "$SSH_AUTH_SOCK" "$auth_sock"
|
||||
end
|
||||
|
||||
# Always export the symlink path if it points to a live socket
|
||||
if test -S "$auth_sock"
|
||||
set -gx SSH_AUTH_SOCK "$auth_sock"
|
||||
end
|
||||
@@ -33,6 +33,9 @@ if status is-interactive
|
||||
alias oo "cd $SECOND_BRAIN"
|
||||
alias on "nvim '+Obsidian new'"
|
||||
alias os "nvim '+Obsidian search'"
|
||||
alias ngit "nvim +Neogit"
|
||||
alias zdiff "nvim '+Zdiff'"
|
||||
alias review "nvim '+Zdiff origin/HEAD'"
|
||||
alias mini "NVIM_APPNAME=mini.nvim nvim"
|
||||
end
|
||||
|
||||
@@ -65,6 +68,11 @@ if status is-interactive
|
||||
/usr/bin/jj util completion fish | source
|
||||
end
|
||||
|
||||
if command -q workmux
|
||||
alias wm "workmux"
|
||||
alias wmd "workmux dashboard"
|
||||
end
|
||||
|
||||
# NVM
|
||||
function __check_nvm --on-variable PWD --description 'Do nvm stuff'
|
||||
status --is-command-substitution; and return
|
||||
|
||||
+29
-29
@@ -12,9 +12,10 @@ ui = auto
|
||||
|
||||
[branch]
|
||||
autosetupmerge = true
|
||||
sort = -committerdate
|
||||
|
||||
[tag]
|
||||
sort = version:refname
|
||||
sort = -version:refname
|
||||
|
||||
[diff]
|
||||
algorithm = histogram
|
||||
@@ -33,11 +34,9 @@ pruneTags = true
|
||||
all = true
|
||||
|
||||
[commit]
|
||||
verbose = true
|
||||
# gpgsign = true
|
||||
|
||||
[help]
|
||||
autocorrect = prompt
|
||||
|
||||
[rerere]
|
||||
enabled = true
|
||||
autoupdate = true
|
||||
@@ -53,10 +52,9 @@ pretty = format:%C(blue)%ad%Creset %C(yellow)%h%C(green)%d%Creset %C(blue)%s %C(
|
||||
layout = BASE,MERGED + BASE,LOCAL + BASE,REMOTE
|
||||
|
||||
[merge]
|
||||
conflictStyle = diff3
|
||||
conflictStyle = zdiff3
|
||||
summary = true
|
||||
verbosity = 1
|
||||
tool = nvimdiff
|
||||
|
||||
[apply]
|
||||
whitespace = nowarn
|
||||
@@ -69,25 +67,8 @@ whitespace=fix,-indent-with-non-tab,trailing-space,cr-at-eol
|
||||
[advice]
|
||||
statusHints = false
|
||||
|
||||
[url "git@github.com:"]
|
||||
insteadOf = "gh:"
|
||||
pushInsteadOf = "github:"
|
||||
pushInsteadOf = "git://github.com/"
|
||||
|
||||
[url "git://github.com/"]
|
||||
insteadOf = "github:"
|
||||
|
||||
[url "git@gist.github.com:"]
|
||||
insteadOf = "gst:"
|
||||
pushInsteadOf = "gist:"
|
||||
pushInsteadOf = "git://gist.github.com/"
|
||||
|
||||
[alias]
|
||||
|
||||
# annex
|
||||
xl = annex list
|
||||
xg = annex list
|
||||
|
||||
# add
|
||||
a = add
|
||||
padd = add --patch
|
||||
@@ -127,16 +108,16 @@ last = diff HEAD^
|
||||
# log
|
||||
l = log --graph --date=short
|
||||
la = log --graph --date=short --all
|
||||
lg = log --pretty=format:'%Cred%h%Creset - %C(blue bold)[%ad] %Creset%C(yellow)%d %Creset%s %C(green bold)<%an>%Creset' --abbrev-commit --date=short
|
||||
llg = log --pretty=format:'%Cred%h%Creset - %C(blue bold)[%ad] %Creset%C(yellow)%d %Creset%s %C(green bold)<%an>%Creset' --abbrev-commit --date=short --graph
|
||||
lls = git log --pretty=format:"[%h] %ae, %ar: %s" --stat
|
||||
lc = log ORIG_HEAD.. --stat --no-merges
|
||||
wu = log -p origin..@{0}
|
||||
changes = log --pretty=format:\"%h %cr %cn %Cgreen%s%Creset\" --name-status
|
||||
short = log --pretty=format:\"%h %cr %cn %Cgreen%s%Creset\"
|
||||
changelog = log --pretty=format:\" * %s\"
|
||||
shortnocolor = log --pretty=format:\"%h %cr %cn %s\"
|
||||
lg = log --pretty=format:'%Cred%h%Creset - %C(blue bold)[%ad] %Creset%C(yellow)%d %Creset%s %C(green bold)<%an>%Creset' --abbrev-commit --date=short
|
||||
llg = log --pretty=format:'%Cred%h%Creset - %C(blue bold)[%ad] %Creset%C(yellow)%d %Creset%s %C(green bold)<%an>%Creset' --abbrev-commit --date=short --graph
|
||||
lls = git log --pretty=format:"[%h] %ae, %ar: %s" --stat
|
||||
showfiles = show --name-only
|
||||
lc = log ORIG_HEAD.. --stat --no-merges
|
||||
|
||||
# rebase
|
||||
rc = rebase --continue
|
||||
@@ -159,7 +140,6 @@ diffstat = diff --stat
|
||||
changes = diff --name-status -r
|
||||
|
||||
# stash
|
||||
stashes = stash list
|
||||
ss = stash
|
||||
sl = stash list
|
||||
sa = stash apply
|
||||
@@ -178,7 +158,6 @@ dt = difftools
|
||||
|
||||
rv = review
|
||||
ls = ls-files
|
||||
gconf = config --global
|
||||
|
||||
c = clone --recursive
|
||||
bc = clone --bare
|
||||
@@ -189,3 +168,24 @@ wtl = worktree list
|
||||
wtr = worktree remove
|
||||
|
||||
ignore = "!gi() { curl -sL https://www.toptal.com/developers/gitignore/api/$@ ;}; gi"
|
||||
|
||||
[url "git@github.com:"]
|
||||
insteadOf = "gh:"
|
||||
pushInsteadOf = "github:"
|
||||
pushInsteadOf = "git://github.com/"
|
||||
|
||||
[url "git://github.com/"]
|
||||
insteadOf = "github:"
|
||||
|
||||
[url "git@gist.github.com:"]
|
||||
insteadOf = "gst:"
|
||||
pushInsteadOf = "gist:"
|
||||
pushInsteadOf = "git://gist.github.com/"
|
||||
|
||||
[credential "https://git.nca.uwo.ca"]
|
||||
helper =
|
||||
helper = !tea login helper
|
||||
|
||||
[credential "http://gitea.sagacity.ca"]
|
||||
helper =
|
||||
helper = !tea login helper
|
||||
|
||||
@@ -1,21 +1,47 @@
|
||||
onboarding = false
|
||||
|
||||
[ui]
|
||||
show_agent_labels_on_pane_borders = true
|
||||
pane_gaps = false
|
||||
pane_borders = true
|
||||
prompt_new_tab_name = false
|
||||
confirm_close = false
|
||||
|
||||
# set -g mouse on
|
||||
mouse_capture = true
|
||||
|
||||
# status-right had the zoom flag followed by #h
|
||||
tab_bar_right = [{ type = "zoom" }, { type = "hostname" }]
|
||||
|
||||
# set -g set-titles on / set -g set-titles-string '#h:#W', where tmux's #W was
|
||||
# the basename of the pane cwd. This is what Hyprland shows in the group bar,
|
||||
# and it resolves on the server so remote sessions name the remote host.
|
||||
window_title = "{hostname}: {workspace}"
|
||||
|
||||
[experimental]
|
||||
pane_history = true
|
||||
allow_nested = true
|
||||
|
||||
[theme]
|
||||
name = "gruvbox"
|
||||
auto_switch = true
|
||||
name = "terminal"
|
||||
|
||||
[theme.custom]
|
||||
panel_bg = "black"
|
||||
|
||||
[terminal]
|
||||
new_cwd = "follow"
|
||||
|
||||
[keys]
|
||||
prefix = "ctrl+space"
|
||||
reload_config = "prefix+ctrl+r"
|
||||
reload_config = "prefix+q"
|
||||
help = "prefix+?"
|
||||
detach = "prefix+d"
|
||||
zoom = "prefix+z"
|
||||
copy_mode = "prefix+["
|
||||
last_pane = "prefix+;"
|
||||
focus_agent = "prefix+alt+1..9"
|
||||
switch_workspace = "prefix+shift+1..9"
|
||||
|
||||
|
||||
[remote]
|
||||
manage_ssh_config = true
|
||||
@@ -47,5 +73,23 @@ type = "plugin_action"
|
||||
command = "herdr-zoxide.browse"
|
||||
description = "Browse zoxide directories"
|
||||
|
||||
[[keys.command]]
|
||||
key = "prefix+a"
|
||||
type = "plugin_action"
|
||||
command = "annotate.capture"
|
||||
description = "annotate text"
|
||||
|
||||
[[keys.command]]
|
||||
key = "prefix+shift+a"
|
||||
type = "plugin_action"
|
||||
command = "annotate.copy-context"
|
||||
description = "copy annotations as context"
|
||||
|
||||
[[keys.command]]
|
||||
key = "prefix+m"
|
||||
type = "plugin_action"
|
||||
command = "annotate.manage"
|
||||
description = "manage annotations"
|
||||
|
||||
[ui.toast]
|
||||
delivery = "herdr"
|
||||
|
||||
@@ -1,707 +0,0 @@
|
||||
-- require("keybinds.lua")
|
||||
hl.monitor({ output = "desc:Lenovo Group Limited 0x41A0", mode = "highrr", position = "0x0", scale = "1.0" })
|
||||
hl.monitor({ output = "desc:Samsung Display Corp. 0x4143", mode = "highrr", position = "0x0", scale = "2" })
|
||||
hl.monitor({ output = "desc:LG Electronics LG HDR 4K 406NTZN74597", mode = "preferred", position = "auto-right", scale = "1.333333" })
|
||||
hl.monitor({ output = "desc:Ancor Communications Inc ASUS MG28U 0x00009B77", mode = "preferred", position = "auto-right", scale = "1.333333" })
|
||||
|
||||
-- hl.monitor({ output = "eDP-1", mode = "preferred", position = "0x0", scale = "1.0" })
|
||||
|
||||
hl.monitor({ output = "desc:LG Electronics LG HDR WQHD 0x0006530C", mode = "preferred", position = "auto-up", scale = "1.333333" })
|
||||
hl.monitor({ output = "CAP Capture 0x00000001", mode = "1920x1080@60", position = "auto-down", scale = 1 })
|
||||
hl.monitor({ output = "HDMI-A-1", mode = "1920x1080@60", position = "auto-down", scale = 1 })
|
||||
|
||||
hl.monitor({ output = "desc:Ancor Communications Inc ASUS PB238 DCLMTF074371", mode = "preferred", position = "auto", scale = "1.0" })
|
||||
hl.monitor({ output = "desc:Lenovo Group Limited L15 U133R0A2", mode = "preferred", position = "auto-left", scale = 1 })
|
||||
hl.monitor({ output = "desc:Lenovo Group Limited M15 V30F2A15", mode = "preferred", position = "auto-left", scale = 1 })
|
||||
hl.monitor({ output = "desc:Proteon TYPE-C 8R33926O00QS", mode = "preferred", position = "auto-right", scale = "1.0" })
|
||||
hl.monitor({ output = "desc:Stargate Technology TYPE-C", mode = "preferred", position = "auto-right", scale = "1.0" })
|
||||
hl.monitor({ output = "desc:GWD ARZOPA 000000000000", mode = "preferred", position = "auto-left", scale = "1.0" })
|
||||
hl.monitor({ output = "desc:BNQ BenQ EX3203R 7CL00509019", mode = "preferred", position = "auto", scale = 1 })
|
||||
hl.monitor({ output = "desc:BNQ BenQ EX3501R N4M05650019", mode = "preferred", position = "auto-right", scale = "1.0" })
|
||||
hl.monitor({ output = "desc:Dell Inc. DELL U3818DW 97F8P8AD0HEL", mode = "preferred", position = "auto-left", scale = "1.0" })
|
||||
hl.monitor({ output = "desc:Microstep MSI MAG342CQR DB6H252300057", mode = "preferred", position = "auto-right", scale = "1.0" })
|
||||
|
||||
hl.config({
|
||||
input = {
|
||||
kb_layout = "us",
|
||||
kb_variant = ",qwerty",
|
||||
-- kb_model =
|
||||
-- kb_options = ctrl:nocaps
|
||||
kb_options = "caps:ctrl_modifier,compose:ralt",
|
||||
-- kb_options = compose:ralt
|
||||
follow_mouse = 1,
|
||||
repeat_rate = 40,
|
||||
repeat_delay = 600,
|
||||
|
||||
touchpad = {
|
||||
natural_scroll = true,
|
||||
disable_while_typing = true,
|
||||
clickfinger_behavior = true,
|
||||
scroll_factor = 0.7,
|
||||
},
|
||||
scroll_method = 2,
|
||||
|
||||
sensitivity = 0, -- -1.0 - 1.0, 0 means no modification.
|
||||
},
|
||||
|
||||
ecosystem = {
|
||||
no_update_news = true,
|
||||
enforce_permissions = false,
|
||||
},
|
||||
|
||||
general = {
|
||||
gaps_in = 0,
|
||||
gaps_out = 0,
|
||||
border_size = 2,
|
||||
allow_tearing = true,
|
||||
snap = {
|
||||
enabled = true
|
||||
},
|
||||
col = {
|
||||
active_border = { colors = { "rgba(33ccffee)", "rgba(00ff99ee)" }, angle = 45 },
|
||||
inactive_border = "rgba(595959aa)",
|
||||
},
|
||||
|
||||
layout = "master"
|
||||
},
|
||||
|
||||
master = {
|
||||
allow_small_split = true,
|
||||
mfact = 0.50,
|
||||
new_status = "master",
|
||||
orientation = "center",
|
||||
},
|
||||
|
||||
dwindle = {
|
||||
preserve_split = true,
|
||||
smart_split = false,
|
||||
force_split = 2,
|
||||
},
|
||||
|
||||
scrolling = {
|
||||
column_width = 1.0
|
||||
},
|
||||
|
||||
decoration = {
|
||||
rounding = 3,
|
||||
active_opacity = 1.0,
|
||||
inactive_opacity = 1.0,
|
||||
dim_inactive = false,
|
||||
dim_special = 0.0,
|
||||
dim_strength = 0.2,
|
||||
|
||||
shadow = {
|
||||
enabled = false,
|
||||
range = 2,
|
||||
render_power = 3,
|
||||
color = "rgba(1a1a1aee)",
|
||||
},
|
||||
|
||||
blur = {
|
||||
enabled = false,
|
||||
size = 3,
|
||||
passes = 1,
|
||||
vibrancy = 0.1696,
|
||||
},
|
||||
},
|
||||
|
||||
group = {
|
||||
groupbar = {
|
||||
enabled = false
|
||||
}
|
||||
},
|
||||
|
||||
misc = {
|
||||
disable_hyprland_logo = true,
|
||||
disable_splash_rendering = true,
|
||||
focus_on_activate = true,
|
||||
mouse_move_enables_dpms = true,
|
||||
animate_manual_resizes = true,
|
||||
mouse_move_focuses_monitor = true,
|
||||
enable_swallow = true,
|
||||
enable_anr_dialog = false,
|
||||
force_default_wallpaper = true,
|
||||
},
|
||||
|
||||
xwayland = {
|
||||
force_zero_scaling = true
|
||||
},
|
||||
|
||||
animations = {
|
||||
enabled = true,
|
||||
|
||||
-- animation = borderangle, 1, 50, linear, loop
|
||||
|
||||
-- bezier = generic, 0.05, 0.9, 0.1, 1.08
|
||||
-- bezier = almostLinear,0.5,0.5,0.75,1.0
|
||||
-- bezier = quick,0.15,0,0.1,1
|
||||
--
|
||||
-- animation = windows, 1, 3, almostLinear
|
||||
-- animation = windowsOut, 1, 3, quick
|
||||
-- animation = windowsIn, 1, 3, quick
|
||||
-- animation = border, 1, 10, generic
|
||||
-- animation = fade, 1, 3, almostLinear
|
||||
-- animation = workspaces, 1, 1, quick
|
||||
-- animation = layers, 1, 3, quick
|
||||
|
||||
}
|
||||
})
|
||||
|
||||
hl.curve("almostLinear", { type = "bezier", points = { { 0.5, 0.5 }, { 0.75, 1.0 } } })
|
||||
hl.curve("generic", { type = "bezier", points = { { 0.5, 0.9 }, { 0.1, 1.08 } } })
|
||||
hl.curve("quick", { type = "bezier", points = { { 0.15, 0 }, { 0.1, 1.0 } } })
|
||||
hl.curve("overshoot", { type = "bezier", points = { { 0.5, 0.9 }, { 0.1, 1.1 } } })
|
||||
hl.curve("rubber", { type = "spring", mass = 1, stiffness = 70, dampening = 10 })
|
||||
|
||||
hl.animation({ leaf = "windows", enabled = true, speed = 3, bezier = "almostLinear" })
|
||||
hl.animation({ leaf = "border", enabled = true, speed = 1, spring = "rubber" })
|
||||
hl.animation({ leaf = "workspaces", enabled = true, speed = 1, bezier = "quick" })
|
||||
hl.animation({ leaf = "layers", enabled = true, speed = 3, bezier = "quick" })
|
||||
hl.animation({ leaf = "fade", enabled = true, speed = 3, bezier = "almostLinear" })
|
||||
|
||||
-- local terminal = "ghostty -e"
|
||||
local terminal = "foot"
|
||||
local notify_cmd = "notify-send"
|
||||
local browser = "gtk-launch firefox.desktop"
|
||||
local webapp = "chromium --new-window --ozone-platform=wayland --app="
|
||||
local music = "gtk-launch spotify.desktop"
|
||||
|
||||
local LEADER = "SUPER + "
|
||||
local HYPR = "SUPER + CONTROL + SHIFT + ALT + "
|
||||
|
||||
function sysinfo()
|
||||
local mem = io.popen("free -h | awk '/^Mem/ {print $3 \"/\" $2}'"):read("*a")
|
||||
local cpu = io.popen("top -bn1 | grep 'Cpu(s)' | awk '{print $2 + $4 \"%\"}'"):read("*a")
|
||||
local battery = io.popen("acpi -b | awk -F', ' '{print $2}'"):read("*a")
|
||||
local time = os.date("%Y-%m-%d %H:%M:%S")
|
||||
local monitor = hl.get_active_monitor()
|
||||
local workspace_id = monitor.active_workspace.id
|
||||
local mesg = "System Info"
|
||||
.. "\nDate: " .. time
|
||||
.. "\nFocused monitor: " .. monitor.name
|
||||
.. "\nWorkspace: " .. workspace_id
|
||||
.. "\nBattery: " .. battery
|
||||
.. "CPU: " .. cpu .. " MEM: " .. mem
|
||||
|
||||
hl.notification.create({ text = mesg, icon = "hint", duration = 5000 })
|
||||
end
|
||||
|
||||
function dispatch_focus_or_launch(opts)
|
||||
return function()
|
||||
focus_or_launch(opts)
|
||||
end
|
||||
end
|
||||
|
||||
function focus_or_launch(opts)
|
||||
local match = opts.match
|
||||
local cmd = opts.cmd
|
||||
local field = opts.field or "class" -- class, title, initialClass, initialTitle
|
||||
local use_workspace = opts.use_workspace ~= false
|
||||
|
||||
local clients = hl.get_windows()
|
||||
|
||||
for _, client in ipairs(clients) do
|
||||
local value = client[field]
|
||||
if value and string.find(string.lower(value), string.lower(match), 1, true) then
|
||||
if use_workspace and client.workspace and client.workspace.id then
|
||||
hl.dispatch(hl.dsp.focus({
|
||||
workspace = client.workspace.id,
|
||||
on_current_monitor = true,
|
||||
}))
|
||||
end
|
||||
hl.dispatch(hl.dsp.focus({
|
||||
window = "address:" .. client.address
|
||||
}))
|
||||
|
||||
local layout = client.layout
|
||||
if not (layout and layout.name == "master" and layout.is_master) then
|
||||
hl.dispatch(hl.dsp.layout("swapwithmaster"))
|
||||
end
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
hl.exec_cmd(cmd)
|
||||
end
|
||||
|
||||
function fetch_or_launch(opts)
|
||||
local match = opts.match
|
||||
local cmd = opts.cmd
|
||||
local field = opts.field or "class" -- class, title, initialClass, initialTitle
|
||||
local use_workspace = opts.use_workspace ~= false
|
||||
|
||||
local clients = hl.get_windows()
|
||||
|
||||
local active_workspace = hl.get_active_workspace()
|
||||
|
||||
for _, client in ipairs(clients) do
|
||||
local value = client[field]
|
||||
if value and string.find(string.lower(value), string.lower(match), 1, true) then
|
||||
if use_workspace and client.workspace and client.workspace.id then
|
||||
hl.dispatch(hl.dsp.window.move({
|
||||
workspace = active_workspace,
|
||||
on_current_monitor = true,
|
||||
window = client,
|
||||
}))
|
||||
end
|
||||
|
||||
hl.dispatch(hl.dsp.focus({window = client}))
|
||||
|
||||
local layout = client.layout
|
||||
if not (layout and layout.name == "master" and layout.is_master) then
|
||||
hl.dispatch(hl.dsp.layout("swapwithmaster"))
|
||||
end
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
hl.exec_cmd(cmd)
|
||||
end
|
||||
|
||||
function toggle_master()
|
||||
local ws = hl.get_active_workspace()
|
||||
if not ws then
|
||||
return
|
||||
end
|
||||
|
||||
local mfact = nil
|
||||
|
||||
for _, win in ipairs(ws:get_windows()) do
|
||||
local layout = win.layout
|
||||
if layout and layout.name == "master" and layout.is_master then
|
||||
mfact = math.floor(layout.perc_master * 100 + 0.5) / 100
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if mfact == 0.7 then
|
||||
mfact = 0.5
|
||||
else
|
||||
mfact = 0.7
|
||||
end
|
||||
hl.dispatch(hl.dsp.layout("mfact exact " .. mfact))
|
||||
end
|
||||
|
||||
-- hl.bind(LEADER .. "return", function()
|
||||
-- focus_or_launch({
|
||||
-- match = "terminal-tmux",
|
||||
-- field = "class",
|
||||
-- cmd = "gtk-launch tmux.desktop",
|
||||
-- })
|
||||
-- end, { description = "Open tmux terminal" })
|
||||
|
||||
-- hl.bind(LEADER .. "SHIFT + return", function()
|
||||
-- focus_or_launch({
|
||||
-- match = "terminal-herdr",
|
||||
-- field = "class",
|
||||
-- cmd = "gtk-launch herdr.desktop",
|
||||
-- })
|
||||
-- end, { description = "Open herdr terminal" })
|
||||
|
||||
hl.bind(LEADER .. "SHIFT + return", hl.dsp.exec_cmd("gtk-launch herdr.desktop"), { description = "Open herdr terminal" })
|
||||
hl.bind(LEADER .. "return", hl.dsp.exec_cmd("gtk-launch tmux.desktop"), { description = "Open tmux terminal" })
|
||||
|
||||
hl.bind(LEADER .. "B", hl.dsp.exec_raw(browser), { description = "Open browser" })
|
||||
hl.bind(LEADER .. "T", hl.dsp.exec_raw(terminal .. " -e btop"), { description = "Open system monitor" })
|
||||
hl.bind(LEADER .. "S", hl.dsp.exec_raw("ostt launch --paste"), { description = "Open ostt" })
|
||||
-- hl.bind(LEADER .. "I", hl.dsp.exec_cmd(notify_cmd .. " $(~/.local/bin/sysinfo)"), { description = "Show system info" })
|
||||
hl.bind(LEADER .. "I", function()
|
||||
sysinfo()
|
||||
end, { description = "Show system info" })
|
||||
|
||||
-- Open rofi on first press, closes it on second
|
||||
hl.bind(LEADER .. "Space", hl.dsp.exec_raw("rofi -show combi --modes combi"), { release = true, description = "Open Application Menu" })
|
||||
hl.bind(LEADER .. "SHIFT + SPACE", hl.dsp.exec_cmd("~/.local/bin/hyprland-fetch-client"),
|
||||
{ release = true, description = "Fetch client" })
|
||||
hl.bind(LEADER .. "CONTROL + SPACE", hl.dsp.exec_cmd("~/.local/bin/hyprland-focus-client"),
|
||||
{ release = true, description = "Focus client" })
|
||||
hl.bind(LEADER .. "CONTROL + return", hl.dsp.exec_cmd("~/.local/bin/hyprland-tmux-session"),
|
||||
{ release = true, description = "Tmux session switcher" })
|
||||
|
||||
|
||||
hl.bind(HYPR .. "V", hl.dsp.exec_cmd("pavucontrol"), { description = "Volume control" })
|
||||
hl.bind(HYPR .. "B", hl.dsp.exec_cmd("blueberry"), { description = "Bluetooth manager" })
|
||||
|
||||
hl.bind(HYPR .. "semicolon", hl.dsp.exec_cmd("~/.local/bin/set-wallpaper.sh categories/quotes"), { description = "get new wallpaper" })
|
||||
|
||||
hl.bind(HYPR .. "A", dispatch_focus_or_launch({
|
||||
match = "Goose",
|
||||
field = "class",
|
||||
cmd = "gtk-launch goose-desktop.desktop"
|
||||
}), { description = "Goose Desktop" })
|
||||
|
||||
hl.bind(HYPR .. "C", dispatch_focus_or_launch({
|
||||
match = "chrome-chatgpt.com",
|
||||
cmd = "gtk-launch ChatGPT.desktop",
|
||||
}), { description = "ChatGPT" })
|
||||
|
||||
hl.bind(HYPR .. "O", dispatch_focus_or_launch({
|
||||
match = "chrome-outlook.office.com",
|
||||
cmd = "gtk-launch Outlook.desktop",
|
||||
}), { description = "Email" })
|
||||
|
||||
hl.bind(HYPR .. "T", dispatch_focus_or_launch({
|
||||
match = "chrome-teams.microsoft.com",
|
||||
cmd = "gtk-launch Team.desktop",
|
||||
}), { description = "UWO Team" })
|
||||
|
||||
hl.bind(HYPR .. "Y", dispatch_focus_or_launch({
|
||||
match = "chrome-youtube.com",
|
||||
cmd = "gtk-launch YouTube.desktop",
|
||||
}), { description = "YouTube" })
|
||||
|
||||
hl.bind(HYPR .. "W", dispatch_focus_or_launch({
|
||||
match = "chrome-web.whatsapp.com",
|
||||
cmd = "gtk-launch WhatsApp.desktop",
|
||||
}), { description = "WhatsApp" })
|
||||
|
||||
hl.bind(HYPR .. "G", dispatch_focus_or_launch({
|
||||
match = "chrome-www.gmail.com",
|
||||
cmd = webapp .. "https://www.gmail.com/",
|
||||
}), { description = "Google" })
|
||||
|
||||
hl.bind(HYPR .. "D", dispatch_focus_or_launch({
|
||||
match = "chrome-discord.com",
|
||||
cmd = "gtk-launch Discord.desktop"
|
||||
}), { description = "Discord" })
|
||||
|
||||
hl.bind(HYPR .. "M", dispatch_focus_or_launch({
|
||||
match = "chrome-messages.google.com",
|
||||
cmd = "gtk-launch \"Google Messages.desktop\"",
|
||||
}), { description = "Google Messages" })
|
||||
|
||||
hl.bind(HYPR .. "S", dispatch_focus_or_launch({
|
||||
match = "Spotify",
|
||||
cmd = music,
|
||||
}), { description = "Music" })
|
||||
|
||||
hl.bind(HYPR .. "F", dispatch_focus_or_launch({
|
||||
match = "pcmanfm",
|
||||
cmd = "pcmanfm",
|
||||
}), { description = "File Manager" })
|
||||
|
||||
hl.bind(LEADER .. "slash",
|
||||
hl.dsp.exec_cmd("ROFI_PASS_BACKEND=wtype ROFI_PASS_CLIPBOARD_BACKEND=wl-clipboard ~/.local/bin/rofi-pass"))
|
||||
|
||||
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"), { repeating = true, description = "Volume down" })
|
||||
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+"), { repeating = true, description = "Volume up" })
|
||||
hl.bind("XF86AudioMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"), { description = "Toggle mute" })
|
||||
hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"), { description = "Toggle mic mute" })
|
||||
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("brightnessctl s 10%+"), { repeating = true, description = "Brightness up" })
|
||||
hl.bind("XF86MonBrightnessDown", hl.dsp.exec_cmd("brightnessctl s 10%-"), { repeating = true, description = "Brightness down" })
|
||||
hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play-pause"), { description = "Play/pause media" })
|
||||
hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), { description = "Previous media" })
|
||||
hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), { description = "Next media" })
|
||||
|
||||
hl.bind(LEADER .. "Y", hl.dsp.exec_cmd("makoctl dismiss"), { description = "Dismiss notifications" })
|
||||
|
||||
|
||||
hl.bind(LEADER .. "W", hl.dsp.window.close(), { description = "Window: Close" })
|
||||
hl.bind(LEADER .. "F", hl.dsp.window.fullscreen({ mode = "fullscreen", action = "toggle" }),
|
||||
{ description = "Window: Toggle fullscreen" })
|
||||
hl.bind(LEADER .. "CTRL + F", hl.dsp.window.fullscreen_state({ internal = 2, client = 0, action = "toggle" }),
|
||||
{ description = "Window: Toggle fullscreen state 2" })
|
||||
hl.bind(LEADER .. "ALT + F", hl.dsp.window.fullscreen_state({ internal = 0, client = 2, action = "toggle" }),
|
||||
{ description = "Window: Toggle fullscreen state 2" })
|
||||
hl.bind(LEADER .. "SHIFT + F", hl.dsp.window.float({ action = "toggle" }), { description = "Window: Toggle floating" })
|
||||
|
||||
hl.bind(LEADER .. "P", hl.dsp.window.pseudo(), { description = "Window: Toggle pseudo tiling" })
|
||||
|
||||
hl.bind(LEADER .. "A", hl.dsp.window.alter_zorder({ mode = "top" }), { description = "Window: Move to top" })
|
||||
|
||||
hl.bind(LEADER .. "left", hl.dsp.focus({ direction = "l" }), { description = "Window: Focus left" })
|
||||
hl.bind(LEADER .. "right", hl.dsp.focus({ direction = "r" }), { description = "Window: Focus right" })
|
||||
hl.bind(LEADER .. "up", hl.dsp.focus({ direction = "u" }), { description = "Window: Focus up" })
|
||||
hl.bind(LEADER .. "down", hl.dsp.focus({ direction = "d" }), { description = "Window: Focus down" })
|
||||
|
||||
hl.bind(LEADER .. "H", hl.dsp.focus({ direction = "l" }), { description = "Window: Focus left" })
|
||||
hl.bind(LEADER .. "L", hl.dsp.focus({ direction = "r" }), { description = "Window: Focus right" })
|
||||
hl.bind(LEADER .. "K", hl.dsp.focus({ direction = "u" }), { description = "Window: Focus up" })
|
||||
hl.bind(LEADER .. "J", hl.dsp.focus({ direction = "d" }), { description = "Window: Focus down" }) -- hl.bind("SUPER + H", hl.dsp.window.resize("left"), { repeating = true, description = "Window: Resize left" })
|
||||
|
||||
-- hl.bind(LEADER .. "z", hl.dsp.focus({ last = true }), { description = "Window: Focus last" })
|
||||
hl.bind(LEADER .. "Z", hl.dsp.focus({ urgent_or_last = true }), { description = "Window: Focus last" })
|
||||
|
||||
hl.bind(LEADER .. "ALT + period", function()
|
||||
hl.dispatch(hl.dsp.layout("cycleprev"))
|
||||
end, { description = "Window: Swap with next" })
|
||||
hl.bind(LEADER .. "ALT + comma", function()
|
||||
hl.dispatch(hl.dsp.layout("cyclenext"))
|
||||
end, { description = "Window: Swap with prev" })
|
||||
|
||||
hl.bind("ALT + Tab", hl.dsp.window.cycle_next(), { description = "Window: Cycle next" })
|
||||
hl.bind("ALT + SHIFT + Tab", hl.dsp.window.cycle_next({ next = false }), { description = "Window: Cycle prev" })
|
||||
hl.bind(LEADER .. "ALT + Tab", hl.dsp.focus({ workspace = "previous", on_current_monitor = true }),
|
||||
{ description = "Window: Focus previous in workspace" })
|
||||
|
||||
-- arrange split ratio
|
||||
hl.bind(LEADER .. "X", function()
|
||||
toggle_master()
|
||||
end)
|
||||
-- hl.bind(LEADER .. "equal", hl.dsp.layout("mfact exact 0.5"))
|
||||
hl.bind(LEADER .. "M", hl.dsp.layout("swapwithmaster"))
|
||||
|
||||
-- hl.bind(LEADER .. "M", hl.dsp.layout("rollnext"))
|
||||
hl.bind(LEADER .. "period", function()
|
||||
hl.dispatch(hl.dsp.layout("cycleprev"))
|
||||
hl.dispatch(hl.dsp.layout("swapwithmaster"))
|
||||
-- hl.dispatch(hl.dsp.layout("focus r"))
|
||||
end, { description = "Layout: Cycle next" })
|
||||
|
||||
hl.bind(LEADER .. "comma", function()
|
||||
hl.dispatch(hl.dsp.layout("cyclenext"))
|
||||
hl.dispatch(hl.dsp.layout("swapwithmaster"))
|
||||
-- hl.dispatch(hl.dsp.layout("focus l"))
|
||||
end, { description = "Layout: Cycle previous" })
|
||||
|
||||
hl.bind(LEADER .. "semicolon", hl.dsp.workspace.toggle_special("special"))
|
||||
hl.bind(LEADER .. "SHIFT + semicolon", hl.dsp.window.move({ workspace = "special:special", follow = false }),
|
||||
{ description = "Window: Move to special workspace" })
|
||||
hl.bind(LEADER .. "C", hl.dsp.window.center(), { description = "Window: Center" })
|
||||
|
||||
|
||||
hl.bind(LEADER .. "Escape", hl.dsp.exec_raw("loginctl lock-session"), { description = "Lock screen" })
|
||||
hl.bind(LEADER .. "SHIFT + escape", hl.dsp.exec_raw("systemctl suspend"), { description = "Suspend" })
|
||||
hl.bind(LEADER .. "ALT + escape", hl.dsp.exec_raw("uwsm stop,"), { description = "Stop UWSM" })
|
||||
hl.bind(LEADER .. "CTRL + escape", hl.dsp.exec_raw("reboot"), { description = "Reboot" })
|
||||
hl.bind(LEADER .. "SHIFT + CTRL + escape", hl.dsp.exec_raw("systemctl poweroff"), { description = "Power off" })
|
||||
|
||||
-- hl.bind("SUPER + L", hl.dsp.window.resize("right"), { repeating = true, description = "Window: Resize right" })
|
||||
-- hl.bind("SUPER + J", hl.dsp.window.resize("down"), { repeating = true, description = "Window: Resize down" })
|
||||
-- hl.bind("SUPER + K", hl.dsp.window.resize("up"), { repeating = true, description = "Window: Resize up" })
|
||||
|
||||
-- # Change Workspace Mode
|
||||
--
|
||||
-- bind = SUPER SHIFT, X, workspaceopt, allfloat
|
||||
-- bind = SUPER SHIFT, X, exec, $notifycmd "Toggled All Float Mode"
|
||||
|
||||
-- bind = SUPER SHIFT, Z, workspaceopt, allpseudo
|
||||
-- bind = SUPER SHIFT, Z, exec, $notifycmd "Toggled All Pseudo Mode"
|
||||
|
||||
hl.on("keybinds.submap", function(name)
|
||||
if name == "" then
|
||||
hl.notification.create({ text = "Exited submap", duration = 2000, icon = "hint" })
|
||||
return
|
||||
end
|
||||
hl.notification.create({ text = "Entered submap: " .. name, duration = 2000, icon = "hint" })
|
||||
end)
|
||||
|
||||
function window_resize_percentage(px, py)
|
||||
local win = hl.get_active_window()
|
||||
if win == nil or win.monitor == nil then
|
||||
return
|
||||
end
|
||||
local mon = hl.get_monitor(win.monitor)
|
||||
|
||||
if mon == nil or mon.size == nil or mon.size.height == nil or mon.size.width == nil then
|
||||
return
|
||||
end
|
||||
local sx = math.floor(mon.size.width * px)
|
||||
local sy = math.floor(mon.size.height * py)
|
||||
if not win.floating then
|
||||
hl.dispatch(hl.dsp.window.float({ action = "set" }))
|
||||
end
|
||||
if win.fullscreen then
|
||||
hl.dispatch(hl.dsp.window.fullscreen({ action = "unset" }))
|
||||
end
|
||||
hl.dispatch(hl.dsp.window.resize({ x = sx, y = sy, relative = false }))
|
||||
end
|
||||
|
||||
hl.bind(LEADER .. "F10", hl.dsp.submap("notification menu"))
|
||||
hl.define_submap("notification menu", function()
|
||||
hl.bind("Q", hl.dsp.exit())
|
||||
hl.bind("S", function()
|
||||
hl.dispatch(hl.dsp.exec_cmd("makoctl -a do-not-disturb"))
|
||||
hl.dispatch(hl.dsp.submap("reset"))
|
||||
end)
|
||||
hl.bind("N", function()
|
||||
hl.dispatch(hl.dsp.exec_cmd("makoctl -r do-not-disturb"))
|
||||
hl.dispatch(hl.dsp.submap("reset"))
|
||||
end)
|
||||
|
||||
hl.bind("M", function()
|
||||
hl.dispatch(hl.dsp.exec_cmd("hyprland-toggle-monitor eDP-1"))
|
||||
hl.dispatch(hl.dsp.submap("reset"))
|
||||
end)
|
||||
hl.bind("escape", hl.dsp.submap("reset"))
|
||||
hl.bind("catchall", hl.dsp.submap("reset"))
|
||||
end)
|
||||
|
||||
hl.bind(HYPR .. "Z", hl.dsp.submap("passthru"))
|
||||
hl.define_submap("passthru", function()
|
||||
hl.bind("escape", hl.dsp.submap("reset"))
|
||||
end)
|
||||
|
||||
hl.bind(LEADER .. "F9", hl.dsp.submap("resize"))
|
||||
hl.define_submap("resize", function()
|
||||
hl.bind("period", hl.dsp.window.resize({ x = 10, y = 10, relative = true }), { repeating = true })
|
||||
hl.bind("comma", hl.dsp.window.resize({ x = -10, y = -10, relative = true }), { repeating = true })
|
||||
hl.bind("R", function()
|
||||
window_resize_percentage(0.5, 0.5)
|
||||
end, { description = "Resize: Reset" })
|
||||
hl.bind("S", function()
|
||||
window_resize_percentage(0.25, 0.25)
|
||||
end, { description = "Resize: Small" })
|
||||
hl.bind("D", function()
|
||||
window_resize_percentage(0.7, 0.96)
|
||||
hl.dispatch(hl.dsp.window.center())
|
||||
end, { description = "Resize: Large" })
|
||||
hl.bind("C", hl.dsp.window.center(), { description = "Resize: Center" })
|
||||
hl.bind("P", hl.dsp.window.pin(), { description = "Resize: Pin" })
|
||||
hl.bind("up", hl.dsp.window.move({ direction = "up" }), { description = "Resize: Move up" })
|
||||
hl.bind("down", hl.dsp.window.move({ direction = "down" }), { description = "Resize: Move down" })
|
||||
hl.bind("left", hl.dsp.window.move({ direction = "left" }), { description = "Resize: Move left" })
|
||||
hl.bind("right", hl.dsp.window.move({ direction = "right" }), { description = "Resize: Move right" })
|
||||
hl.bind("escape", hl.dsp.submap("reset"), { desceription = "Resize: Exit" })
|
||||
hl.bind("catchall", hl.dsp.submap("reset"), { description = "Resize: Exit" })
|
||||
end)
|
||||
|
||||
hl.bind(LEADER .. "tab", hl.dsp.focus({ monitor = "+1" }), { description = "Monitor: move focus to next monitor" })
|
||||
|
||||
hl.bind(LEADER .. "SHIFT + comma", hl.dsp.window.move({ workspace = "-1" }),
|
||||
{ description = "Window: Move to previous workspace" })
|
||||
|
||||
hl.bind(LEADER .. "SHIFT + period", hl.dsp.window.move({ workspace = "+1" }),
|
||||
{ description = "Window: Move to next workspace" })
|
||||
|
||||
hl.bind(LEADER .. "CONTROL + comma", hl.dsp.workspace.move({ monitor = "-1" }),
|
||||
{ description = "Window: Move to previous workspace and follow" })
|
||||
|
||||
hl.bind(LEADER .. "CONTROL + period", hl.dsp.workspace.move({ monitor = "+1" }),
|
||||
{ description = "Window: Move to next workspace and follow" })
|
||||
|
||||
local workspaceGroupSize = 10
|
||||
local numberkey = { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 }
|
||||
|
||||
function workspace_in_group(i)
|
||||
local curr = hl.get_active_workspace().id
|
||||
local newVal = math.floor((curr - 1) / workspaceGroupSize) * workspaceGroupSize + i
|
||||
return newVal
|
||||
end
|
||||
|
||||
for i = 1, 10 do
|
||||
hl.bind(LEADER .. "CONTROL + code:" .. numberkey[i], function()
|
||||
hl.dispatch(hl.dsp.workspace.move({ monitor = "+1", workspace = workspace_in_group(i), follow = true }))
|
||||
end)
|
||||
end
|
||||
|
||||
for i = 1, 10 do
|
||||
hl.bind(LEADER .. "SHIFT + code:" .. numberkey[i], function()
|
||||
hl.dispatch(hl.dsp.window.move({ workspace = workspace_in_group(i), follow = true }))
|
||||
end)
|
||||
end
|
||||
|
||||
for i = 1, 10 do
|
||||
hl.bind(LEADER .. "code:" .. numberkey[i], function()
|
||||
hl.dispatch(hl.dsp.focus({ workspace = workspace_in_group(i), on_current_monitor = true }))
|
||||
end, { description = "Workspace: Focus " .. i })
|
||||
end
|
||||
|
||||
-- Scroll through existing workspaces with mainMod + scroll
|
||||
hl.bind(LEADER .. " + mouse_down", hl.dsp.focus({ workspace = "e+1" }))
|
||||
hl.bind(LEADER .. " + mouse_up", hl.dsp.focus({ workspace = "e-1" }))
|
||||
|
||||
-- Move/resize windows with mainMod + LMB/RMB and dragging
|
||||
hl.bind(LEADER .. " + mouse:272", hl.dsp.window.drag(), { mouse = true })
|
||||
hl.bind(LEADER .. " + mouse:273", hl.dsp.window.resize(), { mouse = true })
|
||||
hl.bind("mouse:275", hl.dsp.exec_cmd("wl-copy $(wl-paste -p)"), { mouse = true })
|
||||
hl.bind("mouse:276", hl.dsp.exec_cmd("wtype -M ctrl -M shift v -m ctrl -m shift"), { mouse = true })
|
||||
|
||||
-- hl.gesture({ fingers = 3, direction = "horizontal", action = "workspace" })
|
||||
-- hl.gesture({ fingers = 3, direction = "down", mods = "ALT", action = "close" })
|
||||
-- hl.gesture({ fingers = 3, direction = "up", mods = "SUPER", scale = 1.5, action = "fullscreen" })
|
||||
-- hl.gesture({ fingers = 3, direction = "left", scale = 1.5, action = "float" })
|
||||
--
|
||||
-- hl.gesture({ fingers = 2, direction = "pinch", action = "cursorZoom", zoom_level = 2 })
|
||||
-- hl.gesture({ fingers = 2, direction = "pinch", action = "cursorZoom", zoom_level = 1.2, mode = "mult" })
|
||||
-- hl.gesture({ fingers = 2, direction = "pinch", action = "cursorZoom", zoom_level = 1, mode = "live" })
|
||||
|
||||
hl.workspace_rule({ workspace = "special:special", border_size = 3 })
|
||||
hl.window_rule({ match = { class = "(blueberry.py|Impala|Wiremix|org.gnome.NautilusPreviewer|com.gabm.satty|Omarchy|About|TUI.float|org.pulseaudio.pavucontrol)" }, tag =
|
||||
"+floating-window" })
|
||||
|
||||
hl.window_rule({
|
||||
name = "ostt floating windows",
|
||||
match = { class = "ostt-popup" },
|
||||
tag = "+floating-window"
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
match = {
|
||||
class = "(xdg-desktop-portal-gtk|sublime_text|DesktopEditors)",
|
||||
title = "^(Open.*Files?|Save.*Files?|Save.*As|All Files|Save)"
|
||||
},
|
||||
tag = "+floating-window"
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
match= {class="code"},
|
||||
fullscreen_state=1,
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
-- Fix some dragging issues with XWayland
|
||||
name = "fix-xwayland-drags",
|
||||
match = {
|
||||
class = "^$",
|
||||
title = "^$",
|
||||
xwayland = true,
|
||||
float = true,
|
||||
fullscreen = false,
|
||||
pin = false,
|
||||
},
|
||||
|
||||
no_focus = true,
|
||||
})
|
||||
|
||||
hl.window_rule({ match = { tag = "floating-window" }, float = true, center = true, size = { "monitor_w/2", "monitor_h/2" } })
|
||||
|
||||
hl.window_rule({ match = { class = "(rofi|wofi)" }, tag = "+user-menu" })
|
||||
hl.window_rule({ match = { class = "^(pinentry-)" }, tag = "+user-menu" })
|
||||
hl.window_rule({ match = { class = "^(gcr-prompter)$" }, tag = "+user-menu" })
|
||||
hl.window_rule({ match = { tag = "user-menu" }, stay_focused = true, no_anim = true, float = true, center = true, size = { "monitor_w/3", "monitor_h/3" } })
|
||||
|
||||
hl.window_rule({
|
||||
name = "Picture in Picture windows",
|
||||
match = { title = "^.*[Pp]icture[ -][Ii]n[ -][Pp]icture.*$" },
|
||||
float = true,
|
||||
pin = true,
|
||||
rounding = 7,
|
||||
opacity = "1 1",
|
||||
move = { "monitor_w-window_w-10", "monitor_h-window_h-10" },
|
||||
size = { "monitor_w/4", "monitor_h/4" },
|
||||
})
|
||||
|
||||
-- Cursor size
|
||||
hl.env("XCURSOR_SIZE", "24")
|
||||
hl.env("HYPRCURSOR_SIZE", "24")
|
||||
|
||||
-- Force all apps to use Wayland
|
||||
hl.env("GDK_BACKEND", "wayland,x11,*")
|
||||
hl.env("QT_QPA_PLATFORM", "wayland;xcb")
|
||||
hl.env("QT_STYLE_OVERRIDE", "kvantum")
|
||||
hl.env("SDL_VIDEODRIVER", "wayland")
|
||||
hl.env("MOZ_ENABLE_WAYLAND", "1")
|
||||
hl.env("ELECTRON_OZONE_PLATFORM_HINT", "wayland")
|
||||
hl.env("OZONE_PLATFORM", "wayland")
|
||||
hl.env("XDG_SESSION_TYPE", "wayland")
|
||||
|
||||
-- Allow better support for screen sharing (Google Meet"," Discord, etc)
|
||||
hl.env("XDG_CURRENT_DESKTOP", "Hyprland")
|
||||
hl.env("XDG_SESSION_DESKTOP", "Hyprland")
|
||||
|
||||
-- Use XCompose file
|
||||
hl.env("XCOMPOSEFILE", "~/.XCompose")
|
||||
|
||||
-- Make Chromium use XCompose and all Wayland
|
||||
hl.env("CHROMIUM_FLAGS", "--enable-features=UseOzonePlatform --ozone-platform=wayland --gtk-version=4")
|
||||
|
||||
-- Make .desktop files available for wofi
|
||||
hl.env("XDG_DATA_DIRS", "/usr/share:/usr/local/share:~/.local/share")
|
||||
|
||||
-- TODO: add theme link
|
||||
require("theme")
|
||||
|
||||
hl.on("hyprland.start", function()
|
||||
hl.exec_cmd("hyprctl setcursor Pop 24")
|
||||
end)
|
||||
+45
-4
@@ -2,16 +2,22 @@
|
||||
experimental = true
|
||||
env_shell_expand = true
|
||||
|
||||
[env]
|
||||
RUSTUP_HOME = "{{env.HOME}}/.rustup"
|
||||
|
||||
[tools]
|
||||
age = "latest"
|
||||
bun = "latest"
|
||||
codex = "latest"
|
||||
copilot-cli = "latest"
|
||||
dua = "latest"
|
||||
"github:Gitlawb/zero" = "latest"
|
||||
"github:ZinoKader/portal" = "latest"
|
||||
"github:danielmiessler/fabric" = "latest"
|
||||
"github:mrusme/reader" = "latest"
|
||||
"github:raine/workmux" = "latest"
|
||||
"github:rimio-ai/rimz" = "latest"
|
||||
"github:sandboxec/sandboxec" = "latest"
|
||||
"github:ulyssa/iamb" = "latest"
|
||||
"github:zed-industries/codex-acp" = "latest"
|
||||
herdr = "latest"
|
||||
@@ -21,6 +27,18 @@ herdr = "latest"
|
||||
opencode = "latest"
|
||||
pi = "latest"
|
||||
worktrunk = "latest"
|
||||
"http:tea" = {
|
||||
version = "0.15.1",
|
||||
url = 'https://gitea.com/gitea/tea/releases/download/v{{ version }}/tea-{{ version }}-{{ os(macos="darwin", linux="linux") }}-{{ arch(x64="amd64", arm64="arm64") }}',
|
||||
bin = "tea",
|
||||
format = "raw"
|
||||
}
|
||||
uv = "latest"
|
||||
tmux = "latest"
|
||||
node = "latest"
|
||||
go = "latest"
|
||||
croc = "latest"
|
||||
# url = 'https://releases.hashicorp.com/sentinel/{{version}}/sentinel_{{version}}_{{os(macos="darwin")}}_{{arch(x64="amd64")}}.zip'
|
||||
|
||||
[tasks.setup_pi]
|
||||
run = [
|
||||
@@ -28,10 +46,24 @@ run = [
|
||||
'pi install npm:pi-native-search',
|
||||
'pi install npm:pi-subagents',
|
||||
'pi install npm:context-mode',
|
||||
'pi install npm:@ff-labs/pi-fff',
|
||||
'pi install npm:@dietrichgebert/ponytail',
|
||||
'pi install npm:@gotgenes/pi-permission-system',
|
||||
'test -x /usr/bin/pass && /usr/bin/pass show config/pi/auth.json > ~/.pi/agent/auth.json'
|
||||
'pi install npm:@plannotator/pi-extension',
|
||||
'pi install npm:pi-hermes-memory',
|
||||
'pi install npm:pi-msg-queue',
|
||||
]
|
||||
|
||||
[tasks.setup_fish]
|
||||
run = '''
|
||||
if [[ -x /usr/bin/fish ]]; then
|
||||
if [[ "$(getent passwd "$USER" | cut -d: -f7)" != /usr/bin/fish ]]; then
|
||||
chsh -s /usr/bin/fish
|
||||
fi
|
||||
fish -c "fisher install franciscolourenco/done"
|
||||
fi
|
||||
'''
|
||||
|
||||
[tasks.setup_nvim]
|
||||
run = [
|
||||
'uv tool install vectorcode'
|
||||
@@ -39,15 +71,24 @@ run = [
|
||||
|
||||
[tasks.skills]
|
||||
run = [
|
||||
'npx skills add SjB/skills',
|
||||
'npx skills add mattpocock/skills'
|
||||
"test -d ~/.local/share/skills || git clone https://github.com/SjB/skills.git ~/.local/share/skills",
|
||||
"git -C ~/.local/share/skills pull -q --rebase || true",
|
||||
"test -L ~/.agents/skills || ln -snf ~/.local/share/skills/skills ~/.agents/skills"
|
||||
]
|
||||
|
||||
[tasks.herdr_setup]
|
||||
[tasks.setup_herdr]
|
||||
run = [
|
||||
'herdr plugin install devashish2203/herdr-worktrunk --yes',
|
||||
'herdr plugin install qu8n/herdr-automatic-rename --yes',
|
||||
'herdr plugin install den-tanui/herdr-zoxide --yes',
|
||||
'herdr plugin install plannotator/herdr-annotate --yes',
|
||||
'herdr plugin install qu8n/herdr-automatic-rename --yes',
|
||||
]
|
||||
|
||||
[tasks.setup_tmux]
|
||||
run = [
|
||||
'test -d ~/.config/tmux/plugins/tpm || git clone https://github.com/tmux-plugins/tpm ~/.config/tmux/plugins/tpm',
|
||||
'tmux run-shell ~/.config/tmux/plugins/tpm/bindings/install_plugins',
|
||||
]
|
||||
|
||||
[tasks.light]
|
||||
|
||||
@@ -60,6 +60,7 @@ vim.opt.shiftround = true
|
||||
vim.opt.shiftwidth = 4
|
||||
vim.opt.softtabstop = 4
|
||||
vim.opt.tabstop = 4
|
||||
vim.opt.exrc = true
|
||||
vim.opt.hidden = true
|
||||
vim.opt.shortmess:append({ W = true, I = true, c = true, C = true })
|
||||
vim.opt.spelllang = { "en" }
|
||||
|
||||
@@ -21,9 +21,9 @@ conform.setup({
|
||||
cpp = { "clang_format" },
|
||||
lua = { 'stylua' },
|
||||
go = { "goimports", "gofmt" },
|
||||
rust = { "dprint", "rustfmt", lsp_format = "fallback" },
|
||||
python = { "isort", "black", stop_after_first = true },
|
||||
javascript = { "dprint", "prettier", stop_after_first = true },
|
||||
rust = { "rustfmt", "dprint", lsp_format = "fallback" },
|
||||
python = { "ruff", "dprint", stop_after_first = true },
|
||||
javascript = { "dprint", "prettier", stop_after_first = true },
|
||||
markdown = { "dprint", "prettier", stop_after_first = true },
|
||||
javascriptreact = { "dprint", "prettier", stop_after_first = true },
|
||||
typescript = { "dprint", "prettier", stop_after_first = true },
|
||||
@@ -31,12 +31,13 @@ conform.setup({
|
||||
svelte = { "dprint", "prettier", stop_after_first = true },
|
||||
html = { "dprint", "prettier", stop_after_first = true },
|
||||
},
|
||||
format_on_save = {
|
||||
lsp_fallback = true,
|
||||
},
|
||||
})
|
||||
|
||||
vim.keymap.set({ 'n', 'v' }, '<leader>bf',
|
||||
function()
|
||||
conform.format { async = true, lsp_format = 'fallback' }
|
||||
end,
|
||||
{ desc = 'Format buffer' })
|
||||
|
||||
|
||||
function()
|
||||
conform.format { async = true }
|
||||
end,
|
||||
{ desc = 'Format buffer' })
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
vim.pack.add({
|
||||
{ src = 'https://github.com/mistweaverco/kulala.nvim' },
|
||||
})
|
||||
|
||||
require('kulala').setup()
|
||||
-- vim.pack.add({
|
||||
-- { src = 'https://github.com/mistweaverco/kulala.nvim' },
|
||||
-- })
|
||||
--
|
||||
-- require('kulala').setup()
|
||||
|
||||
@@ -5,7 +5,7 @@ if vim.fn.isdirectory(vim.fn.expand "~" .. "/Documents/sjb-brain/") == 1 then
|
||||
require("obsidian").setup({
|
||||
legacy_commands = false,
|
||||
picker = {
|
||||
name = "snacks.pick",
|
||||
name = "snacks.picker",
|
||||
},
|
||||
ui = {
|
||||
enable = true,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
vim.pack.add({
|
||||
{ src = 'https://github.com/SjB/orgmode', version = 'sjb-wip' },
|
||||
{ src = 'https://github.com/nvim-orgmode/orgmode' },
|
||||
{ src = 'https://github.com/chipsenkbeil/org-roam.nvim' },
|
||||
{ src = 'https://github.com/akinsho/org-bullets.nvim' },
|
||||
})
|
||||
@@ -9,8 +9,8 @@ require('orgmode').setup({
|
||||
use_vim_ui = true
|
||||
}
|
||||
},
|
||||
org_agenda_files = {'~/Documents/notes/*project*org', '~/Documents/notes/Inbox*org', '~/Documents/journals/*.org'},
|
||||
org_default_notes_file = "~/Documents/notes/Inbox.org",
|
||||
org_agenda_files = {'~/Documents/GTD/*project*org', '~/Documents/GTD/Inbox*org', '~/Documents/GTD/journals/*.org'},
|
||||
org_default_notes_file = "~/Documents/GTD/Inbox.org",
|
||||
org_todo_keywords = { 'TODO(t)', 'NEXT(n)', '|', 'DONE(d)', 'DELEGATED(a)' },
|
||||
mappings = {
|
||||
capture = {
|
||||
@@ -25,7 +25,7 @@ require('orgmode').setup({
|
||||
},
|
||||
j = {
|
||||
description = "Journal entry",
|
||||
target = "~/Documents/notes/journals/%<%Y-%m-%d>.org",
|
||||
target = "~/Documents/GTD/journals/%<%Y-%m-%d>.org",
|
||||
template = "* %<%Y-%m-%d %H:%M> %?\n",
|
||||
},
|
||||
},
|
||||
@@ -65,7 +65,7 @@ require('org-roam').setup({
|
||||
bindings = {
|
||||
prefix = "<LocalLeader>oO",
|
||||
},
|
||||
directory = "~/Documents/notes",
|
||||
directory = "~/Documents/GTD",
|
||||
extensions = {
|
||||
dailies = {
|
||||
directory = "journals"
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
vim.pack.add({ "https://github.com/alex35mil/pi.nvim" })
|
||||
|
||||
vim.keymap.set({'n'}, '<leader>mp', '<cmd>Pi<cr>', { noremap = true, silent = true, desc = "Toggle Pi Agent" })
|
||||
require("pi").setup({
|
||||
cli = {
|
||||
args = { "--approve" },
|
||||
},
|
||||
vim.keymap.set({ 'n' }, '<leader>mp', '<cmd>Pi<cr>', { noremap = true, silent = true, desc = "Toggle Pi Agent" })
|
||||
vim.pack.add({
|
||||
"https://github.com/zgs225/pi2.nvim",
|
||||
-- Default chat-history renderer (render.engine = "render-markdown"):
|
||||
"https://github.com/MeanderingProgrammer/render-markdown.nvim",
|
||||
})
|
||||
|
||||
require("pi").setup()
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"contextInjection": {
|
||||
"enabled": false
|
||||
}
|
||||
}
|
||||
@@ -1,25 +1,26 @@
|
||||
{
|
||||
"permission": {
|
||||
"*": "ask",
|
||||
"path": {
|
||||
"./*": "allow",
|
||||
"./.*": "allow",
|
||||
"~/.ssh/*": "deny",
|
||||
"*.env": "deny",
|
||||
"*.env.*": "deny",
|
||||
"*.env.example": "allow"
|
||||
"permission": {
|
||||
"*": "ask",
|
||||
"path": {
|
||||
"./*": "allow",
|
||||
"./.*": "allow",
|
||||
"~/.ssh/*": "deny",
|
||||
"*.env": "deny",
|
||||
"*.env.*": "deny",
|
||||
"*.env.example": "allow"
|
||||
},
|
||||
"bash": {
|
||||
"*": "ask",
|
||||
"rm -rf *": "deny",
|
||||
"sudo *": "ask"
|
||||
},
|
||||
"external_directory": {
|
||||
"*": "ask",
|
||||
"/tmp/*": "ask",
|
||||
"~/Documents/sjb-brain/*": "allow"
|
||||
}
|
||||
},
|
||||
"bash": {
|
||||
"*": "ask",
|
||||
"rm -rf *": "deny",
|
||||
"sudo *": "ask"
|
||||
},
|
||||
"external_directory": {
|
||||
"*": "deny",
|
||||
"~/Documents/sjb-brain/*": "allow"
|
||||
}
|
||||
},
|
||||
"debugLog": false,
|
||||
"permissionReviewLog": true,
|
||||
"yoloMode": true
|
||||
"debugLog": false,
|
||||
"permissionReviewLog": true,
|
||||
"yoloMode": true
|
||||
}
|
||||
|
||||
+26
-11
@@ -1,16 +1,31 @@
|
||||
{
|
||||
"providers": {
|
||||
"dupont": {
|
||||
"baseUrl": "http://172.25.11.30/v1",
|
||||
"brine.sharcnet.ca": {
|
||||
"baseUrl": "https://brine.sharcnet.ca/v1",
|
||||
"api": "openai-completions",
|
||||
"models": [
|
||||
{
|
||||
"id": "glm-4.7-flash",
|
||||
"name": "glm-4.7-flash",
|
||||
"reasoning": true,
|
||||
"id": "openai//opt/vllm/models/North-Mini-Code-1.0-fp8",
|
||||
"name": "openai//opt/vllm/models/North-Mini-Code-1.0-fp8"
|
||||
},
|
||||
{
|
||||
"id": "openai/models/DeepSeek-V4-Flash-0731",
|
||||
"name": "openai/models/DeepSeek-V4-Flash-0731"
|
||||
}
|
||||
]
|
||||
},
|
||||
"sagacity": {
|
||||
"baseUrl": "https://agent.sagacity.ca/v1",
|
||||
"api": "openai-completions",
|
||||
"models": [
|
||||
{
|
||||
"id": "Qwen3.8-27B",
|
||||
"name": "Qwen3.8-27B",
|
||||
"input": [
|
||||
"text"
|
||||
"text",
|
||||
"image"
|
||||
],
|
||||
"reasoning": true,
|
||||
"contextWindow": 131072,
|
||||
"maxTokens": 131072,
|
||||
"cost": {
|
||||
@@ -27,12 +42,12 @@
|
||||
}
|
||||
},
|
||||
"obelix": {
|
||||
"baseUrl": "http://172.25.11.32/v1",
|
||||
"baseUrl": "https://llm.nca.uwo.ca/v1",
|
||||
"api": "openai-completions",
|
||||
"models": [
|
||||
{
|
||||
"id": "ornith-1.0-35B",
|
||||
"name": "ornith-1.0-35B",
|
||||
"id": "ornith-1.5-35B",
|
||||
"name": "ornith-1.5-35B",
|
||||
"reasoning": true,
|
||||
"input": [
|
||||
"text"
|
||||
@@ -57,8 +72,8 @@
|
||||
"api": "openai-completions",
|
||||
"models": [
|
||||
{
|
||||
"id": "gemma-4-12B-coder",
|
||||
"name": "gemma-4-12B-coder",
|
||||
"id": "Qwythos-9B-v2",
|
||||
"name": "Qwythos-9B-v2",
|
||||
"reasoning": true,
|
||||
"input": [
|
||||
"text"
|
||||
|
||||
@@ -1,65 +1,61 @@
|
||||
{
|
||||
"lastChangelogVersion": "0.81.0",
|
||||
"theme": "light/dark",
|
||||
"defaultProvider": "openai-codex",
|
||||
"defaultModel": "gpt-5.6-luna",
|
||||
"defaultThinkingLevel": "high",
|
||||
"hideThinkingBlock": true,
|
||||
"compaction": {
|
||||
"enabled": true
|
||||
},
|
||||
"thinkingLevelMap": {
|
||||
"minimal": null,
|
||||
"low": "low",
|
||||
"medium": "medium",
|
||||
"high": "high",
|
||||
"xhigh": null,
|
||||
"max": "max"
|
||||
},
|
||||
"enableInstallTelemetry": false,
|
||||
"enabledModels": [
|
||||
"opencode-go/qwen3.7-plus",
|
||||
"opencode-go/deepseek-v4-pro",
|
||||
"opencode-go/deepseek-v4-flash",
|
||||
"opencode-go/kimi-k2.7-code",
|
||||
"openai-codex/gpt-5.4",
|
||||
"openai-codex/gpt-5.4-mini",
|
||||
"openai-codex/gpt-5.3-codex-spark",
|
||||
"obelix/ornith-1.0-35B",
|
||||
"dupont/glm-4.7-flash",
|
||||
"github-copilot/gpt-5-mini",
|
||||
"github-copilot/mai-code-1-flash-picker"
|
||||
],
|
||||
"packages": [
|
||||
"npm:pi-lens",
|
||||
"npm:@gotgenes/pi-permission-system",
|
||||
"npm:pi-native-search",
|
||||
"npm:context-mode",
|
||||
"npm:pi-subagents"
|
||||
],
|
||||
"subagents": {
|
||||
"agentOverrides": {
|
||||
"reviewer": {
|
||||
"model": "opencode-go/hy3",
|
||||
"fallbackModels": [ "openai-codex/gpt-5.6-luna" ],
|
||||
"thinking": "low"
|
||||
},
|
||||
"planner": {
|
||||
"model": "opencode-go/qwen3.7-plus"
|
||||
},
|
||||
"worker": {
|
||||
"model": "opencode-go/kimi-k2.7-code"
|
||||
},
|
||||
"oracle": {
|
||||
"model": "openai-codex/gpt-5.6-luna",
|
||||
"fallbackModels": [ "opencode-go/qwen3.7-max" ],
|
||||
"thinking": "high"
|
||||
}
|
||||
}
|
||||
},
|
||||
"quietStartup": true,
|
||||
"steeringMode": "all",
|
||||
"terminal": {
|
||||
"showTerminalProgress": true
|
||||
}
|
||||
"lastChangelogVersion": "1.1.0",
|
||||
"theme": "light/dark",
|
||||
"defaultProvider": "openai",
|
||||
"defaultModel": "gpt-6-sol",
|
||||
"defaultThinkingLevel": "high",
|
||||
"hideThinkingBlock": true,
|
||||
"compaction": {
|
||||
"enabled": true
|
||||
},
|
||||
"thinkingLevelMap": {
|
||||
"minimal": null,
|
||||
"low": "low",
|
||||
"medium": "medium",
|
||||
"high": "high",
|
||||
"xhigh": null,
|
||||
"max": "max"
|
||||
},
|
||||
"enableInstallTelemetry": false,
|
||||
"packages": [
|
||||
"npm:pi-lens",
|
||||
"npm:@gotgenes/pi-permission-system",
|
||||
"npm:pi-native-search",
|
||||
"npm:context-mode",
|
||||
"npm:pi-subagents",
|
||||
"npm:@ff-labs/pi-fff",
|
||||
"npm:@narumitw/pi-plan-mode",
|
||||
"npm:@dietrichgebert/ponytail",
|
||||
"npm:@plannotator/pi-extension",
|
||||
"npm:pi-hermes-memory",
|
||||
"npm:pi-msg-queue"
|
||||
],
|
||||
"subagents": {
|
||||
"agentOverrides": {
|
||||
"reviewer": {
|
||||
"model": "obelix/ornith-1.5-35B",
|
||||
"thinking": "high"
|
||||
},
|
||||
"planner": {
|
||||
"model": "openai/gpt-6-luna",
|
||||
"thinking": "high"
|
||||
},
|
||||
"worker": {
|
||||
"model": "opencode-go/claude-haiku-5-5"
|
||||
},
|
||||
"oracle": {
|
||||
"model": "openai/gpt-6.1-sol",
|
||||
"thinking": "high"
|
||||
}
|
||||
}
|
||||
},
|
||||
"defaultTools": [
|
||||
"+codemode"
|
||||
],
|
||||
"quietStartup": true,
|
||||
"steeringMode": "all",
|
||||
"terminal": {
|
||||
"showTerminalProgress": true
|
||||
},
|
||||
"deviceId": "2314a9e6-0e82-49cd-8518-efc15c870eef"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
abi: 6
|
||||
ignore-if-missing: true
|
||||
unsafe-host-runtime: true
|
||||
# Pi stores configuration, extensions, skills, and sessions under ~/.pi/agent.
|
||||
# The current workspace is writable so agent edits remain confined to the repo
|
||||
# from which Pi is launched. Network access is limited to model/API HTTPS.
|
||||
fs:
|
||||
- rwx:$HOME/.pi/agent/
|
||||
- rwx:$HOME/.pi-lens/
|
||||
- rwx:$HOME/.pi/context-mode/
|
||||
- rw:$HOME/.pi/agent/settings.json
|
||||
- rw:$HOME/.pi/agent/models.json
|
||||
- r:$HOME/.pi/agent/AGENTS.md
|
||||
- r:$HOME/.pi/skills/
|
||||
- r:$HOME/.agents/skills/
|
||||
- r:$HOME/.pi/agent/extensions/pi-permission-system/config.json
|
||||
- rx:$HOME/.local/share/mise/installs/npm-earendil-works-pi-coding-agent/
|
||||
- rw:$PWD
|
||||
- rw:/tmp
|
||||
- r:/dev/random
|
||||
- r:/dev/urandom
|
||||
- r:/etc/hosts
|
||||
- r:/etc/ld.so.cache
|
||||
- r:/etc/localtime
|
||||
- r:/etc/nsswitch.conf
|
||||
- r:/etc/resolv.conf
|
||||
- r:/etc/ssl/certs
|
||||
- r:/etc/ssl/certs/ca-certificates.crt
|
||||
- r:/etc/ssl/openssl.cnf
|
||||
- r:/home/linuxbrew/.linuxbrew/etc/openssl@3/openssl.cnf
|
||||
- r:/proc/
|
||||
- r:/proc/meminfo
|
||||
- r:/proc/self/cgroup
|
||||
- r:/proc/self/groups
|
||||
- r:/proc/self/maps
|
||||
- r:/proc/stat
|
||||
- r:/sys/devices/system/cpu/online
|
||||
- r:/usr/lib/locale/locale-archive
|
||||
- r:/usr/lib/ssl/openssl.cnf
|
||||
- r:/usr/share/locale/locale.alias
|
||||
- rw:/dev/null
|
||||
net:
|
||||
- c:443
|
||||
@@ -0,0 +1,12 @@
|
||||
Host alcazar-tmux
|
||||
User tintin
|
||||
Hostname 172.25.11.135
|
||||
ForwardAgent yes
|
||||
RequestTTY yes
|
||||
RemoteCommand tmux -l new -A
|
||||
|
||||
Host alcazar
|
||||
User tintin
|
||||
Hostname 172.25.11.135
|
||||
ForwardAgent yes
|
||||
RequestTTY yes
|
||||
@@ -0,0 +1,16 @@
|
||||
Host bianca-tmux
|
||||
User sjb
|
||||
Hostname 172.25.11.33
|
||||
ForwardAgent yes
|
||||
RemoteForward /run/user/1000/gnupg/S.gpg-agent /run/user/1000/gnupg/S.gpg-agent.extra
|
||||
StreamLocalBindUnlink yes
|
||||
RequestTTY yes
|
||||
RemoteCommand tmux -l new -A
|
||||
|
||||
Host bianca
|
||||
User sjb
|
||||
Hostname 172.25.11.33
|
||||
ForwardAgent yes
|
||||
RemoteForward /run/user/1000/gnupg/S.gpg-agent /run/user/1000/gnupg/S.gpg-agent.extra
|
||||
StreamLocalBindUnlink yes
|
||||
RequestTTY yes
|
||||
@@ -0,0 +1,5 @@
|
||||
Host caraco
|
||||
User sjb
|
||||
Hostname 172.25.11.136
|
||||
ForwardAgent yes
|
||||
RequestTTY yes
|
||||
@@ -1 +0,0 @@
|
||||
SetEnv TERM=xterm-256color
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
Host dupont
|
||||
HostName 172.25.11.30
|
||||
user sjb
|
||||
ForwardAgent yes
|
||||
RemoteForward /run/user/1000/gnupg/S.gpg-agent /run/user/1000/gnupg/S.gpg-agent.extra
|
||||
StreamLocalBindUnlink yes
|
||||
RequestTTY yes
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
Host haddock-tmux
|
||||
User sjb
|
||||
Hostname 129.100.33.96
|
||||
ForwardAgent yes
|
||||
RemoteForward /run/user/1000/gnupg/S.gpg-agent /run/user/1000/gnupg/S.gpg-agent.extra
|
||||
StreamLocalBindUnlink yes
|
||||
RequestTTY yes
|
||||
RemoteCommand tmux -l new -A
|
||||
|
||||
Host haddock
|
||||
User sjb
|
||||
Hostname 129.100.33.96
|
||||
ForwardAgent yes
|
||||
RemoteForward /run/user/1000/gnupg/S.gpg-agent /run/user/1000/gnupg/S.gpg-agent.extra
|
||||
StreamLocalBindUnlink yes
|
||||
RequestTTY yes
|
||||
@@ -0,0 +1,5 @@
|
||||
Host milou
|
||||
User tintin
|
||||
Hostname 172.25.11.133
|
||||
ForwardAgent yes
|
||||
RequestTTY yes
|
||||
@@ -0,0 +1,6 @@
|
||||
|
||||
Host nca-ai-01
|
||||
HostName 192.168.33.74
|
||||
User steve
|
||||
ForwardAgent yes
|
||||
RequestTTY yes
|
||||
@@ -0,0 +1,19 @@
|
||||
|
||||
#homeip Hostname 172.25.11.32
|
||||
|
||||
Host obelix-tmux
|
||||
User sjb
|
||||
Hostname 192.168.33.75
|
||||
ForwardAgent yes
|
||||
RemoteForward /run/user/1000/gnupg/S.gpg-agent /run/user/1000/gnupg/S.gpg-agent.extra
|
||||
StreamLocalBindUnlink yes
|
||||
RequestTTY yes
|
||||
RemoteCommand tmux -l new -A
|
||||
|
||||
Host obelix
|
||||
User sjb
|
||||
Hostname 192.168.33.75
|
||||
ForwardAgent yes
|
||||
RemoteForward /run/user/1000/gnupg/S.gpg-agent /run/user/1000/gnupg/S.gpg-agent.extra
|
||||
StreamLocalBindUnlink yes
|
||||
RequestTTY yes
|
||||
@@ -0,0 +1,7 @@
|
||||
Host pioneer
|
||||
User sjb
|
||||
Hostname 172.25.11.31
|
||||
ForwardAgent yes
|
||||
RemoteForward /run/user/1000/gnupg/S.gpg-agent /run/user/1000/gnupg/S.gpg-agent.extra
|
||||
StreamLocalBindUnlink yes
|
||||
RequestTTY yes
|
||||
@@ -0,0 +1,7 @@
|
||||
Host rascar
|
||||
User sjb
|
||||
Hostname 172.25.11.131
|
||||
ForwardAgent yes
|
||||
RemoteForward /run/user/1000/gnupg/S.gpg-agent /run/user/1000/gnupg/S.gpg-agent.extra
|
||||
StreamLocalBindUnlink yes
|
||||
RequestTTY yes
|
||||
@@ -0,0 +1,8 @@
|
||||
Host risc-v
|
||||
User sjb
|
||||
Hostname 172.25.11.31
|
||||
ForwardAgent yes
|
||||
RemoteForward /run/user/1001/gnupg/S.gpg-agent /run/user/1000/gnupg/S.gpg-agent.extra
|
||||
StreamLocalBindUnlink yes
|
||||
RequestTTY yes
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
|
||||
Host steve-dev
|
||||
HostName 10.40.39.136
|
||||
User steve
|
||||
ProxyJump obelix
|
||||
ForwardAgent yes
|
||||
RequestTTY yes
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
../tmux-main.service
|
||||
@@ -0,0 +1,15 @@
|
||||
[Unit]
|
||||
Description=Ensure tmux session "main" is running
|
||||
After=graphical-session.target
|
||||
PartOf=graphical-session.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
ExecStart=%h/.local/share/dotfiles/script/tmux-start.sh
|
||||
# If the session check fails (no server / lost session), retry until login ends.
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=default.target
|
||||
+17
-28
@@ -1,45 +1,33 @@
|
||||
# set-option -g default-terminal 'screen-256color'
|
||||
# set-option -g terminal-overrides ',xterm-256color:RGB'
|
||||
# set -g default-terminal "tmux-256color"
|
||||
set -as terminal-feature ",foot*:RGB"
|
||||
set -g default-terminal "tmux-256color"
|
||||
set -ag terminal-overrides ",*:RGB"
|
||||
set -as terminal-features ",*:clipboard"
|
||||
set -ag terminal-features "xterm-kitty:extkeys"
|
||||
|
||||
# screen mode
|
||||
# set -g default-terminal "${TERM}"
|
||||
# set -g default-terminal "tmux-256color"
|
||||
# set -ag terminal-overrides ",xterm-256color:RGB"
|
||||
|
||||
# colors
|
||||
# set -ag terminal-overrides ",xterm*:Tc"
|
||||
|
||||
# undercurl support
|
||||
# set -ag terminal-overrides ",*:Tc"
|
||||
# set -as terminal-overrides ',*:Smulx=\E[4::%p1%dm'
|
||||
# underscore colours - needs tmux-3.0
|
||||
# set -as terminal-overrides ',*:Setulc=\E[58::2::%p1%{65536}%/%d::%p1%{256}%/%{255}%&%d::%p1%{255}%&%d%;m'
|
||||
# allow terminal scrolling
|
||||
#set -g terminal-overrides 'xterm*:smcup@:rmcup@'
|
||||
# set -g terminal-overrides 'xterm*:smcup@:rmcup@'
|
||||
|
||||
# Force tmux to use the static symlink path globally
|
||||
setenv -g SSH_AUTH_SOCK "$HOME/.ssh/ssh_auth_sock"
|
||||
set -g update-environment "DISPLAY XAUTHORITY"
|
||||
|
||||
# default shell
|
||||
set -g default-shell "/usr/bin/fish"
|
||||
set -g mouse on
|
||||
|
||||
# auto rename windows
|
||||
# set -g automatic-rename on
|
||||
# set -g automatic-rename-format '#{pane_current_command} #{b:pane_current_path}'
|
||||
set -g allow-rename on
|
||||
|
||||
# start with window 1 (instead of 0)
|
||||
set -g base-index 1
|
||||
|
||||
# start with pane 1
|
||||
setw -g pane-base-index 1
|
||||
|
||||
# history
|
||||
set -g history-limit 5000
|
||||
|
||||
# loud or quiet?
|
||||
set -g display-time 4000
|
||||
set -g status-interval 5
|
||||
|
||||
set -g visual-activity off
|
||||
set -g visual-bell off
|
||||
set -g visual-silence off
|
||||
@@ -47,21 +35,20 @@ set -g monitor-activity on
|
||||
set -g bell-action none
|
||||
set -g allow-passthrough on
|
||||
|
||||
#set -g bell-on-alert on
|
||||
|
||||
set -s escape-time 1
|
||||
set -s escape-time 0
|
||||
setw -g aggressive-resize on
|
||||
set -g status-keys vi
|
||||
set-window-option -g mode-keys vi
|
||||
|
||||
set -g extended-keys on
|
||||
set -g extended-keys-format csi-u
|
||||
set-option -g focus-events on # TODO: learn how this works
|
||||
set-option -g focus-events on
|
||||
set-option -g set-titles on
|
||||
set-option -g detach-on-destroy off
|
||||
set-option -g renumber-windows on
|
||||
set-option -g set-clipboard on
|
||||
set-option -g set-titles-string "#S:#{pane_title}"
|
||||
set -sg escape-time 10
|
||||
|
||||
unbind C-Space
|
||||
set -g prefix C-Space
|
||||
@@ -82,6 +69,8 @@ bind e run "tmux split -h /usr/bin/nvim"
|
||||
#bind o display-popup -w 80% -h 80% -E /usr/bin/opencode
|
||||
#bind g display-popup -w 80% -h 80% -E /usr/bin/lazygit
|
||||
|
||||
bind a display-popup -w 80% -h 80% -E "workmux dashboard"
|
||||
|
||||
# split windows like vim
|
||||
# vim's definition of a horizontal/vertical split is reversed from tmux's
|
||||
bind v split-window -h -c "#{pane_current_path}"
|
||||
@@ -102,7 +91,7 @@ bind B command-prompt -p "New Session:" "new-session -A -s '%%'"
|
||||
bind Tab switch-client -l
|
||||
|
||||
bind R command-prompt -p "Rename Window:" "rename-window '%%'"
|
||||
bind t run-shell -b "~/.local/bin/t"
|
||||
bind o run-shell -b "~/.local/bin/t"
|
||||
bind Enter run-shell -b "~/.local/bin/s"
|
||||
bind Q confirm kill-session
|
||||
|
||||
@@ -165,7 +154,7 @@ set -g @plugin 'sainnhe/tmux-fzf'
|
||||
# prefix + u
|
||||
set -g @plugin 'joshmedeski/tmux-fzf-url'
|
||||
# prefix + a
|
||||
set -g @plugin 'vieitesss/agent-radar'
|
||||
# set -g @plugin 'vieitesss/agent-radar'
|
||||
|
||||
# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
|
||||
run '~/.config/tmux/plugins/tpm/tpm'
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
nerdfont: true
|
||||
merge_strategy: rebase
|
||||
merge_keep: true
|
||||
agent: pi
|
||||
|
||||
agents:
|
||||
luna-high:
|
||||
type: pi
|
||||
command: pi
|
||||
args:
|
||||
- --model
|
||||
- openai-codex/gpt-6-luna
|
||||
- --thinking
|
||||
- high
|
||||
luna-max:
|
||||
type: pi
|
||||
command: pi
|
||||
args:
|
||||
- --model
|
||||
- openai-codex/gpt-6-luna
|
||||
- --thinking
|
||||
- max
|
||||
obelix:
|
||||
type: pi
|
||||
command: pi
|
||||
args:
|
||||
- --model
|
||||
- obelix/ornith-1.0-35B
|
||||
fast:
|
||||
type: pi
|
||||
command: pi
|
||||
args:
|
||||
- --model
|
||||
- opencode-go/qwen3.8-flash
|
||||
ds-fast:
|
||||
type: pi
|
||||
command: pi
|
||||
args:
|
||||
- --model
|
||||
- opencode-go/deepseek-v4-flash
|
||||
free:
|
||||
type: pi
|
||||
command: pi
|
||||
args:
|
||||
- --model
|
||||
- opencode/mimo-v2.6-flash-free
|
||||
layouts:
|
||||
dev:
|
||||
panes:
|
||||
- name: "Main"
|
||||
commands: <agent>
|
||||
- name: "Editor"
|
||||
focus: true
|
||||
commands: "nvim"
|
||||
|
||||
@@ -1,47 +0,0 @@
|
||||
[colors.primary]
|
||||
background = "{{ background }}"
|
||||
foreground = "{{ foreground }}"
|
||||
|
||||
[colors.cursor]
|
||||
text = "{{ background }}"
|
||||
cursor = "{{ cursor }}"
|
||||
|
||||
[colors.vi_mode_cursor]
|
||||
text = "{{ background }}"
|
||||
cursor = "{{ cursor }}"
|
||||
|
||||
[colors.search.matches]
|
||||
foreground = "{{ background }}"
|
||||
background = "{{ color3 }}"
|
||||
|
||||
[colors.search.focused_match]
|
||||
foreground = "{{ background }}"
|
||||
background = "{{ color1 }}"
|
||||
|
||||
[colors.footer_bar]
|
||||
foreground = "{{ background }}"
|
||||
background = "{{ foreground }}"
|
||||
|
||||
[colors.selection]
|
||||
text = "{{ selection_foreground }}"
|
||||
background = "{{ selection_background }}"
|
||||
|
||||
[colors.normal]
|
||||
black = "{{ color0 }}"
|
||||
red = "{{ color1 }}"
|
||||
green = "{{ color2 }}"
|
||||
yellow = "{{ color3 }}"
|
||||
blue = "{{ color4 }}"
|
||||
magenta = "{{ color5 }}"
|
||||
cyan = "{{ color6 }}"
|
||||
white = "{{ color7 }}"
|
||||
|
||||
[colors.bright]
|
||||
black = "{{ color8 }}"
|
||||
red = "{{ color9 }}"
|
||||
green = "{{ color10 }}"
|
||||
yellow = "{{ color11 }}"
|
||||
blue = "{{ color12 }}"
|
||||
magenta = "{{ color13 }}"
|
||||
cyan = "{{ color14 }}"
|
||||
white = "{{ color15 }}"
|
||||
@@ -1,83 +0,0 @@
|
||||
# Main background, empty for terminal default, need to be empty if you want transparent background
|
||||
theme[main_bg]="{{ background }}"
|
||||
|
||||
# Main text color
|
||||
theme[main_fg]="{{ foreground }}"
|
||||
|
||||
# Title color for boxes
|
||||
theme[title]="{{ foreground }}"
|
||||
|
||||
# Highlight color for keyboard shortcuts
|
||||
theme[hi_fg]="{{ accent }}"
|
||||
|
||||
# Background color of selected item in processes box
|
||||
theme[selected_bg]="{{ color8 }}"
|
||||
|
||||
# Foreground color of selected item in processes box
|
||||
theme[selected_fg]="{{ accent }}"
|
||||
|
||||
# Color of inactive/disabled text
|
||||
theme[inactive_fg]="{{ color8 }}"
|
||||
|
||||
# Color of text appearing on top of graphs, i.e uptime and current network graph scaling
|
||||
theme[graph_text]="{{ foreground }}"
|
||||
|
||||
# Background color of the percentage meters
|
||||
theme[meter_bg]="{{ color8 }}"
|
||||
|
||||
# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
|
||||
theme[proc_misc]="{{ foreground }}"
|
||||
|
||||
# CPU, Memory, Network, Proc box outline colors
|
||||
theme[cpu_box]="{{ color5 }}"
|
||||
theme[mem_box]="{{ color2 }}"
|
||||
theme[net_box]="{{ color1 }}"
|
||||
theme[proc_box]="{{ accent }}"
|
||||
|
||||
# Box divider line and small boxes line color
|
||||
theme[div_line]="{{ color8 }}"
|
||||
|
||||
# Temperature graph color (Green -> Yellow -> Red)
|
||||
theme[temp_start]="{{ color2 }}"
|
||||
theme[temp_mid]="{{ color3 }}"
|
||||
theme[temp_end]="{{ color1 }}"
|
||||
|
||||
# CPU graph colors (Teal -> Lavender)
|
||||
theme[cpu_start]="{{ color6 }}"
|
||||
theme[cpu_mid]="{{ color4 }}"
|
||||
theme[cpu_end]="{{ color5 }}"
|
||||
|
||||
# Mem/Disk free meter (Mauve -> Lavender -> Blue)
|
||||
theme[free_start]="{{ color5 }}"
|
||||
theme[free_mid]="{{ color4 }}"
|
||||
theme[free_end]="{{ color6 }}"
|
||||
|
||||
# Mem/Disk cached meter (Sapphire -> Lavender)
|
||||
theme[cached_start]="{{ color4 }}"
|
||||
theme[cached_mid]="{{ color6 }}"
|
||||
theme[cached_end]="{{ color5 }}"
|
||||
|
||||
# Mem/Disk available meter (Peach -> Red)
|
||||
theme[available_start]="{{ color3 }}"
|
||||
theme[available_mid]="{{ color1 }}"
|
||||
theme[available_end]="{{ color1 }}"
|
||||
|
||||
# Mem/Disk used meter (Green -> Sky)
|
||||
theme[used_start]="{{ color2 }}"
|
||||
theme[used_mid]="{{ color6 }}"
|
||||
theme[used_end]="{{ color4 }}"
|
||||
|
||||
# Download graph colors (Peach -> Red)
|
||||
theme[download_start]="{{ color3 }}"
|
||||
theme[download_mid]="{{ color1 }}"
|
||||
theme[download_end]="{{ color1 }}"
|
||||
|
||||
# Upload graph colors (Green -> Sky)
|
||||
theme[upload_start]="{{ color2 }}"
|
||||
theme[upload_mid]="{{ color6 }}"
|
||||
theme[upload_end]="{{ color4 }}"
|
||||
|
||||
# Process box color gradient for threads, mem and cpu usage (Sapphire -> Mauve)
|
||||
theme[process_start]="{{ color6 }}"
|
||||
theme[process_mid]="{{ color4 }}"
|
||||
theme[process_end]="{{ color5 }}"
|
||||
@@ -1,25 +0,0 @@
|
||||
[colors-dark]
|
||||
foreground={{ foreground_strip }}
|
||||
background={{ background_strip }}
|
||||
selection-foreground={{ selection_foreground_strip }}
|
||||
selection-background={{ selection_background_strip }}
|
||||
|
||||
cursor={{ background_strip }} {{ cursor_strip }}
|
||||
|
||||
regular0={{ color0_strip }}
|
||||
regular1={{ color1_strip }}
|
||||
regular2={{ color2_strip }}
|
||||
regular3={{ color3_strip }}
|
||||
regular4={{ color4_strip }}
|
||||
regular5={{ color5_strip }}
|
||||
regular6={{ color6_strip }}
|
||||
regular7={{ color7_strip }}
|
||||
|
||||
bright0={{ color8_strip }}
|
||||
bright1={{ color9_strip }}
|
||||
bright2={{ color10_strip }}
|
||||
bright3={{ color11_strip }}
|
||||
bright4={{ color12_strip }}
|
||||
bright5={{ color13_strip }}
|
||||
bright6={{ color14_strip }}
|
||||
bright7={{ color15_strip }}
|
||||
@@ -1,22 +0,0 @@
|
||||
background = {{ background }}
|
||||
foreground = {{ foreground }}
|
||||
cursor-color = {{ cursor }}
|
||||
selection-background = {{ selection_background }}
|
||||
selection-foreground = {{ selection_foreground }}
|
||||
|
||||
palette = 0={{ color0 }}
|
||||
palette = 1={{ color1 }}
|
||||
palette = 2={{ color2 }}
|
||||
palette = 3={{ color3 }}
|
||||
palette = 4={{ color4 }}
|
||||
palette = 5={{ color5 }}
|
||||
palette = 6={{ color6 }}
|
||||
palette = 7={{ color7 }}
|
||||
palette = 8={{ color8 }}
|
||||
palette = 9={{ color9 }}
|
||||
palette = 10={{ color10 }}
|
||||
palette = 11={{ color11 }}
|
||||
palette = 12={{ color12 }}
|
||||
palette = 13={{ color13 }}
|
||||
palette = 14={{ color14 }}
|
||||
palette = 15={{ color15 }}
|
||||
@@ -1,9 +0,0 @@
|
||||
$activeBorderColor = rgb({{ accent_strip }})
|
||||
|
||||
general {
|
||||
col.active_border = $activeBorderColor
|
||||
}
|
||||
|
||||
group {
|
||||
col.border_active = $activeBorderColor
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
hl.config({
|
||||
general = {
|
||||
col = {
|
||||
active_border = { colors = {"rgb({{ accent_strip }})", "rgb({{ color1_strip }})" }, angle = 45 },
|
||||
inactive_border = { colors = {"rgb({{ color2_strip }})", "rgb({{ color2_strip }})" }, angle = 45 }
|
||||
}
|
||||
},
|
||||
group = {
|
||||
col = {
|
||||
border_active = { colors = {"rgb({{ accent_strip }})", "rgb({{ color1_strip }})" }, angle = 45 },
|
||||
border_inactive = { colors = {"rgb({{ color2_strip }})", "rgb({{ color2_strip }})" }, angle = 45 }
|
||||
}
|
||||
}
|
||||
})
|
||||
@@ -1,27 +0,0 @@
|
||||
foreground {{ foreground }}
|
||||
background {{ background }}
|
||||
selection_foreground {{ selection_foreground }}
|
||||
selection_background {{ selection_background }}
|
||||
|
||||
cursor {{ cursor }}
|
||||
cursor_text_color {{ background }}
|
||||
|
||||
active_border_color {{ accent }}
|
||||
active_tab_background {{ accent }}
|
||||
|
||||
color0 {{ color0 }}
|
||||
color1 {{ color1 }}
|
||||
color2 {{ color2 }}
|
||||
color3 {{ color3 }}
|
||||
color4 {{ color4 }}
|
||||
color5 {{ color5 }}
|
||||
color6 {{ color6 }}
|
||||
color7 {{ color7 }}
|
||||
color8 {{ color8 }}
|
||||
color9 {{ color9 }}
|
||||
color10 {{ color10 }}
|
||||
color11 {{ color11 }}
|
||||
color12 {{ color12 }}
|
||||
color13 {{ color13 }}
|
||||
color14 {{ color14 }}
|
||||
color15 {{ color15 }}
|
||||
@@ -0,0 +1,41 @@
|
||||
vim.pack.add({{ src = "https://github.com/bjarneo/aether.nvim", branch = "v3" }})
|
||||
|
||||
require('aether').setup({
|
||||
colors = {
|
||||
bg = "{{ background }}",
|
||||
dark_bg = "{{ dark_background }}",
|
||||
darker_bg = "{{ darker_background }}",
|
||||
lighter_bg = "{{ lighter_background }}",
|
||||
|
||||
fg = "{{ foreground }}",
|
||||
dark_fg = "{{ dark_foreground }}",
|
||||
light_fg = "{{ light_foreground }}",
|
||||
bright_fg = "{{ bright_foreground }}",
|
||||
muted = "{{ muted }}",
|
||||
|
||||
red = "{{ red }}",
|
||||
yellow = "{{ yellow }}",
|
||||
orange = "{{ orange }}",
|
||||
green = "{{ green }}",
|
||||
cyan = "{{ cyan }}",
|
||||
blue = "{{ blue }}",
|
||||
magenta = "{{ magenta }}",
|
||||
brown = "{{ brown }}",
|
||||
|
||||
bright_red = "{{ bright_red }}",
|
||||
bright_yellow = "{{ bright_yellow }}",
|
||||
bright_green = "{{ bright_green }}",
|
||||
bright_cyan = "{{ bright_cyan }}",
|
||||
bright_blue = "{{ bright_blue }}",
|
||||
bright_magenta = "{{ bright_magenta }}",
|
||||
|
||||
accent = "{{ accent }}",
|
||||
cursor = "{{ bright_foreground }}",
|
||||
foreground = "{{ foreground }}",
|
||||
background = "{{ background }}",
|
||||
selection = "{{ selection }}",
|
||||
selection_foreground = "{{ selection_foreground }}",
|
||||
selection_background = "{{ selection_background }}",
|
||||
},
|
||||
})
|
||||
vim.cmd('colorscheme aether')
|
||||
@@ -1,56 +0,0 @@
|
||||
[colors]
|
||||
# Regular colors
|
||||
background = '{{ background }}'
|
||||
black = '{{ color0 }}'
|
||||
blue = '{{ color4 }}'
|
||||
cyan = '{{ color6 }}'
|
||||
foreground = '{{ foreground }}'
|
||||
green = '{{ color2 }}'
|
||||
magenta = '{{ color5 }}'
|
||||
red = '{{ color1 }}'
|
||||
white = '{{ color15 }}'
|
||||
yellow = '{{ color11 }}'
|
||||
|
||||
# Cursor
|
||||
cursor = '{{ cursor }}'
|
||||
vi-cursor = '{{ accent }}'
|
||||
|
||||
# Navigation
|
||||
# tabs and tabs-active set the inactive/active tab title colors.
|
||||
# Tab island backgrounds are derived from the window background color.
|
||||
tabs = '{{ color8 }}'
|
||||
tabs-active = '{{ color15 }}'
|
||||
split = '{{ color8 }}'
|
||||
split-active = '{{ color15 }}'
|
||||
|
||||
# Search
|
||||
search-match-background = '{{ color12 }}'
|
||||
search-match-foreground = '{{ color15 }}'
|
||||
search-focused-match-background = '{{ color3 }}'
|
||||
search-focused-match-foreground = '{{ color15 }}'
|
||||
|
||||
# Selection
|
||||
selection-foreground = '{{ selection_foreground }}'
|
||||
selection-background = '{{ selection_background }}'
|
||||
|
||||
# Dim colors
|
||||
dim-black = '{{ color0 }}'
|
||||
dim-blue = '{{ color4 }}'
|
||||
dim-cyan = '{{ color6 }}'
|
||||
dim-foreground = '{{ foreground }}'
|
||||
dim-green = '{{ color2 }}'
|
||||
dim-magenta = '{{ color5 }}'
|
||||
dim-red = '{{ color1 }}'
|
||||
dim-white = '{{ color15 }}'
|
||||
dim-yellow = '{{ color11 }}'
|
||||
|
||||
# Light colors
|
||||
light-black = '{{ color8 }}'
|
||||
light-blue = '{{ color12 }}'
|
||||
light-cyan = '{{ color14 }}'
|
||||
light-foreground = '{{ foreground }}'
|
||||
light-green = '{{ color10 }}'
|
||||
light-magenta = '{{ color13 }}'
|
||||
light-red = '{{ color9 }}'
|
||||
light-white = '{{ color15 }}'
|
||||
light-yellow = '{{ color11 }}'
|
||||
@@ -1,20 +1,20 @@
|
||||
* {
|
||||
background: {{ background }};
|
||||
foreground: {{ foreground }};
|
||||
active-background: {{ color2 }};
|
||||
urgent-background: {{ color1 }};
|
||||
active-background: {{ lighter_background }};
|
||||
urgent-background: {{ accent }};
|
||||
|
||||
normal-foreground: {{ color3 }};
|
||||
normal-background: {{ background }};
|
||||
normal-foreground: {{ dark_foreground }};
|
||||
normal-background: {{ dark_background }};
|
||||
|
||||
selected-foreground: {{ selection_foreground }};
|
||||
selected-background: {{ selection_background }};
|
||||
|
||||
seperator-color: {{ background }};
|
||||
border-color: {{ color0 }};
|
||||
border-color: {{ accent }};
|
||||
|
||||
prompt-color: {{ color4 }};
|
||||
prompt-background-color: {{ color0 }};
|
||||
prompt-color: {{ light_foreground }};
|
||||
prompt-background-color: {{ darker_background }};
|
||||
|
||||
window-border-size: 1px;
|
||||
window-border-radius: 8px;
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
name = "omarchy"
|
||||
background = "{{ background }}"
|
||||
surface = "{{ darker_background }}"
|
||||
text = "{{ foreground }}"
|
||||
accent = "{{ accent }}"
|
||||
danger = "{{ red }}"
|
||||
muted = "{{ muted }}"
|
||||
highlight = "{{ selection }}"
|
||||
border = "{{ light_foreground }}"
|
||||
dim_text = "{{ dark_foreground }}"
|
||||
+10
-10
@@ -1,25 +1,25 @@
|
||||
color_bg0="{{ background }}"
|
||||
color_bg1="{{ color0 }}"
|
||||
color_bg2="{{ color7 }}"
|
||||
color_bg1="{{ dark_background }}"
|
||||
color_bg2="{{ darker_background }}"
|
||||
color_fg0="{{ foreground }}"
|
||||
color_fg1="{{ color3 }}"
|
||||
color_fg1="{{ light_foreground }}"
|
||||
|
||||
color_status_fg="{{ color4 }}"
|
||||
color_status_bg="{{ color0 }}"
|
||||
color_status_fg="{{ light_foreground }}"
|
||||
color_status_bg="{{ muted }}"
|
||||
|
||||
color_selected_fg="{{ selection_foreground }}"
|
||||
color_selected_bg="{{ selection_background }}"
|
||||
|
||||
color_highlight_fg="{{ color2 }}"
|
||||
color_highlight_fg="{{ yellow }}"
|
||||
color_highlight_bg="{{ background }}"
|
||||
|
||||
color_current_fg="{{ color1 }}"
|
||||
color_current_fg="{{ orange }}"
|
||||
color_current_bg="{{ background }}"
|
||||
|
||||
color_check_fg="{{ color5 }}"
|
||||
color_check_fg="{{ green }}"
|
||||
|
||||
pane_border_fg="{{ foreground }}"
|
||||
pane_border_selected_fg="{{ color2 }}"
|
||||
pane_border_selected_fg="{{ bright_foreground }}"
|
||||
|
||||
set -g @prefix_highlight_fg "${color_highlight_fg}"
|
||||
set -g @prefix_highlight_bg "${color_highlight_bg}"
|
||||
@@ -55,7 +55,7 @@ set -g window-status-current-format "#[fg=${color_current_fg},bg=${color_current
|
||||
set -g window-status-format "#[fg=${color_highlight_fg},bg=${color_highlight_bg}]#I: #[fg=${color_fg0},bg=${color_highlight_bg}]#W "
|
||||
|
||||
# Statusline - right side
|
||||
set -g status-right "#[fg=${color_fg1},bg=${color_bg0},nobold,nounderscore,noitalics]%Y-%m-%d %H:%M #[fg=${color_fg0},bg=${color_highlight_fg},nobold,nounderscore,noitalics] #[fg=${color_fg0},bg=${color_bg1}] #(echo '#{pane_current_path}' | rev | cut -d'/' -f-2 | rev) #[fg=${color_fg0},bg=${color_current_fg},nobold,nounderscore,noitalics] #[fg=${color_fg0},bg=${color_bg1}] #S "
|
||||
set -g status-right "#[fg=${color_fg1},bg=${color_bg0},nobold,nounderscore,noitalics]%Y-%m-%d %H:%M #[fg=${color_fg0},bg=${color_highlight_fg}] #[fg=${color_fg0},bg=${color_bg1}] #(echo '#{pane_current_path}' | rev | cut -d'/' -f-2 | rev) #[fg=${color_fg0},bg=${color_current_fg}] #[fg=${color_fg0},bg=${color_bg1}] #S #[fg=${color_fg0},bg=${color_status_fg}] #[fg=${color_fg0},bg=${color_bg1}] #h"
|
||||
|
||||
# Modes
|
||||
set -g clock-mode-colour "${color_status_fg}"
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
[Desktop Entry]
|
||||
Version=1.0
|
||||
Name=caraco Herdr
|
||||
Comment=remote dev
|
||||
Exec=terminal-launcher caraco-herdr "ssh caraco mise exec -- herdr --session main"
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Icon=foot
|
||||
StartupNotify=true
|
||||
@@ -0,0 +1,9 @@
|
||||
[Desktop Entry]
|
||||
Version=1.0
|
||||
Name=caraco tmux
|
||||
Comment=remote dev
|
||||
Exec=terminal-launcher caraco-tmux "ssh caraco mise exec -- tmux new -A -s main"
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Icon=foot
|
||||
StartupNotify=true
|
||||
@@ -0,0 +1,11 @@
|
||||
[Desktop Entry]
|
||||
Name=Strata
|
||||
Comment=A fast, keyboard-first file manager for Linux
|
||||
Exec=strata %U
|
||||
Icon=system-file-manager
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Categories=Utility;FileManager;
|
||||
MimeType=inode/directory;
|
||||
StartupNotify=true
|
||||
Keywords=file;manager;files;folder;directory;
|
||||
@@ -0,0 +1,9 @@
|
||||
[Desktop Entry]
|
||||
Version=1.0
|
||||
Name=Terminal pi
|
||||
Comment=Terminal with pi
|
||||
Exec=terminal-launcher "terminal-pi" "mise exec -C ~/Documents/sjb-brain -- pi --fff-enable-home-scan=false --model openai-codex/gpt-5.6-luna --plan"
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Icon=foot
|
||||
StartupNotify=true
|
||||
@@ -0,0 +1,9 @@
|
||||
[Desktop Entry]
|
||||
Version=1.0
|
||||
Name=rascar Herdr
|
||||
Comment=remote dev
|
||||
Exec=terminal-launcher rascar-herdr "ssh rascar mise exec -- herdr --session main"
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Icon=foot
|
||||
StartupNotify=true
|
||||
@@ -0,0 +1,9 @@
|
||||
[Desktop Entry]
|
||||
Version=1.0
|
||||
Name=rascar tmux
|
||||
Comment=remote dev
|
||||
Exec=terminal-launcher rascar-tmux "ssh rascar mise exec -- tmux new -A -s main"
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Icon=foot
|
||||
StartupNotify=true
|
||||
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
@@ -1,13 +1,14 @@
|
||||
[main]
|
||||
font=MonaspiceNeNerdFontMono:size=13
|
||||
term=xterm-256color
|
||||
pad=6x6
|
||||
pad=3x3
|
||||
initial-window-mode=windowed
|
||||
workers=0
|
||||
include=~/.config/omarchy/current/theme/foot.ini
|
||||
include=~/.local/state/omarchy/current/theme/foot.ini
|
||||
|
||||
[scrollback]
|
||||
lines=10000
|
||||
multiplier=7.0
|
||||
|
||||
[cursor]
|
||||
style=block
|
||||
@@ -20,3 +21,12 @@ clipboard-paste=Shift+Insert Control+Shift+v XF86Paste
|
||||
|
||||
[tweak]
|
||||
overflowing-glyphs=yes
|
||||
|
||||
[text-bindings]
|
||||
# Send Shift+Return as CSI-u so TUIs can distinguish it from Return.
|
||||
\x1b[13;2u=Shift+Return
|
||||
# Send Alt+Shift+Return as CSI-u so tmux can match M-S-Enter.
|
||||
\x1b[13;4u=Mod1+Shift+Return
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
source = ~/.config/omarchy/current/theme/hyprlock.conf
|
||||
source = ~/.local/state/omarchy/current/theme/hyprlock.conf
|
||||
|
||||
# GENERAL
|
||||
general {
|
||||
@@ -8,7 +8,7 @@ general {
|
||||
|
||||
background {
|
||||
monitor =
|
||||
path = ~/.config/omarchy/current/background
|
||||
path = ~/.local/state/omarchy/current/background
|
||||
color = $color
|
||||
}
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
hl.bind(sjb.HYPR .. "Z", hl.dsp.submap("passthru"), { description = "Passthru Menu" })
|
||||
hl.define_submap("passthru", function()
|
||||
hl.bind(sjb.HYPR .. "Z", hl.dsp.submap("reset"), { description = "Passthru: Exit" })
|
||||
end)
|
||||
|
||||
hl.bind(sjb.HYPR .. "A", hl.dsp.exec_cmd("gtk-launch pi.desktop"), { description = "Open pi tui" })
|
||||
|
||||
hl.bind(sjb.HYPR .. "O", dispatch_focus_or_launch({
|
||||
match = "chrome-outlook.office.com",
|
||||
cmd = "gtk-launch Outlook.desktop",
|
||||
}), { description = "Email" })
|
||||
|
||||
hl.bind(sjb.HYPR .. "T", dispatch_focus_or_launch({
|
||||
match = "chrome-teams.microsoft.com",
|
||||
cmd = "gtk-launch Team.desktop",
|
||||
}), { description = "UWO Team" })
|
||||
|
||||
hl.bind(sjb.HYPR .. "Y", dispatch_focus_or_launch({
|
||||
match = "chrome-youtube.com",
|
||||
cmd = "gtk-launch YouTube.desktop",
|
||||
}), { description = "YouTube" })
|
||||
|
||||
hl.bind(sjb.HYPR .. "W", dispatch_focus_or_launch({
|
||||
match = "chrome-web.whatsapp.com",
|
||||
cmd = "gtk-launch WhatsApp.desktop",
|
||||
}), { description = "WhatsApp" })
|
||||
|
||||
hl.bind(sjb.HYPR .. "G", dispatch_focus_or_launch({
|
||||
match = "chrome-chatgpt.com",
|
||||
cmd = "gtk-launch ChatGPT.desktop",
|
||||
}), { description = "ChatGPT" })
|
||||
|
||||
hl.bind(sjb.HYPR .. "D", dispatch_focus_or_launch({
|
||||
match = "chrome-discord.com",
|
||||
cmd = "gtk-launch Discord.desktop"
|
||||
}), { description = "Discord" })
|
||||
|
||||
hl.bind(sjb.HYPR .. "M", dispatch_focus_or_launch({
|
||||
match = "chrome-messages.google.com",
|
||||
cmd = "gtk-launch \"Google Messages.desktop\"",
|
||||
}), { description = "Google Messages" })
|
||||
|
||||
hl.bind(sjb.HYPR .. "X", dispatch_focus_or_launch({
|
||||
match = "X",
|
||||
cmd = "gtk-launch X.desktop",
|
||||
}), { description = "X" })
|
||||
|
||||
hl.bind(sjb.HYPR .. "S", dispatch_focus_or_launch({
|
||||
match = "Spotify",
|
||||
cmd = "gtk-launch spotify.desktop"
|
||||
}), { description = "Music" })
|
||||
@@ -0,0 +1,3 @@
|
||||
hl.on("hyprland.start", function()
|
||||
hl.exec_cmd("hyprctl setcursor Pop 24")
|
||||
end)
|
||||
@@ -0,0 +1,250 @@
|
||||
local terminal = "footclient"
|
||||
local browser = "gtk-launch chromium.desktop"
|
||||
|
||||
-- Keybindings
|
||||
|
||||
hl.bind("SUPER + SHIFT + RETURN", hl.dsp.exec_raw(browser), { description = "Open browser" })
|
||||
hl.bind("SUPER + SHIFT + B", hl.dsp.exec_raw(browser), { description = "Open browser" })
|
||||
hl.bind("SUPER + RETURN", hl.dsp.exec_cmd("footclient -a terminal -T terminal"),
|
||||
{ description = "Open terminal" })
|
||||
hl.bind("SUPER + SHIFT + F", dispatch_focus_or_launch({
|
||||
match = "strata",
|
||||
cmd = "gtk-launch io.github.lgse.Strata.desktop",
|
||||
}), { description = "File Manager" })
|
||||
|
||||
hl.bind("SUPER + CTRL + RETURN", hl.dsp.exec_cmd("gtk-launch herdr.desktop"),
|
||||
{ description = "Open herdr terminal" })
|
||||
hl.bind("SUPER + ALT + RETURN", hl.dsp.exec_cmd("gtk-launch tmux.desktop"),
|
||||
{ description = "Open tmux terminal" })
|
||||
|
||||
hl.bind("SUPER + SHIFT + N", hl.dsp.exec_cmd("terminal-launcher quicknotes \"nvim +'Obsidian today'\""),
|
||||
{ description = "Open Obsidian today in a centered floating window" })
|
||||
|
||||
hl.bind("SUPER + SHIFT + A", hl.dsp.exec_cmd("terminal-launcher agenda \"nvim +'Org agenda t'\""),
|
||||
{ description = "Open Org agenda in a centered floating window" })
|
||||
hl.bind("SUPER + CONTROL + A", hl.dsp.exec_cmd("terminal-launcher capture \"nvim +'Org capture t'\""),
|
||||
{ description = "Open Org capture in a centered floating window" })
|
||||
|
||||
hl.bind("SUPER + SHIFT + I", sysinfo, { description = "Show system info" })
|
||||
|
||||
-- hl.bind("SUPER + SHIFT + Q", hl.dsp.exec_raw("ostt launch --paste"), { description = "Open ostt" })
|
||||
-- hl.bind("F9", hl.dsp.exec_raw("ostt launch --paste"), { description = "Open ostt" })
|
||||
hl.bind("F9", hl.dsp.exec_raw("voxtype record toggle"), { description = "Toggle Voxtype dictation" })
|
||||
hl.bind("SUPER + SHIFT + Q", hl.dsp.exec_raw("voxtype record toggle"), { description = "Toggle Voxtype dictation" })
|
||||
|
||||
hl.bind("SUPER + Y", toggle_master_scrolling,
|
||||
{ description = "Layout: Toggle master/scrolling" })
|
||||
hl.bind("SUPER + W", hl.dsp.window.close(), { description = "Window: Close" })
|
||||
|
||||
hl.bind("SUPER + F", hl.dsp.window.fullscreen({ mode = "fullscreen", action = "toggle" }),
|
||||
{ description = "Window: Toggle fullscreen" })
|
||||
hl.bind("SUPER + CONTROL + F", hl.dsp.window.fullscreen_state({ internal = 2, client = 0, action = "toggle" }),
|
||||
{ description = "Window: Toggle Tiled fullscreen" })
|
||||
hl.bind("SUPER + ALT + F", hl.dsp.window.fullscreen_state({ internal = 0, client = 2, action = "toggle" }),
|
||||
{ description = "Window: Toggle full width" })
|
||||
|
||||
hl.bind("SUPER + T", toggle_float_with_limit,
|
||||
{ description = "Window: Toggle floating/tiling (max 80%)" })
|
||||
|
||||
hl.bind("SUPER + P", toggle_pin, { description = "Window: Toggle Pin" })
|
||||
|
||||
hl.bind("SUPER + left", hl.dsp.focus({ direction = "l" }), { description = "Window: Focus left" })
|
||||
hl.bind("SUPER + right", hl.dsp.focus({ direction = "r" }), { description = "Window: Focus right" })
|
||||
hl.bind("SUPER + up", hl.dsp.focus({ direction = "u" }), { description = "Window: Focus up" })
|
||||
hl.bind("SUPER + down", hl.dsp.focus({ direction = "d" }), { description = "Window: Focus down" })
|
||||
|
||||
hl.bind("SUPER + H", hl.dsp.focus({ direction = "l" }), { description = "Window: Focus left" })
|
||||
hl.bind("SUPER + L", hl.dsp.focus({ direction = "r" }), { description = "Window: Focus right" })
|
||||
hl.bind("SUPER + K", hl.dsp.focus({ direction = "u" }), { description = "Window: Focus up" })
|
||||
hl.bind("SUPER + J", hl.dsp.focus({ direction = "d" }), { description = "Window: Focus down" }) -- hl.bind("SUPER + H", hl.dsp.window.resize("left"), { repeating = true, description = "Window: Resize left" })
|
||||
|
||||
-- hl.bind("SUPER + z", hl.dsp.focus({ last = true }), { description = "Window: Focus last" })
|
||||
hl.bind("SUPER + Z", hl.dsp.focus({ urgent_or_last = true }), { description = "Window: Focus last" })
|
||||
|
||||
hl.bind("SUPER + ALT + period", hl.dsp.layout("cycleprev"), { description = "Window: Swap with next" })
|
||||
hl.bind("SUPER + ALT + comma", hl.dsp.layout("cyclenext"), { description = "Window: Swap with prev" })
|
||||
|
||||
-- hl.bind("SUPER + ALT + comma", hl.dsp.workspace.move({ monitor = "-1" }),
|
||||
-- { description = "Window: Move to previous workspace and follow" })
|
||||
|
||||
-- hl.bind("SUPER + ALT + period", hl.dsp.workspace.move({ monitor = "+1" }),
|
||||
-- { description = "Window: Move to next workspace and follow" })
|
||||
|
||||
-- FIX: sjb
|
||||
--hl.bind("SUPER + J", hl.dsp.layout("togglesplit"), { description = "Toggle window split" })
|
||||
--hl.bind("SUPER + P", hl.dsp.window.pseudo(), { description = "Pseudo window" })
|
||||
|
||||
hl.bind("ALT + Tab", cycle_next_window({ next = true }), { description = "Window: Cycle next" })
|
||||
hl.bind("ALT + SHIFT + Tab", cycle_next_window({ next = false }), { description = "Window: Cycle prev" })
|
||||
|
||||
hl.bind("CONTROL + ALT + TAB", hl.dsp.focus({ monitor = "+1" }), { description = "Focus on next monitor" })
|
||||
hl.bind("CONTROL + ALT + SHIFT + TAB", hl.dsp.focus({ monitor = "-1" }), { description = "Focus on previous monitor" })
|
||||
|
||||
hl.bind("SUPER + S", hl.dsp.workspace.toggle_special("scratchpad"), { description = "Toggle scratchpad" })
|
||||
hl.bind("SUPER + ALT + S", hl.dsp.window.move({ workspace = "special:scratchpad", follow = false }),
|
||||
{ description = "Move window to scratchpad" })
|
||||
|
||||
-- hl.bind("SUPER + TAB", hl.dsp.focus({ monitor = "+1" }), { description = "Monitor: move focus to next monitor" })
|
||||
hl.bind("SUPER + TAB", hl.dsp.focus({ workspace = "e+1" }), { description = "Next workspace" })
|
||||
hl.bind("SUPER + SHIFT + TAB", hl.dsp.focus({ workspace = "e-1" }), { description = "Previous workspace" })
|
||||
hl.bind("SUPER + CONTROL + TAB", hl.dsp.focus({ workspace = "previous" }), { description = "Former workspace" })
|
||||
|
||||
hl.bind("SUPER + ALT + SHIFT + LEFT", hl.dsp.workspace.move({ monitor = "l" }),
|
||||
{ description = "Move workspace to left monitor" })
|
||||
hl.bind("SUPER + ALT + SHIFT + RIGHT", hl.dsp.workspace.move({ monitor = "r" }),
|
||||
{ description = "Move workspace to right monitor" })
|
||||
hl.bind("SUPER + ALT + SHIFT + UP", hl.dsp.workspace.move({ monitor = "u" }),
|
||||
{ description = "Move workspace to up monitor" })
|
||||
hl.bind("SUPER + ALT + SHIFT + DOWN", hl.dsp.workspace.move({ monitor = "d" }),
|
||||
{ description = "Move workspace to down monitor" })
|
||||
|
||||
hl.bind("SUPER + SHIFT + LEFT", hl.dsp.window.swap({ direction = "l" }), { description = "Swap window to the left" })
|
||||
hl.bind("SUPER + SHIFT + RIGHT", hl.dsp.window.swap({ direction = "r" }), { description = "Swap window to the right" })
|
||||
hl.bind("SUPER + SHIFT + UP", hl.dsp.window.swap({ direction = "u" }), { description = "Swap window up" })
|
||||
hl.bind("SUPER + SHIFT + DOWN", hl.dsp.window.swap({ direction = "d" }), { description = "Swap window down" })
|
||||
|
||||
hl.bind("SUPER + ALT + Tab", hl.dsp.focus({ workspace = "next", on_current_monitor = true }),
|
||||
{ description = "Window: Focus previous in workspace" })
|
||||
hl.bind("SUPER + ALT + SHIFT + Tab", hl.dsp.focus({ workspace = "previous", on_current_monitor = true }),
|
||||
{ description = "Window: Focus previous in workspace" })
|
||||
|
||||
-- arrange split ratio
|
||||
hl.bind("SUPER + SHIFT + M", toggle_master, { description = "Layout: Toggle master size" })
|
||||
hl.bind("SUPER + M", function()
|
||||
local ws = hl.get_active_workspace()
|
||||
local current_layout = ws.tiled_layout
|
||||
if current_layout == "master" then
|
||||
hl.dispatch(hl.dsp.layout("swapwithmaster"))
|
||||
end
|
||||
if current_layout == "scrolling" then
|
||||
hl.dispatch(hl.dsp.layout("consume_or_expel next"))
|
||||
end
|
||||
end, { description = "Layout: Swap with master" })
|
||||
|
||||
hl.bind("SUPER + period", function()
|
||||
local ws = hl.get_active_workspace()
|
||||
local current_layout = ws.tiled_layout
|
||||
if current_layout == "master" then
|
||||
hl.dispatch(hl.dsp.layout("cycleprev"))
|
||||
hl.dispatch(hl.dsp.layout("swapwithmaster"))
|
||||
end
|
||||
|
||||
if current_layout == "scrolling" then
|
||||
hl.dispatch(hl.dsp.layout("swapcol r"))
|
||||
hl.dispatch(hl.dsp.layout("focus l"))
|
||||
end
|
||||
-- hl.dispatch(hl.dsp.layout("focus r"))
|
||||
end, { description = "Layout: Cycle next" })
|
||||
|
||||
hl.bind("SUPER + comma", function()
|
||||
local ws = hl.get_active_workspace()
|
||||
local current_layout = ws.tiled_layout
|
||||
if current_layout == "master" then
|
||||
hl.dispatch(hl.dsp.layout("cyclenext"))
|
||||
hl.dispatch(hl.dsp.layout("swapwithmaster"))
|
||||
end
|
||||
|
||||
if current_layout == "scrolling" then
|
||||
hl.dispatch(hl.dsp.layout("swapcol l"))
|
||||
hl.dispatch(hl.dsp.layout("focus r"))
|
||||
end
|
||||
-- hl.dispatch(hl.dsp.layout("focus l"))
|
||||
end, { description = "Layout: Cycle previous" })
|
||||
|
||||
hl.bind("SUPER + SHIFT + comma", hl.dsp.window.move({ workspace = "-1" }),
|
||||
{ description = "Window: Move to previous workspace" })
|
||||
|
||||
hl.bind("SUPER + SHIFT + period", hl.dsp.window.move({ workspace = "+1" }),
|
||||
{ description = "Window: Move to next workspace" })
|
||||
|
||||
|
||||
hl.bind("SUPER + CONTROL + SHIFT + slash",
|
||||
hl.dsp.exec_cmd("makoctl mode -t do-not-disturb"),
|
||||
{ description = "Toggle do-not-disturb" })
|
||||
|
||||
hl.bind("SUPER + CONTROL + Delete", hl.dsp.exec_cmd("hyprland-toggle-monitor eDP-1"),
|
||||
{ description = "Toggle laptop display" })
|
||||
|
||||
hl.on("keybinds.submap", function(name)
|
||||
if name == "" then
|
||||
hl.notification.create({ text = "Exited submap", duration = 2000, icon = "hint" })
|
||||
return
|
||||
end
|
||||
hl.notification.create({ text = "Entered submap: " .. name, duration = 2000, icon = "hint" })
|
||||
end)
|
||||
|
||||
hl.bind("SUPER + F9", hl.dsp.submap("resize"), { description = "Resize Menu" })
|
||||
hl.define_submap("resize", function()
|
||||
hl.bind("period", hl.dsp.window.resize({ x = 10, y = 10, relative = true }),
|
||||
{ repeating = true, description = "Resize: Increase" })
|
||||
hl.bind("comma", hl.dsp.window.resize({ x = -10, y = -10, relative = true }),
|
||||
{ repeating = true, description = "Resize: Decrease" })
|
||||
hl.bind("R", function()
|
||||
window_resize_percentage(0.5, 0.5)
|
||||
end, { description = "Resize: Reset" })
|
||||
hl.bind("S", function()
|
||||
window_resize_percentage(0.25, 0.25)
|
||||
end, { description = "Resize: Small" })
|
||||
hl.bind("D", function()
|
||||
window_resize_percentage(0.7, 0.96)
|
||||
hl.dispatch(hl.dsp.window.center())
|
||||
end, { description = "Resize: Large" })
|
||||
hl.bind("C", hl.dsp.window.center(), { description = "Resize: Center" })
|
||||
hl.bind("P", hl.dsp.window.pin(), { description = "Resize: Pin" })
|
||||
hl.bind("up", hl.dsp.window.move({ direction = "up" }), { description = "Resize: Move up" })
|
||||
hl.bind("down", hl.dsp.window.move({ direction = "down" }), { description = "Resize: Move down" })
|
||||
hl.bind("left", hl.dsp.window.move({ direction = "left" }), { description = "Resize: Move left" })
|
||||
hl.bind("right", hl.dsp.window.move({ direction = "right" }), { description = "Resize: Move right" })
|
||||
hl.bind("escape", hl.dsp.submap("reset"), { description = "Resize: Exit" })
|
||||
hl.bind("catchall", hl.dsp.submap("reset"), { description = "Resize: Exit" })
|
||||
end)
|
||||
|
||||
local workspaceGroupSize = 10
|
||||
local numberkey = { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 }
|
||||
|
||||
function workspace_in_group(i)
|
||||
local curr = hl.get_active_workspace().id
|
||||
local newVal = math.floor((curr - 1) / workspaceGroupSize) * workspaceGroupSize + i
|
||||
return newVal
|
||||
end
|
||||
|
||||
for i = 1, 10 do
|
||||
hl.bind("SUPER + CONTROL + code:" .. numberkey[i], function()
|
||||
hl.dispatch(hl.dsp.workspace.move({ monitor = "+1", workspace = workspace_in_group(i), follow = true }))
|
||||
end, { description = "Workspace: Move monitor " .. i })
|
||||
end
|
||||
|
||||
for i = 1, 10 do
|
||||
hl.bind("SUPER + SHIFT + code:" .. numberkey[i], function()
|
||||
hl.dispatch(hl.dsp.window.move({ workspace = workspace_in_group(i), follow = true }))
|
||||
end, { description = "Workspace: Move " .. i })
|
||||
end
|
||||
|
||||
for i = 1, 10 do
|
||||
hl.bind("SUPER + code:" .. numberkey[i], function()
|
||||
hl.dispatch(hl.dsp.focus({ workspace = workspace_in_group(i), on_current_monitor = true }))
|
||||
end, { description = "Workspace: Focus " .. i })
|
||||
end
|
||||
|
||||
-- Scroll through existing workspaces with mainMod + scroll
|
||||
hl.bind("SUPER + mouse_down", hl.dsp.focus({ workspace = "e+1" }), { description = "Workspace: Next" })
|
||||
hl.bind("SUPER + mouse_up", hl.dsp.focus({ workspace = "e-1" }), { description = "Workspace: Previous" })
|
||||
|
||||
-- Move/resize windows with mainMod + LMB/RMB and dragging
|
||||
hl.bind("SUPER + mouse:272", hl.dsp.window.drag(), { mouse = true, description = "Window: Drag" })
|
||||
hl.bind("SUPER + mouse:273", hl.dsp.window.resize(), { mouse = true, description = "Window: Resize" })
|
||||
hl.bind("mouse:275", hl.dsp.window.cycle_next({ next = true }), { click = true, description = "Window: Cycle next" })
|
||||
hl.bind("mouse:276", hl.dsp.window.cycle_next({ next = false }), { click = true, description = "Window: Cycle previous" })
|
||||
|
||||
hl.bind(sjb.HYPR .. "semicolon", hl.dsp.exec_cmd("~/.local/bin/set-wallpaper.sh categories/technics"),
|
||||
{ description = "get new wallpaper" })
|
||||
|
||||
-- Gestures
|
||||
-- hl.gesture({ fingers = 3, direction = "horizontal", action = "workspace" })
|
||||
-- hl.gesture({ fingers = 3, direction = "down", mods = "ALT", action = "close" })
|
||||
-- hl.gesture({ fingers = 3, direction = "up", mods = "SUPER", scale = 1.5, action = "fullscreen" })
|
||||
-- hl.gesture({ fingers = 3, direction = "left", scale = 1.5, action = "float" })
|
||||
--
|
||||
-- hl.gesture({ fingers = 2, direction = "pinch", action = "cursorZoom", zoom_level = 2 })
|
||||
-- hl.gesture({ fingers = 2, direction = "pinch", action = "cursorZoom", zoom_level = 1.2, mode = "mult" })
|
||||
-- hl.gesture({ fingers = 2, direction = "pinch", action = "cursorZoom", zoom_level = 1, mode = "live" })
|
||||
@@ -0,0 +1,154 @@
|
||||
hl.config({
|
||||
input = {
|
||||
kb_layout = "us",
|
||||
kb_variant = ",qwerty",
|
||||
-- kb_model =
|
||||
-- kb_options = ctrl:nocaps
|
||||
kb_options = "caps:ctrl_modifier,compose:ralt",
|
||||
-- kb_options = compose:ralt
|
||||
follow_mouse = 1,
|
||||
repeat_rate = 40,
|
||||
repeat_delay = 600,
|
||||
|
||||
touchpad = {
|
||||
natural_scroll = true,
|
||||
disable_while_typing = true,
|
||||
clickfinger_behavior = true,
|
||||
scroll_factor = 0.7,
|
||||
},
|
||||
scroll_method = "2fg",
|
||||
|
||||
sensitivity = 0, -- -1.0 - 1.0, 0 means no modification.
|
||||
},
|
||||
|
||||
ecosystem = {
|
||||
no_update_news = true,
|
||||
enforce_permissions = false,
|
||||
},
|
||||
|
||||
general = {
|
||||
gaps_in = 3,
|
||||
gaps_out = 3,
|
||||
border_size = 2,
|
||||
allow_tearing = true,
|
||||
snap = {
|
||||
enabled = true
|
||||
},
|
||||
col = {
|
||||
active_border = { colors = { "rgba(33ccffee)", "rgba(00ff99ee)" }, angle = 45 },
|
||||
inactive_border = "rgba(595959aa)",
|
||||
},
|
||||
|
||||
layout = "master"
|
||||
},
|
||||
|
||||
master = {
|
||||
allow_small_split = true,
|
||||
mfact = 0.50,
|
||||
new_status = "master",
|
||||
orientation = "center",
|
||||
},
|
||||
|
||||
dwindle = {
|
||||
preserve_split = true,
|
||||
force_split = 2,
|
||||
},
|
||||
|
||||
scrolling = {
|
||||
focus_fit_method = 0,
|
||||
column_width = 0.49,
|
||||
fullscreen_on_one_column = true
|
||||
},
|
||||
|
||||
cursor = {
|
||||
hide_on_key_press = true,
|
||||
warp_on_change_workspace = 1,
|
||||
},
|
||||
|
||||
binds = {
|
||||
hide_special_on_workspace_change = true,
|
||||
},
|
||||
decoration = {
|
||||
rounding = 1,
|
||||
active_opacity = 1.0,
|
||||
inactive_opacity = 0.95,
|
||||
dim_inactive = true,
|
||||
dim_special = 0.0,
|
||||
dim_strength = 0.3,
|
||||
|
||||
shadow = {
|
||||
enabled = false,
|
||||
range = 2,
|
||||
render_power = 3,
|
||||
color = "rgba(1a1a1aee)",
|
||||
},
|
||||
|
||||
blur = {
|
||||
enabled = false,
|
||||
size = 3,
|
||||
passes = 1,
|
||||
vibrancy = 0.1696,
|
||||
},
|
||||
},
|
||||
|
||||
group = {
|
||||
groupbar = {
|
||||
enabled = false
|
||||
}
|
||||
},
|
||||
|
||||
misc = {
|
||||
disable_hyprland_logo = true,
|
||||
disable_splash_rendering = true,
|
||||
disable_scale_notification = true,
|
||||
focus_on_activate = true,
|
||||
anr_missed_pings = 3,
|
||||
on_focus_under_fullscreen = 1,
|
||||
mouse_move_enables_dpms = true,
|
||||
animate_manual_resizes = true,
|
||||
mouse_move_focuses_monitor = true,
|
||||
enable_swallow = true,
|
||||
enable_anr_dialog = false,
|
||||
force_default_wallpaper = true,
|
||||
initial_workspace_tracking = 0,
|
||||
allow_session_lock_restore = true,
|
||||
},
|
||||
|
||||
xwayland = {
|
||||
force_zero_scaling = true
|
||||
},
|
||||
|
||||
animations = {
|
||||
enabled = true,
|
||||
}
|
||||
})
|
||||
|
||||
hl.curve("almostLinear", { type = "bezier", points = { { 0.5, 0.5 }, { 0.75, 1.0 } } })
|
||||
hl.curve("linear", { type = "bezier", points = { { 0, 0 }, { 1, 1 } } })
|
||||
hl.curve("generic", { type = "bezier", points = { { 0.5, 0.9 }, { 0.1, 1.08 } } })
|
||||
hl.curve("quick", { type = "bezier", points = { { 0.15, 0 }, { 0.1, 1.0 } } })
|
||||
hl.curve("overshoot", { type = "bezier", points = { { 0.5, 0.9 }, { 0.1, 1.1 } } })
|
||||
hl.curve("rubber", { type = "spring", mass = 1, stiffness = 70, dampening = 10 })
|
||||
|
||||
hl.curve("easeOutQuint", { type = "bezier", points = { { 0.23, 1 }, { 0.32, 1 } } })
|
||||
hl.curve("easeInOutCubic", { type = "bezier", points = { { 0.65, 0.05 }, { 0.36, 1 } } })
|
||||
|
||||
hl.animation({ leaf = "global", enabled = true, speed = 10, bezier = "default" })
|
||||
hl.animation({ leaf = "border", enabled = true, speed = 5.39, bezier = "easeOutQuint" })
|
||||
hl.animation({ leaf = "windows", enabled = true, speed = 3.79, bezier = "easeOutQuint" })
|
||||
hl.animation({ leaf = "windowsIn", enabled = true, speed = 4.1, bezier = "easeOutQuint", style = "popin 87%" })
|
||||
hl.animation({ leaf = "windowsOut", enabled = true, speed = 1.49, bezier = "linear", style = "popin 87%" })
|
||||
hl.animation({ leaf = "fadeIn", enabled = true, speed = 1.73, bezier = "almostLinear" })
|
||||
hl.animation({ leaf = "fadeOut", enabled = true, speed = 1.46, bezier = "almostLinear" })
|
||||
hl.animation({ leaf = "fade", enabled = true, speed = 3.03, bezier = "quick" })
|
||||
hl.animation({ leaf = "fadeSwitch", enabled = false })
|
||||
hl.animation({ leaf = "layers", enabled = true, speed = 3.81, bezier = "easeOutQuint" })
|
||||
hl.animation({ leaf = "layersIn", enabled = true, speed = 4, bezier = "easeOutQuint", style = "fade" })
|
||||
hl.animation({ leaf = "layersOut", enabled = true, speed = 1.5, bezier = "linear", style = "fade" })
|
||||
hl.animation({ leaf = "fadeLayersIn", enabled = true, speed = 1.79, bezier = "almostLinear" })
|
||||
hl.animation({ leaf = "fadeLayersOut", enabled = true, speed = 1.39, bezier = "almostLinear" })
|
||||
hl.animation({ leaf = "workspaces", enabled = true, speed = 0.5, bezier = "quick" })
|
||||
|
||||
hl.animation({ leaf = "specialWorkspaceIn", enabled = true, speed = 3, bezier = "easeOutQuint", style = "slide top" })
|
||||
hl.animation({ leaf = "specialWorkspaceOut", enabled = true, speed = 2, bezier = "easeInOutCubic", style = "slide bottom" })
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
|
||||
-- Cursor size
|
||||
hl.env("XCURSOR_SIZE", "24")
|
||||
hl.env("HYPRCURSOR_SIZE", "24")
|
||||
|
||||
-- Force all apps to use Wayland
|
||||
hl.env("GDK_BACKEND", "wayland,x11,*")
|
||||
hl.env("QT_QPA_PLATFORM", "wayland;xcb")
|
||||
hl.env("QT_STYLE_OVERRIDE", "kvantum")
|
||||
hl.env("SDL_VIDEODRIVER", "wayland")
|
||||
hl.env("MOZ_ENABLE_WAYLAND", "1")
|
||||
hl.env("ELECTRON_OZONE_PLATFORM_HINT", "wayland")
|
||||
hl.env("OZONE_PLATFORM", "wayland")
|
||||
hl.env("XDG_SESSION_TYPE", "wayland")
|
||||
|
||||
-- Allow better support for screen sharing (Google Meet"," Discord, etc)
|
||||
hl.env("XDG_CURRENT_DESKTOP", "Hyprland")
|
||||
hl.env("XDG_SESSION_DESKTOP", "Hyprland")
|
||||
|
||||
-- Use XCompose file
|
||||
hl.env("XCOMPOSEFILE", "~/.XCompose")
|
||||
|
||||
-- Make Chromium use XCompose and all Wayland
|
||||
hl.env("CHROMIUM_FLAGS", "--enable-features=UseOzonePlatform --ozone-platform=wayland --gtk-version=4")
|
||||
|
||||
-- Make .desktop files available for wofi
|
||||
hl.env("XDG_DATA_DIRS", "/usr/share:/usr/local/share:~/.local/share")
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
-- Open rofi on first press, closes it on second
|
||||
hl.bind("SUPER + Space", hl.dsp.exec_raw("rofi -show combi --modes combi"),
|
||||
{ release = true, description = "Open Application Menu" })
|
||||
hl.bind("SUPER + SHIFT + SPACE", hl.dsp.exec_cmd("~/.local/bin/hyprland-fetch-client"),
|
||||
{ release = true, description = "Fetch client" })
|
||||
hl.bind("SUPER + CONTROL + SPACE",
|
||||
hl.dsp.exec_cmd("~/.local/bin/hyprland-focus-client"),
|
||||
{ release = true, description = "Focus client" }
|
||||
)
|
||||
hl.bind("SUPER + slash",
|
||||
hl.dsp.exec_cmd("ROFI_PASS_BACKEND=wtype ROFI_PASS_CLIPBOARD_BACKEND=wl-clipboard ~/.local/bin/rofi-pass"),
|
||||
{ release = true, description = "Open rofi-pass" })
|
||||
|
||||
hl.bind("SUPER + Y", hl.dsp.exec_cmd("makoctl dismiss"), { description = "Dismiss notifications" })
|
||||
|
||||
hl.bind(sjb.HYPR .. "V", hl.dsp.exec_cmd("pavucontrol"), { description = "Volume control" })
|
||||
hl.bind(sjb.HYPR .. "B", hl.dsp.exec_cmd("blueberry"), { description = "Bluetooth manager" })
|
||||
|
||||
hl.bind("SUPER + Escape", hl.dsp.exec_raw("loginctl lock-session"), { description = "Lock screen" })
|
||||
hl.bind("SUPER + SHIFT + escape", hl.dsp.exec_raw("systemctl suspend"), { description = "Suspend" })
|
||||
hl.bind("SUPER + ALT + escape", hl.dsp.exit(), { description = "Exit Hyprland" })
|
||||
hl.bind("SUPER + CONTROL + escape", hl.dsp.exec_raw("reboot"), { description = "Reboot" })
|
||||
hl.bind("SUPER + SHIFT + CONTROL + escape", hl.dsp.exec_raw("systemctl poweroff"), { description = "Power off" })
|
||||
|
||||
hl.bind("PRINT",
|
||||
hl.dsp.exec_cmd("hyprshot -m window -o ~/Pictures/ -- tensaku-edit"),
|
||||
{ description = "Take screenshot" })
|
||||
|
||||
hl.bind("SHIFT + PRINT",
|
||||
hl.dsp.exec_cmd("hyprshot -m region -o ~/Pictures/ -- tensaku-edit"),
|
||||
{ description = "Take screenshot" })
|
||||
|
||||
hl.bind("SUPER + PRINT", hl.dsp.exec_cmd("pkill hyprpicker || hyprpicker -a"), { description = "Pick color" })
|
||||
hl.bind("SUPER + CONTROL + PRINT",
|
||||
hl.dsp.exec_cmd("hyprshot -m region --raw -z | /usr/bin/tesseract stdin stdout --oem 1 --psm 6 -l eng | wl-copy"),
|
||||
{ description = "Extract text (OCR) from screenshot" })
|
||||
|
||||
hl.bind("SUPER + ALT + PRINT",
|
||||
hl.dsp.exec_cmd("~/.local/bin/screen-recorder -o ~/Videos/$(date +'%Y-%m-%d_%H%M%S')_recording.mp4"),
|
||||
{ description = "Start/Stop screen recording" })
|
||||
|
||||
hl.bind("SUPER + ALT + SHIFT + PRINT",
|
||||
hl.dsp.exec_cmd("~/.local/bin/screen-recorder stop"),
|
||||
{ description = "Stop screen recording" })
|
||||
|
||||
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"),
|
||||
{ repeating = true, description = "Volume down" })
|
||||
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+"),
|
||||
{ repeating = true, description = "Volume up" })
|
||||
hl.bind("XF86AudioMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"), { description = "Toggle mute" })
|
||||
hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"),
|
||||
{ description = "Toggle mic mute" })
|
||||
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("brightnessctl s 10%+"),
|
||||
{ repeating = true, description = "Brightness up" })
|
||||
hl.bind("XF86MonBrightnessDown", hl.dsp.exec_cmd("brightnessctl s 10%-"),
|
||||
{ repeating = true, description = "Brightness down" })
|
||||
hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play-pause"), { description = "Play/pause media" })
|
||||
hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), { description = "Previous media" })
|
||||
hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), { description = "Next media" })
|
||||
@@ -0,0 +1,221 @@
|
||||
sjb = sjb or {}
|
||||
|
||||
local function file_exists(path)
|
||||
local file = io.open(path, "r")
|
||||
if file then
|
||||
file:close()
|
||||
return true
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
function sjb.omarchy_tools_available()
|
||||
return file_exists("/usr/bin/omarchy-menu")
|
||||
end
|
||||
|
||||
sjb.HYPR = "SUPER + CONTROL + SHIFT + ALT + "
|
||||
|
||||
function sysinfo()
|
||||
local mem = io.popen("free -h | awk '/^Mem/ {print $3 \"/\" $2}'"):read("*a")
|
||||
local cpu = io.popen("top -bn1 | grep 'Cpu(s)' | awk '{print $2 + $4 \"%\"}'"):read("*a")
|
||||
local battery = io.popen("acpi -b | awk -F', ' '{print $2}'"):read("*a")
|
||||
local time = os.date("%Y-%m-%d %H:%M:%S")
|
||||
local monitor = hl.get_active_monitor()
|
||||
local workspace_id = monitor.active_workspace.id
|
||||
local mesg = "System Info"
|
||||
.. "\nDate: " .. time
|
||||
.. "\nFocused monitor: " .. monitor.name
|
||||
.. "\nWorkspace: " .. workspace_id
|
||||
.. "\nBattery: " .. battery
|
||||
.. "CPU: " .. cpu .. " MEM: " .. mem
|
||||
|
||||
hl.notification.create({ text = mesg, icon = "hint", duration = 5000 })
|
||||
end
|
||||
|
||||
function toggle_pin()
|
||||
local win = hl.get_active_window()
|
||||
if win == nil then
|
||||
return
|
||||
end
|
||||
|
||||
local is_pinned = win.pinned
|
||||
hl.dispatch(hl.dsp.window.pin({ action = is_pinned and "unset" or "set" }))
|
||||
end
|
||||
|
||||
function dispatch_focus_or_launch(opts)
|
||||
return function()
|
||||
focus_or_launch(opts)
|
||||
end
|
||||
end
|
||||
|
||||
function focus_or_launch(opts)
|
||||
local match = opts.match
|
||||
local cmd = opts.cmd
|
||||
local field = opts.field or "class" -- class, title, initialClass, initialTitle
|
||||
local use_workspace = opts.use_workspace ~= false
|
||||
|
||||
local clients = hl.get_windows()
|
||||
|
||||
for _, client in ipairs(clients) do
|
||||
local value = client[field]
|
||||
if value and string.find(string.lower(value), string.lower(match), 1, true) then
|
||||
if use_workspace and client.workspace and client.workspace.id then
|
||||
hl.dispatch(hl.dsp.focus({
|
||||
workspace = client.workspace.id,
|
||||
on_current_monitor = true,
|
||||
}))
|
||||
end
|
||||
hl.dispatch(hl.dsp.focus({
|
||||
window = "address:" .. client.address
|
||||
}))
|
||||
|
||||
local layout = client.layout
|
||||
if not (layout and layout.name == "master" and layout.is_master) then
|
||||
hl.dispatch(hl.dsp.layout("swapwithmaster"))
|
||||
end
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
hl.exec_cmd(cmd)
|
||||
end
|
||||
|
||||
function fetch_or_launch(opts)
|
||||
local match = opts.match
|
||||
local cmd = opts.cmd
|
||||
local field = opts.field or "class" -- class, title, initialClass, initialTitle
|
||||
local use_workspace = opts.use_workspace ~= false
|
||||
|
||||
local clients = hl.get_windows()
|
||||
|
||||
local active_workspace = hl.get_active_workspace()
|
||||
|
||||
for _, client in ipairs(clients) do
|
||||
local value = client[field]
|
||||
if value and string.find(string.lower(value), string.lower(match), 1, true) then
|
||||
if use_workspace and client.workspace and client.workspace.id then
|
||||
hl.dispatch(hl.dsp.window.move({
|
||||
workspace = active_workspace,
|
||||
on_current_monitor = true,
|
||||
window = client,
|
||||
}))
|
||||
end
|
||||
|
||||
hl.dispatch(hl.dsp.focus({ window = client }))
|
||||
|
||||
local layout = client.layout
|
||||
if not (layout and layout.name == "master" and layout.is_master) then
|
||||
hl.dispatch(hl.dsp.layout("swapwithmaster"))
|
||||
end
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
hl.exec_cmd(cmd)
|
||||
end
|
||||
|
||||
function toggle_master()
|
||||
local ws = hl.get_active_workspace()
|
||||
if not ws then
|
||||
return
|
||||
end
|
||||
|
||||
local mfact = nil
|
||||
|
||||
for _, win in ipairs(ws:get_windows()) do
|
||||
local layout = win.layout
|
||||
if layout and layout.name == "master" and layout.is_master then
|
||||
mfact = math.floor(layout.perc_master * 100 + 0.5) / 100
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if mfact == nil then
|
||||
return
|
||||
end
|
||||
|
||||
if mfact == 0.7 then
|
||||
mfact = 0.5
|
||||
else
|
||||
mfact = 0.7
|
||||
end
|
||||
hl.dispatch(hl.dsp.layout("mfact exact " .. mfact))
|
||||
end
|
||||
|
||||
function toggle_float_with_limit()
|
||||
local win = hl.get_active_window()
|
||||
if win == nil then
|
||||
return
|
||||
end
|
||||
|
||||
local was_floating = win.floating
|
||||
hl.dispatch(hl.dsp.window.float({ action = "toggle" }))
|
||||
if was_floating then
|
||||
return
|
||||
end
|
||||
|
||||
local mon = win.monitor and hl.get_monitor(win.monitor) or hl.get_active_monitor()
|
||||
if mon == nil or mon.size == nil or win == nil or win.size == nil then
|
||||
return
|
||||
end
|
||||
|
||||
local max_width = math.floor(mon.width * 0.8)
|
||||
local max_height = math.floor(mon.height * 0.8)
|
||||
local scale = math.max(1, win.size.x / max_width, win.size.y / max_height)
|
||||
hl.notification.create({
|
||||
text = "Scale " ..
|
||||
scale .. " Max float size: " .. win.size.x / max_width .. "x" .. win.size.y / max_height,
|
||||
duration = 2000,
|
||||
icon =
|
||||
"hint"
|
||||
})
|
||||
if scale > 1 then
|
||||
hl.dispatch(hl.dsp.window.resize({
|
||||
x = math.floor(max_width),
|
||||
y = math.floor(max_height),
|
||||
relative = false,
|
||||
window = win
|
||||
}))
|
||||
end
|
||||
end
|
||||
|
||||
function cycle_next_window(opts)
|
||||
return function()
|
||||
hl.dispatch(hl.dsp.window.cycle_next(opts))
|
||||
|
||||
local win = hl.get_active_window()
|
||||
if win and win.floating then
|
||||
hl.dispatch(hl.dsp.window.alter_zorder({ window = win, mode = "top" }))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function window_resize_percentage(px, py)
|
||||
local win = hl.get_active_window()
|
||||
if win == nil or win.monitor == nil then
|
||||
return
|
||||
end
|
||||
local mon = hl.get_monitor(win.monitor)
|
||||
|
||||
if mon == nil or mon.size == nil or mon.size.height == nil or mon.size.width == nil then
|
||||
return
|
||||
end
|
||||
local sx = math.floor(mon.size.width * px)
|
||||
local sy = math.floor(mon.size.height * py)
|
||||
if not win.floating then
|
||||
hl.dispatch(hl.dsp.window.float({ action = "set" }))
|
||||
end
|
||||
if win.fullscreen then
|
||||
hl.dispatch(hl.dsp.window.fullscreen({ action = "unset" }))
|
||||
end
|
||||
hl.dispatch(hl.dsp.window.resize({ x = sx, y = sy, relative = false }))
|
||||
end
|
||||
|
||||
function toggle_master_scrolling()
|
||||
local ws = hl.get_active_workspace()
|
||||
|
||||
local next_layout = ws.tiled_layout == "master" and "scrolling" or "master"
|
||||
hl.notification.create({ text = "Workspace layout set to " .. next_layout, icon = "hint", duration = 5000 })
|
||||
hl.workspace_rule({ workspace = ws.id, layout = next_layout })
|
||||
end
|
||||
@@ -0,0 +1,16 @@
|
||||
require("sjb/monitors")
|
||||
require("sjb/configuration")
|
||||
require("sjb/functions")
|
||||
require("sjb/rules")
|
||||
require("sjb/envs")
|
||||
require("sjb/autostart")
|
||||
require("sjb/bindings")
|
||||
require("sjb/applications")
|
||||
|
||||
if sjb.omarchy_tools_available() then
|
||||
require("sjb/omarchy")
|
||||
require("sjb/utilities")
|
||||
else
|
||||
require("sjb/extra")
|
||||
end
|
||||
-- require("theme")
|
||||
@@ -0,0 +1,70 @@
|
||||
hl.monitor({ output = "desc:Lenovo Group Limited 0x41A0", mode = "highrr", position = "0x0", scale = "1.0" })
|
||||
hl.monitor({ output = "desc:Samsung Display Corp. 0x4143", mode = "highrr", position = "0x0", scale = "2" })
|
||||
hl.monitor({
|
||||
output = "desc:LG Electronics LG HDR 4K 406NTZN74597",
|
||||
mode = "preferred",
|
||||
position = "auto-right",
|
||||
scale =
|
||||
"1.333333"
|
||||
})
|
||||
|
||||
hl.monitor({
|
||||
output = "desc:Apple Computer Inc LED Cinema W82104Y16JL",
|
||||
mode = "preferred",
|
||||
position = "auto-right",
|
||||
scale =
|
||||
"1.333333"
|
||||
})
|
||||
|
||||
hl.monitor({
|
||||
output = "desc:Microstep MSI MAG342CQR DB6H252300057",
|
||||
mode = "3440x1440@144",
|
||||
-- mode = "preferred",
|
||||
position = "auto-left",
|
||||
scale =
|
||||
"1.0"
|
||||
})
|
||||
|
||||
hl.monitor({
|
||||
output = "desc:Ancor Communications Inc ASUS MG28U 0x00009B77",
|
||||
mode = "preferred",
|
||||
position = "auto-right",
|
||||
scale =
|
||||
"1.333333"
|
||||
})
|
||||
|
||||
-- hl.monitor({ output = "eDP-1", mode = "preferred", position = "0x0", scale = "1.0" })
|
||||
|
||||
hl.monitor({
|
||||
output = "desc:LG Electronics LG HDR WQHD 0x0006530C",
|
||||
mode = "preferred",
|
||||
position = "auto-up",
|
||||
scale =
|
||||
"1.333333"
|
||||
})
|
||||
hl.monitor({ output = "CAP Capture 0x00000001", mode = "1920x1080@60", position = "auto-down", scale = 1 })
|
||||
-- hl.monitor({ output = "HDMI-A-1", mode = "1920x1080@60", position = "auto-down", scale = 1 })
|
||||
-- hl.monitor({ output = "HDMI-A-2", mode = "1920x1080@60", position = "auto-down", scale = 1 })
|
||||
|
||||
hl.monitor({
|
||||
output = "desc:Ancor Communications Inc ASUS PB238 DCLMTF074371",
|
||||
mode = "preferred",
|
||||
position = "auto",
|
||||
scale =
|
||||
"1.0"
|
||||
})
|
||||
hl.monitor({ output = "desc:Lenovo Group Limited L15 U133R0A2", mode = "preferred", position = "auto-down", scale = 1 })
|
||||
hl.monitor({ output = "desc:Lenovo Group Limited M15 V30F2A15", mode = "preferred", position = "auto-down", scale = 1 })
|
||||
hl.monitor({ output = "desc:Lenovo Group Limited L15 U133X4PG", mode = "preferred", position = "auto-down", scale = 1 })
|
||||
hl.monitor({ output = "desc:Stargate Technology TYPE-C", mode = "preferred", position = "auto-down", scale = 1 })
|
||||
hl.monitor({ output = "desc:Proteon TYPE-C 8R33926O00QS", mode = "preferred", position = "auto-right", scale = "1.0" })
|
||||
hl.monitor({ output = "desc:GWD ARZOPA 000000000000", mode = "preferred", position = "auto-down", scale = "1.0" })
|
||||
hl.monitor({ output = "desc:BNQ BenQ EX3203R 7CL00509019", mode = "preferred", position = "auto", scale = 1 })
|
||||
hl.monitor({ output = "desc:BNQ BenQ EX3501R N4M05650019", mode = "preferred", position = "auto-right", scale = "1.0" })
|
||||
hl.monitor({
|
||||
output = "desc:Dell Inc. DELL U3818DW 97F8P8AD0HEL",
|
||||
mode = "preferred",
|
||||
position = "auto-left",
|
||||
scale =
|
||||
"1.0"
|
||||
})
|
||||
@@ -0,0 +1,107 @@
|
||||
hl.bind("SUPER + SPACE", hl.dsp.exec_raw("omarchy-menu toggle"), { description = "Omarchy menu" })
|
||||
hl.bind("SUPER + ALT + SPACE", hl.dsp.exec_raw("omarchy-menu toggle apps"), { description = "Apps menu" })
|
||||
hl.bind("SUPER + CTRL + E", hl.dsp.exec_raw("omarchy-shell shell toggle omarchy.emojis"), { description = "Emojis" })
|
||||
hl.bind("SUPER + CTRL + C", hl.dsp.exec_raw("omarchy-menu toggle capture"), { description = "Capture menu" })
|
||||
hl.bind("SUPER + CTRL + O", hl.dsp.exec_raw("omarchy-menu toggle toggle"), { description = "Toggle menu" })
|
||||
hl.bind("SUPER + CTRL + H", hl.dsp.exec_raw("omarchy-menu toggle hardware"), { description = "Hardware menu" })
|
||||
hl.bind("SUPER + SHIFT + code:201", hl.dsp.exec_raw("omarchy-menu toggle root"), { description = "Omarchy menu" })
|
||||
hl.bind("SUPER + ESCAPE", hl.dsp.exec_raw("omarchy-menu toggle system"), { description = "System menu" })
|
||||
hl.bind("SUPER + CTRL + Q", hl.dsp.exec_raw("omacalc"), { description = "Calculator" })
|
||||
hl.bind("XF86Calculator", hl.dsp.exec_raw("omacalc"), { description = "Calculator" })
|
||||
hl.bind("XF86PowerOff", hl.dsp.exec_raw("omarchy-menu toggle system", { locked = true }), { description = "Power menu" })
|
||||
|
||||
hl.bind("SUPER + SHIFT + SPACE", hl.dsp.exec_raw('omarchy-toggle-bar'), { description = "Toggle top bar" })
|
||||
|
||||
hl.bind("SUPER + CTRL + SPACE", hl.dsp.exec_raw("omarchy-menu toggle background"),
|
||||
{ description = "Background switcher" })
|
||||
hl.bind("SUPER + SHIFT + CTRL + SPACE", hl.dsp.exec_raw("omarchy-menu toggle theme"), { description = "Theme menu" })
|
||||
hl.bind("SUPER + BACKSPACE", hl.dsp.exec_raw("omarchy-hyprland-window-transparency-toggle"),
|
||||
{ description = "Toggle window transparency" })
|
||||
hl.bind("SUPER + SHIFT + BACKSPACE", hl.dsp.exec_raw("omarchy-hyprland-window-gaps-toggle"),
|
||||
{ description = "Toggle window gaps" })
|
||||
hl.bind("SUPER + CTRL + BACKSPACE", hl.dsp.exec_raw("omarchy-hyprland-window-single-square-aspect-toggle"),
|
||||
{ description = "Toggle single-window square aspect" })
|
||||
|
||||
-- xkbcommon names the comma keysym "comma"; the upper-case "COMMA" does not match.
|
||||
hl.bind("SUPER + X", hl.dsp.exec_raw("omarchy-shell notifications dismissOne"),
|
||||
{ description = "Dismiss last notification" })
|
||||
hl.bind("SUPER + SHIFT + X", hl.dsp.exec_raw("omarchy-shell notifications dismissAll"),
|
||||
{ description = "Dismiss all notifications" })
|
||||
hl.bind("SUPER + CTRL + X", hl.dsp.exec_raw("omarchy-toggle-notification-silencing"),
|
||||
{ description = "Toggle silencing notifications" })
|
||||
hl.bind("SUPER + ALT + X", hl.dsp.exec_raw("omarchy-shell notifications invokeLast"),
|
||||
{ description = "Invoke last notification" })
|
||||
hl.bind("SUPER + SHIFT + ALT + ", hl.dsp.exec_raw("omarchy-shell notifications showHistory"),
|
||||
{ description = "Open notification history" })
|
||||
|
||||
hl.bind("SUPER + O", hl.dsp.exec_raw("omarchy-hyprland-window-pop"), { description = "Pop window out (float & pin)" })
|
||||
hl.bind("SUPER + ALT + Home", hl.dsp.exec_raw("omarchy-hyprland-window-width save"),
|
||||
{ description = "Save window width" })
|
||||
hl.bind("SUPER + Home", hl.dsp.exec_raw("omarchy-hyprland-window-width restore"),
|
||||
{ description = "Restore window width" })
|
||||
|
||||
-- Volume, brightness, keyboard backlight, and touchpad controls.
|
||||
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_raw("omarchy-audio-output-volume raise"),
|
||||
{ locked = true, repeating = true, description = "Volume up" })
|
||||
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_raw("omarchy-audio-output-volume lower"),
|
||||
{ locked = true, repeating = true, description = "Volume down" })
|
||||
hl.bind("XF86AudioMute", hl.dsp.exec_raw("omarchy-audio-output-volume mute-toggle"),
|
||||
{ locked = true, description = "Mute" })
|
||||
hl.bind("XF86AudioMicMute", hl.dsp.exec_raw("omarchy-audio-input-mute"),
|
||||
{ locked = true, description = "Mute microphone" })
|
||||
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_raw("omarchy-brightness-display +5%"),
|
||||
{ locked = true, repeating = true, description = "Brightness up" })
|
||||
hl.bind("XF86MonBrightnessDown", hl.dsp.exec_raw("omarchy-brightness-display 5%-"),
|
||||
{ locked = true, repeating = true, description = "Brightness down" })
|
||||
hl.bind("SHIFT + XF86MonBrightnessUp",
|
||||
hl.dsp.exec_raw("omarchy-brightness-display 100%"),
|
||||
{ locked = true, repeating = true, description = "Brightness maximum" })
|
||||
hl.bind("SHIFT + XF86MonBrightnessDown",
|
||||
hl.dsp.exec_raw("omarchy-brightness-display 1%"),
|
||||
{ locked = true, repeating = true, description = "Brightness minimum" })
|
||||
hl.bind("XF86KbdBrightnessUp", hl.dsp.exec_raw("omarchy-brightness-keyboard up"),
|
||||
{ locked = true, repeating = true, description = "Keyboard brightness up" })
|
||||
hl.bind("XF86KbdBrightnessDown", hl.dsp.exec_raw("omarchy-brightness-keyboard down"),
|
||||
{ locked = true, repeating = true, description = "Keyboard brightness down" })
|
||||
hl.bind("XF86KbdLightOnOff", hl.dsp.exec_raw("omarchy-brightness-keyboard cycle"),
|
||||
{ locked = true, description = "Keyboard backlight cycle" })
|
||||
hl.bind("XF86TouchpadToggle", hl.dsp.exec_raw("omarchy-toggle-touchpad"),
|
||||
{ description = "Toggle touchpad", locked = true })
|
||||
hl.bind("XF86TouchpadOn", hl.dsp.exec_raw("omarchy-toggle-touchpad on"),
|
||||
{ locked = true, description = "Enable touchpad" })
|
||||
hl.bind("XF86TouchpadOff", hl.dsp.exec_raw("omarchy-toggle-touchpad off"),
|
||||
{ locked = true, description = "Disable touchpad" })
|
||||
|
||||
-- Precise volume and brightness controls.
|
||||
hl.bind("ALT + XF86AudioRaiseVolume",
|
||||
hl.dsp.exec_raw("omarchy-audio-output-volume +1"),
|
||||
{ locked = true, repeating = true, description = "Volume up precise" })
|
||||
hl.bind("ALT + XF86AudioLowerVolume",
|
||||
hl.dsp.exec_raw("omarchy-audio-output-volume -1"),
|
||||
{ locked = true, repeating = true, description = "Volume down precise" })
|
||||
hl.bind("ALT + XF86MonBrightnessUp",
|
||||
hl.dsp.exec_raw("omarchy-brightness-display +1%"),
|
||||
{ locked = true, repeating = true, description = "Brightness up precise" })
|
||||
hl.bind("ALT + XF86MonBrightnessDown",
|
||||
hl.dsp.exec_raw("omarchy-brightness-display 1%-"),
|
||||
{ locked = true, repeating = true, description = "Brightness down precise" })
|
||||
|
||||
-- Media controls.
|
||||
hl.bind("XF86AudioNext", hl.dsp.exec_raw("omarchy-shell media next"), { locked = true, description = "Next track" })
|
||||
hl.bind("ALT + XF86AudioPlay", hl.dsp.exec_raw("omarchy-shell media next"), { locked = true, description = "Next track" })
|
||||
hl.bind("XF86AudioPause", hl.dsp.exec_raw("omarchy-shell media playPause"), { locked = true, description = "Pause" })
|
||||
hl.bind("XF86AudioPlay", hl.dsp.exec_raw("omarchy-shell media playPause"), { locked = true, description = "Play" })
|
||||
hl.bind("XF86AudioPrev", hl.dsp.exec_raw("omarchy-shell media previous"),
|
||||
{ locked = true, description = "Previous track" })
|
||||
hl.bind("ALT + SHIFT + XF86AudioPlay", hl.dsp.exec_raw("omarchy-shell media previous"),
|
||||
{ locked = true, description = "Previous track" })
|
||||
hl.bind("XF86Eject", hl.dsp.exec_raw("eject"), { locked = true, description = "Eject media" })
|
||||
|
||||
hl.bind("SHIFT + XF86AudioMute", hl.dsp.exec_raw("omarchy-audio-output-switch"),
|
||||
{ locked = true, description = "Switch audio output" })
|
||||
hl.bind("SHIFT + XF86AudioPause", hl.dsp.exec_raw("omarchy-audio-source-switch"),
|
||||
{ locked = true, description = "Switch media source" })
|
||||
hl.bind("SHIFT + XF86AudioPlay", hl.dsp.exec_raw("omarchy-audio-source-switch"),
|
||||
{ locked = true, description = "Switch media source" })
|
||||
|
||||
hl.bind(sjb.HYPR .. "L", hl.dsp.exec_raw("omarchy-system-lock"), { description = "Lock system" })
|
||||
@@ -0,0 +1,77 @@
|
||||
hl.workspace_rule({ workspace = "special:scratchpad", border_size = 3 })
|
||||
hl.window_rule({
|
||||
match = { class = "(blueberry.py|Impala|Wiremix|org.gnome.NautilusPreviewer|com.gabm.satty|Omarchy|About|TUI.float|org.pulseaudio.pavucontrol)" },
|
||||
tag =
|
||||
"+floating-window"
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
match = { class = "terminal-pi" },
|
||||
float = true,
|
||||
center = true,
|
||||
workspace = "special:scratchpad",
|
||||
size = { "monitor_w/2", "monitor_h/2" }
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
match = {
|
||||
class = "(quicknotes|capture|agenda)"
|
||||
},
|
||||
tag = "+floating-window"
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "ostt floating windows",
|
||||
match = { class = "ostt-popup" },
|
||||
float = true,
|
||||
no_anim = true,
|
||||
move = { 10, 10 },
|
||||
size = { 320, 240 },
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
match = {
|
||||
class = "(xdg-desktop-portal-gtk|sublime_text|DesktopEditors)",
|
||||
title = "^(Open.*Files?|Save.*Files?|Save.*As|All Files|Save)"
|
||||
},
|
||||
tag = "+floating-window"
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
match = { class = "code" },
|
||||
fullscreen_state = 1,
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
-- Fix some dragging issues with XWayland
|
||||
name = "fix-xwayland-drags",
|
||||
match = {
|
||||
class = "^$",
|
||||
title = "^$",
|
||||
xwayland = true,
|
||||
float = true,
|
||||
fullscreen = false,
|
||||
pin = false,
|
||||
},
|
||||
|
||||
no_focus = true,
|
||||
})
|
||||
|
||||
|
||||
hl.window_rule({ match = { tag = "floating-window" }, float = true, center = true, size = { "monitor_w/2", "monitor_h/2" } })
|
||||
|
||||
hl.window_rule({ match = { class = "(rofi|wofi)" }, tag = "+user-menu" })
|
||||
hl.window_rule({ match = { class = "^(pinentry-)" }, tag = "+user-menu" })
|
||||
hl.window_rule({ match = { class = "^(gcr-prompter)$" }, tag = "+user-menu" })
|
||||
hl.window_rule({ match = { tag = "user-menu" }, stay_focused = true, no_anim = true, float = true, center = true, size = { "monitor_w/3", "monitor_h/3" } })
|
||||
|
||||
hl.window_rule({
|
||||
name = "Picture in Picture windows",
|
||||
match = { title = "^.*[Pp]icture[ -][Ii]n[ -][Pp]icture.*$" },
|
||||
float = true,
|
||||
pin = true,
|
||||
rounding = 7,
|
||||
opacity = "1 1",
|
||||
move = { "monitor_w-window_w-10", "monitor_h-window_h-10" },
|
||||
size = { "monitor_w/4", "monitor_h/4" },
|
||||
})
|
||||
@@ -0,0 +1,112 @@
|
||||
hl.bind("SUPER + CTRL + I", hl.dsp.exec_raw("omarchy-toggle-idle"), { description = "Toggle locking on idle" })
|
||||
hl.bind("SUPER + CTRL + N", hl.dsp.exec_raw("omarchy-toggle-nightlight"), { description = "Toggle nightlight" })
|
||||
|
||||
hl.bind("SUPER + CTRL + Delete", hl.dsp.exec_raw("omarchy-hyprland-monitor-internal toggle"),
|
||||
{ description = "Toggle laptop display" })
|
||||
hl.bind("SUPER + CTRL + ALT + Delete", hl.dsp.exec_raw("omarchy-hyprland-monitor-internal-mirror toggle"),
|
||||
{ description = "Toggle laptop display mirroring" })
|
||||
|
||||
hl.bind("switch:on:Lid Switch", hl.dsp.exec_raw("omarchy-system-lid-close"), { locked = true, description = nil })
|
||||
hl.bind("switch:off:Lid Switch", hl.dsp.exec_raw("omarchy-hyprland-monitor-clamshell"),
|
||||
{ locked = true, description = nil })
|
||||
|
||||
hl.bind("PRINT", hl.dsp.exec_raw("omarchy-capture-screenshot"), { description = "Screenshot" })
|
||||
hl.bind("ALT + PRINT",
|
||||
hl.dsp.exec_raw(
|
||||
"omarchy-capture-screenrecording --stop-recording || omarchy-menu toggle trigger.capture.screenrecord"),
|
||||
{ description = "Screenrecording" })
|
||||
hl.bind("SUPER + ALT + code:34", hl.dsp.exec_raw("omarchy-capture-webcam-resize smaller"),
|
||||
{ description = "Make webcam overlay smaller" })
|
||||
hl.bind("SUPER + ALT + code:35", hl.dsp.exec_raw("omarchy-capture-webcam-resize larger"),
|
||||
{ description = "Make webcam overlay larger" })
|
||||
hl.bind("SUPER + PRINT", hl.dsp.exec_raw("pkill hyprpicker || hyprpicker -a"), { description = "Color picker" })
|
||||
hl.bind("SUPER + CTRL + PRINT", hl.dsp.exec_raw("omarchy-capture-text"),
|
||||
{ description = "Extract text (OCR) from screenshot" })
|
||||
|
||||
-- Keyboard control for the slurp region picker (see omarchy-capture-region).
|
||||
-- The binds live exactly as long as a selection layer is on screen (slurp
|
||||
-- opens one per monitor), so they cannot leak or get stuck.
|
||||
-- Unbinding by key would take a same-key binding out of the user's own config
|
||||
-- with it, so each handle is kept and removed individually.
|
||||
local selection_layers = 0
|
||||
local selection_binds = {}
|
||||
|
||||
hl.on("layer.opened", function(layer)
|
||||
if layer.namespace == "selection" then
|
||||
selection_layers = selection_layers + 1
|
||||
if selection_layers == 1 then
|
||||
selection_binds = {
|
||||
hl.bind("RETURN", hl.dsp.exec_cmd("omarchy-capture-region --take-window"),
|
||||
{ description = "Capture highlighted window" }),
|
||||
hl.bind("CTRL + RETURN", hl.dsp.exec_cmd("omarchy-capture-region --take-fullscreen"),
|
||||
{ description = "Capture entire screen" }),
|
||||
hl.bind("TAB", hl.dsp.exec_cmd("omarchy-capture-region --select-window next"),
|
||||
{ description = "Select next window to capture" }),
|
||||
hl.bind("CTRL + TAB", hl.dsp.exec_cmd("omarchy-capture-region --select-window prev"),
|
||||
{ description = "Select previous window to capture" }),
|
||||
}
|
||||
for _, direction in ipairs({ "left", "right", "up", "down" }) do
|
||||
table.insert(
|
||||
selection_binds,
|
||||
hl.bind(direction:upper(), hl.dsp.exec_cmd("omarchy-capture-region --select-window " .. direction),
|
||||
{ description = "Select window to capture" })
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
hl.on("layer.closed", function(layer)
|
||||
if layer.namespace == "selection" and selection_layers > 0 then
|
||||
selection_layers = selection_layers - 1
|
||||
if selection_layers == 0 then
|
||||
for _, keybind in ipairs(selection_binds) do
|
||||
keybind:unbind()
|
||||
end
|
||||
selection_binds = {}
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
hl.bind("SUPER + CTRL + S", hl.dsp.exec_raw("omarchy-menu toggle share"), { description = "Share" })
|
||||
|
||||
hl.bind("SUPER + CTRL + PERIOD", hl.dsp.exec_raw("omarchy-transcode"), { description = "Transcode" })
|
||||
|
||||
hl.bind("SUPER + CTRL + R", hl.dsp.exec_raw("omarchy-menu toggle reminder-set"), { description = "Set reminder" })
|
||||
hl.bind("SUPER + CTRL + ALT + R", hl.dsp.exec_raw("omarchy-reminder show"), { description = "Show reminders" })
|
||||
hl.bind("SUPER + SHIFT + CTRL + R", hl.dsp.exec_raw("omarchy-reminder clear"), { description = "Clear reminders" })
|
||||
|
||||
hl.bind("SUPER + CTRL + ALT + T", hl.dsp.exec_raw("omarchy-notification-time"), { description = "Show time" })
|
||||
hl.bind("SUPER + CTRL + ALT + B", hl.dsp.exec_raw("omarchy-notification-battery"),
|
||||
{ description = "Show battery remaining" })
|
||||
hl.bind("SUPER + CTRL + ALT + W", hl.dsp.exec_raw("omarchy-notification-weather"), { description = "Toggle weather" })
|
||||
|
||||
hl.bind("SUPER + SHIFT + CTRL + A", hl.dsp.exec_raw("omarchy-agent --pick"), { description = "Agent" })
|
||||
hl.bind("SUPER + CTRL + A", hl.dsp.exec_raw("omarchy-shell shell toggle omarchy.audio"), { description = "Audio" })
|
||||
hl.bind("SUPER + CTRL + B", hl.dsp.exec_raw("omarchy-shell shell tnoggle omarchy.bluetooth"),
|
||||
{ description = "Bluetooth" })
|
||||
hl.bind("SUPER + CTRL + D", hl.dsp.exec_raw("omarchy-shell shell toggle omarchy.monitor"), { description = "Display" })
|
||||
hl.bind("SUPER + CTRL + ALT + D", hl.dsp.exec_raw("omarchy-shell shell toggle omarchy.clock"),
|
||||
{ description = "Calendar" })
|
||||
hl.bind("SUPER + CTRL + W", hl.dsp.exec_raw("omarchy-shell shell toggle omarchy.network"), { description = "Network" })
|
||||
hl.bind("SUPER + CTRL + P", hl.dsp.exec_raw("omarchy-shell shell toggle omarchy.power"), { description = "Power" })
|
||||
|
||||
-- The letters above name a panel; the numbers count them. 1 is the leftmost
|
||||
-- panel in the bar's right section, and a widget with no panel of its own (the
|
||||
-- tray) is not counted, so the number matches the icon a user would point at.
|
||||
-- A bar with fewer panels than this leaves the tail of the range doing nothing.
|
||||
for panel = 1, 9 do
|
||||
hl.bind(
|
||||
"SUPER + CTRL + code:" .. tostring(panel + 9),
|
||||
hl.dsp.exec_raw("omarchy-shell -q shell togglePanelAt right " .. panel),
|
||||
{ description = "Bar panel " .. panel }
|
||||
)
|
||||
end
|
||||
hl.bind("SUPER + CTRL + Z", function()
|
||||
local zoom = hl.get_config("cursor.zoom_factor") or 1
|
||||
hl.config({ cursor = { zoom_factor = zoom + 1 } })
|
||||
end, { description = "Zoom in" })
|
||||
|
||||
hl.bind("SUPER + CTRL + ALT + Z", function()
|
||||
hl.config({ cursor = { zoom_factor = 1 } })
|
||||
end, { description = "Reset zoom" })
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user