Simplify build systems
This commit is contained in:
parent
b994e4698c
commit
9535108bb7
6 changed files with 94 additions and 131 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -1 +1,2 @@
|
||||||
result/
|
result/*
|
||||||
|
result
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,8 @@
|
||||||
# with friendly help by stylix: https://github.com/danth/stylix/blob/master/docs/default.nix
|
# with friendly help by stylix: https://github.com/danth/stylix/blob/master/docs/default.nix
|
||||||
{
|
{ pkgs, build_systems, lib, ... }:
|
||||||
pkgs,
|
|
||||||
build_systems,
|
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
let
|
let
|
||||||
makeOptionsDoc = configuration: pkgs.nixosOptionsDoc { options = configuration; };
|
makeOptionsDoc = configuration:
|
||||||
|
pkgs.nixosOptionsDoc { options = configuration; };
|
||||||
generateDocs = obj: ''
|
generateDocs = obj: ''
|
||||||
touch src/${obj.fst}.md
|
touch src/${obj.fst}.md
|
||||||
sed '/*Declared by:*/,/^$/d' <${obj.snd.optionsCommonMark} >> src/${obj.fst}.md
|
sed '/*Declared by:*/,/^$/d' <${obj.snd.optionsCommonMark} >> src/${obj.fst}.md
|
||||||
|
|
@ -15,17 +11,18 @@ let
|
||||||
echo "- [${name}](${name}.md)" >> src/SUMMARY.md
|
echo "- [${name}](${name}.md)" >> src/SUMMARY.md
|
||||||
'';
|
'';
|
||||||
system = (build_systems ../example/.)."example".options;
|
system = (build_systems ../example/.)."example".options;
|
||||||
makeOptionsDocPrograms = name: pkgs.nixosOptionsDoc { options = system.mods.${name}; };
|
makeOptionsDocPrograms = name:
|
||||||
|
pkgs.nixosOptionsDoc { options = system.mods.${name}; };
|
||||||
conf = makeOptionsDoc system.conf;
|
conf = makeOptionsDoc system.conf;
|
||||||
paths = builtins.readDir ../modules/programs;
|
paths = builtins.readDir ../modules/programs;
|
||||||
names = lib.lists.remove "default" (
|
names = lib.lists.remove "default"
|
||||||
map (name: lib.strings.removeSuffix ".nix" name) (lib.attrsets.mapAttrsToList (name: _: name) paths)
|
(map (name: lib.strings.removeSuffix ".nix" name)
|
||||||
);
|
(lib.attrsets.mapAttrsToList (name: _: name) paths));
|
||||||
mods = map makeOptionsDocPrograms names;
|
mods = map makeOptionsDocPrograms names;
|
||||||
docs = lib.strings.concatLines (map generateDocs (lib.lists.zipLists names mods));
|
docs =
|
||||||
|
lib.strings.concatLines (map generateDocs (lib.lists.zipLists names mods));
|
||||||
summary = lib.strings.concatStringsSep " " (map summaryAppend names);
|
summary = lib.strings.concatStringsSep " " (map summaryAppend names);
|
||||||
in
|
in pkgs.stdenvNoCC.mkDerivation {
|
||||||
pkgs.stdenvNoCC.mkDerivation {
|
|
||||||
name = "dashNix-book";
|
name = "dashNix-book";
|
||||||
src = ./.;
|
src = ./.;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,11 +26,13 @@ dashNix = {
|
||||||
You can then configure your systems in your flake outputs with a provided library command:
|
You can then configure your systems in your flake outputs with a provided library command:
|
||||||
|
|
||||||
```nix
|
```nix
|
||||||
nixosConfigurations = (inputs.dashNix.dashNixLib.build_systems ./.);
|
nixosConfigurations = inputs.dashNix.dashNixLib.build_systems ./.;
|
||||||
```
|
```
|
||||||
|
|
||||||
The paremeter specifies where your hosts directory will be placed, in said directory you can then create a directory for each system.
|
This command will build each system that is placed within the hosts/ directory.
|
||||||
Note, the name of the systems directory is also its hostname.
|
In this directory create one directory for each system you want to configure with DashNix.
|
||||||
|
This will automatically pick up the hostname for the system and look for 3 different files that are explained below.
|
||||||
|
(Optionally, you can also change the parameter root (./.) to define a different starting directory than hosts/)
|
||||||
|
|
||||||
In order for your configuration to work, you are required to at least provide a single config file with a further config file being optional for custom configuration.
|
In order for your configuration to work, you are required to at least provide a single config file with a further config file being optional for custom configuration.
|
||||||
The hardware.nix specifies additional NixOS configuration, while home.nix specifies additional home-manager configuration. (both optional)
|
The hardware.nix specifies additional NixOS configuration, while home.nix specifies additional home-manager configuration. (both optional)
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,8 @@
|
||||||
inputs = {
|
inputs = {
|
||||||
dashvim.url = "github:DashieTM/DashVim";
|
dashvim.url = "github:DashieTM/DashVim";
|
||||||
hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1";
|
hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1";
|
||||||
ironbar.url = "github:JakeStanger/ironbar?ref=3a1c60442382f970cdb7669814b6ef3594d9f048";
|
ironbar.url =
|
||||||
|
"github:JakeStanger/ironbar?ref=3a1c60442382f970cdb7669814b6ef3594d9f048";
|
||||||
anyrun.url = "github:Kirottu/anyrun";
|
anyrun.url = "github:Kirottu/anyrun";
|
||||||
nixpkgs.url = "github:NixOs/nixpkgs/nixos-unstable";
|
nixpkgs.url = "github:NixOs/nixpkgs/nixos-unstable";
|
||||||
stable.url = "github:NixOs/nixpkgs/nixos-24.05";
|
stable.url = "github:NixOs/nixpkgs/nixos-24.05";
|
||||||
|
|
@ -21,10 +22,8 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs =
|
outputs = { ... }@inputs: {
|
||||||
{ ... }@inputs:
|
nixosConfigurations = inputs.dashNix.dashNixLib.build_systems ./.;
|
||||||
{
|
|
||||||
nixosConfigurations = (inputs.dashNix.dashNixLib.build_systems ./.);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
nixConfig = {
|
nixConfig = {
|
||||||
|
|
|
||||||
17
flake.nix
17
flake.nix
|
|
@ -5,9 +5,7 @@
|
||||||
nixpkgs.url = "github:NixOs/nixpkgs/nixos-unstable";
|
nixpkgs.url = "github:NixOs/nixpkgs/nixos-unstable";
|
||||||
stable.url = "github:NixOs/nixpkgs/nixos-24.05";
|
stable.url = "github:NixOs/nixpkgs/nixos-24.05";
|
||||||
|
|
||||||
nix-flatpak = {
|
nix-flatpak = { url = "github:gmodena/nix-flatpak"; };
|
||||||
url = "github:gmodena/nix-flatpak";
|
|
||||||
};
|
|
||||||
|
|
||||||
home-manager = {
|
home-manager = {
|
||||||
url = "github:nix-community/home-manager";
|
url = "github:nix-community/home-manager";
|
||||||
|
|
@ -25,7 +23,8 @@
|
||||||
hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1";
|
hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1";
|
||||||
|
|
||||||
ironbar = {
|
ironbar = {
|
||||||
url = "github:JakeStanger/ironbar?ref=3a1c60442382f970cdb7669814b6ef3594d9f048";
|
url =
|
||||||
|
"github:JakeStanger/ironbar?ref=3a1c60442382f970cdb7669814b6ef3594d9f048";
|
||||||
};
|
};
|
||||||
|
|
||||||
stylix.url = "github:danth/stylix";
|
stylix.url = "github:danth/stylix";
|
||||||
|
|
@ -48,14 +47,11 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs =
|
outputs = { self, ... }@inputs:
|
||||||
{ self, ... }@inputs:
|
|
||||||
let
|
let
|
||||||
stable = import inputs.stable {
|
stable = import inputs.stable {
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
config = {
|
config = { allowUnfree = true; };
|
||||||
allowUnfree = true;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
pkgs = import inputs.nixpkgs {
|
pkgs = import inputs.nixpkgs {
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
|
|
@ -65,8 +61,7 @@
|
||||||
allowUnfree = true;
|
allowUnfree = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
in
|
in rec {
|
||||||
rec {
|
|
||||||
dashNixLib = import ./lib {
|
dashNixLib = import ./lib {
|
||||||
inherit self inputs pkgs;
|
inherit self inputs pkgs;
|
||||||
lib = inputs.nixpkgs.lib;
|
lib = inputs.nixpkgs.lib;
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,7 @@
|
||||||
{
|
{ inputs, pkgs, self, lib, additionalMods ? {
|
||||||
inputs,
|
|
||||||
pkgs,
|
|
||||||
self,
|
|
||||||
lib,
|
|
||||||
additionalMods ? {
|
|
||||||
nixos = [ ];
|
nixos = [ ];
|
||||||
home = [ ];
|
home = [ ];
|
||||||
},
|
}, mods ? {
|
||||||
mods ? {
|
|
||||||
nixos = [
|
nixos = [
|
||||||
inputs.home-manager.nixosModules.home-manager
|
inputs.home-manager.nixosModules.home-manager
|
||||||
inputs.stylix.nixosModules.stylix
|
inputs.stylix.nixosModules.stylix
|
||||||
|
|
@ -31,10 +25,7 @@
|
||||||
inputs.dashvim.homeManagerModules.dashvim
|
inputs.dashvim.homeManagerModules.dashvim
|
||||||
../modules
|
../modules
|
||||||
];
|
];
|
||||||
},
|
}, ... }: {
|
||||||
...
|
|
||||||
}:
|
|
||||||
{
|
|
||||||
/* *
|
/* *
|
||||||
# build_systems
|
# build_systems
|
||||||
|
|
||||||
|
|
@ -63,53 +54,31 @@
|
||||||
# );
|
# );
|
||||||
|
|
||||||
# in
|
# in
|
||||||
build_systems =
|
build_systems = root:
|
||||||
root:
|
builtins.listToAttrs (map (name: {
|
||||||
builtins.listToAttrs (
|
|
||||||
map
|
|
||||||
(name: {
|
|
||||||
name = name;
|
name = name;
|
||||||
value =
|
value = let
|
||||||
let
|
|
||||||
mod = root + /hosts/${name}/configuration.nix;
|
mod = root + /hosts/${name}/configuration.nix;
|
||||||
additionalNixosConfig = root + /hosts/${name}/hardware.nix;
|
additionalNixosConfig = root + /hosts/${name}/hardware.nix;
|
||||||
additionalHomeConfig = root + /hosts/${name}/home.nix;
|
additionalHomeConfig = root + /hosts/${name}/home.nix;
|
||||||
in
|
in inputs.nixpkgs.lib.nixosSystem {
|
||||||
inputs.nixpkgs.lib.nixosSystem {
|
|
||||||
specialArgs = {
|
specialArgs = {
|
||||||
inherit
|
inherit self inputs pkgs mod additionalHomeConfig root;
|
||||||
self
|
|
||||||
inputs
|
|
||||||
pkgs
|
|
||||||
mod
|
|
||||||
additionalHomeConfig
|
|
||||||
root
|
|
||||||
;
|
|
||||||
hostName = name;
|
hostName = name;
|
||||||
homeMods = mods.home;
|
homeMods = mods.home;
|
||||||
additionalHomeMods = additionalMods.home;
|
additionalHomeMods = additionalMods.home;
|
||||||
};
|
};
|
||||||
modules =
|
modules = [ mod ] ++ mods.nixos ++ additionalMods.nixos
|
||||||
[ mod ]
|
++ inputs.nixpkgs.lib.optional
|
||||||
++ mods.nixos
|
(builtins.pathExists additionalNixosConfig) additionalNixosConfig
|
||||||
++ additionalMods.nixos
|
|
||||||
++ inputs.nixpkgs.lib.optional (builtins.pathExists additionalNixosConfig) additionalNixosConfig
|
|
||||||
++ inputs.nixpkgs.lib.optional (builtins.pathExists mod) mod;
|
++ inputs.nixpkgs.lib.optional (builtins.pathExists mod) mod;
|
||||||
};
|
};
|
||||||
})
|
}) (lib.lists.remove "" (lib.attrsets.mapAttrsToList
|
||||||
(
|
(name: fType: if fType == "directory" then name else "")
|
||||||
lib.lists.remove "" (
|
(builtins.readDir (root + /hosts)))));
|
||||||
lib.attrsets.mapAttrsToList (name: fType: if fType == "directory" then name else "") (
|
|
||||||
builtins.readDir (root + /hosts)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
buildIso = inputs.nixpkgs.lib.nixosSystem {
|
buildIso = inputs.nixpkgs.lib.nixosSystem {
|
||||||
specialArgs = {
|
specialArgs = { inherit self inputs pkgs; };
|
||||||
inherit self inputs pkgs;
|
|
||||||
};
|
|
||||||
modules = [ ../iso/configuration.nix ];
|
modules = [ ../iso/configuration.nix ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue