diff --git a/jsonnet/kube-prometheus/kube-prometheus.libsonnet b/jsonnet/kube-prometheus/kube-prometheus.libsonnet
index 044d27fcb470652942464953ef1f4c6acee7d684..709f51d396a414d4eb01899ed577438a71120933 100644
--- a/jsonnet/kube-prometheus/kube-prometheus.libsonnet
+++ b/jsonnet/kube-prometheus/kube-prometheus.libsonnet
@@ -6,17 +6,12 @@ local kubeStateMetrics = import './kube-state-metrics/kube-state-metrics.libsonn
 local nodeExporter = import './node-exporter/node-exporter.libsonnet';
 local prometheusAdapter = import './prometheus-adapter/prometheus-adapter.libsonnet';
 
+local mixins = import './mixins/monitoring-mixins.libsonnet';
+
 (import 'github.com/brancz/kubernetes-grafana/grafana/grafana.libsonnet') +
-(import 'github.com/kubernetes/kube-state-metrics/jsonnet/kube-state-metrics-mixin/mixin.libsonnet') +
-(import 'github.com/prometheus/node_exporter/docs/node-mixin/mixin.libsonnet') +
-(import 'github.com/prometheus/alertmanager/doc/alertmanager-mixin/mixin.libsonnet') +
 (import 'github.com/prometheus-operator/prometheus-operator/jsonnet/prometheus-operator/prometheus-operator.libsonnet') +
-(import 'github.com/prometheus-operator/prometheus-operator/jsonnet/mixin/mixin.libsonnet') +
 (import './prometheus/prometheus.libsonnet') +
-(import 'github.com/kubernetes-monitoring/kubernetes-mixin/mixin.libsonnet') +
-(import 'github.com/prometheus/prometheus/documentation/prometheus-mixin/mixin.libsonnet') +
-(import './alerts/alerts.libsonnet') +
-(import './rules/rules.libsonnet') +
+
 {
   alertmanager: alertmanager({
     name: 'main',
@@ -176,28 +171,29 @@ local prometheusAdapter = import './prometheus-adapter/prometheus-adapter.libson
       'TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305',
     ],
 
-    runbookURLPattern: 'https://github.com/prometheus-operator/kube-prometheus/wiki/%s',
+    //runbookURLPattern: 'https://github.com/prometheus-operator/kube-prometheus/wiki/%s',
 
     cadvisorSelector: 'job="kubelet", metrics_path="/metrics/cadvisor"',
     kubeletSelector: 'job="kubelet", metrics_path="/metrics"',
     kubeStateMetricsSelector: 'job="kube-state-metrics"',
     nodeExporterSelector: 'job="node-exporter"',
-    fsSpaceFillingUpCriticalThreshold: 15,
-    notKubeDnsSelector: 'job!="kube-dns"',
+    //fsSpaceFillingUpCriticalThreshold: 15,
     kubeSchedulerSelector: 'job="kube-scheduler"',
     kubeControllerManagerSelector: 'job="kube-controller-manager"',
     kubeApiserverSelector: 'job="apiserver"',
     coreDNSSelector: 'job="kube-dns"',
-    podLabel: 'pod',
+    //podLabel: 'pod',
+
+    prometheusOperatorSelector: 'job="prometheus-operator",namespace="' + $._config.namespace + '"',
 
-    alertmanagerName: '{{ $labels.namespace }}/{{ $labels.pod}}',
-    alertmanagerClusterLabels: 'namespace,service',
+    //alertmanagerName: '{{ $labels.namespace }}/{{ $labels.pod}}',
+    //alertmanagerClusterLabels: 'namespace,service',
     alertmanagerSelector: 'job="alertmanager-' + $._config.alertmanager.name + '",namespace="' + $._config.namespace + '"',
     prometheusSelector: 'job="prometheus-' + $._config.prometheus.name + '",namespace="' + $._config.namespace + '"',
-    prometheusName: '{{$labels.namespace}}/{{$labels.pod}}',
-    prometheusOperatorSelector: 'job="prometheus-operator",namespace="' + $._config.namespace + '"',
+    //prometheusName: '{{$labels.namespace}}/{{$labels.pod}}',
+    
 
-    jobs: {
+    /*jobs: {
       Kubelet: $._config.kubeletSelector,
       KubeScheduler: $._config.kubeSchedulerSelector,
       KubeControllerManager: $._config.kubeControllerManagerSelector,
@@ -208,7 +204,7 @@ local prometheusAdapter = import './prometheus-adapter/prometheus-adapter.libson
       Prometheus: $._config.prometheusSelector,
       PrometheusOperator: $._config.prometheusOperatorSelector,
       CoreDNS: $._config.coreDNSSelector,
-    },
+    },*/
 
     resources+:: {
       'addon-resizer': {
@@ -220,7 +216,25 @@ local prometheusAdapter = import './prometheus-adapter/prometheus-adapter.libson
         limits: { cpu: '20m', memory: '40Mi' },
       },
     },
-    prometheus+:: { rules: $.prometheusRules + $.prometheusAlerts },
+    
+    local allRules =
+      mixins.mixins.nodeExporter.prometheusRules +
+      mixins.mixins.kubernetes.prometheusRules +
+      mixins.mixins.base.prometheusRules +
+      mixins.mixins.kubeStateMetrics.prometheusAlerts +
+      mixins.mixins.nodeExporter.prometheusAlerts +
+      mixins.mixins.alertmanager.prometheusAlerts +
+      mixins.mixins.prometheusOperator.prometheusAlerts +
+      mixins.mixins.kubernetes.prometheusAlerts +
+      mixins.mixins.prometheus.prometheusAlerts +
+      mixins.mixins.base.prometheusAlerts,
+
+    local allDashboards =
+      mixins.mixins.nodeExporter.grafanaDashboards +
+      mixins.mixins.kubernetes.grafanaDashboards +
+      mixins.mixins.prometheus.grafanaDashboards,
+
+    prometheus+:: { rules: allRules },
     grafana+:: {
       labels: {
         'app.kubernetes.io/name': 'grafana',
@@ -228,7 +242,8 @@ local prometheusAdapter = import './prometheus-adapter/prometheus-adapter.libson
         'app.kubernetes.io/component': 'grafana',
         'app.kubernetes.io/part-of': 'kube-prometheus',
       },
-      dashboards: $.grafanaDashboards,
+      //dashboards: $.grafanaDashboards,
+      dashboards: allDashboards,
     },
   },
 }
diff --git a/jsonnet/kube-prometheus/mixins/monitoring-mixins.libsonnet b/jsonnet/kube-prometheus/mixins/monitoring-mixins.libsonnet
new file mode 100644
index 0000000000000000000000000000000000000000..afdd92ead92d3969813372951b3266b4f7fb6c0d
--- /dev/null
+++ b/jsonnet/kube-prometheus/mixins/monitoring-mixins.libsonnet
@@ -0,0 +1,81 @@
+{
+  // Add you mixins here.
+  mixins+:: {
+    _config:: {  // TODO(paulfantom): figure out how to pass this from higher up
+      prometheusName: 'k8s',
+      alertmanagerName: 'main',
+      namespace: 'default',
+    },
+    base+:
+      (import '../alerts/general.libsonnet') +
+      (import '../alerts/node.libsonnet') +
+      (import '../rules/node-rules.libsonnet') +
+      (import '../rules/general.libsonnet') {
+          _config+:: {
+              nodeExporterSelector: 'job="node-exporter"',
+              hostNetworkInterfaceSelector: 'device!~"veth.+"',
+          },
+      },
+
+    kubernetes:
+      (import 'github.com/kubernetes-monitoring/kubernetes-mixin/mixin.libsonnet') {
+        _config+:: {
+          cadvisorSelector: 'job="kubelet", metrics_path="/metrics/cadvisor"',
+          kubeletSelector: 'job="kubelet", metrics_path="/metrics"',
+          kubeStateMetricsSelector: 'job="kube-state-metrics"',
+          nodeExporterSelector: 'job="node-exporter"',
+          kubeSchedulerSelector: 'job="kube-scheduler"',
+          kubeControllerManagerSelector: 'job="kube-controller-manager"',
+          kubeApiserverSelector: 'job="apiserver"',
+          podLabel: 'pod',
+          runbookURLPattern: 'https://github.com/prometheus-operator/kube-prometheus/wiki/%s',
+          diskDeviceSelector: 'device=~"mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+"',
+          hostNetworkInterfaceSelector: 'device!~"veth.+"',
+        },
+      },
+
+    kubeStateMetrics:
+      (import 'github.com/kubernetes/kube-state-metrics/jsonnet/kube-state-metrics-mixin/mixin.libsonnet') {
+        _config+:: {
+          kubeStateMetricsSelector: 'job="kube-state-metrics"',
+        },
+      },
+
+    prometheusOperator:
+      (import 'github.com/prometheus-operator/prometheus-operator/jsonnet/mixin/mixin.libsonnet') {
+        _config+:: {
+          //prometheusOperatorSelector: 'job="prometheus-operator",namespace="' + $._config.namespace + '"',
+          prometheusOperatorSelector: 'job="prometheus-operator",namespace="monitoring"',
+        },
+      },
+
+    prometheus:
+      (import 'github.com/prometheus/prometheus/documentation/prometheus-mixin/mixin.libsonnet') {
+        _config+:: {
+          //prometheusSelector: 'job="prometheus-' + $._config.prometheusName + '",namespace="' + $._config.namespace + '"',
+          prometheusSelector: 'job="prometheus-k8s",namespace="monitoring"',
+          prometheusName: '{{$labels.namespace}}/{{$labels.pod}}',
+        },
+      },
+
+    alertmanager:
+      (import 'github.com/prometheus/alertmanager/doc/alertmanager-mixin/mixin.libsonnet') {
+        _config+:: {
+          alertmanagerName: '{{ $labels.namespace }}/{{ $labels.pod}}',
+          alertmanagerClusterLabels: 'namespace,service',
+          //alertmanagerSelector: 'job="alertmanager-' + $._config.alertmanagerName + '",namespace="' + $._config.namespace + '"',
+          alertmanagerSelector: 'job="alertmanager-main",namespace="monitoring"',
+        },
+      },
+
+    nodeExporter:
+      (import 'github.com/prometheus/node_exporter/docs/node-mixin/mixin.libsonnet') {
+        _config+:: {
+          nodeExporterSelector: 'job="node-exporter"',
+          fsSpaceFillingUpCriticalThreshold: 15,
+          diskDeviceSelector: 'device=~"mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+"',
+        },
+      },
+
+  },
+}