diff --git a/.github/workflows/cachix.yml b/.github/workflows/cachix.yml index 47bd48f..624e8c9 100644 --- a/.github/workflows/cachix.yml +++ b/.github/workflows/cachix.yml @@ -3,10 +3,12 @@ name: build-and-cache on: workflow_dispatch: push: + branches: + - main paths-ignore: - - '**/README.md' - - '**/.gitignore' - - '**/assets' + - '.github/**' + - './assets/**' + - '.gitignore' jobs: nix: diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 4dd7870..cea124a 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -1,10 +1,10 @@ -name: "Pull request" +name: "Check validity of flakes" on: pull_request: + workflow_dispatch: push: branches: - main - workflow_dispatch: jobs: nix-flake-check: runs-on: ubuntu-latest diff --git a/.github/workflows/manual.yml b/.github/workflows/manual.yml index ff3153c..9dbd0b7 100644 --- a/.github/workflows/manual.yml +++ b/.github/workflows/manual.yml @@ -1,5 +1,6 @@ name: Github Pages docs on: + workflow_dispatch: push: branches: - main @@ -25,7 +26,7 @@ jobs: uses: cachix/install-nix-action@v18 - name: Build run: | - nix build '.#docs-html' + nix build '.#docs' cp -r result/share/doc/neovim-flake public - name: Deploy uses: peaceiris/actions-gh-pages@v3 diff --git a/docs/default.nix b/docs/default.nix index 6cf73dc..683dc9c 100644 --- a/docs/default.nix +++ b/docs/default.nix @@ -1,6 +1,6 @@ { pkgs, - lib ? import ../modules/lib/stdlib-extended.nix pkgs.lib, + lib ? import ../lib/stdlib-extended.nix pkgs.lib, nmdSrc, }: let nmd = import nmdSrc {inherit lib pkgs;}; diff --git a/docs/home-manager.adoc b/docs/home-manager.adoc new file mode 100644 index 0000000..ed85f90 --- /dev/null +++ b/docs/home-manager.adoc @@ -0,0 +1,42 @@ +[[ch-hm-module]] +== Home Manager + +The Home Manager module allows us to customize the different `vim` options. To use it, we first add the input flake. + +[source,nix] +---- +{ + neovim-flake = { + url = github:notashelf/neovim-flake; + # you can override input nixpkgs + inputs.nixpkgs.follows = "nixpkgs"; + }; +} +---- + +Followed by importing the HM module. + +[source,nix] +---- +{ + imports = [ neovim-flake.nixosModules.hm-module ]; +} +---- + +Then we should be able to use the given module. E.g. + +[source,nix] +---- +{ + programs.neovim-flake = { + enable = true; + settings = { + vim.viAlias = false; + vim.vimAlias = true; + vim.lsp = { + enable = true; + }; + }; + }; +} +---- diff --git a/docs/manual.xml b/docs/manual.xml index 4f33e91..a03698f 100644 --- a/docs/manual.xml +++ b/docs/manual.xml @@ -19,6 +19,7 @@ + diff --git a/extra.nix b/extra.nix new file mode 100644 index 0000000..1cdeda2 --- /dev/null +++ b/extra.nix @@ -0,0 +1,166 @@ +inputs: let + modulesWithInputs = import ./modules inputs; + + neovimConfiguration = { + modules ? [], + pkgs, + lib ? pkgs.lib, + check ? true, + extraSpecialArgs ? {}, + }: + modulesWithInputs { + inherit pkgs lib check extraSpecialArgs; + configuration.imports = modules; + }; + + mainConfig = isMaximal: { + config = { + vim = { + viAlias = true; + vimAlias = true; + }; + + vim.lsp = { + enable = true; + formatOnSave = true; + lightbulb.enable = true; + lspsaga.enable = false; + nvimCodeActionMenu.enable = true; + trouble.enable = true; + lspSignature.enable = true; + rust.enable = isMaximal; + python = isMaximal; + clang.enable = isMaximal; + sql = isMaximal; + ts = isMaximal; + go = isMaximal; + zig.enable = isMaximal; + nix = { + enable = true; + formatter = "alejandra"; + }; + }; + + vim.visuals = { + enable = true; + nvimWebDevicons.enable = true; + scrollBar.enable = true; + smoothScroll.enable = true; + cellularAutomaton.enable = true; + lspkind.enable = true; + indentBlankline = { + enable = true; + fillChar = ""; + eolChar = ""; + showCurrContext = true; + }; + cursorWordline = { + enable = true; + lineTimeout = 0; + }; + }; + + vim.statusline.lualine = { + enable = true; + theme = "catppuccin"; + }; + + vim.theme = { + enable = true; + name = "catppuccin"; + style = "mocha"; + }; + vim.autopairs.enable = true; + + vim.autocomplete = { + enable = true; + type = "nvim-cmp"; + }; + + vim.filetree = { + nvimTreeLua = { + enable = true; + view = { + width = 25; + }; + }; + }; + + vim.tabline = { + nvimBufferline.enable = true; + }; + + vim.treesitter = { + enable = true; + context.enable = true; + }; + + vim.binds = { + whichKey.enable = true; + cheatsheet.enable = true; + }; + + vim.telescope = { + enable = true; + }; + + vim.markdown = { + enable = true; + glow.enable = true; + }; + + vim.git = { + enable = true; + gitsigns.enable = true; + }; + + vim.minimap = { + minimap-vim.enable = false; + codewindow.enable = true; # lighter, faster, and uses lua for configuration + }; + + vim.dashboard = { + dashboard-nvim.enable = false; + alpha.enable = true; + }; + + vim.notify = { + nvim-notify.enable = true; + }; + + vim.utility = { + colorizer.enable = true; + icon-picker.enable = true; + venn-nvim.enable = false; # FIXME throws an error when its commands are ran manually + }; + + vim.notes = { + obsidian.enable = false; # FIXME neovim fails to build if obsidian is enabled + orgmode.enable = true; + }; + + vim.terminal = { + toggleterm.enable = true; + }; + + vim.ui = { + noice.enable = true; + }; + + vim.assistant = { + copilot.enable = isMaximal; + #tabnine.enable = false; # FIXME: this is not working because the plugin depends on an internal script to be ran by the package manager + }; + + vim.session = { + nvim-session-manager.enable = false; + }; + + vim.gestures = { + gesture-nvim.enable = false; + }; + }; + }; +in { + inherit neovimConfiguration mainConfig; +} diff --git a/flake.lock b/flake.lock index 0c74fd2..6a6a1da 100644 --- a/flake.lock +++ b/flake.lock @@ -3,11 +3,11 @@ "alpha-nvim": { "flake": false, "locked": { - "lastModified": 1669699262, - "narHash": "sha256-uKJRMbNyQtiFhkrsniK7SqxM+XS2l3qffeCqmYznPuk=", + "lastModified": 1676405195, + "narHash": "sha256-z4wZatHXfN5H6de4AKl3zWyNne8FmfXq35KndTvuwXQ=", "owner": "goolord", "repo": "alpha-nvim", - "rev": "21a0f2520ad3a7c32c0822f943368dc063a569fb", + "rev": "d35b99e36e32040ba06c48a25b5bd3e75be2a566", "type": "github" }, "original": { @@ -35,11 +35,11 @@ "catppuccin": { "flake": false, "locked": { - "lastModified": 1675250216, - "narHash": "sha256-t7jVZoQwoLptfSo7WvA4DJe3mmqAk9R5nNcvldDSp8w=", + "lastModified": 1676442952, + "narHash": "sha256-DC0YRaqOJH3ORL/oPPZPcrZntQJMSkmZYvYwIC67Fg0=", "owner": "catppuccin", "repo": "nvim", - "rev": "8769e767f12f5bf0b7d1250ee067088e7054809a", + "rev": "2ed26d9a9797d192f752f1757e3ca045ae1d4c6f", "type": "github" }, "original": { @@ -115,11 +115,11 @@ "cmp-nvim-lsp": { "flake": false, "locked": { - "lastModified": 1668566979, - "narHash": "sha256-Mqkp8IH/laUx0cK7S0BjusTT+OtOOJOamZM4+93RHdU=", + "lastModified": 1675708067, + "narHash": "sha256-DxpcPTBlvVP88PDoTheLV2fC76EXDqS2UpM5mAfj/D4=", "owner": "hrsh7th", "repo": "cmp-nvim-lsp", - "rev": "59224771f91b86d1de12570b4070fe4ad7cd1eeb", + "rev": "0e6b2ed705ddcff9738ec4ea838141654f12eeef", "type": "github" }, "original": { @@ -211,11 +211,11 @@ "copilot-lua": { "flake": false, "locked": { - "lastModified": 1675346663, - "narHash": "sha256-+a286iUK7UijcbRLb8gXwmDFZAf1gYupS5f9EHB+dxU=", + "lastModified": 1676315274, + "narHash": "sha256-OA5gflAOdnM4EsTCZGH/cyIyBeWz+6xkd624Nm6t7MY=", "owner": "zbirenbaum", "repo": "copilot.lua", - "rev": "a54e7b11a2c6efc9ddd3f42e56cf7d9eed1a9683", + "rev": "137df557486f91627b8e4708a47088f36950f12c", "type": "github" }, "original": { @@ -227,11 +227,11 @@ "crates-nvim": { "flake": false, "locked": { - "lastModified": 1675348132, - "narHash": "sha256-CMhqiIXoCamLh8pfmYQZsAYeoJO5SHe7jBdfOuD1W0c=", + "lastModified": 1676072696, + "narHash": "sha256-e30Ir+Kd0EuvGoqORLtIA3aloL9djuebZYkBssWA0L8=", "owner": "Saecki", "repo": "crates.nvim", - "rev": "1bca9122ddc4bf4c6573402bf6686fc084470a7e", + "rev": "3fc7ddac13ddf65914a733ef074317c4c72ef05b", "type": "github" }, "original": { @@ -243,11 +243,11 @@ "dashboard-nvim": { "flake": false, "locked": { - "lastModified": 1675564456, - "narHash": "sha256-KQ89wIEKIEetd6SDcNfui/hr3vRYGhh7W+XWPpB1Xc0=", + "lastModified": 1676423815, + "narHash": "sha256-/2W34BLNJVs81V2Fl/4UdKo3V8R4OPPXGfswcMU4nNw=", "owner": "glepnir", "repo": "dashboard-nvim", - "rev": "97aaa208917f814f2e5799d5894ff791b4ab5059", + "rev": "0e3f79eb5066fb3ee5c31e2879d2a644b5cc36da", "type": "github" }, "original": { @@ -305,13 +305,31 @@ "type": "github" } }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1675933616, + "narHash": "sha256-/rczJkJHtx16IFxMmAWu5nNYcSXNg1YYXTHoGjLrLUA=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "47478a4a003e745402acf63be7f9a092d51b83d7", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, "flake-utils": { "locked": { - "lastModified": 1667395993, - "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "lastModified": 1676283394, + "narHash": "sha256-XX2f9c3iySLCw54rJ/CZs+ZK6IQy7GXNY4nSOyu2QG4=", "owner": "numtide", "repo": "flake-utils", - "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "rev": "3db36a8b464d0c4532ba1c7dda728f4576d6d073", "type": "github" }, "original": { @@ -339,11 +357,11 @@ "gitsigns-nvim": { "flake": false, "locked": { - "lastModified": 1675416322, - "narHash": "sha256-nxqs6nIQKyK6GzQihgBUY1/HggF/i5huz5VsUUu4fKE=", + "lastModified": 1676367932, + "narHash": "sha256-mNJClYEA8zcneJjqj4wUwHcy45MrODP3mYKhiNvmr04=", "owner": "lewis6991", "repo": "gitsigns.nvim", - "rev": "ec4742a7eebf68bec663041d359b95637242b5c3", + "rev": "4bd5d7702c17643ff40c035b6b936757b99743c7", "type": "github" }, "original": { @@ -355,11 +373,11 @@ "glow-nvim": { "flake": false, "locked": { - "lastModified": 1675023136, - "narHash": "sha256-80gtxODbPDxI7nlt0LpFfQBG8Q9amWm5pRqoJxMRrcQ=", + "lastModified": 1676038549, + "narHash": "sha256-37gwf3sS2eFNDTKdLLNcOPi3d1TnAA3dC+zEYj/N3Ew=", "owner": "ellisonleao", "repo": "glow.nvim", - "rev": "c87b1120b618577e64d910a7493a26829044a8a2", + "rev": "2bb4afb6e9dbc93993a1d7d4168dac08c74590ac", "type": "github" }, "original": { @@ -467,11 +485,11 @@ "lualine": { "flake": false, "locked": { - "lastModified": 1673418538, - "narHash": "sha256-3I9og+/lVRFJSpDVFwp2AM5bMqeP1KF8XB8Nyfpwhok=", + "lastModified": 1676394253, + "narHash": "sha256-mItWWRqWj9a/JaW8sccnGBijBsvvnh/b4q/S60UwYwc=", "owner": "hoob3rt", "repo": "lualine.nvim", - "rev": "0050b308552e45f7128f399886c86afefc3eb988", + "rev": "e99d733e0213ceb8f548ae6551b04ae32e590c80", "type": "github" }, "original": { @@ -528,11 +546,11 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1675471872, - "narHash": "sha256-HBW6qBF/niMbdFxTuucSnDda9H/RSbbOs48fcXXImx0=", + "lastModified": 1676390054, + "narHash": "sha256-w0KvrM+9WIEYr0juDh4Vs39ed2IaT0T696fp9pZ7i1I=", "owner": "oxalica", "repo": "nil", - "rev": "1a15174958729ca578db517e735479ed5fb963db", + "rev": "944d5c335531778a1d7b54a97bf7fb5ec0c3e976", "type": "github" }, "original": { @@ -543,11 +561,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1675584158, - "narHash": "sha256-SBkchaDzCHxnPNRDdtZ5ko5caHio9iS0Mbyn/xXbXxs=", + "lastModified": 1676209454, + "narHash": "sha256-alj9mBkV9U6tTPDK026671D2pesLSYZZc9j5dBZJ9f0=", "owner": "nixos", "repo": "nixpkgs", - "rev": "d840126a0890621e7b220894d749132dd4bde6a0", + "rev": "8c619a1f3cedd16ea172146e30645e703d21bfc1", "type": "github" }, "original": { @@ -557,6 +575,24 @@ "type": "github" } }, + "nixpkgs-lib": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs_2": { "locked": { "lastModified": 1656753965, @@ -592,11 +628,11 @@ "nmd": { "flake": false, "locked": { - "lastModified": 1674431006, - "narHash": "sha256-CFKH2AiIH6vk0IQPrSa63+n2xZc2bIrEIUgnxd3Dg+w=", + "lastModified": 1675884907, + "narHash": "sha256-IyLmIotAp7g6sxjeKx6gl52KQ/Xi6wyyHFhd/AWuM5o=", "owner": "rycee", "repo": "nmd", - "rev": "409f1310b168f96c6c8b556d24731a3e7c26c255", + "rev": "fa87e124c83ba343f88607b7348a4bd8a0ad061c", "type": "gitlab" }, "original": { @@ -608,11 +644,11 @@ "noice-nvim": { "flake": false, "locked": { - "lastModified": 1675023568, - "narHash": "sha256-5C05en9c6tZW3/vNjgCfFQFRFq5U0NKg/LK5EeUHc1o=", + "lastModified": 1675803750, + "narHash": "sha256-mLOoYjlJawgkNGhkXYc/otpLXkjKHpLbMsYu4j0qwFQ=", "owner": "folke", "repo": "noice.nvim", - "rev": "34f7cf628666c6eb0c93fbe8a0490e977ac78b7b", + "rev": "d8a1f3056ad713b5d471048f8d029264828e22c0", "type": "github" }, "original": { @@ -640,11 +676,11 @@ "null-ls": { "flake": false, "locked": { - "lastModified": 1675398737, - "narHash": "sha256-IG66jvXizre17P2F3N9pWjmkQSP3jF+6lJeypNbSWUc=", + "lastModified": 1676421273, + "narHash": "sha256-7woxEeTSVDmCKW0s+Z4mgwxunLdK5tkMoZqQw/devnU=", "owner": "jose-elias-alvarez", "repo": "null-ls.nvim", - "rev": "8f5d730021497233c39d3adbf4b8043d4be163f8", + "rev": "2d89e1a38e3bdebd43984c23c861c33c0e36bd7a", "type": "github" }, "original": { @@ -656,11 +692,11 @@ "nvim-autopairs": { "flake": false, "locked": { - "lastModified": 1675089120, - "narHash": "sha256-wcNyOHhBkWVgbxIf4frKDKlMQEE9iMYWN78p+3rNJ+g=", + "lastModified": 1675800886, + "narHash": "sha256-MJu1rrUaiwZ/qu0Lv4leGSiPq4TzyhHoRw48C+r3+Zs=", "owner": "windwp", "repo": "nvim-autopairs", - "rev": "5a3523ddb573804752de6c021c5cb82e267b79ca", + "rev": "45ae3122a4c7744db41298b41f9f5a3f092123e6", "type": "github" }, "original": { @@ -689,11 +725,11 @@ "nvim-cmp": { "flake": false, "locked": { - "lastModified": 1675440540, - "narHash": "sha256-BgI0dR7ss+pClGIu3EWXV7r5mMpo6Xt3QMVAxeWm++E=", + "lastModified": 1676388741, + "narHash": "sha256-yFTHFveMEki4Y7Q/wdxfZVGFT4ZbcIyffkknjJtHn+w=", "owner": "hrsh7th", "repo": "nvim-cmp", - "rev": "cfafe0a1ca8933f7b7968a287d39904156f2c57d", + "rev": "c4128bcd131fb7152bda8f8dd2b5e41d2fefa88c", "type": "github" }, "original": { @@ -769,11 +805,11 @@ "nvim-lspconfig": { "flake": false, "locked": { - "lastModified": 1675639052, - "narHash": "sha256-B8IgpypxzCACZ5VcqM6KiWyClaN+KrmemtkwMznmj5Y=", + "lastModified": 1676431382, + "narHash": "sha256-DBaAmhMfYzlHza6DOscDhD3ecYaFB4QqXrkfIirfMns=", "owner": "neovim", "repo": "nvim-lspconfig", - "rev": "255e07ce2a05627d482d2de77308bba51b90470c", + "rev": "e20d77deac40e6e65d036acd60aff474c0f09282", "type": "github" }, "original": { @@ -833,11 +869,11 @@ "nvim-tree-lua": { "flake": false, "locked": { - "lastModified": 1675639400, - "narHash": "sha256-d9c4T++6LnaqUsJAMmJGSLQYz+frjl7QhBJONJOvb2E=", + "lastModified": 1676413452, + "narHash": "sha256-ttCTJsuO86jDrWsDTpQzg/uESHPYhyo1oF+2bJFI7E0=", "owner": "nvim-tree", "repo": "nvim-tree.lua", - "rev": "02fdc262eba188198a7deb2117b3b996e6763d65", + "rev": "08a0aa1a3b7411ee0a7887c8818528b1558cef96", "type": "github" }, "original": { @@ -881,11 +917,11 @@ "nvim-web-devicons": { "flake": false, "locked": { - "lastModified": 1675479859, - "narHash": "sha256-bbce2CpzCY8/Y6egWJWthZ9t1IkODCt+467S728vcKM=", + "lastModified": 1676326872, + "narHash": "sha256-BmxnyHdNe7/egXNRz91YOcsvnc9fyK2jlYiqGhkaXSk=", "owner": "kyazdani42", "repo": "nvim-web-devicons", - "rev": "2b96193abe4372e18e4f4533895a42a466d53c17", + "rev": "bb6d4fd1e010300510172b173ab5205d37af084f", "type": "github" }, "original": { @@ -897,11 +933,11 @@ "obsidian-nvim": { "flake": false, "locked": { - "lastModified": 1675366609, - "narHash": "sha256-QUAic7yakCXNhYqeaxD+86dIAQzW/pJYN7Y69uDB3xk=", + "lastModified": 1676332768, + "narHash": "sha256-TmHzWRBzg1iSttlwr3wKfzj73lpDcBiVnXvrhL9QkSk=", "owner": "epwalsh", "repo": "obsidian.nvim", - "rev": "30f45ae3ef78b67d9eae16adfbaaf86089bd8855", + "rev": "3d459708c77f9ce7ae7165dda07812e685f30d61", "type": "github" }, "original": { @@ -913,11 +949,11 @@ "onedark": { "flake": false, "locked": { - "lastModified": 1674128456, - "narHash": "sha256-+0o32kO5lgvC2AIS7mPJ6eY/F7EWhdscZ/snkoy/TFc=", + "lastModified": 1676397581, + "narHash": "sha256-x3Tx0Spbm95M71sBvm2sVCyCIkeRSfvlC/TKcBMIwg4=", "owner": "navarasu", "repo": "onedark.nvim", - "rev": "f0a70e0993acbb348c32a52a88058cc60c160992", + "rev": "1fe908fb4acdcee26573e9ccde0de94ec77e5e84", "type": "github" }, "original": { @@ -929,11 +965,11 @@ "orgmode-nvim": { "flake": false, "locked": { - "lastModified": 1675278893, - "narHash": "sha256-augdRQCNMJe7Z4D8zjOYP/WjgLn2GHMc1QjVmuI17gY=", + "lastModified": 1676102032, + "narHash": "sha256-rSesMpucbNdlGVVjN5JKR9ZjfvFRxm1HqT6B5ls7KrU=", "owner": "nvim-orgmode", "repo": "orgmode", - "rev": "7ddbdc0741fdc90f73faa17fb332bc8700acadbf", + "rev": "313ce5a04e7fc3d677ad906a94fc49c1f54d1572", "type": "github" }, "original": { @@ -1014,6 +1050,7 @@ "dashboard-nvim": "dashboard-nvim", "discord-nvim": "discord-nvim", "dressing-nvim": "dressing-nvim", + "flake-parts": "flake-parts", "flake-utils": "flake-utils", "gesture-nvim": "gesture-nvim", "gitsigns-nvim": "gitsigns-nvim", @@ -1056,7 +1093,6 @@ "rust-tools": "rust-tools", "scrollbar-nvim": "scrollbar-nvim", "sqls-nvim": "sqls-nvim", - "tabnine-nvim": "tabnine-nvim", "tabular": "tabular", "telescope": "telescope", "tidalcycles": "tidalcycles", @@ -1115,11 +1151,11 @@ "scrollbar-nvim": { "flake": false, "locked": { - "lastModified": 1673562030, - "narHash": "sha256-OnVOmYhWMWH7a382DAIPEzJmz/J0BHniey7twyl500Q=", + "lastModified": 1676328140, + "narHash": "sha256-ZTU8+OPROdtkov75rvFpd3RuZ98PN1wiA7UOyPUqmw8=", "owner": "petertriho", "repo": "nvim-scrollbar", - "rev": "6a2065fbcd032075a06d2ab54508b69842bc4496", + "rev": "75210c554e935740448cfb532d8a671ae544bb1b", "type": "github" }, "original": { @@ -1161,22 +1197,6 @@ "type": "github" } }, - "tabnine-nvim": { - "flake": false, - "locked": { - "lastModified": 1675586775, - "narHash": "sha256-7vd+moqQ5bA58VXlHSWXcJbI6ovp7z2Nf6Cn7cq08Ps=", - "owner": "codota", - "repo": "tabnine-nvim", - "rev": "85b3ad6df16ad09f8c486ec4c21defa75cebe22c", - "type": "github" - }, - "original": { - "owner": "codota", - "repo": "tabnine-nvim", - "type": "github" - } - }, "tabular": { "flake": false, "locked": { @@ -1285,11 +1305,11 @@ "tokyonight": { "flake": false, "locked": { - "lastModified": 1674503926, - "narHash": "sha256-sXILXqJYZW0KywQhtBqGr76VsHV+sBnBM+RCqXCjZ2A=", + "lastModified": 1675971703, + "narHash": "sha256-RjdzV2Ia0iWeTF3AaHBMop1jZPwR3SMHasbr9Lg7StE=", "owner": "folke", "repo": "tokyonight.nvim", - "rev": "affb21a81e6d7de073378eb86d02864c594104d9", + "rev": "a0abe53df53616d13da327636cb0bcac3ea7f5af", "type": "github" }, "original": { @@ -1301,11 +1321,11 @@ "trouble": { "flake": false, "locked": { - "lastModified": 1674503479, - "narHash": "sha256-EdwQABmk7F7GJIB5lLcZtl1drMc0ASCXMbXoT/ywsK0=", + "lastModified": 1676045355, + "narHash": "sha256-BvynqOY42MqDEWUaf0VOA+UPdESHor/fw3fFD86ZT2U=", "owner": "folke", "repo": "trouble.nvim", - "rev": "490f7fe6d227f4f7a64f00be8c7dcd7a508ed271", + "rev": "556ef3089709a6e253df1e500381fec5eb48e48a", "type": "github" }, "original": { @@ -1445,11 +1465,11 @@ "which-key": { "flake": false, "locked": { - "lastModified": 1674503611, - "narHash": "sha256-A8fuY7HsfUOi9QNzWzCvaXQ2TvCNVcN2hpm5OWXYtU0=", + "lastModified": 1676049352, + "narHash": "sha256-8tFsz6y6l+0UX7H0g9t0Fvuio8aARJzFWqZc6MuPJuQ=", "owner": "folke", "repo": "which-key.nvim", - "rev": "684e96c5e8477f1ee9b3f2e9a12d802fd12c5531", + "rev": "5224c261825263f46f6771f1b644cae33cd06995", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 49fc1ec..7a51bfb 100644 --- a/flake.nix +++ b/flake.nix @@ -2,269 +2,49 @@ description = "A neovim flake with a modular configuration"; outputs = { nixpkgs, - flake-utils, + flake-parts, ... - } @ inputs: let - modulesWithInputs = import ./modules {inherit inputs;}; + } @ inputs: + flake-parts.lib.mkFlake {inherit inputs;} { + systems = ["x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin"]; - neovimConfiguration = { - modules ? [], - pkgs, - lib ? pkgs.lib, - check ? true, - extraSpecialArgs ? {}, - }: - modulesWithInputs { - inherit pkgs lib check extraSpecialArgs; - configuration = {...}: { - imports = modules; + imports = [ + # add lib to module args + {_module.args = {inherit (nixpkgs) lib;};} + ./flake/apps.nix + ./flake/legacyPackages.nix + ./flake/overlays.nix + ./flake/packages.nix + ]; + + flake = { + lib = { + inherit (import ./lib/stdlib-extended.nix nixpkgs.lib) nvim; + inherit (import ./extra.nix inputs) neovimConfiguration; + }; + + nixosModules.default = { + imports = [./lib/hm-module.nix]; + nixpkgs.overlays = [ + inputs.tidalcycles.overlays.default + inputs.self.overlays.default + ]; }; }; - nvimBin = pkg: "${pkg}/bin/nvim"; - - buildPkg = pkgs: modules: - (neovimConfiguration { - inherit pkgs modules; - }) - .neovim; - - tidalConfig = { - config = { - vim.tidal.enable = true; + perSystem = { + config, + pkgs, + ... + }: { + devShells.default = pkgs.mkShell {nativeBuildInputs = [config.packages.nix];}; }; }; - mainConfig = isMaximal: { - config = { - vim = { - viAlias = true; - vimAlias = true; - }; - - vim.lsp = { - enable = true; - formatOnSave = true; - lightbulb.enable = true; - lspsaga.enable = false; - nvimCodeActionMenu.enable = true; - trouble.enable = true; - lspSignature.enable = true; - rust.enable = isMaximal; - python = isMaximal; - clang.enable = isMaximal; - sql = isMaximal; - ts = isMaximal; - go = isMaximal; - zig.enable = isMaximal; - nix = { - enable = true; - formatter = "alejandra"; - }; - }; - - vim.visuals = { - enable = true; - nvimWebDevicons.enable = true; - scrollBar.enable = true; - smoothScroll.enable = true; - cellularAutomaton.enable = true; - lspkind.enable = true; - indentBlankline = { - enable = true; - fillChar = ""; - eolChar = ""; - showCurrContext = true; - }; - cursorWordline = { - enable = true; - lineTimeout = 0; - }; - }; - - vim.statusline.lualine = { - enable = true; - theme = "catppuccin"; - }; - - vim.theme = { - enable = true; - name = "catppuccin"; - style = "mocha"; - }; - vim.autopairs.enable = true; - - vim.autocomplete = { - enable = true; - type = "nvim-cmp"; - }; - - vim.filetree = { - nvimTreeLua = { - enable = true; - view = { - width = 25; - }; - }; - }; - - vim.tabline = { - nvimBufferline.enable = true; - }; - - vim.treesitter = { - enable = true; - context.enable = true; - }; - - vim.binds = { - whichKey.enable = true; - cheatsheet.enable = true; - }; - - vim.telescope = { - enable = true; - }; - - vim.markdown = { - enable = true; - glow.enable = true; - }; - - vim.git = { - enable = true; - gitsigns.enable = true; - }; - - vim.minimap = { - minimap-vim.enable = false; - codewindow.enable = true; # lighter, faster, and uses lua for configuration - }; - - vim.dashboard = { - dashboard-nvim.enable = false; - alpha.enable = true; - }; - - vim.notify = { - nvim-notify.enable = true; - }; - - vim.utility = { - colorizer.enable = true; - icon-picker.enable = true; - venn-nvim.enable = false; # FIXME throws an error when its commands are ran manually - }; - - vim.notes = { - obsidian.enable = false; # FIXME neovim fails to build if obsidian is enabled - orgmode.enable = true; - }; - - vim.terminal = { - toggleterm.enable = true; - }; - - vim.ui = { - noice.enable = true; - }; - - vim.assistant = { - copilot.enable = false; - tabnine.enable = false; # FIXME: this is not working because the plugin depends on an internal script to be ran by the package manager - }; - - vim.session = { - nvim-session-manager.enable = false; - }; - - vim.gestures = { - gesture-nvim.enable = false; - }; - }; - }; - - nixConfig = mainConfig false; - maximalConfig = mainConfig true; - in - { - lib = { - nvim = (import ./modules/lib/stdlib-extended.nix nixpkgs.lib).nvim; - inherit neovimConfiguration; - }; - - overlays.default = final: prev: { - inherit neovimConfiguration; - neovim-nix = buildPkg prev [nixConfig]; - neovim-maximal = buildPkg prev [maximalConfig]; - neovim-tidal = buildPkg prev [tidalConfig]; - }; - } - // (flake-utils.lib.eachDefaultSystem (system: let - pkgs = import nixpkgs { - inherit system; - overlays = [ - inputs.tidalcycles.overlays.default - (final: prev: { - rnix-lsp = inputs.rnix-lsp.defaultPackage.${system}; - nil = inputs.nil.packages.${system}.default; - }) - ]; - }; - - docs = import ./docs { - inherit pkgs; - nmdSrc = inputs.nmd; - }; - - tidalPkg = buildPkg pkgs [tidalConfig]; - nixPkg = buildPkg pkgs [nixConfig]; - maximalPkg = buildPkg pkgs [maximalConfig]; - in { - apps = - rec { - nix = { - type = "app"; - program = nvimBin nixPkg; - }; - maximal = { - type = "app"; - program = nvimBin maximalPkg; - }; - default = nix; - } - // ( - if !(builtins.elem system ["aarch64-darwin" "x86_64-darwin"]) - then { - tidal = { - type = "app"; - program = nvimBin tidalPkg; - }; - } - else {} - ); - - devShells.default = pkgs.mkShell {nativeBuildInputs = [nixPkg];}; - - packages = - { - docs-html = docs.manual.html; - docs-manpages = docs.manPages; - docs-json = docs.options.json; - default = nixPkg; - nix = nixPkg; - maximal = maximalPkg; - } - // ( - if !(builtins.elem system ["aarch64-darwin" "x86_64-darwin"]) - then { - tidal = tidalPkg; - } - else {} - ); - })); + # Flake inputs inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; + flake-parts.url = "github:hercules-ci/flake-parts"; flake-utils.url = "github:numtide/flake-utils"; # For generating documentation website @@ -594,11 +374,6 @@ flake = false; }; - tabnine-nvim = { - url = "github:codota/tabnine-nvim"; - flake = false; - }; - # Session management nvim-session-manager = { url = "github:Shatur/neovim-session-manager"; diff --git a/flake/apps.nix b/flake/apps.nix new file mode 100644 index 0000000..6b53adf --- /dev/null +++ b/flake/apps.nix @@ -0,0 +1,21 @@ +{lib, ...}: { + perSystem = { + system, + config, + ... + }: { + apps = + { + nix.program = lib.getExe config.packages.nix; + maximal.program = lib.getExe config.packages.maximal; + default = config.apps.nix; + } + // ( + if !(builtins.elem system ["aarch64-darwin" "x86_64-darwin"]) + then { + tidal.program = lib.getExe config.packages.tidal; + } + else {} + ); + }; +} diff --git a/flake/legacyPackages.nix b/flake/legacyPackages.nix new file mode 100644 index 0000000..d6fb73c --- /dev/null +++ b/flake/legacyPackages.nix @@ -0,0 +1,19 @@ +{inputs, ...}: { + perSystem = { + system, + inputs', + ... + }: { + legacyPackages = import inputs.nixpkgs { + inherit system; + overlays = [ + inputs.tidalcycles.overlays.default + inputs.self.overlays.default + (_: _: { + rnix-lsp = inputs'.rnix-lsp.defaultPackage; + nil = inputs'.nil.packages.default; + }) + ]; + }; + }; +} diff --git a/flake/overlays.nix b/flake/overlays.nix new file mode 100644 index 0000000..44002b5 --- /dev/null +++ b/flake/overlays.nix @@ -0,0 +1,23 @@ +{inputs, ...}: let + inherit (import ../extra.nix inputs) neovimConfiguration mainConfig; + + tidalConfig = { + config.vim.tidal.enable = true; + }; + + buildPkg = pkgs: modules: + (neovimConfiguration { + inherit pkgs modules; + }) + .neovim; + + nixConfig = mainConfig false; + maximalConfig = mainConfig true; +in { + flake.overlays.default = final: prev: { + inherit neovimConfiguration; + neovim-nix = buildPkg prev [nixConfig]; + neovim-maximal = buildPkg prev [maximalConfig]; + neovim-tidal = buildPkg prev [tidalConfig]; + }; +} diff --git a/flake/packages.nix b/flake/packages.nix new file mode 100644 index 0000000..b43f964 --- /dev/null +++ b/flake/packages.nix @@ -0,0 +1,32 @@ +{inputs, ...}: { + perSystem = { + system, + config, + pkgs, + lib, + ... + }: { + packages = let + docs = import ../docs { + inherit pkgs; + nmdSrc = inputs.nmd; + }; + in + { + # Documentation + docs = docs.manual.html; + docs-html = docs.manual.html; + docs-manpages = docs.manPages; + docs-json = docs.options.json; + + # nvim configs + nix = config.legacyPackages.neovim-nix; + maximal = config.legacyPackages.neovim-maximal; + } + // ( + if !(builtins.elem system ["aarch64-darwin" "x86_64-darwin"]) + then {tidal = config.legacyPackages.neovim-tidal;} + else {} + ); + }; +} diff --git a/modules/lib/booleans.nix b/lib/booleans.nix similarity index 100% rename from modules/lib/booleans.nix rename to lib/booleans.nix diff --git a/modules/lib/dag.nix b/lib/dag.nix similarity index 100% rename from modules/lib/dag.nix rename to lib/dag.nix diff --git a/modules/lib/default.nix b/lib/default.nix similarity index 100% rename from modules/lib/default.nix rename to lib/default.nix diff --git a/modules/lib/hm.nix b/lib/hm-module.nix similarity index 65% rename from modules/lib/hm.nix rename to lib/hm-module.nix index b5f5932..838f8c4 100644 --- a/modules/lib/hm.nix +++ b/lib/hm-module.nix @@ -5,14 +5,14 @@ lib ? pkgs.lib, ... }: let - cfg = config.programs.neovim-ide; - set = pkgs.neovimBuilder {config = cfg.settings;}; + cfg = config.programs.neovim-flake; + set = pkgs.neovim-maximal {mainConfig = cfg.settings;}; in with lib; { meta.maintainers = [maintainers.notashelf]; - options.programs.neovim-ide = { - enable = mkEnableOption "NeoVim with LSP enabled for Scala, Haskell, Rust and more."; + options.programs.neovim-flake = { + enable = mkEnableOption "A NeoVim IDE with a focus on configurability and extensibility."; settings = mkOption { type = types.attrsOf types.anything; @@ -31,15 +31,6 @@ in lspSignature.enable = true; rust.enable = false; nix = true; - dhall = true; - elm = true; - haskell = true; - scala = true; - sql = true; - python = false; - clang = false; - ts = false; - go = false; }; } ''; diff --git a/modules/lib/stdlib-extended.nix b/lib/stdlib-extended.nix similarity index 100% rename from modules/lib/stdlib-extended.nix rename to lib/stdlib-extended.nix diff --git a/modules/lib/types-dag.nix b/lib/types-dag.nix similarity index 100% rename from modules/lib/types-dag.nix rename to lib/types-dag.nix diff --git a/modules/lib/types-plugin.nix b/lib/types-plugin.nix similarity index 100% rename from modules/lib/types-plugin.nix rename to lib/types-plugin.nix diff --git a/modules/lib/types.nix b/lib/types.nix similarity index 100% rename from modules/lib/types.nix rename to lib/types.nix diff --git a/modules/assistant/copilot.nix b/modules/assistant/copilot.nix index c6bb1ec..b15d262 100644 --- a/modules/assistant/copilot.nix +++ b/modules/assistant/copilot.nix @@ -13,11 +13,15 @@ in { }; config = mkIf cfg.enable { - vim.startPlugins = ["copilot-lua"]; + vim.startPlugins = [ + "copilot-lua" + pkgs.nodejs-slim-16_x + ]; vim.luaConfigRC.copilot = nvim.dag.entryAnywhere '' require("copilot").setup({ -- available options: https://github.com/zbirenbaum/copilot.lua + copilot_node_command = "${lib.getExe pkgs.nodejs-slim-16_x}", }) ''; }; diff --git a/modules/assistant/default.nix b/modules/assistant/default.nix index 3ae3509..68128af 100644 --- a/modules/assistant/default.nix +++ b/modules/assistant/default.nix @@ -1,6 +1,6 @@ _: { imports = [ ./copilot.nix - ./tabnine.nix + # ./tabnine.nix # removed until I find a way around the initialisation script the plugin requires ]; } diff --git a/modules/default.nix b/modules/default.nix index 5c1e08c..d8b4515 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -1,4 +1,4 @@ -{inputs}: { +inputs: { configuration, pkgs, lib ? pkgs.lib, @@ -6,10 +6,10 @@ extraSpecialArgs ? {}, }: let inherit (pkgs) neovim-unwrapped wrapNeovim vimPlugins; - inherit (builtins) map filter isString toString getAttr hasAttr attrNames; + inherit (builtins) map filter isString toString getAttr; inherit (pkgs.vimUtils) buildVimPluginFrom2Nix; - extendedLib = import ./lib/stdlib-extended.nix lib; + extendedLib = import ../lib/stdlib-extended.nix lib; nvimModules = import ./modules.nix { inherit check pkgs;