factorio server
This commit is contained in:
parent
00b7254d12
commit
47a4f3f9a7
10 changed files with 174 additions and 52 deletions
BIN
factorio-mods/snek/VehicleSnap_2.0.2.zip
Normal file
BIN
factorio-mods/snek/VehicleSnap_2.0.2.zip
Normal file
Binary file not shown.
BIN
factorio-mods/snek/factoryplanner_2.0.30.zip
Normal file
BIN
factorio-mods/snek/factoryplanner_2.0.30.zip
Normal file
Binary file not shown.
BIN
factorio-mods/snek/flib_0.16.3.zip
Normal file
BIN
factorio-mods/snek/flib_0.16.3.zip
Normal file
Binary file not shown.
BIN
factorio-mods/snek/visible-planets_1.4.8.zip
Normal file
BIN
factorio-mods/snek/visible-planets_1.4.8.zip
Normal file
Binary file not shown.
|
|
@ -6,6 +6,8 @@ _: {
|
||||||
./forgejo.nix
|
./forgejo.nix
|
||||||
./obsidian-sync.nix
|
./obsidian-sync.nix
|
||||||
|
|
||||||
|
./factorio.nix
|
||||||
|
|
||||||
./media
|
./media
|
||||||
./websites
|
./websites
|
||||||
./auth
|
./auth
|
||||||
|
|
|
||||||
104
fili/services/factorio.nix
Normal file
104
fili/services/factorio.nix
Normal file
|
|
@ -0,0 +1,104 @@
|
||||||
|
{lib, pkgs, config, ...}: let
|
||||||
|
factorioVersion = version: sha: pkgs.factorio-headless.overrideAttrs (_: {
|
||||||
|
inherit version;
|
||||||
|
src = pkgs.fetchurl {
|
||||||
|
url = "https://factorio.com/get-download/${version}/headless/linux64";
|
||||||
|
name = "factorio-headless-${version}.tar.xz";
|
||||||
|
sha256 = sha;
|
||||||
|
};
|
||||||
|
});
|
||||||
|
getMods = modDir: let
|
||||||
|
modList = lib.pipe modDir [
|
||||||
|
builtins.readDir
|
||||||
|
(lib.filterAttrs (k: v: v == "regular"))
|
||||||
|
(lib.mapAttrsToList (k: v: k))
|
||||||
|
(builtins.filter (lib.hasSuffix ".zip"))
|
||||||
|
];
|
||||||
|
validPath = modFileName:
|
||||||
|
builtins.path {
|
||||||
|
path = modDir + "/${modFileName}";
|
||||||
|
name = lib.strings.sanitizeDerivationName modFileName;
|
||||||
|
};
|
||||||
|
modToDrv = modFileName:
|
||||||
|
pkgs.runCommand "copy-factorio-mods" {} ''
|
||||||
|
mkdir $out
|
||||||
|
ln -s '${validPath modFileName}' $out/'${modFileName}'
|
||||||
|
''
|
||||||
|
// { deps = []; };
|
||||||
|
in
|
||||||
|
builtins.map modToDrv modList;
|
||||||
|
factorioContainer = name: factorio-config: {
|
||||||
|
"factorio-${name}" = {
|
||||||
|
autoStart = true;
|
||||||
|
bindMounts = {
|
||||||
|
"/var/lib/factorio" = {
|
||||||
|
hostPath = "/factorio/${name}";
|
||||||
|
isReadOnly = false;
|
||||||
|
};
|
||||||
|
"/run/secrets" = {
|
||||||
|
hostPath = "/run/secrets";
|
||||||
|
isReadOnly = true;
|
||||||
|
};
|
||||||
|
"/etc/resolv.conf" = {
|
||||||
|
hostPath = "/etc/resolv.conf";
|
||||||
|
isReadOnly = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
privateUsers = "no";
|
||||||
|
|
||||||
|
config = { config, pkgs, lib, ... }: {
|
||||||
|
systemd.services.factorio.serviceConfig.User = "factorio";
|
||||||
|
services.factorio = factorio-config // {
|
||||||
|
enable = true;
|
||||||
|
openFirewall = true;
|
||||||
|
|
||||||
|
game-name = name;
|
||||||
|
saveName = name;
|
||||||
|
stateDirName = "factorio";
|
||||||
|
};
|
||||||
|
|
||||||
|
nixpkgs.config = {
|
||||||
|
allowUnfree = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
system.stateVersion = "23.11";
|
||||||
|
|
||||||
|
networking = {
|
||||||
|
firewall.enable = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
users.groups.factorio = { };
|
||||||
|
users.users.factorio = {
|
||||||
|
isSystemUser = true;
|
||||||
|
group = "factorio";
|
||||||
|
extraGroups = [ "storage" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
sops.secrets.factorio = {
|
||||||
|
sopsFile = ../../secrets/factorio.json;
|
||||||
|
format = "json";
|
||||||
|
key = "";
|
||||||
|
owner = "factorio";
|
||||||
|
};
|
||||||
|
|
||||||
|
containers = factorioContainer "tawney" {
|
||||||
|
autosave-interval = 20;
|
||||||
|
admins = [ "jonay2000" "computerdruid" "pineapple" ];
|
||||||
|
extraSettingsFile = config.sops.secrets.factorio.path;
|
||||||
|
# mods = getMods ../../factorio-mods/tawney;
|
||||||
|
package = factorioVersion "2.0.66" "sha256-8bOXbqzE4jOADTmdkABsNW+jZvXWQ0HFBMlcDLoyHAY=";
|
||||||
|
port = 20001;
|
||||||
|
}
|
||||||
|
// factorioContainer "snek" {
|
||||||
|
autosave-interval = 20;
|
||||||
|
admins = [ "jonay2000" "computerdruid" "pineapple" ];
|
||||||
|
extraSettingsFile = config.sops.secrets.factorio.path;
|
||||||
|
mods = getMods ../../factorio-mods/snek;
|
||||||
|
package = factorioVersion "2.0.66" "sha256-8bOXbqzE4jOADTmdkABsNW+jZvXWQ0HFBMlcDLoyHAY=";
|
||||||
|
port = 20002;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
{ flakes, ... }:
|
{ config
|
||||||
|
, flakes
|
||||||
|
, pkgs
|
||||||
|
, ...
|
||||||
|
}:
|
||||||
{
|
{
|
||||||
# imports = [
|
|
||||||
# flakes.mapf.nixosModules.default
|
|
||||||
# ];
|
|
||||||
|
|
||||||
sops.secrets.mapf = {
|
sops.secrets.mapf = {
|
||||||
sopsFile = ../../../secrets/mapf-prod.env;
|
sopsFile = ../../../secrets/mapf-prod.env;
|
||||||
};
|
};
|
||||||
|
|
@ -20,11 +20,30 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# donsz.services.mapf = {
|
systemd.services.mapf-server =
|
||||||
# enable = true;
|
let
|
||||||
# envfile = "/run/secrets/sops/mapf";
|
package = flakes.mapf.packages.${pkgs.system}.default;
|
||||||
# db_name = "mapfprod";
|
in
|
||||||
# db_user = "mapfprod";
|
{
|
||||||
# db_password = "";
|
description = "mapf-server";
|
||||||
# };
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
|
||||||
|
serviceConfig = {
|
||||||
|
DynamicUser = "yes";
|
||||||
|
ExecStart = "${package}/mapf_server_bin";
|
||||||
|
Restart = "on-failure";
|
||||||
|
RestartSec = "5s";
|
||||||
|
EnvironmentFile = config.sops.secrets.mapf.path;
|
||||||
|
WorkingDirectory = "${package}";
|
||||||
|
};
|
||||||
|
|
||||||
|
environment = {
|
||||||
|
MAPF_TEMPLATEFOLDER = "${package}/templates";
|
||||||
|
MAPF_DBUSER = "mapfprod";
|
||||||
|
MAPF_DBPASSWORD = "";
|
||||||
|
MAPF_DBPORT = "3306";
|
||||||
|
MAPF_DBHOST = "localhost";
|
||||||
|
MAPF_DBDATABASE = "mapfprod";
|
||||||
|
};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
43
flake.lock
generated
43
flake.lock
generated
|
|
@ -191,11 +191,11 @@
|
||||||
"nixpkgs": "nixpkgs_4"
|
"nixpkgs": "nixpkgs_4"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1721482233,
|
"lastModified": 1757529600,
|
||||||
"narHash": "sha256-zNTFyWdpOOTSXfCtcvdU7MjHohnKQpZcSlhCPS/C93Y=",
|
"narHash": "sha256-QSubvX4HaBx1LoePLBesrQqq0UuLuL4tM0uT0ipWlu8=",
|
||||||
"ref": "refs/heads/master",
|
"ref": "refs/heads/master",
|
||||||
"rev": "aa47dd1bc41ba25d14b1ac62edcee14f6fec1aa5",
|
"rev": "85e88fdc8f9947cb847db49e59e3ab1b5befac97",
|
||||||
"revCount": 677,
|
"revCount": 678,
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "ssh://git@github.com/jdonszelmann/mapf-server"
|
"url": "ssh://git@github.com/jdonszelmann/mapf-server"
|
||||||
},
|
},
|
||||||
|
|
@ -276,22 +276,6 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs-stable": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1703950681,
|
|
||||||
"narHash": "sha256-veU5bE4eLOmi7aOzhE7LfZXcSOONRMay0BKv01WHojo=",
|
|
||||||
"owner": "NixOS",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"rev": "0aad9113182747452dbfc68b93c86e168811fa6c",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "NixOS",
|
|
||||||
"ref": "release-23.05",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs_2": {
|
"nixpkgs_2": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1738680400,
|
"lastModified": 1738680400,
|
||||||
|
|
@ -426,11 +410,11 @@
|
||||||
"nixpkgs-mozilla": "nixpkgs-mozilla"
|
"nixpkgs-mozilla": "nixpkgs-mozilla"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1755627228,
|
"lastModified": 1758149969,
|
||||||
"narHash": "sha256-0BiTSjVWxgFnhOFxM1hpeMoMZcQBsgZTeVIgXOSUMcg=",
|
"narHash": "sha256-D1K7UQSj4A62nGS08AWK6NcN5YJzEAx3vO7MX4prhn0=",
|
||||||
"owner": "jdonszelmann",
|
"owner": "jdonszelmann",
|
||||||
"repo": "review-queue",
|
"repo": "review-queue",
|
||||||
"rev": "e2cf27dea96d2fde03c913d4b4462d3785019b36",
|
"rev": "1ff3b6f897885af1fb4f7d98b9acb1e030a6affd",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -472,19 +456,18 @@
|
||||||
},
|
},
|
||||||
"sops-nix": {
|
"sops-nix": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": "nixpkgs_8",
|
"nixpkgs": "nixpkgs_8"
|
||||||
"nixpkgs-stable": "nixpkgs-stable"
|
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1704122840,
|
"lastModified": 1758425756,
|
||||||
"narHash": "sha256-K+ubwROTgvoMzBe6h/JExJTdDSrX3gWNHX2XNOsybB0=",
|
"narHash": "sha256-L3N8zV6wsViXiD8i3WFyrvjDdz76g3tXKEdZ4FkgQ+Y=",
|
||||||
"owner": "jdonszelmann",
|
"owner": "Mic92",
|
||||||
"repo": "sops-nix",
|
"repo": "sops-nix",
|
||||||
"rev": "162696bebe125a43aaaf6a249aea16fab6925762",
|
"rev": "e0fdaea3c31646e252a60b42d0ed8eafdb289762",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "jdonszelmann",
|
"owner": "Mic92",
|
||||||
"repo": "sops-nix",
|
"repo": "sops-nix",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
19
flake.nix
19
flake.nix
|
|
@ -4,7 +4,7 @@
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/release-25.05";
|
nixpkgs.url = "github:NixOS/nixpkgs/release-25.05";
|
||||||
colmena.url = "github:zhaofengli/colmena";
|
colmena.url = "github:zhaofengli/colmena";
|
||||||
flake-utils.url = "github:numtide/flake-utils";
|
flake-utils.url = "github:numtide/flake-utils";
|
||||||
sops-nix.url = "github:jdonszelmann/sops-nix";
|
sops-nix.url = "github:Mic92/sops-nix";
|
||||||
vpn-confinement.url = "github:Maroka-chan/VPN-Confinement";
|
vpn-confinement.url = "github:Maroka-chan/VPN-Confinement";
|
||||||
|
|
||||||
# websites
|
# websites
|
||||||
|
|
@ -16,15 +16,14 @@
|
||||||
reviewqueue.url = "github:jdonszelmann/review-queue";
|
reviewqueue.url = "github:jdonszelmann/review-queue";
|
||||||
};
|
};
|
||||||
outputs =
|
outputs =
|
||||||
{
|
{ self
|
||||||
self,
|
, nixpkgs
|
||||||
nixpkgs,
|
, colmena
|
||||||
colmena,
|
, flake-utils
|
||||||
flake-utils,
|
, sops-nix
|
||||||
sops-nix,
|
, vpn-confinement
|
||||||
vpn-confinement,
|
, mapf
|
||||||
mapf,
|
, ...
|
||||||
...
|
|
||||||
}@inputs:
|
}@inputs:
|
||||||
let
|
let
|
||||||
pkgsForSystem =
|
pkgsForSystem =
|
||||||
|
|
|
||||||
15
secrets/factorio.json
Normal file
15
secrets/factorio.json
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
"game-password": "ENC[AES256_GCM,data:2bXZIw==,iv:kJgmaUefLHo4OrBC1a1Pvc+gixKdI8ZI4yWMTOcN59A=,tag:4K8EOgslO5qVRWDZbmafkA==,type:str]",
|
||||||
|
"sops": {
|
||||||
|
"age": [
|
||||||
|
{
|
||||||
|
"recipient": "age1ygkcl4ss92z5ptzt3w5g4n98qx2c4kagyssm96m5z4c7t299c5wszjchxw",
|
||||||
|
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBmdE1kazRGVVpQaFlSL1Ji\nNHlNSklRbUd0aHhLUjZVSEVJQkljK2ZFT0JVCm93U3U4dkpQZ0tHYis4QnJKcEtS\nMFNUMi9WK042aFlXWHQxOVVhWjRHMFUKLS0tIHVCNHFmYThUUmt3YWhqRkFHK1l2\nR2lPWnJNV1pkU09MYi9BTDdqSmJYeDQKsS93AT1x6v07GZxrGImvH1wijJIqtBCC\nABgfLrD8XhtwQLLKGdDubOjDErbNk6xZYLJC8rAQmCGJH4iv8JcpSg==\n-----END AGE ENCRYPTED FILE-----\n"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"lastmodified": "2025-09-27T19:59:38Z",
|
||||||
|
"mac": "ENC[AES256_GCM,data:QXoanBtvK2OJOBidSEDKvOILXKdD8/te0k6mnSZRhEpE4a6JOkwzTFCqJKz2KmAWWMTcAdimj5vC4NSsDoMOiUtpRGfPcxMdS1xfIU6QI1uAq+/aVuQMf5aqp2B5JieEvgDjGC0WaeZ5ebRqt5svwbQhemL7KUnukfwqVAUD6og=,iv:kINnJ9RDEQZ83pHmRClWC+X9je8EL9y8akFm7IDkEvs=,tag:XXZxJ8aCnbXBA+89mtCKlw==,type:str]",
|
||||||
|
"unencrypted_suffix": "_unencrypted",
|
||||||
|
"version": "3.10.2"
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue