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