Files
config/hosts/default.nix
2025-09-07 15:06:59 +02:00

166 lines
6.5 KiB
Nix

{ input-views }:
let
inherit (input-views.inputs-edge) self;
mkModule = extra-modules: domain: system: inputs: stateVersion: modules: hostname: ({ lib, ... }: {
system.stateVersion = lib.mkDefault stateVersion; # TODO: home-manager
nixpkgs.hostPlatform = system;
#nixpkgs.buildPlatform = buildSystem; # cross
imports = [
./../profiles/base
./nixos/${hostname}/configuration.nix
inputs.home-manager.nixosModules.default
#inputs.nix-index-database.nixosModules.nix-index # TODO: fix?
]
++ modules
++ extra-modules
#++ inputs.flake-programs-sqlite.nixosModules.programs-sqlite # TODO: make work
;
home-manager.useGlobalPkgs = true; # go brrr, reuse overrides
home-manager.extraSpecialArgs = { inherit inputs; };
home-manager.sharedModules = [
inputs.sops-nix.homeManagerModules.sops
(
inputs.nix-index-database.hmModules.nix-index
or inputs.nix-index-database.homeModules.nix-index # old attrname
)
];
# still needed even if using networkd
networking.hostName = hostname;
networking.domain = domain;
networking.search = [ domain ];
nixpkgs.overlays = [
self.overlays.pbsdspkgs
inputs.system-manager-edge.overlays.default
(final: prev: {
unstable = import inputs.unstable {
inherit system;
inherit (final.pkgs) config overlays;
};
})
];
# This makes commandline tools like 'nix run nixpkgs#hello'
# and 'nix-shell -p hello' use the same channel as system was built with
nix.registry.nixpkgs.flake = inputs.nixpkgs;
nix.registry.nixpkgs-unstable.flake = inputs.unstable;
nix.nixPath = [
"nixpkgs=${inputs.nixpkgs}"
"nixpkgs-unstable=${inputs.unstable}"
];
});
mkConfig = extra-modules: domain: system: inputs: stateVersion: modules: hostname: inputs.nixpkgs.lib.nixosSystem {
#inherit system;
specialArgs = { inherit inputs; };
modules = [
{
# _module.args = { inherit inputs; };
}
(mkModule extra-modules domain system inputs stateVersion modules hostname)
];
};
# TODO: move this to a file or separate flake
mkHosts = mk:
let
hw = input-views.inputs-edge.nixos-hardware.nixosModules;
#vf = input-views.inputs-edge.nixos-vf2.nixosModules;
# nspawn = ls [ "${nixos-nspawn}/nspawn-image.nix" { boot.isContainer = true; } ];
p1005 = ./../hardware/printer/hp-laserjet-p1005.nix;
au = ./../profiles/auto-upgrade.nix;
ts1 = ./../profiles/tailscale-inner.nix;
ts2 = ./../profiles/tailscale-outer.nix;
tse = ./../profiles/tailscale-exit-node.nix;
#rb = ./../profiles/known-hosts; # TODO
nixld = ./../profiles/nix-ld.nix;
dns64 = { config, ... }: {
networking.nameservers = [ "2001:700:1:11::2:51" ]; # dns64.uninett.no
networking.networkmanager.enable = true;
networking.networkmanager.insertNameservers = config.networking.nameservers; # https://github.com/NixOS/nixpkgs/issues/61230
networking.resolvconf.enable = false;
};
in builtins.mapAttrs (hostname: curried: curried hostname) {
#hostname "domain" "system" inputs "state" [ modules ... ]
# asgaut = mk "pbsds.net" "riscv64-linux" input-views.inputs-2405 "24.05" [ hw.starfive-visionfive-2 ];
# noximilien = mk "pbsds.net" "x86_64-linux" input-views.inputs-250T "24.11" [ ts1 au tse ];
noximilien = mk "pbsds.net" "x86_64-linux" input-views.inputs-241T "24.11" [ ts1 au tse ];
nord = mk "pbsds.net" "x86_64-linux" input-views.inputs-2505 "24.11" [ ts1 au ];
sopp = mk "pbsds.net" "x86_64-linux" input-views.inputs-edge "24.11" [ ts1 au nixld p1005 ];
bjarte = mk "pbsds.net" "x86_64-linux" input-views.inputs-edge "24.11" [ ts1 nixld ];
bolle = mk "pbsds.net" "x86_64-linux" input-views.inputs-edge "24.11" [ ts2 au tse ];
eple = mk "pbsds.net" "x86_64-linux" input-views.inputs-2505 "24.11" [ ts1 au tse dns64 ];
garp = mk "pbsds.net" "x86_64-linux" input-views.inputs-2505 "24.11" [ ts2 au ];
# hasselknippe= mk "pbsds.net" "aarch64-linux" input-views.inputs-2405 "24.05" [ ts1 hw.pine64-pinebook-pro ];
# alsaug gomperud smattkuken skrytebiffen skalkesnerken kelfrid balleby bingus skjrlaltatjlstad
# bergjlot snortheimsmoen ditlefsen skrukkerud podebusk zmaragd makrell alfnes blix urke pytte uddu imdorf rosenqvist
};
in
rec {
nixosModules = mkHosts (mkModule []);
nixosConfigurations = mkHosts (mkConfig []);
nixosReports = builtins.mapAttrs (key: self.lib.mkNixosConfigSummary) nixosConfigurations;
# system-manager
systemConfigs = let
mkSystem = name: inputs: system: inputs.system-manager-edge.lib.makeSystemConfig {
extraSpecialArgs = {
inherit inputs;
inherit system; # TODO: find an alternative
};
modules = [
{ nixpkgs.hostPlatform = system; }
{ system-manager.allowAnyDistro = true; }
inputs.nix-system-graphics-edge.systemModules.default
./system-manager/${name}/system-configuration.nix
];
};
in {
FuriPhoneFLX1 = mkSystem "furiphoneflx1" input-views.inputs-edge "aarch64-linux";
test = mkSystem "furiphoneflx1" input-views.inputs-edge "x86_64-linux";
};
# https://github.com/nix-community/nix-on-droid
nixOnDroidConfigurations = {
zenfone = inputs-edge.nix-on-droid-edge.lib.nixOnDroidConfiguration {
pkgs = import inputs-edge.nixpkgs-edge { system = "aarch64-linux"; };
modules = [ ./nix-on-droid.nix ];
};
};
images = {};
/** /
images =
let
mk-nspawn-setup =
hostname: # TODO: nspawn-tarball.nix populates /etc/nixos with junk
(pkgs.callPackage ./../pkgs/mk-nspawn-setup { })
(mkHosts (mkConfig [ "${nixos-nspawn}/nspawn-tarball.nix" ])).${hostname};
in
{
asgaut-sd =
(mkHosts (mkConfig [
"${nixos-hardware}/starfive/visionfive/v2/sd-image.nix"
{
nixpkgs.buildPlatform.system = system; # cross
sdImage.compressImage = false;
}
])).asgaut.config.system.build.sdImage;
#brumlebasse-nspawn-setup = mk-nspawn-setup "brumlebasse";
#brumlebasse-openstack = nixos-generators-2405.nixosGenerate {
# system = "x86_64-linux";
# specialArgs = { inherit inputs; };
# modules = [ (mkHosts (mkModule [])).brumlebasse ];
# format = "openstack";
#};
};
/*
*/
}