load packages only if installed

This commit is contained in:
Daniel Winkler 2026-05-21 20:04:45 +10:00
commit d23c7f6f51
4 changed files with 92 additions and 82 deletions

View file

@ -39,10 +39,8 @@
wrappers, wrappers,
... ...
} @ inputs: let } @ inputs: let
mkWrapperConfig = pkgs: let mkWrapperConfig = pkgs: {
def = pkgs.lib.mkDefault; cats = {
in {
cats = pkgs.lib.mapAttrs (_: v: def v) {
clickhouse = false; clickhouse = false;
gitPlugins = true; gitPlugins = true;
julia = false; julia = false;
@ -55,22 +53,12 @@
}; };
settings = { settings = {
lang_packages = { lang_packages = {
python = def (with pkgs.python3Packages; [ python = [];
duckdb r = [];
polars julia = [];
]);
r = def ((with pkgs.rpkgs.rPackages; [
arrow
broom
data_table
janitor
languageserver
styler
]) ++ [ pkgs.nvimcom ]);
julia = def ["DataFramesMeta" "QuackIO"];
}; };
}; };
binName = def "vv"; binName = "vv";
}; };
wrapperSettings = pkgs: let wrapperSettings = pkgs: let
@ -78,7 +66,7 @@
in in
wrapper.config.wrap { wrapper.config.wrap {
inherit pkgs; inherit pkgs;
inherit (cfg) cats settings binName; inherit (cfg) settings binName;
}; };
systems = [ systems = [
@ -135,14 +123,29 @@
devShells = forAllSystems ( devShells = forAllSystems (
system: let system: let
pkgs = mkPkgs system; pkgs = mkPkgs system;
cfg = mkWrapperConfig pkgs;
nvimPkg = wrapperSettings pkgs; nvimPkg = wrapperSettings pkgs;
pythonPkgs = with pkgs.python3Packages; [
duckdb
polars
];
rPkgs = (with pkgs.rpkgs.rPackages; [
arrow
broom
data_table
janitor
languageserver
styler
]) ++ [ pkgs.nvimcom ];
juliaPkgs = ["DataFramesMeta" "QuackIO"];
pythonPackages = let pythonPackages = let
python_packages_fn = python_packages_fn =
if pkgs ? basePythonPackages if pkgs ? basePythonPackages
then ps: pkgs.basePythonPackages ps ++ cfg.settings.lang_packages.python then ps: pkgs.basePythonPackages ps ++ pythonPkgs
else _: cfg.settings.lang_packages.python; else _: pythonPkgs;
in in
with pkgs; [ with pkgs; [
(python3.withPackages python_packages_fn) (python3.withPackages python_packages_fn)
@ -153,7 +156,7 @@
]; ];
rPackages = let rPackages = let
r_packages = (pkgs.baseRPackages or []) ++ cfg.settings.lang_packages.r; r_packages = (pkgs.baseRPackages or []) ++ rPkgs;
in in
with pkgs; [ with pkgs; [
(rWrapper.override {packages = r_packages;}) (rWrapper.override {packages = r_packages;})
@ -167,7 +170,7 @@
]; ];
juliaPackages = let juliaPackages = let
julia_with_packages = pkgs.julia-bin.withPackages cfg.settings.lang_packages.julia; julia_with_packages = pkgs.julia-bin.withPackages juliaPkgs;
in [julia_with_packages]; in [julia_with_packages];
markdownPackages = with pkgs; [ markdownPackages = with pkgs; [

View file

@ -1,32 +1,35 @@
-- Add the key mappings only for Markdown files in a zk notebook. -- Add the key mappings only for Markdown files in a zk notebook.
if require("zk.util").notebook_root(vim.fn.expand('%:p')) ~= nil then local nix = require("config.nix")
local map = vim.keymap.set if nix.get_cat("markdown", false) then
-- Open the link under the caret. if require("zk.util").notebook_root(vim.fn.expand('%:p')) ~= nil then
map("n", "<CR>", "<Cmd>lua vim.lsp.buf.definition()<CR>", { noremap = true, silent = false, buffer = true }) local map = vim.keymap.set
-- Open the link under the caret.
map("n", "<CR>", "<Cmd>lua vim.lsp.buf.definition()<CR>", { noremap = true, silent = false, buffer = true })
-- Create a new note after asking for its title. -- Create a new note after asking for its title.
-- This overrides the global `<leader>zn` mapping to create the note in the same directory as the current buffer. -- This overrides the global `<leader>zn` mapping to create the note in the same directory as the current buffer.
map("n", "<leader>zhn", "<Cmd>ZkNew { dir = vim.fn.expand('%:p:h'), title = vim.fn.input('Title: ') }<CR>", map("n", "<leader>zhn", "<Cmd>ZkNew { dir = vim.fn.expand('%:p:h'), title = vim.fn.input('Title: ') }<CR>",
{ noremap = true, silent = false, buffer = true, desc = "Note (here)" }) { noremap = true, silent = false, buffer = true, desc = "Note (here)" })
-- Create a new note in the same directory as the current buffer, using the current selection for title. -- Create a new note in the same directory as the current buffer, using the current selection for title.
map("v", "<leader>zhnt", ":'<,'>ZkNewFromTitleSelection { dir = vim.fn.expand('%:p:h') }<CR>", map("v", "<leader>zhnt", ":'<,'>ZkNewFromTitleSelection { dir = vim.fn.expand('%:p:h') }<CR>",
{ noremap = true, silent = false, buffer = true, desc = "Note from selection (title)" }) { noremap = true, silent = false, buffer = true, desc = "Note from selection (title)" })
-- Create a new note in the same directory as the current buffer, using the current selection for note content and asking for its title. -- Create a new note in the same directory as the current buffer, using the current selection for note content and asking for its title.
map("v", "<leader>zhnc", map("v", "<leader>zhnc",
":'<,'>ZkNewFromContentSelection { dir = vim.fn.expand('%:p:h'), title = vim.fn.input('Title: ') }<CR>", ":'<,'>ZkNewFromContentSelection { dir = vim.fn.expand('%:p:h'), title = vim.fn.input('Title: ') }<CR>",
{ noremap = true, silent = false, buffer = true, desc = "Note from selection (content)" }) { noremap = true, silent = false, buffer = true, desc = "Note from selection (content)" })
-- Open notes linking to the current buffer. -- Open notes linking to the current buffer.
map("n", "<leader>zb", "<Cmd>ZkBacklinks<CR>", { noremap = true, silent = false, buffer = true, desc = "Backlinks" }) map("n", "<leader>zb", "<Cmd>ZkBacklinks<CR>", { noremap = true, silent = false, buffer = true, desc = "Backlinks" })
-- Alternative for backlinks using pure LSP and showing the source context. -- Alternative for backlinks using pure LSP and showing the source context.
--map('n', '<leader>zb', '<Cmd>lua vim.lsp.buf.references()<CR>', opts) --map('n', '<leader>zb', '<Cmd>lua vim.lsp.buf.references()<CR>', opts)
-- Open notes linked by the current buffer. -- Open notes linked by the current buffer.
map("n", "<leader>zL", "<Cmd>ZkLinks<CR>", { noremap = true, silent = false, buffer = true, desc = "Links" }) map("n", "<leader>zL", "<Cmd>ZkLinks<CR>", { noremap = true, silent = false, buffer = true, desc = "Links" })
map("n", "<leader>zi", "<Cmd>ZkInsertLink<CR>", { noremap = true, silent = false, buffer = true, desc = "Insert link" }) map("n", "<leader>zi", "<Cmd>ZkInsertLink<CR>", { noremap = true, silent = false, buffer = true, desc = "Insert link" })
-- Preview a linked note. -- Preview a linked note.
-- Open the code actions for a visual selection. -- Open the code actions for a visual selection.
map("v", "<leader>za", ":'<,'>lua vim.lsp.buf.range_code_action()<CR>", map("v", "<leader>za", ":'<,'>lua vim.lsp.buf.range_code_action()<CR>",
{ noremap = true, silent = false, buffer = true, desc = "Code actions" }) { noremap = true, silent = false, buffer = true, desc = "Code actions" })
end
end end

View file

@ -390,23 +390,25 @@ end)
-- zk -- zk
now_if_args(function() now_if_args(function()
require("zk").setup({ if nix.get_cat("markdown", false) then
picker = "minipick", require("zk").setup({
lsp = { picker = "minipick",
-- `config` is passed to `vim.lsp.start_client(config)` lsp = {
config = { -- `config` is passed to `vim.lsp.start_client(config)`
cmd = { "zk", "lsp" }, config = {
name = "zk", cmd = { "zk", "lsp" },
-- on_attach = ... name = "zk",
-- etc, see `:h vim.lsp.start_client()` -- on_attach = ...
}, -- etc, see `:h vim.lsp.start_client()`
},
-- automatically attach buffers in a zk notebook that match the given filetypes -- automatically attach buffers in a zk notebook that match the given filetypes
auto_attach = { auto_attach = {
enabled = true, enabled = true,
filetypes = { "markdown" }, filetypes = { "markdown" },
}, },
}, },
}) })
end
end) end)

View file

@ -71,22 +71,24 @@ end)
now(function() now(function()
vim.treesitter.language.register("markdown", { "quarto", "rmd" }) vim.treesitter.language.register("markdown", { "quarto", "rmd" })
vim.api.nvim_create_autocmd("FileType", { if nix.get_cat({"r", "markdown"}, false) then
pattern = { "quarto" }, vim.api.nvim_create_autocmd("FileType", {
callback = function() pattern = { "quarto" },
require("otter").activate() callback = function()
end, require("otter").activate()
}) end,
})
require("otter").setup({ require("otter").setup({
lsp = { lsp = {
diagnostic_update_events = { "BufWritePost", "InsertLeave" }, diagnostic_update_events = { "BufWritePost", "InsertLeave" },
}, },
buffers = { buffers = {
set_filetype = true, set_filetype = true,
write_to_disk = true, write_to_disk = true,
}, },
}) })
end
end) end)
later(function() later(function()