Skip to content
This repository was archived by the owner on Oct 7, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
15021ff
refactor(installer): remove legacy rust installer and related CI/rele…
reze-dev Aug 20, 2026
8dc3ef1
feat(disko): add dynamic mkDisko partition generator with 2GB ESP def…
reze-dev Aug 20, 2026
215465e
feat(flake): add formatter and development shell modules
reze-dev Aug 20, 2026
fb84e06
test(flake): add nix-native checks for module syntax, lib assertions,…
reze-dev Aug 20, 2026
b0b9dcb
refactor(flake): simplify dendritic hosts discovery and pipe expressions
reze-dev Aug 20, 2026
f383c59
fix(modules): resolve Hyprland conditional crash in display manager
reze-dev Aug 20, 2026
e143ddb
fix(modules): fix email whitespace, hardcoded shell path, dead caeles…
reze-dev Aug 20, 2026
c8d47fa
refactor(hosts): decouple personal extraHosts and update Makima host …
reze-dev Aug 20, 2026
ad45f3f
feat(nix): integrate Determinate Nix as system nix package, installer…
reze-dev Aug 20, 2026
3ba48eb
docs: add example host template, contributing guide, and revamp README
reze-dev Aug 20, 2026
6946344
refactor(disko): remove static btrfs.nix and ext4.nix in favor of mkD…
reze-dev Aug 20, 2026
042008e
refactor(structure): rename redundant default.nix files to descriptiv…
reze-dev Aug 20, 2026
fc5d244
refactor(flake): group flake inputs and abstract outputs into flake/m…
reze-dev Aug 20, 2026
f43ff6c
chore(assets): remove cached wallpapers from git except for the defau…
reze-dev Aug 21, 2026
08aaedf
feat(disko): add size parser and extraConfig support for custom parti…
reze-dev Aug 21, 2026
fa46882
fix(core): remove hardware.nix auto-import loop and fix grub theme op…
reze-dev Aug 21, 2026
0ba189b
fix(hosts): explicitly import hardware.nix
reze-dev Aug 21, 2026
71c1f23
feat(installer): overhaul bootloader defaults, partitioning flow, and…
reze-dev Aug 21, 2026
4e29753
test(checks): implement sandboxed E2E evaluation tests for lib functions
reze-dev Aug 21, 2026
94bf28d
fix(devshell): add system to perSystem destructuring
reze-dev Aug 21, 2026
c698bb8
refactor(boot): remove GRUB, make Limine the sole bootloader
reze-dev Aug 21, 2026
0ace8da
fix(installer): fix escape_nix_string, remove GRUB support, fix swap …
reze-dev Aug 21, 2026
f9b2345
refactor(packages): split desktop packages into dedicated module
reze-dev Aug 21, 2026
e236e9a
chore: remove Makima host and dead omp.nix module
reze-dev Aug 21, 2026
c88d3f5
fix(checks): remove unused moduleFiles, update host references
reze-dev Aug 21, 2026
04f3d34
docs(disko): document swap architecture differences by mode
reze-dev Aug 21, 2026
35d04bb
test: remove GRUB references from all test suites
reze-dev Aug 21, 2026
bc4158c
docs(readme): update for audit changes
reze-dev Aug 21, 2026
5da605b
fix(hosts): add Makima host, import hardware.nix, and remove legacy e…
reze-dev Aug 22, 2026
69b617d
refactor(boot): simplify boot module to Limine-only with native Secur…
reze-dev Aug 22, 2026
127f59a
fix(installer): resolve key retry crash and update documentation & te…
reze-dev Aug 22, 2026
7ccdc7e
fix(boot): auto-generate sbctl keys for Limine Secure Boot and update…
reze-dev Aug 22, 2026
ac38dee
fix(tests): update legacy secureboot PKI test paths from /etc/secureb…
reze-dev Aug 22, 2026
a138ee1
fix(hardware): fix the initialization of gpu and installation of linu…
reze-dev Aug 22, 2026
e89d134
chore: fix formatting to pass ci checks
reze-dev Aug 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 1 addition & 40 deletions .github/workflows/check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,47 +32,8 @@ jobs:
- name: Evaluate Makima Host Configuration
run: nix eval --impure --expr '(builtins.getFlake (toString ./.)).nixosConfigurations.Makima.config.system.build.toplevel.name'

rust-ci:
name: Rust TUI Installer Tests & Build
runs-on: ubuntu-latest
defaults:
run:
working-directory: installer-rs

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy

- name: Cache cargo
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
installer-rs/target
key: ${{ runner.os }}-cargo-${{ hashFiles('installer-rs/Cargo.lock') }}

- name: Check formatting
run: cargo fmt --check

- name: Clippy (lint)
run: cargo clippy -- -D warnings

- name: Run Rust unit & integration tests
run: cargo test --verbose

- name: Build binary
run: cargo build --release

- name: Verify Cargo.lock is up to date
run: |
cargo update --dry-run 2>&1
echo "✅ Cargo.lock is up to date"
run: nix fmt -- --check .

python-ci:
name: Python Installer & E2E Tests
Expand Down
79 changes: 0 additions & 79 deletions .github/workflows/release.yml

This file was deleted.

8 changes: 5 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
result
installer-rs/target/
result/
__pycache__/
*.pyc
.direnv/

assets/wallpapers/Einsamer_Raum.jpg
# Ignore all wallpapers except rose pine fractal
assets/wallpapers/*
!assets/wallpapers/rose-pine-fractal.jpg
125 changes: 125 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
# Contributing to Northstar

Thanks for your interest in contributing! This guide covers the development workflow.

## Prerequisites

- [Nix](https://nixos.org/download.html) with flakes enabled
- Add to `~/.config/nix/nix.conf`:
```
experimental-features = nix-command flakes pipe-operators
```

## Development Shell

Enter the dev shell for formatting, linting, and test tools:

```bash
nix develop
```

This provides `nixfmt`, `nil` (Nix LSP), `python3`, `git`, and `jq`.

## Adding a New Host

1. Run the interactive installer (creates `hosts/<hostname>` automatically):
```bash
nix run . --impure
```

2. Or create a host directory manually (`hosts/YourHostName` containing `default.nix`, `disko.nix`, and `hardware.nix`):
```bash
mkdir -p hosts/YourHostName
sudo nixos-generate-config --show-hardware-config > hosts/YourHostName/hardware.nix
```

3. Edit `hosts/YourHostName/default.nix` — set your username, profiles, GPU settings, etc.

4. Configure your disk layout in `hosts/YourHostName/disko.nix` using `mkDisko`.

5. Build and switch:
```bash
sudo nixos-rebuild switch --flake .#YourHostName
```

The host is **auto-discovered** — any directory in `hosts/` with both `default.nix` and `hardware.nix` is automatically registered as a NixOS configuration.

## Adding a New Feature Module

1. Create a new `.nix` file in the appropriate `modules/features/<category>/` directory.

2. Follow the standard pattern:
```nix
{ config, lib, ... }:
let
cfg = config.northstar.features.yourfeature;
in
{
options.northstar.features.yourfeature.enable =
lib.mkEnableOption "description of your feature";

config = lib.mkIf cfg.enable {
# Your configuration here
};
}
```

3. The module is **auto-discovered** — `lib.scanModules` picks up any `.nix` file in `modules/` (except `default.nix` and files starting with `.` or `_`).

4. Optionally add it to a profile in `modules/profiles/`.

## Running Tests

```bash
# Nix-native checks (module syntax, lib tests, eval tests)
nix flake check --impure

# Python installer tests
python3 -m unittest discover -s tests -v

# Format check
nix fmt -- --check .
```

## Code Formatting

Format all Nix files:

```bash
nix fmt
```

We use `nixfmt-rfc-style` (the RFC 166 formatter).

## PR Workflow

1. Create a feature branch: `git checkout -b feat/your-feature`
2. Make your changes
3. Run `nix fmt` to format
4. Run `nix flake check --impure` to verify
5. Commit and push
6. Open a PR against `main`

## Directory Structure

```
northstar/
├── flake.nix # Flake entry point
├── flake/ # flake-parts modules (hosts, installer, checks, devshell, formatter)
├── hosts/ # Host machine configs (auto-discovered)
│ ├── common.nix # Shared base config
│ └── <hostname>/ # Per-machine config
├── home/
│ └── home.nix # Base Home Manager user environment
├── lib/
│ ├── core.nix # Shared Nix helpers (scanModules, discoverHosts, mkDisko, mkUser, mkProfile)
│ └── disko/
│ └── generator.nix # Dynamic mkDisko partition generator
├── modules/ # Option-based modules (auto-discovered)
│ ├── features/ # Vertical feature slices (core, desktop, dev, shell, terminals, tools)
│ ├── hardware/ # Hardware drivers (NVIDIA)
│ └── profiles/ # Composable feature bundles (base, desktop, workstation, gaming)
├── installer/ # Python interactive installer
├── tests/ # Python test suites
└── assets/ # Themes and media
```
Loading
Loading