Compare commits

...

5 Commits

Author SHA1 Message Date
Gal Szkolnik bb29930d51 zls is now Get-ZfsItem with zls as an Alias
Modified code to use more 'PowerShell' centric methods, easier on the
formatting as table.
2022-02-06 15:25:50 -05:00
Gal @home ha 9eb99e1581 =Fixed auto loaded code 2022-02-05 16:44:01 -05:00
Gal Szkolnik 10b670269a =Added powershell-pipeline functionality to ha cmdlets 2022-02-05 16:20:25 -05:00
Gal Szkolnik 47f27cb1f5 =Created proxmox package 2022-02-05 16:19:08 -05:00
Gal on Sygin c0131deba4 Introduction of BitWarden package + prep
+ BitWarden module for easy autologon (not very secure but convinent on
  personal machines) - Will think this over some more afterwards
* Get-Path will always return without trailing directory separator
  (might want to make this 'always' for dirs, but unsure yet)
+ Added Edit-MountUnit scaffolding for later modifying it to import a
  template on new mount units, and easy edit of systemd mount and
  automount units.
2022-02-03 19:08:16 -05:00
16 changed files with 158 additions and 38 deletions

19
BitWarden/_.package.json Normal file
View File

@ -0,0 +1,19 @@
{
"package": {
"Name": "BitWarden",
"Condition": [
{
"custom": null,
"System": null,
"Hostname": null,
"Username": null,
"CmdletExists": null,
"ModuleExists": null,
"AppExeExists": [
"bw"
],
"Logic": 0
}
]
}
}

View File

@ -0,0 +1,10 @@
if( -not (Test-Path env:BITWARDEN_CLI_PATH) ) {
$env:BITWARDEN_CLI_PATH = Get-Command bw -Type Application | Select-Object -First 1 -ExpandProperty Source
}
$local:bwPath = Join-Path $HOME 'tmp'
$null = New-Item -ItemType Directory -Path $bwPath -Force
$bwPath = Join-Path $bwPath 'git-credential-bw.key'
if( Test-Path $bwPath ) {
$env:BW_SESSION= Get-Content $bwPath
}

View File

@ -0,0 +1,6 @@
{
"Always": [
"BitwardenWrapper"
]
}

View File

@ -1,5 +1,7 @@
[CmdletBinding(SupportsShouldProcess)]param(
[Alias('Slug')]
[string[]]$AddOnSlug,
[Alias('Name')]
[string[]]$AddOnName,
[switch]$InspectContainer,
[switch]$NoPatternMatch,
@ -14,7 +16,7 @@ $addons = $addons.data.addons
switch( $Status ) {
'Installed' { $addons = $addons | Where-Object Installed }
'NotInstalled' { $addons = $addons | Where-Object -Not Installed }
'Running' {
default {
$addons = $addons | Where-Object Installed
$InspectContainer = $true
}
@ -49,7 +51,7 @@ switch( $Status ) {
$addons = $addons | Where-Object Status -eq 'running'
}
'Stopped' {
$addons = $addons | Where-Object Status -eq 'running'
$addons = $addons | Where-Object Status -ne 'running'
}
}

View File

@ -1,8 +1,23 @@
[CmdletBinding(SupportsShouldProcess)]param(
[Parameter(ValueFromPipeline,ValueFromPipelineByPropertyName)]
[Alias('Slug')]
[string[]]$AddOnSlug,
[switch]$NoPatternMatch
)
Get-HA_Addon 'Installed' -AddOnSlug:$AddOnSlug -NoPatternMatch:$NoPatternMatch | ForEach-Object {
Invoke-HomeAssistantCli addons start $_.slug
begin{}
process{
foreach( $slug in $AddOnSlug ) {
Get-HA_Addon 'Running' -AddOnSlug:$slug -NoPatternMatch:$NoPatternMatch | ForEach-Object {
$local:a = $_
$local:invocation = Invoke-HomeAssistantCli addons start $a.slug
Get-HA_Addon -InspectContainer -NoPatternMatch -AddOnSlug $a.slug |
Select-Object @{
L='result';E={$invocation.result}
},@{
L='data';E={$invocation.data}
},*
}
}
}
end{}

View File

@ -1,8 +1,23 @@
[CmdletBinding(SupportsShouldProcess)]param(
[Parameter(ValueFromPipeline,ValueFromPipelineByPropertyName)]
[Alias('Slug')]
[string[]]$AddOnSlug,
[switch]$NoPatternMatch
)
Get-HA_Addon 'Running' -AddOnSlug:$AddOnSlug -NoPatternMatch:$NoPatternMatch | ForEach-Object {
Invoke-HomeAssistantCli addons stop $_.slug
begin{}
process{
foreach( $slug in $AddOnSlug ) {
Get-HA_Addon 'Running' -AddOnSlug:$slug -NoPatternMatch:$NoPatternMatch | ForEach-Object {
$local:a = $_
$local:invocation = Invoke-HomeAssistantCli addons stop $a.slug
Get-HA_Addon -InspectContainer -NoPatternMatch -AddOnSlug $a.slug |
Select-Object @{
L='result';E={$invocation.result}
},@{
L='data';E={$invocation.data}
},*
}
}
}
end{}

View File

@ -0,0 +1,9 @@
sudo killall -9 corosync
sudo systemctl restart pve-cluster
sudo systemctl restart pvedaemon
sudo systemctl restart pveproxy
sudo systemctl restart pvestatd
sudo qm stop 100
sudo qm start 100

17
Proxmox/_.package.json Normal file
View File

@ -0,0 +1,17 @@
{
"package": {
"Name": "Proxmox",
"Condition": [
{
"custom": null,
"System": [ "Linux" ],
"Hostname": null,
"Username": null,
"CmdletExists": null,
"ModuleExists": null,
"AppExeExists": "/usr/sbin/qm",
"Logic": 0
}
]
}
}

View File

@ -5,6 +5,10 @@
$local:pathChar = [IO.Path]::DirectorySeparatorChar
$MountPath = Get-Path $MountPath
$local:MountName = $MountPath -replace '-','\\x2d' -replace $pathChar,'-' -replace '^-','' -replace '-^',''
$local:MountName = $($($(
$MountPath -replace '-','\\x2d'
).Replace( $pathChar, '-' )
) -replace '^-',''
)
$MountName

View File

@ -5,6 +5,10 @@ param(
$local:detectedDisistro = cat /etc/os-release | Select-String -Pattern "^ID=" | ForEach-Object { $_ -split '=' | Select-Object -Skip 1 }
switch ($detectedDisistro) {
'arch' { Update-ArchOSz -Mode:$Mode $args }
'ubuntu' { Update-UbuntuOSz -Mode:$Mode $args }
'arch' {
Update-ArchOSz -Mode:$Mode $args
}
{$_ -in 'debian','ubuntu','zorin'} {
Update-UbuntuOSz -Mode:$Mode $args
}
}

View File

@ -6,4 +6,21 @@ if( -not (Test-Path env:XDG_DATA_HOME) ) {
}
if( -not (Test-Path env:XDG_CONFIG_HOME) ) {
$env:XDG_CONFIG_HOME="$HOME/.config"
}
}
if( -not (
Test-Path env:SHELL_PARENT
) -and -not (
$env:SHELL -match 'p(wsh|owershell)$'
) -and (
Test-Path env:SHELL
)
) {
$env:COMPLETION_SHELL_PREFERENCE = $env:SHELL
$env:SHELL_PARENT = $env:SHELL
}
$env:SHELL = Get-Process -Id $PID | Select-Object -ExpandProperty Path
Get-Command -ListImported Set-UnixCompleter -ErrorAction Ignore |
ForEach-Object {
Set-UnixCompleter -Shell $env:COMPLETION_SHELL_PREFERENCE
}

View File

@ -5,17 +5,6 @@
[string[]]$Path
)
process {
function Get-FullPath {
param([string]$Path)
if([System.IO.Path]::IsPathRooted($Path)){
[System.IO.Path]::GetFullPath($Path)
}else{
[System.IO.Path]::GetFullPath((Join-Path $PWD $Path))
}
}
foreach( $local:p in $Path ) {
switch( $p[0] ) {
'@' { $p = Join-Path $MyPSScriptRoot $p.Substring(1) }
@ -27,6 +16,9 @@ process {
}
}
# clean end of path from DirectorySeparatorChars
$p = $p -replace '[/\\]+$',''
$p = $p -replace '#C-','#C-#' -replace '\*','#C-A#' -replace '\?','#C-Q#'
if([System.IO.Path]::IsPathRooted($p)){
$p = [System.IO.Path]::GetFullPath($p)
@ -44,9 +36,3 @@ process {
$p
}
}
# try {
# get-item $Path -Force -ErrorAction Stop |
# Select-Object -ExpandProperty FullName
# } catch {
# $_.targetObject
# }

View File

@ -37,6 +37,7 @@ class DockerNetworks {
}
}
if( -not (Get-Command docker-compose -ErrorAction Ignore) ) { return }
class DockerComposeCommands { #: System.Management.Automation.IValidateSetValuesGenerator {
static [string[]] $cachedCommands = @()
static [string[]] _GetValidValues([string]$wordToComplete,[string]$subcommand,[bool]$Strict) {

1
zfs/Aliases/zls.ps1 Normal file
View File

@ -0,0 +1 @@
Get-ZfsItem

25
zfs/Get-ZfsItem.ps1 Normal file
View File

@ -0,0 +1,25 @@
[CmdletBinding()]param(
[string[]]$Options='name,used,avail,refer,canmount,mounted,mountpoint'
)
$Options = $Options -join ','
if( $options -split ',' -notcontains 'name' ) { $options = "name,$Options" }
$local:prev = '';
zfs list -o $Options |
ForEach-Object { $_ -replace ' +',"`t" } |
ConvertFrom-Csv -Delimiter "`t" |
Where-Object Name -NotMatch '^rpool/var/lib/docker/' |
ForEach-Object {
$local:o = $_ | Select-Object @{L='-';E={''}},*
$local:tmpPrev = $o.Name -replace '^(\w+(\W\w+(\W\w+)?)?).*','$1';
if( $tmpPrev -notmatch "^$prev" -and $prev -notin ('','NAME') ) {
$o.'-' = "`n-"
};
$prev = $tmpPrev;
if( $o.MOUNTPOINT ) {
$o.MOUNTPOINT = $o.MOUNTPOINT -replace '^none$','<none>'
}
$o
} |
Format-Table -Wrap

View File

@ -1,11 +0,0 @@
$local:prev = "";
zfs list -o name,used,avail,refer,canmount,mounted,mountpoint $args |
grep -v 'docker/' |
ForEach-Object {
$local:tmpPrev = $_ -replace '^(\w+(\W\w+(\W\w+)?)?).*','$1';
if( $tmpPrev -notmatch "^$prev" -and $prev -notin ('','NAME') ) {
'-----------------'
};
$prev = $tmpPrev;
$_
}