diff --git a/modules/profiles/desktop.nix b/modules/profiles/desktop.nix index 7241498..29d9f23 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; - redshift.enable = true; + gammastep.enable = true; wireguard.enable = true; }; }; diff --git a/modules/programs/nvim/init.lua b/modules/programs/nvim/init.lua index 8f97399..d020a0e 100644 --- a/modules/programs/nvim/init.lua +++ b/modules/programs/nvim/init.lua @@ -69,34 +69,6 @@ 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. @@ -175,8 +147,6 @@ 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)" }, @@ -188,17 +158,6 @@ 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" }, @@ -206,9 +165,18 @@ local on_attach_def = function(_, bufnr) }, g = { name = "goto", - d = { "Lspsaga peek_definition", "definition" }, - t = { "Lspsaga peek_type_definition", "type defininition" }, - h = { "Lspsaga lsp_finder", "lsp finder" }, + 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" }, }, }, { buffer = bufnr, silent = true }) end @@ -226,7 +194,7 @@ local lspconfig_default_options = { ---@param options table ---@return nil local function lspconfig_setup(lsp, options) - local final_options = table_merge(lspconfig_default_options, options) + local final_options = vim.tbl_deep_extend("force", 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 52ae2e2..039104d 100644 --- a/modules/programs/nvim/keybinds.lua +++ b/modules/programs/nvim/keybinds.lua @@ -1,7 +1,7 @@ --- buffers +-- buffer require("which-key").register({ b = { - name = "buffers", + name = "buffer", b = { "Telescope buffers", "List buffers" }, d = { "bd", "Delete buffer" }, n = { "bnext", "Next buffer" }, @@ -9,6 +9,52 @@ 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 deleted file mode 100644 index 9959064..0000000 --- a/modules/programs/nvim/plugins/advanced-git-search-nvim.lua +++ /dev/null @@ -1,18 +0,0 @@ -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 d16d238..3cdce95 100644 --- a/modules/programs/nvim/plugins/gitsigns-nvim.lua +++ b/modules/programs/nvim/plugins/gitsigns-nvim.lua @@ -1 +1,22 @@ 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 new file mode 100644 index 0000000..3cc61c3 --- /dev/null +++ b/modules/programs/nvim/plugins/neo-tree-nvim.lua @@ -0,0 +1,195 @@ +-- 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 f2499fd..8a06dad 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 deleted file mode 100644 index a8634bc..0000000 --- a/modules/programs/nvim/plugins/nvim-tree-lua.lua +++ /dev/null @@ -1,10 +0,0 @@ --- 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 d83cec4..cfb87c8 100644 --- a/modules/programs/nvim/plugins/telescope-nvim.lua +++ b/modules/programs/nvim/plugins/telescope-nvim.lua @@ -1,9 +1,20 @@ require("which-key").register({ f = { - 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" }, + 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)" }, }, }, { prefix = "" }) diff --git a/modules/programs/nvim/plugins/telescope-zoxide.lua b/modules/programs/nvim/plugins/telescope-zoxide.lua index bb8f7f1..cd2c5af 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 = "find", - z = { "Telescope zoxide list", "find location" }, + name = "file/find", + z = { "Telescope zoxide list", "Find location (Zoxide)" }, }, }, { prefix = "" }) diff --git a/modules/programs/nvim/plugins/todo-comments-nvim.lua b/modules/programs/nvim/plugins/todo-comments-nvim.lua index ae7ceee..57fce71 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 new file mode 100644 index 0000000..9a98571 --- /dev/null +++ b/modules/programs/nvim/plugins/trouble-nvim.lua @@ -0,0 +1,38 @@ +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 new file mode 100644 index 0000000..f45d021 --- /dev/null +++ b/modules/programs/nvim/plugins/twilight-nvim.lua @@ -0,0 +1,3 @@ +require("twilight").setup({ + context = 20, +}) diff --git a/modules/programs/nvim/plugins/vim-startuptime.lua b/modules/programs/nvim/plugins/vim-startuptime.lua new file mode 100644 index 0000000..2091837 --- /dev/null +++ b/modules/programs/nvim/plugins/vim-startuptime.lua @@ -0,0 +1,2 @@ +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 new file mode 100644 index 0000000..bacce51 --- /dev/null +++ b/modules/programs/nvim/plugins/zen-mode-nvim.lua @@ -0,0 +1,4 @@ +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 d63a582..2ec3a7f 100644 --- a/modules/services/default.nix +++ b/modules/services/default.nix @@ -10,7 +10,7 @@ ./openconnect.nix ./picom.nix ./printing.nix - ./redshift.nix + ./gammastep.nix ./wireguard.nix ]; } diff --git a/modules/services/gammastep.nix b/modules/services/gammastep.nix new file mode 100644 index 0000000..d951c1d --- /dev/null +++ b/modules/services/gammastep.nix @@ -0,0 +1,17 @@ +{ 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 deleted file mode 100644 index 6e75b5e..0000000 --- a/modules/services/redshift.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ 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; - }; - }; -}