diff --git a/modules/profiles/desktop.nix b/modules/profiles/desktop.nix index 29d9f23..7241498 100644 --- a/modules/profiles/desktop.nix +++ b/modules/profiles/desktop.nix @@ -97,7 +97,7 @@ with lib; { mullvad.enable = true; openconnect.enable = true; printing.enable = true; - gammastep.enable = true; + redshift.enable = true; wireguard.enable = true; }; }; diff --git a/modules/programs/nvim/init.lua b/modules/programs/nvim/init.lua index d020a0e..8f97399 100644 --- a/modules/programs/nvim/init.lua +++ b/modules/programs/nvim/init.lua @@ -69,6 +69,34 @@ vim.api.nvim_create_autocmd("InsertEnter", { end, }) +---merge tables +---@param ... table[] +---@return table +local function table_merge(...) + local tables_to_merge = { ... } + assert(#tables_to_merge > 1, "There should be at least two tables to merge them") + + for k, t in ipairs(tables_to_merge) do + assert(type(t) == "table", string.format("Expected a table as function parameter %d", k)) + end + + local result = tables_to_merge[1] + + for i = 2, #tables_to_merge do + local from = tables_to_merge[i] + for k, v in pairs(from) do + if type(v) == "table" then + result[k] = result[k] or {} + result[k] = table_merge(result[k], v) + else + result[k] = v + end + end + end + + return result +end + local lsp_lines = require("lsp_lines") lsp_lines.setup() -- Disable virtual_text since it's redundant due to lsp_lines. @@ -147,6 +175,8 @@ local on_attach_def = function(_, bufnr) l = { name = "lsp", d = { "Lspsaga show_cursor_diagnostics", "open diagnostic window" }, + n = { "Lspsaga diagnostic_jump_next", "next error" }, + p = { "Lspsaga diagnostic_jump_prev", "prev error" }, c = { "Lspsaga code_action", "code action" }, r = { "Lspsaga rename", "rename" }, i = { "Lspsaga hover_doc ++keep", "show info (sticky)" }, @@ -158,6 +188,17 @@ local on_attach_def = function(_, bufnr) mode = { "n", "v" }, }, }, + w = { + name = "workspace", + a = { vim.lsp.buf.add_workspace_folder, "add workspace folder" }, + r = { vim.lsp.buf.remove_workspace_folder, "remove workspace folder" }, + l = { + function() + print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + end, + "list workspace folders", + }, + }, t = { name = "toggle", l = { lsp_lines.toggle, "lsp lines" }, @@ -165,18 +206,9 @@ local on_attach_def = function(_, bufnr) }, g = { name = "goto", - d = { "Lspsaga peek_definition", "Goto definition" }, - t = { "Lspsaga peek_type_definition", "Goto type defininition" }, - h = { "Lspsaga lsp_finder", "Lsp finder" }, - r = { "Telescope lsp_references", "Goto reference" }, - D = { vim.lsp.buf.declaration, "Goto declaration" }, - I = { "Telescope lsp_implementations", "Goto implementation" }, - }, - ["["] = { - d = { "Lspsaga diagnostic_jump_prev", "Previous diagnostic" }, - }, - ["]"] = { - d = { "Lspsaga diagnostic_jump_next", "Next diagnostic" }, + d = { "Lspsaga peek_definition", "definition" }, + t = { "Lspsaga peek_type_definition", "type defininition" }, + h = { "Lspsaga lsp_finder", "lsp finder" }, }, }, { buffer = bufnr, silent = true }) end @@ -194,7 +226,7 @@ local lspconfig_default_options = { ---@param options table ---@return nil local function lspconfig_setup(lsp, options) - local final_options = vim.tbl_deep_extend("force", lspconfig_default_options, options) + local final_options = table_merge(lspconfig_default_options, options) lspconfig[lsp].setup(final_options) end diff --git a/modules/programs/nvim/keybinds.lua b/modules/programs/nvim/keybinds.lua index 039104d..52ae2e2 100644 --- a/modules/programs/nvim/keybinds.lua +++ b/modules/programs/nvim/keybinds.lua @@ -1,7 +1,7 @@ --- buffer +-- buffers require("which-key").register({ b = { - name = "buffer", + name = "buffers", b = { "Telescope buffers", "List buffers" }, d = { "bd", "Delete buffer" }, n = { "bnext", "Next buffer" }, @@ -9,52 +9,6 @@ require("which-key").register({ }, }) --- window -require("which-key").register({ - w = { - name = "window", - ["|"] = { "v", "Split window horizontally" }, - ["-"] = { "s", "Split window vertically" }, - w = { "w", "Switch window" }, - d = { "c", "Delete window" }, - }, -}, { prefix = "" }) - --- fast window move -require("which-key").register({ - [""] = { "h", "Move window left" }, - [""] = { "j", "Move window down" }, - [""] = { "k", "Move window up" }, - [""] = { "l", "Move window right" }, -}) - --- tab -require("which-key").register({ - [""] = { - name = "tab", - [""] = { "tabnew", "New tab" }, - n = { "tabnext", "Next tab" }, - p = { "tabprevious", "Previous tab" }, - d = { "tabclose", "Close tab" }, - }, -}, { prefix = "" }) - --- file -require("which-key").register({ - f = { - name = "file/find", - n = { "enew", "New file" }, - }, -}, { prefix = "" }) - --- better descriptions for navigation -require("which-key").register({ - ["["] = { name = "prev" }, - ["]"] = { name = "next" }, - o = { name = "org" }, - x = { name = "diagnostics/quickfix" }, -}) - -- Clear search with require("which-key").register({ [""] = { "noh", "Escape and clear hlsearch", mode = { "n", "i" } }, diff --git a/modules/programs/nvim/plugins/advanced-git-search-nvim.lua b/modules/programs/nvim/plugins/advanced-git-search-nvim.lua new file mode 100644 index 0000000..9959064 --- /dev/null +++ b/modules/programs/nvim/plugins/advanced-git-search-nvim.lua @@ -0,0 +1,18 @@ +require("telescope").load_extension("advanced_git_search") +local advanced_git_search = require("telescope").extensions.advanced_git_search +vim.api.nvim_create_user_command( + "DiffCommitLine", + "lua require('telescope').extensions.advanced_git_search.diff_commit_line()", + { range = true } +) +require("which-key").register({ + g = { + name = "git", + b = { advanced_git_search.diff_branch_file, "diff branch file" }, + l = { vim.cmd.DiffCommitLine, "diff commit line", mode = "v" }, + f = { advanced_git_search.diff_commit_file, "diff commit file" }, + c = { advanced_git_search.search_log_content, "search log content" }, + C = { advanced_git_search.search_log_content_file, "search log content current file" }, + r = { advanced_git_search.checkout_reflog, "checkout reflog" }, + }, +}, { prefix = "" }) diff --git a/modules/programs/nvim/plugins/gitsigns-nvim.lua b/modules/programs/nvim/plugins/gitsigns-nvim.lua index 3cdce95..d16d238 100644 --- a/modules/programs/nvim/plugins/gitsigns-nvim.lua +++ b/modules/programs/nvim/plugins/gitsigns-nvim.lua @@ -1,22 +1 @@ require("gitsigns").setup() -require("which-key").register({ - ["["] = { - h = { "Gitsigns prev_hunk", "Previous hunk" }, - }, - ["]"] = { - h = { "Gitsigns next_hunk", "Next hunk" }, - }, -}) -require("which-key").register({ - h = { - name = "hunk", - s = { "Gitsigns stage_hunk", "Stage hunk", mode = { "n", "v" } }, - r = { "Gitsigns reset_hunk", "Reset hunk", mode = { "n", "v" } }, - S = { "Gitsigns stage_buffer", "Stage buffer" }, - R = { "Gitsigns reset_buffer", "Reset buffer" }, - u = { "Gitsigns undo_stage_hunk", "Undo stage hunk" }, - }, -}, { prefix = "g" }) -require("which-key").register({ - h = { ":Gitsigns select_hunk", "Gitsigns select hunk" }, -}, { prefix = "i", mode = { "o", "x" } }) diff --git a/modules/programs/nvim/plugins/neo-tree-nvim.lua b/modules/programs/nvim/plugins/neo-tree-nvim.lua deleted file mode 100644 index 3cc61c3..0000000 --- a/modules/programs/nvim/plugins/neo-tree-nvim.lua +++ /dev/null @@ -1,195 +0,0 @@ --- Unless you are still migrating, remove the deprecated commands from v1.x -vim.cmd([[ let g:neo_tree_remove_legacy_commands = 1 ]]) - -require("neo-tree").setup({ - close_if_last_window = true, -- Close Neo-tree if it is the last window left in the tab - popup_border_style = "rounded", - enable_git_status = true, - enable_diagnostics = true, - open_files_do_not_replace_types = { "terminal", "trouble", "qf" }, -- when opening files, do not use windows containing these filetypes or buftypes - sort_case_insensitive = false, -- used when sorting files and directories in the tree - sort_function = nil, -- use a custom function for sorting files and directories in the tree - -- sort_function = function (a,b) - -- if a.type == b.type then - -- return a.path > b.path - -- else - -- return a.type > b.type - -- end - -- end , -- this sorts files and directories descendantly - default_component_configs = { - container = { - enable_character_fade = true, - }, - indent = { - indent_size = 2, - padding = 1, -- extra padding on left hand side - -- indent guides - with_markers = true, - indent_marker = "│", - last_indent_marker = "└", - highlight = "NeoTreeIndentMarker", - -- expander config, needed for nesting files - with_expanders = nil, -- if nil and file nesting is enabled, will enable expanders - expander_collapsed = "", - expander_expanded = "", - expander_highlight = "NeoTreeExpander", - }, - icon = { - folder_closed = "", - folder_open = "", - folder_empty = "ﰊ", - -- The next two settings are only a fallback, if you use nvim-web-devicons and configure default icons there - -- then these will never be used. - default = "*", - highlight = "NeoTreeFileIcon", - }, - modified = { - symbol = "[+]", - highlight = "NeoTreeModified", - }, - name = { - trailing_slash = false, - use_git_status_colors = true, - highlight = "NeoTreeFileName", - }, - git_status = { - symbols = { - -- Change type - added = "", -- or "✚", but this is redundant info if you use git_status_colors on the name - modified = "", -- or "", but this is redundant info if you use git_status_colors on the name - deleted = "✖", -- this can only be used in the git_status source - renamed = "", -- this can only be used in the git_status source - -- Status type - untracked = "", - ignored = "", - unstaged = "", - staged = "", - conflict = "", - }, - }, - }, - window = { - position = "left", - width = 40, - mapping_options = { - noremap = true, - nowait = true, - }, - mappings = { - [""] = "open", - [""] = "revert_preview", - ["P"] = { "toggle_preview", config = { use_float = false } }, - ["S"] = "open_split", - ["s"] = "open_vsplit", - ["t"] = "open_tabnew", - ["C"] = "close_node", - ["z"] = "close_all_nodes", - ["a"] = { - "add", - -- this command supports BASH style brace expansion ("x{a,b,c}" -> xa,xb,xc). see `:h neo-tree-file-actions` for details - -- some commands may take optional config options, see `:h neo-tree-mappings` for details - config = { - show_path = "none", -- "none", "relative", "absolute" - }, - }, - ["A"] = "add_directory", -- also accepts the optional config.show_path option like "add". this also supports BASH style brace expansion. - ["d"] = "delete", - ["r"] = "rename", - ["y"] = "copy_to_clipboard", - ["x"] = "cut_to_clipboard", - ["p"] = "paste_from_clipboard", - ["c"] = "copy", -- takes text input for destination, also accepts the optional config.show_path option like "add": - ["m"] = "move", -- takes text input for destination, also accepts the optional config.show_path option like "add". - ["q"] = "close_window", - ["R"] = "refresh", - ["?"] = "show_help", - ["<"] = "prev_source", - [">"] = "next_source", - }, - }, - nesting_rules = {}, - filesystem = { - filtered_items = { - visible = false, -- when true, they will just be displayed differently than normal items - hide_dotfiles = true, - hide_gitignored = true, - hide_hidden = true, -- only works on Windows for hidden files/directories - hide_by_name = { - --"node_modules" - }, - hide_by_pattern = { -- uses glob style patterns - --"*.meta", - --"*/src/*/tsconfig.json", - }, - always_show = { -- remains visible even if other settings would normally hide it - --".gitignored", - }, - never_show = { -- remains hidden even if visible is toggled to true, this overrides always_show - --".DS_Store", - --"thumbs.db" - }, - never_show_by_pattern = { -- uses glob style patterns - --".null-ls_*", - }, - }, - follow_current_file = false, -- This will find and focus the file in the active buffer every - -- time the current file is changed while the tree is open. - group_empty_dirs = false, -- when true, empty folders will be grouped together - hijack_netrw_behavior = "disabled", -- netrw disabled, opening a directory opens neo-tree - -- in whatever position is specified in window.position - -- "open_current", -- netrw disabled, opening a directory opens within the - -- window like netrw would, regardless of window.position - -- "disabled", -- netrw left alone, neo-tree does not handle opening dirs - use_libuv_file_watcher = false, -- This will use the OS level file watchers to detect changes - -- instead of relying on nvim autocmd events. - window = { - mappings = { - [""] = "navigate_up", - ["."] = "set_root", - ["H"] = "toggle_hidden", - ["/"] = "fuzzy_finder", - ["D"] = "fuzzy_finder_directory", - ["#"] = "fuzzy_sorter", -- fuzzy sorting using the fzy algorithm - ["f"] = "filter_on_submit", - [""] = "clear_filter", - ["[g"] = "prev_git_modified", - ["]g"] = "next_git_modified", - }, - fuzzy_finder_mappings = { -- define keymaps for filter popup window in fuzzy_finder_mode - [""] = "move_cursor_up", - [""] = "move_cursor_down", - }, - }, - }, - buffers = { - follow_current_file = true, -- This will find and focus the file in the active buffer every - -- time the current file is changed while the tree is open. - group_empty_dirs = true, -- when true, empty folders will be grouped together - show_unloaded = true, - window = { - mappings = { - ["bd"] = "buffer_delete", - [""] = "navigate_up", - ["."] = "set_root", - }, - }, - }, - git_status = { - window = { - position = "float", - mappings = { - ["A"] = "git_add_all", - ["gu"] = "git_unstage_file", - ["ga"] = "git_add_file", - ["gr"] = "git_revert_file", - ["gc"] = "git_commit", - ["gp"] = "git_push", - ["gg"] = "git_commit_and_push", - }, - }, - }, -}) - -require("which-key").register({ - t = { "Neotree toggle reveal", "Neotree" }, -}, { prefix = "t", silent = true }) diff --git a/modules/programs/nvim/plugins/nvim-surround.lua b/modules/programs/nvim/plugins/nvim-surround.lua index 8a06dad..f2499fd 100644 --- a/modules/programs/nvim/plugins/nvim-surround.lua +++ b/modules/programs/nvim/plugins/nvim-surround.lua @@ -1 +1 @@ -require("nvim-surround").setup() +require("nvim-surround").setup({}) diff --git a/modules/programs/nvim/plugins/nvim-tree-lua.lua b/modules/programs/nvim/plugins/nvim-tree-lua.lua new file mode 100644 index 0000000..a8634bc --- /dev/null +++ b/modules/programs/nvim/plugins/nvim-tree-lua.lua @@ -0,0 +1,10 @@ +-- disable netrw at the very start of your init.lua (strongly advised) +vim.g.loaded_netrw = 1 +vim.g.loaded_netrwPlugin = 1 +-- set termguicolors to enable highlight groups +vim.opt.termguicolors = true +-- empty setup using defaults +require("nvim-tree").setup() +require("which-key").register({ + t = { "NvimTreeFindFileToggle", "nvim tree" }, +}, { prefix = "t", silent = true }) diff --git a/modules/programs/nvim/plugins/telescope-nvim.lua b/modules/programs/nvim/plugins/telescope-nvim.lua index cfb87c8..d83cec4 100644 --- a/modules/programs/nvim/plugins/telescope-nvim.lua +++ b/modules/programs/nvim/plugins/telescope-nvim.lua @@ -1,20 +1,9 @@ require("which-key").register({ f = { - name = "file/find", - f = { "Telescope find_files", "Find files" }, - b = { "Telescope buffers", "Find buffers" }, - r = { "Telescope oldfiles", "Find recent files" }, - }, - s = { - name = "search", - l = { "Telescope current_buffer_fuzzy_find", "Search lines" }, - g = { "Telescope live_grep", "Live grep" }, - c = { "Telescope command_history", "Command history" }, - C = { "Telescope commands", "Commands" }, - d = { "Telescope diagnostics", "Diagnostics" }, - h = { "Telescope help_tags", "Help tags" }, - k = { "Telescope keymaps", "Keymaps" }, - s = { "Telescope lsp_document_symbols", "Symbols (Document)" }, - S = { "Telescope lsp_workspace_symbols", "Symbols (Workspace)" }, + name = "find", + f = { "Telescope find_files", "find file" }, + l = { "Telescope current_buffer_fuzzy_find", "find line" }, + g = { "Telescope live_grep", "live grep" }, + b = { "Telescope buffers", "find buffer" }, }, }, { prefix = "" }) diff --git a/modules/programs/nvim/plugins/telescope-zoxide.lua b/modules/programs/nvim/plugins/telescope-zoxide.lua index cd2c5af..bb8f7f1 100644 --- a/modules/programs/nvim/plugins/telescope-zoxide.lua +++ b/modules/programs/nvim/plugins/telescope-zoxide.lua @@ -1,7 +1,7 @@ require("telescope").load_extension("zoxide") require("which-key").register({ f = { - name = "file/find", - z = { "Telescope zoxide list", "Find location (Zoxide)" }, + name = "find", + z = { "Telescope zoxide list", "find location" }, }, }, { prefix = "" }) diff --git a/modules/programs/nvim/plugins/todo-comments-nvim.lua b/modules/programs/nvim/plugins/todo-comments-nvim.lua index 57fce71..ae7ceee 100644 --- a/modules/programs/nvim/plugins/todo-comments-nvim.lua +++ b/modules/programs/nvim/plugins/todo-comments-nvim.lua @@ -1 +1 @@ -require("todo-comments").setup() +require("todo-comments").setup({}) diff --git a/modules/programs/nvim/plugins/trouble-nvim.lua b/modules/programs/nvim/plugins/trouble-nvim.lua deleted file mode 100644 index 9a98571..0000000 --- a/modules/programs/nvim/plugins/trouble-nvim.lua +++ /dev/null @@ -1,38 +0,0 @@ -require("trouble").setup() -require("which-key").register({ - x = { "TroubleToggle document_diagnostics", "Document Diagnostics (Trouble)" }, - X = { "TroubleToggle workspace_diagnostics", "Workspace Diagnostics (Troule)" }, - l = { "TroubleToggle loclist", "Location List (Trouble)" }, - q = { "TroubleToggle quickfix", "Quickfix List (Trouble)" }, - t = { "TodoTrouble", "Todo (Trouble)" }, - T = { "TodoTrouble keywords=TODO,FIX,FIXME", "Todo/Fix/Fixme (Trouble)" }, -}, { prefix = "x" }) -require("which-key").register({ - t = { "TodoTelescope", "Todo" }, -}, { prefix = "s" }) -require("which-key").register({ - ["["] = { - q = { - function() - if require("trouble").is_open() then - require("trouble").previous({ skip_groups = true, jump = true }) - else - vim.cmd.cprev() - end - end, - "Previous trouble/quickfix item", - }, - }, - ["]"] = { - q = { - function() - if require("trouble").is_open() then - require("trouble").next({ skip_groups = true, jump = true }) - else - vim.cmd.cnext() - end - end, - "Next trouble/quickfix item", - }, - }, -}) diff --git a/modules/programs/nvim/plugins/twilight-nvim.lua b/modules/programs/nvim/plugins/twilight-nvim.lua deleted file mode 100644 index f45d021..0000000 --- a/modules/programs/nvim/plugins/twilight-nvim.lua +++ /dev/null @@ -1,3 +0,0 @@ -require("twilight").setup({ - context = 20, -}) diff --git a/modules/programs/nvim/plugins/vim-startuptime.lua b/modules/programs/nvim/plugins/vim-startuptime.lua deleted file mode 100644 index 2091837..0000000 --- a/modules/programs/nvim/plugins/vim-startuptime.lua +++ /dev/null @@ -1,2 +0,0 @@ -vim.g.startuptime_tries = 10 -vim.g.startuptime_exe_path = "vim" diff --git a/modules/programs/nvim/plugins/zen-mode-nvim.lua b/modules/programs/nvim/plugins/zen-mode-nvim.lua deleted file mode 100644 index bacce51..0000000 --- a/modules/programs/nvim/plugins/zen-mode-nvim.lua +++ /dev/null @@ -1,4 +0,0 @@ -require("zen-mode").setup() -require("which-key").register({ - z = { "ZenMode", "Zen mode" }, -}, { prefix = "t" }) diff --git a/modules/services/default.nix b/modules/services/default.nix index 2ec3a7f..d63a582 100644 --- a/modules/services/default.nix +++ b/modules/services/default.nix @@ -10,7 +10,7 @@ ./openconnect.nix ./picom.nix ./printing.nix - ./gammastep.nix + ./redshift.nix ./wireguard.nix ]; } diff --git a/modules/services/gammastep.nix b/modules/services/gammastep.nix deleted file mode 100644 index d951c1d..0000000 --- a/modules/services/gammastep.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ config, lib, pkgs, ... }: - -with lib; -let - cfg = config.my.services.gammastep; -in -{ - options.my.services.gammastep.enable = mkEnableOption "gammastep"; - - config = lib.mkIf cfg.enable { - home-manager.users.moritz.services.gammastep = { - enable = true; - latitude = 52.3; - longitude = 12.4; - }; - }; -} diff --git a/modules/services/redshift.nix b/modules/services/redshift.nix new file mode 100644 index 0000000..6e75b5e --- /dev/null +++ b/modules/services/redshift.nix @@ -0,0 +1,17 @@ +{ config, lib, pkgs, ... }: + +with lib; +let + cfg = config.my.services.redshift; +in +{ + options.my.services.redshift.enable = mkEnableOption "redshift"; + + config = lib.mkIf cfg.enable { + services.redshift.enable = true; + location = { + latitude = 52.3; + longitude = 12.4; + }; + }; +}