{ inputs, outputs, lib, config, pkgs, userName, hostName, ... }:
{
  # Home Manager needs a bit of information about you and the paths it should
  # manage.
  #

  nixpkgs.config.allowUnfree = true;
  # inputs.nixpkgs-stable.config.allowUnfree = true;
  
  home.username = userName;
  home.homeDirectory = "/home/${userName}";

  programs.home-manager.enable = true;

  home.stateVersion = "23.11"; # Please read the comment before changing.

  # The home.packages option allows you to install Nix packages into your
  # environment.
  fonts.fontconfig.enable = true;
  home.packages = with pkgs; [
    bat
    inputs.nixpkgs-stable.legacyPackages.x86_64-linux.corectrl
    fd
    firefox
    foot
    fzf
    htop
    kakoune
    keepassxc
    mako
    networkmanagerapplet
    obs-studio
    signal-desktop
    steam
    waybar
    wofi
    xfce.thunar
    # Install fonts
    (nerdfonts.override { fonts = [ "Hermit" ]; })
    overpass

    # # You can also create simple shell scripts directly inside your
    # # configuration. For example, this adds a command 'my-hello' to your
    # # environment:
    # (pkgs.writeShellScriptBin "my-hello" ''
    #   echo "Hello, ${config.home.username}!"
    # '')
  ];

  # TODO not working firefox plugins
  # extensions = with inputs.firefox-addons.packages.${pkgs.system}; [ ublock-origin bitwarden ];


  # Home Manager is pretty good at managing dotfiles. The primary way to manage
  # plain files is through 'home.file'.
  home.file."${config.xdg.configHome}" = {
    # # Building this configuration will create a copy of 'dotfiles/screenrc' in
    # # the Nix store. Activating the configuration will then make '~/.screenrc' a
    # # symlink to the Nix store copy.
    # ".screenrc".source = dotfiles/screenrc;
    source = ../../dotfiles;
    recursive = true;

    # # You can also set the file content immediately.
    # ".gradle/gradle.properties".text = ''
    #   org.gradle.console=verbose
    #   org.gradle.daemon.idletimeout=3600000
    # '';
  };

  # Home Manager can also manage your environment variables through
  # 'home.sessionVariables'. If you don't want to manage your shell through Home
  # Manager then you have to manually source 'hm-session-vars.sh' located at
  # either
  #
  #  ~/.nix-profile/etc/profile.d/hm-session-vars.sh
  #
  # or
  #
  #  /etc/profiles/per-user/nate/etc/profile.d/hm-session-vars.sh
  #
  home.sessionVariables = {
    EDITOR = "kak";
  };

  wayland.windowManager.sway = {
      enable = true;
      config = rec {
          modifier = "Mod4";
          terminal = "foot";
          # startup = [
          #     {command = "firefox";}
          # ];
      };
  };

  # kdeconnect setup
  services.kdeconnect = {
      enable = true;
      indicator = true;
  };

  # Git setup
  programs.git = {
      enable = true;
      userEmail = "n8r@tuta.io";
      userName = "Nate Anderson";
  };

  # Zsh setup
  programs.zsh = {
      enable = true;
      #history = {
      #    Size = 10000;
      #};
      oh-my-zsh = {
          enable = true;
          plugins = [ "git" ];
          theme = "half-life";
      };
  };

}