Compare commits

...

31 commits

Author SHA1 Message Date
400742f8a9
pkg(nixvim): Add idris2 language configuration 2025-08-11 12:43:05 +08:00
56dc7f3bba
pkg(nixvim): Add some lsp configuration 2025-08-11 12:43:03 +08:00
39ca09b05f
pkg(nixvim): Add extra module to modify option 2025-08-11 12:43:02 +08:00
86f39ed4ce
pkg(nixvim): Modify some nixvim options 2025-08-11 12:43:01 +08:00
bf50c2b05c
pkg(nixvim): Add trouble plugin 2025-08-11 12:42:59 +08:00
d794974e0c
pkg(nixvim): Add gitsigns plugin 2025-08-11 12:42:58 +08:00
9238672dad
pkg(nixvim): Add which-key plugin 2025-08-11 12:42:57 +08:00
f764a607c0
pkg(nixvim): Set leader key and modify some options 2025-08-11 12:42:56 +08:00
96c4fb932d
pkg(nixvim): Move neovide configuration to single file 2025-08-11 12:42:54 +08:00
44cbe023d0
pkg(nixvim): Refactor tree-sitter module 2025-08-11 12:42:53 +08:00
dbb0d61937
pkg(nixvim): Refactor ui module for nixvim 2025-08-11 12:42:52 +08:00
3948d2b53d
pkg(nixvim): Add snack plugin for many little features 2025-08-11 12:42:50 +08:00
2b6bc9763d
pkg(nixvim): Add lazy-load file to use AutoCmd to load plugin 2025-08-11 12:42:49 +08:00
58b503453b
pkg(nixvim): Move vim-startuptime to util/vim-startuptime.nix 2025-08-11 12:42:48 +08:00
933446925a
pkg(nixvim): Add .stylua.toml file to specify lua format 2025-08-11 12:42:46 +08:00
cfdd89c080
pkg(nixvim): Add blink-cmp, lazydev, mini-ai, mini-pairs and ts-comments plugins to improve coding UX 2025-08-11 12:42:45 +08:00
7477166d9e
pkg(nixvim): Remove all lang configuration to single file 2025-08-11 12:42:44 +08:00
54d4bc057e
pkg(nixvim): Delete reorder_array option for taplo and reformat all toml files 2025-08-11 12:42:43 +08:00
e70d021a24
Add neovim_git flake input, and use neovim_git in nixvim 2025-08-11 12:42:41 +08:00
3649602a07
pkg(nixvim): Fix format command completion function 2025-08-11 12:42:40 +08:00
745a964d79
pkgs(nixvim): Add vim-startuptime plugin for profile the startup time 2025-08-11 12:42:38 +08:00
cf90eede7e
Add neovide support for neovim 2025-08-11 12:42:36 +08:00
d242144445
pkgs(nixvim): Add some language supports for formatting 2025-08-11 12:42:35 +08:00
37914d6957
pkgs(nixvim): Use conform.nvim as formatting plugin, and add two usercmds for it 2025-08-11 12:42:34 +08:00
8806190f75
pkgs(nixvim): Config neovim startup options 2025-08-11 12:42:33 +08:00
7078dd84eb
pkgs(nixvim): Enable treesitter support and enable which-key plugin 2025-08-11 12:42:32 +08:00
9466308478
pkgs(nixvim): Set colorscheme and enable lualine plugin 2025-08-11 12:42:31 +08:00
cdf7e9908a
pkgs(nixvim): Add basic lsp support for nix language 2025-08-11 12:42:29 +08:00
419edec01f
pkgs(nixvim): Use nixvim to precompile lua to byte code 2025-08-11 12:42:27 +08:00
0bae976b08
pkgs(nixvim): Add some basic structure 2025-08-11 12:42:26 +08:00
c75945ddba
Refactor nixvim to move it as standalone package instead of nixos module 2025-08-11 12:42:13 +08:00
56 changed files with 1770 additions and 170 deletions

View file

@ -130,6 +130,27 @@
},
"version": "Serif2.003"
},
"nvim_vim-startuptime": {
"cargoLocks": null,
"date": "2025-02-17",
"extract": null,
"name": "nvim_vim-startuptime",
"passthru": null,
"pinned": false,
"src": {
"deepClone": false,
"fetchSubmodules": false,
"leaveDotGit": false,
"name": null,
"owner": "dstein64",
"repo": "vim-startuptime",
"rev": "b6f0d93f6b8cf6eee0b4c94450198ba2d6a05ff6",
"sha256": "sha256-0YLDkU1y89O5z7tgxaH5USQpJDfTuN0fsPJOAp6pa5Y=",
"sparseCheckout": [],
"type": "github"
},
"version": "b6f0d93f6b8cf6eee0b4c94450198ba2d6a05ff6"
},
"radicle-ci-broker": {
"cargoLocks": null,
"date": "2025-06-27",

View file

@ -82,6 +82,18 @@
sha256 = "sha256-mfbBSdJrUCZiUUmsmndtEW6H3z6KfBn+dEftBySf2j4=";
};
};
nvim_vim-startuptime = {
pname = "nvim_vim-startuptime";
version = "b6f0d93f6b8cf6eee0b4c94450198ba2d6a05ff6";
src = fetchFromGitHub {
owner = "dstein64";
repo = "vim-startuptime";
rev = "b6f0d93f6b8cf6eee0b4c94450198ba2d6a05ff6";
fetchSubmodules = false;
sha256 = "sha256-0YLDkU1y89O5z7tgxaH5USQpJDfTuN0fsPJOAp6pa5Y=";
};
date = "2025-02-17";
};
radicle-ci-broker = {
pname = "radicle-ci-broker";
version = "d5f684b2ec12dc875ec0278c8e2fe71faaa88d38";

307
flake.lock generated
View file

@ -101,7 +101,7 @@
"nur-ataraxiasjel",
"devenv"
],
"nixpkgs": "nixpkgs_7"
"nixpkgs": "nixpkgs_8"
},
"locked": {
"lastModified": 1744206633,
@ -205,10 +205,10 @@
"devenv": {
"inputs": {
"cachix": "cachix",
"flake-compat": "flake-compat_4",
"git-hooks": "git-hooks",
"flake-compat": "flake-compat_6",
"git-hooks": "git-hooks_2",
"nix": "nix",
"nixpkgs": "nixpkgs_9"
"nixpkgs": "nixpkgs_10"
},
"locked": {
"lastModified": 1748273445,
@ -305,6 +305,38 @@
}
},
"flake-compat_3": {
"flake": false,
"locked": {
"lastModified": 1747046372,
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_4": {
"flake": false,
"locked": {
"lastModified": 1747046372,
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_5": {
"flake": false,
"locked": {
"lastModified": 1746162366,
@ -320,7 +352,7 @@
"type": "github"
}
},
"flake-compat_4": {
"flake-compat_6": {
"flake": false,
"locked": {
"lastModified": 1733328505,
@ -376,6 +408,48 @@
}
},
"flake-parts_3": {
"inputs": {
"nixpkgs-lib": [
"neovim-nightly",
"nixpkgs"
]
},
"locked": {
"lastModified": 1754487366,
"narHash": "sha256-pHYj8gUBapuUzKV/kN/tR3Zvqc7o6gdFB9XKXIp1SQ8=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "af66ad14b28a127c5c0f3bbb298218fc63528a18",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-parts_4": {
"inputs": {
"nixpkgs-lib": [
"neovim-nightly",
"hercules-ci-effects",
"nixpkgs"
]
},
"locked": {
"lastModified": 1751413152,
"narHash": "sha256-Tyw1RjYEsp5scoigs1384gIg6e0GoBVjms4aXFfRssQ=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "77826244401ea9de6e3bac47c2db46005e1f30b5",
"type": "github"
},
"original": {
"id": "flake-parts",
"type": "indirect"
}
},
"flake-parts_5": {
"inputs": {
"nixpkgs-lib": [
"nixvim",
@ -396,7 +470,7 @@
"type": "github"
}
},
"flake-parts_4": {
"flake-parts_6": {
"inputs": {
"nixpkgs-lib": [
"nur",
@ -417,7 +491,7 @@
"type": "github"
}
},
"flake-parts_5": {
"flake-parts_7": {
"inputs": {
"nixpkgs-lib": [
"nur-ataraxiasjel",
@ -440,7 +514,7 @@
"type": "github"
}
},
"flake-parts_6": {
"flake-parts_8": {
"inputs": {
"nixpkgs-lib": "nixpkgs-lib_2"
},
@ -540,12 +614,35 @@
}
},
"git-hooks": {
"inputs": {
"flake-compat": "flake-compat_4",
"gitignore": "gitignore_2",
"nixpkgs": [
"neovim-nightly",
"nixpkgs"
]
},
"locked": {
"lastModified": 1754416808,
"narHash": "sha256-c6yg0EQ9xVESx6HGDOCMcyRSjaTpNJP10ef+6fRcofA=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "9c52372878df6911f9afc1e2a1391f55e4dfc864",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "git-hooks.nix",
"type": "github"
}
},
"git-hooks_2": {
"inputs": {
"flake-compat": [
"nur-ataraxiasjel",
"devenv"
],
"gitignore": "gitignore_2",
"gitignore": "gitignore_3",
"nixpkgs": [
"nur-ataraxiasjel",
"devenv",
@ -589,6 +686,28 @@
}
},
"gitignore_2": {
"inputs": {
"nixpkgs": [
"neovim-nightly",
"git-hooks",
"nixpkgs"
]
},
"locked": {
"lastModified": 1709087332,
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"gitignore_3": {
"inputs": {
"nixpkgs": [
"nur-ataraxiasjel",
@ -650,6 +769,28 @@
"type": "github"
}
},
"hercules-ci-effects": {
"inputs": {
"flake-parts": "flake-parts_4",
"nixpkgs": [
"neovim-nightly",
"nixpkgs"
]
},
"locked": {
"lastModified": 1752595130,
"narHash": "sha256-CNBgr4OZSuklGtNOa9CnTNo9+Xceqn/EDAC1Tc43fH8=",
"owner": "hercules-ci",
"repo": "hercules-ci-effects",
"rev": "5f2e09654b2e70ba643e41609d9f9b6640f22113",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "hercules-ci-effects",
"type": "github"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
@ -821,6 +962,46 @@
"url": "https://git.lix.systems/lix-project/nixos-module"
}
},
"neovim-nightly": {
"inputs": {
"flake-compat": "flake-compat_3",
"flake-parts": "flake-parts_3",
"git-hooks": "git-hooks",
"hercules-ci-effects": "hercules-ci-effects",
"neovim-src": "neovim-src",
"nixpkgs": "nixpkgs_3",
"treefmt-nix": "treefmt-nix"
},
"locked": {
"lastModified": 1754641381,
"narHash": "sha256-eMoujl/X1lbdjRbC/HHCpZmUb5tqTAYSL1hocy+o7nc=",
"owner": "nix-community",
"repo": "neovim-nightly-overlay",
"rev": "83aaf3085f808dec9ea1b5d16b216875a8081b37",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "neovim-nightly-overlay",
"type": "github"
}
},
"neovim-src": {
"flake": false,
"locked": {
"lastModified": 1754610154,
"narHash": "sha256-ORfF40X4BGiFxnLNQbdsQbUTW4TkUHfPqyZWHaYL5NE=",
"owner": "neovim",
"repo": "neovim",
"rev": "038eb01b41b66379f75164507571497929f8847c",
"type": "github"
},
"original": {
"owner": "neovim",
"repo": "neovim",
"type": "github"
}
},
"niri-flake": {
"inputs": {
"niri-stable": "niri-stable",
@ -885,9 +1066,9 @@
"nur-ataraxiasjel",
"devenv"
],
"flake-parts": "flake-parts_5",
"flake-parts": "flake-parts_7",
"libgit2": "libgit2",
"nixpkgs": "nixpkgs_8",
"nixpkgs": "nixpkgs_9",
"nixpkgs-23-11": [
"nur-ataraxiasjel",
"devenv"
@ -941,8 +1122,8 @@
},
"nixos-cosmic": {
"inputs": {
"flake-compat": "flake-compat_3",
"nixpkgs": "nixpkgs_3",
"flake-compat": "flake-compat_5",
"nixpkgs": "nixpkgs_4",
"nixpkgs-stable": "nixpkgs-stable_3",
"rust-overlay": "rust-overlay_4"
},
@ -1071,6 +1252,22 @@
}
},
"nixpkgs_10": {
"locked": {
"lastModified": 1746807397,
"narHash": "sha256-zU2z0jlkJGWLhdNr/8AJSxqK8XD0IlQgHp3VZcP56Aw=",
"owner": "cachix",
"repo": "devenv-nixpkgs",
"rev": "c5208b594838ea8e6cca5997fbf784b7cca1ca90",
"type": "github"
},
"original": {
"owner": "cachix",
"ref": "rolling",
"repo": "devenv-nixpkgs",
"type": "github"
}
},
"nixpkgs_11": {
"locked": {
"lastModified": 1748190013,
"narHash": "sha256-R5HJFflOfsP5FBtk+zE8FpL8uqE7n62jqOsADvVshhE=",
@ -1086,7 +1283,7 @@
"type": "github"
}
},
"nixpkgs_11": {
"nixpkgs_12": {
"locked": {
"lastModified": 1747958103,
"narHash": "sha256-qmmFCrfBwSHoWw7cVK4Aj+fns+c54EBP8cGqp/yK410=",
@ -1119,6 +1316,22 @@
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1754393734,
"narHash": "sha256-fbnmAwTQkuXHKBlcL5Nq1sMAzd3GFqCOQgEQw6Hy0Ak=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "a683adc19ff5228af548c6539dbc3440509bfed3",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_4": {
"locked": {
"lastModified": 1751011381,
"narHash": "sha256-krGXKxvkBhnrSC/kGBmg5MyupUUT5R6IBCLEzx9jhMM=",
@ -1134,7 +1347,7 @@
"type": "github"
}
},
"nixpkgs_4": {
"nixpkgs_5": {
"locked": {
"lastModified": 1752950548,
"narHash": "sha256-NS6BLD0lxOrnCiEOcvQCDVPXafX1/ek1dfJHX1nUIzc=",
@ -1150,7 +1363,7 @@
"type": "github"
}
},
"nixpkgs_5": {
"nixpkgs_6": {
"locked": {
"lastModified": 1752077645,
"narHash": "sha256-HM791ZQtXV93xtCY+ZxG1REzhQenSQO020cu6rHtAPk=",
@ -1166,7 +1379,7 @@
"type": "github"
}
},
"nixpkgs_6": {
"nixpkgs_7": {
"locked": {
"lastModified": 1752950548,
"narHash": "sha256-NS6BLD0lxOrnCiEOcvQCDVPXafX1/ek1dfJHX1nUIzc=",
@ -1182,7 +1395,7 @@
"type": "github"
}
},
"nixpkgs_7": {
"nixpkgs_8": {
"locked": {
"lastModified": 1733212471,
"narHash": "sha256-M1+uCoV5igihRfcUKrr1riygbe73/dzNnzPsmaLCmpo=",
@ -1198,7 +1411,7 @@
"type": "github"
}
},
"nixpkgs_8": {
"nixpkgs_9": {
"locked": {
"lastModified": 1717432640,
"narHash": "sha256-+f9c4/ZX5MWDOuB1rKoWj+lBNm0z0rs4CK47HBLxy1o=",
@ -1214,26 +1427,10 @@
"type": "github"
}
},
"nixpkgs_9": {
"locked": {
"lastModified": 1746807397,
"narHash": "sha256-zU2z0jlkJGWLhdNr/8AJSxqK8XD0IlQgHp3VZcP56Aw=",
"owner": "cachix",
"repo": "devenv-nixpkgs",
"rev": "c5208b594838ea8e6cca5997fbf784b7cca1ca90",
"type": "github"
},
"original": {
"owner": "cachix",
"ref": "rolling",
"repo": "devenv-nixpkgs",
"type": "github"
}
},
"nixvim": {
"inputs": {
"flake-parts": "flake-parts_3",
"nixpkgs": "nixpkgs_5",
"flake-parts": "flake-parts_5",
"nixpkgs": "nixpkgs_6",
"nuschtosSearch": "nuschtosSearch",
"systems": "systems_3"
},
@ -1253,8 +1450,8 @@
},
"nur": {
"inputs": {
"flake-parts": "flake-parts_4",
"nixpkgs": "nixpkgs_6"
"flake-parts": "flake-parts_6",
"nixpkgs": "nixpkgs_7"
},
"locked": {
"lastModified": 1753043887,
@ -1274,8 +1471,8 @@
"inputs": {
"devenv": "devenv",
"devenv-root": "devenv-root",
"flake-parts": "flake-parts_6",
"nixpkgs": "nixpkgs_10"
"flake-parts": "flake-parts_8",
"nixpkgs": "nixpkgs_11"
},
"locked": {
"lastModified": 1752784378,
@ -1379,16 +1576,17 @@
"home-manager": "home-manager_2",
"lanzaboote": "lanzaboote",
"lix-module": "lix-module",
"neovim-nightly": "neovim-nightly",
"niri-flake": "niri-flake",
"nixos-cosmic": "nixos-cosmic",
"nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs_4",
"nixpkgs": "nixpkgs_5",
"nixvim": "nixvim",
"nur": "nur",
"nur-ataraxiasjel": "nur-ataraxiasjel",
"sops-nix": "sops-nix",
"stylix": "stylix",
"treefmt-nix": "treefmt-nix"
"treefmt-nix": "treefmt-nix_2"
}
},
"rust-overlay": {
@ -1674,7 +1872,28 @@
},
"treefmt-nix": {
"inputs": {
"nixpkgs": "nixpkgs_11"
"nixpkgs": [
"neovim-nightly",
"nixpkgs"
]
},
"locked": {
"lastModified": 1754492133,
"narHash": "sha256-B+3g9+76KlGe34Yk9za8AF3RL+lnbHXkLiVHLjYVOAc=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "1298185c05a56bff66383a20be0b41a307f52228",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "treefmt-nix",
"type": "github"
}
},
"treefmt-nix_2": {
"inputs": {
"nixpkgs": "nixpkgs_12"
},
"locked": {
"lastModified": 1753006367,

View file

@ -194,6 +194,11 @@
owner = "nix-community";
repo = "nixvim";
};
neovim-nightly = {
type = "github";
owner = "nix-community";
repo = "neovim-nightly-overlay";
};
lanzaboote = {
type = "github";

View file

@ -11,6 +11,7 @@
system,
lib,
self',
inputs',
...
}: let
inherit (inputs) nixpkgs;
@ -20,6 +21,7 @@
config = {
allowUnfree = true;
};
overlays = [(_final: _prev: {inherit lib;})];
};
devShells.default = pkgs.mkShell {
name = "nixos-shell";
@ -36,6 +38,9 @@
inputsScope = lib.makeScope pkgs.newScope (self: {
inherit inputs rootPath;
srcs = self.callPackage (rootPath + "/_sources/generated.nix") {};
inherit (inputs'.nixvim.legacyPackages) makeNixvim makeNixvimWithModule;
inherit (self'.legacyPackages) nixvimPlugins;
neovim_git = inputs'.neovim-nightly.packages.default;
});
in
lib.packagesFromDirectoryRecursive {

View file

@ -3,9 +3,9 @@ ipc_socket = true
live_config_reload = true
[window]
blur = true
dynamic_padding = true
opacity = 0.8
blur = true
[scrolling]
history = 100000

View file

@ -482,6 +482,7 @@ in
(window-rule [
(match [{app-id = "^Alacritty$";}])
(match [{app-id = "^com\\.mitchellh\\.ghostty$";}])
(match [{app-id = "^neovide$";}])
(leaf "draw-border-with-background" [false])
])
(window-rule [

View file

@ -1,18 +1,19 @@
[editor]
line-number = "relative"
cursorline = true
cursorcolumn = false
true-color = true
undercurl = true
bufferline = "multiple"
color-modes = true
cursorcolumn = false
cursorline = true
default-line-ending = "lf"
line-number = "relative"
popup-border = "all"
true-color = true
undercurl = true
# letters in the beginning are used first
# move home raw letters to the beginning
jump-label-alphabet = "jkdls;aurieowpqnvmcxz"
[editor.statusline]
center = ["diagnostics"]
left = [
"mode",
"spacer",
@ -25,7 +26,9 @@ left = [
"spacer",
"spinner",
]
center = ["diagnostics"]
mode.insert = "INSERT"
mode.normal = "NORMAL"
mode.select = "SELECT"
right = [
"register",
"file-line-ending",
@ -36,14 +39,11 @@ right = [
"position-percentage",
]
separator = "|"
mode.normal = "NORMAL"
mode.insert = "INSERT"
mode.select = "SELECT"
[editor.lsp]
display-progress-messages = true
display-messages = true
display-inlay-hints = true
display-messages = true
display-progress-messages = true
[editor.cursor-shape]
insert = "bar"
@ -54,16 +54,16 @@ select = "underline"
hidden = false
[editor.whitespace.render]
space = "none"
tab = "all"
nbsp = "all"
newline = "none"
space = "none"
tab = "all"
[editor.whitespace.characters]
space = "·"
nbsp = "⍽"
tab = "→"
newline = "⏎"
space = "·"
tab = "→"
tabpad = "·"
[editor.indent-guides]

View file

@ -1,43 +1,43 @@
"$schema" = 'https://starship.rs/config-schema.json'
[character]
success_symbol = '[λ](bold blue)'
error_symbol = '[λ](bold red)'
vimcmd_symbol = '[Λ](bold blue)'
success_symbol = '[λ](bold blue)'
vimcmd_replace_one_symbol = '[Λ](bold purple)'
vimcmd_replace_symbol = '[Λ](bold purple)'
vimcmd_symbol = '[Λ](bold blue)'
vimcmd_visual_symbol = '[Λ](bold yellow)'
[[battery.display]]
threshold = 10
style = 'bold red'
threshold = 10
[[battery.display]]
threshold = 30
style = 'bold yellow'
discharging_symbol = '💦'
style = 'bold yellow'
threshold = 30
[[battery.display]]
threshold = 100
style = 'green'
threshold = 100
[git_branch]
format = 'on [$symbol$branch(:$remote_branch)]($style) '
symbol = " "
[git_status]
diverged = '⇕⇡${ahead_count}⇣${behind_count}'
conflicted = "[⚔️${count}](red)"
ahead = '[⇡${count}](bold green)'
behind = '[⇣${count}](bold yellow)'
untracked = '[!${count}](red)'
stashed = "[📦${count}](purple)"
modified = '[M${count}](bold yellow)'
staged = "[+${count}](green)"
renamed = "[»${count}](bold yellow)"
conflicted = "[⚔️${count}](red)"
deleted = '[-${count}](blue)'
up_to_date = '[✓](green)'
diverged = '⇕⇡${ahead_count}⇣${behind_count}'
format = '([(\[$all_status\])(\[$ahead_behind\])]($style) ) '
modified = '[M${count}](bold yellow)'
renamed = "[»${count}](bold yellow)"
staged = "[+${count}](green)"
stashed = "[📦${count}](purple)"
untracked = '[!${count}](red)'
up_to_date = '[✓](green)'
[git_commit]
format = '([\($hash$tag\)]($style) )'
@ -45,11 +45,11 @@ only_detached = false
[directory]
fish_style_pwd_dir_length = 2
truncation_length = 2
truncate_to_repo = false
repo_root_style = "bold green"
use_os_path_sep = false
read_only = " 󰌾"
repo_root_style = "bold green"
truncate_to_repo = false
truncation_length = 2
use_os_path_sep = false
[aws]
symbol = " "
@ -133,9 +133,9 @@ symbol = " "
symbol = " "
[os.symbols]
AlmaLinux = " "
Alpaquita = " "
Alpine = " "
AlmaLinux = " "
Amazon = " "
Android = " "
Arch = " "
@ -162,20 +162,20 @@ Mint = " "
NetBSD = " "
NixOS = " "
OpenBSD = "󰈺 "
openSUSE = " "
OracleLinux = "󰌷 "
Pop = " "
Raspbian = " "
Redhat = " "
RedHatEnterprise = " "
RockyLinux = " "
Redhat = " "
Redox = "󰀘 "
Solus = "󰠳 "
RockyLinux = " "
SUSE = " "
Solus = "󰠳 "
Ubuntu = " "
Unknown = " "
Void = " "
Windows = "󰍲 "
openSUSE = " "
[package]
symbol = "󰏗 "

View file

@ -59,6 +59,8 @@
localsend
zulip
wechat
nixvim
neovide
];
environment.variables.EDITOR = "hx";

View file

@ -37,7 +37,6 @@
};
programs = {
bash.enable = true;
nixvim.enable = true;
guix.enable = true;
dae.enable = true;
openssh.enable = true;
@ -91,6 +90,8 @@
waypipe
wineWow64Packages.waylandFull
iperf3
nixvim
neovide
sbctl
];

View file

@ -1,25 +0,0 @@
{
lib,
config,
...
}: let
cfg = config.youthlic.programs.nixvim;
in {
imports = lib.youthlic.loadImports ./.;
options = {
youthlic.programs.nixvim = {
enable = lib.mkEnableOption "nixvim";
};
};
config = lib.mkIf cfg.enable {
programs.nixvim = {
enable = true;
enableMan = true;
colorschemes.gruvbox-material = {
enable = true;
autoLoad = true;
};
plugins.lualine.enable = true;
};
};
}

View file

@ -1,42 +0,0 @@
{
lib,
config,
...
}: let
cfg = config.youthlic.programs.nixvim;
in {
config = lib.mkIf cfg.enable {
programs.nixvim = {
opts = {
backspace = ["indent" "eol" "start"];
tabstop = 4;
shiftwidth = 4;
expandtab = true;
shiftround = true;
autoindent = true;
nu = true;
rnu = true;
wildmenu = true;
hlsearch = false;
ignorecase = true;
smartcase = true;
completeopt = ["menu" "noselect"];
cursorline = true;
termguicolors = true;
signcolumn = "yes";
autoread = true;
title = true;
swapfile = false;
backup = false;
updatetime = 50;
mouse = "a";
undofile = true;
exrc = true;
scrolloff = 5;
wrap = true;
splitright = true;
splitbelow = true;
};
};
};
}

View file

@ -1,60 +1,64 @@
[juicity]
src.git = "https://github.com/juicity/juicity"
fetch.git = "https://githuh.com/juicity/juicity"
src.git = "https://github.com/juicity/juicity"
[tree-sitter-idris]
src.git = "https://github.com/kayhide/tree-sitter-idris"
fetch.git = "https://github.com/kayhide/tree-sitter-idris"
passthru.name = "idris"
src.git = "https://github.com/kayhide/tree-sitter-idris"
[noto-serif-cjk]
src.github = "notofonts/noto-cjk"
fetch.github = "notofonts/noto-cjk"
git.sparseCheckout = ["Serif/OTC"]
src.github = "notofonts/noto-cjk"
[noto-sans-cjk]
src.github = "notofonts/noto-cjk"
fetch.github = "notofonts/noto-cjk"
git.sparseCheckout = ["Sans/OTC"]
src.github = "notofonts/noto-cjk"
[spotx]
src.git = "https://github.com/SpotX-Official/SpotX-Bash.git"
fetch.github = "SpotX-Official/SpotX-Bash"
src.git = "https://github.com/SpotX-Official/SpotX-Bash.git"
[TrackersListCollection]
src.git = "https://github.com/XIU2/TrackersListCollection.git"
fetch.github = "XIU2/TrackersListCollection"
git.sparseCheckout = ["all.txt"]
src.git = "https://github.com/XIU2/TrackersListCollection.git"
[wshowkeys-mao]
src.git = "https://github.com/DreamMaoMao/wshowkeys.git"
fetch.github = "DreamMaoMao/wshowkeys"
src.git = "https://github.com/DreamMaoMao/wshowkeys.git"
[OuterWildsTextAdventure]
src.git = "https://github.com/top-mind/OuterWildsTextAdventureWeb.git"
fetch.github = "top-mind/OuterWildsTextAdventureWeb"
src.git = "https://github.com/top-mind/OuterWildsTextAdventureWeb.git"
[cliphist]
src.git = "https://github.com/sentriz/cliphist.git"
fetch.github = "sentriz/cliphist"
src.git = "https://github.com/sentriz/cliphist.git"
[radicle-ci-broker]
src.git = "https://seed.radicle.garden/zwTxygwuz5LDGBq255RA2CbNGrz8.git"
fetch.git = "https://seed.radicle.garden/zwTxygwuz5LDGBq255RA2CbNGrz8.git"
src.git = "https://seed.radicle.garden/zwTxygwuz5LDGBq255RA2CbNGrz8.git"
["wallpaper_hieda-no-akyuu-touhou.1920x1080.mp4"]
src.cmd = "curl -sL http://wallpaper.youthlic.social/hieda-no-akyuu-touhou.1920x1080.mp4 | sha256sum | cut -d ' ' -f 1"
fetch.url = "http://wallpaper.youthlic.social/hieda-no-akyuu-touhou.1920x1080.mp4"
src.cmd = "curl -sL http://wallpaper.youthlic.social/hieda-no-akyuu-touhou.1920x1080.mp4 | sha256sum | cut -d ' ' -f 1"
["wallpaper_outer-wilds.3840x2160.mp4"]
src.cmd = "curl -sL http://wallpaper.youthlic.social/outer-wilds.3840x2160.mp4 | sha256sum | cut -d ' ' -f 1"
fetch.url = "http://wallpaper.youthlic.social/outer-wilds.3840x2160.mp4"
src.cmd = "curl -sL http://wallpaper.youthlic.social/outer-wilds.3840x2160.mp4 | sha256sum | cut -d ' ' -f 1"
["wallpaper_hollow-knight-quest.3840x2160.mp4"]
src.cmd = "curl -sL http://wallpaper.youthlic.social/hollow-knight-quest.3840x2160.mp4 | sha256sum | cut -d ' ' -f 1"
fetch.url = "http://wallpaper.youthlic.social/hollow-knight-quest.3840x2160.mp4"
src.cmd = "curl -sL http://wallpaper.youthlic.social/hollow-knight-quest.3840x2160.mp4 | sha256sum | cut -d ' ' -f 1"
[rime-yuhaostar]
src.github = "forfudan/yuhao-ime-release"
fetch.url = "https://github.com/forfudan/yuhao-ime-release/releases/download/$ver/yuhao_star_xingchen_$ver.zip"
src.github = "forfudan/yuhao-ime-release"
url.name = "yustar_$ver.zip"
[nvim_vim-startuptime]
fetch.github = "dstein64/vim-startuptime"
src.git = "https://github.com/dstein64/vim-startuptime.git"

View file

@ -9,6 +9,7 @@ in
./wallpapers.nix
./waydroid-script.nix
./rime-yuhaostar.nix
./nixvim.nix
./pkgsNoCuda.nix
]

View file

@ -0,0 +1,5 @@
{outputs, ...}: _final: prev: let
inherit (prev.stdenv.hostPlatform) system;
in {
inherit (outputs.packages.${system}) nixvim;
}

5
pkgs/nixvim/.stylua.toml Normal file
View file

@ -0,0 +1,5 @@
column_width = 120
indent_type = "Spaces"
indent_width = 2
[sort_requires]
enabled = true

1
pkgs/nixvim/autocmds.nix Normal file
View file

@ -0,0 +1 @@
{...}: {}

View file

@ -0,0 +1,55 @@
{...}: {
youthlic.plugins.blink-cmp = {
enable = true;
setupLspCapabilities = true;
settings = {
snippets = {
expand = {
__raw =
#lua
''
function(snippet, _)
return {}
end
'';
};
};
appearance = {
# use_nvim_cmp_as_default = false;
};
completion = {
accept = {
auto_brackets = {
enabled = true;
};
};
menu = {
draw = {
treesitter = ["lsp"];
};
};
documentation = {
auto_show = true;
auto_show_delay_ms = 200;
};
ghost_text = {
enabled = {
__raw =
#lua
''vim.g.ai_cmp'';
};
};
};
sources = {
compat = [];
default = ["lsp" "path" "snippets" "buffer"];
};
cmdline = {
enabled = false;
};
keymap = {
preset = "enter";
};
};
};
}

View file

@ -0,0 +1,15 @@
{...}: {
youthlic.plugins = {
lazydev = {
enable = true;
settings = {
library = [
{
path = "$''{3rd}/luv/library";
words = ["vim%.uv"];
}
];
};
};
};
}

View file

@ -0,0 +1,121 @@
{...}: {
youthlic.plugins.mini-ai = {
enable = true;
luaConfig.pre =
#lua
''
do
local ai = require("mini.ai")
_M.__coding_plugin_mini_ai_opts = {
n_lines = 500,
custom_textobjects = {
o = ai.gen_spec.treesitter({ -- code block
a = { "@block.outer", "@conditional.outer", "@loop.outer" },
i = { "@block.inner", "@conditional.inner", "@loop.inner" },
}),
f = ai.gen_spec.treesitter({ a = "@function.outer", i = "@function.inner" }), -- function
c = ai.gen_spec.treesitter({ a = "@class.outer", i = "@class.inner" }), -- class
t = { "<([%p%w]-)%f[^<%w][^<>]->.-</%1>", "^<.->().*()</[^/]->$" }, -- tags
d = { "%f[%d]%d+" }, -- digits
e = { -- Word with case
{ "%u[%l%d]+%f[^%l%d]", "%f[%S][%l%d]+%f[^%l%d]", "%f[%P][%l%d]+%f[^%l%d]", "^[%l%d]+%f[^%l%d]" },
"^().*()$",
},
g = function(ai_type)
local start_line, end_line = 1, vim.fn.line("$")
if ai_type == "i" then
local first_nonblank, last_nonblank = vim.fn.nextnonblank(start_line), vim.fn.prevnonblank(end_line)
if first_nonblank == 0 or last_nonblank == 0 then
return { from = { line = start_line, col = 1 } }
end
start_line, end_line = first_nonblank, last_nonblank
end
local to_col = math.max(vim.fn.getline(end_line):len(), 1)
return {
from = {
line = start_line,
col = 1,
},
to = {
line = end_line,
col = to_col,
},
}
end, -- buffer
u = ai.gen_spec.function_call(), -- u for "Usage"
U = ai.gen_spec.function_call({ name_pattern = "[%w_]" }), -- without dot in function name
},
}
end
'';
settings = {
__raw =
#lua
"_M.__coding_plugin_mini_ai_opts";
};
luaConfig.post =
#lua
''
_M.on_load("which-key", function()
local opts = _M.__coding_plugin_mini_ai_opts
local objects = {
{ " ", desc = "whitespace" },
{ '"', desc = '" string' },
{ "'", desc = "' string" },
{ "(", desc = "() block" },
{ ")", desc = "() block with ws" },
{ "<", desc = "<> block" },
{ ">", desc = "<> block with ws" },
{ "?", desc = "user prompt" },
{ "U", desc = "use/call without dot" },
{ "[", desc = "[] block" },
{ "]", desc = "[] block with ws" },
{ "_", desc = "underscore" },
{ "`", desc = "` string" },
{ "a", desc = "argument" },
{ "b", desc = ")]} block" },
{ "c", desc = "class" },
{ "d", desc = "digit(s)" },
{ "e", desc = "CamelCase / snake_case" },
{ "f", desc = "function" },
{ "g", desc = "entire file" },
{ "i", desc = "indent" },
{ "o", desc = "block, conditional, loop" },
{ "q", desc = "quote `\"'" },
{ "t", desc = "tag" },
{ "u", desc = "use/call" },
{ "{", desc = "{} block" },
{ "}", desc = "{} with ws" },
}
---@type wk.Spec[]
local ret = { mode = { "o", "x" } }
---@type table<string, string>
local mappings = vim.tbl_extend("force", {}, {
around = "a",
inside = "i",
around_next = "an",
inside_next = "in",
around_last = "al",
inside_last = "il",
}, opts.mappings or {})
mappings.goto_left = nil
mappings.goto_right = nil
for name, prefix in pairs(mappings) do
name = name:gsub("^around_", ""):gsub("^inside_", "")
ret[#ret + 1] = { prefix, group = name }
for _, obj in ipairs(objects) do
local desc = obj.desc
if prefix:sub(1, 1) == "i" then
desc = desc:gsub(" with ws", "")
end
ret[#ret + 1] = { prefix .. obj[1], desc = obj.desc }
end
end
require("which-key").add(ret, { notify = false })
end)
'';
};
}

View file

@ -0,0 +1,71 @@
{...}: {
youthlic.plugins.mini-pairs = {
enable = true;
settings = {
modes = {
insert = true;
command = true;
terminal = false;
};
};
luaConfig.post =
#lua
''
do
local opts = {
skip_next = [=[[%w%%'%[%"%.%`%$]]=],
skip_ts = { "string" },
skip_unbalanced = true,
markdown = true,
}
_M.on_load("snacks", function()
vim.schedule(function()
Snacks.toggle({
name = "Mini Pairs",
get = function()
return not vim.g.minipairs_disable
end,
set = function(state)
vim.g.minipairs_disable = not state
end,
}):map("<leader>up")
end)
end)
local pairs = require("mini.pairs")
local open = pairs.open
pairs.open = function(pair, neigh_pattern)
if vim.fn.getcmdline() ~= "" then
return open(pair, neigh_pattern)
end
local o, c = pair:sub(1, 1), pair:sub(2, 2)
local line = vim.api.nvim_get_current_line()
local cursor = vim.api.nvim_win_get_cursor(0)
local next = line:sub(cursor[2] + 1, cursor[2] + 1)
local before = line:sub(1, cursor[2])
if opts.markdown and o == "`" and vim.bo.filetype == "markdown" and before:match("^%s*``") then
return "`\n``" .. vim.api.nvim_replace_termcodes("<up>", true, true, true)
end
if opts.skip_next and next ~= "" and next:match(opts.skip_next) then
return o
end
if opts.skip_ts and #opts.skip_ts > 0 then
local ok, captures = pcall(vim.treesitter.get_captures_at_pos, 0, cursor[1] - 1, math.max(cursor[2] - 1, 0))
for _, capture in ipairs(ok and captures or {}) do
if vim.tbl_contains(opts.skip_ts, capture.capture) then
return o
end
end
end
if opts.skip_unbalanced and next == c and c ~= o then
local _, count_open = line:gsub(vim.pesc(pair:sub(1, 1)), "")
local _, count_close = line:gsub(vim.pesc(pair:sub(2, 2)), "")
if count_close > count_open then
return o
end
end
return open(pair, neigh_pattern)
end
end
'';
};
}

View file

@ -0,0 +1,3 @@
{...}: {
youthlic.plugins.ts-comments.enable = true;
}

13
pkgs/nixvim/editor.nix Normal file
View file

@ -0,0 +1,13 @@
{...}: {
youthlic.plugins = {
# grug-far = {
# enable = true;
# };
# flash = {
# enable = true;
# };
# todo-comments = {
# enable = true;
# };
};
}

View file

@ -0,0 +1,97 @@
{...}: {
youthlic.plugins.gitsigns = {
enable = true;
luaConfig.post =
#lua
''
_M.on_load("snacks", function()
vim.schedule(function()
Snacks.toggle({
name = "Git Signs",
get = function()
return require("gitsigns.config").config.signcolumn
end,
set = function(state)
require("gitsigns").toggle_signs(state)
end,
}):map("<leader>uG")
end)
end)
'';
settings = {
current_line_blame = true;
signcolumn = true;
numhl = true;
linehl = false;
signs = {
add = {text = "";};
change = {text = "";};
delete = {text = "";};
topdelete = {text = "";};
changedelete = {text = "";};
untracked = {text = "";};
};
signs_staged = {
add = {text = "";};
change = {text = "";};
delete = {text = "";};
topdelete = {text = "";};
changedelete = {text = "";};
};
on_attach = {
__raw =
#lua
''
function(buffer)
local gs = package.loaded.gitsigns
local map = function(mode, l, r, desc)
vim.keymap.set(mode, l, r, {
buffer = buffer,
desc = desc,
})
end
map("n", "]h", function()
if vim.wo.diff then
vim.cmd.normal({ "]c", bang = true })
else
gs.nav_hunk("next")
end
end, "Next Hunk")
map("n", "[h", function()
if vim.wo.diff then
vim.cmd.normal({ "[c", bang = true })
else
gs.nav_hunk("prev")
end
end, "Prev Hunk")
map("n", "]H", function()
gs.nav_hunk("last")
end, "Last Hunk")
map("n", "[H", function()
gs.nav_hunk("first")
end, "First Hunk")
map({ "n", "v" }, "<leader>ghs", ":Gitsigns stage_hunk<CR>", "Stage Hunk")
map({ "n", "v" }, "<leader>ghr", ":Gitsigns reset_hunk<CR>", "Reset Hunk")
map("n", "<leader>ghS", gs.stage_buffer, "Stage Buffer")
map("n", "<leader>ghu", gs.undo_stage_hunk, "Undo Stage Hunk")
map("n", "<leader>ghR", gs.reset_buffer, "Reset Buffer")
map("n", "<leader>ghp", gs.preview_hunk_inline, "Preview Hunk Inline")
map("n", "<leader>ghb", function()
gs.blame_line({ full = true })
end, "Blame Line")
map("n", "<leader>ghB", function()
gs.blame()
end, "Blame Buffer")
map("n", "<leader>ghd", gs.diffthis, "Diff This")
map("n", "<leader>ghD", function()
gs.diffthis("~")
end, "Diff This ~")
map({ "o", "x" }, "ih", ":<C-U>Gitsigns select_hunk<CR>", "GitSigns Select Hunk")
end
'';
};
};
};
}

View file

@ -0,0 +1,30 @@
{...}: {
youthlic.plugins.trouble = {
enable = true;
settings = {
modes = {
lsp = {
win = {
position = "right";
};
};
preview_float = {
mode = "diagnostics";
preview = {
type = "float";
relative = "editor";
border = "rounded";
title = "Preview";
title_pos = "center";
position = [0 (-2)];
size = {
width = 0.3;
height = 0.3;
};
zindex = 200;
};
};
};
};
};
}

View file

@ -0,0 +1,17 @@
{...}: {
youthlic.plugins = {
which-key = {
enable = true;
settings = {
preset = "helix";
win = {
no_overlap = false;
};
show_help = false;
};
};
web-devicons = {
enable = true;
};
};
}

102
pkgs/nixvim/formatting.nix Normal file
View file

@ -0,0 +1,102 @@
{...}: {
userCommands = let
formatCmd = {
desc = "Format all the buffer";
# conform.format function can deal with range by itself
range = "%";
bang = true;
bar = true;
nargs = "?";
complete = {
__raw =
#lua
''
function(ArgLead, CmdLine, CursorPos)
return vim.iter(require("conform").list_all_formatters()):filter(function(val)
return val.available
end):map(function(val)
return val.name
end):filter(function(name)
return string.match(name, "^" .. ArgLead) ~= nil
end):totable()
end
'';
};
command = {
__raw =
#lua
''
function(opts)
local format = require("conform").format
if #(opts.fargs) == 0 then
return format()
else
return format({ formatters = { opts.fargs[1] } })
end
end
'';
};
};
in {
Format = formatCmd;
Fmt = formatCmd;
Formatter = {
desc = "Show config of formatter";
nargs = "?";
bar = true;
complete = {
__raw =
#lua
''
function(ArgLead, CmdLine, CursorPos)
return vim.iter(require("conform").list_all_formatters()):map(function(val)
return val.name
end):filter(function(name)
return string.match(name, "^" .. ArgLead) ~= nil
end):totable()
end
'';
};
command = {
__raw =
#lua
''
function(opts)
local conform = require("conform")
if #(opts.fargs) == 0 then
local formatters = conform.list_all_formatters()
print(vim.inspect(formatters))
return formatters
else
local config = conform.get_formatter_config(opts.fargs[1])
print(vim.inspect(config))
return config
end
end
'';
};
};
};
keymaps = [
{
action = {
__raw =
#lua
''
function(opts)
return require("conform").format()
end
'';
};
key = "=";
mode = ["n" "v"];
options = {
desc = "Format with conform";
};
}
];
youthlic.plugins.conform-nvim = {
enable = true;
settings.formatters.injected.options.ignore_errors = true;
};
}

1
pkgs/nixvim/keymaps.nix Normal file
View file

@ -0,0 +1 @@
{...}: {}

31
pkgs/nixvim/lang/c.nix Normal file
View file

@ -0,0 +1,31 @@
{
lib,
pkgs,
...
}: {
youthlic.plugins.conform-nvim.settings = {
formatters_by_ft.c = {
__unkeyed-1 = "clang-format";
lsp_format = "fallback";
};
formatters.clang-format = {
__raw =
#lua
''
function()
local defaultFormatter = require("conform.formatters.clang-format")
return vim.tbl_extend("force", defaultFormatter, {
command = function()
local exe = vim.fn["exepath"]("clang-format")
if exe ~= "" then
return exe
else
return "${lib.getExe' pkgs.clang-tools "clang-format"}"
end
end
})
end
'';
};
};
}

31
pkgs/nixvim/lang/cxx.nix Normal file
View file

@ -0,0 +1,31 @@
{
lib,
pkgs,
...
}: {
youthlic.plugins.conform-nvim.settings = {
formatters_by_ft.cpp = {
__unkeyed-1 = "clang-format";
lsp_format = "fallback";
};
formatters.clang-format = {
__raw =
#lua
''
function()
local defaultFormatter = require("conform.formatters.clang-format")
return vim.tbl_extend("force", defaultFormatter, {
command = function()
local exe = vim.fn["exepath"]("clang-format")
if exe ~= "" then
return exe
else
return "${lib.getExe' pkgs.clang-tools "clang-format"}"
end
end
})
end
'';
};
};
}

View file

@ -0,0 +1,9 @@
{pkgs, ...}: {
extraPackagesAfter = with pkgs; [idris2Packages.idris2Lsp];
lsp.servers.idris2 = {
enable = true;
};
youthlic.plugins.idris2 = {
enable = true;
};
}

30
pkgs/nixvim/lang/json.nix Normal file
View file

@ -0,0 +1,30 @@
{
lib,
pkgs,
...
}: {
youthlic.plugins.conform-nvim.settings = {
formatters_by_ft.json = {
__unkeyed-1 = "deno_fmt";
};
formatters.deno_fmt = {
__raw =
#lua
''
function()
local defaultFormatter = require("conform.formatters.deno_fmt")
return vim.tbl_extend("force", defaultFormatter, {
command = function()
local exe = vim.fn["exepath"]("deno")
if exe ~= "" then
return exe
else
return "${lib.getExe pkgs.deno}"
end
end
})
end
'';
};
};
}

34
pkgs/nixvim/lang/lua.nix Normal file
View file

@ -0,0 +1,34 @@
{
lib,
pkgs,
...
}: {
lsp.servers.lua_ls = {
enable = true;
};
youthlic.plugins.conform-nvim.settings = {
formatters_by_ft.lua = {
__unkeyed-1 = "stylua";
lsp_format = "fallback";
};
formatters.stylua = {
__raw =
#lua
''
function()
local defaultFormatter = require("conform.formatters.stylua")
return vim.tbl_extend("force", defaultFormatter, {
command = function()
local exe = vim.fn["exepath"]("stylua")
if exe ~= "" then
return exe
else
return "${lib.getExe pkgs.stylua}"
end
end
})
end
'';
};
};
}

View file

@ -0,0 +1,30 @@
{
lib,
pkgs,
...
}: {
youthlic.plugins.conform-nvim.settings = {
formatters_by_ft.markdown = {
__unkeyed-1 = "deno_fmt";
};
formatters.deno_fmt = {
__raw =
#lua
''
function()
local defaultFormatter = require("conform.formatters.deno_fmt")
return vim.tbl_extend("force", defaultFormatter, {
command = function()
local exe = vim.fn["exepath"]("deno")
if exe ~= "" then
return exe
else
return "${lib.getExe pkgs.deno}"
end
end
})
end
'';
};
};
}

61
pkgs/nixvim/lang/nix.nix Normal file
View file

@ -0,0 +1,61 @@
{
lib,
pkgs,
...
}: {
lsp.servers = {
nixd = {
enable = true;
};
nil_ls = {
enable = true;
};
};
youthlic.plugins.conform-nvim.settings = {
formatters_by_ft.nix = {
__unkeyed-1 = "alejandra";
__unkeyed-2 = "injected";
lsp_format = "fallback";
};
formatters = {
alejandra = {
__raw =
#lua
''
function()
local defaultFormatter = require("conform.formatters.alejandra")
return vim.tbl_extend("force", defaultFormatter, {
command = function()
local exe = vim.fn["exepath"]("alejandra")
if exe ~= "" then
return exe
else
return "${lib.getExe pkgs.alejandra}"
end
end
})
end
'';
};
nixfmt = {
__raw =
#lua
''
function()
local defaultFormatter = require("conform.formatters.nixfmt")
return vim.tbl_extend("force", defaultFormatter, {
command = function()
local exe = vim.fn["exepath"]("nixfmt")
if exe ~= "" then
return exe
else
return "${lib.getExe pkgs.nixfmt-rfc-style}"
end
end
})
end
'';
};
};
};
}

View file

@ -0,0 +1,53 @@
{
lib,
pkgs,
...
}: {
youthlic.plugins.conform-nvim.settings = {
formatters_by_ft.python = {
__unkeyed-1 = "ruff_format";
__unkeyed-2 = "ruff_organize_imports";
lsp_format = "fallback";
};
formatters = {
ruff_organize_imports = {
__raw =
#lua
''
function()
local defaultFormatter = require("conform.formatters.ruff_organize_imports")
return vim.tbl_extend("force", defaultFormatter, {
command = function()
local exe = vim.fn["exepath"]("ruff")
if exe ~= "" then
return exe
else
return "${lib.getExe pkgs.ruff}"
end
end
})
end
'';
};
ruff_format = {
__raw =
#lua
''
function()
local defaultFormatter = require("conform.formatters.ruff_format")
return vim.tbl_extend("force", defaultFormatter, {
command = function()
local exe = vim.fn["exepath"]("ruff")
if exe ~= "" then
return exe
else
return "${lib.getExe pkgs.ruff}"
end
end
})
end
'';
};
};
};
}

31
pkgs/nixvim/lang/rust.nix Normal file
View file

@ -0,0 +1,31 @@
{
lib,
pkgs,
...
}: {
youthlic.plugins.conform-nvim.settings = {
formatters_by_ft.rust = {
__unkeyed-1 = "rustfmt";
lsp_format = "fallback";
};
formatters.rustfmt = {
__raw =
#lua
''
function()
local defaultFormatter = require("conform.formatters.rustfmt")
return vim.tbl_extend("force", defaultFormatter, {
command = function()
local exe = vim.fn["exepath"]("rustfmt")
if exe ~= "" then
return exe
else
return "${lib.getExe pkgs.rustfmt}"
end
end
})
end
'';
};
};
}

32
pkgs/nixvim/lang/toml.nix Normal file
View file

@ -0,0 +1,32 @@
{
lib,
pkgs,
...
}: {
youthlic.plugins.conform-nvim.settings = {
formatters_by_ft.toml = {
__unkeyed-1 = "taplo";
lsp_format = "fallback";
};
formatters.taplo = {
__raw =
#lua
''
function()
local defaultFormatter = require("conform.formatters.taplo")
return vim.tbl_extend("force", defaultFormatter, {
command = function()
local exe = vim.fn["exepath"]("taplo")
if exe ~= "" then
return exe
else
return "${lib.getExe pkgs.taplo}"
end
end,
args = { "format", "-o", "reorder_keys=true", "-o", "reorder_inline_tables=true", "-" },
})
end
'';
};
};
}

30
pkgs/nixvim/lang/yaml.nix Normal file
View file

@ -0,0 +1,30 @@
{
lib,
pkgs,
...
}: {
youthlic.plugins.conform-nvim.settings = {
formatters_by_ft.yaml = {
__unkeyed-1 = "deno_fmt";
};
formatters.deno_fmt = {
__raw =
#lua
''
function()
local defaultFormatter = require("conform.formatters.deno_fmt")
return vim.tbl_extend("force", defaultFormatter, {
command = function()
local exe = vim.fn["exepath"]("deno")
if exe ~= "" then
return exe
else
return "${lib.getExe pkgs.deno}"
end
end
})
end
'';
};
};
}

1
pkgs/nixvim/linting.nix Normal file
View file

@ -0,0 +1 @@
{...}: {}

35
pkgs/nixvim/lsp.nix Normal file
View file

@ -0,0 +1,35 @@
{...}: {
youthlic.plugins.lspconfig.enable = true;
lsp = {
inlayHints.enable = true;
luaConfig.post =
#lua
''
do
vim.diagnostic.config({
underline = true,
virtual_lines = {
current_line = true,
},
signs = true,
severity_sort = true,
float = {
scope = "cursor",
source = "if_many",
},
jump = {
on_jump = function(diagnostic, bufnr)
vim.diagnostic.open_float({
scope = "cursor",
severity_sort = true,
source = "if_many",
bufnr = bufnr,
})
end,
wrap = true,
},
})
end
'';
};
}

47
pkgs/nixvim/module.nix Normal file
View file

@ -0,0 +1,47 @@
{
lib,
config,
options,
...
}: let
cfg = config.youthlic;
in {
options = {
youthlic.plugins = lib.mkOption {
type = lib.types.attrsOf (lib.types.submodule ({
name,
lib,
...
}: {
freeformType = lib.types.anything;
options = {
enable = lib.mkEnableOption "nvimPlugins.${name}";
};
}));
default = {};
};
};
config = let
enabledPlugins = lib.filterAttrs (_name: value: value.enable) cfg.plugins;
in
lib.mkMerge [
{
plugins = enabledPlugins;
}
{
plugins = lib.pipe enabledPlugins [
builtins.attrNames
(lib.filter (name: options.plugins.${name} ? luaConfig))
(map (name:
lib.nameValuePair name {
luaConfig.post =
#lua
''
_M.load("${name}")
'';
}))
lib.listToAttrs
];
}
];
}

33
pkgs/nixvim/neovide.nix Normal file
View file

@ -0,0 +1,33 @@
{...}: {
extraConfigLua =
#lua
''
if vim.g.neovide then
vim.o.guifont = [[Maple Mono NF CN,Noto Color Emoji:h16]]
vim.g.neovide_opacity = 0.9
vim.g.linespace = 0.2
vim.g.neovide_text_gamma = 0.8
vim.g.neovide_text_contrast = 0.1
vim.g.neovide_floating_shadow = true
vim.g.neovide_floating_z_height = 10
vim.g.neovide_light_angle_degrees = 45
vim.g.neovide_light_radius = 5
vim.g.neovide_position_animation_length = 0.1
vim.g.neovide_scroll_animation_length = 0.2
vim.g.neovide_scroll_animation_far_lines = 5
vim.g.neovide_hide_mouse_when_typing = true
vim.g.neovide_refresh_rate = 120
vim.g.neovide_confirm_quit = true
vim.g.neovide_input_ime = true
vim.g.neovide_cursor_animation_length = 0.1
vim.g.neovide_cursor_short_animation_length = 0.04
vim.g.neovide_cursor_antialiasing = true
vim.g.neovide_cursor_animate_in_insert_mode = true
vim.g.neovide_cursor_animate_command_line = true
vim.g.neovide_cursor_unfocused_outline_width = 0.125
end
'';
}

77
pkgs/nixvim/options.nix Normal file
View file

@ -0,0 +1,77 @@
{...}: {
globals = {
mapleader = {
__raw =
#lua
''
vim.keycode("<Space>")
'';
};
};
opts = {
autoindent = true;
autoread = true;
backspace = ["indent" "eol" "start"];
backup = false;
breakindent = true;
breakindentopt = "sbr";
showbreak = "";
cdhome = true;
cedit = "<C-F>";
cmdheight = 1;
completeopt = ["fuzzy" "menuone" "noselect" "popup"];
concealcursor = "v";
confirm = true;
cursorline = true;
diffopt = ["algorithm:minimal" "closeoff" "context:20" "followwrap" "internal" "linematch:40"];
errorbells = true;
expandtab = true;
exrc = true;
foldcolumn = "auto";
fsync = true;
gdefault = false;
helplang = ["zh" "en"];
history = 10000;
hlsearch = true;
ignorecase = true;
smartcase = true;
inccommand = "split";
list = true;
listchars = "tab:--,trail:·,multispace: ,nbsp:,space:·"; # eol:⏎
magic = true;
more = true;
mouse = "a";
number = true;
numberwidth = 4;
relativenumber = true;
scrollback = 100000;
scrolloff = 5;
shiftround = true;
shiftwidth = 2;
showmode = false;
signcolumn = "auto";
smoothscroll = true;
splitbelow = true;
splitright = true;
startofline = true;
swapfile = false;
tabclose = "uselast";
tabstop = 2;
termguicolors = true;
undofile = true;
undolevels = 100000;
virtualedit = ["block" "onemore"];
whichwrap = "b,s,<,>";
wildmenu = true;
wildmode = ["full"];
wildoptions = ["fuzzy" "pum"];
winborder = "rounded";
wrap = true;
};
}

35
pkgs/nixvim/package.nix Normal file
View file

@ -0,0 +1,35 @@
{
makeNixvimWithModule,
pkgs,
lib,
nixvimPlugins,
neovim_git,
}:
makeNixvimWithModule {
inherit pkgs;
extraSpecialArgs = {
inherit nixvimPlugins;
};
module = {
imports = with lib; youthlic.loadImports' ./. (filter (name: !hasSuffix "/package.nix" (toString name)));
enableMan = true;
enablePrintInit = true;
package = neovim_git;
performance = {
# combinePlugins = {
# enable = true;
# standalonePlugins = [];
# };
byteCompileLua = {
enable = true;
configs = true;
initLua = true;
luaLib = true;
nvimRuntime = true;
plugins = true;
};
};
wrapRc = true;
luaLoader.enable = true;
};
}

View file

@ -0,0 +1,16 @@
{...}: {
youthlic.plugins = {
treesitter = {
enable = true;
# folding = true;
nixvimInjections = true;
settings = {
highlight = {
enable = true;
additional_vim_regex_highlighting = true;
};
indent.enable = true;
};
};
};
}

View file

@ -0,0 +1,69 @@
{...}: {
youthlic.plugins.bufferline = {
enable = true;
settings = {
options = {
close_command = {
__raw =
#lua
''
function(n)
Snacks.bufdelete(n)
end
'';
};
right_mouse_command = {
__raw =
#lua
''
function(n)
Snacks.bufdelete(n)
end
'';
};
diagnostics = "nvim_lsp";
always_show_bufferline = false;
diagnostics_indicator = {
__raw =
#lua
''
function(_, _, diag)
local icons = {
Error = " ",
Warn = " ",
Hint = " ",
Info = " ",
}
local ret = (diag.error and icons.Error .. diag.error .. " " or "")
.. (diag.warning and icons.Warn .. diag.warning or "")
return vim.trim(ret)
end
'';
};
offsets = [
{
filetype = "neo-tree";
text = "Neo-tree";
highlight = "Directory";
text_align = "left";
}
{
filetype = "snacks_layout_box";
}
];
get_element_icon = {
__raw =
#lua
''
function(opts)
local icons = {
octo = "",
}
return icons[opts.filetype]
end
'';
};
};
};
};
}

View file

@ -0,0 +1,7 @@
{...}: {
colorschemes.gruvbox = {
enable = true;
settings = {
};
};
}

View file

@ -0,0 +1,21 @@
{...}: {
youthlic.plugins.lualine = {
enable = true;
luaConfig.pre =
#lua
''
do
vim.g.lualine_laststatus = vim.o.laststatus
if vim.fn.argc(-1) > 0 then
vim.o.statusline = " "
else
vim.o.laststatus = 0
end
end
do
vim.o.laststatus = vim.g.lualine_laststatus
end
'';
settings = {};
};
}

View file

@ -0,0 +1,38 @@
{...}: {
extraConfigLuaPre =
#lua
''
do
_M.plugins = {}
_M.load = function(name)
_M.plugins = vim.tbl_deep_extend("force", _M.plugins, {
name = {
loaded = true,
},
})
vim.schedule(function()
vim.api.nvim_exec_autocmds("User", { pattern = "LazyLoad", modeline = false, data = name })
end)
end
_M._is_loaded = function(name)
local plugins = _M.plugins
return plugins[name] and plugins[name].loaded
end
_M.on_load = function(name, fn)
if _M._is_loaded(name) then
fn(name)
else
vim.api.nvim_create_autocmd("User", {
pattern = "LazyLoad",
callback = function(event)
if event.data == name then
fn(name)
return true
end
end,
})
end
end
end
'';
}

View file

@ -0,0 +1,85 @@
{...}: {
youthlic.plugins.snacks = {
enable = true;
luaConfig.content =
#lua
''
-- Terminal Mappings
_M.__util_plugin_snacks_term_nav = function(direction)
---@param self snacks.terminal
return function(self)
return self:is_floating() and "<c-" .. direction .. ">"
or vim.schedule(function()
vim.cmd.wincmd(direction)
end)
end
end
'';
settings = {
bigfile = {
enabled = true;
};
quickfile = {
enabled = true;
};
terminal = {
win = {
keys = {
nav_h = {
__unkeyed-1 = "<C-w>h";
__unkeyed-2 = {
__raw =
#lua
''
_M.__util_plugin_snacks_term_nav("h")
'';
};
desc = "Go to Left Window";
expr = true;
mode = "t";
};
nav_j = {
__unkeyed-1 = "<C-w>j";
__unkeyed-2 = {
__raw =
#lua
''
_M.__util_plugin_snacks_term_nav("j")
'';
};
desc = "Go to Lower Window";
expr = true;
mode = "t";
};
nav_k = {
__unkeyed-1 = "<C-w>k";
__unkeyed-2 = {
__raw =
#lua
''
_M.__util_plugin_snacks_term_nav("k")
'';
};
desc = "Go to Upper Window";
expr = true;
mode = "t";
};
nav_l = {
__unkeyed-1 = "<C-w>l";
__unkeyed-2 = {
__raw =
#lua
''
_M.__util_plugin_snacks_term_nav("l")
'';
};
desc = "Go to Right Window";
expr = true;
mode = "t";
};
};
};
};
};
};
}

View file

@ -0,0 +1,13 @@
{nixvimPlugins, ...}: {
extraPlugins = [
{
config =
#vim
''
lua << EOF
EOF
'';
plugin = nixvimPlugins.vim-startuptime;
}
];
}

View file

@ -0,0 +1,11 @@
{
srcs,
vimUtils,
}: let
inherit (srcs.nvim_vim-startuptime) src version date;
in
vimUtils.buildVimPlugin {
pname = "vim-startuptime";
version = "0-unstable-${date}-git${version}";
inherit src;
}

View file

@ -1,16 +1,16 @@
[project]
name = "python"
version = "0.1.0"
dependencies = ["numpy>=2.2.6"]
description = "Add your description here"
name = "python"
readme = "README.md"
requires-python = ">=3.12"
dependencies = ["numpy>=2.2.6"]
version = "0.1.0"
[dependency-groups]
dev = ["ipython>=9.2.0", "ptpython>=3.0.30"]
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
requires = ["hatchling"]
[tool.hatch.build.targets.wheel]
packages = ["app"]

View file

@ -1,4 +1,4 @@
[toolchain]
channel = "stable"
profile = "default"
components = ["rust-src"]
profile = "default"