feat: add Obsidian, WakaTime and Neovide clipboard keys #8

Merged
rootiest merged 1 commits from feat/obsidian-wakatime-neovide into main 2026-10-01 05:48:35 +00:00
5 changed files with 288 additions and 0 deletions

No files matched your search

+189
View File
@@ -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
# ──────────────────────────────────────────────────────────────
+6
View File
@@ -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)
+50
View File
@@ -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
+34
View File
@@ -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)
+9
View File
@@ -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"