169 Commits
Author SHA1 Message Date
Georgi Gardev e809d4e329 Move herdr tabs to bottom 2026-08-23 11:38:11 +03:00
Georgi Gardev 4233302a74 gitignore claude skills 2026-08-23 11:33:57 +03:00
Georgi Gardev 181a2c51c6 Add alias for codex resume 2026-08-23 11:25:10 +03:00
Georgi Gardev f940342c72 Default git to main 2026-08-23 11:23:28 +03:00
Georgi Gardev 1fdf5dda31 Add LLM aliases 2026-08-23 11:22:52 +03:00
GeorgeSG 54f0cf6531 Update btop.conf 2026-08-04 11:55:29 +03:00
GeorgeSG 6396950ab1 Add git gone alias 2026-08-04 11:55:12 +03:00
GeorgeSG 0e4424681a zsh optimizations 2026-08-04 11:55:07 +03:00
GeorgeSG d9b775b89a Update brewfiles 2026-07-10 10:53:12 +03:00
GeorgeSG fcf23b465b Add yazi config 2026-07-09 15:03:27 +03:00
GeorgeSG 1094982f42 Add herdr theme 2026-07-09 15:03:10 +03:00
GeorgeSG 629d221e4b Add herdr and ghostty 2026-07-09 12:15:02 +03:00
GeorgeSG 3a921a4c87 Use code for git editor 2026-07-08 16:14:59 +03:00
GeorgeSG 416fbcf8d9 Add herdr 2026-07-08 16:14:33 +03:00
Georgi Gardev d89d428358 Add thefuck 2026-06-24 22:00:03 +03:00
Georgi Gardev 98c2c4284a Update dotfiles 2026-06-24 21:57:36 +03:00
Georgi GardevandClaude Opus 4.8 728c16d8be 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 df220a5440 Disable some apps in personal 2026-01-30 00:23:20 +02:00
Georgi Gardev 57a14f6fc1 Add swift-shift 2026-01-30 00:23:05 +02:00
Georgi Gardev 51db723a82 Add screensaver alias 2025-11-03 23:35:40 +02:00
Georgi Gardev 252800d91e Update macos setup 2025-10-31 20:59:03 +02:00
Georgi Gardev a8626d1d35 Update colors 2025-03-06 11:45:06 +02:00
GeorgeSG 65f526efa7 Update alacritty theme 2025-02-15 11:39:01 +02:00
Georgi Gardev bdce0f3d1d Update install script 2025-02-15 11:36:39 +02:00
GeorgeSG 45e91ff0c4 Don't sudo chsh 2025-02-15 11:21:37 +02:00
GeorgeSG b28f845108 Add per-os install scripts 2025-02-15 11:19:21 +02:00
GeorgeSG 245c53f893 Rename dotbot files 2025-02-15 11:18:58 +02:00
GeorgeSG 5be7254a5b update fn 2025-02-10 18:16:59 +02:00
GeorgeSG a63ea3c5e7 Rename fn 2025-02-10 17:49:34 +02:00
GeorgeSG cc91e15034 update comment 2025-02-10 16:30:49 +02:00
GeorgeSG e4ffb495a1 Improve aliases 2025-02-10 16:29:34 +02:00
Georgi Gardev 897496143b Add kondo 2025-02-04 13:21:26 +02:00
GeorgeSG cd094bfbe2 add fd 2025-02-02 18:31:53 +02:00
GeorgeSG 3661255a48 add aliases 2025-02-02 18:27:32 +02:00
GeorgeSG c3e0b29a6b Remove deprecated Makefile 2025-02-02 09:49:34 +02:00
GeorgeSG 306845a106 Update brewfile 2025-02-02 09:49:12 +02:00
GeorgeSG 0bafeeeeaf add flushdns alias for mac 2025-02-02 09:49:01 +02:00
GeorgeSG 7aacd3e364 do xcode-install for macos 2025-01-23 17:58:42 +02:00
GeorgeSG 0f4fb4a80f rename dotbot files 2025-01-23 17:57:53 +02:00
GeorgeSG f14e49d641 remove useful stuff from global gitignore 2025-01-23 17:43:09 +02:00
GeorgeSG d72ba1e02b update btop 2025-01-23 16:17:32 +02:00
GeorgeSG 62409ee599 link tmux plugins 2025-01-23 16:05:12 +02:00
Georgi Gardev ba519a67f1 add gh cli aliases 2025-01-23 15:47:31 +02:00
Georgi Gardev 603ccd0f04 alacritty url handling 2025-01-23 15:47:26 +02:00
Georgi Gardev a1fe7488d3 Update alacritty styles 2025-01-23 13:03:29 +02:00
Georgi Gardev c7ea81f5a2 Update zshrc 2025-01-23 12:02:12 +02:00
Georgi Gardev 197d4c87bc Update alacritty theme 2025-01-23 12:02:05 +02:00
Georgi Gardev 4eb260fbf0 Update install 2025-01-23 11:24:29 +02:00
Georgi Gardev ce62aa6bbd Add global gitignore 2025-01-23 11:24:21 +02:00
GeorgeSG f22ea044f6 Update dotfiles 2025-01-23 09:41:25 +02:00
GeorgeSG 49ecb057cf update caskfile 2025-01-23 09:26:13 +02:00
GeorgeSG fb5c1161c6 Update alacritty conf 2025-01-23 09:26:07 +02:00
GeorgeSG a2e49b9681 update mac install 2025-01-22 19:38:53 +02:00
GeorgeSG 955dbc6dc2 Switch to dotbot 2025-01-22 19:33:28 +02:00
Georgi Gardev 7f08cd2aee Update gitmodule 2025-01-22 18:24:48 +02:00
Georgi Gardev 537f3c401a Add dotbot install files 2025-01-22 18:24:48 +02:00
Georgi Gardev 6c3fbaf327 Add dotbot 2025-01-22 18:24:48 +02:00
Georgi Gardev d2d332d72a dust 2024-07-11 16:13:45 +03:00
Georgi Gardev 5cb98ad96f add fastfetch 2024-07-11 16:12:24 +03:00
Georgi Gardev 40ab935354 git-delta 2024-07-11 16:10:06 +03:00
Georgi Gardev 88e8bd7aa0 update brewfile 2024-07-11 15:50:20 +03:00
Georgi Gardev cd14742885 update caskfile 2024-07-11 12:42:58 +03:00
Georgi Gardev 1453e16af2 update iterm profile 2024-07-11 12:41:40 +03:00
Georgi Gardev ea6fb062d9 make tmux transparent 2024-07-11 12:40:42 +03:00
Georgi Gardev 491ce5f537 update iterm2 2024-07-11 12:40:13 +03:00
Georgi Gardev 281cf5a26a add iterm2 profile 2024-07-11 12:37:43 +03:00
Georgi Gardev ccad6ccf94 remove alacritty from general linking 2024-07-11 12:34:59 +03:00
Georgi Gardev 82c139f342 add alacritty and btop to brewfile 2024-07-11 12:26:59 +03:00
Georgi Gardev e248d04ad3 Move alacritty & btop to global linking 2024-07-11 12:26:42 +03:00
Georgi Gardev 4559705078 gitignore all local files 2024-07-11 12:11:21 +03:00
Georgi Gardev 0e6093c148 gitignore local file 2024-07-11 12:11:06 +03:00
Georgi Gardev 17f06c4914 remove .local file 2024-07-11 12:09:22 +03:00
GeorgeSG 94aa4f1492 update eww on monitor update 2024-07-08 22:41:07 +03:00
GeorgeSG 22c70c087b Update eww & hypr 2024-07-07 16:41:42 +03:00
GeorgeSG ee421c60a3 Update eww & hypr 2024-07-07 15:46:10 +03:00
GeorgeSG 656680409b Screenshot support 2024-07-07 14:16:38 +03:00
GeorgeSG 77077b0192 Update eww and hyprland 2024-07-07 13:41:37 +03:00
GeorgeSG c775fb987e Update eww and hypr 2024-07-06 23:19:28 +03:00
GeorgeSG ee496691e4 update hypr 2024-07-06 22:43:47 +03:00
GeorgeSG f1572d356a fix typo 2024-07-06 22:33:27 +03:00
GeorgeSG 1232ed50ac Update eww 2024-07-06 22:33:16 +03:00
GeorgeSG 16221d5408 Add hyprlock 2024-07-06 15:44:05 +03:00
GeorgeSG 30f9a432e1 Update rofi style 2024-07-06 13:40:32 +03:00
GeorgeSG f70ff3b0ce move gitconfig local 2024-07-06 13:09:39 +03:00
GeorgeSG c1a2501517 gitignore and pull alacritty themes 2024-07-06 13:07:44 +03:00
GeorgeSG 2081251268 Remove pyc file 2024-07-06 13:07:18 +03:00
GeorgeSG 888876d1ce Add hyprstack config 2024-07-06 12:59:14 +03:00
GeorgeSG 92097ca814 Update aliases 2024-07-06 12:53:59 +03:00
GeorgeSG 27e6199cc7 set tmux plugins path 2024-07-05 12:38:48 +03:00
GeorgeSG 76da20d848 move .gitconfig back home 2024-07-05 12:36:27 +03:00
GeorgeSG e13d016edf Remove debug message 2024-07-05 12:28:49 +03:00
GeorgeSG eccfb458b8 ignore bash git prompt 2024-07-05 12:28:20 +03:00
GeorgeSG 301587a588 Rearrange files in .config folder, update makefile 2024-07-05 12:26:30 +03:00
Georgi Gardev 0810b5117b mac os disable press and hold 2024-03-17 13:59:26 +02:00
Georgi Gardev 6584c6d19c Correct grammer 2024-03-10 23:42:47 +02:00
Georgi Gardev 4a9239a1a0 Update clone.sh 2024-03-09 15:45:53 +02:00
Georgi Gardev b2491f871b make xcode select install optional 2024-03-09 14:52:12 +02:00
Georgi Gardev 58e0b27cf5 Add apps to install 2024-03-07 17:18:41 +02:00
Georgi Gardev cb0b7f12b5 Add clone file 2024-03-07 16:01:26 +02:00
Georgi Gardev be9a55770e Add clone file for often-used repos 2024-03-07 16:01:16 +02:00
Georgi Gardev 4ad2f6e64b Misc tweaks 2024-03-07 15:07:41 +02:00
Georgi Gardev 393be7f11d fzf fixes 2024-03-07 12:50:49 +02:00
Georgi Gardev f5706e6f16 Update brew 2024-03-07 12:38:55 +02:00
Georgi Gardev 7a01e8eb57 Add comment 2024-03-07 11:58:08 +02:00
Georgi Gardev a3a032598b Remove unused icons 2024-03-07 11:57:29 +02:00
Georgi Gardev 799170b997 Update settings 2024-03-07 11:51:12 +02:00
Georgi Gardev 08e025b6df Update mac setup script 2024-03-07 11:38:34 +02:00
Georgi Gardev 21ad72c7de Remove unused files 2024-03-07 11:17:14 +02:00
Georgi Gardev 8bb91fb04a remove cask step 2024-03-07 11:16:21 +02:00
Georgi Gardev 16cb2c0607 minor fixes 2024-03-07 11:15:38 +02:00
Georgi Gardev 613da9ca23 update ssh generation script 2024-03-07 11:13:58 +02:00
Georgi Gardev 056b7a2c5d fix space 2024-03-07 10:50:16 +02:00
Georgi Gardev 8a363f027b Update & fix prompt issues 2024-03-07 10:48:02 +02:00
Georgi Gardev fd2d241a6d add zshenv 2024-03-06 15:15:05 +02:00
Georgi Gardev 08c5177cd0 Setup shell before brew 2024-03-06 12:49:35 +02:00
Georgi Gardev f200ab5e81 fix indent 2024-03-06 11:57:44 +02:00
Georgi Gardev 399b3819c9 fix errors 2024-03-06 11:57:20 +02:00
Georgi Gardev 21e5bdd40c fix errors 2024-03-06 11:56:26 +02:00
Georgi Gardev da57077df3 fix clone 2024-03-06 11:55:15 +02:00
Georgi Gardev 9c9a9ef85e Tweaks 2024-03-05 22:30:48 +02:00
Georgi Gardev 72618001ef lint 2024-03-05 19:25:26 +02:00
Georgi Gardev 6e3731d7f7 add zoxide 2024-03-05 19:25:10 +02:00
Georgi Gardev d78c9036f5 add zoxide 2024-03-05 19:25:04 +02:00
Georgi Gardev 74a497ad53 Add more eza aliases 2024-03-05 19:12:05 +02:00
Georgi Gardev e8014526df Add zsh plugins and aliases 2024-03-05 19:04:38 +02:00
Georgi Gardev f2c30a1383 Add zsh plugins 2024-03-05 15:57:58 +02:00
Georgi Gardev 99d5b3c56d ignore common commands in history 2024-03-05 15:49:43 +02:00
Georgi Gardev 79418928e6 Update zshrc 2024-03-05 15:48:35 +02:00
Georgi Gardev 7942bc4a52 Add comment 2024-03-05 15:38:27 +02:00
Georgi Gardev 027f066295 Update prompt 2024-03-05 15:35:01 +02:00
Georgi Gardev 74538a4fff Add gitconfig to README 2024-03-05 15:28:15 +02:00
Georgi Gardev 2f27831a68 Fix readme 2024-03-05 15:27:54 +02:00
Georgi Gardev a385af70b5 Remove unused var 2024-03-05 15:26:52 +02:00
Georgi Gardev 24e07fc02f Add stashed color in zsh prompt 2024-03-05 15:18:18 +02:00
Georgi Gardev 2f10c2beb7 Move zsh config in the repo 2024-03-05 15:13:01 +02:00
Georgi Gardev b7b5519320 Rework bash files 2024-03-05 14:57:06 +02:00
Georgi Gardev 2daa3ed55a nits 2024-03-05 12:25:13 +02:00
Georgi Gardev 531d9cb2aa cleanup tmux themes 2024-03-05 01:27:29 +02:00
Georgi Gardev 100d918338 Autohide dock 2024-03-05 01:25:51 +02:00
Georgi Gardev 92155abcc9 Update macos setup 2024-03-05 01:24:20 +02:00
Georgi Gardev 21df798197 Add script to generate ssh key 2024-03-05 01:23:06 +02:00
Georgi Gardev 19c3f1c927 use /usr/bin/env 2024-03-05 01:22:58 +02:00
Georgi Gardev 6cee2afc28 update tmux.conf 2024-03-05 01:11:40 +02:00
Georgi Gardev 8c54be70bb Update makefile 2024-03-05 01:03:35 +02:00
Georgi Gardev b74d714efe Update makefile 2024-03-05 01:01:14 +02:00
Georgi Gardev f463eb2ad1 Additional macos setup 2024-03-05 00:51:26 +02:00
Georgi Gardev 314cdf86be add macos setup 2024-03-05 00:17:53 +02:00
Georgi Gardev 7a46f22547 Add rar 2024-03-04 23:59:53 +02:00
Georgi Gardev cd06cd604c fix tmux comment 2024-03-04 23:57:29 +02:00
Georgi Gardev 50b8629816 Split in folders 2024-03-04 23:56:20 +02:00
Georgi Gardev 5a91577405 Move stuff to archive 2024-03-04 23:51:20 +02:00
Georgi Gardev 03a40e70a0 add install_brew.sh 2024-03-04 23:50:08 +02:00
Georgi Gardev b4053a29b8 ignore Brewfile lcok 2024-03-04 23:49:58 +02:00
Georgi Gardev 816100eb04 Move and update aliases 2024-03-04 23:40:50 +02:00
Georgi Gardev 7ae42be84f bring bashrc back 2024-03-04 23:29:45 +02:00
Georgi Gardev 3c2d5b20a2 Move to bash_profile 2024-03-04 23:28:53 +02:00
Georgi Gardev 594cd023ce Switch to Brewfile 2024-03-04 23:08:29 +02:00
Georgi Gardev 63eb6f1008 add extract fn 2024-03-04 22:54:49 +02:00
Georgi Gardev e3e78e6b0d switch to .local for consistency 2024-03-04 22:54:39 +02:00
Georgi Gardev 7f3a0b21d0 Update makefile 2024-03-04 22:46:24 +02:00
Georgi Gardev e4febfa7d1 remove gpg sign disabled 2024-03-04 22:37:20 +02:00
Georgi Gardev 8d34463f0a Add yda alias 2024-03-04 22:30:19 +02:00
Georgi Gardev f4198229b7 Update brewfile 2024-03-04 22:29:30 +02:00
Georgi Gardev c4e689ba88 Update bash aliases 2024-03-04 22:27:48 +02:00
Georgi Gardev 8d55310e01 Update mac os brew setup 2024-03-04 22:25:26 +02:00
Georgi Gardev 286223c05a Add new git aliases 2024-03-04 21:43:07 +02:00
GeorgeSG 4c5b8b6ff0 add unstage alias 2023-11-14 09:26:10 +02:00
Georgi Gardev adf69835a0 change file mode 2023-11-14 09:24:05 +02:00
Georgi Gardev 8618102cbd add git conitnue aliases 2023-11-14 09:24:03 +02:00
177 changed files with 4137 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
+18 -2
View File
@@ -1,3 +1,19 @@
.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
# Claude skills: ignore everything except the ones actually written here
home/claude/skills/*
!home/claude/skills/.gitkeep
!home/claude/skills/commit-default
+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
+59
View File
@@ -0,0 +1,59 @@
- 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/ghostty: home/config/ghostty
~/.config/herdr/config.toml: home/config/herdr/config.toml
~/.config/yazi: home/config/yazi
# 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
@@ -0,0 +1,19 @@
---
name: commit-default
model: sonnet
description: Split changes into semantic commits, and push.
argument-hint: "[preapproved]"
allowed-tools: Bash(git *)
---
Run all checks, commit changes in meaningful semantic groups, and push.
**Argument: `$ARGUMENTS`** — if this contains "preapproved", skip the confirmation step in and commit immediately.
1. Run `git diff` and `git status` to see all changes.
2. Analyze the full diff and group changes into meaningful semantic commits.
3. Create each commit separately by staging the relevant files for each group. Use `git add <specific files>` — never `git add -A` or `git add .`.
4. If "preapproved" was NOT passed as an argument, show a summary of all commits to be created and ask for confirmation before creating them. If changes are requested, modify the commits accordingly and repeat until confirmed. If "preapproved" was passed, skip confirmation and commit immediately.
5. After all commits are created, run `git push`.
6. Show a summary of all commits pushed.
+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'
+157
View File
@@ -0,0 +1,157 @@
##### 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
# Claude
if type claude >/dev/null 2>&1; then
alias cc='claude'
alias ccc='claude --continue'
alias ccls='claude --resume'
alias ccy='claude --dangerously-skip-permissions'
fi
# Codex CLI
if type codex >/dev/null 2>&1; then
alias cx='codex'
alias cxls='codex resume'
alias cxf='codex --full-auto'
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
+283
View File
@@ -0,0 +1,283 @@
#? Config file for btop v.1.4.7
#* 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
#* Option to disable presets. Either the default preset, custom presets, or all presets.
#* "Off" All presets are enabled.
#* "Default" preset is disabled.#* "Custom" presets are disabled.#* "All" presets are disabled.
disable_presets = "Off"
#* 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
#* Disable all mouse events.
disable_mouse = false
#* Rounded corners on boxes, is ignored if TTY mode is ON.
rounded_corners = true
#* Use terminal synchronized output sequences to reduce flickering on supported terminals.
terminal_sync = true
#* Default symbols to use for graph creation, "braille", "block" or "tty".
#* "braille" offers the highest resolution but might not be included in all fonts.
#* "block" has half the resolution of braille but uses more common characters.
#* "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY.
#* Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view.
graph_symbol = "braille"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_cpu = "default"
# Graph symbol to use for graphs in gpu box, "default", "braille", "block" or "tty".
graph_symbol_gpu = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_mem = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_net = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_proc = "default"
#* Manually set which boxes to show. Available values are "cpu mem net proc" and "gpu0" through "gpu5", separate values with whitespace.
shown_boxes = "cpu mem net proc"
#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs.
update_ms = 2000
#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct",
#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly.
proc_sorting = "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
#* Should the process list follow the selected process when detailed view is open.
proc_follow_detailed = true
#* In tree-view, always accumulate child process resources in the parent process.
proc_aggregate = false
#* Should cpu and memory usage display be preserved for dead processes when paused.
keep_dead_proc_usage = 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"
#* If gpu info should be shown in the cpu box. Available values = "Auto", "On" and "Off".
show_gpu_info = "Auto"
#* Toggles if the lower CPU graph should be inverted.
cpu_invert_lower = true
#* Set to True to completely disable the lower CPU graph.
cpu_single_graph = false
#* Show cpu box at bottom of screen instead of top.
cpu_bottom = false
#* Shows the system uptime in the CPU box.
show_uptime = true
#* Shows the CPU package current power consumption in watts. Requires running `make setcap` or `make setuid` or running with sudo.
show_cpu_watts = 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 " ".
#* Only disks matching the filter will be shown. Prepend exclude= to only show disks not matching the filter. Examples: disk_filter="/boot /home/user", 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 = ""
#* Swap the positions of the upload and download speed graphs. When true, upload will be on top.
swap_upload_download = false
#* 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 = ""
#* "True" shows bitrates in base 10 (Kbps, Mbps). "False" shows bitrates in binary sizes (Kibps, Mibps, etc.). "Auto" uses base_10_sizes.
base_10_bitrate = "Auto"
#* 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 "~/.local/state/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"
#* Automatically save current settings to config file on exit.
save_config_on_exit = true
#* Measure PCIe throughput on NVIDIA cards, may impact performance on certain cards.
nvml_measure_pcie_speeds = true
#* Measure PCIe throughput on AMD cards, may impact performance on certain cards.
rsmi_measure_pcie_speeds = true
#* Horizontally mirror the GPU graph.
gpu_mirror_graph = true
#* Set which GPU vendors to show. Available values are "nvidia amd intel apple"
shown_gpus = "nvidia amd intel apple"
#* Custom gpu0 model name, empty string to disable.
custom_gpu_name0 = ""
#* Custom gpu1 model name, empty string to disable.
custom_gpu_name1 = ""
#* Custom gpu2 model name, empty string to disable.
custom_gpu_name2 = ""
#* Custom gpu3 model name, empty string to disable.
custom_gpu_name3 = ""
#* Custom gpu4 model name, empty string to disable.
custom_gpu_name4 = ""
#* Custom gpu5 model name, empty string to disable.
custom_gpu_name5 = ""
+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;
}
+13
View File
@@ -0,0 +1,13 @@
theme = tomorrow-night-gardev
font-family = CaskaydiaCove Nerd Font Mono
font-size = 14
font-thicken = true
window-padding-x = 16
window-padding-y = 8
cursor-style = bar
cursor-style-blink = true
macos-option-as-alt = left
@@ -0,0 +1,23 @@
# Tomorrow Night
background = #27292b
foreground = #d0d2d0
cursor-color = #d0d2d0
cursor-text = #27292b
bold-is-bright = true
palette = 0=#777777
palette = 1=#ca807b
palette = 2=#c2c683
palette = 3=#edd090
palette = 4=#98b0c7
palette = 5=#bba7c4
palette = 6=#a3c7c3
palette = 7=#fefefe
palette = 8=#999999
palette = 9=#ca807b
palette = 10=#c2c683
palette = 11=#edd090
palette = 12=#98b0c7
palette = 13=#bba7c4
palette = 14=#a3c7c3
palette = 15=#fefefe
+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
+149
View File
@@ -0,0 +1,149 @@
# 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 = "terminal"
auto_switch = false
# Tomorrow Night
[theme.custom]
panel_bg = "#27292b"
surface_dim = "#212325"
surface0 = "#313437"
surface1 = "#3c4043"
overlay0 = "#777777"
overlay1 = "#999999"
text = "#d0d2d0"
subtext0 = "#999999"
accent = "#98b0c7"
red = "#ca807b"
green = "#c2c683"
yellow = "#edd090"
blue = "#98b0c7"
mauve = "#bba7c4"
teal = "#a3c7c3"
peach = "#e0b285"
[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]
# Desktop tab row placement: "top" or "bottom".
tab_bar_position = "bottom"
# 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 = "priority"
# Accent color for highlights, borders, and navigation UI.
# Accepts: hex (#89b4fa), named colors (cyan, blue, magenta), or rgb(r,g,b)
accent = "#98b0c7"
[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
# Show the real terminal cursor in the focused pane instead of herdr's solid block.
reveal_hidden_cursor_for_cjk_ime = true
cjk_ime_cursor_shape = "bar"
[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
+90
View File
@@ -0,0 +1,90 @@
# Tomorrow Night
[mgr]
cwd = { fg = "#a3c7c3" }
find_keyword = { fg = "#edd090", bold = true, italic = true, underline = true }
find_position = { fg = "#bba7c4", bg = "reset", bold = true, italic = true }
marker_copied = { fg = "#c2c683", bg = "#c2c683" }
marker_cut = { fg = "#ca807b", bg = "#ca807b" }
marker_marked = { fg = "#a3c7c3", bg = "#a3c7c3" }
marker_selected = { fg = "#edd090", bg = "#edd090" }
count_copied = { fg = "#27292b", bg = "#c2c683" }
count_cut = { fg = "#27292b", bg = "#ca807b" }
count_selected = { fg = "#27292b", bg = "#edd090" }
border_style = { fg = "#777777" }
[tabs]
active = { fg = "#27292b", bg = "#98b0c7", bold = true }
inactive = { fg = "#98b0c7" }
[mode]
normal_main = { fg = "#27292b", bg = "#98b0c7", bold = true }
normal_alt = { fg = "#98b0c7" }
select_main = { fg = "#27292b", bg = "#ca807b", bold = true }
select_alt = { fg = "#ca807b" }
unset_main = { fg = "#27292b", bg = "#ca807b", bold = true }
unset_alt = { fg = "#ca807b" }
[status]
perm_sep = { fg = "#999999" }
perm_type = { fg = "#c2c683" }
perm_read = { fg = "#edd090" }
perm_write = { fg = "#ca807b" }
perm_exec = { fg = "#a3c7c3" }
progress_normal = { fg = "#c2c683", bg = "#27292b" }
progress_error = { fg = "#edd090", bg = "#ca807b" }
[which]
mask = { bg = "#27292b" }
cand = { fg = "#a3c7c3" }
rest = { fg = "#999999" }
desc = { fg = "#bba7c4" }
separator_style = { fg = "#999999" }
[confirm]
border = { fg = "#98b0c7" }
title = { fg = "#98b0c7" }
[spot]
border = { fg = "#98b0c7" }
title = { fg = "#98b0c7" }
tbl_col = { fg = "#98b0c7" }
tbl_cell = { fg = "#edd090", reversed = true }
[notify]
title_info = { fg = "#c2c683" }
title_warn = { fg = "#edd090" }
title_error = { fg = "#ca807b" }
[pick]
border = { fg = "#98b0c7" }
active = { fg = "#bba7c4", bold = true }
[input]
border = { fg = "#98b0c7" }
[cmp]
border = { fg = "#98b0c7" }
[tasks]
border = { fg = "#98b0c7" }
hovered = { fg = "#bba7c4", bold = true }
[help]
on = { fg = "#a3c7c3" }
run = { fg = "#bba7c4" }
footer = { fg = "#27292b", bg = "#d0d2d0" }
[filetype]
rules = [
{ mime = "image/*", fg = "#edd090" },
{ mime = "{audio,video}/*", fg = "#bba7c4" },
{ mime = "application/{zip,rar,7z*,tar,gzip,xz,zstd,bzip*,lzma,compress,archive,cpio,arj,xar,ms-cab*}", fg = "#ca807b" },
{ mime = "application/{pdf,doc,rtf}", fg = "#a3c7c3" },
{ mime = "vfs/{absent,stale}", fg = "#999999" },
{ url = "*", is = "orphan", bg = "#ca807b" },
{ url = "*", is = "exec", fg = "#c2c683" },
{ url = "*", is = "dummy", bg = "#ca807b" },
{ url = "*/", is = "dummy", bg = "#ca807b" },
{ url = "*/", fg = "#98b0c7" },
]
+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"
+101
View File
@@ -0,0 +1,101 @@
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
# Full compinit (with compaudit security scan) at most once a day; -C skips it
if [[ -n $ZDOTDIR/.zcompdump(#qN.mh+24) || ! -f $ZDOTDIR/.zcompdump ]]; then
compinit
touch $ZDOTDIR/.zcompdump
else
compinit -C
fi
# 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
# thefuck — lazy: `thefuck --alias` boots Python (~480ms), defer to first use
fuck() {
unfunction fuck
eval "$(thefuck --alias)"
fuck "$@"
}
eval "$(zoxide init zsh --cmd cd)"
[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh
+96
View File
@@ -0,0 +1,96 @@
# local user config, usernames, etc
[include]
path=~/.config/.gitconfig.local
### git-delta
[core]
pager = delta
excludesfile = ~/.config/.gitignore_global
editor = code --wait
[init]
defaultBranch = main
[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
# Delete all local branches that have been removed from the remote.
gone = !git fetch --prune && git branch -vv | awk '/: gone]/ {print $1}' | xargs -r git branch -D
+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