{ config, pkgs, inputs, nixpkgs, ... }: let lib = pkgs.lib; in { imports = [ ./hardware-configuration.nix # inputs.home-manager.nixosModules.default ]; # Bootloader. boot = { loader.grub.enable = true; loader.grub.device = "/dev/sda"; loader.grub.useOSProber = true; supportedFilesystems = [ "ntfs" ]; # tmp = { # useTmpfs = false; # tmpfsSize = "30%"; # }; initrd.kernelModules = [ "amdgpu" ]; kernelPackages = pkgs.linuxPackages_latest; kernelModules = [ "coretemp" "cpuid" ]; plymouth.enable = true; }; fileSystems."/mnt/apps" = { device = "/dev/disk/by-label/Apps"; fsType = "ntfs-3g"; options = [ "rw" "uid=1000" ]; }; fileSystems."/mnt/photos" = { device = "/dev/disk/by-label/Photos"; fsType = "ntfs-3g"; options = [ "rw" "uid=1000" ]; }; fileSystems."/mnt/ext" = { device = "/dev/disk/by-label/Externe"; fsType = "ntfs-3g"; options = [ "auto" "nofail" "noatime" "rw" "uid=1000" ]; }; networking.hostName = "arcueid"; # Define your hostname. networking.networkmanager.enable = true; networking.firewall.allowedTCPPorts = [ 80 5000 ]; nix = { settings = { auto-optimise-store = true; experimental-features = [ "nix-command" "flakes" ]; trusted-users = [ "root" "yoru" ]; }; gc = { automatic = true; dates = "weekly"; options = "--delete-older-than 10d"; }; nixPath = [ "nixpkgs=${inputs.nixpkgs}" ]; extraOptions = '' extra-substituters = https://devenv.cachix.org extra-trusted-public-keys = devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw= ''; }; nixpkgs.config = { allowUnfree = true; allowBroken = true; }; time.timeZone = "Europe/Paris"; i18n.defaultLocale = "fr_FR.UTF-8"; i18n.extraLocaleSettings = { LC_ADDRESS = "fr_FR.UTF-8"; LC_IDENTIFICATION = "fr_FR.UTF-8"; LC_MEASUREMENT = "fr_FR.UTF-8"; LC_MONETARY = "fr_FR.UTF-8"; LC_NAME = "fr_FR.UTF-8"; LC_NUMERIC = "fr_FR.UTF-8"; LC_PAPER = "fr_FR.UTF-8"; LC_TELEPHONE = "fr_FR.UTF-8"; LC_TIME = "fr_FR.UTF-8"; }; hardware = { sane.enable = true; graphics = { enable = true; enable32Bit = true; }; bluetooth.enable = true; bluetooth.powerOnBoot = true; }; environment = { sessionVariables = { FLAKE = "/home/yoru/nixos"; DIRENV_LOG_FORMAT = ""; }; systemPackages = with pkgs; [ pavucontrol vial xwayland-satellite clinfo gcc ]; }; programs = { niri.enable = true; }; security = { rtkit.enable = true; sudo.wheelNeedsPassword = false; }; systemd.tmpfiles.rules = [ "L+ /opt/rocm/hip - - - - ${pkgs.rocmPackages.clr}" ]; systemd.services.frigate.path = lib.mkBefore [ pkgs.ffmpeg-full ]; services = { udev.packages = with pkgs; [ vial ]; openssh = { enable = true; settings = { PasswordAuthentication = true; AllowUsers = null; }; }; pulseaudio.enable = false; xserver.enable = true; xserver.xkb = { layout = "us"; variant = "altgr-intl"; }; xserver.videoDrivers = [ "amdgpu" ]; blueman.enable = true; printing.enable = true; avahi = { enable = true; nssmdns4 = true; openFirewall = true; }; pipewire = { enable = true; alsa.enable = true; alsa.support32Bit = true; pulse.enable = true; }; ollama = { enable = true; host = "0.0.0.0"; openFirewall = true; package = pkgs.ollama-rocm; syncModels = true; loadModels = [ "gemma3:4b" "mistral" ]; }; frigate = { enable = true; hostname = "arcueid.int.m0rel.eu"; vaapiDriver = "radeonsi"; settings = { genai = { provider = "ollama"; base_url = "http://localhost:11434"; model = "gemma3:4b"; }; mqtt = { enabled = true; host = "mqtt.int.m0rel.eu"; user = "frigate"; password = "pouet"; }; ffmpeg = { hwaccel_args = "preset-vaapi"; input_args = "preset-rtsp-restream-low-latency"; path = pkgs.ffmpeg-full; }; # ui.live_mode = "webrtc"; auth.enabled = false; proxy.default_role = "admin"; # detectors = { # ov_0 = { # type = "openvino"; # device = "GPU"; # }; # ov_1 = { # type = "openvino"; # device = "NPU"; # }; # # onnx.type = "onnx"; # }; # model = { # model_type = "yolo-generic"; # width = 640; # height = 640; # input_tensor = "nchw"; # input_dtype = "float"; # path = ../../yolox_m.onnx; # labelmap_path = ../../coco-80.txt; # }; detect.enabled = true; detect.fps = 2; objects.track = [ "person" "car" "bird" "cat" "dog" ]; audio = { enabled = false; max_not_heard = 10; min_volume = 500; listen = [ "bark" "fire_alarm" "scream" "speech" "yell" ]; filters.speech.threshold = 0.8; }; motion = { enabled = true; }; semantic_search.enabled = true; semantic_search.model_size = "small"; review.detections.enabled = true; record.enabled = true; # record.retain.days = 2; record.preview.quality = "medium"; face_recognition.enabled = true; face_recognition.model_size = "small"; lpr.enabled = true; audio_transcription = { enabled = false; device = "CPU"; model_size = "small"; language = "fr"; }; classification = { bird.enabled = true; custom = { Animaux = { enabled = true; name = "Animaux"; threshold = 0.8; object_config.objects = [ "cat" "dog" ]; # classification_type = "sub_label"; }; Voitures = { enabled = true; name = "Voitures"; threshold = 0.8; object_config.objects = [ "car" ]; # classification_type = "sub_label"; }; Personnes = { enabled = true; name = "Personnes"; threshold = 0.8; object_config.objects = [ "person" ]; # classification_type = "sub_label"; }; }; }; snapshots.enabled = true; snapshots.retain.default = 7; cameras.front = { enabled = true; ffmpeg.inputs = [ { path = "rtsp://admin:admin@192.168.68.240:554/?streamtype=0&subtype=1"; roles = [ "audio" "detect" "record" ]; } ]; onvif = { host = "192.168.68.240"; port = 8899; user = "admin"; password = "admin"; }; motion.mask = [ "0.316,0.037,0.317,0.012,0.035,0.01,0.033,0.035" ]; zones = { cour = { coordinates = "0.001,0.492,0.001,0.043,0.893,0.054,0.888,0.5"; }; entree = { coordinates = "0.001,0.5,0.001,0.997,0.996,0.991,0.997,0.513"; }; }; }; }; }; }; myNixOS = { home-users = { "yoru" = { userConfig = ./home.nix; }; }; archetype.general.enable = true; feature.fonts.enable = true; feature.virtualisation.enable = true; }; system.stateVersion = "24.05"; }