<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:

def list_pkgs(installed=True,
              attributes=True):
    '''
    Lists installed packages. Due to how nix works, it defaults to just doing a ``nix-env -q``.

    :param bool installed:
        list only installed packages. This can be a very long list (12,000+ elements), so caution is advised.
        Default: True

    :param bool attributes:
        show the attributes of the packages when listing all packages.
        Default: True

    :return: Packages installed or available, along with their attributes.
    :rtype: list(list(str))

    .. code-block:: bash

        salt '*' nix.list_pkgs
        salt '*' nix.list_pkgs installed=False
    '''

    # We don't use -Q here, as it obfuscates the attribute names on full package listings.
    cmd = _nix_env()
    cmd.append('--query')

    if installed:
        # explicitly add this option for consistency, it's normally the default
        cmd.append('--installed')
    if not installed:
        cmd.append('--available')
        # We only show attributes if we're not doing an `installed` run.
        # The output of `nix-env -qaP` and `nix-env -qP` are vastly different:
        #    `nix-env -qaP` returns a list such as 'attr.path  name-version'
        #    `nix-env -qP` returns a list of 'installOrder  name-version'
        # Install order is useful to unambiguously select packages on a single
        # machine, but on more than one it can be a bad thing to specify.
        if attributes:
            cmd.append('--attr-path')

    out = _run(cmd)

    return [s.split() for s in salt.utils.itertools.split(out['stdout'], '\n')]