Compare commits
5 Commits
6033ab33fb
...
main
Author | SHA1 | Date | |
---|---|---|---|
41e1067647 | |||
ace703ea1d | |||
da496ace05 | |||
9ab97a7867 | |||
8e7058f4b2 |
@ -11,14 +11,17 @@ x="$4"
|
||||
y="$5"
|
||||
|
||||
case "$(file -Lb --mime-type "$file")" in
|
||||
image/*)
|
||||
image/*)
|
||||
draw "$file"
|
||||
;;
|
||||
video/*)
|
||||
video/*)
|
||||
# vidthumb is from here:
|
||||
# https://raw.githubusercontent.com/duganchen/kitty-pistol-previewer/main/vidthumb
|
||||
draw "$(vidthumb "$file")"
|
||||
;;
|
||||
text/*)
|
||||
mdcat --columns "$(($4 * 7 / 9))" "$1"
|
||||
;;
|
||||
esac
|
||||
|
||||
pistol "$file"
|
||||
|
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
lazy-lock.json
|
13
.markdownlint.yaml
Normal file
13
.markdownlint.yaml
Normal file
@ -0,0 +1,13 @@
|
||||
# ~/.markdownlint.yaml
|
||||
|
||||
# Enable all rules by default
|
||||
# https://github.com/markdownlint/markdownlint/blob/main/docs/RULES.md
|
||||
default: true
|
||||
|
||||
# Allow inline HTML which is useful in Github-flavour markdown for:
|
||||
# - crafting headings with friendly hash fragments.
|
||||
# - adding collapsible sections with <details> and <summary>.
|
||||
MD033: false
|
||||
|
||||
# Ignore line length rules (as Prettier handles this).
|
||||
MD013: false
|
8
.prettierrc.yaml
Normal file
8
.prettierrc.yaml
Normal file
@ -0,0 +1,8 @@
|
||||
# ~/.prettierrc.yaml
|
||||
overrides:
|
||||
- files:
|
||||
- "*.md"
|
||||
- "*.markdown"
|
||||
options:
|
||||
proseWrap: "always"
|
||||
printWidth: 80
|
113
ask_llm.bash
Executable file
113
ask_llm.bash
Executable file
@ -0,0 +1,113 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -Eeuo pipefail
|
||||
trap cleanup SIGINT SIGTERM ERR EXIT
|
||||
payload=$(mktemp)
|
||||
|
||||
script_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd -P)
|
||||
|
||||
usage() {
|
||||
cat <<EOF
|
||||
Usage: $(basename "${BASH_SOURCE[0]}") [-h] [-v] [-f] -p param_value arg1 [arg2...]
|
||||
|
||||
Script description here.
|
||||
|
||||
Available options:
|
||||
|
||||
-h, --help Print this help and exit
|
||||
-v, --verbose Print script debug info
|
||||
-f, --flag Some flag description
|
||||
-p, --param Some param description
|
||||
EOF
|
||||
exit
|
||||
}
|
||||
|
||||
cleanup() {
|
||||
trap - SIGINT SIGTERM ERR EXIT
|
||||
# script cleanup here
|
||||
rm -rf "$payload"
|
||||
}
|
||||
|
||||
setup_colors() {
|
||||
if [[ -t 2 ]] && [[ -z "${NO_COLOR-}" ]] && [[ "${TERM-}" != "dumb" ]]; then
|
||||
NOFORMAT='\033[0m' RED='\033[0;31m' GREEN='\033[0;32m' ORANGE='\033[0;33m' BLUE='\033[0;34m' PURPLE='\033[0;35m' CYAN='\033[0;36m' YELLOW='\033[1;33m'
|
||||
else
|
||||
NOFORMAT='' RED='' GREEN='' ORANGE='' BLUE='' PURPLE='' CYAN='' YELLOW=''
|
||||
fi
|
||||
}
|
||||
|
||||
msg() {
|
||||
if [[ $# -gt 1 ]]; then
|
||||
echo >&2 -e -n "${1-}${2}"
|
||||
else
|
||||
echo >&2 -e "${1-}"
|
||||
fi
|
||||
}
|
||||
|
||||
die() {
|
||||
local msg=$1
|
||||
local code=${2-1} # default exit status 1
|
||||
msg "$msg"
|
||||
exit "$code"
|
||||
}
|
||||
|
||||
get_abs_filename() {
|
||||
# $1 : relative filename
|
||||
echo "$(cd "$(dirname "$1")" && pwd)/$(basename "$1")"
|
||||
}
|
||||
|
||||
parse_params() {
|
||||
# default values of variables set from params
|
||||
#flag=0
|
||||
output=''
|
||||
|
||||
while :; do
|
||||
case "${1-}" in
|
||||
-h | --help) usage ;;
|
||||
-v | --verbose) set -x ;;
|
||||
--no-color) NO_COLOR=1 ;;
|
||||
#-f | --flag) flag=1 ;; # example flag
|
||||
-i | --image)
|
||||
image="${2-}"
|
||||
shift
|
||||
;;
|
||||
-p | --prompt)
|
||||
prompt="${2-}"
|
||||
shift
|
||||
;;
|
||||
-?*) die "Unknown option: $1" ;;
|
||||
*) break ;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
args=("$@")
|
||||
|
||||
[[ -z "${prompt-}" ]] && prompt="${args[*]-}"
|
||||
# check required params and argument
|
||||
[[ -z "${prompt-}" ]] && die "Missing required parameter: prompt"
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
parse_params "$@"
|
||||
setup_colors
|
||||
|
||||
# script logic here
|
||||
|
||||
msg "${RED}Read parameters:${NOFORMAT}"
|
||||
msg "- image: ${image-}"
|
||||
msg "- prompt: ${prompt}"
|
||||
msg "- arguments: ${args[*]-}"
|
||||
|
||||
if [[ -z "${image-}" ]]; then
|
||||
echo '{ "model": "gemma3:12b", "prompt": "'"${prompt}"'" }' >"$payload"
|
||||
else
|
||||
abspath=$(get_abs_filename "${image}")
|
||||
imgbase64=$(base64 -w 0 "${abspath}")
|
||||
echo '{ "model": "gemma3:12b", "prompt": "'"${prompt}"'", "images": ["'"${imgbase64}"'"] }' >"$payload"
|
||||
fi
|
||||
|
||||
while IFS= read -r line; do
|
||||
echo "$line" | jq -j '.response'
|
||||
done < <(curl -s -X POST http://gpu.dighist.geschichte.hu-berlin.de:11434/api/generate -d @"$payload")
|
52
generate_overview.bash
Executable file
52
generate_overview.bash
Executable file
@ -0,0 +1,52 @@
|
||||
#!/usr/bin/env bash
|
||||
if [ $# -lt 1 ]; then
|
||||
echo "Usage: $0 <Document>"
|
||||
exit 1
|
||||
fi
|
||||
MODEL="cogito:32b"
|
||||
DOC=$(jq -Rs . <"$1" | sed 's/^"/"```json\\n/;s/"$/\\n```\\n"/') # Anführungszeichen escapen
|
||||
SYSTEM=$(
|
||||
jq -Rs . <<'EOF'
|
||||
Enable deep thinking subroutine.
|
||||
|
||||
We are reading a scientific paper.
|
||||
Please create a conceptual graphviz-diagram (using sfdp for a mindmap-like layout, setting overlap=scale). You can also use a different style within a note (as subgraph) - but only if you have a good reason for it. Use as many depth-layers as neccessary and refrain from using visible subgraphs as "collection of nodes". Also make sure all nodes are connected, are roughly sqare (i.e. **break long labels of text**) and don't overlap.
|
||||
|
||||
The root-node with the paper title should be a filled elipse in the center with a light gray filling.
|
||||
|
||||
Then define distinct base-colors for all branches of the root-node (the "concepts"). Use subtle colors-shifts within those base-colors in the (grand-)child nodes according to their "feel" (i.e. reddish for negative connotations, greenish for positive connotation, blueish for technical things, purple for social things, etc.). Like in a blue theme (i.e. tech stack) only a reddish-blue or a greenish-blue (mix of target hue into the base-color, while keeping lightness the same). Only use one consistent mix for each base-color with feel-color. Do not use red/green/blue/purple as base-colors. All base-colors should be very distinct (i.e. differ in hue by at least 20%)
|
||||
|
||||
Main result should be a **clear**, **concise** and **informative** graphic. You may also add a further level of leafs with more detailed information in smaller print (like cites, quotes, ...), as this is to be used as SVG and can be zoomed in, if needed.
|
||||
|
||||
Return your result as plain graphviz code-block without explanations. It will be used by automatic processing and has to be perfect. Use at least 2 levels of nodes.
|
||||
All in all: Think beforehand what nodes you want, how they connect and when generating use "r", "r_1", "r_2_1" etc for root->branch->branch to not have name conflicts with reserved keywords (i.e. "graph", "node", ..). Also put captions in boxes properly (i.e. ["foo"] for a box with label foo).
|
||||
You have only one shot. Think extensively if need be.
|
||||
EOF
|
||||
)
|
||||
|
||||
tmpfile=$(mktemp)
|
||||
svgfile="$1.svg"
|
||||
|
||||
curl -s http://gpu.dighist.geschichte.hu-berlin.de:11434/api/chat -d '{
|
||||
"model": "'"$MODEL"'",
|
||||
"messages": [
|
||||
{ "role": "system", "content": '"$SYSTEM"' },
|
||||
{ "role": "user",
|
||||
"content": "This is the document:" },
|
||||
{ "role": "user",
|
||||
"content": '"$DOC"' }
|
||||
],
|
||||
"options": {
|
||||
"num_ctx": 50000,
|
||||
"num_predict": 20000,
|
||||
"num_batch": 64,
|
||||
"num_keep": 768
|
||||
},
|
||||
"stream": true
|
||||
}' | stdbuf -oL jq -crj '.message.content' | tee "$tmpfile"
|
||||
|
||||
dotfile=$(mktemp)
|
||||
awk '/^```/{f = !f; next} f' "$tmpfile" >"$dotfile"
|
||||
dot -Tsvg -o "$svgfile" "$dotfile"
|
||||
|
||||
rm "$tmpfile" "$dotfile"
|
@ -12,7 +12,6 @@
|
||||
"lazyvim.plugins.extras.editor.dial",
|
||||
"lazyvim.plugins.extras.editor.fzf",
|
||||
"lazyvim.plugins.extras.editor.inc-rename",
|
||||
"lazyvim.plugins.extras.editor.mini-diff",
|
||||
"lazyvim.plugins.extras.editor.outline",
|
||||
"lazyvim.plugins.extras.editor.snacks_picker",
|
||||
"lazyvim.plugins.extras.editor.telescope",
|
||||
@ -21,6 +20,7 @@
|
||||
"lazyvim.plugins.extras.lang.markdown",
|
||||
"lazyvim.plugins.extras.lang.nix",
|
||||
"lazyvim.plugins.extras.lang.python",
|
||||
"lazyvim.plugins.extras.lang.svelte",
|
||||
"lazyvim.plugins.extras.lang.typescript",
|
||||
"lazyvim.plugins.extras.linting.eslint",
|
||||
"lazyvim.plugins.extras.test.core",
|
||||
|
@ -6,16 +6,35 @@ return {
|
||||
-- add any opts here
|
||||
-- for example
|
||||
provider = "ollama",
|
||||
behaviour = {
|
||||
enable_cursor_planning_mode = true, -- enable cursor planning mode!
|
||||
},
|
||||
providers = {
|
||||
ollama = {
|
||||
endpoint = "http://gpu.dighist.geschichte.hu-berlin.de:11434",
|
||||
model = "cogito:14b", -- your desired model (or use gpt-4o, etc.)
|
||||
model = "cogito:32b", -- your desired model (or use gpt-4o, etc.)
|
||||
timeout = 30000, -- Timeout in milliseconds, increase this for reasoning models
|
||||
temperature = 0,
|
||||
max_completion_tokens = 8192, -- Increase this to include reasoning tokens (for reasoning models)
|
||||
max_completion_tokens = 40000, -- Increase this to include reasoning tokens (for reasoning models)
|
||||
stream = true,
|
||||
thinking = true,
|
||||
system_prompt = "Enable deep thinking subroutine.",
|
||||
--reasoning_effort = "medium", -- low|medium|high, only used for reasoning models
|
||||
--system_prompt = "Enable deep thinking subroutine.",
|
||||
-- reasoning_effort = "high", -- low|medium|high, only used for reasoning models
|
||||
},
|
||||
deepthink = {
|
||||
__inherited_from = "ollama",
|
||||
model = "qwen3:32b",
|
||||
max_completion_tokens = 40000,
|
||||
reasoning_effort = "high",
|
||||
},
|
||||
},
|
||||
rag_service = {
|
||||
enabled = true, -- Enables the RAG service
|
||||
host_mount = os.getenv("HOME"), -- Host mount path for the rag service
|
||||
provider = "ollama", -- The provider to use for RAG service (e.g. openai or ollama)
|
||||
llm_model = "cogito", -- The LLM model to use for RAG service
|
||||
embed_model = "nomic-embed-text", -- The embedding model to use for RAG service
|
||||
endpoint = "http://gpu.dighist.geschichte.hu-berlin.de:11434", -- The API endpoint for RAG service
|
||||
},
|
||||
},
|
||||
-- if you want to build from source then do `make BUILD_FROM_SOURCE=true`
|
||||
|
@ -1,11 +1,12 @@
|
||||
return {
|
||||
"saghen/blink.cmp",
|
||||
dependencies = {
|
||||
"Kaiser-Yang/blink-cmp-avante",
|
||||
-- "Kaiser-Yang/blink-cmp-avante",
|
||||
-- ... Other dependencies
|
||||
},
|
||||
opts = {
|
||||
signature = { enabled = true },
|
||||
fuzzy = { implementation = "prefer_rust" },
|
||||
keymap = {
|
||||
["<A-y>"] = {
|
||||
function(cmp)
|
||||
@ -14,15 +15,15 @@ return {
|
||||
},
|
||||
},
|
||||
sources = {
|
||||
default = { "avante", "lsp", "path", "buffer", "minuet" },
|
||||
default = { "lsp", "path", "buffer", "minuet" },
|
||||
providers = {
|
||||
avante = {
|
||||
module = "blink-cmp-avante",
|
||||
name = "Avante",
|
||||
opts = {
|
||||
-- options for blink-cmp-avante
|
||||
},
|
||||
},
|
||||
-- avante = {
|
||||
-- module = "blink-cmp-avante",
|
||||
-- name = "Avante",
|
||||
-- opts = {
|
||||
-- -- options for blink-cmp-avante
|
||||
-- },
|
||||
-- },
|
||||
minuet = {
|
||||
name = "minuet",
|
||||
module = "minuet.blink",
|
||||
|
@ -1,197 +0,0 @@
|
||||
-- since this is just an example spec, don't actually load anything here and return an empty spec
|
||||
-- stylua: ignore
|
||||
if true then return {} end
|
||||
|
||||
-- every spec file under the "plugins" directory will be loaded automatically by lazy.nvim
|
||||
--
|
||||
-- In your plugin files, you can:
|
||||
-- * add extra plugins
|
||||
-- * disable/enabled LazyVim plugins
|
||||
-- * override the configuration of LazyVim plugins
|
||||
return {
|
||||
-- add gruvbox
|
||||
{ "ellisonleao/gruvbox.nvim" },
|
||||
|
||||
-- Configure LazyVim to load gruvbox
|
||||
{
|
||||
"LazyVim/LazyVim",
|
||||
opts = {
|
||||
colorscheme = "gruvbox",
|
||||
},
|
||||
},
|
||||
|
||||
-- change trouble config
|
||||
{
|
||||
"folke/trouble.nvim",
|
||||
-- opts will be merged with the parent spec
|
||||
opts = { use_diagnostic_signs = true },
|
||||
},
|
||||
|
||||
-- disable trouble
|
||||
{ "folke/trouble.nvim", enabled = false },
|
||||
|
||||
-- override nvim-cmp and add cmp-emoji
|
||||
{
|
||||
"hrsh7th/nvim-cmp",
|
||||
dependencies = { "hrsh7th/cmp-emoji" },
|
||||
---@param opts cmp.ConfigSchema
|
||||
opts = function(_, opts)
|
||||
table.insert(opts.sources, { name = "emoji" })
|
||||
end,
|
||||
},
|
||||
|
||||
-- change some telescope options and a keymap to browse plugin files
|
||||
{
|
||||
"nvim-telescope/telescope.nvim",
|
||||
keys = {
|
||||
-- add a keymap to browse plugin files
|
||||
-- stylua: ignore
|
||||
{
|
||||
"<leader>fp",
|
||||
function() require("telescope.builtin").find_files({ cwd = require("lazy.core.config").options.root }) end,
|
||||
desc = "Find Plugin File",
|
||||
},
|
||||
},
|
||||
-- change some options
|
||||
opts = {
|
||||
defaults = {
|
||||
layout_strategy = "horizontal",
|
||||
layout_config = { prompt_position = "top" },
|
||||
sorting_strategy = "ascending",
|
||||
winblend = 0,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- add pyright to lspconfig
|
||||
{
|
||||
"neovim/nvim-lspconfig",
|
||||
---@class PluginLspOpts
|
||||
opts = {
|
||||
---@type lspconfig.options
|
||||
servers = {
|
||||
-- pyright will be automatically installed with mason and loaded with lspconfig
|
||||
pyright = {},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- add tsserver and setup with typescript.nvim instead of lspconfig
|
||||
{
|
||||
"neovim/nvim-lspconfig",
|
||||
dependencies = {
|
||||
"jose-elias-alvarez/typescript.nvim",
|
||||
init = function()
|
||||
require("lazyvim.util").lsp.on_attach(function(_, buffer)
|
||||
-- stylua: ignore
|
||||
vim.keymap.set( "n", "<leader>co", "TypescriptOrganizeImports", { buffer = buffer, desc = "Organize Imports" })
|
||||
vim.keymap.set("n", "<leader>cR", "TypescriptRenameFile", { desc = "Rename File", buffer = buffer })
|
||||
end)
|
||||
end,
|
||||
},
|
||||
---@class PluginLspOpts
|
||||
opts = {
|
||||
---@type lspconfig.options
|
||||
servers = {
|
||||
-- tsserver will be automatically installed with mason and loaded with lspconfig
|
||||
tsserver = {},
|
||||
},
|
||||
-- you can do any additional lsp server setup here
|
||||
-- return true if you don't want this server to be setup with lspconfig
|
||||
---@type table<string, fun(server:string, opts:_.lspconfig.options):boolean?>
|
||||
setup = {
|
||||
-- example to setup with typescript.nvim
|
||||
tsserver = function(_, opts)
|
||||
require("typescript").setup({ server = opts })
|
||||
return true
|
||||
end,
|
||||
-- Specify * to use this function as a fallback for any server
|
||||
-- ["*"] = function(server, opts) end,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- for typescript, LazyVim also includes extra specs to properly setup lspconfig,
|
||||
-- treesitter, mason and typescript.nvim. So instead of the above, you can use:
|
||||
{ import = "lazyvim.plugins.extras.lang.typescript" },
|
||||
|
||||
-- add more treesitter parsers
|
||||
{
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
opts = {
|
||||
ensure_installed = {
|
||||
"bash",
|
||||
"html",
|
||||
"javascript",
|
||||
"json",
|
||||
"lua",
|
||||
"markdown",
|
||||
"markdown_inline",
|
||||
"python",
|
||||
"query",
|
||||
"regex",
|
||||
"tsx",
|
||||
"typescript",
|
||||
"vim",
|
||||
"yaml",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- since `vim.tbl_deep_extend`, can only merge tables and not lists, the code above
|
||||
-- would overwrite `ensure_installed` with the new value.
|
||||
-- If you'd rather extend the default config, use the code below instead:
|
||||
{
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
opts = function(_, opts)
|
||||
-- add tsx and treesitter
|
||||
vim.list_extend(opts.ensure_installed, {
|
||||
"tsx",
|
||||
"typescript",
|
||||
})
|
||||
end,
|
||||
},
|
||||
|
||||
-- the opts function can also be used to change the default opts:
|
||||
{
|
||||
"nvim-lualine/lualine.nvim",
|
||||
event = "VeryLazy",
|
||||
opts = function(_, opts)
|
||||
table.insert(opts.sections.lualine_x, {
|
||||
function()
|
||||
return "😄"
|
||||
end,
|
||||
})
|
||||
end,
|
||||
},
|
||||
|
||||
-- or you can return new options to override all the defaults
|
||||
{
|
||||
"nvim-lualine/lualine.nvim",
|
||||
event = "VeryLazy",
|
||||
opts = function()
|
||||
return {
|
||||
--[[add your custom lualine config here]]
|
||||
}
|
||||
end,
|
||||
},
|
||||
|
||||
-- use mini.starter instead of alpha
|
||||
{ import = "lazyvim.plugins.extras.ui.mini-starter" },
|
||||
|
||||
-- add jsonls and schemastore packages, and setup treesitter for json, json5 and jsonc
|
||||
{ import = "lazyvim.plugins.extras.lang.json" },
|
||||
|
||||
-- add any tools you want to have installed below
|
||||
{
|
||||
"williamboman/mason.nvim",
|
||||
opts = {
|
||||
ensure_installed = {
|
||||
"stylua",
|
||||
"shellcheck",
|
||||
"shfmt",
|
||||
"flake8",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
@ -28,7 +28,7 @@ return {
|
||||
-- the maximum total characters of the context before and after the cursor
|
||||
-- 16000 characters typically equate to approximately 4,000 tokens for
|
||||
-- LLMs.
|
||||
context_window = 4000,
|
||||
context_window = 32000,
|
||||
-- when the total characters exceed the context window, the ratio of
|
||||
-- context before cursor and after cursor, the larger the ratio the more
|
||||
-- context before cursor will be used. This option should be between 0 and
|
||||
|
19
nvim-config/lua/plugins/test.lua
Normal file
19
nvim-config/lua/plugins/test.lua
Normal file
@ -0,0 +1,19 @@
|
||||
return {
|
||||
{ "nvim-neotest/neotest-plenary", "nvim-neotest/neotest-jest" },
|
||||
{
|
||||
"nvim-neotest/neotest",
|
||||
opts = {
|
||||
adapters = {
|
||||
"neotest-plenary",
|
||||
["neotest-jest"] = {
|
||||
jestCommand = "npm test --",
|
||||
jestConfigFile = "custom.jest.config.ts",
|
||||
env = { CI = true },
|
||||
cwd = function(_)
|
||||
return vim.fn.getcwd()
|
||||
end,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
Reference in New Issue
Block a user