# Edit this configuration file to define what should be installed on # your system. Help is available in the configuration.nix(5) man page # and in the NixOS manual (accessible by running ‘nixos-help’). { config, pkgs, ... }: let octoprintPort = 8080; in { imports = [ # Include the results of the hardware scan. ./hardware-configuration.nix ]; boot.loader.grub.enable = false; boot.loader.generic-extlinux-compatible.enable = false; boot.loader.raspberryPi = { enable = true; version = 4; uboot.enable = false; }; #boot.kernelPackages = pkgs.linuxPackages_rpi4; boot.kernelPackages = pkgs.linuxPackages_latest; boot.tmpOnTmpfs = true; c3d2 = { isInHq = true; mapHqHosts = true; hq.interface = "eth0"; }; nix.buildCores = 4; nix.maxJobs = 4; networking.hostName = "pulsebert"; # Define your hostname. # The global useDHCP flag is deprecated, therefore explicitly set to false here. # Per-interface useDHCP will be mandatory in the future, so this generated config # replicates the default behaviour. networking.useDHCP = false; networking.interfaces.eth0.useDHCP = true; networking.interfaces.wlan0.useDHCP = true; # List packages installed in system profile. To search, run: # $ nix search wget environment.systemPackages = with pkgs; [ wget vim git mpd ncmpcpp raspberrypi-tools ]; # List services that you want to enable: # Do not log to flash: services.journald.extraConfig = '' Storage=volatile ''; # Enable the OpenSSH daemon. services.openssh.enable = true; services.openssh.permitRootLogin = "yes"; security.sudo = { enable = true; wheelNeedsPassword = false; }; users.users.k-ot = { isNormalUser = true; extraGroups = [ "wheel" "audio" ]; }; networking.firewall.enable = false; # Enable sound. sound.enable = true; hardware.bluetooth = { enable = true; config = { Policy.AutoEnable = true; General = { Enable = "Source,Sink,Media,Socket"; #DiscoverableTimeout = 0; #Discoverable = true; }; }; }; hardware.pulseaudio = { enable = true; systemWide = true; tcp.enable = true; tcp.anonymousClients.allowedIpRanges = [ "127.0.0.0/8" "::1/128" "fd23:42:c3d2:500::/56" "172.22.99.0/24" "2a02:8106:208:5200::/56" "172.20.72.0/21" "2a02:8106:211:e900::/56" ]; zeroconf.publish.enable = true; package = pkgs.pulseaudioFull; extraModules = [ pkgs.pulseaudio-modules-bt ]; }; # tell Avahi to publish CUPS and PulseAudio services.avahi = { enable = true; publish.enable = true; publish.addresses = true; publish.userServices = true; }; security.acme = { acceptTerms = true; email = "mail@c3d2.de"; }; services.dhcpd4 = { enable = true; interfaces = [ config.c3d2.hq.interface ]; authoritative = false; # the leases are defined in the secrets module imported # at the top-level of this flake }; services.nginx = { enable = true; #recommendedGzipSettings = true; recommendedProxySettings = true; virtualHosts = { "drkkr.hq.c3d2.de" = { default = true; enableACME = true; forceSSL = true; locations."/" = { proxyPass = "http://127.0.0.1:${toString octoprintPort}"; proxyWebsockets = true; extraConfig = '' proxy_set_header X-Scheme $scheme; proxy_set_header Accept-Encoding identity; client_max_body_size 2000M; ''; }; locations."/cam/stream" = { proxyPass = "http://localhost:3020/?action=stream"; extraConfig = "proxy_pass_request_headers off;"; }; locations."/cam/capture" = { proxyPass = "http://localhost:3020/?action=snapshot"; extraConfig = "proxy_pass_request_headers off;"; }; }; }; }; services.octoprint = rec { enable = true; port = octoprintPort; extraConfig.webcam = { snapshot = "http://localhost:3020?action=snapshot"; stream = "https://drkkr.hq.c3d2.de/cam/stream"; }; # plugins = let # python = pkgs.octoprint.python; # octoprint-filament-sensor-universal = python.pkgs.buildPythonPackage rec { # pname = "OctoPrint-Filament-Sensor-Universal"; # version = "1.0.0"; # src = pkgs.fetchFromGitHub { # owner = "lopsided98"; # repo = pname; # rev = "8a72696867a9a008c5a79b49a9b029a4fc426720"; # sha256 = "1a7lzmjbwx47qhrkjp3hggiwnx172x4axcz0labm9by17zxlsimr"; # }; # propagatedBuildInputs = [ pkgs.octoprint python.pkgs.libgpiod ]; # }; # #in p: [ octoprint-filament-sensor-universal ]; # in p: []; }; # Allow access to printer serial port and GPIO users.users.${config.services.octoprint.user}.extraGroups = [ "dialout" "gpio" ]; services.mjpg-streamer = { enable = true; inputPlugin = "input_uvc.so -d /dev/v4l/by-id/usb-046d_0817_4B7115A0-video-index0 -r 640x480 -f 30 -pl 50hz -ex auto"; outputPlugin = "output_http.so -p 3020"; }; # Allow gpio group to access GPIO devices users.groups.gpio = { }; services.udev.extraRules = '' KERNEL=="gpiochip*", GROUP="gpio", MODE="0660" ''; # This value determines the NixOS release from which the default # settings for stateful data, like file locations and database versions # on your system were taken. It‘s perfectly fine and recommended to leave # this value at the release version of the first install of this system. # Before changing this value read the documentation for this option # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). system.stateVersion = "20.09"; # Did you read the comment? }