--wip-- [skip ci]

This commit is contained in:
Filippo Berto 2022-12-12 21:25:26 +01:00
parent ff279d92ad
commit df9e409448
8 changed files with 276 additions and 196 deletions

323
flake.nix
View file

@ -4,7 +4,6 @@
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/release-22.11";
nixpkgs-u.url = "github:NixOS/nixpkgs/nixos-unstable";
home-manager = {
url = "github:nix-community/home-manager/release-22.05";
inputs.nixpkgs.follows = "nixpkgs";
@ -13,39 +12,28 @@
# url = "github:nix-community/home-manager";
# inputs.nixpkgs.follows = "nixpkgs-u";
# };
deploy-rs.url = "github:serokell/deploy-rs";
flake-utils.url = "github:numtide/flake-utils";
# nixos-generators.url = "github:nix-community/nixos-generators";
nixos-hardware.url = "github:NixOS/nixos-hardware";
nix-rice = {
url = "github:bertof/nix-rice";
inputs = { nixpkgs.follows = "nixpkgs-u"; flake-utils.follows = "flake-utils"; };
};
pre-commit-hooks = {
url = "github:cachix/pre-commit-hooks.nix";
inputs = { nixpkgs.follows = "nixpkgs-u"; flake-utils.follows = "flake-utils"; };
};
tex2nix = {
url = "github:Mic92/tex2nix";
inputs = { nixpkgs.follows = "nixpkgs-u"; flake-utils.follows = "flake-utils"; };
};
nix-rice = { url = "github:bertof/nix-rice"; inputs = { nixpkgs.follows = "nixpkgs"; flake-utils.follows = "flake-utils"; }; };
pre-commit-hooks = { url = "github:cachix/pre-commit-hooks.nix"; inputs.nixpkgs.follows = "nixpkgs"; inputs.flake-utils.follows = "flake-utils"; };
};
outputs =
{ self
, nixpkgs
, home-manager
, nixpkgs-u
# , home-manager-u
, home-manager
, deploy-rs
, flake-utils
# , nixos-generators
, nixos-hardware
, tex2nix
, nix-rice
, pre-commit-hooks
}:
let
defaultConfig = {
config = {
allowUnfree = true;
extraOptions = "experimental-features = nix-command flakes";
permittedInsecurePackages = [
@ -54,19 +42,17 @@
];
};
overlaysBuilder = { system }: [
overlays = [
# Packages
(_: _: { stable = pkgs { inherit system; }; unstable = pkgs-u { inherit system; }; })
# (_: _: { stable = import nixpkgs { inherit config overlays; }; unstable = import nixpkgs-u { inherit config overlays; }; })
# Nix rice
(nix-rice.overlays.default)
nix-rice.overlays.default
(import ./rice.nix)
# Flakes packages
(final: _: {
inherit (tex2nix.packages.${system}) tex2nix;
clipedit = final.callPackage ./custom/clipedit { };
update-background = final.callPackage ./custom/update-background {
backgrounds_directory = "$HOME/Immagini/Sfondi/1080+/1440+";
};
@ -80,160 +66,167 @@
})
];
modulesBuilder = { system, config ? defaultConfig }:
let overlays = overlaysBuilder { inherit system; }; in
[
# Nix configuration
({ pkgs, ... }: {
nixpkgs = { inherit system overlays config; };
nix = {
package = pkgs.nixVersions.stable;
extraOptions = "experimental-features = nix-command flakes";
basic = with flake-utils.lib; eachDefaultSystem (system:
let pkgs = import nixpkgs-u { inherit system config overlays; }; in
{
formatter = pkgs.nixpkgs-fmt;
checks = {
pre-commit-check = pre-commit-hooks.lib.${system}.run {
src = ./.;
hooks = { nixpkgs-fmt.enable = true; nix-linter.enable = true; };
};
})
};
# Home manager configuration
home-manager.nixosModules.home-manager
({ home-manager = { useGlobalPkgs = true; useUserPackages = true; }; })
devShells.default = pkgs.mkShell {
buildInputs = with pkgs; [
deploy-rs.packages.${system}.deploy-rs
];
shellHook = ''
${self.checks.${system}.pre-commit-check.shellHook}
'';
};
});
# Common modules
./nixos_modules/bertof_user.nix
./nixos_modules/automatic-garbage-collection.nix
./nixos_modules/automatic-upgrade.nix
./nixos_modules/zerotier.nix
];
commonModules = [
# Nix configuration
({ pkgs, ... }: {
nixpkgs = { inherit overlays config; };
nix = {
package = pkgs.nixVersions.stable;
extraOptions = "experimental-features = nix-command flakes";
# registry = {
# stable = {
# from = {
# # id = "stable";
# type = "indirect";
# };
# flake = nixpkgs;
# to = { owner = "nixos"; repo = "nixpkgs"; type = "github"; };
# };
# };
};
})
pkgs = { system, config ? defaultConfig }:
let overlays = overlaysBuilder { inherit system; }; in
import nixpkgs { inherit system config overlays; };
pkgs-u = { system, config ? defaultConfig }:
let overlays = overlaysBuilder { inherit system; }; in
import nixpkgs-u { inherit system config overlays; };
# Home manager configuration
home-manager.nixosModules.home-manager
{ home-manager = { useGlobalPkgs = true; useUserPackages = true; }; }
odinBaseModules = [
./odin/hardware-configuration.nix
nixos-hardware.nixosModules.common-cpu-intel
nixos-hardware.nixosModules.common-pc-laptop
nixos-hardware.nixosModules.common-pc-laptop-ssd
./odin/common_configuration.nix
./nixos_modules/pro_audio.nix
./nixos_modules/sesar.nix
./nixos_modules/bertof_user.nix
./nixos_modules/automatic-garbage-collection.nix
./nixos_modules/automatic-upgrade.nix
./nixos_modules/zerotier.nix
];
odinIntelModules = [ ./odin/configuration-intel.nix ];
odinNvidiaModules = [ ./odin/configuration-nvidia.nix ];
odinIntelBuilder = { extraModules ? [ ] }:
nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
modules = (modulesBuilder { inherit system; })
++ odinBaseModules ++ odinIntelModules
++ [{ home-manager.users.bertof = import ./odin/hm.nix; }]
++ extraModules;
};
odinNvidiaBuilder = { extraModules ? [ ] }:
nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
modules = (modulesBuilder { inherit system; config = defaultConfig // { cudaSupport = true; }; })
++ odinBaseModules ++ odinNvidiaModules
++ [{ home-manager.users.bertof = import ./odin/hm.nix; }]
++ extraModules;
};
thorConfig = {
nixosConfigurations = {
thor = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
modules = commonModules ++ [
{ nixpkgs.config = config // { cudaSupport = true; }; }
./thor/hardware-configuration.nix
nixos-hardware.nixosModules.common-cpu-amd
nixos-hardware.nixosModules.common-pc-ssd
./thor/configuration.nix
thorBaseModules = [
./thor/hardware-configuration.nix
nixos-hardware.nixosModules.common-cpu-amd
nixos-hardware.nixosModules.common-pc-ssd
./thor/configuration.nix
./nixos_modules/pro_audio.nix
./nixos_modules/sesar.nix
./nixos_modules/pentablet.nix
./nixos_modules/pro_audio.nix
./nixos_modules/sesar.nix
./nixos_modules/pentablet.nix
];
thorBuilder = { extraModules ? [ ] }:
nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
modules = (modulesBuilder { inherit system; config = defaultConfig // { cudaSupport = true; }; })
++ thorBaseModules
++ [{ home-manager.users.bertof = import ./thor/hm.nix; }]
++ extraModules;
};
lokiBaseModules = [
./loki/hardware-configuration.nix
nixos-hardware.nixosModules.common-cpu-intel
nixos-hardware.nixosModules.common-pc-ssd
./loki/configuration.nix
];
lokiBuilder = { extraModules ? [ ] }:
nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
modules = (modulesBuilder { inherit system; })
++ lokiBaseModules
++ [{ home-manager.users.bertof = import ./loki/hm.nix; }]
++ extraModules;
};
freyaBaseModules = [
# ./freya/hardware-configuration.nix
nixos-hardware.nixosModules.raspberry-pi."4"
./freya/configuration.nix
];
freyaBuilder = { extraModules ? [ ] }:
nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
modules = (modulesBuilder { inherit system; })
++ freyaBaseModules
++ [{ home-manager.users.bertof = import ./freya/hm.nix; }]
++ extraModules;
};
baldurBaseModules = [ ./baldur/configuration.nix ];
balurBuilder = { extraModules ? [ ] }:
nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
modules = (modulesBuilder { inherit system; })
++ baldurBaseModules
++ [{ home-manager.users.bertof = import ./baldur/hm.nix; }]
++ extraModules;
};
in
(flake-utils.lib.eachDefaultSystem (system: rec {
packages = pkgs-u { inherit system; };
formatter = (pkgs-u { inherit system; }).nixpkgs-fmt;
checks = {
pre-commit-check = pre-commit-hooks.lib.${system}.run {
src = ./.;
hooks = {
nixpkgs-fmt.enable = true;
nix-linter.enable = true;
{ home-manager.users.bertof = import ./thor/hm.nix; }
];
};
};
};
devShells.default = packages.mkShell {
shellHook = ''
${self.checks.${system}.pre-commit-check.shellHook}
'';
odinConfig = {
nixosConfigurations =
let
odinCommonModules = [
nixos-hardware.nixosModules.common-cpu-intel
nixos-hardware.nixosModules.common-pc-laptop
nixos-hardware.nixosModules.common-pc-laptop-ssd
./odin/hardware-configuration.nix
./odin/common_configuration.nix
./nixos_modules/pro_audio.nix
./nixos_modules/sesar.nix
./nixos_modules/pentablet.nix
{ home-manager.users.bertof = import ./odin/hm.nix; }
];
in
rec {
odin-nvidia = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
modules = commonModules ++ odinCommonModules ++ [
{ nixpkgs.config = config // { cudaSupport = true; }; }
./odin/configuration-nvidia.nix
];
};
odin-intel = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
modules = commonModules ++ odinCommonModules ++ [
./odin/configuration-intel.nix
];
};
odin = odin-intel;
};
};
})) // {
nixosConfigurations = rec {
thor = thorBuilder { };
odin = odin-intel;
odin-intel = odinIntelBuilder { };
odin-nvidia = odinNvidiaBuilder { };
loki = lokiBuilder { };
# loki-stable = lokiStable [ ./nixos_modules/dnsmasq.nix ];
# loki-k3s = lokiStable [ ./nixos_modules/k3s.nix ];
# loki-unstable = lokiUnstable [ ];
freya = freyaBuilder { };
baldur = balurBuilder { };
freyaConfig = {
nixosConfigurations = rec {
freya = nixpkgs.lib.nixosSystem rec {
system = "aarch64-linux";
modules = commonModules ++ [
nixos-hardware.nixosModules.raspberry-pi."4"
./freya/hardware-configuration.nix
./freya/configuration.nix
{ home-manager.users.bertof = import ./freya/hm.nix; }
];
};
};
};
};
baldurConfig = {
nixosConfigurations = rec {
baldur = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
modules = commonModules ++ [
# nixos-hardware.nixosModules.common-cpu-amd
# nixos-hardware.nixosModules.common-pc-ssd
./baldur/hardware-configuration.nix
./baldur/configuration.nix
{ home-manager.users.bertof = import ./baldur/hm.nix; }
];
};
};
};
lokiConfig = {
nixosConfigurations = rec {
loki = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
modules = commonModules ++ [
nixos-hardware.nixosModules.common-cpu-intel
nixos-hardware.nixosModules.common-pc-ssd
./loki/hardware-configuration.nix
./loki/configuration.nix
{ home-manager.users.bertof = import ./loki/hm.nix; }
];
};
};
};
in
builtins.foldl' nixpkgs.lib.recursiveUpdate { } [
basic
thorConfig
odinConfig
freyaConfig
baldurConfig
lokiConfig
];
}