{ pkgs ? import <nixpkgs> {}, deploy-rs, nvfetcher }:
let
  nixWithFlakes = pkgs.symlinkJoin {
    name = "nix-with-flakes";
    paths = [ pkgs.nixFlakes ];
    buildInputs = [ pkgs.makeWrapper ];
    postBuild = ''
      wrapProgram $out/bin/nix --add-flags '--option experimental-features "nix-command flakes"'
    '';
  };

  tai64dec = pkgs.writeShellScriptBin "tai64dec" ''
    echo $((16#$(${pkgs.daemontools}/bin/tai64n <<<"" | ${pkgs.coreutils}/bin/tail -c +2 | ${pkgs.coreutils}/bin/head -c 16)))
  '';
in pkgs.mkShell {
  name = "nixos";
  nativeBuildInputs = with pkgs; [
    nixWithFlakes
    sops
    wireguard-tools
    gup
    nftables
    deploy-rs
    tai64dec
    knot-dns
    yq
    nvfetcher
  ];
}