mirror of https://github.com/rwxrob/dot
Rebase
commit
2ea0289e9f
@ -0,0 +1 @@
|
|||||||
|
/Users/rmuhlest/repos/github.com/rwxrob/dot/.FreeCAD
|
@ -0,0 +1,22 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<FCParameters>
|
||||||
|
<FCParamGroup Name="Root">
|
||||||
|
<FCParamGroup Name="Modules">
|
||||||
|
<FCParamGroup Name="Path">
|
||||||
|
<FCText Name="HelpIndex">Path/Help/index.html</FCText>
|
||||||
|
<FCText Name="WorkBenchName">Path</FCText>
|
||||||
|
<FCText Name="WorkBenchModule">PathWorkbench.py</FCText>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="Spreadsheet">
|
||||||
|
<FCText Name="HelpIndex">Spreadsheet/Help/index.html</FCText>
|
||||||
|
<FCText Name="WorkBenchName">Spreadsheet</FCText>
|
||||||
|
<FCText Name="WorkBenchModule">SpreadsheetWorkbench.py</FCText>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="Image">
|
||||||
|
<FCText Name="HelpIndex">Image/Help/index.html</FCText>
|
||||||
|
<FCText Name="WorkBenchName">Image</FCText>
|
||||||
|
<FCText Name="WorkBenchModule">ImageWorkbench.py</FCText>
|
||||||
|
</FCParamGroup>
|
||||||
|
</FCParamGroup>
|
||||||
|
</FCParamGroup>
|
||||||
|
</FCParameters>
|
@ -0,0 +1,472 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<FCParameters>
|
||||||
|
<FCParamGroup Name="Root">
|
||||||
|
<FCParamGroup Name="BaseApp">
|
||||||
|
<FCParamGroup Name="LogLevels">
|
||||||
|
<FCInt Name="Default" Value="2"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="Preferences">
|
||||||
|
<FCParamGroup Name="General">
|
||||||
|
<FCText Name="FileOpenSavePath">/home/rwxrob/Downloads</FCText>
|
||||||
|
<FCText Name="AutoloadModule">PartDesignWorkbench</FCText>
|
||||||
|
<FCBool Name="ShowSplasher" Value="1"/>
|
||||||
|
<FCBool Name="PythonWordWrap" Value="1"/>
|
||||||
|
<FCInt Name="ToolbarIconSize" Value="24"/>
|
||||||
|
<FCText Name="LastModule">PartWorkbench</FCText></FCParamGroup>
|
||||||
|
<FCParamGroup Name="Units">
|
||||||
|
<FCInt Name="UserSchema" Value="0"/>
|
||||||
|
<FCInt Name="Decimals" Value="2"/>
|
||||||
|
<FCInt Name="FracInch" Value="8"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="Macro">
|
||||||
|
<FCBool Name="LocalEnvironment" Value="1"/>
|
||||||
|
<FCText Name="MacroPath">/home/rwxrob/.FreeCAD/Macro</FCText>
|
||||||
|
<FCBool Name="RecordGui" Value="1"/>
|
||||||
|
<FCBool Name="GuiAsComment" Value="1"/>
|
||||||
|
<FCBool Name="ScriptToPyConsole" Value="1"/>
|
||||||
|
<FCBool Name="ScriptToFile" Value="0"/>
|
||||||
|
<FCText Name="ScriptFile">FullScript.FCScript</FCText>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="Mod">
|
||||||
|
<FCParamGroup Name="OpenSCAD"/>
|
||||||
|
<FCParamGroup Name="Import">
|
||||||
|
<FCParamGroup Name="hSTEP">
|
||||||
|
<FCBool Name="ReadShapeCompoundMode" Value="1"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCBool Name="ExportHiddenObject" Value="0"/>
|
||||||
|
<FCBool Name="ExportLegacy" Value="0"/>
|
||||||
|
<FCBool Name="ExportKeepPlacement" Value="0"/>
|
||||||
|
<FCBool Name="ImportHiddenObject" Value="0"/>
|
||||||
|
<FCBool Name="UseLinkGroup" Value="0"/>
|
||||||
|
<FCBool Name="UseBaseName" Value="0"/>
|
||||||
|
<FCBool Name="ReduceObjects" Value="0"/>
|
||||||
|
<FCBool Name="ExpandCompound" Value="0"/>
|
||||||
|
<FCBool Name="ShowProgress" Value="0"/>
|
||||||
|
<FCInt Name="ImportMode" Value="0"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="Start">
|
||||||
|
<FCText Name="AutoloadModule">StartWorkbench</FCText>
|
||||||
|
<FCUInt Name="BackgroundColor1" Value="1331197183"/>
|
||||||
|
<FCUInt Name="BackgroundTextColor" Value="4294703103"/>
|
||||||
|
<FCUInt Name="PageColor" Value="4294967295"/>
|
||||||
|
<FCUInt Name="PageTextColor" Value="255"/>
|
||||||
|
<FCUInt Name="BoxColor" Value="3722305023"/>
|
||||||
|
<FCUInt Name="LinkColor" Value="65535"/>
|
||||||
|
<FCUInt Name="BackgroundColor2" Value="2141107711"/>
|
||||||
|
<FCText Name="Template"/>
|
||||||
|
<FCText Name="BackgroundImage"/>
|
||||||
|
<FCText Name="ShowCustomFolder"/>
|
||||||
|
<FCBool Name="InWeb" Value="0"/>
|
||||||
|
<FCBool Name="InBrowser" Value="1"/>
|
||||||
|
<FCBool Name="ShowNotes" Value="0"/>
|
||||||
|
<FCBool Name="ShowExamples" Value="1"/>
|
||||||
|
<FCBool Name="closeStart" Value="0"/>
|
||||||
|
<FCBool Name="DoNotShowOnOpen" Value="0"/>
|
||||||
|
<FCBool Name="ShowForum" Value="0"/>
|
||||||
|
<FCBool Name="UseStyleSheet" Value="0"/>
|
||||||
|
<FCBool Name="NewFileGradient" Value="0"/>
|
||||||
|
<FCBool Name="ShowTips" Value="1"/>
|
||||||
|
<FCText Name="FontFamily"/>
|
||||||
|
<FCInt Name="FontSize" Value="13"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="Arch">
|
||||||
|
<FCInt Name="ifcMulticore" Value="0"/>
|
||||||
|
<FCText Name="ifcRootElement">IfcProduct</FCText>
|
||||||
|
<FCText Name="ifcSkip"/>
|
||||||
|
<FCInt Name="ifcImportModeArch" Value="0"/>
|
||||||
|
<FCInt Name="ifcImportModeStruct" Value="0"/>
|
||||||
|
<FCBool Name="ifcShowDialog" Value="0"/>
|
||||||
|
<FCBool Name="ifcDebug" Value="0"/>
|
||||||
|
<FCBool Name="ifcCreateClones" Value="1"/>
|
||||||
|
<FCBool Name="ifcSeparateOpenings" Value="0"/>
|
||||||
|
<FCBool Name="ifcGetExtrusions" Value="0"/>
|
||||||
|
<FCBool Name="ifcSplitLayers" Value="0"/>
|
||||||
|
<FCBool Name="ifcPrefixNumbers" Value="0"/>
|
||||||
|
<FCBool Name="ifcMergeMaterials" Value="0"/>
|
||||||
|
<FCBool Name="ifcImportProperties" Value="0"/>
|
||||||
|
<FCBool Name="ifcAllowInvalid" Value="0"/>
|
||||||
|
<FCBool Name="ifcFitViewOnImport" Value="0"/>
|
||||||
|
<FCBool Name="IfcImportFreeCADProperties" Value="0"/>
|
||||||
|
<FCBool Name="ifcReplaceProject" Value="0"/>
|
||||||
|
<FCInt Name="ifcExportModel" Value="0"/>
|
||||||
|
<FCInt Name="ifcUnit" Value="0"/>
|
||||||
|
<FCBool Name="ifcExportAsBrep" Value="0"/>
|
||||||
|
<FCBool Name="ifcUseDaeOptions" Value="0"/>
|
||||||
|
<FCBool Name="ifcJoinCoplanarFacets" Value="0"/>
|
||||||
|
<FCBool Name="ifcStoreUid" Value="1"/>
|
||||||
|
<FCBool Name="ifcSerialize" Value="0"/>
|
||||||
|
<FCBool Name="ifcExport2D" Value="1"/>
|
||||||
|
<FCBool Name="IfcExportFreeCADProperties" Value="0"/>
|
||||||
|
<FCBool Name="ifcCompress" Value="1"/>
|
||||||
|
<FCBool Name="DisableIfcRectangleProfileDef" Value="0"/>
|
||||||
|
<FCBool Name="getStandardCase" Value="0"/>
|
||||||
|
<FCBool Name="IfcAddDefaultSite" Value="0"/>
|
||||||
|
<FCBool Name="IfcAddDefaultBuilding" Value="1"/>
|
||||||
|
<FCBool Name="IfcAddDefaultStorey" Value="0"/>
|
||||||
|
<FCInt Name="ColladaSegsPerEdge" Value="1"/>
|
||||||
|
<FCInt Name="ColladaSegsPerRadius" Value="2"/>
|
||||||
|
<FCFloat Name="ColladaScalingFactor" Value="1.000000000000"/>
|
||||||
|
<FCFloat Name="ColladaTessellation" Value="1.000000000000"/>
|
||||||
|
<FCFloat Name="ColladaGrading" Value="0.300000000000"/>
|
||||||
|
<FCInt Name="ColladaMesher" Value="0"/>
|
||||||
|
<FCBool Name="ColladaSecondOrder" Value="0"/>
|
||||||
|
<FCBool Name="ColladaOptimize" Value="1"/>
|
||||||
|
<FCBool Name="ColladaAllowQuads" Value="0"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="Draft">
|
||||||
|
<FCFloat Name="dxfScaling" Value="1.000000000000"/>
|
||||||
|
<FCFloat Name="maxsegmentlength" Value="5.000000000000"/>
|
||||||
|
<FCBool Name="dxfShowDialog" Value="0"/>
|
||||||
|
<FCBool Name="dxfUseLegacyImporter" Value="0"/>
|
||||||
|
<FCBool Name="dxfUseLegacyExporter" Value="0"/>
|
||||||
|
<FCBool Name="dxfAllowDownload" Value="0"/>
|
||||||
|
<FCBool Name="dxftext" Value="0"/>
|
||||||
|
<FCBool Name="dxfImportPoints" Value="0"/>
|
||||||
|
<FCBool Name="dxflayout" Value="0"/>
|
||||||
|
<FCBool Name="dxfstarblocks" Value="0"/>
|
||||||
|
<FCBool Name="dxfGetOriginalColors" Value="0"/>
|
||||||
|
<FCBool Name="joingeometry" Value="0"/>
|
||||||
|
<FCBool Name="groupLayers" Value="0"/>
|
||||||
|
<FCBool Name="dxfStdSize" Value="0"/>
|
||||||
|
<FCBool Name="dxfUseDraftVisGroups" Value="1"/>
|
||||||
|
<FCBool Name="importDxfHatches" Value="0"/>
|
||||||
|
<FCBool Name="renderPolylineWidth" Value="0"/>
|
||||||
|
<FCBool Name="DiscretizeEllipses" Value="1"/>
|
||||||
|
<FCBool Name="dxfmesh" Value="0"/>
|
||||||
|
<FCBool Name="dxfExportBlocks" Value="1"/>
|
||||||
|
<FCBool Name="dxfproject" Value="0"/>
|
||||||
|
<FCBool Name="dxfCreatePart" Value="1"/>
|
||||||
|
<FCBool Name="dxfCreateDraft" Value="0"/>
|
||||||
|
<FCBool Name="dxfCreateSketch" Value="0"/>
|
||||||
|
<FCText Name="TeighaFileConverter"/>
|
||||||
|
<FCFloat Name="svgDiscretization" Value="0.000000000000"/>
|
||||||
|
<FCInt Name="svgstyle" Value="0"/>
|
||||||
|
<FCInt Name="svg_export_style" Value="0"/>
|
||||||
|
<FCBool Name="svgDisableUnitScaling" Value="0"/>
|
||||||
|
<FCBool Name="SvgLinesBlack" Value="1"/>
|
||||||
|
<FCBool Name="ocaareas" Value="0"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="Part">
|
||||||
|
<FCParamGroup Name="General">
|
||||||
|
<FCInt Name="WriteSurfaceCurveMode" Value="1"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="IGES">
|
||||||
|
<FCInt Name="Unit" Value="0"/>
|
||||||
|
<FCBool Name="BrepMode" Value="0"/>
|
||||||
|
<FCBool Name="SkipBlankEntities" Value="1"/>
|
||||||
|
<FCText Name="Company"/>
|
||||||
|
<FCText Name="Author"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="STEP">
|
||||||
|
<FCInt Name="Unit" Value="0"/>
|
||||||
|
<FCText Name="Scheme">AP214IS</FCText>
|
||||||
|
<FCText Name="Company"/>
|
||||||
|
<FCText Name="Author"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="Boolean">
|
||||||
|
<FCBool Name="CheckModel" Value="1"/>
|
||||||
|
<FCBool Name="RefineModel" Value="1"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCBool Name="AddBaseObjectName" Value="0"/>
|
||||||
|
<FCFloat Name="MeshDeviation" Value="0.500000000000"/>
|
||||||
|
<FCFloat Name="MeshAngularDeflection" Value="6.000000000000"/>
|
||||||
|
<FCBool Name="TwoSideRendering" Value="1"/>
|
||||||
|
<FCInt Name="GridLinePattern" Value="3855"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="Mesh">
|
||||||
|
<FCParamGroup Name="Asymptote">
|
||||||
|
<FCText Name="Width"/>
|
||||||
|
<FCText Name="Height"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCBool Name="TwoSideRendering" Value="0"/>
|
||||||
|
<FCBool Name="ShowBoundingBox" Value="0"/>
|
||||||
|
<FCUInt Name="MeshColor" Value="3435973887"/>
|
||||||
|
<FCUInt Name="LineColor" Value="255"/>
|
||||||
|
<FCUInt Name="BackfaceColor" Value="3435973887"/>
|
||||||
|
<FCInt Name="MeshTransparency" Value="0"/>
|
||||||
|
<FCInt Name="LineTransparency" Value="0"/>
|
||||||
|
<FCBool Name="VertexPerNormals" Value="0"/>
|
||||||
|
<FCFloat Name="CreaseAngle" Value="0.000000000000"/>
|
||||||
|
<FCFloat Name="MaxDeviationExport" Value="0.100000000000"/>
|
||||||
|
<FCBool Name="ExportAmfCompressed" Value="1"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="PartDesign">
|
||||||
|
<FCBool Name="RefineModel" Value="1"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="Sketcher">
|
||||||
|
<FCParamGroup Name="General">
|
||||||
|
<FCParamGroup Name="GridSize">
|
||||||
|
<FCText Name="Hist0">10.00 mm</FCText>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCBool Name="NotifyConstraintSubstitutions" Value="1"/>
|
||||||
|
<FCBool Name="ShowGrid" Value="0"/>
|
||||||
|
<FCBool Name="GridSnap" Value="0"/>
|
||||||
|
<FCBool Name="AutoConstraints" Value="1"/>
|
||||||
|
<FCBool Name="AvoidRedundantAutoconstraints" Value="1"/>
|
||||||
|
<FCInt Name="TopRenderGeometryId" Value="1"/>
|
||||||
|
<FCInt Name="MidRenderGeometryId" Value="2"/>
|
||||||
|
<FCInt Name="LowRenderGeometryId" Value="3"/>
|
||||||
|
<FCBool Name="HideDependent" Value="1"/>
|
||||||
|
<FCBool Name="ShowLinks" Value="1"/>
|
||||||
|
<FCBool Name="ShowSupport" Value="1"/>
|
||||||
|
<FCBool Name="RestoreCamera" Value="1"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCBool Name="ShowSolverAdvancedWidget" Value="0"/>
|
||||||
|
<FCBool Name="RecalculateInitialSolutionWhileDragging" Value="1"/>
|
||||||
|
<FCBool Name="LeaveSketchWithEscape" Value="1"/>
|
||||||
|
<FCBool Name="AutoRemoveRedundants" Value="0"/>
|
||||||
|
<FCBool Name="ShowDialogOnDistanceConstraint" Value="1"/>
|
||||||
|
<FCBool Name="ContinuousCreationMode" Value="1"/>
|
||||||
|
<FCBool Name="ContinuousConstraintMode" Value="1"/>
|
||||||
|
<FCBool Name="HideUnits" Value="0"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="HighDPI"/>
|
||||||
|
<FCParamGroup Name="OpenGL">
|
||||||
|
<FCBool Name="UseSoftwareOpenGL" Value="0"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="Bitmaps">
|
||||||
|
<FCParamGroup Name="Theme"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="View">
|
||||||
|
<FCText Name="GestureRollFwdCommand">Std_SelForward</FCText>
|
||||||
|
<FCText Name="GestureRollBackCommand">Std_SelBack</FCText>
|
||||||
|
<FCText Name="NavigationStyle">Gui::BlenderNavigationStyle</FCText>
|
||||||
|
<FCInt Name="AntiAliasing" Value="3"/>
|
||||||
|
<FCInt Name="RenderCache" Value="0"/>
|
||||||
|
<FCInt Name="TransparentObjectRenderType" Value="0"/>
|
||||||
|
<FCInt Name="MarkerSize" Value="9"/>
|
||||||
|
<FCBool Name="CornerCoordSystem" Value="1"/>
|
||||||
|
<FCBool Name="ShowAxisCross" Value="0"/>
|
||||||
|
<FCBool Name="SaveWBbyTab" Value="0"/>
|
||||||
|
<FCBool Name="ShowFPS" Value="0"/>
|
||||||
|
<FCFloat Name="PickRadius" Value="8.000000000000"/>
|
||||||
|
<FCBool Name="UseVBO" Value="0"/>
|
||||||
|
<FCFloat Name="EyeDistance" Value="5.000000000000"/>
|
||||||
|
<FCBool Name="EnableBacklight" Value="0"/>
|
||||||
|
<FCUInt Name="BacklightColor" Value="4294967295"/>
|
||||||
|
<FCInt Name="BacklightIntensity" Value="100"/>
|
||||||
|
<FCBool Name="Perspective" Value="0"/>
|
||||||
|
<FCBool Name="Orthographic" Value="1"/>
|
||||||
|
<FCInt Name="OrbitStyle" Value="1"/>
|
||||||
|
<FCInt Name="CornerNaviCube" Value="1"/>
|
||||||
|
<FCInt Name="RotationMode" Value="1"/>
|
||||||
|
<FCBool Name="ZoomAtCursor" Value="1"/>
|
||||||
|
<FCBool Name="InvertZoom" Value="1"/>
|
||||||
|
<FCBool Name="DisableTouchTilt" Value="1"/>
|
||||||
|
<FCFloat Name="ZoomStep" Value="0.200000000000"/>
|
||||||
|
<FCBool Name="UseAutoRotation" Value="0"/>
|
||||||
|
<FCFloat Name="NewDocumentCameraScale" Value="100.000000000000"/>
|
||||||
|
<FCInt Name="NaviStepByTurn" Value="8"/>
|
||||||
|
<FCBool Name="ShowNaviCube" Value="1"/>
|
||||||
|
<FCText Name="NewDocumentCameraOrientation">Trimetric</FCText>
|
||||||
|
<FCUInt Name="BackgroundColor" Value="1145324799"/>
|
||||||
|
<FCUInt Name="BackgroundColor2" Value="859006463"/>
|
||||||
|
<FCUInt Name="BackgroundColor3" Value="2543299327"/>
|
||||||
|
<FCUInt Name="BackgroundColor4" Value="1869583359"/>
|
||||||
|
<FCBool Name="Simple" Value="1"/>
|
||||||
|
<FCBool Name="Gradient" Value="0"/>
|
||||||
|
<FCBool Name="UseBackgroundColorMid" Value="0"/>
|
||||||
|
<FCBool Name="EnablePreselection" Value="1"/>
|
||||||
|
<FCBool Name="EnableSelection" Value="1"/>
|
||||||
|
<FCUInt Name="HighlightColor" Value="3789624575"/>
|
||||||
|
<FCUInt Name="SelectionColor" Value="481107199"/>
|
||||||
|
<FCUInt Name="DefaultShapeColor" Value="1650615039"/>
|
||||||
|
<FCBool Name="RandomColor" Value="0"/>
|
||||||
|
<FCUInt Name="DefaultShapeLineColor" Value="421075455"/>
|
||||||
|
<FCInt Name="DefaultShapeLineWidth" Value="2"/>
|
||||||
|
<FCUInt Name="DefaultShapeVertexColor" Value="421075455"/>
|
||||||
|
<FCInt Name="DefaultShapePointSize" Value="2"/>
|
||||||
|
<FCUInt Name="BoundingBoxColor" Value="4294967295"/>
|
||||||
|
<FCUInt Name="AnnotationTextColor" Value="3402287871"/>
|
||||||
|
<FCInt Name="EditSketcherFontSize" Value="17"/>
|
||||||
|
<FCFloat Name="ViewScalingFactor" Value="1.000000000000"/>
|
||||||
|
<FCInt Name="SegmentsPerGeometry" Value="50"/>
|
||||||
|
<FCUInt Name="SketchEdgeColor" Value="4294967295"/>
|
||||||
|
<FCUInt Name="SketchVertexColor" Value="4294967295"/>
|
||||||
|
<FCUInt Name="EditedEdgeColor" Value="4294967295"/>
|
||||||
|
<FCUInt Name="EditedVertexColor" Value="4280680703"/>
|
||||||
|
<FCUInt Name="ConstructionColor" Value="56575"/>
|
||||||
|
<FCUInt Name="ExternalColor" Value="3425924095"/>
|
||||||
|
<FCUInt Name="InvalidSketchColor" Value="4285333759"/>
|
||||||
|
<FCUInt Name="FullyConstrainedColor" Value="16711935"/>
|
||||||
|
<FCUInt Name="InternalAlignedGeoColor" Value="2998042623"/>
|
||||||
|
<FCUInt Name="FullyConstraintElementColor" Value="2161156351"/>
|
||||||
|
<FCUInt Name="FullyConstraintConstructionElementColor" Value="2410282495"/>
|
||||||
|
<FCUInt Name="FullyConstraintInternalAlignmentColor" Value="3739142399"/>
|
||||||
|
<FCUInt Name="FullyConstraintConstructionPointColor" Value="4287987967"/>
|
||||||
|
<FCUInt Name="ConstrainedIcoColor" Value="4280680703"/>
|
||||||
|
<FCUInt Name="NonDrivingConstrDimColor" Value="2555903"/>
|
||||||
|
<FCUInt Name="ConstrainedDimColor" Value="4280680703"/>
|
||||||
|
<FCUInt Name="ExprBasedConstrDimColor" Value="4286523135"/>
|
||||||
|
<FCUInt Name="DeactivatedConstrDimColor" Value="2139062271"/>
|
||||||
|
<FCUInt Name="CursorTextColor" Value="65535"/>
|
||||||
|
<FCUInt Name="CursorCrosshairColor" Value="4294967295"/>
|
||||||
|
<FCUInt Name="CreateLineColor" Value="3435973887"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="Document">
|
||||||
|
<FCBool Name="CreateNewDoc" Value="0"/>
|
||||||
|
<FCInt Name="CompressionLevel" Value="3"/>
|
||||||
|
<FCBool Name="UsingUndo" Value="1"/>
|
||||||
|
<FCInt Name="MaxUndoSize" Value="20"/>
|
||||||
|
<FCBool Name="SaveTransactions" Value="0"/>
|
||||||
|
<FCBool Name="TransactionsDiscard" Value="0"/>
|
||||||
|
<FCBool Name="SaveThumbnail" Value="0"/>
|
||||||
|
<FCInt Name="ThumbnailSize" Value="128"/>
|
||||||
|
<FCBool Name="AddThumbnailLogo" Value="1"/>
|
||||||
|
<FCBool Name="CreateBackupFiles" Value="1"/>
|
||||||
|
<FCInt Name="CountBackupFiles" Value="1"/>
|
||||||
|
<FCBool Name="UseFCBakExtension" Value="0"/>
|
||||||
|
<FCText Name="SaveBackupDateFormat">%Y%m%d-%H%M%S</FCText>
|
||||||
|
<FCBool Name="DuplicateLabels" Value="0"/>
|
||||||
|
<FCBool Name="NoPartialLoading" Value="0"/>
|
||||||
|
<FCInt Name="prefLicenseType" Value="0"/>
|
||||||
|
<FCText Name="prefLicenseUrl">http://en.wikipedia.org/wiki/All_rights_reserved</FCText>
|
||||||
|
<FCText Name="prefAuthor"/>
|
||||||
|
<FCBool Name="prefSetAuthorOnSave" Value="0"/>
|
||||||
|
<FCText Name="prefCompany"/>
|
||||||
|
<FCBool Name="RecoveryEnabled" Value="1"/>
|
||||||
|
<FCBool Name="AutoSaveEnabled" Value="1"/>
|
||||||
|
<FCInt Name="AutoSaveTimeout" Value="15"/>
|
||||||
|
<FCBool Name="CanAbortRecompute" Value="0"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="OutputWindow">
|
||||||
|
<FCUInt Name="colorText" Value="4294967295"/>
|
||||||
|
<FCBool Name="checkMessage" Value="1"/>
|
||||||
|
<FCBool Name="checkLogging" Value="0"/>
|
||||||
|
<FCBool Name="checkWarning" Value="1"/>
|
||||||
|
<FCBool Name="checkError" Value="1"/>
|
||||||
|
<FCBool Name="checkShowReportViewOnWarning" Value="1"/>
|
||||||
|
<FCBool Name="checkShowReportViewOnError" Value="1"/>
|
||||||
|
<FCBool Name="checkShowReportViewOnNormalMessage" Value="0"/>
|
||||||
|
<FCBool Name="checkShowReportViewOnLogMessage" Value="0"/>
|
||||||
|
<FCBool Name="checkShowReportTimecode" Value="1"/>
|
||||||
|
<FCUInt Name="colorLogging" Value="65535"/>
|
||||||
|
<FCUInt Name="colorWarning" Value="4289331455"/>
|
||||||
|
<FCUInt Name="colorError" Value="4278190335"/>
|
||||||
|
<FCBool Name="RedirectPythonOutput" Value="1"/>
|
||||||
|
<FCBool Name="RedirectPythonErrors" Value="1"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="DockWindows">
|
||||||
|
<FCParamGroup Name="TreeView">
|
||||||
|
<FCBool Name="Enabled" Value="0"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="PropertyView">
|
||||||
|
<FCBool Name="Enabled" Value="0"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="DAGView">
|
||||||
|
<FCBool Name="Enabled" Value="0"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="ComboView">
|
||||||
|
<FCBool Name="Enabled" Value="1"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="TreeView">
|
||||||
|
<FCBool Name="SyncView" Value="0"/>
|
||||||
|
<FCBool Name="SyncSelection" Value="0"/>
|
||||||
|
<FCBool Name="PreSelection" Value="0"/>
|
||||||
|
<FCBool Name="RecordSelection" Value="0"/>
|
||||||
|
<FCBool Name="CheckBoxesSelection" Value="0"/>
|
||||||
|
<FCUInt Name="TreeEditColor" Value="4294902015"/>
|
||||||
|
<FCUInt Name="TreeActiveColor" Value="3873898495"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="Expression"/>
|
||||||
|
<FCParamGroup Name="PropertyView"/>
|
||||||
|
<FCParamGroup Name="Editor">
|
||||||
|
<FCUInt Name="Text" Value="0"/>
|
||||||
|
<FCBool Name="EnableLineNumber" Value="1"/>
|
||||||
|
<FCBool Name="EnableFolding" Value="1"/>
|
||||||
|
<FCInt Name="TabSize" Value="4"/>
|
||||||
|
<FCInt Name="IndentSize" Value="4"/>
|
||||||
|
<FCBool Name="Tabs" Value="1"/>
|
||||||
|
<FCBool Name="Spaces" Value="0"/>
|
||||||
|
<FCUInt Name="Bookmark" Value="16776960"/>
|
||||||
|
<FCUInt Name="Breakpoint" Value="4278190080"/>
|
||||||
|
<FCUInt Name="Keyword" Value="65280"/>
|
||||||
|
<FCUInt Name="Comment" Value="11141120"/>
|
||||||
|
<FCUInt Name="Block comment" Value="2694882304"/>
|
||||||
|
<FCUInt Name="Number" Value="65280"/>
|
||||||
|
<FCUInt Name="String" Value="4278190080"/>
|
||||||
|
<FCUInt Name="Character" Value="4278190080"/>
|
||||||
|
<FCUInt Name="Class name" Value="4289331200"/>
|
||||||
|
<FCUInt Name="Define name" Value="4289331200"/>
|
||||||
|
<FCUInt Name="Operator" Value="2694882304"/>
|
||||||
|
<FCUInt Name="Python output" Value="2863300352"/>
|
||||||
|
<FCUInt Name="Python error" Value="4278190080"/>
|
||||||
|
<FCUInt Name="Current line highlight" Value="3772833792"/>
|
||||||
|
<FCInt Name="FontSize" Value="10"/>
|
||||||
|
<FCText Name="Font">Sans Serif</FCText>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="MainWindow">
|
||||||
|
<FCBool Name="TiledBackground" Value="0"/>
|
||||||
|
<FCText Name="StyleSheet">ProDark.qss</FCText>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="RecentFiles">
|
||||||
|
<FCText Name="MRU0">/home/rwxrob/Downloads/model.dae</FCText>
|
||||||
|
<FCInt Name="RecentFiles" Value="4"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="RecentMacros">
|
||||||
|
<FCInt Name="RecentMacros" Value="12"/>
|
||||||
|
<FCText Name="ShortcutModifiers"/>
|
||||||
|
<FCInt Name="ShortcutCount" Value="3"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="Browser"/>
|
||||||
|
<FCParamGroup Name="ParameterEditor">
|
||||||
|
<FCText Name="LastParameterGroup">BaseApp.Preferences.Document</FCText>
|
||||||
|
<FCText Name="Geometry">(2240,1282,3039,1881)</FCText>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="NaviCube"/>
|
||||||
|
<FCParamGroup Name="Dialog"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="Macro">
|
||||||
|
<FCParamGroup Name="Macros"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="MainWindow">
|
||||||
|
<FCParamGroup Name="DockWindows">
|
||||||
|
<FCBool Name="Std_ReportView" Value="1"/>
|
||||||
|
<FCBool Name="Std_SelectionView" Value="0"/>
|
||||||
|
<FCBool Name="Std_ComboView" Value="1"/>
|
||||||
|
<FCBool Name="Std_PythonView" Value="0"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="Toolbars">
|
||||||
|
<FCBool Name="File" Value="1"/>
|
||||||
|
<FCBool Name="Workbench" Value="1"/>
|
||||||
|
<FCBool Name="Macro" Value="1"/>
|
||||||
|
<FCBool Name="View" Value="1"/>
|
||||||
|
<FCBool Name="Structure" Value="1"/>
|
||||||
|
<FCBool Name="Navigation" Value="1"/>
|
||||||
|
<FCBool Name="Draft tray" Value="0"/>
|
||||||
|
<FCBool Name="Solids" Value="1"/>
|
||||||
|
<FCBool Name="Part tools" Value="1"/>
|
||||||
|
<FCBool Name="Boolean" Value="1"/>
|
||||||
|
<FCBool Name="Measure" Value="1"/>
|
||||||
|
<FCBool Name="Sketcher" Value="1"/>
|
||||||
|
<FCBool Name="Sketcher geometries" Value="1"/>
|
||||||
|
<FCBool Name="Sketcher constraints" Value="1"/>
|
||||||
|
<FCBool Name="Sketcher tools" Value="1"/>
|
||||||
|
<FCBool Name="Sketcher B-spline tools" Value="1"/>
|
||||||
|
<FCBool Name="Sketcher virtual space" Value="1"/>
|
||||||
|
<FCBool Name="Part Design Helper" Value="1"/>
|
||||||
|
<FCBool Name="Part Design Modeling" Value="1"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="Workbench"/>
|
||||||
|
<FCParamGroup Name="Workbenches"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="Tux">
|
||||||
|
<FCParamGroup Name="NavigationIndicator">
|
||||||
|
<FCBool Name="Compact" Value="0"/>
|
||||||
|
<FCBool Name="Tooltip" Value="1"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
<FCParamGroup Name="PersistentToolbars">
|
||||||
|
<FCParamGroup Name="User">
|
||||||
|
<FCParamGroup Name="StartWorkbench"/>
|
||||||
|
<FCParamGroup Name="PartWorkbench"/>
|
||||||
|
<FCParamGroup Name="SketcherWorkbench"/>
|
||||||
|
<FCParamGroup Name="PartDesignWorkbench"/></FCParamGroup>
|
||||||
|
<FCParamGroup Name="System"/>
|
||||||
|
</FCParamGroup>
|
||||||
|
</FCParamGroup>
|
||||||
|
</FCParamGroup>
|
||||||
|
|
||||||
|
</FCParameters>
|
@ -0,0 +1,307 @@
|
|||||||
|
COLOR tty
|
||||||
|
TERM ansi
|
||||||
|
TERM color_xterm
|
||||||
|
TERM color-xterm
|
||||||
|
TERM con132x25
|
||||||
|
TERM con132x30
|
||||||
|
TERM con132x43
|
||||||
|
TERM con132x60
|
||||||
|
TERM con80x25
|
||||||
|
TERM con80x28
|
||||||
|
TERM con80x30
|
||||||
|
TERM con80x43
|
||||||
|
TERM con80x50
|
||||||
|
TERM con80x60
|
||||||
|
TERM cons25
|
||||||
|
TERM console
|
||||||
|
TERM cygwin
|
||||||
|
TERM dtterm
|
||||||
|
TERM Eterm
|
||||||
|
TERM eterm-color
|
||||||
|
TERM fbterm
|
||||||
|
TERM gnome
|
||||||
|
TERM gnome-256color
|
||||||
|
TERM jfbterm
|
||||||
|
TERM konsole
|
||||||
|
TERM konsole-256color
|
||||||
|
TERM kterm
|
||||||
|
TERM linux
|
||||||
|
TERM linux-c
|
||||||
|
TERM mach-color
|
||||||
|
TERM mlterm
|
||||||
|
TERM nxterm
|
||||||
|
TERM putty
|
||||||
|
TERM putty-256color
|
||||||
|
TERM rxvt
|
||||||
|
TERM rxvt-256color
|
||||||
|
TERM rxvt-cygwin
|
||||||
|
TERM rxvt-cygwin-native
|
||||||
|
TERM rxvt-unicode
|
||||||
|
TERM rxvt-unicode256
|
||||||
|
TERM rxvt-unicode-256color
|
||||||
|
TERM screen
|
||||||
|
TERM screen-16color
|
||||||
|
TERM screen-16color-bce
|
||||||
|
TERM screen-16color-s
|
||||||
|
TERM screen-16color-bce-s
|
||||||
|
TERM screen-256color
|
||||||
|
TERM screen-256color-bce
|
||||||
|
TERM screen-256color-s
|
||||||
|
TERM screen-256color-bce-s
|
||||||
|
TERM screen-bce
|
||||||
|
TERM screen-w
|
||||||
|
TERM screen.linux
|
||||||
|
TERM screen.xterm-new
|
||||||
|
TERM st
|
||||||
|
TERM st-meta
|
||||||
|
TERM st-256color
|
||||||
|
TERM st-meta-256color
|
||||||
|
TERM vt100
|
||||||
|
TERM xterm
|
||||||
|
TERM xterm-new
|
||||||
|
TERM xterm-16color
|
||||||
|
TERM xterm-256color
|
||||||
|
TERM xterm-88color
|
||||||
|
TERM xterm-color
|
||||||
|
TERM xterm-debian
|
||||||
|
TERM xterm-termite
|
||||||
|
EIGHTBIT 1
|
||||||
|
NORMAL 00
|
||||||
|
FILE 00
|
||||||
|
DIR 34
|
||||||
|
OTHER_WRITABLE 34;40
|
||||||
|
LINK 35
|
||||||
|
FIFO 30;44
|
||||||
|
SOCK 35;44
|
||||||
|
DOOR 35;44 # Solaris 2.5 and later
|
||||||
|
BLK 33;44
|
||||||
|
CHR 37;44
|
||||||
|
ORPHAN 05;37;41
|
||||||
|
MISSING 05;37;41
|
||||||
|
|
||||||
|
EXEC 31 # Unix
|
||||||
|
.cmd 31 # Win
|
||||||
|
.exe 31 # Win
|
||||||
|
.com 31 # Win
|
||||||
|
.bat 31 # Win
|
||||||
|
.reg 31 # Win
|
||||||
|
.app 31 # OSX
|
||||||
|
.txt 32
|
||||||
|
.org 32
|
||||||
|
.md 32
|
||||||
|
.mkd 32
|
||||||
|
.h 32
|
||||||
|
.c 32
|
||||||
|
.C 32
|
||||||
|
.cc 32
|
||||||
|
.cpp 32
|
||||||
|
.cxx 32
|
||||||
|
.objc 32
|
||||||
|
.sh 32
|
||||||
|
.bash 32
|
||||||
|
.csh 32
|
||||||
|
.zsh 32
|
||||||
|
.el 32
|
||||||
|
.vim 32
|
||||||
|
.java 32
|
||||||
|
.pl 32
|
||||||
|
.pm 32
|
||||||
|
.py 32
|
||||||
|
.rb 32
|
||||||
|
.hs 32
|
||||||
|
.php 32
|
||||||
|
.htm 32
|
||||||
|
.html 32
|
||||||
|
.shtml 32
|
||||||
|
.erb 32
|
||||||
|
.haml 32
|
||||||
|
.xml 32
|
||||||
|
.rdf 32
|
||||||
|
.css 32
|
||||||
|
.sass 32
|
||||||
|
.scss 32
|
||||||
|
.less 32
|
||||||
|
.js 32
|
||||||
|
.coffee 32
|
||||||
|
.man 32
|
||||||
|
.0 32
|
||||||
|
.1 32
|
||||||
|
.2 32
|
||||||
|
.3 32
|
||||||
|
.4 32
|
||||||
|
.5 32
|
||||||
|
.6 32
|
||||||
|
.7 32
|
||||||
|
.8 32
|
||||||
|
.9 32
|
||||||
|
.l 32
|
||||||
|
.n 32
|
||||||
|
.p 32
|
||||||
|
.pod 32
|
||||||
|
.tex 32
|
||||||
|
|
||||||
|
### Multimedia formats
|
||||||
|
|
||||||
|
# Image
|
||||||
|
.bmp 33
|
||||||
|
.cgm 33
|
||||||
|
.dl 33
|
||||||
|
.dvi 33
|
||||||
|
.emf 33
|
||||||
|
.eps 33
|
||||||
|
.gif 33
|
||||||
|
.jpeg 33
|
||||||
|
.jpg 33
|
||||||
|
.JPG 33
|
||||||
|
.mng 33
|
||||||
|
.pbm 33
|
||||||
|
.pcx 33
|
||||||
|
.pdf 33
|
||||||
|
.pgm 33
|
||||||
|
.png 33
|
||||||
|
.ppm 33
|
||||||
|
.pps 33
|
||||||
|
.ppsx 33
|
||||||
|
.ps 33
|
||||||
|
.svg 33
|
||||||
|
.svgz 33
|
||||||
|
.tga 33
|
||||||
|
.tif 33
|
||||||
|
.tiff 33
|
||||||
|
.xbm 33
|
||||||
|
.xcf 33
|
||||||
|
.xpm 33
|
||||||
|
.xwd 33
|
||||||
|
.xwd 33
|
||||||
|
.yuv 33
|
||||||
|
|
||||||
|
# Audio
|
||||||
|
.aac 33
|
||||||
|
.au 33
|
||||||
|
.flac 33
|
||||||
|
.mid 33
|
||||||
|
.midi 33
|
||||||
|
.mka 33
|
||||||
|
.mp3 33
|
||||||
|
.mpa 33
|
||||||
|
.mpeg 33
|
||||||
|
.mpg 33
|
||||||
|
.ogg 33
|
||||||
|
.ra 33
|
||||||
|
.wav 33
|
||||||
|
|
||||||
|
# Video
|
||||||
|
.anx 33
|
||||||
|
.asf 33
|
||||||
|
.avi 33
|
||||||
|
.axv 33
|
||||||
|
.flc 33
|
||||||
|
.fli 33
|
||||||
|
.flv 33
|
||||||
|
.gl 33
|
||||||
|
.m2v 33
|
||||||
|
.m4v 33
|
||||||
|
.mkv 33
|
||||||
|
.mov 33
|
||||||
|
.mp4 33
|
||||||
|
.mp4v 33
|
||||||
|
.mpeg 33
|
||||||
|
.mpg 33
|
||||||
|
.nuv 33
|
||||||
|
.ogm 33
|
||||||
|
.ogv 33
|
||||||
|
.ogx 33
|
||||||
|
.qt 33
|
||||||
|
.rm 33
|
||||||
|
.rmvb 33
|
||||||
|
.swf 33
|
||||||
|
.vob 33
|
||||||
|
.wmv 33
|
||||||
|
|
||||||
|
### Misc
|
||||||
|
|
||||||
|
# Binary document formats and multimedia source
|
||||||
|
.doc 31
|
||||||
|
.docx 31
|
||||||
|
.rtf 31
|
||||||
|
.dot 31
|
||||||
|
.dotx 31
|
||||||
|
.xls 31
|
||||||
|
.xlsx 31
|
||||||
|
.ppt 31
|
||||||
|
.pptx 31
|
||||||
|
.fla 31
|
||||||
|
.psd 31
|
||||||
|
|
||||||
|
# Archives, compressed
|
||||||
|
.7z 1;35
|
||||||
|
.apk 1;35
|
||||||
|
.arj 1;35
|
||||||
|
.bin 1;35
|
||||||
|
.bz 1;35
|
||||||
|
.bz2 1;35
|
||||||
|
.cab 1;35 # Win
|
||||||
|
.deb 1;35
|
||||||
|
.dmg 1;35 # OSX
|
||||||
|
.gem 1;35
|
||||||
|
.gz 1;35
|
||||||
|
.iso 1;35
|
||||||
|
.jar 1;35
|
||||||
|
.msi 1;35 # Win
|
||||||
|
.rar 1;35
|
||||||
|
.rpm 1;35
|
||||||
|
.tar 1;35
|
||||||
|
.tbz 1;35
|
||||||
|
.tbz2 1;35
|
||||||
|
.tgz 1;35
|
||||||
|
.tx 1;35
|
||||||
|
.war 1;35
|
||||||
|
.xpi 1;35
|
||||||
|
.xz 1;35
|
||||||
|
.z 1;35
|
||||||
|
.Z 1;35
|
||||||
|
.zip 1;35
|
||||||
|
|
||||||
|
# For testing
|
||||||
|
.ANSI-30-black 30
|
||||||
|
.ANSI-01;30-brblack 01;30
|
||||||
|
.ANSI-31-red 31
|
||||||
|
.ANSI-01;31-brred 01;31
|
||||||
|
.ANSI-32-green 32
|
||||||
|
.ANSI-01;32-brgreen 01;32
|
||||||
|
.ANSI-33-yellow 33
|
||||||
|
.ANSI-01;33-bryellow 01;33
|
||||||
|
.ANSI-34-blue 34
|
||||||
|
.ANSI-01;34-brblue 01;34
|
||||||
|
.ANSI-35-magenta 35
|
||||||
|
.ANSI-01;35-brmagenta 01;35
|
||||||
|
.ANSI-36-cyan 36
|
||||||
|
.ANSI-01;36-brcyan 01;36
|
||||||
|
.ANSI-37-white 37
|
||||||
|
.ANSI-01;37-brwhite 01;37
|
||||||
|
|
||||||
|
.log 01;32
|
||||||
|
*~ 01;32
|
||||||
|
*# 01;32
|
||||||
|
|
||||||
|
.bak 01;33
|
||||||
|
.BAK 01;33
|
||||||
|
.old 01;33
|
||||||
|
.OLD 01;33
|
||||||
|
.org_archive 01;33
|
||||||
|
.off 01;33
|
||||||
|
.OFF 01;33
|
||||||
|
.dist 01;33
|
||||||
|
.DIST 01;33
|
||||||
|
.orig 01;33
|
||||||
|
.ORIG 01;33
|
||||||
|
.swp 01;33
|
||||||
|
.swo 01;33
|
||||||
|
*,v 01;33
|
||||||
|
.gpg 34
|
||||||
|
.gpg 34
|
||||||
|
.pgp 34
|
||||||
|
.asc 34
|
||||||
|
.3des 34
|
||||||
|
.aes 34
|
||||||
|
.enc 34
|
@ -0,0 +1,3 @@
|
|||||||
|
.
|
||||||
|
!Dockerfile
|
||||||
|
!install
|
@ -0,0 +1,5 @@
|
|||||||
|
# This is Git's per-user configuration file.
|
||||||
|
[user]
|
||||||
|
# Please adapt and uncomment the following lines:
|
||||||
|
name = Rob Muhlestein
|
||||||
|
email = rob@rwx.gg
|
@ -0,0 +1,14 @@
|
|||||||
|
# These are supported funding model platforms
|
||||||
|
|
||||||
|
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
|
||||||
|
patreon: rwxrob
|
||||||
|
open_collective: # Replace with a single Open Collective username
|
||||||
|
ko_fi: # Replace with a single Ko-fi username
|
||||||
|
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
||||||
|
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
||||||
|
liberapay: # Replace with the name of a liberpay project
|
||||||
|
issuehunt: # Replace with a single IssueHunt username
|
||||||
|
otechie: # Replace with a single Otechie username
|
||||||
|
custom:
|
||||||
|
- https://twitch.tv/rwxrob
|
||||||
|
- https://youtube.com/rwxrob
|
@ -0,0 +1,4 @@
|
|||||||
|
# particularly useful for psql
|
||||||
|
set editing-mode vi
|
||||||
|
#set bell-style none # MAKE IT STOP!!
|
||||||
|
set keymap vi
|
@ -0,0 +1,9 @@
|
|||||||
|
# This file is only here because some brain-dead
|
||||||
|
# applications require it.
|
||||||
|
|
||||||
|
if [ -n "$BASH_VERSION" ]; then
|
||||||
|
# include .bashrc if it exists
|
||||||
|
if [ -f "$HOME/.bashrc" ]; then
|
||||||
|
. "$HOME/.bashrc"
|
||||||
|
fi
|
||||||
|
fi
|
@ -0,0 +1,36 @@
|
|||||||
|
Developer Certificate of Origin
|
||||||
|
Version 1.1
|
||||||
|
|
||||||
|
Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
|
||||||
|
1 Letterman Drive
|
||||||
|
Suite D4700
|
||||||
|
San Francisco, CA, 94129
|
||||||
|
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies of this
|
||||||
|
license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
Developer's Certificate of Origin 1.1
|
||||||
|
|
||||||
|
By making a contribution to this project, I certify that:
|
||||||
|
|
||||||
|
(a) The contribution was created in whole or in part by me and I
|
||||||
|
have the right to submit it under the open source license
|
||||||
|
indicated in the file; or
|
||||||
|
|
||||||
|
(b) The contribution is based upon previous work that, to the best
|
||||||
|
of my knowledge, is covered under an appropriate open source
|
||||||
|
license and I have the right under that license to submit that
|
||||||
|
work with modifications, whether created in whole or in part
|
||||||
|
by me, under the same open source license (unless I am
|
||||||
|
permitted to submit under a different license), as indicated
|
||||||
|
in the file; or
|
||||||
|
|
||||||
|
(c) The contribution was provided directly to me by some other
|
||||||
|
person who certified (a), (b) or (c) and I have not modified
|
||||||
|
it.
|
||||||
|
|
||||||
|
(d) I understand and agree that this project and the contribution
|
||||||
|
are public and that a record of the contribution (including all
|
||||||
|
personal information I submit with it, including my sign-off) is
|
||||||
|
maintained indefinitely and may be redistributed consistent with
|
||||||
|
this project or the open source license(s) involved.
|
@ -0,0 +1,201 @@
|
|||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "{}"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright 2020 Rob Muhlestein
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
@ -0,0 +1,28 @@
|
|||||||
|
# Personal Dotfiles and Scripts
|
||||||
|
|
||||||
|
Pilfer at your own peril. Mention <https://rwxrob.tv> if you do. Stop by
|
||||||
|
and chat sometime.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
For installation information and sampling see the [workspace container]
|
||||||
|
that depends on this repo.
|
||||||
|
|
||||||
|
Also see the [scripts `README.md` Installation][scripts] as well.
|
||||||
|
|
||||||
|
[workspace container]: <https://github.com/rwxrob/workspace>
|
||||||
|
[scripts]: scripts/#installation
|
||||||
|
|
||||||
|
## More Information
|
||||||
|
|
||||||
|
For questions about design decisions and setup consider my [zet notes]
|
||||||
|
and [streaming faq].
|
||||||
|
|
||||||
|
[zet notes]: <https://github.com/rwxrob/zet>
|
||||||
|
[streaming faq]: <https://github.com/rwxrob/faq>
|
||||||
|
|
||||||
|
## Legal
|
||||||
|
|
||||||
|
Copyright 2021 Rob Muhlestein <rob@rwx.gg>
|
||||||
|
Released under Apache-1.0 License
|
||||||
|
Please mention <https://rwxrob.tv>
|
@ -0,0 +1,6 @@
|
|||||||
|
# My Ansible Stuff
|
||||||
|
|
||||||
|
> ⚠️
|
||||||
|
> A lot of this is duplicated in the installer files (for now) until
|
||||||
|
> I can migrate it all over.
|
||||||
|
|
@ -0,0 +1,3 @@
|
|||||||
|
# Docker Completion
|
||||||
|
|
||||||
|
Add `d` to the `complete` line at the end.
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
mkdir -p ~/.local/share/docker
|
||||||
|
ln -fs "$PWD/completion" ~/.local/share/docker/completion
|
@ -0,0 +1,41 @@
|
|||||||
|
git_protocol: ssh
|
||||||
|
editor: vim
|
||||||
|
prompt: enabled
|
||||||
|
pager: less
|
||||||
|
aliases:
|
||||||
|
co: pr checkout
|
||||||
|
del: |
|
||||||
|
!gh api -X DELETE "repos/$GITUSER/$1"
|
||||||
|
priv: |
|
||||||
|
!gh api -X PATCH "repos/$GITUSER/$1" -f private="true" | jq .private
|
||||||
|
pub: |
|
||||||
|
!gh api -X PATCH "repos/$GITUSER/$1" -f private="false" | jq .private
|
||||||
|
status: |
|
||||||
|
!gh api graphql -f emoji="${1%% *}" -f msg="${1#* }" -f query='mutation ($msg: String!, $emoji: String) {changeUserStatus(input:{message:$msg,emoji:$emoji}) {status { message, emoji }}}'
|
||||||
|
repos: |
|
||||||
|
!gh api --paginate graphql -f owner="$1" -f query='
|
||||||
|
query($owner: String!, $per_page: Int = 100, $endCursor: String) {
|
||||||
|
repositoryOwner(login: $owner) {
|
||||||
|
repositories(first: $per_page, after: $endCursor, ownerAffiliations: OWNER) {
|
||||||
|
nodes { nameWithOwner }
|
||||||
|
pageInfo { hasNextPage endCursor }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
' | jq -r '.data.repositoryOwner.repositories.nodes[].nameWithOwner' | sort
|
||||||
|
orgs: |
|
||||||
|
!gh api --paginate graphql -f query='
|
||||||
|
query {
|
||||||
|
viewer {
|
||||||
|
id
|
||||||
|
name
|
||||||
|
organizations(first: 100) {
|
||||||
|
nodes {
|
||||||
|
id
|
||||||
|
name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} ' | jq -r '.data.viewer.organizations[][] | .id + " " + .name'
|
||||||
|
defmain: |
|
||||||
|
!gh api -X PATCH "repos/$1" -f default_branch="main" | jq .default_branch
|
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
mkdir -p ~/.config/gh 2>/dev/null
|
||||||
|
ln -fs "$PWD/config.yml" "$HOME/.config/gh/config.yml"
|
||||||
|
ls -l ~/.config/gh
|
||||||
|
echo 'You might need to do gh auth --with-token $(auth token github)'
|
@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# branch="$(git branch --show-current)"
|
||||||
|
# if test "${branch}" = "master" -o "${branch}" = "main"; then
|
||||||
|
# echo "Cowardly refusing to commit on ${branch} branch."
|
||||||
|
# echo "You can delete this pre-hook or do it right."
|
||||||
|
# exit 1
|
||||||
|
# fi
|
@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
rm -rf "$HOME/.git-templates"
|
||||||
|
ln -sf "$PWD/.git-templates" "$HOME/.git-templates"
|
@ -0,0 +1,244 @@
|
|||||||
|
cat.509670=Science & Technology
|
||||||
|
cat.29595=Dota 2
|
||||||
|
cat.509658=Just Chatting
|
||||||
|
cat.115977=The Witcher 3: Wild Hunt
|
||||||
|
cat.1469308723=Software and Game Development
|
||||||
|
cat.16676=Team Fortress 2
|
||||||
|
cat.493575=SHENZHEN I/O
|
||||||
|
cat.272263131=Animals, Aquariums, and Zoos
|
||||||
|
cat.509671=Fitness & Health
|
||||||
|
cat.26936=Music
|
||||||
|
cat.509660=Art
|
||||||
|
cat.515214=Politics
|
||||||
|
cat.417752=Talk Shows & Podcasts
|
||||||
|
cat.498592=I'm Only Sleeping
|
||||||
|
cat.509672=Travel & Outdoors
|
||||||
|
cat.509673=Makers & Crafting
|
||||||
|
tag.linux=15f4833a-1691-4cc1-a4a5-020d130ac94d
|
||||||
|
tag.ama=67259b26-ff83-444e-9d3c-faab390df16f
|
||||||
|
tag.coworking=0739209c-9ef5-4ae0-997c-ccbeb864ca61
|
||||||
|
tag.business=c38aeb6e-e8c7-452a-88e1-a3ed62c2e846
|
||||||
|
tag.cooperative=63e83904-a70b-4709-b963-a37a105d9932
|
||||||
|
tag.programming=a51f1e4e-257b-4bd0-90c7-189c3efbf917
|
||||||
|
tag.educational=cea7bc0c-75a5-4446-8743-6db031b71550
|
||||||
|
tag.writing=81975ba3-5c53-41f8-b614-ce5b3193955a
|
||||||
|
tag.editing=325a32c7-7b8e-48f8-b4fa-10875f18bb6d
|
||||||
|
tag.cozy=adc4a830-07f5-457b-95e5-5ab6cc1f9af3
|
||||||
|
tag.skateboarding=fd6df368-7e76-4868-b9e9-b4f7cecc2f35
|
||||||
|
tag.cycling=d5713b1e-c796-4bdc-88e2-93c49ce31136
|
||||||
|
tag.animation=e3a6b378-232b-4ec2-9a82-86b72851e09a
|
||||||
|
tag.evil=0cef8341-8c67-481f-95a8-325932a6699c
|
||||||
|
tag.good=ee1daaae-116a-44d6-9f40-09322caf3181
|
||||||
|
tag.endurance=3379ff9c-3c15-4bef-bfb8-2085cd196062
|
||||||
|
tag.engineering=dff0aca6-52fe-4cc4-a93a-194852b522f0
|
||||||
|
tag.backseating=96b6073f-450d-4248-8ed4-988e28f3f759
|
||||||
|
tag.balance=8315b8d6-9837-4218-9bc1-3c0a3e5bb41d
|
||||||
|
tag.100=e659959d-392f-44c5-83a5-fb959cdbaccc
|
||||||
|
tag.achievements=27937cec-5cfc-4f56-b1d3-f6e1d67735e2
|
||||||
|
tag.acoustic=eea4d45b-52e0-4a16-b0df-64f4c55bc716
|
||||||
|
tag.behindscenes=26befb18-4ddc-41c1-8d39-ffeada297428
|
||||||
|
tag.bodypositive=150f13a5-b1ce-4e85-a61f-7cfed2e2e08c
|
||||||
|
tag.chatty=afc8211a-8eee-48b8-9e18-212f22f657db
|
||||||
|
tag.chill=81e9d348-82e5-4c4f-a140-d2b3779b912d
|
||||||
|
tag.explore=a4fac2cc-7cd4-44a6-b620-178182389a5b
|
||||||
|
tag.filming=812a0088-22a9-4944-bb27-af0fa37b6085
|
||||||
|
tag.firstplay=d0976a7e-26a7-4a48-9225-c522808540f2
|
||||||
|
tag.gamedev=f588bd74-e496-4d11-9169-3597f38a5d25
|
||||||
|
tag.softdev=6f86127d-6051-4a38-94bb-f7b475dde109
|
||||||
|
tag.webdev=c23ce252-cf78-4b98-8c11-8769801aaf3a
|
||||||
|
tag.graphicdesign=0930677c-dd75-424d-9190-b779f3d1c136
|
||||||
|
tag.hiking=2a824c85-8c64-4a62-9532-84a50633c6fc
|
||||||
|
tag.interviews=c833db83-32d0-4026-b3df-637ccf7899fa
|
||||||
|
tag.play=8ba227ca-073c-46a7-b3cc-193e52c5ab4d
|
||||||
|
tag.playwith=ac763b17-7bea-4632-9eb4-d106689ff409
|
||||||
|
tag.leveling=6433db3e-37a7-4590-915a-7c0949a4ac89
|
||||||
|
tag.vlogging=7a3d677a-1e09-4391-b520-1fccc0e7d6ca
|
||||||
|
tag.magic=1b70fcca-0579-446a-90d1-075c9ce62309
|
||||||
|
tag.meditation=59b9c259-62c3-4a1a-89d4-4a6f1070deb9
|
||||||
|
tag.mindfulness=9801169b-afa4-4785-890e-53911955e4d7
|
||||||
|
tag.mealprep=3ce58361-f147-441d-a7c9-e98e3e916a39
|
||||||
|
tag.movement=73645e21-02ae-4f39-bfb1-8dac623927ef
|
||||||
|
tag.musictalk=85d2fb8f-7257-4e08-8065-6161fa3029fa
|
||||||
|
tag.musicevents=c5247b10-deec-4d7a-84a5-db6a75cb5908
|
||||||
|
tag.news=77017b7b-6b98-4f0d-bd39-3ba96b66ec7a
|
||||||
|
tag.outdoors=89e105c9-2c45-42a9-a5f0-fc1ea6e7ba8b
|
||||||
|
tag.practice=04b4aaaa-c410-4c2e-9beb-da3896fc7d22
|
||||||
|
tag.reading=bd6fc011-575a-43f0-8418-9f912a295362
|
||||||
|
tag.retro=e027fb8b-219e-4959-8240-a4a082be0316
|
||||||
|
tag.robotics=56257f86-a66c-4ce8-af6d-89e9b1f13fed
|
||||||
|
tag.safespace=3575df89-da01-4fc1-939c-b5465093ed04
|
||||||
|
tag.spirituality=63f8ee17-1678-41ee-906a-8c55c3ce81df
|
||||||
|
tag.strength=07a1b526-3725-4ba5-8c53-efaad4941fb9
|
||||||
|
tag.surfing=8e44481a-4bc4-4155-b362-9bb499c15d3e
|
||||||
|
tag.tradart=5ec52c4f-a055-404c-82fe-ea98c74c7fe6
|
||||||
|
tag.travel=a6ff589a-33e5-4caf-8286-29dea98fc2e2
|
||||||
|
tag.tutorial=dc709206-c072-4340-a706-694578574c7e
|
||||||
|
tag.twitchcon=f317a85e-495e-4aee-a0d2-0720bd00a6ce
|
||||||
|
tag.usa=79713d37-6d2e-4953-b55b-8f47bb9caf72
|
||||||
|
tag.vectorart=f0ab2b07-14ed-4429-8ea3-3d7d400a50cd
|
||||||
|
tag.viewerlevels=fec05015-e841-4cff-a53c-8aa1336cf863
|
||||||
|
tag.warmingup=2920fbf2-293e-4753-8ec7-b69dba5392d0
|
||||||
|
tag.wargame=dbe20395-0e44-4156-92de-4a77f6cdccf0
|
||||||
|
tag.worldbuild=218c5e0e-e3a9-4fab-9ad5-994717d226fd
|
||||||
|
tag.easy=1eea2343-ca8e-4606-ab21-5c64e129f6db
|
||||||
|
tag.hard=ba2c968b-867a-49ce-aebc-3d978a204f4a
|
||||||
|
tag.beginners=ad18ee82-c0b2-46d4-b4f9-d45994443bd7
|
||||||
|
tag.casuals=cc8d5abb-39c9-4942-a1ee-e1558512119e
|
||||||
|
tag.allbosses=860f0dc1-5d6b-4504-a3e2-eca15a1cb816
|
||||||
|
tag.epic=df262ff6-74d1-415b-942c-d584d44426c4
|
||||||
|
mode.away.emoji=🐟
|
||||||
|
mode.away.name=away
|
||||||
|
mode.away.status=fishies and music
|
||||||
|
mode.away.flags=music|visual
|
||||||
|
mode.away.category=272263131
|
||||||
|
mode.away.tags=linux,animation
|
||||||
|
mode.break.emoji=💤
|
||||||
|
mode.break.name=break
|
||||||
|
mode.break.status=taking a break (< 30 minutes)
|
||||||
|
mode.break.flags=music | visual
|
||||||
|
mode.break.category=same
|
||||||
|
mode.break.tags=
|
||||||
|
mode.yoga.emoji=🧘
|
||||||
|
mode.yoga.name=yoga
|
||||||
|
mode.yoga.status=ashtanga yoga asana (mysore style)
|
||||||
|
mode.yoga.flags=cam | mic | music | chat | focused
|
||||||
|
mode.yoga.category=509671
|
||||||
|
mode.yoga.tags=
|
||||||
|
mode.run.emoji=🏃
|
||||||
|
mode.run.name=run
|
||||||
|
mode.run.status=out running
|
||||||
|
mode.run.flags=cam | mic | chat | ama | out
|
||||||
|
mode.run.category=509658
|
||||||
|
mode.run.tags=
|
||||||
|
mode.skate.emoji=🛹
|
||||||
|
mode.skate.name=skate
|
||||||
|
mode.skate.status=out long-boarding
|
||||||
|
mode.skate.flags=cam | mic | chat | ama | out
|
||||||
|
mode.skate.category=509658
|
||||||
|
mode.skate.tags=
|
||||||
|
mode.bike.emoji=🚴
|
||||||
|
mode.bike.name=bike
|
||||||
|
mode.bike.status=out cycling
|
||||||
|
mode.bike.flags=cam | mic | chat | ama | out
|
||||||
|
mode.bike.category=509658
|
||||||
|
mode.bike.tags=
|
||||||
|
mode.work.emoji=🏢
|
||||||
|
mode.work.name=work
|
||||||
|
mode.work.status=kubernetes coworking
|
||||||
|
mode.work.flags=cam | mic | chat | focused | music | muted
|
||||||
|
mode.work.category=null
|
||||||
|
mode.work.tags=co-working
|
||||||
|
mode.code.emoji=💢
|
||||||
|
mode.code.name=code
|
||||||
|
mode.code.status=bash, go, c, or web
|
||||||
|
mode.code.flags=cam | mic | chat | topical | music
|
||||||
|
mode.code.category=null
|
||||||
|
mode.code.tags=programming
|
||||||
|
mode.hack.emoji=🥷
|
||||||
|
mode.hack.name=hack
|
||||||
|
mode.hack.status=hacking to learn
|
||||||
|
mode.hack.flags=cam | mic | chat | ama | music
|
||||||
|
mode.hack.category=null
|
||||||
|
mode.hack.tags=
|
||||||
|
mode.write.emoji=⌨️
|
||||||
|
mode.write.name=write
|
||||||
|
mode.write.status=writing
|
||||||
|
mode.write.flags=cam | mic | chat | focused | topical | music
|
||||||
|
mode.write.category=509658
|
||||||
|
mode.write.tags=
|
||||||
|
mode.rant.emoji=🤬
|
||||||
|
mode.rant.name=rant
|
||||||
|
mode.rant.status=ranting
|
||||||
|
mode.rant.flags=cam | mic | chat | focused | topical | music
|
||||||
|
mode.rant.category=509658
|
||||||
|
mode.rant.tags=evil
|
||||||
|
mode.clean.emoji=😐
|
||||||
|
mode.clean.name=clean
|
||||||
|
mode.clean.status=cleaning lab/studio
|
||||||
|
mode.clean.flags=cam | mic | chat | music | ama
|
||||||
|
mode.clean.category=509658
|
||||||
|
mode.clean.tags=
|
||||||
|
mode.dota2.emoji=⚔️
|
||||||
|
mode.dota2.name=dota2
|
||||||
|
mode.dota2.status=crystal, legion, chant, np, *ama chat*
|
||||||
|
mode.dota2.flags=
|
||||||
|
mode.dota2.category=null
|
||||||
|
mode.dota2.tags=
|
||||||
|
mode.witcher3.emoji=🐺
|
||||||
|
mode.witcher3.name=witcher3
|
||||||
|
mode.witcher3.status=cat school, triss line, *ama chat*
|
||||||
|
mode.witcher3.flags=
|
||||||
|
mode.witcher3.category=null
|
||||||
|
mode.witcher3.tags=
|
||||||
|
mode.shenzen.emoji=🔢
|
||||||
|
mode.shenzen.name=shenzen
|
||||||
|
mode.shenzen.status=learning assembly-ish, *ama chat*
|
||||||
|
mode.shenzen.flags=
|
||||||
|
mode.shenzen.category=null
|
||||||
|
mode.shenzen.tags=
|
||||||
|
mode.tf2.emoji=🏹
|
||||||
|
mode.tf2.name=tf2
|
||||||
|
mode.tf2.status=bow sniper, engie, pyro, *ama chat*
|
||||||
|
mode.tf2.flags=
|
||||||
|
mode.tf2.category=null
|
||||||
|
mode.tf2.tags=
|
||||||
|
mode.learn.emoji=🤯
|
||||||
|
mode.learn.name=learn
|
||||||
|
mode.learn.status=colearning, *topic chat* to help
|
||||||
|
mode.learn.flags=
|
||||||
|
mode.learn.category=null
|
||||||
|
mode.learn.tags=
|
||||||
|
mode.party.emoji=🎉
|
||||||
|
mode.party.name=party
|
||||||
|
mode.party.status=music, dancing, drinking, *ama chat*
|
||||||
|
mode.party.flags=
|
||||||
|
mode.party.category=509658
|
||||||
|
mode.party.tags=
|
||||||
|
mode.jaunt.emoji=🌤️
|
||||||
|
mode.jaunt.name=jaunt
|
||||||
|
mode.jaunt.status=walk/talk, tours, adventures, *ama chat*
|
||||||
|
mode.jaunt.flags=
|
||||||
|
mode.jaunt.category=509658
|
||||||
|
mode.jaunt.tags=
|
||||||
|
mode.art.emoji=🎨
|
||||||
|
mode.art.name=art
|
||||||
|
mode.art.status=galleries, crawls, interviews, *topic chat*
|
||||||
|
mode.art.flags=
|
||||||
|
mode.art.category=509660
|
||||||
|
mode.art.tags=
|
||||||
|
mode.music.emoji=🎵
|
||||||
|
mode.music.name=music
|
||||||
|
mode.music.status=live music, pubs, *ama chat*
|
||||||
|
mode.music.flags=
|
||||||
|
mode.music.category=26936
|
||||||
|
mode.music.tags=
|
||||||
|
mode.course.emoji=⚡
|
||||||
|
mode.course.name=course
|
||||||
|
mode.course.status=instructional content, *topic chat*
|
||||||
|
mode.course.flags=
|
||||||
|
mode.course.category=null
|
||||||
|
mode.course.tags=
|
||||||
|
mode.morning.emoji=☕
|
||||||
|
mode.morning.name=morning
|
||||||
|
mode.morning.status=cozy, wake-up, plan, news, *ama chat*
|
||||||
|
mode.morning.flags=
|
||||||
|
mode.morning.category=509658
|
||||||
|
mode.morning.tags=
|
||||||
|
mode.talk.emoji=☎️
|
||||||
|
mode.talk.name=talk
|
||||||
|
mode.talk.status=invited guests in discord, *topic ama*
|
||||||
|
mode.talk.flags=
|
||||||
|
mode.talk.category=417752
|
||||||
|
mode.talk.tags=
|
||||||
|
mode.hang.emoji=🍻
|
||||||
|
mode.hang.name=hang
|
||||||
|
mode.hang.status=discord lobby, members only, *ama chat*
|
||||||
|
mode.hang.flags=
|
||||||
|
mode.hang.category=509658
|
||||||
|
mode.hang.tags=
|
||||||
|
mode.record.emoji=🎬
|
||||||
|
mode.record.name=record
|
||||||
|
mode.record.status=make specific youtube videos, *no chat*
|
||||||
|
mode.record.flags=
|
||||||
|
mode.record.category=null
|
||||||
|
mode.record.tags=
|
@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
mkdir -p ~/.config/iam
|
||||||
|
ln -fs "$PWD/config.yaml" ~/.config/iam/config.yaml
|
@ -0,0 +1,7 @@
|
|||||||
|
# Install Scripts
|
||||||
|
|
||||||
|
Here are some installer scripts I've collected and use to build my
|
||||||
|
workspace image and vm. It is nice to have these separated out because
|
||||||
|
sometimes I just want to install on hardware or WSL2 or something and
|
||||||
|
don't have Docker.
|
||||||
|
|
@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
sudo add-apt-repository --yes --update ppa:ansible/ansible
|
||||||
|
sudo apt install ansible
|
||||||
|
sudo apt install python3-argcomplete
|
||||||
|
sudo activate-global-python-argcomplete3
|
@ -0,0 +1,511 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Docker CE for Linux installation script
|
||||||
|
#
|
||||||
|
# See https://docs.docker.com/install/ for the installation steps.
|
||||||
|
#
|
||||||
|
# This script is meant for quick & easy install via:
|
||||||
|
# $ curl -fsSL https://get.docker.com -o get-docker.sh
|
||||||
|
# $ sh get-docker.sh
|
||||||
|
#
|
||||||
|
# For test builds (ie. release candidates):
|
||||||
|
# $ curl -fsSL https://test.docker.com -o test-docker.sh
|
||||||
|
# $ sh test-docker.sh
|
||||||
|
#
|
||||||
|
# NOTE: Make sure to verify the contents of the script
|
||||||
|
# you downloaded matches the contents of install.sh
|
||||||
|
# located at https://github.com/docker/docker-install
|
||||||
|
# before executing.
|
||||||
|
#
|
||||||
|
# Git commit from https://github.com/docker/docker-install when
|
||||||
|
# the script was uploaded (Should only be modified by upload job):
|
||||||
|
SCRIPT_COMMIT_SHA="3d8fe77c2c46c5b7571f94b42793905e5b3e42e4"
|
||||||
|
|
||||||
|
# The channel to install from:
|
||||||
|
# * nightly
|
||||||
|
# * test
|
||||||
|
# * stable
|
||||||
|
# * edge (deprecated)
|
||||||
|
DEFAULT_CHANNEL_VALUE="stable"
|
||||||
|
if [ -z "$CHANNEL" ]; then
|
||||||
|
CHANNEL=$DEFAULT_CHANNEL_VALUE
|
||||||
|
fi
|
||||||
|
|
||||||
|
DEFAULT_DOWNLOAD_URL="https://download.docker.com"
|
||||||
|
if [ -z "$DOWNLOAD_URL" ]; then
|
||||||
|
DOWNLOAD_URL=$DEFAULT_DOWNLOAD_URL
|
||||||
|
fi
|
||||||
|
|
||||||
|
DEFAULT_REPO_FILE="docker-ce.repo"
|
||||||
|
if [ -z "$REPO_FILE" ]; then
|
||||||
|
REPO_FILE="$DEFAULT_REPO_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
mirror=''
|
||||||
|
DRY_RUN=${DRY_RUN:-}
|
||||||
|
while [ $# -gt 0 ]; do
|
||||||
|
case "$1" in
|
||||||
|
--mirror)
|
||||||
|
mirror="$2"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--dry-run)
|
||||||
|
DRY_RUN=1
|
||||||
|
;;
|
||||||
|
--*)
|
||||||
|
echo "Illegal option $1"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
shift $(($# > 0 ? 1 : 0))
|
||||||
|
done
|
||||||
|
|
||||||
|
case "$mirror" in
|
||||||
|
Aliyun)
|
||||||
|
DOWNLOAD_URL="https://mirrors.aliyun.com/docker-ce"
|
||||||
|
;;
|
||||||
|
AzureChinaCloud)
|
||||||
|
DOWNLOAD_URL="https://mirror.azure.cn/docker-ce"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
command_exists() {
|
||||||
|
command -v "$@" >/dev/null 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
|
is_dry_run() {
|
||||||
|
if [ -z "$DRY_RUN" ]; then
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
is_wsl() {
|
||||||
|
case "$(uname -r)" in
|
||||||
|
*microsoft*) true ;; # WSL 2
|
||||||
|
*Microsoft*) true ;; # WSL 1
|
||||||
|
*) false ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
is_darwin() {
|
||||||
|
case "$(uname -s)" in
|
||||||
|
*darwin*) true ;;
|
||||||
|
*Darwin*) true ;;
|
||||||
|
*) false ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
deprecation_notice() {
|
||||||
|
distro=$1
|
||||||
|
date=$2
|
||||||
|
echo
|
||||||
|
echo "DEPRECATION WARNING:"
|
||||||
|
echo " The distribution, $distro, will no longer be supported in this script as of $date."
|
||||||
|
echo " If you feel this is a mistake please submit an issue at https://github.com/docker/docker-install/issues/new"
|
||||||
|
echo
|
||||||
|
sleep 10
|
||||||
|
}
|
||||||
|
|
||||||
|
get_distribution() {
|
||||||
|
lsb_dist=""
|
||||||
|
# Every system that we officially support has /etc/os-release
|
||||||
|
if [ -r /etc/os-release ]; then
|
||||||
|
lsb_dist="$(. /etc/os-release && echo "$ID")"
|
||||||
|
fi
|
||||||
|
# Returning an empty string here should be alright since the
|
||||||
|
# case statements don't act unless you provide an actual value
|
||||||
|
echo "$lsb_dist"
|
||||||
|
}
|
||||||
|
|
||||||
|
add_debian_backport_repo() {
|
||||||
|
debian_version="$1"
|
||||||
|
backports="deb http://ftp.debian.org/debian $debian_version-backports main"
|
||||||
|
if ! grep -Fxq "$backports" /etc/apt/sources.list; then
|
||||||
|
(
|
||||||
|
set -x
|
||||||
|
$sh_c "echo \"$backports\" >> /etc/apt/sources.list"
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
echo_docker_as_nonroot() {
|
||||||
|
if is_dry_run; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
if command_exists docker && [ -e /var/run/docker.sock ]; then
|
||||||
|
(
|
||||||
|
set -x
|
||||||
|
$sh_c 'docker version'
|
||||||
|
) || true
|
||||||
|
fi
|
||||||
|
your_user=your-user
|
||||||
|
[ "$user" != 'root' ] && your_user="$user"
|
||||||
|
# intentionally mixed spaces and tabs here -- tabs are stripped by "<<-EOF", spaces are kept in the output
|
||||||
|
echo "If you would like to use Docker as a non-root user, you should now consider"
|
||||||
|
echo "adding your user to the \"docker\" group with something like:"
|
||||||
|
echo
|
||||||
|
echo " sudo usermod -aG docker $your_user"
|
||||||
|
echo
|
||||||
|
echo "Remember that you will have to log out and back in for this to take effect!"
|
||||||
|
echo
|
||||||
|
echo "WARNING: Adding a user to the \"docker\" group will grant the ability to run"
|
||||||
|
echo " containers which can be used to obtain root privileges on the"
|
||||||
|
echo " docker host."
|
||||||
|
echo " Refer to https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface"
|
||||||
|
echo " for more information."
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if this is a forked Linux distro
|
||||||
|
check_forked() {
|
||||||
|
|
||||||
|
# Check for lsb_release command existence, it usually exists in forked distros
|
||||||
|
if command_exists lsb_release; then
|
||||||
|
# Check if the `-u` option is supported
|
||||||
|
set +e
|
||||||
|
lsb_release -a -u >/dev/null 2>&1
|
||||||
|
lsb_release_exit_code=$?
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Check if the command has exited successfully, it means we're in a forked distro
|
||||||
|
if [ "$lsb_release_exit_code" = "0" ]; then
|
||||||
|
# Print info about current distro
|
||||||
|
cat <<-EOF
|
||||||
|
You're using '$lsb_dist' version '$dist_version'.
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Get the upstream release info
|
||||||
|
lsb_dist=$(lsb_release -a -u 2>&1 | tr '[:upper:]' '[:lower:]' | grep -E 'id' | cut -d ':' -f 2 | tr -d '[:space:]')
|
||||||
|
dist_version=$(lsb_release -a -u 2>&1 | tr '[:upper:]' '[:lower:]' | grep -E 'codename' | cut -d ':' -f 2 | tr -d '[:space:]')
|
||||||
|
|
||||||
|
# Print info about upstream distro
|
||||||
|
cat <<-EOF
|
||||||
|
Upstream release is '$lsb_dist' version '$dist_version'.
|
||||||
|
EOF
|
||||||
|
else
|
||||||
|
if [ -r /etc/debian_version ] && [ "$lsb_dist" != "ubuntu" ] && [ "$lsb_dist" != "raspbian" ]; then
|
||||||
|
if [ "$lsb_dist" = "osmc" ]; then
|
||||||
|
# OSMC runs Raspbian
|
||||||
|
lsb_dist=raspbian
|
||||||
|
else
|
||||||
|
# We're Debian and don't even know it!
|
||||||
|
lsb_dist=debian
|
||||||
|
fi
|
||||||
|
dist_version="$(sed 's/\/.*//' /etc/debian_version | sed 's/\..*//')"
|
||||||
|
case "$dist_version" in
|
||||||
|
10)
|
||||||
|
dist_version="buster"
|
||||||
|
;;
|
||||||
|
9)
|
||||||
|
dist_version="stretch"
|
||||||
|
;;
|
||||||
|
8 | 'Kali Linux 2')
|
||||||
|
dist_version="jessie"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
semverParse() {
|
||||||
|
major="${1%%.*}"
|
||||||
|
minor="${1#$major.}"
|
||||||
|
minor="${minor%%.*}"
|
||||||
|
patch="${1#$major.$minor.}"
|
||||||
|
patch="${patch%%[-.]*}"
|
||||||
|
}
|
||||||
|
|
||||||
|
do_install() {
|
||||||
|
echo "# Executing docker install script, commit: $SCRIPT_COMMIT_SHA"
|
||||||
|
|
||||||
|
if command_exists docker; then
|
||||||
|
docker_version="$(docker -v | cut -d ' ' -f3 | cut -d ',' -f1)"
|
||||||
|
MAJOR_W=1
|
||||||
|
MINOR_W=10
|
||||||
|
|
||||||
|
semverParse "$docker_version"
|
||||||
|
|
||||||
|
shouldWarn=0
|
||||||
|
if [ "$major" -lt "$MAJOR_W" ]; then
|
||||||
|
shouldWarn=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$major" -le "$MAJOR_W" ] && [ "$minor" -lt "$MINOR_W" ]; then
|
||||||
|
shouldWarn=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat >&2 <<-'EOF'
|
||||||
|
Warning: the "docker" command appears to already exist on this system.
|
||||||
|
|
||||||
|
If you already have Docker installed, this script can cause trouble, which is
|
||||||
|
why we're displaying this warning and provide the opportunity to cancel the
|
||||||
|
installation.
|
||||||
|
|
||||||
|
If you installed the current Docker package using this script and are using it
|
||||||
|
EOF
|
||||||
|
|
||||||
|
if [ $shouldWarn -eq 1 ]; then
|
||||||
|
cat >&2 <<-'EOF'
|
||||||
|
again to update Docker, we urge you to migrate your image store before upgrading
|
||||||
|
to v1.10+.
|
||||||
|
|
||||||
|
You can find instructions for this here:
|
||||||
|
https://github.com/docker/docker/wiki/Engine-v1.10.0-content-addressability-migration
|
||||||
|
EOF
|
||||||
|
else
|
||||||
|
cat >&2 <<-'EOF'
|
||||||
|
again to update Docker, you can safely ignore this message.
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat >&2 <<-'EOF'
|
||||||
|
|
||||||
|
You may press Ctrl+C now to abort this script.
|
||||||
|
EOF
|
||||||
|
(
|
||||||
|
set -x
|
||||||
|
sleep 20
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
|
||||||
|
user="$(id -un 2>/dev/null || true)"
|
||||||
|
|
||||||
|
sh_c='sh -c'
|
||||||
|
if [ "$user" != 'root' ]; then
|
||||||
|
if command_exists sudo; then
|
||||||
|
sh_c='sudo -E sh -c'
|
||||||
|
elif command_exists su; then
|
||||||
|
sh_c='su -c'
|
||||||
|
else
|
||||||
|
cat >&2 <<-'EOF'
|
||||||
|
Error: this installer needs the ability to run commands as root.
|
||||||
|
We are unable to find either "sudo" or "su" available to make this happen.
|
||||||
|
EOF
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if is_dry_run; then
|
||||||
|
sh_c="echo"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# perform some very rudimentary platform detection
|
||||||
|
lsb_dist=$(get_distribution)
|
||||||
|
lsb_dist="$(echo "$lsb_dist" | tr '[:upper:]' '[:lower:]')"
|
||||||
|
|
||||||
|
if is_wsl; then
|
||||||
|
echo
|
||||||
|
echo "WSL DETECTED: We recommend using Docker Desktop for Windows."
|
||||||
|
echo "Please get Docker Desktop from https://www.docker.com/products/docker-desktop"
|
||||||
|
echo
|
||||||
|
cat >&2 <<-'EOF'
|
||||||
|
|
||||||
|
You may press Ctrl+C now to abort this script.
|
||||||
|
EOF
|
||||||
|
(
|
||||||
|
set -x
|
||||||
|
sleep 20
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "$lsb_dist" in
|
||||||
|
|
||||||
|
ubuntu)
|
||||||
|
if command_exists lsb_release; then
|
||||||
|
dist_version="$(lsb_release --codename | cut -f2)"
|
||||||
|
fi
|
||||||
|
if [ -z "$dist_version" ] && [ -r /etc/lsb-release ]; then
|
||||||
|
dist_version="$(. /etc/lsb-release && echo "$DISTRIB_CODENAME")"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
debian | raspbian)
|
||||||
|
dist_version="$(sed 's/\/.*//' /etc/debian_version | sed 's/\..*//')"
|
||||||
|
case "$dist_version" in
|
||||||
|
10)
|
||||||
|
dist_version="buster"
|
||||||
|
;;
|
||||||
|
9)
|
||||||
|
dist_version="stretch"
|
||||||
|
;;
|
||||||
|
8)
|
||||||
|
dist_version="jessie"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
|
||||||
|
centos | rhel)
|
||||||
|
if [ -z "$dist_version" ] && [ -r /etc/os-release ]; then
|
||||||
|
dist_version="$(. /etc/os-release && echo "$VERSION_ID")"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
if command_exists lsb_release; then
|
||||||
|
dist_version="$(lsb_release --release | cut -f2)"
|
||||||
|
fi
|
||||||
|
if [ -z "$dist_version" ] && [ -r /etc/os-release ]; then
|
||||||
|
dist_version="$(. /etc/os-release && echo "$VERSION_ID")"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Check if this is a forked Linux distro
|
||||||
|
check_forked
|
||||||
|
|
||||||
|
# Run setup for each distro accordingly
|
||||||
|
case "$lsb_dist" in
|
||||||
|
ubuntu | debian | raspbian)
|
||||||
|
pre_reqs="apt-transport-https ca-certificates curl"
|
||||||
|
if [ "$lsb_dist" = "debian" ]; then
|
||||||
|
# libseccomp2 does not exist for debian jessie main repos for aarch64
|
||||||
|
if [ "$(uname -m)" = "aarch64" ] && [ "$dist_version" = "jessie" ]; then
|
||||||
|
add_debian_backport_repo "$dist_version"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! command -v gpg >/dev/null; then
|
||||||
|
pre_reqs="$pre_reqs gnupg"
|
||||||
|
fi
|
||||||
|
apt_repo="deb [arch=$(dpkg --print-architecture)] $DOWNLOAD_URL/linux/$lsb_dist $dist_version $CHANNEL"
|
||||||
|
(
|
||||||
|
if ! is_dry_run; then
|
||||||
|
set -x
|
||||||
|
fi
|
||||||
|
$sh_c 'apt-get update -qq >/dev/null'
|
||||||
|
$sh_c "DEBIAN_FRONTEND=noninteractive apt-get install -y -qq $pre_reqs >/dev/null"
|
||||||
|
$sh_c "curl -fsSL \"$DOWNLOAD_URL/linux/$lsb_dist/gpg\" | apt-key add -qq - >/dev/null"
|
||||||
|
$sh_c "echo \"$apt_repo\" > /etc/apt/sources.list.d/docker.list"
|
||||||
|
$sh_c 'apt-get update -qq >/dev/null'
|
||||||
|
)
|
||||||
|
pkg_version=""
|
||||||
|
if [ -n "$VERSION" ]; then
|
||||||
|
if is_dry_run; then
|
||||||
|
echo "# WARNING: VERSION pinning is not supported in DRY_RUN"
|
||||||
|
else
|
||||||
|
# Will work for incomplete versions IE (17.12), but may not actually grab the "latest" if in the test channel
|
||||||
|
pkg_pattern="$(echo "$VERSION" | sed "s/-ce-/~ce~.*/g" | sed "s/-/.*/g").*-0~$lsb_dist"
|
||||||
|
search_command="apt-cache madison 'docker-ce' | grep '$pkg_pattern' | head -1 | awk '{\$1=\$1};1' | cut -d' ' -f 3"
|
||||||
|
pkg_version="$($sh_c "$search_command")"
|
||||||
|
echo "INFO: Searching repository for VERSION '$VERSION'"
|
||||||
|
echo "INFO: $search_command"
|
||||||
|
if [ -z "$pkg_version" ]; then
|
||||||
|
echo
|
||||||
|
echo "ERROR: '$VERSION' not found amongst apt-cache madison results"
|
||||||
|
echo
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
search_command="apt-cache madison 'docker-ce-cli' | grep '$pkg_pattern' | head -1 | awk '{\$1=\$1};1' | cut -d' ' -f 3"
|
||||||
|
# Don't insert an = for cli_pkg_version, we'll just include it later
|
||||||
|
cli_pkg_version="$($sh_c "$search_command")"
|
||||||
|
pkg_version="=$pkg_version"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
(
|
||||||
|
if ! is_dry_run; then
|
||||||
|
set -x
|
||||||
|
fi
|
||||||
|
if [ -n "$cli_pkg_version" ]; then
|
||||||
|
$sh_c "apt-get install -y -qq --no-install-recommends docker-ce-cli=$cli_pkg_version >/dev/null"
|
||||||
|
fi
|
||||||
|
$sh_c "apt-get install -y -qq --no-install-recommends docker-ce$pkg_version >/dev/null"
|
||||||
|
)
|
||||||
|
echo_docker_as_nonroot
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
centos | fedora | rhel)
|
||||||
|
yum_repo="$DOWNLOAD_URL/linux/$lsb_dist/$REPO_FILE"
|
||||||
|
if ! curl -Ifs "$yum_repo" >/dev/null; then
|
||||||
|
echo "Error: Unable to curl repository file $yum_repo, is it valid?"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [ "$lsb_dist" = "fedora" ]; then
|
||||||
|
pkg_manager="dnf"
|
||||||
|
config_manager="dnf config-manager"
|
||||||
|
enable_channel_flag="--set-enabled"
|
||||||
|
disable_channel_flag="--set-disabled"
|
||||||
|
pre_reqs="dnf-plugins-core"
|
||||||
|
pkg_suffix="fc$dist_version"
|
||||||
|
else
|
||||||
|
pkg_manager="yum"
|
||||||
|
config_manager="yum-config-manager"
|
||||||
|
enable_channel_flag="--enable"
|
||||||
|
disable_channel_flag="--disable"
|
||||||
|
pre_reqs="yum-utils"
|
||||||
|
pkg_suffix="el"
|
||||||
|
fi
|
||||||
|
(
|
||||||
|
if ! is_dry_run; then
|
||||||
|
set -x
|
||||||
|
fi
|
||||||
|
$sh_c "$pkg_manager install -y -q $pre_reqs"
|
||||||
|
$sh_c "$config_manager --add-repo $yum_repo"
|
||||||
|
|
||||||
|
if [ "$CHANNEL" != "stable" ]; then
|
||||||
|
$sh_c "$config_manager $disable_channel_flag docker-ce-*"
|
||||||
|
$sh_c "$config_manager $enable_channel_flag docker-ce-$CHANNEL"
|
||||||
|
fi
|
||||||
|
$sh_c "$pkg_manager makecache"
|
||||||
|
)
|
||||||
|
pkg_version=""
|
||||||
|
if [ -n "$VERSION" ]; then
|
||||||
|
if is_dry_run; then
|
||||||
|
echo "# WARNING: VERSION pinning is not supported in DRY_RUN"
|
||||||
|
else
|
||||||
|
pkg_pattern="$(echo "$VERSION" | sed "s/-ce-/\\\\.ce.*/g" | sed "s/-/.*/g").*$pkg_suffix"
|
||||||
|
search_command="$pkg_manager list --showduplicates 'docker-ce' | grep '$pkg_pattern' | tail -1 | awk '{print \$2}'"
|
||||||
|
pkg_version="$($sh_c "$search_command")"
|
||||||
|
echo "INFO: Searching repository for VERSION '$VERSION'"
|
||||||
|
echo "INFO: $search_command"
|
||||||
|
if [ -z "$pkg_version" ]; then
|
||||||
|
echo
|
||||||
|
echo "ERROR: '$VERSION' not found amongst $pkg_manager list results"
|
||||||
|
echo
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
search_command="$pkg_manager list --showduplicates 'docker-ce-cli' | grep '$pkg_pattern' | tail -1 | awk '{print \$2}'"
|
||||||
|
# It's okay for cli_pkg_version to be blank, since older versions don't support a cli package
|
||||||
|
cli_pkg_version="$($sh_c "$search_command" | cut -d':' -f 2)"
|
||||||
|
# Cut out the epoch and prefix with a '-'
|
||||||
|
pkg_version="-$(echo "$pkg_version" | cut -d':' -f 2)"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
(
|
||||||
|
if ! is_dry_run; then
|
||||||
|
set -x
|
||||||
|
fi
|
||||||
|
# install the correct cli version first
|
||||||
|
if [ -n "$cli_pkg_version" ]; then
|
||||||
|
$sh_c "$pkg_manager install -y -q docker-ce-cli-$cli_pkg_version"
|
||||||
|
fi
|
||||||
|
$sh_c "$pkg_manager install -y -q docker-ce$pkg_version"
|
||||||
|
)
|
||||||
|
echo_docker_as_nonroot
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
if [ -z "$lsb_dist" ]; then
|
||||||
|
if is_darwin; then
|
||||||
|
echo
|
||||||
|
echo "ERROR: Unsupported operating system 'macOS'"
|
||||||
|
echo "Please get Docker Desktop from https://www.docker.com/products/docker-desktop"
|
||||||
|
echo
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
echo
|
||||||
|
echo "ERROR: Unsupported distribution '$lsb_dist'"
|
||||||
|
echo
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# wrapped up in a function so that we have some protection against only getting
|
||||||
|
# half the file during "curl | sh"
|
||||||
|
do_install
|
@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | \
|
||||||
|
sudo dd of=/etc/apt/trusted.gpg.d/githubcli-archive-keyring.gpg
|
||||||
|
|
||||||
|
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/trusted.gpg.d/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | \
|
||||||
|
sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
|
||||||
|
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install gh
|
@ -0,0 +1,22 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -e
|
||||||
|
|
||||||
|
cd "$(mktemp -d)"
|
||||||
|
|
||||||
|
# TODO eventually update this to detect
|
||||||
|
os=mac
|
||||||
|
arch=amd64
|
||||||
|
|
||||||
|
file=$(curl -sSL "https://golang.org/dl/?mode=json" \
|
||||||
|
| jq -r '.[0].files[]
|
||||||
|
| select(.os == "'"$os"'")
|
||||||
|
| select(.arch == "'"$arch"'")
|
||||||
|
| .filename')
|
||||||
|
|
||||||
|
curl -sSLO \
|
||||||
|
-H "Accept: application/vnd.github.v3+json" \
|
||||||
|
"https://dl.google.com/go/$file"
|
||||||
|
|
||||||
|
sudo tar xzf "$file" -C /usr/local/
|
||||||
|
|
||||||
|
echo "Make sure /usr/local/go/bin is in PATH"
|
@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# If you like packages ...
|
||||||
|
# curl https://baltocdn.com/helm/signing.asc | sudo apt-key add -
|
||||||
|
# sudo apt-get install apt-transport-https --yes
|
||||||
|
# echo "deb https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.li
|
||||||
|
# st.d/helm-stable-debian.list
|
||||||
|
# sudo apt-get update
|
||||||
|
# sudo apt-get install helm
|
||||||
|
|
||||||
|
# ... or you can do it directly
|
||||||
|
cd $(mktemp -d)
|
||||||
|
curl -fsSL -O https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
|
||||||
|
#export HELM_INSTALL_DIR="${HOME}/.local/bin"
|
||||||
|
bash ./get-helm-3
|
@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -e
|
||||||
|
latest="https://api.github.com/repos/sharkdp/hyperfine/releases/latest"
|
||||||
|
ver=$(curl -sS "$latest" | jq -r .zipball_url) && test -n "$ver"
|
||||||
|
ver=${ver##*/} && deb="hyperfine_${ver#v}_amd64.deb"
|
||||||
|
url="https://github.com/sharkdp/hyperfine/releases/download/$ver/$deb"
|
||||||
|
curl -sSLO "$url" && dpkg -i ./*.deb
|
@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/bash
|
||||||
|
exec go install sigs.k8s.io/kind@latest
|
||||||
|
|
||||||
|
|
@ -0,0 +1,5 @@
|
|||||||
|
#!/usr/bin/bash
|
||||||
|
target="$GOBIN/kompose"
|
||||||
|
#exec go install github.com/kubernetes/kompose@latest
|
||||||
|
curl -sSL https://github.com/kubernetes/kompose/releases/download/v1.26.1/kompose-linux-amd64 -o "$target"
|
||||||
|
chmod +x "$target"
|
@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -e
|
||||||
|
V=$(curl -L -s https://dl.k8s.io/release/stable.txt)
|
||||||
|
curl -sSLO "https://dl.k8s.io/release/${V}/bin/linux/amd64/kubectl"
|
||||||
|
curl -sSLO "https://dl.k8s.io/${V}/bin/linux/amd64/kubectl.sha256"
|
||||||
|
echo "$(head -1 kubectl.sha256) kubectl" | sha256sum --check
|
||||||
|
cp kubectl /usr/bin && chmod +x /usr/bin/kubectl
|
@ -0,0 +1,30 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
obs=$(command -v obs)
|
||||||
|
|
||||||
|
[[ -z "$obs" ]] && echo "OBS not found" && exit 1
|
||||||
|
|
||||||
|
ver=$($obs -V)
|
||||||
|
[[ $ver =~ ([0-9]+)\.([0-9]+)\.([0-9]+) ]]
|
||||||
|
major=${BASH_REMATCH[1]}
|
||||||
|
minor=${BASH_REMATCH[2]}
|
||||||
|
patch=${BASH_REMATCH[3]}
|
||||||
|
|
||||||
|
url="https://api.github.com/repos/ratwithacompiler/OBS-captions-plugin/releases/latest"
|
||||||
|
|
||||||
|
if (( major < 27 )); then
|
||||||
|
url="https://api.github.com/repos/ratwithacompiler/OBS-captions-plugin/releases/tags/v0.18b"
|
||||||
|
fi
|
||||||
|
|
||||||
|
dir=$(mktemp -d)
|
||||||
|
cd "$dir"
|
||||||
|
echo "Working directory now $dir"
|
||||||
|
curl -sSL "$url" -o release.json
|
||||||
|
name=$(jq -r .name release.json)
|
||||||
|
url=$(jq -r '.assets[].browser_download_url' release.json | grep Linux)
|
||||||
|
echo "Attempting to download $name from $url"
|
||||||
|
curl -LO "$url"
|
||||||
|
unzip *.zip
|
||||||
|
mv *Linux/libobs_google_caption_plugin "$HOME/.config/obs-studio/plugins"
|
||||||
|
rm -rf "$dir"
|
@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -e
|
||||||
|
loc=$(curl -o /dev/null -sIw "%{redirect_url}" \
|
||||||
|
'https://github.com/jgm/pandoc/releases/latest')
|
||||||
|
vers=${loc##*/}
|
||||||
|
deb="pandoc-$vers-1-amd64.deb"
|
||||||
|
uri=${loc%/tag*}/download/$vers/$deb
|
||||||
|
curl -sL "$uri" -o "/tmp/$deb"
|
||||||
|
dpkg -i "/tmp/$deb"
|
@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# WARNING: this will fuck up your terminal and overwrite stuff, be
|
||||||
|
# careful
|
||||||
|
|
||||||
|
curl https://download.opensuse.org/repositories/isv:/Rancher:/stable/deb/Release.key | sudo apt-key add -
|
||||||
|
sudo add-apt-repository 'deb https://download.opensuse.org/repositories/isv:/Rancher:/stable/deb/ ./'
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install rancher-desktop
|
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
dir="$HOME/.local/bin"
|
||||||
|
mkdir -p "$dir"
|
||||||
|
curl -L https://github.com/talos-systems/talos/releases/latest/download/talosctl-linux-amd64 -o "$dir"/talosctl
|
||||||
|
chmod +x "$dir/talosctl"
|
@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
ver=1.1.3
|
||||||
|
|
||||||
|
[[ -z "$GOBIN" ]] && echo "GOBIN not set" && exit 1
|
||||||
|
|
||||||
|
dir=$(mktemp -d)
|
||||||
|
cd "$dir"
|
||||||
|
echo "Now working from $dir"
|
||||||
|
curl -sSLO "https://releases.hashicorp.com/terraform/$ver/terraform_${ver}_linux_amd64.zip"
|
||||||
|
unzip -q *.zip
|
||||||
|
mv terraform "$GOBIN"
|
@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
sudo gem install twurl
|
@ -0,0 +1,18 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
docker pull vagrantlibvirt/vagrant-libvirt:latest
|
||||||
|
echo '
|
||||||
|
Now add the following function to your ~/.bashrc:
|
||||||
|
|
||||||
|
vagrant ()
|
||||||
|
{
|
||||||
|
docker run -it --rm \
|
||||||
|
-e LIBVIRT_DEFAULT_URI \
|
||||||
|
-v /var/run/libvirt/:/var/run/libvirt/ \
|
||||||
|
-v ~/.vagrant.d:/.vagrant.d \
|
||||||
|
-v $(realpath "${PWD}"):${PWD} \
|
||||||
|
-w $(realpath "${PWD}") \
|
||||||
|
--network host \
|
||||||
|
vagrantlibvirt/vagrant-libvirt:latest vagrant "$@"
|
||||||
|
}
|
||||||
|
'
|
||||||
|
|
@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
brew install bash
|
||||||
|
echo "Now don't forget:"
|
||||||
|
echo " Add /usr/local/bin/bash to /etc/shells"
|
||||||
|
echo " Run chsh -s /usr/local/bin/bash"
|
||||||
|
echo " Use #!/usr/bin/env bash as shebang line"
|
@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
exec brew install jq
|
@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
exec brew install lynx
|
@ -0,0 +1,405 @@
|
|||||||
|
{
|
||||||
|
"Use Non-ASCII Font" : false,
|
||||||
|
"Tags" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"Ansi 12 Color" : {
|
||||||
|
"Red Component" : 0.51372551918029785,
|
||||||
|
"Color Space" : "Calibrated",
|
||||||
|
"Blue Component" : 0.59607845544815063,
|
||||||
|
"Alpha Component" : 1,
|
||||||
|
"Green Component" : 0.64705884456634521
|
||||||
|
},
|
||||||
|
"Ansi 6 Color" : {
|
||||||
|
"Red Component" : 0.40784314274787903,
|
||||||
|
"Color Space" : "Calibrated",
|
||||||
|
"Blue Component" : 0.41568627953529358,
|
||||||
|
"Alpha Component" : 1,
|
||||||
|
"Green Component" : 0.61568629741668701
|
||||||
|
},
|
||||||
|
"Draw Powerline Glyphs" : true,
|
||||||
|
"Bold Color" : {
|
||||||
|
"Red Component" : 0.90980392694473267,
|
||||||
|
"Color Space" : "Calibrated",
|
||||||
|
"Blue Component" : 0.64313727617263794,
|
||||||
|
"Alpha Component" : 1,
|
||||||
|
"Green Component" : 0.83137255907058716
|
||||||
|
},
|
||||||
|
"Normal Font" : "UbuntuMono-Regular 30",
|
||||||
|
"Link Color" : {
|
||||||
|
"Red Component" : 0.7450980544090271,
|
||||||
|
"Color Space" : "Calibrated",
|
||||||
|
"Blue Component" : 0.090196080505847931,
|
||||||
|
"Alpha Component" : 1,
|
||||||
|
"Green Component" : 0.058823529630899429
|
||||||
|
},
|
||||||
|
"Ansi 1 Color" : {
|
||||||
|
"Red Component" : 0.80000001192092896,
|
||||||
|
"Color Space" : "Calibrated",
|
||||||
|
"Blue Component" : 0.11372549086809158,
|
||||||
|
"Alpha Component" : 1,
|
||||||
|
"Green Component" : 0.14117647707462311
|
||||||
|
},
|
||||||
|
"Rows" : 29,
|
||||||
|
"Default Bookmark" : "No",
|
||||||
|
"Ansi 2 Color" : {
|
||||||
|
"Red Component" : 0.59607845544815063,
|
||||||
|
"Color Space" : "Calibrated",
|
||||||
|
"Blue Component" : 0.10196078568696976,
|
||||||
|
"Alpha Component" : 1,
|
||||||
|
"Green Component" : 0.59215688705444336
|
||||||
|
},
|
||||||
|
"Cursor Guide Color" : {
|
||||||
|
"Red Component" : 0.64999997615814209,
|
||||||
|
"Color Space" : "Calibrated",
|
||||||
|
"Blue Component" : 1,
|
||||||
|
"Alpha Component" : 0.25,
|
||||||
|
"Green Component" : 0.9100000262260437
|
||||||
|
},
|
||||||
|
"Non-ASCII Anti Aliased" : true,
|
||||||
|
"Use Bright Bold" : true,
|
||||||
|
"Ansi 10 Color" : {
|
||||||
|
"Red Component" : 0.72156864404678345,
|
||||||
|
"Color Space" : "Calibrated",
|
||||||
|
"Blue Component" : 0.14901961386203766,
|
||||||
|
"Alpha Component" : 1,
|
||||||
|
"Green Component" : 0.73333334922790527
|
||||||
|
},
|
||||||
|
"Prevent Opening in a Tab" : true,
|
||||||
|
"Ambiguous Double Width" : false,
|
||||||
|
"Jobs to Ignore" : [
|
||||||
|
"rlogin",
|
||||||
|
"ssh",
|
||||||
|
"slogin",
|
||||||
|
"telnet"
|
||||||
|
],
|
||||||
|
"Ansi 15 Color" : {
|
||||||
|
"Red Component" : 0.92156863212585449,
|
||||||
|
"Color Space" : "Calibrated",
|
||||||
|
"Blue Component" : 0.69803923368453979,
|
||||||
|
"Alpha Component" : 1,
|
||||||
|
"Green Component" : 0.85882353782653809
|
||||||
|
},
|
||||||
|
"Foreground Color" : {
|
||||||
|
"Red Component" : 0.90980392694473267,
|
||||||
|
"Color Space" : "Calibrated",
|
||||||
|
"Blue Component" : 0.64313727617263794,
|
||||||
|
"Alpha Component" : 1,
|
||||||
|
"Green Component" : 0.83137255907058716
|
||||||
|
},
|
||||||
|
"Working Directory" : "\/Users\/rwxrob",
|
||||||
|
"Blinking Cursor" : true,
|
||||||
|
"Disable Window Resizing" : true,
|
||||||
|
"Sync Title" : false,
|
||||||
|
"Prompt Before Closing 2" : false,
|
||||||
|
"BM Growl" : true,
|
||||||
|
"Command" : "",
|
||||||
|
"Description" : "Default",
|
||||||
|
"Mouse Reporting" : true,
|
||||||
|
"Screen" : -1,
|
||||||
|
"Selection Color" : {
|
||||||
|
"Red Component" : 0.19607843458652496,
|
||||||
|
"Color Space" : "Calibrated",
|
||||||
|
"Blue Component" : 0.18431372940540314,
|
||||||
|
"Alpha Component" : 1,
|
||||||
|
"Green Component" : 0.18823529779911041
|
||||||
|
},
|
||||||
|
"Columns" : 107,
|
||||||
|
"Idle Code" : 0,
|
||||||
|
"Ansi 13 Color" : {
|
||||||
|
"Red Component" : 0.82745099067687988,
|
||||||
|
"Color Space" : "Calibrated",
|
||||||
|
"Blue Component" : 0.60784316062927246,
|
||||||
|
"Alpha Component" : 1,
|
||||||
|
"Green Component" : 0.52549022436141968
|
||||||
|
},
|
||||||
|
"Custom Command" : "No",
|
||||||
|
"ASCII Anti Aliased" : true,
|
||||||
|
"Non Ascii Font" : "Monaco 12",
|
||||||
|
"Vertical Spacing" : 1,
|
||||||
|
"Use Bold Font" : true,
|
||||||
|
"Option Key Sends" : 0,
|
||||||
|
"Selected Text Color" : {
|
||||||
|
"Red Component" : 0.70916998386383057,
|
||||||
|
"Color Space" : "Calibrated",
|
||||||
|
"Blue Component" : 0.70916998386383057,
|
||||||
|
"Alpha Component" : 1,
|
||||||
|
"Green Component" : 0.70916998386383057
|
||||||
|
},
|
||||||
|
"Background Color" : {
|
||||||
|
"Red Component" : 0.10980392247438431,
|
||||||
|
"Color Space" : "Calibrated",
|
||||||
|
"Blue Component" : 0.10980392247438431,
|
||||||
|
"Alpha Component" : 1,
|
||||||
|
"Green Component" : 0.10980392247438431
|
||||||
|
},
|
||||||
|
"Character Encoding" : 4,
|
||||||
|
"Ansi 11 Color" : {
|
||||||
|
"Red Component" : 0.98039215803146362,
|
||||||
|
"Color Space" : "Calibrated",
|
||||||
|
"Blue Component" : 0.18431372940540314,
|
||||||
|
"Alpha Component" : 1,
|
||||||
|
"Green Component" : 0.74117648601531982
|
||||||
|
},
|
||||||
|
"Use Italic Font" : true,
|
||||||
|
"Unlimited Scrollback" : false,
|
||||||
|
"Keyboard Map" : {
|
||||||
|
"0xf700-0x260000" : {
|
||||||
|
"Action" : 10,
|
||||||
|
"Text" : "[1;6A"
|
||||||
|
},
|
||||||
|
"0x37-0x40000" : {
|
||||||
|
"Action" : 11,
|
||||||
|
"Text" : "0x1f"
|
||||||
|
},
|
||||||
|
"0x32-0x40000" : {
|
||||||
|
"Action" : 11,
|
||||||
|
"Text" : "0x00"
|
||||||
|
},
|
||||||
|
"0xf709-0x20000" : {
|
||||||
|
"Action" : 10,
|
||||||
|
"Text" : "[17;2~"
|
||||||
|
},
|
||||||
|
"0xf70c-0x20000" : {
|
||||||
|
"Action" : 10,
|
||||||
|
"Text" : "[20;2~"
|
||||||
|
},
|
||||||
|
"0xf729-0x20000" : {
|
||||||
|
"Action" : 10,
|
||||||
|
"Text" : "[1;2H"
|
||||||
|
},
|
||||||
|
"0xf72b-0x40000" : {
|
||||||
|
"Action" : 10,
|
||||||
|
"Text" : "[1;5F"
|
||||||
|
},
|
||||||
|
"0xf705-0x20000" : {
|
||||||
|
"Action" : 10,
|
||||||
|
"Text" : "[1;2Q"
|
||||||
|
},
|
||||||
|
"0xf703-0x260000" : {
|
||||||
|
"Action" : 10,
|
||||||
|
"Text" : "[1;6C"
|
||||||
|
},
|
||||||
|
"0xf700-0x220000" : {
|
||||||
|
"Action" : 10,
|
||||||
|
"Text" : "[1;2A"
|
||||||
|
},
|
||||||
|
"0xf701-0x280000" : {
|
||||||
|
"Action" : 11,
|
||||||
|
"Text" : "0x1b 0x1b 0x5b 0x42"
|
||||||
|
},
|
||||||
|
"0x38-0x40000" : {
|
||||||
|
"Action" : 11,
|
||||||
|
"Text" : "0x7f"
|
||||||
|
},
|
||||||
|
"0x33-0x40000" : {
|
||||||
|
"Action" : 11,
|
||||||
|
"Text" : "0x1b"
|
||||||
|
},
|
||||||
|
"0xf703-0x220000" : {
|
||||||
|
"Action" : 10,
|
||||||
|
"Text" : "[1;2C"
|
||||||
|
},
|
||||||
|
"0xf701-0x240000" : {
|
||||||
|
"Action" : 10,
|
||||||
|
"Text" : "[1;5B"
|
||||||
|
},
|
||||||
|
"0xf70d-0x20000" : {
|
||||||
|
"Action" : 10,
|
||||||
|
"Text" : "[21;2~"
|
||||||
|
},
|
||||||
|
"0xf702-0x260000" : {
|
||||||
|
"Action" : 10,
|
||||||
|
"Text" : "[1;6D"
|
||||||
|
},
|
||||||
|
"0xf729-0x40000" : {
|
||||||
|
"Action" : 10,
|
||||||
|
"Text" : "[1;5H"
|
||||||
|
},
|
||||||
|
"0xf706-0x20000" : {
|
||||||
|
"Action" : 10,
|
||||||
|
"Text" : "[1;2R"
|
||||||
|
},
|
||||||
|
"0x34-0x40000" : {
|
||||||
|
"Action" : 11,
|
||||||
|
"Text" : "0x1c"
|
||||||
|
},
|
||||||
|
"0xf700-0x280000" : {
|
||||||
|
"Action" : 11,
|
||||||
|
"Text" : "0x1b 0x1b 0x5b 0x41"
|
||||||
|
},
|
||||||
|
"0x2d-0x40000" : {
|
||||||
|
"Action" : 11,
|
||||||
|
"Text" : "0x1f"
|
||||||
|
},
|
||||||
|
"0xf70e-0x20000" : {
|
||||||
|
"Action" : 10,
|
||||||
|
"Text" : "[23;2~"
|
||||||
|
},
|
||||||
|
"0xf702-0x220000" : {
|
||||||
|
"Action" : 10,
|
||||||
|
"Text" : "[1;2D"
|
||||||
|
},
|
||||||
|
"0xf703-0x280000" : {
|
||||||
|
"Action" : 11,
|
||||||
|
"Text" : "0x1b 0x1b 0x5b 0x43"
|
||||||
|
},
|
||||||
|
"0xf700-0x240000" : {
|
||||||
|
"Action" : 10,
|
||||||
|
"Text" : "[1;5A"
|
||||||
|
},
|
||||||
|
"0xf707-0x20000" : {
|
||||||
|
"Action" : 10,
|
||||||
|
"Text" : "[1;2S"
|
||||||
|
},
|
||||||
|
"0xf70a-0x20000" : {
|
||||||
|
"Action" : 10,
|
||||||
|
"Text" : "[18;2~"
|
||||||
|
},
|
||||||
|
"0x35-0x40000" : {
|
||||||
|
"Action" : 11,
|
||||||
|
"Text" : "0x1d"
|
||||||
|
},
|
||||||
|
"0xf70f-0x20000" : {
|
||||||
|
"Action" : 10,
|
||||||
|
"Text" : "[24;2~"
|
||||||
|
},
|
||||||
|
"0xf703-0x240000" : {
|
||||||
|
"Action" : 10,
|
||||||
|
"Text" : "[1;5C"
|
||||||
|
},
|
||||||
|
"0xf701-0x260000" : {
|
||||||
|
"Action" : 10,
|
||||||
|
"Text" : "[1;6B"
|
||||||
|
},
|
||||||
|
"0xf702-0x280000" : {
|
||||||
|
"Action" : 11,
|
||||||
|
"Text" : "0x1b 0x1b 0x5b 0x44"
|
||||||
|
},
|
||||||
|
"0xf72b-0x20000" : {
|
||||||
|
"Action" : 10,
|
||||||
|
"Text" : "[1;2F"
|
||||||
|
},
|
||||||
|
"0x36-0x40000" : {
|
||||||
|
"Action" : 11,
|
||||||
|
"Text" : "0x1e"
|
||||||
|
},
|
||||||
|
"0xf708-0x20000" : {
|
||||||
|
"Action" : 10,
|
||||||
|
"Text" : "[15;2~"
|
||||||
|
},
|
||||||
|
"0xf701-0x220000" : {
|
||||||
|
"Action" : 10,
|
||||||
|
"Text" : "[1;2B"
|
||||||
|
},
|
||||||
|
"0xf70b-0x20000" : {
|
||||||
|
"Action" : 10,
|
||||||
|
"Text" : "[19;2~"
|
||||||
|
},
|
||||||
|
"0xf702-0x240000" : {
|
||||||
|
"Action" : 10,
|
||||||
|
"Text" : "[1;5D"
|
||||||
|
},
|
||||||
|
"0xf704-0x20000" : {
|
||||||
|
"Action" : 10,
|
||||||
|
"Text" : "[1;2P"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Window Type" : 0,
|
||||||
|
"Cursor Boost" : 0,
|
||||||
|
"Background Image Location" : "",
|
||||||
|
"Blur" : false,
|
||||||
|
"Badge Color" : {
|
||||||
|
"Red Component" : 1,
|
||||||
|
"Color Space" : "Calibrated",
|
||||||
|
"Blue Component" : 0,
|
||||||
|
"Alpha Component" : 0.5,
|
||||||
|
"Green Component" : 0
|
||||||
|
},
|
||||||
|
"Scrollback Lines" : 1000,
|
||||||
|
"Send Code When Idle" : false,
|
||||||
|
"Close Sessions On End" : true,
|
||||||
|
"Terminal Type" : "xterm-256color",
|
||||||
|
"Visual Bell" : true,
|
||||||
|
"Flashing Bell" : false,
|
||||||
|
"Silence Bell" : true,
|
||||||
|
"Ansi 14 Color" : {
|
||||||
|
"Red Component" : 0.55686277151107788,
|
||||||
|
"Color Space" : "Calibrated",
|
||||||
|
"Blue Component" : 0.48627451062202454,
|
||||||
|
"Alpha Component" : 1,
|
||||||
|
"Green Component" : 0.78823530673980713
|
||||||
|
},
|
||||||
|
"ASCII Ligatures" : false,
|
||||||
|
"Name" : "Default",
|
||||||
|
"Cursor Text Color" : {
|
||||||
|
"Red Component" : 0.90980392694473267,
|
||||||
|
"Color Space" : "Calibrated",
|
||||||
|
"Blue Component" : 0.64313727617263794,
|
||||||
|
"Alpha Component" : 1,
|
||||||
|
"Green Component" : 0.83137255907058716
|
||||||
|
},
|
||||||
|
"Minimum Contrast" : 0.30243267276422764,
|
||||||
|
"Shortcut" : "",
|
||||||
|
"Cursor Color" : {
|
||||||
|
"Red Component" : 0.82086181640625,
|
||||||
|
"Color Space" : "sRGB",
|
||||||
|
"Blue Component" : 0.25787205621600151,
|
||||||
|
"Alpha Component" : 1,
|
||||||
|
"Green Component" : 0.57852262672474808
|
||||||
|
},
|
||||||
|
"Transparency" : 0,
|
||||||
|
"Ansi 0 Color" : {
|
||||||
|
"Red Component" : 0.15686275064945221,
|
||||||
|
"Color Space" : "Calibrated",
|
||||||
|
"Blue Component" : 0.15686275064945221,
|
||||||
|
"Alpha Component" : 1,
|
||||||
|
"Green Component" : 0.15686275064945221
|
||||||
|
},
|
||||||
|
"Custom Directory" : "No",
|
||||||
|
"Ansi 3 Color" : {
|
||||||
|
"Red Component" : 0.84313726425170898,
|
||||||
|
"Color Space" : "Calibrated",
|
||||||
|
"Blue Component" : 0.12941177189350128,
|
||||||
|
"Alpha Component" : 1,
|
||||||
|
"Green Component" : 0.60000002384185791
|
||||||
|
},
|
||||||
|
"Guid" : "A45A9A72-F134-43CD-8E35-C3C946457F5D",
|
||||||
|
"Right Option Key Sends" : 0,
|
||||||
|
"Horizontal Spacing" : 1,
|
||||||
|
"Ansi 7 Color" : {
|
||||||
|
"Red Component" : 0.65882354974746704,
|
||||||
|
"Color Space" : "Calibrated",
|
||||||
|
"Blue Component" : 0.51764708757400513,
|
||||||
|
"Alpha Component" : 1,
|
||||||
|
"Green Component" : 0.60000002384185791
|
||||||
|
},
|
||||||
|
"Ansi 8 Color" : {
|
||||||
|
"Red Component" : 0.57254904508590698,
|
||||||
|
"Color Space" : "Calibrated",
|
||||||
|
"Blue Component" : 0.45490196347236633,
|
||||||
|
"Alpha Component" : 1,
|
||||||
|
"Green Component" : 0.51372551918029785
|
||||||
|
},
|
||||||
|
"Ansi 9 Color" : {
|
||||||
|
"Red Component" : 0.9843137264251709,
|
||||||
|
"Color Space" : "Calibrated",
|
||||||
|
"Blue Component" : 0.20392157137393951,
|
||||||
|
"Alpha Component" : 1,
|
||||||
|
"Green Component" : 0.28627452254295349
|
||||||
|
},
|
||||||
|
"Ansi 4 Color" : {
|
||||||
|
"Red Component" : 0.27058824896812439,
|
||||||
|
"Color Space" : "Calibrated",
|
||||||
|
"Blue Component" : 0.53333336114883423,
|
||||||
|
"Alpha Component" : 1,
|
||||||
|
"Green Component" : 0.5215686559677124
|
||||||
|
},
|
||||||
|
"Ansi 5 Color" : {
|
||||||
|
"Red Component" : 0.69411766529083252,
|
||||||
|
"Color Space" : "Calibrated",
|
||||||
|
"Blue Component" : 0.52549022436141968,
|
||||||
|
"Alpha Component" : 1,
|
||||||
|
"Green Component" : 0.38431373238563538
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,321 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://aka.ms/terminal-profiles-schema",
|
||||||
|
"actions":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"command":
|
||||||
|
{
|
||||||
|
"action": "copy",
|
||||||
|
"singleLine": false
|
||||||
|
},
|
||||||
|
"keys": "ctrl+c"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"command": "paste",
|
||||||
|
"keys": "ctrl+v"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"command": "find",
|
||||||
|
"keys": "ctrl+shift+f"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"command":
|
||||||
|
{
|
||||||
|
"action": "splitPane",
|
||||||
|
"split": "auto",
|
||||||
|
"splitMode": "duplicate"
|
||||||
|
},
|
||||||
|
"keys": "alt+shift+d"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"alwaysShowTabs": true,
|
||||||
|
"copyFormatting": "none",
|
||||||
|
"copyOnSelect": true,
|
||||||
|
"defaultProfile": "{07b52e3e-de2c-5db4-bd2d-ba144ed6c273}",
|
||||||
|
"disableAnimations": true,
|
||||||
|
"initialCols": 80,
|
||||||
|
"launchMode": "default",
|
||||||
|
"profiles":
|
||||||
|
{
|
||||||
|
"defaults": {},
|
||||||
|
"list":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"commandline": "powershell.exe",
|
||||||
|
"guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
|
||||||
|
"hidden": false,
|
||||||
|
"name": "Windows PowerShell"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bellStyle": "none",
|
||||||
|
"closeOnExit": "always",
|
||||||
|
"colorScheme": "Gruvbox",
|
||||||
|
"commandline": "C:\\Program Files\\Git\\bin\\bash.exe",
|
||||||
|
"fontFace": "UbuntuMono NF",
|
||||||
|
"fontSize": 21,
|
||||||
|
"guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
|
||||||
|
"hidden": false,
|
||||||
|
"name": "Git-Bash",
|
||||||
|
"padding": "4",
|
||||||
|
"scrollbarState": "hidden"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
|
||||||
|
"hidden": false,
|
||||||
|
"name": "Azure Cloud Shell",
|
||||||
|
"source": "Windows.Terminal.Azure"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bellStyle": "none",
|
||||||
|
"closeOnExit": "always",
|
||||||
|
"colorScheme": "Gruvbox",
|
||||||
|
"fontFace": "UbuntuMono NF",
|
||||||
|
"fontSize": 21,
|
||||||
|
"guid": "{07b52e3e-de2c-5db4-bd2d-ba144ed6c273}",
|
||||||
|
"hidden": false,
|
||||||
|
"name": "Ubuntu-20.04",
|
||||||
|
"padding": "5",
|
||||||
|
"scrollbarState": "hidden",
|
||||||
|
"source": "Windows.Terminal.Wsl",
|
||||||
|
"startingDirectory": "%USERPROFILE%"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"schemes":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"background": "#0C0C0C",
|
||||||
|
"black": "#0C0C0C",
|
||||||
|
"blue": "#0037DA",
|
||||||
|
"brightBlack": "#767676",
|
||||||
|
"brightBlue": "#3B78FF",
|
||||||
|
"brightCyan": "#61D6D6",
|
||||||
|
"brightGreen": "#16C60C",
|
||||||
|
"brightPurple": "#B4009E",
|
||||||
|
"brightRed": "#E74856",
|
||||||
|
"brightWhite": "#F2F2F2",
|
||||||
|
"brightYellow": "#F9F1A5",
|
||||||
|
"cursorColor": "#FFFFFF",
|
||||||
|
"cyan": "#3A96DD",
|
||||||
|
"foreground": "#CCCCCC",
|
||||||
|
"green": "#13A10E",
|
||||||
|
"name": "Campbell",
|
||||||
|
"purple": "#881798",
|
||||||
|
"red": "#C50F1F",
|
||||||
|
"selectionBackground": "#FFFFFF",
|
||||||
|
"white": "#CCCCCC",
|
||||||
|
"yellow": "#C19C00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"background": "#012456",
|
||||||
|
"black": "#0C0C0C",
|
||||||
|
"blue": "#0037DA",
|
||||||
|
"brightBlack": "#767676",
|
||||||
|
"brightBlue": "#3B78FF",
|
||||||
|
"brightCyan": "#61D6D6",
|
||||||
|
"brightGreen": "#16C60C",
|
||||||
|
"brightPurple": "#B4009E",
|
||||||
|
"brightRed": "#E74856",
|
||||||
|
"brightWhite": "#F2F2F2",
|
||||||
|
"brightYellow": "#F9F1A5",
|
||||||
|
"cursorColor": "#FFFFFF",
|
||||||
|
"cyan": "#3A96DD",
|
||||||
|
"foreground": "#CCCCCC",
|
||||||
|
"green": "#13A10E",
|
||||||
|
"name": "Campbell Powershell",
|
||||||
|
"purple": "#881798",
|
||||||
|
"red": "#C50F1F",
|
||||||
|
"selectionBackground": "#FFFFFF",
|
||||||
|
"white": "#CCCCCC",
|
||||||
|
"yellow": "#C19C00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"background": "#282828",
|
||||||
|
"black": "#504945",
|
||||||
|
"blue": "#458588",
|
||||||
|
"brightBlack": "#928374",
|
||||||
|
"brightBlue": "#83A598",
|
||||||
|
"brightCyan": "#8EC07C",
|
||||||
|
"brightGreen": "#B8BB26",
|
||||||
|
"brightPurple": "#D3869B",
|
||||||
|
"brightRed": "#FB4934",
|
||||||
|
"brightWhite": "#EBDBB2",
|
||||||
|
"brightYellow": "#FABD2F",
|
||||||
|
"cursorColor": "#EBDBB2",
|
||||||
|
"cyan": "#689D6A",
|
||||||
|
"foreground": "#EBDBB2",
|
||||||
|
"green": "#98971A",
|
||||||
|
"name": "Gruvbox",
|
||||||
|
"purple": "#B16286",
|
||||||
|
"red": "#CC241D",
|
||||||
|
"selectionBackground": "#32FFF6",
|
||||||
|
"white": "#A89984",
|
||||||
|
"yellow": "#D79921"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"background": "#282C34",
|
||||||
|
"black": "#282C34",
|
||||||
|
"blue": "#61AFEF",
|
||||||
|
"brightBlack": "#5A6374",
|
||||||
|
"brightBlue": "#61AFEF",
|
||||||
|
"brightCyan": "#56B6C2",
|
||||||
|
"brightGreen": "#98C379",
|
||||||
|
"brightPurple": "#C678DD",
|
||||||
|
"brightRed": "#E06C75",
|
||||||
|
"brightWhite": "#DCDFE4",
|
||||||
|
"brightYellow": "#E5C07B",
|
||||||
|
"cursorColor": "#FFFFFF",
|
||||||
|
"cyan": "#56B6C2",
|
||||||
|
"foreground": "#DCDFE4",
|
||||||
|
"green": "#98C379",
|
||||||
|
"name": "One Half Dark",
|
||||||
|
"purple": "#C678DD",
|
||||||
|
"red": "#E06C75",
|
||||||
|
"selectionBackground": "#FFFFFF",
|
||||||
|
"white": "#DCDFE4",
|
||||||
|
"yellow": "#E5C07B"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"background": "#FAFAFA",
|
||||||
|
"black": "#383A42",
|
||||||
|
"blue": "#0184BC",
|
||||||
|
"brightBlack": "#4F525D",
|
||||||
|
"brightBlue": "#61AFEF",
|
||||||
|
"brightCyan": "#56B5C1",
|
||||||
|
"brightGreen": "#98C379",
|
||||||
|
"brightPurple": "#C577DD",
|
||||||
|
"brightRed": "#DF6C75",
|
||||||
|
"brightWhite": "#FFFFFF",
|
||||||
|
"brightYellow": "#E4C07A",
|
||||||
|
"cursorColor": "#4F525D",
|
||||||
|
"cyan": "#0997B3",
|
||||||
|
"foreground": "#383A42",
|
||||||
|
"green": "#50A14F",
|
||||||
|
"name": "One Half Light",
|
||||||
|
"purple": "#A626A4",
|
||||||
|
"red": "#E45649",
|
||||||
|
"selectionBackground": "#FFFFFF",
|
||||||
|
"white": "#FAFAFA",
|
||||||
|
"yellow": "#C18301"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"background": "#002B36",
|
||||||
|
"black": "#002B36",
|
||||||
|
"blue": "#268BD2",
|
||||||
|
"brightBlack": "#073642",
|
||||||
|
"brightBlue": "#839496",
|
||||||
|
"brightCyan": "#93A1A1",
|
||||||
|
"brightGreen": "#586E75",
|
||||||
|
"brightPurple": "#6C71C4",
|
||||||
|
"brightRed": "#CB4B16",
|
||||||
|
"brightWhite": "#FDF6E3",
|
||||||
|
"brightYellow": "#657B83",
|
||||||
|
"cursorColor": "#FFFFFF",
|
||||||
|
"cyan": "#2AA198",
|
||||||
|
"foreground": "#839496",
|
||||||
|
"green": "#859900",
|
||||||
|
"name": "Solarized Dark",
|
||||||
|
"purple": "#D33682",
|
||||||
|
"red": "#DC322F",
|
||||||
|
"selectionBackground": "#FFFFFF",
|
||||||
|
"white": "#EEE8D5",
|
||||||
|
"yellow": "#B58900"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"background": "#FDF6E3",
|
||||||
|
"black": "#002B36",
|
||||||
|
"blue": "#268BD2",
|
||||||
|
"brightBlack": "#073642",
|
||||||
|
"brightBlue": "#839496",
|
||||||
|
"brightCyan": "#93A1A1",
|
||||||
|
"brightGreen": "#586E75",
|
||||||
|
"brightPurple": "#6C71C4",
|
||||||
|
"brightRed": "#CB4B16",
|
||||||
|
"brightWhite": "#FDF6E3",
|
||||||
|
"brightYellow": "#657B83",
|
||||||
|
"cursorColor": "#002B36",
|
||||||
|
"cyan": "#2AA198",
|
||||||
|
"foreground": "#657B83",
|
||||||
|
"green": "#859900",
|
||||||
|
"name": "Solarized Light",
|
||||||
|
"purple": "#D33682",
|
||||||
|
"red": "#DC322F",
|
||||||
|
"selectionBackground": "#FFFFFF",
|
||||||
|
"white": "#EEE8D5",
|
||||||
|
"yellow": "#B58900"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"background": "#000000",
|
||||||
|
"black": "#000000",
|
||||||
|
"blue": "#3465A4",
|
||||||
|
"brightBlack": "#555753",
|
||||||
|
"brightBlue": "#729FCF",
|
||||||
|
"brightCyan": "#34E2E2",
|
||||||
|
"brightGreen": "#8AE234",
|
||||||
|
"brightPurple": "#AD7FA8",
|
||||||
|
"brightRed": "#EF2929",
|
||||||
|
"brightWhite": "#EEEEEC",
|
||||||
|
"brightYellow": "#FCE94F",
|
||||||
|
"cursorColor": "#FFFFFF",
|
||||||
|
"cyan": "#06989A",
|
||||||
|
"foreground": "#D3D7CF",
|
||||||
|
"green": "#4E9A06",
|
||||||
|
"name": "Tango Dark",
|
||||||
|
"purple": "#75507B",
|
||||||
|
"red": "#CC0000",
|
||||||
|
"selectionBackground": "#FFFFFF",
|
||||||
|
"white": "#D3D7CF",
|
||||||
|
"yellow": "#C4A000"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"background": "#FFFFFF",
|
||||||
|
"black": "#000000",
|
||||||
|
"blue": "#3465A4",
|
||||||
|
"brightBlack": "#555753",
|
||||||
|
"brightBlue": "#729FCF",
|
||||||
|
"brightCyan": "#34E2E2",
|
||||||
|
"brightGreen": "#8AE234",
|
||||||
|
"brightPurple": "#AD7FA8",
|
||||||
|
"brightRed": "#EF2929",
|
||||||
|
"brightWhite": "#EEEEEC",
|
||||||
|
"brightYellow": "#FCE94F",
|
||||||
|
"cursorColor": "#000000",
|
||||||
|
"cyan": "#06989A",
|
||||||
|
"foreground": "#555753",
|
||||||
|
"green": "#4E9A06",
|
||||||
|
"name": "Tango Light",
|
||||||
|
"purple": "#75507B",
|
||||||
|
"red": "#CC0000",
|
||||||
|
"selectionBackground": "#FFFFFF",
|
||||||
|
"white": "#D3D7CF",
|
||||||
|
"yellow": "#C4A000"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"background": "#000000",
|
||||||
|
"black": "#000000",
|
||||||
|
"blue": "#000080",
|
||||||
|
"brightBlack": "#808080",
|
||||||
|
"brightBlue": "#0000FF",
|
||||||
|
"brightCyan": "#00FFFF",
|
||||||
|
"brightGreen": "#00FF00",
|
||||||
|
"brightPurple": "#FF00FF",
|
||||||
|
"brightRed": "#FF0000",
|
||||||
|
"brightWhite": "#FFFFFF",
|
||||||
|
"brightYellow": "#FFFF00",
|
||||||
|
"cursorColor": "#FFFFFF",
|
||||||
|
"cyan": "#008080",
|
||||||
|
"foreground": "#C0C0C0",
|
||||||
|
"green": "#008000",
|
||||||
|
"name": "Vintage",
|
||||||
|
"purple": "#800080",
|
||||||
|
"red": "#800000",
|
||||||
|
"selectionBackground": "#FFFFFF",
|
||||||
|
"white": "#C0C0C0",
|
||||||
|
"yellow": "#808000"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"showTabsInTitlebar": true,
|
||||||
|
"showTerminalTitleInTitlebar": false,
|
||||||
|
"startOnUserLogin": true,
|
||||||
|
"theme": "dark"
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
# Lynx Text Browser FTW!
|
||||||
|
|
||||||
|
*New and Improved! You can now test this as a [container]:*
|
||||||
|
|
||||||
|
```
|
||||||
|
docker run -it --rm rwxrob/lynx
|
||||||
|
```
|
||||||
|
|
||||||
|
It might be the oldest web browser currently under active maintenance
|
||||||
|
but it is still hands down the single best browser for rapid research.
|
||||||
|
Lynx does not even look at the bloat of images, CSS, and JavaScript when
|
||||||
|
loading making it objectively the fastest possible way to browse the
|
||||||
|
text of web sites. When combined with a `?` (`duck`) and `??` (`google`)
|
||||||
|
command you fill find results to documentation queries and technical
|
||||||
|
documentation as fast as it takes to open a local `man` page.
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
Run the `./setup` to
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,116 @@
|
|||||||
|
# Setting the normal and default types lets us keep (almost) the same colors
|
||||||
|
# whether the terminal's default colors are white-on-black or black-on-white.
|
||||||
|
# It is not exact since the default "white" is not necessarily the same color
|
||||||
|
# as the ANSI lightgray, but is as close as we can get in a standard way.
|
||||||
|
#
|
||||||
|
# If you really want the terminal's default colors, and if lynx is built using
|
||||||
|
# ncurses' default-color support, remove these two lines:
|
||||||
|
#normal: normal: lightgray:black
|
||||||
|
#default: normal: white:black
|
||||||
|
|
||||||
|
# Normal type styles correspond to HTML tags.
|
||||||
|
#
|
||||||
|
# The next line (beginning with "em") means: use bold if mono, otherwise
|
||||||
|
# brightblue on <defaultbackground>
|
||||||
|
em: bold: brightblue
|
||||||
|
strong: bold: brightred
|
||||||
|
b: bold: red
|
||||||
|
i: bold: brightblue
|
||||||
|
a: bold: green
|
||||||
|
img: dim: brown
|
||||||
|
fig: normal: gray
|
||||||
|
caption: reverse: brown
|
||||||
|
hr: normal: yellow
|
||||||
|
blockquote: normal: brightblue
|
||||||
|
ul: normal: brown
|
||||||
|
address: normal: magenta
|
||||||
|
title: normal: magenta
|
||||||
|
tt: dim: brightmagenta: black
|
||||||
|
h1: bold: white: blue
|
||||||
|
label: normal: magenta
|
||||||
|
q: normal: yellow: magenta
|
||||||
|
small: dim: default
|
||||||
|
big: bold: yellow
|
||||||
|
sup: bold: yellow
|
||||||
|
sub: dim: gray
|
||||||
|
li: normal: magenta
|
||||||
|
code: normal: cyan
|
||||||
|
cite: normal: cyan
|
||||||
|
|
||||||
|
table: normal: brightcyan
|
||||||
|
tr: bold: brown
|
||||||
|
td: normal: default
|
||||||
|
br: normal: default
|
||||||
|
|
||||||
|
# Special styles - not corresponding directly to HTML tags
|
||||||
|
# alert - status bar, when message begins "Alert".
|
||||||
|
# alink - active link
|
||||||
|
# normal - default attributes
|
||||||
|
# status - status bar
|
||||||
|
# whereis - whereis search target
|
||||||
|
#
|
||||||
|
#normal:normal:default:blue
|
||||||
|
alink: reverse: yellow: black
|
||||||
|
status: reverse: cyan: default
|
||||||
|
alert: bold: yellow: red
|
||||||
|
#whereis: reverse+underline: magenta: cyan
|
||||||
|
whereis: bold+reverse: black: yellow
|
||||||
|
# currently not used
|
||||||
|
#value:normal:green
|
||||||
|
|
||||||
|
menu.bg: normal: black: lightgray
|
||||||
|
menu.frame: normal: black: lightgray
|
||||||
|
menu.entry: normal: lightgray: black
|
||||||
|
menu.n: normal: red: gray
|
||||||
|
menu.active: normal: yellow: black
|
||||||
|
menu.sb: normal: brightred: lightgray
|
||||||
|
|
||||||
|
forwbackw.arrow:reverse
|
||||||
|
hot.paste: normal: brightred: gray
|
||||||
|
|
||||||
|
# Styles with classes - <ul class=red> etc.
|
||||||
|
ul.red: underline: brightred
|
||||||
|
ul.blue: bold: brightblue
|
||||||
|
li.red: reverse: red: yellow
|
||||||
|
li.blue: bold: blue
|
||||||
|
strong.a: bold: black: red
|
||||||
|
em.a: reverse: black: blue
|
||||||
|
strong.b: bold: white: red
|
||||||
|
em.b: reverse: white: blue
|
||||||
|
strong.debug: reverse: green
|
||||||
|
font.letter: normal: white: blue
|
||||||
|
input.submit: normal: cyan
|
||||||
|
tr.baone: bold: yellow
|
||||||
|
tr.batwo: bold: green
|
||||||
|
tr.bathree: bold: red
|
||||||
|
#
|
||||||
|
# Special handling for link.
|
||||||
|
link: normal: white
|
||||||
|
link.green: bold: brightgreen
|
||||||
|
link.red: bold: black: red
|
||||||
|
link.blue: bold: white: blue
|
||||||
|
link.toc: bold: black: white
|
||||||
|
# Special cases for link - the rel or title is appended after the class.
|
||||||
|
# <link rel=next class=red href="1">
|
||||||
|
link.red.next: bold: red
|
||||||
|
link.red.prev: bold: yellow: red
|
||||||
|
link.blue.prev: bold: yellow: blue
|
||||||
|
link.blue.next: bold: blue
|
||||||
|
link.green.toc: bold: white: green
|
||||||
|
#
|
||||||
|
# Define styles that will be used when syntax highlighting is requested
|
||||||
|
# (commandline option -prettysrc).
|
||||||
|
span.htmlsrc_comment:normal: white
|
||||||
|
span.htmlsrc_tag:normal: white
|
||||||
|
#If you don't like that the tag name and attribute name are displayed
|
||||||
|
#in different colors, comment the following line.
|
||||||
|
span.htmlsrc_attrib:normal: cyan
|
||||||
|
span.htmlsrc_attrval:normal: magenta
|
||||||
|
span.htmlsrc_abracket:normal: white
|
||||||
|
span.htmlsrc_entity:normal: white
|
||||||
|
##span.htmlsrc_href:
|
||||||
|
##span.htmlsrc_entire:
|
||||||
|
span.htmlsrc_badseq:normal: red
|
||||||
|
span.htmlsrc_badtag:normal: red
|
||||||
|
span.htmlsrc_badattr:normal: red
|
||||||
|
span.htmlsrc_sgmlspecial:normal: yellow
|
@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# WARNING: This setup requires a custom form of lynx (a shell script in
|
||||||
|
# scripts) be installed as well as lynx. [For an easier text browsing
|
||||||
|
# experience that works out of the box use w3m instead.]
|
||||||
|
|
||||||
|
# Also have a look at https://github.com/rwxrob/lynx for more.
|
||||||
|
|
||||||
|
mkdir ~/.config/ 2>/dev/null
|
||||||
|
rm -rf ~/.config/lynx 2>/dev/null
|
||||||
|
ln -s "$PWD" "$HOME/.config/lynx"
|
||||||
|
ls -l ~/.config/lynx
|
@ -0,0 +1,3 @@
|
|||||||
|
# Podman Completion
|
||||||
|
|
||||||
|
Add `d` to the `complete` line at the end.
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
mkdir -p ~/.local/share/podman
|
||||||
|
ln -fs "$PWD/completion" ~/.local/share/podman/completion
|
@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
for i in {0..255}; do
|
||||||
|
printf "\e[38;5;${i}m$i "
|
||||||
|
done
|
@ -0,0 +1,632 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Knowledge Management Utility
|
||||||
|
#
|
||||||
|
# Please maintain the style as described in Google's Shell Style Guide
|
||||||
|
#
|
||||||
|
# Copyright © 2020 Robert Sterling Muhlestein.
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, version 2.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful, but
|
||||||
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
# General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Assumes modern terminal with RGB.
|
||||||
|
|
||||||
|
declare NOCOLOR=
|
||||||
|
[[ -t 1 ]] || NOCOLOR=y
|
||||||
|
declare GOLD=$'\033[38;2;184;138;0m'
|
||||||
|
declare RED=$'\033[38;2;255;0;0m'
|
||||||
|
declare GREY=$'\033[38;2;100;100;100m'
|
||||||
|
declare CYAN=$'\033[38;2;0;255;255m'
|
||||||
|
declare GREEN=$'\033[38;2;0;255;0m'
|
||||||
|
declare RESET=$'\033[0m'
|
||||||
|
|
||||||
|
if [[ -n "$NOCOLOR" ]] ; then
|
||||||
|
GOLD=
|
||||||
|
RED=
|
||||||
|
GREY=
|
||||||
|
CYAN=
|
||||||
|
GREEN=
|
||||||
|
RESET=
|
||||||
|
fi
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Validate that a current knowledge node has been declared as KN
|
||||||
|
# environment variable.
|
||||||
|
|
||||||
|
if [[ -z "${KN}" ]]; then
|
||||||
|
echo "${RED}Please set \$KN to current knowledge node path."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Each command must have an accompanying function that begins with an
|
||||||
|
# underscore to which the main command will delgate.
|
||||||
|
|
||||||
|
readonly -a COMMANDS=(
|
||||||
|
usage render build preview previewstop mkmanifest checkone audit find
|
||||||
|
title rss logdir logpath datepath logroot recdir
|
||||||
|
)
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Print the first argument as a colored message and exit with
|
||||||
|
# error status.
|
||||||
|
#
|
||||||
|
# Globals:
|
||||||
|
# RED
|
||||||
|
# Arguments:
|
||||||
|
# Message to print
|
||||||
|
# Outputs:
|
||||||
|
# Red message text
|
||||||
|
# Returns:
|
||||||
|
# Always returns 1
|
||||||
|
|
||||||
|
_fail () {
|
||||||
|
echo "${RED}$1${RESET}" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Returns true if first argument is the name of a command in the PATH.
|
||||||
|
#
|
||||||
|
# Arguments:
|
||||||
|
# Message to print.
|
||||||
|
|
||||||
|
_have () {
|
||||||
|
which "$1" &>/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Returns true if process is currently running.
|
||||||
|
#
|
||||||
|
# Arguments:
|
||||||
|
# Process ID number.
|
||||||
|
|
||||||
|
_proc () {
|
||||||
|
kill -0 "$1" 2>/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Skip through a timestamped MANIFEST file to the first matching line
|
||||||
|
# and continue to output the name/IDs of the lines beginning with that
|
||||||
|
# line until the end of the file. Will look for a file in
|
||||||
|
# current directory named MANIFEST if one is not passed as the second
|
||||||
|
# argument. The format of the file is a float that is seconds since
|
||||||
|
# epoch (potentially with nanoseconds) followed by whitespace and then
|
||||||
|
# the name/ID of a knowledge node (directory):
|
||||||
|
#
|
||||||
|
# 1591796821.3353818530 boosts/logistics
|
||||||
|
#
|
||||||
|
# Arguments:
|
||||||
|
# Exact string to match a line in the file.
|
||||||
|
# Path to the file to skip through.
|
||||||
|
|
||||||
|
_skipto () {
|
||||||
|
local there
|
||||||
|
local match="$1"
|
||||||
|
local file="${2:-MANIFEST}"
|
||||||
|
if [[ -z "${match}" ]]; then
|
||||||
|
read -r changed line <<< $(head -1 ${file})
|
||||||
|
echo ${line}
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
while read -r changed line; do
|
||||||
|
[[ "${match}" == "${line}" ]] && there=y
|
||||||
|
[[ "${there}" != y ]] && continue
|
||||||
|
echo "${line}"
|
||||||
|
done < "${file}"
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Allows the reading of all combined arguments into a string buffer that
|
||||||
|
# is then echoed, or if no arguments are detected reads fully from
|
||||||
|
# standard input until there is none left and echoes that. This is
|
||||||
|
# notable because it allows the usage of heredoc input instead of
|
||||||
|
# arguments making for much cleaner blocks of text. [Ex: declare
|
||||||
|
# id=$(_argsorin $*)]
|
||||||
|
#
|
||||||
|
# Arguments:
|
||||||
|
# All are combined into string.
|
||||||
|
|
||||||
|
_argsorin () {
|
||||||
|
local buf="$*" line IFS
|
||||||
|
if [[ -n "${buf}" ]]; then
|
||||||
|
echo "${buf}"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
read line
|
||||||
|
buf="${line}"
|
||||||
|
while IFS= read line; do
|
||||||
|
buf="${buf}\n${line}"
|
||||||
|
done
|
||||||
|
echo "${buf}"
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Create a MANIFEST file in the root of the knowledge base that contains
|
||||||
|
# the knowledge node identifiers (relative paths) and the last modified
|
||||||
|
# time in seconds since Unix epoch (first). Anything beginning with
|
||||||
|
# underscore (_) will be ignored. The MANIFEST file is the only file
|
||||||
|
# required by subscribers to identify if anything has changed in the
|
||||||
|
# knowledge base since the last time it was the subscriber cached it
|
||||||
|
# locally. The root node of the knowledge base is a single dot.
|
||||||
|
#
|
||||||
|
# Arguments:
|
||||||
|
# Path to the manifest file. MANIFEST by default.
|
||||||
|
|
||||||
|
_mkmanifest () {
|
||||||
|
declare line IFS file="${1:-MANIFEST}"
|
||||||
|
while IFS= read -r line; do
|
||||||
|
line=${line#/}
|
||||||
|
line=${line/.\//}
|
||||||
|
[[ -z "${line}" ]] && continue
|
||||||
|
echo "${line}"
|
||||||
|
done <<< $(
|
||||||
|
find . ! -path '*/_*' -a \
|
||||||
|
-name 'README.md' \
|
||||||
|
-printf "%T@ %h\n" \
|
||||||
|
| sort -d) > "${file}"
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Output the full path to the current log file for the current day (by
|
||||||
|
# default). Normal `date` command adjustments can be added as extra
|
||||||
|
# arguments as they are passed directly to `date -d`.
|
||||||
|
|
||||||
|
_logpath () {
|
||||||
|
local dir=$(_logdir "$*")
|
||||||
|
echo "${dir}/README.md"
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Output the full path to the current log dir for the current day (by
|
||||||
|
# default). Normal `date` command adjustments can be added as extra
|
||||||
|
# arguments as they are passed directly to `date -d`.
|
||||||
|
|
||||||
|
_logdir () {
|
||||||
|
local relpath=$(_datepath "$*")
|
||||||
|
echo "${KN}/log/${relpath}"
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Output the full path to the current log rec dir for the current day
|
||||||
|
# (by default). This is where video and audio recordings YAML documents
|
||||||
|
# should normally be kept (but not where the actual audio and
|
||||||
|
# video files should be saved due to size). Normal `date` command
|
||||||
|
# adjustments can be added as extra arguments as they are passed
|
||||||
|
# directly to `date -d`.
|
||||||
|
|
||||||
|
_recdir () {
|
||||||
|
local dir=$(_logdir "$*")
|
||||||
|
echo "${dir}/rec"
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Outputs the full path to the root log directory for the current
|
||||||
|
# knowledge node.
|
||||||
|
|
||||||
|
_logroot () {
|
||||||
|
echo "${KN}/log"
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Output the current date as a path for use when creating content within
|
||||||
|
# a directory file structure that models chronological data. Accepts
|
||||||
|
# anything that can be passed to `date -d`.
|
||||||
|
|
||||||
|
_datepath () {
|
||||||
|
date +%4Y/%m/%d "-d $@"
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Call the pandoc command to render a single node passed as the
|
||||||
|
# first and only argument. The HTML index.html output is created in the
|
||||||
|
# same knowledge node subdirectory. A single dot (.) can be passed to
|
||||||
|
# render the root node of the knowledge base.
|
||||||
|
#
|
||||||
|
# Globals:
|
||||||
|
# README
|
||||||
|
# RED
|
||||||
|
# CYAN
|
||||||
|
# RESET
|
||||||
|
# Arguments:
|
||||||
|
# Node ID
|
||||||
|
# Outputs:
|
||||||
|
# Prints colored error output from Pandoc
|
||||||
|
#
|
||||||
|
# TODO allow more pandoc arguments to be passed from configuration
|
||||||
|
|
||||||
|
_render () {
|
||||||
|
local error style
|
||||||
|
local node="${1%/README.md}"
|
||||||
|
local template='--template=main'
|
||||||
|
local in="${node}/README.md"
|
||||||
|
local hi='--no-highlight'
|
||||||
|
local out="--output=${node}/index.html"
|
||||||
|
local ddir="${README}/assets"
|
||||||
|
[[ ! -e "${in}" ]] && _fail "Could not find ${CYAN} '${in}'"
|
||||||
|
[[ -e "${README}/global.yml" ]] && gdata="global.yml"
|
||||||
|
[[ -e "${node}/styles.css" ]] && style="--metadata=xstyles:styles.css"
|
||||||
|
[[ -e "${node}/template.html" ]] && template="--template=${node}/template.html"
|
||||||
|
error=$(pandoc -s -M title=_ ${nosyn} --data-dir=${ddir} ${hi} ${out} \
|
||||||
|
${template} ${style} ${gdata} ${in} 2>&1)
|
||||||
|
[[ -n "${error}" ]] && echo ${CYAN}${node}:${RED} ${error}${RESET} >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Makes the manifest again and renders all the nodes of the knowledge
|
||||||
|
# base asyncronously. No effort is made to stagger the rendering of nodes
|
||||||
|
# into any sort of workgroup since rendering a single node is very fast
|
||||||
|
# and most operating systems can easily handle concurrent rendering of
|
||||||
|
# every existing node.
|
||||||
|
#
|
||||||
|
# Globals:
|
||||||
|
# GREY
|
||||||
|
# RESET
|
||||||
|
# Arguments:
|
||||||
|
# None
|
||||||
|
# Outputs:
|
||||||
|
# Prints colored summary of number of nodes rendered and speed.
|
||||||
|
|
||||||
|
_build () {
|
||||||
|
local begin end
|
||||||
|
local -a pids
|
||||||
|
local -i count
|
||||||
|
begin=$(date +%s)
|
||||||
|
_mkmanifest
|
||||||
|
_render '.'
|
||||||
|
while read -r change node; do
|
||||||
|
_render "${node}" &
|
||||||
|
count+=1
|
||||||
|
done < ./MANIFEST
|
||||||
|
wait
|
||||||
|
end=$(date +%s)
|
||||||
|
_rss
|
||||||
|
echo "${GRAY}Rendered ${count} nodes in $((end-begin)) seconds.${RESET}"
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Checks a single node for broken links and such. Depends on `muffet`
|
||||||
|
# being installed.
|
||||||
|
#
|
||||||
|
# Globals:
|
||||||
|
# GREEN
|
||||||
|
# RESET
|
||||||
|
# Arguments:
|
||||||
|
# Node name/ID
|
||||||
|
# Outputs:
|
||||||
|
# Prints colored 'No broken URLs detected.' if passing
|
||||||
|
# Prints any error output from muffet if failing
|
||||||
|
# TODO:
|
||||||
|
# Read target node as second argument or from config
|
||||||
|
|
||||||
|
_checkone () {
|
||||||
|
_have muffet || _fail 'Install https://github.com/raviqqe/muffet'
|
||||||
|
[[ -e .previewpid ]] || _fail "Doesn't look like preview is running (no .previewpid)."
|
||||||
|
declare node="http://localhost:3001/$1"
|
||||||
|
muffet \
|
||||||
|
--one-page-only "${node}" \
|
||||||
|
--exclude 'https://duck.com' \
|
||||||
|
--exclude 'https://duckduckgo.com' \
|
||||||
|
--exclude 'https://www.lifewire' \
|
||||||
|
--exclude 'http://linuxcommand' \
|
||||||
|
--exclude 'https://vimgenius.com'
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
echo " ${GREEN}No Broken URLs detected.${RESET}"
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Slowly checks one node at a time from the MANIFEST keeping track of
|
||||||
|
# each as it goes. This is useful for interactively correcting
|
||||||
|
# potentially dozens of broken links. To reset to the beginning simple
|
||||||
|
# remove the .lastchecked file.
|
||||||
|
#
|
||||||
|
# Globals:
|
||||||
|
# GREY
|
||||||
|
# RESET
|
||||||
|
# Arguments:
|
||||||
|
# None
|
||||||
|
# Outputs:
|
||||||
|
# Prints 'Checking <node>' and the output of checknode for each
|
||||||
|
|
||||||
|
_audit () {
|
||||||
|
# see _checkone for dependency validations
|
||||||
|
local last node
|
||||||
|
if [[ ! -e .lastchecked ]]; then
|
||||||
|
local line=$(head -1 MANIFEST)
|
||||||
|
node=${line#* }
|
||||||
|
echo $node > .lastchecked
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
read -r last < .lastchecked
|
||||||
|
while read -r node; do
|
||||||
|
echo "${GREY}Checking ${node}${RESET}"
|
||||||
|
_checkone "${node}"
|
||||||
|
local rval=$?
|
||||||
|
echo "${node}" >| .lastchecked
|
||||||
|
if [[ ${rval} != 0 ]]; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
done <<< $(_skipto "${last}")
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Runs the amazing browser-sync live site previewing utility
|
||||||
|
# putting it into the background and writing the PID to .previewpid.
|
||||||
|
# The preview can later be disabled with previewstop. Preview has to
|
||||||
|
# be running for the check* COMMANDS to work.
|
||||||
|
#
|
||||||
|
# Globals:
|
||||||
|
# GREY
|
||||||
|
# GREEN
|
||||||
|
# CYAN
|
||||||
|
# RESET
|
||||||
|
# Arguments:
|
||||||
|
# None
|
||||||
|
# Outputs:
|
||||||
|
# Error output if not browser-sync
|
||||||
|
# Returns:
|
||||||
|
# Fails if no browser-sync detected on the system
|
||||||
|
# Success if browser-sync started
|
||||||
|
|
||||||
|
_preview () {
|
||||||
|
_have browser-sync || _fail 'Need to install browser-sync.'
|
||||||
|
declare pid=$(head -1 .previewpid 2>/dev/null)
|
||||||
|
if [[ -n "${pid}" ]]; then
|
||||||
|
if _proc "${pid}"; then
|
||||||
|
_fail "Already previewing."
|
||||||
|
else
|
||||||
|
rm .previewid 2>/dev/null
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
browser-sync start \
|
||||||
|
--no-notify --no-ui \
|
||||||
|
--ignore '**/.*' \
|
||||||
|
-sw &>/dev/null &
|
||||||
|
pid=$!
|
||||||
|
echo "${pid}" >| .previewpid
|
||||||
|
echo "${GREEN}Previewing with ${CYAN}browser-sync ${GREY}(${pid})${RESET}"
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Stops the pid contained .previewpid if found.
|
||||||
|
#
|
||||||
|
# Globals:
|
||||||
|
# GREY
|
||||||
|
# GREEN
|
||||||
|
# RESET
|
||||||
|
# Arguments:
|
||||||
|
# None
|
||||||
|
# Outputs:
|
||||||
|
# Error messages on failure
|
||||||
|
# "Previewing stopped ..." on success
|
||||||
|
# Returns:
|
||||||
|
# Failure (1) if nothing being previewed
|
||||||
|
# Success (0) if preview running and stopped.
|
||||||
|
|
||||||
|
_previewstop () {
|
||||||
|
declare pid=$(head -1 .previewpid 2>/dev/null)
|
||||||
|
[[ -z "${pid}" ]] && _fail "Don't appear to be previewing (no preview PID found)."
|
||||||
|
kill "${pid}" && rm .previewpid
|
||||||
|
echo "${GREEN}Previewing stopped ${GREY}(killed ${pid} and removed .previewpid)${RESET}"
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Searches the MANIFEST for a matching substring passed as the first and
|
||||||
|
# only parameter and prints the resulting full node identifiers with the
|
||||||
|
# substring highlighted in green. Also searches the _redirects list
|
||||||
|
# for possible shortcuts and other former identifiers
|
||||||
|
#
|
||||||
|
# Globals:
|
||||||
|
# GREY
|
||||||
|
# GREEN
|
||||||
|
# RESET
|
||||||
|
# Arguments:
|
||||||
|
# Substring to look for.
|
||||||
|
# Outputs:
|
||||||
|
# Prints the node names/IDs of matches.
|
||||||
|
# Prints errors if nothing to find.
|
||||||
|
# Returns:
|
||||||
|
# Failure (1) if nothing to find.
|
||||||
|
# Success (0) if either something found or not found.
|
||||||
|
# TODO:
|
||||||
|
# Replace with other find that matches based on header and tag
|
||||||
|
# hits with priority and puts the top 20 in a select list
|
||||||
|
|
||||||
|
_find () {
|
||||||
|
declare substr="$1"
|
||||||
|
[[ -z "$1" ]] && _fail 'Nothing to find.'
|
||||||
|
while read -r changed name; do
|
||||||
|
[[ -z "${name}" ]] && continue
|
||||||
|
echo "${GREY}$(_url)/${name%%${substr}*}${GREEN}${substr}${GREY}${name##*${substr}}"
|
||||||
|
done <<< $(grep "${substr}" MANIFEST)
|
||||||
|
while read -r redirect; do
|
||||||
|
[[ -z "${name}" ]] && continue
|
||||||
|
echo "${GREY}$(_url)/${redirect%%${substr}*}${GREEN}${substr}${GREY}${redirect##*${substr}}"
|
||||||
|
done <<< $(grep "${substr}" _redirects)
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Returns the URL YAML field from the main README.md file.
|
||||||
|
|
||||||
|
_url () {
|
||||||
|
local line=$(grep ^URL: README.md)
|
||||||
|
echo ${line#URL:}
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Returns the Short YAML field from the main README.md file.
|
||||||
|
|
||||||
|
_short () {
|
||||||
|
local line=$(grep ^Short: README.md)
|
||||||
|
echo ${line#Short:}
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Returns the Description YAML field from the main README.md file.
|
||||||
|
|
||||||
|
_description () {
|
||||||
|
local line=$(grep ^Description: README.md)
|
||||||
|
echo ${line#Description:}
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Returns the copyright YAML field from the main README.md file.
|
||||||
|
|
||||||
|
_copyright () {
|
||||||
|
local line=$(grep ^Copyright: README.md)
|
||||||
|
echo ${line#Copyright:}
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Parses out the Title from the specified node and prints it.
|
||||||
|
#
|
||||||
|
# Globals:
|
||||||
|
# GREEN
|
||||||
|
# RESET
|
||||||
|
# Arguments:
|
||||||
|
# Node name/ID
|
||||||
|
# Outputs:
|
||||||
|
# Prints the title of the given node in color.
|
||||||
|
|
||||||
|
_title () {
|
||||||
|
declare -a nodes
|
||||||
|
if [[ -n "$1" ]]; then
|
||||||
|
nodes="$@"
|
||||||
|
else
|
||||||
|
while IFS= read -r line; do
|
||||||
|
nodes+=(${line})
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
for node in ${nodes[@]}; do
|
||||||
|
while read -r line; do
|
||||||
|
if [[ "$line" =~ ^Title:\ ]]; then
|
||||||
|
echo "${GREEN}${line:7}${RESET}"
|
||||||
|
fi
|
||||||
|
done < "${node}/README.md" 2>/dev/null
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Creates an RSS feed if the node is a log.
|
||||||
|
|
||||||
|
_rss () {
|
||||||
|
declare dir=${1:-.}
|
||||||
|
declare file="${dir}"/README.md
|
||||||
|
egrep '^## +(Mon|Tue|Wed|Thu|Fri|Sat|Sun)' "${file}" &>/dev/null
|
||||||
|
if [[ $? == 0 ]]; then
|
||||||
|
|
||||||
|
# TODO make all of this only add if detected
|
||||||
|
echo '<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||||
|
<channel>
|
||||||
|
<atom:link href="'$(_url)'/rss.xml" rel="self" type="application/rss+xml" />
|
||||||
|
<title>'$(_short)'</title>
|
||||||
|
<link>'$(_url)'</link>
|
||||||
|
<description>'$(_description)'</description>
|
||||||
|
<copyright>'$(_copyright)'</copyright>' > "${dir}"/rss.xml
|
||||||
|
|
||||||
|
declare -i item=0
|
||||||
|
buf=""
|
||||||
|
while read line; do
|
||||||
|
if [[ "${line}" =~ ^##\ +(Mon|Tue|Wed|Thu|Fri|Sat|Sun) ]]; then
|
||||||
|
if [[ $item > 0 ]]; then
|
||||||
|
echo "${buf}" |perl -pe 's,\[(.+)\](.*),\1,;s,(<|>),,g;s,&,&,g' >> "${dir}"/rss.xml
|
||||||
|
echo '</description></item>' >> "${dir}"/rss.xml
|
||||||
|
buf=""
|
||||||
|
fi
|
||||||
|
item=$((item+1))
|
||||||
|
echo '<item>' >> "${dir}"/rss.xml
|
||||||
|
#guid=${line#\#\# *}
|
||||||
|
#guid=${guid// }
|
||||||
|
#TODO user relative link creator for URI
|
||||||
|
echo '<title>'${line#\#\# *}'</title>' >> "${dir}"/rss.xml
|
||||||
|
#echo '<guid>'$guid'</guid>' >> "${dir}"/rss.xml
|
||||||
|
echo '<description>' >> "${dir}"/rss.xml
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
if [[ "${line}" == "" ]]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
buf="$buf $line"
|
||||||
|
done < <(egrep '^## +(Mon|Tue|Wed|Thu|Fri|Sat|Sun)' -A 5 "${file}")
|
||||||
|
|
||||||
|
echo "${buf}" |perl -pe 's,\[(.+)\](.*),\1,;s,(<|>),,g;s,&,&,g' >> "${dir}"/rss.xml
|
||||||
|
echo '</description></item>' >> "${dir}"/rss.xml
|
||||||
|
echo '</channel></rss>' >> "${dir}"/rss.xml
|
||||||
|
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo ${RED}Not a log file.${RESET}
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Prints each of the command names and exits.
|
||||||
|
|
||||||
|
_usage () {
|
||||||
|
echo "${GREY}usage: ${GOLD}kn ${CYAN}<cmd>${RESET}"
|
||||||
|
for i in ${COMMANDS[@]}; do echo " ${CYAN}$i"; done
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Checks if command is being used in tab completion context (`complete -C
|
||||||
|
# kn kn` and COMP_LINE set). If so handle completion and exit.
|
||||||
|
# Otherwise, assume execution context. Detect the README working
|
||||||
|
# directory since more than one README knowledge base may exist on
|
||||||
|
# a single system. Look for full COMMAND matches for the first argument.
|
||||||
|
# Then accept the first matching substring as the command to use. Then
|
||||||
|
# delegate.
|
||||||
|
|
||||||
|
main () {
|
||||||
|
local c cmd="${1-usage}"
|
||||||
|
shift 2>/dev/null
|
||||||
|
|
||||||
|
# knowledge base detection
|
||||||
|
#[[ -d .git && -e README.md ]] && export README="${PWD}"
|
||||||
|
[[ -e README.md ]] && export README="${PWD}"
|
||||||
|
[[ -z "${README}" ]] && _fail "Need to set README environment variable"
|
||||||
|
cd "${README}" || _fail "Could not change into README directory: ${README}"
|
||||||
|
|
||||||
|
# tab completion
|
||||||
|
if [[ -n "$COMP_LINE" ]]; then
|
||||||
|
for c in ${COMMANDS[@]}; do
|
||||||
|
[[ "${c:0:${#1}}" == "$1" ]] && echo "${c}"
|
||||||
|
done
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# full command match
|
||||||
|
for c in ${COMMANDS[@]}; do
|
||||||
|
if [[ "${c}" == "${cmd}" ]]; then
|
||||||
|
"_${c}" "$@"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# partial command match
|
||||||
|
for c in ${COMMANDS[@]}; do
|
||||||
|
if [[ "${c}" =~ ^${cmd} ]]; then
|
||||||
|
"_${c}" "$@"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# NORUN allows this file to be sourced while checking for syntax errors
|
||||||
|
# and unit testing specific functions.
|
||||||
|
|
||||||
|
[[ -z "${NORUN}" ]] && main "$@"
|
@ -0,0 +1,42 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
declare subcommand="$1"; shift
|
||||||
|
declare -r gold=$'\033[38;2;250;130;10m'
|
||||||
|
declare -r cyan=$'\033[38;2;0;255;255m'
|
||||||
|
declare -r reset=$'\033[0m'
|
||||||
|
|
||||||
|
ziplink () {
|
||||||
|
if [[ -z "$1" ]]; then
|
||||||
|
echo "usage: gh ziplink <account>/<repo>"
|
||||||
|
fi
|
||||||
|
curl -s "https://api.github.com/repos/$1/releases/latest" |jq -r .zipball_url
|
||||||
|
}
|
||||||
|
|
||||||
|
zipball () {
|
||||||
|
if [[ -z "$1" ]]; then
|
||||||
|
echo "usage: gh zipball <account>/<repo>"
|
||||||
|
fi
|
||||||
|
declare link=$(ziplink "$1")
|
||||||
|
declare file=${1##*/}.${link##*/}.zip
|
||||||
|
echo "${gold}Downloading ${cyan}$link$reset -> ${cyan}$file$reset"
|
||||||
|
curl -s -L "$link" -o "$file"
|
||||||
|
}
|
||||||
|
|
||||||
|
declare -a commands=(ziplink zipball)
|
||||||
|
|
||||||
|
for i in ${commands[@]}; do
|
||||||
|
if [[ $i == "$subcommand" ]]; then
|
||||||
|
"$subcommand" $*
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
######################### Tab Completion Context ########################
|
||||||
|
|
||||||
|
# remember COMP_LINE is changed by shift
|
||||||
|
if [ -n "$COMP_LINE" ]; then
|
||||||
|
for cmd in ${commands[@]}; do
|
||||||
|
[[ "${cmd:0:${#1}}" == "$1" ]] && echo $cmd
|
||||||
|
done
|
||||||
|
exit 0
|
||||||
|
fi
|
@ -0,0 +1,633 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# README.World Knowledge Management Utility
|
||||||
|
#
|
||||||
|
# Please maintain the style as described in Google's Shell Style Guide
|
||||||
|
# <https://google.github.io/styleguide/shellguide.html>
|
||||||
|
#
|
||||||
|
# Copyright © 2020 Robert Sterling Muhlestein.
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, version 2.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful, but
|
||||||
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
# General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Assumes modern terminal with RGB.
|
||||||
|
|
||||||
|
declare NOCOLOR=
|
||||||
|
[[ -t 1 ]] || NOCOLOR=y
|
||||||
|
declare GOLD=$'\033[38;2;184;138;0m'
|
||||||
|
declare RED=$'\033[38;2;255;0;0m'
|
||||||
|
declare GREY=$'\033[38;2;100;100;100m'
|
||||||
|
declare CYAN=$'\033[38;2;0;255;255m'
|
||||||
|
declare GREEN=$'\033[38;2;0;255;0m'
|
||||||
|
declare RESET=$'\033[0m'
|
||||||
|
|
||||||
|
if [[ -n "$NOCOLOR" ]] ; then
|
||||||
|
GOLD=
|
||||||
|
RED=
|
||||||
|
GREY=
|
||||||
|
CYAN=
|
||||||
|
GREEN=
|
||||||
|
RESET=
|
||||||
|
fi
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Validate that a current knowledge node has been declared as KN
|
||||||
|
# environment variable.
|
||||||
|
|
||||||
|
if [[ -z "${KN}" ]]; then
|
||||||
|
echo "${RED}Please set \$KN to current knowledge node path."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Each command must have an accompanying function that begins with an
|
||||||
|
# underscore to which the main command will delgate.
|
||||||
|
|
||||||
|
readonly -a COMMANDS=(
|
||||||
|
usage render build preview previewstop mkmanifest checkone audit find
|
||||||
|
title rss logdir logpath datepath logroot recdir
|
||||||
|
)
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Print the first argument as a colored message and exit with
|
||||||
|
# error status.
|
||||||
|
#
|
||||||
|
# Globals:
|
||||||
|
# RED
|
||||||
|
# Arguments:
|
||||||
|
# Message to print
|
||||||
|
# Outputs:
|
||||||
|
# Red message text
|
||||||
|
# Returns:
|
||||||
|
# Always returns 1
|
||||||
|
|
||||||
|
_fail () {
|
||||||
|
echo "${RED}$1${RESET}" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Returns true if first argument is the name of a command in the PATH.
|
||||||
|
#
|
||||||
|
# Arguments:
|
||||||
|
# Message to print.
|
||||||
|
|
||||||
|
_have () {
|
||||||
|
which "$1" &>/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Returns true if process is currently running.
|
||||||
|
#
|
||||||
|
# Arguments:
|
||||||
|
# Process ID number.
|
||||||
|
|
||||||
|
_proc () {
|
||||||
|
kill -0 "$1" 2>/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Skip through a timestamped MANIFEST file to the first matching line
|
||||||
|
# and continue to output the name/IDs of the lines beginning with that
|
||||||
|
# line until the end of the file. Will look for a file in
|
||||||
|
# current directory named MANIFEST if one is not passed as the second
|
||||||
|
# argument. The format of the file is a float that is seconds since
|
||||||
|
# epoch (potentially with nanoseconds) followed by whitespace and then
|
||||||
|
# the name/ID of a knowledge node (directory):
|
||||||
|
#
|
||||||
|
# 1591796821.3353818530 boosts/logistics
|
||||||
|
#
|
||||||
|
# Arguments:
|
||||||
|
# Exact string to match a line in the file.
|
||||||
|
# Path to the file to skip through.
|
||||||
|
|
||||||
|
_skipto () {
|
||||||
|
local there
|
||||||
|
local match="$1"
|
||||||
|
local file="${2:-MANIFEST}"
|
||||||
|
if [[ -z "${match}" ]]; then
|
||||||
|
read -r changed line <<< $(head -1 ${file})
|
||||||
|
echo ${line}
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
while read -r changed line; do
|
||||||
|
[[ "${match}" == "${line}" ]] && there=y
|
||||||
|
[[ "${there}" != y ]] && continue
|
||||||
|
echo "${line}"
|
||||||
|
done < "${file}"
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Allows the reading of all combined arguments into a string buffer that
|
||||||
|
# is then echoed, or if no arguments are detected reads fully from
|
||||||
|
# standard input until there is none left and echoes that. This is
|
||||||
|
# notable because it allows the usage of heredoc input instead of
|
||||||
|
# arguments making for much cleaner blocks of text. [Ex: declare
|
||||||
|
# id=$(_argsorin $*)]
|
||||||
|
#
|
||||||
|
# Arguments:
|
||||||
|
# All are combined into string.
|
||||||
|
|
||||||
|
_argsorin () {
|
||||||
|
local buf="$*" line IFS
|
||||||
|
if [[ -n "${buf}" ]]; then
|
||||||
|
echo "${buf}"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
read line
|
||||||
|
buf="${line}"
|
||||||
|
while IFS= read line; do
|
||||||
|
buf="${buf}\n${line}"
|
||||||
|
done
|
||||||
|
echo "${buf}"
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Create a MANIFEST file in the root of the knowledge base that contains
|
||||||
|
# the knowledge node identifiers (relative paths) and the last modified
|
||||||
|
# time in seconds since Unix epoch (first). Anything beginning with
|
||||||
|
# underscore (_) will be ignored. The MANIFEST file is the only file
|
||||||
|
# required by subscribers to identify if anything has changed in the
|
||||||
|
# knowledge base since the last time it was the subscriber cached it
|
||||||
|
# locally. The root node of the knowledge base is a single dot.
|
||||||
|
#
|
||||||
|
# Arguments:
|
||||||
|
# Path to the manifest file. MANIFEST by default.
|
||||||
|
|
||||||
|
_mkmanifest () {
|
||||||
|
declare line IFS file="${1:-MANIFEST}"
|
||||||
|
while IFS= read -r line; do
|
||||||
|
line=${line#/}
|
||||||
|
line=${line/.\//}
|
||||||
|
[[ -z "${line}" ]] && continue
|
||||||
|
echo "${line}"
|
||||||
|
done <<< $(
|
||||||
|
find . ! -path '*/_*' -a \
|
||||||
|
-name 'README.md' \
|
||||||
|
-printf "%T@ %h\n" \
|
||||||
|
| sort -d) > "${file}"
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Output the full path to the current log file for the current day (by
|
||||||
|
# default). Normal `date` command adjustments can be added as extra
|
||||||
|
# arguments as they are passed directly to `date -d`.
|
||||||
|
|
||||||
|
_logpath () {
|
||||||
|
local dir=$(_logdir "$*")
|
||||||
|
echo "${dir}/README.md"
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Output the full path to the current log dir for the current day (by
|
||||||
|
# default). Normal `date` command adjustments can be added as extra
|
||||||
|
# arguments as they are passed directly to `date -d`.
|
||||||
|
|
||||||
|
_logdir () {
|
||||||
|
local relpath=$(_datepath "$*")
|
||||||
|
echo "${KN}/log/${relpath}"
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Output the full path to the current log rec dir for the current day
|
||||||
|
# (by default). This is where video and audio recordings YAML documents
|
||||||
|
# should normally be kept (but not where the actual audio and
|
||||||
|
# video files should be saved due to size). Normal `date` command
|
||||||
|
# adjustments can be added as extra arguments as they are passed
|
||||||
|
# directly to `date -d`.
|
||||||
|
|
||||||
|
_recdir () {
|
||||||
|
local dir=$(_logdir "$*")
|
||||||
|
echo "${dir}/rec"
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Outputs the full path to the root log directory for the current
|
||||||
|
# knowledge node.
|
||||||
|
|
||||||
|
_logroot () {
|
||||||
|
echo "${KN}/log"
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Output the current date as a path for use when creating content within
|
||||||
|
# a directory file structure that models chronological data. Accepts
|
||||||
|
# anything that can be passed to `date -d`.
|
||||||
|
|
||||||
|
_datepath () {
|
||||||
|
date +%4Y/%m/%d "-d $@"
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Call the pandoc command to render a single node passed as the
|
||||||
|
# first and only argument. The HTML index.html output is created in the
|
||||||
|
# same knowledge node subdirectory. A single dot (.) can be passed to
|
||||||
|
# render the root node of the knowledge base.
|
||||||
|
#
|
||||||
|
# Globals:
|
||||||
|
# README
|
||||||
|
# RED
|
||||||
|
# CYAN
|
||||||
|
# RESET
|
||||||
|
# Arguments:
|
||||||
|
# Node ID
|
||||||
|
# Outputs:
|
||||||
|
# Prints colored error output from Pandoc
|
||||||
|
#
|
||||||
|
# TODO allow more pandoc arguments to be passed from configuration
|
||||||
|
|
||||||
|
_render () {
|
||||||
|
local error style
|
||||||
|
local node="${1%/README.md}"
|
||||||
|
local template='--template=main'
|
||||||
|
local in="${node}/README.md"
|
||||||
|
local hi='--no-highlight'
|
||||||
|
local out="--output=${node}/index.html"
|
||||||
|
local ddir="${README}/assets"
|
||||||
|
[[ ! -e "${in}" ]] && _fail "Could not find ${CYAN} '${in}'"
|
||||||
|
[[ -e "${README}/global.yml" ]] && gdata="global.yml"
|
||||||
|
[[ -e "${node}/styles.css" ]] && style="--metadata=xstyles:styles.css"
|
||||||
|
[[ -e "${node}/template.html" ]] && template="--template=${node}/template.html"
|
||||||
|
error=$(pandoc -s -M title=_ ${nosyn} --data-dir=${ddir} ${hi} ${out} \
|
||||||
|
${template} ${style} ${gdata} ${in} 2>&1)
|
||||||
|
[[ -n "${error}" ]] && echo ${CYAN}${node}:${RED} ${error}${RESET} >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Makes the manifest again and renders all the nodes of the knowledge
|
||||||
|
# base asyncronously. No effort is made to stagger the rendering of nodes
|
||||||
|
# into any sort of workgroup since rendering a single node is very fast
|
||||||
|
# and most operating systems can easily handle concurrent rendering of
|
||||||
|
# every existing node.
|
||||||
|
#
|
||||||
|
# Globals:
|
||||||
|
# GREY
|
||||||
|
# RESET
|
||||||
|
# Arguments:
|
||||||
|
# None
|
||||||
|
# Outputs:
|
||||||
|
# Prints colored summary of number of nodes rendered and speed.
|
||||||
|
|
||||||
|
_build () {
|
||||||
|
local begin end
|
||||||
|
local -a pids
|
||||||
|
local -i count
|
||||||
|
begin=$(date +%s)
|
||||||
|
_mkmanifest
|
||||||
|
_render '.'
|
||||||
|
while read -r change node; do
|
||||||
|
_render "${node}" &
|
||||||
|
count+=1
|
||||||
|
done < ./MANIFEST
|
||||||
|
wait
|
||||||
|
end=$(date +%s)
|
||||||
|
_rss
|
||||||
|
echo "${GRAY}Rendered ${count} nodes in $((end-begin)) seconds.${RESET}"
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Checks a single node for broken links and such. Depends on `muffet`
|
||||||
|
# being installed.
|
||||||
|
#
|
||||||
|
# Globals:
|
||||||
|
# GREEN
|
||||||
|
# RESET
|
||||||
|
# Arguments:
|
||||||
|
# Node name/ID
|
||||||
|
# Outputs:
|
||||||
|
# Prints colored 'No broken URLs detected.' if passing
|
||||||
|
# Prints any error output from muffet if failing
|
||||||
|
# TODO:
|
||||||
|
# Read target node as second argument or from config
|
||||||
|
|
||||||
|
_checkone () {
|
||||||
|
_have muffet || _fail 'Install https://github.com/raviqqe/muffet'
|
||||||
|
[[ -e .previewpid ]] || _fail "Doesn't look like preview is running (no .previewpid)."
|
||||||
|
declare node="http://localhost:3001/$1"
|
||||||
|
muffet \
|
||||||
|
--one-page-only "${node}" \
|
||||||
|
--exclude 'https://duck.com' \
|
||||||
|
--exclude 'https://duckduckgo.com' \
|
||||||
|
--exclude 'https://www.lifewire' \
|
||||||
|
--exclude 'http://linuxcommand' \
|
||||||
|
--exclude 'https://vimgenius.com'
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
echo " ${GREEN}No Broken URLs detected.${RESET}"
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Slowly checks one node at a time from the MANIFEST keeping track of
|
||||||
|
# each as it goes. This is useful for interactively correcting
|
||||||
|
# potentially dozens of broken links. To reset to the beginning simple
|
||||||
|
# remove the .lastchecked file.
|
||||||
|
#
|
||||||
|
# Globals:
|
||||||
|
# GREY
|
||||||
|
# RESET
|
||||||
|
# Arguments:
|
||||||
|
# None
|
||||||
|
# Outputs:
|
||||||
|
# Prints 'Checking <node>' and the output of checknode for each
|
||||||
|
|
||||||
|
_audit () {
|
||||||
|
# see _checkone for dependency validations
|
||||||
|
local last node
|
||||||
|
if [[ ! -e .lastchecked ]]; then
|
||||||
|
local line=$(head -1 MANIFEST)
|
||||||
|
node=${line#* }
|
||||||
|
echo $node > .lastchecked
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
read -r last < .lastchecked
|
||||||
|
while read -r node; do
|
||||||
|
echo "${GREY}Checking ${node}${RESET}"
|
||||||
|
_checkone "${node}"
|
||||||
|
local rval=$?
|
||||||
|
echo "${node}" >| .lastchecked
|
||||||
|
if [[ ${rval} != 0 ]]; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
done <<< $(_skipto "${last}")
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Runs the amazing browser-sync live site previewing utility
|
||||||
|
# putting it into the background and writing the PID to .previewpid.
|
||||||
|
# The preview can later be disabled with previewstop. Preview has to
|
||||||
|
# be running for the check* COMMANDS to work.
|
||||||
|
#
|
||||||
|
# Globals:
|
||||||
|
# GREY
|
||||||
|
# GREEN
|
||||||
|
# CYAN
|
||||||
|
# RESET
|
||||||
|
# Arguments:
|
||||||
|
# None
|
||||||
|
# Outputs:
|
||||||
|
# Error output if not browser-sync
|
||||||
|
# Returns:
|
||||||
|
# Fails if no browser-sync detected on the system
|
||||||
|
# Success if browser-sync started
|
||||||
|
|
||||||
|
_preview () {
|
||||||
|
_have browser-sync || _fail 'Need to install browser-sync.'
|
||||||
|
declare pid=$(head -1 .previewpid 2>/dev/null)
|
||||||
|
if [[ -n "${pid}" ]]; then
|
||||||
|
if _proc "${pid}"; then
|
||||||
|
_fail "Already previewing."
|
||||||
|
else
|
||||||
|
rm .previewid 2>/dev/null
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
browser-sync start \
|
||||||
|
--no-notify --no-ui \
|
||||||
|
--ignore '**/.*' \
|
||||||
|
-sw &>/dev/null &
|
||||||
|
pid=$!
|
||||||
|
echo "${pid}" >| .previewpid
|
||||||
|
echo "${GREEN}Previewing with ${CYAN}browser-sync ${GREY}(${pid})${RESET}"
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Stops the pid contained .previewpid if found.
|
||||||
|
#
|
||||||
|
# Globals:
|
||||||
|
# GREY
|
||||||
|
# GREEN
|
||||||
|
# RESET
|
||||||
|
# Arguments:
|
||||||
|
# None
|
||||||
|
# Outputs:
|
||||||
|
# Error messages on failure
|
||||||
|
# "Previewing stopped ..." on success
|
||||||
|
# Returns:
|
||||||
|
# Failure (1) if nothing being previewed
|
||||||
|
# Success (0) if preview running and stopped.
|
||||||
|
|
||||||
|
_previewstop () {
|
||||||
|
declare pid=$(head -1 .previewpid 2>/dev/null)
|
||||||
|
[[ -z "${pid}" ]] && _fail "Don't appear to be previewing (no preview PID found)."
|
||||||
|
kill "${pid}" && rm .previewpid
|
||||||
|
echo "${GREEN}Previewing stopped ${GREY}(killed ${pid} and removed .previewpid)${RESET}"
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Searches the MANIFEST for a matching substring passed as the first and
|
||||||
|
# only parameter and prints the resulting full node identifiers with the
|
||||||
|
# substring highlighted in green. Also searches the _redirects list
|
||||||
|
# for possible shortcuts and other former identifiers
|
||||||
|
#
|
||||||
|
# Globals:
|
||||||
|
# GREY
|
||||||
|
# GREEN
|
||||||
|
# RESET
|
||||||
|
# Arguments:
|
||||||
|
# Substring to look for.
|
||||||
|
# Outputs:
|
||||||
|
# Prints the node names/IDs of matches.
|
||||||
|
# Prints errors if nothing to find.
|
||||||
|
# Returns:
|
||||||
|
# Failure (1) if nothing to find.
|
||||||
|
# Success (0) if either something found or not found.
|
||||||
|
# TODO:
|
||||||
|
# Replace with other find that matches based on header and tag
|
||||||
|
# hits with priority and puts the top 20 in a select list
|
||||||
|
|
||||||
|
_find () {
|
||||||
|
declare substr="$1"
|
||||||
|
[[ -z "$1" ]] && _fail 'Nothing to find.'
|
||||||
|
while read -r changed name; do
|
||||||
|
[[ -z "${name}" ]] && continue
|
||||||
|
echo "${GREY}$(_url)/${name%%${substr}*}${GREEN}${substr}${GREY}${name##*${substr}}"
|
||||||
|
done <<< $(grep "${substr}" MANIFEST)
|
||||||
|
while read -r redirect; do
|
||||||
|
[[ -z "${name}" ]] && continue
|
||||||
|
echo "${GREY}$(_url)/${redirect%%${substr}*}${GREEN}${substr}${GREY}${redirect##*${substr}}"
|
||||||
|
done <<< $(grep "${substr}" _redirects)
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Returns the URL YAML field from the main README.md file.
|
||||||
|
|
||||||
|
_url () {
|
||||||
|
local line=$(grep ^URL: README.md)
|
||||||
|
echo ${line#URL:}
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Returns the Short YAML field from the main README.md file.
|
||||||
|
|
||||||
|
_short () {
|
||||||
|
local line=$(grep ^Short: README.md)
|
||||||
|
echo ${line#Short:}
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Returns the Description YAML field from the main README.md file.
|
||||||
|
|
||||||
|
_description () {
|
||||||
|
local line=$(grep ^Description: README.md)
|
||||||
|
echo ${line#Description:}
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Returns the copyright YAML field from the main README.md file.
|
||||||
|
|
||||||
|
_copyright () {
|
||||||
|
local line=$(grep ^Copyright: README.md)
|
||||||
|
echo ${line#Copyright:}
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Parses out the Title from the specified node and prints it.
|
||||||
|
#
|
||||||
|
# Globals:
|
||||||
|
# GREEN
|
||||||
|
# RESET
|
||||||
|
# Arguments:
|
||||||
|
# Node name/ID
|
||||||
|
# Outputs:
|
||||||
|
# Prints the title of the given node in color.
|
||||||
|
|
||||||
|
_title () {
|
||||||
|
declare -a nodes
|
||||||
|
if [[ -n "$1" ]]; then
|
||||||
|
nodes="$@"
|
||||||
|
else
|
||||||
|
while IFS= read -r line; do
|
||||||
|
nodes+=(${line})
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
for node in ${nodes[@]}; do
|
||||||
|
while read -r line; do
|
||||||
|
if [[ "$line" =~ ^Title:\ ]]; then
|
||||||
|
echo "${GREEN}${line:7}${RESET}"
|
||||||
|
fi
|
||||||
|
done < "${node}/README.md" 2>/dev/null
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Creates an RSS feed if the node is a log.
|
||||||
|
|
||||||
|
_rss () {
|
||||||
|
declare dir=${1:-.}
|
||||||
|
declare file="${dir}"/README.md
|
||||||
|
egrep '^## +(Mon|Tue|Wed|Thu|Fri|Sat|Sun)' "${file}" &>/dev/null
|
||||||
|
if [[ $? == 0 ]]; then
|
||||||
|
|
||||||
|
# TODO make all of this only add if detected
|
||||||
|
echo '<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||||
|
<channel>
|
||||||
|
<atom:link href="'$(_url)'/rss.xml" rel="self" type="application/rss+xml" />
|
||||||
|
<title>'$(_short)'</title>
|
||||||
|
<link>'$(_url)'</link>
|
||||||
|
<description>'$(_description)'</description>
|
||||||
|
<copyright>'$(_copyright)'</copyright>' > "${dir}"/rss.xml
|
||||||
|
|
||||||
|
declare -i item=0
|
||||||
|
buf=""
|
||||||
|
while read line; do
|
||||||
|
if [[ "${line}" =~ ^##\ +(Mon|Tue|Wed|Thu|Fri|Sat|Sun) ]]; then
|
||||||
|
if [[ $item > 0 ]]; then
|
||||||
|
echo "${buf}" |perl -pe 's,\[(.+)\](.*),\1,;s,(<|>),,g;s,&,&,g' >> "${dir}"/rss.xml
|
||||||
|
echo '</description></item>' >> "${dir}"/rss.xml
|
||||||
|
buf=""
|
||||||
|
fi
|
||||||
|
item=$((item+1))
|
||||||
|
echo '<item>' >> "${dir}"/rss.xml
|
||||||
|
#guid=${line#\#\# *}
|
||||||
|
#guid=${guid// }
|
||||||
|
#TODO user relative link creator for URI
|
||||||
|
echo '<title>'${line#\#\# *}'</title>' >> "${dir}"/rss.xml
|
||||||
|
#echo '<guid>'$guid'</guid>' >> "${dir}"/rss.xml
|
||||||
|
echo '<description>' >> "${dir}"/rss.xml
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
if [[ "${line}" == "" ]]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
buf="$buf $line"
|
||||||
|
done < <(egrep '^## +(Mon|Tue|Wed|Thu|Fri|Sat|Sun)' -A 5 "${file}")
|
||||||
|
|
||||||
|
echo "${buf}" |perl -pe 's,\[(.+)\](.*),\1,;s,(<|>),,g;s,&,&,g' >> "${dir}"/rss.xml
|
||||||
|
echo '</description></item>' >> "${dir}"/rss.xml
|
||||||
|
echo '</channel></rss>' >> "${dir}"/rss.xml
|
||||||
|
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo ${RED}Not a log file.${RESET}
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Prints each of the command names and exits.
|
||||||
|
|
||||||
|
_usage () {
|
||||||
|
echo "${GREY}usage: ${GOLD}kn ${CYAN}<cmd>${RESET}"
|
||||||
|
for i in ${COMMANDS[@]}; do echo " ${CYAN}$i"; done
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Checks if command is being used in tab completion context (`complete -C
|
||||||
|
# kn kn` and COMP_LINE set). If so handle completion and exit.
|
||||||
|
# Otherwise, assume execution context. Detect the README working
|
||||||
|
# directory since more than one README knowledge base may exist on
|
||||||
|
# a single system. Look for full COMMAND matches for the first argument.
|
||||||
|
# Then accept the first matching substring as the command to use. Then
|
||||||
|
# delegate.
|
||||||
|
|
||||||
|
main () {
|
||||||
|
local c cmd="${1-usage}"
|
||||||
|
shift 2>/dev/null
|
||||||
|
|
||||||
|
# knowledge base detection
|
||||||
|
#[[ -d .git && -e README.md ]] && export README="${PWD}"
|
||||||
|
[[ -e README.md ]] && export README="${PWD}"
|
||||||
|
[[ -z "${README}" ]] && _fail "Need to set README environment variable"
|
||||||
|
cd "${README}" || _fail "Could not change into README directory: ${README}"
|
||||||
|
|
||||||
|
# tab completion
|
||||||
|
if [[ -n "$COMP_LINE" ]]; then
|
||||||
|
for c in ${COMMANDS[@]}; do
|
||||||
|
[[ "${c:0:${#1}}" == "$1" ]] && echo "${c}"
|
||||||
|
done
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# full command match
|
||||||
|
for c in ${COMMANDS[@]}; do
|
||||||
|
if [[ "${c}" == "${cmd}" ]]; then
|
||||||
|
"_${c}" "$@"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# partial command match
|
||||||
|
for c in ${COMMANDS[@]}; do
|
||||||
|
if [[ "${c}" =~ ^${cmd} ]]; then
|
||||||
|
"_${c}" "$@"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# NORUN allows this file to be sourced while checking for syntax errors
|
||||||
|
# and unit testing specific functions.
|
||||||
|
|
||||||
|
[[ -z "${NORUN}" ]] && main "$@"
|
@ -0,0 +1,33 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Opens the default log file with vim. Accepts the
|
||||||
|
# standard `date` offset. Prompts to commit.
|
||||||
|
|
||||||
|
relpath=$(datepath "$*")
|
||||||
|
dir="${KN}/log/$relpath"
|
||||||
|
file="$dir/README.md"
|
||||||
|
mkdir -p "${dir}"
|
||||||
|
|
||||||
|
# prepend a timestamped heading
|
||||||
|
|
||||||
|
tmpfile=$(mktemp)
|
||||||
|
hnow "$*" >"${tmpfile}"
|
||||||
|
echo -e "\n\n" >>"${tmpfile}"
|
||||||
|
if [ -e "${file}" ]; then
|
||||||
|
cat "${file}" >>"${tmpfile}"
|
||||||
|
fi
|
||||||
|
mv "${tmpfile}" "${file}"
|
||||||
|
|
||||||
|
echo "${file}"
|
||||||
|
vim +3 "${file}"
|
||||||
|
|
||||||
|
read -p 'Do you want to commit? ' commit
|
||||||
|
|
||||||
|
if [[ ! $commit =~ ^[Yy] ]]; then
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd "${dir}"
|
||||||
|
git add "${file}"
|
||||||
|
git commit
|
||||||
|
#git push
|
@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
exec git add "$@"
|
@ -0,0 +1,15 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Outputs the seconds since the thing identified by the first argument
|
||||||
|
# was last modified (not created).
|
||||||
|
|
||||||
|
ageof() {
|
||||||
|
local path="$1"
|
||||||
|
if [[ -z "$path" ]]; then
|
||||||
|
echo 'usage: ageof <path>'
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
echo $(( $(date +%s) - $(date -r "$path" +%s) ))
|
||||||
|
}
|
||||||
|
|
||||||
|
ageof "$@"
|
@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
for font in /usr/share/figlet/*.flf; do
|
||||||
|
clear
|
||||||
|
echo "FONT: $font"
|
||||||
|
figlet -f "${font}" hello
|
||||||
|
read line
|
||||||
|
done
|
@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
exec git commit --amend "$@"
|
@ -0,0 +1,2 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
exec chat "!ar $1 $2"
|
@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
exec tmux \
|
||||||
|
splitw -h \;\
|
||||||
|
send fishies ENTER \;\
|
||||||
|
selectp -t 1 \;\
|
||||||
|
splitw \;\
|
||||||
|
send tmatrix ENTER \;\
|
||||||
|
selectp -t 1 \;\
|
||||||
|
send watchcow ENTER \;\
|
||||||
|
resizep -t 2 -y 5 -x 44
|
@ -0,0 +1,9 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
what="$*"
|
||||||
|
if [[ -z "${what}" ]]; then
|
||||||
|
what="in a bit"
|
||||||
|
elif [[ $what =~ ^([0-9]+) ]]; then
|
||||||
|
what="at $(date -d "${BASH_REMATCH[1]} minutes" +%-I:%M)"
|
||||||
|
fi
|
||||||
|
echo "$what" > ~/.break
|
||||||
|
exec bannerfish "back $what"
|
@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Uses Weechat to ban a target on Twitch.
|
||||||
|
|
||||||
|
if [ -z "$TWITCH_USER" ]; then
|
||||||
|
echo '$TWITCH_USER environment variable not set.'
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$1" -o -z "$2" ]; then
|
||||||
|
echo 'usage: ban <twitchid> <reason>'
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
wee "/msg $TWITCH_USER /ban $1 $2"
|
||||||
|
|
@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#exec w3m https://overthewire.org/wargames/bandit/bandit$1.html
|
||||||
|
exec lynx https://overthewire.org/wargames/bandit/bandit$1.html
|
@ -0,0 +1,19 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
clear=$'\033[2J'
|
||||||
|
top=$'\033[H'
|
||||||
|
|
||||||
|
trap "setterm --cursor on; echo ${clear}; exit; trap -- - SIGINT SIGTERM" SIGTERM SIGINT
|
||||||
|
|
||||||
|
what="$*"
|
||||||
|
if [ -z "${what}" ]; then
|
||||||
|
read -p "Text: " what
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "${clear}"
|
||||||
|
while true; do
|
||||||
|
echo "${top}"
|
||||||
|
figl <<<"$what" | lolcat
|
||||||
|
setterm --cursor off
|
||||||
|
sleep 2
|
||||||
|
done
|
@ -0,0 +1,8 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
what="$*"
|
||||||
|
if [ -z "${what}" ]; then
|
||||||
|
read -p "Text: " what
|
||||||
|
fi
|
||||||
|
cols=$(tput lines)
|
||||||
|
pomo stop
|
||||||
|
tmux split-window \; resize-pane -y $((cols-6)) \; send -t 1 "banner \"$what\"" Enter \; send -t 2 "fishies" Enter
|
@ -0,0 +1,70 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Courtesy of @bvierra and company (long ago, pre-cPanel)
|
||||||
|
|
||||||
|
### Customization:
|
||||||
|
blue="\033[0;34m"
|
||||||
|
brightblue="\033[1;34m"
|
||||||
|
cyan="\033[0;36m"
|
||||||
|
brightcyan="\033[1;36m"
|
||||||
|
green="\033[0;32m"
|
||||||
|
brightgreen="\033[1;32m"
|
||||||
|
red="\033[0;31m"
|
||||||
|
brightred="\033[1;31m"
|
||||||
|
white="\033[1;37m"
|
||||||
|
black="\033[0;30m"
|
||||||
|
grey="\033[0;37m"
|
||||||
|
darkgrey="\033[1;30m"
|
||||||
|
# Choose the colors that will be used from the above list
|
||||||
|
# space-separated list
|
||||||
|
# e.g. `colors=($green $brightgreen $darkgrey $white)`
|
||||||
|
colors=($green $brightgreen)
|
||||||
|
### End customization
|
||||||
|
|
||||||
|
### Do not edit below this line
|
||||||
|
spacing=${1:-100} # the likelihood of a character being left in place
|
||||||
|
scroll=${2:-0} # 0 for static, positive integer determines scroll speed
|
||||||
|
screenlines=$(expr `tput lines` - 1 + $scroll)
|
||||||
|
screencols=$(expr `tput cols` / 2 - 1)
|
||||||
|
|
||||||
|
# chars=(a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ^)
|
||||||
|
# charset via Carl:
|
||||||
|
chars=(ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ン)
|
||||||
|
|
||||||
|
count=${#chars[@]}
|
||||||
|
colorcount=${#colors[@]}
|
||||||
|
|
||||||
|
trap "tput sgr0; clear; exit" SIGTERM SIGINT
|
||||||
|
|
||||||
|
if [[ $1 =~ '-h' ]]; then
|
||||||
|
echo "Display a Matrix(ish) screen in the terminal"
|
||||||
|
echo "Usage: matrix [SPACING [SCROLL]]"
|
||||||
|
echo "Example: matrix 100 0"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
clear
|
||||||
|
tput cup 0 0
|
||||||
|
while :
|
||||||
|
do for i in $(eval echo {1..$screenlines})
|
||||||
|
do for i in $(eval echo {1..$screencols})
|
||||||
|
do rand=$(($RANDOM%$spacing))
|
||||||
|
case $rand in
|
||||||
|
0)
|
||||||
|
printf "${colors[$RANDOM%$colorcount]}${chars[$RANDOM%$count]} "
|
||||||
|
;;
|
||||||
|
1)
|
||||||
|
printf " "
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
printf "\033[2C"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
printf "\n"
|
||||||
|
|
||||||
|
# sleep .005
|
||||||
|
done
|
||||||
|
tput cup 0 0
|
||||||
|
done
|
@ -0,0 +1,3 @@
|
|||||||
|
#!/usr/bin/perl
|
||||||
|
print grep {/state|to\ full|percentage/}
|
||||||
|
`upower -i /org/freedesktop/UPower/devices/battery_BAT0`;
|
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
url="https://www.bing.com/search?q=$(urlencode "$*")"
|
||||||
|
chat "$url"
|
||||||
|
exec lynx "www.bing.com/search?q=$url"
|
||||||
|
|
@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
hidecursor
|
||||||
|
while true; do
|
||||||
|
clear
|
||||||
|
sleep 10
|
||||||
|
done
|
@ -0,0 +1,14 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
year="$1"
|
||||||
|
|
||||||
|
firstday=$(date "+%A, %B %e, %Y" -d "May 4 $year")
|
||||||
|
firstweekday=$(date "+%u" -d "May 4 $year")
|
||||||
|
daystilsat=$((6-firstweekday))
|
||||||
|
sat=$(date "+%A, %B %e, %Y" -d "May 4 $year + $daystilsat days")
|
||||||
|
|
||||||
|
echo "$firstday"
|
||||||
|
for i in {0..16}; do
|
||||||
|
echo "$sat"
|
||||||
|
sat="$(date "+%A, %B %e, %Y" -d "$sat + 7 days")"
|
||||||
|
done
|
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
if [ -z "$1" ]; then
|
||||||
|
exec git branch --show-current
|
||||||
|
fi
|
||||||
|
exec git checkout -b "$@"
|
@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
exec git branch "$@"
|
@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
exec ./build "$@"
|
@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
exec pae '$_=join " • ", @F'
|
||||||
|
|
@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
exec ncal -C -3
|
@ -0,0 +1,2 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
zet edit 20220112151926
|
@ -0,0 +1,2 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
exec zet cast.start "$@"
|
@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
exec cat $(which "$1")
|
@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
cat $(which "$1")
|
@ -0,0 +1,2 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
echo -e "${CDPATH//:/\\n}"
|
@ -0,0 +1,19 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
## Returns the full path to any changed files in the current directory
|
||||||
|
## or any subdirectories recursively one to a line. Useful for detecting
|
||||||
|
## changes and taking action (see onchange).
|
||||||
|
|
||||||
|
changed () {
|
||||||
|
local dir="${PWD}"
|
||||||
|
local tmpname="onchange${dir//\//-}"
|
||||||
|
local tmp="/tmp/${tmpname}"
|
||||||
|
if [[ ! -e "${tmp}" ]]; then
|
||||||
|
find "${dir}" -type f -not -path '*testdata*'
|
||||||
|
else
|
||||||
|
find "${dir}" -newer "${tmp}" -type f -not -path '*testdata*'
|
||||||
|
fi
|
||||||
|
touch "${tmp}"
|
||||||
|
}
|
||||||
|
|
||||||
|
changed "$@"
|
@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
buf="$*"
|
||||||
|
|
||||||
|
if test -n "$buf"; then
|
||||||
|
#echo "*$buf" >$WEECHAT_FIFO
|
||||||
|
tmux -L live send -t 2 "$buf" Enter
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
IFS=
|
||||||
|
while read -r line; do
|
||||||
|
#echo "*$line" >$WEECHAT_FIFO
|
||||||
|
tmux -L live send -t 2 "$line" Enter
|
||||||
|
done
|
@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
cheat() {
|
||||||
|
where="$1"
|
||||||
|
if [ $# -ge 1 ]; then
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
IFS=+ curl -sS "http://cht.sh/$where/ $*"
|
||||||
|
}
|
||||||
|
|
||||||
|
cheat "$@"
|
||||||
|
|
||||||
|
|
@ -0,0 +1,26 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
declare target="$1"
|
||||||
|
declare red=$'\033[38;2;255;0;0m'
|
||||||
|
declare grey=$'\033[38;2;100;100;100m'
|
||||||
|
declare green=$'\033[38;2;0;255;0m'
|
||||||
|
declare x=$'\033[0m'
|
||||||
|
|
||||||
|
if [[ -z "$(which muffet)" ]]; then
|
||||||
|
echo "${red}Requires ${grey}https://github.com/raviqqe/muffet ${red}be installed.${x}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z "$target" ]]; then
|
||||||
|
echo "usage: checkurls <pageurl>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ${1:0:4} != http ]]; then
|
||||||
|
target="http://$1"
|
||||||
|
fi
|
||||||
|
|
||||||
|
muffet --one-page-only "$target"
|
||||||
|
if [[ $? -eq 0 ]];then
|
||||||
|
echo "${green}No Broken URLs detected.${x}"
|
||||||
|
fi
|
@ -0,0 +1,29 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Changes the suffixes from the first argument to the second argument for
|
||||||
|
# all files specified after that as arguments. Use globstar expansion to
|
||||||
|
# recurse.
|
||||||
|
|
||||||
|
chsuffix ()
|
||||||
|
{
|
||||||
|
declare i
|
||||||
|
declare from="$1"
|
||||||
|
shift
|
||||||
|
declare to="$1"
|
||||||
|
shift
|
||||||
|
declare files=("$@")
|
||||||
|
if [[ -z "$files" ]]; then
|
||||||
|
usageln 'chsuffix <from> <to> <file> ...'
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
for i in "${files[@]}"
|
||||||
|
do
|
||||||
|
if [[ "$i" =~ $from$ ]]; then
|
||||||
|
declare stripped=${i%$from}
|
||||||
|
telln "Moving $i"'` -> `'"$stripped$to"
|
||||||
|
mv "$i" "$stripped$to"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
chsuffix $*
|
@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
exec wee /buffer clear
|
@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
exec gh issue close "$@"
|
@ -0,0 +1,12 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Seriously, why do people fuck around with other editor-specific ways
|
||||||
|
# of commenting things. You don't need no fucking "visual" mode. Vi
|
||||||
|
# already *is* visual mode (of ex). So tired of people extending Vim to
|
||||||
|
# improve it without even knowing how to use Vi in the first place. If
|
||||||
|
# you don't know how to integrate the shell, you don't know Vi. Learn it
|
||||||
|
# *before* you "extend" it.
|
||||||
|
|
||||||
|
while IFS= read -r line; do
|
||||||
|
echo "${1:-#} $line"
|
||||||
|
done
|
@ -0,0 +1,100 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# This file was originally taken from iterm2 https://github.com/gnachman/iTerm2/blob/master/tests/24-bit-color.sh
|
||||||
|
#
|
||||||
|
# This file echoes a bunch of 24-bit color codes
|
||||||
|
# to the terminal to demonstrate its functionality.
|
||||||
|
# The foreground escape sequence is ^[38;2;<r>;<g>;<b>m
|
||||||
|
# The background escape sequence is ^[48;2;<r>;<g>;<b>m
|
||||||
|
# <r> <g> <b> range from 0 to 255 inclusive.
|
||||||
|
# The escape sequence ^[0m returns output to default
|
||||||
|
|
||||||
|
setBackgroundColor()
|
||||||
|
{
|
||||||
|
#printf '\x1bPtmux;\x1b\x1b[48;2;%s;%s;%sm' $1 $2 $3
|
||||||
|
printf '\x1b[48;2;%s;%s;%sm' $1 $2 $3
|
||||||
|
}
|
||||||
|
|
||||||
|
resetOutput()
|
||||||
|
{
|
||||||
|
echo -en "\x1b[0m\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Gives a color $1/255 % along HSV
|
||||||
|
# Who knows what happens when $1 is outside 0-255
|
||||||
|
# Echoes "$red $green $blue" where
|
||||||
|
# $red $green and $blue are integers
|
||||||
|
# ranging between 0 and 255 inclusive
|
||||||
|
rainbowColor()
|
||||||
|
{
|
||||||
|
let h=$1/43
|
||||||
|
let f=$1-43*$h
|
||||||
|
let t=$f*255/43
|
||||||
|
let q=255-t
|
||||||
|
|
||||||
|
if [ $h -eq 0 ]
|
||||||
|
then
|
||||||
|
echo "255 $t 0"
|
||||||
|
elif [ $h -eq 1 ]
|
||||||
|
then
|
||||||
|
echo "$q 255 0"
|
||||||
|
elif [ $h -eq 2 ]
|
||||||
|
then
|
||||||
|
echo "0 255 $t"
|
||||||
|
elif [ $h -eq 3 ]
|
||||||
|
then
|
||||||
|
echo "0 $q 255"
|
||||||
|
elif [ $h -eq 4 ]
|
||||||
|
then
|
||||||
|
echo "$t 0 255"
|
||||||
|
elif [ $h -eq 5 ]
|
||||||
|
then
|
||||||
|
echo "255 0 $q"
|
||||||
|
else
|
||||||
|
# execution should never reach here
|
||||||
|
echo "0 0 0"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
for i in `seq 0 127`; do
|
||||||
|
setBackgroundColor $i 0 0
|
||||||
|
echo -en " "
|
||||||
|
done
|
||||||
|
resetOutput
|
||||||
|
for i in `seq 255 -1 128`; do
|
||||||
|
setBackgroundColor $i 0 0
|
||||||
|
echo -en " "
|
||||||
|
done
|
||||||
|
resetOutput
|
||||||
|
|
||||||
|
for i in `seq 0 127`; do
|
||||||
|
setBackgroundColor 0 $i 0
|
||||||
|
echo -n " "
|
||||||
|
done
|
||||||
|
resetOutput
|
||||||
|
for i in `seq 255 -1 128`; do
|
||||||
|
setBackgroundColor 0 $i 0
|
||||||
|
echo -n " "
|
||||||
|
done
|
||||||
|
resetOutput
|
||||||
|
|
||||||
|
for i in `seq 0 127`; do
|
||||||
|
setBackgroundColor 0 0 $i
|
||||||
|
echo -n " "
|
||||||
|
done
|
||||||
|
resetOutput
|
||||||
|
for i in `seq 255 -1 128`; do
|
||||||
|
setBackgroundColor 0 0 $i
|
||||||
|
echo -n " "
|
||||||
|
done
|
||||||
|
resetOutput
|
||||||
|
|
||||||
|
for i in `seq 0 127`; do
|
||||||
|
setBackgroundColor `rainbowColor $i`
|
||||||
|
echo -n " "
|
||||||
|
done
|
||||||
|
resetOutput
|
||||||
|
for i in `seq 255 -1 128`; do
|
||||||
|
setBackgroundColor `rainbowColor $i`
|
||||||
|
echo -n " "
|
||||||
|
done
|
||||||
|
resetOutput
|
@ -0,0 +1,5 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
while IFS= read -r line;do
|
||||||
|
key=${line%%=*}
|
||||||
|
echo "x.$key() { x.config $key \"\$@\"; }"
|
||||||
|
done
|
@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
exec gh issue comment "$@"
|
@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
exec git commit "$@"
|
@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
confirm () {
|
||||||
|
declare yn
|
||||||
|
read -p " [y/N] " yn
|
||||||
|
[[ ${yn,,} =~ y(es)? ]] && return 0
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
confirm
|
@ -0,0 +1,2 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
exec k config get-contexts
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue