Latest
This commit is contained in:
parent
dd7934711b
commit
0927bd690e
77 changed files with 6991 additions and 696 deletions
.VirtualBox
.bashrc.config
Code/User
asdf
bashtop
bat
brew
chromium-flags.confcrontab
direnv
fd
firejail
bitwarden.localchromium.localcode.localgcloud.localgoogle-chrome-stable.localslack.localthunderbird.local
git
gtk-3.0
k9s
mimeapps.listnpm
oh-my-posh
pgcli
plasma
plasmarcrclone
readline
ripgrep
shell
wget
youtube-dl
.gnupg/public
.local
Taskfile-local.yml
.tool-versionsassets
bin
bwcchrome-profile-exportchrome-profile-importfirefox-profile-exportfonttestinstall-gnome-extensionsinstall-softwareinstall-terminal-themeload-secretsloggprovisionrunslack
scripts
share/git-core/templates/hooks
.vim
AppData/Local/clink
Library
Application Support/tabby/plugins
Developer/Xcode/UserData/FontAndColorThemes
Preferences
VirtualBox
30
.VirtualBox/VirtualBox.xml
Normal file
30
.VirtualBox/VirtualBox.xml
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!--
|
||||||
|
** DO NOT EDIT THIS FILE.
|
||||||
|
** If you make changes to this file while any VirtualBox related application
|
||||||
|
** is running, your changes will be overwritten later, without taking effect.
|
||||||
|
** Use VBoxManage or the VirtualBox Manager GUI to make changes.
|
||||||
|
-->
|
||||||
|
<VirtualBox xmlns="http://www.virtualbox.org/" version="1.12-linux">
|
||||||
|
<Global>
|
||||||
|
<ExtraData>
|
||||||
|
<ExtraDataItem name="GUI/Details/Elements" value="general,system,preview,display,storage,audio,network,usb,sharedFolders,description"/>
|
||||||
|
<ExtraDataItem name="GUI/GroupDefinitions/" value="n=GLOBAL"/>
|
||||||
|
<ExtraDataItem name="GUI/LastItemSelected" value="n=GLOBAL"/>
|
||||||
|
<ExtraDataItem name="GUI/LastWindowPosition" value="341,164,683,404"/>
|
||||||
|
<ExtraDataItem name="GUI/SplitterSizes" value="226,456"/>
|
||||||
|
<ExtraDataItem name="GUI/Toolbar" value="false"/>
|
||||||
|
<ExtraDataItem name="GUI/Tools/LastItemsSelected" value="Welcome,Details"/>
|
||||||
|
<ExtraDataItem name="GUI/UpdateCheckCount" value="2"/>
|
||||||
|
<ExtraDataItem name="GUI/UpdateDate" value="1 d, 2021-12-15, stable, 6.1.30"/>
|
||||||
|
</ExtraData>
|
||||||
|
<MachineRegistry/>
|
||||||
|
<NetserviceRegistry>
|
||||||
|
<DHCPServers>
|
||||||
|
<DHCPServer networkName="HostInterfaceNetworking-vboxnet0" IPAddress="192.168.56.100" networkMask="255.255.255.0" lowerIP="192.168.56.101" upperIP="192.168.56.254" enabled="1"/>
|
||||||
|
</DHCPServers>
|
||||||
|
</NetserviceRegistry>
|
||||||
|
<SystemProperties defaultMachineFolder="C:\Users\{{ .user.username }}\.local\virtualbox" defaultHardDiskFormat="VDI" VRDEAuthLibrary="VBoxAuth" webServiceAuthLibrary="VBoxAuth" LogHistoryCount="3" proxyMode="0" exclusiveHwVirt="true"/>
|
||||||
|
<USBDeviceFilters/>
|
||||||
|
</Global>
|
||||||
|
</VirtualBox>
|
1
.bashrc
1
.bashrc
|
@ -94,4 +94,3 @@ if [ "$BASH_SUPPORT" = 'true' ]; then
|
||||||
complete -C vault vault
|
complete -C vault vault
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
43
.config/Code/User/extensions.json
Normal file
43
.config/Code/User/extensions.json
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
{
|
||||||
|
"recommendations": [
|
||||||
|
"chrmarti.regex",
|
||||||
|
"DavidAnson.vscode-markdownlint",
|
||||||
|
"dbaeumer.vscode-eslint",
|
||||||
|
"eamodio.gitlens",
|
||||||
|
"EditorConfig.EditorConfig",
|
||||||
|
"esbenp.prettier-vscode",
|
||||||
|
"ericadamski.carbon-now-sh",
|
||||||
|
"formulahendry.code-runner",
|
||||||
|
"GitHub.vscode-pull-request-github",
|
||||||
|
"GitLab.gitlab-workflow",
|
||||||
|
"GoogleCloudTools.cloudcode",
|
||||||
|
"HashiCorp.terraform",
|
||||||
|
"hediet.vscode-drawio",
|
||||||
|
"IBM.output-colorizer",
|
||||||
|
"Kelvin.vscode-sshfs",
|
||||||
|
"mads-hartmann.bash-ide-vscode",
|
||||||
|
"ms-azuretools.vscode-docker",
|
||||||
|
"ms-kubernetes-tools.vscode-kubernetes-tools",
|
||||||
|
"ms-vscode-remote.remote-containers",
|
||||||
|
"ms-vscode-remote.remote-ssh",
|
||||||
|
"ms-vscode-remote.remote-wsl",
|
||||||
|
"ms-vscode.PowerShell",
|
||||||
|
"MS-vsliveshare.vsliveshare",
|
||||||
|
"MS-vsliveshare.vsliveshare-audio",
|
||||||
|
"philnash.ngrok-for-vscode",
|
||||||
|
"PKief.material-icon-theme",
|
||||||
|
"redhat.ansible",
|
||||||
|
"redhat.vscode-yaml",
|
||||||
|
"richie5um2.vscode-sort-json",
|
||||||
|
"Rubymaniac.vscode-paste-and-indent",
|
||||||
|
"shd101wyy.markdown-preview-enhanced",
|
||||||
|
"softwaredotcom.swdc-vscode",
|
||||||
|
"timonwong.shellcheck",
|
||||||
|
"tyriar.sort-lines",
|
||||||
|
"usernamehw.errorlens",
|
||||||
|
"valentjn.vscode-ltex",
|
||||||
|
"vsls-contrib.codetour",
|
||||||
|
"vsls-contrib.gistfs",
|
||||||
|
"wayou.vscode-todo-highlight"
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
The Betelgeuse VS Code theme created using [themer.dev](https://themer.dev).
|
|
@ -0,0 +1,48 @@
|
||||||
|
|
||||||
|
<svg width="400px" height="400px" viewBox="0 0 400 400" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<defs>
|
||||||
|
<linearGradient x1="0%" y1="50%" x2="100%" y2="50%" id="shadeGradientLight">
|
||||||
|
<stop stop-color="#e5e6e7" offset="0%"></stop>
|
||||||
|
<stop stop-color="#cccdcf" offset="16.67%"></stop>
|
||||||
|
<stop stop-color="#b2b4b7" offset="33.33%"></stop>
|
||||||
|
<stop stop-color="#999ba0" offset="50%"></stop>
|
||||||
|
<stop stop-color="#7f8288" offset="66.67%"></stop>
|
||||||
|
<stop stop-color="#666970" offset="83.33%"></stop>
|
||||||
|
<stop stop-color="#4c5058" offset="100%"></stop>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient x1="0%" y1="50%" x2="100%" y2="50%" id="shadeGradientDark">
|
||||||
|
<stop stop-color="#2f323e" offset="0%"></stop>
|
||||||
|
<stop stop-color="#474b56" offset="16.67%"></stop>
|
||||||
|
<stop stop-color="#60646f" offset="33.33%"></stop>
|
||||||
|
<stop stop-color="#797c87" offset="50%"></stop>
|
||||||
|
<stop stop-color="#9295a0" offset="66.67%"></stop>
|
||||||
|
<stop stop-color="#aaaeb8" offset="83.33%"></stop>
|
||||||
|
<stop stop-color="#c3c7d1" offset="100%"></stop>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g id="light">
|
||||||
|
<rect fill="#ffffff" x="0" y="0" width="400" height="200"></rect>
|
||||||
|
<rect fill="#ff4972" x="28" y="28" width="74" height="37"></rect>
|
||||||
|
<rect fill="#dcdfe4" x="118" y="28" width="74" height="37"></rect>
|
||||||
|
<rect fill="#ffff80" x="208" y="28" width="74" height="37"></rect>
|
||||||
|
<rect fill="#95ffc3" x="298" y="28" width="74" height="37"></rect>
|
||||||
|
<rect fill="#24e5ff" x="28" y="81" width="74" height="37"></rect>
|
||||||
|
<rect fill="#a0dbff" x="118" y="81" width="74" height="37"></rect>
|
||||||
|
<rect fill="#4c5058" x="208" y="81" width="74" height="37"></rect>
|
||||||
|
<rect fill="#eb71ad" x="298" y="81" width="74" height="37"></rect>
|
||||||
|
<rect fill="url(#shadeGradientLight)" x="28" y="134" width="344" height="37"></rect>
|
||||||
|
</g>
|
||||||
|
<g id="dark" transform="translate(0.000000, 200.000000)">
|
||||||
|
<rect fill="#161925" x="0" y="0" width="400" height="200"></rect>
|
||||||
|
<rect fill="#ed254e" x="28" y="28" width="74" height="37"></rect>
|
||||||
|
<rect fill="#dcdfe4" x="118" y="28" width="74" height="37"></rect>
|
||||||
|
<rect fill="#f9dc5c" x="208" y="28" width="74" height="37"></rect>
|
||||||
|
<rect fill="#71f79f" x="298" y="28" width="74" height="37"></rect>
|
||||||
|
<rect fill="#00c1e4" x="28" y="81" width="74" height="37"></rect>
|
||||||
|
<rect fill="#7cb7ff" x="118" y="81" width="74" height="37"></rect>
|
||||||
|
<rect fill="#c3c7d1" x="208" y="81" width="74" height="37"></rect>
|
||||||
|
<rect fill="#c74d89" x="298" y="81" width="74" height="37"></rect>
|
||||||
|
<rect fill="url(#shadeGradientDark)" x="28" y="134" width="344" height="37"></rect>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
|
After (image error) Size: 3 KiB |
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
"name": "betelgeuse-vscode",
|
||||||
|
"displayName": "Betelgeuse VS Code Theme",
|
||||||
|
"description": "Betelgeuse theme generated by Themer.dev",
|
||||||
|
"version": "2.4.0",
|
||||||
|
"publisher": "Megabyte Labs",
|
||||||
|
"engines": {
|
||||||
|
"vscode": "^1.14.0"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"Themes"
|
||||||
|
],
|
||||||
|
"icon": "icon.svg",
|
||||||
|
"contributes": {
|
||||||
|
"themes": [
|
||||||
|
{
|
||||||
|
"label": "Betelgeuse Dark",
|
||||||
|
"uiTheme": "vs-dark",
|
||||||
|
"path": "themes/themer-dark-color-theme.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "Betelgeuse Light",
|
||||||
|
"uiTheme": "vs",
|
||||||
|
"path": "themes/themer-light-color-theme.json"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,614 @@
|
||||||
|
{
|
||||||
|
"name": "Betelgeuse Dark",
|
||||||
|
"type": "dark",
|
||||||
|
"colors": {
|
||||||
|
"focusBorder": "#c3c7d1",
|
||||||
|
"foreground": "#c3c7d1",
|
||||||
|
"widget.shadow": "#161925",
|
||||||
|
"selection.background": "#474b56",
|
||||||
|
"descriptionForeground": "#aaaeb8",
|
||||||
|
"errorForeground": "#ed254e",
|
||||||
|
"icon.foreground": "#aaaeb8",
|
||||||
|
"sash.hoverBorder": "#7cb7ff",
|
||||||
|
"textBlockQuote.background": "#2f323e",
|
||||||
|
"textBlockQuote.border": "#2f323e",
|
||||||
|
"textCodeBlock.background": "#161925",
|
||||||
|
"textLink.activeForeground": "#00c1e4",
|
||||||
|
"textLink.foreground": "#7cb7ff",
|
||||||
|
"textPreformat.foreground": "#dcdfe4",
|
||||||
|
"textSeparator.foreground": "#797c87",
|
||||||
|
"button.background": "#7cb7ff",
|
||||||
|
"button.foreground": "#161925",
|
||||||
|
"button.hoverBackground": "#00c1e4",
|
||||||
|
"button.secondaryForeground": "#161925",
|
||||||
|
"button.secondaryBackground": "#aaaeb8",
|
||||||
|
"button.secondaryHoverBackground": "#9295a0",
|
||||||
|
"checkbox.background": "#7cb7ff",
|
||||||
|
"checkbox.foreground": "#161925",
|
||||||
|
"checkbox.border": "#2f323e",
|
||||||
|
"dropdown.background": "#2f323e",
|
||||||
|
"dropdown.listBackground": "#2f323e",
|
||||||
|
"dropdown.border": "#2f323e",
|
||||||
|
"dropdown.foreground": "#aaaeb8",
|
||||||
|
"input.background": "#2f323e",
|
||||||
|
"input.border": "#2f323e",
|
||||||
|
"input.foreground": "#aaaeb8",
|
||||||
|
"input.placeholderForeground": "#474b56",
|
||||||
|
"inputOption.activeBackground": "#474b56",
|
||||||
|
"inputOption.activeBorder": "#00c1e4",
|
||||||
|
"inputOption.activeForeground": "#c3c7d1",
|
||||||
|
"inputValidation.errorBackground": "#2f323e",
|
||||||
|
"inputValidation.errorForeground": "#ed254e",
|
||||||
|
"inputValidation.errorBorder": "#ed254e",
|
||||||
|
"inputValidation.infoBackground": "#2f323e",
|
||||||
|
"inputValidation.infoForeground": "#7cb7ff",
|
||||||
|
"inputValidation.infoBorder": "#7cb7ff",
|
||||||
|
"inputValidation.warningBackground": "#2f323e",
|
||||||
|
"inputValidation.warningForeground": "#dcdfe4",
|
||||||
|
"inputValidation.warningBorder": "#dcdfe4",
|
||||||
|
"scrollbar.shadow": "#161925",
|
||||||
|
"scrollbarSlider.activeBackground": "#9295a07f",
|
||||||
|
"scrollbarSlider.background": "#60646f7f",
|
||||||
|
"scrollbarSlider.hoverBackground": "#797c877f",
|
||||||
|
"badge.foreground": "#161925",
|
||||||
|
"badge.background": "#c3c7d1",
|
||||||
|
"progressBar.background": "#71f79f",
|
||||||
|
"list.activeSelectionBackground": "#c3c7d133",
|
||||||
|
"list.activeSelectionForeground": "#c3c7d1",
|
||||||
|
"list.dropBackground": "#2f323e",
|
||||||
|
"list.focusBackground": "#60646f3f",
|
||||||
|
"list.focusForeground": "#c3c7d1",
|
||||||
|
"list.highlightForeground": "#f9dc5c",
|
||||||
|
"list.hoverBackground": "#2f323e33",
|
||||||
|
"list.hoverForeground": "#c3c7d1",
|
||||||
|
"list.inactiveSelectionBackground": "#474b563f",
|
||||||
|
"list.inactiveSelectionForeground": "#aaaeb8",
|
||||||
|
"list.inactiveFocusBackground": "#2f323e3f",
|
||||||
|
"list.invalidItemForeground": "#ed254e",
|
||||||
|
"list.errorForeground": "#ed254e",
|
||||||
|
"list.warningForeground": "#f9dc5c",
|
||||||
|
"listFilterWidget.background": "#2f323e",
|
||||||
|
"listFilterWidget.outline": "#7cb7ff",
|
||||||
|
"listFilterWidget.noMatchesOutline": "#ed254e",
|
||||||
|
"list.filterMatchBackground": "#f9dc5c33",
|
||||||
|
"list.filterMatchBorder": "#f9dc5c33",
|
||||||
|
"tree.indentGuidesStroke": "#2f323e",
|
||||||
|
"list.deemphasizedForeground": "#797c87",
|
||||||
|
"activityBar.background": "#161925",
|
||||||
|
"activityBar.dropBorder": "#7cb7ff",
|
||||||
|
"activityBar.foreground": "#9295a0",
|
||||||
|
"activityBar.inactiveForeground": "#797c87",
|
||||||
|
"activityBar.border": "#161925",
|
||||||
|
"activityBarBadge.background": "#c3c7d1",
|
||||||
|
"activityBarBadge.foreground": "#161925",
|
||||||
|
"activityBar.activeBorder": "#aaaeb8",
|
||||||
|
"activityBar.activeBackground": "#2f323e33",
|
||||||
|
"activityBar.activeFocusBorder": "#c3c7d1",
|
||||||
|
"sideBar.background": "#161925",
|
||||||
|
"sideBar.foreground": "#aaaeb8",
|
||||||
|
"sideBar.border": "#2f323e",
|
||||||
|
"sideBar.dropBackground": "#2f323e3f",
|
||||||
|
"sideBarTitle.foreground": "#9295a0",
|
||||||
|
"sideBarSectionHeader.background": "#474b56",
|
||||||
|
"sideBarSectionHeader.foreground": "#aaaeb8",
|
||||||
|
"sideBarSectionHeader.border": "#161925",
|
||||||
|
"minimap.findMatchHighlight": "#f9dc5c",
|
||||||
|
"minimap.selectionHighlight": "#7cb7ff80",
|
||||||
|
"minimap.errorHighlight": "#ed254e80",
|
||||||
|
"minimap.warningHighlight": "#dcdfe480",
|
||||||
|
"minimap.background": "#161925",
|
||||||
|
"minimapSlider.background": "#2f323e33",
|
||||||
|
"minimapSlider.hoverBackground": "#474b5633",
|
||||||
|
"minimapSlider.activeBackground": "#60646f33",
|
||||||
|
"minimapGutter.addedBackground": "#71f79f80",
|
||||||
|
"minimapGutter.modifiedBackground": "#f9dc5c80",
|
||||||
|
"minimapGutter.deletedBackground": "#ed254e80",
|
||||||
|
"editorGroup.border": "#2f323e",
|
||||||
|
"editorGroup.dropBackground": "#474b567f",
|
||||||
|
"editorGroupHeader.noTabsBackground": "#161925",
|
||||||
|
"editorGroupHeader.tabsBackground": "#161925",
|
||||||
|
"editorGroupHeader.tabsBorder": "#161925",
|
||||||
|
"editorGroupHeader.border": "#161925",
|
||||||
|
"editorGroup.emptyBackground": "#161925",
|
||||||
|
"editorGroup.focusedEmptyBorder": "#2f323e",
|
||||||
|
"tab.activeBackground": "#161925",
|
||||||
|
"tab.unfocusedActiveBackground": "#161925",
|
||||||
|
"tab.activeForeground": "#aaaeb8",
|
||||||
|
"tab.border": "#161925",
|
||||||
|
"tab.lastPinnedBorder": "#c74d89",
|
||||||
|
"tab.inactiveBackground": "#2f323e",
|
||||||
|
"tab.unfocusedInactiveBackground": "#2f323e",
|
||||||
|
"tab.inactiveForeground": "#60646f",
|
||||||
|
"tab.unfocusedActiveForeground": "#60646f",
|
||||||
|
"tab.unfocusedInactiveForeground": "#474b56",
|
||||||
|
"tab.hoverBackground": "#2f323e80",
|
||||||
|
"tab.unfocusedHoverBackground": "#2f323e80",
|
||||||
|
"tab.hoverForeground": "#9295a0",
|
||||||
|
"tab.unfocusedHoverForeground": "#797c87",
|
||||||
|
"tab.activeModifiedBorder": "#f9dc5c",
|
||||||
|
"tab.inactiveModifiedBorder": "#f9dc5c",
|
||||||
|
"tab.unfocusedActiveModifiedBorder": "#f9dc5c",
|
||||||
|
"tab.unfocusedInactiveModifiedBorder": "#f9dc5c",
|
||||||
|
"editorPane.background": "#161925",
|
||||||
|
"editor.background": "#161925",
|
||||||
|
"editor.foreground": "#c3c7d1",
|
||||||
|
"editorLineNumber.foreground": "#474b56",
|
||||||
|
"editorLineNumber.activeForeground": "#797c87",
|
||||||
|
"editorCursor.background": "#161925",
|
||||||
|
"editorCursor.foreground": "#c3c7d1",
|
||||||
|
"editor.selectionBackground": "#7cb7ff33",
|
||||||
|
"editor.selectionForeground": "#c3c7d1",
|
||||||
|
"editor.inactiveSelectionBackground": "#7cb7ff33",
|
||||||
|
"editor.selectionHighlightBackground": "#2f323e",
|
||||||
|
"editor.wordHighlightBackground": "#c3c7d133",
|
||||||
|
"editor.wordHighlightStrongBackground": "#c74d8933",
|
||||||
|
"editor.findMatchBackground": "#f9dc5c3f",
|
||||||
|
"editor.findMatchHighlightBackground": "#f9dc5c33",
|
||||||
|
"editor.findRangeHighlightBackground": "#2f323e",
|
||||||
|
"editor.hoverHighlightBackground": "#474b567f",
|
||||||
|
"editor.lineHighlightBackground": "#161925",
|
||||||
|
"editor.lineHighlightBorder": "#2f323e",
|
||||||
|
"editorLink.activeForeground": "#00c1e4",
|
||||||
|
"editor.rangeHighlightBackground": "#f9dc5c33",
|
||||||
|
"editor.symbolHighlightBackground": "#c3c7d133",
|
||||||
|
"editorWhitespace.foreground": "#2f323e",
|
||||||
|
"editorIndentGuide.background": "#2f323e",
|
||||||
|
"editorIndentGuide.activeBackground": "#474b56",
|
||||||
|
"editorRuler.foreground": "#2f323e",
|
||||||
|
"editorCodeLens.foreground": "#9295a0",
|
||||||
|
"editorLightBulb.foreground": "#f9dc5c",
|
||||||
|
"editorLightBulbAutoFix.foreground": "#7cb7ff",
|
||||||
|
"editorBracketMatch.background": "#2f323e",
|
||||||
|
"editorBracketMatch.border": "#474b56",
|
||||||
|
"editorBracketHighlight.foreground1": "#c3c7d1",
|
||||||
|
"editorBracketHighlight.foreground2": "#f9dc5c",
|
||||||
|
"editorBracketHighlight.foreground3": "#00c1e4",
|
||||||
|
"editorBracketHighlight.foreground4": "#c3c7d1",
|
||||||
|
"editorBracketHighlight.foreground5": "#71f79f",
|
||||||
|
"editorBracketHighlight.foreground6": "#7cb7ff",
|
||||||
|
"editorBracketHighlight.unexpectedBracket": "#ed254e",
|
||||||
|
"editor.foldBackground": "#2f323e66",
|
||||||
|
"editorOverviewRuler.border": "#2f323e",
|
||||||
|
"editorOverviewRuler.findMatchForeground": "#f9dc5cbf",
|
||||||
|
"editorOverviewRuler.rangeHighlightForeground": "#474b56bf",
|
||||||
|
"editorOverviewRuler.selectionHighlightForeground": "#2f323ebf",
|
||||||
|
"editorOverviewRuler.wordHighlightForeground": "#474b56bf",
|
||||||
|
"editorOverviewRuler.wordHighlightStrongForeground": "#60646fbf",
|
||||||
|
"editorOverviewRuler.modifiedForeground": "#f9dc5c7f",
|
||||||
|
"editorOverviewRuler.addedForeground": "#71f79f7f",
|
||||||
|
"editorOverviewRuler.deletedForeground": "#ed254e7f",
|
||||||
|
"editorOverviewRuler.errorForeground": "#ed254e7f",
|
||||||
|
"editorOverviewRuler.warningForeground": "#dcdfe47f",
|
||||||
|
"editorOverviewRuler.infoForeground": "#7cb7ff7f",
|
||||||
|
"editorOverviewRuler.bracketMatchForeground": "#60646f",
|
||||||
|
"editorError.foreground": "#ed254e",
|
||||||
|
"editorError.border": "#c3c7d1",
|
||||||
|
"editorWarning.foreground": "#dcdfe4",
|
||||||
|
"editorWarning.border": "#aaaeb8",
|
||||||
|
"editorInfo.foreground": "#7cb7ff",
|
||||||
|
"editorInfo.border": "#9295a0",
|
||||||
|
"editorHint.foreground": "#c74d89",
|
||||||
|
"editorHint.border": "#797c87",
|
||||||
|
"problemsErrorIcon.foreground": "#ed254e",
|
||||||
|
"problemsWarningIcon.foreground": "#dcdfe4",
|
||||||
|
"problemsInfoIcon.foreground": "#7cb7ff",
|
||||||
|
"editorUnnecessaryCode.opacity": "#0000007f",
|
||||||
|
"editorGutter.background": "#161925",
|
||||||
|
"editorGutter.modifiedBackground": "#f9dc5c",
|
||||||
|
"editorGutter.addedBackground": "#71f79f",
|
||||||
|
"editorGutter.deletedBackground": "#ed254e",
|
||||||
|
"editorGutter.commentRangeForeground": "#60646f",
|
||||||
|
"editorGutter.foldingControlForeground": "#9295a0",
|
||||||
|
"diffEditor.insertedTextBackground": "#71f79f20",
|
||||||
|
"diffEditor.removedTextBackground": "#ed254e20",
|
||||||
|
"diffEditor.border": "#2f323e",
|
||||||
|
"diffEditor.diagonalFill": "#2f323e7f",
|
||||||
|
"editorWidget.foreground": "#aaaeb8",
|
||||||
|
"editorWidget.background": "#2f323e",
|
||||||
|
"editorWidget.border": "#2f323e",
|
||||||
|
"editorWidget.resizeBorder": "#7cb7ff",
|
||||||
|
"editorSuggestWidget.background": "#2f323e",
|
||||||
|
"editorSuggestWidget.border": "#2f323e",
|
||||||
|
"editorSuggestWidget.foreground": "#aaaeb8",
|
||||||
|
"editorSuggestWidget.highlightForeground": "#c74d89",
|
||||||
|
"editorSuggestWidget.selectedBackground": "#474b56",
|
||||||
|
"editorHoverWidget.foreground": "#aaaeb8",
|
||||||
|
"editorHoverWidget.background": "#2f323e",
|
||||||
|
"editorHoverWidget.border": "#2f323e",
|
||||||
|
"editorHoverWidget.statusBarBackground": "#7cb7ff33",
|
||||||
|
"debugExceptionWidget.background": "#2f323e",
|
||||||
|
"debugExceptionWidget.border": "#2f323e",
|
||||||
|
"editorMarkerNavigation.background": "#2f323e",
|
||||||
|
"editorMarkerNavigationError.background": "#ed254e",
|
||||||
|
"editorMarkerNavigationWarning.background": "#dcdfe4",
|
||||||
|
"editorMarkerNavigationInfo.background": "#7cb7ff",
|
||||||
|
"peekView.border": "#c74d89",
|
||||||
|
"peekViewEditor.background": "#2f323e7f",
|
||||||
|
"peekViewEditorGutter.background": "#2f323e7f",
|
||||||
|
"peekViewEditor.matchHighlightBackground": "#f9dc5c7f",
|
||||||
|
"peekViewResult.background": "#2f323e",
|
||||||
|
"peekViewResult.fileForeground": "#aaaeb8",
|
||||||
|
"peekViewResult.lineForeground": "#474b56",
|
||||||
|
"peekViewResult.matchHighlightBackground": "#f9dc5c",
|
||||||
|
"peekViewResult.selectionBackground": "#60646f",
|
||||||
|
"peekViewResult.selectionForeground": "#c3c7d1",
|
||||||
|
"peekViewTitle.background": "#2f323e",
|
||||||
|
"peekViewTitleDescription.foreground": "#9295a0",
|
||||||
|
"peekViewTitleLabel.foreground": "#c3c7d1",
|
||||||
|
"merge.currentHeaderBackground": "#00c1e44c",
|
||||||
|
"merge.currentContentBackground": "#00c1e44c",
|
||||||
|
"merge.incomingHeaderBackground": "#7cb7ff4c",
|
||||||
|
"merge.incomingContentBackground": "#7cb7ff4c",
|
||||||
|
"merge.border": "#797c87",
|
||||||
|
"merge.commonContentBackground": "#c3c7d14c",
|
||||||
|
"merge.commonHeaderBackground": "#c3c7d14c",
|
||||||
|
"editorOverviewRuler.currentContentForeground": "#00c1e4",
|
||||||
|
"editorOverviewRuler.incomingContentForeground": "#7cb7ff",
|
||||||
|
"editorOverviewRuler.commonContentForeground": "#c3c7d1",
|
||||||
|
"panel.background": "#161925",
|
||||||
|
"panel.border": "#2f323e",
|
||||||
|
"panel.dropBorder": "#7cb7ff",
|
||||||
|
"panelTitle.activeBorder": "#60646f",
|
||||||
|
"panelTitle.activeForeground": "#aaaeb8",
|
||||||
|
"panelTitle.inactiveForeground": "#797c87",
|
||||||
|
"panelSection.border": "#2f323e",
|
||||||
|
"panelSection.dropBackground": "#2f323e3f",
|
||||||
|
"panelSectionHeader.background": "#474b56",
|
||||||
|
"panelSectionHeader.foreground": "#aaaeb8",
|
||||||
|
"panelSectionHeader.border": "#161925",
|
||||||
|
"imagePreview.border": "#2f323e",
|
||||||
|
"statusBar.background": "#7cb7ff",
|
||||||
|
"statusBar.foreground": "#161925",
|
||||||
|
"statusBar.border": "#161925",
|
||||||
|
"statusBar.debuggingBackground": "#dcdfe4",
|
||||||
|
"statusBar.debuggingForeground": "#161925",
|
||||||
|
"statusBar.debuggingBorder": "#161925",
|
||||||
|
"statusBar.noFolderBackground": "#c3c7d1",
|
||||||
|
"statusBar.noFolderForeground": "#161925",
|
||||||
|
"statusBar.noFolderBorder": "#161925",
|
||||||
|
"statusBarItem.activeBackground": "#00c1e4",
|
||||||
|
"statusBarItem.hoverBackground": "#71f79f",
|
||||||
|
"statusBarItem.prominentBackground": "#00c1e4",
|
||||||
|
"statusBarItem.prominentHoverBackground": "#71f79f",
|
||||||
|
"statusBarItem.remoteBackground": "#00c1e4",
|
||||||
|
"statusBarItem.remoteForeground": "#161925",
|
||||||
|
"statusBarItem.errorBackground": "#ed254e",
|
||||||
|
"statusBarItem.errorForeground": "#161925",
|
||||||
|
"titleBar.activeBackground": "#161925",
|
||||||
|
"titleBar.activeForeground": "#9295a0",
|
||||||
|
"titleBar.inactiveBackground": "#161925",
|
||||||
|
"titleBar.inactiveForeground": "#60646f",
|
||||||
|
"menubar.selectionForeground": "#c3c7d1",
|
||||||
|
"menubar.selectionBackground": "#2f323e",
|
||||||
|
"menu.foreground": "#aaaeb8",
|
||||||
|
"menu.background": "#161925",
|
||||||
|
"menu.selectionForeground": "#c3c7d1",
|
||||||
|
"menu.selectionBackground": "#2f323e",
|
||||||
|
"menu.separatorBackground": "#474b56",
|
||||||
|
"notificationCenterHeader.foreground": "#aaaeb8",
|
||||||
|
"notificationCenterHeader.background": "#474b56",
|
||||||
|
"notificationToast.border": "#60646f",
|
||||||
|
"notifications.foreground": "#c3c7d1",
|
||||||
|
"notifications.background": "#2f323e",
|
||||||
|
"notifications.border": "#60646f",
|
||||||
|
"notificationLink.foreground": "#7cb7ff",
|
||||||
|
"notificationsErrorIcon.foreground": "#ed254e",
|
||||||
|
"notificationsWarningIcon.foreground": "#dcdfe4",
|
||||||
|
"notificationsInfoIcon.foreground": "#7cb7ff",
|
||||||
|
"extensionButton.prominentForeground": "#161925",
|
||||||
|
"extensionButton.prominentBackground": "#7cb7ff",
|
||||||
|
"extensionButton.prominentHoverBackground": "#00c1e4",
|
||||||
|
"extensionBadge.remoteBackground": "#c74d89",
|
||||||
|
"extensionBadge.remoteForeground": "#161925",
|
||||||
|
"pickerGroup.border": "#474b56",
|
||||||
|
"pickerGroup.foreground": "#797c87",
|
||||||
|
"quickInput.background": "#2f323e",
|
||||||
|
"quickInput.foreground": "#c3c7d1",
|
||||||
|
"quickInputTitle.background": "#474b56",
|
||||||
|
"terminal.background": "#161925",
|
||||||
|
"terminal.foreground": "#aaaeb8",
|
||||||
|
"terminal.ansiBlack": "#161925",
|
||||||
|
"terminal.ansiBlue": "#7cb7ff",
|
||||||
|
"terminal.ansiBrightBlack": "#2f323e",
|
||||||
|
"terminal.ansiBrightBlue": "#7cb7ff",
|
||||||
|
"terminal.ansiBrightCyan": "#00c1e4",
|
||||||
|
"terminal.ansiBrightGreen": "#00c1e4",
|
||||||
|
"terminal.ansiBrightMagenta": "#c74d89",
|
||||||
|
"terminal.ansiBrightRed": "#dcdfe4",
|
||||||
|
"terminal.ansiBrightWhite": "#c3c7d1",
|
||||||
|
"terminal.ansiBrightYellow": "#f9dc5c",
|
||||||
|
"terminal.ansiCyan": "#00c1e4",
|
||||||
|
"terminal.ansiGreen": "#71f79f",
|
||||||
|
"terminal.ansiMagenta": "#c74d89",
|
||||||
|
"terminal.ansiRed": "#ed254e",
|
||||||
|
"terminal.ansiWhite": "#aaaeb8",
|
||||||
|
"terminal.ansiYellow": "#f9dc5c",
|
||||||
|
"terminal.selectionBackground": "#7cb7ff7f",
|
||||||
|
"terminalCursor.background": "#2f323e",
|
||||||
|
"terminalCursor.foreground": "#9295a0",
|
||||||
|
"debugToolBar.background": "#2f323e",
|
||||||
|
"debugToolBar.border": "#474b56",
|
||||||
|
"editor.stackFrameHighlightBackground": "#00c1e43f",
|
||||||
|
"editor.focusedStackFrameHighlightBackground": "#71f79f3f",
|
||||||
|
"debugView.exceptionLabelForeground": "#f9dc5c",
|
||||||
|
"debugView.exceptionLabelBackground": "#2f323e",
|
||||||
|
"debugView.stateLabelForeground": "#7cb7ff",
|
||||||
|
"debugView.stateLabelBackground": "#2f323e",
|
||||||
|
"debugView.valueChangedHighlight": "#f9dc5c33",
|
||||||
|
"debugTokenExpression.name": "#7cb7ff",
|
||||||
|
"debugTokenExpression.value": "#c3c7d1",
|
||||||
|
"debugTokenExpression.string": "#71f79f",
|
||||||
|
"debugTokenExpression.boolean": "#c3c7d1",
|
||||||
|
"debugTokenExpression.number": "#c74d89",
|
||||||
|
"debugTokenExpression.error": "#ed254e",
|
||||||
|
"testing.iconFailed": "#dcdfe4",
|
||||||
|
"testing.iconErrored": "#ed254e",
|
||||||
|
"testing.iconPassed": "#71f79f",
|
||||||
|
"testing.runAction": "#7cb7ff",
|
||||||
|
"testing.iconQueued": "#00c1e4",
|
||||||
|
"testing.iconUnset": "#9295a0",
|
||||||
|
"testing.iconSkipped": "#797c87",
|
||||||
|
"testing.peekBorder": "#60646f",
|
||||||
|
"testing.message.error.decorationForeground": "#ed254e",
|
||||||
|
"testing.message.error.lineBackground": "#ed254e3f",
|
||||||
|
"testing.message.warning.decorationForeground": "#dcdfe4",
|
||||||
|
"testing.message.warning.lineBackground": "#dcdfe43f",
|
||||||
|
"testing.message.info.decorationForeground": "#7cb7ff",
|
||||||
|
"testing.message.info.lineBackground": "#7cb7ff3f",
|
||||||
|
"testing.message.hint.decorationForeground": "#c74d89",
|
||||||
|
"testing.message.hint.lineBackground": "#c74d893f",
|
||||||
|
"welcomePage.background": "#161925",
|
||||||
|
"welcomePage.buttonBackground": "#2f323e",
|
||||||
|
"welcomePage.buttonHoverBackground": "#474b56",
|
||||||
|
"welcomePage.progress.background": "#7cb7ff",
|
||||||
|
"welcomePage.progress.foreground": "#161925",
|
||||||
|
"walkThrough.embeddedEditorBackground": "#161925",
|
||||||
|
"scm.providerBorder": "#474b56",
|
||||||
|
"gitDecoration.addedResourceForeground": "#71f79f",
|
||||||
|
"gitDecoration.modifiedResourceForeground": "#f9dc5c",
|
||||||
|
"gitDecoration.stageModifiedResourceForeground": "#00c1e4",
|
||||||
|
"gitDecoration.deletedResourceForeground": "#ed254e",
|
||||||
|
"gitDecoration.stageDeletedResourceForeground": "#ed254e",
|
||||||
|
"gitDecoration.untrackedResourceForeground": "#c3c7d1",
|
||||||
|
"gitDecoration.ignoredResourceForeground": "#60646f",
|
||||||
|
"gitDecoration.conflictingResourceForeground": "#00c1e4",
|
||||||
|
"gitDecoration.submoduleResourceForeground": "#c74d89",
|
||||||
|
"settings.headerForeground": "#c3c7d1",
|
||||||
|
"settings.modifiedItemIndicator": "#00c1e4",
|
||||||
|
"settings.dropdownBackground": "#2f323e",
|
||||||
|
"settings.dropdownForeground": "#aaaeb8",
|
||||||
|
"settings.dropdownListBorder": "#474b56",
|
||||||
|
"settings.checkboxBackground": "#7cb7ff",
|
||||||
|
"settings.checkboxForeground": "#161925",
|
||||||
|
"settings.checkboxBorder": "#7cb7ff",
|
||||||
|
"settings.textInputBackground": "#2f323e",
|
||||||
|
"settings.textInputForeground": "#aaaeb8",
|
||||||
|
"settings.numberInputBackground": "#2f323e",
|
||||||
|
"settings.numberInputForeground": "#aaaeb8",
|
||||||
|
"settings.focusedRowBackground": "#161925",
|
||||||
|
"notebook.focusedRowBorder": "#c3c7d1",
|
||||||
|
"notebook.rowHoverBackground": "#2f323e7f",
|
||||||
|
"breadcrumb.foreground": "#9295a0",
|
||||||
|
"breadcrumb.background": "#161925",
|
||||||
|
"breadcrumb.focusForeground": "#aaaeb8",
|
||||||
|
"breadcrumb.activeSelectionForeground": "#c3c7d1",
|
||||||
|
"breadcrumbPicker.background": "#161925",
|
||||||
|
"editor.snippetTabstopHighlightBackground": "#2f323e7f",
|
||||||
|
"editor.snippetFinalTabstopHighlightBackground": "#474b567f",
|
||||||
|
"symbolIcon.arrayForeground": "#c74d89",
|
||||||
|
"symbolIcon.booleanForeground": "#c3c7d1",
|
||||||
|
"symbolIcon.classForeground": "#7cb7ff",
|
||||||
|
"symbolIcon.colorForeground": "#00c1e4",
|
||||||
|
"symbolIcon.constantForeground": "#71f79f",
|
||||||
|
"symbolIcon.constructorForeground": "#c3c7d1",
|
||||||
|
"symbolIcon.enumeratorForeground": "#00c1e4",
|
||||||
|
"symbolIcon.enumeratorMemberForeground": "#7cb7ff",
|
||||||
|
"symbolIcon.eventForeground": "#dcdfe4",
|
||||||
|
"symbolIcon.fieldForeground": "#ed254e",
|
||||||
|
"symbolIcon.fileForeground": "#aaaeb8",
|
||||||
|
"symbolIcon.folderForeground": "#9295a0",
|
||||||
|
"symbolIcon.functionForeground": "#c3c7d1",
|
||||||
|
"symbolIcon.interfaceForeground": "#ed254e",
|
||||||
|
"symbolIcon.keyForeground": "#f9dc5c",
|
||||||
|
"symbolIcon.keywordForeground": "#7cb7ff",
|
||||||
|
"symbolIcon.methodForeground": "#00c1e4",
|
||||||
|
"symbolIcon.moduleForeground": "#00c1e4",
|
||||||
|
"symbolIcon.namespaceForeground": "#7cb7ff",
|
||||||
|
"symbolIcon.nullForeground": "#ed254e",
|
||||||
|
"symbolIcon.numberForeground": "#dcdfe4",
|
||||||
|
"symbolIcon.objectForeground": "#c3c7d1",
|
||||||
|
"symbolIcon.operatorForeground": "#ed254e",
|
||||||
|
"symbolIcon.packageForeground": "#dcdfe4",
|
||||||
|
"symbolIcon.propertyForeground": "#00c1e4",
|
||||||
|
"symbolIcon.referenceForeground": "#dcdfe4",
|
||||||
|
"symbolIcon.snippetForeground": "#9295a0",
|
||||||
|
"symbolIcon.stringForeground": "#71f79f",
|
||||||
|
"symbolIcon.structForeground": "#7cb7ff",
|
||||||
|
"symbolIcon.textForeground": "#c3c7d1",
|
||||||
|
"symbolIcon.typeParameterForeground": "#7cb7ff",
|
||||||
|
"symbolIcon.unitForeground": "#f9dc5c",
|
||||||
|
"symbolIcon.variableForeground": "#dcdfe4",
|
||||||
|
"debugIcon.breakpointForeground": "#ed254e",
|
||||||
|
"debugIcon.breakpointDisabledForeground": "#797c87",
|
||||||
|
"debugIcon.breakpointUnverifiedForeground": "#9295a0",
|
||||||
|
"debugIcon.breakpointCurrentStackframeForeground": "#71f79f",
|
||||||
|
"debugIcon.breakpointStackframeForeground": "#f9dc5c",
|
||||||
|
"debugIcon.startForeground": "#71f79f",
|
||||||
|
"debugIcon.pauseForeground": "#7cb7ff",
|
||||||
|
"debugIcon.stopForeground": "#ed254e",
|
||||||
|
"debugIcon.disconnectForeground": "#dcdfe4",
|
||||||
|
"debugIcon.restartForeground": "#c74d89",
|
||||||
|
"debugIcon.stepOverForeground": "#c3c7d1",
|
||||||
|
"debugIcon.stepIntoForeground": "#c3c7d1",
|
||||||
|
"debugIcon.stepOutForeground": "#c3c7d1",
|
||||||
|
"debugIcon.continueForeground": "#71f79f",
|
||||||
|
"debugIcon.stepBackForeground": "#c3c7d1",
|
||||||
|
"debugConsole.infoForeground": "#7cb7ff",
|
||||||
|
"debugConsole.warningForeground": "#dcdfe4",
|
||||||
|
"debugConsole.errorForeground": "#ed254e",
|
||||||
|
"debugConsole.sourceForeground": "#c3c7d1",
|
||||||
|
"debugConsoleInputIcon.foreground": "#797c87",
|
||||||
|
"notebook.cellBorderColor": "#2f323e3f",
|
||||||
|
"notebook.focusedEditorBorder": "#2f323e",
|
||||||
|
"notebookStatusSuccessIcon.foreground": "#71f79f",
|
||||||
|
"notebookStatusErrorIcon.foreground": "#ed254e",
|
||||||
|
"notebookStatusRunningIcon.foreground": "#7cb7ff",
|
||||||
|
"notebook.outputContainerBackgroundColor": "#161925",
|
||||||
|
"notebook.cellToolbarSeparator": "#2f323e3f",
|
||||||
|
"notebook.focusedCellBackground": "#2f323e7f",
|
||||||
|
"notebook.cellHoverBackground": "#2f323e3f",
|
||||||
|
"notebook.focusedCellBorder": "#c3c7d1",
|
||||||
|
"notebook.focusedCellShadow": "#0000003f",
|
||||||
|
"notebook.selectedCellBorder": "#797c87",
|
||||||
|
"notebook.cellStatusBarItemHoverBackground": "#2f323e3f",
|
||||||
|
"notebook.cellInsertionIndicator": "#71f79f",
|
||||||
|
"notebookScrollbarSlider.background": "#60646f7f",
|
||||||
|
"notebookScrollbarSlider.hoverBackground": "#797c877f",
|
||||||
|
"notebookScrollbarSlider.activeBackground": "#9295a07f",
|
||||||
|
"notebook.symbolHighlightBackground": "#c3c7d13f",
|
||||||
|
"notebook.inactiveFocusedCellBorder": "#9295a0",
|
||||||
|
"charts.foreground": "#aaaeb8",
|
||||||
|
"charts.lines": "#60646f",
|
||||||
|
"charts.red": "#ed254e",
|
||||||
|
"charts.blue": "#7cb7ff",
|
||||||
|
"charts.yellow": "#f9dc5c",
|
||||||
|
"charts.orange": "#dcdfe4",
|
||||||
|
"charts.green": "#71f79f",
|
||||||
|
"charts.purple": "#c3c7d1"
|
||||||
|
},
|
||||||
|
"tokenColors": [
|
||||||
|
{
|
||||||
|
"settings": {
|
||||||
|
"background": "#161925",
|
||||||
|
"foreground": "#aaaeb8",
|
||||||
|
"selectionBorder": "#9295a0",
|
||||||
|
"findHighlight": "#f9dc5c",
|
||||||
|
"findHighlightForeground": "#161925",
|
||||||
|
"activeGuide": "#dcdfe4",
|
||||||
|
"bracketsForeground": "#aaaeb87F",
|
||||||
|
"bracketsOptions": "stippled_underline",
|
||||||
|
"bracketsContentsForeground": "#aaaeb87F",
|
||||||
|
"tagsOptions": "stippled_underline"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Comment",
|
||||||
|
"scope": "comment",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#60646f"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Constant",
|
||||||
|
"scope": "constant",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#c74d89"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Entity",
|
||||||
|
"scope": "entity",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#00c1e4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Invalid",
|
||||||
|
"scope": "invalid",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#ed254e"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Keyword",
|
||||||
|
"scope": "keyword",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#c3c7d1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Storage",
|
||||||
|
"scope": "storage",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#c74d89"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "String",
|
||||||
|
"scope": "string",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#71f79f"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Support",
|
||||||
|
"scope": "support",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#00c1e4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Variable",
|
||||||
|
"scope": "variable",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#c3c7d1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Markup Heading",
|
||||||
|
"scope": "markup.heading",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#00c1e4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Markup Deleted",
|
||||||
|
"scope": "markup.deleted",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#ed254e"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Markup Inserted",
|
||||||
|
"scope": "markup.inserted",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#71f79f"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Markup Changed",
|
||||||
|
"scope": "markup.changed",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#f9dc5c"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Markup Underline",
|
||||||
|
"scope": "markup.underline",
|
||||||
|
"settings": {
|
||||||
|
"fontStyle": "underline"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Markup Underline Link",
|
||||||
|
"scope": "markup.underline.link",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#7cb7ff"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Markup List",
|
||||||
|
"scope": "markup.list",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#c3c7d1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Markup Raw",
|
||||||
|
"scope": "markup.raw",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#c74d89"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,614 @@
|
||||||
|
{
|
||||||
|
"name": "Betelgeuse Light",
|
||||||
|
"type": "light",
|
||||||
|
"colors": {
|
||||||
|
"focusBorder": "#4c5058",
|
||||||
|
"foreground": "#4c5058",
|
||||||
|
"widget.shadow": "#4c505866",
|
||||||
|
"selection.background": "#cccdcf",
|
||||||
|
"descriptionForeground": "#666970",
|
||||||
|
"errorForeground": "#ff4972",
|
||||||
|
"icon.foreground": "#666970",
|
||||||
|
"sash.hoverBorder": "#a0dbff",
|
||||||
|
"textBlockQuote.background": "#e5e6e7",
|
||||||
|
"textBlockQuote.border": "#e5e6e7",
|
||||||
|
"textCodeBlock.background": "#ffffff",
|
||||||
|
"textLink.activeForeground": "#24e5ff",
|
||||||
|
"textLink.foreground": "#a0dbff",
|
||||||
|
"textPreformat.foreground": "#dcdfe4",
|
||||||
|
"textSeparator.foreground": "#999ba0",
|
||||||
|
"button.background": "#a0dbff",
|
||||||
|
"button.foreground": "#ffffff",
|
||||||
|
"button.hoverBackground": "#24e5ff",
|
||||||
|
"button.secondaryForeground": "#ffffff",
|
||||||
|
"button.secondaryBackground": "#666970",
|
||||||
|
"button.secondaryHoverBackground": "#7f8288",
|
||||||
|
"checkbox.background": "#a0dbff",
|
||||||
|
"checkbox.foreground": "#ffffff",
|
||||||
|
"checkbox.border": "#e5e6e7",
|
||||||
|
"dropdown.background": "#e5e6e7",
|
||||||
|
"dropdown.listBackground": "#e5e6e7",
|
||||||
|
"dropdown.border": "#e5e6e7",
|
||||||
|
"dropdown.foreground": "#666970",
|
||||||
|
"input.background": "#e5e6e7",
|
||||||
|
"input.border": "#e5e6e7",
|
||||||
|
"input.foreground": "#666970",
|
||||||
|
"input.placeholderForeground": "#cccdcf",
|
||||||
|
"inputOption.activeBackground": "#cccdcf",
|
||||||
|
"inputOption.activeBorder": "#24e5ff",
|
||||||
|
"inputOption.activeForeground": "#4c5058",
|
||||||
|
"inputValidation.errorBackground": "#e5e6e7",
|
||||||
|
"inputValidation.errorForeground": "#ff4972",
|
||||||
|
"inputValidation.errorBorder": "#ff4972",
|
||||||
|
"inputValidation.infoBackground": "#e5e6e7",
|
||||||
|
"inputValidation.infoForeground": "#a0dbff",
|
||||||
|
"inputValidation.infoBorder": "#a0dbff",
|
||||||
|
"inputValidation.warningBackground": "#e5e6e7",
|
||||||
|
"inputValidation.warningForeground": "#dcdfe4",
|
||||||
|
"inputValidation.warningBorder": "#dcdfe4",
|
||||||
|
"scrollbar.shadow": "#4c505866",
|
||||||
|
"scrollbarSlider.activeBackground": "#7f82887f",
|
||||||
|
"scrollbarSlider.background": "#b2b4b77f",
|
||||||
|
"scrollbarSlider.hoverBackground": "#999ba07f",
|
||||||
|
"badge.foreground": "#ffffff",
|
||||||
|
"badge.background": "#4c5058",
|
||||||
|
"progressBar.background": "#95ffc3",
|
||||||
|
"list.activeSelectionBackground": "#4c505833",
|
||||||
|
"list.activeSelectionForeground": "#4c5058",
|
||||||
|
"list.dropBackground": "#e5e6e7",
|
||||||
|
"list.focusBackground": "#b2b4b73f",
|
||||||
|
"list.focusForeground": "#4c5058",
|
||||||
|
"list.highlightForeground": "#ffff80",
|
||||||
|
"list.hoverBackground": "#e5e6e733",
|
||||||
|
"list.hoverForeground": "#4c5058",
|
||||||
|
"list.inactiveSelectionBackground": "#cccdcf3f",
|
||||||
|
"list.inactiveSelectionForeground": "#666970",
|
||||||
|
"list.inactiveFocusBackground": "#e5e6e73f",
|
||||||
|
"list.invalidItemForeground": "#ff4972",
|
||||||
|
"list.errorForeground": "#ff4972",
|
||||||
|
"list.warningForeground": "#ffff80",
|
||||||
|
"listFilterWidget.background": "#e5e6e7",
|
||||||
|
"listFilterWidget.outline": "#a0dbff",
|
||||||
|
"listFilterWidget.noMatchesOutline": "#ff4972",
|
||||||
|
"list.filterMatchBackground": "#ffff8033",
|
||||||
|
"list.filterMatchBorder": "#ffff8033",
|
||||||
|
"tree.indentGuidesStroke": "#e5e6e7",
|
||||||
|
"list.deemphasizedForeground": "#999ba0",
|
||||||
|
"activityBar.background": "#ffffff",
|
||||||
|
"activityBar.dropBorder": "#a0dbff",
|
||||||
|
"activityBar.foreground": "#7f8288",
|
||||||
|
"activityBar.inactiveForeground": "#999ba0",
|
||||||
|
"activityBar.border": "#ffffff",
|
||||||
|
"activityBarBadge.background": "#4c5058",
|
||||||
|
"activityBarBadge.foreground": "#ffffff",
|
||||||
|
"activityBar.activeBorder": "#666970",
|
||||||
|
"activityBar.activeBackground": "#e5e6e733",
|
||||||
|
"activityBar.activeFocusBorder": "#4c5058",
|
||||||
|
"sideBar.background": "#ffffff",
|
||||||
|
"sideBar.foreground": "#666970",
|
||||||
|
"sideBar.border": "#e5e6e7",
|
||||||
|
"sideBar.dropBackground": "#e5e6e73f",
|
||||||
|
"sideBarTitle.foreground": "#7f8288",
|
||||||
|
"sideBarSectionHeader.background": "#cccdcf",
|
||||||
|
"sideBarSectionHeader.foreground": "#666970",
|
||||||
|
"sideBarSectionHeader.border": "#ffffff",
|
||||||
|
"minimap.findMatchHighlight": "#ffff80",
|
||||||
|
"minimap.selectionHighlight": "#a0dbff80",
|
||||||
|
"minimap.errorHighlight": "#ff497280",
|
||||||
|
"minimap.warningHighlight": "#dcdfe480",
|
||||||
|
"minimap.background": "#ffffff",
|
||||||
|
"minimapSlider.background": "#e5e6e733",
|
||||||
|
"minimapSlider.hoverBackground": "#cccdcf33",
|
||||||
|
"minimapSlider.activeBackground": "#b2b4b733",
|
||||||
|
"minimapGutter.addedBackground": "#95ffc380",
|
||||||
|
"minimapGutter.modifiedBackground": "#ffff8080",
|
||||||
|
"minimapGutter.deletedBackground": "#ff497280",
|
||||||
|
"editorGroup.border": "#e5e6e7",
|
||||||
|
"editorGroup.dropBackground": "#cccdcf7f",
|
||||||
|
"editorGroupHeader.noTabsBackground": "#ffffff",
|
||||||
|
"editorGroupHeader.tabsBackground": "#ffffff",
|
||||||
|
"editorGroupHeader.tabsBorder": "#ffffff",
|
||||||
|
"editorGroupHeader.border": "#ffffff",
|
||||||
|
"editorGroup.emptyBackground": "#ffffff",
|
||||||
|
"editorGroup.focusedEmptyBorder": "#e5e6e7",
|
||||||
|
"tab.activeBackground": "#ffffff",
|
||||||
|
"tab.unfocusedActiveBackground": "#ffffff",
|
||||||
|
"tab.activeForeground": "#666970",
|
||||||
|
"tab.border": "#ffffff",
|
||||||
|
"tab.lastPinnedBorder": "#eb71ad",
|
||||||
|
"tab.inactiveBackground": "#e5e6e7",
|
||||||
|
"tab.unfocusedInactiveBackground": "#e5e6e7",
|
||||||
|
"tab.inactiveForeground": "#b2b4b7",
|
||||||
|
"tab.unfocusedActiveForeground": "#b2b4b7",
|
||||||
|
"tab.unfocusedInactiveForeground": "#cccdcf",
|
||||||
|
"tab.hoverBackground": "#e5e6e780",
|
||||||
|
"tab.unfocusedHoverBackground": "#e5e6e780",
|
||||||
|
"tab.hoverForeground": "#7f8288",
|
||||||
|
"tab.unfocusedHoverForeground": "#999ba0",
|
||||||
|
"tab.activeModifiedBorder": "#ffff80",
|
||||||
|
"tab.inactiveModifiedBorder": "#ffff80",
|
||||||
|
"tab.unfocusedActiveModifiedBorder": "#ffff80",
|
||||||
|
"tab.unfocusedInactiveModifiedBorder": "#ffff80",
|
||||||
|
"editorPane.background": "#ffffff",
|
||||||
|
"editor.background": "#ffffff",
|
||||||
|
"editor.foreground": "#4c5058",
|
||||||
|
"editorLineNumber.foreground": "#cccdcf",
|
||||||
|
"editorLineNumber.activeForeground": "#999ba0",
|
||||||
|
"editorCursor.background": "#ffffff",
|
||||||
|
"editorCursor.foreground": "#4c5058",
|
||||||
|
"editor.selectionBackground": "#a0dbff33",
|
||||||
|
"editor.selectionForeground": "#4c5058",
|
||||||
|
"editor.inactiveSelectionBackground": "#a0dbff33",
|
||||||
|
"editor.selectionHighlightBackground": "#e5e6e7",
|
||||||
|
"editor.wordHighlightBackground": "#4c505833",
|
||||||
|
"editor.wordHighlightStrongBackground": "#eb71ad33",
|
||||||
|
"editor.findMatchBackground": "#ffff803f",
|
||||||
|
"editor.findMatchHighlightBackground": "#ffff8033",
|
||||||
|
"editor.findRangeHighlightBackground": "#e5e6e7",
|
||||||
|
"editor.hoverHighlightBackground": "#cccdcf7f",
|
||||||
|
"editor.lineHighlightBackground": "#ffffff",
|
||||||
|
"editor.lineHighlightBorder": "#e5e6e7",
|
||||||
|
"editorLink.activeForeground": "#24e5ff",
|
||||||
|
"editor.rangeHighlightBackground": "#ffff8033",
|
||||||
|
"editor.symbolHighlightBackground": "#4c505833",
|
||||||
|
"editorWhitespace.foreground": "#e5e6e7",
|
||||||
|
"editorIndentGuide.background": "#e5e6e7",
|
||||||
|
"editorIndentGuide.activeBackground": "#cccdcf",
|
||||||
|
"editorRuler.foreground": "#e5e6e7",
|
||||||
|
"editorCodeLens.foreground": "#7f8288",
|
||||||
|
"editorLightBulb.foreground": "#ffff80",
|
||||||
|
"editorLightBulbAutoFix.foreground": "#a0dbff",
|
||||||
|
"editorBracketMatch.background": "#e5e6e7",
|
||||||
|
"editorBracketMatch.border": "#cccdcf",
|
||||||
|
"editorBracketHighlight.foreground1": "#4c5058",
|
||||||
|
"editorBracketHighlight.foreground2": "#ffff80",
|
||||||
|
"editorBracketHighlight.foreground3": "#24e5ff",
|
||||||
|
"editorBracketHighlight.foreground4": "#4c5058",
|
||||||
|
"editorBracketHighlight.foreground5": "#95ffc3",
|
||||||
|
"editorBracketHighlight.foreground6": "#a0dbff",
|
||||||
|
"editorBracketHighlight.unexpectedBracket": "#ff4972",
|
||||||
|
"editor.foldBackground": "#e5e6e766",
|
||||||
|
"editorOverviewRuler.border": "#e5e6e7",
|
||||||
|
"editorOverviewRuler.findMatchForeground": "#ffff80bf",
|
||||||
|
"editorOverviewRuler.rangeHighlightForeground": "#cccdcfbf",
|
||||||
|
"editorOverviewRuler.selectionHighlightForeground": "#e5e6e7bf",
|
||||||
|
"editorOverviewRuler.wordHighlightForeground": "#cccdcfbf",
|
||||||
|
"editorOverviewRuler.wordHighlightStrongForeground": "#b2b4b7bf",
|
||||||
|
"editorOverviewRuler.modifiedForeground": "#ffff807f",
|
||||||
|
"editorOverviewRuler.addedForeground": "#95ffc37f",
|
||||||
|
"editorOverviewRuler.deletedForeground": "#ff49727f",
|
||||||
|
"editorOverviewRuler.errorForeground": "#ff49727f",
|
||||||
|
"editorOverviewRuler.warningForeground": "#dcdfe47f",
|
||||||
|
"editorOverviewRuler.infoForeground": "#a0dbff7f",
|
||||||
|
"editorOverviewRuler.bracketMatchForeground": "#b2b4b7",
|
||||||
|
"editorError.foreground": "#ff4972",
|
||||||
|
"editorError.border": "#4c5058",
|
||||||
|
"editorWarning.foreground": "#dcdfe4",
|
||||||
|
"editorWarning.border": "#666970",
|
||||||
|
"editorInfo.foreground": "#a0dbff",
|
||||||
|
"editorInfo.border": "#7f8288",
|
||||||
|
"editorHint.foreground": "#eb71ad",
|
||||||
|
"editorHint.border": "#999ba0",
|
||||||
|
"problemsErrorIcon.foreground": "#ff4972",
|
||||||
|
"problemsWarningIcon.foreground": "#dcdfe4",
|
||||||
|
"problemsInfoIcon.foreground": "#a0dbff",
|
||||||
|
"editorUnnecessaryCode.opacity": "#0000007f",
|
||||||
|
"editorGutter.background": "#ffffff",
|
||||||
|
"editorGutter.modifiedBackground": "#ffff80",
|
||||||
|
"editorGutter.addedBackground": "#95ffc3",
|
||||||
|
"editorGutter.deletedBackground": "#ff4972",
|
||||||
|
"editorGutter.commentRangeForeground": "#b2b4b7",
|
||||||
|
"editorGutter.foldingControlForeground": "#7f8288",
|
||||||
|
"diffEditor.insertedTextBackground": "#95ffc320",
|
||||||
|
"diffEditor.removedTextBackground": "#ff497220",
|
||||||
|
"diffEditor.border": "#e5e6e7",
|
||||||
|
"diffEditor.diagonalFill": "#e5e6e77f",
|
||||||
|
"editorWidget.foreground": "#666970",
|
||||||
|
"editorWidget.background": "#e5e6e7",
|
||||||
|
"editorWidget.border": "#e5e6e7",
|
||||||
|
"editorWidget.resizeBorder": "#a0dbff",
|
||||||
|
"editorSuggestWidget.background": "#e5e6e7",
|
||||||
|
"editorSuggestWidget.border": "#e5e6e7",
|
||||||
|
"editorSuggestWidget.foreground": "#666970",
|
||||||
|
"editorSuggestWidget.highlightForeground": "#eb71ad",
|
||||||
|
"editorSuggestWidget.selectedBackground": "#cccdcf",
|
||||||
|
"editorHoverWidget.foreground": "#666970",
|
||||||
|
"editorHoverWidget.background": "#e5e6e7",
|
||||||
|
"editorHoverWidget.border": "#e5e6e7",
|
||||||
|
"editorHoverWidget.statusBarBackground": "#a0dbff33",
|
||||||
|
"debugExceptionWidget.background": "#e5e6e7",
|
||||||
|
"debugExceptionWidget.border": "#e5e6e7",
|
||||||
|
"editorMarkerNavigation.background": "#e5e6e7",
|
||||||
|
"editorMarkerNavigationError.background": "#ff4972",
|
||||||
|
"editorMarkerNavigationWarning.background": "#dcdfe4",
|
||||||
|
"editorMarkerNavigationInfo.background": "#a0dbff",
|
||||||
|
"peekView.border": "#eb71ad",
|
||||||
|
"peekViewEditor.background": "#e5e6e77f",
|
||||||
|
"peekViewEditorGutter.background": "#e5e6e77f",
|
||||||
|
"peekViewEditor.matchHighlightBackground": "#ffff807f",
|
||||||
|
"peekViewResult.background": "#e5e6e7",
|
||||||
|
"peekViewResult.fileForeground": "#666970",
|
||||||
|
"peekViewResult.lineForeground": "#cccdcf",
|
||||||
|
"peekViewResult.matchHighlightBackground": "#ffff80",
|
||||||
|
"peekViewResult.selectionBackground": "#b2b4b7",
|
||||||
|
"peekViewResult.selectionForeground": "#4c5058",
|
||||||
|
"peekViewTitle.background": "#e5e6e7",
|
||||||
|
"peekViewTitleDescription.foreground": "#7f8288",
|
||||||
|
"peekViewTitleLabel.foreground": "#4c5058",
|
||||||
|
"merge.currentHeaderBackground": "#24e5ff4c",
|
||||||
|
"merge.currentContentBackground": "#24e5ff4c",
|
||||||
|
"merge.incomingHeaderBackground": "#a0dbff4c",
|
||||||
|
"merge.incomingContentBackground": "#a0dbff4c",
|
||||||
|
"merge.border": "#999ba0",
|
||||||
|
"merge.commonContentBackground": "#4c50584c",
|
||||||
|
"merge.commonHeaderBackground": "#4c50584c",
|
||||||
|
"editorOverviewRuler.currentContentForeground": "#24e5ff",
|
||||||
|
"editorOverviewRuler.incomingContentForeground": "#a0dbff",
|
||||||
|
"editorOverviewRuler.commonContentForeground": "#4c5058",
|
||||||
|
"panel.background": "#ffffff",
|
||||||
|
"panel.border": "#e5e6e7",
|
||||||
|
"panel.dropBorder": "#a0dbff",
|
||||||
|
"panelTitle.activeBorder": "#b2b4b7",
|
||||||
|
"panelTitle.activeForeground": "#666970",
|
||||||
|
"panelTitle.inactiveForeground": "#999ba0",
|
||||||
|
"panelSection.border": "#e5e6e7",
|
||||||
|
"panelSection.dropBackground": "#e5e6e73f",
|
||||||
|
"panelSectionHeader.background": "#cccdcf",
|
||||||
|
"panelSectionHeader.foreground": "#666970",
|
||||||
|
"panelSectionHeader.border": "#ffffff",
|
||||||
|
"imagePreview.border": "#e5e6e7",
|
||||||
|
"statusBar.background": "#a0dbff",
|
||||||
|
"statusBar.foreground": "#ffffff",
|
||||||
|
"statusBar.border": "#ffffff",
|
||||||
|
"statusBar.debuggingBackground": "#dcdfe4",
|
||||||
|
"statusBar.debuggingForeground": "#ffffff",
|
||||||
|
"statusBar.debuggingBorder": "#ffffff",
|
||||||
|
"statusBar.noFolderBackground": "#4c5058",
|
||||||
|
"statusBar.noFolderForeground": "#ffffff",
|
||||||
|
"statusBar.noFolderBorder": "#ffffff",
|
||||||
|
"statusBarItem.activeBackground": "#24e5ff",
|
||||||
|
"statusBarItem.hoverBackground": "#95ffc3",
|
||||||
|
"statusBarItem.prominentBackground": "#24e5ff",
|
||||||
|
"statusBarItem.prominentHoverBackground": "#95ffc3",
|
||||||
|
"statusBarItem.remoteBackground": "#24e5ff",
|
||||||
|
"statusBarItem.remoteForeground": "#ffffff",
|
||||||
|
"statusBarItem.errorBackground": "#ff4972",
|
||||||
|
"statusBarItem.errorForeground": "#ffffff",
|
||||||
|
"titleBar.activeBackground": "#ffffff",
|
||||||
|
"titleBar.activeForeground": "#7f8288",
|
||||||
|
"titleBar.inactiveBackground": "#ffffff",
|
||||||
|
"titleBar.inactiveForeground": "#b2b4b7",
|
||||||
|
"menubar.selectionForeground": "#4c5058",
|
||||||
|
"menubar.selectionBackground": "#e5e6e7",
|
||||||
|
"menu.foreground": "#666970",
|
||||||
|
"menu.background": "#ffffff",
|
||||||
|
"menu.selectionForeground": "#4c5058",
|
||||||
|
"menu.selectionBackground": "#e5e6e7",
|
||||||
|
"menu.separatorBackground": "#cccdcf",
|
||||||
|
"notificationCenterHeader.foreground": "#666970",
|
||||||
|
"notificationCenterHeader.background": "#cccdcf",
|
||||||
|
"notificationToast.border": "#b2b4b7",
|
||||||
|
"notifications.foreground": "#4c5058",
|
||||||
|
"notifications.background": "#e5e6e7",
|
||||||
|
"notifications.border": "#b2b4b7",
|
||||||
|
"notificationLink.foreground": "#a0dbff",
|
||||||
|
"notificationsErrorIcon.foreground": "#ff4972",
|
||||||
|
"notificationsWarningIcon.foreground": "#dcdfe4",
|
||||||
|
"notificationsInfoIcon.foreground": "#a0dbff",
|
||||||
|
"extensionButton.prominentForeground": "#ffffff",
|
||||||
|
"extensionButton.prominentBackground": "#a0dbff",
|
||||||
|
"extensionButton.prominentHoverBackground": "#24e5ff",
|
||||||
|
"extensionBadge.remoteBackground": "#eb71ad",
|
||||||
|
"extensionBadge.remoteForeground": "#ffffff",
|
||||||
|
"pickerGroup.border": "#cccdcf",
|
||||||
|
"pickerGroup.foreground": "#999ba0",
|
||||||
|
"quickInput.background": "#e5e6e7",
|
||||||
|
"quickInput.foreground": "#4c5058",
|
||||||
|
"quickInputTitle.background": "#cccdcf",
|
||||||
|
"terminal.background": "#ffffff",
|
||||||
|
"terminal.foreground": "#666970",
|
||||||
|
"terminal.ansiBlack": "#ffffff",
|
||||||
|
"terminal.ansiBlue": "#a0dbff",
|
||||||
|
"terminal.ansiBrightBlack": "#e5e6e7",
|
||||||
|
"terminal.ansiBrightBlue": "#a0dbff",
|
||||||
|
"terminal.ansiBrightCyan": "#24e5ff",
|
||||||
|
"terminal.ansiBrightGreen": "#24e5ff",
|
||||||
|
"terminal.ansiBrightMagenta": "#eb71ad",
|
||||||
|
"terminal.ansiBrightRed": "#dcdfe4",
|
||||||
|
"terminal.ansiBrightWhite": "#4c5058",
|
||||||
|
"terminal.ansiBrightYellow": "#ffff80",
|
||||||
|
"terminal.ansiCyan": "#24e5ff",
|
||||||
|
"terminal.ansiGreen": "#95ffc3",
|
||||||
|
"terminal.ansiMagenta": "#eb71ad",
|
||||||
|
"terminal.ansiRed": "#ff4972",
|
||||||
|
"terminal.ansiWhite": "#666970",
|
||||||
|
"terminal.ansiYellow": "#ffff80",
|
||||||
|
"terminal.selectionBackground": "#a0dbff7f",
|
||||||
|
"terminalCursor.background": "#e5e6e7",
|
||||||
|
"terminalCursor.foreground": "#7f8288",
|
||||||
|
"debugToolBar.background": "#e5e6e7",
|
||||||
|
"debugToolBar.border": "#cccdcf",
|
||||||
|
"editor.stackFrameHighlightBackground": "#24e5ff3f",
|
||||||
|
"editor.focusedStackFrameHighlightBackground": "#95ffc33f",
|
||||||
|
"debugView.exceptionLabelForeground": "#ffff80",
|
||||||
|
"debugView.exceptionLabelBackground": "#e5e6e7",
|
||||||
|
"debugView.stateLabelForeground": "#a0dbff",
|
||||||
|
"debugView.stateLabelBackground": "#e5e6e7",
|
||||||
|
"debugView.valueChangedHighlight": "#ffff8033",
|
||||||
|
"debugTokenExpression.name": "#a0dbff",
|
||||||
|
"debugTokenExpression.value": "#4c5058",
|
||||||
|
"debugTokenExpression.string": "#95ffc3",
|
||||||
|
"debugTokenExpression.boolean": "#4c5058",
|
||||||
|
"debugTokenExpression.number": "#eb71ad",
|
||||||
|
"debugTokenExpression.error": "#ff4972",
|
||||||
|
"testing.iconFailed": "#dcdfe4",
|
||||||
|
"testing.iconErrored": "#ff4972",
|
||||||
|
"testing.iconPassed": "#95ffc3",
|
||||||
|
"testing.runAction": "#a0dbff",
|
||||||
|
"testing.iconQueued": "#24e5ff",
|
||||||
|
"testing.iconUnset": "#7f8288",
|
||||||
|
"testing.iconSkipped": "#999ba0",
|
||||||
|
"testing.peekBorder": "#b2b4b7",
|
||||||
|
"testing.message.error.decorationForeground": "#ff4972",
|
||||||
|
"testing.message.error.lineBackground": "#ff49723f",
|
||||||
|
"testing.message.warning.decorationForeground": "#dcdfe4",
|
||||||
|
"testing.message.warning.lineBackground": "#dcdfe43f",
|
||||||
|
"testing.message.info.decorationForeground": "#a0dbff",
|
||||||
|
"testing.message.info.lineBackground": "#a0dbff3f",
|
||||||
|
"testing.message.hint.decorationForeground": "#eb71ad",
|
||||||
|
"testing.message.hint.lineBackground": "#eb71ad3f",
|
||||||
|
"welcomePage.background": "#ffffff",
|
||||||
|
"welcomePage.buttonBackground": "#e5e6e7",
|
||||||
|
"welcomePage.buttonHoverBackground": "#cccdcf",
|
||||||
|
"welcomePage.progress.background": "#a0dbff",
|
||||||
|
"welcomePage.progress.foreground": "#ffffff",
|
||||||
|
"walkThrough.embeddedEditorBackground": "#ffffff",
|
||||||
|
"scm.providerBorder": "#cccdcf",
|
||||||
|
"gitDecoration.addedResourceForeground": "#95ffc3",
|
||||||
|
"gitDecoration.modifiedResourceForeground": "#ffff80",
|
||||||
|
"gitDecoration.stageModifiedResourceForeground": "#24e5ff",
|
||||||
|
"gitDecoration.deletedResourceForeground": "#ff4972",
|
||||||
|
"gitDecoration.stageDeletedResourceForeground": "#ff4972",
|
||||||
|
"gitDecoration.untrackedResourceForeground": "#4c5058",
|
||||||
|
"gitDecoration.ignoredResourceForeground": "#b2b4b7",
|
||||||
|
"gitDecoration.conflictingResourceForeground": "#24e5ff",
|
||||||
|
"gitDecoration.submoduleResourceForeground": "#eb71ad",
|
||||||
|
"settings.headerForeground": "#4c5058",
|
||||||
|
"settings.modifiedItemIndicator": "#24e5ff",
|
||||||
|
"settings.dropdownBackground": "#e5e6e7",
|
||||||
|
"settings.dropdownForeground": "#666970",
|
||||||
|
"settings.dropdownListBorder": "#cccdcf",
|
||||||
|
"settings.checkboxBackground": "#a0dbff",
|
||||||
|
"settings.checkboxForeground": "#ffffff",
|
||||||
|
"settings.checkboxBorder": "#a0dbff",
|
||||||
|
"settings.textInputBackground": "#e5e6e7",
|
||||||
|
"settings.textInputForeground": "#666970",
|
||||||
|
"settings.numberInputBackground": "#e5e6e7",
|
||||||
|
"settings.numberInputForeground": "#666970",
|
||||||
|
"settings.focusedRowBackground": "#ffffff",
|
||||||
|
"notebook.focusedRowBorder": "#4c5058",
|
||||||
|
"notebook.rowHoverBackground": "#e5e6e77f",
|
||||||
|
"breadcrumb.foreground": "#7f8288",
|
||||||
|
"breadcrumb.background": "#ffffff",
|
||||||
|
"breadcrumb.focusForeground": "#666970",
|
||||||
|
"breadcrumb.activeSelectionForeground": "#4c5058",
|
||||||
|
"breadcrumbPicker.background": "#ffffff",
|
||||||
|
"editor.snippetTabstopHighlightBackground": "#e5e6e77f",
|
||||||
|
"editor.snippetFinalTabstopHighlightBackground": "#cccdcf7f",
|
||||||
|
"symbolIcon.arrayForeground": "#eb71ad",
|
||||||
|
"symbolIcon.booleanForeground": "#4c5058",
|
||||||
|
"symbolIcon.classForeground": "#a0dbff",
|
||||||
|
"symbolIcon.colorForeground": "#24e5ff",
|
||||||
|
"symbolIcon.constantForeground": "#95ffc3",
|
||||||
|
"symbolIcon.constructorForeground": "#4c5058",
|
||||||
|
"symbolIcon.enumeratorForeground": "#24e5ff",
|
||||||
|
"symbolIcon.enumeratorMemberForeground": "#a0dbff",
|
||||||
|
"symbolIcon.eventForeground": "#dcdfe4",
|
||||||
|
"symbolIcon.fieldForeground": "#ff4972",
|
||||||
|
"symbolIcon.fileForeground": "#666970",
|
||||||
|
"symbolIcon.folderForeground": "#7f8288",
|
||||||
|
"symbolIcon.functionForeground": "#4c5058",
|
||||||
|
"symbolIcon.interfaceForeground": "#ff4972",
|
||||||
|
"symbolIcon.keyForeground": "#ffff80",
|
||||||
|
"symbolIcon.keywordForeground": "#a0dbff",
|
||||||
|
"symbolIcon.methodForeground": "#24e5ff",
|
||||||
|
"symbolIcon.moduleForeground": "#24e5ff",
|
||||||
|
"symbolIcon.namespaceForeground": "#a0dbff",
|
||||||
|
"symbolIcon.nullForeground": "#ff4972",
|
||||||
|
"symbolIcon.numberForeground": "#dcdfe4",
|
||||||
|
"symbolIcon.objectForeground": "#4c5058",
|
||||||
|
"symbolIcon.operatorForeground": "#ff4972",
|
||||||
|
"symbolIcon.packageForeground": "#dcdfe4",
|
||||||
|
"symbolIcon.propertyForeground": "#24e5ff",
|
||||||
|
"symbolIcon.referenceForeground": "#dcdfe4",
|
||||||
|
"symbolIcon.snippetForeground": "#7f8288",
|
||||||
|
"symbolIcon.stringForeground": "#95ffc3",
|
||||||
|
"symbolIcon.structForeground": "#a0dbff",
|
||||||
|
"symbolIcon.textForeground": "#4c5058",
|
||||||
|
"symbolIcon.typeParameterForeground": "#a0dbff",
|
||||||
|
"symbolIcon.unitForeground": "#ffff80",
|
||||||
|
"symbolIcon.variableForeground": "#dcdfe4",
|
||||||
|
"debugIcon.breakpointForeground": "#ff4972",
|
||||||
|
"debugIcon.breakpointDisabledForeground": "#999ba0",
|
||||||
|
"debugIcon.breakpointUnverifiedForeground": "#7f8288",
|
||||||
|
"debugIcon.breakpointCurrentStackframeForeground": "#95ffc3",
|
||||||
|
"debugIcon.breakpointStackframeForeground": "#ffff80",
|
||||||
|
"debugIcon.startForeground": "#95ffc3",
|
||||||
|
"debugIcon.pauseForeground": "#a0dbff",
|
||||||
|
"debugIcon.stopForeground": "#ff4972",
|
||||||
|
"debugIcon.disconnectForeground": "#dcdfe4",
|
||||||
|
"debugIcon.restartForeground": "#eb71ad",
|
||||||
|
"debugIcon.stepOverForeground": "#4c5058",
|
||||||
|
"debugIcon.stepIntoForeground": "#4c5058",
|
||||||
|
"debugIcon.stepOutForeground": "#4c5058",
|
||||||
|
"debugIcon.continueForeground": "#95ffc3",
|
||||||
|
"debugIcon.stepBackForeground": "#4c5058",
|
||||||
|
"debugConsole.infoForeground": "#a0dbff",
|
||||||
|
"debugConsole.warningForeground": "#dcdfe4",
|
||||||
|
"debugConsole.errorForeground": "#ff4972",
|
||||||
|
"debugConsole.sourceForeground": "#4c5058",
|
||||||
|
"debugConsoleInputIcon.foreground": "#999ba0",
|
||||||
|
"notebook.cellBorderColor": "#e5e6e73f",
|
||||||
|
"notebook.focusedEditorBorder": "#e5e6e7",
|
||||||
|
"notebookStatusSuccessIcon.foreground": "#95ffc3",
|
||||||
|
"notebookStatusErrorIcon.foreground": "#ff4972",
|
||||||
|
"notebookStatusRunningIcon.foreground": "#a0dbff",
|
||||||
|
"notebook.outputContainerBackgroundColor": "#ffffff",
|
||||||
|
"notebook.cellToolbarSeparator": "#e5e6e73f",
|
||||||
|
"notebook.focusedCellBackground": "#e5e6e77f",
|
||||||
|
"notebook.cellHoverBackground": "#e5e6e73f",
|
||||||
|
"notebook.focusedCellBorder": "#4c5058",
|
||||||
|
"notebook.focusedCellShadow": "#0000003f",
|
||||||
|
"notebook.selectedCellBorder": "#999ba0",
|
||||||
|
"notebook.cellStatusBarItemHoverBackground": "#e5e6e73f",
|
||||||
|
"notebook.cellInsertionIndicator": "#95ffc3",
|
||||||
|
"notebookScrollbarSlider.background": "#b2b4b77f",
|
||||||
|
"notebookScrollbarSlider.hoverBackground": "#999ba07f",
|
||||||
|
"notebookScrollbarSlider.activeBackground": "#7f82887f",
|
||||||
|
"notebook.symbolHighlightBackground": "#4c50583f",
|
||||||
|
"notebook.inactiveFocusedCellBorder": "#7f8288",
|
||||||
|
"charts.foreground": "#666970",
|
||||||
|
"charts.lines": "#b2b4b7",
|
||||||
|
"charts.red": "#ff4972",
|
||||||
|
"charts.blue": "#a0dbff",
|
||||||
|
"charts.yellow": "#ffff80",
|
||||||
|
"charts.orange": "#dcdfe4",
|
||||||
|
"charts.green": "#95ffc3",
|
||||||
|
"charts.purple": "#4c5058"
|
||||||
|
},
|
||||||
|
"tokenColors": [
|
||||||
|
{
|
||||||
|
"settings": {
|
||||||
|
"background": "#ffffff",
|
||||||
|
"foreground": "#666970",
|
||||||
|
"selectionBorder": "#7f8288",
|
||||||
|
"findHighlight": "#ffff80",
|
||||||
|
"findHighlightForeground": "#ffffff",
|
||||||
|
"activeGuide": "#dcdfe4",
|
||||||
|
"bracketsForeground": "#6669707F",
|
||||||
|
"bracketsOptions": "stippled_underline",
|
||||||
|
"bracketsContentsForeground": "#6669707F",
|
||||||
|
"tagsOptions": "stippled_underline"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Comment",
|
||||||
|
"scope": "comment",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#b2b4b7"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Constant",
|
||||||
|
"scope": "constant",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#eb71ad"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Entity",
|
||||||
|
"scope": "entity",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#24e5ff"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Invalid",
|
||||||
|
"scope": "invalid",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#ff4972"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Keyword",
|
||||||
|
"scope": "keyword",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#4c5058"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Storage",
|
||||||
|
"scope": "storage",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#eb71ad"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "String",
|
||||||
|
"scope": "string",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#95ffc3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Support",
|
||||||
|
"scope": "support",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#24e5ff"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Variable",
|
||||||
|
"scope": "variable",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#4c5058"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Markup Heading",
|
||||||
|
"scope": "markup.heading",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#24e5ff"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Markup Deleted",
|
||||||
|
"scope": "markup.deleted",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#ff4972"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Markup Inserted",
|
||||||
|
"scope": "markup.inserted",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#95ffc3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Markup Changed",
|
||||||
|
"scope": "markup.changed",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#ffff80"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Markup Underline",
|
||||||
|
"scope": "markup.underline",
|
||||||
|
"settings": {
|
||||||
|
"fontStyle": "underline"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Markup Underline Link",
|
||||||
|
"scope": "markup.underline.link",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#a0dbff"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Markup List",
|
||||||
|
"scope": "markup.list",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#4c5058"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Markup Raw",
|
||||||
|
"scope": "markup.raw",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#eb71ad"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
48
.config/Code/User/keybindings.json
Normal file
48
.config/Code/User/keybindings.json
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"key": "tab",
|
||||||
|
"command": "selectNextQuickFix",
|
||||||
|
"when": "editorFocus && quickFixWidgetVisible"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "shift+tab",
|
||||||
|
"command": "selectPrevQuickFix",
|
||||||
|
"when": "editorFocus && quickFixWidgetVisible"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "tab",
|
||||||
|
"command": "selectNextSuggestion",
|
||||||
|
"when": "editorTextFocus && suggestWidgetMultipleSuggestions && suggestWidgetVisible"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "shift+tab",
|
||||||
|
"command": "selectPrevSuggestion",
|
||||||
|
"when": "editorTextFocus && suggestWidgetMultipleSuggestions && suggestWidgetVisible"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+j",
|
||||||
|
"command": "editor.action.inlineSuggest.commit",
|
||||||
|
"when": "inlineSuggestionHasIndentationLessThanTabSize && inlineSuggestionVisible && !editorTabMovesFocus"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "tab",
|
||||||
|
"command": "-editor.action.inlineSuggest.commit",
|
||||||
|
"when": "inlineSuggestionHasIndentationLessThanTabSize && inlineSuggestionVisible && !editorTabMovesFocus"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "alt+right",
|
||||||
|
"command": "workbench.action.nextEditor"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+pagedown",
|
||||||
|
"command": "-workbench.action.nextEditor"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "alt+left",
|
||||||
|
"command": "workbench.action.previousEditor"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+pageup",
|
||||||
|
"command": "-workbench.action.previousEditor"
|
||||||
|
}
|
||||||
|
]
|
170
.config/Code/User/settings.json
Normal file
170
.config/Code/User/settings.json
Normal file
|
@ -0,0 +1,170 @@
|
||||||
|
{
|
||||||
|
"[html]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[javascript]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[javascriptreact]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[json5]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[json]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[jsonc]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[markdown]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[toml]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[typescript]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[typescriptreact]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[vue]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[yaml]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"codetour.customTourDirectory": ".config/codetour.yml",
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||||
|
"editor.fontFamily": "'Hack Nerd Font', Menlo, Monaco, 'Courier New', monospace",
|
||||||
|
"editor.formatOnPaste": false,
|
||||||
|
"editor.formatOnSave": true,
|
||||||
|
"editor.inlineSuggest.enabled": true,
|
||||||
|
"editor.minimap.enabled": false,
|
||||||
|
"editor.scrollBeyondLastLine": false,
|
||||||
|
"eslint.alwaysShowStatus": true,
|
||||||
|
"eslint.format.enable": true,
|
||||||
|
"eslint.lintTask.enable": true,
|
||||||
|
"eslint.lintTask.options": "-c package.json --no-eslintrc --cache --cache-location .cache/eslintcache .",
|
||||||
|
"eslint.packageManager": "pnpm",
|
||||||
|
"eslint.validate": [
|
||||||
|
"html",
|
||||||
|
"javascript",
|
||||||
|
"javascriptreact",
|
||||||
|
"json",
|
||||||
|
"jsonc",
|
||||||
|
"json5",
|
||||||
|
"markdown",
|
||||||
|
"toml",
|
||||||
|
"typescript",
|
||||||
|
"typescriptreact",
|
||||||
|
"vue",
|
||||||
|
"yaml"
|
||||||
|
],
|
||||||
|
"explorer.confirmDelete": false,
|
||||||
|
"extensions.ignoreRecommendations": true,
|
||||||
|
"files.trimTrailingWhitespace": true,
|
||||||
|
"git.autofetch": true,
|
||||||
|
"git.autoStash": true,
|
||||||
|
"github.codespaces.showPerformanceExplorer": true,
|
||||||
|
"gitlab.showPipelineUpdateNotifications": true,
|
||||||
|
"gitlens.showWelcomeOnInstall": false,
|
||||||
|
"gitlens.showWhatsNewAfterUpgrades": false,
|
||||||
|
"go.lintFlags": ["--fast"],
|
||||||
|
"go.lintTool": "golangci-lint",
|
||||||
|
"html.format.endWithNewline": true,
|
||||||
|
"html.format.indentHandlebars": true,
|
||||||
|
"html.format.indentInnerHtml": true,
|
||||||
|
"html.format.templating": true,
|
||||||
|
"javascript.format.semicolons": "remove",
|
||||||
|
"javascript.suggest.completeFunctionCalls": true,
|
||||||
|
"ltex.additionalRules.enablePickyRules": true,
|
||||||
|
"ltex.completionEnabled": true,
|
||||||
|
"markdown-preview-enhanced.previewTheme": "solarized-light.css",
|
||||||
|
"material-icon-theme.showWelcomeMessage": false,
|
||||||
|
"merge-conflict.autoNavigateNextConflict.enabled": true,
|
||||||
|
"npm.enableRunFromFolder": true,
|
||||||
|
"npm.packageManager": "pnpm",
|
||||||
|
"prettier.printWidth": 120,
|
||||||
|
"prettier.singleQuote": true,
|
||||||
|
"python.languageServer": "Pylance",
|
||||||
|
"security.workspace.trust.banner": "never",
|
||||||
|
"security.workspace.trust.enabled": false,
|
||||||
|
"telemetry.telemetryLevel": "crash",
|
||||||
|
"terminal.integrated.sendKeybindingsToShell": true,
|
||||||
|
"typescript.enablePromptUseWorkspaceTsdk": true,
|
||||||
|
"typescript.format.semicolons": "remove",
|
||||||
|
"typescript.implementationsCodeLens.enabled": true,
|
||||||
|
"typescript.inlayHints.enumMemberValues.enabled": true,
|
||||||
|
"typescript.inlayHints.functionLikeReturnTypes.enabled": true,
|
||||||
|
"typescript.inlayHints.parameterTypes.enabled": true,
|
||||||
|
"typescript.inlayHints.variableTypes.enabled": true,
|
||||||
|
"typescript.preferences.quoteStyle": "single",
|
||||||
|
"typescript.referencesCodeLens.enabled": true,
|
||||||
|
"typescript.referencesCodeLens.showOnAllFunctions": true,
|
||||||
|
"typescript.suggest.completeFunctionCalls": true,
|
||||||
|
"typescript.tsdk": "node_modules/typescript/lib",
|
||||||
|
"typescript.updateImportsOnFileMove.enabled": "always",
|
||||||
|
"vim.enableNeovim": true,
|
||||||
|
"vim.handleKeys": {
|
||||||
|
"<C-b>": false,
|
||||||
|
"<C-f>": false
|
||||||
|
},
|
||||||
|
"vim.leader": "<space>",
|
||||||
|
"vim.neovimPath": "/usr/bin/nvim",
|
||||||
|
"vim.normalModeKeyBindings": [
|
||||||
|
{
|
||||||
|
"before": ["<C-n>"],
|
||||||
|
"commands": [":nohl"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"before": ["leader", "w"],
|
||||||
|
"commands": ["workbench.action.files.save"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"before": ["leader", "b", "d"],
|
||||||
|
"commands": ["workbench.action.closeActiveEditor"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"before": ["leader", "l", "n"],
|
||||||
|
"commands": ["editor.action.marker.next"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"before": ["leader", "l", "p"],
|
||||||
|
"commands": ["editor.action.marker.prev"]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"vscode-neovim.neovimClean": true,
|
||||||
|
"vscode-neovim.neovimExecutablePaths.linux": "/usr/bin/nvim",
|
||||||
|
"vsicons.dontShowNewVersionMessage": true,
|
||||||
|
"window.menuBarVisibility": "toggle",
|
||||||
|
"workbench.colorCustomizations": {
|
||||||
|
"terminal.foreground": "#708284",
|
||||||
|
"terminal.background": "#001e27",
|
||||||
|
"terminal.ansiBlack": "#002831",
|
||||||
|
"terminal.ansiBlue": "#2176c7",
|
||||||
|
"terminal.ansiCyan": "#259286",
|
||||||
|
"terminal.ansiGreen": "#738a05",
|
||||||
|
"terminal.ansiMagenta": "#c61c6f",
|
||||||
|
"terminal.ansiRed": "#d11c24",
|
||||||
|
"terminal.ansiWhite": "#eae3cb",
|
||||||
|
"terminal.ansiYellow": "#a57706",
|
||||||
|
"terminal.ansiBrightBlack": "#475b62",
|
||||||
|
"terminal.ansiBrightBlue": "#708284",
|
||||||
|
"terminal.ansiBrightCyan": "#819090",
|
||||||
|
"terminal.ansiBrightGreen": "#475b62",
|
||||||
|
"terminal.ansiBrightMagenta": "#5956ba",
|
||||||
|
"terminal.ansiBrightRed": "#bd3613",
|
||||||
|
"terminal.ansiBrightWhite": "#fcf4dc",
|
||||||
|
"terminal.ansiBrightYellow": "#536870",
|
||||||
|
"terminal.selectionBackground": "#002831",
|
||||||
|
"terminalCursor.foreground": "#708284"
|
||||||
|
},
|
||||||
|
"workbench.colorTheme": "Betelgeuse Dark",
|
||||||
|
"workbench.iconTheme": "sweet-vscode-icons",
|
||||||
|
"workbench.startupEditor": "readme",
|
||||||
|
"workbench.welcomePage.walkthroughs.openOnInstall": false,
|
||||||
|
"yaml.format.printWidth": 160,
|
||||||
|
"yaml.format.singleQuote": true
|
||||||
|
}
|
1
.config/asdf/default-npm-packages
Normal file
1
.config/asdf/default-npm-packages
Normal file
|
@ -0,0 +1 @@
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
color_theme="betelgeuse"
|
color_theme="Betelgeuse"
|
||||||
|
|
11
.config/bat/config
Normal file
11
.config/bat/config
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
# Set the theme to "TwoDark"
|
||||||
|
--theme="TwoDark"
|
||||||
|
|
||||||
|
# Show line numbers, Git modifications and file header (but no grid)
|
||||||
|
--style="numbers,changes,header"
|
||||||
|
|
||||||
|
# Use italic text on the terminal (not supported on all terminals)
|
||||||
|
--italic-text=always
|
||||||
|
|
||||||
|
# Use C++ syntax for Arduino .ino files
|
||||||
|
--map-syntax "*.ino:C++"
|
1
.config/brew/whalebrew
Normal file
1
.config/brew/whalebrew
Normal file
|
@ -0,0 +1 @@
|
||||||
|
|
11
.config/chromium-flags.conf
Normal file
11
.config/chromium-flags.conf
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
# enable wayland
|
||||||
|
--ozone-platform-hint=auto
|
||||||
|
# force GPU acceleration
|
||||||
|
--enable-gpu-rasterization
|
||||||
|
--enable-zero-copy
|
||||||
|
# enable vulkan
|
||||||
|
--use-vulkan
|
||||||
|
--enable-features=UseOzonePlatform,WebRTCPipeWireCapturer,VaapiVideoDecoder,VaapiVideoEncoder,WebUIDarkMode,WaylandWindowDecorations
|
||||||
|
# custom settings
|
||||||
|
--force-dark-mode
|
||||||
|
--password-store=basic
|
14
.config/crontab/config
Normal file
14
.config/crontab/config
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
|
||||||
|
|
||||||
|
PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin
|
||||||
|
|
||||||
|
# 0 8 * * 0 $HOME/.scripts/domingobot.sh 2>&1 >> $HOME/.log/cron.log
|
||||||
|
|
||||||
|
# * * * * * command to be executed
|
||||||
|
# ┯ ┯ ┯ ┯ ┯
|
||||||
|
# │ │ │ │ │
|
||||||
|
# │ │ │ │ ╰───── day of week (0 - 6) (Sunday=0)
|
||||||
|
# │ │ │ ╰─────── month (1 - 12)
|
||||||
|
# │ │ ╰───────── day of month (1 - 31)
|
||||||
|
# │ ╰─────────── hour (0 - 23)
|
||||||
|
# ╰───────────── min (0 - 59)
|
2
.config/direnv/direnv.toml
Normal file
2
.config/direnv/direnv.toml
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
[global]
|
||||||
|
load_dotenv = true
|
6
.config/fd/ignore
Normal file
6
.config/fd/ignore
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# EXCLUDE BACKUP FILES
|
||||||
|
*.bak
|
||||||
|
|
||||||
|
# EXCLUDE LIBRARIES ON MACOS
|
||||||
|
/Library/**
|
||||||
|
/Users/Library/**
|
1
.config/firejail/bitwarden.local
Normal file
1
.config/firejail/bitwarden.local
Normal file
|
@ -0,0 +1 @@
|
||||||
|
seccomp !chroot
|
14
.config/firejail/chromium.local
Normal file
14
.config/firejail/chromium.local
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
include whitelist-runuser-common.inc
|
||||||
|
dbus-user.talk org.freedesktop.Notifications
|
||||||
|
dbus-user.talk org.freedesktop.portal.Desktop
|
||||||
|
ignore noroot
|
||||||
|
whitelist ${RUNUSER}/pipewire-0
|
||||||
|
whitelist /usr/share/pipewire/client.conf
|
||||||
|
dbus-user.talk org.freedesktop.portal.*
|
||||||
|
|
||||||
|
whitelist ${HOME}/pictures
|
||||||
|
whitelist ${HOME}/go
|
||||||
|
whitelist ${HOME}/git
|
||||||
|
whitelist ${HOME}/documents
|
||||||
|
whitelist ${HOME}/work
|
||||||
|
whitelist /usr/share/pipewire/
|
12
.config/firejail/code.local
Normal file
12
.config/firejail/code.local
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
whitelist ${HOME}
|
||||||
|
whitelist ${HOME}/.local/share
|
||||||
|
noblacklist ${HOME}
|
||||||
|
noblacklist ${PATH}/bash
|
||||||
|
noblacklist ${PATH}/fish
|
||||||
|
ignore private-bin
|
||||||
|
ignore private-cache
|
||||||
|
ignore private-dev
|
||||||
|
ignore private-tmp
|
||||||
|
ignore noroot
|
||||||
|
ignore nosound
|
||||||
|
ignore noexec /tmp
|
4
.config/firejail/gcloud.local
Normal file
4
.config/firejail/gcloud.local
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
# noblacklist ${HOME}
|
||||||
|
# noblacklist ${HOME}/.ssh/
|
||||||
|
# include allow-ssh.inc
|
||||||
|
# whitelist /tmp/ssh-*
|
14
.config/firejail/google-chrome-stable.local
Normal file
14
.config/firejail/google-chrome-stable.local
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
include whitelist-runuser-common.inc
|
||||||
|
dbus-user.talk org.freedesktop.Notifications
|
||||||
|
dbus-user.talk org.freedesktop.portal.Desktop
|
||||||
|
ignore noroot
|
||||||
|
whitelist ${RUNUSER}/pipewire-0
|
||||||
|
whitelist /usr/share/pipewire/client.conf
|
||||||
|
dbus-user.talk org.freedesktop.portal.*
|
||||||
|
|
||||||
|
whitelist ${HOME}/pictures
|
||||||
|
whitelist ${HOME}/go
|
||||||
|
whitelist ${HOME}/git
|
||||||
|
whitelist ${HOME}/documents
|
||||||
|
whitelist ${HOME}/work
|
||||||
|
whitelist /usr/share/pipewire/
|
13
.config/firejail/slack.local
Normal file
13
.config/firejail/slack.local
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
noblacklist ${PATH}/bash
|
||||||
|
noblacklist ${PATH}/csh
|
||||||
|
noblacklist ${PATH}/dash
|
||||||
|
noblacklist ${PATH}/fish
|
||||||
|
noblacklist ${PATH}/ksh
|
||||||
|
noblacklist ${PATH}/sh
|
||||||
|
noblacklist ${PATH}/tclsh
|
||||||
|
noblacklist ${PATH}/tcsh
|
||||||
|
noblacklist ${PATH}/zsh
|
||||||
|
ignore private-bin
|
||||||
|
ignore private-cache
|
||||||
|
ignore private-dev
|
||||||
|
ignore private-tmp
|
19
.config/firejail/thunderbird.local
Normal file
19
.config/firejail/thunderbird.local
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
noblacklist /var/mail
|
||||||
|
noblacklist /var/spool/mail
|
||||||
|
whitelist /var/mail
|
||||||
|
whitelist /var/spool/mail
|
||||||
|
writable-var
|
||||||
|
|
||||||
|
noblacklist ${PATH}/bash
|
||||||
|
noblacklist ${PATH}/csh
|
||||||
|
noblacklist ${PATH}/dash
|
||||||
|
noblacklist ${PATH}/fish
|
||||||
|
noblacklist ${PATH}/ksh
|
||||||
|
noblacklist ${PATH}/sh
|
||||||
|
noblacklist ${PATH}/tclsh
|
||||||
|
noblacklist ${PATH}/tcsh
|
||||||
|
noblacklist ${PATH}/zsh
|
||||||
|
ignore private-bin
|
||||||
|
ignore private-cache
|
||||||
|
ignore private-dev
|
||||||
|
ignore private-tmp
|
0
.config/git/attributes
Normal file
0
.config/git/attributes
Normal file
14
.config/git/commit-template
Normal file
14
.config/git/commit-template
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
# <type>[optional scope]: <description> (not more than 72 chars)
|
||||||
|
# <BLANK NEWLINE>
|
||||||
|
# [optional body] (not more than 72 chars)
|
||||||
|
# <BLANK NEWLINE>
|
||||||
|
# [optional footer(s)] (not more than 72 chars)
|
||||||
|
#-------------------------------EXAMPLE----------------------------------
|
||||||
|
# feat!(frontend): new button added in dashboard
|
||||||
|
#
|
||||||
|
# A new "Follow Us" button is added in your Account dashboard.
|
||||||
|
# If you don't see it, please delete your browser cache and reload the
|
||||||
|
# webpage.
|
||||||
|
#
|
||||||
|
# BREAKING CHANGE: this button replaces the custom button you have,
|
||||||
|
# you need to reconfigure your custom button.
|
30
.config/git/ignore
Normal file
30
.config/git/ignore
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
# COMPILED SOURCE
|
||||||
|
*.o
|
||||||
|
*.so
|
||||||
|
*.com
|
||||||
|
*.dll
|
||||||
|
*.exe
|
||||||
|
*.class
|
||||||
|
|
||||||
|
# BINARY ARCHIVE FILES
|
||||||
|
*.7z
|
||||||
|
*.gz
|
||||||
|
*.dmg
|
||||||
|
*.iso
|
||||||
|
*.jar
|
||||||
|
*.rar
|
||||||
|
*.tar
|
||||||
|
*.zip
|
||||||
|
*.war
|
||||||
|
|
||||||
|
# LOGS
|
||||||
|
*.log
|
||||||
|
|
||||||
|
# OS RELATED FILES
|
||||||
|
._*
|
||||||
|
.Trashes
|
||||||
|
Thumbs.db
|
||||||
|
.DS_Store
|
||||||
|
.DS_Store?
|
||||||
|
ehthumbs.db
|
||||||
|
.Spotlight-V100
|
|
@ -4,7 +4,7 @@ gtk-button-images=1
|
||||||
gtk-cursor-theme-name=Betelgeuse
|
gtk-cursor-theme-name=Betelgeuse
|
||||||
gtk-decoration-layout=icon:minimize,maximize,close
|
gtk-decoration-layout=icon:minimize,maximize,close
|
||||||
gtk-enable-animations=1
|
gtk-enable-animations=1
|
||||||
gtk-font-name=Montserrat Medium, Medium 10
|
gtk-font-name=Montserrat Medium, Medium 11
|
||||||
gtk-icon-theme-name=Betelgeuse
|
gtk-icon-theme-name=Betelgeuse
|
||||||
gtk-menu-images=1
|
gtk-menu-images=1
|
||||||
gtk-modules=appmenu-gtk-module
|
gtk-modules=appmenu-gtk-module
|
||||||
|
|
70
.config/k9s/plugin.yml
Normal file
70
.config/k9s/plugin.yml
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
plugin:
|
||||||
|
# dive image layers
|
||||||
|
dive:
|
||||||
|
shortCut: d
|
||||||
|
confirm: false
|
||||||
|
description: "Dive image"
|
||||||
|
scopes:
|
||||||
|
- containers
|
||||||
|
command: dive
|
||||||
|
background: false
|
||||||
|
args:
|
||||||
|
- $COL-IMAGE
|
||||||
|
# get all resources in a namespace using the krew get-all plugin
|
||||||
|
get-all:
|
||||||
|
shortCut: g
|
||||||
|
confirm: false
|
||||||
|
description: get-all
|
||||||
|
scopes:
|
||||||
|
- all
|
||||||
|
command: sh
|
||||||
|
background: false
|
||||||
|
args:
|
||||||
|
- -c
|
||||||
|
- "kubectl get-all -n $NAMESPACE | less"
|
||||||
|
edit-secret:
|
||||||
|
shortCut: Ctrl-X
|
||||||
|
confirm: false
|
||||||
|
description: "Edit Decoded Secret"
|
||||||
|
scopes:
|
||||||
|
- secrets
|
||||||
|
command: kubectl
|
||||||
|
background: false
|
||||||
|
args:
|
||||||
|
- modify-secret
|
||||||
|
- --namespace
|
||||||
|
- $NAMESPACE
|
||||||
|
- --context
|
||||||
|
- $CONTEXT
|
||||||
|
- $NAME
|
||||||
|
# View resource logs using stern
|
||||||
|
stern:
|
||||||
|
shortCut: Ctrl-L
|
||||||
|
confirm: false
|
||||||
|
description: "Logs <Stern>"
|
||||||
|
scopes:
|
||||||
|
- pods
|
||||||
|
command: stern
|
||||||
|
background: false
|
||||||
|
args:
|
||||||
|
- --tail
|
||||||
|
- 50
|
||||||
|
- $FILTER
|
||||||
|
- -n
|
||||||
|
- $NAMESPACE
|
||||||
|
- --context
|
||||||
|
- $CONTEXT
|
||||||
|
# watch events on selected resources
|
||||||
|
# requires linux "watch" command
|
||||||
|
# change '-n' to adjust refresh time in seconds
|
||||||
|
watch-events:
|
||||||
|
shortCut: Shift-E
|
||||||
|
confirm: false
|
||||||
|
description: Get Events
|
||||||
|
scopes:
|
||||||
|
- all
|
||||||
|
command: sh
|
||||||
|
background: false
|
||||||
|
args:
|
||||||
|
- -c
|
||||||
|
- "watch -n 5 kubectl get events --context $CONTEXT --namespace $NAMESPACE --field-selector involvedObject.name=$NAME"
|
44
.config/mimeapps.list
Normal file
44
.config/mimeapps.list
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
[Default Applications]
|
||||||
|
application/json=text.desktop
|
||||||
|
application/pdf=pdf.desktop
|
||||||
|
application/x-extension-htm=firefox.desktop
|
||||||
|
application/x-extension-html=firefox.desktop
|
||||||
|
application/x-extension-shtml=firefox.desktop
|
||||||
|
application/x-extension-xht=firefox.desktop
|
||||||
|
application/x-extension-xhtml=firefox.desktop
|
||||||
|
application/x-xpinstall=firefox.desktop
|
||||||
|
application/xhtml+xml=firefox.desktop
|
||||||
|
application/xml=firefox.desktop
|
||||||
|
image/bmp=imv.desktop
|
||||||
|
image/gif=imv.desktop
|
||||||
|
image/heif=imv.desktop
|
||||||
|
image/jpeg=imv.desktop
|
||||||
|
image/png=imv.desktop
|
||||||
|
image/tiff=imv.desktop
|
||||||
|
image/vnd.zbrush.pcx=imv.desktop
|
||||||
|
image/x-portable-anymap=imv.desktop
|
||||||
|
image/x-portable-bitmap=imv.desktop
|
||||||
|
image/x-portable-graymap=imv.desktop
|
||||||
|
image/x-portable-pixmap=imv.desktop
|
||||||
|
image/x-tga=imv.desktop
|
||||||
|
image/x-xbitmap=imv.desktop
|
||||||
|
text/html=firefox.desktop
|
||||||
|
text/html=text.desktop
|
||||||
|
text/plain=text.desktop
|
||||||
|
text/tcl=text.desktop
|
||||||
|
text/x-c++hdr=text.desktop
|
||||||
|
text/x-c++src=text.desktop
|
||||||
|
text/x-chdr=text.desktop
|
||||||
|
text/x-csrc=text.desktop
|
||||||
|
text/x-google-video-pointer=text.desktop
|
||||||
|
text/x-java=text.desktop
|
||||||
|
text/x-makefile=text.desktop
|
||||||
|
text/x-moc=text.desktop
|
||||||
|
text/x-pascal=text.desktop
|
||||||
|
text/x-tex=text.desktop
|
||||||
|
x-scheme-handler/chrome=firefox.desktop
|
||||||
|
x-scheme-handler/http=firefox.desktop
|
||||||
|
x-scheme-handler/http=firefox.desktop
|
||||||
|
x-scheme-handler/https=firefox.desktop
|
||||||
|
x-scheme-handler/https=firefox.desktop
|
||||||
|
x-scheme-handler/terminal=kitty.desktop
|
6
.config/npm/npmrc.tmpl.TODO
Normal file
6
.config/npm/npmrc.tmpl.TODO
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
cache=${XDG_CACHE_HOME}/npm
|
||||||
|
init.license=MIT
|
||||||
|
init.version=0.0.1
|
||||||
|
init-module=${XDG_CONFIG_HOME}/npm/config/npm-init.js
|
||||||
|
prefix=${XDG_DATA_HOME}/npm
|
||||||
|
store-dir=${XDG_DATA_HOME}/pnpm-store
|
111
.config/oh-my-posh/Betelgeuse-minimal.omp.json
Normal file
111
.config/oh-my-posh/Betelgeuse-minimal.omp.json
Normal file
|
@ -0,0 +1,111 @@
|
||||||
|
{
|
||||||
|
"$schema": "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json",
|
||||||
|
"console_title_template": "{{if .Segments.Git.RepoName}} {{.Segments.Git.RepoName}} {{else}} {{.Folder}} {{end}}",
|
||||||
|
"blocks": [
|
||||||
|
{
|
||||||
|
"type": "prompt",
|
||||||
|
"alignment": "left",
|
||||||
|
"newline": true,
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"type": "session",
|
||||||
|
"foreground": "#757575",
|
||||||
|
"properties": {
|
||||||
|
"display_host": true
|
||||||
|
},
|
||||||
|
"style": "plain",
|
||||||
|
"template": "\u250c {{ if .SSHSession }}\uf817 {{ end }}{{ .UserName }}@{{ .HostName }} "
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "path",
|
||||||
|
"background": "#91ddff",
|
||||||
|
"foreground": "#100e23",
|
||||||
|
"powerline_symbol": "\ue0b0",
|
||||||
|
"properties": {
|
||||||
|
"style": "agnoster_full"
|
||||||
|
},
|
||||||
|
"style": "powerline",
|
||||||
|
"template": " {{ .Path }} "
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "git",
|
||||||
|
"style": "powerline",
|
||||||
|
"powerline_symbol": "\ue0b0",
|
||||||
|
"foreground": "#100e23",
|
||||||
|
"background": "#95ffa4",
|
||||||
|
"background_templates": [
|
||||||
|
"{{ if or (.Working.Changed) (.Staging.Changed) }}#ff9248{{ end }}",
|
||||||
|
"{{ if and (gt .Ahead 0) (gt .Behind 0) }}#f26d50{{ end }}",
|
||||||
|
"{{ if gt .Ahead 0 }}#89d1dc{{ end }}",
|
||||||
|
"{{ if gt .Behind 0 }}#c5b6ad{{ end }}"
|
||||||
|
],
|
||||||
|
"template": " {{ .HEAD }}{{if .BranchStatus }} {{ .BranchStatus }}{{ end }}{{ if .Working.Changed }} {{ .Working.String }}{{ end }}{{ if and (.Working.Changed) (.Staging.Changed) }} \u2502{{ end }}{{ if .Staging.Changed }} {{ .Staging.String }}{{ end }}{{ if gt .StashCount 0 }} {{ .StashCount }}{{ end }} ",
|
||||||
|
"properties": {
|
||||||
|
"branch_ahead_icon": "\u2191",
|
||||||
|
"branch_behind_icon": "\u2193",
|
||||||
|
"branch_gone": "\u2262",
|
||||||
|
"branch_icon": "\ue0a0 ",
|
||||||
|
"branch_identical_icon": "\u2261",
|
||||||
|
"cherry_pick_icon": "\u2713 ",
|
||||||
|
"commit_icon": "\u25b7 ",
|
||||||
|
"fetch_stash_count": true,
|
||||||
|
"fetch_status": true,
|
||||||
|
"merge_icon": "\u25f4 ",
|
||||||
|
"no_commits_icon": "[no commits]",
|
||||||
|
"rebase_icon": "\u2c62 ",
|
||||||
|
"tag_icon": "\u25b6 ",
|
||||||
|
"untracked_modes": {
|
||||||
|
"/Users/user/Projects/oh-my-posh/": "no"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "terraform",
|
||||||
|
"background": "#ffee58",
|
||||||
|
"foreground": "#100e23",
|
||||||
|
"powerline_symbol": "\ue0b0",
|
||||||
|
"style": "powerline",
|
||||||
|
"template": " {{ .WorkspaceName }}{{ if .Version }} {{ .Version }}{{ end }} "
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "exit",
|
||||||
|
"background": "#ff8080",
|
||||||
|
"foreground": "#ffffff",
|
||||||
|
"powerline_symbol": "\ue0b0",
|
||||||
|
"style": "powerline",
|
||||||
|
"template": " {{ if gt .Code 0 }}error{{ else }}\uf42e{{ end }} "
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "time",
|
||||||
|
"foreground": "#689f38",
|
||||||
|
"properties": {
|
||||||
|
"time_format": "15:04:05"
|
||||||
|
},
|
||||||
|
"style": "plain",
|
||||||
|
"template": " <#757575,>|</> {{ .CurrentDate | date .Format }}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "prompt",
|
||||||
|
"alignment": "left",
|
||||||
|
"newline": true,
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"type": "text",
|
||||||
|
"foreground": "#757575",
|
||||||
|
"style": "plain",
|
||||||
|
"template": "\u2514"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "text",
|
||||||
|
"foreground": "#ffffff",
|
||||||
|
"style": "plain",
|
||||||
|
"template": "$"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"final_space": true,
|
||||||
|
"version": 2
|
||||||
|
}
|
126
.config/oh-my-posh/Betelgeuse.omp.json
Normal file
126
.config/oh-my-posh/Betelgeuse.omp.json
Normal file
|
@ -0,0 +1,126 @@
|
||||||
|
{
|
||||||
|
"$schema": "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json",
|
||||||
|
"blocks": [
|
||||||
|
{
|
||||||
|
"alignment": "left",
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"background": "#2e9599",
|
||||||
|
"foreground": "#ffffff",
|
||||||
|
"leading_diamond": "\ue0b6",
|
||||||
|
"powerline_symbol": "\ue0b0",
|
||||||
|
"style": "diamond",
|
||||||
|
"template": "\uf91c {{ .HostName }} ",
|
||||||
|
"type": "session"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"background": "#D51111",
|
||||||
|
"foreground": "#ffffff",
|
||||||
|
"powerline_symbol": "\ue0b0",
|
||||||
|
"properties": {
|
||||||
|
"home_icon": "\uf46d",
|
||||||
|
"folder_separator_icon": " <transparent>\ue0b1</> ",
|
||||||
|
"folder_icon": "\uf115",
|
||||||
|
"style": "agnoster"
|
||||||
|
},
|
||||||
|
"style": "powerline",
|
||||||
|
"template": " {{ path .Path .Location }} ",
|
||||||
|
"type": "path"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"background": "#c19c00",
|
||||||
|
"background_templates": [
|
||||||
|
"{{ if or (.Working.Changed) (.Staging.Changed) }}#FFEB3B{{ end }}",
|
||||||
|
"{{ if and (gt .Ahead 0) (gt .Behind 0) }}#FFA300{{ end }}",
|
||||||
|
"{{ if gt .Ahead 0 }}#FF7070{{ end }}",
|
||||||
|
"{{ if gt .Behind 0 }}#90F090{{ end }}"
|
||||||
|
],
|
||||||
|
"foreground": "#000000",
|
||||||
|
"powerline_symbol": "\ue0b0",
|
||||||
|
"properties": {
|
||||||
|
"fetch_stash_count": true,
|
||||||
|
"fetch_status": true,
|
||||||
|
"fetch_upstream_icon": true
|
||||||
|
},
|
||||||
|
"style": "powerline",
|
||||||
|
"template": " \uf113 {{ .HEAD }}{{if .BranchStatus }} {{ .BranchStatus }}{{ end }}{{ if .Working.Changed }} \uf044 {{ .Working.String }}{{ end }}{{ if and (.Working.Changed) (.Staging.Changed) }} |{{ end }}{{ if .Staging.Changed }} \uf046 {{ .Staging.String }}{{ end }}{{ if gt .StashCount 0 }} \uf692 {{ .StashCount }}{{ end }} ",
|
||||||
|
"type": "git"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type": "prompt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alignment": "right",
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"background": "#303030",
|
||||||
|
"foreground": "#3C873A",
|
||||||
|
"leading_diamond": "\ue0b6",
|
||||||
|
"properties": {
|
||||||
|
"fetch_package_manager": true,
|
||||||
|
"npm_icon": " <#cc3a3a>\ue5fa</> ",
|
||||||
|
"yarn_icon": " <#348cba>\uf61a</>"
|
||||||
|
},
|
||||||
|
"style": "diamond",
|
||||||
|
"template": "\ue718 {{ if .PackageManagerIcon }}{{ .PackageManagerIcon }} {{ end }}{{ .Full }}",
|
||||||
|
"trailing_diamond": "\ue0b4 ",
|
||||||
|
"type": "node"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"background": "#306998",
|
||||||
|
"foreground": "#FFE873",
|
||||||
|
"leading_diamond": "\ue0b6",
|
||||||
|
"style": "diamond",
|
||||||
|
"template": "\ue235 {{ if .Error }}{{ .Error }}{{ else }}{{ if .Venv }}{{ .Venv }} {{ end }}{{ .Full }}{{ end }}",
|
||||||
|
"trailing_diamond": "\ue0b4 ",
|
||||||
|
"type": "python"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"background": "#ffffff",
|
||||||
|
"foreground": "#06aad5",
|
||||||
|
"leading_diamond": "\ue0b6",
|
||||||
|
"style": "diamond",
|
||||||
|
"template": "\ufcd1 {{ if .Error }}{{ .Error }}{{ else }}{{ .Full }}{{ end }}",
|
||||||
|
"trailing_diamond": "\ue0b4 ",
|
||||||
|
"type": "go"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"background": "#2e9599",
|
||||||
|
"foreground": "#fff",
|
||||||
|
"background_templates": [
|
||||||
|
"{{ if gt .Code 0 }}#D51111{{ end }}"
|
||||||
|
],
|
||||||
|
"leading_diamond": "\ue0b6",
|
||||||
|
"properties": {
|
||||||
|
"time_format": "_2, 15:04:05"
|
||||||
|
},
|
||||||
|
"style": "diamond",
|
||||||
|
"template": " \uf5ef {{ .CurrentDate | date .Format }} ",
|
||||||
|
"trailing_diamond": "\ue0b4",
|
||||||
|
"type": "time"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type": "prompt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alignment": "left",
|
||||||
|
"newline": true,
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"foreground": "#FFF",
|
||||||
|
"foreground_templates": [
|
||||||
|
"{{ if gt .Code 0 }}#D51111{{ end }}"
|
||||||
|
],
|
||||||
|
"style": "plain",
|
||||||
|
"template": " \uf0a4 ",
|
||||||
|
"type": "text"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type": "prompt"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"console_title_template": "{{ .Folder }}",
|
||||||
|
"final_space": true,
|
||||||
|
"osc99": true,
|
||||||
|
"version": 2
|
||||||
|
}
|
188
.config/pgcli/config
Normal file
188
.config/pgcli/config
Normal file
|
@ -0,0 +1,188 @@
|
||||||
|
# vi: ft=dosini
|
||||||
|
[main]
|
||||||
|
|
||||||
|
# Enables context sensitive auto-completion. If this is disabled the all
|
||||||
|
# possible completions will be listed.
|
||||||
|
smart_completion = True
|
||||||
|
|
||||||
|
# Display the completions in several columns. (More completions will be
|
||||||
|
# visible.)
|
||||||
|
wider_completion_menu = False
|
||||||
|
|
||||||
|
# Multi-line mode allows breaking up the sql statements into multiple lines. If
|
||||||
|
# this is set to True, then the end of the statements must have a semi-colon.
|
||||||
|
# If this is set to False then sql statements can't be split into multiple
|
||||||
|
# lines. End of line (return) is considered as the end of the statement.
|
||||||
|
multi_line = False
|
||||||
|
|
||||||
|
# If multi_line_mode is set to "psql", in multi-line mode, [Enter] will execute
|
||||||
|
# the current input if the input ends in a semicolon.
|
||||||
|
# If multi_line_mode is set to "safe", in multi-line mode, [Enter] will always
|
||||||
|
# insert a newline, and [Esc] [Enter] or [Alt]-[Enter] must be used to execute
|
||||||
|
# a command.
|
||||||
|
multi_line_mode = psql
|
||||||
|
|
||||||
|
# Destructive warning mode will alert you before executing a sql statement
|
||||||
|
# that may cause harm to the database such as "drop table", "drop database"
|
||||||
|
# or "shutdown".
|
||||||
|
destructive_warning = True
|
||||||
|
|
||||||
|
# Enables expand mode, which is similar to `\x` in psql.
|
||||||
|
expand = False
|
||||||
|
|
||||||
|
# Enables auto expand mode, which is similar to `\x auto` in psql.
|
||||||
|
auto_expand = False
|
||||||
|
|
||||||
|
# If set to True, table suggestions will include a table alias
|
||||||
|
generate_aliases = False
|
||||||
|
|
||||||
|
# log_file location.
|
||||||
|
# In Unix/Linux: ~/.config/pgcli/log
|
||||||
|
# In Windows: %USERPROFILE%\AppData\Local\dbcli\pgcli\log
|
||||||
|
# %USERPROFILE% is typically C:\Users\{username}
|
||||||
|
log_file = default
|
||||||
|
|
||||||
|
# keyword casing preference. Possible values "lower", "upper", "auto"
|
||||||
|
keyword_casing = auto
|
||||||
|
|
||||||
|
# casing_file location.
|
||||||
|
# In Unix/Linux: ~/.config/pgcli/casing
|
||||||
|
# In Windows: %USERPROFILE%\AppData\Local\dbcli\pgcli\casing
|
||||||
|
# %USERPROFILE% is typically C:\Users\{username}
|
||||||
|
casing_file = default
|
||||||
|
|
||||||
|
# If generate_casing_file is set to True and there is no file in the above
|
||||||
|
# location, one will be generated based on usage in SQL/PLPGSQL functions.
|
||||||
|
generate_casing_file = False
|
||||||
|
|
||||||
|
# Casing of column headers based on the casing_file described above
|
||||||
|
case_column_headers = True
|
||||||
|
|
||||||
|
# history_file location.
|
||||||
|
# In Unix/Linux: ~/.config/pgcli/history
|
||||||
|
# In Windows: %USERPROFILE%\AppData\Local\dbcli\pgcli\history
|
||||||
|
# %USERPROFILE% is typically C:\Users\{username}
|
||||||
|
history_file = default
|
||||||
|
|
||||||
|
# Default log level. Possible values: "CRITICAL", "ERROR", "WARNING", "INFO"
|
||||||
|
# and "DEBUG". "NONE" disables logging.
|
||||||
|
log_level = INFO
|
||||||
|
|
||||||
|
# Order of columns when expanding * to column list
|
||||||
|
# Possible values: "table_order" and "alphabetic"
|
||||||
|
asterisk_column_order = table_order
|
||||||
|
|
||||||
|
# Whether to qualify with table alias/name when suggesting columns
|
||||||
|
# Possible values: "always", never" and "if_more_than_one_table"
|
||||||
|
qualify_columns = if_more_than_one_table
|
||||||
|
|
||||||
|
# When no schema is entered, only suggest objects in search_path
|
||||||
|
search_path_filter = False
|
||||||
|
|
||||||
|
# Default pager.
|
||||||
|
# By default 'PAGER' environment variable is used
|
||||||
|
# pager = less -SRXF
|
||||||
|
|
||||||
|
# Timing of sql statments and table rendering.
|
||||||
|
timing = True
|
||||||
|
|
||||||
|
# Table format. Possible values: psql, plain, simple, grid, fancy_grid, pipe,
|
||||||
|
# ascii, double, github, orgtbl, rst, mediawiki, html, latex, latex_booktabs,
|
||||||
|
# textile, moinmoin, jira, vertical, tsv, csv.
|
||||||
|
# Recommended: psql, fancy_grid and grid.
|
||||||
|
table_format = psql
|
||||||
|
|
||||||
|
# Syntax Style. Possible values: manni, igor, xcode, vim, autumn, vs, rrt,
|
||||||
|
# native, perldoc, borland, tango, emacs, friendly, monokai, paraiso-dark,
|
||||||
|
# colorful, murphy, bw, pastie, paraiso-light, trac, default, fruity
|
||||||
|
syntax_style = default
|
||||||
|
|
||||||
|
# Keybindings:
|
||||||
|
# When Vi mode is enabled you can use modal editing features offered by Vi in the REPL.
|
||||||
|
# When Vi mode is disabled emacs keybindings such as Ctrl-A for home and Ctrl-E
|
||||||
|
# for end are available in the REPL.
|
||||||
|
vi = True
|
||||||
|
|
||||||
|
# Error handling
|
||||||
|
# When one of multiple SQL statements causes an error, choose to either
|
||||||
|
# continue executing the remaining statements, or stopping
|
||||||
|
# Possible values "STOP" or "RESUME"
|
||||||
|
on_error = STOP
|
||||||
|
|
||||||
|
# Set threshold for row limit. Use 0 to disable limiting.
|
||||||
|
row_limit = 1000
|
||||||
|
|
||||||
|
# Skip intro on startup and goodbye on exit
|
||||||
|
less_chatty = True
|
||||||
|
|
||||||
|
# Postgres prompt
|
||||||
|
# \t - Current date and time
|
||||||
|
# \u - Username
|
||||||
|
# \h - Short hostname of the server (up to first '.')
|
||||||
|
# \H - Hostname of the server
|
||||||
|
# \d - Database name
|
||||||
|
# \p - Database port
|
||||||
|
# \i - Postgres PID
|
||||||
|
# \# - "@" sign if logged in as superuser, '>' in other case
|
||||||
|
# \n - Newline
|
||||||
|
# \dsn_alias - name of dsn alias if -D option is used (empty otherwise)
|
||||||
|
# \x1b[...m - insert ANSI escape sequence
|
||||||
|
# eg: prompt = '\x1b[35m\u@\x1b[32m\h:\x1b[36m\d>'
|
||||||
|
prompt = '\u@\h:\d> '
|
||||||
|
|
||||||
|
# Number of lines to reserve for the suggestion menu
|
||||||
|
min_num_menu_lines = 4
|
||||||
|
|
||||||
|
# Character used to left pad multi-line queries to match the prompt size.
|
||||||
|
multiline_continuation_char = ''
|
||||||
|
|
||||||
|
# The string used in place of a null value.
|
||||||
|
null_string = '<null>'
|
||||||
|
|
||||||
|
# manage pager on startup
|
||||||
|
enable_pager = True
|
||||||
|
|
||||||
|
# Use keyring to automatically save and load password in a secure manner
|
||||||
|
keyring = False
|
||||||
|
|
||||||
|
# Custom colors for the completion menu, toolbar, etc.
|
||||||
|
[colors]
|
||||||
|
completion-menu.completion.current = 'bg:#ffffff #000000'
|
||||||
|
completion-menu.completion = 'bg:#008888 #ffffff'
|
||||||
|
completion-menu.meta.completion.current = 'bg:#44aaaa #000000'
|
||||||
|
completion-menu.meta.completion = 'bg:#448888 #ffffff'
|
||||||
|
completion-menu.multi-column-meta = 'bg:#aaffff #000000'
|
||||||
|
scrollbar.arrow = 'bg:#003333'
|
||||||
|
scrollbar = 'bg:#00aaaa'
|
||||||
|
selected = '#ffffff bg:#6666aa'
|
||||||
|
search = '#ffffff bg:#4444aa'
|
||||||
|
search.current = '#ffffff bg:#44aa44'
|
||||||
|
bottom-toolbar = 'bg:#222222 #aaaaaa'
|
||||||
|
bottom-toolbar.off = 'bg:#222222 #888888'
|
||||||
|
bottom-toolbar.on = 'bg:#222222 #ffffff'
|
||||||
|
search-toolbar = 'noinherit bold'
|
||||||
|
search-toolbar.text = 'nobold'
|
||||||
|
system-toolbar = 'noinherit bold'
|
||||||
|
arg-toolbar = 'noinherit bold'
|
||||||
|
arg-toolbar.text = 'nobold'
|
||||||
|
bottom-toolbar.transaction.valid = 'bg:#222222 #00ff5f bold'
|
||||||
|
bottom-toolbar.transaction.failed = 'bg:#222222 #ff005f bold'
|
||||||
|
|
||||||
|
# style classes for colored table output
|
||||||
|
output.header = "#00ff5f bold"
|
||||||
|
output.odd-row = ""
|
||||||
|
output.even-row = ""
|
||||||
|
|
||||||
|
# Named queries are queries you can execute by name.
|
||||||
|
[named queries]
|
||||||
|
|
||||||
|
# DSN to call by -D option
|
||||||
|
[alias_dsn]
|
||||||
|
# example_dsn = postgresql://[user[:password]@][netloc][:port][/dbname]
|
||||||
|
|
||||||
|
# Format for number representation
|
||||||
|
# for decimal "d" - 12345678, ",d" - 12,345,678
|
||||||
|
# for float "g" - 123456.78, ",g" - 123,456.78
|
||||||
|
[data_formats]
|
||||||
|
decimal = ""
|
||||||
|
float = ""
|
24
.config/plasma/plasmoids.yml
Normal file
24
.config/plasma/plasmoids.yml
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
---
|
||||||
|
plasmoids:
|
||||||
|
- name: Application Title
|
||||||
|
link: https://store.kde.org/p/1199712/
|
||||||
|
- name: Command Output
|
||||||
|
link: https://store.kde.org/p/1166510/
|
||||||
|
- name: Compact Shutdown
|
||||||
|
link: https://store.kde.org/p/1483671
|
||||||
|
- name: Configurable Button
|
||||||
|
link: https://store.kde.org/p/1297839
|
||||||
|
- name: Event Calendar
|
||||||
|
link: https://store.kde.org/p/998901
|
||||||
|
- name: Netspeed Widget
|
||||||
|
link: https://store.kde.org/p/998895/
|
||||||
|
- name: Server Status
|
||||||
|
link: https://store.kde.org/p/1190292
|
||||||
|
- name: Plasma Configuration Saver
|
||||||
|
link: https://store.kde.org/p/1298955/
|
||||||
|
- name: Webslice
|
||||||
|
link: https://store.kde.org/p/998902
|
||||||
|
- name: Window Title
|
||||||
|
link: https://store.kde.org/p/1274218/
|
||||||
|
- name: Wunderground Extended
|
||||||
|
link: https://store.kde.org/p/1756638/
|
|
@ -1,2 +1,2 @@
|
||||||
[Theme]
|
[Theme]
|
||||||
name=Betelgeuse
|
name=Betelgeuse
|
||||||
|
|
29
.config/rclone/merge_rclone.conf
Normal file
29
.config/rclone/merge_rclone.conf
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
{{- if and (ne .user.CLOUDFLARE_ACCESS_KEY_ID "") (ne .user.CLOUDFLARE_SECRET_ACCESS_KEY "") (ne .user.CLOUDFLARE_R2_ACCOUNT_ID "") }}
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Consider https://github.com/dustinsand/blockinfile
|
||||||
|
CONFIG_FILE="$HOME/.config/rclone/rclone.conf"
|
||||||
|
if cat "$CONFIG_FILE" | grep '# MEGABYTE LABS MANAGED r2-user'; then
|
||||||
|
# TODO: Remove old block
|
||||||
|
START_LINE="$(echo `grep -n -m 1 "# MEGABYTE LABS MANAGED r2-user" .zshrc | cut -f1 -d ":"`)"
|
||||||
|
END_LINE="$(echo `grep -n -m 1 "# MEGABYTE LABS MANAGED r2-user" .zshrc | cut -f1 -d ":"`)"
|
||||||
|
if command -v gsed > /dev/null; then
|
||||||
|
gsed -i "$START_LINE,$END_LINEd" "$CONFIG_FILE"
|
||||||
|
else
|
||||||
|
sed -i "$START_LINE,$END_LINEd" "$CONFIG_FILE"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
tee -a "$CONFIG_FILE" > /dev/null <<EOT
|
||||||
|
# MEGABYTE LABS MANAGED r2-user
|
||||||
|
[r2-user]
|
||||||
|
type = s3
|
||||||
|
provider = Cloudflare
|
||||||
|
access_key_id = {{ .user.CLOUDFLARE_ACCESS_KEY_ID }}
|
||||||
|
secret_access_key = {{ .user.CLOUDFLARE_SECRET_ACCESS_KEY }}
|
||||||
|
region = auto
|
||||||
|
endpoint = https://{{ .user.CLOUDFLARE_R2_ACCOUNT_ID }}.r2.cloudflarestorage.com
|
||||||
|
acl = private
|
||||||
|
# MEGABYTE LABS MANAGED r2-user
|
||||||
|
EOT
|
||||||
|
{{- end }}
|
46
.config/readline/inputrc
Normal file
46
.config/readline/inputrc
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
|
||||||
|
## SMARTER TAB-COMPLETION (Readline bindings) ##
|
||||||
|
|
||||||
|
# Perform file completion in a case insensitive fashion
|
||||||
|
set completion-ignore-case on
|
||||||
|
|
||||||
|
# Treat hyphens and underscores as equivalent
|
||||||
|
set completion-map-case on
|
||||||
|
|
||||||
|
# Display matches for ambiguous patterns at first tab press
|
||||||
|
set show-all-if-ambiguous on
|
||||||
|
|
||||||
|
# Immediately add a trailing slash when autocompleting symlinks to directories
|
||||||
|
set mark-symlinked-directories on
|
||||||
|
|
||||||
|
# Use the text that has already been typed as the prefix for searching through
|
||||||
|
# commands (basically more intelligent Up/Down behavior)
|
||||||
|
"\e[A": history-search-backward
|
||||||
|
"\e[B": history-search-forward
|
||||||
|
|
||||||
|
# Do not autocomplete hidden files unless the pattern explicitly begins with a dot
|
||||||
|
set match-hidden-files off
|
||||||
|
|
||||||
|
# Show all autocomplete results at once
|
||||||
|
set page-completions off
|
||||||
|
|
||||||
|
# If there are more than 200 possible completions for a word, ask to show them all
|
||||||
|
set completion-query-items 200
|
||||||
|
|
||||||
|
# Show extra file information when completing, like `ls -F` does
|
||||||
|
set visible-stats on
|
||||||
|
|
||||||
|
# Be more intelligent when autocompleting by also looking at the text after
|
||||||
|
# the cursor. For example, when the current line is "cd ~/src/mozil", and
|
||||||
|
# the cursor is on the "z", pressing Tab will not autocomplete it to "cd
|
||||||
|
# ~/src/mozillail", but to "cd ~/src/mozilla". (This is supported by the
|
||||||
|
# Readline used by Bash 4.)
|
||||||
|
set skip-completed-text on
|
||||||
|
|
||||||
|
# Allow UTF-8 input and output, instead of showing stuff like $'\0123\0456'
|
||||||
|
set input-meta on
|
||||||
|
set output-meta on
|
||||||
|
set convert-meta off
|
||||||
|
|
||||||
|
# Use Alt/Meta + Delete to delete the preceding word
|
||||||
|
"\e[3;3~": kill-word
|
21
.config/ripgrep/config
Normal file
21
.config/ripgrep/config
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
# Don't let ripgrep vomit really long lines to my terminal, and show a preview.
|
||||||
|
--max-columns=150
|
||||||
|
--max-columns-preview
|
||||||
|
|
||||||
|
# Add my 'web' type.
|
||||||
|
--type-add
|
||||||
|
web:*.{html,css,js}*
|
||||||
|
|
||||||
|
# Using glob patterns to include/exclude files or folders
|
||||||
|
--glob=!git/*
|
||||||
|
|
||||||
|
# or
|
||||||
|
--glob
|
||||||
|
!git/*
|
||||||
|
|
||||||
|
# Set the colors.
|
||||||
|
--colors=line:none
|
||||||
|
--colors=line:style:bold
|
||||||
|
|
||||||
|
# Because who cares about case!?
|
||||||
|
--smart-case
|
25
.config/shell/.private
Normal file
25
.config/shell/.private
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
export LEXICON_CLOUDFLARE_USERNAME={{ .user.CLOUDFLARE_USERNAME }}
|
||||||
|
|
||||||
|
export ANSIBLE_GALAXY_TOKEN=""
|
||||||
|
export ANSIBLE_VAULT_PASSWORD=""
|
||||||
|
export CLOUDSDK_CORE_PROJECT={{ .user.CLOUDSDK_CORE_PROJECT }}
|
||||||
|
export GCE_SERVICE_ACCOUNT_EMAIL={{ .user.GCE_SERVICE_ACCOUNT_EMAIL }}
|
||||||
|
export GCE_CREDENTIALS_FILE={{ .user.GCE_CREDENTIALS_FILE }}
|
||||||
|
export DOCKERHUB_TOKEN=""
|
||||||
|
export DOCKERHUB_REGISTRY_PASSWORD="$DOCKERHUB_TOKEN"
|
||||||
|
export GH_TOKEN=""
|
||||||
|
export GITHUB_TOKEN="$GH_TOKEN"
|
||||||
|
export GL_TOKEN=""
|
||||||
|
export GITLAB_TOKEN="$GL_TOKEN"
|
||||||
|
export HEROKU_API_KEY=""
|
||||||
|
export LEXICON_CLOUDFLARE_TOKEN=""
|
||||||
|
export NPM_TOKEN=""
|
||||||
|
export PYPI_TOKEN=""
|
||||||
|
export SNAPCRAFT_EMAIL={{ .user.SNAPCRAFT_EMAIL }}
|
||||||
|
export SNAPCRAFT_MACAROON=""
|
||||||
|
export SNAPCRAFT_UNBOUND_DISCHARGE=""
|
||||||
|
export VAGRANT_CLOUD_TOKEN=""
|
||||||
|
|
||||||
|
export FULLY_AUTOMATED_TASKS=true
|
138
.config/shell/functions
Normal file
138
.config/shell/functions
Normal file
|
@ -0,0 +1,138 @@
|
||||||
|
# Install WebDriverAgent on iOS device
|
||||||
|
appiumwebdriver() {
|
||||||
|
# read -r "Enter the UDID of the device you wish to install WebDriverAgent on: " UDID_INPUT
|
||||||
|
mkdir -p Resources/WebDriverAgent.bundle
|
||||||
|
bash ./Scripts/bootstrap.sh -d
|
||||||
|
cd /Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-webdriveragent || return
|
||||||
|
xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination "id=${UDID_INPUT}" test
|
||||||
|
}
|
||||||
|
|
||||||
|
asdf-update () {
|
||||||
|
asdf update > /dev/null 2>&1
|
||||||
|
asdf plugin update --all > /dev/null 2>&1
|
||||||
|
diff <(cat ~/.tool-versions | awk '{print $1}' | xargs -I {} bash -c 'echo {} $(asdf latest {})') <(cat ~/.tool-versions)
|
||||||
|
}
|
||||||
|
|
||||||
|
# Change directories and view contents at the same time
|
||||||
|
cl() {
|
||||||
|
DIR="$*"
|
||||||
|
# if no DIR given, go home
|
||||||
|
if [ $# -lt 1 ]; then
|
||||||
|
DIR=$HOME
|
||||||
|
fi
|
||||||
|
builtin cd "${DIR}" &&
|
||||||
|
# use your preferred ls command
|
||||||
|
ls -F --color=auto
|
||||||
|
}
|
||||||
|
|
||||||
|
# Safer cp with progress bar and backup to /tmp
|
||||||
|
cpv() {
|
||||||
|
rsync -pogbr -hhh --backup-dir="/tmp/rsync-${USERNAME}" -e /dev/null --progress "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Checks status of a website on downforeveryoneorjustme.com
|
||||||
|
down4me() {
|
||||||
|
curl -s "http://www.downforeveryoneorjustme.com/$1" | sed '/just you/!d;s/<[^>]*>//g'
|
||||||
|
}
|
||||||
|
|
||||||
|
# Easier version of find command
|
||||||
|
find() {
|
||||||
|
if [ $# = 1 ]; then
|
||||||
|
# shellcheck disable=SC2145
|
||||||
|
command find . -iname "*$@*"
|
||||||
|
else
|
||||||
|
command find "$@"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Opens current repository in browser
|
||||||
|
gitopen() {
|
||||||
|
git remote -v | head -n 1 | awk -F "@" '{print $2}' | awk -F " " '{print $1}' | sed 's/:/\//g' | sed 's/.git//g' | awk '{print "http://"$1}' | xargs open
|
||||||
|
}
|
||||||
|
|
||||||
|
# Open Mac OS X desktop on a Linux machine
|
||||||
|
macosx() {
|
||||||
|
docker run -it --device /dev/kvm -p 50922:10022 -v /tmp/.X11-unix:/tmp/.X11-unix -e "DISPLAY=${DISPLAY:-:0.0}" sickcodes/docker-osx:big-sur
|
||||||
|
}
|
||||||
|
|
||||||
|
# Generate a random string of X length
|
||||||
|
randomstring() {
|
||||||
|
if [ -z "$1" ]; then
|
||||||
|
head /dev/urandom | tr -dc A-Za-z0-9 | head -c "$1"
|
||||||
|
else
|
||||||
|
echo "Pass the number of characters you would like the string to be. Example: randomstring 14"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Reset Docker to factory settings
|
||||||
|
resetdocker() {
|
||||||
|
set +e
|
||||||
|
CONTAINER_COUNT="$(docker ps -a -q | wc -l)"
|
||||||
|
if [ "$CONTAINER_COUNT" -gt 0 ]; then
|
||||||
|
docker stop "$(docker ps -a -q)"
|
||||||
|
docker rm "$(docker ps -a -q)"
|
||||||
|
fi
|
||||||
|
VOLUME_COUNT="$(docker volume ls -q | wc -l)"
|
||||||
|
if [ "$VOLUME_COUNT" -gt 0 ]; then
|
||||||
|
docker volume rm "$(docker volume ls -q)"
|
||||||
|
fi
|
||||||
|
NETWORK_COUNT="$(docker network ls -q | wc -l)"
|
||||||
|
if [ "$NETWORK_COUNT" -gt 0 ]; then
|
||||||
|
docker network rm "$(docker network ls -q)"
|
||||||
|
fi
|
||||||
|
docker system prune -a --force
|
||||||
|
}
|
||||||
|
|
||||||
|
# ripgrep-all
|
||||||
|
rgafzf() {
|
||||||
|
RG_PREFIX="rga --files-with-matches"
|
||||||
|
local file
|
||||||
|
file="$(
|
||||||
|
FZF_DEFAULT_COMMAND="$RG_PREFIX '$1'" \
|
||||||
|
fzf --sort --preview="[[ ! -z {} ]] && rga --pretty --context 5 {q} {}" \
|
||||||
|
--phony -q "$1" \
|
||||||
|
--bind "change:reload:$RG_PREFIX {q}" \
|
||||||
|
--preview-window="70%:wrap"
|
||||||
|
)" &&
|
||||||
|
echo "opening $file" &&
|
||||||
|
xdg-open "$file"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Easy file sharing from the command line, using transfer.sh
|
||||||
|
transfer() {
|
||||||
|
if [ $# -eq 0 ]; then
|
||||||
|
echo -e "No arguments specified.\nUsage:\n transfer <file|directory>\n ... | transfer <file_name>" >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
if tty -s; then
|
||||||
|
file="$1"
|
||||||
|
file_name=$(basename "$file")
|
||||||
|
if [ ! -e "$file" ]; then
|
||||||
|
echo "$file: No such file or directory" >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
if [ -d "$file" ]; then
|
||||||
|
file_name="$file_name.zip"
|
||||||
|
(cd "$file" && zip -r -q - .) | curl --progress-bar --upload-file "-" "https://transfer.sh/$file_name" | tee /dev/null,
|
||||||
|
else
|
||||||
|
curl --progress-bar --upload-file "-" "https://transfer.sh/$file_name" <"$file" | tee /dev/null
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
file_name=$1
|
||||||
|
curl --progress-bar --upload-file "-" "https://transfer.sh/$file_name" | tee /dev/null
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
update-all() {
|
||||||
|
brew update
|
||||||
|
brew upgrade
|
||||||
|
brew upgrade --cask --greedy
|
||||||
|
brew cleanup --prune=1
|
||||||
|
asdf update || true
|
||||||
|
asdf plugin-update --all
|
||||||
|
rustup self update || true
|
||||||
|
rustup update || true
|
||||||
|
npm update -g || true
|
||||||
|
chezmoi upgrade
|
||||||
|
z4h update
|
||||||
|
}
|
25
.config/shell/motd
Normal file
25
.config/shell/motd
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
### MOTD
|
||||||
|
# Add file named .hushlogin in the user's home directory to disable the MOTD
|
||||||
|
if [ "$BASH_SUPPORT" = 'true' ] && [ ! -f ~/.hushlogin ] && [ "$SHLVL" -eq 1 ]; then
|
||||||
|
if [ -f "$HOME/.local/scripts/motd.bash" ] && { [ -n "$SSH_CONNECTION" ] && [[ $- == *i* ]]; } || command -v qubes-vmexec > /dev/null || command -v qubes-dom0-update > /dev/null || { [ -d /Applications ] && [ -d /System ]; }; then
|
||||||
|
if { [ -z "$MOTD" ] || [ "$MOTD" -ne 0 ]; } && [[ "$(hostname)" != *'-minimal' ]]; then
|
||||||
|
. "$HOME/.local/scripts/motd.bash"
|
||||||
|
# TODO - -- services
|
||||||
|
if [ -n "$SSH_CONNECTION" ]; then
|
||||||
|
# SSH
|
||||||
|
bash_motd --banner --processor --memory --diskspace --docker --updates --letsencrypt --login
|
||||||
|
elif command -v qubes-vmexec > /dev/null; then
|
||||||
|
# Qubes AppVM
|
||||||
|
bash_motd --banner --memory --diskspace --docker --updates
|
||||||
|
elif command -v qubes-dom0-update > /dev/null; then
|
||||||
|
# Qubes dom0
|
||||||
|
bash_motd --banner --updates
|
||||||
|
elif [ -d /Applications ] && [ -d /System ]; then
|
||||||
|
# macOS
|
||||||
|
bash_motd --banner
|
||||||
|
else
|
||||||
|
bash_motd --banner --processor --memory --diskspace --docker --updates --letsencrypt --login
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
149
.config/shell/profile
Normal file
149
.config/shell/profile
Normal file
|
@ -0,0 +1,149 @@
|
||||||
|
# shellcheck disable=SC1090,SC1091
|
||||||
|
|
||||||
|
# Aliases / Functions / Exports
|
||||||
|
export XDG_CONFIG_HOME="$HOME/.config"
|
||||||
|
if [ -f "$XDG_CONFIG_HOME/shell/exports" ]; then
|
||||||
|
. "$XDG_CONFIG_HOME/shell/exports"
|
||||||
|
fi
|
||||||
|
if [ -f "$XDG_CONFIG_HOME/shell/aliases" ]; then
|
||||||
|
. "$XDG_CONFIG_HOME/shell/aliases"
|
||||||
|
fi
|
||||||
|
if [ -f "$XDG_CONFIG_HOME/shell/functions" ]; then
|
||||||
|
. "$XDG_CONFIG_HOME/shell/functions"
|
||||||
|
fi
|
||||||
|
|
||||||
|
### Colorize
|
||||||
|
alias grep='grep --color=auto'
|
||||||
|
alias fgrep='fgrep --color=auto'
|
||||||
|
alias egrep='egrep --color=auto'
|
||||||
|
alias diff='diff --color=auto'
|
||||||
|
alias ip='ip --color=auto'
|
||||||
|
alias pacman='pacman --color=auto'
|
||||||
|
|
||||||
|
### Aliases (better defaults for simple commands)
|
||||||
|
alias cp='cp -v'
|
||||||
|
alias rm='rm -I'
|
||||||
|
alias mv='mv -iv'
|
||||||
|
alias ln='ln -sriv'
|
||||||
|
alias xclip='xclip -selection c'
|
||||||
|
command -v vim > /dev/null && alias vi='vim'
|
||||||
|
|
||||||
|
### TOP - order based on preference of "top" application (last item will always be chosen if installed, e.g. glances)
|
||||||
|
command -v htop > /dev/null && alias top='htop'
|
||||||
|
command -v gotop > /dev/null && alias top='gotop -p $([ "$COLOR_SCHEME" = "light" ] && echo "-c default-dark")'
|
||||||
|
command -v ytop > /dev/null && alias top='ytop -p $([ "$COLOR_SCHEME" = "light" ] && echo "-c default-dark")'
|
||||||
|
command -v btm > /dev/null && alias top='btm $([ "$COLOR_SCHEME" = "light" ] && echo "--color default-light")'
|
||||||
|
# themes for light/dark color-schemes inside ~/.config/bashtop; Press ESC to open the menu and change the theme
|
||||||
|
command -v bashtop > /dev/null && alias top='bashtop'
|
||||||
|
command -v bpytop > /dev/null && alias top='bpytop'
|
||||||
|
command -v glances > /dev/null && alias top='glances'
|
||||||
|
|
||||||
|
### Bash / ZSH
|
||||||
|
if [ "$BASH_SUPPORT" = 'true' ]; then
|
||||||
|
### OS Detection
|
||||||
|
if [ -f /etc/os-release ]; then
|
||||||
|
. /etc/os-release
|
||||||
|
if [ "$ID" = 'alpine' ]; then
|
||||||
|
OS_ICON=""
|
||||||
|
elif [ "$ID" = 'arch' ]; then
|
||||||
|
OS_ICON=""
|
||||||
|
elif [ "$ID" = 'centos' ]; then
|
||||||
|
OS_ICON=""
|
||||||
|
elif [ "$ID" = 'coreos' ]; then
|
||||||
|
OS_ICON=""
|
||||||
|
elif [ "$ID" = 'debian' ]; then
|
||||||
|
OS_ICON=""
|
||||||
|
elif [ "$ID" = 'deepin' ]; then
|
||||||
|
OS_ICON=""
|
||||||
|
elif [ "$ID" = 'elementary' ]; then
|
||||||
|
OS_ICON=""
|
||||||
|
elif [ "$ID" = 'endeavour' ]; then
|
||||||
|
OS_ICON=""
|
||||||
|
elif [ "$ID" = 'freebsd' ]; then
|
||||||
|
OS_ICON=""
|
||||||
|
elif [ "$ID" = 'gentoo' ]; then
|
||||||
|
OS_ICON=""
|
||||||
|
elif [ "$ID" = 'kali' ]; then
|
||||||
|
OS_ICON=""
|
||||||
|
elif [ "$ID" = 'linuxmint' ]; then
|
||||||
|
OS_ICON=""
|
||||||
|
elif [ "$ID" = 'manjaro' ]; then
|
||||||
|
OS_ICON=""
|
||||||
|
elif [ "$ID" = 'nixos' ]; then
|
||||||
|
OS_ICON=""
|
||||||
|
elif [ "$ID" = 'openbsd' ]; then
|
||||||
|
OS_ICON=""
|
||||||
|
elif [ "$ID" = 'opensuse' ]; then
|
||||||
|
OS_ICON=""
|
||||||
|
elif [ "$ID" = 'parrot' ]; then
|
||||||
|
OS_ICON=""
|
||||||
|
elif [ "$ID" = 'pop_os' ]; then
|
||||||
|
OS_ICON=""
|
||||||
|
elif [ "$ID" = 'raspberry_pi' ]; then
|
||||||
|
OS_ICON=""
|
||||||
|
elif [ "$ID" = 'redhat' ]; then
|
||||||
|
OS_ICON=""
|
||||||
|
elif [ "$ID" = 'fedora' ]; then
|
||||||
|
OS_ICON=""
|
||||||
|
elif [ "$ID" = 'ubuntu' ]; then
|
||||||
|
OS_ICON=""
|
||||||
|
else
|
||||||
|
OS_ICON=""
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if [ -d /Applications ] && [ -d /Library ] && [ -d /System ]; then
|
||||||
|
# macOS
|
||||||
|
OS_ICON=""
|
||||||
|
else
|
||||||
|
OS_ICON=""
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
### ASDF
|
||||||
|
if [ -f "$ASDF_DIR/asdf.sh" ]; then
|
||||||
|
. "$ASDF_DIR/asdf.sh"
|
||||||
|
fi
|
||||||
|
|
||||||
|
### Directory Colors
|
||||||
|
if [ -f "$XDG_CONFIG_HOME/shell/lscolors.sh" ]; then
|
||||||
|
. "$XDG_CONFIG_HOME/shell/lscolors.sh"
|
||||||
|
fi
|
||||||
|
|
||||||
|
### fzf-git
|
||||||
|
if [ -f "$HOME/.local/scripts/fzf-git.bash" ]; then
|
||||||
|
. "$HOME/.local/scripts/fzf-git.bash"
|
||||||
|
fi
|
||||||
|
|
||||||
|
### MOTD
|
||||||
|
if [ -f "$XDG_CONFIG_HOME/shell/motd" ]; then
|
||||||
|
. "$XDG_CONFIG_HOME/shell/motd"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
### Cargo
|
||||||
|
if [ -f "$CARGO_HOME/env" ]; then
|
||||||
|
. "$CARGO_HOME/env"
|
||||||
|
fi
|
||||||
|
|
||||||
|
### Docker Functions / Aliases
|
||||||
|
if [ -f "$HOME/.local/scripts/docker-functions.bash" ]; then
|
||||||
|
. "$HOME/.local/scripts/docker-functions.bash"
|
||||||
|
fi
|
||||||
|
|
||||||
|
### fzf-tmux
|
||||||
|
if [ -f "$HOME/.local/scripts/fzf-tmux.bash" ]; then
|
||||||
|
. "$HOME/.local/scripts/fzf-tmux.bash"
|
||||||
|
fi
|
||||||
|
|
||||||
|
### SDKMan
|
||||||
|
if command -v brew > /dev/null && command -v sdkman-cli > /dev/null; then
|
||||||
|
export SDKMAN_DIR="$(brew --prefix sdkman-cli)/libexec"
|
||||||
|
. "$SDKMAN_DIR/bin/sdkman-init.sh"
|
||||||
|
elif [ -f "$SDKMAN_DIR/bin/sdkman-init.sh" ]; then
|
||||||
|
export SDKMAN_DIR="$XDG_DATA_HOME/sdkman"
|
||||||
|
. "$SDKMAN_DIR/bin/sdkman-init.sh"
|
||||||
|
fi
|
||||||
|
|
||||||
|
### VIM
|
||||||
|
export GVIMINIT='let $MYGVIMRC="$XDG_CONFIG_HOME/vim/gvimrc" | source $MYGVIMRC'
|
||||||
|
export VIMINIT='let $MYVIMRC="$XDG_CONFIG_HOME/vim/vimrc" | source $MYVIMRC'
|
38
.config/wget/wgetrc
Normal file
38
.config/wget/wgetrc
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
# Use the server-provided last modification date, if available
|
||||||
|
timestamping = on
|
||||||
|
|
||||||
|
# Do not go up in the directory structure when downloading recursively
|
||||||
|
no_parent = on
|
||||||
|
|
||||||
|
# Wait 60 seconds before timing out. This applies to all timeouts: DNS, connect and read. (The default read timeout is 15 minutes!)
|
||||||
|
timeout = 60
|
||||||
|
|
||||||
|
# Retry a few times when a download fails, but don’t overdo it. (The default is 20!)
|
||||||
|
tries = 3
|
||||||
|
|
||||||
|
# Retry even when the connection was refused
|
||||||
|
retry_connrefused = on
|
||||||
|
|
||||||
|
# Use the last component of a redirection URL for the local file name
|
||||||
|
trust_server_names = on
|
||||||
|
|
||||||
|
# Follow FTP links from HTML documents by default
|
||||||
|
follow_ftp = on
|
||||||
|
|
||||||
|
# Add a `.html` extension to `text/html` or `application/xhtml+xml` files that lack one, or a `.css` extension to `text/css` files that lack one
|
||||||
|
adjust_extension = on
|
||||||
|
|
||||||
|
# Use UTF-8 as the default system encoding
|
||||||
|
# Disabled as it makes `wget` builds that don’t support this feature unusable.
|
||||||
|
# Does anyone know how to conditionally configure a wget setting?
|
||||||
|
# http://unix.stackexchange.com/q/34730/6040
|
||||||
|
#local_encoding = UTF-8
|
||||||
|
|
||||||
|
# Ignore `robots.txt` and `<meta name=robots content=nofollow>`
|
||||||
|
robots = off
|
||||||
|
|
||||||
|
# Print the HTTP and FTP server responses
|
||||||
|
server_response = on
|
||||||
|
|
||||||
|
# Disguise as IE 9 on Windows 7
|
||||||
|
user_agent = Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
|
6
.config/youtube-dl/config
Normal file
6
.config/youtube-dl/config
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# saner output
|
||||||
|
-o %(title)s.%(ext)s
|
||||||
|
|
||||||
|
# Aira2c
|
||||||
|
--external-downloader aria2c
|
||||||
|
--external-downloader-args '-c -j 6 -x 6 -s 6 -k 1M'
|
0
.gnupg/public/linux.wazuh.sig
Normal file
0
.gnupg/public/linux.wazuh.sig
Normal file
85
.gnupg/public/qubes.uman.sig
Normal file
85
.gnupg/public/qubes.uman.sig
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
|
mQINBFdt07cBEADGBsfWMKLODNkW8ro4ltREGK7KVgI1ETvgc1inGa79lW33F5/z
|
||||||
|
cP8vwVTwn1ntb6hFvQPDkrU2ewy0pYyXahSRPKsGn8ldKzjA5O/iACkpLdEgl8//
|
||||||
|
3xw5XUKF16KO16w/OdcfR+6bxveMN4tr5yxEFSkpoviLzJdCcOfduaLlKijGsDhW
|
||||||
|
Ay36UWrbNiV5HsplM3hQy6CTjYe1/1psvf0B1QM7OXJMKgGtY6BSDoZ8etnhVYHy
|
||||||
|
/yGSDuof2cx9WTX3hnkX9db1YucSwUHq2BVqpjv5osUilEjMNPcMybpxv4UHZ25k
|
||||||
|
kh73QEqrwMhodFvwBW6M3h5nG7YbgBFPMMftVJExpbvwoKxFVclY0u+oGCxvxE2f
|
||||||
|
X5vA418ehF8ILN8NJA5DVv38bVN7SG1w7PUcpXuG1GL3SP7gDqdEJ2MOqIqSokAw
|
||||||
|
uMtDo3pRBkrVjbIxiJ1z37fVcl17ZI6s/Fg3IEd61VAgwObD5mOEmkJt1m8tsqGx
|
||||||
|
iVdr16yR7LfdBXZplCDBYzRcWlslSbSwG7878bLJoc05eXxgr8jq3nlRYbCjXgHM
|
||||||
|
FnfDVLbeyyfyGNqA5AMlQB9o5Iv12iHFuN9z15Ie6d2ds59Cw5d5SOyya9vLUIfD
|
||||||
|
W+V5ypCW/4sf1w8KQhPUu49OLwgcyeXPismEpSj3XIPF0LUFFrfAbPHlMQARAQAB
|
||||||
|
tDl1bm1hbiAoUXViZXMgT1Mgc2lnbmluZyBrZXkpIDx1bm1hbkB0aGlyZGV5ZXNl
|
||||||
|
Y3VyaXR5Lm9yZz6JAjcEEwEIACECGwMFCwkIBwMFFQoJCAsFFgIDAQACHgECF4AF
|
||||||
|
Ald0ZXgACgkQiz8w+cjAwu/cmw/+LLkkSf0QfiSiKhqWQiXFRYngKxAAaiLZV3kc
|
||||||
|
LCQsZeg7eS8GZYJx19vplBhpGarPGw0REZrvPMfZBcK1YKM7Dt7VfUv49Cd3jPb0
|
||||||
|
7W6pMfOOcuQO1UV1mqskziWvW1ooikc/HUJA2kIoTzxr0McFySPdoKtH8MsoEecK
|
||||||
|
fMqYIjNp31w6JEsQRVzNVmaVrEj8+w1e6miVNpKvokMSNF/x44tpt/Y2C4g1Gxw6
|
||||||
|
lPZYunJsTJK69taJbVDVCRvwwhJwHwbIqJWNIpoVDOpZjOvQlz0GPjTiBrA15AtG
|
||||||
|
eU6NmMJ5qc9Sw/l3gTfh5SCANo5Q/7s+CX5xFpeGwJx6YDpjZCvR78SGi5cjetmT
|
||||||
|
iWC1coGxjSSoqJb4T1Kbv/ErJellN1MO6+zmioCgx84qJjU3SuqNKdmc3hWRlbCS
|
||||||
|
CrwKcVZnjLRmlI7XygndpPB9hM/GB9Wn5+/5j0IFmeCECUtzEmod2l+vTUeutReb
|
||||||
|
uR+/1FD/p7NL8VfA/tq4d6GTSr6vYSYIL89PpO8Sh5G5PsahjATkv/yUJDmtT+14
|
||||||
|
nkV+HmQfvT9xrV9tvKbLWcv1RTQf+j3Lk2fXyjxbLsDXIBB2/FfZEFE9E/2uA+Zm
|
||||||
|
y/o5wkG+xe4Vlx4eRoEM7SLJoXUxkVVAi26sAmYYAh+LkvcAy1IzYaTkS2hU+3Rm
|
||||||
|
iemoD4e5Ag0EV23TtwEQAMNa9zUDTt9bT2nja+isou+9DJZZQVl46Lx2My780FVo
|
||||||
|
WWyFjd6vX04TlybLhlD3njg4PQAo7xQ909BRSqKxCkdbwoJfHYNC1FIfOdV+9caw
|
||||||
|
yaIl5xBc/B7D0+2NdzRc73W0stikNdnkS1lL4rD1TjsUMh/8roiUzNwcU8tIuluw
|
||||||
|
2U+jiqbPJ2QLL3Sp4uIcsGb4j7Kf9zUtPVw9JuUscBFkRNFr4U8EWjM4zXBm1jFR
|
||||||
|
CGZ/EI6b2I8W5TjK2RmJXR1gwr8f6gSJqiirjKAqxq4kc7puOFlkRXAknu597aT1
|
||||||
|
eNBpQPqMX0K9S/vnPSUqjWYLZQ4+YjXYZTpg18tkoxGyDn3jGuFlv+NncL2v3SKM
|
||||||
|
ejmN4Tyb+184GqcDZ5T91XWXjV2Fz7UgFtoqLPtRG5EQPAMlEottKHNaOgEsdxy8
|
||||||
|
Cf8G1E58BVpVtPGY1qdYD55AjOaBGrdYDzW2iWWcaRr8nMJp6ur9hzrIubYSwRvJ
|
||||||
|
KHH5k7/e+MLJooZkJF7IQwvbzQk7Jgp3DcK4ALXHJdprNHl1BOB+L5vzCXAL+544
|
||||||
|
wwMgptCjEurLC1q4K3Cg3u36EVRTqkmUATdyhl24coHvC8kwHUQMQOUTQEi06TZO
|
||||||
|
bLeg2QMPkMG5Ub3Bu+7Aly7UQApYK7SLmamzw9foG4hKrQ3N4YG53oUKORgxyt9l
|
||||||
|
ABEBAAGJAh8EGAEIAAkFAldt07cCGwwACgkQiz8w+cjAwu8FOw/+LHybBicGuQlv
|
||||||
|
kRIIABa9Yz/GoL3w7GzExzbndWWw9wgY40ZwlfCugODHeRZEvSi/Yq+PV3UTJWJm
|
||||||
|
vxh3N4YpcQE1W6aBaT3ILT06HNQgufc3CFs9ePQZzRTIo4C13FphV+4AhgTnyAKc
|
||||||
|
uRNwdb/QGwf1sUELg92PuBEtb9tq1XnRdsnpncHQuj6+zOvNceXPxqHtw4DcNzZ3
|
||||||
|
Cz2rnsAjKUd4Se/h53MZChwkp14897XIbATbTGuN6i9Dftezw3kuYvpm3h1QnXAN
|
||||||
|
KHQzr8YW5p2SHTnxHYu8hX+BqKyBoldhVWcCKVrhDQH6SrZi4B22/mzOsQKFfCfp
|
||||||
|
dJUAhPvFvq0mEajf+Rxo9/wcq3vEGPnnJzV8exERCfjW9cDi/+7BvbnpIdikZJhL
|
||||||
|
XGq8/NXi8K+2VwLUW5HzuSVXSe73quWV9OXMpNnh0GiGsR5DT8BQgV8LTO59CXfY
|
||||||
|
4ZYWIdP5ClH1fYehc/I/8ZCM/QV8Gtot/EWxTy3dxCBSP2Z4IdaZqH5aCUip906L
|
||||||
|
Wtjodp9YCt/f9pyKjuA1hoKaHIaf8L8M2qDFE5OoLDcrAh9m+QrVQRmtFHaMFcej
|
||||||
|
85SLnQw83PUsMBH0mdDUYiNaRnWiQs1/I1iJKOt6p0/2jNHx7CaxoEoXqznu9o/X
|
||||||
|
bcr+2Sg6D6+XamPTmG687Ow7101hdp25Ag0EV3BtIwEQAL3DM3RBLdxEe3PK8sK0
|
||||||
|
PjZPrCeB/aflFoQxAKMOweYcP72ipuCfuKa3Zxxd6o2OfiuO5w9JPn5s92vCbL8f
|
||||||
|
ZpBJ7SAF5TNOGESBUI18lGVBIb/PCz2kN1qkTPDIKnxoDKW0AEna12LgzhTQBPTh
|
||||||
|
XX37bx3UlH5uMRZUYF+wl/wfD1UaFaY7EwObNQL9WQzMV7AkhIoA8XKyK2cNsOL5
|
||||||
|
S87eLpWwffjaE8oZKcYNIPq0x6DuiOuAPLnc7eUDqogjo0suN10uGnvaOvlWIwly
|
||||||
|
8/8XRwKPHOVlDHU4kEtMnbfbPXNaFrABrF/ApeaOxg1JSSHOPdzqI5ifscAYYXr5
|
||||||
|
xREn5Hh+Se7o1I8zXyHXPd/RTulFykbdmat9w0kVLgor4ahfQeoCj0PwbANlrk1t
|
||||||
|
burh2r16CzeR30sNAcuJqKLKwmjfdjPPBwCqLZbIQIDtpJ/4tSx8l1TWJ04JSQeQ
|
||||||
|
qJZkUpqnOMJup8Baktzbznpy9ac30aHpWL95VXI7hCGa0kbhi7yeDFbLJuMhIli8
|
||||||
|
z5aDRKbT18M3bgoOMWgkFKxi2JMDRbchdsu5bS4GjUnovkq5HxqFI6SRh1TEflqB
|
||||||
|
GiGaBPmCT3d9OTZeyK1y/j7N2dh/3d9Z6dmYs+ppG3749kg0rYpdl3kqHUxlNABu
|
||||||
|
JKcaPQdNJuDnnPMc+6b0Z8pjABEBAAGJBFsEGAEIACYCGwIWIQRLH0AN8lZRtTxB
|
||||||
|
QbOLPzD5yMDC7wUCYrCMvAUJDxEHGQIpwV0gBBkBCAAGBQJXcG0jAAoJEP3RuCRH
|
||||||
|
MbNs6CwP/AnUBcsrvYLskStJ7c75vsM1IUQ60gYd8HR2kLAlaG5kkdMVrH7J2lkD
|
||||||
|
ZYMoT0ZBV2jpMTe6DpSl6+51t0VCrxYjRAt0xCkchNtFrWmbFlbzX8SjdLxuQboH
|
||||||
|
171vYboVS580mK2SNnExif57mga0sfMc9nPOpzwzqlt2h0q4wbOANPUv7Hz0Vb8I
|
||||||
|
awWoppR8ztif2zj4NxzFAbw4LloxFlllinbqtTatFn962naz86owCalopxqqJt+f
|
||||||
|
Gw4aFFwL7Q0vAJoBO94WooEQ4a5YfiICF02RszOm/LkI/uMGlekhRXek97BKWD5f
|
||||||
|
v7KjCLYexFF2Vnzjr2nzi7gWvO0bVlFeVGY6NfT+2Pv+NFapeDLOJe1488eeXpF5
|
||||||
|
T0iBERh42f3PwGPMaLCvmgCps6u4h5YBiohpsjuYv5mYok9CwEquOPKG86iBfPtL
|
||||||
|
kcXf4I3rkjwYteed2WyCTnpQRuHMzeI19WOs/bFuNPCXiRVVAn1KB/mHQKIxZKut
|
||||||
|
cEZMgAtD//ruhTTvsUBSloDSb/3efm2cZHrix6TjrePbji5nFq7FMClP2Ro1u0wA
|
||||||
|
ZURkhzDKEkXC94RhUXO0HukUQwFzNRXyVVV8jmTGGiuqO8Q3cijmFO054tDxiLD6
|
||||||
|
V5BRnxyQOeQdyxNI8rFEIF4HQn/I28HAl/KDXWcRSMUG2jD5jIGNCRCLPzD5yMDC
|
||||||
|
7x0DD/9Umr0Rc9Un9koCQgmhj97WOjZhuKOVPxyGzwyjMYs0ii3pSNYYxUQ7mO6X
|
||||||
|
sycDs0YwstUZ0GtanF6ebOHZF1vQwp3RY9zGuBV3gLGo5A6FWcCbWjh6409hKe3J
|
||||||
|
tSiIEOOeEV/wcc2BiGfj2DWOi/063gzBfrwRmbCao5/Saw+yhfe7BmTneoYjzHbN
|
||||||
|
Ttd+xhDT0ybTMvvMHkR7Aazy7zfl1OdQhfi+T2NWRZdsKWV12pQo8DTeTIUQUKp6
|
||||||
|
pmbMazYx5uV6HlCo4Mx+A0z3IBodln/QoE2Glphqn1vGkJWmEA0g2gcMRafzZ5xE
|
||||||
|
Y5WHiB4fhJ2kM/xjj/XBUpBSX2R13kvc6aYBTXKCny6CUmFyLpgpPh8udQLazbAs
|
||||||
|
uwTdSNVkqgJsV/Mf9onMvMvAuBZME9EyzTK85O0HUZVj1NYNINsdYiFh1qHrdAN0
|
||||||
|
RGJkkOKfrYtl/3ER+MI6PeHuaj8akQEmmyvs65tq38VBBnYjIpCbmqVJAJ/fKwuI
|
||||||
|
aBoCTnTKDuMumLVTxZOlnUXJ/uBvd/SEXd5TuOdDiw/zbtR0XaLLMhmlQwX7XFiW
|
||||||
|
PRmrTsEr8wluewET8fekxMosM8cMwn43agCc1IjfB6pGP1CyCoN6T3EnNcu8UxoY
|
||||||
|
CjpmiHZg3mKwE2cDs5WvAt+3Oxww1IiIAKUm2/siNZeshUpBmw==
|
||||||
|
=qJcP
|
||||||
|
-----END PGP PUBLIC KEY BLOCK-----
|
10
.local/Taskfile-local.yml
Normal file
10
.local/Taskfile-local.yml
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
---
|
||||||
|
version: '3'
|
||||||
|
|
||||||
|
# This is your local Taskfile.yml file. You can define tasks and scripts while leveraging some of the nifty
|
||||||
|
# features of https://taskfile.dev. You can safely place your scripts here and they will be combined with
|
||||||
|
# a veteran stack of Taskfile.yml files. You can access the tasks defined here by running
|
||||||
|
# `run local:default` for example. You must keep all the tasks in this file without including other files
|
||||||
|
# because the main Taskfile.yml is a symlinked one. Anyway, try `run local:default`.
|
||||||
|
tasks:
|
||||||
|
default: echo "Get started on https://taskfile.dev"
|
55
.local/assets/Betelgeuse.macOS.terminal
Normal file
55
.local/assets/Betelgeuse.macOS.terminal
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>Betelgeuse</string>
|
||||||
|
<key>type</key>
|
||||||
|
<string>Window Settings</string>
|
||||||
|
<key>BackgroundColor</key>
|
||||||
|
<data>YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjA4NjI3NDUwOTggMC4wOTgwMzkyMTU3IDAuMTQ1MDk4MDM5MgAQAYAC0hAREhNaJGNsYXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA2Q==</data>
|
||||||
|
<key>TextColor</key>
|
||||||
|
<data>YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjY2NjY2NjY2NjcgMC42ODIzNTI5NDEyIDAuNzIxNTY4NjI3NQAQAYAC0hAREhNaJGNsYXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA2Q==</data>
|
||||||
|
<key>BoldTextColor</key>
|
||||||
|
<data>YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjc2NDcwNTg4MjQgMC43ODAzOTIxNTY5IDAuODE5NjA3ODQzMQAQAYAC0hAREhNaJGNsYXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA2Q==</data>
|
||||||
|
<key>CursorColor</key>
|
||||||
|
<data>YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjc2NDcwNTg4MjQgMC43ODAzOTIxNTY5IDAuODE5NjA3ODQzMQAQAYAC0hAREhNaJGNsYXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA2Q==</data>
|
||||||
|
<key>SelectionColor</key>
|
||||||
|
<data>YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjc4MDM5MjE1NjkgMC4zMDE5NjA3ODQzIDAuNTM3MjU0OTAyMAAQAYAC0hAREhNaJGNsYXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA2Q==</data>
|
||||||
|
<key>ANSIBlackColor</key>
|
||||||
|
<data>YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjA4NjI3NDUwOTggMC4wOTgwMzkyMTU3IDAuMTQ1MDk4MDM5MgAQAYAC0hAREhNaJGNsYXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA2Q==</data>
|
||||||
|
<key>ANSIRedColor</key>
|
||||||
|
<data>YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjkyOTQxMTc2NDcgMC4xNDUwOTgwMzkyIDAuMzA1ODgyMzUyOQAQAYAC0hAREhNaJGNsYXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA2Q==</data>
|
||||||
|
<key>ANSIGreenColor</key>
|
||||||
|
<data>YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjQ0MzEzNzI1NDkgMC45Njg2Mjc0NTEwIDAuNjIzNTI5NDExOAAQAYAC0hAREhNaJGNsYXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA2Q==</data>
|
||||||
|
<key>ANSIYellowColor</key>
|
||||||
|
<data>YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjk3NjQ3MDU4ODIgMC44NjI3NDUwOTgwIDAuMzYwNzg0MzEzNwAQAYAC0hAREhNaJGNsYXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA2Q==</data>
|
||||||
|
<key>ANSIBlueColor</key>
|
||||||
|
<data>YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjQ4NjI3NDUwOTggMC43MTc2NDcwNTg4IDEuMDAwMDAwMDAwMAAQAYAC0hAREhNaJGNsYXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA2Q==</data>
|
||||||
|
<key>ANSIMagentaColor</key>
|
||||||
|
<data>YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjc4MDM5MjE1NjkgMC4zMDE5NjA3ODQzIDAuNTM3MjU0OTAyMAAQAYAC0hAREhNaJGNsYXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA2Q==</data>
|
||||||
|
<key>ANSICyanColor</key>
|
||||||
|
<data>YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjAwMDAwMDAwMDAgMC43NTY4NjI3NDUxIDAuODk0MTE3NjQ3MQAQAYAC0hAREhNaJGNsYXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA2Q==</data>
|
||||||
|
<key>ANSIWhiteColor</key>
|
||||||
|
<data>YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjY2NjY2NjY2NjcgMC42ODIzNTI5NDEyIDAuNzIxNTY4NjI3NQAQAYAC0hAREhNaJGNsYXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA2Q==</data>
|
||||||
|
<key>ANSIBrightBlackColor</key>
|
||||||
|
<data>YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjE4NDMxMzcyNTUgMC4xOTYwNzg0MzE0IDAuMjQzMTM3MjU0OQAQAYAC0hAREhNaJGNsYXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA2Q==</data>
|
||||||
|
<key>ANSIBrightRedColor</key>
|
||||||
|
<data>YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjg5MDE5NjA3ODQgMC4zMDU4ODIzNTI5IDAuNDM1Mjk0MTE3NgAQAYAC0hAREhNaJGNsYXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA2Q==</data>
|
||||||
|
<key>ANSIBrightGreenColor</key>
|
||||||
|
<data>YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjUyNTQ5MDE5NjEgMC45MjE1Njg2Mjc1IDAuNjc0NTA5ODAzOQAQAYAC0hAREhNaJGNsYXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA2Q==</data>
|
||||||
|
<key>ANSIBrightYellowColor</key>
|
||||||
|
<data>YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjkyNTQ5MDE5NjEgMC44NDMxMzcyNTQ5IDAuNDc0NTA5ODAzOQAQAYAC0hAREhNaJGNsYXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA2Q==</data>
|
||||||
|
<key>ANSIBrightBlueColor</key>
|
||||||
|
<data>YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjU1Njg2Mjc0NTEgMC43MzMzMzMzMzMzIDAuOTU2ODYyNzQ1MQAQAYAC0hAREhNaJGNsYXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA2Q==</data>
|
||||||
|
<key>ANSIBrightMagentaColor</key>
|
||||||
|
<data>YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjc3NjQ3MDU4ODIgMC40MjM1Mjk0MTE4IDAuNjA3ODQzMTM3MwAQAYAC0hAREhNaJGNsYXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA2Q==</data>
|
||||||
|
<key>ANSIBrightCyanColor</key>
|
||||||
|
<data>YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjE5MjE1Njg2MjcgMC43NjQ3MDU4ODI0IDAuODc0NTA5ODAzOQAQAYAC0hAREhNaJGNsYXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA2Q==</data>
|
||||||
|
<key>ANSIBrightWhiteColor</key>
|
||||||
|
<data>YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjc2NDcwNTg4MjQgMC43ODAzOTIxNTY5IDAuODE5NjA3ODQzMQAQAYAC0hAREhNaJGNsYXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA2Q==</data>
|
||||||
|
<key>Font</key>
|
||||||
|
<data>YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMSAAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGkCwwVFlUkbnVsbNQNDg8QERITFFZOU1NpemVYTlNmRmxhZ3NWTlNOYW1lViRjbGFzcyNAJgAAAAAAABAQgAKAA18QGUhhY2tOZXJkRm9udENvbXBsZXRlLUJvbGTSFxgZGlokY2xhc3NuYW1lWCRjbGFzc2VzVk5TRm9udKIZG1hOU09iamVjdAgRGiQpMjdJTFFTWF5nbnd+hY6QkpSwtcDJ0NMAAAAAAAABAQAAAAAAAAAcAAAAAAAAAAAAAAAAAAAA3A==</data>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
25
.local/bin/bwc
Normal file
25
.local/bin/bwc
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Exit on error
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Command to copy to clipboard
|
||||||
|
COPY="wl-copy"
|
||||||
|
|
||||||
|
# Get list of all logins as json
|
||||||
|
logins="$(bw list items)"
|
||||||
|
# Grab the name of every login and pip them into fzf
|
||||||
|
name="$(echo "$logins" | jq -r '.[].name' | fzf)"
|
||||||
|
# Find the login with the selected name (as a json)
|
||||||
|
selected="$(echo "$logins" | jq -r ".[] | select(.name == \"$name\")")"
|
||||||
|
# Print the name of the selected login
|
||||||
|
echo "Name: $(echo "$selected" | jq -r '.name')"
|
||||||
|
echo "> Copying Username"
|
||||||
|
# Copy the username to the clipboard
|
||||||
|
printf '%s' "$(echo "$selected" | jq -r '.login.username')" | $COPY
|
||||||
|
echo "Press any key to copy password..."
|
||||||
|
# Wait for user input before coping the password
|
||||||
|
read -r
|
||||||
|
echo "> Copying Password"
|
||||||
|
# Copy the password to the clipboard
|
||||||
|
printf '%s' "$(echo "$selected" | jq -r '.login.password')" | $COPY
|
|
@ -1,348 +1 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
#
|
|
||||||
# This script will spawn a new Chrome process restricted to a profile that
|
|
||||||
# is created on demand and (optionally) deleted on exit. If a root profile
|
|
||||||
# directory is given, it will be used as the template for the newly created
|
|
||||||
# profile.
|
|
||||||
#
|
|
||||||
# NOTES:
|
|
||||||
#
|
|
||||||
# Chrome spawning takes place irrespective of any currently running Chrome
|
|
||||||
# processes. The script will always spawn a new Chrome process.
|
|
||||||
#
|
|
||||||
# If a root profile directory is not configured/passed-in as an argument, the
|
|
||||||
# created profile will be a fresh, first-time profile that does not contain
|
|
||||||
# any configuration data or extensions that may be present in a different
|
|
||||||
# profile for the same installed Chrome browser.
|
|
||||||
#
|
|
||||||
# To create a root profile, execute `chrome-private.sh --name name --keep',
|
|
||||||
# and after installing extensions and modifying browser configuration, you
|
|
||||||
# can copy/rename its directory and set it as ROOT_PROFILE_DIR (or pass it
|
|
||||||
# as an argument with --root-profile).
|
|
||||||
#
|
|
||||||
# This is free and unencumbered software released into the public domain.
|
|
||||||
# xristos@sdf.org
|
|
||||||
|
|
||||||
set -em
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# Configuration
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
CONFIG=~/.chrome-private.rc
|
|
||||||
|
|
||||||
if [ -f "${CONFIG}" ]; then
|
|
||||||
source "${CONFIG}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# All of the following user configuration variables can be set in
|
|
||||||
# ~/.chrome-private.rc
|
|
||||||
|
|
||||||
: "${CHROME:=google-chrome}"
|
|
||||||
: "${TMP:=/tmp}"
|
|
||||||
|
|
||||||
# A root chrome profile directory, if it exists it will be used as a template
|
|
||||||
: "${ROOT_PROFILE_DIR:=}"
|
|
||||||
|
|
||||||
# GNU mktemp is required, set this to gmktemp (coreutils) on macOS
|
|
||||||
: "${MKTEMP:=mktemp}"
|
|
||||||
: "${PROFILE_MKTEMP:=chrome.priv.prof_XXXXXXXXXX}"
|
|
||||||
|
|
||||||
: "${PROXY=socks5://127.0.0.1:5060}"
|
|
||||||
|
|
||||||
# Using a ramdisk rather than TMP is a good idea, but doubly so if you're going
|
|
||||||
# to go heavy on number of disposable profiles. hdiutil can be used to create
|
|
||||||
# a ramdisk on macOS.
|
|
||||||
: "${RAMDISK:=}"
|
|
||||||
|
|
||||||
# Remote debugging port
|
|
||||||
: "${DEBUG_PORT:=}"
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# End of user configuration
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
CHROME_ARGS=(--disable-bundled-ppapi-flash --disable-offline-load-stale-cache
|
|
||||||
--disk-cache-size=1 --media-cache-size=1 --disk-cache-dir=/dev/null
|
|
||||||
--no-first-run --no-referrers --save-page-as-mhtml --no-default-browser-check)
|
|
||||||
|
|
||||||
CHROME_NO_GPU_ARGS=(--disable-gpu)
|
|
||||||
CHROME_NO_3D_ARGS=(--disable-3d-apis --disable-webgl)
|
|
||||||
|
|
||||||
keep=0
|
|
||||||
delete=0
|
|
||||||
incognito=0
|
|
||||||
use_gpu=0
|
|
||||||
use_3d=0
|
|
||||||
use_proxy=0
|
|
||||||
profile=
|
|
||||||
profile_name=
|
|
||||||
chrome_pid=0
|
|
||||||
color=0
|
|
||||||
start_color="\e[1;34m"
|
|
||||||
end_color="\e[0m"
|
|
||||||
basename="$(basename "${ROOT_PROFILE_DIR}")"
|
|
||||||
|
|
||||||
if [ -t 1 ]; then
|
|
||||||
color=1
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# Functions
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
function usage {
|
|
||||||
echo "Usage: $0 [--name name] [--temp-name (${PROFILE_MKTEMP})] [--keep] [--delete] [--gpu] [--3d] [--incognito] [--root-profile dir] [--profile dir] [--port port] [--proxy (${PROXY})] -- chrome-arguments"
|
|
||||||
echo -e " --name name of created profile directory"
|
|
||||||
echo -e " this will override --temp-name if given"
|
|
||||||
echo -e " --temp-name this will be passed to mktemp(1) to generate a"
|
|
||||||
echo -e " disposable profile directory name"
|
|
||||||
echo
|
|
||||||
echo -e " --keep do not delete/rename profile directory on exit"
|
|
||||||
echo -e " (implied with --profile)"
|
|
||||||
echo -e " --delete delete rather than rename profile directory"
|
|
||||||
echo -e " (ignored with --keep / --profile)"
|
|
||||||
echo
|
|
||||||
echo -e " --gpu enable gpu acceleration"
|
|
||||||
echo -e " --3d enable WebGL / 3D APIs"
|
|
||||||
echo
|
|
||||||
echo -e " --incognito start Chrome in incognito mode"
|
|
||||||
echo -e " --root-profile use given directory as root profile directory"
|
|
||||||
echo -e " --profile dir use given directory as profile directory (needs to exist)"
|
|
||||||
echo -e " (--root-profile, --name and --temp-name are ignored)"
|
|
||||||
echo -e " --proxy if given, Chrome will use a proxy (default or specified)"
|
|
||||||
echo -e " --port use given port as remote debugging port"
|
|
||||||
echo
|
|
||||||
}
|
|
||||||
|
|
||||||
function msg {
|
|
||||||
if [ "${color}" -eq 1 ]; then
|
|
||||||
printf "${start_color}$1${end_color}\n"
|
|
||||||
else
|
|
||||||
printf "%s\n" "$1"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function err {
|
|
||||||
echo "Error: $*" >&2
|
|
||||||
}
|
|
||||||
|
|
||||||
function setup {
|
|
||||||
# Optional, executed first when --profile is not given.
|
|
||||||
# Currently used to setup the ram disk (if configured).
|
|
||||||
if [ -d "${RAMDISK}" ]; then
|
|
||||||
if [ -d "${ROOT_PROFILE_DIR}" ]; then
|
|
||||||
if [ ! -d "${RAMDISK}/${basename}" ]; then
|
|
||||||
# Copy the root profile to ramdisk
|
|
||||||
msg "Copying reference profile from: ${ROOT_PROFILE_DIR} to: ${RAMDISK}/${basename}"
|
|
||||||
cp -R "${ROOT_PROFILE_DIR}/." "${RAMDISK}/${basename}"
|
|
||||||
fi
|
|
||||||
ROOT_PROFILE_DIR="${RAMDISK}/${basename}"
|
|
||||||
fi
|
|
||||||
TMP="${RAMDISK}"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function cleanup {
|
|
||||||
if [ -d "${profile}" ]; then
|
|
||||||
if [ "${keep}" -eq 0 ]; then
|
|
||||||
if [ "${delete}" -eq 0 ]; then
|
|
||||||
mv "${profile}" "${profile}.deleted"
|
|
||||||
msg "Renamed: ${profile}"
|
|
||||||
else
|
|
||||||
rm -rf "${profile}"
|
|
||||||
msg "Deleted: ${profile}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
err "Directory ${profile} does not exist"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function interrupt {
|
|
||||||
if [ "${chrome_pid}" -ne 0 ] && ps "${chrome_pid}" &>/dev/null; then
|
|
||||||
kill "${chrome_pid}"
|
|
||||||
wait
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# Argument parsing
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
while :; do
|
|
||||||
case "$1" in
|
|
||||||
-h|--help)
|
|
||||||
usage
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
--keep)
|
|
||||||
keep=1
|
|
||||||
;;
|
|
||||||
--delete)
|
|
||||||
delete=1
|
|
||||||
;;
|
|
||||||
--gpu)
|
|
||||||
use_gpu=1
|
|
||||||
;;
|
|
||||||
--3d)
|
|
||||||
use_3d=1
|
|
||||||
;;
|
|
||||||
--incognito)
|
|
||||||
incognito=1
|
|
||||||
;;
|
|
||||||
--name)
|
|
||||||
if [ "$2" ] && [[ "$2" != --* ]]; then
|
|
||||||
profile_name="$2"
|
|
||||||
shift
|
|
||||||
else
|
|
||||||
err "--name requires an argument"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
--temp-name)
|
|
||||||
if [ "$2" ] && [[ "$2" != --* ]]; then
|
|
||||||
PROFILE_MKTEMP="$2"
|
|
||||||
shift
|
|
||||||
else
|
|
||||||
err "--temp-name requires an argument"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
--root-profile)
|
|
||||||
if [ "$2" ] && [[ "$2" != --* ]]; then
|
|
||||||
ROOT_PROFILE_DIR="$2"
|
|
||||||
basename="$(basename "${ROOT_PROFILE_DIR}")"
|
|
||||||
shift
|
|
||||||
else
|
|
||||||
err "--root-profile requires a profile directory"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
--profile)
|
|
||||||
if [ "$2" ] && [[ "$2" != --* ]]; then
|
|
||||||
profile="$2"
|
|
||||||
shift
|
|
||||||
else
|
|
||||||
err "--profile requires a profile directory"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
--proxy)
|
|
||||||
use_proxy=1
|
|
||||||
if [ "$2" ] && [[ "$2" != --* ]]; then
|
|
||||||
PROXY="$2"
|
|
||||||
shift
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
--port)
|
|
||||||
if [ "$2" ] && [[ "$2" != --* ]]; then
|
|
||||||
DEBUG_PORT="$2"
|
|
||||||
shift
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
--)
|
|
||||||
shift
|
|
||||||
break
|
|
||||||
;;
|
|
||||||
-?*)
|
|
||||||
err "Unknown option: $1"
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
break
|
|
||||||
esac
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# End of argument parsing
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
builtin type -P "${CHROME}" &>/dev/null || { err "${CHROME}" not found; exit 1; }
|
|
||||||
|
|
||||||
if [ "${profile}" ]; then
|
|
||||||
keep=1
|
|
||||||
if [ -d "${profile}" ]; then
|
|
||||||
msg "Using existing profile dir: ${profile}"
|
|
||||||
else
|
|
||||||
err "Directory ${profile} does not exist"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
setup
|
|
||||||
if [ "${profile_name}" ]; then
|
|
||||||
profile="${profile_name}"
|
|
||||||
else
|
|
||||||
profile="$("${MKTEMP}" -d -p "${TMP}" "${PROFILE_MKTEMP}")"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -d "${ROOT_PROFILE_DIR}" ]; then
|
|
||||||
msg "Copying reference profile from: ${ROOT_PROFILE_DIR} to: ${profile}"
|
|
||||||
cp -R "${ROOT_PROFILE_DIR}/." "${profile}"
|
|
||||||
else
|
|
||||||
msg "Using new profile dir: ${profile}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
MY_ARGS=(--user-data-dir="${profile}")
|
|
||||||
|
|
||||||
if [ "${use_proxy}" -eq 1 ]; then
|
|
||||||
msg "Using proxy: ${PROXY}"
|
|
||||||
MY_ARGS+=(--proxy-server="${PROXY}")
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "${incognito}" -eq 1 ]; then
|
|
||||||
msg "Incognito mode enabled"
|
|
||||||
|
|
||||||
MY_ARGS+=(--incognito)
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "${use_gpu}" -eq 0 ]; then
|
|
||||||
CHROME_ARGS=("${CHROME_ARGS[@]}" "${CHROME_NO_GPU_ARGS[@]}")
|
|
||||||
else
|
|
||||||
msg "GPU enabled"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "${use_3d}" -eq 0 ]; then
|
|
||||||
CHROME_ARGS=("${CHROME_ARGS[@]}" "${CHROME_NO_3D_ARGS[@]}")
|
|
||||||
else
|
|
||||||
msg "3D APIs enabled"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "${DEBUG_PORT}" ]; then
|
|
||||||
MY_ARGS+=(--remote-debugging-port="${DEBUG_PORT}")
|
|
||||||
msg "Remote debugging port: ${DEBUG_PORT}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# Execution
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
trap cleanup EXIT
|
|
||||||
trap interrupt INT
|
|
||||||
|
|
||||||
"${CHROME}" "${CHROME_ARGS[@]}" "${MY_ARGS[@]}" "$@" 2>/dev/null &
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# Post-execution
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
chrome_pid=$!
|
|
||||||
msg "Chrome PID: ${chrome_pid}"
|
|
||||||
|
|
||||||
wait
|
|
||||||
|
|
0
.local/bin/chrome-profile-import
Normal file
0
.local/bin/chrome-profile-import
Normal file
|
@ -1,151 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
|
|
||||||
## Author: Tommy Miland (@tmiland) - Copyright (c) 2019
|
|
||||||
|
|
||||||
|
|
||||||
######################################################################
|
|
||||||
#### Firefox Backup.sh ####
|
|
||||||
#### Script to backup your firefox profile ####
|
|
||||||
#### Maintained by @tmiland ####
|
|
||||||
######################################################################
|
|
||||||
|
|
||||||
|
|
||||||
version='1.0.0'
|
|
||||||
|
|
||||||
#------------------------------------------------------------------------------#
|
|
||||||
#
|
|
||||||
# MIT License
|
|
||||||
#
|
|
||||||
# Copyright (c) 2019 Tommy Miland
|
|
||||||
#
|
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
# of this software and associated documentation files (the "Software"), to deal
|
|
||||||
# in the Software without restriction, including without limitation the rights
|
|
||||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
# copies of the Software, and to permit persons to whom the Software is
|
|
||||||
# furnished to do so, subject to the following conditions:
|
|
||||||
#
|
|
||||||
# The above copyright notice and this permission notice shall be included in all
|
|
||||||
# copies or substantial portions of the Software.
|
|
||||||
#
|
|
||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
# SOFTWARE.
|
|
||||||
#
|
|
||||||
#------------------------------------------------------------------------------#
|
|
||||||
#
|
|
||||||
# Script credits:
|
|
||||||
# Mozilla Firefox profile (w/ bookmarks, history and addons) backup Bash script
|
|
||||||
# for Mac OS X - https://gist.github.com/PMK/22a0fde46bf497fd7d732baa07504071
|
|
||||||
# ghacks user.js - https://github.com/ghacksuserjs/ghacks-user.js
|
|
||||||
#
|
|
||||||
|
|
||||||
readonly CURRDIR=$(pwd)
|
|
||||||
|
|
||||||
sfp=$(readlink -f "${BASH_SOURCE[0]}" 2>/dev/null || greadlink -f "${BASH_SOURCE[0]}" 2>/dev/null)
|
|
||||||
if [ -z "$sfp" ]; then sfp=${BASH_SOURCE[0]}; fi
|
|
||||||
readonly SCRIPT_DIR=$(dirname "${sfp}")
|
|
||||||
|
|
||||||
# Icons used for printing
|
|
||||||
ARROW='➜'
|
|
||||||
DONE='✔'
|
|
||||||
ERROR='✗'
|
|
||||||
WARNING='⚠'
|
|
||||||
# Colors used for printing
|
|
||||||
RED='\033[0;31m'
|
|
||||||
BLUE='\033[0;34m'
|
|
||||||
BBLUE='\033[1;34m'
|
|
||||||
GREEN='\033[0;32m'
|
|
||||||
ORANGE='\033[0;33m'
|
|
||||||
DARKORANGE="\033[38;5;208m"
|
|
||||||
CYAN='\033[0;36m'
|
|
||||||
DARKGREY="\033[48;5;236m"
|
|
||||||
NC='\033[0m' # No Color
|
|
||||||
# Text formatting used for printing
|
|
||||||
BOLD="\033[1m"
|
|
||||||
DIM="\033[2m"
|
|
||||||
UNDERLINED="\033[4m"
|
|
||||||
INVERT="\033[7m"
|
|
||||||
HIDDEN="\033[8m"
|
|
||||||
|
|
||||||
DEST=$1
|
|
||||||
|
|
||||||
if [ -z "$DEST" ]; then
|
|
||||||
DEST=${CURRDIR}
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -d "$DEST" ]; then
|
|
||||||
mkdir $DEST
|
|
||||||
fi
|
|
||||||
|
|
||||||
readIniFile () { # expects one argument: absolute path of profiles.ini
|
|
||||||
declare -r inifile="$1"
|
|
||||||
declare -r tfile=$(mktemp)
|
|
||||||
|
|
||||||
if [ $(grep '^\[Profile' "$inifile" | wc -l) == "1" ]; then ### only 1 profile found
|
|
||||||
grep '^\[Profile' -A 4 "$inifile" | grep -v '^\[Profile' > $tfile
|
|
||||||
else
|
|
||||||
grep -E -v '^\[General\]|^StartWithLastProfile=|^IsRelative=' "$inifile"
|
|
||||||
echo -e "${GREEN}"
|
|
||||||
read -p 'Select the profile number ( 0 for Profile0, 1 for Profile1, etc ) : ' -r
|
|
||||||
echo -e "\n${NC}"
|
|
||||||
if [[ $REPLY =~ ^(0|[1-9][0-9]*)$ ]]; then
|
|
||||||
grep '^\[Profile'${REPLY} -A 4 "$inifile" | grep -v '^\[Profile'${REPLY} > $tfile
|
|
||||||
if [[ "$?" != "0" ]]; then
|
|
||||||
echo -e "${RED}${ERROR}Profile${REPLY} does not exist!${NC}" && exit 1
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo -e "${RED}${ERROR} Invalid selection!${NC}" && exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
declare -r profpath=$(grep '^Path=' $tfile)
|
|
||||||
declare -r pathisrel=$(grep '^IsRelative=' $tfile)
|
|
||||||
|
|
||||||
rm "$tfile"
|
|
||||||
|
|
||||||
# update global variable
|
|
||||||
if [[ ${pathisrel#*=} == "1" ]]; then
|
|
||||||
PROFILE_PATH="$(dirname "$inifile")/${profpath#*=}"
|
|
||||||
PROFILE_ID="${profpath#*=}"
|
|
||||||
else
|
|
||||||
PROFILE_PATH="${profpath#*=}"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
getProfilePath() {
|
|
||||||
declare -r f1=~/Library/Application\ Support/Firefox/profiles.ini
|
|
||||||
declare -r f2=~/.mozilla/firefox/profiles.ini
|
|
||||||
|
|
||||||
local ini=''
|
|
||||||
if [[ -f "$f1" ]]; then
|
|
||||||
ini="$f1"
|
|
||||||
elif [[ -f "$f2" ]]; then
|
|
||||||
ini="$f2"
|
|
||||||
else
|
|
||||||
echo -e "${RED}${ERROR}Error: Sorry, -l is not supported for your OS${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
readIniFile "$ini" # updates PROFILE_PATH or exits on error
|
|
||||||
}
|
|
||||||
|
|
||||||
backupProfile() {
|
|
||||||
BACKUP_FILE_NAME=${PROFILE_ID}-$(date +"%Y-%m-%d_%H%M").tar.gz
|
|
||||||
|
|
||||||
tar -zcf $BACKUP_FILE_NAME $PROFILE_PATH > /dev/null 2>&1
|
|
||||||
|
|
||||||
mv $BACKUP_FILE_NAME $DEST
|
|
||||||
|
|
||||||
echo -e "${GREEN}${DONE} Done! ${NC}"
|
|
||||||
echo ""
|
|
||||||
echo -e "${ORANGE}${ARROW} Firefox profile successfully backed up to $DEST ${NC}"
|
|
||||||
echo ""
|
|
||||||
}
|
|
||||||
|
|
||||||
getProfilePath # updates PROFILE_PATH or exits on error
|
|
||||||
backupProfile
|
|
12
.local/bin/fonttest
Normal file
12
.local/bin/fonttest
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# FONTTEST SCRIPT
|
||||||
|
# -----------------
|
||||||
|
# Print all avaliable variants of chosen terminal font
|
||||||
|
|
||||||
|
echo -en "regular "
|
||||||
|
echo -en "\e[3m italic \e[0m"
|
||||||
|
echo -en "\e[1m bold \e[0m"
|
||||||
|
echo -en "\e[3m\e[1m bold-italic \e[0m"
|
||||||
|
echo -en " \e[4munderline\e[0m "
|
||||||
|
echo -e " \e[9mstrikethrough\e[0m"
|
314
.local/bin/install-gnome-extensions
Normal file
314
.local/bin/install-gnome-extensions
Normal file
|
@ -0,0 +1,314 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#################################################################
|
||||||
|
# #
|
||||||
|
# GNOME Shell Extension Installer v1.2.1 #
|
||||||
|
# #
|
||||||
|
# A simple (scriptable) way to install GNOME Shell Extensions! #
|
||||||
|
# #
|
||||||
|
# Author: Cyrus Frost #
|
||||||
|
# License: MIT #
|
||||||
|
# #
|
||||||
|
# https://github.com/cyfrost/install-gnome-extensions #
|
||||||
|
# #
|
||||||
|
#################################################################
|
||||||
|
|
||||||
|
#vars
|
||||||
|
script_revision="v1.2.1"
|
||||||
|
args_count="$#"
|
||||||
|
dependencies=(wget curl jq unzip tput sed egrep sed awk gnome-shell cut basename)
|
||||||
|
deps_install_apt="sudo apt install -y wget curl jq unzip sed"
|
||||||
|
deps_install_dnf="sudo dnf install -y wget curl jq unzip sed"
|
||||||
|
EXTENSIONS_TO_INSTALL=()
|
||||||
|
OVERWRITE_EXISTING=false
|
||||||
|
ENABLE_ALL=false
|
||||||
|
INSTALLED_EXT_COUNT=''
|
||||||
|
INSTALLED_EXTs=''
|
||||||
|
|
||||||
|
# message colors.
|
||||||
|
info_text_blue=$(tput setaf 7)
|
||||||
|
normal_text=$(tput sgr0)
|
||||||
|
error_text=$(tput setaf 1)
|
||||||
|
status_text_yellow=$(tput setaf 3)
|
||||||
|
|
||||||
|
# Bail immediately if running as root.
|
||||||
|
function CheckIfRunningAsRoot() {
|
||||||
|
if [ "$(id -u)" = 0 ]; then
|
||||||
|
printf "
|
||||||
|
%s Running this script as root is discouraged and won't work since it needs user directories to operate. Retry as normal user.
|
||||||
|
Note: If you're trying to install extensions for another user on this computer, try 'su <user_account_name>' and proceed.
|
||||||
|
Abort.
|
||||||
|
%s" "$error_text" "$normal_text"
|
||||||
|
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Bail immediately if running as root.
|
||||||
|
CheckIfRunningAsRoot
|
||||||
|
|
||||||
|
# Trap SIGINT and SIGTERM.
|
||||||
|
function _term() {
|
||||||
|
printf "\n\n%s" "$normal_text"
|
||||||
|
trap - INT TERM # clear the trap
|
||||||
|
kill -- -$$
|
||||||
|
}
|
||||||
|
|
||||||
|
# Trap SIGINT and SIGTERM for cleanup.
|
||||||
|
trap _term INT TERM
|
||||||
|
|
||||||
|
# This function can check for binaries/commands to be available in Env PATH and report otherwise.
|
||||||
|
function CheckDependencies() {
|
||||||
|
|
||||||
|
# echo -en "\n${info_text_blue}Checking dependencies...${normal_text}";
|
||||||
|
dependencies=("$@")
|
||||||
|
for name in "${dependencies[@]}"; do
|
||||||
|
command -v "$name" >/dev/null 2>&1 || {
|
||||||
|
echo -en "${error_text}\n[Error] Command not found: \"$name\"${normal_text}"
|
||||||
|
deps=1
|
||||||
|
}
|
||||||
|
done
|
||||||
|
[[ $deps -ne 1 ]] || {
|
||||||
|
echo -en "${error_text}\n\nOne or more dependencies is unavailable. Please make sure the above commands are available and re-run this script.\n\n${status_text_yellow}For Ubuntu and similar distros, try: $deps_install_apt\n\nFor Fedora and similar distros, try: $deps_install_dnf\n\n${normal_text}"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Fail if dependencies unmet.
|
||||||
|
CheckDependencies "${dependencies[@]}"
|
||||||
|
|
||||||
|
function confirm_action() {
|
||||||
|
while true; do
|
||||||
|
printf "\n%s" "$normal_text"
|
||||||
|
read -r -p "$1" -n 1 yn
|
||||||
|
case $yn in
|
||||||
|
[Yy]*) return 0 ;;
|
||||||
|
[Nn]*) return 1 ;;
|
||||||
|
*) printf "\nPlease answer with 'y' or 'n'." ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# check if current (active) desktop instance is GNOME.
|
||||||
|
function IsEnvGNOME() {
|
||||||
|
|
||||||
|
if [ "$XDG_CURRENT_DESKTOP" = "" ]; then
|
||||||
|
desktop=$(echo "$XDG_DATA_DIRS" | grep -Po '(xfce|kde|gnome)' | tail -n 1)
|
||||||
|
#sed 's/.*\(xfce\|kde\|gnome\).*/\1/')
|
||||||
|
else
|
||||||
|
desktop=$XDG_CURRENT_DESKTOP
|
||||||
|
fi
|
||||||
|
|
||||||
|
desktop=${desktop,,}
|
||||||
|
|
||||||
|
if [[ $desktop == *"gnome"* ]]; then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function enable_extension() {
|
||||||
|
ext_uuid="$1"
|
||||||
|
gnome-extensions enable "$ext_uuid" >/dev/null 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
|
function disable_extension() {
|
||||||
|
ext_uuid="$1"
|
||||||
|
gnome-extensions disable "$ext_uuid" >/dev/null 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_installed_extensions_list() {
|
||||||
|
user_extensions_path="/home/$USER/.local/share/gnome-shell/extensions"
|
||||||
|
array=()
|
||||||
|
while IFS="" read -r line; do array+=("$line"); done < <(find "$user_extensions_path" -maxdepth 1 -mindepth 1 -type d -not -path '*/\.*' -printf "%f\n")
|
||||||
|
ext_list=$(printf "'%s'," "${array[@]}")
|
||||||
|
ext_list=${ext_list%,}
|
||||||
|
INSTALLED_EXT_COUNT="${#array[@]}"
|
||||||
|
INSTALLED_EXTs=$(printf '%s\n' "${array[@]}")
|
||||||
|
# echo $ext_list
|
||||||
|
}
|
||||||
|
|
||||||
|
function install_shell_extensions() {
|
||||||
|
|
||||||
|
for ext_id in "${EXTENSIONS_TO_INSTALL[@]}"; do
|
||||||
|
|
||||||
|
request_url="https://extensions.gnome.org/extension-info/?pk=$ext_id&shell_version=$GNOME_SHELL_VERSION"
|
||||||
|
http_response="$(curl -s -o /dev/null -I -w "%{http_code}" "$request_url")"
|
||||||
|
|
||||||
|
if [ "$http_response" = 404 ]; then
|
||||||
|
printf "\n%sError: No extension exists matching the ID: %s and GNOME Shell version %s (Skipping this).\n" "$error_text" "$ext_id" "$GNOME_SHELL_VERSION"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "%s\n" "$normal_text"
|
||||||
|
ext_info="$(curl -s "$request_url")"
|
||||||
|
extension_name="$(echo "$ext_info" | jq -r '.name')"
|
||||||
|
direct_dload_url="$(echo "$ext_info" | jq -r '.download_url')"
|
||||||
|
ext_uuid="$(echo "$ext_info" | jq -r '.uuid')"
|
||||||
|
ext_version="$(echo "$ext_info" | jq -r '.version')"
|
||||||
|
ext_homepage="$(echo "$ext_info" | jq -r '.link')"
|
||||||
|
ext_description="$(echo "$ext_info" | jq -r '.description')"
|
||||||
|
download_url="https://extensions.gnome.org"$direct_dload_url
|
||||||
|
target_installation_dir="/home/$USER/.local/share/gnome-shell/extensions/$ext_uuid"
|
||||||
|
printf "%s\nDownloading and installing extension \"%s\"%s" "$status_text_yellow" "$extension_name" "$normal_text"
|
||||||
|
printf "%s" "$info_text_blue"
|
||||||
|
printf "\nDescription: %s" "$ext_description"
|
||||||
|
printf "\nExtension ID: %s" "$ext_id"
|
||||||
|
printf "\nExtension Version: v%s" "$ext_version"
|
||||||
|
printf "\nHomepage: https://extensions.gnome.org%s" "$ext_homepage"
|
||||||
|
printf "\nUUID: \"%s\"" "$ext_uuid"
|
||||||
|
printf "\nInstalling to: \"%s\"" "$target_installation_dir"
|
||||||
|
|
||||||
|
if [ -d "$target_installation_dir" ] && [ "$OVERWRITE_EXISTING" = "false" ]; then
|
||||||
|
confirm_action "${normal_text}This extension is already installed. Do you want to overwrite it? (y/n): " || continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "\n%sPlease wait...\n" "$info_text_blue"
|
||||||
|
filename="$(basename "$download_url")"
|
||||||
|
wget -q "$download_url" \
|
||||||
|
&& mkdir -p "$target_installation_dir" \
|
||||||
|
&& unzip -o -q "$filename" -d "$target_installation_dir" \
|
||||||
|
&& sleep 1 \
|
||||||
|
&& rm "$filename"
|
||||||
|
schemas_dir="$target_installation_dir/schemas"
|
||||||
|
|
||||||
|
if [ -d "$schemas_dir" ]; then
|
||||||
|
printf "%sInstall GLib Schemas for dconf storage, this step will require sudo access...\n" "$info_text_blue"
|
||||||
|
cd "$schemas_dir" || {
|
||||||
|
echo "$0: Directory do not exist"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
sudo cp ./*.xml "/usr/share/glib-2.0/schemas/"
|
||||||
|
sudo glib-compile-schemas /usr/share/glib-2.0/schemas/ >/dev/null 2>&1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! "$ENABLE_ALL" = "false" ]; then
|
||||||
|
enable_extension "$ext_uuid"
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "%sDone!\n%s" "$info_text_blue" "$normal_text"
|
||||||
|
done
|
||||||
|
printf "\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if arg is number.
|
||||||
|
function IsNumber() {
|
||||||
|
re='^[0-9]+$'
|
||||||
|
if [[ "$1" =~ $re ]]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
function print_usage() {
|
||||||
|
print_banner
|
||||||
|
|
||||||
|
# -u, --update Updates existing extensions to latest available versions.
|
||||||
|
printf "
|
||||||
|
Usage: ./install-gnome-extensions.sh [options] <extension_ids> | [links_file]
|
||||||
|
Options:
|
||||||
|
-e, --enable Enable extension after installing it.
|
||||||
|
-o, --overwrite Overwrites existing extensions.
|
||||||
|
-l. --list Lists the UUIDs of installed extensions.
|
||||||
|
-f, --file Specify a file containing extension links to install.
|
||||||
|
-h, --help Display this help message.
|
||||||
|
Example usages:
|
||||||
|
---------------
|
||||||
|
1) ./install-gnome-extensions.sh 6 8 19 --enable
|
||||||
|
|
||||||
|
Installs and enables extensions with IDs 6, 8, and 19.
|
||||||
|
2) ./install-gnome-extensions.sh -e --file links.txt
|
||||||
|
Installs and enables the extensions from the URLs specified in \"links.txt\" file.
|
||||||
|
"
|
||||||
|
}
|
||||||
|
|
||||||
|
function print_banner() {
|
||||||
|
printf "%s
|
||||||
|
===========================================================
|
||||||
|
GNOME Shell Extensions Installer %s
|
||||||
|
A simple (scriptable) way to install GNOME Shell extensions.
|
||||||
|
https://github.com/cyfrost/install-gnome-extensions
|
||||||
|
===========================================================\n" "$normal_text" "$script_revision"
|
||||||
|
}
|
||||||
|
|
||||||
|
function trim_file() {
|
||||||
|
file="$1"
|
||||||
|
sed -i '/^[[:blank:]]*$/ d' "$file" && awk '{$1=$1};1' "$file" >tmp && mv tmp "$file"
|
||||||
|
}
|
||||||
|
|
||||||
|
function install_exts_from_links_file() {
|
||||||
|
|
||||||
|
file="$1"
|
||||||
|
if [ ! -f "$file" ] || [ ! -s "$file" ]; then
|
||||||
|
printf "\n%sError: Supplied argument (\"%s\") is either not a valid file or is empty. %s\n\nPlease gather all extension links in a text file (line-by-line) and try again.\n\nSample usage: ./install-gnome-extensions --file links.txt\n\n" "$error_text" "$1" "$normal_text"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
trim_file "$file"
|
||||||
|
|
||||||
|
printf "\nParsing file \"%s\" for extension links...\n" "$file"
|
||||||
|
|
||||||
|
while IFS="" read -r p || [ -n "$p" ]; do
|
||||||
|
url="$(echo "$p" | sed '/^[[:space:]]*$/d')"
|
||||||
|
ext_id="$(echo "$url" | tr '\n' ' ' | sed -e 's/[^0-9]/ /g' -e 's/^ *//g' -e 's/ *$//g' | tr -s ' ' | awk '{print $1;}')"
|
||||||
|
IsNumber "$ext_id" && EXTENSIONS_TO_INSTALL+=("$ext_id") || printf "\n%sError: Invalid URL: %s (Skipping this).%s" "$error_text" "$url" "$normal_text"
|
||||||
|
done <"$file"
|
||||||
|
printf "\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
function begin_install() {
|
||||||
|
|
||||||
|
exts_list="$(printf '%s, ' "${EXTENSIONS_TO_INSTALL[@]}")"
|
||||||
|
exts_list=${exts_list%, }
|
||||||
|
|
||||||
|
print_banner
|
||||||
|
printf "\n%s[Info] Detected GNOME Shell version: %s\n\nInstalling %s extensions (%s)...\n%s" "$info_text_blue" "$GNOME_SHELL_VERSION" "$extensions_count" "$exts_list" "$normal_text"
|
||||||
|
install_shell_extensions
|
||||||
|
printf "\n%sComplete!\n\n" "$normal_text"
|
||||||
|
IsEnvGNOME || printf "%sPlease login to GNOME desktop to see the installed/enabled extensions.\n\n" "$normal_text"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Obtain GNOME Shell version.
|
||||||
|
GNOME_SHELL_VERSION="$(gnome-shell --version | cut --delimiter=' ' --fields=3 | cut --delimiter='.' --fields=1,2)"
|
||||||
|
|
||||||
|
while test $# -gt 0; do
|
||||||
|
case "$1" in
|
||||||
|
-e | --enable)
|
||||||
|
ENABLE_ALL=true
|
||||||
|
;;
|
||||||
|
# -u|--update)
|
||||||
|
# UPDATE=true
|
||||||
|
# ;;
|
||||||
|
-o | --overwrite)
|
||||||
|
OVERWRITE_EXISTING=true
|
||||||
|
;;
|
||||||
|
-h | --help)
|
||||||
|
print_usage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
-l | --list)
|
||||||
|
get_installed_extensions_list
|
||||||
|
printf "\n============================\nInstalled extensions (UUIDs)\n============================\n\n%s\n\n%s extensions are installed.\n\nDone!\n\n" "$INSTALLED_EXTs" "$INSTALLED_EXT_COUNT"
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
-f | --file)
|
||||||
|
install_exts_from_links_file "$2"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
IsNumber "$1" && EXTENSIONS_TO_INSTALL+=("$1")
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
extensions_count="${#EXTENSIONS_TO_INSTALL[@]}"
|
||||||
|
|
||||||
|
if [ "$args_count" -eq 0 ]; then
|
||||||
|
printf "\n%sInvalid usage.\n%s" "$error_text" "$normal_text"
|
||||||
|
print_usage
|
||||||
|
|
||||||
|
elif [ "$extensions_count" -eq 0 ]; then
|
||||||
|
printf "\n%sError: Could not find any valid extension IDs or URLs for installation.\n%s\n" "$error_text" "$normal_text"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
begin_install
|
||||||
|
fi
|
648
.local/bin/install-software
Normal file
648
.local/bin/install-software
Normal file
|
@ -0,0 +1,648 @@
|
||||||
|
#!/usr/bin/env zx
|
||||||
|
|
||||||
|
const execSync = require('child_process').execSync
|
||||||
|
|
||||||
|
$.log = (entry) => {
|
||||||
|
if (entry.kind === 'cmd' && entry.cmd.substring(0, 4) === 'logg') {
|
||||||
|
//execSync(entry.cmd, {stdio: 'inherit', shell: true})
|
||||||
|
} else {
|
||||||
|
log(entry)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let installData
|
||||||
|
const installOrders = {};
|
||||||
|
const installOrdersPre = [];
|
||||||
|
const installOrdersPost = [];
|
||||||
|
const osType = await OSType();
|
||||||
|
let osID = osType
|
||||||
|
if(osType === 'linux') {
|
||||||
|
osID = await realeaseID()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Download the installation map
|
||||||
|
async function downloadInstallData() {
|
||||||
|
const response = await fetch(
|
||||||
|
"https://gitlab.com/megabyte-labs/misc/dotfiles/-/raw/master/dotfiles/.local/share/chezmoi/software.yml"
|
||||||
|
);
|
||||||
|
if (response.ok) {
|
||||||
|
const text = await response.text()
|
||||||
|
return YAML.parse(text)
|
||||||
|
} else {
|
||||||
|
await $`logg error 'Failed to download the installation map'`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Creates the installOrders object which maps package managers to arrays of packages to install
|
||||||
|
async function generateInstallOrders() {
|
||||||
|
const packagesToInstall = process.argv.slice(3);
|
||||||
|
const installerPreference = await OSTypeInstallerKey()
|
||||||
|
await $`logg info 'Installer preference category detected as ${installerPreference}'`
|
||||||
|
const preferenceOrder = installData.installerPreference[installerPreference];
|
||||||
|
await $`logg info 'Preference order acquired:'`
|
||||||
|
console.log(preferenceOrder)
|
||||||
|
const softwarePackages = installData.softwarePackages;
|
||||||
|
for (let pkg of packagesToInstall) {
|
||||||
|
let packageKey;
|
||||||
|
if (softwarePackages[pkg + ":" + osID]) {
|
||||||
|
packageKey = pkg + ":" + osID;
|
||||||
|
} else if (softwarePackages[pkg + ":" + osType]) {
|
||||||
|
packageKey = pkg + ":" + osType;
|
||||||
|
} else if (softwarePackages[pkg]) {
|
||||||
|
packageKey = pkg
|
||||||
|
} else {
|
||||||
|
await $`logg warn 'The package \`${pkg}\` was not found in the installation map'`
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
for (let preference of preferenceOrder) {
|
||||||
|
if (softwarePackages[packageKey][preference + ":" + osID]) {
|
||||||
|
await updateInstallMaps(
|
||||||
|
preference,
|
||||||
|
softwarePackages[packageKey],
|
||||||
|
preference + ":" + osID,
|
||||||
|
pkg,
|
||||||
|
packageKey
|
||||||
|
);
|
||||||
|
break
|
||||||
|
} else if (softwarePackages[packageKey][preference + ":" + osType]) {
|
||||||
|
await updateInstallMaps(
|
||||||
|
preference,
|
||||||
|
softwarePackages[packageKey],
|
||||||
|
preference + ":" + osType,
|
||||||
|
pkg,
|
||||||
|
packageKey
|
||||||
|
);
|
||||||
|
break
|
||||||
|
} else if (softwarePackages[packageKey][preference]) {
|
||||||
|
await updateInstallMaps(preference, softwarePackages[packageKey], preference, pkg, packageKey);
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return installOrders;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update install, pre-hook, and post-hook objects
|
||||||
|
async function updateInstallMaps(preference, packages, scopedPreference, pkg, packageKey) {
|
||||||
|
const preHook = getHook(packages, "pre", scopedPreference, preference);
|
||||||
|
if (preHook) {
|
||||||
|
installOrdersPre.concat(typeof preHook === "string" ? [preHook] : preHook);
|
||||||
|
}
|
||||||
|
const postHook = getHook(packages, "post", scopedPreference, preference);
|
||||||
|
if (postHook) {
|
||||||
|
installOrdersPost.concat(
|
||||||
|
typeof postHook === "string" ? [postHook] : postHook
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (!installOrders[preference]) {
|
||||||
|
installOrders[preference] = [];
|
||||||
|
}
|
||||||
|
await $`logg info 'Found a match for the package \`${pkg}\` (${packageKey} via ${scopedPreference})'`
|
||||||
|
const newPackages = packages[scopedPreference];
|
||||||
|
installOrders[preference] = installOrders[preference].concat(
|
||||||
|
typeof newPackages === "string" ? [newPackages] : newPackages
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get pre / post install hooks
|
||||||
|
function getHook(packages, hook, scopedPreference, preference) {
|
||||||
|
const hookLabel = "_" + hook + ":";
|
||||||
|
if (packages[hookLabel + scopedPreference]) {
|
||||||
|
return packages[hookLabel + scopedPreference];
|
||||||
|
} else if (packages[hookLabel + preference]) {
|
||||||
|
return packages[hookLabel + preference];
|
||||||
|
} else if (packages[hookLabel + osID]) {
|
||||||
|
return packages;
|
||||||
|
} else if (packages[hookLabel + osType]) {
|
||||||
|
return packages[hookLabel + osType];
|
||||||
|
} else if (packages["_" + hook]) {
|
||||||
|
return packages["_" + hook];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Acquire OS type installer key (for the installerPreference data key)
|
||||||
|
async function OSTypeInstallerKey() {
|
||||||
|
const apt = which.sync('apt-get', { nothrow: true })
|
||||||
|
const dnf = which.sync('dnf', { nothrow: true })
|
||||||
|
const freebsd = which.sync('pkg', { nothrow: true })
|
||||||
|
const pacman = which.sync('pacman', { nothrow: true })
|
||||||
|
const yum = which.sync('yum', { nothrow: true })
|
||||||
|
const zypper = which.sync('zypper', { nothrow: true })
|
||||||
|
if (apt) {
|
||||||
|
return 'apt'
|
||||||
|
} else if (dnf || yum) {
|
||||||
|
return 'dnf'
|
||||||
|
} else if(pacman) {
|
||||||
|
return 'pacman'
|
||||||
|
} else if(zypper) {
|
||||||
|
return 'zypper'
|
||||||
|
} else if (freebsd) {
|
||||||
|
return 'freebsd'
|
||||||
|
} else {
|
||||||
|
const macOS = await $`test -d /Applications && test -d Library`
|
||||||
|
if (macOS.exitCode === 0) {
|
||||||
|
return 'darwin'
|
||||||
|
} else {
|
||||||
|
return 'windows'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Acquire OS type
|
||||||
|
async function OSType() {
|
||||||
|
try {
|
||||||
|
await $`test -d /Applications && test -d /Library`
|
||||||
|
return 'darwin'
|
||||||
|
} catch(e) {
|
||||||
|
try {
|
||||||
|
await $`test -f /etc/os-release`
|
||||||
|
return 'linux'
|
||||||
|
} catch (e) {
|
||||||
|
return 'windows'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Acquire release ID (for Linux)
|
||||||
|
async function releaseID() {
|
||||||
|
const ID = await $`
|
||||||
|
if [ -f /etc/os-release ]; then
|
||||||
|
. /etc/os-release
|
||||||
|
echo -n $ID
|
||||||
|
fi
|
||||||
|
`;
|
||||||
|
return ID.stdout;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Post-install hook
|
||||||
|
async function afterInstall(packageManager) {
|
||||||
|
if (packageManager === 'appimage') {
|
||||||
|
} else if (packageManager === 'ansible') {
|
||||||
|
await $`logg info 'Ensuring temporary passwordless sudo privileges used by Ansible are removed'`
|
||||||
|
await $`sudo sed -i '/# TEMPORARY FOR ANSIBLE INSTALL/d' /etc/sudoers`
|
||||||
|
} else if (packageManager === 'apk') {
|
||||||
|
} else if (packageManager === 'apt') {
|
||||||
|
} else if (packageManager === 'basher') {
|
||||||
|
} else if (packageManager === 'binary') {
|
||||||
|
} else if (packageManager === 'brew' || packageManager === 'cask') {
|
||||||
|
} else if (packageManager === 'cargo') {
|
||||||
|
} else if (packageManager === 'choco') {
|
||||||
|
} else if (packageManager === 'crew') {
|
||||||
|
} else if (packageManager === 'dnf') {
|
||||||
|
} else if (packageManager === 'flatpak') {
|
||||||
|
} else if (packageManager === 'gem') {
|
||||||
|
} else if (packageManager === 'go') {
|
||||||
|
} else if (packageManager === 'nix') {
|
||||||
|
} else if (packageManager === 'npm') {
|
||||||
|
} else if (packageManager === 'pacman') {
|
||||||
|
} else if (packageManager === 'pipx') {
|
||||||
|
} else if (packageManager === 'pkg') {
|
||||||
|
} else if (packageManager === 'port') {
|
||||||
|
} else if (packageManager === 'scoop') {
|
||||||
|
} else if (packageManager === 'crew') {
|
||||||
|
} else if (packageManager === 'dnf') {
|
||||||
|
} else if (packageManager === 'flatpak') {
|
||||||
|
} else if (packageManager === 'snap') {
|
||||||
|
} else if (packageManager === 'whalebrew') {
|
||||||
|
} else if (packageManager === 'winget') {
|
||||||
|
} else if (packageManager === 'yay') {
|
||||||
|
} else if (packageManager === 'zypper') {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pre-install hook
|
||||||
|
async function beforeInstall(packageManager) {
|
||||||
|
if (packageManager === 'appimage') {
|
||||||
|
} else if (packageManager === 'ansible') {
|
||||||
|
await $`logg info 'Temporarily enabling passwordless sudo for Ansible role installations'`
|
||||||
|
await $`sudo echo "$(whoami) ALL=(ALL:ALL) NOPASSWD: ALL # TEMPORARY FOR ANSIBLE INSTALL" > /etc/sudoers`
|
||||||
|
} else if (packageManager === 'apk') {
|
||||||
|
} else if (packageManager === 'apt') {
|
||||||
|
await $`sudo apt-get update`
|
||||||
|
} else if (packageManager === 'basher') {
|
||||||
|
} else if (packageManager === 'binary') {
|
||||||
|
} else if (packageManager === 'brew' || packageManager === 'cask') {
|
||||||
|
} else if (packageManager === 'cargo') {
|
||||||
|
} else if (packageManager === 'choco') {
|
||||||
|
} else if (packageManager === 'crew') {
|
||||||
|
} else if (packageManager === 'dnf') {
|
||||||
|
} else if (packageManager === 'flatpak') {
|
||||||
|
} else if (packageManager === 'gem') {
|
||||||
|
} else if (packageManager === 'go') {
|
||||||
|
} else if (packageManager === 'nix') {
|
||||||
|
} else if (packageManager === 'npm') {
|
||||||
|
} else if (packageManager === 'pacman') {
|
||||||
|
await $`sudo pacman -Syu`
|
||||||
|
} else if (packageManager === 'pipx') {
|
||||||
|
} else if (packageManager === 'pkg') {
|
||||||
|
} else if (packageManager === 'port') {
|
||||||
|
} else if (packageManager === 'scoop') {
|
||||||
|
} else if (packageManager === 'crew') {
|
||||||
|
} else if (packageManager === 'dnf') {
|
||||||
|
} else if (packageManager === 'flatpak') {
|
||||||
|
} else if (packageManager === 'snap') {
|
||||||
|
} else if (packageManager === 'whalebrew') {
|
||||||
|
} else if (packageManager === 'winget') {
|
||||||
|
} else if (packageManager === 'yay') {
|
||||||
|
} else if (packageManager === 'zypper') {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function ensureInstalled(bin, callback) {
|
||||||
|
const installed = which.sync(bin, { nothrow: true })
|
||||||
|
if (installed) {
|
||||||
|
await $`logg info '\`${bin}\` is available'`
|
||||||
|
} else {
|
||||||
|
await $`logg warn '\`${bin}\` is not installed!'`
|
||||||
|
if (callback) {
|
||||||
|
await $`${callback}`
|
||||||
|
} else {
|
||||||
|
await $`logg error 'There does not appear to be an installation method available for \`${bin}\`'`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ensure the package manager is available
|
||||||
|
let packageManagerInstalled = {};
|
||||||
|
async function ensurePackageManager(packageManager) {
|
||||||
|
await $`logg info 'Ensuring \`${packageManager}\` is set up'`
|
||||||
|
if (packageManagerInstalled[packageManager]) {
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
packageManagerInstalled[packageManager] = true;
|
||||||
|
}
|
||||||
|
if (packageManager === "ansible") {
|
||||||
|
await ensurePackageManager("pipx");
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
packageManager === "gem" ||
|
||||||
|
packageManager === "go" ||
|
||||||
|
packageManager === "npm" ||
|
||||||
|
packageManager === "pipx" ||
|
||||||
|
packageManager === "whalebrew"
|
||||||
|
) {
|
||||||
|
await ensurePackageManager("brew");
|
||||||
|
}
|
||||||
|
if (packageManager === 'appimage') {
|
||||||
|
} else if (packageManager === 'ansible') {
|
||||||
|
$`
|
||||||
|
if [ ! -f "$HOME/.cache/megabytelabs/ansible-installed" ] || ! command -v ansible > /dev/null; then
|
||||||
|
pipx install ansible
|
||||||
|
pipx inject ansible PyObjC PyObjC-core docker lxml netaddr pexpect python-vagrant pywinrm requests-credssp watchdog
|
||||||
|
touch "$HOME/.cache/megabytelabs/ansible-installed"
|
||||||
|
else
|
||||||
|
logg info '\`ansible\` and its supporting packages appear to be installed'
|
||||||
|
fi
|
||||||
|
`
|
||||||
|
} else if (packageManager === 'apk') {
|
||||||
|
await ensureInstalled('apk', false)
|
||||||
|
} else if (packageManager === 'apt') {
|
||||||
|
await ensureInstalled('apt', false)
|
||||||
|
} else if (packageManager === 'basher') {
|
||||||
|
await ensureInstalled('basher', `
|
||||||
|
# TODO
|
||||||
|
echo "Bash script that installs basher here"
|
||||||
|
`)
|
||||||
|
} else if (packageManager === 'binary') {
|
||||||
|
} else if (packageManager === 'bpkg') {
|
||||||
|
await ensureInstalled('bpkg', `
|
||||||
|
# TODO
|
||||||
|
echo "Bash script that installs bpkg here"
|
||||||
|
`)
|
||||||
|
} else if (packageManager === 'brew' || packageManager === 'cask') {
|
||||||
|
await ensureInstalled('brew', `
|
||||||
|
if command -v sudo > /dev/null && sudo -n true; then
|
||||||
|
echo | bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
||||||
|
else
|
||||||
|
logg info 'Homebrew is not installed. Password may be required.'
|
||||||
|
bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" || BREW_EXIT_CODE="$?"
|
||||||
|
if [ -n "$BREW_EXIT_CODE" ]; then
|
||||||
|
if command -v brew > /dev/null; then
|
||||||
|
logg warn 'Homebrew was installed but part of the installation failed. Attempting to fix..'
|
||||||
|
BREW_DIRS="share/man share/doc share/zsh/site-functions etc/bash_completion.d"
|
||||||
|
for BREW_DIR in $BREW_DIRS; do
|
||||||
|
if [ -d "$(brew --prefix)/$BREW_DIR" ]; then
|
||||||
|
sudo chown -R "$(whoami)" "$(brew --prefix)/$BREW_DIR"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
brew update --force --quiet
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
`)
|
||||||
|
} else if (packageManager === 'cargo') {
|
||||||
|
await ensureInstalled('cargo', `
|
||||||
|
# TODO Bash script that installs cargo
|
||||||
|
`)
|
||||||
|
} else if (packageManager === 'choco') {
|
||||||
|
await ensureInstalled('choco', `
|
||||||
|
powershell "Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))"
|
||||||
|
`)
|
||||||
|
} else if (packageManager === 'crew') {
|
||||||
|
await ensureInstalled('crew', `
|
||||||
|
# TODO Bash script that installs crew here
|
||||||
|
# Source: https://github.com/chromebrew/chromebrew
|
||||||
|
curl -Ls git.io/vddgY | bash
|
||||||
|
`)
|
||||||
|
} else if (packageManager === 'dnf') {
|
||||||
|
const dnf = which.sync('dnf', { nothrow: true })
|
||||||
|
const yum = which.sync('yum', { nothrow: true })
|
||||||
|
if (dnf) {
|
||||||
|
await $`logg info '\`dnf\` is available'`
|
||||||
|
} else if (yum) {
|
||||||
|
await $`logg info '\`yum\` is available'`
|
||||||
|
} else {
|
||||||
|
await $`logg error 'Both \`dnf\` and \`yum\` are not available'`
|
||||||
|
}
|
||||||
|
} else if (packageManager === 'flatpak') {
|
||||||
|
const flatpak = which.sync('flatpak', { nothrow: true })
|
||||||
|
if (flatpak) {
|
||||||
|
await $`logg info '\`flatpak\` is available'`
|
||||||
|
} else {
|
||||||
|
const apk = which.sync('apk', { nothrow: true })
|
||||||
|
const apt = which.sync('apt', { nothrow: true })
|
||||||
|
const dnf = which.sync('dnf', { nothrow: true })
|
||||||
|
const yum = which.sync('yum', { nothrow: true })
|
||||||
|
const pacman = which.sync('pacman', { nothrow: true })
|
||||||
|
const zypper = which.sync('zypper', { nothrow: true })
|
||||||
|
if (apk) {
|
||||||
|
$`sudo apk add flatpak`
|
||||||
|
} else if(apt) {
|
||||||
|
$`
|
||||||
|
sudo apt install -y flatpak
|
||||||
|
if [ -f /usr/bin/gnome-shell ]; then
|
||||||
|
sudo apt install -y gnome-software-plugin-flatpak
|
||||||
|
fi
|
||||||
|
if [ -f /usr/bin/plasmashell ]; then
|
||||||
|
sudo apt install -y plasmashell
|
||||||
|
fi
|
||||||
|
`
|
||||||
|
} else if(dnf) {
|
||||||
|
await $`sudo dnf install -y flatpak`
|
||||||
|
} else if(yum) {
|
||||||
|
await $`sudo yum install -y flatpak`
|
||||||
|
} else if (pacman) {
|
||||||
|
await $`sudo pacman -Sy flatpak`
|
||||||
|
} else if (zypper) {
|
||||||
|
await $`sudo zypper install -y flatpak`
|
||||||
|
}
|
||||||
|
const flatpakPost = which.sync('flatpak', { nothrow: true })
|
||||||
|
if (flatpakPost) {
|
||||||
|
await $`flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo`
|
||||||
|
} else {
|
||||||
|
await $`logg error '\`flatpak\` failed to install!'`
|
||||||
|
}
|
||||||
|
await $`logg info '\`flatpak\` was installed. It may require a reboot to function correctly.'`
|
||||||
|
}
|
||||||
|
} else if (packageManager === 'gem') {
|
||||||
|
await ensureInstalled('gem', `brew install ruby`)
|
||||||
|
} else if (packageManager === 'go') {
|
||||||
|
await ensureInstalled('gem', `brew install go`)
|
||||||
|
} else if (packageManager === 'nix') {
|
||||||
|
await ensureInstalled('nix', `
|
||||||
|
if [ -d /Applications ] && [ -d /Library ]; then
|
||||||
|
sh <(curl -L https://nixos.org/nix/install)
|
||||||
|
else
|
||||||
|
sh <(curl -L https://nixos.org/nix/install) --daemon
|
||||||
|
fi
|
||||||
|
`)
|
||||||
|
} else if (packageManager === 'npm') {
|
||||||
|
const npm = which('npm', { nothrow: true })
|
||||||
|
const node = which('node', { nothrow: true })
|
||||||
|
const volta = which('volta', { nothrow: true })
|
||||||
|
if (npm && node && volta) {
|
||||||
|
await $`logg info '\`npm\`, \`node\`, and \`volta\` are available'`
|
||||||
|
} else {
|
||||||
|
if (!volta) {
|
||||||
|
await $`brew install volta`
|
||||||
|
}
|
||||||
|
await $`
|
||||||
|
if [ -z "$VOLTA_HOME" ]; then
|
||||||
|
volta setup
|
||||||
|
fi
|
||||||
|
export PATH="$VOLTA_HOME/bin:$PATH"
|
||||||
|
volta install node
|
||||||
|
`
|
||||||
|
}
|
||||||
|
} else if (packageManager === 'pacman') {
|
||||||
|
await ensureInstalled('pacman', false)
|
||||||
|
} else if (packageManager === 'pipx') {
|
||||||
|
await ensureInstalled('pipx', `brew install pipx && pipx ensurepath`)
|
||||||
|
} else if (packageManager === 'pkg') {
|
||||||
|
await ensureInstalled('pkg', false)
|
||||||
|
} else if (packageManager === 'port') {
|
||||||
|
await ensureInstalled('port', `
|
||||||
|
echo "TODO - script that installs port on macOS here"
|
||||||
|
`)
|
||||||
|
} else if (packageManager === 'scoop') {
|
||||||
|
await ensureInstalled('scoop', `
|
||||||
|
powershell 'Set-ExecutionPolicy RemoteSigned -Scope CurrentUser'
|
||||||
|
powershell 'irm get.scoop.sh | iex
|
||||||
|
`)
|
||||||
|
} else if (packageManager === 'snap') {
|
||||||
|
const apk = which.sync('apk', { nothrow: true })
|
||||||
|
const apt = which.sync('apt-get', { nothrow: true })
|
||||||
|
const dnf = which.sync('dnf', { nothrow: true })
|
||||||
|
const yum = which.sync('yum', { nothrow: true })
|
||||||
|
const pacman = which.sync('pacman', { nothrow: true })
|
||||||
|
const zypper = which.sync('zypper', { nothrow: true })
|
||||||
|
if (apt) {
|
||||||
|
await $`
|
||||||
|
if [ -f /etc/apt/preferences.d/nosnap.pref ]; then
|
||||||
|
sudo mv /etc/apt/preferences.d/nosnap.pref /etc/apt/nosnap.pref.bak
|
||||||
|
fi
|
||||||
|
sudo apt install -y snapd
|
||||||
|
`
|
||||||
|
// TODO Following may be required on Kali -> https://snapcraft.io/docs/installing-snap-on-kali
|
||||||
|
// systemctl enable --now snapd apparmor
|
||||||
|
} else if (dnf) {
|
||||||
|
await $`
|
||||||
|
sudo dnf install -y snapd
|
||||||
|
if [ ! -d /snap ]; then
|
||||||
|
sudo ln -s /var/lib/snapd/snap /snap
|
||||||
|
fi
|
||||||
|
`
|
||||||
|
} else if (yum) {
|
||||||
|
await $`
|
||||||
|
sudo yum install -y snapd
|
||||||
|
sudo systemctl enable --now snapd.socket
|
||||||
|
if [ ! -d /snap ]; then
|
||||||
|
sudo ln -s /var/lib/snapd/snap /snap
|
||||||
|
fi
|
||||||
|
`
|
||||||
|
} else if (pacman) {
|
||||||
|
await $`
|
||||||
|
if [ -f /etc/arch-release ]; then
|
||||||
|
sudo git clone https://aur.archlinux.org/snapd.git /usr/local/src/snapd
|
||||||
|
cd /usr/local/src/snapd
|
||||||
|
sudo makepkg -si
|
||||||
|
else
|
||||||
|
sudo pacman -S snapd
|
||||||
|
sudo systemctl enable --now snapd.socket
|
||||||
|
if [ ! -d /snap ]; then
|
||||||
|
sudo ln -s /var/lib/snapd/snap /snap
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
`
|
||||||
|
} else if (zypper) {
|
||||||
|
// TODO See https://snapcraft.io/docs/installing-snap-on-opensuse
|
||||||
|
await $`
|
||||||
|
echo "TODO - Bash script that installs snap w/ zypper"
|
||||||
|
`
|
||||||
|
}
|
||||||
|
const snap = which.sync('snap', { nothrow: true })
|
||||||
|
if (snap) {
|
||||||
|
$`sudo snap install core`
|
||||||
|
}
|
||||||
|
} else if (packageManager === 'whalebrew') {
|
||||||
|
await ensureInstalled('whalebrew', `brew install whalebrew`)
|
||||||
|
} else if (packageManager === 'winget') {
|
||||||
|
await ensureInstalled('winget', `
|
||||||
|
echo "TODO - Script that installs winget here"
|
||||||
|
`)
|
||||||
|
} else if (packageManager === 'yay') {
|
||||||
|
const yay = which.sync('yay', { nothrow: true })
|
||||||
|
await $`sudo pacman -S --needed base-devel git`
|
||||||
|
await $`
|
||||||
|
if [ -d /usr/local/src ]; then
|
||||||
|
git clone https://aur.archlinux.org/yay.git /usr/local/src/yay
|
||||||
|
cd /usr/local/src/yay
|
||||||
|
makepkg -si
|
||||||
|
fi
|
||||||
|
`
|
||||||
|
} else if (packageManager === 'zypper') {
|
||||||
|
await ensureInstalled('zypper', false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Installs a list of packages via the specified package manager
|
||||||
|
async function installPackageList(packageManager, packages) {
|
||||||
|
try {
|
||||||
|
if (packageManager === 'appimage') {
|
||||||
|
} else if (packageManager === 'ansible') {
|
||||||
|
for (const role of packages) {
|
||||||
|
await $`ansible localhost -m include_role -a name=${role}`
|
||||||
|
}
|
||||||
|
} else if (packageManager === 'apk') {
|
||||||
|
await $`sudo apk add ${packages}`
|
||||||
|
} else if (packageManager === 'apt') {
|
||||||
|
await $`sudo apt-get install -y ${packages}`
|
||||||
|
} else if (packageManager === 'basher') {
|
||||||
|
} else if (packageManager === 'binary') {
|
||||||
|
} else if (packageManager === 'brew') {
|
||||||
|
await $`brew install ${packages}`
|
||||||
|
} else if (packageManager === 'cask') {
|
||||||
|
await $`brew install --cask ${packages}`
|
||||||
|
} else if (packageManager === 'cargo') {
|
||||||
|
for (const cargoPkg of packages) {
|
||||||
|
await $`cargo install ${cargoPkg}`
|
||||||
|
}
|
||||||
|
} else if (packageManager === 'choco') {
|
||||||
|
await $`choco install -y ${packages}`
|
||||||
|
} else if (packageManager === 'crew') {
|
||||||
|
} else if (packageManager === 'dnf') {
|
||||||
|
const dnf = which.sync('dnf', { nothrow: true })
|
||||||
|
const yum = which.sync('yum', { nothrow: true })
|
||||||
|
if (dnf) {
|
||||||
|
await $`dnf install -y ${packages}`
|
||||||
|
} else if (yum) {
|
||||||
|
await $`yum install -y ${packages}`
|
||||||
|
}
|
||||||
|
} else if (packageManager === 'flatpak') {
|
||||||
|
for (const flatPkg of packages) {
|
||||||
|
await $`sudo flatpak install flathub ${flatPkg}`
|
||||||
|
}
|
||||||
|
} else if (packageManager === 'gem') {
|
||||||
|
for (const gem of packages) {
|
||||||
|
await $`gem install ${gem}`
|
||||||
|
}
|
||||||
|
} else if (packageManager === 'go') {
|
||||||
|
for (const goPkg of packages) {
|
||||||
|
await $`go install ${goPkg}`
|
||||||
|
}
|
||||||
|
} else if (packageManager === 'nix') {
|
||||||
|
} else if (packageManager === 'npm') {
|
||||||
|
for (const npmPkg of packages) {
|
||||||
|
await $`volta install ${npmPkg}`
|
||||||
|
}
|
||||||
|
} else if (packageManager === 'pacman') {
|
||||||
|
await $`sudo pacman -Sy --noconfirm --needed ${packages}`
|
||||||
|
} else if (packageManager === 'pipx') {
|
||||||
|
for (const pipxPkg of packages) {
|
||||||
|
await $`pipx install ${pipxPkg}`
|
||||||
|
}
|
||||||
|
} else if (packageManager === 'pkg') {
|
||||||
|
} else if (packageManager === 'port') {
|
||||||
|
for (const portPkg of packages) {
|
||||||
|
await $`sudo port install ${portPkg}`
|
||||||
|
}
|
||||||
|
} else if (packageManager === 'scoop') {
|
||||||
|
for (const scoopPkg of packages) {
|
||||||
|
await $`scoop install ${scoopPkg}`
|
||||||
|
}
|
||||||
|
} else if (packageManager === 'snap') {
|
||||||
|
for (const snapPkg of packages) {
|
||||||
|
await $`sudo snap install -y ${snapPkg}`
|
||||||
|
}
|
||||||
|
} else if (packageManager === 'whalebrew') {
|
||||||
|
for (const whalePkg of packages) {
|
||||||
|
await $`whalebrew install ${snapPkg}`
|
||||||
|
}
|
||||||
|
} else if (packageManager === 'winget') {
|
||||||
|
} else if (packageManager === 'yay') {
|
||||||
|
for (const yayPkg of packages) {
|
||||||
|
await $`yay -Sy --noconfirm --needed ${yayPkg}`
|
||||||
|
}
|
||||||
|
} else if (packageManager === 'zypper') {
|
||||||
|
await $`sudo zypper install -y ${zypPkg}`
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
await $`logg error 'Failed to install via \`${packageManager}\`'`
|
||||||
|
await $`logg info 'Proceeding with the installation..'`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// main process
|
||||||
|
async function main() {
|
||||||
|
await $`logg info 'Fetching the latest version of the installation map'`
|
||||||
|
installData = await downloadInstallData();
|
||||||
|
await $`logg info 'Calculating the install orders'`
|
||||||
|
await generateInstallOrders();
|
||||||
|
await $`logg info 'Ensuring any package managers that will be used are installed / configured'`
|
||||||
|
const packageManagers = Object.keys(installOrders);
|
||||||
|
for (const packageManager of packageManagers) {
|
||||||
|
await ensurePackageManager(packageManager);
|
||||||
|
}
|
||||||
|
await $`logg info 'The install orders were generated:'`
|
||||||
|
console.log(installOrders)
|
||||||
|
await $`logg info 'Running package manager pre-installation steps'`
|
||||||
|
for (const packageManager of packageManagers) {
|
||||||
|
await beforeInstall(packageManager);
|
||||||
|
}
|
||||||
|
await $`logg info 'Running package-specific pre-installation steps'`
|
||||||
|
for (const script of installOrdersPre) {
|
||||||
|
await $`${script}`;
|
||||||
|
}
|
||||||
|
await $`logg info 'Installing the packages'`
|
||||||
|
for (const packageManager of packageManagers) {
|
||||||
|
const asyncOrders = [];
|
||||||
|
asyncOrders.push(
|
||||||
|
Promise.resolve(
|
||||||
|
installPackageList(packageManager, installOrders[packageManager])
|
||||||
|
)
|
||||||
|
);
|
||||||
|
await Promise.all(asyncOrders);
|
||||||
|
}
|
||||||
|
await $`logg info 'Running package-specific post-installation steps'`
|
||||||
|
for (const script of installOrdersPost) {
|
||||||
|
await $`${script}`;
|
||||||
|
}
|
||||||
|
await $`logg info 'Running package manager post-installation steps'`
|
||||||
|
for (const packageManager of packageManagers) {
|
||||||
|
await afterInstall(packageManager);
|
||||||
|
}
|
||||||
|
await $`logg success 'Done!'`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start the main process
|
||||||
|
await main();
|
|
@ -10,6 +10,9 @@
|
||||||
|
|
||||||
# Themer.dev: https://themer.dev/?calculateIntermediaryShades.dark=true&colors.dark.shade0=%23161925&colors.dark.shade7=%23C3C7D1&colors.dark.accent0=%23ED254E&colors.dark.accent3=%2371F79F&colors.dark.accent2=%23F9DC5C&colors.dark.accent4=%2300C1E4&colors.dark.accent5=%237CB7FF&colors.dark.accent7=%23C74D89&colors.dark.accent6=%23C3C7D1&colors.dark.accent1=%23DCDFE4&colors.light.accent0=%23FF4972&colors.light.accent3=%2395FFC3&colors.light.accent2=%23FFFF80&colors.light.accent5=%23A0DBFF&colors.light.accent7=%23EB71AD&colors.light.accent6=%234C5058&colors.light.shade7=%234C5058&colors.light.shade0=%23FFFFFF&colors.light.accent4=%2324E5FF&colors.light.accent1=%23DCDFE4&activeColorSet=dark
|
# Themer.dev: https://themer.dev/?calculateIntermediaryShades.dark=true&colors.dark.shade0=%23161925&colors.dark.shade7=%23C3C7D1&colors.dark.accent0=%23ED254E&colors.dark.accent3=%2371F79F&colors.dark.accent2=%23F9DC5C&colors.dark.accent4=%2300C1E4&colors.dark.accent5=%237CB7FF&colors.dark.accent7=%23C74D89&colors.dark.accent6=%23C3C7D1&colors.dark.accent1=%23DCDFE4&colors.light.accent0=%23FF4972&colors.light.accent3=%2395FFC3&colors.light.accent2=%23FFFF80&colors.light.accent5=%23A0DBFF&colors.light.accent7=%23EB71AD&colors.light.accent6=%234C5058&colors.light.shade7=%234C5058&colors.light.shade0=%23FFFFFF&colors.light.accent4=%2324E5FF&colors.light.accent1=%23DCDFE4&activeColorSet=dark
|
||||||
|
|
||||||
|
# Required for styled logging
|
||||||
|
{{- includeTemplate "universal/logg-compat" }}
|
||||||
|
|
||||||
export COLOR_01="#282C34" # Black
|
export COLOR_01="#282C34" # Black
|
||||||
export COLOR_02="#ED254E" # Red
|
export COLOR_02="#ED254E" # Red
|
||||||
export COLOR_03="#71F79F" # Green
|
export COLOR_03="#71F79F" # Green
|
||||||
|
@ -34,7 +37,9 @@ export CURSOR_COLOR="$FOREGROUND_COLOR" # Cursor color
|
||||||
export PROFILE_NAME="Betelgeuse"
|
export PROFILE_NAME="Betelgeuse"
|
||||||
|
|
||||||
if [ ! -e gconftool-2 ] && [ -f /etc/debian_version ]; then
|
if [ ! -e gconftool-2 ] && [ -f /etc/debian_version ]; then
|
||||||
|
logg 'Running `sudo apt-get update`'
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
|
logg 'Running `sudo apt-get install -y gconf2`'
|
||||||
sudo apt-get install -y gconf2
|
sudo apt-get install -y gconf2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
3
.local/bin/load-secrets
Normal file
3
.local/bin/load-secrets
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
logg
|
|
@ -122,7 +122,7 @@ logger() {
|
||||||
if [ "$1" == 'error' ]; then
|
if [ "$1" == 'error' ]; then
|
||||||
"$GUM_PATH" style --border="thick" "$("$GUM_PATH" style --foreground="#ff0000" "✖") $("$GUM_PATH" style --bold --background="#ff0000" --foreground="#ffffff" " ERROR ") $("$GUM_PATH" style --bold "$(format "$2")")"
|
"$GUM_PATH" style --border="thick" "$("$GUM_PATH" style --foreground="#ff0000" "✖") $("$GUM_PATH" style --bold --background="#ff0000" --foreground="#ffffff" " ERROR ") $("$GUM_PATH" style --bold "$(format "$2")")"
|
||||||
elif [ "$1" == 'info' ]; then
|
elif [ "$1" == 'info' ]; then
|
||||||
"$GUM_PATH" style " $("$GUM_PATH" style --foreground="#00ffff" "○") $2"
|
"$GUM_PATH" style " $("$GUM_PATH" style --foreground="#00ffff" "○") $("$GUM_PATH" style --faint "$(formatFaint "$2")")"
|
||||||
elif [ "$1" == 'md' ]; then
|
elif [ "$1" == 'md' ]; then
|
||||||
# @description Ensure glow is installed
|
# @description Ensure glow is installed
|
||||||
if [ "${container:=}" != 'docker' ]; then
|
if [ "${container:=}" != 'docker' ]; then
|
||||||
|
@ -148,26 +148,44 @@ logger() {
|
||||||
elif [ "$1" == 'prompt' ]; then
|
elif [ "$1" == 'prompt' ]; then
|
||||||
"$GUM_PATH" style " $("$GUM_PATH" style --foreground="#00008b" "▶") $("$GUM_PATH" style --bold "$(format "$2")")"
|
"$GUM_PATH" style " $("$GUM_PATH" style --foreground="#00008b" "▶") $("$GUM_PATH" style --bold "$(format "$2")")"
|
||||||
elif [ "$1" == 'star' ]; then
|
elif [ "$1" == 'star' ]; then
|
||||||
"$GUM_PATH" style " $("$GUM_PATH" style --foreground="#d1d100" "◆") $("$GUM_PATH" style --bold --underline "$(format "$2")")"
|
"$GUM_PATH" style " $("$GUM_PATH" style --foreground="#d1d100" "◆") $("$GUM_PATH" style --bold "$(format "$2")")"
|
||||||
elif [ "$1" == 'start' ]; then
|
elif [ "$1" == 'start' ]; then
|
||||||
"$GUM_PATH" style " $("$GUM_PATH" style --foreground="#00ff00" "▶") $("$GUM_PATH" style --bold "$(format "$2")")"
|
"$GUM_PATH" style " $("$GUM_PATH" style --foreground="#00ff00" "▶") $("$GUM_PATH" style --bold "$(format "$2")")"
|
||||||
elif [ "$1" == 'success' ]; then
|
elif [ "$1" == 'success' ]; then
|
||||||
"$GUM_PATH" style "$("$GUM_PATH" style --foreground="#00ff00" "✔") $("$GUM_PATH" style --bold "$(format "$2")")"
|
"$GUM_PATH" style "$("$GUM_PATH" style --foreground="#00ff00" "✔") $("$GUM_PATH" style --bold "$(format "$2")")"
|
||||||
elif [ "$1" == 'warn' ]; then
|
elif [ "$1" == 'warn' ]; then
|
||||||
"$GUM_PATH" style " $("$GUM_PATH" style --foreground="#d1d100" "◆") $("$GUM_PATH" style --bold --background="#ffff00" --foreground="#000000" " WARNING ") $("$GUM_PATH" style --bold --italic "$(format "$2")")"
|
"$GUM_PATH" style " $("$GUM_PATH" style --foreground="#d1d100" "◆") $("$GUM_PATH" style --bold --background="#ffff00" --foreground="#000000" " WARNING ") $("$GUM_PATH" style --bold "$(format "$2")")"
|
||||||
else
|
else
|
||||||
echo "WARNING: Unknown log type"
|
"$GUM_PATH" style " $("$GUM_PATH" style --foreground="#00ff00" "▶") $("$GUM_PATH" style --bold "$(format "$2")")"
|
||||||
echo "$2"
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
format() {
|
format() {
|
||||||
# shellcheck disable=SC2001,SC2016
|
# shellcheck disable=SC2001,SC2016
|
||||||
ANSI_STR="$(echo "$1" | sed 's/^\([^`]*\)`\([^`]*\)`/\1\\u001b[47;1;30m \2 \\e[0;39m/')"
|
ANSI_STR_FORMATTED="$(echo "$1" | sed 's/^\([^`]*\)`\([^`]*\)`.*/\1\\u001b[47;30m \2 \\e[49;m/')"
|
||||||
if [[ $ANSI_STR == *'`'*'`'* ]]; then
|
ANSI_STR="$(echo "$1" | sed 's/^\([^`]*\)`\([^`]*\)`\(.*\)$/\3/')"
|
||||||
ANSI_STR="$(format "$ANSI_STR")"
|
if [ "$ANSI_STR_FORMATTED" != "$ANSI_STR" ]; then
|
||||||
|
if [[ $ANSI_STR == *'`'*'`'* ]]; then
|
||||||
|
ANSI_STR_FORMATTED="$ANSI_STR_FORMATTED$(format "$("$GUM_PATH" style --bold "$ANSI_STR")")"
|
||||||
|
else
|
||||||
|
ANSI_STR_FORMATTED="$("$GUM_PATH" style --bold "$ANSI_STR")"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
echo -e "$ANSI_STR"
|
echo -e "$ANSI_STR_FORMATTED"
|
||||||
|
}
|
||||||
|
|
||||||
|
formatFaint() {
|
||||||
|
# shellcheck disable=SC2001,SC2016
|
||||||
|
ANSI_STR_FORMATTED="$(echo "$1" | sed 's/^\([^`]*\)`\([^`]*\)`.*/\1\\u001b[47;30m \2 \\e[49;m/')"
|
||||||
|
ANSI_STR="$(echo "$1" | sed 's/^\([^`]*\)`\([^`]*\)`\(.*\)$/\3/')"
|
||||||
|
if [ "$ANSI_STR_FORMATTED" != "$ANSI_STR" ]; then
|
||||||
|
if [[ $ANSI_STR == *'`'*'`'* ]]; then
|
||||||
|
ANSI_STR_FORMATTED="$ANSI_STR_FORMATTED$(formatFaint "$("$GUM_PATH" style --faint "$ANSI_STR")")"
|
||||||
|
else
|
||||||
|
ANSI_STR_FORMATTED="$ANSI_STR_FORMATTED$("$GUM_PATH" style --faint "$ANSI_STR")"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
echo -e "$ANSI_STR_FORMATTED"
|
||||||
}
|
}
|
||||||
|
|
||||||
# @description Display prompt that allows you to choose between options
|
# @description Display prompt that allows you to choose between options
|
||||||
|
@ -389,5 +407,7 @@ elif [ -n "$1" ]; then
|
||||||
# Public functions that can run with only one argument passed to .config/log (i.e. `.config/log password`)
|
# Public functions that can run with only one argument passed to .config/log (i.e. `.config/log password`)
|
||||||
if [ "$1" == 'write' ] || [ "$1" == 'password' ] || [ "$1" == 'confirm' ] || [ "$1" == 'input' ]; then
|
if [ "$1" == 'write' ] || [ "$1" == 'password' ] || [ "$1" == 'confirm' ] || [ "$1" == 'input' ]; then
|
||||||
"$1"
|
"$1"
|
||||||
|
else
|
||||||
|
info "$1"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -1,183 +1,30 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -eo pipefail
|
# Install Homebrew
|
||||||
|
if ! type brew &> /dev/null; then
|
||||||
### Qubes dom0 specific code at top
|
if type sudo &> /dev/null && sudo -n true; then
|
||||||
# The VM name that will manage the Ansible provisioning (for Qubes dom0)
|
echo | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
||||||
ANSIBLE_PROVISION_VM="provision"
|
|
||||||
|
|
||||||
# Ensure sys-whonix is configured (for Qubes dom0)
|
|
||||||
CONFIG_WIZARD_COUNT=0
|
|
||||||
ENABLE_OBFSC='false'
|
|
||||||
function configureWizard() {
|
|
||||||
if xwininfo -root -tree | grep "Anon Connection Wizard"; then
|
|
||||||
WINDOW_ID="$(xwininfo -root -tree | grep "Anon Connection Wizard" | sed 's/^ *\([^ ]*\) .*/\1/')"
|
|
||||||
xdotool windowactivate "$WINDOW_ID" && sleep 1 && xdotool key 'Enter' && sleep 1 && xdotool key 'Tab Tab Enter' && sleep 24 && xdotool windowactivate "$WINDOW_ID" && sleep 1 && xdotool key 'Enter' && sleep 300
|
|
||||||
qvm-shutdown --wait sys-whonix
|
|
||||||
sleep 3
|
|
||||||
qvm-start sys-whonix
|
|
||||||
if xwininfo -root -tree | grep "systemcheck | Whonix" > /dev/null; then
|
|
||||||
WINDOW_ID_SYSCHECK="$(xwininfo -root -tree | grep "systemcheck | Whonix" | sed 's/^ *\([^ ]*\) .*/\1/')"
|
|
||||||
if xdotool windowactivate "$WINDOW_ID_SYS_CHECK"; then
|
|
||||||
sleep 1
|
|
||||||
xdotool key 'Enter'
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
else
|
else
|
||||||
sleep 3
|
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
||||||
CONFIG_WIZARD_COUNT=$((CONFIG_WIZARD_COUNT + 1))
|
|
||||||
if [[ "$CONFIG_WIZARD_COUNT" == '4' ]]; then
|
|
||||||
echo "The sys-whonix anon-connection-wizard utility did not open."
|
|
||||||
else
|
|
||||||
echo "Checking for anon-connection-wizard again.."
|
|
||||||
configureWizard
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
}
|
|
||||||
|
|
||||||
### Update via system package manager and install Homebrew dependencies
|
|
||||||
if command -v qubesctl > /dev/null; then
|
|
||||||
# Qubes dom0
|
|
||||||
|
|
||||||
### Ensure dom0 is updated
|
|
||||||
if [ ! -f /root/dom0-updated ]; then
|
|
||||||
sudo qubesctl --show-output state.sls update.qubes-dom0
|
|
||||||
sudo qubes-dom0-update --clean -y
|
|
||||||
touch /root/dom0-updated
|
|
||||||
fi
|
|
||||||
|
|
||||||
### Ensure sys-whonix is running
|
|
||||||
if ! qvm-check --running sys-whonix; then
|
|
||||||
qvm-start sys-whonix --skip-if-running
|
|
||||||
configureWizard > /dev/null
|
|
||||||
fi
|
|
||||||
|
|
||||||
### Ensure TemplateVMs are updated
|
|
||||||
if [ ! -f /root/templatevms-updated ]; then
|
|
||||||
# timeout of 10 minutes is added here because the whonix-gw VM does not like to get updated
|
|
||||||
# with this method. Anyone know how to fix this?
|
|
||||||
sudo timeout 600 qubesctl --show-output --skip-dom0 --templates state.sls update.qubes-vm &> /dev/null || EXIT_CODE=$?
|
|
||||||
while read RESTART_VM; do
|
|
||||||
qvm-shutdown --wait "$RESTART_VM"
|
|
||||||
done< <(qvm-ls --all --no-spinner --fields=name,state | grep Running | grep -v sys-net | grep -v sys-firewall | grep -v sys-whonix | grep -v dom0 | awk '{print $1}')
|
|
||||||
sudo touch /root/templatevms-updated
|
|
||||||
fi
|
|
||||||
|
|
||||||
### Ensure provisioning VM can run commands on any VM
|
|
||||||
echo "/bin/bash" | sudo tee /etc/qubes-rpc/qubes.VMShell
|
|
||||||
sudo chmod 755 /etc/qubes-rpc/qubes.VMShell
|
|
||||||
echo "$ANSIBLE_PROVISION_VM"' dom0 allow' | sudo tee /etc/qubes-rpc/policy/qubes.VMShell
|
|
||||||
echo "$ANSIBLE_PROVISION_VM"' $anyvm allow' | sudo tee -a /etc/qubes-rpc/policy/qubes.VMShell
|
|
||||||
sudo chown "$(whoami):$(whoami)" /etc/qubes-rpc/policy/qubes.VMShell
|
|
||||||
sudo chmod 644 /etc/qubes-rpc/policy/qubes.VMShell
|
|
||||||
|
|
||||||
|
|
||||||
### Create provisioning VM and initialize the provisioning process from there
|
|
||||||
qvm-create --label red --template debian-11 "$ANSIBLE_PROVISION_VM" &> /dev/null || EXIT_CODE=$?
|
|
||||||
qvm-volume extend "$ANSIBLE_PROVISION_VM:private" "40G"
|
|
||||||
if [ -f ~/.vaultpass ]; then
|
|
||||||
qvm-run "$ANSIBLE_PROVISION_VM" 'rm -f ~/QubesIncoming/dom0/.vaultpass'
|
|
||||||
qvm-copy-to-vm "$ANSIBLE_PROVISION_VM" ~/.vaultpass
|
|
||||||
qvm-run "$ANSIBLE_PROVISION_VM" 'cp ~/QubesIncoming/dom0/.vaultpass ~/.vaultpass'
|
|
||||||
fi
|
|
||||||
qvm-run --pass-io "$ANSIBLE_PROVISION_VM" 'curl -sSL https://install.doctor/start > ~/start.sh && bash ~/start.sh'
|
|
||||||
exit 0
|
|
||||||
elif command -v apt-get > /dev/null; then
|
|
||||||
# Debian / Ubuntu
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y curl git
|
|
||||||
elif command -v dnf > /dev/null; then
|
|
||||||
# Fedora
|
|
||||||
sudo dnf install -y curl git
|
|
||||||
elif command -v yum > /dev/null; then
|
|
||||||
# CentOS
|
|
||||||
sudo yum install -y curl git
|
|
||||||
elif command -v pacman > /dev/null; then
|
|
||||||
# Archlinux
|
|
||||||
sudo pacman update
|
|
||||||
sudo pacman -Sy curl git
|
|
||||||
elif command -v zypper > /dev/null; then
|
|
||||||
# OpenSUSE
|
|
||||||
sudo zypper install -y curl git nodejs
|
|
||||||
elif command -v apk > /dev/null; then
|
|
||||||
# Alpine
|
|
||||||
apk add curl git
|
|
||||||
elif [ -d /Applications ] && [ -d /Library ]; then
|
|
||||||
# macOS
|
|
||||||
sudo xcode-select -p >/dev/null 2>&1 || xcode-select --install
|
|
||||||
elif command -v nix-env > /dev/null; then
|
|
||||||
# NixOS
|
|
||||||
elif [[ "$OSTYPE" == 'freebsd'* ]]; then
|
|
||||||
# FreeBSD
|
|
||||||
elif command -v pkg > /dev/null; then
|
|
||||||
# Termux
|
|
||||||
elif command -v xbps-install > /dev/null; then
|
|
||||||
# Void
|
|
||||||
elif [[ "$OSTYPE" == 'cygwin' ]] || [[ "$OSTYPE" == 'msys' ]] || [[ "$OSTYPE" == 'win32' ]]; then
|
|
||||||
# Windows
|
|
||||||
choco install -y curl git node
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
### Install Homebrew
|
# Install Homebrew bundle and go-task
|
||||||
ensurePackageManagerHomebrew() {
|
brew install go-task/tap/go-task
|
||||||
if ! command -v brew > /dev/null; then
|
brew install jq
|
||||||
if command -v sudo > /dev/null && sudo -n true; then
|
brew install yq
|
||||||
echo | bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
|
||||||
else
|
|
||||||
logg info 'Homebrew is not installed. Password may be required.'
|
|
||||||
bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" || BREW_EXIT_CODE="$?"
|
|
||||||
if [ -n "$BREW_EXIT_CODE" ]; then
|
|
||||||
if command -v brew > /dev/null; then
|
|
||||||
logg warn 'Homebrew was installed but part of the installation failed. Attempting to fix..'
|
|
||||||
BREW_DIRS="share/man share/doc share/zsh/site-functions etc/bash_completion.d"
|
|
||||||
for BREW_DIR in $BREW_DIRS; do
|
|
||||||
if [ -d "$(brew --prefix)/$BREW_DIR" ]; then
|
|
||||||
sudo chown -R "$(whoami)" "$(brew --prefix)/$BREW_DIR"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
brew update --force --quiet
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
ensurePackageManagerHomebrew
|
|
||||||
|
|
||||||
### Install installer dependencies via Homebrew
|
# Ensure dotfiles are present
|
||||||
if command -v brew > /dev/null; then
|
if [ ! -f "$HOME/.local/bin/install-dotfiles" ]; then
|
||||||
brew install chezmoi go-task/tap/go-task jq node yq zx
|
bash <(curl -sSL https://gitlab.com/megabyte-labs/misc/dotfiles/-/raw/master/dotfiles/.local/bin/install-dotfiles)
|
||||||
fi
|
|
||||||
|
|
||||||
### Ensure source files are present
|
|
||||||
if [ -d /usr/local/src/hiawatha ] && [ ! -w /usr/local/src/hiawatha ]; then
|
|
||||||
sudo chown -Rf "$USER":"$(id -g -n)" /usr/local/src/hiawatha
|
|
||||||
fi
|
|
||||||
if [ -d /usr/local/src/hiawatha/.git ]; then
|
|
||||||
git config pull.rebase false
|
|
||||||
git pull origin master
|
|
||||||
else
|
else
|
||||||
rm -rf /usr/local/src/hiawatha
|
chmod +x "$HOME/.local/bin/install-dotfiles"
|
||||||
sudo git clone https://gitlab.com/megabyte-labs/dotfiles.git /usr/local/src/hiawatha
|
install-dotfiles
|
||||||
chown -Rf "$USER":"$(id -g -n)" /usr/local/src/hiawatha
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
### Copy folders
|
# Use run alias to invoke the `$HOME/.local/Taskfile.yml`
|
||||||
find /usr/local/src/hiawatha -maxdepth 1 -mindepth 1 -type d | while read FOLDER; do
|
if [ -z "$1" ]; then
|
||||||
BASENAME="$(basename "$FOLDER")"
|
run localhost:provision
|
||||||
if [ ! -d "$HOME/$BASENAME" ]; then
|
else
|
||||||
mkdir -p "$HOME/$BASENAME"
|
run "localhost:provision:$1"
|
||||||
fi
|
fi
|
||||||
cp -rf "$FOLDER/"* "$HOME/$BASENAME"
|
|
||||||
done
|
|
||||||
|
|
||||||
### Copy files
|
|
||||||
find /usr/local/src/hiawatha -maxdepth 1 -mindepth 1 -type f | while read FILE; do
|
|
||||||
BASENAME="$(basename "$FILE")"
|
|
||||||
cp "$FILE" "$HOME/$BASENAME"
|
|
||||||
chmod 600 "$HOME/$BASENAME"
|
|
||||||
done
|
|
||||||
|
|
||||||
### Ensure ~/.local/bin files are executable
|
|
||||||
find "$HOME/.local/bin" -maxdepth 1 -mindepth 1 -type f | while read BINFILE; do
|
|
||||||
chmod +x "$BINFILE"
|
|
||||||
done
|
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
task --taskfile $HOME/.local/common/shared/Taskfile.yml $@
|
task --taskfile $HOME/.local/src/shared-common/Taskfile.yml $@
|
||||||
|
|
2
.local/bin/slack
Normal file
2
.local/bin/slack
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
#!/bin/bash
|
||||||
|
exec firejail /usr/bin/slack --enable-features=UseOzonePlatform,WebRTCPipeWireCapturer --ozone-platform=wayland &> /dev/null &
|
669
.local/scripts/motd.bash
Normal file
669
.local/scripts/motd.bash
Normal file
|
@ -0,0 +1,669 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
# shellcheck disable=SC1090,SC1091
|
||||||
|
|
||||||
|
BAR_ELEMENT="-"
|
||||||
|
BAR_HEALTHY_COLOR="32"
|
||||||
|
BAR_WARNING_THRESHOLD=70
|
||||||
|
BAR_WARNING_COLOR="33"
|
||||||
|
BAR_CRITICAL_THRESHOLD=90
|
||||||
|
BAR_CRITICAL_COLOR="31"
|
||||||
|
|
||||||
|
BANNER_KERNEL_ICON=""
|
||||||
|
BANNER_KERNEL_COLOR="33"
|
||||||
|
BANNER_UPTIME_ICON=""
|
||||||
|
BANNER_UPTIME_COLOR="94"
|
||||||
|
BANNER_DEBIAN_ICON=""
|
||||||
|
BANNER_DEBIAN_COLOR="95"
|
||||||
|
BANNER_FEDORA_ICON=""
|
||||||
|
BANNER_FEDORA_COLOR="34"
|
||||||
|
BANNER_FONTPATH=""
|
||||||
|
BANNER_TEXT="$(hostname -s)"
|
||||||
|
|
||||||
|
PROCESSOR_LOADAVG_ICON="ﲯ"
|
||||||
|
PROCESSOR_LOADAVG_HEALTHY_COLOR="32"
|
||||||
|
PROCESSOR_LOADAVG_WARNING_THRESHOLD=2
|
||||||
|
PROCESSOR_LOADAVG_WARNING_COLOR="33"
|
||||||
|
PROCESSOR_LOADAVG_CRITICAL_THRESHOLD=4
|
||||||
|
PROCESSOR_LOADAVG_CRITICAL_COLOR="31"
|
||||||
|
PROCESSOR_MODEL_ICON=""
|
||||||
|
|
||||||
|
MEMORY_ICON=""
|
||||||
|
|
||||||
|
SWAP_ICON=""
|
||||||
|
|
||||||
|
DISKSPACE_ICON=""
|
||||||
|
|
||||||
|
SERVICES_UP_ICON=""
|
||||||
|
SERVICES_UP_COLOR="32"
|
||||||
|
SERVICES_DOWN_ICON=""
|
||||||
|
SERVICES_DOWN_COLOR="31"
|
||||||
|
SERVICES_FILE=".bashrc_motd_services.txt"
|
||||||
|
|
||||||
|
# TODO - Fill this in if Podman is ever used
|
||||||
|
PODMAN_VERSION_ICON="#"
|
||||||
|
PODMAN_IMAGES_ICON="#"
|
||||||
|
PODMAN_RUNNING_ICON="#"
|
||||||
|
PODMAN_RUNNING_COLOR="32"
|
||||||
|
PODMAN_OTHER_ICON="#"
|
||||||
|
PODMAN_OTHER_COLOR="90"
|
||||||
|
|
||||||
|
DOCKER_VERSION_ICON=""
|
||||||
|
DOCKER_IMAGES_ICON=""
|
||||||
|
DOCKER_RUNNING_ICON=""
|
||||||
|
DOCKER_RUNNING_COLOR="32"
|
||||||
|
DOCKER_OTHER_ICON=""
|
||||||
|
DOCKER_OTHER_COLOR="90"
|
||||||
|
|
||||||
|
UPDATES_ZERO_ICON=""
|
||||||
|
UPDATES_ZERO_COLOR="32"
|
||||||
|
UPDATES_AVAILIABLE_ICON="ﮮ"
|
||||||
|
UPDATES_AVAILIABLE_COLOR="33"
|
||||||
|
UPDATES_SECURITY_ICON="撚"
|
||||||
|
UPDATES_SECURITY_COLOR="31"
|
||||||
|
|
||||||
|
LETSENCRYPT_VALID_ICON="ﲘ"
|
||||||
|
LETSENCRYPT_VALID_COLOR="32"
|
||||||
|
LETSENCRYPT_WARNING_ICON="ﲙ"
|
||||||
|
LETSENCRYPT_WARNING_COLOR="33"
|
||||||
|
LETSENCRYPT_INVALID_ICON=""
|
||||||
|
LETSENCRYPT_INVALID_COLOR="31"
|
||||||
|
LETSENCRYPT_CERTPATH="/etc/letsencrypt/live"
|
||||||
|
|
||||||
|
LOGIN_LOGIN_ICON=""
|
||||||
|
LOGIN_LOGOUT_ICON=""
|
||||||
|
LOGIN_IP_ICON="ﯱ"
|
||||||
|
|
||||||
|
INCLUDE_FILE="ownscript.sh"
|
||||||
|
|
||||||
|
generate_unit_byte() {
|
||||||
|
# 1 - unit in M
|
||||||
|
|
||||||
|
if [ "$1" -ge 1024 ]; then
|
||||||
|
unit_symbol="G"
|
||||||
|
unit_value=$(echo "$1/1024" | bc -l | LANG=C xargs printf "%.1f\n")
|
||||||
|
else
|
||||||
|
unit_symbol="M"
|
||||||
|
unit_value=$1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$unit_value$unit_symbol"
|
||||||
|
}
|
||||||
|
|
||||||
|
generate_space() {
|
||||||
|
# 1 - already used
|
||||||
|
# 2 - total
|
||||||
|
|
||||||
|
space_fill=$(($2 - ${#1}))
|
||||||
|
space_chars=""
|
||||||
|
|
||||||
|
while [ $space_fill -ge 0 ]; do
|
||||||
|
space_chars="$space_chars "
|
||||||
|
space_fill=$((space_fill - 1))
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "$space_chars"
|
||||||
|
}
|
||||||
|
|
||||||
|
generate_bar() {
|
||||||
|
# 1 - icon
|
||||||
|
# 2 - total
|
||||||
|
# 3 - used_1
|
||||||
|
# 4 - [ used_2 ]
|
||||||
|
|
||||||
|
bar_percent=$(($3 * 100 / $2))
|
||||||
|
bar_separator=$(($3 * 100 * 10 / $2 / 25))
|
||||||
|
|
||||||
|
if [ $bar_percent -ge "$BAR_WARNING_THRESHOLD" ]; then
|
||||||
|
bar_color=$BAR_WARNING_COLOR
|
||||||
|
elif [ $bar_percent -ge "$BAR_CRITICAL_THRESHOLD" ]; then
|
||||||
|
bar_color=$BAR_CRITICAL_COLOR
|
||||||
|
else
|
||||||
|
bar_color=$BAR_HEALTHY_COLOR
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf " %s \\033[%dm" "$1" "$bar_color"
|
||||||
|
|
||||||
|
if [ -z "$4" ]; then
|
||||||
|
bar_piece=0
|
||||||
|
while [ $bar_piece -le 40 ]; do
|
||||||
|
if [ "$bar_piece" -ne "$bar_separator" ]; then
|
||||||
|
printf "%s" "$BAR_ELEMENT"
|
||||||
|
else
|
||||||
|
printf "%s\\033[1;30m" "$BAR_ELEMENT"
|
||||||
|
fi
|
||||||
|
|
||||||
|
bar_piece=$((bar_piece + 1))
|
||||||
|
done
|
||||||
|
else
|
||||||
|
bar_cached_val=$(($3 + $4))
|
||||||
|
bar_cached_separator=$((bar_cached_val * 100 * 10 / $2 / 25))
|
||||||
|
|
||||||
|
bar_piece=0
|
||||||
|
while [ $bar_piece -le 40 ]; do
|
||||||
|
if [ $bar_piece -eq $bar_separator ]; then
|
||||||
|
printf "%s\\033[1;36m" "$BAR_ELEMENT"
|
||||||
|
elif [ $bar_piece -eq $bar_cached_separator ]; then
|
||||||
|
printf "%s\\033[1;30m" "$BAR_ELEMENT"
|
||||||
|
else
|
||||||
|
printf "%s" "$BAR_ELEMENT"
|
||||||
|
fi
|
||||||
|
|
||||||
|
bar_piece=$((bar_piece + 1))
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "\\033[0m\\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
generate_bar_memory() {
|
||||||
|
# 1 - icon
|
||||||
|
# 2 - total memory in M
|
||||||
|
# 3 - used memory in M
|
||||||
|
# 4 - cached memory in M
|
||||||
|
|
||||||
|
bar_memory_used=$(generate_unit_byte "$3")
|
||||||
|
bar_memory_cached=$(generate_unit_byte "$4")
|
||||||
|
bar_memory_available=$(generate_unit_byte $(($2 - $3)))
|
||||||
|
|
||||||
|
printf " %s used / %s cached / %s available\\n" "$bar_memory_used" "$bar_memory_cached" "$bar_memory_available"
|
||||||
|
generate_bar "$1" "$2" "$3" "$4"
|
||||||
|
}
|
||||||
|
|
||||||
|
generate_bar_swap() {
|
||||||
|
# 1 - icon
|
||||||
|
# 2 - total swap in M
|
||||||
|
# 3 - used swap in M
|
||||||
|
|
||||||
|
bar_swap_used=$(generate_unit_byte "$3")
|
||||||
|
|
||||||
|
bar_swap_available=$(($2 - $3))
|
||||||
|
bar_swap_available=$(generate_unit_byte "$bar_swap_available")
|
||||||
|
|
||||||
|
printf " %s used / %s available\\n" "$bar_swap_used" "$bar_swap_available"
|
||||||
|
generate_bar "$1" "$2" "$3"
|
||||||
|
}
|
||||||
|
|
||||||
|
generate_bar_disk() {
|
||||||
|
# 1 - icon
|
||||||
|
# 2 - total size in M
|
||||||
|
# 3 - used space in M
|
||||||
|
# 4 - mount path
|
||||||
|
|
||||||
|
bar_disk_mount="$4$(generate_space "$4" 10)"
|
||||||
|
|
||||||
|
bar_disk_used="$(generate_unit_byte "$3")"
|
||||||
|
bar_disk_used="$(generate_space "$bar_disk_used" 5)$bar_disk_used used"
|
||||||
|
|
||||||
|
bar_disk_available="$(($2 - $3))"
|
||||||
|
bar_disk_available="$(generate_unit_byte "$bar_disk_available") available"
|
||||||
|
|
||||||
|
printf " %s%s / %s\\n" "$bar_disk_mount" "$bar_disk_used" "$bar_disk_available"
|
||||||
|
|
||||||
|
generate_bar "$1" "$2" "$3"
|
||||||
|
}
|
||||||
|
|
||||||
|
print_banner() {
|
||||||
|
if command -v lolcat >/dev/null && command -v figlet >/dev/null; then
|
||||||
|
if [[ "${#HOSTNAME}" -lt 14 ]]; then
|
||||||
|
figlet "$(hostname)" | lolcat -f
|
||||||
|
else
|
||||||
|
printf "\\n"
|
||||||
|
printf " \\033[1;37mHostname:\\033[0m %s\\n" "$(hostname)"
|
||||||
|
fi
|
||||||
|
elif command -v figlet >/dev/null; then
|
||||||
|
printf "\\n%s\\n" "$(figlet -t -f "$BANNER_FONTPATH" " $BANNER_TEXT")"
|
||||||
|
else
|
||||||
|
printf "\\n"
|
||||||
|
printf " \\033[1;37mHostname:\\033[0m %s\\n" "$(hostname)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f /etc/os-release ]; then
|
||||||
|
. /etc/os-release
|
||||||
|
|
||||||
|
if [ "$ID" = "debian" ]; then
|
||||||
|
banner_distro_icon="$BANNER_DEBIAN_ICON"
|
||||||
|
banner_distro_color="$BANNER_DEBIAN_COLOR"
|
||||||
|
banner_distro_name="Debian"
|
||||||
|
banner_distro_version="$(cat /etc/debian_version)"
|
||||||
|
elif [ "$ID" = "fedora" ]; then
|
||||||
|
banner_distro_icon="$BANNER_FEDORA_ICON"
|
||||||
|
banner_distro_color="$BANNER_FEDORA_COLOR"
|
||||||
|
banner_distro_name="Fedora"
|
||||||
|
banner_distro_version="$VERSION_ID"
|
||||||
|
else
|
||||||
|
banner_distro_icon="$OS_ICON"
|
||||||
|
banner_distro_color="0"
|
||||||
|
if [ -n "$NAME" ]; then
|
||||||
|
banner_distro_name="$NAME"
|
||||||
|
elif [ -n "$PRETTY_NAME" ]; then
|
||||||
|
banner_distro_name="$PRETTY_NAME"
|
||||||
|
else
|
||||||
|
banner_distro_name="Linux"
|
||||||
|
fi
|
||||||
|
if [ -n "$VERSION" ]; then
|
||||||
|
banner_distro_version="$VERSION"
|
||||||
|
elif [ -n "$VERSION_ID" ]; then
|
||||||
|
banner_distro_version="$VERSION_ID"
|
||||||
|
elif [ -n "$BUILD_ID" ]; then
|
||||||
|
banner_distro_version="$BUILD_ID"
|
||||||
|
else
|
||||||
|
banner_distro_version="Version Unknown"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
banner_distro_space="$(generate_space "$banner_distro_name" 13)"
|
||||||
|
if [ "$(hostname)" = 'dom0' ]; then
|
||||||
|
# Qubes dom0
|
||||||
|
banner_distro_space="$(generate_space "$NAME" 13)"
|
||||||
|
printf " \\033[%sm%s %s\\033[0m%s%s\\n" "$banner_distro_color" "" "$NAME" "$banner_distro_space" "$VERSION"
|
||||||
|
else
|
||||||
|
printf " \\033[%sm%s %s\\033[0m%s%s\\n" "$banner_distro_color" "$banner_distro_icon" "$banner_distro_name" "$banner_distro_space" "$banner_distro_version"
|
||||||
|
fi
|
||||||
|
printf " \\033[%sm%s Linux\\033[0m %s\\n" "$BANNER_KERNEL_COLOR" "$BANNER_KERNEL_ICON" "$(cut -d ' ' -f 3 </proc/version)"
|
||||||
|
printf " \\033[%sm%s Uptime\\033[0m %s\\n" "$BANNER_UPTIME_COLOR" "$BANNER_UPTIME_ICON" "$(uptime -p | cut -d ' ' -f 2-)"
|
||||||
|
else
|
||||||
|
if [ -d '/Applications' ] && [ -d '/System' ]; then
|
||||||
|
printf " \\033[%sm%s OS \\033[0m %s\\n" "$UPDATES_ZERO_COLOR" "" "macOS $(sw_vers -productVersion) / Build $(sw_vers -buildVersion)"
|
||||||
|
printf " \\033[%sm%s UUID \\033[0m %s\\n" "$PODMAN_RUNNING_COLOR" "" "$(ioreg -d2 -c IOPlatformExpertDevice | awk -F\" '/IOPlatformUUID/{print $(NF-1)}')"
|
||||||
|
printf " \\033[%sm%s LAN IP \\033[0m %s\\n" "$BANNER_KERNEL_COLOR" "ﯱ" "$(ifconfig en0 2>/dev/null | grep 'inet ' | cut -d ' ' -f 2)"
|
||||||
|
IP_ADDR_PUB="$(timeout 1 sh -c 'curl -sSL ifconfig.me')"
|
||||||
|
if [ -n "$IP_ADDR_PUB" ]; then
|
||||||
|
printf " \\033[%sm%s Public IP\\033[0m %s\\n" "$UPDATES_SECURITY_COLOR" "" "$IP_ADDR_PUB"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
print_processor() {
|
||||||
|
printf "\\n"
|
||||||
|
printf " \\033[1;37mProcessor:\\033[0m\\n"
|
||||||
|
|
||||||
|
processor_loadavg="$(cut -d " " -f 1,2,3 </proc/loadavg)"
|
||||||
|
if [ "$(echo "$processor_loadavg" | cut -d "." -f 1)" -ge "$PROCESSOR_LOADAVG_CRITICAL_THRESHOLD" ]; then
|
||||||
|
processor_loadavg_color="$PROCESSOR_LOADAVG_CRITICAL_COLOR"
|
||||||
|
elif [ "$(echo "$processor_loadavg" | cut -d "." -f 1)" -ge "$PROCESSOR_LOADAVG_WARNING_THRESHOLD" ]; then
|
||||||
|
processor_loadavg_color="$PROCESSOR_LOADAVG_WARNING_COLOR"
|
||||||
|
else
|
||||||
|
processor_loadavg_color="$PROCESSOR_LOADAVG_HEALTHY_COLOR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
processor_info=$(cat /proc/cpuinfo)
|
||||||
|
|
||||||
|
processor_arch=$(uname -m)
|
||||||
|
|
||||||
|
if [ "$processor_arch" = "x86_64" ]; then
|
||||||
|
processor_model="$(echo "$processor_info" | grep "model name" | sort -u | cut -d ':' -f 2)"
|
||||||
|
processor_count=$(echo "$processor_info" | grep "physical id" | sort -u | wc -l)
|
||||||
|
processor_cores=$(echo "$processor_info" | grep "cpu cores" | sort -u | cut -d ':' -f 2)
|
||||||
|
processor_threads=$(($(echo "$processor_info" | grep "siblings" | tail -n 1 | cut -d ':' -f 2)))
|
||||||
|
|
||||||
|
if [ ! "$processor_cores" -eq $processor_threads ]; then
|
||||||
|
processor_threads=", $processor_threads Threads"
|
||||||
|
else
|
||||||
|
processor_threads=""
|
||||||
|
fi
|
||||||
|
elif [ "$processor_arch" = "mips64" ]; then
|
||||||
|
processor_model="$(echo "$processor_info" | grep "cpu model" | sort -u | cut -d ':' -f 2)"
|
||||||
|
processor_count=$(echo "$processor_info" | grep "package" | sort -u | wc -l)
|
||||||
|
processor_cores=$(echo "$processor_info" | grep -c processor)
|
||||||
|
processor_threads=""
|
||||||
|
else
|
||||||
|
processor_model="?"
|
||||||
|
processor_count=0
|
||||||
|
processor_cores=0
|
||||||
|
processor_threads=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
processor_model="${processor_model//\(R\)/}"
|
||||||
|
processor_model="${processor_model//\(tm\)/}"
|
||||||
|
processor_model="${processor_model// @/,}"
|
||||||
|
processor_model="${processor_model// CPU/}"
|
||||||
|
processor_model="${processor_model// / }"
|
||||||
|
# shellcheck disable=SC2001
|
||||||
|
processor_model="$(echo "$processor_model" | sed "s/^ //g")"
|
||||||
|
|
||||||
|
processor_cores=$((processor_cores * processor_count))
|
||||||
|
|
||||||
|
if [ "$processor_count" -gt 1 ]; then
|
||||||
|
processor_count="$processor_count""x "
|
||||||
|
else
|
||||||
|
processor_count=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf " %s \\033[%dm%s\\033[0m\\n" "$PROCESSOR_LOADAVG_ICON" "$processor_loadavg_color" "$processor_loadavg"
|
||||||
|
printf " %s %s%s = %s Cores%s\\n" "$PROCESSOR_MODEL_ICON" "$processor_count" "$processor_model" "$processor_cores" "$processor_threads"
|
||||||
|
}
|
||||||
|
|
||||||
|
print_memory() {
|
||||||
|
printf "\\n"
|
||||||
|
printf " \\033[1;37mMemory:\\033[0m\\n"
|
||||||
|
|
||||||
|
memory_usage=$(LANG=C free --mega | grep "Mem:")
|
||||||
|
memory_total=$(echo "$memory_usage" | awk '{ print $2 }')
|
||||||
|
memory_used=$(echo "$memory_usage" | awk '{ print $3 }')
|
||||||
|
memory_cached=$(echo "$memory_usage" | awk '{ print $6 }')
|
||||||
|
|
||||||
|
generate_bar_memory "$MEMORY_ICON" "$memory_total" "$memory_used" "$memory_cached"
|
||||||
|
}
|
||||||
|
|
||||||
|
print_swap() {
|
||||||
|
swap_usage=$(LANG=C free --mega | grep "Swap:")
|
||||||
|
|
||||||
|
swap_total=$(echo "$swap_usage" | awk '{ print $2 }')
|
||||||
|
swap_used=$(echo "$swap_usage" | awk '{ print $3 }')
|
||||||
|
|
||||||
|
if [ "$swap_total" -ne 0 ]; then
|
||||||
|
printf "\\n"
|
||||||
|
printf " \\033[1;37mSwap:\\033[0m\\n"
|
||||||
|
|
||||||
|
generate_bar_swap "$SWAP_ICON" "$swap_total" "$swap_used"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
print_diskspace() {
|
||||||
|
if command -v jq >/dev/null; then
|
||||||
|
printf "\\n"
|
||||||
|
printf " \\033[1;37mDiskspace:\\033[0m\\n"
|
||||||
|
|
||||||
|
diskspace_devices=$(lsblk -Jlo NAME,MOUNTPOINT | jq -c '.blockdevices | sort_by(.mountpoint) | .[] | select( .mountpoint != null and .mountpoint != "[SWAP]" )')
|
||||||
|
diskspace_partitions=$(df -B M 2> /dev/null | sed -e "s/M//g")
|
||||||
|
|
||||||
|
diskspace_index=0
|
||||||
|
echo "$diskspace_devices" | while read -r line; do
|
||||||
|
diskspace_disk_name="$(echo "$line" | jq -r '.name')"
|
||||||
|
diskspace_disk_mount="$(echo "$line" | jq -r '.mountpoint')"
|
||||||
|
|
||||||
|
diskspace_disk_size="$(echo "$diskspace_partitions" | grep "$diskspace_disk_name " | awk '{ print $2 }')"
|
||||||
|
diskspace_disk_used="$(echo "$diskspace_partitions" | grep "$diskspace_disk_name " | awk '{ print $3 }')"
|
||||||
|
if [[ "$diskspace_disk_mount" != '/var/lib/snapd/snap'* ]] && [[ "$diskspace_disk_mount" != '/snap/'* ]]; then
|
||||||
|
if [ -z "$diskspace_disk_size" ]; then
|
||||||
|
diskspace_disk_size="$(echo "$diskspace_partitions" | grep "$diskspace_disk_mount" | awk '{ print $2 }')"
|
||||||
|
fi
|
||||||
|
if [ -z "$diskspace_disk_used" ]; then
|
||||||
|
diskspace_disk_used="$(echo "$diskspace_partitions" | grep "$diskspace_disk_mount" | awk '{ print $3 }')"
|
||||||
|
fi
|
||||||
|
if [ "$diskspace_index" -ne 0 ]; then
|
||||||
|
printf "\\n"
|
||||||
|
fi
|
||||||
|
diskspace_index=$((diskspace_index + 1))
|
||||||
|
generate_bar_disk "$DISKSPACE_ICON" "$diskspace_disk_size" "$diskspace_disk_used" "$diskspace_disk_mount"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
print_services() {
|
||||||
|
if [ -f $SERVICES_FILE ] && [ "$(wc -l <$SERVICES_FILE)" != 0 ]; then
|
||||||
|
printf "\\n"
|
||||||
|
printf " \\033[1;37mServices:\\033[0m \\033[1;37mVersion:\\033[0m\\n"
|
||||||
|
|
||||||
|
while read -r line; do
|
||||||
|
service_description=$(echo "$line" | cut -d ';' -f 1)
|
||||||
|
|
||||||
|
service_name=$(echo "$line" | cut -d ';' -f 2)
|
||||||
|
|
||||||
|
service_package=$(echo "$line" | cut -d ';' -f 3)
|
||||||
|
|
||||||
|
if [ -n "$service_description" ] && [ -n "$service_name" ]; then
|
||||||
|
if systemctl is-active --quiet "$service_name".service; then
|
||||||
|
service_icon="$SERVICES_UP_ICON"
|
||||||
|
service_color="$SERVICES_UP_COLOR"
|
||||||
|
else
|
||||||
|
service_icon="$SERVICES_DOWN_ICON"
|
||||||
|
service_color="$SERVICES_DOWN_COLOR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
service_space=$(generate_space "$service_description" 34)
|
||||||
|
|
||||||
|
if [ -n "$service_package" ]; then
|
||||||
|
if [ -f /usr/bin/apt ]; then
|
||||||
|
package_version=$(dpkg -s "$service_package" | grep '^Version:' | cut -d ' ' -f 2 | cut -d ':' -f 2 | cut -d '-' -f 1)
|
||||||
|
elif [ -f /usr/bin/rpm ]; then
|
||||||
|
package_version=$(rpm -q --queryformat '%{VERSION}' "$service_package")
|
||||||
|
else
|
||||||
|
package_version="?"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
package_version="--"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf " \\033[%sm%s\\033[0m %s%s%s\\n" "$service_color" "$service_icon" "$service_description" "$service_space" "$package_version"
|
||||||
|
done <"$SERVICES_FILE" | grep -v '#'
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
print_podman() {
|
||||||
|
if command -v jq >/dev/null; then
|
||||||
|
printf "\\n"
|
||||||
|
printf " \\033[1;37mPodman:\\033[0m\\n"
|
||||||
|
|
||||||
|
podman_version="$(sudo podman version --format json | jq -r '.Client.Version')"
|
||||||
|
podman_space="$(generate_space "$podman_version" 23)"
|
||||||
|
podman_images="$(sudo podman images --format json | jq '. | length')"
|
||||||
|
|
||||||
|
printf " %s Version %s%s%s %s Images\\n\\n" "$PODMAN_VERSION_ICON" "$podman_version" "$podman_space" "$PODMAN_IMAGES_ICON" "$podman_images"
|
||||||
|
|
||||||
|
podman_list=$(sudo podman pod ls --sort name --format json)
|
||||||
|
podman_pods=$(echo "$podman_list" | jq -r '.[] .Name')
|
||||||
|
|
||||||
|
echo "$podman_pods" | while read -r pod; do
|
||||||
|
if [ "$(echo "$podman_list" | jq -r ".[] | select(.Name == \"$pod\") | .Status")" = "Running" ]; then
|
||||||
|
pod_space=$(generate_space "$pod" 34)
|
||||||
|
|
||||||
|
pod_container_running="$(echo "$podman_list" | jq -r ".[] | select(.Name == \"$pod\") | .Containers[] | select(.Status == \"running\") | .Status" | wc -l)"
|
||||||
|
|
||||||
|
if [ "$pod_container_running" -ne 0 ]; then
|
||||||
|
pod_container_running=$(printf "\\033[%um%u Running\\033[0m" "$PODMAN_RUNNING_COLOR" "$pod_container_running")
|
||||||
|
fi
|
||||||
|
|
||||||
|
pod_container_other="$(echo "$podman_list" | jq -r ".[] | select(.Name == \"$pod\") | .Containers[] | select(.Status != \"running\") | .Status" | wc -l)"
|
||||||
|
|
||||||
|
if [ "$pod_container_other" -ne 0 ]; then
|
||||||
|
pod_container_other=$(printf ", \\033[%um%u Other\\033[0m" "$PODMAN_OTHER_COLOR" "$pod_container_other")
|
||||||
|
else
|
||||||
|
pod_container_other=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
pod_status="$pod_container_running$pod_container_other"
|
||||||
|
|
||||||
|
printf " \\033[%um%s\\033[0m %s%s%s\\n" "$PODMAN_RUNNING_COLOR" "$PODMAN_RUNNING_ICON" "$pod" "$pod_space" "$pod_status"
|
||||||
|
else
|
||||||
|
printf " \\033[%um%s\\033[0m \\033[%um%s\\033[0m\\n" "$PODMAN_OTHER_COLOR" "$PODMAN_OTHER_ICON" "$PODMAN_OTHER_COLOR" "$pod"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
print_docker() {
|
||||||
|
if command -v jq >/dev/null && [ "$(systemctl is-active docker.service)" = "active" ]; then
|
||||||
|
printf "\\n"
|
||||||
|
printf " \\033[1;37mDocker:\\033[0m\\n"
|
||||||
|
|
||||||
|
docker_info=$(sudo curl -sf --unix-socket /var/run/docker.sock http:/v1.40/info)
|
||||||
|
|
||||||
|
docker_version=$(echo "$docker_info" | jq -r '.ServerVersion')
|
||||||
|
|
||||||
|
docker_space=$(generate_space "$docker_version" 23)
|
||||||
|
|
||||||
|
docker_images=$(echo "$docker_info" | jq -r '.Images')
|
||||||
|
|
||||||
|
printf " %s Version %s%s%s %s Images\\n" "$DOCKER_VERSION_ICON" "$docker_version" "$docker_space" "$DOCKER_IMAGES_ICON" "$docker_images"
|
||||||
|
|
||||||
|
docker_list_curl="$(sudo curl -sf --unix-socket /var/run/docker.sock "http://v1.40/containers/json?all=true")"
|
||||||
|
docker_list_curl_length="$(echo "$docker_list_curl" | jq -c '. | length')"
|
||||||
|
docker_list="$(echo "$docker_list_curl" | jq -c ' .[]')"
|
||||||
|
|
||||||
|
if [ "$docker_list_curl_length" != '0' ]; then
|
||||||
|
echo "$docker_list" | while read -r line; do
|
||||||
|
container_name="$(echo "$line" | jq -r '.Names[]' | sed 's/\///')"
|
||||||
|
container_status="$(echo "$line" | jq -r '.Status' | sed 's/.*/\l&/')"
|
||||||
|
container_space=$(generate_space "$container_name" 34)
|
||||||
|
if [ "$(echo "$line" | jq -r '.State')" = "running" ]; then
|
||||||
|
printf " \\033[%um%s\\033[0m %s%s%s\\n" "$DOCKER_RUNNING_COLOR" "$DOCKER_RUNNING_ICON" "$container_name" "$container_space" "$container_status"
|
||||||
|
else
|
||||||
|
printf " \\033[%um%s\\033[0m \\033[%um%s\\033[0m%s\\033[%um%s\\033[0m\\n" "$DOCKER_OTHER_COLOR" "$DOCKER_OTHER_ICON" "$DOCKER_OTHER_COLOR" "$container_name" "$container_space" "$DOCKER_OTHER_COLOR" "$container_status"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
print_updates() {
|
||||||
|
printf "\\n"
|
||||||
|
printf " \\033[1;37mHealth:\\033[0m\\n"
|
||||||
|
if [ -f /usr/bin/apt ]; then
|
||||||
|
updates_count_regular=$(apt-get -qq -y --ignore-hold --allow-change-held-packages --allow-unauthenticated -s dist-upgrade | grep ^Inst | grep -c -v Security)
|
||||||
|
updates_count_security=$(apt-get -qq -y --ignore-hold --allow-change-held-packages --allow-unauthenticated -s dist-upgrade | grep ^Inst | grep -c Security)
|
||||||
|
|
||||||
|
if [ "$updates_count_regular" -ne 0 ]; then
|
||||||
|
if [ -n "$updates_count_security" ] && [ "$updates_count_security" -ne 0 ]; then
|
||||||
|
updates_icon=$UPDATES_SECURITY_ICON
|
||||||
|
updates_color=$UPDATES_SECURITY_COLOR
|
||||||
|
updates_message="$updates_count_regular packages can be updated, $updates_count_security are security updates."
|
||||||
|
else
|
||||||
|
updates_icon=$UPDATES_AVAILIABLE_ICON
|
||||||
|
updates_color=$UPDATES_AVAILIABLE_COLOR
|
||||||
|
updates_message="$updates_count_regular packages can be updated."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
updates_icon=$UPDATES_ZERO_ICON
|
||||||
|
updates_color=$UPDATES_ZERO_COLOR
|
||||||
|
updates_message="The system apt packages are up-to-date!"
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf " \\033[%sm%s \\033[0m %s\\n" "$updates_color" "$updates_icon" "$updates_message"
|
||||||
|
elif [ -f /usr/bin/dnfTODO ]; then
|
||||||
|
# TODO - Find way of quickly acquiring details
|
||||||
|
mkdir -p "$HOME/.local/labs" > /dev/null
|
||||||
|
(command dnf list updates | grep updates | wc -l > "$HOME/.local/labs/dnf-updates-reg" &)
|
||||||
|
(command dnf updateinfo list --security --available | grep '/Sec. ' | wc -l > "$HOME/.local/labs/dnf-updates-sec" &)
|
||||||
|
updates_count_security="0"
|
||||||
|
updates_count_reg="0"
|
||||||
|
if [ -f "$HOME/.local/labs/dnf-updates-sec" ]; then
|
||||||
|
updates_count_security="$(cat "$HOME/.local/labs/dnf-updates-sec")"
|
||||||
|
fi
|
||||||
|
if [ -f "$HOME/.local/labs/dnf-updates-reg" ]; then
|
||||||
|
updates_count_reg="$(cat "$HOME/.local/labs/dnf-updates-reg")"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$updates_count_regular" ] && [ "$updates_count_regular" -ne 0 ]; then
|
||||||
|
if [ -n "$updates_count_security" ] && [ "$updates_count_security" -ne 0 ]; then
|
||||||
|
updates_icon=$UPDATES_SECURITY_ICON
|
||||||
|
updates_color=$UPDATES_SECURITY_COLOR
|
||||||
|
updates_message="$(generate_space "$updates_count_regular" 5) packages can be updated, $updates_count_security are security updates."
|
||||||
|
else
|
||||||
|
updates_icon=$UPDATES_AVAILIABLE_ICON
|
||||||
|
updates_color=$UPDATES_AVAILIABLE_COLOR
|
||||||
|
updates_message="$(generate_space "$bar_disk_used" 5) packages can be updated."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
updates_icon=$UPDATES_ZERO_ICON
|
||||||
|
updates_color=$UPDATES_ZERO_COLOR
|
||||||
|
updates_message="The system dnf packages are up-to-date!"
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf " \\033[%sm%s \\033[0m %s\\n" "$updates_color" "$updates_icon" "$updates_message"
|
||||||
|
fi
|
||||||
|
if command -v systemctl > /dev/null; then
|
||||||
|
running_services_count="$(systemctl --type=service --plain | grep 'active running' | wc -l)"
|
||||||
|
failed_services_count="$(systemctl --type=service --failed | grep 'failed failed' | wc -l)"
|
||||||
|
|
||||||
|
if [ "$failed_services_count" -eq 0 ]; then
|
||||||
|
printf " \\033[%sm%s \\033[0m All enabled services are running!\\n" "32" ""
|
||||||
|
elif [ "$failed_services_count" -eq 1 ]; then
|
||||||
|
printf " \\033[%sm%s \\033[0m %s services are are currently running\\n" "32" "" "$running_services_count"
|
||||||
|
printf " \\033[%sm%s \\033[0m 1 service failed to start (%s)\\n" "31" "" "$(systemctl --type=service --failed | grep 'failed failed' | sed 's/..\([^ ]*\).service.*/\1/')"
|
||||||
|
elif [ "$failed_services_count" -gt 1 ]; then
|
||||||
|
printf " \\033[%sm%s \\033[0m %s services are are currently running\\n" "32" "" "$running_services_count"
|
||||||
|
printf " \\033[%sm%s \\033[0m %s services failed to start (see \`systemctl --type=service\`)\\n" "31" "" "$failed_services_count"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
print_letsencrypt() {
|
||||||
|
if [ -d $LETSENCRYPT_CERTPATH ] && [ "$(ls -a $LETSENCRYPT_CERTPATH)" ]; then
|
||||||
|
printf "\\n"
|
||||||
|
printf " \\033[1;37mSSL / let’s encrypt:\\033[0m\\n"
|
||||||
|
|
||||||
|
cert_list=$(sudo find $LETSENCRYPT_CERTPATH -name cert.pem)
|
||||||
|
|
||||||
|
for cert_file in $cert_list; do
|
||||||
|
sudo openssl x509 -checkend $((25 * 86400)) -noout -in "$cert_file" >>/dev/null
|
||||||
|
result=$?
|
||||||
|
|
||||||
|
cert_name=$(echo "$cert_file" | rev | cut -d '/' -f 2 | rev)
|
||||||
|
|
||||||
|
if [ "$result" -eq 0 ]; then
|
||||||
|
printf " \\033[%sm%s\\033[0m %s\\n" "$LETSENCRYPT_VALID_COLOR" "$LETSENCRYPT_VALID_ICON" "$cert_name"
|
||||||
|
else
|
||||||
|
sudo openssl x509 -checkend $((0 * 86400)) -noout -in "$cert_file" >>/dev/null
|
||||||
|
result=$?
|
||||||
|
|
||||||
|
if [ "$result" -eq 0 ]; then
|
||||||
|
printf " \\033[%sm%s\\033[0m %s\\n" "$LETSENCRYPT_WARNING_COLOR" "$LETSENCRYPT_WARNING_ICON" "$cert_name"
|
||||||
|
else
|
||||||
|
printf " \\033[%sm%s\\033[0m %s\\n" "$LETSENCRYPT_INVALID_COLOR" "$LETSENCRYPT_INVALID_ICON" "$cert_name"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
print_login() {
|
||||||
|
login_last="$(last -n 2 -a -d --time-format iso "$(whoami)" | head -n 2 | tail -n 1)"
|
||||||
|
|
||||||
|
if [ "$(echo "$login_last" | awk '{ print $1 }')" = "$(whoami)" ]; then
|
||||||
|
login_ip="$(echo "$login_last" | awk '{ print $7 }')"
|
||||||
|
|
||||||
|
login_login="$(date -d "$(echo "$login_last" | awk '{ print $3 }' | cut -d '+' -f 1 | sed "s/T/ /")" "+%a, %d.%m.%y %H:%M")"
|
||||||
|
|
||||||
|
login_space=$(generate_space "$login_login" 25)
|
||||||
|
|
||||||
|
if [ "$(echo "$login_last" | awk '{ print $4 }')" = "still" ]; then
|
||||||
|
login_logout="still connected"
|
||||||
|
else
|
||||||
|
login_logout="$(date -d "$(echo "$login_last" | awk '{ print $5 }' | cut -d '+' -f 1 | sed "s/T/ /")" "+%a, %d.%m.%y %H:%M")"
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "\\n"
|
||||||
|
printf " \\033[1;37mLast login for %s:\\033[0m\\n" "$(echo "$login_last" | awk '{ print $1 }')"
|
||||||
|
printf " %s %s%s%s %s\\n" "$LOGIN_LOGIN_ICON" "$login_login" "$login_space" "$LOGIN_LOGOUT_ICON" "$login_logout"
|
||||||
|
printf " %s %s\\n" "$LOGIN_IP_ICON" "$login_ip"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
print_include() {
|
||||||
|
. $INCLUDE_FILE
|
||||||
|
}
|
||||||
|
|
||||||
|
bash_motd() {
|
||||||
|
for module in "$@"; do
|
||||||
|
if [ "$module" = "--banner" ]; then
|
||||||
|
print_banner
|
||||||
|
elif [ "$module" = "--processor" ]; then
|
||||||
|
print_processor
|
||||||
|
elif [ "$module" = "--memory" ]; then
|
||||||
|
print_memory
|
||||||
|
elif [ "$module" = "--swap" ]; then
|
||||||
|
print_swap
|
||||||
|
elif [ "$module" = "--diskspace" ]; then
|
||||||
|
print_diskspace
|
||||||
|
elif [ "$module" = "--services" ]; then
|
||||||
|
print_services
|
||||||
|
elif [ "$module" = "--podman" ]; then
|
||||||
|
print_podman
|
||||||
|
elif [ "$module" = "--docker" ]; then
|
||||||
|
print_docker
|
||||||
|
elif [ "$module" = "--updates" ]; then
|
||||||
|
print_updates
|
||||||
|
elif [ "$module" = "--letsencrypt" ]; then
|
||||||
|
print_letsencrypt
|
||||||
|
elif [ "$module" = "--login" ]; then
|
||||||
|
print_login
|
||||||
|
elif [ "$module" = "--include" ]; then
|
||||||
|
print_include
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
printf "\\n"
|
||||||
|
}
|
1641
.local/scripts/p10k.zsh
Normal file
1641
.local/scripts/p10k.zsh
Normal file
File diff suppressed because it is too large
Load diff
9
.local/share/git-core/templates/hooks/post-commit
Normal file
9
.local/share/git-core/templates/hooks/post-commit
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
#!/bin/sh
|
||||||
|
### git-stats hook (begin) ###
|
||||||
|
# Copy last commit hash to clipboard on commit
|
||||||
|
commit_hash=$(git rev-parse HEAD)
|
||||||
|
repo_url=$(git config --get remote.origin.url)
|
||||||
|
commit_date=$(git log -1 --format=%cd)
|
||||||
|
commit_data="\"{ \"date\": \"$commit_date\", \"url\": \"$repo_url\", \"hash\": \"$commit_hash\" }\""
|
||||||
|
git-stats --record "${commit_data}"
|
||||||
|
### git-stats hook (end) ###
|
|
@ -7,4 +7,3 @@ poetry system
|
||||||
python system
|
python system
|
||||||
ruby 3.1.1
|
ruby 3.1.1
|
||||||
rust system
|
rust system
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if &background == 'dark'
|
if &background == 'dark'
|
||||||
|
|
||||||
let s:guishade0 = "#161925"
|
let s:guishade0 = "#161925"
|
||||||
let s:guishade1 = "#2f323e"
|
let s:guishade1 = "#2f323e"
|
||||||
let s:guishade2 = "#474b56"
|
let s:guishade2 = "#474b56"
|
||||||
|
@ -35,13 +35,13 @@
|
||||||
let s:ctermaccent5 = 117
|
let s:ctermaccent5 = 117
|
||||||
let s:ctermaccent6 = 188
|
let s:ctermaccent6 = 188
|
||||||
let s:ctermaccent7 = 175
|
let s:ctermaccent7 = 175
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if &background == 'light'
|
if &background == 'light'
|
||||||
|
|
||||||
let s:guishade0 = "#ffffff"
|
let s:guishade0 = "#ffffff"
|
||||||
let s:guishade1 = "#e5e6e7"
|
let s:guishade1 = "#e5e6e7"
|
||||||
let s:guishade2 = "#cccdcf"
|
let s:guishade2 = "#cccdcf"
|
||||||
|
@ -74,9 +74,9 @@
|
||||||
let s:ctermaccent5 = 153
|
let s:ctermaccent5 = 153
|
||||||
let s:ctermaccent6 = 239
|
let s:ctermaccent6 = 239
|
||||||
let s:ctermaccent7 = 211
|
let s:ctermaccent7 = 211
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
highlight clear
|
highlight clear
|
||||||
syntax reset
|
syntax reset
|
||||||
|
@ -255,4 +255,4 @@
|
||||||
""""""""""""
|
""""""""""""
|
||||||
|
|
||||||
unlet s:guishade0 s:guishade1 s:guishade2 s:guishade3 s:guishade4 s:guishade5 s:guishade6 s:guishade7 s:guiaccent0 s:guiaccent1 s:guiaccent2 s:guiaccent3 s:guiaccent4 s:guiaccent5 s:guiaccent6 s:guiaccent7
|
unlet s:guishade0 s:guishade1 s:guishade2 s:guishade3 s:guishade4 s:guishade5 s:guishade6 s:guishade7 s:guiaccent0 s:guiaccent1 s:guiaccent2 s:guiaccent3 s:guiaccent4 s:guiaccent5 s:guiaccent6 s:guiaccent7
|
||||||
unlet s:ctermshade0 s:ctermshade1 s:ctermshade2 s:ctermshade3 s:ctermshade4 s:ctermshade5 s:ctermshade6 s:ctermshade7 s:ctermaccent0 s:ctermaccent1 s:ctermaccent2 s:ctermaccent3 s:ctermaccent4 s:ctermaccent5 s:ctermaccent6 s:ctermaccent7
|
unlet s:ctermshade0 s:ctermshade1 s:ctermshade2 s:ctermshade3 s:ctermshade4 s:ctermshade5 s:ctermshade6 s:ctermshade7 s:ctermaccent0 s:ctermaccent1 s:ctermaccent2 s:ctermaccent3 s:ctermaccent4 s:ctermaccent5 s:ctermaccent6 s:ctermaccent7
|
||||||
|
|
54
.vim/vimrc
Normal file
54
.vim/vimrc
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
silent! call plug#begin()
|
||||||
|
Plug '~/.vim/plugged/typescript-vim'
|
||||||
|
Plug '~/.vim/plugged/vim-airline'
|
||||||
|
Plug '~/.vim/plugged/lightline.vim'
|
||||||
|
Plug '~/.vim/plugged/vim-javascript'
|
||||||
|
Plug '~/.vim/plugged/vim-jsx'
|
||||||
|
Plug '~/.vim/plugged/vim-markdown'
|
||||||
|
Plug '~/.vim/plugged/dockerfile.vim'
|
||||||
|
Plug '~/.vim/plugged/php.vim'
|
||||||
|
Plug '~/.vim/plugged/python-syntax'
|
||||||
|
Plug '~/.vim/plugged/nerdtree'
|
||||||
|
Plug '~/.vim/plugged/vim-five'
|
||||||
|
Plug '~/.vim/plugged/vim-prettier'
|
||||||
|
Plug '~/.vim/plugged/vim-sensible'
|
||||||
|
Plug '~/.vim/plugged/editorconfig-vim'
|
||||||
|
Plug '~/.vim/plugged/vimgutter'
|
||||||
|
Plug '~/.vim/plugged/vim-surround'
|
||||||
|
Plug '~/.vim/plugged/vim-carbon-now-sh'
|
||||||
|
Plug '~/.vim/plugged/vim-multiple-cursors'
|
||||||
|
Plug '~/.vim/plugged/ale'
|
||||||
|
Plug '~/.vim/plugged/fzf'
|
||||||
|
Plug '~/.vim/plugged/fzf.vim'
|
||||||
|
if executable('node')
|
||||||
|
Plug '~/.vim/plugged/coc.nvim'
|
||||||
|
endif
|
||||||
|
Plug '~/.vim/plugged/syntastic'
|
||||||
|
Plug '~/.vim/plugged/vim-devicons'
|
||||||
|
Plug '~/.vim/plugged/zoxide.vim'
|
||||||
|
Plug '~/.vim/plugged/vim-go'
|
||||||
|
Plug '~/.vim/plugged/ansible-vim', {'do': './UltiSnips/generate.sh'}
|
||||||
|
call plug#end()
|
||||||
|
|
||||||
|
syntax enable
|
||||||
|
set background=dark
|
||||||
|
colorscheme Betelgeuse
|
||||||
|
" set g:lightline = { 'colorscheme': 'Betelgeuse' }
|
||||||
|
|
||||||
|
" Settings for plugin https://github.com/neoclide/coc.nvim.git
|
||||||
|
autocmd FileType json syntax match Comment +\/\/.\+$+
|
||||||
|
|
||||||
|
" Settings for plugin https://github.com/vim-syntastic/syntastic.git
|
||||||
|
set statusline+=%#warningmsg#
|
||||||
|
set statusline+=%{SyntasticStatuslineFlag()}
|
||||||
|
set statusline+=%*
|
||||||
|
let g:syntastic_always_populate_loc_list = 1
|
||||||
|
let g:syntastic_auto_loc_list = 1
|
||||||
|
let g:syntastic_check_on_open = 1
|
||||||
|
let g:syntastic_check_on_wq = 0
|
||||||
|
|
||||||
|
" Settings for plugin https://github.com/ryanoasis/vim-devicons.git
|
||||||
|
set encoding=UTF-8
|
||||||
|
|
||||||
|
" Automatically apply with Chezmoi anytime a source file is modified
|
||||||
|
autocmd BufWritePost ~/.local/share/chezmoi/* ! chezmoi apply --source-path "%"
|
1
AppData/Local/clink/oh-my-posh.lua
Normal file
1
AppData/Local/clink/oh-my-posh.lua
Normal file
|
@ -0,0 +1 @@
|
||||||
|
load(io.popen('oh-my-posh init cmd'):read("*a"))()
|
36
Library/Application Support/tabby/plugins/package-lock.json
generated
Normal file
36
Library/Application Support/tabby/plugins/package-lock.json
generated
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
{
|
||||||
|
"requires": true,
|
||||||
|
"lockfileVersion": 1,
|
||||||
|
"dependencies": {
|
||||||
|
"crypto-js": {
|
||||||
|
"version": "4.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz",
|
||||||
|
"integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw=="
|
||||||
|
},
|
||||||
|
"tabby-docker": {
|
||||||
|
"version": "0.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/tabby-docker/-/tabby-docker-0.2.0.tgz",
|
||||||
|
"integrity": "sha512-kEDZI33Xt7NnncPDhhbqREP809YevCnoVRYhzACvAkteODWorABCoKEuOrfi2I3DDwCHcMk0+fM0nCWy5C/JVg=="
|
||||||
|
},
|
||||||
|
"tabby-save-output": {
|
||||||
|
"version": "3.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/tabby-save-output/-/tabby-save-output-3.1.0.tgz",
|
||||||
|
"integrity": "sha512-4mGxpYSaeBzU8TkOrZudPmT3/YkT9fGXCesBp2XO9iql+2EELzkPLJUntlGYSBH0RQVRDYnl+IF8F65WPaaSxQ=="
|
||||||
|
},
|
||||||
|
"tabby-search-in-browser": {
|
||||||
|
"version": "0.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/tabby-search-in-browser/-/tabby-search-in-browser-0.0.1.tgz",
|
||||||
|
"integrity": "sha512-jb5UINTXBN6UR0xi+LWs7KdnE5qRV++ogy9lmkIJ9dDbBbVe7d6HKxneZcQVjQLjG+UYJNl/nElh8DPzFPMTSg=="
|
||||||
|
},
|
||||||
|
"tabby-workspace-manager": {
|
||||||
|
"version": "0.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/tabby-workspace-manager/-/tabby-workspace-manager-0.0.4.tgz",
|
||||||
|
"integrity": "sha512-O3etFcZxw68ZieS1q8VM01IW0M+rMyyBJpghYhz7WtNyckxfO/ir4AuXfb/kFz9ozOmI33/ff3UMY8yJjIJ6qw=="
|
||||||
|
},
|
||||||
|
"terminus-elastic-quick-cmds": {
|
||||||
|
"version": "1.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/terminus-elastic-quick-cmds/-/terminus-elastic-quick-cmds-1.1.1.tgz",
|
||||||
|
"integrity": "sha512-PDWQ5MKs8UuPE1O/Nk63RSz661big/uuWWaRIZFSYfdqvrUWK186xNcUFioBWOnyNVvdLI4H+mxektmW2TnHrA=="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,83 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>DVTConsoleDebuggerInputTextColor</key>
|
||||||
|
<string>0.764706 0.780392 0.819608 1</string>
|
||||||
|
<key>DVTConsoleDebuggerOutputTextColor</key>
|
||||||
|
<string>0.572549 0.584314 0.627451 1</string>
|
||||||
|
<key>DVTConsoleDebuggerPromptTextColor</key>
|
||||||
|
<string>0.862745 0.87451 0.894118 1</string>
|
||||||
|
<key>DVTConsoleExectuableInputTextColor</key>
|
||||||
|
<string>0.572549 0.584314 0.627451 1</string>
|
||||||
|
<key>DVTConsoleExectuableOutputTextColor</key>
|
||||||
|
<string>0.764706 0.780392 0.819608 1</string>
|
||||||
|
<key>DVTConsoleTextBackgroundColor</key>
|
||||||
|
<string>0.086275 0.098039 0.145098 1</string>
|
||||||
|
<key>DVTConsoleTextInsertionPointColor</key>
|
||||||
|
<string>0.764706 0.780392 0.819608 1</string>
|
||||||
|
<key>DVTConsoleTextSelectionColor</key>
|
||||||
|
<string>0.184314 0.196078 0.243137 1</string>
|
||||||
|
<key>DVTDebuggerInstructionPointerColor</key>
|
||||||
|
<string>0.443137 0.968627 0.623529 1</string>
|
||||||
|
<key>DVTSourceTextBackground</key>
|
||||||
|
<string>0.086275 0.098039 0.145098 1</string>
|
||||||
|
<key>DVTSourceTextBlockDimBackgroundColor</key>
|
||||||
|
<string>0.47451 0.486275 0.529412 1</string>
|
||||||
|
<key>DVTSourceTextInsertionPointColor</key>
|
||||||
|
<string>0.764706 0.780392 0.819608 1</string>
|
||||||
|
<key>DVTSourceTextInvisiblesColor</key>
|
||||||
|
<string>0.184314 0.196078 0.243137 1</string>
|
||||||
|
<key>DVTSourceTextSelectionColor</key>
|
||||||
|
<string>0.184314 0.196078 0.243137 1</string>
|
||||||
|
<key>DVTSourceTextSyntaxColors</key>
|
||||||
|
<dict>
|
||||||
|
<key>xcode.syntax.attribute</key>
|
||||||
|
<string>0.443137 0.968627 0.623529 1</string>
|
||||||
|
<key>xcode.syntax.character</key>
|
||||||
|
<string>0 0.756863 0.894118 1</string>
|
||||||
|
<key>xcode.syntax.comment</key>
|
||||||
|
<string>0.278431 0.294118 0.337255 1</string>
|
||||||
|
<key>xcode.syntax.comment.doc</key>
|
||||||
|
<string>0.376471 0.392157 0.435294 1</string>
|
||||||
|
<key>xcode.syntax.comment.doc.keyword</key>
|
||||||
|
<string>0.47451 0.486275 0.529412 1</string>
|
||||||
|
<key>xcode.syntax.identifier.class</key>
|
||||||
|
<string>0.976471 0.862745 0.360784 1</string>
|
||||||
|
<key>xcode.syntax.identifier.class.system</key>
|
||||||
|
<string>0.976471 0.862745 0.360784 1</string>
|
||||||
|
<key>xcode.syntax.identifier.constant</key>
|
||||||
|
<string>0.443137 0.968627 0.623529 1</string>
|
||||||
|
<key>xcode.syntax.identifier.constant.system</key>
|
||||||
|
<string>0.443137 0.968627 0.623529 1</string>
|
||||||
|
<key>xcode.syntax.identifier.function</key>
|
||||||
|
<string>0 0.756863 0.894118 1</string>
|
||||||
|
<key>xcode.syntax.identifier.function.system</key>
|
||||||
|
<string>0 0.756863 0.894118 1</string>
|
||||||
|
<key>xcode.syntax.identifier.macro</key>
|
||||||
|
<string>0.780392 0.301961 0.537255 1</string>
|
||||||
|
<key>xcode.syntax.identifier.macro.system</key>
|
||||||
|
<string>0.780392 0.301961 0.537255 1</string>
|
||||||
|
<key>xcode.syntax.identifier.type</key>
|
||||||
|
<string>0.929412 0.145098 0.305882 1</string>
|
||||||
|
<key>xcode.syntax.identifier.type.system</key>
|
||||||
|
<string>0.862745 0.87451 0.894118 1</string>
|
||||||
|
<key>xcode.syntax.identifier.variable</key>
|
||||||
|
<string>0.764706 0.780392 0.819608 1</string>
|
||||||
|
<key>xcode.syntax.identifier.variable.system</key>
|
||||||
|
<string>0.764706 0.780392 0.819608 1</string>
|
||||||
|
<key>xcode.syntax.keyword</key>
|
||||||
|
<string>0.486275 0.717647 1 1</string>
|
||||||
|
<key>xcode.syntax.number</key>
|
||||||
|
<string>0.443137 0.968627 0.623529 1</string>
|
||||||
|
<key>xcode.syntax.plain</key>
|
||||||
|
<string>0.666667 0.682353 0.721569 1</string>
|
||||||
|
<key>xcode.syntax.preprocessor</key>
|
||||||
|
<string>0.764706 0.780392 0.819608 1</string>
|
||||||
|
<key>xcode.syntax.string</key>
|
||||||
|
<string>0.443137 0.968627 0.623529 1</string>
|
||||||
|
<key>xcode.syntax.url</key>
|
||||||
|
<string>0.486275 0.717647 1 1</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
|
@ -0,0 +1,83 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>DVTConsoleDebuggerInputTextColor</key>
|
||||||
|
<string>0.298039 0.313725 0.345098 1</string>
|
||||||
|
<key>DVTConsoleDebuggerOutputTextColor</key>
|
||||||
|
<string>0.498039 0.509804 0.533333 1</string>
|
||||||
|
<key>DVTConsoleDebuggerPromptTextColor</key>
|
||||||
|
<string>0.862745 0.87451 0.894118 1</string>
|
||||||
|
<key>DVTConsoleExectuableInputTextColor</key>
|
||||||
|
<string>0.498039 0.509804 0.533333 1</string>
|
||||||
|
<key>DVTConsoleExectuableOutputTextColor</key>
|
||||||
|
<string>0.298039 0.313725 0.345098 1</string>
|
||||||
|
<key>DVTConsoleTextBackgroundColor</key>
|
||||||
|
<string>1 1 1 1</string>
|
||||||
|
<key>DVTConsoleTextInsertionPointColor</key>
|
||||||
|
<string>0.298039 0.313725 0.345098 1</string>
|
||||||
|
<key>DVTConsoleTextSelectionColor</key>
|
||||||
|
<string>0.898039 0.901961 0.905882 1</string>
|
||||||
|
<key>DVTDebuggerInstructionPointerColor</key>
|
||||||
|
<string>0.584314 1 0.764706 1</string>
|
||||||
|
<key>DVTSourceTextBackground</key>
|
||||||
|
<string>1 1 1 1</string>
|
||||||
|
<key>DVTSourceTextBlockDimBackgroundColor</key>
|
||||||
|
<string>0.6 0.607843 0.627451 1</string>
|
||||||
|
<key>DVTSourceTextInsertionPointColor</key>
|
||||||
|
<string>0.298039 0.313725 0.345098 1</string>
|
||||||
|
<key>DVTSourceTextInvisiblesColor</key>
|
||||||
|
<string>0.898039 0.901961 0.905882 1</string>
|
||||||
|
<key>DVTSourceTextSelectionColor</key>
|
||||||
|
<string>0.898039 0.901961 0.905882 1</string>
|
||||||
|
<key>DVTSourceTextSyntaxColors</key>
|
||||||
|
<dict>
|
||||||
|
<key>xcode.syntax.attribute</key>
|
||||||
|
<string>0.584314 1 0.764706 1</string>
|
||||||
|
<key>xcode.syntax.character</key>
|
||||||
|
<string>0.141176 0.898039 1 1</string>
|
||||||
|
<key>xcode.syntax.comment</key>
|
||||||
|
<string>0.8 0.803922 0.811765 1</string>
|
||||||
|
<key>xcode.syntax.comment.doc</key>
|
||||||
|
<string>0.698039 0.705882 0.717647 1</string>
|
||||||
|
<key>xcode.syntax.comment.doc.keyword</key>
|
||||||
|
<string>0.6 0.607843 0.627451 1</string>
|
||||||
|
<key>xcode.syntax.identifier.class</key>
|
||||||
|
<string>1 1 0.501961 1</string>
|
||||||
|
<key>xcode.syntax.identifier.class.system</key>
|
||||||
|
<string>1 1 0.501961 1</string>
|
||||||
|
<key>xcode.syntax.identifier.constant</key>
|
||||||
|
<string>0.584314 1 0.764706 1</string>
|
||||||
|
<key>xcode.syntax.identifier.constant.system</key>
|
||||||
|
<string>0.584314 1 0.764706 1</string>
|
||||||
|
<key>xcode.syntax.identifier.function</key>
|
||||||
|
<string>0.141176 0.898039 1 1</string>
|
||||||
|
<key>xcode.syntax.identifier.function.system</key>
|
||||||
|
<string>0.141176 0.898039 1 1</string>
|
||||||
|
<key>xcode.syntax.identifier.macro</key>
|
||||||
|
<string>0.921569 0.443137 0.678431 1</string>
|
||||||
|
<key>xcode.syntax.identifier.macro.system</key>
|
||||||
|
<string>0.921569 0.443137 0.678431 1</string>
|
||||||
|
<key>xcode.syntax.identifier.type</key>
|
||||||
|
<string>1 0.286275 0.447059 1</string>
|
||||||
|
<key>xcode.syntax.identifier.type.system</key>
|
||||||
|
<string>0.862745 0.87451 0.894118 1</string>
|
||||||
|
<key>xcode.syntax.identifier.variable</key>
|
||||||
|
<string>0.298039 0.313725 0.345098 1</string>
|
||||||
|
<key>xcode.syntax.identifier.variable.system</key>
|
||||||
|
<string>0.298039 0.313725 0.345098 1</string>
|
||||||
|
<key>xcode.syntax.keyword</key>
|
||||||
|
<string>0.627451 0.858824 1 1</string>
|
||||||
|
<key>xcode.syntax.number</key>
|
||||||
|
<string>0.584314 1 0.764706 1</string>
|
||||||
|
<key>xcode.syntax.plain</key>
|
||||||
|
<string>0.4 0.411765 0.439216 1</string>
|
||||||
|
<key>xcode.syntax.preprocessor</key>
|
||||||
|
<string>0.298039 0.313725 0.345098 1</string>
|
||||||
|
<key>xcode.syntax.string</key>
|
||||||
|
<string>0.584314 1 0.764706 1</string>
|
||||||
|
<key>xcode.syntax.url</key>
|
||||||
|
<string>0.627451 0.858824 1 1</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
328
Library/Preferences/com.apple.Terminal.plist
Normal file
328
Library/Preferences/com.apple.Terminal.plist
Normal file
|
@ -0,0 +1,328 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>Default Window Settings</key>
|
||||||
|
<string>Betelgeuse</string>
|
||||||
|
<key>DefaultProfilesVersion</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>HasMigratedDefaults</key>
|
||||||
|
<true/>
|
||||||
|
<key>NSColorPanelMode</key>
|
||||||
|
<string>1</string>
|
||||||
|
<key>NSColorPickerPreferredRGBEntryMode</key>
|
||||||
|
<integer>2</integer>
|
||||||
|
<key>NSColorPickerSlidersDefaults</key>
|
||||||
|
<string>1</string>
|
||||||
|
<key>NSFontPanelAttributes</key>
|
||||||
|
<string>1, 0</string>
|
||||||
|
<key>NSNavLastRootDirectory</key>
|
||||||
|
<string>/Users</string>
|
||||||
|
<key>NSNavPanelExpandedSizeForSaveMode</key>
|
||||||
|
<string>{712, 448}</string>
|
||||||
|
<key>NSSplitView Subview Frames NSColorPanelSplitView</key>
|
||||||
|
<array>
|
||||||
|
<string>0.000000, 0.000000, 257.000000, 271.000000, NO, NO</string>
|
||||||
|
<string>0.000000, 272.000000, 257.000000, 43.000000, NO, NO</string>
|
||||||
|
</array>
|
||||||
|
<key>NSToolbar Configuration com.apple.NSColorPanel</key>
|
||||||
|
<dict>
|
||||||
|
<key>TB Is Shown</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
<key>NSWindow Frame NSColorPanel</key>
|
||||||
|
<string>1295 353 257 291 0 0 1680 1025 </string>
|
||||||
|
<key>NSWindow Frame NSFontPanel</key>
|
||||||
|
<string>573 187 445 79 0 0 1680 1025 </string>
|
||||||
|
<key>NSWindow Frame NSNavPanelAutosaveName</key>
|
||||||
|
<string>-14 33 328 167 0 0 1680 1025 </string>
|
||||||
|
<key>NSWindow Frame TTAppPreferences</key>
|
||||||
|
<string>663 257 667 554 0 0 1680 1025 </string>
|
||||||
|
<key>NSWindow Frame TTWindow</key>
|
||||||
|
<string>580 240 710 455 0 0 1680 1025 </string>
|
||||||
|
<key>NSWindow Frame TTWindow Basic</key>
|
||||||
|
<string>552 468 585 371 0 0 1680 1025 </string>
|
||||||
|
<key>NSWindow Frame TTWindow Betelgeuse</key>
|
||||||
|
<string>267 404 893 525 0 0 1680 1025 </string>
|
||||||
|
<key>NSWindow Frame TTWindow Cipherpunk</key>
|
||||||
|
<string>51 119 570 365 0 0 1280 777 </string>
|
||||||
|
<key>NSWindow Frame TTWindow Homebrew</key>
|
||||||
|
<string>124 412 570 365 0 0 1280 777 </string>
|
||||||
|
<key>NSWindow Frame TTWindow Nord_Custom</key>
|
||||||
|
<string>210 278 570 412 0 0 1280 777 </string>
|
||||||
|
<key>NSWindow Frame TTWindow Ocean</key>
|
||||||
|
<string>187 343 570 365 0 0 1280 777 </string>
|
||||||
|
<key>NSWindow Frame TTWindow Silver Aerogel</key>
|
||||||
|
<string>20 292 570 365 0 0 1280 777 </string>
|
||||||
|
<key>NSWindow Frame TTWindow SolarizedDark_custom</key>
|
||||||
|
<string>124 365 570 412 0 0 1280 777 </string>
|
||||||
|
<key>NSWindow Frame TTWindow Solarized_Dark_Custom</key>
|
||||||
|
<string>693 199 725 455 0 0 1680 1025 </string>
|
||||||
|
<key>NSWindow Frame TTWindow themer-dark</key>
|
||||||
|
<string>246 284 505 371 0 0 1680 1025 </string>
|
||||||
|
<key>ProfileCurrentVersion</key>
|
||||||
|
<real>2.0699999999999998</real>
|
||||||
|
<key>SecureKeyboardEntry</key>
|
||||||
|
<false/>
|
||||||
|
<key>Startup Window Settings</key>
|
||||||
|
<string>Betelgeuse</string>
|
||||||
|
<key>TTAppPreferences Selected Tab</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>Window Settings</key>
|
||||||
|
<dict>
|
||||||
|
<key>Betelgeuse</key>
|
||||||
|
<dict>
|
||||||
|
<key>ANSIBlackColor</key>
|
||||||
|
<data>
|
||||||
|
YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFy
|
||||||
|
Y2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdC
|
||||||
|
XE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjA4NjI3NDUwOTggMC4w
|
||||||
|
OTgwMzkyMTU3IDAuMTQ1MDk4MDM5MgAQAYAC0hAREhNaJGNsYXNz
|
||||||
|
bmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNL
|
||||||
|
ZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCV
|
||||||
|
oKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA
|
||||||
|
2Q==
|
||||||
|
</data>
|
||||||
|
<key>ANSIBlueColor</key>
|
||||||
|
<data>
|
||||||
|
YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFy
|
||||||
|
Y2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdC
|
||||||
|
XE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjQ4NjI3NDUwOTggMC43
|
||||||
|
MTc2NDcwNTg4IDEuMDAwMDAwMDAwMAAQAYAC0hAREhNaJGNsYXNz
|
||||||
|
bmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNL
|
||||||
|
ZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCV
|
||||||
|
oKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA
|
||||||
|
2Q==
|
||||||
|
</data>
|
||||||
|
<key>ANSIBrightBlackColor</key>
|
||||||
|
<data>
|
||||||
|
YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFy
|
||||||
|
Y2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdC
|
||||||
|
XE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjE4NDMxMzcyNTUgMC4x
|
||||||
|
OTYwNzg0MzE0IDAuMjQzMTM3MjU0OQAQAYAC0hAREhNaJGNsYXNz
|
||||||
|
bmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNL
|
||||||
|
ZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCV
|
||||||
|
oKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA
|
||||||
|
2Q==
|
||||||
|
</data>
|
||||||
|
<key>ANSIBrightBlueColor</key>
|
||||||
|
<data>
|
||||||
|
YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFy
|
||||||
|
Y2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdC
|
||||||
|
XE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjU1Njg2Mjc0NTEgMC43
|
||||||
|
MzMzMzMzMzMzIDAuOTU2ODYyNzQ1MQAQAYAC0hAREhNaJGNsYXNz
|
||||||
|
bmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNL
|
||||||
|
ZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCV
|
||||||
|
oKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA
|
||||||
|
2Q==
|
||||||
|
</data>
|
||||||
|
<key>ANSIBrightCyanColor</key>
|
||||||
|
<data>
|
||||||
|
YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFy
|
||||||
|
Y2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdC
|
||||||
|
XE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjE5MjE1Njg2MjcgMC43
|
||||||
|
NjQ3MDU4ODI0IDAuODc0NTA5ODAzOQAQAYAC0hAREhNaJGNsYXNz
|
||||||
|
bmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNL
|
||||||
|
ZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCV
|
||||||
|
oKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA
|
||||||
|
2Q==
|
||||||
|
</data>
|
||||||
|
<key>ANSIBrightGreenColor</key>
|
||||||
|
<data>
|
||||||
|
YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFy
|
||||||
|
Y2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdC
|
||||||
|
XE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjUyNTQ5MDE5NjEgMC45
|
||||||
|
MjE1Njg2Mjc1IDAuNjc0NTA5ODAzOQAQAYAC0hAREhNaJGNsYXNz
|
||||||
|
bmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNL
|
||||||
|
ZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCV
|
||||||
|
oKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA
|
||||||
|
2Q==
|
||||||
|
</data>
|
||||||
|
<key>ANSIBrightMagentaColor</key>
|
||||||
|
<data>
|
||||||
|
YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFy
|
||||||
|
Y2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdC
|
||||||
|
XE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjc3NjQ3MDU4ODIgMC40
|
||||||
|
MjM1Mjk0MTE4IDAuNjA3ODQzMTM3MwAQAYAC0hAREhNaJGNsYXNz
|
||||||
|
bmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNL
|
||||||
|
ZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCV
|
||||||
|
oKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA
|
||||||
|
2Q==
|
||||||
|
</data>
|
||||||
|
<key>ANSIBrightRedColor</key>
|
||||||
|
<data>
|
||||||
|
YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFy
|
||||||
|
Y2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdC
|
||||||
|
XE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjg5MDE5NjA3ODQgMC4z
|
||||||
|
MDU4ODIzNTI5IDAuNDM1Mjk0MTE3NgAQAYAC0hAREhNaJGNsYXNz
|
||||||
|
bmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNL
|
||||||
|
ZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCV
|
||||||
|
oKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA
|
||||||
|
2Q==
|
||||||
|
</data>
|
||||||
|
<key>ANSIBrightWhiteColor</key>
|
||||||
|
<data>
|
||||||
|
YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFy
|
||||||
|
Y2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdC
|
||||||
|
XE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjc2NDcwNTg4MjQgMC43
|
||||||
|
ODAzOTIxNTY5IDAuODE5NjA3ODQzMQAQAYAC0hAREhNaJGNsYXNz
|
||||||
|
bmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNL
|
||||||
|
ZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCV
|
||||||
|
oKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA
|
||||||
|
2Q==
|
||||||
|
</data>
|
||||||
|
<key>ANSIBrightYellowColor</key>
|
||||||
|
<data>
|
||||||
|
YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFy
|
||||||
|
Y2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdC
|
||||||
|
XE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjkyNTQ5MDE5NjEgMC44
|
||||||
|
NDMxMzcyNTQ5IDAuNDc0NTA5ODAzOQAQAYAC0hAREhNaJGNsYXNz
|
||||||
|
bmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNL
|
||||||
|
ZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCV
|
||||||
|
oKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA
|
||||||
|
2Q==
|
||||||
|
</data>
|
||||||
|
<key>ANSICyanColor</key>
|
||||||
|
<data>
|
||||||
|
YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFy
|
||||||
|
Y2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdC
|
||||||
|
XE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjAwMDAwMDAwMDAgMC43
|
||||||
|
NTY4NjI3NDUxIDAuODk0MTE3NjQ3MQAQAYAC0hAREhNaJGNsYXNz
|
||||||
|
bmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNL
|
||||||
|
ZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCV
|
||||||
|
oKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA
|
||||||
|
2Q==
|
||||||
|
</data>
|
||||||
|
<key>ANSIGreenColor</key>
|
||||||
|
<data>
|
||||||
|
YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFy
|
||||||
|
Y2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdC
|
||||||
|
XE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjQ0MzEzNzI1NDkgMC45
|
||||||
|
Njg2Mjc0NTEwIDAuNjIzNTI5NDExOAAQAYAC0hAREhNaJGNsYXNz
|
||||||
|
bmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNL
|
||||||
|
ZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCV
|
||||||
|
oKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA
|
||||||
|
2Q==
|
||||||
|
</data>
|
||||||
|
<key>ANSIMagentaColor</key>
|
||||||
|
<data>
|
||||||
|
YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFy
|
||||||
|
Y2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdC
|
||||||
|
XE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjc4MDM5MjE1NjkgMC4z
|
||||||
|
MDE5NjA3ODQzIDAuNTM3MjU0OTAyMAAQAYAC0hAREhNaJGNsYXNz
|
||||||
|
bmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNL
|
||||||
|
ZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCV
|
||||||
|
oKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA
|
||||||
|
2Q==
|
||||||
|
</data>
|
||||||
|
<key>ANSIRedColor</key>
|
||||||
|
<data>
|
||||||
|
YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFy
|
||||||
|
Y2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdC
|
||||||
|
XE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjkyOTQxMTc2NDcgMC4x
|
||||||
|
NDUwOTgwMzkyIDAuMzA1ODgyMzUyOQAQAYAC0hAREhNaJGNsYXNz
|
||||||
|
bmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNL
|
||||||
|
ZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCV
|
||||||
|
oKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA
|
||||||
|
2Q==
|
||||||
|
</data>
|
||||||
|
<key>ANSIWhiteColor</key>
|
||||||
|
<data>
|
||||||
|
YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFy
|
||||||
|
Y2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdC
|
||||||
|
XE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjY2NjY2NjY2NjcgMC42
|
||||||
|
ODIzNTI5NDEyIDAuNzIxNTY4NjI3NQAQAYAC0hAREhNaJGNsYXNz
|
||||||
|
bmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNL
|
||||||
|
ZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCV
|
||||||
|
oKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA
|
||||||
|
2Q==
|
||||||
|
</data>
|
||||||
|
<key>ANSIYellowColor</key>
|
||||||
|
<data>
|
||||||
|
YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFy
|
||||||
|
Y2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdC
|
||||||
|
XE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjk3NjQ3MDU4ODIgMC44
|
||||||
|
NjI3NDUwOTgwIDAuMzYwNzg0MzEzNwAQAYAC0hAREhNaJGNsYXNz
|
||||||
|
bmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNL
|
||||||
|
ZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCV
|
||||||
|
oKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA
|
||||||
|
2Q==
|
||||||
|
</data>
|
||||||
|
<key>BackgroundColor</key>
|
||||||
|
<data>
|
||||||
|
YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFy
|
||||||
|
Y2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdC
|
||||||
|
XE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjA4NjI3NDUwOTggMC4w
|
||||||
|
OTgwMzkyMTU3IDAuMTQ1MDk4MDM5MgAQAYAC0hAREhNaJGNsYXNz
|
||||||
|
bmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNL
|
||||||
|
ZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCV
|
||||||
|
oKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA
|
||||||
|
2Q==
|
||||||
|
</data>
|
||||||
|
<key>BoldTextColor</key>
|
||||||
|
<data>
|
||||||
|
YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFy
|
||||||
|
Y2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdC
|
||||||
|
XE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjc2NDcwNTg4MjQgMC43
|
||||||
|
ODAzOTIxNTY5IDAuODE5NjA3ODQzMQAQAYAC0hAREhNaJGNsYXNz
|
||||||
|
bmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNL
|
||||||
|
ZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCV
|
||||||
|
oKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA
|
||||||
|
2Q==
|
||||||
|
</data>
|
||||||
|
<key>CursorColor</key>
|
||||||
|
<data>
|
||||||
|
YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFy
|
||||||
|
Y2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdC
|
||||||
|
XE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjc2NDcwNTg4MjQgMC43
|
||||||
|
ODAzOTIxNTY5IDAuODE5NjA3ODQzMQAQAYAC0hAREhNaJGNsYXNz
|
||||||
|
bmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNL
|
||||||
|
ZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCV
|
||||||
|
oKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA
|
||||||
|
2Q==
|
||||||
|
</data>
|
||||||
|
<key>Font</key>
|
||||||
|
<data>
|
||||||
|
YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0
|
||||||
|
b3BYJG9iamVjdHMSAAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRy
|
||||||
|
b290gAGkCwwVFlUkbnVsbNQNDg8QERITFFZOU1NpemVYTlNmRmxh
|
||||||
|
Z3NWTlNOYW1lViRjbGFzcyNAJgAAAAAAABAQgAKAA18QGUhhY2tO
|
||||||
|
ZXJkRm9udENvbXBsZXRlLUJvbGTSFxgZGlokY2xhc3NuYW1lWCRj
|
||||||
|
bGFzc2VzVk5TRm9udKIZG1hOU09iamVjdAgRGiQpMjdJTFFTWF5n
|
||||||
|
bnd+hY6QkpSwtcDJ0NMAAAAAAAABAQAAAAAAAAAcAAAAAAAAAAAA
|
||||||
|
AAAAAAAA3A==
|
||||||
|
</data>
|
||||||
|
<key>SelectionColor</key>
|
||||||
|
<data>
|
||||||
|
YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFy
|
||||||
|
Y2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdC
|
||||||
|
XE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjc4MDM5MjE1NjkgMC4z
|
||||||
|
MDE5NjA3ODQzIDAuNTM3MjU0OTAyMAAQAYAC0hAREhNaJGNsYXNz
|
||||||
|
bmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNL
|
||||||
|
ZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCV
|
||||||
|
oKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA
|
||||||
|
2Q==
|
||||||
|
</data>
|
||||||
|
<key>TextColor</key>
|
||||||
|
<data>
|
||||||
|
YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFy
|
||||||
|
Y2hpdmVyVCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdC
|
||||||
|
XE5TQ29sb3JTcGFjZVYkY2xhc3NPECcwLjY2NjY2NjY2NjcgMC42
|
||||||
|
ODIzNTI5NDEyIDAuNzIxNTY4NjI3NQAQAYAC0hAREhNaJGNsYXNz
|
||||||
|
bmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNL
|
||||||
|
ZXllZEFyY2hpdmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCV
|
||||||
|
oKmxtL3P0tcAAAAAAAABAQAAAAAAAAAZAAAAAAAAAAAAAAAAAAAA
|
||||||
|
2Q==
|
||||||
|
</data>
|
||||||
|
<key>columnCount</key>
|
||||||
|
<integer>35</integer>
|
||||||
|
<key>name</key>
|
||||||
|
<string>Betelgeuse</string>
|
||||||
|
<key>rowCount</key>
|
||||||
|
<integer>124</integer>
|
||||||
|
<key>type</key>
|
||||||
|
<string>Window Settings</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
30
Library/VirtualBox/VirtualBox.xml
Normal file
30
Library/VirtualBox/VirtualBox.xml
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!--
|
||||||
|
** DO NOT EDIT THIS FILE.
|
||||||
|
** If you make changes to this file while any VirtualBox related application
|
||||||
|
** is running, your changes will be overwritten later, without taking effect.
|
||||||
|
** Use VBoxManage or the VirtualBox Manager GUI to make changes.
|
||||||
|
-->
|
||||||
|
<VirtualBox xmlns="http://www.virtualbox.org/" version="1.12-linux">
|
||||||
|
<Global>
|
||||||
|
<ExtraData>
|
||||||
|
<ExtraDataItem name="GUI/Details/Elements" value="general,system,preview,display,storage,audio,network,usb,sharedFolders,description"/>
|
||||||
|
<ExtraDataItem name="GUI/GroupDefinitions/" value="n=GLOBAL"/>
|
||||||
|
<ExtraDataItem name="GUI/LastItemSelected" value="n=GLOBAL"/>
|
||||||
|
<ExtraDataItem name="GUI/LastWindowPosition" value="341,164,683,404"/>
|
||||||
|
<ExtraDataItem name="GUI/SplitterSizes" value="226,456"/>
|
||||||
|
<ExtraDataItem name="GUI/Toolbar" value="false"/>
|
||||||
|
<ExtraDataItem name="GUI/Tools/LastItemsSelected" value="Welcome,Details"/>
|
||||||
|
<ExtraDataItem name="GUI/UpdateCheckCount" value="2"/>
|
||||||
|
<ExtraDataItem name="GUI/UpdateDate" value="1 d, 2021-12-15, stable, 6.1.30"/>
|
||||||
|
</ExtraData>
|
||||||
|
<MachineRegistry/>
|
||||||
|
<NetserviceRegistry>
|
||||||
|
<DHCPServers>
|
||||||
|
<DHCPServer networkName="HostInterfaceNetworking-vboxnet0" IPAddress="192.168.56.100" networkMask="255.255.255.0" lowerIP="192.168.56.101" upperIP="192.168.56.254" enabled="1"/>
|
||||||
|
</DHCPServers>
|
||||||
|
</NetserviceRegistry>
|
||||||
|
<SystemProperties defaultMachineFolder="/home/{{ .user.username }}/.local/virtualbox" defaultHardDiskFormat="VDI" VRDEAuthLibrary="VBoxAuth" webServiceAuthLibrary="VBoxAuth" LogHistoryCount="3" proxyMode="0" exclusiveHwVirt="true"/>
|
||||||
|
<USBDeviceFilters/>
|
||||||
|
</Global>
|
||||||
|
</VirtualBox>
|
13
README.md
Normal file
13
README.md
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
# Hiawatha
|
||||||
|
|
||||||
|
This is a decked out dotfiles repository that leverages a handful of technologies including Chezmoi and Ansible.
|
||||||
|
|
||||||
|
To use these dotfiles and provision your computer with prompts (which can be made headless with environment variables):
|
||||||
|
|
||||||
|
```
|
||||||
|
bash <(curl -sSL https://install.doctor/start)
|
||||||
|
```
|
||||||
|
|
||||||
|
All the source files are located in ~/.local/share/chezmoi/home for the dotfiles and ~/.local/share/chezmoi/system for the system files. The roles / playbooks from [Gas Station](https://gitlab.com/megabyte-labs/gas-station) are occasionally used to fill in gaps. The software installation (which happens when you run Chezmoi or the link above) determines which package manager to use to install the software using [this software map](https://gitlab.com/megabyte-labs/misc/dotfiles/-/blob/master/.local/share/chezmoi/software.yml).
|
||||||
|
|
||||||
|
Many of the dotfiles (and system files) are templated. Those ones you will have to look at ~/.local/share/chezmoi to take a peek at. The static files are at the root of this repository for easy viewing.
|
13
sync.sh
Normal file
13
sync.sh
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
### Copy static files to base directory for easy viewing - source should still be modified in ~/.local/share/chezmoi/home (or ~/.local/share/chezmoi/system for system files)
|
||||||
|
find ./.local/share/chezmoi/home -type f | while read FILE; do
|
||||||
|
BASENAME="$(basename "$FILE")"
|
||||||
|
DIRNAME="$(dirname "$FILE")"
|
||||||
|
if [[ "$FILE" != *'.tmpl' ]] && [[ "$BASENAME" != '.chezmoi'* ]] && [[ "$BASENAME" != 'symlink_'* ]] && [[ "$FILE" != *'gitkeep' ]] && [[ "$FILE" != *'.chezmoitemplates'* ]] && [ "$BASENAME" != 'chezmoi.txt.age' ] && [ "$FILE" != *'TODO' ]; then
|
||||||
|
TARGET_DIR="$(echo "$DIRNAME" | sed 's/private_//g' | sed 's/dot_/\./g' | sed 's/executable_//' | sed 's/readonly_//g' | sed 's/\/.local\/share\/chezmoi\/home//')"
|
||||||
|
mkdir -p "$TARGET_DIR"
|
||||||
|
TARGET="$(echo "$FILE" | sed 's/private_//g' | sed 's/dot_/\./g' | sed 's/executable_//' | sed 's/readonly_//g' | sed 's/\/.local\/share\/chezmoi\/home//' )"
|
||||||
|
cp "$FILE" "$TARGET"
|
||||||
|
fi
|
||||||
|
done
|
Loading…
Reference in a new issue