Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
73fe6b87a9
|
||
|
|
340b955bc5
|
@@ -0,0 +1,15 @@
|
||||
encryption = "age"
|
||||
|
||||
[age]
|
||||
identity = "~/.config/chezmoi/key"
|
||||
recipient = "age1pq1q8zvperhkgayvaeyppanuwml6l54a2ehp8au3z96qzsympcjxhsvzdk9exks48fufdr3xaq8n65tque5xmfe5q6gjelsv55y6wa38fxxnurujk8dzup9zl9j3343mvdndnl0y20uejscwe3lfzn382ftspcespwdkpy063nz2ne4jalf5amuk9uuhyq7gezyg0ryhps2vwrsesckqe3md9nt50szym5zwmc9n3mq4faxahrlvystfcs4wq9ccjv9552v5x34vjs5zn83qy4skktkgvppdga95kt9jjx2fc3jvtqrusrf8rr3qlpckz0nqxndcqkstxlte3n8tjmuahnj8ph4prfhn899ze9wnxyznregyu6nnj365rry86rdagj53fwg0x6n9zhx62e2x7jshzyydahzp264efhakf9llacfvlwx6efe2sppk5zfsp0m8vgeyv3fvrxqrv3y4zj6cgj29kdlc6mvtpeqrcxkkd0xcka44p2287nphx6shwk426jl3v8qedtg5n6rcq68r454dfhxffr356gj6x3sc7a6890pkn55qa63s74nju4ytakmzescsrxamd6psgx8vjrcyvxfqlapywd74z5456dr2h3s49yud9ekzly7gcl04jss9kg8zelgfnqatslz6qtv6tzrgcqzm2rqc3asjylh2vhe9ze3qvtnucnqkddzygqtkr99apg67r23ur6ey2dznw5j546qq3uxnf4vydj8wv9cxd0xzs8xvn9cxu93xt5kxnr8j3ry2al7rszczu5faf24wqqh835uevdwn2r5szjvjdrtg7fw4zgkcpft2fgqm35fafavvulezhj44d5jy6yly4zmckeh4xpfh82zkwkegav373t65upepvykqfgcnwvtsatewmska82ud76ak37gw0x94xycwszq8sm29q4gpq9f8f2eyk6dj8aqhmdurr7hh87scqf4sjt669w95fsyrkr7eynltw8u3fcaur2yq44yk6sgr38wlnrxlcxzmv4st5d5c0zwjprds3kn26j5d6arx7gxw8nrgs57cetjnx586h25ltv2hh5c27xvdj20l2cpd7434mkscfe0jp395mphsyrl0hfh69vvxvh3yyq7a2eeqvc03fcnkfju5lksvexg3nr43qtgk5wqcw36h4z4jy772qdusu6x8wsnh23c9v48cfvm5q3r6x79ptr63sdrejd9gpun9wwckp5r0qusp7g9qysyt8yz9235e0reungjlaz2pnvaqksuaxjy2fpyn8f4uvg82rtlhq8f3373np259sq3fl39d32whyk62a5dukf7se6qkaykwwxgcprp0patv5prfukyjdtpx3ym40nnye9a8m9snk4g2xyenwh6wcldt230c6zvanp3vyfmtvc6tsdgmsvu62n5jkw2cfc9yzxyv9st72ampfns3e96ymack4fvz49p6c7vq0xf84380axzs9ajx9ssdwwra4auczj3f4uutpwh4rypmdxs3y2qvutzh0am08yq5w6wjwgv6yad2aex3s2s2gmzwllw2tpnlzv2vejnm3t24zrlkyfhcuqu0a5ppfex3r2ekrwsy4lz9w045wen4tms7pg638zu3wwg7fjrf6ctjtsjh8yuxf58gcwpy50ym8xg30n2gr09kmp9dyaeqsespdfvz9m4085pk25jdtdhprr8dh9m44wyndc8zhsz4gwx26kkyscq7kctd3lxpl8jwszkjyk9tmqrxyvjxe29c7w8g0qcqulnc326xwpt9nrgqssww0wnya3w42392dwpukthq79zvzlw60qruh6vnnxe6w849ajxe3lss8e0rthnq6gpfm0f0q754nvn9f05xvz3ptj5kch6d5hpzgwdkrjuw7rrwxhs7gdn3gkk6puvs62yge6zrg7jalyx"
|
||||
|
||||
[data]
|
||||
{{ $system := promptStringOnce . "system" "Which system class is this machine?" "desktop" }}
|
||||
system = {{ $system | quote }}
|
||||
|
||||
{{ $email := promptStringOnce . "email" "What is your email address (git)" }}
|
||||
email = {{ $email | quote }}
|
||||
|
||||
{{ $name := promptStringOnce . "name" "What is your name (git)" }}
|
||||
name = {{ $name | quote }}
|
||||
@@ -0,0 +1,2 @@
|
||||
assets/
|
||||
README.md
|
||||
@@ -1,4 +1,5 @@
|
||||
roles/z
|
||||
roles/test
|
||||
error.log
|
||||
callback_plugins/__pycache__
|
||||
.callback_plugins/__pycache__
|
||||
# chezmoi local state — never committed
|
||||
.chezmoi/
|
||||
*.chezmoi.state
|
||||
@@ -1,46 +1,64 @@
|
||||
# Installation
|
||||
Clone the repo and execute the `install.sh` script.<br/>
|
||||
Or use this command:
|
||||
# Dotfiles (chezmoi)
|
||||
|
||||
Dotfiles managed by [chezmoi](https://www.chezmoi.io/). The repo works on
|
||||
Arch and Ubuntu (not complete) and has three machine classes: **server**, **desktop**, and **laptop**.
|
||||
|
||||
|
||||
## First-time install on a new machine
|
||||
|
||||
### 1. Install prerequisites
|
||||
|
||||
```bash
|
||||
bash -c "$(curl -fsSL https://gitea.keuledrive.de/Keule2/Dotfiles/raw/branch/main/install.sh)"
|
||||
```
|
||||
Or this command to use arguments:
|
||||
```bash
|
||||
curl -fsSL "https://gitea.keuledrive.de/Keule2/Dotfiles/raw/branch/main/install.sh" | bash -s -- -e "system=server"
|
||||
# Arch
|
||||
sudo pacman -S git curl age jq chezmoi
|
||||
|
||||
# Ubuntu
|
||||
sudo apt-get install -y git curl age jq
|
||||
# chezmoi: see https://www.chezmoi.io/install/
|
||||
```
|
||||
|
||||
# Update
|
||||
Just execute the `install.sh` script again.
|
||||
### 2. Provision the age key
|
||||
|
||||
# Usage
|
||||
All additional parameters are passed to the ansible playbook. This means that you can skip tags or only execute desired tags.<br/>
|
||||
Example: Skip alacritty
|
||||
The age key needs to be placed at `~/.config/chezmoi/key`
|
||||
With following permissions
|
||||
```bash
|
||||
./install.sh --skip-tags alacritty
|
||||
```
|
||||
Example: Only execute alacritty and fish
|
||||
```bash
|
||||
./install.sh -t alacritty,fish
|
||||
chmod 600 ~/.config/chezmoi/key
|
||||
```
|
||||
|
||||
# Settings
|
||||
There are two ways to set settings/values.
|
||||
1. Create/Edit: `$HOME/.config/dotfiles/values.yml`
|
||||
2. Edit: `$HOME/.dotfiles/group_vars/all`
|
||||
### 3. Bootstrap
|
||||
|
||||
## Ansible Vault
|
||||
Vault password file: `$HOME/.config/dotfiles/vault-password.txt`
|
||||
```bash
|
||||
chezmoi init --apply git@gitea.keuledrive.de:Keule2/Dotfiles.git
|
||||
```
|
||||
|
||||
## Settings
|
||||
### System
|
||||
|Value |Desc |Default|
|
||||
|------------|-------------------------------------------------------|-------|
|
||||
|server |Minimal installation (CMD tools) | |
|
||||
|desktop |Install WM and desktop applications |x |
|
||||
|desktop_full|Install additional packages for the desktop (e.g. wine)| |
|
||||
<br/>
|
||||
Will ask:
|
||||
|
||||
# TODO
|
||||
- AGS: Bar, AppLauncher, PowerMenu, Notifications, Calculator, Emoji-Picker, ...
|
||||
- Ubuntu/Debian Support
|
||||
- ...
|
||||
- **Which system class is this machine?** — pick `server`, `desktop`, or `laptop`.
|
||||
- **EMAIL** — for git config.
|
||||
|
||||
## Usage
|
||||
|
||||
| Command | Effect |
|
||||
|---|---|
|
||||
| `chezmoi apply` | apply any local changes to dotfiles and run-once scripts |
|
||||
| `chezmoi update` | `git pull` + `apply` |
|
||||
| `chezmoi edit <file>` | open a tracked file in `$EDITOR` |
|
||||
| `chezmoi cd` | shell into the source dir |
|
||||
| `chezmoi diff` | show pending changes against your home |
|
||||
| `chezmoi managed` | list files chezmoi manages |
|
||||
|
||||
## Changing the system class
|
||||
|
||||
Two ways:
|
||||
|
||||
```bash
|
||||
# Option A: re-prompt
|
||||
chezmoi init --apply --force --prompt
|
||||
|
||||
# Option B: edit the cached value
|
||||
$EDITOR ~/.config/chezmoi/chezmoi.toml # change [data].system
|
||||
chezmoi apply
|
||||
```
|
||||
|
||||
## TODO
|
||||
- Check packages e.g. gaming Steam/Lutris
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
[defaults]
|
||||
stdout_callback = beautiful_output
|
||||
# Use the stdout_callback when running ad-hoc commands.
|
||||
bin_ansible_callbacks = True
|
||||
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 822 KiB After Width: | Height: | Size: 822 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 549 B After Width: | Height: | Size: 549 B |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 529 B After Width: | Height: | Size: 529 B |
|
Before Width: | Height: | Size: 515 B After Width: | Height: | Size: 515 B |
|
Before Width: | Height: | Size: 1012 B After Width: | Height: | Size: 1012 B |
|
Before Width: | Height: | Size: 515 B After Width: | Height: | Size: 515 B |
|
Before Width: | Height: | Size: 508 B After Width: | Height: | Size: 508 B |
|
Before Width: | Height: | Size: 540 B After Width: | Height: | Size: 540 B |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 552 B After Width: | Height: | Size: 552 B |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 529 B After Width: | Height: | Size: 529 B |
|
Before Width: | Height: | Size: 513 B After Width: | Height: | Size: 513 B |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 515 B After Width: | Height: | Size: 515 B |
|
Before Width: | Height: | Size: 508 B After Width: | Height: | Size: 508 B |
|
Before Width: | Height: | Size: 535 B After Width: | Height: | Size: 535 B |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.0 KiB |
|
Before Width: | Height: | Size: 547 B After Width: | Height: | Size: 547 B |
|
Before Width: | Height: | Size: 553 B After Width: | Height: | Size: 553 B |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 553 B After Width: | Height: | Size: 553 B |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 546 B After Width: | Height: | Size: 546 B |
@@ -23,20 +23,22 @@ function ya() {
|
||||
|
||||
## Aliases
|
||||
# Replace ls with eza
|
||||
alias ls='eza -al --color=always --group-directories-first' # preferred listing
|
||||
alias la='eza -a --color=always --group-directories-first' # all files and dirs
|
||||
alias ll='eza -l --color=always --group-directories-first' # long format
|
||||
alias lt='eza -aT --color=always --group-directories-first' # tree listing
|
||||
alias l.='eza -ald --color=always --group-directories-first .*' # show only dotfiles
|
||||
if [ -f /usr/bin/eza ]; then
|
||||
alias ls='eza -al --color=always --group-directories-first --icons=auto' # preferred listing
|
||||
alias la='eza -a --color=always --group-directories-first --icons=auto' # all files and dirs
|
||||
alias ll='eza -l --color=always --group-directories-first --icons=auto' # long format
|
||||
alias lt='eza -aT --color=always --group-directories-first --icons=auto' # tree listing
|
||||
alias l.='eza -ald --color=always --group-directories-first --icons=auto .*' # show only dotfiles
|
||||
fi
|
||||
|
||||
# Replace cat with bat
|
||||
if [ -f /usr/bin/bat ]; then
|
||||
alias cat='bat --style header --style snip --style changes --style header'
|
||||
fi
|
||||
|
||||
# Replace yay with paru
|
||||
if [ -f /usr/bin/paru ]; then
|
||||
alias yay='paru'
|
||||
# Replace paru with yay
|
||||
if [ -f /usr/bin/yay ]; then
|
||||
alias paru='yay'
|
||||
fi
|
||||
|
||||
# Aliases
|
||||
@@ -56,12 +58,14 @@ alias rmpkg="sudo pacman -Rdd"
|
||||
alias tarnow='tar -acf '
|
||||
alias untar='tar -zxvf '
|
||||
alias wget='wget -c '
|
||||
|
||||
# Cleanup orphaned packages
|
||||
alias cleanup='sudo pacman -Rns `pacman -Qtdq`'
|
||||
|
||||
# Get the error messages from journalctl
|
||||
alias jctl="journalctl -p 3 -xb"
|
||||
|
||||
# Recent installed packages
|
||||
alias rip="expac --timefmt='%Y-%m-%d %T' '%l\t%n %v' | sort | tail -200 | nl"
|
||||
alias ripp="expac --timefmt='%Y-%m-%d %T' '%l\t%n %v' | sort | tail -200 | nl"
|
||||
|
||||
|
||||
if [ -f /usr/bin/fastfetch ]; then
|
||||
fastfetch
|
||||
fi
|
||||
@@ -21,11 +21,14 @@ if test -d ~/.local/bin
|
||||
end
|
||||
end
|
||||
|
||||
## Plugin configuration
|
||||
# Set settings for https://github.com/franciscolourenco/done
|
||||
set -U __done_min_cmd_duration 10000
|
||||
set -U __done_notification_urgency_level low
|
||||
# Add ~/go to PATH
|
||||
if test -d ~/go/bin
|
||||
if not contains -- ~/go/bin $PATH
|
||||
set -p PATH ~/go/bin
|
||||
end
|
||||
end
|
||||
|
||||
## Plugin configuration
|
||||
# Starship prompt
|
||||
if type -q starship && status --is-interactive
|
||||
starship init fish | source
|
||||
@@ -39,7 +42,7 @@ end
|
||||
## Functions
|
||||
# Fish command history
|
||||
function history
|
||||
builtin history --show-time='%F %T '
|
||||
builtin history --reverse --show-time='%F %T '
|
||||
end
|
||||
|
||||
function ba --argument filename
|
||||
@@ -54,7 +57,7 @@ function cp_bar
|
||||
kill $cpid &> /dev/null
|
||||
end
|
||||
|
||||
function unzip -a input_file
|
||||
function unzipc -a input_file
|
||||
if test -z "$input_file"
|
||||
echo "Usage: unzip <filename.zip>"
|
||||
return 1
|
||||
@@ -70,7 +73,7 @@ function unzip -a input_file
|
||||
command unzip "$input_file" -d "$folder_name" && echo "File '$input_file' successfully extracted to '$folder_name/'"
|
||||
end
|
||||
|
||||
function untar -a input_file
|
||||
function untarc -a input_file
|
||||
if test -z "$input_file"
|
||||
echo "Usage: untar <filename.zip>"
|
||||
return 1
|
||||
@@ -114,23 +117,31 @@ function mvn-run -a mainClass -d "Run your current maven project"
|
||||
end
|
||||
|
||||
# Yazi wrapper
|
||||
function ya
|
||||
set tmp (mktemp -t "yazi-cwd.XXXXX")
|
||||
yazi $argv --cwd-file="$tmp"
|
||||
if set cwd (cat -- "$tmp"); and [ -n "$cwd" ]; and [ "$cwd" != "$PWD" ]
|
||||
cd "$cwd"
|
||||
function y
|
||||
set tmp (mktemp -t "yazi-cwd.XXXXXX")
|
||||
yazi $argv --cwd-file="$tmp"
|
||||
if read -z cwd < "$tmp"; and [ -n "$cwd" ]; and [ "$cwd" != "$PWD" ]
|
||||
builtin cd -- "$cwd"
|
||||
end
|
||||
rm -f -- "$tmp"
|
||||
end
|
||||
|
||||
# Convert webm to opus
|
||||
function w2o
|
||||
for f in *.webm
|
||||
ffmpeg -i "$f" -map 0:a:0 -c:a copy (path change-extension opus "$f")
|
||||
and rm "$f"
|
||||
end
|
||||
rm -f -- "$tmp"
|
||||
end
|
||||
|
||||
## Aliases
|
||||
# Replace ls with eza
|
||||
if type -q eza
|
||||
alias ls='eza -al --color=always --group-directories-first --icons' # preferred listing
|
||||
alias la='eza -a --color=always --group-directories-first --icons' # all files and dirs
|
||||
alias ll='eza -l --color=always --group-directories-first --icons' # long format
|
||||
alias lt='eza -aT --color=always --group-directories-first --icons' # tree listing
|
||||
alias l.='eza -ald --color=always --group-directories-first --icons .*' # show only dotfiles
|
||||
alias ls='eza -al --color=always --group-directories-first --icons=auto' # preferred listing
|
||||
alias la='eza -a --color=always --group-directories-first --icons=auto' # all files and dirs
|
||||
alias ll='eza -l --color=always --group-directories-first --icons=auto' # long format
|
||||
alias lt='eza -aT --color=always --group-directories-first --icons=auto' # tree listing
|
||||
alias l.='eza -ald --color=always --group-directories-first --icons=auto .*' # show only dotfiles
|
||||
end
|
||||
|
||||
# Replace cat with bat
|
||||
@@ -155,7 +166,7 @@ alias nano=nvim
|
||||
alias cls='clear'
|
||||
alias please='sudo'
|
||||
alias ip='ip -color'
|
||||
alias wip=curl https://ipinfo.io/ip
|
||||
alias wip='curl https://ipinfo.io/ip'
|
||||
alias mkdirs='mkdir --parents'
|
||||
alias grubup="sudo update-grub"
|
||||
alias fixpacman="sudo rm /var/lib/pacman/db.lck"
|
||||
@@ -178,8 +189,10 @@ alias bigpkg="expac -H M '%m\t%n' | sort -h | nl" # Sort installed packages ac
|
||||
alias gitpkg='pacman -Q | grep -i "\-git" | wc -l' # List amount of -git packages
|
||||
alias cleanup='sudo pacman -Rns (pacman -Qtdq)' # Cleanup orphaned packages
|
||||
alias jctl="journalctl -p 3 -xb" # Get the error messages from journalctl
|
||||
alias rip="expac --timefmt='%Y-%m-%d %T' '%l\t%n %v' | sort | tail -200 | nl" # Recent installed packages
|
||||
alias h="cliphist list | fzf | cliphist decode | wl-copy"
|
||||
alias ripp="expac --timefmt='%Y-%m-%d %T' '%l\t%n %v' | sort | tail -200 | nl" # Recent installed packages
|
||||
alias ch="cliphist list | fzf | cliphist decode | wl-copy"
|
||||
alias dirsize="du -h --max-depth=1"
|
||||
|
||||
|
||||
# Get fastest mirrors
|
||||
alias mirror="sudo reflector -f 30 -l 30 --number 10 --verbose --save /etc/pacman.d/mirrorlist"
|
||||
@@ -0,0 +1,38 @@
|
||||
-- DMS user keybind overrides (edit via Control Center or dms; do not remove this header)
|
||||
|
||||
hl.unbind("CTRL + SHIFT + Escape")
|
||||
hl.bind("CTRL + SHIFT + Escape", hl.dsp.exec_cmd("dms ipc call processlist focusOrToggle"), { description = "dms ipc call processlist focusOrToggle" })
|
||||
hl.unbind("SUPER + CTRL + S")
|
||||
hl.bind("SUPER + CTRL + S", hl.dsp.exec_cmd("dms ipc call quickCapture screenshot window edit"), { description = "screenshot window" })
|
||||
hl.unbind("SUPER + I")
|
||||
hl.bind("SUPER + I", hl.dsp.exec_cmd("dms ipc notifications toggle"), { description = "notification toggle" })
|
||||
hl.unbind("SUPER + N")
|
||||
hl.bind("SUPER + N", hl.dsp.exec_cmd("dms ipc call notepad toggle"), { description = "dms ipc call notepad toggle" })
|
||||
hl.unbind("SUPER + O")
|
||||
hl.bind("SUPER + O", hl.dsp.exec_cmd("dms ipc call lock lock"), { description = "dms ipc call lock lock" })
|
||||
hl.unbind("SUPER + SHIFT + B")
|
||||
hl.bind("SUPER + SHIFT + B", hl.dsp.exec_cmd("dms ipc call mpris previous"), { locked = true, description = "dms ipc call mpris previous" })
|
||||
hl.unbind("SUPER + SHIFT + N")
|
||||
hl.bind("SUPER + SHIFT + N", hl.dsp.exec_cmd("dms ipc call mpris next"), { locked = true, description = "dms ipc call mpris next" })
|
||||
hl.unbind("SUPER + SHIFT + P")
|
||||
hl.bind("SUPER + SHIFT + P", hl.dsp.exec_cmd("dms ipc call mpris playPause"), { locked = true, description = "dms ipc call mpris playPause" })
|
||||
hl.unbind("SUPER + SHIFT + S")
|
||||
hl.bind("SUPER + SHIFT + S", hl.dsp.exec_cmd("dms ipc call quickCapture screenshot region edit"), { description = "screenshot region" })
|
||||
hl.unbind("SUPER + SHIFT + T")
|
||||
hl.bind("SUPER + SHIFT + T", hl.dsp.exec_cmd("dms ipc call timer toggle"), { description = "timer toggle" })
|
||||
hl.unbind("SUPER + B")
|
||||
hl.bind("SUPER + B", hl.dsp.exec_cmd("brave"))
|
||||
hl.unbind("SUPER + E")
|
||||
hl.bind("SUPER + E", hl.dsp.exec_cmd("thunar"))
|
||||
hl.unbind("SUPER + SHIFT + O")
|
||||
hl.bind("SUPER + SHIFT + O", hl.dsp.dpms({ action = "toggle" }), { description = "dpms toggle" })
|
||||
hl.unbind("CTRL + ALT + Delete")
|
||||
hl.unbind("CTRL + SHIFT + T")
|
||||
hl.unbind("SUPER + C")
|
||||
hl.bind("SUPER + C", hl.dsp.window.close(), { description = "Close window" })
|
||||
hl.unbind("SUPER + CTRL + F")
|
||||
hl.unbind("SUPER + F")
|
||||
hl.bind("SUPER + F", hl.dsp.window.float({ action = "toggle" }), { description = "Float/unfloat window" })
|
||||
hl.unbind("SUPER + M")
|
||||
hl.bind("SUPER + M", hl.dsp.window.fullscreen({ mode = "maximized", action = "toggle" }), { description = "Toggle maximization" })
|
||||
hl.unbind("SUPER + Q")
|
||||
@@ -0,0 +1,171 @@
|
||||
-- DMS default keybinds (Hyprland 0.55+ Lua)
|
||||
|
||||
-- === Application Launchers ===
|
||||
hl.bind("SUPER + T", hl.dsp.exec_cmd("ghostty"))
|
||||
hl.bind("SUPER + space", hl.dsp.exec_cmd("dms ipc call spotlight toggle"))
|
||||
hl.bind("ALT + space", hl.dsp.exec_cmd("dms ipc call spotlight-bar toggle"))
|
||||
hl.bind("SUPER + V", hl.dsp.exec_cmd("dms ipc call clipboard toggle"))
|
||||
hl.bind("SUPER + M", hl.dsp.exec_cmd("dms ipc call processlist focusOrToggle"))
|
||||
hl.bind("SUPER + comma", hl.dsp.exec_cmd("dms ipc call settings focusOrToggle"))
|
||||
hl.bind("SUPER + N", hl.dsp.exec_cmd("dms ipc call notifications toggle"))
|
||||
hl.bind("SUPER + SHIFT + N", hl.dsp.exec_cmd("dms ipc call notepad toggle"))
|
||||
hl.bind("SUPER + Y", hl.dsp.exec_cmd("dms ipc call dash toggle wallpaper"))
|
||||
hl.bind("SUPER + TAB", hl.dsp.exec_cmd("dms ipc call hypr toggleOverview"))
|
||||
hl.bind("SUPER + O", hl.dsp.exec_cmd("dms ipc call hypr toggleOverview"))
|
||||
hl.bind("SUPER + X", hl.dsp.exec_cmd("dms ipc call powermenu toggle"))
|
||||
|
||||
-- === Cheat sheet
|
||||
hl.bind("SUPER + SHIFT + Slash", hl.dsp.exec_cmd("dms ipc call keybinds toggle hyprland"))
|
||||
|
||||
-- === Security ===
|
||||
hl.bind("SUPER + ALT + L", hl.dsp.exec_cmd("dms ipc call lock lock"))
|
||||
hl.bind("SUPER + SHIFT + E", hl.dsp.exit())
|
||||
hl.bind("CTRL + ALT + Delete", hl.dsp.exec_cmd("dms ipc call processlist focusOrToggle"))
|
||||
|
||||
-- === Audio Controls ===
|
||||
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("dms ipc call audio increment 3"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("dms ipc call audio decrement 3"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioMute", hl.dsp.exec_cmd("dms ipc call audio mute"), { locked = true })
|
||||
hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("dms ipc call audio micmute"), { locked = true })
|
||||
hl.bind("XF86AudioPause", hl.dsp.exec_cmd("dms ipc call mpris playPause"), { locked = true })
|
||||
hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("dms ipc call mpris playPause"), { locked = true })
|
||||
hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("dms ipc call mpris previous"), { locked = true })
|
||||
hl.bind("XF86AudioNext", hl.dsp.exec_cmd("dms ipc call mpris next"), { locked = true })
|
||||
hl.bind("CTRL + XF86AudioRaiseVolume", hl.dsp.exec_cmd("dms ipc call mpris increment 3"), { locked = true, repeating = true })
|
||||
hl.bind("CTRL + XF86AudioLowerVolume", hl.dsp.exec_cmd("dms ipc call mpris decrement 3"), { locked = true, repeating = true })
|
||||
|
||||
-- === Brightness Controls ===
|
||||
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd([[dms ipc call brightness increment 5 ""]]), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessDown", hl.dsp.exec_cmd([[dms ipc call brightness decrement 5 ""]]), { locked = true, repeating = true })
|
||||
|
||||
-- === Window Management ===
|
||||
hl.bind("SUPER + Q", hl.dsp.window.close())
|
||||
hl.bind("SUPER + F", hl.dsp.window.fullscreen({ mode = "maximized", action = "toggle" }))
|
||||
hl.bind("SUPER + SHIFT + F", hl.dsp.window.fullscreen({ mode = "fullscreen", action = "toggle" }))
|
||||
hl.bind("SUPER + SHIFT + T", hl.dsp.window.float({ action = "toggle" }))
|
||||
hl.bind("SUPER + W", hl.dsp.group.toggle())
|
||||
hl.bind("SUPER + SHIFT + W", hl.dsp.exec_cmd("dms ipc call window-rules toggle"))
|
||||
|
||||
-- === Focus Navigation ===
|
||||
hl.bind("SUPER + left", hl.dsp.focus({ direction = "l" }))
|
||||
hl.bind("SUPER + down", hl.dsp.focus({ direction = "d" }))
|
||||
hl.bind("SUPER + up", hl.dsp.focus({ direction = "u" }))
|
||||
hl.bind("SUPER + right", hl.dsp.focus({ direction = "r" }))
|
||||
hl.bind("SUPER + H", hl.dsp.focus({ direction = "l" }))
|
||||
hl.bind("SUPER + J", hl.dsp.focus({ direction = "d" }))
|
||||
hl.bind("SUPER + K", hl.dsp.focus({ direction = "u" }))
|
||||
hl.bind("SUPER + L", hl.dsp.focus({ direction = "r" }))
|
||||
|
||||
-- === Window Movement ===
|
||||
hl.bind("SUPER + SHIFT + left", hl.dsp.window.move({ direction = "l" }))
|
||||
hl.bind("SUPER + SHIFT + down", hl.dsp.window.move({ direction = "d" }))
|
||||
hl.bind("SUPER + SHIFT + up", hl.dsp.window.move({ direction = "u" }))
|
||||
hl.bind("SUPER + SHIFT + right", hl.dsp.window.move({ direction = "r" }))
|
||||
hl.bind("SUPER + SHIFT + H", hl.dsp.window.move({ direction = "l" }))
|
||||
hl.bind("SUPER + SHIFT + J", hl.dsp.window.move({ direction = "d" }))
|
||||
hl.bind("SUPER + SHIFT + K", hl.dsp.window.move({ direction = "u" }))
|
||||
hl.bind("SUPER + SHIFT + L", hl.dsp.window.move({ direction = "r" }))
|
||||
|
||||
-- === Column Navigation ===
|
||||
hl.bind("SUPER + Home", hl.dsp.focus({ window = "first" }))
|
||||
hl.bind("SUPER + End", hl.dsp.focus({ window = "last" }))
|
||||
|
||||
-- === Monitor Navigation ===
|
||||
hl.bind("SUPER + CTRL + left", hl.dsp.focus({ monitor = "l" }))
|
||||
hl.bind("SUPER + CTRL + right", hl.dsp.focus({ monitor = "r" }))
|
||||
hl.bind("SUPER + CTRL + H", hl.dsp.focus({ monitor = "l" }))
|
||||
hl.bind("SUPER + CTRL + J", hl.dsp.focus({ monitor = "d" }))
|
||||
hl.bind("SUPER + CTRL + K", hl.dsp.focus({ monitor = "u" }))
|
||||
hl.bind("SUPER + CTRL + L", hl.dsp.focus({ monitor = "r" }))
|
||||
|
||||
-- === Move to Monitor ===
|
||||
hl.bind("SUPER + SHIFT + CTRL + left", hl.dsp.window.move({ monitor = "l" }))
|
||||
hl.bind("SUPER + SHIFT + CTRL + down", hl.dsp.window.move({ monitor = "d" }))
|
||||
hl.bind("SUPER + SHIFT + CTRL + up", hl.dsp.window.move({ monitor = "u" }))
|
||||
hl.bind("SUPER + SHIFT + CTRL + right", hl.dsp.window.move({ monitor = "r" }))
|
||||
hl.bind("SUPER + SHIFT + CTRL + H", hl.dsp.window.move({ monitor = "l" }))
|
||||
hl.bind("SUPER + SHIFT + CTRL + J", hl.dsp.window.move({ monitor = "d" }))
|
||||
hl.bind("SUPER + SHIFT + CTRL + K", hl.dsp.window.move({ monitor = "u" }))
|
||||
hl.bind("SUPER + SHIFT + CTRL + L", hl.dsp.window.move({ monitor = "r" }))
|
||||
|
||||
-- === Workspace Navigation ===
|
||||
hl.bind("SUPER + Page_Down", hl.dsp.focus({ workspace = "e+1" }))
|
||||
hl.bind("SUPER + Page_Up", hl.dsp.focus({ workspace = "e-1" }))
|
||||
hl.bind("SUPER + U", hl.dsp.focus({ workspace = "e+1" }))
|
||||
hl.bind("SUPER + I", hl.dsp.focus({ workspace = "e-1" }))
|
||||
hl.bind("SUPER + CTRL + down", hl.dsp.window.move({ workspace = "e+1" }))
|
||||
hl.bind("SUPER + CTRL + up", hl.dsp.window.move({ workspace = "e-1" }))
|
||||
hl.bind("SUPER + CTRL + U", hl.dsp.window.move({ workspace = "e+1" }))
|
||||
hl.bind("SUPER + CTRL + I", hl.dsp.window.move({ workspace = "e-1" }))
|
||||
|
||||
-- === Workspace Management ===
|
||||
hl.bind("CTRL + SHIFT + R", hl.dsp.exec_cmd("dms ipc call workspace-rename open"))
|
||||
|
||||
-- === Move Workspaces ===
|
||||
hl.bind("SUPER + SHIFT + Page_Down", hl.dsp.window.move({ workspace = "e+1" }))
|
||||
hl.bind("SUPER + SHIFT + Page_Up", hl.dsp.window.move({ workspace = "e-1" }))
|
||||
hl.bind("SUPER + SHIFT + U", hl.dsp.window.move({ workspace = "e+1" }))
|
||||
hl.bind("SUPER + SHIFT + I", hl.dsp.window.move({ workspace = "e-1" }))
|
||||
|
||||
-- === Mouse Wheel Navigation ===
|
||||
hl.bind("SUPER + mouse_down", hl.dsp.focus({ workspace = "e+1" }))
|
||||
hl.bind("SUPER + mouse_up", hl.dsp.focus({ workspace = "e-1" }))
|
||||
hl.bind("SUPER + CTRL + mouse_down", hl.dsp.window.move({ workspace = "e+1" }))
|
||||
hl.bind("SUPER + CTRL + mouse_up", hl.dsp.window.move({ workspace = "e-1" }))
|
||||
|
||||
-- === Touchpad Gestures ===
|
||||
hl.gesture({ fingers = 3, direction = "horizontal", action = "workspace" })
|
||||
|
||||
-- === Numbered Workspaces ===
|
||||
hl.bind("SUPER + 1", hl.dsp.focus({ workspace = "1" }))
|
||||
hl.bind("SUPER + 2", hl.dsp.focus({ workspace = "2" }))
|
||||
hl.bind("SUPER + 3", hl.dsp.focus({ workspace = "3" }))
|
||||
hl.bind("SUPER + 4", hl.dsp.focus({ workspace = "4" }))
|
||||
hl.bind("SUPER + 5", hl.dsp.focus({ workspace = "5" }))
|
||||
hl.bind("SUPER + 6", hl.dsp.focus({ workspace = "6" }))
|
||||
hl.bind("SUPER + 7", hl.dsp.focus({ workspace = "7" }))
|
||||
hl.bind("SUPER + 8", hl.dsp.focus({ workspace = "8" }))
|
||||
hl.bind("SUPER + 9", hl.dsp.focus({ workspace = "9" }))
|
||||
|
||||
-- === Move to Numbered Workspaces ===
|
||||
hl.bind("SUPER + SHIFT + 1", hl.dsp.window.move({ workspace = "1" }))
|
||||
hl.bind("SUPER + SHIFT + 2", hl.dsp.window.move({ workspace = "2" }))
|
||||
hl.bind("SUPER + SHIFT + 3", hl.dsp.window.move({ workspace = "3" }))
|
||||
hl.bind("SUPER + SHIFT + 4", hl.dsp.window.move({ workspace = "4" }))
|
||||
hl.bind("SUPER + SHIFT + 5", hl.dsp.window.move({ workspace = "5" }))
|
||||
hl.bind("SUPER + SHIFT + 6", hl.dsp.window.move({ workspace = "6" }))
|
||||
hl.bind("SUPER + SHIFT + 7", hl.dsp.window.move({ workspace = "7" }))
|
||||
hl.bind("SUPER + SHIFT + 8", hl.dsp.window.move({ workspace = "8" }))
|
||||
hl.bind("SUPER + SHIFT + 9", hl.dsp.window.move({ workspace = "9" }))
|
||||
|
||||
-- === Column Management ===
|
||||
hl.bind("SUPER + bracketleft", hl.dsp.layout("preselect l"))
|
||||
hl.bind("SUPER + bracketright", hl.dsp.layout("preselect r"))
|
||||
|
||||
-- === Sizing & Layout ===
|
||||
hl.bind("SUPER + R", hl.dsp.layout("togglesplit"))
|
||||
hl.bind("SUPER + CTRL + F", hl.dsp.window.fullscreen({ mode = "maximized", action = "set" }))
|
||||
|
||||
-- === Move/resize windows with mainMod + LMB/RMB and dragging ===
|
||||
hl.bind("SUPER + mouse:272", hl.dsp.window.drag(), { mouse = true, description = "Move window" })
|
||||
hl.bind("SUPER + mouse:273", hl.dsp.window.resize(), { mouse = true, description = "Resize window" })
|
||||
|
||||
hl.bind("SUPER + code:20", hl.dsp.window.resize({ x = -100, y = 0, relative = true }), { description = "Expand window left" })
|
||||
hl.bind("SUPER + code:21", hl.dsp.window.resize({ x = 100, y = 0, relative = true }), { description = "Shrink window left" })
|
||||
|
||||
-- === Manual Sizing ===
|
||||
hl.bind("SUPER + minus", hl.dsp.window.resize({ x = -100, y = 0, relative = true }), { repeating = true })
|
||||
hl.bind("SUPER + equal", hl.dsp.window.resize({ x = 100, y = 0, relative = true }), { repeating = true })
|
||||
hl.bind("SUPER + SHIFT + minus", hl.dsp.window.resize({ x = 0, y = -100, relative = true }), { repeating = true })
|
||||
hl.bind("SUPER + SHIFT + equal", hl.dsp.window.resize({ x = 0, y = 100, relative = true }), { repeating = true })
|
||||
|
||||
-- === Screenshots ===
|
||||
hl.bind("Print", hl.dsp.exec_cmd("dms screenshot"))
|
||||
hl.bind("CTRL + Print", hl.dsp.exec_cmd("dms screenshot full"))
|
||||
hl.bind("ALT + Print", hl.dsp.exec_cmd("dms screenshot window"))
|
||||
|
||||
-- === Display Profiles ===
|
||||
hl.bind("SUPER + P", hl.dsp.exec_cmd("dms ipc outputs cycleProfile"))
|
||||
|
||||
-- === System Controls ===
|
||||
hl.bind("SUPER + SHIFT + P", hl.dsp.dpms({ action = "toggle" }))
|
||||
@@ -0,0 +1,27 @@
|
||||
-- Auto-generated by DMS Matugen hook — do not edit manually.
|
||||
-- Remove require("dms.colors") from hyprland.lua to override.
|
||||
|
||||
hl.config({
|
||||
general = {
|
||||
col = {
|
||||
active_border = "rgb(9fd49b)",
|
||||
inactive_border = "rgb(8c9388)",
|
||||
},
|
||||
},
|
||||
group = {
|
||||
col = {
|
||||
border_active = "rgb(9fd49b)",
|
||||
border_inactive = "rgb(8c9388)",
|
||||
border_locked_active = "rgb(ffb4ab)",
|
||||
border_locked_inactive = "rgb(8c9388)",
|
||||
},
|
||||
groupbar = {
|
||||
col = {
|
||||
active = "rgb(9fd49b)",
|
||||
inactive = "rgb(8c9388)",
|
||||
locked_active = "rgb(ffb4ab)",
|
||||
locked_inactive = "rgb(8c9388)",
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
@@ -0,0 +1,6 @@
|
||||
-- Auto-generated by DMS — do not edit manually
|
||||
|
||||
hl.env("HYPRCURSOR_THEME", "breeze_cursors")
|
||||
hl.env("XCURSOR_THEME", "breeze_cursors")
|
||||
hl.env("HYPRCURSOR_SIZE", "24")
|
||||
hl.env("XCURSOR_SIZE", "24")
|
||||
@@ -0,0 +1,18 @@
|
||||
-- Auto-generated by DMS — do not edit manually
|
||||
|
||||
hl.config({
|
||||
general = {
|
||||
gaps_in = 4,
|
||||
gaps_out = 4,
|
||||
border_size = 1,
|
||||
resize_on_border = false,
|
||||
},
|
||||
decoration = {
|
||||
rounding = 12,
|
||||
},
|
||||
})
|
||||
|
||||
hl.layer_rule({
|
||||
match = { namespace = "^dms:bar$" },
|
||||
xray = true,
|
||||
})
|
||||
@@ -0,0 +1,14 @@
|
||||
-- Auto-generated by DMS — do not edit manually
|
||||
-- Templated by chezmoi: per-system monitor configuration.
|
||||
|
||||
{{ if eq .system "desktop" }}
|
||||
hl.monitor({ output = "", mode = "preferred", position = "0x0", scale = 1 })
|
||||
hl.monitor({ output = "HDMI-A-2", mode = "1920x1080@60.000", position = "6400x1080", scale = 1, vrr = 0 })
|
||||
hl.monitor({ output = "DP-2", mode = "3840x2160@120.000", position = "2560x0", scale = 1, vrr = 0 })
|
||||
hl.monitor({ output = "HDMI-A-1", mode = "2560x1440@119.998", position = "0x0", scale = 1, vrr = 0 })
|
||||
{{ else if eq .system "laptop" }}
|
||||
hl.monitor({ output = "", mode = "preferred", position = "0x0", scale = 1 })
|
||||
hl.monitor({ output = "eDP-1", mode = "preferred", position = "0x0", scale = 1 })
|
||||
{{ else }}
|
||||
-- server has no GUI; no monitors defined
|
||||
{{ end }}
|
||||
@@ -0,0 +1,8 @@
|
||||
-- DMS Window Rules — managed by DankMaterialShell
|
||||
-- Do not edit manually; changes may be overwritten
|
||||
|
||||
-- DMS-RULE: id=wr_1785350111586245435, name=feishin
|
||||
hl.window_rule({ match = { class = "^feishin$" }, workspace = "2" })
|
||||
|
||||
-- DMS-RULE: id=wr_1785350520619777540, name=vesktop
|
||||
hl.window_rule({ match = { class = "^vesktop$" }, workspace = "6" })
|
||||
@@ -0,0 +1,112 @@
|
||||
-- Hyprland configuration (Lua) — https://wiki.hypr.land/Configuring/Start/
|
||||
-- Templated by chezmoi: per-system autostart, touchpad, and workspace rules.
|
||||
hl.config({ autogenerated = false })
|
||||
|
||||
hl.on("hyprland.start", function()
|
||||
-- DMS_STARTUP_BEGIN
|
||||
hl.exec_cmd("dbus-update-activation-environment --systemd --all")
|
||||
hl.exec_cmd("systemctl --user start hyprland-session.target")
|
||||
-- DMS_STARTUP_END
|
||||
|
||||
-- Auto Start Applications
|
||||
{{ if eq .system "desktop" }}
|
||||
hl.exec_cmd("kdeconnectd")
|
||||
hl.exec_cmd("feishin")
|
||||
hl.exec_cmd("vesktop")
|
||||
{{ else if eq .system "laptop" }}
|
||||
hl.exec_cmd("kdeconnectd")
|
||||
{{ else }}
|
||||
-- server has no GUI; nothing to autostart
|
||||
{{ end }}
|
||||
end)
|
||||
|
||||
hl.config({
|
||||
input = {
|
||||
kb_layout = "us",
|
||||
numlock_by_default = true,
|
||||
follow_mouse = 1,
|
||||
repeat_delay = 300,
|
||||
touchpad = {
|
||||
tap_to_click = true,
|
||||
natural_scroll = true,
|
||||
{{ if eq .system "laptop" }}
|
||||
disable_while_typing = true,
|
||||
{{ end }}
|
||||
},
|
||||
},
|
||||
general = {
|
||||
gaps_in = 4,
|
||||
gaps_out = 4,
|
||||
border_size = 1,
|
||||
layout = "dwindle",
|
||||
},
|
||||
decoration = {
|
||||
rounding = 12,
|
||||
active_opacity = 1.0,
|
||||
inactive_opacity = 0.97,
|
||||
dim_inactive = true,
|
||||
dim_strength = 0.1,
|
||||
shadow = {
|
||||
enabled = true,
|
||||
range = 30,
|
||||
render_power = 5,
|
||||
offset = "0 5",
|
||||
color = "rgba(00000070)",
|
||||
},
|
||||
blur = {
|
||||
enabled = true,
|
||||
size = 8,
|
||||
},
|
||||
},
|
||||
dwindle = {
|
||||
preserve_split = true,
|
||||
},
|
||||
master = {
|
||||
mfact = 0.5,
|
||||
},
|
||||
})
|
||||
|
||||
hl.animation({ leaf = "windowsIn", enabled = true, speed = 3, bezier = "default" })
|
||||
hl.animation({ leaf = "windowsOut", enabled = true, speed = 3, bezier = "default" })
|
||||
hl.animation({ leaf = "workspaces", enabled = true, speed = 5, bezier = "default" })
|
||||
hl.animation({ leaf = "windowsMove", enabled = true, speed = 4, bezier = "default" })
|
||||
hl.animation({ leaf = "fade", enabled = true, speed = 3, bezier = "default" })
|
||||
hl.animation({ leaf = "border", enabled = true, speed = 3, bezier = "default" })
|
||||
hl.layer_rule({ match = { namespace = "^(quickshell)$" }, no_anim = true })
|
||||
hl.layer_rule({ match = { namespace = "^dms:.*" }, no_anim = true })
|
||||
|
||||
-- Workspaces rules
|
||||
{{ if eq .system "desktop" }}
|
||||
hl.workspace_rule({ workspace = "1", monitor = "HDMI-A-1" })
|
||||
hl.workspace_rule({ workspace = "2", monitor = "HDMI-A-1" })
|
||||
|
||||
hl.workspace_rule({ workspace = "3", monitor = "DP-2" })
|
||||
hl.workspace_rule({ workspace = "4", monitor = "DP-2" })
|
||||
hl.workspace_rule({ workspace = "5", monitor = "DP-2" })
|
||||
|
||||
hl.workspace_rule({ workspace = "6", monitor = "HDMI-A-2" })
|
||||
hl.workspace_rule({ workspace = "7", monitor = "HDMI-A-2" })
|
||||
{{ else if eq .system "laptop" }}
|
||||
hl.workspace_rule({ workspace = "1", monitor = "eDP-1" })
|
||||
hl.workspace_rule({ workspace = "2", monitor = "eDP-1" })
|
||||
hl.workspace_rule({ workspace = "3", monitor = "eDP-1" })
|
||||
hl.workspace_rule({ workspace = "4", monitor = "eDP-1" })
|
||||
hl.workspace_rule({ workspace = "5", monitor = "eDP-1" })
|
||||
{{ else }}
|
||||
-- server has no GUI; no workspace rules
|
||||
{{ end }}
|
||||
|
||||
-- Env vars
|
||||
hl.env("XDG_MENU_PREFIX", "plasma-")
|
||||
hl.env("QT_QPA_PLATFORM", "wayland")
|
||||
hl.env("QT_QPA_PLATFORMTHEME", "gtk3")
|
||||
hl.env("ELECTRON_OZONE_PLATFORM_HINT", "auto")
|
||||
|
||||
-- Dank Material Shell
|
||||
require("dms.colors")
|
||||
require("dms.outputs")
|
||||
require("dms.layout")
|
||||
require("dms.cursor")
|
||||
require("dms.binds")
|
||||
require("dms.binds-user")
|
||||
require("dms.windowrules")
|
||||
@@ -0,0 +1,32 @@
|
||||
general {
|
||||
col.active_border = rgba(8c938877)
|
||||
col.inactive_border = rgba(42494055)
|
||||
}
|
||||
|
||||
misc {
|
||||
background_color = rgba(10140fFF)
|
||||
}
|
||||
|
||||
plugin {
|
||||
hyprbars {
|
||||
# Honestly idk if it works like css, but well, why not
|
||||
bar_text_font = Google Sans Flex Medium, Rubik, Geist, AR One Sans, Reddit Sans, Inter, Roboto, Ubuntu, Noto Sans, sans-serif
|
||||
bar_height = 30
|
||||
bar_padding = 10
|
||||
bar_button_padding = 5
|
||||
bar_precedence_over_border = true
|
||||
bar_part_of_window = true
|
||||
|
||||
bar_color = rgba(10140fFF)
|
||||
col.text = rgba(e0e4dbFF)
|
||||
|
||||
|
||||
# example buttons (R -> L)
|
||||
# hyprbars-button = color, size, on-click
|
||||
hyprbars-button = rgb(e0e4db), 13, , hyprctl dispatch killactive
|
||||
hyprbars-button = rgb(e0e4db), 13, , hyprctl dispatch fullscreen 1
|
||||
hyprbars-button = rgb(e0e4db), 13, , hyprctl dispatch movetoworkspacesilent special
|
||||
}
|
||||
}
|
||||
|
||||
windowrule = border_color rgba(9fd49bAA) rgba(9fd49b77), match:pin 1
|
||||
@@ -0,0 +1,12 @@
|
||||
# This configuration is generated by matugen
|
||||
# Changing these variables with matugen still enabled will overwrite them.
|
||||
|
||||
$text_color = rgba(bbf0b6FF)
|
||||
$entry_background_color = rgba(00210511)
|
||||
$entry_border_color = rgba(8c938855)
|
||||
$entry_color = rgba(bbf0b6FF)
|
||||
$font_family = Google Sans Flex Medium
|
||||
$font_family_clock = Google Sans Flex Medium
|
||||
$font_material_symbols = Material Symbols Rounded
|
||||
|
||||
$background_image = /home/keule/Pictures/wallpapers/background.jpg
|
||||
@@ -0,0 +1,34 @@
|
||||
# AstroNvim Template
|
||||
|
||||
**NOTE:** This is for AstroNvim v6+
|
||||
|
||||
A template for getting started with [AstroNvim](https://github.com/AstroNvim/AstroNvim)
|
||||
|
||||
## 🛠️ Installation
|
||||
|
||||
#### Make a backup of your current nvim and shared folder
|
||||
|
||||
```shell
|
||||
mv ~/.config/nvim ~/.config/nvim.bak
|
||||
mv ~/.local/share/nvim ~/.local/share/nvim.bak
|
||||
mv ~/.local/state/nvim ~/.local/state/nvim.bak
|
||||
mv ~/.cache/nvim ~/.cache/nvim.bak
|
||||
```
|
||||
|
||||
#### Create a new user repository from this template
|
||||
|
||||
Press the "Use this template" button above to create a new repository to store your user configuration.
|
||||
|
||||
You can also just clone this repository directly if you do not want to track your user configuration in GitHub.
|
||||
|
||||
#### Clone the repository
|
||||
|
||||
```shell
|
||||
git clone https://github.com/<your_user>/<your_repository> ~/.config/nvim
|
||||
```
|
||||
|
||||
#### Start Neovim
|
||||
|
||||
```shell
|
||||
nvim
|
||||
```
|
||||
@@ -0,0 +1,27 @@
|
||||
-- This file simply bootstraps the installation of Lazy.nvim and then calls other files for execution
|
||||
-- This file doesn't necessarily need to be touched, BE CAUTIOUS editing this file and proceed at your own risk.
|
||||
local lazypath = vim.env.LAZY or vim.fn.stdpath "data" .. "/lazy/lazy.nvim"
|
||||
|
||||
if not (vim.env.LAZY or (vim.uv or vim.loop).fs_stat(lazypath)) then
|
||||
-- stylua: ignore
|
||||
local result = vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", "--branch=stable", lazypath })
|
||||
if vim.v.shell_error ~= 0 then
|
||||
-- stylua: ignore
|
||||
vim.api.nvim_echo({ { ("Error cloning lazy.nvim:\n%s\n"):format(result), "ErrorMsg" }, { "Press any key to exit...", "MoreMsg" } }, true, {})
|
||||
vim.fn.getchar()
|
||||
vim.cmd.quit()
|
||||
end
|
||||
end
|
||||
|
||||
vim.opt.rtp:prepend(lazypath)
|
||||
|
||||
-- validate that lazy is available
|
||||
if not pcall(require, "lazy") then
|
||||
-- stylua: ignore
|
||||
vim.api.nvim_echo({ { ("Unable to load lazy from: %s\n"):format(lazypath), "ErrorMsg" }, { "Press any key to exit...", "MoreMsg" } }, true, {})
|
||||
vim.fn.getchar()
|
||||
vim.cmd.quit()
|
||||
end
|
||||
|
||||
require "lazy_setup"
|
||||
require "polish"
|
||||
@@ -0,0 +1,16 @@
|
||||
-- if true then return {} end
|
||||
|
||||
-- AstroCommunity: import any community modules here
|
||||
-- We import this file in `lazy_setup.lua` before the `plugins/` folder.
|
||||
-- This guarantees that the specs are processed before any user plugins.
|
||||
|
||||
---@type LazySpec
|
||||
return {
|
||||
"AstroNvim/astrocommunity",
|
||||
{ import = "astrocommunity.pack.lua" },
|
||||
{ import = "astrocommunity.media.vim-wakatime" },
|
||||
{ import = "astrocommunity.search.grug-far-nvim" },
|
||||
{ import = "astrocommunity.lsp.nvim-java" },
|
||||
{ import = "astrocommunity.pack.vue" },
|
||||
{ import = "astrocommunity.git.diffview-nvim" },
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
require("lazy").setup({
|
||||
{
|
||||
"AstroNvim/AstroNvim",
|
||||
version = "^6", -- Remove version tracking to elect for nightly AstroNvim
|
||||
import = "astronvim.plugins",
|
||||
opts = { -- AstroNvim options must be set here with the `import` key
|
||||
mapleader = " ", -- This ensures the leader key must be configured before Lazy is set up
|
||||
maplocalleader = ",", -- This ensures the localleader key must be configured before Lazy is set up
|
||||
icons_enabled = true, -- Set to false to disable icons (if no Nerd Font is available)
|
||||
pin_plugins = nil, -- Default will pin plugins when tracking `version` of AstroNvim, set to true/false to override
|
||||
update_notifications = true, -- Enable/disable notification about running `:Lazy update` twice to update pinned plugins
|
||||
},
|
||||
},
|
||||
{ import = "community" },
|
||||
{ import = "plugins" },
|
||||
} --[[@as LazySpec]], {
|
||||
-- Configure any other `lazy.nvim` configuration options here
|
||||
install = { colorscheme = { "astrotheme", "habamax" } },
|
||||
ui = { backdrop = 100 },
|
||||
performance = {
|
||||
rtp = {
|
||||
-- disable some rtp plugins, add more to your liking
|
||||
disabled_plugins = {
|
||||
"gzip",
|
||||
"netrwPlugin",
|
||||
"tarPlugin",
|
||||
"tohtml",
|
||||
"zipPlugin",
|
||||
},
|
||||
},
|
||||
},
|
||||
} --[[@as LazyConfig]])
|
||||
@@ -0,0 +1,85 @@
|
||||
if true then return {} end -- WARN: REMOVE THIS LINE TO ACTIVATE THIS FILE
|
||||
|
||||
-- AstroCore provides a central place to modify mappings, vim options, autocommands, and more!
|
||||
-- Configuration documentation can be found with `:h astrocore`
|
||||
-- NOTE: We highly recommend setting up the Lua Language Server (`:LspInstall lua_ls`)
|
||||
-- as this provides autocomplete and documentation while editing
|
||||
|
||||
---@type LazySpec
|
||||
return {
|
||||
"AstroNvim/astrocore",
|
||||
---@type AstroCoreOpts
|
||||
opts = {
|
||||
-- Configure core features of AstroNvim
|
||||
features = {
|
||||
large_buf = { size = 1024 * 256, lines = 10000 }, -- set global limits for large files for disabling features like treesitter
|
||||
autopairs = true, -- enable autopairs at start
|
||||
cmp = true, -- enable completion at start
|
||||
diagnostics = { virtual_text = true, virtual_lines = false }, -- diagnostic settings on startup
|
||||
highlighturl = true, -- highlight URLs at start
|
||||
notifications = true, -- enable notifications at start
|
||||
},
|
||||
-- Diagnostics configuration (for vim.diagnostics.config({...})) when diagnostics are on
|
||||
diagnostics = {
|
||||
virtual_text = true,
|
||||
underline = true,
|
||||
},
|
||||
-- passed to `vim.filetype.add`
|
||||
filetypes = {
|
||||
-- see `:h vim.filetype.add` for usage
|
||||
extension = {
|
||||
foo = "fooscript",
|
||||
},
|
||||
filename = {
|
||||
[".foorc"] = "fooscript",
|
||||
},
|
||||
pattern = {
|
||||
[".*/etc/foo/.*"] = "fooscript",
|
||||
},
|
||||
},
|
||||
-- vim options can be configured here
|
||||
options = {
|
||||
opt = { -- vim.opt.<key>
|
||||
relativenumber = true, -- sets vim.opt.relativenumber
|
||||
number = true, -- sets vim.opt.number
|
||||
spell = false, -- sets vim.opt.spell
|
||||
signcolumn = "yes", -- sets vim.opt.signcolumn to yes
|
||||
wrap = false, -- sets vim.opt.wrap
|
||||
},
|
||||
g = { -- vim.g.<key>
|
||||
-- configure global vim variables (vim.g)
|
||||
-- NOTE: `mapleader` and `maplocalleader` must be set in the AstroNvim opts or before `lazy.setup`
|
||||
-- This can be found in the `lua/lazy_setup.lua` file
|
||||
},
|
||||
},
|
||||
-- Mappings can be configured through AstroCore as well.
|
||||
-- NOTE: keycodes follow the casing in the vimdocs. For example, `<Leader>` must be capitalized
|
||||
mappings = {
|
||||
-- first key is the mode
|
||||
n = {
|
||||
-- second key is the lefthand side of the map
|
||||
|
||||
-- navigate buffer tabs
|
||||
["]b"] = { function() require("astrocore.buffer").nav(vim.v.count1) end, desc = "Next buffer" },
|
||||
["[b"] = { function() require("astrocore.buffer").nav(-vim.v.count1) end, desc = "Previous buffer" },
|
||||
|
||||
-- mappings seen under group name "Buffer"
|
||||
["<Leader>bd"] = {
|
||||
function()
|
||||
require("astroui.status.heirline").buffer_picker(
|
||||
function(bufnr) require("astrocore.buffer").close(bufnr) end
|
||||
)
|
||||
end,
|
||||
desc = "Close buffer from tabline",
|
||||
},
|
||||
|
||||
-- tables with just a `desc` key will be registered with which-key if it's installed
|
||||
-- this is useful for naming menus
|
||||
-- ["<Leader>b"] = { desc = "Buffers" },
|
||||
|
||||
-- setting a mapping to false will disable it
|
||||
-- ["<C-S>"] = false,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
-- if true then return {} end
|
||||
|
||||
-- AstroLSP allows you to customize the features in AstroNvim's LSP configuration engine
|
||||
-- Configuration documentation can be found with `:h astrolsp`
|
||||
-- NOTE: We highly recommend setting up the Lua Language Server (`:LspInstall lua_ls`)
|
||||
-- as this provides autocomplete and documentation while editing
|
||||
|
||||
---@type LazySpec
|
||||
return {
|
||||
"AstroNvim/astrolsp",
|
||||
---@type AstroLSPOpts
|
||||
opts = {
|
||||
-- Configuration table of features provided by AstroLSP
|
||||
features = {
|
||||
codelens = true, -- enable/disable codelens refresh on start
|
||||
inlay_hints = false, -- enable/disable inlay hints on start
|
||||
semantic_tokens = true, -- enable/disable semantic token highlighting
|
||||
},
|
||||
-- customize lsp formatting options
|
||||
formatting = {
|
||||
-- control auto formatting on save
|
||||
format_on_save = {
|
||||
enabled = true, -- enable or disable format on save globally
|
||||
allow_filetypes = { -- enable format on save for specified filetypes only
|
||||
-- "go",
|
||||
},
|
||||
ignore_filetypes = { -- disable format on save for specified filetypes
|
||||
-- "python",
|
||||
},
|
||||
},
|
||||
disabled = { -- disable formatting capabilities for the listed language servers
|
||||
-- disable lua_ls formatting capability if you want to use StyLua to format your lua code
|
||||
-- "lua_ls",
|
||||
},
|
||||
timeout_ms = 1000, -- default format timeout
|
||||
-- filter = function(client) -- fully override the default formatting function
|
||||
-- return true
|
||||
-- end
|
||||
},
|
||||
-- enable servers that you already have installed without mason
|
||||
servers = {
|
||||
"ccls",
|
||||
},
|
||||
-- customize language server configuration passed to `vim.lsp.config`
|
||||
-- client specific configuration can also go in `lsp/` in your configuration root (see `:h lsp-config`)
|
||||
config = {
|
||||
clangd = {
|
||||
enabled = false,
|
||||
},
|
||||
ccls = {
|
||||
cmd = { "ccls" },
|
||||
filetypes = { "cpp", "c" },
|
||||
},
|
||||
},
|
||||
-- customize how language servers are attached
|
||||
handlers = {
|
||||
-- a function with the key `*` modifies the default handler, functions takes the server name as the parameter
|
||||
-- ["*"] = function(server) vim.lsp.enable(server) end
|
||||
|
||||
-- the key is the server that is being setup with `vim.lsp.config`
|
||||
-- rust_analyzer = false, -- setting a handler to false will disable the set up of that language server
|
||||
},
|
||||
-- Configure buffer local auto commands to add when attaching a language server
|
||||
autocmds = {
|
||||
-- first key is the `augroup` to add the auto commands to (:h augroup)
|
||||
lsp_codelens_refresh = {
|
||||
-- Optional condition to create/delete auto command group
|
||||
-- can either be a string of a client capability or a function of `fun(client, bufnr): boolean`
|
||||
-- condition will be resolved for each client on each execution and if it ever fails for all clients,
|
||||
-- the auto commands will be deleted for that buffer
|
||||
cond = "textDocument/codeLens",
|
||||
-- cond = function(client, bufnr) return client.name == "lua_ls" end,
|
||||
-- list of auto commands to set
|
||||
{
|
||||
-- events to trigger
|
||||
event = { "InsertLeave", "BufEnter" },
|
||||
-- the rest of the autocmd options (:h nvim_create_autocmd)
|
||||
desc = "Refresh codelens (buffer)",
|
||||
callback = function(args)
|
||||
if require("astrolsp").config.features.codelens then vim.lsp.codelens.enable(true, { bufnr = args.buf }) end
|
||||
end,
|
||||
},
|
||||
},
|
||||
},
|
||||
-- mappings to be set up on attaching of a language server
|
||||
mappings = {
|
||||
n = {
|
||||
-- a `cond` key can provided as the string of a server capability to be required to attach, or a function with `client` and `bufnr` parameters from the `on_attach` that returns a boolean
|
||||
gD = {
|
||||
function() vim.lsp.buf.declaration() end,
|
||||
desc = "Declaration of current symbol",
|
||||
cond = "textDocument/declaration",
|
||||
},
|
||||
["<Leader>uY"] = {
|
||||
function() require("astrolsp.toggles").buffer_semantic_tokens() end,
|
||||
desc = "Toggle LSP semantic highlight (buffer)",
|
||||
cond = function(client)
|
||||
return client:supports_method "textDocument/semanticTokens/full" and vim.lsp.semantic_tokens ~= nil
|
||||
end,
|
||||
},
|
||||
},
|
||||
},
|
||||
-- A custom `on_attach` function to be run after the default `on_attach` function
|
||||
-- takes two parameters `client` and `bufnr` (`:h lsp-attach`)
|
||||
on_attach = function(client, bufnr)
|
||||
-- this would disable semanticTokensProvider for all clients
|
||||
-- client.server_capabilities.semanticTokensProvider = nil
|
||||
end,
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
if true then return {} end -- WARN: REMOVE THIS LINE TO ACTIVATE THIS FILE
|
||||
|
||||
-- AstroUI provides the basis for configuring the AstroNvim User Interface
|
||||
-- Configuration documentation can be found with `:h astroui`
|
||||
-- NOTE: We highly recommend setting up the Lua Language Server (`:LspInstall lua_ls`)
|
||||
-- as this provides autocomplete and documentation while editing
|
||||
|
||||
---@type LazySpec
|
||||
return {
|
||||
"AstroNvim/astroui",
|
||||
---@type AstroUIOpts
|
||||
opts = {
|
||||
-- change colorscheme
|
||||
colorscheme = "astrodark",
|
||||
-- AstroUI allows you to easily modify highlight groups easily for any and all colorschemes
|
||||
highlights = {
|
||||
init = { -- this table overrides highlights in all themes
|
||||
-- Normal = { bg = "#000000" },
|
||||
},
|
||||
astrodark = { -- a table of overrides/changes when applying the astrotheme theme
|
||||
-- Normal = { bg = "#000000" },
|
||||
},
|
||||
},
|
||||
-- Icons can be configured throughout the interface
|
||||
icons = {
|
||||
-- configure the loading of the lsp in the status line
|
||||
LSPLoading1 = "⠋",
|
||||
LSPLoading2 = "⠙",
|
||||
LSPLoading3 = "⠹",
|
||||
LSPLoading4 = "⠸",
|
||||
LSPLoading5 = "⠼",
|
||||
LSPLoading6 = "⠴",
|
||||
LSPLoading7 = "⠦",
|
||||
LSPLoading8 = "⠧",
|
||||
LSPLoading9 = "⠇",
|
||||
LSPLoading10 = "⠏",
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,83 @@
|
||||
return {
|
||||
{
|
||||
"AstroNvim/astrocore",
|
||||
---@type AstroCoreOpts
|
||||
opts = {
|
||||
mappings = {
|
||||
n = {
|
||||
["<Leader><space>"] = {
|
||||
function() require("snacks").picker.buffers() end,
|
||||
desc = "Find buffers",
|
||||
},
|
||||
["<Leader>F"] = {
|
||||
function()
|
||||
require("snacks").picker.files {
|
||||
hidden = true,
|
||||
ignored = true,
|
||||
}
|
||||
end,
|
||||
desc = "Find buffers",
|
||||
},
|
||||
["<Leader>ss"] = {
|
||||
function()
|
||||
local aerial_avail, aerial = pcall(require, "aerial")
|
||||
if aerial_avail and aerial.snacks_picker then
|
||||
aerial.snacks_picker()
|
||||
else
|
||||
require("snacks").picker.lsp_symbols()
|
||||
end
|
||||
end,
|
||||
desc = "Search symbols",
|
||||
},
|
||||
["<Leader>fj"] = {
|
||||
"<cmd>%!jq .<CR>",
|
||||
desc = "Format Json",
|
||||
},
|
||||
["<Leader>w"] = {
|
||||
"<cmd>:noautocmd w<CR>",
|
||||
desc = "Save Fileeee",
|
||||
},
|
||||
-- quick save
|
||||
-- ["<C-s>"] = { ":w!<cr>", desc = "Save File" },
|
||||
-- Git
|
||||
["<Leader>vd"] = {
|
||||
"<cmd>DiffviewOpen<CR>",
|
||||
desc = "Diffview",
|
||||
},
|
||||
["<Leader>vD"] = {
|
||||
"<cmd>DiffviewOpen HEAD^!<CR>",
|
||||
desc = "Diffview Last Commit",
|
||||
},
|
||||
["<Leader>vl"] = {
|
||||
function()
|
||||
require("snacks").picker.git_log {
|
||||
confirm = function(picker, item)
|
||||
picker:close()
|
||||
vim.cmd("DiffviewOpen " .. item.commit .. "^!")
|
||||
end,
|
||||
}
|
||||
end,
|
||||
silent = true,
|
||||
desc = "Diff Commit",
|
||||
},
|
||||
["<Leader>vh"] = {
|
||||
"<cmd>DiffviewFileHistory %<CR>",
|
||||
desc = "File History",
|
||||
},
|
||||
["<Leader>vH"] = {
|
||||
"<cmd>DiffviewFileHistory<CR>",
|
||||
desc = "Repo History",
|
||||
},
|
||||
["<Leader>vr"] = {
|
||||
"<cmd>DiffviewRefresh<CR>",
|
||||
desc = "Diffview Refresh",
|
||||
},
|
||||
["<Leader>vc"] = {
|
||||
"<cmd>DiffviewClose<CR>",
|
||||
desc = "Diffview Close",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
-- if true then return {} end
|
||||
|
||||
-- Customize Mason
|
||||
|
||||
---@type LazySpec
|
||||
return {
|
||||
-- use mason-tool-installer for automatically installing Mason packages
|
||||
{
|
||||
"WhoIsSethDaniel/mason-tool-installer.nvim",
|
||||
-- overrides `require("mason-tool-installer").setup(...)`
|
||||
opts = {
|
||||
-- Make sure to use the names found in `:Mason`
|
||||
ensure_installed = {
|
||||
-- install language servers
|
||||
"lua-language-server",
|
||||
"angular-language-server",
|
||||
"typescript-language-server",
|
||||
"gopls",
|
||||
"html-lsp",
|
||||
"css-lsp",
|
||||
"c3-lsp",
|
||||
"json-lsp",
|
||||
"shellcheck",
|
||||
-- "clangd",
|
||||
-- "cmake-language-server",
|
||||
"csharp-language-server",
|
||||
"dockerfile-language-server",
|
||||
-- "docker-compose-language-service",
|
||||
"kotlin-language-server",
|
||||
"postgres-language-server",
|
||||
"python-lsp-server",
|
||||
"rust-analyzer",
|
||||
|
||||
-- install formatters
|
||||
"stylua",
|
||||
|
||||
-- install debuggers
|
||||
"debugpy",
|
||||
|
||||
-- install any other package
|
||||
"tree-sitter-cli",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
return {
|
||||
"nvim-neo-tree/neo-tree.nvim",
|
||||
opts = {
|
||||
filesystem = {
|
||||
filtered_items = {
|
||||
hide_dotfiles = false,
|
||||
hide_gitignored = false,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
if true then return {} end -- WARN: REMOVE THIS LINE TO ACTIVATE THIS FILE
|
||||
|
||||
-- Customize None-ls sources
|
||||
|
||||
---@type LazySpec
|
||||
return {
|
||||
"nvimtools/none-ls.nvim",
|
||||
opts = function(_, opts)
|
||||
-- opts variable is the default configuration table for the setup function call
|
||||
-- local null_ls = require "null-ls"
|
||||
|
||||
-- Check supported formatters and linters
|
||||
-- https://github.com/nvimtools/none-ls.nvim/tree/main/lua/null-ls/builtins/formatting
|
||||
-- https://github.com/nvimtools/none-ls.nvim/tree/main/lua/null-ls/builtins/diagnostics
|
||||
|
||||
-- Only insert new sources, do not replace the existing ones
|
||||
-- (If you wish to replace, use `opts.sources = {}` instead of the `list_insert_unique` function)
|
||||
opts.sources = require("astrocore").list_insert_unique(opts.sources, {
|
||||
-- Set a formatter
|
||||
-- null_ls.builtins.formatting.stylua,
|
||||
-- null_ls.builtins.formatting.prettier,
|
||||
})
|
||||
end,
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
-- if true then return {} end -- WARN: REMOVE THIS LINE TO ACTIVATE THIS FILE
|
||||
|
||||
-- Customize Treesitter
|
||||
-- --------------------
|
||||
-- Treesitter customizations are handled with AstroCore
|
||||
-- as nvim-treesitter simply provides a download utility for parsers
|
||||
-- :TSInstall all
|
||||
|
||||
---@type LazySpec
|
||||
return {
|
||||
"AstroNvim/astrocore",
|
||||
---@type AstroCoreOpts
|
||||
opts = {
|
||||
treesitter = {
|
||||
highlight = true, -- enable/disable treesitter based highlighting
|
||||
indent = true, -- enable/disable treesitter based indentation
|
||||
auto_install = true, -- enable/disable automatic installation of detected languages
|
||||
ensure_installed = {
|
||||
"asm",
|
||||
"angular",
|
||||
"arduino",
|
||||
"bash",
|
||||
"c",
|
||||
"c3",
|
||||
"c_sharp",
|
||||
"cmake",
|
||||
"cpp",
|
||||
"css",
|
||||
"csv",
|
||||
"dart",
|
||||
"dockerfile",
|
||||
"fish",
|
||||
"gitignore",
|
||||
"go",
|
||||
"graphql",
|
||||
"html",
|
||||
"hyprlang",
|
||||
"java",
|
||||
"javadoc",
|
||||
"javascript",
|
||||
"jq",
|
||||
"json",
|
||||
"kitty",
|
||||
"kotlin",
|
||||
"latex",
|
||||
"linkerscript",
|
||||
"llvm",
|
||||
"lua",
|
||||
"luadoc",
|
||||
"make",
|
||||
"markdown",
|
||||
"markdown_inline",
|
||||
"nasm",
|
||||
"nginx",
|
||||
"ninja",
|
||||
"nix",
|
||||
"odin",
|
||||
"pascal",
|
||||
"perl",
|
||||
"php",
|
||||
"pioasm",
|
||||
"vim",
|
||||
"vimdoc",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
if true then return {} end -- WARN: REMOVE THIS LINE TO ACTIVATE THIS FILE
|
||||
|
||||
-- You can also add or configure plugins by creating files in this `plugins/` folder
|
||||
-- PLEASE REMOVE THE EXAMPLES YOU HAVE NO INTEREST IN BEFORE ENABLING THIS FILE
|
||||
-- Here are some examples:
|
||||
|
||||
---@type LazySpec
|
||||
return {
|
||||
|
||||
-- == Examples of Adding Plugins ==
|
||||
|
||||
"andweeb/presence.nvim",
|
||||
{
|
||||
"ray-x/lsp_signature.nvim",
|
||||
event = "BufRead",
|
||||
config = function() require("lsp_signature").setup() end,
|
||||
},
|
||||
|
||||
-- == Examples of Overriding Plugins ==
|
||||
|
||||
-- customize dashboard options
|
||||
{
|
||||
"folke/snacks.nvim",
|
||||
opts = {
|
||||
dashboard = {
|
||||
preset = {
|
||||
header = table.concat({
|
||||
" █████ ███████ ████████ ██████ ██████ ",
|
||||
"██ ██ ██ ██ ██ ██ ██ ██",
|
||||
"███████ ███████ ██ ██████ ██ ██",
|
||||
"██ ██ ██ ██ ██ ██ ██ ██",
|
||||
"██ ██ ███████ ██ ██ ██ ██████ ",
|
||||
"",
|
||||
"███ ██ ██ ██ ██ ███ ███",
|
||||
"████ ██ ██ ██ ██ ████ ████",
|
||||
"██ ██ ██ ██ ██ ██ ██ ████ ██",
|
||||
"██ ██ ██ ██ ██ ██ ██ ██ ██",
|
||||
"██ ████ ████ ██ ██ ██",
|
||||
}, "\n"),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- You can disable default plugins as follows:
|
||||
{ "max397574/better-escape.nvim", enabled = false },
|
||||
|
||||
-- You can also easily customize additional setup of plugins that is outside of the plugin's setup call
|
||||
{
|
||||
"L3MON4D3/LuaSnip",
|
||||
config = function(plugin, opts)
|
||||
-- add more custom luasnip configuration such as filetype extend or custom snippets
|
||||
local luasnip = require "luasnip"
|
||||
luasnip.filetype_extend("javascript", { "javascriptreact" })
|
||||
|
||||
-- include the default astronvim config that calls the setup call
|
||||
require "astronvim.plugins.configs.luasnip"(plugin, opts)
|
||||
end,
|
||||
},
|
||||
|
||||
{
|
||||
"windwp/nvim-autopairs",
|
||||
config = function(plugin, opts)
|
||||
require "astronvim.plugins.configs.nvim-autopairs"(plugin, opts) -- include the default astronvim config that calls the setup call
|
||||
-- add more custom autopairs configuration such as custom rules
|
||||
local npairs = require "nvim-autopairs"
|
||||
local Rule = require "nvim-autopairs.rule"
|
||||
local cond = require "nvim-autopairs.conds"
|
||||
npairs.add_rules(
|
||||
{
|
||||
Rule("$", "$", { "tex", "latex" })
|
||||
-- don't add a pair if the next character is %
|
||||
:with_pair(cond.not_after_regex "%%")
|
||||
-- don't add a pair if the previous character is xxx
|
||||
:with_pair(
|
||||
cond.not_before_regex("xxx", 3)
|
||||
)
|
||||
-- don't move right when repeat character
|
||||
:with_move(cond.none())
|
||||
-- don't delete if the next character is xx
|
||||
:with_del(cond.not_after_regex "xx")
|
||||
-- disable adding a newline when you press <cr>
|
||||
:with_cr(cond.none()),
|
||||
},
|
||||
-- disable for .vim files, but it work for another filetypes
|
||||
Rule("a", "a", "-vim")
|
||||
)
|
||||
end,
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
if true then return end -- WARN: REMOVE THIS LINE TO ACTIVATE THIS FILE
|
||||
|
||||
-- This will run last in the setup process.
|
||||
-- This is just pure lua so anything that doesn't
|
||||
-- fit in the normal config locations above can go here
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
base: lua51
|
||||
|
||||
globals:
|
||||
vim:
|
||||
any: true
|
||||
@@ -0,0 +1,8 @@
|
||||
std = "neovim"
|
||||
|
||||
[rules]
|
||||
global_usage = "allow"
|
||||
if_same_then_else = "allow"
|
||||
incorrect_standard_library_use = "allow"
|
||||
mixed_table = "allow"
|
||||
multiple_statements = "allow"
|
||||
@@ -44,7 +44,9 @@ min_time = 1
|
||||
# Somethere at the beginning
|
||||
[battery]
|
||||
charging_symbol = ""
|
||||
disabled = true
|
||||
{{ if eq .system "laptop" }}disabled = false
|
||||
{{ else }}disabled = true
|
||||
{{ end }}
|
||||
discharging_symbol = ""
|
||||
full_symbol = ""
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
# Bookmarks
|
||||
[[mgr.prepend_keymap]]
|
||||
on = [ "b", "g" ]
|
||||
run = "cd ~/git/"
|
||||
desc = "GIT"
|
||||
|
||||
[[mgr.prepend_keymap]]
|
||||
on = [ "b", "D" ]
|
||||
run = "cd ~/Data/"
|
||||
desc = "DATA"
|
||||
|
||||
[[mgr.prepend_keymap]]
|
||||
on = [ "b", "d" ]
|
||||
run = "cd ~/.dotfiles/"
|
||||
desc = "DOTFILES"
|
||||
|
||||
[[mgr.prepend_keymap]]
|
||||
on = [ "o", "n" ]
|
||||
run = "shell \"nvim\" --block"
|
||||
desc = "Open NeoVim"
|
||||
|
||||
[[mgr.prepend_keymap]]
|
||||
on = [ "m" ]
|
||||
run = "plugin bookmarks save"
|
||||
desc = "Save current position as a bookmark"
|
||||
|
||||
[[mgr.prepend_keymap]]
|
||||
on = [ "'" ]
|
||||
run = "plugin bookmarks jump"
|
||||
desc = "Jump to a bookmark"
|
||||
|
||||
[[mgr.prepend_keymap]]
|
||||
on = [ "b", "d" ]
|
||||
run = "plugin bookmarks delete"
|
||||
desc = "Delete a bookmark"
|
||||
|
||||
[[mgr.prepend_keymap]]
|
||||
on = [ "b", "D" ]
|
||||
run = "plugin bookmarks delete_all"
|
||||
desc = "Delete all bookmarks"
|
||||
@@ -0,0 +1,7 @@
|
||||
[[plugin.deps]]
|
||||
use = "dedukun/bookmarks"
|
||||
rev = "9ef1254"
|
||||
hash = "92fbb5483657fa7976cdf4e0104e18e0"
|
||||
|
||||
[flavor]
|
||||
deps = []
|
||||
@@ -1,6 +1,4 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2021 Catppuccin
|
||||
Copyright (c) 2024 dedukun
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
@@ -9,13 +7,13 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
@@ -0,0 +1,158 @@
|
||||
# bookmarks.yazi
|
||||
|
||||
A [Yazi](https://github.com/sxyazi/yazi) plugin that adds the basic functionality of [vi-like marks](https://neovim.io/doc/user/motion.html#mark-motions).
|
||||
|
||||
https://github.com/dedukun/bookmarks.yazi/assets/25795432/9a9fe345-dd06-442e-99f1-8475ab22fad5
|
||||
|
||||
## Requirements
|
||||
|
||||
- [Yazi](https://github.com/sxyazi/yazi) v25.4.8+
|
||||
|
||||
## Features
|
||||
|
||||
- Create/delete bookmarks
|
||||
- Custom Notifications
|
||||
- `''` to go back to the previous folder
|
||||
- Bookmarks persistence
|
||||
|
||||
## Installation
|
||||
|
||||
```sh
|
||||
ya pkg add dedukun/bookmarks
|
||||
```
|
||||
|
||||
## Import/Export bookmarks
|
||||
|
||||
This plugin uses [Yazi's DDS](https://yazi-rs.github.io/docs/dds/) for bookmark persistence, as such,
|
||||
the bookmarks are saved in DDS's state file (`~/.local/state/yazi/.dds` on Linux and `C:\Users\USERNAME\AppData\Roaming\yazi\state\.dds` on Windows)
|
||||
|
||||
**_NOTE:_** This system may be used by other plugins that you have installed, so this file might have more data than just the bookmarks.
|
||||
|
||||
## Configuration
|
||||
|
||||
Add this to your `keymap.toml`:
|
||||
|
||||
```toml
|
||||
# If your yazi version is lower than v25.5.28, repleace "mgr" by "manager".
|
||||
[[mgr.prepend_keymap]]
|
||||
on = [ "m" ]
|
||||
run = "plugin bookmarks save"
|
||||
desc = "Save current position as a bookmark"
|
||||
|
||||
[[mgr.prepend_keymap]]
|
||||
on = [ "'" ]
|
||||
run = "plugin bookmarks jump"
|
||||
desc = "Jump to a bookmark"
|
||||
|
||||
[[mgr.prepend_keymap]]
|
||||
on = [ "b", "d" ]
|
||||
run = "plugin bookmarks delete"
|
||||
desc = "Delete a bookmark"
|
||||
|
||||
[[mgr.prepend_keymap]]
|
||||
on = [ "b", "D" ]
|
||||
run = "plugin bookmarks delete_all"
|
||||
desc = "Delete all bookmarks"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
Additionally there are configurations that can be done using the plugin's `setup` function in Yazi's `init.lua`, i.e. `~/.config/yazi/init.lua`.
|
||||
The following are the default configurations:
|
||||
|
||||
```lua
|
||||
-- ~/.config/yazi/init.lua
|
||||
require("bookmarks"):setup({
|
||||
last_directory = { enable = false, persist = false, mode="dir" },
|
||||
persist = "none",
|
||||
desc_format = "full",
|
||||
file_pick_mode = "hover",
|
||||
custom_desc_input = false,
|
||||
show_keys = false,
|
||||
notify = {
|
||||
enable = false,
|
||||
timeout = 1,
|
||||
message = {
|
||||
new = "New bookmark '<key>' -> '<folder>'",
|
||||
delete = "Deleted bookmark in '<key>'",
|
||||
delete_all = "Deleted all bookmarks",
|
||||
},
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
### `last_directory`
|
||||
|
||||
When enabled, a new bookmark is automatically created in `'` which allows the user to jump back to
|
||||
the last directory.
|
||||
|
||||
There's also the option to enable persistence to this automatic bookmark.
|
||||
|
||||
Finally, there's a `mode` option with the following options:
|
||||
|
||||
| Value | Description |
|
||||
| ------ | ------------------------------------------------------------ |
|
||||
| `jump` | It saves the position before the last used mark |
|
||||
| `mark` | It saves the last created mark |
|
||||
| `dir` | Default, it saves the last visited directory (old behaviour) |
|
||||
|
||||
### `persist`
|
||||
|
||||
When enabled the bookmarks will persist, i.e. if you close and reopen Yazi they will still be
|
||||
present.
|
||||
|
||||
There are three possible values for this option:
|
||||
|
||||
| Value | Description |
|
||||
| ------ | -------------------------------------------------------------------------------------------------------------------- |
|
||||
| `none` | The default value, i.e., no persistance |
|
||||
| `all` | All the bookmarks are saved in persistent memory |
|
||||
| `vim` | This mode emulates the vim global marks, i.e., only the bookmarks in upper case (A-Z) are saved to persistent memory |
|
||||
|
||||
### `desc_format`
|
||||
|
||||
The format for the bookmark description.
|
||||
|
||||
There are two possible values for this option:
|
||||
|
||||
| Value | Description |
|
||||
| -------- | ----------------------------------------------------------------------------------------------- |
|
||||
| `full` | The default, it shows the full path of the bookmark, i.e., the parent folder + the hovered file |
|
||||
| `parent` | Only shows the parent folder of the bookmark |
|
||||
|
||||
### `file_pick_mode`
|
||||
|
||||
The mode for choosing which directory to bookmark.
|
||||
|
||||
There are two possible values for this option:
|
||||
|
||||
| Value | Description |
|
||||
| -------- | ------------------------------------------------------------------- |
|
||||
| `hover` | The default, it uses the path of the hovered file for new bookmarks |
|
||||
| `parent` | Uses the path of the parent folder for new bookmarks |
|
||||
|
||||
### `notify`
|
||||
|
||||
When enabled, notifications will be shown when the user creates a new bookmark and deletes one or
|
||||
all saved bookmarks.
|
||||
|
||||
By default the notification has a 1 second timeout that can be changed with `notify.timeout`.
|
||||
|
||||
Furthermore, you can customize the notification messages with `notify.message`.
|
||||
For the `new` and `delete` messages, the `<key>` and `<folder>` keywords can be used, which will be replaced by the respective new/deleted bookmark's associated key and folder.
|
||||
|
||||
### `custom_desc_input`
|
||||
|
||||
When enabled, user can change description for new bookmark before it is saved.
|
||||
|
||||
By default the custom description input is filled with path.
|
||||
|
||||
### `show_keys`
|
||||
|
||||
When enabled, saving a new bookmark will display a list of all available keys.
|
||||
|
||||
If a key already has a saved bookmark, its description will be shown.
|
||||
|
||||
This helps prevent accidental overwriting of existing bookmarks.
|
||||
|
||||
By default no information is shown.
|
||||
@@ -0,0 +1,405 @@
|
||||
--- @since 25.4.8
|
||||
-- stylua: ignore
|
||||
local SUPPORTED_KEYS = {
|
||||
{ on = "0", desc = "Free" }, { on = "1", desc = "Free" }, { on = "2", desc = "Free" }, { on = "3", desc = "Free" }, { on = "4", desc = "Free"},
|
||||
{ on = "5", desc = "Free" }, { on = "6", desc = "Free" }, { on = "7", desc = "Free" }, { on = "8", desc = "Free" }, { on = "9", desc = "Free"},
|
||||
{ on = "A", desc = "Free" }, { on = "B", desc = "Free" }, { on = "C", desc = "Free" }, { on = "D", desc = "Free" }, { on = "E", desc = "Free"},
|
||||
{ on = "F", desc = "Free" }, { on = "G", desc = "Free" }, { on = "H", desc = "Free" }, { on = "I", desc = "Free" }, { on = "J", desc = "Free"},
|
||||
{ on = "K", desc = "Free" }, { on = "L", desc = "Free" }, { on = "M", desc = "Free" }, { on = "N", desc = "Free" }, { on = "O", desc = "Free"},
|
||||
{ on = "P", desc = "Free" }, { on = "Q", desc = "Free" }, { on = "R", desc = "Free" }, { on = "S", desc = "Free" }, { on = "T", desc = "Free"},
|
||||
{ on = "U", desc = "Free" }, { on = "V", desc = "Free" }, { on = "W", desc = "Free" }, { on = "X", desc = "Free" }, { on = "Y", desc = "Free"}, { on = "Z", desc = "Free" },
|
||||
{ on = "a", desc = "Free" }, { on = "b", desc = "Free" }, { on = "c", desc = "Free" }, { on = "d", desc = "Free" }, { on = "e", desc = "Free"},
|
||||
{ on = "f", desc = "Free" }, { on = "g", desc = "Free" }, { on = "h", desc = "Free" }, { on = "i", desc = "Free" }, { on = "j", desc = "Free"},
|
||||
{ on = "k", desc = "Free" }, { on = "l", desc = "Free" }, { on = "m", desc = "Free" }, { on = "n", desc = "Free" }, { on = "o", desc = "Free"},
|
||||
{ on = "p", desc = "Free" }, { on = "q", desc = "Free" }, { on = "r", desc = "Free" }, { on = "s", desc = "Free" }, { on = "t", desc = "Free"},
|
||||
{ on = "u", desc = "Free" }, { on = "v", desc = "Free" }, { on = "w", desc = "Free" }, { on = "x", desc = "Free" }, { on = "y", desc = "Free"}, { on = "z", desc = "Free" },
|
||||
}
|
||||
|
||||
local _send_notification = ya.sync(
|
||||
function(state, message)
|
||||
ya.notify {
|
||||
title = "Bookmarks",
|
||||
content = message,
|
||||
timeout = state.notify.timeout,
|
||||
}
|
||||
end
|
||||
)
|
||||
|
||||
local _get_real_index = ya.sync(function(state, idx)
|
||||
for key, value in pairs(state.bookmarks) do
|
||||
if value.on == SUPPORTED_KEYS[idx].on then
|
||||
return key
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end)
|
||||
|
||||
local _get_bookmark_file = ya.sync(function(state)
|
||||
local folder = cx.active.current
|
||||
|
||||
if state.file_pick_mode == "parent" or not folder.hovered then
|
||||
return { url = folder.cwd, is_parent = true }
|
||||
end
|
||||
return { url = folder.hovered.url, is_parent = false }
|
||||
end)
|
||||
|
||||
local _generate_description = ya.sync(function(state, file)
|
||||
-- if this is true, we don't have information about the folder, so just return the folder url
|
||||
if file.is_parent then
|
||||
return tostring(file.url)
|
||||
end
|
||||
|
||||
if state.desc_format == "parent" then
|
||||
return tostring(file.url.parent)
|
||||
end
|
||||
-- full description
|
||||
return tostring(file.url)
|
||||
end)
|
||||
|
||||
local _load_state = ya.sync(function(state)
|
||||
ps.sub_remote("@bookmarks", function(body)
|
||||
if not state.bookmarks and body then
|
||||
state.bookmarks = {}
|
||||
for _, value in pairs(body) do
|
||||
table.insert(state.bookmarks, value)
|
||||
end
|
||||
end
|
||||
end)
|
||||
end)
|
||||
|
||||
local _save_state = ya.sync(function(state, bookmarks)
|
||||
if not bookmarks then
|
||||
ps.pub_to(0, "@bookmarks", nil)
|
||||
return
|
||||
end
|
||||
|
||||
local save_state = {}
|
||||
if state.persist == "all" then
|
||||
save_state = bookmarks
|
||||
else -- VIM mode
|
||||
local idx = 1
|
||||
for _, value in pairs(bookmarks) do
|
||||
-- Only save bookmarks in upper case keys
|
||||
if string.match(value.on, "%u") then
|
||||
save_state[idx] = value
|
||||
idx = idx + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
ps.pub_to(0, "@bookmarks", save_state)
|
||||
end)
|
||||
|
||||
local _load_last = ya.sync(function(state)
|
||||
ps.sub_remote("@bookmarks-last", function(body)
|
||||
state.last_dir = body
|
||||
|
||||
if state.last_mode ~= "dir" then
|
||||
ps.unsub_remote("@bookmarks-last")
|
||||
end
|
||||
end)
|
||||
end)
|
||||
|
||||
local _save_last = ya.sync(function(state, persist, imediate)
|
||||
local file = _get_bookmark_file()
|
||||
|
||||
local curr = {
|
||||
on = "'",
|
||||
desc = _generate_description(file),
|
||||
path = tostring(file.url),
|
||||
is_parent = file.is_parent,
|
||||
}
|
||||
|
||||
if imediate then
|
||||
state.curr_dir = nil
|
||||
state.last_dir = curr
|
||||
else
|
||||
state.last_dir = state.curr_dir
|
||||
state.curr_dir = curr
|
||||
end
|
||||
|
||||
if persist and state.last_dir then
|
||||
ps.pub_to(0, "@bookmarks-last", state.last_dir)
|
||||
end
|
||||
end)
|
||||
|
||||
local get_last_mode = ya.sync(function(state) return state.last_mode end)
|
||||
|
||||
local save_last_dir = ya.sync(function(state)
|
||||
ps.sub("cd", function() _save_last(state.last_persist, false) end)
|
||||
|
||||
ps.sub("hover", function()
|
||||
local file = _get_bookmark_file()
|
||||
state.curr_dir.desc = _generate_description(file)
|
||||
state.curr_dir.path = tostring(file.url)
|
||||
end)
|
||||
end)
|
||||
|
||||
local save_last_jump = ya.sync(function(state) _save_last(state.last_persist, true) end)
|
||||
|
||||
local save_last_mark = ya.sync(function(state) _save_last(state.last_persist, true) end)
|
||||
|
||||
local _is_show_keys_enabled = ya.sync(function(state) return state.show_keys end)
|
||||
|
||||
local _is_custom_desc_input_enabled = ya.sync(function(state) return state.custom_desc_input end)
|
||||
|
||||
-- ***********************************************
|
||||
-- **============= C O M M A N D S =============**
|
||||
-- ***********************************************
|
||||
|
||||
local get_updated_keys = ya.sync(function(state, keys)
|
||||
if state.bookmarks then
|
||||
for _, bookmarks_value in pairs(state.bookmarks) do
|
||||
for _, keys_value in pairs(keys) do
|
||||
if keys_value.on == bookmarks_value.on then
|
||||
keys_value.desc = bookmarks_value.desc
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return keys
|
||||
end)
|
||||
|
||||
local save_bookmark = ya.sync(function(state, idx, custom_desc)
|
||||
local file = _get_bookmark_file()
|
||||
|
||||
state.bookmarks = state.bookmarks or {}
|
||||
|
||||
local _idx = _get_real_index(idx)
|
||||
if not _idx then
|
||||
_idx = #state.bookmarks + 1
|
||||
end
|
||||
|
||||
local bookmark_desc = tostring(_generate_description(file))
|
||||
if custom_desc then
|
||||
bookmark_desc = tostring(custom_desc)
|
||||
end
|
||||
|
||||
state.bookmarks[_idx] = {
|
||||
on = SUPPORTED_KEYS[idx].on,
|
||||
desc = bookmark_desc,
|
||||
path = tostring(file.url),
|
||||
is_parent = file.is_parent,
|
||||
}
|
||||
|
||||
-- Custom sorting function
|
||||
table.sort(state.bookmarks, function(a, b)
|
||||
local key_a, key_b = a.on, b.on
|
||||
|
||||
-- Numbers first
|
||||
if key_a:match("%d") and not key_b:match("%d") then
|
||||
return true
|
||||
elseif key_b:match("%d") and not key_a:match("%d") then
|
||||
return false
|
||||
end
|
||||
|
||||
-- Uppercase before lowercase
|
||||
if key_a:match("%u") and key_b:match("%l") then
|
||||
return true
|
||||
elseif key_b:match("%u") and key_a:match("%l") then
|
||||
return false
|
||||
end
|
||||
|
||||
-- Regular alphabetical sorting
|
||||
return key_a < key_b
|
||||
end)
|
||||
|
||||
if state.persist then
|
||||
_save_state(state.bookmarks)
|
||||
end
|
||||
|
||||
if state.notify and state.notify.enable then
|
||||
local message = state.notify.message.new
|
||||
message, _ = message:gsub("<key>", state.bookmarks[_idx].on)
|
||||
message, _ = message:gsub("<folder>", state.bookmarks[_idx].desc)
|
||||
_send_notification(message)
|
||||
end
|
||||
|
||||
if get_last_mode() == "mark" then
|
||||
save_last_mark()
|
||||
end
|
||||
end)
|
||||
|
||||
local all_bookmarks = ya.sync(function(state, append_last_dir)
|
||||
local bookmarks = {}
|
||||
|
||||
if state.bookmarks then
|
||||
for _, value in pairs(state.bookmarks) do
|
||||
table.insert(bookmarks, value)
|
||||
end
|
||||
end
|
||||
|
||||
if append_last_dir and state.last_dir then
|
||||
table.insert(bookmarks, state.last_dir)
|
||||
end
|
||||
|
||||
return bookmarks
|
||||
end)
|
||||
|
||||
local delete_bookmark = ya.sync(function(state, idx)
|
||||
if state.notify and state.notify.enable then
|
||||
local message = state.notify.message.delete
|
||||
message, _ = message:gsub("<key>", state.bookmarks[idx].on)
|
||||
message, _ = message:gsub("<folder>", state.bookmarks[idx].desc)
|
||||
_send_notification(message)
|
||||
end
|
||||
|
||||
table.remove(state.bookmarks, idx)
|
||||
|
||||
if state.persist then
|
||||
_save_state(state.bookmarks)
|
||||
end
|
||||
end)
|
||||
|
||||
local delete_all_bookmarks = ya.sync(function(state)
|
||||
state.bookmarks = nil
|
||||
|
||||
if state.persist then
|
||||
_save_state(nil)
|
||||
end
|
||||
|
||||
if state.notify and state.notify.enable then
|
||||
_send_notification(state.notify.message.delete_all)
|
||||
end
|
||||
end)
|
||||
|
||||
return {
|
||||
entry = function(_, job)
|
||||
local action = job.args[1]
|
||||
if not action then
|
||||
return
|
||||
end
|
||||
|
||||
if action == "save" then
|
||||
if _is_show_keys_enabled() then
|
||||
SUPPORTED_KEYS = get_updated_keys(SUPPORTED_KEYS)
|
||||
end
|
||||
local key = ya.which { cands = SUPPORTED_KEYS, silent = not _is_show_keys_enabled() }
|
||||
if key then
|
||||
if _is_custom_desc_input_enabled() then
|
||||
local value, event = ya.input {
|
||||
title = "Save with custom description:",
|
||||
position = { "top-center", y = 3, w = 60 },
|
||||
value = tostring(_get_bookmark_file().url),
|
||||
}
|
||||
if event ~= 1 then
|
||||
return
|
||||
end
|
||||
|
||||
save_bookmark(key, value)
|
||||
return
|
||||
end
|
||||
save_bookmark(key)
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
if action == "delete_all" then
|
||||
return delete_all_bookmarks()
|
||||
end
|
||||
|
||||
local bookmarks = all_bookmarks(action == "jump")
|
||||
local selected = #bookmarks > 0 and ya.which { cands = bookmarks }
|
||||
if not selected then
|
||||
return
|
||||
end
|
||||
|
||||
if action == "jump" then
|
||||
if get_last_mode() == "jump" then
|
||||
save_last_jump()
|
||||
end
|
||||
|
||||
if bookmarks[selected].is_parent then
|
||||
ya.mgr_emit("cd", { bookmarks[selected].path })
|
||||
else
|
||||
ya.mgr_emit("reveal", { bookmarks[selected].path })
|
||||
end
|
||||
elseif action == "delete" then
|
||||
delete_bookmark(selected)
|
||||
end
|
||||
end,
|
||||
setup = function(state, args)
|
||||
if not args then
|
||||
return
|
||||
end
|
||||
|
||||
if type(args.last_directory) == "table" then
|
||||
if args.last_directory.enable then
|
||||
if args.last_directory.mode == "mark" then
|
||||
state.last_persist = args.last_directory.persist
|
||||
state.last_mode = "mark"
|
||||
elseif args.last_directory.mode == "jump" then
|
||||
state.last_persist = args.last_directory.persist
|
||||
state.last_mode = "jump"
|
||||
elseif args.last_directory.mode == "dir" then
|
||||
state.last_persist = args.last_directory.persist
|
||||
state.last_mode = "dir"
|
||||
save_last_dir()
|
||||
else
|
||||
-- default
|
||||
state.last_persist = args.last_directory.persist
|
||||
state.last_mode = "dir"
|
||||
save_last_dir()
|
||||
end
|
||||
|
||||
if args.last_directory.persist then
|
||||
_load_last()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if args.persist == "all" or args.persist == "vim" then
|
||||
state.persist = args.persist
|
||||
_load_state()
|
||||
end
|
||||
|
||||
if args.desc_format == "parent" then
|
||||
state.desc_format = "parent"
|
||||
else
|
||||
state.desc_format = "full"
|
||||
end
|
||||
|
||||
if args.file_pick_mode == "parent" then
|
||||
state.file_pick_mode = "parent"
|
||||
else
|
||||
state.file_pick_mode = "hover"
|
||||
end
|
||||
|
||||
if type(args.custom_desc_input) == "boolean" then
|
||||
state.custom_desc_input = args.custom_desc_input
|
||||
end
|
||||
|
||||
if type(args.show_keys) == "boolean" then
|
||||
state.show_keys = args.show_keys
|
||||
end
|
||||
|
||||
state.notify = {
|
||||
enable = false,
|
||||
timeout = 1,
|
||||
message = {
|
||||
new = "New bookmark '<key>' -> '<folder>'",
|
||||
delete = "Deleted bookmark in '<key>'",
|
||||
delete_all = "Deleted all bookmarks",
|
||||
},
|
||||
}
|
||||
if type(args.notify) == "table" then
|
||||
if type(args.notify.enable) == "boolean" then
|
||||
state.notify.enable = args.notify.enable
|
||||
end
|
||||
if type(args.notify.timeout) == "number" then
|
||||
state.notify.timeout = args.notify.timeout
|
||||
end
|
||||
if type(args.notify.message) == "table" then
|
||||
if type(args.notify.message.new) == "string" then
|
||||
state.notify.message.new = args.notify.message.new
|
||||
end
|
||||
if type(args.notify.message.delete) == "string" then
|
||||
state.notify.message.delete = args.notify.message.delete
|
||||
end
|
||||
if type(args.notify.message.delete_all) == "string" then
|
||||
state.notify.message.delete_all = args.notify.message.delete_all
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
[user]
|
||||
email = {{ .email }}
|
||||
name = {{ .name }}
|
||||
signingkey = 3EBCBD305D1C69450CEBF4A8B57235A0D139F9FD
|
||||
[init]
|
||||
defaultBranch = main
|
||||
[core]
|
||||
autocrlf = input
|
||||
[commit]
|
||||
gpgsign = true
|
||||
@@ -0,0 +1,42 @@
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IG1sa2VtNzY4eDI1NTE5IE9PTEZEc21o
|
||||
Tm9QRWFCblZ0eURVZURmQTRLMU9jN1Iza29rV21SUndiS29CYmtlenlKV3pUMEpE
|
||||
Y0hKU3phTjJnbjMzNnYzUkdYa3g3MitNSzB1ZVVSYkNOMzJTbVNUU3ZuRlAxRXNL
|
||||
SzN3SmhIUGhxd1RXZHI0RmNqaUNmSTJpaVlpVFA4QmF2ZVFEWTJlK01UZFB3dDd0
|
||||
NXMxWXhtMmFrVURxUW52aWZhMUovc0tNUjZYWXFOMU1YVGllT1pxemtrUU9ldlZU
|
||||
bHVOYlhVS2tYUm1kUElvd2hBK1RBNXZpWGwrR2R3R0hSNUVyc1RrQUR4MFZXRmgz
|
||||
eStwZUxMSVFhV0t2UThtL09VR1FnL2NMa3c3a2o3OEtMTkVHblpyd2phajhSTkZC
|
||||
N2NoUnZpZnpHRTdFTGtERGg5US9USWlDbnBRWTAyb2NzK0dZOGplWWxsWXhiVkoy
|
||||
b0pmOW5mdHE2TnlhNEx2bUVoeVZqUTdKN3YzYTJQQ2Z5VzA1WGFxSjZhUWgwbndv
|
||||
UUtBclJtOUdlWVQ1RW54cDJ6b1BWc3VhTnpRZEc0WXlMQmRUVjB0ZlYrTnVNV2Zu
|
||||
ZGtTaitqRkdGVWorQTBNcnpReHY5bnBWeTAxRHI3YVg0WUdyVHd5NlBkNER6NzYz
|
||||
c2RWTFB3cVBaUFpZMzUzU3NYRmZHV1gvMnZLUFd6WldLOWVyLytCWHhBOStDOFBm
|
||||
Z05KUms0OVh0QzFlNEdqdEU3c3NZelNkMGxtdXhBeWd0L0Zha1JFNVhZc1pnbHNW
|
||||
WDRNeTdRajFodEhFRmRmdlkxNEYyTzFpWmk1eWJQdnJIN1VseUtlTTFtRTJibGlj
|
||||
QjRkdThpdDhZU1hJT2s5SUx4MGZGbVRYY3psdVgxSm9hbmV1aUpTQzdxbm9xYkVr
|
||||
dkx4a2d5TStBcytVTjgydUlLU2hwcWJ6TFRlZjZIRVRaSWNObXFGU2NDMWxQMUFQ
|
||||
akM4UkxhY3VUZUdHKzAyb0wzNTM1L2xIQmJpaUVLSFlNZWIvbE1HVnVnVElWRzlP
|
||||
RnRRUzRKazJmamtlYXhDazd6ZG12dUZ2a3JQR0FUOERCUDN2TVUvN0pXNHNRRnBr
|
||||
RWlIRDltenRtR3F1TkR0aXRERHVGeVZJTGF1b3pYbFpVREc1TUhDTlhCQjJlN3hl
|
||||
MzBCZVRyM0kxRSt1MFU5TDA4ZTF1VUtCSEFZQkl5Zit2TnNCaUU0cUhFNlhFcG9W
|
||||
TjR6eTZJbEJiS2gyVE1PWWUycDlYQ3dvZlFUc2plMDBMZXFqUkpUMFJpWGhnSWtj
|
||||
N0JQSzBuM0pFY1B1bXEzclowbFFhaElXa1RPSFJ6ZHRtZHRDdXRFZStVcGw0dGpx
|
||||
Q21wK0VBc0xpak9rMUNHMVBISFQ2bndqYnNSblUrVmM2bTVCZ3NIQU16RGkxOUJU
|
||||
Mk9haE5RRTAxVGlOY3NCbFQ3V2xrc0YxeS83QVEyamJrN2crWnhNY2FEb3RMKy9P
|
||||
Z1BoOWYwMlRLVWZqL2FxYkp5TE9seWFjMUVXcE12S1ZEZjA0bW5FUmh1N2FLY0Va
|
||||
dnVJNHhNSlFONnk1L2xEcHFpWlRuMXJadHp6NFc3WjBqZTdGWWc5TjhPbmNFaDdZ
|
||||
cGpjcHhqUXV2NTZ5Ny9seE5RMlZxb01TSG9KbVdheHNtQTRYWTNVak40VzZpY2ZU
|
||||
OC8xekVwa0s4elBVUC9MMzBCSmRkckhjajc5SVM3VjhvZFFyRDRjRHRzcWZISWJB
|
||||
blZnLzMwVW1aTjRBSVpDNERzR24rRDU1cCtzL3Uwb2RIUjRtUWZnZFJONGJha3or
|
||||
aFhaME54dEwzMGJvQ0ZHbVhPZXdWUCtIN05UdmlwbkhjaFV3aCtGMnFHU2pTK21z
|
||||
NTlPNEtwR0NRZmJWWStwWFJtY2N4djV5WmpnSmJtYkQvVXRKbWlZL0YrMnRKSzY1
|
||||
MlBXQ2dUMzluQ2ZNQ3dJSFFrYUxVS0FRY3BNK0dLck9QcG1EVVJLbVJYdnRZQQpE
|
||||
OTluZjV2ZWN1RG9tSnpEQ1htVzZRMlFJcDJFSW9hc1BsVWoyaHc2ek1BCi0tLSAx
|
||||
bVFZODh0eTRyemtKcEtabU5iOFltR1RPYndvV0h4ME5CZ0V6a0k2dkgwCjMcrv1i
|
||||
X/Q7cSztMHyJ2h7X/Pua0a8+Uw21d8rJwvbiCTTIrje4HLT7+CtHl+wRand/yPpj
|
||||
13od2ldCW020adzS8h2EL9erX0SCGtD6Kk4Au9rX9TKEEZCFkffimYgMnTt+MUAZ
|
||||
HAY2QbGOQsqOynDdeWBTwemKQep8kSgLoGONKO7Tz2l2/MqUCS2W7YQRFb783i03
|
||||
kicX6irr+EaVq9BdX2KOO/c7K7DshJ6AXYMFhcGBY0wn5TnXoO/3ANBTg0zj7CgO
|
||||
WU3oMKfc1tgHCzXfp5t8UdTnmiMxPussFxil/rVIiUmhtg6R/ADfaENALYreOxKT
|
||||
Y6zMgQ==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
@@ -1,30 +0,0 @@
|
||||
default_roles:
|
||||
- bash
|
||||
- btop
|
||||
- fish
|
||||
- nvim
|
||||
- starship
|
||||
- yazi
|
||||
|
||||
desktop_roles:
|
||||
- ags
|
||||
- alacritty
|
||||
- discord
|
||||
- hypr
|
||||
- kvantum
|
||||
- minegrub
|
||||
- nwg-look
|
||||
- qt5ct
|
||||
- sddm
|
||||
- wakatime
|
||||
|
||||
system: desktop
|
||||
|
||||
wakapi_key: !vault |
|
||||
$ANSIBLE_VAULT;1.1;AES256
|
||||
39346164353734613634356635383464636463373437333463616530346162303666343962383364
|
||||
3862316162646639353665336530613965663437316263310a646464663038346539393039666537
|
||||
32636139616239643934353135656662376262356433616635343830646164363435353739343966
|
||||
6233303036393538370a656564643033383334323631663631336137346161326464373364346230
|
||||
64323564663534393766356166393363376237633565316363363138373033353030373139366365
|
||||
6435323438633233363166626330633164346534363335666433
|
||||
@@ -1,163 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Vars
|
||||
DOTFILES_DIR="$HOME/.dotfiles"
|
||||
CONFIG_DIR="$HOME/.config/dotfiles"
|
||||
REPO="https://gitea.keuledrive.de/Keule2/Dotfiles.git"
|
||||
DIST=$(source /etc/os-release && echo $ID)
|
||||
|
||||
# Colors
|
||||
COLOR_RESET='\033[0m'
|
||||
RED='\033[0;31m'
|
||||
LGREEN='\033[01;32m'
|
||||
|
||||
# Helper Functions
|
||||
print_header() {
|
||||
echo -e "${LGREEN}$1${COLOR_RESET}"
|
||||
}
|
||||
|
||||
cmd() {
|
||||
local DOTFILES_LOG="./error.log"
|
||||
|
||||
if eval "$1" 1> /dev/null 2> $DOTFILES_LOG; then
|
||||
rm "$DOTFILES_LOG"
|
||||
return 0
|
||||
fi
|
||||
|
||||
echo -e "${RED}"
|
||||
cat $DOTFILES_LOG
|
||||
echo -e "${COLOR_RESET}"
|
||||
rm "$DOTFILES_LOG"
|
||||
exit 1
|
||||
}
|
||||
|
||||
paru_install() {
|
||||
if [ -x "$(command -v paru)" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
# Install Base-Devel
|
||||
if [ -z "$(pacman -Q | grep base-devel)" ]; then
|
||||
print_header "Installing base-devel"
|
||||
cmd "sudo pacman -S base-devel --noconfirm"
|
||||
fi
|
||||
# Install RustUp
|
||||
if ! [ -x "$(command -v rustup)" ]; then
|
||||
print_header "Installing rustup"
|
||||
cmd "sudo pacman -S rustup --noconfirm"
|
||||
cmd "rustup default stable"
|
||||
fi
|
||||
# Instal Paru
|
||||
FOLDER=$(mktemp -d)
|
||||
print_header "Installing paru"
|
||||
cmd "git clone https://aur.archlinux.org/paru.git $FOLDER"
|
||||
cd $FOLDER
|
||||
cmd "makepkg -si --noconfirm"
|
||||
}
|
||||
|
||||
arch_install() {
|
||||
# Install Ansible
|
||||
if ! [ -x "$(command -v ansible)" ]; then
|
||||
print_header "Installing ansible"
|
||||
cmd "sudo pacman -S ansible --noconfirm"
|
||||
fi
|
||||
# Install Git
|
||||
if ! [ -x "$(command -v git)" ]; then
|
||||
print_header "Installing git"
|
||||
cmd "sudo pacman -S git --noconfirm"
|
||||
fi
|
||||
# Installl Paru
|
||||
paru_install
|
||||
# Install PIP
|
||||
if ! [ -x "$(command -v pip)" ]; then
|
||||
print_header "Installing pip"
|
||||
cmd "sudo pacman -S python-pip --noconfirm"
|
||||
fi
|
||||
# Install Watchdog
|
||||
if [ -z "$(pip list | grep watchdog)" ]; then
|
||||
print_header "Installing watchdog"
|
||||
cmd "pip install --break-system-packages watchdog"
|
||||
fi
|
||||
}
|
||||
|
||||
ubuntu_install() {
|
||||
# Install Ansible
|
||||
if ! dpkg -s ansible >/dev/null 2>&1; then
|
||||
print_header "Installing ansible"
|
||||
cmd "sudo apt-get update"
|
||||
cmd "sudo apt-get install -y software-properties-common"
|
||||
cmd "sudo apt-add-repository -y ppa:ansible/ansible"
|
||||
cmd "sudo apt-get update"
|
||||
cmd "sudo apt-get install -y ansible"
|
||||
cmd "sudo apt-get install python3-argcomplete"
|
||||
cmd "sudo activate-global-python-argcomplete3"
|
||||
fi
|
||||
# Install Git
|
||||
if ! dpkg -s git >/dev/null 2>&1; then
|
||||
print_header "Installing git"
|
||||
cmd "sudo apt-get install -y git"
|
||||
fi
|
||||
# TODO pip, watchdog
|
||||
}
|
||||
|
||||
update_galaxy() {
|
||||
local OS=$1
|
||||
|
||||
print_header "Installing/Updating ansible-galaxy"
|
||||
cmd "ansible-galaxy install -r $DOTFILES_DIR/requirements/default.yml"
|
||||
if [ -f "$DOTFILES_DIR/requirements/$OS.yml" ]; then
|
||||
cmd "ansible-galaxy install -r $DOTFILES_DIR/requirements/$OS.yml"
|
||||
fi
|
||||
}
|
||||
|
||||
# Banner
|
||||
cat << "EOF"
|
||||
________ __ .___ __ .__ .__
|
||||
\______ \ _____/ |_ ______ | | ____ _______/ |______ | | | | ___________
|
||||
| | \ / _ \ __\/ ___/ | |/ \ / ___/\ __\__ \ | | | | _/ __ \_ __ \
|
||||
| ` ( <_> ) | \___ \ | | | \\___ \ | | / __ \| |_| |_\ ___/| | \/
|
||||
/_______ /\____/|__| /____ > |___|___| /____ > |__| (____ /____/____/\___ >__|
|
||||
\/ \/ \/ \/ \/ \/
|
||||
EOF
|
||||
|
||||
# Setup
|
||||
case $DIST in
|
||||
arch)
|
||||
arch_install
|
||||
;;
|
||||
ubuntu)
|
||||
ubuntu_install
|
||||
;;
|
||||
*)
|
||||
echo "Unsupported OS"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# Clone repository
|
||||
if ! [[ -d "$DOTFILES_DIR" ]]; then
|
||||
print_header "Cloning repo"
|
||||
cmd "git clone $REPO $DOTFILES_DIR"
|
||||
else
|
||||
print_header "Updating repo"
|
||||
cmd "git -C $DOTFILES_DIR pull"
|
||||
fi
|
||||
|
||||
# Change Working Dir
|
||||
cd "$DOTFILES_DIR"
|
||||
|
||||
# Update Galaxy
|
||||
update_galaxy $DIST
|
||||
|
||||
# Run playbook
|
||||
if [[ -f "$CONFIG_DIR/vault-password.txt" ]]; then
|
||||
if [[ -f "$CONFIG_DIR/values.yml" ]]; then
|
||||
ansible-playbook --diff -v --ask-become-pass --extra-vars "@$CONFIG_DIR/values.yml" --vault-password-file "$CONFIG_DIR/vault-password.txt" "$DOTFILES_DIR/main.yml" "$@"
|
||||
else
|
||||
ansible-playbook --diff -v --ask-become-pass --vault-password-file "$CONFIG_DIR/vault-password.txt" "$DOTFILES_DIR/main.yml" "$@"
|
||||
fi
|
||||
elif [[ -f "$CONFIG_DIR/values.yml" ]]; then
|
||||
ansible-playbook --diff -v --ask-become-pass --extra-vars "@$CONFIG_DIR/values.yml" "$DOTFILES_DIR/main.yml" "$@"
|
||||
else
|
||||
ansible-playbook --diff -v --ask-become-pass "$DOTFILES_DIR/main.yml" "$@"
|
||||
fi
|
||||
@@ -1,52 +0,0 @@
|
||||
---
|
||||
- name: Dotfiles
|
||||
hosts: localhost
|
||||
connection: local
|
||||
tasks:
|
||||
- name: Get username
|
||||
command: whoami
|
||||
register: whoami
|
||||
tags:
|
||||
- always
|
||||
|
||||
- name: Set username
|
||||
set_fact:
|
||||
username: "{{ whoami.stdout }}"
|
||||
tags:
|
||||
- always
|
||||
|
||||
- name: Set default roles
|
||||
set_fact:
|
||||
roles: "{{ ansible_run_tags != ['all'] and ansible_run_tags or default_roles | difference(ansible_skip_tags | default([])) }}"
|
||||
tags:
|
||||
- always
|
||||
|
||||
- name: Set desktop roles
|
||||
set_fact:
|
||||
roles: "{{ (desktop_roles + roles) | difference(ansible_skip_tags | default([])) }}"
|
||||
tags:
|
||||
- always
|
||||
when: system != 'server' and desktop_roles is defined and ansible_run_tags == ['all']
|
||||
|
||||
- name: Prepend system role
|
||||
set_fact:
|
||||
roles: "{{ ['system'] | difference(roles) + roles }}"
|
||||
tags:
|
||||
- always
|
||||
|
||||
- name: Display roles
|
||||
debug: "var=roles"
|
||||
tags:
|
||||
- always
|
||||
|
||||
- name: Run roles
|
||||
include_role:
|
||||
apply:
|
||||
tags:
|
||||
- "{{ roles_item }}"
|
||||
name: "{{ roles_item }}"
|
||||
loop_control:
|
||||
loop_var: roles_item
|
||||
with_items: "{{ roles }}"
|
||||
tags:
|
||||
- always
|
||||
@@ -1,2 +0,0 @@
|
||||
collections:
|
||||
- name: kewlfft.aur
|
||||
@@ -1,2 +0,0 @@
|
||||
collections:
|
||||
- name: community.general
|
||||
@@ -1,19 +0,0 @@
|
||||
import = [
|
||||
# Theme
|
||||
"~/.config/alacritty/catppuccin-macchiato.toml"
|
||||
]
|
||||
|
||||
[env]
|
||||
TERM = "xterm-256color"
|
||||
|
||||
[window]
|
||||
opacity = 0.7
|
||||
decorations = "None"
|
||||
padding = { x = 0, y = 0 }
|
||||
|
||||
[font]
|
||||
normal = {family = "CaskaydiaCove Nerd Font", style = "Mono"}
|
||||
|
||||
[cursor]
|
||||
style = {shape = "Beam", blinking = "On"}
|
||||
vi_mode_style = {shape = "Block", blinking = "On"}
|
||||
@@ -1,97 +0,0 @@
|
||||
# MIT License
|
||||
#
|
||||
# Copyright (c) 2021 Catppuccin
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in all
|
||||
# copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
|
||||
[colors.primary]
|
||||
background = "#24273A"
|
||||
foreground = "#CAD3F5"
|
||||
dim_foreground = "#CAD3F5"
|
||||
bright_foreground = "#CAD3F5"
|
||||
|
||||
[colors.cursor]
|
||||
text = "#24273A"
|
||||
cursor = "#F4DBD6"
|
||||
|
||||
[colors.vi_mode_cursor]
|
||||
text = "#24273A"
|
||||
cursor = "#B7BDF8"
|
||||
|
||||
[colors.search.matches]
|
||||
foreground = "#24273A"
|
||||
background = "#A5ADCB"
|
||||
|
||||
[colors.search.focused_match]
|
||||
foreground = "#24273A"
|
||||
background = "#A6DA95"
|
||||
|
||||
[colors.footer_bar]
|
||||
foreground = "#24273A"
|
||||
background = "#A5ADCB"
|
||||
|
||||
[colors.hints.start]
|
||||
foreground = "#24273A"
|
||||
background = "#EED49F"
|
||||
|
||||
[colors.hints.end]
|
||||
foreground = "#24273A"
|
||||
background = "#A5ADCB"
|
||||
|
||||
[colors.selection]
|
||||
text = "#24273A"
|
||||
background = "#F4DBD6"
|
||||
|
||||
[colors.normal]
|
||||
black = "#494D64"
|
||||
red = "#ED8796"
|
||||
green = "#A6DA95"
|
||||
yellow = "#EED49F"
|
||||
blue = "#8AADF4"
|
||||
magenta = "#F5BDE6"
|
||||
cyan = "#8BD5CA"
|
||||
white = "#B8C0E0"
|
||||
|
||||
[colors.bright]
|
||||
black = "#5B6078"
|
||||
red = "#ED8796"
|
||||
green = "#A6DA95"
|
||||
yellow = "#EED49F"
|
||||
blue = "#8AADF4"
|
||||
magenta = "#F5BDE6"
|
||||
cyan = "#8BD5CA"
|
||||
white = "#A5ADCB"
|
||||
|
||||
[colors.dim]
|
||||
black = "#494D64"
|
||||
red = "#ED8796"
|
||||
green = "#A6DA95"
|
||||
yellow = "#EED49F"
|
||||
blue = "#8AADF4"
|
||||
magenta = "#F5BDE6"
|
||||
cyan = "#8BD5CA"
|
||||
white = "#B8C0E0"
|
||||
|
||||
[[colors.indexed_colors]]
|
||||
index = 16
|
||||
color = "#F5A97F"
|
||||
|
||||
[[colors.indexed_colors]]
|
||||
index = 17
|
||||
color = "#F4DBD6"
|
||||
@@ -1,22 +0,0 @@
|
||||
---
|
||||
- name: "[Alacritty] Install"
|
||||
kewlfft.aur.aur:
|
||||
name:
|
||||
- alacritty
|
||||
- ueberzugpp
|
||||
state: present
|
||||
|
||||
- name: "[Alacritty] Create config folder"
|
||||
ansible.builtin.file:
|
||||
mode: "0755"
|
||||
path: "{{ ansible_user_dir }}/.config/alacritty"
|
||||
state: directory
|
||||
|
||||
- name: "[Alacritty] Configure"
|
||||
ansible.builtin.copy:
|
||||
src: "./"
|
||||
dest: "{{ ansible_user_dir }}/.config/alacritty"
|
||||
|
||||
- name: "[Alacritty] Set default"
|
||||
shell: gsettings set org.cinnamon.desktop.default-applications.terminal exec alacritty && gsettings set org.gnome.desktop.default-applications.terminal exec alacritty
|
||||
ignore_errors: true
|
||||
@@ -1,12 +0,0 @@
|
||||
---
|
||||
- name: "[Bash] Install"
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- bash
|
||||
state: latest
|
||||
become: yes
|
||||
|
||||
- name: "[Bash] Configure"
|
||||
ansible.builtin.copy:
|
||||
src: "./"
|
||||
dest: "{{ ansible_user_dir }}/"
|
||||
@@ -1,248 +0,0 @@
|
||||
#? Config file for btop v. 1.3.2
|
||||
|
||||
#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes.
|
||||
#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes"
|
||||
color_theme = "Default"
|
||||
|
||||
#* If the theme set background should be shown, set to False if you want terminal background transparency.
|
||||
theme_background = True
|
||||
|
||||
#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false.
|
||||
truecolor = True
|
||||
|
||||
#* Set to true to force tty mode regardless if a real tty has been detected or not.
|
||||
#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols.
|
||||
force_tty = False
|
||||
|
||||
#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets.
|
||||
#* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box.
|
||||
#* Use whitespace " " as separator between different presets.
|
||||
#* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty"
|
||||
presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty"
|
||||
|
||||
#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists.
|
||||
#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift.
|
||||
vim_keys = True
|
||||
|
||||
#* Rounded corners on boxes, is ignored if TTY mode is ON.
|
||||
rounded_corners = True
|
||||
|
||||
#* Default symbols to use for graph creation, "braille", "block" or "tty".
|
||||
#* "braille" offers the highest resolution but might not be included in all fonts.
|
||||
#* "block" has half the resolution of braille but uses more common characters.
|
||||
#* "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY.
|
||||
#* Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view.
|
||||
graph_symbol = "braille"
|
||||
|
||||
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
|
||||
graph_symbol_cpu = "default"
|
||||
|
||||
# Graph symbol to use for graphs in gpu box, "default", "braille", "block" or "tty".
|
||||
graph_symbol_gpu = "default"
|
||||
|
||||
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
|
||||
graph_symbol_mem = "default"
|
||||
|
||||
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
|
||||
graph_symbol_net = "default"
|
||||
|
||||
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
|
||||
graph_symbol_proc = "default"
|
||||
|
||||
#* Manually set which boxes to show. Available values are "cpu mem net proc" and "gpu0" through "gpu5", separate values with whitespace.
|
||||
shown_boxes = "cpu mem net proc"
|
||||
|
||||
#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs.
|
||||
update_ms = 2000
|
||||
|
||||
#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct",
|
||||
#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly.
|
||||
proc_sorting = "memory"
|
||||
|
||||
#* Reverse sorting order, True or False.
|
||||
proc_reversed = False
|
||||
|
||||
#* Show processes as a tree.
|
||||
proc_tree = False
|
||||
|
||||
#* Use the cpu graph colors in the process list.
|
||||
proc_colors = True
|
||||
|
||||
#* Use a darkening gradient in the process list.
|
||||
proc_gradient = True
|
||||
|
||||
#* If process cpu usage should be of the core it's running on or usage of the total available cpu power.
|
||||
proc_per_core = True
|
||||
|
||||
#* Show process memory as bytes instead of percent.
|
||||
proc_mem_bytes = True
|
||||
|
||||
#* Show cpu graph for each process.
|
||||
proc_cpu_graphs = True
|
||||
|
||||
#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate)
|
||||
proc_info_smaps = False
|
||||
|
||||
#* Show proc box on left side of screen instead of right.
|
||||
proc_left = False
|
||||
|
||||
#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop).
|
||||
proc_filter_kernel = False
|
||||
|
||||
#* In tree-view, always accumulate child process resources in the parent process.
|
||||
proc_aggregate = False
|
||||
|
||||
#* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available.
|
||||
#* Select from a list of detected attributes from the options menu.
|
||||
cpu_graph_upper = "total"
|
||||
|
||||
#* Sets the CPU stat shown in lower half of the CPU graph, "total" is always available.
|
||||
#* Select from a list of detected attributes from the options menu.
|
||||
cpu_graph_lower = "total"
|
||||
|
||||
#* If gpu info should be shown in the cpu box. Available values = "Auto", "On" and "Off".
|
||||
show_gpu_info = "Auto"
|
||||
|
||||
#* Toggles if the lower CPU graph should be inverted.
|
||||
cpu_invert_lower = True
|
||||
|
||||
#* Set to True to completely disable the lower CPU graph.
|
||||
cpu_single_graph = False
|
||||
|
||||
#* Show cpu box at bottom of screen instead of top.
|
||||
cpu_bottom = False
|
||||
|
||||
#* Shows the system uptime in the CPU box.
|
||||
show_uptime = True
|
||||
|
||||
#* Show cpu temperature.
|
||||
check_temp = True
|
||||
|
||||
#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors.
|
||||
cpu_sensor = "Auto"
|
||||
|
||||
#* Show temperatures for cpu cores also if check_temp is True and sensors has been found.
|
||||
show_coretemp = True
|
||||
|
||||
#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core.
|
||||
#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine.
|
||||
#* Format "x:y" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries.
|
||||
#* Example: "4:0 5:1 6:3"
|
||||
cpu_core_map = ""
|
||||
|
||||
#* Which temperature scale to use, available values: "celsius", "fahrenheit", "kelvin" and "rankine".
|
||||
temp_scale = "celsius"
|
||||
|
||||
#* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024.
|
||||
base_10_sizes = False
|
||||
|
||||
#* Show CPU frequency.
|
||||
show_cpu_freq = True
|
||||
|
||||
#* Draw a clock at top of screen, formatting according to strftime, empty string to disable.
|
||||
#* Special formatting: /host = hostname | /user = username | /uptime = system uptime
|
||||
clock_format = "%X"
|
||||
|
||||
#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort.
|
||||
background_update = True
|
||||
|
||||
#* Custom cpu model name, empty string to disable.
|
||||
custom_cpu_name = ""
|
||||
|
||||
#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ".
|
||||
#* Begin line with "exclude=" to change to exclude filter, otherwise defaults to "most include" filter. Example: disks_filter="exclude=/boot /home/user".
|
||||
disks_filter = ""
|
||||
|
||||
#* Show graphs instead of meters for memory values.
|
||||
mem_graphs = True
|
||||
|
||||
#* Show mem box below net box instead of above.
|
||||
mem_below_net = False
|
||||
|
||||
#* Count ZFS ARC in cached and available memory.
|
||||
zfs_arc_cached = True
|
||||
|
||||
#* If swap memory should be shown in memory box.
|
||||
show_swap = True
|
||||
|
||||
#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk.
|
||||
swap_disk = True
|
||||
|
||||
#* If mem box should be split to also show disks info.
|
||||
show_disks = True
|
||||
|
||||
#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar.
|
||||
only_physical = True
|
||||
|
||||
#* Read disks list from /etc/fstab. This also disables only_physical.
|
||||
use_fstab = True
|
||||
|
||||
#* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool)
|
||||
zfs_hide_datasets = False
|
||||
|
||||
#* Set to true to show available disk space for privileged users.
|
||||
disk_free_priv = False
|
||||
|
||||
#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view.
|
||||
show_io_stat = True
|
||||
|
||||
#* Toggles io mode for disks, showing big graphs for disk read/write speeds.
|
||||
io_mode = False
|
||||
|
||||
#* Set to True to show combined read/write io graphs in io mode.
|
||||
io_graph_combined = False
|
||||
|
||||
#* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ".
|
||||
#* Example: "/mnt/media:100 /:20 /boot:1".
|
||||
io_graph_speeds = ""
|
||||
|
||||
#* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False.
|
||||
net_download = 100
|
||||
|
||||
net_upload = 100
|
||||
|
||||
#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest.
|
||||
net_auto = True
|
||||
|
||||
#* Sync the auto scaling for download and upload to whichever currently has the highest scale.
|
||||
net_sync = True
|
||||
|
||||
#* Starts with the Network Interface specified here.
|
||||
net_iface = ""
|
||||
|
||||
#* Show battery stats in top right if battery is present.
|
||||
show_battery = True
|
||||
|
||||
#* Which battery to use if multiple are present. "Auto" for auto detection.
|
||||
selected_battery = "Auto"
|
||||
|
||||
#* Show power stats of battery next to charge indicator.
|
||||
show_battery_watts = True
|
||||
|
||||
#* Set loglevel for "~/.config/btop/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG".
|
||||
#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info.
|
||||
log_level = "WARNING"
|
||||
|
||||
#* Measure PCIe throughput on NVIDIA cards, may impact performance on certain cards.
|
||||
nvml_measure_pcie_speeds = True
|
||||
|
||||
#* Horizontally mirror the GPU graph.
|
||||
gpu_mirror_graph = True
|
||||
|
||||
#* Custom gpu0 model name, empty string to disable.
|
||||
custom_gpu_name0 = ""
|
||||
|
||||
#* Custom gpu1 model name, empty string to disable.
|
||||
custom_gpu_name1 = ""
|
||||
|
||||
#* Custom gpu2 model name, empty string to disable.
|
||||
custom_gpu_name2 = ""
|
||||
|
||||
#* Custom gpu3 model name, empty string to disable.
|
||||
custom_gpu_name3 = ""
|
||||
|
||||
#* Custom gpu4 model name, empty string to disable.
|
||||
custom_gpu_name4 = ""
|
||||
|
||||
#* Custom gpu5 model name, empty string to disable.
|
||||
custom_gpu_name5 = ""
|
||||
@@ -1,18 +0,0 @@
|
||||
---
|
||||
- name: "[Btop] Install"
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- btop
|
||||
state: latest
|
||||
become: true
|
||||
|
||||
- name: "[Btop] Create config folder"
|
||||
ansible.builtin.file:
|
||||
mode: "0755"
|
||||
path: "{{ ansible_user_dir }}/.config/btop"
|
||||
state: directory
|
||||
|
||||
- name: "[Btop] Configure"
|
||||
ansible.builtin.copy:
|
||||
src: "./"
|
||||
dest: "{{ ansible_user_dir }}/.config/btop"
|
||||
@@ -1 +0,0 @@
|
||||
{"spellcheck":{"dictionaries":["en-GB", "de-DE"],"dictionary":""}}
|
||||
@@ -1,3 +0,0 @@
|
||||
{
|
||||
"lang": "en-US"
|
||||
}
|
||||
@@ -1,62 +0,0 @@
|
||||
{
|
||||
"windowStyle": "native",
|
||||
"channel": "stable",
|
||||
"armcordCSP": true,
|
||||
"minimizeToTray": false,
|
||||
"keybinds": [],
|
||||
"alternativePaste": false,
|
||||
"multiInstance": false,
|
||||
"mods": [
|
||||
"none"
|
||||
],
|
||||
"spellcheck": true,
|
||||
"performanceMode": "none",
|
||||
"skipSplash": false,
|
||||
"inviteWebsocket": true,
|
||||
"startMinimized": false,
|
||||
"dynamicIcon": false,
|
||||
"tray": "dynamic",
|
||||
"customJsBundle": "https://armcord.app/placeholder.js",
|
||||
"customCssBundle": "https://armcord.app/placeholder.css",
|
||||
"disableAutogain": false,
|
||||
"useLegacyCapturer": false,
|
||||
"mobileMode": false,
|
||||
"trayIcon": "dynamic",
|
||||
"doneSetup": true,
|
||||
"clientName": "ArmCord",
|
||||
"customIcon": "/usr/lib/armcord/app.asar/assets/desktop.png",
|
||||
"modCache": {
|
||||
"shelter": "1b35b8802a85809742af99f454bb941f56f759a3"
|
||||
},
|
||||
"hardwareAcceleration": true,
|
||||
"audio": {
|
||||
"workaround": false,
|
||||
"deviceSelect": true,
|
||||
"granularSelect": true,
|
||||
"ignoreVirtual": false,
|
||||
"ignoreDevices": false,
|
||||
"ignoreInputMedia": false,
|
||||
"onlySpeakers": false,
|
||||
"onlyDefaultSpeakers": true,
|
||||
"loopbackType": "loopback"
|
||||
},
|
||||
"transparency": "none",
|
||||
"legcordCSP": true,
|
||||
"bounceOnPing": false,
|
||||
"disableHttpCache": false,
|
||||
"autoHideMenuBar": true,
|
||||
"blockPowerSavingInVoiceChat": false,
|
||||
"useMacSystemPicker": true,
|
||||
"popoutPiP": false,
|
||||
"spellcheckLanguage": [
|
||||
"en-US",
|
||||
"de-DE"
|
||||
],
|
||||
"sleepInBackground": false,
|
||||
"noBundleUpdates": false,
|
||||
"additionalArguments": "",
|
||||
"smoothScroll": true,
|
||||
"autoScroll": false,
|
||||
"useSystemCssEditor": false,
|
||||
"overlayButtonColor": "#121214"
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2022 Catppuccin
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -1,13 +0,0 @@
|
||||
{
|
||||
"theme": "src.css",
|
||||
"name": "Catppuccin Macchiato",
|
||||
"author": "winston#0001",
|
||||
"authorId": "505490445468696576",
|
||||
"version": "0.2.0",
|
||||
"description": "🎮 Soothing pastel theme for Discord",
|
||||
"website": "https://github.com/catppuccin/discord",
|
||||
"invite": "r6Mdz5dpFc",
|
||||
"updateSrc": "https://raw.githubusercontent.com/catppuccin/discord/main/themes/macchiato.theme.css",
|
||||
"supportsArmCordTitlebar": false,
|
||||
"enabled": true
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
/**
|
||||
* @name Catppuccin Macchiato
|
||||
* @author winston#0001
|
||||
* @authorId 505490445468696576
|
||||
* @version 0.2.0
|
||||
* @description 🎮 Soothing pastel theme for Discord
|
||||
* @website https://github.com/catppuccin/discord
|
||||
* @invite r6Mdz5dpFc
|
||||
* **/
|
||||
|
||||
@import url("https://catppuccin.github.io/discord/dist/catppuccin-macchiato.theme.css");
|
||||