chore: remove unused configs (zathura, oh-my-zsh colour-ssh)
This commit is contained in:
parent
6ae3048c28
commit
54782676d0
32 changed files with 696 additions and 797 deletions
5
.gitignore
vendored
5
.gitignore
vendored
|
|
@ -13,3 +13,8 @@ firefox/*
|
||||||
!firefox/Library/Application Support/Firefox/Profiles/*/user.js
|
!firefox/Library/Application Support/Firefox/Profiles/*/user.js
|
||||||
|
|
||||||
nix-darwin/.config/nix-darwin/flake.lock
|
nix-darwin/.config/nix-darwin/flake.lock
|
||||||
|
|
||||||
|
shpotify/.shpotify.cfg
|
||||||
|
|
||||||
|
colima/.config/colima/_lima/
|
||||||
|
colima/.config/colima/default/daemon/
|
||||||
|
|
|
||||||
|
|
@ -10,8 +10,9 @@ after-login-command = []
|
||||||
# 'after-startup-command' is run after 'after-login-command'
|
# 'after-startup-command' is run after 'after-login-command'
|
||||||
# Available commands : https://nikitabobko.github.io/AeroSpace/commands
|
# Available commands : https://nikitabobko.github.io/AeroSpace/commands
|
||||||
# after-startup-command = ['exec-and-forget sketchybar']
|
# after-startup-command = ['exec-and-forget sketchybar']
|
||||||
after-startup-command = []
|
# after-startup-command = [
|
||||||
|
# 'exec-and-forget borders active_color=0xffe6e8eb inactive_color=0xff3a3f4b width=5.0',
|
||||||
|
# ]
|
||||||
# Start AeroSpace at login
|
# Start AeroSpace at login
|
||||||
start-at-login = true
|
start-at-login = true
|
||||||
|
|
||||||
|
|
@ -109,8 +110,8 @@ cmd-h = [] # Disable "hide application"
|
||||||
cmd-alt-h = [] # Disable "hide others"
|
cmd-alt-h = [] # Disable "hide others"
|
||||||
|
|
||||||
# See: https://nikitabobko.github.io/AeroSpace/commands#layout
|
# See: https://nikitabobko.github.io/AeroSpace/commands#layout
|
||||||
alt-slash = 'layout tiles horizontal vertical'
|
alt-shift-slash = 'layout h_tiles vertical horizontal'
|
||||||
alt-comma = 'layout accordion horizontal vertical'
|
alt-shift-comma = 'layout accordion vertical horizontal'
|
||||||
|
|
||||||
# See: https://nikitabobko.github.io/AeroSpace/commands#focus
|
# See: https://nikitabobko.github.io/AeroSpace/commands#focus
|
||||||
alt-h = 'focus left'
|
alt-h = 'focus left'
|
||||||
|
|
@ -118,7 +119,10 @@ alt-j = 'focus down'
|
||||||
alt-k = 'focus up'
|
alt-k = 'focus up'
|
||||||
alt-l = 'focus right'
|
alt-l = 'focus right'
|
||||||
|
|
||||||
alt-r = 'layout horizontal vertical'
|
ctrl-j = 'focus dfs-next --boundaries-action wrap-around-the-workspace'
|
||||||
|
ctrl-k = 'focus dfs-prev --boundaries-action wrap-around-the-workspace'
|
||||||
|
|
||||||
|
alt-shift-r = 'layout horizontal vertical'
|
||||||
|
|
||||||
# See: https://nikitabobko.github.io/AeroSpace/commands#move
|
# See: https://nikitabobko.github.io/AeroSpace/commands#move
|
||||||
alt-shift-h = 'move left'
|
alt-shift-h = 'move left'
|
||||||
|
|
@ -130,13 +134,12 @@ alt-shift-l = 'move right'
|
||||||
alt-shift-minus = 'resize smart -50'
|
alt-shift-minus = 'resize smart -50'
|
||||||
alt-shift-equal = 'resize smart +50'
|
alt-shift-equal = 'resize smart +50'
|
||||||
|
|
||||||
alt-shift-r = 'resize
|
|
||||||
|
|
||||||
# See: https://nikitabobko.github.io/AeroSpace/commands#workspace
|
# See: https://nikitabobko.github.io/AeroSpace/commands#workspace
|
||||||
alt-1 = 'workspace 1'
|
alt-1 = 'workspace 1'
|
||||||
alt-2 = 'workspace 2'
|
alt-2 = 'workspace 2'
|
||||||
alt-3 = 'workspace 3'
|
alt-3 = 'workspace 3'
|
||||||
alt-c = 'workspace C'
|
alt-c = 'workspace C'
|
||||||
|
alt-d = 'workspace D'
|
||||||
alt-e = 'workspace E'
|
alt-e = 'workspace E'
|
||||||
alt-g = 'workspace G'
|
alt-g = 'workspace G'
|
||||||
alt-n = 'workspace N'
|
alt-n = 'workspace N'
|
||||||
|
|
@ -154,6 +157,7 @@ alt-shift-1 = 'move-node-to-workspace 1'
|
||||||
alt-shift-2 = 'move-node-to-workspace 2'
|
alt-shift-2 = 'move-node-to-workspace 2'
|
||||||
alt-shift-3 = 'move-node-to-workspace 3'
|
alt-shift-3 = 'move-node-to-workspace 3'
|
||||||
alt-shift-c = 'move-node-to-workspace C'
|
alt-shift-c = 'move-node-to-workspace C'
|
||||||
|
alt-shift-d = 'move-node-to-workspace D'
|
||||||
alt-shift-e = 'move-node-to-workspace E'
|
alt-shift-e = 'move-node-to-workspace E'
|
||||||
alt-shift-g = 'move-node-to-workspace G'
|
alt-shift-g = 'move-node-to-workspace G'
|
||||||
alt-shift-n = 'move-node-to-workspace N'
|
alt-shift-n = 'move-node-to-workspace N'
|
||||||
|
|
@ -172,10 +176,10 @@ alt-tab = 'workspace-back-and-forth'
|
||||||
alt-shift-tab = 'move-workspace-to-monitor --wrap-around next'
|
alt-shift-tab = 'move-workspace-to-monitor --wrap-around next'
|
||||||
|
|
||||||
# See: https://nikitabobko.github.io/AeroSpace/commands#mode
|
# See: https://nikitabobko.github.io/AeroSpace/commands#mode
|
||||||
alt-shift-semicolon = 'mode service'
|
alt-ctrl-semicolon = 'mode service'
|
||||||
alt-shift-r = 'mode resize'
|
alt-ctrl-r = 'mode resize'
|
||||||
|
|
||||||
alt-f = 'fullscreen'
|
alt-shift-f = 'fullscreen'
|
||||||
# 'service' binding mode declaration.
|
# 'service' binding mode declaration.
|
||||||
# See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes
|
# See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes
|
||||||
[mode.service.binding]
|
[mode.service.binding]
|
||||||
|
|
@ -187,7 +191,7 @@ f = [
|
||||||
] # Toggle between floating and tiling layout
|
] # Toggle between floating and tiling layout
|
||||||
backspace = ['close-all-windows-but-current', 'mode main']
|
backspace = ['close-all-windows-but-current', 'mode main']
|
||||||
|
|
||||||
# 'resize' binding mode declaration.
|
# 'resize' binding mode declarationr
|
||||||
[mode.resize.binding]
|
[mode.resize.binding]
|
||||||
esc = ['mode main']
|
esc = ['mode main']
|
||||||
enter = ['mode main']
|
enter = ['mode main']
|
||||||
|
|
@ -216,6 +220,10 @@ Z = ['secondary', 'dell']
|
||||||
if.app-id = 'com.apple.iCal'
|
if.app-id = 'com.apple.iCal'
|
||||||
run = "move-node-to-workspace C"
|
run = "move-node-to-workspace C"
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.hnc.Discord'
|
||||||
|
run = "move-node-to-workspace D"
|
||||||
|
|
||||||
[[on-window-detected]]
|
[[on-window-detected]]
|
||||||
if.app-id = 'com.apple.finder'
|
if.app-id = 'com.apple.finder'
|
||||||
run = "move-node-to-workspace E"
|
run = "move-node-to-workspace E"
|
||||||
|
|
@ -251,3 +259,15 @@ run = "move-node-to-workspace V"
|
||||||
[[on-window-detected]]
|
[[on-window-detected]]
|
||||||
if.app-id = 'com.apple.Safari'
|
if.app-id = 'com.apple.Safari'
|
||||||
run = "move-node-to-workspace X"
|
run = "move-node-to-workspace X"
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.apple.Preview'
|
||||||
|
run = "move-node-to-workspace 1"
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.apple.TextEdit'
|
||||||
|
run = "move-node-to-workspace 2"
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.apple.iWork.Pages'
|
||||||
|
run = "move-node-to-workspace 3"
|
||||||
|
|
|
||||||
216
colima/.config/colima/default/colima.yaml
Normal file
216
colima/.config/colima/default/colima.yaml
Normal file
|
|
@ -0,0 +1,216 @@
|
||||||
|
# Number of CPUs to be allocated to the virtual machine.
|
||||||
|
# Default: 2
|
||||||
|
cpu: 2
|
||||||
|
|
||||||
|
# Size of the disk in GiB to be allocated to the virtual machine.
|
||||||
|
# NOTE: value can only be increased after virtual machine has been created.
|
||||||
|
#
|
||||||
|
# Default: 100
|
||||||
|
disk: 100
|
||||||
|
|
||||||
|
# Size of the memory in GiB to be allocated to the virtual machine.
|
||||||
|
# Default: 2
|
||||||
|
memory: 2
|
||||||
|
|
||||||
|
# Architecture of the virtual machine (x86_64, aarch64, host).
|
||||||
|
#
|
||||||
|
# NOTE: value cannot be changed after virtual machine is created.
|
||||||
|
# Default: host
|
||||||
|
arch: aarch64
|
||||||
|
|
||||||
|
# Container runtime to be used (docker, containerd).
|
||||||
|
#
|
||||||
|
# NOTE: value cannot be changed after virtual machine is created.
|
||||||
|
# Default: docker
|
||||||
|
runtime: docker
|
||||||
|
|
||||||
|
# Set custom hostname for the virtual machine.
|
||||||
|
# Default: colima
|
||||||
|
# colima-profile_name for other profiles
|
||||||
|
hostname: colima
|
||||||
|
|
||||||
|
# Kubernetes configuration for the virtual machine.
|
||||||
|
kubernetes:
|
||||||
|
# Enable kubernetes.
|
||||||
|
# Default: false
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
# Kubernetes version to use.
|
||||||
|
# This needs to exactly match a k3s version https://github.com/k3s-io/k3s/releases
|
||||||
|
# Default: latest stable release
|
||||||
|
version: v1.31.2+k3s1
|
||||||
|
|
||||||
|
# Additional args to pass to k3s https://docs.k3s.io/cli/server
|
||||||
|
# Default: traefik is disabled
|
||||||
|
k3sArgs:
|
||||||
|
- --disable=traefik
|
||||||
|
|
||||||
|
# Auto-activate on the Host for client access.
|
||||||
|
# Setting to true does the following on startup
|
||||||
|
# - sets as active Docker context (for Docker runtime).
|
||||||
|
# - sets as active Kubernetes context (if Kubernetes is enabled).
|
||||||
|
# Default: true
|
||||||
|
autoActivate: true
|
||||||
|
|
||||||
|
# Network configurations for the virtual machine.
|
||||||
|
network:
|
||||||
|
# Assign reachable IP address to the virtual machine.
|
||||||
|
# NOTE: this is currently macOS only and ignored on Linux.
|
||||||
|
# Default: false
|
||||||
|
address: false
|
||||||
|
|
||||||
|
# Custom DNS resolvers for the virtual machine.
|
||||||
|
#
|
||||||
|
# EXAMPLE
|
||||||
|
# dns: [8.8.8.8, 1.1.1.1]
|
||||||
|
#
|
||||||
|
# Default: []
|
||||||
|
dns: []
|
||||||
|
|
||||||
|
# DNS hostnames to resolve to custom targets using the internal resolver.
|
||||||
|
# This setting has no effect if a custom DNS resolver list is supplied above.
|
||||||
|
# It does not configure the /etc/hosts files of any machine or container.
|
||||||
|
# The value can be an IP address or another host.
|
||||||
|
#
|
||||||
|
# EXAMPLE
|
||||||
|
# dnsHosts:
|
||||||
|
# example.com: 1.2.3.4
|
||||||
|
dnsHosts: {}
|
||||||
|
|
||||||
|
# Replicate host IP addresses in the VM. This enables port forwarding to specific
|
||||||
|
# host IP addresses.
|
||||||
|
# e.g. `docker run --port 10.0.1.2:8080:8080 alpine` would only forward to the
|
||||||
|
# specified IP address.
|
||||||
|
#
|
||||||
|
# Default: false
|
||||||
|
hostAddresses: false
|
||||||
|
|
||||||
|
# ===================================================================== #
|
||||||
|
# ADVANCED CONFIGURATION
|
||||||
|
# ===================================================================== #
|
||||||
|
|
||||||
|
# Forward the host's SSH agent to the virtual machine.
|
||||||
|
# Default: false
|
||||||
|
forwardAgent: false
|
||||||
|
|
||||||
|
# Docker daemon configuration that maps directly to daemon.json.
|
||||||
|
# https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file.
|
||||||
|
# NOTE: some settings may affect Colima's ability to start docker. e.g. `hosts`.
|
||||||
|
#
|
||||||
|
# EXAMPLE - disable buildkit
|
||||||
|
# docker:
|
||||||
|
# features:
|
||||||
|
# buildkit: false
|
||||||
|
#
|
||||||
|
# EXAMPLE - add insecure registries
|
||||||
|
# docker:
|
||||||
|
# insecure-registries:
|
||||||
|
# - myregistry.com:5000
|
||||||
|
# - host.docker.internal:5000
|
||||||
|
#
|
||||||
|
# Colima default behaviour: buildkit enabled
|
||||||
|
# Default: {}
|
||||||
|
docker: {}
|
||||||
|
|
||||||
|
# Virtual Machine type (qemu, vz)
|
||||||
|
# NOTE: this is macOS 13 only. For Linux and macOS <13.0, qemu is always used.
|
||||||
|
#
|
||||||
|
# vz is macOS virtualization framework and requires macOS 13
|
||||||
|
#
|
||||||
|
# NOTE: value cannot be changed after virtual machine is created.
|
||||||
|
# Default: qemu
|
||||||
|
vmType: vz
|
||||||
|
|
||||||
|
# Utilise rosetta for amd64 emulation (requires m1 mac and vmType `vz`)
|
||||||
|
# Default: false
|
||||||
|
rosetta: false
|
||||||
|
|
||||||
|
# Enable nested virtualization for the virtual machine (requires m3 mac and vmType `vz`)
|
||||||
|
# Default: false
|
||||||
|
nestedVirtualization: false
|
||||||
|
|
||||||
|
# Volume mount driver for the virtual machine (virtiofs, 9p, sshfs).
|
||||||
|
#
|
||||||
|
# virtiofs is limited to macOS and vmType `vz`. It is the fastest of the options.
|
||||||
|
#
|
||||||
|
# 9p is the recommended and the most stable option for vmType `qemu`.
|
||||||
|
#
|
||||||
|
# sshfs is faster than 9p but the least reliable of the options (when there are lots
|
||||||
|
# of concurrent reads or writes).
|
||||||
|
#
|
||||||
|
# NOTE: value cannot be changed after virtual machine is created.
|
||||||
|
# Default: virtiofs (for vz), sshfs (for qemu)
|
||||||
|
mountType: sshfs
|
||||||
|
|
||||||
|
# Propagate inotify file events to the VM.
|
||||||
|
# NOTE: this is experimental.
|
||||||
|
mountInotify: true
|
||||||
|
|
||||||
|
# The CPU type for the virtual machine (requires vmType `qemu`).
|
||||||
|
# Options available for host emulation can be checked with: `qemu-system-$(arch) -cpu help`.
|
||||||
|
# Instructions are also supported by appending to the cpu type e.g. "qemu64,+ssse3".
|
||||||
|
# Default: host
|
||||||
|
cpuType: ""
|
||||||
|
|
||||||
|
# Custom provision scripts for the virtual machine.
|
||||||
|
# Provisioning scripts are executed on startup and therefore needs to be idempotent.
|
||||||
|
#
|
||||||
|
# EXAMPLE - script executed as root
|
||||||
|
# provision:
|
||||||
|
# - mode: system
|
||||||
|
# script: apt-get install htop vim
|
||||||
|
#
|
||||||
|
# EXAMPLE - script executed as user
|
||||||
|
# provision:
|
||||||
|
# - mode: user
|
||||||
|
# script: |
|
||||||
|
# [ -f ~/.provision ] && exit 0;
|
||||||
|
# echo provisioning as $USER...
|
||||||
|
# touch ~/.provision
|
||||||
|
#
|
||||||
|
# Default: []
|
||||||
|
provision: []
|
||||||
|
|
||||||
|
# Modify ~/.ssh/config automatically to include a SSH config for the virtual machine.
|
||||||
|
# SSH config will still be generated in $COLIMA_HOME/ssh_config regardless.
|
||||||
|
# Default: true
|
||||||
|
sshConfig: true
|
||||||
|
|
||||||
|
# The port number for the SSH server for the virtual machine.
|
||||||
|
# When set to 0, a random available port is used.
|
||||||
|
#
|
||||||
|
# Default: 0
|
||||||
|
sshPort: 0
|
||||||
|
|
||||||
|
# Configure volume mounts for the virtual machine.
|
||||||
|
# Colima mounts user's home directory by default to provide a familiar
|
||||||
|
# user experience.
|
||||||
|
#
|
||||||
|
# EXAMPLE
|
||||||
|
# mounts:
|
||||||
|
# - location: ~/secrets
|
||||||
|
# writable: false
|
||||||
|
# - location: ~/projects
|
||||||
|
# writable: true
|
||||||
|
#
|
||||||
|
# Colima default behaviour: $HOME and /tmp/colima are mounted as writable.
|
||||||
|
# Default: []
|
||||||
|
mounts: []
|
||||||
|
|
||||||
|
# Specify a custom disk image for the virtual machine.
|
||||||
|
# When not specified, Colima downloads an appropriate disk image from Github at
|
||||||
|
# https://github.com/abiosoft/colima-core/releases.
|
||||||
|
# The file path to a custom disk image can be specified to override the behaviour.
|
||||||
|
#
|
||||||
|
# Default: ""
|
||||||
|
diskImage: ""
|
||||||
|
|
||||||
|
# Environment variables for the virtual machine.
|
||||||
|
#
|
||||||
|
# EXAMPLE
|
||||||
|
# env:
|
||||||
|
# KEY: value
|
||||||
|
# ANOTHER_KEY: another value
|
||||||
|
#
|
||||||
|
# Default: {}
|
||||||
|
env: {}
|
||||||
21
colima/.config/colima/ssh_config
Normal file
21
colima/.config/colima/ssh_config
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
# This SSH config file can be passed to 'ssh -F'.
|
||||||
|
# This file is created by Lima, but not used by Lima itself currently.
|
||||||
|
# Modifications to this file will be lost on restarting the Lima instance.
|
||||||
|
Host colima
|
||||||
|
IdentityFile "/Users/jfraeys/.dotfiles/colima/.config/colima/_lima/_config/user"
|
||||||
|
StrictHostKeyChecking no
|
||||||
|
UserKnownHostsFile /dev/null
|
||||||
|
NoHostAuthenticationForLocalhost yes
|
||||||
|
GSSAPIAuthentication no
|
||||||
|
PreferredAuthentications publickey
|
||||||
|
Compression no
|
||||||
|
BatchMode yes
|
||||||
|
IdentitiesOnly yes
|
||||||
|
Ciphers "^aes128-gcm@openssh.com,aes256-gcm@openssh.com"
|
||||||
|
User jfraeys
|
||||||
|
ControlMaster auto
|
||||||
|
ControlPath "/Users/jfraeys/.dotfiles/colima/.config/colima/_lima/colima/ssh.sock"
|
||||||
|
ControlPersist yes
|
||||||
|
Hostname 127.0.0.1
|
||||||
|
Port 64193
|
||||||
|
|
||||||
|
|
@ -2,6 +2,4 @@ channels:
|
||||||
- conda-forge
|
- conda-forge
|
||||||
auto_activate_base: false
|
auto_activate_base: false
|
||||||
changeps1: false
|
changeps1: false
|
||||||
|
|
||||||
channel_priority: strict
|
channel_priority: strict
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@
|
||||||
side-by-side = true
|
side-by-side = true
|
||||||
line-numbers = true
|
line-numbers = true
|
||||||
preload = true
|
preload = true
|
||||||
|
excludesfile = /Users/jfraeys/.gitignore_global
|
||||||
[interactive]
|
[interactive]
|
||||||
diffFilter = delta --color-only
|
diffFilter = delta --color-only
|
||||||
[delta]
|
[delta]
|
||||||
|
|
|
||||||
|
|
@ -1,203 +0,0 @@
|
||||||
{
|
|
||||||
description = "jfraeys Darwin system flake";
|
|
||||||
|
|
||||||
inputs = {
|
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
|
||||||
nix-darwin.url = "github:LnL7/nix-darwin";
|
|
||||||
nix-darwin.inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
nix-homebrew.url = "github:zhaofengli-wip/nix-homebrew";
|
|
||||||
home-manager = {
|
|
||||||
url = "github:nix-community/home-manager";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
outputs = inputs@{ self, nix-darwin, nixpkgs, nix-homebrew, home-manager }:
|
|
||||||
let
|
|
||||||
userConfig = import ./user.nix;
|
|
||||||
inherit (userConfig) username hostname;
|
|
||||||
|
|
||||||
configuration = { pkgs, config, ... }: {
|
|
||||||
# Allow unfree packages
|
|
||||||
nixpkgs.config.allowUnfree = true;
|
|
||||||
|
|
||||||
# User configuration
|
|
||||||
users.users.${username} = {
|
|
||||||
home = "/Users/${username}";
|
|
||||||
shell = pkgs.zsh;
|
|
||||||
};
|
|
||||||
|
|
||||||
# System packages
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
neovim wezterm git ripgrep fd pyenv mos docker docker-compose gh rustup
|
|
||||||
sd sphinx starship stow tree zoxide spotify unibilium uv raycast skim
|
|
||||||
eza fzf zsh gettext python3 lua luarocks bat go openssl topgrade vault
|
|
||||||
yamllint jq yq lazydocker delta bottom luarocks zig pkg-config cmake cairo
|
|
||||||
k3d kubectl kubectx golangci-lint ollama duckdb
|
|
||||||
];
|
|
||||||
|
|
||||||
# Fonts
|
|
||||||
fonts.packages = with pkgs; [ nerd-fonts.meslo-lg nerd-fonts.fira-code ];
|
|
||||||
|
|
||||||
# Homebrew setup
|
|
||||||
homebrew = {
|
|
||||||
enable = true;
|
|
||||||
brews = [ "mas" "shpotify" "colima" "ruff" "zathura" "zathura-pdf-poppler" ];
|
|
||||||
# brews = [ "mas" "shpotify" "colima" "ruff" ];
|
|
||||||
casks = [
|
|
||||||
{ name = "zotero"; greedy = true; }
|
|
||||||
{ name = "microsoft-teams"; greedy = true; }
|
|
||||||
{ name = "firefox"; greedy = true; }
|
|
||||||
{ name = "aerospace"; greedy = true; }
|
|
||||||
{ name = "logi-options+"; greedy = true; }
|
|
||||||
{ name = "hiddenbar"; greedy = true; }
|
|
||||||
{ name = "insomnia"; greedy=true; }
|
|
||||||
{ name = "miniforge"; greedy = true; }
|
|
||||||
{ name = "google-drive"; greedy = true; }
|
|
||||||
{ name = "vscodium"; greedy = true; }
|
|
||||||
{ name = "mactex-no-gui"; greedy = true; }
|
|
||||||
{ name = "notion"; greedy = true; }
|
|
||||||
{ name = "obsidian"; greedy = true; }
|
|
||||||
{ name = "display-pilot"; greedy = true; }
|
|
||||||
{ name = "zen-browser"; greedy = true; }
|
|
||||||
];
|
|
||||||
masApps = {
|
|
||||||
"notability" = 360593530;
|
|
||||||
"keynote" = 409183694;
|
|
||||||
"pages" = 409201541;
|
|
||||||
"numbers" = 409203825;
|
|
||||||
};
|
|
||||||
taps = [ "nikitabobko/tap" "zegervdv/zathura" ];
|
|
||||||
onActivation = {
|
|
||||||
cleanup = "zap";
|
|
||||||
autoUpdate = true;
|
|
||||||
upgrade = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# System activation scripts
|
|
||||||
system.activationScripts = {
|
|
||||||
applications.text = let
|
|
||||||
env = pkgs.buildEnv {
|
|
||||||
name = "system-applications";
|
|
||||||
paths = config.environment.systemPackages;
|
|
||||||
pathsToLink = "/Applications";
|
|
||||||
};
|
|
||||||
in pkgs.lib.mkForce ''
|
|
||||||
echo "Setting up /Applications..." >&2
|
|
||||||
|
|
||||||
[ ! -d "/Applications" ] && echo "ERROR: /Applications does not exist." && exit 1
|
|
||||||
rm -rf "/Applications/Nix Apps"
|
|
||||||
mkdir -p "/Applications/Nix Apps"
|
|
||||||
for app in ${env}/Applications/*; do
|
|
||||||
[ -e "$app" ] && ln -s "$app" "/Applications/Nix Apps/$(basename "$app")"
|
|
||||||
done
|
|
||||||
echo "Applications setup complete."
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
system = {
|
|
||||||
configurationRevision = self.rev or self.dirtyRev or null;
|
|
||||||
stateVersion = 5;
|
|
||||||
defaults = {
|
|
||||||
dock = {
|
|
||||||
autohide = true;
|
|
||||||
orientation = "bottom";
|
|
||||||
show-recents = false;
|
|
||||||
tilesize = 48;
|
|
||||||
magnification = false;
|
|
||||||
mineffect = "scale";
|
|
||||||
persistent-apps = [
|
|
||||||
"/System/Applications/Launchpad.app"
|
|
||||||
"/System/Applications/Messages.app"
|
|
||||||
"/System/Applications/Mail.app"
|
|
||||||
"/System/Applications/Calendar.app"
|
|
||||||
"/System/Applications/FaceTime.app"
|
|
||||||
"/System/Applications/System Settings.app"
|
|
||||||
# "/Applications/Firefox.app"
|
|
||||||
"/Applications/Zen.app/"
|
|
||||||
];
|
|
||||||
persistent-others = [
|
|
||||||
"/Users/jfraeys/Downloads"
|
|
||||||
"/Users/jfraeys/Documents"
|
|
||||||
];
|
|
||||||
wvous-br-corner = 14; # 14: Quick Note
|
|
||||||
};
|
|
||||||
# universalaccess = {
|
|
||||||
# reduceMotion = true;
|
|
||||||
# reduceTransparency = true;
|
|
||||||
# };
|
|
||||||
finder = {
|
|
||||||
FXPreferredViewStyle = "Nlsv";
|
|
||||||
};
|
|
||||||
loginwindow.GuestEnabled = false;
|
|
||||||
NSGlobalDomain.AppleICUForce24HourTime = true;
|
|
||||||
};
|
|
||||||
startup = {
|
|
||||||
chime = false;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# Zsh configuration
|
|
||||||
programs.zsh = {
|
|
||||||
enable = true;
|
|
||||||
shellInit = ''
|
|
||||||
export LUA_PATH="$HOME/.luarocks/share/lua/5.4/?.lua;$HOME/.luarocks/share/lua/5.4/?/init.lua;;"
|
|
||||||
export LUA_CPATH="$HOME/.luarocks/lib/lua/5.4/?.so;;"
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
# LuaRocks setup
|
|
||||||
system.activationScripts.luarocksConfig.text = ''
|
|
||||||
mkdir -p "$HOME/.luarocks"
|
|
||||||
echo 'local_by_default = true' > "$HOME/.luarocks/config-5.4.lua"
|
|
||||||
'';
|
|
||||||
|
|
||||||
# Enable Nix daemon and Touch ID
|
|
||||||
# services.nix-daemon.enable = true;
|
|
||||||
security.pam.services.sudo_local.touchIdAuth = true;
|
|
||||||
|
|
||||||
# Home Manager integration
|
|
||||||
home-manager = {
|
|
||||||
useGlobalPkgs = true;
|
|
||||||
useUserPackages = true;
|
|
||||||
users.${username} = import ./home.nix;
|
|
||||||
backupFileExtension = "backup";
|
|
||||||
};
|
|
||||||
|
|
||||||
nixpkgs.hostPlatform = "aarch64-darwin";
|
|
||||||
|
|
||||||
# Nix configuration
|
|
||||||
nix = {
|
|
||||||
# configureBuildUsers = true;
|
|
||||||
# useDaemon = true;
|
|
||||||
settings.experimental-features = [ "nix-command" "flakes" ];
|
|
||||||
extraOptions = ''
|
|
||||||
extra-platforms = x86_64-darwin aarch64-darwin
|
|
||||||
'';
|
|
||||||
|
|
||||||
};
|
|
||||||
};
|
|
||||||
in
|
|
||||||
{
|
|
||||||
darwinConfigurations = {
|
|
||||||
"${hostname}" = nix-darwin.lib.darwinSystem {
|
|
||||||
# system = "aarch64-darwin";
|
|
||||||
modules = [
|
|
||||||
configuration
|
|
||||||
nix-homebrew.darwinModules.nix-homebrew
|
|
||||||
home-manager.darwinModules.home-manager
|
|
||||||
{
|
|
||||||
nix-homebrew = {
|
|
||||||
enable = true;
|
|
||||||
enableRosetta = true; # Enable Rosetta for Apple Silicon
|
|
||||||
user = "${username}";
|
|
||||||
autoMigrate = true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -1,52 +0,0 @@
|
||||||
{ config, pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
# General home configuration
|
|
||||||
home = {
|
|
||||||
username = "jfraeys";
|
|
||||||
homeDirectory = "/Users/jfraeys";
|
|
||||||
stateVersion = "25.05"; # Match your NixOS/Home Manager version.
|
|
||||||
|
|
||||||
# Define packages to install
|
|
||||||
packages = with pkgs; [
|
|
||||||
zsh
|
|
||||||
neovim
|
|
||||||
wezterm
|
|
||||||
starship
|
|
||||||
fzf
|
|
||||||
ripgrep
|
|
||||||
bat
|
|
||||||
lazygit
|
|
||||||
zoxide
|
|
||||||
];
|
|
||||||
|
|
||||||
# Session variables
|
|
||||||
sessionVariables = {
|
|
||||||
PATH = "${pkgs.coreutils}/bin:${pkgs.gnugrep}/bin:/run/current-system/sw/bin:$HOME/.nix-profile/bin";
|
|
||||||
};
|
|
||||||
|
|
||||||
# Session PATH configuration
|
|
||||||
sessionPath = [
|
|
||||||
"/run/current-system/sw/bin"
|
|
||||||
"$HOME/.nix-profile/bin"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
# Enable Home Manager
|
|
||||||
programs = {
|
|
||||||
home-manager.enable = true;
|
|
||||||
|
|
||||||
# Zsh configuration
|
|
||||||
zsh = {
|
|
||||||
enable = true;
|
|
||||||
oh-my-zsh.enable = false;
|
|
||||||
initExtra = ''
|
|
||||||
export PATH=/run/current-system/sw/bin:$HOME/.nix-profile/bin:$PATH
|
|
||||||
if [ -e '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh' ]; then
|
|
||||||
. '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'
|
|
||||||
fi
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
{
|
|
||||||
username = "jfraeys";
|
|
||||||
hostname = "Jays-Mac-Studio";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit 9759205e22863960be91cfe626e3141a240df198
|
Subproject commit d1de57be726001177ec541b1e4414d393ac41c1c
|
||||||
|
|
@ -1,41 +0,0 @@
|
||||||
# Function to change the tmux window background color based on SSH environment
|
|
||||||
function windowc() {
|
|
||||||
local profile_name="$1"
|
|
||||||
|
|
||||||
case "$profile_name" in
|
|
||||||
services*|service*)
|
|
||||||
tmux set-window-option -g window-status-bg colour1 # Change to the desired color
|
|
||||||
;;
|
|
||||||
production*|prod*|web*)
|
|
||||||
tmux set-window-option -g window-status-bg "rgb:00/7F/7F" # Change to the desired color
|
|
||||||
;;
|
|
||||||
staging*|stage*)
|
|
||||||
tmux set-window-option -g window-status-bg colour3 # Change to the desired color
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
tmux set-window-option -g window-status-bg default # Use default color for any other server
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to automatically create a new tmux window when using ssh
|
|
||||||
function colourssh() {
|
|
||||||
# Run the original ssh command, capturing its output
|
|
||||||
ssh_output=$(command ssh "$@")
|
|
||||||
|
|
||||||
# Check if the ssh command was successful
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
# Extract the hostname from the ssh command using pcregrep
|
|
||||||
host=$(echo "$ssh_output" | pcregrep -o1 'ssh\s+([^\@]+)')
|
|
||||||
|
|
||||||
# Change tmux window background color based on SSH environment
|
|
||||||
windowc "$host"
|
|
||||||
|
|
||||||
# Create a new tmux window
|
|
||||||
tmux new-window
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Alias to use the modified ssh function
|
|
||||||
alias ssh="colourssh"
|
|
||||||
|
|
||||||
1
setup.sh
1
setup.sh
|
|
@ -24,6 +24,7 @@ useronly_macos=(
|
||||||
zsh
|
zsh
|
||||||
aerospace
|
aerospace
|
||||||
# sketchybar
|
# sketchybar
|
||||||
|
colima
|
||||||
)
|
)
|
||||||
|
|
||||||
#Folders that should, or only need to be installed for a local user on Linux
|
#Folders that should, or only need to be installed for a local user on Linux
|
||||||
|
|
|
||||||
|
|
@ -1,109 +0,0 @@
|
||||||
# ---------------------------
|
|
||||||
# WINDOW FOCUS
|
|
||||||
# ---------------------------
|
|
||||||
# Change window focus within the current space
|
|
||||||
shift + cmd - j : yabai -m window --focus south
|
|
||||||
shift + cmd - k : yabai -m window --focus north
|
|
||||||
shift + cmd - h : yabai -m window --focus west
|
|
||||||
shift + cmd - l : yabai -m window --focus east
|
|
||||||
|
|
||||||
# Change focus between external displays (left and right)
|
|
||||||
cmd - h : yabai -m display --focus west
|
|
||||||
cmd - l : yabai -m display --focus east
|
|
||||||
|
|
||||||
# ---------------------------
|
|
||||||
# WINDOW RESIZE
|
|
||||||
# ---------------------------
|
|
||||||
# Resize windows in one direction (left, right, up, down)
|
|
||||||
lctrl + alt - h : yabai -m window --resize left:-50:0
|
|
||||||
lctrl + alt - l : yabai -m window --resize right:50:0
|
|
||||||
lctrl + alt - j : yabai -m window --resize bottom:0:50
|
|
||||||
lctrl + alt - k : yabai -m window --resize top:0:-50
|
|
||||||
|
|
||||||
# Equalize the size of all windows in the current space
|
|
||||||
lctrl + alt - e : yabai -m space --balance
|
|
||||||
|
|
||||||
# ---------------------------
|
|
||||||
# SPACE MANAGEMENT
|
|
||||||
# ---------------------------
|
|
||||||
# Switch between spaces
|
|
||||||
shift + cmd - 1 : yabai -m space --focus 1
|
|
||||||
shift + cmd - 2 : yabai -m space --focus 2
|
|
||||||
shift + cmd - 3 : yabai -m space --focus 3
|
|
||||||
shift + cmd - 4 : yabai -m space --focus 4
|
|
||||||
shift + cmd - 5 : yabai -m space --focus 5
|
|
||||||
shift + cmd - 6 : yabai -m space --focus 6
|
|
||||||
shift + cmd - 7 : yabai -m space --focus 7
|
|
||||||
|
|
||||||
# Move the current window to a specific space
|
|
||||||
shift + alt - 1 : yabai -m window --space 1
|
|
||||||
shift + alt - 2 : yabai -m window --space 2
|
|
||||||
shift + alt - 3 : yabai -m window --space 3
|
|
||||||
shift + alt - 4 : yabai -m window --space 4
|
|
||||||
shift + alt - 5 : yabai -m window --space 5
|
|
||||||
shift + alt - 6 : yabai -m window --space 6
|
|
||||||
shift + alt - 7 : yabai -m window --space 7
|
|
||||||
|
|
||||||
# Move window to previous and next space
|
|
||||||
shift + alt - p : yabai -m window --space prev
|
|
||||||
shift + alt - n : yabai -m window --space next
|
|
||||||
|
|
||||||
# ---------------------------
|
|
||||||
# WINDOW MOVEMENT AND SWAP
|
|
||||||
# ---------------------------
|
|
||||||
# Move window within the current space
|
|
||||||
ctrl + alt - h : yabai -m window --warp west
|
|
||||||
ctrl + alt - l : yabai -m window --warp east
|
|
||||||
ctrl + alt - j : yabai -m window --warp south
|
|
||||||
ctrl + alt - k : yabai -m window --warp north
|
|
||||||
|
|
||||||
# Swap windows
|
|
||||||
shift + alt - j : yabai -m window --swap south
|
|
||||||
shift + alt - k : yabai -m window --swap north
|
|
||||||
shift + alt - h : yabai -m window --swap west
|
|
||||||
shift + alt - l : yabai -m window --swap east
|
|
||||||
|
|
||||||
# ---------------------------
|
|
||||||
# WINDOW AND SPACE MODIFICATIONS
|
|
||||||
# ---------------------------
|
|
||||||
# Toggle window float and maximize (zoom fullscreen)
|
|
||||||
shift + alt - t : yabai -m window --toggle float --grid 4:4:1:1:2:2
|
|
||||||
shift + alt - m : yabai -m window --toggle zoom-fullscreen
|
|
||||||
|
|
||||||
# Toggle window sticky (always visible across all spaces)
|
|
||||||
shift + alt - a : yabai -m window --toggle sticky
|
|
||||||
|
|
||||||
# Rotate space layout clockwise and flip along axes
|
|
||||||
shift + alt - r : yabai -m space --rotate 270
|
|
||||||
shift + alt - y : yabai -m space --mirror y-axis
|
|
||||||
shift + alt - x : yabai -m space --mirror x-axis
|
|
||||||
|
|
||||||
# Move window between displays
|
|
||||||
shift + alt - s : yabai -m window --display west; yabai -m display --focus west
|
|
||||||
shift + alt - g : yabai -m window --display east; yabai -m display --focus east
|
|
||||||
|
|
||||||
# ---------------------------
|
|
||||||
# APPLICATION LAUNCHER
|
|
||||||
# ---------------------------
|
|
||||||
alt - t : open -a /Applications/WezTerm.app
|
|
||||||
alt - f : open -a /Applications/Firefox.app
|
|
||||||
alt - s : open -a /Applications/Safari.app
|
|
||||||
alt - v : open -a /Applications/VSCodium.app
|
|
||||||
alt - m : open -a /System/Applications/Mail.app
|
|
||||||
alt - w : open -a /Applications/Bitwarden.app
|
|
||||||
alt - i : open -a /System/Applications/Messages.app
|
|
||||||
|
|
||||||
# ---------------------------
|
|
||||||
# SCREEN CAPTURE
|
|
||||||
# ---------------------------
|
|
||||||
cmd + shift - 3 : screencapture -x ~/Desktop/screenshot_$(date +%Y-%m-%d_%H-%M-%S).png
|
|
||||||
cmd + shift - 4 : screencapture -i ~/Desktop/screenshot_$(date +%Y-%m-%d_%H-%M-%S).png
|
|
||||||
cmd + shift - 5 : screencapture -w ~/Desktop/screenshot_$(date +%Y-%m-%d_%H-%M-%S).png
|
|
||||||
|
|
||||||
# ---------------------------
|
|
||||||
# YABAI SERVICE CONTROL
|
|
||||||
# ---------------------------
|
|
||||||
ctrl + alt - q : yabai --stop-service
|
|
||||||
ctrl + alt - s : yabai --start-service
|
|
||||||
ctrl + alt - r : yabai --restart-service
|
|
||||||
|
|
||||||
|
|
@ -3,31 +3,31 @@
|
||||||
|
|
||||||
add_newline = false
|
add_newline = false
|
||||||
palette = "solarized_light"
|
palette = "solarized_light"
|
||||||
# palette = "monokai_pro"
|
|
||||||
command_timeout = 5000
|
command_timeout = 5000
|
||||||
|
|
||||||
# Customize your prompt to ensure everything is on a single line
|
# Customize your prompt to ensure everything is on a single line
|
||||||
format = """\
|
format = """\
|
||||||
$character\
|
${custom.context}\
|
||||||
$directory\
|
$character\
|
||||||
$direnv\
|
$directory\
|
||||||
$docker_context\
|
$direnv\
|
||||||
$conda\
|
$docker_context\
|
||||||
$golang\
|
$conda\
|
||||||
$lua\
|
$golang\
|
||||||
$rust\
|
$lua\
|
||||||
$c\
|
$rust\
|
||||||
$python\
|
$c\
|
||||||
$package\
|
$python\
|
||||||
$line_break\
|
$package\
|
||||||
$jobs\
|
$line_break\
|
||||||
"""
|
$jobs\
|
||||||
|
"""
|
||||||
|
|
||||||
right_format = """\
|
right_format = """\
|
||||||
$git_branch\
|
$cmd_duration\
|
||||||
$git_status\
|
$git_branch\
|
||||||
$git_metrics\
|
$git_status\
|
||||||
$cmd_duration\
|
$git_metrics\
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Git branch configuration
|
# Git branch configuration
|
||||||
|
|
@ -59,6 +59,8 @@ format = "[$path ]($style)[$read_only]($read_only_style)"
|
||||||
style = "bright-cyan"
|
style = "bright-cyan"
|
||||||
truncation_length = 3
|
truncation_length = 3
|
||||||
truncation_symbol = "…/"
|
truncation_symbol = "…/"
|
||||||
|
use_logical_path = true # speeds up when working with symlinks (optional)
|
||||||
|
fish_style_pwd_dir_length = 1 # makes truncation lighter and faster
|
||||||
|
|
||||||
[line_break]
|
[line_break]
|
||||||
disabled = true
|
disabled = true
|
||||||
|
|
@ -95,6 +97,7 @@ detect_files = ["Makefile"]
|
||||||
[conda]
|
[conda]
|
||||||
format = "[$environment ]($style)"
|
format = "[$environment ]($style)"
|
||||||
style = "dimmed green"
|
style = "dimmed green"
|
||||||
|
disabled = false
|
||||||
|
|
||||||
# Python
|
# Python
|
||||||
[python]
|
[python]
|
||||||
|
|
@ -125,10 +128,25 @@ style = "208 bold"
|
||||||
|
|
||||||
# Directory substitutions
|
# Directory substitutions
|
||||||
[directory.substitutions]
|
[directory.substitutions]
|
||||||
"Documents/projects" = "proj"
|
"~/Documents/dev" = "dev"
|
||||||
".config" = "config"
|
"~/.config" = "config"
|
||||||
".dotfiles" = "dot"
|
"~/.dotfiles" = "dot"
|
||||||
".local" = "local"
|
"~/.local" = "local"
|
||||||
|
"~/Library/CloudStorage/GoogleDrive-*" = "GDrive"
|
||||||
|
|
||||||
|
# ── Context-Aware Session Tag ──
|
||||||
|
[custom.context]
|
||||||
|
command = '''
|
||||||
|
case "$(uname -r)" in
|
||||||
|
*microsoft*) echo "WSL" ;;
|
||||||
|
esac
|
||||||
|
[ -n "$CODESPACES" ] && echo "Codespaces"
|
||||||
|
[ -n "$SSH_CONNECTION" ] && echo "Remote"
|
||||||
|
'''
|
||||||
|
when = 'true'
|
||||||
|
shell = ['sh']
|
||||||
|
style = 'bold yellow'
|
||||||
|
format = '[$output]($style)'
|
||||||
|
|
||||||
# Monokai Pro palette
|
# Monokai Pro palette
|
||||||
[palettes.monokai_pro]
|
[palettes.monokai_pro]
|
||||||
|
|
|
||||||
1
wezterm/.config/wezterm/plugins/sessionizer
Submodule
1
wezterm/.config/wezterm/plugins/sessionizer
Submodule
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit c4379654bc179c72c57693b12d16a95d21c1651d
|
||||||
24
wezterm/.config/wezterm/profiles/dev.lua
Normal file
24
wezterm/.config/wezterm/profiles/dev.lua
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
local wezterm = require("wezterm")
|
||||||
|
|
||||||
|
return {
|
||||||
|
name = "dev",
|
||||||
|
spawn = function()
|
||||||
|
local mux = wezterm.mux
|
||||||
|
local cwd = "/home/YOU/dev" -- customize per profile
|
||||||
|
|
||||||
|
local tab, pane, window = mux.spawn_window({
|
||||||
|
workspace = "dev",
|
||||||
|
cwd = cwd,
|
||||||
|
args = { "nvim" },
|
||||||
|
})
|
||||||
|
|
||||||
|
local shell_pane = pane:split({
|
||||||
|
direction = "Right",
|
||||||
|
size = 0.5,
|
||||||
|
cwd = cwd,
|
||||||
|
args = { "zsh" },
|
||||||
|
})
|
||||||
|
|
||||||
|
return window:gui_window()
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
Subproject commit 417aec1d74cd463c1a00324e3a52cd27d2ced79d
|
|
||||||
|
|
@ -1,101 +1,94 @@
|
||||||
local wezterm = require("wezterm")
|
local wezterm = require("wezterm")
|
||||||
local os = require("os")
|
|
||||||
|
|
||||||
local M = {}
|
local M = {}
|
||||||
|
|
||||||
-- Determine the appearance (light or dark)
|
local starship_script_path = os.getenv("HOME") .. "/.local/bin/scripts/update_starship_theme.sh"
|
||||||
local function get_appearance()
|
local border_script_path = os.getenv("HOME") .. "/.local/bin/scripts/update_border_theme.sh"
|
||||||
if wezterm.gui then
|
|
||||||
return wezterm.gui.get_appearance()
|
|
||||||
end
|
|
||||||
return os.getenv("DEFAULT_APPEARANCE") or "Dark" -- Default fallback
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Set the color scheme and tab bar colors based on appearance
|
|
||||||
local function scheme_for_appearance(appearance, schemes)
|
|
||||||
return appearance:find("Dark") and schemes.dark or schemes.light
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Color schemes for light and dark appearances
|
|
||||||
local color_schemes = {
|
local color_schemes = {
|
||||||
dark = "Monokai (dark) (terminal.sexy)",
|
|
||||||
light = "Solarized (light) (terminal.sexy)",
|
|
||||||
}
|
|
||||||
|
|
||||||
-- Custom tab bar colors for light and dark themes
|
|
||||||
local tab_bar_colors = {
|
|
||||||
dark = {
|
dark = {
|
||||||
|
name = "Monokai (dark) (terminal.sexy)",
|
||||||
|
ss_palette = "monokai_pro",
|
||||||
|
tab_bar = {
|
||||||
active_tab = { bg_color = "#1c1f24", fg_color = "#f8f8f2" },
|
active_tab = { bg_color = "#1c1f24", fg_color = "#f8f8f2" },
|
||||||
inactive_tab = { bg_color = "#3e4451", fg_color = "#a0a0a0" },
|
inactive_tab = { bg_color = "#3e4451", fg_color = "#a0a0a0" },
|
||||||
inactive_tab_hover = { bg_color = "#4e545e", fg_color = "#c0c0c0" },
|
inactive_tab_hover = { bg_color = "#4e545e", fg_color = "#c0c0c0" },
|
||||||
new_tab = { bg_color = "#1c1f24", fg_color = "#f8f8f2" },
|
new_tab = { bg_color = "#1c1f24", fg_color = "#f8f8f2" },
|
||||||
new_tab_hover = { bg_color = "#4e545e", fg_color = "#c0c0c0" },
|
new_tab_hover = { bg_color = "#4e545e", fg_color = "#c0c0c0" },
|
||||||
},
|
},
|
||||||
|
},
|
||||||
light = {
|
light = {
|
||||||
|
name = "Solarized (light) (terminal.sexy)",
|
||||||
|
ss_palette = "solarized_light",
|
||||||
|
tab_bar = {
|
||||||
active_tab = { bg_color = "#eee8d5", fg_color = "#073642" },
|
active_tab = { bg_color = "#eee8d5", fg_color = "#073642" },
|
||||||
inactive_tab = { bg_color = "#93a1a1", fg_color = "#586e75" },
|
inactive_tab = { bg_color = "#93a1a1", fg_color = "#586e75" },
|
||||||
inactive_tab_hover = { bg_color = "#839496", fg_color = "#586e75" },
|
inactive_tab_hover = { bg_color = "#839496", fg_color = "#586e75" },
|
||||||
new_tab = { bg_color = "#eee8d5", fg_color = "#073642" },
|
new_tab = { bg_color = "#eee8d5", fg_color = "#073642" },
|
||||||
new_tab_hover = { bg_color = "#839496", fg_color = "#586e75" },
|
new_tab_hover = { bg_color = "#839496", fg_color = "#586e75" },
|
||||||
},
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
-- Check if a command is available (more reliable implementation)
|
--- Get the current appearance of the system or use a default value.
|
||||||
local function is_command_available(cmd)
|
--- Falls back to "dark" if neither WezTerm GUI appearance nor environment variable is available.
|
||||||
wezterm.log_info(os.execute("/usr/bin/env bash -c 'command -v " .. cmd .. "'"))
|
--- @return string Either "dark" or "light"
|
||||||
wezterm.log_info("WezTerm PATH: " .. os.getenv("PATH"))
|
local function get_appearance()
|
||||||
return os.execute("type " .. cmd .. " >/dev/null 2>&1") == 0
|
return ((wezterm.gui and wezterm.gui.get_appearance()) or os.getenv("DEFAULT_APPEARANCE") or "dark"):lower()
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Function to update the Starship palette in the starship.toml file
|
--- Check if a file is executable.
|
||||||
local function update_starship_palette(palette_name)
|
--- @param file_path string Absolute path to the file to check
|
||||||
if not is_command_available("starship") then
|
--- @return boolean True if the file is executable, false otherwise
|
||||||
wezterm.log_info("Starship is not installed. Skipping palette update.")
|
local function is_executable(file_path)
|
||||||
|
local ok = wezterm.run_child_process({ "test", "-x", file_path })
|
||||||
|
return ok == true
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Run a Starship theme updater script with the given palette.
|
||||||
|
--- Logs success or failure accordingly.
|
||||||
|
--- @param script_path string Absolute path to the Starship updater script
|
||||||
|
--- @param palette string Name of the color palette to apply
|
||||||
|
local function update_starship_theme(script_path, palette)
|
||||||
|
local script_name = script_path:match("^.+/(.+)$") or script_path
|
||||||
|
if not is_executable(script_path) then
|
||||||
|
wezterm.log_error("Script " .. script_name .. " is not executable or does not exist")
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local starship_config_path = os.getenv("XDG_CONFIG_HOME") and os.getenv("XDG_CONFIG_HOME") .. "/starship.toml"
|
local ok = wezterm.run_child_process({ script_path, palette })
|
||||||
or os.getenv("HOME") .. "/.config/starship.toml"
|
if not ok then
|
||||||
|
wezterm.log_error("Failed to run " .. script_name)
|
||||||
local file = io.open(starship_config_path, "r")
|
|
||||||
if not file then
|
|
||||||
wezterm.log_error("starship.toml file not found at: " .. starship_config_path)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
file:close()
|
|
||||||
|
|
||||||
-- Determine sed command
|
|
||||||
local sed_inplace = wezterm.target_triple and wezterm.target_triple:find("darwin") and "sed -i ''" or "sed -i"
|
|
||||||
local replace_command =
|
|
||||||
string.format("%s 's/palette = .*/palette = \"%s\"/' %s", sed_inplace, palette_name, starship_config_path)
|
|
||||||
|
|
||||||
wezterm.log_info("Starship config path: " .. starship_config_path)
|
|
||||||
wezterm.log_info("Generated reaplce command: " .. replace_command)
|
|
||||||
|
|
||||||
-- Use `sd` if available for consistency
|
|
||||||
if is_command_available("sd") then
|
|
||||||
replace_command = string.format("sd 'palette = .+' 'palette = \"%s\"' %s", palette_name, starship_config_path)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Execute the replace command
|
|
||||||
local result = os.execute(replace_command)
|
|
||||||
if result ~= 0 then
|
|
||||||
wezterm.log_error("Failed to update Starship palette in " .. starship_config_path)
|
|
||||||
else
|
|
||||||
wezterm.log_info("Successfully updated Starship palette to: " .. palette_name)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Apply the configuration and update Starship palette
|
--- Run a Border theme updater script with the given palette.
|
||||||
|
--- @param script_path string Absolute path to the Border updater script
|
||||||
|
--- @param mode string Name of the color palette to apply
|
||||||
|
local function update_border_theme(script_path, mode)
|
||||||
|
local script_name = script_path:match("^.+/(.+)$") or script_path
|
||||||
|
if not is_executable(script_path) then
|
||||||
|
wezterm.log_error("Script " .. script_name .. " is not executable or does not exist")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local ok = wezterm.run_child_process({ script_path, mode })
|
||||||
|
if not ok then
|
||||||
|
wezterm.log_error("Failed to run " .. script_name)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Apply the color scheme to the WezTerm configuration.
|
||||||
|
--- @param config table The WezTerm configuration table to modify
|
||||||
function M.apply_to_config(config)
|
function M.apply_to_config(config)
|
||||||
local appearance = get_appearance()
|
local mode = get_appearance():find("dark") and "dark" or "light"
|
||||||
config.color_scheme = scheme_for_appearance(appearance, color_schemes)
|
local theme = color_schemes[mode]
|
||||||
config.colors = { tab_bar = scheme_for_appearance(appearance, tab_bar_colors) }
|
|
||||||
|
|
||||||
-- Update the Starship palette based on appearance
|
config.color_scheme = theme.name
|
||||||
local palette_name = appearance:find("Dark") and "monokai_pro" or "solarized_light"
|
config.colors = { tab_bar = theme.tab_bar }
|
||||||
wezterm.log_info("Starship palette set to: " .. palette_name)
|
|
||||||
update_starship_palette(palette_name)
|
update_starship_theme(starship_script_path, theme.ss_palette)
|
||||||
|
update_border_theme(border_script_path, mode)
|
||||||
end
|
end
|
||||||
|
|
||||||
return M
|
return M
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,8 @@ local act = wezterm.action
|
||||||
|
|
||||||
-- Pull custom modules
|
-- Pull custom modules
|
||||||
local theme = require("theme-switcher")
|
local theme = require("theme-switcher")
|
||||||
local sessionizer = require("sessionizer.plugin.init")
|
|
||||||
-- local gpu_adapters = require("gpu-adapter")
|
-- local gpu_adapters = require("gpu-adapter")
|
||||||
|
local sessionizer = require("plugins.sessionizer")
|
||||||
local workspace = require("workspace")
|
local workspace = require("workspace")
|
||||||
|
|
||||||
local config = {}
|
local config = {}
|
||||||
|
|
@ -21,14 +21,14 @@ end
|
||||||
if wezterm.target_triple == "x86_64-pc-windows-msvc" then
|
if wezterm.target_triple == "x86_64-pc-windows-msvc" then
|
||||||
config.default_prog = { "wsl.exe", "~", "-d", "Ubuntu-20.04" }
|
config.default_prog = { "wsl.exe", "~", "-d", "Ubuntu-20.04" }
|
||||||
elseif wezterm.target_triple == "x86_64-apple-darwin" or wezterm.target_triple == "aarch64-apple-darwin" then
|
elseif wezterm.target_triple == "x86_64-apple-darwin" or wezterm.target_triple == "aarch64-apple-darwin" then
|
||||||
config.default_prog = { "/bin/zsh" }
|
config.default_prog = { "/bin/zsh", "-l" }
|
||||||
config.font = wezterm.font_with_fallback({
|
config.font = wezterm.font_with_fallback({
|
||||||
{ family = "Fira Code", scale = 1.0 },
|
{ family = "Fira Code", scale = 1.0 },
|
||||||
{ family = "MesloLGS NF", scale = 1.0 },
|
{ family = "MesloLGS NF", scale = 1.0 },
|
||||||
{ family = "Menlo", scale = 1.0 },
|
{ family = "Menlo", scale = 1.0 },
|
||||||
})
|
})
|
||||||
elseif wezterm.target_triple == "x86_64-unknown-linux-gnu" then
|
elseif wezterm.target_triple == "x86_64-unknown-linux-gnu" then
|
||||||
config.default_prog = { "/bin/bash" }
|
config.default_prog = { "/bin/bash", "-l" }
|
||||||
config.font = wezterm.font_with_fallback({
|
config.font = wezterm.font_with_fallback({
|
||||||
{ family = "Fira Code", scale = 1.0 },
|
{ family = "Fira Code", scale = 1.0 },
|
||||||
{ family = "MesloLGS NF", scale = 1.0 },
|
{ family = "MesloLGS NF", scale = 1.0 },
|
||||||
|
|
@ -41,7 +41,6 @@ config.use_ime = true
|
||||||
config.use_dead_keys = false
|
config.use_dead_keys = false
|
||||||
config.front_end = "WebGpu"
|
config.front_end = "WebGpu"
|
||||||
config.term = "xterm-256color"
|
config.term = "xterm-256color"
|
||||||
theme.apply_to_config(config)
|
|
||||||
config.line_height = 1.1
|
config.line_height = 1.1
|
||||||
|
|
||||||
config.animation_fps = 240
|
config.animation_fps = 240
|
||||||
|
|
@ -49,6 +48,9 @@ config.max_fps = 240
|
||||||
config.webgpu_power_preference = "HighPerformance"
|
config.webgpu_power_preference = "HighPerformance"
|
||||||
-- config.webgpu_preferred_adapter = gpu_adapters:pick_best()
|
-- config.webgpu_preferred_adapter = gpu_adapters:pick_best()
|
||||||
|
|
||||||
|
-- Change color scheme
|
||||||
|
theme.apply_to_config(config)
|
||||||
|
|
||||||
config.window_padding = {
|
config.window_padding = {
|
||||||
left = 5,
|
left = 5,
|
||||||
right = 10,
|
right = 10,
|
||||||
|
|
@ -84,7 +86,7 @@ if config.enable_tab_bar then
|
||||||
end
|
end
|
||||||
|
|
||||||
config.switch_to_last_active_tab_when_closing_tab = true
|
config.switch_to_last_active_tab_when_closing_tab = true
|
||||||
config.window_close_confirmation = "NeverPrompt"
|
config.window_close_confirmation = "AlwaysPrompt"
|
||||||
|
|
||||||
config.audible_bell = "Disabled"
|
config.audible_bell = "Disabled"
|
||||||
|
|
||||||
|
|
@ -270,6 +272,12 @@ local keys = {
|
||||||
end),
|
end),
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
key = "w",
|
||||||
|
mods = "CMD",
|
||||||
|
action = wezterm.action.CloseCurrentTab({ confirm = true }),
|
||||||
|
},
|
||||||
|
|
||||||
--Switch to monitoring workspace
|
--Switch to monitoring workspace
|
||||||
{
|
{
|
||||||
key = ".",
|
key = ".",
|
||||||
|
|
@ -484,15 +492,17 @@ local key_tables = {
|
||||||
config.keys = keys
|
config.keys = keys
|
||||||
config.key_tables = key_tables
|
config.key_tables = key_tables
|
||||||
|
|
||||||
local projects = {
|
local user_config = {
|
||||||
wezterm.home_dir .. "/.dotfiles",
|
projects = {
|
||||||
wezterm.home_dir .. "/Documents",
|
{ path = wezterm.home_dir .. "/.dotfiles" },
|
||||||
wezterm.home_dir .. "/.local/bin",
|
{ path = wezterm.home_dir .. "/Documents" },
|
||||||
wezterm.home_dir .. "/Google Drive/My Drive",
|
},
|
||||||
|
key = "f",
|
||||||
|
mods = "LEADER",
|
||||||
|
add_to_launch_menu = false,
|
||||||
}
|
}
|
||||||
|
|
||||||
sessionizer.set_projects(projects)
|
sessionizer.apply_to_config(config, user_config)
|
||||||
sessionizer.configure(config)
|
|
||||||
|
|
||||||
-- wezterm.on("window-config-reload", function()
|
-- wezterm.on("window-config-reload", function()
|
||||||
-- -- Set up the meeting notifier to check every 60 seconds
|
-- -- Set up the meeting notifier to check every 60 seconds
|
||||||
|
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
||||||
#!/usr/bin/env sh
|
|
||||||
|
|
||||||
# ---------------------------
|
|
||||||
# GLOBAL SETTINGS
|
|
||||||
# ---------------------------
|
|
||||||
yabai -m config mouse_follows_focus off
|
|
||||||
yabai -m config focus_follows_mouse off
|
|
||||||
yabai -m config window_placement second_child
|
|
||||||
yabai -m config window_opacity on # Opacity settings will now be respected
|
|
||||||
yabai -m config window_opacity_duration 0.2
|
|
||||||
yabai -m config window_shadow off
|
|
||||||
|
|
||||||
# Uncomment the following line to disable window borders
|
|
||||||
# yabai -m config window_border off
|
|
||||||
# yabai -m config window_border_width 2
|
|
||||||
|
|
||||||
# ---------------------------
|
|
||||||
# WINDOW MANAGEMENT
|
|
||||||
# ---------------------------
|
|
||||||
yabai -m config active_window_opacity 1.0 # Full opacity for active window
|
|
||||||
yabai -m config normal_window_opacity 0.75 # Reduced opacity for inactive windows
|
|
||||||
yabai -m config split_ratio 0.65 # Adjust split ratio for bsp layout
|
|
||||||
yabai -m config auto_balance on # Auto-balance window sizes
|
|
||||||
|
|
||||||
# ---------------------------
|
|
||||||
# MOUSE SETTINGS
|
|
||||||
# ---------------------------
|
|
||||||
yabai -m config mouse_modifier fn
|
|
||||||
yabai -m config mouse_action1 move
|
|
||||||
yabai -m config mouse_action2 resize
|
|
||||||
|
|
||||||
# ---------------------------
|
|
||||||
# SPACE SETTINGS
|
|
||||||
# ---------------------------
|
|
||||||
yabai -m config layout bsp
|
|
||||||
yabai -m config top_padding 5 # Consistent padding for aesthetics
|
|
||||||
yabai -m config bottom_padding 50
|
|
||||||
yabai -m config left_padding 10
|
|
||||||
yabai -m config right_padding 10
|
|
||||||
yabai -m config window_gap 5 # Unified window gap for consistency
|
|
||||||
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
set synctex true
|
|
||||||
# set recolor true
|
|
||||||
|
|
||||||
66
zsh/.config/zsh/aliases.zsh
Normal file
66
zsh/.config/zsh/aliases.zsh
Normal file
|
|
@ -0,0 +1,66 @@
|
||||||
|
# General aliases
|
||||||
|
alias grep="grep --color=auto"
|
||||||
|
alias ..="cd .."
|
||||||
|
alias ...="cd ../.."
|
||||||
|
alias ....="cd ../../.."
|
||||||
|
alias .....="cd ../../../.."
|
||||||
|
|
||||||
|
# Use Neovim if available
|
||||||
|
if command -v nvim >/dev/null; then
|
||||||
|
alias v='nvim'
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Enhanced ls with eza
|
||||||
|
if command -v eza >/dev/null; then
|
||||||
|
alias ls='eza --group-directories-first --color=auto'
|
||||||
|
alias la='eza -a --group-directories-first --color=auto'
|
||||||
|
alias ll='eza -lh --group-directories-first --color=auto'
|
||||||
|
alias lla='eza -la --group-directories-first --color=auto'
|
||||||
|
alias l='eza --classify'
|
||||||
|
alias lt='eza -lt modified --sort newest'
|
||||||
|
alias lS='eza -lS --group-directories-first --color=auto'
|
||||||
|
alias tree='eza --tree --level=5'
|
||||||
|
alias lg='eza --git'
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Bat for pretty `cat` and help
|
||||||
|
if command -v bat >/dev/null; then
|
||||||
|
# Define a function instead of aliasing inside same unit
|
||||||
|
function cat() {
|
||||||
|
command bat --paging=never "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
function bathelp() {
|
||||||
|
bat --plain --language=help
|
||||||
|
}
|
||||||
|
|
||||||
|
function help() {
|
||||||
|
"$@" --help 2>&1 | bathelp
|
||||||
|
}
|
||||||
|
|
||||||
|
# Global aliases for help text
|
||||||
|
alias -g ':h'='-h 2>&1 | bat --language=help --style=plain'
|
||||||
|
alias -g ':help'='--help 2>&1 | bat --language=help --style=plain'
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Use trash instead of rm on non-Windows systems
|
||||||
|
if [[ "$(uname -s)" != MINGW* && "$(uname -s)" != CYGWIN* ]]; then
|
||||||
|
alias rm='trash'
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Dev tools
|
||||||
|
alias lzd='lazydocker'
|
||||||
|
alias v='nvim' # This can be overridden in check_aliases if nvim doesn't exist
|
||||||
|
|
||||||
|
# Git aliases
|
||||||
|
alias gs='git status'
|
||||||
|
alias gc='git commit'
|
||||||
|
alias gcm='git commit -m'
|
||||||
|
alias gco='git checkout'
|
||||||
|
alias gb='git branch'
|
||||||
|
alias gu='git pull'
|
||||||
|
alias gp='git push'
|
||||||
|
alias gl='git log --oneline --graph --decorate'
|
||||||
|
alias gi='git init'
|
||||||
|
alias gcl='git clone'
|
||||||
|
|
||||||
22
zsh/.config/zsh/completion.zsh
Normal file
22
zsh/.config/zsh/completion.zsh
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
# Homebrew setup and completions
|
||||||
|
if command -v brew &>/dev/null; then
|
||||||
|
export HOMEBREW_PREFIX="$(brew --prefix)"
|
||||||
|
eval "$("${HOMEBREW_PREFIX}/bin/brew" shellenv)"
|
||||||
|
|
||||||
|
# Add site-functions to FPATH for completions
|
||||||
|
FPATH="${HOMEBREW_PREFIX}/share/zsh/site-functions:${FPATH}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# zcompdump cache
|
||||||
|
mkdir -p "$HOME/.zsh/cache"
|
||||||
|
ZSH_COMPDUMP="${ZDOTDIR:-$HOME}/.zcompdump"
|
||||||
|
zstyle ':completion::complete:*' use-cache on
|
||||||
|
zstyle ':completion::complete:*' cache-path "$HOME/.zsh/cache"
|
||||||
|
|
||||||
|
# Load compinit safely
|
||||||
|
if [[ -z "$_compinit_done" ]]; then
|
||||||
|
autoload -Uz compinit
|
||||||
|
compinit -C -d "$ZSH_COMPDUMP"
|
||||||
|
_compinit_done=1
|
||||||
|
fi
|
||||||
|
|
||||||
32
zsh/.config/zsh/external.zsh
Normal file
32
zsh/.config/zsh/external.zsh
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
# Starship prompt
|
||||||
|
export STARSHIP_CONFIG="${XDG_CONFIG_HOME:-$HOME/.config}/starship.toml"
|
||||||
|
eval "$(starship init zsh)"
|
||||||
|
|
||||||
|
# zoxide init
|
||||||
|
if command -v eza &>/dev/null; then
|
||||||
|
export _ZO_FZF_OPTS="--preview='eza -a --color=always {} | head -30' --preview-window=down:30%"
|
||||||
|
else
|
||||||
|
export _ZO_FZF_OPTS="--preview='ls -la {} | head -30' --preview-window=down:30%"
|
||||||
|
fi
|
||||||
|
eval "$(zoxide init --cmd cd zsh)"
|
||||||
|
|
||||||
|
# pyenv
|
||||||
|
if command -v pyenv 1>/dev/null 2>&1; then
|
||||||
|
export PYENV_ROOT="$HOME/.pyenv"
|
||||||
|
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
|
||||||
|
eval "$(pyenv init -)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# direnv
|
||||||
|
command -v direnv &>/dev/null && eval "$(direnv hook zsh)"
|
||||||
|
|
||||||
|
# conda (OFFICIAL – preferred over manual conda.sh sourcing)
|
||||||
|
if [ -f "/opt/homebrew/Caskroom/miniforge/base/bin/conda" ]; then
|
||||||
|
eval "$(/opt/homebrew/Caskroom/miniforge/base/bin/conda shell.zsh hook)"
|
||||||
|
|
||||||
|
# Manually assign the conda completion function to mamba
|
||||||
|
if type mamba &>/dev/null && type _conda &>/dev/null; then
|
||||||
|
compdef _conda mamba
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
40
zsh/.config/zsh/plugins.zsh
Normal file
40
zsh/.config/zsh/plugins.zsh
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
# ~/.config/zsh/plugins.zsh
|
||||||
|
|
||||||
|
# Zinit setup
|
||||||
|
ZINIT_HOME="${XDG_DATA_HOME:-${HOME}/.local/share}/zinit/zinit.git"
|
||||||
|
[[ ! -d "$ZINIT_HOME" ]] && git clone https://github.com/zdharma-continuum/zinit.git "$ZINIT_HOME"
|
||||||
|
source "${ZINIT_HOME}/zinit.zsh"
|
||||||
|
|
||||||
|
# Core plugins
|
||||||
|
zinit light zsh-users/zsh-completions
|
||||||
|
|
||||||
|
# Ollama CLI completion
|
||||||
|
zinit ice as"completion"
|
||||||
|
zinit snippet https://raw.githubusercontent.com/Katrovsky/zsh-ollama-completion/main/_ollama
|
||||||
|
|
||||||
|
# Syntax highlighting
|
||||||
|
zinit ice wait lucid atinit"ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern)"
|
||||||
|
zinit load zsh-users/zsh-syntax-highlighting
|
||||||
|
|
||||||
|
# Autosuggestions
|
||||||
|
zinit ice wait lucid atload"zle-line-init() { zle autosuggest-enable }; zle -N zle-line-init"
|
||||||
|
zinit load zsh-users/zsh-autosuggestions
|
||||||
|
|
||||||
|
# History search
|
||||||
|
zinit light zsh-users/zsh-history-substring-search
|
||||||
|
zinit load zdharma-continuum/history-search-multi-word
|
||||||
|
|
||||||
|
# FZF and extras
|
||||||
|
zinit ice from"gh-r" as"program" pick"bin/fzf"
|
||||||
|
zinit light junegunn/fzf-bin
|
||||||
|
zinit light junegunn/fzf-git.sh
|
||||||
|
|
||||||
|
zinit ice wait lucid blockf
|
||||||
|
zinit load Aloxaf/fzf-tab
|
||||||
|
|
||||||
|
zinit ice from"gh-r" as"program" pick"bin/zoxide"
|
||||||
|
zinit load ajeetdsouza/zoxide
|
||||||
|
|
||||||
|
# Update alias
|
||||||
|
alias zupdate='zinit update --all'
|
||||||
|
|
||||||
|
|
@ -1,24 +1,37 @@
|
||||||
#!/usr/bin/env zsh
|
#!/usr/bin/env zsh
|
||||||
|
|
||||||
# Determine FZF installation path
|
# ── Brew shellenv ───────────────────────────────────────
|
||||||
if command -v fzf &>/dev/null; then
|
if command -v brew &>/dev/null; then
|
||||||
if [[ "$(command -v fzf)" == "/run/current-system/sw/bin/fzf" ]]; then
|
export PATH="/opt/homebrew/bin:${PATH}"
|
||||||
FZF_PATH="/run/current-system/sw"
|
eval "$(/opt/homebrew/bin/brew shellenv)"
|
||||||
elif command -v brew &>/dev/null; then
|
|
||||||
FZF_PATH="$(brew --prefix)/opt/fzf"
|
|
||||||
else
|
|
||||||
FZF_PATH=""
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -n "$FZF_PATH" && ! "$PATH" =~ (^|:)"$FZF_PATH"(:|$) ]]; then
|
|
||||||
export PATH="$FZF_PATH:$PATH"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# ── Add Homebrew curl to PATH if installed ─────────────
|
||||||
if command -v brew &>/dev/null && brew list curl &>/dev/null; then
|
if command -v brew &>/dev/null && brew list curl &>/dev/null; then
|
||||||
BREW_CURL_PATH="$(brew --prefix curl)/bin"
|
CURL_PATH="$(brew --prefix curl)/bin"
|
||||||
if [[ -d "$BREW_CURL_PATH" && ! "$PATH" =~ (^|:)"$BREW_CURL_PATH"(:|$) ]]; then
|
[[ ":$PATH:" != *":$CURL_PATH:"* ]] && export PATH="$CURL_PATH:$PATH"
|
||||||
export PATH="$BREW_CURL_PATH:$PATH"
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# ── Add FZF path to PATH ───────────────────────────────
|
||||||
|
if command -v fzf &>/dev/null; then
|
||||||
|
if command -v brew &>/dev/null; then
|
||||||
|
FZF_PATH="$(brew --prefix fzf)/bin"
|
||||||
|
else
|
||||||
|
FZF_PATH="$(dirname "$(command -v fzf)")"
|
||||||
|
fi
|
||||||
|
[[ ":$PATH:" != *":$FZF_PATH:"* ]] && export PATH="$FZF_PATH:$PATH"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ── Add TeX to PATH (macOS specific) ───────────────────
|
||||||
|
[[ -d "/Library/TeX/texbin" ]] && export PATH="/Library/TeX/texbin:$PATH"
|
||||||
|
|
||||||
|
# ── Zsh completion fpath for brew and other packages ──
|
||||||
|
# Add Homebrew’s zsh completions if they exist
|
||||||
|
BREW_ZSH_FUNCTIONS="$(brew --prefix 2>/dev/null)/share/zsh/site-functions"
|
||||||
|
if [[ -d "$BREW_ZSH_FUNCTIONS" ]]; then
|
||||||
|
fpath=("$BREW_ZSH_FUNCTIONS" $fpath)
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Optional: Add your own completions directory
|
||||||
|
[[ -d "$HOME/.zsh/site-functions" ]] && fpath=("$HOME/.zsh/site-functions" $fpath)
|
||||||
|
|
||||||
|
|
|
||||||
95
zsh/.zshenv
95
zsh/.zshenv
|
|
@ -1,65 +1,90 @@
|
||||||
#!/usr/bin/env zsh
|
#!/usr/bin/env zsh
|
||||||
|
|
||||||
# ------------- Environment Setup -------------
|
# ------------------ Environment Setup ------------------
|
||||||
export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
|
export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
|
||||||
export XDG_CACHE_HOME="${XDG_CACHE_HOME:-$HOME/.cache}"
|
export XDG_CACHE_HOME="${XDG_CACHE_HOME:-$HOME/.cache}"
|
||||||
export XDG_DATA_HOME="${XDG_DATA_HOME:-$HOME/.local/share}"
|
export XDG_DATA_HOME="${XDG_DATA_HOME:-$HOME/.local/share}"
|
||||||
|
|
||||||
# Default tools
|
|
||||||
export PAGER="less -i -N -S -R"
|
export PAGER="less -i -N -S -R"
|
||||||
export EDITOR="nvim"
|
export EDITOR="nvim"
|
||||||
export BROWSER="firefox"
|
export BROWSER="/Applications/Zen.app/Contents/MacOS/zen"
|
||||||
|
|
||||||
# ------------- Platform-Specific Setup -------------
|
# ------------------ Helper Functions ------------------
|
||||||
OS_TYPE="$(uname -s)"
|
|
||||||
HOMEBREW_PREFIX="/opt/homebrew"
|
|
||||||
|
|
||||||
if [[ "$OS_TYPE" == "Darwin" ]]; then
|
|
||||||
if [[ "$(uname -m)" == "arm64" ]]; then
|
|
||||||
HOMEBREW_PREFIX="/opt/homebrew" # Apple Silicon
|
|
||||||
else
|
|
||||||
HOMEBREW_PREFIX="/usr/local" # Intel Mac
|
|
||||||
fi
|
|
||||||
elif [[ "$OS_TYPE" == "Linux" ]]; then
|
|
||||||
if [[ -d "/home/linuxbrew/.linuxbrew/bin" ]]; then
|
|
||||||
HOMEBREW_PREFIX="/home/linuxbrew/.linuxbrew"
|
|
||||||
elif [[ -d "/linuxbrew/bin" ]]; then
|
|
||||||
HOMEBREW_PREFIX="/linuxbrew"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ------------- Helper Functions -------------
|
|
||||||
safe_path_add() {
|
safe_path_add() {
|
||||||
[[ -d "$1" && ":$PATH:" != *":$1:"* ]] && export PATH="$1:$PATH"
|
[[ -d "$1" && ":$PATH:" != *":$1:"* ]] && export PATH="$1:$PATH"
|
||||||
}
|
}
|
||||||
|
|
||||||
# ------------- PATH Setup -------------
|
# ------------------ Platform Detection ------------------
|
||||||
safe_path_add "$HOME/.local/bin/scripts"
|
OS_TYPE="$(uname -s)"
|
||||||
safe_path_add "$HOMEBREW_PREFIX/bin"
|
ARCH="$(uname -m)"
|
||||||
safe_path_add "$HOMEBREW_PREFIX/sbin"
|
|
||||||
|
|
||||||
|
# ------------------ macOS Setup ------------------
|
||||||
|
# macOS Homebrew and Toolchain Setup
|
||||||
if [[ "$OS_TYPE" == "Darwin" ]]; then
|
if [[ "$OS_TYPE" == "Darwin" ]]; then
|
||||||
for dir in "$HOMEBREW_PREFIX/opt/coreutils/libexec/gnubin" \
|
if [[ "$ARCH" == "arm64" ]]; then
|
||||||
|
export HOMEBREW_PREFIX="/opt/homebrew"
|
||||||
|
else
|
||||||
|
export HOMEBREW_PREFIX="/usr/local"
|
||||||
|
fi
|
||||||
|
|
||||||
|
safe_path_add "$HOMEBREW_PREFIX/bin"
|
||||||
|
safe_path_add "$HOMEBREW_PREFIX/sbin"
|
||||||
|
|
||||||
|
for dir in \
|
||||||
|
"$HOMEBREW_PREFIX/opt/coreutils/libexec/gnubin" \
|
||||||
"$HOMEBREW_PREFIX/opt/openssl@1.1/bin" \
|
"$HOMEBREW_PREFIX/opt/openssl@1.1/bin" \
|
||||||
"$HOMEBREW_PREFIX/opt/llvm/bin" \
|
"$HOMEBREW_PREFIX/opt/llvm/bin" \
|
||||||
"/Library/TeX/texbin"; do
|
"/Library/TeX/texbin" \
|
||||||
|
"$HOMEBREW_PREFIX/opt/rustup/bin"; do
|
||||||
safe_path_add "$dir"
|
safe_path_add "$dir"
|
||||||
done
|
done
|
||||||
|
# ------------------ Linux Setup ------------------
|
||||||
|
elif [[ "$OS_TYPE" == "Linux" ]]; then
|
||||||
|
safe_path_add "$HOME/.local/bin"
|
||||||
|
safe_path_add "$HOME/.cargo/bin"
|
||||||
|
safe_path_add "$HOME/.local/share/flatpak/exports/bin"
|
||||||
|
safe_path_add "/var/lib/flatpak/exports/bin"
|
||||||
|
[[ -d "/nix" ]] && safe_path_add "/nix/var/nix/profiles/default/bin"
|
||||||
|
|
||||||
|
# ------------------ WSL Detection ------------------
|
||||||
|
if grep -qEi "microsoft|wsl" /proc/version &>/dev/null; then
|
||||||
|
export IS_WSL=1
|
||||||
|
export BROWSER="wslview"
|
||||||
|
export DISPLAY="${DISPLAY:-:0}"
|
||||||
|
export WSL_HOST="$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}')"
|
||||||
|
export NO_AT_BRIDGE=1
|
||||||
|
safe_path_add "/mnt/c/Windows/System32" # useful for calling Windows commands from WSL
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ------------------ Remote Development Detection ------------------
|
||||||
|
if [[ -n "$SSH_CONNECTION" ]]; then
|
||||||
|
export IS_REMOTE=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n "$CODESPACES" ]] || [[ -d "/workspaces" ]]; then
|
||||||
|
export IS_CODESPACES=1
|
||||||
|
safe_path_add "/workspaces/bin"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Python Paths
|
# ------------------ Common PATH ------------------
|
||||||
[[ -n "$PYENV_ROOT" ]] && safe_path_add "$PYENV_ROOT/bin"
|
safe_path_add "$HOME/.local/bin/scripts"
|
||||||
|
|
||||||
# Go Paths
|
# ------------------ Language Toolchains ------------------
|
||||||
|
|
||||||
|
# Python (pyenv)
|
||||||
|
export PYENV_ROOT="$HOME/.pyenv"
|
||||||
|
|
||||||
|
safe_path_add "$PYENV_ROOT/bin"
|
||||||
|
safe_path_add "$PYENV_ROOT/shims"
|
||||||
|
|
||||||
|
# Go
|
||||||
if command -v go &>/dev/null; then
|
if command -v go &>/dev/null; then
|
||||||
export GOPATH="${GOPATH:-$HOME/.go}"
|
export GOPATH="${GOPATH:-$HOME/.go}"
|
||||||
safe_path_add "$GOPATH/bin"
|
safe_path_add "$GOPATH/bin"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Rust Paths
|
# NVM
|
||||||
export PATH="$HOMEBREW_PREFIX/opt/rustup/bin:$PATH"
|
|
||||||
|
|
||||||
# NVM Setup
|
|
||||||
if [[ -d "$HOME/.nvm" ]]; then
|
if [[ -d "$HOME/.nvm" ]]; then
|
||||||
export NVM_DIR="$HOME/.nvm"
|
export NVM_DIR="$HOME/.nvm"
|
||||||
[[ -s "$NVM_DIR/nvm.sh" ]] && . "$NVM_DIR/nvm.sh"
|
[[ -s "$NVM_DIR/nvm.sh" ]] && . "$NVM_DIR/nvm.sh"
|
||||||
|
|
|
||||||
174
zsh/.zshrc
174
zsh/.zshrc
|
|
@ -1,172 +1,20 @@
|
||||||
#!/usr/bin/env zsh
|
#!/usr/bin/env zsh
|
||||||
|
|
||||||
# ================ Basic Settings ================
|
# Optional profiling
|
||||||
# Disable auto title
|
[[ -n $ZSH_DEBUGRC ]] && zmodload zsh/zprof
|
||||||
DISABLE_AUTO_TITLE="true"
|
|
||||||
|
|
||||||
# Uncomment to enable case-sensitive or hyphen-insensitive completion
|
# Path cleanup
|
||||||
# CASE_SENSITIVE="true"
|
|
||||||
# HYPHEN_INSENSITIVE="true"
|
|
||||||
|
|
||||||
# Miscellaneous settings (uncomment as needed)
|
|
||||||
# DISABLE_MAGIC_FUNCTIONS="true"
|
|
||||||
# DISABLE_LS_COLORS="true"
|
|
||||||
# ENABLE_CORRECTION="true"
|
|
||||||
# COMPLETION_WAITING_DOTS="true"
|
|
||||||
# DISABLE_UNTRACKED_FILES_DIRTY="true"
|
|
||||||
|
|
||||||
# ================ Path Optimizations ================
|
|
||||||
# Ensure no duplicates in PATH
|
|
||||||
typeset -U PATH
|
typeset -U PATH
|
||||||
|
|
||||||
# ================ Zsh Completion Settings ================
|
# Core config
|
||||||
# Load zsh completions with optimization
|
source ~/.config/zsh/completion.zsh
|
||||||
if type brew &>/dev/null; then
|
source ~/.config/zsh/plugins.zsh
|
||||||
export HOMEBREW_AUTO_UPDATE_SECS=86400 # Update every 24 hours
|
source ~/.config/zsh/aliases.zsh
|
||||||
export HOMEBREW_PREFIX="$(brew --prefix)"
|
source ~/.config/zsh/external.zsh
|
||||||
|
|
||||||
# Ensure Homebrew path is correct for your system (Intel vs M1)
|
# Editor for SSH
|
||||||
if [[ -d "$HOMEBREW_PREFIX/share/zsh/site-functions" ]]; then
|
|
||||||
FPATH="$HOMEBREW_PREFIX/share/zsh/site-functions:$FPATH"
|
|
||||||
elif [[ -d "/usr/local/share/zsh/site-functions" ]]; then
|
|
||||||
FPATH="/usr/local/share/zsh/site-functions:$FPATH"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Initialize compinit for Zsh completions
|
|
||||||
autoload -Uz compinit
|
|
||||||
|
|
||||||
# Set the location of zcompdump for completion caching
|
|
||||||
ZSH_COMPDUMP="${ZDOTDIR:-$HOME}/.zcompdump"
|
|
||||||
if [[ ! -f $ZSH_COMPDUMP || $ZSH_COMPDUMP -ot $ZDOTDIR/.zshrc ]]; then
|
|
||||||
compinit -d "$ZSH_COMPDUMP"
|
|
||||||
else
|
|
||||||
compinit -C -d "$ZSH_COMPDUMP"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ================ Plugin Manager (Zinit) ================
|
|
||||||
# Setup and initialize Zinit, a Zsh plugin manager
|
|
||||||
ZINIT_HOME="${XDG_DATA_HOME:-${HOME}/.local/share}/zinit/zinit.git"
|
|
||||||
|
|
||||||
# Install Zinit if it isn't already present
|
|
||||||
if [ ! -d "$ZINIT_HOME" ]; then
|
|
||||||
mkdir -p "$(dirname "$ZINIT_HOME")"
|
|
||||||
git clone https://github.com/zdharma-continuum/zinit.git "$ZINIT_HOME"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Source the Zinit script to enable plugin management
|
|
||||||
. "${ZINIT_HOME}/zinit.zsh"
|
|
||||||
|
|
||||||
# Ensure compinit works with Zinit
|
|
||||||
autoload -Uz _zinit
|
|
||||||
(( ${+_comps} )) && _comps[zinit]=_zinit
|
|
||||||
|
|
||||||
# ================ Zinit Plugin Configuration ================
|
|
||||||
# Essential plugins for enhanced Zsh experience
|
|
||||||
zinit light zsh-users/zsh-completions # Tab completions for Zsh
|
|
||||||
zinit light zsh-users/zsh-history-substring-search # Search through command history
|
|
||||||
zinit load zdharma/history-search-multi-word # Multi-word history search
|
|
||||||
|
|
||||||
# Syntax highlighting for Zsh (lazy-load)
|
|
||||||
zinit ice wait lucid atinit"ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern)"
|
|
||||||
zinit load zsh-users/zsh-syntax-highlighting
|
|
||||||
|
|
||||||
# Asynchronous auto-suggestions (lazy-load)
|
|
||||||
zinit ice wait lucid atload"zle-line-init() { zle autosuggest-enable }; zle -N zle-line-init"
|
|
||||||
zinit load zsh-users/zsh-autosuggestions
|
|
||||||
|
|
||||||
# ================ Docker Completions ================
|
|
||||||
# Add Docker and Docker Compose completions
|
|
||||||
zinit ice wait lucid depth=1
|
|
||||||
zinit load docker/compose
|
|
||||||
|
|
||||||
# ================ zoxide Plugin ================
|
|
||||||
# Fast navigation tool for frequently used directories
|
|
||||||
zinit ice from"gh-r" as"program" pick"bin/zoxide"
|
|
||||||
zinit load ajeetdsouza/zoxide
|
|
||||||
|
|
||||||
# ================ fzf Plugin ================
|
|
||||||
|
|
||||||
# Install fzf (binary) using zinit
|
|
||||||
zinit ice from"gh-r" as"program" pick"bin/fzf"
|
|
||||||
zinit light junegunn/fzf-bin
|
|
||||||
|
|
||||||
# Optional: fzf-git.sh for git integration (if you want)
|
|
||||||
zinit light junegunn/fzf-git.sh
|
|
||||||
|
|
||||||
# Load fzf-tab for enhanced fuzzy tab completion
|
|
||||||
zinit ice blockf
|
|
||||||
zinit light Aloxaf/fzf-tab
|
|
||||||
|
|
||||||
# ================ Additional Programs Initialization ================
|
|
||||||
# Initialize direnv (uncomment if needed)
|
|
||||||
# eval "$(direnv hook zsh)"
|
|
||||||
|
|
||||||
# Initialize zoxide
|
|
||||||
eval "$(zoxide init --cmd cd zsh)"
|
|
||||||
|
|
||||||
# Initialize Starship prompt
|
|
||||||
eval "$(starship init zsh)"
|
|
||||||
export STARSHIP_CONFIG="${XDG_CONFIG_HOME:-$HOME/.config}/starship.toml"
|
|
||||||
|
|
||||||
# ================ Zoxide Initialization ================
|
|
||||||
if command -v eza &>/dev/null; then
|
|
||||||
export ZO_FZF_OPTS="--preview 'eza --tree --level=2 --color=always {}' --preview-window=down:30%:wrap"
|
|
||||||
else
|
|
||||||
export ZO_FZF_OPTS="--preview 'ls -la --color=always {}' --preview-window=down:30%:wrap"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ================ Conda Initialization ================
|
|
||||||
# Initialize Conda (uncomment if you use Conda)
|
|
||||||
# eval "$(conda init "$(basename "${SHELL}")")"
|
|
||||||
|
|
||||||
# ================ Pyenv Setup ================
|
|
||||||
# Initialize Pyenv if installed
|
|
||||||
if command -v pyenv 1>/dev/null 2>&1; then
|
|
||||||
export PYENV_ROOT="$HOME/.pyenv"
|
|
||||||
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
|
|
||||||
eval "$(pyenv init -)"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ================ Custom Aliases ================
|
|
||||||
# Define commonly used aliases
|
|
||||||
alias grep="grep --color=auto"
|
|
||||||
alias ..="cd .."
|
|
||||||
alias ...="cd ../.."
|
|
||||||
alias ....="cd ../../.."
|
|
||||||
alias .....="cd ../../../.."
|
|
||||||
alias lzd='lazydocker'
|
|
||||||
alias v='nvim'
|
|
||||||
|
|
||||||
# Use eza for enhanced 'ls' command
|
|
||||||
alias ls='eza'
|
|
||||||
alias ll='eza -lh --group-directories-first'
|
|
||||||
alias la='eza -a --group-directories-first'
|
|
||||||
alias lla='eza -la --group-directories-first'
|
|
||||||
alias l='eza --classify'
|
|
||||||
|
|
||||||
alias gs='git status'
|
|
||||||
alias gc='git commit'
|
|
||||||
alias gcm='git commit -m'
|
|
||||||
alias gco='git checkout'
|
|
||||||
alias gb='git branch'
|
|
||||||
alias gu='git pull'
|
|
||||||
alias gp='git push'
|
|
||||||
alias gl='git log --oneline --graph --decorate'
|
|
||||||
alias gi='git init'
|
|
||||||
alias gcl='git clone'
|
|
||||||
|
|
||||||
|
|
||||||
# Source additional alias checks if available
|
|
||||||
if [[ -f ~/.local/bin/scripts/check_aliases ]]; then
|
|
||||||
. ~/.local/bin/scripts/check_aliases
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ================ Conditional Settings ================
|
|
||||||
# Set the editor to vim if using SSH
|
|
||||||
[[ -n ${SSH_CONNECTION} ]] && export EDITOR='vim'
|
[[ -n ${SSH_CONNECTION} ]] && export EDITOR='vim'
|
||||||
|
|
||||||
# ================ Profiling (Optional) ================
|
# Show zprof results if debugging
|
||||||
# Uncomment to enable profiling (useful for debugging)
|
[[ -n $ZSH_DEBUGRC ]] && zprof
|
||||||
# zprof # Comment out if profiling is not needed
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue