From 730dd2396758d3f72dd1dfe26bd079a6edaa30d8 Mon Sep 17 00:00:00 2001 From: hektor Date: Sun, 26 Apr 2026 11:55:27 +0200 Subject: [PATCH] fix: centralize and nixifiy in 'zk' module --- dots/.bin/save-zk | 4 -- dots/.bin/setup-zk | 20 --------- dots/.config/nvim/after/plugin/wiki.vim.lua | 6 ++- dots/.config/nvim/lua/zk/init.lua | 9 ++-- dots/.config/nvim/lua/zk/utils.lua | 2 + home/hosts/andromache/default.nix | 2 + home/modules/zk/default.nix | 45 +++++++++++++++++++ home/modules/zk/scripts/save-zk.sh | 2 + home/modules/zk/scripts/setup-zk.sh | 13 ++++++ dots/.bin/zk => home/modules/zk/scripts/zk.sh | 12 ++--- 10 files changed, 76 insertions(+), 39 deletions(-) delete mode 100755 dots/.bin/save-zk delete mode 100755 dots/.bin/setup-zk create mode 100644 dots/.config/nvim/lua/zk/utils.lua create mode 100644 home/modules/zk/default.nix create mode 100644 home/modules/zk/scripts/save-zk.sh create mode 100644 home/modules/zk/scripts/setup-zk.sh rename dots/.bin/zk => home/modules/zk/scripts/zk.sh (57%) mode change 100755 => 100644 diff --git a/dots/.bin/save-zk b/dots/.bin/save-zk deleted file mode 100755 index 43517099..00000000 --- a/dots/.bin/save-zk +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash - -cd "$ZK_PATH" || echo "No zettelkasten directory found" -git a . && git commit -m "Update" && git push diff --git a/dots/.bin/setup-zk b/dots/.bin/setup-zk deleted file mode 100755 index 35a6df83..00000000 --- a/dots/.bin/setup-zk +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -if [ ! -d ~/.zk ]; then - echo "[zk] Setting up zettelkasten" - gh repo clone zk ~/.zk -else - echo "[zk] Zettelkasten already set up." -fi - -read -p "Would you like open your zettelkasten? [y/N] " -n 1 -r -echo - -if [[ $REPLY =~ ^[Yy]$ ]]; then - if [ -x "$(command -v zk)" ]; then - zk - else - echo "Error: 'zk' command not found or not executable" - exit 1 - fi -fi diff --git a/dots/.config/nvim/after/plugin/wiki.vim.lua b/dots/.config/nvim/after/plugin/wiki.vim.lua index 6a8492d0..559726c9 100644 --- a/dots/.config/nvim/after/plugin/wiki.vim.lua +++ b/dots/.config/nvim/after/plugin/wiki.vim.lua @@ -1,6 +1,8 @@ +require("zk.utils") + vim.cmd([[ " Change local buffer to directory of current file after the plugin has loaded -autocmd VimEnter * lcd %:p:h +execute 'autocmd BufEnter' g:zk_path . '/*.md' 'silent lcd %:p:h' " " Override wiki index mapping to also cd into the wiki nm ww (wiki-index) @@ -76,7 +78,7 @@ let g:wiki_templates = [ " let g:wiki_filetypes=['md'] -let g:wiki_root='~/.zk' +let g:wiki_root=g:zk_path let g:wiki_global_load=0 let g:wiki_link_creation = { \ 'md': { diff --git a/dots/.config/nvim/lua/zk/init.lua b/dots/.config/nvim/lua/zk/init.lua index bc810581..90f308e5 100644 --- a/dots/.config/nvim/lua/zk/init.lua +++ b/dots/.config/nvim/lua/zk/init.lua @@ -1,9 +1,10 @@ require("zk.cmp") +require("zk.utils") vim.cmd([[ let s:zk_preview_enabled = 0 let s:live_server_job = -1 -au BufEnter /home/h/.zk/*.md silent exe '!echo "%" > /home/h/.zk/current-zettel.txt' +execute 'au BufEnter' g:zk_path . '/*.md' 'silent exe "!echo %" ">" g:zk_path . "/current-zettel.txt"' function! ToggleZKPreview() if s:zk_preview_enabled == 1 let s:zk_preview_enabled = 0 @@ -11,10 +12,10 @@ function! ToggleZKPreview() au! ZKPreview else let s:zk_preview_enabled = 1 - let s:live_server_job = jobstart('live-server --watch=/home/h/.zk/current-zettel-content.html --open=current-zettel-content.html --port=8080') + let s:live_server_job = jobstart('live-server --watch=' . g:zk_path . '/current-zettel-content.html --open=current-zettel-content.html --port=8080') augroup ZKPreview - au BufEnter /home/h/.zk/*.md silent exe '!cat "%:r.html" > /home/h/.zk/current-zettel-content.html' - au BufWritePost /home/h/.zk/*.md silent exe '!make && cat "%:r.html" > /home/h/.zk/current-zettel-content.html' + execute 'au BufEnter' g:zk_path . '/*.md' 'silent exe "!cat %:r.html" ">" g:zk_path . "/current-zettel-content.html"' + execute 'au BufWritePost' g:zk_path . '/*.md' 'silent exe "!make && cat %:r.html" ">" g:zk_path . "/current-zettel-content.html"' augroup END endif endfunction diff --git a/dots/.config/nvim/lua/zk/utils.lua b/dots/.config/nvim/lua/zk/utils.lua new file mode 100644 index 00000000..01dc1a52 --- /dev/null +++ b/dots/.config/nvim/lua/zk/utils.lua @@ -0,0 +1,2 @@ +vim.g.zk_path = os.getenv("ZK_PATH") or (os.getenv("HOME") .. "/.zk") +return vim.g.zk_path diff --git a/home/hosts/andromache/default.nix b/home/hosts/andromache/default.nix index ebc9fddb..f6fb64b5 100644 --- a/home/hosts/andromache/default.nix +++ b/home/hosts/andromache/default.nix @@ -30,6 +30,7 @@ ../../modules/ssh ../../modules/taskwarrior ../../modules/terminal + ../../modules/zk ../../modules/torrenting ]; @@ -54,6 +55,7 @@ shell.bash.aliases.lang-js = true; shell.bash.addBinToPath = true; torrenting.enable = true; + zk.enable = true; programs = { home-manager.enable = true; diff --git a/home/modules/zk/default.nix b/home/modules/zk/default.nix new file mode 100644 index 00000000..7365fb6c --- /dev/null +++ b/home/modules/zk/default.nix @@ -0,0 +1,45 @@ +{ + config, + lib, + pkgs, + ... +}: + +let + cfg = config.zk; +in +{ + options.zk = { + enable = lib.mkEnableOption "zettelkasten"; + path = lib.mkOption { + type = lib.types.str; + default = config.home.homeDirectory + "/.zk"; + description = "Path to the zettelkasten directory"; + }; + }; + + config = lib.mkIf cfg.enable { + home = { + sessionVariables.ZK_PATH = cfg.path; + packages = [ + (pkgs.writeShellApplication { + name = "zk"; + runtimeInputs = with pkgs; [ tmux ]; + text = builtins.readFile ./scripts/zk.sh; + }) + + (pkgs.writeShellApplication { + name = "save-zk"; + runtimeInputs = with pkgs; [ git ]; + text = builtins.readFile ./scripts/save-zk.sh; + }) + + (pkgs.writeShellApplication { + name = "setup-zk"; + runtimeInputs = with pkgs; [ gh ]; + text = builtins.readFile ./scripts/setup-zk.sh; + }) + ]; + }; + }; +} diff --git a/home/modules/zk/scripts/save-zk.sh b/home/modules/zk/scripts/save-zk.sh new file mode 100644 index 00000000..a85c23ee --- /dev/null +++ b/home/modules/zk/scripts/save-zk.sh @@ -0,0 +1,2 @@ +cd "$ZK_PATH" || { echo "No zettelkasten directory found"; exit 1; } +git add . && git commit -m "Update" && git push diff --git a/home/modules/zk/scripts/setup-zk.sh b/home/modules/zk/scripts/setup-zk.sh new file mode 100644 index 00000000..32ebb458 --- /dev/null +++ b/home/modules/zk/scripts/setup-zk.sh @@ -0,0 +1,13 @@ +if [ ! -d "$ZK_PATH" ]; then + echo "[zk] Setting up zettelkasten" + gh repo clone zk "$ZK_PATH" +else + echo "[zk] Zettelkasten already set up." +fi + +read -p "Would you like open your zettelkasten? [y/N] " -n 1 -r +echo + +if [[ $REPLY =~ ^[Yy]$ ]]; then + $EDITOR "$ZK_PATH" +fi diff --git a/dots/.bin/zk b/home/modules/zk/scripts/zk.sh old mode 100755 new mode 100644 similarity index 57% rename from dots/.bin/zk rename to home/modules/zk/scripts/zk.sh index b52c8402..f2c34122 --- a/dots/.bin/zk +++ b/home/modules/zk/scripts/zk.sh @@ -1,8 +1,6 @@ -#!/usr/bin/env bash - current_zettel_path="$ZK_PATH/$(cat "$ZK_PATH/current-zettel.txt")" -if [ "$TERM_PROGRAM" = tmux ]; then +if [ -n "${TMUX:-}" ]; then cd "$ZK_PATH" && $EDITOR "$current_zettel_path" else echo 'Not in tmux' @@ -12,13 +10,9 @@ else read -r -p 'Enter your choice: ' choice case $choice in 1) - # Check if a tmux session is running with a window named zk - if tmux list-windows -F '#{window_name}' | grep -q zk; then - # Attach to the session containing the 'zk' window - session="$(tmux list-windows -F '#{window_name} #{session_name}' | grep zk | head -n 1 | awk '{ print $2 }')" - tmux attach -t "$session" + if tmux has-session -t zk 2>/dev/null; then + tmux attach -t zk else - # Create session with a window named 'zk' and start nvim tmux new-session -s zk -n zk -d tmux send-keys -t zk:zk "cd $ZK_PATH && $EDITOR $current_zettel_path" Enter tmux attach -t zk