157 Commits
Author SHA1 Message Date
GeorgeSG 2c124d2bee Use code for git editor 2026-07-08 16:14:59 +03:00
GeorgeSG 26262f2111 Add herdr 2026-07-08 16:14:33 +03:00
Georgi Gardev 38206e6f48 Add thefuck 2026-06-24 22:00:03 +03:00
Georgi Gardev d80d9d5462 Update dotfiles 2026-06-24 21:57:36 +03:00
Georgi GardevandClaude Opus 4.8 ab3f98f506 Use HTTPS instead of SSH for public submodules
zsh-git-prompt, calc.plugin.zsh, and zsh-vim-mode are public repos, so
fetch them over HTTPS to avoid requiring SSH keys on fresh clones.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 21:47:15 +03:00
Georgi Gardev aac8d2a035 Disable some apps in personal 2026-01-30 00:23:20 +02:00
Georgi Gardev 71be3eb48b Add swift-shift 2026-01-30 00:23:05 +02:00
Georgi Gardev 5f65e96f8e Add screensaver alias 2025-11-03 23:35:40 +02:00
Georgi Gardev b1fcfbb6d4 Update macos setup 2025-10-31 20:59:03 +02:00
Georgi Gardev 171bc921a7 Update colors 2025-03-06 11:45:06 +02:00
GeorgeSG ffb94b7a62 Update alacritty theme 2025-02-15 11:39:01 +02:00
Georgi Gardev df3bdd3207 Update install script 2025-02-15 11:36:39 +02:00
GeorgeSG a01ad11ace Don't sudo chsh 2025-02-15 11:21:37 +02:00
GeorgeSG 72e2db0780 Add per-os install scripts 2025-02-15 11:19:21 +02:00
GeorgeSG 5b0f04c2b6 Rename dotbot files 2025-02-15 11:18:58 +02:00
GeorgeSG 894f00cc5e update fn 2025-02-10 18:16:59 +02:00
GeorgeSG e26ea8a377 Rename fn 2025-02-10 17:49:34 +02:00
GeorgeSG 966b04322e update comment 2025-02-10 16:30:49 +02:00
GeorgeSG d822494616 Improve aliases 2025-02-10 16:29:34 +02:00
Georgi Gardev 98d91f20c8 Add kondo 2025-02-04 13:21:26 +02:00
GeorgeSG 5f8c77cdc8 add fd 2025-02-02 18:31:53 +02:00
GeorgeSG b60c5602ca add aliases 2025-02-02 18:27:32 +02:00
GeorgeSG e192ef81f4 Remove deprecated Makefile 2025-02-02 09:49:34 +02:00
GeorgeSG 8ab8cc5533 Update brewfile 2025-02-02 09:49:12 +02:00
GeorgeSG 2f8e433848 add flushdns alias for mac 2025-02-02 09:49:01 +02:00
GeorgeSG ad28dee306 do xcode-install for macos 2025-01-23 17:58:42 +02:00
GeorgeSG b7d6c1f529 rename dotbot files 2025-01-23 17:57:53 +02:00
GeorgeSG 13befac5e6 remove useful stuff from global gitignore 2025-01-23 17:43:09 +02:00
GeorgeSG 034ba4bc36 update btop 2025-01-23 16:17:32 +02:00
GeorgeSG 6d0daf7535 link tmux plugins 2025-01-23 16:05:12 +02:00
Georgi Gardev f9367d6fe6 add gh cli aliases 2025-01-23 15:47:31 +02:00
Georgi Gardev 7f7c5b3786 alacritty url handling 2025-01-23 15:47:26 +02:00
Georgi Gardev 910b4d3846 Update alacritty styles 2025-01-23 13:03:29 +02:00
Georgi Gardev 3b1193b66b Update zshrc 2025-01-23 12:02:12 +02:00
Georgi Gardev 418e882aa7 Update alacritty theme 2025-01-23 12:02:05 +02:00
Georgi Gardev 1bfc8feeff Update install 2025-01-23 11:24:29 +02:00
Georgi Gardev cb2930a6e3 Add global gitignore 2025-01-23 11:24:21 +02:00
GeorgeSG 0e5cd1e276 Update dotfiles 2025-01-23 09:41:25 +02:00
GeorgeSG 097ee2c214 update caskfile 2025-01-23 09:26:13 +02:00
GeorgeSG 9262b92c3a Update alacritty conf 2025-01-23 09:26:07 +02:00
GeorgeSG ab7a3c7dc7 update mac install 2025-01-22 19:38:53 +02:00
GeorgeSG 484665b291 Switch to dotbot 2025-01-22 19:33:28 +02:00
Georgi Gardev 9a9edb57ff Update gitmodule 2025-01-22 18:24:48 +02:00
Georgi Gardev 091218ca64 Add dotbot install files 2025-01-22 18:24:48 +02:00
Georgi Gardev ffd0b82e21 Add dotbot 2025-01-22 18:24:48 +02:00
Georgi Gardev b1024a5363 dust 2024-07-11 16:13:45 +03:00
Georgi Gardev eee5631613 add fastfetch 2024-07-11 16:12:24 +03:00
Georgi Gardev 58da740702 git-delta 2024-07-11 16:10:06 +03:00
Georgi Gardev ea1af03c9b update brewfile 2024-07-11 15:50:20 +03:00
Georgi Gardev adb5c180c4 update caskfile 2024-07-11 12:42:58 +03:00
Georgi Gardev 7f76c54c73 update iterm profile 2024-07-11 12:41:40 +03:00
Georgi Gardev 36daa66605 make tmux transparent 2024-07-11 12:40:42 +03:00
Georgi Gardev c190054553 update iterm2 2024-07-11 12:40:13 +03:00
Georgi Gardev 42f87f7acd add iterm2 profile 2024-07-11 12:37:43 +03:00
Georgi Gardev ac77163995 remove alacritty from general linking 2024-07-11 12:34:59 +03:00
Georgi Gardev ca0a011536 add alacritty and btop to brewfile 2024-07-11 12:26:59 +03:00
Georgi Gardev 0389f91188 Move alacritty & btop to global linking 2024-07-11 12:26:42 +03:00
Georgi Gardev 1ed9a09f1b gitignore all local files 2024-07-11 12:11:21 +03:00
Georgi Gardev afc4f70fa7 gitignore local file 2024-07-11 12:11:06 +03:00
Georgi Gardev a2d1b6d12a remove .local file 2024-07-11 12:09:22 +03:00
GeorgeSG 5d6445d575 update eww on monitor update 2024-07-08 22:41:07 +03:00
GeorgeSG 16d887ec8d Update eww & hypr 2024-07-07 16:41:42 +03:00
GeorgeSG f2963d17b7 Update eww & hypr 2024-07-07 15:46:10 +03:00
GeorgeSG e5ed811055 Screenshot support 2024-07-07 14:16:38 +03:00
GeorgeSG 58f0b6cb9a Update eww and hyprland 2024-07-07 13:41:37 +03:00
GeorgeSG 74bacf3304 Update eww and hypr 2024-07-06 23:19:28 +03:00
GeorgeSG 34c51ecc9b update hypr 2024-07-06 22:43:47 +03:00
GeorgeSG 73bf405e02 fix typo 2024-07-06 22:33:27 +03:00
GeorgeSG 63060c52f4 Update eww 2024-07-06 22:33:16 +03:00
GeorgeSG af1dd2c0fc Add hyprlock 2024-07-06 15:44:05 +03:00
GeorgeSG a1f4d4cb9c Update rofi style 2024-07-06 13:40:32 +03:00
GeorgeSG 74a55a2dba move gitconfig local 2024-07-06 13:09:39 +03:00
GeorgeSG 36bcdccc21 gitignore and pull alacritty themes 2024-07-06 13:07:44 +03:00
GeorgeSG 7c84d0c507 Remove pyc file 2024-07-06 13:07:18 +03:00
GeorgeSG b820d657ee Add hyprstack config 2024-07-06 12:59:14 +03:00
GeorgeSG ead8c1df03 Update aliases 2024-07-06 12:53:59 +03:00
GeorgeSG 9c7184fb66 set tmux plugins path 2024-07-05 12:38:48 +03:00
GeorgeSG 8e8f35f5e8 move .gitconfig back home 2024-07-05 12:36:27 +03:00
GeorgeSG 278ca68338 Remove debug message 2024-07-05 12:28:49 +03:00
GeorgeSG 0cc989bbb7 ignore bash git prompt 2024-07-05 12:28:20 +03:00
GeorgeSG 47a432293e Rearrange files in .config folder, update makefile 2024-07-05 12:26:30 +03:00
Georgi Gardev 75d563e018 mac os disable press and hold 2024-03-17 13:59:26 +02:00
Georgi Gardev 376f6578cb Correct grammer 2024-03-10 23:42:47 +02:00
Georgi Gardev 706f3846ee Update clone.sh 2024-03-09 15:45:53 +02:00
Georgi Gardev 6d248c04c8 make xcode select install optional 2024-03-09 14:52:12 +02:00
Georgi Gardev 577a07285b Add apps to install 2024-03-07 17:18:41 +02:00
Georgi Gardev 22c8a7159b Add clone file 2024-03-07 16:01:26 +02:00
Georgi Gardev d41f162b61 Add clone file for often-used repos 2024-03-07 16:01:16 +02:00
Georgi Gardev 567523d4d4 Misc tweaks 2024-03-07 15:07:41 +02:00
Georgi Gardev bd5fc63166 fzf fixes 2024-03-07 12:50:49 +02:00
Georgi Gardev 5899f68be2 Update brew 2024-03-07 12:38:55 +02:00
Georgi Gardev 08bdb7655b Add comment 2024-03-07 11:58:08 +02:00
Georgi Gardev e43d18baf7 Remove unused icons 2024-03-07 11:57:29 +02:00
Georgi Gardev 503f514783 Update settings 2024-03-07 11:51:12 +02:00
Georgi Gardev 27517b46f5 Update mac setup script 2024-03-07 11:38:34 +02:00
Georgi Gardev fd94ad783b Remove unused files 2024-03-07 11:17:14 +02:00
Georgi Gardev f8adb2fdf0 remove cask step 2024-03-07 11:16:21 +02:00
Georgi Gardev a1a8f36931 minor fixes 2024-03-07 11:15:38 +02:00
Georgi Gardev d5694f106e update ssh generation script 2024-03-07 11:13:58 +02:00
Georgi Gardev 096ffe0f7d fix space 2024-03-07 10:50:16 +02:00
Georgi Gardev 3e062ad036 Update & fix prompt issues 2024-03-07 10:48:02 +02:00
Georgi Gardev 0d0804a420 add zshenv 2024-03-06 15:15:05 +02:00
Georgi Gardev 47af8efcfa Setup shell before brew 2024-03-06 12:49:35 +02:00
Georgi Gardev 04625d844e fix indent 2024-03-06 11:57:44 +02:00
Georgi Gardev a76f5f0563 fix errors 2024-03-06 11:57:20 +02:00
Georgi Gardev 5abece9316 fix errors 2024-03-06 11:56:26 +02:00
Georgi Gardev ade30406d3 fix clone 2024-03-06 11:55:15 +02:00
Georgi Gardev 91ee9a3087 Tweaks 2024-03-05 22:30:48 +02:00
Georgi Gardev d720aa58c6 lint 2024-03-05 19:25:26 +02:00
Georgi Gardev a1c1e65960 add zoxide 2024-03-05 19:25:10 +02:00
Georgi Gardev 7161134798 add zoxide 2024-03-05 19:25:04 +02:00
Georgi Gardev d2f1022b42 Add more eza aliases 2024-03-05 19:12:05 +02:00
Georgi Gardev 68d9562369 Add zsh plugins and aliases 2024-03-05 19:04:38 +02:00
Georgi Gardev 56584b3abe Add zsh plugins 2024-03-05 15:57:58 +02:00
Georgi Gardev ade4e7d527 ignore common commands in history 2024-03-05 15:49:43 +02:00
Georgi Gardev 75eec352cb Update zshrc 2024-03-05 15:48:35 +02:00
Georgi Gardev a120b8747a Add comment 2024-03-05 15:38:27 +02:00
Georgi Gardev 0763dcb89c Update prompt 2024-03-05 15:35:01 +02:00
Georgi Gardev be0c0a8302 Add gitconfig to README 2024-03-05 15:28:15 +02:00
Georgi Gardev 41043f38bc Fix readme 2024-03-05 15:27:54 +02:00
Georgi Gardev 4d7d433253 Remove unused var 2024-03-05 15:26:52 +02:00
Georgi Gardev 259e90d98d Add stashed color in zsh prompt 2024-03-05 15:18:18 +02:00
Georgi Gardev c38a23a408 Move zsh config in the repo 2024-03-05 15:13:01 +02:00
Georgi Gardev 8701166c31 Rework bash files 2024-03-05 14:57:06 +02:00
Georgi Gardev fe9397b8e9 nits 2024-03-05 12:25:13 +02:00
Georgi Gardev 91bb9c57a6 cleanup tmux themes 2024-03-05 01:27:29 +02:00
Georgi Gardev a98422f735 Autohide dock 2024-03-05 01:25:51 +02:00
Georgi Gardev 494cad38eb Update macos setup 2024-03-05 01:24:20 +02:00
Georgi Gardev d9a0518046 Add script to generate ssh key 2024-03-05 01:23:06 +02:00
Georgi Gardev 7f75d9ff8f use /usr/bin/env 2024-03-05 01:22:58 +02:00
Georgi Gardev 99f55332f8 update tmux.conf 2024-03-05 01:11:40 +02:00
Georgi Gardev 1afcfcc7f2 Update makefile 2024-03-05 01:03:35 +02:00
Georgi Gardev 5d2960ba25 Update makefile 2024-03-05 01:01:14 +02:00
Georgi Gardev 231fcb3d6e Additional macos setup 2024-03-05 00:51:26 +02:00
Georgi Gardev 23f1285b80 add macos setup 2024-03-05 00:17:53 +02:00
Georgi Gardev e9f42c013b Add rar 2024-03-04 23:59:53 +02:00
Georgi Gardev 6ee241f17e fix tmux comment 2024-03-04 23:57:29 +02:00
Georgi Gardev 57d074b3a2 Split in folders 2024-03-04 23:56:20 +02:00
Georgi Gardev 8d30d8f42c Move stuff to archive 2024-03-04 23:51:20 +02:00
Georgi Gardev 7a355e626d add install_brew.sh 2024-03-04 23:50:08 +02:00
Georgi Gardev d0d8162af6 ignore Brewfile lcok 2024-03-04 23:49:58 +02:00
Georgi Gardev b72530e8f5 Move and update aliases 2024-03-04 23:40:50 +02:00
Georgi Gardev fe81ac69a7 bring bashrc back 2024-03-04 23:29:45 +02:00
Georgi Gardev d91faeb4b4 Move to bash_profile 2024-03-04 23:28:53 +02:00
Georgi Gardev bfc3ad92ef Switch to Brewfile 2024-03-04 23:08:29 +02:00
Georgi Gardev 74abf09eaa add extract fn 2024-03-04 22:54:49 +02:00
Georgi Gardev 78c15fbd28 switch to .local for consistency 2024-03-04 22:54:39 +02:00
Georgi Gardev 25639710e8 Update makefile 2024-03-04 22:46:24 +02:00
Georgi Gardev c30aaee31c remove gpg sign disabled 2024-03-04 22:37:20 +02:00
Georgi Gardev a92433ea8e Add yda alias 2024-03-04 22:30:19 +02:00
Georgi Gardev 6948d245e8 Update brewfile 2024-03-04 22:29:30 +02:00
Georgi Gardev 1fd685683b Update bash aliases 2024-03-04 22:27:48 +02:00
Georgi Gardev f29af7c047 Update mac os brew setup 2024-03-04 22:25:26 +02:00
Georgi Gardev 9d7d4f0b29 Add new git aliases 2024-03-04 21:43:07 +02:00
GeorgeSG d4a2c81fe0 add unstage alias 2023-11-14 09:26:10 +02:00
Georgi Gardev 6274ebc261 change file mode 2023-11-14 09:24:05 +02:00
Georgi Gardev 5436636128 add git conitnue aliases 2023-11-14 09:24:03 +02:00
173 changed files with 3874 additions and 226 deletions
-61
View File
@@ -1,61 +0,0 @@
##### Platform independent #####
# Files
alias df1="du -h -d 1"
# Git Aliases
alias g="git"
alias ga="git add"
alias gr="git rm"
alias gc="git commit"
alias gs="git status -s"
alias gss="git status"
alias gd="git diff"
alias gds="git diff --staged"
alias gco="git checkout"
alias gcom="git checkout master"
alias gpom="git pull origin master"
alias gbd="git branch -D"
alias gm="git mergetool"
# tmux
alias tm="tmux -2 attach-session -t "default" || tmux -2 new-session -s \"default\""
alias tmv="tmux -2 attach-session -t "vscode" || tmux -2 new-session -s \"vscode\""
alias tmks="tmux kill-session -t"
alias tmas="tmux attach-session -t"
alias tmls="tmux list-sessions"
# Docker
alias dc="docker compose"
alias de="docker exec"
alias dr="docker run"
alias db="docker build"
alias ds="docker stop"
alias drm="docker rm"
alias drmi="docker rmi"
alias dps="docker ps"
alias dl="docker logs"
# Editing files
alias aliases="code ~/.bash_aliases"
alias vimrc="vim ~/.vimrc"
# NPM
alias npr="npm run"
# CD-ing to some commonly used folders
alias og="cd ~/Git"
alias sass_watch="sass --watch ./:./"
alias grep="grep --color=auto"
alias c="clear"
alias be="bundle exec"
alias serve="python -m http.server 9000"
##### Mac OS Specific #####
alias cask="brew cask"
alias fl="open -a ForkLift"
if [ -f ~/.bash_local_aliases ]; then
. ~/.bash_local_aliases
fi
-1
View File
@@ -1 +0,0 @@
source ~/.bashrc
-54
View File
@@ -1,54 +0,0 @@
[color]
diff = auto
status = auto
branch = auto
interactive = auto
ui = auto
[alias]
# Shorten some often used commands
b = branch
c = commit
co = checkout
com = checkout master
ss = status
s = status -s
ds = diff --staged
amend = commit --amend -c HEAD
oops = reset --soft HEAD~1
kris = pull --rebase
ignore = !git update-index --assume-unchanged
unignore = !git update-index --no-assume-unchanged
ignored = !git ls-files -v | grep "^[[:lower:]]"
undo = reset --soft HEAD^
squash = rebase --autostash -i
megasquash = "!f() { git rebase --autostash -i `git merge-base --fork-point HEAD master`; }; f"
# various pretty loggers from various places
l = log --pretty=oneline --abbrev-commit
lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative
lgg = log --graph --pretty=format:'%Creset %s' --abbrev-commit
lc = log ORIG_HEAD.. --stat --no-merges
# from http://blog.kfish.org/2010/04/git-lola.html
lol = log --graph --decorate --pretty=oneline --abbrev-commit
lola = log --graph --decorate --pretty=oneline --abbrev-commit --all
ll = log --graph --date=short
[push]
default = simple
[mergetool "sourcetree"]
cmd = /Applications/Sourcetree.app/Contents/Resources/opendiff-w.sh \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\"
trustExitCode = true
[diff]
tool = default-difftool
[difftool "default-difftool"]
cmd = code --wait --diff $LOCAL $REMOTE
[difftool "sourcetree"]
cmd = opendiff \"$LOCAL\" \"$REMOTE\"
path =
[filter "media"]
clean = git media clean %f
smudge = git media smudge %f
required = true
# local user config, usernames, etc
[include]
path=~/.gitconfig-local
+13 -2
View File
@@ -1,3 +1,14 @@
.DS_Store
.vim/bundle
.vim/undodir
home/.vim/bundle
home/.vim/undodir
home/.config/bash/bash-git-prompt
Brewfile.lock.json
Caskfile.lock.json
home/.config/alacritty/themes
__pycache__
*.pyc
*.local
*.log
+28
View File
@@ -0,0 +1,28 @@
[submodule "dotbot"]
path = dotbot
url = https://github.com/anishathalye/dotbot
ignore = dirty
[submodule "home/config/tmux/plugins/tpm"]
path = home/config/tmux/plugins/tpm
url = https://github.com/tmux-plugins/tpm
[submodule "home/config/bash/bash-git-prompt"]
path = home/config/bash/bash-git-prompt
url = https://github.com/magicmonty/bash-git-prompt.git
[submodule "home/config/zsh/plugins/zsh-git-prompt"]
path = home/config/zsh/plugins/zsh-git-prompt
url = https://github.com/zsh-git-prompt/zsh-git-prompt.git
[submodule "home/config/zsh/plugins/calc.plugin.zsh"]
path = home/config/zsh/plugins/calc.plugin.zsh
url = https://github.com/arzzen/calc.plugin.zsh.git
[submodule "home/config/zsh/plugins/zsh-vim-mode"]
path = home/config/zsh/plugins/zsh-vim-mode
url = https://github.com/softmoth/zsh-vim-mode.git
[submodule "home/config/zsh/plugins/zsh-better-npm-completion"]
path = home/config/zsh/plugins/zsh-better-npm-completion
url = https://github.com/lukechilds/zsh-better-npm-completion.git
[submodule "home/config/zsh/plugins/zsh-ssh"]
path = home/config/zsh/plugins/zsh-ssh
url = https://github.com/sunlei/zsh-ssh
[submodule "home/vim/bundle/Vundle.vim"]
path = home/vim/bundle/Vundle.vim
url = https://github.com/VundleVim/Vundle.vim.git
+70
View File
@@ -0,0 +1,70 @@
# Dotfiles
Personal dotfiles for macOS and Linux, managed with [dotbot](https://github.com/anishathalye/dotbot).
## Structure
```
dotfiles/
├── home/ # Config files symlinked into $HOME
│ ├── config/ # ~/.config/* (alacritty, tmux, zsh, bash, etc.)
│ ├── claude/ # Claude Code config
│ ├── bashrc
│ ├── gitconfig
│ ├── tmux.conf
│ ├── vim/
│ ├── vimrc
│ └── zshenv
├── macos/ # macOS-specific: Brewfile, Caskfiles, iTerm2 config
├── shell/ # Shell scripts (setup, platform installers, clone, ssh)
├── functions/ # Utility scripts
├── fonts/ # Fonts
├── dotbot/ # Dotbot submodule
├── dotbot.default.yaml # Main dotbot config (always applied)
├── dotbot.personal.yaml # Personal brew casks
├── dotbot.setup-once.yaml # One-time setup (macOS defaults, repo clones)
└── install # Main install script
```
## Installation
```sh
# Default setup (symlinks + shell plugins)
./install
# First-time macOS setup (run once: Xcode tools, macOS defaults, clone repos)
./install setup-once
# Personal apps (brew cask installs from Caskfile.personal)
./install personal
```
## How It Works
- `./install` runs dotbot with `dotbot.default.yaml` plus any additional configs passed as arguments
- Dotbot creates symlinks from `home/` into `$HOME`, creates directories, and runs shell commands. Folders in `home/config` are symlinked to `~/.config/<folder>`
- Platform detection: macOS runs `shell/install_apps_macos.sh`, Linux runs `shell/install_apps_linux.sh`
- Submodules: dotbot, tpm, Vundle.vim, and several zsh/bash plugins — run `git submodule update --init --recursive` if anything is missing
## Important: `.local` files
Files matching `*.local` (e.g. `.zshrc.local`, `.gitconfig.local`, `.bash_profile.local`) are **machine-specific overrides** that exist only on the local machine. They are gitignored and not part of this repo. Do not modify, reference, or suggest changes to `.local` files.
## Adding Config for a New Tool
1. Put the config file under `home/config/<tool>/` or directly in `home/`
2. Add a `link:` entry in `dotbot.default.yaml` pointing from the repo path to the target path in `$HOME`
3. If it needs a directory created first, add it under `create:` in the same file
4. Run `./install` to apply
## Key Configs
| File | Linked to |
|------|-----------|
| `home/zshenv` | `~/.zshenv` |
| `home/gitconfig` | `~/.gitconfig` |
| `home/config/alacritty/` | `~/.config/alacritty/` |
| `home/config/tmux/` | `~/.config/tmux/` |
| `home/config/vim/` | `~/.vim/` |
| `home/config/zsh/` | `~/.config/zsh/` |
| `home/config/bash/` | `~/.config/bash/` |
+1
View File
@@ -0,0 +1 @@
@AGENTS.md
-28
View File
@@ -1,28 +0,0 @@
linux: link bash_git_prompt tmux vim
macos: link bash_git_prompt brew cask tmux vim
link:
-ln -s ~/Git/dotfiles/.bash_aliases ~/.bash_aliases
-ln -s ~/Git/dotfiles/.bashrc ~/.bashrc
-ln -s ~/Git/dotfiles/.git-completion.bash ~/.git-completion.bash
-ln -s ~/Git/dotfiles/.gitconfig ~/.gitconfig
-ln -s ~/Git/dotfiles/.tmux.conf ~/.tmux.conf
brew:
sh ./macos/brewfile.sh
cask:
sh ./macos/caskfile.sh
tmux:
-git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
-ln -s ~/Git/dotfiles/.tmux/themes ~/.tmux/themes
bash_git_prompt:
-git clone https://github.com/magicmonty/bash-git-prompt.git ~/.bash-git-prompt --depth=1
-ln -s ~/Git/dotfiles/.git-prompt-colors.sh ~/.git-prompt-colors.sh
vim:
-ln -s ~/Git/dotfiles/.vim ~/.vim
-ln -s ~/Git/dotfiles/.vimrc ~/.vimrc
-git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
+26 -1
View File
@@ -1,4 +1,29 @@
dotfiles
========
Some of my dotfiles
Personal dotfiles for macOS and Linux, managed with [dotbot](https://github.com/anishathalye/dotbot).
## Install
```sh
git clone --recursive git@github.com:GeorgeSG/dotfiles.git ~/Git/dotfiles
cd ~/Git/dotfiles
./install
```
### macOS - first time setup
```sh
# Installs Xcode tools, sets macOS defaults, clones personal repos
./install setup-once
# Installs personal apps (Bitwarden, Discord, Spotify, etc.)
./install personal
```
### Linux
```sh
# Default install handles everything - installs apt packages, sets zsh as default shell
./install
```
Submodule
+1
Submodule dotbot added at 9cd5d073f2
+57
View File
@@ -0,0 +1,57 @@
- defaults:
link:
relink: true
- clean: ['~']
- create:
- ~/.config
- ~/.config/bash
- ~/.config/herdr
- ~/.config/tmux
- ~/.claude
- link:
# git
~/.gitconfig: home/gitconfig
~/.config/.gitignore_global: home/config/gitignore_global
# bash
~/.bashrc: home/bashrc
~/.config/bash/.bash_profile: home/config/bash/bash_profile
~/.git-completion.bash: home/config/bash/git-completion.bash
~/.git-prompt-colors.sh: home/config/bash/git-prompt-colors.sh
# apps
~/.config/alacritty: home/config/alacritty
~/.config/btop: home/config/btop
~/.config/herdr/config.toml: home/config/herdr/config.toml
# tmux
~/.tmux.conf: home/tmux.conf
~/.config/tmux/plugins: home/config/tmux/plugins
~/.config/tmux/themes: home/config/tmux/themes
~/.config/.aliases: home/config/aliases
# vim
~/.vim : home/vim
~/.vimrc: home/vimrc
# zsh
~/.zshenv: home/zshenv
~/.config/zsh: home/config/zsh
# claude code
~/.claude/skills: home/claude/skills
# mac os
~/.hushlogin:
if: '[ `uname` = Darwin ]'
path: macos/hushlogin
- shell:
- command: ./shell/setup.sh
stdin: true
stdout: true
stderr: true
+10
View File
@@ -0,0 +1,10 @@
## TODO:
## cask_personal using some variable?
- shell:
- stdin: true
stdout: true
command: >
if [ "$(uname)" = "Darwin" ]; then
brew bundle --file ./macos/Caskfile.personal
fi
+15
View File
@@ -0,0 +1,15 @@
- shell:
-
stdin: true
stdout: true
description: Setting Mac OS defaults
command: >
if [ "$(uname)" = "Darwin" ]; then
xcode-select -p &>/dev/null || xcode-select --install
./shell/macos_setup.sh
fi
-
command: ./shell/clone.sh
description: Cloning Git repos
stdout: true
quiet: false
+30
View File
@@ -0,0 +1,30 @@
#!/usr/bin/env bash
#
# Usage: extract <file>
# Description: extracts archived files / mounts disk images
# Note: .dmg/hdiutil is macOS-specific.
#
# credit: http://nparikh.org/notes/zshrc.txt
extract () {
if [ -f $1 ]; then
case $1 in
*.tar.bz2) tar -jxvf $1 ;;
*.tar.gz) tar -zxvf $1 ;;
*.bz2) bunzip2 $1 ;;
*.dmg) hdiutil mount $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar -xvf $1 ;;
*.tbz2) tar -jxvf $1 ;;
*.tgz) tar -zxvf $1 ;;
*.zip) unzip $1 ;;
*.ZIP) unzip $1 ;;
*.pax) cat $1 | pax -r ;;
*.pax.Z) uncompress $1 --stdout | pax -r ;;
*.rar) unrar x $1 ;;
*.Z) uncompress $1 ;;
*) echo "'$1' cannot be extracted/mounted via extract()" ;;
esac
else
echo "'$1' is not a valid file"
fi
}
+50
View File
@@ -0,0 +1,50 @@
#!/usr/bin/env bash
# set_alias_with_backup - A Bash function to alias a command while preserving the original.
#
# Usage:
# set_alias_with_backup <alias_name> <new_command>
#
# Parameters:
# alias_name: The alias name to override (e.g., "cat").
# new_command: The command to alias to (e.g., "bat").
#
# Behavior:
# - Checks if the new command exists.
# - If it exists and the backup alias (alias_name with an underscore appended) isn't set,
# it creates a backup alias pointing to the original command.
# - Sets the alias (alias_name) to use the new command.
#
# Example:
# To alias "bat" as "cat" and preserve the original "cat" as "cat_", run:
# set_alias_with_backup cat bat
set_alias_with_backup() {
local alias_name="$1"
local new_cmd="$2"
# Allow for extra parameters to be passed to the new command.
shift 2
local extra_params="$*"
# Check that both arguments are provided.
if [ -z "$alias_name" ] || [ -z "$new_cmd" ]; then
echo "Usage: set_alias_with_backup <alias_name> <new_command> [extra_params]"
return 1
fi
# Check that the new command exists.
if type "$new_cmd" >/dev/null 2>&1; then
# Define a backup alias by appending an underscore
# (e.g., "cat_" for "cat")
local backup_alias="${alias_name}_"
# If the backup alias isn't already set, create it pointing
# to the original command.
if ! type "$backup_alias" >/dev/null 2>&1; then
alias "$backup_alias"="$(which "$alias_name")"
fi
# Create the alias: e.g., alias "cat" to "bat" and pass any extra params.
alias "$alias_name"="$new_cmd $extra_params"
fi
}
+3
View File
@@ -0,0 +1,3 @@
[ -n "$PS1" ] && source ~/.config/bash/.bash_profile;
[ -f ~/.fzf.bash ] && source ~/.fzf.bash
+27
View File
@@ -0,0 +1,27 @@
[general]
import = [
"~/.config/alacritty/tomorrow-night-gardev.toml"
]
[window]
padding = { x = 16, y = 8 }
dynamic_title = true
option_as_alt = "OnlyLeft"
[scrolling]
history = 10000
multiplier = 3
[font]
normal = { family = "CaskaydiaCove Nerd Font Mono", style = "Regular" }
size = 14
offset = { y = 1 }
[cursor]
style = { shape = "Beam", blinking = "Always" }
[[hints.enabled]]
regex = "https?://[^\\s]+"
hyperlinks = true
command = { program = "open" }
mouse = { enabled = true }
@@ -0,0 +1,34 @@
# Colors (Tomorrow Night)
[colors]
draw_bold_text_with_bright_colors = true
# Default colors
[colors.primary]
background = '#27292b'
foreground = '#d0d2d0'
[colors.cursor]
text = '#27292b'
cursor = '#d0d2d0'
# Normal colors
[colors.normal]
black = '#777777'
red = '#ca807b'
green = '#c2c683'
yellow = '#edd090'
blue = '#98b0c7'
magenta = '#bba7c4'
cyan = '#a3c7c3'
white = '#fefefe'
# Bright colors
[colors.bright]
black = '#999999'
red = '#ca807b'
green = '#c2c683'
yellow = '#edd090'
blue = '#98b0c7'
magenta = '#bba7c4'
cyan = '#a3c7c3'
white = '#fefefe'
+32
View File
@@ -0,0 +1,32 @@
# Colors (Tomorrow Night)
# Default colors
[colors.primary]
background = '#1d1f21'
foreground = '#c5c8c6'
[colors.cursor]
text = '#1d1f21'
cursor = '#ffffff'
# Normal colors
[colors.normal]
black = '#1d1f21'
red = '#cc6666'
green = '#b5bd68'
yellow = '#e6c547'
blue = '#81a2be'
magenta = '#b294bb'
cyan = '#70c0ba'
white = '#373b41'
# Bright colors
[colors.bright]
black = '#666666'
red = '#ff3334'
green = '#9ec400'
yellow = '#f0c674'
blue = '#81a2be'
magenta = '#b77ee0'
cyan = '#54ced6'
white = '#282a2e'
+142
View File
@@ -0,0 +1,142 @@
##### Platform independent #####
# Files
alias ...="cd ../../"
alias ....="cd ../../../"
alias ll='ls -alhFG'
alias la='ls -AG'
alias l='ls -CFG'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
# CD-ing to some commonly used folders
alias og="cd ~/Git"
alias dotfiles="cd ~/Git/dotfiles"
# Editing files
alias raliases="source ~/.config/.aliases && source ~/.config/.aliases.local"
alias aliases="code ~/.config/.aliases"
alias laliases="code ~/.config/.aliases.local"
alias zshrc="code $ZDOTDIR/.zshrc"
alias lzshrc="code $ZDOTDIR/.zshrc.local"
alias vimrc="vim ~/.vimrc"
# NPM
alias npr="npm run"
# IP addresses & networking
alias ip="dig +short myip.opendns.com @resolver1.opendns.com"
alias localip="ipconfig getifaddr en0"
# Misc
alias c="clear"
alias be="bundle exec"
alias serve="python -m http.server 9000"
alias yda="youtube-dl -x --audio-format mp3"
# tmux
if type tmux >/dev/null 2>&1; then
alias tm="tmux -2 attach-session -t "default" || tmux -2 new-session -s \"default\""
alias tmv="tmux -2 attach-session -t "vscode" || tmux -2 new-session -s \"vscode\""
alias tmks="tmux kill-session -t"
alias tmas="tmux attach-session -t"
alias tmls="tmux list-sessions"
fi
# Docker
if type docker >/dev/null 2>&1; then
alias dc="docker compose"
alias de="docker exec"
alias dr="docker run"
alias db="docker build"
alias ds="docker stop"
alias drm="docker rm"
alias drmi="docker rmi"
alias dps="docker ps"
alias dl="docker logs"
fi
# Git Aliases
if type git >/dev/null 2>&1; then
alias g="git"
alias ga="git add"
alias gr="git rm"
alias gc="git commit"
alias gs="git status -s"
alias gss="git status"
alias gd="git diff"
alias gds="git diff --staged"
alias gco="git checkout"
alias gcom="git checkout master"
alias gpom="git pull origin master"
alias gbd="git branch -D"
alias gm="git mergetool"
alias gmc="git merge --continue"
alias grc="git rebase --continue"
alias gsf="git sf"
alias gaf="git af"
alias gmf="git mf"
fi
# Github CLI Aliases
if type gh >/dev/null 2>&1; then
alias gp="gh pr"
alias gps="gh pr status"
# my prs
alias prso="gh pr list --author @me --state open"
function prsob() {
gh pr list --author $1 --state open
}
function prscb() {
gh pr list --author $1 --state closed
}
fi
if type systemctl >/dev/null 2>&1; then
alias ssc="sudo systemctl"
alias sc="systemctl"
alias scs="systemctl status"
alias scst="systemctl start"
fi
# eza aliases, if available
if type eza >/dev/null 2>&1; then
eza_params=(
'--git' '--icons' '--group' '--group-directories-first'
'--time-style=relative'
)
alias ls='eza $eza_params -1'
alias l='eza --git-ignore $eza_params'
alias ll='eza --all --header --long $eza_params'
alias llm='eza --all --header --long --sort=modified $eza_params'
alias la='eza -lbhHigUmuSa'
alias lx='eza -lbhHigUmuSa@'
alias lt='eza --tree $eza_params'
alias tree='eza --tree $eza_params'
alias lA='ll --sort=acc'
alias lC='ll --sort=cr'
alias lM='ll --sort=mod'
alias lS='ll --sort=size'
alias lX='ll --sort=ext'
fi
set_alias_with_backup cat bat
set_alias_with_backup dig doggo
set_alias_with_backup df duf
set_alias_with_backup ping gping
set_alias_with_backup du dust --no-percent-bars
##### Mac OS Specific #####
if [ "$(uname)" = "Darwin" ]; then
alias fl="open -a ForkLift"
alias flushdns="sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder"
alias copyssh="pbcopy < $HOME/.ssh/id_ed25519.pub"
alias scr="open -b com.apple.ScreenSaver.Engine"
fi
+1
View File
@@ -0,0 +1 @@
.bash_profile.local
+21 -18
View File
@@ -9,6 +9,13 @@ shopt -s cdspell
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
# Enable some Bash 4 features when possible:
# * `autocd`, e.g. `**/qux` will enter `./foo/bar/baz/qux`
# * Recursive globbing, e.g. `echo **/*.txt`
for option in autocd globstar; do
shopt -s "$option" 2> /dev/null;
done;
# Disable Caret-C output
stty -ctlecho
@@ -37,20 +44,11 @@ HISTCONTROL=ignoreboth
# Aliases #
######################
# enable color support of ls and also add handy aliases
# enable color support of ls
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
fi
# some more ls aliases
alias ls='ls -hG'
alias ll='ls -alhFG'
alias la='ls -AG'
alias l='ls -CFG'
# Editor
export EDITOR='code -w'
@@ -67,17 +65,22 @@ export BASH_SILENCE_DEPRECATION_WARNING=1
# Sources & exports #
######################
if [ -f ~/.bash_aliases ]; then
source ~/.bash_aliases
if [ -f ~/.config/.aliases ]; then
source ~/.config/.aliases
fi
if [ -f ~/.bashrc_local ]; then
source ~/.bashrc_local
if [ -f ~/.config/.aliases.local ]; then
. ~/.config/.aliases.local
fi
if [ -f ~/.config/bash/.bash_profile.local ]; then
source ~/.config/bash/.bash_profile.local
fi
# bash-git prompt
if [ -f ~/.bash-git-prompt/gitprompt.sh ]; then
source ~/.bash-git-prompt/gitprompt.sh
if [ -f ~/.config/bash/bash-git-prompt/gitprompt.sh ]; then
source ~/.config/bash/bash-git-prompt/gitprompt.sh
fi
# enable programmable completion features (you don't need to enable
@@ -88,6 +91,6 @@ if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
fi
# Git completion
if [ -f ~/.git-completion.bash ]; then
source ~/.git-completion.bash
if [ -f ~/.config/bash/git-completion.bash ]; then
source ~/.config/bash/git-completion.bash
fi
+218
View File
@@ -0,0 +1,218 @@
#? Config file for btop v. 1.4.0
#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes.
#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes"
color_theme = "/usr/share/btop/themes/matcha-dark-sea.theme"
#* If the theme set background should be shown, set to False if you want terminal background transparency.
theme_background = False
#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false.
truecolor = True
#* Set to true to force tty mode regardless if a real tty has been detected or not.
#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols.
force_tty = False
#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets.
#* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box.
#* Use whitespace " " as separator between different presets.
#* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty"
presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty"
#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists.
#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift.
vim_keys = False
#* Rounded corners on boxes, is ignored if TTY mode is ON.
rounded_corners = True
#* Default symbols to use for graph creation, "braille", "block" or "tty".
#* "braille" offers the highest resolution but might not be included in all fonts.
#* "block" has half the resolution of braille but uses more common characters.
#* "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY.
#* Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view.
graph_symbol = "braille"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_cpu = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_mem = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_net = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_proc = "default"
#* Manually set which boxes to show. Available values are "cpu mem net proc" and "gpu0" through "gpu5", separate values with whitespace.
shown_boxes = "cpu mem net proc"
#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs.
update_ms = 2000
#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct",
#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly.
proc_sorting = "cpu lazy"
#* Reverse sorting order, True or False.
proc_reversed = False
#* Show processes as a tree.
proc_tree = False
#* Use the cpu graph colors in the process list.
proc_colors = True
#* Use a darkening gradient in the process list.
proc_gradient = True
#* If process cpu usage should be of the core it's running on or usage of the total available cpu power.
proc_per_core = True
#* Show process memory as bytes instead of percent.
proc_mem_bytes = True
#* Show cpu graph for each process.
proc_cpu_graphs = True
#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate)
proc_info_smaps = False
#* Show proc box on left side of screen instead of right.
proc_left = False
#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop).
proc_filter_kernel = False
#* In tree-view, always accumulate child process resources in the parent process.
proc_aggregate = False
#* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available.
#* Select from a list of detected attributes from the options menu.
cpu_graph_upper = "Auto"
#* Sets the CPU stat shown in lower half of the CPU graph, "total" is always available.
#* Select from a list of detected attributes from the options menu.
cpu_graph_lower = "Auto"
#* Toggles if the lower CPU graph should be inverted.
cpu_invert_lower = True
#* Set to True to completely disable the lower CPU graph.
cpu_single_graph = False
#* Show cpu box at bottom of screen instead of top.
cpu_bottom = False
#* Shows the system uptime in the CPU box.
show_uptime = True
#* Show cpu temperature.
check_temp = True
#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors.
cpu_sensor = "Auto"
#* Show temperatures for cpu cores also if check_temp is True and sensors has been found.
show_coretemp = True
#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core.
#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine.
#* Format "x:y" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries.
#* Example: "4:0 5:1 6:3"
cpu_core_map = ""
#* Which temperature scale to use, available values: "celsius", "fahrenheit", "kelvin" and "rankine".
temp_scale = "celsius"
#* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024.
base_10_sizes = False
#* Show CPU frequency.
show_cpu_freq = True
#* Draw a clock at top of screen, formatting according to strftime, empty string to disable.
#* Special formatting: /host = hostname | /user = username | /uptime = system uptime
clock_format = "%X"
#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort.
background_update = False
#* Custom cpu model name, empty string to disable.
custom_cpu_name = ""
#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ".
#* Begin line with "exclude=" to change to exclude filter, otherwise defaults to "most include" filter. Example: disks_filter="exclude=/boot /home/user".
disks_filter = ""
#* Show graphs instead of meters for memory values.
mem_graphs = True
#* Show mem box below net box instead of above.
mem_below_net = False
#* Count ZFS ARC in cached and available memory.
zfs_arc_cached = True
#* If swap memory should be shown in memory box.
show_swap = False
#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk.
swap_disk = False
#* If mem box should be split to also show disks info.
show_disks = True
#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar.
only_physical = True
#* Read disks list from /etc/fstab. This also disables only_physical.
use_fstab = True
#* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool)
zfs_hide_datasets = False
#* Set to true to show available disk space for privileged users.
disk_free_priv = False
#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view.
show_io_stat = True
#* Toggles io mode for disks, showing big graphs for disk read/write speeds.
io_mode = False
#* Set to True to show combined read/write io graphs in io mode.
io_graph_combined = False
#* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ".
#* Example: "/mnt/media:100 /:20 /boot:1".
io_graph_speeds = ""
#* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False.
net_download = 100
net_upload = 100
#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest.
net_auto = True
#* Sync the auto scaling for download and upload to whichever currently has the highest scale.
net_sync = True
#* Starts with the Network Interface specified here.
net_iface = ""
#* Show battery stats in top right if battery is present.
show_battery = False
#* Which battery to use if multiple are present. "Auto" for auto detection.
selected_battery = "Auto"
#* Show power stats of battery next to charge indicator.
show_battery_watts = False
#* Set loglevel for "~/.config/btop/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG".
#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info.
log_level = "WARNING"
+8
View File
@@ -0,0 +1,8 @@
(deflisten window :initial "..." "./lib/get-active-window.sh")
(defwidget active-window []
(box
:halign "center"
(label :class "bar-group" :text "${window?: 'none'}")
)
)
+51
View File
@@ -0,0 +1,51 @@
; (include "./bar/brightness.yuck")
(include "./bar/active-window.yuck")
(include "./bar/clock.yuck")
(include "./bar/kbd-layout.yuck")
(include "./bar/media.yuck")
(include "./bar/power.yuck")
(include "./bar/updates.yuck")
(include "./bar/weather.yuck")
(include "./bar/workspaces.yuck")
(defwidget bar-tray []
(box :class "bar-group"
:orientation "h"
:halign "end"
:space-evenly false
(systray :hexpand true :class "systray" :icon-size 18 :spacing 4)
(kbd-layout-tray-item)
(media-tray-item)
; (brightness)
(weather-tray-item)
(clock-tray-item)
(power-tray-item)
)
)
(defwidget bar [monitor-workspaces]
(box :class "bar" :orientation "h"
(workspaces :monitor-workspaces monitor-workspaces)
(active-window)
(box :orientation "h" :halign "end" :space-evenly false :spacing 8
(pacman-updates-widget)
(bar-tray)
)
)
)
(defwindow bar [monitor monitor-workspaces]
:monitor monitor
:geometry (geometry :x "0%"
:y "4px"
:width "99.7%"
:height "32px"
:anchor "top center"
)
:exclusive true
:windowtype "dock"
:wm-ignore false
:focusable false
(bar :monitor-workspaces monitor-workspaces)
)
+9
View File
@@ -0,0 +1,9 @@
; this is taking up too much CPU time
(defpoll brightness-1 :interval "2s" "ddcutil -d 1 getvcp 10 | awk '{ split($9, a, \",\"); print a[1]}'")
(defwidget brightness []
(eventbox :onscroll "./lib/change-brightness.sh {} ${brightness-1 + 0}"
(label :text "󰃞 ${substring(brightness-1, 0, 2)}")
)
)
+30
View File
@@ -0,0 +1,30 @@
(defpoll date-time :interval "5s" "./lib/date-time.sh")
(defwidget date []
(box :class "date"
"${date-time.date}"
)
)
(defwidget day []
(box :class "day"
"${date-time.day}"
)
)
(defwidget time []
(box :class "time"
"${date-time.time}"
)
)
(defwidget clock-tray-item []
(box :class "clock-tray-item"
:orientation "h"
:space-evenly false
:valign "center"
(date)
(day)
(time)
)
)
+17
View File
@@ -0,0 +1,17 @@
(deflisten keyboard-layout :initial "en" "./lib/get-kb-layout.sh")
(defwidget kbd-layout-tray-item []
(box
:orientation "h"
:space-evenly false
:halign "center"
:class "interactive kbd-layout-tray-item"
(eventbox :cursor "pointer" :class "interactive"
(button
:class "kbd-layout"
:onclick "hyprctl switchxkblayout usb-hid-keyboard next"
keyboard-layout
)
)
)
)
+99
View File
@@ -0,0 +1,99 @@
(defpoll mediastatus :interval "1s" "./lib/media-status.sh")
(defpoll audio-sinks :interval "1s" "pactl -f json list sinks")
(defpoll audio-info :initial "{}" :interval "1s" "pactl -f json info")
(defpoll volume-level :interval "1s" "./lib/get-volume-level.sh")
(defwidget media-tray-item []
(box :orientation "h" :space-evenly false :halign "end" :class "media-tray-item"
(eventbox
:cursor "pointer"
:class "interactive"
:onscroll "./lib/change-volume.sh {}"
:onclick "eww open --toggle media-menu"
:onmiddleclick "playerctl play-pause"
(box :class "volume-tray-icon"
(label :class "volume-icon" :text {volume-level > 66 ? "" : volume-level > 0 ? "" : ""})
(label :text "${volume-level}%")
))
)
)
(defwidget audio-source-selector []
(box :orientation "v" :valign "start" :class "audio-source-selector"
(box :class "title"
(label :halign "start" :text "output source")
)
(for sink in audio-sinks
(eventbox :cursor "pointer"
(button
:halign "start"
:class "audio-source interactive ${sink.name == audio-info.default_sink_name ? "active" : ""}"
:onclick "pactl set-default-sink ${sink.index}"
"󰓃 ${sink.description}"
)
)
)
)
)
(defwidget media-player []
(box :orientation "v" :space-evenly false :class "media-player" :valign "top"
(label :class "title" :text "${mediastatus.artist} - ${mediastatus.title}" :show-truncated false)
(label :class "album" :text "${mediastatus.album}" :show-truncated false)
(box :class "media-cover" :style "background: url('${mediastatus.artUrl}'); background-size: cover;" :height 300)
(box :class "media-controls" :spacing 12 :space-evenly false :halign "center"
(eventbox :cursor "pointer"
(button :class "media-button" :class "media-button shuffle ${mediastatus.shuffle == "On" ? "active" : ""}" :onclick "playerctl shuffle toggle" "")
)
(eventbox :cursor "pointer"
(button :class "media-button" :onclick "playerctl previous" "")
)
(eventbox :cursor "pointer"
(button
:class "media-button ${mediastatus.status == "Playing" ? "pause" : "play"}"
:onclick "./lib/media-play-pause.sh"
"${mediastatus.status == "Playing" ? "" : ""}"
)
)
(eventbox :cursor "pointer"
(button :class "media-button" :onclick "playerctl next" "")
)
(eventbox :cursor "pointer"
(button
:class "media-button loop ${mediastatus.loop != "None" ? "active" : ""}"
:onclick "playerctl loop ${mediastatus.loop == "Playlist" ? "track" : mediastatus.loop == "Track" ? "none" : "playlist"}"
"${mediastatus.loop == "Track" ? "󰑘" : "󰑖"}"
)
)
)
)
)
(defwindow media-menu
:monitor 0
:namespace "media-menu"
:stacking "overlay"
:geometry (geometry :x "8px" :y "8px" :width "400px" :anchor "top right")
:wm-ignore false
:focusable false
(box :class "eww-overlay media-menu" :orientation "v" :space-evenly false
(media-player)
(audio-source-selector)
(eventbox :cursor "pointer"
(button :class "interactive btn" :halign "start" :onclick "eww open --toggle media-menu & pavucontrol &" "󰴸 Open PulseAudio control")
)
; TODO: For some reason audio-info is null if I don't invoke it outside the for. Investigate.x
(label :class "hidden" :text "Default: ${audio-info.default_sink_name}")
)
)
+31
View File
@@ -0,0 +1,31 @@
(defwidget power-tray-item []
(eventbox :cursor "pointer"
(button :class "power-button-tray-item interactive" :onclick "eww open --toggle power-menu" "󰐥")
)
)
(defwindow power-menu
:namespace "power-menu"
:monitor 0
:stacking "overlay"
:geometry (geometry :x "50%"
:y "50%"
:width "30%"
:height "200px"
:anchor "center"
)
(box :class "power-menu" :orientation "h"
(eventbox :cursor "pointer"
(button :class "power-menu-item first" :onclick "eww open --toggle power-menu & ./lib/lock.sh" "")
)
(eventbox :cursor "pointer"
(button :class "power-menu-item" :onclick "eww open --toggle power-menu & ./lib/logout.sh" "󰈆")
)
(eventbox :cursor "pointer"
(button :class "power-menu-item" :onclick "eww open --toggle power-menu & ./lib/reboot.sh" "")
)
(eventbox :cursor "pointer"
(button :class "power-menu-item" :onclick "eww open --toggle power-menu & ./lib/shutdown.sh" "")
)
)
)
+35
View File
@@ -0,0 +1,35 @@
(defpoll pacman-updates :initial 0 :interval "60s" "checkupdates | wc -l")
(defpoll pacman-updates-full :interval "60s" "checkupdates")
(defwidget pacman-updates-widget []
(box :class "pacman-update-widget"
(eventbox
:class "pacman-update-widget-inner ${pacman-updates > 0 ? 'has-updates' : ''}"
:cursor "pointer"
:onclick "${pacman-updates > 0 ? 'alacritty -e sudo pacman -Syu &' : ''}"
:onmiddleclick "eww open --toggle updates-menu"
(label :class "update-text" :text " ${pacman-updates}")
)
)
)
(defwindow updates-menu
:namespace "updates-menu"
:monitor 0
:stacking "overlay"
:geometry (geometry :x "50%"
:y "40%"
:width "400px"
:height "200px"
:anchor "center"
)
(box :class "updates-menu" :orientation "v" :space-evenly true
(label :class "pacman-updates-menu-title" :text "Pacman Updates:  ${pacman-updates}")
(label :text "${pacman-updates-full}")
(eventbox :cursor "pointer" :class "interactive"
(button :class "btn" :onclick "alacritty -e sudo pacman -Syu &" "Update")
)
)
)
+14
View File
@@ -0,0 +1,14 @@
(deflisten weather :initial "{'temp': 'n/a', 'desc': 'n/a'}" "./lib/weather.py")
(defwidget weather-tray-item []
(box :class "weather-tray-item"
:orientation "h"
:space-evenly false
(eventbox :cursor "pointer" :class "interactive weather" :onclick "xdg-open https://www.sinoptik.bg/sofia-bulgaria-100727011"
(box :space-evenly false
(label :class "weather-temp" :text "${weather.icon} ${weather.temp}")
(label :class "weather-desc" :text "${weather.desc}")
)
)
)
)
+15
View File
@@ -0,0 +1,15 @@
(deflisten active-workspace :initial "." "./lib/get-active-workspace.sh")
(defwidget workspaces [?monitor-workspaces]
(box :class "workspaces"
:orientation "h"
:space-evenly true
:halign "start"
:spacing 8
(for workspace in monitor-workspaces
(eventbox :cursor "pointer"
(button :class "interactive workspace ${active-workspace == workspace ? "active" : ""}" :onclick "hyprctl dispatch workspace ${workspace}" "${workspace}")
)
)
)
)
+98
View File
@@ -0,0 +1,98 @@
$font: "SF Pro Light";
$bg: rgba(0, 0, 0, 0.5);
$fg: #dedede;
$menu-border: rgba(255, 255, 255, 0.1);
$bar-gap: 8px;
* {
all: unset;
font-family: $font;
}
@import "./styles/media-menu.scss";
@import "./styles/power-menu.scss";
@import "./styles/updates-menu.scss";
@import "./styles/tray.scss";
.systray menu {
font-family: $font;
border-radius: 10px;
background-color: rgba(30, 30, 30);
color: $fg;
padding: 5px 0px;
> menuitem {
padding: 5px 10px;
&:disabled label {
color: gray;
}
&:hover {
background-color: #0e4679;
}
}
separator {
background-color: rgb(60, 60, 60);
padding-top: 1px;
&:last-child {
padding: unset;
}
}
}
.eww-overlay {
background-color: $bg;
border: 3px solid $menu-border;
border-radius: 8px;
padding: 16px 48px;
}
.bar-group {
background-color: $bg;
border-radius: 8px;
padding: 0 calc($bar-gap * 1.5);
color: $fg;
> :not(:first-child) {
margin-left: $bar-gap;
}
}
.interactive {
border-radius: 4px;
transition: background-color 0.4s ease;
&.active {
background-color: $fg;
color: $bg;
font-weight: bold;
}
&:not(.active):hover {
background-color: rgba(255, 255, 255, 0.2);
}
}
.btn {
border-radius: 4px;
padding: 10px 15px 10px 10px;
}
.hidden {
opacity: 0;
}
.workspace {
padding: 0 8px;
&.active {
background-color: $fg;
color: $bg;
font-weight: bold;
}
}
+26
View File
@@ -0,0 +1,26 @@
(include "./bar/bar.yuck")
; a hacky solution for moving the windows on my second monitor a bit up so I can see them :D
(defwindow monitor-bump [monitor]
:monitor monitor
:geometry (geometry :x "0" :y "0" :width "100%" :height "120" :anchor "bottom center")
:exclusive true
:windowtype "dock"
:wm-ignore true
:focusable false
(box " ")
)
; (defvar r_bar_systray false)
; (defwidget w_bar_tray[] (revealer
; :reveal r_bar_systray
; :transition "slideleft"
; (eventbox :class "tray" :spacing 20 :space-evenly false
; (box :class "widget" :spacing 0 :space-evenly false
; (systray :icon-size 18)
; )
; )
; )
; )
+1
View File
@@ -0,0 +1 @@
secrets.py
+17
View File
@@ -0,0 +1,17 @@
#!/usr/bin/env sh
direction=$1
current=$2
if [[ $direction == "down" ]]; then
target=$(($current+1))
if [[ $target == 11 ]]; then
exit 0
fi
hyprctl dispatch workspace $target
elif [[ $direction == "up" ]]; then
target=$(($current-1))
hyprctl dispatch workspace $target
else
target=$1
hyprctl dispatch workspace $target
fi
+10
View File
@@ -0,0 +1,10 @@
#!/usr/bin/env sh
case $1 in
up)
ddcutil -d 1 setvcp 10 $(($2 + 10))
;;
down)
ddcutil -d 1 setvcp 10 $(($2 - 10))
;;
esac
+9
View File
@@ -0,0 +1,9 @@
#!/usr/bin/env sh
if [[ $1 == "up" ]]; then
wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
elif [[ $1 == "down" ]]; then
wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
else
wpctl set-volume @DEFAULT_AUDIO_SINK@ $1
fi
+14
View File
@@ -0,0 +1,14 @@
#!/usr/bin/env sh
day=$(date "+%a")
date=$(date "+%-d")
time=$(date "+%H:%M")
JSON_STRING=$(jq -n \
--arg day "$day" \
--arg date "$date" \
--arg time "$time" \
'{day: $day, date: $date, time: $time}')
echo $JSON_STRING
+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/env sh
hyprctl activewindow -j | jq --raw-output .title
socat -u UNIX-CONNECT:$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock - | stdbuf -o0 awk -F '>>|,' '/^activewindow>>/{print $3}'
+6
View File
@@ -0,0 +1,6 @@
##!/usr/bin/env sh
hyprctl monitors -j | jq '.[] | select(.focused) | .activeWorkspace.id'
socat -u UNIX-CONNECT:$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock - |
stdbuf -o0 awk -F '>>|,' -e '/^workspace>>/ {print $2}' -e '/^focusedmon>>/ {print $3}'
+17
View File
@@ -0,0 +1,17 @@
##!/usr/bin/env sh
socat -u UNIX-CONNECT:$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock - | while read -r line; do
if [[ $line == "activelayout>>"* ]]; then
split=(${line//>>/ })
lang=(${split[1]//,/ })
language=${lang[1]}
lang_code=${language:0:2}
lang_code_lower=$(echo $lang_code | tr '[:upper:]' '[:lower:]')
if [[ $lang_code_lower == "bu" ]]; then
lang_code_lower="bg"
fi
echo $lang_code_lower
fi
done
+24
View File
@@ -0,0 +1,24 @@
#!/usr/bin/env sh
volume=$(wpctl get-volume @DEFAULT_AUDIO_SINK@)
#todo fix 100% case
volume_value=$(echo $volume | cut -d':' -f2)
if [ $volume_value == "0.00" ]; then
echo "0"
exit 0
fi
if [[ $volume_value =~ ^" 1" ]]; then
# starts with a space - trim
trimmed=$( echo $volume_value | cut -c1- )
echo "${trimmed//.}"
exit 0
fi
volume_percent=$(echo $volume_value | cut -d'.' -f2)
echo $volume_percent
+3
View File
@@ -0,0 +1,3 @@
#!/usr/bin/env sh
hyprlock
+3
View File
@@ -0,0 +1,3 @@
#!/usr/bin/env sh
loginctl kill-user $USER
+7
View File
@@ -0,0 +1,7 @@
#!/usr/bin/env sh
if [[ $(playerctl status) == "Playing" ]]; then
playerctl pause
else
playerctl play
fi
+23
View File
@@ -0,0 +1,23 @@
#!/usr/bin/env sh
status=$(playerctl status 2>/dev/null)
artist=$(playerctl metadata -f "{{artist}}" 2>/dev/null)
title=$(playerctl metadata -f "{{title}}" 2>/dev/null)
album=$(playerctl metadata -f "{{album}}" 2>/dev/null)
artUrl=$(playerctl metadata -f "{{mpris:artUrl}}" 2>/dev/null)
length=$(playerctl metadata -f "{{duration(mpris:length)}}" 2>/dev/null)
shuffle=$(playerctl shuffle 2>/dev/null)
loop=$(playerctl loop 2>/dev/null)
JSON_STRING=$(jq -n \
--arg status "$status" \
--arg artist "$artist" \
--arg title "$title" \
--arg album "$album" \
--arg artUrl "$artUrl" \
--arg length "$length" \
--arg shuffle "$shuffle" \
--arg loop "$loop" \
'{status: $status, artist: $artist, title: $title, album: $album, artUrl: $artUrl, length: $length, shuffle: $shuffle, loop: $loop}')
echo $JSON_STRING
+10
View File
@@ -0,0 +1,10 @@
#!/usr/bin/env python
from hyprsocket import run_on_line
def get_kb_layout(line):
print(line)
run_on_line(get_kb_layout)
@@ -0,0 +1,24 @@
import socket
import os, os.path
def get_socket_path():
XDG_RUNTIME_DIR = os.getenv("XDG_RUNTIME_DIR")
HYPRLAND_INSTANCE_SIGNATURE = os.getenv("HYPRLAND_INSTANCE_SIGNATURE")
socket_path = os.path.join(
XDG_RUNTIME_DIR, "hypr", HYPRLAND_INSTANCE_SIGNATURE, ".socket2.sock"
)
return socket_path
def run_on_line(method):
server = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
server.connect(get_socket_path())
while True:
data_chunk = server.recv(4096)
if data_chunk:
line = data_chunk.decode("utf-8")
method(line)
+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/env sh
systemctl reboot
+3
View File
@@ -0,0 +1,3 @@
#!/usr/bin/env sh
shutdown now
+62
View File
@@ -0,0 +1,62 @@
#!/usr/bin/env python
import requests, json, sys, time
from secrets import WEATHER_API_TOKEN, WEATHER_CITY
UNITS = "metric"
LANG = "en"
def get_icon(code):
icons = {
"01d": "",
"01n": "",
"02d": "",
"02n": "",
"03d": "󰖐",
"03n": "󰖐",
"04d": "",
"04n": "",
"09d": "",
"09n": "",
"10d": "",
"10n": "",
"11d": "",
"11n": "",
"13d": "󰖘",
"13n": "󰖘",
"50d": "",
"50n": "",
}
try:
return icons[code]
except KeyError:
return None
def main():
response = requests.get(
f"https://api.openweathermap.org/data/2.5/weather?q={WEATHER_CITY}&appid={WEATHER_API_TOKEN}&lang={LANG}&units={UNITS}"
).json()
data = {
"icon": get_icon(response["weather"][0]["icon"]),
"temp": str(round(response["main"]["temp"])) + "°",
"desc": response["weather"][0]["description"].capitalize(),
}
return data
if __name__ == "__main__":
try:
while True:
try:
sys.stdout.write(json.dumps(main()) + "\n")
sys.stdout.flush()
time.sleep(1800)
except requests.exceptions.ConnectionError:
print("Connection error! Retrying...")
time.sleep(2)
except KeyboardInterrupt:
exit(0)
+46
View File
@@ -0,0 +1,46 @@
#!/usr/bin/env sh
## NOTE: This file is unused currently
NUMBER_OF_WORKSPACES=6
window_class() {
echo `hyprctl activewindow -j | jq --raw-output .class`
}
window_title() {
echo `hyprctl activewindow -j | jq --raw-output .title`
}
workspaces (){
WORKSPACE_WINDOWS=$(hyprctl workspaces -j | jq 'map({key: .id | tostring, value: .windows}) | from_entries')
seq 1 $NUMBER_OF_WORKSPACES | jq --argjson windows "${WORKSPACE_WINDOWS}" --slurp -Mc 'map(tostring) | map({id: ., windows: ($windows[.]//0)})'
}
if [[ $1 == 'workspaces' ]]; then
echo "{ \"workspaces\": $(workspaces), \"active\": 1, \"active_empty\": true }"
socat -u UNIX-CONNECT:$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock - | while read -r line; do
active=$(eww get workspaces | jq .active)
if [[ ${line:0:9} == 'workspace' ]]; then
active=${line:11:2}
fi
active_empty='true'
let "i = $active - 1"
if [[ $(workspaces | jq --raw-output .[$i].windows) -gt 0 ]]; then active_empty='false'; fi
eww update workspaces="{
\"workspaces\": $(workspaces),
\"active\": $active,
\"active_empty\": $active_empty
}"
eww update dock_reveal="$active_empty"
done
fi
if [[ $1 == 'window' ]]; then
window_class
socat -u UNIX-CONNECT:$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock - | while read -r line; do
window_class
done
fi
+78
View File
@@ -0,0 +1,78 @@
.media-menu {
.audio-source-selector {
margin-top: 16px;
margin-bottom: 8px;
.title {
border-bottom: 1px solid $fg;
padding: 10px;
margin-bottom: 8px;
}
.audio-source {
padding-left: 10px;
padding-right: 15px;
}
}
.media-player {
.title {
font-weight: bold;
font-size: 15px;
}
.album {
font-size: 13px;
color: #aaa;
}
.media-cover {
margin-top: 12px;
border-radius: 16px;
border: 2px solid $menu-border;
}
.media-controls {
margin-top: 16px;
}
.media-button {
padding: 8px 13px;
border-radius: 100%;
border: 2px solid $menu-border;
transition: all 0.4s ease;
&.shuffle {
padding-left: 10px;
padding-right: 16px;
&.active {
background-color: $fg;
color: $bg;
}
}
&.loop {
padding-left: 12px;
padding-right: 14px;
&.active {
background-color: $fg;
color: $bg;
}
}
&.pause {
background-color: $fg;
color: $bg;
}
&:hover {
background-color: $fg;
border-color: $fg;
color: $bg;
}
}
}
}
+28
View File
@@ -0,0 +1,28 @@
.power-menu {
background-color: $bg;
border: 3px solid $menu-border;
border-radius: 32px;
.power-menu-item {
font-size: 44px;
background-color: $bg;
border-radius: 20px;
border: 1px solid $menu-border;
margin: 16px 0;
margin-right: 16px;
padding-right: 4px; /* this makes sure icons from nerd font are centered */
transition:
background-color 0.4s ease,
color 0.4s ease;
color: $fg;
&:hover {
background-color: $fg;
color: $bg;
}
&.first {
margin-left: 16px;
}
}
}
+88
View File
@@ -0,0 +1,88 @@
$tray-item-interactive-margin: 6px 0;
.pacman-update-widget {
margin: $tray-item-interactive-margin;
.pacman-update-widget-inner {
border-radius: 4px;
&.has-updates {
background-color: rgb(228, 137, 137);
color: #fff;
font-weight: bold;
transition: background-color 0.4s ease;
&:hover {
background-color: rgb(187, 100, 100);
}
.update-text {
padding: 0 8px;
}
}
}
}
.kbd-layout-tray-item {
margin: $tray-item-interactive-margin;
.kbd-layout {
padding: 0 8px;
border-radius: 4px;
}
}
.media-tray-item {
margin: $tray-item-interactive-margin;
.volume-tray-icon {
padding-right: 6px;
.volume-icon {
padding-right: 6px;
}
}
}
.clock-tray-item {
margin-right: 8px;
.date {
border: 1px solid rgba(255, 255, 255, 0.3);
border-top: 4px solid rgba(255, 255, 255, 0.6);
padding: 0 8px;
border-radius: 4px;
margin: 8px 0;
font-size: 12px;
}
.day {
margin-left: 6px;
}
.time {
margin-left: 4px;
}
}
.weather-tray-item {
margin: $tray-item-interactive-margin;
.weather-temp {
padding-left: 8px;
}
.weather-desc {
padding-left: 4px;
padding-right: 8px;
}
}
.power-button-tray-item {
margin: $tray-item-interactive-margin;
padding-right: 8px;
padding-left: 8px;
margin-left: 4px;
font-size: 18px;
}
+6
View File
@@ -0,0 +1,6 @@
.updates-menu {
background-color: $bg;
border: 3px solid $menu-border;
border-radius: 32px;
padding: 16px 32px;
}
+33
View File
@@ -0,0 +1,33 @@
# Compiled source #
###################
*.class
*.dll
*.exe
*.o
*.so
*.pyc
# Editing tools and IDEs #
##########################
.sw[a-p]
[._]*.sw[a-p]
*~
~*
\#*\#
\.#*
.ipynb_checkpoints/
# Logs and databases #
######################
*.log
*.sqlite
# OS generated files #
######################
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
+136
View File
@@ -0,0 +1,136 @@
# herdr configuration
# Place this file at ~/.config/herdr/config.toml
# Apply changes with: herdr server reload-config
# Show first-run notification setup on startup.
# Missing also shows onboarding; set false after you've chosen.
onboarding = false
[theme]
# Built-in themes: catppuccin, terminal, tokyo-night, dracula, nord,
# gruvbox, one-dark, solarized, kanagawa, rose-pine,
# vesper
name = "one-dark"
# Follow host terminal light/dark appearance and switch Herdr UI themes.
# Existing manual behavior is unchanged unless this is true.
# auto_switch = false
# dark_name = "catppuccin"
# light_name = "catppuccin-latte"
# Override individual color tokens on top of the base theme.
# Accepts: hex (#rrggbb), named colors, rgb(r,g,b), or panel_bg = "reset"
# [theme.custom]
# panel_bg = "reset"
# accent = "#f5c2e7"
# red = "#ff6188"
# green = "#a6e3a1"
[terminal]
# Executable used for new interactive panes.
# Empty means $SHELL, then /bin/sh.
default_shell = "/bin/zsh"
[update]
# Update channel used by background version checks and `herdr update`.
# Use "stable" for normal releases or "preview" for opt-in preview builds.
channel = "stable"
[keys]
prefix = "ctrl+a"
# Prefix-mode actions
help = "prefix+?"
settings = "prefix+shift+s" # default prefix+s is used for split_horizontal below
# detach = "prefix+q"
# reload_config = "prefix+shift+r"
# open_notification_target = "prefix+o"
# workspace_picker = "prefix+w"
# goto = "prefix+g"
# new_workspace = "prefix+shift+n"
# new_worktree = "prefix+shift+g"
# open_worktree = "" # optional, unset by default
# remove_worktree = "" # optional, unset by default; opens confirmation
# rename_workspace = "prefix+shift+w"
# close_workspace = "prefix+shift+d"
previous_workspace = "prefix+ctrl+k"
next_workspace = "prefix+ctrl+j"
# previous_agent = "" # optional, unset by default
# next_agent = "" # optional, unset by default
# focus_agent = "" # optional indexed binding, e.g. "prefix+alt+1..9"
# remote_image_paste = "ctrl+v" # only active in herdr --remote; empty disables raw-key image paste
new_tab = "prefix+c"
rename_tab = ["prefix+comma", "prefix+shift+t"]
previous_tab = ["prefix+p", "prefix+ctrl+h"]
next_tab = ["prefix+n", "prefix+ctrl+l"]
switch_tab = "prefix+1..9"
switch_workspace = "prefix+alt+1..9"
close_tab = "prefix+shift+x"
rename_pane = ["prefix+shift+p", "prefix+<"] # prefix+shift+comma
# edit_scrollback = "prefix+e"
focus_pane_left = "prefix+h"
focus_pane_down = "prefix+j"
focus_pane_up = "prefix+k"
focus_pane_right = "prefix+l"
# cycle_pane_next = "prefix+tab"
# cycle_pane_previous = "prefix+shift+tab"
# last_pane = "" # optional, unset by default; bind e.g. "prefix+tab" for global back-and-forth
split_vertical = ["prefix+v", "prefix+|"]
split_horizontal = ["prefix+s", "prefix+minus"]
# close_pane = "prefix+x"
# zoom = "prefix+z" # legacy alias: fullscreen
resize_mode = "prefix+r"
toggle_sidebar = "prefix+b"
copy_mode = ["prefix+[", "prefix+esc"]
# [worktrees]
# directory = "~/.herdr/worktrees"
[ui]
# Ask for a tab name before creating a new tab.
prompt_new_tab_name = true
# Draw borders around split panes.
pane_borders = true
# Keep split panes visually separated instead of sharing divider borders.
pane_gaps = true
# Show detected/reported agent labels in split pane borders when no manual pane name is set.
show_agent_labels_on_pane_borders = true
# Agent panel ordering: "spaces" (grouped by space) or "priority" (attention queue).
# "workspaces" is accepted as an alias for "spaces".
agent_panel_sort = "spaces"
# Accent color for highlights, borders, and navigation UI.
# Accepts: hex (#89b4fa), named colors (cyan, blue, magenta), or rgb(r,g,b)
accent = "cyan"
[ui.toast]
delivery = "herdr"
[ui.toast.herdr]
position = "bottom-right"
[ui.toast.clipboard]
enabled = true
position = "bottom-center"
[experimental]
# Save recent pane screen history across full server restarts.
pane_history = false
[advanced]
scrollback_limit_bytes = 33554432 # 32 MiB ~ 50k lines (tmux history-limit)
## Differences to tmux
# - prefix+n changed meaning: in tmux it was swap-pane -U; in herdr it's next tab. Pane swapping is prefix+shift+h/j/k/l - which was pane resize in your tmux. Resizing is now a mode: prefix+r.
# - No equivalents: window reordering (</>), paste buffers (b/p/P), vi mode-keys, base-index, escape-time, focus-events, aggressive-resize. Config reload is herdr server reload-config instead of prefix+r. The status-bar cpu/mem/clock plugins are replaced by herdr's sidebar; tmux-fzf's pickers map to prefix+w (workspace picker) and prefix+g (goto).
+13
View File
@@ -0,0 +1,13 @@
#################
### AUTOSTART ###
#################
exec-once = eww d
exec-once = ~/.config/hypr/scripts/run-eww.sh
exec-once = swww-daemon --format xrgb &
exec-once = swaync &
exec-once = hypridle &
exec-once = blueman-applet & blueman-tray & nm-applet &
+129
View File
@@ -0,0 +1,129 @@
####################
### KEYBINDINGSS ###
####################
$mainMod = SUPER
$terminal = alacritty
$fileManager = nautilus
$menu = rofi -show combi -combi-modes "window,run,ssh" -modes combi
$emojiMenu = rofi -modi emoji -show emoji
bind = $mainMod, R, exec, ~/.config/hypr/scripts/run-eww.sh
bind = $mainMod, E, exec, $fileManager # E - file manager
bind = $mainMod, F, fullscreen # F - fullscreen
bind = $mainMod, D, togglesplit, # D - toggle split
bind = $mainMod, M, exit # M - exit
bind = $mainMod, Q, killactive # Q - kill active window
bind = alt, Q, killactive # alt + Q - kill active window
bind = $mainMod, S, swapactiveworkspaces, 0 1 # S - swap monitor workspaces
bind = $mainMod, T, exec, $terminal # T - terminal
bind = $mainMod, V, togglefloating # V - toggle floatin
bind = $mainMod shift, L, exec, hyprlock # super + {shift + L - lock screen
bind = $mainMod, F1, exec, ~/.config/hypr/scripts/game-mode.sh # F1 - game mode
bind = $mainMod, F2, exec, eww open --toggle monitor-bump # F2 - monitor bump
# rudimentary Alt+Tab and Alt+Shift+Tab
bind = alt, tab, cyclenext
bind = alt shift, tab, cyclenext, prev
# rcmd emulation
$rcmd = SUPER ALT
bind = $rcmd, f, focuswindow, firefox
bind = $rcmd, c, focuswindow, class:Code
bind = $rcmd, a, focuswindow, class:Alacritty
bind = $rcmd, t, focuswindow, telegram
bind = $rcmd, d, focuswindow, class:Todoist
bind = alt, space, exec, $menu # alt+space - rofi a la spotlight
bind = alt super shift, e, exec, $emojiMenu # alt+super+shift+e - emoji menu
bind = $mainMod, code:49, focuscurrentorlast
bind = ctrl shift super, N, exec, swaync-client --toggle-panel # N - toggle swaync panel
# eww
bind = ctrl shift super, Q, exec, eww open --toggle power-menu
bind = ctrl shift super, M, exec, eww open --toggle media-menu
bind = ctrl shift super, R, exec, ~/.config/hypr/scripts/run-apps.sh
bind = ctrl shift super, W, exec, ~/Scripts/wallpaper # change wallpapers
# screenshots
# TODO: consider switching away to different shortcuts
bind = alt shift, 3, exec, ~/.config/hypr/scripts/screenshots/capture-screen.sh
bind = ctrl alt shift, 3, exec, ~/.config/hypr/scripts/screenshots/copy-screen.sh
bind = alt shift, 4, exec, ~/.config/hypr/scripts/screenshots/capture-area.sh
bind = ctrl alt shift, 4, exec, ~/.config/hypr/scripts/screenshots/copy-area.sh
### Window Management
# Move focus with mainMod + hjkl
bind = $mainMod, h, movefocus, l
bind = $mainMod, l, movefocus, r
bind = $mainMod, k, movefocus, u
bind = $mainMod, j, movefocus, d
# move to prev / next monitor
bind = ctrl alt super, left, movewindow, mon:+1
bind = ctrl alt super, right, movewindow, mon:-1
# resize with ctrl super shift hjkl
bind = $mainMod ctrl shift, L, resizeactive, 30 0
bind = $mainMod ctrl shift, H, resizeactive, -30 0
bind = $mainMod ctrl shift, K, resizeactive, 0 30
bind = $mainMod ctrl shift, J, resizeactive, 0 -30
# move with ctrl super hjkl
bind = ctrl super, H, movewindow, l
bind = ctrl super, L, movewindow, r
bind = ctrl super, K, movewindow, u
bind = ctrl super, J, movewindow, d
# Switch workspaces with mainMod + [0-9]
bind = $mainMod, 1, workspace, 1
bind = $mainMod, 2, workspace, 2
bind = $mainMod, 3, workspace, 3
bind = $mainMod, 4, workspace, 4
bind = $mainMod, 5, workspace, 5
bind = $mainMod, 6, workspace, 6
bind = $mainMod, 7, workspace, 7
bind = $mainMod, 8, workspace, 8
bind = $mainMod, 9, workspace, 9
bind = $mainMod, 0, workspace, 10
# TODO: disabled due to incompatibility with screenshots
# Move active window to a workspace with ctrl + shift + alt + [0-9]
# bind = ctrl shift alt, 1, movetoworkspace, 1
# bind = ctrl shift alt, 2, movetoworkspace, 2
# bind = ctrl shift alt, 3, movetoworkspace, 3
# bind = ctrl shift alt, 4, movetoworkspace, 4
# bind = ctrl shift alt, 5, movetoworkspace, 5
# bind = ctrl shift alt, 6, movetoworkspace, 6
# bind = ctrl shift alt, 7, movetoworkspace, 7
# bind = ctrl shift alt, 8, movetoworkspace, 8
# bind = ctrl shift alt, 9, movetoworkspace, 9
# bind = ctrl shift alt, 0, movetoworkspace, 10
# go to next/prev workspace with ctrl alt hj
bind = ctrl alt, H, workspace, -1
bind = ctrl alt, L, workspace, +1
# move to next/prev workspace with ctrl alt shift hj
bind = ctrl alt shift, H, movetoworkspace, -1
bind = ctrl alt shift, L, movetoworkspace, +1
# Example special workspace (scratchpad)
# bind = $mainMod, S, togglespecialworkspace, magic
# bind = $mainMod shift, S, movetoworkspace, special:magic
### Mouse
# Scroll through existing workspaces with mainMod + scroll
bind = $mainMod, mouse_down, workspace, e+1
bind = $mainMod, mouse_up, workspace, e-1
# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow
+26
View File
@@ -0,0 +1,26 @@
#############################
### ENVIRONMENT VARIABLES ###
#############################
# See https://wiki.hyprland.org/Configuring/Environment-variables/
env = XCURSOR_SIZE,24
env = HYPRCURSOR_SIZE,24
env = GBM_BACKEND,nvidia-drm
env = GDK_BACKEND,wayland,x11
env = GDK_SCALE, 1
env = LIBVA_DRIVER_NAME,nvidia
env = QT_AUTO_SCREEN_SCALE_FACTOR, 1
env = QT_QPA_PLATFORM,wayland;xcb
env = QT_QPA_PLATFORMTHEME,qt5ct
env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1
env = XDG_CURRENT_DESKTOP,Hyprland
env = XDG_SESSION_DESKTOP,Hyprland
env = XDG_SESSION_TYPE,wayland
env = __GLX_VENDOR_LIBRARY_NAME,nvidia
exec = gsettings set org.gnome.desktop.interface gtk-theme 'adw-gtk3-dark'
exec = gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark' # for GTK4 apps
env = QT_QPA_PLATFORMTHEME,qt6ct # for Qt apps
+16
View File
@@ -0,0 +1,16 @@
# See: https://github.com/jacobrreed/dotfiles/blob/master/.config/hypr/hypridle.conf
general {
lock_cmd = pidof hyprlock || hyprlock # avoid starting multiple hyprlock instances.
before_sleep_cmd = loginctl lock-session # lock before suspend.
after_sleep_cmd = hyprctl dispatch dpms on # to avoid having to press a key twice to turn on the display.
unlock_cmd = notify-send "unlock!" # same as above, but unlock
# ignore_dbus_inhibit = false # whether to ignore dbus-sent idle-inhibit requests (used by e.g. firefox or steam)
# ignore_systemd_inhibit = false # whether to ignore systemd-inhibit --what=idle inhibitors
}
listener {
timeout = 300 # 5 min
on-timeout = loginctl lock-session # lock screen when timeout has passed
}
+17
View File
@@ -0,0 +1,17 @@
### MONITORS
# See https://wiki.hyprland.org/Configuring/Monitors/
monitor=DP-1, 3840x1600@144, 0x0, 1, vrr, 1
monitor=DP-2, 2560x1440@144, 0x-1440, 1
workspace = 1, monitor:DP-1
workspace = 2, monitor:DP-1
workspace = 3, monitor:DP-2
workspace = 4, monitor:DP-2
source = ~/.config/hypr/autorun.conf
source = ~/.config/hypr/env.conf
source = ~/.config/hypr/style.conf
source = ~/.config/hypr/input.conf
source = ~/.config/hypr/binds.conf
source = ~/.config/hypr/rules.conf
+87
View File
@@ -0,0 +1,87 @@
background {
monitor = DP-2
path = $HOME/Pictures/lock-4.png # only png supported for now
blur_passes = 3
blur_size = 2
brightness = 0.8
}
background {
monitor = DP-1
path = $HOME/Pictures/lock-3.png # only png supported for now
blur_passes = 3
blur_size = 2
brightness = 0.8
}
input-field {
monitor =
size = 200, 50
outline_thickness = 3
dots_size = 0.15 # Scale of input-field height, 0.2 - 0.8
dots_spacing = 0.35 # Scale of dots' absolute size, 0.0 - 1.0
dots_center = true
dots_rounding = -1 # -1 default circle, -2 follow input-field rounding
outer_color = rgb(cccccc)
inner_color = rgb(FFFFFF)
font_color = rgb(10, 10, 10)
fade_on_empty = true
fade_timeout = 1000 # Milliseconds before fade_on_empty is triggered.
placeholder_text = enter password # Text rendered in the input box when it's empty.
hide_input = false
rounding = -1 # -1 means complete rounding (circle/oval)
check_color = rgb(204, 136, 34)
fail_color = rgb(204, 34, 34) # if authentication failed, changes outer_color and fail message color
fail_text = <i>$FAIL <b>($ATTEMPTS)</b></i> # can be set to empty
fail_transition = 300 # transition time in ms between normal outer_color and fail_color
capslock_color = -1
numlock_color = -1
bothlock_color = -1 # when both locks are active. -1 means don't change outer color (same for above)
invert_numlock = false # change color if numlock is off
swap_font_color = false # see below
position = 0, -180
halign = center
valign = center
}
label {
monitor =
#clock
text = cmd[update:1000] echo "$TIME"
color = rgba(200, 200, 200, 1.0)
font_size = 55
font_family = CaskaydiaCode Nerd Font Bold
position = -100, -40
halign = right
valign = bottom
shadow_passes = 5
shadow_size = 10
}
label {
monitor =
text = $USER
color = rgba(200, 200, 200, 1.0)
font_size = 20
font_family = FiraCode Nerd Font Bold
position = -100, 160
halign = right
valign = bottom
shadow_passes = 5
shadow_size = 10
}
image {
monitor =
path = $HOME/Pictures/avatar/avatar-sq-800.png
size = 200 # lesser side if not 1:1 ratio
rounding = -1 # negative values mean circle
border_size = 4
border_color = rgb(221, 221, 221)
rotate = 0 # degrees, counter-clockwise
reload_time = -1 # seconds between reloading, 0 to reload with SIGUSR2
position = 0, 0
halign = center
valign = center
}
+31
View File
@@ -0,0 +1,31 @@
#############
### INPUT ###
#############
# https://wiki.hyprland.org/Configuring/Variables/#input
input {
kb_layout = us,bg
kb_variant = ,phonetic
kb_model =
kb_options = caps:escape,grp:ctrl_space_toggle
kb_rules =
follow_mouse = 1
sensitivity = 0.2 # -1.0 - 1.0, 0 means no modification.
accel_profile = flat
touchpad {
natural_scroll = false
}
}
# https://wiki.hyprland.org/Configuring/Variables/#gestures
gestures {
workspace_swipe = false
}
cursor {
no_hardware_cursors = true
default_monitor = DP-1
}
+21
View File
@@ -0,0 +1,21 @@
### Window rules
windowrulev2 = suppressevent maximize, class:.* # You'll probably like this.
windowrulev2 = workspace 1, class:(firefox)
windowrulev2 = workspace 3, class:(org.telegram.desktop)
windowrulev2 = workspace 3, class:(Todoist)
windowrulev2 = workspace 3, class:(discord)
windowrulev2 = workspace 2, class:(steam)
windowrulev2 = float, class:(steam), title:(Friends List)
windowrulev2 = float, class:(steam), title:(Steam Settings)
# blur eww windows
layerrule = blur, eww-overlay
layerrule = ignorezero, eww-overlay
layerrule = blur, power-menu
layerrule = ignorezero, power-menu
layerrule = blur, media-menu
layerrule = ignorezero, media-menu
layerrule = blur, updates-menu
layerrule = ignorezero, updates-menu
+15
View File
@@ -0,0 +1,15 @@
#!/usr/bin/env sh
HYPRGAMEMODE=$(hyprctl getoption animations:enabled | awk 'NR==1{print $2}')
if [ "$HYPRGAMEMODE" = 1 ] ; then
hyprctl --batch "\
keyword animations:enabled 0;\
keyword decoration:drop_shadow 0;\
keyword decoration:blur:enabled 0;\
keyword general:gaps_in 0;\
keyword general:gaps_out 0;\
keyword general:border_size 1;\
keyword decoration:rounding 0"
exit
fi
hyprctl reload
+8
View File
@@ -0,0 +1,8 @@
#!/usr/bin/env sh
hyprctl dispatch -- exec '[workspace 1]' firefox &
hyprctl dispatch -- exec '[workspace 3 silent]' telegram-desktop &
sleep 1
hyprctl dispatch -- exec '[workspace 3 silent]' todoist &
sleep 1
hyprctl dispatch -- exec '[workspace 3 silent]' alacritty -e btop &
+37
View File
@@ -0,0 +1,37 @@
#!/usr/bin/env sh
function reload_eww() {
monitor_count=$(hyprctl monitors -j | jq length)
monitor_names_str=$(hyprctl monitors -j | jq -r '.[].name')
monitor_names=(${monitor_names_str// / })
eww close-all
sleep 1
if [[ $monitor_count == 2 ]]; then
if [[ ${monitor_names[0]} == "DP-1" ]]; then
eww open bar --id bar1 --arg monitor=0 --arg monitor-workspaces="[1,2]"
eww open bar --id bar2 --arg monitor=1 --arg monitor-workspaces="[3,4]"
eww open monitor-bump --arg monitor=1
elif [[ ${monitor_names[0]} == "DP-2" ]]; then
eww open bar --id bar2 --arg monitor=0 --arg monitor-workspaces="[3,4]"
eww open bar --id bar1 --arg monitor=1 --arg monitor-workspaces="[1,2]"
eww open monitor-bump --arg monitor=0
fi
elif [[ ${monitor_names[0]} == "DP-1" ]]; then
eww open bar --id bar1 --arg monitor=0 --arg monitor-workspaces="[1,2,3,4]"
elif [[ ${monitor_names[0]} == "DP-2" ]]; then
eww open bar --id bar1 --arg monitor=0 --arg monitor-workspaces="[1,2,3,4]"
eww open monitor-bump --arg monitor=0
fi
}
reload_eww
socat -u UNIX-CONNECT:$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock - | while read -r line; do
if [[ $line =~ "monitorremoved" || $line =~ "monitoradded" ]]; then
reload_eww
fi
done
+3
View File
@@ -0,0 +1,3 @@
#!/usr/bin/env sh
grim -g "$(slurp -d)" "$HOME/Pictures/Screenshots/$(date).png"
+3
View File
@@ -0,0 +1,3 @@
#!/usr/bin/env sh
grim -g "$(slurp -o)" "$HOME/Pictures/Screenshots/$(date).png"
+3
View File
@@ -0,0 +1,3 @@
#!/usr/bin/env sh
grim -g "$(slurp -d)" - | wl-copy
+3
View File
@@ -0,0 +1,3 @@
#!/usr/bin/env sh
grim -g "$(slurp -o)" - | wl-copy
+71
View File
@@ -0,0 +1,71 @@
# https://wiki.hyprland.org/Configuring/Variables/#general
general {
gaps_in = 4
gaps_out = 4
border_size = 2
col.active_border = rgba(ca9ee6ff) rgba(f2d5cfff) 45deg
col.inactive_border = rgba(b4befecc) rgba(6c7086cc) 45deg
# Set to true enable resizing windows by clicking and dragging on borders and gaps
resize_on_border = true
allow_tearing = false
layout = dwindle
}
# https://wiki.hyprland.org/Configuring/Variables/#decoration
decoration {
rounding = 10
# Change transparency of focused and unfocused windows
active_opacity = 1.0
inactive_opacity = 1.0
drop_shadow = false
# shadow_range = 4
# shadow_render_power = 3
# col.shadow = rgba(1a1a1aee)
# https://wiki.hyprland.org/Configuring/Variables/#blur
blur {
enabled = yes
size = 6
passes = 3
new_optimizations = on
ignore_opacity = on
xray = false
}
}
# https://wiki.hyprland.org/Configuring/Variables/#animations
animations {
enabled = true
# Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
animation = windows, 1, 7, myBezier
animation = windowsOut, 1, 7, default, popin 80%
animation = border, 1, 10, default
animation = borderangle, 1, 8, default
animation = fade, 1, 7, default
animation = workspaces, 1, 6, default
}
# https://wiki.hyprland.org/Configuring/Dwindle-Layout/
dwindle {
pseudotile = true
preserve_split = true
}
# https://wiki.hyprland.org/Configuring/Variables/#misc
misc {
force_default_wallpaper = 0
disable_hyprland_logo = true
animate_manual_resizes = true
mouse_move_focuses_monitor = true
}
+219
View File
@@ -0,0 +1,219 @@
configuration {
font: "Fira Code 10";
show-icons: true;
display-combi: "";
dpi: 120;
hover-select: true;
/* drun-display-format: "{name} [<span weight='light' size='small'><i>({generic})</i></span>]";*/
/* modes: "window,drun,run,ssh"; */
/* location: 0;*/
/* yoffset: 0;*/
/* xoffset: 0;*/
/* fixed-num-lines: true;*/
/* terminal: "rofi-sensible-terminal";*/
/* ssh-client: "ssh";*/
/* ssh-command: "{terminal} -e {ssh-client} {host} [-p {port}]";*/
/* run-command: "{cmd}";*/
/* run-list-command: "";*/
/* run-shell-command: "{terminal} -e {cmd}";*/
/* window-command: "wmctrl -i -R {window}";*/
/* window-match-fields: "all";*/
/* icon-theme: ;*/
/* drun-match-fields: "name,generic,exec,categories,keywords";*/
/* drun-categories: ;*/
/* drun-show-actions: false;*/
/* drun-url-launcher: "xdg-open";*/
/* disable-history: false;*/
/* ignored-prefixes: "";*/
/* sort: false;*/
/* sorting-method: "normal";*/
/* case-sensitive: false;*/
/* cycle: true;*/
/* sidebar-mode: false;*/
/* eh: 1;*/
/* auto-select: false;*/
/* parse-hosts: false;*/
/* parse-known-hosts: true;*/
/* combi-modes: "window,run";*/
/* matching: "normal";*/
/* tokenize: true;*/
/* m: "-5";*/
/* filter: ;*/
/* dpi: -1;*/
/* threads: 0;*/
/* scroll-method: 0;*/
/* window-format: "{w} {c} {t}";*/
/* click-to-exit: true;*/
/* global-kb: false;*/
/* max-history-size: 25;*/
/* combi-hide-mode-prefix: false;*/
/* combi-display-format: "{mode} {text}";*/
/* matching-negate-char: '-' /* unsupported */;*/
/* cache-dir: ;*/
/* window-thumbnail: false;*/
/* drun-use-desktop-cache: false;*/
/* drun-reload-desktop-cache: false;*/
/* normalize-match: false;*/
/* steal-focus: false;*/
/* application-fallback-icon: ;*/
/* refilter-timeout-limit: 300;*/
/* xserver-i300-workaround: false;*/
/* completer-mode: "recursivebrowser";*/
/* pid: "/run/user/1000/rofi.pid";*/
/* display-window: ;*/
/* display-run: ;*/
/* display-ssh: ;*/
/* display-drun: ;*/
/* display-combi: ;*/
/* display-keys: ;*/
/* display-filebrowser: ;*/
/* display-recursivebrowser: ;*/
/* kb-primary-paste: "Control+V,Shift+Insert";*/
/* kb-secondary-paste: "Control+v,Insert";*/
/* kb-secondary-copy: "Control+c";*/
/* kb-clear-line: "Control+w";*/
/* kb-move-front: "Control+a";*/
/* kb-move-end: "Control+e";*/
/* kb-move-word-back: "Alt+b,Control+Left";*/
/* kb-move-word-forward: "Alt+f,Control+Right";*/
/* kb-move-char-back: "Left,Control+b";*/
/* kb-move-char-forward: "Right,Control+f";*/
/* kb-remove-word-back: "Control+Alt+h,Control+BackSpace";*/
/* kb-remove-word-forward: "Control+Alt+d";*/
/* kb-remove-char-forward: "Delete,Control+d";*/
/* kb-remove-char-back: "BackSpace,Shift+BackSpace,Control+h";*/
/* kb-remove-to-eol: "Control+k";*/
/* kb-remove-to-sol: "Control+u";*/
/* kb-accept-entry: "Control+j,Control+m,Return,KP_Enter";*/
/* kb-accept-custom: "Control+Return";*/
/* kb-accept-custom-alt: "Control+Shift+Return";*/
/* kb-accept-alt: "Shift+Return";*/
/* kb-delete-entry: "Shift+Delete";*/
/* kb-mode-next: "Shift+Right,Control+Tab";*/
/* kb-mode-previous: "Shift+Left,Control+ISO_Left_Tab";*/
/* kb-mode-complete: "Control+l";*/
/* kb-row-left: "Control+Page_Up";*/
/* kb-row-right: "Control+Page_Down";*/
/* kb-row-up: "Up,Control+p";*/
/* kb-row-down: "Down,Control+n";*/
/* kb-row-tab: "";*/
/* kb-element-next: "Tab";*/
/* kb-element-prev: "ISO_Left_Tab";*/
/* kb-page-prev: "Page_Up";*/
/* kb-page-next: "Page_Down";*/
/* kb-row-first: "Home,KP_Home";*/
/* kb-row-last: "End,KP_End";*/
/* kb-row-select: "Control+space";*/
/* kb-screenshot: "Alt+S";*/
/* kb-ellipsize: "Alt+period";*/
/* kb-toggle-case-sensitivity: "grave,dead_grave";*/
/* kb-toggle-sort: "Alt+grave";*/
/* kb-cancel: "Escape,Control+g,Control+bracketleft";*/
/* kb-custom-1: "Alt+1";*/
/* kb-custom-2: "Alt+2";*/
/* kb-custom-3: "Alt+3";*/
/* kb-custom-4: "Alt+4";*/
/* kb-custom-5: "Alt+5";*/
/* kb-custom-6: "Alt+6";*/
/* kb-custom-7: "Alt+7";*/
/* kb-custom-8: "Alt+8";*/
/* kb-custom-9: "Alt+9";*/
/* kb-custom-10: "Alt+0";*/
/* kb-custom-11: "Alt+exclam";*/
/* kb-custom-12: "Alt+at";*/
/* kb-custom-13: "Alt+numbersign";*/
/* kb-custom-14: "Alt+dollar";*/
/* kb-custom-15: "Alt+percent";*/
/* kb-custom-16: "Alt+dead_circumflex";*/
/* kb-custom-17: "Alt+ampersand";*/
/* kb-custom-18: "Alt+asterisk";*/
/* kb-custom-19: "Alt+parenleft";*/
kb-select-1: "Ctrl+Alt+1";
kb-select-2: "Ctrl+Alt+2";
kb-select-3: "Ctrl+Alt+3";
kb-select-4: "Ctrl+Alt+4";
kb-select-5: "Ctrl+Alt+5";
kb-select-6: "Ctrl+Alt+6";
kb-select-7: "Ctrl+Alt+7";
kb-select-8: "Ctrl+Alt+8";
kb-select-9: "Ctrl+Alt+9";
kb-select-10: "Ctrl+Alt+0";
/* kb-entry-history-up: "Control+Up";*/
/* kb-entry-history-down: "Control+Down";*/
/* ml-row-left: "ScrollLeft";*/
/* ml-row-right: "ScrollRight";*/
/* ml-row-up: "ScrollUp";*/
/* ml-row-down: "ScrollDown";*/
/* me-select-entry: "MousePrimary";*/
/* me-accept-entry: "MouseDPrimary";*/
/* me-accept-custom: "Control+MouseDPrimary";*/
timeout {
action: "kb-cancel";
delay: 0;
}
filebrowser {
directories-first: true;
sorting-method: "name";
}
}
* {
selected-normal-foreground: rgba ( 249, 249, 249, 100 % );
foreground: rgba ( 196, 203, 212, 100 % );
normal-foreground: @foreground;
alternate-normal-background: @background;
red: rgba ( 220, 50, 47, 100 % );
selected-urgent-foreground: rgba ( 249, 249, 249, 100 % );
blue: rgba ( 38, 139, 210, 100 % );
urgent-foreground: rgba ( 204, 102, 102, 100 % );
alternate-urgent-background: rgba ( 75, 81, 96, 90 % );
active-foreground: rgba ( 101, 172, 255, 100 % );
lightbg: rgba ( 238, 232, 213, 100 % );
selected-active-foreground: rgba ( 249, 249, 249, 100 % );
alternate-active-background: rgba ( 75, 81, 96, 89 % );
background: rgba ( 45, 48, 59, 95 % );
alternate-normal-foreground: @foreground;
normal-background: @background;
lightfg: rgba ( 88, 104, 117, 100 % );
selected-normal-background: rgba ( 64, 132, 214, 100 % );
border-color: rgba ( 124, 131, 137, 100 % );
spacing: 2;
separatorcolor: rgba ( 0, 0, 0, 0 % );
urgent-background: rgba ( 29, 31, 33, 17 % );
selected-urgent-background: rgba ( 165, 66, 66, 100 % );
alternate-urgent-foreground: @urgent-foreground;
background-color: rgba ( 0, 0, 0, 0 % );
alternate-active-foreground: @active-foreground;
active-background: rgba ( 29, 31, 33, 17 % );
selected-active-background: rgba ( 68, 145, 237, 100 % );
}
window {
width: 25%;
border-radius: 8;
background-color: @background;
border: 1;
padding: 16;
}
textbox-prompt-colon {
display: none;
str: "";
}
mainbox {
border: 0;
}
listview {
padding: 16px 0;
}
element {
padding: 12px;
}
element-icon {
padding: 0 12px 0 0;
}
+177
View File
@@ -0,0 +1,177 @@
/**
* rofi -dump-theme output.
* Rofi version: 1.7.5+wayland3
**/
* {
red: rgba ( 220, 50, 47, 100 % );
selected-active-foreground: rgba ( 249, 249, 249, 100 % );
lightfg: rgba ( 88, 104, 117, 100 % );
separatorcolor: rgba ( 29, 31, 33, 100 % );
urgent-foreground: rgba ( 204, 102, 102, 100 % );
alternate-urgent-background: rgba ( 75, 81, 96, 90 % );
lightbg: rgba ( 238, 232, 213, 100 % );
background-color: transparent;
border-color: rgba ( 124, 131, 137, 100 % );
normal-background: var(background);
selected-urgent-background: rgba ( 165, 66, 66, 100 % );
alternate-active-background: rgba ( 75, 81, 96, 89 % );
spacing: 2;
blue: rgba ( 38, 139, 210, 100 % );
alternate-normal-foreground: var(foreground);
urgent-background: rgba ( 29, 31, 33, 17 % );
selected-normal-foreground: rgba ( 249, 249, 249, 100 % );
active-foreground: rgba ( 101, 172, 255, 100 % );
background: rgba ( 45, 48, 59, 95 % );
selected-active-background: rgba ( 68, 145, 237, 100 % );
active-background: rgba ( 29, 31, 33, 17 % );
selected-normal-background: rgba ( 64, 132, 214, 100 % );
alternate-normal-background: rgba ( 64, 69, 82, 59 % );
foreground: rgba ( 196, 203, 212, 100 % );
selected-urgent-foreground: rgba ( 249, 249, 249, 100 % );
normal-foreground: var(foreground);
alternate-urgent-foreground: var(urgent-foreground);
alternate-active-foreground: var(active-foreground);
}
element {
padding: 1px ;
cursor: pointer;
spacing: 5px ;
border: 0;
}
element normal.normal {
background-color: var(normal-background);
text-color: var(normal-foreground);
}
element normal.urgent {
background-color: var(urgent-background);
text-color: var(urgent-foreground);
}
element normal.active {
background-color: var(active-background);
text-color: var(active-foreground);
}
element selected.normal {
background-color: var(selected-normal-background);
text-color: var(selected-normal-foreground);
}
element selected.urgent {
background-color: var(selected-urgent-background);
text-color: var(selected-urgent-foreground);
}
element selected.active {
background-color: var(selected-active-background);
text-color: var(selected-active-foreground);
}
element alternate.normal {
background-color: var(alternate-normal-background);
text-color: var(alternate-normal-foreground);
}
element alternate.urgent {
background-color: var(alternate-urgent-background);
text-color: var(alternate-urgent-foreground);
}
element alternate.active {
background-color: var(alternate-active-background);
text-color: var(alternate-active-foreground);
}
element-text {
background-color: inherit;
cursor: inherit;
highlight: inherit;
text-color: inherit;
}
element-icon {
background-color: transparent;
size: 1.0000em ;
cursor: inherit;
text-color: inherit;
}
window {
padding: 5;
background-color: var(background);
border: 1;
}
mainbox {
padding: 0;
border: 0;
}
message {
padding: 1px ;
border-color: var(separatorcolor);
border: 2px 0px 0px ;
}
textbox {
text-color: var(foreground);
}
listview {
padding: 2px 0px 0px ;
scrollbar: true;
border-color: var(separatorcolor);
spacing: 2px ;
fixed-height: 0;
border: 2px 0px 0px ;
}
scrollbar {
width: 4px ;
padding: 0;
handle-width: 8px ;
border: 0;
handle-color: var(normal-foreground);
}
sidebar {
border-color: var(separatorcolor);
border: 2px dash 0px 0px ;
}
button {
cursor: pointer;
spacing: 0;
text-color: var(normal-foreground);
}
button selected {
background-color: var(selected-normal-background);
text-color: var(selected-normal-foreground);
}
num-filtered-rows {
expand: false;
text-color: Gray;
}
num-rows {
expand: false;
text-color: Gray;
}
textbox-num-sep {
expand: false;
str: "/";
text-color: Gray;
}
inputbar {
padding: 1px ;
spacing: 0;
text-color: var(normal-foreground);
children: [ "prompt","textbox-prompt-colon","entry","case-indicator" ];
}
case-indicator {
spacing: 0;
text-color: var(normal-foreground);
}
entry {
text-color: var(normal-foreground);
cursor: text;
spacing: 0;
placeholder-color: Gray;
placeholder: "Type to filter";
}
prompt {
spacing: 0;
text-color: var(normal-foreground);
}
textbox-prompt-colon {
margin: 0px 0.3000em 0.0000em 0.0000em ;
expand: false;
str: ":";
text-color: var(normal-foreground);
}
mode-switcher {
border-color: var(separatorcolor);
border: 2px 0px 0px ;
}
@@ -20,8 +20,8 @@ setw -g window-status-current-style bg="#282a2e"
setw -g window-status-current-style fg="#81a2be"
## highlight active window
setw -g window-style 'bg=#282a2e'
setw -g window-active-style 'bg=#1d1f21'
# setw -g window-style 'bg=#282a2e'
# setw -g window-active-style 'bg=#1d1f21'
setw -g pane-active-border-style ''
## highlight activity in status bar
+3
View File
@@ -0,0 +1,3 @@
.zcompdump
.zsh_history
plugins/bd
+28
View File
@@ -0,0 +1,28 @@
GIT_PROMPT_EXECUTABLE="shell"
source $ZDOTDIR/plugins/zsh-git-prompt/zshrc.sh
function git_email_prompt() {
GIT_USER=$(git config user.email)
echo $GIT_USER
}
PROMPT='%B%U%F{cyan}% %m%u%F{green} %~$(git_super_status)%f %{%G%}%b '
RPROMPT='%B%F{42}% $(git_email_prompt)%f %F{cyan}%*%b'
# No right padding on RPROMPT
ZLE_RPROMPT_INDENT=0
ZSH_THEME_GIT_PROMPT_PREFIX=" %B%F{cyan}% ("
ZSH_THEME_GIT_PROMPT_SUFFIX="%B%F{cyan}% )"
ZSH_THEME_GIT_PROMPT_SEPARATOR="%B%F{cyan}% |"
ZSH_THEME_GIT_PROMPT_BRANCH=""
ZSH_THEME_GIT_PROMPT_STAGED="%F{green}% %{●%G%}"
ZSH_THEME_GIT_PROMPT_CONFLICTS="%B%F{red}% %{✖%G%}"
ZSH_THEME_GIT_PROMPT_CHANGED="%B%F{red}% %{✚%G%}"
ZSH_THEME_GIT_PROMPT_STASHED="%B%F{251}% %{⚑%G%}"
ZSH_THEME_GIT_PROMPT_BEHIND="%B%F{magenta}% %{↓%G%}"
ZSH_THEME_GIT_PROMPT_AHEAD="%B%F{yellow}% %{↑%G%}"
ZSH_THEME_GIT_PROMPT_UNTRACKED="%B%F{42}% %{…%G%}"
ZSH_THEME_GIT_PROMPT_CLEAN="%B%F{cyan}% %{✔%G%}"
ZSH_THEME_GIT_PROMPT_LOCAL=" %B%F{42}% L"
+90
View File
@@ -0,0 +1,90 @@
setopt auto_cd
setopt no_case_glob
setopt glob_complete
# setopt correct
# setopt correct_all
setopt completeinword # not just at the end
# --------
# Comp init
# --------
# The following lines were added by compinstall
zstyle ':completion:*' completer _complete _ignored _correct _approximate
zstyle :compinstall filename '~/.config/zsh/.zshrc'
autoload -Uz compinit
compinit
# End of lines added by compinstall
# Load bashcompinit for some old bash completions
autoload bashcompinit && bashcompinit
# --------
# History
# --------
HISTFILE=${ZDOTDIR:-~}/.zsh_history
SAVEHIST=50000
HISTSIZE=10000
HISTORY_IGNORE="(ls|cd|pwd|zsh|exit|cd ..)"
setopt extended_history # record start time and elapsed time in history file
setopt share_history # share history across multiple zsh sessions
setopt append_history # append to history
setopt inc_append_history # adds commands as they are typed, not at shell exit
setopt hist_ignore_dups # do not store duplications
setopt hist_reduce_blanks # removes blank lines from history
setopt hist_verify # show !! before executing
setopt hist_ignore_space # remove command lines beginning with a space from history
setopt no_beep # Don't beep on command input error
# --------
# Source & include
# --------
# Include functions
fpath+=~/Git/dotfiles/functions
autoload extract
autoload set_alias_with_backup
[ -f $ZDOTDIR/.zshrc.local ] && source $ZDOTDIR/.zshrc.local
[ -f ~/.config/.aliases ] && source ~/.config/.aliases
[ -f ~/.config/.aliases.local ] && source ~/.config/.aliases.local
# --------
# Plugins
# --------
if type brew >/dev/null 2>&1; then
source $(brew --prefix)/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
fi
source "$ZDOTDIR/plugins/zsh-vim-mode/zsh-vim-mode.plugin.zsh"
# https://github.com/arzzen/calc.plugin.zsh
source "$ZDOTDIR/plugins/calc.plugin.zsh/calc.plugin.zsh"
# https://github.com/lukechilds/zsh-better-npm-completion
source "$ZDOTDIR/plugins/zsh-better-npm-completion/zsh-better-npm-completion.plugin.zsh"
# https://github.com/sunlei/zsh-ssh
source "$ZDOTDIR/plugins/zsh-ssh/zsh-ssh.zsh"
# https://github.com/Tarrasch/zsh-bd
source "$ZDOTDIR/plugins/bd/bd.zsh"
# Prompt
source $ZDOTDIR/.zprompt
eval $(thefuck --alias)
eval "$(zoxide init zsh --cmd cd)"
[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh
+91
View File
@@ -0,0 +1,91 @@
# local user config, usernames, etc
[include]
path=~/.config/.gitconfig.local
### git-delta
[core]
pager = delta
excludesfile = ~/.config/.gitignore_global
editor = code --wait
[interactive]
diffFilter = delta --color-only
[delta]
navigate = true # use n and N to move between diff sections
true-color = always
hyperlinks = true
hyperlinks-file-link-format = "vscode://file/{path}:{line}"
# side-by-side = true # alterantively use git -c delta.side-by-side=true diff
[delta "side-by-side"]
side-by-side = true
[merge]
conflictstyle = diff3
[diff]
colorMoved = default
### end git-delta
[color]
diff = auto
status = auto
branch = auto
interactive = auto
ui = auto
[help]
autocorrect = 1 # Automatically correct and execute mistyped commands.
[branch]
sort = -committerdate # Show most recently changed branches first.
[push]
default = simple
autoSetupRemote = true
[filter "media"]
clean = git media clean %f
smudge = git media smudge %f
required = true
[alias]
b = branch
c = commit
sw = switch
swm = switch master
co = checkout
com = checkout master
ss = status
s = status -s
ds = diff --staged
amend = commit --amend -c HEAD
oops = reset --soft HEAD~1
kris = pull --rebase
ignore = !git update-index --assume-unchanged
unignore = !git update-index --no-assume-unchanged
ignored = !git ls-files -v | grep "^[[:lower:]]"
undo = reset --soft HEAD^
squash = rebase --autostash -i
megasquash = "!f() { git rebase --autostash -i `git merge-base --fork-point HEAD master`; }; f"
unstage = restore --staged
# fzf commands
cf="!checkout_fzf() { git branch | fzf-tmux -p -h 25% --header 'git checkout' | xargs git checkout; }; checkout_fzf"
sf="!switch_fzf() { git branch | fzf-tmux -p -h 25% --header 'git switch' | xargs git switch; }; switch_fzf"
af = "!add_files() { git status -s | awk '{print $2}' | fzf-tmux -m --header 'git add' | xargs git add; }; add_files"
afc = "!add_files_and_commit() { git status -s | awk '{print $2}' | fzf-tmux -m --header 'git add and commit' | xargs git add && git commit --verbose; }; add_files_and_commit"
mf = "!merge() { git branch | fzf-tmux -p -h 25% --header 'git merge' | xargs git merge; }; merge"
# various pretty loggers from various places
l = log --pretty=oneline --abbrev-commit
lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative
lgg = log --graph --pretty=format:'%Creset %s' --abbrev-commit
lc = log ORIG_HEAD.. --stat --no-merges
# from http://blog.kfish.org/2010/04/git-lola.html
lol = log --graph --decorate --pretty=oneline --abbrev-commit
lola = log --graph --decorate --pretty=oneline --abbrev-commit --all
ll = log --graph --date=short
# List contributors with number of commits.
contributors = shortlog --summary --numbered
# Show the user email for the current repository.
whoami = config user.email
# used for dotbot only
cleanall = clean -fdx # this is dangerous, so it's intentionally long to type
update-submodules = submodule update --init --recursive
upgrade-submodules = submodule update --init --remote
+22 -9
View File
@@ -2,30 +2,38 @@
# General Settings
# ------------------
set-option -g default-shell "/bin/zsh"
# See: https://github.com/gpakosz/.tmux/blob/master/.tmux.conf
# Set Custom Prefix
set -g prefix C-a
unbind C-b
# Start in newer bash
set-option -g default-command "/usr/local/bin/bash --login"
# Disable delay
set -sg escape-time 1
# Increase scrollback buffer size from 2000 to 50000 lines
set -g history-limit 50000
set -g base-index 1 # start windows numbering at 1
setw -g pane-base-index 1 # make pane numbering consistent with windows
set -q -g status-utf8 on # expect UTF-8 (tmux < 2.2)
setw -q -g utf8 on
# Focus events enabled for terminals that support them
set -g focus-events on
# Super useful when using "grouped sessions" and multi-monitor setup
setw -g aggressive-resize on
# -------------------
# Visual Settings
# -------------------
set -g default-terminal "screen-256color"
source-file ~/.tmux/themes/tomorrow-night.tmux
source-file ~/.config/tmux/themes/tomorrow-night.tmux
# Theme Variables
@@ -41,7 +49,8 @@ TMUX_USERNAME_FG="#000000"
TMUX_STATUS_AQUA="#8abeb7"
# Styles
STYLE_DEFAULT="fg=white,bg=$TMUX_STATUS_BG"
# STYLE_DEFAULT="fg=white,bg=$TMUX_STATUS_BG"
STYLE_DEFAULT="fg=white"
STYLE_ACTIVE_ITEM="#[fg=$TMUX_STATUS_TEXT_COLOR,bg=$TMUX_ACTIVE_COLOR,noreverse,bold]"
STYLE_RED="#[fg=$TMUX_NAMESPACE_FG,bg=$TMUX_STATUS_RED,bold]"
STYLE_AQUA="#[fg=$TMUX_USERNAME_FG,bg=$TMUX_STATUS_AQUA,bold]"
@@ -49,6 +58,9 @@ STYLE_AQUA="#[fg=$TMUX_USERNAME_FG,bg=$TMUX_STATUS_AQUA,bold]"
# Status bar
set-option -g status-position bottom
# Refresh 'status-left' and 'status-right' more often, from every 15s to 5s
set -g status-interval 5
# Status mid style
set -g status-style $STYLE_DEFAULT
@@ -76,7 +88,6 @@ set -g @prefix_highlight_bg $TMUX_ACTIVE_COLOR
set -g mouse on
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'copy-mode -e'"
setw -g mode-keys vi
bind C-a send-prefix
@@ -101,7 +112,7 @@ unbind C-Left
unbind C-Right
# Source this file
bind r source-file ~/.tmux.conf \; display "Config file reloaded!"
bind r source-file $HOME/.tmux.conf \; display "Config file reloaded!"
# split current window horizontally
bind v split-window -h
@@ -145,10 +156,12 @@ bind C-c run-shell "bash -c 'tmux show-buffer | pbcopy'" \; display 'Copied to c
# Enabled plugins
# install prefix I
# update prefix u
# update prefix U
# uninstall all prefix alt u
set-environment -g TMUX_PLUGIN_MANAGER_PATH '~/.config/tmux/plugins'
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-cpu'
set -g @plugin 'tmux-plugins/tmux-prefix-highlight'
set -g @plugin 'sainnhe/tmux-fzf'
run -b '~/.tmux/plugins/tpm/tpm'
run -b '~/.config/tmux/plugins/tpm/tpm'
View File

Some files were not shown because too many files have changed in this diff Show More