diff --git a/flake.nix b/flake.nix index 30729a5..93b8f6a 100644 --- a/flake.nix +++ b/flake.nix @@ -3,23 +3,6 @@ inputs@{ flake-parts, ... }: let 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 flake-parts.lib.mkFlake { inherit inputs; } { systems = [ @@ -34,32 +17,55 @@ ./assets ./hosts ./modules + ./wrappers + ./pkgs ./services ]; - flake.devShells = transpose (builtins.mapAttrs (_: shell: shell.result) nilla.shells); - flake.packages = transpose (builtins.mapAttrs (_: pkg: pkg.result) nilla.packages); + perSystem = + { + inputs', + self', + pkgs, + system, + ... + }: + { + devShells = builtins.mapAttrs (_: shell: shell.result.${system}) nilla.shells; - perSystem = { - treefmt = { - programs.deadnix.enable = true; - programs.nixfmt.enable = true; - programs.statix.enable = true; - programs.fish_indent.enable = true; - programs.deno.enable = true; - programs.stylua.enable = true; - programs.shfmt.enable = true; - settings.global.excludes = [ - # agenix - "*.age" + packages = { + # Re-export it for convenience and for caching + inherit (inputs'.attic.packages) attic-client attic-server; + base-packages = pkgs.symlinkJoin { + name = "settei-base"; + paths = with self'.packages; [ + helix + fish + git-commit-last + git-fixup + ]; + }; + }; - # racket - "*.rkt" - "**/rashrc" - ]; - settings.on-unmatched = "fatal"; + treefmt = { + programs.deadnix.enable = true; + programs.nixfmt.enable = true; + programs.statix.enable = true; + programs.fish_indent.enable = true; + 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 = { diff --git a/modules/nilla/builders/custom-load.nix b/modules/nilla/builders/custom-load.nix deleted file mode 100644 index b89bc36..0000000 --- a/modules/nilla/builders/custom-load.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ 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; }); - }; -} diff --git a/modules/nilla/builders/default.nix b/modules/nilla/builders/default.nix deleted file mode 100644 index fa73437..0000000 --- a/modules/nilla/builders/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ - includes = [ - ./nixpkgs-flake.nix - ./custom-load.nix - ]; -} diff --git a/modules/nilla/builders/nixpkgs-flake.nix b/modules/nilla/builders/nixpkgs-flake.nix deleted file mode 100644 index 4b0115f..0000000 --- a/modules/nilla/builders/nixpkgs-flake.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ - 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 - ); - }; -} diff --git a/modules/nilla/default.nix b/modules/nilla/default.nix deleted file mode 100644 index f9e4319..0000000 --- a/modules/nilla/default.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - includes = [ ./builders ]; -} diff --git a/nilla.nix b/nilla.nix index 302900a..eb7bf6c 100644 --- a/nilla.nix +++ b/nilla.nix @@ -4,17 +4,43 @@ (import inputs.nilla).create ( { config, lib }: { - includes = [ - ./modules/nilla - ./pkgs - ./wrappers - ]; - config.inputs = builtins.mapAttrs (_: src: { inherit src; loader = "raw"; }) 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 = let systems = [ @@ -36,10 +62,8 @@ builder = "custom-load"; package = { system }: inputs.${input}.packages.${system}.${output}; }; - getPkgs = system: builtins.mapAttrs (_: pkg: pkg.result.${system}) config.packages; in { - # Re-export for convenience and for caching attic-client = mkPackageFlakeOutput { input = "attic"; output = "attic-client"; @@ -50,16 +74,10 @@ }; agenix = mkPackageFlakeOutput { input = "agenix"; }; base-packages = mkPackage ( - { symlinkJoin, system }: + { symlinkJoin }: symlinkJoin { name = "settei-base"; - paths = with (getPkgs system); [ - # TODO: wrappers - # helix - # fish - git-commit-last - git-fixup - ]; + paths = [ ]; } ); }; @@ -74,13 +92,13 @@ shell = { mkShellNoCC, - system, nh, + self', }: mkShellNoCC { packages = [ - config.packages.agenix.result.${system} - config.packages.attic-client.result.${system} + self'.agenix + self'.attic-client nh ]; }; diff --git a/pkgs/conduit/default.nix b/pkgs/conduit/default.nix index 2f1ccdd..c2c44b4 100644 --- a/pkgs/conduit/default.nix +++ b/pkgs/conduit/default.nix @@ -1,8 +1,6 @@ { lib, stdenv, - pkgs, - system, fenix, crane, src, @@ -13,12 +11,12 @@ }: let rust = - with fenix.${system}; + with fenix; combine [ stable.cargo stable.rustc ]; - crane' = (crane pkgs).overrideToolchain rust; + crane' = crane.overrideToolchain rust; rocksdb' = rocksdb.overrideAttrs ( final: prev: { version = "9.1.1"; diff --git a/pkgs/default.nix b/pkgs/default.nix index f5009d6..71a2d48 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -1,52 +1,35 @@ -{ config }: -let - systems = [ - "x86_64-linux" - "aarch64-linux" - "aarch64-darwin" - ]; - builder = "nixpkgs-flake"; - mkPackage = package: { - inherit systems package builder; - }; - -in +{ inputs, ... }: { - config.packages.conduit-next = { - inherit systems builder; - package = import ./conduit; - settings.args = { - src = config.inputs.conduit-src.result; - crane = config.inputs.crane.result.mkLib; - fenix = config.inputs.fenix.result.packages; - }; - }; - - 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 ( + perSystem = { + pkgs, lib, - writeShellApplication, - fzf, + inputs', + ... }: - 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 - ''; - } - ); + { + 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 + ''; + }; + }; } diff --git a/wrappers/default.nix b/wrappers/default.nix index 7701749..95040ca 100644 --- a/wrappers/default.nix +++ b/wrappers/default.nix @@ -1,32 +1,25 @@ -{ 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 +{ inputs, ... }: { - config.packages = lib.attrs.generate wrapperNames (wrapper: { - inherit systems; - builder = "custom-load"; - package = { system }: wrappedPerSystem'.${system}.${wrapper}; - }); + perSystem = + { pkgs, inputs', ... }: + let + wrapped = inputs.wrapper-manager-hm-compat.lib { + 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; + }; } diff --git a/wrappers/helix/default.nix b/wrappers/helix/default.nix index 6703955..8bd476d 100644 --- a/wrappers/helix/default.nix +++ b/wrappers/helix/default.nix @@ -1,8 +1,8 @@ -{ pkgs, inputs, ... }: +{ pkgs, inputs', ... }: { programs.helix = { enable = true; - package = inputs.helix.packages.${pkgs.system}.default; + package = inputs'.helix.packages.default; settings = { theme = "base16_default_dark"; editor = { diff --git a/wrappers/rash/default.nix b/wrappers/rash/default.nix index 64c026c..c142a0e 100644 --- a/wrappers/rash/default.nix +++ b/wrappers/rash/default.nix @@ -1,6 +1,6 @@ { pkgs, - inputs, + inputs', config, ... }: @@ -13,7 +13,7 @@ rev = "8eb52c163d6ea7c3cec2cc6b1011ce00738942e1"; hash = "sha256-1yU0ZUBQqYEn85j4T2pLs02MTyJnO5BbYALIa88iomY="; }; - racket-with-libs = inputs.racket.packages.${pkgs.system}.racket.newLayer { + racket-with-libs = inputs'.racket.packages.racket.newLayer { withRacketPackages = ps: with ps; [ readline-gpl