aboutsummaryrefslogtreecommitdiff
path: root/nixos/modules
diff options
context:
space:
mode:
authorKarel Kočí <cynerd@email.cz>2024-04-16 10:18:26 +0200
committerKarel Kočí <cynerd@email.cz>2024-04-16 10:18:26 +0200
commit2fcf002e3abff092eafd098fadafa15ea579aae4 (patch)
tree7d5c1617ff3867313c5a373fdd7f2c4ae4c06495 /nixos/modules
parente9fcc90c41dbccbb18c7b7314096b854b21ee02a (diff)
downloadnixos-personal-2fcf002e3abff092eafd098fadafa15ea579aae4.tar.gz
nixos-personal-2fcf002e3abff092eafd098fadafa15ea579aae4.tar.bz2
nixos-personal-2fcf002e3abff092eafd098fadafa15ea579aae4.zip
Move from i3blocks to waybar and use fixed bcg
Diffstat (limited to 'nixos/modules')
-rw-r--r--nixos/modules/bcg.nix170
-rw-r--r--nixos/modules/default.nix8
-rw-r--r--nixos/modules/desktop.nix6
3 files changed, 181 insertions, 3 deletions
diff --git a/nixos/modules/bcg.nix b/nixos/modules/bcg.nix
new file mode 100644
index 0000000..626a67f
--- /dev/null
+++ b/nixos/modules/bcg.nix
@@ -0,0 +1,170 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+
+with lib;
+
+let
+ cfg = config.services.bcg;
+ configFile = (pkgs.formats.yaml {}).generate "bcg.conf.yaml" (
+ filterAttrsRecursive (n: v: v != null) {
+ inherit (cfg) device name mqtt;
+ retain_node_messages = cfg.retainNodeMessages;
+ qos_node_messages = cfg.qosNodeMessages;
+ base_topic_prefix = cfg.baseTopicPrefix;
+ automatic_remove_kit_from_names = cfg.automaticRemoveKitFromNames;
+ automatic_rename_kit_nodes = cfg.automaticRenameKitNodes;
+ automatic_rename_generic_nodes = cfg.automaticRenameGenericNodes;
+ automatic_rename_nodes = cfg.automaticRenameNodes;
+ }
+ );
+in
+{
+ options = {
+ services.bcg = {
+ enable = mkEnableOption "BigClown gateway";
+ package = mkPackageOption pkgs [ "python3Packages" "bcg" ] { };
+ environmentFiles = mkOption {
+ type = types.listOf types.path;
+ default = [];
+ example = [ "/run/keys/bcg.env" ];
+ description = ''
+ File to load as environment file. Environment variables from this file
+ will be interpolated into the config file using envsubst with this
+ syntax: `$ENVIRONMENT` or `''${VARIABLE}`.
+ This is useful to avoid putting secrets into the nix store.
+ '';
+ };
+ verbose = mkOption {
+ type = types.enum ["CRITICAL" "ERROR" "WARNING" "INFO" "DEBUG"];
+ default = "WARNING";
+ description = "Verbosity level.";
+ };
+ device = mkOption {
+ type = types.str;
+ description = "Device name to configure gateway to use.";
+ };
+ name = mkOption {
+ type = with types; nullOr str;
+ default = null;
+ description = ''
+ Name for the device.
+
+ Supported variables:
+ * `{ip}` IP address
+ * `{id}` The ID of the connected usb-dongle or core-module
+
+ `null` can be used for automatic detection from gateway firmware.
+ '';
+ };
+ mqtt = {
+ host = mkOption {
+ type = types.str;
+ default = "127.0.0.1";
+ description = "Host where MQTT server is running.";
+ };
+ port = mkOption {
+ type = types.port;
+ default = 1883;
+ description = "Port of MQTT server.";
+ };
+ username = mkOption {
+ type = with types; nullOr str;
+ default = null;
+ description = "MQTT server access username.";
+ };
+ password = mkOption {
+ type = with types; nullOr str;
+ default = null;
+ description = "MQTT server access password.";
+ };
+ cafile = mkOption {
+ type = with types; nullOr str;
+ default = null;
+ description = "Certificate Authority file for MQTT server access.";
+ };
+ certfile = mkOption {
+ type = with types; nullOr str;
+ default = null;
+ description = "Certificate file for MQTT server access.";
+ };
+ keyfile = mkOption {
+ type = with types; nullOr str;
+ default = null;
+ description = "Key file for MQTT server access.";
+ };
+ };
+ retainNodeMessages = mkOption {
+ type = types.bool;
+ default = false;
+ description = "Specify that node messages should be retaied in MQTT broker.";
+ };
+ qosNodeMessages = mkOption {
+ type = types.int;
+ default = 1;
+ description = "Set the guarantee of MQTT message delivery.";
+ };
+ baseTopicPrefix = mkOption {
+ type = types.str;
+ default = "";
+ description = "Topic prefix added to all MQTT messages.";
+ };
+ automaticRemoveKitFromNames = mkOption {
+ type = types.bool;
+ default = true;
+ description = "Automatically remove kits.";
+ };
+ automaticRenameKitNodes = mkOption {
+ type = types.bool;
+ default = true;
+ description = "Automatically rename kit's nodes.";
+ };
+ automaticRenameGenericNodes = mkOption {
+ type = types.bool;
+ default = true;
+ description = "Automatically rename generic nodes.";
+ };
+ automaticRenameNodes = mkOption {
+ type = types.bool;
+ default = true;
+ description = "Automatically rename all nodes.";
+ };
+ rename = mkOption {
+ type = with types; attrsOf str;
+ default = {};
+ description = "Rename nodes to different name.";
+ };
+ };
+ };
+
+ config = mkIf cfg.enable {
+ environment.systemPackages = with pkgs; [
+ python3Packages.bcg
+ python3Packages.bch
+ ];
+
+ systemd.services.bcg = let
+ envConfig = cfg.environmentFiles != [];
+ finalConfig = if envConfig
+ then "$RUNTIME_DIRECTORY/bcg.config.yaml"
+ else configFile;
+ in {
+ description = "BigClown Gateway";
+ wantedBy = [ "multi-user.target" ];
+ wants = [ "network-online.target" ] ++ lib.optional config.services.mosquitto.enable "mosquitto.service";
+ after = [ "network-online.target" ];
+ preStart = ''
+ umask 077
+ ${pkgs.envsubst}/bin/envsubst -i "${configFile}" -o "${finalConfig}"
+ '';
+ serviceConfig = {
+ EnvironmentFile = cfg.environmentFiles;
+ ExecStart="${cfg.package}/bin/bcg -c ${finalConfig} -v ${cfg.verbose}";
+ RuntimeDirectory = "bcg";
+ };
+ };
+ };
+}
diff --git a/nixos/modules/default.nix b/nixos/modules/default.nix
index c47228b..90a4b58 100644
--- a/nixos/modules/default.nix
+++ b/nixos/modules/default.nix
@@ -13,4 +13,10 @@
v == "regular" && n != "default.nix" && hasSuffix ".nix" n
) (readDir ./.));
in
- modules // {default.imports = attrValues modules ++ default_modules;}
+ modules
+ // {
+ default = {
+ imports = attrValues modules ++ default_modules;
+ disabledModules = [ "services/misc/bcg.nix" ];
+ };
+ }
diff --git a/nixos/modules/desktop.nix b/nixos/modules/desktop.nix
index 87f18e8..2e67730 100644
--- a/nixos/modules/desktop.nix
+++ b/nixos/modules/desktop.nix
@@ -4,7 +4,7 @@
pkgs,
...
}: let
- inherit (lib) mkOption mkIf types optionals;
+ inherit (lib) mkOption mkIf mkDefault types optionals;
cnf = config.cynerd.desktop;
in {
options = {
@@ -32,11 +32,11 @@ in {
gnome.dconf-editor
glib
gsettings-desktop-schemas
- i3blocks
sysstat
wofi
rofimoji
wev
+ waybar
swaybackground
myswaylock
@@ -226,6 +226,8 @@ in {
];
};
+ services.upower.enable = mkDefault cnf.laptop;
+
services.avahi.enable = true;
services.samba-wsdd = {
enable = true;