diff --git a/default.nix b/default.nix index 432a07b..8f1f522 100644 --- a/default.nix +++ b/default.nix @@ -62,6 +62,7 @@ in # "helium" # "nix-gaming-edge" "sops-nix" + "chaotic_nyx" ]; }; }; @@ -101,7 +102,7 @@ in # inherit nixpkgs; flakes = nlib.gen_flakes [ "sops-nix" - "home-manager" + # "home-manager" "tangled_core" ]; shared = import ./modules/shared { }; diff --git a/hosts/desktop/default.nix b/hosts/desktop/default.nix index 1955d13..63f369f 100644 --- a/hosts/desktop/default.nix +++ b/hosts/desktop/default.nix @@ -1,6 +1,6 @@ { args, - pkgs, + # pkgs, # repos, ... }: @@ -20,6 +20,8 @@ # /mnt/SnowData/snowy/Documents/repos/nixpkgs/nixos/modules/services/databases/pgdog.nix args.flakes.hjem.nixosModules.default + + args.flakes.chaotic_nyx.nixosModules.default # args.flakes.nix-gaming-edge.nixosModules.default ]; diff --git a/hosts/desktop/hjem-rum/snowy.nix b/hosts/desktop/hjem-rum/snowy.nix index 4b5fd29..ddb1205 100644 --- a/hosts/desktop/hjem-rum/snowy.nix +++ b/hosts/desktop/hjem-rum/snowy.nix @@ -64,6 +64,7 @@ signal-desktop qbittorrent vscodium + ivpn-ui glogg # monero-gui diff --git a/hosts/desktop/services/default.nix b/hosts/desktop/services/default.nix index fadf543..27d4eb8 100644 --- a/hosts/desktop/services/default.nix +++ b/hosts/desktop/services/default.nix @@ -4,6 +4,6 @@ ./system.nix ./network.nix ./apps.nix - ./llm.nix + # ./llm.nix ]; } diff --git a/hosts/desktop/services/system.nix b/hosts/desktop/services/system.nix index e6123c6..2c43297 100644 --- a/hosts/desktop/services/system.nix +++ b/hosts/desktop/services/system.nix @@ -1,6 +1,7 @@ { pkgs, ... }: { services = { + ivpn.enable = true; gvfs.enable = true; gnome.gnome-keyring.enable = true; @@ -48,8 +49,8 @@ }; desktopManager = { - gnome.enable = true; - cosmic.enable = false; + # gnome.enable = true; + # cosmic.enable = false; }; hardware.openrgb = { diff --git a/hosts/desktop/system/configuration.nix b/hosts/desktop/system/configuration.nix index 9912517..3bb1e10 100644 --- a/hosts/desktop/system/configuration.nix +++ b/hosts/desktop/system/configuration.nix @@ -7,7 +7,7 @@ lib, pkgs, repos, - args, + # args, ... }: @@ -36,6 +36,13 @@ # "root" "snowy" ]; + substituters = [ + "https://cache.nixos-cuda.org" + # "https://aseipp-nix-cache.global.ssl.fastly.net" # https://wiki.nixos.org/wiki/Maintainers:Fastly#Cache_v2_plans + ]; + trusted-public-keys = [ + "cache.nixos-cuda.org:74DUi4Ye579gUqzH4ziL9IyiJBlDpMRn9MBN8oNan9M=" + ]; auto-optimise-store = true; use-xdg-base-directories = true; }; @@ -72,10 +79,8 @@ "noatime" "discard=async" ]; - "/swap".options = [ "noatime" ]; "/var/log" = { options = [ - # "subvol=log" "compress=zstd:3" "noatime" "discard=async" @@ -100,7 +105,7 @@ # kernelPackages = pkgs.linuxPackages_cachyos; # kernelPackages = pkgs.linuxPackages_lqx; # kernelPackages = pkgs.linuxPackages_zen; - kernelPackages = pkgs.linuxPackages; + # kernelPackages = pkgs.linuxPackages; # kernelPatches = [ # # Patch for fixing a crash with certain games @@ -162,7 +167,7 @@ virtualisation = { libvirtd = { - enable = true; + enable = false; qemu = { swtpm.enable = true; vhostUserPackages = with pkgs; [ virtiofsd ]; @@ -322,6 +327,9 @@ "gamemode" ]; }; + root = { + shell = pkgs.fish; + }; }; fonts = { @@ -366,6 +374,9 @@ openssh dosfstools btrfs-progs + compsize + bubblewrap + umu-launcher gst_all_1.gstreamer gst_all_1.gst-plugins-base @@ -373,7 +384,7 @@ gst_all_1.gst-plugins-bad gst_all_1.gst-plugins-ugly gst_all_1.gst-libav - gst_all_1.gst-vaapi + # gst_all_1.gst-vaapi kdePackages.qtwayland qt5.qtwayland diff --git a/hosts/desktop/system/hardware-configuration.nix b/hosts/desktop/system/hardware-configuration.nix index 6c66769..9d2f9e3 100644 --- a/hosts/desktop/system/hardware-configuration.nix +++ b/hosts/desktop/system/hardware-configuration.nix @@ -4,6 +4,7 @@ { config, lib, + # pkgs, modulesPath, ... }: @@ -17,6 +18,7 @@ "nvme" "xhci_pci" "ahci" + "usb_storage" "usbhid" "sd_mod" ]; @@ -24,43 +26,48 @@ boot.kernelModules = [ "kvm-amd" ]; boot.extraModulePackages = [ ]; - fileSystems = { - "/" = { - device = "/dev/disk/by-uuid/6a6610f1-50b6-4452-bdb8-0e1f03a2df4b"; - fsType = "ext4"; - }; + boot.initrd.luks.devices."luksRoot".device = + "/dev/disk/by-uuid/ce830c75-4243-46c6-aae1-48a9afbab847"; - "/boot" = { - device = "/dev/disk/by-uuid/0B19-FF03"; - fsType = "vfat"; - options = [ - "fmask=0077" - "dmask=0077" - ]; - }; + fileSystems."/" = { + device = "/dev/mapper/luksRoot"; + fsType = "btrfs"; + options = [ "subvol=root" ]; + }; - "/mnt/SnowData" = { - device = "/dev/disk/by-uuid/733a2bdb-068f-42d6-9dfc-1404952fcbaf"; - fsType = "ext4"; - }; + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/8E13-5EB0"; + fsType = "vfat"; + options = [ + "fmask=0022" + "dmask=0022" + ]; + }; - # "/mnt/SnowStorage" = { - # device = "/dev/hdd-pool/SnowStorage"; - # fsType = "btrfs"; - # options = [ - # "compress=zstd:3 autodefrag noatime" - # ]; - # }; + fileSystems."/nix" = { + device = "/dev/mapper/luksRoot"; + fsType = "btrfs"; + options = [ "subvol=nix" ]; }; - swapDevices = [ ]; + fileSystems."/var/lib" = { + device = "/dev/mapper/luksRoot"; + fsType = "btrfs"; + options = [ "subvol=varlib" ]; + }; - # Enables DHCP on each ethernet and wireless interface. In case of scripted networking - # (the default) this is the recommended approach. When using systemd-networkd it's - # still possible to use this option, but it's recommended to use it in conjunction - # with explicit per-interface declarations with `networking.interfaces..useDHCP`. - # networking.useDHCP = lib.mkDefault true; - # networking.interfaces.enp9s0.useDHCP = lib.mkDefault true; + fileSystems."/var/log" = { + device = "/dev/mapper/luksRoot"; + fsType = "btrfs"; + options = [ "subvol=varlog" ]; + }; + + fileSystems."/mnt/SnowData" = { + device = "/dev/disk/by-uuid/733a2bdb-068f-42d6-9dfc-1404952fcbaf"; + fsType = "ext4"; + }; + + swapDevices = [ ]; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; diff --git a/hosts/snowcloud/default.nix b/hosts/snowcloud/default.nix index 8e2df5b..2b254ef 100644 --- a/hosts/snowcloud/default.nix +++ b/hosts/snowcloud/default.nix @@ -14,12 +14,12 @@ ]; }; - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - home-manager.extraSpecialArgs = { inherit args repos; }; - home-manager.users = { - snow = import ./home-manager/snow.nix; - }; + # home-manager.useGlobalPkgs = true; + # home-manager.useUserPackages = true; + # home-manager.extraSpecialArgs = { inherit args repos; }; + # home-manager.users = { + # snow = import ./home-manager/snow.nix; + # }; # disabledModules = [ @@ -33,7 +33,7 @@ /mnt/SnowData/snowy/Documents/repos/nixpkgs/nixos/modules/services/databases/pgdog.nix - args.flakes.home-manager.nixosModules.home-manager + # args.flakes.home-manager.nixosModules.home-manager # tangled args.flakes.tangled_core.nixosModules.appview diff --git a/hosts/snowcloud/home-manager/snow.nix b/hosts/snowcloud/home-manager/snow.nix index 8a24b02..ce1c774 100644 --- a/hosts/snowcloud/home-manager/snow.nix +++ b/hosts/snowcloud/home-manager/snow.nix @@ -23,9 +23,6 @@ # }; programs = { - # home-manager = { - # enable = true; - # }; # bat = { # enable = true; # }; diff --git a/hosts/snowlab/containers/frigate.nix b/hosts/snowlab/containers/frigate.nix index 6ab8491..0aba382 100644 --- a/hosts/snowlab/containers/frigate.nix +++ b/hosts/snowlab/containers/frigate.nix @@ -14,6 +14,10 @@ hostPath = "/var/lib/frigate"; isReadOnly = false; }; + "/var/cache/frigate" = { + hostPath = "/var/cache/frigate"; + isReadOnly = false; + }; "/run/secrets/frigate.env" = { hostPath = "${config.sops.secrets.frigate_env.path}"; isReadOnly = true; @@ -140,15 +144,28 @@ go2rtc = { enable = true; settings = { + log.level = "debug"; api.listen = ":1984"; + ffmpeg = { + # global = + bin = lib.getExe pkgs.ffmpeg_7-full; + }; streams = { - foscam-zwart = [ - "rtsp://\${FRIGATE_FOSCAM_RTSP}/videoMain" - ]; + # foscam-zwart = [ + # "rtsp://\${FRIGATE_FOSCAM_RTSP}/videoMain" + # ]; thingio = [ - "rtsp://\${FRIGATE_THINGIO_RTSP}/ch0" + "rtsp://\${FRIGATE_THINGIO_RTSP}/ch0#video=copy#audio=copy" + "ffmpeg:thingio#audio=opus" + ]; + thingio_sub = [ + "rtsp://\${FRIGATE_THINGIO_RTSP}/ch1#video=copy#audio=copy" ]; + # thingio_audio = [ + # "rtsp://\${FRIGATE_THINGIO_RTSP}/mic" + # # "ffmpeg:thingio_audio#audio=opus" + # ]; }; }; }; @@ -165,10 +182,16 @@ hostname = "frigate.mrsnowy.dev"; settings = { database.path = "/var/lib/frigate/frigate.db"; # keep it on external drive until we have enough storage on silo - networking.ipv6.enabled = true; - ffmpeg.hwaccel_args = "preset-nvidia"; + ## Integrations + + ffmpeg = { + hwaccel_args = "preset-nvidia"; + path = pkgs.ffmpeg_7-full; + }; + + # needed for home assistant mqtt = { enabled = true; host = "10.0.0.1"; @@ -177,20 +200,27 @@ }; go2rtc = { + # Makes webrtc work + webrtc.candidates = [ + "192.168.1.200:8555" + ]; + + # leave them empty so that frigate knows these streams exist. They are defined in the other go2rtc instance. streams = { - foscam-zwart = [ - "rtsp://{FRIGATE_FOSCAM_RTSP}/videoMain" - ]; - thingio = [ - "rtsp://{FRIGATE_THINGIO_RTSP}/ch0" - ]; + # foscam-zwart = [ ]; + thingio = [ ]; + # thingio_main = [ ]; + thingio_sub = [ ]; + # thingio_audio = [ ]; }; }; + ## Detector + detectors = { onnx_0 = { type = "onnx"; - # device = "CUDA"; + device = "cuda:0"; }; }; @@ -204,47 +234,148 @@ labelmap_path = "/var/lib/frigate/models/labelmap.txt"; }; - cameras = { - foscam-zwart = { - enabled = false; - ffmpeg.inputs = [ - { - path = "rtsp://{FRIGATE_FOSCAM_RTSP}/videoSub"; - roles = [ "detect" ]; - } - { - path = "rtsp://{FRIGATE_FOSCAM_RTSP}/videoMain"; - roles = [ "record" ]; - } - { - path = "rtsp://{FRIGATE_FOSCAM_RTSP}/audio"; - roles = [ "audio" ]; - } - ]; - onvif = { - host = "{FRIGATE_FOSCAM_IP}"; - port = 888; - user = "{FRIGATE_FOSCAM_ONVIF_USER}"; - password = "{FRIGATE_FOSCAM_ONVIF_PASS}"; - }; + ## Detections - detect = { - enabled = false; # <---- disable detection until you have a working camera feed - width = 640; - height = 360; + detect = { + enabled = true; + width = 640; + height = 640; + fps = 5; + stationary = { + interval = 50; + threshold = 50; + }; + }; + + objects = { + track = [ + "person" + "car" + "bicycle" + "motorcycle" + "bird" + "cat" + "dog" + ]; + }; + + audio = { + enabled = true; + min_volume = 200; + listen = [ + "bark" + "fire_alarm" + "scream" + # "speech" + "yell" + "footsteps" + "run" + "clapping" + + "meow" + "hiss" + "purr" + "cat" + ]; + }; + + classification = { + bird.enabled = true; + }; + + semantic_search = { + enabled = true; + model = "jinav1"; + model_size = "large"; + device = "cuda:0"; + }; + + face_recognition = { + enabled = true; + model_size = "large"; + device = "cuda:0"; + }; + + ## Saving + + record = { + enabled = true; + + alerts = { + pre_capture = 15; + post_capture = 15; + retain = { + days = 10; + # mode = "active_objects"; + mode = "motion"; + }; + }; + detections = { + pre_capture = 15; + post_capture = 15; + retain = { + days = 3; + # mode = "active_objects"; + mode = "motion"; }; }; + }; + + snapshots = { + enabled = true; + timestamp = true; + retain.default = 30; # days + }; + + # lpr = + + ## Cameras + + cameras = { + # foscam-zwart = { + # enabled = false; + # ffmpeg.inputs = [ + # { + # path = "rtsp://{FRIGATE_FOSCAM_RTSP}/videoSub"; + # roles = [ "detect" ]; + # } + # { + # path = "rtsp://127.0.0.1:8554/foscam-zwart"; + # input_args = "preset-rtsp-restream"; + # roles = [ "record" ]; + # } + # { + # path = "rtsp://{FRIGATE_FOSCAM_RTSP}/audio"; + # roles = [ "audio" ]; + # } + # ]; + + # onvif = { + # host = "{FRIGATE_FOSCAM_IP}"; + # port = 888; + # user = "{FRIGATE_FOSCAM_ONVIF_USER}"; + # password = "{FRIGATE_FOSCAM_ONVIF_PASS}"; + # }; + + # detect = { + # enabled = true; + # width = 640; + # height = 360; + # }; + # }; thingio = { enabled = true; ffmpeg.inputs = [ { - path = "rtsp://{FRIGATE_THINGIO_RTSP}/ch1"; - roles = [ "detect" ]; + path = "rtsp://127.0.0.1:8554/thingio"; + input_args = "preset-rtsp-restream"; + roles = [ "record" ]; } { - path = "rtsp://{FRIGATE_THINGIO_RTSP}/ch0"; + path = "rtsp://127.0.0.1:8554/thingio_sub"; + input_args = "preset-rtsp-restream"; roles = [ - "record" + "detect" "audio" ]; } @@ -256,10 +387,15 @@ password = "{FRIGATE_THINGIO_ONVIF_PASS}"; }; detect = { - enabled = false; + enabled = true; width = 640; height = 360; }; + motion.mask = [ + "1,0,0,0,0,0.229,1,0.248" + "0.471,0.238,0.469,0.33,0.221,0.534,0.022,0.597,0.054,0.415,0.034,0.32,0.325,0.274,0.352,0.236" + "0.868,0.381,0.857,0.471,0.902,0.469,0.91,0.39" + ]; }; }; }; diff --git a/hosts/snowlab/containers/hass/default.nix b/hosts/snowlab/containers/hass/default.nix index 21f20d7..9d19d6d 100644 --- a/hosts/snowlab/containers/hass/default.nix +++ b/hosts/snowlab/containers/hass/default.nix @@ -87,16 +87,24 @@ "mold_indicator" "alert" "rest" + + # for frigate + "media_source" ]; customComponents = [ (pkgs.home-assistant.python3Packages.callPackage ./ha-bambulab.nix { }) pkgs.home-assistant-custom-components.frigate + # (pkgs.home-assistant.python3Packages.callPackage ./hacs.nix { # # inherit (home-assistant.python3Packages) ; # }) ]; + customLovelaceModules = [ + pkgs.home-assistant-custom-lovelace-modules.card-mod + ]; + extraPackages = python3Packages: with python3Packages; [ # recorder postgresql support diff --git a/hosts/snowlab/services/blocky.nix b/hosts/snowlab/services/blocky.nix deleted file mode 100644 index 52af48d..0000000 --- a/hosts/snowlab/services/blocky.nix +++ /dev/null @@ -1,40 +0,0 @@ -{ ... }: -{ - services.blocky = { - enable = true; - enableConfigCheck = true; - settings = { - ports = { - dns = 53; - }; - - upstreams.groups.default = [ - "https://one.one.one.one/dns-query" # Using Cloudflare's DNS over HTTPS server for resolving queries. - ]; - - bootstrapDns = { - upstream = "https://one.one.one.one/dns-query"; - ips = [ - "1.1.1.1" - "1.0.0.1" - ]; - }; - - # TODO ! these might change..? set ip addr statically - customDNS = { - customTTL = "30m"; - mapping = { - "s3.mrsnowy.dev" = "192.168.1.200"; - "ente.mrsnowy.dev" = "192.168.1.200"; - "vaultwarden.mrsnowy.dev" = "192.168.1.200"; - "ntfy.mrsnowy.dev" = "192.168.1.200"; - "mollysocket.mrsnowy.dev" = "192.168.1.200"; - "fmd.mrsnowy.dev" = "192.168.1.200"; - - "hass.mrsnowy.dev" = "192.168.1.200"; - "frigate.mrsnowy.dev" = "192.168.1.200"; - }; - }; - }; - }; -} diff --git a/hosts/snowlab/services/default.nix b/hosts/snowlab/services/default.nix index fe1ea81..d4e2bcf 100644 --- a/hosts/snowlab/services/default.nix +++ b/hosts/snowlab/services/default.nix @@ -1,14 +1,14 @@ { imports = [ + ./caddy.nix + ./dns.nix ./garage.nix - ./samba.nix - ./postgres.nix + ./mqtt.nix + ./notify.nix + ./random.nix ./pgdog.nix + ./postgres.nix + ./samba.nix ./vaultwarden.nix - ./caddy.nix - ./random.nix - ./blocky.nix - ./notify.nix - ./mqtt.nix ]; } diff --git a/hosts/snowlab/services/dns.nix b/hosts/snowlab/services/dns.nix new file mode 100644 index 0000000..4a4ad16 --- /dev/null +++ b/hosts/snowlab/services/dns.nix @@ -0,0 +1,135 @@ +{ config, ... }: +{ + services = { + blocky = { + enable = true; + enableConfigCheck = true; + settings = { + ports = { + dns = "192.168.1.205:53"; + }; + + log = { + level = "debug"; + timestamp = true; + privacy = false; + }; + + upstreams.groups.default = [ + "localhost" + ]; + + # bootstrapDns = { + # upstream = "https://one.one.one.one/dns-query"; + # ips = [ + # "1.1.1.1" + # "1.0.0.1" + # ]; + # }; + + # TODO ! these might change..? set ip addr statically + customDNS = { + customTTL = "30m"; + mapping = { + "s3.mrsnowy.dev" = "192.168.1.200"; + "ente.mrsnowy.dev" = "192.168.1.200"; + "vaultwarden.mrsnowy.dev" = "192.168.1.200"; + "ntfy.mrsnowy.dev" = "192.168.1.200"; + "mollysocket.mrsnowy.dev" = "192.168.1.200"; + "fmd.mrsnowy.dev" = "192.168.1.200"; + + "hass.mrsnowy.dev" = "192.168.1.200"; + "frigate.mrsnowy.dev" = "192.168.1.200"; + }; + }; + }; + }; + + unbound = { + enable = true; + resolveLocalQueries = false; + enableRootTrustAnchor = true; + localControlSocketPath = null; + stateDir = "/var/lib/unbound"; + + settings = { + server = { + # logfile = "/var/log/unbound/unbound.log"; + # log-time-ascii = "yes"; + # verbosity = 5; + + # extended-statistics = "yes"; + + interface = [ + # localhost + "127.0.0.1" + "::1" + + # lan + "192.168.1.200" + "fd44:1ca4:f8bb:8::200" + + # bridgeNAT + "10.0.0.1" + "fd12:3456:789a::1" + + "${config.snownet.currentHost.ipv6}" + "${config.snownet.currentHost.ipv4}" + ]; + port = 53; + + qname-minimisation = "yes"; + + do-ip4 = "yes"; + do-ip6 = "yes"; + prefer-ip6 = "yes"; + + do-tcp = "yes"; + do-udp = "yes"; + + do-not-query-localhost = "yes"; + prefetch = "yes"; + prefetch-key = "yes"; + num-threads = 2; + + access-control = [ + # localhost + "127.0.0.1/8 allow" + "::1/128 allow" + + # lan + "192.168.1.0/24 allow" + "fd44:1ca4:f8bb:8::/64 allow" + + # bridgeNAT + "10.0.0.0/24 allow" + "fd12:3456:789a::0/112 allow" + + # snownet0 + "${toString config.snownet.ipv4_subnet}.0/24 allow" + "${toString config.snownet.ipv6_subnet}::/112 allow" + ]; + + private-address = [ + "10.0.0.0/8" + "172.16.0.0/12" + "192.168.0.0/16" + "169.254.0.0/16" + "100.64.0.0/10" + "127.0.0.0/8" + "fd00::/8" + "fe80::/10" + "::1/128" + "192.0.2.0/24" + "198.51.100.0/24" + "203.0.113.0/24" + "198.18.0.0/15" + "255.255.255.255/32" + "2001:db8::/32" + "fc00::/7" + ]; + }; + }; + }; + }; +} diff --git a/hosts/snowlab/services/garage.nix b/hosts/snowlab/services/garage.nix index c6c679b..b530c0f 100644 --- a/hosts/snowlab/services/garage.nix +++ b/hosts/snowlab/services/garage.nix @@ -17,6 +17,7 @@ metadata_fsync = false; data_fsync = false; allow_world_readable_secrets = true; + # block_size = "1M"; metadata_dir = "/mnt/silo/garage/meta"; data_dir = "/mnt/silo/garage/data"; diff --git a/hosts/snowlab/services/random.nix b/hosts/snowlab/services/random.nix index 3ab48d3..d8e56ed 100644 --- a/hosts/snowlab/services/random.nix +++ b/hosts/snowlab/services/random.nix @@ -28,7 +28,7 @@ openFirewall = true; # forwards stuff like home-assistant from containers - reflector = true; + reflector = false; # allowInterfaces = [ ]; diff --git a/hosts/snowlab/services/samba.nix b/hosts/snowlab/services/samba.nix index 6ffe486..d976aef 100644 --- a/hosts/snowlab/services/samba.nix +++ b/hosts/snowlab/services/samba.nix @@ -22,6 +22,8 @@ "server string" = "My snowlab Samba"; "netbios name" = "SNOWLAB"; # what shows up in discovery "hosts allow" = "ALL"; + + "log level" = "3"; }; # public = { }; private = { diff --git a/hosts/snowlab/system/configuration.nix b/hosts/snowlab/system/configuration.nix index 93d032c..b972788 100644 --- a/hosts/snowlab/system/configuration.nix +++ b/hosts/snowlab/system/configuration.nix @@ -32,17 +32,74 @@ # Add a swapfile swapDevices = [ { - device = "/swapfile"; + device = "/swap/swapfile"; size = 4 * 1024; } ]; + fileSystems = { + "/".options = [ + "compress=zstd:3" + "discard=async" + ]; + "/nix".options = [ + "compress=zstd:6" + "discard=async" + "noatime" + ]; + "/root".options = [ + "compress=zstd:6" + "discard=async" + ]; + "/var" = { + options = [ + "compress=zstd:6" + "discard=async" + ]; + }; + "/var/log" = { + options = [ + "compress=zstd:3" + "discard=async" + "noatime" + ]; + + neededForBoot = true; + }; + "/var/lib".options = [ + "compress=zstd:3" + "discard=async" + ]; + "/var/backup".options = [ + "compress=zstd:9" + "discard=async" + "noatime" + ]; + + "/proc" = { + device = "proc"; + fsType = "proc"; + options = [ + "hidepid=2" + ]; + }; + }; + nix = { nixPath = [ "nixpkgs=${pkgs.path}" ]; registry.nixpkgs.to = { type = "path"; path = builtins.storePath pkgs.path; }; + + settings = { + substituters = [ + "https://cache.nixos-cuda.org" + ]; + trusted-public-keys = [ + "cache.nixos-cuda.org:74DUi4Ye579gUqzH4ziL9IyiJBlDpMRn9MBN8oNan9M=" + ]; + }; }; boot = { @@ -69,7 +126,7 @@ # Use grub so it works on both EFI and BOOT grub = { enable = true; - device = "/dev/disk/by-id//ata-KINGSTON_SV300S37A60G_50026B7743020698"; + device = "/dev/disk/by-id/ata-KINGSTON_SV300S37A60G_50026B7743020698"; }; }; @@ -90,6 +147,8 @@ smartmontools rclone + compsize + nssTools # caddy needs it..? ]; }; diff --git a/hosts/snowlab/system/hardware-configuration.nix b/hosts/snowlab/system/hardware-configuration.nix index 95cb089..407e88a 100644 --- a/hosts/snowlab/system/hardware-configuration.nix +++ b/hosts/snowlab/system/hardware-configuration.nix @@ -14,46 +14,68 @@ ]; boot.initrd.availableKernelModules = [ - "ata_piix" - "uhci_hcd" - "virtio_pci" - "sr_mod" - "virtio_blk" + "ahci" + "ohci_pci" + "ehci_pci" + "pata_atiixp" + "xhci_pci" + "usb_storage" + "usbhid" + "sd_mod" ]; boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ ]; + boot.kernelModules = [ "kvm-amd" ]; boot.extraModulePackages = [ ]; fileSystems."/" = { - device = "/dev/disk/by-uuid/2803c2dc-5ecf-436d-8c79-930ce3fbf4bb"; - fsType = "ext4"; + device = "/dev/disk/by-uuid/88479aaf-53cb-444d-b80c-5e91cca35e30"; + fsType = "btrfs"; + options = [ "subvol=root" ]; }; - # fileSystems."/boot" = { - # device = "/dev/disk/by-uuid/12F6-1CE4"; - # fsType = "vfat"; - # options = [ - # "fmask=0022" - # "dmask=0022" - # ]; - # }; + fileSystems."/nix" = { + device = "/dev/disk/by-uuid/88479aaf-53cb-444d-b80c-5e91cca35e30"; + fsType = "btrfs"; + options = [ "subvol=nix" ]; + }; - fileSystems."/proc" = { - device = "proc"; - fsType = "proc"; - options = [ - "hidepid=2" - ]; + fileSystems."/var" = { + device = "/dev/disk/by-uuid/88479aaf-53cb-444d-b80c-5e91cca35e30"; + fsType = "btrfs"; + options = [ "subvol=var" ]; }; - swapDevices = [ ]; + fileSystems."/var/log" = { + device = "/dev/disk/by-uuid/88479aaf-53cb-444d-b80c-5e91cca35e30"; + fsType = "btrfs"; + options = [ "subvol=var_log" ]; + }; + + fileSystems."/var/lib" = { + device = "/dev/disk/by-uuid/88479aaf-53cb-444d-b80c-5e91cca35e30"; + fsType = "btrfs"; + options = [ "subvol=var_lib" ]; + }; + + fileSystems."/var/backup" = { + device = "/dev/disk/by-uuid/88479aaf-53cb-444d-b80c-5e91cca35e30"; + fsType = "btrfs"; + options = [ "subvol=var_backup" ]; + }; + + fileSystems."/swap" = { + device = "/dev/disk/by-uuid/88479aaf-53cb-444d-b80c-5e91cca35e30"; + fsType = "btrfs"; + options = [ "subvol=swap" ]; + }; - # Enables DHCP on each ethernet and wireless interface. In case of scripted networking - # (the default) this is the recommended approach. When using systemd-networkd it's - # still possible to use this option, but it's recommended to use it in conjunction - # with explicit per-interface declarations with `networking.interfaces..useDHCP`. - networking.useDHCP = lib.mkDefault true; - # networking.interfaces.ens3.useDHCP = lib.mkDefault true; + fileSystems."/root" = { + device = "/dev/disk/by-uuid/88479aaf-53cb-444d-b80c-5e91cca35e30"; + fsType = "btrfs"; + options = [ "subvol=root_home" ]; + }; + + swapDevices = [ ]; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; diff --git a/hosts/snowlab/system/network.nix b/hosts/snowlab/system/network.nix index ba12ad2..a174cf8 100644 --- a/hosts/snowlab/system/network.nix +++ b/hosts/snowlab/system/network.nix @@ -1,4 +1,7 @@ { config, ... }: +let + MainInterface = "enp4s0"; +in { services.resolved = { enable = false; @@ -16,15 +19,17 @@ # Some good default dns servers nameservers = [ - # Cloudflare - "2606:4700:4700::1111" - "1.1.1.1" - "2606:4700:4700::1001" - "1.0.0.1" - - # Mullvad - "2a07:e340::2" - "194.242.2.2" + "localhost" + + # # Cloudflare + # "2606:4700:4700::1111" + # "1.1.1.1" + # "2606:4700:4700::1001" + # "1.0.0.1" + + # # Mullvad + # "2a07:e340::2" + # "194.242.2.2" ]; # Use more modern nftables instead of iptables @@ -33,11 +38,20 @@ nat = { enable = true; internalInterfaces = [ "bridgeNAT" ]; - externalInterface = "enp0s25"; + externalInterface = MainInterface; # Lazy IPv6 connectivity for the container enableIPv6 = true; }; + # interfaces."${MainInterface}" = { + # ipv4.addresses = [ + # { + # address = "192.168.1.200"; + # prefixLength = 24; + # } + # ]; + # }; + firewall = { enable = true; @@ -66,6 +80,7 @@ 8555 config.ports.frigate + 1883 # mosquitto ]; allowedUDPPorts = [ # HTTP3 @@ -88,6 +103,19 @@ Name = "bridgeNAT"; }; + systemd.network.networks."10-${MainInterface}" = { + matchConfig.Name = MainInterface; + + address = [ + "192.168.1.200/24" # unbound un-filtered DNS ip and normal traffic ip + "192.168.1.205/24" # blocky DNS ip + + "fd44:1ca4:f8bb:8::200/64" + "fd44:1ca4:f8bb:8::205/64" + ]; + gateway = [ "192.168.1.1" ]; + }; + systemd.network.networks."10-bridgeNAT" = { matchConfig.Name = "bridgeNAT"; networkConfig = { @@ -99,12 +127,12 @@ Address = "10.0.0.1/24"; } { - Address = "fd12:3456:789a::1/64"; + Address = "fd12:3456:789a::1/112"; } ]; ipv6Prefixes = [ { - Prefix = "fd12:3456:789a::/64"; + Prefix = "fd12:3456:789a::0/112"; } ]; }; diff --git a/modules/npins/sources.json b/modules/npins/sources.json index 46ff35c..531fa15 100644 --- a/modules/npins/sources.json +++ b/modules/npins/sources.json @@ -12,6 +12,19 @@ "url": null, "hash": "sha256-oJJxjzg4sZLtHQJvfJVs5tvgbBVzVoJtWygXp/pJ8ks=" }, + "chaotic_nyx": { + "type": "Git", + "repository": { + "type": "GitHub", + "owner": "chaotic-cx", + "repo": "nyx" + }, + "branch": "nyxpkgs-unstable", + "submodules": false, + "revision": "913a42f0b735911f667e6350163e49a4ecf27c8f", + "url": "https://github.com/chaotic-cx/nyx/archive/913a42f0b735911f667e6350163e49a4ecf27c8f.tar.gz", + "hash": "sha256-JVotL2jGZ0CTUcF4yO0DuBj1huMrwAIHRgw0Ecn+aIg=" + }, "flake-compat": { "type": "Git", "repository": { @@ -35,9 +48,9 @@ }, "branch": "master", "submodules": false, - "revision": "9a8c7e32082c509980a542db8345ae55a8595f19", - "url": "https://github.com/amaanq/helium-flake/archive/9a8c7e32082c509980a542db8345ae55a8595f19.tar.gz", - "hash": "sha256-gonb8FMzbJ90+zJHB4foeO2/nNCUn8t82n8ISdZYk5o=" + "revision": "8523f3df9757807c738c0d837d2bf2c5d5be5f16", + "url": "https://github.com/amaanq/helium-flake/archive/8523f3df9757807c738c0d837d2bf2c5d5be5f16.tar.gz", + "hash": "sha256-/QmEE0Bid5oxXKsgxGEuoFf8YjFglaz6na/n8X7+hz8=" }, "hjem": { "type": "Git", @@ -48,9 +61,9 @@ }, "branch": "main", "submodules": false, - "revision": "dd0ba9e22fb46581f843e6121de33ca7a4a80224", - "url": "https://github.com/feel-co/hjem/archive/dd0ba9e22fb46581f843e6121de33ca7a4a80224.tar.gz", - "hash": "sha256-so1hIImuLtTKTVUokJ/6C2D2b2D4znCx+/PAjMSAnpw=" + "revision": "26089c056ea561e695f74945f12872f24eb08e67", + "url": "https://github.com/feel-co/hjem/archive/26089c056ea561e695f74945f12872f24eb08e67.tar.gz", + "hash": "sha256-wYo/odcGVHPpu78Y+EbINdfUDd30CWMpwC1UsN762Ck=" }, "hjem-rum": { "type": "Git", @@ -61,9 +74,9 @@ }, "branch": "main", "submodules": false, - "revision": "c9e1ee9cccc13f462f874d81f6cb97f2a4293afa", - "url": "https://github.com/snugnug/hjem-rum/archive/c9e1ee9cccc13f462f874d81f6cb97f2a4293afa.tar.gz", - "hash": "sha256-xSafE2wgqjunLwrxPYEiTvOUDMy2PjFxDpzw8uqDWL4=" + "revision": "73f6d1c01fe94e3de1cb3a84b9346da52f483c60", + "url": "https://github.com/snugnug/hjem-rum/archive/73f6d1c01fe94e3de1cb3a84b9346da52f483c60.tar.gz", + "hash": "sha256-QIzbnJIwy5cMYvPmLYPA4ar0lhficYLKZ6ytcHK90Uo=" }, "home-manager": { "type": "Git", @@ -78,19 +91,6 @@ "url": "https://github.com/nix-community/home-manager/archive/3ee51fbdac8c8bdfe1e7e1fcaba6520a563f394f.tar.gz", "hash": "sha256-QOD/CNm196nCJRheux/URi4/HE66fthdOMqCJoPP1Y0=" }, - "nix-gaming-edge": { - "type": "Git", - "repository": { - "type": "GitHub", - "owner": "powerofthe69", - "repo": "nix-gaming-edge" - }, - "branch": "nightly", - "submodules": false, - "revision": "6fff158736fd22b4dedf63c7ed16f1e440c314ab", - "url": "https://github.com/powerofthe69/nix-gaming-edge/archive/6fff158736fd22b4dedf63c7ed16f1e440c314ab.tar.gz", - "hash": "sha256-MCg6aBHC7NMHB0xgtHeZZRFwoZ/ammByiUEcrIekMJA=" - }, "nixpkgs-stable": { "type": "Git", "repository": { @@ -100,9 +100,9 @@ }, "branch": "nixos-26.05", "submodules": false, - "revision": "a50de1b7d8a586adc18d2395c19de7d6058e6030", - "url": "https://github.com/NixOS/nixpkgs/archive/a50de1b7d8a586adc18d2395c19de7d6058e6030.tar.gz", - "hash": "sha256-uslt2pqShTIXDdAHRHv2QkYLsVdY8Oqwz0EA48/RSM8=" + "revision": "8623c4c20aa4ca2f5fb81510d2944066c3fb0d96", + "url": "https://github.com/NixOS/nixpkgs/archive/8623c4c20aa4ca2f5fb81510d2944066c3fb0d96.tar.gz", + "hash": "sha256-eKbrvPoAOFutbYMdbB3r5EQVmFxKv24iKqHPPUXA0gM=" }, "nixpkgs-unstable": { "type": "Git", @@ -113,9 +113,9 @@ }, "branch": "nixos-unstable", "submodules": false, - "revision": "65179426c83bb3f6bc14898b42ea1c6f01d374b0", - "url": "https://github.com/NixOS/nixpkgs/archive/65179426c83bb3f6bc14898b42ea1c6f01d374b0.tar.gz", - "hash": "sha256-xnJJk+ct+D2+wdRxj1wk36w5zV9RVESwRqcklPdt3fM=" + "revision": "624af665418d3c65d544145b4d34ad696439570e", + "url": "https://github.com/NixOS/nixpkgs/archive/624af665418d3c65d544145b4d34ad696439570e.tar.gz", + "hash": "sha256-m0pDuRJG7EDo9ri+4Ksu83VsI+PlxNC9lNBfydejce4=" }, "sops-nix": { "type": "Git", @@ -138,9 +138,9 @@ }, "branch": "master", "submodules": false, - "revision": "bce1d7901aa43296018772151b1352db981c3811", + "revision": "bebc427408bdc836350e59d73c1879a0de6982b9", "url": null, - "hash": "sha256-JrEF2nxgVcogR7+msDqEnTChh5ZfySd2x/7OBSiRwnI=" + "hash": "sha256-56tH4JlQU336f8hxQQnTrMTmiFh/hcpSIyG1Q8Z4YpU=" }, "tauon-fix": { "type": "Git", @@ -151,9 +151,9 @@ }, "branch": "lrclib-solver", "submodules": false, - "revision": "e4b324b49da87f95fdbc7a6ce64f0a662924c269", - "url": "https://github.com/alfarelcynthesis/nixpkgs/archive/e4b324b49da87f95fdbc7a6ce64f0a662924c269.tar.gz", - "hash": "sha256-9jRoNP2vjI+Gnrrc3zmipklFCoD8JBMmlgG0xiJA2wE=" + "revision": "ce70ace726fe73aabfb6230c0294699ca5064d79", + "url": "https://github.com/alfarelcynthesis/nixpkgs/archive/ce70ace726fe73aabfb6230c0294699ca5064d79.tar.gz", + "hash": "sha256-9ADE96iTXtUCPLm6EdlVgKstLHsQ99KCzWAQxawNa1k=" }, "wire": { "type": "Git", @@ -164,9 +164,9 @@ }, "branch": "stable", "submodules": false, - "revision": "e358237f6460f8316d00c8343ab99bcf70b3e601", - "url": "https://github.com/mrshmllow/wire/archive/e358237f6460f8316d00c8343ab99bcf70b3e601.tar.gz", - "hash": "sha256-VRSMfKmo4t0pEqoJjMLlEWhrm6dE2m9iPydWIQfxtik=" + "revision": "e5f5f5a2ffc8bb4269e78d5f8d65dca3cd6c2c5d", + "url": "https://github.com/mrshmllow/wire/archive/e5f5f5a2ffc8bb4269e78d5f8d65dca3cd6c2c5d.tar.gz", + "hash": "sha256-DK5mHOYn5k8oosbXZWJeXBIuXltEX6R4trHbpc7jStI=" }, "zen-browser": { "type": "Git", @@ -177,9 +177,9 @@ }, "branch": "main", "submodules": false, - "revision": "0758bc86f7a55bbe002f0cede9e1a49e5a6e34d9", - "url": "https://github.com/0xc000022070/zen-browser-flake/archive/0758bc86f7a55bbe002f0cede9e1a49e5a6e34d9.tar.gz", - "hash": "sha256-UcdKHKcDxLxBon0HsOjDRRA7l1vVT28R83LkCIAlYYc=" + "revision": "163fb9c2cb58f402ea8da849e0412d583b7fdf3b", + "url": "https://github.com/0xc000022070/zen-browser-flake/archive/163fb9c2cb58f402ea8da849e0412d583b7fdf3b.tar.gz", + "hash": "sha256-0RSrog5pYzJur43VoT+Ur6R7csV8ltQI4tFbc9PjR98=" } }, "version": 8 diff --git a/modules/shared/modules/ente-web.nix b/modules/shared/modules/ente-web.nix index d5e76f3..ff8c681 100644 --- a/modules/shared/modules/ente-web.nix +++ b/modules/shared/modules/ente-web.nix @@ -50,13 +50,13 @@ in "${cfg.photosDomain}" = "photos"; "accounts.${cfg.photosDomain}" = "accounts"; "albums.${cfg.photosDomain}" = "albums"; - "auth.${cfg.photosDomain}" = "auth"; "cast.${cfg.photosDomain}" = "cast"; "embed.${cfg.photosDomain}" = "embed"; "share.${cfg.photosDomain}" = "share"; "memories.${cfg.photosDomain}" = "memories"; # extras + "auth.${cfg.photosDomain}" = "auth"; "locker.${cfg.photosDomain}" = "locker"; "paste.${cfg.photosDomain}" = "paste"; }; diff --git a/modules/shared/services/caddy.nix b/modules/shared/services/caddy.nix index 26fbe94..226a1ae 100644 --- a/modules/shared/services/caddy.nix +++ b/modules/shared/services/caddy.nix @@ -1,4 +1,9 @@ -{ pkgs, config, ... }: +{ + lib, + config, + pkgs, + ... +}: { services.caddy = { @@ -9,7 +14,7 @@ "github.com/caddy-dns/porkbun@v0.3.1" ]; - hash = "sha256-KktF8N1GMb/uvN+SVbpNSMStmyiGtFR9MNnpTE/RxO0="; + hash = "sha256-HQR9RpSXlm3TjCNlpsyWoKB92QxqHygoza4hqqFLXwk="; }; # package = pkgs.caddy.withPlugins { @@ -62,6 +67,9 @@ # .env file for secrets EnvironmentFile = config.sops.secrets.caddy_env.path; + Restart = "on-failure"; + RestartSec = lib.mkForce "10s"; + ### Hardening RemoveIPC = true; diff --git a/modules/shared/services/ente.nix b/modules/shared/services/ente.nix index 622d0c4..0f5ac43 100644 --- a/modules/shared/services/ente.nix +++ b/modules/shared/services/ente.nix @@ -20,12 +20,12 @@ in "${enteConfig.photosDomain}" = "photos"; "accounts.${enteConfig.photosDomain}" = "accounts"; "albums.${enteConfig.photosDomain}" = "albums"; - "auth.${enteConfig.photosDomain}" = "auth"; "cast.${enteConfig.photosDomain}" = "cast"; "embed.${enteConfig.photosDomain}" = "embed"; "share.${enteConfig.photosDomain}" = "share"; "memories.${enteConfig.photosDomain}" = "memories"; + # "auth.${enteConfig.photosDomain}" = "auth"; # "locker.${enteConfig.photosDomain}" = "locker"; # "paste.${enteConfig.photosDomain}" = "paste"; }; diff --git a/modules/sops/all/default.nix b/modules/sops/all/default.nix index 20d0918..8a97a1e 100644 --- a/modules/sops/all/default.nix +++ b/modules/sops/all/default.nix @@ -126,14 +126,6 @@ mode = "0400"; restartUnits = [ "pgdog.service" ]; }; - - murmur_env = { - format = "dotenv"; - sopsFile = ./murmur.env; - - mode = "0400"; - restartUnits = [ "murmur.service" ]; - }; }; }; } diff --git a/modules/sops/snowcloud.nix b/modules/sops/snowcloud.nix index 6d7aaee..adb8908 100644 --- a/modules/sops/snowcloud.nix +++ b/modules/sops/snowcloud.nix @@ -54,6 +54,14 @@ path = "${config.services.postgresql.dataDir}/.pgpass"; restartUnits = [ "pgdog.service" ]; }; + + murmur_env = { + format = "dotenv"; + sopsFile = ./snowcloud/murmur.env; + + mode = "0400"; + restartUnits = [ "murmur.service" ]; + }; }; }; } diff --git a/modules/sops/all/murmur.env b/modules/sops/snowcloud/murmur.env similarity index 83% rename from modules/sops/all/murmur.env rename to modules/sops/snowcloud/murmur.env index a5c7ebb..98c5056 100644 --- a/modules/sops/all/murmur.env +++ b/modules/sops/snowcloud/murmur.env @@ -1,15 +1,16 @@ #ENC[AES256_GCM,data:1p0T9o4fQTJmbwsL7ekuazjlNu54VFy9aw==,iv:qYujcfFixXTY6EKMYJUMaXTbTwlW7oifsno0EOfN7cQ=,tag:zHrnaMErm7CvDXASlai3nQ==,type:comment] MURMURD_PASSWORD=ENC[AES256_GCM,data:IlrmMihz/pw=,iv:78DLtMyHhXNti+82zAiHWid/MrvES6W0XN1KkEyXNxA=,tag:6RtGb6gWtPARp4Mn3mIxDw==,type:str] +MUMBLE_SUPERUSER_PASSWORD=ENC[AES256_GCM,data:fzqtkLoegwdDmYQTCMrv/kM0uK/FuIi/tR+OkTiqOtDf8Hg7lSErMNRzCrdc9bzhyX7V3BBeINKXardCo0l1lQ==,iv:XJGVPyvTD6LIGctvN/mH/+eagnj1DAynEx18KPb8Wf8=,tag:L7C+ZSPFho5QEumUA5TGRA==,type:str] sops_age__list_0__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBhNEIwd0hJZVpzRjN5S0JE\nQ2NoSjdoUWhmZE90aDMyKzlkMkN6TW5DU2tjClEyTVlZV2hpSFFTUHJtTC9wblNs\nc3NDOTlxeTlmOWlQY2ZwYTJLTGV6ZmMKLS0tIFNPbDVOMHRlUUtBK2wzLzluQ1Bo\nLytSYlc1TUV1b29TQWdmS0wyREk2am8KT7faczsqmPuUpRA7lQZNKpho/4twz1dE\nl2bEoDIM7NJ9kiXZ6ypKOz2OmsJA47MHcQcwR61YHJ/fhVmcAVpG6Q==\n-----END AGE ENCRYPTED FILE-----\n sops_age__list_0__map_recipient=age16e3uae0sktxmwzlmcdxwn07jpudtjl0s42hnwx2qsdh9h72gc5ssktkazg sops_age__list_1__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB2djg1RnFhRVY2S282WlZF\nTFoxRmk0VkFpKzVoZEtjbVJWMW1NZ0R6WG1BCldVQzViay95dldCOEYrUFlMYUFj\nbENvVXk2dGNRSnJQbUc5Z0JPUmVESFkKLS0tIHRwY0t5NzNPMGRqQytDSi9BcHlP\nY2h3MHAyT0d0ZERuM3BCN09NTGVSSDAKdBk4v0TDxB67wv6E3GD7zzgMuoOZjqxL\ncoPmCgI2gMTVCjR9m8b752K/ZOWIxhDyxLWwTNSbTJw4HnvGCJe9cQ==\n-----END AGE ENCRYPTED FILE-----\n sops_age__list_1__map_recipient=age1yjv3ngyz26qqggvef3ekwdw60dfvcmfd0l6n88vs3axux6vusdhsyzlts0 sops_age__list_2__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBqdGt3QUJhL2JGY1k5ZGo2\nbkdWakdsTytBQWJGMEJud2lPdEQ4NEhwWUc4Ck02NlRtVkthSlJqRUkvbUdGcUEr\nNkc5S1NBbDhuMTRJSDZoYTJ2YncraVkKLS0tIFplTVE3ZkNrZEZpZXFYRFJiVUhH\nZ3Y0aytUOSt6amNJUmV1Rld0VWpWVUkKwi9o1t8hfJocvmvcAt/vj4TMoa0ne/5Y\nGb/uvDc8k5PUm/npLDYnjVvm6dXu4nLRb3zStNYSIUh1DpqNndsENQ==\n-----END AGE ENCRYPTED FILE-----\n sops_age__list_2__map_recipient=age1qqex87tl6kq68hszp66z49n95zurcxcvveumpxjvh5w2yhx8g47q5s24ya -sops_lastmodified=2026-07-02T18:40:14Z -sops_mac=ENC[AES256_GCM,data:yZyRTAIAsTsBvIYyH610mdxSfYL7ahCBziQwzN2OhwdxFzAiyNsv8CGVFrgfr8Bm8VhV1kPQjWKS4dLpcoMG015RnMGVSP1t+tkWKoysv6821PcWcrOtjiZDl+zZku3R4oY+B/eKAE6QnF9CW5lulzA6StTdkpTApeiULlecRYU=,iv:y6s7XxQbLwGKgrIR4GZNV8LleF6BWfB2D5XkDFe2zsI=,tag:fDnyMDAaJW9vSp5Cw8JF9A==,type:str] +sops_lastmodified=2026-07-11T09:54:27Z +sops_mac=ENC[AES256_GCM,data:aPiZXBN7WzQ270/qYDKwLSGTCyetV+lkNwufl08okJmReNimfPlacTS5c4Qc0dvMj6fZjfnkkKLasuM2tXZMCb4v2sHW7V9TUHRaFPHc3v4Jdwr+w/2aZZmGcFzb46rY+kzp6t0WfTuhI+MihXzSYhEm6niOanN6I7Iv2rFfbFc=,iv:HlhiU3sbct9kOzXGAe/JkcRto8/8xDV3nRPSxIOeUx8=,tag:wBDVmddObe0qBISsXVQAag==,type:str] sops_pgp__list_0__map_created_at=2026-07-02T18:39:50Z sops_pgp__list_0__map_enc=-----BEGIN PGP MESSAGE-----\n\nhQIMA09oKgMfawMUARAAgjCTRomdZUp5RzrkKfGM8cO4/C473h9v+OU5aWi/h/Gk\n9VZggzZFbu5LUhvpZ28frAg6aXnEXPsvwU6kMpl4TdmwhZsGCnlhAv/rAZNlOdW7\n1AO8kzu6vkcxdbFQsKatQKhOHSkDdqWOPQXMSqoIBUxN41XOLP5kEQhx16fWJPBz\na7li/fO8LEXuHL2GUgB/UGy0ufm4I74Fa3eoF+7Y9ZOvLOjJF9k9OWEnoS7D50Du\nKTo8PX1GdeNCg22qWl2H8aXffGEnN/ymeTfRXm1lM5/Gd0SXiIi2OuuRRJS2+Inf\nk9y9a2FLM98vO/8+7ROLNP3l0174shJ4rSeG0qz/mjqfKLCzl6MX/7zzdzKzX4xB\n88bsnF6TTeNhwhZKWvm30DsuWx/lA0qWRWUo8ZejtfHaWbBWOoduDEYXpTTp8Ru1\ntTLC0qYKQTY1WiUsy6whwv2/KZMFVRyPw904+swAuty8zDbVv8scxVyUjkavdBGU\niEt1jtMbyWsj7AQROcYQKK6Bpt/ReTCrwoOxtDOrVbSH9qE+udW+4VUAr7q3baeL\n5d/SCOfn2I0JBiWPgrCYNw9ZyTb0PmIa2sjm4oz4X+1fxh3T6XTY2xfCQZSmJhiT\nKrQ+HP68PjILYTc90Mr0jWYh4k2mVqBV/vu2Y+OwBC0U+pSRN53Vh7Ps7LlHvX3S\nXgGIYq1rol9ozOypBy+nuzdb9S3o70jW9OstKZVqqeF1EkfapnY4HHeGW9W8HK11\nxQ/SN/9gN6thqwEgcxHkR0yk7uQrvFyqWD8uk8tbVmy8mX/h8QG1J1zvyZrPtkw=\n=Y8HE\n-----END PGP MESSAGE----- sops_pgp__list_0__map_fp=D40CE1579C09BFD7EF4AB7E631250420834310B5 sops_unencrypted_suffix=_unencrypted -sops_version=3.13.1 +sops_version=3.13.2 diff --git a/shell.nix b/shell.nix index 6893078..38cef0f 100644 --- a/shell.nix +++ b/shell.nix @@ -7,7 +7,7 @@ in pkgs.mkShell { strictDeps = true; packages = [ - wire.packages.${builtins.currentSystem}.wire-small + # wire.packages.${builtins.currentSystem}.wire-small unstable_pkgs.npins pkgs.just ];