Signal drop!
Relay (operand.online) is unreachable.
Usually, a dropped signal means an upgrade is happening. Hold on!
Sorry, no connección.
Hang in there while we get back on track
gram:build
> ./nixos/module/shell.nix
Lenses
(coming soon!)
{ lib, pkgs, ... }:
{
home-manager.users.calliope = {
home.packages = with pkgs; [
mosh postgresql xplr
# helix-gpt
];
programs.git.extraConfig.core.editor = lib.mkOverride 100 "hx";
programs.helix = {
enable = true;
settings = {
editor.cursor-shape = {
normal = "block";
insert = "bar";
select = "underline";
};
};
# theme = "autumn_night"; #_transparent";
# lsp.display-messages = true;
# whitespace.render = "all";
# whitespace.characters = { space = "·"; nbsp = "⍽"; tab = "→"; newline = "⤶"; };
languages = with pkgs; {
language-server = {
gpt = {
command = "exit"; #helix-gpt";
args = [ "--handler" "ollama" "--ollamaModel" "codegemma:7b" ];
};
rust-analyzer = {
config.rust-analyzer = {
cargo.loadOutDirsFromCheck = true;
checkOnSave.command = "clippy";
procMacro.enable = true;
lens = { references = true; methodReferences = true; };
completion.autoimport.enable = true;
experimental.procAttrMacros = true;
};
};
eslint = {
command = "vscode-eslint-language-server";
args = [ "--stdio" ];
config = {
validate = "on";
packageManager = "yarn";
useESLintClass = false;
codeActionOnSave.mode = "all";
# codeActionsOnSave = { mode = "all"; };
format = true;
quiet = false;
onIgnoredFiles = "off";
rulesCustomizations = [ ];
run = "onType";
# nodePath configures the directory in which the eslint server should start its node_modules resolution.
# This path is relative to the workspace folder (root dir) of the server instance.
nodePath = "";
# use the workspace folder location or the file location (if no workspace folder is open) as the working directory
workingDirectory.mode = "auto";
experimental = { };
problems.shortenToSingleLine = false;
codeAction = {
disableRuleComment = {
enable = true;
location = "separateLine";
};
showDocumentation.enable = true;
};
};
};
nil = {
command = "${pkgs.nil}/bin/nil";
config.nil = {
formatting.command = [ "${nixpkgs-fmt}/bin/nixpkgs-fmt" ];
nix.flake.autoEvalInputs = true;
};
};
typescript-language-server = {
command = "${nodePackages.typescript-language-server}/bin/typescript-language-server";
args = [ "--stdio" "--tsserver-path=${nodePackages.typescript}/lib/node_modules/typescript/lib" ];
config.documentFormatting = false;
};
lexical = {
command = "${pkgs.lexical}/bin/lexical";
config.lexical = {
# formatting.command = [ "${nixpkgs-fmt}/bin/nixpkgs-fmt" ];
};
};
};
language = let
jsTsWebLanguageServers = [ "eslint" "gpt"
{ name = "typescript-language-server"; except-features = [ "format" ]; }
{ name = "efm-lsp-prettier"; only-features = [ "format" ]; }
];
indent = { unit = " "; tab-width = 2; };
in [
{ name = "bash"; file-types = [ "sh" "bash" ]; auto-format = true;
# Indent with 2 spaces, simplify the code, indent switch cases, add space after redirection
formatter = { command = "${pkgs.shfmt}/bin/shfmt"; args = [ "-i" "2" "-s" "-ci" "-sr" ]; };
language-servers = ["gpt"];
}
{ name = "typescript"; language-servers = jsTsWebLanguageServers; inherit indent; }
{ name = "javascript"; language-servers = jsTsWebLanguageServers; inherit indent; }
{ name = "jsx"; language-servers = jsTsWebLanguageServers; inherit indent; }
{ name = "tsx"; language-servers = jsTsWebLanguageServers; inherit indent; }
# { name = "vue"; language-servers = [{ name = "vuels"; except-features = [ "format" ]; } { name = "efm-lsp-prettier"; } "eslint"]; inherit indent; }
{ name = "elixir"; file-types = ["ex" "exs" ]; formatter.command = "${pkgs.elixir}/bin/mix format"; language-servers = [ "lexical" "gpt" ]; inherit indent; }
{ name = "heex"; language-servers = [ "lexical" ]; inherit indent; }
{ name = "rust"; auto-format = false; file-types = [ "lalrpop" "rs" ]; language-servers = [ "rust-analyzer" "gpt" ]; inherit indent; }
# { name = "ruby"; file-types = [ "rb" "rake" "rakefile" "irb" "gemfile" "gemspec" "Rakefile" "Gemfile" "Fastfile" "Matchfile" "Pluginfile" "Appfile" ]; inherit indent; }
# { name = "zig"; auto-format = false; language-servers = [ "gpt" ]; inherit indent; }
# { name = "nim"; auto-format = false; language-servers = [ "gpt" ]; inherit indent; }
{ name = "sql"; formatter.command = "pg_format"; inherit indent; }
{ name = "nix"; language-servers = [ "nil" ]; inherit indent; }
{ name = "json"; language-servers = [ "gpt" { name = "vscode-json-language-server"; except-features = [ "format" ]; } "efm-lsp-prettier"]; inherit indent; }
# human-readable
{ name = "markdown"; soft-wrap.enable = true;
language-servers = [
{ name = "marksman"; except-features = [ "format" ]; }
"ltex-ls" "efm-lsp-prettier"
];
inherit indent; }
{ name = "xml"; file-types = [ "xml" "html" ];
# auto-format = true;
formatter = {
command = "${pkgs.yq-go}/bin/yq";
args = [ "--input-format" "xml" "--output-format" "xml" "--indent" "2" ];
};
inherit indent; }
];
};
# themes = {
# autumn_night_transparent = { "inherits" = "autumn_night"; "ui.background" = {}; };
# };
package = pkgs.helix.overrideAttrs (self: {
makeWrapperArgs = with pkgs; self.makeWrapperArgs or [] ++ [
"--suffix" "PATH" ":" (lib.makeBinPath [
elixir-ls
marksman
nodePackages.yaml-language-server # yaml/json
nodePackages.stylelint
pgformatter
taplo # toml
])
];
});
};
};
}