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
|
||||
{
|
||||
pkgs,
|
||||
build_systems,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
{ pkgs, build_systems, lib, ... }:
|
||||
let
|
||||
makeOptionsDoc = configuration: pkgs.nixosOptionsDoc { options = configuration; };
|
||||
makeOptionsDoc = configuration:
|
||||
pkgs.nixosOptionsDoc { options = configuration; };
|
||||
generateDocs = obj: ''
|
||||
touch 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
|
||||
'';
|
||||
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;
|
||||
paths = builtins.readDir ../modules/programs;
|
||||
names = lib.lists.remove "default" (
|
||||
map (name: lib.strings.removeSuffix ".nix" name) (lib.attrsets.mapAttrsToList (name: _: name) paths)
|
||||
);
|
||||
names = lib.lists.remove "default"
|
||||
(map (name: lib.strings.removeSuffix ".nix" name)
|
||||
(lib.attrsets.mapAttrsToList (name: _: name) paths));
|
||||
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);
|
||||
in
|
||||
pkgs.stdenvNoCC.mkDerivation {
|
||||
in pkgs.stdenvNoCC.mkDerivation {
|
||||
name = "dashNix-book";
|
||||
src = ./.;
|
||||
|
||||
|
|
|
|||
|
|
@ -26,11 +26,13 @@ dashNix = {
|
|||
You can then configure your systems in your flake outputs with a provided library command:
|
||||
|
||||
```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.
|
||||
Note, the name of the systems directory is also its hostname.
|
||||
This command will build each system that is placed within the hosts/ directory.
|
||||
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.
|
||||
The hardware.nix specifies additional NixOS configuration, while home.nix specifies additional home-manager configuration. (both optional)
|
||||
|
|
|
|||
|
|
@ -4,7 +4,8 @@
|
|||
inputs = {
|
||||
dashvim.url = "github:DashieTM/DashVim";
|
||||
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";
|
||||
nixpkgs.url = "github:NixOs/nixpkgs/nixos-unstable";
|
||||
stable.url = "github:NixOs/nixpkgs/nixos-24.05";
|
||||
|
|
@ -21,11 +22,9 @@
|
|||
};
|
||||
};
|
||||
|
||||
outputs =
|
||||
{ ... }@inputs:
|
||||
{
|
||||
nixosConfigurations = (inputs.dashNix.dashNixLib.build_systems ./.);
|
||||
};
|
||||
outputs = { ... }@inputs: {
|
||||
nixosConfigurations = inputs.dashNix.dashNixLib.build_systems ./.;
|
||||
};
|
||||
|
||||
nixConfig = {
|
||||
builders-use-substitutes = true;
|
||||
|
|
|
|||
17
flake.nix
17
flake.nix
|
|
@ -5,9 +5,7 @@
|
|||
nixpkgs.url = "github:NixOs/nixpkgs/nixos-unstable";
|
||||
stable.url = "github:NixOs/nixpkgs/nixos-24.05";
|
||||
|
||||
nix-flatpak = {
|
||||
url = "github:gmodena/nix-flatpak";
|
||||
};
|
||||
nix-flatpak = { url = "github:gmodena/nix-flatpak"; };
|
||||
|
||||
home-manager = {
|
||||
url = "github:nix-community/home-manager";
|
||||
|
|
@ -25,7 +23,8 @@
|
|||
hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1";
|
||||
|
||||
ironbar = {
|
||||
url = "github:JakeStanger/ironbar?ref=3a1c60442382f970cdb7669814b6ef3594d9f048";
|
||||
url =
|
||||
"github:JakeStanger/ironbar?ref=3a1c60442382f970cdb7669814b6ef3594d9f048";
|
||||
};
|
||||
|
||||
stylix.url = "github:danth/stylix";
|
||||
|
|
@ -48,14 +47,11 @@
|
|||
};
|
||||
};
|
||||
|
||||
outputs =
|
||||
{ self, ... }@inputs:
|
||||
outputs = { self, ... }@inputs:
|
||||
let
|
||||
stable = import inputs.stable {
|
||||
system = "x86_64-linux";
|
||||
config = {
|
||||
allowUnfree = true;
|
||||
};
|
||||
config = { allowUnfree = true; };
|
||||
};
|
||||
pkgs = import inputs.nixpkgs {
|
||||
system = "x86_64-linux";
|
||||
|
|
@ -65,8 +61,7 @@
|
|||
allowUnfree = true;
|
||||
};
|
||||
};
|
||||
in
|
||||
rec {
|
||||
in rec {
|
||||
dashNixLib = import ./lib {
|
||||
inherit self inputs pkgs;
|
||||
lib = inputs.nixpkgs.lib;
|
||||
|
|
|
|||
161
lib/default.nix
161
lib/default.nix
|
|
@ -1,60 +1,51 @@
|
|||
{
|
||||
inputs,
|
||||
pkgs,
|
||||
self,
|
||||
lib,
|
||||
additionalMods ? {
|
||||
nixos = [ ];
|
||||
home = [ ];
|
||||
},
|
||||
mods ? {
|
||||
nixos = [
|
||||
inputs.home-manager.nixosModules.home-manager
|
||||
inputs.stylix.nixosModules.stylix
|
||||
../base
|
||||
../home
|
||||
../modules
|
||||
];
|
||||
home = [
|
||||
inputs.anyrun.homeManagerModules.default
|
||||
inputs.ironbar.homeManagerModules.default
|
||||
inputs.oxicalc.homeManagerModules.default
|
||||
inputs.oxishut.homeManagerModules.default
|
||||
inputs.oxinoti.homeManagerModules.default
|
||||
inputs.oxidash.homeManagerModules.default
|
||||
inputs.oxipaste.homeManagerModules.default
|
||||
inputs.hyprdock.homeManagerModules.default
|
||||
inputs.hyprland.homeManagerModules.default
|
||||
inputs.reset.homeManagerModules.default
|
||||
inputs.nix-flatpak.homeManagerModules.nix-flatpak
|
||||
inputs.sops-nix.homeManagerModules.sops
|
||||
inputs.dashvim.homeManagerModules.dashvim
|
||||
../modules
|
||||
];
|
||||
},
|
||||
...
|
||||
}:
|
||||
{
|
||||
/**
|
||||
# build_systems
|
||||
{ inputs, pkgs, self, lib, additionalMods ? {
|
||||
nixos = [ ];
|
||||
home = [ ];
|
||||
}, mods ? {
|
||||
nixos = [
|
||||
inputs.home-manager.nixosModules.home-manager
|
||||
inputs.stylix.nixosModules.stylix
|
||||
../base
|
||||
../home
|
||||
../modules
|
||||
];
|
||||
home = [
|
||||
inputs.anyrun.homeManagerModules.default
|
||||
inputs.ironbar.homeManagerModules.default
|
||||
inputs.oxicalc.homeManagerModules.default
|
||||
inputs.oxishut.homeManagerModules.default
|
||||
inputs.oxinoti.homeManagerModules.default
|
||||
inputs.oxidash.homeManagerModules.default
|
||||
inputs.oxipaste.homeManagerModules.default
|
||||
inputs.hyprdock.homeManagerModules.default
|
||||
inputs.hyprland.homeManagerModules.default
|
||||
inputs.reset.homeManagerModules.default
|
||||
inputs.nix-flatpak.homeManagerModules.nix-flatpak
|
||||
inputs.sops-nix.homeManagerModules.sops
|
||||
inputs.dashvim.homeManagerModules.dashvim
|
||||
../modules
|
||||
];
|
||||
}, ... }: {
|
||||
/* *
|
||||
# build_systems
|
||||
|
||||
Builds system given a list of system names which are placed within your hosts/ directory. Note that each system has its own directory in hosts/ as well.
|
||||
Builds system given a list of system names which are placed within your hosts/ directory. Note that each system has its own directory in hosts/ as well.
|
||||
|
||||
A minimal configuration requires the file configuration.nix within each system directory, this will be the base config that is used across both NisOS and home-manager, specific optional files can also be added, hardware.nix for NisOS configuration and home.nix for home-manager configuration.
|
||||
A minimal configuration requires the file configuration.nix within each system directory, this will be the base config that is used across both NisOS and home-manager, specific optional files can also be added, hardware.nix for NisOS configuration and home.nix for home-manager configuration.
|
||||
|
||||
The second parameter is the root of your configuration, which should be ./. in most cases.
|
||||
The second parameter is the root of your configuration, which should be ./. in most cases.
|
||||
|
||||
`root`
|
||||
`root`
|
||||
|
||||
: the root path of your configuration
|
||||
: the root path of your configuration
|
||||
|
||||
# Example usage
|
||||
:::{.example}
|
||||
```nix
|
||||
nixosConfigurations =
|
||||
(build_systems [ "nixos" ] ./.);
|
||||
```
|
||||
:::
|
||||
# Example usage
|
||||
:::{.example}
|
||||
```nix
|
||||
nixosConfigurations =
|
||||
(build_systems [ "nixos" ] ./.);
|
||||
```
|
||||
:::
|
||||
*/
|
||||
# let
|
||||
# paths = builtins.readDir ;
|
||||
|
|
@ -63,53 +54,31 @@
|
|||
# );
|
||||
|
||||
# in
|
||||
build_systems =
|
||||
root:
|
||||
builtins.listToAttrs (
|
||||
map
|
||||
(name: {
|
||||
name = name;
|
||||
value =
|
||||
let
|
||||
mod = root + /hosts/${name}/configuration.nix;
|
||||
additionalNixosConfig = root + /hosts/${name}/hardware.nix;
|
||||
additionalHomeConfig = root + /hosts/${name}/home.nix;
|
||||
in
|
||||
inputs.nixpkgs.lib.nixosSystem {
|
||||
specialArgs = {
|
||||
inherit
|
||||
self
|
||||
inputs
|
||||
pkgs
|
||||
mod
|
||||
additionalHomeConfig
|
||||
root
|
||||
;
|
||||
hostName = name;
|
||||
homeMods = mods.home;
|
||||
additionalHomeMods = additionalMods.home;
|
||||
};
|
||||
modules =
|
||||
[ mod ]
|
||||
++ mods.nixos
|
||||
++ additionalMods.nixos
|
||||
++ inputs.nixpkgs.lib.optional (builtins.pathExists additionalNixosConfig) additionalNixosConfig
|
||||
++ inputs.nixpkgs.lib.optional (builtins.pathExists mod) mod;
|
||||
};
|
||||
})
|
||||
(
|
||||
lib.lists.remove "" (
|
||||
lib.attrsets.mapAttrsToList (name: fType: if fType == "directory" then name else "") (
|
||||
builtins.readDir (root + /hosts)
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
build_systems = root:
|
||||
builtins.listToAttrs (map (name: {
|
||||
name = name;
|
||||
value = let
|
||||
mod = root + /hosts/${name}/configuration.nix;
|
||||
additionalNixosConfig = root + /hosts/${name}/hardware.nix;
|
||||
additionalHomeConfig = root + /hosts/${name}/home.nix;
|
||||
in inputs.nixpkgs.lib.nixosSystem {
|
||||
specialArgs = {
|
||||
inherit self inputs pkgs mod additionalHomeConfig root;
|
||||
hostName = name;
|
||||
homeMods = mods.home;
|
||||
additionalHomeMods = additionalMods.home;
|
||||
};
|
||||
modules = [ mod ] ++ mods.nixos ++ additionalMods.nixos
|
||||
++ inputs.nixpkgs.lib.optional
|
||||
(builtins.pathExists additionalNixosConfig) additionalNixosConfig
|
||||
++ inputs.nixpkgs.lib.optional (builtins.pathExists mod) mod;
|
||||
};
|
||||
}) (lib.lists.remove "" (lib.attrsets.mapAttrsToList
|
||||
(name: fType: if fType == "directory" then name else "")
|
||||
(builtins.readDir (root + /hosts)))));
|
||||
|
||||
buildIso = inputs.nixpkgs.lib.nixosSystem {
|
||||
specialArgs = {
|
||||
inherit self inputs pkgs;
|
||||
};
|
||||
specialArgs = { inherit self inputs pkgs; };
|
||||
modules = [ ../iso/configuration.nix ];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue