Cdm

From wikinotes

A console based display manager for linux/bsd.
Written in bash.

NOTE:

interestingly, since xorg is not running yet, you may be able to change the xorg.conf that is loaded for each entry..

NOTE:

this is more complicated than it needs to be, just write your own .zprofile

Documentation

github https://github.com/evertiro/cdm

Tutorials

arch wiki https://wiki.archlinux.org/title/CDM

Locations

/etc/cdmrc system config
~/.config/cdm/cdmrc user config
/usr/share/doc/cdm/themes/* themes
/usr/share/xsessions/*.desktop default installed xsessions

Usage

Default

After copying ~/.profile (see below),
simply login on TTY1 and you will be provided with login choices.

Manual

cdm ${rcfile}  # test cdm interactively

Configuration

Enable CDM

# copy .profile, which will run as soon as you login on the console.
cp /usr/share/doc/cdm/profile.sh ~/.profile

Or alternatively append it to your .profile

# To avoid potential situation where cdm(1) crashes on every TTY, here we
# default to execute cdm(1) on tty1 only, and leave other TTYs untouched.
if [[ "$(tty)" == '/dev/tty1' ]]; then
    [[ -n "$CDM_SPAWN" ]] && return
    # Avoid executing cdm(1) when X11 has already been started.
    [[ -z "$DISPLAY$SSH_TTY$(pgrep xinit)" ]] && exec cdm
fi

cdmrc

Themes

# (~/.config/cdm|/etc/)cdmrc

dialogrc=/usr/share/doc/cdm/themes/lime

Menu Choices

You do not need to manually configure menu choices
cdm automatically loads entries from /usr/share/xsessions/*.desktop like other DMs.

# (~/.config/cdm|/etc/)cdmrc

# cdm is configured with 3x arrays
# indexes in each array refer to the same menu-entry

# startx ${THIS_COMMAND}
binlist=(
    "/bin/i3"                                                     # i3 (default xorg.conf)
    "/bin/openbox-session -- -config xorg.conf-desktop"            # openbox 3x 1920x1080
    "/bin/openbox-session -- -config xorg.conf-widescreen-gaming"  # openbox 1x 5760x1080
    "/bin/zsh -i"           # startx /bin/zsh -i                  # tty login
)

# name of each choice
namelist=(
    "i3" 
    "openbox"
    "tty" 
)

# if choice requires an (X)-server, or is a (C)onsole
flaglist=(
    X
    X
    C
)