feat: add Obsidian, WakaTime and Neovide clipboard keys #8
No files matched your search
+189
@@ -188,3 +188,192 @@ docs/plans
|
||||
docs/specs
|
||||
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.
|
||||
- **Zen Mode**: Distraction-free editing.
|
||||
- **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
|
||||
- **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
|
||||
- **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
|
||||
|
||||
@@ -78,6 +83,7 @@ To ensure all features (pickers, formatters, and LSPs) work correctly, the follo
|
||||
- `lazygit` (Git TUI)
|
||||
- `gh` (GitHub CLI integration)
|
||||
- `xclip` / `xsel` (X11) or `wl-copy` (Wayland) for clipboard sync.
|
||||
- `wakatime-cli` (Optional, installed automatically for Wakatime tracking)
|
||||
|
||||
### Runtime Environments
|
||||
- `Node.js` & `npm` (Copilot and various LSPs)
|
||||
|
||||
@@ -201,3 +201,53 @@ vim.api.nvim_create_autocmd("VimLeave", {
|
||||
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)
|
||||
|
||||
-- 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
|
||||
local lazyload = require("lazyload")
|
||||
|
||||
@@ -596,4 +609,25 @@ lazyload.on_vim_enter(function()
|
||||
},
|
||||
}
|
||||
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)
|
||||
@@ -124,6 +124,11 @@
|
||||
"rev": "4fc505ac7bd7692824a142e96e5f529c133862f8",
|
||||
"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": {
|
||||
"rev": "b20b2a7887bd39c1a356980b45e03250f3dce49c",
|
||||
"src": "https://github.com/folke/persistence.nvim"
|
||||
@@ -144,6 +149,10 @@
|
||||
"rev": "6fa6b57cda8459e1e4b2ca34df702f55242f4e4d",
|
||||
"src": "https://github.com/mbbill/undotree"
|
||||
},
|
||||
"vim-wakatime": {
|
||||
"rev": "9f8a1d3b9c6f3a948988a0896b3227c1e1f74a58",
|
||||
"src": "https://github.com/wakatime/vim-wakatime"
|
||||
},
|
||||
"which-key": {
|
||||
"rev": "3aab2147e74890957785941f0c1ad87d0a44c15a",
|
||||
"src": "https://github.com/folke/which-key.nvim"
|
||||
|
||||
Reference in new issue
Block a user