Compare commits

...
92 Commits
Author SHA1 Message Date
gitadmin 6eb9d01a65 fix(hypr): normalize print key names 2026-10-10 15:31:14 -04:00
gitadmin f181f39145 chore(pi): update model defaults 2026-10-10 15:30:41 -04:00
gitadmin 0b70337bbd feat(pi): add SHARCNET model provider 2026-10-10 15:29:48 -04:00
gitadmin 8756ad8857 fix(desktop): symlink application launchers individually 2026-10-10 15:17:44 -04:00
gitadmin 1e4d26364a chore(voxtype): add voice typing config 2026-10-10 15:17:19 -04:00
gitadmin e82d86fa8f chore(pi): update changelog version to 1.1.0 2026-10-09 12:21:53 -04:00
gitadmin 03abb54797 chore(mise): add croc 2026-10-09 12:04:13 -04:00
gitadmin 93672442f9 chore(ci): switch commit skill to OpenAI provider 2026-10-09 12:03:26 -04:00
gitadmin 4380be3108 fix(desktop): prefer omarchy background setter 2026-10-09 12:01:59 -04:00
gitadmin 0ce884dfee chore(desktop): configure Obsidian URL handler 2026-10-09 12:01:22 -04:00
gitadmin a83a1c170b fix(mise): make setup tasks safer 2026-10-09 11:58:37 -04:00
gitadmin b304d302a7 chore(mise): add Go 2026-10-09 07:40:29 -04:00
gitadmin 292bb58b18 fix(hyprland): use active workspace layout 2026-10-09 01:15:04 -04:00
gitadmin e73d3acc39 Add Omarchy Hyprland bindings 2026-10-09 00:51:49 -04:00
gitadmin 5b31d14829 refactor(hypr): split configuration and extra bindings 2026-10-08 12:52:22 -04:00
gitadmin 4197230886 added tools 2026-10-08 12:37:45 -04:00
gitadmin 0e203b188d refactor(dotfiles): separate desktop configuration 2026-10-08 12:09:17 -04:00
gitadmin ecf01dad51 refactor(themes): move theme assets under omarchy-themes 2026-10-08 11:10:51 -04:00
gitadmin 7902fe531e refactor: rename desktop directory to applications 2026-10-08 08:13:50 -04:00
gitadmin bb9f74b7cf chore(ci): update pi model 2026-10-08 00:14:27 -04:00
gitadmin 10cfce1731 chore(hypr): use chromium as browser 2026-10-08 00:13:59 -04:00
gitadmin 401220f3b5 chore(pi): repoint default, planner, worker models 2026-10-08 00:09:49 -04:00
gitadmin 3cf0f65164 feat(hypr): bind super+g to chatgpt launcher, drop super+x bind 2026-10-06 23:59:24 -04:00
gitadmin e960f71340 chore(strata): rebuild binary 2026-10-06 23:59:24 -04:00
gitadmin 6301e15e57 feat: footclient terminal binds, monitor layout tweak, pi hermes/msg-queue 2026-10-06 23:59:24 -04:00
gitadmin ccb95c439a feat(hypr): bind super-x to launch/focus x 2026-10-06 23:59:24 -04:00
gitadmin 2249d5c3e8 chore(fish): drop redundant ssh-auth-sock hook
The symlink refresh and export already happen in config/bash/profile,
and tmux.conf sets SSH_AUTH_SOCK globally, so the fish conf.d copy was
a duplicate.
2026-10-06 23:58:24 -04:00
gitadmin c1f57dd476 fix(mise): make skills task tolerate pull failures and skip existing symlink 2026-10-06 23:57:10 -04:00
gitadmin aa66340875 feat(herdr): bind focus_agent and switch_workspace to number keys 2026-10-05 12:38:40 -04:00
gitadmin c2b4707b0a feat(hypr): bind org agenda and capture to floating terminal windows
SUPER+A now opens the Org agenda (replacing the alter_zorder binding,
commented out) and SUPER+CONTROL+A opens Org capture. Both launch in a
centered floating window via new window-class rules.
2026-10-05 12:07:38 -04:00
gitadmin 4b494eb433 chore(nvim): point orgmode and org-roam paths to ~/Documents/GTD 2026-10-03 08:45:11 -04:00
gitadmin a0ad6fa930 chore(ci): switch commit bot to opencode-go/qwen3.8-flash and pass prompt arg 2026-10-02 11:39:51 -04:00
gitadmin 274e427ccb chore(pi): bump default model to gpt-6-luna and retune subagents
Drop gpt-5.6-luna across the default and reviewer/oracle overrides in
favour of gpt-6-luna, and move the planner to deepseek-v4-pro. Also
raise reviewer thinking to high and drop the now-unneeded
fallbackModels entries since the primary targets resolve.
2026-10-02 11:39:09 -04:00
gitadmin ba9fcc4948 refactor(mise): rename theme_links task to setup_theme 2026-10-02 11:35:59 -04:00
gitadmin bf9d61f6e2 chore(desktop): add gtksourceview5 to packages 2026-10-02 11:35:59 -04:00
gitadmin 9e966e127d chore(config): switch default model to obelix/ornith-1.5-35B
- bump lastChangelogVersion to 0.99.2
- set default provider/model and update subagent overrides
- enable codemode tool by default
2026-10-01 22:47:00 -04:00
gitadmin 09139ae41b fix(terminal-launcher): use footclient instead of foot 2026-10-01 21:43:03 -04:00
gitadmin 5564df4247 disable kulala plugin 2026-10-01 21:42:43 -04:00
gitadmin 30757c74ba chore(nvim): switch orgmode to upstream source
Point orgmode at nvim-orgmode/orgmode instead of the personal fork, and drop the pinned version.
2026-10-01 21:42:01 -04:00
gitadmin 936f535d0a chore(mise): set RUSTUP_HOME and enable foot-server service 2026-10-01 21:41:24 -04:00
gitadmin 066d525b4d refactor(hypr): relocate disabled Alt+Tab bindings 2026-09-29 14:43:06 -04:00
gitadmin aaa0015135 update git config: reorder aliases, drop nvimdiff, add lg 2026-09-29 14:30:41 -04:00
gitadmin b9d807a78d chore(tmux): fix terminal-features and tidy config
Correct the terminal-feature typo to terminal-features, add kitty extkeys, and remove now-redundant comments.
2026-09-29 14:29:59 -04:00
gitadmin 7911b79b89 disable hdmi monitors, reposition lenovo m15 2026-09-29 14:29:29 -04:00
gitadmin c4ad72b974 update model providers and versions 2026-09-29 14:29:10 -04:00
gitadmin d8439564bc chore: update ci script model to ornith-1.5 2026-09-29 14:28:44 -04:00
gitadmin d5d68c5498 chore(foot): reduce window padding to 3x3 2026-09-25 09:43:07 -04:00
gitadmin bf9780345d fix(wallpaper): call fetcher by absolute path in set-wallpaper
Hyprland's exec_cmd does not source the shell PATH, so plain
wallpaper-fetcher failed from the keybinding; use ~/.local/bin. Binary
rebuilt (5.3MB -> 2.6MB) and the keybinding now fetches technics.
2026-09-24 23:44:41 -04:00
gitadmin b9997088c8 fix(nvim): correct obsidian picker name to snacks.picker 2026-09-24 21:57:37 -04:00
gitadmin 869991df4b fix(ssh): rename alcazar host to rascar and update ip to 172.25.11.131 2026-09-24 21:53:48 -04:00
gitadmin 788914abdc fix(dotfiles): symlink desktop entries individually
Use mode=symlink-each for ~/.local/share/applications so only the
custom .desktop files are linked instead of replacing the whole dir,
which hid system-installed entries.
2026-09-24 21:53:19 -04:00
gitadmin 9c353f257b feat(themes): add color derivation and themed app templates
Add script/omarchy-theme-color and expand omarchy-theme-set-templates to
derive a full palette from each theme's colors.toml, then render new
themed templates (shell, pi, vscode theme, gum, neovim, claude, hermes,
t3code) from it.

Adds backgrounds and palette updates for existing themes plus new themes
(last-horizon, lupine, solitude, tidewater-*, miasma, ...).
2026-09-24 21:25:12 -04:00
gitadmin 5fee6bbf4e chore(pi): drop enabledModels list, bump lastChangelogVersion to 0.87.0 2026-09-24 16:32:24 -04:00
gitadmin 6fcdd86cff chore(systemd): remove unused home-dotfiles-restore unit 2026-09-24 16:31:38 -04:00
gitadmin eeee8333b5 feat(systemd): auto-start tmux main session at login and add dotfiles restore unit 2026-09-24 16:24:10 -04:00
gitadmin e4231f3746 feat(nvim): enable exrc so project-local configs are loaded 2026-09-24 16:00:34 -04:00
gitadmin ffff051459 feat(herdr): allow nested panes 2026-09-24 16:00:13 -04:00
gitadmin e7b19ee993 chore(git): use zdiff3 conflict style for cleaner diffs 2026-09-24 15:59:47 -04:00
gitadmin 8086430934 chore(mise): replace Augureal webapp shortcut with X 2026-09-24 15:59:15 -04:00
gitadmin 37d656c502 chore(dotfiles): define mise vars and rename THEME_DIR to THEMES_STATE_DIR
Add a [vars] block to mise.toml (name, email, second brain, theme state dir) so templates can reference them, and switch environments.tmpl to the THEMES_STATE_DIR var.
2026-09-24 15:58:30 -04:00
gitadmin 26ef19f975 chore(pi-lens): disable context injection via mise symlink 2026-09-24 15:57:38 -04:00
gitadmin cdf23af952 chore(strata): bump bundled binary to 0.19.0
Previous build had no version flag; the new one reports 0.19.0 and
adds --unlock-volume. Binary grows 13MB -> 32MB.
2026-09-24 15:57:02 -04:00
gitadmin dcd59a6072 feat: enable wayland in firefox via environment.d 2026-09-24 15:56:30 -04:00
gitadmin ba05ef2a6d refactor(hypr): namespace config under sjb/
Move the Hyprland Lua modules into config/hypr/sjb/ with init.lua as the
entry point, so the whole config tree can be symlinked per-file and the
unmanaged hypr*.conf files keep their own symlinks. Add an sjb block that
requires the new entry point.

While here: bind the second Lenovo L15, force 3440x1440@144 on the
MAG342CQR, use the named 2fg scroll method, and drop dead locals.

Switch the skills mise task to clone/pull SjB/skills into
~/.local/share/skills and symlink it, replacing the npx skills adds.
2026-09-24 15:55:50 -04:00
gitadmin 17a129a2c4 feat(workmux): add agent and layout config with mise symlink 2026-09-24 14:48:19 -04:00
gitadmin 71e1686b25 fix(ssh): update hostnames to new subnet and remove stale TERM setting 2026-09-15 13:52:57 -04:00
gitadmin 32085a5e15 feat(fish): add workmux aliases 2026-09-15 13:52:16 -04:00
gitadmin 4a8c582e81 feat(strata): add binary, config, and theme template 2026-09-03 21:05:34 -04:00
gitadmin a6aa367313 chore(mise): clean up vars, add strata symlinks, fix tmux typo 2026-09-03 21:03:05 -04:00
gitadmin b6b738fc7b chore: migrate omarchy state from ~/.config to ~/.local/state
Move all omarchy runtime state (themes, backgrounds, current theme)
from ~/.config/omarchy/current to ~/.local/state/omarchy/current
to keep the config dir free of generated files. Add mise task for
recreating symlinks and update credential helpers for tea.
2026-09-03 20:46:18 -04:00
gitadmin d772b3952d feat(config): add remote hosts and desktop launchers 2026-09-03 20:27:21 -04:00
gitadmin b2f8334999 chore(config): refresh models, add packages, update subagent overrides 2026-08-31 09:58:29 -04:00
gitadmin 81fc70a6d5 chore(config): update model IDs and obelix baseUrl 2026-08-30 20:47:48 -04:00
gitadmin 46b485dfa4 chore(hyprland): rework print-key bindings and add color picker 2026-08-30 20:47:07 -04:00
gitadmin 76c8fd9ae2 fix(network-manager): ensure wireguard endpoint routes via default gateway 2026-08-30 20:46:51 -04:00
gitadmin 40e8237819 chore(ci): switch model to ornith-1.0-35B 2026-08-30 20:46:27 -04:00
gitadmin abe190f7f0 feat(hypr): rework keybindings on SUPER and rename special workspace
Drop the LEADER/HYPR prefixes and bind everything directly on SUPER.
Add media-key, brightness, window/layout and workspace bindings. Rename
the special workspace from 'special' to 'scratchpad' and update the
matching window/workspace rules. Map modmask 73 in the keybindings help
script.
2026-08-30 16:11:48 -04:00
gitadmin c740771df9 chore(ci): switch default model to qwen3.8-flash 2026-08-29 17:55:43 -04:00
gitadmin 918aecbeaa chore(ci): switch commit-staged model to opencode-go/hy3 2026-08-29 10:40:22 -04:00
gitadmin 8012fb09c6 chore(mise): make tmux_setup idempotent and auto-install plugins 2026-08-29 10:32:14 -04:00
gitadmin bb0d7f2f1d chore: bump lastChangelogVersion to 0.84.3 2026-08-29 10:30:42 -04:00
gitadmin 63998d2965 feat: add tmux plugin manager setup task and config tweaks 2026-08-29 00:27:37 -04:00
gitadmin 2c5a2f1d5e chore: remove commented-out sentinel plugin entry 2026-08-28 23:49:51 -04:00
gitadmin cbedf361db chore: add tea CLI as mise http dependency 2026-08-28 23:48:44 -04:00
gitadmin a8cd242a26 feat(hyprland): make M key layout-aware for swap/consume-or-expel 2026-08-28 11:58:50 -04:00
gitadmin 521a105f35 feat(fish): add ngit alias for neogit 2026-08-28 11:58:08 -04:00
gitadmin ac490653e8 chore: shorten default bare repo dir to .bare 2026-08-28 11:57:16 -04:00
gitadmin 892e32439e refactor(hyprland): tune visuals, overhaul animations, add cursor/binds settings 2026-08-28 11:54:51 -04:00
gitadmin 8a3ae0f6bd feat: add screen recording, OCR capture, and improved screenshot workflow 2026-08-28 11:52:43 -04:00
gitadmin b65af6a730 feat(herdr): add herdr-annotate plugin with keybindings 2026-08-27 12:05:45 -04:00
gitadmin 7b1f04b530 refactor(hypr): split monolithic config into modules
Extract monitors, functions, rules, env vars, and onstart into
separate files. Add toggle_pin, toggle_master_scrolling, and
layout-aware keybinds for scrolling layout.
2026-08-22 12:27:44 -04:00
gitadmin d605f4c388 refactor(permission-system): reorganize path permissions and add vault access 2026-08-21 15:18:09 -04:00
700 changed files with 6392 additions and 2080 deletions
Binary file not shown.
+4 -2
View File
@@ -5,6 +5,8 @@ alias wtr="wt remove @"
alias ll="eza -l -g --icons" alias ll="eza -l -g --icons"
alias ls="eza -al --color=always --group-directories-first" alias ls="eza -al --color=always --group-directories-first"
alias g="git" alias g="git"
alias neogit="nvim +Neogit" alias ngit="nvim +Neogit"
alias zdiff="nvim +Zdiff" alias zdiff="nvim +Zdiff"
alias review="nvim '+Zdiff origin/HEAD'" alias review="nvim +'Zdiff origin/HEAD'"
alias wm="workmux"
alias wmd="workmux dashboard"
+16 -7
View File
@@ -11,30 +11,39 @@ append_path "$HOME/.local/bin"
append_path "$HOME/.cargo/bin" append_path "$HOME/.cargo/bin"
export PATH 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)" eval "$(mise activate bash)"
fi fi
if [ test -x $(command -v zoxide) ]; then if [ -x $(command -v zoxide) ]; then
eval "$(zoxide init bash)" eval "$(zoxide init bash)"
fi fi
if [ test -x $(command -v fzf) ]; then if [ -x $(command -v fzf) ]; then
eval "$(fzf --bash)" eval "$(fzf --bash)"
fi fi
if [ -z "$SSH_CONNECTION" ]; then if [ -x $(command -v wt) ]; then
export SSH_AUTH_SOCK="/run/user/$UID/gnupg/S.gpg-agent.ssh" eval "$(command wt config shell init bash)";
fi fi
if [ -n "$SSH_CONNECTION" ]; then
# Create a predictable symlink pointing to the current SSH auth socket # Create a predictable symlink pointing to the current SSH auth socket
auth_sock="$HOME/.ssh/ssh_auth_sock" auth_sock="$HOME/.ssh/ssh_auth_sock"
if [ -n "$SSH_AUTH_SOCK" ] && [ "$SSH_AUTH_SOCK" != "$auth_sock" ]; then if [ -n "$SSH_AUTH_SOCK" ] && [ "$SSH_AUTH_SOCK" != "$auth_sock" ]; then
mkdir -p "$HOME/.ssh" mkdir -p "$HOME/.ssh" && ln -snf "$SSH_AUTH_SOCK" "$auth_sock"
ln -sf "$SSH_AUTH_SOCK" "$auth_sock" fi
else
export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"
fi fi
for _f in "$HOME"/.config/herdr/plugins/github/herdr-automatic-rename-*/shell/hook.bash; do for _f in "$HOME"/.config/herdr/plugins/github/herdr-automatic-rename-*/shell/hook.bash; do
[ -r "$_f" ] && { source "$_f"; break; } [ -r "$_f" ] && { source "$_f"; break; }
done done
[[ -f ~/.bash_aliases ]] && . ~/.bash_aliases
@@ -0,0 +1 @@
MOZ_ENABLE_WAYLAND=1
-20
View File
@@ -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
+6
View File
@@ -33,6 +33,7 @@ if status is-interactive
alias oo "cd $SECOND_BRAIN" alias oo "cd $SECOND_BRAIN"
alias on "nvim '+Obsidian new'" alias on "nvim '+Obsidian new'"
alias os "nvim '+Obsidian search'" alias os "nvim '+Obsidian search'"
alias ngit "nvim +Neogit"
alias zdiff "nvim '+Zdiff'" alias zdiff "nvim '+Zdiff'"
alias review "nvim '+Zdiff origin/HEAD'" alias review "nvim '+Zdiff origin/HEAD'"
alias mini "NVIM_APPNAME=mini.nvim nvim" alias mini "NVIM_APPNAME=mini.nvim nvim"
@@ -67,6 +68,11 @@ if status is-interactive
/usr/bin/jj util completion fish | source /usr/bin/jj util completion fish | source
end end
if command -q workmux
alias wm "workmux"
alias wmd "workmux dashboard"
end
# NVM # NVM
function __check_nvm --on-variable PWD --description 'Do nvm stuff' function __check_nvm --on-variable PWD --description 'Do nvm stuff'
status --is-command-substitution; and return status --is-command-substitution; and return
+29 -29
View File
@@ -12,9 +12,10 @@ ui = auto
[branch] [branch]
autosetupmerge = true autosetupmerge = true
sort = -committerdate
[tag] [tag]
sort = version:refname sort = -version:refname
[diff] [diff]
algorithm = histogram algorithm = histogram
@@ -33,11 +34,9 @@ pruneTags = true
all = true all = true
[commit] [commit]
verbose = true
# gpgsign = true # gpgsign = true
[help]
autocorrect = prompt
[rerere] [rerere]
enabled = true enabled = true
autoupdate = 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 layout = BASE,MERGED + BASE,LOCAL + BASE,REMOTE
[merge] [merge]
conflictStyle = diff3 conflictStyle = zdiff3
summary = true summary = true
verbosity = 1 verbosity = 1
tool = nvimdiff
[apply] [apply]
whitespace = nowarn whitespace = nowarn
@@ -69,25 +67,8 @@ whitespace=fix,-indent-with-non-tab,trailing-space,cr-at-eol
[advice] [advice]
statusHints = false 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] [alias]
# annex
xl = annex list
xg = annex list
# add # add
a = add a = add
padd = add --patch padd = add --patch
@@ -127,16 +108,16 @@ last = diff HEAD^
# log # log
l = log --graph --date=short l = log --graph --date=short
la = log --graph --date=short --all 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} wu = log -p origin..@{0}
changes = log --pretty=format:\"%h %cr %cn %Cgreen%s%Creset\" --name-status changes = log --pretty=format:\"%h %cr %cn %Cgreen%s%Creset\" --name-status
short = log --pretty=format:\"%h %cr %cn %Cgreen%s%Creset\" short = log --pretty=format:\"%h %cr %cn %Cgreen%s%Creset\"
changelog = log --pretty=format:\" * %s\" changelog = log --pretty=format:\" * %s\"
shortnocolor = log --pretty=format:\"%h %cr %cn %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 showfiles = show --name-only
lc = log ORIG_HEAD.. --stat --no-merges
# rebase # rebase
rc = rebase --continue rc = rebase --continue
@@ -159,7 +140,6 @@ diffstat = diff --stat
changes = diff --name-status -r changes = diff --name-status -r
# stash # stash
stashes = stash list
ss = stash ss = stash
sl = stash list sl = stash list
sa = stash apply sa = stash apply
@@ -178,7 +158,6 @@ dt = difftools
rv = review rv = review
ls = ls-files ls = ls-files
gconf = config --global
c = clone --recursive c = clone --recursive
bc = clone --bare bc = clone --bare
@@ -189,3 +168,24 @@ wtl = worktree list
wtr = worktree remove wtr = worktree remove
ignore = "!gi() { curl -sL https://www.toptal.com/developers/gitignore/api/$@ ;}; gi" 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
+47 -3
View File
@@ -1,21 +1,47 @@
onboarding = false onboarding = false
[ui] [ui]
show_agent_labels_on_pane_borders = true show_agent_labels_on_pane_borders = true
pane_gaps = false pane_gaps = false
pane_borders = true pane_borders = true
prompt_new_tab_name = false 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] [experimental]
pane_history = true pane_history = true
allow_nested = true
[theme] [theme]
name = "gruvbox" name = "terminal"
auto_switch = true
[theme.custom]
panel_bg = "black"
[terminal]
new_cwd = "follow"
[keys] [keys]
prefix = "ctrl+space" prefix = "ctrl+space"
reload_config = "prefix+ctrl+r" reload_config = "prefix+q"
help = "prefix+?"
detach = "prefix+d"
zoom = "prefix+z" zoom = "prefix+z"
copy_mode = "prefix+["
last_pane = "prefix+;"
focus_agent = "prefix+alt+1..9"
switch_workspace = "prefix+shift+1..9"
[remote] [remote]
manage_ssh_config = true manage_ssh_config = true
@@ -47,5 +73,23 @@ type = "plugin_action"
command = "herdr-zoxide.browse" command = "herdr-zoxide.browse"
description = "Browse zoxide directories" 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] [ui.toast]
delivery = "herdr" delivery = "herdr"
-807
View File
@@ -1,807 +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 = "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-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-down", 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"
})
hl.monitor({
output = "desc:Microstep MSI MAG342CQR DB6H252300057",
mode = "preferred",
position = "auto-left",
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 .. "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 .. "N", hl.dsp.exec_cmd(terminal .. " -a quicknotes -e nvim +'Obsidian today'"),
{ description = "Open Obsidian today in a centered floating window" })
hl.bind(LEADER .. "B", hl.dsp.exec_raw(browser), { description = "Open browser" })
hl.bind(LEADER .. "S", hl.dsp.exec_raw("ostt launch --paste"), { description = "Open ostt" })
hl.bind(LEADER .. "I", sysinfo, { 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 .. "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(HYPR .. "P", hl.dsp.exec_cmd("gtk-launch pi.desktop"), { description = "Open pi tui" })
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("Print", hl.dsp.exec_cmd("hyprshot -m window"), { description = "Take screenshot" })
hl.bind("SHIFT + Print", hl.dsp.exec_cmd("hyprshot -m region"), { description = "Take screenshot" })
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("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" })
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
hl.bind(LEADER .. "T", toggle_float_with_limit,
{ description = "Window: Toggle floating/tiling (max 80%)" })
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" })
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({ mode = "top" }))
end
end
end
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(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", toggle_master, { description = "Layout: Toggle master size" })
-- 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.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.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({
match = { class = "terminal-pi" },
float = true,
center = true,
workspace = "special:special",
size = { "monitor_w/2", "monitor_h/2" }
})
hl.window_rule({
match = { class = "quicknotes" },
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" },
})
-- 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)
+39 -4
View File
@@ -2,6 +2,9 @@
experimental = true experimental = true
env_shell_expand = true env_shell_expand = true
[env]
RUSTUP_HOME = "{{env.HOME}}/.rustup"
[tools] [tools]
age = "latest" age = "latest"
bun = "latest" bun = "latest"
@@ -24,6 +27,18 @@ herdr = "latest"
opencode = "latest" opencode = "latest"
pi = "latest" pi = "latest"
worktrunk = "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] [tasks.setup_pi]
run = [ run = [
@@ -35,9 +50,20 @@ run = [
'pi install npm:@dietrichgebert/ponytail', 'pi install npm:@dietrichgebert/ponytail',
'pi install npm:@gotgenes/pi-permission-system', 'pi install npm:@gotgenes/pi-permission-system',
'pi install npm:@plannotator/pi-extension', 'pi install npm:@plannotator/pi-extension',
'test -x /usr/bin/pass && /usr/bin/pass show config/pi/auth.json > ~/.pi/agent/auth.json' '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] [tasks.setup_nvim]
run = [ run = [
'uv tool install vectorcode' 'uv tool install vectorcode'
@@ -45,15 +71,24 @@ run = [
[tasks.skills] [tasks.skills]
run = [ run = [
'npx skills add SjB/skills', "test -d ~/.local/share/skills || git clone https://github.com/SjB/skills.git ~/.local/share/skills",
'npx skills add mattpocock/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 = [ run = [
'herdr plugin install devashish2203/herdr-worktrunk --yes', 'herdr plugin install devashish2203/herdr-worktrunk --yes',
'herdr plugin install qu8n/herdr-automatic-rename --yes', 'herdr plugin install qu8n/herdr-automatic-rename --yes',
'herdr plugin install den-tanui/herdr-zoxide --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] [tasks.light]
+1
View File
@@ -60,6 +60,7 @@ vim.opt.shiftround = true
vim.opt.shiftwidth = 4 vim.opt.shiftwidth = 4
vim.opt.softtabstop = 4 vim.opt.softtabstop = 4
vim.opt.tabstop = 4 vim.opt.tabstop = 4
vim.opt.exrc = true
vim.opt.hidden = true vim.opt.hidden = true
vim.opt.shortmess:append({ W = true, I = true, c = true, C = true }) vim.opt.shortmess:append({ W = true, I = true, c = true, C = true })
vim.opt.spelllang = { "en" } vim.opt.spelllang = { "en" }
+5 -5
View File
@@ -1,5 +1,5 @@
vim.pack.add({ -- vim.pack.add({
{ src = 'https://github.com/mistweaverco/kulala.nvim' }, -- { src = 'https://github.com/mistweaverco/kulala.nvim' },
}) -- })
--
require('kulala').setup() -- require('kulala').setup()
+1 -1
View File
@@ -5,7 +5,7 @@ if vim.fn.isdirectory(vim.fn.expand "~" .. "/Documents/sjb-brain/") == 1 then
require("obsidian").setup({ require("obsidian").setup({
legacy_commands = false, legacy_commands = false,
picker = { picker = {
name = "snacks.pick", name = "snacks.picker",
}, },
ui = { ui = {
enable = true, enable = true,
+5 -5
View File
@@ -1,5 +1,5 @@
vim.pack.add({ 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/chipsenkbeil/org-roam.nvim' },
{ src = 'https://github.com/akinsho/org-bullets.nvim' }, { src = 'https://github.com/akinsho/org-bullets.nvim' },
}) })
@@ -9,8 +9,8 @@ require('orgmode').setup({
use_vim_ui = true use_vim_ui = true
} }
}, },
org_agenda_files = {'~/Documents/notes/*project*org', '~/Documents/notes/Inbox*org', '~/Documents/journals/*.org'}, org_agenda_files = {'~/Documents/GTD/*project*org', '~/Documents/GTD/Inbox*org', '~/Documents/GTD/journals/*.org'},
org_default_notes_file = "~/Documents/notes/Inbox.org", org_default_notes_file = "~/Documents/GTD/Inbox.org",
org_todo_keywords = { 'TODO(t)', 'NEXT(n)', '|', 'DONE(d)', 'DELEGATED(a)' }, org_todo_keywords = { 'TODO(t)', 'NEXT(n)', '|', 'DONE(d)', 'DELEGATED(a)' },
mappings = { mappings = {
capture = { capture = {
@@ -25,7 +25,7 @@ require('orgmode').setup({
}, },
j = { j = {
description = "Journal entry", 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", template = "* %<%Y-%m-%d %H:%M> %?\n",
}, },
}, },
@@ -65,7 +65,7 @@ require('org-roam').setup({
bindings = { bindings = {
prefix = "<LocalLeader>oO", prefix = "<LocalLeader>oO",
}, },
directory = "~/Documents/notes", directory = "~/Documents/GTD",
extensions = { extensions = {
dailies = { dailies = {
directory = "journals" directory = "journals"
+5
View File
@@ -0,0 +1,5 @@
{
"contextInjection": {
"enabled": false
}
}
@@ -7,8 +7,7 @@
"~/.ssh/*": "deny", "~/.ssh/*": "deny",
"*.env": "deny", "*.env": "deny",
"*.env.*": "deny", "*.env.*": "deny",
"*.env.example": "allow", "*.env.example": "allow"
"/tmp/*": "ask"
}, },
"bash": { "bash": {
"*": "ask", "*": "ask",
@@ -17,6 +16,7 @@
}, },
"external_directory": { "external_directory": {
"*": "ask", "*": "ask",
"/tmp/*": "ask",
"~/Documents/sjb-brain/*": "allow" "~/Documents/sjb-brain/*": "allow"
} }
}, },
+26 -11
View File
@@ -1,16 +1,31 @@
{ {
"providers": { "providers": {
"dupont": { "brine.sharcnet.ca": {
"baseUrl": "http://172.25.11.30/v1", "baseUrl": "https://brine.sharcnet.ca/v1",
"api": "openai-completions", "api": "openai-completions",
"models": [ "models": [
{ {
"id": "glm-4.7-flash", "id": "openai//opt/vllm/models/North-Mini-Code-1.0-fp8",
"name": "glm-4.7-flash", "name": "openai//opt/vllm/models/North-Mini-Code-1.0-fp8"
"reasoning": true, },
{
"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": [ "input": [
"text" "text",
"image"
], ],
"reasoning": true,
"contextWindow": 131072, "contextWindow": 131072,
"maxTokens": 131072, "maxTokens": 131072,
"cost": { "cost": {
@@ -27,12 +42,12 @@
} }
}, },
"obelix": { "obelix": {
"baseUrl": "http://172.25.11.32/v1", "baseUrl": "https://llm.nca.uwo.ca/v1",
"api": "openai-completions", "api": "openai-completions",
"models": [ "models": [
{ {
"id": "ornith-1.0-35B", "id": "ornith-1.5-35B",
"name": "ornith-1.0-35B", "name": "ornith-1.5-35B",
"reasoning": true, "reasoning": true,
"input": [ "input": [
"text" "text"
@@ -57,8 +72,8 @@
"api": "openai-completions", "api": "openai-completions",
"models": [ "models": [
{ {
"id": "gemma-4-12B-coder", "id": "Qwythos-9B-v2",
"name": "gemma-4-12B-coder", "name": "Qwythos-9B-v2",
"reasoning": true, "reasoning": true,
"input": [ "input": [
"text" "text"
+21 -25
View File
@@ -1,8 +1,8 @@
{ {
"lastChangelogVersion": "0.81.0", "lastChangelogVersion": "1.1.0",
"theme": "light/dark", "theme": "light/dark",
"defaultProvider": "openai-codex", "defaultProvider": "openai",
"defaultModel": "gpt-5.6-luna", "defaultModel": "gpt-6-sol",
"defaultThinkingLevel": "high", "defaultThinkingLevel": "high",
"hideThinkingBlock": true, "hideThinkingBlock": true,
"compaction": { "compaction": {
@@ -17,49 +17,45 @@
"max": "max" "max": "max"
}, },
"enableInstallTelemetry": false, "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": [ "packages": [
"npm:pi-lens", "npm:pi-lens",
"npm:@gotgenes/pi-permission-system", "npm:@gotgenes/pi-permission-system",
"npm:pi-native-search", "npm:pi-native-search",
"npm:context-mode", "npm:context-mode",
"npm:pi-subagents" "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": { "subagents": {
"agentOverrides": { "agentOverrides": {
"reviewer": { "reviewer": {
"model": "opencode-go/hy3", "model": "obelix/ornith-1.5-35B",
"fallbackModels": [ "openai-codex/gpt-5.6-luna" ], "thinking": "high"
"thinking": "low"
}, },
"planner": { "planner": {
"model": "opencode-go/qwen3.7-plus" "model": "openai/gpt-6-luna",
"thinking": "high"
}, },
"worker": { "worker": {
"model": "opencode-go/kimi-k2.7-code" "model": "opencode-go/claude-haiku-5-5"
}, },
"oracle": { "oracle": {
"model": "openai-codex/gpt-5.6-luna", "model": "openai/gpt-6.1-sol",
"fallbackModels": [ "opencode-go/qwen3.7-max" ],
"thinking": "high" "thinking": "high"
} }
} }
}, },
"defaultTools": [
"+codemode"
],
"quietStartup": true, "quietStartup": true,
"steeringMode": "all", "steeringMode": "all",
"terminal": { "terminal": {
"showTerminalProgress": true "showTerminalProgress": true
} },
"deviceId": "2314a9e6-0e82-49cd-8518-efc15c870eef"
} }
+12
View File
@@ -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
+16
View File
@@ -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
+5
View File
@@ -0,0 +1,5 @@
Host caraco
User sjb
Hostname 172.25.11.136
ForwardAgent yes
RequestTTY yes
-1
View File
@@ -1 +0,0 @@
SetEnv TERM=xterm-256color
+8
View File
@@ -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
+16
View File
@@ -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
+5
View File
@@ -0,0 +1,5 @@
Host milou
User tintin
Hostname 172.25.11.133
ForwardAgent yes
RequestTTY yes
+6
View File
@@ -0,0 +1,6 @@
Host nca-ai-01
HostName 192.168.33.74
User steve
ForwardAgent yes
RequestTTY yes
+19
View File
@@ -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
+7
View File
@@ -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
+7
View File
@@ -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
+8
View File
@@ -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
+8
View File
@@ -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
+15
View File
@@ -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
+7 -12
View File
@@ -1,8 +1,9 @@
# set-option -g default-terminal 'screen-256color' # set-option -g default-terminal 'screen-256color'
# set-option -g terminal-overrides ',xterm-256color:RGB' # set-option -g terminal-overrides ',xterm-256color:RGB'
set -g default-terminal "tmux-256color" set -g default-terminal "tmux-256color"
set -as terminal-feature ",*:RGB" set -ag terminal-overrides ",*:RGB"
set -as terminal-feature ",*:clipboard" set -as terminal-features ",*:clipboard"
set -ag terminal-features "xterm-kitty:extkeys"
# set -ag terminal-overrides ",*:Tc" # set -ag terminal-overrides ",*:Tc"
# set -as terminal-overrides ',*:Smulx=\E[4::%p1%dm' # set -as terminal-overrides ',*:Smulx=\E[4::%p1%dm'
@@ -10,27 +11,23 @@ set -as terminal-feature ",*:clipboard"
# allow terminal scrolling # 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" setenv -g SSH_AUTH_SOCK "$HOME/.ssh/ssh_auth_sock"
set -g update-environment "DISPLAY XAUTHORITY" set -g update-environment "DISPLAY XAUTHORITY"
set -g mouse on set -g mouse on
# auto rename windows
# set -g automatic-rename on # set -g automatic-rename on
# set -g automatic-rename-format '#{pane_current_command} #{b:pane_current_path}' # set -g automatic-rename-format '#{pane_current_command} #{b:pane_current_path}'
set -g allow-rename on set -g allow-rename on
# start with window 1 (instead of 0)
set -g base-index 1 set -g base-index 1
# start with pane 1
setw -g pane-base-index 1 setw -g pane-base-index 1
# history
set -g history-limit 5000 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-activity off
set -g visual-bell off set -g visual-bell off
set -g visual-silence off set -g visual-silence off
@@ -38,8 +35,6 @@ set -g monitor-activity on
set -g bell-action none set -g bell-action none
set -g allow-passthrough on set -g allow-passthrough on
#set -g bell-on-alert on
set -s escape-time 0 set -s escape-time 0
setw -g aggressive-resize on setw -g aggressive-resize on
set -g status-keys vi set -g status-keys vi
@@ -47,7 +42,7 @@ set-window-option -g mode-keys vi
set -g extended-keys on set -g extended-keys on
set -g extended-keys-format csi-u 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 set-titles on
set-option -g detach-on-destroy off set-option -g detach-on-destroy off
set-option -g renumber-windows on set-option -g renumber-windows on
+55
View File
@@ -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"
-47
View File
@@ -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 }}"
-83
View File
@@ -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 }}"
-25
View File
@@ -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 }}
-22
View File
@@ -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 }}
-9
View File
@@ -1,9 +0,0 @@
$activeBorderColor = rgb({{ accent_strip }})
general {
col.active_border = $activeBorderColor
}
group {
col.border_active = $activeBorderColor
}
-14
View File
@@ -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 }
}
}
})
-27
View File
@@ -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 }}
+41
View File
@@ -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')
-56
View File
@@ -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 }}'
+7 -7
View File
@@ -1,20 +1,20 @@
* { * {
background: {{ background }}; background: {{ background }};
foreground: {{ foreground }}; foreground: {{ foreground }};
active-background: {{ color2 }}; active-background: {{ lighter_background }};
urgent-background: {{ color1 }}; urgent-background: {{ accent }};
normal-foreground: {{ color3 }}; normal-foreground: {{ dark_foreground }};
normal-background: {{ background }}; normal-background: {{ dark_background }};
selected-foreground: {{ selection_foreground }}; selected-foreground: {{ selection_foreground }};
selected-background: {{ selection_background }}; selected-background: {{ selection_background }};
seperator-color: {{ background }}; seperator-color: {{ background }};
border-color: {{ color0 }}; border-color: {{ accent }};
prompt-color: {{ color4 }}; prompt-color: {{ light_foreground }};
prompt-background-color: {{ color0 }}; prompt-background-color: {{ darker_background }};
window-border-size: 1px; window-border-size: 1px;
window-border-radius: 8px; window-border-radius: 8px;
+10
View File
@@ -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 }}"
+9 -9
View File
@@ -1,25 +1,25 @@
color_bg0="{{ background }}" color_bg0="{{ background }}"
color_bg1="{{ color0 }}" color_bg1="{{ dark_background }}"
color_bg2="{{ color7 }}" color_bg2="{{ darker_background }}"
color_fg0="{{ foreground }}" color_fg0="{{ foreground }}"
color_fg1="{{ color3 }}" color_fg1="{{ light_foreground }}"
color_status_fg="{{ color4 }}" color_status_fg="{{ light_foreground }}"
color_status_bg="{{ color0 }}" color_status_bg="{{ muted }}"
color_selected_fg="{{ selection_foreground }}" color_selected_fg="{{ selection_foreground }}"
color_selected_bg="{{ selection_background }}" color_selected_bg="{{ selection_background }}"
color_highlight_fg="{{ color2 }}" color_highlight_fg="{{ yellow }}"
color_highlight_bg="{{ background }}" color_highlight_bg="{{ background }}"
color_current_fg="{{ color1 }}" color_current_fg="{{ orange }}"
color_current_bg="{{ background }}" color_current_bg="{{ background }}"
color_check_fg="{{ color5 }}" color_check_fg="{{ green }}"
pane_border_fg="{{ foreground }}" 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_fg "${color_highlight_fg}"
set -g @prefix_highlight_bg "${color_highlight_bg}" set -g @prefix_highlight_bg "${color_highlight_bg}"
@@ -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
+9
View File
@@ -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=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
+9
View File
@@ -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
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
@@ -1,13 +1,14 @@
[main] [main]
font=MonaspiceNeNerdFontMono:size=13 font=MonaspiceNeNerdFontMono:size=13
term=xterm-256color term=xterm-256color
pad=6x6 pad=3x3
initial-window-mode=windowed initial-window-mode=windowed
workers=0 workers=0
include=~/.config/omarchy/current/theme/foot.ini include=~/.local/state/omarchy/current/theme/foot.ini
[scrollback] [scrollback]
lines=10000 lines=10000
multiplier=7.0
[cursor] [cursor]
style=block style=block
@@ -20,3 +21,12 @@ clipboard-paste=Shift+Insert Control+Shift+v XF86Paste
[tweak] [tweak]
overflowing-glyphs=yes 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
general { general {
@@ -8,7 +8,7 @@ general {
background { background {
monitor = monitor =
path = ~/.config/omarchy/current/background path = ~/.local/state/omarchy/current/background
color = $color color = $color
} }
+51
View File
@@ -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" })
+3
View File
@@ -0,0 +1,3 @@
hl.on("hyprland.start", function()
hl.exec_cmd("hyprctl setcursor Pop 24")
end)
+250
View File
@@ -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" })
+154
View File
@@ -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" })
+28
View File
@@ -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")
+59
View File
@@ -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" })
+221
View File
@@ -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
+16
View File
@@ -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")
+70
View File
@@ -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"
})
+107
View File
@@ -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" })
+77
View File
@@ -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" },
})
+112
View File
@@ -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" })
@@ -37,4 +37,4 @@ on-button-left=exec sh -c 'omarchy-notification-dismiss "Install Dictation with
max-icon-size=80 max-icon-size=80
format=<b>%s</b>\n%b format=<b>%s</b>\n%b
include=~/.config/omarchy/current/theme/mako.ini include=~/.local/state/omarchy/current/theme/mako.ini
@@ -1,4 +1,4 @@
config_version = "0.0.25" config_version = "0.0.27"
[transcription] [transcription]
provider = "whisper" provider = "whisper"
@@ -21,7 +21,7 @@ x = 630
y = 790 y = 790
[output.paste] [output.paste]
paste_key = "ctrl+shift+v" #paste_key = "ctrl+shift+v"
restore_clipboard = true restore_clipboard = true
restore_delay_ms = 750 restore_delay_ms = 750
post_popup_delay_ms = 1000 post_popup_delay_ms = 1000

Some files were not shown because too many files have changed in this diff Show More