diff --git a/src/desk_cable_holder/desk_cable_holder.scad b/src/desk_cable_holder/desk_cable_holder.scad
new file mode 100644
index 0000000000000000000000000000000000000000..a386e5439e1dadf2f7179c151690a307f9bdb83a
--- /dev/null
+++ b/src/desk_cable_holder/desk_cable_holder.scad
@@ -0,0 +1,72 @@
+
+cable_thickness=4.5;
+holder_height = 30;
+holder_diameter=9;
+holder_wall=2;
+clip_width = 20;
+radius = 13; //radius of the table
+thickness = 22.55 + 0.2; //thickness of the table
+
+module curve(h) {
+    r2 = radius*radius;
+    t2 = thickness*thickness*(1/4);
+    t = sqrt(r2-t2);
+    translate([radius-t, 0]) union() {
+        intersection() {
+            translate([t, 0])
+            circle($fn=100, r=radius);
+            square([h*2, thickness], center=true);
+        }
+        translate([0, -thickness/2]) square([h, thickness]);
+    }
+}
+
+module clip() {
+    linear_extrude(clip_width)
+    difference() {
+        offset(3, $fn=50) curve(20);
+        curve(30);
+    }
+}
+
+module clip_outer() {
+    linear_extrude(clip_width) offset(3, $fn=50) curve(20);
+}
+
+module clip_inner() {
+    translate([0, 0, -.5]) linear_extrude(clip_width+1) curve(30);
+}
+
+module holder_curve() {
+    difference() {
+        circle(d=holder_diameter+2*holder_wall, $fn=50);
+        circle(d=holder_diameter, $fn=50);
+        translate([0, -2]) square([10, 4]);
+    }
+}
+
+module holder_outer() {
+    /* linear_extrude(holder_height/2, twist=90, $fn=200) scale(1.5) holder_curve();
+    translate([0, 0, holder_height/2]) rotate([0, 0, -90])
+    linear_extrude(holder_height/2, twist=-90, scale=(1/1.5), $fn=200) scale(1.5)  holder_curve(); */
+    translate([-holder_diameter/2, 0, 0])
+    cylinder(d=holder_diameter+holder_wall*2, $fn=50, h=thickness+6, center=true);
+}
+
+module holder_inner() {
+    translate([-holder_diameter/2, 0, 0])
+    cylinder(d=holder_diameter, $fn=50, h=holder_height+1, center=true);
+}
+
+union() {
+    difference() {
+        union() {
+            translate([0, clip_width/2, 0]) rotate([90, 0, 0]) clip_outer();
+            holder_outer();
+            //scale([2, 1, 2]) translate([0, clip_width/2, 0]) rotate([90, 0, 0]) clip_inner();
+        }
+        holder_inner();
+        translate([0, clip_width/2, 0]) rotate([90, 0, 0]) clip_inner();
+        translate([15, 0, 0]) cube([40, cable_thickness, 100], center=true);
+    }
+}
\ No newline at end of file