diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..3550a30 --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use flake diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..30e0d2f --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +* @dotunwrap diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..e6365da --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,102 @@ +name: CI + +on: + pull_request: + types: + - opened + - synchronize + - reopened + push: + branches: + - main + +jobs: + generate_matrix: + name: Generate matrix + runs-on: ubuntu-latest + outputs: + checks: ${{ steps.gen_checks.outputs.checks }} + steps: + - name: Clone repository + uses: actions/checkout@v5 + - name: Install Nix + uses: cachix/install-nix-action@v31 + with: + extra_nix_config: | + auto-optimise-store = true + experimental-features = nix-command flakes + substituters = https://cache.nixos.org/ https://nix-community.cachix.org/ + trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs= + allow-import-from-derivation = true + install_url: https://releases.nixos.org/nix/nix-2.28.0/install + - name: Generate flake.json + run: | + nix flake show --json --allow-import-from-derivation > flake.json + - id: gen_checks + name: Generate checks + run: | + systems=("x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin") + declare -A runners=( ["x86_64-linux"]="ubuntu-latest" ["aarch64-linux"]="ubuntu-latest" ["x86_64-darwin"]="macos-13" ["aarch64-darwin"]="macos-14" ) + matrix="[]" + for sys in "${systems[@]}"; do + checks=$(jq -c ".checks.\"$sys\" | keys[]" < flake.json 2>/dev/null || echo "[]") + for check in $(echo "$checks" | jq -r '.[]'); do + runner="${runners[$sys]}" + matrix=$(echo "$matrix" | jq ". + [{\"system\": \"$sys\", \"check\": \"$check\", \"runner\": \"$runner\"}]") + done + done + printf "checks=%s" "$matrix" >> $GITHUB_OUTPUT + + build_checks: + name: Build checks + runs-on: ${{ matrix.check.runner }} + needs: + - generate_matrix + strategy: + fail-fast: false + max-parallel: 5 + matrix: + check: ${{fromJson(needs.generate_matrix.outputs.checks)}} + steps: + - name: Clone repository + uses: actions/checkout@v5 + - name: Install nix + uses: cachix/install-nix-action@v31 + with: + extra_nix_config: | + auto-optimise-store = true + experimental-features = nix-command flakes + substituters = https://cache.nixos.org/ https://nix-community.cachix.org + trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs= + allow-import-from-derivation = true + install_url: https://releases.nixos.org/nix/nix-2.28.0/install + - name: Setup cachix + uses: cachix/cachix-action@v15 + with: + name: your-cachix-name # Replace with your cachix name + authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' + - name: Build everything + run: nix build .#checks.${{ matrix.check.system }}.${{ matrix.check.check }} --no-link + + check_flake: + name: Check flake + runs-on: ubuntu-latest + needs: + - generate_matrix + continue-on-error: true + steps: + - name: Clone repository + uses: actions/checkout@v5 + - name: Install nix + uses: cachix/install-nix-action@v31 + with: + extra_nix_config: | + auto-optimise-store = true + experimental-features = nix-command flakes + substituters = https://cache.nixos.org/ https://nix-community.cachix.org + trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs= + allow-import-from-derivation = true + install_url: https://releases.nixos.org/nix/nix-2.28.0/install + - name: Run checks + run: | + nix flake check --keep-going --allow-import-from-derivation diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..c2fed6e --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,54 @@ +name: Release init.lua +on: + workflow_dispatch: + inputs: + version: + description: Release version (semantic) + required: true + type: string + branch: + description: Branch to base the release on (e.g. main) + required: true + type: string + default: main +permissions: + contents: write +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout repo + uses: actions/checkout@v5 + with: + ref: ${{ inputs.branch }} + - name: Install nix + uses: cachix/install-nix-action@v31 + with: + extra_nix_config: | + auto-optimise-store = true + experimental-features = nix-command flakes + substituters = https://cache.nixos.org/ https://nix-community.cachix.org/ + trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs= + install_url: https://releases.nixos.org/nix/nix-2.28.0/install + - name: Build init.lua + run: nix build .#initLua + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: determinvim-${{ inputs.version }} + path: ./result + - name: Create and push tag + run: | + git config --global user.name 'github-actions[bot]' + git config --global user.email 'github-actions[bot]@users.noreply.github.com' + git checkout ${{ inputs.branch }} + git tag ${{ inputs.version }} + git push origin ${{ inputs.version }} + - name: Create release + run: | + gh release create ${{ inputs.version }} \ + --title "v${{ inputs.version }}" \ + --generate-notes \ + ./result + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index e69de29..381b74d 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1,3 @@ +result + +.direnv/ diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..b0cf843 --- /dev/null +++ b/LICENSE @@ -0,0 +1,13 @@ + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + + Copyright (C) 2025 Gabriella Simpson + + Everyone is permitted to copy and distribute verbatim or modified + copies of this license document, and changing it is allowed as long + as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. diff --git a/README.md b/README.md index b2ca3b1..fbbfb24 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,17 @@ -# .unwrap's nvf config +
-This is a WIP [nvf](https://github.com/notashelf/nvf) configuration. +# determinvim -nvf is a framework for structuring your Neovim configuration using Nix. +[![Badge CI]][CI] +![Badge Nix] +![Badge X] + +
+ +This is a WIP Neovim configuration using [Nixvim](https://github.com/nix-community/nixvim). It's in a barely usable state at the moment. + +[CI]: https://github.com/dotunwrap/determinvim/actions/workflows/ci.yml + +[Badge CI]: https://github.com/dotunwrap/determinvim/actions/workflows/ci.yml/badge.svg +[Badge Nix]: https://img.shields.io/badge/-nix_btw-75afd7?logo=nixos&logoColor=CAD3F5&labelColor=24273A +[Badge X]: https://img.shields.io/twitter/follow/dotunwrap diff --git a/binds/default.nix b/binds/default.nix deleted file mode 100644 index f1d23f8..0000000 --- a/binds/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ - config.vim.binds = { - cheatsheet.enable = true; - whichKey.enable = true; - }; -} diff --git a/checks/default.nix b/checks/default.nix new file mode 100644 index 0000000..ac1b439 --- /dev/null +++ b/checks/default.nix @@ -0,0 +1,11 @@ +{ + inputs, + system, +}: +let + pkgs = inputs.nixpkgs.legacyPackages.${system}; + callPackage = pkgs.lib.callPackageWith (pkgs // { inherit (inputs) self; }); +in +{ + nixfmt = callPackage ./nixfmt.nix { }; +} diff --git a/checks/nixfmt.nix b/checks/nixfmt.nix new file mode 100644 index 0000000..9377017 --- /dev/null +++ b/checks/nixfmt.nix @@ -0,0 +1,8 @@ +{ + runCommand, + nixfmt, + self, +}: +runCommand "check-nixfmt-${self.rev or "dirty"}" { } '' + ${nixfmt}/bin/nixfmt --check ${self} < /dev/null | tee $out +'' diff --git a/clipboard.nix b/clipboard.nix deleted file mode 100644 index 6b7c6f4..0000000 --- a/clipboard.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - config.vim.clipboard.registers = "unnamedplus"; -} diff --git a/config/autocmd.nix b/config/autocmd.nix new file mode 100644 index 0000000..046418e --- /dev/null +++ b/config/autocmd.nix @@ -0,0 +1,17 @@ +{ lib, ... }: +let + inherit (lib.nixvim) mkRaw; +in +{ + autoCmd = [ + { + desc = "Highlight on yank"; + event = [ "TextYankPost" ]; + callback = mkRaw '' + function() + vim.highlight.on_yank() + end + ''; + } + ]; +} diff --git a/config/default.nix b/config/default.nix new file mode 100644 index 0000000..985917f --- /dev/null +++ b/config/default.nix @@ -0,0 +1,14 @@ +{ + imports = [ + ./globals.nix + ./options.nix + ./keymaps.nix + ./autocmd.nix + ./plugins + ./langs + ]; + + luaLoader.enable = true; + viAlias = true; + vimAlias = true; +} diff --git a/globals.nix b/config/globals.nix similarity index 76% rename from globals.nix rename to config/globals.nix index 6f521d6..5857ee2 100644 --- a/globals.nix +++ b/config/globals.nix @@ -1,5 +1,5 @@ { - config.vim.globals = { + globals = { mapleader = " "; maplocalleader = " "; have_nerd_font = true; diff --git a/config/keymaps.nix b/config/keymaps.nix new file mode 100644 index 0000000..14cac4d --- /dev/null +++ b/config/keymaps.nix @@ -0,0 +1,10 @@ +{ utils, ... }: +let + inherit (utils.keymaps) mkKeymap; +in +{ + keymaps = [ + (mkKeymap "v" "" ">gv" "Indent selection right") + (mkKeymap "v" "" "a" (mkRaw '' + function() + require("aerial").toggle({ focus = true, direction = "left" }) + end + '') "Toggle Aerial") + ]; +} diff --git a/config/plugins/blink-cmp.nix b/config/plugins/blink-cmp.nix new file mode 100644 index 0000000..072c669 --- /dev/null +++ b/config/plugins/blink-cmp.nix @@ -0,0 +1,16 @@ +{ + plugins.blink-cmp = { + enable = true; + settings = { + keymap = { + preset = "default"; + "" = [ + "select_and_accept" + "fallback" + ]; + }; + + completion.trigger.show_on_insert_on_trigger_character = false; + }; + }; +} diff --git a/config/plugins/conform.nix b/config/plugins/conform.nix new file mode 100644 index 0000000..80ef329 --- /dev/null +++ b/config/plugins/conform.nix @@ -0,0 +1,21 @@ +{ + lib, + pkgs, + ... +}: +{ + plugins.conform-nvim = { + enable = true; + settings = { + default_format_opts.lsp_format = "prefer"; + formatters_by_ft = { + "_" = [ + "squeeze_blanks" + "trim_whitespace" + "trim_newlines" + ]; + }; + formatters.squeeze_blanks.command = lib.getExe' pkgs.coreutils "cat"; + }; + }; +} diff --git a/config/plugins/default.nix b/config/plugins/default.nix new file mode 100644 index 0000000..9ed00fd --- /dev/null +++ b/config/plugins/default.nix @@ -0,0 +1,9 @@ +{ lib, ... }: +{ + imports = + with builtins; + with lib; + map (fn: ./${fn}) ( + filter (fn: (fn != "default.nix" && hasSuffix ".nix" "${fn}")) (attrNames (readDir ./.)) + ); +} diff --git a/config/plugins/gitsigns.nix b/config/plugins/gitsigns.nix new file mode 100644 index 0000000..5715f38 --- /dev/null +++ b/config/plugins/gitsigns.nix @@ -0,0 +1,26 @@ +{ + lib, + utils, + ... +}: +let + inherit (utils.keymaps) mkKeymap; + inherit (lib.nixvim) mkRaw; +in +{ + plugins.gitsigns = { + enable = true; + }; + keymaps = [ + (mkKeymap "n" "gb" (mkRaw '' + function() + require("gitsigns").blame_line() + end + '') "Git blame line") + (mkKeymap "n" "gd" (mkRaw '' + function() + require("gitsigns").diffthis() + end + '') "Git diff") + ]; +} diff --git a/config/plugins/indent-blankline.nix b/config/plugins/indent-blankline.nix new file mode 100644 index 0000000..b94abab --- /dev/null +++ b/config/plugins/indent-blankline.nix @@ -0,0 +1,5 @@ +{ + plugins.indent-blankline = { + enable = true; + }; +} diff --git a/config/plugins/lspconfig.nix b/config/plugins/lspconfig.nix new file mode 100644 index 0000000..f6bda39 --- /dev/null +++ b/config/plugins/lspconfig.nix @@ -0,0 +1,5 @@ +{ + plugins.lsp = { + enable = true; + }; +} diff --git a/config/plugins/markdown-preview.nix b/config/plugins/markdown-preview.nix new file mode 100644 index 0000000..7ae3ed9 --- /dev/null +++ b/config/plugins/markdown-preview.nix @@ -0,0 +1,5 @@ +{ + plugins.markdown-preview = { + enable = true; + }; +} diff --git a/config/plugins/mini.nix b/config/plugins/mini.nix new file mode 100644 index 0000000..7f0ee5f --- /dev/null +++ b/config/plugins/mini.nix @@ -0,0 +1,58 @@ +{ + lib, + utils, + ... +}: +let + inherit (lib.nixvim) mkRaw; + inherit (utils.keymaps) mkKeymap; +in +{ + plugins = { + mini-ai.enable = true; + mini-basics.enable = true; + mini-bufremove.enable = true; + mini-comment = { + enable = true; + settings = { + options = { + custom_commentstring = mkRaw '' + function() + return require("ts_context_commentstring.internal").calculate_commentstring() + or vim.bo.commentstring + end + ''; + }; + }; + }; + mini-icons = { + enable = true; + mockDevIcons = true; + }; + mini-jump2d.enable = true; + mini-notify.enable = true; + mini-pairs.enable = true; + mini-splitjoin.enable = true; + mini-starter = { + enable = true; + settings = { + header = '' + __ __ _ _ + ___/ /__ / /____ ______ _ (_)__ _ __(_)_ _ + / _ / -_) __/ -_) __/ ' \/ / _ \ |/ / / ' \ + \_,_/\__/\__/\__/_/ /_/_/_/_/_//_/___/_/_/_/_/ + ''; + }; + }; + mini-statusline.enable = true; + mini-surround.enable = true; + mini-tabline.enable = true; + }; + keymaps = [ + (mkKeymap "n" "bc" (mkRaw '' + function() + require("mini.bufremove").delete() + end + '') "Close current buffer") + ]; +} diff --git a/config/plugins/octo.nix b/config/plugins/octo.nix new file mode 100644 index 0000000..141a858 --- /dev/null +++ b/config/plugins/octo.nix @@ -0,0 +1,3 @@ +{ + plugins.octo.enable = true; +} diff --git a/config/plugins/telescope.nix b/config/plugins/telescope.nix new file mode 100644 index 0000000..b237662 --- /dev/null +++ b/config/plugins/telescope.nix @@ -0,0 +1,40 @@ +{ + lib, + utils, + ... +}: +let + inherit (lib.nixvim) mkRaw; + inherit (utils.keymaps) mkKeymap; +in +{ + plugins.telescope = { + enable = true; + extensions = { + fzf-native.enable = true; + ui-select.enable = true; + }; + }; + keymaps = [ + (mkKeymap "n" "ff" (mkRaw '' + function() + require("telescope.builtin").find_files() + end + '') "Find files") + (mkKeymap "n" "fg" (mkRaw '' + function() + require("telescope.builtin").live_grep() + end + '') "Live grep") + (mkKeymap "n" "fb" (mkRaw '' + function() + require("telescope.builtin").buffers() + end + '') "Find buffers") + (mkKeymap "n" "fs" (mkRaw '' + function() + require("telescope.builtin").treesitter() + end + '') "Find treesitter objects") + ]; +} diff --git a/config/plugins/todo-comments.nix b/config/plugins/todo-comments.nix new file mode 100644 index 0000000..96878bb --- /dev/null +++ b/config/plugins/todo-comments.nix @@ -0,0 +1,5 @@ +{ + plugins.todo-comments = { + enable = true; + }; +} diff --git a/config/plugins/toggleterm.nix b/config/plugins/toggleterm.nix new file mode 100644 index 0000000..57575b6 --- /dev/null +++ b/config/plugins/toggleterm.nix @@ -0,0 +1,24 @@ +{ + lib, + utils, + ... +}: +let + inherit (lib.nixvim) mkRaw; + inherit (utils.keymaps) mkKeymap; +in +{ + plugins.toggleterm = { + enable = true; + settings = { + open_mapping = "[[]]"; + }; + }; + keymaps = [ + (mkKeymap "n" "" (mkRaw '' + function() + require("toggleterm").toggle() + end + '') "Toggle terminal") + ]; +} diff --git a/config/plugins/treesitter.nix b/config/plugins/treesitter.nix new file mode 100644 index 0000000..841f848 --- /dev/null +++ b/config/plugins/treesitter.nix @@ -0,0 +1,27 @@ +{ + plugins = { + treesitter = { + enable = true; + settings = { + highlight.enable = true; + indent.enable = true; + folding = true; + incremental_selection.enable = true; + auto_install = false; + }; + }; + treesitter-context = { + enable = true; + settings = { + max_lines = 4; + min_window_height = 40; + }; + }; + treesitter-textobjects = { + enable = true; + }; + ts-context-commentstring = { + enable = true; + }; + }; +} diff --git a/config/plugins/which-key.nix b/config/plugins/which-key.nix new file mode 100644 index 0000000..6d02309 --- /dev/null +++ b/config/plugins/which-key.nix @@ -0,0 +1,3 @@ +{ + plugins.which-key.enable = true; +} diff --git a/flake.lock b/flake.lock index 4dee3fb..8fa32e6 100644 --- a/flake.lock +++ b/flake.lock @@ -5,11 +5,11 @@ "nixpkgs-lib": "nixpkgs-lib" }, "locked": { - "lastModified": 1749398372, - "narHash": "sha256-tYBdgS56eXYaWVW3fsnPQ/nFlgWi/Z2Ymhyu21zVM98=", + "lastModified": 1762440070, + "narHash": "sha256-xxdepIcb39UJ94+YydGP221rjnpkDZUlykKuF54PsqI=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "9305fe4e5c2a6fcf5ba6a3ff155720fbe4076569", + "rev": "26d05891e14c88eb4a5d5bee659c0db5afb609d8", "type": "github" }, "original": { @@ -20,14 +20,17 @@ }, "flake-parts_2": { "inputs": { - "nixpkgs-lib": "nixpkgs-lib_2" + "nixpkgs-lib": [ + "nixvim", + "nixpkgs" + ] }, "locked": { - "lastModified": 1749398372, - "narHash": "sha256-tYBdgS56eXYaWVW3fsnPQ/nFlgWi/Z2Ymhyu21zVM98=", + "lastModified": 1762440070, + "narHash": "sha256-xxdepIcb39UJ94+YydGP221rjnpkDZUlykKuF54PsqI=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "9305fe4e5c2a6fcf5ba6a3ff155720fbe4076569", + "rev": "26d05891e14c88eb4a5d5bee659c0db5afb609d8", "type": "github" }, "original": { @@ -54,49 +57,41 @@ "type": "github" } }, - "mnw": { - "locked": { - "lastModified": 1748710831, - "narHash": "sha256-eZu2yH3Y2eA9DD3naKWy/sTxYS5rPK2hO7vj8tvUCSU=", - "owner": "Gerg-L", - "repo": "mnw", - "rev": "cff958a4e050f8d917a6ff3a5624bc4681c6187d", - "type": "github" - }, - "original": { - "owner": "Gerg-L", - "repo": "mnw", - "type": "github" - } - }, - "nil": { + "ixx": { "inputs": { + "flake-utils": [ + "nixvim", + "nuschtosSearch", + "flake-utils" + ], "nixpkgs": [ - "nvf", + "nixvim", + "nuschtosSearch", "nixpkgs" ] }, "locked": { - "lastModified": 1750047244, - "narHash": "sha256-vluLARrk4485npdyHOj8XKr0yk6H22pNf+KVRNL+i/Y=", - "owner": "oxalica", - "repo": "nil", - "rev": "870a4b1b5f12004832206703ac15aa85c42c247b", + "lastModified": 1754860581, + "narHash": "sha256-EM0IE63OHxXCOpDHXaTyHIOk2cNvMCGPqLt/IdtVxgk=", + "owner": "NuschtOS", + "repo": "ixx", + "rev": "babfe85a876162c4acc9ab6fb4483df88fa1f281", "type": "github" }, "original": { - "owner": "oxalica", - "repo": "nil", + "owner": "NuschtOS", + "ref": "v0.1.1", + "repo": "ixx", "type": "github" } }, "nixpkgs": { "locked": { - "lastModified": 1750506804, - "narHash": "sha256-VLFNc4egNjovYVxDGyBYTrvVCgDYgENp5bVi9fPTDYc=", + "lastModified": 1762363567, + "narHash": "sha256-YRqMDEtSMbitIMj+JLpheSz0pwEr0Rmy5mC7myl17xs=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "4206c4cb56751df534751b058295ea61357bbbaa", + "rev": "ae814fd3904b621d8ab97418f1d0f2eb0d3716f4", "type": "github" }, "original": { @@ -108,11 +103,11 @@ }, "nixpkgs-lib": { "locked": { - "lastModified": 1748740939, - "narHash": "sha256-rQaysilft1aVMwF14xIdGS3sj1yHlI6oKQNBRTF40cc=", + "lastModified": 1761765539, + "narHash": "sha256-b0yj6kfvO8ApcSE+QmA6mUfu8IYG6/uU28OFn4PaC8M=", "owner": "nix-community", "repo": "nixpkgs.lib", - "rev": "656a64127e9d791a334452c6b6606d17539476e2", + "rev": "719359f4562934ae99f5443f20aa06c2ffff91fc", "type": "github" }, "original": { @@ -121,57 +116,49 @@ "type": "github" } }, - "nixpkgs-lib_2": { + "nixvim": { + "inputs": { + "flake-parts": "flake-parts_2", + "nixpkgs": [ + "nixpkgs" + ], + "nuschtosSearch": "nuschtosSearch", + "systems": "systems_2" + }, "locked": { - "lastModified": 1748740939, - "narHash": "sha256-rQaysilft1aVMwF14xIdGS3sj1yHlI6oKQNBRTF40cc=", + "lastModified": 1762604519, + "narHash": "sha256-TUYm7Ihtl8472GPTbj/cQWUJeDNQ4a9kuz93wkEIE8M=", "owner": "nix-community", - "repo": "nixpkgs.lib", - "rev": "656a64127e9d791a334452c6b6606d17539476e2", + "repo": "nixvim", + "rev": "d4b798a469248aa2b0bba4508bd8f97837566885", "type": "github" }, "original": { "owner": "nix-community", - "repo": "nixpkgs.lib", + "repo": "nixvim", "type": "github" } }, - "nixpkgs_2": { - "locked": { - "lastModified": 1750215678, - "narHash": "sha256-Rc/ytpamXRf6z8UA2SGa4aaWxUXRbX2MAWIu2C8M+ok=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "5395fb3ab3f97b9b7abca147249fa2e8ed27b192", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nvf": { + "nuschtosSearch": { "inputs": { - "flake-parts": "flake-parts_2", "flake-utils": "flake-utils", - "mnw": "mnw", - "nil": "nil", - "nixpkgs": "nixpkgs_2", - "systems": "systems_2" + "ixx": "ixx", + "nixpkgs": [ + "nixvim", + "nixpkgs" + ] }, "locked": { - "lastModified": 1750441488, - "narHash": "sha256-JuFBp2xM4JD/XGb69dTSDOdGbUD0fVHlgY9X9GHGTFE=", - "owner": "notashelf", - "repo": "nvf", - "rev": "18c17b7b8dbf6e0f10e3eb5f1fa5341a9175a3b1", + "lastModified": 1761730856, + "narHash": "sha256-t1i5p/vSWwueZSC0Z2BImxx3BjoUDNKyC2mk24krcMY=", + "owner": "NuschtOS", + "repo": "search", + "rev": "e29de6db0cb3182e9aee75a3b1fd1919d995d85b", "type": "github" }, "original": { - "owner": "notashelf", - "repo": "nvf", + "owner": "NuschtOS", + "repo": "search", "type": "github" } }, @@ -179,7 +166,8 @@ "inputs": { "flake-parts": "flake-parts", "nixpkgs": "nixpkgs", - "nvf": "nvf" + "nixvim": "nixvim", + "systems": "systems_3" } }, "systems": { @@ -211,6 +199,21 @@ "repo": "default", "type": "github" } + }, + "systems_3": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } } }, "root": "root", diff --git a/flake.nix b/flake.nix index ea57366..332b0b2 100644 --- a/flake.nix +++ b/flake.nix @@ -1,34 +1,30 @@ { + description = '' + determinvim - a deterministic nvim configuration + ''; + inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; flake-parts.url = "github:hercules-ci/flake-parts"; - nvf.url = "github:notashelf/nvf"; + systems.url = "github:nix-systems/default"; + + nixvim = { + url = "github:/nix-community/nixvim"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; outputs = - { flake-parts - , nvf - , ... - } @ inputs: + { flake-parts, ... }@inputs: flake-parts.lib.mkFlake { inherit inputs; } { - systems = [ - "x86_64-linux" - "x86_64-darwin" - "aarch64-linux" - "aarch64-darwin" - ]; + systems = import inputs.systems; + + _module.args = { inherit inputs; }; - perSystem = { pkgs, ... }: - let - configModule = import ./nvf-config.nix; - nvimConfig = nvf.lib.neovimConfiguration { - modules = [ configModule ]; - inherit pkgs; - }; - in - { - packages.default = nvimConfig.neovim; - formatter = pkgs.alejandra; - }; + imports = [ + ./parts/package.nix + ./parts/devshell.nix + ./parts/checks.nix + ]; }; } diff --git a/general.nix b/general.nix deleted file mode 100644 index 0a654b0..0000000 --- a/general.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ - config.vim = { - viAlias = true; - vimAlias = true; - enableLuaLoader = true; - }; -} diff --git a/justfile b/justfile new file mode 100644 index 0000000..e69de29 diff --git a/languages/assembly.nix b/languages/assembly.nix deleted file mode 100644 index ed7a7bc..0000000 --- a/languages/assembly.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - config.vim.languages.assembly.enable = true; -} diff --git a/languages/bash.nix b/languages/bash.nix deleted file mode 100644 index c87f3ed..0000000 --- a/languages/bash.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - config.vim.languages.bash.enable = true; -} diff --git a/languages/clang.nix b/languages/clang.nix deleted file mode 100644 index 4156291..0000000 --- a/languages/clang.nix +++ /dev/null @@ -1,4 +0,0 @@ -{ - config.vim.languages.clang.enable = true; -} - diff --git a/languages/csharp.nix b/languages/csharp.nix deleted file mode 100644 index f910142..0000000 --- a/languages/csharp.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ lib -, pkgs -, ... -}: -let - badSystems = [ "aarch64-darwin" ]; -in -{ - config.vim.languages.csharp.enable = lib.mkIf (!(builtins.elem pkgs.stdenv.system badSystems)) true; -} diff --git a/languages/css.nix b/languages/css.nix deleted file mode 100644 index 38ede39..0000000 --- a/languages/css.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - config.vim.languages.css.enable = true; -} diff --git a/languages/default.nix b/languages/default.nix deleted file mode 100644 index a2fff08..0000000 --- a/languages/default.nix +++ /dev/null @@ -1,54 +0,0 @@ -{ pkgs, ... }: { - imports = [ - ./assembly.nix - ./bash.nix - ./clang.nix - ./csharp.nix - ./css.nix - ./go.nix - ./html.nix - ./lua.nix - ./markdown.nix - ./nix.nix - ./php.nix - ./python.nix - ./rust.nix - ./sql.nix - ./svelte.nix - ./tailwind.nix - ./typescript.nix - ./typst.nix - ]; - - config.vim = { - lsp = { - enable = true; - formatOnSave = true; - lightbulb.enable = true; - trouble.enable = true; - otter-nvim.enable = true; - }; - - debugger.nvim-dap = { - enable = true; - ui = { - enable = true; - autoStart = true; - }; - }; - - treesitter = { - enable = true; - addDefaultGrammars = true; - autotagHtml = true; - grammars = pkgs.vimPlugins.nvim-treesitter.allGrammars; - }; - - languages = { - enableFormat = true; - enableTreesitter = true; - enableExtraDiagnostics = true; - enableDAP = true; - }; - }; -} diff --git a/languages/go.nix b/languages/go.nix deleted file mode 100644 index 3a9596b..0000000 --- a/languages/go.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - config.vim.languages.go.enable = true; -} diff --git a/languages/html.nix b/languages/html.nix deleted file mode 100644 index ae7be4c..0000000 --- a/languages/html.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - config.vim.languages.html.enable = true; -} diff --git a/languages/lua.nix b/languages/lua.nix deleted file mode 100644 index c81e14d..0000000 --- a/languages/lua.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - config.vim.languages.lua.enable = true; -} diff --git a/languages/markdown.nix b/languages/markdown.nix deleted file mode 100644 index bcbbdb8..0000000 --- a/languages/markdown.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - config.vim.languages.markdown.enable = true; -} diff --git a/languages/nix.nix b/languages/nix.nix deleted file mode 100644 index a43f3bd..0000000 --- a/languages/nix.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ pkgs, ... }: { - config.vim.languages.nix = { - enable = true; - format = { - type = "alejandra"; - package = pkgs.alejandra; - }; - }; -} diff --git a/languages/php.nix b/languages/php.nix deleted file mode 100644 index 1583486..0000000 --- a/languages/php.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - config.vim.languages.php.enable = true; -} diff --git a/languages/python.nix b/languages/python.nix deleted file mode 100644 index 4fafc08..0000000 --- a/languages/python.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - config.vim.languages.python.enable = true; -} diff --git a/languages/rust.nix b/languages/rust.nix deleted file mode 100644 index 490a730..0000000 --- a/languages/rust.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - config.vim.languages.rust.enable = true; -} diff --git a/languages/sql.nix b/languages/sql.nix deleted file mode 100644 index 3db8e85..0000000 --- a/languages/sql.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - config.vim.languages.sql.enable = true; -} diff --git a/languages/svelte.nix b/languages/svelte.nix deleted file mode 100644 index e539a42..0000000 --- a/languages/svelte.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - config.vim.languages.svelte.enable = true; -} diff --git a/languages/tailwind.nix b/languages/tailwind.nix deleted file mode 100644 index b8c5795..0000000 --- a/languages/tailwind.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - config.vim.languages.tailwind.enable = true; -} diff --git a/languages/typescript.nix b/languages/typescript.nix deleted file mode 100644 index c5e9db2..0000000 --- a/languages/typescript.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - config.vim.languages.ts.enable = true; -} diff --git a/languages/typst.nix b/languages/typst.nix deleted file mode 100644 index a895f4a..0000000 --- a/languages/typst.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - config.vim.languages.typst.enable = true; -} diff --git a/nvf-config.nix b/nvf-config.nix deleted file mode 100644 index aa88d5b..0000000 --- a/nvf-config.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ - imports = [ - ./binds - ./languages - ./plugins - ./themes - ./clipboard.nix - ./general.nix - ./globals.nix - ./options.nix - ]; -} diff --git a/parts/checks.nix b/parts/checks.nix new file mode 100644 index 0000000..0a2dc7f --- /dev/null +++ b/parts/checks.nix @@ -0,0 +1,16 @@ +{ + inputs, + self, + ... +}: +{ + perSystem = + { + pkgs, + system, + ... + }: + { + checks = import (self + "/checks") { inherit inputs system; }; + }; +} diff --git a/parts/devshell.nix b/parts/devshell.nix new file mode 100644 index 0000000..d79ea1a --- /dev/null +++ b/parts/devshell.nix @@ -0,0 +1,13 @@ +_: { + perSystem = + { pkgs, ... }: + { + devShells.default = pkgs.mkShell { + packages = builtins.attrValues { + inherit (pkgs) just nil nixfmt; + }; + }; + + formatter = pkgs.nixfmt-tree; + }; +} diff --git a/parts/package.nix b/parts/package.nix new file mode 100644 index 0000000..ece3c5d --- /dev/null +++ b/parts/package.nix @@ -0,0 +1,36 @@ +{ + inputs, + self, + ... +}: +{ + perSystem = + { + pkgs, + system, + ... + }: + let + nixvimModule = { + module = import (self + "/config"); + inherit pkgs; + extraSpecialArgs = { + utils = import (self + "/utils"); + }; + }; + nvim = inputs.nixvim.legacyPackages.${system}.makeNixvimWithModule nixvimModule; + config = inputs.nixvim.lib.evalNixvim { + modules = [ (import (self + "/config")) ]; + extraSpecialArgs = { + utils = import (self + "/utils"); + }; + inherit system; + }; + in + { + packages = { + default = nvim; + initLua = pkgs.writeText "init.lua" config.config.content; + }; + }; +} diff --git a/plugins/default.nix b/plugins/default.nix deleted file mode 100644 index 16f9ca3..0000000 --- a/plugins/default.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ lib, ... }: { - imports = [ - ./mini.nix - ]; - - config.vim = { - telescope.enable = true; - autocomplete.blink-cmp.enable = true; - formatter.conform-nvim.enable = true; - snippets.luasnip.enable = true; - notes.todo-comments.enable = true; - - fzf-lua = { - enable = true; - profile = "default-title"; - }; - }; -} diff --git a/plugins/mini.nix b/plugins/mini.nix deleted file mode 100644 index a765a56..0000000 --- a/plugins/mini.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ lib, ... }: { - config.vim.mini = { - ai.enable = true; - align.enable = true; - bracketed.enable = true; - comment.enable = true; - diff.enable = true; - files.enable = true; - git.enable = true; - icons.enable = true; - indentscope = { - enable = true; - setupOpts.draw.animation = lib.generators.mkLuaInline ''require("mini.indentscope").gen_animation.none()''; - }; - jump2d = { - enable = true; - setupOpts = { - labels = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; - mappings.start_jumping = "j"; - view.dim = true; - silent = true; - }; - }; - move.enable = true; - notify.enable = true; - operators.enable = true; - pairs.enable = true; - splitjoin.enable = true; - starter.enable = true; - statusline.enable = true; - surround.enable = true; - tabline.enable = true; - trailspace.enable = true; - }; -} diff --git a/themes/catppuccin/frappe.nix b/themes/catppuccin/frappe.nix deleted file mode 100644 index 27b9647..0000000 --- a/themes/catppuccin/frappe.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ - config.vim = { - theme = { - enable = true; - name = "catppuccin"; - style = "frappe"; - }; - - visuals = { - nvim-web-devicons.enable = true; - rainbow-delimiters.enable = true; - }; - }; -} diff --git a/themes/default.nix b/themes/default.nix deleted file mode 100644 index 71da39e..0000000 --- a/themes/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ - imports = [ - ./catppuccin/frappe.nix - ]; -} diff --git a/utils/default.nix b/utils/default.nix new file mode 100644 index 0000000..09e48b5 --- /dev/null +++ b/utils/default.nix @@ -0,0 +1 @@ +import ./keymaps.nix diff --git a/utils/keymaps.nix b/utils/keymaps.nix new file mode 100644 index 0000000..53b992c --- /dev/null +++ b/utils/keymaps.nix @@ -0,0 +1,31 @@ +{ + keymaps = rec { + mkKeymap = mode: key: action: desc: { + inherit mode key action; + options = { + inherit desc; + silent = true; + noremap = true; + remap = true; + }; + }; + + mkKeymap' = + mode: key: action: + mkKeymap mode key action null; + + wKeyObj = + list: + let + optionalAttrs = cond: attrs: if cond then attrs else { }; + in + { + __unkeyed = builtins.elemAt list 0; + icon = builtins.elemAt list 1; + group = builtins.elemAt list 2; + } + // optionalAttrs (builtins.length list > 3) { + hidden = builtins.elemAt list 3; + }; + }; +}