function fish_prompt
        # This prompt shows:
        # - green lines if the last return command is OK, red otherwise
        # - your user name, in red if root or yellow otherwise
        # - your hostname, in cyan if ssh or blue otherwise
        # - the current path (with prompt_pwd)
        # - date +%X
        # - the current virtual environment, if any
        # - the current git status, if any, with fish_git_prompt
        # - the current battery state, if any, and if your power cable is unplugged, and if you have "acpi"
        # - current background jobs, if any
    
        # It goes from:
        # ┬─[nim@Hattori:~]─[11:39:00]
        # ╰─>$ echo here
    
        # To:
        # ┬─[nim@Hattori:~/w/dashboard]─[11:37:14]─[V:django20]─[G:master↑1|●1✚1…1]─[B:85%, 05:41:42 remaining]
        # │ 2    15054    0%    arrêtée    sleep 100000
        # │ 1    15048    0%    arrêtée    sleep 100000
        # ╰─>$ echo there
    
        set -l retc red
        test $status = 0; and set retc green
    
        set -q __fish_git_prompt_showupstream
        or set -g __fish_git_prompt_showupstream auto
    
        function _nim_prompt_wrapper
                set retc $argv[1]
                set -l field_name $argv[2]
                set -l field_value $argv[3]
        
                set_color normal
                set_color $retc
                echo -n '─'
                set_color -o green
                echo -n '['
                set_color normal
                test -n $field_name
                and echo -n $field_name:
                set_color $retc
                echo -n $field_value
                set_color -o green
                echo -n ']'
        end
    
        set_color $retc
        echo -n '┬─'
        set_color -o green
        echo -n [
    
        if functions -q fish_is_root_user; and fish_is_root_user
                set_color -o red
        else
                set_color -o yellow
        end
    
        echo -n $USER
        set_color -o white
        echo -n @
    
        if test -z "$SSH_CLIENT"
                set_color -o blue
        else
                set_color -o cyan
        end
    
        echo -n (prompt_hostname)
        set_color -o white
        echo -n :(prompt_pwd)
        set_color -o green
        echo -n ']'
    
        # Date
        _nim_prompt_wrapper $retc '' (date +%X)
    
        # Vi-mode
        # The default mode prompt would be prefixed, which ruins our alignment.
        function fish_mode_prompt
        end
    
        if test "$fish_key_bindings" = fish_vi_key_bindings
                or test "$fish_key_bindings" = fish_hybrid_key_bindings
                set -l mode
                switch $fish_bind_mode
                        case default
                                set mode (set_color --bold red)N
                        case insert
                                set mode (set_color --bold green)I
                        case replace_one
                                set mode (set_color --bold green)R
                                echo '[R]'
                        case replace
                                set mode (set_color --bold cyan)R
                        case visual
                                set mode (set_color --bold magenta)V
                end
                set mode $mode(set_color normal)
                _nim_prompt_wrapper $retc '' $mode
        end
    
        # Virtual Environment
        set -q VIRTUAL_ENV_DISABLE_PROMPT
        or set -g VIRTUAL_ENV_DISABLE_PROMPT true
        set -q VIRTUAL_ENV
        and _nim_prompt_wrapper $retc V (path basename "$VIRTUAL_ENV")
    
        # git
        set -l prompt_git (fish_git_prompt '%s')
        test -n "$prompt_git"
        and _nim_prompt_wrapper $retc G $prompt_git
    
        # Battery status
        type -q acpi
        and acpi -a 2>/dev/null | string match -rq off
        and _nim_prompt_wrapper $retc B (acpi -b | cut -d' ' -f 4-)
    
        # New line
        echo
    
        # Background jobs
        set_color normal
    
        for job in (jobs)
                set_color $retc
                echo -n '│ '
                set_color brown
                echo $job
        end
    
        set_color normal
        set_color $retc
        echo -n '╰─>'
        set_color -o red
        echo -n '$ '
        set_color normal
end
