# Trouble configuring DWM from ports.



## Dan9 (Apr 3, 2010)

I searched up on how to compile DWM and configure it from ports and found these threads:

http://forums.freebsd.org/showthread.php?t=7816
http://forums.freebsd.org/showthread.php?t=724


```
# cd /usr/ports/x11-wm/dwm && make DWM_CONF=/path/to/your/config.h install clean
```

Whenever I do this, it wouldn't compile and I'll get some error. I don't remember what the exact problem was since I never used FreeBSD for several months and I need to wait until April 10 (from what I heard) to reinstall it since the ports is currently unstable. I could get DWM (compiling and configuring) working easily on slackware but I couldn't setup on FreeBSD since my knowledge is still very limited. I been wanting to make a full switch to FreeBSD so I'd like to be prepared when the ports is stable again.

This is going to be the config.h I'll be using.


```
/* appearance */
static const char font[]            = "xft:Bitstream Vera Sans-8";
static const char normbordercolor[] = "#000000";
static const char normbgcolor[]     = "#000000";
static const char normfgcolor[]     = "#FFFFFF";
static const char selbordercolor[]  = "#000000";
static const char selbgcolor[]      = "#000000";
static const char selfgcolor[]      = "#EEC900";
static const unsigned int borderpx  = 1;
static const unsigned int snap      = 4;
static const Bool showbar           = True;
static const Bool topbar            = True;

/* tags & layouts */
static const char      *tags[] = { "term", "web", "media", "mail", "misc" };
static const int initlayouts[] = { 0, 0, 0, 1, 2 }; 

static const Rule rules[] = {
	/* class         instance    title       tags mask     isfloating   monitor */
        { "mplayer",     NULL,       NULL,       1 << 3,       True,        -1 },
        { "Gimp",        NULL,       NULL,       1 << 3,       True,        -1 },
        { "Mirage",      NULL,       NULL,       1 << 3,       True,        -1 },
        {  NULL,         NULL,      "tmux",      1 << 1,       False,       -1 },
};

/* layout(s) */
static const float mfact      = 0.55;  /*  factor of master area size [0.05..0.95]         */
static const Bool resizehints = False; /*  True means respect size hints in tiled resizals */

static const Layout layouts[] = {
	/* symbol     arrange function */
	{ "[M]",      monocle },       /* first entry is default */
	{ "[T]",      tile },   
	{ "[F]",      NULL },
};

/*  key definitions  */
#define MODKEY Mod4Mask
#define TAGKEYS(KEY,TAG) \
	{ MODKEY,                       KEY,      view,           {.ui = 1 << TAG} }, \
	{ MODKEY|ControlMask,           KEY,      toggleview,     {.ui = 1 << TAG} }, \
	{ MODKEY|ShiftMask,             KEY,      tag,            {.ui = 1 << TAG} }, \
	{ MODKEY|ControlMask|ShiftMask, KEY,      toggletag,      {.ui = 1 << TAG} },

/* commands */
static const char *dmenucmd[]  = { "dmenu_run", "-fn", font, "-nb", normbgcolor, "-nf", normfgcolor, "-sb", selbgcolor, "-sf", selfgcolor, NULL };
static const char *termcmd[]   = { "urxvtc", NULL };
static const char *xtermcmd[]  = { "xterm", NULL };
static const char *mailcmd[]   = { "thunderbird", NULL };
static const char *tmuxcmd[]   = { "urxvtc", "-title", "tmux", "-e", "tmux", NULL };
static const char *lockcmd[]   = { "xscreensaver-command", "--lock", NULL };
static const char *rebootcmd[] = { "sudo", "shutdown", "-r", "now", NULL };
static const char *quitcmd[]   = { "sudo", "shutdown", "-h", "now", NULL };

static Key keys[] = {
	/*   modifier                   key        function        argument        */
	{ 0,                            XK_Menu,   spawn,          {.v = dmenucmd } },
	{ MODKEY|ShiftMask,             XK_Return, spawn,          {.v = termcmd } },
        { ControlMask|Mod1Mask,         XK_w,      spawn,          {.v = webcmd } },
        { ControlMask|Mod1Mask,         XK_m,      spawn,          {.v = mailcmd } },
        { ControlMask|Mod1Mask,         XK_x,      spawn,          {.v = xtermcmd } },
        { ControlMask|Mod1Mask,         XK_t,      spawn,          {.v = tmuxcmd } },
        { ControlMask|Mod1Mask,         XK_l,      spawn,          {.v = lockcmd } },
        { ControlMask|Mod1Mask,         XK_r,      spawn,          {.v = rebootcmd } },
        { ControlMask|Mod1Mask,         XK_q,      spawn,          {.v = quitcmd } },
	{ MODKEY,                       XK_b,      togglebar,      {0} },
	{ MODKEY,                       XK_j,      focusstack,     {.i = +1 } },
	{ MODKEY,                       XK_k,      focusstack,     {.i = -1 } },
        { MODKEY|ControlMask,           XK_j,      pushdown,       {0} },
        { MODKEY|ControlMask,           XK_k,      pushup,         {0} },
	{ MODKEY,                       XK_h,      setmfact,       {.f = -0.05} },
	{ MODKEY,                       XK_l,      setmfact,       {.f = +0.05} },
	{ MODKEY,                       XK_Return, zoom,           {0} },
	{ MODKEY,                       XK_Tab,    view,           {0} },
	{ MODKEY|ShiftMask,             XK_c,      killclient,     {0} },
	{ MODKEY,                       XK_m,      setlayout,      {.v = &layouts[0]} },
	{ MODKEY,                       XK_t,      setlayout,      {.v = &layouts[1]} },
	{ MODKEY,                       XK_f,      setlayout,      {.v = &layouts[2]} },
	{ MODKEY,                       XK_space,  setlayout,      {0} },
	{ MODKEY|ShiftMask,             XK_space,  togglefloating, {0} },
	{ MODKEY,                       XK_0,      view,           {.ui = ~0 } },
	{ MODKEY|ShiftMask,             XK_0,      tag,            {.ui = ~0 } },
	{ MODKEY,                       XK_comma,  focusmon,       {.i = -1 } },
	{ MODKEY,                       XK_period, focusmon,       {.i = +1 } },
	{ MODKEY|ShiftMask,             XK_comma,  tagmon,         {.i = -1 } },
	{ MODKEY|ShiftMask,             XK_period, tagmon,         {.i = +1 } },
        { MODKEY,                       XK_Left,   cycle,          {.i = -1 } },
        { MODKEY,                       XK_Right,  cycle,          {.i = +1 } },
        { MODKEY|ControlMask,           XK_Left,   tagcycle,       {.i = -1 } },
        { MODKEY|ControlMask,           XK_Right,  tagcycle,       {.i = +1 } },
	TAGKEYS(                        XK_1,                      0)
	TAGKEYS(                        XK_2,                      1)
	TAGKEYS(                        XK_3,                      2)
	TAGKEYS(                        XK_4,                      3)
	TAGKEYS(                        XK_5,                      4)
	TAGKEYS(                        XK_6,                      5)
	TAGKEYS(                        XK_7,                      6)
	TAGKEYS(                        XK_8,                      7)
	TAGKEYS(                        XK_9,                      8)
	{ MODKEY|ShiftMask,             XK_q,      quit,           {0} },
};

/* button definitions */
/* click can be ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */
static Button buttons[] = {
	/* click                event mask      button          function        argument */
	{ ClkLtSymbol,          0,              Button1,        setlayout,      {0} },
	{ ClkLtSymbol,          0,              Button3,        setlayout,      {.v = &layouts[2]} },
	{ ClkWinTitle,          0,              Button2,        zoom,           {0} },
	{ ClkStatusText,        0,              Button2,        spawn,          {.v = termcmd } },
	{ ClkClientWin,         MODKEY,         Button1,        movemouse,      {0} },
	{ ClkClientWin,         MODKEY,         Button2,        togglefloating, {0} },
	{ ClkClientWin,         MODKEY,         Button3,        resizemouse,    {0} },
	{ ClkTagBar,            0,              Button1,        view,           {0} },
	{ ClkTagBar,            0,              Button3,        toggleview,     {0} },
	{ ClkTagBar,            MODKEY,         Button1,        tag,            {0} },
	{ ClkTagBar,            MODKEY,         Button3,        toggletag,      {0} },
};
```

I saved this config.h in /home/name so it should work with this correct?


```
# cd /usr/ports/x11-wm/dwm && make DWM_CONF=/home/name/config.h install clean
```

I'm not sure if it's my config.h that is bad (not a programmer...yet) or I'm trying to compile it from ports incorrectly.


----------



## DutchDaemon (Apr 3, 2010)

The make syntax is correct (it's literally in the port's Makefile), so the .h must contain an error. You haven't posted the compile/configure error.

This is what happens here:


```
# cd /usr/ports/x11-wm/dwm && make DWM_CONF=/tmp/config.h
You can build dwm with your own config.h using the DWM_CONF knob:
make DWM_CONF=/path/to/dwm/config.h install clean
Note: Pre-5.6 config.h-files no longer work.
=> dwm-5.7.2.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
=> Attempting to fetch from http://dl.suckless.org/dwm/.
dwm-5.7.2.tar.gz                              100% of   19 kB  790 kBps
===>  Extracting for dwm-5.7.2
=> MD5 Checksum OK for dwm-5.7.2.tar.gz.
=> SHA256 Checksum OK for dwm-5.7.2.tar.gz.
creating config.h from /tmp/config.h
===>  Patching for dwm-5.7.2
===>  Applying FreeBSD patches for dwm-5.7.2
===>   dwm-5.7.2 depends on file: /usr/local/libdata/pkgconfig/x11.pc - found
===>   dwm-5.7.2 depends on file: /usr/local/libdata/pkgconfig/xinerama.pc - found
===>  Configuring for dwm-5.7.2
===>  Building for dwm-5.7.2
dwm build options:
CFLAGS   = -O2 -pipe -march=nocona -fno-strict-aliasing -march=nocona -std=c99 -I. -I/usr/include -I/usr/local/include -DVERSION="5.7.2" -DXINERAMA
LDFLAGS  =  -L/usr/lib -lc -L/usr/local/lib -lX11 -L/usr/local/lib -lXinerama
CC       = cc
CC dwm.c
In file included from dwm.c:274:
[B]config.h:59: error: 'webcmd' undeclared here (not in a function)
config.h:69: error: 'pushdown' undeclared here (not in a function)
config.h:70: error: 'pushup' undeclared here (not in a function)
config.h:87: error: 'cycle' undeclared here (not in a function)
config.h:89: error: 'tagcycle' undeclared here (not in a function)[/B]
*** Error code 1

Stop in /usr/ports/x11-wm/dwm/work/dwm-5.7.2.
*** Error code 1

Stop in /usr/ports/x11-wm/dwm.
```


----------



## Dan9 (Apr 3, 2010)

Strange, I can't seem to edit my first post.

I was going to change


```
static const char font[]            = "xft:Bitstream Vera Sans-8";
```

to 


```
static const char font[]            = "-*-bitstream vera sans-medium-r-*-*-10-*-*-*-*-*-*-*";
```

Thank you DutchDaemon. 


```
[B]config.h:59: error: 'webcmd' undeclared here (not in a function)
config.h:69: error: 'pushdown' undeclared here (not in a function)
config.h:70: error: 'pushup' undeclared here (not in a function)
config.h:87: error: 'cycle' undeclared here (not in a function)
config.h:89: error: 'tagcycle' undeclared here (not in a function)[/B]
```

I tried to fix it and will try this again when ports is stable again. 


```
/* appearance */
static const char font[]            = "-*-bitstream vera sans-medium-r-*-*-10-*-*-*-*-*-*-*";
static const char normbordercolor[] = "#000000";
static const char normbgcolor[]     = "#000000";
static const char normfgcolor[]     = "#FFFFFF";
static const char selbordercolor[]  = "#000000";
static const char selbgcolor[]      = "#000000";
static const char selfgcolor[]      = "#EEC900";
static const unsigned int borderpx  = 1;
static const unsigned int snap      = 4;
static const Bool showbar           = True;
static const Bool topbar            = True;

/* tags & layouts */
static const char      *tags[] = { "term", "web", "media", "mail", "misc" };
static const int initlayouts[] = { 0, 0, 0, 1, 2 }; 

static const Rule rules[] = {
	/* class         instance    title       tags mask     isfloating   monitor */
        { "mplayer",     NULL,       NULL,       1 << 3,       True,        -1 },
        { "Gimp",        NULL,       NULL,       1 << 3,       True,        -1 },
        { "Mirage",      NULL,       NULL,       1 << 3,       True,        -1 },
        {  NULL,         NULL,      "tmux",      1 << 1,       False,       -1 },
};

/* layout(s) */
static const float mfact      = 0.55;  /*  factor of master area size [0.05..0.95]         */
static const Bool resizehints = False; /*  True means respect size hints in tiled resizals */

static const Layout layouts[] = {
	/* symbol     arrange function */
	{ "[M]",      monocle },       /* first entry is default */
	{ "[T]",      tile },   
	{ "[F]",      NULL },
};

/*  key definitions  */
#define MODKEY Mod4Mask
#define TAGKEYS(KEY,TAG) \
	{ MODKEY,                       KEY,      view,           {.ui = 1 << TAG} }, \
	{ MODKEY|ControlMask,           KEY,      toggleview,     {.ui = 1 << TAG} }, \
	{ MODKEY|ShiftMask,             KEY,      tag,            {.ui = 1 << TAG} }, \
	{ MODKEY|ControlMask|ShiftMask, KEY,      toggletag,      {.ui = 1 << TAG} },

/* commands */
static const char *dmenucmd[]  = { "dmenu_run", "-fn", font, "-nb", normbgcolor, "-nf", normfgcolor, "-sb", selbgcolor, "-sf", selfgcolor, NULL };
static const char *termcmd[]   = { "urxvtc", NULL };
static const char *xtermcmd[]  = { "xterm", NULL };
static const char *mailcmd[]   = { "thunderbird", NULL };
static const char *tmuxcmd[]   = { "urxvtc", "-title", "tmux", "-e", "tmux", NULL };
static const char *lockcmd[]   = { "xscreensaver-command", "--lock", NULL };
static const char *rebootcmd[] = { "sudo", "shutdown", "-r", "now", NULL };
static const char *quitcmd[]   = { "sudo", "shutdown", "-h", "now", NULL };

static Key keys[] = {
	/*   modifier                   key        function        argument        */
	{ 0,                            XK_Menu,   spawn,          {.v = dmenucmd } },
	{ MODKEY|ShiftMask,             XK_Return, spawn,          {.v = termcmd } },
        { ControlMask|Mod1Mask,         XK_m,      spawn,          {.v = mailcmd } },
        { ControlMask|Mod1Mask,         XK_x,      spawn,          {.v = xtermcmd } },
        { ControlMask|Mod1Mask,         XK_t,      spawn,          {.v = tmuxcmd } },
        { ControlMask|Mod1Mask,         XK_l,      spawn,          {.v = lockcmd } },
        { ControlMask|Mod1Mask,         XK_r,      spawn,          {.v = rebootcmd } },
        { ControlMask|Mod1Mask,         XK_q,      spawn,          {.v = quitcmd } },
	{ MODKEY,                       XK_b,      togglebar,      {0} },
	{ MODKEY,                       XK_j,      focusstack,     {.i = +1 } },
	{ MODKEY,                       XK_k,      focusstack,     {.i = -1 } },
	{ MODKEY,                       XK_h,      setmfact,       {.f = -0.05} },
	{ MODKEY,                       XK_l,      setmfact,       {.f = +0.05} },
	{ MODKEY,                       XK_Return, zoom,           {0} },
	{ MODKEY,                       XK_Tab,    view,           {0} },
	{ MODKEY|ShiftMask,             XK_c,      killclient,     {0} },
	{ MODKEY,                       XK_m,      setlayout,      {.v = &layouts[0]} },
	{ MODKEY,                       XK_t,      setlayout,      {.v = &layouts[1]} },
	{ MODKEY,                       XK_f,      setlayout,      {.v = &layouts[2]} },
	{ MODKEY,                       XK_space,  setlayout,      {0} },
	{ MODKEY|ShiftMask,             XK_space,  togglefloating, {0} },
	{ MODKEY,                       XK_0,      view,           {.ui = ~0 } },
	{ MODKEY|ShiftMask,             XK_0,      tag,            {.ui = ~0 } },
	TAGKEYS(                        XK_1,                      0)
	TAGKEYS(                        XK_2,                      1)
	TAGKEYS(                        XK_3,                      2)
	TAGKEYS(                        XK_4,                      3)
	TAGKEYS(                        XK_5,                      4)
	TAGKEYS(                        XK_6,                      5)
	TAGKEYS(                        XK_7,                      6)
	TAGKEYS(                        XK_8,                      7)
	TAGKEYS(                        XK_9,                      8)
	{ MODKEY|ShiftMask,             XK_q,      quit,           {0} },
};

/* button definitions */
/* click can be ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */
static Button buttons[] = {
	/* click                event mask      button          function        argument */
	{ ClkLtSymbol,          0,              Button1,        setlayout,      {0} },
	{ ClkLtSymbol,          0,              Button3,        setlayout,      {.v = &layouts[2]} },
	{ ClkWinTitle,          0,              Button2,        zoom,           {0} },
	{ ClkStatusText,        0,              Button2,        spawn,          {.v = termcmd } },
	{ ClkClientWin,         MODKEY,         Button1,        movemouse,      {0} },
	{ ClkClientWin,         MODKEY,         Button2,        togglefloating, {0} },
	{ ClkClientWin,         MODKEY,         Button3,        resizemouse,    {0} },
	{ ClkTagBar,            0,              Button1,        view,           {0} },
	{ ClkTagBar,            0,              Button3,        toggleview,     {0} },
	{ ClkTagBar,            MODKEY,         Button1,        tag,            {0} },
	{ ClkTagBar,            MODKEY,         Button3,        toggletag,      {0} },
};
```


----------



## Dan9 (Apr 3, 2010)

> Strange, I can't seem to edit my first post.



Nevermind, I figured it out.



> Currently, only members of group called Regulars are able to edit and delete their own posts. The regulars group is so called "auto-promotion group", and users are being promoted to this group after certain conditions are met, i.e. this currently means that given user has to have posted at least 10 approved messages AND 10 days of registered membership.


----------

