diff --git a/flake.lock b/flake.lock index 4f97a04..7dd29ac 100644 --- a/flake.lock +++ b/flake.lock @@ -135,9 +135,36 @@ "nixpkgs": "nixpkgs", "nixpkgs-asterisk": "nixpkgs-asterisk", "nixpkgs-unstable": "nixpkgs-unstable", + "sbruder-overlay": "sbruder-overlay", "sops-nix": "sops-nix" } }, + "sbruder-overlay": { + "inputs": { + "flake-utils": [ + "flake-utils" + ], + "nix-pre-commit-hooks": [ + "nix-pre-commit-hooks" + ], + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1638388788, + "narHash": "sha256-4t+iDoZO9X8fM1cWfbCbsIagRN0PRkpGcJKaMLJE7yc=", + "owner": "sbruder", + "repo": "nixpkgs-overlay", + "rev": "72d323ca0410a08abc2d981b812c5cd0fd3338bf", + "type": "github" + }, + "original": { + "owner": "sbruder", + "repo": "nixpkgs-overlay", + "type": "github" + } + }, "sops-nix": { "inputs": { "nixpkgs": [ diff --git a/flake.nix b/flake.nix index 1364d6b..d287280 100644 --- a/flake.nix +++ b/flake.nix @@ -20,6 +20,11 @@ sops-nix.url = "github:Mic92/sops-nix"; sops-nix.inputs.nixpkgs.follows = "nixpkgs"; + + sbruder-overlay.url = "github:sbruder/nixpkgs-overlay"; + sbruder-overlay.inputs.flake-utils.follows = "flake-utils"; + sbruder-overlay.inputs.nix-pre-commit-hooks.follows = "nix-pre-commit-hooks"; + sbruder-overlay.inputs.nixpkgs.follows = "nixpkgs"; }; outputs = diff --git a/machines/party/configuration.nix b/machines/party/configuration.nix index ca1259e..9d3e0e6 100644 --- a/machines/party/configuration.nix +++ b/machines/party/configuration.nix @@ -3,6 +3,7 @@ { imports = [ ./hardware-configuration.nix + ./services ]; console.keyMap = "de"; diff --git a/machines/party/services/colorchord.nix b/machines/party/services/colorchord.nix new file mode 100644 index 0000000..1c35254 --- /dev/null +++ b/machines/party/services/colorchord.nix @@ -0,0 +1,87 @@ +{ inputs, lib, pkgs, ... }: +let + devices = { + traverse = { + leds = 116; + host = "wled-Traverse"; + }; + nhecke = { + leds = 75; + host = "wled-Nhecke"; + }; + printerbench = { + leds = 80; + host = "wled-Printerbench"; + }; + resedaraum = { + leds = 285; + host = "wled-Resedaraum"; + loop = true; + }; + kanister = { + leds = 43; + host = "wled-Kanister"; + }; + }; +in +{ + environment.systemPackages = with pkgs; [ + colorchord2 + ]; + + environment.etc = lib.mapAttrs' + (name: config: lib.nameValuePair + "colorchord/${name}.conf" + { + text = '' + # Basic + outdrivers = DisplayNetwork, OutputLinear + headless = 1 + + # Audio input + amplify = 10 + samplerate = 48000 + devrecord = alsa_output.usb-BurrBrown_from_Texas_Instruments_USB_AUDIO_CODEC-00.analog-stereo.monitor + + # Visualiser + cpu_autolimit = 1 + satamp = 1 + + # LED config + leds = ${toString config.leds} + is_loop = ${if config ? loop && config.loop then "1" else "0"} + light_siding = 1.5 + led_floor = 0.1 + steady_bright = 1 + fliprg = 0 + + # WLED + wled_realtime = 1 + port = 19446 + address = ${config.host} + wled_timeout = 2 + skipfirst = 0 + ''; + }) + devices; + + systemd.user.services."colorchord@" = { + partOf = [ "colorchord.target" ]; + serviceConfig = { + ExecStart = '' + ${pkgs.colorchord2}/bin/colorchord /etc/colorchord/%i.conf + ''; + Restart = "always"; + }; + }; + + systemd.user.targets."colorchord" = { + wantedBy = [ "graphical-session.target" ]; + partOf = [ "graphical-session.target" ]; + wants = map (name: "colorchord@${name}.service") (lib.attrNames devices); + }; + + nixpkgs.overlays = with inputs; [ + sbruder-overlay.overlay + ]; +} diff --git a/machines/party/services/default.nix b/machines/party/services/default.nix new file mode 100644 index 0000000..57dd7cf --- /dev/null +++ b/machines/party/services/default.nix @@ -0,0 +1,5 @@ +{ + imports = [ + ./colorchord.nix + ]; +}