From 5248b027204f23fdd6f28199d2c104a1809f80a8 Mon Sep 17 00:00:00 2001 From: Prad Nukala Date: Tue, 25 Aug 2026 15:38:34 -0400 Subject: [PATCH] feat(config): add secret and env fish files, extend fish path, and overhaul Hyprland keybindings and Kitty mapping --- dot_config/fish/conf.d/secrets.fish | 20 +++ dot_config/fish/conf.d/uv.env.fish | 2 + dot_config/fish/config.fish | 1 + dot_config/hypr/bindings.lua | 183 ++++++++++++++++++++-------- dot_config/kitty/kitty.conf | 2 +- 5 files changed, 153 insertions(+), 55 deletions(-) create mode 100644 dot_config/fish/conf.d/secrets.fish create mode 100644 dot_config/fish/conf.d/uv.env.fish diff --git a/dot_config/fish/conf.d/secrets.fish b/dot_config/fish/conf.d/secrets.fish new file mode 100644 index 0000000..56c9a55 --- /dev/null +++ b/dot_config/fish/conf.d/secrets.fish @@ -0,0 +1,20 @@ +# Secrets — gitignored. Do NOT commit. Rotate anything that ever was committed. +set -gx PGDATABASE 'postgresql://prad:dv@localhost:5432/devdb' + +set -gx GITLAB_TOKEN 'glpat-CUmtwRHJl1gkFZKXnOPiEG86MQp1OjEH.01.0w0405m5v' +set -gx OPPER_API_KEY 'op-5S93K4PP2AIQXVY1Y1Q5' +set -gx OPENAI_API_KEY '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' +set -gx GROQ_API_KEY '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' +set -gx WEBAWESOME_NPM_TOKEN 'my_LVaJupQwmJKhgm1lMa' +set -gx TAVILY_API_KEY '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' +set -gx FINANCIAL_DATASETS_API_KEY '338132a1-4349-443a-9a39-47a4c4f1e55f' +set -gx PIMLICO_API_KEY 'pim_bQtdWLgXDUuBSzdTJAjWn2' +set -gx WAKATIME_API_KEY 'waka_4f74f981-d1f7-489d-9270-f8423768476d' + + +set -gx LINEAR_CLI_PROFILE 'walletbase' + +set -gx LINEAR_API_KEY 'lin_api_Z3HTtgAXHAD5LqvV3CaCMEmHYNjzTkKFdJC1quin' +set -gx LINEAR_TEAM_ID 'deb602fb-cae3-42cf-9084-3b1fd4fa6589' + + diff --git a/dot_config/fish/conf.d/uv.env.fish b/dot_config/fish/conf.d/uv.env.fish new file mode 100644 index 0000000..d97734b --- /dev/null +++ b/dot_config/fish/conf.d/uv.env.fish @@ -0,0 +1,2 @@ + +source "$HOME/.local/share/../bin/env.fish" diff --git a/dot_config/fish/config.fish b/dot_config/fish/config.fish index 3e8da8c..57bee2e 100644 --- a/dot_config/fish/config.fish +++ b/dot_config/fish/config.fish @@ -39,3 +39,4 @@ end # cmux fish_add_path "/home/prad/.cmux/bin" +fish_add_path "/home/prad/.cache/.bun/bin" diff --git a/dot_config/hypr/bindings.lua b/dot_config/hypr/bindings.lua index 77d544c..b71c9c5 100644 --- a/dot_config/hypr/bindings.lua +++ b/dot_config/hypr/bindings.lua @@ -1,42 +1,34 @@ --- Keep only your personal keybinding overrides here. Add new bindings or --- unbind defaults before replacing them. +-- ============================================================================ +-- Personal overrides, ported from the niri config. +-- Append to ~/.config/hypr/hyprland.lua, after require("default.hypr.omarchy"). +-- Every rebind of an Omarchy default is unbound first. The comment after each +-- unbind says what the key did before. +-- ============================================================================ --- See current bindings and descriptions: --- omarchy menu keybindings --print +-- ─── Window management ────────────────────────────────────────────────────── --- To disable every Omarchy default binding, set this in --- ~/.config/hypr/hyprland.lua before require("default.hypr.omarchy"), then add --- only the bindings you want below: --- omarchy_default_bindings = false - --- To disable all preinstalled app/webapp bindings, set: --- omarchy_preinstalled_bindings = false - --- Add a new binding. --- o.bind("SUPER + SHIFT + R", "SSH", "alacritty -e ssh your-server") - --- Change an existing binding by unbinding it first, then binding the key again. --- This example changes SUPER+SPACE from the launcher to the Omarchy root menu. --- hl.unbind("SUPER + SPACE") --- o.bind("SUPER + SPACE", "Omarchy menu", "omarchy-menu toggle root") - --- Disable a default binding without replacing it. --- hl.unbind("SUPER + SHIFT + B") - --- Logitech MX Keys examples: --- o.bind("SUPER + SHIFT + S", nil, "omarchy-capture-screenshot") --- o.bind("SUPER + H", nil, "voxtype record toggle") --- o.bind("SUPER + PERIOD", nil, "omarchy-shell shell toggle omarchy.emojis") - --- Quit the focused application. +-- Mod+Q -> close. Omarchy already binds this, so it is only made explicit. hl.unbind("SUPER + Q") o.bind("SUPER + Q", "Close window", hl.dsp.window.close()) --- Layout toggle (dwindle <-> scrolling) moves to SUPER+W. -hl.unbind("SUPER + W") -- was: close window (SUPER+Q still closes) +-- Mod+W was tabbed display. Here it flips the workspace layout. +hl.unbind("SUPER + W") -- was: close window o.bind("SUPER + W", "Toggle workspace layout", "omarchy-hyprland-workspace-layout-toggle") --- Vim-style focus. Free the keys first. +-- Mod+BackSpace -> last window. +hl.unbind("SUPER + BACKSPACE") -- was: toggle window transparency +o.bind("SUPER + BACKSPACE", "Focus last window", hl.dsp.focus({ last = true })) + +-- Tabs. Hyprland groups are the nearest thing to a niri tabbed column. +-- SUPER + G (group) and SUPER + ALT + TAB (next in group) are Omarchy defaults. + +-- ─── Focus and swap: hjkl ─────────────────────────────────────────────────── + +-- Focus steps through the windows of a group first, and leaves the group only +-- at the ends. This is the focus half of the smart-move behavior below, and +-- Hyprland does it on its own, so no script is needed. +hl.config({ binds = { movefocus_cycles_groupfirst = true } }) + hl.unbind("SUPER + J") -- was: toggle window split hl.unbind("SUPER + K") -- was: keybindings menu hl.unbind("SUPER + L") -- was: toggle workspace layout @@ -46,30 +38,113 @@ o.bind("SUPER + J", "Focus on below window", hl.dsp.focus({ direction = "d" })) o.bind("SUPER + K", "Focus on above window", hl.dsp.focus({ direction = "u" })) o.bind("SUPER + L", "Focus on right window", hl.dsp.focus({ direction = "r" })) --- Optional: put the keybindings menu back on a free key. --- o.bind("SUPER + SHIFT + /", "Keybindings", "omarchy-menu-keybindings") +-- Smart move: merge into the neighboring group if there is one, else swap. +-- Needs ~/.local/bin/omarchy-smart-move. +o.bind("SUPER + SHIFT + H", "Move or merge left", "omarchy-smart-move l") +o.bind("SUPER + SHIFT + J", "Move or merge down", "omarchy-smart-move d") +o.bind("SUPER + SHIFT + K", "Move or merge up", "omarchy-smart-move u") +o.bind("SUPER + SHIFT + L", "Move or merge right", "omarchy-smart-move r") --- Optional: move windows with the same keys plus SHIFT. -hl.unbind("SUPER + SHIFT + K") -o.bind("SUPER + SHIFT + H", "Swap window to the left", hl.dsp.window.swap({ direction = "l" })) -o.bind("SUPER + SHIFT + J", "Swap window down", hl.dsp.window.swap({ direction = "d" })) -o.bind("SUPER + SHIFT + K", "Swap window up", hl.dsp.window.swap({ direction = "u" })) -o.bind("SUPER + SHIFT + L", "Swap window to the right", hl.dsp.window.swap({ direction = "r" })) +-- ─── Workspaces and monitors ──────────────────────────────────────────────── --- Omarchy App Cycling -o.bind("SUPER + CTRL + ALT + J", "Cycle terminals", "omarchy-cycle-terminal") -o.bind("SUPER + CTRL + ALT + K", "Cycle browsers", "omarchy-cycle-browser") - --- Cycle the focused window through preset sizes. -o.bind("SUPER + R", "Cycle window size", "omarchy-cycle-window-size") -o.bind("SUPER + SHIFT + R", "Cycle window size back", "omarchy-cycle-window-size prev") - --- Mail and messaging. -o.bind("SUPER + CTRL + ALT + E", "Fastmail", { launch = "fastmail", focus = "fastmail" }) -o.bind("SUPER + CTRL + ALT + M", "Beeper", { launch = "beeper", focus = "beeper" }) -o.bind("SUPER + CTRL + ALT + A", "Claude", { launch = "claude-desktop", focus = "claude-desktop" }) - --- Workspaces. hl.unbind("SUPER + CTRL + K") -- was: Herdr keybindings o.bind("SUPER + CTRL + J", "Next workspace", hl.dsp.focus({ workspace = "e+1" })) o.bind("SUPER + CTRL + K", "Previous workspace", hl.dsp.focus({ workspace = "e-1" })) + +hl.unbind("SUPER + O") -- was: pop window out +hl.unbind("SUPER + SHIFT + O") -- was: Obsidian (moved to SUPER + CTRL + ALT + O) +o.bind("SUPER + O", "Focus next monitor", hl.dsp.focus({ monitor = "+1" })) +o.bind("SUPER + SHIFT + O", "Move window to next monitor", hl.dsp.window.move({ monitor = "+1" })) + +o.bind("SUPER + CTRL + SHIFT + J", "Move window to next monitor", hl.dsp.window.move({ monitor = "+1" })) +o.bind("SUPER + CTRL + SHIFT + K", "Move window to previous monitor", hl.dsp.window.move({ monitor = "-1" })) + +-- Named workspaces, in place of niri-dynamic-workspaces. +o.bind("SUPER + SHIFT + CTRL + ALT + W", "Workspace w", hl.dsp.focus({ workspace = "name:w" })) +o.bind("SUPER + SHIFT + CTRL + ALT + H", "Workspace h", hl.dsp.focus({ workspace = "name:h" })) +o.bind("SUPER + CTRL + ALT + X", "Workspace x", hl.dsp.focus({ workspace = "name:x" })) + +-- ─── Sizing ───────────────────────────────────────────────────────────────── + +-- Mod+R / Mod+Shift+R. Needs ~/.local/bin/omarchy-cycle-window-size. +o.bind("SUPER + R", "Cycle window size", "omarchy-cycle-window-size") +o.bind("SUPER + SHIFT + R", "Cycle window size back", "omarchy-cycle-window-size prev") + +-- Alt+Shift+hjkl. Hyprland resizes by pixels, not by percent, so 100 px +-- replaces the niri 10%. +o.bind("ALT + SHIFT + H", "Shrink window width", hl.dsp.window.resize({ x = -100, y = 0, relative = true })) +o.bind("ALT + SHIFT + L", "Grow window width", hl.dsp.window.resize({ x = 100, y = 0, relative = true })) +o.bind("ALT + SHIFT + J", "Shrink window height", hl.dsp.window.resize({ x = 0, y = -100, relative = true })) +o.bind("ALT + SHIFT + K", "Grow window height", hl.dsp.window.resize({ x = 0, y = 100, relative = true })) + +-- Column fitting. These are scrolling layout messages, so they do nothing on +-- a dwindle workspace. Mod+F (expand to available width) has no exact match; +-- the Omarchy default SUPER + ALT + F (full width) is the closest. +o.bind("SUPER + ALT + C", "Fit active column", hl.dsp.layout("fit active")) +o.bind("SUPER + SHIFT + ALT + C", "Fit visible columns", hl.dsp.layout("fit visible")) + +-- ─── Applications ─────────────────────────────────────────────────────────── +-- Same modifier block as the niri config. Each one focuses an open window +-- before it launches a new one. The launch command uses the same desktop +-- entry the vicinae URLs named, so no binary names are guessed. + +hl.unbind("SUPER + CTRL + A") -- was: audio panel +o.bind("SUPER + CTRL + A", "Claude", "omarchy-launch-or-focus claude \"gtk-launch com.anthropic.Claude\"") +o.bind("SUPER + CTRL + G", "Gemini", "omarchy-launch-or-focus gemini \"gtk-launch gemini-desktop\"") + +o.bind("SUPER + CTRL + ALT + H", "AI apps", "omarchy-cycle ai") +o.bind("SUPER + CTRL + ALT + J", "Terminals", "omarchy-cycle-terminal") +o.bind("SUPER + CTRL + ALT + K", "Browsers", "omarchy-cycle-browser") +o.bind("SUPER + CTRL + ALT + G", "Ghostty", "omarchy-cycle ghostty") +o.bind("SUPER + CTRL + ALT + Y", "Web apps", "omarchy-cycle webapp") +o.bind("SUPER + CTRL + ALT + O", "Obsidian", "omarchy-cycle obsidian") +o.bind("SUPER + CTRL + ALT + F", "File manager", "omarchy-launch-or-focus nautilus \"gtk-launch org.gnome.Nautilus\"") +o.bind("SUPER + CTRL + ALT + E", "Fastmail", "omarchy-launch-or-focus fastmail \"gtk-launch com.fastmail.Fastmail\"") +o.bind("SUPER + CTRL + ALT + M", "Beeper", "omarchy-launch-or-focus beeper \"gtk-launch beeper\"") +o.bind("SUPER + CTRL + ALT + L", "Linear", "omarchy-launch-or-focus linear \"gtk-launch WebApp-Linear3312\"") + +hl.unbind("SUPER + CTRL + ALT + T") -- was: show time +o.bind("SUPER + CTRL + ALT + T", "Todoist", "omarchy-launch-or-focus todoist \"gtk-launch todoist\"") + +hl.unbind("SUPER + CTRL + ALT + W") -- was: toggle weather +o.bind("SUPER + CTRL + ALT + W", "tldraw", "omarchy-launch-or-focus tldraw \"gtk-launch tldraw_offline\"") + +o.bind("SUPER + CTRL + ALT + SPACE", "Sticky notes", "omarchy-launch-or-focus sticky \"gtk-launch io.github.faridjaff.StickyNotesCanvas\"") + +hl.unbind("SUPER + SHIFT + G") -- was: Signal +o.bind("SUPER + SHIFT + G", "Goliath", { launch = "kitty --title=goliath ssh -t goliath tmux new-session -A -s main" }) + +-- ─── Screenshots ──────────────────────────────────────────────────────────── + +hl.unbind("SUPER + S") -- was: toggle scratchpad +hl.unbind("SUPER + SHIFT + S") -- was: Google Maps +hl.unbind("SUPER + CTRL + S") -- was: share menu +o.bind("SUPER + S", "Screenshot region", "omarchy-capture-screenshot region") +o.bind("SUPER + SHIFT + S", "Screenshot window", "omarchy-capture-screenshot windows") +o.bind("SUPER + CTRL + S", "Screenshot monitor", "omarchy-capture-screenshot fullscreen") + +-- ─── Session ──────────────────────────────────────────────────────────────── + +hl.unbind("SUPER + SHIFT + E") -- was: Email (Fastmail is on SUPER + CTRL + ALT + E) +o.bind("SUPER + SHIFT + E", "System menu", "omarchy-menu toggle system") +o.bind("SUPER + SHIFT + Q", "System menu", "omarchy-menu toggle system") + +-- ─── Dictation ────────────────────────────────────────────────────────────── + +o.bind("SUPER + F24", "Dictate to Hermes", "voxtype record toggle --profile hermes") + +-- ─── Menus, in place of vicinae ───────────────────────────────────────────── +-- Same keys as the niri config, pointed at the Omarchy menus. + +-- Mod+Space (vicinae toggle) needs no line: SUPER + SPACE is already the +-- Omarchy menu. SUPER + ALT + SPACE is the apps menu. + +hl.unbind("SUPER + SHIFT + SPACE") -- was: toggle top bar +o.bind("SUPER + SHIFT + SPACE", "Emojis", "omarchy-shell shell toggle omarchy.emojis") + +hl.unbind("SUPER + P") -- was: pseudo window +o.bind("SUPER + P", "Clipboard manager", "omarchy-shell shell toggle omarchy.clipboard") + +-- Mod+Shift+Return was the vicinae window switcher. Omarchy has no window +-- switcher menu, so ALT + TAB (an Omarchy default) is the replacement, and +-- SUPER + SHIFT + RETURN keeps its default job of opening the browser. diff --git a/dot_config/kitty/kitty.conf b/dot_config/kitty/kitty.conf index 35a66bb..f935075 100644 --- a/dot_config/kitty/kitty.conf +++ b/dot_config/kitty/kitty.conf @@ -31,7 +31,7 @@ action_alias launch_vs launch --cwd=current --location=vsplit --bias=40 # panes = kitty windows map ctrl+shift+t new_tab_with_cwd -map super+enter launch_vs +map super+enter new_os_window map ctrl+space launch_hs map ctrl+enter launch_vs map super+n new_os_window