227 lines
6.9 KiB
Markdown
227 lines
6.9 KiB
Markdown
# Implementation Plan - Nix Flake Improvements
|
|
|
|
## Overview
|
|
|
|
Consolidated plan from:
|
|
- [AWESOME_NIX_PLAN.md](AWESOME_NIX_PLAN.md) - Awesome-nix integration
|
|
- [DRUPOL_INFRA_ANALYSIS.md](DRUPOL_INFRA_ANALYSIS.md) - Reference patterns
|
|
- [OPENCODE.md](OPENCODE.md) - Tracking document
|
|
|
|
## ✅ Completed
|
|
|
|
### Code Quality
|
|
- ✅ GitHub Actions CI (`.github/workflows/flake-check.yaml`)
|
|
- ✅ Nix-native git hooks (`modules/git-hooks/default.nix`)
|
|
- ✅ nixfmt integration (runs on commit and CI)
|
|
- ✅ .editorconfig (unified code style)
|
|
|
|
### Declarative Setup
|
|
- ✅ Git hooks auto-install on `nixos-rebuild switch`
|
|
- ✅ No devShell (fully NixOS activation-based)
|
|
- ✅ Hooks enabled on andromache and astyanax
|
|
|
|
## 📋 Pending Implementation
|
|
|
|
### Phase 1: Enhanced Code Quality (Week 1)
|
|
**Priority: HIGH** ✅ Complete
|
|
|
|
| # | Task | Effort | Impact | Details | Status |
|
|
|---|-------|--------|---------|----------|--------|
|
|
| 1.1 | Add statix hook | Low | High | Lint for Nix antipatterns | ✅ Done |
|
|
| 1.2 | Add deadnix hook | Low | High | Find dead code in Nix files | ✅ Done |
|
|
| 1.3 | Enable git-hooks on all hosts | Very Low | Medium | Add to hecuba, eetion, vm | ✅ Done |
|
|
| 1.4 | Fix activation script | Low | High | Use `nix flake check` | ✅ Done |
|
|
| 1.5 | Fix module syntax errors | Low | High | Correct brace closing | ✅ Done |
|
|
|
|
| # | Task | Effort | Impact | Details | Status |
|
|
|---|-------|--------|---------|----------|--------|
|
|
| 1.1 | Add statix hook | Low | High | Lint for Nix antipatterns | ✅ Done |
|
|
| 1.2 | Add deadnix hook | Low | High | Find dead code in Nix files | ✅ Done |
|
|
| 1.3 | Enable git-hooks on all hosts | Very Low | Medium | Add to hecuba, eetion, vm | ✅ Done |
|
|
|
|
**Implementation:**
|
|
```nix
|
|
# flake.nix
|
|
checks.${system}.pre-commit-check.hooks = {
|
|
nixfmt-rfc-style.enable = true; # ✅ Already done
|
|
statix.enable = true; # Add this
|
|
deadnix.enable = true; # Add this
|
|
};
|
|
```
|
|
|
|
### Phase 2: CI/CD Enhancements (Week 2)
|
|
**Priority: HIGH**
|
|
|
|
| # | Task | Effort | Impact | Details |
|
|
|---|-------|--------|---------|
|
|
| 2.1 | Add CI caching | Medium | High | Speed up GitHub Actions builds |
|
|
| 2.2 | Add automated flake.lock updates | Medium | Medium | Weekly scheduled updates |
|
|
| 2.3 | Add per-host CI checks | Medium | Medium | Test specific NixOS configs in CI |
|
|
|
|
**2.1 CI Caching:**
|
|
```yaml
|
|
# .github/workflows/flake-check.yaml
|
|
- uses: actions/cache@v4
|
|
with:
|
|
path: /nix/store
|
|
key: ${{ runner.os }}-nix-${{ hashFiles('**') }}
|
|
```
|
|
|
|
**2.2 Automated Updates:**
|
|
```yaml
|
|
# .github/workflows/update-flake-lock.yaml
|
|
name: "Auto update flake lock"
|
|
on:
|
|
schedule:
|
|
- cron: "0 12 * * 0" # Weekly
|
|
jobs:
|
|
update:
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- uses: cachix/install-nix-action@v31
|
|
- run: nix flake update
|
|
- uses: peter-evans/create-pull-request@v6
|
|
```
|
|
|
|
### Phase 3: Developer Experience (Week 3)
|
|
**Priority: MEDIUM**
|
|
|
|
| # | Task | Effort | Impact | Details |
|
|
|---|-------|--------|---------|
|
|
| 3.1 | Add nil/nixd LSP | Low | Medium | Autocompletion, error highlighting |
|
|
| 3.2 | Add nix-index + comma | Low | Medium | Run any binary without `nix run` |
|
|
| 3.3 | Add nh | Low | Medium | Better CLI output for nix commands |
|
|
|
|
**3.1 LSP Setup:**
|
|
```nix
|
|
# Add to nvim config or home-manager
|
|
services.lsp.servers.nil = {
|
|
enable = true;
|
|
package = pkgs.nil;
|
|
};
|
|
```
|
|
|
|
**3.2 nix-index:**
|
|
```bash
|
|
nix-index
|
|
git clone https://github.com/nix-community/nix-index
|
|
```
|
|
|
|
### Phase 4: Utility Tools (Week 4)
|
|
**Priority: LOW**
|
|
|
|
| # | Task | Effort | Impact | Details |
|
|
|---|-------|--------|---------|
|
|
| 4.1 | Add nix-tree | Very Low | Low | Browse dependency graph |
|
|
| 4.2 | Add nix-du | Very Low | Low | Visualize GC roots |
|
|
| 4.3 | Add nix-init | Low | Low | Generate packages from URLs |
|
|
| 4.4 | Add nix-update | Low | Low | Update package versions |
|
|
|
|
### Phase 5: Structural Improvements (Future)
|
|
**Priority: LOW-MEDIUM**
|
|
|
|
| # | Task | Effort | Impact | Details |
|
|
|---|-------|--------|---------|
|
|
| 5.1 | Migrate to flake-parts | Medium-High | High | Automatic module discovery |
|
|
| 5.2 | Add treefmt-nix | Medium | Medium | Unified project formatting |
|
|
| 5.3 | Add nix-direnv | Low | Medium | Auto-load dev environments |
|
|
|
|
## 📊 Implementation Status
|
|
|
|
### Code Quality
|
|
| Feature | Status | File |
|
|
|---------|--------|-------|
|
|
| CI (GitHub Actions) | ✅ Done | `.github/workflows/flake-check.yaml` |
|
|
| Git hooks (Nix-native) | ✅ Done | `modules/git-hooks/default.nix` |
|
|
| nixfmt | ✅ Done | Enabled in hooks |
|
|
| statix | ✅ Done | Phase 1.1 complete |
|
|
| deadnix | ✅ Done | Phase 1.2 complete |
|
|
| All hosts enabled | ✅ Done | Phase 1.3 complete |
|
|
| CI caching | ⏳ Pending | Phase 2.1 |
|
|
| Auto flake updates | ⏳ Pending | Phase 2.2 |
|
|
|
|
### Hosts with Git Hooks
|
|
| Host | Status | Config |
|
|
|------|--------|--------|
|
|
| andromache | ✅ Enabled | `hosts/andromache/default.nix` |
|
|
| astyanax | ✅ Enabled | `hosts/astyanax/default.nix` |
|
|
| hecuba | ✅ Enabled | `hosts/hecuba/default.nix` |
|
|
| eetion | ✅ Enabled | `hosts/eetion/default.nix` |
|
|
| vm | ✅ Enabled | `hosts/vm/default.nix` |
|
|
|
|
### Developer Tools
|
|
| Tool | Status | Phase |
|
|
|------|--------|--------|
|
|
| nil/nixd | ⏳ Pending | 3.1 |
|
|
| nix-index | ⏳ Pending | 3.2 |
|
|
| nh | ⏳ Pending | 3.3 |
|
|
| nix-tree | ⏳ Pending | 4.1 |
|
|
| nix-du | ⏳ Pending | 4.2 |
|
|
| nix-init | ⏳ Pending | 4.3 |
|
|
| nix-update | ⏳ Pending | 4.4 |
|
|
|
|
### Structure
|
|
| Feature | Status | Phase |
|
|
|---------|--------|--------|
|
|
| flake-parts | ⏳ Pending | 5.1 |
|
|
| treefmt-nix | ⏳ Pending | 5.2 |
|
|
| nix-direnv | ⏳ Pending | 5.3 |
|
|
| .editorconfig | ✅ Done | Already added |
|
|
|
|
## 🎯 Quick Wins (Day 1)
|
|
|
|
If you want immediate value, start with:
|
|
|
|
### 1. Enable git-hooks on remaining hosts (5 minutes)
|
|
```nix
|
|
# Add to hosts/hecuba/default.nix, eetion/default.nix, vm/default.nix
|
|
imports = [
|
|
# ... existing modules
|
|
../../modules/git-hooks
|
|
];
|
|
|
|
services.git-hooks.enable = true;
|
|
```
|
|
|
|
### 2. Add statix hook (10 minutes)
|
|
```nix
|
|
# Edit flake.nix
|
|
checks.${system}.pre-commit-check.hooks = {
|
|
nixfmt-rfc-style.enable = true;
|
|
statix.enable = true; # Add this
|
|
};
|
|
```
|
|
|
|
### 3. Add deadnix hook (10 minutes)
|
|
```nix
|
|
# Edit flake.nix
|
|
checks.${system}.pre-commit-check.hooks = {
|
|
nixfmt-rfc-style.enable = true;
|
|
statix.enable = true;
|
|
deadnix.enable = true; # Add this
|
|
};
|
|
```
|
|
|
|
## 📚 References
|
|
|
|
- [CI_HOOKS_SUMMARY.md](CI_HOOKS_SUMMARY.md) - Current CI/hooks setup
|
|
- [AWESOME_NIX_PLAN.md](AWESOME_NIX_PLAN.md) - Awesome-nix integration
|
|
- [DRUPOL_INFRA_ANALYSIS.md](DRUPOL_INFRA_ANALYSIS.md) - Reference patterns
|
|
- [OPENCODE.md](OPENCODE.md) - Original tracking
|
|
|
|
## 🚀 Implementation Order
|
|
|
|
**Recommended sequence:**
|
|
1. **Phase 1** (Week 1) - Enhanced code quality
|
|
2. **Phase 2** (Week 2) - CI/CD improvements
|
|
3. **Phase 3** (Week 3) - Developer experience
|
|
4. **Phase 4** (Week 4) - Utility tools
|
|
5. **Phase 5** (Future) - Structural changes
|
|
|
|
## 🔄 Updates
|
|
|
|
As items are completed, update the status in this document and check off in:
|
|
- [AWESOME_NIX_PLAN.md](AWESOME_NIX_PLAN.md)
|
|
- [OPENCODE.md](OPENCODE.md)
|
|
- [CI_HOOKS_SUMMARY.md](CI_HOOKS_SUMMARY.md)
|