initial scaffold: multi-host flake (poppy, muscari, rosemary)
- flake.nix with mkNixos + mkDarwin dispatchers
- hosts/common/{default.nix} (NixOS shared)
- hosts/common-darwin/{default.nix} (darwin shared)
- hosts/poppy/ (M1 MacBook Air, nix-darwin)
- hosts/muscari/ (k3s server, placeholder)
- hosts/rosemary/ (backup VM, placeholder)
- home/default.nix (home-manager for mikl)
- README.md, garden.md (host naming scheme: plants)
- secrets/.gitkeep
old muscari-only config moved to nix-config-legacy/
This commit is contained in:
commit
42fdbeb1a0
11 changed files with 202 additions and 0 deletions
8
.gitignore
vendored
Normal file
8
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
.DS_Store
|
||||||
|
*.swp
|
||||||
|
*.bak
|
||||||
|
result
|
||||||
|
result-*
|
||||||
|
.direnv/
|
||||||
|
*.local.nix
|
||||||
|
nh-output/
|
||||||
15
README.md
Normal file
15
README.md
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
# nix-config
|
||||||
|
|
||||||
|
Nix configurations for iscg infra hosts.
|
||||||
|
|
||||||
|
Hosts and naming scheme: see [garden.md](./garden.md).
|
||||||
|
|
||||||
|
## rebuild
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# poppy (macOS)
|
||||||
|
darwin-rebuild switch --flake .#poppy
|
||||||
|
|
||||||
|
# muscari, rosemary (NixOS)
|
||||||
|
sudo nixos-rebuild switch --flake .#<host>
|
||||||
|
```
|
||||||
77
flake.nix
Normal file
77
flake.nix
Normal file
|
|
@ -0,0 +1,77 @@
|
||||||
|
{
|
||||||
|
description = "nix-config — multi-host Nix configurations";
|
||||||
|
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
|
||||||
|
|
||||||
|
nix-darwin = {
|
||||||
|
url = "github:LnL7/nix-darwin";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
|
home-manager = {
|
||||||
|
url = "github:nix-community/home-manager";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
|
sops-nix = {
|
||||||
|
url = "github:Mic92/sops-nix";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
|
disko = {
|
||||||
|
url = "github:nix-community/disko";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs =
|
||||||
|
{ self, nixpkgs, nix-darwin, home-manager, sops-nix, disko, ... }:
|
||||||
|
let
|
||||||
|
mkNixos = hostname:
|
||||||
|
nixpkgs.lib.nixosSystem {
|
||||||
|
system = "x86_64-linux";
|
||||||
|
modules = [
|
||||||
|
./hosts/common
|
||||||
|
./hosts/${hostname}
|
||||||
|
sops-nix.nixosModules.sops
|
||||||
|
disko.nixosModules.disko
|
||||||
|
home-manager.nixosModules.home-manager
|
||||||
|
{
|
||||||
|
home-manager = {
|
||||||
|
useGlobalPkgs = true;
|
||||||
|
useUserPackages = true;
|
||||||
|
users.mikl = import ./home;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
mkDarwin = hostname:
|
||||||
|
nix-darwin.lib.darwinSystem {
|
||||||
|
system = "aarch64-darwin";
|
||||||
|
modules = [
|
||||||
|
./hosts/common-darwin
|
||||||
|
./hosts/${hostname}
|
||||||
|
home-manager.darwinModules.home-manager
|
||||||
|
{
|
||||||
|
home-manager = {
|
||||||
|
useGlobalPkgs = true;
|
||||||
|
useUserPackages = true;
|
||||||
|
users.mikl = import ./home;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
nixosConfigurations = {
|
||||||
|
muscari = mkNixos "muscari";
|
||||||
|
rosemary = mkNixos "rosemary";
|
||||||
|
};
|
||||||
|
|
||||||
|
darwinConfigurations = {
|
||||||
|
poppy = mkDarwin "poppy";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
32
garden.md
Normal file
32
garden.md
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
# garden
|
||||||
|
|
||||||
|
Hosts in this repo are named after plants and flowers.
|
||||||
|
|
||||||
|
## hosts
|
||||||
|
|
||||||
|
### poppy *(active)*
|
||||||
|
- **role:** MacBook Air M1, personal/work machine
|
||||||
|
- **system:** nix-darwin, aarch64-darwin
|
||||||
|
- **location:** daily driver
|
||||||
|
|
||||||
|
### muscari *(planned migration)*
|
||||||
|
- **role:** linux server, k3s cluster
|
||||||
|
- **system:** NixOS, x86_64-linux
|
||||||
|
- **location:** iscg infra
|
||||||
|
|
||||||
|
### rosemary *(planned)*
|
||||||
|
- **role:** backup VM
|
||||||
|
- **system:** NixOS, x86_64-linux
|
||||||
|
|
||||||
|
## structure
|
||||||
|
|
||||||
|
- `flake.nix` — entry point, dispatches `mkNixos` and `mkDarwin` per host
|
||||||
|
- `hosts/<name>/default.nix` — per-host config
|
||||||
|
- `hosts/common/default.nix` — shared NixOS config
|
||||||
|
- `hosts/common-darwin/default.nix` — shared darwin config
|
||||||
|
- `home/default.nix` — shared home-manager config for user `mikl`
|
||||||
|
- `secrets/` — sops-encrypted secrets per host
|
||||||
|
|
||||||
|
## migrations
|
||||||
|
|
||||||
|
- `nix-config-legacy/` — previous muscari-only config (preserved for reference)
|
||||||
13
home/default.nix
Normal file
13
home/default.nix
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
home.stateVersion = "25.11";
|
||||||
|
|
||||||
|
programs.zsh.enable = true;
|
||||||
|
|
||||||
|
programs.git.enable = true;
|
||||||
|
|
||||||
|
home.packages = [
|
||||||
|
pkgs.ripgrep
|
||||||
|
pkgs.fd
|
||||||
|
];
|
||||||
|
}
|
||||||
20
hosts/common-darwin/default.nix
Normal file
20
hosts/common-darwin/default.nix
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
# flake + nix-command
|
||||||
|
nix.settings.experimental-features = [
|
||||||
|
"nix-command"
|
||||||
|
"flakes"
|
||||||
|
];
|
||||||
|
|
||||||
|
# nix daemon (multi-user install)
|
||||||
|
services.nix-daemon.enable = true;
|
||||||
|
|
||||||
|
users.users.mikl = {
|
||||||
|
home = "/Users/mikl";
|
||||||
|
shell = pkgs.zsh;
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.systemPackages = [
|
||||||
|
pkgs.vim
|
||||||
|
];
|
||||||
|
}
|
||||||
18
hosts/common/default.nix
Normal file
18
hosts/common/default.nix
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
# flake + nix-command
|
||||||
|
nix.settings.experimental-features = [
|
||||||
|
"nix-command"
|
||||||
|
"flakes"
|
||||||
|
];
|
||||||
|
|
||||||
|
users.users.mikl = {
|
||||||
|
isNormalUser = true;
|
||||||
|
shell = pkgs.zsh;
|
||||||
|
home = "/home/mikl";
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.systemPackages = [
|
||||||
|
pkgs.vim
|
||||||
|
];
|
||||||
|
}
|
||||||
6
hosts/muscari/default.nix
Normal file
6
hosts/muscari/default.nix
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
networking.hostName = "muscari";
|
||||||
|
|
||||||
|
# TODO: migrate from nix-config-legacy/hosts/muscari
|
||||||
|
}
|
||||||
9
hosts/poppy/default.nix
Normal file
9
hosts/poppy/default.nix
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
networking.hostName = "poppy";
|
||||||
|
|
||||||
|
# Allow unfree packages (some macOS-ported tools need it)
|
||||||
|
nixpkgs.config.allowUnfree = true;
|
||||||
|
|
||||||
|
system.primaryUser = "mikl";
|
||||||
|
}
|
||||||
4
hosts/rosemary/default.nix
Normal file
4
hosts/rosemary/default.nix
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
networking.hostName = "rosemary";
|
||||||
|
}
|
||||||
0
secrets/.gitkeep
Normal file
0
secrets/.gitkeep
Normal file
Loading…
Reference in a new issue