Setup nix flake to work with darwin, wsl and linux system configuration. This has ONLY been tested on Darwin so far.

This commit is contained in:
Martin Lasson 2025-01-26 00:29:25 +01:00
parent 5322764881
commit f0f8aeb7b8
15 changed files with 468 additions and 144 deletions

190
flake.nix
View file

@ -1,79 +1,149 @@
{
description = "LarssonMartin1998's dotfiles configured with Home Manager";
description = "LarssonMartin1998's dotfiles configured with Home Manager";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
nix-darwin.url = "github:LnL7/nix-darwin/master";
nix-darwin.inputs.nixpkgs.follows = "nixpkgs";
};
neovim = {
url = "github:LarssonMartin1998/neovim-flake";
};
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
outputs =
nix-darwin = {
url = "github:LnL7/nix-darwin/master";
inputs.nixpkgs.follows = "nixpkgs";
};
nixos-wsl.url = "github:nix-community/NixOS-WSL/main";
neovim.url = "github:LarssonMartin1998/neovim-flake";
nix-homebrew.url = "github:zhaofengli-wip/nix-homebrew";
};
outputs =
{
nixpkgs,
home-manager,
neovim,
...
self,
nixpkgs,
home-manager,
nix-darwin,
nixos-wsl,
neovim,
nix-homebrew,
...
}:
let
lib = nixpkgs.lib;
lib = nixpkgs.lib;
makeHomeConfig =
makeSystemConfig =
{
name,
system,
extraModules ? [ ],
name,
system,
builder,
extraModules ? [ ],
specialArgs ? { },
}:
builder {
inherit system;
pkgs = import nixpkgs { inherit system; };
modules = [
{
nix.settings.experimental-features = "nix-command flakes";
}
./nix/local_system.nix
] ++ extraModules;
specialArgs = specialArgs;
};
makeHomeConfig =
{
name,
system,
extraModules ? [ ],
}:
home-manager.lib.homeManagerConfiguration {
pkgs = import nixpkgs { inherit system; };
modules =
[
./nix/home.nix
./nix/local_machine.nix
]
++ extraModules
++ lib.optional (builtins.match ".*-darwin$" system != null) ./nix/darwin.nix
++ lib.optional (builtins.match ".*-linux$" system != null) ./nix/linux.nix;
pkgs = import nixpkgs { inherit system; };
modules = [
./nix/pkgs/home.nix
./nix/local_home.nix
] ++ extraModules;
# Pass neovim-flake to all modules
extraSpecialArgs = {
neovim-flake = neovim;
};
# Pass neovim-flake to all modules
extraSpecialArgs = {
neovim-flake = neovim;
};
};
in
{
homeConfigurations = {
"wsl" = makeHomeConfig {
name = "wsl";
system = "x86_64-linux";
extraModules = [ ./nix/wsl.nix ];
};
"linux-x86" = makeHomeConfig {
name = "linux-x86";
system = "x86_64-linux";
extraModules = [];
};
"linux-aarch64" = makeHomeConfig {
name = "linux-aarch64";
system = "aarch64-linux";
extraModules = [];
};
"darwin-aarch64" = makeHomeConfig {
name = "darwin-aarch64";
system = "aarch64-darwin";
extraModules = [];
};
nixosConfigurations = {
"wsl" = makeSystemConfig {
name = "wsl";
system = "x86_64-linux";
builder = lib.nixosSystem;
extraModules = [ ./nix/system/wsl.nix ];
specialArgs = {
nixos-wsl = nixos-wsl;
};
};
"linux-x86" = makeSystemConfig {
name = "linux-x86";
system = "x86_64-linux";
builder = lib.nixosSystem;
extraModules = [ ./nix/system/linux.nix ];
};
"linux-aarch" = makeSystemConfig {
name = "linux-aarch";
system = "aarch64-linux";
builder = lib.nixosSystem;
extraModules = [ ./nix/system/linux.nix ];
};
};
darwinConfigurations."darwin" = makeSystemConfig {
name = "darwin";
system = "aarch64-darwin";
builder = nix-darwin.lib.darwinSystem;
extraModules = [
./nix/system/darwin.nix
nix-homebrew.darwinModules.nix-homebrew
{
nix-homebrew = {
enable = true;
enableRosetta = true;
};
}
];
specialArgs = {
self = self;
nix-homebrew = nix-homebrew;
};
};
homeConfigurations = {
"wsl" = makeHomeConfig {
name = "wsl";
system = "x86_64-linux";
extraModules = [ ./nix/pkgs/wsl.nix ];
};
"linux-x86" = makeHomeConfig {
name = "linux-x86";
system = "x86_64-linux";
extraModules = [ ./nix/pkgs/linux.nix ];
};
"linux-aarch" = makeHomeConfig {
name = "linux-aarch";
system = "aarch64-linux";
extraModules = [ ./nix/pkgs/linux.nix ];
};
"darwin" = makeHomeConfig {
name = "darwin";
system = "aarch64-darwin";
extraModules = [ ./nix/pkgs/darwin.nix ];
};
};
};
}