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

View file

@ -1,53 +1,35 @@
{
pkgs,
unstable,
opam-nix,
alt-ergo,
}:
let
mkNerdFont = pkgs.callPackage ./mkNerdFont.nix { inherit (unstable) nerd-font-patcher; };
perSystem =
{ pkgs, ... }:
let
inherit (pkgs) unstable alt-ergo-pin;
in
{
# Export my package set
packages = rec {
mkNerdFont = pkgs.callPackage ./mkNerdFont.nix { inherit (unstable) nerd-font-patcher; };
logisim-evolution = pkgs.callPackage ./logisim-evolution.nix { };
hiosevka = pkgs.callPackage ./hiosevka { };
hiosevka-nerd-font-mono = mkNerdFont {
font = hiosevka;
extraArgs = [
"--name {/.}-NFM"
"--use-single-width-glyphs"
];
};
hiosevka-nerd-font-propo = mkNerdFont {
font = hiosevka;
extraArgs = [
"--name {/.}-NFP"
"--variable-width-glyphs"
];
};
altiosevka = pkgs.callPackage ./altiosevka { };
necrolib = pkgs.callPackage ./necrolib.nix { };
hiosevka = pkgs.callPackage ./hiosevka { };
hiosevka-nerd-font-mono = mkNerdFont {
font = hiosevka;
extraArgs = [
"--name {/.}-NFM"
"--use-single-width-glyphs"
];
};
hiosevka-nerd-font-propo = mkNerdFont {
font = hiosevka;
extraArgs = [
"--name {/.}-NFP"
"--variable-width-glyphs"
];
};
altiosevka = pkgs.callPackage ./altiosevka {};
why3 = pkgs.callPackage ./why3.nix { inherit alt-ergo; };
maeel = pkgs.callPackage ./maeel.nix { };
in
{
myPkgs = {
inherit
logisim-evolution
necrolib
hiosevka
hiosevka-nerd-font-mono
hiosevka-nerd-font-propo
altiosevka
why3
maeel
;
};
myLib = {
inherit mkNerdFont;
};
logisim-evolution = pkgs.callPackage ./logisim-evolution.nix { };
necrolib = pkgs.callPackage ./necrolib.nix { };
why3 = pkgs.callPackage ./why3.nix { inherit (alt-ergo-pin) alt-ergo; };
maeel = pkgs.callPackage ./maeel.nix { };
};
};
}

View file

@ -0,0 +1,43 @@
{ inputs, ... }:
{
perSystem =
{ system, self', ... }:
{
_module.args = rec {
pkgs = import inputs.nixpkgs {
inherit system;
overlays = [
# extend pkgs with other inputs
(_: prev: prev.lib.mapAttrs (name: input: input.packages.${system}.default) inputs)
(_: _: {
unstable = import inputs.nixunstable { inherit system; };
nur = import inputs.nixnur {
inherit pkgs;
nurpkgs = pkgs;
};
})
# extend pkgs with my custom set
(_: _: { myPkgs = self'.packages; })
# resolve pinned pkg sets as attributes
(_: _: {
neovim-pin = import inputs.neovim-pin { inherit system; };
ghc-pin = import inputs.ghc-pin { inherit system; };
alt-ergo-pin = import inputs.alt-ergo-pin {
inherit system;
config.allowUnfree = true;
};
})
];
config.allowUnfreePredicate =
pkg:
builtins.elem (inputs.nixpkgs.lib.getName pkg) [
"discord"
"languagetool"
];
};
};
};
}

View file

@ -1,11 +1,13 @@
{
pkgs,
unstable,
myPkgs,
config,
lib,
...
}:
let
inherit (pkgs) unstable myPkgs;
in
{
imports = [
./fish

View file

@ -1,4 +1,7 @@
{ config, unstable, ... }:
{ config, pkgs, ... }:
let
inherit (pkgs) unstable;
in
{
programs.direnv = {
enable = true;

View file

@ -2,12 +2,11 @@
config,
pkgs,
lib,
neovim-pin,
...
}:
{
programs.neovim = {
package = neovim-pin.neovim-unwrapped;
package = pkgs.neovim-pin.neovim-unwrapped;
enable = true;
defaultEditor = true;
extraPackages =

View file

@ -1,11 +1,7 @@
{
pkgs,
unstable,
myPkgs,
lib,
ghc-pin,
...
}:
{ pkgs, lib, ... }:
let
inherit (pkgs) myPkgs unstable ghc-pin;
in
{
imports = [ ./fonts.nix ];

View file

@ -1,4 +1,7 @@
{ pkgs, myPkgs, ... }:
{ pkgs, ... }:
let
inherit (pkgs) myPkgs;
in
{
home.packages = [
myPkgs.hiosevka-nerd-font-mono

View file

@ -1,4 +1,7 @@
{ pkgs, nur, ... }:
{ pkgs, ... }:
let
inherit (pkgs) nur;
in
{
programs.firefox = {
enable = true;

View file

@ -1,9 +1,7 @@
{
pkgs,
myPkgs,
wired,
...
}:
{ pkgs, ... }:
let
inherit (pkgs) myPkgs wired;
in
{
home.pointerCursor = {
x11.enable = true;

View file

@ -1,4 +1,7 @@
{ pkgs, myPkgs, ... }:
{ pkgs, ... }:
let
inherit (pkgs) myPkgs;
in
{
home.packages = [
myPkgs.hiosevka-nerd-font-mono

View file

@ -1,160 +0,0 @@
{
nixpkgs,
nixunstable,
home-manager,
nix-darwin,
flake-utils,
...
}@inputs:
let
mkArgs =
system:
let
pkgs = import nixpkgs {
inherit system;
overlays = [
(
_: prev:
# extend pkgs with other inputs
prev.lib.mapAttrs (name: input: input.packages.${system}.default) inputs
)
];
config.allowUnfreePredicate =
pkg:
builtins.elem (nixpkgs.lib.getName pkg) [
"discord"
"languagetool"
];
};
unstable = import nixunstable { inherit system; };
nur = import inputs.nixnur {
inherit pkgs;
nurpkgs = pkgs;
};
alt-ergo-pin = import inputs.alt-ergo-pin {
inherit system;
config.allowUnfree = true;
};
neovim-pin = import inputs.neovim-pin { inherit system; };
ghc-pin = import inputs.ghc-pin { inherit system; };
custom = import ./custom {
inherit pkgs unstable;
inherit (inputs) opam-nix;
inherit (alt-ergo-pin) alt-ergo;
};
in
{
inherit pkgs unstable nur;
inherit (custom) myPkgs myLib;
# packages sets
inherit neovim-pin ghc-pin;
};
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; };
};
};
mkNixOS =
name: sys: opts:
let
args = mkArgs sys // {
hostname = name;
};
in
nixpkgs.lib.nixosSystem {
specialArgs = args;
modules = [
./hosts/_
./hosts/${name}
./layouts
inputs.agenix.nixosModules.default
defaultOptions
opts
home-manager.nixosModules.home-manager
{
home-manager = {
useGlobalPkgs = true;
useUserPackages = true;
extraSpecialArgs = args;
users.leana.imports = [
./home/_
./home/${name}
defaultOptions
opts
];
};
}
];
};
mkDarwin =
name: sys: opts:
let
args = mkArgs sys // {
hostname = name;
};
in
nix-darwin.lib.darwinSystem {
specialArgs = args;
modules = [
./hosts/_
./hosts/${name}
defaultOptions
opts
home-manager.darwinModules.home-manager
{
home-manager = {
useGlobalPkgs = true;
useUserPackages = true;
extraSpecialArgs = args;
users.leana.imports = [
./home/_
./home/${name}
defaultOptions
opts
];
};
}
];
};
mkHomeManager =
name: sys: opts:
let
args = mkArgs sys // {
hostname = name;
};
in
home-manager.lib.homeManagerConfiguration {
pkgs = args.pkgs;
extraSpecialArgs = args;
modules = [
./home/_
./home/${name}
defaultOptions
opts
];
};
many = func: builtins.mapAttrs (name: opts: func name (opts.system) (opts.settings or { }));
in
{
mkNixOSes = many mkNixOS;
mkHomeManagers = many mkHomeManager;
mkDarwins = many mkDarwin;
formatter = flake-utils.lib.eachDefaultSystem (
system: { formatter = (mkArgs system).unstable.nixfmt-rfc-style; }
);
myPkgs = flake-utils.lib.eachDefaultSystem (system: { packages = (mkArgs system).myPkgs; });
myLib = flake-utils.lib.eachDefaultSystem (system: { lib = (mkArgs system).myLib; });
}

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; };
};
};
}