helix: move to modules/home
Signed-off-by: Bloxx12 <charlie@charlieroot.dev> Change-Id: I6a6a6964949ee86c73c9dee2fc4a89c01a7a0579
This commit is contained in:
parent
917074fb32
commit
71505a4629
7 changed files with 494 additions and 572 deletions
|
@ -25,7 +25,6 @@
|
||||||
inherit inputs pkgs sources;
|
inherit inputs pkgs sources;
|
||||||
})
|
})
|
||||||
fish
|
fish
|
||||||
helix
|
|
||||||
kakoune
|
kakoune
|
||||||
nushell
|
nushell
|
||||||
;
|
;
|
||||||
|
|
|
@ -4,14 +4,11 @@
|
||||||
# which should have a small attack surface.
|
# which should have a small attack surface.
|
||||||
{
|
{
|
||||||
lib,
|
lib,
|
||||||
self,
|
|
||||||
pkgs,
|
pkgs,
|
||||||
sources,
|
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
inherit (lib.meta) hiPrioSet;
|
inherit (lib.meta) hiPrioSet;
|
||||||
helix = pkgs.callPackage (self + "/packages/helix") { inherit sources; };
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
environment.systemPackages =
|
environment.systemPackages =
|
||||||
|
@ -46,9 +43,8 @@ in
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
++ builtins.attrValues (hiPrioSet {
|
++ builtins.attrValues (hiPrioSet {
|
||||||
inherit helix;
|
})
|
||||||
inherit (pkgs) uutils-coreutils-noprefix;
|
++ [ (lib.hiPrio pkgs.uutils-coreutils-noprefix) ];
|
||||||
});
|
|
||||||
# helix as the only editor, a reasonable choice.
|
# helix as the only editor, a reasonable choice.
|
||||||
environment.variables.EDITOR = "hx";
|
environment.variables.EDITOR = "hx";
|
||||||
}
|
}
|
||||||
|
|
492
modules/home/dev/helix.hjem.nix
Normal file
492
modules/home/dev/helix.hjem.nix
Normal file
|
@ -0,0 +1,492 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
sources,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
inherit (lib.attrsets) mapAttrs' nameValuePair;
|
||||||
|
|
||||||
|
helix = pkgs.helix.overrideAttrs (
|
||||||
|
finalAttrs: previousAttrs: {
|
||||||
|
version = "25.07.2";
|
||||||
|
src = pkgs.fetchzip {
|
||||||
|
url = "https://github.com/bloxx12/helix/releases/download/${finalAttrs.version}/helix-${finalAttrs.version}-source.tar.xz";
|
||||||
|
hash = "sha256-ZNsQwFfPXe6oewajx1tl68W60kVo7q2SuvTgy/o1HKk=";
|
||||||
|
stripRoot = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
doInstallCheck = false;
|
||||||
|
|
||||||
|
cargoDeps = pkgs.rustPlatform.fetchCargoVendor {
|
||||||
|
inherit (helix) src;
|
||||||
|
hash = "sha256-3poZSvIrkx8lguxxDeNfngW6+4hH8TV/LHcZx5W5aXg=";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
helix-with-plugins = pkgs.helix.overrideAttrs (
|
||||||
|
finalAttrs: previousAttrs: {
|
||||||
|
name = "helix-with-plugins";
|
||||||
|
version = "25.07.2";
|
||||||
|
src = pkgs.fetchzip {
|
||||||
|
url = "https://github.com/bloxx12/helix/releases/download/${finalAttrs.version}/helix-${finalAttrs.version}-source.tar.xz";
|
||||||
|
hash = "sha256-ZNsQwFfPXe6oewajx1tl68W60kVo7q2SuvTgy/o1HKk=";
|
||||||
|
stripRoot = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
doInstallCheck = false;
|
||||||
|
|
||||||
|
cargoDeps = pkgs.rustPlatform.fetchCargoVendor {
|
||||||
|
inherit (helix) src;
|
||||||
|
hash = "sha256-3poZSvIrkx8lguxxDeNfngW6+4hH8TV/LHcZx5W5aXg=";
|
||||||
|
};
|
||||||
|
postInstall = ''
|
||||||
|
mv $out/bin/hx $out/bin/hxp
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
toml = pkgs.formats.toml { };
|
||||||
|
|
||||||
|
languages =
|
||||||
|
let
|
||||||
|
inherit (lib.meta) getExe getExe';
|
||||||
|
|
||||||
|
nixfmt = pkgs.callPackage "${sources.nixfmt}/default.nix" { };
|
||||||
|
|
||||||
|
nil = pkgs.rustPlatform.buildRustPackage {
|
||||||
|
pname = "nil";
|
||||||
|
version = "unstable";
|
||||||
|
src = sources.nil;
|
||||||
|
cargoLock = {
|
||||||
|
lockFile = "${sources.nil}/Cargo.lock";
|
||||||
|
allowBuiltinFetchGit = false;
|
||||||
|
};
|
||||||
|
nativeBuildInputs = [ pkgs.nixVersions.latest ];
|
||||||
|
|
||||||
|
doInstallCheck = false;
|
||||||
|
meta.mainProgram = "nil";
|
||||||
|
};
|
||||||
|
|
||||||
|
new-deadnix = pkgs.deadnix.overrideAttrs (
|
||||||
|
finalAttrs: previousAttrs: {
|
||||||
|
version = "unstable-15-07-2025";
|
||||||
|
src = pkgs.fetchFromGitHub {
|
||||||
|
owner = "astro";
|
||||||
|
repo = "deadnix";
|
||||||
|
rev = "d75457b95d7cfa82fcd60970939f76fccfce19e5";
|
||||||
|
hash = "sha256-O/z2neAXL8JNkGosvxC+DyZnnJ8zYP9XHApxHVmlzfY=";
|
||||||
|
};
|
||||||
|
|
||||||
|
doInstallCheck = false;
|
||||||
|
|
||||||
|
cargoDeps = pkgs.rustPlatform.fetchCargoVendor {
|
||||||
|
inherit (new-deadnix) src;
|
||||||
|
hash = "sha256-O8yhqyPflOvQXAA19k1XpbrHysgV5VNWLBX0l5Q5GkM=";
|
||||||
|
};
|
||||||
|
meta.mainProgram = "nil";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
in
|
||||||
|
{
|
||||||
|
language =
|
||||||
|
let
|
||||||
|
mark = lang: {
|
||||||
|
command = getExe pkgs.deno;
|
||||||
|
args = [
|
||||||
|
"fmt"
|
||||||
|
"-"
|
||||||
|
"--ext"
|
||||||
|
lang
|
||||||
|
];
|
||||||
|
};
|
||||||
|
in
|
||||||
|
[
|
||||||
|
{
|
||||||
|
name = "bash";
|
||||||
|
auto-format = true;
|
||||||
|
formatter = {
|
||||||
|
command = getExe pkgs.shfmt;
|
||||||
|
args = [
|
||||||
|
"-i"
|
||||||
|
"2"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "clojure";
|
||||||
|
injection-regex = "(clojure|clj|edn|boot|yuck)";
|
||||||
|
file-types = [
|
||||||
|
"clj"
|
||||||
|
"cljs"
|
||||||
|
"cljc"
|
||||||
|
"clje"
|
||||||
|
"cljr"
|
||||||
|
"cljx"
|
||||||
|
"edn"
|
||||||
|
"boot"
|
||||||
|
"yuck"
|
||||||
|
];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "cmake";
|
||||||
|
auto-format = true;
|
||||||
|
language-servers = [ "cmake-language-server" ];
|
||||||
|
formatter = {
|
||||||
|
command = getExe pkgs.cmake-format;
|
||||||
|
args = [ "-" ];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "javascript";
|
||||||
|
auto-format = true;
|
||||||
|
language-servers = [
|
||||||
|
"dprint"
|
||||||
|
"typescript-language-server"
|
||||||
|
];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "json";
|
||||||
|
formatter = mark "json";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "markdown";
|
||||||
|
auto-format = true;
|
||||||
|
formatter = mark "md";
|
||||||
|
language-servers = [ "taplo" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "nix";
|
||||||
|
language-servers = [ "nil" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "qml";
|
||||||
|
language-servers = [ "qmlls" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "python";
|
||||||
|
auto-format = true;
|
||||||
|
language-servers = [
|
||||||
|
"basedpyright"
|
||||||
|
"ruff"
|
||||||
|
];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "typescript";
|
||||||
|
auto-format = true;
|
||||||
|
language-servers = [
|
||||||
|
"dprint"
|
||||||
|
"typescript-language-server"
|
||||||
|
];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "rust";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "c";
|
||||||
|
auto-format = true;
|
||||||
|
language-servers = [ "clangd" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "zig";
|
||||||
|
auto-format = true;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "c";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
language-server = {
|
||||||
|
bash-language-server = {
|
||||||
|
command = getExe pkgs.bash-language-server;
|
||||||
|
args = [ "start" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
rust-analyzer = {
|
||||||
|
command = getExe pkgs.rust-analyzer;
|
||||||
|
config.rust-analyzer = {
|
||||||
|
checkOnSave.command = "clippy";
|
||||||
|
procMacro.enable = true;
|
||||||
|
cargo = {
|
||||||
|
loadOutDirsFromCheck = true;
|
||||||
|
features = "all";
|
||||||
|
};
|
||||||
|
assist = {
|
||||||
|
preferSelf = true;
|
||||||
|
};
|
||||||
|
check = {
|
||||||
|
command = "clippy";
|
||||||
|
extraArgs = [
|
||||||
|
"--"
|
||||||
|
"-W"
|
||||||
|
"clippy::pedantic"
|
||||||
|
"-W"
|
||||||
|
"clippy::nursery"
|
||||||
|
"-W"
|
||||||
|
"clippy::perf"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
lens = {
|
||||||
|
references = true;
|
||||||
|
methodReferences = true;
|
||||||
|
};
|
||||||
|
completion.autoimport.enable = true;
|
||||||
|
experimental.procAttrMacros = true;
|
||||||
|
interpret.tests = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
clangd = {
|
||||||
|
command = "${pkgs.clang-tools}/bin/clangd";
|
||||||
|
clangd.fallbackFlags = [ "-std=c++2b" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
cmake-language-server = {
|
||||||
|
command = getExe pkgs.cmake-language-server;
|
||||||
|
};
|
||||||
|
|
||||||
|
deno-lsp = {
|
||||||
|
command = getExe pkgs.deno;
|
||||||
|
args = [ "lsp" ];
|
||||||
|
environment.NO_COLOR = "1";
|
||||||
|
config.deno = {
|
||||||
|
enable = true;
|
||||||
|
lint = true;
|
||||||
|
unstable = true;
|
||||||
|
suggest = {
|
||||||
|
completeFunctionCalls = false;
|
||||||
|
imports = {
|
||||||
|
hosts."https://deno.land" = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
inlayHints = {
|
||||||
|
enumMemberValues.enabled = true;
|
||||||
|
functionLikeReturnTypes.enabled = true;
|
||||||
|
parameterNames.enabled = "all";
|
||||||
|
parameterTypes.enabled = true;
|
||||||
|
propertyDeclarationTypes.enabled = true;
|
||||||
|
variableTypes.enabled = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
dprint = {
|
||||||
|
command = getExe pkgs.dprint;
|
||||||
|
args = [ "lsp" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
nil = {
|
||||||
|
command = getExe nil;
|
||||||
|
config.nil = {
|
||||||
|
formatting.command = [ "${getExe nixfmt}" ];
|
||||||
|
diagnostics = {
|
||||||
|
bindingEndHintMinLines = 3;
|
||||||
|
};
|
||||||
|
nix.flake = {
|
||||||
|
autoArchive = true;
|
||||||
|
# autoEvalInputs = true;
|
||||||
|
nixpkgsInputName = "nixpkgs";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
deadnix = {
|
||||||
|
command = getExe new-deadnix;
|
||||||
|
};
|
||||||
|
|
||||||
|
typescript-language-server = {
|
||||||
|
command = getExe pkgs.typescript-language-server;
|
||||||
|
args = [ "--stdio" ];
|
||||||
|
config = {
|
||||||
|
typescript-language-server.source = {
|
||||||
|
addMissingImports.ts = true;
|
||||||
|
fixAll.ts = true;
|
||||||
|
organizeImports.ts = true;
|
||||||
|
removeUnusedImports.ts = true;
|
||||||
|
sortImports.ts = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
ruff = {
|
||||||
|
command = getExe pkgs.ruff;
|
||||||
|
args = [ "server" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
qmlls = {
|
||||||
|
command = getExe' pkgs.kdePackages.qtdeclarative "qmlls";
|
||||||
|
args = [ "-E" ];
|
||||||
|
};
|
||||||
|
basedpyright.command = "${pkgs.basedpyright}/bin/basedpyright-langserver";
|
||||||
|
|
||||||
|
vscode-css-language-server = {
|
||||||
|
command = "${pkgs.vscode-langservers-extracted}/bin/vscode-css-language-server";
|
||||||
|
args = [ "--stdio" ];
|
||||||
|
config = {
|
||||||
|
provideFormatter = true;
|
||||||
|
css.validate.enable = true;
|
||||||
|
scss.validate.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
zls = {
|
||||||
|
command = getExe pkgs.zls;
|
||||||
|
config = {
|
||||||
|
enable_build_on_save = true;
|
||||||
|
build_on_save_args = [
|
||||||
|
"check"
|
||||||
|
"-fincremental"
|
||||||
|
"--watch"
|
||||||
|
];
|
||||||
|
enable_autofix = false;
|
||||||
|
warn_style = true;
|
||||||
|
highlight_global_var_declarations = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
themes = {
|
||||||
|
rose_pine_transparent = {
|
||||||
|
inherits = "rose_pine";
|
||||||
|
"ui.background" = { };
|
||||||
|
};
|
||||||
|
rose_pine_dawn_transparent = {
|
||||||
|
inherits = "rose_pine_dawn";
|
||||||
|
"ui.background" = { };
|
||||||
|
};
|
||||||
|
nightfox_transparent = {
|
||||||
|
inherits = "nightfox";
|
||||||
|
"ui.background" = { };
|
||||||
|
};
|
||||||
|
nord_transparent = {
|
||||||
|
inherits = "nord";
|
||||||
|
"ui.background" = { };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
theme = "nord";
|
||||||
|
editor = {
|
||||||
|
cursorline = true;
|
||||||
|
color-modes = true;
|
||||||
|
true-color = true;
|
||||||
|
indent-guides.render = true;
|
||||||
|
lsp = {
|
||||||
|
enable = true;
|
||||||
|
auto-signature-help = true;
|
||||||
|
display-inlay-hints = false;
|
||||||
|
display-messages = true;
|
||||||
|
snippets = true;
|
||||||
|
};
|
||||||
|
file-picker = {
|
||||||
|
hidden = true;
|
||||||
|
};
|
||||||
|
line-number = "relative";
|
||||||
|
auto-format = true;
|
||||||
|
completion-timeout = 5;
|
||||||
|
mouse = true;
|
||||||
|
bufferline = "multiple";
|
||||||
|
soft-wrap.enable = true;
|
||||||
|
word-completion = {
|
||||||
|
enable = true;
|
||||||
|
trigger-length = 2;
|
||||||
|
};
|
||||||
|
cursor-shape = {
|
||||||
|
insert = "bar";
|
||||||
|
normal = "block";
|
||||||
|
select = "underline";
|
||||||
|
};
|
||||||
|
statusline = {
|
||||||
|
left = [
|
||||||
|
"spinner"
|
||||||
|
"version-control"
|
||||||
|
"diagnostics"
|
||||||
|
"file-name"
|
||||||
|
];
|
||||||
|
right = [
|
||||||
|
"file-base-name"
|
||||||
|
"file-type"
|
||||||
|
"position"
|
||||||
|
"file-encoding"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
gutters.layout = [
|
||||||
|
"diff"
|
||||||
|
"diagnostics"
|
||||||
|
"line-numbers"
|
||||||
|
"spacer"
|
||||||
|
];
|
||||||
|
inline-diagnostics = {
|
||||||
|
cursor-line = "hint";
|
||||||
|
other-lines = "error";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
keys = {
|
||||||
|
normal = {
|
||||||
|
space = {
|
||||||
|
g = [
|
||||||
|
":new"
|
||||||
|
":buffer-close!"
|
||||||
|
":redraw"
|
||||||
|
];
|
||||||
|
i = ":toggle lsp.display-inlay-hints";
|
||||||
|
};
|
||||||
|
esc = [
|
||||||
|
"collapse_selection"
|
||||||
|
"keep_primary_selection"
|
||||||
|
"normal_mode"
|
||||||
|
];
|
||||||
|
A-H = "goto_previous_buffer";
|
||||||
|
A-L = "goto_next_buffer";
|
||||||
|
A-w = ":buffer-close";
|
||||||
|
A-f = ":format";
|
||||||
|
A-r = ":reload";
|
||||||
|
A-x = "extend_to_line_bounds";
|
||||||
|
X = [
|
||||||
|
"extend_line_up"
|
||||||
|
"extend_to_line_bounds"
|
||||||
|
];
|
||||||
|
";" = "flip_selections";
|
||||||
|
"A-;" = "collapse_selection";
|
||||||
|
|
||||||
|
# Kakoune-like config
|
||||||
|
H = "extend_char_left";
|
||||||
|
J = "extend_line_down";
|
||||||
|
K = "extend_line_up";
|
||||||
|
L = "extend_char_right";
|
||||||
|
};
|
||||||
|
select = {
|
||||||
|
A-x = "extend_to_line_bounds";
|
||||||
|
X = [
|
||||||
|
"extend_line_up"
|
||||||
|
"extend_to_line_bounds"
|
||||||
|
];
|
||||||
|
g = {
|
||||||
|
e = "goto_file_end";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
packages = builtins.attrValues {
|
||||||
|
inherit helix;
|
||||||
|
inherit (pkgs)
|
||||||
|
tinymist
|
||||||
|
taplo
|
||||||
|
kdlfmt
|
||||||
|
gopls
|
||||||
|
;
|
||||||
|
};
|
||||||
|
|
||||||
|
files = {
|
||||||
|
".config/helix/config.toml".source = toml.generate "helix-config.toml" settings;
|
||||||
|
".config/helix/languages.toml".source = toml.generate "helix-languages.toml" languages;
|
||||||
|
|
||||||
|
}
|
||||||
|
// mapAttrs' (
|
||||||
|
name: value:
|
||||||
|
nameValuePair ".config/helix/themes/${name}.toml" {
|
||||||
|
source = toml.generate "helix-theme-${name}.toml" value;
|
||||||
|
}
|
||||||
|
) themes;
|
||||||
|
|
||||||
|
}
|
|
@ -5,7 +5,6 @@
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
inherit (pkgs) lib;
|
inherit (pkgs) lib;
|
||||||
helix = pkgs.callPackage ./helix { };
|
|
||||||
kakoune = pkgs.callPackage ./kakoune.nix { };
|
kakoune = pkgs.callPackage ./kakoune.nix { };
|
||||||
fish = pkgs.callPackage ./fish { inherit lib; };
|
fish = pkgs.callPackage ./fish { inherit lib; };
|
||||||
nushell = pkgs.callPackage ./nushell { };
|
nushell = pkgs.callPackage ./nushell { };
|
||||||
|
@ -14,7 +13,6 @@ in
|
||||||
inherit
|
inherit
|
||||||
kakoune
|
kakoune
|
||||||
fish
|
fish
|
||||||
helix
|
|
||||||
nushell
|
nushell
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
{
|
|
||||||
inherits = "gruvbox_dark_hard";
|
|
||||||
"ui.background" = { };
|
|
||||||
}
|
|
|
@ -1,220 +0,0 @@
|
||||||
{
|
|
||||||
sources,
|
|
||||||
basedpyright,
|
|
||||||
bash-language-server,
|
|
||||||
callPackage,
|
|
||||||
clang-tools,
|
|
||||||
clippy,
|
|
||||||
cmake-format,
|
|
||||||
cmake-language-server,
|
|
||||||
deadnix,
|
|
||||||
deno,
|
|
||||||
dprint,
|
|
||||||
fetchzip,
|
|
||||||
formats,
|
|
||||||
gdb,
|
|
||||||
golangci-lint-langserver,
|
|
||||||
gopls,
|
|
||||||
helix,
|
|
||||||
kdePackages,
|
|
||||||
kdlfmt,
|
|
||||||
lazygit,
|
|
||||||
lib,
|
|
||||||
lldb_19,
|
|
||||||
makeWrapper,
|
|
||||||
nixd,
|
|
||||||
ruff,
|
|
||||||
rust-analyzer,
|
|
||||||
rustPlatform,
|
|
||||||
rustfmt,
|
|
||||||
shellcheck,
|
|
||||||
shfmt,
|
|
||||||
simple-completion-language-server,
|
|
||||||
superhtml,
|
|
||||||
symlinkJoin,
|
|
||||||
taplo,
|
|
||||||
tinymist,
|
|
||||||
typescript-language-server,
|
|
||||||
vscode-langservers-extracted,
|
|
||||||
zls,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
inherit (lib.meta) getExe;
|
|
||||||
|
|
||||||
custom-helix = helix.overrideAttrs (
|
|
||||||
finalAttrs: previousAttrs: {
|
|
||||||
version = "25.07.2";
|
|
||||||
src = fetchzip {
|
|
||||||
url = "https://github.com/bloxx12/helix/releases/download/${finalAttrs.version}/helix-${finalAttrs.version}-source.tar.xz";
|
|
||||||
hash = "sha256-ZNsQwFfPXe6oewajx1tl68W60kVo7q2SuvTgy/o1HKk=";
|
|
||||||
stripRoot = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
doInstallCheck = false;
|
|
||||||
|
|
||||||
cargoDeps = rustPlatform.fetchCargoVendor {
|
|
||||||
inherit (custom-helix) src;
|
|
||||||
hash = "sha256-3poZSvIrkx8lguxxDeNfngW6+4hH8TV/LHcZx5W5aXg=";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
toml = formats.toml { };
|
|
||||||
|
|
||||||
helix-languages = callPackage ./languages.nix { inherit lib sources; };
|
|
||||||
colorscheme = toml.generate "colorscheme.toml" (import ./colorscheme.nix);
|
|
||||||
|
|
||||||
helix-config = {
|
|
||||||
theme = "theme_transparent";
|
|
||||||
editor = {
|
|
||||||
cursorline = false;
|
|
||||||
color-modes = true;
|
|
||||||
true-color = true;
|
|
||||||
indent-guides.render = true;
|
|
||||||
lsp = {
|
|
||||||
enable = true;
|
|
||||||
auto-signature-help = true;
|
|
||||||
display-inlay-hints = false;
|
|
||||||
display-messages = true;
|
|
||||||
snippets = true;
|
|
||||||
};
|
|
||||||
file-picker = {
|
|
||||||
hidden = true;
|
|
||||||
};
|
|
||||||
line-number = "relative";
|
|
||||||
auto-format = true;
|
|
||||||
completion-timeout = 5;
|
|
||||||
mouse = true;
|
|
||||||
bufferline = "multiple";
|
|
||||||
soft-wrap.enable = true;
|
|
||||||
word-completion = {
|
|
||||||
enable = true;
|
|
||||||
trigger-length = 2;
|
|
||||||
};
|
|
||||||
cursor-shape = {
|
|
||||||
insert = "bar";
|
|
||||||
normal = "block";
|
|
||||||
select = "underline";
|
|
||||||
};
|
|
||||||
statusline = {
|
|
||||||
left = [
|
|
||||||
"spinner"
|
|
||||||
"version-control"
|
|
||||||
"diagnostics"
|
|
||||||
"file-name"
|
|
||||||
];
|
|
||||||
right = [
|
|
||||||
"file-base-name"
|
|
||||||
"file-type"
|
|
||||||
"position"
|
|
||||||
"file-encoding"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
gutters.layout = [
|
|
||||||
"diff"
|
|
||||||
"diagnostics"
|
|
||||||
"line-numbers"
|
|
||||||
"spacer"
|
|
||||||
];
|
|
||||||
inline-diagnostics = {
|
|
||||||
cursor-line = "hint";
|
|
||||||
other-lines = "error";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
keys = {
|
|
||||||
normal = {
|
|
||||||
space = {
|
|
||||||
g = [
|
|
||||||
":new"
|
|
||||||
":insert-output XDG_CONFIG_HOME=~/.config ${getExe lazygit}"
|
|
||||||
":buffer-close!"
|
|
||||||
":redraw"
|
|
||||||
];
|
|
||||||
i = ":toggle lsp.display-inlay-hints";
|
|
||||||
};
|
|
||||||
esc = [
|
|
||||||
"collapse_selection"
|
|
||||||
"keep_primary_selection"
|
|
||||||
"normal_mode"
|
|
||||||
];
|
|
||||||
A-H = "goto_previous_buffer";
|
|
||||||
A-L = "goto_next_buffer";
|
|
||||||
A-w = ":buffer-close";
|
|
||||||
A-f = ":format";
|
|
||||||
A-r = ":reload";
|
|
||||||
A-x = "extend_to_line_bounds";
|
|
||||||
X = [
|
|
||||||
"extend_line_up"
|
|
||||||
"extend_to_line_bounds"
|
|
||||||
];
|
|
||||||
";" = "flip_selections";
|
|
||||||
"A-;" = "collapse_selection";
|
|
||||||
|
|
||||||
# Kakoune-like config
|
|
||||||
H = "extend_char_left";
|
|
||||||
J = "extend_line_down";
|
|
||||||
K = "extend_line_up";
|
|
||||||
L = "extend_char_right";
|
|
||||||
};
|
|
||||||
select = {
|
|
||||||
A-x = "extend_to_line_bounds";
|
|
||||||
X = [
|
|
||||||
"extend_line_up"
|
|
||||||
"extend_to_line_bounds"
|
|
||||||
];
|
|
||||||
g = {
|
|
||||||
e = "goto_file_end";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
wrapped-helix = symlinkJoin {
|
|
||||||
name = "helix-wrapped";
|
|
||||||
paths = [
|
|
||||||
custom-helix
|
|
||||||
|
|
||||||
# Bash
|
|
||||||
bash-language-server
|
|
||||||
# C/C++
|
|
||||||
clang-tools
|
|
||||||
clippy
|
|
||||||
golangci-lint-langserver
|
|
||||||
gopls
|
|
||||||
lldb_19
|
|
||||||
# Markdown
|
|
||||||
taplo
|
|
||||||
|
|
||||||
nixd
|
|
||||||
rust-analyzer
|
|
||||||
rustfmt
|
|
||||||
# Shell
|
|
||||||
shellcheck
|
|
||||||
|
|
||||||
kdlfmt
|
|
||||||
|
|
||||||
superhtml
|
|
||||||
# toml
|
|
||||||
taplo
|
|
||||||
# typst
|
|
||||||
tinymist
|
|
||||||
# typst lsp
|
|
||||||
vscode-langservers-extracted
|
|
||||||
|
|
||||||
kdlfmt
|
|
||||||
|
|
||||||
# zig language server
|
|
||||||
zls
|
|
||||||
];
|
|
||||||
nativeBuildInputs = [ makeWrapper ];
|
|
||||||
postBuild = ''
|
|
||||||
mkdir -p $out/config/helix/themes
|
|
||||||
cp "${toml.generate "config.toml" helix-config}" $out/config/helix/config.toml
|
|
||||||
cp "${helix-languages}" $out/config/helix/languages.toml
|
|
||||||
cp "${colorscheme}" $out/config/helix/themes/theme_transparent.toml
|
|
||||||
wrapProgram $out/bin/hx --set \
|
|
||||||
XDG_CONFIG_HOME $out/config
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
in
|
|
||||||
wrapped-helix
|
|
|
@ -1,339 +0,0 @@
|
||||||
{
|
|
||||||
sources,
|
|
||||||
basedpyright,
|
|
||||||
bash-language-server,
|
|
||||||
callPackage,
|
|
||||||
clang-tools,
|
|
||||||
cmake-format,
|
|
||||||
cmake-language-server,
|
|
||||||
deadnix,
|
|
||||||
deno,
|
|
||||||
dprint,
|
|
||||||
fetchFromGitHub,
|
|
||||||
formats,
|
|
||||||
gdb,
|
|
||||||
kdePackages,
|
|
||||||
lib,
|
|
||||||
ruff,
|
|
||||||
nixVersions,
|
|
||||||
rustPlatform,
|
|
||||||
shfmt,
|
|
||||||
typescript-language-server,
|
|
||||||
vscode-langservers-extracted,
|
|
||||||
zls,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
inherit (lib.meta) getExe getExe';
|
|
||||||
|
|
||||||
toml = formats.toml { };
|
|
||||||
|
|
||||||
nixfmt = callPackage "${sources.nixfmt}/default.nix" { };
|
|
||||||
|
|
||||||
nil = rustPlatform.buildRustPackage {
|
|
||||||
pname = "nil";
|
|
||||||
version = "unstable";
|
|
||||||
src = sources.nil;
|
|
||||||
cargoLock = {
|
|
||||||
lockFile = "${sources.nil}/Cargo.lock";
|
|
||||||
allowBuiltinFetchGit = false;
|
|
||||||
};
|
|
||||||
nativeBuildInputs = [ nixVersions.latest ];
|
|
||||||
|
|
||||||
doInstallCheck = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
new-deadnix = deadnix.overrideAttrs (
|
|
||||||
finalAttrs: previousAttrs: {
|
|
||||||
version = "unstable-15-07-2025";
|
|
||||||
src = fetchFromGitHub {
|
|
||||||
owner = "astro";
|
|
||||||
repo = "deadnix";
|
|
||||||
rev = "d75457b95d7cfa82fcd60970939f76fccfce19e5";
|
|
||||||
hash = "sha256-O/z2neAXL8JNkGosvxC+DyZnnJ8zYP9XHApxHVmlzfY=";
|
|
||||||
};
|
|
||||||
|
|
||||||
doInstallCheck = false;
|
|
||||||
|
|
||||||
cargoDeps = rustPlatform.fetchCargoVendor {
|
|
||||||
inherit (new-deadnix) src;
|
|
||||||
hash = "sha256-O8yhqyPflOvQXAA19k1XpbrHysgV5VNWLBX0l5Q5GkM=";
|
|
||||||
};
|
|
||||||
meta.mainProgram = "nil";
|
|
||||||
}
|
|
||||||
);
|
|
||||||
helix-languages = {
|
|
||||||
language =
|
|
||||||
let
|
|
||||||
mark = lang: {
|
|
||||||
command = getExe deno;
|
|
||||||
args = [
|
|
||||||
"fmt"
|
|
||||||
"-"
|
|
||||||
"--ext"
|
|
||||||
lang
|
|
||||||
];
|
|
||||||
};
|
|
||||||
in
|
|
||||||
[
|
|
||||||
{
|
|
||||||
name = "bash";
|
|
||||||
auto-format = true;
|
|
||||||
formatter = {
|
|
||||||
command = getExe shfmt;
|
|
||||||
args = [
|
|
||||||
"-i"
|
|
||||||
"2"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "clojure";
|
|
||||||
injection-regex = "(clojure|clj|edn|boot|yuck)";
|
|
||||||
file-types = [
|
|
||||||
"clj"
|
|
||||||
"cljs"
|
|
||||||
"cljc"
|
|
||||||
"clje"
|
|
||||||
"cljr"
|
|
||||||
"cljx"
|
|
||||||
"edn"
|
|
||||||
"boot"
|
|
||||||
"yuck"
|
|
||||||
];
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "cmake";
|
|
||||||
auto-format = true;
|
|
||||||
language-servers = [ "cmake-language-server" ];
|
|
||||||
formatter = {
|
|
||||||
command = getExe cmake-format;
|
|
||||||
args = [ "-" ];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "javascript";
|
|
||||||
auto-format = true;
|
|
||||||
language-servers = [
|
|
||||||
"dprint"
|
|
||||||
"typescript-language-server"
|
|
||||||
];
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "json";
|
|
||||||
formatter = mark "json";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "markdown";
|
|
||||||
auto-format = true;
|
|
||||||
formatter = mark "md";
|
|
||||||
language-servers = [ "taplo" ];
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "nix";
|
|
||||||
language-servers = [ "nil" ];
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "qml";
|
|
||||||
language-servers = [ "qmlls" ];
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "python";
|
|
||||||
auto-format = true;
|
|
||||||
language-servers = [
|
|
||||||
"basedpyright"
|
|
||||||
"ruff"
|
|
||||||
];
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "typescript";
|
|
||||||
auto-format = true;
|
|
||||||
language-servers = [
|
|
||||||
"dprint"
|
|
||||||
"typescript-language-server"
|
|
||||||
];
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "rust";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "c";
|
|
||||||
auto-format = true;
|
|
||||||
language-servers = [ "clangd" ];
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "zig";
|
|
||||||
auto-format = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "c";
|
|
||||||
debugger = {
|
|
||||||
name = "gdb";
|
|
||||||
command = getExe gdb;
|
|
||||||
transport = "stdio";
|
|
||||||
templates = [
|
|
||||||
{
|
|
||||||
name = "binary";
|
|
||||||
request = "launch";
|
|
||||||
completion = [
|
|
||||||
{
|
|
||||||
name = "binary";
|
|
||||||
completion = "filename";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
args = {
|
|
||||||
program = "{0}";
|
|
||||||
runInTerminal = true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
language-server = {
|
|
||||||
bash-language-server = {
|
|
||||||
command = getExe bash-language-server;
|
|
||||||
args = [ "start" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
rust-analyzer = {
|
|
||||||
config.rust-analyzer = {
|
|
||||||
checkOnSave.command = "clippy";
|
|
||||||
procMacro.enable = true;
|
|
||||||
cargo = {
|
|
||||||
loadOutDirsFromCheck = true;
|
|
||||||
features = "all";
|
|
||||||
};
|
|
||||||
assist = {
|
|
||||||
preferSelf = true;
|
|
||||||
};
|
|
||||||
check = {
|
|
||||||
command = "clippy";
|
|
||||||
extraArgs = [
|
|
||||||
"--"
|
|
||||||
"-W"
|
|
||||||
"clippy::pedantic"
|
|
||||||
"-W"
|
|
||||||
"clippy::nursery"
|
|
||||||
"-W"
|
|
||||||
"clippy::perf"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
lens = {
|
|
||||||
references = true;
|
|
||||||
methodReferences = true;
|
|
||||||
};
|
|
||||||
completion.autoimport.enable = true;
|
|
||||||
experimental.procAttrMacros = true;
|
|
||||||
interpret.tests = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
clangd = {
|
|
||||||
command = "${clang-tools}/bin/clangd";
|
|
||||||
clangd.fallbackFlags = [ "-std=c++2b" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
cmake-language-server = {
|
|
||||||
command = getExe cmake-language-server;
|
|
||||||
};
|
|
||||||
|
|
||||||
deno-lsp = {
|
|
||||||
command = getExe deno;
|
|
||||||
args = [ "lsp" ];
|
|
||||||
environment.NO_COLOR = "1";
|
|
||||||
config.deno = {
|
|
||||||
enable = true;
|
|
||||||
lint = true;
|
|
||||||
unstable = true;
|
|
||||||
suggest = {
|
|
||||||
completeFunctionCalls = false;
|
|
||||||
imports = {
|
|
||||||
hosts."https://deno.land" = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
inlayHints = {
|
|
||||||
enumMemberValues.enabled = true;
|
|
||||||
functionLikeReturnTypes.enabled = true;
|
|
||||||
parameterNames.enabled = "all";
|
|
||||||
parameterTypes.enabled = true;
|
|
||||||
propertyDeclarationTypes.enabled = true;
|
|
||||||
variableTypes.enabled = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
dprint = {
|
|
||||||
command = getExe dprint;
|
|
||||||
args = [ "lsp" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
nil = {
|
|
||||||
command = getExe nil;
|
|
||||||
config.nil = {
|
|
||||||
formatting.command = [ "${getExe nixfmt}" ];
|
|
||||||
diagnostics = {
|
|
||||||
bindingEndHintMinLines = 3;
|
|
||||||
};
|
|
||||||
nix.flake = {
|
|
||||||
autoArchive = true;
|
|
||||||
# autoEvalInputs = true;
|
|
||||||
nixpkgsInputName = "nixpkgs";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
deadnix = {
|
|
||||||
command = getExe new-deadnix;
|
|
||||||
};
|
|
||||||
|
|
||||||
typescript-language-server = {
|
|
||||||
command = getExe typescript-language-server;
|
|
||||||
args = [ "--stdio" ];
|
|
||||||
config = {
|
|
||||||
typescript-language-server.source = {
|
|
||||||
addMissingImports.ts = true;
|
|
||||||
fixAll.ts = true;
|
|
||||||
organizeImports.ts = true;
|
|
||||||
removeUnusedImports.ts = true;
|
|
||||||
sortImports.ts = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
ruff = {
|
|
||||||
command = getExe ruff;
|
|
||||||
args = [ "server" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
qmlls = {
|
|
||||||
command = getExe' kdePackages.qtdeclarative "qmlls";
|
|
||||||
args = [ "-E" ];
|
|
||||||
};
|
|
||||||
basedpyright.command = "${basedpyright}/bin/basedpyright-langserver";
|
|
||||||
|
|
||||||
vscode-css-language-server = {
|
|
||||||
command = "${vscode-langservers-extracted}/bin/vscode-css-language-server";
|
|
||||||
args = [ "--stdio" ];
|
|
||||||
config = {
|
|
||||||
provideFormatter = true;
|
|
||||||
css.validate.enable = true;
|
|
||||||
scss.validate.enable = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
zls = {
|
|
||||||
command = getExe zls;
|
|
||||||
config = {
|
|
||||||
enable_build_on_save = true;
|
|
||||||
build_on_save_args = [
|
|
||||||
"check"
|
|
||||||
"-fincremental"
|
|
||||||
"--watch"
|
|
||||||
];
|
|
||||||
enable_autofix = false;
|
|
||||||
warn_style = true;
|
|
||||||
highlight_global_var_declarations = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
in
|
|
||||||
toml.generate "languages.toml" helix-languages
|
|
Loading…
Add table
Add a link
Reference in a new issue