Refactor using flake-parts (#4)

Reviewed-on: https://git.earth2077.fr/leana/.files/pulls/4
Co-authored-by: Léana 江 <leana.jiang@icloud.com>
Co-committed-by: Léana 江 <leana.jiang@icloud.com>
This commit is contained in:
Léana 江 2024-05-02 17:03:36 +00:00 committed by Léana 江
parent 06f76e0a37
commit db5aaa5811
17 changed files with 343 additions and 294 deletions

112
nix/lib/combinators.nix Normal file
View file

@ -0,0 +1,112 @@
{
withSystem,
inputs,
defaultOptions,
self,
...
}:
let
mkNixOS =
name: sys: opts:
withSystem sys (
{ pkgs, ... }:
let
args = {
inherit pkgs;
hostname = name;
};
in
inputs.nixpkgs.lib.nixosSystem {
specialArgs = args;
modules = [
"${self}/nix/hosts/_"
"${self}/nix/hosts/${name}"
"${self}/nix/layouts"
inputs.agenix.nixosModules.default
defaultOptions
opts
inputs.home-manager.nixosModules.home-manager
{
home-manager = {
useGlobalPkgs = true;
useUserPackages = true;
extraSpecialArgs = args;
users.leana.imports = [
"${self}/nix/home/_"
"${self}/nix/home/${name}"
defaultOptions
opts
];
};
}
];
}
);
mkDarwin =
name: sys: opts:
withSystem sys (
{ pkgs, ... }:
let
args = {
inherit pkgs;
hostname = name;
};
in
inputs.nix-darwin.lib.darwinSystem {
specialArgs = args;
modules = [
"${self}/nix/hosts/_"
"${self}/nix/hosts/${name}"
defaultOptions
opts
inputs.home-manager.darwinModules.home-manager
{
home-manager = {
useGlobalPkgs = true;
useUserPackages = true;
extraSpecialArgs = args;
users.leana.imports = [
"${self}/nix/home/_"
"${self}/nix/home/${name}"
defaultOptions
opts
];
};
}
];
}
);
mkHomeManager =
name: sys: opts:
withSystem sys (
{ pkgs, ... }:
let
args = {
inherit pkgs;
hostname = name;
};
in
inputs.home-manager.lib.homeManagerConfiguration {
pkgs = args.pkgs;
extraSpecialArgs = args;
modules = [
"${self}/nix/home/_"
"${self}/nix/home/${name}"
defaultOptions
opts
];
}
);
many = func: builtins.mapAttrs (name: opts: func name (opts.system) (opts.settings or { }));
in
{
# promote helper functions into the arguments
_module.args = {
mkNixOSes = many mkNixOS;
mkHomeManagers = many mkHomeManager;
mkDarwins = many mkDarwin;
};
}

View file

@ -0,0 +1,50 @@
{
mkDarwins,
mkHomeManagers,
mkNixOSes,
...
}:
{
config.flake = {
darwinConfigurations = mkDarwins {
# MacBook Pro 2021
bismuth = {
system = "aarch64-darwin";
settings = {
extraLanguageServers.enable = true;
extraUtils.enable = true;
cmus.enable = true;
universityTools.enable = true;
git.signCommits = true;
};
};
# MacBook Air 2014
tungsten = {
system = "x86_64-darwin";
settings.cmus.enable = true;
};
};
homeConfigurations = mkHomeManagers {
# Raspberry Pi 4
hydrogen.system = "aarch64-linux";
# Oracle cloud
oracle.system = "aarch64-linux";
# Linode
linode.system = "x86_64-linux";
};
nixosConfigurations = mkNixOSes {
# Thinkpad
carbon = {
system = "x86_64-linux";
settings = {
extraLanguageServers.enable = true;
extraUtils.enable = true;
cmus.enable = true;
universityTools.enable = true;
};
};
};
};
}

7
nix/lib/default.nix Normal file
View file

@ -0,0 +1,7 @@
{
imports = [
./combinators.nix
./configurations.nix
./options.nix
];
}

13
nix/lib/options.nix Normal file
View file

@ -0,0 +1,13 @@
{
_module.args.defaultOptions =
{ lib, ... }:
{
options = {
cmus.enable = lib.mkOption { default = false; };
extraUtils.enable = lib.mkOption { default = false; };
extraLanguageServers.enable = lib.mkOption { default = false; };
universityTools.enable = lib.mkOption { default = false; };
git.signCommits = lib.mkOption { default = false; };
};
};
}