-- nixos-config - My current NixOS configuration -- -- Copyright (C) 2025 Benedikt Peetz -- SPDX-License-Identifier: GPL-3.0-or-later -- -- This file is part of my nixos-config. -- -- You should have received a copy of the License along with this program. -- If not, see . local flatten = require("flatten") ---Types: -- -- Passed to callbacks that handle opening files ---@alias BufInfo { fname: string, bufnr: buffer } -- -- Needed aliases ---@alias buffer integer: Buffer id ---@alias window integer: Window id -- -- The first argument is a list of BufInfo tables representing the newly opened files. -- The third argument is a single BufInfo table, only provided when a buffer is created from stdin. -- -- IMPORTANT: For `block_for` to work, you need to return a buffer number OR a buffer number and a window number. -- The `winnr` return value is not required, `vim.fn.bufwinid(bufnr)` is used if it is not provided. -- The `filetype` of this buffer will determine whether block should happen or not. -- ---@alias OpenHandler fun(files: BufInfo[], argv: string[], stdin_buf: BufInfo, guest_cwd: string):window, buffer -- require("flatten").setup({ hooks = { ---Called to determine if a nested session should wait for the host to close the file. ---param argv: a list of all the arguments in the nested session ---@type fun(argv: table): boolean should_block = flatten.hooks.should_block; ---If this returns true, the nested session will be opened. ---If false, default behavior is used, and ---config.nest_if_no_args is respected. ---@type fun(host: channel):boolean should_nest = flatten.hooks.should_nest; ---Called before a nested session is opened. pre_open = flatten.hooks.pre_open; ---Called after a nested session is opened. ---@param bufnr buffer ---@param winnr window ---@param filetype string ---@param is_blocking boolean ---@param is_diff boolean post_open = flatten.hooks.post_open; ---Called when a nested session is done waiting for the host. ---@param filetype string block_end = flatten.hooks.block_end; no_files = flatten.hooks.no_files; guest_data = flatten.hooks.guest_data; -- Override this function to use a different socket to connect to the host -- On the host side this can return nil or the socket address. -- On the guest side this should return the socket address -- or a non-zero channel id from `sockconnect` -- flatten.nvim will detect if the address refers to this instance of nvim, to determine if this is a host or a guest pipe_path = flatten.hooks.pipe_path; }; -- dictionary of filetypes that should be blocking block_for = { gitcommit = true; gitrebase = true; }; -- Command passthrough disable_cmd_passthrough = false; -- Allow a nested session to open if Neovim is opened without arguments nest_if_no_args = false; nest_if_cmds = false; -- Window options window = { -- Options: -- current -> open in current window (default) -- alternate -> open in alternate window (recommended) -- tab -> open in new tab -- split -> open in split -- vsplit -> open in vsplit -- smart -> smart open (avoids special buffers) -- OpenHandler -> allows you to handle file opening yourself (see Types) -- -- TODO: Open gitcommit filetypes in the current buffer, everything else in a new tab <2023-08-29> open = "split"; -- Options: -- vsplit -> opens files in diff vsplits -- split -> opens files in diff splits -- tab_vsplit -> creates a new tabpage, and opens diff vsplits -- tab_split -> creates a new tabpage, and opens diff splits -- OpenHandler -> allows you to handle file opening yourself (see Types) diff = "tab_vsplit"; -- Affects which file gets focused when opening multiple at once -- Options: -- "first" -> open first file of new files (default) -- "last" -> open last file of new files focus = "first"; }; -- The `default_pipe_path` will treat the first nvim instance within a single kitty/wezterm session as the host -- You can configure this behaviour using the following: integrations = { kitty = false; -- Flatten all instance in the current Kitty session wezterm = false; -- Flatten all instance in the current Wezterm session }; })