# 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; generic-extlinux-compatible.enable = false; raspberryPi = { enable = true; version = 4; uboot.enable = false; }; }; #kernelPackages = pkgs.linuxPackages_rpi4; kernelPackages = pkgs.linuxPackages_latest; tmpOnTmpfs = true; }; c3d2 = { isInHq = true; mapHqHosts = true; hq.interface = "eth0"; }; nix = { buildCores = 4; 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. useDHCP = false; interfaces.eth0.useDHCP = true; interfaces.wlan0.useDHCP = true; firewall.enable = false; }; # List packages installed in system profile. To search, run: # $ nix search wget environment.systemPackages = with pkgs; [ git htop libraspberrypi mpd mpv ncmpcpp ncpamixer vim wget ]; programs.tmux.enable = true; # Do not log to flash: services.journald.extraConfig = '' Storage=volatile ''; # Enable the OpenSSH daemon. services.openssh = { enable = true; permitRootLogin = "yes"; }; security.sudo = { enable = true; wheelNeedsPassword = false; }; users.users.k-ot = { isNormalUser = true; extraGroups = [ "wheel" "audio" ]; }; # Enable sound. sound.enable = true; hardware.bluetooth = { enable = true; settings = { 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" "172.20.72.0/21" "2a00:8180:2c00:200::/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; addresses = true; 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? }