{
  config,
  pkgs,
  ...
}: {
  users.users.michael = {
    home = "/Users/michael";
    shell = pkgs.zsh;
  };

  networking = {
    computerName = "neptune";
    hostName = "neptune";
  };

  environment = {
    shells = with pkgs; [zsh];
    variables = {
      EDITOR = "nvim";
      VISUAL = "nvim";
    };
    systemPackages = with pkgs; [
      # Containers
      colima
      unstable.docker-client
      unstable.docker-compose
      # Video
      ffmpeg
      # Spotify
      unstable.spicetify-cli
      # Java
      checkstyle
      # XCode
      cocoapods
      # Android Development
      android-tools
    ];
  };

  programs = {
    zsh = {
      enable = true;
      # Make zsh installation work properly with macOS path
      loginShellInit = ''
        if [ -x /usr/libexec/path_helper ]; then
          eval `/usr/libexec/path_helper -s`
        fi
      '';
    };
  };

  security.pam.enableSudoTouchIdAuth = true;

  services = {
    nix-daemon.enable = true;
  };

  nixpkgs = {
    # Workaround for pyopenssl being marked broken
    config.allowBroken = true;
  };

  nix = {
    package = pkgs.nix;
    gc = {
      automatic = true;
      interval.Day = 7;
      options = "--delete-older-than 7d";
    };
    extraOptions = ''
      experimental-features = nix-command flakes
    '';
    settings.auto-optimise-store = false;
  };

  system = {
    # Since it's not possible to declare default shell, run this command after build
    activationScripts.postActivation.text = ''sudo chsh -s ${pkgs.zsh}/bin/zsh'';
    stateVersion = 4;
  };
}