{
  pkgs,
  lib,
  ...
}: let
  HOME = "/home/mtgmonkey";
  USERNAME = "mtgmonkey";
  HOSTNAME = "nixos";
in {
  imports = [./home/stylix.nix];
  programs = {
    bash = {
      enable = true;
      shellAliases = {
        # replacements
        neofetch = lib.mkForce "fastfetch";
        ls = lib.mkForce "lsd";
        ll = lib.mkForce "lsd -l";
        l = lib.mkForce "lsd -la";
        cd = lib.mkForce "z";

        # gen
        gg = lib.mkForce "git log --oneline --abbrev-commit --all --graph --decorate --color";
        md = lib.mkForce "glow";

        # nixos/hm
        hm = lib.mkForce "home-manager";
        hm-check = lib.mkForce "nix check flake ${HOME}/dotfiles/.";
        hm-switch = lib.mkForce "home-manager switch --flake ${HOME}/.dotfiles/. -f ${HOME}/.dotfiles/home.nix";
        nix-check = lib.mkForce "nix check flake /etc/nixos/.";
        nix-switch = lib.mkForce "nixos-rebuild switch --flake /etc/nixos/.";
      };
      bashrcExtra = ''
        PS1="\u@\h:\w$ "
        eval "$(zoxide init bash)"
      '';
    };

    btop = {
      enable = true;
      settings = {
        theme_background = false;
        vim_keys = true;
        rounded_corners = false;
        graph_symbol = "braille";
        update_ms = 200;
        proc_sorting = "cpu lazy";
        proc_gradient = false;
        proc_left = true;
        cpu_single_graph = true;
        cpu_bottom = true;
        clock_format = "/user@/host:/uptime@%H:%M";
        background_update = false;
        mem_graphs = false;
        mem_below_net = true;
        show_swap = true;
        only_physical = true;
        show_io_stat = true;
        io_mode = false;
        io_graph_combined = false;
        log_level = "ERROR";
      };
    };

    # alias
    git = {
      enable = true;
      userName = USERNAME;
      userEmail = "${USERNAME}@${HOSTNAME}";
      extraConfig = {
        init.defaultBranch = "master";
      };
    };

    gh.enable = true;

    nvf = {
      enable = true;
      settings.vim = {
        autocomplete.nvim-cmp.enable = false;
        formatter.conform-nvim = {
          enable = true;
          setupOpts.format_on_save = {
            lsp_format = "fallback";
            timeout_ms = 5000;
          };
        };
        lsp.otter-nvim.enable = true;
        git.enable = true;
        keymaps = [
          {
            key = "<Down>";
            mode = ["i" "n" "v" "c"];
            action = "<NOP>";
          }
          {
            key = "<Up>";
            mode = ["i" "n" "v" "c"];
            action = "<NOP>";
          }
          {
            key = "<Left>";
            mode = ["i" "n" "v" "c"];
            action = "<NOP>";
          }
          {
            key = "<Right>";
            mode = ["i" "n" "v" "c"];
            action = "<NOP>";
          }
          {
            key = "jj";
            mode = ["i"];
            action = "<Esc>";
          }
          {
            key = "kk";
            mode = ["i"];
            action = "<Esc>";
          }
          {
            key = "jk";
            mode = ["i"];
            action = "<Esc>";
          }
          {
            key = "kj";
            mode = ["i"];
            action = "<Esc>";
          }
          {
            key = "<Esc>";
            mode = ["i"];
            action = "<Nop>";
          }
        ];
        languages = {
          assembly.enable = true;
          nix = {
            enable = true;
            format.enable = true;
            lsp.enable = true;
          };
          rust = {
            enable = true;
            format.enable = true;
            lsp.enable = true;
          };
          haskell = {
            enable = true;
            lsp.enable = true;
          };
        };
        lineNumberMode = "relative";
        options = {
          tabstop = 2;
          shiftwidth = 2;
          expandtab = true;
          smarttab = true;
          foldmethod = "indent";
          number = true;
        };
        statusline.lualine.enable = true;
        syntaxHighlighting = true;
      };
    };

    qutebrowser.enable = true;

    rofi.enable = true;

    ssh.enable = true;

    home-manager.enable = true;

    # alias
    # replacements
    fastfetch.enable = true;
    lsd.enable = true;
  };

  services = {
    udiskie = {
      enable = false;
      settings.program_options.file_manager = "${pkgs.ranger}/bin/ranger";
    };
  };

  xsession.windowManager.xmonad = {
    enable = true;
    enableContribAndExtras = true;
    config = ./home/xmonad/config.hs;
  };

  xdg.configFile."shell".source = lib.getExe pkgs.brush;

  home = {
    username = USERNAME;
    homeDirectory = HOME;
    stateVersion = "25.05";
    packages = [
      pkgs.acpi
      pkgs.brush
      pkgs.brightnessctl
      pkgs.flameshot
      pkgs.fzf
      pkgs.jmtpfs
      pkgs.nix-output-monitor
      pkgs.lynx
      pkgs.rip2
      pkgs.ripgrep
      pkgs.tree

      # alias
      pkgs.glow
      pkgs.zoxide
    ];
  };
}
