NixOS-Config/home-manager/shared/shell/helix/default.nix

217 lines
6.3 KiB
Nix
Raw Normal View History

{pkgs, ...}: let
yazi =
pkgs.writeText "open_in_helix_from_yazi.zsh"
''
#! ~/.nix-profile/bin/zsh
files=(''${(fqq)"$( yazi --chooser-file=/dev/stdout | cat )"})
zellij action toggle-floating-panes
zellij action write 27 # send escape-key
zellij action write-chars ":open $files"
zellij action write 13 # send enter-key
zellij action toggle-floating-panes
zellij action close-pane
'';
jupyter =
pkgs.writeText "run_jupyter_from_helix.zsh"
''
#! ~/.nix-profile/bin/zsh
is_new() {
new=0;
mkdir -p /tmp/rjh;
if [[ -a "/tmp/rjh/$(pwd | tr \"/\" -).json" ]]; then
new=1
fi
return $new
}
is_new && zellij run -f -n "jupyter console" -- direnv exec . jupyter console --kernel="$1" -f="/tmp/rjh/$(pwd | tr \"/\" -).json" --ZMQTerminalInteractiveShell.include_other_output=True --ZMQTerminalInteractiveShell.other_output_prefix=''' && sleep 3
rm -f /tmp/pipe-rjh
mkfifo /tmp/pipe-rjh
cat > /tmp/pipe-rjh
zellij run -f -n "REPL" -- direnv exec . just send < /tmp/pipe-rjh
rm /tmp/pipe-rjh
'';
in {
2024-04-27 14:40:15 +02:00
programs.helix = {
enable = true;
2024-04-27 14:55:46 +02:00
defaultEditor = true;
settings = {
2024-10-03 11:31:27 +02:00
# theme = "catppuccin_macchiato"; # Don't need this because the module themes it for us
2024-10-16 21:47:40 +02:00
keys.normal.backspace = {
b = ":sh zellij run -f -n 'build code' -- direnv exec . just build";
r = ":sh zellij run -f -n 'run code' -- direnv exec . just run";
t = ":sh zellij run -f -n 'test code' -- direnv exec . just test";
g = ":sh zellij run -fc -n 'lazygit' -- lazygit";
f = ":sh zellij run --floating -n 'yazi picker' -- zsh ~/.config/helix/open_in_helix_from_yazi.zsh ";
j = ":pipe-to just jupyter";
2024-10-16 21:47:40 +02:00
};
2024-04-27 14:55:46 +02:00
editor = {
2024-12-14 21:37:13 +01:00
auto-save = {
focus-lost = true;
2024-12-14 21:41:01 +01:00
after-delay.enable = true;
after-delay.timeout = 3000;
2024-12-14 21:37:13 +01:00
};
2024-04-27 14:55:46 +02:00
line-number = "relative";
lsp.display-messages = true;
lsp.display-inlay-hints = true;
2024-04-27 14:55:46 +02:00
cursor-shape = {
insert = "bar";
normal = "block";
select = "underline";
};
cursorline = true;
bufferline = "always";
color-modes = true;
soft-wrap = {
enable = true;
max-wrap = 25;
wrap-indicator = "";
};
};
};
languages = {
language = [
{
name = "python";
language-id = "python";
auto-format = true;
2024-04-27 14:55:46 +02:00
file-types = ["py"];
2024-09-10 10:28:05 +02:00
language-servers = ["ruff" "scls" "pylsp"];
2024-04-27 14:55:46 +02:00
}
{
name = "typst";
language-id = "typst";
auto-format = false;
file-types = ["typ"];
language-servers = ["typst-lsp" "scls"];
2024-04-27 14:55:46 +02:00
}
{
name = "rust";
language-id = "rust";
auto-format = true;
file-types = ["rs"];
roots = ["Cargo.lock"];
language-servers = ["rust-analyzer" "scls"];
}
{
name = "stub";
scope = "text.stub";
file-types = [];
shebangs = [];
roots = [];
auto-format = false;
language-servers = ["scls"];
2024-04-27 14:55:46 +02:00
}
{
name = "nix";
language-id = "nix";
auto-format = true;
file-types = ["nix"];
roots = ["flake.lock" "flake.nix"];
2024-05-01 23:33:03 +02:00
language-servers = ["nil" "scls"];
2024-04-27 14:55:46 +02:00
formatter = {
2024-04-29 15:57:41 +02:00
command = "alejandra";
args = ["-q"];
2024-04-27 14:55:46 +02:00
};
}
2024-09-18 16:08:00 +02:00
{
name = "html";
language-id = "html";
auto-format = true;
file-types = ["htm" "html"];
language-servers = ["vscode-html-language-server" "vscode-eslint-language-server"];
}
{
name = "css";
language-id = "css";
auto-format = true;
file-types = ["css"];
language-servers = ["vscode-css-language-server" "vscode-eslint-language-server"];
}
{
name = "json";
language-id = "json";
auto-format = true;
file-types = ["json"];
language-servers = ["vscode-json-language-server" "vscode-eslint-language-server"];
}
2024-04-27 14:55:46 +02:00
];
language-server = {
2024-09-18 16:08:00 +02:00
vscode-html-language-server = {
command = "vscode-html-language-server";
};
vscode-css-language-server = {
command = "vscode-css-language-server";
};
vscode-eslint-language-server = {
command = "vscode-eslint-language-server";
};
vscode-json-language-server = {
command = "vscode-json-language-server";
};
2024-09-10 14:10:41 +02:00
pylsp = {
config.pylsp.plugins = {
flake8 = {enabled = false;};
autopep8 = {enabled = false;};
mccabe = {enabled = false;};
pycodestyle = {enabled = false;};
pyflakes = {enabled = false;};
pylint = {enabled = false;};
yapf = {enabled = false;};
2024-09-10 14:10:41 +02:00
ruff = {
enabled = true;
2024-09-10 15:37:42 +02:00
select = ["E" "F" "UP" "B" "SIM" "I" "PD" "NPY" "PERF" "FURB" "DOC" "TRY" "W" "R" "PL" "TCH" "Q" "PT" "ICN" "C4" "COM" "FBT" "S" "N"];
2024-09-10 14:10:41 +02:00
ignore = ["F401"];
lineLength = 120;
};
};
};
ruff = {
command = "ruff-lsp";
2024-04-27 14:55:46 +02:00
};
typst-lsp = {
command = "typst-lsp";
};
rust-analyzer = {
command = "rust-analyzer";
};
nil = {
command = "nil";
};
scls = {
command = "simple-completion-language-server";
config = {
max_completion_items = 20;
snippets_first = true;
feature_words = true;
feature_snippets = true;
feature_unicode_input = true;
feature_paths = true;
};
};
2024-04-27 14:55:46 +02:00
};
};
2024-04-27 14:40:15 +02:00
};
home.file = {
"helix" = {
source = ./snippets.toml;
target = ".config/helix/external-snippets.toml";
};
};
home.file = {
"yazi" = {
source = "${yazi}";
target = ".config/helix/open_in_helix_from_yazi.zsh";
};
};
2024-10-23 14:24:05 +02:00
home.file = {
"jupyter" = {
source = "${jupyter}";
target = ".config/helix/run_jupyter_from_helix.zsh";
2024-10-23 14:24:05 +02:00
};
};
2024-04-27 14:40:15 +02:00
}