Compare commits
4 Commits
5acc8b3fca
...
rpi-hotspo
| Author | SHA1 | Date | |
|---|---|---|---|
| f30595fa2d | |||
| 5b666a0565 | |||
| 6bc11767ca | |||
| bdd2d9bef9 |
@@ -1,17 +1,29 @@
|
|||||||
{ config, lib, ... }:
|
{ config, lib, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
|
||||||
|
in
|
||||||
{
|
{
|
||||||
nix = {
|
options.enableExtraSubstituters = lib.mkEnableOption "Enable extra substituters";
|
||||||
settings = {
|
|
||||||
substituters = [
|
config = lib.mkMerge [
|
||||||
"https://cache.nixos.org/"
|
{
|
||||||
"https://nix-community.cachix.org"
|
enableExtraSubstituters = lib.mkDefault true;
|
||||||
"http://s0.koi-bebop.ts.net:5000"
|
}
|
||||||
];
|
(lib.mkIf config.enableExtraSubstituters {
|
||||||
trusted-public-keys = [
|
nix = {
|
||||||
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
settings = {
|
||||||
"s0.koi-bebop.ts.net:OjbzD86YjyJZpCp9RWaQKANaflcpKhtzBMNP8I2aPUU="
|
substituters = [
|
||||||
];
|
"https://cache.nixos.org/"
|
||||||
};
|
"https://nix-community.cachix.org"
|
||||||
};
|
"http://s0.koi-bebop.ts.net:5000"
|
||||||
|
];
|
||||||
|
trusted-public-keys = [
|
||||||
|
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
||||||
|
"s0.koi-bebop.ts.net:OjbzD86YjyJZpCp9RWaQKANaflcpKhtzBMNP8I2aPUU="
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
})
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,12 +8,23 @@ in
|
|||||||
config = lib.mkIf cfg.enable {
|
config = lib.mkIf cfg.enable {
|
||||||
services.nextcloud = {
|
services.nextcloud = {
|
||||||
https = true;
|
https = true;
|
||||||
package = pkgs.nextcloud29;
|
package = pkgs.nextcloud30;
|
||||||
hostName = "neet.cloud";
|
hostName = "neet.cloud";
|
||||||
config.dbtype = "sqlite";
|
config.dbtype = "sqlite";
|
||||||
config.adminuser = "jeremy";
|
config.adminuser = "jeremy";
|
||||||
config.adminpassFile = "/run/agenix/nextcloud-pw";
|
config.adminpassFile = "/run/agenix/nextcloud-pw";
|
||||||
autoUpdateApps.enable = true;
|
autoUpdateApps.enable = true;
|
||||||
|
extraApps = with config.services.nextcloud.package.packages.apps; {
|
||||||
|
# Want
|
||||||
|
inherit end_to_end_encryption mail spreed;
|
||||||
|
|
||||||
|
# Might use
|
||||||
|
inherit bookmarks calendar cookbook deck memories onlyoffice qownnotesapi;
|
||||||
|
|
||||||
|
# Try out
|
||||||
|
# inherit maps music news notes phonetrack polls forms;
|
||||||
|
};
|
||||||
|
extraAppsEnable = true;
|
||||||
};
|
};
|
||||||
age.secrets.nextcloud-pw = {
|
age.secrets.nextcloud-pw = {
|
||||||
file = ../../secrets/nextcloud-pw.age;
|
file = ../../secrets/nextcloud-pw.age;
|
||||||
|
|||||||
69
machines/hotspot/default.nix
Normal file
69
machines/hotspot/default.nix
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
{ config, pkgs, lib, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
internal = "end0";
|
||||||
|
wireless = "wlan0";
|
||||||
|
internal-gateway-ip = "192.168.0.1";
|
||||||
|
internal-ip-lower = "192.168.0.10";
|
||||||
|
internal-ip-upper = "192.168.0.100";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./hardware-configuration.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
enableExtraSubstituters = false;
|
||||||
|
|
||||||
|
# networking.interfaces.${internal}.ipv4.addresses = [{
|
||||||
|
# address = internal-gateway-ip;
|
||||||
|
# prefixLength = 24;
|
||||||
|
# }];
|
||||||
|
|
||||||
|
# DHCP on all interfaces except for the internal interface
|
||||||
|
networking.useDHCP = true;
|
||||||
|
networking.interfaces.${internal}.useDHCP = true;
|
||||||
|
networking.interfaces.${wireless}.useDHCP = true;
|
||||||
|
|
||||||
|
# Enable NAT
|
||||||
|
networking.ip_forward = true;
|
||||||
|
networking.nat = {
|
||||||
|
enable = true;
|
||||||
|
internalInterfaces = [ internal ];
|
||||||
|
externalInterface = wireless;
|
||||||
|
};
|
||||||
|
|
||||||
|
networking.wireless = {
|
||||||
|
enable = true;
|
||||||
|
networks = {
|
||||||
|
"Pixel_6054".psk = "@PSK_Pixel_6054@";
|
||||||
|
};
|
||||||
|
interfaces = [ wireless ];
|
||||||
|
environmentFile = "/run/agenix/hostspot-passwords";
|
||||||
|
};
|
||||||
|
age.secrets.hostspot-passwords.file = ../../secrets/hostspot-passwords.age;
|
||||||
|
|
||||||
|
# dnsmasq for internal interface
|
||||||
|
services.dnsmasq = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
server = [ "1.1.1.1" "8.8.8.8" ];
|
||||||
|
dhcp-range = "${internal-ip-lower},${internal-ip-upper},24h";
|
||||||
|
dhcp-option = [
|
||||||
|
"option:router,${internal-gateway-ip}"
|
||||||
|
"option:broadcast,10.0.0.255"
|
||||||
|
"option:ntp-server,0.0.0.0"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
networking.firewall.interfaces.${internal}.allowedTCPPorts = [
|
||||||
|
53 # dnsmasq
|
||||||
|
];
|
||||||
|
|
||||||
|
# Make it appear we are not using phone tethering to the ISP
|
||||||
|
networking.firewall = {
|
||||||
|
extraCommands = ''
|
||||||
|
iptables -t mangle -A POSTROUTING -o ${wireless} -j TTL --ttl-set 65
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
||||||
27
machines/hotspot/hardware-configuration.nix
Normal file
27
machines/hotspot/hardware-configuration.nix
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
{ config, lib, pkgs, modulesPath, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports =
|
||||||
|
[
|
||||||
|
(modulesPath + "/installer/scan/not-detected.nix")
|
||||||
|
];
|
||||||
|
|
||||||
|
boot = {
|
||||||
|
kernelPackages = pkgs.linuxKernel.packages.linux_rpi4;
|
||||||
|
initrd.availableKernelModules = [ "xhci_pci" "usbhid" "usb_storage" ];
|
||||||
|
loader = {
|
||||||
|
grub.enable = false;
|
||||||
|
generic-extlinux-compatible.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/" =
|
||||||
|
{
|
||||||
|
device = "/dev/disk/by-uuid/44444444-4444-4444-8888-888888888888";
|
||||||
|
fsType = "ext4";
|
||||||
|
};
|
||||||
|
|
||||||
|
swapDevices = [ ];
|
||||||
|
|
||||||
|
nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux";
|
||||||
|
}
|
||||||
13
machines/hotspot/properties.nix
Normal file
13
machines/hotspot/properties.nix
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
hostNames = [
|
||||||
|
"hotspot"
|
||||||
|
];
|
||||||
|
|
||||||
|
arch = "aarch64-linux";
|
||||||
|
|
||||||
|
systemRoles = [
|
||||||
|
"hotspot"
|
||||||
|
];
|
||||||
|
|
||||||
|
hostKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAION4IUAef687RIzWrP4HEZnpdSJswt06QmrdRMDPHHGY";
|
||||||
|
}
|
||||||
@@ -7,16 +7,16 @@
|
|||||||
}:
|
}:
|
||||||
buildNpmPackage rec {
|
buildNpmPackage rec {
|
||||||
pname = "actual-server";
|
pname = "actual-server";
|
||||||
version = "24.3.0";
|
version = "24.10.1";
|
||||||
|
|
||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "actualbudget";
|
owner = "actualbudget";
|
||||||
repo = pname;
|
repo = pname;
|
||||||
rev = "refs/tags/v${version}";
|
rev = "refs/tags/v${version}";
|
||||||
hash = "sha256-y51Dhdn84AWR/gM4LnAzvBIBpvKwUiclnPnwzkRoJ0I=";
|
hash = "sha256-VJAD+lNamwuYmiPJLXkum6piGi5zLOHBp8cUeZagb4s=";
|
||||||
};
|
};
|
||||||
|
|
||||||
npmDepsHash = "sha256-/UM2Tz8t4hi621HtXSu0LTDIzZ9SWMqKXqKfPwkdpE8=";
|
npmDepsHash = "sha256-Z2e4+JMhI/keLerT0F4WYdLnXHRQCqL7NjNyA9SFEF8=";
|
||||||
|
|
||||||
patches = [
|
patches = [
|
||||||
./migrations-should-use-pkg-path.patch
|
./migrations-should-use-pkg-path.patch
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
diff --git a/src/load-config.js b/src/load-config.js
|
diff --git a/src/load-config.js b/src/load-config.js
|
||||||
index d3cc5dd..cfcad8a 100644
|
index d99ce42..42d1351 100644
|
||||||
--- a/src/load-config.js
|
--- a/src/load-config.js
|
||||||
+++ b/src/load-config.js
|
+++ b/src/load-config.js
|
||||||
@@ -3,7 +3,8 @@ import path from 'node:path';
|
@@ -3,7 +3,8 @@ import path from 'node:path';
|
||||||
@@ -12,7 +12,7 @@ index d3cc5dd..cfcad8a 100644
|
|||||||
const debugSensitive = createDebug('actual-sensitive:config');
|
const debugSensitive = createDebug('actual-sensitive:config');
|
||||||
|
|
||||||
const projectRoot = path.dirname(path.dirname(fileURLToPath(import.meta.url)));
|
const projectRoot = path.dirname(path.dirname(fileURLToPath(import.meta.url)));
|
||||||
@@ -90,6 +91,7 @@ const finalConfig = {
|
@@ -108,6 +109,7 @@ const finalConfig = {
|
||||||
serverFiles: process.env.ACTUAL_SERVER_FILES || config.serverFiles,
|
serverFiles: process.env.ACTUAL_SERVER_FILES || config.serverFiles,
|
||||||
userFiles: process.env.ACTUAL_USER_FILES || config.userFiles,
|
userFiles: process.env.ACTUAL_USER_FILES || config.userFiles,
|
||||||
webRoot: process.env.ACTUAL_WEB_ROOT || config.webRoot,
|
webRoot: process.env.ACTUAL_WEB_ROOT || config.webRoot,
|
||||||
@@ -21,7 +21,7 @@ index d3cc5dd..cfcad8a 100644
|
|||||||
process.env.ACTUAL_HTTPS_KEY && process.env.ACTUAL_HTTPS_CERT
|
process.env.ACTUAL_HTTPS_KEY && process.env.ACTUAL_HTTPS_CERT
|
||||||
? {
|
? {
|
||||||
diff --git a/src/migrations.js b/src/migrations.js
|
diff --git a/src/migrations.js b/src/migrations.js
|
||||||
index 964e1f2..3a341d7 100644
|
index cba7db0..9983471 100644
|
||||||
--- a/src/migrations.js
|
--- a/src/migrations.js
|
||||||
+++ b/src/migrations.js
|
+++ b/src/migrations.js
|
||||||
@@ -1,6 +1,12 @@
|
@@ -1,6 +1,12 @@
|
||||||
@@ -37,11 +37,12 @@ index 964e1f2..3a341d7 100644
|
|||||||
|
|
||||||
export default function run(direction = 'up') {
|
export default function run(direction = 'up') {
|
||||||
console.log(
|
console.log(
|
||||||
@@ -13,6 +19,7 @@ export default function run(direction = 'up') {
|
@@ -13,7 +19,7 @@ export default function run(direction = 'up') {
|
||||||
stateStore: `${path.join(config.dataDir, '.migrate')}${
|
stateStore: `${path.join(config.dataDir, '.migrate')}${
|
||||||
config.mode === 'test' ? '-test' : ''
|
config.mode === 'test' ? '-test' : ''
|
||||||
}`,
|
}`,
|
||||||
+ migrationsDirectory,
|
- migrationsDirectory: `${path.join(config.projectRoot, 'migrations')}`,
|
||||||
|
+ migrationsDirectory
|
||||||
},
|
},
|
||||||
(err, set) => {
|
(err, set) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
|
|||||||
1645
overlays/actualbudget/package-lock.json
generated
1645
overlays/actualbudget/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
7
secrets/hostspot-passwords.age
Normal file
7
secrets/hostspot-passwords.age
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
age-encryption.org/v1
|
||||||
|
-> ssh-ed25519 cObvAg l/suU/M4AATK7lQuZv/qnjG/xqNGoVqhS7b3xirmNUM
|
||||||
|
Ao2tP6BBSZdlL7jZJPmLyJQWfqdU89M9hCjkkuqtxlw
|
||||||
|
-> ssh-ed25519 w3nu8g szQugiuFfzkzVndyIdP1agun4nmCsZzFG/6EEB2V1Gk
|
||||||
|
5+DEUJ5tkVFUpm+w/tptUCByRpMxRigwfrVglTYc8XI
|
||||||
|
--- pjviyhRustHHMipIpkKsQ4cpu+YA66JwvWXjceXopi4
|
||||||
|
)˜Ö®Äý8³È6Y"@?Ý9”®@¡Ÿžè|ÂÄž+©Z*4ö2å“R<qef…êªG¹ïV+{©%CmÞd^™b
|
||||||
@@ -57,4 +57,7 @@ with roles;
|
|||||||
|
|
||||||
# Frigate (DVR)
|
# Frigate (DVR)
|
||||||
"frigate-credentials.age".publicKeys = frigate;
|
"frigate-credentials.age".publicKeys = frigate;
|
||||||
|
|
||||||
|
# Phone hotspot passwords
|
||||||
|
"hostspot-passwords.age".publicKeys = hotspot;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user