--- layout: "@layouts/ConfigLayout.astro" title: "Getting Started" --- # {frontmatter.title} See [Installation](./installation) if Quickshell isn't installed yet. ## Editor configuration ### Emacs Install the [yuja/tree-sitter-qml](https://github.com/yuja/tree-sitter-qmljs) tree-sitter grammar, and the [xhcoding/qml-ts-mode](https://github.com/xhcoding/qml-ts-mode) mode. Both are packaged for nix via [outfoxxed/nix-qml-support](https://git.outfoxxed.me/outfoxxed/nix-qml-support). Either `lsp-mode` or `eglot` should be usable for LSP ([caveats below](#language-server)). The author's personal emacs config uses `lsp-mode` and `qml-ts-mode` as follows: ```elisp (use-package qml-ts-mode :after lsp-mode :config (add-to-list 'lsp-language-id-configuration '(qml-ts-mode . "qml-ts")) (lsp-register-client (make-lsp-client :new-connection (lsp-stdio-connection "qmlls") :activation-fn (lsp-activate-on "qml-ts") :server-id 'qmlls)) (add-hook 'qml-ts-mode-hook (lambda () (setq-local electric-indent-chars '(?\n ?\( ?\) ?{ ?} ?\[ ?\] ?\; ?,)) (lsp-deferred)))) ``` ### Neovim Neovim has built-in syntax highlighting for QML, however tree-sitter highlighting may work better than the built-in highlighting. You can install the grammar using `:TSInstall qmljs`. To use the language server ([caveats below](#language-server)), install [nvim-lspconfig](https://github.com/neovim/nvim-lspconfig) and call `require("lspconfig").qmlljs.setup({})`. ## Language Server The QML language has an associated language server, [qmlls](https://doc.qt.io/qt-6/qtqml-tooling-qmlls.html). Please note that the language server, along with quickshell's support of it, is in development. We are aware of the following issues: - Qmlls does not work well when a file is not correctly structured. This means that completions and lints won't work unless braces are closed correctly and such. - Qmlls cannot handle quickshell's singletons. This means you won't see completions, and usages of singleton members may show a warning. We're still investigating this problem and how to fix it. Keeping in mind the above caveats, qmlls should be able to guide you towards more correct code should you chose to use it. > [!NOTE] > Nix users should note that qmlls will not be able to pick up qml modules > that are not in `QML2_IMPORT_PATH`.