From 4d7caf0abecbd29759eabe7748fa702dc7ebb8c4 Mon Sep 17 00:00:00 2001 From: Martin Date: Thu, 10 Jul 2025 20:03:17 +0200 Subject: [PATCH] Sync config for all systems --- nix/user/dev.nix | 4 ++++ nix/user/git.nix | 15 +++++++++++++ nix/user/nvim.nix | 1 + nix/user/sh.nix | 24 +++++++++++++++----- nix/user/task.nix | 28 +++++++++++++++++++++-- nix/user/tmux.nix | 5 +++++ nvim/base.lua | 3 ++- nvim/filetype.lua | 57 +++++++++++++++++++++++++++++++++++++++++++++-- nvim/keymaps.lua | 18 +++++++++++++-- nvim/plugins.lua | 56 +++++++++++++++++++++++++++------------------- 10 files changed, 176 insertions(+), 35 deletions(-) diff --git a/nix/user/dev.nix b/nix/user/dev.nix index de91faf..384df76 100644 --- a/nix/user/dev.nix +++ b/nix/user/dev.nix @@ -6,4 +6,8 @@ enableZshIntegration = true; nix-direnv.enable = true; }; + + home.packages = with pkgs; [ + visidata + ]; } diff --git a/nix/user/git.nix b/nix/user/git.nix index 366588f..ff59b05 100644 --- a/nix/user/git.nix +++ b/nix/user/git.nix @@ -61,4 +61,19 @@ ".envrc" ]; }; + + programs.lazygit = { + enable = true; + settings = { + theme.lightTheme = "true"; + git = { + log = { + format = "%C(yellow)%h%Creset %C(bold blue)<%an>%Creset %s %Cgreen(%cr)%Creset"; + graph = "true"; + }; + }; + }; + }; + + programs.jujutsu.enable = true; } diff --git a/nix/user/nvim.nix b/nix/user/nvim.nix index 167d502..d6225a5 100644 --- a/nix/user/nvim.nix +++ b/nix/user/nvim.nix @@ -59,6 +59,7 @@ img-clip-nvim markdown-preview-nvim vim-markdown + plantuml-syntax bullets-vim obsidian-nvim nvim-dap diff --git a/nix/user/sh.nix b/nix/user/sh.nix index b617aa7..f20c75f 100644 --- a/nix/user/sh.nix +++ b/nix/user/sh.nix @@ -51,10 +51,11 @@ HISTIGNORE='&:[ ]*:exit:ls:bg:fg:history:clear' unsetopt beep - # Rustup initialization - export RUSTUP_HOME="$HOME/.rustup" - export CARGO_HOME="$HOME/.cargo" - [ -f "$CARGO_HOME/env" ] && . "$CARGO_HOME/env" + if [[ "$(uname -s)" == "Darwin" ]]; then + export RUSTUP_HOME="$HOME/.rustup" + export CARGO_HOME="$HOME/.cargo" + [ -f "$CARGO_HOME/env" ] && . "$CARGO_HOME/env" + fi; ''; }; @@ -79,6 +80,7 @@ programs.bat.enable = true; programs.ripgrep.enable = true; programs.btop.enable = true; + programs.ranger.enable = true; home.packages = with pkgs; [ fd @@ -87,7 +89,7 @@ ripgrep-all viddy duf - (python313.withPackages(ps: [ ps.llm ps.llm-anthropic ps.llm-gemini ])) + (python3.withPackages(ps: [ ps.llm ps.llm-gemini ])) #nerdfonts ]; @@ -95,4 +97,16 @@ BAT_THEME = "Coldark-Cold"; } ]; + + home.shellAliases = lib.mkMerge [ + { + lst = "lsd --tree"; + } + + # This is the correct way to use lib.mkIf within lib.mkMerge + # (lib.mkIf pkgs.stdenv.targetPlatform.isWindows { + (lib.mkIf (lib.strings.hasSuffix "windows" pkgs.system) { + open = "explorer.exe ."; + }) + ]; } diff --git a/nix/user/task.nix b/nix/user/task.nix index 3df5d50..0bede22 100644 --- a/nix/user/task.nix +++ b/nix/user/task.nix @@ -8,13 +8,37 @@ config = { weekstart = "monday"; + context.today.read = "(prio:H or +next)"; + context.today.write = "prio:H +next"; + + uda.energy.type="string"; + uda.energy.label="Energy"; + uda.energy.values="h,m,l"; + uda.energy.default="m"; + uda.priority.values = "H,M,,L"; urgency.uda.priority.L.coefficient = -0.5; urgency.user.tag.deferred.coefficient = -15.0; urgency.user.tag.cust.coefficient = 5.0; - context.today.read = "-deferred and (prio:H or +next)"; - context.today.write = "prio:H or +next"; + report.next.columns="id,start.age,entry.age,depends,priority,energy,project,tags,recur,scheduled.countdown,due.relative,until.remaining,description,urgency"; + report.next.labels="ID,Active,Age,Deps,P,E,Project,Tag,Recur,S,Due,Until,Description,Urg"; + report.next.filter="status:pending -WAITING -deferred"; + + report.deferred.columns="id,start.age,entry.age,depends,priority,energy,project,tags,recur,scheduled.countdown,due.relative,until.remaining,description,urgency"; + report.deferred.context="1"; + report.deferred.description="Deferred and waiting tasks"; + report.deferred.labels="ID,Active,Age,Deps,P,E,Project,Tag,Recur,S,Due,Until,Description,Urg"; + report.deferred.filter="status:pending +deferred"; + report.deferred.sort="urgency-"; + + report.low.columns="id,start.age,entry.age,depends,priority,energy,project,tags,recur,scheduled.countdown,due.relative,until.remaining,description,urgency"; + report.low.context="1"; + report.low.description="Low energy tasks"; + report.low.filter="status:pending -WAITING -deferred"; + report.low.labels="ID,Active,Age,Deps,P,E,Project,Tag,Recur,S,Due,Until,Description,Urg"; + report.low.sort="energy+,urgency-"; + context.deferred.read = "+deferred"; context.deferred.write = "+deferred"; context.customer.read = "+cust"; diff --git a/nix/user/tmux.nix b/nix/user/tmux.nix index 4d416fd..bb04de0 100644 --- a/nix/user/tmux.nix +++ b/nix/user/tmux.nix @@ -25,6 +25,11 @@ bind % split-window -h -c "#{pane_current_path}" bind c new-window -a -c "#{pane_current_path}" + bind C-s display-popup -E "zsh ~/bin/tmuxp_selector.sh" + bind C-g display-popup -E -d "#{pane_current_path}" -xC -yC -w 95% -h 95% "lazygit" + bind C-t display-popup -E -xC -yC -w 95% -h 95% "tasksquire" + bind C-n display-popup -E -xC -yC -w 95% -h 95% "vim /mnt/c/Users/marti/Documents/notes/Work/quick_notes.md" + ####################################### # status line ####################################### diff --git a/nvim/base.lua b/nvim/base.lua index b952b79..babed6d 100644 --- a/nvim/base.lua +++ b/nvim/base.lua @@ -26,7 +26,8 @@ vim.opt.smartcase = true vim.opt.hidden = true vim.opt.splitright = true vim.opt.splitbelow = true -vim.opt.swapfile = false +vim.opt.swapfile = true +vim.opt.directory= '~/.cache/nvim/swap//,$TEMP//,/tmp//' vim.opt.wildmode = 'longest,list' vim.opt.wildignore = vim.opt.wildignore + 'main,*.o,*.d,*.aux,*.bbl,*.lof,*.loa,*.blg,*.fdb_latexmk,*.fls,*.tdo,*.pdf,*.pyc' vim.opt.spell = false diff --git a/nvim/filetype.lua b/nvim/filetype.lua index 3c8d82e..779c8e4 100644 --- a/nvim/filetype.lua +++ b/nvim/filetype.lua @@ -1,3 +1,6 @@ +local capabilities = require('cmp_nvim_lsp').default_capabilities() +local lspconfig = require("lspconfig") + vim.api.nvim_create_augroup('FileTypeConfigs', { clear = true }) vim.api.nvim_create_autocmd('FileType', { @@ -32,7 +35,16 @@ vim.api.nvim_create_autocmd('FileType', { callback = function() require('dap-python').setup() - -- lspconfig.pyright.setup({ capabilities = capabilities }) + lspconfig.rust_analyzer.setup({ + capabilities = capabilities, + settings = { + ["rust-analyzer"] = { + checkOnSave = { + command = "clippy", + }, + }, + }, + }) require("conform").setup({ rust = {"rustfmt"}, @@ -45,6 +57,47 @@ vim.api.nvim_create_autocmd('FileType', { pattern = 'markdown', callback = function() lspconfig.marksman.setup({ capabilities = capabilities }) - require("todo-comments").setup() + end, +}) + +vim.api.nvim_create_autocmd('FileType', { + group = 'FileTypeConfigs', + pattern = 'dockerfile', + callback = function() + lspconfig.dockerls.setup({ capabilities = capabilities }) + lspconfig.docker_compose_language_service.setup({ capabilities = capabilities }) + end, +}) + +vim.api.nvim_create_autocmd('FileType', { + group = 'FileTypeConfigs', + pattern = 'cs', + callback = function() + lspconfig.omnisharp.setup({ capabilities = capabilities }) + end, +}) + +vim.api.nvim_create_autocmd('FileType', { + group = 'FileTypeConfigs', + pattern = 'yaml', + callback = function() + lspconfig.yamlls.setup({ capabilities = capabilities }) + lspconfig.docker_compose_language_service.setup({ capabilities = capabilities }) + end, +}) + +vim.api.nvim_create_autocmd('FileType', { + group = 'FileTypeConfigs', + pattern = {'c', 'cpp', 'objc', 'objcpp'}, + callback = function() + lspconfig.clangd.setup({ capabilities = capabilities }) + end, +}) + +vim.api.nvim_create_autocmd('FileType', { + group = 'FileTypeConfigs', + pattern = 'sql', + callback = function() + lspconfig.sqls.setup({ capabilities = capabilities }) end, }) diff --git a/nvim/keymaps.lua b/nvim/keymaps.lua index 8110e08..bcf6154 100644 --- a/nvim/keymaps.lua +++ b/nvim/keymaps.lua @@ -18,6 +18,16 @@ vim.keymap.set('t', '', 'h', {}) vim.keymap.set('t', '', 'j', {}) vim.keymap.set('t', '', 'k', {}) vim.keymap.set('t', '', 'l', {}) +vim.keymap.set('n', 'zm', '_|', { noremap = true, silent = true }) +vim.keymap.set('n', '', '5<', {}) +vim.keymap.set('n', '', '5+', {}) +vim.keymap.set('n', '', '5-', {}) +vim.keymap.set('n', '', '5>', {}) +vim.keymap.set('t', '', '5<', {}) +vim.keymap.set('t', '', '5+', {}) +vim.keymap.set('t', '', '5-', {}) +vim.keymap.set('t', '', '5>', {}) + vim.keymap.set('n', 's', ':call WindowSwap#EasyWindowSwap()', {}) @@ -53,8 +63,7 @@ vim.keymap.set({"n","x"}, "y", "(YankyYank)") vim.keymap.set('n', 'u', vim.cmd.UndotreeToggle) -- DAP -vim.keymap.set('n', 'db', function() require('dap').toggle_breakpoint() end) -vim.keymap.set('n', 'dB', function() require('dap').set_breakpoint() end) +vim.keymap.set('n', "db", function() require("dap").toggle_breakpoint() end) vim.keymap.set('n', "dB", function() require("dap").set_breakpoint(vim.fn.input('Breakpoint condition: ')) end) vim.keymap.set('n', "dc", function() require("dap").continue() end) vim.keymap.set('n', "da", function() require("dap").continue({ before = get_args }) end) @@ -72,5 +81,10 @@ vim.keymap.set('n', "ds", function() require("dap").session() end) vim.keymap.set('n', "dt", function() require("dap").terminate() end) vim.keymap.set('n', "dw", function() require("dap.ui.widgets").hover() end) +vim.keymap.set('n', "", function() require("dap").continue() end) +vim.keymap.set('n', "", function() require("dap").step_into() end) +vim.keymap.set('n', "", function() require("dap").step_over() end) +vim.keymap.set('n', "", function() require("dap").step_out() end) + -- nnoremap t :CtrlPBufTagAll -- nnoremap T :TagbarToggle diff --git a/nvim/plugins.lua b/nvim/plugins.lua index f54d3d3..a837ebe 100644 --- a/nvim/plugins.lua +++ b/nvim/plugins.lua @@ -98,16 +98,9 @@ cmp.setup.cmdline(':', { local capabilities = require('cmp_nvim_lsp').default_capabilities() local lspconfig = require("lspconfig") -- lspconfig.svelte.setup({ capabilities = capabilities }) --- lspconfig.omnisharp.setup({ capabilities = capabilities }) --- lspconfig.clangd.setup({ capabilities = capabilities }) --- lspconfig.dockerls.setup({ capabilities = capabilities }) --- lspconfig.docker_compose_language_service.setup({ capabilities = capabilities }) -- lspconfig.flow.setup({ capabilities = capabilities }) --- lspconfig.sqls.setup({ capabilities = capabilities }) --- lspconfig.yamlls.setup({ capabilities = capabilities }) -- lspconfig.nil_ls.setup({ capabilities = capabilities }) --- local capabilities = vim.lsp.protocol.make_client_capabilities() capabilities.textDocument.foldingRange = { dynamicRegistration = false, lineFoldingOnly = true @@ -282,7 +275,13 @@ require('gitsigns').setup { }, } +require("conform").setup({ + python = {"black"}, + rust = {"rustfmt"}, + go = {"gofmt"}, +}) require("trouble").setup() +require("todo-comments").setup() require("dapui").setup() require("nvim-dap-virtual-text").setup() @@ -301,7 +300,7 @@ dap.listeners.before.event_exited.dapui_config = function() dapui.close() end -require("obsidian").setup({ +if vim.fn.has("mac") then workspaces = { { name = "privat", @@ -311,10 +310,32 @@ require("obsidian").setup({ name = "joplin", path = "~/Documents/notes/fromjoplin", }, - }, + } + daily_notes = { + folder = "Journal", + date_format = "%Y-%m-%d", + default_tags = { "journal" }, + template = "daily.md" + } +elseif vim.fn.has("win32") then + workspaces = { + { + name = "work", + path = "/mnt/c/Users/marti/Documents/notes/Work", + }, + { + name = "privat", + path = "/mnt/c/Users/marti/Documents/notes/privat", + }, + } + daily_notes = {} +end + +require("obsidian").setup({ + workspaces = workspaces, templates = { folder = "_templates", - date_format = "%Y-%m-%d-%a", + date_format = "%Y-%m-%d %a", time_format = "%H:%M", }, ui = { @@ -324,6 +345,7 @@ require("obsidian").setup({ ["x"] = { char = "", hl_group = "ObsidianDone" }, ["~"] = { char = "󰰱", hl_group = "ObsidianTilde" }, ["!"] = { char = "", hl_group = "ObsidianImportant" }, + ["?"] = { char = "?", hl_group = "ObsidianImportant" } }, }, disable_frontmatter = false, @@ -335,8 +357,6 @@ require("obsidian").setup({ local out = { id = note.id, tags = note.tags } - -- `note.metadata` contains any manually added fields in the frontmatter. - -- So here we just make sure those fields are kept in the frontmatter. if note.metadata ~= nil and not vim.tbl_isempty(note.metadata) then for k, v in pairs(note.metadata) do out[k] = v @@ -346,18 +366,8 @@ require("obsidian").setup({ return out end, note_path_func = function(spec) - -- This is equivalent to the default behavior. local path = spec.dir / spec.title return path:with_suffix(".md") end, - daily_notes = { - -- Optional, if you keep daily notes in a separate directory. - folder = "Journal", - -- Optional, if you want to change the date format for the ID of daily notes. - date_format = "%Y-%m-%d", - -- Optional, default tags to add to each new daily note created. - default_tags = { "journal" }, - -- Optional, if you want to automatically insert a template from your template directory like 'daily.md' - template = "daily.md" - }, + daily_notes = daily_notes, })