{ inputs, config, pkgs, lib, ... }:
  let
    userName = "nate";
    fullName = "Nate Anderson";
    email = "n8r@tuta.io";
    unstable = import inputs.nixpkgs-unstable { system = "x86_64-linux"; config.allowUnfree = true; };
  in
{
  imports = [
      ../../../shared/modules/apps/firefox/firefox.nix
  ];
  
  home.username = userName;
  home.homeDirectory = "/home/${userName}";

  programs.home-manager.enable = true;

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

  # The home.packages option allows you to install Nix packages into your
  # environment.
  firefoxApp.enable = true;
  
  fonts.fontconfig.enable = true;

  # Niri configuration will go in dotfiles
  # Optional, hint Electron apps to use Wayland:
  home.packages = with pkgs; [
    ### ---
    ### niri packages
    swaybg
    swaylock-effects
    wofi
    wl-clipboard # System clipboard
    waybar
    networkmanagerapplet
    libnotify
    swaynotificationcenter
    syncthingtray
    lynx
    qutebrowser
    brightnessctl
    ### ---

    chromium
    #
    # Dev Tools
    #
    helix
    ghostty
    docker
    docker-compose
    jq
    python310
    unstable.claude-code
   ### LSP's
    nil # Nix LSP
    nodePackages_latest.bash-language-server
    openscad-lsp
    vscode-langservers-extracted # provides eslint, markdown, json, css, and html lsp
    # python311Packages.python-lsp-server
    ### Misc
    usbutils
    openscad

    #
    # Gaming
    #
    webcord

    #
    # Better Unix
    #
    bat
    duf
    du-dust
    fd
    fzf
    lsd
    ripgrep
    tre-command
    gtop
    htop
    neofetch
    # Normies
    unzip
    llpp
    nmap

    #
    # Photo / Video
    #
    imv
    mpv
    gimp
    ffmpeg
    tenacity
    yt-dlp

    #
    # Communication
    #
    mumble
    slack
    unstable.signal-desktop

    #
    # Other
    #
    keepassxc
    yubioath-flutter

    #
    # Style
    #
    catppuccin-kvantum
    libsForQt5.qtstyleplugin-kvantum
    libsForQt5.qt5ct
    # Install fonts
    lato
    unstable.nerd-fonts.hurmit
    unstable.nerd-fonts.overpass
    unstable.nerd-fonts.monaspace
    monaspace
    recursive
  ];

  #
  # Dotfiles
  # 

  # Static symlinks
  home.file = lib.mkMerge [
    # Shared dotfiles
    (let
      sharedDotfilesPath = ../../../shared/dotfiles;
    in
      if builtins.pathExists sharedDotfilesPath then
        builtins.listToAttrs (map (name: {
          name = "${config.xdg.configHome}/${name}";
          value = { source = sharedDotfilesPath + "/${name}"; };
        }) (builtins.attrNames (builtins.readDir sharedDotfilesPath)))
      else {})
    # Add local dotfiles, overriding from local over shared
    (let
      localDotfilesPath = ../../dotfiles;
    in
      if builtins.pathExists localDotfilesPath && builtins.readDir localDotfilesPath != {} then
        builtins.listToAttrs (map (name: {
          name = "${config.xdg.configHome}/${name}";
          value = { source = localDotfilesPath + "/${name}"; };
        }) (builtins.attrNames (builtins.readDir localDotfilesPath)))
      else {})
    {
      ".icons/default/index.theme".text = ''
        [icon theme]
        Inherits=Catppuccin-Macchiato-Lavender-Cursors
      '';
    }
  ];

  # Active symlinks
  xdg.configFile = {
    "niri".source = config.lib.file.mkOutOfStoreSymlink "/home/nate/nixos/frame12/linked-dotfiles/niri";
    "waybar".source = config.lib.file.mkOutOfStoreSymlink "/home/nate/nixos/frame12/linked-dotfiles/waybar";
    "helix".source = config.lib.file.mkOutOfStoreSymlink "/home/nate/nixos/shared/linked-dotfiles/helix";
    
    # Theme configuration
    "gtk-4.0/assets".source = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}/gtk-4.0/assets";
    "gtk-4.0/gtk.css".source = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}/gtk-4.0/gtk.css";
    "gtk-4.0/gtk-dark.css".source = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}/gtk-4.0/gtk-dark.css";
    "Kvantum/kvantum.kvconfig".source = (pkgs.formats.ini {}).generate "kvantum.kvconfig" {
      General.theme = "catppuccin-macchiato-lavender";
     };
  };

  home.sessionVariables = {
    BAT_THEME="Catppuccin Macchiato";
    EDITOR = "hx";
    # For electron apps
    NIXOS_OZONE_WL = "1";
  };

  # Git setup
  programs.git = {
    enable = true;
    userEmail = email;
    userName = fullName;
    extraConfig = {
      include = { path = "${config.xdg.configHome}/macchiato.gitconfig"; };
      init = { defaultBranch = "main"; };
      pull = { ff = "only"; };
      merge = { conflictStyle="zdiff3"; };
      push = { autoSetupRemote="true"; };
      delta = { features = "Catppuccin Macchiato"; };
    };
    delta.enable = true;
  };

  programs = {
    direnv = {
      enable = true;
      enableZshIntegration = true; # see note on other shells below
      nix-direnv.enable = true;
    };

    bash.enable = true; # see note on other shells below
  };

  # enable saving ssh secrets (needed for go mod installing private packages)
  services.gnome-keyring.enable = true;
  services.gnome-keyring.components = [ "ssh" "secrets" ];

  # Zsh setup
  programs.zsh = {
      enable = true;
      oh-my-zsh = {
          enable = true;
          plugins = [ "git" "ssh-agent" ];
          theme = "half-life";
      };
      initContent = ''
          eval "$(direnv hook zsh)"

          yt-audio() {
            nix-shell -p yt-dlp --run "yt-dlp -x $1 --audio-format mp3"
          }

          # Better Unix Aliases
          alias ls="lsd"
          alias l="lsd --almost-all --long"
          alias llm="lsd --timesort --long"
          alias lS="lsd --oneline --classic"
          alias lt="lsd --tree --depth=2"
          alias grep="rg"
          alias cat="bat --paging=never"
          alias rm="rm -i"
      '';
      profileExtra = ''
          export XDG_DATA_DIRS=$XDG_DATA_DIRS:/usr/share:/var/lib/flatpak/exports/share:$HOME/.local/share/flatpak/exports/share
      '';
  };

  qt = {
    enable = true;
    platformTheme.name = "qtct";
    style.name = "kvantum";
  };

  gtk = {
    enable = true;
    cursorTheme = {
      package = pkgs.catppuccin-cursors.macchiatoLavender;
      name = "Catppuccin-Macchiato-Lavender-Cursors";
    };
    iconTheme = {
      package = pkgs.catppuccin-papirus-folders;
      name = "Papirus-Dark";
    };
    theme = {
      name = "catppuccin-macchiato-lavender-compact+rimless";
      package = pkgs.catppuccin-gtk.override {
        accents = [ "lavender" ];
        size = "compact";
        tweaks = [ "rimless" ];
        variant = "macchiato";
      };
    };
  };

  services.wlsunset = {
    enable = true;
    sunrise = "07:00";
    sunset = "17:00";
    temperature.night = 3500;
  };

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

  # Enable bluetooth headphone controls
  services.mpris-proxy.enable = true;
}
