Files
my-default-nix-home/home-manager/home.nix
T
2026-08-19 18:07:44 -04:00

276 lines
6.9 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;
autosuggestion.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;
keyBinding = "vi";
# 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 = "onedark"
[editor.lsp]
enable = true
auto-start = true
# Default language servers (always active)
[[languages.odin]]
language-server = { name = "ols", command = "ols" }
[[languages.harper]]
language-server = { name = "harper", command = "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
'';
};
}