Compare commits

..
8 Commits
27 changed files with 6628 additions and 254 deletions
+4
View File
@@ -2,6 +2,10 @@
.conan/data
.conan2/p/**
.conan/data/**
.ssh
.ssh/**
id_*
*.ppk
{{ if eq .chezmoi.os "windows" }}
install_wsl_plugins.sh
{{ else }}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,75 @@
export def "nu-complete get scripts" [] {
open package.json
| get scripts
#| describe record<start: string, build: string, test: string, eject: string>
| transpose # to convert the record<start: string, build: string, test: string, eject: string> into a table
| rename value description
}
export def "nu-complete get deps" [] {
let packagejson = (open ./package.json)
let deps = try { $packagejson | get dependencies | columns } catch { [] }
let devDeps = try { $packagejson | get devDependencies | columns } catch { [] }
$deps | append $devDeps
}
def "nu-complete pnpm" [] {
[
# manage your dependencies section
{ value: "add", description: "Installs a package and any packages that it depends on. By default, any new package is installed as a prod dependency" }
{ value: "import", description: "Generates a pnpm-lock.yaml from an npm package-lock.json (or npm-shrinkwrap.json) file" }
{ value: "install", description: "(i) Install all dependencies for a project" }
{ value: "install-test", description: "(it) Runs a pnpm install followed immediately by a pnpm test" }
{ value: "link", description: "(ln) Connect the local project to another one" }
{ value: "prune", description: "Removes extraneous packages" }
{ value: "rebuild", description: "(rb) Rebuild a package" }
{ value: "remove", description: "(rm) Removes packages from node_modules and from the project's package.json" }
{ value: "unlink", description: "Unlinks a package. Like yarn unlink but pnpm re-installs the dependency after removing the external link" }
{ value: "update", description: "(up) Updates packages to their latest version based on the specified range" }
# review your dependencies section
{ value: "audit", description: "Checks for known security issues with the installed packages" }
{ value: "licenses", description: "Check licenses in consumed packages" }
{ value: "list", description: "(ls) Print all the versions of packages that are installed, as well as their dependencies, in a tree-structure" }
{ value: "outdated", description: "Check for outdated packages" }
# run your scripts section
{ value: "exec", description: "Executes a shell command in scope of a project" }
{ value: "run", description: "Runs a defined package script" }
{ value: "start", description: "Runs an arbitrary command specified in the package's `start` property of its `scripts` object" }
{ value: "test", description: "(t) Runs a package's `test` script, if one was provided" }
# others
{ value: "pack", description:"" }
{ value: "publish", description:"Publishes a package to the registry" }
{ value: "root", description:"" }
{ value: "store", description:"store add, store path, store prune & store status" }
]
}
export extern "pnpm" [
command?: string@"nu-complete pnpm"
--recursive(-r) # Run the command for each project in the workspace.
--help(-h) # Print help information
]
export extern "pnpm run" [
command?: string@"nu-complete get scripts"
--help(-h) # Print help information
]
export extern "pnpm remove" [
command?: string@"nu-complete get deps"
--help(-h) # Print help information
]
export extern "pnpm add" [
--help(-h) # Print help information
--save-exact(-E) # Install exact version
--global(-g) # Install as a global package
--recursive(-r) # Run installation recursively in every package found in subdirectories or in every workspace package, when executed inside a workspace. For options that may be used with `-r`, see "pnpm help recursive"
--save-dev(-D) # Save package to your `devDependencies`
--save-optional(-O) # Save package to your `optionalDependencies`
--save-peer # Save package to your `peerDependencies` and `devDependencies`
--save-prod(-P) # Save package to your `dependencies`. The default behavior
]
@@ -0,0 +1,768 @@
# author: e2dk4r
################################################################
# FUNCTIONS
################################################################
# list of supported architecture
def scoopArches [] {
["32bit" "64bit"]
}
# list of all installed apps
def scoopInstalledApps [] {
let localAppDir = if ('SCOOP' in $env) {
[$env.SCOOP 'apps'] | path join
} else {
[$env.USERPROFILE 'scoop' 'apps'] | path join
}
let localApps = (ls $localAppDir | get name | path basename)
let globalAppDir = if ('SCOOP_GLOBAL' in $env) {
[$env.SCOOP_GLOBAL 'apps'] | path join
} else {
[$env.ProgramData 'scoop' 'apps'] | path join
}
let globalApps = if ($globalAppDir | path exists) { ls $globalAppDir | get name | path basename }
$localApps | append $globalApps
}
# list of all installed apps with star
def scoopInstalledAppsWithStar [] {
scoopInstalledApps | prepend '*'
}
# list of all manifests from all buckets
def scoopAllApps [] {
let bucketsDir = if ('SCOOP' in $env) {
[$env.SCOOP 'buckets'] | path join
} else {
[$env.USERPROFILE 'scoop' 'buckets'] | path join
}
(ls -s $bucketsDir | get name) | each {|bucket| ls ([$bucketsDir $bucket 'bucket'] | path join) | get name | path parse | where extension == json | get stem } | flatten | uniq
}
# list of all apps that are not installed
def scoopAvailableApps [] {
let all = (scoopAllApps)
let installed = (scoopInstalledApps)
$all | where $it not-in $installed
}
# list of all config options
def scoopConfigs [] {
[
'use_external_7zip'
'use_lessmsi'
'use_sqlite_cache'
'no_junction'
'scoop_repo'
'scoop_branch'
'proxy'
'autostash_on_conflict'
'default_architecture'
'debug'
'force_update'
'show_update_log'
'show_manifest'
'shim'
'root_path'
'global_path'
'cache_path'
'gh_token'
'virustotal_api_key'
'cat_style'
'ignore_running_processes'
'private_hosts'
'hold_update_until'
'update_nightly'
'use_isolated_path'
'aria2-enabled'
'aria2-warning-enabled'
'aria2-retry-wait'
'aria2-split'
'aria2-max-connection-per-server'
'aria2-min-split-size'
'aria2-options'
]
}
# boolean as strings
def scoopBooleans [] {
["'true'" "'false'" ' ']
}
def scoopRepos [] {
[
'https://github.com/ScoopInstaller/Scoop'
]
}
def scoopBranches [] {
['master' 'develop']
}
def scoopShimBuilds [] {
['kiennq' 'scoopcs' '71']
}
def scoopCommands [] {
let libexecDir = if ('SCOOP' in $env) {
[$env.SCOOP 'apps' 'scoop' 'current' 'libexec'] | path join
} else {
[$env.USERPROFILE 'scoop' 'apps' 'scoop' 'current' 'libexec'] | path join
}
let commands = (
ls $libexecDir
| each {|command|
[
[value description];
[
# eg. scoop-help.ps1 -> help
($command.name | path parse | get stem | str substring 6..)
# second line is starts with '# Summary: '
# eg. '# Summary: Install apps' -> 'Install apps'
(open $command.name | lines | skip 1 | first | str substring 11..)
]
]
}
| flatten
)
$commands
}
def scoopAliases [] {
scoop alias list | str trim | lines | slice 2.. | split column " " | get column1
}
def batStyles [] {
['default' 'auto' 'full' 'plain' 'changes' 'header' 'header-filename' 'header-filesize' 'grid' 'rule' 'numbers' 'snip']
}
def scoopShims [] {
let localShimDir = if ('SCOOP' in $env) { [$env.SCOOP 'shims'] | path join } else if (scoop config root_path | path exists) { scoop config root_path } else { [$env.USERPROFILE 'scoop' 'shims'] | path join }
let localShims = if ($localShimDir | path exists) { ls $localShimDir | get name | path parse | select stem extension | where extension == shim | get stem } else { [] }
let globalShimDir = if ('SCOOP_GLOBAL' in $env) { [$env.SCOOP_GLOBAL 'shims'] | path join } else if (scoop config global_path | path exists) { scoop config global_path } else { [$env.ProgramData 'scoop' 'shims'] | path join }
let globalShims = if ($globalShimDir | path exists) { ls $globalShimDir | get name | path parse | select stem extension | where extension == shim | get stem } else { [] }
$localShims | append $globalShims | uniq | sort
}
################################################################
# scoop
################################################################
# Windows command line installer
export extern "scoop" [
alias?: string@scoopCommands # available scoop commands and aliases
--help (-h) # Show help for this command.
--version (-v) # Show current scoop and added buckets versions
]
################################################################
# scoop list
################################################################
# Lists all installed apps, or the apps matching the supplied query.
export def "scoop list" [
query?: string@scoopInstalledApps # string that will be matched
] {
^scoop list ($query | default "")
| complete
| if $in.exit_code == 0 {
$in.stdout
| lines
| skip 4
| parse -r '(?P<name>\S+)\s+(?P<version>\S+)\s+(?P<source>\S+)\s+(?P<updated>\S+\s+\S+)\s+(?P<info>\S+)?'
}
}
################################################################
# scoop uninstall
################################################################
# Uninstall specified application(s).
export extern "scoop uninstall" [
app?: string@scoopInstalledApps # app that will be uninstalled
--help (-h) # Show help for this command.
--global (-g) # Uninstall a globally installed application(s).
--purge (-p) # Persisted data will be removed. Normally when application is being uninstalled, the data defined in persist property/manually persisted are kept.
]
################################################################
# scoop cleanup
################################################################
# Perform cleanup on specified installed application(s) by removing old/not actively used versions.
export extern "scoop cleanup" [
app?: string@scoopInstalledAppsWithStar # app that will be cleaned
--help (-h) # Show help for this command.
--all (-a) # Cleanup all apps (alternative to '*')
--global (-g) # Perform cleanup on globally installed application(s). (Include them if '*' is used)
--cache (-k) # Remove outdated download cache. This will keep only the latest version cached.
]
################################################################
# scoop info
################################################################
# Display information about an application.
export extern "scoop info" [
app?: string@scoopAllApps # app that will be questioned
--verbose (-v) # Show full paths and URLs
--help (-h) # Show help for this command.
]
################################################################
# scoop update
################################################################
# Update installed application(s), or scoop itself.
export extern "scoop update" [
app?: string@scoopInstalledAppsWithStar # which apps
--help (-h) # Show help for this command.
--force (-f) # Force update even when there is not a newer version.
--global (-g) # Update a globally installed application(s).
--independent (-i) # Do not install dependencies automatically.
--no-cache (-k) # Do not use the download cache.
--skip (-s) # Skip hash validation (use with caution!).
--quiet (-q) # Hide extraneous messages.
--all (-a) # Update all apps (alternative to '*')
]
################################################################
# scoop install
################################################################
# Install specific application(s).
export extern "scoop install" [
app?: string@scoopAvailableApps # which apps
--arch (-a): string@scoopArches # Use the specified architecture, if the application's manifest supports it.
--help (-h) # Show help for this command.
--global (-g) # Install the application(s) globally.
--independent (-i) # Do not install dependencies automatically.
--no-cache (-k) # Do not use the download cache.
--skip (-s) # Skip hash validation (use with caution!).
--no-update-scoop (-u) # Don't update Scoop before installing if it's outdated
]
################################################################
# scoop status
################################################################
# Show status and check for new app versions.
export extern "scoop status" [
--help (-h) # Show help for this command.
--local (-l) # Checks the status for only the locally installed apps, and disables remote fetching/checking for Scoop and buckets
]
################################################################
# scoop help
################################################################
# Show help for scoop
export extern "scoop help" [
--help (-h) # Show help for this command.
command?: string@scoopCommands # Show help for the specified command
]
################################################################
# scoop alias
################################################################
# Add, remove or list Scoop aliases
export extern "scoop alias" [
--help (-h) # Show help for this command.
]
# add an alias
export extern "scoop alias add" [
name: string # name of the alias
command: string # scoop command
description?: string # description of the alias
]
# list all aliases
export extern "scoop alias list" [
--verbose (-v) # Show alias description and table headers (works only for 'list')
]
# remove an alias
export extern "scoop alias rm" [
name: string@scoopAliases # alias that will be removed
]
################################################################
# scoop shim
################################################################
# Manipulate Scoop shims
export extern "scoop shim" [
--help (-h) # Show help for this command.
]
# add a custom shim
export extern "scoop shim add" [
shim_name: string # name of the shim
command_path: path # path to executable
cmd_args # additional command arguments
--global (-g) # Manipulate global shim(s)
]
# remove shims (CAUTION: this could remove shims added by an app manifest)
export extern "scoop shim rm" [
shim_name: string@scoopShims # shim that will be removed
--global (-g) # Manipulate global shim(s)
]
# list all shims or matching shims
export extern "scoop shim list" [
pattern?: string # list only matching shims
--global (-g) # Manipulate global shim(s)
]
# show a shim's information
export extern "scoop shim info" [
shim_name: string@scoopShims # shim info to retrieve
--global (-g) # Manipulate global shim(s)
]
# alternate a shim's target source
export extern "scoop shim alter" [
shim_name: string@scoopShims # shim that will be alternated
--global (-g) # Manipulate global shim(s)
]
################################################################
# scoop which
################################################################
# Locate the path to a shim/executable that was installed with Scoop (similar to 'which' on Linux)
export extern "scoop which" [
command: string # executable name with .exe
--help (-h) # Show help for this command.
]
################################################################
# scoop cat
################################################################
# Show content of specified manifest.
export extern "scoop cat" [
app?: string@scoopAllApps # app that will be shown
--help (-h) # Show help for this command.
]
################################################################
# scoop checkup
################################################################
# Performs a series of diagnostic tests to try to identify things that may cause problems with Scoop.
export extern "scoop checkup" [
--help (-h) # Show help for this command.
]
################################################################
# scoop home
################################################################
# Opens the app homepage
export extern "scoop home" [
app?: string@scoopAllApps # app that will be shown
--help (-h) # Show help for this command.
]
################################################################
# scoop config ...
################################################################
# Get or set configuration values
export extern "scoop config" [
--help (-h) # Show help for this command.
]
# External 7zip (from path) will be used for archives extraction.
export extern "scoop config use_external_7zip" [
value?: string@scoopBooleans
]
# Prefer lessmsi utility over native msiexec.
export extern "scoop config use_lessmsi" [
value?: string@scoopBooleans
]
# Use SQLite database for caching.
export extern "scoop config use_sqlite_cache" [
value?: string@scoopBooleans
]
# The 'current' version alias will not be used.
export extern "scoop config no_junction" [
value?: string@scoopBooleans
]
# Git repository containing scoop source code.
export extern "scoop config scoop_repo" [
value?: string@scoopRepos
]
# Allow to use different branch than master.
export extern "scoop config scoop_branch" [
value?: string@scoopBranches
]
# [username:password@]host:port
export extern "scoop config proxy" [
value?: string
]
# When a conflict is detected during updating, Scoop will auto-stash the uncommitted changes.
export extern "scoop config autostash_on_conflict" [
value?: string@scoopBooleans
]
# Allow to configure preferred architecture for application installation. If not specified, architecture is determined by system.
export extern "scoop config default_architecture" [
value?: string@scoopArches
]
# Additional and detailed output will be shown.
export extern "scoop config debug" [
value?: string@scoopBooleans
]
# Force apps updating to bucket's version.
export extern "scoop config force_update" [
value?: string@scoopBooleans
]
# Do not show changed commits on 'scoop update'
export extern "scoop config show_update_log" [
value?: string@scoopBooleans
]
# Displays the manifest of every app that's about to be installed, then asks user if they wish to proceed.
export extern "scoop config show_manifest" [
value?: string@scoopBooleans
]
# Choose scoop shim build.
export extern "scoop config shim" [
value?: string@scoopShimBuilds
]
# Path to Scoop root directory.
export extern "scoop config root_path" [
value?: directory
]
# Path to Scoop root directory for global apps.
export extern "scoop config global_path" [
value?: directory
]
# For downloads, defaults to 'cache' folder under Scoop root directory.
export extern "scoop config cache_path" [
value?: directory
]
# GitHub API token used to make authenticated requests.
export extern "scoop config gh_token" [
value?: string
]
# API key used for uploading/scanning files using virustotal.
export extern "scoop config virustotal_api_key" [
value?: string
]
# "scoop cat" display style. requires "bat" to be installed.
export extern "scoop config cat_style" [
value?: string@batStyles
]
# Discard application running messages when reset, uninstall or update
export extern "scoop config ignore_running_processes" [
value?: string@scoopBooleans
]
# Array of private hosts that need additional authentication.
export extern "scoop config private_hosts" [
value?: string
]
# Disable/Hold Scoop self-updates, until the specified date.
export extern "scoop config hold_update_until" [
value?: string
]
# Nightly version will be updated after one day if this is set to $true.
export extern "scoop config update_nightly" [
value?: string@scoopBooleans
]
# When set to $true, Scoop will use `SCOOP_PATH` environment variable to store apps' `PATH`s.
export extern "scoop config use_isolated_path" [
value?: string@scoopBooleans
]
# Aria2c will be used for downloading of artifacts.
export extern "scoop config aria2-enabled" [
value?: string@scoopBooleans
]
# Disable Aria2c warning which is shown while downloading.
export extern "scoop config aria2-warning-enabled" [
value?: string@scoopBooleans
]
# Number of seconds to wait between retries.
export extern "scoop config aria2-retry-wait" [
value?: number
]
# Number of connections used for download.
export extern "scoop config aria2-split" [
value?: number
]
# The maximum number of connections to one server for each download.
export extern "scoop config aria2-max-connection-per-server" [
value?: number
]
# Downloaded files will be split by this configured size and downloaded using multiple connections.
export extern "scoop config aria2-min-split-size" [
value?: string
]
# Array of additional aria2 options.
export extern "scoop config aria2-options" [
value?: string
]
# Remove a configuration setting
export extern "scoop config rm" [
name: string@scoopConfigs # configuration setting that will be removed
--help (-h) # Show help for this command.
]
################################################################
# scoop hold
################################################################
# Hold an app to disable updates
export extern "scoop hold" [
app?: string@scoopInstalledApps # app that will be hold back
--global (-g) # Hold globally installed apps
--help (-h) # Show help for this command.
]
################################################################
# scoop unhold
################################################################
# Unhold an app to enable updates
export extern "scoop unhold" [
app?: string@scoopInstalledApps # app that will be unhold back
--global (-g) # Unhold globally installed apps
--help (-h) # Show help for this command.
]
################################################################
# scoop depends
################################################################
# List dependencies for an app, in the order they'll be installed
export extern "scoop depends" [
app?: string@scoopAllApps # app in question
--arch (-a): string@scoopArches # Use the specified architecture, if the application's manifest supports it.
--help (-h) # Show help for this command.
]
################################################################
# scoop export
################################################################
# Exports installed apps, buckets (and optionally configs) in JSON format
export extern "scoop export" [
--config (-c) # Export the Scoop configuration file too
--help (-h) # Show help for this command.
]
################################################################
# scoop import
################################################################
# Imports apps, buckets and configs from a Scoopfile in JSON format
export extern "scoop import" [
file: path # path to Scoopfile
--help (-h) # Show help for this command.
]
################################################################
# scoop reset
################################################################
# Reset an app to resolve conflicts
export extern "scoop reset" [
app?: string@scoopInstalledAppsWithStar # app that will be reset
--all (-a) # Reset all apps. (alternative to '*')
--help (-h) # Show help for this command.
]
################################################################
# scoop prefix
################################################################
# Returns the path to the specified app
export extern "scoop prefix" [
app?: string@scoopInstalledApps # app in question
--help (-h) # Show help for this command.
]
################################################################
# scoop create
################################################################
# Create a custom app manifest
export extern "scoop create" [
url: string # url of manifest
--help (-h) # Show help for this command.
]
################################################################
# scoop search
################################################################
# Search available apps
export def "scoop search" [
query?: string # Show app names that match the query
] {
let output = (
^scoop search ($query | default "")
| complete
| if $in.exit_code == 0 {
$in.stdout
| lines
| skip 4
| parse -r '(?P<name>\S+)\s+(?P<version>\S+)\s+(?P<source>\S+)\s+(?P<binaries>.+)?'
}
)
if ($output | is-empty) {
print $"(ansi yellow)WARN No matches found."
} else {
$output
}
}
################################################################
# scoop cache ...
################################################################
# Show the download cache
export extern "scoop cache" [
apps: string@scoopInstalledAppsWithStar # apps in question
--help (-h) # Show help for this command.
]
# Show the download cache
export extern "scoop cache show" [
apps: string@scoopInstalledAppsWithStar # apps in question
]
# Clear the download cache
export extern "scoop cache rm" [
apps?: string@scoopInstalledAppsWithStar # apps in question
--all (-a) # Clear all apps (alternative to '*')
]
################################################################
# scoop download
################################################################
# Download apps in the cache folder and verify hashes
export extern "scoop download" [
app?: string@scoopAvailableApps # apps in question
--help (-h) # Show help for this command.
--force (-f) # Force download (overwrite cache)
--no-hash-check (-h) # Skip hash verification (use with caution!)
--no-update-scoop (-u) # Don't update Scoop before downloading if it's outdated
--arch (-a): string@scoopArches # Use the specified architecture, if the app supports it
]
################################################################
# scoop bucket ...
################################################################
def scoopKnownBuckets [] {
["main" "extras" "versions" "nirsoft" "php" "nerd-fonts" "nonportable" "java" "games" "sysinternals"]
}
def scoopInstalledBuckets [] {
let bucketsDir = if ('SCOOP' in $env) {
[$env.SCOOP 'buckets'] | path join
} else {
[$env.USERPROFILE 'scoop' 'buckets'] | path join
}
let buckets = (ls $bucketsDir | get name | path basename)
$buckets
}
def scoopAvailableBuckets [] {
let known = (scoopKnownBuckets)
let installed = (scoopInstalledBuckets)
$known | where $it not-in $installed
}
# Add, list or remove buckets.
export extern "scoop bucket" [
--help (-h) # Show help for this command.
]
# add a bucket
export extern "scoop bucket add" [
name: string@scoopAvailableBuckets # name of the bucket
repo?: string # url of git repo
--help (-h) # Show help for this command.
]
# list installed buckets
export extern "scoop bucket list" [
--help (-h) # Show help for this command.
]
# list known buckets
export extern "scoop bucket known" [
--help (-h) # Show help for this command.
]
# remove installed buckets
export extern "scoop bucket rm" [
name: string@scoopInstalledBuckets # bucket to be removed
--help (-h) # Show help for this command.
]
################################################################
# scoop virustotal
################################################################
# Look for app's hash or url on virustotal.com
export extern "scoop virustotal" [
apps: string@scoopInstalledAppsWithStar # apps to be scanned
--all (-a) # Check for all installed apps
--scan (-s) # Send download URL for analysis (and future retrieval).
--no-depends (-n) # By default, all dependencies are checked too. This flag avoids it.
--no-update-scoop (-u) # Don't update Scoop before checking if it's outdated
--passthru (-p) # Return reports as objects
--help (-h) # Show help for this command.
]
File diff suppressed because it is too large Load Diff
+82
View File
@@ -0,0 +1,82 @@
# Nushell Configuration (Templated)
# Standard Library
use std
$env.config = {
show_banner: false,
ls: {
use_ls_colors: true
clickable_links: true
}
rm: {
always_trash: false
}
table: {
mode: rounded
}
history: {
max_size: 100000
sync_on_enter: true
file_format: "sqlite"
}
completions: {
case_sensitive: false
quick: true
partial: true
algorithm: "fuzzy"
}
}
# Modern tooling aliases based on preferences
if (which eza | is-not-empty) {
alias l = eza -l
alias la = eza -la
alias ll = eza -l
alias ls = eza
}
if (which bat | is-not-empty) {
alias cat = bat -P
} else if (which batcat | is-not-empty) {
alias cat = batcat -P
alias bat = batcat
}
if (which rg | is-not-empty) {
alias grep = rg
}
if (which fd | is-not-empty) {
alias find = fd
alias ff = fd
}
if (which yazi | is-not-empty) {
alias y = yazi
}
# Source tool integrations generated in env.nu
source ($env.CACHE_DIR | path join "zoxide.nu")
source ($env.CACHE_DIR | path join "starship.nu")
# Java and JDK Utilities
use java-utils.nu *
{{ if eq .chezmoi.os "windows" -}}
# Visual Studio Utilities (Windows Only)
use vs-utils.nu *
{{- end }}
# completions
use completions/git-completions.nu *
{{ if eq .chezmoi.os "windows" -}}
use completions/scoop-completions.nu *
{{- end }}
use completions/pnpm-completions.nu *
use completions/uv-completions.nu *
# Set default JDK
if (which jdk25home | is-not-empty) {
jdk25home --quiet
}
+50
View File
@@ -0,0 +1,50 @@
# Nushell Environment Configuration (Templated)
{{ if eq .chezmoi.os "windows" -}}
$env.CACHE_DIR = ($env.HOME | path join "AppData" "Local" "nushell" "cache")
{{- else -}}
$env.CACHE_DIR = ($env.HOME | path join ".cache" "nushell")
{{- end }}
# Ensure cache directory exists
try { mkdir $env.CACHE_DIR }
# Initialize Zoxide
if (which zoxide | is-not-empty) {
zoxide init nushell | save -f ($env.CACHE_DIR | path join "zoxide.nu")
} else {
"" | save -f ($env.CACHE_DIR | path join "zoxide.nu")
}
# Initialize Starship
if (which starship | is-not-empty) {
starship init nu | save -f ($env.CACHE_DIR | path join "starship.nu")
} else {
"" | save -f ($env.CACHE_DIR | path join "starship.nu")
}
# Set default editor and pager
{{ if eq .chezmoi.os "windows" -}}
$env.EDITOR = "nvim.exe"
$env.VISUAL = "nvim.exe"
{{- else -}}
$env.EDITOR = "nvim"
$env.VISUAL = "nvim"
{{- end }}
{{- if (which bat | is-not-empty) }}
$env.PAGER = "bat --paging=always"
{{- else if (which batcat | is-not-empty) }}
$env.PAGER = "batcat --paging=always"
{{- end }}
{{ if eq .chezmoi.os "windows" -}}
# Modern PowerShell 7 wrapper (pw7) for Nushell (Windows Only)
def --env pw7 [cmd: string] {
let profile = "{{ joinPath .chezmoi.homeDir "onedrive" "Documents" "PowerShell" "Gemini_Profile.ps1" }}"
^pwsh.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -Command $". '($profile)'; ($cmd) | Out-String"
}
{{- end }}
# Useful env variables
$env.BAT_THEME = "TwoDark"
+51
View File
@@ -0,0 +1,51 @@
# java-utils.nu
# JDK management functions for Nushell (modern syntax)
export def --env set-jdk [path: string, --quiet (-q)] {
let bin_path = ([$path, 'bin'] | path join)
$env.JAVA_HOME = $path
# Update PATH: remove any entry that looks like a JDK bin and add the new one
if ($env.PATH | describe | str contains 'list') {
$env.PATH = ($env.PATH | where {|row|
let is_jdk_bin = (($row | str contains 'jdk') and ($row | str ends-with 'bin'))
not $is_jdk_bin
} | prepend $bin_path)
} else {
let sep = (char esep)
let path_list = ($env.PATH | split row $sep)
$env.PATH = ($path_list | where {|row|
let is_jdk_bin = (($row | str contains 'jdk') and ($row | str ends-with 'bin'))
not $is_jdk_bin
} | prepend $bin_path | str join $sep)
}
if not $quiet {
print $"JAVA_HOME set to: ($path)"
try { java -version } catch { print "Warning: java command not found in new path." }
}
}
export def --env jdk8home [--quiet (-q)] {
set-jdk 'C:\Program Files\Eclipse Adoptium\jdk-8.0.482.8-hotspot' --quiet=$quiet
}
export def --env jdk8home32 [--quiet (-q)] {
set-jdk 'C:\Program Files (x86)\Eclipse Adoptium\jdk-8.0.472.8-hotspot' --quiet=$quiet
}
export def --env jdk8home32Liberica [--quiet (-q)] {
set-jdk 'C:\Users\reazul.ashraf\scoop\apps\liberica8-full-jdk\current' --quiet=$quiet
}
export def --env jdk8homeCorretto [--quiet (-q)] {
set-jdk 'C:\Users\reazul.ashraf\scoop\apps\corretto8-jdk\current' --quiet=$quiet
}
export def --env jdk21home [--quiet (-q)] {
set-jdk 'C:\Program Files\Eclipse Adoptium\jdk-21.0.10.7-hotspot' --quiet=$quiet
}
export def --env jdk25home [--quiet (-q)] {
set-jdk 'C:\Program Files\Eclipse Adoptium\jdk-25.0.2.10-hotspot' --quiet=$quiet
}
+43
View File
@@ -0,0 +1,43 @@
# vs-utils.nu
# Visual Studio environment management for Nushell
export def --env vcvars [] {
if ($env.VCINSTALLDIR? | is-not-empty) {
print "Visual Studio environment already initialized."
return
}
print "Initializing Visual Studio Developer Environment..."
# Bridge to PowerShell to get the environment variables
# The new pw7 function in env.nu already sources Gemini_Profile.ps1
let env_json = (pw7 '
$vsPath = & "C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" -latest -property installationPath
if ($vsPath) {
$devShellModule = Get-ChildItem -Path "$vsPath\Common7\Tools" -Filter "Microsoft.VisualStudio.DevShell.dll" -Recurse | Select-Object -First 1 -ExpandProperty FullName
if ($devShellModule) {
Import-Module $devShellModule
Enter-VsDevShell -VsInstallPath $vsPath -SkipAutomaticLocation -Arch amd64 -NoLogo
Get-ChildItem env: | ForEach-Object { @{ Name = $_.Name; Value = $_.Value } } | ConvertTo-Json
}
}
' | from json)
if ($env_json | is-empty) {
print "Error: Could not initialize Visual Studio environment."
return
}
# Load the environment variables into Nushell
let new_env = ($env_json | reduce -f {} {|it, acc| $acc | insert $it.Name $it.Value })
# Path handling
load-env $new_env
# Convert Path string from PS back to Nu List if necessary
if ($env.Path? | is-not-empty) {
$env.PATH = ($env.Path | split row (char esep))
}
print "Visual Studio 2026 Developer Environment initialized."
}
+25 -33
View File
@@ -9,7 +9,6 @@ case $- in
esac
# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth
# append to the history file, don't overwrite it
@@ -23,10 +22,6 @@ HISTFILESIZE=2000
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar
# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
@@ -40,19 +35,11 @@ case "$TERM" in
xterm-color|*-256color) color_prompt=yes;;
esac
# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes
if [ -n "$force_color_prompt" ]; then
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
# We have color support; assume it's compliant with Ecma-48
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
# a case would tend to support setf rather than setaf.)
color_prompt=yes
color_prompt=yes
else
color_prompt=
color_prompt=
fi
fi
@@ -74,40 +61,26 @@ esac
# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
#alias dir='dir --color=auto'
#alias vdir='vdir --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
fi
# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
# Add an "alert" alias for long running commands. Use like so:
# sleep 10; alert
# Add an "alert" alias for long running commands.
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
# enable programmable completion features
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
@@ -115,9 +88,28 @@ if ! shopt -oq posix; then
. /etc/bash_completion
fi
fi
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
if command -v pyenv 1>/dev/null 2>&1; then
eval "$(pyenv init --path)"
fi
export PYENV_ROOT="$HOME/.pyenv"
export XDG_DATA_DIRS="/usr/local/share:/usr/share:${XDG_DATA_DIRS:-/usr/local/share:/usr/share}"
alias ghostty="ghostty 2>/dev/null"
{{- if eq .chezmoi.os "linux" }}
# --- Linux/WSL Specifics ---
{{- if (lstat (joinPath .chezmoi.homeDir ".local/bin/env")) }}
. "$HOME/.local/bin/env"
{{- end }}
{{- if (lstat (joinPath .chezmoi.homeDir ".cargo/env")) }}
. "$HOME/.cargo/env"
{{- end }}
cd ~
{{- end }}
{{- if eq .chezmoi.os "windows" }}
# --- Windows Specifics ---
# Add your windows-specific bash (git bash) tweaks here if any.
{{- end }}
-7
View File
@@ -1,7 +0,0 @@
data
*.db
config_install.json
editable_packages.json
version.txt
*.pem
artifacts.properties
+74
View File
@@ -0,0 +1,74 @@
# This is the configuration file for Ghostty.
#
# This template file has been automatically created at the following
# path since Ghostty couldn't find any existing config files on your system:
#
# /home/riz/.config/ghostty/config
#
# The template does not set any default options, since Ghostty ships
# with sensible defaults for all options. Users should only need to set
# options that they want to change from the default.
#
# Run `ghostty +show-config --default --docs` to view a list of
# all available config options and their default values.
#
# Additionally, each config option is also explained in detail
# on Ghostty's website, at https://ghostty.org/docs/config.
#
# Ghostty can reload the configuration while running by using the menu
# options or the bound key (default: Command + Shift + comma on macOS and
# Control + Shift + comma on other platforms). Not all config options can be
# reloaded while running; some only apply to new windows and others may require
# a full restart to take effect.
# Config syntax crash course
# ==========================
# # The config file consists of simple key-value pairs,
# # separated by equals signs.
# font-family = Iosevka
# window-padding-x = 2
#
# # Spacing around the equals sign does not matter.
# # All of these are identical:
# key=value
# key= value
# key =value
# key = value
#
# # Any line beginning with a # is a comment. It's not possible to put
# # a comment after a config option, since it would be interpreted as a
# # part of the value. For example, this will have a value of "#123abc":
# background = #123abc
#
# # Empty values are used to reset config keys to default.
# key =
#
# # Some config options have unique syntaxes for their value,
# # which is explained in the docs for that config option.
# # Just for example:
# resize-overlay-duration = 4s 200ms
font-family = CaskaydiaCove Nerd Font
font-size = 10
theme = Atom
# --- Aesthetics ---
gtk-adwaita = true
window-decoration = client
window-step-resize = true
gtk-titlebar = true
background-opacity = 0.9
background-blur = 20
window-padding-x = 10
window-padding-y = 10
# --- Cursor ---
cursor-style = block
cursor-style-blink = true
# --- Integration & Usability ---
copy-on-select = true
confirm-close-surface = false
mouse-hide-while-typing = true
View File
+31
View File
@@ -0,0 +1,31 @@
scan_timeout = 1500
format = """
$os$shell$hostname$username$directory$git_branch$git_status$status
$character"""
[os]
disabled = false
format = "[$symbol](bold $STARSHIP_DEVICE_COLOR) "
[os.symbols]
Windows = "󰍲 "
Ubuntu = " "
[shell]
disabled = false
powershell_indicator = "pwsh"
bash_indicator = "bash"
zsh_indicator = "zsh"
style = "cyan bold"
[status]
disabled = false
format = "[$symbol]($style) "
symbol = " "
[character]
success_symbol = "[>](bold green)"
error_symbol = "[>](bold red)"
+1
View File
@@ -0,0 +1 @@
/mnt/c/Users/reazul.ashraf/AppData/Local/nvim
+1
View File
@@ -0,0 +1 @@
insecure
+31
View File
@@ -0,0 +1,31 @@
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.
# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
PATH="$HOME/.local/bin:$PATH"
fi
. "$HOME/.local/bin/env"
. "$HOME/.cargo/env"
+49
View File
@@ -0,0 +1,49 @@
set-option -g prefix C-b
set -g mouse on
# General settings
set -g base-index 1 # start windows at 1
setw -g pane-base-index 1 # start panes at 1
set -g renumber-windows on # renumber windows when one is closed
setw -g mode-keys vi # use vim keys in copy mode
set-option -g status-position top
# Key bindings
bind r source-file ~/.tmux.conf \; display "Config Reloaded!"
bind-key "|" split-window -h -c "#{pane_current_path}"
bind-key C-| split-window -h -c "#{pane_current_path}"
bind-key "\\" split-window -v -c "#{pane_current_path}"
bind-key C-\\ split-window -v -c "#{pane_current_path}"
bind-key "-" split-window -fv -c "#{pane_current_path}"
bind-key C-- split-window -fv -c "#{pane_current_path}"
bind -r "<" swap-window -d -t -1
bind -r ">" swap-window -d -t +1
bind c new-window -c "#{pane_current_path}"
bind Space last-window
bind-key C-Space switch-client -l
# Pane navigation
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# Pane resizing
bind -r C-j resize-pane -D 15
bind -r C-k resize-pane -U 15
bind -r C-h resize-pane -L 15
bind -r C-l resize-pane -R 15
# Plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-yank'
set -g @plugin 'erikw/tmux-powerline'
# Initialize TMUX plugin manager
run '~/.tmux/plugins/tpm/tpm'
-126
View File
@@ -1,126 +0,0 @@
-- Pull in the wezterm API
local wezterm = require 'wezterm'
-- This table will hold the configuration.
local config = {}
local keys = {}
local mouse_bindings = {}
local launch_menu = {}
if wezterm.config_builder then
config = wezterm.config_builder()
end
local mux = wezterm.mux
local act = wezterm.action
wezterm.on('format-window-title', function(tab, pane, tabs, panes, config)
local zoomed = 'wezterm: '
if tab.active_pane.is_zoomed then
zoomed = '[Z] '
end
local index = ''
if #tabs > 1 then
index = string.format('[%d/%d] ', tab.tab_index + 1, #tabs)
end
return zoomed .. index .. tab.active_pane.title
end)
config.enable_kitty_graphics = true
config.ssh_backend = "Ssh2"
config.ssh_domains = {}
config.leader = { key = 'a', mods = 'CTRL', timeout_milliseconds = 1000 }
config.use_fancy_tab_bar = true
config.enable_scroll_bar = true
config.initial_rows = 48
config.initial_cols = 160
config.window_decorations = "INTEGRATED_BUTTONS | RESIZE"
config.default_prog = { 'pwsh.exe', '-NoLogo' }
config.font = wezterm.font('CaskaydiaCove NF', { weight = 'Regular' })
config.font_size = 10.0
config.front_end = "WebGpu"
config.webgpu_power_preference = 'HighPerformance'
config.max_fps = 120
config.animation_fps = 120
config.scrollback_lines = 10000
config.default_cursor_style = "SteadyBar"
config.color_scheme = 'Adventure'
config.window_background_opacity = 1.0
config.window_background_gradient = {
orientation = 'Vertical',
colors = {
'#000000', '#000100', '#000200', '#000300', '#000400', '#000500',
'#000600', '#000700', '#000800', '#000900', '#001200',
},
interpolation = 'Linear',
blend = 'Rgb',
}
config.launch_menu = {
{
label = "PowerShell",
args = {"C:/Program Files/PowerShell/7/pwsh.exe", "-WorkingDirectory", wezterm.home_dir},
domain = {DomainName="local"}
},
{
label = 'cmd',
args = {'cmd.exe'}
},
{
label = 'Ubuntu',
args = {'wsl','-d','Ubuntu'}
}
}
-- switch active tab
local act = wezterm.action
config.keys = {
{
key = 'a', mods = 'LEADER|CTRL', action = act.SendKey { key = 'a', mods = 'CTRL' }},
-- Panes
{ key = "\\", mods="LEADER", action=act{SplitVertical={domain="CurrentPaneDomain"}}},
{ key = "|", mods="LEADER|SHIFT", action=act{SplitHorizontal={domain="CurrentPaneDomain"}}},
{ key = "w", mods="CTRL|SHIFT", action=act{CloseCurrentPane={confirm=true}}},
{ key = "LeftArrow", mods="CTRL|SHIFT", action=act{ActivatePaneDirection="Left"}},
{ key = "RightArrow", mods="CTRL|SHIFT", action=act{ActivatePaneDirection="Right"}},
{ key = "UpArrow", mods="CTRL|SHIFT", action=act{ActivatePaneDirection="Up"}},
{ key = "DownArrow", mods="CTRL|SHIFT", action=act{ActivatePaneDirection="Down"}},
-- Tabs
{ key = 'n', mods = 'CTRL|SHIFT', action=act.SpawnTab 'DefaultDomain'},
{ key = 'u', mods = 'CTRL|SHIFT', action=act.SpawnTab { DomainName = 'WSL:Ubuntu'}},
{ key = "Tab", mods="CTRL", action=act{ActivateTabRelative=-1}},
{ key = "Tab", mods="CTRL|SHIFT", action=act{ActivateTabRelative=1}},
{ key = "1", mods="CTRL", action=act{ActivateTab=(1-1)}},
{ key = "2", mods="CTRL", action=act{ActivateTab=(2-1)}},
{ key = "3", mods="CTRL", action=act{ActivateTab=(3-1)}},
{ key = "4", mods="CTRL", action=act{ActivateTab=(4-1)}},
{ key = "5", mods="CTRL", action=act{ActivateTab=(5-1)}},
{ key = "6", mods="CTRL", action=act{ActivateTab=(6-1)}},
{ key = "7", mods="CTRL", action=act{ActivateTab=(7-1)}},
{ key = "8", mods="CTRL", action=act{ActivateTab=(8-1)}},
{ key = "9", mods="CTRL", action=act{ActivateTab=(9-1)}},
}
-- triple click on my output to select it
mouse_bindings = {
{
event = { Down = { streak = 3, button = 'Left' } },
action = act.SelectTextAtMouseCursor 'SemanticZone',
mods = 'NONE',
},
}
return config
+232
View File
@@ -0,0 +1,232 @@
-- Pull in the wezterm API
local wezterm = require 'wezterm'
local config = {}
local act = wezterm.action
if wezterm.config_builder then
config = wezterm.config_builder()
end
-- --------------------------------------------------------------------
-- 1. HELPERS & STATE
-- --------------------------------------------------------------------
local function is_vim(pane)
-- This checks the process name of the active pane
local process_name = pane:get_foreground_process_name()
return process_name:find('n?vim') ~= nil or process_name:find('vim.exe') ~= nil
end
local key_to_dir = {
h = 'Left',
j = 'Down',
k = 'Up',
l = 'Right',
}
local function split_nav(resize_or_move, key)
return {
key = key,
mods = resize_or_move == 'resize' and 'META' or 'CTRL',
action = wezterm.action_callback(function(win, pane)
if is_vim(pane) then
-- pass the keys through to vim/nvim
win:perform_action({
SendKey = { key = key, mods = resize_or_move == 'resize' and 'META' or 'CTRL' },
}, pane)
else
if resize_or_move == 'resize' then
win:perform_action({ AdjustPaneSize = { key_to_dir[key], 3 } }, pane)
else
win:perform_action({ ActivatePaneDirection = key_to_dir[key] }, pane)
end
end
end),
}
end
-- --------------------------------------------------------------------
-- 2. EVENTS (Status Bar & Workspace Tracking)
-- --------------------------------------------------------------------
wezterm.on('update-right-status', function(window, pane)
local cells = {}
-- Workspace Name
table.insert(cells, "󱔐 " .. window:active_workspace())
-- Battery/Power (check if battery info exists to avoid errors on desktops)
local battery = wezterm.battery_info()
if battery and #battery > 0 then
for _, b in ipairs(battery) do
table.insert(cells, string.format('%.0f%%', b.state_of_charge * 100))
end
end
-- Date & Day
table.insert(cells, wezterm.strftime('󰃭 %a %d %b'))
-- Time
table.insert(cells, wezterm.strftime('󱑒 %H:%M'))
local colors = { '#313244', '#45475a', '#585b70', '#6c7086' } -- Catppuccin Mocha colors
local text_fg = '#cdd6f4'
local elements = {}
for i, seg in ipairs(cells) do
table.insert(elements, { Background = { Color = colors[i] or '#313244' } })
table.insert(elements, { Foreground = { Color = text_fg } })
table.insert(elements, { Text = ' ' .. seg .. ' ' })
end
window:set_right_status(wezterm.format(elements))
end)
wezterm.on('format-window-title', function(tab, pane, tabs, panes, config)
local zoomed = 'wezterm: '
if tab.active_pane.is_zoomed then zoomed = '[Z] ' end
local index = #tabs > 1 and string.format('[%d/%d] ', tab.tab_index + 1, #tabs) or ''
return zoomed .. index .. tab.active_pane.title
end)
-- --------------------------------------------------------------------
-- 3. VISUALS (Windows 11 Mica & Aesthetics)
-- --------------------------------------------------------------------
{{- if eq .chezmoi.os "windows" }}
config.win32_system_backdrop = 'Mica'
config.window_background_opacity = 0.85
config.prefer_egl = true -- Often smoother on Windows
{{- else }}
config.window_background_opacity = 1.0
{{- end }}
config.text_background_opacity = 1.0
config.color_scheme = 'Adventure'
config.front_end = "WebGpu"
config.webgpu_power_preference = 'HighPerformance'
config.max_fps = 120
config.animation_fps = 1 -- Disable UI animations for "snappier" feel
config.font = wezterm.font('CaskaydiaCove NF', { weight = 'Regular' })
config.font_size = 10.0
config.line_height = 1.1 -- Slightly more breathing room
config.default_cursor_style = "SteadyBar"
config.window_decorations = "INTEGRATED_BUTTONS | RESIZE"
config.use_fancy_tab_bar = false -- Faster rendering than fancy tab bar
config.enable_scroll_bar = false -- Cleaner look
config.initial_rows = 48
config.initial_cols = 160
-- --------------------------------------------------------------------
-- 4. GENERAL CONFIG
-- --------------------------------------------------------------------
config.use_ime = false -- Reduces input latency
config.use_dead_keys = false -- Better for coding (no double-quote issues)
config.pane_focus_follows_mouse = true
config.inactive_pane_hsb = {
saturation = 0.8,
brightness = 0.5,
}
-- Colors for the UI
config.colors = {
split = '#313244',
}
-- Default Shell Configuration
{{- if eq .chezmoi.os "windows" }}
config.default_prog = { 'pwsh.exe', '-NoLogo' }
{{- else }}
config.default_prog = { 'zsh', '-l' }
{{- end }}
config.scrollback_lines = 20000
config.enable_kitty_graphics = true
config.ssh_backend = "Ssh2"
-- Leader key Configuration
config.leader = { key = ' ', mods = 'CTRL', timeout_milliseconds = 1000 }
config.launch_menu = {
{{- if eq .chezmoi.os "windows" }}
{ label = "PowerShell", args = {"C:/Program Files/PowerShell/7/pwsh.exe"}, domain = {DomainName="local"}},
{ label = 'cmd', args = {'cmd.exe'}},
{ label = 'Ubuntu', args = {'wsl','-d','Ubuntu'}}
{{- else }}
{ label = "Zsh", args = {"zsh", "-l"}},
{{- end }}
}
-- --------------------------------------------------------------------
-- 5. KEYBINDINGS
-- --------------------------------------------------------------------
config.keys = {
-- Leader passthrough
{ key = 'b', mods = 'LEADER|CTRL', action = act.SendKey { key = 'a', mods = 'CTRL' }},
-- Smart Splits (CTRL+h/j/k/l to move between WezTerm and Neovim)
split_nav('move', 'h'),
split_nav('move', 'j'),
split_nav('move', 'k'),
split_nav('move', 'l'),
-- Panes
{ key = "\\", mods="LEADER", action=act{SplitVertical={domain="CurrentPaneDomain"}}},
{ key = "|", mods="LEADER|SHIFT", action=act{SplitHorizontal={domain="CurrentPaneDomain"}}},
{ key = "w", mods="CTRL|SHIFT", action=act{CloseCurrentPane={confirm=true}}},
{ key = "z", mods="LEADER", action=act.TogglePaneZoomState },
-- Tabs
{ key = 'n', mods = 'CTRL|SHIFT', action=act.SpawnTab 'DefaultDomain'},
{ key = "Tab", mods="CTRL", action=act{ActivateTabRelative=-1}},
{ key = "Tab", mods="CTRL|SHIFT", action=act{ActivateTabRelative=1}},
-- Workspaces
{ key = 's', mods = 'LEADER', action = act.ShowLauncherArgs { flags = 'WORKSPACES' }},
{ key = '$', mods = 'LEADER|SHIFT', action = act.PromptInputLine {
description = 'Enter new name for workspace',
action = wezterm.action_callback(function(window, pane, line)
if line then wezterm.mux.rename_workspace(wezterm.mux.get_active_workspace(), line) end
end),
}},
-- Quick Select (Grab URLs/Hashes)
{
key = 'f',
mods = 'LEADER',
action = act.QuickSelectArgs {
label = 'open url',
patterns = { 'https?://\\S+' },
action = wezterm.action_callback(function(window, pane)
local url = window:get_selection_text_for_pane(pane)
wezterm.open_with(url)
end),
},
},
}
-- Bind number keys to tabs
for i = 1, 9 do
table.insert(config.keys, {
key = tostring(i),
mods = 'CTRL',
action = act.ActivateTab(i - 1),
})
end
-- Mouse Bindings
config.mouse_bindings = {
{
event = { Down = { streak = 3, button = 'Left' } },
action = act.SelectTextAtMouseCursor 'SemanticZone',
mods = 'NONE',
},
}
-- Hyperlink rules
config.hyperlink_rules = wezterm.default_hyperlink_rules()
table.insert(config.hyperlink_rules, {
regex = [=[(\b[A-Za-z]:\\[^\s:"']+\b)]=],
format = 'file://$1',
})
return config
+2
View File
@@ -0,0 +1,2 @@
check-certificate=off
+1
View File
@@ -0,0 +1 @@
export XDG_DATA_DIRS="/home/riz/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/home/hyperion/.local/share/flatpak/exports/share:$XDG_DATA_DIRS"
+1
View File
@@ -0,0 +1 @@
. "$HOME/.cargo/env"
-87
View File
@@ -1,87 +0,0 @@
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi
VI_MODE_SET_CURSOR=true
MODE_INDICATOR="%F{yellow}+%f"
bindkey -v
bindkey 'jk' vi-cmd-mode
bindkey '^[[A' history-substring-search-up
bindkey '^[[B' history-substring-search-down
# export manpath="/usr/local/man:$manpath"
export LC_CTYPE=en_GB.UTF-8
export LC_ALL=en_GB.UTF-8
export LANG=en_GB.UTF-8
export EDITOR='/usr/bin/nvim'
# to customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
export PYENV_ROOT="$HOME/.pyenv"
export JDK8_HOME="$HOME/.jdks/jdk-1.8"
export JDK21_HOME="$HOME/.jdks/jdk-21"
export JAVA_HOME="$JDK21_HOME"
export GROOVY_HOME="$HOME/devtools/groovy"
export M2_HOME="$HOME/devtools/maven"
export NODE_ENV=development
export PATH="$JAVA_HOME/bin:$M2_HOME/bin:$GROOVY_HOME/bin:$PYENV_ROOT/bin:$HOME/.npm-global/bin:/snap/bin:$HOME/.local/bin:/usr/local/bin:/usr/bin:/mnt/c/windows/system32"
typeset -g POWERLEVEL9K_INSTANT_PROMPT=off
export ZSH="/home/riz/.oh-my-zsh"
ZSH_THEME="powerlevel10k/powerlevel10k"
plugins=(git vi-mode zsh-autosuggestions zsh-syntax-highlighting zsh-history-substring-search)
#source /usr/share/doc/fzf/examples/key-bindings.zsh
export LIBGL_ALWAYS_INDIRECT=1
#export NNN_PLUG='f:finder;o:fzopen;p:mocplay;d:diffs;t:nmount;v:imgview'
export NNN_ARCHIVE="\\.(7z|a|ace|alz|arc|arj|bz|bz2|cab|cpio|deb|gz|jar|lha|lz|lzh|lzma|lzo|rar|rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z|zip)$"
export DENO_INSTALL="/home/riz/.deno"
export PATH="$DENO_INSTALL/bin:$PATH"
source $ZSH/oh-my-zsh.sh
alias fcd='cd $(find * -type d | fzf)'
alias vi=nvim
alias jdk8home="export JAVA_HOME=$JDK8_HOME"
alias jdk21home="export JAVA_HOME=$JDK21_HOME"
alias g=git
alias cat=batcat
alias bat=batcat
alias code="/mnt/c/Program\ Files/Microsoft\ VS\ Code/bin/code"
alias pbcopy='xclip -selection clipboard'
alias pbpaste='xclip -selection clipboard -o'
gsquash() {
git reset --soft head~$(git rev-list --count head ^$1)
echo "To complete then do, git push --force"
}
dmvn() {
ws="/mnt/c/users/reazul.ashraf/workspace/uichannel-commission-bootstrap"
echo "ws: $ws"
id="$(docker run -t -d -u root:root -v /home/riz/.m2:/volume/.m2 -w $ws -v $ws:$ws:rw,z -v $ws@tmp:$ws@tmp:rw,z maven:3-openjdk-8-slim cat)"
echo "id: $id"
docker exec -ti $id ls -alp $ws
docker kill $id
}
sonarscan() {
MAVEN_OPTS="-Dsonar.branch.name=$(git branch --show-current)" JAVA_HOME=$JDK21_HOME mvn org.sonarsource.scanner.maven:sonar-maven-plugin:RELEASE:sonar -DskipTests
}
source /snap/google-cloud-cli/current/completion.zsh.inc
#if command -v pyenv >/dev/null 2>&1; then
# eval "$(pyenv init -)"
#fi
eval "$(zoxide init --cmd z zsh)"
# Start in ~
cd ~
+166
View File
@@ -0,0 +1,166 @@
{{- if eq .chezmoi.os "linux" -}}
# Instant prompt for Powerlevel10k
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi
# --- Homebrew Initialization ---
if [ -f "/home/linuxbrew/.linuxbrew/bin/brew" ]; then
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
fi
{{- end }}
VI_MODE_SET_CURSOR=true
MODE_INDICATOR="%F{yellow}+%f"
bindkey -v
bindkey 'jk' vi-cmd-mode
# Visual feedback for vi mode
function zle-keymap-select {
if [[ $KEYMAP == vicmd ]]; then
echo -ne "\e[2 q" # Block
else
echo -ne "\e[6 q" # Beam
fi
}
zle -N zle-keymap-select
echo -ne "\e[6 q" # Start with beam
precmd() { echo -ne "\e[6 q" } # Reset to beam before prompt
bindkey '^[[A' history-substring-search-up
bindkey '^[[B' history-substring-search-down
export LC_CTYPE=en_GB.UTF-8
export LC_ALL=en_GB.UTF-8
export LANG=en_GB.UTF-8
export EDITOR='/usr/bin/nvim'
export MAVEN_OPTS='-Dstyle.color=always'
# Options
setopt AUTO_CD
setopt CORRECT
setopt HIST_IGNORE_DUPS
setopt SHARE_HISTORY
# History
HISTSIZE=10000
SAVEHIST=10000
HISTFILE=~/.zsh_history
# to customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
export PYENV_ROOT="$HOME/.pyenv"
export JDK8_HOME="$HOME/.jdks/jdk-1.8"
export JDK21_HOME="$HOME/.jdks/jdk-21"
export JDK25_HOME="$HOME/.jdks/jdk-25"
export JAVA_HOME="$JDK21_HOME"
export GROOVY_HOME="$HOME/devtools/groovy"
export M2_HOME="$HOME/devtools/maven"
export NODE_ENV=development
{{- if eq .chezmoi.os "linux" }}
export GDK_BACKEND=x11
export PNPM_HOME="$HOME/.local/share/pnpm"
export PATH="$PNPM_HOME:$HOME/.local/bin:$PATH:$JAVA_HOME/bin:$M2_HOME/bin:$GROOVY_HOME/bin:$PYENV_ROOT/bin:$HOME/.npm-global/bin:/snap/bin"
{{- else }}
export PATH="$JAVA_HOME/bin:$M2_HOME/bin:$GROOVY_HOME/bin:$PYENV_ROOT/bin:$HOME/.npm-global/bin:/snap/bin:$HOME/.local/bin:/usr/local/bin:/usr/bin"
{{- end }}
typeset -g POWERLEVEL9K_INSTANT_PROMPT=quiet
export ZSH="$HOME/.oh-my-zsh"
plugins=(
git
vi-mode
zsh-autosuggestions
zsh-history-substring-search
zsh-completions
{{- if eq .chezmoi.os "linux" }}
fzf-tab
{{- end }}
zsh-syntax-highlighting
)
{{- if eq .chezmoi.os "linux" }}
# fzf-tab settings
zstyle ':fzf-tab:complete:cd:*' fzf-preview 'eza -1 --color=always $realpath'
zstyle ':fzf-tab:complete:*' fzf-flags --color=fg:1,fg+:2 --height=50%
zstyle ':completion:*:descriptions' format '[%d]'
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
{{- end }}
if command -v fzf >/dev/null 2>&1; then
source <(fzf --zsh)
fi
export FZF_DEFAULT_OPTS="--height 40% --layout=reverse --border --preview 'bat --style=numbers --color=always --line-range :500 {}'"
export FZF_CTRL_T_OPTS="--preview 'bat --style=numbers --color=always --line-range :500 {}'"
export FZF_ALT_C_OPTS="--preview 'eza --tree --icons --color=always {} | head -200'"
# General Aliases
alias ai='gemini'
alias vi=nvim
alias g=git
alias lg=lazygit
alias code="/mnt/c/Users/reazul.ashraf/AppData/Local/Programs/Microsoft\ VS\ Code/bin/code"
alias pbcopy='xclip -selection clipboard'
alias pbpaste='xclip -selection clipboard -o'
# --- Gold Standard Tool Mapping ---
if command -v eza >/dev/null 2>&1; then
alias ls='eza --icons --group-directories-first'
alias la='eza --icons -la --group-directories-first --git'
alias tree='eza --tree --icons'
else
alias ls='ls --color=auto'
alias la='ls -la'
fi
if command -v bat >/dev/null 2>&1; then alias cat='bat'; fi
if command -v batcat >/dev/null 2>&1; then alias cat='batcat'; alias bat='batcat'; fi
if command -v fd >/dev/null 2>&1; then alias find='fd'; alias ff='fd'; fi
if command -v rg >/dev/null 2>&1; then alias grep='rg'; fi
if command -v sd >/dev/null 2>&1; then alias sed='sd'; fi
if command -v choose >/dev/null 2>&1; then alias awk='choose'; fi
if command -v procs >/dev/null 2>&1; then alias ps='procs'; fi
if command -v btm >/dev/null 2>&1; then alias top='btm'; fi
if command -v xh >/dev/null 2>&1; then alias curl='xh'; fi
if command -v ouch >/dev/null 2>&1; then alias zip='ouch'; alias tar='ouch'; fi
if command -v delta >/dev/null 2>&1; then alias diff='delta'; fi
# Navigation
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
# Functions
fcd() {
local dir
dir=$(fd -t d 2>/dev/null | fzf --preview 'eza --tree --icons --color=always {} | head -200') && cd "$dir"
}
alias jdk8home="export JAVA_HOME=$JDK8_HOME"
alias jdk21home="export JAVA_HOME=$JDK21_HOME"
alias jdk25home="export JAVA_HOME=$JDK25_HOME"
gsquash() {
git reset --soft head~$(git rev-list --count head ^$1)
echo "To complete then do, git push --force"
}
source $ZSH/oh-my-zsh.sh
{{- if eq .chezmoi.os "linux" }}
export STARSHIP_DEVICE_COLOR="orange"
export STARSHIP_CONFIG=~/.config/starship_linux.toml
eval "$(starship init zsh)"
alias refresh-vpn='powershell.exe -ExecutionPolicy Bypass -File "C:\Users\reazul.ashraf\scripts\refresh_wsl_vpn.ps1"'
{{- end }}
eval "$(zoxide init --cmd z zsh)"
# Autosuggestions color
export ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=cyan'
# Start in ~
cd ~
+2 -1
View File
@@ -1,12 +1,13 @@
Write-Host "Checking for required PowerShell modules..."
$modules = @(
"oh-my-posh",
"posh-git",
"Profiler",
"PSFzf",
"PSProfiler",
"PSScriptAnalyzer",
"Terminal-Icons",
"Terminal-Icons"
)
foreach ($mod in $modules) {