mirror of
https://github.com/NotAShelf/nvf.git
synced 2025-02-12 20:13:19 +00:00
Compare commits
27 commits
a0cf62130a
...
0a87f3150e
Author | SHA1 | Date | |
---|---|---|---|
0a87f3150e | |||
bbe04a64ff | |||
c8dbcde66a | |||
b3b8d3a86c | |||
970af589ad | |||
2c54ecd306 | |||
c5f16b96c0 | |||
c734a81e40 | |||
c09ae380f0 | |||
4e949b3df8 | |||
![]() |
6852120514 | ||
5250f8e771 | |||
6f1293053c | |||
8448a6ca0f | |||
![]() |
b0fb0a93cb | ||
dab409685d | |||
![]() |
752915e639 | ||
356f92053c | |||
b704a28a12 | |||
5749739e4b | |||
85347de09d | |||
b67759273b | |||
66005a51c3 | |||
c19c925f1d | |||
07f50e84eb | |||
5a5f49f85f | |||
0650aa31ac |
20 changed files with 569 additions and 223 deletions
172
.github/workflows/docs-preview.yml
vendored
Normal file
172
.github/workflows/docs-preview.yml
vendored
Normal file
|
@ -0,0 +1,172 @@
|
|||
name: Build and Preview Manual
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
pull_request:
|
||||
types: [opened, synchronize, reopened, closed]
|
||||
paths:
|
||||
- ".github/workflows/docs-preview.yml"
|
||||
- "modules/**"
|
||||
- "docs/**"
|
||||
|
||||
# Defining permissions here passes it to all workflows.
|
||||
# https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/controlling-permissions-for-github_token
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
issues: write
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build-preview:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Install Nix
|
||||
uses: DeterminateSystems/nix-installer-action@main
|
||||
- uses: DeterminateSystems/magic-nix-cache-action@main
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set default git branch (to reduce log spam)
|
||||
run: git config --global init.defaultBranch main
|
||||
|
||||
- name: Build documentation packages
|
||||
run: nix build .#docs-html --print-build-logs
|
||||
|
||||
- name: Deploy to GitHub Pages preview
|
||||
run: |
|
||||
PR_NUMBER=${{ github.event.pull_request.number }}
|
||||
BRANCH_NAME="gh-pages"
|
||||
PREVIEW_DIR="docs-preview-${PR_NUMBER}"
|
||||
|
||||
# Clone the gh-pages branch and move to the preview subdirectory
|
||||
git clone --single-branch --branch $BRANCH_NAME https://github.com/${{ github.repository }} gh-pages
|
||||
cd gh-pages
|
||||
|
||||
mkdir -p $PREVIEW_DIR
|
||||
|
||||
# Copy the build files to the preview subdirectory
|
||||
cp -rvf ../result/share/doc/nvf/* ./$PREVIEW_DIR
|
||||
|
||||
# Configure git to use the GitHub Actions token for authentication
|
||||
git config --global user.name "GitHub Actions"
|
||||
git config --global user.email "actions@github.com"
|
||||
|
||||
# Set the GitHub token for authentication
|
||||
git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}
|
||||
|
||||
# Add and commit the changes
|
||||
git add --all
|
||||
git commit -m "Deploy PR #${PR_NUMBER} preview" || echo "No changes to commit"
|
||||
git push --force origin $BRANCH_NAME
|
||||
|
||||
comment-url:
|
||||
needs: build-preview
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Prepare Environment
|
||||
id: prelude
|
||||
run: |
|
||||
PR_NUMBER=${{ github.event.pull_request.number }}
|
||||
URL="https://${{ github.repository_owner }}.github.io/nvf/docs-preview-${PR_NUMBER}/"
|
||||
|
||||
# Propagate non-interpolatable environment vars
|
||||
echo "URL=$URL" >> "$GITHUB_OUTPUT"
|
||||
echo "REV=$GITHUB_SHA" >> "$GITHUB_OUTPUT"
|
||||
echo "ACTOR=$GITHUB_ACTOR" >> "$GITHUB_OUTPUT"
|
||||
echo "REF=$GITHUB_HEAD_REF" >> "$GITHUB_OUTPUT"
|
||||
echo "RUNS=$GITHUB_RUN_NUMBER" >> "$GITHUB_OUTPUT"
|
||||
|
||||
echo "Live Preview URL: $URL"
|
||||
echo "Rev: $GITHUB_SHA"
|
||||
echo "Actor: $GITHUB_ACTOR"
|
||||
echo "Ref: "$GITHUB_HEAD_REF"
|
||||
echo "Reruns: "$GITHUB_RUN_NUMBER"
|
||||
|
||||
echo "### :rocket: Live Preview Deployed " >> "$GITHUB_STEP_SUMMARY"
|
||||
echo "Preview can be found at ${URL}" >> "$GITHUB_STEP_SUMMARY"
|
||||
|
||||
- name: Find Comment
|
||||
uses: peter-evans/find-comment@v3
|
||||
id: fc
|
||||
with:
|
||||
comment-author: "github-actions[bot]"
|
||||
issue-number: ${{ github.event.pull_request.number }}
|
||||
body-includes: "Live preview deployed"
|
||||
|
||||
- name: Post live preview comment
|
||||
uses: peter-evans/create-or-update-comment@v4
|
||||
env:
|
||||
COMMENT_ID: ${{ steps.fc.outputs.comment-id }}
|
||||
URL: ${{ steps.prelude.outputs.URL }}
|
||||
GITHUB_SHA: ${{ steps.prelude.outputs.REV }}
|
||||
ACTOR: ${{ steps.prelude.outputs.ACTOR }}
|
||||
REF: ${{ steps.prelude.outputs.REF }}
|
||||
RUNS: ${{ steps.prelude.outputs.RUNS }}
|
||||
with:
|
||||
comment-id: ${{ env.COMMENT_ID }}
|
||||
issue-number: ${{ github.event.pull_request.number }} # issue number also applies to pull requests
|
||||
edit-mode: replace # replace previous body
|
||||
body: |
|
||||
### :rocket: Live preview deployed from ${{ env.GITHUB_SHA }}
|
||||
|
||||
View it [here](${{ env.URL }}):
|
||||
|
||||
<details>
|
||||
<summary><strong>Debug Information</strong></summary>
|
||||
<p>Triggered by: ${{ env.ACTOR }}</p>
|
||||
<p><code>HEAD</code> at: ${{ env.REF }}</p>
|
||||
<p>Reruns: ${{ env.RUNS }}</p>
|
||||
</details>
|
||||
|
||||
cleanup:
|
||||
if: ${{ github.event.pull_request.merged == true || github.event.pull_request.state == 'closed' }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Delete preview for closed/merged PR
|
||||
run: |
|
||||
PR_NUMBER=${{ github.event.pull_request.number }}
|
||||
BRANCH_NAME="gh-pages"
|
||||
PREVIEW_DIR="docs-preview-${PR_NUMBER}"
|
||||
|
||||
# Clone the gh-pages branch
|
||||
git clone --single-branch --branch $BRANCH_NAME https://github.com/${{ github.repository }} gh-pages
|
||||
cd gh-pages
|
||||
|
||||
# Check if the preview directory exists, and delete it if it does
|
||||
if [ -d "$PREVIEW_DIR" ]; then
|
||||
echo "Deleting preview directory $PREVIEW_DIR"
|
||||
rm -rf $PREVIEW_DIR
|
||||
else
|
||||
echo "Preview directory $PREVIEW_DIR does not exist. Skipping deletion."
|
||||
fi
|
||||
|
||||
# Configure git to use the GitHub Actions token for authentication
|
||||
git config --global user.name "GitHub Actions"
|
||||
git config --global user.email "actions@github.com"
|
||||
|
||||
# Set the GitHub token for authentication
|
||||
git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}
|
||||
|
||||
# Add and commit the changes (only if there's something to delete)
|
||||
git add .
|
||||
git diff --quiet || git commit -m "Remove preview for PR #${PR_NUMBER}"
|
||||
git push origin $BRANCH_NAME
|
||||
|
||||
cleanup-comment:
|
||||
needs: cleanup
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Post cleanup verification
|
||||
uses: peter-evans/create-or-update-comment@v4
|
||||
with:
|
||||
issue-number: ${{ github.event.pull_request.number }}
|
||||
body: |
|
||||
✅ Preview has been deleted successfully!
|
|
@ -28,11 +28,11 @@ configuration formats.
|
|||
|
||||
### `vim.maps` rewrite {#sec-vim-maps-rewrite}
|
||||
|
||||
Instead of specifying map modes using submodules (eg.: `vim.maps.normal`), a new
|
||||
`vim.keymaps` submodule with support for a `mode` option has been introduced. It
|
||||
can be either a string, or a list of strings, where a string represents the
|
||||
short-name of the map mode(s), that the mapping should be set for. See
|
||||
`:help map-modes` for more information.
|
||||
Instead of specifying map modes using submodules (e.g.: `vim.maps.normal`), a
|
||||
new `vim.keymaps` submodule with support for a `mode` option has been
|
||||
introduced. It can be either a string, or a list of strings, where a string
|
||||
represents the short-name of the map mode(s), that the mapping should be set
|
||||
for. See `:help map-modes` for more information.
|
||||
|
||||
For example:
|
||||
|
||||
|
|
|
@ -16,6 +16,16 @@
|
|||
- Implement [](#opt-vim.git.gitsigns.setupOpts) for user-specified setup table
|
||||
in gitsigns configuration.
|
||||
|
||||
- [](#opt-vim.options.mouse) no longer compares values to an enum of available
|
||||
mouse modes. This means you can provide any string without the module system
|
||||
warning you that it is invalid. Do keep in mind that this value is no longer
|
||||
checked, so you will be responsible for ensuring its validity.
|
||||
|
||||
- Deprecate `vim.enableEditorconfig` in favor of
|
||||
[](#opt-vim.globals.editorconfig).
|
||||
|
||||
- Deprecate rnix-lsp as it has been abandoned and archived upstream.
|
||||
|
||||
[amadaluzia](https://github.com/amadaluzia):
|
||||
|
||||
[haskell-tools.nvim]: https://github.com/MrcJkb/haskell-tools.nvim
|
||||
|
@ -36,3 +46,8 @@
|
|||
|
||||
- Add [aerial.nvim]
|
||||
- Add [nvim-ufo]
|
||||
|
||||
[LilleAila](https://github.com/LilleAila):
|
||||
|
||||
- Remove `vim.notes.obsidian.setupOpts.dir`, which was set by default. Fixes
|
||||
issue with setting the workspace directory.
|
||||
|
|
90
flake.lock
generated
90
flake.lock
generated
|
@ -51,27 +51,6 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"naersk": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"rnix-lsp",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1655042882,
|
||||
"narHash": "sha256-9BX8Fuez5YJlN7cdPO63InoyBy7dm3VlJkkmTt6fS1A=",
|
||||
"owner": "nix-community",
|
||||
"repo": "naersk",
|
||||
"rev": "cddffb5aa211f50c4b8750adbec0bbbdfb26bb9f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "naersk",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nil": {
|
||||
"inputs": {
|
||||
"flake-utils": [
|
||||
|
@ -124,22 +103,6 @@
|
|||
"url": "https://github.com/NixOS/nixpkgs/archive/5487e69da40cbd611ab2cadee0b4637225f7cfae.tar.gz"
|
||||
}
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1656753965,
|
||||
"narHash": "sha256-BCrB3l0qpJokOnIVc3g2lHiGhnjUi0MoXiw6t1o8H1E=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "0ea7a8f1b939d74e5df8af9a8f7342097cdf69eb",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nmd": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
|
@ -588,6 +551,22 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"plugin-feline-nvim": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1731467236,
|
||||
"narHash": "sha256-/TqgHJo2ej/V5bubTdTlf5S+EZmSpU5F2Mdi0SHCD30=",
|
||||
"owner": "freddiehaddad",
|
||||
"repo": "feline.nvim",
|
||||
"rev": "9f1313f61a75ec5ebe805fedd46bdc130c420963",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "freddiehaddad",
|
||||
"repo": "feline.nvim",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"plugin-fidget-nvim": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
|
@ -2110,26 +2089,6 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"rnix-lsp": {
|
||||
"inputs": {
|
||||
"naersk": "naersk",
|
||||
"nixpkgs": "nixpkgs_2",
|
||||
"utils": "utils"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1669555118,
|
||||
"narHash": "sha256-F0s0m62S5bHNVWNHLZD6SeHiLrsDx98VQbRjDyIu+qQ=",
|
||||
"owner": "nix-community",
|
||||
"repo": "rnix-lsp",
|
||||
"rev": "95d40673fe43642e2e1144341e86d0036abd95d9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "rnix-lsp",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"flake-parts": "flake-parts",
|
||||
|
@ -2165,6 +2124,7 @@
|
|||
"plugin-dressing-nvim": "plugin-dressing-nvim",
|
||||
"plugin-elixir-tools": "plugin-elixir-tools",
|
||||
"plugin-fastaction-nvim": "plugin-fastaction-nvim",
|
||||
"plugin-feline-nvim": "plugin-feline-nvim",
|
||||
"plugin-fidget-nvim": "plugin-fidget-nvim",
|
||||
"plugin-flutter-tools": "plugin-flutter-tools",
|
||||
"plugin-friendly-snippets": "plugin-friendly-snippets",
|
||||
|
@ -2260,7 +2220,6 @@
|
|||
"plugin-vim-repeat": "plugin-vim-repeat",
|
||||
"plugin-vim-startify": "plugin-vim-startify",
|
||||
"plugin-which-key": "plugin-which-key",
|
||||
"rnix-lsp": "rnix-lsp",
|
||||
"systems": "systems_2"
|
||||
}
|
||||
},
|
||||
|
@ -2314,21 +2273,6 @@
|
|||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"utils": {
|
||||
"locked": {
|
||||
"lastModified": 1656928814,
|
||||
"narHash": "sha256-RIFfgBuKz6Hp89yRr7+NR5tzIAbn52h8vT6vXkYjZoM=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "7e2a3b3dfd9af950a856d66b0a7d01e3c18aa249",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
|
|
|
@ -89,7 +89,6 @@
|
|||
};
|
||||
|
||||
# Language servers (use master instead of nixpkgs)
|
||||
rnix-lsp.url = "github:nix-community/rnix-lsp";
|
||||
nil = {
|
||||
url = "github:oxalica/nil";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
|
@ -288,6 +287,12 @@
|
|||
flake = false;
|
||||
};
|
||||
|
||||
plugin-feline-nvim = {
|
||||
url = "github:freddiehaddad/feline.nvim";
|
||||
flake = false;
|
||||
};
|
||||
|
||||
# Completion
|
||||
plugin-nvim-cmp = {
|
||||
url = "github:hrsh7th/nvim-cmp";
|
||||
flake = false;
|
||||
|
|
|
@ -8,8 +8,10 @@
|
|||
inherit system;
|
||||
overlays = [
|
||||
inputs.self.overlays.default
|
||||
|
||||
(_: _: {
|
||||
rnix-lsp = inputs'.rnix-lsp.defaultPackage;
|
||||
# Build nil from source to get most recent
|
||||
# features as they are added.
|
||||
nil = inputs'.nil.packages.default;
|
||||
})
|
||||
];
|
||||
|
|
|
@ -6,7 +6,12 @@
|
|||
inherit (lib.nvim.attrsets) mapListToAttrs;
|
||||
in {
|
||||
# Converts a boolean to a yes/no string. This is used in lots of
|
||||
# configuration formats.
|
||||
# configuration formats, and is not covered by `toLuaObject`
|
||||
toVimBool = bool:
|
||||
if bool
|
||||
then "yes"
|
||||
else "no";
|
||||
|
||||
diagnosticsToLua = {
|
||||
lang,
|
||||
config,
|
||||
|
@ -30,8 +35,8 @@ in {
|
|||
|
||||
mkEnable = desc:
|
||||
mkOption {
|
||||
description = "Turn on ${desc} for enabled languages by default";
|
||||
type = bool;
|
||||
default = false;
|
||||
type = bool;
|
||||
description = "Turn on ${desc} for enabled languages by default";
|
||||
};
|
||||
}
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
splitRight = "splitright";
|
||||
autoIndent = "autoindent";
|
||||
wordWrap = "wrap";
|
||||
showSignColumn = "signcolumn";
|
||||
};
|
||||
in {
|
||||
imports = concatLists [
|
||||
|
@ -35,23 +36,28 @@ in {
|
|||
vim.autopairs.enable has been removed in favor of per-plugin modules.
|
||||
You can enable nvim-autopairs with vim.autopairs.nvim-autopairs.enable instead.
|
||||
'')
|
||||
|
||||
(mkRemovedOptionModule ["vim" "autopairs" "type"] ''
|
||||
vim.autopairs.type has been removed in favor of per-plugin modules.
|
||||
You can enable nvim-autopairs with vim.autopairs.nvim-autopairs.enable instead.
|
||||
'')
|
||||
|
||||
(mkRemovedOptionModule ["vim" "autocomplete" "enable"] ''
|
||||
vim.autocomplete.enable has been removed in favor of per-plugin modules.
|
||||
You can enable nvim-cmp with vim.autocomplete.nvim-cmp.enable instead.
|
||||
'')
|
||||
|
||||
(mkRemovedOptionModule ["vim" "autocomplete" "type"] ''
|
||||
vim.autocomplete.type has been removed in favor of per-plugin modules.
|
||||
You can enable nvim-cmp with vim.autocomplete.nvim-cmp.enable instead.
|
||||
'')
|
||||
|
||||
(mkRemovedOptionModule ["vim" "autocomplete" "sources"] ''
|
||||
vim.autocomplete.sources has been removed in favor of per-plugin modules.
|
||||
You can add nvim-cmp sources with vim.autocomplete.nvim-cmp.sources
|
||||
instead.
|
||||
'')
|
||||
|
||||
(mkRemovedOptionModule ["vim" "snippets" "vsnip" "enable"] ''
|
||||
vim.snippets.vsnip.enable has been removed in favor of the more modern luasnip.
|
||||
'')
|
||||
|
@ -84,9 +90,12 @@ in {
|
|||
`tabstop` and `shiftwidth` manually in `vim.options` or per-filetype in a
|
||||
`ftplugin` directory added to your runtime path.
|
||||
'')
|
||||
|
||||
# 2024-12-02
|
||||
(mkRenamedOptionModule ["vim" "enableEditorconfig"] ["vim" "globals" "editorconfig"])
|
||||
]
|
||||
|
||||
# 2024-12-1
|
||||
# 2024-12-01
|
||||
# Migrated via batchRenameOptions. Further batch renames must be below this line.
|
||||
renamedVimOpts
|
||||
];
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
}: let
|
||||
inherit (lib.options) mkOption mkEnableOption literalMD;
|
||||
inherit (lib.strings) optionalString;
|
||||
inherit (lib.attrsets) optionalAttrs;
|
||||
inherit (lib.types) enum bool str int either;
|
||||
inherit (lib.generators) mkLuaInline;
|
||||
inherit (lib.nvim.dag) entryAfter;
|
||||
|
@ -58,24 +59,12 @@ in {
|
|||
description = "Prevent swapfile and backupfile from being created";
|
||||
};
|
||||
|
||||
showSignColumn = mkOption {
|
||||
type = bool;
|
||||
default = true;
|
||||
description = "Show the sign column";
|
||||
};
|
||||
|
||||
bell = mkOption {
|
||||
type = enum ["none" "visual" "on"];
|
||||
default = "none";
|
||||
description = "Set how bells are handled. Options: on, visual or none";
|
||||
};
|
||||
|
||||
enableEditorconfig = mkOption {
|
||||
type = bool;
|
||||
default = true;
|
||||
description = "Follow editorconfig rules in current directory";
|
||||
};
|
||||
|
||||
searchCase = mkOption {
|
||||
type = enum ["ignore" "smart" "sensitive"];
|
||||
default = "sensitive";
|
||||
|
@ -106,63 +95,55 @@ in {
|
|||
# Set options that were previously interpolated in 'luaConfigRC.basic' as vim.options (vim.o)
|
||||
# and 'vim.globals' (vim.g). Future options, if possible, should be added here instead of the
|
||||
# luaConfigRC section below.
|
||||
options = pushDownDefault {
|
||||
encoding = "utf-8";
|
||||
hidden = true;
|
||||
expandtab = true;
|
||||
};
|
||||
options = pushDownDefault (lib.mergeAttrsList [
|
||||
{
|
||||
# Options that are always set, with a lower priority
|
||||
encoding = "utf-8";
|
||||
hidden = true;
|
||||
expandtab = true;
|
||||
|
||||
globals = pushDownDefault {
|
||||
editorconfig = cfg.enableEditorconfig;
|
||||
};
|
||||
# Junkfile Behaviour
|
||||
swapfile = !cfg.preventJunkFiles;
|
||||
backup = !cfg.preventJunkFiles;
|
||||
writebackup = !cfg.preventJunkFiles;
|
||||
}
|
||||
|
||||
# Options that are more difficult to set through 'vim.options'. Fear not, though
|
||||
# as the Lua DAG is still as powerful as it could be.
|
||||
(optionalAttrs cfg.undoFile.enable {
|
||||
undofile = true;
|
||||
undodir = cfg.undoFile.path;
|
||||
})
|
||||
|
||||
(optionalAttrs (cfg.bell == "none") {
|
||||
errorbells = false;
|
||||
visualbell = false;
|
||||
})
|
||||
|
||||
(optionalAttrs (cfg.bell == "on") {
|
||||
visualbell = false;
|
||||
})
|
||||
|
||||
(optionalAttrs (cfg.bell == "visual") {
|
||||
visualbell = false;
|
||||
})
|
||||
|
||||
(optionalAttrs (cfg.lineNumberMode == "relative") {
|
||||
relativenumber = true;
|
||||
})
|
||||
|
||||
(optionalAttrs (cfg.lineNumberMode == "number") {
|
||||
number = true;
|
||||
})
|
||||
|
||||
(optionalAttrs (cfg.lineNumberMode == "relNumber") {
|
||||
number = true;
|
||||
relativenumber = true;
|
||||
})
|
||||
]);
|
||||
|
||||
# Options that are more difficult to set through 'vim.options'. Namely, appending values
|
||||
# to pre-set Neovim options. Fear not, though as the Lua DAG is still as powerful as it
|
||||
# could be.
|
||||
luaConfigRC.basic = entryAfter ["globalsScript"] ''
|
||||
-- Settings that are set for everything
|
||||
vim.opt.shortmess:append("c")
|
||||
|
||||
${optionalString cfg.undoFile.enable ''
|
||||
vim.o.undofile = true
|
||||
vim.o.undodir = ${toLuaObject cfg.undoFile.path}
|
||||
''}
|
||||
|
||||
${optionalString cfg.showSignColumn ''
|
||||
vim.o.signcolumn = "yes"
|
||||
''}
|
||||
|
||||
${optionalString cfg.preventJunkFiles ''
|
||||
vim.o.swapfile = false
|
||||
vim.o.backup = false
|
||||
vim.o.writebackup = false
|
||||
''}
|
||||
|
||||
${optionalString (cfg.bell == "none") ''
|
||||
vim.o.errorbells = false
|
||||
vim.o.visualbell = false
|
||||
''}
|
||||
|
||||
${optionalString (cfg.bell == "on") ''
|
||||
vim.o.visualbell = false
|
||||
''}
|
||||
|
||||
${optionalString (cfg.bell == "visual") ''
|
||||
vim.o.errorbells = false
|
||||
''}
|
||||
|
||||
${optionalString (cfg.lineNumberMode == "relative") ''
|
||||
vim.o.relativenumber = true
|
||||
''}
|
||||
|
||||
${optionalString (cfg.lineNumberMode == "number") ''
|
||||
vim.o.number = true
|
||||
''}
|
||||
|
||||
${optionalString (cfg.lineNumberMode == "relNumber") ''
|
||||
vim.o.number = true
|
||||
vim.o.relativenumber = true
|
||||
''}
|
||||
|
||||
${optionalString cfg.useSystemClipboard ''
|
||||
vim.opt.clipboard:append("unnamedplus")
|
||||
''}
|
||||
|
|
|
@ -124,7 +124,6 @@ in {
|
|||
nvim --headless --clean \
|
||||
--cmd "mkspell $out/spell/$name.add.spl $spellfile" -Es -n
|
||||
done
|
||||
|
||||
'';
|
||||
in
|
||||
mkIf (cfg.extraSpellWords != {}) [
|
||||
|
@ -133,10 +132,12 @@ in {
|
|||
compileJoinedSpellfiles.outPath
|
||||
];
|
||||
|
||||
luaConfigRC.spellcheck = entryAfter ["basic"] ''
|
||||
vim.opt.spell = true
|
||||
vim.opt.spelllang = ${listToLuaTable cfg.languages}
|
||||
options = {
|
||||
spell = true;
|
||||
spelllang = cfg.languages;
|
||||
};
|
||||
|
||||
luaConfigRC.spellcheck = entryAfter ["basic"] ''
|
||||
-- Disable spellchecking for certain filetypes
|
||||
-- as configured by `vim.spellcheck.ignoredFiletypes`
|
||||
vim.api.nvim_create_augroup("nvf_autocmds", {clear = false})
|
||||
|
|
|
@ -26,22 +26,6 @@
|
|||
then expToLua package
|
||||
else ''{"${package}/bin/${defaultCmd}"}'';
|
||||
servers = {
|
||||
rnix = {
|
||||
package = pkgs.rnix-lsp;
|
||||
internalFormatter = cfg.format.type == "nixpkgs-fmt";
|
||||
lspConfig = ''
|
||||
lspconfig.rnix.setup{
|
||||
capabilities = capabilities,
|
||||
${
|
||||
if (cfg.format.enable && cfg.format.type == "nixpkgs-fmt")
|
||||
then useFormat
|
||||
else noFormat
|
||||
},
|
||||
cmd = ${packageToCmd cfg.lsp.package "rnix-lsp"},
|
||||
}
|
||||
'';
|
||||
};
|
||||
|
||||
nil = {
|
||||
package = pkgs.nil;
|
||||
internalFormatter = true;
|
||||
|
@ -165,6 +149,7 @@ in {
|
|||
type = enum (attrNames formats);
|
||||
default = defaultFormat;
|
||||
};
|
||||
|
||||
package = mkOption {
|
||||
description = "Nix formatter package";
|
||||
type = package;
|
||||
|
@ -188,7 +173,18 @@ in {
|
|||
assertions = [
|
||||
{
|
||||
assertion = cfg.format.type != "nixpkgs-fmt";
|
||||
message = "nixpkgs-fmt has been archived upstream. Please use one of the following instead: ${concatStringsSep ", " (attrNames formats)}";
|
||||
message = ''
|
||||
nixpkgs-fmt has been archived upstream. Please use one of the following available formatters:
|
||||
${concatStringsSep ", " (attrNames formats)}
|
||||
'';
|
||||
}
|
||||
|
||||
{
|
||||
assertion = cfg.lsp.server != "rnix";
|
||||
message = ''
|
||||
rnix-lsp has been archived upstream. Please use one of the following available language servers:
|
||||
${concatStringsSep ", " (attrNames servers)}
|
||||
'';
|
||||
}
|
||||
];
|
||||
vim.pluginRC.nix = ''
|
||||
|
|
|
@ -24,12 +24,6 @@ in {
|
|||
enable = mkEnableOption "complementary neovim plugins for Obsidian editor";
|
||||
|
||||
setupOpts = mkPluginSetupOption "Obsidian.nvim" {
|
||||
dir = mkOption {
|
||||
type = str;
|
||||
default = "~/my-vault";
|
||||
description = "Obsidian vault directory";
|
||||
};
|
||||
|
||||
daily_notes = {
|
||||
folder = mkOption {
|
||||
type = nullOr str;
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
{
|
||||
imports = [
|
||||
./feline
|
||||
./lualine
|
||||
];
|
||||
}
|
||||
|
|
21
modules/plugins/statusline/feline/config.nix
Normal file
21
modules/plugins/statusline/feline/config.nix
Normal file
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
inherit (lib.modules) mkIf;
|
||||
|
||||
cfg = config.vim.statusline.feline-nvim;
|
||||
in {
|
||||
config = mkIf cfg.enable {
|
||||
vim = {
|
||||
lazy.plugins.feline-nvim = {
|
||||
event = "UIEnter";
|
||||
|
||||
package = "feline-nvim";
|
||||
setupModule = "feline";
|
||||
inherit (cfg) setupOpts;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
6
modules/plugins/statusline/feline/default.nix
Normal file
6
modules/plugins/statusline/feline/default.nix
Normal file
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
imports = [
|
||||
./config.nix
|
||||
./feline.nix
|
||||
];
|
||||
}
|
144
modules/plugins/statusline/feline/feline.nix
Normal file
144
modules/plugins/statusline/feline/feline.nix
Normal file
|
@ -0,0 +1,144 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
inherit (builtins) elem;
|
||||
inherit (lib.options) mkOption mkEnableOption literalExpression;
|
||||
inherit (lib.types) str listOf attrs attrsOf anything either submodule;
|
||||
inherit (lib.lists) optional;
|
||||
inherit (lib.generators) mkLuaInline;
|
||||
inherit (lib.nvim.types) mkPluginSetupOption;
|
||||
|
||||
conditionalRenderers = {
|
||||
options = {
|
||||
filetypes = mkOption {
|
||||
type = listOf str;
|
||||
default = [
|
||||
"^NvimTree$"
|
||||
"^neo-tree$"
|
||||
"^startify$"
|
||||
"^fugitive$"
|
||||
"^fugitiveblame$"
|
||||
"^qf$"
|
||||
"^help$"
|
||||
];
|
||||
|
||||
description = "Filetypes in which to force render inactive statusline";
|
||||
};
|
||||
|
||||
buftypes = mkOption {
|
||||
type = listOf str;
|
||||
default = ["^terminal$"];
|
||||
description = "Buffer types in which to force render inactive statusline";
|
||||
};
|
||||
|
||||
bufnames = mkOption {
|
||||
type = listOf str;
|
||||
default = [];
|
||||
description = "Buffer names in which to force render inactive statusline";
|
||||
};
|
||||
};
|
||||
};
|
||||
in {
|
||||
options.vim.statusline.feline-nvim = {
|
||||
enable = mkEnableOption "minimal, stylish and customizable statusline, statuscolumn, and winbar [feline.nvim]";
|
||||
setupOpts = mkPluginSetupOption "feline-nvim" {
|
||||
custom_providers = mkOption {
|
||||
type = attrsOf anything;
|
||||
default = {};
|
||||
example = literalExpression ''
|
||||
{
|
||||
window_number = mkLuaInline ''''
|
||||
function()
|
||||
return tostring(vim.api.nvim_win_get_number(0))
|
||||
end
|
||||
'''';
|
||||
}
|
||||
'';
|
||||
|
||||
description = "User-defined feline provider functions";
|
||||
};
|
||||
|
||||
theme = mkOption {
|
||||
type = either str (attrsOf str);
|
||||
default = {};
|
||||
example = {
|
||||
fg = "#fff";
|
||||
bg = "#111";
|
||||
};
|
||||
description = ''
|
||||
Either a string containing the color theme name or an attribute set of
|
||||
strings, containing the colors.
|
||||
|
||||
The theme’s `fg` and `bg` values also represent the default foreground
|
||||
and background colors, respectively.
|
||||
'';
|
||||
};
|
||||
|
||||
separators = mkOption {
|
||||
type = listOf str;
|
||||
default = [];
|
||||
example = ["slant_right_2"];
|
||||
description = ''
|
||||
A table containing custom Feline separator prests.
|
||||
|
||||
:::{.warning}
|
||||
This option is not type-checked! Before setting this option, please take
|
||||
a look at {command}`:help feline-separator-preset` for a list of
|
||||
available separator presets.
|
||||
:::
|
||||
'';
|
||||
};
|
||||
|
||||
force_inactive = mkOption {
|
||||
default = {};
|
||||
type = attrsOf (submodule conditionalRenderers);
|
||||
description = ''
|
||||
A table that determines which buffers should always have the inactive
|
||||
statusline, even when they are active.
|
||||
'';
|
||||
};
|
||||
|
||||
disable = mkOption {
|
||||
default = {};
|
||||
type = attrsOf (submodule conditionalRenderers);
|
||||
description = ''
|
||||
A table that determines which buffers should always have the statusline
|
||||
disabled, even when they are active.
|
||||
'';
|
||||
};
|
||||
|
||||
vi_mode_colors = mkOption {
|
||||
type = attrsOf str;
|
||||
default = {};
|
||||
description = ''
|
||||
Attribute set containing colors associated with specific Vi modes.
|
||||
|
||||
It can later be used to get the color associated with the current Vim
|
||||
mode using `require('feline.providers.vi_mode').get_mode_color()`.
|
||||
|
||||
See `:help feline-vi-mode` for more details on vi mode.
|
||||
'';
|
||||
};
|
||||
|
||||
# TODO:
|
||||
# - Check for the number of elements in the list maybe? Can Feline have infinite components per section?
|
||||
# - type-check contents of `attrsOf anything`? Is there a downside for not doing that?
|
||||
# - add examples for each one of those components. The option types are necessary, but confusing.
|
||||
components = {
|
||||
active = mkOption {
|
||||
type = listOf (listOf (attrsOf anything));
|
||||
default = [];
|
||||
description = "List of components to display for buffers feline will render as 'active'";
|
||||
};
|
||||
|
||||
inactive = mkOption {
|
||||
type = listOf (listOf (attrsOf anything));
|
||||
default = [];
|
||||
description = "List of components to display for buffers feline will render as 'inactive'";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
|
@ -15,43 +15,47 @@
|
|||
mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions;
|
||||
in {
|
||||
config = mkIf cfg.enable {
|
||||
vim.startPlugins = ["gesture-nvim"];
|
||||
vim = {
|
||||
startPlugins = ["gesture-nvim"];
|
||||
|
||||
vim.maps.normal = mkMerge [
|
||||
(mkSetLuaBinding mappings.draw "require('gesture').draw")
|
||||
(mkSetLuaBinding mappings.finish "require('gesture').finish")
|
||||
(mkIf (mappings.draw.value == "<RightDrag>") {
|
||||
"<RightMouse>" = {action = "<Nop>";};
|
||||
})
|
||||
];
|
||||
maps.normal = mkMerge [
|
||||
(mkSetLuaBinding mappings.draw "require('gesture').draw")
|
||||
(mkSetLuaBinding mappings.finish "require('gesture').finish")
|
||||
(mkIf (mappings.draw.value == "<RightDrag>") {
|
||||
"<RightMouse>" = {action = "<Nop>";};
|
||||
})
|
||||
];
|
||||
|
||||
vim.pluginRC.gesture-nvim = entryAnywhere ''
|
||||
vim.opt.mouse = "a"
|
||||
options.mouse = "a";
|
||||
pluginRC.gesture-nvim = entryAnywhere ''
|
||||
local gesture = require("gesture")
|
||||
gesture.register({
|
||||
name = "scroll to bottom",
|
||||
inputs = { gesture.up(), gesture.down() },
|
||||
action = "normal! G",
|
||||
})
|
||||
|
||||
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 `<C-o>` keycode
|
||||
action = [[lua vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes("<C-o>", true, false, true), "n", true)]],
|
||||
})
|
||||
'';
|
||||
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 `<C-o>` keycode
|
||||
action = [[lua vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes("<C-o>", true, false, true), "n", true)]],
|
||||
})
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
_: {
|
||||
{
|
||||
imports = [
|
||||
./gesture-nvim.nix
|
||||
./config.nix
|
||||
|
|
|
@ -22,6 +22,12 @@ in {
|
|||
package = "telescope";
|
||||
setupModule = "telescope";
|
||||
inherit (cfg) setupOpts;
|
||||
|
||||
# HACK: workaround until https://github.com/NotAShelf/nvf/issues/535 gets resolved
|
||||
before = ''
|
||||
vim.g.loaded_telescope = nil
|
||||
'';
|
||||
|
||||
after = ''
|
||||
local telescope = require("telescope")
|
||||
${optionalString config.vim.ui.noice.enable "telescope.load_extension('noice')"}
|
||||
|
|
|
@ -3,9 +3,11 @@
|
|||
lib,
|
||||
...
|
||||
}: let
|
||||
inherit (lib.options) mkOption mkEnableOption literalMD literalExpression;
|
||||
inherit (lib.options) mkOption literalMD literalExpression;
|
||||
inherit (lib.strings) optionalString;
|
||||
inherit (lib.types) str bool int enum attrsOf lines listOf either path submodule anything;
|
||||
inherit (lib.trivial) isBool;
|
||||
inherit (lib.nvim.languages) toVimBool;
|
||||
inherit (lib.nvim.types) dagOf;
|
||||
inherit (lib.nvim.lua) listToLuaTable;
|
||||
|
||||
|
@ -17,7 +19,7 @@ in {
|
|||
default = false;
|
||||
example = true;
|
||||
description = ''
|
||||
[{option}`official documentation`]: https://neovim.io/doc/user/lua.html#vim.loader.enable()
|
||||
[official documentation]: https://neovim.io/doc/user/lua.html#vim.loader.enable()
|
||||
|
||||
the experimental Lua module loader to speed up the start up process
|
||||
|
||||
|
@ -29,7 +31,7 @@ in {
|
|||
|
||||
::: {.note}
|
||||
The Lua module loader is *disabled* by default. Before setting this option, please
|
||||
take a look at the [{option}`official documentation`]. This option may be enabled by
|
||||
take a look at the {option}`[official documentation]`. This option may be enabled by
|
||||
default in the future.
|
||||
:::
|
||||
'';
|
||||
|
@ -81,7 +83,7 @@ in {
|
|||
./nvim/my-lua-file.lua
|
||||
|
||||
# source type path - pure and reproducible
|
||||
(builtins.source {
|
||||
(builtins.path {
|
||||
path = ./nvim/my-lua-file.lua;
|
||||
name = "my-lua-file";
|
||||
})
|
||||
|
@ -121,6 +123,21 @@ in {
|
|||
default = ",";
|
||||
description = "The key used for `<localleader>` mappings";
|
||||
};
|
||||
|
||||
editorconfig = mkOption {
|
||||
type = bool;
|
||||
default = true;
|
||||
description = ''
|
||||
Whether to enable EditorConfig integration in Neovim.
|
||||
|
||||
This defaults to true as it is enabled by default in stock
|
||||
Neovim, setting this option to false disables EditorConfig
|
||||
integration entirely.
|
||||
|
||||
See [Neovim documentation](https://neovim.io/doc/user/editorconfig.html)
|
||||
for more details on configuring EditorConfig behaviour.
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -150,16 +167,25 @@ in {
|
|||
};
|
||||
|
||||
mouse = mkOption {
|
||||
type = enum ["a" "n" "v" "i" "c"];
|
||||
default = "a";
|
||||
type = str;
|
||||
default = "nvi";
|
||||
example = "a";
|
||||
description = ''
|
||||
Set modes for mouse support.
|
||||
|
||||
* a - all
|
||||
* n - normal
|
||||
* v - visual
|
||||
* i - insert
|
||||
* c - command
|
||||
* c - command-line
|
||||
* h - all modes when editing a help file
|
||||
* a - all modes
|
||||
* r - for hit-enter and more-prompt prompt
|
||||
|
||||
[neovim documentation]: https://neovim.io/doc/user/options.html#'mouse'"
|
||||
|
||||
This option takes a string to ensure proper conversion to the corresponding Lua type.
|
||||
As such, we do not check the value passed to this option. Please ensure that any value
|
||||
that is set here is a valid value as per [neovim documentation].
|
||||
'';
|
||||
};
|
||||
|
||||
|
@ -211,6 +237,16 @@ in {
|
|||
description = "Enable word wrapping.";
|
||||
};
|
||||
|
||||
signcolumn = mkOption {
|
||||
type = either str bool;
|
||||
default = true;
|
||||
apply = x:
|
||||
if isBool x
|
||||
then toVimBool x # convert to a yes/no str
|
||||
else x;
|
||||
description = "Show the sign column";
|
||||
};
|
||||
|
||||
tabstop = mkOption {
|
||||
type = int;
|
||||
default = 8; # Neovim default
|
||||
|
@ -263,7 +299,11 @@ in {
|
|||
vim.opt.runtimepath:append(${listToLuaTable cfg.additionalRuntimePaths})
|
||||
''}
|
||||
|
||||
${optionalString cfg.enableLuaLoader "vim.loader.enable()"}
|
||||
${optionalString cfg.enableLuaLoader ''
|
||||
if vim.loader then
|
||||
vim.loader.enable()
|
||||
end
|
||||
''}
|
||||
'';
|
||||
|
||||
defaultText = literalMD ''
|
||||
|
@ -273,7 +313,7 @@ in {
|
|||
if [](#opt-vim.enableLuaLoader) is set to true.
|
||||
'';
|
||||
|
||||
example = literalExpression ''"$${builtins.readFile ./my-lua-config-pre.lua}"'';
|
||||
example = literalExpression ''''${builtins.readFile ./my-lua-config-pre.lua}'';
|
||||
|
||||
description = ''
|
||||
Verbatim lua code that will be inserted **before**
|
||||
|
|
Loading…
Add table
Reference in a new issue