This commit is contained in:
parent
bd526f3e1a
commit
8e6a87d657
3 changed files with 590 additions and 601 deletions
|
@ -1,4 +1,4 @@
|
||||||
{ self, slippi, ... }:
|
{ self, slippi, ... }@inputs:
|
||||||
let
|
let
|
||||||
inherit (self) outputs;
|
inherit (self) outputs;
|
||||||
inherit (outputs) homeManagerModules style;
|
inherit (outputs) homeManagerModules style;
|
||||||
|
@ -24,7 +24,6 @@ in
|
||||||
sshconfig
|
sshconfig
|
||||||
senpai
|
senpai
|
||||||
iex
|
iex
|
||||||
helix
|
|
||||||
cargo
|
cargo
|
||||||
desktop
|
desktop
|
||||||
|
|
||||||
|
@ -467,591 +466,7 @@ in
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
helix =
|
helix = import ./helix.nix inputs;
|
||||||
{
|
|
||||||
lib,
|
|
||||||
config,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
{
|
|
||||||
config = lib.mkIf config.programs.helix.enable {
|
|
||||||
# helix rust debugger stuff
|
|
||||||
# https://github.com/helix-editor/helix/wiki/Debugger-Configurations
|
|
||||||
home.file."${config.xdg.configHome}/lldb_vscode_rustc_primer.py" = {
|
|
||||||
text = ''
|
|
||||||
import subprocess
|
|
||||||
import pathlib
|
|
||||||
import lldb
|
|
||||||
|
|
||||||
# Determine the sysroot for the active Rust interpreter
|
|
||||||
rustlib_etc = pathlib.Path(subprocess.getoutput('rustc --print sysroot')) / 'lib' / 'rustlib' / 'etc'
|
|
||||||
if not rustlib_etc.exists():
|
|
||||||
raise RuntimeError('Unable to determine rustc sysroot')
|
|
||||||
|
|
||||||
# Load lldb_lookup.py and execute lldb_commands with the correct path
|
|
||||||
lldb.debugger.HandleCommand(f"""command script import "{rustlib_etc / 'lldb_lookup.py'}" """)
|
|
||||||
lldb.debugger.HandleCommand(f"""command source -s 0 "{rustlib_etc / 'lldb_commands'}" """)
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
NOTE: Currently, helix crashes when editing markdown in certain scenarios,
|
|
||||||
presumably due to an old markdown treesitter grammar
|
|
||||||
https://github.com/helix-editor/helix/issues/9011
|
|
||||||
https://github.com/helix-editor/helix/issues/8821
|
|
||||||
https://github.com/tree-sitter-grammars/tree-sitter-markdown/issues/114
|
|
||||||
*/
|
|
||||||
|
|
||||||
programs.helix = {
|
|
||||||
languages = {
|
|
||||||
language-server = {
|
|
||||||
lexical = {
|
|
||||||
command = "lexical";
|
|
||||||
args = [ "start" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
next-ls = {
|
|
||||||
command = "next-ls";
|
|
||||||
args = ["--stdout"];
|
|
||||||
};
|
|
||||||
|
|
||||||
deno = {
|
|
||||||
command = "deno";
|
|
||||||
args = ["lsp"];
|
|
||||||
config = {
|
|
||||||
enable = true;
|
|
||||||
lint = true;
|
|
||||||
unstable = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
*/
|
|
||||||
};
|
|
||||||
|
|
||||||
language = [
|
|
||||||
/*
|
|
||||||
{
|
|
||||||
name = "heex";
|
|
||||||
scope = "source.heex";
|
|
||||||
injection-regex = "heex";
|
|
||||||
language-servers = ["lexical"]; # "lexical" "next-ls" ?
|
|
||||||
auto-format = true;
|
|
||||||
file-types = ["heex"];
|
|
||||||
roots = ["mix.exs" "mix.lock"];
|
|
||||||
indent = {
|
|
||||||
tab-width = 2;
|
|
||||||
unit = " ";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "elixir";
|
|
||||||
language-servers = ["lexical"]; # "lexical" "next-ls" ?
|
|
||||||
auto-format = true;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
{
|
|
||||||
name = "rust";
|
|
||||||
|
|
||||||
debugger = {
|
|
||||||
name = "lldb-vscode";
|
|
||||||
transport = "stdio";
|
|
||||||
command = "lldb-vscode";
|
|
||||||
templates = [
|
|
||||||
{
|
|
||||||
name = "binary";
|
|
||||||
request = "launch";
|
|
||||||
completion = [
|
|
||||||
{
|
|
||||||
name = "binary";
|
|
||||||
completion = "filename";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
args = {
|
|
||||||
program = "{0}";
|
|
||||||
initCommands = [ "command script import ${config.xdg.configHome}/lldb_vscode_rustc_primer.py" ];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "html";
|
|
||||||
file-types = [ "html" ];
|
|
||||||
scope = "source.html";
|
|
||||||
auto-format = false;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "nix";
|
|
||||||
file-types = [ "nix" ];
|
|
||||||
scope = "source.nix";
|
|
||||||
auto-format = true;
|
|
||||||
formatter = {
|
|
||||||
command = "alejandra";
|
|
||||||
args = [ "-" ];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "fish";
|
|
||||||
file-types = [ "fish" ];
|
|
||||||
scope = "source.fish";
|
|
||||||
auto-format = true;
|
|
||||||
indent = {
|
|
||||||
tab-width = 2;
|
|
||||||
unit = "\t";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "toml";
|
|
||||||
file-types = [ "toml" ];
|
|
||||||
scope = "source.toml";
|
|
||||||
auto-format = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
{
|
|
||||||
name = "javascript";
|
|
||||||
language-id = "javascript";
|
|
||||||
grammar = "javascript";
|
|
||||||
scope = "source.js";
|
|
||||||
injection-regex = "^(js|javascript)$";
|
|
||||||
file-types = ["js" "mjs"];
|
|
||||||
shebangs = ["deno"];
|
|
||||||
language-servers = ["deno"];
|
|
||||||
roots = ["deno.jsonc" "deno.json"];
|
|
||||||
formatter = {
|
|
||||||
command = "deno";
|
|
||||||
args = ["fmt"];
|
|
||||||
};
|
|
||||||
auto-format = true;
|
|
||||||
comment-token = "//";
|
|
||||||
indent = {
|
|
||||||
tab-width = 2;
|
|
||||||
unit = "\t";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
name = "typescript";
|
|
||||||
language-id = "typescript";
|
|
||||||
grammar = "typescript";
|
|
||||||
scope = "source.ts";
|
|
||||||
injection-regex = "^(ts|typescript)$";
|
|
||||||
file-types = ["ts"];
|
|
||||||
shebangs = ["deno"];
|
|
||||||
language-servers = ["deno"];
|
|
||||||
roots = ["deno.jsonc" "deno.json"];
|
|
||||||
formatter = {
|
|
||||||
command = "deno";
|
|
||||||
args = ["fmt"];
|
|
||||||
};
|
|
||||||
auto-format = true;
|
|
||||||
comment-token = "//";
|
|
||||||
indent = {
|
|
||||||
tab-width = 2;
|
|
||||||
unit = "\t";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
name = "jsonc";
|
|
||||||
language-id = "json";
|
|
||||||
grammar = "jsonc";
|
|
||||||
scope = "source.jsonc";
|
|
||||||
injection-regex = "^(jsonc)$";
|
|
||||||
roots = ["deno.jsonc" "deno.json"];
|
|
||||||
file-types = ["jsonc"];
|
|
||||||
language-servers = ["deno"];
|
|
||||||
indent = {
|
|
||||||
tab-width = 2;
|
|
||||||
unit = " ";
|
|
||||||
};
|
|
||||||
auto-format = true;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
settings = {
|
|
||||||
theme = "custom";
|
|
||||||
|
|
||||||
editor = {
|
|
||||||
soft-wrap.enable = true;
|
|
||||||
auto-pairs = false;
|
|
||||||
bufferline = "multiple";
|
|
||||||
rulers = [
|
|
||||||
81
|
|
||||||
121
|
|
||||||
];
|
|
||||||
cursorline = true;
|
|
||||||
|
|
||||||
/*
|
|
||||||
auto-save = false;
|
|
||||||
completion-trigger-len = 1;
|
|
||||||
color-modes = false;
|
|
||||||
scrolloff = 8;
|
|
||||||
*/
|
|
||||||
|
|
||||||
inline-diagnostics = {
|
|
||||||
cursor-line = "hint";
|
|
||||||
other-lines = "error";
|
|
||||||
};
|
|
||||||
|
|
||||||
cursor-shape = {
|
|
||||||
normal = "block";
|
|
||||||
insert = "bar";
|
|
||||||
select = "underline";
|
|
||||||
};
|
|
||||||
|
|
||||||
file-picker.hidden = false;
|
|
||||||
indent-guides = {
|
|
||||||
render = true;
|
|
||||||
character = "▏";
|
|
||||||
};
|
|
||||||
|
|
||||||
lsp = {
|
|
||||||
display-messages = true;
|
|
||||||
# display-inlay-hints = true;
|
|
||||||
};
|
|
||||||
statusline = {
|
|
||||||
separator = " ";
|
|
||||||
mode = {
|
|
||||||
"normal" = "N";
|
|
||||||
"insert" = "I";
|
|
||||||
"select" = "S";
|
|
||||||
};
|
|
||||||
left = [
|
|
||||||
"file-name"
|
|
||||||
"mode"
|
|
||||||
/*
|
|
||||||
"selections"
|
|
||||||
"primary-selection-length"
|
|
||||||
"position"
|
|
||||||
"position-percentage"
|
|
||||||
*/
|
|
||||||
"spinner"
|
|
||||||
"diagnostics"
|
|
||||||
"workspace-diagnostics"
|
|
||||||
];
|
|
||||||
/*
|
|
||||||
center = ["file-name"];
|
|
||||||
right = ["version-control" "total-line-numbers" "file-encoding"];
|
|
||||||
*/
|
|
||||||
};
|
|
||||||
};
|
|
||||||
keys = {
|
|
||||||
insert = {
|
|
||||||
j = {
|
|
||||||
k = "normal_mode";
|
|
||||||
j = "normal_mode";
|
|
||||||
K = "normal_mode";
|
|
||||||
J = "normal_mode";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
normal = {
|
|
||||||
"C-k" = "jump_view_up";
|
|
||||||
"C-j" = "jump_view_down";
|
|
||||||
"C-h" = "jump_view_left";
|
|
||||||
"C-l" = "jump_view_right";
|
|
||||||
"C-q" = ":quit-all!";
|
|
||||||
# "L" = "repeat_last_motion";
|
|
||||||
space = {
|
|
||||||
q = ":reflow 80";
|
|
||||||
Q = ":reflow 120";
|
|
||||||
C = ":bc!";
|
|
||||||
h = ":toggle lsp.display-inlay-hints";
|
|
||||||
# O = ["select_textobject_inner WORD", ":pipe-to xargs xdg-open"];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
select = {
|
|
||||||
space = {
|
|
||||||
q = ":reflow 80";
|
|
||||||
Q = ":reflow 120";
|
|
||||||
};
|
|
||||||
# "L" = "repeat_last_motion";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
themes = with style.colors.withHashPrefix; {
|
|
||||||
custom = {
|
|
||||||
"type" = orange;
|
|
||||||
|
|
||||||
"constructor" = blue;
|
|
||||||
|
|
||||||
"constant" = orange;
|
|
||||||
"constant.builtin" = orange;
|
|
||||||
"constant.character" = yellow;
|
|
||||||
"constant.character.escape" = orange;
|
|
||||||
|
|
||||||
"string" = green;
|
|
||||||
"string.regexp" = orange;
|
|
||||||
"string.special" = blue;
|
|
||||||
|
|
||||||
"comment" = {
|
|
||||||
fg = fgdim;
|
|
||||||
modifiers = [ "italic" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
"variable" = text;
|
|
||||||
"variable.parameter" = {
|
|
||||||
fg = red;
|
|
||||||
modifiers = [ "italic" ];
|
|
||||||
};
|
|
||||||
"variable.builtin" = red;
|
|
||||||
"variable.other.member" = text;
|
|
||||||
|
|
||||||
"label" = blue;
|
|
||||||
|
|
||||||
"punctuation" = fgdim;
|
|
||||||
"punctuation.special" = blue;
|
|
||||||
|
|
||||||
"keyword" = purple;
|
|
||||||
"keyword.storage.modifier.ref" = yellow;
|
|
||||||
"keyword.control.conditional" = {
|
|
||||||
fg = purple;
|
|
||||||
modifiers = [ "italic" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
"operator" = blue;
|
|
||||||
|
|
||||||
"function" = blue;
|
|
||||||
"function.macro" = purple;
|
|
||||||
|
|
||||||
"tag" = purple;
|
|
||||||
"attribute" = blue;
|
|
||||||
|
|
||||||
"namespace" = {
|
|
||||||
fg = blue;
|
|
||||||
modifiers = [ "italic" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
"special" = blue;
|
|
||||||
|
|
||||||
"markup.heading.marker" = {
|
|
||||||
fg = orange;
|
|
||||||
modifiers = [ "bold" ];
|
|
||||||
};
|
|
||||||
"markup.heading.1" = blue;
|
|
||||||
"markup.heading.2" = yellow;
|
|
||||||
"markup.heading.3" = green;
|
|
||||||
"markup.heading.4" = orange;
|
|
||||||
"markup.heading.5" = red;
|
|
||||||
"markup.heading.6" = fg3;
|
|
||||||
"markup.list" = purple;
|
|
||||||
"markup.bold" = {
|
|
||||||
modifiers = [ "bold" ];
|
|
||||||
};
|
|
||||||
"markup.italic" = {
|
|
||||||
modifiers = [ "italic" ];
|
|
||||||
};
|
|
||||||
"markup.strikethrough" = {
|
|
||||||
modifiers = [ "crossed_out" ];
|
|
||||||
};
|
|
||||||
"markup.link.url" = {
|
|
||||||
fg = red;
|
|
||||||
modifiers = [ "underlined" ];
|
|
||||||
};
|
|
||||||
"markup.link.text" = blue;
|
|
||||||
"markup.raw" = red;
|
|
||||||
|
|
||||||
"diff.plus" = green;
|
|
||||||
"diff.minus" = red;
|
|
||||||
"diff.delta" = blue;
|
|
||||||
|
|
||||||
"ui.linenr" = {
|
|
||||||
fg = fgdim;
|
|
||||||
};
|
|
||||||
"ui.linenr.selected" = {
|
|
||||||
fg = fg2;
|
|
||||||
};
|
|
||||||
|
|
||||||
"ui.statusline" = {
|
|
||||||
fg = fgdim;
|
|
||||||
bg = bg;
|
|
||||||
};
|
|
||||||
"ui.statusline.inactive" = {
|
|
||||||
fg = fg3;
|
|
||||||
bg = bg2;
|
|
||||||
};
|
|
||||||
"ui.statusline.normal" = {
|
|
||||||
fg = bg;
|
|
||||||
bg = purple;
|
|
||||||
modifiers = [ "bold" ];
|
|
||||||
};
|
|
||||||
"ui.statusline.insert" = {
|
|
||||||
fg = bg;
|
|
||||||
bg = green;
|
|
||||||
modifiers = [ "bold" ];
|
|
||||||
};
|
|
||||||
"ui.statusline.select" = {
|
|
||||||
fg = bg;
|
|
||||||
bg = red;
|
|
||||||
modifiers = [ "bold" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
"ui.popup" = {
|
|
||||||
fg = text;
|
|
||||||
bg = bg2;
|
|
||||||
};
|
|
||||||
"ui.window" = {
|
|
||||||
fg = fgdim;
|
|
||||||
};
|
|
||||||
"ui.help" = {
|
|
||||||
fg = fg2;
|
|
||||||
bg = bg2;
|
|
||||||
};
|
|
||||||
|
|
||||||
"ui.bufferline" = {
|
|
||||||
fg = fgdim;
|
|
||||||
bg = bg2;
|
|
||||||
};
|
|
||||||
"ui.bufferline.background" = {
|
|
||||||
bg = bg2;
|
|
||||||
};
|
|
||||||
|
|
||||||
"ui.text" = text;
|
|
||||||
"ui.text.focus" = {
|
|
||||||
fg = text;
|
|
||||||
bg = bg3;
|
|
||||||
modifiers = [ "bold" ];
|
|
||||||
};
|
|
||||||
"ui.text.inactive" = {
|
|
||||||
fg = fg2;
|
|
||||||
};
|
|
||||||
|
|
||||||
"ui.virtual" = fg2;
|
|
||||||
"ui.virtual.ruler" = {
|
|
||||||
bg = bg3;
|
|
||||||
};
|
|
||||||
"ui.virtual.indent-guide" = bg3;
|
|
||||||
"ui.virtual.inlay-hint" = {
|
|
||||||
fg = bg3;
|
|
||||||
bg = bg;
|
|
||||||
};
|
|
||||||
|
|
||||||
"ui.selection" = {
|
|
||||||
bg = bg5;
|
|
||||||
};
|
|
||||||
|
|
||||||
"ui.cursor" = {
|
|
||||||
fg = bg;
|
|
||||||
bg = text;
|
|
||||||
};
|
|
||||||
"ui.cursor.primary" = {
|
|
||||||
fg = bg;
|
|
||||||
bg = red;
|
|
||||||
};
|
|
||||||
"ui.cursor.match" = {
|
|
||||||
fg = orange;
|
|
||||||
modifiers = [ "bold" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
"ui.cursor.primary.normal" = {
|
|
||||||
fg = bg;
|
|
||||||
bg = text;
|
|
||||||
};
|
|
||||||
"ui.cursor.primary.insert" = {
|
|
||||||
fg = bg;
|
|
||||||
bg = text;
|
|
||||||
};
|
|
||||||
"ui.cursor.primary.select" = {
|
|
||||||
fg = bg;
|
|
||||||
bg = text;
|
|
||||||
};
|
|
||||||
|
|
||||||
"ui.cursor.normal" = {
|
|
||||||
fg = bg;
|
|
||||||
bg = fg;
|
|
||||||
};
|
|
||||||
"ui.cursor.insert" = {
|
|
||||||
fg = bg;
|
|
||||||
bg = fg;
|
|
||||||
};
|
|
||||||
"ui.cursor.select" = {
|
|
||||||
fg = bg;
|
|
||||||
bg = fg;
|
|
||||||
};
|
|
||||||
|
|
||||||
"ui.cursorline.primary" = {
|
|
||||||
bg = bg3;
|
|
||||||
};
|
|
||||||
|
|
||||||
"ui.highlight" = {
|
|
||||||
bg = bg3;
|
|
||||||
fg = bg;
|
|
||||||
modifiers = [ "bold" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
"ui.menu" = {
|
|
||||||
fg = fg3;
|
|
||||||
bg = bg2;
|
|
||||||
};
|
|
||||||
"ui.menu.selected" = {
|
|
||||||
fg = text;
|
|
||||||
bg = bg3;
|
|
||||||
modifiers = [ "bold" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
"diagnostic.error" = {
|
|
||||||
underline = {
|
|
||||||
color = red;
|
|
||||||
style = "curl";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
"diagnostic.warning" = {
|
|
||||||
underline = {
|
|
||||||
color = orange;
|
|
||||||
style = "curl";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
"diagnostic.info" = {
|
|
||||||
underline = {
|
|
||||||
color = blue;
|
|
||||||
style = "curl";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
"diagnostic.hint" = {
|
|
||||||
underline = {
|
|
||||||
color = blue;
|
|
||||||
style = "curl";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
error = red;
|
|
||||||
warning = orange;
|
|
||||||
info = blue;
|
|
||||||
hint = yellow;
|
|
||||||
"ui.background" = {
|
|
||||||
bg = bg;
|
|
||||||
fg = fgdim;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
"ui.cursorline.primary" = { bg = "default" }
|
|
||||||
"ui.cursorline.secondary" = { bg = "default" }
|
|
||||||
*/
|
|
||||||
"ui.cursorcolumn.primary" = {
|
|
||||||
bg = bg3;
|
|
||||||
};
|
|
||||||
"ui.cursorcolumn.secondary" = {
|
|
||||||
bg = bg3;
|
|
||||||
};
|
|
||||||
|
|
||||||
"ui.bufferline.active" = {
|
|
||||||
fg = primary;
|
|
||||||
bg = bg3;
|
|
||||||
underline = {
|
|
||||||
color = primary;
|
|
||||||
style = "";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
htop = {
|
htop = {
|
||||||
programs.htop = {
|
programs.htop = {
|
||||||
|
|
|
@ -2044,20 +2044,6 @@ adw-toolbar-style = raised
|
||||||
# which is the old style.
|
# which is the old style.
|
||||||
gtk-wide-tabs = true
|
gtk-wide-tabs = true
|
||||||
|
|
||||||
# If `true` (default), Ghostty will enable Adwaita theme support. This
|
|
||||||
# will make `window-theme` work properly and will also allow Ghostty to
|
|
||||||
# properly respond to system theme changes, light/dark mode changing, etc.
|
|
||||||
# This requires a GTK4 desktop with a GTK4 theme.
|
|
||||||
#
|
|
||||||
# If you are running GTK3 or have a GTK3 theme, you may have to set this
|
|
||||||
# to false to get your theme picked up properly. Having this set to true
|
|
||||||
# with GTK3 should not cause any problems, but it may not work exactly as
|
|
||||||
# expected.
|
|
||||||
#
|
|
||||||
# This configuration only has an effect if Ghostty was built with
|
|
||||||
# Adwaita support.
|
|
||||||
gtk-adwaita = true
|
|
||||||
|
|
||||||
# Custom CSS files to be loaded.
|
# Custom CSS files to be loaded.
|
||||||
#
|
#
|
||||||
# This configuration can be repeated multiple times to load multiple files.
|
# This configuration can be repeated multiple times to load multiple files.
|
||||||
|
|
588
lib/modules/home/helix.nix
Normal file
588
lib/modules/home/helix.nix
Normal file
|
@ -0,0 +1,588 @@
|
||||||
|
{ self, ... }:
|
||||||
|
let
|
||||||
|
inherit (self.outputs) style;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
config = lib.mkIf config.programs.helix.enable {
|
||||||
|
# helix rust debugger stuff
|
||||||
|
# https://github.com/helix-editor/helix/wiki/Debugger-Configurations
|
||||||
|
home.file."${config.xdg.configHome}/lldb_vscode_rustc_primer.py" = {
|
||||||
|
text = ''
|
||||||
|
import subprocess
|
||||||
|
import pathlib
|
||||||
|
import lldb
|
||||||
|
|
||||||
|
# Determine the sysroot for the active Rust interpreter
|
||||||
|
rustlib_etc = pathlib.Path(subprocess.getoutput('rustc --print sysroot')) / 'lib' / 'rustlib' / 'etc'
|
||||||
|
if not rustlib_etc.exists():
|
||||||
|
raise RuntimeError('Unable to determine rustc sysroot')
|
||||||
|
|
||||||
|
# Load lldb_lookup.py and execute lldb_commands with the correct path
|
||||||
|
lldb.debugger.HandleCommand(f"""command script import "{rustlib_etc / 'lldb_lookup.py'}" """)
|
||||||
|
lldb.debugger.HandleCommand(f"""command source -s 0 "{rustlib_etc / 'lldb_commands'}" """)
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
NOTE: Currently, helix crashes when editing markdown in certain scenarios,
|
||||||
|
presumably due to an old markdown treesitter grammar
|
||||||
|
https://github.com/helix-editor/helix/issues/9011
|
||||||
|
https://github.com/helix-editor/helix/issues/8821
|
||||||
|
https://github.com/tree-sitter-grammars/tree-sitter-markdown/issues/114
|
||||||
|
*/
|
||||||
|
|
||||||
|
programs.helix = {
|
||||||
|
languages = {
|
||||||
|
language-server = {
|
||||||
|
lexical = {
|
||||||
|
command = "lexical";
|
||||||
|
args = [ "start" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
next-ls = {
|
||||||
|
command = "next-ls";
|
||||||
|
args = ["--stdout"];
|
||||||
|
};
|
||||||
|
|
||||||
|
deno = {
|
||||||
|
command = "deno";
|
||||||
|
args = ["lsp"];
|
||||||
|
config = {
|
||||||
|
enable = true;
|
||||||
|
lint = true;
|
||||||
|
unstable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
};
|
||||||
|
|
||||||
|
language = [
|
||||||
|
/*
|
||||||
|
{
|
||||||
|
name = "heex";
|
||||||
|
scope = "source.heex";
|
||||||
|
injection-regex = "heex";
|
||||||
|
language-servers = ["lexical"]; # "lexical" "next-ls" ?
|
||||||
|
auto-format = true;
|
||||||
|
file-types = ["heex"];
|
||||||
|
roots = ["mix.exs" "mix.lock"];
|
||||||
|
indent = {
|
||||||
|
tab-width = 2;
|
||||||
|
unit = " ";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "elixir";
|
||||||
|
language-servers = ["lexical"]; # "lexical" "next-ls" ?
|
||||||
|
auto-format = true;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
name = "rust";
|
||||||
|
|
||||||
|
debugger = {
|
||||||
|
name = "lldb-vscode";
|
||||||
|
transport = "stdio";
|
||||||
|
command = "lldb-vscode";
|
||||||
|
templates = [
|
||||||
|
{
|
||||||
|
name = "binary";
|
||||||
|
request = "launch";
|
||||||
|
completion = [
|
||||||
|
{
|
||||||
|
name = "binary";
|
||||||
|
completion = "filename";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
args = {
|
||||||
|
program = "{0}";
|
||||||
|
initCommands = [ "command script import ${config.xdg.configHome}/lldb_vscode_rustc_primer.py" ];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "html";
|
||||||
|
file-types = [ "html" ];
|
||||||
|
scope = "source.html";
|
||||||
|
auto-format = false;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "nix";
|
||||||
|
file-types = [ "nix" ];
|
||||||
|
scope = "source.nix";
|
||||||
|
auto-format = true;
|
||||||
|
formatter = {
|
||||||
|
command = "alejandra";
|
||||||
|
args = [ "-" ];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "fish";
|
||||||
|
file-types = [ "fish" ];
|
||||||
|
scope = "source.fish";
|
||||||
|
auto-format = true;
|
||||||
|
indent = {
|
||||||
|
tab-width = 2;
|
||||||
|
unit = "\t";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "toml";
|
||||||
|
file-types = [ "toml" ];
|
||||||
|
scope = "source.toml";
|
||||||
|
auto-format = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
{
|
||||||
|
name = "javascript";
|
||||||
|
language-id = "javascript";
|
||||||
|
grammar = "javascript";
|
||||||
|
scope = "source.js";
|
||||||
|
injection-regex = "^(js|javascript)$";
|
||||||
|
file-types = ["js" "mjs"];
|
||||||
|
shebangs = ["deno"];
|
||||||
|
language-servers = ["deno"];
|
||||||
|
roots = ["deno.jsonc" "deno.json"];
|
||||||
|
formatter = {
|
||||||
|
command = "deno";
|
||||||
|
args = ["fmt"];
|
||||||
|
};
|
||||||
|
auto-format = true;
|
||||||
|
comment-token = "//";
|
||||||
|
indent = {
|
||||||
|
tab-width = 2;
|
||||||
|
unit = "\t";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
name = "typescript";
|
||||||
|
language-id = "typescript";
|
||||||
|
grammar = "typescript";
|
||||||
|
scope = "source.ts";
|
||||||
|
injection-regex = "^(ts|typescript)$";
|
||||||
|
file-types = ["ts"];
|
||||||
|
shebangs = ["deno"];
|
||||||
|
language-servers = ["deno"];
|
||||||
|
roots = ["deno.jsonc" "deno.json"];
|
||||||
|
formatter = {
|
||||||
|
command = "deno";
|
||||||
|
args = ["fmt"];
|
||||||
|
};
|
||||||
|
auto-format = true;
|
||||||
|
comment-token = "//";
|
||||||
|
indent = {
|
||||||
|
tab-width = 2;
|
||||||
|
unit = "\t";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
name = "jsonc";
|
||||||
|
language-id = "json";
|
||||||
|
grammar = "jsonc";
|
||||||
|
scope = "source.jsonc";
|
||||||
|
injection-regex = "^(jsonc)$";
|
||||||
|
roots = ["deno.jsonc" "deno.json"];
|
||||||
|
file-types = ["jsonc"];
|
||||||
|
language-servers = ["deno"];
|
||||||
|
indent = {
|
||||||
|
tab-width = 2;
|
||||||
|
unit = " ";
|
||||||
|
};
|
||||||
|
auto-format = true;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
theme = "custom";
|
||||||
|
|
||||||
|
editor = {
|
||||||
|
soft-wrap.enable = true;
|
||||||
|
auto-pairs = false;
|
||||||
|
bufferline = "multiple";
|
||||||
|
rulers = [
|
||||||
|
81
|
||||||
|
121
|
||||||
|
];
|
||||||
|
cursorline = true;
|
||||||
|
|
||||||
|
/*
|
||||||
|
auto-save = false;
|
||||||
|
completion-trigger-len = 1;
|
||||||
|
color-modes = false;
|
||||||
|
scrolloff = 8;
|
||||||
|
*/
|
||||||
|
|
||||||
|
inline-diagnostics = {
|
||||||
|
cursor-line = "hint";
|
||||||
|
other-lines = "error";
|
||||||
|
};
|
||||||
|
|
||||||
|
cursor-shape = {
|
||||||
|
normal = "block";
|
||||||
|
insert = "bar";
|
||||||
|
select = "underline";
|
||||||
|
};
|
||||||
|
|
||||||
|
file-picker.hidden = false;
|
||||||
|
indent-guides = {
|
||||||
|
render = true;
|
||||||
|
character = "▏";
|
||||||
|
};
|
||||||
|
|
||||||
|
lsp = {
|
||||||
|
display-messages = true;
|
||||||
|
# display-inlay-hints = true;
|
||||||
|
};
|
||||||
|
statusline = {
|
||||||
|
separator = " ";
|
||||||
|
mode = {
|
||||||
|
"normal" = "N";
|
||||||
|
"insert" = "I";
|
||||||
|
"select" = "S";
|
||||||
|
};
|
||||||
|
left = [
|
||||||
|
"file-name"
|
||||||
|
"mode"
|
||||||
|
/*
|
||||||
|
"selections"
|
||||||
|
"primary-selection-length"
|
||||||
|
"position"
|
||||||
|
"position-percentage"
|
||||||
|
*/
|
||||||
|
"spinner"
|
||||||
|
"diagnostics"
|
||||||
|
"workspace-diagnostics"
|
||||||
|
];
|
||||||
|
/*
|
||||||
|
center = ["file-name"];
|
||||||
|
right = ["version-control" "total-line-numbers" "file-encoding"];
|
||||||
|
*/
|
||||||
|
};
|
||||||
|
};
|
||||||
|
keys = {
|
||||||
|
insert = {
|
||||||
|
j = {
|
||||||
|
k = "normal_mode";
|
||||||
|
j = "normal_mode";
|
||||||
|
K = "normal_mode";
|
||||||
|
J = "normal_mode";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
normal = {
|
||||||
|
"C-k" = "jump_view_up";
|
||||||
|
"C-j" = "jump_view_down";
|
||||||
|
"C-h" = "jump_view_left";
|
||||||
|
"C-l" = "jump_view_right";
|
||||||
|
"C-q" = ":quit-all!";
|
||||||
|
# "L" = "repeat_last_motion";
|
||||||
|
space = {
|
||||||
|
q = ":reflow 80";
|
||||||
|
Q = ":reflow 120";
|
||||||
|
C = ":bc!";
|
||||||
|
h = ":toggle lsp.display-inlay-hints";
|
||||||
|
# O = ["select_textobject_inner WORD", ":pipe-to xargs xdg-open"];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
select = {
|
||||||
|
space = {
|
||||||
|
q = ":reflow 80";
|
||||||
|
Q = ":reflow 120";
|
||||||
|
};
|
||||||
|
# "L" = "repeat_last_motion";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
themes = with style.colors.withHashPrefix; {
|
||||||
|
custom = {
|
||||||
|
"type" = orange;
|
||||||
|
|
||||||
|
"constructor" = blue;
|
||||||
|
|
||||||
|
"constant" = orange;
|
||||||
|
"constant.builtin" = orange;
|
||||||
|
"constant.character" = yellow;
|
||||||
|
"constant.character.escape" = orange;
|
||||||
|
|
||||||
|
"string" = green;
|
||||||
|
"string.regexp" = orange;
|
||||||
|
"string.special" = blue;
|
||||||
|
|
||||||
|
"comment" = {
|
||||||
|
fg = fgdim;
|
||||||
|
modifiers = [ "italic" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
"variable" = text;
|
||||||
|
"variable.parameter" = {
|
||||||
|
fg = red;
|
||||||
|
modifiers = [ "italic" ];
|
||||||
|
};
|
||||||
|
"variable.builtin" = red;
|
||||||
|
"variable.other.member" = text;
|
||||||
|
|
||||||
|
"label" = blue;
|
||||||
|
|
||||||
|
"punctuation" = fgdim;
|
||||||
|
"punctuation.special" = blue;
|
||||||
|
|
||||||
|
"keyword" = purple;
|
||||||
|
"keyword.storage.modifier.ref" = yellow;
|
||||||
|
"keyword.control.conditional" = {
|
||||||
|
fg = purple;
|
||||||
|
modifiers = [ "italic" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
"operator" = blue;
|
||||||
|
|
||||||
|
"function" = blue;
|
||||||
|
"function.macro" = purple;
|
||||||
|
|
||||||
|
"tag" = purple;
|
||||||
|
"attribute" = blue;
|
||||||
|
|
||||||
|
"namespace" = {
|
||||||
|
fg = blue;
|
||||||
|
modifiers = [ "italic" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
"special" = blue;
|
||||||
|
|
||||||
|
"markup.heading.marker" = {
|
||||||
|
fg = orange;
|
||||||
|
modifiers = [ "bold" ];
|
||||||
|
};
|
||||||
|
"markup.heading.1" = blue;
|
||||||
|
"markup.heading.2" = yellow;
|
||||||
|
"markup.heading.3" = green;
|
||||||
|
"markup.heading.4" = orange;
|
||||||
|
"markup.heading.5" = red;
|
||||||
|
"markup.heading.6" = fg3;
|
||||||
|
"markup.list" = purple;
|
||||||
|
"markup.bold" = {
|
||||||
|
modifiers = [ "bold" ];
|
||||||
|
};
|
||||||
|
"markup.italic" = {
|
||||||
|
modifiers = [ "italic" ];
|
||||||
|
};
|
||||||
|
"markup.strikethrough" = {
|
||||||
|
modifiers = [ "crossed_out" ];
|
||||||
|
};
|
||||||
|
"markup.link.url" = {
|
||||||
|
fg = red;
|
||||||
|
modifiers = [ "underlined" ];
|
||||||
|
};
|
||||||
|
"markup.link.text" = blue;
|
||||||
|
"markup.raw" = red;
|
||||||
|
|
||||||
|
"diff.plus" = green;
|
||||||
|
"diff.minus" = red;
|
||||||
|
"diff.delta" = blue;
|
||||||
|
|
||||||
|
"ui.linenr" = {
|
||||||
|
fg = fgdim;
|
||||||
|
};
|
||||||
|
"ui.linenr.selected" = {
|
||||||
|
fg = fg2;
|
||||||
|
};
|
||||||
|
|
||||||
|
"ui.statusline" = {
|
||||||
|
fg = fgdim;
|
||||||
|
bg = bg;
|
||||||
|
};
|
||||||
|
"ui.statusline.inactive" = {
|
||||||
|
fg = fg3;
|
||||||
|
bg = bg2;
|
||||||
|
};
|
||||||
|
"ui.statusline.normal" = {
|
||||||
|
fg = bg;
|
||||||
|
bg = purple;
|
||||||
|
modifiers = [ "bold" ];
|
||||||
|
};
|
||||||
|
"ui.statusline.insert" = {
|
||||||
|
fg = bg;
|
||||||
|
bg = green;
|
||||||
|
modifiers = [ "bold" ];
|
||||||
|
};
|
||||||
|
"ui.statusline.select" = {
|
||||||
|
fg = bg;
|
||||||
|
bg = red;
|
||||||
|
modifiers = [ "bold" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
"ui.popup" = {
|
||||||
|
fg = text;
|
||||||
|
bg = bg2;
|
||||||
|
};
|
||||||
|
"ui.window" = {
|
||||||
|
fg = fgdim;
|
||||||
|
};
|
||||||
|
"ui.help" = {
|
||||||
|
fg = fg2;
|
||||||
|
bg = bg2;
|
||||||
|
};
|
||||||
|
|
||||||
|
"ui.bufferline" = {
|
||||||
|
fg = fgdim;
|
||||||
|
bg = bg2;
|
||||||
|
};
|
||||||
|
"ui.bufferline.background" = {
|
||||||
|
bg = bg2;
|
||||||
|
};
|
||||||
|
|
||||||
|
"ui.text" = text;
|
||||||
|
"ui.text.focus" = {
|
||||||
|
fg = text;
|
||||||
|
bg = bg3;
|
||||||
|
modifiers = [ "bold" ];
|
||||||
|
};
|
||||||
|
"ui.text.inactive" = {
|
||||||
|
fg = fg2;
|
||||||
|
};
|
||||||
|
|
||||||
|
"ui.virtual" = fg2;
|
||||||
|
"ui.virtual.ruler" = {
|
||||||
|
bg = bg3;
|
||||||
|
};
|
||||||
|
"ui.virtual.indent-guide" = bg3;
|
||||||
|
"ui.virtual.inlay-hint" = {
|
||||||
|
fg = bg3;
|
||||||
|
bg = bg;
|
||||||
|
};
|
||||||
|
|
||||||
|
"ui.selection" = {
|
||||||
|
bg = bg5;
|
||||||
|
};
|
||||||
|
|
||||||
|
"ui.cursor" = {
|
||||||
|
fg = bg;
|
||||||
|
bg = text;
|
||||||
|
};
|
||||||
|
"ui.cursor.primary" = {
|
||||||
|
fg = bg;
|
||||||
|
bg = red;
|
||||||
|
};
|
||||||
|
"ui.cursor.match" = {
|
||||||
|
fg = orange;
|
||||||
|
modifiers = [ "bold" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
"ui.cursor.primary.normal" = {
|
||||||
|
fg = bg;
|
||||||
|
bg = text;
|
||||||
|
};
|
||||||
|
"ui.cursor.primary.insert" = {
|
||||||
|
fg = bg;
|
||||||
|
bg = text;
|
||||||
|
};
|
||||||
|
"ui.cursor.primary.select" = {
|
||||||
|
fg = bg;
|
||||||
|
bg = text;
|
||||||
|
};
|
||||||
|
|
||||||
|
"ui.cursor.normal" = {
|
||||||
|
fg = bg;
|
||||||
|
bg = fg;
|
||||||
|
};
|
||||||
|
"ui.cursor.insert" = {
|
||||||
|
fg = bg;
|
||||||
|
bg = fg;
|
||||||
|
};
|
||||||
|
"ui.cursor.select" = {
|
||||||
|
fg = bg;
|
||||||
|
bg = fg;
|
||||||
|
};
|
||||||
|
|
||||||
|
"ui.cursorline.primary" = {
|
||||||
|
bg = bg3;
|
||||||
|
};
|
||||||
|
|
||||||
|
"ui.highlight" = {
|
||||||
|
bg = bg3;
|
||||||
|
fg = bg;
|
||||||
|
modifiers = [ "bold" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
"ui.menu" = {
|
||||||
|
fg = fg3;
|
||||||
|
bg = bg2;
|
||||||
|
};
|
||||||
|
"ui.menu.selected" = {
|
||||||
|
fg = text;
|
||||||
|
bg = bg3;
|
||||||
|
modifiers = [ "bold" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
"diagnostic.error" = {
|
||||||
|
underline = {
|
||||||
|
color = red;
|
||||||
|
style = "curl";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"diagnostic.warning" = {
|
||||||
|
underline = {
|
||||||
|
color = orange;
|
||||||
|
style = "curl";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"diagnostic.info" = {
|
||||||
|
underline = {
|
||||||
|
color = blue;
|
||||||
|
style = "curl";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"diagnostic.hint" = {
|
||||||
|
underline = {
|
||||||
|
color = blue;
|
||||||
|
style = "curl";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
error = red;
|
||||||
|
warning = orange;
|
||||||
|
info = blue;
|
||||||
|
hint = yellow;
|
||||||
|
"ui.background" = {
|
||||||
|
bg = bg;
|
||||||
|
fg = fgdim;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
"ui.cursorline.primary" = { bg = "default" }
|
||||||
|
"ui.cursorline.secondary" = { bg = "default" }
|
||||||
|
*/
|
||||||
|
"ui.cursorcolumn.primary" = {
|
||||||
|
bg = bg3;
|
||||||
|
};
|
||||||
|
"ui.cursorcolumn.secondary" = {
|
||||||
|
bg = bg3;
|
||||||
|
};
|
||||||
|
|
||||||
|
"ui.bufferline.active" = {
|
||||||
|
fg = primary;
|
||||||
|
bg = bg3;
|
||||||
|
underline = {
|
||||||
|
color = primary;
|
||||||
|
style = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue