feat: setup neovim & update firefox to nightly

This commit is contained in:
DACHXY 2025-01-22 19:11:05 +08:00
parent 10bb022f75
commit f442980938
24 changed files with 581 additions and 1256 deletions

209
flake.lock generated
View file

@ -54,18 +54,57 @@
"type": "github" "type": "github"
} }
}, },
"flake-compat": { "cachix": {
"flake": false,
"locked": { "locked": {
"lastModified": 1696426674, "lastModified": 1635350005,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", "narHash": "sha256-tAMJnUwfaDEB2aa31jGcu7R7bzGELM9noc91L2PbVjg=",
"owner": "edolstra", "owner": "nixos",
"repo": "flake-compat", "repo": "nixpkgs",
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", "rev": "1c1f5649bb9c1b0d98637c8c365228f57126f361",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "edolstra", "owner": "nixos",
"ref": "nixos-20.09",
"repo": "nixpkgs",
"type": "github"
}
},
"firefox": {
"inputs": {
"cachix": "cachix",
"flake-compat": "flake-compat",
"lib-aggregate": "lib-aggregate",
"mozilla": "mozilla",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1737508273,
"narHash": "sha256-MkwmVx0kUCEcHBMFlzIjzAJEI87smC47RV8Ro9OG4eE=",
"owner": "nix-community",
"repo": "flake-firefox-nightly",
"rev": "2335be5f02e8b3a39d116876d3ac4ccc9de308d6",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "flake-firefox-nightly",
"type": "github"
}
},
"flake-compat": {
"locked": {
"lastModified": 1717312683,
"narHash": "sha256-FrlieJH50AuvagamEvWMIE6D2OAnERuDboFDYAED/dE=",
"owner": "nix-community",
"repo": "flake-compat",
"rev": "38fd3954cf65ce6faf3d0d45cd26059e059f07ea",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "flake-compat", "repo": "flake-compat",
"type": "github" "type": "github"
} }
@ -86,9 +125,25 @@
"type": "github" "type": "github"
} }
}, },
"flake-compat_3": {
"flake": false,
"locked": {
"lastModified": 1696426674,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-parts": { "flake-parts": {
"inputs": { "inputs": {
"nixpkgs-lib": "nixpkgs-lib" "nixpkgs-lib": "nixpkgs-lib_2"
}, },
"locked": { "locked": {
"lastModified": 1733312601, "lastModified": 1733312601,
@ -108,6 +163,24 @@
"inputs": { "inputs": {
"systems": "systems_2" "systems": "systems_2"
}, },
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_2": {
"inputs": {
"systems": "systems_3"
},
"locked": { "locked": {
"lastModified": 1705309234, "lastModified": 1705309234,
"narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=", "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
@ -122,9 +195,9 @@
"type": "github" "type": "github"
} }
}, },
"flake-utils_2": { "flake-utils_3": {
"inputs": { "inputs": {
"systems": "systems_4" "systems": "systems_5"
}, },
"locked": { "locked": {
"lastModified": 1731533236, "lastModified": 1731533236,
@ -140,9 +213,9 @@
"type": "github" "type": "github"
} }
}, },
"flake-utils_3": { "flake-utils_4": {
"inputs": { "inputs": {
"systems": "systems_6" "systems": "systems_7"
}, },
"locked": { "locked": {
"lastModified": 1726560853, "lastModified": 1726560853,
@ -160,7 +233,7 @@
}, },
"ghostty": { "ghostty": {
"inputs": { "inputs": {
"flake-compat": "flake-compat", "flake-compat": "flake-compat_2",
"nixpkgs-stable": "nixpkgs-stable", "nixpkgs-stable": "nixpkgs-stable",
"nixpkgs-unstable": "nixpkgs-unstable", "nixpkgs-unstable": "nixpkgs-unstable",
"zig": "zig" "zig": "zig"
@ -311,7 +384,7 @@
"hyprwayland-scanner": "hyprwayland-scanner", "hyprwayland-scanner": "hyprwayland-scanner",
"nixpkgs": "nixpkgs", "nixpkgs": "nixpkgs",
"pre-commit-hooks": "pre-commit-hooks", "pre-commit-hooks": "pre-commit-hooks",
"systems": "systems_3", "systems": "systems_4",
"xdph": "xdph" "xdph": "xdph"
}, },
"locked": { "locked": {
@ -493,6 +566,25 @@
"type": "github" "type": "github"
} }
}, },
"lib-aggregate": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1737288694,
"narHash": "sha256-e9MsdkHidgepQpF0InyRSpeD6YujQcaB0uUzeXVvW+I=",
"owner": "nix-community",
"repo": "lib-aggregate",
"rev": "e07594822638004d96f100febbe947189c42e8a9",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "lib-aggregate",
"type": "github"
}
},
"mnw": { "mnw": {
"locked": { "locked": {
"lastModified": 1735150973, "lastModified": 1735150973,
@ -508,6 +600,22 @@
"type": "github" "type": "github"
} }
}, },
"mozilla": {
"flake": false,
"locked": {
"lastModified": 1736765918,
"narHash": "sha256-oh7GSCjBGHpxaU8/gejT55mlvI3qoKObXgqyn1XR7SA=",
"owner": "mozilla",
"repo": "nixpkgs-mozilla",
"rev": "534ee26d3dbcbb9da3766c556638b9bcc3627871",
"type": "github"
},
"original": {
"owner": "mozilla",
"repo": "nixpkgs-mozilla",
"type": "github"
}
},
"nil": { "nil": {
"inputs": { "inputs": {
"flake-utils": [ "flake-utils": [
@ -571,6 +679,21 @@
} }
}, },
"nixpkgs-lib": { "nixpkgs-lib": {
"locked": {
"lastModified": 1737248590,
"narHash": "sha256-6SWtDeYJS3bS7QyJrGKyd6FpROEN0JCMgakSX8yPbyA=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
"rev": "977f49fd8cf854416f82987696784717acd6e817",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nixpkgs.lib",
"type": "github"
}
},
"nixpkgs-lib_2": {
"locked": { "locked": {
"lastModified": 1733096140, "lastModified": 1733096140,
"narHash": "sha256-1qRH7uAUsyQI7R1Uwl4T+XvdNv778H0Nb5njNrqvylY=", "narHash": "sha256-1qRH7uAUsyQI7R1Uwl4T+XvdNv778H0Nb5njNrqvylY=",
@ -681,7 +804,7 @@
"nvf": { "nvf": {
"inputs": { "inputs": {
"flake-parts": "flake-parts", "flake-parts": "flake-parts",
"flake-utils": "flake-utils_2", "flake-utils": "flake-utils_3",
"mnw": "mnw", "mnw": "mnw",
"nil": "nil", "nil": "nil",
"nixpkgs": [ "nixpkgs": [
@ -810,7 +933,7 @@
"plugin-vim-repeat": "plugin-vim-repeat", "plugin-vim-repeat": "plugin-vim-repeat",
"plugin-vim-startify": "plugin-vim-startify", "plugin-vim-startify": "plugin-vim-startify",
"plugin-which-key": "plugin-which-key", "plugin-which-key": "plugin-which-key",
"systems": "systems_5" "systems": "systems_6"
}, },
"locked": { "locked": {
"lastModified": 1736946667, "lastModified": 1736946667,
@ -2800,7 +2923,7 @@
}, },
"pre-commit-hooks": { "pre-commit-hooks": {
"inputs": { "inputs": {
"flake-compat": "flake-compat_2", "flake-compat": "flake-compat_3",
"gitignore": "gitignore", "gitignore": "gitignore",
"nixpkgs": [ "nixpkgs": [
"hyprland", "hyprland",
@ -2824,6 +2947,7 @@
"root": { "root": {
"inputs": { "inputs": {
"Hyprspace": "Hyprspace", "Hyprspace": "Hyprspace",
"firefox": "firefox",
"ghostty": "ghostty", "ghostty": "ghostty",
"home-manager": "home-manager", "home-manager": "home-manager",
"hyprgrass": "hyprgrass", "hyprgrass": "hyprgrass",
@ -2910,21 +3034,6 @@
} }
}, },
"systems_3": { "systems_3": {
"locked": {
"lastModified": 1689347949,
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
"owner": "nix-systems",
"repo": "default-linux",
"rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default-linux",
"type": "github"
}
},
"systems_4": {
"locked": { "locked": {
"lastModified": 1681028828, "lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
@ -2939,6 +3048,21 @@
"type": "github" "type": "github"
} }
}, },
"systems_4": {
"locked": {
"lastModified": 1689347949,
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
"owner": "nix-systems",
"repo": "default-linux",
"rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default-linux",
"type": "github"
}
},
"systems_5": { "systems_5": {
"locked": { "locked": {
"lastModified": 1681028828, "lastModified": 1681028828,
@ -2969,6 +3093,21 @@
"type": "github" "type": "github"
} }
}, },
"systems_7": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"xdph": { "xdph": {
"inputs": { "inputs": {
"hyprland-protocols": [ "hyprland-protocols": [
@ -3012,7 +3151,7 @@
}, },
"yazi": { "yazi": {
"inputs": { "inputs": {
"flake-utils": "flake-utils_3", "flake-utils": "flake-utils_4",
"nixpkgs": "nixpkgs_4", "nixpkgs": "nixpkgs_4",
"rust-overlay": "rust-overlay_2" "rust-overlay": "rust-overlay_2"
}, },
@ -3035,7 +3174,7 @@
"flake-compat": [ "flake-compat": [
"ghostty" "ghostty"
], ],
"flake-utils": "flake-utils", "flake-utils": "flake-utils_2",
"nixpkgs": [ "nixpkgs": [
"ghostty", "ghostty",
"nixpkgs-stable" "nixpkgs-stable"

View file

@ -6,7 +6,10 @@
url = "github:nixos/nixpkgs/nixos-unstable"; url = "github:nixos/nixpkgs/nixos-unstable";
}; };
pipewire-screenaudio.url = "github:IceDBorn/pipewire-screenaudio"; firefox = {
url = "github:nix-community/flake-firefox-nightly";
inputs.nixpkgs.follows = "nixpkgs";
};
home-manager.url = "github:nix-community/home-manager"; home-manager.url = "github:nix-community/home-manager";
home-manager.inputs.nixpkgs.follows = "nixpkgs"; home-manager.inputs.nixpkgs.follows = "nixpkgs";
@ -40,11 +43,6 @@
url = "github:KZDKM/Hyprspace"; url = "github:KZDKM/Hyprspace";
inputs.hyprland.follows = "hyprland"; inputs.hyprland.follows = "hyprland";
}; };
nvf = {
url = "github:notashelf/nvf";
inputs.nixpkgs.follows = "nixpkgs";
};
}; };
outputs = outputs =
@ -69,11 +67,9 @@
in in
{ {
nixpkgs.pkgs = pkgs; nixpkgs.pkgs = pkgs;
nixosConfigurations = { nixosConfigurations = {
dn-pre7780 = nixpkgs.lib.nixosSystem { dn-pre7780 = nixpkgs.lib.nixosSystem {
modules = [ modules = [
nvf.nixosModules.default
nix-index-database.nixosModules.nix-index nix-index-database.nixosModules.nix-index
./system/dev/dn-pre7780 ./system/dev/dn-pre7780
]; ];

View file

@ -1,85 +0,0 @@
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or vim.loop).fs_stat(lazypath) then
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
if vim.v.shell_error ~= 0 then
vim.api.nvim_echo({
{ "Failed to clone lazy.nvim:\n", "ErrorMsg" },
{ out, "WarningMsg" },
{ "\nPress any key to exit..." },
}, true, {})
vim.fn.getchar()
os.exit(1)
end
end
vim.opt.rtp:prepend(lazypath)
require("lazy").setup({
spec = {
-- add LazyVim and import its plugins
{ "LazyVim/LazyVim", import = "lazyvim.plugins" },
-- import any extras modules here
{ import = "lazyvim.plugins.extras.coding.luasnip" },
{ import = "lazyvim.plugins.extras.coding.mini-surround" },
{ import = "lazyvim.plugins.extras.coding.yanky" },
{ import = "lazyvim.plugins.extras.dap.core" },
{ import = "lazyvim.plugins.extras.dap.nlua" },
{ import = "lazyvim.plugins.extras.editor.dial" },
-- { import = "lazyvim.plugins.extras.formatting.biome" },
{ import = "lazyvim.plugins.extras.formatting.black" },
{ import = "lazyvim.plugins.extras.formatting.prettier" },
{ import = "lazyvim.plugins.extras.lang.cmake" },
{ import = "lazyvim.plugins.extras.lang.docker" },
{ import = "lazyvim.plugins.extras.lang.git" },
{ import = "lazyvim.plugins.extras.lang.json" },
{ import = "lazyvim.plugins.extras.lang.nix" },
{ import = "lazyvim.plugins.extras.lang.markdown" },
{ import = "lazyvim.plugins.extras.lang.nushell" },
{ import = "lazyvim.plugins.extras.lang.omnisharp" },
-- { import = "lazyvim.plugins.extras.lang.vue" },
-- { import = "lazyvim.plugins.extras.lang.typescript" },
-- { import = "lazyvim.plugins.extras.lang.python" },
{ import = "lazyvim.plugins.extras.lang.rust" },
{ import = "lazyvim.plugins.extras.lang.tailwind" },
{ import = "lazyvim.plugins.extras.lang.toml" },
{ import = "lazyvim.plugins.extras.lang.yaml" },
{ import = "lazyvim.plugins.extras.linting.eslint" },
{ import = "lazyvim.plugins.extras.ui.alpha" },
{ import = "lazyvim.plugins.extras.ui.edgy" },
{ import = "lazyvim.plugins.extras.ui.mini-animate" },
{ import = "lazyvim.plugins.extras.ui.mini-indentscope" },
{ import = "lazyvim.plugins.extras.ui.smear-cursor" },
{ import = "lazyvim.plugins.extras.ui.treesitter-context" },
{ import = "lazyvim.plugins.extras.util.dot" },
{ import = "lazyvim.plugins.extras.util.mini-hipatterns" },
{ import = "lazyvim.plugins.extras.editor.telescope" },
-- import/override with your plugins
{ import = "plugins" },
},
defaults = {
-- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup.
-- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default.
lazy = false,
-- It's recommended to leave version=false for now, since a lot the plugin that support versioning,
-- have outdated releases, which may break your Neovim install.
version = false, -- always use the latest git commit
-- version = "*", -- try installing the latest stable version for plugins that support semver
},
install = { colorscheme = { "tokyonight", "habamax" } },
checker = { enabled = true, notify = false }, -- automatically check for plugin updates
performance = {
rtp = {
-- disable some rtp plugins
disabled_plugins = {
"gzip",
-- "matchit",
-- "matchparen",
-- "netrwPlugin",
"tarPlugin",
"tohtml",
"tutor",
"zipPlugin",
},
},
},
})

View file

@ -19,3 +19,6 @@ end
if package.config:sub(1, 1) == "\\" then if package.config:sub(1, 1) == "\\" then
vim.o.shell = GetAvailableWindowsShell() vim.o.shell = GetAvailableWindowsShell()
end end
vim.g.lazyvim_python_ruff = "ruff"
vim.g.lazyvim_eslint_auto_format = true

View file

@ -16,7 +16,7 @@ return {
-- setting the keybinding for LazyGit with 'keys' is recommended in -- setting the keybinding for LazyGit with 'keys' is recommended in
-- order to load the plugin when the command is run for the first time -- order to load the plugin when the command is run for the first time
keys = { keys = {
{ "<leader>gg", "<cmd>LazyGit<cr>", desc = "LazyGit" } { "<leader>gg", "<cmd>LazyGit<cr>", desc = "LazyGit" },
} },
} },
} }

View file

@ -1,6 +1,4 @@
local util = require("lspconfig.util") local util = require("lspconfig.util")
local async = require("lspconfig.async")
local mod_cache = nil
return { return {
{ {
@ -72,55 +70,51 @@ return {
nginx_language_server = { nginx_language_server = {
cmd = { "nginx-language-server" }, cmd = { "nginx-language-server" },
filetypes = { "nginx" }, filetypes = { "nginx" },
rootPatterns = { "nginx.conf", ".git" }, rootPatterns = { "biome.json", "biome.jsonc" },
}, },
-- jsonls = { volar = {
-- cmd = { "vscode-json-languageserver", "--stdio" }, init_options = {
-- filetypes = { "json", "jsonc" }, vue = {
-- }, hybridMode = true,
vuels = {
cmd = { "vue-language-server", "--stdio" },
filetypes = { "vue" },
}, },
ts_ls = {
cmd = { "typescript-language-server", "--stdio" },
filetypes = { "vue", "ts", "tsx" },
}, },
clangd = { settings = {
cmd = { "clangd" }, typescript = {
root_markers = { ".git", ".clangd", "compile_commands.json" }, inlayHints = {
filetypes = { "cpp", "c" }, enumMemberValues = {
capabilities = { enabled = true,
textDocument = { },
semanticTokens = { functionLikeReturnTypes = {
multilineTokenSupport = true, enabled = true,
},
propertyDeclarationTypes = {
enabled = true,
},
parameterTypes = {
enabled = true,
suppressWhenArgumentMatchesName = true,
},
variableTypes = {
enabled = true,
}, },
}, },
}, },
}, },
gopls = { },
cmd = { "gopls" }, vtsls = {},
filetypes = { "go", "gomod", "gowork", "gotmpl" }, stylelint_lsp = {
root_dir = function(fname) filetypes = { "css", "scss", "vue" },
-- see: https://github.com/neovim/nvim-lspconfig/issues/804 root_dir = util.root_pattern("packages.json", ".git"),
if not mod_cache then debounce = 100,
local result = async.run_command({ "go", "env", "GOMODCACHE" }) settings = {
stylelintplus = {
if result and result[1] then autoFixOnFormat = true,
mod_cache = vim.trim(result[1]) autoFixOnSave = true,
else },
mod_cache = vim.fn.system("go env GOMODCACHE") },
end on_attach = function(client)
end client.server_capabilities.document_formatting = false
if mod_cache and fname:sub(1, #mod_cache) == mod_cache then
local clients = util.get_lsp_clients({ name = "gopls" })
if #clients > 0 then
return clients[#clients].config.root_dir
end
end
return util.root_pattern("go.work", "go.mod", ".git")(fname)
end, end,
single_file_support = true,
}, },
}, },
setup = {}, setup = {},

View file

@ -1,11 +0,0 @@
return {
{
"iamcco/markdown-preview.nvim",
cmd = { "MarkdownPreviewToggle", "MarkdownPreview", "MarkdownPreviewStop" },
build = "cd app && yarn install",
init = function()
vim.g.mkdp_filetypes = { "markdown" }
end,
ft = { "markdown" },
},
}

View file

@ -1,5 +0,0 @@
-- Mason is not usable on NixOS
return {
{ "williamboman/mason-lspconfig.nvim", enabled = false },
{ "williamboman/mason.nvim", enabled = false },
}

View file

@ -11,7 +11,7 @@
./virtualization.nix ./virtualization.nix
./hyprland.nix ./hyprland.nix
./swaync.nix ./swaync.nix
./neovim.nix ./nvim.nix
./bin.nix ./bin.nix
./desktops.nix ./desktops.nix
./direnv.nix ./direnv.nix

View file

@ -5,7 +5,7 @@
... ...
}: }:
let let
browser = "firefox"; browser = "firefox-nightly";
noOffloadBrowser = "${browser} -P noOffload -no-remote"; noOffloadBrowser = "${browser} -P noOffload -no-remote";
iconPrefix = ".local/share/icons/hicolor/scalable/apps"; iconPrefix = ".local/share/icons/hicolor/scalable/apps";
newWindow = "${browser} --new-window"; newWindow = "${browser} --new-window";

View file

@ -1,9 +1,10 @@
{ mainMod, nvidia-offload-enabled }: { mainMod, nvidia-offload-enabled }:
let let
prefix = if nvidia-offload-enabled then "offload " else ""; firefox = "firefox-nightly";
browser = "${prefix}firefox"; prefix = if nvidia-offload-enabled then "offload" else "";
noOffloadBrowser = "firefox -P noOffload"; browser = "${prefix} ${firefox}";
terminal = "${prefix}ghostty"; noOffloadBrowser = "${firefox} -P noOffload";
terminal = "${prefix} ghostty";
filemanager = "nemo"; filemanager = "nemo";
scripts = "~/.config/scripts"; scripts = "~/.config/scripts";

View file

@ -1,87 +0,0 @@
{ pkgs, ... }:
let
treesitterWithGrammars = (
pkgs.vimPlugins.nvim-treesitter.withPlugins (p: [
p.bash
p.comment
p.css
p.dockerfile
p.fish
p.gitattributes
p.gitignore
p.go
p.gomod
p.gowork
p.hcl
p.javascript
p.jq
p.json5
p.json
p.lua
p.make
p.markdown
p.nix
p.python
p.rust
p.toml
p.typescript
p.vue
p.yaml
])
);
treesitter-parsers = pkgs.symlinkJoin {
name = "treesitter-parsers";
paths = treesitterWithGrammars.dependencies;
};
configDir = ../config;
in
{
# Other Lsp servers & formatter are defined in system/module/lsp.nix
home.packages = with pkgs; [
gh
vue-language-server
dockerfile-language-server-nodejs
javascript-typescript-langserver
ruff
ruff-lsp
hadolint
nodePackages_latest.typescript
];
programs.neovim = {
enable = true;
vimAlias = true;
coc.enable = false;
withNodeJs = true;
plugins =
[
treesitterWithGrammars
]
++ (with pkgs.vimPlugins; [
markdown-preview-nvim
]);
extraPackages = [ pkgs.imagemagick ];
extraLuaPackages = ps: with ps; [ magick ];
};
home.file."./.config/nvim" = {
source = "${configDir}/nvim";
recursive = true;
};
home.file."./.config/nvim/init.lua".text = ''
require("config.lazy")
vim.opt.runtimepath:append("${treesitter-parsers}")
'';
# Treesitter is configured as a locally developed module in lazy.nvim
# we hardcode a symlink here so that we can refer to it in our lazy config
home.file."./.local/share/nvim/nix/extras/" = {
recursive = true;
source = treesitterWithGrammars;
};
}

327
home/user/nvim.nix Normal file
View file

@ -0,0 +1,327 @@
{
lib,
pkgs,
...
}:
{
home.packages = with pkgs; [
gh
];
programs.neovim = {
enable = true;
withPython3 = true;
extraPython3Packages = (
plugins: with plugins; [
debugpy
]
);
withNodeJs = true;
extraPackages = with pkgs; [
lua-language-server
stylua
ripgrep
vue-language-server
dockerfile-language-server-nodejs
ruff
ruff-lsp
hadolint
cmake-language-server
cmake-lint
cmake-format
markdownlint-cli2
marksman
csharpier
netcoredbg
black
prettierd
biome
eslint
typescript-language-server
typescript
vtsls
stylelint-lsp
stylelint
clang-tools
];
plugins = with pkgs.vimPlugins; [
lazy-nvim
];
extraLuaConfig =
let
plugins = with pkgs.vimPlugins; [
# LazyVim
LazyVim
bufferline-nvim
cmp-buffer
cmp-nvim-lsp
cmp-path
cmp-git
blink-cmp
crates-nvim
conform-nvim
dashboard-nvim
dressing-nvim
flash-nvim
friendly-snippets
gitsigns-nvim
grug-far-nvim
indent-blankline-nvim
lazydev-nvim
lualine-nvim
luvit-meta
neo-tree-nvim
neotest
noice-nvim
nui-nvim
nvim-cmp
nvim-lint
nvim-lspconfig
nvim-snippets
nvim-treesitter
nvim-treesitter-context
nvim-treesitter-textobjects
nvim-ts-autotag
nvim-ts-context-commentstring
nvim-web-devicons
persistence-nvim
plenary-nvim
snacks-nvim
telescope-fzf-native-nvim
telescope-nvim
todo-comments-nvim
tokyonight-nvim
trouble-nvim
ts-comments-nvim
which-key-nvim
vim-markdown-toc
nvim-dap
nvim-dap-ui
nvim-dap-virtual-text
nvim-nio
one-small-step-for-vimkind
none-ls-nvim
markdown-preview-nvim
render-markdown-nvim
image-nvim
# Python
neotest-python
nvim-dap-python
# C#
omnisharp-extended-lsp-nvim
neotest-dotnet
# Cmake
cmake-tools-nvim
SchemaStore-nvim
{
name = "LuaSnip";
path = luasnip;
}
{
name = "catppuccin";
path = catppuccin-nvim;
}
{
name = "mini.ai";
path = mini-nvim;
}
{
name = "mini.bufremove";
path = mini-nvim;
}
{
name = "mini.comment";
path = mini-nvim;
}
{
name = "mini.indentscope";
path = mini-nvim;
}
{
name = "mini.pairs";
path = mini-nvim;
}
{
name = "mini.surround";
path = mini-nvim;
}
];
mkEntryFromDrv =
drv:
if lib.isDerivation drv then
{
name = "${lib.getName drv}";
path = drv;
}
else
drv;
lazyPath = pkgs.linkFarm "lazy-plugins" (builtins.map mkEntryFromDrv plugins);
in
''
require("lazy").setup({
defaults = {
lazy = true,
},
dev = {
-- reuse files from pkgs.vimPlugins.*
path = "${lazyPath}",
patterns = { "" },
-- fallback to download
fallback = true,
},
spec = {
{ "LazyVim/LazyVim", import = "lazyvim.plugins" },
-- The following configs are needed for fixing lazyvim on nix
-- force enable telescope-fzf-native.nvim
{ "nvim-telescope/telescope-fzf-native.nvim", enabled = true },
{ import = "lazyvim.plugins.extras.coding.blink" },
{ import = "lazyvim.plugins.extras.coding.luasnip" },
{ import = "lazyvim.plugins.extras.coding.mini-surround" },
{ import = "lazyvim.plugins.extras.coding.yanky" },
{ import = "lazyvim.plugins.extras.dap.core" },
{ import = "lazyvim.plugins.extras.dap.nlua" },
{ import = "lazyvim.plugins.extras.editor.dial" },
-- { import = "lazyvim.plugins.extras.formatting.biome" },
{ import = "lazyvim.plugins.extras.formatting.black" },
{ import = "lazyvim.plugins.extras.formatting.prettier" },
{ import = "lazyvim.plugins.extras.lang.cmake" },
{ import = "lazyvim.plugins.extras.lang.docker" },
{ import = "lazyvim.plugins.extras.lang.git" },
{ import = "lazyvim.plugins.extras.lang.json" },
{ import = "lazyvim.plugins.extras.lang.nix" },
{ import = "lazyvim.plugins.extras.lang.go" },
{ import = "lazyvim.plugins.extras.lang.zig" },
{ import = "lazyvim.plugins.extras.lang.markdown" },
{ import = "lazyvim.plugins.extras.lang.nushell" },
{ import = "lazyvim.plugins.extras.lang.omnisharp" },
{ import = "lazyvim.plugins.extras.lang.clangd" },
-- { import = "lazyvim.plugins.extras.lang.vue" },
{ import = "lazyvim.plugins.extras.lang.typescript" },
{ import = "lazyvim.plugins.extras.lang.python" },
{ import = "lazyvim.plugins.extras.lang.rust" },
{ import = "lazyvim.plugins.extras.lang.tailwind" },
{ import = "lazyvim.plugins.extras.lang.toml" },
{ import = "lazyvim.plugins.extras.lang.yaml" },
{ import = "lazyvim.plugins.extras.linting.eslint" },
{ import = "lazyvim.plugins.extras.ui.alpha" },
{ import = "lazyvim.plugins.extras.ui.edgy" },
{ import = "lazyvim.plugins.extras.ui.mini-animate" },
{ import = "lazyvim.plugins.extras.ui.mini-indentscope" },
{ import = "lazyvim.plugins.extras.ui.smear-cursor" },
{ import = "lazyvim.plugins.extras.ui.treesitter-context" },
{ import = "lazyvim.plugins.extras.util.dot" },
{ import = "lazyvim.plugins.extras.util.mini-hipatterns" },
{ import = "lazyvim.plugins.extras.editor.telescope" },
-- uncomment to import/override with your plugins
{ import = "plugins" },
-- Vue & Typescript
{
"neovim/nvim-lspconfig",
opts = function(_, opts)
table.insert(opts.servers.vtsls.filetypes, "vue")
LazyVim.extend(opts.servers.vtsls, "settings.vtsls.tsserver.globalPlugins", {
{
name = "@vue/typescript-plugin",
location = "${pkgs.vue-language-server}/lib/node_modules/@vue/language-server",
languages = { "vue" },
configNamespace = "typescript",
enableForWorkspaceTypeScriptVersions = true,
},
})
end
},
-- disable DAP
{ "mfussenegger/nvim-dap-python", enabled = false },
{ "mfussenegger/nvim-dap", enabled = false },
-- disable mason.nvim, use config.extraPackages
{ "williamboman/mason-lspconfig.nvim", enabled = false },
{ "williamboman/mason.nvim", enabled = false },
{ "jay-babu/mason-nvim-dap.nvim", enabled = false },
-- put this line at the end of spec to clear ensure_installed
{ "nvim-treesitter/nvim-treesitter", opts = function(_, opts) opts.ensure_installed = {} end },
},
})
'';
};
xdg.configFile."nvim/parser".source =
let
parsers = pkgs.symlinkJoin {
name = "treesitter-parsers";
paths =
(pkgs.vimPlugins.nvim-treesitter.withPlugins (
plugins: with plugins; [
c
cpp
c_sharp
lua
bash
comment
css
scss
nu
ninja
rst
# rust
rust
ron
# docker
dockerfile
fish
# cmake
cmake
# git
gitattributes
gitignore
git_config
gitcommit
git_rebase
go
gomod
gowork
gosum
hcl
javascript
jq
json5
lua
make
markdown
nix
python
toml
typescript
vue
yaml
zig
]
)).dependencies;
};
in
"${parsers}/parser";
xdg.configFile."nvim/lua".source = ../config/nvim/lua;
}

View file

@ -46,7 +46,6 @@ in
pkgsCross.mingwW64.stdenv.cc pkgsCross.mingwW64.stdenv.cc
pkgsCross.mingwW64.windows.pthreads pkgsCross.mingwW64.windows.pthreads
postman postman
cz-cli
# Work stuff # Work stuff
libreoffice-qt libreoffice-qt

View file

@ -1,4 +1,4 @@
{ pkgs, ... }: { pkgs, inputs, ... }:
let let
userChrome = builtins.readFile ../config/firefox/autohide_toolbox.css; userChrome = builtins.readFile ../config/firefox/autohide_toolbox.css;
profileSettings = { profileSettings = {
@ -35,7 +35,8 @@ in
firefox = { firefox = {
enable = true; enable = true;
package = (pkgs.wrapFirefox (pkgs.firefox-unwrapped.override { pipewireSupport = true; }) { }); # package = (pkgs.wrapFirefox (pkgs.firefox-unwrapped.override { pipewireSupport = true; }) { });
package = inputs.firefox.packages.${pkgs.system}.firefox-nightly-bin;
languagePacks = [ languagePacks = [
"en-US" "en-US"
"zh-TW" "zh-TW"

View file

@ -12,7 +12,6 @@
nixd nixd
marksman marksman
nginx-language-server nginx-language-server
nodePackages_latest.vscode-json-languageserver
bash-language-server bash-language-server
tailwindcss-language-server tailwindcss-language-server
vscode-langservers-extracted vscode-langservers-extracted

View file

@ -1,6 +0,0 @@
let
general = import ./general.nix;
telescope = import ./telescope.nix;
neoTree = import ./neo-tree.nix;
in
general ++ telescope ++ neoTree

View file

@ -1,508 +0,0 @@
let
directions = ["h" "j" "k" "l"];
generateMappings = direction: {
key = "<C-${direction}>";
mode = ["n"];
silent = true;
action = "<C-w>${direction}";
};
naviMappings = map generateMappings directions;
resizeStep = "2";
resizeMappings = [
{
key = "<C-Left>";
mode = ["n"];
silent = true;
action = "<cmd>vertical resize -${resizeStep}<CR>";
}
{
key = "<C-Right>";
mode = ["n"];
silent = true;
action = "<cmd>vertical resize +${resizeStep}<CR>";
}
{
key = "<C-Up>";
mode = ["n"];
silent = true;
action = "<cmd>resize +${resizeStep}<CR>";
}
{
key = "<C-Down>";
mode = ["n"];
silent = true;
action = "<cmd>resize -${resizeStep}<CR>";
}
];
moveLineMappings = [
{
key = "<A-j>";
mode = ["n"];
silent = true;
action = "<cmd>m .+1<CR>==";
}
{
key = "<A-k>";
mode = ["n"];
silent = true;
action = "<cmd>m .-2<CR>==";
}
];
saveMappings = [
# Save File
{
key = "<C-s>";
mode = ["n"];
silent = true;
action = "<cmd>w<CR><ESC>";
noremap = true;
}
{
key = "<C-s>";
mode = ["i"];
silent = true;
action = "<cmd>w<CR><ESC>";
noremap = true;
}
{
key = "<C-s>";
mode = ["x"];
silent = true;
action = "<cmd>w<CR><ESC>";
noremap = true;
}
{
key = "<C-s>";
mode = ["s"];
silent = true;
action = "<cmd>w<CR><ESC>";
noremap = true;
}
];
generalMappings = [
{
key = "<S-h>";
mode = ["n"];
silent = true;
action = "<cmd>bprevious<CR>";
} # Prev Buffer
{
key = "<S-l>";
mode = ["n"];
silent = true;
action = "<cmd>bnext<CR>";
} # Next Buffer
{
key = "[b";
mode = ["n"];
silent = true;
action = "<cmd>bprevious<CR>";
} # Prev Buffer
{
key = "]b";
mode = ["n"];
silent = true;
action = "<cmd>bnext<CR>";
} # Next Buffer
{
key = "<leader>bb";
mode = ["n"];
silent = true;
action = "<cmd>buffer #<CR>";
} # Switch to Other Buffer
{
key = "<leader>`";
mode = ["n"];
silent = true;
action = "<cmd>buffer #<CR>";
} # Switch to Other Buffer
{
key = "<leader>bd";
mode = ["n"];
silent = true;
action = "<cmd>bd<CR>";
} # Delete Buffer
{
key = "<leader>bo";
mode = ["n"];
silent = true;
action = "<cmd>bufdo bd<CR>";
} # Delete Other Buffers
{
key = "<leader>bD";
mode = ["n"];
silent = true;
action = "<cmd>bd | :q<CR>";
} # Delete Buffer and Window
{
key = "<esc>";
mode = ["i" "n" "s"];
silent = true;
action = "<cmd>noh<CR>";
} # Escape and Clear hlsearch
{
key = "<leader>ur";
mode = ["n"];
silent = true;
action = "<Cmd>nohlsearch<Bar>diffupdate<Bar>normal! <C-L><CR>";
desc = "Redraw / Clear hlsearch / Diff Update";
} # Redraw / Clear hlsearch / Diff Update
{
key = "n";
mode = ["n" "x" "o"];
silent = true;
action = "n";
} # Next Search Result
{
key = "N";
mode = ["n" "x" "o"];
silent = true;
action = "N";
} # Prev Search Result
{
key = "<C-s>";
mode = ["i" "x" "n" "s"];
silent = true;
action = "<cmd>w<CR>";
} # Save File
{
key = "<leader>K";
mode = ["n"];
silent = true;
action = "<cmd>norm! K<cr>";
} # Keywordprg
{
key = "gco";
mode = ["n"];
silent = true;
action = "o<esc>Vcx<esc><cmd>normal gcc<cr>fxa<bs>";
} # Add Comment Below
{
key = "gcO";
mode = ["n"];
silent = true;
action = "O<esc>Vcx<esc><cmd>normal gcc<cr>fxa<bs>";
} # Add Comment Above
{
key = "<leader>fn";
mode = ["n"];
silent = true;
action = "<cmd>enew<CR>";
} # New File
{
key = "<leader>xl";
mode = ["n"];
silent = true;
action = "<cmd>lopen<CR>";
} # Location List
{
key = "<leader>xq";
mode = ["n"];
silent = true;
action = "<cmd>copen<CR>";
} # Quickfix List
{
key = "[q";
mode = ["n"];
silent = true;
lua = true;
action = "vim.cmd.cprev";
} # Previous Quickfix
{
key = "]q";
mode = ["n"];
silent = true;
lua = true;
action = "vim.cmd.cnext";
} # Next Quickfix
{
key = "<leader>cf";
mode = ["n" "v"];
silent = true;
action = "<cmd>normal! gq<CR>";
} # Format
{
key = "<leader>cd";
mode = ["n"];
silent = true;
action = "<cmd>LspDiagnostics<CR>";
} # Line Diagnostics
{
key = "]d";
mode = ["n"];
silent = true;
action = "<cmd>lnext<CR>";
} # Next Diagnostic
{
key = "[d";
mode = ["n"];
silent = true;
action = "<cmd>lprevious<CR>";
} # Prev Diagnostic
{
key = "]e";
mode = ["n"];
silent = true;
action = "<cmd>lnext<CR>";
} # Next Error
{
key = "[e";
mode = ["n"];
silent = true;
action = "<cmd>lprevious<CR>";
} # Prev Error
{
key = "]w";
mode = ["n"];
silent = true;
action = "<cmd>lnext<CR>";
} # Next Warning
{
key = "[w";
mode = ["n"];
silent = true;
action = "<cmd>lprevious<CR>";
} # Prev Warning
{
key = "<leader>uf";
mode = ["n"];
silent = true;
action = "<cmd>ToggleAutoFormat<CR>";
} # Toggle Auto Format (Global)
{
key = "<leader>uF";
mode = ["n"];
silent = true;
action = "<cmd>ToggleAutoFormatBuffer<CR>";
} # Toggle Auto Format (Buffer)
{
key = "<leader>us";
mode = ["n"];
silent = true;
action = "<cmd>setlocal spell!<CR>";
} # Toggle Spelling
{
key = "<leader>uw";
mode = ["n"];
silent = true;
action = "<cmd>set wrap!<CR>";
} # Toggle Wrap
{
key = "<leader>uL";
mode = ["n"];
silent = true;
action = "<cmd>set relativenumber!<CR>";
} # Toggle Relative Number
{
key = "<leader>ud";
mode = ["n"];
silent = true;
action = "<cmd>LspDiagnosticsToggle<CR>";
} # Toggle Diagnostics
{
key = "<leader>ul";
mode = ["n"];
silent = true;
action = "<cmd>set number!<CR>";
} # Toggle Line Numbers
{
key = "<leader>uc";
mode = ["n"];
silent = true;
action = "<cmd>set conceallevel=3<CR>";
} # Toggle Conceal Level
{
key = "<leader>uA";
mode = ["n"];
silent = true;
action = "<cmd>set showtabline=2<CR>";
} # Toggle Tabline
{
key = "<leader>uT";
mode = ["n"];
silent = true;
action = "<cmd>TSToggleHighlight<CR>";
} # Toggle Treesitter Highlight
{
key = "<leader>ub";
mode = ["n"];
silent = true;
action = "<cmd>set background=dark<CR>";
} # Toggle Dark Background
{
key = "<leader>uD";
mode = ["n"];
silent = true;
action = "<cmd>ToggleDimming<CR>";
} # Toggle Dimming
{
key = "<leader>ua";
mode = ["n"];
silent = true;
action = "<cmd>ToggleAnimations<CR>";
} # Toggle Animations
{
key = "<leader>ug";
mode = ["n"];
silent = true;
action = "<cmd>IndentGuidesToggle<CR>";
} # Toggle Indent Guides
{
key = "<leader>uS";
mode = ["n"];
silent = true;
action = "<cmd>SmoothScrollToggle<CR>";
} # Toggle Smooth Scroll
{
key = "<leader>dpp";
mode = ["n"];
silent = true;
action = "<cmd>ToggleProfiler<CR>";
} # Toggle Profiler
{
key = "<leader>dph";
mode = ["n"];
silent = true;
action = "<cmd>ToggleProfilerHighlights<CR>";
} # Toggle Profiler Highlights
{
key = "<leader>uh";
mode = ["n"];
silent = true;
action = "<cmd>ToggleInlayHints<CR>";
} # Toggle Inlay Hints
{
key = "<leader>gb";
mode = ["n"];
silent = true;
action = "<cmd>GitBlame<CR>";
} # Git Blame Line
{
key = "<leader>gB";
mode = ["n" "x"];
silent = true;
action = "<cmd>GitBrowseOpen<CR>";
} # Git Browse (open)
{
key = "<leader>gY";
mode = ["n" "x"];
silent = true;
action = "<cmd>GitBrowseCopy<CR>";
} # Git Browse (copy)
{
key = "<leader>qq";
mode = ["n"];
silent = true;
action = "<cmd>qa!<CR>";
} # Quit All
{
key = "<leader>ui";
mode = ["n"];
silent = true;
action = "<cmd>InspectPos<CR>";
} # Inspect Pos
{
key = "<leader>uI";
mode = ["n"];
silent = true;
action = "<cmd>InspectTree<CR>";
} # Inspect Tree
{
key = "<leader>L";
mode = ["n"];
silent = true;
action = "<cmd>LazyVimChangelog<CR>";
} # LazyVim Changelog
{
key = "<c-_>";
mode = ["n" "t"];
silent = true;
action = "<nop>";
} # which_key_ignore
{
key = "<leader>w";
mode = ["n"];
silent = true;
action = "<cmd>windows<CR>";
} # Windows
{
key = "<leader>-";
mode = ["n"];
silent = true;
action = "<cmd>split<CR>";
} # Split Window Below
{
key = "<leader>|";
mode = ["n"];
silent = true;
action = "<cmd>vsplit<CR>";
} # Split Window Right
{
key = "<leader>wd";
mode = ["n"];
silent = true;
action = "<cmd>close<CR>";
} # Delete Window
{
key = "<leader>wm";
mode = ["n"];
silent = true;
action = "<cmd>ZoomModeToggle<CR>";
} # Toggle Zoom Mode
{
key = "<leader>uZ";
mode = ["n"];
silent = true;
action = "<cmd>ZoomModeToggle<CR>";
} # Toggle Zoom Mode
{
key = "<leader>uz";
mode = ["n"];
silent = true;
action = "<cmd>ZenModeToggle<CR>";
} # Toggle Zen Mode
{
key = "<leader><tab>l";
mode = ["n"];
silent = true;
action = "<cmd>tabprevious<CR>";
} # Last Tab
{
key = "<leader><tab>o";
mode = ["n"];
silent = true;
action = "<cmd>tabnew<CR>";
} # Close Other Tabs
{
key = "<leader><tab>f";
mode = ["n"];
silent = true;
action = "<cmd>tabfirst<CR>";
} # First Tab
{
key = "<leader><tab><tab>";
mode = ["n"];
silent = true;
action = "<cmd>tabnew<CR>";
} # New Tab
{
key = "<leader><tab>]";
mode = ["n"];
silent = true;
action = "<cmd>tabnext<CR>";
} # Next Tab
{
key = "<leader><tab>d";
mode = ["n"];
silent = true;
action = "<cmd>tabclose<CR>";
} # Close Tab
{
key = "<leader><tab>[";
mode = ["n"];
silent = true;
action = "<cmd>tabprevious<CR>";
} # Previous Tab
];
in
naviMappings ++ resizeMappings ++ moveLineMappings ++ saveMappings ++ generalMappings

View file

@ -1,9 +0,0 @@
[
{
key = "<leader>e";
mode = ["n" "t"];
silent = true;
action = "<CMD>Neotree toggle<CR>";
desc = "Toggle NeoTree";
}
]

View file

@ -1,121 +0,0 @@
[
{
key = "<leader>z";
mode = ["n"];
desc = "Toggle Zen Mode";
action = "function() Snacks.zen() end";
lua = true;
}
{
key = "<leader>Z";
mode = ["n"];
desc = "Toggle Zoom";
action = "function() Snacks.zen.zoom() end";
lua = true;
}
{
key = "<leader>.";
mode = ["n"];
desc = "Toggle Scratch Buffer";
action = "function() Snacks.scratch() end";
lua = true;
}
{
key = "<leader>S";
mode = ["n"];
desc = "Select Scratch Buffer";
action = "function() Snacks.scratch.select() end";
lua = true;
}
{
key = "<leader>n";
mode = ["n"];
desc = "Notification History";
action = "function() Snacks.notifier.show_history() end";
lua = true;
}
{
key = "<leader>bd";
mode = ["n"];
desc = "Delete Buffer";
action = "function() Snacks.bufdelete() end";
lua = true;
}
{
key = "<leader>cR";
mode = ["n"];
desc = "Rename File";
action = "function() Snacks.rename.rename_file() end";
lua = true;
}
{
key = "<leader>gB";
mode = ["n" "v"];
desc = "Git Browse";
action = "function() Snacks.gitbrowse() end";
lua = true;
}
{
key = "<leader>gb";
mode = ["n"];
desc = "Git Blame Line";
action = "function() Snacks.git.blame_line() end";
lua = true;
}
{
key = "<leader>gf";
mode = ["n"];
desc = "Lazygit Current File History";
action = "function() Snacks.lazygit.log_file() end";
lua = true;
}
{
key = "<leader>gg";
mode = ["n"];
desc = "Lazygit";
action = "function() Snacks.lazygit() end";
lua = true;
}
{
key = "<leader>gl";
mode = ["n"];
desc = "Lazygit Log (cwd)";
action = "function() Snacks.lazygit.log() end";
lua = true;
}
{
key = "<leader>un";
mode = ["n"];
desc = "Dismiss All Notifications";
action = "function() Snacks.notifier.hide() end";
lua = true;
}
{
key = "<c-/>";
mode = ["n"];
desc = "Toggle Terminal";
action = "function() Snacks.terminal() end";
lua = true;
}
{
key = "<c-_>";
mode = ["n"];
desc = "which_key_ignore";
action = "function() Snacks.terminal() end";
lua = true;
}
{
key = "]]";
mode = ["n" "t"];
desc = "Next Reference";
action = "function() Snacks.words.jump(vim.v.count1) end";
lua = true;
}
{
key = "[[";
mode = ["n" "t"];
desc = "Prev Reference";
action = "function() Snacks.words.jump(-vim.v.count1) end";
lua = true;
}
]

View file

@ -1,9 +0,0 @@
[
{
key = "<leader> ";
mode = ["n" "t"];
silent = true;
action = "<cmd>Telescope find_files<CR>";
desc = "Find Files";
}
]

View file

@ -1,214 +0,0 @@
{pkgs, ...}: let
keybinds = import ./binds;
plugins = import ./plugins {inherit pkgs;};
in {
programs.nvf = {
enable = true;
settings = {
vim = {
package = pkgs.neovim-unwrapped;
lazy.plugins = plugins;
viAlias = false;
vimAlias = true;
useSystemClipboard = true;
keymaps = keybinds;
lsp = {
formatOnSave = true;
lspkind.enable = false;
lightbulb.enable = true;
lspsaga.enable = false;
trouble.enable = true;
lspSignature.enable = true;
otter-nvim.enable = true;
lsplines.enable = true;
nvim-docs-view.enable = true;
};
debugger = {
nvim-dap = {
enable = true;
ui.enable = true;
};
};
theme = {
enable = true;
name = "tokyonight";
style = "night";
};
snippets = {
luasnip.enable = true;
};
binds = {
whichKey.enable = true;
cheatsheet.enable = true;
};
git = {
enable = true;
gitsigns.enable = true;
gitsigns.codeActions.enable = false;
};
minimap = {
codewindow.enable = true;
};
projects = {
project-nvim.enable = true;
};
notes = {
todo-comments.enable = true;
mind-nvim.enable = true;
};
tabline = {
nvimBufferline.enable = true;
};
utility = {
icon-picker.enable = true;
surround.enable = true;
diffview-nvim.enable = true;
motion = {
hop.enable = true;
leap.enable = true;
precognition.enable = false;
};
images = {
image-nvim = {
enable = true;
setupOpts = {
backend = "kitty";
processor = "magick_cli";
integrations = {
markdown = {
enable = true;
downloadRemoteImages = true;
};
};
};
};
};
};
filetree.neo-tree = {
enable = true;
setupOpts = {
filesystem = {
bind_to_cwd = false;
follow_current_file.enabled = true;
use_libuv_file_watcher = true;
};
window.mappings = {
"<space>" = "none";
"l" = "open";
"h" = "close_node";
};
default_component_configs = {
indent = {
with_expanders = true;
expander_collapsed = "";
expander_expanded = "";
expander_highlight = "NeoTreeExpander";
};
git_status = {
symbols = {
unstaged = "󰄱";
staged = "󰱒";
};
};
};
};
};
ui = {
borders.enable = true;
colorizer.enable = true;
illuminate.enable = true;
noice.enable = true;
breadcrumbs = {
enable = true;
navbuddy.enable = true;
};
smartcolumn = {
enable = true;
setupOpts.custom_colorcolumn = {
nix = "110";
ruby = "120";
java = "130";
go = ["90" "130"];
};
};
fastaction.enable = true;
};
statusline.lualine = {
enable = true;
theme = "tokyonight";
};
telescope.enable = true;
autocomplete.nvim-cmp.enable = true;
autopairs.nvim-autopairs.enable = true;
treesitter.context.enable = true;
languages = {
enableLSP = true;
enableFormat = true;
enableTreesitter = true;
enableExtraDiagnostics = true;
nix.enable = true;
markdown.enable = true;
bash.enable = true;
clang.enable = true;
css.enable = true;
html.enable = true;
sql.enable = true;
java.enable = true;
kotlin.enable = true;
ts.enable = true;
go.enable = true;
lua.enable = true;
zig.enable = true;
python.enable = true;
typst.enable = true;
rust = {
enable = true;
crates.enable = true;
};
};
visuals = {
nvim-scrollbar.enable = true;
nvim-web-devicons.enable = true;
nvim-cursorline.enable = true;
cinnamon-nvim.enable = true;
fidget-nvim.enable = true;
highlight-undo.enable = true;
indent-blankline.enable = true;
# Fun
cellular-automaton.enable = false;
};
comments = {
comment-nvim.enable = true;
};
presence = {
neocord.enable = true;
};
};
};
};
}

View file

@ -1,93 +0,0 @@
{pkgs, ...}: let
snacksBinds = import ../binds/snacks.nix;
logo = ''
'';
in {
"${pkgs.vimPlugins.snacks-nvim.pname}" = {
enabled = true;
priority = 1000;
package = pkgs.vimPlugins.snacks-nvim;
setupModule = "snacks";
lazy = false;
setupOpts = {
animate.enabled = true;
dashboard = {
enabled = true;
header = logo;
keys = [
{
icon = " ";
key = "f";
desc = "Find File";
action = ":lua Snacks.dashboard.pick('files')";
}
{
icon = " ";
key = "n";
desc = "New File";
action = ":ene | startinsert";
}
{
icon = " ";
key = "g";
desc = "Find Text";
action = ":lua Snacks.dashboard.pick('live_grep')";
}
{
icon = " ";
key = "r";
desc = "Recent Files";
action = ":lua Snacks.dashboard.pick('oldfiles')";
}
{
icon = " ";
key = "c";
desc = "Config";
action = ":lua Snacks.dashboard.pick('files', {cwd = vim.fn.stdpath('config')})";
}
{
icon = " ";
key = "s";
desc = "Restore Session";
section = "session";
}
{
icon = " ";
key = "x";
desc = "Lazy Extras";
action = ":LazyExtras";
}
{
icon = "󰒲 ";
key = "l";
desc = "Lazy";
action = ":Lazy";
}
{
icon = " ";
key = "q";
desc = "Quit";
action = ":qa";
}
];
};
indent.enabled = true;
input.enabled = true;
notifier.enabled = false;
quickfile.enabled = true;
scroll.enabled = true;
statuscolumn.enabled = false;
words.enabled = true;
};
keys = snacksBinds;
};
}

View file

@ -9,6 +9,20 @@
}; };
}; };
neovim = {
enable = true;
configure = {
customRC = ''
set number
set relativenumber
set tabstop=2
set shiftwidth=2
set expandtab
nnoremap <C-s> :w<CR>
'';
};
};
dconf.enable = true; dconf.enable = true;
zsh.enable = true; zsh.enable = true;
mtr.enable = true; mtr.enable = true;