Squashed 'dots/' changes from f64b634..24ce8f3

24ce8f3 Migrate '.vim/plugin' to neovim
e3d9612 Remove vim yin/yang colorschemes
05986a3 Migrate '.vim/ftplugin' to neovim
05bc2ec Migrate vim snippets to neovim (LuaSnip)
128ae8e Migrate '.vim/ftdetect/prolog' to neovim
f3188f7 Migrate '.vim/after/syntax' to neovim
85d56f9 Migrate vim init config to neovim
afca2ca Migrate '.vim/after' to neovim
d6875c9 Add 'eslint_d' PID to 'nvim-lint' config
568e45f Remove jira aliases
78fa170 Disable 'xdg-user-dirs' by default
5216f79 Alias bash 'history' command to 'h'
0f29dc3 Add neovim dependencies to flake
c901a1c test
6113c08 Merge commit '490998275cbdc5ff032d4a39794bf850f4bfefec'
470f69f Add neovim 'auto-session' plugin setup
d3a67ab Add minimal readme to my neovim configuration
f79bc54 Add minimal readme to my neovim configuration
4fe60cf Remove neovim lazy load related config
211da54 Fall back to 'paq.nvim' only when not on 'nixCats'
b6d3015 Add 'nixCatsUtils' from 'nixCats'
139089f Add neovim packages to 'nixCats' flake
a54e745 Add minimal 'nixCats' flake template
6e48621 Link NixOS repo in dotfiles repository

git-subtree-dir: dots
git-subtree-split: 24ce8f39af
main
Hektor Misplon 2025-10-20 23:59:27 +02:00
parent f64b634dd8
commit f035c9318b
65 changed files with 1731 additions and 1714 deletions

View File

@ -34,6 +34,7 @@ alias fzfpac="pacman -Slq | fzf -m --preview 'pacman -Si {1}' | xargs -ro sudo p
alias path='echo -e ${PATH//:/\\n}' # Pretty print path variables
# Programs
alias h="history"
alias o="xdg-open"
alias v="nvim"
alias g='git'

View File

@ -1,4 +0,0 @@
# shellcheck shell=bash
# vim: set ft=bash :
alias jira-me='jira issue list -a$(jira me)'

View File

@ -15,7 +15,6 @@
[ -f "$HOME/.bash_aliases/hosts/$HOSTNAME" ] && . "$HOME/.bash_aliases/hosts/$HOSTNAME"
[ -f "$HOME/.bash_aliases/private" ] && . "$HOME/.bash_aliases/private"
[ -f "$HOME/.bash_aliases/lang-js" ] && . "$HOME/.bash_aliases/lang-js"
command -v jira >/dev/null && [ -f "$HOME/.bash_aliases/jira" ] && . "$HOME/.bash_aliases/jira"
# Completions {{{
[ -d "$HOME/.bash_completions" ] && for file in "$HOME/.bash_completions"/*; do

6
.config/nvim/README.md Normal file
View File

@ -0,0 +1,6 @@
# Neovim configuration
My neovim configuration. Available as a Nix flake [^nixcats]. When installing manually,
`paq.nvim` is used as a fallback plugin manager.
[^nixcats]: Based on [this nixCats `example` template](https://github.com/BirdeeHub/nixCats-nvim/tree/77dffad8235eb77684fcb7599487c8e9f23d5b8f/templates/example)

View File

@ -1,3 +1,4 @@
vim.cmd([[
function GetClozeNumber()
let REGEX_CLOZE_START = '{{c\d\+::'
@ -33,3 +34,4 @@ let g:sandwich#recipes += [
\ 'nesting': 1
\ }
\ ]
]])

View File

@ -0,0 +1 @@
require("auto-session").setup({})

View File

@ -1,3 +1,5 @@
vim.cmd([[
" Paste clipboard images
au FileType pandoc nmap <buffer><silent> <leader>v :call mdip#MarkdownClipboardImage()<CR>
au FileType markdown nmap <buffer><silent> <leader>v :call mdip#MarkdownClipboardImage()<CR>
]])

View File

@ -1,3 +1,5 @@
vim.env.ESLINT_D_PPID = vim.fn.getpid()
local eslint_linter = "eslint_d"
require("lint").linters_by_ft = {

View File

@ -1,3 +1,5 @@
vim.cmd([[
nmap s <Nop>
xmap s <Nop>
let g:sandwich#recipes = deepcopy(g:sandwich#default_recipes)
]])

View File

@ -1,4 +1,6 @@
vim.cmd([[
let g:taskwiki_taskrc_location='/home/h/.config/task/taskrc'
let g:taskwiki_disable_concealcursor=1
let g:taskwiki_dont_preserve_folds=1
let g:taskwiki_dont_fold=1
]])

View File

@ -1,6 +1,8 @@
vim.cmd([[
let g:javascript_plugin_jsdoc = 1 " jsdoc syntax highlighting
let g:javascript_plugin_flow = 1 " flow syntax highlighting
let g:javascript_conceal_function = "ƒ"
let g:javascript_conceal_return = ""
let g:svelte_indent_script = 0
let g:svelte_indent_style = 0
]])

View File

@ -1,3 +1,4 @@
vim.cmd([[
let g:pandoc#syntax#conceal#urls=1
let g:pandoc#syntax#codeblocks#embeds#langs=[
\ 'python',
@ -13,3 +14,4 @@ let g:pandoc#syntax#codeblocks#embeds#langs=[
let g:pandoc#syntax#style#emphases=0 " Bug workaround
let g:pandoc#syntax#conceal#cchar_overrides = { "atx": " ", "li": "·" }
let g:pandoc#syntax#conceal#blacklist=[]
]])

View File

@ -1,3 +1,4 @@
vim.cmd([[
au FileType pandoc call pandoc#completion#Init()
let g:pandoc#filetypes#pandoc_markdown=0
let g:pandoc#spell#enabled=0
@ -5,3 +6,4 @@ let g:pandoc#spell#default_langs=['en_us', 'nl_be']
let g:pandoc#formatting#mode='a'
let g:pandoc#formatting#textwidth=90
let g:pandoc#modules#disabled = ["formatting", "dashes", "yaml", "metadata"]
]])

View File

@ -1,3 +1,4 @@
vim.cmd([[
" Tidalcycles (sclang and vim-tidal)
let g:tidal_default_config = {"socket_name": "default", "target_pane": "tidal:1.1"}
let g:tidal_no_mappings = 1
@ -12,3 +13,4 @@ au FileType tidal com! -nargs=0 H :TidalHush
" SuperCollider
au BufEnter,BufWinEnter,BufNewFile,BufRead *.sc,*.scd se filetype=supercollider
au Filetype supercollider packadd scvim
]])

View File

@ -1,4 +1,6 @@
vim.cmd([[
let g:vimtex_view_method='zathura'
let g:tex_flavor='latex'
let g:tex_conceal='abdmgs'
let g:vimtex_quickfix_mode=0
]])

View File

@ -1,3 +1,4 @@
vim.cmd([[
" Change local buffer to directory of current file after the plugin has loaded
autocmd VimEnter * lcd %:p:h
@ -106,3 +107,4 @@ let g:wiki_write_on_nav=1
let g:wiki_zotero_root='~/.local/share/zotero'
" ... mappings and commands
" ...
]])

View File

@ -1,5 +1,7 @@
vim.cmd([[
syn match Todo /TODO/
syn match Todo /FIXME/
syn match Todo /FIX/
syn match Todo /QUESTION/
syn match Todo /NOTE/
]])

View File

@ -1,3 +1,4 @@
vim.cmd([[
" Override the pandoc-syntax highlighting colors for more subtle citations
hi! link pandocPCite Comment
hi! link pandocICite Comment
@ -5,9 +6,6 @@ hi! link pandocCiteKey Comment
hi! link pandocCiteAnchor Comment
hi! link pandocCiteLocator Comment
" Don't show the CiteKey within the CiteLocator
syn match pandocCiteKey /\v\[[^]]+\]/ contained
" Match cloze delimiters e.g. `{{c1::` and `}}`
syn match ClozeDelimiter /{{c\d\+::/ conceal containedin=pandocUListItem,pandocListItem
syn match ClozeDelimiter /}}/ conceal containedin=pandocUListItem,pandocListItem
@ -23,4 +21,6 @@ syn match TaskWikiTaskUuid containedin=TaskWikiTask /\v#([A-Z]:)?[0-9a-fA-F]{8}-
syn match TaskWikiTaskUuid containedin=TaskWikiTask /\v#([A-Z]:)?[0-9a-fA-F]{8}$/
highlight link TaskWikiTaskUuid Comment
:runtime! syntax/_comment_keywords.vim
]])
vim.cmd.runtime("syntax/_comment_keywords.lua")

View File

@ -1,5 +1,7 @@
vim.cmd([[
syn keyword Operator \+ conceal cchar=¬
syn keyword Operator , conceal cchar=
syn keyword Operator ; conceal cchar=
]])
:runtime! syntax/_comment_keywords.vim
vim.cmd.runtime("syntax/_comment_keywords.lua")

View File

@ -1,3 +1,4 @@
vim.cmd([[
syntax keyword Statement define conceal cchar=
syn keyword Operator not conceal cchar=¬
@ -35,5 +36,6 @@ syn keyword Operator phi conceal cchar=φ
syn keyword Operator chi conceal cchar=χ
syn keyword Operator psi conceal cchar=ψ
syn keyword Operator omega conceal cchar=ω
]])
:runtime! syntax/_comment_keywords.vim
vim.cmd.runtime("syntax/_comment_keywords.lua")

162
.config/nvim/flake.lock Normal file
View File

@ -0,0 +1,162 @@
{
"nodes": {
"nixCats": {
"locked": {
"lastModified": 1759730664,
"narHash": "sha256-boRlBQ/c4CaHsK/z04QL6+t81mcar37Io94HBX2GflY=",
"owner": "BirdeeHub",
"repo": "nixCats-nvim",
"rev": "77dffad8235eb77684fcb7599487c8e9f23d5b8f",
"type": "github"
},
"original": {
"owner": "BirdeeHub",
"repo": "nixCats-nvim",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1760256791,
"narHash": "sha256-uTpzDHRASEDeFUuToWSQ46Re8beXyG9dx4W36FQa0/c=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "832e3b6db48508ae436c2c7bfc0cf914eac6938e",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"plugins-beancount-nvim": {
"flake": false,
"locked": {
"lastModified": 1707748314,
"narHash": "sha256-LuACGVB3kiaiJqoGtvFy6kbPNtqoGliKLDeR+Z7Wzbw=",
"owner": "polarmutex",
"repo": "beancount.nvim",
"rev": "869564aba3087ee5df8f282aa37555e314aa2152",
"type": "github"
},
"original": {
"owner": "polarmutex",
"repo": "beancount.nvim",
"type": "github"
}
},
"plugins-crazy-node-movement": {
"flake": false,
"locked": {
"lastModified": 1693654676,
"narHash": "sha256-hQcQEp39zFN2zphMfcr97yRVcuHhBsSkzKO7XNloDpQ=",
"owner": "theHamsta",
"repo": "crazy-node-movement",
"rev": "d5cf01cc44c5715501d3d6fe439af7c8b7fa5df2",
"type": "github"
},
"original": {
"owner": "theHamsta",
"repo": "crazy-node-movement",
"type": "github"
}
},
"plugins-helm-ls-nvim": {
"flake": false,
"locked": {
"lastModified": 1757598429,
"narHash": "sha256-nzuJxAAaEmuVYg9k0B8OKslxsihhg6RKlhz6E7xJTQU=",
"owner": "qvalentin",
"repo": "helm-ls.nvim",
"rev": "f36ecbd3e7b0b2ac8358a9d6a3213888e29943db",
"type": "github"
},
"original": {
"owner": "qvalentin",
"repo": "helm-ls.nvim",
"type": "github"
}
},
"plugins-mcphub-nvim": {
"flake": false,
"locked": {
"lastModified": 1759035242,
"narHash": "sha256-I6EbgY/2sAdtrxtmH0qbAAQvMCHhOsfolJfblV0fXOk=",
"owner": "ravitemer",
"repo": "mcphub.nvim",
"rev": "8ff40b5edc649959bb7e89d25ae18e055554859a",
"type": "github"
},
"original": {
"owner": "ravitemer",
"repo": "mcphub.nvim",
"type": "github"
}
},
"plugins-nvimkit-nvim": {
"flake": false,
"locked": {
"lastModified": 1721393835,
"narHash": "sha256-MdmrhLHMxrn6upu1chjKyitPZ5WkCQtpI465AKJXDOA=",
"owner": "jamesblckwell",
"repo": "nvimkit.nvim",
"rev": "af363d22699760f66988e8d36539a5753039217a",
"type": "github"
},
"original": {
"owner": "jamesblckwell",
"repo": "nvimkit.nvim",
"type": "github"
}
},
"plugins-shipwright-nvim": {
"flake": false,
"locked": {
"lastModified": 1711725275,
"narHash": "sha256-xh/2m//Cno5gPucjOYih79wVZj3X1Di/U3/IQhKXjc0=",
"owner": "rktjmp",
"repo": "shipwright.nvim",
"rev": "e596ab48328c31873f4f4d2e070243bf9de16ff3",
"type": "github"
},
"original": {
"owner": "rktjmp",
"repo": "shipwright.nvim",
"type": "github"
}
},
"plugins-tailwind-fold-nvim": {
"flake": false,
"locked": {
"lastModified": 1752559116,
"narHash": "sha256-8uefZIVsn9USEd6FyiO3m3TRKAS/vigU4t9Tk5ijd3c=",
"owner": "razak17",
"repo": "tailwind-fold.nvim",
"rev": "d9e7ca11691d252b35795726dff087bf013b2ebf",
"type": "github"
},
"original": {
"owner": "razak17",
"repo": "tailwind-fold.nvim",
"type": "github"
}
},
"root": {
"inputs": {
"nixCats": "nixCats",
"nixpkgs": "nixpkgs",
"plugins-beancount-nvim": "plugins-beancount-nvim",
"plugins-crazy-node-movement": "plugins-crazy-node-movement",
"plugins-helm-ls-nvim": "plugins-helm-ls-nvim",
"plugins-mcphub-nvim": "plugins-mcphub-nvim",
"plugins-nvimkit-nvim": "plugins-nvimkit-nvim",
"plugins-shipwright-nvim": "plugins-shipwright-nvim",
"plugins-tailwind-fold-nvim": "plugins-tailwind-fold-nvim"
}
}
},
"root": "root",
"version": 7
}

223
.config/nvim/flake.nix Normal file
View File

@ -0,0 +1,223 @@
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
nixCats.url = "github:BirdeeHub/nixCats-nvim";
plugins-shipwright-nvim = {
url = "github:rktjmp/shipwright.nvim";
flake = false;
};
plugins-crazy-node-movement = {
url = "github:theHamsta/crazy-node-movement";
flake = false;
};
plugins-beancount-nvim = {
url = "github:polarmutex/beancount.nvim";
flake = false;
};
plugins-tailwind-fold-nvim = {
url = "github:razak17/tailwind-fold.nvim";
flake = false;
};
plugins-nvimkit-nvim = {
url = "github:jamesblckwell/nvimkit.nvim";
flake = false;
};
plugins-mcphub-nvim = {
url = "github:ravitemer/mcphub.nvim";
flake = false;
};
plugins-helm-ls-nvim = {
url = "github:qvalentin/helm-ls.nvim";
flake = false;
};
};
outputs =
{
self,
nixpkgs,
nixCats,
...
}@inputs:
let
inherit (nixCats) utils;
luaPath = ./.;
forEachSystem = utils.eachSystem nixpkgs.lib.platforms.all;
extra_pkg_config = { };
dependencyOverlays = [
(utils.standardPluginOverlay inputs)
];
categoryDefinitions =
{
pkgs,
...
}:
{
lspsAndRuntimeDeps = with pkgs; {
general = [
black
clang
clang-tools
gawk
gdtoolkit_4
isort
tree-sitter
ormolu
nodePackages.prettier
prettierd
shellcheck-minimal
stylua
];
};
startupPlugins = {
general = with pkgs.vimPlugins; [
eyeliner-nvim
fzf-lua
ltex_extra-nvim
nvim-lspconfig
lsp_lines-nvim
lsp-progress-nvim
neodev-nvim
SchemaStore-nvim
nvim-lint
conform-nvim
luasnip
cmp_luasnip
nvim-cmp
cmp-nvim-lsp
cmp-buffer
cmp-path
plenary-nvim
nui-nvim
trouble-nvim
pkgs.neovimPlugins.shipwright-nvim
lush-nvim
zenbones-nvim
pkgs.neovimPlugins.crazy-node-movement
nvim-treesitter.withAllGrammars
nvim-treesitter-textobjects
# nvim-treesitter-context
nvim-ts-context-commentstring
treesj
sniprun
gitsigns-nvim
nvim-highlight-colors
pkgs.neovimPlugins.tailwind-fold-nvim
auto-session
nvim-dbee
image-nvim
pkgs.neovimPlugins.beancount-nvim
pkgs.neovimPlugins.nvimkit-nvim
codecompanion-nvim
pkgs.neovimPlugins.mcphub-nvim
copilot-lua
copilot-cmp
pkgs.neovimPlugins.helm-ls-nvim
];
};
optionalPlugins = {
general = with pkgs.vimPlugins; [
];
};
sharedLibraries = {
general = [ ];
};
environmentVariables = { };
};
packageDefinitions = {
nvim =
{ ... }:
{
settings = {
suffix-path = true;
suffix-LD = true;
wrapRc = true;
aliases = [ "vim" ];
};
categories = {
general = true;
};
};
};
defaultPackageName = "nvim";
in
forEachSystem (
system:
let
nixCatsBuilder = utils.baseBuilder luaPath {
inherit
nixpkgs
system
dependencyOverlays
extra_pkg_config
;
} categoryDefinitions packageDefinitions;
defaultPackage = nixCatsBuilder defaultPackageName;
pkgs = import nixpkgs { inherit system; };
in
{
packages = utils.mkAllWithDefault defaultPackage;
devShells = {
default = pkgs.mkShell {
name = defaultPackageName;
packages = [ defaultPackage ];
inputsFrom = [ ];
shellHook = '''';
};
};
}
)
// (
let
nixosModule = utils.mkNixosModules {
moduleNamespace = [ defaultPackageName ];
inherit
defaultPackageName
dependencyOverlays
luaPath
categoryDefinitions
packageDefinitions
extra_pkg_config
nixpkgs
;
};
homeModule = utils.mkHomeModules {
moduleNamespace = [ defaultPackageName ];
inherit
defaultPackageName
dependencyOverlays
luaPath
categoryDefinitions
packageDefinitions
extra_pkg_config
nixpkgs
;
};
in
{
overlays = utils.makeOverlays luaPath {
inherit nixpkgs dependencyOverlays extra_pkg_config;
} categoryDefinitions packageDefinitions defaultPackageName;
nixosModules.default = nixosModule;
homeModules.default = homeModule;
inherit utils nixosModule homeModule;
inherit (utils) templates;
}
);
}

View File

@ -0,0 +1 @@
vim.opt.matchpairs:append("=:;")

View File

@ -1,15 +0,0 @@
-- NOTE: May want to move this, as it is more specific to wiki than to pandoc
vim.api.nvim_create_user_command("AnkiDeck", function()
local handle = io.popen("get-anki-decks")
local decks = {}
for line in handle:lines() do
table.insert(decks, line)
end
handle:close()
vim.ui.select(decks, { prompt = "Select Anki deck" }, function(choice)
if choice then
vim.api.nvim_put({ choice }, "", true, true)
end
end)
end, {})

View File

@ -1,3 +1,4 @@
vim.cmd([[
" Anki helper functions
" Convert cloze note to regular text
@ -20,3 +21,4 @@
au FileType pandoc com! -range AnkiRemoveAllClozes :%s/\%V{{c\d\+:://ge | :%s/\%V}}//ge | :%s/\%VSTART\nCloze\n//ge | :%s/\%VEND\n//ge
au FileType pandoc com! -range AnkiRemoveSelectedClozes :%s/\%V{{c\d\+:://ge | :%s/\%V}}//ge | :%s/\%VSTART\nCloze\n//ge | :%s/\%VEND\n//ge
]])

View File

@ -1,3 +1,20 @@
-- NOTE: May want to move this, as it is more specific to wiki than to pandoc
vim.api.nvim_create_user_command("AnkiDeck", function()
local handle = io.popen("get-anki-decks")
local decks = {}
for line in handle:lines() do
table.insert(decks, line)
end
handle:close()
vim.ui.select(decks, { prompt = "Select Anki deck" }, function(choice)
if choice then
vim.api.nvim_put({ choice }, "", true, true)
end
end)
end, {})
vim.cmd([[
set cc=81
set cocu=""
func! GetContext()
@ -17,3 +34,4 @@ func! GetContext()
endif
endfunc
com! -nargs=0 GetContext :call GetContext()
]])

View File

@ -1,3 +1,4 @@
vim.cmd([[
"
" Source: https://wiki.call-cc.org/vim / Jonathan Palardy
"
@ -23,3 +24,4 @@ fun! Scheme_eval_defun()
call Scheme_send_sexp(@")
call setpos('.', pos)
endfun
]])

View File

@ -1,9 +1,28 @@
require("vim")
require("nixCatsUtils").setup({ non_nix_value = true }) -- https://github.com/BirdeeHub/nixCats-nvim/blob/77dffad8235eb77684fcb7599487c8e9f23d5b8f/templates/example/init.lua
vim.cmd([[
set termguicolors
set bg=light
hi Normal ctermbg=none guibg=NONE
]])
require("base")
require("cursor")
require("fold")
require("netrw")
require("ftdetect")
require("plug")
require("pandoc")
require("keymaps")
require("highlight")
require("paq-setup")
require("statusline")
require("diagnostic")
require("utils")
require("zk")
require("reload")
require("paq-setup") -- when not on nixCats
-- vim.opt.background = "dark"
-- vim.opt.laststatus = 3
vim.opt.laststatus = 3

View File

@ -1,7 +1,5 @@
" General config {{{
"
vim.cmd([[
" Tip: acronyms for overview, use `:h` for a quick lookup.
set nocp " Disable vi incompatibility
filetype plugin indent on " Filetype recognition
set enc=utf8 " Default to UTF-8 encoding
@ -28,6 +26,5 @@ set lcs=trail:·,tab:→\ ,nbsp:␣ " Whitespace rendering
set ar " Autoread
set spellsuggest+=5 " Limit spell suggestions
set wildignore+=*/node_modules/*,*/tmp/*,*.so,*.swp,*.zip
set thesaurus+=~/.vim/thesaurus/mthesaur.txt
" }}}
" set thesaurus+=./thesaurus/mthesaur.txt " FIXME
]])

View File

@ -1,3 +1,4 @@
vim.cmd([[
" Taken from /usr/share/vim/vim90/defaults.vim
augroup vimStartup
au!
@ -12,3 +13,4 @@ augroup vimStartup
\ | endif
augroup END
]])

View File

@ -1,3 +1,4 @@
vim.cmd([[
" Folds {{{
set foldmethod=marker
@ -22,3 +23,4 @@ augroup filetype_snippets
augroup END
" }}}
]])

View File

@ -7,5 +7,6 @@ vim.filetype.add({
[".*/%.vscode/.*%.json"] = "jsonc",
[".*/%.ssh/config%.d/.*"] = "sshconfig",
["%.env.*"] = "dotenv",
["%.pl$"] = "prolog",
},
})

View File

@ -1,3 +1,50 @@
vim.cmd([[
" Leader keys
let mapleader = " "
let maplocalleader = ";"
" Splits & navigation
nm s <c-w> " Split horizontal
nm ss :sp<CR><c-w>w| " Split horizontal
nm sv :vs<CR><c-w>w| " Split vertical
nm sw <c-w>w| " Navigate splits
nm sh <c-w>h| "
nm sj <c-w>j| "
nm sk <c-w>k| "
nm sl <c-w>l| "
nn sH <c-w>8<| " Resize splits
nn sJ <c-w>8-| "
nn sK <c-w>8+| "
nn sL <c-w>8>| "
nn s= <c-w>=| " Equalize splits
" Open
nn sb :Lex<cr>| " File tree
nn <leader><leader> :noh<cr> |"
nn <leader>t :term<cr>| " Open terminal
" Remaps
ino <nowait> jj <esc>| " Normal now
nn <left> <nop>| " Hard mode
nn <down> <nop>| " "
nn <up> <nop>| " "
nn <right> <nop>| " "
ino <left> <nop>| " "
ino <down> <nop>| " "
ino <up> <nop>| " "
ino <right> <nop>| " "
" Search
nn <c-_> :noh<cr>| " map 'ctrl + /'
" Line numbers
nn <leader>n :set nu! rnu!<cr>
" Vim configuration
nn <leader>ec :vs $MYVIMRC<cr>
nn <leader>so :so %<cr>
]])
local set = vim.keymap.set
set("n", "<leader>cx", "<cmd>!chmod +x %<CR>", { silent = true, desc = "Run `chmod +x` on current file" })

View File

@ -1,3 +1,5 @@
vim.cmd([[
let g:netrw_winsize = 30
let g:netrw_liststyle=3
let g:netrw_banner = 0
]])

View File

@ -0,0 +1,53 @@
-- Source: https://github.com/BirdeeHub/nixCats-nvim/blob/main/templates/example/lua/nixCatsUtils/catPacker.lua
--[[
This directory is the luaUtils template.
You can choose what things from it that you would like to use.
And then delete the rest.
Everything in this directory is optional.
--]]
local M = {}
-- NOTE: This function is for defining a paq.nvim fallback method of downloading plugins
-- when nixCats was not used to install your config.
-- If you only ever load your config using nixCats, you don't need this file.
-- it literally just only runs it when not on nixCats
-- all neovim package managers that use the regular plugin loading scheme
-- can be used this way, just do whatever the plugin manager needs to put it in the
-- opt directory for lazy loading, and add the build steps so that when theres no nix the steps are ran
function M.setup(v)
if not vim.g[ [[nixCats-special-rtp-entry-nixCats]] ] then
local function clone_paq()
local path = vim.fn.stdpath("data") .. "/site/pack/paqs/start/paq-nvim"
local is_installed = vim.fn.empty(vim.fn.glob(path)) == 0
if not is_installed then
vim.fn.system({ "git", "clone", "--depth=1", "https://github.com/savq/paq-nvim.git", path })
return true
end
end
local function bootstrap_paq(packages)
local first_install = clone_paq()
vim.cmd.packadd("paq-nvim")
local paq = require("paq")
if first_install then
vim.notify("Installing plugins... If prompted, hit Enter to continue.")
end
paq(packages)
paq.install()
end
vim.api.nvim_create_autocmd("VimEnter", {
once = true,
callback = function()
local pkgs_count = #require("paq").query("to_install")
if pkgs_count < 1 then
return
end
vim.notify(string.format("There are %d to install", pkgs_count))
end,
})
bootstrap_paq(vim.list_extend({ "savq/paq-nvim" }, v))
end
end
return M

View File

@ -0,0 +1,136 @@
-- Source: https://github.com/BirdeeHub/nixCats-nvim/blob/main/templates/example/lua/nixCatsUtils/init.lua
--[[
This directory is the luaUtils template.
You can choose what things from it that you would like to use.
And then delete the rest.
Everything in this directory is optional.
--]]
local M = {}
--[[
This file is for making your config still work WITHOUT nixCats.
When you don't use nixCats to load your config,
you wont have the nixCats plugin.
The setup function defined here defines a mock nixCats plugin when nixCats wasnt used to load the config.
This will help avoid indexing errors when the nixCats plugin doesnt exist.
NOTE: If you only ever use nixCats to load your config, you don't need this file.
--]]
---@type boolean
M.isNixCats = vim.g[ [[nixCats-special-rtp-entry-nixCats]] ] ~= nil
---@class nixCatsSetupOpts
---@field non_nix_value boolean|nil
---This function will setup a mock nixCats plugin when not using nix
---It will help prevent you from running into indexing errors without a nixCats plugin from nix.
---If you loaded the config via nix, it does nothing
---non_nix_value defaults to true if not provided or is not a boolean.
---@param v nixCatsSetupOpts
function M.setup(v)
if not M.isNixCats then
local nixCats_default_value
if type(v) == "table" and type(v.non_nix_value) == "boolean" then
nixCats_default_value = v.non_nix_value
else
nixCats_default_value = true
end
local mk_with_meta = function(tbl)
return setmetatable(tbl, {
__call = function(_, attrpath)
local strtable = {}
if type(attrpath) == "table" then
strtable = attrpath
elseif type(attrpath) == "string" then
for key in attrpath:gmatch("([^%.]+)") do
table.insert(strtable, key)
end
else
print("function requires a table of strings or a dot separated string")
return
end
return vim.tbl_get(tbl, unpack(strtable))
end,
})
end
package.preload["nixCats"] = function()
local ncsub = {
get = function(_)
return nixCats_default_value
end,
cats = mk_with_meta({
nixCats_config_location = vim.fn.stdpath("config"),
wrapRc = false,
}),
settings = mk_with_meta({
nixCats_config_location = vim.fn.stdpath("config"),
configDirName = os.getenv("NVIM_APPNAME") or "nvim",
wrapRc = false,
}),
petShop = mk_with_meta({}),
extra = mk_with_meta({}),
pawsible = mk_with_meta({
allPlugins = {
start = {},
opt = {},
},
}),
configDir = vim.fn.stdpath("config"),
packageBinPath = os.getenv("NVIM_WRAPPER_PATH_NIX") or vim.v.progpath,
}
return setmetatable(ncsub, {
__call = function(_, cat)
return ncsub.get(cat)
end,
})
end
_G.nixCats = require("nixCats")
end
end
---allows you to guarantee a boolean is returned, and also declare a different
---default value than specified in setup when not using nix to load the config
---@overload fun(v: string|string[]): boolean
---@overload fun(v: string|string[], default: boolean): boolean
function M.enableForCategory(v, default)
if M.isNixCats or default == nil then
if nixCats(v) then
return true
else
return false
end
else
return default
end
end
---if nix, return value of nixCats(v) else return default
---Exists to specify a different non_nix_value than the one in setup()
---@param v string|string[]
---@param default any
---@return any
function M.getCatOrDefault(v, default)
if M.isNixCats then
return nixCats(v)
else
return default
end
end
---for conditionally disabling build steps on nix, as they are done via nix
---I should probably have named it dontAddIfCats or something.
---@overload fun(v: any): any|nil
---Will return the second value if nix, otherwise the first
---@overload fun(v: any, o: any): any
function M.lazyAdd(v, o)
if M.isNixCats then
return o
else
return v
end
end
return M

View File

@ -1,3 +1,4 @@
vim.cmd([[
fu! Compile()
if expand('%:e') == "md"
:silent exec "!pandoc % -s -o /tmp/op.pdf &"
@ -8,3 +9,4 @@ fu! Preview()
:call Compile()
:silent exec "!zathura /tmp/op.pdf &"
endfu
]])

View File

@ -1,38 +1,4 @@
-- Automate paq installation {{{
local function clone_paq()
local path = vim.fn.stdpath("data") .. "/site/pack/paqs/start/paq-nvim"
local is_installed = vim.fn.empty(vim.fn.glob(path)) == 0
if not is_installed then
vim.fn.system({ "git", "clone", "--depth=1", "https://github.com/savq/paq-nvim.git", path })
return true
end
end
local function bootstrap_paq(packages)
local first_install = clone_paq()
vim.cmd.packadd("paq-nvim")
local paq = require("paq")
if first_install then
vim.notify("Installing plugins... If prompted, hit Enter to continue.")
end
paq(packages)
paq.install()
end
vim.api.nvim_create_autocmd("VimEnter", {
once = true,
callback = function()
local pkgs_count = #require("paq").query("to_install")
if pkgs_count < 1 then
return
end
vim.notify(string.format("There are %d to install", pkgs_count))
end,
})
-- }}}
-- Set up paq plugins {{{
bootstrap_paq({
require("nixCatsUtils.catPacker").setup({
{ "savq/paq-nvim" },
{ "jinh0/eyeliner.nvim" },
{ "ibhagwan/fzf-lua" },
@ -77,4 +43,3 @@ bootstrap_paq({
{ "zbirenbaum/copilot-cmp" },
{ "qvalentin/helm-ls.nvim", ft = "helm" },
})
-- }}}

View File

@ -1,7 +1,4 @@
" Plugins {{{
" Plug setup {{{
vim.cmd([[
call plug#begin()
Plug 'machakann/vim-sandwich'
Plug 'Shougo/context_filetype.vim'
@ -31,4 +28,4 @@ Plug 'goerz/jupytext.vim'
" OpenSCAD
Plug 'sirtaj/vim-openscad'
call plug#end()
" }}}
]])

View File

@ -1,5 +1,7 @@
vim.cmd([[
augroup Vim
au!
" Reload vim config when ~/.vimrc is changed
au BufWritePost $HOME/.vimrc so $MYVIMRC | redraw | echo "Reloaded vimrc"
augroup END
]])

View File

@ -1,3 +1,4 @@
vim.cmd([[
se ls=2
se stl=\ %0*%n
se stl+=\ %m
@ -5,3 +6,4 @@ se stl+=\ %y%0*
se stl+=\ %<%F
se stl+=\ %0*%=%5l%*
se stl+=%0*/%L%*
]])

View File

@ -1,6 +1,8 @@
vim.cmd([[
function! SynGroup()
let l:s = synID(line('.'), col('.'), 1)
echo synIDattr(l:s, 'name') . ' -> ' . synIDattr(synIDtrans(l:s), 'name')
endfun
com! -nargs=0 Syn :call SynGroup()
]])

View File

@ -1,5 +0,0 @@
vim.cmd([[
set runtimepath^=~/.vim runtimepath+=~/.vim/after
let &packpath = &runtimepath
source ~/.vimrc"
]])

View File

@ -1,3 +1,4 @@
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'
@ -18,3 +19,4 @@ endfunction
command! ToggleZKPreview call ToggleZKPreview()
nn <leader>o :ToggleZKPreview<cr> :!xdg-open http://localhost:8080/%:t:r.html & <cr>
]])

View File

@ -27,7 +27,7 @@ return {
t("flex-wrap: wrap;"),
i(0),
}),
s({ trig = "dfc", dscr = "Display flex column" }, {
s({ trig = "dfc", dscr = "Add 'flex-direction: column;'" }, {
t("display: flex;"),
t("flex-direction: column;"),
i(0),

View File

@ -5,6 +5,909 @@ local d = ls.dynamic_node
local sn = ls.snippet_node
local fmta = require("luasnip.extras.fmt").fmta
-- Original .snippets file - TODO: Migrate to lua snippets
-- ```viml
-- global !p
-- from datetime import datetime
-- from math import factorial
-- import subprocess
-- import re
-- import sys
--
-- ZOTERO_BASE = "http://127.0.0.1:23119/better-bibtex/cayw"
-- FENCES = {
-- "i": "idea",
-- "q": "question",
-- "n": "note",
-- "t": "thought",
-- }
--
-- def math_inline():
-- return vim.command_output('GetContext') == 'math_inline'
--
-- def math_block():
-- return vim.command_output('GetContext') == 'math_block'
--
-- def math():
-- return math_inline() or math_block()
--
-- def code_block():
-- return vim.command_output('GetContext') == 'pandocDelimitedCodeBlock'
--
-- def code_inline():
-- return vim.command_output('GetContext') == 'pandocNoFormatted'
--
-- def code():
-- return code_inline() or code_block()
--
-- def slugify(text):
-- return re.sub('\s+', '-', text.lower())
--
-- def linkify(text, link):
-- return f"[{text}]({link})"
--
-- def zot(action):
-- if action == "get_title":
-- cmd = f"curl -s '{ZOTERO_BASE}?format=json&selected=1' | jq '.[].title' -r"
-- elif action == "get_citekey":
-- cmd = f"curl -s '{ZOTERO_BASE}?format=pandoc&selected=1'"
-- elif action == "get_citekey_brackets":
-- cmd = f"curl -s '{ZOTERO_BASE}?format=pandoc&selected=1&brackets=1'"
-- elif action == "get_link":
-- link_path = re.sub("^@", "", zot("get_citekey"))
-- link_title = zot("get_title")
-- link = linkify(link_title, link_path)
-- return link
-- elif action == "get_file":
-- link_path = re.sub("^@", "", zot("get_citekey"))
-- link_title = zot("get_title")
-- link = linkify(link_title, f"file://{link_path}.pdf")
-- return link
-- else:
-- return "Zotero action not found"
-- return subprocess.check_output(cmd, shell=True).decode("utf-8").strip()
-- endglobal
--
-- snippet ctx "Context" i
-- `!p snip.rv = vim.command_output('GetContext')`
-- endsnippet
--
-- # General markdown
--
-- snippet ^h "Markdown header" r
-- # $1
-- endsnippet
--
-- snippet ^sec "Markdown section" r
-- ## $1
-- endsnippet
--
-- snippet ^ssec "Markdown subsection" r
-- ### $1
-- endsnippet
--
-- snippet ^sex "Markdown example section" r
-- ## Example: $1
-- endsnippet
--
-- snippet ^ssex "Markdown example subsection" r
-- ### Example: $1
-- endsnippet
--
-- # Zettelkasten templating
--
-- snippet nl
-- *nld*: $1
-- endsnippet
--
-- snippet eng
-- *eng*: $1
-- endsnippet
--
-- snippet fr
-- *fra*: $1
-- endsnippet
--
-- snippet (de
-- *deu*: $1
-- endsnippet
--
-- snippet (nl
-- (*nld*: $1)
-- endsnippet
--
-- snippet (eng
-- (*eng*: $1)
-- endsnippet
--
-- snippet (fr
-- (*fra*: $1)
-- endsnippet
--
-- snippet (de
-- (*deu*: $1)
-- endsnippet
--
-- snippet in
-- (In [$1]($2))$3
-- endsnippet
--
-- snippet liwhat "What?" A
-- `!p snip.rv = "* [What?](" + snip.basename + "_what)"`$1
-- endsnippet
--
-- snippet liwhy "Why?" A
-- `!p snip.rv = "* [Why?](" + snip.basename + "_why)"`$1
-- endsnippet
--
-- snippet < "Comment (html)"
-- <!-- $1 -->$2
-- endsnippet
--
-- snippet <. "Comment (html) ..." i
-- <!-- ... -->$1
-- endsnippet
--
-- snippet <t "Thought (html)" i
-- <!--:::thought
-- $1
-- :::-->
-- endsnippet
--
-- snippet <q "Question (html)" i
-- <!--:::question
-- $1
-- :::-->
-- endsnippet
--
-- snippet <i "Idea (html)" i
-- <!--:::idea
-- $1
-- :::-->
-- endsnippet
--
-- snippet <n "Note (html)" i
-- <!--:::note
-- $1
-- :::-->
-- endsnippet
--
-- snippet td "Todo"
-- TODO${1:: $2}
-- endsnippet
--
-- snippet ref "References"
-- <!--references-->
-- endsnippet
--
-- snippet sort "Sort"
-- <!--sort-->
-- endsnippet
--
-- snippet foot "Footnotes"
-- <!--footnotes-->
-- [^0]:
-- endsnippet
--
-- snippet def "Definition"
-- **Definition${1:: $2}**${3: [${4:citation}${5:, ${6:pointer}}]}
--
-- $7
--
-- ___
-- endsnippet
--
-- snippet theo "Theorem"
-- **Theorem${1:: $2}**${3: [${4:citation}${5:, ${6:pointer}}]}
--
-- $7
--
-- ${8/(\w+).*/**Theorem** \n\n.../}
--
-- ___
-- endsnippet
--
-- snippet prop "Property"
-- **Property $1** [@]
--
-- $2
--
-- ___
-- endsnippet
--
-- snippet lemm "Lemma"
-- **Lemma $1** [@]
--
-- $2
--
-- ___
-- endsnippet
--
-- snippet coro "Corollary"
-- **Corollary $1** [@]
--
-- $2
--
-- ___
-- endsnippet
--
-- # Greek symbols
--
-- context "math()"
-- snippet alpha "Alpha"
-- \\alpha
-- endsnippet
--
-- context "math()"
-- snippet beta "Beta"
-- \\beta
-- endsnippet
--
-- context "math()"
-- snippet gamma "Gamma"
-- \\gamma
-- endsnippet
--
-- context "math()"
-- snippet delta "Delta"
-- \\delta
-- endsnippet
--
-- context "math()"
-- snippet epsilon "Epsilon"
-- \\epsilonilon
-- endsnippet
--
-- context "math()"
-- snippet zeta "Zeta"
-- \\zeta
-- endsnippet
--
-- context "math()"
-- snippet eta "Eta"
-- \\eta
-- endsnippet
--
-- context "math()"
-- snippet theta "Theta"
-- \\theta
-- endsnippet
--
-- context "math()"
-- snippet iota "Iota"
-- \\iota
-- endsnippet
--
-- context "math()"
-- snippet kappa "Kappa"
-- \\kappa
-- endsnippet
--
-- context "math()"
-- snippet lambda "Lambda" i
-- \\lambda
-- endsnippet
--
-- context "math()"
-- snippet mu "Mu"
-- \\mu
-- endsnippet
--
-- context "math()"
-- snippet nu "Nu"
-- \\nu
-- endsnippet
--
-- context "math()"
-- snippet xi "Xi"
-- \\xi
-- endsnippet
--
-- context "math()"
-- snippet omicron "Omicron"
-- \\omicron
-- endsnippet
--
-- context "math()"
-- snippet pi "Pi"
-- \\pi
-- endsnippet
--
-- context "math()"
-- snippet rho "Rho"
-- \\rho
-- endsnippet
--
-- context "math()"
-- snippet sigma "Sigma"
-- \\sigma
-- endsnippet
--
-- context "math()"
-- snippet tau "Tau"
-- \\tau
-- endsnippet
--
-- context "math()"
-- snippet upsilon "Upsilon"
-- \\upsilon
-- endsnippet
--
-- context "math()"
-- snippet phi "Phi"
-- \\phi
-- endsnippet
--
-- context "math()"
-- snippet chi "Chi"
-- \\chi
-- endsnippet
--
-- context "math()"
-- snippet psi "Psi"
-- \\psi
-- endsnippet
--
-- context "math()"
-- snippet omega "Omega"
-- \\omega
-- endsnippet
--
-- context "math()"
-- snippet Gamma "Gamma"
-- \\Gamma
-- endsnippet
--
-- context "math()"
-- snippet Delta "Delta"
-- \\Delta
-- endsnippet
--
-- context "math()"
-- snippet Theta "Theta"
-- \\Theta
-- endsnippet
--
-- context "math()"
-- snippet Lambda "Lambda"
-- \\Lambda
-- endsnippet
--
-- context "math()"
-- snippet Xi "Xi"
-- \\Xi
-- endsnippet
--
-- context "math()"
-- snippet Pi "Pi"
-- \\Pi
-- endsnippet
--
-- context "math()"
-- snippet Sigma "Sigma"
-- \\Sigma
-- endsnippet
--
-- context "math()"
-- snippet Upsilon "Upsilon"
-- \\Upsilon
-- endsnippet
--
-- context "math()"
-- snippet Phi "Phi"
-- \\Phi
-- endsnippet
--
-- context "math()"
-- snippet Psi "Psi"
-- \\Psi
-- endsnippet
--
-- context "math()"
-- snippet Omega "Omega"
-- \\Omega
-- endsnippet
--
-- snippet asaw "Als en slechts als (woorden)" i
-- als en slechts als
-- endsnippet
--
-- snippet iffw "If and only if (words)" i
-- if and only if
-- endsnippet
--
-- snippet asas "Als en slechts als (shorthand)" i
-- **asa**
-- endsnippet
--
-- snippet iffs "If and only if (shorthand)" i
-- **iff**
-- endsnippet
--
-- snippet beg "Begin"
-- \begin{$1}
-- $2
-- \end{$1}
-- endsnippet
--
-- snippet align "" i
-- \begin{align}
-- $1
-- \end{align}
-- endsnippet
--
-- snippet cases "" i
-- \begin{cases}
-- $1 \\\\
-- $2
-- \end{cases}
-- $3
-- endsnippet
--
-- snippet tik "Tikzpicture" i
-- \begin{tikzpicture}
-- $1
-- \end{tikzpicture}
-- endsnippet
--
-- snippet matrix "Matrix" i
-- \begin{bmatrix}
-- $1
-- \end{bmatrix}
-- endsnippet
--
-- # Insert anything after m/M in math mode
--
-- snippet "(\b)m(.*)" "MathJax" r
-- `!p snip.rv = match.group(1) + "$" + match.group(2) + "$"`
-- endsnippet
--
-- snippet (\b)M(.*) "MathJax block" irw
-- $$
-- `!p snip.rv = match.group(2)`
-- $$
-- endsnippet
--
-- # Calligraphic letters
--
-- context "math()"
-- snippet c([A-z]) "Calligraphic A" r
-- `!p snip.rv = "\\mathcal{" + match.group(1) + "}"`$1
-- endsnippet
--
-- # Subscripts
--
-- context "math()"
-- snippet '([A-z])(\w+)' "Subscripts" irw
-- `!p snip.rv = match.group(1) + '_' + match.group(2) if len(match.group(2)) == 1 else match.group(1) + '_{' + match.group(2) + '}'`$1
-- endsnippet
--
-- # MathJax
--
-- snippet fa "For all" i
-- \forall
-- endsnippet
--
-- snippet frac "" i
-- \frac{$1}{$2}$3
-- endsnippet
--
-- snippet set "" i
-- \\{$1\\}$2
-- endsnippet
--
-- snippet N "" i
-- \mathbb{N}
-- endsnippet
--
-- snippet N0 "" i
-- \mathbb{N}_0
-- endsnippet
--
-- snippet N+ "" i
-- \mathbb{N}^+
-- endsnippet
--
-- snippet Z "" i
-- \mathbb{Z}
-- endsnippet
--
-- snippet Z0 "" i
-- \mathbb{Z}_0
-- endsnippet
--
-- snippet Z+ "" i
-- \mathbb{Z}^+
-- endsnippet
--
-- snippet R "" i
-- \mathbb{R}
-- endsnippet
--
-- snippet R0 "" i
-- \mathbb{R}_0
-- endsnippet
--
-- snippet R+ "" i
-- \mathbb{R}^+
-- endsnippet
--
-- snippet C "" i
-- \mathbb{C}
-- endsnippet
--
-- snippet lim "" i
-- \lim_{$1}$2
-- endsnippet
--
-- snippet limn "" i
-- \lim_{n \to \infty}$2
-- endsnippet
--
-- snippet binom "" i
-- \binom{$1}{$2}$3
-- endsnippet
--
-- snippet andmath "description" i
-- \text{ and }
-- endsnippet
--
-- snippet enmath "description" i
-- \text{ en }
-- endsnippet
--
-- snippet lra "MathJax: long right arrow" i
-- \longrightarrow
-- endsnippet
--
-- snippet Ra "MathJax: right arrow" i
-- \Rightarrow
-- endsnippet
--
-- snippet Im "MathJax: image operator" i
-- \operatorname{Im}
-- endsnippet
--
-- snippet ggd "Grootste gemene deler" i
-- \operatorname{ggd}
-- endsnippet
--
-- snippet fl "Floating point" i
-- \operatorname{fl}
-- endsnippet
--
-- snippet Var "Variance" i
-- \operatorname{Var}
-- endsnippet
--
-- snippet E "Expectation" i
-- \operatorname{E}
-- endsnippet
--
-- snippet Cov "Covariance" i
-- \operatorname{Cov}
-- endsnippet
--
-- context "math()" i
-- snippet ntup "Alpha"
-- (x_1, \ldots, x_n)
-- endsnippet
--
-- snippet mxn "Matrix" i
-- m \times n
-- endsnippet
--
-- snippet mxn- "Matrix" i
-- $m \times n$-matrix
-- endsnippet
--
-- snippet nxn "Matrix" i
-- n \times n
-- endsnippet
--
-- snippet det "Determinant" i
-- \operatorname{det}(${1:A})$2
-- endsnippet
--
-- snippet det| "Determinant alternative notation" i
-- |${1:A}|$2
-- endsnippet
--
-- snippet Span "Span" i
-- \operatorname{Span}\\{$1\\}$2
-- endsnippet
--
-- snippet Nul "Null" i
-- \operatorname{Nul}($1)$2
-- endsnippet
--
-- snippet Col "Column space" i
-- \operatorname{Col}($1)$2
-- endsnippet
--
-- snippet kern "Kernel" i
-- \operatorname{kern}($1)$2
-- endsnippet
--
-- context "math()"
-- snippet vec "Vector" i
-- \mathbf{$1}$2
-- endsnippet
--
-- context "math()"
-- snippet vec([A-z]) "Vector ..." r
-- `!p snip.rv = "\\mathbf{" + match.group(1) + "}"`$1
-- endsnippet
--
-- snippet v1tovp "Vectors v indexed from 1 to p"
-- \mathbf{v_1},...,\mathbf{v_p}$2
-- endsnippet
--
-- snippet a1toan "Vectors a indexed from 1 to n"
-- \mathbf{a_1},...,\mathbf{v_n}$2
-- endsnippet
--
-- snippet .. "Dot dot dot" i
-- \dots $1
-- endsnippet
--
-- snippet text "MathJax text" i
-- \text{$1}$2
-- endsnippet
--
-- snippet leq "Less than or equal to" i
-- \leq
-- endsnippet
--
-- snippet leq "Greater than or equal to" i
-- \geq
-- endsnippet
--
-- snippet eat "Evaluated at" i
-- {\biggr\rvert}_{$1}$2
-- endsnippet
--
-- snippet sketch "Link a sketch" i
-- [$1](file:///home/h/sketches/$2)
-- endsnippet
--
-- snippet deck "Get anki deck"
-- `get-anki-decks`
-- endsnippet
--
-- # snippet ` "Inline code" i
-- # `$1`
-- # endsnippet
--
-- # Escape backticks
-- snippet `` "Code block" bA
-- \`\`\`$1
-- $2
-- \`\`\`
-- endsnippet
--
-- snippet `tex "Latex block (see latex filter)" bA
-- \`\`\`{.tex}
-- $1
-- \`\`\`
-- endsnippet
--
-- snippet `tik "Tikz block (see tikz filter)" bA
-- \`\`\`{.tex}
-- \\begin{tikzpicture}
-- $1
-- \\end{tikzpicture}
-- \`\`\`
-- endsnippet
--
-- snippet task "Task" i
-- * [ ] $1 -- pro:$2
-- endsnippet
--
-- snippet "(\b)fn(\d+)" "" ir
-- `!p snip.rv = snip.basename + "_" + match.group(2).zfill(2)`$1
-- endsnippet
--
-- snippet "ch(\d+)" "Link chapter" ir
-- `!p
-- num_str = match.group(1).zfill(2)
-- title = 3*"."
-- link = snip.basename + "_" + num_str
-- snip.rv = num_str + ". " + linkify(title, link)
-- `
-- endsnippet
--
-- snippet "ch(\d+)to(\d+)" "Link chapters ... to ..." irA
-- `!p
-- for i in range(int(match.group(1)), int(match.group(2)) + 1):
-- num_str = str(i).zfill(2)
-- title = 3*"."
-- link = snip.basename + "_" + num_str
-- snip.rv += num_str + ". " + linkify(title, link) + "\n"
-- `
-- endsnippet
--
-- snippet "sec([\sA-z]+)" "Link section titled ..." r
-- `!p
-- snip.rv = "* " + linkify(match.group(1), f"{snip.basename}_{slugify(match.group(1))}")
-- `
-- endsnippet
--
-- snippet cp(\d+) "Comment current page (and date)" r
-- `!p snip.rv = "<!--" + datetime.now().strftime("%Y-%m-%d") + " p. " + match.group(1) + "-->"`
-- endsnippet
--
-- snippet (\d+)! "Factorial of ..." r
-- `!p snip.rv = factorial(int(match.group(1)))`
-- endsnippet
--
-- snippet d "Date"
-- `!p snip.rv = datetime.now().strftime("%Y-%m-%d")`
-- endsnippet
--
-- snippet :(\w*) "Fence" r
-- `!p snip.rv += ":::" + FENCES.get(match.group(1) or "", "") + "\n" `$1
-- `!p snip.rv += ":::"`$2
-- endsnippet
--
-- snippet \[(\w*) "Fence inline" ir
-- `!p snip.rv += "["`$1`!p snip.rv += "]{." + FENCES.get(match.group(1) or "", "") + "}"`$2
-- endsnippet
--
-- snippet ^eg "Example" r
-- E.g. $1
-- endsnippet
--
-- # E.g. after list (or list preceded by space)
-- snippet (\*\s|\*)eg "Example" r
-- * E.g. $1
-- endsnippet
--
-- # E.g. after dot (or dot preceded by space)
-- snippet (\.\s|\.)eg "Example" r
-- . E.g. $1
-- endsnippet
--
-- snippet (?<!^|\*\s|\*|\.\s|\.)eg "Example" r
-- e.g. $1
-- endsnippet
--
-- # Zettelkasten to Anki
--
-- snippet td "TARGET DECK: <Deck name>"
-- TARGET DECK: $1::$2
-- endsnippet
--
-- snippet clo "Cloze"
-- START
-- Cloze
-- ${0:${VISUAL}}$1
-- END
-- $2
-- endsnippet
--
-- snippet clos "Cloze start"
-- START
-- Cloze
-- $1
-- endsnippet
--
-- snippet cloe "Cloze end"
-- END
-- endsnippet
--
-- snippet clod
-- START
-- Cloze
-- **Definition$1**
--
-- $2
-- END
-- endsnippet
--
-- snippet clop
-- START
-- Cloze
-- **Property$1**
--
-- $2
-- END
-- endsnippet
--
-- snippet clot
-- START
-- Cloze
-- **Theorem$1**
--
-- $2
-- END
-- endsnippet
--
-- snippet clol
-- START
-- Cloze
-- **Lemma$1**
--
-- $2
-- END
-- endsnippet
--
-- snippet "c(\d+)" "Cloze <number>" r
-- {{c`!p snip.rv = int(match.group(1))`::${0:${VISUAL}}$1}}$2
-- endsnippet
--
-- # Match preceded by whitespace or start of line
-- snippet (?<!\S)z($|t|l|z|o|\.) "Zotero" r
-- `!p
--
-- ACTIONS = {
-- "": "get_citekey",
-- "t": "get_title",
-- "l": "get_link",
-- "z": "get_citekey_brackets",
-- "o": "get_file",
-- }
--
-- snip.rv = zot(ACTIONS.get(match.group(1)))
-- `
-- endsnippet
--
-- snippet zq "Zotero quote" r
-- `!p snip.rv = '>\n> --' + zot("get_citekey_brackets")`
-- endsnippet
--
-- snippet acz "According to ..."
-- `!p snip.rv = "According to " + zot("get_citekey")`
-- endsnippet
--
-- snippet azex "As ... explains"
-- `!p snip.rv = "As " + zot("get_citekey") + " explains, "`
-- endsnippet
--
-- snippet iz "In ..."
-- `!p snip.rv = "In " + zot("get_citekey")`
-- endsnippet
--
-- snippet izd "In ...'s definition"
-- `!p snip.rv = "In " + zot("get_citekey") + "'s definition, "`
-- endsnippet
--
-- snippet zintends "... intends to ..." A
-- `!p snip.rv = zot("get_citekey") + " intends to "`
-- endsnippet
--
-- snippet tfol "The following" wA
-- the following
-- endsnippet
--
-- snippet tfolt "It follows that" wA
-- it follows that
-- endsnippet
--
-- snippet ntfol "In the following" wA
-- in the following
-- endsnippet
--
-- snippet algos "algorithms" wA
-- algorithms
-- endsnippet
--
-- snippet algo "algorithm" wA
-- algorithm
-- endsnippet
--
-- # TODO: Make only available in tikzpicture
-- context "code()"
-- snippet q "State" w
-- \node[state] ($1) [] {$2};
-- endsnippet
--
-- context "code()"
-- snippet q0 "Initial state" w
-- \node[initial,state] ($1) {$2};
-- endsnippet
-- ```
-- Taken from https://ejmastnak.com/tutorials/vim-latex/luasnip/#anatomy
local get_visual = function(_, parent)
if #parent.snippet.env.LS_SELECT_RAW > 0 then

View File

@ -0,0 +1,24 @@
local ls = require("luasnip")
local s = ls.snippet
local t = ls.text_node
local i = ls.insert_node
return {
s("reqtrace", t({ "(#%require racket/trace)" })),
s("strln", t({ "(string-length " }), i(1), t({ ")" })),
s("impb", t({ "(import (rnrs base (6))", " (rnrs io simple" }), i(0), t({ ")" })),
s("def", {
t("(define "),
i(1),
t(" "),
i(2),
t(")"),
}),
s("defp", {
t("(define ("),
i(1),
t(" "),
i(2),
t("))"),
}),
}

View File

@ -0,0 +1,69 @@
local ls = require("luasnip")
local s = ls.snippet
local i = ls.insert_node
local t = ls.text_node
local f = ls.function_node
-- Inspired by https://castel.dev/post/lecture-notes-1/
ls.add_snippets("tex", {
s("beg", {
t("\\begin{"),
i(1),
t({ "}", "\t" }),
i(0),
t({ "", "\\end{" }),
f(function(args)
return args[1][1]
end, { 1 }),
t("}"),
}),
s("def", {
t("\\begin{definition}"),
t({ "", "\t" }),
i(0),
t({ "", "\\end{definition}" }),
}),
s("fig", {
t("\\begin{figure}"),
t({ "", "\t" }),
i(0),
t({ "", "\\end{figure}" }),
}),
s(
"time",
f(function()
return os.date("%H:%M")
end)
),
s("i", t("\\textit{"), i(0), t("}")),
s("b", t("\\textbf{"), i(0), t("}")),
s("center", {
t("\\begin{center}"),
t({ "", "" }),
i(0),
t({ "", "\\end{center}" }),
}),
s("pac", t("\\usepackage{"), i(0), t("}")),
s("foot", t("\\footnote{"), i(0), t("}")),
s("dm", {
t({ "\\[", "" }),
i(1),
t({ "", "\\]" }),
i(0),
}),
s("ch", t("\\chapter{"), i(0), t("}")),
s("sec", t("\\section{"), i(0), t("}")),
s("ssec", t("\\subsection{"), i(0), t("}")),
s("sssec", t("\\subsubsection{"), i(0), t("}")),
})

1
.config/user-dirs.conf Normal file
View File

@ -0,0 +1 @@
enabled=False

View File

@ -1,210 +0,0 @@
" YinYang - black/white color scheme
if (&background ==# "dark" && get(g:, "colors_name", "") ==# "yang")
runtime! colors/yin.vim
finish
endif
highlight clear
if exists("syntax_on")
syntax reset
endif
let g:colors_name = "yang"
let s:palette = {}
let s:palette.white = [254, '#f7f7f7']
let s:palette.gray15 = [253, '#e4e4e4']
let s:palette.gray14 = [250, '#bcbcbc']
let s:palette.gray13 = [249, '#b2b2b2']
let s:palette.gray12 = [248, '#a8a8a8']
let s:palette.gray11 = [247, '#9e9e9e']
let s:palette.gray10 = [246, '#949494']
let s:palette.gray09 = [245, '#8a8a8a']
let s:palette.gray08 = [244, '#808080']
let s:palette.gray07 = [243, '#767676']
let s:palette.gray06 = [242, '#666666']
let s:palette.gray05 = [241, '#606060']
let s:palette.gray04 = [240, '#585858']
let s:palette.gray03 = [239, '#4e4e4e']
let s:palette.gray02 = [238, '#444444']
let s:palette.gray01 = [235, '#262626']
let s:palette.black = [233, '#121212']
let s:palette.purple = [98, '#875fd7']
let s:palette.brown = [130, '#af5f00']
let s:palette.blue = [67, '#5f87af']
let s:palette.darkblue = [27, '#005fff']
let s:palette.green = [65, '#5f875f']
let s:palette.red = [88, '#870000']
let s:palette.orange = [166, '#5f5fd7']
if has("nvim")
let g:terminal_color_0 = s:palette.gray01[1]
let g:terminal_color_1 = s:palette.gray06[1]
let g:terminal_color_2 = s:palette.gray03[1]
let g:terminal_color_3 = s:palette.gray11[1]
let g:terminal_color_4 = s:palette.gray02[1]
let g:terminal_color_5 = s:palette.gray08[1]
let g:terminal_color_6 = s:palette.gray09[1]
let g:terminal_color_7 = s:palette.gray13[1]
let g:terminal_color_8 = s:palette.gray03[1]
let g:terminal_color_9 = s:palette.gray10[1]
let g:terminal_color_10 = s:palette.gray07[1]
let g:terminal_color_11 = s:palette.gray13[1]
let g:terminal_color_12 = s:palette.gray05[1]
let g:terminal_color_13 = s:palette.gray12[1]
let g:terminal_color_14 = s:palette.gray14[1]
let g:terminal_color_15 = s:palette.white[1]
elseif has("terminal")
let g:terminal_ansi_colors = [
\ s:palette.gray01[1],
\ s:palette.gray06[1],
\ s:palette.gray03[1],
\ s:palette.gray11[1],
\ s:palette.gray02[1],
\ s:palette.gray08[1],
\ s:palette.gray09[1],
\ s:palette.gray13[1],
\ s:palette.gray03[1],
\ s:palette.gray10[1],
\ s:palette.gray07[1],
\ s:palette.gray13[1],
\ s:palette.gray05[1],
\ s:palette.gray12[1],
\ s:palette.gray14[1],
\ s:palette.white[1]
\ ]
endif
function! s:hi(group, fg_color, bg_color, style)
let highlight_command = ['hi', a:group]
if !empty(a:fg_color)
let [ctermfg, guifg] = a:fg_color
call add(highlight_command, printf('ctermfg=%d guifg=%s', ctermfg, guifg))
endif
if !empty(a:bg_color)
let [ctermbg, guibg] = a:bg_color
call add(highlight_command, printf('ctermbg=%d guibg=%s', ctermbg, guibg))
endif
if !empty(a:style)
call add(highlight_command, printf('cterm=%s gui=%s', a:style, a:style))
endif
execute join(highlight_command, ' ')
endfunction
call s:hi('Normal', s:palette.gray05, s:palette.white, '')
set background=light
call s:hi('Constant', s:palette.gray11, [], 'bold')
call s:hi('String', s:palette.gray08, [], '')
call s:hi('Number', s:palette.gray10, [], '')
call s:hi('Identifier', s:palette.gray06, [], 'none')
call s:hi('Function', s:palette.gray06, [], '')
call s:hi('Statement', s:palette.gray08, [], 'bold')
call s:hi('Operator', s:palette.gray03, [], 'none')
call s:hi('Keyword', s:palette.gray10, [], '')
call s:hi('PreProc', s:palette.gray10, [], 'none')
call s:hi('Type', s:palette.gray09, [], 'bold')
call s:hi('Special', s:palette.gray10, [], '')
call s:hi('SpecialComment', s:palette.gray12, [], 'bold')
call s:hi('Title', s:palette.gray10, [], 'bold')
call s:hi('Todo', s:palette.purple, s:palette.white, '')
if has("nvim") || has("gui_running")
call s:hi('Comment', s:palette.gray12, [], 'italic')
else
call s:hi('Comment', s:palette.gray12, [], '')
endif
call s:hi('LineNr', s:palette.gray13, s:palette.gray15, 'none')
call s:hi('FoldColumn', s:palette.gray08, s:palette.gray15, 'none')
call s:hi('CursorLine', [], s:palette.gray15, 'none')
call s:hi('CursorLineNr', s:palette.gray06, s:palette.gray15, 'none')
call s:hi('Visual', s:palette.white, s:palette.gray06, '')
call s:hi('Search', s:palette.gray15, s:palette.gray03, 'none')
call s:hi('IncSearch', s:palette.white, s:palette.gray11, 'bold')
call s:hi('SpellBad', s:palette.red, s:palette.white, 'undercurl')
call s:hi('SpellCap', s:palette.red, s:palette.white, 'undercurl')
call s:hi('SpellLocal', s:palette.red, s:palette.white, 'undercurl')
call s:hi('SpellRare', s:palette.brown, s:palette.white, 'undercurl')
call s:hi('Error', s:palette.red, s:palette.white, 'bold')
call s:hi('ErrorMsg', s:palette.red, s:palette.white, '')
call s:hi('WarningMsg', s:palette.brown, s:palette.white, '')
call s:hi('ModeMsg', s:palette.gray10, [], '')
call s:hi('MoreMsg', s:palette.gray10, [], '')
call s:hi('MatchParen', s:palette.orange, s:palette.white, '')
call s:hi('Cursor', [], s:palette.gray12, '')
call s:hi('Underlined', s:palette.gray08, [], 'underline')
call s:hi('SpecialKey', s:palette.gray13, [], '')
call s:hi('NonText', s:palette.gray13, [], '')
call s:hi('Directory', s:palette.gray08, [], '')
call s:hi('Pmenu', s:palette.gray05, s:palette.gray14, 'none')
call s:hi('PmenuSbar', s:palette.white, s:palette.gray01, 'none')
call s:hi('PmenuSel', s:palette.gray14, s:palette.gray05, '')
call s:hi('PmenuThumb', s:palette.gray14, s:palette.gray03, 'none')
call s:hi('StatusLine', s:palette.gray03, s:palette.gray13, 'none')
call s:hi('StatusLineNC', s:palette.gray13, s:palette.gray15, 'none')
call s:hi('WildMenu', s:palette.gray08, [], '')
call s:hi('VertSplit', s:palette.gray13, s:palette.white, 'none')
call s:hi('DiffAdd', s:palette.white, s:palette.green, '')
call s:hi('DiffChange', s:palette.white, s:palette.blue, '')
call s:hi('DiffDelete', s:palette.white, s:palette.red, '')
call s:hi('DiffText', s:palette.white, s:palette.darkblue, '')
call s:hi('DiffAdded', s:palette.green, s:palette.white, '')
call s:hi('DiffChanged', s:palette.blue, s:palette.white, '')
call s:hi('DiffRemoved', s:palette.red, s:palette.white, '')
highlight! link Character Constant
highlight! link Float Number
highlight! link Boolean Number
highlight! link SignColumn FoldColumn
highlight! link ColorColumn FoldColumn
highlight! link CursorColumn CursorLine
highlight! link Folded LineNr
highlight! link Conceal Normal
highlight! link ErrorMsg Error
highlight! link Conditional Statement
highlight! link Repeat Statement
highlight! link Label Statement
highlight! link Exception Statement
highlight! link Include PreProc
highlight! link Define PreProc
highlight! link Macro PreProc
highlight! link PreCondit PreProc
highlight! link StorageClass Type
highlight! link Structure Type
highlight! link Typedef Type
highlight! link SpecialChar Special
highlight! link Tag Special
highlight! link Delimiter Special
highlight! link Debug Special
highlight! link Question Special
highlight! link VisualNOS Visual
highlight! link TabLine StatusLineNC
highlight! link TabLineFill StatusLineNC
highlight! link TabLineSel StatusLine

View File

@ -1,212 +0,0 @@
" YinYang - black/white color scheme
if (&background ==# "light" && get(g:, "colors_name", "") ==# "yin")
runtime! colors/yang.vim
finish
endif
highlight clear
if exists("syntax_on")
syntax reset
endif
let g:colors_name = "yin"
let s:palette = {}
let s:palette.blackest = [0, '#0c0c0c']
let s:palette.black = [233, '#111111']
let s:palette.gray01 = [235, '#1e1e1e']
let s:palette.gray02 = [238, '#444444']
let s:palette.gray03 = [239, '#4e4e4e']
let s:palette.gray04 = [240, '#585858']
let s:palette.gray05 = [242, '#666666']
let s:palette.gray06 = [243, '#767676']
let s:palette.gray07 = [244, '#808080']
let s:palette.gray08 = [245, '#8a8a8a']
let s:palette.gray09 = [246, '#949494']
let s:palette.gray10 = [247, '#9e9e9e']
let s:palette.gray11 = [248, '#a8a8a8']
let s:palette.gray12 = [249, '#b2b2b2']
let s:palette.gray13 = [250, '#bcbcbc']
let s:palette.gray14 = [251, '#c6c6c6']
let s:palette.gray15 = [254, '#e4e4e4']
let s:palette.white = [255, '#eeeeee']
let s:palette.comments = copy(s:palette.gray03)
let s:palette.purple = [62, '#5f5fd7']
let s:palette.brown = [94, '#875f00']
let s:palette.blue = [24, '#005f87']
let s:palette.lightblue = [31, '#00afff']
let s:palette.green = [29, '#00875f']
let s:palette.red = [88, '#870000']
let s:palette.orange = [166, '#5f5fd7']
if has("nvim")
let g:terminal_color_0 = s:palette.gray01[1]
let g:terminal_color_1 = s:palette.gray06[1]
let g:terminal_color_2 = s:palette.gray03[1]
let g:terminal_color_3 = s:palette.gray11[1]
let g:terminal_color_4 = s:palette.gray02[1]
let g:terminal_color_5 = s:palette.gray08[1]
let g:terminal_color_6 = s:palette.gray09[1]
let g:terminal_color_7 = s:palette.gray13[1]
let g:terminal_color_8 = s:palette.gray03[1]
let g:terminal_color_9 = s:palette.gray10[1]
let g:terminal_color_10 = s:palette.gray07[1]
let g:terminal_color_11 = s:palette.gray15[1]
let g:terminal_color_12 = s:palette.gray05[1]
let g:terminal_color_13 = s:palette.gray12[1]
let g:terminal_color_14 = s:palette.gray14[1]
let g:terminal_color_15 = s:palette.white[1]
elseif has("terminal")
let g:terminal_ansi_colors = [
\ s:palette.gray01[1],
\ s:palette.gray06[1],
\ s:palette.gray03[1],
\ s:palette.gray11[1],
\ s:palette.gray02[1],
\ s:palette.gray08[1],
\ s:palette.gray09[1],
\ s:palette.gray13[1],
\ s:palette.gray03[1],
\ s:palette.gray10[1],
\ s:palette.gray07[1],
\ s:palette.gray15[1],
\ s:palette.gray05[1],
\ s:palette.gray12[1],
\ s:palette.gray14[1],
\ s:palette.white[1]
\ ]
endif
function! s:hi(group, fg_color, bg_color, style)
let highlight_command = ['hi', a:group]
if !empty(a:fg_color)
let [ctermfg, guifg] = a:fg_color
call add(highlight_command, printf('ctermfg=%d guifg=%s', ctermfg, guifg))
endif
if !empty(a:bg_color)
let [ctermbg, guibg] = a:bg_color
call add(highlight_command, printf('ctermbg=%d guibg=%s', ctermbg, guibg))
endif
if !empty(a:style)
call add(highlight_command, printf('cterm=%s gui=%s', a:style, a:style))
endif
execute join(highlight_command, ' ')
endfunction
call s:hi('Normal', s:palette.gray11, s:palette.black, '')
set background=dark
call s:hi('Constant', s:palette.gray05, [], 'bold')
call s:hi('String', s:palette.gray10, [], '')
call s:hi('Number', s:palette.gray06, [], '')
call s:hi('Identifier', s:palette.gray08, [], 'none')
call s:hi('Function', s:palette.gray08, [], '')
call s:hi('Statement', s:palette.gray05, [], 'bold')
call s:hi('Operator', s:palette.gray05, [], 'none')
call s:hi('Keyword', s:palette.gray05, [], '')
call s:hi('PreProc', s:palette.gray07, [], 'none')
call s:hi('Type', s:palette.gray05, [], 'bold')
call s:hi('Special', s:palette.gray05, [], '')
call s:hi('SpecialComment', s:palette.comments, [], 'bold')
call s:hi('Title', s:palette.gray07, [], 'bold')
call s:hi('Todo', s:palette.purple, s:palette.black, '')
if has("nvim") || has("gui_running")
call s:hi('Comment', s:palette.comments, [], 'italic')
else
call s:hi('Comment', s:palette.comments, [], '')
endif
call s:hi('LineNr', s:palette.gray02, s:palette.black, 'none')
call s:hi('FoldColumn', s:palette.gray07, s:palette.gray01, 'none')
call s:hi('CursorLine', [], s:palette.gray01, 'none')
call s:hi('CursorLineNr', s:palette.gray14, s:palette.gray01, 'none')
call s:hi('Visual', s:palette.black, s:palette.gray06, '')
call s:hi('Search', s:palette.gray01, s:palette.gray11, 'none')
call s:hi('IncSearch', s:palette.black, s:palette.gray07, 'bold')
call s:hi('SpellBad', s:palette.red, s:palette.black, 'undercurl')
call s:hi('SpellCap', s:palette.red, s:palette.black, 'undercurl')
call s:hi('SpellLocal', s:palette.red, s:palette.black, 'undercurl')
call s:hi('SpellRare', s:palette.brown, s:palette.black, 'undercurl')
call s:hi('Error', s:palette.red, s:palette.black, 'bold')
call s:hi('ErrorMsg', s:palette.red, s:palette.black, '')
call s:hi('WarningMsg', s:palette.brown, s:palette.black, '')
call s:hi('ModeMsg', s:palette.gray10, [], '')
call s:hi('MoreMsg', s:palette.gray10, [], '')
call s:hi('MatchParen', s:palette.orange, s:palette.black, '')
call s:hi('Cursor', [], s:palette.gray12, '')
call s:hi('Underlined', s:palette.gray08, [], 'underline')
call s:hi('SpecialKey', s:palette.gray04, [], '')
call s:hi('NonText', s:palette.gray04, [], '')
call s:hi('Directory', s:palette.gray08, [], '')
call s:hi('Pmenu', s:palette.gray10, s:palette.gray03, 'none')
call s:hi('PmenuSbar', s:palette.black, s:palette.gray15, 'none')
call s:hi('PmenuSel', s:palette.gray03, s:palette.gray10, '')
call s:hi('PmenuThumb', s:palette.gray03, s:palette.gray09, 'none')
call s:hi('StatusLine', s:palette.gray12, s:palette.gray01, 'none')
call s:hi('StatusLineNC', s:palette.black, s:palette.black, 'none')
call s:hi('WildMenu', s:palette.gray08, [], '')
call s:hi('VertSplit', s:palette.gray03, s:palette.black, 'none')
call s:hi('DiffAdd', s:palette.blackest, s:palette.green, '')
call s:hi('DiffChange', s:palette.blackest, s:palette.blue, '')
call s:hi('DiffDelete', s:palette.blackest, s:palette.red, '')
call s:hi('DiffText', s:palette.black, s:palette.lightblue, '')
call s:hi('DiffAdded', s:palette.green, s:palette.black, '')
call s:hi('DiffChanged', s:palette.blue, s:palette.black, '')
call s:hi('DiffRemoved', s:palette.red, s:palette.black, '')
highlight! link Character Constant
highlight! link Float Number
highlight! link Boolean Number
highlight! link SignColumn FoldColumn
highlight! link ColorColumn FoldColumn
highlight! link CursorColumn CursorLine
highlight! link Folded LineNr
highlight! link Conceal Normal
highlight! link ErrorMsg Error
highlight! link Conditional Statement
highlight! link Repeat Statement
highlight! link Label Statement
highlight! link Exception Statement
highlight! link Include PreProc
highlight! link Define PreProc
highlight! link Macro PreProc
highlight! link PreCondit PreProc
highlight! link StorageClass Type
highlight! link Structure Type
highlight! link Typedef Type
highlight! link SpecialChar Special
highlight! link Tag Special
highlight! link Delimiter Special
highlight! link Debug Special
highlight! link Question Special
highlight! link VisualNOS Visual
highlight! link TabLine StatusLineNC
highlight! link TabLineFill StatusLineNC
highlight! link TabLineSel StatusLine

View File

@ -1 +0,0 @@
autocmd BufNewFile,BufReadPost *.pl set filetype=prolog

View File

@ -1 +0,0 @@
set mps+==:;

View File

@ -1,3 +0,0 @@
set termguicolors
set bg=light
hi Normal ctermbg=none guibg=NONE

View File

@ -1,44 +0,0 @@
" Leader keys
let mapleader = " "
let maplocalleader = ";"
" Splits & navigation
nm s <c-w> " Split horizontal
nm ss :sp<CR><c-w>w| " Split horizontal
nm sv :vs<CR><c-w>w| " Split vertical
nm sw <c-w>w| " Navigate splits
nm sh <c-w>h| "
nm sj <c-w>j| "
nm sk <c-w>k| "
nm sl <c-w>l| "
nn sH <c-w>8<| " Resize splits
nn sJ <c-w>8-| "
nn sK <c-w>8+| "
nn sL <c-w>8>| "
nn s= <c-w>=| " Equalize splits
" Open
nn sb :Lex<cr>| " File tree
nn <leader><leader> :noh<cr> |"
nn <leader>t :term<cr>| " Open terminal
" Remaps
ino <nowait> jj <esc>| " Normal now
nn <left> <nop>| " Hard mode
nn <down> <nop>| " "
nn <up> <nop>| " "
nn <right> <nop>| " "
ino <left> <nop>| " "
ino <down> <nop>| " "
ino <up> <nop>| " "
ino <right> <nop>| " "
" Search
nn <c-_> :noh<cr>| " map 'ctrl + /'
" Line numbers
nn <leader>n :set nu! rnu!<cr>
" Vim configuration
nn <leader>ec :vs $MYVIMRC<cr>
nn <leader>so :so %<cr>

View File

@ -1,7 +0,0 @@
snippet fne "Filename (+extension)" i
`!p snip.rv = snip.fn`
endsnippet
# snippet ^fn "Filename basename" ir
# `!p snip.rv = snip.basename`
endsnippet

View File

@ -1,72 +0,0 @@
snippet b1(\w+) "Border (1px)" r
`!p
import re
colors = {
'r': 'red',
'g': 'green',
'b': 'blue',
'y': 'yellow',
'o': 'orange',
'p': 'purple',
'c': 'cyan',
'm': 'magenta',
'w': 'white',
}
color = colors.get(match.group(1), 'black')
snip.rv = f"border: 1px solid {color};"
`$0
endsnippet
snippet df "Use flexbox layout"
display: flex;
$0
endsnippet
snippet fr "Use row direction (flex)"
flex-direction: row;
$0
endsnippet
snippet fc "Use column direction (flex)"
flex-direction: column;
$0
endsnippet
snippet dfr "Use flexbox layout in row direction"
display: flex;
flex-direction: row;
$0
endsnippet
snippet dfr "Use flexbox layout in column direction"
display: flex;
flex-direction: column;
$0
endsnippet
snippet dg "Use CSS grid layout"
display: grid;
$0
endsnippet
snippet db "Use block layout"
display: block;
$0
endsnippet
snippet dn "Set display to 'none'"
display: none;
$0
endsnippet
snippet var "Use CSS variable"
var(--$1)$0
endsnippet
snippet m
margin: $0;
endsnippet
snippet p
padding: $0;
endsnippet

View File

@ -1,51 +0,0 @@
snippet ifdef
#ifdef GL_ES
precision mediump float;
#endif
endsnippet
snippet defpi
#define PI 3.14159265359
endsnippet
snippet main
void main() {
$1
}
endsnippet
snippet uni
uniform $1;
endsnippet
snippet unif
uniform float $1;
endsnippet
snippet univ
uniform vec$1 float $2;
endsnippet
snippet univ2
uniform vec2 float $1;
endsnippet
snippet univ3
uniform vec3 float $1;
endsnippet
snippet univ4
uniform vec4 float $1;
endsnippet
snippet f
float
endsnippet
snippet v
vec
endsnippet
snippet ss
smoothstep($1)$2
endsnippet

View File

@ -1,11 +0,0 @@
snippet clg "console.log"
console.log($0)
endsnippet
snippet Js "JSON.stringify"
JSON.stringify($0)
endsnippet
snippet Jsf "JSON.stringify (formatted)"
JSON.stringify($0, 0, 2)
endsnippet

View File

@ -1,900 +0,0 @@
global !p
from datetime import datetime
from math import factorial
import subprocess
import re
import sys
ZOTERO_BASE = "http://127.0.0.1:23119/better-bibtex/cayw"
FENCES = {
"i": "idea",
"q": "question",
"n": "note",
"t": "thought",
}
def math_inline():
return vim.command_output('GetContext') == 'math_inline'
def math_block():
return vim.command_output('GetContext') == 'math_block'
def math():
return math_inline() or math_block()
def code_block():
return vim.command_output('GetContext') == 'pandocDelimitedCodeBlock'
def code_inline():
return vim.command_output('GetContext') == 'pandocNoFormatted'
def code():
return code_inline() or code_block()
def slugify(text):
return re.sub('\s+', '-', text.lower())
def linkify(text, link):
return f"[{text}]({link})"
def zot(action):
if action == "get_title":
cmd = f"curl -s '{ZOTERO_BASE}?format=json&selected=1' | jq '.[].title' -r"
elif action == "get_citekey":
cmd = f"curl -s '{ZOTERO_BASE}?format=pandoc&selected=1'"
elif action == "get_citekey_brackets":
cmd = f"curl -s '{ZOTERO_BASE}?format=pandoc&selected=1&brackets=1'"
elif action == "get_link":
link_path = re.sub("^@", "", zot("get_citekey"))
link_title = zot("get_title")
link = linkify(link_title, link_path)
return link
elif action == "get_file":
link_path = re.sub("^@", "", zot("get_citekey"))
link_title = zot("get_title")
link = linkify(link_title, f"file://{link_path}.pdf")
return link
else:
return "Zotero action not found"
return subprocess.check_output(cmd, shell=True).decode("utf-8").strip()
endglobal
snippet ctx "Context" i
`!p snip.rv = vim.command_output('GetContext')`
endsnippet
# General markdown
snippet ^h "Markdown header" r
# $1
endsnippet
snippet ^sec "Markdown section" r
## $1
endsnippet
snippet ^ssec "Markdown subsection" r
### $1
endsnippet
snippet ^sex "Markdown example section" r
## Example: $1
endsnippet
snippet ^ssex "Markdown example subsection" r
### Example: $1
endsnippet
# Zettelkasten templating
snippet nl
*nld*: $1
endsnippet
snippet eng
*eng*: $1
endsnippet
snippet fr
*fra*: $1
endsnippet
snippet (de
*deu*: $1
endsnippet
snippet (nl
(*nld*: $1)
endsnippet
snippet (eng
(*eng*: $1)
endsnippet
snippet (fr
(*fra*: $1)
endsnippet
snippet (de
(*deu*: $1)
endsnippet
snippet in
(In [$1]($2))$3
endsnippet
snippet liwhat "What?" A
`!p snip.rv = "* [What?](" + snip.basename + "_what)"`$1
endsnippet
snippet liwhy "Why?" A
`!p snip.rv = "* [Why?](" + snip.basename + "_why)"`$1
endsnippet
snippet < "Comment (html)"
<!-- $1 -->$2
endsnippet
snippet <. "Comment (html) ..." i
<!-- ... -->$1
endsnippet
snippet <t "Thought (html)" i
<!--:::thought
$1
:::-->
endsnippet
snippet <q "Question (html)" i
<!--:::question
$1
:::-->
endsnippet
snippet <i "Idea (html)" i
<!--:::idea
$1
:::-->
endsnippet
snippet <n "Note (html)" i
<!--:::note
$1
:::-->
endsnippet
snippet td "Todo"
TODO${1:: $2}
endsnippet
snippet ref "References"
<!--references-->
endsnippet
snippet sort "Sort"
<!--sort-->
endsnippet
snippet foot "Footnotes"
<!--footnotes-->
[^0]:
endsnippet
snippet def "Definition"
**Definition${1:: $2}**${3: [${4:citation}${5:, ${6:pointer}}]}
$7
___
endsnippet
snippet theo "Theorem"
**Theorem${1:: $2}**${3: [${4:citation}${5:, ${6:pointer}}]}
$7
${8/(\w+).*/**Theorem** \n\n.../}
___
endsnippet
snippet prop "Property"
**Property $1** [@]
$2
___
endsnippet
snippet lemm "Lemma"
**Lemma $1** [@]
$2
___
endsnippet
snippet coro "Corollary"
**Corollary $1** [@]
$2
___
endsnippet
# Greek symbols
context "math()"
snippet alpha "Alpha"
\\alpha
endsnippet
context "math()"
snippet beta "Beta"
\\beta
endsnippet
context "math()"
snippet gamma "Gamma"
\\gamma
endsnippet
context "math()"
snippet delta "Delta"
\\delta
endsnippet
context "math()"
snippet epsilon "Epsilon"
\\epsilonilon
endsnippet
context "math()"
snippet zeta "Zeta"
\\zeta
endsnippet
context "math()"
snippet eta "Eta"
\\eta
endsnippet
context "math()"
snippet theta "Theta"
\\theta
endsnippet
context "math()"
snippet iota "Iota"
\\iota
endsnippet
context "math()"
snippet kappa "Kappa"
\\kappa
endsnippet
context "math()"
snippet lambda "Lambda" i
\\lambda
endsnippet
context "math()"
snippet mu "Mu"
\\mu
endsnippet
context "math()"
snippet nu "Nu"
\\nu
endsnippet
context "math()"
snippet xi "Xi"
\\xi
endsnippet
context "math()"
snippet omicron "Omicron"
\\omicron
endsnippet
context "math()"
snippet pi "Pi"
\\pi
endsnippet
context "math()"
snippet rho "Rho"
\\rho
endsnippet
context "math()"
snippet sigma "Sigma"
\\sigma
endsnippet
context "math()"
snippet tau "Tau"
\\tau
endsnippet
context "math()"
snippet upsilon "Upsilon"
\\upsilon
endsnippet
context "math()"
snippet phi "Phi"
\\phi
endsnippet
context "math()"
snippet chi "Chi"
\\chi
endsnippet
context "math()"
snippet psi "Psi"
\\psi
endsnippet
context "math()"
snippet omega "Omega"
\\omega
endsnippet
context "math()"
snippet Gamma "Gamma"
\\Gamma
endsnippet
context "math()"
snippet Delta "Delta"
\\Delta
endsnippet
context "math()"
snippet Theta "Theta"
\\Theta
endsnippet
context "math()"
snippet Lambda "Lambda"
\\Lambda
endsnippet
context "math()"
snippet Xi "Xi"
\\Xi
endsnippet
context "math()"
snippet Pi "Pi"
\\Pi
endsnippet
context "math()"
snippet Sigma "Sigma"
\\Sigma
endsnippet
context "math()"
snippet Upsilon "Upsilon"
\\Upsilon
endsnippet
context "math()"
snippet Phi "Phi"
\\Phi
endsnippet
context "math()"
snippet Psi "Psi"
\\Psi
endsnippet
context "math()"
snippet Omega "Omega"
\\Omega
endsnippet
snippet asaw "Als en slechts als (woorden)" i
als en slechts als
endsnippet
snippet iffw "If and only if (words)" i
if and only if
endsnippet
snippet asas "Als en slechts als (shorthand)" i
**asa**
endsnippet
snippet iffs "If and only if (shorthand)" i
**iff**
endsnippet
snippet beg "Begin"
\begin{$1}
$2
\end{$1}
endsnippet
snippet align "" i
\begin{align}
$1
\end{align}
endsnippet
snippet cases "" i
\begin{cases}
$1 \\\\
$2
\end{cases}
$3
endsnippet
snippet tik "Tikzpicture" i
\begin{tikzpicture}
$1
\end{tikzpicture}
endsnippet
snippet matrix "Matrix" i
\begin{bmatrix}
$1
\end{bmatrix}
endsnippet
# Insert anything after m/M in math mode
snippet "(\b)m(.*)" "MathJax" r
`!p snip.rv = match.group(1) + "$" + match.group(2) + "$"`
endsnippet
snippet (\b)M(.*) "MathJax block" irw
$$
`!p snip.rv = match.group(2)`
$$
endsnippet
# Calligraphic letters
context "math()"
snippet c([A-z]) "Calligraphic A" r
`!p snip.rv = "\\mathcal{" + match.group(1) + "}"`$1
endsnippet
# Subscripts
context "math()"
snippet '([A-z])(\w+)' "Subscripts" irw
`!p snip.rv = match.group(1) + '_' + match.group(2) if len(match.group(2)) == 1 else match.group(1) + '_{' + match.group(2) + '}'`$1
endsnippet
# MathJax
snippet fa "For all" i
\forall
endsnippet
snippet frac "" i
\frac{$1}{$2}$3
endsnippet
snippet set "" i
\\{$1\\}$2
endsnippet
snippet N "" i
\mathbb{N}
endsnippet
snippet N0 "" i
\mathbb{N}_0
endsnippet
snippet N+ "" i
\mathbb{N}^+
endsnippet
snippet Z "" i
\mathbb{Z}
endsnippet
snippet Z0 "" i
\mathbb{Z}_0
endsnippet
snippet Z+ "" i
\mathbb{Z}^+
endsnippet
snippet R "" i
\mathbb{R}
endsnippet
snippet R0 "" i
\mathbb{R}_0
endsnippet
snippet R+ "" i
\mathbb{R}^+
endsnippet
snippet C "" i
\mathbb{C}
endsnippet
snippet lim "" i
\lim_{$1}$2
endsnippet
snippet limn "" i
\lim_{n \to \infty}$2
endsnippet
snippet binom "" i
\binom{$1}{$2}$3
endsnippet
snippet andmath "description" i
\text{ and }
endsnippet
snippet enmath "description" i
\text{ en }
endsnippet
snippet lra "MathJax: long right arrow" i
\longrightarrow
endsnippet
snippet Ra "MathJax: right arrow" i
\Rightarrow
endsnippet
snippet Im "MathJax: image operator" i
\operatorname{Im}
endsnippet
snippet ggd "Grootste gemene deler" i
\operatorname{ggd}
endsnippet
snippet fl "Floating point" i
\operatorname{fl}
endsnippet
snippet Var "Variance" i
\operatorname{Var}
endsnippet
snippet E "Expectation" i
\operatorname{E}
endsnippet
snippet Cov "Covariance" i
\operatorname{Cov}
endsnippet
context "math()" i
snippet ntup "Alpha"
(x_1, \ldots, x_n)
endsnippet
snippet mxn "Matrix" i
m \times n
endsnippet
snippet mxn- "Matrix" i
$m \times n$-matrix
endsnippet
snippet nxn "Matrix" i
n \times n
endsnippet
snippet det "Determinant" i
\operatorname{det}(${1:A})$2
endsnippet
snippet det| "Determinant alternative notation" i
|${1:A}|$2
endsnippet
snippet Span "Span" i
\operatorname{Span}\\{$1\\}$2
endsnippet
snippet Nul "Null" i
\operatorname{Nul}($1)$2
endsnippet
snippet Col "Column space" i
\operatorname{Col}($1)$2
endsnippet
snippet kern "Kernel" i
\operatorname{kern}($1)$2
endsnippet
context "math()"
snippet vec "Vector" i
\mathbf{$1}$2
endsnippet
context "math()"
snippet vec([A-z]) "Vector ..." r
`!p snip.rv = "\\mathbf{" + match.group(1) + "}"`$1
endsnippet
snippet v1tovp "Vectors v indexed from 1 to p"
\mathbf{v_1},...,\mathbf{v_p}$2
endsnippet
snippet a1toan "Vectors a indexed from 1 to n"
\mathbf{a_1},...,\mathbf{v_n}$2
endsnippet
snippet .. "Dot dot dot" i
\dots $1
endsnippet
snippet text "MathJax text" i
\text{$1}$2
endsnippet
snippet leq "Less than or equal to" i
\leq
endsnippet
snippet leq "Greater than or equal to" i
\geq
endsnippet
snippet eat "Evaluated at" i
{\biggr\rvert}_{$1}$2
endsnippet
snippet sketch "Link a sketch" i
[$1](file:///home/h/sketches/$2)
endsnippet
snippet deck "Get anki deck"
`get-anki-decks`
endsnippet
# snippet ` "Inline code" i
# `$1`
# endsnippet
# Escape backticks
snippet `` "Code block" bA
\`\`\`$1
$2
\`\`\`
endsnippet
snippet `tex "Latex block (see latex filter)" bA
\`\`\`{.tex}
$1
\`\`\`
endsnippet
snippet `tik "Tikz block (see tikz filter)" bA
\`\`\`{.tex}
\\begin{tikzpicture}
$1
\\end{tikzpicture}
\`\`\`
endsnippet
snippet task "Task" i
* [ ] $1 -- pro:$2
endsnippet
snippet "(\b)fn(\d+)" "" ir
`!p snip.rv = snip.basename + "_" + match.group(2).zfill(2)`$1
endsnippet
snippet "ch(\d+)" "Link chapter" ir
`!p
num_str = match.group(1).zfill(2)
title = 3*"."
link = snip.basename + "_" + num_str
snip.rv = num_str + ". " + linkify(title, link)
`
endsnippet
snippet "ch(\d+)to(\d+)" "Link chapters ... to ..." irA
`!p
for i in range(int(match.group(1)), int(match.group(2)) + 1):
num_str = str(i).zfill(2)
title = 3*"."
link = snip.basename + "_" + num_str
snip.rv += num_str + ". " + linkify(title, link) + "\n"
`
endsnippet
snippet "sec([\sA-z]+)" "Link section titled ..." r
`!p
snip.rv = "* " + linkify(match.group(1), f"{snip.basename}_{slugify(match.group(1))}")
`
endsnippet
snippet cp(\d+) "Comment current page (and date)" r
`!p snip.rv = "<!--" + datetime.now().strftime("%Y-%m-%d") + " p. " + match.group(1) + "-->"`
endsnippet
snippet (\d+)! "Factorial of ..." r
`!p snip.rv = factorial(int(match.group(1)))`
endsnippet
snippet d "Date"
`!p snip.rv = datetime.now().strftime("%Y-%m-%d")`
endsnippet
snippet :(\w*) "Fence" r
`!p snip.rv += ":::" + FENCES.get(match.group(1) or "", "") + "\n" `$1
`!p snip.rv += ":::"`$2
endsnippet
snippet \[(\w*) "Fence inline" ir
`!p snip.rv += "["`$1`!p snip.rv += "]{." + FENCES.get(match.group(1) or "", "") + "}"`$2
endsnippet
snippet ^eg "Example" r
E.g. $1
endsnippet
# E.g. after list (or list preceded by space)
snippet (\*\s|\*)eg "Example" r
* E.g. $1
endsnippet
# E.g. after dot (or dot preceded by space)
snippet (\.\s|\.)eg "Example" r
. E.g. $1
endsnippet
snippet (?<!^|\*\s|\*|\.\s|\.)eg "Example" r
e.g. $1
endsnippet
# Zettelkasten to Anki
snippet td "TARGET DECK: <Deck name>"
TARGET DECK: $1::$2
endsnippet
snippet clo "Cloze"
START
Cloze
${0:${VISUAL}}$1
END
$2
endsnippet
snippet clos "Cloze start"
START
Cloze
$1
endsnippet
snippet cloe "Cloze end"
END
endsnippet
snippet clod
START
Cloze
**Definition$1**
$2
END
endsnippet
snippet clop
START
Cloze
**Property$1**
$2
END
endsnippet
snippet clot
START
Cloze
**Theorem$1**
$2
END
endsnippet
snippet clol
START
Cloze
**Lemma$1**
$2
END
endsnippet
snippet "c(\d+)" "Cloze <number>" r
{{c`!p snip.rv = int(match.group(1))`::${0:${VISUAL}}$1}}$2
endsnippet
# Match preceded by whitespace or start of line
snippet (?<!\S)z($|t|l|z|o|\.) "Zotero" r
`!p
ACTIONS = {
"": "get_citekey",
"t": "get_title",
"l": "get_link",
"z": "get_citekey_brackets",
"o": "get_file",
}
snip.rv = zot(ACTIONS.get(match.group(1)))
`
endsnippet
snippet zq "Zotero quote" r
`!p snip.rv = '>\n> --' + zot("get_citekey_brackets")`
endsnippet
snippet acz "According to ..."
`!p snip.rv = "According to " + zot("get_citekey")`
endsnippet
snippet azex "As ... explains"
`!p snip.rv = "As " + zot("get_citekey") + " explains, "`
endsnippet
snippet iz "In ..."
`!p snip.rv = "In " + zot("get_citekey")`
endsnippet
snippet izd "In ...'s definition"
`!p snip.rv = "In " + zot("get_citekey") + "'s definition, "`
endsnippet
snippet zintends "... intends to ..." A
`!p snip.rv = zot("get_citekey") + " intends to "`
endsnippet
snippet tfol "The following" wA
the following
endsnippet
snippet tfolt "It follows that" wA
it follows that
endsnippet
snippet ntfol "In the following" wA
in the following
endsnippet
snippet algos "algorithms" wA
algorithms
endsnippet
snippet algo "algorithm" wA
algorithm
endsnippet
# TODO: Make only available in tikzpicture
context "code()"
snippet q "State" w
\node[state] ($1) [] {$2};
endsnippet
context "code()"
snippet q0 "Initial state" w
\node[initial,state] ($1) {$2};
endsnippet

View File

@ -1,20 +0,0 @@
snippet reqtrace "(#%require racket/trace)" b
(#%require racket/trace)
endsnippet
snippet strln "(string-length <string>)" b
(string-length $0)
endsnippet
snippet impb "Import rnrs base libraries" b
(import (rnrs base (6))
(rnrs io simple)$0)
endsnippet
snippet def "(define <name> <variable>)" b
(define $0 $1)
endsnippet
snippet defp "(define (<procedure-name> <arguments>))" b
(define ($0 $1))
endsnippet

View File

@ -1,19 +0,0 @@
extends html, javascript, css
snippet oM
onMount(() => $0)
endsnippet
snippet oD
onDestroy(() => $0)
endsnippet
snippet preJsf "JSON.stringify (formatted and wrapped)"
<pre>
{JSON.stringify($0, 0, 2)}
</pre>
endsnippet
snippet :g "Open :global("
:global(
endsnippet

View File

@ -1,78 +0,0 @@
#
# Inspired by https://castel.dev/post/lecture-notes-1/
#
snippet beg "begin{} / end{}" b
\begin{$1}
$0
\end{$1}
endsnippet
snippet def "begin{definition} / end{definition}" b
\begin{definition}
$0
\end{defintion}
endsnippet
snippet fig "begin{figure} / end{figure}" b
\begin{figure}
$0
\end{figure}
endsnippet
snippet time "Time"
`date +%R`
endsnippet
snippet i
\textit{$0}
endsnippet
snippet b
\textbf{$0}
endsnippet
snippet center
\begin{center}
$0
\end{center}
endsnippet
snippet pac
\usepackage{$0}
endsnippet
snippet foot
\footnote{$0}
endsnippet
# snippet m "Math" wA
# $${1}$`!p
# if t[2] and t[2][0] not in [',', '.', '?', '-', ' ']:
# snip.rv = ' '
# else:
# snip.rv = ''
# `$2
# endsnippet
snippet dm "Math" wA
\[
$1
\]$0
endsnippet
snippet ch
\chapter{$0}
endsnippet
snippet sec
\section{$0}
endsnippet
snippet ssec
\subsection{$0}
endsnippet
snippet sssec
\subsubsection{$0}
endsnippet

4
.vimrc
View File

@ -1,4 +0,0 @@
source ~/.vim/init/base.vim
source ~/.vim/init/mappings.vim
source ~/.vim/init/plugins.vim
source ~/.vim/init/colors.vim

View File

@ -8,3 +8,6 @@ bash <(curl -s https://git.hektormisplon.xyz/hektor/dots/raw/branch/master/.bin/
Note: will not set up *everything* (e.g. `/etc` configs, dependencies...), but
should get you up and running.
2025-10-04: I am migrating from Arch Linux to NixOS. For this transition, these
dotfiles are currently included as a subtree in my [NixOS repository](https://git.hektormisplon.xyz/hektor/nix).