Compare commits
No commits in common. "ab4a870d0fbbb904eb773e685ed872e32b9f1224" and "67840babe469a9495060aa42bcadc8be461970ec" have entirely different histories.
ab4a870d0f
...
67840babe4
|
@ -152,6 +152,7 @@
|
||||||
legacy_2305 = nixpkgs-legacy_2105 { inherit system; };
|
legacy_2305 = nixpkgs-legacy_2105 { inherit system; };
|
||||||
polygon-art = polygon-art.packages.${system};
|
polygon-art = polygon-art.packages.${system};
|
||||||
landingpage = landingpage.packages.${system}.plain;
|
landingpage = landingpage.packages.${system}.plain;
|
||||||
|
trilium-server = nixpkgs-unstable.legacyPackages.${system}.trilium-server;
|
||||||
kmonad = kmonad.packages.${system}.kmonad;
|
kmonad = kmonad.packages.${system}.kmonad;
|
||||||
tasksh = taskshell.packages.${system}.tasksh;
|
tasksh = taskshell.packages.${system}.tasksh;
|
||||||
overviewer = overviewer.packages.${system}.overviewer;
|
overviewer = overviewer.packages.${system}.overviewer;
|
||||||
|
|
|
@ -63,7 +63,7 @@ in
|
||||||
${pkgs.khal}/bin/ikhal
|
${pkgs.khal}/bin/ikhal
|
||||||
'')
|
'')
|
||||||
|
|
||||||
# todo : before deleting this, put it in logseq
|
# todo : before deleting this, put it in trilium
|
||||||
(python3Packages.bugwarrior.overrideAttrs (old: {
|
(python3Packages.bugwarrior.overrideAttrs (old: {
|
||||||
version = "develop";
|
version = "develop";
|
||||||
src = pkgs.fetchFromGitHub {
|
src = pkgs.fetchFromGitHub {
|
||||||
|
|
|
@ -1,18 +0,0 @@
|
||||||
{ lib, config, ... }:
|
|
||||||
with lib;
|
|
||||||
with types;
|
|
||||||
{
|
|
||||||
imports = [ ./default.nix ];
|
|
||||||
|
|
||||||
options.components.monitor.container.promtail.port = mkOption {
|
|
||||||
type = int;
|
|
||||||
};
|
|
||||||
|
|
||||||
config = {
|
|
||||||
components.monitor.enable = mkDefault true;
|
|
||||||
components.monitor.metrics.enable = mkDefault false;
|
|
||||||
components.monitor.promtail.port = config.components.monitor.container.promtail.port;
|
|
||||||
components.monitor.opentelemetry.exporter.endpoint = mkDefault "127.0.0.1:4317";
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
|
@ -50,8 +50,11 @@ let
|
||||||
"minio.chungus" = hosts.chungus;
|
"minio.chungus" = hosts.chungus;
|
||||||
"sync.chungus" = hosts.chungus;
|
"sync.chungus" = hosts.chungus;
|
||||||
"tdarr.chungus" = hosts.chungus;
|
"tdarr.chungus" = hosts.chungus;
|
||||||
|
"trilium.chungus" = hosts.chungus;
|
||||||
"tts.chungus" = hosts.chungus;
|
"tts.chungus" = hosts.chungus;
|
||||||
"paperless.chungus" = hosts.chungus;
|
"paperless.chungus" = hosts.chungus;
|
||||||
|
# cream
|
||||||
|
"trilium.cream" = hosts.cream;
|
||||||
};
|
};
|
||||||
network = "private";
|
network = "private";
|
||||||
in
|
in
|
||||||
|
|
|
@ -40,6 +40,8 @@ with lib;
|
||||||
bitwarden
|
bitwarden
|
||||||
rbw
|
rbw
|
||||||
|
|
||||||
|
unstable.trilium-desktop # old (use logseq now)
|
||||||
|
|
||||||
nginx-config-formatter
|
nginx-config-formatter
|
||||||
|
|
||||||
unstable.yt-dlp
|
unstable.yt-dlp
|
||||||
|
|
14
nixos/machines/chungus/cache.nix
Normal file
14
nixos/machines/chungus/cache.nix
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
# port 5000 already in use.
|
||||||
|
services.nix-serve = {
|
||||||
|
enable = false;
|
||||||
|
|
||||||
|
# needed if i want to trust my own build packages and dirivations
|
||||||
|
# nix-store --generate-binary-cache-key key-name secret-key-file public-key-file
|
||||||
|
# secretKeyFile = sops.nixServeSecretKeyFile.path
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -12,40 +12,58 @@
|
||||||
|
|
||||||
./packages.nix
|
./packages.nix
|
||||||
|
|
||||||
./network-tinc-retiolum.nix # make sure no service is open for this vpn!
|
|
||||||
./network-tinc.nix
|
|
||||||
./network-wireguard.nix
|
./network-wireguard.nix
|
||||||
|
./network-tinc.nix
|
||||||
|
./network-tinc-retiolum.nix # make sure no service is open for this vpn!
|
||||||
|
|
||||||
./hass-mqtt.nix
|
|
||||||
./hass-zigbee2mqtt.nix
|
|
||||||
./hass.nix
|
./hass.nix
|
||||||
|
./hass-zigbee2mqtt.nix
|
||||||
|
./hass-mqtt.nix
|
||||||
|
#./hass-wifi.nix
|
||||||
|
|
||||||
|
#./mail-fetcher.nix
|
||||||
|
|
||||||
|
#./borg.nix
|
||||||
./taskwarrior-autotag.nix
|
./taskwarrior-autotag.nix
|
||||||
|
|
||||||
|
./media-share.nix
|
||||||
./media-audiobookshelf.nix
|
./media-audiobookshelf.nix
|
||||||
|
./media-jellyfin.nix
|
||||||
|
./media-youtube.nix
|
||||||
./media-castget.nix
|
./media-castget.nix
|
||||||
./media-curl.nix
|
./media-curl.nix
|
||||||
./media-jellyfin.nix
|
|
||||||
./media-share.nix
|
|
||||||
./media-syncthing.nix
|
./media-syncthing.nix
|
||||||
./media-youtube.nix
|
|
||||||
|
|
||||||
./telemetry/grafana.nix
|
# logging
|
||||||
|
./grafana.nix
|
||||||
|
|
||||||
./telemetry/telegraf-smart.nix
|
./telemetry/telegraf-smart.nix
|
||||||
./telemetry/telegraf.nix
|
./telemetry/telegraf.nix
|
||||||
#./telemetry/opentelemetry-hass.nix
|
#./telemetry/opentelemetry-hass.nix
|
||||||
./telemetry/prometheus.nix
|
./telemetry/prometheus.nix
|
||||||
./telemetry/loki.nix
|
./telemetry/loki.nix
|
||||||
|
|
||||||
|
#./home-display.nix
|
||||||
|
|
||||||
./sync-rbackup.nix
|
./sync-rbackup.nix
|
||||||
|
./sync-torrent.nix
|
||||||
./sync-script.nix
|
./sync-script.nix
|
||||||
./sync-syncoid.nix
|
./sync-syncoid.nix
|
||||||
|
|
||||||
./service-atuin.nix
|
|
||||||
./service-paperless.nix
|
|
||||||
./services-forgejo.nix
|
|
||||||
./services-s3.nix
|
./services-s3.nix
|
||||||
./services-vault.nix
|
./services-vault.nix
|
||||||
|
./services-forgejo.nix
|
||||||
|
|
||||||
|
#./kiosk.nix
|
||||||
|
./trilium.nix
|
||||||
|
./atuin.nix
|
||||||
|
|
||||||
|
./cache.nix
|
||||||
|
|
||||||
|
|
||||||
|
./docker-registry.nix
|
||||||
|
|
||||||
|
./paperless.nix
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
3
nixos/machines/chungus/docker-registry.nix
Normal file
3
nixos/machines/chungus/docker-registry.nix
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
services.dockerRegistry.enable = true;
|
||||||
|
}
|
13
nixos/machines/orbi/cache.nix
Normal file
13
nixos/machines/orbi/cache.nix
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
services.nix-serve = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
# needed if i want to trust my own build packages and dirivations
|
||||||
|
# nix-store --generate-binary-cache-key key-name secret-key-file public-key-file
|
||||||
|
# secretKeyFile = sops.nixServeSecretKeyFile.path
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -8,11 +8,12 @@
|
||||||
../../components
|
../../components
|
||||||
../../modules
|
../../modules
|
||||||
|
|
||||||
./service-forgejo.nix
|
|
||||||
./service-hedgedoc.nix
|
./service-hedgedoc.nix
|
||||||
./service-photoprism.nix
|
./service-forgejo.nix
|
||||||
./service-taskserver.nix
|
|
||||||
./service-vaultwarden.nix
|
./service-vaultwarden.nix
|
||||||
|
./service-taskserver.nix
|
||||||
|
./service-photoprism.nix
|
||||||
|
|
||||||
./nginx-ingolf-wagner-de.nix
|
./nginx-ingolf-wagner-de.nix
|
||||||
./nginx-wkd.nix
|
./nginx-wkd.nix
|
||||||
|
@ -20,16 +21,28 @@
|
||||||
./network-tinc.nix
|
./network-tinc.nix
|
||||||
./network-wireguard.nix
|
./network-wireguard.nix
|
||||||
|
|
||||||
./media-arr.nix
|
|
||||||
./media-jellyfin.nix
|
|
||||||
./media-nextcloud.nix
|
|
||||||
./media-share.nix
|
./media-share.nix
|
||||||
|
|
||||||
./media-syncthing.nix
|
./media-syncthing.nix
|
||||||
|
#./media-transmission.nix
|
||||||
./media-transmission2.nix
|
./media-transmission2.nix
|
||||||
|
./media-jellyfin.nix
|
||||||
|
./media-arr.nix
|
||||||
|
./media-nextcloud.nix
|
||||||
|
|
||||||
./social-jitsi.nix
|
./social-jitsi.nix
|
||||||
./social-matrix-terranix.nix
|
./social-matrix-terranix.nix
|
||||||
|
|
||||||
|
#./sync-opentracker.nix
|
||||||
|
#./sync-torrent.nix
|
||||||
|
|
||||||
|
# telemetry
|
||||||
|
# ---------
|
||||||
|
#./loki.nix
|
||||||
|
#./loki-promtail.nix
|
||||||
|
#./grafana.nix
|
||||||
|
|
||||||
|
#./cache.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
networking.hostName = "orbi";
|
networking.hostName = "orbi";
|
||||||
|
|
22
nixos/machines/orbi/container-monitoring.nix
Normal file
22
nixos/machines/orbi/container-monitoring.nix
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
{ lib, config, ... }:
|
||||||
|
with lib;
|
||||||
|
with types;
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
../../components/monitor
|
||||||
|
];
|
||||||
|
|
||||||
|
# todo create a the components.monitor.container module.
|
||||||
|
options.promtail.port = mkOption {
|
||||||
|
type = int;
|
||||||
|
};
|
||||||
|
|
||||||
|
config = {
|
||||||
|
components.monitor.enable = true;
|
||||||
|
components.monitor.metrics.enable = false;
|
||||||
|
components.monitor.promtail.port = config.promtail.port;
|
||||||
|
components.monitor.opentelemetry.exporter.endpoint = "127.0.0.1:4317";
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
}
|
58
nixos/machines/orbi/finance.nix
Normal file
58
nixos/machines/orbi/finance.nix
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
{ lib, config, pkgs, ... }:
|
||||||
|
let
|
||||||
|
|
||||||
|
# find symbols with
|
||||||
|
# https://www.alphavantage.co/query?function=SYMBOL_SEARCH&apikey=<api_key>&keywords=<keywords>
|
||||||
|
# as described here : https://www.alphavantage.co/documentation/#symbolsearch
|
||||||
|
#
|
||||||
|
# example:
|
||||||
|
# --------
|
||||||
|
# stocks = [
|
||||||
|
# {
|
||||||
|
# friendly_name = "google";
|
||||||
|
# symbol = "GOOGL.DEX";
|
||||||
|
# name = "google";
|
||||||
|
# currency = "$";
|
||||||
|
# }
|
||||||
|
# ];
|
||||||
|
# results in
|
||||||
|
# P 2020-01-30 GOOGL $123
|
||||||
|
stocks = import ../../private_assets/finance/stocks;
|
||||||
|
stocksFile = toString /home/syncthing/finance/hledger/stocks.journal;
|
||||||
|
|
||||||
|
in
|
||||||
|
{
|
||||||
|
|
||||||
|
systemd.services.pull_stocks = {
|
||||||
|
enable = true;
|
||||||
|
description = "pull stocks for hledger";
|
||||||
|
serviceConfig = {
|
||||||
|
User = "syncthing";
|
||||||
|
Type = "oneshot";
|
||||||
|
};
|
||||||
|
|
||||||
|
script =
|
||||||
|
let
|
||||||
|
command = { symbol, name, currency, ... }: ''
|
||||||
|
APIKEY=${lib.fileContents ../../private_assets/finance/alphavantage/apiKey}
|
||||||
|
SYMBOL="${symbol}"
|
||||||
|
${pkgs.curl}/bin/curl --location --silent \
|
||||||
|
"https://www.alphavantage.co/query?function=GLOBAL_QUOTE&symbol=$SYMBOL&apikey=$APIKEY" \
|
||||||
|
| ${pkgs.jq}/bin/jq --raw-output '.["Global Quote"]
|
||||||
|
| "P \(.["07. latest trading day"]) ${name} ${currency}\(.["05. price"] | tonumber)"' \
|
||||||
|
>> ${stocksFile}
|
||||||
|
sleep 1
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
lib.concatStringsSep "\n" (map command stocks);
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.timers.pull_stocks = {
|
||||||
|
enable = true;
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
timerConfig = {
|
||||||
|
OnCalendar = "weekly";
|
||||||
|
Persistent = "true";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
24
nixos/machines/orbi/grafana.nix
Normal file
24
nixos/machines/orbi/grafana.nix
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
{ config, ... }:
|
||||||
|
{
|
||||||
|
|
||||||
|
services.nginx.virtualHosts.${config.services.grafana.settings.server.domain} = {
|
||||||
|
extraConfig = ''
|
||||||
|
allow ${config.tinc.private.subnet};
|
||||||
|
deny all;
|
||||||
|
'';
|
||||||
|
locations."/" = {
|
||||||
|
proxyPass = "http://localhost:${toString config.services.grafana.settings.server.http_port}";
|
||||||
|
proxyWebsockets = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.grafana = {
|
||||||
|
enable = true;
|
||||||
|
settings.server = {
|
||||||
|
domain = "grafana.robi.private";
|
||||||
|
http_port = 2342;
|
||||||
|
http_addr = "localhost";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
130
nixos/machines/orbi/graylog.nix
Normal file
130
nixos/machines/orbi/graylog.nix
Normal file
|
@ -0,0 +1,130 @@
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
let port = 9000;
|
||||||
|
in {
|
||||||
|
# configure nginx
|
||||||
|
services.nginx = {
|
||||||
|
enable = true;
|
||||||
|
virtualHosts = {
|
||||||
|
"graylog.workhorse.private" = {
|
||||||
|
locations."/" = {
|
||||||
|
proxyPass = "http://localhost:${toString port}";
|
||||||
|
extraConfig = ''
|
||||||
|
proxy_set_header Host $host:$server_port;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
proxy_read_timeout 90;
|
||||||
|
proxy_redirect http://localhost:${
|
||||||
|
toString port
|
||||||
|
} https://graylog.workhorse.private/;
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.mongodb.enable = true;
|
||||||
|
services.elasticsearch = {
|
||||||
|
enable = true;
|
||||||
|
listenAddress = "${config.networking.hostName}.private";
|
||||||
|
extraJavaOptions = [ "-Des.http.cname_in_publish_address=true" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
services.graylog.enable = true;
|
||||||
|
services.graylog.elasticsearchHosts =
|
||||||
|
[ "http://${config.services.elasticsearch.listenAddress}:9200" ];
|
||||||
|
|
||||||
|
# https://docs.graylog.org/en/3.0/pages/configuration/server.conf.html
|
||||||
|
services.graylog.extraConfig = ''
|
||||||
|
http_bind_address = 0.0.0.0:${toString port}
|
||||||
|
http_publish_uri = http://workhorse.private:${toString port}/
|
||||||
|
'';
|
||||||
|
|
||||||
|
# other wise this does not work
|
||||||
|
services.graylog.nodeIdFile = "/var/lib/graylog/node-id";
|
||||||
|
|
||||||
|
# pwgen -N 1 -s 96
|
||||||
|
services.graylog.passwordSecret =
|
||||||
|
lib.fileContents ../../private_assets/graylog/password-secret;
|
||||||
|
|
||||||
|
# echo -n yourpassword | shasum -a 256
|
||||||
|
services.graylog.rootPasswordSha2 =
|
||||||
|
lib.fileContents ../../private_assets/graylog/root-password-hash;
|
||||||
|
|
||||||
|
services.graylog.plugins = [ pkgs.graylogPlugins.slack ];
|
||||||
|
|
||||||
|
# not working at the moment
|
||||||
|
#services.geoip-updater.enable = true;
|
||||||
|
|
||||||
|
# https://wiki.splunk.com/Http_status.csv
|
||||||
|
environment.etc."graylog/server/httpCodes.csv" = {
|
||||||
|
enable = true;
|
||||||
|
text = ''
|
||||||
|
status,status_description,status_type
|
||||||
|
100,Continue,Informational
|
||||||
|
101,Switching Protocols,Informational
|
||||||
|
200,OK,Successful
|
||||||
|
201,Created,Successful
|
||||||
|
202,Accepted,Successful
|
||||||
|
203,Non-Authoritative Information,Successful
|
||||||
|
204,No Content,Successful
|
||||||
|
205,Reset Content,Successful
|
||||||
|
206,Partial Content,Successful
|
||||||
|
300,Multiple Choices,Redirection
|
||||||
|
301,Moved Permanently,Redirection
|
||||||
|
302,Found,Redirection
|
||||||
|
303,See Other,Redirection
|
||||||
|
304,Not Modified,Redirection
|
||||||
|
305,Use Proxy,Redirection
|
||||||
|
307,Temporary Redirect,Redirection
|
||||||
|
400,Bad Request,Client Error
|
||||||
|
401,Unauthorized,Client Error
|
||||||
|
402,Payment Required,Client Error
|
||||||
|
403,Forbidden,Client Error
|
||||||
|
404,Not Found,Client Error
|
||||||
|
405,Method Not Allowed,Client Error
|
||||||
|
406,Not Acceptable,Client Error
|
||||||
|
407,Proxy Authentication Required,Client Error
|
||||||
|
408,Request Timeout,Client Error
|
||||||
|
409,Conflict,Client Error
|
||||||
|
410,Gone,Client Error
|
||||||
|
411,Length Required,Client Error
|
||||||
|
412,Precondition Failed,Client Error
|
||||||
|
413,Request Entity Too Large,Client Error
|
||||||
|
414,Request-URI Too Long,Client Error
|
||||||
|
415,Unsupported Media Type,Client Error
|
||||||
|
416,Requested Range Not Satisfiable,Client Error
|
||||||
|
417,Expectation Failed,Client Error
|
||||||
|
500,Internal Server Error,Server Error
|
||||||
|
501,Not Implemented,Server Error
|
||||||
|
502,Bad Gateway,Server Error
|
||||||
|
503,Service Unavailable,Server Error
|
||||||
|
504,Gateway Timeout,Server Error
|
||||||
|
505,HTTP Version Not Supported,Server Error
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.etc."graylog/server/known_servers.csv" = {
|
||||||
|
enable = true;
|
||||||
|
text = ''
|
||||||
|
"ip","host_name"
|
||||||
|
"95.216.1.150","lassul.us"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.etc."graylog/systemd/loglevel.csv" = {
|
||||||
|
enable = true;
|
||||||
|
text = ''
|
||||||
|
"value","Servity","Description"
|
||||||
|
"0","emergency","System is unusable"
|
||||||
|
"1","alert","Should be corrected immediately"
|
||||||
|
"2","cirtical","Critical conditions"
|
||||||
|
"3","error","Error Condition"
|
||||||
|
"4","warning","May indicate that an error will occur if action is not taken."
|
||||||
|
"5","notice","Events that are unusual, but not error conditions."
|
||||||
|
"6","info","Normal operational messages that require no action."
|
||||||
|
"7","debug","Information useful to developers for debugging the application."
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
16
nixos/machines/orbi/grocy.nix
Normal file
16
nixos/machines/orbi/grocy.nix
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
services.grocy = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
culture = "de";
|
||||||
|
currency = "EUR";
|
||||||
|
};
|
||||||
|
hostName = "grocy.ingolf-wagner.de";
|
||||||
|
nginx.enableSSL = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
backup.dirs = [ config.services.grocy.dataDir ];
|
||||||
|
|
||||||
|
}
|
25
nixos/machines/orbi/kibana.nix
Normal file
25
nixos/machines/orbi/kibana.nix
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
{ config, ... }: {
|
||||||
|
services.nginx = {
|
||||||
|
enable = true;
|
||||||
|
statusPage = true;
|
||||||
|
virtualHosts = {
|
||||||
|
"kibana.${config.networking.hostName}.private" = {
|
||||||
|
serverAliases = [ ];
|
||||||
|
locations."/" = {
|
||||||
|
proxyPass = "http://${config.networking.hostName}.private:${
|
||||||
|
toString config.services.kibana.port
|
||||||
|
}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.elasticsearch.enable = true;
|
||||||
|
services.elasticsearch.listenAddress = "workhorse.private";
|
||||||
|
|
||||||
|
services.kibana.enable = true;
|
||||||
|
services.kibana.elasticsearch.hosts = [ "http://workhorse.private:9200" ];
|
||||||
|
services.kibana.listenAddress = "workhorse.private";
|
||||||
|
services.kibana.port = 5601;
|
||||||
|
|
||||||
|
}
|
41
nixos/machines/orbi/loki-promtail.nix
Normal file
41
nixos/machines/orbi/loki-promtail.nix
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
{ config, ... }:
|
||||||
|
{
|
||||||
|
services.promtail = {
|
||||||
|
enable = true;
|
||||||
|
configuration = {
|
||||||
|
server = {
|
||||||
|
http_listen_port = 28183;
|
||||||
|
grpc_listen_port = 0;
|
||||||
|
};
|
||||||
|
positions.filename = "/tmp/positions.yaml";
|
||||||
|
clients = [
|
||||||
|
{ url = "http://127.0.0.1:3100/loki/api/v1/push"; }
|
||||||
|
];
|
||||||
|
|
||||||
|
scrape_configs = [
|
||||||
|
{
|
||||||
|
job_name = "journal";
|
||||||
|
journal = {
|
||||||
|
max_age = "12h";
|
||||||
|
labels = {
|
||||||
|
job = "systemd-journal";
|
||||||
|
host = config.networking.hostName;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
relabel_configs = [
|
||||||
|
{
|
||||||
|
source_labels = [ "__journal__systemd_unit" ];
|
||||||
|
target_label = "unit";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
source_labels = [ "__journal__transport" ];
|
||||||
|
target_label = "transport";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
99
nixos/machines/orbi/loki.nix
Normal file
99
nixos/machines/orbi/loki.nix
Normal file
|
@ -0,0 +1,99 @@
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
{
|
||||||
|
|
||||||
|
services.loki = {
|
||||||
|
enable = true;
|
||||||
|
configuration = {
|
||||||
|
server = {
|
||||||
|
http_listen_port = 3100;
|
||||||
|
log_level = "warn";
|
||||||
|
};
|
||||||
|
auth_enabled = false;
|
||||||
|
|
||||||
|
ingester = {
|
||||||
|
lifecycler = {
|
||||||
|
address = "127.0.0.1";
|
||||||
|
ring = {
|
||||||
|
kvstore = {
|
||||||
|
store = "inmemory";
|
||||||
|
};
|
||||||
|
replication_factor = 1;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
chunk_idle_period = "1h";
|
||||||
|
max_chunk_age = "1h";
|
||||||
|
chunk_target_size = 999999;
|
||||||
|
chunk_retain_period = "30s";
|
||||||
|
max_transfer_retries = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
schema_config = {
|
||||||
|
configs = [{
|
||||||
|
from = "2022-06-06";
|
||||||
|
store = "boltdb-shipper";
|
||||||
|
object_store = "filesystem";
|
||||||
|
schema = "v11";
|
||||||
|
index = {
|
||||||
|
prefix = "index_";
|
||||||
|
period = "24h";
|
||||||
|
};
|
||||||
|
}];
|
||||||
|
};
|
||||||
|
|
||||||
|
storage_config = {
|
||||||
|
boltdb_shipper = {
|
||||||
|
active_index_directory = "/var/lib/loki/boltdb-shipper-active";
|
||||||
|
cache_location = "/var/lib/loki/boltdb-shipper-cache";
|
||||||
|
cache_ttl = "24h";
|
||||||
|
shared_store = "filesystem";
|
||||||
|
};
|
||||||
|
|
||||||
|
filesystem = {
|
||||||
|
directory = "/var/lib/loki/chunks";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
limits_config = {
|
||||||
|
reject_old_samples = true;
|
||||||
|
reject_old_samples_max_age = "168h";
|
||||||
|
};
|
||||||
|
|
||||||
|
chunk_store_config = {
|
||||||
|
max_look_back_period = "0s";
|
||||||
|
};
|
||||||
|
|
||||||
|
table_manager = {
|
||||||
|
retention_deletes_enabled = false;
|
||||||
|
retention_period = "0s";
|
||||||
|
};
|
||||||
|
|
||||||
|
compactor = {
|
||||||
|
working_directory = "/var/lib/loki";
|
||||||
|
shared_store = "filesystem";
|
||||||
|
compactor_ring = {
|
||||||
|
kvstore = {
|
||||||
|
store = "inmemory";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
# user, group, dataDir, extraFlags, (configFile)
|
||||||
|
};
|
||||||
|
|
||||||
|
#services.nginx = {
|
||||||
|
# enable = true;
|
||||||
|
# virtualHosts.loki = {
|
||||||
|
# serverName = "loki.pepe.private";
|
||||||
|
# locations."/" = {
|
||||||
|
# proxyWebsockets = true;
|
||||||
|
# proxyPass = "http://127.0.0.1:3100";
|
||||||
|
# #extraConfig = ''
|
||||||
|
# # access_log off;
|
||||||
|
# # allow ${config.tinc.private.subnet};
|
||||||
|
# # deny all;
|
||||||
|
# #'';
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
#};
|
||||||
|
|
||||||
|
}
|
663
nixos/machines/orbi/mail-fetcher.nix
Normal file
663
nixos/machines/orbi/mail-fetcher.nix
Normal file
|
@ -0,0 +1,663 @@
|
||||||
|
# fetches mails for me
|
||||||
|
{ lib, pkgs, config, ... }:
|
||||||
|
let
|
||||||
|
junk_filter = [
|
||||||
|
"from:booking.com"
|
||||||
|
"subject:Gewinn"
|
||||||
|
"from:brompton.com"
|
||||||
|
"from:circleci.com OR (from:noreply@github.com AND to:audio-overlay@googlegroups.com)"
|
||||||
|
"from:codepen.io"
|
||||||
|
"from:congstarnews.de"
|
||||||
|
"from:cronullasurfingacademy.com"
|
||||||
|
"from:cryptohopper.com"
|
||||||
|
"from:digitalo.de"
|
||||||
|
"from:facebook.com OR from:facebookmail.com"
|
||||||
|
"from:fitnessfirst.de"
|
||||||
|
"from:flixbus.de"
|
||||||
|
"from:getdigital.de"
|
||||||
|
"from:getpocket.com"
|
||||||
|
"from:ghostinspector.com"
|
||||||
|
"from:globetrotter.de"
|
||||||
|
"from:hackster.io"
|
||||||
|
"from:hostelworld.com"
|
||||||
|
"from:immobilienscout24.de"
|
||||||
|
"from:kvraudio.com"
|
||||||
|
"from:letterboxd.com"
|
||||||
|
"from:linkedin.com"
|
||||||
|
"from:magix.net"
|
||||||
|
"from:mailings.gmx.net"
|
||||||
|
"from:mailings.web.de"
|
||||||
|
"from:matrix.org"
|
||||||
|
"from:menospese.com"
|
||||||
|
"from:microsoftstoreemail.com"
|
||||||
|
"from:mixcloudmail.com AND subject:Weekly Update"
|
||||||
|
"from:oknotify2.com AND NOT subject:New message"
|
||||||
|
"from:paulaschoice.com"
|
||||||
|
"from:puppet.com"
|
||||||
|
"from:runtastic.com"
|
||||||
|
"from:samplemagic.com OR from:wavealchemy.co.uk OR from:creators.gumroad.com"
|
||||||
|
"from:ticketmaster.de"
|
||||||
|
"from:trade4less.de"
|
||||||
|
"from:tumblr.com"
|
||||||
|
"from:turners.co.nz"
|
||||||
|
"from:twitch.tv"
|
||||||
|
"from:vstbuzz.com"
|
||||||
|
];
|
||||||
|
filters = [
|
||||||
|
{
|
||||||
|
query = "from:hv-geelen.de";
|
||||||
|
tags = [ "+wohnung" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:computerfutures.com OR from:computerfutures.de";
|
||||||
|
tags = [ "+jobs" "-inbox" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:seek.com.au or from:seek.co.nz";
|
||||||
|
tags = [ "+jobs" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:xing.com";
|
||||||
|
tags = [ "+jobs" "-inbox" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:no-reply@backtrace.io OR to:sononym@noreply.github.com";
|
||||||
|
tags = [ "+sononym" "-inbox" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:ebay.com OR from:ebay.de OR from:ebay.net";
|
||||||
|
tags = [ "+ebay" "+shop" "+billing" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:bahn.de";
|
||||||
|
tags = [ "+billing" "+bahn" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query =
|
||||||
|
"from:fysitech.atlassian.net OR to:engiadina-pwa@noreply.github.com";
|
||||||
|
tags = [ "+mia" "+work" "-unread" "-inbox" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query =
|
||||||
|
"from:space-left.org OR to:space-left.org OR subject:/\\[space-left\\]/";
|
||||||
|
tags = [ "+spaceleft" "+space-left" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:landr.com";
|
||||||
|
tags = [ "+landr" "+music" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "tag:landr and tag:billing";
|
||||||
|
tags = [ "+billing" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:oknotify2.com";
|
||||||
|
tags = [ "+okcupid" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:taxback.de OR to:taxback.de";
|
||||||
|
tags = [ "+steuer" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:campact.de";
|
||||||
|
tags = [ "+campact" "+politics" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:aliexpress.com";
|
||||||
|
tags = [ "+shop" "+aliexpress" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:congstar.de";
|
||||||
|
tags = [ "+billing" "+congstar" "-inbox" "-unread" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query =
|
||||||
|
"from:steampowered.com AND NOT ( subject:purchase OR subject:received )";
|
||||||
|
tags = [ "-inbox" "-unread" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query =
|
||||||
|
"from:steampowered.com AND ( subject:purchase OR subject:received )";
|
||||||
|
tags = [ "+billing" "+steam" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:gog.com AND NOT subject:Bestellung";
|
||||||
|
tags = [ "-inbox" "-unread" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:gog.com AND subject:Bestellung";
|
||||||
|
tags = [ "+billing" "+gog" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:stadtmobil.de";
|
||||||
|
tags = [ "+billing" "+stadtmobil" "-inbox" "-unread" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:drive-now.com";
|
||||||
|
tags = [ "+billing" "+drivenow" "-inbox" "-unread" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:data-treuhand.de";
|
||||||
|
tags = [ "+mindcurv" "+work" "-inbox" "-unread" "-junk" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:immocation.de";
|
||||||
|
tags = [ "+immobilien" "-inbox" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:tinc-vpn.org";
|
||||||
|
tags = [ "+tinc" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:mindfactory.de";
|
||||||
|
tags = [ "+shop" "+billing" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:zalando.de";
|
||||||
|
tags = [ "+shop" "+billing" "+zalando" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:ing.de";
|
||||||
|
tags = [ "+bank" "+ingdiba" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:nab.com.au";
|
||||||
|
tags = [ "+bank" "+nab" "-inbox" "-unread" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:dkb.de";
|
||||||
|
tags = [ "+bank" "+dkb" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:o2online.de";
|
||||||
|
tags = [ "+billing" "+o2" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:betfair.com";
|
||||||
|
tags = [ "+work" "+betfair" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:notifications@github.com";
|
||||||
|
tags = [ "+github" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "to:NUR@noreply.github.com";
|
||||||
|
tags = [ "+nur" "+nixos" "+list" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "to:nixpkgs@noreply.github.com";
|
||||||
|
tags = [ "+nixpkgs" "+nixos" "+list" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:travis-ci.org AND subject:mrVanDalo/navi";
|
||||||
|
tags = [ "+development" "+navi" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:travis-ci.org AND subject:nur-packages";
|
||||||
|
tags = [ "+development" "+nixos" "+nur-packages" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:travis-ci.org AND subject:csv-to-qif";
|
||||||
|
tags = [ "+development" "+csv-to-qif" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "to:proaudio@lists.tuxfamily.org";
|
||||||
|
tags = [ "-inbox" "-unread" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:nixos1@discoursemail.com";
|
||||||
|
tags = [ "+nixos" "+discourse" "+list" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:nixos1@discoursemail.com AND subject:Development";
|
||||||
|
tags = [ "+nixos" "+discourse" "+development" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:nixos1@discoursemail.com AND subject:Français";
|
||||||
|
tags = [ "+nixos" "+discourse" "-inbox" "-unread" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:nixos1@discoursemail.com AND subject:Announcements";
|
||||||
|
tags = [ "+nixos" "+discourse" "+announcements" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:nixos1@discoursemail.com AND subject:Links";
|
||||||
|
tags = [ "+nixos" "+discourse" "+links" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:nixos1@discoursemail.com AND subject:Games";
|
||||||
|
tags = [ "+nixos" "+discourse" "+games" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:nixos1@discoursemail.com AND subject:Meta";
|
||||||
|
tags = [ "+nixos" "+discourse" "+meta" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:nixos1@discoursemail.com AND subject:Events";
|
||||||
|
tags = [ "+nixos" "+discourse" "+events" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:limebike.com AND (subject:Funds OR subject:Receipt)";
|
||||||
|
tags = [ "-inbox" "-unread" "+billing" "+limebike" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:freemusicarchive.org";
|
||||||
|
tags = [ "+FMA" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:namecheap.com and subject:auto-renewal";
|
||||||
|
tags = [ "+namecheap" "+billing" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:namecheap.com and subject:order";
|
||||||
|
tags = [ "+namecheap" "+billing" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "tag:namecheap.com and tag:billing and body:gaykraft.com";
|
||||||
|
tags = [ "+namecheap" "+billing" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:nintendo.com";
|
||||||
|
tags = [ "+nintendo" "+billing" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:oculus.com AND subject:receipt";
|
||||||
|
tags = [ "+oculus" "+billing" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:car2go.com";
|
||||||
|
tags = [ "-inbox" "-unread" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:sixt.de";
|
||||||
|
tags = [ "-inbox" "-unread" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:meetup.com";
|
||||||
|
tags = [ "-inbox" "-unread" "+meetup" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:slack.com";
|
||||||
|
tags = [ "+slack" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:keybase.io";
|
||||||
|
tags = [ "+keybase" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:jobs2web.com";
|
||||||
|
tags = [ "+newzealand" "+jobs" "-inbox" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:paypal.de AND subject:Bestätigung";
|
||||||
|
tags = [ "-unread" "+paypal" "+billing" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "to:c-base.org";
|
||||||
|
tags = [ "+cbase" "+list" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "to:c-base.org AND subject=[auto-report]";
|
||||||
|
tags = [ "-unread" "-inbox" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:browserstack.com";
|
||||||
|
tags = [ "+browserstack" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query =
|
||||||
|
"to:renoise@ingolf-wagner.de OR to:root@renoise.com OR from:renoise.com OR to:admin@renoise.com";
|
||||||
|
tags = [ "+renoise" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:amazon.de OR from:amazon.com AND NOT to:renoise.com";
|
||||||
|
tags = [ "+shop" "+amazon" "+billing" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "from:hetzner.com OR from:hetzner.de";
|
||||||
|
tags = [ "+hetzner" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query =
|
||||||
|
"to:renoise.com AND NOT ( from:renoise.com OR from:root OR from:hetzner.com OR from:hetzner.de OR from:amazon.com OR from:gmail.com )";
|
||||||
|
tags = [ "-inbox" "-unread" "+junk" "+renoise" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "tag:hetzner and subject:Invoice";
|
||||||
|
tags = [ "+billing" ];
|
||||||
|
}
|
||||||
|
# final rules to make imap sync stuff easier
|
||||||
|
# there can only be one output folder tag, and theses rules are prioritized
|
||||||
|
{
|
||||||
|
query = "tag:fraud";
|
||||||
|
tags = [ "-inbox" "-archive" "-junk" "-unread" ];
|
||||||
|
message = "clean up tag fraud";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "tag:junk";
|
||||||
|
tags = [ "-inbox" "-archive" "-fraud" "-unread" ];
|
||||||
|
message = "clean up tag junk";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "tag:archive";
|
||||||
|
tags = [ "-inbox" "-junk" "-fraud" "-unread" ];
|
||||||
|
message = "clean up tag archive";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "tag:inbox";
|
||||||
|
tags = [ "-archive" "-junk" "-fraud" ];
|
||||||
|
message = "clean up inbox";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "tag:killed";
|
||||||
|
tags = [ "-inbox" "-unread" ];
|
||||||
|
message = "clean up tag killed";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
query = "tag:muted";
|
||||||
|
tags = [ "-inbox" "-unread" ];
|
||||||
|
}
|
||||||
|
# remove new tag at the end
|
||||||
|
{
|
||||||
|
query = "tag:new";
|
||||||
|
tags = [ "-new" ];
|
||||||
|
message = "remove new tag at the end";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
notmuchTagging =
|
||||||
|
let
|
||||||
|
|
||||||
|
template = index:
|
||||||
|
{ tags, query, message ? "generic", ... }:
|
||||||
|
let
|
||||||
|
command = ''
|
||||||
|
${pkgs.notmuch}/bin/notmuch tag ${lib.concatStringsSep " " tags} -- "${query}"
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
''
|
||||||
|
echo '${command}'
|
||||||
|
${command}
|
||||||
|
'';
|
||||||
|
junk_template = index: query:
|
||||||
|
template index {
|
||||||
|
tags = [ "+junk" "-unread" "-inbox" ];
|
||||||
|
query = query;
|
||||||
|
message = "generic junk filter";
|
||||||
|
};
|
||||||
|
|
||||||
|
in
|
||||||
|
pkgs.writers.writeBash "notmuch-tagging" (lib.concatStringsSep "\n"
|
||||||
|
((lib.imap0 junk_template junk_filter) ++ (lib.imap0 template filters)));
|
||||||
|
|
||||||
|
notmuchTaggingNew =
|
||||||
|
let
|
||||||
|
|
||||||
|
template = index:
|
||||||
|
{ tags, query, message ? "generic", ... }:
|
||||||
|
let
|
||||||
|
command = ''
|
||||||
|
${pkgs.notmuch}/bin/notmuch tag ${
|
||||||
|
lib.concatStringsSep " " tags
|
||||||
|
} -- "${query} AND tag:new"
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
''
|
||||||
|
echo '${command}'
|
||||||
|
${command}
|
||||||
|
'';
|
||||||
|
|
||||||
|
junk_template = index: query:
|
||||||
|
template index {
|
||||||
|
tags = [ "+junk" "-unread" "-inbox" ];
|
||||||
|
query = query;
|
||||||
|
message = "generic junk filter";
|
||||||
|
};
|
||||||
|
in
|
||||||
|
pkgs.writers.writeBash "notmuch-tagging-new" (lib.concatStringsSep "\n"
|
||||||
|
((lib.imap0 junk_template junk_filter) ++ (lib.imap0 template filters)));
|
||||||
|
|
||||||
|
in
|
||||||
|
{
|
||||||
|
|
||||||
|
backup.dirs = [ "/home/mailfetcher" ];
|
||||||
|
|
||||||
|
users.users.mailUser = {
|
||||||
|
isNormalUser = true;
|
||||||
|
description = "collects mails for me";
|
||||||
|
hashedPassword = "!";
|
||||||
|
name = "mailfetcher";
|
||||||
|
home = "/home/mailfetcher";
|
||||||
|
openssh.authorizedKeys.keyFiles =
|
||||||
|
config.users.users.root.openssh.authorizedKeys.keyFiles;
|
||||||
|
group = "mailfetcher";
|
||||||
|
};
|
||||||
|
|
||||||
|
users.groups.mailUser = {
|
||||||
|
name = "mailfetcher";
|
||||||
|
};
|
||||||
|
|
||||||
|
sops.secrets.mail_terranix = {
|
||||||
|
owner = config.users.users.mailUser.name;
|
||||||
|
group = config.users.users.mailUser.group;
|
||||||
|
};
|
||||||
|
sops.secrets.mail_gmail = {
|
||||||
|
owner = config.users.users.mailUser.name;
|
||||||
|
group = config.users.users.mailUser.group;
|
||||||
|
};
|
||||||
|
sops.secrets.mail_gmx_palo = {
|
||||||
|
owner = config.users.users.mailUser.name;
|
||||||
|
group = config.users.users.mailUser.group;
|
||||||
|
};
|
||||||
|
sops.secrets.mail_gmx_ingolf = {
|
||||||
|
owner = config.users.users.mailUser.name;
|
||||||
|
group = config.users.users.mailUser.group;
|
||||||
|
};
|
||||||
|
sops.secrets.mail_web = {
|
||||||
|
owner = config.users.users.mailUser.name;
|
||||||
|
group = config.users.users.mailUser.group;
|
||||||
|
};
|
||||||
|
sops.secrets.mail_siteground = {
|
||||||
|
owner = config.users.users.mailUser.name;
|
||||||
|
group = config.users.users.mailUser.group;
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.systemPackages = [ pkgs.muchsync ];
|
||||||
|
|
||||||
|
# configure accounts
|
||||||
|
home-manager.users.mailUser.accounts.email = {
|
||||||
|
accounts = {
|
||||||
|
|
||||||
|
palo_van_dalo-gmx = {
|
||||||
|
primary = false;
|
||||||
|
address = "palo_van_dalo@gmx.de";
|
||||||
|
aliases = [ ];
|
||||||
|
realName = "Ingolf Wagner";
|
||||||
|
userName = "palo_van_dalo@gmx.de";
|
||||||
|
passwordCommand =
|
||||||
|
"cat ${toString config.sops.secrets.mail_gmx_palo.path }";
|
||||||
|
imap = {
|
||||||
|
host = "imap.gmx.net";
|
||||||
|
tls.enable = true;
|
||||||
|
port = 993;
|
||||||
|
};
|
||||||
|
mbsync = {
|
||||||
|
enable = true;
|
||||||
|
create = "both";
|
||||||
|
};
|
||||||
|
notmuch.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
ingolf-wagner-gmx = {
|
||||||
|
primary = false;
|
||||||
|
address = "ingolf.wagner@gmx.de";
|
||||||
|
aliases = [ ];
|
||||||
|
realName = "Ingolf Wagner";
|
||||||
|
userName = "ingolf.wagner@gmx.de";
|
||||||
|
passwordCommand =
|
||||||
|
"cat ${toString config.sops.secrets.mail_gmx_ingolf.path }";
|
||||||
|
imap = {
|
||||||
|
host = "imap.gmx.net";
|
||||||
|
tls.enable = true;
|
||||||
|
port = 993;
|
||||||
|
};
|
||||||
|
mbsync = {
|
||||||
|
enable = true;
|
||||||
|
create = "both";
|
||||||
|
};
|
||||||
|
notmuch.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
pali_palo = {
|
||||||
|
primary = false;
|
||||||
|
address = "pali_palo@web.de";
|
||||||
|
aliases = [ ];
|
||||||
|
realName = "Ingolf Wagner";
|
||||||
|
userName = "pali_palo@web.de";
|
||||||
|
passwordCommand =
|
||||||
|
"cat ${toString config.sops.secrets.mail_web.path }";
|
||||||
|
imap = {
|
||||||
|
host = "imap.web.de";
|
||||||
|
tls.enable = true;
|
||||||
|
port = 993;
|
||||||
|
};
|
||||||
|
mbsync = {
|
||||||
|
enable = true;
|
||||||
|
create = "both";
|
||||||
|
};
|
||||||
|
notmuch.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
gmail = {
|
||||||
|
# for google accounts you have to allow 'less secure apps' in accounts.google.com
|
||||||
|
primary = true;
|
||||||
|
address = "palipalo9@googlemail.com";
|
||||||
|
aliases = [ ];
|
||||||
|
realName = "Ingolf Wagner";
|
||||||
|
userName = "palipalo9@googlemail.com";
|
||||||
|
passwordCommand =
|
||||||
|
"cat ${toString config.sops.secrets.mail_gmail.path }";
|
||||||
|
imap = {
|
||||||
|
host = "imap.gmail.com";
|
||||||
|
tls.enable = true;
|
||||||
|
port = 993;
|
||||||
|
};
|
||||||
|
mbsync = {
|
||||||
|
enable = true;
|
||||||
|
create = "both";
|
||||||
|
};
|
||||||
|
notmuch.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
terranix_org = {
|
||||||
|
primary = false;
|
||||||
|
address = "palo@terranix.org";
|
||||||
|
aliases = [ ];
|
||||||
|
realName = "Ingolf Wagner";
|
||||||
|
userName = "palo@terranix.org";
|
||||||
|
passwordCommand = "cat ${toString config.sops.secrets.mail_terranix.path }";
|
||||||
|
imap = {
|
||||||
|
host = "mail.privateemail.com";
|
||||||
|
tls.enable = true;
|
||||||
|
port = 993;
|
||||||
|
};
|
||||||
|
mbsync = {
|
||||||
|
enable = true;
|
||||||
|
create = "both";
|
||||||
|
};
|
||||||
|
notmuch.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
ingolf-wagner-de = {
|
||||||
|
primary = false;
|
||||||
|
address = "contact@ingolf-wagner.de";
|
||||||
|
aliases = [ ];
|
||||||
|
realName = "Ingolf Wagner";
|
||||||
|
userName = "contact@ingolf-wagner.de";
|
||||||
|
passwordCommand =
|
||||||
|
"cat ${toString config.sops.secrets.mail_siteground.path }";
|
||||||
|
imap = {
|
||||||
|
host = "securees5.sgcpanel.com";
|
||||||
|
port = 993;
|
||||||
|
tls.enable = true;
|
||||||
|
#tls.useStartTls = true;
|
||||||
|
};
|
||||||
|
# make sure the upstream mail is deleted
|
||||||
|
getmail = {
|
||||||
|
enable = true;
|
||||||
|
delete = true;
|
||||||
|
readAll = false;
|
||||||
|
mailboxes = [ "ALL" ];
|
||||||
|
};
|
||||||
|
notmuch.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
home-manager.users.mailUser.home.stateVersion = "22.11";
|
||||||
|
|
||||||
|
# configure mbsync
|
||||||
|
home-manager.users.mailUser.programs.mbsync.enable = true;
|
||||||
|
|
||||||
|
# re-tag everything once a day
|
||||||
|
systemd.services.retagmail = {
|
||||||
|
enable = true;
|
||||||
|
serviceConfig = { User = config.users.users.mailUser.name; };
|
||||||
|
environment.NOTMUCH_CONFIG =
|
||||||
|
"${config.users.users.mailUser.home}/.config/notmuch/notmuchrc";
|
||||||
|
script = "${notmuchTagging}";
|
||||||
|
};
|
||||||
|
systemd.timers.retagmail = {
|
||||||
|
enable = true;
|
||||||
|
timerConfig = {
|
||||||
|
OnCalendar = "daily";
|
||||||
|
Persistent = "true";
|
||||||
|
};
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
# fetch mails every 10 minutes
|
||||||
|
systemd.services.fetchmail =
|
||||||
|
let
|
||||||
|
threadTag = tag: ''
|
||||||
|
echo "tag threads with ${tag}"
|
||||||
|
${pkgs.notmuch}/bin/notmuch tag +${tag} $(${pkgs.notmuch}/bin/notmuch search --output=threads tag:${tag})
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
{
|
||||||
|
enable = true;
|
||||||
|
serviceConfig = { User = config.users.users.mailUser.name; };
|
||||||
|
environment.NOTMUCH_CONFIG =
|
||||||
|
"${config.users.users.mailUser.home}/.config/notmuch/notmuchrc";
|
||||||
|
script = ''
|
||||||
|
echo "run mbsync"
|
||||||
|
${pkgs.isync}/bin/mbsync \
|
||||||
|
--all
|
||||||
|
echo "run getmail"
|
||||||
|
${pkgs.getmail}/bin/getmail \
|
||||||
|
--quiet \
|
||||||
|
--rcfile getmailingolf-wagner-de
|
||||||
|
|
||||||
|
echo "run notmuch"
|
||||||
|
${pkgs.notmuch}/bin/notmuch new
|
||||||
|
${notmuchTaggingNew}
|
||||||
|
${threadTag "muted"}
|
||||||
|
${threadTag "wohnung"}
|
||||||
|
${threadTag "flagged"}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
systemd.timers.fetchmail = {
|
||||||
|
enable = true;
|
||||||
|
# timerConfig.OnCalendar = " *-*-* *:00:00";
|
||||||
|
timerConfig.OnCalendar = "*:0/10";
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
# configure notmuch
|
||||||
|
home-manager.users.mailUser.programs.notmuch = {
|
||||||
|
enable = true;
|
||||||
|
new.tags = [ "unread" "inbox" "new" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
|
@ -89,8 +89,8 @@ in
|
||||||
|
|
||||||
config = { config, lib, ... }: {
|
config = { config, lib, ... }: {
|
||||||
nixpkgs.pkgs = pkgs;
|
nixpkgs.pkgs = pkgs;
|
||||||
imports = [ ../../components/monitor/container.nix ];
|
imports = [ ./container-monitoring.nix ];
|
||||||
components.monitor.container.promtail.port = 3502;
|
promtail.port = 3502;
|
||||||
system.stateVersion = "23.11";
|
system.stateVersion = "23.11";
|
||||||
|
|
||||||
# Configuring nameservers for containers is currently broken.
|
# Configuring nameservers for containers is currently broken.
|
||||||
|
|
|
@ -25,8 +25,8 @@ in
|
||||||
|
|
||||||
config = { config, lib, ... }: {
|
config = { config, lib, ... }: {
|
||||||
nixpkgs.pkgs = pkgs;
|
nixpkgs.pkgs = pkgs;
|
||||||
imports = [ ../../components/monitor/container.nix ];
|
imports = [ ./container-monitoring.nix ];
|
||||||
components.monitor.container.promtail.port = 3505;
|
promtail.port = 3505;
|
||||||
system.stateVersion = "21.05";
|
system.stateVersion = "21.05";
|
||||||
services.journald.extraConfig = "SystemMaxUse=1G";
|
services.journald.extraConfig = "SystemMaxUse=1G";
|
||||||
|
|
||||||
|
|
40
nixos/machines/orbi/media-unmanic.nix
Normal file
40
nixos/machines/orbi/media-unmanic.nix
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
{
|
||||||
|
|
||||||
|
virtualisation.oci-containers = {
|
||||||
|
containers.unmanic = {
|
||||||
|
volumes = [
|
||||||
|
"/media/arr/unmanic/config:/config"
|
||||||
|
#"/media/arr/unmanic/library:/library"
|
||||||
|
"/media/arr/unmanic/tmp:/tmp/unmanic"
|
||||||
|
"/media:/library"
|
||||||
|
];
|
||||||
|
environment = {
|
||||||
|
PUID = toString config.users.users.media.uid;
|
||||||
|
PGID = toString config.users.groups.media.gid;
|
||||||
|
};
|
||||||
|
ports = [
|
||||||
|
"127.0.0.1:8889:8888"
|
||||||
|
];
|
||||||
|
image = "josh5/unmanic:latest";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
#networking.firewall.interfaces.wg0.allowedTCPPorts = [ 8266 ];
|
||||||
|
#networking.firewall.interfaces.wg0.allowedUDPPorts = [ 8266 ];
|
||||||
|
|
||||||
|
#networking.firewall.interfaces.enp0s31f6.allowedTCPPorts = [ 8266 ];
|
||||||
|
#networking.firewall.interfaces.enp0s31f6.allowedUDPPorts = [ 8266 ];
|
||||||
|
|
||||||
|
services.nginx.virtualHosts."unmanic.${config.networking.hostName}.private" = {
|
||||||
|
extraConfig = ''
|
||||||
|
allow ${config.tinc.private.subnet};
|
||||||
|
deny all;
|
||||||
|
'';
|
||||||
|
locations."/" = {
|
||||||
|
proxyPass = "http://localhost:8889";
|
||||||
|
proxyWebsockets = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
20
nixos/machines/orbi/mysql.nix
Normal file
20
nixos/machines/orbi/mysql.nix
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
{ pkgs, lib, config, ... }: {
|
||||||
|
|
||||||
|
services.mysql = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.mysql80;
|
||||||
|
initialScript = pkgs.writeText "initScript" ''
|
||||||
|
CREATE USER 'admin'@'%' IDENTIFIED BY 'admin';
|
||||||
|
GRANT ALL PRIVILEGES ON * . * TO 'admin'@'%';
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
services.mysqlBackup = {
|
||||||
|
enable = true;
|
||||||
|
databases = [ "property" ];
|
||||||
|
#user = "admin";
|
||||||
|
};
|
||||||
|
|
||||||
|
backup.dirs = [ config.services.mysqlBackup.location ];
|
||||||
|
|
||||||
|
}
|
|
@ -15,8 +15,8 @@ in
|
||||||
|
|
||||||
config = { config, lib, ... }: {
|
config = { config, lib, ... }: {
|
||||||
nixpkgs.pkgs = pkgs;
|
nixpkgs.pkgs = pkgs;
|
||||||
imports = [ ../../components/monitor/container.nix ];
|
imports = [ ./container-monitoring.nix ];
|
||||||
components.monitor.container.promtail.port = 3503;
|
promtail.port = 3503;
|
||||||
system.stateVersion = "23.11";
|
system.stateVersion = "23.11";
|
||||||
|
|
||||||
# Photoprism
|
# Photoprism
|
||||||
|
|
|
@ -70,8 +70,8 @@ in
|
||||||
|
|
||||||
config = { config, lib, ... }: {
|
config = { config, lib, ... }: {
|
||||||
nixpkgs.pkgs = pkgs;
|
nixpkgs.pkgs = pkgs;
|
||||||
imports = [ ../../components/monitor/container.nix ];
|
imports = [ ./container-monitoring.nix ];
|
||||||
components.monitor.container.promtail.port = 3504;
|
promtail.port = 3504;
|
||||||
system.stateVersion = "23.11";
|
system.stateVersion = "23.11";
|
||||||
|
|
||||||
services.postgresql = {
|
services.postgresql = {
|
||||||
|
|
5
nixos/machines/orbi/sync-opentracker.nix
Normal file
5
nixos/machines/orbi/sync-opentracker.nix
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
services.opentracker = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
}
|
111
nixos/machines/orbi/sync-torrent.nix
Normal file
111
nixos/machines/orbi/sync-torrent.nix
Normal file
|
@ -0,0 +1,111 @@
|
||||||
|
{ lib, pkgs, config, ... }:
|
||||||
|
let
|
||||||
|
uiPort = 9099;
|
||||||
|
announceIp = "10.23.42.111";
|
||||||
|
peerPort = 51433;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
|
||||||
|
containers.sync-torrent = {
|
||||||
|
|
||||||
|
# mount host folders
|
||||||
|
bindMounts = {
|
||||||
|
media = {
|
||||||
|
hostPath = "/media/new";
|
||||||
|
mountPoint = "/media"; # must be here otherwise transmission can't see the folder
|
||||||
|
isReadOnly = false;
|
||||||
|
};
|
||||||
|
lib = {
|
||||||
|
hostPath = "/srv/sync-torrent";
|
||||||
|
mountPoint = "/var/lib/transmission";
|
||||||
|
isReadOnly = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
autoStart = true;
|
||||||
|
|
||||||
|
config = { config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
|
system.stateVersion = "22.11";
|
||||||
|
services.journald.extraConfig = "SystemMaxUse=1G";
|
||||||
|
|
||||||
|
services.transmission = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
download-dir = "/media";
|
||||||
|
incomplete-dir = "/var/lib/transmission/incomplete"; # todo put this somewhere with frequent snapshots but low keep.
|
||||||
|
incomplete-dir-enabled = true;
|
||||||
|
message-level = 1;
|
||||||
|
umask = 2;
|
||||||
|
rpc-whitelist-enabled = false;
|
||||||
|
rpc-host-whitelist-enabled = false;
|
||||||
|
rpc-port = uiPort;
|
||||||
|
rpc-enable = true;
|
||||||
|
rpc-bind-address = "0.0.0.0";
|
||||||
|
|
||||||
|
# "normal" speed limits
|
||||||
|
speed-limit-down-enabled = false;
|
||||||
|
speed-limit-down = 800;
|
||||||
|
speed-limit-up-enabled = true;
|
||||||
|
speed-limit-up = 3000;
|
||||||
|
upload-slots-per-torrent = 8;
|
||||||
|
# Queuing
|
||||||
|
# When true, Transmission will only download
|
||||||
|
# download-queue-size non-stalled torrents at once.
|
||||||
|
download-queue-enabled = true;
|
||||||
|
download-queue-size = 3;
|
||||||
|
|
||||||
|
# When true, torrents that have not shared data for
|
||||||
|
# queue-stalled-minutes are treated as 'stalled'
|
||||||
|
# and are not counted against the queue-download-size
|
||||||
|
# and seed-queue-size limits.
|
||||||
|
queue-stalled-enabled = true;
|
||||||
|
queue-stalled-minutes = 60;
|
||||||
|
|
||||||
|
# When true. Transmission will only seed seed-queue-size
|
||||||
|
# non-stalled torrents at once.
|
||||||
|
seed-queue-enabled = false;
|
||||||
|
seed-queue-size = 10;
|
||||||
|
|
||||||
|
# Enable UPnP or NAT-PMP.
|
||||||
|
peer-port = peerPort;
|
||||||
|
port-forwarding-enabled = false;
|
||||||
|
announce-ip = announceIp;
|
||||||
|
announce-ip-enabled = true;
|
||||||
|
|
||||||
|
# Start torrents as soon as they are added
|
||||||
|
start-added-torrents = true;
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# open ports for logging
|
||||||
|
#networking.firewall.interfaces."ve-torrent".allowedTCPPorts =
|
||||||
|
# [ 5044 12304 12305 ];
|
||||||
|
#networking.firewall.interfaces."ve-torrent".allowedUDPPorts =
|
||||||
|
# [ 5044 12304 12305 ];
|
||||||
|
|
||||||
|
# host nginx setup
|
||||||
|
# ----------------
|
||||||
|
# curl -H "Host: sync.robi.private" https://robi.private/ < will work
|
||||||
|
# curl -H "Host: sync.robi.private" https://144.76.13.147/ < wont work
|
||||||
|
services.nginx = {
|
||||||
|
enable = true;
|
||||||
|
recommendedProxySettings = true;
|
||||||
|
virtualHosts = {
|
||||||
|
"sync.${config.networking.hostName}.private" = {
|
||||||
|
extraConfig = ''
|
||||||
|
allow ${config.tinc.private.subnet};
|
||||||
|
deny all;
|
||||||
|
'';
|
||||||
|
locations."/" = {
|
||||||
|
proxyPass = "http://127.0.0.1:${toString uiPort}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
45
nixos/machines/orbi/webhook-ring.nix
Normal file
45
nixos/machines/orbi/webhook-ring.nix
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
# To create a sign at the door
|
||||||
|
# "Sorry Doorbell is broken, please scan this QR Code
|
||||||
|
#
|
||||||
|
# create QR Code with:
|
||||||
|
# qrencode -o ./test.png http://ring.ingolf-wagner.de
|
||||||
|
#
|
||||||
|
# for secure urls check
|
||||||
|
# https://www.nginx.com/blog/securing-urls-secure-link-module-nginx-plus/
|
||||||
|
{
|
||||||
|
|
||||||
|
sops.secrets.ringPushover = {
|
||||||
|
owner = config.services.webhook.user;
|
||||||
|
};
|
||||||
|
|
||||||
|
services.webhook = {
|
||||||
|
enable = true;
|
||||||
|
hooks = {
|
||||||
|
ring = {
|
||||||
|
execute-command =
|
||||||
|
let
|
||||||
|
script = pkgs.writers.writeBash "ring-script" ''
|
||||||
|
. ${config.sops.secrets.ringPushover.path}
|
||||||
|
${pkgs.curl}/bin/curl -s \
|
||||||
|
--form-string "token=$API_KEY" \
|
||||||
|
--form-string "user=$USER_KEY" \
|
||||||
|
--form-string "title=Klingeling" \
|
||||||
|
--form-string "message=Jemand an der Tür" \
|
||||||
|
https://api.pushover.net/1/messages.json
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
toString script;
|
||||||
|
response-message = "It's ringing";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.nginx.virtualHosts."ring.ingolf-wagner.de" = {
|
||||||
|
enableACME = true;
|
||||||
|
forceSSL = true;
|
||||||
|
locations."/" = {
|
||||||
|
proxyPass = "http://localhost:${toString config.services.webhook.port}/${config.services.webhook.urlPrefix}/ring";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
38
nixos/machines/orbi/weechat.nix
Normal file
38
nixos/machines/orbi/weechat.nix
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
{ config, pkgs, lib, ... }:
|
||||||
|
|
||||||
|
# how to setup a relay
|
||||||
|
# * ssh on the maching
|
||||||
|
# * sudo -u weechat screen -r
|
||||||
|
# /set relay.network.password "mypassword"
|
||||||
|
# /relay add weechat 10000
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
# configure weechat
|
||||||
|
services.weechat = { enable = true; };
|
||||||
|
|
||||||
|
# configure bitlbee
|
||||||
|
services.bitlbee = {
|
||||||
|
enable = true;
|
||||||
|
libpurple_plugins = [
|
||||||
|
#pkgs.pidgin-otr
|
||||||
|
#pkgs.purple-facebook
|
||||||
|
#pkgs.purple-discord
|
||||||
|
#pkgs.purple-matrix
|
||||||
|
#pkgs.purple-hangouts
|
||||||
|
#pkgs.pidgin-latex
|
||||||
|
#pkgs.pidgin-opensteamworks
|
||||||
|
#pkgs.pidgin-skypeweb
|
||||||
|
pkgs.telegram-purple
|
||||||
|
#pkgs.purple-lurch
|
||||||
|
];
|
||||||
|
plugins =
|
||||||
|
[ pkgs.bitlbee-facebook pkgs.bitlbee-steam pkgs.bitlbee-mastodon ];
|
||||||
|
};
|
||||||
|
|
||||||
|
# otherwise xterm is the only thing that works
|
||||||
|
environment.systemPackages = [ pkgs.rxvt_unicode ];
|
||||||
|
|
||||||
|
backup.dirs = [ config.services.weechat.root ];
|
||||||
|
|
||||||
|
}
|
|
@ -9,6 +9,11 @@
|
||||||
./packages.nix
|
./packages.nix
|
||||||
./syncthing.nix
|
./syncthing.nix
|
||||||
./tinc.nix
|
./tinc.nix
|
||||||
|
# ./trilium.nix
|
||||||
|
|
||||||
|
#./wifi-access-point.nix
|
||||||
|
#./wireshark.nix
|
||||||
|
#./qemu.nix
|
||||||
./wireguard.nix
|
./wireguard.nix
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|
|
@ -87,6 +87,8 @@ in
|
||||||
|
|
||||||
bitwarden
|
bitwarden
|
||||||
|
|
||||||
|
unstable.trilium-desktop
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|
||||||
home-manager.users.mainUser = {
|
home-manager.users.mainUser = {
|
||||||
|
|
19
nixos/machines/sterni/trilium.nix
Normal file
19
nixos/machines/sterni/trilium.nix
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
{
|
||||||
|
|
||||||
|
services.trilium-server = {
|
||||||
|
enable = true;
|
||||||
|
instanceName = config.networking.hostName;
|
||||||
|
host = "10.23.42.27";
|
||||||
|
nginx = {
|
||||||
|
enable = true;
|
||||||
|
hostName = "trilium.${config.networking.hostName}.private";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.nginx.virtualHosts."${config.services.trilium-server.nginx.hostName}".extraConfig = ''
|
||||||
|
allow ${config.tinc.private.subnet};
|
||||||
|
deny all;
|
||||||
|
'';
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in a new issue