Compare commits

..

4 commits

Author SHA1 Message Date
265fba3908
wrappers: migrate to nilla
All checks were successful
/ check (push) Successful in 1m55s
2025-03-23 13:35:24 +01:00
7c0f0ac90e
pkgs: migrate to nilla 2025-03-23 13:17:56 +01:00
5d5fcac95a
flake: start moving away from flake-parts 2025-03-23 12:59:03 +01:00
7bcd839378
nilla: modularize 2025-03-23 12:58:53 +01:00
11 changed files with 186 additions and 141 deletions

View file

@ -3,6 +3,23 @@
inputs@{ flake-parts, ... }: inputs@{ flake-parts, ... }:
let let
nilla = import ./nilla.nix { inherit inputs; }; nilla = import ./nilla.nix { inherit inputs; };
transpose =
attrs:
let
inherit (inputs.nixpkgs) lib;
# maps an attrset of systems to packages to list of [ {name; system; value;} ]
pkgToListAll =
name: pkg:
map (system: {
inherit name system;
value = pkg.${system};
}) (builtins.attrNames pkg);
pkgsToListAll = pkgs: map (name: pkgToListAll name pkgs.${name}) (builtins.attrNames pkgs);
# list of all packages in format [ {name; system; value;} ]
allPkgs = lib.flatten (pkgsToListAll attrs);
systems = builtins.groupBy (pkg: pkg.system) allPkgs;
in
builtins.mapAttrs (_: pkgs: lib.listToAttrs pkgs) systems;
in in
flake-parts.lib.mkFlake { inherit inputs; } { flake-parts.lib.mkFlake { inherit inputs; } {
systems = [ systems = [
@ -17,55 +34,32 @@
./assets ./assets
./hosts ./hosts
./modules ./modules
./wrappers
./pkgs
./services ./services
]; ];
perSystem = flake.devShells = transpose (builtins.mapAttrs (_: shell: shell.result) nilla.shells);
{ flake.packages = transpose (builtins.mapAttrs (_: pkg: pkg.result) nilla.packages);
inputs',
self',
pkgs,
system,
...
}:
{
devShells = builtins.mapAttrs (_: shell: shell.result.${system}) nilla.shells;
packages = { perSystem = {
# Re-export it for convenience and for caching treefmt = {
inherit (inputs'.attic.packages) attic-client attic-server; programs.deadnix.enable = true;
base-packages = pkgs.symlinkJoin { programs.nixfmt.enable = true;
name = "settei-base"; programs.statix.enable = true;
paths = with self'.packages; [ programs.fish_indent.enable = true;
helix programs.deno.enable = true;
fish programs.stylua.enable = true;
git-commit-last programs.shfmt.enable = true;
git-fixup settings.global.excludes = [
]; # agenix
}; "*.age"
};
treefmt = { # racket
programs.deadnix.enable = true; "*.rkt"
programs.nixfmt.enable = true; "**/rashrc"
programs.statix.enable = true; ];
programs.fish_indent.enable = true; settings.on-unmatched = "fatal";
programs.deno.enable = true;
programs.stylua.enable = true;
programs.shfmt.enable = true;
settings.global.excludes = [
# agenix
"*.age"
# racket
"*.rkt"
"**/rashrc"
];
settings.on-unmatched = "fatal";
};
}; };
};
}; };
inputs = { inputs = {

View file

@ -0,0 +1,13 @@
{ lib }:
{
config.builders.custom-load = {
settings.type = lib.types.submodule {
options.args = lib.options.create {
type = lib.types.null;
default.value = null;
};
};
settings.default = { };
build = pkg: lib.attrs.generate pkg.systems (system: pkg.package { inherit system; });
};
}

View file

@ -0,0 +1,6 @@
{
includes = [
./nixpkgs-flake.nix
./custom-load.nix
];
}

View file

@ -0,0 +1,21 @@
{
config,
lib,
}:
{
config.builders.nixpkgs-flake = {
settings.type = lib.types.submodule {
options.args = lib.options.create {
type = lib.types.any;
default.value = { };
};
};
settings.default = { };
build =
pkg:
lib.attrs.generate pkg.systems (
system:
config.inputs.nixpkgs.result.legacyPackages.${system}.callPackage pkg.package pkg.settings.args
);
};
}

View file

@ -0,0 +1,3 @@
{
includes = [ ./builders ];
}

View file

@ -4,43 +4,17 @@
(import inputs.nilla).create ( (import inputs.nilla).create (
{ config, lib }: { config, lib }:
{ {
includes = [
./modules/nilla
./pkgs
./wrappers
];
config.inputs = builtins.mapAttrs (_: src: { config.inputs = builtins.mapAttrs (_: src: {
inherit src; inherit src;
loader = "raw"; loader = "raw";
}) inputs; }) inputs;
config.builders.nixpkgs-flake = {
settings.type = lib.types.submodule {
options.args = lib.options.create {
type = lib.types.any;
default.value = { };
};
};
settings.default = { };
build =
pkg:
lib.attrs.generate pkg.systems (
system:
inputs.nixpkgs.legacyPackages.${system}.callPackage pkg.package (
{
self' = builtins.mapAttrs (_: pkg: pkg.result.${system}) config.packages;
}
// pkg.settings.args
)
);
};
config.builders.custom-load = {
settings.type = lib.types.submodule {
options.args = lib.options.create {
type = lib.types.null;
default.value = null;
};
};
settings.default = { };
build = pkg: lib.attrs.generate pkg.systems (system: pkg.package { inherit system; });
};
config.packages = config.packages =
let let
systems = [ systems = [
@ -62,8 +36,10 @@
builder = "custom-load"; builder = "custom-load";
package = { system }: inputs.${input}.packages.${system}.${output}; package = { system }: inputs.${input}.packages.${system}.${output};
}; };
getPkgs = system: builtins.mapAttrs (_: pkg: pkg.result.${system}) config.packages;
in in
{ {
# Re-export for convenience and for caching
attic-client = mkPackageFlakeOutput { attic-client = mkPackageFlakeOutput {
input = "attic"; input = "attic";
output = "attic-client"; output = "attic-client";
@ -74,10 +50,16 @@
}; };
agenix = mkPackageFlakeOutput { input = "agenix"; }; agenix = mkPackageFlakeOutput { input = "agenix"; };
base-packages = mkPackage ( base-packages = mkPackage (
{ symlinkJoin }: { symlinkJoin, system }:
symlinkJoin { symlinkJoin {
name = "settei-base"; name = "settei-base";
paths = [ ]; paths = with (getPkgs system); [
# TODO: wrappers
# helix
# fish
git-commit-last
git-fixup
];
} }
); );
}; };
@ -92,13 +74,13 @@
shell = shell =
{ {
mkShellNoCC, mkShellNoCC,
system,
nh, nh,
self',
}: }:
mkShellNoCC { mkShellNoCC {
packages = [ packages = [
self'.agenix config.packages.agenix.result.${system}
self'.attic-client config.packages.attic-client.result.${system}
nh nh
]; ];
}; };

View file

@ -1,6 +1,8 @@
{ {
lib, lib,
stdenv, stdenv,
pkgs,
system,
fenix, fenix,
crane, crane,
src, src,
@ -11,12 +13,12 @@
}: }:
let let
rust = rust =
with fenix; with fenix.${system};
combine [ combine [
stable.cargo stable.cargo
stable.rustc stable.rustc
]; ];
crane' = crane.overrideToolchain rust; crane' = (crane pkgs).overrideToolchain rust;
rocksdb' = rocksdb.overrideAttrs ( rocksdb' = rocksdb.overrideAttrs (
final: prev: { final: prev: {
version = "9.1.1"; version = "9.1.1";

View file

@ -1,35 +1,52 @@
{ inputs, ... }: { config }:
let
systems = [
"x86_64-linux"
"aarch64-linux"
"aarch64-darwin"
];
builder = "nixpkgs-flake";
mkPackage = package: {
inherit systems package builder;
};
in
{ {
perSystem = config.packages.conduit-next = {
{ inherit systems builder;
pkgs, package = import ./conduit;
lib, settings.args = {
inputs', src = config.inputs.conduit-src.result;
... crane = config.inputs.crane.result.mkLib;
}: fenix = config.inputs.fenix.result.packages;
{
packages.conduit-next = pkgs.callPackage ./conduit {
src = inputs.conduit-src;
crane = inputs.crane.mkLib pkgs;
fenix = inputs'.fenix.packages;
};
packages.git-commit-last = pkgs.writeShellApplication {
name = "git-commit-last";
text = ''
GITDIR="$(git rev-parse --git-dir)"
git commit -eF "$GITDIR/COMMIT_EDITMSG"
'';
};
packages.git-fixup = pkgs.writeShellApplication {
name = "git-fixup";
text = ''
git log -n 50 --pretty=format:'%h %s' --no-merges | \
${lib.getExe pkgs.fzf} | \
cut -c -7 | \
xargs -o git commit --fixup
'';
};
}; };
};
config.packages.git-commit-last = mkPackage (
{ writeShellApplication }:
writeShellApplication {
name = "git-commit-last";
text = ''
GITDIR="$(git rev-parse --git-dir)"
git commit -eF "$GITDIR/COMMIT_EDITMSG"
'';
}
);
config.packages.git-fixup = mkPackage (
{
lib,
writeShellApplication,
fzf,
}:
writeShellApplication {
name = "git-fixup";
text = ''
git log -n 50 --pretty=format:'%h %s' --no-merges | \
${lib.getExe fzf} | \
cut -c -7 | \
xargs -o git commit --fixup
'';
}
);
} }

View file

@ -1,25 +1,32 @@
{ inputs, ... }: { lib, config }:
let
systems = [
"x86_64-linux"
"aarch64-linux"
"aarch64-darwin"
];
wrappedPerSystem = lib.attrs.generate systems (
system:
config.inputs.wrapper-manager-hm-compat.result.lib {
pkgs = config.inputs.nixpkgs.result.legacyPackages.${system};
modules = [
./starship
./helix
# TODO: Enable again
# ./rash
./fish
./wezterm
];
specialArgs.inputs = builtins.mapAttrs (_: input: input.result) config.inputs;
}
);
wrappedPerSystem' = builtins.mapAttrs (_: wrapped: wrapped.config.build.packages) wrappedPerSystem;
wrapperNames = builtins.attrNames wrappedPerSystem'."x86_64-linux";
in
{ {
perSystem = config.packages = lib.attrs.generate wrapperNames (wrapper: {
{ pkgs, inputs', ... }: inherit systems;
let builder = "custom-load";
wrapped = inputs.wrapper-manager-hm-compat.lib { package = { system }: wrappedPerSystem'.${system}.${wrapper};
inherit pkgs; });
modules = [
./starship
./helix
# TODO: Enable again
# ./rash
./fish
./wezterm
];
specialArgs = {
inherit inputs inputs';
};
};
all-packages = wrapped.config.build.packages;
in
{
packages = all-packages;
};
} }

View file

@ -1,8 +1,8 @@
{ pkgs, inputs', ... }: { pkgs, inputs, ... }:
{ {
programs.helix = { programs.helix = {
enable = true; enable = true;
package = inputs'.helix.packages.default; package = inputs.helix.packages.${pkgs.system}.default;
settings = { settings = {
theme = "base16_default_dark"; theme = "base16_default_dark";
editor = { editor = {

View file

@ -1,6 +1,6 @@
{ {
pkgs, pkgs,
inputs', inputs,
config, config,
... ...
}: }:
@ -13,7 +13,7 @@
rev = "8eb52c163d6ea7c3cec2cc6b1011ce00738942e1"; rev = "8eb52c163d6ea7c3cec2cc6b1011ce00738942e1";
hash = "sha256-1yU0ZUBQqYEn85j4T2pLs02MTyJnO5BbYALIa88iomY="; hash = "sha256-1yU0ZUBQqYEn85j4T2pLs02MTyJnO5BbYALIa88iomY=";
}; };
racket-with-libs = inputs'.racket.packages.racket.newLayer { racket-with-libs = inputs.racket.packages.${pkgs.system}.racket.newLayer {
withRacketPackages = withRacketPackages =
ps: with ps; [ ps: with ps; [
readline-gpl readline-gpl