mirror of
https://github.com/cmderdev/cmder.git
synced 2025-07-17 04:59:09 +08:00
Compare commits
170 Commits
v1.3.20
...
vagrant+pa
Author | SHA1 | Date | |
---|---|---|---|
396a9a0890 | |||
98a1e9621e | |||
4f32d23c30 | |||
1ad836b288 | |||
1b9a1e5b6f | |||
29650960aa | |||
3ea9728ffd | |||
4b0344172a | |||
5e219fe34e | |||
9be28807cb | |||
e2168a361c | |||
7542376213 | |||
84ee96c64f | |||
320f928830 | |||
e9750ab73d | |||
e0915777c0 | |||
23d3add2d1 | |||
59e14a1783 | |||
34f2aabb8e | |||
845720e25a | |||
55676399d5 | |||
48e4dff882 | |||
a605ec520d | |||
5fab87f4d6 | |||
c9153c96bf | |||
74381ecd19 | |||
8d39f79a90 | |||
7b880efda4 | |||
4aefd0bb71 | |||
7daeb465e8 | |||
23488fcbb2 | |||
d838f861af | |||
d80202c791 | |||
1c399c470f | |||
65d6ecb9f1 | |||
5cb8705f65 | |||
aa56c778cb | |||
eae0a22782 | |||
2a62a045d9 | |||
73034f9e31 | |||
8875f77573 | |||
1d1e815c91 | |||
b4ed3bac6d | |||
739dcb1f8c | |||
ce69566201 | |||
ffda6f70f7 | |||
95c833204f | |||
5d270b477c | |||
91939db852 | |||
e8d5528e5e | |||
0aad7daca3 | |||
80888644cc | |||
600552f061 | |||
bc0db6a7b6 | |||
eb2444d04a | |||
36ad85c7b7 | |||
f318bcc1b5 | |||
c56559873c | |||
e33713a93f | |||
324aaf74f2 | |||
d73f9592d8 | |||
bbb50f99f8 | |||
4efbe0bd62 | |||
476fd2d324 | |||
b3af7c3983 | |||
d82fece61e | |||
6bd2e260f0 | |||
c9d2b33792 | |||
9e87f375f1 | |||
84262c4476 | |||
0b01ea6f63 | |||
af6472cb57 | |||
fd12ece9af | |||
b5ae5eb711 | |||
c9e872e826 | |||
f99480fd49 | |||
834940cddb | |||
5135370ec1 | |||
92a3c9c215 | |||
f22943212b | |||
dc2bc9bda7 | |||
a03ad615f1 | |||
8b3f38ad21 | |||
9e55c48200 | |||
3b6e1cbf5f | |||
e1bf703f50 | |||
2e9b512102 | |||
9bbc97c981 | |||
4766425ad3 | |||
470808838f | |||
328f4b3073 | |||
691addb95c | |||
efa2e576d0 | |||
5eaf0d0396 | |||
0e34d925ce | |||
9d2ac373c5 | |||
835343f9d6 | |||
271fe4c822 | |||
24ba9c3fa5 | |||
0fdcda98cf | |||
42df6cd05b | |||
a4fa8d5333 | |||
1ba542e915 | |||
2c656a9c34 | |||
0adbc47c7e | |||
e0ade8f3f1 | |||
ba97011bbc | |||
cfcfe6f282 | |||
048692b5b5 | |||
7c74931af8 | |||
e3d9f81e25 | |||
7c309c6a7b | |||
0c1ab3fbb1 | |||
fc44def0ad | |||
fbe3e17eea | |||
47caafb800 | |||
efb3338f5c | |||
3859f6ffc0 | |||
4e1918dcf7 | |||
dcc06a9d70 | |||
d3026aef5d | |||
159937b2df | |||
3214a6d5ea | |||
02970841c3 | |||
04bbea7d24 | |||
c8d48b7f3e | |||
0f6ed93d0d | |||
2be652707b | |||
96ce96c53d | |||
ce23189427 | |||
a2a996147e | |||
6d46df634e | |||
fe08df3fdc | |||
39ac92d61c | |||
bdbd3aab2b | |||
18aea2b258 | |||
5cd05b056b | |||
c0fc10009a | |||
cc5e4a0e60 | |||
6e0e1729d8 | |||
cbb10de06d | |||
0b7e47cdc2 | |||
96ca7cea4a | |||
0ba0dea6a2 | |||
e320ba8aae | |||
23b80264b0 | |||
90cd1130ac | |||
7f71456a41 | |||
c606e5c8ee | |||
98d28846b3 | |||
27f28e6ed7 | |||
8b6d1d8a6f | |||
211fbd6428 | |||
2acb6808ed | |||
ee913e09ee | |||
ede79c2199 | |||
665df2a8c8 | |||
a0f234b9d0 | |||
5cdb98abb7 | |||
9399cbdcd7 | |||
c992215f94 | |||
55b90cc958 | |||
971483b2b7 | |||
c8d554220a | |||
8feae5d81d | |||
6d77c988db | |||
04b6ec2ac8 | |||
b5bddc929e | |||
5d05034810 | |||
4243c5c222 |
7
.github/ISSUE_TEMPLATE/bug-report.yml
vendored
7
.github/ISSUE_TEMPLATE/bug-report.yml
vendored
@ -1,7 +1,7 @@
|
||||
name: "🐞 Bug report (encountered problems/errors)"
|
||||
description: Something is not working as it should
|
||||
title: "[Bug] "
|
||||
labels: [🐞 Bug report]
|
||||
labels: "🐛 Type: Bug"
|
||||
|
||||
body:
|
||||
- type: markdown
|
||||
@ -20,6 +20,7 @@ body:
|
||||
label: Version Information
|
||||
description: |
|
||||
Please write your Cmder and ConEmu version below. If applicable, write down your Windows edition too.
|
||||
**👉 See:** [How to find out which Cmder version I'm using](https://github.com/cmderdev/cmder/wiki/Cmder-troubleshooting)
|
||||
placeholder: |
|
||||
Cmder version:
|
||||
Operating system:
|
||||
@ -77,7 +78,7 @@ body:
|
||||
- **[Clink](https://github.com/chrisant996/clink)**, the default shell in Cmder
|
||||
- **[ConEmu](https://github.com/Maximus5/ConEmu)**, the terminal emulator
|
||||
- **[Git/MinGW](https://github.com/git-for-windows/git)**, which also provide *NIX tools (such as `ls`, `mv`, `cp`, etc)
|
||||
- **[clink-completions](https://github.com/repos/vladimir-kotikov/clink-completions)**, which provide autocompletion for clink
|
||||
- **[clink-completions](https://github.com/vladimir-kotikov/clink-completions)**, which provides autocompletion for clink
|
||||
|
||||
We'll try our best to help you -- but we recommend creating an issue specifically at each of the corresponding repositories for the best result.
|
||||
|
||||
@ -90,7 +91,7 @@ body:
|
||||
|
||||
#### Prerequisites before submitting an issue
|
||||
- We do not support any versions older than the current release series, if you are using an older Cmder please update to the latest version first.
|
||||
- Verify that the issue is not fixed and is reproducible in the **[latest official Cmder version](https://github.com/cmderdev/cmder/releases).**
|
||||
- Verify that the issue is not already fixed and is reproducible in the **[latest official Cmder version](https://github.com/cmderdev/cmder/releases).**
|
||||
- Check the **[current issues list](https://github.com/cmderdev/cmder/issues?q=is%3Aissue)** and perform a **search of the issue tracker (including closed ones)** to avoid posting a duplicate bug report.
|
||||
- Make sure this is not a support request or question, both of which are better suited for either the **[discussions section](https://github.com/cmderdev/cmder/discussions)**, or the **[questions section](https://github.com/cmderdev/cmder/issues/new?template=question.yml)**.
|
||||
- Verify that the **[wiki](https://github.com/cmderdev/cmder/wiki)** did not contain a suitable solution either.
|
||||
|
4
.github/ISSUE_TEMPLATE/feature-request.yml
vendored
4
.github/ISSUE_TEMPLATE/feature-request.yml
vendored
@ -1,7 +1,7 @@
|
||||
name: "⭐ Feature request (request for new functionality)"
|
||||
description: Help make Cmder even better
|
||||
title: "[Feature request] "
|
||||
labels: [⭐ Feature request]
|
||||
labels: "🛠 Type: Feature Request"
|
||||
|
||||
body:
|
||||
- type: markdown
|
||||
@ -22,7 +22,7 @@ body:
|
||||
- **[Clink](https://github.com/chrisant996/clink)**, the default shell in Cmder
|
||||
- **[ConEmu](https://github.com/Maximus5/ConEmu)**, the terminal emulator
|
||||
- **[Git/MinGW](https://github.com/git-for-windows/git)**, which also provide *NIX tools (such as `ls`, `mv`, `cp`, etc)
|
||||
- **[clink-completions](https://github.com/repos/vladimir-kotikov/clink-completions)**, which provide autocompletion for clink
|
||||
- **[clink-completions](https://github.com/vladimir-kotikov/clink-completions)**, which provides autocompletion for clink
|
||||
|
||||
- If you would like to ask for guides on how to integrate Cmder with your favorite IDE of choice, or how to perform a specific task with Cmder, make sure you visit our label section first.
|
||||
|
||||
|
5
.github/ISSUE_TEMPLATE/question.yml
vendored
5
.github/ISSUE_TEMPLATE/question.yml
vendored
@ -1,6 +1,7 @@
|
||||
name: "❓ Question"
|
||||
description: Something is unclear or needs to be discussed
|
||||
labels: [❓ Question]
|
||||
title: "Question: "
|
||||
labels: "❔ Type: Question"
|
||||
|
||||
body:
|
||||
- type: markdown
|
||||
@ -18,7 +19,7 @@ body:
|
||||
|
||||
- If you would like to ask for guides on how to integrate Cmder with your favorite IDE of choice, or how to perform a specific task with Cmder, make sure you visit our label section first.
|
||||
|
||||
You may already have an answer under the Guides or Questions section.
|
||||
You may already have an answer under the [💬 Guides](https://github.com/cmderdev/cmder/issues?q=label%3A%22%F0%9F%92%AC+Type%3A+Guide%22), [📖 Documentation](https://github.com/cmderdev/cmder/issues?q=label%3A%22%F0%9F%93%96+Documentation%22) or [❔ Questions](https://github.com/cmderdev/cmder/issues?q=is%3Aissue+label%3A%22%E2%9D%94+Type%3A+Question%22) section.
|
||||
|
||||
For a list of labels, visit **[Labels](https://github.com/cmderdev/cmder/labels)**.
|
||||
|
||||
|
11
.github/dependabot.yml
vendored
Normal file
11
.github/dependabot.yml
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
# To get started with Dependabot version updates, you'll need to specify which
|
||||
# package ecosystems to update and where the package manifests are located.
|
||||
# Please see the documentation for all configuration options:
|
||||
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
||||
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "github-actions" # See documentation for possible values
|
||||
directory: "/" # Location of package manifests
|
||||
schedule:
|
||||
interval: "weekly"
|
33
.github/workflows/branches.yml
vendored
Normal file
33
.github/workflows/branches.yml
vendored
Normal file
@ -0,0 +1,33 @@
|
||||
name: Update branches
|
||||
|
||||
# Controls when the action will run.
|
||||
on:
|
||||
# Triggers the workflow on push events for the development branch
|
||||
push:
|
||||
branches: [ master ]
|
||||
|
||||
# Allows you to run this workflow manually from the Actions tab
|
||||
workflow_dispatch:
|
||||
|
||||
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
|
||||
jobs:
|
||||
# This job updates the development branch with the master branch
|
||||
update-development:
|
||||
# The type of runner that the job will run on
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
# Steps represent a sequence of tasks that will be executed as part of the job
|
||||
steps:
|
||||
# Checks-out the repository under $GITHUB_WORKSPACE, so the job can access it
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0 # fetch all history for all branches and tags
|
||||
|
||||
# Runs a single command using the runners shell
|
||||
- name: Merge master into development
|
||||
run: |
|
||||
git config user.name "${{ github.actor }}"
|
||||
git config user.email "${{ github.actor }}@users.noreply.github.com"
|
||||
git checkout development
|
||||
git merge --no-ff master
|
||||
git push origin development
|
20
.github/workflows/build.yml
vendored
20
.github/workflows/build.yml
vendored
@ -8,6 +8,8 @@ name: Build Cmder
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
tags:
|
||||
- "v*"
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
@ -28,10 +30,12 @@ jobs:
|
||||
build:
|
||||
name: Build Project
|
||||
runs-on: windows-latest
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
discussions: write
|
||||
steps:
|
||||
- name: Check out repository code (Action from GitHub)
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
@ -72,3 +76,15 @@ jobs:
|
||||
with:
|
||||
path: build/hashes.txt
|
||||
name: hashes.txt
|
||||
|
||||
- name: Create Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
files: |
|
||||
build/cmder.zip
|
||||
build/cmder.7z
|
||||
build/cmder_mini.zip
|
||||
build/hashes.txt
|
||||
draft: true
|
||||
generate_release_notes: true
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
|
73
.github/workflows/codeql.yml
vendored
Normal file
73
.github/workflows/codeql.yml
vendored
Normal file
@ -0,0 +1,73 @@
|
||||
# For most projects, this workflow file will not need changing; you simply need
|
||||
# to commit it to your repository.
|
||||
#
|
||||
# You may wish to alter this file to override the set of languages analyzed,
|
||||
# or to provide custom queries or build logic.
|
||||
|
||||
name: "CodeQL"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
paths-ignore:
|
||||
- '**/*.md'
|
||||
- '**/*.txt'
|
||||
- '.github/**'
|
||||
- '**/.gitignore'
|
||||
pull_request:
|
||||
# The branches below must be a subset of the branches above
|
||||
branches: [ "master" ]
|
||||
paths-ignore:
|
||||
- '**/*.md'
|
||||
- '**/*.txt'
|
||||
- '.github/**'
|
||||
- '**/.gitignore'
|
||||
schedule:
|
||||
- cron: '30 19 * * 0'
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze
|
||||
runs-on: windows-latest
|
||||
permissions:
|
||||
actions: read
|
||||
contents: read
|
||||
security-events: write
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
language: [ 'cpp' ]
|
||||
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
|
||||
# Use only 'java' to analyze code written in Java, Kotlin or both
|
||||
# Use only 'javascript' to analyze code written in JavaScript, TypeScript or both
|
||||
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v2
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
# By default, queries listed here will override any specified in a config file.
|
||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||
|
||||
# Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
|
||||
# queries: security-extended,security-and-quality
|
||||
|
||||
- name: Add MSBuild to PATH
|
||||
uses: microsoft/setup-msbuild@v1
|
||||
|
||||
- name: Build Cmder Launcher
|
||||
shell: pwsh
|
||||
working-directory: scripts
|
||||
run: .\build.ps1 -Compile -verbose
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v2
|
||||
with:
|
||||
category: "/language:${{matrix.language}}"
|
18
.github/workflows/tests.yml
vendored
18
.github/workflows/tests.yml
vendored
@ -4,9 +4,19 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
paths-ignore:
|
||||
- '**/*.md'
|
||||
- '**/*.txt'
|
||||
- '.github/**'
|
||||
- '**/.gitignore'
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
paths-ignore:
|
||||
- '**/*.md'
|
||||
- '**/*.txt'
|
||||
- '.github/**'
|
||||
- '**/.gitignore'
|
||||
|
||||
defaults:
|
||||
run:
|
||||
@ -26,10 +36,14 @@ jobs:
|
||||
continue-on-error: false
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
- name: Initialize vendors
|
||||
shell: pwsh
|
||||
working-directory: scripts
|
||||
run: .\build.ps1 -verbose
|
||||
- name: Testing Clink Shell
|
||||
run: |
|
||||
cmd /c vendor\init.bat
|
||||
cmd /c vendor\init.bat /v /d /t
|
||||
- name: Testing PowerShell
|
||||
run: |
|
||||
PowerShell.exe -ExecutionPolicy Bypass -NoLogo -NoProfile -Command "Invoke-Expression '. ''vendor\profile.ps1'''"
|
||||
|
11
.github/workflows/vendor.yml
vendored
11
.github/workflows/vendor.yml
vendored
@ -24,12 +24,14 @@ jobs:
|
||||
pull-requests: write
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- id: make-changes
|
||||
name: Checking for updates
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
$currentVersion = (Get-Content .\vendor\sources.json | ConvertFrom-Json)
|
||||
. .\scripts\update.ps1 -verbose
|
||||
@ -40,15 +42,16 @@ jobs:
|
||||
foreach ($s in $newVersion) {
|
||||
$oldVersion = ($currentVersion | Where-Object {$_.name -eq $s.name}).version
|
||||
if ($s.version -ne $oldVersion) {
|
||||
$repoUrl = ($repoUrl = $s.Url.Replace("/archive/", "/releases/")).Substring(0, $repoUrl.IndexOf("/releases/")) + "/releases"
|
||||
$listUpdated += "$($s.name) v$($s.version), "
|
||||
$updateMessage += "| **$($s.name)** | $oldVersion | **$($s.version)** |`n"
|
||||
$updateMessage += "| **[$($s.name)]($repoUrl)** | $oldVersion | **$($s.version)** |`n"
|
||||
}
|
||||
}
|
||||
if ($count -eq 0) { return }
|
||||
Set-GHVariable -Name LIST_UPDATED -Value $listUpdated.Trim(', ')
|
||||
echo "UPDATE_MESSAGE<<<EOF`n$updateMessage`n<EOF" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
|
||||
|
||||
- uses: peter-evans/create-pull-request@v4
|
||||
- uses: peter-evans/create-pull-request@v5
|
||||
if: env.COUNT_UPDATED > 0
|
||||
with:
|
||||
title: 'Updates to `${{ env.COUNT_UPDATED }}` vendored dependencies'
|
||||
@ -57,6 +60,6 @@ jobs:
|
||||
${{ env.UPDATE_MESSAGE }}
|
||||
---
|
||||
Please verify and then **Merge** the pull request to update.
|
||||
commit-message: 'Update vendored dependencies (${{ env.LIST_UPDATED }})'
|
||||
commit-message: '⬆️ Update dependencies (${{ env.LIST_UPDATED }})'
|
||||
branch: update-vendor
|
||||
base: master
|
||||
|
9
.gitignore
vendored
9
.gitignore
vendored
@ -29,3 +29,12 @@ build/
|
||||
launcher/.vs
|
||||
launcher/src/version.rc2
|
||||
.vs/*
|
||||
.vscode
|
||||
.idea
|
||||
.vagrant/
|
||||
scripts/packer/iso/*.iso
|
||||
!scripts/packer/floppy/*.exe
|
||||
scripts/packer/packer_cache
|
||||
scripts/packer/output-*
|
||||
*.box
|
||||
|
||||
|
22
CHANGELOG.md
22
CHANGELOG.md
@ -1,11 +1,12 @@
|
||||
# Change Log
|
||||
|
||||
## [1.3.20-unreleased](https://ci.appveyor.com/project/MartiUK/cmder/build/artifacts) (2022-03-17)
|
||||
## [1.3.20](https://github.com/cmderdev/cmder/tree/v1.3.20) (2022-03-18)
|
||||
|
||||
### Changes
|
||||
|
||||
- Update Git for Windows to 2.37.1
|
||||
- Update to Clink 1.3.36
|
||||
- Update Git for Windows to 2.38.0.windows.1
|
||||
- Update Clink to 1.3.47
|
||||
- Update ConEmu to 22.08.07
|
||||
|
||||
### Fixes
|
||||
|
||||
@ -14,7 +15,18 @@
|
||||
- Fix using Git from vendored Git and other Git for Windows tools from other Git in path.
|
||||
- Remove setting `term=cygwin` in `init.bat` to fix random `ABCD` characters when using arrow keys in `vim`.
|
||||
- See: [Sometimes pressing on arrow keys prints symbols #1691](https://github.com/Maximus5/ConEmu/issues/169)
|
||||
- Fix Git prompt branch when using Git worktree.
|
||||
- Fix #2654: blank space added between {cwd} and version_control variable by @geekrumper in https://github.com/cmderdev/cmder/pull/2661
|
||||
- Fix #2659: Use get_hg_branch() to get Mercurial branch information. by @vsajip in https://github.com/cmderdev/cmder/pull/2660
|
||||
- Fix Git prompt branch when using Git worktree by @daxgames in https://github.com/cmderdev/cmder/pull/2680
|
||||
- Add optional clink async prompt update for svn status by @Mikaz-fr in https://github.com/cmderdev/cmder/pull/2703
|
||||
- Better bat by @daxgames in https://github.com/cmderdev/cmder/pull/2742
|
||||
- Related to #2654: Move space from "{git}{hg}{svn}" to individual parts by @DRSDavidSoft in https://github.com/cmderdev/cmder/pull/2738
|
||||
- Use TaskDialog instead of MessageBox (Fixes Builds) by @DRSDavidSoft in https://github.com/cmderdev/cmder/pull/2746
|
||||
- Add bin\cmder_shell.cmd by @DRSDavidSoft in https://github.com/cmderdev/cmder/pull/2747
|
||||
- Fix build system scripts (closes #2723) by @DRSDavidSoft in https://github.com/cmderdev/cmder/pull/2748
|
||||
- Custom option for launcher title by @DRSDavidSoft in https://github.com/cmderdev/cmder/pull/2752
|
||||
- Use Github Actions to build and release by @MartiUK in https://github.com/cmderdev/cmder/pull/2725
|
||||
- Re-factor the build script to distinguish each step by @DRSDavidSoft in https://github.com/cmderdev/cmder/pull/2758
|
||||
|
||||
## [1.3.19](https://github.com/cmderdev/cmder/tree/v1.3.19) (2022-01-15)
|
||||
|
||||
@ -666,7 +678,7 @@ We now use a forked version of clink since its original author is missing and we
|
||||
* 'ls' is no longer recognized command [\#757](https://github.com/cmderdev/cmder/issues/757)
|
||||
* I can't run de Cmder.exe [\#755](https://github.com/cmderdev/cmder/issues/755)
|
||||
* Multiple location references when maximizing [\#753](https://github.com/cmderdev/cmder/issues/753)
|
||||
* CLink completions for npm increase cmder startup time for one second [\#750](https://github.com/cmderdev/cmder/issues/750)
|
||||
* Clink completions for npm increase cmder startup time for one second [\#750](https://github.com/cmderdev/cmder/issues/750)
|
||||
* Prevent other apps from overwriting the prompt? [\#749](https://github.com/cmderdev/cmder/issues/749)
|
||||
* cmder.exe infected with Variant.Kazy.767238 [\#748](https://github.com/cmderdev/cmder/issues/748)
|
||||
* cmder.exe considered harmful by Bitdefender [\#744](https://github.com/cmderdev/cmder/issues/744)
|
||||
|
@ -1,6 +1,6 @@
|
||||
# How to contribute
|
||||
|
||||
Unfortunately we all can't work on cmder every day of the year, so I have decided to write some guidelines for contributing.
|
||||
Unfortunately we all can't work on Cmder every day of the year, so I have decided to write some guidelines for contributing.
|
||||
|
||||
If you follow them your contribution will likely be pulled in quicker.
|
||||
|
||||
|
@ -5,7 +5,12 @@ SET CMDER_ROOT=%~dp0
|
||||
@if "%CMDER_ROOT:~-1%" == "\" SET CMDER_ROOT=%CMDER_ROOT:~0,-1%
|
||||
|
||||
if not exist "%CMDER_ROOT%\config\user_ConEmu.xml" (
|
||||
copy "%CMDER_ROOT%\vendor\ConEmu.xml.default" "%CMDER_ROOT%\config\user_ConEmu.xml"
|
||||
if not exist "%CMDER_ROOT%\config" mkdir "%CMDER_ROOT%\config" 2>nul
|
||||
copy "%CMDER_ROOT%\vendor\ConEmu.xml.default" "%CMDER_ROOT%\config\user_ConEmu.xml" 1>nul
|
||||
if %errorlevel% neq 0 (
|
||||
echo ERROR: CMDER Initialization has Failed
|
||||
exit /b 1
|
||||
)
|
||||
)
|
||||
|
||||
if exist "%~1" (
|
||||
|
32
README.md
32
README.md
@ -1,6 +1,6 @@
|
||||
# Cmder
|
||||
|
||||
[](https://gitter.im/cmderdev/cmder?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [](https://ci.appveyor.com/project/MartiUK/cmder) [](https://github.com/cmderdev/cmder/actions/workflows/build.yml)
|
||||
[](https://gitter.im/cmderdev/cmder?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [](https://ci.appveyor.com/project/cmderdev/cmder) [](https://github.com/cmderdev/cmder/actions/workflows/build.yml)
|
||||
|
||||
Cmder is a **software package** created out of pure frustration over absence of usable console emulator on Windows. It is based on [ConEmu](https://conemu.github.io/) with *major* config overhaul, comes with a Monokai color scheme, amazing [clink](https://chrisant996.github.io/clink/) (further enhanced by [clink-completions](https://github.com/vladimir-kotikov/clink-completions)) and a custom prompt layout.
|
||||
|
||||
@ -8,7 +8,7 @@ Cmder is a **software package** created out of pure frustration over absence of
|
||||
|
||||
## Why use it
|
||||
|
||||
The main advantage of Cmder is portability. It is designed to be totally self-contained with no external dependencies, which makes it great for **USB Sticks** or **cloud storage**. So you can carry your console, aliases and binaries (like wget, curl and git) with you anywhere.
|
||||
The main advantage of Cmder is portability. It is designed to be totally self-contained with no external dependencies, which makes it great for **USB Sticks** or **cloud storage**. So you can carry your console, aliases and binaries (like `wget`, `curl` and `git`) with you anywhere.
|
||||
|
||||
The Cmder's user interface is also designed to be more eye pleasing, and you can compare the main differences between Cmder and ConEmu [here](https://conemu.github.io/en/cmder.html).
|
||||
|
||||
@ -71,7 +71,7 @@ So you've experimented with Cmder a little and want to give it a shot in a more
|
||||
1. Open a terminal as an Administrator
|
||||
2. Navigate to the directory you have placed Cmder
|
||||
3. Execute `.\cmder.exe /REGISTER ALL`
|
||||
_If you get a message "Access Denied" ensure you are executing the command in an **Administrator** prompt._
|
||||
_If you get an "Access Denied" message, make sure you are executing the command in an **Administrator** prompt._
|
||||
|
||||
In a file explorer window right click in or on a directory to see "Cmder Here" in the context menu.
|
||||
|
||||
@ -115,11 +115,11 @@ You can open multiple tabs each containing one of the following shells:
|
||||
|
||||
Cmder, PowerShell, and Bash tabs all run on top of the Windows Console API and work as you might expect in Cmder with access to use ConEmu's color schemes, key bindings and other settings defined in the ConEmu Settings dialog.
|
||||
|
||||
⚠ *NOTE:* Only the full edition of Cmder comes with a pre-installed bash, using a vendored [git-for-windows](https://gitforwindows.org/) installation. The pre-configured Bash tabs may not work on Cmder mini edition without additional configuration.
|
||||
⚠ *Note:* Only the full edition of Cmder comes with a pre-installed bash, using a vendored [git-for-windows](https://gitforwindows.org/) installation. The pre-configured Bash tabs may not work on Cmder mini edition without additional configuration.
|
||||
|
||||
You may however, choose to use an external installation of bash, such as Microsoft's [Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10) (called WSL) or the [Cygwin](https://cygwin.com/) project which provides POSIX support on windows.
|
||||
|
||||
⚠ *NOTE:* Mintty tabs use a program called 'mintty' as the terminal emulator that is not based on the Windows Console API, rather it's rendered graphically by ConEmu. Mintty differs from the other tabs in that it supports xterm/xterm-256color TERM types, and does not work with ConEmu settings like color schemes and key bindings. As such, some differences in functionality are to be expected, such as Cmder not being able to apply a system-wide configuration to it.
|
||||
⚠ *Note:* Mintty tabs use a program called 'mintty' as the terminal emulator that is not based on the Windows Console API, rather it's rendered graphically by ConEmu. Mintty differs from the other tabs in that it supports xterm/xterm-256color TERM types, and does not work with ConEmu settings like color schemes and key bindings. As such, some differences in functionality are to be expected, such as Cmder not being able to apply a system-wide configuration to it.
|
||||
|
||||
As a result mintty specific config is done via the `[%USERPROFILE%|$HOME]/.minttyrc` file. You may read more about Mintty and its config file [here](https://github.com/mintty/mintty).
|
||||
|
||||
@ -188,7 +188,7 @@ Documentation is in the file for each setting.
|
||||
| (custom arguments) | User defined arguments processed by `cexec`. Type `cexec /?` for more usage. | not set |
|
||||
|
||||
### Cmder Shell User Config
|
||||
Single user portable configuration is possible using the cmder specific shell config files. Edit the below files to add your own configuration:
|
||||
Single user portable configuration is possible using the Cmder specific shell config files. Edit the below files to add your own configuration:
|
||||
|
||||
| Shell | Cmder Portable User Config |
|
||||
| ------------- | ----------------------------------------- |
|
||||
@ -196,7 +196,7 @@ Single user portable configuration is possible using the cmder specific shell co
|
||||
| PowerShell | `$ENV:CMDER_ROOT\config\user_profile.ps1` |
|
||||
| Bash/Mintty | `$CMDER_ROOT/config/user_profile.sh` |
|
||||
|
||||
Note: Bash and Mintty sessions will also source the `$HOME/.bashrc` file if it exists after it sources `$CMDER_ROOT/config/user_profile.sh`.
|
||||
**Note:** Bash and Mintty sessions will also source the `$HOME/.bashrc` file if it exists after it sources `$CMDER_ROOT/config/user_profile.sh`.
|
||||
|
||||
You can write `*.cmd|*.bat`, `*.ps1`, and `*.sh` scripts and just drop them in the `%CMDER_ROOT%\config\profile.d` folder to add startup config to Cmder.
|
||||
|
||||
@ -230,7 +230,7 @@ Aliases defined using the `alias.bat` command will automatically be saved in the
|
||||
|
||||
To make an alias and/or any other profile settings permanent add it to one of the following:
|
||||
|
||||
Note: These are loaded in this order by `$CMDER_ROOT/vendor/init.bat`. Anything stored in `%CMDER_ROOT%` will be a portable setting and will follow cmder to another machine.
|
||||
Note: These are loaded in this order by `$CMDER_ROOT/vendor/init.bat`. Anything stored in `%CMDER_ROOT%` will be a portable setting and will follow Cmder to another machine.
|
||||
|
||||
* `%CMDER_ROOT%\config\profile.d\*.cmd` and `\*.bat`
|
||||
* `%CMDER_ROOT%\config\user_aliases.cmd`
|
||||
@ -241,7 +241,7 @@ Bash shells support simple and complex aliases with optional parameters natively
|
||||
|
||||
To make an alias and/or any other profile settings permanent add it to one of the following:
|
||||
|
||||
Note: These are loaded in this order by `$CMDER_ROOT/vendor/git-for-windows/etc/profile.d/cmder.sh`. Anything stored in `$CMDER_ROOT` will be a portable setting and will follow cmder to another machine.
|
||||
Note: These are loaded in this order by `$CMDER_ROOT/vendor/git-for-windows/etc/profile.d/cmder.sh`. Anything stored in `$CMDER_ROOT` will be a portable setting and will follow Cmder to another machine.
|
||||
|
||||
* `$CMDER_ROOT/config/profile.d/*.sh`
|
||||
* `$CMDER_ROOT/config/user_profile.sh`
|
||||
@ -254,7 +254,7 @@ PowerShell has native simple alias support, for example `[new-alias | set-alias]
|
||||
|
||||
To make an alias and/or any other profile settings permanent add it to one of the following:
|
||||
|
||||
Note: These are loaded in this order by `$ENV:CMDER_ROOT\vendor\user_profile.ps1`. Anything stored in `$ENV:CMDER_ROOT` will be a portable setting and will follow cmder to another machine.
|
||||
Note: These are loaded in this order by `$ENV:CMDER_ROOT\vendor\user_profile.ps1`. Anything stored in `$ENV:CMDER_ROOT` will be a portable setting and will follow Cmder to another machine.
|
||||
|
||||
* `$ENV:CMDER_ROOT\config\profile.d\*.ps1`
|
||||
* `$ENV:CMDER_ROOT\config\user_profile.ps1`
|
||||
@ -292,7 +292,7 @@ The destination file extension depends on the shell you use in that environment.
|
||||
* bash - Copy to `/etc/profile.d/cmder_exinit.sh`
|
||||
* zsh - Copy to `/etc/profile.d/cmder_exinit.zsh`
|
||||
|
||||
Uncomment and edit the below line in the script to use Cmder config even when launched from outside Cmder.
|
||||
Uncomment and edit the line below in the script to use Cmder config even when launched from outside Cmder.
|
||||
|
||||
```
|
||||
# CMDER_ROOT=${USERPROFILE}/cmder # This is not required if launched from Cmder.
|
||||
@ -344,9 +344,9 @@ To conditionally start `notepad.exe` when you start a specific `cmder` task:
|
||||
|
||||
```
|
||||
|
||||
To see detailed usage of `cexec`, type `cexec /?` in cmder.
|
||||
To see detailed usage of `cexec`, type `cexec /?` in Cmder.
|
||||
|
||||
### Integrating Cmder with [Hyper](https://github.com/zeit/hyper), [Microsoft VS Code](https://code.visualstudio.com/), and your favorite IDEs
|
||||
### Integrating Cmder with [Windows Terminal](https://github.com/cmderdev/cmder/wiki/Seamless-Windows-Terminal-Integration), [VS Code](https://github.com/cmderdev/cmder/wiki/Seamless-VS-Code-Integration), and your favorite IDEs
|
||||
|
||||
Cmder by default comes with a vendored ConEmu installation as the underlying terminal emulator, as stated [here](https://conemu.github.io/en/cmder.html).
|
||||
|
||||
@ -386,7 +386,11 @@ If you do not have a `[cmder_root]/config/user[-|_]conemu.xml`, you are running
|
||||
|
||||
You can download builds of the current development branch by going to AppVeyor via the following link:
|
||||
|
||||
[](https://ci.appveyor.com/project/MartiUK/cmder/branch/master/artifacts)
|
||||
[](https://ci.appveyor.com/project/cmderdev/cmder/branch/master/artifacts)
|
||||
|
||||
The latest download builds by GitHub Actions can be downloaded from the link below:
|
||||
|
||||
[](https://github.com/cmderdev/cmder/actions/workflows/build.yml)
|
||||
|
||||
## License
|
||||
|
||||
|
24
SECURITY.md
Normal file
24
SECURITY.md
Normal file
@ -0,0 +1,24 @@
|
||||
# Security Policy
|
||||
|
||||
## Supported Versions
|
||||
|
||||
| Version | Supported |
|
||||
| ------- | ------------------ |
|
||||
| 1.3.x | :white_check_mark: |
|
||||
| < 1.3 | ❎ |
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
If you discover a security issue in our project, please report it to [MartiUK](https://github.com/MartiUK). We will acknowledge your email within 24 hours and provide a more detailed response within 48 hours. We will try to fix the issue as soon as possible and inform you when a new version is released.
|
||||
|
||||
Please include as much of the information listed below as you can to help us better understand and resolve the issue:
|
||||
|
||||
- The nature of the issue
|
||||
- The affected source file(s) with full paths
|
||||
- The location of the vulnerable code (tag/branch/commit or direct URL)
|
||||
- Any special configuration needed to reproduce the issue
|
||||
- Detailed steps to reproduce the issue
|
||||
- Proof-of-concept or exploit code (if possible)
|
||||
- The impact of the issue, including how an attacker could exploit it
|
||||
|
||||
Please do not disclose the vulnerability publicly until we have resolved it.
|
66
Vagrantfile
vendored
Normal file
66
Vagrantfile
vendored
Normal file
@ -0,0 +1,66 @@
|
||||
required_plugins = %w( vagrant-vbguest )
|
||||
required_plugins.each do |plugin|
|
||||
unless Vagrant.has_plugin? plugin
|
||||
system "vagrant plugin install #{plugin}"
|
||||
p "Run 'vagrant up' again to continue."
|
||||
exit 0
|
||||
end
|
||||
end
|
||||
|
||||
Vagrant.configure("2") do |config|
|
||||
# config.vbguest.iso_path = "../../../../usr/share/virtualbox/VBoxGuestAdditions.iso"
|
||||
config.vbguest.allow_downgrade = true
|
||||
|
||||
config.vm.define "cmderdev-10" do |b|
|
||||
b.vm.hostname = "cmderdev-10"
|
||||
b.vm.box = "dgames/cmderdev-10"
|
||||
b.vm.box_version = "1.0.0"
|
||||
|
||||
b.vm.provider :virtualbox do |v|
|
||||
# v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
|
||||
v.customize ["modifyvm", :id, "--name", "cmderdev-10"]
|
||||
v.customize ["modifyvm", :id, "--ostype", "Windows10_64"]
|
||||
v.customize ["modifyvm", :id, "--graphicscontroller", "vboxsvga"]
|
||||
v.customize ["modifyvm", :id, "--memory", 2048]
|
||||
v.customize ["modifyvm", :id, "--clipboard", "bidirectional"]
|
||||
end
|
||||
end
|
||||
|
||||
config.vm.define "cmderdev-10s" do |b|
|
||||
b.vm.hostname = 'cmderdev-10'
|
||||
b.vm.box = "dgames/cmderdev-10"
|
||||
b.vm.box_version = "1.0.0"
|
||||
|
||||
b.vm.provider :virtualbox do |v|
|
||||
# v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
|
||||
v.customize ["modifyvm", :id, "--name", "cmderdev-10s"]
|
||||
v.customize ["modifyvm", :id, "--ostype", "Windows10_64"]
|
||||
v.customize ["modifyvm", :id, "--graphicscontroller", "vboxsvga"]
|
||||
v.customize ["modifyvm", :id, "--memory", 2048]
|
||||
v.customize ["modifyvm", :id, "--clipboard", "bidirectional"]
|
||||
v.customize ["setextradata", :id, "GUI/ScaleFactor", "1.75"]
|
||||
end
|
||||
end
|
||||
|
||||
config.vm.define "cmderdev-11" do |b|
|
||||
b.vm.box = "dgames/cmderdev-11"
|
||||
b.vm.box_version = "1.0.0"
|
||||
|
||||
b.vm.provider :virtualbox do |v|
|
||||
# v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
|
||||
v.customize ["modifyvm", :id, "--name", "cmderdev-11"]
|
||||
v.customize ["modifyvm", :id, "--ostype", "Windows11_64"]
|
||||
v.customize ["modifyvm", :id, "--graphicscontroller", "vboxvga"]
|
||||
v.customize ["modifyvm", :id, "--memory", 4096]
|
||||
v.customize ["modifyvm", :id, "--clipboard", "bidirectional"]
|
||||
end
|
||||
end
|
||||
|
||||
config.vm.provision "file", source: "./scripts/vagrant/windows_terminal_settings.json.default", destination: "windows_terminal_settings.json.default"
|
||||
config.vm.provision "file", source: "./scripts/vagrant/windows_terminal_state.json.default", destination: "windows_terminal_state.json.default"
|
||||
config.vm.provision "file", source: "./vendor/bin/set-shortcut.ps1", destination: "c:\\windows\\set-shortcut.ps1"
|
||||
config.vm.provision "shell", path: './scripts/vagrant/add-cmder.ps1'
|
||||
config.vm.provision "shell", path: './vendor/bin/add-vscodeprofile.ps1'
|
||||
config.vm.provision "shell", path: './vendor/bin/add-windowsterminalprofiles.ps1'
|
||||
config.vm.provision "shell", path: './vendor/bin/add-cmdertodesktop.ps1'
|
||||
end
|
60
appveyor.yml
60
appveyor.yml
@ -1,60 +0,0 @@
|
||||
#---------------------------------#
|
||||
# general configuration #
|
||||
#---------------------------------#
|
||||
|
||||
version: 1.0.{build}-{branch}
|
||||
|
||||
# branches to build
|
||||
branches:
|
||||
# blacklist
|
||||
except:
|
||||
- gh-pages
|
||||
|
||||
#---------------------------------#
|
||||
# environment configuration #
|
||||
#---------------------------------#
|
||||
|
||||
# Operating system (build VM template)
|
||||
os: Visual Studio 2022
|
||||
|
||||
#---------------------------------#
|
||||
# build configuration #
|
||||
#---------------------------------#
|
||||
|
||||
build_script:
|
||||
- ps: cd scripts; .\build.ps1 -Compile -verbose
|
||||
|
||||
after_build:
|
||||
- ps: .\pack.ps1 -verbose
|
||||
|
||||
# Disable test search, since we don't have any.
|
||||
test: off
|
||||
|
||||
#---------------------------------#
|
||||
# artifacts #
|
||||
#---------------------------------#
|
||||
|
||||
artifacts:
|
||||
- path: build\cmder.zip
|
||||
name: cmderzip
|
||||
|
||||
- path: build\cmder.7z
|
||||
name: cmder7z
|
||||
|
||||
- path: build\cmder_mini.zip
|
||||
name: cmdermini
|
||||
|
||||
- path: build\hashes.txt
|
||||
name: hashes
|
||||
|
||||
#---------------------------------#
|
||||
# notifications #
|
||||
#---------------------------------#
|
||||
|
||||
notifications:
|
||||
# Webhook
|
||||
- provider: Webhook
|
||||
url: https://webhooks.gitter.im/e/d673abb1b2e659dcd625
|
||||
on_build_success: true
|
||||
on_build_failure: true
|
||||
on_build_status_changed: true
|
@ -425,11 +425,6 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr
|
||||
swprintf_s(args, L"%s /single", args);
|
||||
}
|
||||
|
||||
if (!streqi(cmderTask.c_str(), L""))
|
||||
{
|
||||
swprintf_s(args, L"%s /run {%s}", args, cmderTask.c_str());
|
||||
}
|
||||
|
||||
if (!streqi(cmderTitle.c_str(), L""))
|
||||
{
|
||||
swprintf_s(args, L"%s /title \"%s\"", args, cmderTitle.c_str());
|
||||
@ -445,6 +440,14 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr
|
||||
swprintf_s(args, L"%s %s", args, cmderConEmuArgs.c_str());
|
||||
}
|
||||
|
||||
// The `/run` arg and its value MUST be the last arg of ConEmu
|
||||
// see : https://conemu.github.io/en/ConEmuArgs.html
|
||||
// > This must be the last used switch (excepting -new_console and -cur_console)
|
||||
if (!streqi(cmderTask.c_str(), L""))
|
||||
{
|
||||
swprintf_s(args, L"%s /run {%s}", args, cmderTask.c_str());
|
||||
}
|
||||
|
||||
SetEnvironmentVariable(L"CMDER_ROOT", exeDir);
|
||||
if (wcscmp(userConfigDirPath, configDirPath) != 0)
|
||||
{
|
||||
|
@ -39,12 +39,12 @@
|
||||
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
|
||||
<!-- Windows 8.1 -->
|
||||
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
|
||||
<!-- Windows 10 -->
|
||||
<!-- Windows 10 and Windows 11 -->
|
||||
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
|
||||
</application>
|
||||
</compatibility>
|
||||
|
||||
<!-- Add dpi awareness -->
|
||||
<!-- Add DPI awareness -->
|
||||
<asmv3:application>
|
||||
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
|
||||
<dpiAware>true/pm</dpiAware>
|
||||
|
@ -3,12 +3,15 @@ launcher
|
||||
.gitattributes
|
||||
.git
|
||||
.github
|
||||
.vs
|
||||
.vscode
|
||||
.idea
|
||||
*.md
|
||||
build
|
||||
scripts
|
||||
config\.history
|
||||
packignore
|
||||
icons\Thumbs.db
|
||||
Thumbs.db
|
||||
icons\cmder_icon.psd
|
||||
icons\icon_16*.png
|
||||
icons\icon_32*.png
|
||||
@ -20,3 +23,7 @@ appveyor.yml
|
||||
vendor\cmder.sh
|
||||
vendor\git-prompt.sh
|
||||
config\user-*
|
||||
clink_history*
|
||||
*.log
|
||||
Vagrantfile
|
||||
*.box
|
||||
|
@ -35,7 +35,7 @@
|
||||
.LINK
|
||||
http://cmder.app/ - Project Home
|
||||
#>
|
||||
[CmdletBinding(SupportsShouldProcess=$true)]
|
||||
[CmdletBinding(SupportsShouldProcess = $true)]
|
||||
Param(
|
||||
# CmdletBinding will give us;
|
||||
# -verbose switch to turn on logging and
|
||||
@ -88,7 +88,7 @@ if ($Compile) {
|
||||
Pop-Location
|
||||
}
|
||||
|
||||
if (-Not $noVendor) {
|
||||
if (-not $noVendor) {
|
||||
# Check for requirements
|
||||
Ensure-Exists $sourcesPath
|
||||
Ensure-Executable "7z"
|
||||
@ -108,12 +108,14 @@ if (-Not $noVendor) {
|
||||
$ConEmuXmlSave = Join-Path $config "ConEmu.xml"
|
||||
Write-Verbose "Backup '$ConEmuXml' to '$ConEmuXmlSave'"
|
||||
Copy-Item $ConEmuXml $ConEmuXmlSave
|
||||
} else { $ConEmuXml = "" }
|
||||
} else { $ConEmuXml = "" }
|
||||
}
|
||||
else { $ConEmuXml = "" }
|
||||
}
|
||||
else { $ConEmuXml = "" }
|
||||
|
||||
# Kill ssh-agent.exe if it is running from the $env:cmder_root we are building
|
||||
foreach ($ssh_agent in $(Get-Process ssh-agent -ErrorAction SilentlyContinue)) {
|
||||
if ([string]$($ssh_agent.path) -Match [string]$cmder_root.replace('\','\\')) {
|
||||
if ([string]$($ssh_agent.path) -Match [string]$cmder_root.replace('\', '\\')) {
|
||||
Write-Verbose $("Stopping " + $ssh_agent.path + "!")
|
||||
Stop-Process $ssh_agent.id
|
||||
}
|
||||
@ -160,7 +162,7 @@ if (-Not $noVendor) {
|
||||
Pop-Location
|
||||
}
|
||||
|
||||
if (-Not $Compile -Or $noVendor) {
|
||||
if (-not $Compile -or $noVendor) {
|
||||
Write-Warning "You are not building the full project, Use -Compile without -noVendor"
|
||||
Write-Warning "This cannot be a release. Test build only!"
|
||||
return
|
||||
|
@ -22,7 +22,7 @@
|
||||
https://github.com/cmderdev/cmder - Project Home
|
||||
#>
|
||||
|
||||
[CmdletBinding(SupportsShouldProcess=$true)]
|
||||
[CmdletBinding(SupportsShouldProcess = $true)]
|
||||
Param(
|
||||
# CmdletBinding will give us;
|
||||
# -verbose switch to turn on logging and
|
||||
@ -42,9 +42,9 @@ $ErrorActionPreference = "Stop"
|
||||
Ensure-Executable "7z"
|
||||
|
||||
$targets = @{
|
||||
"cmder.zip" = $null;
|
||||
"cmder.7z" = "-t7z -m0=lzma2 -mx=9 -mfb=64 -md=32m -ms=on";
|
||||
"cmder_mini.zip" = "-mm=Deflate -mfb=258 -mpass=15 -xr!`"vendor\git-for-windows`"";
|
||||
"cmder.7z" = "-t7z -m0=lzma2 -mx=9 -mfb=64 -md=32m -ms=on -myx=7 -mqs=on";
|
||||
"cmder.zip" = "-mm=Deflate -mfb=128 -mpass=3";
|
||||
"cmder_mini.zip" = "-xr!`"vendor\git-for-windows`"";
|
||||
}
|
||||
|
||||
Push-Location -Path $cmderRoot
|
||||
@ -63,7 +63,7 @@ $version = Get-VersionStr
|
||||
|
||||
if ($PSCmdlet.MyInvocation.BoundParameters["Verbose"].IsPresent) {
|
||||
Write-Verbose "Packing Cmder $version in $saveTo..."
|
||||
$excluded = (Get-Content -Path "$cmderRoot\packignore") -Split [System.Environment]::NewLine | Where-Object {$_}
|
||||
$excluded = (Get-Content -Path "$cmderRoot\packignore") -Split [System.Environment]::NewLine | Where-Object { $_ }
|
||||
Get-ChildItem $cmderRoot -Force -Exclude $excluded
|
||||
}
|
||||
|
||||
|
8
scripts/packer/README.md
Normal file
8
scripts/packer/README.md
Normal file
@ -0,0 +1,8 @@
|
||||
# Packer Support - Release Notes
|
||||
|
||||
Most of the Packer support for Cmder is shamelessly being borrowed from the following repositories.
|
||||
|
||||
- [StefanScherer/packer-windows](https://github.com/StefanScherer/packer-windows)
|
||||
- [Baune8D/packer-windows-desktop](https://github.com/Baune8D/packer-windows-desktop)
|
||||
|
||||
Thank you both for the good work!
|
228
scripts/packer/answer_files/10_efi/Autounattend.xml
Normal file
228
scripts/packer/answer_files/10_efi/Autounattend.xml
Normal file
@ -0,0 +1,228 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<unattend xmlns="urn:schemas-microsoft-com:unattend">
|
||||
<servicing/>
|
||||
<settings pass="windowsPE">
|
||||
<component xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
|
||||
<DiskConfiguration>
|
||||
<Disk wcm:action="add">
|
||||
<CreatePartitions>
|
||||
<CreatePartition wcm:action="add">
|
||||
<Order>1</Order>
|
||||
<Size>500</Size>
|
||||
<Type>EFI</Type>
|
||||
</CreatePartition>
|
||||
<CreatePartition wcm:action="add">
|
||||
<Order>2</Order>
|
||||
<Size>128</Size>
|
||||
<Type>MSR</Type>
|
||||
</CreatePartition>
|
||||
<CreatePartition wcm:action="add">
|
||||
<Order>3</Order>
|
||||
<Extend>true</Extend>
|
||||
<Type>Primary</Type>
|
||||
</CreatePartition>
|
||||
</CreatePartitions>
|
||||
<DiskID>0</DiskID>
|
||||
<WillWipeDisk>true</WillWipeDisk>
|
||||
</Disk>
|
||||
</DiskConfiguration>
|
||||
<UserData>
|
||||
<AcceptEula>true</AcceptEula>
|
||||
<FullName>Vagrant</FullName>
|
||||
<Organization>Vagrant</Organization>
|
||||
<ProductKey>
|
||||
<Key>W269N-WFGWX-YVC9B-4J6C9-T83GX</Key>
|
||||
<WillShowUI>Never</WillShowUI>
|
||||
</ProductKey>
|
||||
</UserData>
|
||||
<ImageInstall>
|
||||
<OSImage>
|
||||
<InstallTo>
|
||||
<DiskID>0</DiskID>
|
||||
<PartitionID>3</PartitionID>
|
||||
</InstallTo>
|
||||
<WillShowUI>OnError</WillShowUI>
|
||||
<InstallToAvailablePartition>false</InstallToAvailablePartition>
|
||||
</OSImage>
|
||||
</ImageInstall>
|
||||
</component>
|
||||
<component xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
|
||||
<SetupUILanguage>
|
||||
<UILanguage>en-US</UILanguage>
|
||||
</SetupUILanguage>
|
||||
<InputLocale>en-US</InputLocale>
|
||||
<SystemLocale>en-US</SystemLocale>
|
||||
<UILanguage>en-US</UILanguage>
|
||||
<UILanguageFallback>en-US</UILanguageFallback>
|
||||
<UserLocale>en-US</UserLocale>
|
||||
</component>
|
||||
</settings>
|
||||
<settings pass="offlineServicing">
|
||||
<component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
|
||||
<EnableLUA>false</EnableLUA>
|
||||
</component>
|
||||
</settings>
|
||||
<settings pass="oobeSystem">
|
||||
<component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<InputLocale>en-US</InputLocale>
|
||||
<SystemLocale>en-US</SystemLocale>
|
||||
<UILanguage>en-US</UILanguage>
|
||||
<UserLocale>en-US</UserLocale>
|
||||
</component>
|
||||
<component xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
|
||||
<UserAccounts>
|
||||
<AdministratorPassword>
|
||||
<Value>vagrant</Value>
|
||||
<PlainText>true</PlainText>
|
||||
</AdministratorPassword>
|
||||
<LocalAccounts>
|
||||
<LocalAccount wcm:action="add">
|
||||
<Password>
|
||||
<Value>vagrant</Value>
|
||||
<PlainText>true</PlainText>
|
||||
</Password>
|
||||
<Description>Vagrant User</Description>
|
||||
<DisplayName>vagrant</DisplayName>
|
||||
<Group>administrators</Group>
|
||||
<Name>vagrant</Name>
|
||||
</LocalAccount>
|
||||
</LocalAccounts>
|
||||
</UserAccounts>
|
||||
<OOBE>
|
||||
<HideEULAPage>true</HideEULAPage>
|
||||
<HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
|
||||
<NetworkLocation>Home</NetworkLocation>
|
||||
<ProtectYourPC>1</ProtectYourPC>
|
||||
</OOBE>
|
||||
<AutoLogon>
|
||||
<Password>
|
||||
<Value>vagrant</Value>
|
||||
<PlainText>true</PlainText>
|
||||
</Password>
|
||||
<Username>vagrant</Username>
|
||||
<Enabled>true</Enabled>
|
||||
</AutoLogon>
|
||||
<FirstLogonCommands>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>cmd.exe /c powershell -Command "Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force"</CommandLine>
|
||||
<Description>Set Execution Policy 64 Bit</Description>
|
||||
<Order>1</Order>
|
||||
<RequiresUserInput>true</RequiresUserInput>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>C:\Windows\SysWOW64\cmd.exe /c powershell -Command "Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force"</CommandLine>
|
||||
<Description>Set Execution Policy 32 Bit</Description>
|
||||
<Order>2</Order>
|
||||
<RequiresUserInput>true</RequiresUserInput>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>cmd.exe /c reg add "HKLM\System\CurrentControlSet\Control\Network\NewNetworkWindowOff"</CommandLine>
|
||||
<Description>Network prompt</Description>
|
||||
<Order>3</Order>
|
||||
<RequiresUserInput>true</RequiresUserInput>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>cmd.exe /c C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File e:\fixnetwork.ps1</CommandLine>
|
||||
<Description>Fix public network</Description>
|
||||
<Order>4</Order>
|
||||
<RequiresUserInput>true</RequiresUserInput>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File e:\disable-winrm.ps1</CommandLine>
|
||||
<Description>Disable WinRM</Description>
|
||||
<Order>5</Order>
|
||||
<RequiresUserInput>true</RequiresUserInput>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>%SystemRoot%\System32\reg.exe ADD HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ /v HideFileExt /t REG_DWORD /d 0 /f</CommandLine>
|
||||
<Order>6</Order>
|
||||
<Description>Show file extensions in Explorer</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>%SystemRoot%\System32\reg.exe ADD HKCU\Console /v QuickEdit /t REG_DWORD /d 1 /f</CommandLine>
|
||||
<Order>7</Order>
|
||||
<Description>Enable QuickEdit mode</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>%SystemRoot%\System32\reg.exe ADD HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ /v Start_ShowRun /t REG_DWORD /d 1 /f</CommandLine>
|
||||
<Order>8</Order>
|
||||
<Description>Show Run command in Start Menu</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>%SystemRoot%\System32\reg.exe ADD HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ /v StartMenuAdminTools /t REG_DWORD /d 1 /f</CommandLine>
|
||||
<Order>9</Order>
|
||||
<Description>Show Administrative Tools in Start Menu</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>%SystemRoot%\System32\reg.exe ADD HKLM\SYSTEM\CurrentControlSet\Control\Power\ /v HibernateFileSizePercent /t REG_DWORD /d 0 /f</CommandLine>
|
||||
<Order>10</Order>
|
||||
<Description>Zero Hibernation File</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>%SystemRoot%\System32\reg.exe ADD HKLM\SYSTEM\CurrentControlSet\Control\Power\ /v HibernateEnabled /t REG_DWORD /d 0 /f</CommandLine>
|
||||
<Order>11</Order>
|
||||
<Description>Disable Hibernation Mode</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>cmd.exe /c wmic useraccount where "name='vagrant'" set PasswordExpires=FALSE</CommandLine>
|
||||
<Order>12</Order>
|
||||
<Description>Disable password expiration for vagrant user</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>%SystemRoot%\System32\reg.exe ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /t REG_SZ /d "vagrant" /f</CommandLine>
|
||||
<Order>13</Order>
|
||||
<Description>Enable AutoLogon</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>%SystemRoot%\System32\reg.exe ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 1 /f</CommandLine>
|
||||
<Order>14</Order>
|
||||
<Description>Enable AutoLogon</Description>
|
||||
</SynchronousCommand>
|
||||
<!-- WITHOUT WINDOWS UPDATES -->
|
||||
<!--
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>cmd.exe /c C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File e:\enable-winrm.ps1</CommandLine>
|
||||
<Description>Enable WinRM</Description>
|
||||
<Order>99</Order>
|
||||
</SynchronousCommand>
|
||||
-->
|
||||
<!-- END WITHOUT WINDOWS UPDATES -->
|
||||
<!-- WITH WINDOWS UPDATES -->
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>cmd.exe /c e:\microsoft-updates.bat</CommandLine>
|
||||
<Order>98</Order>
|
||||
<Description>Enable Microsoft Updates</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>cmd.exe /c C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File e:\disable-screensaver.ps1</CommandLine>
|
||||
<Description>Disable Screensaver</Description>
|
||||
<Order>99</Order>
|
||||
<RequiresUserInput>true</RequiresUserInput>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>cmd.exe /c C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File e:\win-updates.ps1</CommandLine>
|
||||
<Description>Install Windows Updates</Description>
|
||||
<Order>100</Order>
|
||||
<RequiresUserInput>true</RequiresUserInput>
|
||||
</SynchronousCommand>
|
||||
<!-- END WITH WINDOWS UPDATES -->
|
||||
</FirstLogonCommands>
|
||||
<ShowWindowsLive>false</ShowWindowsLive>
|
||||
</component>
|
||||
</settings>
|
||||
<settings pass="specialize">
|
||||
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
|
||||
<OEMInformation>
|
||||
<HelpCustomized>false</HelpCustomized>
|
||||
</OEMInformation>
|
||||
<!-- Rename computer here. -->
|
||||
<ComputerName>vagrant-win10</ComputerName>
|
||||
<TimeZone>Pacific Standard Time</TimeZone>
|
||||
<RegisteredOwner/>
|
||||
</component>
|
||||
<component xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
|
||||
<SkipAutoActivation>true</SkipAutoActivation>
|
||||
</component>
|
||||
</settings>
|
||||
<cpi:offlineImage xmlns:cpi="urn:schemas-microsoft-com:cpi" cpi:source="catalog:d:/sources/install_windows 7 ENTERPRISE.clg"/>
|
||||
</unattend>
|
298
scripts/packer/answer_files/11/Autounattend.xml
Normal file
298
scripts/packer/answer_files/11/Autounattend.xml
Normal file
@ -0,0 +1,298 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<unattend xmlns="urn:schemas-microsoft-com:unattend">
|
||||
<servicing/>
|
||||
<settings pass="windowsPE">
|
||||
<component name="Microsoft-Windows-PnpCustomizationsWinPE"
|
||||
publicKeyToken="31bf3856ad364e35" language="neutral"
|
||||
versionScope="nonSxS" processorArchitecture="amd64"
|
||||
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
|
||||
|
||||
<!--
|
||||
This makes the VirtIO drivers available to Windows, assuming that
|
||||
the VirtIO driver disk at https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso
|
||||
(see https://docs.fedoraproject.org/en-US/quick-docs/creating-windows-virtual-machines-using-virtio-drivers/index.html#virtio-win-direct-downloads)
|
||||
is available as drive E:
|
||||
-->
|
||||
<DriverPaths>
|
||||
<PathAndCredentials wcm:action="add" wcm:keyValue="2">
|
||||
<Path>E:\viostor\w10\amd64</Path>
|
||||
</PathAndCredentials>
|
||||
|
||||
<PathAndCredentials wcm:action="add" wcm:keyValue="3">
|
||||
<Path>E:\NetKVM\w10\amd64</Path>
|
||||
</PathAndCredentials>
|
||||
|
||||
<PathAndCredentials wcm:action="add" wcm:keyValue="4">
|
||||
<Path>E:\Balloon\w10\amd64</Path>
|
||||
</PathAndCredentials>
|
||||
|
||||
<PathAndCredentials wcm:action="add" wcm:keyValue="5">
|
||||
<Path>E:\pvpanic\w10\amd64</Path>
|
||||
</PathAndCredentials>
|
||||
|
||||
<PathAndCredentials wcm:action="add" wcm:keyValue="6">
|
||||
<Path>E:\qemupciserial\w10\amd64</Path>
|
||||
</PathAndCredentials>
|
||||
|
||||
<PathAndCredentials wcm:action="add" wcm:keyValue="7">
|
||||
<Path>E:\qxldod\w10\amd64</Path>
|
||||
</PathAndCredentials>
|
||||
|
||||
<PathAndCredentials wcm:action="add" wcm:keyValue="8">
|
||||
<Path>E:\vioinput\w10\amd64</Path>
|
||||
</PathAndCredentials>
|
||||
|
||||
<PathAndCredentials wcm:action="add" wcm:keyValue="9">
|
||||
<Path>E:\viorng\w10\amd64</Path>
|
||||
</PathAndCredentials>
|
||||
|
||||
<PathAndCredentials wcm:action="add" wcm:keyValue="10">
|
||||
<Path>E:\vioscsi\w10\amd64</Path>
|
||||
</PathAndCredentials>
|
||||
|
||||
<PathAndCredentials wcm:action="add" wcm:keyValue="11">
|
||||
<Path>E:\vioserial\w10\amd64</Path>
|
||||
</PathAndCredentials>
|
||||
</DriverPaths>
|
||||
</component>
|
||||
|
||||
<component xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
|
||||
<DiskConfiguration>
|
||||
<Disk wcm:action="add">
|
||||
<CreatePartitions>
|
||||
<CreatePartition wcm:action="add">
|
||||
<Order>1</Order>
|
||||
<Type>Primary</Type>
|
||||
<Extend>true</Extend>
|
||||
</CreatePartition>
|
||||
</CreatePartitions>
|
||||
<ModifyPartitions>
|
||||
<ModifyPartition wcm:action="add">
|
||||
<Extend>false</Extend>
|
||||
<Format>NTFS</Format>
|
||||
<Letter>C</Letter>
|
||||
<Order>1</Order>
|
||||
<PartitionID>1</PartitionID>
|
||||
<Label>Windows 11</Label>
|
||||
</ModifyPartition>
|
||||
</ModifyPartitions>
|
||||
<DiskID>0</DiskID>
|
||||
<WillWipeDisk>true</WillWipeDisk>
|
||||
</Disk>
|
||||
<WillShowUI>OnError</WillShowUI>
|
||||
</DiskConfiguration>
|
||||
<UserData>
|
||||
<AcceptEula>true</AcceptEula>
|
||||
<FullName>Vagrant</FullName>
|
||||
<Organization>Vagrant</Organization>
|
||||
|
||||
<!--
|
||||
NOTE: If you are re-configuring this for use of a retail key
|
||||
and using a retail ISO, you need to adjust the <ProductKey> block
|
||||
below to look like this:
|
||||
|
||||
<ProductKey>
|
||||
<Key>W269N-WFGWX-YVC9B-4J6C9-T83GX</Key>
|
||||
<WillShowUI>Never</WillShowUI>
|
||||
</ProductKey>
|
||||
|
||||
Notice the addition of the `<Key>` element.
|
||||
-->
|
||||
</UserData>
|
||||
<ImageInstall>
|
||||
<OSImage>
|
||||
<InstallTo>
|
||||
<DiskID>0</DiskID>
|
||||
<PartitionID>1</PartitionID>
|
||||
</InstallTo>
|
||||
<WillShowUI>OnError</WillShowUI>
|
||||
<InstallToAvailablePartition>false</InstallToAvailablePartition>
|
||||
<InstallFrom>
|
||||
<MetaData wcm:action="add">
|
||||
<Key>/IMAGE/NAME</Key>
|
||||
<Value>Windows 11 Enterprise Evaluation</Value>
|
||||
</MetaData>
|
||||
</InstallFrom>
|
||||
</OSImage>
|
||||
</ImageInstall>
|
||||
</component>
|
||||
<component xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
|
||||
<SetupUILanguage>
|
||||
<UILanguage>en-US</UILanguage>
|
||||
</SetupUILanguage>
|
||||
<InputLocale>en-US</InputLocale>
|
||||
<SystemLocale>en-US</SystemLocale>
|
||||
<UILanguage>en-US</UILanguage>
|
||||
<UILanguageFallback>en-US</UILanguageFallback>
|
||||
<UserLocale>en-US</UserLocale>
|
||||
</component>
|
||||
</settings>
|
||||
<settings pass="offlineServicing">
|
||||
<component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
|
||||
<EnableLUA>false</EnableLUA>
|
||||
</component>
|
||||
</settings>
|
||||
<settings pass="oobeSystem">
|
||||
<component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<InputLocale>en-US</InputLocale>
|
||||
<SystemLocale>en-US</SystemLocale>
|
||||
<UILanguage>en-US</UILanguage>
|
||||
<UserLocale>en-US</UserLocale>
|
||||
</component>
|
||||
<component xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
|
||||
<UserAccounts>
|
||||
<AdministratorPassword>
|
||||
<Value>vagrant</Value>
|
||||
<PlainText>true</PlainText>
|
||||
</AdministratorPassword>
|
||||
<LocalAccounts>
|
||||
<LocalAccount wcm:action="add">
|
||||
<Password>
|
||||
<Value>vagrant</Value>
|
||||
<PlainText>true</PlainText>
|
||||
</Password>
|
||||
<Description>Vagrant User</Description>
|
||||
<DisplayName>vagrant</DisplayName>
|
||||
<Group>administrators</Group>
|
||||
<Name>vagrant</Name>
|
||||
</LocalAccount>
|
||||
</LocalAccounts>
|
||||
</UserAccounts>
|
||||
<OOBE>
|
||||
<HideEULAPage>true</HideEULAPage>
|
||||
<HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
|
||||
<NetworkLocation>Home</NetworkLocation>
|
||||
<ProtectYourPC>1</ProtectYourPC>
|
||||
</OOBE>
|
||||
<AutoLogon>
|
||||
<Password>
|
||||
<Value>vagrant</Value>
|
||||
<PlainText>true</PlainText>
|
||||
</Password>
|
||||
<Username>vagrant</Username>
|
||||
<Enabled>true</Enabled>
|
||||
</AutoLogon>
|
||||
<FirstLogonCommands>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>cmd.exe /c powershell -Command "Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force"</CommandLine>
|
||||
<Description>Set Execution Policy 64 Bit</Description>
|
||||
<Order>1</Order>
|
||||
<RequiresUserInput>true</RequiresUserInput>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>C:\Windows\SysWOW64\cmd.exe /c powershell -Command "Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force"</CommandLine>
|
||||
<Description>Set Execution Policy 32 Bit</Description>
|
||||
<Order>2</Order>
|
||||
<RequiresUserInput>true</RequiresUserInput>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>cmd.exe /c reg add "HKLM\System\CurrentControlSet\Control\Network\NewNetworkWindowOff"</CommandLine>
|
||||
<Description>Network prompt</Description>
|
||||
<Order>3</Order>
|
||||
<RequiresUserInput>true</RequiresUserInput>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>cmd.exe /c C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File a:\fixnetwork.ps1</CommandLine>
|
||||
<Description>Fix public network</Description>
|
||||
<Order>4</Order>
|
||||
<RequiresUserInput>true</RequiresUserInput>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File a:\disable-winrm.ps1</CommandLine>
|
||||
<Description>Disable WinRM</Description>
|
||||
<Order>5</Order>
|
||||
<RequiresUserInput>true</RequiresUserInput>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>%SystemRoot%\System32\reg.exe ADD HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ /v HideFileExt /t REG_DWORD /d 0 /f</CommandLine>
|
||||
<Order>6</Order>
|
||||
<Description>Show file extensions in Explorer</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>%SystemRoot%\System32\reg.exe ADD HKCU\Console /v QuickEdit /t REG_DWORD /d 1 /f</CommandLine>
|
||||
<Order>7</Order>
|
||||
<Description>Enable QuickEdit mode</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>%SystemRoot%\System32\reg.exe ADD HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ /v Start_ShowRun /t REG_DWORD /d 1 /f</CommandLine>
|
||||
<Order>8</Order>
|
||||
<Description>Show Run command in Start Menu</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>%SystemRoot%\System32\reg.exe ADD HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ /v StartMenuAdminTools /t REG_DWORD /d 1 /f</CommandLine>
|
||||
<Order>9</Order>
|
||||
<Description>Show Administrative Tools in Start Menu</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>%SystemRoot%\System32\reg.exe ADD HKLM\SYSTEM\CurrentControlSet\Control\Power\ /v HibernateFileSizePercent /t REG_DWORD /d 0 /f</CommandLine>
|
||||
<Order>10</Order>
|
||||
<Description>Zero Hibernation File</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>%SystemRoot%\System32\reg.exe ADD HKLM\SYSTEM\CurrentControlSet\Control\Power\ /v HibernateEnabled /t REG_DWORD /d 0 /f</CommandLine>
|
||||
<Order>11</Order>
|
||||
<Description>Disable Hibernation Mode</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>cmd.exe /c wmic useraccount where "name='vagrant'" set PasswordExpires=FALSE</CommandLine>
|
||||
<Order>12</Order>
|
||||
<Description>Disable password expiration for vagrant user</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>%SystemRoot%\System32\reg.exe ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /t REG_SZ /d "vagrant" /f</CommandLine>
|
||||
<Order>13</Order>
|
||||
<Description>Enable AutoLogon</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>%SystemRoot%\System32\reg.exe ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 1 /f</CommandLine>
|
||||
<Order>14</Order>
|
||||
<Description>Enable AutoLogon</Description>
|
||||
</SynchronousCommand>
|
||||
<!-- WITHOUT WINDOWS UPDATES -->
|
||||
<!--
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>cmd.exe /c C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File a:\enable-winrm.ps1</CommandLine>
|
||||
<Description>Enable WinRM</Description>
|
||||
<Order>99</Order>
|
||||
</SynchronousCommand>
|
||||
-->
|
||||
<!-- END WITHOUT WINDOWS UPDATES -->
|
||||
<!-- WITH WINDOWS UPDATES -->
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>cmd.exe /c a:\microsoft-updates.bat</CommandLine>
|
||||
<Order>98</Order>
|
||||
<Description>Enable Microsoft Updates</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>cmd.exe /c C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File a:\disable-screensaver.ps1</CommandLine>
|
||||
<Description>Disable Screensaver</Description>
|
||||
<Order>99</Order>
|
||||
<RequiresUserInput>true</RequiresUserInput>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>cmd.exe /c C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File a:\win-updates.ps1</CommandLine>
|
||||
<Description>Install Windows Updates</Description>
|
||||
<Order>100</Order>
|
||||
<RequiresUserInput>true</RequiresUserInput>
|
||||
</SynchronousCommand>
|
||||
<!-- END WITH WINDOWS UPDATES -->
|
||||
</FirstLogonCommands>
|
||||
<ShowWindowsLive>false</ShowWindowsLive>
|
||||
</component>
|
||||
</settings>
|
||||
<settings pass="specialize">
|
||||
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
|
||||
<OEMInformation>
|
||||
<HelpCustomized>false</HelpCustomized>
|
||||
</OEMInformation>
|
||||
<!-- Rename computer here. -->
|
||||
<ComputerName>vagrant-11</ComputerName>
|
||||
<TimeZone>Pacific Standard Time</TimeZone>
|
||||
<RegisteredOwner/>
|
||||
</component>
|
||||
<component xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
|
||||
<SkipAutoActivation>true</SkipAutoActivation>
|
||||
</component>
|
||||
</settings>
|
||||
<cpi:offlineImage xmlns:cpi="urn:schemas-microsoft-com:cpi" cpi:source="catalog:d:/sources/install_windows 7 ENTERPRISE.clg"/>
|
||||
</unattend>
|
3
scripts/packer/build_windows_10.bat
Normal file
3
scripts/packer/build_windows_10.bat
Normal file
@ -0,0 +1,3 @@
|
||||
@echo off
|
||||
|
||||
packer build --force --only=%~1-iso windows_10.json
|
3
scripts/packer/build_windows_10.sh
Executable file
3
scripts/packer/build_windows_10.sh
Executable file
@ -0,0 +1,3 @@
|
||||
#!/bin/bash
|
||||
|
||||
packer build --force --only=$1-iso windows_10.json
|
4
scripts/packer/build_windows_11.bat
Normal file
4
scripts/packer/build_windows_11.bat
Normal file
@ -0,0 +1,4 @@
|
||||
@echo off
|
||||
|
||||
packer build --only=%1-iso windows_11.json
|
||||
|
4
scripts/packer/build_windows_11.sh
Executable file
4
scripts/packer/build_windows_11.sh
Executable file
@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
|
||||
packer build --only=$1-iso windows_11.json
|
||||
|
BIN
scripts/packer/floppy/PinTo10.exe
Normal file
BIN
scripts/packer/floppy/PinTo10.exe
Normal file
Binary file not shown.
38
scripts/packer/floppy/ReadMe.txt
Normal file
38
scripts/packer/floppy/ReadMe.txt
Normal file
@ -0,0 +1,38 @@
|
||||
: Release v1.2 - Stuart Pearson 16th Nov 2015
|
||||
:
|
||||
: Command line tool to pin and unpin exe / lnk files to the Windows 10 taskbar and start menu.
|
||||
:
|
||||
: PinTo10 is a command line tool to pin and unpin .exe or .lnk files to or from the Windows 10 taskbar and start menu.
|
||||
: With it you can pin or unpin up to 10 different shortcuts to either the taskbar or start menu in one run of the command.
|
||||
: It replaces functionality that Microsoft have removed from their Windows 10 scripting interface.
|
||||
:
|
||||
: The exe needs to be run with at least one pair of switches specified for each function to Pin / Unpin to Taskbar / Start Menu...
|
||||
:
|
||||
: To pin an application or shortcut to the taskbar (replace XX with 01-10)...
|
||||
: /PTFOLXX: Followed by the folder containing the file you want to pin.
|
||||
: /PTFILEXX: Followed by the name of the file you want to pin.
|
||||
:
|
||||
: To unpin an application or shortcut to the taskbar (replace XX with 01-10)...
|
||||
: /UTFOLXX: Followed by the folder containing the file you want to unpin.
|
||||
: /UTFILEXX: Followed by the name of the file you want to unpin.
|
||||
|
||||
: To pin an application or shortcut to the start menu (replace XX with 01-10)...
|
||||
: /PSFOLXX: Followed by the folder containing the file you want to pin.
|
||||
: /PSFILEXX: Followed by the name of the file you want to pin.
|
||||
|
||||
: To unpin an application or shortcut to the start menu (replace XX with 01-10)...
|
||||
: /USFOLXX: Followed by the folder containing the file you want to unpin.
|
||||
: /USFILEXX: Followed by the name of the file you want to unpin.
|
||||
|
||||
|
||||
: Example for pinning two shortcuts to the taskbar...
|
||||
PinTo10.exe /PTFOL01:'%USERPROFILE:%\Desktop' /PTFILE01:'Word 2016.lnk' /PTFOL02:'%USERPROFILE:%\Desktop' /PTFILE02:'Excel 2016.lnk'
|
||||
|
||||
: Example for unpinning a file to the taskbar...
|
||||
PinTo10.exe /UTFOL01:'C\Windows' /UTFILE01:'notepad.exe'
|
||||
|
||||
: Example for pinning a file to the start menu...
|
||||
PinTo10.exe /PSFOL01:'C\Windows' /PSFILE01:'notepad.exe'
|
||||
|
||||
: Example for unpinning a file from the start menu...
|
||||
PinTo10.exe /USFOL01:'%USERPROFILE:%\Desktop' /USFILE01:'Word 2016.lnk'
|
BIN
scripts/packer/floppy/WindowsPowershell.lnk
Executable file
BIN
scripts/packer/floppy/WindowsPowershell.lnk
Executable file
Binary file not shown.
26
scripts/packer/iso/README.md
Normal file
26
scripts/packer/iso/README.md
Normal file
@ -0,0 +1,26 @@
|
||||
### What Is This Directory For?
|
||||
|
||||
You should download your Windows Server ISO images from TechNet/MSDN and place them in this folder. We need to do this because MSDN / TechNet are protected by Microsoft (Live) ID, which does not support HTTP basic authentication or the OAuth2 username / password flow.
|
||||
|
||||
For example, you might want to start with one of the following:
|
||||
|
||||
* Windows Server 2008 R2 + SP1:
|
||||
* File Name: en_windows_server_2008_r2_with_sp1_x64_dvd_617601.iso
|
||||
* SHA1 Hash: D3FD7BF85EE1D5BDD72DE5B2C69A7B470733CD0A
|
||||
* Direct Download: http://msdn.microsoft.com/subscriptions/json/GetDownloadRequest?brand=MSDN&locale=en-us&fileId=44782&activexDisabled=true&akamaiDL=false
|
||||
* Windows Server 2008 R2 + SP1 (Volume License):
|
||||
* File Name: en_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617403.iso
|
||||
* SHA1 Hash: 7E7E9425041B3328CCF723A0855C2BC4F462EC57
|
||||
* Direct Download: http://msdn.microsoft.com/subscriptions/json/GetDownloadRequest?brand=MSDN&locale=en-us&fileId=44783&activexDisabled=true&akamaiDL=false
|
||||
* Windows Server 2012:
|
||||
* File Name: en_windows_server_2012_x64_dvd_915478.iso
|
||||
* SHA1 Hash: D09E752B1EE480BC7E93DFA7D5C3A9B8AAC477BA
|
||||
* Direct Download: http://msdn.microsoft.com/subscriptions/json/GetDownloadRequest?brand=MSDN&locale=en-us&fileId=50539&activexDisabled=true&akamaiDL=false
|
||||
* Windows Server 2012 (Volume License):
|
||||
* File Name: en_windows_server_2012_vl_x64_dvd_917758.iso
|
||||
* SHA1 Hash: 063BC26ED45C50D3745CCAD52DD7B3F3CE13F36D
|
||||
* Direct Download: http://msdn.microsoft.com/subscriptions/json/GetDownloadRequest?brand=MSDN&locale=en-us&fileId=50573&activexDisabled=true&akamaiDL=false
|
||||
|
||||
Or Build one using the Windows Installation Media Creation Tools:
|
||||
|
||||
https://support.microsoft.com/en-us/windows/create-installation-media-for-windows-99a58364-8c02-206f-aa6f-40c3b507420d
|
1
scripts/packer/scripts/chocolatey.bat
Normal file
1
scripts/packer/scripts/chocolatey.bat
Normal file
@ -0,0 +1 @@
|
||||
powershell -NoProfile -ExecutionPolicy unrestricted -Command "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))"
|
26
scripts/packer/scripts/chocopacks.ps1
Normal file
26
scripts/packer/scripts/chocopacks.ps1
Normal file
@ -0,0 +1,26 @@
|
||||
choco install -y boxstarter.winconfig
|
||||
|
||||
# Editors
|
||||
choco install -y notepadplusplus
|
||||
|
||||
# Terminals
|
||||
choco install -y microsoft-windows-terminal
|
||||
choco install -y fluent-terminal
|
||||
choco install -y hyper
|
||||
choco install -y tabby
|
||||
choco install -y conemu
|
||||
|
||||
# other
|
||||
choco install -y poshgit
|
||||
|
||||
# IDE/Software development
|
||||
choco install -y vscode
|
||||
choco install -y visualstudio2022community --execution-timeout 9000 --package-parameters "--add Microsoft.VisualStudio.Workload.NativeDesktop;includeRecommended"
|
||||
|
||||
md C:\users\vagrant\bin
|
||||
if (test-path "a:/set-shortcut.ps1") {
|
||||
copy "a:/set-shortcut.ps1" C:\users\vagrant\bin
|
||||
} elseif (test-path "e:/set-shortcut.ps1") {
|
||||
copy "e:/set-shortcut.ps1" C:\users\vagrant\bin
|
||||
}
|
||||
|
39
scripts/packer/scripts/compact.bat
Normal file
39
scripts/packer/scripts/compact.bat
Normal file
@ -0,0 +1,39 @@
|
||||
if "%PACKER_BUILDER_TYPE:~0,6%"=="hyperv" (
|
||||
echo "Skip compact steps in Hyper-V build."
|
||||
goto :eof
|
||||
)
|
||||
if not exist "C:\Windows\Temp\7z1900-x64.msi" (
|
||||
powershell -Command "(New-Object System.Net.WebClient).DownloadFile('https://www.7-zip.org/a/7z1900-x64.msi', 'C:\Windows\Temp\7z1900-x64.msi')" <NUL
|
||||
)
|
||||
msiexec /qb /i C:\Windows\Temp\7z1900-x64.msi
|
||||
|
||||
if not exist "C:\Windows\Temp\ultradefrag.zip" (
|
||||
powershell -Command "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; (New-Object System.Net.WebClient).DownloadFile('https://downloads.sourceforge.net/project/ultradefrag/stable-release/6.1.0/ultradefrag-portable-6.1.0.bin.amd64.zip', 'C:\Windows\Temp\ultradefrag.zip')" <NUL
|
||||
)
|
||||
|
||||
if not exist "C:\Windows\Temp\ultradefrag-portable-6.1.0.amd64\udefrag.exe" (
|
||||
cmd /c ""C:\Program Files\7-Zip\7z.exe" x C:\Windows\Temp\ultradefrag.zip -oC:\Windows\Temp"
|
||||
)
|
||||
|
||||
if not exist "C:\Windows\Temp\SDelete.zip" (
|
||||
powershell -Command "(New-Object System.Net.WebClient).DownloadFile('https://download.sysinternals.com/files/SDelete.zip', 'C:\Windows\Temp\SDelete.zip')" <NUL
|
||||
powershell -Command "(New-Object System.Net.WebClient).DownloadFile('https://vagrantboxes.blob.core.windows.net/box/sdelete/v1.6.1/sdelete.exe', 'C:\Windows\Temp\sdelete.exe')" <NUL
|
||||
)
|
||||
|
||||
if not exist "C:\Windows\Temp\sdelete.exe" (
|
||||
cmd /c ""C:\Program Files\7-Zip\7z.exe" x C:\Windows\Temp\SDelete.zip -oC:\Windows\Temp"
|
||||
)
|
||||
|
||||
msiexec /qb /x C:\Windows\Temp\7z1900-x64.msi
|
||||
|
||||
net stop wuauserv
|
||||
rmdir /S /Q C:\Windows\SoftwareDistribution\Download
|
||||
mkdir C:\Windows\SoftwareDistribution\Download
|
||||
net start wuauserv
|
||||
|
||||
if "%PACKER_BUILDER_TYPE%" neq "hyperv-iso" (
|
||||
cmd /c C:\Windows\Temp\ultradefrag-portable-6.1.0.amd64\udefrag.exe --optimize --repeat C:
|
||||
|
||||
cmd /c %SystemRoot%\System32\reg.exe ADD HKCU\Software\Sysinternals\SDelete /v EulaAccepted /t REG_DWORD /d 1 /f
|
||||
cmd /c C:\Windows\Temp\sdelete.exe -q -z C:
|
||||
)
|
17
scripts/packer/scripts/compile-dotnet-assemblies.bat
Normal file
17
scripts/packer/scripts/compile-dotnet-assemblies.bat
Normal file
@ -0,0 +1,17 @@
|
||||
::http://support.microsoft.com/kb/2570538
|
||||
::http://robrelyea.wordpress.com/2007/07/13/may-be-helpful-ngen-exe-executequeueditems/
|
||||
|
||||
if "%PROCESSOR_ARCHITECTURE%"=="AMD64" goto 64BIT
|
||||
|
||||
%windir%\microsoft.net\framework\v4.0.30319\ngen.exe update /force /queue > NUL
|
||||
%windir%\microsoft.net\framework\v4.0.30319\ngen.exe executequeueditems > NUL
|
||||
|
||||
exit 0
|
||||
|
||||
:64BIT
|
||||
%windir%\microsoft.net\framework\v4.0.30319\ngen.exe update /force /queue > NUL
|
||||
%windir%\microsoft.net\framework64\v4.0.30319\ngen.exe update /force /queue > NUL
|
||||
%windir%\microsoft.net\framework\v4.0.30319\ngen.exe executequeueditems > NUL
|
||||
%windir%\microsoft.net\framework64\v4.0.30319\ngen.exe executequeueditems > NUL
|
||||
|
||||
exit 0
|
33
scripts/packer/scripts/debloat-windows.ps1
Normal file
33
scripts/packer/scripts/debloat-windows.ps1
Normal file
@ -0,0 +1,33 @@
|
||||
if ($env:PACKER_BUILDER_TYPE -And $($env:PACKER_BUILDER_TYPE).startsWith("hyperv")) {
|
||||
Write-Output Skip debloat steps in Hyper-V build.
|
||||
}
|
||||
else {
|
||||
Write-Output Downloading debloat zip
|
||||
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
|
||||
$url = "https://github.com/StefanScherer/Debloat-Windows-10/archive/master.zip"
|
||||
(New-Object System.Net.WebClient).DownloadFile($url, "$env:TEMP\debloat.zip")
|
||||
Expand-Archive -Path $env:TEMP\debloat.zip -DestinationPath $env:TEMP -Force
|
||||
|
||||
#Write-Output Disable scheduled tasks
|
||||
#. $env:TEMP\Debloat-Windows-10-master\utils\disable-scheduled-tasks.ps1
|
||||
#Write-Output Block telemetry
|
||||
#. $env:TEMP\Debloat-Windows-10-master\scripts\block-telemetry.ps1
|
||||
#Write-Output Disable services
|
||||
#. $env:TEMP\Debloat-Windows-10-master\scripts\disable-services.ps1
|
||||
Write-Output Disable Windows Defender
|
||||
if ($(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").ProductName.StartsWith("Windows 10")) {
|
||||
. $env:TEMP\Debloat-Windows-10-master\scripts\disable-windows-defender.ps1
|
||||
}
|
||||
else {
|
||||
Uninstall-WindowsFeature Windows-Defender
|
||||
}
|
||||
Write-Output Optimize Windows Update
|
||||
. $env:TEMP\Debloat-Windows-10-master\scripts\optimize-windows-update.ps1
|
||||
#Write-Output Disable Windows Update
|
||||
#Set-Service wuauserv -StartupType Disabled
|
||||
#Write-Output Remove OneDrive
|
||||
#. $env:TEMP\Debloat-Windows-10-master\scripts\remove-onedrive.ps1
|
||||
|
||||
Remove-Item $env:TEMP\debloat.zip
|
||||
Remove-Item -recurse $env:TEMP\Debloat-Windows-10-master
|
||||
}
|
20
scripts/packer/scripts/dis-updates.bat
Normal file
20
scripts/packer/scripts/dis-updates.bat
Normal file
@ -0,0 +1,20 @@
|
||||
rem http://www.windows-commandline.com/disable-automatic-updates-command-line/
|
||||
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update" /v AUOptions /t REG_DWORD /d 1 /f
|
||||
|
||||
rem remove optional WSUS server settings
|
||||
reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /f
|
||||
|
||||
rem even harder, disable windows update service
|
||||
rem sc config wuauserv start= disabled
|
||||
rem net stop wuauserv
|
||||
set logfile=C:\Windows\Temp\win-updates.log
|
||||
|
||||
if exist %logfile% (
|
||||
echo Show Windows Updates log file %logfile%
|
||||
dir %logfile%
|
||||
type %logfile%
|
||||
rem output of type command is not fully shown in packer/ssh session, so try PowerShell
|
||||
rem but it will hang if log file is about 22 KByte
|
||||
rem powershell -command "Get-Content %logfile%"
|
||||
echo End of Windows Updates log file %logfile%
|
||||
)
|
4
scripts/packer/scripts/disable-screensaver.ps1
Normal file
4
scripts/packer/scripts/disable-screensaver.ps1
Normal file
@ -0,0 +1,4 @@
|
||||
Write-Output "Disabling Screensaver"
|
||||
Set-ItemProperty "HKCU:\Control Panel\Desktop" -Name ScreenSaveActive -Value 0 -Type DWord
|
||||
& powercfg -x -monitor-timeout-ac 0
|
||||
& powercfg -x -monitor-timeout-dc 0
|
8
scripts/packer/scripts/disable-winrm.ps1
Normal file
8
scripts/packer/scripts/disable-winrm.ps1
Normal file
@ -0,0 +1,8 @@
|
||||
netsh advfirewall firewall set rule name="Windows Remote Management (HTTP-In)" new enable=yes action=block
|
||||
netsh advfirewall firewall set rule group="Windows Remote Management" new enable=yes
|
||||
$winrmService = Get-Service -Name WinRM
|
||||
if ($winrmService.Status -eq "Running") {
|
||||
Disable-PSRemoting -Force
|
||||
}
|
||||
Stop-Service winrm
|
||||
Set-Service -Name winrm -StartupType Disabled
|
@ -0,0 +1,4 @@
|
||||
$DefenderInstalled = Get-Command -Module Defender
|
||||
if($null -ne $DefenderInstalled) {
|
||||
Set-MpPreference -DisableRealtimeMonitoring $true
|
||||
}
|
2
scripts/packer/scripts/enable-rdp.bat
Normal file
2
scripts/packer/scripts/enable-rdp.bat
Normal file
@ -0,0 +1,2 @@
|
||||
netsh advfirewall firewall add rule name="Open Port 3389" dir=in action=allow protocol=TCP localport=3389
|
||||
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
|
27
scripts/packer/scripts/enable-winrm.ps1
Normal file
27
scripts/packer/scripts/enable-winrm.ps1
Normal file
@ -0,0 +1,27 @@
|
||||
write-host "==> 'enable-winrm.ps1' - START..."
|
||||
write-host "====> Getting Connections..."
|
||||
Get-NetConnectionProfile | Set-NetConnectionProfile -NetworkCategory Private
|
||||
|
||||
write-host "====> Enable PSRemoting..."
|
||||
Enable-PSRemoting -Force
|
||||
|
||||
write-host "====> WINRM Quick Config..."
|
||||
winrm quickconfig -q
|
||||
winrm quickconfig -transport:http
|
||||
|
||||
write-host "====> WINRM Set Config..."
|
||||
winrm set winrm/config '@{MaxTimeoutms="1800000"}'
|
||||
winrm set winrm/config/winrs '@{MaxMemoryPerShellMB="800"}'
|
||||
winrm set winrm/config/service '@{AllowUnencrypted="true"}'
|
||||
winrm set winrm/config/service/auth '@{Basic="true"}'
|
||||
winrm set winrm/config/client/auth '@{Basic="true"}'
|
||||
winrm set winrm/config/listener?Address=*+Transport=HTTP '@{Port="5985"}'
|
||||
|
||||
write-host "====> Configure Firewall..."
|
||||
netsh advfirewall firewall set rule group="Windows Remote Administration" new enable=yes
|
||||
netsh advfirewall firewall set rule name="Windows Remote Management (HTTP-In)" new enable=yes action=allow remoteip=any
|
||||
write-host "====> Set WINRM Service Statup..."
|
||||
Set-Service winrm -startuptype "auto"
|
||||
write-host "====> Restart WINRM Service..."
|
||||
Restart-Service winrm
|
||||
write-host "==> 'enable-winrm.ps1' - END..."
|
30
scripts/packer/scripts/fixnetwork.ps1
Normal file
30
scripts/packer/scripts/fixnetwork.ps1
Normal file
@ -0,0 +1,30 @@
|
||||
# You cannot enable Windows PowerShell Remoting on network connections that are set to Public
|
||||
# Spin through all the network locations and if they are set to Public, set them to Private
|
||||
# using the INetwork interface:
|
||||
# http://msdn.microsoft.com/en-us/library/windows/desktop/aa370750(v=vs.85).aspx
|
||||
# For more info, see:
|
||||
# http://blogs.msdn.com/b/powershell/archive/2009/04/03/setting-network-location-to-private.aspx
|
||||
|
||||
function Set-NetworkTypeToPrivate {
|
||||
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingPositionalParameters', '')]
|
||||
param()
|
||||
# Network location feature was only introduced in Windows Vista - no need to bother with this
|
||||
# if the operating system is older than Vista
|
||||
if ([environment]::OSVersion.version.Major -lt 6) { return }
|
||||
|
||||
# You cannot change the network location if you are joined to a domain, so abort
|
||||
if (1, 3, 4, 5 -contains (Get-CimInstance win32_computersystem).DomainRole) { return }
|
||||
|
||||
# Get network connections
|
||||
$networkListManager = [Activator]::CreateInstance([Type]::GetTypeFromCLSID([Guid]"{DCB00C01-570F-4A9B-8D69-199FDBA5723B}"))
|
||||
$connections = $networkListManager.GetNetworkConnections()
|
||||
|
||||
$connections | ForEach-Object {
|
||||
Write-Output $_.GetNetwork().GetName() "category was previously set to" $_.GetNetwork().GetCategory()
|
||||
#$_.GetNetwork().SetCategory(1)
|
||||
Write-Output $_.GetNetwork().GetName() "changed to category" $_.GetNetwork().GetCategory()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Set-NetworkTypeToPrivate
|
12
scripts/packer/scripts/microsoft-updates.bat
Normal file
12
scripts/packer/scripts/microsoft-updates.bat
Normal file
@ -0,0 +1,12 @@
|
||||
net stop wuauserv
|
||||
|
||||
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update" /v EnableFeaturedSoftware /t REG_DWORD /d 1 /f
|
||||
|
||||
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update" /v IncludeRecommendedUpdates /t REG_DWORD /d 1 /f
|
||||
|
||||
echo Set ServiceManager = CreateObject("Microsoft.Update.ServiceManager") > "%temp%\temp.vbs"
|
||||
echo Set NewUpdateService = ServiceManager.AddService2("7971f918-a847-4430-9279-4a52d1efe18d",7,"") >> "%temp%\temp.vbs"
|
||||
|
||||
cscript "%temp%\temp.vbs"
|
||||
|
||||
net start wuauserv
|
12
scripts/packer/scripts/microsoft-updates.ps1
Normal file
12
scripts/packer/scripts/microsoft-updates.ps1
Normal file
@ -0,0 +1,12 @@
|
||||
Stop-Service -Name 'wuauserv'
|
||||
|
||||
Set-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update' -Name 'EnableFeaturedSoftware' -Value 1 -Type DWord
|
||||
Set-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update' -Name 'IncludeRecommendedUpdates' -Value 1 -Type DWord
|
||||
|
||||
"Set ServiceManager = CreateObject(""Microsoft.Update.ServiceManager"")" | Out-File -FilePath 'C:\temp.vbs'
|
||||
"Set NewUpdateService = ServiceManager.AddService2(""7971f918-a847-4430-9279-4a52d1efe18d"",7,"""")" | Out-File -FilePath 'C:\temp.vbs' -Append
|
||||
|
||||
cscript C:\temp.vbs
|
||||
Remove-Item -Path 'C:\temp.vbs' -Force
|
||||
|
||||
Start-Service -Name 'wuauserv'
|
16
scripts/packer/scripts/pin-powershell.bat
Normal file
16
scripts/packer/scripts/pin-powershell.bat
Normal file
@ -0,0 +1,16 @@
|
||||
rem https://connect.microsoft.com/PowerShell/feedback/details/1609288/pin-to-taskbar-no-longer-working-in-windows-10
|
||||
|
||||
set ps_link=A:\WindowsPowerShell.lnk
|
||||
if exist e:\WindowsPowerShell.lnk (
|
||||
set ps_link=e:\WindowsPowerShell.lnk
|
||||
)
|
||||
|
||||
set pin_to_10=A:\PinTo10.exe
|
||||
if exist e:\PinTo10.exe (
|
||||
set pin_to_10=e:\PinTo10.exe
|
||||
)
|
||||
|
||||
|
||||
copy "%ps_link%" "%TEMP%\Windows PowerShell.lnk"
|
||||
%pin_to_10% /PTFOL01:'%TEMP%' /PTFILE01:'Windows PowerShell.lnk'
|
||||
exit /b 0
|
19
scripts/packer/scripts/set-powerplan.ps1
Normal file
19
scripts/packer/scripts/set-powerplan.ps1
Normal file
@ -0,0 +1,19 @@
|
||||
Try {
|
||||
Write-Output "Set power plan to high performance"
|
||||
|
||||
$HighPerf = powercfg -l | ForEach-Object { if ($_.contains("High performance")) { $_.split()[3] } }
|
||||
|
||||
# $HighPerf cannot be $null, we try activate this power profile with powercfg
|
||||
if ($null -eq $HighPerf) {
|
||||
throw "Error: HighPerf is null"
|
||||
}
|
||||
|
||||
$CurrPlan = $(powercfg -getactivescheme).split()[3]
|
||||
|
||||
if ($CurrPlan -ne $HighPerf) { powercfg -setactive $HighPerf }
|
||||
|
||||
}
|
||||
Catch {
|
||||
Write-Warning -Message "Unable to set power plan to high performance"
|
||||
Write-Warning $Error[0]
|
||||
}
|
21
scripts/packer/scripts/set-shortcut.ps1
Normal file
21
scripts/packer/scripts/set-shortcut.ps1
Normal file
@ -0,0 +1,21 @@
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[Parameter()]
|
||||
[string]$SourceExe,
|
||||
[string]$Arguments,
|
||||
[string]$DestinationPath,
|
||||
[string]$WorkingDirectory,
|
||||
[String]$IconLocation
|
||||
)
|
||||
|
||||
if ($IconLocation -eq '') {
|
||||
$IconLocation = $SourceExe
|
||||
}
|
||||
|
||||
$WshShell = New-Object -comObject WScript.Shell
|
||||
$Shortcut = $WshShell.CreateShortcut($destinationPath)
|
||||
$Shortcut.TargetPath = $SourceExe
|
||||
$Shortcut.Arguments = $Arguments
|
||||
$shortcut.WorkingDirectory = $WorkingDirectory
|
||||
$shortcut.IconLocation = $IconLocation
|
||||
$Shortcut.Save()
|
2
scripts/packer/scripts/set-winrm-automatic.bat
Normal file
2
scripts/packer/scripts/set-winrm-automatic.bat
Normal file
@ -0,0 +1,2 @@
|
||||
echo Set WinRM start type to auto
|
||||
sc config winrm start= auto
|
1
scripts/packer/scripts/uac-enable.bat
Normal file
1
scripts/packer/scripts/uac-enable.bat
Normal file
@ -0,0 +1 @@
|
||||
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /f /v EnableLUA /t REG_DWORD /d 1
|
96
scripts/packer/scripts/vm-guest-tools.ps1
Normal file
96
scripts/packer/scripts/vm-guest-tools.ps1
Normal file
@ -0,0 +1,96 @@
|
||||
if (!( Test-Path "C:\Windows\Temp\7z1900-x64.msi")) {
|
||||
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; (New-Object System.Net.WebClient).DownloadFile('https://www.7-zip.org/a/7z1900-x64.msi', 'C:\Windows\Temp\7z1900-x64.msi')
|
||||
}
|
||||
if (!(Test-Path "C:\Windows\Temp\7z1900-x64.msi")) {
|
||||
Start-Sleep 5; [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; (New-Object System.Net.WebClient).DownloadFile('https://www.7-zip.org/a/7z1900-x64.msi', 'C:\Windows\Temp\7z1900-x64.msi')
|
||||
}
|
||||
cmd /c msiexec /qb /i C:\Windows\Temp\7z1900-x64.msi
|
||||
|
||||
if ("$env:PACKER_BUILDER_TYPE" -eq "vmware-iso") {
|
||||
|
||||
Write-Output "Using VMware"
|
||||
if (Test-Path "C:\Users\vagrant\windows.iso") {
|
||||
Move-Item -force C:\Users\vagrant\windows.iso C:\Windows\Temp
|
||||
}
|
||||
|
||||
if (!(Test-Path "C:\Windows\Temp\windows.iso")) {
|
||||
Try {
|
||||
# Disabling the progress bar speeds up IWR https://github.com/PowerShell/PowerShell/issues/2138
|
||||
$ProgressPreference = 'SilentlyContinue'
|
||||
$pageContentLinks = (Invoke-WebRequest('https://softwareupdate.vmware.com/cds/vmw-desktop/ws') -UseBasicParsing).Links | where-object { $_.href -Match "[0-9]" } | Select-Object href | ForEach-Object { $_.href.Trim('/') }
|
||||
$versionObject = $pageContentLinks | ForEach-Object { new-object System.Version ($_) } | sort-object -Descending | select-object -First 1 -Property:Major, Minor, Build
|
||||
$newestVersion = $versionObject.Major.ToString() + "." + $versionObject.Minor.ToString() + "." + $versionObject.Build.ToString() | out-string
|
||||
$newestVersion = $newestVersion.TrimEnd("`r?`n")
|
||||
|
||||
$nextURISubdirectoryObject = (Invoke-WebRequest("https://softwareupdate.vmware.com/cds/vmw-desktop/ws/$newestVersion/") -UseBasicParsing).Links | where-object { $_.href -Match "[0-9]" } | Select-Object href | where-object { $_.href -Match "[0-9]" }
|
||||
$nextUriSubdirectory = $nextURISubdirectoryObject.href | Out-String
|
||||
$nextUriSubdirectory = $nextUriSubdirectory.TrimEnd("`r?`n")
|
||||
$newestVMwareToolsURL = "https://softwareupdate.vmware.com/cds/vmw-desktop/ws/$newestVersion/$nextURISubdirectory/windows/packages/tools-windows.tar"
|
||||
Write-Output "The latest version of VMware tools has been determined to be downloadable from $newestVMwareToolsURL"
|
||||
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; (New-Object System.Net.WebClient).DownloadFile("$newestVMwareToolsURL", 'C:\Windows\Temp\vmware-tools.tar')
|
||||
}
|
||||
Catch {
|
||||
Write-Output "Unable to determine the latest version of VMware tools. Falling back to hardcoded URL."
|
||||
(New-Object System.Net.WebClient).DownloadFile('https://softwareupdate.vmware.com/cds/vmw-desktop/ws/15.5.5/16285975/windows/packages/tools-windows.tar', 'C:\Windows\Temp\vmware-tools.tar')
|
||||
}
|
||||
cmd /c "C:\PROGRA~1\7-Zip\7z.exe" x C:\Windows\Temp\vmware-tools.tar -oC:\Windows\Temp
|
||||
Move-Item c:\windows\temp\VMware-tools-windows-*.iso c:\windows\temp\windows.iso
|
||||
Try { Remove-Item "C:\Program Files (x86)\VMWare" -Recurse -Force -ErrorAction Stop } Catch { Write-Output "Directory didn't exist to be removed." }
|
||||
}
|
||||
|
||||
cmd /c "C:\PROGRA~1\7-Zip\7z.exe" x "C:\Windows\Temp\windows.iso" -oC:\Windows\Temp\VMWare
|
||||
cmd /c C:\Windows\Temp\VMWare\setup.exe /S /v"/qn REBOOT=R\"
|
||||
|
||||
Remove-Item -Force "C:\Windows\Temp\vmware-tools.tar"
|
||||
Remove-Item -Force "C:\Windows\Temp\windows.iso"
|
||||
Remove-Item -Force -Recurse "C:\Windows\Temp\VMware"
|
||||
}
|
||||
|
||||
if ("$env:PACKER_BUILDER_TYPE" -eq "virtualbox-iso") {
|
||||
Write-Output "Using Virtualbox"
|
||||
if (Test-Path "C:\Users\vagrant\VBoxGuestAdditions.iso") {
|
||||
Move-Item -Force C:\Users\vagrant\VBoxGuestAdditions.iso C:\Windows\Temp
|
||||
}
|
||||
|
||||
if (!(Test-Path "C:\Windows\Temp\VBoxGuestAdditions.iso")) {
|
||||
Try {
|
||||
$pageContentLinks = (Invoke-WebRequest('https://download.virtualbox.org/virtualbox') -UseBasicParsing).Links | where-object { $_.href -Match "[0-9]" } | Select-Object href | where-object { $_.href -NotMatch "BETA" } | where-object { $_.href -NotMatch "RC" } | where-object { $_.href -Match "[0-9]\.[0-9]" } | ForEach-Object { $_.href.Trim('/') }
|
||||
$versionObject = $pageContentLinks | ForEach-Object { new-object System.Version ($_) } | sort-object -Descending | select-object -First 1 -Property:Major, Minor, Build
|
||||
$newestVersion = $versionObject.Major.ToString() + "." + $versionObject.Minor.ToString() + "." + $versionObject.Build.ToString() | out-string
|
||||
$newestVersion = $newestVersion.TrimEnd("`r?`n")
|
||||
|
||||
$nextURISubdirectoryObject = (Invoke-WebRequest("https://download.virtualbox.org/virtualbox/$newestVersion/") -UseBasicParsing).Links | Select-Object href | where-object { $_.href -Match "GuestAdditions" }
|
||||
$nextUriSubdirectory = $nextURISubdirectoryObject.href | Out-String
|
||||
$nextUriSubdirectory = $nextUriSubdirectory.TrimEnd("`r?`n")
|
||||
$newestVboxToolsURL = "https://download.virtualbox.org/virtualbox/$newestVersion/$nextUriSubdirectory"
|
||||
Write-Output "The latest version of VirtualBox tools has been determined to be downloadable from $newestVboxToolsURL"
|
||||
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; (New-Object System.Net.WebClient).DownloadFile("$newestVboxToolsURL", 'C:\Windows\Temp\VBoxGuestAdditions.iso')
|
||||
}
|
||||
Catch {
|
||||
Write-Output "Unable to determine the latest version of VBox tools. Falling back to hardcoded URL."
|
||||
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; (New-Object System.Net.WebClient).DownloadFile('https://download.virtualbox.org/virtualbox/6.1.8/VBoxGuestAdditions_6.1.8.iso', 'C:\Windows\Temp\VBoxGuestAdditions.iso')
|
||||
}
|
||||
}
|
||||
|
||||
cmd /c ""C:\PROGRA~1\7-Zip\7z.exe" x C:\Windows\Temp\VBoxGuestAdditions.iso -oC:\Windows\Temp\virtualbox"
|
||||
Get-ChildItem "C:\Windows\Temp\virtualbox\cert\" -Filter vbox*.cer | Foreach-Object { C:\Windows\Temp\virtualbox\cert\VBoxCertUtil add-trusted-publisher $_.FullName --root $_.FullName }
|
||||
cmd /c C:\Windows\Temp\virtualbox\VBoxWindowsAdditions.exe /S
|
||||
cmd /c rd /S /Q "C:\Windows\Temp\virtualbox"
|
||||
}
|
||||
|
||||
if ("$env:PACKER_BUILDER_TYPE" -eq "parallels-iso") {
|
||||
Write-Output "Using Parallels Desktop"
|
||||
# This is required when using Parallels Desktop
|
||||
# Currently the installation of Parallels Tools is broken if you're installing in Windows Server & Windows Server Core
|
||||
# You will encounter an error in printui.dll module not found message.
|
||||
# This feature will add the required libraries for printing services.
|
||||
|
||||
# Parallels Tools is required for sync_folder to work.
|
||||
# Vagrantfile config: v.update_guest_tools = true will be installed with no issues
|
||||
if ($(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").ProductName.StartsWith("Windows Server")) {
|
||||
Write-Output "Installing Print Server service"
|
||||
Install-WindowsFeature -Name Print-Server
|
||||
}
|
||||
}
|
||||
|
||||
cmd /c msiexec /qb /x C:\Windows\Temp\7z1900-x64.msi
|
260
scripts/packer/scripts/win-updates.ps1
Normal file
260
scripts/packer/scripts/win-updates.ps1
Normal file
@ -0,0 +1,260 @@
|
||||
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSReviewUnusedParameter', '')]
|
||||
param($global:RestartRequired = 0,
|
||||
$global:MoreUpdates = 0,
|
||||
$global:MaxCycles = 5,
|
||||
$MaxUpdatesPerCycle = 500,
|
||||
$BeginWithRestart = 0)
|
||||
|
||||
$Logfile = "C:\Windows\Temp\win-updates.log"
|
||||
|
||||
$enable_winrm_script = 'a:\enable-winrm.ps1'
|
||||
if (test-path 'e:\enable-winrm.ps1') {
|
||||
$enable_winrm_script = 'e:\enable-winrm.ps1'
|
||||
}
|
||||
|
||||
function LogWrite {
|
||||
Param ([string]$logstring)
|
||||
$now = Get-Date -format s
|
||||
Add-Content $Logfile -value "$now $logstring"
|
||||
Write-Output $logstring
|
||||
}
|
||||
|
||||
function Check-ContinueRestartOrEnd() {
|
||||
$RegistryKey = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
|
||||
$RegistryEntry = "InstallWindowsUpdates"
|
||||
switch ($global:RestartRequired) {
|
||||
0 {
|
||||
$prop = (Get-ItemProperty $RegistryKey).$RegistryEntry
|
||||
if ($prop) {
|
||||
LogWrite "Restart Registry Entry Exists - Removing It"
|
||||
Remove-ItemProperty -Path $RegistryKey -Name $RegistryEntry -ErrorAction SilentlyContinue
|
||||
}
|
||||
|
||||
LogWrite "No Restart Required"
|
||||
Check-WindowsUpdates
|
||||
|
||||
if (($global:MoreUpdates -eq 1) -and ($script:Cycles -le $global:MaxCycles)) {
|
||||
Install-WindowsUpdates
|
||||
}
|
||||
elseif ($script:Cycles -gt $global:MaxCycles) {
|
||||
LogWrite "Exceeded Cycle Count - Stopping"
|
||||
LogWrite "==> Running '$enable_winrm_script'..."
|
||||
& $enable_winrm_script
|
||||
}
|
||||
else {
|
||||
LogWrite "Done Installing Windows Updates"
|
||||
LogWrite "==> Running '$enable_winrm_script'..."
|
||||
& $enable_winrm_script
|
||||
}
|
||||
}
|
||||
1 {
|
||||
$prop = (Get-ItemProperty $RegistryKey).$RegistryEntry
|
||||
if (-not $prop) {
|
||||
LogWrite "Restart Registry Entry Does Not Exist - Creating It"
|
||||
Set-ItemProperty -Path $RegistryKey -Name $RegistryEntry -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File $($script:ScriptPath) -MaxUpdatesPerCycle $($MaxUpdatesPerCycle)"
|
||||
}
|
||||
else {
|
||||
LogWrite "Restart Registry Entry Exists Already"
|
||||
}
|
||||
|
||||
LogWrite "Restart Required - Restarting..."
|
||||
Restart-Computer
|
||||
}
|
||||
default {
|
||||
LogWrite "Unsure If A Restart Is Required"
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function Install-WindowsUpdates()
|
||||
{
|
||||
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', '')]
|
||||
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseSingularNouns', '')]
|
||||
param()
|
||||
$script:Cycles++
|
||||
LogWrite "Evaluating Available Updates with limit of $($MaxUpdatesPerCycle):"
|
||||
$UpdatesToDownload = New-Object -ComObject 'Microsoft.Update.UpdateColl'
|
||||
$script:i = 0;
|
||||
$CurrentUpdates = $SearchResult.Updates
|
||||
while ($script:i -lt $CurrentUpdates.Count -and $script:CycleUpdateCount -lt $MaxUpdatesPerCycle) {
|
||||
$Update = $CurrentUpdates.Item($script:i)
|
||||
if ($null -ne $Update) {
|
||||
[bool]$addThisUpdate = $false
|
||||
if ($Update.InstallationBehavior.CanRequestUserInput) {
|
||||
LogWrite "> Skipping: $($Update.Title) because it requires user input"
|
||||
}
|
||||
else {
|
||||
if (!($Update.EulaAccepted)) {
|
||||
LogWrite "> Note: $($Update.Title) has a license agreement that must be accepted. Accepting the license."
|
||||
$Update.AcceptEula()
|
||||
[bool]$addThisUpdate = $true
|
||||
$script:CycleUpdateCount++
|
||||
}
|
||||
else {
|
||||
[bool]$addThisUpdate = $true
|
||||
$script:CycleUpdateCount++
|
||||
}
|
||||
}
|
||||
|
||||
if ([bool]$addThisUpdate) {
|
||||
LogWrite "Adding: $($Update.Title)"
|
||||
$UpdatesToDownload.Add($Update) | Out-Null
|
||||
}
|
||||
}
|
||||
$script:i++
|
||||
}
|
||||
|
||||
if ($UpdatesToDownload.Count -eq 0) {
|
||||
LogWrite "No Updates To Download..."
|
||||
}
|
||||
else {
|
||||
LogWrite 'Downloading Updates...'
|
||||
$ok = 0;
|
||||
while (! $ok) {
|
||||
try {
|
||||
$Downloader = $UpdateSession.CreateUpdateDownloader()
|
||||
$Downloader.Updates = $UpdatesToDownload
|
||||
$Downloader.Download()
|
||||
$ok = 1;
|
||||
}
|
||||
catch {
|
||||
LogWrite $_.Exception | Format-List -force
|
||||
LogWrite "Error downloading updates. Retrying in 30s."
|
||||
$script:attempts = $script:attempts + 1
|
||||
Start-Sleep -s 30
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$UpdatesToInstall = New-Object -ComObject 'Microsoft.Update.UpdateColl'
|
||||
[bool]$rebootMayBeRequired = $false
|
||||
LogWrite 'The following updates are downloaded and ready to be installed:'
|
||||
foreach ($Update in $SearchResult.Updates) {
|
||||
if (($Update.IsDownloaded)) {
|
||||
LogWrite "> $($Update.Title)"
|
||||
$UpdatesToInstall.Add($Update) | Out-Null
|
||||
|
||||
if ($Update.InstallationBehavior.RebootBehavior -gt 0) {
|
||||
[bool]$rebootMayBeRequired = $true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($UpdatesToInstall.Count -eq 0) {
|
||||
LogWrite 'No updates available to install...'
|
||||
$global:MoreUpdates = 0
|
||||
$global:RestartRequired = 0
|
||||
LogWrite "==> Running '$enable_winrm_script'..."
|
||||
& $enable_winrm_script
|
||||
break
|
||||
}
|
||||
|
||||
if ($rebootMayBeRequired) {
|
||||
LogWrite 'These updates may require a reboot'
|
||||
$global:RestartRequired = 1
|
||||
}
|
||||
|
||||
LogWrite 'Installing updates...'
|
||||
|
||||
$Installer = $script:UpdateSession.CreateUpdateInstaller()
|
||||
$Installer.Updates = $UpdatesToInstall
|
||||
$InstallationResult = $Installer.Install()
|
||||
|
||||
LogWrite "Installation Result: $($InstallationResult.ResultCode)"
|
||||
LogWrite "Reboot Required: $($InstallationResult.RebootRequired)"
|
||||
LogWrite 'Listing of updates installed and individual installation results:'
|
||||
if ($InstallationResult.RebootRequired) {
|
||||
$global:RestartRequired = 1
|
||||
}
|
||||
else {
|
||||
$global:RestartRequired = 0
|
||||
}
|
||||
|
||||
for ($i = 0; $i -lt $UpdatesToInstall.Count; $i++) {
|
||||
New-Object -TypeName PSObject -Property @{
|
||||
Title = $UpdatesToInstall.Item($i).Title
|
||||
Result = $InstallationResult.GetUpdateResult($i).ResultCode
|
||||
}
|
||||
LogWrite "Item: $($UpdatesToInstall.Item($i).Title)"
|
||||
LogWrite "Result: $($InstallationResult.GetUpdateResult($i).ResultCode)"
|
||||
}
|
||||
|
||||
Check-ContinueRestartOrEnd
|
||||
}
|
||||
|
||||
function Check-WindowsUpdates() {
|
||||
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', '')]
|
||||
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseSingularNouns', '')]
|
||||
param()
|
||||
LogWrite "Checking For Windows Updates"
|
||||
$Username = $env:USERDOMAIN + "\" + $env:USERNAME
|
||||
LogWrite "Script: $script:ScriptPath `nScript User: $Username `nStarted: $(Get-Date)"
|
||||
|
||||
$script:UpdateSearcher = $script:UpdateSession.CreateUpdateSearcher()
|
||||
$script:successful = $FALSE
|
||||
$script:attempts = 0
|
||||
$script:maxAttempts = 12
|
||||
while (-not $script:successful -and $script:attempts -lt $script:maxAttempts) {
|
||||
try {
|
||||
$script:SearchResult = $script:UpdateSearcher.Search("IsInstalled=0 and Type='Software' and IsHidden=0")
|
||||
$script:successful = $TRUE
|
||||
}
|
||||
catch {
|
||||
LogWrite $_.Exception | Format-List -force
|
||||
LogWrite "Search call to UpdateSearcher was unsuccessful. Retrying in 10s."
|
||||
$script:attempts = $script:attempts + 1
|
||||
Start-Sleep -s 10
|
||||
}
|
||||
}
|
||||
|
||||
if ($SearchResult.Updates.Count -ne 0) {
|
||||
$Message = "There are " + $SearchResult.Updates.Count + " more updates."
|
||||
LogWrite $Message
|
||||
try {
|
||||
for ($i = 0; $i -lt $script:SearchResult.Updates.Count; $i++) {
|
||||
LogWrite $script:SearchResult.Updates.Item($i).Title
|
||||
LogWrite $script:SearchResult.Updates.Item($i).Description
|
||||
LogWrite $script:SearchResult.Updates.Item($i).RebootRequired
|
||||
LogWrite $script:SearchResult.Updates.Item($i).EulaAccepted
|
||||
}
|
||||
$global:MoreUpdates = 1
|
||||
}
|
||||
catch {
|
||||
LogWrite $_.Exception | Format-List -force
|
||||
LogWrite "Showing SearchResult was unsuccessful. Rebooting."
|
||||
$global:RestartRequired = 1
|
||||
$global:MoreUpdates = 0
|
||||
Check-ContinueRestartOrEnd
|
||||
LogWrite "Show never happen to see this text!"
|
||||
Restart-Computer
|
||||
}
|
||||
}
|
||||
else {
|
||||
LogWrite 'There are no applicable updates'
|
||||
$global:RestartRequired = 0
|
||||
$global:MoreUpdates = 0
|
||||
}
|
||||
}
|
||||
|
||||
$script:ScriptName = $MyInvocation.MyCommand.ToString()
|
||||
$script:ScriptPath = $MyInvocation.MyCommand.Path
|
||||
$script:UpdateSession = New-Object -ComObject 'Microsoft.Update.Session'
|
||||
$script:UpdateSession.ClientApplicationID = 'Packer Windows Update Installer'
|
||||
$script:UpdateSearcher = $script:UpdateSession.CreateUpdateSearcher()
|
||||
$script:SearchResult = New-Object -ComObject 'Microsoft.Update.UpdateColl'
|
||||
$script:Cycles = 0
|
||||
$script:CycleUpdateCount = 0
|
||||
|
||||
if ($BeginWithRestart) {
|
||||
$global:RestartRequired = 1
|
||||
Check-ContinueRestartOrEnd
|
||||
}
|
||||
|
||||
Check-WindowsUpdates
|
||||
if ($global:MoreUpdates -eq 1) {
|
||||
Install-WindowsUpdates
|
||||
}
|
||||
else {
|
||||
Check-ContinueRestartOrEnd
|
||||
}
|
91
scripts/packer/vagrantfile-windows_10.template
Normal file
91
scripts/packer/vagrantfile-windows_10.template
Normal file
@ -0,0 +1,91 @@
|
||||
# -*- mode: ruby -*-
|
||||
# vi: set ft=ruby :
|
||||
|
||||
Vagrant.require_version ">= 1.6.2"
|
||||
|
||||
Vagrant.configure("2") do |config|
|
||||
config.vm.define "vagrant-windows-10-preview"
|
||||
config.vm.box = "windows_10_preview"
|
||||
config.vm.communicator = "winrm"
|
||||
|
||||
# Admin user name and password
|
||||
config.winrm.username = "vagrant"
|
||||
config.winrm.password = "vagrant"
|
||||
|
||||
config.vm.guest = :windows
|
||||
config.windows.halt_timeout = 15
|
||||
|
||||
config.vm.network :forwarded_port, guest: 3389, host: 3389, id: "rdp", auto_correct: true
|
||||
|
||||
config.vm.provider :virtualbox do |v, override|
|
||||
#v.gui = true
|
||||
v.customize ["modifyvm", :id, "--memory", 2048]
|
||||
v.customize ["modifyvm", :id, "--cpus", 2]
|
||||
v.customize ["modifyvm", :id, "--vram", 128]
|
||||
v.customize ["modifyvm", :id, "--clipboard", "bidirectional"]
|
||||
v.customize ["setextradata", "global", "GUI/SuppressMessages", "all" ]
|
||||
end
|
||||
|
||||
config.vm.provider :vmware_fusion do |v, override|
|
||||
v.gui = true
|
||||
v.vmx["memsize"] = "2048"
|
||||
v.vmx["numvcpus"] = "2"
|
||||
v.vmx["ethernet0.virtualDev"] = "vmxnet3"
|
||||
v.vmx["RemoteDisplay.vnc.enabled"] = "false"
|
||||
v.vmx["RemoteDisplay.vnc.port"] = "5900"
|
||||
v.vmx["scsi0.virtualDev"] = "lsisas1068"
|
||||
v.vmx["gui.fitguestusingnativedisplayresolution"] = "TRUE"
|
||||
v.vmx["mks.enable3d"] = "TRUE"
|
||||
v.vmx["mks.forceDiscreteGPU"] = "TRUE"
|
||||
v.vmx["gui.fullscreenatpoweron"] = "TRUE"
|
||||
v.vmx["gui.viewmodeatpoweron"] = "fullscreen"
|
||||
v.vmx["gui.lastPoweredViewMode"] = "fullscreen"
|
||||
v.vmx["sound.startconnected"] = "FALSE"
|
||||
v.vmx["sound.present"] = "FALSE"
|
||||
v.vmx["sound.autodetect"] = "TRUE"
|
||||
v.enable_vmrun_ip_lookup = false
|
||||
v.whitelist_verified = true
|
||||
v.vmx["hgfs.linkRootShare"] = "FALSE"
|
||||
end
|
||||
|
||||
config.vm.provider :vmware_workstation do |v, override|
|
||||
v.gui = true
|
||||
v.vmx["memsize"] = "2048"
|
||||
v.vmx["numvcpus"] = "2"
|
||||
v.vmx["ethernet0.virtualDev"] = "vmxnet3"
|
||||
v.vmx["RemoteDisplay.vnc.enabled"] = "false"
|
||||
v.vmx["RemoteDisplay.vnc.port"] = "5900"
|
||||
v.vmx["scsi0.virtualDev"] = "lsisas1068"
|
||||
v.enable_vmrun_ip_lookup = false
|
||||
v.whitelist_verified = true
|
||||
v.vmx["hgfs.linkRootShare"] = "FALSE"
|
||||
end
|
||||
|
||||
config.vm.provider "hyperv" do |v|
|
||||
v.cpus = 2
|
||||
v.maxmemory = 2048
|
||||
v.linked_clone = true
|
||||
end
|
||||
|
||||
config.vm.provider :libvirt do |libvirt, override|
|
||||
libvirt.memory = 2048
|
||||
libvirt.cpus = 2
|
||||
|
||||
# Use WinRM for the default synced folder; or disable it if
|
||||
# WinRM is not available. Linux hosts don't support SMB,
|
||||
# and Windows guests don't support NFS/9P/rsync
|
||||
# See https://github.com/Cimpress-MCP/vagrant-winrm-syncedfolders
|
||||
if Vagrant.has_plugin?("vagrant-winrm-syncedfolders")
|
||||
override.vm.synced_folder ".", "/vagrant", type: "winrm"
|
||||
else
|
||||
override.vm.synced_folder ".", "/vagrant", disabled: true
|
||||
end
|
||||
|
||||
# Enable Hyper-V enlightments, see
|
||||
# https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightenments-with-kvm.html
|
||||
libvirt.hyperv_feature :name => 'stimer', :state => 'on'
|
||||
libvirt.hyperv_feature :name => 'relaxed', :state => 'on'
|
||||
libvirt.hyperv_feature :name => 'vapic', :state => 'on'
|
||||
libvirt.hyperv_feature :name => 'synic', :state => 'on'
|
||||
end
|
||||
end
|
230
scripts/packer/windows_10.json
Normal file
230
scripts/packer/windows_10.json
Normal file
@ -0,0 +1,230 @@
|
||||
{
|
||||
"builders": [
|
||||
{
|
||||
"boot_command": ["a<wait>a<wait>a"],
|
||||
"boot_wait": "-1s",
|
||||
"cd_files": [
|
||||
"{{user `autounattend`}}",
|
||||
"./floppy/WindowsPowershell.lnk",
|
||||
"./floppy/PinTo10.exe",
|
||||
"./scripts/fixnetwork.ps1",
|
||||
"./scripts/disable-screensaver.ps1",
|
||||
"./scripts/disable-winrm.ps1",
|
||||
"./scripts/enable-winrm.ps1",
|
||||
"./scripts/microsoft-updates.ps1",
|
||||
"./scripts/win-updates.ps1",
|
||||
"./scripts/set-shortcut.ps1"
|
||||
],
|
||||
"communicator": "winrm",
|
||||
"configuration_version": "10.0",
|
||||
"cpus": "{{user `cpus`}}",
|
||||
"disk_size": "{{user `disk_size`}}",
|
||||
"enable_dynamic_memory": false,
|
||||
"enable_mac_spoofing": true,
|
||||
"enable_secure_boot": true,
|
||||
"enable_virtualization_extensions": true,
|
||||
"generation": "2",
|
||||
"guest_additions_mode": "disable",
|
||||
"iso_checksum": "{{user `iso_checksum`}}",
|
||||
"iso_url": "{{user `iso_url`}}",
|
||||
"memory": "{{user `memory`}}",
|
||||
"shutdown_command": "shutdown /s /t 10 /f /d p:4:1 /c \"Packer Shutdown\"",
|
||||
"switch_name": "Default Switch",
|
||||
"type": "hyperv-iso",
|
||||
"vm_name": "{{user `vm_name`}}",
|
||||
"winrm_password": "vagrant",
|
||||
"winrm_timeout": "{{ user `winrm_timeout` }}",
|
||||
"winrm_username": "vagrant"
|
||||
},
|
||||
{
|
||||
"boot_command": ["a<wait>a<wait>a"],
|
||||
"boot_wait": "-1s",
|
||||
"cd_files": [
|
||||
"{{user `autounattend`}}",
|
||||
"./floppy/WindowsPowershell.lnk",
|
||||
"./floppy/PinTo10.exe",
|
||||
"./scripts/fixnetwork.ps1",
|
||||
"./scripts/disable-screensaver.ps1",
|
||||
"./scripts/disable-winrm.ps1",
|
||||
"./scripts/enable-winrm.ps1",
|
||||
"./scripts/microsoft-updates.ps1",
|
||||
"./scripts/win-updates.ps1",
|
||||
"./scripts/set-shortcut.ps1"
|
||||
],
|
||||
"communicator": "winrm",
|
||||
"cpus": "{{user `cpus`}}",
|
||||
"disk_adapter_type": "lsisas1068",
|
||||
"disk_size": "{{user `disk_size`}}",
|
||||
"disk_type_id": "1",
|
||||
"guest_os_type": "windows9-64",
|
||||
"headless": "{{user `headless`}}",
|
||||
"iso_checksum": "{{user `iso_checksum`}}",
|
||||
"iso_url": "{{user `iso_url`}}",
|
||||
"memory": "{{user `memory`}}",
|
||||
"shutdown_command": "shutdown /s /t 10 /f /d p:4:1 /c \"Packer Shutdown\"",
|
||||
"type": "vmware-iso",
|
||||
"version": "19",
|
||||
"vm_name": "{{user `vm_name`}}",
|
||||
"vmx_data": {
|
||||
"firmware": "efi",
|
||||
"RemoteDisplay.vnc.enabled": "false",
|
||||
"RemoteDisplay.vnc.port": "5900"
|
||||
},
|
||||
"vmx_remove_ethernet_interfaces": true,
|
||||
"vnc_port_max": 5980,
|
||||
"vnc_port_min": 5900,
|
||||
"winrm_password": "vagrant",
|
||||
"winrm_timeout": "{{ user `winrm_timeout` }}",
|
||||
"winrm_username": "vagrant"
|
||||
},
|
||||
{
|
||||
"boot_command": ["a<wait>a<wait>a"],
|
||||
"boot_wait": "-1s",
|
||||
"cd_files": [
|
||||
"{{user `autounattend`}}",
|
||||
"./floppy/WindowsPowershell.lnk",
|
||||
"./floppy/PinTo10.exe",
|
||||
"./scripts/fixnetwork.ps1",
|
||||
"./scripts/disable-screensaver.ps1",
|
||||
"./scripts/disable-winrm.ps1",
|
||||
"./scripts/enable-winrm.ps1",
|
||||
"./scripts/microsoft-updates.ps1",
|
||||
"./scripts/win-updates.ps1",
|
||||
"./scripts/set-shortcut.ps1"
|
||||
],
|
||||
"communicator": "winrm",
|
||||
"cpus": "{{user `cpus`}}",
|
||||
"disk_size": "{{user `disk_size`}}",
|
||||
"firmware": "efi",
|
||||
"guest_additions_mode": "disable",
|
||||
"guest_os_type": "Windows10_64",
|
||||
"headless": "{{user `headless`}}",
|
||||
"iso_checksum": "{{user `iso_checksum`}}",
|
||||
"iso_url": "{{user `iso_url`}}",
|
||||
"memory": "{{user `memory`}}",
|
||||
"shutdown_command": "shutdown /s /t 10 /f /d p:4:1 /c \"Packer Shutdown\"",
|
||||
"type": "virtualbox-iso",
|
||||
"vm_name": "{{user `vm_name`}}",
|
||||
"winrm_password": "vagrant",
|
||||
"winrm_timeout": "{{ user `winrm_timeout` }}",
|
||||
"winrm_username": "vagrant"
|
||||
},
|
||||
{
|
||||
"boot_command": "",
|
||||
"boot_wait": "6m",
|
||||
"communicator": "winrm",
|
||||
"cpus": "{{user `cpus`}}",
|
||||
"disk_size": "{{user `disk_size`}}",
|
||||
"floppy_files": [
|
||||
"{{user `autounattend`}}",
|
||||
"./floppy/WindowsPowershell.lnk",
|
||||
"./floppy/PinTo10.exe",
|
||||
"./scripts/fixnetwork.ps1",
|
||||
"./scripts/disable-screensaver.ps1",
|
||||
"./scripts/disable-winrm.ps1",
|
||||
"./scripts/enable-winrm.ps1",
|
||||
"./scripts/microsoft-updates.ps1",
|
||||
"./scripts/win-updates.ps1",
|
||||
"./scripts/set-shortcut.ps1"
|
||||
],
|
||||
"guest_os_type": "win-10",
|
||||
"iso_checksum": "{{user `iso_checksum`}}",
|
||||
"iso_url": "{{user `iso_url`}}",
|
||||
"memory": "{{user `memory`}}",
|
||||
"shutdown_command": "shutdown /s /t 10 /f /d p:4:1 /c \"Packer Shutdown\"",
|
||||
"type": "parallels-iso",
|
||||
"parallels_tools_flavor": "win",
|
||||
"prlctl": [
|
||||
[
|
||||
"set",
|
||||
"{{.Name}}",
|
||||
"--efi-boot",
|
||||
"off"
|
||||
]
|
||||
],
|
||||
"vm_name": "{{user `vm_name`}}",
|
||||
"winrm_password": "vagrant",
|
||||
"winrm_timeout": "{{ user `winrm_timeout` }}",
|
||||
"winrm_username": "vagrant"
|
||||
}
|
||||
],
|
||||
"post-processors": [
|
||||
{
|
||||
"keep_input_artifact": false,
|
||||
"output": "cmderdev-10_{{.Provider}}.box",
|
||||
"type": "vagrant",
|
||||
"vagrantfile_template": "vagrantfile-windows_10.template"
|
||||
}
|
||||
],
|
||||
"provisioners": [
|
||||
{
|
||||
"execute_command": "{{ .Vars }} cmd /c \"{{ .Path }}\"",
|
||||
"remote_path": "/tmp/script.bat",
|
||||
"scripts": [
|
||||
"./scripts/enable-rdp.bat"
|
||||
],
|
||||
"type": "windows-shell"
|
||||
},
|
||||
{
|
||||
"scripts": [
|
||||
"./scripts/vm-guest-tools.ps1",
|
||||
"./scripts/debloat-windows.ps1"
|
||||
],
|
||||
"type": "powershell"
|
||||
},
|
||||
{
|
||||
"restart_timeout": "{{user `restart_timeout`}}",
|
||||
"type": "windows-restart"
|
||||
},
|
||||
{
|
||||
"scripts": [
|
||||
"./scripts/set-powerplan.ps1",
|
||||
"./scripts/docker/disable-windows-defender.ps1"
|
||||
],
|
||||
"type": "powershell"
|
||||
},
|
||||
{
|
||||
"execute_command": "{{ .Vars }} cmd /c \"{{ .Path }}\"",
|
||||
"remote_path": "/tmp/script.bat",
|
||||
"scripts": [
|
||||
"./scripts/chocolatey.bat"
|
||||
],
|
||||
"type": "windows-shell"
|
||||
},
|
||||
{
|
||||
"scripts": [
|
||||
"./scripts/chocopacks.ps1"
|
||||
],
|
||||
"type": "powershell"
|
||||
},
|
||||
{
|
||||
"execute_command": "{{ .Vars }} cmd /c \"{{ .Path }}\"",
|
||||
"remote_path": "/tmp/script.bat",
|
||||
"scripts": [
|
||||
"./scripts/pin-powershell.bat",
|
||||
"./scripts/compile-dotnet-assemblies.bat",
|
||||
"./scripts/set-winrm-automatic.bat",
|
||||
"./scripts/uac-enable.bat",
|
||||
"./scripts/dis-updates.bat",
|
||||
"./scripts/compact.bat"
|
||||
],
|
||||
"type": "windows-shell"
|
||||
}
|
||||
],
|
||||
"variables": {
|
||||
"autounattend": "./answer_files/10_efi/Autounattend.xml",
|
||||
"cpus": "2",
|
||||
"disk_size": "262144",
|
||||
"disk_type_id": "1",
|
||||
"memory": "2048",
|
||||
"headless": "false",
|
||||
"iso_url": "./iso/Windows_10.iso",
|
||||
"iso_checksum": "none",
|
||||
"restart_timeout": "5m",
|
||||
"vhv_enable": "false",
|
||||
"virtio_win_iso": "~/virtio-win.iso",
|
||||
"vm_name": "cmderdev10",
|
||||
"winrm_timeout": "6h",
|
||||
"vmx_version": "14"
|
||||
}
|
||||
}
|
249
scripts/packer/windows_11.json
Normal file
249
scripts/packer/windows_11.json
Normal file
@ -0,0 +1,249 @@
|
||||
{
|
||||
"builders": [
|
||||
{
|
||||
"boot_command": [
|
||||
"<leftShiftOn><f10><leftShiftOff><wait>",
|
||||
"reg add HKLM\\SYSTEM\\Setup\\LabConfig /t REG_DWORD /v BypassTPMCheck /d 1<return>",
|
||||
"reg add HKLM\\SYSTEM\\Setup\\LabConfig /t REG_DWORD /v BypassSecureBootCheck /d 1<return><wait>",
|
||||
"exit<return>",
|
||||
"<wait><return>"
|
||||
],
|
||||
"boot_wait": "2m",
|
||||
"communicator": "winrm",
|
||||
"configuration_version": "8.0",
|
||||
"cpus": "2",
|
||||
"disk_size": "{{user `disk_size`}}",
|
||||
"floppy_files": [
|
||||
"{{user `autounattend`}}",
|
||||
"./floppy/WindowsPowershell.lnk",
|
||||
"./floppy/PinTo10.exe",
|
||||
"./scripts/fixnetwork.ps1",
|
||||
"./scripts/disable-screensaver.ps1",
|
||||
"./scripts/disable-winrm.ps1",
|
||||
"./scripts/enable-winrm.ps1",
|
||||
"./scripts/microsoft-updates.bat",
|
||||
"./scripts/win-updates.ps1"
|
||||
],
|
||||
"guest_additions_mode": "none",
|
||||
"iso_checksum": "{{user `iso_checksum`}}",
|
||||
"iso_url": "{{user `iso_url`}}",
|
||||
"memory": "{{user `memory`}}",
|
||||
"shutdown_command": "shutdown /s /t 10 /f /d p:4:1 /c \"Packer Shutdown\"",
|
||||
"switch_name": "{{user `switch_name`}}",
|
||||
"type": "hyperv-iso",
|
||||
"vm_name": "{{user `vm_name`}}",
|
||||
"winrm_password": "vagrant",
|
||||
"winrm_timeout": "{{user `winrm_timeout`}}",
|
||||
"winrm_username": "vagrant"
|
||||
},
|
||||
{
|
||||
"boot_command": [
|
||||
"<leftShiftOn><f10><leftShiftOff><wait>",
|
||||
"reg add HKLM\\SYSTEM\\Setup\\LabConfig /t REG_DWORD /v BypassTPMCheck /d 1<return>",
|
||||
"reg add HKLM\\SYSTEM\\Setup\\LabConfig /t REG_DWORD /v BypassSecureBootCheck /d 1<return><wait>",
|
||||
"exit<return>",
|
||||
"<wait><return>"
|
||||
],
|
||||
"boot_wait": "2m",
|
||||
"communicator": "winrm",
|
||||
"cpus": 2,
|
||||
"disk_adapter_type": "lsisas1068",
|
||||
"disk_size": "{{user `disk_size`}}",
|
||||
"disk_type_id": "{{user `disk_type_id`}}",
|
||||
"floppy_files": [
|
||||
"{{user `autounattend`}}",
|
||||
"./floppy/WindowsPowershell.lnk",
|
||||
"./floppy/PinTo10.exe",
|
||||
"./scripts/fixnetwork.ps1",
|
||||
"./scripts/disable-screensaver.ps1",
|
||||
"./scripts/disable-winrm.ps1",
|
||||
"./scripts/enable-winrm.ps1",
|
||||
"./scripts/microsoft-updates.bat",
|
||||
"./scripts/win-updates.ps1"
|
||||
],
|
||||
"guest_os_type": "windows9-64",
|
||||
"headless": "{{user `headless`}}",
|
||||
"iso_checksum": "{{user `iso_checksum`}}",
|
||||
"iso_url": "{{user `iso_url`}}",
|
||||
"memory": "{{user `memory`}}",
|
||||
"shutdown_command": "shutdown /s /t 10 /f /d p:4:1 /c \"Packer Shutdown\"",
|
||||
"type": "vmware-iso",
|
||||
"version": "{{user `vmx_version`}}",
|
||||
"vm_name": "{{user `vm_name`}}",
|
||||
"vmx_data": {
|
||||
"RemoteDisplay.vnc.enabled": "false",
|
||||
"RemoteDisplay.vnc.port": "5900"
|
||||
},
|
||||
"vmx_remove_ethernet_interfaces": true,
|
||||
"vnc_port_max": 5980,
|
||||
"vnc_port_min": 5900,
|
||||
"winrm_password": "vagrant",
|
||||
"winrm_timeout": "{{user `winrm_timeout`}}",
|
||||
"winrm_username": "vagrant"
|
||||
},
|
||||
{
|
||||
"boot_command": [
|
||||
"<leftShiftOn><f10><leftShiftOff><wait>",
|
||||
"reg add HKLM\\SYSTEM\\Setup\\LabConfig /t REG_DWORD /v BypassTPMCheck /d 1<return>",
|
||||
"reg add HKLM\\SYSTEM\\Setup\\LabConfig /t REG_DWORD /v BypassSecureBootCheck /d 1<return><wait>",
|
||||
"exit<return>",
|
||||
"<wait><return>"
|
||||
],
|
||||
"boot_wait": "2m",
|
||||
"communicator": "winrm",
|
||||
"cpus": 2,
|
||||
"disk_size": "{{user `disk_size`}}",
|
||||
"floppy_files": [
|
||||
"{{user `autounattend`}}",
|
||||
"./floppy/WindowsPowershell.lnk",
|
||||
"./floppy/PinTo10.exe",
|
||||
"./scripts/fixnetwork.ps1",
|
||||
"./scripts/disable-screensaver.ps1",
|
||||
"./scripts/disable-winrm.ps1",
|
||||
"./scripts/enable-winrm.ps1",
|
||||
"./scripts/microsoft-updates.bat",
|
||||
"./scripts/win-updates.ps1"
|
||||
],
|
||||
"guest_additions_mode": "disable",
|
||||
"guest_os_type": "Windows10_64",
|
||||
"headless": "{{user `headless`}}",
|
||||
"iso_checksum": "{{user `iso_checksum`}}",
|
||||
"iso_url": "{{user `iso_url`}}",
|
||||
"memory": "{{user `memory`}}",
|
||||
"shutdown_command": "shutdown /s /t 10 /f /d p:4:1 /c \"Packer Shutdown\"",
|
||||
"type": "virtualbox-iso",
|
||||
"vm_name": "{{user `vm_name`}}",
|
||||
"winrm_password": "vagrant",
|
||||
"winrm_timeout": "{{user `winrm_timeout`}}",
|
||||
"winrm_username": "vagrant"
|
||||
},
|
||||
{
|
||||
"boot_command": [
|
||||
"<leftShiftOn><f10><leftShiftOff><wait>",
|
||||
"reg add HKLM\\SYSTEM\\Setup\\LabConfig /t REG_DWORD /v BypassTPMCheck /d 1<return>",
|
||||
"reg add HKLM\\SYSTEM\\Setup\\LabConfig /t REG_DWORD /v BypassSecureBootCheck /d 1<return><wait>",
|
||||
"exit<return>",
|
||||
"<wait><return>"
|
||||
],
|
||||
"boot_wait": "2m",
|
||||
"communicator": "winrm",
|
||||
"cpus": 2,
|
||||
"disk_size": "{{user `disk_size`}}",
|
||||
"floppy_files": [
|
||||
"{{user `autounattend`}}",
|
||||
"./floppy/WindowsPowershell.lnk",
|
||||
"./floppy/PinTo10.exe",
|
||||
"./scripts/fixnetwork.ps1",
|
||||
"./scripts/disable-screensaver.ps1",
|
||||
"./scripts/disable-winrm.ps1",
|
||||
"./scripts/enable-winrm.ps1",
|
||||
"./scripts/microsoft-updates.bat",
|
||||
"./scripts/win-updates.ps1"
|
||||
],
|
||||
"guest_os_type": "win-10",
|
||||
"iso_checksum": "{{user `iso_checksum`}}",
|
||||
"iso_url": "{{user `iso_url`}}",
|
||||
"memory": "{{user `memory`}}",
|
||||
"shutdown_command": "shutdown /s /t 10 /f /d p:4:1 /c \"Packer Shutdown\"",
|
||||
"type": "parallels-iso",
|
||||
"parallels_tools_flavor": "win",
|
||||
"parallels_tools_mode": "disable",
|
||||
"prlctl": [
|
||||
[
|
||||
"set",
|
||||
"{{.Name}}",
|
||||
"--adaptive-hypervisor",
|
||||
"on"
|
||||
],
|
||||
[
|
||||
"set",
|
||||
"{{.Name}}",
|
||||
"--efi-boot",
|
||||
"off"
|
||||
]
|
||||
],
|
||||
"vm_name": "{{user `vm_name`}}",
|
||||
"winrm_password": "vagrant",
|
||||
"winrm_timeout": "{{user `winrm_timeout`}}",
|
||||
"winrm_username": "vagrant"
|
||||
}
|
||||
],
|
||||
"post-processors": [
|
||||
{
|
||||
"keep_input_artifact": false,
|
||||
"output": "windows_11_{{.Provider}}.box",
|
||||
"type": "vagrant",
|
||||
"vagrantfile_template": "vagrantfile-windows_10.template"
|
||||
}
|
||||
],
|
||||
"provisioners": [
|
||||
{
|
||||
"execute_command": "{{ .Vars }} cmd /c \"{{ .Path }}\"",
|
||||
"remote_path": "/tmp/script.bat",
|
||||
"scripts": [
|
||||
"./scripts/enable-rdp.bat"
|
||||
],
|
||||
"type": "windows-shell"
|
||||
},
|
||||
{
|
||||
"scripts": [
|
||||
"./scripts/vm-guest-tools.ps1",
|
||||
"./scripts/debloat-windows.ps1"
|
||||
],
|
||||
"type": "powershell"
|
||||
},
|
||||
{
|
||||
"restart_timeout": "{{user `restart_timeout`}}",
|
||||
"type": "windows-restart"
|
||||
},
|
||||
{
|
||||
"scripts": [
|
||||
"./scripts/set-powerplan.ps1",
|
||||
"./scripts/docker/disable-windows-defender.ps1"
|
||||
],
|
||||
"type": "powershell"
|
||||
},
|
||||
{
|
||||
"execute_command": "{{ .Vars }} cmd /c \"{{ .Path }}\"",
|
||||
"remote_path": "/tmp/script.bat",
|
||||
"scripts": [
|
||||
"./scripts/chocolatey.bat"
|
||||
],
|
||||
"type": "windows-shell"
|
||||
},
|
||||
{
|
||||
"scripts": [
|
||||
"./scripts/chocopacks.ps1"
|
||||
],
|
||||
"type": "powershell"
|
||||
},
|
||||
{
|
||||
"execute_command": "{{ .Vars }} cmd /c \"{{ .Path }}\"",
|
||||
"remote_path": "/tmp/script.bat",
|
||||
"scripts": [
|
||||
"./scripts/pin-powershell.bat",
|
||||
"./scripts/compile-dotnet-assemblies.bat",
|
||||
"./scripts/set-winrm-automatic.bat",
|
||||
"./scripts/uac-enable.bat",
|
||||
"./scripts/dis-updates.bat",
|
||||
"./scripts/compact.bat"
|
||||
],
|
||||
"type": "windows-shell"
|
||||
}
|
||||
],
|
||||
"variables": {
|
||||
"autounattend": "./answer_files/11/Autounattend.xml",
|
||||
"disk_size": "61440",
|
||||
"disk_type_id": "1",
|
||||
"memory": "4096",
|
||||
"headless": "false",
|
||||
"iso_checksum": "sha256:e8b1d2a1a85a09b4bf6154084a8be8e3c814894a15a7bcf3e8e63fcfa9a528cb",
|
||||
"iso_url": "https://software-download.microsoft.com/download/sg/22000.194.210913-1444.co_release_svc_refresh_CLIENTENTERPRISEEVAL_OEMRET_x64FRE_en-us.iso",
|
||||
"restart_timeout": "5m",
|
||||
"vhv_enable": "false",
|
||||
"virtio_win_iso": "~/virtio-win.iso",
|
||||
"vm_name": "windows_11",
|
||||
"winrm_timeout": "6h",
|
||||
"vmx_version": "14"
|
||||
}
|
||||
}
|
@ -25,7 +25,7 @@
|
||||
.LINK
|
||||
http://cmder.app/ - Project Home
|
||||
#>
|
||||
[CmdletBinding(SupportsShouldProcess=$true)]
|
||||
[CmdletBinding(SupportsShouldProcess = $true)]
|
||||
Param(
|
||||
# CmdletBinding will give us;
|
||||
# -verbose switch to turn on logging and
|
||||
@ -55,7 +55,7 @@ function Match-Filenames {
|
||||
|
||||
$position = 0
|
||||
|
||||
if ([String]::IsNullOrEmpty($filename) -Or [String]::IsNullOrEmpty($filenameDownload)) {
|
||||
if ([String]::IsNullOrEmpty($filename) -or [String]::IsNullOrEmpty($filenameDownload)) {
|
||||
throw "Either one or both filenames are empty!"
|
||||
}
|
||||
|
||||
@ -88,20 +88,26 @@ function Fetch-DownloadUrl {
|
||||
|
||||
$url = [uri] $urlStr
|
||||
|
||||
if ((-Not $url) -Or ($null -eq $url) -Or ($url -eq '')) {
|
||||
if ((-not $url) -or ($null -eq $url) -or ($url -eq '')) {
|
||||
throw "Failed to parse url: $urlStr"
|
||||
}
|
||||
|
||||
if (-Not ("http", "https" -Contains $url.Scheme)) {
|
||||
if (-not ("http", "https" -contains $url.Scheme)) {
|
||||
throw "unknown source scheme: $($url.Scheme)"
|
||||
}
|
||||
|
||||
if (-Not ($url.Host -ilike "*github.com")) {
|
||||
if (-not ($url.Host -ilike "*github.com")) {
|
||||
throw "unknown source domain: $($url.Host)"
|
||||
}
|
||||
|
||||
$p = $url.Segments.Split([Environment]::NewLine)
|
||||
|
||||
$headers = @{}
|
||||
|
||||
if ($env:GITHUB_TOKEN) {
|
||||
$headers["Authorization"] = "token $($env:GITHUB_TOKEN)"
|
||||
}
|
||||
|
||||
# Api server for GitHub
|
||||
$urlHost = "api.github.com"
|
||||
|
||||
@ -110,18 +116,18 @@ function Fetch-DownloadUrl {
|
||||
|
||||
$apiUrl = [uri] (New-Object System.UriBuilder -ArgumentList $url.Scheme, $urlHost, -1, $urlPath).Uri
|
||||
|
||||
$info = Invoke-RestMethod -Uri $apiUrl
|
||||
$info = Invoke-RestMethod -Uri $apiUrl -Headers $headers
|
||||
|
||||
$downloadLinks = (New-Object System.Collections.Generic.List[System.Object])
|
||||
|
||||
$charCount = 0
|
||||
|
||||
if (-Not ($info -Is [array])) {
|
||||
if (-not ($info -is [array])) {
|
||||
throw "The response received from API server is invalid"
|
||||
}
|
||||
|
||||
:loop foreach ($i in $info) {
|
||||
if (-Not ($i.assets -Is [array])) {
|
||||
if (-not ($i.assets -is [array])) {
|
||||
continue
|
||||
}
|
||||
|
||||
@ -157,12 +163,12 @@ function Fetch-DownloadUrl {
|
||||
}
|
||||
|
||||
# Special case for archive downloads of repository
|
||||
if (($null -eq $downloadLinks) -Or (-Not $downloadLinks)) {
|
||||
if ((($p | % {$_.Trim('/')}) -Contains "archive") -And $info[0].tag_name) {
|
||||
if (($null -eq $downloadLinks) -or (-not $downloadLinks)) {
|
||||
if ((($p | ForEach-Object { $_.Trim('/') }) -contains "archive") -and $info[0].tag_name) {
|
||||
for ($i = 0; $i -lt $p.Length; $i++) {
|
||||
if ($p[$i].Trim('/') -eq "archive") {
|
||||
$p[$i+1] = $info[0].tag_name + ".zip"
|
||||
$downloadLinks = $url.Scheme + "://" + $url.Host + ($p -Join '')
|
||||
$p[$i + 1] = $info[0].tag_name + ".zip"
|
||||
$downloadLinks = $url.Scheme + "://" + $url.Host + ($p -join '')
|
||||
return $downloadLinks
|
||||
}
|
||||
}
|
||||
@ -188,11 +194,11 @@ function Fetch-DownloadUrl {
|
||||
|
||||
$downloadLinks = $temp | Where-Object { (Match-Filenames $url $_ true) -eq $charCount }
|
||||
|
||||
if (($null -eq $downloadLinks) -Or (-Not $downloadLinks)) {
|
||||
if (($null -eq $downloadLinks) -or (-not $downloadLinks)) {
|
||||
throw "No suitable download links matched for the url!"
|
||||
}
|
||||
|
||||
if (-Not($downloadLinks -is [String])) {
|
||||
if (-not($downloadLinks -is [String])) {
|
||||
throw "Found multiple matches for the same url:`n" + $downloadLinks
|
||||
}
|
||||
|
||||
@ -211,7 +217,7 @@ foreach ($s in $sources) {
|
||||
|
||||
$downloadUrl = Fetch-DownloadUrl $s.url
|
||||
|
||||
if (($null -eq $downloadUrl) -Or ($downloadUrl -eq '')) {
|
||||
if (($null -eq $downloadUrl) -or ($downloadUrl -eq '')) {
|
||||
Write-Verbose "No new links were found"
|
||||
continue
|
||||
}
|
||||
@ -222,15 +228,15 @@ foreach ($s in $sources) {
|
||||
|
||||
$version = ''
|
||||
|
||||
if ( ($url.Segments[-3] -eq "download/") -And ($url.Segments[-2].StartsWith("v")) ) {
|
||||
if (($url.Segments[-3] -eq "download/") -and ($url.Segments[-2].StartsWith("v"))) {
|
||||
$version = $url.Segments[-2].TrimStart('v').TrimEnd('/')
|
||||
}
|
||||
|
||||
if ( ($url.Segments[-2] -eq "archive/") ) {
|
||||
if (($url.Segments[-2] -eq "archive/")) {
|
||||
$version = [System.IO.Path]::GetFileNameWithoutExtension($url.Segments[-1].TrimStart('v').TrimEnd('/'))
|
||||
}
|
||||
|
||||
if ( $version -eq '' ) {
|
||||
if ($version -eq '') {
|
||||
throw "Unable to extract version from url string"
|
||||
}
|
||||
|
||||
@ -255,11 +261,11 @@ if ($count -eq 0) {
|
||||
return
|
||||
}
|
||||
|
||||
if ( $Env:APPVEYOR -eq 'True' ) {
|
||||
if ($Env:APPVEYOR -eq 'True') {
|
||||
Add-AppveyorMessage -Message "Successfully updated $count dependencies." -Category Information
|
||||
}
|
||||
|
||||
if ( $Env:GITHUB_ACTIONS -eq 'true' ) {
|
||||
if ($Env:GITHUB_ACTIONS -eq 'true') {
|
||||
Write-Output "::notice title=Task Complete::Successfully updated $count dependencies."
|
||||
}
|
||||
|
||||
|
@ -32,17 +32,19 @@ function Delete-Existing($path) {
|
||||
function Extract-Archive($source, $target) {
|
||||
Write-Verbose $("Extracting Archive '$cmder_root\vendor\" + $source.replace('/','\') + " to '$cmder_root\vendor\$target'")
|
||||
Invoke-Expression "7z x -y -o`"$($target)`" `"$source`" > `$null"
|
||||
if ($lastexitcode -ne 0) {
|
||||
if ($LastExitCode -ne 0) {
|
||||
Write-Error "Extracting of $source failed"
|
||||
}
|
||||
Remove-Item $source
|
||||
}
|
||||
|
||||
function Create-Archive($source, $target, $params) {
|
||||
$command = "7z a -xr@`"$source\packignore`" $params `"$target`" `"$source\*`" > `$null"
|
||||
$command = "7z a -x@`"$source\packignore`" $params `"$target`" `"*`" > `$null"
|
||||
Write-Verbose "Creating Archive from '$source' in '$target' with parameters '$params'"
|
||||
Push-Location $source
|
||||
Invoke-Expression $command
|
||||
if ($lastexitcode -ne 0) {
|
||||
Pop-Location
|
||||
if ($LastExitCode -ne 0) {
|
||||
Write-Error "Compressing $source failed"
|
||||
}
|
||||
}
|
||||
@ -54,7 +56,7 @@ function Flatten-Directory($name) {
|
||||
$moving = "$($name)_moving"
|
||||
Rename-Item $name -NewName $moving
|
||||
Write-Verbose "Flattening the '$name' directory..."
|
||||
$child = (Get-Childitem $moving)[0] | Resolve-Path
|
||||
$child = (Get-ChildItem $moving)[0] | Resolve-Path
|
||||
Move-Item -Path $child -Destination $name
|
||||
Remove-Item -Recurse $moving
|
||||
}
|
||||
@ -78,7 +80,7 @@ function Set-GHVariable {
|
||||
Write-Verbose "Setting CI variable $Name to $Value" -Verbose
|
||||
|
||||
if ($env:GITHUB_ENV) {
|
||||
echo "$Name=$Value" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
|
||||
Write-Output "$Name=$Value" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
|
||||
}
|
||||
}
|
||||
|
||||
@ -98,8 +100,8 @@ function Get-VersionStr {
|
||||
|
||||
# Determine if git is available
|
||||
if (Get-Command "git.exe" -ErrorAction SilentlyContinue) {
|
||||
# Determine if the current diesctory is a git repository
|
||||
$GitPresent = Invoke-Expression "git rev-parse --is-inside-work-tree" -erroraction SilentlyContinue
|
||||
# Determine if the current directory is a git repository
|
||||
$GitPresent = Invoke-Expression "git rev-parse --is-inside-work-tree" -ErrorAction SilentlyContinue
|
||||
|
||||
if ( $GitPresent -eq 'true' ) {
|
||||
$string = Invoke-Expression "git describe --abbrev=0 --tags"
|
||||
@ -130,7 +132,7 @@ function Parse-Changelog($file) {
|
||||
[regex]$regex = '^## \[(?<version>[\w\-\.]+)\]\([^\n()]+\)\s+\([^\n()]+\)$';
|
||||
|
||||
# Find the first match of the version string which means the latest version
|
||||
$version = Select-String -Path $file -Pattern $regex | Select-Object -First 1 | % { $_.Matches.Groups[1].Value }
|
||||
$version = Select-String -Path $file -Pattern $regex | Select-Object -First 1 | ForEach-Object { $_.Matches.Groups[1].Value }
|
||||
|
||||
return $version
|
||||
}
|
||||
@ -226,16 +228,16 @@ function Download-File {
|
||||
|
||||
$useBitTransfer = $null -ne (Get-Module -Name BitsTransfer -ListAvailable) -and ($PSVersionTable.PSVersion.Major -le 5)
|
||||
|
||||
$File = $File -Replace "/", "\"
|
||||
$File = $File -replace "/", "\"
|
||||
|
||||
try {
|
||||
if ($useBitTransfer) {
|
||||
Start-BitsTransfer -Source $Url -Destination $File -DisplayName "Downloading $Url to $File"
|
||||
Return
|
||||
Start-BitsTransfer -Source $Url -Destination $File -DisplayName "Downloading '$Url' to $File"
|
||||
return
|
||||
}
|
||||
}
|
||||
catch {
|
||||
Write-Error "Failed to download file using BITS, reason: $_`nUsing fallback method instead...`n"
|
||||
Write-Error "Failed to download file using BITS, reason: $_`nUsing fallback method instead...`n" -ErrorAction:Continue
|
||||
}
|
||||
|
||||
Write-Verbose "Downloading from $Url to $File`n"
|
||||
|
44
scripts/vagrant/add-cmder.ps1
Normal file
44
scripts/vagrant/add-cmder.ps1
Normal file
@ -0,0 +1,44 @@
|
||||
choco install -y --force 7zip 7zip.install
|
||||
choco install -y --force cmder
|
||||
|
||||
$env:path = "$env:path;c:\tools\cmder\vendor\git-for-windows\cmd;c:\tools\cmder\vendor\git-for-windows\usr\bin;c:\tools\cmder\vendor\git-for-windows\mingw64\bin"
|
||||
c:
|
||||
cd $env:userprofile
|
||||
git clone https://github.com/cmderdev/cmder cmderdev 2>&1
|
||||
|
||||
if ("$env:USERNAME" -eq "vagrant" -and -not (test-path "$env:userprofile\cmderdev\vendor\git-for-windows")) {
|
||||
invoke-expression -command "TAKEOWN /F `"$env:userprofile\cmderdev`" /R /D y /s localhost /u vagrant /p vagrant"
|
||||
}
|
||||
|
||||
cd $env:userprofile/cmderdev
|
||||
git remote add upstream https://github.com/cmderdev/cmder
|
||||
|
||||
Install-PackageProvider -Name NuGet -Force
|
||||
install-module posh-git -force
|
||||
|
||||
cmd.exe /c "call `"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat`" && set > %temp%\vcvars.txt"
|
||||
Get-Content "$env:temp\vcvars.txt" | Foreach-Object {
|
||||
if ($_ -match "^(.*?)=(.*)$") {
|
||||
Set-Content "env:\$($matches[1])" $matches[2]
|
||||
}
|
||||
}
|
||||
|
||||
copy-item -erroraction silentlycontinue "C:\Tools\Cmder\Cmder.exe" "$env:userprofile\cmderdev"
|
||||
remove-item -erroraction silentlycontinue "$env:userprofile\cmderdev\launcher\x64\release\cmder.exe" -force
|
||||
|
||||
start-process -erroraction silentlycontinue -nonewwindow -workingdirectory "$env:userprofile\cmderdev\scripts" -filepath "powershell.exe" -argumentlist ".\build.ps1 -verbose -compile"
|
||||
|
||||
copy-item -erroraction silentlycontinue "$env:userprofile\cmderdev\launcher\x64\release\cmder.exe" "$env:userprofile\cmderdev" -force
|
||||
|
||||
# tabby
|
||||
setx cmder_root "${env:userprofile}\cmderdev"
|
||||
|
||||
# C:\Users\vagrant\AppData\Roaming\Hyper
|
||||
# // shell: '',
|
||||
# shell: 'cmd.exe',
|
||||
# // for setting shell arguments (i.e. for using interactive shellArgs: `['-i']`)
|
||||
# // by default `['--login']` will be used
|
||||
# // shellArgs: ['--login'],
|
||||
# shellArgs: ['/k', 'C:\\users\\vagrant\\cmderdev\\vendor\\init.bat'],
|
||||
|
||||
|
283
scripts/vagrant/windows_terminal_settings.json.default
Normal file
283
scripts/vagrant/windows_terminal_settings.json.default
Normal file
@ -0,0 +1,283 @@
|
||||
{
|
||||
"$help": "https://aka.ms/terminal-documentation",
|
||||
"$schema": "https://aka.ms/terminal-profiles-schema",
|
||||
"actions":
|
||||
[
|
||||
{
|
||||
"command":
|
||||
{
|
||||
"action": "copy",
|
||||
"singleLine": false
|
||||
},
|
||||
"keys": "ctrl+c"
|
||||
},
|
||||
{
|
||||
"command": "paste",
|
||||
"keys": "ctrl+v"
|
||||
},
|
||||
{
|
||||
"command": "find",
|
||||
"keys": "ctrl+shift+f"
|
||||
},
|
||||
{
|
||||
"command":
|
||||
{
|
||||
"action": "splitPane",
|
||||
"split": "auto",
|
||||
"splitMode": "duplicate"
|
||||
},
|
||||
"keys": "alt+shift+d"
|
||||
}
|
||||
],
|
||||
"copyFormatting": "none",
|
||||
"copyOnSelect": false,
|
||||
"defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
|
||||
"profiles":
|
||||
{
|
||||
"defaults": {},
|
||||
"list":
|
||||
[
|
||||
{
|
||||
"commandline": "%SystemRoot%\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
|
||||
"guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
|
||||
"hidden": false,
|
||||
"name": "Windows PowerShell"
|
||||
},
|
||||
{
|
||||
"commandline": "%SystemRoot%\\System32\\cmd.exe",
|
||||
"guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
|
||||
"hidden": false,
|
||||
"name": "Command Prompt"
|
||||
},
|
||||
{
|
||||
"guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
|
||||
"hidden": false,
|
||||
"name": "Azure Cloud Shell",
|
||||
"source": "Windows.Terminal.Azure"
|
||||
},
|
||||
{
|
||||
"guid": "{3b26d644-1d3b-5a0c-ab09-39d4dd9ae00e}",
|
||||
"hidden": false,
|
||||
"name": "Developer Command Prompt for VS 2022",
|
||||
"source": "Windows.Terminal.VisualStudio"
|
||||
},
|
||||
{
|
||||
"guid": "{589cd367-e65f-5e6a-a1c7-2b8d6f250da8}",
|
||||
"hidden": false,
|
||||
"name": "Developer PowerShell for VS 2022",
|
||||
"source": "Windows.Terminal.VisualStudio"
|
||||
}
|
||||
]
|
||||
},
|
||||
"schemes":
|
||||
[
|
||||
{
|
||||
"background": "#0C0C0C",
|
||||
"black": "#0C0C0C",
|
||||
"blue": "#0037DA",
|
||||
"brightBlack": "#767676",
|
||||
"brightBlue": "#3B78FF",
|
||||
"brightCyan": "#61D6D6",
|
||||
"brightGreen": "#16C60C",
|
||||
"brightPurple": "#B4009E",
|
||||
"brightRed": "#E74856",
|
||||
"brightWhite": "#F2F2F2",
|
||||
"brightYellow": "#F9F1A5",
|
||||
"cursorColor": "#FFFFFF",
|
||||
"cyan": "#3A96DD",
|
||||
"foreground": "#CCCCCC",
|
||||
"green": "#13A10E",
|
||||
"name": "Campbell",
|
||||
"purple": "#881798",
|
||||
"red": "#C50F1F",
|
||||
"selectionBackground": "#FFFFFF",
|
||||
"white": "#CCCCCC",
|
||||
"yellow": "#C19C00"
|
||||
},
|
||||
{
|
||||
"background": "#012456",
|
||||
"black": "#0C0C0C",
|
||||
"blue": "#0037DA",
|
||||
"brightBlack": "#767676",
|
||||
"brightBlue": "#3B78FF",
|
||||
"brightCyan": "#61D6D6",
|
||||
"brightGreen": "#16C60C",
|
||||
"brightPurple": "#B4009E",
|
||||
"brightRed": "#E74856",
|
||||
"brightWhite": "#F2F2F2",
|
||||
"brightYellow": "#F9F1A5",
|
||||
"cursorColor": "#FFFFFF",
|
||||
"cyan": "#3A96DD",
|
||||
"foreground": "#CCCCCC",
|
||||
"green": "#13A10E",
|
||||
"name": "Campbell Powershell",
|
||||
"purple": "#881798",
|
||||
"red": "#C50F1F",
|
||||
"selectionBackground": "#FFFFFF",
|
||||
"white": "#CCCCCC",
|
||||
"yellow": "#C19C00"
|
||||
},
|
||||
{
|
||||
"background": "#282C34",
|
||||
"black": "#282C34",
|
||||
"blue": "#61AFEF",
|
||||
"brightBlack": "#5A6374",
|
||||
"brightBlue": "#61AFEF",
|
||||
"brightCyan": "#56B6C2",
|
||||
"brightGreen": "#98C379",
|
||||
"brightPurple": "#C678DD",
|
||||
"brightRed": "#E06C75",
|
||||
"brightWhite": "#DCDFE4",
|
||||
"brightYellow": "#E5C07B",
|
||||
"cursorColor": "#FFFFFF",
|
||||
"cyan": "#56B6C2",
|
||||
"foreground": "#DCDFE4",
|
||||
"green": "#98C379",
|
||||
"name": "One Half Dark",
|
||||
"purple": "#C678DD",
|
||||
"red": "#E06C75",
|
||||
"selectionBackground": "#FFFFFF",
|
||||
"white": "#DCDFE4",
|
||||
"yellow": "#E5C07B"
|
||||
},
|
||||
{
|
||||
"background": "#FAFAFA",
|
||||
"black": "#383A42",
|
||||
"blue": "#0184BC",
|
||||
"brightBlack": "#4F525D",
|
||||
"brightBlue": "#61AFEF",
|
||||
"brightCyan": "#56B5C1",
|
||||
"brightGreen": "#98C379",
|
||||
"brightPurple": "#C577DD",
|
||||
"brightRed": "#DF6C75",
|
||||
"brightWhite": "#FFFFFF",
|
||||
"brightYellow": "#E4C07A",
|
||||
"cursorColor": "#4F525D",
|
||||
"cyan": "#0997B3",
|
||||
"foreground": "#383A42",
|
||||
"green": "#50A14F",
|
||||
"name": "One Half Light",
|
||||
"purple": "#A626A4",
|
||||
"red": "#E45649",
|
||||
"selectionBackground": "#FFFFFF",
|
||||
"white": "#FAFAFA",
|
||||
"yellow": "#C18301"
|
||||
},
|
||||
{
|
||||
"background": "#002B36",
|
||||
"black": "#002B36",
|
||||
"blue": "#268BD2",
|
||||
"brightBlack": "#073642",
|
||||
"brightBlue": "#839496",
|
||||
"brightCyan": "#93A1A1",
|
||||
"brightGreen": "#586E75",
|
||||
"brightPurple": "#6C71C4",
|
||||
"brightRed": "#CB4B16",
|
||||
"brightWhite": "#FDF6E3",
|
||||
"brightYellow": "#657B83",
|
||||
"cursorColor": "#FFFFFF",
|
||||
"cyan": "#2AA198",
|
||||
"foreground": "#839496",
|
||||
"green": "#859900",
|
||||
"name": "Solarized Dark",
|
||||
"purple": "#D33682",
|
||||
"red": "#DC322F",
|
||||
"selectionBackground": "#FFFFFF",
|
||||
"white": "#EEE8D5",
|
||||
"yellow": "#B58900"
|
||||
},
|
||||
{
|
||||
"background": "#FDF6E3",
|
||||
"black": "#002B36",
|
||||
"blue": "#268BD2",
|
||||
"brightBlack": "#073642",
|
||||
"brightBlue": "#839496",
|
||||
"brightCyan": "#93A1A1",
|
||||
"brightGreen": "#586E75",
|
||||
"brightPurple": "#6C71C4",
|
||||
"brightRed": "#CB4B16",
|
||||
"brightWhite": "#FDF6E3",
|
||||
"brightYellow": "#657B83",
|
||||
"cursorColor": "#002B36",
|
||||
"cyan": "#2AA198",
|
||||
"foreground": "#657B83",
|
||||
"green": "#859900",
|
||||
"name": "Solarized Light",
|
||||
"purple": "#D33682",
|
||||
"red": "#DC322F",
|
||||
"selectionBackground": "#FFFFFF",
|
||||
"white": "#EEE8D5",
|
||||
"yellow": "#B58900"
|
||||
},
|
||||
{
|
||||
"background": "#000000",
|
||||
"black": "#000000",
|
||||
"blue": "#3465A4",
|
||||
"brightBlack": "#555753",
|
||||
"brightBlue": "#729FCF",
|
||||
"brightCyan": "#34E2E2",
|
||||
"brightGreen": "#8AE234",
|
||||
"brightPurple": "#AD7FA8",
|
||||
"brightRed": "#EF2929",
|
||||
"brightWhite": "#EEEEEC",
|
||||
"brightYellow": "#FCE94F",
|
||||
"cursorColor": "#FFFFFF",
|
||||
"cyan": "#06989A",
|
||||
"foreground": "#D3D7CF",
|
||||
"green": "#4E9A06",
|
||||
"name": "Tango Dark",
|
||||
"purple": "#75507B",
|
||||
"red": "#CC0000",
|
||||
"selectionBackground": "#FFFFFF",
|
||||
"white": "#D3D7CF",
|
||||
"yellow": "#C4A000"
|
||||
},
|
||||
{
|
||||
"background": "#FFFFFF",
|
||||
"black": "#000000",
|
||||
"blue": "#3465A4",
|
||||
"brightBlack": "#555753",
|
||||
"brightBlue": "#729FCF",
|
||||
"brightCyan": "#34E2E2",
|
||||
"brightGreen": "#8AE234",
|
||||
"brightPurple": "#AD7FA8",
|
||||
"brightRed": "#EF2929",
|
||||
"brightWhite": "#EEEEEC",
|
||||
"brightYellow": "#FCE94F",
|
||||
"cursorColor": "#000000",
|
||||
"cyan": "#06989A",
|
||||
"foreground": "#555753",
|
||||
"green": "#4E9A06",
|
||||
"name": "Tango Light",
|
||||
"purple": "#75507B",
|
||||
"red": "#CC0000",
|
||||
"selectionBackground": "#FFFFFF",
|
||||
"white": "#D3D7CF",
|
||||
"yellow": "#C4A000"
|
||||
},
|
||||
{
|
||||
"background": "#000000",
|
||||
"black": "#000000",
|
||||
"blue": "#000080",
|
||||
"brightBlack": "#808080",
|
||||
"brightBlue": "#0000FF",
|
||||
"brightCyan": "#00FFFF",
|
||||
"brightGreen": "#00FF00",
|
||||
"brightPurple": "#FF00FF",
|
||||
"brightRed": "#FF0000",
|
||||
"brightWhite": "#FFFFFF",
|
||||
"brightYellow": "#FFFF00",
|
||||
"cursorColor": "#FFFFFF",
|
||||
"cyan": "#008080",
|
||||
"foreground": "#C0C0C0",
|
||||
"green": "#008000",
|
||||
"name": "Vintage",
|
||||
"purple": "#800080",
|
||||
"red": "#800000",
|
||||
"selectionBackground": "#FFFFFF",
|
||||
"white": "#C0C0C0",
|
||||
"yellow": "#808000"
|
||||
}
|
||||
],
|
||||
"themes": []
|
||||
}
|
9
scripts/vagrant/windows_terminal_state.json.default
Normal file
9
scripts/vagrant/windows_terminal_state.json.default
Normal file
@ -0,0 +1,9 @@
|
||||
{
|
||||
"generatedProfiles" :
|
||||
[
|
||||
"{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
|
||||
"{589cd367-e65f-5e6a-a1c7-2b8d6f250da8}",
|
||||
"{3b26d644-1d3b-5a0c-ab09-39d4dd9ae00e}"
|
||||
],
|
||||
"settingsHash" : "6e0f2330b78337f3-01d95614596b3f65"
|
||||
}
|
4
vendor/ConEmu.xml.default
vendored
4
vendor/ConEmu.xml.default
vendored
@ -549,14 +549,14 @@
|
||||
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
||||
<value name="Active" type="long" data="0"/>
|
||||
<value name="Count" type="long" data="1"/>
|
||||
<value name="Cmd1" type="string" data="*"%ConEmuDir%\..\git-for-windows\usr\bin\bash.exe" --login -i"/>
|
||||
<value name="Cmd1" type="string" data="*set "PATH=%ConEmuDir%\..\git-for-windows\usr\bin;%PATH%" & %ConEmuDir%\..\git-for-windows\git-cmd.exe --no-cd --command=%ConEmuBaseDirShort%\conemu-msys2-64.exe "%ConEmuDir%\..\git-for-windows\usr\bin\bash.exe" --login -i"/>
|
||||
</key>
|
||||
<key name="Task8" modified="2018-02-22 06:05:13" build="171109">
|
||||
<value name="Name" type="string" data="{bash::bash}"/>
|
||||
<value name="Flags" type="dword" data="00000000"/>
|
||||
<value name="Hotkey" type="dword" data="00000000"/>
|
||||
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
||||
<value name="Cmd1" type="string" data=""%ConEmuDir%\..\git-for-windows\usr\bin\bash.exe" --login -i"/>
|
||||
<value name="Cmd1" type="string" data="set "PATH=%ConEmuDir%\..\git-for-windows\usr\bin;%PATH%" & %ConEmuDir%\..\git-for-windows\git-cmd.exe --no-cd --command=%ConEmuBaseDirShort%\conemu-msys2-64.exe "%ConEmuDir%\..\git-for-windows\usr\bin\bash.exe" --login -i"/>
|
||||
<value name="Active" type="long" data="0"/>
|
||||
<value name="Count" type="long" data="1"/>
|
||||
</key>
|
||||
|
1
vendor/bin/add-cmderrootenvar.ps1
vendored
Normal file
1
vendor/bin/add-cmderrootenvar.ps1
vendored
Normal file
@ -0,0 +1 @@
|
||||
setx cmder_root "${env:cmder_root}"
|
36
vendor/bin/add-cmdertodesktop.ps1
vendored
Normal file
36
vendor/bin/add-cmdertodesktop.ps1
vendored
Normal file
@ -0,0 +1,36 @@
|
||||
if (test-path "c:\windows\set-shortcut.ps1") {
|
||||
$setShortcut = "c:\windows\set-shortcut.ps1"
|
||||
}
|
||||
|
||||
if (test-path "${env:USERPROFILE}\cmderdev") {
|
||||
$env:cmder_root = "${env:USERPROFILE}\cmderdev"
|
||||
write-host "Creating '${env:USERPROFILE}\Desktop\Cmderdev.lnk'..."
|
||||
|
||||
if (test-path "${env:USERPROFILE}\cmderdev\vendor\bin\set-shortcut.ps1") {
|
||||
$setShortcut = "$env:cmder_root\vendor\bin\set-shortcut.ps1"
|
||||
}
|
||||
|
||||
start-process -NoNewWindow -filePath "powershell.exe" -ArgumentList "-file `"${setShortcut}`" -sourceexe `"${env:cmder_root}\Cmder.exe`" -DestinationPath `"${env:USERPROFILE}\Desktop\Cmderdev.lnk`" -WorkingDirectory `"${env:cmder_root}`""
|
||||
}
|
||||
|
||||
if (test-path "${env:USERPROFILE}\cmder") {
|
||||
$env:cmder_root = "${env:USERPROFILE}\cmder"
|
||||
|
||||
if (test-path "${cmder_root}\vendor\bin\set-shortcut.ps1") {
|
||||
$setShortcut = "$env:cmder_root\vendor\bin\set-shortcut.ps1"
|
||||
}
|
||||
|
||||
write-host "Creating '${env:USERPROFILE}\Desktop\Cmder.lnk'..."
|
||||
start-process -NoNewWindow -filePath "powershell.exe" -ArgumentList "-file `"${setShortcut}`" -sourceexe `"$env:cmder_root\Cmder.exe`" -DestinationPath `"${env:USERPROFILE}\Desktop\Cmder.lnk`" -WorkingDirectory `"${env:USERPROFILE}`""
|
||||
} elseif (test-path "C:\tools\cmder") {
|
||||
$env:cmder_root = "C:\tools\cmder"
|
||||
|
||||
if (test-path "${cmder_root}\vendor\bin\set-shortcut.ps1") {
|
||||
$setShortcut = "$env:cmder_root\vendor\bin\set-shortcut.ps1"
|
||||
}
|
||||
|
||||
write-host "Creating '${env:USERPROFILE}\Desktop\Cmder.lnk'..."
|
||||
start-process -NoNewWindow -filePath "powershell.exe" -ArgumentList "-file `"${setShortcut}`" -sourceexe `"$env:cmder_root\Cmder.exe`" -DestinationPath `"${env:USERPROFILE}\Desktop\Cmder.lnk`" -WorkingDirectory `"${env:USERPROFILE}`""
|
||||
}
|
||||
|
||||
|
39
vendor/bin/add-vscodeprofile.ps1
vendored
Normal file
39
vendor/bin/add-vscodeprofile.ps1
vendored
Normal file
@ -0,0 +1,39 @@
|
||||
# VSCode
|
||||
$VSCodeUserSettings = "$env:APPDATA/Code/User"
|
||||
$VSCodeSettings = "$VSCodeUserSettings/settings.json";
|
||||
$VSCodeSettingsNew = $VSCodeSettings.replace('.json', '-new.json')
|
||||
|
||||
if (test-path $VSCodeSettings) {
|
||||
$data = get-content -path $VSCodeSettings -ErrorAction silentlycontinue | out-string | ConvertFrom-Json
|
||||
}
|
||||
else {
|
||||
New-Item -ItemType directory $VSCodeUserSettings -force
|
||||
$data = @{}
|
||||
}
|
||||
|
||||
write-host $data
|
||||
|
||||
$data | Add-Member -force -Name 'terminal.integrated.defaultProfile.windows' -MemberType NoteProperty -Value "Cmder"
|
||||
|
||||
if ($null -eq $data.'terminal.integrated.profiles.windows') {
|
||||
write-host "Adding 'terminal.integrated.profiles.windows'..."
|
||||
$data | Add-Member -force -Name 'terminal.integrated.profiles.windows' -MemberType NoteProperty -Value @{}
|
||||
}
|
||||
|
||||
write-host "Adding 'terminal.integrated.profiles.windows.Cmder' profile..."
|
||||
$data.'terminal.integrated.profiles.windows'.'Cmder' = @{
|
||||
"name" = "Cmder";
|
||||
"path" = @(
|
||||
"`${env:windir}/Sysnative/cmd.exe";
|
||||
"`${env:windir}/System32/cmd.exe";
|
||||
);
|
||||
"args" = @(
|
||||
"/k";
|
||||
"`${env:USERPROFILE}/cmderdev/vendor/bin/vscode_init.cmd");
|
||||
"icon" = "terminal-cmd";
|
||||
"color" = "terminal.ansiGreen";
|
||||
};
|
||||
|
||||
$data | ConvertTo-Json -depth 100 | set-content $VSCodeSettings
|
||||
|
||||
|
74
vendor/bin/add-windowsterminalprofiles.ps1
vendored
Normal file
74
vendor/bin/add-windowsterminalprofiles.ps1
vendored
Normal file
@ -0,0 +1,74 @@
|
||||
# Windows Terminal
|
||||
$windowsTerminalFolder = (dir "$env:userprofile/AppData/Local/Packages/Microsoft.WindowsTerminal_*").name
|
||||
$windowsTerminalPath = "$env:userprofile/AppData/Local/Packages/$windowsTerminalFolder"
|
||||
$windowsTerminalSettings = $windowsTerminalPath + '/localState/settings.json'
|
||||
$windowsTerminalSettingsNew = $windowsTerminalPath + '/localState/settings-new.json'
|
||||
|
||||
if (test-path "$env:userprofile/Documents/windows_terminal_settings.json.default") {
|
||||
if (test-path "$windowsTerminalPath/LocalState/settings.json") {
|
||||
del "$env:userprofile/Documents/windows_terminal_settings.json.default"
|
||||
} else {
|
||||
move-item -path $env:userprofile/Documents/windows_terminal_settings.json.default -destination $windowsTerminalPath/LocalState/settings.json
|
||||
}
|
||||
}
|
||||
|
||||
if (test-path "$env:userprofile/Documents/windows_terminal_state.json.default") {
|
||||
if (test-path "$windowsTerminalPath/LocalState/state.json") {
|
||||
del "$env:userprofile/Documents/windows_terminal_state.json.default"
|
||||
} else {
|
||||
move-item -path $env:userprofile/Documents/windows_terminal_state.json.default -destination $windowsTerminalPath/LocalState/state.json
|
||||
}
|
||||
}
|
||||
|
||||
if (test-path "$windowsTerminalPath/LocalState/state.json") {
|
||||
$json = get-content $windowsTerminalSettings | ConvertFrom-Json
|
||||
|
||||
$json.defaultProfile="{00000000-0000-0000-ba54-000000000132}"
|
||||
|
||||
$cmderFound = $false
|
||||
$cmderAsAdminFound = $false
|
||||
|
||||
foreach ($profile in $json.profiles.list) {
|
||||
if ($profile.Name -eq "Cmder") {
|
||||
$cmderFound = $true
|
||||
}
|
||||
elseIf ($profile.Name -eq "Cmder as Admin") {
|
||||
$cmderAsAdminFound = $true
|
||||
}
|
||||
}
|
||||
|
||||
if (-not $cmderFound) {
|
||||
write-host "Adding 'Cmder' to Windows Terminal..."
|
||||
|
||||
$json.profiles.list += @{
|
||||
commandline="cmd.exe /k `"%USERPROFILE%/cmderdev/vendor/init.bat`"";
|
||||
startingDirectory="%USERPROFILE%/cmderdev";
|
||||
icon="%USERPROFILE%/cmderdev/icons/cmder.ico";
|
||||
closeOnExit="graceful";
|
||||
guid="{00000000-0000-0000-ba54-000000000132}";
|
||||
hidden=$false;
|
||||
name="Cmder"
|
||||
}
|
||||
}
|
||||
|
||||
if (-not $cmderAsAdminFound) {
|
||||
write-host "Adding 'Cmder as Admin' to Windows Terminal..."
|
||||
|
||||
$json.profiles.list += @{
|
||||
commandline="cmd.exe /k `"%USERPROFILE%/cmderdev/vendor/init.bat`"";
|
||||
startingDirectory="%USERPROFILE%/cmderdev";
|
||||
icon="%USERPROFILE%/cmderdev/icons/cmder_red.ico";
|
||||
closeOnExit="graceful";
|
||||
guid="{00000000-0000-0000-ba54-000000000133}";
|
||||
hidden=$false;
|
||||
elevate=$true;
|
||||
name="Cmder as Admin"
|
||||
}
|
||||
}
|
||||
|
||||
$json | ConvertTo-Json -depth 100 | set-content $windowsTerminalSettings
|
||||
}
|
||||
else {
|
||||
write-host "Cannot add profiles for Windows Terminal. The Windows Terminal settings file does not exist!"
|
||||
}
|
||||
|
4
vendor/bin/cmder_shell.cmd
vendored
4
vendor/bin/cmder_shell.cmd
vendored
@ -1,6 +1,6 @@
|
||||
@echo off
|
||||
|
||||
set CMDER_ROOT=%~dp0..\
|
||||
set CMDER_ROOT=%~dp0..\..\
|
||||
|
||||
if "%cmder_init%" == "1" (
|
||||
"%CMDER_ROOT%\vendor\clink\clink.bat" inject -q --profile "%CMDER_ROOT%\config" --scripts "%CMDER_ROOT%\vendor"
|
||||
@ -8,6 +8,6 @@ if "%cmder_init%" == "1" (
|
||||
set cmder_init=1
|
||||
)
|
||||
|
||||
pushd %CMDER_ROOT%
|
||||
pushd "%CMDER_ROOT%"
|
||||
call "%CMDER_ROOT%\vendor\init.bat" /f
|
||||
popd
|
||||
|
6
vendor/bin/excd.cmd
vendored
Normal file
6
vendor/bin/excd.cmd
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
@if "%~1"=="/?" (@cd %*)
|
||||
@set excd=%*
|
||||
@set excd=%excd:"=%
|
||||
@if "%excd:~0,1%"=="~" (@set excd=%userprofile%\%excd:~1%)
|
||||
@if not "%~1"=="/d" (@set excd_param="/d") else (@set excd_param=)
|
||||
@cd %excd_param% "%excd%"
|
21
vendor/bin/set-shortcut.ps1
vendored
Normal file
21
vendor/bin/set-shortcut.ps1
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[Parameter()]
|
||||
[string]$SourceExe,
|
||||
[string]$Arguments,
|
||||
[string]$DestinationPath,
|
||||
[string]$WorkingDirectory,
|
||||
[String]$IconLocation
|
||||
)
|
||||
|
||||
if ($IconLocation -eq '') {
|
||||
$IconLocation = $SourceExe
|
||||
}
|
||||
|
||||
$WshShell = New-Object -comObject WScript.Shell
|
||||
$Shortcut = $WshShell.CreateShortcut($destinationPath)
|
||||
$Shortcut.TargetPath = $SourceExe
|
||||
$Shortcut.Arguments = $Arguments
|
||||
$shortcut.WorkingDirectory = $WorkingDirectory
|
||||
$shortcut.IconLocation = $IconLocation
|
||||
$Shortcut.Save()
|
259
vendor/clink.lua
vendored
259
vendor/clink.lua
vendored
@ -3,7 +3,12 @@
|
||||
-- !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED
|
||||
-- !!! Use "%CMDER_ROOT%\config\<whatever>.lua" to add your lua startup scripts
|
||||
|
||||
-- luacheck: globals clink
|
||||
-- luacheck: globals CMDER_SESSION
|
||||
-- luacheck: globals uah_color cwd_color lamb_color clean_color dirty_color conflict_color unknown_color
|
||||
-- luacheck: globals prompt_homeSymbol prompt_lambSymbol prompt_type prompt_useHomeSymbol prompt_useUserAtHost
|
||||
-- luacheck: globals prompt_singleLine prompt_includeVersionControl
|
||||
-- luacheck: globals prompt_overrideGitStatusOptIn prompt_overrideSvnStatusOptIn
|
||||
-- luacheck: globals clink io.popenyield os.isdir settings.get
|
||||
|
||||
-- At first, load the original clink.lua file
|
||||
-- this is needed as we set the script path to this dir and therefore the original
|
||||
@ -28,29 +33,55 @@ end
|
||||
|
||||
|
||||
local function get_clean_color()
|
||||
return clean_color or "\x1b[1;37;49m"
|
||||
return clean_color or "\x1b[37;1m" -- White, Bold
|
||||
end
|
||||
|
||||
|
||||
local function get_dirty_color()
|
||||
return dirty_color or "\x1b[33;3m"
|
||||
return dirty_color or "\x1b[33;3m" -- Yellow, Italic
|
||||
end
|
||||
|
||||
|
||||
local function get_conflict_color()
|
||||
return conflict_color or "\x1b[31;1m"
|
||||
return conflict_color or "\x1b[31;1m" -- Red, Bold
|
||||
end
|
||||
|
||||
local function get_unknown_color()
|
||||
return unknown_color or "\x1b[37;1m"
|
||||
return unknown_color or "\x1b[37;1m" -- White, Bold
|
||||
end
|
||||
|
||||
---
|
||||
-- Makes a string safe to use as the replacement in string.gsub
|
||||
-- Escapes special characters in a string.gsub `find` parameter, so that it
|
||||
-- can be matched as a literal plain text string, i.e. disable Lua pattern
|
||||
-- matching. See "Patterns" (https://www.lua.org/manual/5.2/manual.html#6.4.1).
|
||||
-- @param {string} text Text to escape
|
||||
-- @returns {string} Escaped text
|
||||
---
|
||||
local function verbatim(s)
|
||||
s = string.gsub(s, "%%", "%%%%")
|
||||
return s
|
||||
local function escape_gsub_find_arg(text)
|
||||
return text and text:gsub("([-+*?.%%()%[%]$^])", "%%%1") or ""
|
||||
end
|
||||
|
||||
---
|
||||
-- Escapes special characters in a string.gsub `replace` parameter, so that it
|
||||
-- can be replaced as a literal plain text string, i.e. disable Lua pattern
|
||||
-- matching. See "Patterns" (https://www.lua.org/manual/5.2/manual.html#6.4.1).
|
||||
-- @param {string} text Text to escape
|
||||
-- @returns {string} Escaped text
|
||||
---
|
||||
local function escape_gsub_replace_arg(text)
|
||||
return text and text:gsub("%%", "%%%%") or ""
|
||||
end
|
||||
|
||||
---
|
||||
-- Perform string.sub, but disable Lua pattern matching and just treat both
|
||||
-- the `find` and `replace` parameters as a literal plain text replacement.
|
||||
-- @param {string} str Text in which to perform find and replace
|
||||
-- @param {string} find Text to find (plain text; not a Lua pattern)
|
||||
-- @param {string} replace Replacement text (plain text; not a Lua pattern)
|
||||
-- @returns {string} Copy of the input `str` with `find` replaced by `replace`
|
||||
---
|
||||
local function gsub_plain(str, find, replace)
|
||||
return string.gsub(str, escape_gsub_find_arg(find), escape_gsub_replace_arg(replace))
|
||||
end
|
||||
|
||||
-- Extracts only the folder name from the input Path
|
||||
@ -148,19 +179,21 @@ local function set_prompt_filter()
|
||||
end
|
||||
|
||||
if prompt_useHomeSymbol and string.find(cwd, clink.get_env("HOME")) then
|
||||
cwd = string.gsub(cwd, clink.get_env("HOME"), prompt_homeSymbol)
|
||||
cwd = gsub_plain(cwd, clink.get_env("HOME"), prompt_homeSymbol)
|
||||
end
|
||||
|
||||
uah = ''
|
||||
local uah = ''
|
||||
if prompt_useUserAtHost then
|
||||
uah = clink.get_env("USERNAME") .. "@" .. clink.get_env("COMPUTERNAME") .. ' '
|
||||
end
|
||||
|
||||
cr = "\n"
|
||||
local cr = "\n"
|
||||
if prompt_singleLine then
|
||||
cr = ' '
|
||||
end
|
||||
|
||||
cr = "\x1b[0m" .. cr
|
||||
|
||||
if env ~= nil then env = "("..env..") " else env = "" end
|
||||
|
||||
if uah ~= '' then uah = get_uah_color() .. uah end
|
||||
@ -168,15 +201,15 @@ local function set_prompt_filter()
|
||||
|
||||
local version_control = prompt_includeVersionControl and "{git}{hg}{svn}" or ""
|
||||
|
||||
prompt = "{uah}{cwd}" .. version_control .. get_lamb_color() .. cr .. "{env}{lamb} \x1b[0m"
|
||||
prompt = string.gsub(prompt, "{uah}", uah)
|
||||
prompt = string.gsub(prompt, "{cwd}", cwd)
|
||||
prompt = string.gsub(prompt, "{env}", env)
|
||||
clink.prompt.value = string.gsub(prompt, "{lamb}", prompt_lambSymbol)
|
||||
local prompt = "{uah}{cwd}" .. version_control .. cr .. get_lamb_color() .. "{env}{lamb}\x1b[0m "
|
||||
prompt = gsub_plain(prompt, "{uah}", uah)
|
||||
prompt = gsub_plain(prompt, "{cwd}", cwd)
|
||||
prompt = gsub_plain(prompt, "{env}", env)
|
||||
clink.prompt.value = gsub_plain(prompt, "{lamb}", prompt_lambSymbol)
|
||||
end
|
||||
|
||||
local function percent_prompt_filter()
|
||||
clink.prompt.value = string.gsub(clink.prompt.value, "{percent}", "%%")
|
||||
clink.prompt.value = gsub_plain(clink.prompt.value, "{percent}", "%")
|
||||
end
|
||||
|
||||
---
|
||||
@ -189,7 +222,7 @@ end
|
||||
local function get_dir_contains(path, dirname)
|
||||
|
||||
-- return parent path for specified entry (either file or directory)
|
||||
local function pathname(path)
|
||||
local function pathname(path) -- luacheck: ignore 432
|
||||
local prefix = ""
|
||||
local i = path:find("[\\/:][^\\/:]*$")
|
||||
if i then
|
||||
@ -199,14 +232,14 @@ local function get_dir_contains(path, dirname)
|
||||
end
|
||||
|
||||
-- Navigates up one level
|
||||
local function up_one_level(path)
|
||||
local function up_one_level(path) -- luacheck: ignore 432
|
||||
if path == nil then path = '.' end
|
||||
if path == '.' then path = clink.get_cwd() end
|
||||
return pathname(path)
|
||||
end
|
||||
|
||||
-- Checks if provided directory contains git directory
|
||||
local function has_specified_dir(path, specified_dir)
|
||||
local function has_specified_dir(path, specified_dir) -- luacheck: ignore 432
|
||||
if path == nil then path = '.' end
|
||||
local found_dirs = clink.find_dirs(path..'/'..specified_dir)
|
||||
if #found_dirs > 0 then return true end
|
||||
@ -234,7 +267,7 @@ end
|
||||
local function get_git_dir(path)
|
||||
|
||||
-- return parent path for specified entry (either file or directory)
|
||||
local function pathname(path)
|
||||
local function pathname(path) -- luacheck: ignore 432
|
||||
local prefix = ""
|
||||
local i = path:find("[\\/:][^\\/:]*$")
|
||||
if i then
|
||||
@ -253,7 +286,8 @@ local function get_git_dir(path)
|
||||
local gitfile = io.open(dir..'/.git')
|
||||
if not gitfile then return false end
|
||||
|
||||
local git_dir = gitfile:read():match('gitdir: (.*)')
|
||||
local line = gitfile:read() or ''
|
||||
local git_dir = line:match('gitdir: (.*)')
|
||||
gitfile:close()
|
||||
|
||||
if os.isdir then -- only available in Clink v1.0.0 and higher
|
||||
@ -301,6 +335,9 @@ local function get_git_branch(git_dir)
|
||||
local HEAD = head_file:read()
|
||||
head_file:close()
|
||||
|
||||
-- If HEAD is missing, something is wrong.
|
||||
if not HEAD then return end
|
||||
|
||||
-- if HEAD matches branch expression, then we're on named branch
|
||||
-- otherwise it is a detached commit
|
||||
local branch_name = HEAD:match('ref: refs/heads/(.+)')
|
||||
@ -320,6 +357,9 @@ local function get_hg_branch()
|
||||
-- local cmd = "hg prompt \"{branch}{status}{|{patch}}{update}\""
|
||||
local cmd = "hg branch 2>nul"
|
||||
local file = io.popen(cmd)
|
||||
if not file then
|
||||
return false
|
||||
end
|
||||
|
||||
for line in file:lines() do
|
||||
local m = line:match("(.+)$")
|
||||
@ -337,8 +377,12 @@ end
|
||||
-- Find out current branch
|
||||
-- @return {false|svn branch name}
|
||||
---
|
||||
local function get_svn_branch(svn_dir)
|
||||
local function get_svn_branch()
|
||||
local file = io_popenyield("svn info 2>nul")
|
||||
if not file then
|
||||
return false
|
||||
end
|
||||
|
||||
for line in file:lines() do
|
||||
local m = line:match("^Relative URL:")
|
||||
if m then
|
||||
@ -357,12 +401,16 @@ end
|
||||
---
|
||||
local function get_git_status()
|
||||
local file = io_popenyield("git --no-optional-locks status --porcelain 2>nul")
|
||||
if not file then
|
||||
return {}
|
||||
end
|
||||
|
||||
local conflict_found = false
|
||||
local is_status = true
|
||||
for line in file:lines() do
|
||||
local code = line:sub(1, 2)
|
||||
-- print (string.format("code: %s, line: %s", code, line))
|
||||
if code == "DD" or code == "AU" or code == "UD" or code == "UA" or code == "DU" or code == "AA" or code == "UU" then
|
||||
if code == "DD" or code == "AU" or code == "UD" or code == "UA" or code == "DU" or code == "AA" or code == "UU" then -- luacheck: no max line length
|
||||
is_status = false
|
||||
conflict_found = true
|
||||
break
|
||||
@ -372,37 +420,78 @@ local function get_git_status()
|
||||
end
|
||||
end
|
||||
file:close()
|
||||
|
||||
return { status = is_status, conflict = conflict_found }
|
||||
end
|
||||
|
||||
|
||||
---
|
||||
-- Get the status of working dir
|
||||
-- @return {bool}
|
||||
---
|
||||
local function get_hg_status()
|
||||
local file = io.popen("hg status -0")
|
||||
for line in file:lines() do
|
||||
file:close()
|
||||
return false
|
||||
end
|
||||
file:close()
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
---
|
||||
-- Get the status of working dir
|
||||
-- @return {bool}
|
||||
---
|
||||
local function get_svn_status()
|
||||
local file = io_popenyield("svn status -q")
|
||||
for line in file:lines() do
|
||||
if not file then
|
||||
return { error = true }
|
||||
end
|
||||
|
||||
for line in file:lines() do -- luacheck: ignore 512, no unused
|
||||
file:close()
|
||||
return false
|
||||
return { clean = false }
|
||||
end
|
||||
file:close()
|
||||
|
||||
return { clean = true }
|
||||
end
|
||||
|
||||
---
|
||||
-- Get the status of working dir
|
||||
-- @return {bool}
|
||||
---
|
||||
local last_git_status_time = nil
|
||||
local last_git_status_setting = true
|
||||
local function get_git_status_setting()
|
||||
local time = os.clock()
|
||||
local last_time = last_git_status_time
|
||||
last_git_status_time = time
|
||||
if last_time and time >= 0 and time - last_time < 10 then
|
||||
return last_git_status_setting
|
||||
end
|
||||
|
||||
-- When async prompt filtering is available, check the
|
||||
-- prompt_overrideGitStatusOptIn config setting for whether to ignore the
|
||||
-- cmder.status and cmder.cmdstatus git config opt-in settings.
|
||||
if clink.promptcoroutine and io.popenyield and settings.get("prompt.async") then
|
||||
if prompt_overrideGitStatusOptIn then
|
||||
last_git_status_setting = true
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
local gitStatusConfig = io_popenyield("git --no-pager config cmder.status 2>nul")
|
||||
if gitStatusConfig then
|
||||
for line in gitStatusConfig:lines() do
|
||||
if string.match(line, 'false') then
|
||||
gitStatusConfig:close()
|
||||
last_git_status_setting = false
|
||||
return false
|
||||
end
|
||||
end
|
||||
gitStatusConfig:close()
|
||||
end
|
||||
|
||||
local gitCmdStatusConfig = io_popenyield("git --no-pager config cmder.cmdstatus 2>nul")
|
||||
if gitCmdStatusConfig then
|
||||
for line in gitCmdStatusConfig:lines() do
|
||||
if string.match(line, 'false') then
|
||||
gitCmdStatusConfig:close()
|
||||
last_git_status_setting = false
|
||||
return false
|
||||
end
|
||||
end
|
||||
gitCmdStatusConfig:close()
|
||||
end
|
||||
|
||||
last_git_status_setting = true
|
||||
return true
|
||||
end
|
||||
|
||||
@ -412,7 +501,9 @@ end
|
||||
---
|
||||
local function get_git_info_table()
|
||||
local info = clink_promptcoroutine(function ()
|
||||
return get_git_status()
|
||||
-- Use git status if allowed.
|
||||
local cmderGitStatusOptIn = get_git_status_setting()
|
||||
return cmderGitStatusOptIn and get_git_status() or {}
|
||||
end)
|
||||
if not info then
|
||||
info = cached_info.git_info or {}
|
||||
@ -422,42 +513,6 @@ local function get_git_info_table()
|
||||
return info
|
||||
end
|
||||
|
||||
---
|
||||
-- Get the status of working dir
|
||||
-- @return {bool}
|
||||
---
|
||||
local function get_git_status_setting()
|
||||
-- When async prompt filtering is available, check the
|
||||
-- prompt_overrideGitStatusOptIn config setting for whether to ignore the
|
||||
-- cmder.status and cmder.cmdstatus git config opt-in settings.
|
||||
if clink.promptcoroutine and io.popenyield and settings.get("prompt.async") then
|
||||
if prompt_overrideGitStatusOptIn then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
local gitStatusConfig = io.popen("git --no-pager config cmder.status 2>nul")
|
||||
|
||||
for line in gitStatusConfig:lines() do
|
||||
if string.match(line, 'false') then
|
||||
gitStatusConfig:close()
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
local gitCmdStatusConfig = io.popen("git --no-pager config cmder.cmdstatus 2>nul")
|
||||
for line in gitCmdStatusConfig:lines() do
|
||||
if string.match(line, 'false') then
|
||||
gitCmdStatusConfig:close()
|
||||
return false
|
||||
end
|
||||
end
|
||||
gitStatusConfig:close()
|
||||
gitCmdStatusConfig:close()
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
local function git_prompt_filter()
|
||||
|
||||
-- Don't do any git processing if the prompt doesn't want to show git info.
|
||||
@ -475,7 +530,6 @@ local function git_prompt_filter()
|
||||
|
||||
local git_dir = get_git_dir()
|
||||
local color
|
||||
cmderGitStatusOptIn = get_git_status_setting()
|
||||
if git_dir then
|
||||
local branch = get_git_branch(git_dir)
|
||||
if branch then
|
||||
@ -485,9 +539,8 @@ local function git_prompt_filter()
|
||||
cached_info.git_dir = git_dir
|
||||
cached_info.git_branch = branch
|
||||
end
|
||||
-- Use git status if allowed.
|
||||
if cmderGitStatusOptIn then
|
||||
-- if we're inside of git repo then try to detect current branch
|
||||
|
||||
-- If we're inside of git repo then try to detect current branch
|
||||
-- Has branch => therefore it is a git folder, now figure out status
|
||||
local gitInfo = get_git_info_table()
|
||||
local gitStatus = gitInfo.status
|
||||
@ -504,16 +557,14 @@ local function git_prompt_filter()
|
||||
if gitConflict then
|
||||
color = colors.conflict
|
||||
end
|
||||
else
|
||||
color = colors.nostatus
|
||||
end
|
||||
clink.prompt.value = string.gsub(clink.prompt.value, "{git}", " "..color.."("..verbatim(branch)..")")
|
||||
|
||||
clink.prompt.value = gsub_plain(clink.prompt.value, "{git}", " "..color.."("..branch..")")
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
-- No git present or not in git file
|
||||
clink.prompt.value = string.gsub(clink.prompt.value, "{git}", "")
|
||||
clink.prompt.value = gsub_plain(clink.prompt.value, "{git}", "")
|
||||
return false
|
||||
end
|
||||
|
||||
@ -524,8 +575,6 @@ local function hg_prompt_filter()
|
||||
return false
|
||||
end
|
||||
|
||||
local result = ""
|
||||
|
||||
local hg_dir = get_hg_dir()
|
||||
if hg_dir then
|
||||
-- Colors for mercurial status
|
||||
@ -547,16 +596,20 @@ local function hg_prompt_filter()
|
||||
local color = colors.clean
|
||||
|
||||
local pipe = io.popen("hg status -amrd 2>&1")
|
||||
local output = pipe:read('*all')
|
||||
local rc = { pipe:close() }
|
||||
|
||||
if pipe then
|
||||
output = pipe:read('*all')
|
||||
pipe:close()
|
||||
if output ~= nil and output ~= "" then color = colors.dirty end
|
||||
result = color .. "(" .. branch .. ")"
|
||||
end
|
||||
|
||||
local result = color .. "(" .. branch .. ")"
|
||||
clink.prompt.value = gsub_plain(clink.prompt.value, "{hg}", " "..result)
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
clink.prompt.value = string.gsub(clink.prompt.value, "{hg}", " "..verbatim(result))
|
||||
return false
|
||||
-- No hg present or not in hg repo
|
||||
clink.prompt.value = gsub_plain(clink.prompt.value, "{hg}", "")
|
||||
end
|
||||
|
||||
local function svn_prompt_filter()
|
||||
@ -577,7 +630,6 @@ local function svn_prompt_filter()
|
||||
if svn_dir then
|
||||
-- if we're inside of svn repo then try to detect current branch
|
||||
local branch = get_svn_branch()
|
||||
local color
|
||||
if branch then
|
||||
-- If in a different repo or branch than last time, discard cached info
|
||||
if cached_info.svn_dir ~= svn_dir or cached_info.svn_branch ~= branch then
|
||||
@ -587,7 +639,7 @@ local function svn_prompt_filter()
|
||||
end
|
||||
-- Get the svn status using coroutine if available and option is enabled. Otherwise use a blocking call
|
||||
local svnStatus
|
||||
if clink.promptcoroutine and io.popenyield and settings.get("prompt.async") and prompt_overrideSvnStatusOptIn then
|
||||
if clink.promptcoroutine and io.popenyield and settings.get("prompt.async") and prompt_overrideSvnStatusOptIn then -- luacheck: no max line length
|
||||
svnStatus = clink_promptcoroutine(function ()
|
||||
return get_svn_status()
|
||||
end)
|
||||
@ -601,21 +653,22 @@ local function svn_prompt_filter()
|
||||
svnStatus = get_svn_status()
|
||||
end
|
||||
|
||||
if svnStatus == nil then
|
||||
local color
|
||||
if not svnStatus or svnStatus.error then
|
||||
color = colors.nostatus
|
||||
elseif svnStatus then
|
||||
elseif svnStatus.clean then
|
||||
color = colors.clean
|
||||
else
|
||||
color = colors.dirty
|
||||
end
|
||||
|
||||
clink.prompt.value = string.gsub(clink.prompt.value, "{svn}", " "..color.."("..verbatim(branch)..")")
|
||||
clink.prompt.value = gsub_plain(clink.prompt.value, "{svn}", " "..color.."("..branch..")")
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
-- No svn present or not in svn file
|
||||
clink.prompt.value = string.gsub(clink.prompt.value, "{svn}", "")
|
||||
clink.prompt.value = gsub_plain(clink.prompt.value, "{svn}", "")
|
||||
return false
|
||||
end
|
||||
|
||||
|
15
vendor/clink_settings.default
vendored
15
vendor/clink_settings.default
vendored
@ -8,12 +8,21 @@ history.expand_mode = not_dquoted
|
||||
|
||||
# name: Skip adding lines prefixed with whitespace
|
||||
# type: boolean
|
||||
history.ignore_space = False
|
||||
history.ignore_space = True
|
||||
|
||||
# name: The number of history lines to save
|
||||
# type: integer
|
||||
history.max_lines = 10000
|
||||
history.max_lines = 25000
|
||||
|
||||
# name: Share history between instances
|
||||
# type: boolean
|
||||
history.shared = True
|
||||
history.shared = False
|
||||
|
||||
# name: Auto-answer terminate prompt
|
||||
# type: enum
|
||||
# options: off,answer_yes,answer_no
|
||||
cmd.auto_answer = answer_yes
|
||||
|
||||
# name: Doskey completions
|
||||
# type: color
|
||||
color.doskey = yellow
|
||||
|
6
vendor/cmder.sh
vendored
6
vendor/cmder.sh
vendored
@ -33,11 +33,11 @@ CMDER_ROOT=$(echo $CMDER_ROOT | sed 's:/*$::')
|
||||
|
||||
export CMDER_ROOT
|
||||
|
||||
if [ -d "/c/Program Files/Git" ] ; then
|
||||
if [ -f "/c/Program Files/Git/cmd/git.exe" ] ; then
|
||||
GIT_INSTALL_ROOT="/c/Program Files/Git"
|
||||
elif [ -d "/c/Program Files(x86)/Git" ] ; then
|
||||
elif [ -f "/c/Program Files(x86)/Git/cmd/git.exe" ] ; then
|
||||
GIT_INSTALL_ROOT="/c/Program Files(x86)/Git"
|
||||
elif [ -d "${CMDER_ROOT}/vendor/git-for-windows" ] ; then
|
||||
elif [ -f "${CMDER_ROOT}/vendor/git-for-windows/cmd/git.exe" ] ; then
|
||||
GIT_INSTALL_ROOT=${CMDER_ROOT}/vendor/git-for-windows
|
||||
fi
|
||||
|
||||
|
10
vendor/cmder_prompt_config.lua.default
vendored
10
vendor/cmder_prompt_config.lua.default
vendored
@ -45,7 +45,9 @@ prompt_overrideSvnStatusOptIn = false
|
||||
|
||||
-- Prompt Attributes
|
||||
--
|
||||
-- Colors
|
||||
-- Colors: https://github.com/cmderdev/cmder/wiki/Customization#list-of-colors
|
||||
-- Effects: https://github.com/cmderdev/cmder/wiki/Customization#list-of-effects
|
||||
--
|
||||
-- Green: "\x1b[1;33;49m"
|
||||
-- Yellow: "\x1b[1;32;49m"
|
||||
-- Light Grey: "\x1b[1;30;49m"
|
||||
@ -54,7 +56,7 @@ prompt_overrideSvnStatusOptIn = false
|
||||
uah_color = "\x1b[1;33;49m" -- Green = uah = [user]@[hostname]
|
||||
cwd_color = "\x1b[1;32;49m" -- Yellow cwd = Current Working Directory
|
||||
lamb_color = "\x1b[1;30;49m" -- Light Grey = Lambda Color
|
||||
clean_color = "\x1b[1;37;49m"
|
||||
dirty_color = "\x1b[33;3m"
|
||||
conflict_color = "\x1b[31;1m"
|
||||
clean_color = "\x1b[37;1m"
|
||||
dirty_color = "\x1b[33;3m" -- Yellow, Italic
|
||||
conflict_color = "\x1b[31;1m" -- Red, Bold
|
||||
unknown_color = "\x1b[37;1m" -- White = No VCS Status Branch Color
|
||||
|
202
vendor/init.bat
vendored
202
vendor/init.bat
vendored
@ -2,7 +2,7 @@
|
||||
|
||||
set CMDER_INIT_START=%time%
|
||||
|
||||
:: Init Script for cmd.exe
|
||||
:: Init Script for cmd.exe shell
|
||||
:: Created as part of cmder project
|
||||
|
||||
:: !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED
|
||||
@ -23,7 +23,7 @@ if not defined fast_init set fast_init=0
|
||||
:: Use /max_depth 1-5 to set max recurse depth for calls to `enhance_path_recursive`
|
||||
if not defined max_depth set max_depth=1
|
||||
|
||||
:: Add *nix tools to end of path. 0 turns off *nix tools, 2 adds *nix tools to the front of thr path.
|
||||
:: Add *nix tools to end of path. 0 turns off *nix tools, 2 adds *nix tools to the front of the path.
|
||||
if not defined nix_tools set nix_tools=1
|
||||
|
||||
set "CMDER_USER_FLAGS= "
|
||||
@ -44,10 +44,11 @@ if not defined CMDER_ROOT (
|
||||
:: Remove trailing '\' from %CMDER_ROOT%
|
||||
if "%CMDER_ROOT:~-1%" == "\" SET "CMDER_ROOT=%CMDER_ROOT:~0,-1%"
|
||||
|
||||
:: Include Cmder libraries
|
||||
call "%cmder_root%\vendor\bin\cexec.cmd" /setpath
|
||||
call "%cmder_root%\vendor\lib\lib_console"
|
||||
call "%cmder_root%\vendor\lib\lib_base"
|
||||
call "%cmder_root%\vendor\lib\lib_path"
|
||||
call "%cmder_root%\vendor\lib\lib_console"
|
||||
call "%cmder_root%\vendor\lib\lib_git"
|
||||
call "%cmder_root%\vendor\lib\lib_profile"
|
||||
|
||||
@ -58,9 +59,9 @@ call "%cmder_root%\vendor\lib\lib_profile"
|
||||
set fast_init=1
|
||||
) else if /i "%1" == "/t" (
|
||||
set time_init=1
|
||||
) else if /i "%1"=="/v" (
|
||||
) else if /i "%1" == "/v" (
|
||||
set verbose_output=1
|
||||
) else if /i "%1"=="/d" (
|
||||
) else if /i "%1" == "/d" (
|
||||
set debug_output=1
|
||||
) else if /i "%1" == "/max_depth" (
|
||||
if "%~2" geq "1" if "%~2" leq "5" (
|
||||
@ -88,10 +89,10 @@ call "%cmder_root%\vendor\lib\lib_profile"
|
||||
set "GIT_INSTALL_ROOT=%~2"
|
||||
shift
|
||||
) else (
|
||||
%print_error% "The Git install root folder "%~2", you specified does not exist!"
|
||||
%print_error% "The Git install root folder "%~2" that you specified does not exist!"
|
||||
exit /b
|
||||
)
|
||||
) else if /i "%1"=="/nix_tools" (
|
||||
) else if /i "%1" == "/nix_tools" (
|
||||
if "%2" equ "0" (
|
||||
REM Do not add *nix tools to path
|
||||
set nix_tools=0
|
||||
@ -110,7 +111,7 @@ call "%cmder_root%\vendor\lib\lib_profile"
|
||||
set "HOME=%~2"
|
||||
shift
|
||||
) else (
|
||||
%print_error% The home folder "%2", you specified does not exist!
|
||||
%print_error% The home folder "%2" that you specified does not exist!
|
||||
exit /b
|
||||
)
|
||||
) else if /i "%1" == "/svn_ssh" (
|
||||
@ -120,131 +121,174 @@ call "%cmder_root%\vendor\lib\lib_profile"
|
||||
set "CMDER_USER_FLAGS=%1 %CMDER_USER_FLAGS%"
|
||||
)
|
||||
shift
|
||||
goto var_loop
|
||||
goto :var_loop
|
||||
|
||||
:start
|
||||
:: Sets CMDER_SHELL, CMDER_CLINK, CMDER_ALIASES
|
||||
:: Enable console related methods if verbose/debug is turned on
|
||||
if %debug_output% gtr 0 (set print_debug=%lib_console% debug_output)
|
||||
if %verbose_output% gtr 0 (
|
||||
set print_verbose=%lib_console% verbose_output
|
||||
set print_warning=%lib_console% show_warning
|
||||
)
|
||||
|
||||
:: Sets CMDER_SHELL, CMDER_CLINK, CMDER_ALIASES variables
|
||||
%lib_base% cmder_shell
|
||||
%print_debug% init.bat "Env Var - CMDER_ROOT=%CMDER_ROOT%"
|
||||
%print_debug% init.bat "Env Var - debug_output=%debug_output%"
|
||||
|
||||
:: Set the Cmder directory paths
|
||||
set CMDER_CONFIG_DIR=%CMDER_ROOT%\config
|
||||
|
||||
:: Check if we're using Cmder individual user profile
|
||||
if defined CMDER_USER_CONFIG (
|
||||
%print_debug% init.bat "CMDER IS ALSO USING INDIVIDUAL USER CONFIG FROM '%CMDER_USER_CONFIG%'!"
|
||||
|
||||
if not exist "%CMDER_USER_CONFIG%\..\opt" md "%CMDER_USER_CONFIG%\..\opt"
|
||||
set CMDER_CONFIG_DIR=%CMDER_USER_CONFIG%
|
||||
)
|
||||
|
||||
:: Pick right version of clink
|
||||
if not "%CMDER_SHELL%" == "cmd" (
|
||||
%print_warning% "Incompatible 'ComSpec/Shell' Detected: %CMDER_SHELL%"
|
||||
set CMDER_CLINK=0
|
||||
set CMDER_ALIASES=0
|
||||
)
|
||||
|
||||
:: Pick the right version of Clink
|
||||
:: TODO: Support for ARM
|
||||
if "%PROCESSOR_ARCHITECTURE%"=="x86" (
|
||||
set clink_architecture=x86
|
||||
set architecture_bits=32
|
||||
) else (
|
||||
) else if "%PROCESSOR_ARCHITECTURE%"=="AMD64" (
|
||||
set clink_architecture=x64
|
||||
set architecture_bits=64
|
||||
) else (
|
||||
%print_warning% "Incompatible Processor Detected: %PROCESSOR_ARCHITECTURE%"
|
||||
set CMDER_CLINK=0
|
||||
)
|
||||
|
||||
if "%CMDER_CLINK%" == "1" (
|
||||
REM TODO: Detect if clink is already injected, if so goto :CLINK_FINISH
|
||||
goto :INJECT_CLINK
|
||||
)
|
||||
|
||||
goto :SKIP_CLINK
|
||||
|
||||
:INJECT_CLINK
|
||||
%print_verbose% "Injecting Clink!"
|
||||
|
||||
:: Run clink
|
||||
if defined CMDER_USER_CONFIG (
|
||||
if not exist "%CMDER_USER_CONFIG%\settings" if not exist "%CMDER_USER_CONFIG%\clink_settings" (
|
||||
echo Generating clink initial settings in "%CMDER_USER_CONFIG%\clink_settings"
|
||||
copy "%CMDER_ROOT%\vendor\clink_settings.default" "%CMDER_USER_CONFIG%\clink_settings"
|
||||
echo Additional *.lua files in "%CMDER_USER_CONFIG%" are loaded on startup.
|
||||
:: Check if Clink is not present
|
||||
if not exist "%CMDER_ROOT%\vendor\clink\clink_%clink_architecture%.exe" (
|
||||
%print_error% "Clink executable is not present in 'vendor\clink\clink_%clink_architecture%.exe'"
|
||||
goto :SKIP_CLINK
|
||||
)
|
||||
|
||||
if not exist "%CMDER_USER_CONFIG%\cmder_prompt_config.lua" (
|
||||
echo Creating Cmder prompt config file: "%CMDER_USER_CONFIG%\cmder_prompt_config.lua"
|
||||
copy "%CMDER_ROOT%\vendor\cmder_prompt_config.lua.default" "%CMDER_USER_CONFIG%\cmder_prompt_config.lua"
|
||||
:: Run Clink
|
||||
if not exist "%CMDER_CONFIG_DIR%\settings" if not exist "%CMDER_CONFIG_DIR%\clink_settings" (
|
||||
echo Generating Clink initial settings in "%CMDER_CONFIG_DIR%\clink_settings"
|
||||
copy "%CMDER_ROOT%\vendor\clink_settings.default" "%CMDER_CONFIG_DIR%\clink_settings"
|
||||
echo Additional *.lua files in "%CMDER_CONFIG_DIR%" are loaded on startup.
|
||||
)
|
||||
|
||||
REM Cleanup lagacy Clink Settings file
|
||||
if exist "%CMDER_USER_CONFIG%\settings" if exist "%CMDER_USER_CONFIG%\clink_settings" (
|
||||
del "%CMDER_USER_CONFIG%\settings"
|
||||
if not exist "%CMDER_CONFIG_DIR%\cmder_prompt_config.lua" (
|
||||
echo Creating Cmder prompt config file: "%CMDER_CONFIG_DIR%\cmder_prompt_config.lua"
|
||||
copy "%CMDER_ROOT%\vendor\cmder_prompt_config.lua.default" "%CMDER_CONFIG_DIR%\cmder_prompt_config.lua"
|
||||
)
|
||||
|
||||
REM Cleanup legacy CLink history file
|
||||
if exist "%CMDER_USER_CONFIG%\.history" if exist "%CMDER_USER_CONFIG%\clink_history" (
|
||||
del "%CMDER_USER_CONFIG%\.history"
|
||||
)
|
||||
"%CMDER_ROOT%\vendor\clink\clink_%clink_architecture%.exe" inject --quiet --profile "%CMDER_USER_CONFIG%" --scripts "%CMDER_ROOT%\vendor"
|
||||
) else (
|
||||
if not exist "%CMDER_ROOT%\config\settings" if not exist "%CMDER_ROOT%\config\clink_settings" (
|
||||
echo Generating clink initial settings in "%CMDER_ROOT%\config\clink_settings"
|
||||
copy "%CMDER_ROOT%\vendor\clink_settings.default" "%CMDER_ROOT%\config\clink_settings"
|
||||
echo Additional *.lua files in "%CMDER_ROOT%\config" are loaded on startup.
|
||||
:: Cleanup legacy Clink Settings file
|
||||
if exist "%CMDER_CONFIG_DIR%\settings" if exist "%CMDER_CONFIG_DIR%\clink_settings" (
|
||||
del "%CMDER_CONFIG_DIR%\settings"
|
||||
)
|
||||
|
||||
if not exist "%CMDER_ROOT%\config\cmder_prompt_config.lua" (
|
||||
echo Creating Cmder prompt config file: "%CMDER_ROOT%\config\cmder_prompt_config.lua"
|
||||
copy "%CMDER_ROOT%\vendor\cmder_prompt_config.lua.default" "%CMDER_ROOT%\config\cmder_prompt_config.lua"
|
||||
:: Cleanup legacy Clink history file
|
||||
if exist "%CMDER_CONFIG_DIR%\.history" if exist "%CMDER_CONFIG_DIR%\clink_history" (
|
||||
del "%CMDER_CONFIG_DIR%\.history"
|
||||
)
|
||||
|
||||
REM Cleanup lagacy Clink Settings file
|
||||
if exist "%CMDER_ROOT%\config\settings" if exist "%CMDER_ROOT%\config\clink_settings" (
|
||||
del "%CMDER_ROOT%\config\settings"
|
||||
"%CMDER_ROOT%\vendor\clink\clink_%clink_architecture%.exe" inject --quiet --profile "%CMDER_CONFIG_DIR%" --scripts "%CMDER_ROOT%\vendor"
|
||||
|
||||
:: Check if a fatal error occurred when trying to inject Clink
|
||||
if errorlevel 2 (
|
||||
REM %print_error% "Clink injection has failed with error code: %errorlevel%"
|
||||
goto :SKIP_CLINK
|
||||
)
|
||||
|
||||
REM Cleanup legacy Clink history file
|
||||
if exist "%CMDER_ROOT%\config\.history" if exist "%CMDER_ROOT%\config\clink_history" (
|
||||
del "%CMDER_ROOT%\config\.history"
|
||||
)
|
||||
goto :CLINK_FINISH
|
||||
|
||||
"%CMDER_ROOT%\vendor\clink\clink_%clink_architecture%.exe" inject --quiet --profile "%CMDER_ROOT%\config" --scripts "%CMDER_ROOT%\vendor"
|
||||
)
|
||||
) else (
|
||||
%print_verbose% "WARNING: Incompatible 'ComSpec/Shell' Detetected Skipping Clink Injection!"
|
||||
)
|
||||
:SKIP_CLINK
|
||||
%print_warning% "Skipping Clink Injection!"
|
||||
|
||||
for /f "tokens=2 delims=:." %%x in ('chcp') do set cp=%%x
|
||||
chcp 65001>nul
|
||||
|
||||
:: Revert back to plain cmd.exe prompt without clink
|
||||
prompt $E[1;32;49m$P$S$_$E[1;30;49mλ$S$E[0m
|
||||
|
||||
chcp %cp%>nul
|
||||
|
||||
:CLINK_FINISH
|
||||
|
||||
if "%CMDER_CONFIGURED%" GTR "1" (
|
||||
%print_verbose% "Cmder is already configured, skipping Cmder Init!"
|
||||
|
||||
goto USER_ALIASES
|
||||
goto :USER_ALIASES
|
||||
) else if "%CMDER_CONFIGURED%" == "1" (
|
||||
%print_verbose% "Cmder is already configured, skipping to Cmder User Init!"
|
||||
|
||||
goto USER_CONFIG_START
|
||||
goto :USER_CONFIG_START
|
||||
)
|
||||
|
||||
:: Prepare for git-for-windows
|
||||
|
||||
:: I do not even know, copypasted from their .bat
|
||||
set PLINK_PROTOCOL=ssh
|
||||
|
||||
:: The idea:
|
||||
:: * if the users points as to a specific git, use that
|
||||
:: * test if a git is in path and if yes, use that
|
||||
:: Detect which git.exe version to use
|
||||
:: * if the user points to a specific git, use that
|
||||
:: * test if git is in path and if yes, use that
|
||||
:: * last, use our vendored git
|
||||
:: also check that we have a recent enough version of git by examining the version string
|
||||
if defined GIT_INSTALL_ROOT (
|
||||
if exist "%GIT_INSTALL_ROOT%\cmd\git.exe" goto :SPECIFIED_GIT
|
||||
set GIT_INSTALL_ROOT=
|
||||
) else if "%fast_init%" == "1" (
|
||||
if exist "%CMDER_ROOT%\vendor\git-for-windows\cmd\git.exe" (
|
||||
%print_debug% init.bat "Skipping Git Auto-Detect!"
|
||||
goto :VENDORED_GIT
|
||||
)
|
||||
|
||||
%print_debug% init.bat "Fast init is enabled, vendored Git does not exist"
|
||||
for /F "delims=" %%F in ('where git.exe 2^>nul') do (
|
||||
set "EXT_GIT_EXE=%%~fF"
|
||||
%print_debug% init.bat "Found User installed Git at '%%~fF'. Skipping Git Auto-Detect!"
|
||||
goto :SET_ENV
|
||||
)
|
||||
)
|
||||
|
||||
%print_debug% init.bat "Looking for Git install root..."
|
||||
|
||||
:: get the version information for vendored git binary
|
||||
:: Get the version information for vendored git binary
|
||||
%lib_git% read_version VENDORED "%CMDER_ROOT%\vendor\git-for-windows\cmd" 2>nul
|
||||
%lib_git% validate_version VENDORED %GIT_VERSION_VENDORED%
|
||||
|
||||
:: check if git is in path...
|
||||
for /F "delims=" %%F in ('where git.exe 2^>nul ^| find "\cmd\git.exe"') do (
|
||||
:: get the absolute path to the user provided git binary
|
||||
%lib_git% is_git_shim "%%~dpF"
|
||||
%lib_git% get_user_git_version
|
||||
%lib_git% compare_git_versions
|
||||
:: Check if git is in path
|
||||
for /F "delims=" %%F in ('where git.exe 2^>nul') do call :check_git "%%~fF"
|
||||
|
||||
if defined GIT_INSTALL_ROOT (
|
||||
if defined GIT_INSTALL_ROOT (
|
||||
goto :FOUND_GIT
|
||||
)
|
||||
) else (
|
||||
goto :VENDORED_GIT
|
||||
)
|
||||
|
||||
:: our last hope: our own git...
|
||||
:check_git
|
||||
set full_path="%~f1"
|
||||
if not defined GIT_INSTALL_ROOT (
|
||||
if not [\%full_path:\cmd\git.exe=:%]==[\%full_path%] (
|
||||
:: Get the absolute path to the user provided git binary
|
||||
%lib_git% is_git_shim "%~dp1"
|
||||
%lib_git% get_user_git_version
|
||||
%lib_git% compare_git_versions
|
||||
)
|
||||
)
|
||||
exit /b
|
||||
|
||||
:: Our last hope: use vendored git
|
||||
:VENDORED_GIT
|
||||
if exist "%CMDER_ROOT%\vendor\git-for-windows" (
|
||||
set "GIT_INSTALL_ROOT=%CMDER_ROOT%\vendor\git-for-windows"
|
||||
@ -267,7 +311,7 @@ goto :CONFIGURE_GIT
|
||||
:: Add git to the path
|
||||
if exist "%GIT_INSTALL_ROOT%\cmd\git.exe" %lib_path% enhance_path "%GIT_INSTALL_ROOT%\cmd" ""
|
||||
|
||||
:: Add the unix commands at the end to not shadow windows commands like more
|
||||
:: Add the unix commands at the end to not shadow windows commands like `more` and `find`
|
||||
if %nix_tools% equ 1 (
|
||||
%print_verbose% "Preferring Windows commands"
|
||||
set "path_position=append"
|
||||
@ -287,10 +331,21 @@ if %nix_tools% geq 1 (
|
||||
)
|
||||
)
|
||||
|
||||
:: define SVN_SSH so we can use git svn with ssh svn repositories
|
||||
:SET_ENV
|
||||
|
||||
:: Plink (PuTTY Link) is a command-line connection tool similar to ssh, setting its protocol to ssh
|
||||
set PLINK_PROTOCOL=ssh
|
||||
|
||||
:: Define SVN_SSH so we can use git svn with ssh svn repositories
|
||||
if not defined SVN_SSH set "SVN_SSH=%GIT_INSTALL_ROOT:\=\\%\\bin\\ssh.exe"
|
||||
|
||||
:: Find locale.exe: From the git install root, from the path, using the git installed env, or fallback using the env from the path.
|
||||
setlocal enabledelayedexpansion
|
||||
if not defined git_locale if defined EXT_GIT_EXE (
|
||||
set "GIT_INSTALL_ROOT=!EXT_GIT_EXE:\cmd\git.exe=!"
|
||||
)
|
||||
endlocal && set GIT_INSTALL_ROOT=%GIT_INSTALL_ROOT%
|
||||
|
||||
if not defined git_locale if exist "%GIT_INSTALL_ROOT%\usr\bin\locale.exe" set git_locale="%GIT_INSTALL_ROOT%\usr\bin\locale.exe"
|
||||
if not defined git_locale for /F "tokens=* delims=" %%F in ('where locale.exe 2^>nul') do ( if not defined git_locale set git_locale="%%F" )
|
||||
if not defined git_locale if exist "%GIT_INSTALL_ROOT%\usr\bin\env.exe" set git_locale="%GIT_INSTALL_ROOT%\usr\bin\env.exe" /usr/bin/locale
|
||||
@ -298,7 +353,6 @@ if not defined git_locale for /F "tokens=* delims=" %%F in ('where env.exe 2^>nu
|
||||
|
||||
setlocal enabledelayedexpansion
|
||||
if defined git_locale (
|
||||
|
||||
REM %print_debug% init.bat "Env Var - git_locale=!git_locale!"
|
||||
if not defined LANG (
|
||||
for /F "delims=" %%F in ('!git_locale! -uU 2') do (
|
||||
@ -341,11 +395,7 @@ if defined CMDER_USER_CONFIG (
|
||||
:: must also be self executing, see '.\user_aliases.cmd.default',
|
||||
:: and be in profile.d folder.
|
||||
if not defined user_aliases (
|
||||
if defined CMDER_USER_CONFIG (
|
||||
set "user_aliases=%CMDER_USER_CONFIG%\user_aliases.cmd"
|
||||
) else (
|
||||
set "user_aliases=%CMDER_ROOT%\config\user_aliases.cmd"
|
||||
)
|
||||
set "user_aliases=%CMDER_CONFIG_DIR%\user_aliases.cmd"
|
||||
)
|
||||
|
||||
if "%CMDER_ALIASES%" == "1" (
|
||||
@ -385,7 +435,7 @@ if "%ERRORLEVEL%" == "0" (
|
||||
|
||||
call "%user_aliases%"
|
||||
|
||||
if "%CMDER_CONFIGURED%" gtr "1" goto CMDER_CONFIGURED
|
||||
if "%CMDER_CONFIGURED%" gtr "1" goto :CMDER_CONFIGURED
|
||||
|
||||
:: See vendor\git-for-windows\README.portable for why we do this
|
||||
:: Basically we need to execute this post-install.bat because we are
|
||||
|
4
vendor/lib/lib_base.cmd
vendored
4
vendor/lib/lib_base.cmd
vendored
@ -68,13 +68,9 @@ exit /b
|
||||
set CMDER_SHELL=%~n1
|
||||
if not defined CMDER_CLINK (
|
||||
set CMDER_CLINK=1
|
||||
if "%CMDER_SHELL%" equ "tcc" set CMDER_CLINK=0
|
||||
if "%CMDER_SHELL%" equ "tccle" set CMDER_CLINK=0
|
||||
)
|
||||
if not defined CMDER_ALIASES (
|
||||
set CMDER_ALIASES=1
|
||||
if "%CMDER_SHELL%" equ "tcc" set CMDER_ALIASES=0
|
||||
if "%CMDER_SHELL%" equ "tccle" set CMDER_ALIASES=0
|
||||
)
|
||||
exit /b
|
||||
|
||||
|
29
vendor/lib/lib_console.cmd
vendored
29
vendor/lib/lib_console.cmd
vendored
@ -2,13 +2,15 @@
|
||||
|
||||
call "%~dp0lib_base.cmd"
|
||||
set lib_console=call "%~dp0lib_console.cmd"
|
||||
set ESC=
|
||||
|
||||
:: Much faster than using "%lib_console% debug_output ..." etc.
|
||||
set print_debug=if %debug_output% gtr 0 %lib_console% debug_output
|
||||
set print_verbose=if %verbose_output% gtr 0 %lib_console% verbose_output
|
||||
set print_warning=if %verbose_output% gtr 0 %lib_console% show_warning
|
||||
set print_error=%lib_console% show_error
|
||||
|
||||
if "%fast_init%" == "1" exit /b
|
||||
if %fast_init% gtr %verbose_output% if %fast_init% gtr %debug_output% exit /b
|
||||
|
||||
if "%~1" == "/h" (
|
||||
%lib_base% help "%~0"
|
||||
@ -38,7 +40,7 @@ exit /b
|
||||
:::.
|
||||
:::-------------------------------------------------------------------------------
|
||||
|
||||
if %debug_output% gtr 0 echo DEBUG(%~1): %~2 & echo.
|
||||
if %debug_output% gtr 0 echo %time% DEBUG(%~1): %~2 & echo.
|
||||
exit /b
|
||||
|
||||
:verbose_output
|
||||
@ -80,5 +82,26 @@ exit /b
|
||||
:::.
|
||||
:::-------------------------------------------------------------------------------
|
||||
|
||||
echo ERROR: %~1
|
||||
echo %ESC%[91;1mERROR:%ESC%[0m %~1
|
||||
exit /b
|
||||
|
||||
:show_warning
|
||||
:::===============================================================================
|
||||
:::show_warning - Output a warning message to the console.
|
||||
:::.
|
||||
:::include:
|
||||
:::.
|
||||
::: call "$0"
|
||||
:::.
|
||||
:::usage:
|
||||
:::.
|
||||
::: %lib_console% show_warning "[message]"
|
||||
:::.
|
||||
:::required:
|
||||
:::.
|
||||
::: [message] <in> Message text to display.
|
||||
:::.
|
||||
:::-------------------------------------------------------------------------------
|
||||
|
||||
echo %ESC%[93;1mWARNING:%ESC%[0m %~1
|
||||
exit /b
|
||||
|
83
vendor/profile.ps1
vendored
83
vendor/profile.ps1
vendored
@ -1,10 +1,11 @@
|
||||
# Init Script for PowerShell
|
||||
# Created as part of cmder project
|
||||
# Init Script for PowerShell
|
||||
# Created as part of Cmder project
|
||||
# NOTE: This file must be saved using UTF-8 with BOM encoding for prompt symbol to work correctly.
|
||||
|
||||
# !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED
|
||||
# !!! Use "%CMDER_ROOT%\config\user_profile.ps1" to add your own startup commands
|
||||
|
||||
$CMDER_INIT_START = $(Get-Date -UFormat %s)
|
||||
$CMDER_INIT_START = Get-Date
|
||||
|
||||
# Compatibility with PS major versions <= 2
|
||||
if (!$PSScriptRoot) {
|
||||
@ -12,12 +13,12 @@ if (!$PSScriptRoot) {
|
||||
}
|
||||
|
||||
if ($ENV:CMDER_USER_CONFIG) {
|
||||
# Write-Host "CMDER IS ALSO USING INDIVIDUAL USER CONFIG FROM '$ENV:CMDER_USER_CONFIG'!"
|
||||
Write-Verbose "CMDER IS ALSO USING INDIVIDUAL USER CONFIG FROM '$ENV:CMDER_USER_CONFIG'!"
|
||||
}
|
||||
|
||||
# We do this for Powershell as Admin Sessions because CMDER_ROOT is not being set.
|
||||
if ($null -eq $ENV:CMDER_ROOT) {
|
||||
if (-Not($null -eq $ENV:ConEmuDir)) {
|
||||
if (!$ENV:CMDER_ROOT) {
|
||||
if ($ENV:ConEmuDir) {
|
||||
$ENV:CMDER_ROOT = Resolve-Path($ENV:ConEmuDir + "\..\..")
|
||||
} else {
|
||||
$ENV:CMDER_ROOT = Resolve-Path($PSScriptRoot + "\..")
|
||||
@ -25,9 +26,8 @@ if ($null -eq $ENV:CMDER_ROOT) {
|
||||
}
|
||||
|
||||
# Remove trailing '\'
|
||||
$ENV:CMDER_ROOT = ($ENV:CMDER_ROOT).trimend("\")
|
||||
$ENV:CMDER_ROOT = ($ENV:CMDER_ROOT).TrimEnd("\")
|
||||
|
||||
# Do not load bundled PsGet if a module installer is already available
|
||||
# -> recent PowerShell versions include PowerShellGet out of the box
|
||||
$moduleInstallerAvailable = [bool](Get-Command -Name 'Install-Module' -ErrorAction SilentlyContinue)
|
||||
|
||||
@ -42,18 +42,18 @@ if(-not $moduleInstallerAvailable -and -not $env:PSModulePath.Contains($CmderMod
|
||||
}
|
||||
|
||||
$gitVersionVendor = (readVersion -gitPath "$ENV:CMDER_ROOT\vendor\git-for-windows\cmd")
|
||||
# Write-Host "GIT VENDOR: ${gitVersionVendor}"
|
||||
Write-Debug "GIT VENDOR: ${gitVersionVendor}"
|
||||
|
||||
# Get user installed Git Version[s] and Compare with vendored if found.
|
||||
foreach ($git in (Get-Command -ErrorAction SilentlyContinue 'git')) {
|
||||
# Write-Host "GIT PATH: " + $git.Path
|
||||
Write-Debug "GIT PATH: {$git.Path}"
|
||||
$gitDir = Split-Path -Path $git.Path
|
||||
$gitDir = isGitShim -gitPath $gitDir
|
||||
$gitVersionUser = (readVersion -gitPath $gitDir)
|
||||
# Write-Host "GIT USER: ${gitVersionUser}"
|
||||
Write-Debug "GIT USER: ${gitVersionUser}"
|
||||
|
||||
$useGitVersion = compare_git_versions -userVersion $gitVersionUser -vendorVersion $gitVersionVendor
|
||||
# Write-Host "Using GIT Version: ${useGitVersion}"
|
||||
Write-Debug "Using Git Version: ${useGitVersion}"
|
||||
|
||||
# Use user installed Git
|
||||
if ($null -eq $gitPathUser) {
|
||||
@ -65,7 +65,7 @@ foreach ($git in (Get-Command -ErrorAction SilentlyContinue 'git')) {
|
||||
}
|
||||
|
||||
if ($useGitVersion -eq $gitVersionUser) {
|
||||
# Write-Host "Using GIT Dir: ${gitDir}"
|
||||
Write-Debug "Using Git Dir: ${gitDir}"
|
||||
$ENV:GIT_INSTALL_ROOT = $gitPathUser
|
||||
$ENV:GIT_INSTALL_TYPE = 'USER'
|
||||
break
|
||||
@ -78,14 +78,14 @@ if ($null -eq $ENV:GIT_INSTALL_ROOT -and $null -ne $gitVersionVendor) {
|
||||
$ENV:GIT_INSTALL_TYPE = 'VENDOR'
|
||||
}
|
||||
|
||||
# Write-Host "GIT_INSTALL_ROOT: ${ENV:GIT_INSTALL_ROOT}"
|
||||
# Write-Host "GIT_INSTALL_TYPE: ${ENV:GIT_INSTALL_TYPE}"
|
||||
Write-Debug "GIT_INSTALL_ROOT: ${ENV:GIT_INSTALL_ROOT}"
|
||||
Write-Debug "GIT_INSTALL_TYPE: ${ENV:GIT_INSTALL_TYPE}"
|
||||
|
||||
if (-Not ($null -eq $ENV:GIT_INSTALL_ROOT)) {
|
||||
if ($null -ne $ENV:GIT_INSTALL_ROOT) {
|
||||
$env:Path = Configure-Git -gitRoot "$ENV:GIT_INSTALL_ROOT" -gitType $ENV:GIT_INSTALL_TYPE -gitPathUser $gitPathUser
|
||||
}
|
||||
|
||||
if (Get-Command -Name "vim" -ErrorAction silentlycontinue) {
|
||||
if (Get-Command -Name "vim" -ErrorAction SilentlyContinue) {
|
||||
New-Alias -name "vi" -value vim
|
||||
}
|
||||
|
||||
@ -94,16 +94,20 @@ if (Get-Module PSReadline -ErrorAction "SilentlyContinue") {
|
||||
}
|
||||
|
||||
# Pre-assign default prompt hooks so the first run of cmder gets a working prompt.
|
||||
$env:gitLoaded = $false
|
||||
$env:gitLoaded = $null
|
||||
[ScriptBlock]$PrePrompt = {}
|
||||
[ScriptBlock]$PostPrompt = {}
|
||||
[ScriptBlock]$CmderPrompt = {
|
||||
# Check if we're currently running under Admin privileges.
|
||||
$identity = [Security.Principal.WindowsIdentity]::GetCurrent()
|
||||
$principal = [Security.Principal.WindowsPrincipal] $identity
|
||||
$adminRole = [Security.Principal.WindowsBuiltInRole]::Administrator
|
||||
$color = "White"
|
||||
if ($principal.IsInRole($adminRole)) { $color = "Red" }
|
||||
$Host.UI.RawUI.ForegroundColor = "White"
|
||||
Write-Host -NoNewline "PS "
|
||||
Microsoft.PowerShell.Utility\Write-Host "PS " -NoNewline -ForegroundColor $color
|
||||
Microsoft.PowerShell.Utility\Write-Host $pwd.ProviderPath -NoNewLine -ForegroundColor Green
|
||||
if (Get-Command git -erroraction silentlycontinue) {
|
||||
checkGit($pwd.ProviderPath)
|
||||
}
|
||||
Microsoft.PowerShell.Utility\Write-Host "`nλ" -NoNewLine -ForegroundColor "DarkGray"
|
||||
}
|
||||
|
||||
@ -112,33 +116,31 @@ $env:Path = "$Env:CMDER_ROOT\bin;$Env:CMDER_ROOT\vendor\bin;$env:Path;$Env:CMDER
|
||||
|
||||
# Drop *.ps1 files into "$ENV:CMDER_ROOT\config\profile.d"
|
||||
# to source them at startup.
|
||||
if (-Not (Test-Path -PathType container "$ENV:CMDER_ROOT\config\profile.d")) {
|
||||
if (-not (Test-Path -PathType container "$ENV:CMDER_ROOT\config\profile.d")) {
|
||||
New-Item -ItemType Directory -Path "$ENV:CMDER_ROOT\config\profile.d"
|
||||
}
|
||||
|
||||
Push-Location $ENV:CMDER_ROOT\config\profile.d
|
||||
foreach ($x in Get-ChildItem *.psm1) {
|
||||
# Write-Host Write-Host Sourcing $x
|
||||
Write-Verbose "Sourcing $x"
|
||||
Import-Module $x
|
||||
}
|
||||
|
||||
foreach ($x in Get-ChildItem *.ps1) {
|
||||
# Write-Host Write-Host Sourcing $x
|
||||
Write-Verbose "Sourcing $x"
|
||||
. $x
|
||||
}
|
||||
Pop-Location
|
||||
|
||||
# Drop *.ps1 files into "$ENV:CMDER_USER_CONFIG\config\profile.d"
|
||||
# to source them at startup. Requires using cmder.exe /C [cmder_user_root_path] argument
|
||||
if ($ENV:CMDER_USER_CONFIG -ne "" -And (Test-Path "$ENV:CMDER_USER_CONFIG\profile.d")) {
|
||||
if ($ENV:CMDER_USER_CONFIG -ne "" -and (Test-Path "$ENV:CMDER_USER_CONFIG\profile.d")) {
|
||||
Push-Location $ENV:CMDER_USER_CONFIG\profile.d
|
||||
foreach ($x in Get-ChildItem *.psm1) {
|
||||
# Write-Host Write-Host Sourcing $x
|
||||
Write-Verbose "Sourcing $x"
|
||||
Import-Module $x
|
||||
}
|
||||
|
||||
foreach ($x in Get-ChildItem *.ps1) {
|
||||
# Write-Host Write-Host Sourcing $x
|
||||
Write-Verbose "Sourcing $x"
|
||||
. $x
|
||||
}
|
||||
Pop-Location
|
||||
@ -169,8 +171,10 @@ if ($ENV:CMDER_USER_CONFIG) {
|
||||
}
|
||||
}
|
||||
|
||||
if (-Not (Test-Path $CmderUserProfilePath)) {
|
||||
Write-Host -BackgroundColor Darkgreen -ForegroundColor White "First Run: Creating user startup file: $CmderUserProfilePath"
|
||||
if (-not (Test-Path $CmderUserProfilePath)) {
|
||||
$CmderUserProfilePath = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($CmderUserProfilePath)
|
||||
Write-Host -NoNewline "`r"
|
||||
Write-Host -BackgroundColor Green -ForegroundColor Black "First Run: Creating user startup file: $CmderUserProfilePath"
|
||||
Copy-Item "$env:CMDER_ROOT\vendor\user_profile.ps1.default" -Destination $CmderUserProfilePath
|
||||
}
|
||||
|
||||
@ -190,16 +194,20 @@ if ( $(Get-Command prompt).Definition -match 'PS \$\(\$executionContext.SessionS
|
||||
Custom prompt functions are loaded in as constants to get the same behaviour
|
||||
#>
|
||||
[ScriptBlock]$Prompt = {
|
||||
$realLASTEXITCODE = $LASTEXITCODE
|
||||
$lastSUCCESS = $?
|
||||
$realLastExitCode = $LastExitCode
|
||||
$host.UI.RawUI.WindowTitle = Microsoft.PowerShell.Management\Split-Path $pwd.ProviderPath -Leaf
|
||||
Microsoft.PowerShell.Utility\Write-Host -NoNewline "$([char]0x200B)`r$([char]0x1B)[K"
|
||||
if ($lastSUCCESS -or ($LastExitCode -ne 0)) {
|
||||
Microsoft.PowerShell.Utility\Write-Host
|
||||
}
|
||||
PrePrompt | Microsoft.PowerShell.Utility\Write-Host -NoNewline
|
||||
CmderPrompt
|
||||
PostPrompt | Microsoft.PowerShell.Utility\Write-Host -NoNewline
|
||||
$global:LASTEXITCODE = $realLASTEXITCODE
|
||||
$global:LastExitCode = $realLastExitCode
|
||||
return " "
|
||||
}
|
||||
|
||||
|
||||
# Once Created these code blocks cannot be overwritten
|
||||
# if (-not $(Get-Command PrePrompt).Options -match 'Constant') {Set-Item -Path function:\PrePrompt -Value $PrePrompt -Options Constant}
|
||||
# if (-not $(Get-Command CmderPrompt).Options -match 'Constant') {Set-Item -Path function:\CmderPrompt -Value $CmderPrompt -Options Constant}
|
||||
@ -215,5 +223,8 @@ if ( $(Get-Command prompt).Definition -match 'PS \$\(\$executionContext.SessionS
|
||||
Set-Item -Path function:\prompt -Value $Prompt -Options ReadOnly
|
||||
}
|
||||
|
||||
$CMDER_INIT_END = $(Get-Date -UFormat %s)
|
||||
# Write-Host "Elapsed Time: $(get-Date) `($($CMDER_INIT_END - $CMDER_INIT_START) total`)"
|
||||
$CMDER_INIT_END = Get-Date
|
||||
|
||||
$ElapsedTime = New-TimeSpan -Start $CMDER_INIT_START -End $CMDER_INIT_END
|
||||
|
||||
Write-Verbose "Elapsed Time: $($ElapsedTime.TotalSeconds) seconds total"
|
||||
|
113
vendor/psmodules/Cmder.ps1
vendored
113
vendor/psmodules/Cmder.ps1
vendored
@ -1,7 +1,7 @@
|
||||
function readVersion($gitPath) {
|
||||
$gitExecutable = "${gitPath}\git.exe"
|
||||
|
||||
if (!(test-path "$gitExecutable")) {
|
||||
if (-not (Test-Path "$gitExecutable")) {
|
||||
return $null
|
||||
}
|
||||
|
||||
@ -20,24 +20,24 @@ function readVersion($gitPath) {
|
||||
function isGitShim($gitPath) {
|
||||
# check if there's shim - and if yes follow the path
|
||||
|
||||
if (test-path "${gitPath}\git.shim") {
|
||||
if (Test-Path "${gitPath}\git.shim") {
|
||||
$shim = (get-content "${gitPath}\git.shim")
|
||||
($trash, $gitPath) = $shim.replace(' ','').split('=')
|
||||
($trash, $gitPath) = $shim.replace(' ', '').split('=')
|
||||
|
||||
$gitPath=$gitPath.replace('\git.exe','')
|
||||
$gitPath = $gitPath.replace('\git.exe', '')
|
||||
}
|
||||
|
||||
return $gitPath.toString()
|
||||
}
|
||||
|
||||
function compareVersions($userVersion, $vendorVersion) {
|
||||
if (-not($userVersion -eq $null)) {
|
||||
if ($null -ne $userVersion) {
|
||||
($userMajor, $userMinor, $userPatch, $userBuild) = $userVersion.split('.', 4)
|
||||
} else {
|
||||
return -1
|
||||
}
|
||||
|
||||
if (-not($vendorVersion -eq $null)) {
|
||||
if ($null -ne $vendorVersion) {
|
||||
($vendorMajor, $vendorMinor, $vendorPatch, $vendorBuild) = $vendorVersion.split('.', 4)
|
||||
} else {
|
||||
return 1
|
||||
@ -47,17 +47,17 @@ function compareVersions($userVersion, $vendorVersion) {
|
||||
return 1
|
||||
}
|
||||
|
||||
if ($userMajor -gt $vendorMajor) {return 1}
|
||||
if ($userMajor -lt $vendorMajor) {return -1}
|
||||
if ($userMajor -gt $vendorMajor) { return 1 }
|
||||
if ($userMajor -lt $vendorMajor) { return -1 }
|
||||
|
||||
if ($userMinor -gt $vendorMinor) {return 1}
|
||||
if ($userMinor -lt $vendorMinor) {return -1}
|
||||
if ($userMinor -gt $vendorMinor) { return 1 }
|
||||
if ($userMinor -lt $vendorMinor) { return -1 }
|
||||
|
||||
if ($userPatch -gt $vendorPatch) {return 1}
|
||||
if ($userPatch -lt $vendorPatch) {return -1}
|
||||
if ($userPatch -gt $vendorPatch) { return 1 }
|
||||
if ($userPatch -lt $vendorPatch) { return -1 }
|
||||
|
||||
if ($userBuild -gt $vendorBuild) {return 1}
|
||||
if ($userBuild -lt $vendorBuild) {return -1}
|
||||
if ($userBuild -gt $vendorBuild) { return 1 }
|
||||
if ($userBuild -lt $vendorBuild) { return -1 }
|
||||
|
||||
return 0
|
||||
}
|
||||
@ -65,45 +65,48 @@ function compareVersions($userVersion, $vendorVersion) {
|
||||
function compare_git_versions($userVersion, $vendorVersion) {
|
||||
$result = compareVersions -userVersion $userVersion -vendorVersion $vendorVersion
|
||||
|
||||
# write-host "Compare Versions Result: ${result}"
|
||||
Write-Debug "Compare Versions Result: ${result}"
|
||||
if ($result -ge 0) {
|
||||
return $userVersion
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
return $vendorVersion
|
||||
}
|
||||
}
|
||||
|
||||
function Configure-Git($gitRoot, $gitType, $gitPathUser){
|
||||
function Configure-Git($gitRoot, $gitType, $gitPathUser) {
|
||||
# Proposed Behavior
|
||||
|
||||
# Modify the path if we are using VENDORED Git do nothing if using USER Git.
|
||||
# If User Git is installed but older match its path config adding paths
|
||||
# Modify the path if we are using VENDORED Git, do nothing if using USER Git.
|
||||
# If User Git is installed but is older, match its path config adding paths
|
||||
# in the same path positions allowing a user to configure Cmder Git path
|
||||
# using locally installed Git Path Config.
|
||||
if ($gitType -eq 'VENDOR') {
|
||||
# If User Git is installed replace its path config with Newer Vendored Git Path
|
||||
if ($gitPathUser -ne '' -and $gitPathUser -ne $null) {
|
||||
# write-host "Cmder 'profile.ps1': Replacing older user Git path '$gitPathUser' with newer vendored Git path '$gitRoot' in the system path..."
|
||||
if (($null -ne $gitPathUser) -and ($gitPathUser -ne '')) {
|
||||
Write-Verbose "Cmder 'profile.ps1': Replacing older user Git path '$gitPathUser' with newer vendored Git path '$gitRoot' in the system path..."
|
||||
|
||||
$newPath = ($env:path -ireplace [regex]::Escape($gitPathUser), $gitRoot)
|
||||
} else {
|
||||
if (!($env:Path -match [regex]::Escape("$gitRoot\cmd"))) {
|
||||
# write-host "Adding $gitRoot\cmd to the path"
|
||||
}
|
||||
else {
|
||||
if (-not ($env:Path -match [regex]::Escape("$gitRoot\cmd"))) {
|
||||
Write-Debug "Adding $gitRoot\cmd to the path"
|
||||
$newPath = $($gitRoot + "\cmd" + ";" + $env:Path)
|
||||
}
|
||||
|
||||
# Add "$gitRoot\mingw[32|64]\bin" to the path if exists and not done already
|
||||
if ((test-path "$gitRoot\mingw32\bin") -and -not ($env:path -match [regex]::Escape("$gitRoot\mingw32\bin"))) {
|
||||
# write-host "Adding $gitRoot\mingw32\bin to the path"
|
||||
if ((Test-Path "$gitRoot\mingw32\bin") -and -not ($env:path -match [regex]::Escape("$gitRoot\mingw32\bin"))) {
|
||||
Write-Debug "Adding $gitRoot\mingw32\bin to the path"
|
||||
$newPath = "$newPath;$gitRoot\mingw32\bin"
|
||||
} elseif ((test-path "$gitRoot\mingw64\bin") -and -not ($env:path -match [regex]::Escape("$gitRoot\mingw64\bin"))) {
|
||||
# write-host "Adding $gitRoot\mingw64\bin to the path"
|
||||
}
|
||||
elseif ((Test-Path "$gitRoot\mingw64\bin") -and -not ($env:path -match [regex]::Escape("$gitRoot\mingw64\bin"))) {
|
||||
Write-Debug "Adding $gitRoot\mingw64\bin to the path"
|
||||
$newPath = "$newPath;$gitRoot\mingw64\bin"
|
||||
}
|
||||
|
||||
# Add "$gitRoot\usr\bin" to the path if exists and not done already
|
||||
if ((test-path "$gitRoot\usr\bin") -and -not ($env:path -match [regex]::Escape("$gitRoot\usr\bin"))) {
|
||||
# write-host "Adding $gitRoot\usr\bin to the path"
|
||||
if ((Test-Path "$gitRoot\usr\bin") -and -not ($env:path -match [regex]::Escape("$gitRoot\usr\bin"))) {
|
||||
Write-Debug "Adding $gitRoot\usr\bin to the path"
|
||||
$newPath = "$newPath;$gitRoot\usr\bin"
|
||||
}
|
||||
}
|
||||
@ -114,53 +117,59 @@ function Configure-Git($gitRoot, $gitType, $gitPathUser){
|
||||
return $env:path
|
||||
}
|
||||
|
||||
function Import-Git(){
|
||||
function Import-Git() {
|
||||
$GitModule = Get-Module -Name Posh-Git -ListAvailable
|
||||
if($GitModule | select version | where version -le ([version]"0.6.1.20160330")){
|
||||
if ($GitModule | Select-Object version | Where-Object version -le ([version]"0.6.1.20160330")) {
|
||||
Import-Module Posh-Git > $null
|
||||
}
|
||||
if($GitModule | select version | where version -ge ([version]"1.0.0")){
|
||||
if ($GitModule | Select-Object version | Where-Object version -ge ([version]"1.0.0")) {
|
||||
Import-Module Posh-Git > $null
|
||||
$GitPromptSettings.AnsiConsole = $false
|
||||
}
|
||||
if(-not ($GitModule) ) {
|
||||
Write-Warning "Missing git support, install posh-git with 'Install-Module posh-git' and restart cmder."
|
||||
if (-not $GitModule) {
|
||||
Write-Host -NoNewline "`r`n"
|
||||
Write-Warning "Missing git support, install posh-git with 'Install-Module posh-git' and restart Cmder."
|
||||
Write-Host -NoNewline "`r$([char]0x1B)[A"
|
||||
return $false
|
||||
}
|
||||
# Make sure we only run once by alawys returning true
|
||||
# Make sure we only run once by always returning true
|
||||
return $true
|
||||
}
|
||||
|
||||
function checkGit($Path) {
|
||||
if (Test-Path -Path (Join-Path $Path '.git') ) {
|
||||
if($env:gitLoaded -eq 'false') {
|
||||
if (-not (Get-Command git -ErrorAction SilentlyContinue)) {
|
||||
return
|
||||
}
|
||||
if (-not (Test-Path -Path (Join-Path $Path '.git'))) {
|
||||
$SplitPath = Split-Path $path
|
||||
if ($SplitPath) { checkGit($SplitPath) }
|
||||
return
|
||||
}
|
||||
if (getGitStatusSetting -eq $true) {
|
||||
if ($null -eq $env:gitLoaded) {
|
||||
$env:gitLoaded = Import-Git
|
||||
}
|
||||
|
||||
if (getGitStatusSetting -eq $true) {
|
||||
if ($env:gitLoaded -eq $true) {
|
||||
Write-VcsStatus
|
||||
} else {
|
||||
}
|
||||
}
|
||||
else {
|
||||
$headContent = Get-Content (Join-Path $Path '.git/HEAD')
|
||||
if ($headContent -like "ref: refs/heads/*") {
|
||||
$branchName = $headContent.Substring(16)
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
$branchName = "HEAD detached at $($headContent.Substring(0, 7))"
|
||||
}
|
||||
Write-Host " [$branchName]" -NoNewline -ForegroundColor White
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
$SplitPath = split-path $path
|
||||
if ($SplitPath) {
|
||||
checkGit($SplitPath)
|
||||
}
|
||||
}
|
||||
|
||||
function getGitStatusSetting() {
|
||||
$gitStatus = (git --no-pager config -l) | out-string
|
||||
$gitStatus = (git --no-pager config -l) | Out-String
|
||||
|
||||
ForEach ($line in $($gitStatus -split "`r`n")) {
|
||||
if ($line -match 'cmder.status=false' -or $line -match 'cmder.psstatus=false') {
|
||||
foreach ($line in $($gitStatus -split "`r`n")) {
|
||||
if (($line -match 'cmder.status=false') -or ($line -match 'cmder.psstatus=false')) {
|
||||
return $false
|
||||
}
|
||||
}
|
||||
|
2155
vendor/psmodules/PsGet/PsGet.psm1
vendored
2155
vendor/psmodules/PsGet/PsGet.psm1
vendored
File diff suppressed because it is too large
Load Diff
16
vendor/sources.json
vendored
16
vendor/sources.json
vendored
@ -1,22 +1,22 @@
|
||||
[
|
||||
{
|
||||
"name": "git-for-windows",
|
||||
"version": "2.38.0.windows.1",
|
||||
"url": "https://github.com/git-for-windows/git/releases/download/v2.38.0.windows.1/PortableGit-2.38.0-64-bit.7z.exe"
|
||||
"version": "2.41.0.windows.3",
|
||||
"url": "https://github.com/git-for-windows/git/releases/download/v2.41.0.windows.3/PortableGit-2.41.0.3-64-bit.7z.exe"
|
||||
},
|
||||
{
|
||||
"name": "clink",
|
||||
"version": "1.3.47",
|
||||
"url": "https://github.com/chrisant996/clink/releases/download/v1.3.47/clink.1.3.47.d5796b.zip"
|
||||
"version": "1.5.1",
|
||||
"url": "https://github.com/chrisant996/clink/releases/download/v1.5.1/clink.1.5.1.1e9e51.zip"
|
||||
},
|
||||
{
|
||||
"name": "conemu-maximus5",
|
||||
"version": "22.08.07",
|
||||
"url": "https://github.com/Maximus5/ConEmu/releases/download/v22.08.07/ConEmuPack.220807.7z"
|
||||
"version": "23.07.24",
|
||||
"url": "https://github.com/Maximus5/ConEmu/releases/download/v23.07.24/ConEmuPack.230724.7z"
|
||||
},
|
||||
{
|
||||
"name": "clink-completions",
|
||||
"version": "0.4.1",
|
||||
"url": "https://github.com/vladimir-kotikov/clink-completions/archive/0.4.1.zip"
|
||||
"version": "0.4.10",
|
||||
"url": "https://github.com/vladimir-kotikov/clink-completions/archive/v0.4.10.zip"
|
||||
}
|
||||
]
|
||||
|
1
vendor/user_aliases.cmd.default
vendored
1
vendor/user_aliases.cmd.default
vendored
@ -6,6 +6,7 @@
|
||||
;= Add aliases below here
|
||||
e.=explorer .
|
||||
gl=git log --oneline --all --graph --decorate $*
|
||||
l=ls --show-control-chars -CFGNhp --color --ignore={"NTUSER.DAT*","ntuser.dat*"} $*
|
||||
ls=ls --show-control-chars -F --color $*
|
||||
pwd=cd
|
||||
clear=cls
|
||||
|
Reference in New Issue
Block a user