Started with like version 1.4 so have customized forever. Unfortunatley Autodesk decided that they would not do a ribbon from a MNU as is the case for Toolbars and pop menus, the Ribbon is xml format so it is possible to write one from scratch.
Ok how to do it when you run CUI you can look at all commands and all the "BITS" that make that make a menu. You can copy and paste stuff between commands. I am going to explain for a POP menu or toolbar, as these can be created in Notepad you open CUI find the command and copy the relevant text string to your new menu. As a user of CIV3D but working mostly in the workspace "Drafting" had to change workspaces to get to CIV3D commands so made a menu with the commands I wanted.
You can see the long command syntax in this pop menu.
***MENUGROUP=SURFAL
***POP15
**SURFALIGN
[Surfalign]
[SURFACES]
[--]
[Create Surface]^c^c_AeccCreateSurface
[Create Surface from DEM]^c^c_AeccCreateSurfaceGridFromDEM
[Create Surface from TIN]^c^c_AeccCreateSurfaceFromTIN
[->Edit Surface]
[Edit Surface Style...]^c^c_AeccEditSurfaceStyle
[Edit Surface Properties]^c^c_AeccEditSurfaceProperties
[Add Line]^C^C_AeccAddSurfaceLine
[Delete Line]^c^c_AeccDeleteSurfaceLine
[Swap Edge]^c^c_AeccEditSurfaceSwapEdge
[Add Point]^c^c_AddPointToSurface
[Delete Point]^c^c_AeccDeleteSurfacePoint
[Modify Point]^c^c_AeccEditSurfacePoint
[Move Point]^C^C_AeccMoveSurfacePoint
[Minimize Flat Areas]^c^c_AeccMinimizeSurfaceFlatAreas
[Raise/Lower Surface]^c^c_AeccRaiseLowerSurface
[Paste Surface...]^c^c_AeccEditSurfacePaste
[Add Boundaries]^c^c_AeccAddSurfaceBoundaries
[Smooth Surface]^c^c_AeccSmoothSurface
[<-Simplify Surface]^c^c_AeccSimplifySurface
[->Add Surface Labels]^c^c_AeccAddSurfaceLabels
[Add slope Surf Labels]^c^c_AeccAddSurfaceSlopeLabel
[Spot Elevation]^c^c_AeccAddSurfaceSpotElevLabel
[Spot Elevations on Grid]^c^c_AeccAddSpotElevLabelsOnGrid
[Contour - Single]^c^c_AeccAddContourLabelingSingle
[Contour - Multiple]^c^c_AeccAddContourLabeling
[Contour Multiple at Interval]^c^c_AeccAddContourLabelingGroup
[<-Add legend table]^c^_AeccAddSurfaceLegendTable
[->Utilities]
[Export to DEM]^c^c_AeccSurfaceExportToDem
[Volumes Dashboard]^C^C_AeccVolumesDashboard
[Water Drop...]^c^c_AeccCreateSurfaceWaterDrop
[Catchment Area]^c^c_AeccCatchmentArea
[Check for Contour Problems]^c^c_AeccCheckForContourProblems
[Drape Image]^c^c_AeccDrapeImage
[Extract Objects From Surface]^c^c_AeccSurfaceExtractObjects
[Move Blocks to Surface]^c^c_AeccMoveBlocksToSurface
[Move Blocks to Attribute Elevation]^c^c_AeccMOVEBLOCKSTOATTRIBELEV
[Add point to surface]^c^c_AECCCreatePointRandomPoints
[<-Move Text to Elevation]^c^c_AeccMoveTextToElevation
[--]
[ALIGNMENTS]
[--]
[Create Alignment by Layout]^c^c_AeccCreateAlignmentLayout
[Create Alignment from Polyline]^c^c_AeccCreateAlignmentEntities
[Edit Alignment Geometry]^C^C^p_AeccEditAlignment
[Reverse Alignment Direction]^c^c_AeccReverseAlignDirection
[Design Criteria Editor]^C^c_AeccDesignCriteriaEditor
[Offset lines]^c^cOffsetfeature
[->Add Alignment Labels]^c^c_AeccAddAlignLabels
[Add/Edit Station Labels]^c^c_AeccEditAlignmentLabels
[Station/Offset]^c^c_AeccAddAlignOffXYLbl
[Single Segment]^c^c_AeccAddAlignSegLbl
[Multiple Segment]^c^c_AeccAddAlignSegLbls
[Point of Intersection]^c^c_AeccAddAlignPointOfIntLbl
[<-Multiple Point of Intersection]^c^c_AeccAddAlignPointOfIntLbls
[->Add Tables]
[Add Line...]^c^c_AeccAddAlignmentLineTable
[Add Curve...]^c^c_AeccAddAlignmentCurveTable
[Add Spiral...]^c^c_AeccAddAlignmentSpiralTable
[Add Segments]^c^c_AeccAddAlignmentSegmentTable
[<-Renumber Tags]^c^c_AeccEditTagNumbers
[--]
[POINTS]
[--]
[Create pts]^c^c_AeccCreatePoints
[Add 1 PT]^C^C_AeccCreatePointManual
[Pt on Surface]^C^C_AeccCreatePointRandomPoints
[Add PT Table]^C^C_AeccAddPointTable
[Export Points]^c^c_AeccExportPoints
Now a toolbar but it also can have custom icons
***MENUGROUP=ALANSTOOLBAR
***TOOLBARS
**ALANSTOOLS
ID_ALAN_0 [_Toolbar("Alans1", _Right, _Show, 0, 0, 1)]
AECC_ShowTS [_Button("Show Toolspace", RCDATA_16_IMAGE, RCDATA_16_IMAGE)]^C^C^C^P_ShowTS
ID_Matchprop [_Button("Match Properties", RCDATA_16_MATCH, RCDATA_16_MATCH)]^C^C_matchprop
ID_Erase [_Button("Erase", RCDATA_16_ERASE, RCDATA_32_ERASE)]^C^C_erase
ID_Copy [_Button("Copy", RCDATA_16_COPYOB, RCDATA_32_COPYOB)]$M=$(if,$(eq,$(substr,$(getvar,cmdnames),1,4),GRIP),_copy,^C^C_copy)
ID_Mirror [_Button("Mirror", RCDATA_16_MIRROR, RCDATA_32_MIRROR)]$M=$(if,$(eq,$(substr,$(getvar,cmdnames),1,4),GRIP),_mirror,^C^C_mirror)
ID_Offset [_Button("Offset", RCDATA_16_OFFSET, RCDATA_32_OFFSET)]^C^C_offset
ID_Array [_Button("Array...", RCDATA_16_ARRREC, RCDATA_32_ARRREC)]^C^C_array
if you google there is very many tutorials about using The CUI to make new menus.
A side comment you can pull apart the CUIX back to simple text so could make a new Ribbon menu but its a bit tricky so did not go into it here.
<?xml version="1.0"?>
<!--
Warning! Do not edit the contents of this file.
If you attempt to edit this file using an XML editor, you could lose
customization and migration functionality. If you need to change
information in the customization file, use the Customize User Interface
dialog in the product.
To access the Customize User Interface dialog, click the Tools menu,
Customization panel, User Interface button, or enter CUI on the command line.
-->
<RibbonRoot>
<RibbonPanelSourceCollection xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RibbonPanelSource UID="ID_PanelText" Text="Text" HiddenInEditor="false" KeyTip="TE">
<ModifiedRev MajorVersion="20" MinorVersion="0" UserVersion="0" />
<Name xlate="true" UID="XLS_00015648">Annotate - Text</Name>
<DialogBoxLauncher UID="ID_RBN_0014" CommandID="ID_Style" CommandType="Macro" KeyTip="TS">
<ModifiedRev MajorVersion="18" MinorVersion="0" UserVersion="0" />
</DialogBoxLauncher>
<Alias>ID_Text</Alias>
<RibbonRow UID="ID_RBN_ROW_0090">
<ModifiedRev MajorVersion="20" MinorVersion="0" UserVersion="0" />
<RibbonSplitButton UID="RBN_00014261" Id="AcRibbonSplitButton" Text="Multiline
Text" KeyTip="MT" SmallImage="RCDATA_16_MTEXT" LargeImage="RCDATA_32_MTEXT" Behavior="SplitFollow" ListStyle="IconText" ButtonStyle="LargeWithText" Grouping="false">
<ModifiedRev MajorVersion="18" MinorVersion="1" UserVersion="0" />
<RibbonCommandButton UID="RBN_00014262" Id="AcRibbonCommandButton" Text="Multiline
Text" ButtonStyle="SmallWithoutText" MenuMacroID="ID_Mtext">
<ModifiedRev MajorVersion="18" MinorVersion="2" UserVersion="0" />
</RibbonCommandButton>
<RibbonCommandButton UID="RBN_00014263" Id="AcRibbonCommandButton" Text="Single Line" ButtonStyle="SmallWithoutText" MenuMacroID="ID_Text">
<ModifiedRev MajorVersion="18" MinorVersion="1" UserVersion="0" />
</RibbonCommandButton>
</RibbonSplitButton>
<RibbonRowPanel UID="RBN_200_CD525" ResizeStyle="None" ResizePriority="100"