diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 00000000..de6ff5ef --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +* @NotAShelf diff --git a/.github/workflows/cachix.yml b/.github/workflows/cachix.yml new file mode 100644 index 00000000..47bd48fd --- /dev/null +++ b/.github/workflows/cachix.yml @@ -0,0 +1,46 @@ +name: build-and-cache + +on: + workflow_dispatch: + push: + paths-ignore: + - '**/README.md' + - '**/.gitignore' + - '**/assets' + +jobs: + nix: + runs-on: ubuntu-latest + strategy: + matrix: + package: + - default + - nix + - tidal + - maximal + steps: + - uses: easimon/maximize-build-space@v6 + with: + overprovision-lvm: true + remove-android: true + remove-dotnet: true + remove-haskell: true + - uses: actions/checkout@v3 + - uses: cachix/install-nix-action@v18 + with: + extra_nix_config: | + access-tokens = github.com=${{ secrets.GITHUB_TOKEN }} + auto-optimise-store = true + experimental-features = nix-command flakes + nix_path: nixpkgs=channel:nixos-unstable + - uses: cachix/cachix-action@v12 + with: + authToken: ${{ secrets.CACHIX_TOKEN }} + extraPullNames: nix-community + name: neovim-flake + - name: Set default git branch (to reduce log spam) + run: git config --global init.defaultBranch main + - name: Validate Flakes + run: nix flake check + - name: Build Hyprland with default settings + run: nix build .#${{ matrix.package }} --print-build-logs diff --git a/.gitignore b/.gitignore index 121ea042..afe60dfa 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,13 @@ -result -.config +# Ignore nix artifacts +result/ +.direnv + +# Ignore files generated by common IDEs +.vscode/* +.idea/* + +# Ignore log files generated by my debuggers +*.log +*.log.* + +# diff --git a/LICENSE b/LICENSE index 9f3cbc38..342db3f6 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2021 Jordan +Copyright (c) 2023 NotAShelf Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index b249b315..76e55c8c 100644 --- a/README.md +++ b/README.md @@ -1,30 +1,144 @@ -# neovim-flake +

+ + Latest release + + + Last commit + + + License + + + Stars + + + Issues + + + Repo Size + + + Patreon donate button + -A highly configurable nix flake for neovim. +

+ +

+

-Come join the Matrix room if you have any questions or need help: [#neovim-flake:matrix.org](https://matrix.to/#/#neovim-flake:matrix.org) +An Nix wrapped IDE layer for the superior text editor, Neovim. + +--- + +

+ +**[
 Install 
][Install]** +**[
 Configure 
][Configure]** +**[
 Documentation 
][Documentation]** +**[
 Contribute 
][Contribute]** +**[
 FAQ 
][Faq]** + +

+ +[Contribute]: #contributing +[Install]: #install +[Configure]: #configure +[Documentation]: #documentation +[FAQ]: #faq + +--- + +A highly configurable nix flake for Neovim, packing everything you might need to create your own neovim IDE. + +## Install + +### Using `nix` + +The easiest way to install is to use the `nix profile` command. To install the default configuration, run: + +```console +nix run github:notashelf/neovim-flake +``` + +The package exposes `.#nix` as the default output. You may use `.#nix`, `.#tidal` or `.#maximal` to get different configurations. + +It is as simply as changing the target output to get a different configuration. For example, to get a configuration with `tidal` support, run: + +```console +nix run github:notashelf/neovim-flake#tidal +``` + +Similar instructions will apply for `nix profile install`. + +### On NixOS + +NixOS users may add this repo to their flake inputs as such: + +```nix +{ + inputs = { + # point at this repository, you may pin specific revisions or branches while using `github:` + neovim-flake.url = "github:notashelf/neovim-flake"; + + # you may override our nixpkgs with your own, this will save you some cache hits and s recommended + nixpkgs.follows = "nixpkgs"; + }; +} +``` + +Then, you can use the `neovim-flake` input in your `systemPackages` or `home.packages`. + +## Configure + +TODO (awaiting #1 to be merged, which implements a separate configuration file) ## Documentation -See the [neovim-flake Manual](https://jordanisaacs.github.io/neovim-flake/) for documentation, available options, and release notes. +See the [neovim-flake Manual](https://notashelf.github.io/neovim-flake/) for detailed documentation, available options, and release notes. +If you want to dive right into trying **neovim-flake** you can get a fully featured configuration with `nix` language support by running: -If you want to dive right into trying neovim-flake you can get a fully featured configuration with `nix` language support by running: - -``` -nix run github:jordanisaacs/neovim-flake +```console +nix run github:notashelf/neovim-flake ``` -## Screenshot +The documentation is scarce right now as a result of the ongoing rebase and refactor, but shall be available once more soon. -![screenshot](./screenshot.png) +## Help + +You can create an issue on the [issue tracker](issues) to ask questions or report bugs. I am not yet on spaces like matrix or IRC, so please use the issue tracker for now. ## Philosophy -The philosophy behind this flake configuration is to allow for easily configurable and reproducible neovim environments. Enter a directory and have a ready to go neovim configuration that is the same on every machine. Whether you are a developer, writer, or live coder (see tidal cycles below!), quickly craft a config that suits every project's need. Think of it like a distribution of Neovim that takes advantage of pinning vim plugins and third party dependencies (such as tree-sitter grammars, language servers, and more). +The philosophy behind this flake configuration is to create an easily configurable and reproducible Neovim environment. While it does sacrifice in size +(which I know some users will find *disagreeable*), it offers a lot of flexibility and customizability in exchange for the large size of the flake inputs. +The KISS (Keep it simple, stupid) principle has been abandoned here, but you can ultimately declare a configuration that follows KISS. +For it is very easy to bring your own plugins and configurations. Whether you are a developer, writer, or live coder (see tidal cycles below!), +quickly craft a config that suits every project's need. Think of it like a distribution of Neovim that takes advantage of pinning vim plugins and +third party dependencies (such as tree-sitter grammars, language servers, and more). -As a result, one should never get a broken config when setting options. If setting multiple options results in a broken neovim, file an issue! Each plugin knows when another plugin which allows for smart configuration of keybindings and automatic setup of things like completion sources and languages. +One should never get a broken config when setting options. If setting multiple options results in a broken Neovim, file an issue! Each plugin knows when another plugin which allows for smart configuration of keybindings and automatic setup of things like completion sources and languages. +## Credits -## Credit +This configuration is based on a few other configurations, including: -Originally based on Wil Taylor's amazing [neovim-flake](https://github.com/wiltaylor/neovim-flake) +- [@sioodmy's](https://github.com/sioodmy) [dotfiles](https://github.com/sioodmy/dotfiles) +- [@wiltaylor's](https://github.com/wiltaylor) [neovim-flake](https://github.com/wiltaylor/neovim-flake) +- [@jordanisaacs's](https://github.com/jordanisaacs) [neovim-flake](https://github.com/jordanisaacs/neovim-flake) +- [@gvolpe's](https://github.com/gvolpe) [neovim-flake](https://github.com/gvolpe/neovim-flake) + +I am grateful for their work and inspiration. + +## FAQ + +**Q**: Why is this flake so big? + +**A**: I have sacrificed in size in order to provide a highly configurable and reproducible Neovim environment. A binary cache is provided to +eleminate the need to build the flake from source, but it is still a large flake. If you do not need all the features, you can use the default `nix` output +instead of the `maximal` output. This will reduce size by a lot, but you will lose some language specific features. + +**Q**: Will you use a plugin manager? + +**A**: No. If you feel the need to ask that question, then you have missed the whole point of using nix and ultimately this flake. We load plugins with raw lua. + +--- diff --git a/assets/alternative_prompt.png b/assets/alternative_prompt.png new file mode 100644 index 00000000..b6537ae3 Binary files /dev/null and b/assets/alternative_prompt.png differ diff --git a/assets/dashboard.png b/assets/dashboard.png new file mode 100644 index 00000000..59b6d93b Binary files /dev/null and b/assets/dashboard.png differ diff --git a/assets/ide_mode.png b/assets/ide_mode.png new file mode 100644 index 00000000..5ee47aa1 Binary files /dev/null and b/assets/ide_mode.png differ diff --git a/assets/telescope.png b/assets/telescope.png new file mode 100644 index 00000000..fd677d58 Binary files /dev/null and b/assets/telescope.png differ diff --git a/docs/custom-configs.adoc b/docs/custom-configs.adoc index 17994f76..74417cb4 100644 --- a/docs/custom-configs.adoc +++ b/docs/custom-configs.adoc @@ -18,7 +18,7 @@ The following is an example of a barebones vim configuration with the default th [source,nix] ---- { - inputs.neovim-flake.url = "github:jordanisaacs/neovim-flake"; + inputs.neovim-flake.url = "github:notashelf/neovim-flake"; outputs = {nixpkgs, neovim-flake, ...}: let system = "x86_64-linux"; diff --git a/docs/default-configs.adoc b/docs/default-configs.adoc index 1a8f0f6d..4cb05633 100644 --- a/docs/default-configs.adoc +++ b/docs/default-configs.adoc @@ -7,7 +7,7 @@ While you can configure neovim-flake yourself using the builder, here are a few === Tidal Cycles [source,console] -$ nix run github:jordanisaacs/neovim-flake#tidal file.tidal +$ nix run github:notashelf/neovim-flake#tidal file.tidal Utilizing https://github.com/tidalcycles/vim-tidal[vim-tidal] and mitchmindtree's fantastic https://github.com/mitchmindtree/tidalcycles.nix[tidalcycles.nix] start playing with tidal cycles in a single command. @@ -18,7 +18,7 @@ In your tidal file, type a cycle e.g. `d1 $ s "drum"` and then press _ctrl+enter === Nix [source,console] -$ nix run github:jordanisaacs/neovim-flake#nix test.nix +$ nix run github:notashelf/neovim-flake#nix test.nix Enables all the of neovim plugins, with language support for specifically Nix. This lets you see what a fully configured neovim setup looks like without downloading a whole bunch of language servers and associated tools. @@ -26,11 +26,12 @@ Enables all the of neovim plugins, with language support for specifically Nix. T === Maximal [source,console] -$ nix shell github:jordanisaacs/neovim-flake#maximal test.nix +$ nix run github:notashelf/neovim-flake#maximal test.nix It is the same fully configured neovim as with the <> config, but with every supported language enabled. [NOTE] ==== -Running the maximal config will download *a lot* of packages as it is downloading language servers, formatters, and more. +Running the maximal config will download *a lot* of packages, as it will be downloading language servers, formatters, and more. You are recommended to use the binary cache if +using the default configs. ==== diff --git a/docs/default.nix b/docs/default.nix index 3b043022..6cf73dc2 100644 --- a/docs/default.nix +++ b/docs/default.nix @@ -22,7 +22,7 @@ } ++ [scrubbedPkgsModule]; moduleRootPaths = [./..]; - mkModuleUrl = path: "https://github.com/jordanisaacs/neovim-flake/blob/main/${path}#blob-path"; + mkModuleUrl = path: "https://github.com/notashelf/neovim-flake/blob/main/${path}#blob-path"; channelName = "neovim-flake"; docBook.id = "neovim-flake-options"; }; diff --git a/docs/man-pages.xml b/docs/man-pages.xml index 669652e0..2526aea6 100644 --- a/docs/man-pages.xml +++ b/docs/man-pages.xml @@ -5,7 +5,7 @@ neovim-flake contributors - 2021–2022 + 2023 neovim-flake contributors diff --git a/docs/manual.xml b/docs/manual.xml index e961e1ea..2948e5cc 100644 --- a/docs/manual.xml +++ b/docs/manual.xml @@ -9,10 +9,8 @@ Preface - If you encounter problems or want to discuss neovim-flake then join the Matrix room - #neovim-flake:matrix.org. If your problem is caused by a bug in neovim-flake then it should be reported on the - neovim-flake issue tracker. + neovim-flake issue tracker. diff --git a/docs/plugins.adoc b/docs/plugins.adoc index b3a48394..a369b4f0 100644 --- a/docs/plugins.adoc +++ b/docs/plugins.adoc @@ -3,6 +3,42 @@ The following are the neovim plugins used within neovim-flake. Some plugins are explicitly enabled by the user, while others are enabled implicitly. + +[[sec-plugins-buffer]] +=== Coding Assistants + +* https://github.com/zbirenbaum/copilot.lua[copilot.lua] a lua replacement for github.vim, the license nightmare AI assistant +* https://github.com/codota/tabnine-nvim[tabnine-nvim] neovim plugin for the more ethically acceptable AI assistant TabNine + +[[sec-plugins-buffer]] +=== Buffers + +* https://github.com/akinsho/bufferline.nvim[nvim-bufferline-lua] a buffer line with tab integration +* https://github.com/famiu/bufdelete.nvim[bufdelete-nvim] delete buffers without losing window layout + +[[sec-plugins-commenting]] +=== Commenting + +* https://github.com/b3nj5m1n/kommentary[kommentary] neovim plugin to comment text in and out, written in lua. Supports commenting out the current line, a visual selection and a motion +* https://github.com/folke/todo-comments.nvim[todo-comments.nvim] plugin to highlight and search for todo comments like TODO, HACK, BUG in your codebase + +[[sec-plugins-completions]] +=== Completions + +* https://github.com/hrsh7th/nvim-cmp[nvim-cmp] a completion engine that utilizes sources +** https://github.com/hrsh7th/cmp-buffer[cmp-buffer] a source for buffer words +** https://github.com/hrsh7th/cmp-nvim-lsp[cmp-nvim-lsp] a source for builtin LSP client +** https://github.com/hrsh7th/cmp-vsnip[cmp-vsnip] a source for vim-vsnip autocomplete +** https://github.com/hrsh7th/cmp-path[cmp-path] a source for path autocomplete +** https://github.com/ray-x/cmp-treesitter[cmp-treesitter] treesitter nodes autcomplete + +[[sec-plugins-dashboard]] +=== Dashboard + +* https://github.com/glepnir/dashboard-nvim[dashboard.nvim] fancy and blazing fast start screen plugin for Neovim +* https://github.com/goolord/alpha-nvim[alpha.nvim] a fast and fully programmable greeter for neovim +* https://github.com/mhinz/vim-startify[vim-startify] a fancy start screen for {neo,}vim + [[sec-plugins-server]] === Language Server @@ -14,12 +50,6 @@ The following are the neovim plugins used within neovim-flake. Some plugins are * https://github.com/ray-x/lsp_signature.nvim[lsp-signature] show function signatures as you type * https://github.com/onsails/lspkind-nvim[lspkind-nvim] for pictograms in lsp (with support for nvim-cmp) -[[sec-plugins-buffer]] -=== Buffers - -* https://github.com/akinsho/bufferline.nvim[nvim-bufferline-lua] a buffer line with tab integration -* https://github.com/famiu/bufdelete.nvim[bufdelete-nvim] delete buffers without losing window layout - [[sec-plugins-statuslines]] === Statuslines @@ -44,23 +74,58 @@ The following are the neovim plugins used within neovim-flake. Some plugins are === Visuals * https://github.com/lukas-reineke/indent-blankline.nvim[indent-blankline] for indentation guides -* https://github.com/kyazdani42/nvim-web-devicons[nvim-web-devicons] Plugins and colors for icons. Requires patched font +* https://github.com/kyazdani42/nvim-web-devicons[nvim-web-devicons] plugins and colors for icons. Requires patched font +* https://github.com/declancm/cinnamon.nvim[cinnamon.nvim] smooth scrolling for ANY movement command +* https://github.com/nvim-cursorline[nvim-cursorline] a plugin for neovim that highlights cursor words and lines +* https://github.com/petertriho/nvim-scrollbar[nvim-scrollbar] a scrollbar plugin for neovim +* https://github.com/Eandrju/cellular-automaton.nvim[cellular-automatan] a vanity to plugin to help you procrastinate more efficiently + +[[sec-plugins-minimap]] +=== Minimap + +* https://github.com/wfxr/minimap.vim[minimap.vim] a blazing fast minimap plugin for neovim. Depends on code-minimap +* https://github.com/gorbit99/codewindow.nvim[codewindow.nvim] a simple, configurable minimap plugin for neovim with no external dependencies + +[[sec-plugins-notifications]] +=== Notifications + +* https://github.com/rcarriga/nvim-notify[nvim-notify] simple notification plugin that also integrates with noice.nvim + +[sec-plugins-notes]] +=== Note-taking + +* https://github.com/obsidian.nvim[obsidian.nvim] a neovim plugin that deeply integrates with the obsidian markdown editor. Also works standalone +* https://github.com/nvim-orgmode/orgmode[orgmode] a neovim replacement for emac orgmode + +[sec-plugins-session-management]] +=== Session Management + +* https://github.com/Shatur/neovim-session-manager[neovim-session-manager] a simple wrapper around :mksession + +[sec-plugins-terminal]] +=== Terminal + +* https://github.com/akinsho/toggleterm.nvim[toggleterm.nvim] a simple terminal plugin that opens a terminal buffer on demand + +[[sec-plugins-presence]] +=== Rich Presence + +* https://github.com/andweeb/presence.nvim[presence.nvim] light and powerful discord rich presence plugin [[sec-plugins-utilities]] === Utilities * https://github.com/nvim-telescope/telescope.nvim[telescope] an extendable fuzzy finder of lists. Working ripgrep and fd * https://github.com/folke/which-key.nvim[which-key] a popup that displays possible keybindings of command being typed +* https://github.com/sudormrfbin/cheatsheet.nvim[cheatsheet.nvim] a searchable cheatsheet for neovim from within the editor using Telescope +* https://github.com/ga-rosa/ccc.nvim[ccc.nvim] super powerful color picker / colorizer plugin. +* https://github.com/ziontee113/icon-picker.nvim[icon-picker.nvim] an icon picker plugin that provides access to thousands of icons +* https://github.com/jbyuki/venn.nvim[venn.nvim] draw venn diagrams inside neovim -[[sec-plugins-completions]] -=== Completions +[[sec-plugins-utilities]] +=== Utilities -* https://github.com/hrsh7th/nvim-cmp[nvim-cmp] a completion engine that utilizes sources -** https://github.com/hrsh7th/cmp-buffer[cmp-buffer] a source for buffer words -** https://github.com/hrsh7th/cmp-nvim-lsp[cmp-nvim-lsp] a source for builtin LSP client -** https://github.com/hrsh7th/cmp-vsnip[cmp-vsnip] a source for vim-vsnip autocomplete -** https://github.com/hrsh7th/cmp-path[cmp-path] a source for path autocomplete -** https://github.com/ray-x/cmp-treesitter[cmp-treesitter] treesitter nodes autcomplete +* https://github.com/folke/noice.nvim[noice.nvim] an experimental neovim plugin that replaces some UI components of neovim [[sec-plugins-snippets]] === Snippets @@ -109,3 +174,7 @@ The following are the neovim plugins used within neovim-flake. Some plugins are === Dependencies * https://github.com/nvim-lua/plenary.nvim[plenary] which is a dependency of some plugins, installed automatically if needed +* https://github.comstevearc/dressing.nvim[dressing.nvim] which is a dependency for icon-picker.nvim +* https://github.com/preservim/vim-markdown[vim-markdown] which is a dependency for obsidian.nvim +* https://github.comgodlygeek/tabular[tabular] which is a dependency for vim-markdown +* https://github.com/MunifTanjim/nui.nvim[nui.nvim] which is a dependency for nui-nvim \ No newline at end of file diff --git a/docs/release-notes/release-notes.adoc b/docs/release-notes/release-notes.adoc index 0bac3acb..3a408b71 100644 --- a/docs/release-notes/release-notes.adoc +++ b/docs/release-notes/release-notes.adoc @@ -7,3 +7,4 @@ This section lists the release notes for tagged version of neovim-flake and curr :leveloffset: 1 include::rl-0.1.adoc[] +include::rl-0.2.adoc[] diff --git a/docs/release-notes/rl-0.2.adoc b/docs/release-notes/rl-0.2.adoc new file mode 100644 index 00000000..c1e86f25 --- /dev/null +++ b/docs/release-notes/rl-0.2.adoc @@ -0,0 +1,46 @@ +[[sec-release-0.2]] +== Release 0.2 + +Release notes for release 0.2 + + +[[sec-release-0.2-changelog]] +=== Changelog + +https://github.com/notashelf[notashelf]: + +* Added two minimap plugins under `vim.minimap`. `codewindow.nvim` is enabled by default, while `minimap.vim` is available with its code-minimap dependency. + +* A complementary plugin, `obsidian.nvim` and the Neovim alternative for Emacs' orgmode with `orgmode.nvim` have been added. Both will be disabled by default. + +* Smooth scrolling for ANY movement command is now available with `cinnamon.nvim` + +* You will now notice a dashboard on startup. This is provided by the `alpha.nvim` plugin. You can use any of the three available dashboard plugins, or disable them entirely. + +* There is now a scrollbar on active buffers, which can highlight errors by hooking to your LSPs. This is on by default, but can be toggled off under `vim.visuals` if seen necessary. + +* Discord Rich Presence has been added through `presence.nvim` for those who want to flex that they are using the *superior* text editor. + +* An icon picker is now available with telescope integration. You can use `:IconPickerInsert` or `:IconPickerYank` to add icons to your code. + +* A general purpose cheatsheet has been added through `cheatsheet.nvim`. Forget no longer! + +* `ccc.nvim` has been added to the default plugins to allow picking colors with ease. + +* Most UI components of Neovim have been replaced through the help of `noice.nvim`. There are also notifications and custom UI elements available for Neovim messages and prompts. + +* A (floating by default) terminal has been added through `toggleterm.nvim`. + +* Harness the power of ethical (`tabnine.nvim`) and not-so-ethical (`copilot.lua`) AI by those new assistant plugins. Both are off by default, TabNine needs to be wrapped before it's working. + +* Experimental mouse gestures have been addede through `gesture.nvim`. See plugin page and the relevant module for more details on how to use. + +* Re-open last visited buffers via `nvim-session-manager`. Disabled by default as deleting buffers seems to be problematic at the moment. + +* Most of NvimTree's configuration options have been changed with some options being toggled to off by default. + +* Lualine had its configuration simplified and style toned down. Less color, more info. + +* Modules where multiple plugin configurations were in the same directory have been simplified. Each plugin inside a single module gets its own directory to be imported. + +* Separate config options with the same parent attribute have been merged into one for simplicity. \ No newline at end of file diff --git a/flake.lock b/flake.lock index bbe41c0a..0c74fd21 100644 --- a/flake.lock +++ b/flake.lock @@ -1,13 +1,29 @@ { "nodes": { + "alpha-nvim": { + "flake": false, + "locked": { + "lastModified": 1669699262, + "narHash": "sha256-uKJRMbNyQtiFhkrsniK7SqxM+XS2l3qffeCqmYznPuk=", + "owner": "goolord", + "repo": "alpha-nvim", + "rev": "21a0f2520ad3a7c32c0822f943368dc063a569fb", + "type": "github" + }, + "original": { + "owner": "goolord", + "repo": "alpha-nvim", + "type": "github" + } + }, "bufdelete-nvim": { "flake": false, "locked": { - "lastModified": 1649744299, - "narHash": "sha256-0Igk8iPt4UQQTJRBPzTASzNOqY4zlaMiE1PQiBc/KGc=", + "lastModified": 1670152487, + "narHash": "sha256-QRSGD0RJ0Jmee43ODr+d4JXEyMHo/UklpUyezGJqWyE=", "owner": "famiu", "repo": "bufdelete.nvim", - "rev": "96454aedf95f52393a28cfcfc76482895de014ee", + "rev": "f79e9d186b42fba5f1b1362006e7c70240db97a4", "type": "github" }, "original": { @@ -19,11 +35,11 @@ "catppuccin": { "flake": false, "locked": { - "lastModified": 1670687538, - "narHash": "sha256-BRQLNMYbOINJXQkKFz2SpXQoaynzcauWSwNfTChaLdc=", + "lastModified": 1675250216, + "narHash": "sha256-t7jVZoQwoLptfSo7WvA4DJe3mmqAk9R5nNcvldDSp8w=", "owner": "catppuccin", "repo": "nvim", - "rev": "1d22da687d36c37133b13f2b41658c1c989e77e0", + "rev": "8769e767f12f5bf0b7d1250ee067088e7054809a", "type": "github" }, "original": { @@ -32,14 +48,62 @@ "type": "github" } }, + "cellular-automaton": { + "flake": false, + "locked": { + "lastModified": 1674679594, + "narHash": "sha256-h4KQCf8+GbxWSyZzDny07YFZm7j+aSSfm51lsaK0Ers=", + "owner": "Eandrju", + "repo": "cellular-automaton.nvim", + "rev": "679943b8e1e5ef79aaeeaf4b00782c52eb4e928f", + "type": "github" + }, + "original": { + "owner": "Eandrju", + "repo": "cellular-automaton.nvim", + "type": "github" + } + }, + "cheatsheet-nvim": { + "flake": false, + "locked": { + "lastModified": 1640255456, + "narHash": "sha256-TYkGB7cON2t4GwMaR9H1MDG2j3btBv2AR37ade8kqTY=", + "owner": "sudormrfbin", + "repo": "cheatsheet.nvim", + "rev": "9716f9aaa94dd1fd6ce59b5aae0e5f25e2a463ef", + "type": "github" + }, + "original": { + "owner": "sudormrfbin", + "repo": "cheatsheet.nvim", + "type": "github" + } + }, + "cinnamon-nvim": { + "flake": false, + "locked": { + "lastModified": 1670143364, + "narHash": "sha256-JglXQhoPgN9sQ3yuv0+VQxmKMvoQTu5lbGLSRaQkytI=", + "owner": "declancm", + "repo": "cinnamon.nvim", + "rev": "c406ffda3a0302f32c23b24ab756ea20467d6578", + "type": "github" + }, + "original": { + "owner": "declancm", + "repo": "cinnamon.nvim", + "type": "github" + } + }, "cmp-buffer": { "flake": false, "locked": { - "lastModified": 1645413199, - "narHash": "sha256-itDEtoRvZn1mtLhT9WtqKVXoMRe5Qw0/QUf+TFzGNVk=", + "lastModified": 1660101488, + "narHash": "sha256-dG4U7MtnXThoa/PD+qFtCt76MQ14V1wX8GMYcvxEnbM=", "owner": "hrsh7th", "repo": "cmp-buffer", - "rev": "d66c4c2d376e5be99db68d2362cd94d250987525", + "rev": "3022dbc9166796b644a841a02de8dd1cc1d311fa", "type": "github" }, "original": { @@ -51,11 +115,11 @@ "cmp-nvim-lsp": { "flake": false, "locked": { - "lastModified": 1665863036, - "narHash": "sha256-4pppdlVJdn75/faaP3N+o7HgEHxyR1nvkHncnFXGDFA=", + "lastModified": 1668566979, + "narHash": "sha256-Mqkp8IH/laUx0cK7S0BjusTT+OtOOJOamZM4+93RHdU=", "owner": "hrsh7th", "repo": "cmp-nvim-lsp", - "rev": "3cf38d9c957e95c397b66f91967758b31be4abe6", + "rev": "59224771f91b86d1de12570b4070fe4ad7cd1eeb", "type": "github" }, "original": { @@ -67,11 +131,11 @@ "cmp-path": { "flake": false, "locked": { - "lastModified": 1643823794, - "narHash": "sha256-xYzTpqVKpBBnajqqRRzAXlHAC13VGK1D9mFr3bntepY=", + "lastModified": 1664784283, + "narHash": "sha256-thppiiV3wjIaZnAXmsh7j3DUc6ceSCvGzviwFUnoPaI=", "owner": "hrsh7th", "repo": "cmp-path", - "rev": "466b6b8270f7ba89abd59f402c73f63c7331ff6e", + "rev": "91ff86cd9c29299a64f968ebb45846c485725f23", "type": "github" }, "original": { @@ -83,11 +147,11 @@ "cmp-treesitter": { "flake": false, "locked": { - "lastModified": 1650880862, - "narHash": "sha256-ZQ2VSrXcUEcy+1lbdvK/pnz3Ppp1lDr38g/z7OvhH8o=", + "lastModified": 1666995820, + "narHash": "sha256-+dOqV9QqN+s1no8vfL6DNeFBc2dYyduQqAH5zVwm3Rw=", "owner": "ray-x", "repo": "cmp-treesitter", - "rev": "c5187c31abd081ecef8b41e5eb476b7340442310", + "rev": "b40178b780d547bcf131c684bc5fd41af17d05f2", "type": "github" }, "original": { @@ -99,11 +163,11 @@ "cmp-vsnip": { "flake": false, "locked": { - "lastModified": 1636543683, - "narHash": "sha256-7K3shsiGK7ISFXj9D9MPK7yRqIxeCrbj1IsggToWHO4=", + "lastModified": 1669100283, + "narHash": "sha256-2mkN03noOr5vBvRbSb35xZKorSH+8savQNZtgM9+QcM=", "owner": "hrsh7th", "repo": "cmp-vsnip", - "rev": "0abfa1860f5e095a07c477da940cfcb0d273b700", + "rev": "989a8a73c44e926199bfd05fa7a516d51f2d2752", "type": "github" }, "original": { @@ -112,14 +176,62 @@ "type": "github" } }, + "codewindow-nvim": { + "flake": false, + "locked": { + "lastModified": 1674040274, + "narHash": "sha256-TBoMpFD5MQHZwv/6TxbMNrVp2m2ATw8hbD1mDzU4Nf8=", + "owner": "gorbit99", + "repo": "codewindow.nvim", + "rev": "94d84e1a15b94248f205b854e70cb95f0b615b38", + "type": "github" + }, + "original": { + "owner": "gorbit99", + "repo": "codewindow.nvim", + "type": "github" + } + }, + "colorizer": { + "flake": false, + "locked": { + "lastModified": 1674354831, + "narHash": "sha256-JbAjfoPUfLQ7ijRh8kank4iSZLOcxPJKt/uOTJap8/A=", + "owner": "uga-rosa", + "repo": "ccc.nvim", + "rev": "be0a8122fd77efb7b6a0d672bab10417e68fab8b", + "type": "github" + }, + "original": { + "owner": "uga-rosa", + "repo": "ccc.nvim", + "type": "github" + } + }, + "copilot-lua": { + "flake": false, + "locked": { + "lastModified": 1675346663, + "narHash": "sha256-+a286iUK7UijcbRLb8gXwmDFZAf1gYupS5f9EHB+dxU=", + "owner": "zbirenbaum", + "repo": "copilot.lua", + "rev": "a54e7b11a2c6efc9ddd3f42e56cf7d9eed1a9683", + "type": "github" + }, + "original": { + "owner": "zbirenbaum", + "repo": "copilot.lua", + "type": "github" + } + }, "crates-nvim": { "flake": false, "locked": { - "lastModified": 1668709750, - "narHash": "sha256-MdmZrZu877P0l4yeJNI6muiYmwVlsvFHJCEBrrhR1Zc=", + "lastModified": 1675348132, + "narHash": "sha256-CMhqiIXoCamLh8pfmYQZsAYeoJO5SHe7jBdfOuD1W0c=", "owner": "Saecki", "repo": "crates.nvim", - "rev": "e11e27864428a68b25e43b833e9081e350a38d96", + "rev": "1bca9122ddc4bf4c6573402bf6686fc084470a7e", "type": "github" }, "original": { @@ -128,6 +240,22 @@ "type": "github" } }, + "dashboard-nvim": { + "flake": false, + "locked": { + "lastModified": 1675564456, + "narHash": "sha256-KQ89wIEKIEetd6SDcNfui/hr3vRYGhh7W+XWPpB1Xc0=", + "owner": "glepnir", + "repo": "dashboard-nvim", + "rev": "97aaa208917f814f2e5799d5894ff791b4ab5059", + "type": "github" + }, + "original": { + "owner": "glepnir", + "repo": "dashboard-nvim", + "type": "github" + } + }, "dirt-samples-src": { "flake": false, "locked": { @@ -145,6 +273,38 @@ "type": "github" } }, + "discord-nvim": { + "flake": false, + "locked": { + "lastModified": 1674984077, + "narHash": "sha256-ZpsunLsn//zYgUtmAm5FqKVueVd/Pa1r55ZDqxCimBk=", + "owner": "andweeb", + "repo": "presence.nvim", + "rev": "87c857a56b7703f976d3a5ef15967d80508df6e6", + "type": "github" + }, + "original": { + "owner": "andweeb", + "repo": "presence.nvim", + "type": "github" + } + }, + "dressing-nvim": { + "flake": false, + "locked": { + "lastModified": 1675626245, + "narHash": "sha256-tBO21/0rpil2lItFl9UzALXNJbvmSfQuW+LOGet9YgI=", + "owner": "stevearc", + "repo": "dressing.nvim", + "rev": "db716a0f1279f79a886c0e0b6ab3c3d5ffdb42fe", + "type": "github" + }, + "original": { + "owner": "stevearc", + "repo": "dressing.nvim", + "type": "github" + } + }, "flake-utils": { "locked": { "lastModified": 1667395993, @@ -160,14 +320,30 @@ "type": "github" } }, + "gesture-nvim": { + "flake": false, + "locked": { + "lastModified": 1675384642, + "narHash": "sha256-HxVWZopV3wx6ANefuowrdbSQpQriYHV43r187t7UJXQ=", + "owner": "notomo", + "repo": "gesture.nvim", + "rev": "902a97219e126a08aea6016994c50eea485bcd79", + "type": "github" + }, + "original": { + "owner": "notomo", + "repo": "gesture.nvim", + "type": "github" + } + }, "gitsigns-nvim": { "flake": false, "locked": { - "lastModified": 1666700386, - "narHash": "sha256-pSYXCENFw/z7xppenPehniX8+INkrl+l1LgKKGlfrjQ=", + "lastModified": 1675416322, + "narHash": "sha256-nxqs6nIQKyK6GzQihgBUY1/HggF/i5huz5VsUUu4fKE=", "owner": "lewis6991", "repo": "gitsigns.nvim", - "rev": "851cd32caaea84f303c4fdf51d72dfa5fcd795bb", + "rev": "ec4742a7eebf68bec663041d359b95637242b5c3", "type": "github" }, "original": { @@ -179,11 +355,11 @@ "glow-nvim": { "flake": false, "locked": { - "lastModified": 1649861698, - "narHash": "sha256-c2HrVLCyekw9b8FxxVMUkBkUitGDX1AyslmM1kZQeCQ=", + "lastModified": 1675023136, + "narHash": "sha256-80gtxODbPDxI7nlt0LpFfQBG8Q9amWm5pRqoJxMRrcQ=", "owner": "ellisonleao", "repo": "glow.nvim", - "rev": "0c76518e440f2ea4dbadd87beec8eea4ce030f17", + "rev": "c87b1120b618577e64d910a7493a26829044a8a2", "type": "github" }, "original": { @@ -192,14 +368,30 @@ "type": "github" } }, + "icon-picker-nvim": { + "flake": false, + "locked": { + "lastModified": 1673847230, + "narHash": "sha256-vPFfpTrCO8AhBRm+1wEu3Uw28L39svfkAT9qgnJ9Zyg=", + "owner": "ziontee113", + "repo": "icon-picker.nvim", + "rev": "66d37ceae84099ca76235de44466829eb37118c2", + "type": "github" + }, + "original": { + "owner": "ziontee113", + "repo": "icon-picker.nvim", + "type": "github" + } + }, "indent-blankline": { "flake": false, "locked": { - "lastModified": 1649991995, - "narHash": "sha256-pMVby6w7UTR2f1Nxp0ZPlV+KrdXNJ+jEQeQe30Pfs3M=", + "lastModified": 1674709281, + "narHash": "sha256-EZ5h4Gj942L9MaykWAprjLb/ZYr2JptQi16Ym5SyWfw=", "owner": "lukas-reineke", "repo": "indent-blankline.nvim", - "rev": "045d9582094b27f5ae04d8b635c6da8e97e53f1d", + "rev": "8299fe7703dfff4b1752aeed271c3b95281a952d", "type": "github" }, "original": { @@ -211,11 +403,11 @@ "kommentary": { "flake": false, "locked": { - "lastModified": 1644888740, - "narHash": "sha256-6YNKYMxaKi02TLa+ebt97XGREnmTjdJAA3bSHFC4yX0=", + "lastModified": 1672983049, + "narHash": "sha256-N4n5tjNB1yX/QxH+t5aG0VxNwZhUJejv0b5V62WEKDU=", "owner": "b3nj5m1n", "repo": "kommentary", - "rev": "12ecde4ed3ecb39964000a5fd034ae4c1d307388", + "rev": "3a80117148c6798972bb69414423311ab151d368", "type": "github" }, "original": { @@ -227,11 +419,11 @@ "lsp-signature": { "flake": false, "locked": { - "lastModified": 1651382786, - "narHash": "sha256-owtDWZXZZH6z0m5oHfm/QUjRoWKH4LY6UUOZq8JPckI=", + "lastModified": 1675379662, + "narHash": "sha256-g5bAumjFvA0MBPNKWqOxk5OsaR4KEe5CEsiNN5YbIQU=", "owner": "ray-x", "repo": "lsp_signature.nvim", - "rev": "6d160406f948a810c40304224a1255c8bba5a415", + "rev": "6f6252f63b0baf0f2224c4caea33819a27f3f550", "type": "github" }, "original": { @@ -243,11 +435,11 @@ "lspkind": { "flake": false, "locked": { - "lastModified": 1650298271, - "narHash": "sha256-0103K5lnzWCyuT/qwiBUo5PJ7lUX7fo+zNeEnQClI7A=", + "lastModified": 1663824370, + "narHash": "sha256-WwUQ+O2rIfD4yl0GFx70GsZc9nnhS7b2KWfNdaXCLmM=", "owner": "onsails", "repo": "lspkind-nvim", - "rev": "57e5b5dfbe991151b07d272a06e365a77cc3d0e7", + "rev": "c68b3a003483cf382428a43035079f78474cd11e", "type": "github" }, "original": { @@ -259,11 +451,11 @@ "lspsaga": { "flake": false, "locked": { - "lastModified": 1647219889, - "narHash": "sha256-utb2Rp6RdYWZzVt4W7B7RHOk4Xq1Lli4RcHxZLa8dHc=", + "lastModified": 1670360222, + "narHash": "sha256-7ENInq3LAPPTdm0Fb7klOc630j8m4LRj1kLZZFYLh68=", "owner": "tami5", "repo": "lspsaga.nvim", - "rev": "5309d75bd90ce5b1708331df3af1e971fa83a2b9", + "rev": "5faeec9f2508d2d49a66c0ac0d191096b4e3fa81", "type": "github" }, "original": { @@ -275,11 +467,11 @@ "lualine": { "flake": false, "locked": { - "lastModified": 1651457787, - "narHash": "sha256-TaRC7Pj9g0nD+kk7VrySulR20GolXtR/roUnA3FM144=", + "lastModified": 1673418538, + "narHash": "sha256-3I9og+/lVRFJSpDVFwp2AM5bMqeP1KF8XB8Nyfpwhok=", "owner": "hoob3rt", "repo": "lualine.nvim", - "rev": "45d07fc026400c211337a7ce1cb90e7b7a397e31", + "rev": "0050b308552e45f7128f399886c86afefc3eb988", "type": "github" }, "original": { @@ -288,6 +480,22 @@ "type": "github" } }, + "minimap-vim": { + "flake": false, + "locked": { + "lastModified": 1666947112, + "narHash": "sha256-xKQfCh3R4MdHolRocZS0IC/OADZd8aVRQLlC0ErWSkc=", + "owner": "wfxr", + "repo": "minimap.vim", + "rev": "2b0151d7302f87f90c4664d119518dda73cc4633", + "type": "github" + }, + "original": { + "owner": "wfxr", + "repo": "minimap.vim", + "type": "github" + } + }, "naersk": { "inputs": { "nixpkgs": [ @@ -320,11 +528,11 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1669568240, - "narHash": "sha256-xarHQnV7XCvioDxoAhOI+KsDzPNeWZ3F1OCPJVWS5S4=", + "lastModified": 1675471872, + "narHash": "sha256-HBW6qBF/niMbdFxTuucSnDda9H/RSbbOs48fcXXImx0=", "owner": "oxalica", "repo": "nil", - "rev": "8f8a5d2cffb1a92b1b4b5001239ca9138675c3f4", + "rev": "1a15174958729ca578db517e735479ed5fb963db", "type": "github" }, "original": { @@ -335,11 +543,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1669809720, - "narHash": "sha256-RMT77f6CPOYtLLQ2esj+EJ1BPVWxf4RDidjrSvA5OhI=", + "lastModified": 1675584158, + "narHash": "sha256-SBkchaDzCHxnPNRDdtZ5ko5caHio9iS0Mbyn/xXbXxs=", "owner": "nixos", "repo": "nixpkgs", - "rev": "227de2b3bbec142f912c09d5e8a1b4e778aa54fb", + "rev": "d840126a0890621e7b220894d749132dd4bde6a0", "type": "github" }, "original": { @@ -384,11 +592,11 @@ "nmd": { "flake": false, "locked": { - "lastModified": 1666190571, - "narHash": "sha256-Z1hc7M9X6L+H83o9vOprijpzhTfOBjd0KmUTnpHAVjA=", + "lastModified": 1674431006, + "narHash": "sha256-CFKH2AiIH6vk0IQPrSa63+n2xZc2bIrEIUgnxd3Dg+w=", "owner": "rycee", "repo": "nmd", - "rev": "b75d312b4f33bd3294cd8ae5c2ca8c6da2afc169", + "rev": "409f1310b168f96c6c8b556d24731a3e7c26c255", "type": "gitlab" }, "original": { @@ -397,14 +605,46 @@ "type": "gitlab" } }, + "noice-nvim": { + "flake": false, + "locked": { + "lastModified": 1675023568, + "narHash": "sha256-5C05en9c6tZW3/vNjgCfFQFRFq5U0NKg/LK5EeUHc1o=", + "owner": "folke", + "repo": "noice.nvim", + "rev": "34f7cf628666c6eb0c93fbe8a0490e977ac78b7b", + "type": "github" + }, + "original": { + "owner": "folke", + "repo": "noice.nvim", + "type": "github" + } + }, + "nui-nvim": { + "flake": false, + "locked": { + "lastModified": 1675269986, + "narHash": "sha256-4vf+eqT7e638VeWfmh23K8EslJXyR6ZK6arvaeVgWlw=", + "owner": "MunifTanjim", + "repo": "nui.nvim", + "rev": "d147222a1300901656f3ebd5b95f91732785a329", + "type": "github" + }, + "original": { + "owner": "MunifTanjim", + "repo": "nui.nvim", + "type": "github" + } + }, "null-ls": { "flake": false, "locked": { - "lastModified": 1669991088, - "narHash": "sha256-DZgonVEzkgayvLY9jkEH1O/Xny6LQktyi8rTNbQlkMk=", + "lastModified": 1675398737, + "narHash": "sha256-IG66jvXizre17P2F3N9pWjmkQSP3jF+6lJeypNbSWUc=", "owner": "jose-elias-alvarez", "repo": "null-ls.nvim", - "rev": "a67897283fdb0051ad5c72e840e1845e195b979b", + "rev": "8f5d730021497233c39d3adbf4b8043d4be163f8", "type": "github" }, "original": { @@ -416,11 +656,11 @@ "nvim-autopairs": { "flake": false, "locked": { - "lastModified": 1651184422, - "narHash": "sha256-voiBJw752//W5oAGQ3wFl4XOUE5PGc/ddchXpWUfgFE=", + "lastModified": 1675089120, + "narHash": "sha256-wcNyOHhBkWVgbxIf4frKDKlMQEE9iMYWN78p+3rNJ+g=", "owner": "windwp", "repo": "nvim-autopairs", - "rev": "63779ea99ed43ab22660ac6ae5b506a40bf41aeb", + "rev": "5a3523ddb573804752de6c021c5cb82e267b79ca", "type": "github" }, "original": { @@ -449,11 +689,11 @@ "nvim-cmp": { "flake": false, "locked": { - "lastModified": 1666412792, - "narHash": "sha256-ErdM+ETpkgBtAvA/RedqN+DXvunQ4OYl58HpfZQkz/s=", + "lastModified": 1675440540, + "narHash": "sha256-BgI0dR7ss+pClGIu3EWXV7r5mMpo6Xt3QMVAxeWm++E=", "owner": "hrsh7th", "repo": "nvim-cmp", - "rev": "cdb77665bbf23bd2717d424ddf4bf98057c30bb3", + "rev": "cfafe0a1ca8933f7b7968a287d39904156f2c57d", "type": "github" }, "original": { @@ -465,11 +705,11 @@ "nvim-code-action-menu": { "flake": false, "locked": { - "lastModified": 1647509555, - "narHash": "sha256-fD9luuZe5mVkJTTtngH0jnwtqljhSZp0OFobBa4uqZI=", + "lastModified": 1671523188, + "narHash": "sha256-7szx+Me6WhrANbmfQ6C6gfSVB2owd02b3iZYhz7K6wY=", "owner": "weilbith", "repo": "nvim-code-action-menu", - "rev": "a864a79c8e024d4f5d95915210188c9c3430b160", + "rev": "e4399dbaf6eabff998d3d5f1cbcd8d9933710027", "type": "github" }, "original": { @@ -513,11 +753,11 @@ "nvim-lightbulb": { "flake": false, "locked": { - "lastModified": 1645713830, - "narHash": "sha256-LxGA2LX9CASodJnZYXGZfGPOeW38MW7z54gYQSDmhRE=", + "lastModified": 1661474119, + "narHash": "sha256-nw6H/dS4dHdrobnrfJVa8urWrMnbTWrA5bQJy9xbKXY=", "owner": "kosayoda", "repo": "nvim-lightbulb", - "rev": "29ca81408119ba809d1f922edc941868af97ee86", + "rev": "56b9ce31ec9d09d560fe8787c0920f76bc208297", "type": "github" }, "original": { @@ -529,11 +769,11 @@ "nvim-lspconfig": { "flake": false, "locked": { - "lastModified": 1669809489, - "narHash": "sha256-fMDR3sYmVu6cDSU8T75S/ppGYXo9+LPqseAd2n0HW6w=", + "lastModified": 1675639052, + "narHash": "sha256-B8IgpypxzCACZ5VcqM6KiWyClaN+KrmemtkwMznmj5Y=", "owner": "neovim", "repo": "nvim-lspconfig", - "rev": "d346335af862ede0cece75739d789cfdc46c4454", + "rev": "255e07ce2a05627d482d2de77308bba51b90470c", "type": "github" }, "original": { @@ -545,11 +785,11 @@ "nvim-neoclip": { "flake": false, "locked": { - "lastModified": 1651221055, - "narHash": "sha256-JO5tOk+Sv0YNjk1pHKfzXian7trFrEh/+iwH2ZxO0Ss=", + "lastModified": 1673910599, + "narHash": "sha256-Yi/6mODdS2Ote5/zumzcUzkhDbQ3m9jUvxT+jZ/+UqA=", "owner": "AckslD", "repo": "nvim-neoclip.lua", - "rev": "f3ff1645de5d2fd46ac8ffe86e440b7f3ae1fd11", + "rev": "5b9286a40ea2020352280caeb713515badb03d99", "type": "github" }, "original": { @@ -558,18 +798,50 @@ "type": "github" } }, - "nvim-tree-lua": { + "nvim-notify": { "flake": false, "locked": { - "lastModified": 1662860472, - "narHash": "sha256-3aB1xDU0cylHfZ5yzxMQKf07qrJ1pwHEl+QV42k0CpQ=", - "owner": "kyazdani42", - "repo": "nvim-tree.lua", - "rev": "fb8735e96cecf004fbefb086ce85371d003c5129", + "lastModified": 1674034105, + "narHash": "sha256-zPSlenKjuZ8Xygu/KuU9+bSf5uUjSDK9HOTWnpUk1jo=", + "owner": "rcarriga", + "repo": "nvim-notify", + "rev": "bdd647f61a05c9b8a57c83b78341a0690e9c29d7", "type": "github" }, "original": { - "owner": "kyazdani42", + "owner": "rcarriga", + "repo": "nvim-notify", + "type": "github" + } + }, + "nvim-session-manager": { + "flake": false, + "locked": { + "lastModified": 1675414961, + "narHash": "sha256-dHFhZtBvU6sc6XR49oL3TW0sUwAOwLf4S5q+m8u76c8=", + "owner": "Shatur", + "repo": "neovim-session-manager", + "rev": "e7a2cbf56b5fd3a223f2774b535499fc62eca6ef", + "type": "github" + }, + "original": { + "owner": "Shatur", + "repo": "neovim-session-manager", + "type": "github" + } + }, + "nvim-tree-lua": { + "flake": false, + "locked": { + "lastModified": 1675639400, + "narHash": "sha256-d9c4T++6LnaqUsJAMmJGSLQYz+frjl7QhBJONJOvb2E=", + "owner": "nvim-tree", + "repo": "nvim-tree.lua", + "rev": "02fdc262eba188198a7deb2117b3b996e6763d65", + "type": "github" + }, + "original": { + "owner": "nvim-tree", "repo": "nvim-tree.lua", "type": "github" } @@ -577,11 +849,11 @@ "nvim-treesitter-context": { "flake": false, "locked": { - "lastModified": 1650876005, - "narHash": "sha256-qsfPqC6wpvM/fvGBtfKY7CjdgjGa6JsyOrI7ZWC7jyM=", + "lastModified": 1652175020, + "narHash": "sha256-dYw/Y6+Eni7gTSjvCCl7E6ho8xSTxDYAwH3xGEhf54Q=", "owner": "lewis6991", "repo": "nvim-treesitter-context", - "rev": "28fd8fea0d056333dcd3cd5abcb1256e3e526417", + "rev": "c931a3136a696c1827eda78ac678aea542115bd0", "type": "github" }, "original": { @@ -593,11 +865,11 @@ "nvim-ts-autotag": { "flake": false, "locked": { - "lastModified": 1650591994, - "narHash": "sha256-YsqWrmsbp0NhCrnJQo8Df6yQr4f0shS6GdcEQaHdJDE=", + "lastModified": 1660219579, + "narHash": "sha256-ltGiYNXWpWSI5RrWTVR+k6SZjcZbsHtH5m9uHTMKnzM=", "owner": "windwp", "repo": "nvim-ts-autotag", - "rev": "044a05c4c51051326900a53ba98fddacd15fea22", + "rev": "fdefe46c6807441460f11f11a167a2baf8e4534b", "type": "github" }, "original": { @@ -609,11 +881,11 @@ "nvim-web-devicons": { "flake": false, "locked": { - "lastModified": 1651408174, - "narHash": "sha256-hYFDefTMcdtoQLhwUaamyGuid69kUo+95P1wjoS2dmo=", + "lastModified": 1675479859, + "narHash": "sha256-bbce2CpzCY8/Y6egWJWthZ9t1IkODCt+467S728vcKM=", "owner": "kyazdani42", "repo": "nvim-web-devicons", - "rev": "bdd43421437f2ef037e0dafeaaaa62b31d35ef2f", + "rev": "2b96193abe4372e18e4f4533895a42a466d53c17", "type": "github" }, "original": { @@ -622,14 +894,30 @@ "type": "github" } }, + "obsidian-nvim": { + "flake": false, + "locked": { + "lastModified": 1675366609, + "narHash": "sha256-QUAic7yakCXNhYqeaxD+86dIAQzW/pJYN7Y69uDB3xk=", + "owner": "epwalsh", + "repo": "obsidian.nvim", + "rev": "30f45ae3ef78b67d9eae16adfbaaf86089bd8855", + "type": "github" + }, + "original": { + "owner": "epwalsh", + "repo": "obsidian.nvim", + "type": "github" + } + }, "onedark": { "flake": false, "locked": { - "lastModified": 1666430920, - "narHash": "sha256-pacwQrYPRp2ZFe5ClVYQz2yFxiBmKZdqKQ/I2FdCRYM=", + "lastModified": 1674128456, + "narHash": "sha256-+0o32kO5lgvC2AIS7mPJ6eY/F7EWhdscZ/snkoy/TFc=", "owner": "navarasu", "repo": "onedark.nvim", - "rev": "7aeca4713a922139b5e14c037b5faf34dc41c8d2", + "rev": "f0a70e0993acbb348c32a52a88058cc60c160992", "type": "github" }, "original": { @@ -638,14 +926,30 @@ "type": "github" } }, + "orgmode-nvim": { + "flake": false, + "locked": { + "lastModified": 1675278893, + "narHash": "sha256-augdRQCNMJe7Z4D8zjOYP/WjgLn2GHMc1QjVmuI17gY=", + "owner": "nvim-orgmode", + "repo": "orgmode", + "rev": "7ddbdc0741fdc90f73faa17fb332bc8700acadbf", + "type": "github" + }, + "original": { + "owner": "nvim-orgmode", + "repo": "orgmode", + "type": "github" + } + }, "plenary-nvim": { "flake": false, "locked": { - "lastModified": 1650205145, - "narHash": "sha256-QKVFz95XaJrwkFaWqUHBirMFagellRn2YpNYnBeI/10=", + "lastModified": 1675102817, + "narHash": "sha256-XxyAeN+kt8Cvt8aklVXyjqS4QRaP/0RE6+tPdoGGxPc=", "owner": "nvim-lua", "repo": "plenary.nvim", - "rev": "9069d14a120cadb4f6825f76821533f2babcab92", + "rev": "9a0d3bf7b832818c042aaf30f692b081ddd58bd9", "type": "github" }, "original": { @@ -657,11 +961,11 @@ "registers": { "flake": false, "locked": { - "lastModified": 1650186703, - "narHash": "sha256-kqAcuO/tPO0GHBUwpwQYz7QJCyeTE93CbXnVFK7S8qU=", + "lastModified": 1671111037, + "narHash": "sha256-puQwsmi07lLgBDvo7lqHH+sr4ePzgrStD+4Zqya6VUg=", "owner": "tversteeg", "repo": "registers.nvim", - "rev": "dfcf0962ce88b52e00dd96dfaabc9997a18f4efe", + "rev": "667ae447d2c7efb64461a2c58f5311d1248cdb5f", "type": "github" }, "original": { @@ -692,26 +996,41 @@ }, "root": { "inputs": { + "alpha-nvim": "alpha-nvim", "bufdelete-nvim": "bufdelete-nvim", "catppuccin": "catppuccin", + "cellular-automaton": "cellular-automaton", + "cheatsheet-nvim": "cheatsheet-nvim", + "cinnamon-nvim": "cinnamon-nvim", "cmp-buffer": "cmp-buffer", "cmp-nvim-lsp": "cmp-nvim-lsp", "cmp-path": "cmp-path", "cmp-treesitter": "cmp-treesitter", "cmp-vsnip": "cmp-vsnip", + "codewindow-nvim": "codewindow-nvim", + "colorizer": "colorizer", + "copilot-lua": "copilot-lua", "crates-nvim": "crates-nvim", + "dashboard-nvim": "dashboard-nvim", + "discord-nvim": "discord-nvim", + "dressing-nvim": "dressing-nvim", "flake-utils": "flake-utils", + "gesture-nvim": "gesture-nvim", "gitsigns-nvim": "gitsigns-nvim", "glow-nvim": "glow-nvim", + "icon-picker-nvim": "icon-picker-nvim", "indent-blankline": "indent-blankline", "kommentary": "kommentary", "lsp-signature": "lsp-signature", "lspkind": "lspkind", "lspsaga": "lspsaga", "lualine": "lualine", + "minimap-vim": "minimap-vim", "nil": "nil", "nixpkgs": "nixpkgs", "nmd": "nmd", + "noice-nvim": "noice-nvim", + "nui-nvim": "nui-nvim", "null-ls": "null-ls", "nvim-autopairs": "nvim-autopairs", "nvim-bufferline-lua": "nvim-bufferline-lua", @@ -722,21 +1041,32 @@ "nvim-lightbulb": "nvim-lightbulb", "nvim-lspconfig": "nvim-lspconfig", "nvim-neoclip": "nvim-neoclip", + "nvim-notify": "nvim-notify", + "nvim-session-manager": "nvim-session-manager", "nvim-tree-lua": "nvim-tree-lua", "nvim-treesitter-context": "nvim-treesitter-context", "nvim-ts-autotag": "nvim-ts-autotag", "nvim-web-devicons": "nvim-web-devicons", + "obsidian-nvim": "obsidian-nvim", "onedark": "onedark", + "orgmode-nvim": "orgmode-nvim", "plenary-nvim": "plenary-nvim", "registers": "registers", "rnix-lsp": "rnix-lsp", "rust-tools": "rust-tools", + "scrollbar-nvim": "scrollbar-nvim", "sqls-nvim": "sqls-nvim", + "tabnine-nvim": "tabnine-nvim", + "tabular": "tabular", "telescope": "telescope", "tidalcycles": "tidalcycles", "todo-comments": "todo-comments", + "toggleterm-nvim": "toggleterm-nvim", "tokyonight": "tokyonight", "trouble": "trouble", + "venn-nvim": "venn-nvim", + "vim-markdown": "vim-markdown", + "vim-startify": "vim-startify", "vim-vsnip": "vim-vsnip", "which-key": "which-key" } @@ -753,11 +1083,11 @@ ] }, "locked": { - "lastModified": 1669170936, - "narHash": "sha256-TKPH4Pzkjw5gAPo9hejs3O4mWJW6V/RSiOj8UuSFRTs=", + "lastModified": 1675391458, + "narHash": "sha256-ukDKZw922BnK5ohL9LhwtaDAdCsJL7L6ScNEyF1lO9w=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "c90c223c4aef334356029b89c72bb65e26f7efe6", + "rev": "383a4acfd11d778d5c2efcf28376cbd845eeaedf", "type": "github" }, "original": { @@ -769,11 +1099,11 @@ "rust-tools": { "flake": false, "locked": { - "lastModified": 1673136837, - "narHash": "sha256-+/kK6MU2EiSBFbfqQJwLkJICXZpf8oiShbcvsls3V8A=", + "lastModified": 1675562213, + "narHash": "sha256-SIVfaBTGil3gYa3VK1l8EXQqLILO2WbHBkOp+zQBSmo=", "owner": "simrat39", "repo": "rust-tools.nvim", - "rev": "df584e84393ef255f5b8cbd709677d6a3a5bf42f", + "rev": "bd1aa99ffb911a1cf99b3fcf3b44c0391c57e3ef", "type": "github" }, "original": { @@ -782,14 +1112,30 @@ "type": "github" } }, + "scrollbar-nvim": { + "flake": false, + "locked": { + "lastModified": 1673562030, + "narHash": "sha256-OnVOmYhWMWH7a382DAIPEzJmz/J0BHniey7twyl500Q=", + "owner": "petertriho", + "repo": "nvim-scrollbar", + "rev": "6a2065fbcd032075a06d2ab54508b69842bc4496", + "type": "github" + }, + "original": { + "owner": "petertriho", + "repo": "nvim-scrollbar", + "type": "github" + } + }, "sqls-nvim": { "flake": false, "locked": { - "lastModified": 1651347942, - "narHash": "sha256-ewCkqU5Kj1MQAjRRzOWalLcv/uOLEbtK1jFrySvZ8Y8=", + "lastModified": 1657291129, + "narHash": "sha256-tatUEAI8EVXDYQPAAZ5+38YOPWb8Ei9VHCzHp+AyRjc=", "owner": "nanotee", "repo": "sqls.nvim", - "rev": "c52945aacf30247a3b82c586681c414dcd2359bd", + "rev": "a0048b7018c99b68456f91b4aa42ce288f0c0774", "type": "github" }, "original": { @@ -815,14 +1161,46 @@ "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": { + "lastModified": 1550598128, + "narHash": "sha256-irolBA/m3YIaezl+90h5G+xUOpad+3u44uJqDs4JCUs=", + "owner": "godlygeek", + "repo": "tabular", + "rev": "339091ac4dd1f17e225fe7d57b48aff55f99b23a", + "type": "github" + }, + "original": { + "owner": "godlygeek", + "repo": "tabular", + "type": "github" + } + }, "telescope": { "flake": false, "locked": { - "lastModified": 1651391210, - "narHash": "sha256-aEY/4ra7qyaXQg3H++b0JUbF7G2nI4m5Ow9daZO/duE=", + "lastModified": 1675149856, + "narHash": "sha256-L4Kw94CUy6N7zcyy9INuR/O0fxQ7sp0IvGd/u7fHxMA=", "owner": "nvim-telescope", "repo": "telescope.nvim", - "rev": "544c5ee40752ac5552595da86a62abaa39e2dfa9", + "rev": "203bf5609137600d73e8ed82703d6b0e320a5f36", "type": "github" }, "original": { @@ -859,11 +1237,11 @@ "vowel-src": "vowel-src" }, "locked": { - "lastModified": 1661670241, - "narHash": "sha256-+5C83z+Sd8ugvMshrXqpca4vv3tQ2D4tYEJ3QY6JVsg=", + "lastModified": 1664760044, + "narHash": "sha256-e5LGk/tDnphory1mYhADgPnVtShofY2w/3xY09jEE2A=", "owner": "mitchmindtree", "repo": "tidalcycles.nix", - "rev": "fefe3d586511e1cfaac79bb83ec0b278bb1b6bad", + "rev": "3f3a820cd43709077d15a24fa6062de7d623a6bf", "type": "github" }, "original": { @@ -875,11 +1253,11 @@ "todo-comments": { "flake": false, "locked": { - "lastModified": 1642601933, - "narHash": "sha256-8uj5TxO9XZlSCB4lVRbKRc1IlUEKcBf/4bDviwuxEgs=", + "lastModified": 1674503659, + "narHash": "sha256-2BV8ahB5iZmEh5N/JFqMdz4CqVXAIdmxE7rNC1+igsw=", "owner": "folke", "repo": "todo-comments.nvim", - "rev": "98b1ebf198836bdc226c0562b9f906584e6c400e", + "rev": "74c7d28cb50b0713c881ef69bcb6cdd77d8907d1", "type": "github" }, "original": { @@ -888,14 +1266,30 @@ "type": "github" } }, + "toggleterm-nvim": { + "flake": false, + "locked": { + "lastModified": 1675358836, + "narHash": "sha256-9O7p/7tRStg51OFhMc88M5ewYquiYC9x9CV4s5veVP8=", + "owner": "akinsho", + "repo": "toggleterm.nvim", + "rev": "19aad0f41f47affbba1274f05e3c067e6d718e1e", + "type": "github" + }, + "original": { + "owner": "akinsho", + "repo": "toggleterm.nvim", + "type": "github" + } + }, "tokyonight": { "flake": false, "locked": { - "lastModified": 1666558747, - "narHash": "sha256-hZufHQkI2M0I4mEqV9qs6PkL74aqScKJ3RA5QOulX+0=", + "lastModified": 1674503926, + "narHash": "sha256-sXILXqJYZW0KywQhtBqGr76VsHV+sBnBM+RCqXCjZ2A=", "owner": "folke", "repo": "tokyonight.nvim", - "rev": "16a294bea92dc8f16ad205c71ce61bf05e79deb3", + "rev": "affb21a81e6d7de073378eb86d02864c594104d9", "type": "github" }, "original": { @@ -907,11 +1301,11 @@ "trouble": { "flake": false, "locked": { - "lastModified": 1647585739, - "narHash": "sha256-oUf8YbJ9HmSLN8o2c7CXzCYPu7PwKzvVKNiM9HtHQbQ=", + "lastModified": 1674503479, + "narHash": "sha256-EdwQABmk7F7GJIB5lLcZtl1drMc0ASCXMbXoT/ywsK0=", "owner": "folke", "repo": "trouble.nvim", - "rev": "691d490cc4eadc430d226fa7d77aaa84e2e0a125", + "rev": "490f7fe6d227f4f7a64f00be8c7dcd7a508ed271", "type": "github" }, "original": { @@ -950,6 +1344,54 @@ "type": "github" } }, + "venn-nvim": { + "flake": false, + "locked": { + "lastModified": 1669127905, + "narHash": "sha256-Ks5qUaI0MrhVC2AhVsReVwC/2WArXqIQ36CcCSCyzAk=", + "owner": "jbyuki", + "repo": "venn.nvim", + "rev": "c114563960b8fb1197695d42798d1f3e7190b798", + "type": "github" + }, + "original": { + "owner": "jbyuki", + "repo": "venn.nvim", + "type": "github" + } + }, + "vim-markdown": { + "flake": false, + "locked": { + "lastModified": 1669286150, + "narHash": "sha256-5q/s/ypZku4Iviq+eGip6hSWs0Ei3FrnX3IL3WV/FHw=", + "owner": "preservim", + "repo": "vim-markdown", + "rev": "df4be8626e2c5b2a42eb60e1f100fce469b81f7d", + "type": "github" + }, + "original": { + "owner": "preservim", + "repo": "vim-markdown", + "type": "github" + } + }, + "vim-startify": { + "flake": false, + "locked": { + "lastModified": 1620487920, + "narHash": "sha256-//3bzFTe1WKqvQ3uYrDbk5Zu5BKq2hXQGeBhmhKIHvk=", + "owner": "mhinz", + "repo": "vim-startify", + "rev": "81e36c352a8deea54df5ec1e2f4348685569bed2", + "type": "github" + }, + "original": { + "owner": "mhinz", + "repo": "vim-startify", + "type": "github" + } + }, "vim-tidal-src": { "flake": false, "locked": { @@ -961,8 +1403,8 @@ "type": "github" }, "original": { - "owner": "mitchmindtree", - "ref": "mitchmindtree", + "owner": "tidalcycles", + "ref": "master", "repo": "vim-tidal", "type": "github" } @@ -970,11 +1412,11 @@ "vim-vsnip": { "flake": false, "locked": { - "lastModified": 1650631622, - "narHash": "sha256-USltEc6QGHwMqx7E9wo9qZmq+pm9FLj0CUcKoE7KPLU=", + "lastModified": 1671546474, + "narHash": "sha256-vFYn5fAM7AAuvTI5behiYM08sV2qQyV7zZ++jgpZfSc=", "owner": "hrsh7th", "repo": "vim-vsnip", - "rev": "8f199ef690ed26dcbb8973d9a6760d1332449ac9", + "rev": "8dde8c0ef10bb1afdbb301e2bd7eb1c153dd558e", "type": "github" }, "original": { @@ -1003,11 +1445,11 @@ "which-key": { "flake": false, "locked": { - "lastModified": 1666956294, - "narHash": "sha256-IbJP6j+M+POPhX4YbewTJiSoELvDo6y+vF0RREqqm4c=", + "lastModified": 1674503611, + "narHash": "sha256-A8fuY7HsfUOi9QNzWzCvaXQ2TvCNVcN2hpm5OWXYtU0=", "owner": "folke", "repo": "which-key.nvim", - "rev": "61553aeb3d5ca8c11eea8be6eadf478062982ac9", + "rev": "684e96c5e8477f1ee9b3f2e9a12d802fd12c5531", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 1ed33b55..49fc1ecd 100644 --- a/flake.nix +++ b/flake.nix @@ -1,232 +1,5 @@ { - description = "Jordan's Neovim Configuration"; - inputs = { - nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; - flake-utils.url = "github:numtide/flake-utils"; - # For generating documentation website - nmd = { - url = "gitlab:rycee/nmd"; - flake = false; - }; - - # LSP plugins - nvim-lspconfig = { - # url = "github:neovim/nvim-lspconfig?ref=v0.1.3"; - # Use master for nil_ls - url = "github:neovim/nvim-lspconfig"; - flake = false; - }; - lspsaga = { - url = "github:tami5/lspsaga.nvim"; - flake = false; - }; - lspkind = { - url = "github:onsails/lspkind-nvim"; - flake = false; - }; - trouble = { - url = "github:folke/trouble.nvim"; - flake = false; - }; - nvim-treesitter-context = { - url = "github:lewis6991/nvim-treesitter-context"; - flake = false; - }; - nvim-lightbulb = { - url = "github:kosayoda/nvim-lightbulb"; - flake = false; - }; - - nvim-code-action-menu = { - url = "github:weilbith/nvim-code-action-menu"; - flake = false; - }; - lsp-signature = { - url = "github:ray-x/lsp_signature.nvim"; - flake = false; - }; - null-ls = { - url = "github:jose-elias-alvarez/null-ls.nvim"; - flake = false; - }; - sqls-nvim = { - url = "github:nanotee/sqls.nvim"; - flake = false; - }; - rust-tools = { - url = "github:simrat39/rust-tools.nvim"; - flake = false; - }; - - # Copying/Registers - registers = { - url = "github:tversteeg/registers.nvim"; - flake = false; - }; - nvim-neoclip = { - url = "github:AckslD/nvim-neoclip.lua"; - flake = false; - }; - - # Telescope - telescope = { - url = "github:nvim-telescope/telescope.nvim"; - flake = false; - }; - - # Langauge server (use master instead of nixpkgs) - rnix-lsp.url = "github:nix-community/rnix-lsp"; - nil = { - url = "github:oxalica/nil"; - inputs.nixpkgs.follows = "nixpkgs"; - inputs.flake-utils.follows = "flake-utils"; - }; - - # Filetrees - nvim-tree-lua = { - url = "github:kyazdani42/nvim-tree.lua"; - flake = false; - }; - - # Tablines - nvim-bufferline-lua = { - url = "github:akinsho/nvim-bufferline.lua?ref=v3.0.1"; - flake = false; - }; - - # Statuslines - lualine = { - url = "github:hoob3rt/lualine.nvim"; - flake = false; - }; - - # Autocompletes - nvim-compe = { - url = "github:hrsh7th/nvim-compe"; - flake = false; - }; - nvim-cmp = { - url = "github:hrsh7th/nvim-cmp"; - flake = false; - }; - cmp-buffer = { - url = "github:hrsh7th/cmp-buffer"; - flake = false; - }; - cmp-nvim-lsp = { - url = "github:hrsh7th/cmp-nvim-lsp"; - flake = false; - }; - cmp-vsnip = { - url = "github:hrsh7th/cmp-vsnip"; - flake = false; - }; - cmp-path = { - url = "github:hrsh7th/cmp-path"; - flake = false; - }; - cmp-treesitter = { - url = "github:ray-x/cmp-treesitter"; - flake = false; - }; - - # snippets - vim-vsnip = { - url = "github:hrsh7th/vim-vsnip"; - flake = false; - }; - - # Autopairs - nvim-autopairs = { - url = "github:windwp/nvim-autopairs"; - flake = false; - }; - nvim-ts-autotag = { - url = "github:windwp/nvim-ts-autotag"; - flake = false; - }; - - # Commenting - kommentary = { - url = "github:b3nj5m1n/kommentary"; - flake = false; - }; - todo-comments = { - url = "github:folke/todo-comments.nvim"; - flake = false; - }; - - # Buffer tools - bufdelete-nvim = { - url = "github:famiu/bufdelete.nvim"; - flake = false; - }; - - # Themes - tokyonight = { - url = "github:folke/tokyonight.nvim"; - flake = false; - }; - - onedark = { - url = "github:navarasu/onedark.nvim"; - flake = false; - }; - - catppuccin = { - url = "github:catppuccin/nvim"; - flake = false; - }; - - # Rust crates - crates-nvim = { - url = "github:Saecki/crates.nvim"; - flake = false; - }; - - # Visuals - nvim-cursorline = { - url = "github:yamatsum/nvim-cursorline"; - flake = false; - }; - indent-blankline = { - url = "github:lukas-reineke/indent-blankline.nvim"; - flake = false; - }; - nvim-web-devicons = { - url = "github:kyazdani42/nvim-web-devicons"; - flake = false; - }; - gitsigns-nvim = { - url = "github:lewis6991/gitsigns.nvim"; - flake = false; - }; - - # Key binding help - which-key = { - url = "github:folke/which-key.nvim"; - flake = false; - }; - - # Markdown - glow-nvim = { - url = "github:ellisonleao/glow.nvim"; - flake = false; - }; - - # Tidal cycles - tidalcycles = { - url = "github:mitchmindtree/tidalcycles.nix"; - inputs.vim-tidal-src.url = "github:tidalcycles/vim-tidal"; - }; - - # Plenary (required by crates-nvim) - plenary-nvim = { - url = "github:nvim-lua/plenary.nvim"; - flake = false; - }; - }; - + description = "A neovim flake with a modular configuration"; outputs = { nixpkgs, flake-utils, @@ -264,8 +37,11 @@ mainConfig = isMaximal: { config = { - vim.viAlias = false; - vim.vimAlias = true; + vim = { + viAlias = true; + vimAlias = true; + }; + vim.lsp = { enable = true; formatOnSave = true; @@ -274,10 +50,6 @@ nvimCodeActionMenu.enable = true; trouble.enable = true; lspSignature.enable = true; - nix = { - enable = true; - formatter = "alejandra"; - }; rust.enable = isMaximal; python = isMaximal; clang.enable = isMaximal; @@ -285,10 +57,18 @@ 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; @@ -301,41 +81,106 @@ 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; - vim.tabline.nvimBufferline.enable = true; + + vim.filetree = { + nvimTreeLua = { + enable = true; + view = { + width = 25; + }; + }; + }; + + vim.tabline = { + nvimBufferline.enable = true; + }; + vim.treesitter = { enable = true; context.enable = true; }; - vim.keys = { - 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; + }; }; }; @@ -418,4 +263,377 @@ else {} ); })); + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; + flake-utils.url = "github:numtide/flake-utils"; + + # For generating documentation website + nmd = { + url = "gitlab:rycee/nmd"; + flake = false; + }; + + # LSP plugins + nvim-lspconfig = { + # url = "github:neovim/nvim-lspconfig?ref=v0.1.3"; + # Use master for nil_ls + url = "github:neovim/nvim-lspconfig"; + flake = false; + }; + lspsaga = { + url = "github:tami5/lspsaga.nvim"; + flake = false; + }; + lspkind = { + url = "github:onsails/lspkind-nvim"; + flake = false; + }; + trouble = { + url = "github:folke/trouble.nvim"; + flake = false; + }; + nvim-treesitter-context = { + url = "github:lewis6991/nvim-treesitter-context"; + flake = false; + }; + nvim-lightbulb = { + url = "github:kosayoda/nvim-lightbulb"; + flake = false; + }; + + nvim-code-action-menu = { + url = "github:weilbith/nvim-code-action-menu"; + flake = false; + }; + lsp-signature = { + url = "github:ray-x/lsp_signature.nvim"; + flake = false; + }; + null-ls = { + url = "github:jose-elias-alvarez/null-ls.nvim"; + flake = false; + }; + sqls-nvim = { + url = "github:nanotee/sqls.nvim"; + flake = false; + }; + rust-tools = { + url = "github:simrat39/rust-tools.nvim"; + flake = false; + }; + + # Copying/Registers + registers = { + url = "github:tversteeg/registers.nvim"; + flake = false; + }; + nvim-neoclip = { + url = "github:AckslD/nvim-neoclip.lua"; + flake = false; + }; + + # Telescope + telescope = { + url = "github:nvim-telescope/telescope.nvim"; + flake = false; + }; + + # Langauge server (use master instead of nixpkgs) + rnix-lsp.url = "github:nix-community/rnix-lsp"; + nil = { + url = "github:oxalica/nil"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.flake-utils.follows = "flake-utils"; + }; + + # Filetrees + nvim-tree-lua = { + url = "github:nvim-tree/nvim-tree.lua"; + flake = false; + }; + + # Tablines + nvim-bufferline-lua = { + url = "github:akinsho/nvim-bufferline.lua?ref=v3.0.1"; + flake = false; + }; + + # Statuslines + lualine = { + url = "github:hoob3rt/lualine.nvim"; + flake = false; + }; + + # Autocompletes + nvim-compe = { + url = "github:hrsh7th/nvim-compe"; + flake = false; + }; + nvim-cmp = { + url = "github:hrsh7th/nvim-cmp"; + flake = false; + }; + cmp-buffer = { + url = "github:hrsh7th/cmp-buffer"; + flake = false; + }; + cmp-nvim-lsp = { + url = "github:hrsh7th/cmp-nvim-lsp"; + flake = false; + }; + cmp-vsnip = { + url = "github:hrsh7th/cmp-vsnip"; + flake = false; + }; + cmp-path = { + url = "github:hrsh7th/cmp-path"; + flake = false; + }; + cmp-treesitter = { + url = "github:ray-x/cmp-treesitter"; + flake = false; + }; + + # snippets + vim-vsnip = { + url = "github:hrsh7th/vim-vsnip"; + flake = false; + }; + + # Presence + discord-nvim = { + url = "github:andweeb/presence.nvim"; + flake = false; + }; + + # Autopairs + nvim-autopairs = { + url = "github:windwp/nvim-autopairs"; + flake = false; + }; + nvim-ts-autotag = { + url = "github:windwp/nvim-ts-autotag"; + flake = false; + }; + + # Commenting + kommentary = { + url = "github:b3nj5m1n/kommentary"; + flake = false; + }; + todo-comments = { + url = "github:folke/todo-comments.nvim"; + flake = false; + }; + + # Buffer tools + bufdelete-nvim = { + url = "github:famiu/bufdelete.nvim"; + flake = false; + }; + + # Dashboard Utilities + dashboard-nvim = { + url = "github:glepnir/dashboard-nvim"; + flake = false; + }; + + alpha-nvim = { + url = "github:goolord/alpha-nvim"; + flake = false; + }; + + vim-startify = { + url = "github:mhinz/vim-startify"; + flake = false; + }; + + # Themes + tokyonight = { + url = "github:folke/tokyonight.nvim"; + flake = false; + }; + + onedark = { + url = "github:navarasu/onedark.nvim"; + flake = false; + }; + + catppuccin = { + url = "github:catppuccin/nvim"; + flake = false; + }; + + # Rust crates + crates-nvim = { + url = "github:Saecki/crates.nvim"; + flake = false; + }; + + # Visuals + nvim-cursorline = { + url = "github:yamatsum/nvim-cursorline"; + flake = false; + }; + + scrollbar-nvim = { + url = "github:petertriho/nvim-scrollbar"; + flake = false; + }; + + cinnamon-nvim = { + url = "github:declancm/cinnamon.nvim"; + flake = false; + }; + + cellular-automaton = { + url = "github:Eandrju/cellular-automaton.nvim"; + flake = false; + }; + + indent-blankline = { + url = "github:lukas-reineke/indent-blankline.nvim"; + flake = false; + }; + nvim-web-devicons = { + url = "github:kyazdani42/nvim-web-devicons"; + flake = false; + }; + gitsigns-nvim = { + url = "github:lewis6991/gitsigns.nvim"; + flake = false; + }; + + # Markdown + glow-nvim = { + url = "github:ellisonleao/glow.nvim"; + flake = false; + }; + + # Tidal cycles + tidalcycles = { + url = "github:mitchmindtree/tidalcycles.nix"; + inputs.vim-tidal-src.url = "github:tidalcycles/vim-tidal"; + }; + + # Minimap + minimap-vim = { + url = "github:wfxr/minimap.vim"; + flake = false; + }; + + codewindow-nvim = { + url = "github:gorbit99/codewindow.nvim"; + flake = false; + }; + + # Notifications + nvim-notify = { + url = "github:rcarriga/nvim-notify"; + flake = false; + }; + + # Utilities + colorizer = { + url = "github:uga-rosa/ccc.nvim"; + flake = false; + }; + + venn-nvim = { + url = "github:jbyuki/venn.nvim"; + flake = false; + }; + + icon-picker-nvim = { + url = "github:ziontee113/icon-picker.nvim"; + flake = false; + }; + + which-key = { + url = "github:folke/which-key.nvim"; + flake = false; + }; + + cheatsheet-nvim = { + url = "github:sudormrfbin/cheatsheet.nvim"; + flake = false; + }; + + gesture-nvim = { + url = "github:notomo/gesture.nvim"; + flake = false; + }; + + # Note-taking + + obsidian-nvim = { + url = "github:epwalsh/obsidian.nvim"; + flake = false; + }; + + orgmode-nvim = { + url = "github:nvim-orgmode/orgmode"; + flake = false; + }; + + # Terminal + toggleterm-nvim = { + url = "github:akinsho/toggleterm.nvim"; + flake = false; + }; + + # UI + noice-nvim = { + url = "github:folke/noice.nvim"; + flake = false; + }; + + # Assistant + copilot-lua = { + url = "github:zbirenbaum/copilot.lua"; + flake = false; + }; + + tabnine-nvim = { + url = "github:codota/tabnine-nvim"; + flake = false; + }; + + # Session management + nvim-session-manager = { + url = "github:Shatur/neovim-session-manager"; + flake = false; + }; + + # Dependencies + plenary-nvim = { + # (required by crates-nvim) + url = "github:nvim-lua/plenary.nvim"; + flake = false; + }; + + dressing-nvim = { + # (required by icon-picker-nvim) + url = "github:stevearc/dressing.nvim"; + flake = false; + }; + + vim-markdown = { + # (required by obsidian-nvim) + url = "github:preservim/vim-markdown"; + flake = false; + }; + + tabular = { + # (required by vim-markdown) + url = "github:godlygeek/tabular"; + flake = false; + }; + + nui-nvim = { + # (required by noice.nvim) + url = "github:MunifTanjim/nui.nvim"; + flake = false; + }; + }; } diff --git a/modules/assistant/copilot.nix b/modules/assistant/copilot.nix new file mode 100644 index 00000000..c6bb1ec1 --- /dev/null +++ b/modules/assistant/copilot.nix @@ -0,0 +1,24 @@ +{ + pkgs, + config, + lib, + ... +}: +with lib; +with builtins; let + cfg = config.vim.assistant.copilot; +in { + options.vim.assistant.copilot = { + enable = mkEnableOption "Enable GitHub Copilot"; + }; + + config = mkIf cfg.enable { + vim.startPlugins = ["copilot-lua"]; + + vim.luaConfigRC.copilot = nvim.dag.entryAnywhere '' + require("copilot").setup({ + -- available options: https://github.com/zbirenbaum/copilot.lua + }) + ''; + }; +} diff --git a/modules/assistant/default.nix b/modules/assistant/default.nix new file mode 100644 index 00000000..3ae3509f --- /dev/null +++ b/modules/assistant/default.nix @@ -0,0 +1,6 @@ +_: { + imports = [ + ./copilot.nix + ./tabnine.nix + ]; +} diff --git a/modules/assistant/tabnine.nix b/modules/assistant/tabnine.nix new file mode 100644 index 00000000..bb8ceccb --- /dev/null +++ b/modules/assistant/tabnine.nix @@ -0,0 +1,28 @@ +{ + pkgs, + config, + lib, + ... +}: +with lib; +with builtins; let + cfg = config.vim.assistant.tabnine; +in { + options.vim.assistant.tabnine = { + enable = mkEnableOption "Enable TabNine assistant"; + }; + + config = mkIf cfg.enable { + vim.startPlugins = ["tabnine-nvim"]; + + vim.luaConfigRC.tabnine-nvim = nvim.dag.entryAnywhere '' + require('tabnine').setup({ + disable_auto_comment=true, + accept_keymap="", + dismiss_keymap = "", + debounce_ms = 800, + execlude_filetypes = {"TelescopePrompt", "NvimTree", "alpha"} + }) + ''; + }; +} diff --git a/modules/dashboard/alpha.nix b/modules/dashboard/alpha.nix new file mode 100644 index 00000000..833ccdf6 --- /dev/null +++ b/modules/dashboard/alpha.nix @@ -0,0 +1,222 @@ +{ + pkgs, + config, + lib, + ... +}: +with lib; +with builtins; let + cfg = config.vim.dashboard.alpha; +in { + options.vim.dashboard.alpha = { + enable = mkEnableOption "alpha"; + }; + + config = mkIf cfg.enable { + vim.startPlugins = [ + "alpha-nvim" + ]; + + # the credit for this configuration goes to https://github.com/Rishabh672003 + # good work, honestly + vim.luaConfigRC.alpha = nvim.dag.entryAnywhere '' + local alpha = require("alpha") + local plenary_path = require("plenary.path") + local dashboard = require("alpha.themes.dashboard") + local cdir = vim.fn.getcwd() + local if_nil = vim.F.if_nil + + local nvim_web_devicons = { + enabled = true, + highlight = true, + } + + local function get_extension(fn) + local match = fn:match("^.+(%..+)$") + local ext = "" + if match ~= nil then + ext = match:sub(2) + end + return ext + end + + local function icon(fn) + local nwd = require("nvim-web-devicons") + local ext = get_extension(fn) + return nwd.get_icon(fn, ext, { default = true }) + end + + local function file_button(fn, sc, short_fn) + short_fn = short_fn or fn + local ico_txt + local fb_hl = {} + + if nvim_web_devicons.enabled then + local ico, hl = icon(fn) + local hl_option_type = type(nvim_web_devicons.highlight) + if hl_option_type == "boolean" then + if hl and nvim_web_devicons.highlight then + table.insert(fb_hl, { hl, 0, 3 }) + end + end + if hl_option_type == "string" then + table.insert(fb_hl, { nvim_web_devicons.highlight, 0, 3 }) + end + ico_txt = ico .. " " + else + ico_txt = "" + end + local file_button_el = dashboard.button(sc, ico_txt .. short_fn, "e " .. fn .. " ") + local fn_start = short_fn:match(".*[/\\]") + if fn_start ~= nil then + table.insert(fb_hl, { "Comment", #ico_txt - 2, #fn_start + #ico_txt }) + end + file_button_el.opts.hl = fb_hl + return file_button_el + end + + local default_mru_ignore = { "gitcommit" } + + local mru_opts = { + ignore = function(path, ext) + return (string.find(path, "COMMIT_EDITMSG")) or (vim.tbl_contains(default_mru_ignore, ext)) + end, + } + + --- @param start number + --- @param cwd string optional + --- @param items_number number optional number of items to generate, default = 10 + local function mru(start, cwd, items_number, opts) + opts = opts or mru_opts + items_number = if_nil(items_number, 15) + + local oldfiles = {} + for _, v in pairs(vim.v.oldfiles) do + if #oldfiles == items_number then + break + end + local cwd_cond + if not cwd then + cwd_cond = true + else + cwd_cond = vim.startswith(v, cwd) + end + local ignore = (opts.ignore and opts.ignore(v, get_extension(v))) or false + if (vim.fn.filereadable(v) == 1) and cwd_cond and not ignore then + oldfiles[#oldfiles + 1] = v + end + end + local target_width = 35 + + local tbl = {} + for i, fn in ipairs(oldfiles) do + local short_fn + if cwd then + short_fn = vim.fn.fnamemodify(fn, ":.") + else + short_fn = vim.fn.fnamemodify(fn, ":~") + end + + if #short_fn > target_width then + short_fn = plenary_path.new(short_fn):shorten(1, { -2, -1 }) + if #short_fn > target_width then + short_fn = plenary_path.new(short_fn):shorten(1, { -1 }) + end + end + + local shortcut = tostring(i + start - 1) + + local file_button_el = file_button(fn, shortcut, short_fn) + tbl[i] = file_button_el + end + return { + type = "group", + val = tbl, + opts = {}, + } + end + + local default_header = { + type = "text", + val = { + + [[███ ██ ███████ ██████ ██ ██ ██ ███ ███]], + [[████ ██ ██ ██ ██ ██ ██ ██ ████ ████]], + [[██ ██ ██ █████ ██ ██ ██ ██ ██ ██ ████ ██]], + [[██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██]], + [[██ ████ ███████ ██████ ████ ██ ██ ██]], + + -- [[ __ ]], + -- [[ ___ ___ ___ __ __ /\_\ ___ ___ ]], + -- [[ / _ `\ / __`\ / __`\/\ \/\ \\/\ \ / __` __`\ ]], + -- [[/\ \/\ \/\ __//\ \_\ \ \ \_/ |\ \ \/\ \/\ \/\ \ ]], + -- [[\ \_\ \_\ \____\ \____/\ \___/ \ \_\ \_\ \_\ \_\]], + -- [[ \/_/\/_/\/____/\/___/ \/__/ \/_/\/_/\/_/\/_/]], + }, + opts = { + position = "center", + hl = "Type", + -- wrap = "overflow"; + }, + } + + local section_mru = { + type = "group", + val = { + { + type = "text", + val = "Recent files", + opts = { + hl = "SpecialComment", + shrink_margin = false, + position = "center", + }, + }, + { type = "padding", val = 1 }, + { + type = "group", + val = function() + return { mru(0, cdir) } + end, + opts = { shrink_margin = false }, + }, + }, + } + + local buttons = { + type = "group", + val = { + { type = "text", val = "Quick links", opts = { hl = "SpecialComment", position = "center" } }, + { type = "padding", val = 1 }, + dashboard.button("e", " New file", "ene"), + dashboard.button("SPC F", " Find file"), + dashboard.button("SPC ff", " Live grep"), + dashboard.button("SPC p", " Projects"), + dashboard.button("q", " Quit", "qa"), + }, + position = "center", + } + + local config = { + layout = { + { type = "padding", val = 2 }, + default_header, + { type = "padding", val = 2 }, + section_mru, + { type = "padding", val = 2 }, + buttons, + }, + opts = { + margin = 5, + setup = function() + vim.cmd([[ + autocmd alpha_temp DirChanged * lua require('alpha').redraw() + ]]) + end, + }, + } + + alpha.setup(config) + ''; + }; +} diff --git a/modules/dashboard/dashboard-nvim.nix b/modules/dashboard/dashboard-nvim.nix new file mode 100644 index 00000000..de7d2d61 --- /dev/null +++ b/modules/dashboard/dashboard-nvim.nix @@ -0,0 +1,25 @@ +{ + pkgs, + config, + lib, + ... +}: +with lib; +with builtins; let + cfg = config.vim.dashboard.dashboard-nvim; +in { + options.vim.dashboard.dashboard-nvim = { + enable = mkEnableOption "dashboard-nvim"; + }; + + config = mkIf cfg.enable { + vim.startPlugins = [ + "dashboard-nvim" + ]; + + vim.luaConfigRC.dashboard-nvim = nvim.dag.entryAnywhere '' + require("dashboard").setup{ + } + ''; + }; +} diff --git a/modules/dashboard/default.nix b/modules/dashboard/default.nix new file mode 100644 index 00000000..bdee0dbc --- /dev/null +++ b/modules/dashboard/default.nix @@ -0,0 +1,12 @@ +{ + pkgs, + config, + lib, + ... +}: { + imports = [ + ./alpha.nix + ./dashboard-nvim.nix + ./startify.nix + ]; +} diff --git a/modules/dashboard/startify.nix b/modules/dashboard/startify.nix new file mode 100644 index 00000000..a5fb405b --- /dev/null +++ b/modules/dashboard/startify.nix @@ -0,0 +1,236 @@ +{ + pkgs, + config, + lib, + ... +}: +with builtins; +with lib; let + cfg = config.vim.dashboard.startify; + + mkVimBool = val: + if val + then "1" + else "0"; +in { + options.vim.dashboard.startify = { + enable = mkEnableOption "Enable startify"; + + bookmarks = mkOption { + default = []; + description = ''List of book marks to disaply on start page''; + type = with types; listOf attrs; + example = {"c" = "~/.vimrc";}; + }; + + changeToDir = mkOption { + default = true; + description = "Should vim change to the directory of the file you open"; + type = types.bool; + }; + + changeToVCRoot = mkOption { + default = false; + description = "Should vim change to the version control root when opening a file"; + type = types.bool; + }; + + changeDirCmd = mkOption { + default = "lcd"; + description = "Command to change the current window with. Can be cd, lcd or tcd"; + type = types.enum ["cd" "lcd" "tcd"]; + }; + + customHeader = mkOption { + default = []; + description = "Text to place in the header"; + type = with types; listOf str; + }; + + customFooter = mkOption { + default = []; + description = "Text to place in the footer"; + type = with types; listOf str; + }; + + lists = mkOption { + default = [ + { + type = "files"; + header = ["MRU"]; + } + { + type = "dir"; + header = ["MRU Current Directory"]; + } + { + type = "sessions"; + header = ["Sessions"]; + } + { + type = "bookmarks"; + header = ["Bookmarks"]; + } + { + type = "commands"; + header = ["Commands"]; + } + ]; + description = "Specify the lists and in what order they are displayed on startify."; + type = with types; listOf attrs; + }; + + skipList = mkOption { + default = []; + description = "List of regex patterns to exclude from MRU lists"; + type = with types; listOf str; + }; + + updateOldFiles = mkOption { + default = false; + description = "Set if you want startify to always update and not just when neovim closes"; + type = types.bool; + }; + + sessionAutoload = mkOption { + default = false; + description = "Make startify auto load Session.vim files from the current directory"; + type = types.bool; + }; + + commands = mkOption { + default = []; + description = "Commands that are presented to the user on startify page"; + type = with types; listOf (oneOf [str attrs (listOf str)]); + }; + + filesNumber = mkOption { + default = 10; + description = "How many files to list"; + type = types.int; + }; + + customIndices = mkOption { + default = []; + description = "Specify a list of default charecters to use instead of numbers"; + type = with types; listOf str; + }; + + disableOnStartup = mkOption { + default = false; + description = "Prevent startify from opening on startup but can be called with :Startify"; + type = types.bool; + }; + + unsafe = mkOption { + default = false; + description = "Turns on unsafe mode for Startify. Stops resolving links, checking files are readable and filtering bookmark list"; + type = types.bool; + }; + + paddingLeft = mkOption { + default = 3; + description = "Number of spaces used for left padding."; + type = types.int; + }; + + useEnv = mkOption { + default = false; + description = "Show environment variables in path if name is shorter than value"; + type = types.bool; + }; + + sessionBeforeSave = mkOption { + default = []; + description = "Commands to run before saving a session"; + type = with types; listOf str; + }; + + sessionPersistence = mkOption { + default = false; + description = "Persist session before leaving vim or switching session"; + type = types.bool; + }; + + sessionDeleteBuffers = mkOption { + default = true; + description = "Delete all buffers when loading or closing a session"; + type = types.bool; + }; + + sessionDir = mkOption { + default = "~/.vim/session"; + description = "Directory to save and load sessions from"; + type = types.str; + }; + + skipListServer = mkOption { + default = []; + description = "List of vim servers to not load startify for"; + type = with types; listOf str; + }; + + sessionRemoveLines = mkOption { + default = []; + description = "Patterns to remove from session files"; + type = with types; listOf str; + }; + + sessionSavevars = mkOption { + default = []; + description = "List of variables to save into a session file."; + type = with types; listOf str; + }; + + sessionSavecmds = mkOption { + default = []; + description = "List of commands to run when loading a session."; + type = with types; listOf str; + }; + + sessionSort = mkOption { + default = false; + description = "Set if you want items sorted by date rather than alphabetically"; + type = types.bool; + }; + }; + + config = mkIf (cfg.enable) { + vim.startPlugins = with pkgs.neovimPlugins; [vim-startify]; + + vim.globals = { + "startify_custom_header" = + if cfg.customHeader == [] + then null + else cfg.customHeader; + "startify_custom_footer" = + if cfg.customFooter == [] + then null + else cfg.customFooter; + "startify_bookmarks" = cfg.bookmarks; + "startify_lists" = cfg.lists; + "startify_change_to_dir" = mkVimBool cfg.changeToDir; + "startify_change_to_vcs_root" = mkVimBool cfg.changeToVCRoot; + "startify_change_cmd" = cfg.changeDirCmd; + "startify_skiplist" = cfg.skipList; + "startify_update_oldfiles" = mkVimBool cfg.updateOldFiles; + "startify_session_autoload" = mkVimBool cfg.sessionAutoload; + "startify_commands" = cfg.commands; + "startify_files_number" = cfg.filesNumber; + "startify_custom_indices" = cfg.customIndices; + "startify_disable_at_vimenter" = mkVimBool cfg.disableOnStartup; + "startify_enable_unsafe" = mkVimBool cfg.unsafe; + "startify_padding_left" = cfg.paddingLeft; + "startify_use_env" = mkVimBool cfg.useEnv; + "startify_session_before_save" = cfg.sessionBeforeSave; + "startify_session_persistence" = mkVimBool cfg.sessionPersistence; + "startify_session_delete_buffers" = mkVimBool cfg.sessionDeleteBuffers; + "startify_session_dir" = cfg.sessionDir; + "startify_skiplist_server" = cfg.skipListServer; + "startify_session_remove_lines" = cfg.sessionRemoveLines; + "startify_session_savevars" = cfg.sessionSavevars; + "startify_session_savecmds" = cfg.sessionSavecmds; + "startify_session_sort" = mkVimBool cfg.sessionSort; + }; + }; +} diff --git a/modules/filetree/nvimtreelua.nix b/modules/filetree/nvimtreelua.nix index cb6f9bff..2aa0792d 100644 --- a/modules/filetree/nvimtreelua.nix +++ b/modules/filetree/nvimtreelua.nix @@ -57,18 +57,6 @@ in { type = with types; listOf str; }; - closeOnFileOpen = mkOption { - default = false; - description = "Closes the tree when a file is opened."; - type = types.bool; - }; - - resizeOnFileOpen = mkOption { - default = false; - description = "Resizes the tree when opening a file."; - type = types.bool; - }; - followBufferFile = mkOption { default = true; description = "Follow file that is in current buffer on tree"; @@ -128,6 +116,266 @@ in { description = "The command used to open a file with the associated default program"; type = types.str; }; + + updateCwd = mkOption { + # updateCwd has been deprecated in favor of syncRootWithCwd + # this option is kept for backwards compatibility + default = true; + description = "Updates the tree when changing nvim's directory (DirChanged event)."; + type = types.bool; + }; + + ignore_ft_on_setup = mkOption { + default = []; + description = "Ignore file types on setup"; + type = with types; listOf str; + }; + + hijackCursor = mkOption { + default = true; + description = "Hijack the cursor in the tree to put it at the start of the filename"; + type = types.bool; + }; + + hijackUnnamedBufferWhenOpening = mkOption { + default = false; + description = "Open nvimtree in place of the unnamed buffer if it's empty."; + type = types.bool; + }; + + syncRootWithCwd = mkOption { + default = true; + description = "Changes the tree root directory on `DirChanged` and refreshes the tree"; + type = types.bool; + }; + + updateFocusedFile = mkOption { + default = { + enable = true; + update_cwd = true; + }; + description = "Updates the tree when changing nvim's directory (DirChanged event)."; + type = with types; attrsOf (either bool (attrsOf bool)); + }; + + view = { + adaptiveSize = mkOption { + default = true; + description = "Resize the tree when the window is resized"; + type = types.bool; + }; + side = mkOption { + default = "left"; + description = "Side the tree will appear on left or right"; + type = types.enum ["left" "right"]; + }; + width = mkOption { + default = 35; + description = "Width of the tree in charecters"; + type = types.int; + }; + + hideRootFolder = mkOption { + default = false; + description = "Hide the root folder"; + type = types.bool; + }; + }; + + git = { + enable = mkEnableOption "Git integration"; + ignore = mkOption { + default = true; + description = "Ignore files in git"; + type = types.bool; + }; + }; + + filesystemWatchers = { + enable = mkOption { + default = true; + description = "Enable filesystem watchers"; + type = types.bool; + }; + }; + + actions = { + openFile = { + resizeWindow = mkOption { + default = true; + description = "Resize the tree when opening a file"; + type = types.bool; + }; + quitOnOpen = mkOption { + default = false; + description = "Quit the tree when opening a file"; + type = types.bool; + }; + }; + }; + + renderer = { + higlightGit = mkOption { + default = false; + description = "Highlight git related files"; + type = types.bool; + }; + + highlightOpenedFiles = mkOption { + default = "none"; + description = "Highlight opened files"; + type = types.enum ["none" "icon" "name" "all"]; + }; + + indentMarkers = mkOption { + default = false; + description = "Show indent markers"; + type = types.bool; + }; + + showHiddenFiles = mkOption { + default = true; + description = "Show hidden files"; + type = types.bool; + }; + + trailingSlash = mkOption { + default = false; + description = "Add a trailing slash to all folders"; + type = types.bool; + }; + + showParentFolder = mkOption { + default = false; + description = "Show parent folder"; + type = types.bool; + }; + + groupEmptyFolders = mkOption { + default = false; + description = "Compact empty folders trees into a single item"; + type = types.bool; + }; + + icons = { + show = { + file = mkOption { + default = true; + description = "Show file icons"; + type = types.bool; + }; + folder = mkOption { + default = true; + description = "Show folder icons"; + type = types.bool; + }; + folderArrow = mkOption { + default = true; + description = "Show folder arrow icons"; + type = types.bool; + }; + git = mkOption { + default = false; + description = "Show git icons"; + type = types.bool; + }; + }; + + glyphs = { + default = mkOption { + default = ""; + description = "Default icon"; + type = types.str; + }; + symlink = mkOption { + default = ""; + description = "Symlink icon"; + type = types.str; + }; + + folder = { + default = mkOption { + default = ""; + description = "Default folder icon"; + type = types.str; + }; + open = mkOption { + default = ""; + description = "Open folder icon"; + type = types.str; + }; + empty = mkOption { + default = ""; + description = "Empty folder icon"; + type = types.str; + }; + emptyOpen = mkOption { + default = ""; + description = "Empty open folder icon"; + type = types.str; + }; + symlink = mkOption { + default = ""; + description = "Symlink folder icon"; + type = types.str; + }; + symlinkOpen = mkOption { + default = ""; + description = "Symlink open folder icon"; + type = types.str; + }; + arrowOpen = mkOption { + default = ""; + description = "Open folder arrow icon"; + type = types.str; + }; + arrowClosed = mkOption { + default = ""; + description = "Closed folder arrow icon"; + type = types.str; + }; + }; + + git = { + unstaged = mkOption { + default = "✗"; + description = "Unstaged git icon"; + type = types.str; + }; + staged = mkOption { + default = "✓"; + description = "Staged git icon"; + type = types.str; + }; + unmerged = mkOption { + default = ""; + description = "Unmerged git icon"; + type = types.str; + }; + renamed = mkOption { + default = "➜"; + description = "Renamed git icon"; + type = types.str; + }; + untracked = mkOption { + default = "★"; + description = "Untracked git icon"; + type = types.str; + }; + deleted = mkOption { + default = ""; + description = "Deleted git icon"; + type = types.str; + }; + ignored = mkOption { + default = "◌"; + description = "Ignored git icon"; + type = types.str; + }; + }; + }; + }; + }; }; config = mkIf cfg.enable { @@ -144,36 +392,57 @@ in { require'nvim-tree'.setup({ disable_netrw = ${boolToString cfg.disableNetRW}, hijack_netrw = ${boolToString cfg.hijackNetRW}, + hijack_cursor = ${boolToString cfg.hijackCursor}, open_on_tab = ${boolToString cfg.openTreeOnNewTab}, - open_on_setup = ${boolToString cfg.openOnSetup}, - open_on_setup_file = ${boolToString cfg.openOnSetup}, + -- FIXME: Open on startup has been deprecated + -- needs an alternative, see https://github.com/nvim-tree/nvim-tree.lua/wiki/Open-At-Startup3 + -- open_on_setup = ${boolToString cfg.openOnSetup}, + -- open_on_setup_file = ${boolToString cfg.openOnSetup}, + sync_root_with_cwd = ${boolToString cfg.syncRootWithCwd}, + update_focused_file = { + enable = ${boolToString cfg.updateFocusedFile.enable}, + update_cwd = ${boolToString cfg.updateFocusedFile.update_cwd}, + }, + + view = { + width = ${toString cfg.view.width}, + side = ${"'" + cfg.view.side + "'"}, + adaptive_size = ${boolToString cfg.view.adaptiveSize}, + hide_root_folder = ${boolToString cfg.view.hideRootFolder}, + }, + git = { + enable = ${boolToString cfg.git.enable}, + ignore = ${boolToString cfg.git.ignore}, + }, + + filesystem_watchers = { + enable = ${boolToString cfg.filesystemWatchers.enable}, + }, + + actions = { + open_file = { + quit_on_open = ${boolToString cfg.actions.openFile.quitOnOpen}, + resize_window = ${boolToString cfg.actions.openFile.resizeWindow}, + }, + }, + + renderer = { + highlight_git = ${boolToString cfg.renderer.higlightGit}, + highlight_opened_files = ${"'" + cfg.renderer.highlightOpenedFiles + "'"}, + indent_markers = { + enable = ${boolToString cfg.renderer.indentMarkers}, + }, + -- TODO: those two + add_trailing = ${boolToString cfg.renderer.trailingSlash}, + group_empty = ${boolToString cfg.renderer.groupEmptyFolders}, + }, + system_open = { cmd = ${"'" + cfg.systemOpenCmd + "'"}, }, diagnostics = { enable = ${boolToString cfg.lspDiagnostics}, }, - view = { - width = ${toString cfg.treeWidth}, - side = ${"'" + cfg.treeSide + "'"}, - }, - renderer = { - indent_markers = { - enable = ${boolToString cfg.indentMarkers}, - }, - add_trailing = ${boolToString cfg.trailingSlash}, - group_empty = ${boolToString cfg.groupEmptyFolders}, - }, - actions = { - open_file = { - quit_on_open = ${boolToString cfg.closeOnFileOpen}, - resize_window = ${boolToString cfg.resizeOnFileOpen}, - }, - }, - git = { - enable = true, - ignore = ${boolToString cfg.hideIgnoredGitFiles}, - }, filters = { dotfiles = ${boolToString cfg.hideDotFiles}, custom = { diff --git a/modules/keys/default.nix b/modules/keys/default.nix deleted file mode 100644 index 5f5b71a9..00000000 --- a/modules/keys/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: {imports = [./which-key.nix];} diff --git a/modules/keys/which-key.nix b/modules/keys/which-key.nix deleted file mode 100644 index 0a8d1459..00000000 --- a/modules/keys/which-key.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ - pkgs, - config, - lib, - ... -}: -with lib; -with builtins; let - cfg = config.vim.keys; -in { - options.vim.keys = { - enable = mkEnableOption "key binding plugins"; - - whichKey = { - enable = mkEnableOption "which-key menu"; - }; - }; - - config = mkIf (cfg.enable && cfg.whichKey.enable) { - vim.startPlugins = ["which-key"]; - - vim.luaConfigRC.whichkey = nvim.dag.entryAnywhere ''local wk = require("which-key").setup {}''; - }; -} diff --git a/modules/lib/dag.nix b/modules/lib/dag.nix index d6cc8714..0b392f94 100644 --- a/modules/lib/dag.nix +++ b/modules/lib/dag.nix @@ -16,62 +16,64 @@ in { isDag = dag: builtins.isAttrs dag && all nvim.dag.isEntry (builtins.attrValues dag); - # Takes an attribute set containing entries built by entryAnywhere, - # entryAfter, and entryBefore to a topologically sorted list of - # entries. - # - # Internally this function uses the `toposort` function in - # `` and its value is accordingly. - # - # Specifically, the result on success is - # - # { result = [ { name = ?; data = ?; } … ] } - # - # For example - # - # nix-repl> topoSort { - # a = entryAnywhere "1"; - # b = entryAfter [ "a" "c" ] "2"; - # c = entryBefore [ "d" ] "3"; - # d = entryBefore [ "e" ] "4"; - # e = entryAnywhere "5"; - # } == { - # result = [ - # { data = "1"; name = "a"; } - # { data = "3"; name = "c"; } - # { data = "2"; name = "b"; } - # { data = "4"; name = "d"; } - # { data = "5"; name = "e"; } - # ]; - # } - # true - # - # And the result on error is - # - # { - # cycle = [ { after = ?; name = ?; data = ? } … ]; - # loops = [ { after = ?; name = ?; data = ? } … ]; - # } - # - # For example - # - # nix-repl> topoSort { - # a = entryAnywhere "1"; - # b = entryAfter [ "a" "c" ] "2"; - # c = entryAfter [ "d" ] "3"; - # d = entryAfter [ "b" ] "4"; - # e = entryAnywhere "5"; - # } == { - # cycle = [ - # { after = [ "a" "c" ]; data = "2"; name = "b"; } - # { after = [ "d" ]; data = "3"; name = "c"; } - # { after = [ "b" ]; data = "4"; name = "d"; } - # ]; - # loops = [ - # { after = [ "a" "c" ]; data = "2"; name = "b"; } - # ]; - # } - # true + /* + Takes an attribute set containing entries built by entryAnywhere, + entryAfter, and entryBefore to a topologically sorted list of + entries. + + Internally this function uses the `toposort` function in + `` and its value is accordingly. + + Specifically, the result on success is + + { result = [ { name = ?; data = ?; } … ] } + + For example + + nix-repl> topoSort { + a = entryAnywhere "1"; + b = entryAfter [ "a" "c" ] "2"; + c = entryBefore [ "d" ] "3"; + d = entryBefore [ "e" ] "4"; + e = entryAnywhere "5"; + } == { + result = [ + { data = "1"; name = "a"; } + { data = "3"; name = "c"; } + { data = "2"; name = "b"; } + { data = "4"; name = "d"; } + { data = "5"; name = "e"; } + ]; + } + true + + And the result on error is + + { + cycle = [ { after = ?; name = ?; data = ? } … ]; + loops = [ { after = ?; name = ?; data = ? } … ]; + } + + For example + + nix-repl> topoSort { + a = entryAnywhere "1"; + b = entryAfter [ "a" "c" ] "2"; + c = entryAfter [ "d" ] "3"; + d = entryAfter [ "b" ] "4"; + e = entryAnywhere "5"; + } == { + cycle = [ + { after = [ "a" "c" ]; data = "2"; name = "b"; } + { after = [ "d" ]; data = "3"; name = "c"; } + { after = [ "b" ]; data = "4"; name = "d"; } + ]; + loops = [ + { after = [ "a" "c" ]; data = "2"; name = "b"; } + ]; + } + true + */ topoSort = dag: let dagBefore = dag: name: builtins.attrNames diff --git a/modules/lib/types-plugin.nix b/modules/lib/types-plugin.nix index 3cdca58a..9e318234 100644 --- a/modules/lib/types-plugin.nix +++ b/modules/lib/types-plugin.nix @@ -1,7 +1,8 @@ {lib}: with lib; let - # Plugin must be same as input name + # Plugin must be same as input name from flake.nix availablePlugins = [ + # TODO: sort by category "nvim-treesitter-context" "gitsigns-nvim" "plenary-nvim" @@ -40,8 +41,33 @@ with lib; let "rust-tools" "onedark" "catppuccin" + "minimap-vim" + "dashboard-nvim" + "alpha-nvim" + "scrollbar-nvim" + "codewindow-nvim" + "nvim-notify" + "cinnamon-nvim" + "cheatsheet-nvim" + "colorizer" + "venn-nvim" + "cellular-automaton" + "presence-nvim" + "icon-picker-nvim" + "dressing-nvim" + "orgmode-nvim" + "obsidian-nvim" + "vim-markdown" + "tabular" + "toggleterm-nvim" + "noice-nvim" + "nui-nvim" + "copilot-lua" + "tabnine-nvim" + "nvim-session-manager" + "gesture-nvim" ]; - + # You can either use the name of the plugin or a package. pluginsType = with types; listOf (nullOr (either (enum availablePlugins) package)); in { pluginsOpt = { diff --git a/modules/markdown/default.nix b/modules/markdown/default.nix index b039f6e1..8b7e31e4 100644 --- a/modules/markdown/default.nix +++ b/modules/markdown/default.nix @@ -5,7 +5,6 @@ ... }: { imports = [ - ./config.nix - ./glow.nix + ./glow ]; } diff --git a/modules/markdown/config.nix b/modules/markdown/glow/config.nix similarity index 100% rename from modules/markdown/config.nix rename to modules/markdown/glow/config.nix diff --git a/modules/markdown/glow.nix b/modules/markdown/glow/default.nix similarity index 100% rename from modules/markdown/glow.nix rename to modules/markdown/glow/default.nix diff --git a/modules/minimap/codewindow.nix b/modules/minimap/codewindow.nix new file mode 100644 index 00000000..099bc6d4 --- /dev/null +++ b/modules/minimap/codewindow.nix @@ -0,0 +1,29 @@ +{ + pkgs, + config, + lib, + ... +}: +with lib; +with builtins; let + cfg = config.vim.minimap.codewindow; +in { + options.vim.minimap.codewindow = { + enable = mkEnableOption "Enable minimap-vim plugin"; + }; + + config = mkIf cfg.enable { + vim.startPlugins = [ + "codewindow-nvim" + ]; + + vim.luaConfigRC.codewindow = nvim.dag.entryAnywhere '' + local codewindow = require('codewindow') + codewindow.setup({ + exclude_filetypes = { 'NvimTree', 'orgagenda'}, + } + ) + codewindow.apply_default_keybinds() + ''; + }; +} diff --git a/modules/minimap/default.nix b/modules/minimap/default.nix new file mode 100644 index 00000000..00074046 --- /dev/null +++ b/modules/minimap/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + lib, + config, + ... +}: { + imports = [ + ./minimap-vim.nix + ./codewindow.nix + ]; +} diff --git a/modules/minimap/minimap-vim.nix b/modules/minimap/minimap-vim.nix new file mode 100644 index 00000000..f2f96097 --- /dev/null +++ b/modules/minimap/minimap-vim.nix @@ -0,0 +1,21 @@ +{ + pkgs, + config, + lib, + ... +}: +with lib; +with builtins; let + cfg = config.vim.minimap.minimap-vim; +in { + options.vim.minimap.minimap-vim = { + enable = mkEnableOption "Enable minimap-vim plugin"; + }; + + config = mkIf cfg.enable { + vim.startPlugins = [ + pkgs.code-minimap + "minimap-vim" + ]; + }; +} diff --git a/modules/modules.nix b/modules/modules.nix index ab682b62..fe2b19e0 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -17,10 +17,18 @@ ./tidal ./autopairs ./snippets - ./keys ./markdown - ./telescope ./git + ./minimap + ./dashboard + ./notifications + ./utility + ./presence + ./notes + ./terminal + ./ui + ./assistant + ./session ]; pkgsModule = {config, ...}: { diff --git a/modules/notes/default.nix b/modules/notes/default.nix new file mode 100644 index 00000000..7361a353 --- /dev/null +++ b/modules/notes/default.nix @@ -0,0 +1,6 @@ +_: { + imports = [ + ./obsidian + ./orgmode + ]; +} diff --git a/modules/notes/obsidian/default.nix b/modules/notes/obsidian/default.nix new file mode 100644 index 00000000..f52ac02d --- /dev/null +++ b/modules/notes/obsidian/default.nix @@ -0,0 +1,51 @@ +{ + pkgs, + config, + lib, + ... +}: +with lib; +with builtins; let + cfg = config.vim.notes.obsidian; + auto = config.vim.autocomplete; +in { + options.vim.notes = { + obsidian = { + enable = mkEnableOption "Complementary neovim plugins for Obsidian editor"; + dir = mkOption { + type = types.str; + default = "~/my-vault"; + description = "Obsidian vault directory"; + }; + + completion = { + nvim_cmp = mkOption { + # if using nvim-cmp, otherwise set to false + type = types.bool; + description = "If using nvim-cmp, otherwise set to false"; + }; + }; + }; + }; + + config = mkIf (cfg.enable) { + vim.startPlugins = [ + "obsidian-nvim" + "vim-markdown" + "tabular" + ]; + + vim.luaConfigRC.obsidian = nvim.dag.entryAnywhere '' + require("obsidian").setup({ + dir = "${cfg.dir}", + completion = { + nvim_cmp = ${ + if (auto.type == "nvim-cmp") + then "true" + else "false" + } + } + }) + ''; + }; +} diff --git a/modules/notes/orgmode/default.nix b/modules/notes/orgmode/default.nix new file mode 100644 index 00000000..f45b2abe --- /dev/null +++ b/modules/notes/orgmode/default.nix @@ -0,0 +1,56 @@ +{ + pkgs, + config, + lib, + ... +}: +with lib; +with builtins; let + cfg = config.vim.notes.orgmode; +in { + options.vim.notes = { + orgmode = { + enable = mkEnableOption "Neovim plugin for Emac Orgmode. Get the best of both worlds."; + orgAgendaFiles = mkOption { + type = types.str; + default = "{'~/Dropbox/org/*', '~/my-orgs/**/*'}"; + description = "List of org files to be used as agenda files."; + }; + orgDefaultNotesFile = mkOption { + type = types.str; + default = "~/Dropbox/org/refile.org"; + description = "Default org file to be used for notes."; + }; + }; + }; + + config = mkIf (cfg.enable) { + vim.startPlugins = [ + "orgmode-nvim" + ]; + + vim.luaConfigRC.orgmode = nvim.dag.entryAnywhere '' + -- Load custom treesitter grammar for org filetype + require('orgmode').setup_ts_grammar() + + -- Treesitter configuration + require('nvim-treesitter.configs').setup { + + -- If TS highlights are not enabled at all, or disabled via `disable` prop, + -- highlighting will fallback to default Vim syntax highlighting + highlight = { + enable = true, + -- Required for spellcheck, some LaTex highlights and + -- code block highlights that do not have ts grammar + additional_vim_regex_highlighting = {'org'}, + }, + ensure_installed = {'org'}, -- Or run :TSUpdate org + } + + require('orgmode').setup({ + org_agenda_files = ${cfg.orgAgendaFiles}, + org_default_notes_file = '${cfg.orgDefaultNotesFile}', + }) + ''; + }; +} diff --git a/modules/notifications/default.nix b/modules/notifications/default.nix new file mode 100644 index 00000000..e978f42c --- /dev/null +++ b/modules/notifications/default.nix @@ -0,0 +1,5 @@ +_: { + imports = [ + ./nvim-notify.nix + ]; +} diff --git a/modules/notifications/nvim-notify.nix b/modules/notifications/nvim-notify.nix new file mode 100644 index 00000000..777d5071 --- /dev/null +++ b/modules/notifications/nvim-notify.nix @@ -0,0 +1,34 @@ +{ + pkgs, + config, + lib, + ... +}: +with lib; +with builtins; let + cfg = config.vim.notify.nvim-notify; +in { + options.vim.notify.nvim-notify = { + enable = mkEnableOption "Enable nvim-notify plugin"; + }; + + config = mkIf cfg.enable { + vim.startPlugins = ["nvim-notify"]; + + vim.luaConfigRC.nvim-notify = nvim.dag.entryAnywhere '' + require('notify').setup { + stages = 'fade_in_slide_out', + timeout = 1000, + background_colour = '#000000', + position = 'top_right', + icons = { + ERROR = '', + WARN = '', + INFO = '', + DEBUG = '', + TRACE = '', + }, + } + ''; + }; +} diff --git a/modules/presence/default.nix b/modules/presence/default.nix new file mode 100644 index 00000000..649fa762 --- /dev/null +++ b/modules/presence/default.nix @@ -0,0 +1,5 @@ +_: { + imports = [ + ./discord-nvim.nix + ]; +} diff --git a/modules/presence/discord-nvim.nix b/modules/presence/discord-nvim.nix new file mode 100644 index 00000000..4d48a4c7 --- /dev/null +++ b/modules/presence/discord-nvim.nix @@ -0,0 +1,45 @@ +{ + pkgs, + config, + lib, + ... +}: +with lib; +with builtins; let + cfg = config.vim.presence.presence-nvim; +in { + options.vim.presence.presence-nvim = { + enable = mkEnableOption "Enable presence.nvim plugin"; + }; + + config = mkIf cfg.enable { + vim.startPlugins = ["presence-nvim"]; + + vim.luaConfigRC.presence-nvim = nvim.dag.entryAnywhere '' + -- Description of each option can be found in https://github.com/andweeb/presence.nvim444 + require("presence").setup({ + -- General options + auto_update = true, + neovim_image_text = "The One True Text Editor", + main_image = "neovim", + client_id = "793271441293967371", + log_level = nil, + debounce_timeout = 10, + enable_line_number = false, + blacklist = {}, + buttons = true, + file_assets = {}, + show_time = true, + + -- Rich Presence text options + editing_text = "Editing %s", + file_explorer_text = "Browsing %s", + git_commit_text = "Committing changes", + plugin_manager_text = "Managing plugins", + reading_text = "Reading %s", + workspace_text = "Working on %s", + line_number_text = "Line %s out of %s", + }) + ''; + }; +} diff --git a/modules/session/default.nix b/modules/session/default.nix new file mode 100644 index 00000000..3a2da67e --- /dev/null +++ b/modules/session/default.nix @@ -0,0 +1,5 @@ +_: { + imports = [ + ./nvim-session-manager.nix + ]; +} diff --git a/modules/session/nvim-session-manager.nix b/modules/session/nvim-session-manager.nix new file mode 100644 index 00000000..29dd21d8 --- /dev/null +++ b/modules/session/nvim-session-manager.nix @@ -0,0 +1,22 @@ +{ + pkgs, + config, + lib, + ... +}: +with lib; +with builtins; let + cfg = config.vim.session.nvim-session-manager; +in { + options.vim.session.nvim-session-manager = { + enable = mkEnableOption "Enable nvim-session-manager"; + }; + + config = mkIf cfg.enable { + vim.startPlugins = ["nvim-session-manager"]; + + vim.luaConfigRC.nvim-session-manager = nvim.dag.entryAnywhere '' + require('session_manager').setup({}) + ''; + }; +} diff --git a/modules/statusline/config.nix b/modules/statusline/config.nix deleted file mode 100644 index 65035430..00000000 --- a/modules/statusline/config.nix +++ /dev/null @@ -1,65 +0,0 @@ -{ - pkgs, - config, - lib, - ... -}: -with lib; { - config = { - vim.statusline.lualine = { - enable = mkDefault false; - - icons = mkDefault true; - theme = mkDefault "auto"; - sectionSeparator = { - left = mkDefault ""; - right = mkDefault ""; - }; - - componentSeparator = { - left = mkDefault "⏽"; - right = mkDefault "⏽"; - }; - - activeSection = { - a = mkDefault "{'mode'}"; - b = '' - { - { - "branch", - separator = '', - }, - "diff", - } - ''; - c = mkDefault "{'filename'}"; - x = mkDefault '' - { - { - "diagnostics", - sources = {'nvim_lsp'}, - separator = '', - symbols = {error = '', warn = '', info = '', hint = ''}, - }, - { - "filetype", - }, - "fileformat", - "encoding", - } - ''; - y = mkDefault "{'progress'}"; - z = mkDefault "{'location'}"; - }; - - inactiveSection = { - a = mkDefault "{}"; - b = mkDefault "{}"; - c = mkDefault "{'filename'}"; - x = mkDefault "{'location'}"; - y = mkDefault "{}"; - z = mkDefault "{}"; - }; - }; - }; -} diff --git a/modules/statusline/default.nix b/modules/statusline/default.nix index 5d638c92..643832b2 100644 --- a/modules/statusline/default.nix +++ b/modules/statusline/default.nix @@ -5,7 +5,6 @@ ... }: { imports = [ - ./lualine.nix - ./config.nix + ./lualine ]; } diff --git a/modules/statusline/lualine/config.nix b/modules/statusline/lualine/config.nix new file mode 100644 index 00000000..10b8bf09 --- /dev/null +++ b/modules/statusline/lualine/config.nix @@ -0,0 +1,94 @@ +{ + pkgs, + config, + lib, + ... +}: +with lib; { + config = { + vim.statusline.lualine = { + enable = mkDefault false; + + icons = mkDefault true; + theme = mkDefault "auto"; + sectionSeparator = { + left = mkDefault ""; + right = mkDefault ""; + }; + + componentSeparator = { + left = mkDefault ""; + right = mkDefault ""; + }; + + activeSection = { + # left side of the statusline 4 + a = mkDefault "{'mode'}"; + b = mkDefault '' + { + { + "filename", + color = {bg='none'}, + symbols = {modified = '', readonly = ''}, + }, + } + ''; + c = mkDefault '' + { + { + "branch", + icon = ' •', + separator = { left = '(', right = ')'}, + }, + } + ''; + # right side of the statusline (x, y, z) + x = mkDefault '' + { + { + "diagnostics", + sources = {'nvim_lsp', 'nvim_diagnostic'}, + symbols = {error = '', warn = '', info = '', hint = ''} + }, + } + ''; + y = mkDefault '' + { + { + "fileformat", + color = {bg='none'} + }, + } + ''; + z = mkDefault '' + { + { + "progress", + color = { + bg='none', + fg='lavender' + } + }, + { + "location", + color = {bg='none', fg='lavender'}, + }, + { + "filetype", + color = {bg='none', fg='lavender'}, + }, + } + ''; + }; + + inactiveSection = { + a = mkDefault "{}"; + b = mkDefault "{}"; + c = mkDefault "{'filename'}"; + x = mkDefault "{'location'}"; + y = mkDefault "{}"; + z = mkDefault "{}"; + }; + }; + }; +} diff --git a/modules/statusline/lualine/default.nix b/modules/statusline/lualine/default.nix new file mode 100644 index 00000000..879e72f1 --- /dev/null +++ b/modules/statusline/lualine/default.nix @@ -0,0 +1,6 @@ +_: { + imports = [ + ./lualine.nix + ./config.nix + ]; +} diff --git a/modules/statusline/lualine.nix b/modules/statusline/lualine/lualine.nix similarity index 97% rename from modules/statusline/lualine.nix rename to modules/statusline/lualine/lualine.nix index aba8466d..3b8f8d2b 100644 --- a/modules/statusline/lualine.nix +++ b/modules/statusline/lualine/lualine.nix @@ -7,7 +7,7 @@ with lib; with builtins; let cfg = config.vim.statusline.lualine; - supported_themes = import ./supported_lualine_themes.nix; + supported_themes = import ./supported_themes.nix; in { options.vim.statusline.lualine = { enable = mkOption { @@ -175,7 +175,7 @@ in { theme = "${cfg.theme}", component_separators = {"${cfg.componentSeparator.left}","${cfg.componentSeparator.right}"}, section_separators = {"${cfg.sectionSeparator.left}","${cfg.sectionSeparator.right}"}, - disabled_filetypes = {}, + disabled_filetypes = { 'packer', 'NvimTree', 'alpha' } }, sections = { lualine_a = ${cfg.activeSection.a}, diff --git a/modules/statusline/supported_lualine_themes.nix b/modules/statusline/lualine/supported_themes.nix similarity index 100% rename from modules/statusline/supported_lualine_themes.nix rename to modules/statusline/lualine/supported_themes.nix diff --git a/modules/terminal/default.nix b/modules/terminal/default.nix new file mode 100644 index 00000000..228f3ffd --- /dev/null +++ b/modules/terminal/default.nix @@ -0,0 +1,5 @@ +_: { + imports = [ + ./toggleterm.nix + ]; +} diff --git a/modules/terminal/toggleterm.nix b/modules/terminal/toggleterm.nix new file mode 100644 index 00000000..7c7f5b54 --- /dev/null +++ b/modules/terminal/toggleterm.nix @@ -0,0 +1,51 @@ +{ + pkgs, + config, + lib, + ... +}: +with lib; +with builtins; let + cfg = config.vim.terminal.toggleterm; +in { + options.vim.terminal.toggleterm = { + enable = mkEnableOption "Enable toggleterm as a replacement to built-in terminal command"; + direction = mkOption { + type = types.enum ["horizontal" "vertical" "tab" "float"]; + default = "float"; + description = "Direction of the terminal"; + }; + enable_winbar = mkOption { + type = types.bool; + default = false; + description = "Enable winbar"; + }; + }; + + config = mkIf cfg.enable { + vim.startPlugins = [ + "toggleterm-nvim" + ]; + + vim.luaConfigRC.toggleterm = nvim.dag.entryAnywhere '' + require("toggleterm").setup({ + open_mapping = [[]], + direction = '${toString cfg.direction}', + -- TODO: this should probably be turned into a module that uses the lua function if and only if the user has not set it + size = function(term) + if term.direction == "horizontal" then + return 15 + elseif term.direction == "vertical" then + return vim.o.columns * 0.4 + end + end, + winbar = { + enabled = '${toString cfg.enable_winbar}', + name_formatter = function(term) -- term: Terminal + return term.name + end + }, + }) + ''; + }; +} diff --git a/modules/theme/config.nix b/modules/theme/config.nix index bbe6d289..aed77f7a 100644 --- a/modules/theme/config.nix +++ b/modules/theme/config.nix @@ -1,4 +1,9 @@ -{ pkgs, config, lib, ... }: +{ + pkgs, + config, + lib, + ... +}: with lib; { config = { vim.theme = { diff --git a/modules/theme/supported_themes.nix b/modules/theme/supported_themes.nix index 31fc86f5..22071469 100644 --- a/modules/theme/supported_themes.nix +++ b/modules/theme/supported_themes.nix @@ -1,33 +1,47 @@ { onedark = { - setup = { style ? "dark" }: '' + setup = {style ? "dark"}: '' -- OneDark theme require('onedark').setup { style = "${style}" } require('onedark').load() ''; - styles = [ "dark" "darker" "cool" "deep" "warm" "warmer" ]; + styles = ["dark" "darker" "cool" "deep" "warm" "warmer"]; }; tokyonight = { - setup = { style ? "night" }: '' + setup = {style ? "night"}: '' -- need to set style before colorscheme to apply vim.g.tokyonight_style = '${style}' vim.cmd[[colorscheme tokyonight]] ''; - styles = [ "day" "night" "storm" ]; + styles = ["day" "night" "storm"]; }; catppuccin = { - setup = { style ? "mocha" }: '' + setup = {style ? "mocha"}: '' -- Catppuccin theme require('catppuccin').setup { - flavour = "${style}" + flavour = "${style}", + transparent_background = true, + integrations = { + nvimtree = { + enabled = true, + transparent_panel = false, + show_root = true, + }, + + hop = true, + gitsigns = true, + telescope = true, + treesitter = true, + ts_rainbow = true, + }, } -- setup must be called before loading vim.cmd.colorscheme "catppuccin" ''; - styles = [ "latte" "frappe" "macchiato" "mocha" ]; + styles = ["latte" "frappe" "macchiato" "mocha"]; }; } diff --git a/modules/tidal/default.nix b/modules/tidal/default.nix index bb190463..4b07c0d0 100644 --- a/modules/tidal/default.nix +++ b/modules/tidal/default.nix @@ -3,4 +3,8 @@ lib, pkgs, ... -}: {imports = [./tidal.nix];} +}: { + imports = [ + ./tidal.nix + ]; +} diff --git a/modules/treesitter/treesitter.nix b/modules/treesitter/treesitter.nix index 8ed5154a..d6acd2da 100644 --- a/modules/treesitter/treesitter.nix +++ b/modules/treesitter/treesitter.nix @@ -29,24 +29,26 @@ in { grammars = mkOption { type = with types; listOf package; - default = with (pkgs.vimPlugins.nvim-treesitter.builtGrammars); [ - c - cpp - nix - python - rust - markdown - comment - toml - make - tsx - html - javascript - css - graphql - json - zig - ]; + default = with (pkgs.vimPlugins.nvim-treesitter.builtGrammars); + [ + c + cpp + nix + python + rust + markdown + comment + toml + make + tsx + html + javascript + css + graphql + json + zig + ] + ++ (optional config.vim.notes.orgmode.enable org); # add orgmode grammar if enabled description = '' List of treesitter grammars to install. When enabling a language, its treesitter grammar is added for you. diff --git a/modules/ui/default.nix b/modules/ui/default.nix new file mode 100644 index 00000000..26bc1864 --- /dev/null +++ b/modules/ui/default.nix @@ -0,0 +1,5 @@ +_: { + imports = [ + ./noice.nix + ]; +} diff --git a/modules/ui/noice.nix b/modules/ui/noice.nix new file mode 100644 index 00000000..394d0e4a --- /dev/null +++ b/modules/ui/noice.nix @@ -0,0 +1,67 @@ +{ + pkgs, + config, + lib, + ... +}: +with lib; +with builtins; let + cfg = config.vim.ui.noice; +in { + options.vim.ui.noice = { + enable = mkEnableOption "noice-nvim"; + }; + + config = mkIf cfg.enable { + vim.startPlugins = [ + "noice-nvim" + "nui-nvim" + ]; + + vim.luaConfigRC.noice-nvim = nvim.dag.entryAnywhere '' + require("noice").setup({ + lsp = { + override = { + ["vim.lsp.util.convert_input_to_markdown_lines"] = true, + ["vim.lsp.util.stylize_markdown"] = true, + ["cmp.entry.get_documentation"] = true, + }, + + signature = { + enabled = false, -- FIXME: enabling this file throws an error which I couldn't figure out + }, + }, + + presets = { + bottom_search = true, -- use a classic bottom cmdline for search + command_palette = true, -- position the cmdline and popupmenu together + long_message_to_split = true, -- long messages will be sent to a split + inc_rename = false, -- enables an input dialog for inc-rename.nvim + lsp_doc_border = false, -- add a border to hover docs and signature help + }, + + format = { + cmdline = { pattern = "^:", icon = "", lang = "vim" }, + search_down = { kind = "search", pattern = "^/", icon = " ", lang = "regex" }, + search_up = { kind = "search", pattern = "^%?", icon = " ", lang = "regex" }, + filter = { pattern = "^:%s*!", icon = "", lang = "bash" }, + lua = { pattern = "^:%s*lua%s+", icon = "", lang = "lua" }, + help = { pattern = "^:%s*he?l?p?%s+", icon = "" }, + input = {}, + }, + + -- Hide written messages + routes = { + { + filter = { + event = "msg_show", + kind = "", + find = "written", + }, + opts = { skip = true }, + }, + }, + }) + ''; + }; +} diff --git a/modules/utility/binds/cheatsheet.nix b/modules/utility/binds/cheatsheet.nix new file mode 100644 index 00000000..2e18691e --- /dev/null +++ b/modules/utility/binds/cheatsheet.nix @@ -0,0 +1,22 @@ +{ + pkgs, + config, + lib, + ... +}: +with lib; +with builtins; let + cfg = config.vim.binds.cheatsheet; +in { + options.vim.binds.cheatsheet = { + enable = mkEnableOption "Searchable cheatsheet for nvim using telescope"; + }; + + config = mkIf (cfg.enable) { + vim.startPlugins = ["cheatsheet-nvim"]; + + vim.luaConfigRC.cheaetsheet-nvim = nvim.dag.entryAnywhere '' + require('cheatsheet').setup({}) + ''; + }; +} diff --git a/modules/utility/binds/default.nix b/modules/utility/binds/default.nix new file mode 100644 index 00000000..9dd64ac2 --- /dev/null +++ b/modules/utility/binds/default.nix @@ -0,0 +1,11 @@ +{ + config, + lib, + pkgs, + ... +}: { + imports = [ + ./which-key.nix + ./cheatsheet.nix + ]; +} diff --git a/modules/utility/binds/which-key.nix b/modules/utility/binds/which-key.nix new file mode 100644 index 00000000..ef9fdf60 --- /dev/null +++ b/modules/utility/binds/which-key.nix @@ -0,0 +1,20 @@ +{ + pkgs, + config, + lib, + ... +}: +with lib; +with builtins; let + cfg = config.vim.binds.whichKey; +in { + options.vim.binds.whichKey = { + enable = mkEnableOption "which-key menu"; + }; + + config = mkIf (cfg.enable) { + vim.startPlugins = ["which-key"]; + + vim.luaConfigRC.whichkey = nvim.dag.entryAnywhere ''local wk = require("which-key").setup {}''; + }; +} diff --git a/modules/utility/colorizer.nix b/modules/utility/colorizer.nix new file mode 100644 index 00000000..940ca7ce --- /dev/null +++ b/modules/utility/colorizer.nix @@ -0,0 +1,24 @@ +{ + pkgs, + config, + lib, + ... +}: +with lib; +with builtins; let + cfg = config.vim.utility.colorizer; +in { + options.vim.utility.colorizer = { + enable = mkEnableOption "ccc color picker for neovim"; + }; + + config = mkIf (cfg.enable) { + vim.startPlugins = [ + "colorizer" + ]; + + vim.configRC.ccc = + nvim.dag.entryAnywhere '' + ''; + }; +} diff --git a/modules/utility/default.nix b/modules/utility/default.nix new file mode 100644 index 00000000..0b6a21b8 --- /dev/null +++ b/modules/utility/default.nix @@ -0,0 +1,10 @@ +_: { + imports = [ + ./binds + ./gestures + ./telescope + ./colorizer.nix + ./venn.nix + ./icon-picker.nix + ]; +} diff --git a/modules/utility/gestures/default.nix b/modules/utility/gestures/default.nix new file mode 100644 index 00000000..4dfa40ac --- /dev/null +++ b/modules/utility/gestures/default.nix @@ -0,0 +1,5 @@ +_: { + imports = [ + ./gesture-nvim.nix + ]; +} diff --git a/modules/utility/gestures/gesture-nvim.nix b/modules/utility/gestures/gesture-nvim.nix new file mode 100644 index 00000000..b8aa4ceb --- /dev/null +++ b/modules/utility/gestures/gesture-nvim.nix @@ -0,0 +1,55 @@ +{ + pkgs, + config, + lib, + ... +}: +with lib; +with builtins; let + cfg = config.vim.gestures.gesture-nvim; +in { + options.vim.gestures.gesture-nvim = { + enable = mkEnableOption "Enable GitHub Copilot"; + }; + + config = mkIf cfg.enable { + vim.startPlugins = ["gesture-nvim"]; + + vim.luaConfigRC.gesture-nvim = nvim.dag.entryAnywhere '' + vim.opt.mouse = "a" + + vim.keymap.set("n", "", [[lua require("gesture").draw()]], { silent = true }) + vim.keymap.set("n", "", [[lua require("gesture").finish()]], { silent = true }) + + -- or if you would like to use right click + -- vim.keymap.set("n", "", [[]]) + -- vim.keymap.set("n", "", [[lua require("gesture").draw()]], { silent = true }) + -- vim.keymap.set("n", "", [[lua require("gesture").finish()]], { silent = true }) + + local gesture = require("gesture") + gesture.register({ + name = "scroll to bottom", + inputs = { gesture.up(), gesture.down() }, + action = "normal! G", + }) + gesture.register({ + name = "next tab", + inputs = { gesture.right() }, + action = "tabnext", + }) + gesture.register({ + name = "previous tab", + inputs = { gesture.left() }, + action = function(ctx) -- also can use callable + vim.cmd.tabprevious() + end, + }) + gesture.register({ + name = "go back", + inputs = { gesture.right(), gesture.left() }, + -- map to `` keycode + action = [[lua vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes("", true, false, true), "n", true)]], + }) + ''; + }; +} diff --git a/modules/utility/icon-picker.nix b/modules/utility/icon-picker.nix new file mode 100644 index 00000000..c43d2cda --- /dev/null +++ b/modules/utility/icon-picker.nix @@ -0,0 +1,27 @@ +{ + pkgs, + config, + lib, + ... +}: +with lib; +with builtins; let + cfg = config.vim.utility.icon-picker; +in { + options.vim.utility.icon-picker = { + enable = mkEnableOption "Nerdfonts icon picker for nvim"; + }; + + config = mkIf (cfg.enable) { + vim.startPlugins = [ + "icon-picker-nvim" + "dressing-nvim" + ]; + + vim.luaConfigRC.icon-picker = nvim.dag.entryAnywhere '' + require("icon-picker").setup({ + disable_legacy_commands = true + }) + ''; + }; +} diff --git a/modules/telescope/default.nix b/modules/utility/telescope/default.nix similarity index 86% rename from modules/telescope/default.nix rename to modules/utility/telescope/default.nix index 67bde168..82452fe4 100644 --- a/modules/telescope/default.nix +++ b/modules/utility/telescope/default.nix @@ -54,7 +54,8 @@ in { ); vim.luaConfigRC.telescope = nvim.dag.entryAnywhere '' - require("telescope").setup { + local telescope = require('telescope') + telescope.setup { defaults = { vimgrep_arguments = { "${pkgs.ripgrep}/bin/rg", @@ -72,6 +73,18 @@ in { }, } } + + ${ + if config.vim.ui.noice.enable + then "telescope.load_extension('noice')" + else null + } + + ${ + if config.vim.notify.nvim-notify.enable + then "telescope.load_extension('notify')" + else null + } ''; }; } diff --git a/modules/utility/venn.nix b/modules/utility/venn.nix new file mode 100644 index 00000000..b1c9ffa1 --- /dev/null +++ b/modules/utility/venn.nix @@ -0,0 +1,47 @@ +{ + pkgs, + config, + lib, + ... +}: +with lib; +with builtins; let + cfg = config.vim.utility.venn-nvim; +in { + options.vim.utility.venn-nvim = { + enable = mkEnableOption "draw ASCII diagrams in Neovim"; + }; + + config = mkIf (cfg.enable) { + vim.startPlugins = [ + "venn-nvim" + ]; + + # TODO: https://github.com/jbyuki/venn.nvim#using-toggle-command + # add keybindings for drawing diagrams + vim.luaConfigRC.venn-nvim = nvim.dag.entryAnywhere '' + local venn = require('venn') + -- venn.nvim: enable or disable keymappings + function _G.Toggle_venn() + local venn_enabled = vim.inspect(vim.b.venn_enabled) + if venn_enabled == "nil" then + vim.b.venn_enabled = true + vim.cmd[[setlocal ve=all]] + -- draw a line on HJKL keystokes + vim.api.nvim_buf_set_keymap(0, "n", "J", "j:VBox", {noremap = true}) + vim.api.nvim_buf_set_keymap(0, "n", "K", "k:VBox", {noremap = true}) + vim.api.nvim_buf_set_keymap(0, "n", "L", "l:VBox", {noremap = true}) + vim.api.nvim_buf_set_keymap(0, "n", "H", "h:VBox", {noremap = true}) + -- draw a box by pressing "f" with visual selection + vim.api.nvim_buf_set_keymap(0, "v", "f", ":VBox", {noremap = true}) + else + vim.cmd[[setlocal ve=]] + vim.cmd[[mapclear ]] + vim.b.venn_enabled = nil + end + end + -- toggle keymappings for venn using v + vim.api.nvim_set_keymap('n', 'v', ":lua Toggle_venn()", { noremap = true}) + ''; + }; +} diff --git a/modules/visuals/config.nix b/modules/visuals/config.nix index 11d580d6..7231c86e 100644 --- a/modules/visuals/config.nix +++ b/modules/visuals/config.nix @@ -1,7 +1,8 @@ -{ pkgs -, config -, lib -, ... +{ + pkgs, + config, + lib, + ... }: with lib; { config = { @@ -11,6 +12,10 @@ with lib; { nvimWebDevicons.enable = mkDefault false; lspkind.enable = mkDefault false; + scrollBar = { + enable = mkDefault false; + }; + cursorWordline = { enable = mkDefault false; lineTimeout = mkDefault 500; diff --git a/modules/visuals/visuals.nix b/modules/visuals/visuals.nix index 7008c686..a186378c 100644 --- a/modules/visuals/visuals.nix +++ b/modules/visuals/visuals.nix @@ -24,6 +24,22 @@ in { description = "enable vscode-like pictograms for lsp [lspkind]"; }; + scrollBar.enable = mkOption { + type = types.bool; + description = "enable scrollbar [scrollbar.nvim]"; + }; + + smoothScroll.enable = mkOption { + type = types.bool; + description = "enable smooth scrolling [cinnamon-nvim]"; + }; + + cellularAutomaton.enable = mkOption { + type = types.bool; + description = "enable cellular automaton [cellular-automaton]"; + default = false; + }; + cursorWordline = { enable = mkOption { type = types.bool; @@ -88,6 +104,21 @@ in { then "indent-blankline" else null ) + ( + if cfg.scrollBar.enable + then "scrollbar-nvim" + else null + ) + ( + if cfg.smoothScroll.enable + then "cinnamon-nvim" + else null + ) + ( + if cfg.cellularAutomaton.enable + then "cellular-automaton" + else null + ) ]; vim.luaConfigRC.visuals = nvim.dag.entryAnywhere '' @@ -130,6 +161,55 @@ in { then "vim.g.cursorline_timeout = ${toString cfg.cursorWordline.lineTimeout}" else "" } + + ${ + if cfg.scrollBar.enable + then "require('scrollbar').setup{ + excluded_filetypes = { + 'prompt', + 'TelescopePrompt', + 'noice', + 'NvimTree', + 'alpha' + }, + }" + else "" + } + ${ + if cfg.smoothScroll.enable + then "require('cinnamon').setup()" + else "" + } + ${ + if cfg.cellularAutomaton.enable + then '' + local config = { + fps = 50, + name = 'slide', + } + + -- init function is invoked only once at the start + -- config.init = function (grid) + -- + -- end + + -- update function + config.update = function (grid) + for i = 1, #grid do + local prev = grid[i][#(grid[i])] + for j = 1, #(grid[i]) do + grid[i][j], prev = prev, grid[i][j] + end + end + return true + end + + require("cellular-automaton").register_animation(config) + + vim.keymap.set("n", "fml", "CellularAutomaton make_it_rain") + '' + else "" + } ''; }; } diff --git a/screenshot.png b/screenshot.png deleted file mode 100644 index 48ca7d2f..00000000 Binary files a/screenshot.png and /dev/null differ