{
  lib,
  pkgs,
  modulesPath,
  ...
}: let
  install-script = pkgs.writeShellScriptBin "movcfg-install" (builtins.readFile ./movcfg-install.sh);
	extraFigletFonts = pkgs.fetchFromGitHub {
      owner = "xero";
      repo = "figlet-fonts";
      rev = "master";
      sha256 = "sha256-dAs7N66D2Fpy4/UB5Za1r2qb1iSAJR6TMmau1asxgtY=";
	};
	toilet-extrafonts = pkgs.toilet.overrideAttrs (oldAttrs: {
		buildInputs = oldAttrs.buildInputs or [] ++ [extraFigletFonts];

		installPhase = ''
			make install PREFIX=$out
			mkdir -p $out/share/figlet
			cp -r ${extraFigletFonts}/* $out/share/figlet
		'';
	});
in {
  imports = [
    "${modulesPath}/installer/cd-dvd/installation-cd-minimal.nix"
  ];
  nixpkgs.hostPlatform = "x86_64-linux";
  system.stateVersion = "24.05";
  nix = {
    settings = {
      experimental-features = ["nix-command" "flakes"];
    };
  };

  networking = {
    wireless.enable = false;
    networkmanager.enable = true;
  };

  environment.systemPackages = with pkgs; [
    nix-output-monitor
    nh
    nvd
    lolcat
    curl
    wget
    coreutils
    findutils
    zip
    unzip
    util-linux
    git
    btrfs-progs
    dosfstools
    parted
    bc
    pciutils
    usbutils
    toilet-extrafonts
    install-script
    nvim
  ];

  services = {
    openssh.enable = true;
    dbus.enable = true;
  };

  programs.zsh = {
    enable = true;

    ohMyZsh = {
      enable = true;
      plugins = ["git" "fzf"];
    };

    enableCompletion = true;

    histFile = "$HOME/.zsh_history";
    histSize = 10000;

    autosuggestions = {
      enable = true;
      highlightStyle = "fg=#4C566A,underline";
    };

    shellAliases = {
      grep = "grep --color=auto";
      vi = "nvim";
      mv = "mv -v";
      cp = "cp -vr";
      ".." = "cd ..";
      psg = "ps aux | grep -v grep | grep -i -e VSZ -e";
      mkdir = "mkdir -p";
      pk = "pkill -9 -f";
      svc = "sudo systemctl";
    };
    promptInit = ''
      bindkey -v
      type starship_zle-keymap-select >/dev/null || \
      {
      	eval "$(starship init zsh)"
      }
    '';
    setOptions = [
      "APPEND_HISTORY"
      "INC_APPEND_HISTORY"
      "SHARE_HISTORY"
      "CORRECT"
      "NO_NOMATCH"
      "LIST_PACKED"
      "ALWAYS_TO_END"
      "GLOB_COMPLETE"
      "COMPLETE_ALIASES"
      "COMPLETE_IN_WORD"
      "AUTO_CD"
      "AUTO_CONTINUE"
      "LONG_LIST_JOBS"
      "HIST_VERIFY"
      "SHARE_HISTORY"
      "HIST_IGNORE_SPACE"
      "HIST_SAVE_NO_DUPS"
      "HIST_IGNORE_ALL_DUPS"
      "EXTENDED_GLOB"
      "TRANSIENT_RPROMPT"
      "INTERACTIVE_COMMENTS"
    ];
    shellInit = ''
      export EDITOR="nvim"
      export SUDO_EDITOR="nvim"
      export VISUAL="nvim"
      export LANG="en_US.UTF-8"

      unalias ls
      ls() {
      	eza -1 --group-directories-first --icons "$@"
      }

      y() {
      	local tmp="$(mktemp -t "yazi-cwd.XXXXXX")"
      	yazi "$@" --cwd-file="$tmp"
      	if cwd="$(command cat -- "$tmp")" && [ -n "$cwd" ] && [ "$cwd" != "$PWD" ]; then
      		builtin cd -- "$cwd"
      	fi
      	rm -f -- "$tmp"
      }

      cd() {
      	export SOUNDS_ENABLED=0
      	eza -1 --group-directories-first --icons "$@"
      	builtin cd "$@" || exit
      	export SOUNDS_ENABLED=1
      }
      if [ ! -e $HOME/.zsh_history ]; then
      	touch $HOME/.zsh_history
      	chmod 600 $HOME/.zsh_history
      fi

      autoload -U compinit     # completion
      autoload -U terminfo     # terminfo keys
      zmodload -i zsh/complist # menu completion
      autoload -U promptinit   # prompt

      autoload -U up-line-or-beginning-search; zle -N up-line-or-beginning-search
      autoload -U down-line-or-beginning-search; zle -N down-line-or-beginning-search

      unalias ls
      clear
    '';
  };
  programs.starship = {
    enable = true;
    settings = {
      add_newline = true;
      right_format = "($custom)";

      format = lib.concatStrings [
        "($username)(bold white)($cmd_duration)($character)"
        "($git_branch)($git_status)($rust)($nix-shell)"
        "($directory)"
        "$line_break[ > ](bold #89b4fa)"
      ];

      username = {
        show_always = true;
        style_user = "bold white";
        format = "[$user]($style)";
      };
      directory = {
        format = "\n[$path](bold cyan)[/](bold green) ";
        style = "bold #b4befe";
      };

      character = {
        success_symbol = "[ -> ](bold green)";
        error_symbol = "[ -> ✗](bold red)";
        # error_symbol = "[ ](bold #89dceb)[ ✗](bold red)";
      };

      cmd_duration = {
        format = "[ 󰔛 $duration]($style)";
        disabled = false;
        style = "bg:none fg:#f9e2af";
        show_notifications = false;
        min_time_to_notify = 60000;
      };

      git_branch = {
        format = "\non [$symbol$branch](bold purple)";
        symbol = " ";
        truncation_length = 15;
        style = "bold purple";
      };

      custom.shellver = {
        command = "zsh --version";
        when = ''test $SHELL = "/run/current-system/sw/bin/zsh"'';
        symbol = "";
        style = "bold magenta";
      };
    };
  };
}
