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

138 lines
6.1 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
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
];
# 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;
config = final.pkgs.config;
};
})
];
# 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 = [
# TODO: specify this in mkModule?
{
nixpkgs.hostPlatform = system;
#nixpkgs.buildPlatform = system;
}
(mkModule extra-modules domain system inputs stateVersion modules hostname)
];
};
# TODO: move this to a file or separate flake
mkHosts = mk: let
ls = imports: { inherit imports; };
hw = input-views.inputs-edge.nixos-hardware.nixosModules;
#vf = input-views.inputs-edge.nixos-vf2.nixosModules;
amd = ls [ hw.common-pc hw.common-pc-ssd hw.common-cpu-amd ];
intel = ls [ hw.common-pc hw.common-pc-ssd hw.common-cpu-intel ./../hardware/gpu/intel.nix ];
intel-novga = ls [ hw.common-pc hw.common-pc-ssd hw.common-cpu-intel-cpu-only ];
cuda = ls [ ./../hardware/gpu/cuda.nix hw.common-gpu-nvidia-nonprime ];
cuda-prime = ls [ ./../hardware/gpu/cuda.nix hw.common-gpu-nvidia ];
rocm = ls [ ./../hardware/gpu/rocm.nix hw.common-gpu-amd ];
# nspawn = ls [ "${nixos-nspawn}/nspawn-image.nix" { boot.isContainer = true; } ];
hidpi = ls [ hw.common-hidpi ./../profiles/hidpi.nix ];
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" [ au ts1 tse intel ];
noximilien = mk "pbsds.net" "x86_64-linux" input-views.inputs-241T "24.11" [ au ts1 tse intel ];
nord = mk "pbsds.net" "x86_64-linux" input-views.inputs-2411 "24.11" [ au ts1 intel-novga hw.common-gpu-intel-sandy-bridge rocm hidpi ];
sopp = mk "pbsds.net" "x86_64-linux" input-views.inputs-edge "24.11" [ au ts1 nixld intel cuda p1005 ];
bjarte = mk "pbsds.net" "x86_64-linux" input-views.inputs-edge "24.11" [ ts1 nixld intel hw.lenovo-thinkpad-x1-7th-gen ];
bolle = mk "pbsds.net" "x86_64-linux" input-views.inputs-2505 "24.11" [ au ts2 intel ];
eple = mk "pbsds.net" "x86_64-linux" input-views.inputs-2505 "24.11" [ au ts1 tse dns64 intel rocm ];
garp = mk "pbsds.net" "x86_64-linux" input-views.inputs-2505 "24.11" [ au ts2 intel-novga cuda ];
# hasselknippe= mk "pbsds.net" "aarch64-linux" input-views.inputs-2405 "24.05" [ ts1 hw.pine64-pinebook-pro ];
#gomperud smattkuken skrytebiffen skalkesnerken 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;
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";
#};
};
*/
}