diff --git a/flake.lock b/flake.lock index 172dd5d..dbd1448 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1730016908, - "narHash": "sha256-bFCxJco7d8IgmjfNExNz9knP8wvwbXU4s/d53KOK6U0=", + "lastModified": 1730490306, + "narHash": "sha256-AvCVDswOUM9D368HxYD25RsSKp+5o0L0/JHADjLoD38=", "owner": "nix-community", "repo": "home-manager", - "rev": "e83414058edd339148dc142a8437edb9450574c8", + "rev": "1743615b61c7285976f85b303a36cdf88a556503", "type": "github" }, "original": { @@ -27,11 +27,11 @@ ] }, "locked": { - "lastModified": 1730184279, - "narHash": "sha256-6OB+WWR6gnaWiqSS28aMJypKeK7Pjc2Wm6L0MtOrTuA=", + "lastModified": 1730448474, + "narHash": "sha256-qE/cYKBhzxHMtKtLK3hlSR3uzO1pWPGLrBuQK7r0CHc=", "owner": "LnL7", "repo": "nix-darwin", - "rev": "b379bd4d872d159e5189053ce9a4adf86d56db4b", + "rev": "683d0c4cd1102dcccfa3f835565378c7f3cbe05e", "type": "github" }, "original": { @@ -42,11 +42,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1729880355, - "narHash": "sha256-RP+OQ6koQQLX5nw0NmcDrzvGL8HDLnyXt/jHhL1jwjM=", + "lastModified": 1730200266, + "narHash": "sha256-l253w0XMT8nWHGXuXqyiIC/bMvh1VRszGXgdpQlfhvU=", "owner": "nixos", "repo": "nixpkgs", - "rev": "18536bf04cd71abd345f9579158841376fdd0c5a", + "rev": "807e9154dcb16384b1b765ebe9cd2bba2ac287fd", "type": "github" }, "original": { @@ -58,11 +58,11 @@ }, "nur": { "locked": { - "lastModified": 1730340513, - "narHash": "sha256-CZmauwFFJ80mo4eXkQ+5R0MfD5szzWXDCG7M2sJbZg8=", + "lastModified": 1730510022, + "narHash": "sha256-/FKsDxYEDNScuYuh9UjBwW8+f6WxjoRke8LvbF+ckjc=", "owner": "nix-community", "repo": "nur", - "rev": "73638442a5d792fd3d922d014c856e3970d185f3", + "rev": "41c8b0a22b37fb114413b504c74ae64065d2fb83", "type": "github" }, "original": { diff --git a/home.nix b/home.nix index 5d63048..e677893 100644 --- a/home.nix +++ b/home.nix @@ -81,7 +81,7 @@ rclone readline ripgrep - # ripgrep-all + ripgrep-all rustup sbt scala-cli @@ -292,6 +292,6 @@ # Neovim Configuration xdg.configFile."nvim".source = builtins.fetchGit { url = "https://code.softinio.com/softinio/nvim-config"; - rev = "2b0701c8a09c0c720faa89598725e8f7120ed676"; + rev = "902fbd939c74ece8fabe543e511af36471a1a197"; }; } diff --git a/programs/wezterm/wezterm.lua b/programs/wezterm/wezterm.lua index 8516402..8bb2853 100644 --- a/programs/wezterm/wezterm.lua +++ b/programs/wezterm/wezterm.lua @@ -1,6 +1,39 @@ local wezterm = require 'wezterm' local act = wezterm.action +local function is_vim(pane) + -- this is set by the plugin, and unset on ExitPre in Neovim + return pane:get_user_vars().IS_NVIM == 'true' +end + +local direction_keys = { + a = 'Left', + o = 'Down', + e = 'Up', + u = 'Right', +} + +local function split_nav(resize_or_move, key) + return { + key = key, + mods = resize_or_move == 'resize' and 'META' or 'CTRL', + action = wezterm.action_callback(function(win, pane) + if is_vim(pane) then + -- pass the keys through to vim/nvim + win:perform_action({ + SendKey = { key = key, mods = resize_or_move == 'resize' and 'META' or 'CTRL' }, + }, pane) + else + if resize_or_move == 'resize' then + win:perform_action({ AdjustPaneSize = { direction_keys[key], 3 } }, pane) + else + win:perform_action({ ActivatePaneDirection = direction_keys[key] }, pane) + end + end + end), + } +end + wezterm.on('update-right-status', function(window, pane) window:set_right_status(window:active_workspace()) end) @@ -10,6 +43,7 @@ return { check_for_updates = false, -- color_scheme = "Gruvbox Light"; color_scheme = 'tokyonight', + default_gui_startup_args = { 'connect', 'unix' }, font = wezterm.font 'SF Mono', font_size = 16, dpi = 144, @@ -26,11 +60,15 @@ return { remote_wezterm_path = '/run/current-system/sw/bin/wezterm', }, }, + unix_domains = { + { + name = 'unix', + }, + }, keys = { { key = '-', mods = 'LEADER', action = wezterm.action { SplitVertical = { domain = 'CurrentPaneDomain' } } }, { key = "'", mods = 'LEADER', action = wezterm.action { SplitHorizontal = { domain = 'CurrentPaneDomain' } } }, { key = 'k', mods = 'SUPER', action = act.TogglePaneZoomState }, - { key = 'c', mods = 'LEADER', action = wezterm.action { SpawnTab = 'CurrentPaneDomain' } }, { key = 'h', mods = 'LEADER', action = wezterm.action { ActivatePaneDirection = 'Left' } }, { key = 'j', mods = 'LEADER', action = wezterm.action { ActivatePaneDirection = 'Down' } }, { key = 'k', mods = 'LEADER', action = wezterm.action { ActivatePaneDirection = 'Up' } }, @@ -57,6 +95,50 @@ return { { key = 't', mods = 'SUPER', action = act.SpawnTab 'CurrentPaneDomain' }, { key = 'q', mods = 'SUPER', action = act.QuitApplication }, { key = 'i', mods = 'CTRL|SHIFT', action = act.SwitchToWorkspace }, + { + key = 'S', + mods = 'CTRL|SHIFT', + action = wezterm.action_callback(function(window, pane) + -- Here you can dynamically construct a longer list if needed + + local home = wezterm.home_dir + local workspaces = { + { id = home, label = 'Home' }, + { id = home .. '/Projects', label = 'My Projects' }, + { id = home .. '/OpenSource', label = 'Open Source Projects' }, + { id = home .. '/.config/nixpkgs', label = 'Nix Config' }, + { id = home .. '/Projects/scalanews', label = 'Scala News' }, + } + + window:perform_action( + act.InputSelector { + action = wezterm.action_callback(function(inner_window, inner_pane, id, label) + if not id and not label then + wezterm.log_info 'cancelled' + else + wezterm.log_info('id = ' .. id) + wezterm.log_info('label = ' .. label) + inner_window:perform_action( + act.SwitchToWorkspace { + name = label, + spawn = { + label = 'Workspace: ' .. label, + cwd = id, + }, + }, + inner_pane + ) + end + end), + title = 'Choose Workspace', + choices = workspaces, + fuzzy = true, + fuzzy_description = 'Fuzzy find and/or make a workspace', + }, + pane + ) + end), + }, { key = '9', mods = 'ALT', @@ -65,6 +147,16 @@ return { }, }, { key = 'Tab', mods = 'CTRL', action = wezterm.action.DisableDefaultAssignment }, + -- move between split panes + split_nav('move', 'a'), + split_nav('move', 'o'), + split_nav('move', 'e'), + split_nav('move', 'u'), + -- resize panes + split_nav('resize', 'a'), + split_nav('resize', 'o'), + split_nav('resize', 'e'), + split_nav('resize', 'u'), }, -- temp fix front_end = 'WebGpu',