Compare commits

...

13 commits

Author SHA1 Message Date
06a76ae98f
flake: remove flake-parts
All checks were successful
/ check (push) Successful in 56s
2025-03-23 23:02:23 +01:00
292695805e
modules: migrate to nilla 2025-03-23 23:01:05 +01:00
b988839a70
hosts: migrate to nilla 2025-03-23 22:46:55 +01:00
ddcf878b92
services: migrate to nilla 2025-03-23 22:02:59 +01:00
c70c38c93f
services: prepare for migration 2025-03-23 22:02:20 +01:00
7445304b4b
flake: simplify transpose logic 2025-03-23 21:14:39 +01:00
e92e8c287d
treefmt: migrate to nilla 2025-03-23 20:58:02 +01:00
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
5b421a79d4
nilla: migrate devshells
All checks were successful
/ check (push) Successful in 1m58s
2025-03-23 12:15:58 +01:00
03c19b674c
nilla: init
All checks were successful
/ check (push) Successful in 50s
2025-03-23 11:43:37 +01:00
35 changed files with 524 additions and 357 deletions

View file

@ -1,8 +1,8 @@
{ lib, ... }:
{ lib }:
{
options.assets = lib.mkOption {
type = lib.types.unspecified;
readOnly = true;
options.assets = lib.options.create {
type = lib.types.raw;
writable = false;
};
config.assets = {

57
flake.lock generated
View file

@ -1,5 +1,21 @@
{
"nodes": {
"__flake-compat": {
"flake": false,
"locked": {
"lastModified": 1742412704,
"narHash": "sha256-mhazLo8DuZ3c6r5I7hDxxag8ftAM4W0aUjFjQuw8q5c=",
"ref": "refs/heads/main",
"rev": "f7a7752f237bbc59b868058f70cffd3e436b49b7",
"revCount": 69,
"type": "git",
"url": "https://git.lix.systems/lix-project/flake-compat.git"
},
"original": {
"type": "git",
"url": "https://git.lix.systems/lix-project/flake-compat.git"
}
},
"agenix": {
"inputs": {
"darwin": [
@ -260,26 +276,6 @@
}
},
"flake-parts_2": {
"inputs": {
"nixpkgs-lib": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1741352980,
"narHash": "sha256-+u2UunDA4Cl5Fci3m7S643HzKmIDAe+fiXrLqYsR2fs=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "f4330d22f1c5d2ba72d3d22df5597d123fdb60a9",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-parts_3": {
"inputs": {
"nixpkgs-lib": "nixpkgs-lib"
},
@ -493,7 +489,7 @@
},
"niko-nur": {
"inputs": {
"flake-parts": "flake-parts_3",
"flake-parts": "flake-parts_2",
"nixpkgs": "nixpkgs"
},
"locked": {
@ -510,6 +506,22 @@
"type": "github"
}
},
"nilla": {
"flake": false,
"locked": {
"lastModified": 1742722370,
"narHash": "sha256-MqdseA78bo2M3zfb0mjcBPYU2Qn9CF/KH5LZivWRtB0=",
"owner": "nilla-nix",
"repo": "nilla",
"rev": "b30b5a225843ab649a9b140eb3cbbcc8030a7eaf",
"type": "github"
},
"original": {
"owner": "nilla-nix",
"repo": "nilla",
"type": "github"
}
},
"nix-github-actions": {
"inputs": {
"nixpkgs": [
@ -681,6 +693,7 @@
},
"root": {
"inputs": {
"__flake-compat": "__flake-compat",
"agenix": "agenix",
"attic": "attic",
"conduit-src": "conduit-src",
@ -689,13 +702,13 @@
"disko": "disko",
"fenix": "fenix",
"firefox-darwin": "firefox-darwin",
"flake-parts": "flake-parts_2",
"helix": "helix",
"home-manager": "home-manager",
"lix": "lix",
"lix-module": "lix-module",
"mailserver": "mailserver",
"niko-nur": "niko-nur",
"nilla": "nilla",
"nixpkgs": "nixpkgs_2",
"nvidia-patch": "nvidia-patch",
"racket": "racket",

View file

@ -1,82 +1,37 @@
{
outputs =
inputs@{ flake-parts, ... }:
flake-parts.lib.mkFlake { inherit inputs; } {
inputs:
let
nilla = import ./nilla.nix { inherit inputs; };
systems = [
"x86_64-linux"
"aarch64-linux"
"aarch64-darwin"
];
imports = [
inputs.treefmt.flakeModule
./assets
./hosts
./modules
./wrappers
./pkgs
./services
];
perSystem =
# NOTE: Assumes every package is available for every system.
# For now let's say this is always the case.
transpose =
attrs:
let
inherit (inputs.nixpkgs) lib;
mappedForSystem = system: builtins.mapAttrs (_: pkg: pkg.result.${system}) attrs;
in
lib.genAttrs systems mappedForSystem;
in
{
inputs',
self',
pkgs,
...
}:
{
devShells.default = pkgs.mkShellNoCC {
packages = [
inputs'.agenix.packages.agenix
self'.packages.attic-client
# TODO: Contribute darwin support to nh
pkgs.nh
];
};
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
];
};
};
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";
};
};
inherit (nilla) nixosModules;
inherit (nilla) darwinModules;
inherit (nilla) homeModules;
inherit (nilla) nixosConfigurations;
inherit (nilla) darwinConfigurations;
inherit (nilla) homeConfigurations;
devShells = transpose nilla.shells;
packages = transpose nilla.packages;
formatter = nilla.packages.formatter.result;
};
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixpkgs-unstable";
flake-parts = {
url = "github:hercules-ci/flake-parts";
inputs.nixpkgs-lib.follows = "nixpkgs";
};
disko = {
url = "github:nix-community/disko";
inputs.nixpkgs.follows = "nixpkgs";
@ -168,6 +123,14 @@
url = "github:numtide/treefmt-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
__flake-compat = {
url = "git+https://git.lix.systems/lix-project/flake-compat.git";
flake = false;
};
nilla = {
url = "github:nilla-nix/nilla";
flake = false;
};
};
/*

View file

@ -1,11 +1,11 @@
{
config,
self,
inputs,
...
}:
let
inputs = builtins.mapAttrs (_: input: input.result) config.inputs;
in
{
imports = [
includes = [
./kazuki
./hijiri-vm
./hijiri
@ -17,20 +17,20 @@
./youko
];
builders =
config.configBuilders =
let
sharedOptions = {
_file = ./default.nix;
settei.sane-defaults.allSshKeys = config.assets.sshKeys.user;
settei.flake-qol.inputs = inputs // {
settei = self;
settei = inputs.self;
};
};
baseNixos = inputs.nixpkgs.lib.nixosSystem {
modules = [
self.nixosModules.combined
config.nixosModules.combined
sharedOptions
];
specialArgs.configurationName = "base";
@ -38,7 +38,7 @@
baseDarwin = inputs.darwin.lib.darwinSystem {
modules = [
self.darwinModules.combined
config.darwinModules.combined
sharedOptions
];
specialArgs.configurationName = "base";
@ -50,7 +50,7 @@
baseNixos.extendModules {
modules = [
module
config.__extraHostConfigs.${name} or { }
config.extraHostConfigs.${name} or { }
];
specialArgs.configurationName = name;
};
@ -61,7 +61,7 @@
eval = baseDarwin._module.args.extendModules {
modules = [
module
config.__extraHostConfigs.${name} or { }
config.extraHostConfigs.${name} or { }
];
specialArgs.configurationName = name;
};

View file

@ -1,5 +1,5 @@
{
configurations.nixos.hijiri-vm =
config.configurations.nixos.hijiri-vm =
{
modulesPath,
lib,

View file

@ -1,5 +1,5 @@
{
configurations.darwin.hijiri =
config.configurations.darwin.hijiri =
{
config,
pkgs,

View file

@ -1,6 +1,6 @@
{ lib, ... }:
{
configurations.nixos =
config.configurations.nixos =
let
mkInstaller =
system:

View file

@ -1,5 +1,5 @@
{
configurations.nixos.kazuki =
config.configurations.nixos.kazuki =
{
modulesPath,
...

View file

@ -1,5 +1,5 @@
{
configurations.darwin.kogata =
config.configurations.darwin.kogata =
{ pkgs, ... }:
{
nixpkgs.system = "aarch64-darwin";

View file

@ -1,5 +1,5 @@
{
configurations.nixos.legion =
config.configurations.nixos.legion =
{
config,
username,

View file

@ -1,5 +1,5 @@
{
configurations.nixos.ude =
config.configurations.nixos.ude =
{
config,
modulesPath,

View file

@ -1,5 +1,5 @@
{
configurations.nixos.youko =
config.configurations.nixos.youko =
{
config,
lib,

10
inputs.nix Normal file
View file

@ -0,0 +1,10 @@
let
lock = builtins.fromJSON (builtins.readFile ./flake.lock);
inherit (lock.nodes.__flake-compat.locked) narHash rev url;
flake-compat = builtins.fetchTarball {
url = "${url}/archive/${rev}.tar.gz";
sha256 = narHash;
};
flake = import flake-compat { src = ./.; };
in
flake.inputs

View file

@ -1,29 +1,21 @@
{
config,
inputs,
...
}:
let
flakeModule = import ./flake { inherit (inputs) nixpkgs darwin home-manager; };
inputs = builtins.mapAttrs (_: input: input.result) config.inputs;
perInput = system: flake: {
packages = flake.packages.${system};
};
in
{
imports = [
flakeModule
];
flake.homeModules = rec {
config.homeModules = rec {
settei = ./home;
default = settei;
};
flake.flakeModules = rec {
settei = flakeModule;
default = settei;
};
flake.nixosModules = rec {
config.nixosModules = rec {
settei = import ./system {
inherit (config) perInput;
inherit perInput;
isLinux = true;
};
combined = {
@ -46,9 +38,9 @@ in
default = combined;
};
flake.darwinModules = rec {
config.darwinModules = rec {
settei = import ./system {
inherit (config) perInput;
inherit perInput;
isLinux = false;
};
combined = {

View file

@ -1,54 +0,0 @@
{
nixpkgs,
darwin,
home-manager,
}:
{
config,
lib,
...
}:
with lib;
{
_file = ./configurations.nix;
options = {
# Those functions take the final arguments and emit a valid configuration.
# Probably should hardly ever be overriden
builders = {
nixos = mkOption {
type = types.functionTo types.unspecified;
default = _name: nixpkgs.lib.nixosSystem;
};
darwin = mkOption {
type = types.functionTo types.unspecified;
default = _name: darwin.lib.darwinSystem;
};
home = mkOption {
type = types.functionTo types.unspecified;
default = _name: home-manager.lib.homeManagerConfiguration;
};
};
configurations = {
nixos = mkOption {
type = types.lazyAttrsOf types.deferredModule;
default = { };
};
darwin = mkOption {
type = types.lazyAttrsOf types.deferredModule;
default = { };
};
home = mkOption {
type = types.lazyAttrsOf types.deferredModule;
default = { };
};
};
};
config.flake = {
nixosConfigurations = mapAttrs config.builders.nixos config.configurations.nixos;
darwinConfigurations = mapAttrs config.builders.darwin config.configurations.darwin;
homeConfigurations = mapAttrs config.builders.home config.configurations.home;
};
}

View file

@ -1,13 +0,0 @@
{
nixpkgs,
darwin,
home-manager,
}:
{
_file = ./default.nix;
imports = [
(import ./configurations.nix { inherit nixpkgs darwin home-manager; })
./services.nix
];
}

View file

@ -1,95 +0,0 @@
# List of features I want this module to eventually have
# TODO: Automatic port allocation
# TODO: Making it possible to conveniently isolate services (running them in NixOS containers)
# TODO: Handling specializations
# TODO: Convenient http handling
# TODO: Automatic backup
{ config, lib, ... }:
let
serviceModule =
{ config, ... }:
{
options = {
host = lib.mkOption {
type = lib.types.str;
};
ports = lib.mkOption {
type = with lib.types; listOf port;
default = [ ];
};
hosts = lib.mkOption {
type = with lib.types; listOf str;
default = [ config.host ];
};
config = lib.mkOption {
type = lib.types.deferredModule;
default = { };
};
hostConfig = lib.mkOption {
type = with lib.types; attrsOf deferredModule;
default = { };
};
};
};
moduleToHostConfigs =
cfg:
lib.genAttrs cfg.hosts (host: {
imports = [
cfg.config
(cfg.hostConfig.${host} or { })
];
});
maybeGetPreviousConfigs = acc: host: (acc.${host} or { imports = [ ]; }).imports;
in
{
_file = ./services.nix;
options = {
services = lib.mkOption {
type = with lib.types; attrsOf (submodule serviceModule);
default = { };
};
__extraHostConfigs = lib.mkOption {
type = with lib.types; attrsOf deferredModule;
readOnly = true;
};
};
config.__extraHostConfigs =
let
duplicatePorts = lib.pipe config.services [
lib.attrValues
(map (cfg: cfg.ports))
lib.flatten
(lib.groupBy' (cnt: _: cnt + 1) 0 toString)
(lib.filterAttrs (_: cnt: cnt > 1))
lib.attrNames
];
assertMsg =
let
plural = lib.length duplicatePorts > 1;
in
"\nBad service config:\nThe following port${if plural then "s" else ""} ${
if plural then "were" else "was"
} declared multiple times: ${lib.concatStringsSep ", " duplicatePorts}";
# Here I collect all the services.<name>.config into a flat
# __extraHostConfigs.<host>.imports = [
# ...
# ]
# so that I can easily import them in hosts/default.nix
hostConfigs = lib.pipe config.services [
lib.attrValues
(lib.foldl' (
acc: cfg:
acc
// lib.mapAttrs (host: c: {
imports = c.imports ++ (maybeGetPreviousConfigs acc host);
}) (moduleToHostConfigs cfg)
) { })
];
in
if duplicatePorts != [ ] then throw assertMsg else hostConfigs;
}

View file

@ -0,0 +1,8 @@
{ lib }:
{
config.builders.custom-load = {
settings.type = lib.types.submodule { };
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,47 @@
{ config, lib }:
{
options = {
configBuilders = {
nixos = lib.options.create {
type = lib.types.function lib.types.raw;
default.value = _name: config.inputs.nixpkgs.result.lib.nixosSystem;
};
darwin = lib.options.create {
type = lib.types.function lib.types.raw;
default.value = _name: config.inputs.darwin.result.lib.darwinSystem;
};
home = lib.options.create {
type = lib.types.function lib.types.raw;
default.value = _name: config.inputs.home-manager.result.lib.homeManagerConfiguration;
};
};
configurations = {
nixos = lib.options.create {
type = lib.types.attrs.lazy lib.types.raw;
default.value = { };
};
darwin = lib.options.create {
type = lib.types.attrs.lazy lib.types.raw;
default.value = { };
};
home = lib.options.create {
type = lib.types.attrs.lazy lib.types.raw;
default.value = { };
};
};
nixosConfigurations = lib.options.create {
type = lib.types.attrs.lazy lib.types.raw;
default.value = builtins.mapAttrs config.configBuilders.nixos config.configurations.nixos;
};
darwinConfigurations = lib.options.create {
type = lib.types.attrs.lazy lib.types.raw;
default.value = builtins.mapAttrs config.configBuilders.darwin config.configurations.darwin;
};
homeConfigurations = lib.options.create {
type = lib.types.attrs.lazy lib.types.raw;
default.value = builtins.mapAttrs config.configBuilders.home config.configurations.home;
};
};
}

View file

@ -0,0 +1,8 @@
{
includes = [
./builders
./services.nix
./configurations.nix
./modules.nix
];
}

17
modules/nilla/modules.nix Normal file
View file

@ -0,0 +1,17 @@
{ lib }:
{
options = {
nixosModules = lib.options.create {
type = lib.types.attrs.of lib.types.raw;
default.value = { };
};
darwinModules = lib.options.create {
type = lib.types.attrs.of lib.types.raw;
default.value = { };
};
homeModules = lib.options.create {
type = lib.types.attrs.of lib.types.raw;
default.value = { };
};
};
}

View file

@ -0,0 +1,95 @@
{ lib, config }:
let
inherit (builtins)
attrNames
attrValues
concatStringsSep
mapAttrs
foldl'
groupBy
length
;
serviceModule =
{ config }:
{
options = {
host = lib.options.create {
type = lib.types.string;
};
ports = lib.options.create {
type = lib.types.list.of lib.types.port;
default.value = [ ];
};
hosts = lib.options.create {
type = lib.types.list.of lib.types.string;
default.value = [ config.host ];
};
module = lib.options.create {
type = lib.types.raw;
default.value = { };
};
hostModule = lib.options.create {
type = lib.types.attrs.of lib.types.raw;
default.value = { };
};
};
};
moduleToHostConfigs =
cfg:
lib.attrs.generate cfg.hosts (host: {
imports = [
cfg.module
(cfg.hostModule.${host} or { })
];
});
maybeGetPreviousConfigs = acc: host: (acc.${host} or { imports = [ ]; }).imports;
# Copied from nixpkgs/lib/lists.nix
groupBy' =
op: nul: pred: lst:
mapAttrs (_name: foldl' op nul) (groupBy pred lst);
duplicatePorts = lib.fp.pipe [
attrValues
(map (cfg: cfg.ports))
lib.lists.flatten
(groupBy' (cnt: _: cnt + 1) 0 toString)
(lib.attrs.filter (_: cnt: cnt > 1))
attrNames
] config.services;
in
{
options.services = lib.options.create {
type = lib.types.attrs.of (lib.types.submodule serviceModule);
default.value = { };
};
options.extraHostConfigs = lib.options.create {
type = lib.types.attrs.of lib.types.raw;
writable = false;
default.value = lib.fp.pipe [
attrValues
(foldl' (
acc: cfg:
acc
// mapAttrs (host: c: {
imports = c.imports ++ (maybeGetPreviousConfigs acc host);
}) (moduleToHostConfigs cfg)
) { })
] config.services;
};
config.assertions = [
{
assertion = duplicatePorts == [ ];
message =
let
plural = length duplicatePorts > 1;
in
"\nBad service config:\nThe following port${if plural then "s" else ""} ${
if plural then "were" else "was"
} declared multiple times: ${concatStringsSep ", " duplicatePorts}";
}
];
}

103
nilla.nix Normal file
View file

@ -0,0 +1,103 @@
{
inputs ? import ./inputs.nix,
}:
(import inputs.nilla).create (
{ config, lib }:
{
includes = [
./modules/nilla
./pkgs
./wrappers
./hosts
./assets
./services
./modules
];
config.inputs = builtins.mapAttrs (_: src: {
inherit src;
loader = "raw";
}) inputs;
config.packages =
let
systems = [
"x86_64-linux"
"aarch64-linux"
"aarch64-darwin"
];
mkPackage = package: {
builder = "nixpkgs-flake";
inherit systems package;
};
mkPackageFlakeOutput =
{
input,
output ? input,
}:
{
inherit systems;
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";
};
attic-server = mkPackageFlakeOutput {
input = "attic";
output = "attic-server";
};
agenix = mkPackageFlakeOutput { input = "agenix"; };
base-packages = mkPackage (
{ symlinkJoin, system }:
symlinkJoin {
name = "settei-base";
paths = with (getPkgs system); [
# TODO: wrappers
helix
fish
git-commit-last
git-fixup
];
}
);
formatter = {
inherit systems;
builder = "custom-load";
package =
{ system }:
let
eval = inputs.treefmt.lib.evalModule inputs.nixpkgs.legacyPackages.${system} ./treefmt.nix;
in
eval.config.build.wrapper;
};
};
config.shells.default = {
systems = [
"x86_64-linux"
"aarch64-linux"
"aarch64-darwin"
];
builder = "nixpkgs-flake";
shell =
{
mkShellNoCC,
system,
nh,
}:
mkShellNoCC {
packages = [
config.packages.agenix.result.${system}
config.packages.attic-client.result.${system}
nh
];
};
};
}
)

View file

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

View file

@ -1,35 +1,52 @@
{ inputs, ... }:
{
perSystem =
{
pkgs,
lib,
inputs',
...
}:
{
packages.conduit-next = pkgs.callPackage ./conduit {
src = inputs.conduit-src;
crane = inputs.crane.mkLib pkgs;
fenix = inputs'.fenix.packages;
{ config }:
let
systems = [
"x86_64-linux"
"aarch64-linux"
"aarch64-darwin"
];
builder = "nixpkgs-flake";
mkPackage = package: {
inherit systems package builder;
};
packages.git-commit-last = pkgs.writeShellApplication {
in
{
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"
'';
};
}
);
packages.git-fixup = pkgs.writeShellApplication {
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 pkgs.fzf} | \
${lib.getExe fzf} | \
cut -c -7 | \
xargs -o git commit --fixup
'';
};
};
}
);
}

View file

@ -1,12 +1,12 @@
{
services.attic =
config.services.attic =
let
atticPort = 9476;
in
{
host = "kazuki";
ports = [ atticPort ];
config =
module =
{ config, ... }:
{
age.secrets.attic-creds = {

View file

@ -1,5 +1,5 @@
{
imports = [
includes = [
./attic.nix
./forgejo-runner.nix
];

View file

@ -1,10 +1,10 @@
{
services.forgejo-runner = {
config.services.forgejo-runner = {
hosts = [
"ude"
"youko"
];
config =
module =
{
config,
lib,

1
shell.nix Normal file
View file

@ -0,0 +1 @@
(import ./nilla.nix { }).shells.default.result.${builtins.currentSystem}

19
treefmt.nix Normal file
View file

@ -0,0 +1,19 @@
{
projectRootFile = "nilla.nix";
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";
}

View file

@ -1,10 +1,14 @@
{ inputs, ... }:
{
perSystem =
{ pkgs, inputs', ... }:
{ lib, config }:
let
wrapped = inputs.wrapper-manager-hm-compat.lib {
inherit pkgs;
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
@ -13,13 +17,16 @@
./fish
./wezterm
];
specialArgs = {
inherit inputs inputs';
};
};
all-packages = wrapped.config.build.packages;
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
{
packages = all-packages;
};
config.packages = lib.attrs.generate wrapperNames (wrapper: {
inherit systems;
builder = "custom-load";
package = { system }: wrappedPerSystem'.${system}.${wrapper};
});
}

View file

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

View file

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