diff --git a/LICENSE b/LICENSE
index 6fa0384..ae87dc6 100644
--- a/LICENSE
+++ b/LICENSE
@@ -7,7 +7,7 @@ Copyright 2016 Vincent Loupmon <vincentloupmon@gmail.com>
 Copyright 2016 Daniel Walter <d.walter@0x90.at>
 Copyright 2016-2018 Ali H. Fardan <raiz@firemail.cc>
 Copyright 2016 Jody Leonard <me@jodyleonard.com>
-Copyright 2016-2018 Quentin Rameau <quinq@fifth.space>
+Copyright 2016-2017 Quentin Rameau <quinq@fifth.space>
 Copyright 2016 Mike Coddington <mike@coddington.us>
 Copyright 2016-2018 parazyd <parazyd@dyne.org>
 Copyright 2017 Tobias Stoeckmann <tobias@stoeckmann.org>
diff --git a/Makefile b/Makefile
index c68a271..00c35c4 100644
--- a/Makefile
+++ b/Makefile
@@ -2,34 +2,29 @@
 # slstatus - suckless status monitor
 .POSIX:
 
-include os.mk
 include config.mk
 
 REQ = util
 COM =\
-	components/$(OS)/battery \
-	components/$(OS)/cpu \
+	components/battery\
+	components/cpu\
 	components/datetime\
 	components/disk\
-	components/$(OS)/entropy \
+	components/entropy\
 	components/hostname\
 	components/ip\
 	components/kernel_release\
 	components/keyboard_indicators\
 	components/load_avg\
 	components/num_files\
-	components/$(OS)/ram \
+	components/ram\
 	components/run_command\
-	components/$(OS)/swap \
-	components/$(OS)/temperature \
-	components/$(OS)/uptime \
+	components/swap\
+	components/temperature\
+	components/uptime\
 	components/user\
 	components/volume\
-	components/$(OS)/wifi
-
-SLSCFLAGS  = -I$(X11INC) -D_DEFAULT_SOURCE $(CFLAGS)
-SLSLDFLAGS = -L$(X11LIB) $(LDFLAGS)
-SLSLIBS    = -lX11 $(OSLIBS) $(LIBS)
+	components/wifi
 
 all: slstatus
 
@@ -41,18 +36,14 @@ config.h:
 	cp config.def.h $@
 
 .o:
-	$(CC) -o $@ $(SLSLDFLAGS) $< $(COM:=.o) $(REQ:=.o) $(SLSLIBS)
+	$(CC) -o $@ $(LDFLAGS) $< $(COM:=.o) $(REQ:=.o) $(LDLIBS)
 
 .c.o:
-	$(CC) -o $@ -c $(SLSCFLAGS) $<
+	$(CC) -o $@ -c $(CPPFLAGS) $(CFLAGS) $<
 
 clean:
 	rm -f slstatus slstatus.o $(COM:=.o) $(REQ:=.o)
 
-distclean:
-	for os in Linux OpenBSD; do make OS="$$os" clean; done
-	rm -f os.mk
-
 dist:
 	rm -rf "slstatus-$(VERSION)"
 	mkdir -p "slstatus-$(VERSION)/components"
diff --git a/README b/README
index b09fb77..78dc7ab 100644
--- a/README
+++ b/README
@@ -36,9 +36,8 @@ In order to build slstatus you need the Xlib header files.
 
 Installation
 ------------
-Run ./configure first to detect your operating system.
-Optionally edit config.mk to match your local setup (slstatus is installed into
-the /usr/local namespace by default). Uncomment OSSLIBS on OpenBSD.
+Edit config.mk to match your local setup (slstatus is installed into the
+/usr/local namespace by default). Uncomment OSSLIBS on OpenBSD.
 
 Afterwards enter the following command to build and install slstatus (if
 necessary as root):
diff --git a/components/Linux/ram.c b/components/Linux/ram.c
deleted file mode 100644
index 7df5f85..0000000
--- a/components/Linux/ram.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/* See LICENSE file for copyright and license details. */
-#include <stdio.h>
-
-#include "../../util.h"
-
-const char *
-ram_free(void)
-{
-	long free;
-
-	return (pscanf("/proc/meminfo", "MemFree: %ld kB\n", &free) == 1) ?
-	       bprintf("%f", (float)free / 1024 / 1024) : NULL;
-}
-
-const char *
-ram_perc(void)
-{
-	long total, free, buffers, cached;
-
-	return (pscanf("/proc/meminfo",
-	               "MemTotal: %ld kB\n"
-	               "MemFree: %ld kB\n"
-	               "MemAvailable: %ld kB\nBuffers: %ld kB\n"
-	               "Cached: %ld kB\n",
-	               &total, &free, &buffers, &buffers, &cached) == 5) ?
-	       bprintf("%d", 100 * ((total - free) - (buffers + cached)) / total) :
-	       NULL;
-}
-
-const char *
-ram_total(void)
-{
-	long total;
-
-	return (pscanf("/proc/meminfo", "MemTotal: %ld kB\n", &total) == 1) ?
-	       bprintf("%f", (float)total / 1024 / 1024) : NULL;
-}
-
-const char *
-ram_used(void)
-{
-	long total, free, buffers, cached;
-
-	return (pscanf("/proc/meminfo",
-	               "MemTotal: %ld kB\n"
-	               "MemFree: %ld kB\n"
-	               "MemAvailable: %ld kB\nBuffers: %ld kB\n"
-	               "Cached: %ld kB\n",
-	               &total, &free, &buffers, &buffers, &cached) == 5) ?
-	       bprintf("%f", (float)(total - free - buffers - cached) / 1024 / 1024) :
-	       NULL;
-}
diff --git a/components/Linux/temperature.c b/components/Linux/temperature.c
deleted file mode 100644
index fa50826..0000000
--- a/components/Linux/temperature.c
+++ /dev/null
@@ -1,15 +0,0 @@
-/* See LICENSE file for copyright and license details. */
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "../../util.h"
-
-const char *
-temp(const char *file)
-{
-	int temp;
-
-	return (pscanf(file, "%d", &temp) == 1) ?
-	       bprintf("%d", temp / 1000) : NULL;
-}
diff --git a/components/Linux/uptime.c b/components/Linux/uptime.c
deleted file mode 100644
index e7afc8e..0000000
--- a/components/Linux/uptime.c
+++ /dev/null
@@ -1,24 +0,0 @@
-/* See LICENSE file for copyright and license details. */
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-#include <sys/sysinfo.h>
-
-#include "../../util.h"
-
-const char *
-uptime(void)
-{
-	int h;
-	int m;
-	int uptime = 0;
-	struct sysinfo info;
-
-	sysinfo(&info);
-	uptime = info.uptime;
-
-	h = uptime / 3600;
-	m = (uptime - h * 3600) / 60;
-
-	return bprintf("%dh %dm", h, m);
-}
diff --git a/components/OpenBSD/battery.c b/components/OpenBSD/battery.c
deleted file mode 100644
index daefd77..0000000
--- a/components/OpenBSD/battery.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* See LICENSE file for copyright and license details. */
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-#include <sys/ioctl.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <machine/apmvar.h>
-
-#include "../../util.h"
-
-const char *
-battery_perc(const char *null)
-{
-	struct apm_power_info apm_info;
-	int fd;
-
-	fd = open("/dev/apm", O_RDONLY);
-	if (fd < 0) {
-		fprintf(stderr, "open '/dev/apm': %s\n", strerror(errno));
-		return NULL;
-	}
-
-	if (ioctl(fd, APM_IOC_GETPOWER, &apm_info) < 0) {
-		fprintf(stderr, "ioctl 'APM_IOC_GETPOWER': %s\n", strerror(errno));
-		close(fd);
-		return NULL;
-	}
-	close(fd);
-
-	return bprintf("%d", apm_info.battery_life);
-}
diff --git a/components/OpenBSD/cpu.c b/components/OpenBSD/cpu.c
deleted file mode 100644
index 11f1812..0000000
--- a/components/OpenBSD/cpu.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* See LICENSE file for copyright and license details. */
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-#include <sys/sysctl.h>
-
-#include "../../util.h"
-
-const char *
-cpu_freq(void)
-{
-	int freq, mib[2];
-	size_t size;
-
-	mib[0] = CTL_HW;
-	mib[1] = HW_CPUSPEED;
-
-	size = sizeof(freq);
-
-	if (sysctl(mib, 2, &freq, &size, NULL, 0) == -1) {
-		fprintf(stderr, "sysctl 'HW_CPUSPEED': %s\n", strerror(errno));
-		return NULL;
-	}
-
-	return bprintf("%d", freq);
-}
diff --git a/components/OpenBSD/entropy.c b/components/OpenBSD/entropy.c
deleted file mode 100644
index e69de29..0000000
diff --git a/components/OpenBSD/ram.c b/components/OpenBSD/ram.c
deleted file mode 100644
index f7c81d1..0000000
--- a/components/OpenBSD/ram.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/* See LICENSE file for copyright and license details. */
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/sysctl.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#include "../../util.h"
-
-inline int
-load_uvmexp(struct uvmexp *uvmexp)
-{
-	int uvmexp_mib[] = {CTL_VM, VM_UVMEXP};
-	size_t size;
-
-	size = sizeof(*uvmexp);
-
-	return sysctl(uvmexp_mib, 2, uvmexp, &size, NULL, 0) >= 0 ? 1 : 0;
-}
-
-const char *
-ram_free(void)
-{
-	struct uvmexp uvmexp;
-	float free;
-	int free_pages;
-
-	if (load_uvmexp(&uvmexp)) {
-		free_pages = uvmexp.npages - uvmexp.active;
-		free = (double) (free_pages * uvmexp.pagesize) / 1024 / 1024 / 1024;
-		return bprintf("%f", free);
-	}
-
-	return NULL;
-}
-
-const char *
-ram_perc(void)
-{
-	struct uvmexp uvmexp;
-	int percent;
-
-	if (load_uvmexp(&uvmexp)) {
-		percent = uvmexp.active * 100 / uvmexp.npages;
-		return bprintf("%d", percent);
-	}
-
-	return NULL;
-}
-
-const char *
-ram_total(void)
-{
-	struct uvmexp uvmexp;
-	float total;
-
-	if (load_uvmexp(&uvmexp)) {
-		total = (double) (uvmexp.npages * uvmexp.pagesize) / 1024 / 1024 / 1024;
-		return bprintf("%f", total);
-	}
-
-	return NULL;
-}
-
-const char *
-ram_used(void)
-{
-	struct uvmexp uvmexp;
-	float used;
-
-	if (load_uvmexp(&uvmexp)) {
-		used = (double) (uvmexp.active * uvmexp.pagesize) / 1024 / 1024 / 1024;
-		return bprintf("%f", used);
-	}
-
-	return NULL;
-}
diff --git a/components/OpenBSD/swap.c b/components/OpenBSD/swap.c
deleted file mode 100644
index e69de29..0000000
diff --git a/components/OpenBSD/wifi.c b/components/OpenBSD/wifi.c
deleted file mode 100644
index e69de29..0000000
diff --git a/components/Linux/battery.c b/components/battery.c
similarity index 63%
rename from components/Linux/battery.c
rename to components/battery.c
index 654ddab..955d8ab 100644
--- a/components/Linux/battery.c
+++ b/components/battery.c
@@ -2,11 +2,19 @@
 #include <errno.h>
 #include <stdio.h>
 #include <string.h>
+#if defined(__linux__)
 #include <limits.h>
 #include <string.h>
+#elif defined(__OpenBSD__)
+#include <sys/ioctl.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <machine/apmvar.h>
+#endif
 
-#include "../../util.h"
+#include "../util.h"
 
+#if defined(__linux__)
 const char *
 battery_perc(const char *bat)
 {
@@ -17,7 +25,31 @@ battery_perc(const char *bat)
 	return (pscanf(path, "%i", &perc) == 1) ?
 	       bprintf("%d", perc) : NULL;
 }
+#elif defined(__OpenBSD__)
+const char *
+battery_perc(const char *null)
+{
+	struct apm_power_info apm_info;
+	int fd;
 
+	fd = open("/dev/apm", O_RDONLY);
+	if (fd < 0) {
+		fprintf(stderr, "open '/dev/apm': %s\n", strerror(errno));
+		return NULL;
+	}
+
+	if (ioctl(fd, APM_IOC_GETPOWER, &apm_info) < 0) {
+		fprintf(stderr, "ioctl 'APM_IOC_GETPOWER': %s\n", strerror(errno));
+		close(fd);
+		return NULL;
+	}
+	close(fd);
+
+	return bprintf("%d", apm_info.battery_life);
+}
+#endif
+
+#if defined(__linux__)
 const char *
 battery_power(const char *bat)
 {
@@ -56,3 +88,4 @@ battery_state(const char *bat)
 	}
 	return (i == LEN(map)) ? "?" : map[i].symbol;
 }
+#endif
diff --git a/components/Linux/cpu.c b/components/cpu.c
similarity index 75%
rename from components/Linux/cpu.c
rename to components/cpu.c
index bfc204c..11e2e98 100644
--- a/components/Linux/cpu.c
+++ b/components/cpu.c
@@ -2,9 +2,13 @@
 #include <errno.h>
 #include <stdio.h>
 #include <string.h>
+#if defined(__OpenBSD__)
+#include <sys/sysctl.h>
+#endif
 
-#include "../../util.h"
+#include "../util.h"
 
+#if defined(__linux__)
 const char *
 cpu_freq(void)
 {
@@ -62,3 +66,23 @@ cpu_iowait(void)
 
 	return bprintf("%d", perc);
 }
+#elif defined(__OpenBSD__)
+const char *
+cpu_freq(void)
+{
+	int freq, mib[2];
+	size_t size;
+
+	mib[0] = CTL_HW;
+	mib[1] = HW_CPUSPEED;
+
+	size = sizeof(freq);
+
+	if (sysctl(mib, 2, &freq, &size, NULL, 0) == -1) {
+		fprintf(stderr, "sysctl 'HW_CPUSPEED': %s\n", strerror(errno));
+		return NULL;
+	}
+
+	return bprintf("%d", freq);
+}
+#endif
diff --git a/components/Linux/entropy.c b/components/entropy.c
similarity index 82%
rename from components/Linux/entropy.c
rename to components/entropy.c
index 17be270..65c65a1 100644
--- a/components/Linux/entropy.c
+++ b/components/entropy.c
@@ -1,7 +1,8 @@
 /* See LICENSE file for copyright and license details. */
+#if defined(__linux__)
 #include <stdio.h>
 
-#include "../../util.h"
+#include "../util.h"
 
 const char *
 entropy(void)
@@ -11,3 +12,4 @@ entropy(void)
 	return (pscanf("/proc/sys/kernel/random/entropy_avail", "%d", &num) == 1) ?
 	               bprintf("%d", num) : NULL;
 }
+#endif
diff --git a/components/ram.c b/components/ram.c
new file mode 100644
index 0000000..55ec5b9
--- /dev/null
+++ b/components/ram.c
@@ -0,0 +1,129 @@
+/* See LICENSE file for copyright and license details. */
+#include <stdio.h>
+#if defined (__OpenBSD__)
+#include <sys/types.h>
+#include <sys/sysctl.h>
+#include <stdlib.h>
+#include <unistd.h>
+#endif
+
+#include "../util.h"
+
+#if defined(__linux__)
+const char *
+ram_free(void)
+{
+	long free;
+
+	return (pscanf("/proc/meminfo", "MemFree: %ld kB\n", &free) == 1) ?
+	       bprintf("%f", (float)free / 1024 / 1024) : NULL;
+}
+
+const char *
+ram_perc(void)
+{
+	long total, free, buffers, cached;
+
+	return (pscanf("/proc/meminfo",
+	               "MemTotal: %ld kB\n"
+	               "MemFree: %ld kB\n"
+	               "MemAvailable: %ld kB\nBuffers: %ld kB\n"
+	               "Cached: %ld kB\n",
+	               &total, &free, &buffers, &buffers, &cached) == 5) ?
+	       bprintf("%d", 100 * ((total - free) - (buffers + cached)) / total) :
+	       NULL;
+}
+
+const char *
+ram_total(void)
+{
+	long total;
+
+	return (pscanf("/proc/meminfo", "MemTotal: %ld kB\n", &total) == 1) ?
+	       bprintf("%f", (float)total / 1024 / 1024) : NULL;
+}
+
+const char *
+ram_used(void)
+{
+	long total, free, buffers, cached;
+
+	return (pscanf("/proc/meminfo",
+	               "MemTotal: %ld kB\n"
+	               "MemFree: %ld kB\n"
+	               "MemAvailable: %ld kB\nBuffers: %ld kB\n"
+	               "Cached: %ld kB\n",
+	               &total, &free, &buffers, &buffers, &cached) == 5) ?
+	       bprintf("%f", (float)(total - free - buffers - cached) / 1024 / 1024) :
+	       NULL;
+}
+#elif defined(__OpenBSD__)
+inline int
+load_uvmexp(struct uvmexp *uvmexp)
+{
+	int uvmexp_mib[] = {CTL_VM, VM_UVMEXP};
+	size_t size;
+
+	size = sizeof(*uvmexp);
+
+	return sysctl(uvmexp_mib, 2, uvmexp, &size, NULL, 0) >= 0 ? 1 : 0;
+}
+
+const char *
+ram_free(void)
+{
+	struct uvmexp uvmexp;
+	float free;
+	int free_pages;
+
+	if (load_uvmexp(&uvmexp)) {
+		free_pages = uvmexp.npages - uvmexp.active;
+		free = (double) (free_pages * uvmexp.pagesize) / 1024 / 1024 / 1024;
+		return bprintf("%f", free);
+	}
+
+	return NULL;
+}
+
+const char *
+ram_perc(void)
+{
+	struct uvmexp uvmexp;
+	int percent;
+
+	if (load_uvmexp(&uvmexp)) {
+		percent = uvmexp.active * 100 / uvmexp.npages;
+		return bprintf("%d", percent);
+	}
+
+	return NULL;
+}
+
+const char *
+ram_total(void)
+{
+	struct uvmexp uvmexp;
+	float total;
+
+	if (load_uvmexp(&uvmexp)) {
+		total = (double) (uvmexp.npages * uvmexp.pagesize) / 1024 / 1024 / 1024;
+		return bprintf("%f", total);
+	}
+
+	return NULL;
+}
+
+const char *
+ram_used(void)
+{
+	struct uvmexp uvmexp;
+	float used;
+
+	if (load_uvmexp(&uvmexp)) {
+		used = (double) (uvmexp.active * uvmexp.pagesize) / 1024 / 1024 / 1024;
+		return bprintf("%f", used);
+	}
+
+	return NULL;
+}
+#endif
diff --git a/components/Linux/swap.c b/components/swap.c
similarity index 98%
rename from components/Linux/swap.c
rename to components/swap.c
index bce9d5a..f3bbeb2 100644
--- a/components/Linux/swap.c
+++ b/components/swap.c
@@ -1,9 +1,10 @@
 /* See LICENSE file for copyright and license details. */
+#if defined(__linux__)
 #include <errno.h>
 #include <stdio.h>
 #include <string.h>
 
-#include "../../util.h"
+#include "../util.h"
 
 const char *
 swap_free(void)
@@ -134,3 +135,4 @@ swap_used(void)
 
 	return bprintf("%f", (float)(total - free - cached) / 1024 / 1024);
 }
+#endif
diff --git a/components/OpenBSD/temperature.c b/components/temperature.c
similarity index 71%
rename from components/OpenBSD/temperature.c
rename to components/temperature.c
index 8098868..e2c6a77 100644
--- a/components/OpenBSD/temperature.c
+++ b/components/temperature.c
@@ -2,12 +2,24 @@
 #include <errno.h>
 #include <stdio.h>
 #include <string.h>
+#if defined(__OpenBSD__)
 #include <sys/sysctl.h>
 #include <sys/time.h>
 #include <sys/sensors.h>
+#endif
 
-#include "../../util.h"
+#include "../util.h"
 
+#if defined(__linux__)
+const char *
+temp(const char *file)
+{
+	int temp;
+
+	return (pscanf(file, "%d", &temp) == 1) ?
+	       bprintf("%d", temp / 1000) : NULL;
+}
+#elif defined(__OpenBSD__)
 const char *
 temp(const char *null)
 {
@@ -30,3 +42,4 @@ temp(const char *null)
 
 	return bprintf("%d", (temp.value - 273150000) / 1000000); /* kelvin to celsius */
 }
+#endif
diff --git a/components/OpenBSD/uptime.c b/components/uptime.c
similarity index 63%
rename from components/OpenBSD/uptime.c
rename to components/uptime.c
index 637e2e0..debe4cb 100644
--- a/components/OpenBSD/uptime.c
+++ b/components/uptime.c
@@ -2,11 +2,33 @@
 #include <errno.h>
 #include <stdio.h>
 #include <string.h>
+#if defined(__linux__)
+#include <sys/sysinfo.h>
+#elif defined(__OpenBSD__)
 #include <sys/sysctl.h>
 #include <sys/time.h>
+#endif
 
-#include "../../util.h"
+#include "../util.h"
 
+#if defined(__linux__)
+const char *
+uptime(void)
+{
+	int h;
+	int m;
+	int uptime = 0;
+	struct sysinfo info;
+
+	sysinfo(&info);
+	uptime = info.uptime;
+
+	h = uptime / 3600;
+	m = (uptime - h * 3600) / 60;
+
+	return bprintf("%dh %dm", h, m);
+}
+#elif defined(__OpenBSD__)
 const char *
 uptime(void)
 {
@@ -38,3 +60,4 @@ uptime(void)
 
 	return bprintf("%dh %dm", h, m);
 }
+#endif
diff --git a/components/Linux/wifi.c b/components/wifi.c
similarity index 97%
rename from components/Linux/wifi.c
rename to components/wifi.c
index e86fcbc..388a30d 100644
--- a/components/Linux/wifi.c
+++ b/components/wifi.c
@@ -1,4 +1,5 @@
 /* See LICENSE file for copyright and license details. */
+#if defined(__linux__)
 #include <errno.h>
 #include <ifaddrs.h>
 #include <linux/wireless.h>
@@ -9,7 +10,7 @@
 #include <sys/ioctl.h>
 #include <unistd.h>
 
-#include "../../util.h"
+#include "../util.h"
 
 const char *
 wifi_perc(const char *iface)
@@ -88,3 +89,4 @@ wifi_essid(const char *iface)
 	else
 		return id;
 }
+#endif
diff --git a/config.mk b/config.mk
index 6fbf696..a148da4 100644
--- a/config.mk
+++ b/config.mk
@@ -4,13 +4,20 @@ VERSION = 0
 # customize below to fit your system
 
 # paths
-PREFIX    = /usr/local
+PREFIX = /usr/local
 MANPREFIX = ${PREFIX}/share/man
 
 X11INC = /usr/X11R6/include
 X11LIB = /usr/X11R6/lib
 
+# OpenBSD (uncomment)
+#OSSLIBS = -lossaudio
+
 # flags
+CPPFLAGS = -I$(X11INC) -D_DEFAULT_SOURCE
 CFLAGS   = -std=c99 -pedantic -Wall -Wextra -Os
-LDFLAGS  = -s
-LIBS     = 
+LDFLAGS  = -L$(X11LIB) -s
+LDLIBS   = -lX11 ${OSSLIBS}
+
+# compiler and linker
+CC = cc
diff --git a/configure b/configure
deleted file mode 100755
index 2a510c7..0000000
--- a/configure
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-
-os="$(uname)"
-
-printf 'OS = %s\n' "$os" > os.mk
-
-if [ "$os" = "OpenBSD" ]
-then
-	printf 'OSLIBS = -lossaudio\n' >> os.mk
-fi