I have tried NetworkManager and Wicd and was unable to configure them to do what I wish (despite being just a regular laptop user). People keep asking what do I use instead: my own scripts. They are very simple and crude, but easier to use and debug than some daemons, at least for my use-case.
Config files: wpa_supplicant blocks in /root/nm/*.conf. E.g. /root/nm/nsa.conf
cn: connect to a wifi network. Argument: network handle (or pick one automatically if none is given)
cne: connect to an ethernet network (could be extended to use a fixed MAC, 802.1x or static IP - I use such network only very rarely, so it's not scripted)
cnlog: log basic information about network we have just connected to
rn: drop connection to network
swi: switch interfaces. Arguments: old, new. E.g. swi eth0 wlan0 to switch from wired to wireless. Does not take care about DHCP client, so your lease may expire.
warn_services: show if something is listening to the world. My distribution (Debian) used to have really shitty init system that occasionally started network services despite being disabled. So I was for example broadcasting private Samba shares to public networks. Now one shitty init has been changed for another shitty one (systemd) and other applications keep listening