feat!: switch to full flake-parts
7157
SwarselSystems.org
|
|
@ -1,39 +0,0 @@
|
|||
{ self, inputs, pkgs, system, ... }:
|
||||
{
|
||||
pre-commit-check = inputs.pre-commit-hooks.lib.${system}.run {
|
||||
src = "${self}";
|
||||
hooks = {
|
||||
check-added-large-files.enable = true;
|
||||
check-case-conflicts.enable = true;
|
||||
check-executables-have-shebangs.enable = true;
|
||||
check-shebang-scripts-are-executable.enable = false;
|
||||
check-merge-conflicts.enable = true;
|
||||
deadnix.enable = true;
|
||||
detect-private-keys.enable = true;
|
||||
end-of-file-fixer.enable = true;
|
||||
fix-byte-order-marker.enable = true;
|
||||
flake-checker.enable = true;
|
||||
forbid-new-submodules.enable = true;
|
||||
mixed-line-endings.enable = true;
|
||||
nixpkgs-fmt.enable = true;
|
||||
statix.enable = true;
|
||||
trim-trailing-whitespace.enable = true;
|
||||
|
||||
destroyed-symlinks = {
|
||||
enable = true;
|
||||
entry = "${inputs.pre-commit-hooks.checks.${system}.pre-commit-hooks}/bin/destroyed-symlinks";
|
||||
};
|
||||
|
||||
shellcheck = {
|
||||
enable = true;
|
||||
entry = "${pkgs.shellcheck}/bin/shellcheck --shell=bash";
|
||||
};
|
||||
|
||||
shfmt = {
|
||||
enable = true;
|
||||
entry = "${pkgs.shfmt}/bin/shfmt -i 4 -sr -d -s -l";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
}
|
||||
23
flake.lock
generated
|
|
@ -98,6 +98,26 @@
|
|||
}
|
||||
},
|
||||
"devshell": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1741473158,
|
||||
"narHash": "sha256-kWNaq6wQUbUMlPgw8Y+9/9wP0F8SHkjy24/mN3UAppg=",
|
||||
"owner": "numtide",
|
||||
"repo": "devshell",
|
||||
"rev": "7c9e793ebe66bcba8292989a68c0419b737a22a0",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "devshell",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"devshell_2": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nix-topology",
|
||||
|
|
@ -836,7 +856,7 @@
|
|||
},
|
||||
"nix-topology": {
|
||||
"inputs": {
|
||||
"devshell": "devshell",
|
||||
"devshell": "devshell_2",
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs_3",
|
||||
"pre-commit-hooks": "pre-commit-hooks"
|
||||
|
|
@ -1420,6 +1440,7 @@
|
|||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"devshell": "devshell",
|
||||
"disko": "disko",
|
||||
"emacs-overlay": "emacs-overlay",
|
||||
"flake-parts": "flake-parts",
|
||||
|
|
|
|||
200
flake.nix
|
|
@ -12,7 +12,6 @@
|
|||
];
|
||||
};
|
||||
inputs = {
|
||||
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||
nixpkgs-kernel.url = "github:NixOS/nixpkgs/063f43f2dbdef86376cc29ad646c45c46e93234c?narHash=sha256-6m1Y3/4pVw1RWTsrkAK2VMYSzG4MMIj7sqUy7o8th1o%3D"; #specifically pinned for kernel version
|
||||
nixpkgs-stable.url = "github:NixOS/nixpkgs/nixos-25.05";
|
||||
|
|
@ -84,196 +83,27 @@
|
|||
};
|
||||
nix-topology.url = "github:oddlama/nix-topology";
|
||||
flake-parts.url = "github:hercules-ci/flake-parts";
|
||||
devshell = {
|
||||
url = "github:numtide/devshell";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
};
|
||||
outputs =
|
||||
inputs@{ self
|
||||
, nixpkgs
|
||||
, home-manager
|
||||
, systems
|
||||
, ...
|
||||
}:
|
||||
let
|
||||
|
||||
inherit (self) outputs;
|
||||
lib = (nixpkgs.lib // home-manager.lib).extend (_: _: { swarselsystems = import ./lib { inherit self lib inputs outputs systems; }; });
|
||||
|
||||
in
|
||||
inputs:
|
||||
inputs.flake-parts.lib.mkFlake { inherit inputs; } {
|
||||
imports = [
|
||||
./nix/globals.nix
|
||||
./nix/hosts.nix
|
||||
./nix/topology.nix
|
||||
./nix/devshell.nix
|
||||
./nix/apps.nix
|
||||
./nix/packages.nix
|
||||
./nix/overlays.nix
|
||||
./nix/lib.nix
|
||||
./nix/templates.nix
|
||||
./nix/formatter.nix
|
||||
./nix/modules.nix
|
||||
];
|
||||
flake = { config, ... }:
|
||||
let
|
||||
|
||||
inherit (self) outputs;
|
||||
lib = (nixpkgs.lib // home-manager.lib).extend (_: _: { swarselsystems = import ./lib { inherit self lib inputs outputs systems; }; });
|
||||
|
||||
|
||||
linuxUser = "swarsel";
|
||||
macUser = "leon.schwarzaeugl";
|
||||
|
||||
mkFullHost = host: type: {
|
||||
${host} =
|
||||
let
|
||||
systemFunc = if (type == "nixos") then lib.nixosSystem else inputs.nix-darwin.lib.darwinSystem;
|
||||
in
|
||||
systemFunc {
|
||||
specialArgs = { inherit inputs outputs lib self; inherit (config) globals; };
|
||||
modules = [
|
||||
{
|
||||
node.name = host;
|
||||
node.secretsDir = ./hosts/${type}/${host}/secrets;
|
||||
}
|
||||
# put inports here that are for all hosts
|
||||
inputs.disko.nixosModules.disko
|
||||
inputs.sops-nix.nixosModules.sops
|
||||
inputs.impermanence.nixosModules.impermanence
|
||||
inputs.lanzaboote.nixosModules.lanzaboote
|
||||
inputs.fw-fanctrl.nixosModules.default
|
||||
inputs.nix-topology.nixosModules.default
|
||||
inputs.home-manager.nixosModules.home-manager
|
||||
"${self}/hosts/${type}/${host}"
|
||||
{
|
||||
_module.args.primaryUser = linuxUser;
|
||||
}
|
||||
] ++
|
||||
(if (host == "iso") then [
|
||||
] else
|
||||
([
|
||||
# put nixos imports here that are for all servers and normal hosts
|
||||
"${self}/modules/nixos"
|
||||
inputs.stylix.nixosModules.stylix
|
||||
inputs.nswitch-rcm-nix.nixosModules.nswitch-rcm
|
||||
] ++ (if (type == "nixos") then [
|
||||
"${self}/profiles/nixos"
|
||||
{
|
||||
home-manager.users."${linuxUser}".imports = [
|
||||
# put home-manager imports here that are for all normal hosts
|
||||
"${self}/profiles/home"
|
||||
"${self}/modules/home"
|
||||
];
|
||||
}
|
||||
] else [
|
||||
# put nixos imports here that are for darwin hosts
|
||||
"${self}/modules/nixos/darwin"
|
||||
"${self}/profiles/nixos"
|
||||
inputs.home-manager.darwinModules.home-manager
|
||||
{
|
||||
home-manager.users."${macUser}".imports = [
|
||||
# put home-manager imports here that are for darwin hosts
|
||||
"${self}/modules/home/darwin"
|
||||
"${self}/profiles/home"
|
||||
];
|
||||
}
|
||||
])
|
||||
));
|
||||
};
|
||||
};
|
||||
|
||||
mkHalfHost = host: type: pkgs: {
|
||||
${host} =
|
||||
let
|
||||
systemFunc = if (type == "home") then inputs.home-manager.lib.homeManagerConfiguration else inputs.nix-on-droid.lib.nixOnDroidConfiguration;
|
||||
in
|
||||
systemFunc
|
||||
{
|
||||
inherit pkgs;
|
||||
extraSpecialArgs = { inherit inputs outputs lib self; };
|
||||
modules = [ "${self}/hosts/${type}/${host}" ];
|
||||
};
|
||||
};
|
||||
|
||||
mkFullHostConfigs = hosts: type: lib.foldl (acc: set: acc // set) { } (lib.map (host: mkFullHost host type) hosts);
|
||||
|
||||
mkHalfHostConfigs = hosts: type: pkgs: lib.foldl (acc: set: acc // set) { } (lib.map (host: mkHalfHost host type pkgs) hosts);
|
||||
|
||||
in
|
||||
{
|
||||
inherit lib;
|
||||
|
||||
# nixosModules = import ./modules/nixos { inherit lib; };
|
||||
# homeModules = import ./modules/home { inherit lib; };
|
||||
packages = lib.swarselsystems.forEachLinuxSystem (pkgs: import ./pkgs { inherit lib pkgs; });
|
||||
formatter = lib.swarselsystems.forEachSystem (pkgs: pkgs.nixpkgs-fmt);
|
||||
overlays = import ./overlays { inherit self lib inputs; };
|
||||
|
||||
apps = lib.swarselsystems.forAllSystems (system:
|
||||
let
|
||||
appNames = [
|
||||
"swarsel-bootstrap"
|
||||
"swarsel-install"
|
||||
"swarsel-rebuild"
|
||||
"swarsel-postinstall"
|
||||
];
|
||||
appSet = lib.swarselsystems.mkApps system appNames self;
|
||||
in
|
||||
|
||||
appSet // {
|
||||
default = appSet.swarsel-bootstrap;
|
||||
}
|
||||
);
|
||||
|
||||
devShells = lib.swarselsystems.forAllSystems (system:
|
||||
let
|
||||
pkgs = lib.swarselsystems.pkgsFor.${system};
|
||||
checks = self.checks.${system};
|
||||
in
|
||||
{
|
||||
default = pkgs.mkShell {
|
||||
# plugin-files = ${pkgs.nix-plugins.overrideAttrs (o: {
|
||||
# buildInputs = [pkgs.nixVersions.latest pkgs.boost];
|
||||
# patches = (o.patches or []) ++ [ "${self}/nix/nix-plugins.patch" ];
|
||||
# })}/lib/nix/plugins
|
||||
NIX_CONFIG = ''
|
||||
plugin-files = ${pkgs.nix-plugins}/lib/nix/plugins
|
||||
extra-builtins-file = ${self + /nix/extra-builtins.nix}
|
||||
'';
|
||||
inherit (checks.pre-commit-check) shellHook;
|
||||
|
||||
buildInputs = checks.pre-commit-check.enabledPackages;
|
||||
nativeBuildInputs = [
|
||||
(builtins.trace "alarm: we pinned nix_2_24 because of https://github.com/shlevy/nix-plugins/issues/20" pkgs.nixVersions.nix_2_24) # Always use the nix version from this flake's nixpkgs version, so that nix-plugins (below) doesn't fail because of different nix versions.
|
||||
# pkgs.nix
|
||||
pkgs.home-manager
|
||||
pkgs.git
|
||||
pkgs.just
|
||||
pkgs.age
|
||||
pkgs.ssh-to-age
|
||||
pkgs.sops
|
||||
pkgs.statix
|
||||
pkgs.deadnix
|
||||
pkgs.nixpkgs-fmt
|
||||
];
|
||||
};
|
||||
}
|
||||
);
|
||||
|
||||
templates = import ./templates { inherit lib; };
|
||||
|
||||
checks = lib.swarselsystems.forAllSystems (system:
|
||||
let
|
||||
pkgs = lib.swarselsystems.pkgsFor.${system};
|
||||
in
|
||||
import ./checks { inherit self inputs system pkgs; }
|
||||
);
|
||||
|
||||
diskoConfigurations.default = import .templates/hosts/nixos/disk-config.nix;
|
||||
|
||||
nixosConfigurations = mkFullHostConfigs (lib.swarselsystems.readHosts "nixos") "nixos";
|
||||
homeConfigurations = mkHalfHostConfigs (lib.swarselsystems.readHosts "home") "home" lib.swarselsystems.pkgsFor.x86_64-linux;
|
||||
darwinConfigurations = mkFullHostConfigs (lib.swarselsystems.readHosts "darwin") "darwin";
|
||||
nixOnDroidConfigurations = mkHalfHostConfigs (lib.swarselsystems.readHosts "android") "android" lib.swarselsystems.pkgsFor.aarch64-linux;
|
||||
|
||||
topology = lib.swarselsystems.forEachSystem (pkgs: import inputs.nix-topology {
|
||||
inherit pkgs;
|
||||
modules = [
|
||||
"${self}/topology"
|
||||
{ inherit (self) nixosConfigurations; }
|
||||
];
|
||||
});
|
||||
|
||||
nodes = config.nixosConfigurations;
|
||||
};
|
||||
systems = [
|
||||
"x86_64-linux"
|
||||
"aarch64-linux"
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
{ lib, ... }:
|
||||
{ lib, config, ... }:
|
||||
let
|
||||
inherit (config.repo.secrets.local) workUser;
|
||||
in
|
||||
|
|
|
|||
|
|
@ -1,12 +1,11 @@
|
|||
{ self, outputs, config, ... }:
|
||||
{ self, inputs, outputs, ... }:
|
||||
{
|
||||
|
||||
imports = [
|
||||
inputs.stylix.homeManagerModules.stylix
|
||||
inputs.sops-nix.homeManagerModules.sops
|
||||
inputs.nix-index-database.hmModules.nix-index
|
||||
./modules/home/common
|
||||
"${self}/modules/home/common/sharedsetup.nix"
|
||||
"${self}/modules/home"
|
||||
];
|
||||
|
||||
nixpkgs = {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
{ self, inputs, config, pkgs, lib, primaryUser, ... }:
|
||||
{ self, inputs, config, pkgs, lib, ... }:
|
||||
let
|
||||
mainUser = "demo";
|
||||
sharedOptions = {
|
||||
inherit mainUser;
|
||||
isBtrfs = false;
|
||||
isLinux = true;
|
||||
isPublic = true;
|
||||
|
|
@ -20,7 +22,7 @@ in
|
|||
"${self}/hosts/nixos/chaostheatre/options.nix"
|
||||
inputs.home-manager.nixosModules.home-manager
|
||||
{
|
||||
home-manager.users."${primaryUser}".imports = [
|
||||
home-manager.users."${mainUser}".imports = [
|
||||
"${self}/modules/home/common/settings.nix"
|
||||
"${self}/hosts/nixos/chaostheatre/options-home.nix"
|
||||
"${self}/modules/home/common/sharedsetup.nix"
|
||||
|
|
@ -59,7 +61,7 @@ in
|
|||
}
|
||||
sharedOptions;
|
||||
|
||||
home-manager.users."${primaryUser}" = {
|
||||
home-manager.users.${mainUser} = {
|
||||
home.stateVersion = lib.mkForce "23.05";
|
||||
swarselsystems = lib.recursiveUpdate
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
{ lib, config, primaryUser, ... }:
|
||||
{ lib, config, globals, ... }:
|
||||
let
|
||||
primaryUser = globals.user.name;
|
||||
inherit (config.repo.secrets.common) workHostName;
|
||||
inherit (config.repo.secrets.local.syncthing) dev1 dev2 dev3 loc1;
|
||||
serviceDomain = config.repo.secrets.common.services.domains.syncthing3;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
{ self, config, inputs, lib, primaryUser, ... }:
|
||||
{ self, config, inputs, lib, globals, ... }:
|
||||
let
|
||||
primaryUser = globals.user.name;
|
||||
sharedOptions = {
|
||||
isBtrfs = true;
|
||||
isLinux = true;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
{ lib, config, primaryUser, ... }:
|
||||
{ lib, config, globals, ... }:
|
||||
let
|
||||
primaryUser = globals.user.name;
|
||||
sharedOptions = {
|
||||
isBtrfs = false;
|
||||
isLinux = true;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
{ self, inputs, pkgs, lib, primaryUser, ... }:
|
||||
{ self, inputs, pkgs, lib, ... }:
|
||||
let
|
||||
modulesPath = "${self}/modules";
|
||||
sharedOptions = {
|
||||
|
|
@ -21,7 +21,7 @@ in
|
|||
|
||||
inputs.home-manager.nixosModules.home-manager
|
||||
{
|
||||
home-manager.users."${primaryUser}".imports = [
|
||||
home-manager.users."setup".imports = [
|
||||
inputs.sops-nix.homeManagerModules.sops
|
||||
"${modulesPath}/home/common/sharedsetup.nix"
|
||||
"${self}/profiles/home"
|
||||
|
|
@ -70,7 +70,7 @@ in
|
|||
}
|
||||
sharedOptions;
|
||||
|
||||
home-manager.users."${primaryUser}" = {
|
||||
home-manager.users."setup" = {
|
||||
home.stateVersion = lib.mkForce "23.05";
|
||||
swarselsystems = lib.recursiveUpdate
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
{ lib, config, primaryUser, ... }:
|
||||
{ lib, config, globals, ... }:
|
||||
let
|
||||
primaryUser = globals.user.name;
|
||||
sharedOptions = {
|
||||
isBtrfs = false;
|
||||
isLinux = true;
|
||||
|
|
|
|||
120
lib/default.nix
|
|
@ -1,120 +0,0 @@
|
|||
{ self, lib, systems, inputs, ... }:
|
||||
{
|
||||
|
||||
mkIfElseList = p: yes: no: lib.mkMerge [
|
||||
(lib.mkIf p yes)
|
||||
(lib.mkIf (!p) no)
|
||||
];
|
||||
|
||||
mkIfElse = p: yes: no: if p then yes else no;
|
||||
|
||||
forAllSystems = lib.genAttrs [
|
||||
"x86_64-linux"
|
||||
"aarch64-linux"
|
||||
"x86_64-darwin"
|
||||
"aarch64-darwin"
|
||||
];
|
||||
|
||||
pkgsFor = lib.genAttrs (import systems) (system:
|
||||
import inputs.nixpkgs {
|
||||
inherit system;
|
||||
overlays = [ self.overlays.default ];
|
||||
config.allowUnfree = true;
|
||||
}
|
||||
);
|
||||
|
||||
toCapitalized = str:
|
||||
if builtins.stringLength str == 0 then
|
||||
""
|
||||
else
|
||||
let
|
||||
first = builtins.substring 0 1 str;
|
||||
rest = builtins.substring 1 (builtins.stringLength str - 1) str;
|
||||
upper = lib.toUpper first;
|
||||
lower = lib.toLower rest;
|
||||
in
|
||||
upper + lower;
|
||||
|
||||
|
||||
# mkUser = name: {
|
||||
# config.users.users.${name} = {
|
||||
# group = name;
|
||||
# isSystemUser = true;
|
||||
# };
|
||||
|
||||
# config.users.groups.${name} = {};
|
||||
# };
|
||||
|
||||
mkTrueOption = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
};
|
||||
|
||||
mkStrong = lib.mkOverride 60;
|
||||
|
||||
getSecret = filename: lib.strings.trim (builtins.readFile "${filename}");
|
||||
|
||||
forEachSystem = f: lib.genAttrs (import systems) (system: f lib.swarselsystems.pkgsFor.${system});
|
||||
forEachLinuxSystem = f: lib.genAttrs [ "x86_64-linux" "aarch64-linux" ] (system: f lib.swarselsystems.pkgsFor.${system});
|
||||
|
||||
readHosts = type: lib.attrNames (builtins.readDir "${self}/hosts/${type}");
|
||||
readNix = type: lib.filter (name: name != "default.nix") (lib.attrNames (builtins.readDir "${self}/${type}"));
|
||||
|
||||
mkApps = system: names: self: builtins.listToAttrs (map
|
||||
(name: {
|
||||
inherit name;
|
||||
value = {
|
||||
type = "app";
|
||||
program = "${self.packages.${system}.${name}}/bin/${name}";
|
||||
meta = {
|
||||
description = "Custom app ${name}.";
|
||||
};
|
||||
};
|
||||
})
|
||||
names);
|
||||
|
||||
mkPackages = names: pkgs: builtins.listToAttrs (map
|
||||
(name: {
|
||||
inherit name;
|
||||
value = pkgs.callPackage "${self}/pkgs/${name}" { inherit self name; };
|
||||
})
|
||||
names);
|
||||
|
||||
|
||||
mkModules = names: type: builtins.listToAttrs (map
|
||||
(name: {
|
||||
inherit name;
|
||||
value = import "${self}/modules/${type}/${name}";
|
||||
})
|
||||
names);
|
||||
|
||||
mkProfiles = names: type: builtins.listToAttrs (map
|
||||
(name: {
|
||||
inherit name;
|
||||
value = import "${self}/profiles/${type}/${name}";
|
||||
})
|
||||
names);
|
||||
|
||||
mkTemplates = names: builtins.listToAttrs (map
|
||||
(name: {
|
||||
inherit name;
|
||||
value = {
|
||||
path = "${self}/templates/${name}";
|
||||
description = "${name} project ";
|
||||
};
|
||||
})
|
||||
names);
|
||||
|
||||
mkImports = names: baseDir: lib.map (name: "${self}/${baseDir}/${name}") names;
|
||||
|
||||
eachMonitor = _: monitor: {
|
||||
inherit (monitor) name;
|
||||
value = builtins.removeAttrs monitor [ "workspace" "name" "output" ];
|
||||
};
|
||||
|
||||
eachOutput = _: monitor: {
|
||||
inherit (monitor) name;
|
||||
value = builtins.removeAttrs monitor [ "mode" "name" "scale" "transform" "position" ];
|
||||
};
|
||||
|
||||
}
|
||||
|
|
@ -1,10 +1,7 @@
|
|||
{ self, ... }:
|
||||
let
|
||||
modulesPath = "${self}/modules";
|
||||
in
|
||||
{
|
||||
imports = [
|
||||
"${modulesPath}/home/common/settings.nix"
|
||||
"${modulesPath}/home/common/sharedsetup.nix"
|
||||
"${self}/modules/home/common/settings.nix"
|
||||
"${self}/modules/home/common/sharedsetup.nix"
|
||||
];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,10 @@
|
|||
{ lib, ... }:
|
||||
{ lib, inputs, ... }:
|
||||
let
|
||||
importNames = lib.swarselsystems.readNix "modules/nixos/client";
|
||||
in
|
||||
{
|
||||
imports = lib.swarselsystems.mkImports importNames "modules/nixos/client";
|
||||
imports = lib.swarselsystems.mkImports importNames "modules/nixos/client" ++ [
|
||||
inputs.stylix.nixosModules.stylix
|
||||
inputs.nswitch-rcm-nix.nixosModules.nswitch-rcm
|
||||
];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,6 +15,9 @@ in
|
|||
name = mkOption {
|
||||
type = types.str;
|
||||
};
|
||||
work = mkOption {
|
||||
type = types.str;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,12 +1,18 @@
|
|||
{ inputs, config, lib, outputs, globals, nodes, ... }:
|
||||
{ self, inputs, config, lib, outputs, globals, nodes, ... }:
|
||||
let
|
||||
mainUser = globals.user.name;
|
||||
in
|
||||
{
|
||||
|
||||
options.swarselsystems.modules.home-manager = lib.mkEnableOption "home-manager";
|
||||
config = lib.mkIf config.swarselsystems.modules.home-manager {
|
||||
home-manager = lib.mkIf config.swarselsystems.withHomeManager {
|
||||
useGlobalPkgs = true;
|
||||
useUserPackages = true;
|
||||
verbose = true;
|
||||
users."${mainUser}".imports = [
|
||||
"${self}/profiles/home"
|
||||
"${self}/modules/home"
|
||||
];
|
||||
sharedModules = [
|
||||
inputs.nix-index-database.hmModules.nix-index
|
||||
inputs.sops-nix.homeManagerModules.sops
|
||||
|
|
|
|||
|
|
@ -1,5 +1,10 @@
|
|||
{ lib, config, outputs, ... }:
|
||||
{ self, lib, config, outputs, globals, ... }:
|
||||
let
|
||||
macUser = globals.user.work;
|
||||
in
|
||||
{
|
||||
imports = [
|
||||
];
|
||||
|
||||
options.swarselsystems.modules.darwin.general = lib.mkEnableOption "darwin config";
|
||||
config = lib.mkIf config.swarselsystems.modules.darwin.general {
|
||||
|
|
@ -12,6 +17,10 @@
|
|||
};
|
||||
};
|
||||
|
||||
home-manager.users."${macUser}".imports = [
|
||||
"${self}/modules/home/darwin"
|
||||
];
|
||||
|
||||
system.stateVersion = 4;
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
{ lib, config, ... }:
|
||||
{ lib, config, inputs, ... }:
|
||||
{
|
||||
imports = [
|
||||
inputs.fw-fanctrl.nixosModules.default
|
||||
];
|
||||
options.swarselsystems.modules.optional.framework = lib.mkEnableOption "optional framework machine settings";
|
||||
config = lib.mkIf config.swarselsystems.modules.optional.framework {
|
||||
services = {
|
||||
|
|
|
|||
32
nix/apps.nix
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
{ self, ... }:
|
||||
{
|
||||
perSystem = { system, ... }:
|
||||
let
|
||||
mkApps = system: names: self: builtins.listToAttrs (map
|
||||
(name: {
|
||||
inherit name;
|
||||
value = {
|
||||
type = "app";
|
||||
program = "${self.packages.${system}.${name}}/bin/${name}";
|
||||
meta = {
|
||||
description = "Custom app ${name}.";
|
||||
};
|
||||
};
|
||||
})
|
||||
names);
|
||||
|
||||
appNames = [
|
||||
"swarsel-bootstrap"
|
||||
"swarsel-install"
|
||||
"swarsel-rebuild"
|
||||
"swarsel-postinstall"
|
||||
];
|
||||
|
||||
appSet = mkApps system appNames self;
|
||||
in
|
||||
{
|
||||
apps = appSet // {
|
||||
default = appSet.swarsel-bootstrap;
|
||||
};
|
||||
};
|
||||
}
|
||||
141
nix/devshell.nix
Normal file
|
|
@ -0,0 +1,141 @@
|
|||
{ self, inputs, ... }:
|
||||
{
|
||||
imports = [
|
||||
inputs.devshell.flakeModule
|
||||
inputs.pre-commit-hooks.flakeModule
|
||||
];
|
||||
|
||||
perSystem = { pkgs, system, ... }:
|
||||
{
|
||||
pre-commit = {
|
||||
check.enable = true;
|
||||
settings = {
|
||||
addGcRoot = true;
|
||||
hooks = {
|
||||
check-added-large-files.enable = true;
|
||||
check-case-conflicts.enable = true;
|
||||
check-executables-have-shebangs.enable = true;
|
||||
check-shebang-scripts-are-executable.enable = false;
|
||||
check-merge-conflicts.enable = true;
|
||||
deadnix.enable = true;
|
||||
detect-private-keys.enable = true;
|
||||
end-of-file-fixer.enable = true;
|
||||
fix-byte-order-marker.enable = true;
|
||||
flake-checker.enable = true;
|
||||
forbid-new-submodules.enable = true;
|
||||
mixed-line-endings.enable = true;
|
||||
nixpkgs-fmt.enable = true;
|
||||
statix.enable = true;
|
||||
trim-trailing-whitespace.enable = true;
|
||||
|
||||
destroyed-symlinks = {
|
||||
enable = true;
|
||||
entry = "${inputs.pre-commit-hooks.checks.${system}.pre-commit-hooks}/bin/destroyed-symlinks";
|
||||
};
|
||||
|
||||
shellcheck = {
|
||||
enable = true;
|
||||
entry = "${pkgs.shellcheck}/bin/shellcheck --shell=bash";
|
||||
};
|
||||
|
||||
shfmt = {
|
||||
enable = true;
|
||||
entry = "${pkgs.shfmt}/bin/shfmt -i 4 -sr -d -s -l";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
devshells.default = {
|
||||
packages = [
|
||||
(builtins.trace "alarm: we pinned nix_2_24 because of https://github.com/shlevy/nix-plugins/issues/20" pkgs.nixVersions.nix_2_24) # Always use the nix version from this flake's nixpkgs version, so that nix-plugins (below) doesn't fail because of different nix versions.
|
||||
pkgs.git
|
||||
pkgs.just
|
||||
pkgs.age
|
||||
pkgs.ssh-to-age
|
||||
pkgs.sops
|
||||
pkgs.home-manager
|
||||
pkgs.nixpkgs-fmt
|
||||
self.packages.${system}.swarsel-build
|
||||
self.packages.${system}.swarsel-deploy
|
||||
];
|
||||
|
||||
commands = [
|
||||
{
|
||||
package = pkgs.statix;
|
||||
help = "Lint flake";
|
||||
}
|
||||
{
|
||||
package = pkgs.deadnix;
|
||||
help = "Check flake for dead code";
|
||||
}
|
||||
{
|
||||
package = pkgs.nix-tree;
|
||||
help = "Interactively browse dependency graphs of Nix derivations";
|
||||
}
|
||||
{
|
||||
package = pkgs.nvd;
|
||||
help = "Diff two nix toplevels and show which packages were upgraded";
|
||||
}
|
||||
{
|
||||
package = pkgs.nix-diff;
|
||||
help = "Explain why two Nix derivations differ";
|
||||
}
|
||||
{
|
||||
package = pkgs.nix-output-monitor;
|
||||
help = "Nix Output Monitor (a drop-in alternative for `nix` which shows a build graph)";
|
||||
name = "nom";
|
||||
}
|
||||
{
|
||||
name = "hm";
|
||||
help = "Manage home-manager config";
|
||||
command = "home-manager";
|
||||
}
|
||||
{
|
||||
name = "fmt";
|
||||
help = "Format flake";
|
||||
command = "nixpkgs-fmt --check \"$FLAKE\"";
|
||||
}
|
||||
{
|
||||
name = "sd";
|
||||
help = "Build and deploy this nix config to nodes";
|
||||
command = "swarsel-deploy \"$@\"";
|
||||
}
|
||||
{
|
||||
name = "sl";
|
||||
help = "Build and deploy a config to nodes";
|
||||
command = "swarsel-deploy \${1} switch";
|
||||
}
|
||||
{
|
||||
name = "sw";
|
||||
help = "Build and switch to the host's config locally";
|
||||
command = "swarsel-deploy $(hostname) switch";
|
||||
}
|
||||
{
|
||||
name = "bld";
|
||||
help = "Build a number of configurations";
|
||||
command = "swarel-build \"$@\"";
|
||||
}
|
||||
{
|
||||
name = "c";
|
||||
help = "Work with the flake git repository";
|
||||
command = "git --git-dir=$FLAKE/.git --work-tree=$FLAKE/ \"$@\"";
|
||||
}
|
||||
];
|
||||
|
||||
devshell.startup.pre-commit-install.text = "pre-commit install";
|
||||
|
||||
env = [
|
||||
{
|
||||
# Additionally configure nix-plugins with our extra builtins file.
|
||||
# We need this for our repo secrets.
|
||||
name = "NIX_CONFIG";
|
||||
value = ''
|
||||
plugin-files = ${pkgs.nix-plugins}/lib/nix/plugins
|
||||
extra-builtins-file = ${self + /nix/extra-builtins.nix}
|
||||
'';
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
6
nix/formatter.nix
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
_:
|
||||
{
|
||||
perSystem = { pkgs, ... }: {
|
||||
formatter = pkgs.nixpkgs-fmt;
|
||||
};
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
# taken from https://github.com/oddlama/nix-config/blob/main/nix/globals.nix
|
||||
# adapted from https://github.com/oddlama/nix-config/blob/main/nix/globals.nix
|
||||
{ inputs, ... }:
|
||||
{
|
||||
flake = { config, lib, ... }:
|
||||
|
|
@ -14,7 +14,24 @@
|
|||
};
|
||||
modules = [
|
||||
../modules/nixos/common/globals.nix
|
||||
./globals-general.nix
|
||||
(
|
||||
{ lib, ... }:
|
||||
let
|
||||
# Try to access the extra builtin we loaded via nix-plugins.
|
||||
# Throw an error if that doesn't exist.
|
||||
sopsImportEncrypted =
|
||||
assert lib.assertMsg (builtins ? extraBuiltins.sopsImportEncrypted)
|
||||
"The extra builtin 'sopsImportEncrypted' is not available, so repo.secrets cannot be decrypted. Did you forget to add nix-plugins and point it to `./nix/extra-builtins.nix` ?";
|
||||
builtins.extraBuiltins.sopsImportEncrypted;
|
||||
in
|
||||
|
||||
{
|
||||
imports = [
|
||||
(sopsImportEncrypted ../secrets/repo/globals.nix.enc)
|
||||
];
|
||||
|
||||
}
|
||||
)
|
||||
(
|
||||
{ lib, ... }:
|
||||
{
|
||||
|
|
|
|||
92
nix/hosts.nix
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
{ self, inputs, ... }:
|
||||
{
|
||||
flake = { config, ... }:
|
||||
let
|
||||
inherit (self) outputs;
|
||||
inherit (outputs) lib;
|
||||
# lib = (inputs.nixpkgs.lib // inputs.home-manager.lib).extend (_: _: { swarselsystems = import "${self}/lib" { inherit self lib inputs outputs; inherit (inputs) systems; }; });
|
||||
|
||||
mkNixosHost = { minimal }: name:
|
||||
lib.nixosSystem {
|
||||
specialArgs = { inherit inputs outputs lib self minimal; inherit (config) globals nodes; };
|
||||
modules = [
|
||||
inputs.disko.nixosModules.disko
|
||||
inputs.sops-nix.nixosModules.sops
|
||||
inputs.impermanence.nixosModules.impermanence
|
||||
inputs.lanzaboote.nixosModules.lanzaboote
|
||||
inputs.nix-topology.nixosModules.default
|
||||
inputs.home-manager.nixosModules.home-manager
|
||||
"${self}/hosts/nixos/${name}"
|
||||
"${self}/profiles/nixos"
|
||||
"${self}/modules/nixos"
|
||||
{
|
||||
node.name = name;
|
||||
node.secretsDir = ../hosts/nixos/${name}/secrets;
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
mkDarwinHost = { minimal }: name:
|
||||
inputs.nix-darwin.lib.darwinSystem {
|
||||
specialArgs = { inherit inputs outputs lib self minimal; inherit (config) globals nodes; };
|
||||
modules = [
|
||||
# inputs.disko.nixosModules.disko
|
||||
# inputs.sops-nix.nixosModules.sops
|
||||
# inputs.impermanence.nixosModules.impermanence
|
||||
# inputs.lanzaboote.nixosModules.lanzaboote
|
||||
# inputs.fw-fanctrl.nixosModules.default
|
||||
# inputs.nix-topology.nixosModules.default
|
||||
inputs.home-manager.darwinModules.home-manager
|
||||
"${self}/hosts/darwin/${name}"
|
||||
"${self}/modules/nixos/darwin"
|
||||
# needed for infrastructure
|
||||
"${self}/modules/nixos/common/meta.nix"
|
||||
"${self}/modules/nixos/common/globals.nix"
|
||||
{
|
||||
node.name = name;
|
||||
node.secretsDir = ../hosts/darwin/${name}/secrets;
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
mkHalfHost = name: type: pkgs: {
|
||||
${name} =
|
||||
let
|
||||
systemFunc = if (type == "home") then inputs.home-manager.lib.homeManagerConfiguration else inputs.nix-on-droid.lib.nixOnDroidConfiguration;
|
||||
in
|
||||
systemFunc
|
||||
{
|
||||
inherit pkgs;
|
||||
extraSpecialArgs = { inherit inputs outputs lib self; };
|
||||
modules = [ "${self}/hosts/${type}/${name}" ];
|
||||
};
|
||||
};
|
||||
|
||||
mkHalfHostConfigs = hosts: type: pkgs: lib.foldl (acc: set: acc // set) { } (lib.map (name: mkHalfHost name type pkgs) hosts);
|
||||
nixosHosts = builtins.attrNames (lib.filterAttrs (_: type: type == "directory") (builtins.readDir "${self}/hosts/nixos"));
|
||||
darwinHosts = builtins.attrNames (lib.filterAttrs (_: type: type == "directory") (builtins.readDir "${self}/hosts/darwin"));
|
||||
in
|
||||
{
|
||||
nixosConfigurations = lib.genAttrs nixosHosts (mkNixosHost {
|
||||
minimal = false;
|
||||
});
|
||||
nixosConfigurationsMinimal = lib.genAttrs nixosHosts (mkNixosHost {
|
||||
minimal = true;
|
||||
});
|
||||
darwinConfigurations = lib.genAttrs darwinHosts (mkDarwinHost {
|
||||
minimal = false;
|
||||
});
|
||||
darwinConfigurationsMinimal = lib.genAttrs darwinHosts (mkDarwinHost {
|
||||
minimal = true;
|
||||
});
|
||||
|
||||
# TODO: Build these for all architectures
|
||||
homeConfigurations = mkHalfHostConfigs (lib.swarselsystems.readHosts "home") "home" lib.swarselsystems.pkgsFor.x86_64-linux;
|
||||
nixOnDroidConfigurations = mkHalfHostConfigs (lib.swarselsystems.readHosts "android") "android" lib.swarselsystems.pkgsFor.aarch64-linux;
|
||||
|
||||
diskoConfigurations.default = import "${self}/templates/hosts/nixos/disk-config.nix";
|
||||
|
||||
nodes = config.nixosConfigurations // config.darwinConfigurations;
|
||||
|
||||
};
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
{ self, pkgs, inputs, config, lib, modulesPath, primaryUser ? "swarsel", ... }:
|
||||
{ self, pkgs, inputs, config, lib, modulesPath, ... }:
|
||||
let
|
||||
pubKeys = lib.filesystem.listFilesRecursive "${self}/secrets/keys/ssh";
|
||||
in
|
||||
|
|
@ -18,30 +18,18 @@ in
|
|||
|
||||
inputs.home-manager.nixosModules.home-manager
|
||||
{
|
||||
home-manager.users."${primaryUser}".imports = [
|
||||
home-manager.users."setup".imports = [
|
||||
"${self}/modules/home/common/settings.nix"
|
||||
"${self}/modules/home/common/sharedsetup.nix"
|
||||
];
|
||||
}
|
||||
];
|
||||
|
||||
options.node = {
|
||||
name = lib.mkOption {
|
||||
description = "Node Name.";
|
||||
type = lib.types.str;
|
||||
};
|
||||
secretsDir = lib.mkOption {
|
||||
description = "Path to the secrets directory for this node.";
|
||||
type = lib.types.path;
|
||||
default = ./.;
|
||||
};
|
||||
};
|
||||
config = {
|
||||
node.name = lib.mkForce "drugstore";
|
||||
swarselsystems = {
|
||||
info = "~SwarselSystems~ installer ISO";
|
||||
};
|
||||
home-manager.users."${primaryUser}" = {
|
||||
home-manager.users."setup" = {
|
||||
home = {
|
||||
stateVersion = "23.05";
|
||||
file = {
|
||||
|
|
@ -78,15 +66,15 @@ in
|
|||
config.allowUnfree = true;
|
||||
};
|
||||
|
||||
services.getty.autologinUser = lib.mkForce primaryUser;
|
||||
services.getty.autologinUser = lib.mkForce "setup";
|
||||
|
||||
users = {
|
||||
allowNoPasswordLogin = true;
|
||||
groups.swarsel = { };
|
||||
users = {
|
||||
swarsel = {
|
||||
name = primaryUser;
|
||||
group = primaryUser;
|
||||
setup = {
|
||||
name = "setup";
|
||||
group = "setup";
|
||||
isNormalUser = true;
|
||||
password = "setup"; # this is overwritten after install
|
||||
openssh.authorizedKeys.keys = lib.lists.forEach pubKeys (key: builtins.readFile key);
|
||||
|
|
@ -94,7 +82,7 @@ in
|
|||
};
|
||||
root = {
|
||||
# password = lib.mkForce config.users.users.swarsel.password; # this is overwritten after install
|
||||
openssh.authorizedKeys.keys = config.users.users."${primaryUser}".openssh.authorizedKeys.keys;
|
||||
openssh.authorizedKeys.keys = config.users.users."setup".openssh.authorizedKeys.keys;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
@ -110,10 +98,10 @@ in
|
|||
|
||||
system.activationScripts.cache = {
|
||||
text = ''
|
||||
mkdir -p -m=0777 /home/${primaryUser}/.local/state/nix/profiles
|
||||
mkdir -p -m=0777 /home/${primaryUser}/.local/state/home-manager/gcroots
|
||||
mkdir -p -m=0777 /home/${primaryUser}/.local/share/nix/
|
||||
printf '{\"extra-substituters\":{\"https://nix-community.cachix.org\":true,\"https://nix-community.cachix.org https://cache.ngi0.nixos.org/\":true},\"extra-trusted-public-keys\":{\"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=\":true,\"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs= cache.ngi0.nixos.org-1:KqH5CBLNSyX184S9BKZJo1LxrxJ9ltnY2uAs5c/f1MA=\":true}}' | tee /home/${primaryUser}/.local/share/nix/trusted-settings.json > /dev/null
|
||||
mkdir -p -m=0777 /home/setup/.local/state/nix/profiles
|
||||
mkdir -p -m=0777 /home/setup/.local/state/home-manager/gcroots
|
||||
mkdir -p -m=0777 /home/setup/.local/share/nix/
|
||||
printf '{\"extra-substituters\":{\"https://nix-community.cachix.org\":true,\"https://nix-community.cachix.org https://cache.ngi0.nixos.org/\":true},\"extra-trusted-public-keys\":{\"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=\":true,\"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs= cache.ngi0.nixos.org-1:KqH5CBLNSyX184S9BKZJo1LxrxJ9ltnY2uAs5c/f1MA=\":true}}' | tee /home/setup/.local/share/nix/trusted-settings.json > /dev/null
|
||||
mkdir -p /root/.local/share/nix/
|
||||
printf '{\"extra-substituters\":{\"https://nix-community.cachix.org\":true,\"https://nix-community.cachix.org https://cache.ngi0.nixos.org/\":true},\"extra-trusted-public-keys\":{\"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=\":true,\"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs= cache.ngi0.nixos.org-1:KqH5CBLNSyX184S9BKZJo1LxrxJ9ltnY2uAs5c/f1MA=\":true}}' | tee /root/.local/share/nix/trusted-settings.json > /dev/null
|
||||
'';
|
||||
88
nix/lib.nix
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
{ self, inputs, ... }:
|
||||
let
|
||||
swarselsystems =
|
||||
let
|
||||
inherit (inputs) systems;
|
||||
inherit (inputs.nixpkgs) lib;
|
||||
in
|
||||
rec {
|
||||
mkIfElseList = p: yes: no: lib.mkMerge [
|
||||
(lib.mkIf p yes)
|
||||
(lib.mkIf (!p) no)
|
||||
];
|
||||
|
||||
mkIfElse = p: yes: no: if p then yes else no;
|
||||
|
||||
pkgsFor = lib.genAttrs (import systems) (system:
|
||||
import inputs.nixpkgs {
|
||||
inherit system;
|
||||
overlays = [ self.overlays.default ];
|
||||
config.allowUnfree = true;
|
||||
}
|
||||
);
|
||||
|
||||
toCapitalized = str:
|
||||
if builtins.stringLength str == 0 then
|
||||
""
|
||||
else
|
||||
let
|
||||
first = builtins.substring 0 1 str;
|
||||
rest = builtins.substring 1 (builtins.stringLength str - 1) str;
|
||||
upper = lib.toUpper first;
|
||||
lower = lib.toLower rest;
|
||||
in
|
||||
upper + lower;
|
||||
|
||||
|
||||
mkTrueOption = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
};
|
||||
|
||||
mkStrong = lib.mkOverride 60;
|
||||
|
||||
forEachSystem = f: lib.genAttrs (import systems) (system: f pkgsFor.${system});
|
||||
forEachLinuxSystem = f: lib.genAttrs [ "x86_64-linux" "aarch64-linux" ] (system: f pkgsFor.${system});
|
||||
|
||||
readHosts = type: lib.attrNames (builtins.readDir "${self}/hosts/${type}");
|
||||
readNix = type: lib.filter (name: name != "default.nix") (lib.attrNames (builtins.readDir "${self}/${type}"));
|
||||
|
||||
|
||||
|
||||
|
||||
mkModules = names: type: builtins.listToAttrs (map
|
||||
(name: {
|
||||
inherit name;
|
||||
value = import "${self}/modules/${type}/${name}";
|
||||
})
|
||||
names);
|
||||
|
||||
mkProfiles = names: type: builtins.listToAttrs (map
|
||||
(name: {
|
||||
inherit name;
|
||||
value = import "${self}/profiles/${type}/${name}";
|
||||
})
|
||||
names);
|
||||
|
||||
|
||||
mkImports = names: baseDir: lib.map (name: "${self}/${baseDir}/${name}") names;
|
||||
|
||||
eachMonitor = _: monitor: {
|
||||
inherit (monitor) name;
|
||||
value = builtins.removeAttrs monitor [ "workspace" "name" "output" ];
|
||||
};
|
||||
|
||||
eachOutput = _: monitor: {
|
||||
inherit (monitor) name;
|
||||
value = builtins.removeAttrs monitor [ "mode" "name" "scale" "transform" "position" ];
|
||||
};
|
||||
};
|
||||
in
|
||||
{
|
||||
flake = _:
|
||||
{
|
||||
lib = (inputs.nixpkgs.lib // inputs.home-manager.lib).extend (_: _: {
|
||||
inherit swarselsystems;
|
||||
});
|
||||
};
|
||||
}
|
||||
11
nix/modules.nix
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
{ self, ... }:
|
||||
{
|
||||
flake = _:
|
||||
let
|
||||
inherit (self.outputs) lib;
|
||||
in
|
||||
{
|
||||
nixosModules.default = import "${self}/modules/nixos" { inherit lib; };
|
||||
homeModules = import "${self}/modules/home" { inherit lib; };
|
||||
};
|
||||
}
|
||||
88
nix/overlays.nix
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
{ self, inputs, ... }:
|
||||
let
|
||||
inherit (self) outputs;
|
||||
inherit (outputs) lib;
|
||||
in
|
||||
{
|
||||
flake = { config, ... }:
|
||||
{
|
||||
overlays = {
|
||||
default = final: prev:
|
||||
let
|
||||
additions = final: _: import "${self}/pkgs" { pkgs = final; inherit self lib; };
|
||||
|
||||
modifications = final: prev: {
|
||||
vesktop = prev.vesktop.override {
|
||||
withSystemVencord = true;
|
||||
};
|
||||
|
||||
firefox = prev.firefox.override {
|
||||
nativeMessagingHosts = [
|
||||
prev.tridactyl-native
|
||||
prev.browserpass
|
||||
prev.plasma5Packages.plasma-browser-integration
|
||||
];
|
||||
};
|
||||
|
||||
mgba = final.swarsel-mgba;
|
||||
|
||||
retroarch = prev.retroarch.withCores (cores: with cores; [
|
||||
snes9x # snes
|
||||
nestopia # nes
|
||||
dosbox # dos
|
||||
scummvm # scumm
|
||||
vba-m # gb/a
|
||||
mgba # gb/a
|
||||
melonds # ds
|
||||
dolphin # gc/wii
|
||||
]);
|
||||
};
|
||||
|
||||
nixpkgs-stable = final: _: {
|
||||
stable = import inputs.nixpkgs-stable {
|
||||
inherit (final) system;
|
||||
config.allowUnfree = true;
|
||||
};
|
||||
};
|
||||
|
||||
nixpkgs-kernel = final: _: {
|
||||
kernel = import inputs.nixpkgs-kernel {
|
||||
inherit (final) system;
|
||||
config.allowUnfree = true;
|
||||
};
|
||||
};
|
||||
|
||||
nixpkgs-stable24_05 = final: _: {
|
||||
stable24_05 = import inputs.nixpkgs-stable24_05 {
|
||||
inherit (final) system;
|
||||
config.allowUnfree = true;
|
||||
};
|
||||
};
|
||||
|
||||
nixpkgs-stable24_11 = final: _: {
|
||||
stable24_11 = import inputs.nixpkgs-stable24_11 {
|
||||
inherit (final) system;
|
||||
config.allowUnfree = true;
|
||||
};
|
||||
};
|
||||
|
||||
zjstatus = _: prev: {
|
||||
zjstatus = inputs.zjstatus.packages.${prev.system}.default;
|
||||
};
|
||||
|
||||
in
|
||||
(additions final prev)
|
||||
// (modifications final prev)
|
||||
// (nixpkgs-stable final prev)
|
||||
// (nixpkgs-kernel final prev)
|
||||
// (nixpkgs-stable24_05 final prev)
|
||||
// (nixpkgs-stable24_11 final prev)
|
||||
// (zjstatus final prev)
|
||||
// (inputs.vbc-nix.overlays.default final prev)
|
||||
// (inputs.nur.overlays.default final prev)
|
||||
// (inputs.emacs-overlay.overlay final prev)
|
||||
// (inputs.nix-topology.overlays.default final prev)
|
||||
// (inputs.nixgl.overlay final prev);
|
||||
};
|
||||
};
|
||||
}
|
||||
10
nix/packages.nix
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
{ self, ... }:
|
||||
{
|
||||
flake = _:
|
||||
let
|
||||
inherit (self.outputs) lib;
|
||||
in
|
||||
{
|
||||
packages = lib.swarselsystems.forEachLinuxSystem (pkgs: import "${self}/pkgs" { inherit self lib pkgs; });
|
||||
};
|
||||
}
|
||||
26
nix/templates.nix
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
{ self, ... }:
|
||||
{
|
||||
flake = _: {
|
||||
templates =
|
||||
let
|
||||
mkTemplates = names: builtins.listToAttrs (map
|
||||
(name: {
|
||||
inherit name;
|
||||
value = {
|
||||
path = "${self}/templates/${name}";
|
||||
description = "${name} project ";
|
||||
};
|
||||
})
|
||||
names);
|
||||
templateNames = [
|
||||
"python"
|
||||
"rust"
|
||||
"go"
|
||||
"cpp"
|
||||
"latex"
|
||||
"default"
|
||||
];
|
||||
in
|
||||
mkTemplates templateNames;
|
||||
};
|
||||
}
|
||||
|
Before Width: | Height: | Size: 122 KiB After Width: | Height: | Size: 122 KiB |
|
Before Width: | Height: | Size: 393 KiB After Width: | Height: | Size: 393 KiB |
|
Before Width: | Height: | Size: 139 KiB After Width: | Height: | Size: 139 KiB |
|
Before Width: | Height: | Size: 91 KiB After Width: | Height: | Size: 91 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 157 KiB After Width: | Height: | Size: 157 KiB |
|
Before Width: | Height: | Size: 205 KiB After Width: | Height: | Size: 205 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 9.7 KiB |
|
Before Width: | Height: | Size: 84 KiB After Width: | Height: | Size: 84 KiB |
|
Before Width: | Height: | Size: 107 KiB After Width: | Height: | Size: 107 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 250 KiB After Width: | Height: | Size: 250 KiB |
171
nix/topology.nix
Normal file
|
|
@ -0,0 +1,171 @@
|
|||
{ self, inputs, ... }:
|
||||
{
|
||||
imports = [
|
||||
inputs.nix-topology.flakeModule
|
||||
];
|
||||
|
||||
perSystem.topology.modules = [
|
||||
({ config, ... }:
|
||||
let
|
||||
inherit (config.lib.topology)
|
||||
mkInternet
|
||||
mkDevice
|
||||
mkSwitch
|
||||
mkRouter
|
||||
mkConnection
|
||||
;
|
||||
in
|
||||
{
|
||||
renderer = "elk";
|
||||
|
||||
networks = {
|
||||
home-lan = {
|
||||
name = "Home LAN";
|
||||
cidrv4 = "192.168.1.0/24";
|
||||
};
|
||||
wg = {
|
||||
name = "Wireguard Tunnel";
|
||||
cidrv4 = "192.168.3.0/24";
|
||||
};
|
||||
};
|
||||
|
||||
nodes = {
|
||||
internet = mkInternet {
|
||||
connections = [
|
||||
(mkConnection "moonside" "wan")
|
||||
(mkConnection "pfsense" "wan")
|
||||
(mkConnection "sync" "wan")
|
||||
(mkConnection "toto" "bootstrapper")
|
||||
(mkConnection "chaostheatre" "demo host")
|
||||
];
|
||||
};
|
||||
|
||||
chaostheatre.interfaces."demo host" = { };
|
||||
toto.interfaces."bootstrapper" = { };
|
||||
sync.interfaces.wan = { };
|
||||
moonside.interfaces.wan = { };
|
||||
|
||||
pfsense = mkRouter "pfSense" {
|
||||
info = "HUNSN RM02";
|
||||
image = "${self}/topology-images/hunsn.png";
|
||||
interfaceGroups = [
|
||||
[
|
||||
"eth2"
|
||||
"eth3"
|
||||
"eth4"
|
||||
"eth5"
|
||||
"eth6"
|
||||
]
|
||||
[ "wan" ]
|
||||
];
|
||||
interfaces.wg = {
|
||||
addresses = [ "192.168.3.1" ];
|
||||
network = "wg";
|
||||
virtual = true;
|
||||
type = "wireguard";
|
||||
};
|
||||
|
||||
connections = {
|
||||
eth2 = mkConnection "switch-livingroom" "eth1";
|
||||
eth4 = mkConnection "winters" "eth1";
|
||||
eth3 = mkConnection "switch-bedroom" "eth1";
|
||||
eth6 = mkConnection "wifi-ap" "eth1";
|
||||
wg = mkConnection "moonside" "wg";
|
||||
};
|
||||
interfaces = {
|
||||
eth2 = {
|
||||
addresses = [ "192.168.1.1" ];
|
||||
network = "home-lan";
|
||||
};
|
||||
eth3 = {
|
||||
addresses = [ "192.168.1.1" ];
|
||||
network = "home-lan";
|
||||
};
|
||||
eth4 = {
|
||||
addresses = [ "192.168.1.1" ];
|
||||
network = "home-lan";
|
||||
};
|
||||
eth6 = {
|
||||
addresses = [ "192.168.1.1" ];
|
||||
network = "home-lan";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
winters.interfaces."eth1" = { };
|
||||
|
||||
wifi-ap = mkSwitch "Wi-Fi AP" {
|
||||
info = "Huawei";
|
||||
image = "${self}/topology-images/huawei.png";
|
||||
interfaceGroups = [
|
||||
[
|
||||
"eth1"
|
||||
"wifi"
|
||||
]
|
||||
];
|
||||
};
|
||||
|
||||
switch-livingroom = mkSwitch "Switch Livingroom" {
|
||||
info = "TL-SG108";
|
||||
image = "${self}/topology-images/TL-SG108.png";
|
||||
interfaceGroups = [
|
||||
[
|
||||
"eth1"
|
||||
"eth2"
|
||||
"eth3"
|
||||
"eth4"
|
||||
"eth5"
|
||||
"eth6"
|
||||
"eth7"
|
||||
"eth8"
|
||||
]
|
||||
];
|
||||
connections = {
|
||||
eth2 = mkConnection "nswitch" "eth1";
|
||||
eth7 = mkConnection "pc" "eth1";
|
||||
eth8 = mkConnection "nbl-imba-2" "eth1";
|
||||
};
|
||||
};
|
||||
|
||||
nswitch = mkDevice "Nintendo Switch" {
|
||||
info = "Nintendo Switch";
|
||||
image = "${self}/topology-images/nintendo-switch.png";
|
||||
interfaces.eth1 = { };
|
||||
};
|
||||
|
||||
pc = mkDevice "Windows Gaming Server" {
|
||||
info = "i7-4790k, GTX970, 32GB RAM";
|
||||
image = "${self}/topology-images/pc.png";
|
||||
interfaces.eth1 = { };
|
||||
};
|
||||
|
||||
nbl-imba-2.interfaces.eth1 = { };
|
||||
|
||||
switch-bedroom = mkSwitch "Switch Bedroom" {
|
||||
info = "TL-SG1005D";
|
||||
image = "${self}/topology-images/TL-SG1005D.png";
|
||||
interfaceGroups = [
|
||||
[
|
||||
"eth1"
|
||||
"eth2"
|
||||
"eth3"
|
||||
"eth4"
|
||||
"eth5"
|
||||
]
|
||||
];
|
||||
connections.eth2 = mkConnection "printer" "eth1";
|
||||
};
|
||||
|
||||
printer = mkDevice "Printer" {
|
||||
info = "DELL C2665dnf";
|
||||
image = "${self}/topology-images/DELL-C2665dnf.png";
|
||||
interfaces.eth1 = { };
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
})
|
||||
|
||||
|
||||
];
|
||||
}
|
||||
|
|
@ -1,86 +0,0 @@
|
|||
{ self, inputs, lib, ... }:
|
||||
|
||||
let
|
||||
additions = final: _: import "${self}/pkgs" { pkgs = final; inherit lib; };
|
||||
|
||||
modifications = final: prev: {
|
||||
vesktop = prev.vesktop.override {
|
||||
withSystemVencord = true;
|
||||
};
|
||||
|
||||
firefox = prev.firefox.override {
|
||||
nativeMessagingHosts = [
|
||||
prev.tridactyl-native
|
||||
prev.browserpass
|
||||
prev.plasma5Packages.plasma-browser-integration
|
||||
];
|
||||
};
|
||||
|
||||
mgba = final.swarsel-mgba;
|
||||
|
||||
retroarch = prev.retroarch.withCores (cores: with cores; [
|
||||
snes9x # snes
|
||||
nestopia # nes
|
||||
dosbox # dos
|
||||
scummvm # scumm
|
||||
vba-m # gb/a
|
||||
mgba # gb/a
|
||||
melonds # ds
|
||||
dolphin # gc/wii
|
||||
]);
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
nixpkgs-stable = final: _: {
|
||||
stable = import inputs.nixpkgs-stable {
|
||||
inherit (final) system;
|
||||
config.allowUnfree = true;
|
||||
};
|
||||
};
|
||||
|
||||
nixpkgs-kernel = final: _: {
|
||||
kernel = import inputs.nixpkgs-kernel {
|
||||
inherit (final) system;
|
||||
config.allowUnfree = true;
|
||||
};
|
||||
};
|
||||
|
||||
nixpkgs-stable24_05 = final: _: {
|
||||
stable24_05 = import inputs.nixpkgs-stable24_05 {
|
||||
inherit (final) system;
|
||||
config.allowUnfree = true;
|
||||
};
|
||||
};
|
||||
|
||||
nixpkgs-stable24_11 = final: _: {
|
||||
stable24_11 = import inputs.nixpkgs-stable24_11 {
|
||||
inherit (final) system;
|
||||
config.allowUnfree = true;
|
||||
};
|
||||
};
|
||||
|
||||
zjstatus = _: prev: {
|
||||
zjstatus = inputs.zjstatus.packages.${prev.system}.default;
|
||||
};
|
||||
|
||||
in
|
||||
{
|
||||
default =
|
||||
final: prev:
|
||||
|
||||
(additions final prev)
|
||||
// (modifications final prev)
|
||||
// (nixpkgs-stable final prev)
|
||||
// (nixpkgs-kernel final prev)
|
||||
// (nixpkgs-stable24_05 final prev)
|
||||
// (nixpkgs-stable24_11 final prev)
|
||||
// (zjstatus final prev)
|
||||
// (inputs.vbc-nix.overlays.default final prev)
|
||||
// (inputs.nur.overlays.default final prev)
|
||||
// (inputs.emacs-overlay.overlay final prev)
|
||||
// (inputs.nix-topology.overlays.default final prev)
|
||||
// (inputs.nixgl.overlay final prev);
|
||||
|
||||
}
|
||||
|
|
@ -1,5 +1,11 @@
|
|||
{ lib, pkgs, ... }:
|
||||
{ self, lib, pkgs, ... }:
|
||||
let
|
||||
mkPackages = names: pkgs: builtins.listToAttrs (map
|
||||
(name: {
|
||||
inherit name;
|
||||
value = pkgs.callPackage "${self}/pkgs/${name}" { inherit self name; };
|
||||
})
|
||||
names);
|
||||
packageNames = lib.swarselsystems.readNix "pkgs";
|
||||
in
|
||||
lib.swarselsystems.mkPackages packageNames pkgs
|
||||
mkPackages packageNames pkgs
|
||||
|
|
|
|||
15
pkgs/swarsel-build/default.nix
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
{ name, nix-output-monitor, writeShellApplication, ... }:
|
||||
writeShellApplication {
|
||||
runtimeInputs = [ nix-output-monitor ];
|
||||
inherit name;
|
||||
text = ''
|
||||
set -euo pipefail
|
||||
[[ "$#" -ge 1 ]] \
|
||||
|| { echo "usage: build <HOST>..." >&2; exit 1; }
|
||||
HOSTS=()
|
||||
for h in "$@"; do
|
||||
HOSTS+=(".#nixosConfigurations.$h.config.system.build.toplevel")
|
||||
done
|
||||
nom build --no-link --print-out-paths --show-trace "''${HOSTS[@]}"
|
||||
'';
|
||||
}
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"data": "ENC[AES256_GCM,data:1h+/I2SLfNqHrqWDAYmkkxFMwbN23zhUVTfWYcG9hmwiZ5KZoGErt1pvR6p2BIyBb3XrfqQoV8TWJrE7IrDKRkdX4MoaviT+W6wXJ46nTJAkJ2lbuNIfQR1paAqiIfeRIzx2GgOf,iv:GIHpghRgq1SBIs8KHzNLTvFJ7aruPd6e4zDe5GjuNo0=,tag:TvXf4qYWoSOqvlqnVsKxsw==,type:str]",
|
||||
"data": "ENC[AES256_GCM,data:PW4DwwvVLuaUtuvJr/h+Zx+8V1i1D3hVlATFr5yI5nykn7T/ZLf7lJFYJGqms9DHExxiGmYNWCXkFrRqOnKpBajxUuuljaE0Yd4bxIga4hF5KC+nJS5BGT9tVOQfp/sopJvp7QjxLKBcZcZ9uya2+DhxJdhmtRUj5A04ze68PsQMl4zuU7Y=,iv:1rblF4XnYDHpwz0Sl6E/3Xd9ITP5KWC8Qm5Ghf+TaTI=,tag:JmxpswTJZO7y9D4hQEn1Gw==,type:str]",
|
||||
"sops": {
|
||||
"age": [
|
||||
{
|
||||
|
|
@ -27,8 +27,8 @@
|
|||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBibGlMSU4vUEF5UlNVZzlr\nMTMyOFY2Zi8rZFdZT1JrelZEUUZkZHFvOFdzCjVPbVovaU9nZklJQWNZeDJZNm0r\nMXBIK2hsZEY0NElxTVVMWmN6WU1Ld28KLS0tIENaallkK05SMllia3prV25hZDR2\nZDBNU0dYYnJESG1JZGpvSGp1WW9UMVEKJgfdLp7BRXvyAekecNJiaBXmxSj1qNxx\nZeHceqEkfWV/PzX+RP4LHjXTQCLEOJijbKxDmxSsYq49hC9xjZASuw==\n-----END AGE ENCRYPTED FILE-----\n"
|
||||
}
|
||||
],
|
||||
"lastmodified": "2025-07-02T12:24:56Z",
|
||||
"mac": "ENC[AES256_GCM,data:MTBfNpPWlBI6HbTrcUhydq4NH/4m+kQWPuIjHo2eJmGbdoXk1qN1fHoKTB5U29YZWQuybBiSCRtLLWZdKhs5Vv9UsXOPDsKLflCW+sr0DEKd37ONzhlHhWsHGLF9kFOXZtruJe0p0Sh7oGy3T6ee4ABog3LwQ59ZcRmAxr7haFI=,iv:mDCvJrZXPOeuD01sqoLNGEHcexHZkZ3ankBk/lCMbUs=,tag:fqqJ8O8lI30SIqcCxAXVPA==,type:str]",
|
||||
"lastmodified": "2025-07-03T16:55:42Z",
|
||||
"mac": "ENC[AES256_GCM,data:+k6CeK5XiwsJJtvqr/NnRQvERqsV46tQoDnY6L5ptKQLyhMC8HPhrfn/LTJmRNqA8VXaDwSqm8zn+l8mJK55P/kZeeuLSmsvSYIgKlbp6naAbhyWM/q7IsT1fOAmFGKuG5nKaOy+ufxaXwIWWRPejmi9i+gmEw2FOTNimwyOqwc=,iv:q6P6QuipKMGc5i5oZ7XoU/qkbgo4X/SejfJUorAGb1M=,tag:sGfym1AaYAYHEzwDC5Dgsg==,type:str]",
|
||||
"pgp": [
|
||||
{
|
||||
"created_at": "2025-07-02T12:10:18Z",
|
||||
|
|
|
|||
|
|
@ -1,12 +0,0 @@
|
|||
{ lib, ... }:
|
||||
let
|
||||
templateNames = [
|
||||
"python"
|
||||
"rust"
|
||||
"go"
|
||||
"cpp"
|
||||
"latex"
|
||||
"default"
|
||||
];
|
||||
in
|
||||
lib.swarselsystems.mkTemplates templateNames
|
||||
|
|
@ -1,9 +1,10 @@
|
|||
{ self, inputs, pkgs, lib, primaryUser, ... }:
|
||||
{ self, inputs, pkgs, lib, globals, ... }:
|
||||
let
|
||||
modulesPath = "${self}/modules";
|
||||
sharedOptions = {
|
||||
isBtrfs = true;
|
||||
};
|
||||
primaryUser = globals.user.name;
|
||||
in
|
||||
{
|
||||
|
||||
|
|
|
|||
|
|
@ -1,162 +0,0 @@
|
|||
{ config, ... }:
|
||||
let
|
||||
inherit (config.lib.topology)
|
||||
mkInternet
|
||||
mkDevice
|
||||
mkSwitch
|
||||
mkRouter
|
||||
mkConnection
|
||||
;
|
||||
in
|
||||
{
|
||||
renderer = "elk";
|
||||
|
||||
networks = {
|
||||
home-lan = {
|
||||
name = "Home LAN";
|
||||
cidrv4 = "192.168.1.0/24";
|
||||
};
|
||||
wg = {
|
||||
name = "Wireguard Tunnel";
|
||||
cidrv4 = "192.168.3.0/24";
|
||||
};
|
||||
};
|
||||
|
||||
nodes = {
|
||||
internet = mkInternet {
|
||||
connections = [
|
||||
(mkConnection "moonside" "wan")
|
||||
(mkConnection "pfsense" "wan")
|
||||
(mkConnection "sync" "wan")
|
||||
(mkConnection "toto" "bootstrapper")
|
||||
(mkConnection "drugstore" "installer image")
|
||||
(mkConnection "chaostheatre" "demo host")
|
||||
];
|
||||
};
|
||||
|
||||
chaostheatre.interfaces."demo host" = { };
|
||||
drugstore.interfaces."installer image" = { };
|
||||
toto.interfaces."bootstrapper" = { };
|
||||
sync.interfaces.wan = { };
|
||||
moonside.interfaces.wan = { };
|
||||
|
||||
pfsense = mkRouter "pfSense" {
|
||||
info = "HUNSN RM02";
|
||||
image = ../topology/images/hunsn.png;
|
||||
interfaceGroups = [
|
||||
[
|
||||
"eth2"
|
||||
"eth3"
|
||||
"eth4"
|
||||
"eth5"
|
||||
"eth6"
|
||||
]
|
||||
[ "wan" ]
|
||||
];
|
||||
interfaces.wg = {
|
||||
addresses = [ "192.168.3.1" ];
|
||||
network = "wg";
|
||||
virtual = true;
|
||||
type = "wireguard";
|
||||
};
|
||||
|
||||
connections = {
|
||||
eth2 = mkConnection "switch-livingroom" "eth1";
|
||||
eth4 = mkConnection "winters" "eth1";
|
||||
eth3 = mkConnection "switch-bedroom" "eth1";
|
||||
eth6 = mkConnection "wifi-ap" "eth1";
|
||||
wg = mkConnection "moonside" "wg";
|
||||
};
|
||||
interfaces = {
|
||||
eth2 = {
|
||||
addresses = [ "192.168.1.1" ];
|
||||
network = "home-lan";
|
||||
};
|
||||
eth3 = {
|
||||
addresses = [ "192.168.1.1" ];
|
||||
network = "home-lan";
|
||||
};
|
||||
eth4 = {
|
||||
addresses = [ "192.168.1.1" ];
|
||||
network = "home-lan";
|
||||
};
|
||||
eth6 = {
|
||||
addresses = [ "192.168.1.1" ];
|
||||
network = "home-lan";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
winters.interfaces."eth1" = { };
|
||||
|
||||
wifi-ap = mkSwitch "Wi-Fi AP" {
|
||||
info = "Huawei";
|
||||
image = ../topology/images/huawei.png;
|
||||
interfaceGroups = [
|
||||
[
|
||||
"eth1"
|
||||
"wifi"
|
||||
]
|
||||
];
|
||||
};
|
||||
|
||||
switch-livingroom = mkSwitch "Switch Livingroom" {
|
||||
info = "TL-SG108";
|
||||
image = ../topology/images/TL-SG108.png;
|
||||
interfaceGroups = [
|
||||
[
|
||||
"eth1"
|
||||
"eth2"
|
||||
"eth3"
|
||||
"eth4"
|
||||
"eth5"
|
||||
"eth6"
|
||||
"eth7"
|
||||
"eth8"
|
||||
]
|
||||
];
|
||||
connections = {
|
||||
eth2 = mkConnection "nswitch" "eth1";
|
||||
eth7 = mkConnection "pc" "eth1";
|
||||
eth8 = mkConnection "nbl-imba-2" "eth1";
|
||||
};
|
||||
};
|
||||
|
||||
nswitch = mkDevice "Nintendo Switch" {
|
||||
info = "Nintendo Switch";
|
||||
image = ../topology/images/nintendo-switch.png;
|
||||
interfaces.eth1 = { };
|
||||
};
|
||||
|
||||
pc = mkDevice "Windows Gaming Server" {
|
||||
info = "i7-4790k, GTX970, 32GB RAM";
|
||||
image = ../topology/images/pc.png;
|
||||
interfaces.eth1 = { };
|
||||
};
|
||||
|
||||
nbl-imba-2.interfaces.eth1 = { };
|
||||
|
||||
switch-bedroom = mkSwitch "Switch Bedroom" {
|
||||
info = "TL-SG1005D";
|
||||
image = ../topology/images/TL-SG1005D.png;
|
||||
interfaceGroups = [
|
||||
[
|
||||
"eth1"
|
||||
"eth2"
|
||||
"eth3"
|
||||
"eth4"
|
||||
"eth5"
|
||||
]
|
||||
];
|
||||
connections.eth2 = mkConnection "printer" "eth1";
|
||||
};
|
||||
|
||||
printer = mkDevice "Printer" {
|
||||
info = "DELL C2665dnf";
|
||||
image = ../topology/images/DELL-C2665dnf.png;
|
||||
interfaces.eth1 = { };
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
}
|
||||