{ inputs, pkgs, ... }:

{
  home.stateVersion = "24.11";
  home.username = "mora";
  home.homeDirectory = "/home/mora";

  ###
  ### Shells
  ###
  programs.bash.enable = true;
  programs.fish.enable = true;
  programs.nushell.enable = true;


  ###
  ### Software
  ###
  programs.eza.enable = true;
  programs.ripgrep.enable = true;
  programs.zoxide.enable = true;

  programs.neovim.enable = true;
  programs.neovim.defaultEditor = true;

  programs.git = {
    enable = true;
    delta.enable = true;
    includes = [{
      contents = {
        user.name = "Mora Unie Youer";
        user.email = "mora_unie_youer@riseup.net";
        user.signingKey = "0x7AB91D83B25E6D7F";
        commit.gpgSign = true;
        init.defaultBranch = "master";
        safe.directory = "*";
      };
    }];
  };

  programs.gpg = {
    enable = true;
    settings = {
      ask-cert-level = true;
      expert = true;
      list-options = [ "show-sig-expire" "show-uid-validity" "show-unusable-subkeys" "show-unusable-uids"];
      verify-options = [ "show-uid-validity" "show-unusable-uids" ];
      with-fingerprint = [ "" "" ]; # Repeat with-fingerprint twice
      with-keygrip = true;
    };
  };

  services.gpg-agent = {
    enable = true;
    enableSshSupport = true;
    pinentryPackage = pkgs.pinentry-gnome3;
  };

  services.gnome-keyring = {
    enable = true;
    components = [ "secrets" "ssh" ];
  };


  ###
  ### Customization
  ###
  gtk.enable = true;
  gtk.font.name = "DejaVu Sans";
  gtk.font.size = 8;
  gtk.cursorTheme = {
    package = pkgs.catppuccin-cursors.mochaMauve;
    name = "catppuccin-mocha-mauve-cursors";
  };

  home.pointerCursor = {
    package = pkgs.catppuccin-cursors.mochaMauve;
    name = "catppuccin-mocha-mauve-cursors";
    size = 32;
    gtk.enable = true;
    x11.enable = true;
  };


  ###
  ### Extra Packages
  ###
  home.packages = with pkgs; [
    # Fonts
    liberation_ttf
    noto-fonts
    noto-fonts-cjk-sans
    noto-fonts-emoji

    font-awesome
    nerd-fonts._0xproto
    nerd-fonts.fira-code

    # Utils
    libnotify
    xdg-utils
    wl-clipboard

    # Shell
    python3

    # Applications
    niri
    inputs.wezterm.packages.${pkgs.system}.default
  ];

  ###
  ### Extra Services
  ###
  systemd.user.services.wl-gammarelay-rs = let
    wl-gammarelay-rs' = pkgs.writeShellScript "wl-gammarelay-rs" ''
      ${pkgs.wl-gammarelay-rs}/bin/wl-gammarelay-rs &
      sleep 1
      busctl --user -- set-property rs.wl-gammarelay /outputs/DP_2 rs.wl.gammarelay Brightness d 0.7
      busctl --user -- set-property rs.wl-gammarelay /outputs/DP_3 rs.wl.gammarelay Brightness d 0.75
      busctl --user -- set-property rs.wl-gammarelay /outputs/DP_4 rs.wl.gammarelay Brightness d 0.65
      wait
    '';
  in {
    Unit.PartOf = [ "graphical-session.target" ];
    Unit.After = [ "niri.service" ];
    Unit.Wants = [ "niri.service" ];
    Install.WantedBy = [ "graphical-session.target" ];
    Service = {
      ExecStart = "${wl-gammarelay-rs'}";
      Restart = "on-failure";
    };
  };
}