295 lines
7.1 KiB
Nix
295 lines
7.1 KiB
Nix
{ pkgs, tmuxPackage ? null, ... }:
|
|
|
|
let
|
|
# Define programming language support options with comprehensive configuration
|
|
supportedLanguages = {
|
|
# Default languages that are always included for basic functionality
|
|
odin = {
|
|
enable = true;
|
|
package = pkgs.odin;
|
|
languageServer = pkgs.ols;
|
|
lspName = "ols";
|
|
description = "Odin programming language with OLS";
|
|
};
|
|
harper = {
|
|
enable = true;
|
|
package = pkgs.harper;
|
|
languageServer = pkgs.harper;
|
|
lspName = "harper";
|
|
description = "Harper language with Harper Language Server";
|
|
};
|
|
|
|
# Optional languages that can be conditionally enabled
|
|
rust = {
|
|
enable = false;
|
|
package = pkgs.rustc;
|
|
languageServer = pkgs.rust-analyzer;
|
|
lspName = "rust-analyzer";
|
|
description = "Rust programming language with rust-analyzer";
|
|
};
|
|
python = {
|
|
enable = false;
|
|
package = pkgs.python3;
|
|
languageServer = pkgs.python3Packages.pyright;
|
|
lspName = "pyright";
|
|
description = "Python programming language with Pyright";
|
|
};
|
|
javascript = {
|
|
enable = false;
|
|
package = pkgs.nodejs;
|
|
languageServer = pkgs.nodePackages.typescript-language-server;
|
|
lspName = "typescript-language-server";
|
|
description = "JavaScript/TypeScript with TypeScript Language Server";
|
|
};
|
|
go = {
|
|
enable = false;
|
|
package = pkgs.go;
|
|
languageServer = pkgs.gopls;
|
|
lspName = "gopls";
|
|
description = "Go programming language with gopls";
|
|
};
|
|
java = {
|
|
enable = false;
|
|
package = pkgs.openjdk;
|
|
languageServer = pkgs.jdt.ls;
|
|
lspName = "jdt.ls";
|
|
description = "Java programming language with JDT Language Server";
|
|
};
|
|
};
|
|
|
|
# Helper function to get activated language packages
|
|
getActivatedLanguages =
|
|
builtins.filter (name: supportedLanguages.${name}.enable) (builtins.attrNames supportedLanguages);
|
|
|
|
# Helper function to get all language packages for activation
|
|
getAllLanguagePackages =
|
|
(builtins.map (lang: supportedLanguages.${lang}.package) (getActivatedLanguages))
|
|
++ (builtins.map (lang: supportedLanguages.${lang}.languageServer) (getActivatedLanguages));
|
|
|
|
# Helper function to generate language server configuration sections
|
|
generateLanguageServerConfig =
|
|
(builtins.concatMap (lang:
|
|
if supportedLanguages.${lang}.enable then
|
|
[
|
|
''[[languages.${lang}]]''
|
|
''language-server = { name = "${supportedLanguages.${lang}.lspName}", command = "${supportedLanguages.${lang}.lspName}" }''
|
|
]
|
|
else
|
|
[]
|
|
) (getActivatedLanguages));
|
|
|
|
# Get all activated language servers for PATH
|
|
getLanguageServerPaths =
|
|
(builtins.map (lang: "${supportedLanguages.${lang}.languageServer}/bin") (getActivatedLanguages));
|
|
|
|
in
|
|
{
|
|
# Home Manager configuration for cross-platform use (WSL, Linux, Mac M1)
|
|
|
|
# Enable Home Manager
|
|
programs.home-manager.enable = true;
|
|
|
|
# Package configuration - these will work across all platforms
|
|
home.packages = with pkgs; [
|
|
# Core tools
|
|
tmux
|
|
helix
|
|
zsh
|
|
git
|
|
openssh
|
|
|
|
# Terminal applications
|
|
alacritty
|
|
starship
|
|
htop
|
|
|
|
# Docker support
|
|
docker-client
|
|
docker-compose
|
|
|
|
# Programming languages and language servers (default always included)
|
|
# These are the core tools that are always enabled
|
|
odin
|
|
ols # Odin Language Server
|
|
harper # Harper Language Server
|
|
|
|
# Additional dev tools
|
|
gcc
|
|
gnumake
|
|
curl
|
|
wget
|
|
jq
|
|
ripgrep
|
|
findutils
|
|
] ++ getAllLanguagePackages;
|
|
|
|
# Zsh configuration
|
|
programs.zsh = {
|
|
enable = true;
|
|
syntaxHighlighting.enable = true;
|
|
oh-my-zsh = {
|
|
enable = true;
|
|
theme = "agnoster";
|
|
};
|
|
# Zshrc configuration
|
|
shellAliases = {
|
|
"ls" = "eza";
|
|
"g" = "git";
|
|
"docker" = "docker";
|
|
"h" = "htop";
|
|
};
|
|
};
|
|
|
|
# Tmux configuration - base settings
|
|
programs.tmux = {
|
|
enable = true;
|
|
clock24 = true;
|
|
historyLimit = 10000;
|
|
mouse = true;
|
|
# Basic tmux configuration file
|
|
shell = "zsh";
|
|
# Use the tmux package from jakehamilton/tmux
|
|
package = tmuxPackage;
|
|
};
|
|
|
|
# Git configuration
|
|
programs.git = {
|
|
enable = true;
|
|
userName = "Your Name";
|
|
userEmail = "your.email@example.com";
|
|
extraConfig = {
|
|
core.editor = "hx";
|
|
push.default = "current";
|
|
};
|
|
};
|
|
|
|
# SSH configuration
|
|
programs.ssh = {
|
|
enable = true;
|
|
};
|
|
|
|
# Alacritty configuration - simple but functional
|
|
programs.alacritty = {
|
|
enable = true;
|
|
settings = {
|
|
font = {
|
|
normal.family = "JetBrainsMono Nerd Font";
|
|
size = 12.0;
|
|
};
|
|
colors = {
|
|
primary = {
|
|
background = "0x1e1e2e";
|
|
foreground = "0xf8f8f2";
|
|
};
|
|
cursor = {
|
|
text = "0x1e1e2e";
|
|
cursor = "0xf8f8f2";
|
|
};
|
|
normal = {
|
|
black = "0x1e1e2e";
|
|
red = "0xf84a50";
|
|
green = "0x7ab872";
|
|
yellow = "0xf59850";
|
|
blue = "0x5192db";
|
|
magenta = "0xb775d9";
|
|
cyan = "0x54cecd";
|
|
white = "0xf8f8f2";
|
|
};
|
|
bright = {
|
|
black = "0x1e1e2e";
|
|
red = "0xf84a50";
|
|
green = "0x7ab872";
|
|
yellow = "0xf59850";
|
|
blue = "0x5192db";
|
|
magenta = "0xb775d9";
|
|
cyan = "0x54cecd";
|
|
white = "0xf8f8f2";
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
# Starship configuration - modern prompt
|
|
programs.starship = {
|
|
enable = true;
|
|
settings = {
|
|
add_newline = false;
|
|
command_timeout = 1000;
|
|
format = "$all";
|
|
right_format = "$time";
|
|
time = {
|
|
format = "%T";
|
|
disabled = false;
|
|
};
|
|
};
|
|
};
|
|
|
|
# Helix - main editor with language server support
|
|
programs.helix = {
|
|
enable = true;
|
|
};
|
|
|
|
# Create Helix config with language servers for all activated languages
|
|
home.file.".config/helix/config.toml".text = ''
|
|
# Helix Configuration with Language Servers
|
|
|
|
[editor]
|
|
theme="peachpuff"
|
|
|
|
[editor.file-picker]
|
|
hidden = true
|
|
|
|
[editor]
|
|
line-number = "relative"
|
|
|
|
[editor.cursor-shape]
|
|
insert = "bar"
|
|
normal = "block"
|
|
select = "underline"
|
|
|
|
[editor.lsp]
|
|
enable = true
|
|
auto-start = true
|
|
|
|
[language-server.harper-ls]
|
|
command = "harper-ls"
|
|
args = ["--stdio"]
|
|
|
|
[language-server.harper-ls.config.harper-ls.linters]
|
|
SpellCheck = false
|
|
SentenceCapitalization = false
|
|
|
|
[language-server.ols]
|
|
command = "ols"
|
|
args = []
|
|
|
|
[[language]]
|
|
name = "odin"
|
|
language-servers = ["ols", "harper-ls"]
|
|
|
|
# Dynamically added language servers based on user selection
|
|
${builtins.concatStringsSep "\n" (generateLanguageServerConfig)}
|
|
'';
|
|
|
|
# Environment variables
|
|
home.sessionVariables = {
|
|
EDITOR = "hx";
|
|
VISUAL = "hx";
|
|
};
|
|
|
|
# Ensure proper PATH for language servers
|
|
home.sessionPath = [
|
|
"${pkgs.odin}/bin"
|
|
"${pkgs.ols}/bin"
|
|
"${pkgs.harper}/bin"
|
|
"${pkgs.docker-client}/bin"
|
|
] ++ getLanguageServerPaths;
|
|
|
|
# Create directory structure for configs
|
|
home.activation = {
|
|
createDirs = ''
|
|
mkdir -p $HOME/.config/helix
|
|
'';
|
|
};
|
|
}
|