{
  pkgs,
  inputs,
  lib,
  ...
}: {
  environment.variables.FLAKE = "/Users/marshall/nix-config";

  fonts.packages = with pkgs; [
    font-awesome
    inter
    maple-mono
    nerdfonts
  ];

  networking = {
    computerName = "MacBook Air";
    hostName = "canis";
  };

  nix = {
    gc = {
      automatic = true;
      interval.Day = 7;
    };

    daemonIOLowPriority = true;
    daemonProcessType = "Adaptive";
    distributedBuilds = true;
    nixPath = ["nixpkgs=${inputs.nixpkgs}"];
    registry = lib.mapAttrs (_: v: {flake = v;}) inputs;

    settings = {
      auto-optimise-store = true;
      builders-use-substitutes = true;
      extra-experimental-features = "nix-command flakes";
      flake-registry = "/etc/nix/registry.json";
      keep-derivations = true;
      keep-outputs = true;
      max-jobs = "auto";
      warn-dirty = false;
      extra-sandbox-paths = ["/nix/var/cache/ccache"];

      substituters = [
        "https://cache.nixos.org"
        "https://nix-community.cachix.org"
      ];

      trusted-substituters = [
        "cache.nixos.org"
        "nix-community.cachix.org"
      ];

      trusted-public-keys = [
        "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
        "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
        "hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ="
      ];

      trusted-users = ["marshall"];
    };
  };

  nixpkgs.config.allowUnfree = true;

  programs.fish.enable = true;
  programs.gnupg.agent = {
    enable = true;
    enableSSHSupport = true;
  };

  security.pam.enableSudoTouchIdAuth = true;

  services = {
    nix-daemon.enable = true;

    emacs = {
      enable = true;
      package = inputs.emacs.packages.${pkgs.system}.default;
    };

    skhd = {
      enable = true;
      package = pkgs.skhd;

      skhdConfig = ''
        alt - return : wezterm
        alt - w : open -na "Arc"

        cmd - space : yabai -m window --toggle float

        shift + cmd - q : yabai -m window --close

        alt - h : yabai -m window --focus west
        alt - j : yabai -m window --focus south
        alt - k : yabai -m window --focus north
        alt - l : yabai -m window --focus east

        shift + cmd - h : yabai -m window --swap west
        shift + cmd - j : yabai -m window --swap south
        shift + cmd - k : yabai -m window --swap north
        shift + cmd - l : yabai -m window --swap east

        shift + cmd - 1 : yabai -m window --space 1
        shift + cmd - 2 : yabai -m window --space 2
        shift + cmd - 3 : yabai -m window --space 3
        shift + cmd - 4 : yabai -m window --space 4
        shift + cmd - 5 : yabai -m window --space 5
        shift + cmd - 6 : yabai -m window --space 6
        shift + cmd - 7 : yabai -m window --space 7
        shift + cmd - 8 : yabai -m window --space 8
        shift + cmd - 9 : yabai -m window --space 9
      '';
    };
  };

  users.users.marshall = {
    name = "marshall";
    home = "/Users/marshall";
  };

  system = {
    keyboard.enableKeyMapping = true;
    stateVersion = 5;

    defaults = {
      NSGlobalDomain = {
        KeyRepeat = 1;
        NSAutomaticCapitalizationEnabled = false;
        NSAutomaticSpellingCorrectionEnabled = false;
      };

      dock = {
        autohide = true;
        autohide-delay = 1000.0;
        expose-animation-duration = 0.0;
        orientation = "bottom";
        showhidden = true;
        tilesize = 48;
      };
    };
  };
}
