commit
1e493b9ce6
|
@ -0,0 +1,226 @@
|
||||||
|
{pkgs ? import <nixpkgs> {}}: {
|
||||||
|
settings = {
|
||||||
|
theme = "catppuccin_mocha_transparent";
|
||||||
|
editor = {
|
||||||
|
line-number = "relative";
|
||||||
|
mouse = false;
|
||||||
|
bufferline = "always";
|
||||||
|
color-modes = true;
|
||||||
|
cursor-shape = {
|
||||||
|
insert = "bar";
|
||||||
|
normal = "block";
|
||||||
|
select = "underline";
|
||||||
|
};
|
||||||
|
file-picker = {hidden = false;};
|
||||||
|
indent-guides = {
|
||||||
|
render = true;
|
||||||
|
skip-levels = 1;
|
||||||
|
};
|
||||||
|
soft-wrap = {enable = true;};
|
||||||
|
statusline = {
|
||||||
|
right = [
|
||||||
|
"version-control"
|
||||||
|
"diagnostics"
|
||||||
|
"selections"
|
||||||
|
"position"
|
||||||
|
"file-encoding"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
lsp = {display-messages = true;};
|
||||||
|
};
|
||||||
|
keys = {
|
||||||
|
normal = {
|
||||||
|
space = {
|
||||||
|
q = ":quit";
|
||||||
|
Q = ":quit!";
|
||||||
|
w = ":write";
|
||||||
|
W = ":write!";
|
||||||
|
};
|
||||||
|
C-c = ":config-open";
|
||||||
|
C-r = ":config-reload";
|
||||||
|
"C-/" = "toggle_comments";
|
||||||
|
S-right = "goto_next_buffer";
|
||||||
|
S-left = "goto_previous_buffer";
|
||||||
|
C-b = ":buffer-close";
|
||||||
|
C-s = ["select_all" "select_regex"];
|
||||||
|
|
||||||
|
C-j = "shrink_selection";
|
||||||
|
C-k = "expand_selection";
|
||||||
|
C-l = "select_next_sibling";
|
||||||
|
C-a = "select_all";
|
||||||
|
C-u = ["half_page_up" "align_view_center"];
|
||||||
|
C-d = ["half_page_down" "align_view_center"];
|
||||||
|
|
||||||
|
"{" = ["goto_prev_paragraph" "collapse_selection"];
|
||||||
|
"}" = ["goto_next_paragraph" "collapse_selection"];
|
||||||
|
"0" = "goto_line_start";
|
||||||
|
"$" = "goto_line_end";
|
||||||
|
"^" = "goto_first_nonwhitespace";
|
||||||
|
G = "goto_file_end";
|
||||||
|
"%" = "match_brackets";
|
||||||
|
V = ["select_mode" "extend_to_line_bounds"];
|
||||||
|
C = ["collapse_selection" "extend_to_line_end" "change_selection"];
|
||||||
|
D = ["extend_to_line_end" "delete_selection"];
|
||||||
|
S = "surround_add";
|
||||||
|
|
||||||
|
d = {
|
||||||
|
d = ["extend_to_line_bounds" "delete_selection"];
|
||||||
|
t = ["extend_till_char"];
|
||||||
|
s = ["surround_delete"];
|
||||||
|
i = ["select_textobject_inner"];
|
||||||
|
a = ["select_textobject_around"];
|
||||||
|
};
|
||||||
|
|
||||||
|
x = "delete_selection";
|
||||||
|
p = "paste_clipboard_after";
|
||||||
|
P = "paste_clipboard_before";
|
||||||
|
y = [
|
||||||
|
"yank_main_selection_to_clipboard"
|
||||||
|
"normal_mode"
|
||||||
|
"flip_selections"
|
||||||
|
"collapse_selection"
|
||||||
|
];
|
||||||
|
Y = [
|
||||||
|
"extend_to_line_bounds"
|
||||||
|
"yank_main_selection_to_clipboard"
|
||||||
|
"goto_line_start"
|
||||||
|
"collapse_selection"
|
||||||
|
];
|
||||||
|
|
||||||
|
w = ["move_next_word_start" "move_char_right" "collapse_selection"];
|
||||||
|
e = ["move_next_word_end" "collapse_selection"];
|
||||||
|
b = ["move_prev_word_start" "collapse_selection"];
|
||||||
|
|
||||||
|
i = ["insert_mode" "collapse_selection"];
|
||||||
|
a = ["append_mode" "collapse_selection"];
|
||||||
|
|
||||||
|
esc = ["collapse_selection" "keep_primary_selection"];
|
||||||
|
};
|
||||||
|
insert = {esc = ["collapse_selection" "normal_mode"];};
|
||||||
|
select = {
|
||||||
|
space = {
|
||||||
|
j = {
|
||||||
|
e = ":pipe jq";
|
||||||
|
c = ":pipe jq -c";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"{" = ["extend_to_line_bounds" "goto_prev_paragraph"];
|
||||||
|
"}" = ["extend_to_line_bounds" "goto_next_paragraph"];
|
||||||
|
"0" = "goto_line_start";
|
||||||
|
"$" = "goto_line_end";
|
||||||
|
"^" = "goto_first_nonwhitespace";
|
||||||
|
G = "goto_file_end";
|
||||||
|
D = ["extend_to_line_bounds" "delete_selection" "normal_mode"];
|
||||||
|
C = ["goto_line_start" "extend_to_line_bounds" "change_selection"];
|
||||||
|
"%" = "match_brackets";
|
||||||
|
S = "surround_add";
|
||||||
|
|
||||||
|
i = "select_textobject_inner";
|
||||||
|
a = "select_textobject_around";
|
||||||
|
|
||||||
|
tab = ["insert_mode" "collapse_selection"];
|
||||||
|
C-a = ["append_mode" "collapse_selection"];
|
||||||
|
|
||||||
|
k = ["extend_line_up" "extend_to_line_bounds"];
|
||||||
|
j = ["extend_line_down" "extend_to_line_bounds"];
|
||||||
|
|
||||||
|
d = ["yank_main_selection_to_clipboard" "delete_selection"];
|
||||||
|
x = ["yank_main_selection_to_clipboard" "delete_selection"];
|
||||||
|
y = [
|
||||||
|
"yank_main_selection_to_clipboard"
|
||||||
|
"normal_mode"
|
||||||
|
"flip_selections"
|
||||||
|
"collapse_selection"
|
||||||
|
];
|
||||||
|
Y = [
|
||||||
|
"extend_to_line_bounds"
|
||||||
|
"yank_main_selection_to_clipboard"
|
||||||
|
"goto_line_start"
|
||||||
|
"collapse_selection"
|
||||||
|
"normal_mode"
|
||||||
|
];
|
||||||
|
p = "replace_selections_with_clipboard";
|
||||||
|
P = "paste_clipboard_before";
|
||||||
|
|
||||||
|
esc = ["collapse_selection" "keep_primary_selection" "normal_mode"];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
languages = with pkgs; {
|
||||||
|
language = [
|
||||||
|
{
|
||||||
|
name = "go";
|
||||||
|
formatter = {
|
||||||
|
command = "${gofumpt}/bin/gofumpt";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "lua";
|
||||||
|
formatter = with nodePackages; {
|
||||||
|
command = "${lua-fmt}/bin/luafmt";
|
||||||
|
args = ["--stdin"];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "python";
|
||||||
|
auto-format = true;
|
||||||
|
formatter = with python311Packages; {
|
||||||
|
command = "${black}/bin/black";
|
||||||
|
args = ["--quiet" "-"];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "nix";
|
||||||
|
auto-format = true;
|
||||||
|
formatter = {
|
||||||
|
command = "${alejandra}/bin/alejandra";
|
||||||
|
args = ["-qq"];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "templ";
|
||||||
|
auto-format = true;
|
||||||
|
scope = "source.templ";
|
||||||
|
injection-regex = "templ";
|
||||||
|
file-types = ["templ"];
|
||||||
|
roots = ["go.mod"];
|
||||||
|
comment-token = "//";
|
||||||
|
language-server = {
|
||||||
|
command = "templ";
|
||||||
|
args = ["lsp"];
|
||||||
|
};
|
||||||
|
formatter = {
|
||||||
|
command = "templ";
|
||||||
|
args = ["fmt"];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
themes = {
|
||||||
|
catppuccin_frappe_transparent = {
|
||||||
|
inherits = "catppuccin_frappe";
|
||||||
|
"ui.background" = {};
|
||||||
|
};
|
||||||
|
catppuccin_latte_transparent = {
|
||||||
|
inherits = "catppuccin_latte";
|
||||||
|
"ui.background" = {};
|
||||||
|
};
|
||||||
|
catppuccin_macchiato_transparent = {
|
||||||
|
inherits = "catppuccin_macchiato";
|
||||||
|
"ui.background" = {};
|
||||||
|
};
|
||||||
|
catppuccin_mocha_transparent = {
|
||||||
|
inherits = "catppuccin_mocha";
|
||||||
|
"ui.background" = {};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
grammars = [
|
||||||
|
{
|
||||||
|
name = "templ";
|
||||||
|
url = "https://github.com/vrischmann/tree-sitter-templ";
|
||||||
|
rev = "9f63037ad08a58050d0582ef1ae0009bd0fbf2f1";
|
||||||
|
sha256 = "sha256-AGZm2D8rW08gMyZ8dSZyAgqgyl/lKiZxBOFDPX0LY4I=";
|
||||||
|
queries = "queries/templ";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1694948089,
|
||||||
|
"narHash": "sha256-d2B282GmQ9o8klc22/Rbbbj6r99EnELQpOQjWMyv0rU=",
|
||||||
|
"owner": "nixos",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "5148520bfab61f99fd25fb9ff7bfbb50dad3c9db",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nixos",
|
||||||
|
"ref": "nixpkgs-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
|
@ -0,0 +1,101 @@
|
||||||
|
{
|
||||||
|
description = "jolheiser helix derivation";
|
||||||
|
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = {
|
||||||
|
self,
|
||||||
|
nixpkgs,
|
||||||
|
}: let
|
||||||
|
pkgs = nixpkgs.legacyPackages.x86_64-linux;
|
||||||
|
tomlFormat = pkgs.formats.toml {};
|
||||||
|
config = import ./config.nix {pkgs = pkgs;};
|
||||||
|
buildGrammar = grammar: let
|
||||||
|
source = pkgs.fetchgit {
|
||||||
|
inherit (grammar) url rev sha256;
|
||||||
|
};
|
||||||
|
linkQueries = pkgs.lib.optionalString (builtins.hasAttr "queries" grammar) "cp -r ${source}/${grammar.queries} $out/queries";
|
||||||
|
in
|
||||||
|
pkgs.stdenv.mkDerivation {
|
||||||
|
pname = "helix-tree-sitter-grammar-${grammar.name}";
|
||||||
|
version = grammar.rev;
|
||||||
|
buildInputs = [pkgs.helix pkgs.git];
|
||||||
|
src = source;
|
||||||
|
buildPhase = ''
|
||||||
|
runHook preBuild
|
||||||
|
|
||||||
|
mkdir .helix
|
||||||
|
cat << EOF > .helix/languages.toml
|
||||||
|
use-grammars = { only = ["templ"] }
|
||||||
|
[[grammar]]
|
||||||
|
name = "${grammar.name}"
|
||||||
|
source = { git = "${grammar.url}", rev = "${grammar.rev}" }
|
||||||
|
EOF
|
||||||
|
|
||||||
|
mkdir -p runtime/grammars/sources
|
||||||
|
cp -r ${source} runtime/grammars/sources/${grammar.name}
|
||||||
|
export CARGO_MANIFEST_DIR=$(pwd)/.helix
|
||||||
|
|
||||||
|
#hx -g fetch
|
||||||
|
hx -g build
|
||||||
|
|
||||||
|
mkdir $out
|
||||||
|
cp runtime/grammars/${grammar.name}.so $out/${grammar.name}.so
|
||||||
|
${linkQueries}
|
||||||
|
|
||||||
|
runHook postBuild
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
builtGrammars =
|
||||||
|
builtins.map (grammar: {
|
||||||
|
inherit (grammar) name;
|
||||||
|
artifact = buildGrammar grammar;
|
||||||
|
})
|
||||||
|
config.grammars;
|
||||||
|
configFile = pkgs.writeText "config.toml" (builtins.readFile (tomlFormat.generate "helix-config" config.settings));
|
||||||
|
languageFile = pkgs.writeText "languages.toml" (builtins.readFile (tomlFormat.generate "helix-languages" config.languages));
|
||||||
|
themeFiles =
|
||||||
|
pkgs.lib.mapAttrsToList (
|
||||||
|
name: value: {
|
||||||
|
inherit name;
|
||||||
|
file = pkgs.writeText "${name}.toml" (builtins.readFile (tomlFormat.generate "helix-theme-${name}" value));
|
||||||
|
}
|
||||||
|
)
|
||||||
|
config.themes;
|
||||||
|
themeLinks = builtins.map (theme: "ln -s ${theme.file} $out/home/helix/themes/${theme.name}.toml") themeFiles;
|
||||||
|
grammarLinks = builtins.map (grammar: "ln -s ${grammar.artifact}/${grammar.name}.so $out/lib/runtime/grammars/${grammar.name}.so") builtGrammars;
|
||||||
|
queryLinks = builtins.map (grammar: "ln -s ${grammar.artifact}/queries $out/lib/runtime/queries/${grammar.name}") builtGrammars;
|
||||||
|
in {
|
||||||
|
packages.x86_64-linux.default =
|
||||||
|
pkgs.runCommand "jolheiser-helix" {
|
||||||
|
buildInputs = [pkgs.makeWrapper];
|
||||||
|
} ''
|
||||||
|
mkdir $out
|
||||||
|
ln -s ${pkgs.helix}/* $out
|
||||||
|
rm $out/bin
|
||||||
|
|
||||||
|
rm $out/lib
|
||||||
|
mkdir -p $out/lib/runtime
|
||||||
|
ln -s ${pkgs.helix}/lib/runtime/* $out/lib/runtime
|
||||||
|
|
||||||
|
rm $out/lib/runtime/grammars
|
||||||
|
mkdir $out/lib/runtime/grammars
|
||||||
|
ln -s ${pkgs.helix}/lib/runtime/grammars/* $out/lib/runtime/grammars
|
||||||
|
${builtins.concatStringsSep "\n" grammarLinks}
|
||||||
|
|
||||||
|
rm $out/lib/runtime/queries
|
||||||
|
mkdir $out/lib/runtime/queries
|
||||||
|
ln -s ${pkgs.helix}/lib/runtime/queries/* $out/lib/runtime/queries
|
||||||
|
${builtins.concatStringsSep "\n" queryLinks}
|
||||||
|
|
||||||
|
mkdir -p $out/home/helix/themes
|
||||||
|
ln -s ${configFile} $out/home/helix/config.toml
|
||||||
|
ln -s ${languageFile} $out/home/helix/languages.toml
|
||||||
|
${builtins.concatStringsSep "\n" themeLinks}
|
||||||
|
|
||||||
|
makeWrapper ${pkgs.helix}/bin/.hx-wrapped $out/bin/hx --set HELIX_RUNTIME $out/lib/runtime --set XDG_CONFIG_HOME $out/home
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in New Issue