From c0f766ea26f5fdf63949d5d43728a792d24647cf Mon Sep 17 00:00:00 2001 From: DACHXY Date: Wed, 29 Jan 2025 14:27:46 +0800 Subject: [PATCH] feat: add nvim dap --- flake.lock | 44 +++- flake.nix | 5 + home/config/ghostty/config | 6 +- home/config/nvim/lua/config/options.lua | 1 + home/config/nvim/lua/plugins/typescript.lua | 270 ++++++++++++++++++++ home/user/config.nix | 5 +- home/user/gtk.nix | 8 +- home/user/hypr/bind.nix | 2 + home/user/hypr/input.nix | 2 + home/user/hyprland.nix | 1 + home/user/music-production.nix | 6 + home/user/nvim.nix | 21 +- system/dev/dn-lap/boot.nix | 10 + system/dev/dn-lap/default.nix | 5 +- system/modules/nvidia.nix | 2 +- 15 files changed, 370 insertions(+), 18 deletions(-) create mode 100644 home/config/nvim/lua/plugins/typescript.lua create mode 100644 home/user/music-production.nix diff --git a/flake.lock b/flake.lock index fc3c27b..21cd68a 100644 --- a/flake.lock +++ b/flake.lock @@ -253,7 +253,7 @@ }, "flake-utils_3": { "inputs": { - "systems": "systems_5" + "systems": "systems_6" }, "locked": { "lastModified": 1726560853, @@ -621,6 +621,32 @@ "type": "github" } }, + "hyprtasking": { + "inputs": { + "hyprland": [ + "hyprland" + ], + "nixpkgs": [ + "hyprtasking", + "hyprland", + "nixpkgs" + ], + "systems": "systems_5" + }, + "locked": { + "lastModified": 1737823473, + "narHash": "sha256-XhYxMiTEHEJfOv5C2IGby32pg0Qvz+nVynl0IGbjChk=", + "owner": "raybbian", + "repo": "hyprtasking", + "rev": "17940931b59f76ff3b475230648fef261e1e94c8", + "type": "github" + }, + "original": { + "owner": "raybbian", + "repo": "hyprtasking", + "type": "github" + } + }, "hyprutils": { "inputs": { "nixpkgs": [ @@ -909,6 +935,7 @@ "hyprgrass": "hyprgrass", "hyprland": "hyprland", "hyprland-plugins": "hyprland-plugins", + "hyprtasking": "hyprtasking", "neovim-nightly-overlay": "neovim-nightly-overlay", "nix-index-database": "nix-index-database", "nixpkgs": "nixpkgs_3", @@ -997,6 +1024,21 @@ } }, "systems_5": { + "locked": { + "lastModified": 1689347949, + "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", + "owner": "nix-systems", + "repo": "default-linux", + "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default-linux", + "type": "github" + } + }, + "systems_6": { "locked": { "lastModified": 1681028828, "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", diff --git a/flake.nix b/flake.nix index f477cb1..73bb501 100644 --- a/flake.nix +++ b/flake.nix @@ -44,6 +44,11 @@ inputs.hyprland.follows = "hyprland"; }; + hyprtasking = { + url = "github:raybbian/hyprtasking"; + inputs.hyprland.follows = "hyprland"; + }; + neovim-nightly-overlay.url = "github:nix-community/neovim-nightly-overlay"; }; diff --git a/home/config/ghostty/config b/home/config/ghostty/config index f3d1f19..91a0f94 100644 --- a/home/config/ghostty/config +++ b/home/config/ghostty/config @@ -1,5 +1,5 @@ font-family = "CaskaydiaCove Nerd Font Mono" -font-size = 16 +font-size = 15 theme = catppuccin-macchiato unfocused-split-opacity = 0.85 @@ -14,5 +14,5 @@ mouse-hide-while-typing = true keybind = ctrl+shift+zero=toggle_tab_overview -custom-shader = ./shader/mnoise.glsl -custom-shader-animation = always +# custom-shader = ./shader/mnoise.glsl +# custom-shader-animation = always diff --git a/home/config/nvim/lua/config/options.lua b/home/config/nvim/lua/config/options.lua index cbe4cb6..17371fb 100644 --- a/home/config/nvim/lua/config/options.lua +++ b/home/config/nvim/lua/config/options.lua @@ -20,5 +20,6 @@ if package.config:sub(1, 1) == "\\" then vim.o.shell = GetAvailableWindowsShell() end +vim.g.lazyvim_python_lsp = "pyright" vim.g.lazyvim_python_ruff = "ruff" vim.g.lazyvim_eslint_auto_format = true diff --git a/home/config/nvim/lua/plugins/typescript.lua b/home/config/nvim/lua/plugins/typescript.lua new file mode 100644 index 0000000..933549f --- /dev/null +++ b/home/config/nvim/lua/plugins/typescript.lua @@ -0,0 +1,270 @@ +return { + recommended = function() + return LazyVim.extras.wants({ + ft = { + "javascript", + "javascriptreact", + "javascript.jsx", + "typescript", + "typescriptreact", + "typescript.tsx", + }, + root = { "tsconfig.json", "package.json", "jsconfig.json" }, + }) + end, + + -- correctly setup lspconfig + { + "neovim/nvim-lspconfig", + opts = { + -- make sure mason installs the server + servers = { + --- @deprecated -- tsserver renamed to ts_ls but not yet released, so keep this for now + --- the proper approach is to check the nvim-lspconfig release version when it's released to determine the server name dynamically + tsserver = { + enabled = false, + }, + ts_ls = { + enabled = false, + }, + vtsls = { + -- explicitly add default filetypes, so that we can extend + -- them in related extras + filetypes = { + "javascript", + "javascriptreact", + "javascript.jsx", + "typescript", + "typescriptreact", + "typescript.tsx", + }, + settings = { + complete_function_calls = true, + vtsls = { + enableMoveToFileCodeAction = true, + autoUseWorkspaceTsdk = true, + experimental = { + maxInlayHintLength = 30, + completion = { + enableServerSideFuzzyMatch = true, + }, + }, + }, + typescript = { + updateImportsOnFileMove = { enabled = "always" }, + suggest = { + completeFunctionCalls = true, + }, + inlayHints = { + enumMemberValues = { enabled = true }, + functionLikeReturnTypes = { enabled = true }, + parameterNames = { enabled = "literals" }, + parameterTypes = { enabled = true }, + propertyDeclarationTypes = { enabled = true }, + variableTypes = { enabled = false }, + }, + }, + }, + keys = { + { + "gD", + function() + local params = vim.lsp.util.make_position_params() + LazyVim.lsp.execute({ + command = "typescript.goToSourceDefinition", + arguments = { params.textDocument.uri, params.position }, + open = true, + }) + end, + desc = "Goto Source Definition", + }, + { + "gR", + function() + LazyVim.lsp.execute({ + command = "typescript.findAllFileReferences", + arguments = { vim.uri_from_bufnr(0) }, + open = true, + }) + end, + desc = "File References", + }, + { + "co", + LazyVim.lsp.action["source.organizeImports"], + desc = "Organize Imports", + }, + { + "cM", + LazyVim.lsp.action["source.addMissingImports.ts"], + desc = "Add missing imports", + }, + { + "cu", + LazyVim.lsp.action["source.removeUnused.ts"], + desc = "Remove unused imports", + }, + { + "cD", + LazyVim.lsp.action["source.fixAll.ts"], + desc = "Fix all diagnostics", + }, + { + "cV", + function() + LazyVim.lsp.execute({ command = "typescript.selectTypeScriptVersion" }) + end, + desc = "Select TS workspace version", + }, + }, + }, + }, + setup = { + --- @deprecated -- tsserver renamed to ts_ls but not yet released, so keep this for now + --- the proper approach is to check the nvim-lspconfig release version when it's released to determine the server name dynamically + tsserver = function() + -- disable tsserver + return true + end, + ts_ls = function() + -- disable tsserver + return true + end, + vtsls = function(_, opts) + LazyVim.lsp.on_attach(function(client, buffer) + client.commands["_typescript.moveToFileRefactoring"] = function(command, ctx) + ---@type string, string, lsp.Range + local action, uri, range = unpack(command.arguments) + + local function move(newf) + client.request("workspace/executeCommand", { + command = command.command, + arguments = { action, uri, range, newf }, + }) + end + + local fname = vim.uri_to_fname(uri) + client.request("workspace/executeCommand", { + command = "typescript.tsserverRequest", + arguments = { + "getMoveToRefactoringFileSuggestions", + { + file = fname, + startLine = range.start.line + 1, + startOffset = range.start.character + 1, + endLine = range["end"].line + 1, + endOffset = range["end"].character + 1, + }, + }, + }, function(_, result) + ---@type string[] + local files = result.body.files + table.insert(files, 1, "Enter new path...") + vim.ui.select(files, { + prompt = "Select move destination:", + format_item = function(f) + return vim.fn.fnamemodify(f, ":~:.") + end, + }, function(f) + if f and f:find("^Enter new path") then + vim.ui.input({ + prompt = "Enter move destination:", + default = vim.fn.fnamemodify(fname, ":h") .. "/", + completion = "file", + }, function(newf) + return newf and move(newf) + end) + elseif f then + move(f) + end + end) + end) + end + end, "vtsls") + -- copy typescript settings to javascript + opts.settings.javascript = + vim.tbl_deep_extend("force", {}, opts.settings.typescript, opts.settings.javascript or {}) + end, + }, + }, + }, + + { + "mfussenegger/nvim-dap", + optional = true, + opts = function() + local dap = require("dap") + if not dap.adapters["pwa-node"] then + require("dap").adapters["pwa-node"] = { + type = "server", + host = "localhost", + port = "${port}", + executable = { + command = "js-debug", + args = { + "${port}", + }, + }, + } + end + if not dap.adapters["node"] then + dap.adapters["node"] = function(cb, config) + if config.type == "node" then + config.type = "pwa-node" + end + local nativeAdapter = dap.adapters["pwa-node"] + if type(nativeAdapter) == "function" then + nativeAdapter(cb, config) + else + cb(nativeAdapter) + end + end + end + + local js_filetypes = { "typescript", "javascript", "typescriptreact", "javascriptreact" } + + local vscode = require("dap.ext.vscode") + vscode.type_to_filetypes["node"] = js_filetypes + vscode.type_to_filetypes["pwa-node"] = js_filetypes + + for _, language in ipairs(js_filetypes) do + if not dap.configurations[language] then + dap.configurations[language] = { + { + type = "pwa-node", + request = "launch", + name = "Launch file", + program = "${file}", + cwd = "${workspaceFolder}", + }, + { + type = "pwa-node", + request = "attach", + name = "Attach", + processId = require("dap.utils").pick_process, + cwd = "${workspaceFolder}", + }, + } + end + end + end, + }, + + -- Filetype icons + { + "echasnovski/mini.icons", + opts = { + file = { + [".eslintrc.js"] = { glyph = "󰱺", hl = "MiniIconsYellow" }, + [".node-version"] = { glyph = "", hl = "MiniIconsGreen" }, + [".prettierrc"] = { glyph = "", hl = "MiniIconsPurple" }, + [".yarnrc.yml"] = { glyph = "", hl = "MiniIconsBlue" }, + ["eslint.config.js"] = { glyph = "󰱺", hl = "MiniIconsYellow" }, + ["package.json"] = { glyph = "", hl = "MiniIconsGreen" }, + ["tsconfig.json"] = { glyph = "", hl = "MiniIconsAzure" }, + ["tsconfig.build.json"] = { glyph = "", hl = "MiniIconsAzure" }, + ["yarn.lock"] = { glyph = "", hl = "MiniIconsBlue" }, + }, + }, + }, +} diff --git a/home/user/config.nix b/home/user/config.nix index cf8ba5a..76bbabd 100644 --- a/home/user/config.nix +++ b/home/user/config.nix @@ -43,9 +43,12 @@ in xdg.mimeApps = { enable = true; + associations.added = { + "application/pdf" = [ browser ]; + }; defaultApplications = { "text/html" = browser; - "application/pdf" = browser; + "application/pdf" = [ browser ]; }; }; } diff --git a/home/user/gtk.nix b/home/user/gtk.nix index 9cdfb37..5936ee1 100644 --- a/home/user/gtk.nix +++ b/home/user/gtk.nix @@ -63,9 +63,9 @@ in }; xdg.configFile = { - "Kvantum/Catppuccin-Macchiato-Lavender/Catppuccin-Macchiato-Blue/Catppuccin-Macchiato-Blue.kvconfig".source = - "${pkgs.catppuccin-kvantum}/share/Kvantum/Catppuccin-Macchiato-Lavender/Cattpuccin-Macchiato-Blue.kvconfig"; - "Kvantum/Catppuccin-Macchiato-Lavender/Catppuccin-Macchiato-Blue/Catppuccin-Macchiato-Blue.svg".source = - "${pkgs.catppuccin-kvantum}/share/Kvantum/Catppuccin-Macchiato-Lavender/Cattpuccin-Macchiato-Blue.svg"; + "Kvantum/catppuccin-macchiato-Lavender/catppuccin-macchiato-lavender/catppuccin-macchiato-lavender.kvconfig".source = + "${pkgs.catppuccin-kvantum}/share/Kvantum/catppuccin-macchiato-lavender/cattpuccin-macchiato-lavender.kvconfig"; + "Kvantum/catppuccin-macchiato-Lavender/catppuccin-macchiato-lavender/catppuccin-macchiato-lavender.svg".source = + "${pkgs.catppuccin-kvantum}/share/Kvantum/catppuccin-macchiato-lavender/cattpuccin-macchiato-lavender.svg"; }; } diff --git a/home/user/hypr/bind.nix b/home/user/hypr/bind.nix index 3d38a46..b43bf46 100644 --- a/home/user/hypr/bind.nix +++ b/home/user/hypr/bind.nix @@ -73,6 +73,8 @@ in '',XF86MonBrightnessUp, exec, brightnessctl set ${brightnessStep}%+'' '',XF86AudioPrev, exec, playerctl previous'' '',XF86AudioNext, exec, playerctl next'' + ''${mainMod} CTRL, COMMA, exec, playerctl previous'' + ''${mainMod} CTRL, PERIOD, exec, playerctl next'' '',XF86AudioPlay, exec, playerctl play-pause'' '',XF86AudioStop, exec, playerctl stop'' '',XF86AudioMute, exec, wpctl set-mute @DEFAULT_SINK@ toggle'' diff --git a/home/user/hypr/input.nix b/home/user/hypr/input.nix index f2a8618..424abe8 100644 --- a/home/user/hypr/input.nix +++ b/home/user/hypr/input.nix @@ -9,6 +9,8 @@ follow_mouse = 1; accel_profile = "flat"; + kb_options = "caps:swapescape"; + touchpad = { natural_scroll = true; }; diff --git a/home/user/hyprland.nix b/home/user/hyprland.nix index c3908ff..9fa2eeb 100644 --- a/home/user/hyprland.nix +++ b/home/user/hyprland.nix @@ -69,6 +69,7 @@ in ]) ++ [ inputs.hyprgrass.packages.${system}.default + # inputs.hyprtasking.packages.${system}.hyprtasking ]; settings = diff --git a/home/user/music-production.nix b/home/user/music-production.nix new file mode 100644 index 0000000..9ea7874 --- /dev/null +++ b/home/user/music-production.nix @@ -0,0 +1,6 @@ +{ pkgs, ... }: +{ + home.packages = with pkgs; [ + bitwig-studio + ]; +} diff --git a/home/user/nvim.nix b/home/user/nvim.nix index 851346d..49ff30d 100644 --- a/home/user/nvim.nix +++ b/home/user/nvim.nix @@ -16,7 +16,7 @@ package = inputs.neovim-nightly-overlay.packages.${pkgs.system}.default; withPython3 = true; extraPython3Packages = ( - plugins: with plugins; [ + ps: with ps; [ debugpy ] ); @@ -51,6 +51,7 @@ clang-tools taplo zls + vscode-js-debug ]; plugins = with pkgs.vimPlugins; [ @@ -215,7 +216,7 @@ { import = "lazyvim.plugins.extras.lang.omnisharp" }, { import = "lazyvim.plugins.extras.lang.clangd" }, -- { import = "lazyvim.plugins.extras.lang.vue" }, - { import = "lazyvim.plugins.extras.lang.typescript" }, + -- { import = "lazyvim.plugins.extras.lang.typescript" }, { import = "lazyvim.plugins.extras.lang.python" }, { import = "lazyvim.plugins.extras.lang.rust" }, { import = "lazyvim.plugins.extras.lang.tailwind" }, @@ -236,7 +237,7 @@ { import = "lazyvim.plugins.extras.editor.refactoring" }, { import = "lazyvim.plugins.extras.editor.harpoon2" }, - -- uncomment to import/override with your plugins + -- import/override your plugins { import = "plugins" }, -- Vue & Typescript @@ -256,6 +257,16 @@ end }, + -- Python debugpy + { + { + "mfussenegger/nvim-dap-python", + config = function () + require("dap-python").setup("python3") + end + }, + }, + -- Nix { "neovim/nvim-lspconfig", @@ -292,10 +303,6 @@ } }, - -- disable DAP - { "mfussenegger/nvim-dap-python", enabled = false }, - { "mfussenegger/nvim-dap", enabled = false }, - -- disable mason.nvim, use config.extraPackages { "williamboman/mason-lspconfig.nvim", enabled = false }, { "williamboman/mason.nvim", enabled = false }, diff --git a/system/dev/dn-lap/boot.nix b/system/dev/dn-lap/boot.nix index 3e91d8c..ad3e09d 100644 --- a/system/dev/dn-lap/boot.nix +++ b/system/dev/dn-lap/boot.nix @@ -4,6 +4,16 @@ boot.kernelPackages = pkgs.linuxPackages_latest; boot.loader.systemd-boot.enable = true; + fileSystems."/mnt/storage" = { + device = "router.dn:/mnt/storage"; + fsType = "nfs"; + options = [ + "x-systemd.automount" + "noauto" + "x-systemd.idle-timeout=600" + ]; + }; + # Enable F keys in some wireless keyboard (Ex. neo65) boot.extraModprobeConfig = '' options hid_apple fnmode=2 diff --git a/system/dev/dn-lap/default.nix b/system/dev/dn-lap/default.nix index dfa2a26..c9088e0 100644 --- a/system/dev/dn-lap/default.nix +++ b/system/dev/dn-lap/default.nix @@ -46,7 +46,10 @@ in ; }; users."${username}" = { - imports = [ ../../../home ]; + imports = [ + ../../../home + ../../../home/user/music-production.nix + ]; }; }; } diff --git a/system/modules/nvidia.nix b/system/modules/nvidia.nix index 0eaf4c2..4eb94c4 100644 --- a/system/modules/nvidia.nix +++ b/system/modules/nvidia.nix @@ -59,7 +59,7 @@ lib.checkListOfEnum "Nvidia Prime Mode" validModes [ nvidia-mode ] { nvidia.nvidiaSettings = true; nvidia.dynamicBoost.enable = true; - nvidia.package = config.boot.kernelPackages.nvidiaPackages.stable; + nvidia.package = config.boot.kernelPackages.nvidiaPackages.beta; nvidia.prime = (