initial state
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
# Home Manager Nix Configuration
|
||||
|
||||
This repository contains a Nix flake configuration for setting up a development environment with:
|
||||
|
||||
## Supported Platforms
|
||||
- Windows via WSL
|
||||
- Linux (non-NixOS)
|
||||
- macOS with M1 chips
|
||||
|
||||
## Installed Tools
|
||||
- **tmux** - Terminal multiplexer (using jakehamilton/tmux package)
|
||||
- **helix** - Modern editor with language server support
|
||||
- **zsh** - Enhanced shell
|
||||
- **starship** - Minimal, fast prompt
|
||||
- **alacritty** - Fast terminal emulator
|
||||
- **git** - Version control system
|
||||
- **ssh** - Secure shell client
|
||||
- **htop** - Interactive process viewer
|
||||
|
||||
## Programming Languages & Language Servers
|
||||
- **Odin** - With OLS (Odin Language Server) - *always included*
|
||||
- **Harper** - With Harper Language Server - *always included*
|
||||
- **Rust** - With rust-analyzer - *optional*
|
||||
- **Python** - With Pyright - *optional*
|
||||
- **JavaScript/TypeScript** - With TypeScript Language Server - *optional*
|
||||
- **Go** - With gopls - *optional*
|
||||
- **Java** - With JDT Language Server - *optional*
|
||||
|
||||
## Docker Support
|
||||
- **Docker Client** - For container management
|
||||
- **Docker Compose** - For multi-container applications
|
||||
|
||||
## Usage
|
||||
|
||||
To use this configuration with Home Manager:
|
||||
|
||||
1. Make sure you have Nix installed
|
||||
2. Run `home-manager switch` to apply the configuration
|
||||
|
||||
The configuration will set up:
|
||||
- Default shell to zsh
|
||||
- Editor to helix
|
||||
- Prompt to use starship
|
||||
- Terminal to use alacritty
|
||||
- All language servers properly configured
|
||||
- Docker support for containerized development
|
||||
|
||||
## Customization
|
||||
|
||||
To enable additional programming languages:
|
||||
|
||||
1. Edit `home-manager/home.nix`
|
||||
2. Change `enable = false;` to `enable = true;` for desired languages
|
||||
3. Run `home-manager switch` to apply changes
|
||||
|
||||
Example:
|
||||
```nix
|
||||
rust = {
|
||||
enable = true;
|
||||
package = pkgs.rustc;
|
||||
languageServer = pkgs.rust-analyzer;
|
||||
lspName = "rust-analyzer";
|
||||
};
|
||||
```
|
||||
|
||||
## Available Optional Languages
|
||||
- Rust: For systems programming
|
||||
- Python: For data science and scripting
|
||||
- JavaScript/TypeScript: For web development
|
||||
- Go: For backend services
|
||||
- Java: For enterprise applications
|
||||
|
||||
## Development Features
|
||||
|
||||
### Docker Integration
|
||||
Docker client and compose support are included for containerized development workflows.
|
||||
|
||||
### Language Server Protocol
|
||||
All supported languages include their respective language servers for enhanced IDE-like experience in Helix.
|
||||
|
||||
### System Monitoring
|
||||
htop is included for process monitoring and system resource tracking.
|
||||
|
||||
### tmux Integration
|
||||
Uses the tmux package from jakehamilton/tmux repository for enhanced tmux functionality.
|
||||
@@ -0,0 +1,57 @@
|
||||
{
|
||||
description = "Home Manager configuration with tmux, helix, zsh, starship, alacritty, git, ssh for WSL, Linux, and Mac M1 with Docker and conditional language support";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
home-manager = {
|
||||
url = "github:nix-community/home-manager/release-23.11";
|
||||
};
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
tmux = {
|
||||
url = "github:jakehamilton/tmux";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, home-manager, flake-utils, tmux }:
|
||||
flake-utils.lib.eachSystem [ "x86_64-linux" "aarch64-darwin" "x86_64-windows" ] (system: let
|
||||
pkgs = import nixpkgs {
|
||||
inherit system;
|
||||
config = {
|
||||
allowUnfree = true;
|
||||
};
|
||||
};
|
||||
in {
|
||||
# Development shell with all our tools
|
||||
devShells.default = pkgs.mkShell {
|
||||
buildInputs = with pkgs; [
|
||||
tmux
|
||||
helix
|
||||
zsh
|
||||
git
|
||||
openssh
|
||||
alacritty
|
||||
starship
|
||||
htop
|
||||
docker-client
|
||||
docker-compose
|
||||
odin
|
||||
ols
|
||||
harper
|
||||
gcc
|
||||
gnumake
|
||||
];
|
||||
};
|
||||
|
||||
# Home Manager configuration
|
||||
homeConfigurations."tylerbohrer" = home-manager.lib.homeManagerConfiguration {
|
||||
inherit pkgs;
|
||||
modules = [
|
||||
(import ./home-manager/home.nix {
|
||||
inherit pkgs;
|
||||
tmuxPackage = tmux.packages.${system}.tmux;
|
||||
})
|
||||
];
|
||||
};
|
||||
});
|
||||
}
|
||||
@@ -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