Compare commits
No commits in common. "main" and "422c836948e5392fe0903a78acf6c4ddfddf256d" have entirely different histories.
main
...
422c836948
3
.deps
3
.deps
|
@ -1,3 +0,0 @@
|
||||||
github.com/make-go-great/color-go
|
|
||||||
github.com/make-go-great/copy-go
|
|
||||||
github.com/make-go-great/diff-go
|
|
|
@ -1,10 +0,0 @@
|
||||||
version: 2
|
|
||||||
updates:
|
|
||||||
- package-ecosystem: "gomod"
|
|
||||||
directory: "/"
|
|
||||||
schedule:
|
|
||||||
interval: "daily"
|
|
||||||
- package-ecosystem: "github-actions"
|
|
||||||
directory: "/"
|
|
||||||
schedule:
|
|
||||||
interval: "daily"
|
|
|
@ -1,16 +0,0 @@
|
||||||
name: gitleaks
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
pull_request:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
scan:
|
|
||||||
name: gitleaks
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
- uses: gitleaks/gitleaks-action@v2
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
name: Go
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
name: Test
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-go@v2
|
||||||
|
with:
|
||||||
|
go-version: "~1.17"
|
||||||
|
- run: go test -race ./...
|
||||||
|
build:
|
||||||
|
name: Build
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
os: [ubuntu-latest, macos-latest]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-go@v2
|
||||||
|
with:
|
||||||
|
go-version: "~1.17"
|
||||||
|
- run: go build ./cmd/dot
|
||||||
|
lint:
|
||||||
|
name: Lint
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: golangci/golangci-lint-action@v2
|
||||||
|
with:
|
||||||
|
version: latest
|
|
@ -1,58 +0,0 @@
|
||||||
name: Go
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
paths:
|
|
||||||
- "**.go"
|
|
||||||
- "go.mod"
|
|
||||||
- "go.sum"
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
paths:
|
|
||||||
- "**.go"
|
|
||||||
- "go.mod"
|
|
||||||
- "go.sum"
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.workflow }}-${{ github.ref }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
test:
|
|
||||||
name: Test
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-go@v5
|
|
||||||
with:
|
|
||||||
go-version: "stable"
|
|
||||||
- run: go test -race -coverprofile=coverage.out ./...
|
|
||||||
- uses: codecov/codecov-action@v5
|
|
||||||
with:
|
|
||||||
files: coverage.out
|
|
||||||
build:
|
|
||||||
name: Build
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
os: [ubuntu-latest, macos-latest]
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-go@v5
|
|
||||||
with:
|
|
||||||
go-version: "stable"
|
|
||||||
- run: go build ./cmd/dot
|
|
||||||
golangci-lint:
|
|
||||||
name: golangci-lint
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-go@v5
|
|
||||||
with:
|
|
||||||
go-version: "stable"
|
|
||||||
- uses: golangci/golangci-lint-action@v6
|
|
||||||
with:
|
|
||||||
version: latest
|
|
|
@ -5,10 +5,7 @@
|
||||||
*.exe
|
*.exe
|
||||||
|
|
||||||
# IntelliJ
|
# IntelliJ
|
||||||
.idea
|
.idea/
|
||||||
|
|
||||||
# VSCode
|
# VSCode
|
||||||
.vscode
|
.vscode/
|
||||||
|
|
||||||
# Go
|
|
||||||
coverage.out
|
|
||||||
|
|
|
@ -1,95 +0,0 @@
|
||||||
run:
|
|
||||||
timeout: 5m
|
|
||||||
tests: false
|
|
||||||
|
|
||||||
output:
|
|
||||||
sort-results: true
|
|
||||||
|
|
||||||
linters:
|
|
||||||
disable-all: true
|
|
||||||
enable:
|
|
||||||
# Default
|
|
||||||
- errcheck
|
|
||||||
- gosimple
|
|
||||||
- govet
|
|
||||||
- ineffassign
|
|
||||||
- staticcheck
|
|
||||||
- typecheck
|
|
||||||
- unused
|
|
||||||
# Custom
|
|
||||||
- bodyclose
|
|
||||||
- err113
|
|
||||||
- errchkjson
|
|
||||||
- errname
|
|
||||||
- errorlint
|
|
||||||
- fatcontext
|
|
||||||
- forcetypeassert
|
|
||||||
- gocritic
|
|
||||||
- gofumpt
|
|
||||||
- gosec
|
|
||||||
- importas
|
|
||||||
- makezero
|
|
||||||
- nilnil
|
|
||||||
- noctx
|
|
||||||
- prealloc
|
|
||||||
- reassign
|
|
||||||
- sqlclosecheck
|
|
||||||
- unconvert
|
|
||||||
fast: true
|
|
||||||
|
|
||||||
linters-settings:
|
|
||||||
# Default
|
|
||||||
govet:
|
|
||||||
disable-all: true
|
|
||||||
enable:
|
|
||||||
- assign
|
|
||||||
- atomic
|
|
||||||
- bools
|
|
||||||
- buildtag
|
|
||||||
- composites
|
|
||||||
- copylocks
|
|
||||||
- fieldalignment
|
|
||||||
- httpresponse
|
|
||||||
- loopclosure
|
|
||||||
- lostcancel
|
|
||||||
- nilfunc
|
|
||||||
- printf
|
|
||||||
- unmarshal
|
|
||||||
- unreachable
|
|
||||||
- unusedresult
|
|
||||||
staticcheck:
|
|
||||||
checks: ["all", "-SA1019"]
|
|
||||||
# Custom
|
|
||||||
gocritic:
|
|
||||||
disabled-checks:
|
|
||||||
- ifElseChain
|
|
||||||
- singleCaseSwitch
|
|
||||||
- unnamedResult
|
|
||||||
- whyNoLint
|
|
||||||
enabled-tags:
|
|
||||||
- diagnostic
|
|
||||||
- style
|
|
||||||
gosec:
|
|
||||||
excludes:
|
|
||||||
- G101
|
|
||||||
- G112
|
|
||||||
- G115
|
|
||||||
- G204
|
|
||||||
- G402
|
|
||||||
- G404
|
|
||||||
- G501
|
|
||||||
- G505
|
|
||||||
exclude-generated: true
|
|
||||||
reassign:
|
|
||||||
patterns:
|
|
||||||
- ".*"
|
|
||||||
|
|
||||||
issues:
|
|
||||||
exclude-dirs:
|
|
||||||
- ".*test.*"
|
|
||||||
- ".*mock.*"
|
|
||||||
- ".*example.*"
|
|
||||||
- ".*utils.*"
|
|
||||||
exclude-files:
|
|
||||||
- ".*Mock.*"
|
|
||||||
- ".*_mock.*"
|
|
2232
CHANGELOG.md
2232
CHANGELOG.md
File diff suppressed because it is too large
Load Diff
2
LICENSE
2
LICENSE
|
@ -1,6 +1,6 @@
|
||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2022 Hau Nguyen
|
Copyright (c) 2021 Nguyen Tran Hau
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|
32
README.md
32
README.md
|
@ -1,11 +1,6 @@
|
||||||
# Dotfiles
|
# Dotfiles
|
||||||
|
|
||||||
[![Go](https://github.com/haunt98/dotfiles/actions/workflows/go.yml/badge.svg)](https://github.com/haunt98/dotfiles/actions/workflows/go.yml)
|
[![Go](https://github.com/haunt98/dotfiles/workflows/Go/badge.svg?branch=main)](https://github.com/actions/setup-go)
|
||||||
[![gitleaks](https://github.com/haunt98/dotfiles/actions/workflows/gitleaks.yml/badge.svg)](https://github.com/haunt98/dotfiles/actions/workflows/gitleaks.yml)
|
|
||||||
<a href="https://dotfyle.com/haunt98/dotfiles-data-nvim"><img src="https://dotfyle.com/haunt98/dotfiles-data-nvim/badges/plugins?style=flat" /></a>
|
|
||||||
<a href="https://dotfyle.com/haunt98/dotfiles-data-nvim"><img src="https://dotfyle.com/haunt98/dotfiles-data-nvim/badges/leaderkey?style=flat" /></a>
|
|
||||||
<a href="https://dotfyle.com/haunt98/dotfiles-data-nvim"><img src="https://dotfyle.com/haunt98/dotfiles-data-nvim/badges/plugin-manager?style=flat" /></a>
|
|
||||||
[![Latest Version](https://img.shields.io/github/v/tag/haunt98/dotfiles)](https://github.com/haunt98/dotfiles/tags)
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
|
@ -19,27 +14,6 @@ go build ./cmd/dot
|
||||||
# Update dotfiles with user config
|
# Update dotfiles with user config
|
||||||
./dot update
|
./dot update
|
||||||
|
|
||||||
# Diff dotfiles with user config
|
# Compare dotfiles with user config
|
||||||
./dot diff
|
./dot compare
|
||||||
|
|
||||||
# Download internet themes, ...
|
|
||||||
./dot download
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Support
|
|
||||||
|
|
||||||
- [neovim](https://github.com/neovim/neovim)
|
|
||||||
- [kitty](https://github.com/kovidgoyal/kitty)
|
|
||||||
- [wezterm](https://github.com/wez/wezterm)
|
|
||||||
- [ghostty](https://github.com/ghostty-org/ghostty)
|
|
||||||
- [fd](https://github.com/sharkdp/fd)
|
|
||||||
- [bat](https://github.com/sharkdp/bat)
|
|
||||||
- [delta](https://github.com/dandavison/delta)
|
|
||||||
- [ripgrep](https://github.com/BurntSushi/ripgrep)
|
|
||||||
- [zellij](https://github.com/zellij-org/zellij)
|
|
||||||
- [starship](https://github.com/starship/starship)
|
|
||||||
- [zed](https://github.com/zed-industries/zed)
|
|
||||||
- [btop](https://github.com/aristocratos/btop)
|
|
||||||
- [newsboat](https://github.com/newsboat/newsboat)
|
|
||||||
- [typos](https://github.com/crate-ci/typos)
|
|
||||||
- [daktilo](https://github.com/orhun/daktilo)
|
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
import:
|
||||||
|
- ~/.config/alacritty/nord.yml
|
||||||
|
|
||||||
|
font:
|
||||||
|
normal:
|
||||||
|
family: Cascadia Code
|
||||||
|
style: Regular
|
||||||
|
size: 14.0
|
|
@ -0,0 +1,49 @@
|
||||||
|
# https://github.com/arcticicestudio/nord-alacritty
|
||||||
|
colors:
|
||||||
|
primary:
|
||||||
|
background: "#2e3440"
|
||||||
|
foreground: "#d8dee9"
|
||||||
|
dim_foreground: "#a5abb6"
|
||||||
|
cursor:
|
||||||
|
text: "#2e3440"
|
||||||
|
cursor: "#d8dee9"
|
||||||
|
vi_mode_cursor:
|
||||||
|
text: "#2e3440"
|
||||||
|
cursor: "#d8dee9"
|
||||||
|
selection:
|
||||||
|
text: CellForeground
|
||||||
|
background: "#4c566a"
|
||||||
|
search:
|
||||||
|
matches:
|
||||||
|
foreground: CellBackground
|
||||||
|
background: "#88c0d0"
|
||||||
|
bar:
|
||||||
|
background: "#434c5e"
|
||||||
|
foreground: "#d8dee9"
|
||||||
|
normal:
|
||||||
|
black: "#3b4252"
|
||||||
|
red: "#bf616a"
|
||||||
|
green: "#a3be8c"
|
||||||
|
yellow: "#ebcb8b"
|
||||||
|
blue: "#81a1c1"
|
||||||
|
magenta: "#b48ead"
|
||||||
|
cyan: "#88c0d0"
|
||||||
|
white: "#e5e9f0"
|
||||||
|
bright:
|
||||||
|
black: "#4c566a"
|
||||||
|
red: "#bf616a"
|
||||||
|
green: "#a3be8c"
|
||||||
|
yellow: "#ebcb8b"
|
||||||
|
blue: "#81a1c1"
|
||||||
|
magenta: "#b48ead"
|
||||||
|
cyan: "#8fbcbb"
|
||||||
|
white: "#eceff4"
|
||||||
|
dim:
|
||||||
|
black: "#373e4d"
|
||||||
|
red: "#94545d"
|
||||||
|
green: "#809575"
|
||||||
|
yellow: "#b29e75"
|
||||||
|
blue: "#68809a"
|
||||||
|
magenta: "#8c738c"
|
||||||
|
cyan: "#6d96a5"
|
||||||
|
white: "#aeb3bb"
|
|
@ -0,0 +1,22 @@
|
||||||
|
# https://github.com/alacritty/alacritty/wiki/Color-schemes
|
||||||
|
# Colors (One Dark - https://github.com/atom/atom/tree/master/packages/one-dark-syntax)
|
||||||
|
colors:
|
||||||
|
primary:
|
||||||
|
background: "#282c34"
|
||||||
|
foreground: "#abb2bf"
|
||||||
|
cursor:
|
||||||
|
text: CellBackground
|
||||||
|
cursor: "#528bff" # syntax-cursor-color
|
||||||
|
selection:
|
||||||
|
text: CellForeground
|
||||||
|
background: "#3e4451" # syntax-selection-color
|
||||||
|
normal:
|
||||||
|
black: "#5c6370" # mono-3
|
||||||
|
red: "#e06c75" # red 1
|
||||||
|
green: "#98c379"
|
||||||
|
yellow: "#e5c07b" # orange 2
|
||||||
|
blue: "#61afef"
|
||||||
|
magenta: "#c678dd"
|
||||||
|
cyan: "#56b6c2"
|
||||||
|
white: "#828997" # mono-2
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
--theme="Catppuccin Mocha"
|
--theme=ansi
|
||||||
--style=plain
|
--style=plain
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,83 +0,0 @@
|
||||||
# Main background, empty for terminal default, need to be empty if you want transparent background
|
|
||||||
theme[main_bg]="#1e1e2e"
|
|
||||||
|
|
||||||
# Main text color
|
|
||||||
theme[main_fg]="#cdd6f4"
|
|
||||||
|
|
||||||
# Title color for boxes
|
|
||||||
theme[title]="#cdd6f4"
|
|
||||||
|
|
||||||
# Highlight color for keyboard shortcuts
|
|
||||||
theme[hi_fg]="#89b4fa"
|
|
||||||
|
|
||||||
# Background color of selected item in processes box
|
|
||||||
theme[selected_bg]="#45475a"
|
|
||||||
|
|
||||||
# Foreground color of selected item in processes box
|
|
||||||
theme[selected_fg]="#89b4fa"
|
|
||||||
|
|
||||||
# Color of inactive/disabled text
|
|
||||||
theme[inactive_fg]="#7f849c"
|
|
||||||
|
|
||||||
# Color of text appearing on top of graphs, i.e uptime and current network graph scaling
|
|
||||||
theme[graph_text]="#f5e0dc"
|
|
||||||
|
|
||||||
# Background color of the percentage meters
|
|
||||||
theme[meter_bg]="#45475a"
|
|
||||||
|
|
||||||
# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
|
|
||||||
theme[proc_misc]="#f5e0dc"
|
|
||||||
|
|
||||||
# CPU, Memory, Network, Proc box outline colors
|
|
||||||
theme[cpu_box]="#cba6f7" #Mauve
|
|
||||||
theme[mem_box]="#a6e3a1" #Green
|
|
||||||
theme[net_box]="#eba0ac" #Maroon
|
|
||||||
theme[proc_box]="#89b4fa" #Blue
|
|
||||||
|
|
||||||
# Box divider line and small boxes line color
|
|
||||||
theme[div_line]="#6c7086"
|
|
||||||
|
|
||||||
# Temperature graph color (Green -> Yellow -> Red)
|
|
||||||
theme[temp_start]="#a6e3a1"
|
|
||||||
theme[temp_mid]="#f9e2af"
|
|
||||||
theme[temp_end]="#f38ba8"
|
|
||||||
|
|
||||||
# CPU graph colors (Teal -> Lavender)
|
|
||||||
theme[cpu_start]="#94e2d5"
|
|
||||||
theme[cpu_mid]="#74c7ec"
|
|
||||||
theme[cpu_end]="#b4befe"
|
|
||||||
|
|
||||||
# Mem/Disk free meter (Mauve -> Lavender -> Blue)
|
|
||||||
theme[free_start]="#cba6f7"
|
|
||||||
theme[free_mid]="#b4befe"
|
|
||||||
theme[free_end]="#89b4fa"
|
|
||||||
|
|
||||||
# Mem/Disk cached meter (Sapphire -> Lavender)
|
|
||||||
theme[cached_start]="#74c7ec"
|
|
||||||
theme[cached_mid]="#89b4fa"
|
|
||||||
theme[cached_end]="#b4befe"
|
|
||||||
|
|
||||||
# Mem/Disk available meter (Peach -> Red)
|
|
||||||
theme[available_start]="#fab387"
|
|
||||||
theme[available_mid]="#eba0ac"
|
|
||||||
theme[available_end]="#f38ba8"
|
|
||||||
|
|
||||||
# Mem/Disk used meter (Green -> Sky)
|
|
||||||
theme[used_start]="#a6e3a1"
|
|
||||||
theme[used_mid]="#94e2d5"
|
|
||||||
theme[used_end]="#89dceb"
|
|
||||||
|
|
||||||
# Download graph colors (Peach -> Red)
|
|
||||||
theme[download_start]="#fab387"
|
|
||||||
theme[download_mid]="#eba0ac"
|
|
||||||
theme[download_end]="#f38ba8"
|
|
||||||
|
|
||||||
# Upload graph colors (Green -> Sky)
|
|
||||||
theme[upload_start]="#a6e3a1"
|
|
||||||
theme[upload_mid]="#94e2d5"
|
|
||||||
theme[upload_end]="#89dceb"
|
|
||||||
|
|
||||||
# Process box color gradient for threads, mem and cpu usage (Sapphire -> Mauve)
|
|
||||||
theme[process_start]="#74c7ec"
|
|
||||||
theme[process_mid]="#b4befe"
|
|
||||||
theme[process_end]="#cba6f7"
|
|
|
@ -1,4 +0,0 @@
|
||||||
# https://github.com/johnthagen/min-sized-rust
|
|
||||||
[profile.release]
|
|
||||||
strip = true
|
|
||||||
lto = true
|
|
|
@ -1,89 +0,0 @@
|
||||||
# git pull all those repos first
|
|
||||||
# cd ~/.config/daktilo && daktilo --preset holy_panda
|
|
||||||
|
|
||||||
[[sound_preset]]
|
|
||||||
name = "holy_panda"
|
|
||||||
key_config = [
|
|
||||||
{ event = "press", keys = "Return", files = [
|
|
||||||
{ path = "github.com/nathan-fiscaletti/keyboardsounds/keyboardsounds/profiles/holy-panda/press_enter.mp3", volume = 1.0 },
|
|
||||||
] },
|
|
||||||
{ event = "press", keys = "Backspace", files = [
|
|
||||||
{ path = "github.com/nathan-fiscaletti/keyboardsounds/keyboardsounds/profiles/holy-panda/press_back.mp3", volume = 1.0 },
|
|
||||||
] },
|
|
||||||
{ event = "press", keys = "Space", files = [
|
|
||||||
{ path = "github.com/nathan-fiscaletti/keyboardsounds/keyboardsounds/profiles/holy-panda/press_space.mp3", volume = 1.0 },
|
|
||||||
] },
|
|
||||||
{ event = "press", keys = ".*", files = [
|
|
||||||
{ path = "github.com/nathan-fiscaletti/keyboardsounds/keyboardsounds/profiles/holy-panda/press_key1.mp3", volume = 1.0 },
|
|
||||||
{ path = "github.com/nathan-fiscaletti/keyboardsounds/keyboardsounds/profiles/holy-panda/press_key2.mp3", volume = 1.0 },
|
|
||||||
{ path = "github.com/nathan-fiscaletti/keyboardsounds/keyboardsounds/profiles/holy-panda/press_key3.mp3", volume = 1.0 },
|
|
||||||
{ path = "github.com/nathan-fiscaletti/keyboardsounds/keyboardsounds/profiles/holy-panda/press_key4.mp3", volume = 1.0 },
|
|
||||||
{ path = "github.com/nathan-fiscaletti/keyboardsounds/keyboardsounds/profiles/holy-panda/press_key5.mp3", volume = 1.0 },
|
|
||||||
], strategy = "random" },
|
|
||||||
]
|
|
||||||
|
|
||||||
[[sound_preset]]
|
|
||||||
name = "alpaca"
|
|
||||||
key_config = [
|
|
||||||
{ event = "press", keys = "Return", files = [
|
|
||||||
{ path = "github.com/nathan-fiscaletti/keyboardsounds/keyboardsounds/profiles/alpaca/press_enter.mp3", volume = 1.0 },
|
|
||||||
] },
|
|
||||||
{ event = "press", keys = "Backspace", files = [
|
|
||||||
{ path = "github.com/nathan-fiscaletti/keyboardsounds/keyboardsounds/profiles/alpaca/press_back.mp3", volume = 1.0 },
|
|
||||||
] },
|
|
||||||
{ event = "press", keys = "Space", files = [
|
|
||||||
{ path = "github.com/nathan-fiscaletti/keyboardsounds/keyboardsounds/profiles/alpaca/press_space.mp3", volume = 1.0 },
|
|
||||||
] },
|
|
||||||
{ event = "press", keys = ".*", files = [
|
|
||||||
{ path = "github.com/nathan-fiscaletti/keyboardsounds/keyboardsounds/profiles/alpaca/press_key1.mp3", volume = 1.0 },
|
|
||||||
{ path = "github.com/nathan-fiscaletti/keyboardsounds/keyboardsounds/profiles/alpaca/press_key2.mp3", volume = 1.0 },
|
|
||||||
{ path = "github.com/nathan-fiscaletti/keyboardsounds/keyboardsounds/profiles/alpaca/press_key3.mp3", volume = 1.0 },
|
|
||||||
{ path = "github.com/nathan-fiscaletti/keyboardsounds/keyboardsounds/profiles/alpaca/press_key4.mp3", volume = 1.0 },
|
|
||||||
{ path = "github.com/nathan-fiscaletti/keyboardsounds/keyboardsounds/profiles/alpaca/press_key5.mp3", volume = 1.0 },
|
|
||||||
], strategy = "random" },
|
|
||||||
{ event = "release", keys = "Return", files = [
|
|
||||||
{ path = "github.com/nathan-fiscaletti/keyboardsounds/keyboardsounds/profiles/alpaca/release_enter.mp3", volume = 1.0 },
|
|
||||||
] },
|
|
||||||
{ event = "release", keys = "Backspace", files = [
|
|
||||||
{ path = "github.com/nathan-fiscaletti/keyboardsounds/keyboardsounds/profiles/alpaca/release_back.mp3", volume = 1.0 },
|
|
||||||
] },
|
|
||||||
{ event = "release", keys = "Space", files = [
|
|
||||||
{ path = "github.com/nathan-fiscaletti/keyboardsounds/keyboardsounds/profiles/alpaca/release_space.mp3", volume = 1.0 },
|
|
||||||
] },
|
|
||||||
{ event = "release", keys = ".*", files = [
|
|
||||||
{ path = "github.com/nathan-fiscaletti/keyboardsounds/keyboardsounds/profiles/alpaca/release_key.mp3", volume = 1.0 },
|
|
||||||
] },
|
|
||||||
]
|
|
||||||
|
|
||||||
[[sound_preset]]
|
|
||||||
name = "topre"
|
|
||||||
key_config = [
|
|
||||||
{ event = "press", keys = "Return", files = [
|
|
||||||
{ path = "github.com/tplai/kbsim/src/assets/audio/topre/press/ENTER.mp3", volume = 1.0 },
|
|
||||||
] },
|
|
||||||
{ event = "press", keys = "Backspace", files = [
|
|
||||||
{ path = "github.com/tplai/kbsim/src/assets/audio/topre/press/BACKSPACE.mp3", volume = 1.0 },
|
|
||||||
] },
|
|
||||||
{ event = "press", keys = "Space", files = [
|
|
||||||
{ path = "github.com/tplai/kbsim/src/assets/audio/topre/press/SPACE.mp3", volume = 1.0 },
|
|
||||||
] },
|
|
||||||
{ event = "press", keys = ".*", files = [
|
|
||||||
{ path = "github.com/tplai/kbsim/src/assets/audio/topre/press/GENERIC_R0.mp3", volume = 1.0 },
|
|
||||||
{ path = "github.com/tplai/kbsim/src/assets/audio/topre/press/GENERIC_R1.mp3", volume = 1.0 },
|
|
||||||
{ path = "github.com/tplai/kbsim/src/assets/audio/topre/press/GENERIC_R2.mp3", volume = 1.0 },
|
|
||||||
{ path = "github.com/tplai/kbsim/src/assets/audio/topre/press/GENERIC_R3.mp3", volume = 1.0 },
|
|
||||||
{ path = "github.com/tplai/kbsim/src/assets/audio/topre/press/GENERIC_R4.mp3", volume = 1.0 },
|
|
||||||
], strategy = "random" },
|
|
||||||
{ event = "release", keys = "Return", files = [
|
|
||||||
{ path = "github.com/tplai/kbsim/src/assets/audio/topre/release/ENTER.mp3", volume = 1.0 },
|
|
||||||
] },
|
|
||||||
{ event = "release", keys = "Backspace", files = [
|
|
||||||
{ path = "github.com/tplai/kbsim/src/assets/audio/topre/release/BACKSPACE.mp3", volume = 1.0 },
|
|
||||||
] },
|
|
||||||
{ event = "release", keys = "Space", files = [
|
|
||||||
{ path = "github.com/tplai/kbsim/src/assets/audio/topre/release/SPACE.mp3", volume = 1.0 },
|
|
||||||
] },
|
|
||||||
{ event = "release", keys = ".*", files = [
|
|
||||||
{ path = "github.com/tplai/kbsim/src/assets/audio/topre/release/GENERIC.mp3", volume = 1.0 },
|
|
||||||
] },
|
|
||||||
]
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
{
|
||||||
|
"apps": {
|
||||||
|
"nvim": {
|
||||||
|
"paths": [
|
||||||
|
{
|
||||||
|
"internal": "data/nvim/init.vim",
|
||||||
|
"external": "~/.config/nvim/init.vim"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"tmux": {
|
||||||
|
"paths": [
|
||||||
|
{
|
||||||
|
"internal": "data/tmux/tmux.conf",
|
||||||
|
"external": "~/.config/tmux/tmux.conf"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"alacritty": {
|
||||||
|
"paths": [
|
||||||
|
{
|
||||||
|
"internal": "data/alacritty",
|
||||||
|
"external": "~/.config/alacritty"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"kitty": {
|
||||||
|
"paths": [
|
||||||
|
{
|
||||||
|
"internal": "data/kitty",
|
||||||
|
"external": "~/.config/kitty"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"bat": {
|
||||||
|
"paths": [
|
||||||
|
{
|
||||||
|
"internal": "data/bat/config",
|
||||||
|
"external": "~/.config/bat/config"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"fd": {
|
||||||
|
"paths": [
|
||||||
|
{
|
||||||
|
"internal": "data/fd/.ignore",
|
||||||
|
"external": "~/.ignore"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
151
data/data.toml
151
data/data.toml
|
@ -1,151 +0,0 @@
|
||||||
[[apps.git.paths]]
|
|
||||||
internal = "data/git/ignore"
|
|
||||||
external = "~/.config/git/ignore"
|
|
||||||
|
|
||||||
[[apps.zsh.paths]]
|
|
||||||
internal = "data/zsh/top-zshrc"
|
|
||||||
external = "~/.config/zsh/top-zshrc"
|
|
||||||
|
|
||||||
[[apps.zsh.paths]]
|
|
||||||
internal = "data/zsh/bottom-zshrc"
|
|
||||||
external = "~/.config/zsh/bottom-zshrc"
|
|
||||||
|
|
||||||
[[apps.zsh.paths]]
|
|
||||||
internal = "data/zsh/themes/catppuccin_mocha-zsh-syntax-highlighting.zsh"
|
|
||||||
external = "~/.config/zsh/themes/catppuccin_mocha-zsh-syntax-highlighting.zsh"
|
|
||||||
|
|
||||||
[[apps.zsh.paths]]
|
|
||||||
internal = "data/zsh/themes/catppuccin_mocha-zsh-syntax-highlighting.zsh"
|
|
||||||
url = "https://raw.githubusercontent.com/catppuccin/zsh-syntax-highlighting/refs/heads/main/themes/catppuccin_mocha-zsh-syntax-highlighting.zsh"
|
|
||||||
|
|
||||||
[[apps.nvim.paths]]
|
|
||||||
internal = "data/nvim/init.lua"
|
|
||||||
external = "~/.config/nvim/init.lua"
|
|
||||||
|
|
||||||
[[apps.kitty.paths]]
|
|
||||||
internal = "data/kitty/kitty.conf"
|
|
||||||
external = "~/.config/kitty/kitty.conf"
|
|
||||||
|
|
||||||
[[apps.kitty.paths]]
|
|
||||||
internal = "data/kitty/mocha.conf"
|
|
||||||
external = "~/.config/kitty/mocha.conf"
|
|
||||||
|
|
||||||
[[apps.kitty.paths]]
|
|
||||||
internal = "data/kitty/latte.conf"
|
|
||||||
external = "~/.config/kitty/latte.conf"
|
|
||||||
|
|
||||||
[[apps.kitty.paths]]
|
|
||||||
internal = "data/kitty/kitty-dark.icns"
|
|
||||||
external = "~/.config/kitty/kitty.app.icns"
|
|
||||||
|
|
||||||
[[apps.kitty.paths]]
|
|
||||||
internal = "data/kitty/mocha.conf"
|
|
||||||
url = "https://raw.githubusercontent.com/catppuccin/kitty/main/themes/mocha.conf"
|
|
||||||
|
|
||||||
[[apps.kitty.paths]]
|
|
||||||
internal = "data/kitty/latte.conf"
|
|
||||||
url = "https://raw.githubusercontent.com/catppuccin/kitty/main/themes/latte.conf"
|
|
||||||
|
|
||||||
[[apps.kitty.paths]]
|
|
||||||
internal = "data/kitty/kitty-dark.icns"
|
|
||||||
url = "https://github.com/DinkDonk/kitty-icon/blob/main/kitty-dark.icns?raw=true"
|
|
||||||
|
|
||||||
[[apps.kitty.paths]]
|
|
||||||
internal = "data/kitty/kitty-light.icns"
|
|
||||||
url = "https://github.com/DinkDonk/kitty-icon/blob/main/kitty-light.icns?raw=true"
|
|
||||||
|
|
||||||
[[apps.wezterm.paths]]
|
|
||||||
internal = "data/wezterm"
|
|
||||||
external = "~/.config/wezterm"
|
|
||||||
|
|
||||||
[[apps.ghostty.paths]]
|
|
||||||
internal = "data/ghostty/config"
|
|
||||||
external = "~/.config/ghostty/config"
|
|
||||||
|
|
||||||
[[apps.ghostty.paths]]
|
|
||||||
internal = "data/ghostty/catppuccin-mocha.conf"
|
|
||||||
external = "~/.config/ghostty/catppuccin-mocha.conf"
|
|
||||||
|
|
||||||
[[apps.ghostty.paths]]
|
|
||||||
internal = "data/ghostty/catppuccin-mocha.conf"
|
|
||||||
url = "https://raw.githubusercontent.com/catppuccin/ghostty/refs/heads/main/themes/catppuccin-mocha.conf"
|
|
||||||
|
|
||||||
[[apps.fd.paths]]
|
|
||||||
internal = "data/fd/.ignore"
|
|
||||||
external = "~/.ignore"
|
|
||||||
|
|
||||||
[[apps.bat.paths]]
|
|
||||||
internal = "data/bat"
|
|
||||||
external = "~/.config/bat"
|
|
||||||
|
|
||||||
[[apps.bat.paths]]
|
|
||||||
internal = "data/bat/themes/Catppuccin Mocha.tmTheme"
|
|
||||||
url = "https://raw.githubusercontent.com/catppuccin/bat/main/themes/Catppuccin%20Mocha.tmTheme"
|
|
||||||
|
|
||||||
[[apps.delta.paths]]
|
|
||||||
internal = "data/delta/themes/catppuccin.gitconfig"
|
|
||||||
external = "~/.config/delta/themes/catppuccin.gitconfig"
|
|
||||||
|
|
||||||
[[apps.delta.paths]]
|
|
||||||
internal = "data/delta/themes/catppuccin.gitconfig"
|
|
||||||
url = "https://raw.githubusercontent.com/catppuccin/delta/main/catppuccin.gitconfig"
|
|
||||||
|
|
||||||
[[apps.ripgrep.paths]]
|
|
||||||
internal = "data/ripgrep"
|
|
||||||
external = "~/.config/ripgrep"
|
|
||||||
|
|
||||||
[[apps.zellij.paths]]
|
|
||||||
internal = "data/zellij"
|
|
||||||
external = "~/.config/zellij"
|
|
||||||
|
|
||||||
[[apps.starship.paths]]
|
|
||||||
internal = "data/starship/starship.toml"
|
|
||||||
external = "~/.config/starship/starship.toml"
|
|
||||||
|
|
||||||
[[apps.zed.paths]]
|
|
||||||
internal = "data/zed/settings.json"
|
|
||||||
external = "~/.config/zed/settings.json"
|
|
||||||
|
|
||||||
[[apps.zed.paths]]
|
|
||||||
internal = "data/zed/keymap.json"
|
|
||||||
external = "~/.config/zed/keymap.json"
|
|
||||||
|
|
||||||
[[apps.btop.paths]]
|
|
||||||
internal = "data/btop/themes"
|
|
||||||
external = "~/.config/btop/themes"
|
|
||||||
|
|
||||||
[[apps.btop.paths]]
|
|
||||||
internal = "data/btop/themes/catppuccin_mocha.theme"
|
|
||||||
url = "https://raw.githubusercontent.com/catppuccin/btop/main/themes/catppuccin_mocha.theme"
|
|
||||||
|
|
||||||
[[apps.newsboat.paths]]
|
|
||||||
internal = "data/newsboat/config"
|
|
||||||
external = "~/.config/newsboat/config"
|
|
||||||
|
|
||||||
[[apps.newsboat.paths]]
|
|
||||||
internal = "data/newsboat/urls"
|
|
||||||
external = "~/.config/newsboat/urls"
|
|
||||||
|
|
||||||
[[apps.newsboat.paths]]
|
|
||||||
internal = "data/newsboat/tiny_urls"
|
|
||||||
external = "~/.config/newsboat/tiny_urls"
|
|
||||||
|
|
||||||
[[apps.newsboat.paths]]
|
|
||||||
internal = "data/newsboat/dark"
|
|
||||||
external = "~/.config/newsboat/dark"
|
|
||||||
|
|
||||||
[[apps.newsboat.paths]]
|
|
||||||
internal = "data/newsboat/dark"
|
|
||||||
url = "https://raw.githubusercontent.com/catppuccin/newsboat/main/themes/dark"
|
|
||||||
|
|
||||||
[[apps.typos.paths]]
|
|
||||||
internal = "data/typos/typos.toml"
|
|
||||||
external = "~/.config/typos/typos.toml"
|
|
||||||
|
|
||||||
[[apps.daktilo.paths]]
|
|
||||||
internal = "data/daktilo/daktilo.toml"
|
|
||||||
external = "~/.config/daktilo/daktilo.toml"
|
|
||||||
|
|
||||||
[[apps.cargo.paths]]
|
|
||||||
internal = "data/cargo/config.toml"
|
|
||||||
external = "~/.cargo/config.toml"
|
|
|
@ -1,123 +0,0 @@
|
||||||
[delta "catppuccin-latte"]
|
|
||||||
blame-palette = "#eff1f5 #e6e9ef #dce0e8 #ccd0da #bcc0cc"
|
|
||||||
commit-decoration-style = "#9ca0b0" bold box ul
|
|
||||||
light = true
|
|
||||||
file-decoration-style = "#9ca0b0"
|
|
||||||
file-style = "#4c4f69"
|
|
||||||
hunk-header-decoration-style = "#9ca0b0" box ul
|
|
||||||
hunk-header-file-style = bold
|
|
||||||
hunk-header-line-number-style = bold "#6c6f85"
|
|
||||||
hunk-header-style = file line-number syntax
|
|
||||||
line-numbers-left-style = "#9ca0b0"
|
|
||||||
line-numbers-minus-style = bold "#d20f39"
|
|
||||||
line-numbers-plus-style = bold "#40a02b"
|
|
||||||
line-numbers-right-style = "#9ca0b0"
|
|
||||||
line-numbers-zero-style = "#9ca0b0"
|
|
||||||
# 25% red 75% base
|
|
||||||
minus-emph-style = bold syntax "#e8b9c6"
|
|
||||||
# 10% red 90% base
|
|
||||||
minus-style = syntax "#ecdae2"
|
|
||||||
# 25% green 75% base
|
|
||||||
plus-emph-style = bold syntax "#c3ddc3"
|
|
||||||
# 10% green 90% base
|
|
||||||
plus-style = syntax "#dee8e0"
|
|
||||||
map-styles = \
|
|
||||||
bold purple => syntax "#d5c3f4", \
|
|
||||||
bold blue => syntax "#bbcff5", \
|
|
||||||
bold cyan => syntax "#b4def1", \
|
|
||||||
bold yellow => syntax "#ebd9bf"
|
|
||||||
# Should match the name of the bat theme
|
|
||||||
syntax-theme = Catppuccin Latte
|
|
||||||
|
|
||||||
[delta "catppuccin-frappe"]
|
|
||||||
blame-palette = "#303446 #292c3c #232634 #414559 #51576d"
|
|
||||||
commit-decoration-style = "#737994" bold box ul
|
|
||||||
dark = true
|
|
||||||
file-decoration-style = "#737994"
|
|
||||||
file-style = "#c6d0f5"
|
|
||||||
hunk-header-decoration-style = "#737994" box ul
|
|
||||||
hunk-header-file-style = bold
|
|
||||||
hunk-header-line-number-style = bold "#a5adce"
|
|
||||||
hunk-header-style = file line-number syntax
|
|
||||||
line-numbers-left-style = "#737994"
|
|
||||||
line-numbers-minus-style = bold "#e78284"
|
|
||||||
line-numbers-plus-style = bold "#a6d189"
|
|
||||||
line-numbers-right-style = "#737994"
|
|
||||||
line-numbers-zero-style = "#737994"
|
|
||||||
# 25% red 75% base
|
|
||||||
minus-emph-style = bold syntax "#5e4855"
|
|
||||||
# 10% red 90% base
|
|
||||||
minus-style = syntax "#433c4c"
|
|
||||||
# 25% green 75% base
|
|
||||||
plus-emph-style = bold syntax "#4e5b56"
|
|
||||||
# 10% green 90% base
|
|
||||||
plus-style = syntax "#3c444d"
|
|
||||||
map-styles = \
|
|
||||||
bold purple => syntax "#574f6e", \
|
|
||||||
bold blue => syntax "#475270", \
|
|
||||||
bold cyan => syntax "#4a5b6b", \
|
|
||||||
bold yellow => syntax "#5d5958"
|
|
||||||
# Should match the name of the bat theme
|
|
||||||
syntax-theme = Catppuccin Frappe
|
|
||||||
|
|
||||||
[delta "catppuccin-macchiato"]
|
|
||||||
blame-palette = "#24273a #1e2030 #181926 #363a4f #494d64"
|
|
||||||
commit-decoration-style = "#6e738d" bold box ul
|
|
||||||
dark = true
|
|
||||||
file-decoration-style = "#6e738d"
|
|
||||||
file-style = "#cad3f5"
|
|
||||||
hunk-header-decoration-style = "#6e738d" box ul
|
|
||||||
hunk-header-file-style = bold
|
|
||||||
hunk-header-line-number-style = bold "#a5adcb"
|
|
||||||
hunk-header-style = file line-number syntax
|
|
||||||
line-numbers-left-style = "#6e738d"
|
|
||||||
line-numbers-minus-style = bold "#ed8796"
|
|
||||||
line-numbers-plus-style = bold "#a6da95"
|
|
||||||
line-numbers-right-style = "#6e738d"
|
|
||||||
line-numbers-zero-style = "#6e738d"
|
|
||||||
# 25% red 75% base
|
|
||||||
minus-emph-style = bold syntax "#563f51"
|
|
||||||
# 10% red 90% base
|
|
||||||
minus-style = syntax "#383143"
|
|
||||||
# 25% green 75% base
|
|
||||||
plus-emph-style = bold syntax "#455450"
|
|
||||||
# 10% green 90% base
|
|
||||||
plus-style = syntax "#313943"
|
|
||||||
map-styles = \
|
|
||||||
bold purple => syntax "#4d4569", \
|
|
||||||
bold blue => syntax "#3e4868", \
|
|
||||||
bold cyan => syntax "#3f5364", \
|
|
||||||
bold yellow => syntax "#575253"
|
|
||||||
# Should match the name of the bat theme
|
|
||||||
syntax-theme = Catppuccin Macchiato
|
|
||||||
|
|
||||||
[delta "catppuccin-mocha"]
|
|
||||||
blame-palette = "#1e1e2e #181825 #11111b #313244 #45475a"
|
|
||||||
commit-decoration-style = "#6c7086" bold box ul
|
|
||||||
dark = true
|
|
||||||
file-decoration-style = "#6c7086"
|
|
||||||
file-style = "#cdd6f4"
|
|
||||||
hunk-header-decoration-style = "#6c7086" box ul
|
|
||||||
hunk-header-file-style = bold
|
|
||||||
hunk-header-line-number-style = bold "#a6adc8"
|
|
||||||
hunk-header-style = file line-number syntax
|
|
||||||
line-numbers-left-style = "#6c7086"
|
|
||||||
line-numbers-minus-style = bold "#f38ba8"
|
|
||||||
line-numbers-plus-style = bold "#a6e3a1"
|
|
||||||
line-numbers-right-style = "#6c7086"
|
|
||||||
line-numbers-zero-style = "#6c7086"
|
|
||||||
# 25% red 75% base
|
|
||||||
minus-emph-style = bold syntax "#53394c"
|
|
||||||
# 10% red 90% base
|
|
||||||
minus-style = syntax "#34293a"
|
|
||||||
# 25% green 75% base
|
|
||||||
plus-emph-style = bold syntax "#404f4a"
|
|
||||||
# 10% green 90% base
|
|
||||||
plus-style = syntax "#2c3239"
|
|
||||||
map-styles = \
|
|
||||||
bold purple => syntax "#494060", \
|
|
||||||
bold blue => syntax "#384361", \
|
|
||||||
bold cyan => syntax "#384d5d", \
|
|
||||||
bold yellow => syntax "#544f4e"
|
|
||||||
# Should match the name of the bat theme
|
|
||||||
syntax-theme = Catppuccin Mocha
|
|
|
@ -1,54 +1,23 @@
|
||||||
# macOS
|
# macOS
|
||||||
Applications
|
|
||||||
Desktop
|
|
||||||
Documents
|
|
||||||
Library
|
|
||||||
Movies
|
|
||||||
Music
|
|
||||||
Pictures
|
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
|
||||||
# Window
|
|
||||||
*.exe
|
|
||||||
|
|
||||||
# IntelliJ
|
# IntelliJ
|
||||||
.idea
|
.idea
|
||||||
|
|
||||||
# VSCode
|
# VSCode
|
||||||
.vscode
|
.vscode
|
||||||
|
|
||||||
# Obsidian
|
# Git
|
||||||
.obsidian
|
.git
|
||||||
|
|
||||||
# Node
|
# Node
|
||||||
node_modules
|
node_modules
|
||||||
node
|
|
||||||
|
|
||||||
# Go
|
# Go
|
||||||
mod
|
mod
|
||||||
sumdb
|
sumdb
|
||||||
vendor
|
vendor
|
||||||
mock
|
generated
|
||||||
|
test
|
||||||
|
*generated*.go
|
||||||
*mock*.go
|
*mock*.go
|
||||||
coverage.out
|
|
||||||
|
|
||||||
# Python
|
|
||||||
venv
|
|
||||||
.venv
|
|
||||||
ruff_cache
|
|
||||||
__pycache__
|
|
||||||
|
|
||||||
# Java
|
|
||||||
*.class
|
|
||||||
|
|
||||||
# Wild chaos
|
|
||||||
*.out
|
|
||||||
|
|
||||||
# Software
|
|
||||||
~/qmk_firmware
|
|
||||||
|
|
||||||
# Work
|
|
||||||
submodules
|
|
||||||
|
|
||||||
# ThacSi
|
|
||||||
*.tsv
|
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
palette = 0=#45475a
|
|
||||||
palette = 1=#f38ba8
|
|
||||||
palette = 2=#a6e3a1
|
|
||||||
palette = 3=#f9e2af
|
|
||||||
palette = 4=#89b4fa
|
|
||||||
palette = 5=#f5c2e7
|
|
||||||
palette = 6=#94e2d5
|
|
||||||
palette = 7=#bac2de
|
|
||||||
palette = 8=#585b70
|
|
||||||
palette = 9=#f38ba8
|
|
||||||
palette = 10=#a6e3a1
|
|
||||||
palette = 11=#f9e2af
|
|
||||||
palette = 12=#89b4fa
|
|
||||||
palette = 13=#f5c2e7
|
|
||||||
palette = 14=#94e2d5
|
|
||||||
palette = 15=#a6adc8
|
|
||||||
background = 1e1e2e
|
|
||||||
foreground = cdd6f4
|
|
||||||
cursor-color = f5e0dc
|
|
||||||
selection-background = 353749
|
|
||||||
selection-foreground = cdd6f4
|
|
|
@ -1,46 +0,0 @@
|
||||||
config-file = catppuccin-mocha.conf
|
|
||||||
|
|
||||||
font-family = ""
|
|
||||||
font-family = Iosevka Pacman
|
|
||||||
font-family = Symbols Nerd Font Mono
|
|
||||||
font-size = 18
|
|
||||||
font-thicken = true
|
|
||||||
|
|
||||||
adjust-cell-height = 20%
|
|
||||||
|
|
||||||
cursor-style-blink = false
|
|
||||||
mouse-hide-while-typing = true
|
|
||||||
|
|
||||||
background-opacity = 0.95
|
|
||||||
background-blur-radius = 20
|
|
||||||
|
|
||||||
window-padding-x = 16
|
|
||||||
window-padding-y = 16
|
|
||||||
window-height = 24
|
|
||||||
window-width = 72
|
|
||||||
window-save-state = never
|
|
||||||
window-colorspace = display-p3
|
|
||||||
|
|
||||||
clipboard-trim-trailing-spaces = true
|
|
||||||
clipboard-paste-protection = true
|
|
||||||
|
|
||||||
quit-after-last-window-closed = true
|
|
||||||
|
|
||||||
macos-option-as-alt = true
|
|
||||||
macos-auto-secure-input = true
|
|
||||||
macos-secure-input-indication = true
|
|
||||||
|
|
||||||
bold-is-bright = true
|
|
||||||
|
|
||||||
# Inspire from Zellij
|
|
||||||
keybind = alt+n=new_split:right
|
|
||||||
keybind = alt+m=new_split:down
|
|
||||||
keybind = alt+p=goto_split:next
|
|
||||||
keybind = alt+[=previous_tab
|
|
||||||
keybind = alt+]=next_tab
|
|
||||||
keybind = ctrl+shift+left=previous_tab
|
|
||||||
keybind = ctrl+shift+right=next_tab
|
|
||||||
|
|
||||||
# https://github.com/ghostty-org/ghostty/pull/3107
|
|
||||||
keybind = alt+left=unbind
|
|
||||||
keybind = alt+right=unbind
|
|
|
@ -1,11 +0,0 @@
|
||||||
# macOS
|
|
||||||
.DS_Store
|
|
||||||
|
|
||||||
# Window
|
|
||||||
*.exe
|
|
||||||
|
|
||||||
# IntelliJ
|
|
||||||
.idea
|
|
||||||
|
|
||||||
# VSCode
|
|
||||||
.vscode
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
background #403e41
|
||||||
|
foreground #fcfcfa
|
||||||
|
|
||||||
|
cursor #fcfcfa
|
||||||
|
cursor_text_color #000000
|
||||||
|
selection_foreground #403e41
|
||||||
|
selection_background #fcfcfa
|
||||||
|
|
||||||
|
# dull black
|
||||||
|
color0 #403e41
|
||||||
|
# light black
|
||||||
|
color8 #727072
|
||||||
|
|
||||||
|
# dull red
|
||||||
|
color1 #ff6188
|
||||||
|
# light red
|
||||||
|
color9 #ff6188
|
||||||
|
|
||||||
|
# dull green
|
||||||
|
color2 #a9dc76
|
||||||
|
# light green
|
||||||
|
color10 #a9dc76
|
||||||
|
|
||||||
|
# yellow
|
||||||
|
color3 #ffd866
|
||||||
|
# light yellow
|
||||||
|
color11 #ffd866
|
||||||
|
|
||||||
|
# blue
|
||||||
|
color4 #fc9867
|
||||||
|
# light blue
|
||||||
|
color12 #fc9867
|
||||||
|
|
||||||
|
# magenta
|
||||||
|
color5 #ab9df2
|
||||||
|
# light magenta
|
||||||
|
color13 #ab9df2
|
||||||
|
|
||||||
|
# cyan
|
||||||
|
color6 #78dce8
|
||||||
|
# light cyan
|
||||||
|
color14 #78dce8
|
||||||
|
|
||||||
|
# dull white
|
||||||
|
color7 #fcfcfa
|
||||||
|
# bright white
|
||||||
|
color15 #fcfcfa
|
Binary file not shown.
Binary file not shown.
|
@ -1,64 +1,22 @@
|
||||||
# https://github.com/catppuccin/kitty
|
include Monokai Pro.conf
|
||||||
include mocha.conf
|
|
||||||
|
|
||||||
# https://sw.kovidgoyal.net/kitty/conf/#fonts
|
# https://sw.kovidgoyal.net/kitty/conf/#fonts
|
||||||
font_family Iosevka Pacman Regular
|
font_family Rec Mono Casual
|
||||||
font_size 18.0
|
font_size 14.0
|
||||||
|
|
||||||
modify_font cell_height 120%
|
|
||||||
|
|
||||||
# https://sw.kovidgoyal.net/kitty/conf/#cursor-customization
|
|
||||||
cursor_shape beam
|
|
||||||
cursor_blink_interval 0
|
|
||||||
cursor_trail 3
|
|
||||||
|
|
||||||
# https://sw.kovidgoyal.net/kitty/conf/#scrollback
|
|
||||||
scrollback_pager_history_size 16
|
|
||||||
|
|
||||||
# https://sw.kovidgoyal.net/kitty/conf/#mouse
|
|
||||||
strip_trailing_spaces smart
|
|
||||||
|
|
||||||
# https://sw.kovidgoyal.net/kitty/conf/#terminal-bell
|
# https://sw.kovidgoyal.net/kitty/conf/#terminal-bell
|
||||||
enable_audio_bell no
|
enable_audio_bell no
|
||||||
|
|
||||||
# https://sw.kovidgoyal.net/kitty/conf/#window-layout
|
# https://sw.kovidgoyal.net/kitty/conf/#window-layout
|
||||||
remember_window_size no
|
remember_window_size no
|
||||||
initial_window_width 720
|
initial_window_width 640
|
||||||
initial_window_height 480
|
initial_window_height 400
|
||||||
window_padding_width 16
|
|
||||||
enabled_layouts splits:split_axis=horizontal
|
|
||||||
|
|
||||||
# https://sw.kovidgoyal.net/kitty/conf/#tab-bar
|
|
||||||
tab_bar_align center
|
|
||||||
tab_bar_style powerline
|
|
||||||
tab_powerline_style round
|
|
||||||
|
|
||||||
# https://sw.kovidgoyal.net/kitty/conf/#color-scheme
|
|
||||||
background_opacity 0.95
|
|
||||||
background_blur 20
|
|
||||||
|
|
||||||
# https://sw.kovidgoyal.net/kitty/conf/#advanced
|
# https://sw.kovidgoyal.net/kitty/conf/#advanced
|
||||||
|
# https://github.com/jarun/nnn/blob/master/plugins/preview-tui
|
||||||
allow_remote_control yes
|
allow_remote_control yes
|
||||||
listen_on unix:$TMPDIR/kitty
|
listen_on unix:/tmp/kitty
|
||||||
|
|
||||||
# https://sw.kovidgoyal.net/kitty/conf/#os-specific-tweaks
|
# https://sw.kovidgoyal.net/kitty/conf/#os-specific-tweaks
|
||||||
macos_option_as_alt both
|
macos_option_as_alt both
|
||||||
macos_quit_when_last_window_closed yes
|
macos_quit_when_last_window_closed yes
|
||||||
macos_menubar_title_max_length 64
|
|
||||||
macos_colorspace displayp3
|
|
||||||
|
|
||||||
# https://sw.kovidgoyal.net/kitty/conf/#keyboard-shortcuts
|
|
||||||
# https://sw.kovidgoyal.net/kitty/actions/
|
|
||||||
action_alias launch_tab launch --cwd=oldest --type=tab --location=neighbor
|
|
||||||
map kitty_mod+t launch_tab
|
|
||||||
map super+t launch_tab
|
|
||||||
|
|
||||||
# Inspire from Zellij
|
|
||||||
map alt+n launch --cwd=oldest --location=vsplit
|
|
||||||
map alt+m launch --cwd=oldest --location=hsplit
|
|
||||||
map alt+p next_window
|
|
||||||
map alt+[ previous_tab
|
|
||||||
map alt+] next_tab
|
|
||||||
|
|
||||||
# Remove default
|
|
||||||
map cmd+r no_op
|
|
||||||
|
|
|
@ -1,80 +0,0 @@
|
||||||
# vim:ft=kitty
|
|
||||||
|
|
||||||
## name: Catppuccin Kitty Latte
|
|
||||||
## author: Catppuccin Org
|
|
||||||
## license: MIT
|
|
||||||
## upstream: https://github.com/catppuccin/kitty/blob/main/themes/latte.conf
|
|
||||||
## blurb: Soothing pastel theme for the high-spirited!
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# The basic colors
|
|
||||||
foreground #4c4f69
|
|
||||||
background #eff1f5
|
|
||||||
selection_foreground #eff1f5
|
|
||||||
selection_background #dc8a78
|
|
||||||
|
|
||||||
# Cursor colors
|
|
||||||
cursor #dc8a78
|
|
||||||
cursor_text_color #eff1f5
|
|
||||||
|
|
||||||
# URL underline color when hovering with mouse
|
|
||||||
url_color #dc8a78
|
|
||||||
|
|
||||||
# Kitty window border colors
|
|
||||||
active_border_color #7287fd
|
|
||||||
inactive_border_color #9ca0b0
|
|
||||||
bell_border_color #df8e1d
|
|
||||||
|
|
||||||
# OS Window titlebar colors
|
|
||||||
wayland_titlebar_color system
|
|
||||||
macos_titlebar_color system
|
|
||||||
|
|
||||||
# Tab bar colors
|
|
||||||
active_tab_foreground #eff1f5
|
|
||||||
active_tab_background #8839ef
|
|
||||||
inactive_tab_foreground #4c4f69
|
|
||||||
inactive_tab_background #9ca0b0
|
|
||||||
tab_bar_background #bcc0cc
|
|
||||||
|
|
||||||
# Colors for marks (marked text in the terminal)
|
|
||||||
mark1_foreground #eff1f5
|
|
||||||
mark1_background #7287fd
|
|
||||||
mark2_foreground #eff1f5
|
|
||||||
mark2_background #8839ef
|
|
||||||
mark3_foreground #eff1f5
|
|
||||||
mark3_background #209fb5
|
|
||||||
|
|
||||||
# The 16 terminal colors
|
|
||||||
|
|
||||||
# black
|
|
||||||
color0 #5c5f77
|
|
||||||
color8 #6c6f85
|
|
||||||
|
|
||||||
# red
|
|
||||||
color1 #d20f39
|
|
||||||
color9 #d20f39
|
|
||||||
|
|
||||||
# green
|
|
||||||
color2 #40a02b
|
|
||||||
color10 #40a02b
|
|
||||||
|
|
||||||
# yellow
|
|
||||||
color3 #df8e1d
|
|
||||||
color11 #df8e1d
|
|
||||||
|
|
||||||
# blue
|
|
||||||
color4 #1e66f5
|
|
||||||
color12 #1e66f5
|
|
||||||
|
|
||||||
# magenta
|
|
||||||
color5 #ea76cb
|
|
||||||
color13 #ea76cb
|
|
||||||
|
|
||||||
# cyan
|
|
||||||
color6 #179299
|
|
||||||
color14 #179299
|
|
||||||
|
|
||||||
# white
|
|
||||||
color7 #acb0be
|
|
||||||
color15 #bcc0cc
|
|
|
@ -1,80 +0,0 @@
|
||||||
# vim:ft=kitty
|
|
||||||
|
|
||||||
## name: Catppuccin Kitty Mocha
|
|
||||||
## author: Catppuccin Org
|
|
||||||
## license: MIT
|
|
||||||
## upstream: https://github.com/catppuccin/kitty/blob/main/themes/mocha.conf
|
|
||||||
## blurb: Soothing pastel theme for the high-spirited!
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# The basic colors
|
|
||||||
foreground #cdd6f4
|
|
||||||
background #1e1e2e
|
|
||||||
selection_foreground #1e1e2e
|
|
||||||
selection_background #f5e0dc
|
|
||||||
|
|
||||||
# Cursor colors
|
|
||||||
cursor #f5e0dc
|
|
||||||
cursor_text_color #1e1e2e
|
|
||||||
|
|
||||||
# URL underline color when hovering with mouse
|
|
||||||
url_color #f5e0dc
|
|
||||||
|
|
||||||
# Kitty window border colors
|
|
||||||
active_border_color #b4befe
|
|
||||||
inactive_border_color #6c7086
|
|
||||||
bell_border_color #f9e2af
|
|
||||||
|
|
||||||
# OS Window titlebar colors
|
|
||||||
wayland_titlebar_color system
|
|
||||||
macos_titlebar_color system
|
|
||||||
|
|
||||||
# Tab bar colors
|
|
||||||
active_tab_foreground #11111b
|
|
||||||
active_tab_background #cba6f7
|
|
||||||
inactive_tab_foreground #cdd6f4
|
|
||||||
inactive_tab_background #181825
|
|
||||||
tab_bar_background #11111b
|
|
||||||
|
|
||||||
# Colors for marks (marked text in the terminal)
|
|
||||||
mark1_foreground #1e1e2e
|
|
||||||
mark1_background #b4befe
|
|
||||||
mark2_foreground #1e1e2e
|
|
||||||
mark2_background #cba6f7
|
|
||||||
mark3_foreground #1e1e2e
|
|
||||||
mark3_background #74c7ec
|
|
||||||
|
|
||||||
# The 16 terminal colors
|
|
||||||
|
|
||||||
# black
|
|
||||||
color0 #45475a
|
|
||||||
color8 #585b70
|
|
||||||
|
|
||||||
# red
|
|
||||||
color1 #f38ba8
|
|
||||||
color9 #f38ba8
|
|
||||||
|
|
||||||
# green
|
|
||||||
color2 #a6e3a1
|
|
||||||
color10 #a6e3a1
|
|
||||||
|
|
||||||
# yellow
|
|
||||||
color3 #f9e2af
|
|
||||||
color11 #f9e2af
|
|
||||||
|
|
||||||
# blue
|
|
||||||
color4 #89b4fa
|
|
||||||
color12 #89b4fa
|
|
||||||
|
|
||||||
# magenta
|
|
||||||
color5 #f5c2e7
|
|
||||||
color13 #f5c2e7
|
|
||||||
|
|
||||||
# cyan
|
|
||||||
color6 #94e2d5
|
|
||||||
color14 #94e2d5
|
|
||||||
|
|
||||||
# white
|
|
||||||
color7 #bac2de
|
|
||||||
color15 #a6adc8
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
# https://github.com/connorholyday/nord-kitty
|
||||||
|
# Nord Colorscheme for Kitty
|
||||||
|
# Based on:
|
||||||
|
# - https://gist.github.com/marcusramberg/64010234c95a93d953e8c79fdaf94192
|
||||||
|
# - https://github.com/arcticicestudio/nord-hyper
|
||||||
|
|
||||||
|
foreground #D8DEE9
|
||||||
|
background #2E3440
|
||||||
|
selection_foreground #000000
|
||||||
|
selection_background #FFFACD
|
||||||
|
url_color #0087BD
|
||||||
|
cursor #81A1C1
|
||||||
|
|
||||||
|
# black
|
||||||
|
color0 #3B4252
|
||||||
|
color8 #4C566A
|
||||||
|
|
||||||
|
# red
|
||||||
|
color1 #BF616A
|
||||||
|
color9 #BF616A
|
||||||
|
|
||||||
|
# green
|
||||||
|
color2 #A3BE8C
|
||||||
|
color10 #A3BE8C
|
||||||
|
|
||||||
|
# yellow
|
||||||
|
color3 #EBCB8B
|
||||||
|
color11 #EBCB8B
|
||||||
|
|
||||||
|
# blue
|
||||||
|
color4 #81A1C1
|
||||||
|
color12 #81A1C1
|
||||||
|
|
||||||
|
# magenta
|
||||||
|
color5 #B48EAD
|
||||||
|
color13 #B48EAD
|
||||||
|
|
||||||
|
# cyan
|
||||||
|
color6 #88C0D0
|
||||||
|
color14 #8FBCBB
|
||||||
|
|
||||||
|
# white
|
||||||
|
color7 #E5E9F0
|
||||||
|
color15 #ECEFF4
|
|
@ -0,0 +1,23 @@
|
||||||
|
# https://github.com/dexpota/kitty-themes
|
||||||
|
# One Dark
|
||||||
|
foreground #979eab
|
||||||
|
background #282c34
|
||||||
|
cursor #cccccc
|
||||||
|
color0 #282c34
|
||||||
|
color1 #e06c75
|
||||||
|
color2 #98c379
|
||||||
|
color3 #e5c07b
|
||||||
|
color4 #61afef
|
||||||
|
color5 #be5046
|
||||||
|
color6 #56b6c2
|
||||||
|
color7 #979eab
|
||||||
|
color8 #393e48
|
||||||
|
color9 #d19a66
|
||||||
|
color10 #56b6c2
|
||||||
|
color11 #e5c07b
|
||||||
|
color12 #61afef
|
||||||
|
color13 #be5046
|
||||||
|
color14 #56b6c2
|
||||||
|
color15 #abb2bf
|
||||||
|
selection_foreground #282c34
|
||||||
|
selection_background #979eab
|
|
@ -1,27 +0,0 @@
|
||||||
# https://wiki.archlinux.org/title/Newsboat
|
|
||||||
|
|
||||||
include ~/.config/newsboat/dark
|
|
||||||
|
|
||||||
confirm-mark-all-feeds-read no
|
|
||||||
confirm-mark-feed-read no
|
|
||||||
display-article-progress yes
|
|
||||||
download-retries 4
|
|
||||||
keep-articles-days 120
|
|
||||||
max-items 100
|
|
||||||
reload-threads 8
|
|
||||||
scrolloff 4
|
|
||||||
text-width 120
|
|
||||||
|
|
||||||
# https://m-chrzan.xyz/blog/vim-keybindings-for-newsboat.html
|
|
||||||
unbind-key g
|
|
||||||
unbind-key G
|
|
||||||
bind-key g home
|
|
||||||
bind-key G end
|
|
||||||
|
|
||||||
unbind-key j
|
|
||||||
unbind-key k
|
|
||||||
bind-key j down
|
|
||||||
bind-key k up
|
|
||||||
|
|
||||||
# https://github.com/newsboat/newsboat/issues/1295
|
|
||||||
browser "open %u"
|
|
|
@ -1,18 +0,0 @@
|
||||||
color listnormal color15 default
|
|
||||||
color listnormal_unread color2 default
|
|
||||||
color listfocus_unread color2 color0
|
|
||||||
color listfocus default color0
|
|
||||||
color background default default
|
|
||||||
color article default default
|
|
||||||
color end-of-text-marker color8 default
|
|
||||||
color info color4 color8
|
|
||||||
color hint-separator default color8
|
|
||||||
color hint-description default color8
|
|
||||||
color title color14 color8
|
|
||||||
|
|
||||||
highlight article "^(Feed|Title|Author|Link|Date): .+" color4 default bold
|
|
||||||
highlight article "^(Feed|Title|Author|Link|Date):" color14 default bold
|
|
||||||
|
|
||||||
highlight article "\\((link|image|video)\\)" color8 default
|
|
||||||
highlight article "https?://[^ ]+" color4 default
|
|
||||||
highlight article "\[[0-9]+\]" color6 default bold
|
|
|
@ -1,12 +0,0 @@
|
||||||
https://golangweekly.com/rss/
|
|
||||||
|
|
||||||
http://feeds.feedburner.com/ThePragmaticEngineer
|
|
||||||
https://brandur.org/articles.atom
|
|
||||||
https://brandur.org/fragments.atom
|
|
||||||
https://dave.cheney.net/feed/atom
|
|
||||||
https://michael.stapelberg.ch/feed.xml
|
|
||||||
https://mitchellh.com/feed.xml
|
|
||||||
https://registerspill.thorstenball.com/feed
|
|
||||||
|
|
||||||
https://kbd.news/rss.php
|
|
||||||
https://www.theremingoat.com/blog?format=rss
|
|
|
@ -1,70 +0,0 @@
|
||||||
https://github.com/golang/go/commits/master.atom "~go"
|
|
||||||
https://github.com/golang/tools/commits/master.atom "~go/tools"
|
|
||||||
|
|
||||||
https://github.com/IBM/sarama/commits/main.atom "~sarama"
|
|
||||||
https://github.com/gin-gonic/gin/commits/master.atom "~gin"
|
|
||||||
https://github.com/go-gorm/gorm/commits/master.atom "~gorm"
|
|
||||||
https://github.com/go-gorm/mysql/commits/master.atom "~gorm/mysql"
|
|
||||||
https://github.com/go-sql-driver/mysql/commits/master.atom "~mysql"
|
|
||||||
https://github.com/grpc-ecosystem/grpc-gateway/commits/main.atom "~grpc-gateway"
|
|
||||||
https://github.com/grpc/grpc-go/commits/master.atom "~grpc-go"
|
|
||||||
https://github.com/protocolbuffers/protobuf-go/commits/master.atom "~protobuf-go"
|
|
||||||
https://github.com/redis/go-redis/commits/master.atom "~go-redis"
|
|
||||||
https://github.com/serengil/deepface/commits/master.atom "~deepface"
|
|
||||||
https://github.com/sourcegraph/conc/commits/main.atom "~conc"
|
|
||||||
https://github.com/tidwall/gjson/commits/master.atom "~gjson"
|
|
||||||
https://github.com/uber-go/zap/commits/master.atom "~zap"
|
|
||||||
|
|
||||||
https://github.com/be5invis/Iosevka/commits/main.atom "~Iosevka"
|
|
||||||
https://github.com/kovidgoyal/kitty/commits/master.atom "~kitty"
|
|
||||||
https://github.com/wez/wezterm/commits/main.atom "~wezterm"
|
|
||||||
https://github.com/ghostty-org/ghostty/commits/main.atom "~ghostty"
|
|
||||||
https://github.com/AsahiLinux/linux/commits/asahi.atom "~AsahiLinux/linux"
|
|
||||||
https://github.com/AsahiLinux/m1n1/commits/main.atom "~AsahiLinux/m1n1"
|
|
||||||
|
|
||||||
http://antirez.com/rss
|
|
||||||
http://feeds.feedburner.com/ThePragmaticEngineer
|
|
||||||
https://0pointer.net/blog/index.atom
|
|
||||||
https://andrewkelley.me/rss.xml
|
|
||||||
https://apenwarr.ca/log/rss.php
|
|
||||||
https://blog.codinghorror.com/rss/
|
|
||||||
https://brandur.org/articles.atom
|
|
||||||
https://brandur.org/fragments.atom
|
|
||||||
https://code.dblock.org/feed.xml
|
|
||||||
https://daniel.haxx.se/blog/feed/
|
|
||||||
https://dave.cheney.net/feed/atom
|
|
||||||
https://dotat.at/@/blog.atom
|
|
||||||
https://drewdevault.com/blog/index.xml
|
|
||||||
https://jvns.ca/atom.xml
|
|
||||||
https://matklad.github.io/feed.xml
|
|
||||||
https://matthewstrom.com/feed.xml
|
|
||||||
https://michael.stapelberg.ch/feed.xml
|
|
||||||
https://mitchellh.com/feed.xml
|
|
||||||
https://registerspill.thorstenball.com/feed
|
|
||||||
https://research.swtch.com/feed.atom
|
|
||||||
https://rosenzweig.io/feed.xml
|
|
||||||
https://stephango.com/feed.xml
|
|
||||||
https://tonsky.me/atom.xml
|
|
||||||
https://words.filippo.io/rss
|
|
||||||
|
|
||||||
https://go.dev/blog/feed.atom
|
|
||||||
https://golangweekly.com/rss/
|
|
||||||
https://tigerbeetle.com/blog/atom.xml
|
|
||||||
https://asahilinux.org/blog/index.xml
|
|
||||||
https://kbd.news/rss.php
|
|
||||||
|
|
||||||
https://neovim.io/news.xml
|
|
||||||
https://developer.apple.com/news/releases/rss/releases.rss
|
|
||||||
https://rsshub.app/amazon/kindle/software-updates
|
|
||||||
|
|
||||||
https://github.com/caksoylar/keymap-drawer/commits/main.atom "~keymap-drawer"
|
|
||||||
https://github.com/qmk/qmk_firmware/commits/develop.atom "~qmk_firmware/develop"
|
|
||||||
https://github.com/qmk/qmk_firmware/commits/master.atom "~qmk_firmware"
|
|
||||||
|
|
||||||
https://nyaa.si/?f=0&c=1_2&q=doraemon+movie&page=rss "~Doraemon movie"
|
|
||||||
https://nyaa.si/?f=0&c=1_4&q=doraemon+movie&page=rss "~Doraemon movie raw"
|
|
||||||
https://nyaa.si/?f=0&c=1_2&q=conan+movie&page=rss "~Conan movie"
|
|
||||||
https://nyaa.si/?f=0&c=1_4&q=conan+movie&page=rss "~Conan movie raw"
|
|
||||||
https://nyaa.si/?f=0&c=3_1&q=Detective+Conan&page=rss "~Conan manga"
|
|
||||||
https://nyaa.si/?f=0&c=3_1&q=one+piece&page=rss "~One Piece manga"
|
|
||||||
http://fitgirl-repacks.site/feed/
|
|
|
@ -1,648 +0,0 @@
|
||||||
-- https://neovim.io/doc/user/lua-guide.html
|
|
||||||
vim.opt.completeopt = { "menuone", "noinsert", "noselect" }
|
|
||||||
vim.opt.swapfile = false
|
|
||||||
vim.opt.title = true
|
|
||||||
vim.opt.virtualedit = "block"
|
|
||||||
vim.opt.whichwrap = "<,>,[,]"
|
|
||||||
|
|
||||||
-- Case character
|
|
||||||
vim.opt.ignorecase = true
|
|
||||||
vim.opt.smartcase = true
|
|
||||||
|
|
||||||
-- Line number
|
|
||||||
vim.opt.number = true
|
|
||||||
vim.opt.relativenumber = true
|
|
||||||
vim.opt.scrolloff = 4
|
|
||||||
vim.opt.signcolumn = "number"
|
|
||||||
|
|
||||||
-- Tab
|
|
||||||
vim.opt.tabstop = 4
|
|
||||||
vim.opt.shiftwidth = 4
|
|
||||||
vim.opt.expandtab = true
|
|
||||||
|
|
||||||
-- Wrap
|
|
||||||
vim.opt.breakindent = true
|
|
||||||
|
|
||||||
-- Clipboard support
|
|
||||||
vim.opt.clipboard = "unnamedplus"
|
|
||||||
|
|
||||||
-- Mouse support
|
|
||||||
vim.opt.mouse = "a"
|
|
||||||
vim.opt.mousemodel = "popup"
|
|
||||||
vim.opt.mousescroll = "ver:4,hor:6"
|
|
||||||
|
|
||||||
-- Annoying
|
|
||||||
vim.cmd([[aunmenu PopUp.How-to\ disable\ mouse]])
|
|
||||||
vim.cmd([[aunmenu PopUp.-1-]])
|
|
||||||
|
|
||||||
-- Workaround
|
|
||||||
-- https://github.com/neovim/neovim/issues/16416
|
|
||||||
-- https://github.com/rafamadriz/dotfiles/commit/1298a91558a7def5866ebee3a0b13899a6d1a78e
|
|
||||||
vim.keymap.set("i", "<C-c>", "<C-c>")
|
|
||||||
|
|
||||||
-- Typo
|
|
||||||
vim.cmd("command W w")
|
|
||||||
vim.cmd("command Q q")
|
|
||||||
vim.cmd("command WQ wq")
|
|
||||||
vim.cmd("command Wq wq")
|
|
||||||
vim.cmd("command QA qa")
|
|
||||||
vim.cmd("command Qa qa")
|
|
||||||
|
|
||||||
-- Leader
|
|
||||||
vim.g.mapleader = ";"
|
|
||||||
vim.keymap.set("n", "'", "<Leader>", { remap = true })
|
|
||||||
|
|
||||||
-- Keymap
|
|
||||||
vim.keymap.set("n", "<Leader>w", ":w<CR>")
|
|
||||||
vim.keymap.set("n", "n", "nzz")
|
|
||||||
vim.keymap.set("n", "N", "Nzz")
|
|
||||||
vim.keymap.set("n", "{", "{zz")
|
|
||||||
vim.keymap.set("n", "}", "}zz")
|
|
||||||
|
|
||||||
-- Unnamed register aka black hole to not push to register aka trigger yank
|
|
||||||
vim.keymap.set({ "n", "v" }, "<Leader>d", '"_d')
|
|
||||||
vim.keymap.set({ "n", "v" }, "<Leader>c", '"_c')
|
|
||||||
vim.keymap.set({ "n", "v" }, "<Leader>x", '"_x')
|
|
||||||
|
|
||||||
-- Conflict with :q
|
|
||||||
-- https://neovim.io/doc/user/cmdline.html#c_CTRL-F
|
|
||||||
vim.keymap.set({ "n", "v" }, "q:", "<Nop>")
|
|
||||||
|
|
||||||
-- Conflict with QMK Space Cadet
|
|
||||||
vim.keymap.set({ "n", "v" }, "(", "<Nop>")
|
|
||||||
vim.keymap.set({ "n", "v" }, ")", "<Nop>")
|
|
||||||
|
|
||||||
-- Disable scrolling
|
|
||||||
-- https://neovim.io/doc/user/scroll.html
|
|
||||||
vim.keymap.set({ "n", "v" }, "<C-e>", "<Nop>")
|
|
||||||
vim.keymap.set({ "n", "v" }, "<C-d>", "<Nop>")
|
|
||||||
vim.keymap.set({ "n", "v" }, "<C-f>", "<Nop>")
|
|
||||||
vim.keymap.set({ "n", "v" }, "<C-y>", "<Nop>")
|
|
||||||
vim.keymap.set({ "n", "v" }, "<C-u>", "<Nop>")
|
|
||||||
vim.keymap.set({ "n", "v" }, "<C-b>", "<Nop>")
|
|
||||||
|
|
||||||
-- Disable more
|
|
||||||
vim.g.loaded_python3_provider = 0
|
|
||||||
vim.g.loaded_ruby_provider = 0
|
|
||||||
vim.g.loaded_node_provider = 0
|
|
||||||
vim.g.loaded_perl_provider = 0
|
|
||||||
|
|
||||||
-- https://github.com/folke/lazy.nvim
|
|
||||||
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
|
|
||||||
if not vim.loop.fs_stat(lazypath) then
|
|
||||||
vim.fn.system({
|
|
||||||
"git",
|
|
||||||
"clone",
|
|
||||||
"--filter=blob:none",
|
|
||||||
"https://github.com/folke/lazy.nvim.git",
|
|
||||||
"--branch=stable",
|
|
||||||
lazypath,
|
|
||||||
})
|
|
||||||
end
|
|
||||||
vim.opt.rtp:prepend(lazypath)
|
|
||||||
|
|
||||||
require("lazy").setup({
|
|
||||||
-- Colorschemes
|
|
||||||
-- https://github.com/catppuccin/nvim
|
|
||||||
{
|
|
||||||
"catppuccin/nvim",
|
|
||||||
name = "catppuccin",
|
|
||||||
priority = 1000,
|
|
||||||
config = function()
|
|
||||||
-- https://github.com/nyoom-engineering/oxocarbon.nvim
|
|
||||||
local color_oxocarbon = {
|
|
||||||
pink = "#ff7eb6",
|
|
||||||
purple = "#be95ff",
|
|
||||||
}
|
|
||||||
|
|
||||||
require("catppuccin").setup({
|
|
||||||
flavour = "mocha",
|
|
||||||
transparent_background = true,
|
|
||||||
color_overrides = {
|
|
||||||
mocha = {
|
|
||||||
-- https://github.com/catppuccin/nvim/blob/main/lua/catppuccin/palettes/mocha.lua
|
|
||||||
flamingo = color_oxocarbon.pink,
|
|
||||||
pink = color_oxocarbon.pink,
|
|
||||||
mauve = color_oxocarbon.purple,
|
|
||||||
red = color_oxocarbon.pink,
|
|
||||||
maroon = color_oxocarbon.pink,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
custom_highlights = function(colors)
|
|
||||||
return {
|
|
||||||
-- Help my eyes
|
|
||||||
Comment = {
|
|
||||||
fg = colors.overlay2,
|
|
||||||
},
|
|
||||||
LineNr = {
|
|
||||||
fg = colors.overlay1,
|
|
||||||
},
|
|
||||||
markdownLinkText = {
|
|
||||||
style = {},
|
|
||||||
},
|
|
||||||
EndOfBuffer = {
|
|
||||||
link = "NonText",
|
|
||||||
},
|
|
||||||
-- Support mini.statusline
|
|
||||||
MiniStatuslineFilename = {
|
|
||||||
link = "StatusLine",
|
|
||||||
},
|
|
||||||
MiniStatuslineInactive = {
|
|
||||||
link = "StatusLine",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
integrations = {
|
|
||||||
treesitter_context = false,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
vim.cmd("colorscheme catppuccin")
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
|
|
||||||
-- https://github.com/ibhagwan/fzf-lua
|
|
||||||
{
|
|
||||||
"ibhagwan/fzf-lua",
|
|
||||||
dependencies = {
|
|
||||||
"neovim/nvim-lspconfig",
|
|
||||||
},
|
|
||||||
opts = {
|
|
||||||
winopts = {
|
|
||||||
preview = {
|
|
||||||
default = "bat",
|
|
||||||
wrap = "wrap",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
files = {
|
|
||||||
path_shorten = 1,
|
|
||||||
},
|
|
||||||
grep = {
|
|
||||||
multiline = 1,
|
|
||||||
},
|
|
||||||
fzf_colors = true,
|
|
||||||
},
|
|
||||||
config = function()
|
|
||||||
vim.keymap.set({ "n", "v" }, "<Leader>f", ":FzfLua files<CR>")
|
|
||||||
vim.keymap.set({ "n", "v" }, "<Leader>l", ":FzfLua blines<CR>")
|
|
||||||
vim.keymap.set({ "n", "v" }, "<Leader>rg", ":FzfLua live_grep_resume<CR>")
|
|
||||||
vim.keymap.set({ "n", "v" }, "<Space>s", ":FzfLua lsp_document_symbols<CR>")
|
|
||||||
vim.keymap.set({ "n", "v" }, "<Space>r", ":FzfLua lsp_references<CR>")
|
|
||||||
vim.keymap.set({ "n", "v" }, "gr", ":FzfLua lsp_references<CR>")
|
|
||||||
vim.keymap.set({ "n", "v" }, "<Space>i", ":FzfLua lsp_implementations<CR>")
|
|
||||||
vim.keymap.set({ "n", "v" }, "<Space>ca", ":FzfLua lsp_code_actions previewer=false<CR>")
|
|
||||||
vim.keymap.set({ "n", "v" }, "<Space>d", ":FzfLua diagnostics_document<CR>")
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
|
|
||||||
-- https://github.com/Saghen/blink.cmp
|
|
||||||
{
|
|
||||||
"saghen/blink.cmp",
|
|
||||||
version = "v0.*",
|
|
||||||
opts = {
|
|
||||||
keymap = {
|
|
||||||
preset = "none",
|
|
||||||
["<C-space>"] = { "show", "show_documentation", "hide_documentation", "fallback" },
|
|
||||||
["<CR>"] = { "select_and_accept", "fallback" },
|
|
||||||
["<Up>"] = { "select_prev", "fallback" },
|
|
||||||
["<Down>"] = { "select_next", "fallback" },
|
|
||||||
},
|
|
||||||
completion = {
|
|
||||||
trigger = {
|
|
||||||
show_in_snippet = false,
|
|
||||||
show_on_keyword = false,
|
|
||||||
show_on_trigger_character = false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- https://github.com/tpope/vim-projectionist
|
|
||||||
{
|
|
||||||
"tpope/vim-projectionist",
|
|
||||||
ft = "go",
|
|
||||||
init = function()
|
|
||||||
vim.g.projectionist_heuristics = {
|
|
||||||
["*.go"] = {
|
|
||||||
["*.go"] = {
|
|
||||||
alternate = "{}_test.go",
|
|
||||||
type = "source",
|
|
||||||
},
|
|
||||||
["*_generated.go"] = {
|
|
||||||
alternate = "{}_test.go",
|
|
||||||
type = "source",
|
|
||||||
},
|
|
||||||
["*_test.go"] = {
|
|
||||||
alternate = { "{}.go", "{}_generated.go" },
|
|
||||||
type = "test",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
config = function()
|
|
||||||
vim.keymap.set("n", "<Leader>a", ":A<CR>")
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
|
|
||||||
-- https://github.com/neovim/neovim/issues/12374
|
|
||||||
-- https://github.com/svban/YankAssassin.nvim
|
|
||||||
{
|
|
||||||
"svban/YankAssassin.nvim",
|
|
||||||
opts = {
|
|
||||||
auto_normal = true,
|
|
||||||
auto_visual = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- https://github.com/echasnovski/mini.nvim
|
|
||||||
{
|
|
||||||
"echasnovski/mini.nvim",
|
|
||||||
config = function()
|
|
||||||
-- https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-bracketed.md
|
|
||||||
require("mini.bracketed").setup({
|
|
||||||
{
|
|
||||||
buffer = { suffix = "", options = {} },
|
|
||||||
file = { suffix = "", options = {} },
|
|
||||||
indent = { suffix = "", options = {} },
|
|
||||||
jump = { suffix = "", options = {} },
|
|
||||||
location = { suffix = "", options = {} },
|
|
||||||
oldfile = { suffix = "", options = {} },
|
|
||||||
undo = { suffix = "", options = {} },
|
|
||||||
window = { suffix = "", options = {} },
|
|
||||||
yank = { suffix = "", options = {} },
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
-- https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-cursorword.md
|
|
||||||
require("mini.cursorword").setup()
|
|
||||||
|
|
||||||
-- https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-files.md
|
|
||||||
require("mini.files").setup({
|
|
||||||
mappings = {
|
|
||||||
go_in = "",
|
|
||||||
go_in_plus = "<CR>",
|
|
||||||
go_out = "",
|
|
||||||
go_out_plus = "<BS>",
|
|
||||||
reset = "",
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
vim.keymap.set("n", "<C-n>", ":lua MiniFiles.open(nil, false)<CR>")
|
|
||||||
vim.keymap.set("n", "<Leader>n", ":lua MiniFiles.open(vim.api.nvim_buf_get_name(0), false)<CR>")
|
|
||||||
|
|
||||||
-- https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-hipatterns.md
|
|
||||||
local hipatterns = require("mini.hipatterns")
|
|
||||||
hipatterns.setup({
|
|
||||||
highlighters = {
|
|
||||||
hex_color = hipatterns.gen_highlighter.hex_color(),
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
-- https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-diff.md
|
|
||||||
require("mini.diff").setup({
|
|
||||||
options = {
|
|
||||||
wrap_goto = true,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
-- https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-git.md
|
|
||||||
require("mini.git").setup()
|
|
||||||
|
|
||||||
-- https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-icons.md
|
|
||||||
require("mini.icons").setup()
|
|
||||||
|
|
||||||
-- https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-pairs.md
|
|
||||||
require("mini.pairs").setup()
|
|
||||||
|
|
||||||
-- https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-statusline.md
|
|
||||||
require("mini.statusline").setup()
|
|
||||||
|
|
||||||
-- https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-surround.md
|
|
||||||
require("mini.surround").setup()
|
|
||||||
|
|
||||||
-- My Sofle V2 do not have map `[`, `]` directly
|
|
||||||
vim.keymap.set("n", ")d", "]d", { remap = true })
|
|
||||||
vim.keymap.set("n", "(d", "[d", { remap = true })
|
|
||||||
vim.keymap.set("n", ")D", "]D", { remap = true })
|
|
||||||
vim.keymap.set("n", "(D", "[D", { remap = true })
|
|
||||||
|
|
||||||
vim.keymap.set("n", ")c", "]c", { remap = true })
|
|
||||||
vim.keymap.set("n", "(c", "[c", { remap = true })
|
|
||||||
vim.keymap.set("n", ")C", "]C", { remap = true })
|
|
||||||
vim.keymap.set("n", "(C", "[C", { remap = true })
|
|
||||||
|
|
||||||
vim.keymap.set("n", ")x", "]x", { remap = true })
|
|
||||||
vim.keymap.set("n", "(x", "[x", { remap = true })
|
|
||||||
vim.keymap.set("n", ")X", "]X", { remap = true })
|
|
||||||
vim.keymap.set("n", "(X", "[X", { remap = true })
|
|
||||||
|
|
||||||
vim.keymap.set("n", ")t", "]t", { remap = true })
|
|
||||||
vim.keymap.set("n", "(t", "[t", { remap = true })
|
|
||||||
vim.keymap.set("n", ")T", "]T", { remap = true })
|
|
||||||
vim.keymap.set("n", "(T", "[T", { remap = true })
|
|
||||||
|
|
||||||
vim.keymap.set("n", ")h", "]h", { remap = true })
|
|
||||||
vim.keymap.set("n", "(h", "[h", { remap = true })
|
|
||||||
vim.keymap.set("n", ")H", "]H", { remap = true })
|
|
||||||
vim.keymap.set("n", "(H", "[H", { remap = true })
|
|
||||||
|
|
||||||
-- Use cl instead of s
|
|
||||||
vim.keymap.set({ "n", "x" }, "s", "<Nop>")
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Programming languages
|
|
||||||
-- https://github.com/aklt/plantuml-syntax
|
|
||||||
{
|
|
||||||
"aklt/plantuml-syntax",
|
|
||||||
ft = {
|
|
||||||
"plantuml",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- https://github.com/NoahTheDuke/vim-just
|
|
||||||
{
|
|
||||||
"NoahTheDuke/vim-just",
|
|
||||||
ft = {
|
|
||||||
"just",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- https://github.com/stevearc/conform.nvim
|
|
||||||
{
|
|
||||||
"stevearc/conform.nvim",
|
|
||||||
config = function()
|
|
||||||
local conform = require("conform")
|
|
||||||
conform.setup({
|
|
||||||
formatters_by_ft = {
|
|
||||||
["_"] = { "trim_whitespace" },
|
|
||||||
bash = { "shfmt" },
|
|
||||||
go = { "gofumpt" },
|
|
||||||
javascript = { "deno_fmt" },
|
|
||||||
json = { "deno_fmt" },
|
|
||||||
just = { "just" },
|
|
||||||
lua = { "stylua" },
|
|
||||||
markdown = { "deno_fmt" },
|
|
||||||
proto = { "buf" },
|
|
||||||
python = { "ruff_fix", "ruff_format" },
|
|
||||||
sh = { "shfmt" },
|
|
||||||
sql = { "sqlfluff" },
|
|
||||||
toml = { "trim_whitespace", "taplo" },
|
|
||||||
typst = { "typstyle" },
|
|
||||||
yaml = { "prettier" },
|
|
||||||
zsh = { "shfmt" },
|
|
||||||
},
|
|
||||||
formatters = {
|
|
||||||
-- https://github.com/stevearc/conform.nvim/blob/master/lua/conform/formatters/gofumpt.lua
|
|
||||||
gofumpt = {
|
|
||||||
prepend_args = { "-extra" },
|
|
||||||
},
|
|
||||||
-- https://github.com/stevearc/conform.nvim/blob/master/lua/conform/formatters/shfmt.lua
|
|
||||||
shfmt = {
|
|
||||||
prepend_args = { "-s", "-i", "4" },
|
|
||||||
},
|
|
||||||
-- https://github.com/stevearc/conform.nvim/blob/master/lua/conform/formatters/taplo.lua
|
|
||||||
taplo = {
|
|
||||||
args = { "fmt", "-o", "indent_string= ", "-o", "allowed_blank_lines=1", "-" },
|
|
||||||
},
|
|
||||||
-- https://github.com/stevearc/conform.nvim/blob/master/lua/conform/formatters/sqlfluff.lua
|
|
||||||
sqlfluff = {
|
|
||||||
args = { "fix", "--dialect=mysql", "-" },
|
|
||||||
},
|
|
||||||
-- https://github.com/stevearc/conform.nvim/blob/master/lua/conform/formatters/ruff_format.lua
|
|
||||||
ruff_format = {
|
|
||||||
args = {
|
|
||||||
"format",
|
|
||||||
"--force-exclude",
|
|
||||||
"--line-length",
|
|
||||||
"120",
|
|
||||||
"--stdin-filename",
|
|
||||||
"$FILENAME",
|
|
||||||
"-",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
vim.keymap.set("n", "<Space>f", function()
|
|
||||||
conform.format()
|
|
||||||
end)
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
|
|
||||||
-- https://github.com/nvim-treesitter/nvim-treesitter
|
|
||||||
{
|
|
||||||
"nvim-treesitter/nvim-treesitter",
|
|
||||||
build = {
|
|
||||||
":TSUpdate",
|
|
||||||
},
|
|
||||||
opts = {
|
|
||||||
ensure_installed = {
|
|
||||||
"bash",
|
|
||||||
"dockerfile",
|
|
||||||
"git_config",
|
|
||||||
"gitcommit",
|
|
||||||
"go",
|
|
||||||
"json",
|
|
||||||
"just",
|
|
||||||
"lua",
|
|
||||||
"make",
|
|
||||||
"markdown",
|
|
||||||
"markdown_inline",
|
|
||||||
"proto",
|
|
||||||
"python",
|
|
||||||
"sql",
|
|
||||||
"toml",
|
|
||||||
"typst",
|
|
||||||
"yaml",
|
|
||||||
},
|
|
||||||
highlight = {
|
|
||||||
enabled = true,
|
|
||||||
disable = function(lang, bufnr)
|
|
||||||
-- Skip big files with many lines
|
|
||||||
return vim.api.nvim_buf_line_count(bufnr) > 10000
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
incremental_selection = { enable = false },
|
|
||||||
textobjects = { enable = false },
|
|
||||||
indent = { enable = false },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- https://github.com/nvim-treesitter/nvim-treesitter-context
|
|
||||||
{
|
|
||||||
"nvim-treesitter/nvim-treesitter-context",
|
|
||||||
dependencies = {
|
|
||||||
"nvim-treesitter/nvim-treesitter",
|
|
||||||
},
|
|
||||||
opts = {
|
|
||||||
enable = true,
|
|
||||||
max_lines = 2,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- https://github.com/nvim-treesitter/nvim-treesitter-textobjects
|
|
||||||
{
|
|
||||||
"nvim-treesitter/nvim-treesitter-textobjects",
|
|
||||||
dependencies = {
|
|
||||||
"nvim-treesitter/nvim-treesitter",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- https://github.com/neovim/nvim-lspconfig
|
|
||||||
{
|
|
||||||
"neovim/nvim-lspconfig",
|
|
||||||
ft = {
|
|
||||||
"go",
|
|
||||||
"markdown",
|
|
||||||
"python",
|
|
||||||
"typst",
|
|
||||||
},
|
|
||||||
config = function()
|
|
||||||
local lspconfig = require("lspconfig")
|
|
||||||
|
|
||||||
-- Go
|
|
||||||
-- https://github.com/golang/tools/blob/master/gopls/doc/vim.md
|
|
||||||
-- https://github.com/golang/tools/blob/master/gopls/doc/settings.md
|
|
||||||
-- https://github.com/neovim/nvim-lspconfig/blob/master/doc/configs.md#gopls
|
|
||||||
-- https://github.com/neovim/nvim-lspconfig/issues/2542
|
|
||||||
lspconfig.gopls.setup({})
|
|
||||||
|
|
||||||
-- Protobuf
|
|
||||||
lspconfig.buf_ls.setup({})
|
|
||||||
|
|
||||||
-- Python
|
|
||||||
-- https://github.com/neovim/nvim-lspconfig/blob/master/doc/configs.md#pyright
|
|
||||||
lspconfig.pyright.setup({
|
|
||||||
settings = {
|
|
||||||
pyright = {
|
|
||||||
-- Conflicts with Ruff
|
|
||||||
disableOrganizeImports = true,
|
|
||||||
},
|
|
||||||
python = {
|
|
||||||
analysis = {
|
|
||||||
-- Conflicts with Ruff
|
|
||||||
ignore = { "*" },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
-- https://docs.astral.sh/ruff/editors/setup/#neovim
|
|
||||||
-- https://github.com/neovim/nvim-lspconfig/blob/master/doc/configs.md#ruff
|
|
||||||
lspconfig.ruff.setup({
|
|
||||||
on_init = function(client, initialization_result)
|
|
||||||
if client.server_capabilities then
|
|
||||||
-- Conflicts with pyright
|
|
||||||
client.server_capabilities.hoverProvider = false
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Markdown
|
|
||||||
-- https://github.com/artempyanykh/marksman
|
|
||||||
-- https://github.com/neovim/nvim-lspconfig/blob/master/doc/configs.md#marksman
|
|
||||||
lspconfig.marksman.setup({})
|
|
||||||
|
|
||||||
-- Typst
|
|
||||||
-- https://github.com/Myriad-Dreamin/tinymist
|
|
||||||
-- https://github.com/neovim/nvim-lspconfig/blob/master/doc/configs.md#tinymist
|
|
||||||
lspconfig.tinymist.setup({})
|
|
||||||
|
|
||||||
-- General
|
|
||||||
vim.keymap.set("n", "<Space>e", vim.diagnostic.open_float)
|
|
||||||
vim.keymap.set("n", "<Space>lr", ":LspRestart<CR>")
|
|
||||||
|
|
||||||
local augroup = vim.api.nvim_create_augroup("UserLspConfig", {})
|
|
||||||
vim.api.nvim_create_autocmd("LspAttach", {
|
|
||||||
group = augroup,
|
|
||||||
callback = function(ev)
|
|
||||||
vim.bo[ev.buf].omnifunc = "v:lua.vim.lsp.omnifunc"
|
|
||||||
|
|
||||||
local opts = { buffer = ev.buf }
|
|
||||||
vim.keymap.set("n", "gd", vim.lsp.buf.definition, opts)
|
|
||||||
vim.keymap.set("n", "<Space>k", vim.lsp.buf.hover, opts)
|
|
||||||
vim.keymap.set("n", "gk", vim.lsp.buf.hover, opts)
|
|
||||||
vim.keymap.set("n", "<F2>", vim.lsp.buf.rename, opts)
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Chaos
|
|
||||||
-- https://www.reddit.com/r/neovim/comments/18teetv/one_day_you_will_wake_up_and_choose_the_chaos
|
|
||||||
-- https://github.com/neovim/nvim-lspconfig/wiki/UI-Customization
|
|
||||||
-- https://neovim.io/doc/user/diagnostic.html#diagnostic-highlights
|
|
||||||
-- https://emojipedia.org/
|
|
||||||
local signs = {
|
|
||||||
Error = "🔥",
|
|
||||||
Warn = "😤",
|
|
||||||
Info = "🤔",
|
|
||||||
Hint = "🐼",
|
|
||||||
}
|
|
||||||
for type, icon in pairs(signs) do
|
|
||||||
local hl = "DiagnosticSign" .. type
|
|
||||||
vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = hl })
|
|
||||||
end
|
|
||||||
|
|
||||||
-- https://neovim.io/doc/user/diagnostic.html#diagnostic-api
|
|
||||||
vim.diagnostic.config({
|
|
||||||
underline = false,
|
|
||||||
virtual_text = false,
|
|
||||||
})
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
|
|
||||||
-- https://github.com/github/copilot.vim
|
|
||||||
{
|
|
||||||
"github/copilot.vim",
|
|
||||||
init = function()
|
|
||||||
vim.g.copilot_filetypes = {
|
|
||||||
["*"] = false,
|
|
||||||
asciidoc = true,
|
|
||||||
dockerfile = true,
|
|
||||||
gitcommit = true,
|
|
||||||
go = true,
|
|
||||||
json = true,
|
|
||||||
just = true,
|
|
||||||
lua = true,
|
|
||||||
make = true,
|
|
||||||
markdown = true,
|
|
||||||
plantuml = true,
|
|
||||||
proto = true,
|
|
||||||
python = true,
|
|
||||||
sql = true,
|
|
||||||
toml = true,
|
|
||||||
typst = true,
|
|
||||||
yaml = true,
|
|
||||||
zsh = true,
|
|
||||||
}
|
|
||||||
vim.g.copilot_no_tab_map = true
|
|
||||||
end,
|
|
||||||
config = function()
|
|
||||||
-- Largely copy from GitHub
|
|
||||||
vim.keymap.set("i", "<M-Right>", 'copilot#Accept("\\<CR>")', {
|
|
||||||
expr = true,
|
|
||||||
replace_keycodes = false,
|
|
||||||
})
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
}, {
|
|
||||||
performance = {
|
|
||||||
rtp = {
|
|
||||||
disabled_plugins = {
|
|
||||||
"editorconfig",
|
|
||||||
"gzip",
|
|
||||||
"spellfile",
|
|
||||||
"tarPlugin",
|
|
||||||
"tohtml",
|
|
||||||
"tutor",
|
|
||||||
"zipPlugin",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
rocks = { enabled = false },
|
|
||||||
throttle = { enabled = true },
|
|
||||||
git = {
|
|
||||||
-- Seconds
|
|
||||||
cooldown = 5 * 60,
|
|
||||||
},
|
|
||||||
})
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
set breakindent
|
||||||
|
set completeopt=menuone,noinsert,noselect
|
||||||
|
set noswapfile
|
||||||
|
set number
|
||||||
|
set relativenumber
|
||||||
|
set scrolloff=4
|
||||||
|
set virtualedit=block
|
||||||
|
set whichwrap=<,>,[,]
|
||||||
|
|
||||||
|
" tabstop
|
||||||
|
" https://www.reddit.com/r/vim/wiki/tabstop
|
||||||
|
set tabstop=8
|
||||||
|
set softtabstop=4
|
||||||
|
set shiftwidth=4
|
||||||
|
set expandtab
|
||||||
|
|
||||||
|
" Mouse support
|
||||||
|
set mouse=a
|
||||||
|
|
||||||
|
" Clipboard support
|
||||||
|
set clipboard+=unnamedplus
|
||||||
|
|
||||||
|
" FZF
|
||||||
|
set rtp+=~/.fzf
|
||||||
|
|
||||||
|
" Plugins config
|
||||||
|
let g:lightline={'colorscheme':'onedark'}
|
||||||
|
|
||||||
|
" vim-plug
|
||||||
|
" https://github.com/junegunn/vim-plug
|
||||||
|
call plug#begin()
|
||||||
|
|
||||||
|
" Should use
|
||||||
|
Plug 'preservim/nerdtree'
|
||||||
|
Plug 'itchyny/lightline.vim'
|
||||||
|
Plug 'tpope/vim-fugitive'
|
||||||
|
|
||||||
|
" Colorschemes
|
||||||
|
Plug 'joshdick/onedark.vim'
|
||||||
|
|
||||||
|
call plug#end()
|
||||||
|
|
||||||
|
set background=dark
|
||||||
|
colorscheme onedark
|
|
@ -1,6 +0,0 @@
|
||||||
--max-columns=120
|
|
||||||
--max-columns-preview
|
|
||||||
--context=3
|
|
||||||
--pretty
|
|
||||||
--smart-case
|
|
||||||
--engine=auto
|
|
|
@ -1,27 +0,0 @@
|
||||||
"$schema" = 'https://starship.rs/config-schema.json'
|
|
||||||
|
|
||||||
add_newline = false
|
|
||||||
|
|
||||||
format = """
|
|
||||||
$username\
|
|
||||||
$hostname\
|
|
||||||
$localip\
|
|
||||||
$shlvl\
|
|
||||||
$directory\
|
|
||||||
$git_branch\
|
|
||||||
$git_commit\
|
|
||||||
$git_state\
|
|
||||||
$git_status\
|
|
||||||
$package\
|
|
||||||
$golang\
|
|
||||||
$env_var\
|
|
||||||
$custom\
|
|
||||||
$sudo\
|
|
||||||
$cmd_duration\
|
|
||||||
$line_break\
|
|
||||||
$jobs\
|
|
||||||
$time\
|
|
||||||
$status\
|
|
||||||
$os\
|
|
||||||
$shell\
|
|
||||||
$character"""
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
# Change prefix
|
||||||
|
set -g prefix C-a
|
||||||
|
unbind C-b
|
||||||
|
bind C-a send-prefix
|
||||||
|
|
||||||
|
# Split panes using | and -
|
||||||
|
bind | split-window -h
|
||||||
|
bind - split-window -v
|
||||||
|
|
||||||
|
# Switch panes using Alt
|
||||||
|
bind -n M-Left select-pane -L
|
||||||
|
bind -n M-Right select-pane -R
|
||||||
|
bind -n M-Up select-pane -U
|
||||||
|
bind -n M-Down select-pane -D
|
||||||
|
|
||||||
|
# Color
|
||||||
|
set -g default-terminal "tmux-256color"
|
|
@ -1,9 +0,0 @@
|
||||||
[files]
|
|
||||||
extend-exclude = [
|
|
||||||
"CHANGELOG.md",
|
|
||||||
"*/generated/*",
|
|
||||||
"generated/*",
|
|
||||||
"*/external/proto/*",
|
|
||||||
"external/proto/*",
|
|
||||||
"*.html",
|
|
||||||
]
|
|
|
@ -1,102 +0,0 @@
|
||||||
local wezterm = require("wezterm")
|
|
||||||
local act = wezterm.action
|
|
||||||
|
|
||||||
-- Custom fonts config
|
|
||||||
-- wezterm ls-fonts --list-system
|
|
||||||
local function font_with_fallback(main_font)
|
|
||||||
local fonts = {
|
|
||||||
main_font,
|
|
||||||
{
|
|
||||||
family = "Apple Color Emoji",
|
|
||||||
assume_emoji_presentation = true,
|
|
||||||
},
|
|
||||||
"Symbols Nerd Font Mono",
|
|
||||||
}
|
|
||||||
return wezterm.font_with_fallback(fonts)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- https://github.com/be5invis/Iosevka
|
|
||||||
local font_iosevka = {
|
|
||||||
font = font_with_fallback({
|
|
||||||
family = "Iosevka Pacman",
|
|
||||||
}),
|
|
||||||
font_size = 18.0,
|
|
||||||
line_height = 1.2,
|
|
||||||
default_cursor_style = "SteadyBar",
|
|
||||||
}
|
|
||||||
|
|
||||||
local current_font = font_iosevka
|
|
||||||
local current_color_scheme = "Catppuccin Mocha"
|
|
||||||
|
|
||||||
return {
|
|
||||||
font = current_font.font,
|
|
||||||
font_rules = current_font.font_rules,
|
|
||||||
font_size = current_font.font_size,
|
|
||||||
line_height = current_font.line_height,
|
|
||||||
use_cap_height_to_scale_fallback_fonts = true,
|
|
||||||
|
|
||||||
color_scheme = current_color_scheme,
|
|
||||||
|
|
||||||
window_padding = {
|
|
||||||
left = 16,
|
|
||||||
right = 16,
|
|
||||||
top = 16,
|
|
||||||
bottom = 16,
|
|
||||||
},
|
|
||||||
|
|
||||||
use_fancy_tab_bar = false,
|
|
||||||
hide_tab_bar_if_only_one_tab = true,
|
|
||||||
tab_bar_at_bottom = true,
|
|
||||||
tab_and_split_indices_are_zero_based = true,
|
|
||||||
tab_max_width = 24,
|
|
||||||
|
|
||||||
window_background_opacity = 0.95,
|
|
||||||
macos_window_background_blur = 20,
|
|
||||||
|
|
||||||
native_macos_fullscreen_mode = true,
|
|
||||||
|
|
||||||
default_cursor_style = current_font.default_cursor_style,
|
|
||||||
audible_bell = "Disabled",
|
|
||||||
|
|
||||||
front_end = "WebGpu",
|
|
||||||
max_fps = 120,
|
|
||||||
|
|
||||||
keys = {
|
|
||||||
{
|
|
||||||
key = "LeftArrow",
|
|
||||||
mods = "CTRL|SHIFT",
|
|
||||||
action = act.ActivateTabRelative(-1),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key = "RightArrow",
|
|
||||||
mods = "CTRL|SHIFT",
|
|
||||||
action = act.ActivateTabRelative(1),
|
|
||||||
},
|
|
||||||
-- Inspire from Zellij
|
|
||||||
{
|
|
||||||
key = "n",
|
|
||||||
mods = "ALT",
|
|
||||||
action = act.SplitHorizontal({ domain = "CurrentPaneDomain" }),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key = "m",
|
|
||||||
mods = "ALT",
|
|
||||||
action = act.SplitVertical({ domain = "CurrentPaneDomain" }),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key = "p",
|
|
||||||
mods = "ALT",
|
|
||||||
action = act.ActivatePaneDirection("Next"),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key = "[",
|
|
||||||
mods = "ALT",
|
|
||||||
action = act.ActivateTabRelative(-1),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key = "]",
|
|
||||||
mods = "ALT",
|
|
||||||
action = act.ActivateTabRelative(1),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
|
@ -1,18 +0,0 @@
|
||||||
[
|
|
||||||
{
|
|
||||||
"context": "Editor && inline_completion && !showing_completions",
|
|
||||||
"bindings": {
|
|
||||||
"tab": "zed::NoAction",
|
|
||||||
"alt-right": "editor::AcceptInlineCompletion"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"context": "Editor && (vim_mode == normal || vim_mode == visual)",
|
|
||||||
"bindings": {
|
|
||||||
"; d": ["workspace::SendKeystrokes", "\" _ d"],
|
|
||||||
"; c": ["workspace::SendKeystrokes", "\" _ c"],
|
|
||||||
"; x": ["workspace::SendKeystrokes", "\" _ x"],
|
|
||||||
"space f": "editor::Format"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
|
@ -1,25 +0,0 @@
|
||||||
{
|
|
||||||
"ui_font_size": 18,
|
|
||||||
"ui_font_family": "Shantell Sans Normal",
|
|
||||||
"buffer_font_size": 18,
|
|
||||||
"buffer_font_family": "Iosevka Pacman",
|
|
||||||
"soft_wrap": "bounded",
|
|
||||||
"preferred_line_length": 120,
|
|
||||||
"toolbar": {
|
|
||||||
"breadcrumbs": false,
|
|
||||||
"quick_actions": false
|
|
||||||
},
|
|
||||||
"theme": {
|
|
||||||
"mode": "system",
|
|
||||||
"dark": "Catppuccin Mocha",
|
|
||||||
"light": "Catppuccin Latte"
|
|
||||||
},
|
|
||||||
"vim_mode": true,
|
|
||||||
"assistant": {
|
|
||||||
"enabled": false,
|
|
||||||
"version": "2"
|
|
||||||
},
|
|
||||||
"show_call_status_icon": false,
|
|
||||||
"projects_online_by_default": false,
|
|
||||||
"restore_on_startup": "none"
|
|
||||||
}
|
|
|
@ -1,33 +0,0 @@
|
||||||
theme "catppuccin-mocha"
|
|
||||||
default_layout "compact"
|
|
||||||
default_mode "locked"
|
|
||||||
on_force_close "quit"
|
|
||||||
simplified_ui true
|
|
||||||
pane_frames false
|
|
||||||
ui {
|
|
||||||
pane_frames {
|
|
||||||
hide_session_name true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
keybinds {
|
|
||||||
shared {
|
|
||||||
bind "Alt p" {
|
|
||||||
SwitchFocus
|
|
||||||
}
|
|
||||||
bind "Alt o" {
|
|
||||||
NewTab
|
|
||||||
}
|
|
||||||
bind "Alt ]" {
|
|
||||||
GoToNextTab
|
|
||||||
}
|
|
||||||
bind "Alt [" {
|
|
||||||
GoToPreviousTab
|
|
||||||
}
|
|
||||||
bind "Alt n" {
|
|
||||||
NewPane
|
|
||||||
}
|
|
||||||
bind "Alt m" {
|
|
||||||
NewPane "Down"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,238 +0,0 @@
|
||||||
# vim: set filetype=zsh:
|
|
||||||
# Put this on bottom of ~/.zshrc
|
|
||||||
|
|
||||||
# https://blog.izissise.net/posts/env-path/
|
|
||||||
typeset -U path PATH
|
|
||||||
|
|
||||||
# Alias
|
|
||||||
alias g="git"
|
|
||||||
alias moe="make"
|
|
||||||
alias meo="make"
|
|
||||||
|
|
||||||
# https://wiki.archlinux.org/title/XDG_Base_Directory
|
|
||||||
export XDG_CONFIG_HOME=~/.config
|
|
||||||
export XDG_CACHE_HOME=~/.cache
|
|
||||||
export XDG_DATA_HOME=~/.local/share
|
|
||||||
|
|
||||||
# https://github.com/ohmyzsh/ohmyzsh/blob/master/lib/completion.zsh
|
|
||||||
# https://thevaluable.dev/zsh-completion-guide-examples/
|
|
||||||
# https://damn.engineer/2022/09/28/zsh-case-insensitive
|
|
||||||
zstyle ':completion:*' use-cache on
|
|
||||||
zstyle ':completion:*' cache-path "$XDG_CACHE_HOME/zsh/.zcompcache"
|
|
||||||
zstyle ':completion:*' matcher-list 'm:{[:lower:][:upper:]}={[:upper:][:lower:]}' 'r:|=*' 'l:|=* r:|=*'
|
|
||||||
zstyle ':completion:*' special-dirs true
|
|
||||||
|
|
||||||
# zsh plugins
|
|
||||||
# https://github.com/zsh-users/zsh-syntax-highlighting
|
|
||||||
if [[ -f /opt/homebrew/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh ]]; then
|
|
||||||
# https://github.com/catppuccin/zsh-syntax-highlighting
|
|
||||||
source ~/.config/zsh/themes/catppuccin_mocha-zsh-syntax-highlighting.zsh
|
|
||||||
|
|
||||||
source /opt/homebrew/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
|
|
||||||
|
|
||||||
typeset -A ZSH_HIGHLIGHT_STYLES
|
|
||||||
# Remove underline from catppuccin mocha theme
|
|
||||||
ZSH_HIGHLIGHT_STYLES[path]='fg=#cdd6f4'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[path_pathseparator]='fg=#f38ba8'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[path_prefix]='fg=#cdd6f4'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[path_prefix_pathseparator]='fg=#f38ba8'
|
|
||||||
fi
|
|
||||||
|
|
||||||
# https://github.com/zsh-users/zsh-autosuggestions
|
|
||||||
if [[ -f /opt/homebrew/share/zsh-autosuggestions/zsh-autosuggestions.zsh ]]; then
|
|
||||||
source /opt/homebrew/share/zsh-autosuggestions/zsh-autosuggestions.zsh
|
|
||||||
|
|
||||||
export ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE=20
|
|
||||||
export ZSH_AUTOSUGGEST_MANUAL_REBIND=true
|
|
||||||
export ZSH_AUTOSUGGEST_HISTORY_IGNORE=$HISTORY_IGNORE
|
|
||||||
fi
|
|
||||||
|
|
||||||
# https://unix.stackexchange.com/q/621606
|
|
||||||
# https://github.com/zsh-users/zsh-history-substring-search
|
|
||||||
if [[ -f /opt/homebrew/share/zsh-history-substring-search/zsh-history-substring-search.zsh ]]; then
|
|
||||||
source /opt/homebrew/share/zsh-history-substring-search/zsh-history-substring-search.zsh
|
|
||||||
|
|
||||||
bindkey '^[[A' history-substring-search-up
|
|
||||||
bindkey '^[[B' history-substring-search-down
|
|
||||||
|
|
||||||
export HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND=''
|
|
||||||
export HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND=''
|
|
||||||
export HISTORY_SUBSTRING_SEARCH_PREFIXED=true
|
|
||||||
fi
|
|
||||||
|
|
||||||
# https://www.topbug.net/blog/2016/09/27/make-gnu-less-more-powerful/
|
|
||||||
export LESS="-RF -i -K -s -x2 --wordwrap"
|
|
||||||
|
|
||||||
# git
|
|
||||||
# https://stackoverflow.com/a/43747486
|
|
||||||
export GIT_COMPLETION_CHECKOUT_NO_GUESS=1
|
|
||||||
|
|
||||||
# nvim
|
|
||||||
if command -v nvim &>/dev/null; then
|
|
||||||
export EDITOR=nvim
|
|
||||||
export VISUAL=nvim
|
|
||||||
export GIT_EDITOR=nvim
|
|
||||||
alias vi="nvim"
|
|
||||||
alias vim="nvim"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# go
|
|
||||||
# https://stackoverflow.com/a/13542854
|
|
||||||
if command -v go &>/dev/null; then
|
|
||||||
if [[ -d $HOME/go ]]; then
|
|
||||||
export GOPATH=$HOME/go
|
|
||||||
path=($path $GOPATH/bin)
|
|
||||||
fi
|
|
||||||
# Depend on your company
|
|
||||||
# export GOPRIVATE=example.company.com
|
|
||||||
fi
|
|
||||||
|
|
||||||
# fzf
|
|
||||||
# https://github.com/junegunn/fzf
|
|
||||||
if command -v fzf &>/dev/null; then
|
|
||||||
export FZF_COMPLETION_TRIGGER='~~'
|
|
||||||
|
|
||||||
# https://github.com/catppuccin/fzf
|
|
||||||
# Remove bg for transparent terminal
|
|
||||||
export FZF_DEFAULT_OPTS="\
|
|
||||||
--ansi \
|
|
||||||
--pointer='🔫' --prompt='🪓 ' \
|
|
||||||
--color=bg+:#313244,spinner:#f5e0dc,hl:#f38ba8 \
|
|
||||||
--color=fg:#cdd6f4,header:#f38ba8,info:#cba6f7,pointer:#f5e0dc \
|
|
||||||
--color=marker:#b4befe,fg+:#cdd6f4,prompt:#cba6f7,hl+:#f38ba8 \
|
|
||||||
--color=selected-bg:#45475a"
|
|
||||||
|
|
||||||
if command -v fd &>/dev/null; then
|
|
||||||
_fzf_compgen_path() {
|
|
||||||
fd --type file . "$1"
|
|
||||||
}
|
|
||||||
|
|
||||||
_fzf_compgen_dir() {
|
|
||||||
fd --type directory . "$1"
|
|
||||||
}
|
|
||||||
|
|
||||||
export FZF_DEFAULT_COMMAND="fd --type file --color=always"
|
|
||||||
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
|
|
||||||
export FZF_ALT_C_COMMAND="fd --type directory --color=always"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if command -v bat &>/dev/null; then
|
|
||||||
export FZF_CTRL_T_OPTS="--preview 'bat --color=always --line-range=:500 {}'"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if command -v eza &>/dev/null; then
|
|
||||||
export FZF_ALT_C_OPTS="--preview 'eza --tree --level 1 {}'"
|
|
||||||
fi
|
|
||||||
|
|
||||||
source <(fzf --zsh)
|
|
||||||
|
|
||||||
# https://github.com/Aloxaf/fzf-tab
|
|
||||||
if [[ -f $HOME/.zsh-plugins/fzf-tab/fzf-tab.plugin.zsh ]]; then
|
|
||||||
source /Users/anon/.zsh-plugins/fzf-tab/fzf-tab.plugin.zsh
|
|
||||||
|
|
||||||
zstyle ':completion:*' menu no
|
|
||||||
zstyle ':fzf-tab:*' fzf-flags \
|
|
||||||
--ansi \
|
|
||||||
--pointer='🔫' --prompt='🪓 ' \
|
|
||||||
--color=bg+:#313244,spinner:#f5e0dc,hl:#f38ba8 \
|
|
||||||
--color=fg:#cdd6f4,header:#f38ba8,info:#cba6f7,pointer:#f5e0dc \
|
|
||||||
--color=marker:#b4befe,fg+:#cdd6f4,prompt:#cba6f7,hl+:#f38ba8 \
|
|
||||||
--color=selected-bg:#45475a
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# https://github.com/BurntSushi/ripgrep
|
|
||||||
if command -v rg &>/dev/null; then
|
|
||||||
export RIPGREP_CONFIG_PATH="$HOME/.config/ripgrep/ripgreprc"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# https://github.com/eza-community/eza
|
|
||||||
if command -v eza &>/dev/null; then
|
|
||||||
alias ls="eza"
|
|
||||||
alias la="eza -la"
|
|
||||||
alias lt="eza --tree"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# https://github.com/kovidgoyal/kitty
|
|
||||||
if command -v kitten &>/dev/null; then
|
|
||||||
alias kssh="kitten ssh"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# https://github.com/dandavison/delta
|
|
||||||
if command -v delta &>/dev/null; then
|
|
||||||
alias da="delta"
|
|
||||||
eval "$(delta --generate-completion zsh)"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# https://github.com/wilfred/difftastic
|
|
||||||
if command -v difft &>/dev/null; then
|
|
||||||
export DFT_DISPLAY=inline
|
|
||||||
export DFT_TAB_WIDTH=2
|
|
||||||
fi
|
|
||||||
|
|
||||||
# https://restic.readthedocs.io/en/latest/manual_rest.html
|
|
||||||
if command -v restic &>/dev/null; then
|
|
||||||
export RESTIC_PASSWORD_FILE=$HOME/.restic_password_file
|
|
||||||
fi
|
|
||||||
|
|
||||||
# https://github.com/sharkdp/vivid
|
|
||||||
if command -v vivid &>/dev/null; then
|
|
||||||
export LS_COLORS="$(vivid generate catppuccin-mocha)"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# https://github.com/ajeetdsouza/zoxide
|
|
||||||
if command -v zoxide &>/dev/null; then
|
|
||||||
export _ZO_ECHO=1
|
|
||||||
eval "$(zoxide init zsh)"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# https://github.com/walles/moar
|
|
||||||
if command -v moar &>/dev/null; then
|
|
||||||
export MOAR="-no-linenumbers -no-statusbar -quit-if-one-screen -wrap"
|
|
||||||
export PAGER=moar
|
|
||||||
fi
|
|
||||||
|
|
||||||
# https://github.com/Schniz/fnm
|
|
||||||
if command -v fnm &>/dev/null; then
|
|
||||||
eval "$(fnm env --use-on-cd)"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# https://github.com/oven-sh/bun
|
|
||||||
if command -v bun &>/dev/null; then
|
|
||||||
if [[ -d $HOME/.cache/.bun/bin ]]; then
|
|
||||||
path=($path $HOME/.cache/.bun/bin)
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# https://github.com/casey/just
|
|
||||||
if command -v just &>/dev/null; then
|
|
||||||
alias jst="just"
|
|
||||||
eval "$(just --completions zsh)"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# https://github.com/rclone/rclone
|
|
||||||
if command -v rclone &>/dev/null; then
|
|
||||||
export RCLONE_PROGRESS=true
|
|
||||||
export RCLONE_EXCLUDE=".DS_Store"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# https://github.com/crate-ci/typos
|
|
||||||
if command -v typos &>/dev/null; then
|
|
||||||
alias typo="typos --config ~/.config/typos/typos.toml"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# https://github.com/orhun/daktilo
|
|
||||||
if command -v daktilo &>/dev/null; then
|
|
||||||
export DAKTILO_CONFIG="$HOME/.config/daktilo/daktilo.toml"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# https://github.com/starship/starship
|
|
||||||
if command -v starship &>/dev/null; then
|
|
||||||
export STARSHIP_CONFIG="$HOME/.config/starship/starship.toml"
|
|
||||||
eval "$(starship init zsh)"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# https://ryuuta.net/blog/diagnosing-an-unsual-wifi-issue/
|
|
||||||
export QT_BEARER_POLL_TIMEOUT=-1
|
|
||||||
|
|
||||||
export PATH
|
|
|
@ -1,74 +0,0 @@
|
||||||
# Catppuccin Mocha Theme (for zsh-syntax-highlighting)
|
|
||||||
#
|
|
||||||
# Paste this files contents inside your ~/.zshrc before you activate zsh-syntax-highlighting
|
|
||||||
ZSH_HIGHLIGHT_HIGHLIGHTERS=(main cursor)
|
|
||||||
typeset -gA ZSH_HIGHLIGHT_STYLES
|
|
||||||
|
|
||||||
# Main highlighter styling: https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/docs/highlighters/main.md
|
|
||||||
#
|
|
||||||
## General
|
|
||||||
### Diffs
|
|
||||||
### Markup
|
|
||||||
## Classes
|
|
||||||
## Comments
|
|
||||||
ZSH_HIGHLIGHT_STYLES[comment]='fg=#585b70'
|
|
||||||
## Constants
|
|
||||||
## Entitites
|
|
||||||
## Functions/methods
|
|
||||||
ZSH_HIGHLIGHT_STYLES[alias]='fg=#a6e3a1'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[suffix-alias]='fg=#a6e3a1'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[global-alias]='fg=#a6e3a1'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[function]='fg=#a6e3a1'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[command]='fg=#a6e3a1'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[precommand]='fg=#a6e3a1,italic'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[autodirectory]='fg=#fab387,italic'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[single-hyphen-option]='fg=#fab387'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[double-hyphen-option]='fg=#fab387'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[back-quoted-argument]='fg=#cba6f7'
|
|
||||||
## Keywords
|
|
||||||
## Built ins
|
|
||||||
ZSH_HIGHLIGHT_STYLES[builtin]='fg=#a6e3a1'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[reserved-word]='fg=#a6e3a1'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[hashed-command]='fg=#a6e3a1'
|
|
||||||
## Punctuation
|
|
||||||
ZSH_HIGHLIGHT_STYLES[commandseparator]='fg=#f38ba8'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[command-substitution-delimiter]='fg=#cdd6f4'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[command-substitution-delimiter-unquoted]='fg=#cdd6f4'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[process-substitution-delimiter]='fg=#cdd6f4'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[back-quoted-argument-delimiter]='fg=#f38ba8'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]='fg=#f38ba8'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[back-dollar-quoted-argument]='fg=#f38ba8'
|
|
||||||
## Serializable / Configuration Languages
|
|
||||||
## Storage
|
|
||||||
## Strings
|
|
||||||
ZSH_HIGHLIGHT_STYLES[command-substitution-quoted]='fg=#f9e2af'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[command-substitution-delimiter-quoted]='fg=#f9e2af'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[single-quoted-argument]='fg=#f9e2af'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[single-quoted-argument-unclosed]='fg=#eba0ac'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[double-quoted-argument]='fg=#f9e2af'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[double-quoted-argument-unclosed]='fg=#eba0ac'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[rc-quote]='fg=#f9e2af'
|
|
||||||
## Variables
|
|
||||||
ZSH_HIGHLIGHT_STYLES[dollar-quoted-argument]='fg=#cdd6f4'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[dollar-quoted-argument-unclosed]='fg=#eba0ac'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]='fg=#cdd6f4'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[assign]='fg=#cdd6f4'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[named-fd]='fg=#cdd6f4'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[numeric-fd]='fg=#cdd6f4'
|
|
||||||
## No category relevant in spec
|
|
||||||
ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=#eba0ac'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[path]='fg=#cdd6f4,underline'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[path_pathseparator]='fg=#f38ba8,underline'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[path_prefix]='fg=#cdd6f4,underline'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[path_prefix_pathseparator]='fg=#f38ba8,underline'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[globbing]='fg=#cdd6f4'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[history-expansion]='fg=#cba6f7'
|
|
||||||
#ZSH_HIGHLIGHT_STYLES[command-substitution]='fg=?'
|
|
||||||
#ZSH_HIGHLIGHT_STYLES[command-substitution-unquoted]='fg=?'
|
|
||||||
#ZSH_HIGHLIGHT_STYLES[process-substitution]='fg=?'
|
|
||||||
#ZSH_HIGHLIGHT_STYLES[arithmetic-expansion]='fg=?'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[back-quoted-argument-unclosed]='fg=#eba0ac'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[redirection]='fg=#cdd6f4'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[arg0]='fg=#cdd6f4'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[default]='fg=#cdd6f4'
|
|
||||||
ZSH_HIGHLIGHT_STYLES[cursor]='fg=#cdd6f4'
|
|
|
@ -1,30 +0,0 @@
|
||||||
# vim: set filetype=zsh:
|
|
||||||
# Put this on top of ~/.zshrc
|
|
||||||
|
|
||||||
# See https://wiki.archlinux.org/title/Zsh
|
|
||||||
|
|
||||||
# https://lgug2z.com/articles/sensible-wordchars-for-most-developers/
|
|
||||||
export WORDCHARS='*?[]~&;!#$%^(){}<>'
|
|
||||||
|
|
||||||
# https://zsh.sourceforge.io/Doc/Release/Parameters.html#Parameters-Used-By-The-Shell
|
|
||||||
export HISTORY_IGNORE="(l[sal]|cd|pwd|exit|z)"
|
|
||||||
export HISTSIZE=100000000
|
|
||||||
export SAVEHIST=$HISTSIZE
|
|
||||||
|
|
||||||
# https://zsh.sourceforge.io/Doc/Release/Options.html
|
|
||||||
setopt AUTO_CD
|
|
||||||
setopt HIST_EXPIRE_DUPS_FIRST
|
|
||||||
setopt HIST_FIND_NO_DUPS
|
|
||||||
setopt HIST_IGNORE_ALL_DUPS
|
|
||||||
setopt HIST_NO_FUNCTIONS
|
|
||||||
setopt HIST_NO_STORE
|
|
||||||
setopt HIST_REDUCE_BLANKS
|
|
||||||
setopt HIST_SAVE_NO_DUPS
|
|
||||||
setopt INC_APPEND_HISTORY_TIME
|
|
||||||
|
|
||||||
# https://stackoverflow.com/q/12382499
|
|
||||||
bindkey "^[[1;3C" forward-word
|
|
||||||
bindkey "^[[1;3D" backward-word
|
|
||||||
|
|
||||||
autoload -Uz compinit
|
|
||||||
compinit
|
|
28
go.mod
28
go.mod
|
@ -1,29 +1,19 @@
|
||||||
module github.com/haunt98/dotfiles
|
module github.com/haunt98/dotfiles
|
||||||
|
|
||||||
go 1.20
|
go 1.17
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/BurntSushi/toml v1.4.0
|
github.com/make-go-great/color-go v0.3.0
|
||||||
github.com/bytedance/sonic v1.12.7
|
github.com/make-go-great/copy-go v0.8.0
|
||||||
github.com/make-go-great/color-go v0.5.0
|
github.com/urfave/cli/v2 v2.3.0
|
||||||
github.com/make-go-great/copy-go v0.9.0
|
|
||||||
github.com/make-go-great/diff-go v0.0.6
|
|
||||||
github.com/urfave/cli/v2 v2.27.5
|
|
||||||
golang.org/x/sync v0.10.0
|
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/bytedance/sonic/loader v0.2.2 // indirect
|
github.com/cpuguy83/go-md2man/v2 v2.0.1 // indirect
|
||||||
github.com/cloudwego/base64x v0.1.4 // indirect
|
github.com/fatih/color v1.13.0 // indirect
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.5 // indirect
|
github.com/mattn/go-colorable v0.1.9 // indirect
|
||||||
github.com/fatih/color v1.16.0 // indirect
|
github.com/mattn/go-isatty v0.0.14 // indirect
|
||||||
github.com/klauspost/cpuid/v2 v2.0.9 // indirect
|
|
||||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
|
||||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
|
||||||
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e // indirect
|
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e // indirect
|
||||||
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
||||||
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
|
golang.org/x/sys v0.0.0-20210818153620-00dd8d7831e7 // indirect
|
||||||
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect
|
|
||||||
golang.org/x/arch v0.0.0-20210923205945-b76863e36670 // indirect
|
|
||||||
golang.org/x/sys v0.14.0 // indirect
|
|
||||||
)
|
)
|
||||||
|
|
83
go.sum
83
go.sum
|
@ -1,64 +1,31 @@
|
||||||
github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0=
|
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||||
github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
|
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||||
github.com/bytedance/sonic v1.12.7 h1:CQU8pxOy9HToxhndH0Kx/S1qU/CuS9GnKYrGioDcU1Q=
|
github.com/cpuguy83/go-md2man/v2 v2.0.1 h1:r/myEWzV9lfsM1tFLgDyu0atFtJ1fXn261LKYj/3DxU=
|
||||||
github.com/bytedance/sonic v1.12.7/go.mod h1:tnbal4mxOMju17EGfknm2XyYcpyCnIROYOEYuemj13I=
|
github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||||
github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=
|
github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w=
|
||||||
github.com/bytedance/sonic/loader v0.2.2 h1:jxAJuN9fOot/cyz5Q6dUuMJF5OqQ6+5GfA8FjjQ0R4o=
|
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
|
||||||
github.com/bytedance/sonic/loader v0.2.2/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI=
|
github.com/make-go-great/color-go v0.3.0 h1:ZVtVk/wVVsZZwSJG7PZpsY5zwIyGao5VoN48yKfSzYA=
|
||||||
github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y=
|
github.com/make-go-great/color-go v0.3.0/go.mod h1:G5G8IJ3PUo+vSQ+UvnfaswF8O/piVIhFJKv1mQjBGpI=
|
||||||
github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w=
|
github.com/make-go-great/copy-go v0.8.0 h1:AgMSCm4E6+2oZPQv9UR59nc0y1Q0TaYl88ypPJxjA4k=
|
||||||
github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
|
github.com/make-go-great/copy-go v0.8.0/go.mod h1:QQii7A48OAcQMloNG5YV0USARmxHf3JLS9ieONO1WQA=
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.5 h1:ZtcqGrnekaHpVLArFSe4HK5DoKx1T0rq2DwVB0alcyc=
|
github.com/mattn/go-colorable v0.1.9 h1:sqDoxXbdeALODt0DAeJCVp38ps9ZogZEAXjus69YV3U=
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.5/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
|
||||||
github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
|
|
||||||
github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
|
|
||||||
github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4=
|
|
||||||
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
|
|
||||||
github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M=
|
|
||||||
github.com/make-go-great/color-go v0.5.0 h1:iCSIBybwoo+ctK3QdSWPJPAl05/a3tBrxvOURZRT1qA=
|
|
||||||
github.com/make-go-great/color-go v0.5.0/go.mod h1:GoWscSdNNxjxsQdQCgGlUoADdRHqjmuBMsdr+Rb/QQM=
|
|
||||||
github.com/make-go-great/copy-go v0.9.0 h1:RTqVypNIa6liItFg6kORP93ZhgSck8+pupvGrnSzrSI=
|
|
||||||
github.com/make-go-great/copy-go v0.9.0/go.mod h1:J1ihIqaX3O/lGAaL23d+1GXSQwJX3RpStmUIUdh4xyw=
|
|
||||||
github.com/make-go-great/diff-go v0.0.6 h1:DgeFgtYF2dfdjIYPuUq5d3qptsoD3lTMU/6Xt95V7u8=
|
|
||||||
github.com/make-go-great/diff-go v0.0.6/go.mod h1:eAfYedYs5AX24DteegUMZbOZ8aUUIk9j+KfbG1oxi+w=
|
|
||||||
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
|
|
||||||
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
|
|
||||||
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
|
||||||
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
|
||||||
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
|
||||||
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e h1:aoZm08cpOy4WuID//EZDgcC4zIxODThtZNPirFr42+A=
|
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e h1:aoZm08cpOy4WuID//EZDgcC4zIxODThtZNPirFr42+A=
|
||||||
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
|
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
|
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||||
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
|
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
|
||||||
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
||||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
github.com/urfave/cli/v2 v2.3.0 h1:qph92Y649prgesehzOrQjdWyxFOp/QVM+6imKHad91M=
|
||||||
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
|
||||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
|
golang.org/x/sys v0.0.0-20210818153620-00dd8d7831e7 h1:/bmDWM82ZX7TawqxuI8kVjKI0TXHdSY6pHJArewwHtU=
|
||||||
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
golang.org/x/sys v0.0.0-20210818153620-00dd8d7831e7/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
|
|
||||||
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
|
|
||||||
github.com/urfave/cli/v2 v2.27.5 h1:WoHEJLdsXr6dDWoJgMq/CboDmyY/8HMMH1fTECbih+w=
|
|
||||||
github.com/urfave/cli/v2 v2.27.5/go.mod h1:3Sevf16NykTbInEnD0yKkjDAeZDS0A6bzhBH5hrMvTQ=
|
|
||||||
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4=
|
|
||||||
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM=
|
|
||||||
golang.org/x/arch v0.0.0-20210923205945-b76863e36670 h1:18EFjUmQOcUvxNYSkA6jO9VAiXCnxFY6NyDX0bHDmkU=
|
|
||||||
golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
|
|
||||||
golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
|
|
||||||
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
|
||||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
||||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
||||||
golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q=
|
|
||||||
golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
|
||||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
|
||||||
nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=
|
|
||||||
|
|
|
@ -4,16 +4,14 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
|
|
||||||
"github.com/urfave/cli/v2"
|
|
||||||
|
|
||||||
"github.com/haunt98/dotfiles/internal/config"
|
"github.com/haunt98/dotfiles/internal/config"
|
||||||
|
"github.com/urfave/cli/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
type action struct {
|
type action struct {
|
||||||
flags struct {
|
flags struct {
|
||||||
appNames []string
|
verbose bool
|
||||||
verbose bool
|
dryRun bool
|
||||||
dryRun bool
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,100 +21,85 @@ func (a *action) runHelp(c *cli.Context) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *action) runInstall(c *cli.Context) error {
|
func (a *action) runInstall(c *cli.Context) error {
|
||||||
cfg, err := a.loadConfig(c, commandInstallName)
|
a.getFlags(c)
|
||||||
|
a.log("start %s\n", installCommand)
|
||||||
|
|
||||||
|
cfg, err := a.loadConfig()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := cfg.Install(a.flags.appNames...); err != nil {
|
if err := cfg.Install(); err != nil {
|
||||||
return fmt.Errorf("config: failed to install: %w", err)
|
return fmt.Errorf("failed to install config: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *action) runUpdate(c *cli.Context) error {
|
func (a *action) runUpdate(c *cli.Context) error {
|
||||||
cfg, err := a.loadConfig(c, commandUpdateName)
|
a.getFlags(c)
|
||||||
|
a.log("start %s\n", updateCommand)
|
||||||
|
|
||||||
|
cfg, err := a.loadConfig()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := cfg.Update(a.flags.appNames...); err != nil {
|
if err := cfg.Update(); err != nil {
|
||||||
return fmt.Errorf("config: failed to update: %w", err)
|
return fmt.Errorf("failed to update config: %w", err)
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (a *action) runDownload(c *cli.Context) error {
|
|
||||||
cfg, err := a.loadConfig(c, commandDownloadName)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := cfg.Download(a.flags.appNames...); err != nil {
|
|
||||||
return fmt.Errorf("config: failed to download: %w", err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *action) runClean(c *cli.Context) error {
|
func (a *action) runClean(c *cli.Context) error {
|
||||||
cfg, err := a.loadConfig(c, commandCleanName)
|
a.getFlags(c)
|
||||||
|
a.log("start %s\n", cleanCommand)
|
||||||
|
|
||||||
|
cfg, err := a.loadConfig()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := cfg.Clean(); err != nil {
|
if err := cfg.Clean(); err != nil {
|
||||||
return fmt.Errorf("config: failed to clean: %w", err)
|
return fmt.Errorf("failed to clean config: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *action) runDiff(c *cli.Context) error {
|
func (a *action) runCompare(c *cli.Context) error {
|
||||||
cfg, err := a.loadConfig(c, commandDiffName)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := cfg.Diff(a.flags.appNames...); err != nil {
|
|
||||||
return fmt.Errorf("config: failed to compare: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (a *action) runValidate(c *cli.Context) error {
|
|
||||||
cfg, err := a.loadConfig(c, commandValidateName)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := cfg.Validate(a.flags.appNames...); err != nil {
|
|
||||||
return fmt.Errorf("config: failed to validate: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (a *action) loadConfig(c *cli.Context, command string) (config.Config, error) {
|
|
||||||
a.getFlags(c)
|
a.getFlags(c)
|
||||||
a.log("Start command [%s] with flags [%+v]\n", command, a.flags)
|
a.log("start %s\n", compareCommand)
|
||||||
|
|
||||||
cfg, err := config.LoadConfig(currentDir, a.flags.dryRun)
|
cfg, err := a.loadConfig()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("config: failed to load: %w", err)
|
return err
|
||||||
}
|
}
|
||||||
a.log("Config apps %+v\n", cfg.List())
|
|
||||||
|
|
||||||
return cfg, nil
|
if err := cfg.Compare(); err != nil {
|
||||||
|
return fmt.Errorf("failed to compare config: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *action) loadConfig() (config.Config, error) {
|
||||||
|
cfgReal, cfgDemo, err := config.LoadConfig(currentDir)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to load config: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if a.flags.dryRun {
|
||||||
|
return cfgDemo, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return cfgReal, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *action) getFlags(c *cli.Context) {
|
func (a *action) getFlags(c *cli.Context) {
|
||||||
a.flags.verbose = c.Bool(flagVerboseName)
|
a.flags.verbose = c.Bool(verboseFlag)
|
||||||
a.flags.dryRun = c.Bool(flagDryRunName)
|
a.flags.dryRun = c.Bool(dryRunFlag)
|
||||||
a.flags.appNames = c.StringSlice(flagAppName)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *action) log(format string, v ...interface{}) {
|
func (a *action) log(format string, v ...interface{}) {
|
||||||
|
|
|
@ -5,52 +5,43 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
|
||||||
"github.com/urfave/cli/v2"
|
|
||||||
|
|
||||||
"github.com/make-go-great/color-go"
|
"github.com/make-go-great/color-go"
|
||||||
|
"github.com/urfave/cli/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
name = "dotfiles"
|
appName = "dotfiles"
|
||||||
usage = "managing dotfiles"
|
appUsage = "managing dotfiles"
|
||||||
|
|
||||||
commandInstallName = "install"
|
// flags
|
||||||
commandInstallUsage = "install user configs from dotfiles"
|
verboseFlag = "verbose"
|
||||||
|
dryRunFlag = "dry-run"
|
||||||
|
|
||||||
commandUpdateName = "update"
|
// commands
|
||||||
commandUpdateUsage = "update dotfiles from user configs"
|
installCommand = "install"
|
||||||
|
updateCommand = "update"
|
||||||
|
cleanCommand = "clean"
|
||||||
|
compareCommand = "compare"
|
||||||
|
|
||||||
commandDownloadName = "download"
|
// flag usages
|
||||||
commandDownloadUsage = "download configs from internet (theme for example)"
|
verboseUsage = "show what is going on"
|
||||||
|
dryRunUsage = "demo mode without actually changing anything"
|
||||||
|
|
||||||
commandCleanName = "clean"
|
// command usages
|
||||||
commandCleanUsage = "clean unused dotfiles"
|
installUsage = "install user configs from dotfiles"
|
||||||
|
updateUsage = "update dotfiles from user configs"
|
||||||
commandDiffName = "diff"
|
cleanUsage = "clean unused dotfiles"
|
||||||
commandDiffUsage = "diff dotfiles with user configs"
|
compareUsage = "compare dotfiles with user configs"
|
||||||
|
|
||||||
commandValidateName = "validate"
|
|
||||||
commonValidateUsage = "validate config"
|
|
||||||
|
|
||||||
flagVerboseName = "verbose"
|
|
||||||
flagVerboseUsage = "show what is going on"
|
|
||||||
|
|
||||||
flagDryRunName = "dry-run"
|
|
||||||
flagDryRunUsage = "demo mode without actually changing anything"
|
|
||||||
|
|
||||||
flagAppName = "app"
|
|
||||||
flagAppUsage = "specific app to operate"
|
|
||||||
|
|
||||||
currentDir = "."
|
currentDir = "."
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
installAliases = []string{"ins"}
|
// command aliases
|
||||||
updateAliases = []string{"upd"}
|
installAliases = []string{"i"}
|
||||||
downloadAliases = []string{"dl"}
|
updateAliases = []string{"u"}
|
||||||
cleanAliases = []string{"cl"}
|
cleanAliases = []string{"c"}
|
||||||
diffAliases = []string{"df"}
|
compareAliases = []string{"cmp"}
|
||||||
validateAliases = []string{"vl"}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// denyOSes contains OS which is not supported
|
// denyOSes contains OS which is not supported
|
||||||
|
@ -67,116 +58,68 @@ func NewApp() *App {
|
||||||
a := &action{}
|
a := &action{}
|
||||||
|
|
||||||
cliApp := &cli.App{
|
cliApp := &cli.App{
|
||||||
Name: name,
|
Name: appName,
|
||||||
Usage: usage,
|
Usage: appUsage,
|
||||||
Commands: []*cli.Command{
|
Commands: []*cli.Command{
|
||||||
{
|
{
|
||||||
Name: commandInstallName,
|
Name: installCommand,
|
||||||
Aliases: installAliases,
|
Aliases: installAliases,
|
||||||
Usage: commandInstallUsage,
|
Usage: installUsage,
|
||||||
Flags: []cli.Flag{
|
Flags: []cli.Flag{
|
||||||
&cli.BoolFlag{
|
&cli.BoolFlag{
|
||||||
Name: flagVerboseName,
|
Name: verboseFlag,
|
||||||
Usage: flagVerboseUsage,
|
Usage: verboseUsage,
|
||||||
},
|
},
|
||||||
&cli.BoolFlag{
|
&cli.BoolFlag{
|
||||||
Name: flagDryRunName,
|
Name: dryRunFlag,
|
||||||
Usage: flagDryRunUsage,
|
Usage: dryRunUsage,
|
||||||
},
|
|
||||||
&cli.StringSliceFlag{
|
|
||||||
Name: flagAppName,
|
|
||||||
Usage: flagAppUsage,
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Action: a.runInstall,
|
Action: a.runInstall,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: commandUpdateName,
|
Name: updateCommand,
|
||||||
Aliases: updateAliases,
|
Aliases: updateAliases,
|
||||||
Usage: commandUpdateUsage,
|
Usage: updateUsage,
|
||||||
Flags: []cli.Flag{
|
Flags: []cli.Flag{
|
||||||
&cli.BoolFlag{
|
&cli.BoolFlag{
|
||||||
Name: flagVerboseName,
|
Name: verboseFlag,
|
||||||
Usage: flagVerboseUsage,
|
Usage: verboseUsage,
|
||||||
},
|
},
|
||||||
&cli.BoolFlag{
|
&cli.BoolFlag{
|
||||||
Name: flagDryRunName,
|
Name: dryRunFlag,
|
||||||
Usage: flagDryRunUsage,
|
Usage: dryRunUsage,
|
||||||
},
|
|
||||||
&cli.StringSliceFlag{
|
|
||||||
Name: flagAppName,
|
|
||||||
Usage: flagAppUsage,
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Action: a.runUpdate,
|
Action: a.runUpdate,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: commandDownloadName,
|
Name: cleanCommand,
|
||||||
Aliases: downloadAliases,
|
|
||||||
Usage: commandDownloadUsage,
|
|
||||||
Flags: []cli.Flag{
|
|
||||||
&cli.BoolFlag{
|
|
||||||
Name: flagVerboseName,
|
|
||||||
Usage: flagVerboseUsage,
|
|
||||||
},
|
|
||||||
&cli.BoolFlag{
|
|
||||||
Name: flagDryRunName,
|
|
||||||
Usage: flagDryRunUsage,
|
|
||||||
},
|
|
||||||
&cli.StringSliceFlag{
|
|
||||||
Name: flagAppName,
|
|
||||||
Usage: flagAppUsage,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
Action: a.runDownload,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Name: commandCleanName,
|
|
||||||
Aliases: cleanAliases,
|
Aliases: cleanAliases,
|
||||||
Usage: commandCleanUsage,
|
Usage: cleanUsage,
|
||||||
Flags: []cli.Flag{
|
Flags: []cli.Flag{
|
||||||
&cli.BoolFlag{
|
&cli.BoolFlag{
|
||||||
Name: flagVerboseName,
|
Name: verboseFlag,
|
||||||
Usage: flagVerboseUsage,
|
Usage: verboseUsage,
|
||||||
},
|
},
|
||||||
&cli.BoolFlag{
|
&cli.BoolFlag{
|
||||||
Name: flagDryRunName,
|
Name: dryRunFlag,
|
||||||
Usage: flagDryRunUsage,
|
Usage: dryRunUsage,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Action: a.runClean,
|
Action: a.runClean,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: commandDiffName,
|
Name: compareCommand,
|
||||||
Aliases: diffAliases,
|
Aliases: compareAliases,
|
||||||
Usage: commandDiffUsage,
|
Usage: compareUsage,
|
||||||
Flags: []cli.Flag{
|
Flags: []cli.Flag{
|
||||||
&cli.BoolFlag{
|
&cli.BoolFlag{
|
||||||
Name: flagVerboseName,
|
Name: verboseFlag,
|
||||||
Usage: flagVerboseUsage,
|
Usage: verboseUsage,
|
||||||
},
|
|
||||||
&cli.StringSliceFlag{
|
|
||||||
Name: flagAppName,
|
|
||||||
Usage: flagAppUsage,
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Action: a.runDiff,
|
Action: a.runCompare,
|
||||||
},
|
|
||||||
{
|
|
||||||
Name: commandValidateName,
|
|
||||||
Aliases: validateAliases,
|
|
||||||
Usage: commonValidateUsage,
|
|
||||||
Flags: []cli.Flag{
|
|
||||||
&cli.BoolFlag{
|
|
||||||
Name: flagVerboseName,
|
|
||||||
Usage: flagVerboseUsage,
|
|
||||||
},
|
|
||||||
&cli.StringSliceFlag{
|
|
||||||
Name: flagAppName,
|
|
||||||
Usage: flagAppUsage,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
Action: a.runValidate,
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Action: a.runHelp,
|
Action: a.runHelp,
|
||||||
|
@ -190,11 +133,11 @@ func NewApp() *App {
|
||||||
func (a *App) Run() {
|
func (a *App) Run() {
|
||||||
// Prevent running at runtime
|
// Prevent running at runtime
|
||||||
if _, ok := denyOSes[runtime.GOOS]; ok {
|
if _, ok := denyOSes[runtime.GOOS]; ok {
|
||||||
color.PrintAppError(name, fmt.Sprintf("OS [%s] is not supported right now", runtime.GOOS))
|
color.PrintAppError(appName, fmt.Sprintf("OS %s is not supported right now", runtime.GOOS))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := a.cliApp.Run(os.Args); err != nil {
|
if err := a.cliApp.Run(os.Args); err != nil {
|
||||||
color.PrintAppError(name, err.Error())
|
color.PrintAppError(appName, err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,363 +1,58 @@
|
||||||
package config
|
package config
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
|
||||||
"net/http"
|
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"sort"
|
|
||||||
|
|
||||||
"github.com/BurntSushi/toml"
|
|
||||||
"github.com/bytedance/sonic"
|
|
||||||
"golang.org/x/sync/errgroup"
|
|
||||||
|
|
||||||
"github.com/make-go-great/copy-go"
|
|
||||||
"github.com/make-go-great/diff-go"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
configDirPath = "data"
|
configDirPath = "data"
|
||||||
configFileJSON = "data.json"
|
configFile = "data.json"
|
||||||
configFileTOML = "data.toml"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
ErrConfigNotFound = errors.New("config not found")
|
|
||||||
ErrConfigInvalid = errors.New("config invalid")
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type Config interface {
|
type Config interface {
|
||||||
Install(appNames ...string) error
|
Install() error
|
||||||
Update(appNames ...string) error
|
Update() error
|
||||||
Clean() error
|
Clean() error
|
||||||
Diff(appNames ...string) error
|
Compare() error
|
||||||
Download(appNames ...string) error
|
|
||||||
Validate(appNames ...string) error
|
|
||||||
List() []string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type cfg struct {
|
type configApps struct {
|
||||||
cfgApps ConfigApps
|
Apps map[string]App `json:"apps"`
|
||||||
isDryRun bool
|
}
|
||||||
|
|
||||||
|
// Read from file
|
||||||
|
type App struct {
|
||||||
|
Paths []Path `json:"paths"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Path struct {
|
||||||
|
Internal string `json:"internal"`
|
||||||
|
External string `json:"external"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// LoadConfig return config, configDemo
|
// LoadConfig return config, configDemo
|
||||||
func LoadConfig(path string, isDryRun bool) (Config, error) {
|
func LoadConfig(path string) (*configReal, *configDemo, error) {
|
||||||
configPathJSON := filepath.Clean(filepath.Join(path, configDirPath, configFileJSON))
|
configPath := filepath.Join(path, configDirPath, configFile)
|
||||||
bytes, err := os.ReadFile(configPathJSON)
|
bytes, err := os.ReadFile(configPath)
|
||||||
if err == nil {
|
|
||||||
return loadConfig(bytes, isDryRun, sonic.Unmarshal)
|
|
||||||
}
|
|
||||||
|
|
||||||
configPathTOML := filepath.Clean(filepath.Join(path, configDirPath, configFileTOML))
|
|
||||||
bytes, err = os.ReadFile(configPathTOML)
|
|
||||||
if err == nil {
|
|
||||||
return loadConfig(bytes, isDryRun, toml.Unmarshal)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil, ErrConfigNotFound
|
|
||||||
}
|
|
||||||
|
|
||||||
func loadConfig(bytes []byte, isDryRun bool, unmarshalFn func(data []byte, v any) error) (Config, error) {
|
|
||||||
var cfgApps ConfigApps
|
|
||||||
if err := unmarshalFn(bytes, &cfgApps); err != nil {
|
|
||||||
return nil, fmt.Errorf("failed to unmarshal: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sort version
|
|
||||||
apps2 := make([]string, 0, len(cfgApps.Apps))
|
|
||||||
|
|
||||||
for appName := range cfgApps.Apps {
|
|
||||||
apps2 = append(apps2, appName)
|
|
||||||
}
|
|
||||||
|
|
||||||
sort.Strings(apps2)
|
|
||||||
cfgApps.Apps2 = apps2
|
|
||||||
|
|
||||||
return &cfg{
|
|
||||||
cfgApps: cfgApps,
|
|
||||||
isDryRun: isDryRun,
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Install internal -> external
|
|
||||||
func (c *cfg) Install(appNames ...string) error {
|
|
||||||
var eg errgroup.Group
|
|
||||||
|
|
||||||
mAppNames := slice2map(appNames)
|
|
||||||
|
|
||||||
for appName, app := range c.cfgApps.Apps {
|
|
||||||
if len(appNames) > 0 {
|
|
||||||
if _, ok := mAppNames[appName]; !ok {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, p := range app.Paths {
|
|
||||||
if p.External == "" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
p := Path{
|
|
||||||
Internal: p.Internal,
|
|
||||||
External: p.External,
|
|
||||||
URL: p.URL,
|
|
||||||
}
|
|
||||||
|
|
||||||
eg.Go(func() error {
|
|
||||||
if c.isDryRun {
|
|
||||||
fmt.Printf("Replace [%s] -> [%s]\n", p.Internal, p.External)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := copy.Replace(p.Internal, p.External); err != nil {
|
|
||||||
return fmt.Errorf("copy: failed to replace [%s] -> [%s]: %w", p.Internal, p.External, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := eg.Wait(); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update external -> internal
|
|
||||||
func (c *cfg) Update(appNames ...string) error {
|
|
||||||
var eg errgroup.Group
|
|
||||||
|
|
||||||
mAppNames := slice2map(appNames)
|
|
||||||
|
|
||||||
for appName, app := range c.cfgApps.Apps {
|
|
||||||
if len(appNames) > 0 {
|
|
||||||
if _, ok := mAppNames[appName]; !ok {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, p := range app.Paths {
|
|
||||||
if p.External == "" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
p := Path{
|
|
||||||
Internal: p.Internal,
|
|
||||||
External: p.External,
|
|
||||||
URL: p.URL,
|
|
||||||
}
|
|
||||||
|
|
||||||
eg.Go(func() error {
|
|
||||||
if c.isDryRun {
|
|
||||||
fmt.Printf("Replace [%s] -> [%s]\n", p.External, p.Internal)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := copy.Replace(p.External, p.Internal); err != nil {
|
|
||||||
return fmt.Errorf("copy: failed to replace [%s] -> [%s]: %w", p.External, p.Internal, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := eg.Wait(); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *cfg) Download(appNames ...string) error {
|
|
||||||
var eg errgroup.Group
|
|
||||||
|
|
||||||
mAppNames := slice2map(appNames)
|
|
||||||
|
|
||||||
for appName, app := range c.cfgApps.Apps {
|
|
||||||
if len(appNames) > 0 {
|
|
||||||
if _, ok := mAppNames[appName]; !ok {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, p := range app.Paths {
|
|
||||||
if p.URL == "" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
p := Path{
|
|
||||||
Internal: p.Internal,
|
|
||||||
External: p.External,
|
|
||||||
URL: p.URL,
|
|
||||||
}
|
|
||||||
|
|
||||||
httpClient := &http.Client{}
|
|
||||||
|
|
||||||
eg.Go(func() error {
|
|
||||||
if c.isDryRun {
|
|
||||||
fmt.Printf("Download [%s] -> [%s]\n", p.URL, p.Internal)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// nolint:noctx,gosec
|
|
||||||
httpRsp, err := httpClient.Get(p.URL)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("http client: failed to get: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
data, err := io.ReadAll(httpRsp.Body)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("io: failed to read all: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Copy from github.com/make-go-great/copy-go
|
|
||||||
// Make sure nested dir is exist before copying file
|
|
||||||
dstDir := filepath.Dir(p.Internal)
|
|
||||||
if err := os.MkdirAll(dstDir, 0o750); err != nil {
|
|
||||||
return fmt.Errorf("os: failed to mkdir all [%s]: %w", dstDir, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := os.WriteFile(p.Internal, data, 0o600); err != nil {
|
|
||||||
return fmt.Errorf("os: failed to write file: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := httpRsp.Body.Close(); err != nil {
|
|
||||||
return fmt.Errorf("http client: failed to close body: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
})
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := eg.Wait(); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Clean remove unused config inside config dir
|
|
||||||
func (c *cfg) Clean() error {
|
|
||||||
unusedDirs, err := getUnusedDirs(c.cfgApps.Apps)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return nil, nil, fmt.Errorf("failed to read file%s: %w", configPath, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Delete unused dirs to save some space
|
var cfgApps configApps
|
||||||
for dir := range unusedDirs {
|
if err = json.Unmarshal(bytes, &cfgApps); err != nil {
|
||||||
if c.isDryRun {
|
return nil, nil, fmt.Errorf("failed to unmarshal: %w", err)
|
||||||
fmt.Printf("Remove [%s]\n", dir)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
dirPath := filepath.Join(configDirPath, dir)
|
|
||||||
if err := os.RemoveAll(dirPath); err != nil {
|
|
||||||
return fmt.Errorf("os: failed to remove all [%s]: %w", dir, err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
cfgReal := configReal{
|
||||||
}
|
configApps: cfgApps,
|
||||||
|
}
|
||||||
func getUnusedDirs(apps map[string]App) (map[string]struct{}, error) {
|
|
||||||
files, err := os.ReadDir(configDirPath)
|
cfgDemo := configDemo{
|
||||||
if err != nil {
|
configApps: cfgApps,
|
||||||
return nil, fmt.Errorf("os: failed to read dir [%s]: %w", configDirPath, err)
|
}
|
||||||
}
|
|
||||||
|
return &cfgReal, &cfgDemo, nil
|
||||||
// Get all dirs inside config dir
|
|
||||||
unusedDirs := make(map[string]struct{})
|
|
||||||
for _, file := range files {
|
|
||||||
// Ignore config file
|
|
||||||
if file.Name() == configFileJSON ||
|
|
||||||
file.Name() == configFileTOML {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
unusedDirs[file.Name()] = struct{}{}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Removed used dirs
|
|
||||||
for name := range apps {
|
|
||||||
delete(unusedDirs, name)
|
|
||||||
}
|
|
||||||
|
|
||||||
return unusedDirs, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *cfg) Diff(appNames ...string) error {
|
|
||||||
mAppNames := slice2map(appNames)
|
|
||||||
|
|
||||||
for appName, app := range c.cfgApps.Apps {
|
|
||||||
if len(appNames) > 0 {
|
|
||||||
if _, ok := mAppNames[appName]; !ok {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, p := range app.Paths {
|
|
||||||
if p.External == "" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := diff.Diff(p.Internal, p.External); err != nil {
|
|
||||||
return fmt.Errorf("diff: failed to compare [%s] with [%s]: %w", p.Internal, p.External, err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *cfg) Validate(appNames ...string) error {
|
|
||||||
var eg errgroup.Group
|
|
||||||
|
|
||||||
mAppNames := slice2map(appNames)
|
|
||||||
|
|
||||||
for appName, app := range c.cfgApps.Apps {
|
|
||||||
if len(appNames) > 0 {
|
|
||||||
if _, ok := mAppNames[appName]; !ok {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, p := range app.Paths {
|
|
||||||
app := app
|
|
||||||
p := Path{
|
|
||||||
Internal: p.Internal,
|
|
||||||
External: p.External,
|
|
||||||
URL: p.URL,
|
|
||||||
}
|
|
||||||
|
|
||||||
eg.Go(func() error {
|
|
||||||
if p.Internal == "" {
|
|
||||||
return fmt.Errorf("empty internal app [%s]: %w", app, ErrConfigInvalid)
|
|
||||||
}
|
|
||||||
|
|
||||||
if p.External == "" && p.URL == "" {
|
|
||||||
return fmt.Errorf("empty external and url app [%s]: %w", app, ErrConfigInvalid)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := eg.Wait(); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *cfg) List() []string {
|
|
||||||
return c.cfgApps.Apps2
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
package config
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
type configDemo struct {
|
||||||
|
configApps
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ Config = (*configDemo)(nil)
|
||||||
|
|
||||||
|
func (c *configDemo) Install() error {
|
||||||
|
for _, app := range c.Apps {
|
||||||
|
for _, p := range app.Paths {
|
||||||
|
fmt.Printf("Replace %s -> %s\n", p.Internal, p.External)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *configDemo) Update() error {
|
||||||
|
for _, app := range c.Apps {
|
||||||
|
for _, p := range app.Paths {
|
||||||
|
fmt.Printf("Replace %s -> %s\n", p.External, p.Internal)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *configDemo) Clean() error {
|
||||||
|
unusedDirs, err := getUnusedDirs(c.Apps)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
for dir := range unusedDirs {
|
||||||
|
fmt.Printf("Remove %s\n", dir)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *configDemo) Compare() error {
|
||||||
|
return nil
|
||||||
|
}
|
|
@ -0,0 +1,96 @@
|
||||||
|
package config
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
|
||||||
|
"github.com/make-go-great/copy-go"
|
||||||
|
)
|
||||||
|
|
||||||
|
type configReal struct {
|
||||||
|
configApps
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ Config = (*configReal)(nil)
|
||||||
|
|
||||||
|
// Install internal -> external
|
||||||
|
func (c *configReal) Install() error {
|
||||||
|
for _, app := range c.Apps {
|
||||||
|
for _, p := range app.Paths {
|
||||||
|
if err := copy.Replace(p.Internal, p.External); err != nil {
|
||||||
|
return fmt.Errorf("failed to replace %s -> %s: %w", p.Internal, p.External, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update external -> internal
|
||||||
|
func (c *configReal) Update() error {
|
||||||
|
for _, app := range c.Apps {
|
||||||
|
for _, p := range app.Paths {
|
||||||
|
if err := copy.Replace(p.External, p.Internal); err != nil {
|
||||||
|
return fmt.Errorf("failed to replace %s -> %s: %w", p.External, p.Internal, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clean remove unused config inside config dir
|
||||||
|
func (c *configReal) Clean() error {
|
||||||
|
unusedDirs, err := getUnusedDirs(c.Apps)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete ununsed dirs to save some space
|
||||||
|
for dir := range unusedDirs {
|
||||||
|
dirPath := filepath.Join(configDirPath, dir)
|
||||||
|
if err := os.RemoveAll(dirPath); err != nil {
|
||||||
|
return fmt.Errorf("failed to remove %s: %w", dir, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *configReal) Compare() error {
|
||||||
|
for _, app := range c.Apps {
|
||||||
|
for _, p := range app.Paths {
|
||||||
|
if err := copy.Compare(p.Internal, p.External); err != nil {
|
||||||
|
return fmt.Errorf("failed to compare %s with %s: %w", p.Internal, p.External, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func getUnusedDirs(apps map[string]App) (map[string]struct{}, error) {
|
||||||
|
files, err := os.ReadDir(configDirPath)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to read dir %s: %w", configDirPath, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get all dirs inside config dir
|
||||||
|
unusedDirs := make(map[string]struct{})
|
||||||
|
for _, file := range files {
|
||||||
|
// Ignore config file
|
||||||
|
if file.Name() == configFile {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
unusedDirs[file.Name()] = struct{}{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Removed used dirs
|
||||||
|
for name := range apps {
|
||||||
|
delete(unusedDirs, name)
|
||||||
|
}
|
||||||
|
|
||||||
|
return unusedDirs, nil
|
||||||
|
}
|
|
@ -1,27 +0,0 @@
|
||||||
package config
|
|
||||||
|
|
||||||
type ConfigApps struct {
|
|
||||||
Apps map[string]App `json:"apps" toml:"apps"`
|
|
||||||
// Sort version
|
|
||||||
Apps2 []string `json:"-" toml:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// Read from file
|
|
||||||
type App struct {
|
|
||||||
Paths []Path `json:"paths" toml:"paths"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type Path struct {
|
|
||||||
Internal string `json:"internal" toml:"internal"`
|
|
||||||
External string `json:"external,omitempty" toml:"external"`
|
|
||||||
URL string `json:"url,omitempty" toml:"url"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// Helper
|
|
||||||
func slice2map(vs []string) map[string]struct{} {
|
|
||||||
m := make(map[string]struct{}, len(vs))
|
|
||||||
for _, v := range vs {
|
|
||||||
m[v] = struct{}{}
|
|
||||||
}
|
|
||||||
return m
|
|
||||||
}
|
|
51
justfile
51
justfile
|
@ -1,51 +0,0 @@
|
||||||
all: tidy format test-color lint build clean
|
|
||||||
|
|
||||||
tidy:
|
|
||||||
go mod tidy
|
|
||||||
|
|
||||||
test:
|
|
||||||
go test -race -failfast ./...
|
|
||||||
|
|
||||||
test-color:
|
|
||||||
# go install github.com/haunt98/go-test-color@latest
|
|
||||||
go-test-color -race -failfast ./...
|
|
||||||
|
|
||||||
coverage:
|
|
||||||
go test -coverprofile=coverage.out ./...
|
|
||||||
|
|
||||||
coverage-cli: coverage
|
|
||||||
go tool cover -func=coverage.out
|
|
||||||
|
|
||||||
coverage-html: coverage
|
|
||||||
go tool cover -html=coverage.out
|
|
||||||
|
|
||||||
lint:
|
|
||||||
golangci-lint run ./...
|
|
||||||
|
|
||||||
format:
|
|
||||||
# go install github.com/haunt98/gofimports/cmd/gofimports@latest
|
|
||||||
# go install mvdan.cc/gofumpt@latest
|
|
||||||
# go install mvdan.cc/sh/v3/cmd/shfmt@latest
|
|
||||||
gofimports -w --company github.com/make-go-great,github.com/haunt98 .
|
|
||||||
gofumpt -w -extra .
|
|
||||||
shfmt -w -s -i 4 ./scripts \
|
|
||||||
./data/zsh/top-zshrc \
|
|
||||||
./data/zsh/bottom-zshrc
|
|
||||||
|
|
||||||
build:
|
|
||||||
go build ./cmd/dot
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -rf dot
|
|
||||||
|
|
||||||
dot-upd:
|
|
||||||
go run ./cmd/dot upd
|
|
||||||
|
|
||||||
dot-ins:
|
|
||||||
go run ./cmd/dot ins
|
|
||||||
|
|
||||||
dot-dl:
|
|
||||||
go run ./cmd/dot dl
|
|
||||||
|
|
||||||
dot-df:
|
|
||||||
go run ./cmd/dot df
|
|
|
@ -1,15 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
brew install \
|
|
||||||
libgit2 pcre2 xz telnet \
|
|
||||||
starship zsh-autosuggestions \
|
|
||||||
git neovim \
|
|
||||||
bat-extras \
|
|
||||||
rsync rclone restic fclones f2 wcurl ncdu \
|
|
||||||
tlrc vivid zellij totp-cli \
|
|
||||||
yt-dlp newsboat vips btop \
|
|
||||||
fnm oven-sh/bun/bun deno uv \
|
|
||||||
just typst asciidoctor clang-format stylua sqlfluff taplo typos-cli typstyle marksman tinymist \
|
|
||||||
yq gojq fx ollama gitleaks gh glab k1LoW/tap/tbls ghz k6 \
|
|
||||||
qmk/qmk/qmk daktilo asciinema qpdf \
|
|
||||||
redis mysql-client
|
|
|
@ -1,7 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
brew update
|
|
||||||
brew upgrade
|
|
||||||
brew autoremove
|
|
||||||
brew cleanup
|
|
||||||
brew doctor
|
|
|
@ -1,3 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
bun install --global --production prettier
|
|
|
@ -1,3 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
bun update --global --latest prettier
|
|
|
@ -1,11 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
rustup update
|
|
||||||
|
|
||||||
cargo install \
|
|
||||||
fd-find bat git-delta eza sd \
|
|
||||||
difftastic zoxide
|
|
||||||
|
|
||||||
cargo install --git https://github.com/BurntSushi/ripgrep ripgrep --features 'pcre2'
|
|
||||||
|
|
||||||
bat cache --build
|
|
|
@ -1,9 +0,0 @@
|
||||||
# Need to run this once in a while
|
|
||||||
# go clean -cache -testcache -modcache -fuzzcache -x
|
|
||||||
# sudo cargo +nightly clean gc -Z gc --max-download-age=1hour
|
|
||||||
# uv cache clean
|
|
||||||
# bun pm cache rm --global
|
|
||||||
# docker system prune --all --force --volumes
|
|
||||||
# rm -rf ~/.ollama/models/blobs/sha256-*
|
|
||||||
# sudo truncate -s 0 /private/var/log/ovpnagent.log
|
|
||||||
# rm -rf ~/pprof
|
|
|
@ -1,74 +1,20 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# Clean state
|
# Aliases
|
||||||
truncate -s 0 ~/.gitconfig
|
|
||||||
|
|
||||||
# Global aliases
|
|
||||||
git config --global alias.ass add
|
|
||||||
git config --global alias.br branch
|
git config --global alias.br branch
|
||||||
git config --global alias.brv "branch -v --sort=-committerdate"
|
|
||||||
git config --global alias.ci commit
|
git config --global alias.ci commit
|
||||||
git config --global alias.cl clone
|
git config --global alias.cl clone
|
||||||
git config --global alias.co checkout
|
git config --global alias.co checkout
|
||||||
git config --global alias.df "diff -w"
|
git config --global alias.df diff
|
||||||
git config --global alias.dfc "diff -w --cached"
|
|
||||||
git config --global alias.fe "fetch --all --tags"
|
git config --global alias.fe "fetch --all --tags"
|
||||||
git config --global alias.lg "log --stat --abbrev-commit"
|
git config --global alias.lg "log --stat"
|
||||||
git config --global alias.lg1 "log --graph --abbrev-commit --pretty=format:'%Cred%h%Creset %C(yellow)%d%Creset %Cblue%an%Creset %s %Cgreen(%cr)%Creset'"
|
|
||||||
git config --global alias.me merge
|
|
||||||
git config --global alias.pl "pull --tags"
|
git config --global alias.pl "pull --tags"
|
||||||
git config --global alias.ps push
|
git config --global alias.ps push
|
||||||
git config --global alias.psa "!git remote | xargs -L1 -P8 git push"
|
|
||||||
git config --global alias.psaf "!git remote | xargs -L1 -P8 git push --force-with-lease"
|
|
||||||
git config --global alias.psf "push --force-with-lease"
|
|
||||||
git config --global alias.rank "shortlog -nse --no-merges"
|
|
||||||
git config --global alias.rst restore
|
|
||||||
git config --global alias.sh show
|
|
||||||
git config --global alias.st status
|
git config --global alias.st status
|
||||||
git config --global alias.stcl "stash clear"
|
|
||||||
git config --global alias.sth stash
|
|
||||||
git config --global alias.stp "stash pop"
|
|
||||||
git config --global alias.sw switch
|
git config --global alias.sw switch
|
||||||
git config --global alias.tg "tag --sort=-version:refname"
|
git config --global alias.tg "tag --sort=-version:refname"
|
||||||
|
|
||||||
# Misc
|
# Misc
|
||||||
git config --global commit.verbose true
|
git config --global pull.rebase true
|
||||||
git config --global core.excludesfile "~/.config/git/ignore"
|
|
||||||
git config --global core.fsmonitor true
|
|
||||||
git config --global diff.algorithm histogram
|
|
||||||
git config --global diff.colorMoved no
|
|
||||||
git config --global diff.submodule log
|
|
||||||
git config --global fetch.prune true
|
git config --global fetch.prune true
|
||||||
git config --global http.postBuffer 500000000
|
|
||||||
git config --global init.defaultBranch main
|
git config --global init.defaultBranch main
|
||||||
git config --global log.date iso
|
|
||||||
git config --global merge.conflictstyle zdiff3
|
|
||||||
git config --global pull.rebase false
|
|
||||||
git config --global pull.twohead ort
|
|
||||||
git config --global push.autoSetupRemote true
|
|
||||||
git config --global rebase.stat true
|
|
||||||
git config --global rerere.enabled true
|
|
||||||
git config --global status.submoduleSummary true
|
|
||||||
git config --global submodule.recurse true
|
|
||||||
|
|
||||||
# https://github.com/dandavison/delta
|
|
||||||
git config --global core.pager delta
|
|
||||||
git config --global delta.file-decoration-style none
|
|
||||||
git config --global delta.hunk-header-decoration-style none
|
|
||||||
git config --global delta.commit-decoration-style none
|
|
||||||
git config --global delta.navigate true
|
|
||||||
|
|
||||||
# https://github.com/catppuccin/delta
|
|
||||||
git config --global --add include.path "~/.config/delta/themes/catppuccin.gitconfig"
|
|
||||||
git config --global delta.features catppuccin-mocha
|
|
||||||
git config --global delta.catppuccin-mocha.file-decoration-style none
|
|
||||||
git config --global delta.catppuccin-mocha.hunk-header-decoration-style none
|
|
||||||
git config --global delta.catppuccin-mocha.commit-decoration-style none
|
|
||||||
|
|
||||||
# https://github.com/Wilfred/difftastic
|
|
||||||
git config --global alias.dftc "difftool --cached"
|
|
||||||
git config --global alias.dft "difftool"
|
|
||||||
git config --global diff.tool difftastic
|
|
||||||
git config --global difftool.difftastic.cmd 'difft "$LOCAL" "$REMOTE"'
|
|
||||||
git config --global difftool.prompt false
|
|
||||||
git config --global pager.difftool true
|
|
||||||
|
|
|
@ -1,23 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
go install mvdan.cc/sh/v3/cmd/shfmt@latest
|
|
||||||
|
|
||||||
go install golang.org/x/tools/gopls@latest
|
|
||||||
go install golang.org/x/tools/cmd/goimports@latest
|
|
||||||
|
|
||||||
go install github.com/walles/moar@latest
|
|
||||||
|
|
||||||
go install golang.org/x/telemetry/cmd/gotelemetry@latest
|
|
||||||
gotelemetry on
|
|
||||||
|
|
||||||
go install mvdan.cc/gofumpt@latest
|
|
||||||
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
|
|
||||||
go install golang.org/x/vuln/cmd/govulncheck@latest
|
|
||||||
go install github.com/securego/gosec/v2/cmd/gosec@latest
|
|
||||||
go install golang.org/x/tools/go/analysis/passes/fieldalignment/cmd/fieldalignment@latest
|
|
||||||
go install github.com/dkorunic/betteralign/cmd/betteralign@latest
|
|
||||||
go install github.com/maruel/panicparse/v2@latest
|
|
||||||
go install gotest.tools/gotestsum@latest
|
|
||||||
go install github.com/bufbuild/buf/cmd/buf@latest
|
|
||||||
go install github.com/google/pprof@latest
|
|
||||||
go install github.com/sudorandom/fauxrpc/cmd/fauxrpc@latest
|
|
|
@ -1,5 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
git -C ~/.zsh-plugins/fzf-tab pull origin master
|
|
||||||
|
|
||||||
fnm install --lts
|
|
|
@ -1,7 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
uv tool update-shell
|
|
||||||
|
|
||||||
uv tool install ruff
|
|
||||||
uv tool install pyright
|
|
||||||
uv tool install keymap-drawer
|
|
|
@ -1,3 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
uv tool upgrade --all
|
|
Loading…
Reference in New Issue