Skip to content

Instantly share code, notes, and snippets.

@stuzenz
Created August 6, 2025 21:54
Show Gist options
  • Save stuzenz/d3635f20b61563e814820402334a41a0 to your computer and use it in GitHub Desktop.
Save stuzenz/d3635f20b61563e814820402334a41a0 to your computer and use it in GitHub Desktop.
My NixOS setup for Helix

Helix setup for NixOS

The following files provide my setup for Helix on NixOS. I find it to be a nice experience (for me) when compared to the alternatives

_: {
imports = [ ../language-servers ];
# programs.helix = {
# enable = true;
# settings = {
# theme = "autumn_night_transparent";
# editor.cursor-shape = {
# normal = "block";
# insert = "bar";
# select = "underline";
# };
# };
# languages.language = [{
# name = "nix";
# auto-format = true;
# formatter.command = "${pkgs.nixfmt}/bin/nixfmt";
# }];
# themes = {
# autumn_night_transparent = {
# "inherits" = "autumn_night";
# "ui.background" = { };
# };
# };
# };
programs.helix = {
enable = true;
settings = {
theme = "tokyonight_storm";
editor = {
line-number = "relative";
cursorline = true;
scrolloff = 5;
color-modes = true;
idle-timeout = 1;
true-color = true;
# rainbow-brackets = true;
bufferline = "always";
rulers = [ 100 ];
popup-border = "all";
soft-wrap.enable = true;
completion-replace = true;
# sticky-context = {
# enable = true;
# indicator = false;
# };
lsp = {
display-messages = true;
display-inlay-hints = true;
};
# inline-diagnostics = {
# cursor-line = "hint";
# other-lines = "error";
# };
whitespace.render = "all";
whitespace.characters = {
space = "·";
nbsp = "⍽";
tab = "→";
newline = "⤶";
};
gutters = [ "diagnostics" "line-numbers" "spacer" "diff" ];
statusline = {
separator = "of";
left = [
"mode"
"selections"
"file-type"
"register"
"spinner"
"diagnostics"
];
center = [ "file-name" ];
right = [
"file-encoding"
"file-line-ending"
"position-percentage"
"spacer"
"separator"
"total-line-numbers"
];
mode = {
normal = "NORMAL";
insert = "INSERT";
select = "SELECT";
};
};
indent-guides = {
render = true;
rainbow-option = "normal";
};
};
keys.normal = {
"X" = "extend_line_above";
"C-q" = ":bc";
"C-d" = [ "half_page_down" "align_view_center" ];
"C-u" = [ "half_page_up" "align_view_center" ];
};
keys.normal."\\" = { "t" = [ ":vs ~/todo.md" ]; };
};
};
}
# rename and place at language-servers/default.nix
{ pkgs, system, ... }: {
home.packages = with pkgs; [
# Formatting
alejandra
# Debugging stuff
lldb
# Language servers
clang-tools # C-Style
# cmake-language-server # Cmake, pray to never need to use it
gopls # Go
nil # Nix
rust-analyzer # Rust
texlab # LaTeX
zls # Zig
# elixir_ls # Elixir
# clojure-lsp # Clojure
# haskellPackages.haskell-language-server # Haskell
nodePackages.typescript-language-server # Typescript
nodePackages.vim-language-server # Vim
nodePackages.yaml-language-server # YAML / JSON
luajitPackages.lua-lsp # Lua
python313Packages.python-lsp-server
nil
gopls
nodePackages.typescript-language-server
nodePackages.prettier
nodePackages.bash-language-server
shfmt
gleam
# helix-gpt # Copilot
];
# ++ (if system == "x86_64-linux" then [ols] else []); # Odin!
# xdg.configFile."zls.json".text = builtins.toJSON {
# "$schema" =
# "https://raw.githubusercontent.com/zigtools/zls/master/schema.json";
# enable_ast_check_diagnostics = true;
# enable_autofix = true;
# enable_import_embedfile_argument_completions = true;
# enable_inlay_hints = true;
# inlay_hints_hide_redundant_param_names = true;
# inlay_hints_hide_redundant_param_names_last_token = true;
# enable_semantic_tokens = true;
# enable_snippets = true;
# max_detail_length = 104857;
# operator_completions = true;
# use_comptime_interpreter = true;
# warn_style = true;
# include_at_in_builtins = true;
# zig_exe_path = "${pkgs.zigpkgs.master.outPath}/bin/zig";
# };
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment