nix machine / user configurations

refactor(treewide): improve how pkgs, overlays, etc. are imported and handled

ptr.pet d78f744c 26935bab

verified
Changed files
+81 -69
hosts
wolumonde
modules
pkgs-set
shells
users
+19 -26
flake.nix
···
inputs:
let
lib = inputs.nixpkgs.lib;
-
tlib = (import ./lib lib).extend (
-
_: prev: rec {
-
makePkgs =
-
system:
-
import ./pkgs-set {
-
inherit system lib inputs;
-
tlib = prev;
-
};
-
genPkgs = f: prev.genSystems (system: f (makePkgs system));
-
}
-
);
-
allPkgs = tlib.genPkgs (x: x);
miscApps =
-
lib.mapAttrs
(
_: cmds:
-
lib.mapAttrs (_: cmd: {
type = "app";
program = cmd;
}) cmds
)
(
-
lib.mapAttrs
-
(_: pkgs: (
-
lib.mapAttrs
(_: app: app.program)
-
(inputs.ncr.makeApps {inherit pkgs; inherit (inputs) self;})
) // {
-
generate-firefox-addons = toString "${pkgs.generate-firefox-addons}/bin/generate-firefox-addons";
-
dns = toString "${pkgs.dnsmngmt}/bin/dns";
})
-
allPkgs
);
in
{
lib = tlib;
-
nixosConfigurations = import ./hosts { inherit lib tlib inputs allPkgs; };
-
homeConfigurations = import ./users { inherit lib tlib inputs allPkgs; };
-
packages = lib.mapAttrs (_: pkgs: pkgs._exported) allPkgs;
-
legacyPackages = allPkgs;
apps = miscApps;
# topology = lib.mapAttrs (_: pkgs:
···
# })
# allPkgs;
-
devShells = import ./shells { inherit lib tlib inputs; };
};
}
···
inputs:
let
lib = inputs.nixpkgs.lib;
+
tlib = import ./lib lib;
+
l = lib;
+
makePkgsSet = system: import ./pkgs-set {
+
inherit system inputs lib tlib;
+
};
+
allPkgsSets = tlib.genSystems makePkgsSet;
miscApps =
+
l.mapAttrs
(
_: cmds:
+
l.mapAttrs (_: cmd: {
type = "app";
program = cmd;
}) cmds
)
(
+
l.mapAttrs
+
(_: set: (
+
l.mapAttrs
(_: app: app.program)
+
(inputs.ncr.makeApps {inherit (set) pkgs; inherit (inputs) self;})
) // {
+
generate-firefox-addons = toString "${set.pkgs.generate-firefox-addons}/bin/generate-firefox-addons";
+
dns = toString "${set.pkgs.dnsmngmt}/bin/dns";
})
+
allPkgsSets
);
in
{
lib = tlib;
+
nixosConfigurations = import ./hosts { inherit lib tlib inputs allPkgsSets; };
+
homeConfigurations = import ./users { inherit lib tlib inputs allPkgsSets; };
+
packages = l.mapAttrs (_: set: set.exported) allPkgsSets;
apps = miscApps;
# topology = lib.mapAttrs (_: pkgs:
···
# })
# allPkgs;
+
devShells = import ./shells { inherit lib inputs allPkgsSets; };
};
}
+10 -7
hosts/default.nix
···
inputs,
lib,
tlib,
-
allPkgs,
...
}:
let
···
];
mkSystem =
-
name: pkgs:
lib.nixosSystem {
-
system = pkgs.system;
modules = baseModules ++ [
{ networking.hostName = name; }
-
{ nixpkgs.pkgs = pkgs; }
(import (./. + "/${name}/default.nix"))
];
-
specialArgs = { inherit inputs tlib; };
};
systems = {
# lungmen = "x86_64-linux";
# tkaronto = "x86_64-linux";
-
wolumonde = allPkgs.x86_64-linux;
-
wsl = allPkgs.x86_64-linux;
};
in
lib.mapAttrs mkSystem systems
···
inputs,
lib,
tlib,
+
allPkgsSets,
...
}:
let
···
];
mkSystem =
+
name: set:
lib.nixosSystem {
+
system = set.pkgs.system;
modules = baseModules ++ [
{ networking.hostName = name; }
+
{ nixpkgs.pkgs = set.pkgs; }
(import (./. + "/${name}/default.nix"))
];
+
specialArgs = {
+
inherit (set) terra;
+
inherit inputs tlib;
+
};
};
systems = {
# lungmen = "x86_64-linux";
# tkaronto = "x86_64-linux";
+
wolumonde = allPkgsSets.x86_64-linux;
+
wsl = allPkgsSets.x86_64-linux;
};
in
lib.mapAttrs mkSystem systems
+2 -2
hosts/wolumonde/modules/perses.nix
···
-
{ pkgs, config, ... }:
let
domain = "dash.gaze.systems";
port = 7412;
···
secrets = config.age.secrets;
in
{
-
environment.systemPackages = [ pkgs.percli ];
users.users.${user} = {
isNormalUser = true;
···
+
{ pkgs, terra, config, ... }:
let
domain = "dash.gaze.systems";
port = 7412;
···
secrets = config.age.secrets;
in
{
+
environment.systemPackages = [ terra.percli ];
users.users.${user} = {
isNormalUser = true;
+29 -17
pkgs-set/default.nix
···
}:
let
l = lib // builtins;
-
overlays = l.mapAttrsToList (
-
name: _:
-
let
-
o = import "${./.}/overlays/${name}";
-
in
-
if (l.functionArgs o) ? inputs then o { inherit inputs; } else o
-
) (l.readDir ./overlays);
-
newPkgs = l.mapAttrsToList (name: _: final: prev: {
-
${l.removeSuffix ".nix" name} = final.callPackage "${./pkgs}/${name}" { inherit inputs tlib; };
-
}) (l.readDir ./pkgs);
pkgs = import inputs.nixpkgs {
-
inherit system;
config.allowUnfree = true;
# config.allowBroken = true;
# config.permittedInsecurePackages = ["electron-25.9.0"];
-
overlays = overlays ++ newPkgs;
};
-
pkgsToExport = import ./pkgs-to-export.nix pkgs;
-
in
-
pkgs
-
// {
-
_exported = pkgsToExport;
}
···
}:
let
l = lib // builtins;
+
overlays = l.flatten (
+
l.mapAttrsToList
+
(
+
name: _:
+
if name != "disabled"
+
then
+
let
+
o = import "${./overlays}/${name}";
+
in
+
if (l.functionArgs o) ? inputs
+
then o { inherit inputs; }
+
else o
+
else
+
[]
+
)
+
(l.readDir ./overlays)
+
);
pkgs = import inputs.nixpkgs {
+
inherit system overlays;
config.allowUnfree = true;
# config.allowBroken = true;
# config.permittedInsecurePackages = ["electron-25.9.0"];
};
+
terraPkgs =
+
l.genAttrs
+
(l.map (l.removeSuffix ".nix") (l.attrNames (l.readDir ./pkgs)))
+
(name: pkgs.callPackage "${./pkgs}/${name}.nix" {
+
inherit inputs tlib;
+
});
+
pkgsToExport = pkgs.lib.getAttrs (import ./exported.nix) (pkgs // terraPkgs);
+
in {
+
inherit pkgs;
+
terra = terraPkgs;
+
exported = pkgsToExport;
}
+4
pkgs-set/exported.nix
···
···
+
[
+
"comic-mono"
+
"percli"
+
]
pkgs-set/overlays/bitwig.nix pkgs-set/overlays/disabled/bitwig/default.nix
pkgs-set/overlays/calf.nix pkgs-set/overlays/disabled/calf.nix
pkgs-set/overlays/prismlauncher.nix pkgs-set/overlays/disabled/prismlauncher/default.nix
pkgs-set/patches/bitwig.jar pkgs-set/overlays/disabled/bitwig/bitwig.jar
pkgs-set/patches/prismlauncher-offline.patch pkgs-set/overlays/disabled/prismlauncher/prismlauncher-offline.patch
-7
pkgs-set/pkgs-to-export.nix
···
-
pkgs:
-
(pkgs.lib.getAttrs [
-
"phantom"
-
"comic-mono"
-
"bitwig-studio"
-
"percli"
-
] pkgs)
···
+9 -5
shells/default.nix
···
{
-
tlib,
inputs,
...
}:
-
tlib.genPkgs (
-
pkgs:
let
mkNakedShell = pkgs.callPackage inputs.naked-shell { };
agenix-wrapped = pkgs.writeShellApplication {
name = "agenix";
-
runtimeInputs = [ pkgs.agenix ];
text = ''
if [ -z "''${1-}" ]; then
agenix
···
treefmt
rage
nh
-
percli
go
gopls
# golangci-lint
···
agenix-wrapped
commit
deploy
];
shellHook = ''
echo \"$(tput bold)welcome to PRTS, $USER$(tput sgr0)\"
···
};
}
)
···
{
+
lib,
+
allPkgsSets,
inputs,
...
}:
+
lib.mapAttrs
+
(
+
system: set:
let
+
inherit (set) pkgs;
mkNakedShell = pkgs.callPackage inputs.naked-shell { };
agenix-wrapped = pkgs.writeShellApplication {
name = "agenix";
+
runtimeInputs = [ inputs.agenix.packages.${system}.default ];
text = ''
if [ -z "''${1-}" ]; then
agenix
···
treefmt
rage
nh
go
gopls
# golangci-lint
···
agenix-wrapped
commit
deploy
+
set.terra.percli
];
shellHook = ''
echo \"$(tput bold)welcome to PRTS, $USER$(tput sgr0)\"
···
};
}
)
+
allPkgsSets
+8 -5
users/default.nix
···
inputs,
lib,
tlib,
-
allPkgs,
...
}:
let
mkHome =
-
name: pkgs:
import "${inputs.home}/modules" {
-
inherit pkgs;
configuration = import (./. + "/${name}/default.nix");
-
extraSpecialArgs = {inherit tlib inputs pkgs;};
};
users = {
-
"dusk@devel.mobi" = allPkgs.x86_64-linux;
};
in
lib.mapAttrs mkHome users
···
inputs,
lib,
tlib,
+
allPkgsSets,
...
}:
let
mkHome =
+
name: set:
import "${inputs.home}/modules" {
+
inherit (set) pkgs;
configuration = import (./. + "/${name}/default.nix");
+
extraSpecialArgs = {
+
inherit (set) pkgs terra;
+
inherit tlib inputs;
+
};
};
users = {
+
"dusk@devel.mobi" = allPkgsSets.x86_64-linux;
};
in
lib.mapAttrs mkHome users