From 8596592c4c35225a72a7360242c9b46f125aa3dc Mon Sep 17 00:00:00 2001 From: Enrique Vidal Date: Wed, 13 Aug 2025 11:51:50 -0700 Subject: [PATCH 1/2] Attempt a testing xmonad config --- .config/xmonad/stack.yaml | 33 +++++++++++++++++---------------- .github/workflows/ci.yml | 37 +++++++++++++++++++++++++++++++++++++ Containerfile | 8 +++++++- Dockerfile | 12 +++++++++--- 4 files changed, 70 insertions(+), 20 deletions(-) create mode 100644 .github/workflows/ci.yml diff --git a/.config/xmonad/stack.yaml b/.config/xmonad/stack.yaml index 642c67b..7073645 100644 --- a/.config/xmonad/stack.yaml +++ b/.config/xmonad/stack.yaml @@ -2,23 +2,23 @@ # # Some commonly used options have been documented as comments in this file. # For advanced use and comprehensive documentation of the format, please see: -# https://docs.haskellstack.org/en/stable/yaml_configuration/ +# https://docs.haskellstack.org/en/stable/configure/yaml/ -# Resolver to choose a 'specific' stackage snapshot or a compiler version. +# A 'specific' Stackage snapshot or a compiler version. # A snapshot resolver dictates the compiler version and the set of packages # to be used for project dependencies. For example: # -# resolver: lts-3.5 -# resolver: nightly-2015-09-21 -# resolver: ghc-7.10.2 +# snapshot: lts-23.0 +# snapshot: nightly-2024-12-13 +# snapshot: ghc-9.8.4 # # The location of a snapshot can be provided as a file or url. Stack assumes # a snapshot provided as a file might change, whereas a url resource does not. # -# resolver: ./custom-snapshot.yaml -# resolver: https://example.com/snapshots/2018-01-01.yaml -resolver: - url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/18/9.yaml +# snapshot: ./custom-snapshot.yaml +# snapshot: https://example.com/snapshots/2024-01-01.yaml +snapshot: + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/24/4.yaml # User packages to be built. # Various formats can be used as shown in the example below. @@ -32,7 +32,7 @@ resolver: packages: - xmonad - xmonad-contrib -# Dependency packages to be pulled from upstream that are not in the resolver. +# Dependency packages to be pulled from upstream that are not in the snapshot. # These entries can reference officially published versions as well as # forks / in-progress versions pinned to a git hash. For example: # @@ -42,10 +42,11 @@ packages: # commit: e7b331f14bcffb8367cd58fbfc8b40ec7642100a # # extra-deps: [] +# dependencies: - - split-0.2.3.5 +- split-0.2.5 -# Override default flag values for local packages and extra-deps +# Override default flag values for project packages and extra-deps # flags: {} # Extra package databases containing global packages @@ -54,15 +55,15 @@ dependencies: # Control whether we use the GHC we find on the path # system-ghc: true # -# Require a specific version of stack, using version ranges +# Require a specific version of Stack, using version ranges # require-stack-version: -any # Default -# require-stack-version: ">=2.5" +# require-stack-version: ">=3.3" # -# Override the architecture used by stack, especially useful on Windows +# Override the architecture used by Stack, especially useful on Windows # arch: i386 # arch: x86_64 # -# Extra directories used by stack for building +# Extra directories used by Stack for building # extra-include-dirs: [/path/to/dir] # extra-lib-dirs: [/path/to/dir] # diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..88dce54 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,37 @@ +name: CI + +on: [push] + +jobs: + xmonad: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - name: Install dependencies + run: | + sudo apt install -y libx11-dev libxft-dev libxinerama-dev libxrandr-dev libxss-dev haskell-stack + + - name: Fetch xmonad and xmonad-contrib + run: | + cd .config/xmonad + git clone --branch v0.18.0 https://github.com/xmonad/xmonad + git clone --branch v0.18.1 https://github.com/xmonad/xmonad-contrib + + - name: Build xmonad + run: | + cd .config/xmonad + stack install --allow-newer + + - name: Build xmonad.hs + run: | + cd .config/xmonad + stack install split + stack ghc -- \ + --make xmonad.hs \ + -i \ + -ilib \ + -fforce-recomp \ + -main-is main \ + -v0 \ + -o "$1" diff --git a/Containerfile b/Containerfile index 17e7bc2..db59deb 100644 --- a/Containerfile +++ b/Containerfile @@ -24,6 +24,12 @@ RUN apt-get install -y \ sudo \ zsh +# Install xmonad dependencies +RUN sudo apt-get install -y \ + git \ + haskell-stack \ + libx11-dev libxft-dev libxinerama-dev libxrandr-dev libxss-dev + # Add don't require password for test in sudoers RUN echo "test ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers @@ -34,7 +40,7 @@ RUN echo 'export ZDOTDIR=$HOME/.config/zsh' >> /etc/zsh/zshenv RUN curl -sS https://starship.rs/install.sh | sh -s -- --yes # Install nvim stable -RUN curl -L https://github.com/neovim/neovim/releases/download/stable/nvim-linux64.deb -o nvim.deb +RUN curl -L https://github.com/neovim/neovim-releases/releases/download/v0.11.3/nvim-linux-x86_64.deb -o nvim.deb RUN dpkg -i nvim.deb RUN rm -fr nvim.deb diff --git a/Dockerfile b/Dockerfile index 446ffe3..600cb78 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu:rolling -ENV DEBIAN_FRONTEND noninteractive -ENV USER test +ENV DEBIAN_FRONTEND=noninteractive +ENV USER=test RUN useradd test RUN usermod -aG sudo test @@ -24,6 +24,12 @@ RUN apt-get install -y \ sudo \ zsh +# Install xmonad dependencies +RUN sudo apt-get install -y \ + git \ + haskell-stack \ + libx11-dev libxft-dev libxinerama-dev libxrandr-dev libxss-dev + # Add don't require password for test in sudoers RUN echo "test ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers @@ -34,7 +40,7 @@ RUN echo 'export ZDOTDIR=$HOME/.config/zsh' >> /etc/zsh/zshenv RUN curl -sS https://starship.rs/install.sh | sh -s -- --yes # Install nvim stable -RUN curl -L https://github.com/neovim/neovim/releases/download/stable/nvim-linux64.deb -o nvim.deb +RUN curl -L https://github.com/neovim/neovim-releases/releases/download/v0.11.3/nvim-linux-x86_64.deb -o nvim.deb RUN dpkg -i nvim.deb RUN rm -fr nvim.deb From 3badb619275065b8ab9c2081fd73944b7fbbd06b Mon Sep 17 00:00:00 2001 From: Enrique Vidal Date: Tue, 23 Sep 2025 10:00:26 -0700 Subject: [PATCH 2/2] Update lsp-config to use nvim 0.11 LSP API --- .config/nvim/lazy-lock.json | 54 +++++++++---------- .config/nvim/lua/plugins/avante-nvim.lua | 26 ++++----- .../nvim/lua/plugins/lsp/nvim-lspconfig.lua | 38 ++++++------- .config/nvim/lua/plugins/venv-selector.lua | 41 +++++--------- 4 files changed, 69 insertions(+), 90 deletions(-) diff --git a/.config/nvim/lazy-lock.json b/.config/nvim/lazy-lock.json index 941979e..1a1b68c 100644 --- a/.config/nvim/lazy-lock.json +++ b/.config/nvim/lazy-lock.json @@ -1,42 +1,42 @@ { "LuaSnip": { "branch": "master", "commit": "458560534a73f7f8d7a11a146c801db00b081df0" }, - "alpha-nvim": { "branch": "main", "commit": "a35468cd72645dbd52c0624ceead5f301c566dff" }, - "avante.nvim": { "branch": "main", "commit": "a537945573862fc56c69c57f6b4dde0e2ed1a495" }, - "blink.cmp": { "branch": "main", "commit": "022521a8910a5543b0251b21c9e1a1e989745796" }, - "conform.nvim": { "branch": "master", "commit": "0e93e0d12d2f7ebdea9e3e444dfaff0050cefbe6" }, - "copilot.lua": { "branch": "master", "commit": "c1bb86abbed1a52a11ab3944ef00c8410520543d" }, + "alpha-nvim": { "branch": "main", "commit": "2b3cbcdd980cae1e022409289245053f62fb50f6" }, + "avante.nvim": { "branch": "main", "commit": "44db8eba870f6c123da5efa70384b2889f3e3495" }, + "blink.cmp": { "branch": "main", "commit": "327fff91fe6af358e990be7be1ec8b78037d2138" }, + "conform.nvim": { "branch": "master", "commit": "b4aab989db276993ea5dcb78872be494ce546521" }, + "copilot.lua": { "branch": "master", "commit": "304fc5f2dadb5067ed26c60fa69fb7ba8a57eaf3" }, "dressing.nvim": { "branch": "master", "commit": "2d7c2db2507fa3c4956142ee607431ddb2828639" }, - "fzf-lua": { "branch": "main", "commit": "94d11c93fef45360c9cb350314e257efc0fcec5f" }, - "gitsigns.nvim": { "branch": "main", "commit": "d0f90ef51d4be86b824b012ec52ed715b5622e51" }, - "img-clip.nvim": { "branch": "main", "commit": "08a02e14c8c0d42fa7a92c30a98fd04d6993b35d" }, + "fzf-lua": { "branch": "main", "commit": "2388dcd61731ae158bf7dad2ae0419291837e557" }, + "gitsigns.nvim": { "branch": "main", "commit": "f780609807eca1f783a36a8a31c30a48fbe150c5" }, + "img-clip.nvim": { "branch": "main", "commit": "f33f3af9ba50f99d70f8fcb1a8575750ada4ea4a" }, "indent-blankline.nvim": { "branch": "master", "commit": "005b56001b2cb30bfa61b7986bc50657816ba4ba" }, "lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" }, - "lsp-progress.nvim": { "branch": "main", "commit": "f3df1df8f5ea33d082db047b5d2d2b83cc01cd8a" }, - "lspsaga.nvim": { "branch": "main", "commit": "920b1253e1a26732e53fac78412f6da7f674671d" }, - "lualine.nvim": { "branch": "master", "commit": "0c6cca9f2c63dadeb9225c45bc92bb95a151d4af" }, - "mason-lspconfig.nvim": { "branch": "main", "commit": "bef29b653ba71d442816bf56286c2a686210be04" }, - "mason.nvim": { "branch": "main", "commit": "8024d64e1330b86044fed4c8494ef3dcd483a67c" }, + "lsp-progress.nvim": { "branch": "main", "commit": "ae52979ad412371ea6dc39ff70c8dfc681fb42b8" }, + "lspsaga.nvim": { "branch": "main", "commit": "8efe00d6aed9db6449969f889170f1a7e43101a1" }, + "lualine.nvim": { "branch": "master", "commit": "b8c23159c0161f4b89196f74ee3a6d02cdc3a955" }, + "mason-lspconfig.nvim": { "branch": "main", "commit": "a1067cf84b4ff81b66d2bf4d01f4cbdb5de40bd0" }, + "mason.nvim": { "branch": "main", "commit": "7dc4facca9702f95353d5a1f87daf23d78e31c2a" }, "nightfox.nvim": { "branch": "main", "commit": "ba47d4b4c5ec308718641ba7402c143836f35aa9" }, - "nui.nvim": { "branch": "main", "commit": "7cd18e73cfbd70e1546931b7268b3eebaeff9391" }, + "nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" }, "nvim-colorizer.lua": { "branch": "master", "commit": "a065833f35a3a7cc3ef137ac88b5381da2ba302e" }, - "nvim-dap": { "branch": "master", "commit": "ea82027c3447dc1a022be9a9884de276c05cd33a" }, - "nvim-dap-python": { "branch": "master", "commit": "261ce649d05bc455a29f9636dc03f8cdaa7e0e2c" }, - "nvim-lint": { "branch": "master", "commit": "cc26ae6a620298bb3f33b0e0681f99a10ae57781" }, - "nvim-lspconfig": { "branch": "master", "commit": "036885e8e5456d3907626b634693234f628afef6" }, + "nvim-dap": { "branch": "master", "commit": "7367cec8e8f7a0b1e4566af9a7ef5959d11206a7" }, + "nvim-dap-python": { "branch": "master", "commit": "bfe572e4458e0ac876b9539a1e9f301c72db8ea0" }, + "nvim-lint": { "branch": "master", "commit": "0864f81c681e15d9bdc1156fe3a17bd07db5a3ed" }, + "nvim-lspconfig": { "branch": "master", "commit": "aafecf5b8bc0a768f1a97e3a6d5441e64dee79f9" }, "nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" }, - "nvim-web-devicons": { "branch": "master", "commit": "1fb58cca9aebbc4fd32b086cb413548ce132c127" }, - "oil.nvim": { "branch": "master", "commit": "08c2bce8b00fd780fb7999dbffdf7cd174e896fb" }, + "nvim-web-devicons": { "branch": "master", "commit": "6e51ca170563330e063720449c21f43e27ca0bc1" }, + "oil.nvim": { "branch": "master", "commit": "07f80ad645895af849a597d1cac897059d89b686" }, "org-bullets.nvim": { "branch": "main", "commit": "21437cfa99c70f2c18977bffd423f912a7b832ea" }, "org-roam.nvim": { "branch": "main", "commit": "cf00a0b3797ee3370c2ca2bdedbc04b2f5309a1e" }, - "orgmode": { "branch": "master", "commit": "32ef9e95f43a6e951fb931b438372546a4f0c524" }, + "orgmode": { "branch": "master", "commit": "eb61f39ddc65e577aee1ae121596cae82e0316e6" }, "persistence.nvim": { "branch": "main", "commit": "166a79a55bfa7a4db3e26fc031b4d92af71d0b51" }, - "plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" }, - "render-markdown.nvim": { "branch": "main", "commit": "6f5a4c36d9383b2a916facaa63dcd573afa11ee8" }, + "plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" }, + "render-markdown.nvim": { "branch": "main", "commit": "9ab9dade85d8c7d411cc89b592028da3d1b7955a" }, "rustaceanvim": { "branch": "master", "commit": "e9c5aaba16fead831379d5f44617547a90b913c7" }, - "sniprun": { "branch": "master", "commit": "a90c65846c3c18efc3f799d8b6dc26af9d4a69ed" }, + "sniprun": { "branch": "master", "commit": "f65bdf6f6ab47511bce67885cae7e3bb2e88cd55" }, "statuscol.nvim": { "branch": "main", "commit": "c46172d0911aa5d49ba5f39f4351d1bb7aa289cc" }, "telescope-fzf-native.nvim": { "branch": "main", "commit": "1f08ed60cafc8f6168b72b80be2b2ea149813e55" }, - "telescope.nvim": { "branch": "master", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" }, - "venv-selector.nvim": { "branch": "main", "commit": "f212a424fb29949cb5e683928bdd4038bbe0062d" }, - "which-key.nvim": { "branch": "main", "commit": "370ec46f710e058c9c1646273e6b225acf47cbed" } + "telescope.nvim": { "branch": "0.1.x", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" }, + "venv-selector.nvim": { "branch": "main", "commit": "2b49d1f8b8fcf5cfbd0913136f48f118225cca5d" }, + "which-key.nvim": { "branch": "main", "commit": "904308e6885bbb7b60714c80ab3daf0c071c1492" } } diff --git a/.config/nvim/lua/plugins/avante-nvim.lua b/.config/nvim/lua/plugins/avante-nvim.lua index e8dc92b..f83a19d 100644 --- a/.config/nvim/lua/plugins/avante-nvim.lua +++ b/.config/nvim/lua/plugins/avante-nvim.lua @@ -5,12 +5,21 @@ return { opts = { provider = "copilot", -- auto_suggestions_provider = "copilot", - -- behaviour = { - -- enable_cursor_planning_mode = true, - -- }, + behaviour = { + enable_cursor_planning_mode = true, + real_time_inline_suggestions = true, -- Enables inline suggestions for text editing + suggestion_preview = { + interactive = true, -- Use Telescope for interactive suggestion previews + style = { + border = "rounded", -- Rounded border for previews + highlight = "CursorLine", -- Highlight active line in preview + }, + }, + fallback_providers = { "copilot", "ollama" }, -- Fallback mechanism if primary provider fails + }, providers = { copilot = { - model = "claude-3.7-sonnet", + model = "gpt-4o-2024-11-20", }, ollama = { endpoint = "http://localhost:11434", @@ -29,14 +38,7 @@ return { "nvim-telescope/telescope.nvim", "ibhagwan/fzf-lua", "nvim-tree/nvim-web-devicons", - { - "zbirenbaum/copilot.lua", - cmd = "Copilot", - event = "InsertEnter", - config = function() - require("copilot").setup({}) - end, - }, + "zbirenbaum/copilot.lua", { -- support for image pasting "HakonHarnes/img-clip.nvim", diff --git a/.config/nvim/lua/plugins/lsp/nvim-lspconfig.lua b/.config/nvim/lua/plugins/lsp/nvim-lspconfig.lua index ce63d72..0e9b7b0 100644 --- a/.config/nvim/lua/plugins/lsp/nvim-lspconfig.lua +++ b/.config/nvim/lua/plugins/lsp/nvim-lspconfig.lua @@ -9,15 +9,7 @@ return { config = function() local capabilities = require("blink.cmp").get_lsp_capabilities() - -- Simple servers with default config - local simple_servers = { - "bashls", - "dockerls", - "prismals", - "purescriptls", - "pyright", - "tailwindcss", - } + vim.lsp.config("*", { capabilities = capabilities }) -- Servers with custom config local custom_servers = { @@ -27,27 +19,27 @@ return { ts_ls = "typescript", } - local lspconfig = require("lspconfig") - local helpers = require("core.helpers") - - -- Setup servers with default config - for _, server in ipairs(simple_servers) do - lspconfig[server].setup({ capabilities = capabilities }) - end - -- Setup servers with custom config for server, config_name in pairs(custom_servers) do local ok, custom_config = pcall(require, "plugins.lsp.lang." .. config_name) if ok then - lspconfig[server].setup( - helpers.merge( - custom_config, - { capabilities = capabilities } - ) - ) + vim.lsp.config(server, custom_config) end end + + vim.lsp.enable({ + "bashls", + "dockerls", + "hls", + "lua_ls", + "nil_ls", + "prismals", + "purescriptls", + "pyright", + "tailwindcss", + "ts_ls", + }) end, } diff --git a/.config/nvim/lua/plugins/venv-selector.lua b/.config/nvim/lua/plugins/venv-selector.lua index e9e8410..7e7baad 100644 --- a/.config/nvim/lua/plugins/venv-selector.lua +++ b/.config/nvim/lua/plugins/venv-selector.lua @@ -2,35 +2,20 @@ return { "linux-cultist/venv-selector.nvim", dependencies = { "neovim/nvim-lspconfig", - "nvim-telescope/telescope.nvim", - "mfussenegger/nvim-dap-python", + "mfussenegger/nvim-dap", + "mfussenegger/nvim-dap-python", --optional + { + "nvim-telescope/telescope.nvim", + branch = "0.1.x", + dependencies = { "nvim-lua/plenary.nvim" }, + }, }, - config = function() - require("venv-selector").setup({ - -- Your options go here - -- name = "venv", - -- auto_refresh = false - stay_on_this_version = true, - }) - - vim.api.nvim_create_autocmd({ "VimEnter", "BufEnter" }, { - desc = "Auto select virtualenv Nvim open", - pattern = "*", - callback = function() - local venv = - vim.fn.findfile("pyproject.toml", vim.fn.getcwd() .. ";") - if venv ~= "" then - require("venv-selector").retrieve_from_cache() - end - end, - once = true, - }) - end, - event = "VeryLazy", -- Optional: needed only if you want to type `:VenvSelect` without a keymapping + ft = "python", -- Load when opening Python files keys = { - -- Keymap to open VenvSelector to pick a venv. - { "vs", "VenvSelect" }, - -- Keymap to retrieve the venv from a cache (the one previously used for the same project directory). - { "vc", "VenvSelectCached" }, + { ",v", "VenvSelect" }, -- Open picker on keymap + }, + opts = { -- this can be an empty lua table - just showing below for clarity. + search = {}, -- if you add your own searches, they go here. + options = {}, -- if you add plugin options, they go here. }, }