feat: add Obsidian, WakaTime and Neovide clipboard keys #8
No files matched your search
+189
@@ -188,3 +188,192 @@ docs/plans
|
|||||||
docs/specs
|
docs/specs
|
||||||
docs/devlogs
|
docs/devlogs
|
||||||
# ────────────────────────────────────────────────────────
|
# ────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
# id: gitig-boilerplate-92f3a89d2c63f6a381be8bebd1862de5
|
||||||
|
# ╭──────────────────────────────────────────────────────────╮
|
||||||
|
# │ GitIgnore Boilerplate Template │
|
||||||
|
# ╰──────────────────────────────────────────────────────────╯
|
||||||
|
#
|
||||||
|
# ──────────────────── OS-Generated Files ────────────────────
|
||||||
|
# automatic backup files created by some editors (e.g., Vim, Emacs)
|
||||||
|
*~
|
||||||
|
|
||||||
|
# temporary files created if a process still has a handle to a deleted file
|
||||||
|
.fuse_hidden*
|
||||||
|
|
||||||
|
# KDE directory preferences
|
||||||
|
.directory
|
||||||
|
|
||||||
|
# MacOS junk
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
|
# Linux trash folder which might appear on any partition or disk
|
||||||
|
.Trash-*
|
||||||
|
|
||||||
|
# files created when an open file is removed but is still being accessed
|
||||||
|
.nfs*
|
||||||
|
|
||||||
|
# ─────────────────── Debug/Temporary/Testing ────────────────
|
||||||
|
# Matches OLD / .OLD
|
||||||
|
[Oo][Ll][Dd]/
|
||||||
|
.[Oo][Ll][Dd]/
|
||||||
|
|
||||||
|
# Matches DISABLE / .DISABLE
|
||||||
|
[Dd][Ii][Ss][Aa][Bb][Ll][Ee]/
|
||||||
|
.[Dd][Ii][Ss][Aa][Bb][Ll][Ee]/
|
||||||
|
|
||||||
|
# Matches DISABLED / .DISABLED
|
||||||
|
[Dd][Ii][Ss][Aa][Bb][Ll][Ee][Dd]/
|
||||||
|
.[Dd][Ii][Ss][Aa][Bb][Ll][Ee][Dd]/
|
||||||
|
|
||||||
|
# Matches DEBUG / .DEBUG
|
||||||
|
[Dd][Ee][Bb][Uu][Gg]/
|
||||||
|
.[Dd][Ee][Bb][Uu][Gg]/
|
||||||
|
|
||||||
|
# Matches TMP / .TMP
|
||||||
|
[Tt][Mm][Pp]/
|
||||||
|
.[Tt][Mm][Pp]/
|
||||||
|
|
||||||
|
# Matches TEMP / .TEMP
|
||||||
|
[Tt][Ee][Mm][Pp]/
|
||||||
|
.[Tt][Ee][Mm][Pp]/
|
||||||
|
|
||||||
|
# Matches TEMPORARY / .TEMPORARY
|
||||||
|
[Tt][Ee][Mm][Pp][Oo][Rr][Aa][Rr][Yy]/
|
||||||
|
.[Tt][Ee][Mm][Pp][Oo][Rr][Aa][Rr][Yy]/
|
||||||
|
|
||||||
|
# Matches TESTING / .TESTING
|
||||||
|
[Tt][Ee][Ss][Tt][Ii][Nn][Gg]/
|
||||||
|
.[Tt][Ee][Ss][Tt][Ii][Nn][Gg]/
|
||||||
|
|
||||||
|
# ─────────────────── AI Sessions and Rules ──────────────────
|
||||||
|
# Matches CLAUDE.md, .claud*, etc.
|
||||||
|
[Cc][Ll][Aa][Uu][Dd][Ee].[Mm][Dd]
|
||||||
|
.[Cc][Ll][Aa][Uu][Dd]*
|
||||||
|
|
||||||
|
# Matches GEMINI.md, .gemin*, etc.
|
||||||
|
[Gg][Ee][Mm][Ii][Nn][Ii].[Mm][Dd]
|
||||||
|
.[Gg][Ee][Mm][Ii][Nn]*
|
||||||
|
|
||||||
|
# Matches ANTIGRAVITY.md, .antigrav*, etc.
|
||||||
|
[Aa][nN][Tt][Ii][Gg][Rr][Aa][Vv][Ii][Tt][Yy].[Mm][Dd]
|
||||||
|
.[Aa][Nn][Tt][Ii][Gg][Rr][Aa][Vv]*
|
||||||
|
|
||||||
|
# Matches AGENTS.md, .remember, etc.
|
||||||
|
[Aa][Gg][Ee][Nn][Tt][Ss].[Mm][Dd]
|
||||||
|
.[Rr][Ee][Mm][Ee][Mm][Bb][Ee][Rr]
|
||||||
|
|
||||||
|
# ──────────────────── Planning Artifacts ───────────────────
|
||||||
|
# Catalog files generated by pre-implementation analysis passes
|
||||||
|
.superpowers
|
||||||
|
docs/superpowers
|
||||||
|
docs/specs
|
||||||
|
|
||||||
|
# ──────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
# id: gi-patterns-54143085ec229f3cf907a5aa2a8fcade
|
||||||
|
# Created by https://www.toptal.com/developers/gitignore/api/linux
|
||||||
|
# Edit at https://www.toptal.com/developers/gitignore?templates=linux
|
||||||
|
|
||||||
|
### Linux ###
|
||||||
|
*~
|
||||||
|
|
||||||
|
# temporary files which can be created if a process still has a handle open of a deleted file
|
||||||
|
.fuse_hidden*
|
||||||
|
|
||||||
|
# KDE directory preferences
|
||||||
|
.directory
|
||||||
|
|
||||||
|
# Linux trash folder which might appear on any partition or disk
|
||||||
|
.Trash-*
|
||||||
|
|
||||||
|
# .nfs files are created when an open file is removed but is still being accessed
|
||||||
|
.nfs*
|
||||||
|
|
||||||
|
# End of https://www.toptal.com/developers/gitignore/api/linux
|
||||||
|
|
||||||
|
# id: gitig-boilerplate-e76d1ca7170bfb8385be6293da3f57bc
|
||||||
|
# ╭──────────────────────────────────────────────────────────╮
|
||||||
|
# │ GitIgnore Boilerplate Template │
|
||||||
|
# ╰──────────────────────────────────────────────────────────╯
|
||||||
|
#
|
||||||
|
# ──────────────────── OS-Generated Files ────────────────────
|
||||||
|
# automatic backup files created by some editors (e.g., Vim, Emacs)
|
||||||
|
*~
|
||||||
|
|
||||||
|
# temporary files created if a process still has a handle to a deleted file
|
||||||
|
.fuse_hidden*
|
||||||
|
|
||||||
|
# KDE directory preferences
|
||||||
|
.directory
|
||||||
|
|
||||||
|
# MacOS junk
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
|
# Linux trash folder which might appear on any partition or disk
|
||||||
|
.Trash-*
|
||||||
|
|
||||||
|
# files created when an open file is removed but is still being accessed
|
||||||
|
.nfs*
|
||||||
|
|
||||||
|
# ─────────────────── Debug/Temporary/Testing ────────────────
|
||||||
|
# Matches OLD / .OLD
|
||||||
|
[Oo][Ll][Dd]/
|
||||||
|
.[Oo][Ll][Dd]/
|
||||||
|
|
||||||
|
# Matches DISABLE / .DISABLE
|
||||||
|
[Dd][Ii][Ss][Aa][Bb][Ll][Ee]/
|
||||||
|
.[Dd][Ii][Ss][Aa][Bb][Ll][Ee]/
|
||||||
|
|
||||||
|
# Matches DISABLED / .DISABLED
|
||||||
|
[Dd][Ii][Ss][Aa][Bb][Ll][Ee][Dd]/
|
||||||
|
.[Dd][Ii][Ss][Aa][Bb][Ll][Ee][Dd]/
|
||||||
|
|
||||||
|
# Matches DEBUG / .DEBUG
|
||||||
|
[Dd][Ee][Bb][Uu][Gg]/
|
||||||
|
.[Dd][Ee][Bb][Uu][Gg]/
|
||||||
|
|
||||||
|
# Matches TMP / .TMP
|
||||||
|
[Tt][Mm][Pp]/
|
||||||
|
.[Tt][Mm][Pp]/
|
||||||
|
|
||||||
|
# Matches TEMP / .TEMP
|
||||||
|
[Tt][Ee][Mm][Pp]/
|
||||||
|
.[Tt][Ee][Mm][Pp]/
|
||||||
|
|
||||||
|
# Matches TEMPORARY / .TEMPORARY
|
||||||
|
[Tt][Ee][Mm][Pp][Oo][Rr][Aa][Rr][Yy]/
|
||||||
|
.[Tt][Ee][Mm][Pp][Oo][Rr][Aa][Rr][Yy]/
|
||||||
|
|
||||||
|
# Matches TESTING / .TESTING
|
||||||
|
[Tt][Ee][Ss][Tt][Ii][Nn][Gg]/
|
||||||
|
.[Tt][Ee][Ss][Tt][Ii][Nn][Gg]/
|
||||||
|
|
||||||
|
# ─────────────────── AI Sessions and Rules ──────────────────
|
||||||
|
# Matches CLAUDE.md, .claud*, etc.
|
||||||
|
[Cc][Ll][Aa][Uu][Dd][Ee].[Mm][Dd]
|
||||||
|
.[Cc][Ll][Aa][Uu][Dd]*
|
||||||
|
|
||||||
|
# Matches GEMINI.md, .gemin*, etc.
|
||||||
|
[Gg][Ee][Mm][Ii][Nn][Ii].[Mm][Dd]
|
||||||
|
.[Gg][Ee][Mm][Ii][Nn]*
|
||||||
|
|
||||||
|
# Matches ANTIGRAVITY.md, .antigrav*, etc.
|
||||||
|
[Aa][nN][Tt][Ii][Gg][Rr][Aa][Vv][Ii][Tt][Yy].[Mm][Dd]
|
||||||
|
.[Aa][Nn][Tt][Ii][Gg][Rr][Aa][Vv]*
|
||||||
|
|
||||||
|
# Matches AGENTS.md, .agents, .remember, etc.
|
||||||
|
[Aa][Gg][Ee][Nn][Tt][Ss].[Mm][Dd]
|
||||||
|
.[Aa][Gg][Ee][Nn][Tt][Ss]
|
||||||
|
.[Rr][Ee][Mm][Ee][Mm][Bb][Ee][Rr]
|
||||||
|
|
||||||
|
# ──────────────────── Planning Artifacts ───────────────────
|
||||||
|
# Catalog files generated by pre-implementation analysis passes
|
||||||
|
.superpowers
|
||||||
|
docs/superpowers
|
||||||
|
docs/specs
|
||||||
|
docs/devlogs
|
||||||
|
|
||||||
|
# ──────────────────────────────────────────────────────────────
|
||||||
@@ -53,6 +53,7 @@ The configuration is strictly modular:
|
|||||||
- **Haunt.nvim**: In-buffer annotation and bookmark manager. Integrates with the Snacks picker for browsing bookmarks and exposes `haunt_all` / `haunt_buffer` prompt contexts to Sidekick AI sessions.
|
- **Haunt.nvim**: In-buffer annotation and bookmark manager. Integrates with the Snacks picker for browsing bookmarks and exposes `haunt_all` / `haunt_buffer` prompt contexts to Sidekick AI sessions.
|
||||||
- **Zen Mode**: Distraction-free editing.
|
- **Zen Mode**: Distraction-free editing.
|
||||||
- **Qalc**: Inline calculator via `qalculate`.
|
- **Qalc**: Inline calculator via `qalculate`.
|
||||||
|
- **Obsidian.nvim**: Obsidian vault integration for note-taking and knowledge management, with `notebook` (`~/Documents/Notebook`) and `notes` (`~/Documents/Notes`) workspaces.
|
||||||
|
|
||||||
### LSP & Completion
|
### LSP & Completion
|
||||||
- **Blink.cmp** + **blink.lib**: High-performance Rust-based completion. Auto-detects binary across install layouts; falls back gracefully if unavailable. Rebuilds automatically on `PackChanged`.
|
- **Blink.cmp** + **blink.lib**: High-performance Rust-based completion. Auto-detects binary across install layouts; falls back gracefully if unavailable. Rebuilds automatically on `PackChanged`.
|
||||||
@@ -65,6 +66,10 @@ The configuration is strictly modular:
|
|||||||
|
|
||||||
### Terminal
|
### Terminal
|
||||||
- **Kitty Scrollback**: Browse Kitty terminal scrollback buffer inside Neovim.
|
- **Kitty Scrollback**: Browse Kitty terminal scrollback buffer inside Neovim.
|
||||||
|
- **Neovide**: When running under the Neovide GUI, adds terminal-style system-clipboard keys: `Ctrl+Shift+V` paste (all modes; in Normal mode an empty line is replaced and the cursor lands after the paste), `Ctrl+Shift+C` copy and `Ctrl+Shift+X` cut (selection in Visual mode, current line in Normal mode).
|
||||||
|
|
||||||
|
### Tracking
|
||||||
|
- **Vim-wakatime**: Coding-time tracking. Loaded eagerly so it sees `VimEnter`/`BufEnter`; server and API key come from `~/.wakatime.cfg`. Reports as `neovim-wakatime` so Wakapi attributes time to Neovim instead of "Unknown".
|
||||||
|
|
||||||
## 🛠️ System Dependencies
|
## 🛠️ System Dependencies
|
||||||
|
|
||||||
@@ -78,6 +83,7 @@ To ensure all features (pickers, formatters, and LSPs) work correctly, the follo
|
|||||||
- `lazygit` (Git TUI)
|
- `lazygit` (Git TUI)
|
||||||
- `gh` (GitHub CLI integration)
|
- `gh` (GitHub CLI integration)
|
||||||
- `xclip` / `xsel` (X11) or `wl-copy` (Wayland) for clipboard sync.
|
- `xclip` / `xsel` (X11) or `wl-copy` (Wayland) for clipboard sync.
|
||||||
|
- `wakatime-cli` (Optional, installed automatically for Wakatime tracking)
|
||||||
|
|
||||||
### Runtime Environments
|
### Runtime Environments
|
||||||
- `Node.js` & `npm` (Copilot and various LSPs)
|
- `Node.js` & `npm` (Copilot and various LSPs)
|
||||||
|
|||||||
@@ -201,3 +201,53 @@ vim.api.nvim_create_autocmd("VimLeave", {
|
|||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- ╭─────────────────────────────────────────────────────────╮
|
||||||
|
-- │ Neovide Configuration │
|
||||||
|
-- ╰─────────────────────────────────────────────────────────╯
|
||||||
|
|
||||||
|
if vim.g.neovide then
|
||||||
|
-- ==========================================
|
||||||
|
-- Paste (Ctrl+Shift+V)
|
||||||
|
-- ==========================================
|
||||||
|
-- Normal mode: Smart paste system clipboard (replaces empty line and moves cursor to end)
|
||||||
|
vim.keymap.set('n', '<C-S-v>', function()
|
||||||
|
local cur_line = vim.api.nvim_get_current_line()
|
||||||
|
|
||||||
|
if cur_line == '' then
|
||||||
|
local lines = vim.fn.getreg('+', 1, true)
|
||||||
|
if #lines > 0 then
|
||||||
|
local r = vim.api.nvim_win_get_cursor(0)[1]
|
||||||
|
vim.api.nvim_buf_set_lines(0, r - 1, r, false, lines)
|
||||||
|
|
||||||
|
-- Calculate position at the end of the newly pasted text
|
||||||
|
local target_row = r + #lines - 1
|
||||||
|
local target_col = math.max(0, #lines[#lines] - 1)
|
||||||
|
vim.api.nvim_win_set_cursor(0, { target_row, target_col })
|
||||||
|
end
|
||||||
|
else
|
||||||
|
-- "]+p puts and positions cursor after the pasted text
|
||||||
|
vim.cmd('normal! "+]p')
|
||||||
|
end
|
||||||
|
end, { desc = 'Paste system clipboard' })
|
||||||
|
vim.keymap.set('i', '<C-S-v>', '<C-r>+', { desc = 'Paste system clipboard' })
|
||||||
|
vim.keymap.set('c', '<C-S-v>', '<C-r>+', { desc = 'Paste system clipboard' })
|
||||||
|
vim.keymap.set('v', '<C-S-v>', '"+p', { desc = 'Paste system clipboard' })
|
||||||
|
vim.keymap.set('t', '<C-S-v>', [[<C-\><C-n>"+pi]], { desc = 'Paste system clipboard' })
|
||||||
|
|
||||||
|
-- ==========================================
|
||||||
|
-- Copy (Ctrl+Shift+C)
|
||||||
|
-- ==========================================
|
||||||
|
-- Visual mode: Yank selected text directly to system clipboard
|
||||||
|
vim.keymap.set('v', '<C-S-c>', '"+y', { desc = 'Copy to system clipboard' })
|
||||||
|
-- Normal mode: Yank the current line directly to system clipboard
|
||||||
|
vim.keymap.set('n', '<C-S-c>', '"+yy', { desc = 'Copy line to system clipboard' })
|
||||||
|
|
||||||
|
-- ==========================================
|
||||||
|
-- Cut (Ctrl+Shift+X)
|
||||||
|
-- ==========================================
|
||||||
|
-- Visual mode: Delete selected text and store in system clipboard
|
||||||
|
vim.keymap.set('v', '<C-S-x>', '"+d', { desc = 'Cut to system clipboard' })
|
||||||
|
-- Normal mode: Delete the current line and store in system clipboard
|
||||||
|
vim.keymap.set('n', '<C-S-x>', '"+dd', { desc = 'Cut line to system clipboard' })
|
||||||
|
end
|
||||||
@@ -124,6 +124,19 @@ Config.plugins.persistence = {
|
|||||||
}
|
}
|
||||||
require("persistence").setup(Config.plugins.persistence)
|
require("persistence").setup(Config.plugins.persistence)
|
||||||
|
|
||||||
|
-- Vim-wakatime
|
||||||
|
-- Eagerly loaded: it hooks VimEnter/BufEnter, which a deferred load would miss.
|
||||||
|
-- Server/api_key come from ~/.wakatime.cfg, shared with other WakaTime clients.
|
||||||
|
vim.pack.add({ { src = "https://github.com/wakatime/vim-wakatime", name = "vim-wakatime" } })
|
||||||
|
|
||||||
|
-- Wakatime Config
|
||||||
|
-- Wakapi derives the editor from a `<editor>-wakatime/` user-agent token; the
|
||||||
|
-- default `wakatime.nvim` has none, so time lands under "Unknown".
|
||||||
|
Config.plugins.wakatime = {
|
||||||
|
plugin_name = "neovim-wakatime",
|
||||||
|
}
|
||||||
|
require("wakatime").setup(Config.plugins.wakatime)
|
||||||
|
|
||||||
-- Lazy-loaded Plugins
|
-- Lazy-loaded Plugins
|
||||||
local lazyload = require("lazyload")
|
local lazyload = require("lazyload")
|
||||||
|
|
||||||
@@ -596,4 +609,25 @@ lazyload.on_vim_enter(function()
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
require("sidekick").setup(Config.plugins.sidekick)
|
require("sidekick").setup(Config.plugins.sidekick)
|
||||||
|
|
||||||
|
vim.pack.add {
|
||||||
|
{
|
||||||
|
src = "https://github.com/obsidian-nvim/obsidian.nvim",
|
||||||
|
version = vim.version.range "*", -- use latest release, remove to use latest commit
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
require("obsidian").setup {
|
||||||
|
legacy_commands = false, -- this will be removed in 4.0.0
|
||||||
|
workspaces = {
|
||||||
|
{
|
||||||
|
name = "notebook",
|
||||||
|
path = "~/Documents/Notebook",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name = "notes",
|
||||||
|
path = "~/Documents/Notes",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
end)
|
end)
|
||||||
@@ -124,6 +124,11 @@
|
|||||||
"rev": "4fc505ac7bd7692824a142e96e5f529c133862f8",
|
"rev": "4fc505ac7bd7692824a142e96e5f529c133862f8",
|
||||||
"src": "https://github.com/nvim-tree/nvim-web-devicons"
|
"src": "https://github.com/nvim-tree/nvim-web-devicons"
|
||||||
},
|
},
|
||||||
|
"obsidian.nvim": {
|
||||||
|
"rev": "7a2b7caf41de196de66f27c1969d0d429810621a",
|
||||||
|
"src": "https://github.com/obsidian-nvim/obsidian.nvim",
|
||||||
|
"version": ">=0.0.0"
|
||||||
|
},
|
||||||
"persistence": {
|
"persistence": {
|
||||||
"rev": "b20b2a7887bd39c1a356980b45e03250f3dce49c",
|
"rev": "b20b2a7887bd39c1a356980b45e03250f3dce49c",
|
||||||
"src": "https://github.com/folke/persistence.nvim"
|
"src": "https://github.com/folke/persistence.nvim"
|
||||||
@@ -144,6 +149,10 @@
|
|||||||
"rev": "6fa6b57cda8459e1e4b2ca34df702f55242f4e4d",
|
"rev": "6fa6b57cda8459e1e4b2ca34df702f55242f4e4d",
|
||||||
"src": "https://github.com/mbbill/undotree"
|
"src": "https://github.com/mbbill/undotree"
|
||||||
},
|
},
|
||||||
|
"vim-wakatime": {
|
||||||
|
"rev": "9f8a1d3b9c6f3a948988a0896b3227c1e1f74a58",
|
||||||
|
"src": "https://github.com/wakatime/vim-wakatime"
|
||||||
|
},
|
||||||
"which-key": {
|
"which-key": {
|
||||||
"rev": "3aab2147e74890957785941f0c1ad87d0a44c15a",
|
"rev": "3aab2147e74890957785941f0c1ad87d0a44c15a",
|
||||||
"src": "https://github.com/folke/which-key.nvim"
|
"src": "https://github.com/folke/which-key.nvim"
|
||||||
|
|||||||
Reference in new issue
Block a user