Compare commits
33 Commits
a5e098a187
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| b0a45417ea | |||
| 3ba75c032a | |||
| 23521892d3 | |||
| e35e3f6249 | |||
| 2dffefbf6f | |||
| 0b540e1ac3 | |||
| fa5d034a83 | |||
| e42d9ba749 | |||
| c0ea9ecf0f | |||
| 4d408701e5 | |||
| 6bca6df972 | |||
| f989f2e613 | |||
| 3ee3bb092d | |||
| 74a761bee3 | |||
| eb90afe921 | |||
| aa687e1591 | |||
| 762318ce88 | |||
| ecefd423fd | |||
| 1e71f20662 | |||
| 79886b4e55 | |||
| dc96e01021 | |||
| 56f5e8a217 | |||
| abe1cb125f | |||
| 2888384d29 | |||
| ff0f717e75 | |||
| 0e0ae462bc | |||
| bb7df51c39 | |||
| 2d2f069a7d | |||
| 1b4e009cd0 | |||
| f67b61c6f4 | |||
| f3c8313285 | |||
| 0d9f9bd4e8 | |||
| 62a1779d9e |
7
.gitignore
vendored
Normal file
7
.gitignore
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
*/colors.css
|
||||||
|
*/colors.conf
|
||||||
|
backups/
|
||||||
|
i3/config
|
||||||
|
sway/config
|
||||||
|
waybar/style.css
|
||||||
|
wofi/style.css
|
||||||
26
CLAUDE.md
Normal file
26
CLAUDE.md
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
# CLAUDE.md
|
||||||
|
|
||||||
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
This is a dotfiles/config repository for Arch Linux (Manjaro) using `yay` as the package manager. Configs are installed by symlinking or sourcing from `~/scripts/` into their standard locations. The repo targets Wayland-based desktops (Hyprland and Sway) with an i3 fallback for X11.
|
||||||
|
|
||||||
|
## Repository Structure
|
||||||
|
|
||||||
|
- **Window managers**: `hyprland/`, `sway/`, `i3/` - config files for each WM
|
||||||
|
- **Waybar**: `waybar/` - separate config JSONs per WM (`waybar_hyprland_config.json`, `waybar_sway_config.json`) plus shared `waybar_style.css`
|
||||||
|
- **Shell**: `bashrc`, `zshrc` - sourced from the user's dotfiles, not used directly
|
||||||
|
- **Terminal**: `alacritty.toml` (imported via alacritty's import system), `kitty.conf`
|
||||||
|
- **Scripts**: `sh/` - shell utilities added to PATH (`sharefile`, `getfile`, `waybar-history`)
|
||||||
|
- **Submodule**: `hatsune-miku-windows-linux-cursors` - cursor theme (init with `git submodule update --init --recursive`)
|
||||||
|
- **Packages**: `packages.txt` - list of packages installed via `yay -S`
|
||||||
|
|
||||||
|
## Key Conventions
|
||||||
|
|
||||||
|
- Configs are symlinked into `~/.config/` (see README.md for exact symlink commands per component)
|
||||||
|
- Shell configs (`bashrc`, `zshrc`) are sourced, not symlinked
|
||||||
|
- `alacritty.toml` uses alacritty's import mechanism rather than symlinking
|
||||||
|
- Hyprland is the primary/active WM (most recent changes)
|
||||||
|
- `$mod` in WM configs refers to the Super/Windows key
|
||||||
|
- Keybindings use vim-style hjkl navigation across all WMs and tmux
|
||||||
340
README.md
340
README.md
@@ -1,51 +1,104 @@
|
|||||||
# Linux Scripts and Configs
|
# Linux Scripts and Configs
|
||||||
|
|
||||||
A collection of Linux scripts and configs for use across multiple machines.
|
Dotfiles and scripts for Arch Linux (Manjaro), targeting Wayland (Hyprland / Sway) with an i3 fallback.
|
||||||
|
|
||||||
## Installation
|
## IMPORTANT TODO
|
||||||
|
|
||||||
### Submodules
|
Inside `scripts/wofi/styles.css`, I have the colour css set to `/home/adamf/scripts/wofi/colors.css`, which is clearly ugly and not nice but it was quick to do.
|
||||||
|
|
||||||
After cloning, pull submodules with:
|
Wofi is called in hypr/hyprland.conf and sway/swayconfig with the command `wofi --style /home/adamf/scripts/wofi/styles.css`. This is also not ideal but I couldn't find a way to get it to work with a relative path. I'm unsure when hyprland working directory is.
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone --recurse-submodules <repo-url> ~/scripts
|
||||||
|
```
|
||||||
|
|
||||||
|
If already cloned without submodules:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git submodule update --init --recursive
|
git submodule update --init --recursive
|
||||||
```
|
```
|
||||||
|
|
||||||
### Packages
|
Install all packages:
|
||||||
|
|
||||||
Install all packages using `yay`:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
yay -S $(grep -v '^\s*$' ~/scripts/packages.txt | tr '\n' ' ')
|
yay -S $(grep -v '^\s*$' ~/scripts/packages.txt | tr '\n' ' ')
|
||||||
```
|
```
|
||||||
|
|
||||||
### alacritty configuration
|
## Install / Uninstall
|
||||||
|
|
||||||
Add this to the `.config/alacritty/alacritty.toml`
|
`install.sh` symlinks configs, sources shell files, and backs up any existing files it would overwrite. `uninstall.sh` reverses the process, removing symlinks and restoring backups.
|
||||||
|
|
||||||
```
|
```bash
|
||||||
import = [
|
# Install everything (uses Hyprland as the WM)
|
||||||
"~/scripts/alacritty.toml"
|
~/scripts/install.sh all
|
||||||
]
|
|
||||||
|
# Install specific targets
|
||||||
|
~/scripts/install.sh hyprland shell nvim tmux
|
||||||
|
|
||||||
|
# Uninstall specific targets (restores from most recent backup)
|
||||||
|
~/scripts/uninstall.sh nvim shell
|
||||||
|
|
||||||
|
# Uninstall using a specific backup
|
||||||
|
~/scripts/uninstall.sh --backup ~/scripts/backups/20260319_120000 all
|
||||||
```
|
```
|
||||||
|
|
||||||
### tmux Configuration
|
Available targets: `hyprland`, `sway`, `i3`, `cursor`, `shell`, `alacritty`, `tmux`, `nvim`, `vim`, `all`.
|
||||||
|
|
||||||
This config uses tmux plugin manager to add session save / reloading with tmux-ressurect.
|
### tmux prerequisite
|
||||||
Before using the config, please download the plugin manager with:
|
|
||||||
|
|
||||||
```
|
Install the plugin manager before running `install.sh tmux`:
|
||||||
|
|
||||||
|
```bash
|
||||||
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
|
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
|
||||||
```
|
```
|
||||||
|
|
||||||
Then to use the config file, add to `~/.tmux.conf`:
|
### Manual linking
|
||||||
|
|
||||||
```
|
If you prefer to link configs manually instead of using `install.sh`:
|
||||||
source ~/scripts/tmux.conf
|
|
||||||
|
<details>
|
||||||
|
<summary>Manual symlink commands</summary>
|
||||||
|
|
||||||
|
#### Hyprland
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ln -sf ~/scripts/hypr ~/.config/hypr
|
||||||
|
ln -sf ~/scripts/waybar ~/.config/waybar
|
||||||
|
ln -sf ~/scripts/wofi ~/.config/wofi
|
||||||
```
|
```
|
||||||
|
|
||||||
### Bash/Zsh Configuration
|
#### Sway
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ln -sf ~/scripts/sway ~/.config/sway
|
||||||
|
ln -sf ~/scripts/waybar ~/.config/waybar
|
||||||
|
ln -sf ~/scripts/wofi ~/.config/wofi
|
||||||
|
```
|
||||||
|
|
||||||
|
The default waybar config (`waybar/config`) is set up for Hyprland. For Sway, rename the sway config as the active one:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mv ~/scripts/waybar/config ~/scripts/waybar/config.hypr.json
|
||||||
|
mv ~/scripts/waybar/waybar_sway_config.json ~/scripts/waybar/config
|
||||||
|
```
|
||||||
|
|
||||||
|
#### i3
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ln -sf ~/scripts/i3 ~/.config/i3
|
||||||
|
ln -sf ~/scripts/i3blocks ~/.config/i3blocks
|
||||||
|
ln -sf ~/scripts/i3status ~/.config/i3status
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Cursor
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ln -sf ~/scripts/hatsune-miku-windows-linux-cursors/miku-cursor-linux ~/.local/share/icons/"Miku Cursor"
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Shell
|
||||||
|
|
||||||
Add to `~/.bashrc` or `~/.zshrc`:
|
Add to `~/.bashrc` or `~/.zshrc`:
|
||||||
|
|
||||||
@@ -54,7 +107,25 @@ source ~/scripts/bashrc # or zshrc
|
|||||||
export PATH="~/scripts/sh:$PATH"
|
export PATH="~/scripts/sh:$PATH"
|
||||||
```
|
```
|
||||||
|
|
||||||
### Vim Configuration
|
#### Terminals
|
||||||
|
|
||||||
|
**Alacritty** - add to `~/.config/alacritty/alacritty.toml`:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
import = ["~/scripts/alacritty.toml"]
|
||||||
|
```
|
||||||
|
|
||||||
|
**Kitty** - kitty.conf is used directly by the WM configs.
|
||||||
|
|
||||||
|
#### tmux
|
||||||
|
|
||||||
|
Add to `~/.tmux.conf`:
|
||||||
|
|
||||||
|
```
|
||||||
|
source ~/scripts/tmux.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Vim
|
||||||
|
|
||||||
Add to `~/.vimrc`:
|
Add to `~/.vimrc`:
|
||||||
|
|
||||||
@@ -62,142 +133,113 @@ Add to `~/.vimrc`:
|
|||||||
source ~/scripts/vimrc
|
source ~/scripts/vimrc
|
||||||
```
|
```
|
||||||
|
|
||||||
### i3 Configuration
|
</details>
|
||||||
|
|
||||||
```bash
|
|
||||||
ln -sf ~/scripts/i3/i3config ~/.config/i3/config
|
|
||||||
ln -sf ~/scripts/i3/i3blocks.conf ~/.config/i3blocks/config
|
|
||||||
ln -sf ~/scripts/i3/i3status.conf ~/.config/i3status/config
|
|
||||||
```
|
|
||||||
|
|
||||||
### Hyprland Configuration
|
|
||||||
|
|
||||||
```bash
|
|
||||||
ln -sf ~/scripts/hyprland/hyprland.conf ~/.config/hypr/hyprland.conf
|
|
||||||
ln -sf ~/scripts/waybar/waybar_hyprland_config.json ~/.config/waybar/config
|
|
||||||
ln -sf ~/scripts/waybar/waybar_style.css ~/.config/waybar/style.css
|
|
||||||
```
|
|
||||||
|
|
||||||
### Sway Configuration
|
|
||||||
|
|
||||||
```bash
|
|
||||||
ln -sf ~/scripts/sway/swayconfig ~/.config/sway/config
|
|
||||||
ln -sf ~/scripts/waybar/waybar_sway_config.json ~/.config/waybar/config
|
|
||||||
ln -sf ~/scripts/waybar/waybar_style.css ~/.config/waybar/style.css
|
|
||||||
```
|
|
||||||
|
|
||||||
### Wofi Configuration
|
|
||||||
|
|
||||||
```bash
|
|
||||||
ln -sf ~/scripts/wofi/wofi_style.css ~/.config/wofi/style.css
|
|
||||||
```
|
|
||||||
|
|
||||||
### Hatsune Miku Cursor
|
|
||||||
|
|
||||||
```bash
|
|
||||||
ln -sf ~/scripts/hatsune-miku-windows-linux-cursors/miku-cursor-linux ~/.local/share/icons/"Miku Cursor"
|
|
||||||
```
|
|
||||||
|
|
||||||
## Keybindings
|
## Keybindings
|
||||||
|
|
||||||
### tmux Keybindings
|
All window managers and tmux use vim-style <kbd>h</kbd><kbd>j</kbd><kbd>k</kbd><kbd>l</kbd> navigation. `$mod` is the Super key.
|
||||||
|
|
||||||
| Keybinding | Description |
|
### Shared across WMs
|
||||||
| ----------------------------------------------------------------------- | --------------------------------------------- |
|
|
||||||
| <kbd>M-f</kbd> | Prefix key (similar to <kbd>$mod</kbd> in i3) |
|
|
||||||
| <kbd>Prefix</kbd> + <kbd>Space</kbd> | Send prefix |
|
|
||||||
| <kbd>Prefix</kbd> + <kbd>Ctrl</kbd> + <kbd>s</kbd> | Save session |
|
|
||||||
| <kbd>Prefix</kbd> + <kbd>Ctrl</kbd> + <kbd>r</kbd> | Restore session |
|
|
||||||
| <kbd>Prefix</kbd> + <kbd>?</kbd> | List keys |
|
|
||||||
| <kbd>Prefix</kbd> + <kbd>[</kbd> | Enter copy mode |
|
|
||||||
| <kbd>Prefix</kbd> + <kbd>]</kbd> | Paste buffer |
|
|
||||||
| <kbd>Prefix</kbd> + <kbd>r</kbd> | Refresh client |
|
|
||||||
| <kbd>Prefix</kbd> + <kbd>R</kbd> | Reload tmux configuration |
|
|
||||||
| <kbd>Prefix</kbd> + <kbd>g</kbd> | Split window horizontally |
|
|
||||||
| <kbd>Prefix</kbd> + <kbd>v</kbd> | Split window vertically |
|
|
||||||
| <kbd>Prefix</kbd> + <kbd>h</kbd>/<kbd>j</kbd>/<kbd>k</kbd>/<kbd>l</kbd> | Select pane (left/down/up/right) |
|
|
||||||
| <kbd>Prefix</kbd> + <kbd>H</kbd>/<kbd>J</kbd>/<kbd>K</kbd>/<kbd>L</kbd> | Resize pane (left/down/up/right) |
|
|
||||||
| <kbd>Prefix</kbd> + <kbd>w</kbd> | Choose window |
|
|
||||||
| <kbd>Prefix</kbd> + <kbd>1</kbd>-<kbd>0</kbd> | Select window 1-10 |
|
|
||||||
| <kbd>M-1</kbd> to <kbd>M-0</kbd> | Create new window 1-10 |
|
|
||||||
| <kbd>Prefix</kbd> + <kbd>!</kbd>-<kbd>)</kbd> | Move current pane to window 1-10 |
|
|
||||||
| <kbd>Prefix</kbd> + <kbd>q</kbd> | Kill selected pane |
|
|
||||||
|
|
||||||
### Hyprland Keybindings
|
|
||||||
|
|
||||||
| Keybinding | Description |
|
|
||||||
| ------------------------------------------------------------------------------------------- | ---------------------------------------- |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>Return</kbd> | Start terminal (kitty) |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>Shift</kbd> + <kbd>q</kbd> | Kill focused window |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>d</kbd> | Launch wofi |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>Ctrl</kbd> + <kbd>m</kbd> | Launch PulseAudio control |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>F2</kbd> | Launch Waterfox browser |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>F3</kbd> | Launch file manager (ranger) |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>Shift</kbd> + <kbd>F3</kbd> | Launch PCManFM |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>F5</kbd> | Launch mocp music player |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>Shift</kbd> + <kbd>d</kbd> | Restart dunst |
|
|
||||||
| <kbd>Print</kbd> | Screenshot (flameshot gui) |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>Print</kbd> | Screenshot region to clipboard |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>Shift</kbd> + <kbd>Print</kbd> | Screenshot region to file |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>Ctrl</kbd> + <kbd>x</kbd> | Kill window (hyprctl kill) |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>9</kbd> | Lock screen (hyprlock) |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>m</kbd> | Toggle waybar visibility |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>Shift</kbd> + <kbd>c</kbd> | Reload Hyprland config |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>Shift</kbd> + <kbd>e</kbd> | Exit Hyprland |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>0</kbd> | Enter system submap (lock/suspend/etc.) |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>h</kbd>/<kbd>j</kbd>/<kbd>k</kbd>/<kbd>l</kbd> | Move focus (left/down/up/right) |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>Shift</kbd> + <kbd>h</kbd>/<kbd>j</kbd>/<kbd>k</kbd>/<kbd>l</kbd> | Move window (left/down/up/right) |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>f</kbd> | Toggle fullscreen |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>g</kbd>/<kbd>v</kbd> | Tile horizontally/vertically |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>e</kbd> | Toggle split |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>Shift</kbd> + <kbd>Space</kbd> | Toggle floating |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>Shift</kbd> + <kbd>s</kbd> | Pin floating window |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>-</kbd> | Toggle scratchpad |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>Shift</kbd> + <kbd>-</kbd> | Move to scratchpad |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>b</kbd> | Switch to previous workspace |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>Ctrl</kbd> + <kbd>←</kbd>/<kbd>→</kbd> | Previous/next workspace |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>1</kbd>-<kbd>8</kbd> | Switch to workspace 1-8 |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>Shift</kbd> + <kbd>1</kbd>-<kbd>8</kbd> | Move window to workspace 1-8 |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>Ctrl</kbd> + <kbd>1</kbd>-<kbd>8</kbd> | Move window to workspace silently |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>r</kbd> | Enter resize submap (hjkl to resize) |
|
|
||||||
|
|
||||||
#### System submap (<kbd>$mod</kbd> + <kbd>0</kbd>)
|
|
||||||
|
|
||||||
| Key | Action |
|
| Key | Action |
|
||||||
| --------------------------------- | --------- |
|
| ------------------------ | ------------------------------------------ |
|
||||||
| <kbd>l</kbd> | Lock |
|
| `$mod + Return` | Terminal (kitty) |
|
||||||
| <kbd>s</kbd> | Suspend |
|
| `$mod + Shift + q` | Kill window |
|
||||||
| <kbd>h</kbd> | Hibernate |
|
| `$mod + d` | Launcher (wofi / dmenu) |
|
||||||
| <kbd>r</kbd> | Reboot |
|
| `$mod + h/j/k/l` | Focus left/down/up/right |
|
||||||
| <kbd>Shift</kbd> + <kbd>s</kbd> | Power off |
|
| `$mod + Shift + h/j/k/l` | Move window left/down/up/right |
|
||||||
| <kbd>e</kbd> | Exit |
|
| `$mod + g` / `$mod + v` | Split horizontal / vertical |
|
||||||
| <kbd>Return</kbd>/<kbd>Esc</kbd> | Cancel |
|
| `$mod + f` | Fullscreen |
|
||||||
|
| `$mod + Shift + Space` | Toggle floating |
|
||||||
|
| `$mod + 1-8` | Switch workspace |
|
||||||
|
| `$mod + Shift + 1-8` | Move window to workspace |
|
||||||
|
| `$mod + Ctrl + 1-8` | Move window silently |
|
||||||
|
| `$mod + -` | Scratchpad show |
|
||||||
|
| `$mod + Shift + -` | Move to scratchpad |
|
||||||
|
| `$mod + b` | Previous workspace |
|
||||||
|
| `$mod + 9` | Lock screen |
|
||||||
|
| `$mod + 0` | System menu (lock/suspend/reboot/shutdown) |
|
||||||
|
| `$mod + r` | Resize mode (hjkl) |
|
||||||
|
| `$mod + m` | Toggle bar |
|
||||||
|
| `$mod + Shift + c` | Reload config |
|
||||||
|
| `$mod + Ctrl + m` | PulseAudio control |
|
||||||
|
| `$mod + F2` | Browser (Waterfox) |
|
||||||
|
| `$mod + F3` | File manager (ranger) |
|
||||||
|
| `$mod + F5` | Music (mocp) |
|
||||||
|
| `Print` | Screenshot |
|
||||||
|
|
||||||
### i3 Keybindings
|
### System menu (`$mod + 0`)
|
||||||
|
|
||||||
| Keybinding | Description |
|
| Key | Action |
|
||||||
| ---------------------------------------------------------------------------------------- | --------------------------------- |
|
| ---------------- | ------------ |
|
||||||
| <kbd>$mod</kbd> + <kbd>Return</kbd> | Start a terminal (Alacritty) |
|
| `l` | Lock |
|
||||||
| <kbd>$mod</kbd> + <kbd>Shift</kbd> + <kbd>q</kbd> | Kill focused window |
|
| `s` | Suspend |
|
||||||
| <kbd>$mod</kbd> + <kbd>d</kbd> | Start program launcher (dmenu) |
|
| `h` | Hibernate |
|
||||||
| <kbd>$mod</kbd> + <kbd>z</kbd> | Launch categorized menu |
|
| `r` | Reboot |
|
||||||
| <kbd>$mod</kbd> + <kbd>Ctrl</kbd> + <kbd>m</kbd> | Launch PulseAudio control |
|
| `Shift + s` | Power off |
|
||||||
| <kbd>$mod</kbd> + <kbd>F2</kbd> | Launch Firefox browser |
|
| `e` | Exit session |
|
||||||
| <kbd>$mod</kbd> + <kbd>F3</kbd> | Launch PCManFM file manager |
|
| `Return` / `Esc` | Cancel |
|
||||||
| <kbd>$mod</kbd> + <kbd>h</kbd>/<kbd>j</kbd>/<kbd>k</kbd>/<kbd>l</kbd> | Change focus (left/down/up/right) |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>Shift</kbd> + <kbd>h</kbd>/<kbd>j</kbd>/<kbd>k</kbd>/<kbd>l</kbd> | Move focused window |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>g</kbd>/<kbd>v</kbd> | Split horizontally/vertically |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>f</kbd> | Toggle fullscreen |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>1</kbd>-<kbd>8</kbd> | Switch to workspace 1-8 |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>Shift</kbd> + <kbd>1</kbd>-<kbd>8</kbd> | Move container to workspace 1-8 |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>Shift</kbd> + <kbd>c</kbd> | Reload the configuration file |
|
|
||||||
| <kbd>$mod</kbd> + <kbd>Shift</kbd> + <kbd>r</kbd> | Restart i3 |
|
|
||||||
|
|
||||||
## Additional Scripts
|
### tmux
|
||||||
|
|
||||||
### File Sharing Scripts
|
Prefix is <kbd>Ctrl</kbd> + <kbd>f</kbd>.
|
||||||
|
|
||||||
- `sharefile {filename}`: Upload file to 0x0.st and return unique identifier
|
| Key | Action |
|
||||||
- `getfile {id}`: Retrieve file from 0x0.st
|
| ------------------------- | --------------------------- |
|
||||||
|
| `Prefix + g` | Split horizontal |
|
||||||
|
| `Prefix + v` | Split vertical |
|
||||||
|
| `Prefix + h/j/k/l` | Select pane |
|
||||||
|
| `Prefix + J/K` | Swap pane down/up |
|
||||||
|
| `Prefix + Ctrl + H/J/K/L` | Resize pane |
|
||||||
|
| `Prefix + 1-0` | Select window 1-10 |
|
||||||
|
| `Alt + 1-0` | Create window 1-10 |
|
||||||
|
| `Prefix + !/@ etc.` | Move pane to window 1-10 |
|
||||||
|
| `Prefix + w` | Choose window |
|
||||||
|
| `Prefix + q` | Kill pane |
|
||||||
|
| `Prefix + [` / `]` | Copy mode / Paste |
|
||||||
|
| `Prefix + r` | Refresh |
|
||||||
|
| `Prefix + R` | Reload config |
|
||||||
|
| `Prefix + Space` | Send prefix (nested tmux) |
|
||||||
|
| `Prefix + ?` | List keys |
|
||||||
|
| `Prefix + Ctrl + s` | Save session (resurrect) |
|
||||||
|
| `Prefix + Ctrl + r` | Restore session (resurrect) |
|
||||||
|
|
||||||
Note: These scripts interact with https://0x0.st for file sharing.
|
## Colorscheme
|
||||||
|
|
||||||
|
All colors are defined in a single file: `colors.conf`. A generator script produces format-specific fragments that each config sources or imports.
|
||||||
|
|
||||||
|
To change the theme:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. Edit the palette
|
||||||
|
vim ~/scripts/colors.conf
|
||||||
|
|
||||||
|
# 2. Regenerate fragments
|
||||||
|
~/scripts/sh/gen-colors
|
||||||
|
|
||||||
|
# 3. Reload your WM / bar
|
||||||
|
hyprctl reload # Hyprland
|
||||||
|
swaymsg reload # Sway
|
||||||
|
killall waybar && waybar & # Waybar
|
||||||
|
```
|
||||||
|
|
||||||
|
Generated files (committed so configs work after a fresh clone):
|
||||||
|
|
||||||
|
| File | Format | Used by |
|
||||||
|
| ------------------- | --------------------------- | ---------------------------- |
|
||||||
|
| `hypr/colors.conf` | `$color_name = rgb(HEXVAL)` | `hyprland.conf` (source) |
|
||||||
|
| `sway/colors.conf` | `set $color_name #HEXVAL` | `swayconfig` (include) |
|
||||||
|
| `i3/colors.conf` | `set $color_name #HEXVAL` | `i3config` (include) |
|
||||||
|
| `waybar/colors.css` | CSS custom properties | `waybar/style.css` (@import) |
|
||||||
|
| `wofi/colors.css` | CSS custom properties | `wofi/style.css` (@import) |
|
||||||
|
|
||||||
|
## Scripts
|
||||||
|
|
||||||
|
All in `sh/`, added to `$PATH` via the shell config above.
|
||||||
|
|
||||||
|
| Script | Description |
|
||||||
|
| ------------------ | --------------------------------------------- |
|
||||||
|
| `sharefile <file>` | Upload a file to 0x0.st |
|
||||||
|
| `getfile <id>` | Download a file from 0x0.st |
|
||||||
|
| `waybar-history` | Stream the last zsh history entry to waybar |
|
||||||
|
| `gen-colors` | Regenerate color fragments from `colors.conf` |
|
||||||
|
|||||||
@@ -1,23 +1,3 @@
|
|||||||
# $HOME/.config/alacritty/alacritty.toml
|
|
||||||
# by Rito Ghosh 2023-10-06
|
|
||||||
|
|
||||||
# Alacritty now uses TOML formatting for its config files.
|
|
||||||
# This is a simple example.
|
|
||||||
|
|
||||||
# There are the specification here: https://github.com/alacritty/alacritty/blob/master/extra/man/alacritty.5.scd
|
|
||||||
# It is not obvious how it translates to TOML. But it is extremely straightforward.
|
|
||||||
|
|
||||||
# example: WINDOW, COLORS, etc. are tables, and should be represented as [window], [colors], respectively.
|
|
||||||
# specifics of variables go under them. e.g.- look under "dynamic_padding" under-
|
|
||||||
# https://github.com/alacritty/alacritty/blob/master/extra/man/alacritty.5.scd#window
|
|
||||||
# write `dynamic_padding = true` (without backticks -`) under the table [window]
|
|
||||||
# for variables with multiple values, use "dotted keys". Like setting `padding.x = 5` under [window].
|
|
||||||
# This is simple. If not clear, do several trials and errors.
|
|
||||||
|
|
||||||
# Below is my initial set-up. The TOML homepage (https://toml.io/en/v1.0.0) was very helpful in figuring this out.
|
|
||||||
# I put the file alacritty.toml in $HOME/.config/alacritty. However it can be kept anywhere among the places mentioned in
|
|
||||||
# https://github.com/alacritty/alacritty/tree/master#configuration
|
|
||||||
|
|
||||||
[window]
|
[window]
|
||||||
|
|
||||||
opacity = 0.5
|
opacity = 0.5
|
||||||
|
|||||||
BIN
background.png
Normal file
BIN
background.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.1 MiB |
10
colors.conf
Normal file
10
colors.conf
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
primary=#55ffbb
|
||||||
|
secondary=#62ff57
|
||||||
|
tertiary=#ff579a
|
||||||
|
bg=#1b110e
|
||||||
|
bg_secondary=#000000
|
||||||
|
alt_bg=#024942
|
||||||
|
gray=#222222
|
||||||
|
text_light=#F0F0F0
|
||||||
|
text_dark=#1b110e
|
||||||
|
white=#FFFFFF
|
||||||
385
hypr/base.conf
Normal file
385
hypr/base.conf
Normal file
@@ -0,0 +1,385 @@
|
|||||||
|
# Hyprland config - converted from i3 config by Adam French
|
||||||
|
# https://wiki.hyprland.org/Configuring/
|
||||||
|
|
||||||
|
|
||||||
|
################
|
||||||
|
### MONITORS ###
|
||||||
|
################
|
||||||
|
|
||||||
|
monitor=,preferred,auto,1
|
||||||
|
|
||||||
|
|
||||||
|
###################
|
||||||
|
### MY PROGRAMS ###
|
||||||
|
###################
|
||||||
|
|
||||||
|
$terminal = kitty
|
||||||
|
$fileManager = kitty -e ranger
|
||||||
|
$menu = wofi --show drun
|
||||||
|
|
||||||
|
###################
|
||||||
|
### CURSOR ###
|
||||||
|
###################
|
||||||
|
|
||||||
|
env = XCURSOR_THEME,Miku Cursor
|
||||||
|
env = XCURSOR_SIZE,48
|
||||||
|
env = HYPRCURSOR_SIZE,48
|
||||||
|
|
||||||
|
#################
|
||||||
|
### AUTOSTART ###
|
||||||
|
#################
|
||||||
|
|
||||||
|
exec-once = dex -a
|
||||||
|
exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
|
||||||
|
exec-once = wl-paste --watch cliphist store
|
||||||
|
exec-once = dunst
|
||||||
|
exec-once = hypridle
|
||||||
|
exec-once = hyprpaper
|
||||||
|
exec-once = hyprsunset
|
||||||
|
exec-once = waterfox
|
||||||
|
exec-once = waybar
|
||||||
|
# NOTE: ff-theme-util and fix_xcursor are X11-specific; drop or find Wayland equivalents
|
||||||
|
# Caps<->Escape swap is handled below via input config
|
||||||
|
|
||||||
|
|
||||||
|
#############################
|
||||||
|
### ENVIRONMENT VARIABLES ###
|
||||||
|
#############################
|
||||||
|
|
||||||
|
env = XDG_SESSION_TYPE,wayland
|
||||||
|
# NVIDIA-specific env vars — uncomment if running on nvidia:
|
||||||
|
# env = LIBVA_DRIVER_NAME,nvidia
|
||||||
|
# env = GBM_BACKEND,nvidia-drm
|
||||||
|
# env = __GLX_VENDOR_LIBRARY_NAME,nvidia
|
||||||
|
# env = WLR_NO_HARDWARE_CURSORS,1
|
||||||
|
|
||||||
|
#####################
|
||||||
|
### LOOK AND FEEL ###
|
||||||
|
#####################
|
||||||
|
|
||||||
|
general {
|
||||||
|
gaps_in = 5 # inner gaps (i3: gaps inner 10 → split between two sides)
|
||||||
|
gaps_out = 0 # outer gaps (i3: gaps outer 0)
|
||||||
|
border_size = 1
|
||||||
|
|
||||||
|
col.active_border = $color_primary
|
||||||
|
col.inactive_border = $color_gray
|
||||||
|
|
||||||
|
resize_on_border = true
|
||||||
|
allow_tearing = false
|
||||||
|
layout = dwindle
|
||||||
|
}
|
||||||
|
|
||||||
|
xwayland {
|
||||||
|
force_zero_scaling = true
|
||||||
|
}
|
||||||
|
|
||||||
|
decoration {
|
||||||
|
rounding = 0
|
||||||
|
|
||||||
|
active_opacity = 1.0
|
||||||
|
inactive_opacity = 1.0
|
||||||
|
|
||||||
|
shadow {
|
||||||
|
enabled = false
|
||||||
|
}
|
||||||
|
|
||||||
|
blur {
|
||||||
|
enabled = true
|
||||||
|
size = 3
|
||||||
|
passes = 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
animations {
|
||||||
|
enabled = true
|
||||||
|
|
||||||
|
bezier = myBezier, 0.645, 0.045, 0.355, 1.000
|
||||||
|
|
||||||
|
animation = windows, 1, 7, myBezier
|
||||||
|
animation = windowsOut, 1, 7, myBezier
|
||||||
|
animation = border, 1, 10, myBezier
|
||||||
|
animation = borderangle, 1, 8, myBezier
|
||||||
|
animation = fade, 1, 7, myBezier
|
||||||
|
animation = workspaces, 1, 6, myBezier
|
||||||
|
}
|
||||||
|
|
||||||
|
master {
|
||||||
|
new_status = slave
|
||||||
|
}
|
||||||
|
|
||||||
|
misc {
|
||||||
|
force_default_wallpaper = 0
|
||||||
|
disable_hyprland_logo = true
|
||||||
|
focus_on_activate = true # replaces i3's "for_window [urgent=latest] focus"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#############
|
||||||
|
### INPUT ###
|
||||||
|
#############
|
||||||
|
|
||||||
|
input {
|
||||||
|
kb_layout = gb
|
||||||
|
kb_options = caps:swapescape,grp:alt_shift_toggle
|
||||||
|
follow_mouse = 1
|
||||||
|
sensitivity = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
###################
|
||||||
|
### KEYBINDINGS ###
|
||||||
|
###################
|
||||||
|
|
||||||
|
$mod = SUPER
|
||||||
|
|
||||||
|
# Terminal
|
||||||
|
bind = $mod, Return, exec, $terminal
|
||||||
|
|
||||||
|
# Kill focused window
|
||||||
|
bind = $mod SHIFT, Q, killactive
|
||||||
|
|
||||||
|
# Launcher (wofi replaces dmenu)
|
||||||
|
bind = $mod, D, exec, $menu
|
||||||
|
|
||||||
|
# Pavucontrol
|
||||||
|
bind = $mod CTRL, M, exec, hyprpwcenter
|
||||||
|
|
||||||
|
# Applications
|
||||||
|
bind = $mod, F2, exec, waterfox
|
||||||
|
bind = $mod, F3, exec, $fileManager
|
||||||
|
bind = $mod SHIFT, F3, exec, pcmanfm
|
||||||
|
bind = $mod, F5, exec, kitty -e mocp
|
||||||
|
|
||||||
|
# Toggle window layout between master and dwindle
|
||||||
|
bind = $mod, T, exec, hyprctl keyword general:layout "$([ "$(hyprctl getoption general:layout -j | grep -o '"str": "[^"]*"' | cut -d'"' -f4)" = "master" ] && echo dwindle || echo master)"
|
||||||
|
|
||||||
|
# Restart dunst
|
||||||
|
bind = $mod SHIFT, D, exec, killall dunst && notify-send 'restart dunst'
|
||||||
|
|
||||||
|
# Screenshots (flameshot on Wayland needs -g flag or use grim/slurp instead)
|
||||||
|
bind = , Print, exec, flameshot gui
|
||||||
|
bind = $mod, Print, exec, grim -g "$(slurp)" - | wl-copy
|
||||||
|
bind = $mod SHIFT, Print, exec, grim -g "$(slurp)" ~/screenshot.png
|
||||||
|
|
||||||
|
# Xkill equivalent
|
||||||
|
bind = $mod CTRL, X, exec, hyprctl kill
|
||||||
|
|
||||||
|
# Lock screen
|
||||||
|
bind = $mod, 9, exec, hyprlock # replaces blurlock; configure hyprlock separately
|
||||||
|
|
||||||
|
# Toggle bar visibility (waybar)
|
||||||
|
bind = $mod, M, exec, pkill -SIGUSR1 waybar
|
||||||
|
|
||||||
|
# Reload Hyprland config
|
||||||
|
bind = $mod SHIFT, C, exec, hyprctl reload
|
||||||
|
|
||||||
|
# Exit Hyprland
|
||||||
|
bind = $mod SHIFT, E, exec, hyprshutdown
|
||||||
|
|
||||||
|
# System mode (replaces i3's $mode_system)
|
||||||
|
# Simple submap equivalent:
|
||||||
|
bind = $mod, 0, exec, notify-send -t 5000 "System Mode" "(l)ock (s)uspend (h)ibernate\n(r)eboot (Shift+s) shutdown (e)xit\n\nReturn/Escape to cancel"
|
||||||
|
bind = $mod, 0, submap, system
|
||||||
|
submap = system
|
||||||
|
bind = , L, exec, hyprlock
|
||||||
|
bind = , L, submap, reset
|
||||||
|
bind = , S, exec, systemctl suspend
|
||||||
|
bind = , S, submap, reset
|
||||||
|
bind = , H, exec, systemctl hibernate
|
||||||
|
bind = , H, submap, reset
|
||||||
|
bind = , R, exec, systemctl reboot
|
||||||
|
bind = , R, submap, reset
|
||||||
|
bind = SHIFT, S, exec, systemctl poweroff
|
||||||
|
bind = SHIFT, S, submap, reset
|
||||||
|
bind = , E, exec, hyprshutdown
|
||||||
|
bind = , E, submap, reset
|
||||||
|
bind = , Return, exec, dunstctl close
|
||||||
|
bind = , Return, submap, reset
|
||||||
|
bind = , Escape, exec, dunstctl close
|
||||||
|
bind = , Escape, submap, reset
|
||||||
|
submap = reset
|
||||||
|
|
||||||
|
# --- FOCUS ---
|
||||||
|
bind = $mod, H, movefocus, l
|
||||||
|
bind = $mod, J, movefocus, d
|
||||||
|
bind = $mod, K, movefocus, u
|
||||||
|
bind = $mod, L, movefocus, r
|
||||||
|
bind = $mod, left, movefocus, l
|
||||||
|
bind = $mod, down, movefocus, d
|
||||||
|
bind = $mod, up, movefocus, u
|
||||||
|
bind = $mod, right, movefocus, r
|
||||||
|
|
||||||
|
# --- MOVE WINDOWS ---
|
||||||
|
bind = $mod SHIFT, H, movewindow, l
|
||||||
|
bind = $mod SHIFT, J, movewindow, d
|
||||||
|
bind = $mod SHIFT, K, movewindow, u
|
||||||
|
bind = $mod SHIFT, L, movewindow, r
|
||||||
|
bind = $mod SHIFT, left, movewindow, l
|
||||||
|
bind = $mod SHIFT, down, movewindow, d
|
||||||
|
bind = $mod SHIFT, up, movewindow, u
|
||||||
|
bind = $mod SHIFT, right, movewindow, r
|
||||||
|
|
||||||
|
# --- FLOATING ---
|
||||||
|
bind = $mod SHIFT, space, togglefloating
|
||||||
|
bind = $mod, space, focusurgentorlast # approximate focus mode_toggle
|
||||||
|
|
||||||
|
# --- FULLSCREEN ---
|
||||||
|
bind = $mod, F, fullscreen, 0
|
||||||
|
|
||||||
|
# --- SPLIT / LAYOUT ---
|
||||||
|
# Hyprland uses dwindle preselect or master swaps; approximate below:
|
||||||
|
bind = $mod, G, layoutmsg, orientationleft # tile horizontally
|
||||||
|
bind = $mod, V, layoutmsg, orientationbottom # tile vertically
|
||||||
|
bind = $mod, E, layoutmsg, togglesplit
|
||||||
|
|
||||||
|
bind = $mod, w, exec, hyprctl dispatch togglegroup
|
||||||
|
|
||||||
|
# --- STICKY (pin floating window) ---
|
||||||
|
bind = $mod SHIFT, S, pin
|
||||||
|
|
||||||
|
# --- SCRATCHPAD ---
|
||||||
|
bind = $mod SHIFT, minus, movetoworkspacesilent, special:scratchpad
|
||||||
|
bind = $mod, minus, togglespecialworkspace, scratchpad
|
||||||
|
|
||||||
|
# --- WORKSPACE NAVIGATION ---
|
||||||
|
bind = $mod CTRL, right, workspace, +1
|
||||||
|
bind = $mod CTRL, left, workspace, -1
|
||||||
|
bind = $mod, B, workspace, previous # back_and_forth
|
||||||
|
|
||||||
|
# Switch to workspace
|
||||||
|
bind = $mod, 1, workspace, 1
|
||||||
|
bind = $mod, 2, workspace, 2
|
||||||
|
bind = $mod, 3, workspace, 3
|
||||||
|
bind = $mod, 4, workspace, 4
|
||||||
|
bind = $mod, 5, workspace, 5
|
||||||
|
bind = $mod, 6, workspace, 6
|
||||||
|
bind = $mod, 7, workspace, 7
|
||||||
|
bind = $mod, 8, workspace, 8
|
||||||
|
|
||||||
|
# Move container to workspace (silent = don't follow)
|
||||||
|
bind = $mod CTRL, 1, movetoworkspacesilent, 1
|
||||||
|
bind = $mod CTRL, 2, movetoworkspacesilent, 2
|
||||||
|
bind = $mod CTRL, 3, movetoworkspacesilent, 3
|
||||||
|
bind = $mod CTRL, 4, movetoworkspacesilent, 4
|
||||||
|
bind = $mod CTRL, 5, movetoworkspacesilent, 5
|
||||||
|
bind = $mod CTRL, 6, movetoworkspacesilent, 6
|
||||||
|
bind = $mod CTRL, 7, movetoworkspacesilent, 7
|
||||||
|
bind = $mod CTRL, 8, movetoworkspacesilent, 8
|
||||||
|
|
||||||
|
# Move to workspace AND follow (replaces $mod+Shift+N in i3)
|
||||||
|
bind = $mod SHIFT, 1, movetoworkspace, 1
|
||||||
|
bind = $mod SHIFT, 2, movetoworkspace, 2
|
||||||
|
bind = $mod SHIFT, 3, movetoworkspace, 3
|
||||||
|
bind = $mod SHIFT, 4, movetoworkspace, 4
|
||||||
|
bind = $mod SHIFT, 5, movetoworkspace, 5
|
||||||
|
bind = $mod SHIFT, 6, movetoworkspace, 6
|
||||||
|
bind = $mod SHIFT, 7, movetoworkspace, 7
|
||||||
|
bind = $mod SHIFT, 8, movetoworkspace, 8
|
||||||
|
|
||||||
|
# --- RESIZE SUBMAP ---
|
||||||
|
bind = $mod, R, submap, resize
|
||||||
|
submap = resize
|
||||||
|
binde = , H, resizeactive, -20 0
|
||||||
|
binde = , J, resizeactive, 0 20
|
||||||
|
binde = , K, resizeactive, 0 -20
|
||||||
|
binde = , L, resizeactive, 20 0
|
||||||
|
binde = , left, resizeactive, -30 0
|
||||||
|
binde = , down, resizeactive, 0 30
|
||||||
|
binde = , up, resizeactive, 0 -30
|
||||||
|
binde = , right, resizeactive, 30 0
|
||||||
|
bind = , Return, submap, reset
|
||||||
|
bind = , Escape, submap, reset
|
||||||
|
submap = reset
|
||||||
|
|
||||||
|
# --- MOUSE BINDS ---
|
||||||
|
bindm = $mod, mouse:272, movewindow # mod+LMB drag to move floating
|
||||||
|
bindm = $mod, mouse:273, resizewindow # mod+RMB drag to resize
|
||||||
|
|
||||||
|
# --- AUDIO ---
|
||||||
|
bindel = , XF86AudioRaiseVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ +10%
|
||||||
|
bindel = , XF86AudioLowerVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ -10%
|
||||||
|
bindl = , XF86AudioMute, exec, pactl set-sink-mute @DEFAULT_SINK@ toggle
|
||||||
|
bindl = , XF86AudioMicMute, exec, pactl set-source-mute @DEFAULT_SOURCE@ toggle
|
||||||
|
|
||||||
|
# --- BRIGHTNESS ---
|
||||||
|
bindel = , XF86MonBrightnessUp, exec, brightnessctl set +5%
|
||||||
|
bindel = , XF86MonBrightnessDown, exec, brightnessctl set 5%-
|
||||||
|
|
||||||
|
|
||||||
|
####################
|
||||||
|
### WINDOW RULES ###
|
||||||
|
####################
|
||||||
|
|
||||||
|
windowrule {
|
||||||
|
name = Surfshark
|
||||||
|
match:class = ^(Surfshark)$
|
||||||
|
workspace = 8 silent
|
||||||
|
tile = on
|
||||||
|
}
|
||||||
|
|
||||||
|
windowrule {
|
||||||
|
name = hyprpwcenter
|
||||||
|
match:class = ^(hyprpwcenter)$
|
||||||
|
float = on
|
||||||
|
}
|
||||||
|
|
||||||
|
windowrule {
|
||||||
|
name = Lxappearance
|
||||||
|
match:class = ^(Lxappearance)$
|
||||||
|
float = on
|
||||||
|
}
|
||||||
|
|
||||||
|
windowrule {
|
||||||
|
name = PiP
|
||||||
|
match:title = ^(Picture-in-Picture)$
|
||||||
|
float = off
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
##############################
|
||||||
|
### WORKSPACE NAMES / ICONS ##
|
||||||
|
##############################
|
||||||
|
|
||||||
|
# Hyprland workspace names (replaces i3 set $ws variables)
|
||||||
|
# These are used by waybar's workspaces module — configure names there.
|
||||||
|
# ws1=ツ ws2=ಠ‿ಠ ws3=◕‿◕ ws4=ʘ‿ʘ
|
||||||
|
# ws5=˘◡˘ ws6=◠‿◠ ws7=ᵔᴥᵔ ws8=æ
|
||||||
|
|
||||||
|
|
||||||
|
##############################
|
||||||
|
### COLORS (reference only) ##
|
||||||
|
##############################
|
||||||
|
|
||||||
|
# Your theme palette for use in waybar / wofi CSS:
|
||||||
|
# Background: #1b110e
|
||||||
|
# BG Secondary: #000000
|
||||||
|
# Primary: #55ffbb (green)
|
||||||
|
# Secondary: #62ff57 (lime)
|
||||||
|
# Tertiary: #ff579a (pink)
|
||||||
|
# Quaternary: #024942 (dark teal)
|
||||||
|
# Link: #222222
|
||||||
|
|
||||||
|
|
||||||
|
#####################################
|
||||||
|
### NOTES ON MIGRATING FROM i3 ##
|
||||||
|
#####################################
|
||||||
|
# 1. BAR: Replace i3bar+i3status with waybar. Copy the color palette above
|
||||||
|
# into your waybar style.css. Workspace icon names go in waybar config.
|
||||||
|
#
|
||||||
|
# 2. LOCK: Replace blurlock with hyprlock. Configure in ~/.config/hypr/hyprlock.conf
|
||||||
|
# Replace xautolock with hypridle in ~/.config/hypr/hypridle.conf (30 min timeout).
|
||||||
|
#
|
||||||
|
# 3. LAUNCHER: wofi replaces dmenu. Style with ~/.config/wofi/style.css using
|
||||||
|
# your palette colors above.
|
||||||
|
#
|
||||||
|
# 4. SCREENSHOTS: grim + slurp replace i3-scrot on Wayland. flameshot also
|
||||||
|
# works with the -g flag on some setups.
|
||||||
|
#
|
||||||
|
# 5. STACKING layout: Set layout = master above (or dwindle). Hyprland has no
|
||||||
|
# direct stacking mode; use floating or master layout as closest equivalent.
|
||||||
|
#
|
||||||
|
# 6. GAP MODE: Replace the i3-gaps mode with direct hyprctl commands if needed:
|
||||||
|
# hyprctl keyword general:gaps_in 10
|
||||||
|
#
|
||||||
|
# 7. BORDER TOGGLE ($mod+u/y/n): Use windowrulev2 or hyprctl at runtime:
|
||||||
|
# hyprctl keyword general:border_size 0
|
||||||
4
hypr/build.sh
Executable file
4
hypr/build.sh
Executable file
@@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
cd "$(dirname "$0")"
|
||||||
|
cat colors.conf base.conf >hyprland.conf
|
||||||
@@ -1,6 +1,17 @@
|
|||||||
|
$color_primary = rgb(55ffbb)
|
||||||
|
$color_secondary = rgb(62ff57)
|
||||||
|
$color_tertiary = rgb(ff579a)
|
||||||
|
$color_bg = rgb(1b110e)
|
||||||
|
$color_bg_secondary = rgb(000000)
|
||||||
|
$color_alt_bg = rgb(024942)
|
||||||
|
$color_gray = rgb(222222)
|
||||||
|
$color_text_light = rgb(F0F0F0)
|
||||||
|
$color_text_dark = rgb(1b110e)
|
||||||
|
$color_white = rgb(FFFFFF)
|
||||||
# Hyprland config - converted from i3 config by Adam French
|
# Hyprland config - converted from i3 config by Adam French
|
||||||
# https://wiki.hyprland.org/Configuring/
|
# https://wiki.hyprland.org/Configuring/
|
||||||
|
|
||||||
|
|
||||||
################
|
################
|
||||||
### MONITORS ###
|
### MONITORS ###
|
||||||
################
|
################
|
||||||
@@ -14,31 +25,29 @@ monitor=,preferred,auto,1
|
|||||||
|
|
||||||
$terminal = kitty
|
$terminal = kitty
|
||||||
$fileManager = kitty -e ranger
|
$fileManager = kitty -e ranger
|
||||||
$menu = wofi --show run
|
$menu = wofi --show drun
|
||||||
|
|
||||||
###################
|
###################
|
||||||
### CURSOR ###
|
### CURSOR ###
|
||||||
###################
|
###################
|
||||||
|
|
||||||
env = XCURSOR_THEME,Miku Cursor
|
env = XCURSOR_THEME,Miku Cursor
|
||||||
env = XCURSOR_SIZE,32
|
env = XCURSOR_SIZE,48
|
||||||
|
env = HYPRCURSOR_SIZE,48
|
||||||
|
|
||||||
#################
|
#################
|
||||||
### AUTOSTART ###
|
### AUTOSTART ###
|
||||||
#################
|
#################
|
||||||
|
|
||||||
exec-once = fcitx5
|
exec-once = dex -a
|
||||||
exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
|
exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
|
||||||
exec-once = nm-applet
|
exec-once = wl-paste --watch cliphist store
|
||||||
exec-once = clipit
|
|
||||||
exec-once = dunst
|
exec-once = dunst
|
||||||
exec-once = hypridle # replaces xautolock; configure lock in hypridle.conf
|
exec-once = hypridle
|
||||||
|
exec-once = hyprpaper
|
||||||
|
exec-once = hyprsunset
|
||||||
exec-once = waterfox
|
exec-once = waterfox
|
||||||
exec-once = steam
|
|
||||||
exec-once = surfshark
|
|
||||||
exec-once = waybar
|
exec-once = waybar
|
||||||
# exec-once = volctl # may need a Wayland-compatible tray volume tool
|
|
||||||
# exec-once = pamac-tray # check for Wayland support
|
|
||||||
# NOTE: ff-theme-util and fix_xcursor are X11-specific; drop or find Wayland equivalents
|
# NOTE: ff-theme-util and fix_xcursor are X11-specific; drop or find Wayland equivalents
|
||||||
# Caps<->Escape swap is handled below via input config
|
# Caps<->Escape swap is handled below via input config
|
||||||
|
|
||||||
@@ -47,9 +56,12 @@ exec-once = waybar
|
|||||||
### ENVIRONMENT VARIABLES ###
|
### ENVIRONMENT VARIABLES ###
|
||||||
#############################
|
#############################
|
||||||
|
|
||||||
env = XCURSOR_SIZE,24
|
env = XDG_SESSION_TYPE,wayland
|
||||||
env = HYPRCURSOR_SIZE,24
|
# NVIDIA-specific env vars — uncomment if running on nvidia:
|
||||||
|
# env = LIBVA_DRIVER_NAME,nvidia
|
||||||
|
# env = GBM_BACKEND,nvidia-drm
|
||||||
|
# env = __GLX_VENDOR_LIBRARY_NAME,nvidia
|
||||||
|
# env = WLR_NO_HARDWARE_CURSORS,1
|
||||||
|
|
||||||
#####################
|
#####################
|
||||||
### LOOK AND FEEL ###
|
### LOOK AND FEEL ###
|
||||||
@@ -60,12 +72,16 @@ general {
|
|||||||
gaps_out = 0 # outer gaps (i3: gaps outer 0)
|
gaps_out = 0 # outer gaps (i3: gaps outer 0)
|
||||||
border_size = 1
|
border_size = 1
|
||||||
|
|
||||||
col.active_border = rgb(C792EA)
|
col.active_border = $color_primary
|
||||||
col.inactive_border = rgb(6272A4)
|
col.inactive_border = $color_gray
|
||||||
|
|
||||||
resize_on_border = true
|
resize_on_border = true
|
||||||
allow_tearing = false
|
allow_tearing = false
|
||||||
layout = master # closest to i3's stacking default; use dwindle for split
|
layout = dwindle
|
||||||
|
}
|
||||||
|
|
||||||
|
xwayland {
|
||||||
|
force_zero_scaling = true
|
||||||
}
|
}
|
||||||
|
|
||||||
decoration {
|
decoration {
|
||||||
@@ -88,14 +104,14 @@ decoration {
|
|||||||
animations {
|
animations {
|
||||||
enabled = true
|
enabled = true
|
||||||
|
|
||||||
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
|
bezier = myBezier, 0.645, 0.045, 0.355, 1.000
|
||||||
|
|
||||||
animation = windows, 1, 7, myBezier
|
animation = windows, 1, 7, myBezier
|
||||||
animation = windowsOut, 1, 7, default, popin 80%
|
animation = windowsOut, 1, 7, myBezier
|
||||||
animation = border, 1, 10, default
|
animation = border, 1, 10, myBezier
|
||||||
animation = borderangle, 1, 8, default
|
animation = borderangle, 1, 8, myBezier
|
||||||
animation = fade, 1, 7, default
|
animation = fade, 1, 7, myBezier
|
||||||
animation = workspaces, 1, 6, default
|
animation = workspaces, 1, 6, myBezier
|
||||||
}
|
}
|
||||||
|
|
||||||
master {
|
master {
|
||||||
@@ -115,7 +131,7 @@ misc {
|
|||||||
|
|
||||||
input {
|
input {
|
||||||
kb_layout = gb
|
kb_layout = gb
|
||||||
kb_options = caps:swapescape
|
kb_options = caps:swapescape,grp:alt_shift_toggle
|
||||||
follow_mouse = 1
|
follow_mouse = 1
|
||||||
sensitivity = 0
|
sensitivity = 0
|
||||||
}
|
}
|
||||||
@@ -133,11 +149,10 @@ bind = $mod, Return, exec, $terminal
|
|||||||
bind = $mod SHIFT, Q, killactive
|
bind = $mod SHIFT, Q, killactive
|
||||||
|
|
||||||
# Launcher (wofi replaces dmenu)
|
# Launcher (wofi replaces dmenu)
|
||||||
bind = $mod, D, exec, wofi --show run --style ~/scripts/wofi/wofi_style.css
|
bind = $mod, D, exec, $menu
|
||||||
# To approximate your dmenu colors, configure wofi's style.css
|
|
||||||
|
|
||||||
# Pavucontrol
|
# Pavucontrol
|
||||||
bind = $mod CTRL, M, exec, pavucontrol
|
bind = $mod CTRL, M, exec, hyprpwcenter
|
||||||
|
|
||||||
# Applications
|
# Applications
|
||||||
bind = $mod, F2, exec, waterfox
|
bind = $mod, F2, exec, waterfox
|
||||||
@@ -145,9 +160,8 @@ bind = $mod, F3, exec, $fileManager
|
|||||||
bind = $mod SHIFT, F3, exec, pcmanfm
|
bind = $mod SHIFT, F3, exec, pcmanfm
|
||||||
bind = $mod, F5, exec, kitty -e mocp
|
bind = $mod, F5, exec, kitty -e mocp
|
||||||
|
|
||||||
# Compositor toggle (picom → hyprland manages its own compositor; these are no-ops)
|
# Toggle window layout between master and dwindle
|
||||||
# bind = $mod, T, exec, pkill picom
|
bind = $mod, T, exec, hyprctl keyword general:layout "$([ "$(hyprctl getoption general:layout -j | grep -o '"str": "[^"]*"' | cut -d'"' -f4)" = "master" ] && echo dwindle || echo master)"
|
||||||
# bind = $mod CTRL, T, exec, picom -b
|
|
||||||
|
|
||||||
# Restart dunst
|
# Restart dunst
|
||||||
bind = $mod SHIFT, D, exec, killall dunst && notify-send 'restart dunst'
|
bind = $mod SHIFT, D, exec, killall dunst && notify-send 'restart dunst'
|
||||||
@@ -170,10 +184,11 @@ bind = $mod, M, exec, pkill -SIGUSR1 waybar
|
|||||||
bind = $mod SHIFT, C, exec, hyprctl reload
|
bind = $mod SHIFT, C, exec, hyprctl reload
|
||||||
|
|
||||||
# Exit Hyprland
|
# Exit Hyprland
|
||||||
bind = $mod SHIFT, E, exec, hyprctl dispatch exit
|
bind = $mod SHIFT, E, exec, hyprshutdown
|
||||||
|
|
||||||
# System mode (replaces i3's $mode_system)
|
# System mode (replaces i3's $mode_system)
|
||||||
# Simple submap equivalent:
|
# Simple submap equivalent:
|
||||||
|
bind = $mod, 0, exec, notify-send -t 5000 "System Mode" "(l)ock (s)uspend (h)ibernate\n(r)eboot (Shift+s) shutdown (e)xit\n\nReturn/Escape to cancel"
|
||||||
bind = $mod, 0, submap, system
|
bind = $mod, 0, submap, system
|
||||||
submap = system
|
submap = system
|
||||||
bind = , L, exec, hyprlock
|
bind = , L, exec, hyprlock
|
||||||
@@ -186,9 +201,11 @@ bind = , R, exec, systemctl reboot
|
|||||||
bind = , R, submap, reset
|
bind = , R, submap, reset
|
||||||
bind = SHIFT, S, exec, systemctl poweroff
|
bind = SHIFT, S, exec, systemctl poweroff
|
||||||
bind = SHIFT, S, submap, reset
|
bind = SHIFT, S, submap, reset
|
||||||
bind = , E, exec, hyprctl dispatch exit
|
bind = , E, exec, hyprshutdown
|
||||||
bind = , E, submap, reset
|
bind = , E, submap, reset
|
||||||
|
bind = , Return, exec, dunstctl close
|
||||||
bind = , Return, submap, reset
|
bind = , Return, submap, reset
|
||||||
|
bind = , Escape, exec, dunstctl close
|
||||||
bind = , Escape, submap, reset
|
bind = , Escape, submap, reset
|
||||||
submap = reset
|
submap = reset
|
||||||
|
|
||||||
@@ -225,6 +242,8 @@ bind = $mod, G, layoutmsg, orientationleft # tile horizontally
|
|||||||
bind = $mod, V, layoutmsg, orientationbottom # tile vertically
|
bind = $mod, V, layoutmsg, orientationbottom # tile vertically
|
||||||
bind = $mod, E, layoutmsg, togglesplit
|
bind = $mod, E, layoutmsg, togglesplit
|
||||||
|
|
||||||
|
bind = $mod, w, exec, hyprctl dispatch togglegroup
|
||||||
|
|
||||||
# --- STICKY (pin floating window) ---
|
# --- STICKY (pin floating window) ---
|
||||||
bind = $mod SHIFT, S, pin
|
bind = $mod SHIFT, S, pin
|
||||||
|
|
||||||
@@ -308,6 +327,24 @@ windowrule {
|
|||||||
tile = on
|
tile = on
|
||||||
}
|
}
|
||||||
|
|
||||||
|
windowrule {
|
||||||
|
name = hyprpwcenter
|
||||||
|
match:class = ^(hyprpwcenter)$
|
||||||
|
float = on
|
||||||
|
}
|
||||||
|
|
||||||
|
windowrule {
|
||||||
|
name = Lxappearance
|
||||||
|
match:class = ^(Lxappearance)$
|
||||||
|
float = on
|
||||||
|
}
|
||||||
|
|
||||||
|
windowrule {
|
||||||
|
name = PiP
|
||||||
|
match:title = ^(Picture-in-Picture)$
|
||||||
|
float = off
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
##############################
|
##############################
|
||||||
### WORKSPACE NAMES / ICONS ##
|
### WORKSPACE NAMES / ICONS ##
|
||||||
@@ -324,12 +361,13 @@ windowrule {
|
|||||||
##############################
|
##############################
|
||||||
|
|
||||||
# Your theme palette for use in waybar / wofi CSS:
|
# Your theme palette for use in waybar / wofi CSS:
|
||||||
# Background: #1A1B2F
|
# Background: #1b110e
|
||||||
# Accent 1: #C792EA (purple)
|
# BG Secondary: #000000
|
||||||
# Accent 2: #FF79C6 (pink)
|
# Primary: #55ffbb (green)
|
||||||
# Accent 3: #82AAFF (blue)
|
# Secondary: #62ff57 (lime)
|
||||||
# Inactive: #6272A4
|
# Tertiary: #ff579a (pink)
|
||||||
# Surface: #2A2B3D
|
# Quaternary: #024942 (dark teal)
|
||||||
|
# Link: #222222
|
||||||
|
|
||||||
|
|
||||||
#####################################
|
#####################################
|
||||||
3
hypr/hyprpaper.conf
Normal file
3
hypr/hyprpaper.conf
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
preload = ~/scripts/background.png
|
||||||
|
wallpaper = DP-1,~/scripts/background.png
|
||||||
|
wallpaper = DP-2,~/scripts/background.png
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
# This is my personal personal i3 config file! - Adam French
|
# This is my personal personal i3 config file! - Adam French
|
||||||
|
|
||||||
|
|
||||||
# WORKSPACE NAMES -----------------------------------
|
# WORKSPACE NAMES -----------------------------------
|
||||||
set $ws1 1:ツ
|
set $ws1 1:ツ
|
||||||
set $ws2 2:ಠ‿ಠ
|
set $ws2 2:ಠ‿ಠ
|
||||||
@@ -20,7 +21,7 @@ exec --no-startup-id nm-applet
|
|||||||
exec --no-startup-id pamac-tray
|
exec --no-startup-id pamac-tray
|
||||||
exec --no-startup-id clipit
|
exec --no-startup-id clipit
|
||||||
exec --no-startup-id dunst
|
exec --no-startup-id dunst
|
||||||
exec --no-startup-id xautolock -time 30 -locker blurlock
|
exec --no-startup-id xautolock -time 90 -locker blurlock
|
||||||
# exec --no-startup-id nitrogen ~/scripts/background.jpg
|
# exec --no-startup-id nitrogen ~/scripts/background.jpg
|
||||||
# exec --no-startup-id blueman-applet
|
# exec --no-startup-id blueman-applet
|
||||||
# exec_always --no-startup-id sbxkb
|
# exec_always --no-startup-id sbxkb
|
||||||
@@ -30,8 +31,6 @@ exec --no-startup-id waterfox
|
|||||||
exec --no-startup-id steam
|
exec --no-startup-id steam
|
||||||
exec --no-startup-id surfshark
|
exec --no-startup-id surfshark
|
||||||
|
|
||||||
exec_always --no-startup-id ff-theme-util
|
|
||||||
exec_always --no-startup-id fix_xcursor
|
|
||||||
|
|
||||||
# PACTL BINDINGS ---------------------------------------
|
# PACTL BINDINGS ---------------------------------------
|
||||||
|
|
||||||
@@ -74,7 +73,7 @@ bindsym $mod+Return exec kitty
|
|||||||
# kill focused window
|
# kill focused window
|
||||||
bindsym $mod+Shift+q kill
|
bindsym $mod+Shift+q kill
|
||||||
# start program launcher
|
# start program launcher
|
||||||
bindsym $mod+d exec --no-startup-id dmenu_run -nb '#1A1B2F' -sf '#FF79C6' -sb '#1A1B2F' -nf '#c792EA'
|
bindsym $mod+d exec --no-startup-id dmenu_run -nb '$color_bg' -sf '$color_tertiary' -sb '$color_bg' -nf '$color_primary'
|
||||||
|
|
||||||
bindsym $mod+Ctrl+m exec pavucontrol
|
bindsym $mod+Ctrl+m exec pavucontrol
|
||||||
|
|
||||||
@@ -195,7 +194,7 @@ bindsym $mod+Shift+8 move container to workspace $ws8;
|
|||||||
bindsym $mod+Shift+c reload
|
bindsym $mod+Shift+c reload
|
||||||
|
|
||||||
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
|
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
|
||||||
bindsym $mod+Shift+r exec swaymsg reload
|
bindsym $mod+Shift+r restart
|
||||||
|
|
||||||
# exit i3 (logs you out of your X session)
|
# exit i3 (logs you out of your X session)
|
||||||
bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'"
|
bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'"
|
||||||
@@ -341,14 +340,14 @@ bar {
|
|||||||
strip_workspace_numbers yes
|
strip_workspace_numbers yes
|
||||||
|
|
||||||
colors {
|
colors {
|
||||||
background #1A1B2F
|
background $color_bg
|
||||||
statusline #C792EA
|
statusline $color_primary
|
||||||
separator #FF79C6
|
separator $color_tertiary
|
||||||
focused_workspace #C792EA #1A1B2F #FFFFFF
|
focused_workspace $color_primary $color_bg $color_white
|
||||||
active_workspace #C792EA #2A2B3D #FFFFFF
|
active_workspace $color_primary $color_alt_bg $color_white
|
||||||
inactive_workspace #6272A4 #2A2B3D #FFFFFF
|
inactive_workspace $color_gray $color_alt_bg $color_white
|
||||||
binding_mode #FF79C6 #1A1B2F #FFFFFF
|
binding_mode $color_tertiary $color_bg $color_white
|
||||||
urgent_workspace #FF5370 #2A2B3D #FFFFFF
|
urgent_workspace $color_tertiary $color_alt_bg $color_white
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -356,14 +355,14 @@ bar {
|
|||||||
bindsym $mod+m bar mode toggle
|
bindsym $mod+m bar mode toggle
|
||||||
|
|
||||||
# Theme colors
|
# Theme colors
|
||||||
# class border backgr. text indic. child_border
|
# class border backgr. text indic.
|
||||||
client.focused #82AAFF #C792EA #FFFFFF #C792EA
|
client.focused $color_secondary $color_primary $color_text_dark $color_primary
|
||||||
client.focused_inactive #C792EA #2A2B3D #F0F0F0 #FF79C6
|
client.focused_inactive $color_primary $color_alt_bg $color_text_light $color_tertiary
|
||||||
client.unfocused #6272A4 #2A2B3D #F0F0F0 #C792EA
|
client.unfocused $color_gray $color_alt_bg $color_text_light $color_primary
|
||||||
client.urgent #FF5370 #2A2B3D #FFFFFF #FF79C6
|
client.urgent $color_tertiary $color_alt_bg $color_white $color_tertiary
|
||||||
client.placeholder #1A1B2F #1A1B2F #FFFFFF #1A1B2F
|
client.placeholder $color_bg $color_bg $color_white $color_bg
|
||||||
|
|
||||||
client.background #1A1B2F
|
client.background $color_bg
|
||||||
|
|
||||||
# Set inner/outer gaps
|
# Set inner/outer gaps
|
||||||
gaps inner 10
|
gaps inner 10
|
||||||
4
i3/build.sh
Executable file
4
i3/build.sh
Executable file
@@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
cd "$(dirname "$0")"
|
||||||
|
cat colors.conf base > config
|
||||||
384
i3/config
Normal file
384
i3/config
Normal file
@@ -0,0 +1,384 @@
|
|||||||
|
set $color_primary #55ffbb
|
||||||
|
set $color_secondary #62ff57
|
||||||
|
set $color_tertiary #ff579a
|
||||||
|
set $color_bg #1b110e
|
||||||
|
set $color_bg_secondary #000000
|
||||||
|
set $color_alt_bg #024942
|
||||||
|
set $color_gray #222222
|
||||||
|
set $color_text_light #F0F0F0
|
||||||
|
set $color_text_dark #1b110e
|
||||||
|
set $color_white #FFFFFF
|
||||||
|
# This is my personal personal i3 config file! - Adam French
|
||||||
|
|
||||||
|
|
||||||
|
# WORKSPACE NAMES -----------------------------------
|
||||||
|
set $ws1 1:ツ
|
||||||
|
set $ws2 2:ಠ‿ಠ
|
||||||
|
set $ws3 3:◕‿◕
|
||||||
|
set $ws4 4:ʘ‿ʘ
|
||||||
|
set $ws5 5:˘◡˘
|
||||||
|
set $ws6 6:◠‿◠
|
||||||
|
set $ws7 7:ᵔᴥᵔ
|
||||||
|
set $ws8 8:æ
|
||||||
|
|
||||||
|
# DEFAULT STARTUP --------------------------------------
|
||||||
|
exec --no-startup-id setxkbmap -option caps:swapescape
|
||||||
|
exec --no-startup-id volctl
|
||||||
|
exec --no-startup-id fcitx5
|
||||||
|
exec --no-startup-id /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
|
||||||
|
# exec --no-startup-id manjaro-hello
|
||||||
|
exec --no-startup-id nm-applet
|
||||||
|
exec --no-startup-id pamac-tray
|
||||||
|
exec --no-startup-id clipit
|
||||||
|
exec --no-startup-id dunst
|
||||||
|
exec --no-startup-id xautolock -time 90 -locker blurlock
|
||||||
|
# exec --no-startup-id nitrogen ~/scripts/background.jpg
|
||||||
|
# exec --no-startup-id blueman-applet
|
||||||
|
# exec_always --no-startup-id sbxkb
|
||||||
|
# exec --no-startup-id start_conky_maia
|
||||||
|
# exec --no-startup-id start_conky_green
|
||||||
|
exec --no-startup-id waterfox
|
||||||
|
exec --no-startup-id steam
|
||||||
|
exec --no-startup-id surfshark
|
||||||
|
|
||||||
|
|
||||||
|
# PACTL BINDINGS ---------------------------------------
|
||||||
|
|
||||||
|
set $refresh_i3status killall -SIGUSR1 i3status
|
||||||
|
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10%
|
||||||
|
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10%
|
||||||
|
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle
|
||||||
|
bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle
|
||||||
|
|
||||||
|
# BRIGHTNESSCTL BINDINGS ----------------------------------
|
||||||
|
|
||||||
|
bindsym XF86MonBrightnessUp exec --no-startup-id brightnessctl set +5%
|
||||||
|
bindsym XF86MonBrightnessDown exec --no-startup-id brightnessctl set 5%-
|
||||||
|
|
||||||
|
# DEFAULT WINDOW LAYOUT -------------------------------------
|
||||||
|
|
||||||
|
# set default desktop layout (default is tiling)
|
||||||
|
workspace_layout stacking
|
||||||
|
# Configure border style <normal|1pixel|pixel xx|none|pixel>
|
||||||
|
default_border pixel 1
|
||||||
|
default_floating_border normal
|
||||||
|
# Hide borders
|
||||||
|
hide_edge_borders none
|
||||||
|
|
||||||
|
# KEYBINDS --------------------------------------------------
|
||||||
|
|
||||||
|
# Set mod key (Mod1=<Alt>, Mod4=<Super>)
|
||||||
|
set $mod Mod4
|
||||||
|
|
||||||
|
# change borders
|
||||||
|
bindsym $mod+u border none
|
||||||
|
bindsym $mod+y border pixel 1
|
||||||
|
bindsym $mod+n border normal
|
||||||
|
|
||||||
|
# Use Mouse+$mod to drag floating windows
|
||||||
|
floating_modifier $mod
|
||||||
|
|
||||||
|
# start a terminal
|
||||||
|
bindsym $mod+Return exec kitty
|
||||||
|
# kill focused window
|
||||||
|
bindsym $mod+Shift+q kill
|
||||||
|
# start program launcher
|
||||||
|
bindsym $mod+d exec --no-startup-id dmenu_run -nb '$color_bg' -sf '$color_tertiary' -sb '$color_bg' -nf '$color_primary'
|
||||||
|
|
||||||
|
bindsym $mod+Ctrl+m exec pavucontrol
|
||||||
|
|
||||||
|
# Start Applications
|
||||||
|
bindsym $mod+F2 exec waterfox
|
||||||
|
# bindsym $mod+F3 exec pcmanfm
|
||||||
|
bindsym $mod+F3 exec kitty -e ranger
|
||||||
|
bindsym $mod+Shift+F3 exec pcmanfm_pkexec
|
||||||
|
bindsym $mod+F5 exec kitty -e 'mocp'
|
||||||
|
bindsym $mod+t exec --no-startup-id pkill picom
|
||||||
|
bindsym $mod+Ctrl+t exec --no-startup-id picom -b
|
||||||
|
bindsym $mod+Shift+d --release exec "killall dunst; exec notify-send 'restart dunst'"
|
||||||
|
bindsym Print exec flameshot gui
|
||||||
|
bindsym $mod+Print --release exec --no-startup-id i3-scrot -w
|
||||||
|
bindsym $mod+Shift+Print --release exec --no-startup-id i3-scrot -s
|
||||||
|
# bindsym $mod+Shift+h exec xdg-open /usr/share/doc/manjaro/i3_help.pdf
|
||||||
|
bindsym $mod+Ctrl+x --release exec --no-startup-id xkill
|
||||||
|
|
||||||
|
focus_follows_mouse yes
|
||||||
|
|
||||||
|
# change focus
|
||||||
|
bindsym $mod+h focus left
|
||||||
|
bindsym $mod+j focus down
|
||||||
|
bindsym $mod+k focus up
|
||||||
|
bindsym $mod+l focus right
|
||||||
|
|
||||||
|
# alternatively, you can use the cursor keys:
|
||||||
|
bindsym $mod+Left focus left
|
||||||
|
bindsym $mod+Down focus down
|
||||||
|
bindsym $mod+Up focus up
|
||||||
|
bindsym $mod+Right focus right
|
||||||
|
|
||||||
|
# move focused window
|
||||||
|
bindsym $mod+Shift+h move left
|
||||||
|
bindsym $mod+Shift+j move down
|
||||||
|
bindsym $mod+Shift+k move up
|
||||||
|
bindsym $mod+Shift+l move right
|
||||||
|
|
||||||
|
# alternatively, you can use the cursor keys:
|
||||||
|
bindsym $mod+Shift+Left move left
|
||||||
|
bindsym $mod+Shift+Down move down
|
||||||
|
bindsym $mod+Shift+Up move up
|
||||||
|
bindsym $mod+Shift+Right move right
|
||||||
|
|
||||||
|
# workspace back and forth (with/without active container)
|
||||||
|
workspace_auto_back_and_forth yes
|
||||||
|
bindsym $mod+b workspace back_and_forth
|
||||||
|
bindsym $mod+Shift+b move container to workspace back_and_forth; workspace back_and_forth
|
||||||
|
|
||||||
|
# split orientation
|
||||||
|
bindsym $mod+g split h;exec notify-send 'tile horizontally'
|
||||||
|
bindsym $mod+v split v;exec notify-send 'tile vertically'
|
||||||
|
bindsym $mod+q split toggle
|
||||||
|
|
||||||
|
# toggle fullscreen mode for the focused container
|
||||||
|
bindsym $mod+f fullscreen toggle
|
||||||
|
|
||||||
|
# change container layout (stacked, tabbed, toggle split)
|
||||||
|
bindsym $mod+s layout stacking;exec notify-send 'layout stacking'
|
||||||
|
bindsym $mod+w layout tabbed; exec notify-send 'layout tabbed'
|
||||||
|
bindsym $mod+e layout toggle split; exec notify-send 'layout split'
|
||||||
|
|
||||||
|
# toggle tiling / floating
|
||||||
|
bindsym $mod+Shift+space floating toggle
|
||||||
|
|
||||||
|
# change focus between tiling / floating windows
|
||||||
|
bindsym $mod+space focus mode_toggle
|
||||||
|
|
||||||
|
# toggle sticky
|
||||||
|
bindsym $mod+Shift+s sticky toggle
|
||||||
|
|
||||||
|
# focus the parent container
|
||||||
|
bindsym $mod+a focus parent
|
||||||
|
|
||||||
|
# move the currently focused window to the scratchpad
|
||||||
|
bindsym $mod+Shift+minus move scratchpad
|
||||||
|
|
||||||
|
# Show the next scratchpad window or hide the focused scratchpad window.
|
||||||
|
# If there are multiple scratchpad windows, this command cycles through them.
|
||||||
|
bindsym $mod+minus scratchpad show
|
||||||
|
|
||||||
|
#navigate workspaces next / previous
|
||||||
|
bindsym $mod+Ctrl+Right workspace next
|
||||||
|
bindsym $mod+Ctrl+Left workspace prev
|
||||||
|
|
||||||
|
|
||||||
|
# switch to workspace
|
||||||
|
bindsym $mod+1 workspace $ws1
|
||||||
|
bindsym $mod+2 workspace $ws2
|
||||||
|
bindsym $mod+3 workspace $ws3
|
||||||
|
bindsym $mod+4 workspace $ws4
|
||||||
|
bindsym $mod+5 workspace $ws5
|
||||||
|
bindsym $mod+6 workspace $ws6
|
||||||
|
bindsym $mod+7 workspace $ws7
|
||||||
|
bindsym $mod+8 workspace $ws8
|
||||||
|
|
||||||
|
# Move focused container to workspace
|
||||||
|
bindsym $mod+Ctrl+1 move container to workspace $ws1
|
||||||
|
bindsym $mod+Ctrl+2 move container to workspace $ws2
|
||||||
|
bindsym $mod+Ctrl+3 move container to workspace $ws3
|
||||||
|
bindsym $mod+Ctrl+4 move container to workspace $ws4
|
||||||
|
bindsym $mod+Ctrl+5 move container to workspace $ws5
|
||||||
|
bindsym $mod+Ctrl+6 move container to workspace $ws6
|
||||||
|
bindsym $mod+Ctrl+7 move container to workspace $ws7
|
||||||
|
bindsym $mod+Ctrl+8 move container to workspace $ws8
|
||||||
|
|
||||||
|
# Move to workspace with focused container
|
||||||
|
bindsym $mod+Shift+1 move container to workspace $ws1;
|
||||||
|
bindsym $mod+Shift+2 move container to workspace $ws2;
|
||||||
|
bindsym $mod+Shift+3 move container to workspace $ws3;
|
||||||
|
bindsym $mod+Shift+4 move container to workspace $ws4;
|
||||||
|
bindsym $mod+Shift+5 move container to workspace $ws5;
|
||||||
|
bindsym $mod+Shift+6 move container to workspace $ws6;
|
||||||
|
bindsym $mod+Shift+7 move container to workspace $ws7;
|
||||||
|
bindsym $mod+Shift+8 move container to workspace $ws8;
|
||||||
|
|
||||||
|
# reload the configuration file
|
||||||
|
bindsym $mod+Shift+c reload
|
||||||
|
|
||||||
|
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
|
||||||
|
bindsym $mod+Shift+r restart
|
||||||
|
|
||||||
|
# exit i3 (logs you out of your X session)
|
||||||
|
bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'"
|
||||||
|
|
||||||
|
# Set shut down, restart and locking features
|
||||||
|
bindsym $mod+0 mode "$mode_system"
|
||||||
|
set $mode_system (l)ock, (e)xit, switch_(u)ser, (s)uspend, (h)ibernate, (r)eboot, (Shift+s)hutdown
|
||||||
|
mode "$mode_system" {
|
||||||
|
bindsym l exec --no-startup-id i3exit lock, mode "default"
|
||||||
|
bindsym s exec --no-startup-id i3exit suspend, mode "default"
|
||||||
|
bindsym u exec --no-startup-id i3exit switch_user, mode "default"
|
||||||
|
bindsym e exec --no-startup-id i3exit logout, mode "default"
|
||||||
|
bindsym h exec --no-startup-id i3exit hibernate, mode "default"
|
||||||
|
bindsym r exec --no-startup-id i3exit reboot, mode "default"
|
||||||
|
bindsym Shift+s exec --no-startup-id i3exit shutdown, mode "default"
|
||||||
|
|
||||||
|
# exit system mode: "Enter" or "Escape"
|
||||||
|
bindsym Return mode "default"
|
||||||
|
bindsym Escape mode "default"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Resize window (you can also use the mouse for that)
|
||||||
|
bindsym $mod+r mode "resize"
|
||||||
|
mode "resize" {
|
||||||
|
# These bindings trigger as soon as you enter the resize mode
|
||||||
|
# Pressing left will shrink the window’s width.
|
||||||
|
# Pressing right will grow the window’s width.
|
||||||
|
# Pressing up will shrink the window’s height.
|
||||||
|
# Pressing down will grow the window’s height.
|
||||||
|
bindsym h resize shrink width 5 px or 5 ppt
|
||||||
|
bindsym j resize grow height 5 px or 5 ppt
|
||||||
|
bindsym k resize shrink height 5 px or 5 ppt
|
||||||
|
bindsym l resize grow width 5 px or 5 ppt
|
||||||
|
|
||||||
|
# same bindings, but for the arrow keys
|
||||||
|
bindsym Left resize shrink width 10 px or 10 ppt
|
||||||
|
bindsym Down resize grow height 10 px or 10 ppt
|
||||||
|
bindsym Up resize shrink height 10 px or 10 ppt
|
||||||
|
bindsym Right resize grow width 10 px or 10 ppt
|
||||||
|
|
||||||
|
# exit resize mode: Enter or Escape
|
||||||
|
bindsym Return mode "default"
|
||||||
|
bindsym Escape mode "default"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Press $mod+Shift+g to enter the gap mode. Choose o or i for modifying outer/inner gaps. Press one of + / - (in-/decrement for current workspace) or 0 (remove gaps for current workspace). If you also press Shift with these keys, the change will be global for all workspaces.
|
||||||
|
set $mode_gaps Gaps: (o) outer, (i) inner
|
||||||
|
set $mode_gaps_outer Outer Gaps: +|-|0 (local), Shift + +|-|0 (global)
|
||||||
|
set $mode_gaps_inner Inner Gaps: +|-|0 (local), Shift + +|-|0 (global)
|
||||||
|
bindsym $mod+Shift+g mode "$mode_gaps"
|
||||||
|
|
||||||
|
mode "$mode_gaps" {
|
||||||
|
bindsym o mode "$mode_gaps_outer"
|
||||||
|
bindsym i mode "$mode_gaps_inner"
|
||||||
|
bindsym Return mode "default"
|
||||||
|
bindsym Escape mode "default"
|
||||||
|
}
|
||||||
|
|
||||||
|
mode "$mode_gaps_inner" {
|
||||||
|
bindsym plus gaps inner current plus 5
|
||||||
|
bindsym minus gaps inner current minus 5
|
||||||
|
bindsym 0 gaps inner current set 0
|
||||||
|
|
||||||
|
bindsym Shift+plus gaps inner all plus 5
|
||||||
|
bindsym Shift+minus gaps inner all minus 5
|
||||||
|
bindsym Shift+0 gaps inner all set 0
|
||||||
|
|
||||||
|
bindsym Return mode "default"
|
||||||
|
bindsym Escape mode "default"
|
||||||
|
}
|
||||||
|
|
||||||
|
mode "$mode_gaps_outer" {
|
||||||
|
bindsym plus gaps outer current plus 5
|
||||||
|
bindsym minus gaps outer current minus 5
|
||||||
|
bindsym 0 gaps outer current set 0
|
||||||
|
|
||||||
|
bindsym Shift+plus gaps outer all plus 5
|
||||||
|
bindsym Shift+minus gaps outer all minus 5
|
||||||
|
bindsym Shift+0 gaps outer all set 0
|
||||||
|
|
||||||
|
bindsym Return mode "default"
|
||||||
|
bindsym Escape mode "default"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Lock screen
|
||||||
|
bindsym $mod+9 exec --no-startup-id blurlock
|
||||||
|
# APPLICATION WORKSPACES ----------------------------------------------------
|
||||||
|
assign [class="Surfshark"] $ws8
|
||||||
|
# assign [class="zed"] $ws1
|
||||||
|
# assign [class="gimp"] $ws2
|
||||||
|
# assign [class="Pale moon"] $ws2
|
||||||
|
# assign [class="Pcmanfm"] $ws3
|
||||||
|
# assign [class="Skype"] $ws5
|
||||||
|
|
||||||
|
# APPLICATION WINDOW MODES --------------------------------------------------
|
||||||
|
for_window [title="Picture-in-Picture"] floating disable border pixel 0
|
||||||
|
|
||||||
|
for_window [title="alsamixer"] floating enable border pixel 1
|
||||||
|
for_window [class="calamares"] floating enable border normal
|
||||||
|
for_window [class="Clipgrab"] floating enable
|
||||||
|
for_window [title="File Transfer*"] floating enable
|
||||||
|
for_window [class="fpakman"] floating enable
|
||||||
|
for_window [class="Galculator"] floating enable border pixel 1
|
||||||
|
for_window [class="GParted"] floating enable border normal
|
||||||
|
for_window [title="i3_help"] floating enable sticky enable border normal
|
||||||
|
for_window [class="Lightdm-settings"] floating enable
|
||||||
|
for_window [class="Lxappearance"] floating enable sticky enable border normal
|
||||||
|
for_window [class="Manjaro-hello"] floating enable
|
||||||
|
for_window [class="Manjaro Settings Manager"] floating enable border normal
|
||||||
|
for_window [title="MuseScore: Play Panel"] floating enable
|
||||||
|
for_window [class="Nitrogen"] floating enable sticky enable border normal
|
||||||
|
for_window [class="Oblogout"] fullscreen enable
|
||||||
|
for_window [class="octopi"] floating enable
|
||||||
|
for_window [title="About Pale Moon"] floating enable
|
||||||
|
for_window [class="Pamac-manager"] floating enable
|
||||||
|
for_window [class="Pavucontrol"] floating enable
|
||||||
|
for_window [class="qt5ct"] floating enable sticky enable border normal
|
||||||
|
for_window [class="Qtconfig-qt4"] floating enable sticky enable border normal
|
||||||
|
for_window [class="Simple-scan"] floating enable border normal
|
||||||
|
for_window [class="(?i)System-config-printer.py"] floating enable border normal
|
||||||
|
for_window [class="Skype"] floating enable border normal
|
||||||
|
for_window [class="Timeset-gui"] floating enable border normal
|
||||||
|
for_window [class="(?i)virtualbox"] floating enable border normal
|
||||||
|
for_window [class="Xfburn"] floating enable
|
||||||
|
|
||||||
|
# switch to workspace with urgent window automatically
|
||||||
|
for_window [urgent=latest] focus
|
||||||
|
|
||||||
|
# AESTETICS ----------------------------------------------------------------
|
||||||
|
|
||||||
|
# Start i3bar to display a workspace bar (plus the system information i3status if available)
|
||||||
|
bar {
|
||||||
|
#status_command i3blocks -c ~/scripts/i3blocks.conf
|
||||||
|
status_command i3status
|
||||||
|
position bottom
|
||||||
|
|
||||||
|
tray_output primary
|
||||||
|
|
||||||
|
bindsym button4 nop
|
||||||
|
bindsym button5 nop
|
||||||
|
font xft:URWGothic-Book 11
|
||||||
|
strip_workspace_numbers yes
|
||||||
|
|
||||||
|
colors {
|
||||||
|
background $color_bg
|
||||||
|
statusline $color_primary
|
||||||
|
separator $color_tertiary
|
||||||
|
focused_workspace $color_primary $color_bg $color_white
|
||||||
|
active_workspace $color_primary $color_alt_bg $color_white
|
||||||
|
inactive_workspace $color_gray $color_alt_bg $color_white
|
||||||
|
binding_mode $color_tertiary $color_bg $color_white
|
||||||
|
urgent_workspace $color_tertiary $color_alt_bg $color_white
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# hide/unhide i3status bar
|
||||||
|
bindsym $mod+m bar mode toggle
|
||||||
|
|
||||||
|
# Theme colors
|
||||||
|
# class border backgr. text indic.
|
||||||
|
client.focused $color_secondary $color_primary $color_text_dark $color_primary
|
||||||
|
client.focused_inactive $color_primary $color_alt_bg $color_text_light $color_tertiary
|
||||||
|
client.unfocused $color_gray $color_alt_bg $color_text_light $color_primary
|
||||||
|
client.urgent $color_tertiary $color_alt_bg $color_white $color_tertiary
|
||||||
|
client.placeholder $color_bg $color_bg $color_white $color_bg
|
||||||
|
|
||||||
|
client.background $color_bg
|
||||||
|
|
||||||
|
# Set inner/outer gaps
|
||||||
|
gaps inner 10
|
||||||
|
gaps outer 0
|
||||||
|
smart_gaps on
|
||||||
|
|
||||||
|
# Smart borders (draw borders around container only if it is not the only container on this workspace)
|
||||||
|
# on|no_gaps (on=always activate and no_gaps=only activate if the gap size to the edge of the screen is 0)
|
||||||
|
smart_borders on
|
||||||
178
install.sh
Executable file
178
install.sh
Executable file
@@ -0,0 +1,178 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
SCRIPTS_DIR="$HOME/scripts"
|
||||||
|
CONFIG_DIR="$HOME/.config"
|
||||||
|
BACKUP_DIR=""
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
echo "Usage: $(basename "$0") [OPTIONS] <target>..."
|
||||||
|
echo
|
||||||
|
echo "Targets:"
|
||||||
|
echo " hyprland Hyprland + waybar + wofi"
|
||||||
|
echo " sway Sway + waybar + wofi"
|
||||||
|
echo " i3 i3 + i3blocks + i3status"
|
||||||
|
echo " cursor Miku cursor theme"
|
||||||
|
echo " shell Source bashrc/zshrc and add sh/ to PATH"
|
||||||
|
echo " alacritty Add import to alacritty.toml"
|
||||||
|
echo " tmux Source tmux.conf"
|
||||||
|
echo " nvim Neovim (LazyVim) config"
|
||||||
|
echo " vim Source vimrc"
|
||||||
|
echo " all Everything (uses hyprland as WM)"
|
||||||
|
echo
|
||||||
|
echo "Options:"
|
||||||
|
echo " -h, --help Show this help"
|
||||||
|
}
|
||||||
|
|
||||||
|
backup() {
|
||||||
|
local path="$1"
|
||||||
|
if [ -e "$path" ] || [ -L "$path" ]; then
|
||||||
|
if [ -z "$BACKUP_DIR" ]; then
|
||||||
|
BACKUP_DIR="$SCRIPTS_DIR/backups/$(date +%Y%m%d_%H%M%S)"
|
||||||
|
mkdir -p "$BACKUP_DIR"
|
||||||
|
echo "Backing up existing configs to $BACKUP_DIR"
|
||||||
|
fi
|
||||||
|
local name
|
||||||
|
name=$(basename "$path")
|
||||||
|
cp -a "$path" "$BACKUP_DIR/$name"
|
||||||
|
echo " Backed up $path"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
link() {
|
||||||
|
local src="$1" dest="$2"
|
||||||
|
backup "$dest"
|
||||||
|
rm -rf "$dest"
|
||||||
|
ln -sf "$src" "$dest"
|
||||||
|
echo " Linked $dest -> $src"
|
||||||
|
}
|
||||||
|
|
||||||
|
append_if_missing() {
|
||||||
|
local file="$1" line="$2"
|
||||||
|
if [ ! -f "$file" ]; then
|
||||||
|
echo "$line" >"$file"
|
||||||
|
echo " Created $file with: $line"
|
||||||
|
elif ! grep -qF "$line" "$file"; then
|
||||||
|
echo "" >>"$file"
|
||||||
|
echo "$line" >>"$file"
|
||||||
|
echo " Appended to $file: $line"
|
||||||
|
else
|
||||||
|
echo " Already in $file: $line"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
install_hyprland() {
|
||||||
|
echo "Installing Hyprland configs..."
|
||||||
|
"$SCRIPTS_DIR/hypr/build.sh"
|
||||||
|
"$SCRIPTS_DIR/waybar/build.sh"
|
||||||
|
"$SCRIPTS_DIR/wofi/build.sh"
|
||||||
|
mkdir -p "$CONFIG_DIR"
|
||||||
|
link "$SCRIPTS_DIR/hypr" "$CONFIG_DIR/hypr"
|
||||||
|
link "$SCRIPTS_DIR/waybar" "$CONFIG_DIR/waybar"
|
||||||
|
link "$SCRIPTS_DIR/wofi" "$CONFIG_DIR/wofi"
|
||||||
|
}
|
||||||
|
|
||||||
|
install_sway() {
|
||||||
|
echo "Installing Sway configs..."
|
||||||
|
"$SCRIPTS_DIR/sway/build.sh"
|
||||||
|
"$SCRIPTS_DIR/waybar/build.sh"
|
||||||
|
"$SCRIPTS_DIR/wofi/build.sh"
|
||||||
|
mkdir -p "$CONFIG_DIR"
|
||||||
|
link "$SCRIPTS_DIR/sway" "$CONFIG_DIR/sway"
|
||||||
|
link "$SCRIPTS_DIR/waybar" "$CONFIG_DIR/waybar"
|
||||||
|
link "$SCRIPTS_DIR/wofi" "$CONFIG_DIR/wofi"
|
||||||
|
}
|
||||||
|
|
||||||
|
install_i3() {
|
||||||
|
echo "Installing i3 configs..."
|
||||||
|
"$SCRIPTS_DIR/i3/build.sh"
|
||||||
|
mkdir -p "$CONFIG_DIR"
|
||||||
|
link "$SCRIPTS_DIR/i3" "$CONFIG_DIR/i3"
|
||||||
|
link "$SCRIPTS_DIR/i3blocks" "$CONFIG_DIR/i3blocks"
|
||||||
|
link "$SCRIPTS_DIR/i3status" "$CONFIG_DIR/i3status"
|
||||||
|
}
|
||||||
|
|
||||||
|
install_cursor() {
|
||||||
|
echo "Installing cursor theme..."
|
||||||
|
mkdir -p "$HOME/.local/share/icons"
|
||||||
|
link "$SCRIPTS_DIR/hatsune-miku-windows-linux-cursors/miku-cursor-linux" "$HOME/.local/share/icons/Miku Cursor"
|
||||||
|
}
|
||||||
|
|
||||||
|
install_shell() {
|
||||||
|
echo "Installing shell configs..."
|
||||||
|
if [ -f "$HOME/.zshrc" ] || [[ "$SHELL" == *zsh* ]]; then
|
||||||
|
append_if_missing "$HOME/.zshrc" "source ~/scripts/zshrc"
|
||||||
|
append_if_missing "$HOME/.zshrc" 'export PATH="$HOME/scripts/sh:$PATH"'
|
||||||
|
fi
|
||||||
|
if [ -f "$HOME/.bashrc" ] || [[ "$SHELL" == *bash* ]]; then
|
||||||
|
append_if_missing "$HOME/.bashrc" "source ~/scripts/bashrc"
|
||||||
|
append_if_missing "$HOME/.bashrc" 'export PATH="$HOME/scripts/sh:$PATH"'
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
install_alacritty() {
|
||||||
|
echo "Installing Alacritty config..."
|
||||||
|
local conf="$CONFIG_DIR/alacritty/alacritty.toml"
|
||||||
|
mkdir -p "$CONFIG_DIR/alacritty"
|
||||||
|
append_if_missing "$conf" 'import = ["~/scripts/alacritty.toml"]'
|
||||||
|
}
|
||||||
|
|
||||||
|
install_tmux() {
|
||||||
|
echo "Installing tmux config..."
|
||||||
|
append_if_missing "$HOME/.tmux.conf" "source ~/scripts/tmux.conf"
|
||||||
|
}
|
||||||
|
|
||||||
|
install_nvim() {
|
||||||
|
echo "Installing Neovim config..."
|
||||||
|
mkdir -p "$CONFIG_DIR"
|
||||||
|
link "$SCRIPTS_DIR/nvim" "$CONFIG_DIR/nvim"
|
||||||
|
}
|
||||||
|
|
||||||
|
install_vim() {
|
||||||
|
echo "Installing vim config..."
|
||||||
|
append_if_missing "$HOME/.vimrc" "source ~/scripts/vimrc"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ $# -eq 0 ]; then
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
targets=()
|
||||||
|
for arg in "$@"; do
|
||||||
|
case "$arg" in
|
||||||
|
-h | --help)
|
||||||
|
usage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
all) targets+=(hyprland cursor shell alacritty tmux nvim vim) ;;
|
||||||
|
*) targets+=("$arg") ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
"$SCRIPTS_DIR/sh/gen-colors"
|
||||||
|
|
||||||
|
for target in "${targets[@]}"; do
|
||||||
|
case "$target" in
|
||||||
|
hyprland) install_hyprland ;;
|
||||||
|
sway) install_sway ;;
|
||||||
|
i3) install_i3 ;;
|
||||||
|
cursor) install_cursor ;;
|
||||||
|
shell) install_shell ;;
|
||||||
|
alacritty) install_alacritty ;;
|
||||||
|
tmux) install_tmux ;;
|
||||||
|
nvim) install_nvim ;;
|
||||||
|
vim) install_vim ;;
|
||||||
|
*)
|
||||||
|
echo "Unknown target: $target"
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -n "$BACKUP_DIR" ]; then
|
||||||
|
echo
|
||||||
|
echo "Backups saved to: $BACKUP_DIR"
|
||||||
|
fi
|
||||||
|
echo "Done!"
|
||||||
9
nvim/.gitignore
vendored
Normal file
9
nvim/.gitignore
vendored
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
tt.*
|
||||||
|
.tests
|
||||||
|
doc/tags
|
||||||
|
lazy-lock.json
|
||||||
|
debug
|
||||||
|
.repro
|
||||||
|
foo.*
|
||||||
|
*.log
|
||||||
|
data
|
||||||
12
nvim/.luarc.json
Normal file
12
nvim/.luarc.json
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"runtime": {
|
||||||
|
"version": "LuaJIT"
|
||||||
|
},
|
||||||
|
"diagnostics": {
|
||||||
|
"globals": ["vim", "LazyVim", "Snacks"]
|
||||||
|
},
|
||||||
|
"workspace": {
|
||||||
|
"library": ["${3rd}/luv/library"],
|
||||||
|
"checkThirdParty": false
|
||||||
|
}
|
||||||
|
}
|
||||||
15
nvim/.neoconf.json
Normal file
15
nvim/.neoconf.json
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"neodev": {
|
||||||
|
"library": {
|
||||||
|
"enabled": true,
|
||||||
|
"plugins": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"neoconf": {
|
||||||
|
"plugins": {
|
||||||
|
"lua_ls": {
|
||||||
|
"enabled": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
201
nvim/LICENSE
Normal file
201
nvim/LICENSE
Normal file
@@ -0,0 +1,201 @@
|
|||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
18
nvim/README.md
Normal file
18
nvim/README.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# Personal Neovim Config
|
||||||
|
|
||||||
|
My personal Neovim configuration built on [LazyVim](https://github.com/LazyVim/LazyVim).
|
||||||
|
|
||||||
|
## Current Setup
|
||||||
|
|
||||||
|
- **Base**: LazyVim with Gruvbox colorscheme
|
||||||
|
- **AI**: Claude Code integration (`claudecode.nvim`)
|
||||||
|
- **UI**: Snacks dashboard (custom STP banner), Which-Key (helix preset)
|
||||||
|
- **Languages**: TypeScript, Vue, Python, Go, SQL, Tailwind, Docker
|
||||||
|
- **Extras**: mini-surround, Prettier formatting, git extras
|
||||||
|
|
||||||
|
## Suggested Plugins to Add
|
||||||
|
|
||||||
|
- **vim-fugitive** or **neogit** - deeper git workflow beyond LazyVim's built-in gitsigns
|
||||||
|
- **nvim-lint** - async linting beyond what LSP provides
|
||||||
|
- **oil.nvim** - file explorer that works like a buffer (edit filesystem like text)
|
||||||
|
- **zen-mode.nvim** - distraction-free writing/coding
|
||||||
2
nvim/init.lua
Normal file
2
nvim/init.lua
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
-- bootstrap lazy.nvim, LazyVim and your plugins
|
||||||
|
require("config.lazy")
|
||||||
21
nvim/lazyvim.json
Normal file
21
nvim/lazyvim.json
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"extras": [
|
||||||
|
"lazyvim.plugins.extras.coding.mini-surround",
|
||||||
|
"lazyvim.plugins.extras.dap.core",
|
||||||
|
"lazyvim.plugins.extras.dap.nlua",
|
||||||
|
"lazyvim.plugins.extras.formatting.prettier",
|
||||||
|
"lazyvim.plugins.extras.lang.docker",
|
||||||
|
"lazyvim.plugins.extras.lang.git",
|
||||||
|
"lazyvim.plugins.extras.lang.go",
|
||||||
|
"lazyvim.plugins.extras.lang.python",
|
||||||
|
"lazyvim.plugins.extras.lang.sql",
|
||||||
|
"lazyvim.plugins.extras.lang.tailwind",
|
||||||
|
"lazyvim.plugins.extras.lang.typescript",
|
||||||
|
"lazyvim.plugins.extras.lang.vue"
|
||||||
|
],
|
||||||
|
"install_version": 8,
|
||||||
|
"news": {
|
||||||
|
"NEWS.md": "11866"
|
||||||
|
},
|
||||||
|
"version": 8
|
||||||
|
}
|
||||||
17
nvim/lua/config/autocmds.lua
Normal file
17
nvim/lua/config/autocmds.lua
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
-- Autocmds are automatically loaded on the VeryLazy event
|
||||||
|
-- Default autocmds that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/autocmds.lua
|
||||||
|
--
|
||||||
|
-- Add any additional autocmds here
|
||||||
|
-- with `vim.api.nvim_create_autocmd`
|
||||||
|
--
|
||||||
|
-- Or remove existing autocmds by their group name (which is prefixed with `lazyvim_` for the defaults)
|
||||||
|
-- e.g. vim.api.nvim_del_augroup_by_name("lazyvim_wrap_spell")
|
||||||
|
|
||||||
|
-- When opening multiple files, tile them vertically (side by side)
|
||||||
|
vim.api.nvim_create_autocmd("VimEnter", {
|
||||||
|
callback = function()
|
||||||
|
if vim.fn.argc() == 2 then
|
||||||
|
vim.cmd("vertical ball")
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
15
nvim/lua/config/keymaps.lua
Normal file
15
nvim/lua/config/keymaps.lua
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
-- Keymaps are automatically loaded on the VeryLazy event
|
||||||
|
-- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua
|
||||||
|
-- Add any additional keymaps here
|
||||||
|
|
||||||
|
-- Terminal: open relative to current window (don't squash explorer) and smaller
|
||||||
|
local terminal_opts = {
|
||||||
|
cwd = LazyVim.root(),
|
||||||
|
win = { position = "bottom", height = 0.3, relative = "win" },
|
||||||
|
}
|
||||||
|
vim.keymap.set({ "n", "t" }, "<c-/>", function()
|
||||||
|
Snacks.terminal(nil, terminal_opts)
|
||||||
|
end, { desc = "Terminal (Root Dir)" })
|
||||||
|
vim.keymap.set({ "n", "t" }, "<c-_>", function()
|
||||||
|
Snacks.terminal(nil, terminal_opts)
|
||||||
|
end, { desc = "which_key_ignore" })
|
||||||
53
nvim/lua/config/lazy.lua
Normal file
53
nvim/lua/config/lazy.lua
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
|
||||||
|
if not (vim.uv or vim.loop).fs_stat(lazypath) then
|
||||||
|
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
|
||||||
|
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
|
||||||
|
if vim.v.shell_error ~= 0 then
|
||||||
|
vim.api.nvim_echo({
|
||||||
|
{ "Failed to clone lazy.nvim:\n", "ErrorMsg" },
|
||||||
|
{ out, "WarningMsg" },
|
||||||
|
{ "\nPress any key to exit..." },
|
||||||
|
}, true, {})
|
||||||
|
vim.fn.getchar()
|
||||||
|
os.exit(1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
vim.opt.rtp:prepend(lazypath)
|
||||||
|
|
||||||
|
require("lazy").setup({
|
||||||
|
spec = {
|
||||||
|
-- add LazyVim and import its plugins
|
||||||
|
{ "LazyVim/LazyVim", import = "lazyvim.plugins" },
|
||||||
|
-- import/override with your plugins
|
||||||
|
{ import = "plugins" },
|
||||||
|
},
|
||||||
|
defaults = {
|
||||||
|
-- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup.
|
||||||
|
-- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default.
|
||||||
|
lazy = false,
|
||||||
|
-- It's recommended to leave version=false for now, since a lot the plugin that support versioning,
|
||||||
|
-- have outdated releases, which may break your Neovim install.
|
||||||
|
version = false, -- always use the latest git commit
|
||||||
|
-- version = "*", -- try installing the latest stable version for plugins that support semver
|
||||||
|
},
|
||||||
|
install = { colorscheme = { "tokyonight", "habamax" } },
|
||||||
|
checker = {
|
||||||
|
enabled = true, -- check for plugin updates periodically
|
||||||
|
notify = false, -- notify on update
|
||||||
|
}, -- automatically check for plugin updates
|
||||||
|
performance = {
|
||||||
|
rtp = {
|
||||||
|
-- disable some rtp plugins
|
||||||
|
disabled_plugins = {
|
||||||
|
"gzip",
|
||||||
|
-- "matchit",
|
||||||
|
-- "matchparen",
|
||||||
|
-- "netrwPlugin",
|
||||||
|
"tarPlugin",
|
||||||
|
"tohtml",
|
||||||
|
"tutor",
|
||||||
|
"zipPlugin",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
6
nvim/lua/config/options.lua
Normal file
6
nvim/lua/config/options.lua
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
-- Options are automatically loaded before lazy.nvim startup
|
||||||
|
-- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua
|
||||||
|
-- Add any additional options here
|
||||||
|
vim.opt.tabstop = 4
|
||||||
|
vim.opt.shiftwidth = 4
|
||||||
|
vim.opt.softtabstop = 4
|
||||||
8
nvim/lua/plugins/autopairs.lua
Normal file
8
nvim/lua/plugins/autopairs.lua
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
"windwp/nvim-autopairs",
|
||||||
|
event = "InsertEnter",
|
||||||
|
opts = {},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
64
nvim/lua/plugins/claudecode.lua
Normal file
64
nvim/lua/plugins/claudecode.lua
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
"coder/claudecode.nvim",
|
||||||
|
dependencies = { "folke/snacks.nvim" },
|
||||||
|
opts = {
|
||||||
|
terminal = {
|
||||||
|
provider = "snacks",
|
||||||
|
snacks_win_opts = {
|
||||||
|
relative = "win",
|
||||||
|
position = "bottom",
|
||||||
|
height = 0.3,
|
||||||
|
split_width_percentage = 0.99,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
diff_opts = {
|
||||||
|
layout = "vertical",
|
||||||
|
open_in_new_tab = true,
|
||||||
|
keep_terminal_focus = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
keys = {
|
||||||
|
{ "<leader>a", "", desc = "+ai", mode = { "n", "v" } },
|
||||||
|
{ "<leader>ac", "<cmd>ClaudeCode<cr>", desc = "Toggle Claude" },
|
||||||
|
{ "<leader>af", "<cmd>ClaudeCodeFocus<cr>", desc = "Focus Claude" },
|
||||||
|
{ "<leader>ar", "<cmd>ClaudeCode --resume<cr>", desc = "Resume Claude" },
|
||||||
|
{ "<leader>aC", "<cmd>ClaudeCode --continue<cr>", desc = "Continue Claude" },
|
||||||
|
{ "<leader>ab", "<cmd>ClaudeCodeAdd %<cr>", desc = "Add current buffer" },
|
||||||
|
{ "<leader>as", "<cmd>ClaudeCodeSend<cr>", mode = "v", desc = "Send to Claude" },
|
||||||
|
{
|
||||||
|
"<leader>as",
|
||||||
|
"<cmd>ClaudeCodeTreeAdd<cr>",
|
||||||
|
desc = "Add file",
|
||||||
|
ft = { "NvimTree", "neo-tree", "oil" },
|
||||||
|
},
|
||||||
|
-- Diff management
|
||||||
|
{ "<leader>aa", "<cmd>ClaudeCodeDiffAccept<cr>", desc = "Accept diff" },
|
||||||
|
{ "<leader>ad", "<cmd>ClaudeCodeDiffDeny<cr>", desc = "Deny diff" },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
-- Disabled: unmaintained
|
||||||
|
{
|
||||||
|
"greggh/claude-code.nvim",
|
||||||
|
enabled = false,
|
||||||
|
dependencies = { "nvim-lua/plenary.nvim" },
|
||||||
|
opts = {
|
||||||
|
position = "float",
|
||||||
|
float_opts = {
|
||||||
|
relative = "win",
|
||||||
|
width = "80%",
|
||||||
|
height = "80%",
|
||||||
|
row = "center",
|
||||||
|
col = "center",
|
||||||
|
border = "rounded",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
keys = {
|
||||||
|
{ "<leader>a", nil, desc = "AI/Claude Code" },
|
||||||
|
{ "<leader>ac", "<cmd>ClaudeCode<cr>", desc = "Toggle Claude" },
|
||||||
|
{ "<leader>ar", "<cmd>ClaudeCodeResume<cr>", desc = "Resume Claude" },
|
||||||
|
{ "<leader>aC", "<cmd>ClaudeCodeContinue<cr>", desc = "Continue Claude" },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
37
nvim/lua/plugins/colorscheme.lua
Normal file
37
nvim/lua/plugins/colorscheme.lua
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
"nyoom-engineering/oxocarbon.nvim",
|
||||||
|
lazy = false,
|
||||||
|
priority = 1000,
|
||||||
|
config = function()
|
||||||
|
vim.opt.background = "dark"
|
||||||
|
vim.cmd("colorscheme oxocarbon")
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"sainnhe/sonokai",
|
||||||
|
opts = {
|
||||||
|
sonokai_style = "atlantis",
|
||||||
|
sonokai_transparent_background = 1,
|
||||||
|
sonokai_enable_italic = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"folke/tokyonight.nvim",
|
||||||
|
opts = {
|
||||||
|
style = "night",
|
||||||
|
transparent = true,
|
||||||
|
styles = { comments = { italic = true } },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"loctvl842/monokai-pro.nvim",
|
||||||
|
opts = {
|
||||||
|
transparent_background = true,
|
||||||
|
filter = "spectrum",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{ "scottmckendry/cyberdream.nvim" },
|
||||||
|
{ "maxmx03/fluoromachine.nvim" },
|
||||||
|
{ "rafamadriz/neon" },
|
||||||
|
}
|
||||||
54
nvim/lua/plugins/harpoon.lua
Normal file
54
nvim/lua/plugins/harpoon.lua
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
"ThePrimeagen/harpoon",
|
||||||
|
branch = "harpoon2",
|
||||||
|
dependencies = { "nvim-lua/plenary.nvim" },
|
||||||
|
opts = {},
|
||||||
|
keys = {
|
||||||
|
{
|
||||||
|
"<leader>h",
|
||||||
|
function()
|
||||||
|
require("harpoon"):list():add()
|
||||||
|
end,
|
||||||
|
desc = "Harpoon Add File",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"<C-e>",
|
||||||
|
function()
|
||||||
|
local harpoon = require("harpoon")
|
||||||
|
harpoon.ui:toggle_quick_menu(harpoon:list())
|
||||||
|
end,
|
||||||
|
desc = "Harpoon Quick Menu",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"<C-1>",
|
||||||
|
function()
|
||||||
|
require("harpoon"):list():select(1)
|
||||||
|
end,
|
||||||
|
desc = "Harpoon File 1",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"<C-2>",
|
||||||
|
function()
|
||||||
|
require("harpoon"):list():select(2)
|
||||||
|
end,
|
||||||
|
desc = "Harpoon File 2",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"<C-3>",
|
||||||
|
function()
|
||||||
|
require("harpoon"):list():select(3)
|
||||||
|
end,
|
||||||
|
desc = "Harpoon File 3",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"<C-4>",
|
||||||
|
function()
|
||||||
|
require("harpoon"):list():select(4)
|
||||||
|
end,
|
||||||
|
desc = "Harpoon File 4",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
11
nvim/lua/plugins/markview.lua
Normal file
11
nvim/lua/plugins/markview.lua
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
"OXY2DEV/markview.nvim",
|
||||||
|
ft = "markdown",
|
||||||
|
dependencies = {
|
||||||
|
"nvim-treesitter/nvim-treesitter",
|
||||||
|
"nvim-tree/nvim-web-devicons",
|
||||||
|
},
|
||||||
|
opts = {},
|
||||||
|
},
|
||||||
|
}
|
||||||
20
nvim/lua/plugins/neogit.lua
Normal file
20
nvim/lua/plugins/neogit.lua
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
"NeogitOrg/neogit",
|
||||||
|
dependencies = {
|
||||||
|
"nvim-lua/plenary.nvim",
|
||||||
|
"sindrets/diffview.nvim",
|
||||||
|
},
|
||||||
|
keys = {
|
||||||
|
{ "<leader>gg", function() require("neogit").open() end, desc = "Neogit" },
|
||||||
|
{ "<leader>gc", function() require("neogit").open({ "commit" }) end, desc = "Neogit Commit" },
|
||||||
|
{ "<leader>gl", function() require("neogit").open({ "log" }) end, desc = "Neogit Log" },
|
||||||
|
{ "<leader>gp", function() require("neogit").open({ "push" }) end, desc = "Neogit Push" },
|
||||||
|
},
|
||||||
|
opts = {
|
||||||
|
integrations = {
|
||||||
|
diffview = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
34
nvim/lua/plugins/snacks.lua
Normal file
34
nvim/lua/plugins/snacks.lua
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
"snacks.nvim",
|
||||||
|
opts = {
|
||||||
|
dashboard = {
|
||||||
|
preset = {
|
||||||
|
pick = function(cmd, opts)
|
||||||
|
return LazyVim.pick(cmd, opts)()
|
||||||
|
end,
|
||||||
|
header = [[
|
||||||
|
███████╗████████╗██████╗
|
||||||
|
██╔════╝╚══██╔══╝██╔══██╗
|
||||||
|
███████╗ ██║ ██████╔╝
|
||||||
|
╚════██║ ██║ ██╔═══╝
|
||||||
|
███████║ ██║ ██║
|
||||||
|
╚══════╝ ╚═╝ ╚═╝
|
||||||
|
]],
|
||||||
|
-- stylua: ignore
|
||||||
|
keys = {
|
||||||
|
{ icon = " ", key = "f", desc = "Find File", action = ":lua Snacks.dashboard.pick('files')" },
|
||||||
|
{ icon = " ", key = "n", desc = "New File", action = ":ene | startinsert" },
|
||||||
|
{ icon = " ", key = "g", desc = "Find Text", action = ":lua Snacks.dashboard.pick('live_grep')" },
|
||||||
|
{ icon = " ", key = "r", desc = "Recent Files", action = ":lua Snacks.dashboard.pick('oldfiles')" },
|
||||||
|
{ icon = " ", key = "c", desc = "Config", action = ":lua Snacks.dashboard.pick('files', {cwd = vim.fn.stdpath('config')})" },
|
||||||
|
{ icon = " ", key = "s", desc = "Restore Session", section = "session" },
|
||||||
|
{ icon = " ", key = "x", desc = "Lazy Extras", action = ":LazyExtras" },
|
||||||
|
{ icon = " ", key = "l", desc = "Lazy", action = ":Lazy" },
|
||||||
|
{ icon = " ", key = "q", desc = "Quit", action = ":qa" },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
11
nvim/lua/plugins/spectre.lua
Normal file
11
nvim/lua/plugins/spectre.lua
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
"nvim-pack/nvim-spectre",
|
||||||
|
dependencies = { "nvim-lua/plenary.nvim" },
|
||||||
|
keys = {
|
||||||
|
{ "<leader>sr", function() require("spectre").open() end, desc = "Replace in Files (Spectre)" },
|
||||||
|
{ "<leader>sr", function() require("spectre").open_visual({ select_word = true }) end, mode = "v", desc = "Replace Word (Spectre)" },
|
||||||
|
},
|
||||||
|
opts = {},
|
||||||
|
},
|
||||||
|
}
|
||||||
14
nvim/lua/plugins/todo-comments.lua
Normal file
14
nvim/lua/plugins/todo-comments.lua
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
"folke/todo-comments.nvim",
|
||||||
|
event = "VeryLazy",
|
||||||
|
dependencies = { "nvim-lua/plenary.nvim" },
|
||||||
|
opts = {},
|
||||||
|
keys = {
|
||||||
|
{ "]t", function() require("todo-comments").jump_next() end, desc = "Next Todo Comment" },
|
||||||
|
{ "[t", function() require("todo-comments").jump_prev() end, desc = "Prev Todo Comment" },
|
||||||
|
{ "<leader>xt", "<cmd>Trouble todo<cr>", desc = "Todo (Trouble)" },
|
||||||
|
{ "<leader>st", "<cmd>TodoTelescope<cr>", desc = "Todo" },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
8
nvim/lua/plugins/undotree.lua
Normal file
8
nvim/lua/plugins/undotree.lua
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
"mbbill/undotree",
|
||||||
|
keys = {
|
||||||
|
{ "<leader>cu", "<cmd>UndotreeToggle<cr>", desc = "Undotree Toggle" },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
13
nvim/lua/plugins/vimade.lua
Normal file
13
nvim/lua/plugins/vimade.lua
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
return {
|
||||||
|
"TaDaa/vimade",
|
||||||
|
event = "WinNew",
|
||||||
|
opts = {
|
||||||
|
recipe = { "minimalist", { animate = true } },
|
||||||
|
fadelevel = 0.8,
|
||||||
|
blocklist = {
|
||||||
|
claude_terminal = {
|
||||||
|
buf_opts = { ft = "snacks_terminal" },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
73
nvim/lua/plugins/whichkey.lua
Normal file
73
nvim/lua/plugins/whichkey.lua
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
"folke/which-key.nvim",
|
||||||
|
event = "VeryLazy",
|
||||||
|
opts_extend = { "spec" },
|
||||||
|
opts = {
|
||||||
|
preset = "helix",
|
||||||
|
defaults = {},
|
||||||
|
spec = {
|
||||||
|
{
|
||||||
|
mode = { "n", "x" },
|
||||||
|
{ "<leader><tab>", group = "tabs" },
|
||||||
|
{ "<leader>c", group = "code" },
|
||||||
|
{ "<leader>d", group = "debug" },
|
||||||
|
{ "<leader>dp", group = "profiler" },
|
||||||
|
{ "<leader>f", group = "file/find" },
|
||||||
|
{ "<leader>g", group = "git" },
|
||||||
|
{ "<leader>gh", group = "hunks" },
|
||||||
|
{ "<leader>q", group = "quit/session" },
|
||||||
|
{ "<leader>s", group = "search" },
|
||||||
|
{ "<leader>u", group = "ui" },
|
||||||
|
{ "<leader>x", group = "diagnostics/quickfix" },
|
||||||
|
{ "[", group = "prev" },
|
||||||
|
{ "]", group = "next" },
|
||||||
|
{ "g", group = "goto" },
|
||||||
|
{ "gs", group = "surround" },
|
||||||
|
{ "z", group = "fold" },
|
||||||
|
{
|
||||||
|
"<leader>b",
|
||||||
|
group = "buffer",
|
||||||
|
expand = function()
|
||||||
|
return require("which-key.extras").expand.buf()
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"<leader>w",
|
||||||
|
group = "windows",
|
||||||
|
proxy = "<c-w>",
|
||||||
|
expand = function()
|
||||||
|
return require("which-key.extras").expand.win()
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
-- better descriptions
|
||||||
|
{ "gx", desc = "Open with system app" },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
keys = {
|
||||||
|
{
|
||||||
|
"<leader>?",
|
||||||
|
function()
|
||||||
|
require("which-key").show({ global = false })
|
||||||
|
end,
|
||||||
|
desc = "Buffer Keymaps (which-key)",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"<c-w><space>",
|
||||||
|
function()
|
||||||
|
require("which-key").show({ keys = "<c-w>", loop = true })
|
||||||
|
end,
|
||||||
|
desc = "Window Hydra Mode (which-key)",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
config = function(_, opts)
|
||||||
|
local wk = require("which-key")
|
||||||
|
wk.setup(opts)
|
||||||
|
if not vim.tbl_isempty(opts.defaults) then
|
||||||
|
LazyVim.warn("which-key: opts.defaults is deprecated. Please use opts.spec instead.")
|
||||||
|
wk.register(opts.defaults)
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
}
|
||||||
22
packages.txt
22
packages.txt
@@ -16,9 +16,15 @@ hyprland
|
|||||||
hyprpaper
|
hyprpaper
|
||||||
hypridle
|
hypridle
|
||||||
hyprlock
|
hyprlock
|
||||||
|
hyprsunset
|
||||||
|
hyprshutdown
|
||||||
|
hyprpwcenter
|
||||||
|
hyprlauncher
|
||||||
|
|
||||||
|
dex
|
||||||
|
polkit-gnome
|
||||||
|
|
||||||
waybar
|
waybar
|
||||||
wofi
|
|
||||||
|
|
||||||
grim
|
grim
|
||||||
slurp
|
slurp
|
||||||
@@ -49,8 +55,18 @@ yay
|
|||||||
|
|
||||||
alacritty
|
alacritty
|
||||||
kitty
|
kitty
|
||||||
|
tmux
|
||||||
|
ranger
|
||||||
|
mocp
|
||||||
|
dunst
|
||||||
|
cliphist
|
||||||
|
inotify-tools
|
||||||
|
|
||||||
pavucontrol
|
fcitx5
|
||||||
|
fcitx5-chinese-addons
|
||||||
|
fcitx5-gtk
|
||||||
|
fcitx5-qt
|
||||||
|
fcitx5-configtool
|
||||||
pipewire
|
pipewire
|
||||||
pipewire-alsa
|
pipewire-alsa
|
||||||
pipewire-audio
|
pipewire-audio
|
||||||
@@ -66,6 +82,8 @@ zed
|
|||||||
vim
|
vim
|
||||||
neovim
|
neovim
|
||||||
|
|
||||||
|
activitywatch-bin
|
||||||
|
|
||||||
ranger
|
ranger
|
||||||
thunar
|
thunar
|
||||||
rar
|
rar
|
||||||
|
|||||||
55
sh/gen-colors
Executable file
55
sh/gen-colors
Executable file
@@ -0,0 +1,55 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Generate color fragment files for all configs from colors.conf
|
||||||
|
set -e
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||||
|
SRC="$SCRIPT_DIR/colors.conf"
|
||||||
|
|
||||||
|
if [ ! -f "$SRC" ]; then
|
||||||
|
echo "Error: $SRC not found" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Read colors into variables
|
||||||
|
while IFS='=' read -r key value; do
|
||||||
|
case "$key" in \#* | "") continue ;; esac
|
||||||
|
eval "color_$key=$value"
|
||||||
|
done <"$SRC"
|
||||||
|
|
||||||
|
# Hyprland: $color_name = rgb(HEXVAL) format (no #)
|
||||||
|
{
|
||||||
|
while IFS='=' read -r key value; do
|
||||||
|
case "$key" in \#* | "") continue ;; esac
|
||||||
|
hex="${value#\#}"
|
||||||
|
echo "\$color_$key = rgb($hex)"
|
||||||
|
done <"$SRC"
|
||||||
|
} >"$SCRIPT_DIR/hypr/colors.conf"
|
||||||
|
echo "Wrote hypr/colors.conf"
|
||||||
|
|
||||||
|
# Sway: set $color_name #HEXVAL
|
||||||
|
{
|
||||||
|
while IFS='=' read -r key value; do
|
||||||
|
case "$key" in \#* | "") continue ;; esac
|
||||||
|
echo "set \$color_$key $value"
|
||||||
|
done <"$SRC"
|
||||||
|
} >"$SCRIPT_DIR/sway/colors.conf"
|
||||||
|
echo "Wrote sway/colors.conf"
|
||||||
|
|
||||||
|
# i3: same format as sway
|
||||||
|
cp "$SCRIPT_DIR/sway/colors.conf" "$SCRIPT_DIR/i3/colors.conf"
|
||||||
|
echo "Wrote i3/colors.conf"
|
||||||
|
|
||||||
|
# Waybar CSS: @define-color color_name #HEXVAL;
|
||||||
|
{
|
||||||
|
while IFS='=' read -r key value; do
|
||||||
|
case "$key" in \#* | "") continue ;; esac
|
||||||
|
echo "@define-color color_$key $value;"
|
||||||
|
done <"$SRC"
|
||||||
|
} >"$SCRIPT_DIR/waybar/colors.css"
|
||||||
|
echo "Wrote waybar/colors.css"
|
||||||
|
|
||||||
|
# Wofi CSS: same as waybar
|
||||||
|
cp "$SCRIPT_DIR/waybar/colors.css" "$SCRIPT_DIR/wofi/colors.css"
|
||||||
|
echo "Wrote wofi/colors.css"
|
||||||
|
|
||||||
|
echo "Done. All color fragments generated."
|
||||||
10
sh/pull_all
Executable file
10
sh/pull_all
Executable file
@@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
for dir in */; do
|
||||||
|
if [ -d "$dir/.git" ]; then
|
||||||
|
echo "Pulling in $dir..."
|
||||||
|
git -C "$dir" pull
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
output * scale 1.2
|
output * scale 1.2
|
||||||
|
|
||||||
|
|
||||||
@@ -13,7 +14,6 @@ set $ws8 8:æ
|
|||||||
|
|
||||||
# DEFAULT STARTUP --------------------------------------
|
# DEFAULT STARTUP --------------------------------------
|
||||||
# Keyboard: caps:swapescape via sway input (replaces setxkbmap)
|
# Keyboard: caps:swapescape via sway input (replaces setxkbmap)
|
||||||
exec_always export XKB_DEFAULT_OPTIONS="caps:escape"
|
|
||||||
input * {
|
input * {
|
||||||
xkb_options caps:swapescape
|
xkb_options caps:swapescape
|
||||||
xkb_layout gb
|
xkb_layout gb
|
||||||
@@ -37,7 +37,6 @@ exec --no-startup-id surfshark
|
|||||||
|
|
||||||
# PACTL BINDINGS ---------------------------------------
|
# PACTL BINDINGS ---------------------------------------
|
||||||
|
|
||||||
set $refresh_i3status killall -SIGUSR1 i3status
|
|
||||||
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10%
|
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10%
|
||||||
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10%
|
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10%
|
||||||
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle
|
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle
|
||||||
@@ -72,7 +71,7 @@ bindsym $mod+Return exec kitty
|
|||||||
# kill focused window
|
# kill focused window
|
||||||
bindsym $mod+Shift+q kill
|
bindsym $mod+Shift+q kill
|
||||||
# start program launcher
|
# start program launcher
|
||||||
bindsym $mod+d exec --no-startup-id wofi --show drun --style ~/scripts/wofi_style.css
|
bindsym $mod+d exec --no-startup-id wofi --show drun --style ~/scripts/wofi/wofi_style.css
|
||||||
|
|
||||||
bindsym $mod+Ctrl+m exec pavucontrol
|
bindsym $mod+Ctrl+m exec pavucontrol
|
||||||
|
|
||||||
@@ -178,14 +177,14 @@ bindsym $mod+Ctrl+7 move container to workspace $ws7
|
|||||||
bindsym $mod+Ctrl+8 move container to workspace $ws8
|
bindsym $mod+Ctrl+8 move container to workspace $ws8
|
||||||
|
|
||||||
# Move to workspace with focused container
|
# Move to workspace with focused container
|
||||||
bindsym $mod+Shift+1 move container to workspace $ws1;
|
bindsym $mod+Shift+1 move container to workspace $ws1; workspace $ws1
|
||||||
bindsym $mod+Shift+2 move container to workspace $ws2;
|
bindsym $mod+Shift+2 move container to workspace $ws2; workspace $ws2
|
||||||
bindsym $mod+Shift+3 move container to workspace $ws3;
|
bindsym $mod+Shift+3 move container to workspace $ws3; workspace $ws3
|
||||||
bindsym $mod+Shift+4 move container to workspace $ws4;
|
bindsym $mod+Shift+4 move container to workspace $ws4; workspace $ws4
|
||||||
bindsym $mod+Shift+5 move container to workspace $ws5;
|
bindsym $mod+Shift+5 move container to workspace $ws5; workspace $ws5
|
||||||
bindsym $mod+Shift+6 move container to workspace $ws6;
|
bindsym $mod+Shift+6 move container to workspace $ws6; workspace $ws6
|
||||||
bindsym $mod+Shift+7 move container to workspace $ws7;
|
bindsym $mod+Shift+7 move container to workspace $ws7; workspace $ws7
|
||||||
bindsym $mod+Shift+8 move container to workspace $ws8;
|
bindsym $mod+Shift+8 move container to workspace $ws8; workspace $ws8
|
||||||
|
|
||||||
# reload the configuration file
|
# reload the configuration file
|
||||||
bindsym $mod+Shift+c reload
|
bindsym $mod+Shift+c reload
|
||||||
@@ -202,7 +201,7 @@ set $mode_system (l)ock, (e)xit, switch_(u)ser, (s)uspend, (h)ibernate, (r)eboot
|
|||||||
mode "$mode_system" {
|
mode "$mode_system" {
|
||||||
bindsym l exec swaylock -f, mode "default"
|
bindsym l exec swaylock -f, mode "default"
|
||||||
bindsym s exec systemctl suspend, mode "default"
|
bindsym s exec systemctl suspend, mode "default"
|
||||||
bindsym u exec dm-tool switch-to-greeter, mode "default"
|
bindsym u exec swaymsg exit, mode "default"
|
||||||
bindsym e exit
|
bindsym e exit
|
||||||
bindsym h exec systemctl hibernate, mode "default"
|
bindsym h exec systemctl hibernate, mode "default"
|
||||||
bindsym r exec systemctl reboot
|
bindsym r exec systemctl reboot
|
||||||
@@ -312,17 +311,17 @@ for_window [class="Xfburn"] floating enable
|
|||||||
for_window [urgent=latest] focus
|
for_window [urgent=latest] focus
|
||||||
|
|
||||||
# AESTETICS ----------------------------------------------------------------
|
# AESTETICS ----------------------------------------------------------------
|
||||||
exec_always waybar -c ~/scripts/waybar/waybar_config -s ~/scripts/waybar/waybar_style.css
|
exec_always waybar -c ~/scripts/waybar/waybar_sway_config.json -s ~/scripts/waybar/waybar_style.css
|
||||||
|
|
||||||
# Theme colors
|
# Theme colors
|
||||||
# class border backgr. text indic. child_border
|
# class border backgr. text indic.
|
||||||
client.focused #82AAFF #C792EA #FFFFFF #C792EA
|
client.focused $color_secondary $color_primary $color_text_dark $color_primary
|
||||||
client.focused_inactive #C792EA #2A2B3D #F0F0F0 #FF79C6
|
client.focused_inactive $color_primary $color_alt_bg $color_text_light $color_tertiary
|
||||||
client.unfocused #6272A4 #2A2B3D #F0F0F0 #C792EA
|
client.unfocused $color_gray $color_alt_bg $color_text_light $color_primary
|
||||||
client.urgent #FF5370 #2A2B3D #FFFFFF #FF79C6
|
client.urgent $color_tertiary $color_alt_bg $color_white $color_tertiary
|
||||||
client.placeholder #1A1B2F #1A1B2F #FFFFFF #1A1B2F
|
client.placeholder $color_bg $color_bg $color_white $color_bg
|
||||||
|
|
||||||
client.background #1A1B2F
|
client.background $color_bg
|
||||||
|
|
||||||
# Set inner/outer gaps
|
# Set inner/outer gaps
|
||||||
gaps inner 10
|
gaps inner 10
|
||||||
4
sway/build.sh
Executable file
4
sway/build.sh
Executable file
@@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
cd "$(dirname "$0")"
|
||||||
|
cat colors.conf base > config
|
||||||
341
sway/config
Normal file
341
sway/config
Normal file
@@ -0,0 +1,341 @@
|
|||||||
|
set $color_primary #55ffbb
|
||||||
|
set $color_secondary #62ff57
|
||||||
|
set $color_tertiary #ff579a
|
||||||
|
set $color_bg #1b110e
|
||||||
|
set $color_bg_secondary #000000
|
||||||
|
set $color_alt_bg #024942
|
||||||
|
set $color_gray #222222
|
||||||
|
set $color_text_light #F0F0F0
|
||||||
|
set $color_text_dark #1b110e
|
||||||
|
set $color_white #FFFFFF
|
||||||
|
|
||||||
|
output * scale 1.2
|
||||||
|
|
||||||
|
|
||||||
|
# WORKSPACE NAMES -----------------------------------
|
||||||
|
set $ws1 1:ツ
|
||||||
|
set $ws2 2:ಠ‿ಠ
|
||||||
|
set $ws3 3:◕‿◕
|
||||||
|
set $ws4 4:ʘ‿ʘ
|
||||||
|
set $ws5 5:˘◡˘
|
||||||
|
set $ws6 6:◠‿◠
|
||||||
|
set $ws7 7:ᵔᴥᵔ
|
||||||
|
set $ws8 8:æ
|
||||||
|
|
||||||
|
# DEFAULT STARTUP --------------------------------------
|
||||||
|
# Keyboard: caps:swapescape via sway input (replaces setxkbmap)
|
||||||
|
input * {
|
||||||
|
xkb_options caps:swapescape
|
||||||
|
xkb_layout gb
|
||||||
|
}
|
||||||
|
|
||||||
|
exec --no-startup-id volctl
|
||||||
|
exec --no-startup-id fcitx5
|
||||||
|
exec --no-startup-id /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
|
||||||
|
exec --no-startup-id nm-applet --indicator
|
||||||
|
exec --no-startup-id pamac-tray
|
||||||
|
# clipit is X11-only; use cliphist + wl-paste instead:
|
||||||
|
exec wl-paste --watch cliphist store
|
||||||
|
exec --no-startup-id dunst
|
||||||
|
# swayidle replaces xautolock
|
||||||
|
exec swayidle -w timeout 1800 'swaylock -f' before-sleep 'swaylock -f'
|
||||||
|
exec --no-startup-id waterfox
|
||||||
|
exec --no-startup-id steam
|
||||||
|
exec --no-startup-id surfshark
|
||||||
|
|
||||||
|
# picom is X11-only; sway has a built-in compositor — no exec needed
|
||||||
|
|
||||||
|
# PACTL BINDINGS ---------------------------------------
|
||||||
|
|
||||||
|
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10%
|
||||||
|
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10%
|
||||||
|
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle
|
||||||
|
bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle
|
||||||
|
|
||||||
|
# BRIGHTNESSCTL BINDINGS ----------------------------------
|
||||||
|
|
||||||
|
bindsym XF86MonBrightnessUp exec --no-startup-id brightnessctl set +5%
|
||||||
|
bindsym XF86MonBrightnessDown exec --no-startup-id brightnessctl set 5%-
|
||||||
|
|
||||||
|
# DEFAULT WINDOW LAYOUT -------------------------------------
|
||||||
|
|
||||||
|
workspace_layout stacking
|
||||||
|
default_border pixel 1
|
||||||
|
default_floating_border normal
|
||||||
|
hide_edge_borders none
|
||||||
|
|
||||||
|
# KEYBINDS --------------------------------------------------
|
||||||
|
|
||||||
|
set $mod Mod4
|
||||||
|
|
||||||
|
# change borders
|
||||||
|
bindsym $mod+u border none
|
||||||
|
bindsym $mod+y border pixel 1
|
||||||
|
bindsym $mod+n border normal
|
||||||
|
|
||||||
|
# Use Mouse+$mod to drag floating windows
|
||||||
|
floating_modifier $mod normal
|
||||||
|
|
||||||
|
# start a terminal
|
||||||
|
bindsym $mod+Return exec kitty
|
||||||
|
# kill focused window
|
||||||
|
bindsym $mod+Shift+q kill
|
||||||
|
# start program launcher
|
||||||
|
bindsym $mod+d exec --no-startup-id wofi --show drun --style ~/scripts/wofi/wofi_style.css
|
||||||
|
|
||||||
|
bindsym $mod+Ctrl+m exec pavucontrol
|
||||||
|
|
||||||
|
# Start Applications
|
||||||
|
bindsym $mod+F2 exec waterfox
|
||||||
|
bindsym $mod+F3 exec kitty -e ranger
|
||||||
|
bindsym $mod+Shift+F3 exec pcmanfm
|
||||||
|
bindsym $mod+F5 exec kitty -e 'mocp'
|
||||||
|
# picom keybinds removed (not applicable on Wayland)
|
||||||
|
bindsym $mod+Shift+d --release exec "killall dunst; exec notify-send 'restart dunst'"
|
||||||
|
# Screenshots: grim + slurp replace i3-scrot / flameshot
|
||||||
|
bindsym Print exec grim -g "$(slurp)"
|
||||||
|
bindsym $mod+Print exec grim -g "$(swaymsg -t get_tree | jq -r '.. | select(.focused?) | .rect | "\(.x),\(.y) \(.width)x\(.height)"')"
|
||||||
|
bindsym $mod+Shift+Print exec grim -g "$(slurp)"
|
||||||
|
# xkill not available on Wayland; swaymsg kill is the closest equivalent
|
||||||
|
bindsym $mod+Ctrl+x exec swaymsg kill
|
||||||
|
|
||||||
|
focus_follows_mouse yes
|
||||||
|
|
||||||
|
# change focus
|
||||||
|
bindsym $mod+h focus left
|
||||||
|
bindsym $mod+j focus down
|
||||||
|
bindsym $mod+k focus up
|
||||||
|
bindsym $mod+l focus right
|
||||||
|
|
||||||
|
# alternatively, you can use the cursor keys:
|
||||||
|
bindsym $mod+Left focus left
|
||||||
|
bindsym $mod+Down focus down
|
||||||
|
bindsym $mod+Up focus up
|
||||||
|
bindsym $mod+Right focus right
|
||||||
|
|
||||||
|
# move focused window
|
||||||
|
bindsym $mod+Shift+h move left
|
||||||
|
bindsym $mod+Shift+j move down
|
||||||
|
bindsym $mod+Shift+k move up
|
||||||
|
bindsym $mod+Shift+l move right
|
||||||
|
|
||||||
|
# alternatively, you can use the cursor keys:
|
||||||
|
bindsym $mod+Shift+Left move left
|
||||||
|
bindsym $mod+Shift+Down move down
|
||||||
|
bindsym $mod+Shift+Up move up
|
||||||
|
bindsym $mod+Shift+Right move right
|
||||||
|
|
||||||
|
# workspace back and forth (with/without active container)
|
||||||
|
workspace_auto_back_and_forth yes
|
||||||
|
bindsym $mod+b workspace back_and_forth
|
||||||
|
bindsym $mod+Shift+b move container to workspace back_and_forth; workspace back_and_forth
|
||||||
|
|
||||||
|
# split orientation
|
||||||
|
bindsym $mod+g split h;exec notify-send 'tile horizontally'
|
||||||
|
bindsym $mod+v split v;exec notify-send 'tile vertically'
|
||||||
|
bindsym $mod+q split toggle
|
||||||
|
|
||||||
|
# toggle fullscreen mode for the focused container
|
||||||
|
bindsym $mod+f fullscreen toggle
|
||||||
|
|
||||||
|
# change container layout (stacked, tabbed, toggle split)
|
||||||
|
bindsym $mod+s layout stacking;exec notify-send 'layout stacking'
|
||||||
|
bindsym $mod+w layout tabbed; exec notify-send 'layout tabbed'
|
||||||
|
bindsym $mod+e layout toggle split; exec notify-send 'layout split'
|
||||||
|
|
||||||
|
# toggle tiling / floating
|
||||||
|
bindsym $mod+Shift+space floating toggle
|
||||||
|
|
||||||
|
# change focus between tiling / floating windows
|
||||||
|
bindsym $mod+space focus mode_toggle
|
||||||
|
|
||||||
|
# toggle sticky
|
||||||
|
bindsym $mod+Shift+s sticky toggle
|
||||||
|
|
||||||
|
# focus the parent container
|
||||||
|
bindsym $mod+a focus parent
|
||||||
|
|
||||||
|
# move the currently focused window to the scratchpad
|
||||||
|
bindsym $mod+Shift+minus move scratchpad
|
||||||
|
|
||||||
|
# Show the next scratchpad window or hide the focused scratchpad window.
|
||||||
|
bindsym $mod+minus scratchpad show
|
||||||
|
|
||||||
|
#navigate workspaces next / previous
|
||||||
|
bindsym $mod+Ctrl+Right workspace next
|
||||||
|
bindsym $mod+Ctrl+Left workspace prev
|
||||||
|
|
||||||
|
|
||||||
|
# switch to workspace
|
||||||
|
bindsym $mod+1 workspace $ws1
|
||||||
|
bindsym $mod+2 workspace $ws2
|
||||||
|
bindsym $mod+3 workspace $ws3
|
||||||
|
bindsym $mod+4 workspace $ws4
|
||||||
|
bindsym $mod+5 workspace $ws5
|
||||||
|
bindsym $mod+6 workspace $ws6
|
||||||
|
bindsym $mod+7 workspace $ws7
|
||||||
|
bindsym $mod+8 workspace $ws8
|
||||||
|
|
||||||
|
# Move focused container to workspace
|
||||||
|
bindsym $mod+Ctrl+1 move container to workspace $ws1
|
||||||
|
bindsym $mod+Ctrl+2 move container to workspace $ws2
|
||||||
|
bindsym $mod+Ctrl+3 move container to workspace $ws3
|
||||||
|
bindsym $mod+Ctrl+4 move container to workspace $ws4
|
||||||
|
bindsym $mod+Ctrl+5 move container to workspace $ws5
|
||||||
|
bindsym $mod+Ctrl+6 move container to workspace $ws6
|
||||||
|
bindsym $mod+Ctrl+7 move container to workspace $ws7
|
||||||
|
bindsym $mod+Ctrl+8 move container to workspace $ws8
|
||||||
|
|
||||||
|
# Move to workspace with focused container
|
||||||
|
bindsym $mod+Shift+1 move container to workspace $ws1; workspace $ws1
|
||||||
|
bindsym $mod+Shift+2 move container to workspace $ws2; workspace $ws2
|
||||||
|
bindsym $mod+Shift+3 move container to workspace $ws3; workspace $ws3
|
||||||
|
bindsym $mod+Shift+4 move container to workspace $ws4; workspace $ws4
|
||||||
|
bindsym $mod+Shift+5 move container to workspace $ws5; workspace $ws5
|
||||||
|
bindsym $mod+Shift+6 move container to workspace $ws6; workspace $ws6
|
||||||
|
bindsym $mod+Shift+7 move container to workspace $ws7; workspace $ws7
|
||||||
|
bindsym $mod+Shift+8 move container to workspace $ws8; workspace $ws8
|
||||||
|
|
||||||
|
# reload the configuration file
|
||||||
|
bindsym $mod+Shift+c reload
|
||||||
|
|
||||||
|
# restart sway inplace
|
||||||
|
bindsym $mod+Shift+r reload
|
||||||
|
|
||||||
|
# exit sway (logs you out of your Wayland session)
|
||||||
|
bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -b 'Yes, exit sway' 'swaymsg exit'
|
||||||
|
|
||||||
|
# Set shut down, restart and locking features
|
||||||
|
bindsym $mod+0 mode "$mode_system"
|
||||||
|
set $mode_system (l)ock, (e)xit, switch_(u)ser, (s)uspend, (h)ibernate, (r)eboot, (Shift+s)hutdown
|
||||||
|
mode "$mode_system" {
|
||||||
|
bindsym l exec swaylock -f, mode "default"
|
||||||
|
bindsym s exec systemctl suspend, mode "default"
|
||||||
|
bindsym u exec swaymsg exit, mode "default"
|
||||||
|
bindsym e exit
|
||||||
|
bindsym h exec systemctl hibernate, mode "default"
|
||||||
|
bindsym r exec systemctl reboot
|
||||||
|
bindsym Shift+s exec systemctl poweroff
|
||||||
|
|
||||||
|
# exit system mode: "Enter" or "Escape"
|
||||||
|
bindsym Return mode "default"
|
||||||
|
bindsym Escape mode "default"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Resize window (you can also use the mouse for that)
|
||||||
|
bindsym $mod+r mode "resize"
|
||||||
|
mode "resize" {
|
||||||
|
bindsym h resize shrink width 5 px or 5 ppt
|
||||||
|
bindsym j resize grow height 5 px or 5 ppt
|
||||||
|
bindsym k resize shrink height 5 px or 5 ppt
|
||||||
|
bindsym l resize grow width 5 px or 5 ppt
|
||||||
|
|
||||||
|
bindsym Left resize shrink width 10 px or 10 ppt
|
||||||
|
bindsym Down resize grow height 10 px or 10 ppt
|
||||||
|
bindsym Up resize shrink height 10 px or 10 ppt
|
||||||
|
bindsym Right resize grow width 10 px or 10 ppt
|
||||||
|
|
||||||
|
bindsym Return mode "default"
|
||||||
|
bindsym Escape mode "default"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Gaps mode
|
||||||
|
set $mode_gaps Gaps: (o) outer, (i) inner
|
||||||
|
set $mode_gaps_outer Outer Gaps: +|-|0 (local), Shift + +|-|0 (global)
|
||||||
|
set $mode_gaps_inner Inner Gaps: +|-|0 (local), Shift + +|-|0 (global)
|
||||||
|
bindsym $mod+Shift+g mode "$mode_gaps"
|
||||||
|
|
||||||
|
mode "$mode_gaps" {
|
||||||
|
bindsym o mode "$mode_gaps_outer"
|
||||||
|
bindsym i mode "$mode_gaps_inner"
|
||||||
|
bindsym Return mode "default"
|
||||||
|
bindsym Escape mode "default"
|
||||||
|
}
|
||||||
|
|
||||||
|
mode "$mode_gaps_inner" {
|
||||||
|
bindsym plus gaps inner current plus 5
|
||||||
|
bindsym minus gaps inner current minus 5
|
||||||
|
bindsym 0 gaps inner current set 0
|
||||||
|
|
||||||
|
bindsym Shift+plus gaps inner all plus 5
|
||||||
|
bindsym Shift+minus gaps inner all minus 5
|
||||||
|
bindsym Shift+0 gaps inner all set 0
|
||||||
|
|
||||||
|
bindsym Return mode "default"
|
||||||
|
bindsym Escape mode "default"
|
||||||
|
}
|
||||||
|
|
||||||
|
mode "$mode_gaps_outer" {
|
||||||
|
bindsym plus gaps outer current plus 5
|
||||||
|
bindsym minus gaps outer current minus 5
|
||||||
|
bindsym 0 gaps outer current set 0
|
||||||
|
|
||||||
|
bindsym Shift+plus gaps outer all plus 5
|
||||||
|
bindsym Shift+minus gaps outer all minus 5
|
||||||
|
bindsym Shift+0 gaps outer all set 0
|
||||||
|
|
||||||
|
bindsym Return mode "default"
|
||||||
|
bindsym Escape mode "default"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Lock screen
|
||||||
|
bindsym $mod+9 exec --no-startup-id swaylock -f
|
||||||
|
|
||||||
|
# APPLICATION WORKSPACES ----------------------------------------------------
|
||||||
|
assign [app_id="Surfshark"] $ws8
|
||||||
|
|
||||||
|
# APPLICATION WINDOW MODES --------------------------------------------------
|
||||||
|
# Note: use app_id for native Wayland apps, class for XWayland apps
|
||||||
|
for_window [title="Picture-in-Picture"] floating disable border pixel 0
|
||||||
|
|
||||||
|
for_window [title="alsamixer"] floating enable border pixel 1
|
||||||
|
for_window [class="calamares"] floating enable border normal
|
||||||
|
for_window [class="Clipgrab"] floating enable
|
||||||
|
for_window [title="File Transfer*"] floating enable
|
||||||
|
for_window [class="fpakman"] floating enable
|
||||||
|
for_window [class="Galculator"] floating enable border pixel 1
|
||||||
|
for_window [class="GParted"] floating enable border normal
|
||||||
|
for_window [title="i3_help"] floating enable sticky enable border normal
|
||||||
|
for_window [class="Lightdm-settings"] floating enable
|
||||||
|
for_window [class="Lxappearance"] floating enable sticky enable border normal
|
||||||
|
for_window [class="Manjaro-hello"] floating enable
|
||||||
|
for_window [class="Manjaro Settings Manager"] floating enable border normal
|
||||||
|
for_window [title="MuseScore: Play Panel"] floating enable
|
||||||
|
for_window [class="Nitrogen"] floating enable sticky enable border normal
|
||||||
|
for_window [class="Oblogout"] fullscreen enable
|
||||||
|
for_window [class="octopi"] floating enable
|
||||||
|
for_window [title="About Pale Moon"] floating enable
|
||||||
|
for_window [class="Pamac-manager"] floating enable
|
||||||
|
for_window [app_id="pavucontrol"] floating enable
|
||||||
|
for_window [class="qt5ct"] floating enable sticky enable border normal
|
||||||
|
for_window [class="Qtconfig-qt4"] floating enable sticky enable border normal
|
||||||
|
for_window [class="Simple-scan"] floating enable border normal
|
||||||
|
for_window [class="(?i)System-config-printer.py"] floating enable border normal
|
||||||
|
for_window [class="Skype"] floating enable border normal
|
||||||
|
for_window [class="Timeset-gui"] floating enable border normal
|
||||||
|
for_window [class="(?i)virtualbox"] floating enable border normal
|
||||||
|
for_window [class="Xfburn"] floating enable
|
||||||
|
|
||||||
|
# switch to workspace with urgent window automatically
|
||||||
|
for_window [urgent=latest] focus
|
||||||
|
|
||||||
|
# AESTETICS ----------------------------------------------------------------
|
||||||
|
exec_always waybar -c ~/scripts/waybar/waybar_sway_config.json -s ~/scripts/waybar/waybar_style.css
|
||||||
|
|
||||||
|
# Theme colors
|
||||||
|
# class border backgr. text indic.
|
||||||
|
client.focused $color_secondary $color_primary $color_text_dark $color_primary
|
||||||
|
client.focused_inactive $color_primary $color_alt_bg $color_text_light $color_tertiary
|
||||||
|
client.unfocused $color_gray $color_alt_bg $color_text_light $color_primary
|
||||||
|
client.urgent $color_tertiary $color_alt_bg $color_white $color_tertiary
|
||||||
|
client.placeholder $color_bg $color_bg $color_white $color_bg
|
||||||
|
|
||||||
|
client.background $color_bg
|
||||||
|
|
||||||
|
# Set inner/outer gaps
|
||||||
|
gaps inner 10
|
||||||
|
gaps outer 0
|
||||||
|
smart_gaps on
|
||||||
|
|
||||||
|
smart_borders on
|
||||||
@@ -49,8 +49,8 @@ bind R source-file ~/.tmux.conf \; display-message "Config reloaded"
|
|||||||
# Mouse on/off
|
# Mouse on/off
|
||||||
set -g mouse on
|
set -g mouse on
|
||||||
|
|
||||||
# Split window
|
# Split window (g=horizontal, v=vertical — matches WM configs)
|
||||||
bind-key C-v split-window -h
|
bind-key g split-window -h
|
||||||
bind-key v split-window -v
|
bind-key v split-window -v
|
||||||
|
|
||||||
# Rotate Window
|
# Rotate Window
|
||||||
|
|||||||
216
uninstall.sh
Executable file
216
uninstall.sh
Executable file
@@ -0,0 +1,216 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
SCRIPTS_DIR="$HOME/scripts"
|
||||||
|
CONFIG_DIR="$HOME/.config"
|
||||||
|
BACKUP_DIR=""
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
echo "Usage: $(basename "$0") [OPTIONS] <target>..."
|
||||||
|
echo
|
||||||
|
echo "Targets:"
|
||||||
|
echo " hyprland Hyprland + waybar + wofi"
|
||||||
|
echo " sway Sway + waybar + wofi"
|
||||||
|
echo " i3 i3 + i3blocks + i3status"
|
||||||
|
echo " cursor Miku cursor theme"
|
||||||
|
echo " shell Remove sourced bashrc/zshrc and sh/ from PATH"
|
||||||
|
echo " alacritty Remove import from alacritty.toml"
|
||||||
|
echo " tmux Remove sourced tmux.conf"
|
||||||
|
echo " nvim Neovim (LazyVim) config"
|
||||||
|
echo " vim Remove sourced vimrc"
|
||||||
|
echo " all Everything (uses hyprland as WM)"
|
||||||
|
echo
|
||||||
|
echo "Options:"
|
||||||
|
echo " -h, --help Show this help"
|
||||||
|
echo " --backup <dir> Use specific backup directory for restoring"
|
||||||
|
echo " (default: most recent in $SCRIPTS_DIR/backups/)"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Find the backup directory to restore from
|
||||||
|
find_backup() {
|
||||||
|
if [ -n "$BACKUP_DIR" ]; then
|
||||||
|
if [ ! -d "$BACKUP_DIR" ]; then
|
||||||
|
echo "Error: backup directory not found: $BACKUP_DIR"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
local backups_root="$SCRIPTS_DIR/backups"
|
||||||
|
if [ -d "$backups_root" ]; then
|
||||||
|
local latest
|
||||||
|
latest=$(ls -1d "$backups_root"/*/ 2>/dev/null | sort | tail -n1 || true)
|
||||||
|
if [ -n "$latest" ]; then
|
||||||
|
BACKUP_DIR="${latest%/}"
|
||||||
|
echo "Using backup: $BACKUP_DIR"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [ -z "$BACKUP_DIR" ]; then
|
||||||
|
echo "No backups found, will only remove without restoring"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Remove a symlink if it points into $SCRIPTS_DIR, then restore from backup if available
|
||||||
|
restore() {
|
||||||
|
local dest="$1"
|
||||||
|
local name
|
||||||
|
name=$(basename "$dest")
|
||||||
|
|
||||||
|
if [ -L "$dest" ]; then
|
||||||
|
local target
|
||||||
|
target=$(readlink "$dest")
|
||||||
|
if [[ "$target" == "$SCRIPTS_DIR"* ]]; then
|
||||||
|
rm "$dest"
|
||||||
|
echo " Removed symlink $dest"
|
||||||
|
else
|
||||||
|
echo " Skipping $dest (symlink does not point into $SCRIPTS_DIR)"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
elif [ -e "$dest" ]; then
|
||||||
|
echo " Skipping $dest (not a symlink, won't remove)"
|
||||||
|
return
|
||||||
|
else
|
||||||
|
echo " $dest does not exist, nothing to remove"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Restore from backup if available
|
||||||
|
if [ -n "$BACKUP_DIR" ] && [ -e "$BACKUP_DIR/$name" ]; then
|
||||||
|
cp -a "$BACKUP_DIR/$name" "$dest"
|
||||||
|
echo " Restored $dest from backup"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Remove exact matching lines from a file
|
||||||
|
remove_line() {
|
||||||
|
local file="$1" line="$2"
|
||||||
|
if [ ! -f "$file" ]; then
|
||||||
|
echo " $file does not exist, nothing to remove"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
if grep -qF "$line" "$file"; then
|
||||||
|
local tmp
|
||||||
|
tmp=$(mktemp)
|
||||||
|
grep -vF "$line" "$file" > "$tmp" || true
|
||||||
|
mv "$tmp" "$file"
|
||||||
|
echo " Removed from $file: $line"
|
||||||
|
# Delete file if only whitespace remains
|
||||||
|
if [ ! -s "$file" ] || ! grep -q '[^[:space:]]' "$file"; then
|
||||||
|
rm "$file"
|
||||||
|
echo " Deleted empty $file"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo " Line not found in $file: $line"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
uninstall_hyprland() {
|
||||||
|
echo "Uninstalling Hyprland configs..."
|
||||||
|
restore "$CONFIG_DIR/hypr"
|
||||||
|
restore "$CONFIG_DIR/waybar"
|
||||||
|
restore "$CONFIG_DIR/wofi"
|
||||||
|
}
|
||||||
|
|
||||||
|
uninstall_sway() {
|
||||||
|
echo "Uninstalling Sway configs..."
|
||||||
|
restore "$CONFIG_DIR/sway"
|
||||||
|
restore "$CONFIG_DIR/waybar"
|
||||||
|
restore "$CONFIG_DIR/wofi"
|
||||||
|
}
|
||||||
|
|
||||||
|
uninstall_i3() {
|
||||||
|
echo "Uninstalling i3 configs..."
|
||||||
|
restore "$CONFIG_DIR/i3"
|
||||||
|
restore "$CONFIG_DIR/i3blocks"
|
||||||
|
restore "$CONFIG_DIR/i3status"
|
||||||
|
}
|
||||||
|
|
||||||
|
uninstall_cursor() {
|
||||||
|
echo "Uninstalling cursor theme..."
|
||||||
|
restore "$HOME/.local/share/icons/Miku Cursor"
|
||||||
|
}
|
||||||
|
|
||||||
|
uninstall_shell() {
|
||||||
|
echo "Uninstalling shell configs..."
|
||||||
|
if [ -f "$HOME/.zshrc" ]; then
|
||||||
|
remove_line "$HOME/.zshrc" "source ~/scripts/zshrc"
|
||||||
|
remove_line "$HOME/.zshrc" 'export PATH="$HOME/scripts/sh:$PATH"'
|
||||||
|
fi
|
||||||
|
if [ -f "$HOME/.bashrc" ]; then
|
||||||
|
remove_line "$HOME/.bashrc" "source ~/scripts/bashrc"
|
||||||
|
remove_line "$HOME/.bashrc" 'export PATH="$HOME/scripts/sh:$PATH"'
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
uninstall_alacritty() {
|
||||||
|
echo "Uninstalling Alacritty config..."
|
||||||
|
local conf="$CONFIG_DIR/alacritty/alacritty.toml"
|
||||||
|
remove_line "$conf" 'import = ["~/scripts/alacritty.toml"]'
|
||||||
|
}
|
||||||
|
|
||||||
|
uninstall_tmux() {
|
||||||
|
echo "Uninstalling tmux config..."
|
||||||
|
remove_line "$HOME/.tmux.conf" "source ~/scripts/tmux.conf"
|
||||||
|
}
|
||||||
|
|
||||||
|
uninstall_nvim() {
|
||||||
|
echo "Uninstalling Neovim config..."
|
||||||
|
restore "$CONFIG_DIR/nvim"
|
||||||
|
}
|
||||||
|
|
||||||
|
uninstall_vim() {
|
||||||
|
echo "Uninstalling vim config..."
|
||||||
|
remove_line "$HOME/.vimrc" "source ~/scripts/vimrc"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ $# -eq 0 ]; then
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
targets=()
|
||||||
|
while [ $# -gt 0 ]; do
|
||||||
|
case "$1" in
|
||||||
|
-h | --help)
|
||||||
|
usage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
--backup)
|
||||||
|
if [ $# -lt 2 ]; then
|
||||||
|
echo "Error: --backup requires a directory argument"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
BACKUP_DIR="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
all)
|
||||||
|
targets+=(hyprland cursor shell alacritty tmux nvim vim)
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
targets+=("$1")
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
find_backup
|
||||||
|
|
||||||
|
for target in "${targets[@]}"; do
|
||||||
|
case "$target" in
|
||||||
|
hyprland) uninstall_hyprland ;;
|
||||||
|
sway) uninstall_sway ;;
|
||||||
|
i3) uninstall_i3 ;;
|
||||||
|
cursor) uninstall_cursor ;;
|
||||||
|
shell) uninstall_shell ;;
|
||||||
|
alacritty) uninstall_alacritty ;;
|
||||||
|
tmux) uninstall_tmux ;;
|
||||||
|
nvim) uninstall_nvim ;;
|
||||||
|
vim) uninstall_vim ;;
|
||||||
|
*)
|
||||||
|
echo "Unknown target: $target"
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "Done!"
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
* {
|
* {
|
||||||
font-family: "URWGothic-Book", monospace;
|
font-family: "URWGothic-Book", monospace;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
@@ -9,39 +10,39 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
window#waybar {
|
window#waybar {
|
||||||
background-color: #1A1B2F;
|
background-color: @color_bg;
|
||||||
color: #C792EA;
|
color: @color_primary;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Workspaces */
|
/* Workspaces */
|
||||||
#workspaces button {
|
#workspaces button {
|
||||||
padding: 0 8px;
|
padding: 0 8px;
|
||||||
background-color: #2A2B3D;
|
background-color: @color_alt_bg;
|
||||||
color: #FFFFFF;
|
color: @color_white;
|
||||||
border-bottom: 2px solid transparent;
|
border-bottom: 2px solid transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
#workspaces button:hover {
|
#workspaces button:hover {
|
||||||
background-color: #2A2B3D;
|
background-color: @color_alt_bg;
|
||||||
border-bottom: 2px solid #C792EA;
|
border-bottom: 2px solid @color_primary;
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
#workspaces button.focused,
|
#workspaces button.focused,
|
||||||
#workspaces button.active {
|
#workspaces button.active {
|
||||||
background-color: #1A1B2F;
|
background-color: @color_bg;
|
||||||
color: #FFFFFF;
|
color: @color_white;
|
||||||
border-bottom: 2px solid #C792EA;
|
border-bottom: 2px solid @color_primary;
|
||||||
}
|
}
|
||||||
|
|
||||||
#workspaces button.urgent {
|
#workspaces button.urgent {
|
||||||
background-color: #FF5370;
|
background-color: @color_tertiary;
|
||||||
color: #FFFFFF;
|
color: @color_white;
|
||||||
}
|
}
|
||||||
|
|
||||||
#mode {
|
#mode {
|
||||||
background-color: #FF79C6;
|
background-color: @color_tertiary;
|
||||||
color: #1A1B2F;
|
color: @color_text_dark;
|
||||||
padding: 0 8px;
|
padding: 0 8px;
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
@@ -58,7 +59,7 @@ window#waybar {
|
|||||||
#battery,
|
#battery,
|
||||||
#clock {
|
#clock {
|
||||||
padding: 0 10px;
|
padding: 0 10px;
|
||||||
color: #C792EA;
|
color: @color_primary;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Pink separators between modules (matching i3bar separator color) */
|
/* Pink separators between modules (matching i3bar separator color) */
|
||||||
@@ -71,52 +72,67 @@ window#waybar {
|
|||||||
#network,
|
#network,
|
||||||
#battery,
|
#battery,
|
||||||
#clock {
|
#clock {
|
||||||
border-left: 1px solid #FF79C6;
|
border-left: 1px solid @color_tertiary;
|
||||||
}
|
}
|
||||||
|
|
||||||
#battery.warning {
|
#battery.warning {
|
||||||
color: #FFB86C;
|
color: @color_secondary;
|
||||||
}
|
}
|
||||||
|
|
||||||
#battery.critical {
|
#battery.critical {
|
||||||
color: #FF5370;
|
color: @color_tertiary;
|
||||||
}
|
}
|
||||||
|
|
||||||
#custom-greetings {
|
#custom-greetings {
|
||||||
color: #f5af19;
|
color: @color_secondary;
|
||||||
}
|
}
|
||||||
|
|
||||||
#clock {
|
#clock {
|
||||||
color: #FF79C6;
|
color: @color_tertiary;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* claudebar severity classes */
|
/* claudebar severity classes */
|
||||||
#custom-claudebar.low {
|
#custom-claudebar.low {
|
||||||
color: #50FA7B;
|
color: @color_primary;
|
||||||
}
|
}
|
||||||
|
|
||||||
#custom-claudebar.mid {
|
#custom-claudebar.mid {
|
||||||
color: #F1FA8C;
|
color: @color_secondary;
|
||||||
}
|
}
|
||||||
|
|
||||||
#custom-claudebar.high {
|
#custom-claudebar.high {
|
||||||
color: #FFB86C;
|
color: @color_tertiary;
|
||||||
}
|
}
|
||||||
|
|
||||||
#custom-claudebar.critical {
|
#custom-claudebar.critical {
|
||||||
color: #FF5370;
|
color: @color_tertiary;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* App launcher buttons */
|
||||||
|
#custom-steam,
|
||||||
|
#custom-waterfox,
|
||||||
|
#custom-discord,
|
||||||
|
#custom-spotify,
|
||||||
|
#custom-obsidian {
|
||||||
|
padding: 0 10px;
|
||||||
|
color: @color_primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-steam {
|
||||||
|
margin-left: 8px;
|
||||||
|
border-left: 1px solid @color_tertiary;
|
||||||
}
|
}
|
||||||
|
|
||||||
#tray {
|
#tray {
|
||||||
padding: 0 8px;
|
padding: 0 8px;
|
||||||
border-left: 1px solid #FF79C6;
|
border-left: 1px solid @color_tertiary;
|
||||||
}
|
}
|
||||||
|
|
||||||
#tray>.passive {
|
#tray > .passive {
|
||||||
-gtk-icon-effect: dim;
|
-gtk-icon-effect: dim;
|
||||||
}
|
}
|
||||||
|
|
||||||
#tray>.needs-attention {
|
#tray > .needs-attention {
|
||||||
-gtk-icon-effect: highlight;
|
-gtk-icon-effect: highlight;
|
||||||
background-color: #FF5370;
|
background-color: @color_tertiary;
|
||||||
}
|
}
|
||||||
4
waybar/build.sh
Executable file
4
waybar/build.sh
Executable file
@@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
cd "$(dirname "$0")"
|
||||||
|
cat colors.css base.css > style.css
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
"height": 30,
|
"height": 30,
|
||||||
"spacing": 0,
|
"spacing": 0,
|
||||||
|
|
||||||
"modules-left": ["hyprland/workspaces", "hyprland/submap"],
|
"modules-left": ["hyprland/workspaces", "hyprland/submap", "custom/steam", "custom/waterfox", "custom/discord", "custom/spotify", "custom/obsidian"],
|
||||||
"modules-right": [
|
"modules-right": [
|
||||||
"custom/greetings",
|
"custom/greetings",
|
||||||
"custom/history",
|
"custom/history",
|
||||||
@@ -105,11 +105,41 @@
|
|||||||
|
|
||||||
"clock": {
|
"clock": {
|
||||||
"format": "{:%Y-%m-%d %H:%M}",
|
"format": "{:%Y-%m-%d %H:%M}",
|
||||||
"interval": 1,
|
"interval": 60,
|
||||||
"tooltip": false
|
"tooltip": false
|
||||||
},
|
},
|
||||||
|
|
||||||
"tray": {
|
"tray": {
|
||||||
"spacing": 10
|
"spacing": 10
|
||||||
|
},
|
||||||
|
|
||||||
|
"custom/steam": {
|
||||||
|
"format": "Steam",
|
||||||
|
"on-click": "steam",
|
||||||
|
"tooltip-format": "Steam"
|
||||||
|
},
|
||||||
|
|
||||||
|
"custom/waterfox": {
|
||||||
|
"format": "Waterfox",
|
||||||
|
"on-click": "waterfox",
|
||||||
|
"tooltip-format": "Waterfox"
|
||||||
|
},
|
||||||
|
|
||||||
|
"custom/discord": {
|
||||||
|
"format": "Discord",
|
||||||
|
"on-click": "snap run discord",
|
||||||
|
"tooltip-format": "Discord"
|
||||||
|
},
|
||||||
|
|
||||||
|
"custom/spotify": {
|
||||||
|
"format": "Spotify",
|
||||||
|
"on-click": "snap run spotify",
|
||||||
|
"tooltip-format": "Spotify"
|
||||||
|
},
|
||||||
|
|
||||||
|
"custom/obsidian": {
|
||||||
|
"format": "Obsidian",
|
||||||
|
"on-click": "obsidian",
|
||||||
|
"tooltip-format": "Obsidian"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
148
waybar/style.css
Normal file
148
waybar/style.css
Normal file
@@ -0,0 +1,148 @@
|
|||||||
|
@define-color color_primary #55ffbb;
|
||||||
|
@define-color color_secondary #62ff57;
|
||||||
|
@define-color color_tertiary #ff579a;
|
||||||
|
@define-color color_bg #1b110e;
|
||||||
|
@define-color color_bg_secondary #000000;
|
||||||
|
@define-color color_alt_bg #024942;
|
||||||
|
@define-color color_gray #222222;
|
||||||
|
@define-color color_text_light #F0F0F0;
|
||||||
|
@define-color color_text_dark #1b110e;
|
||||||
|
@define-color color_white #FFFFFF;
|
||||||
|
|
||||||
|
* {
|
||||||
|
font-family: "URWGothic-Book", monospace;
|
||||||
|
font-size: 16px;
|
||||||
|
min-height: 0;
|
||||||
|
border: none;
|
||||||
|
border-radius: 0;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
window#waybar {
|
||||||
|
background-color: @color_bg;
|
||||||
|
color: @color_primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Workspaces */
|
||||||
|
#workspaces button {
|
||||||
|
padding: 0 8px;
|
||||||
|
background-color: @color_alt_bg;
|
||||||
|
color: @color_white;
|
||||||
|
border-bottom: 2px solid transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button:hover {
|
||||||
|
background-color: @color_alt_bg;
|
||||||
|
border-bottom: 2px solid @color_primary;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.focused,
|
||||||
|
#workspaces button.active {
|
||||||
|
background-color: @color_bg;
|
||||||
|
color: @color_white;
|
||||||
|
border-bottom: 2px solid @color_primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.urgent {
|
||||||
|
background-color: @color_tertiary;
|
||||||
|
color: @color_white;
|
||||||
|
}
|
||||||
|
|
||||||
|
#mode {
|
||||||
|
background-color: @color_tertiary;
|
||||||
|
color: @color_text_dark;
|
||||||
|
padding: 0 8px;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Right-side modules */
|
||||||
|
#custom-greetings,
|
||||||
|
#custom-history,
|
||||||
|
#custom-claudebar,
|
||||||
|
#pulseaudio,
|
||||||
|
#cpu,
|
||||||
|
#memory,
|
||||||
|
#disk,
|
||||||
|
#network,
|
||||||
|
#battery,
|
||||||
|
#clock {
|
||||||
|
padding: 0 10px;
|
||||||
|
color: @color_primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Pink separators between modules (matching i3bar separator color) */
|
||||||
|
#custom-history,
|
||||||
|
#custom-claudebar,
|
||||||
|
#pulseaudio,
|
||||||
|
#cpu,
|
||||||
|
#memory,
|
||||||
|
#disk,
|
||||||
|
#network,
|
||||||
|
#battery,
|
||||||
|
#clock {
|
||||||
|
border-left: 1px solid @color_tertiary;
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery.warning {
|
||||||
|
color: @color_secondary;
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery.critical {
|
||||||
|
color: @color_tertiary;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-greetings {
|
||||||
|
color: @color_secondary;
|
||||||
|
}
|
||||||
|
|
||||||
|
#clock {
|
||||||
|
color: @color_tertiary;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* claudebar severity classes */
|
||||||
|
#custom-claudebar.low {
|
||||||
|
color: @color_primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-claudebar.mid {
|
||||||
|
color: @color_secondary;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-claudebar.high {
|
||||||
|
color: @color_tertiary;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-claudebar.critical {
|
||||||
|
color: @color_tertiary;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* App launcher buttons */
|
||||||
|
#custom-steam,
|
||||||
|
#custom-waterfox,
|
||||||
|
#custom-discord,
|
||||||
|
#custom-spotify,
|
||||||
|
#custom-obsidian {
|
||||||
|
padding: 0 10px;
|
||||||
|
color: @color_primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-steam {
|
||||||
|
margin-left: 8px;
|
||||||
|
border-left: 1px solid @color_tertiary;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tray {
|
||||||
|
padding: 0 8px;
|
||||||
|
border-left: 1px solid @color_tertiary;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tray > .passive {
|
||||||
|
-gtk-icon-effect: dim;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tray > .needs-attention {
|
||||||
|
-gtk-icon-effect: highlight;
|
||||||
|
background-color: @color_tertiary;
|
||||||
|
}
|
||||||
@@ -106,7 +106,7 @@
|
|||||||
|
|
||||||
"clock": {
|
"clock": {
|
||||||
"format": "{:%Y-%m-%d %H:%M}",
|
"format": "{:%Y-%m-%d %H:%M}",
|
||||||
"interval": 1,
|
"interval": 60,
|
||||||
"tooltip": false
|
"tooltip": false
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
49
wofi/base.css
Normal file
49
wofi/base.css
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
|
||||||
|
window {
|
||||||
|
margin: 0px;
|
||||||
|
border: 1px solid @color_primary;
|
||||||
|
background-color: @color_bg;
|
||||||
|
border-radius: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#input {
|
||||||
|
padding: 4px 8px;
|
||||||
|
margin: 6px;
|
||||||
|
color: @color_text_light;
|
||||||
|
background-color: @color_alt_bg;
|
||||||
|
border: 1px solid @color_primary;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#inner-box {
|
||||||
|
background-color: @color_bg;
|
||||||
|
}
|
||||||
|
|
||||||
|
#outer-box {
|
||||||
|
margin: 4px;
|
||||||
|
padding: 4px;
|
||||||
|
background-color: @color_bg;
|
||||||
|
}
|
||||||
|
|
||||||
|
#scroll {
|
||||||
|
margin: 0px;
|
||||||
|
padding: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#text {
|
||||||
|
margin: 2px 8px;
|
||||||
|
color: @color_primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
#entry {
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#entry:selected {
|
||||||
|
background-color: @color_alt_bg;
|
||||||
|
border: 1px solid @color_primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
#text:selected {
|
||||||
|
color: @color_tertiary;
|
||||||
|
}
|
||||||
4
wofi/build.sh
Executable file
4
wofi/build.sh
Executable file
@@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
cd "$(dirname "$0")"
|
||||||
|
cat colors.css base.css > style.css
|
||||||
59
wofi/style.css
Normal file
59
wofi/style.css
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
@define-color color_primary #55ffbb;
|
||||||
|
@define-color color_secondary #62ff57;
|
||||||
|
@define-color color_tertiary #ff579a;
|
||||||
|
@define-color color_bg #1b110e;
|
||||||
|
@define-color color_bg_secondary #000000;
|
||||||
|
@define-color color_alt_bg #024942;
|
||||||
|
@define-color color_gray #222222;
|
||||||
|
@define-color color_text_light #F0F0F0;
|
||||||
|
@define-color color_text_dark #1b110e;
|
||||||
|
@define-color color_white #FFFFFF;
|
||||||
|
|
||||||
|
window {
|
||||||
|
margin: 0px;
|
||||||
|
border: 1px solid @color_primary;
|
||||||
|
background-color: @color_bg;
|
||||||
|
border-radius: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#input {
|
||||||
|
padding: 4px 8px;
|
||||||
|
margin: 6px;
|
||||||
|
color: @color_text_light;
|
||||||
|
background-color: @color_alt_bg;
|
||||||
|
border: 1px solid @color_primary;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#inner-box {
|
||||||
|
background-color: @color_bg;
|
||||||
|
}
|
||||||
|
|
||||||
|
#outer-box {
|
||||||
|
margin: 4px;
|
||||||
|
padding: 4px;
|
||||||
|
background-color: @color_bg;
|
||||||
|
}
|
||||||
|
|
||||||
|
#scroll {
|
||||||
|
margin: 0px;
|
||||||
|
padding: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#text {
|
||||||
|
margin: 2px 8px;
|
||||||
|
color: @color_primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
#entry {
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#entry:selected {
|
||||||
|
background-color: @color_alt_bg;
|
||||||
|
border: 1px solid @color_primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
#text:selected {
|
||||||
|
color: @color_tertiary;
|
||||||
|
}
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
window {
|
|
||||||
margin: 0px;
|
|
||||||
border: 1px solid #82AAFF;
|
|
||||||
background-color: #1A1B2F;
|
|
||||||
border-radius: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#input {
|
|
||||||
padding: 4px 8px;
|
|
||||||
margin: 6px;
|
|
||||||
color: #F0F0F0;
|
|
||||||
background-color: #2A2B3D;
|
|
||||||
border: 1px solid #C792EA;
|
|
||||||
border-radius: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#inner-box {
|
|
||||||
background-color: #1A1B2F;
|
|
||||||
}
|
|
||||||
|
|
||||||
#outer-box {
|
|
||||||
margin: 4px;
|
|
||||||
padding: 4px;
|
|
||||||
background-color: #1A1B2F;
|
|
||||||
}
|
|
||||||
|
|
||||||
#scroll {
|
|
||||||
margin: 0px;
|
|
||||||
padding: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#text {
|
|
||||||
margin: 2px 8px;
|
|
||||||
color: #C792EA;
|
|
||||||
}
|
|
||||||
|
|
||||||
#entry {
|
|
||||||
border-radius: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#entry:selected {
|
|
||||||
background-color: #2A2B3D;
|
|
||||||
border: 1px solid #C792EA;
|
|
||||||
}
|
|
||||||
|
|
||||||
#text:selected {
|
|
||||||
color: #FF79C6;
|
|
||||||
}
|
|
||||||
105
zshrc
105
zshrc
@@ -1,85 +1,12 @@
|
|||||||
alias vim=nvim
|
alias vim=nvim
|
||||||
alias python=ipython
|
alias python=ipython
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# If you come from bash you might have to change your $PATH.
|
|
||||||
# export PATH=$HOME/bin:$HOME/.local/bin:/usr/local/bin:$PATH
|
|
||||||
|
|
||||||
# Path to your Oh My Zsh installation.
|
|
||||||
export ZSH="$HOME/.oh-my-zsh"
|
export ZSH="$HOME/.oh-my-zsh"
|
||||||
|
|
||||||
# Set name of the theme to load --- if set to "random", it will
|
|
||||||
# load a random theme each time Oh My Zsh is loaded, in which case,
|
|
||||||
# to know which specific one was loaded, run: echo $RANDOM_THEME
|
|
||||||
# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
|
|
||||||
ZSH_THEME="re5et"
|
ZSH_THEME="re5et"
|
||||||
|
|
||||||
# Set list of themes to pick from when loading at random
|
|
||||||
# Setting this variable when ZSH_THEME=random will cause zsh to load
|
|
||||||
# a theme from this variable instead of looking in $ZSH/themes/
|
|
||||||
# If set to an empty array, this variable will have no effect.
|
|
||||||
# ZSH_THEME_RANDOM_CANDIDATES=( "robbyrussell" "agnoster" )
|
|
||||||
|
|
||||||
# Uncomment the following line to use case-sensitive completion.
|
|
||||||
# CASE_SENSITIVE="true"
|
|
||||||
|
|
||||||
# Uncomment the following line to use hyphen-insensitive completion.
|
|
||||||
# Case-sensitive completion must be off. _ and - will be interchangeable.
|
|
||||||
# HYPHEN_INSENSITIVE="true"
|
|
||||||
|
|
||||||
# Uncomment one of the following lines to change the auto-update behavior
|
|
||||||
# zstyle ':omz:update' mode disabled # disable automatic updates
|
|
||||||
# zstyle ':omz:update' mode auto # update automatically without asking
|
|
||||||
# zstyle ':omz:update' mode reminder # just remind me to update when it's time
|
|
||||||
|
|
||||||
# Uncomment the following line to change how often to auto-update (in days).
|
|
||||||
# zstyle ':omz:update' frequency 13
|
|
||||||
|
|
||||||
# Uncomment the following line if pasting URLs and other text is messed up.
|
|
||||||
# DISABLE_MAGIC_FUNCTIONS="true"
|
|
||||||
|
|
||||||
# Uncomment the following line to disable colors in ls.
|
|
||||||
# DISABLE_LS_COLORS="true"
|
|
||||||
|
|
||||||
# Uncomment the following line to disable auto-setting terminal title.
|
|
||||||
# DISABLE_AUTO_TITLE="true"
|
|
||||||
|
|
||||||
# Uncomment the following line to enable command auto-correction.
|
|
||||||
# ENABLE_CORRECTION="true"
|
|
||||||
|
|
||||||
# Uncomment the following line to display red dots whilst waiting for completion.
|
|
||||||
# You can also set it to another string to have that shown instead of the default red dots.
|
|
||||||
# e.g. COMPLETION_WAITING_DOTS="%F{yellow}waiting...%f"
|
|
||||||
# Caution: this setting can cause issues with multiline prompts in zsh < 5.7.1 (see #5765)
|
|
||||||
# COMPLETION_WAITING_DOTS="true"
|
|
||||||
|
|
||||||
# Uncomment the following line if you want to disable marking untracked files
|
|
||||||
# under VCS as dirty. This makes repository status check for large repositories
|
|
||||||
# much, much faster.
|
|
||||||
# DISABLE_UNTRACKED_FILES_DIRTY="true"
|
|
||||||
|
|
||||||
# Uncomment the following line if you want to change the command execution time
|
|
||||||
# stamp shown in the history command output.
|
|
||||||
# You can set one of the optional three formats:
|
|
||||||
# "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd"
|
|
||||||
# or set a custom format using the strftime function format specifications,
|
|
||||||
# see 'man strftime' for details.
|
|
||||||
# HIST_STAMPS="mm/dd/yyyy"
|
|
||||||
|
|
||||||
# Would you like to use another custom folder than $ZSH/custom?
|
|
||||||
# ZSH_CUSTOM=/path/to/new-custom-folder
|
|
||||||
|
|
||||||
# Which plugins would you like to load?
|
|
||||||
# Standard plugins can be found in $ZSH/plugins/
|
|
||||||
# Custom plugins may be added to $ZSH_CUSTOM/plugins/
|
|
||||||
# Example format: plugins=(rails git textmate ruby lighthouse)
|
|
||||||
# Add wisely, as too many plugins slow down shell startup.
|
|
||||||
plugins=(
|
plugins=(
|
||||||
git
|
git
|
||||||
|
|
||||||
aliases
|
aliases
|
||||||
|
|
||||||
docker-compose
|
docker-compose
|
||||||
docker
|
docker
|
||||||
python
|
python
|
||||||
@@ -87,45 +14,13 @@ plugins=(
|
|||||||
npm
|
npm
|
||||||
golang
|
golang
|
||||||
rust
|
rust
|
||||||
|
|
||||||
|
|
||||||
sudo
|
sudo
|
||||||
extract
|
extract
|
||||||
history
|
history
|
||||||
command-not-found
|
command-not-found
|
||||||
archlinux
|
archlinux
|
||||||
|
|
||||||
zsh-autosuggestions
|
zsh-autosuggestions
|
||||||
zsh-syntax-highlighting
|
zsh-syntax-highlighting
|
||||||
)
|
)
|
||||||
|
|
||||||
source $ZSH/oh-my-zsh.sh
|
source $ZSH/oh-my-zsh.sh
|
||||||
|
|
||||||
# User configuration
|
|
||||||
|
|
||||||
# export MANPATH="/usr/local/man:$MANPATH"
|
|
||||||
|
|
||||||
# You may need to manually set your language environment
|
|
||||||
# export LANG=en_US.UTF-8
|
|
||||||
|
|
||||||
# Preferred editor for local and remote sessions
|
|
||||||
# if [[ -n $SSH_CONNECTION ]]; then
|
|
||||||
# export EDITOR='vim'
|
|
||||||
# else
|
|
||||||
# export EDITOR='nvim'
|
|
||||||
# fi
|
|
||||||
|
|
||||||
# Compilation flags
|
|
||||||
# export ARCHFLAGS="-arch $(uname -m)"
|
|
||||||
|
|
||||||
# Set personal aliases, overriding those provided by Oh My Zsh libs,
|
|
||||||
# plugins, and themes. Aliases can be placed here, though Oh My Zsh
|
|
||||||
# users are encouraged to define aliases within a top-level file in
|
|
||||||
# the $ZSH_CUSTOM folder, with .zsh extension. Examples:
|
|
||||||
# - $ZSH_CUSTOM/aliases.zsh
|
|
||||||
# - $ZSH_CUSTOM/macos.zsh
|
|
||||||
# For a full list of active aliases, run `alias`.
|
|
||||||
#
|
|
||||||
# Example aliases
|
|
||||||
# alias zshconfig="mate ~/.zshrc"
|
|
||||||
# alias ohmyzsh="mate ~/.oh-my-zsh"
|
|
||||||
|
|||||||
Reference in New Issue
Block a user