initial state
This commit is contained in:
@@ -0,0 +1,276 @@
|
||||
{ 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
|
||||
'';
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user