Compare commits
511 Commits
laptop
...
02cc4f8ed8
Author | SHA1 | Date | |
---|---|---|---|
02cc4f8ed8 | |||
d964a181ad | |||
27c36bb7f5 | |||
b76fe8d508 | |||
5c8f199fce | |||
00a448010d | |||
b76da6e9eb | |||
68e02739be | |||
b9b5b378f7 | |||
1abc06f58c | |||
b3f3813b36 | |||
56b471cdd4 | |||
136dd36b8c | |||
3f68d344d1 | |||
df00e58bd9 | |||
4745b90cea | |||
fef500721c | |||
1921df8330 | |||
8e64d3f8db | |||
8cc698af1f | |||
533256cca6 | |||
5e224b9c3f | |||
ca0ad1b6d6 | |||
8dfa9a8df7 | |||
167a9d57d7 | |||
87809a9573 | |||
d67c432be6 | |||
49f3533f9e | |||
c344ac92f6 | |||
7e848b8126 | |||
e698f17557 | |||
9907a4ba9e | |||
be2dc15a1f | |||
ca3e257fa0 | |||
a6f2ad4d9f | |||
338b77114c | |||
0878a2f251 | |||
e45837e785 | |||
f832636ffd | |||
4f68e368b9 | |||
4590c9fe1f | |||
22db460211 | |||
5f2ab6958e | |||
86c948779f | |||
9cb3f8eae9 | |||
b6dbe5afc7 | |||
4c8a559c92 | |||
cec8d1d226 | |||
8dc346a1ef | |||
26b92b38cb | |||
fe6df7942a | |||
4eddc7fc67 | |||
397b6bad7c | |||
94bdd188d0 | |||
6a047746c1 | |||
1f3693359f | |||
ba70fd8553 | |||
bb48cf3ad0 | |||
84b1a60fea | |||
a38299888f | |||
425c8f8e4f | |||
b0acc7178d | |||
4266574fa6 | |||
6f595a97ec | |||
d03b0e285c | |||
65e4352f56 | |||
38cac91b71 | |||
ede33b5207 | |||
ee90af96c3 | |||
b422e9d092 | |||
94eebc86b9 | |||
e3e582543a | |||
c6f4f651e1 | |||
e00ccffa99 | |||
cc5545f7ad | |||
4aacdc1ee4 | |||
6bfa5e0b73 | |||
b0a22014c3 | |||
eb66634f44 | |||
8e36dc50c7 | |||
b3e3352429 | |||
c6510643c1 | |||
5d82010697 | |||
e9f97ae91b | |||
65fbce48d4 | |||
bf231396ff | |||
16f2344aa0 | |||
7718fb4118 | |||
63a548d6b9 | |||
dd1b0aae5a | |||
bb7b0f36c3 | |||
dfba89af68 | |||
7298c76c48 | |||
23f51db3a5 | |||
6894cd7539 | |||
d5ca488864 | |||
9dfe8aa9f2 | |||
c4454d7711 | |||
57e17face2 | |||
d683f1f574 | |||
2572513c44 | |||
3baf2453f2 | |||
8457523518 | |||
84420e427e | |||
9bc392818f | |||
0ee158677a | |||
1fe8d17523 | |||
5500164669 | |||
f07ab92268 | |||
f19ce21672 | |||
5d5096f452 | |||
2f14aa1e9b | |||
42b5dfeee7 | |||
7f73da037b | |||
f05eae5b83 | |||
739901d174 | |||
7b4d461ba1 | |||
e55af69ed3 | |||
ac7e7a16d8 | |||
a79c1a9af8 | |||
63dc618f6d | |||
7d10c8e7d2 | |||
7254e9a6e2 | |||
ae0f6ec0ef | |||
f1be4c1fc5 | |||
37421bcc12 | |||
e3eaebf08d | |||
ce68c8c03e | |||
75180f3073 | |||
02286ffd55 | |||
20315c425a | |||
3a72c32e89 | |||
964b03fedc | |||
3ac5c39f8f | |||
a9f322d48c | |||
7bd942e753 | |||
6a70e105d4 | |||
f123ef3bbf | |||
f0e000795b | |||
c70c32150e | |||
38c60612fd | |||
ce336d469a | |||
12ef77dc6c | |||
bafaac437d | |||
71f618dd67 | |||
068d0ef29f | |||
55a99ee8f0 | |||
52d18a279d | |||
e07603e127 | |||
5e3a0f0908 | |||
80bdd2314a | |||
fa093e644e | |||
3189483bd2 | |||
0478dae702 | |||
68d875dec7 | |||
18176bf959 | |||
740f7a5ca5 | |||
5f0e729d9f | |||
d14ba88542 | |||
a4ef9a9c63 | |||
0af98663f7 | |||
c050f62249 | |||
6f0cf875d6 | |||
cb032a9862 | |||
80209213a6 | |||
15ea2fa7fe | |||
6211e1dd0d | |||
fa882cb478 | |||
fd1f22302f | |||
d3d1dd5cce | |||
a314cd3734 | |||
795e33d49b | |||
10fb2838af | |||
30c88f50af | |||
b0d9425f78 | |||
d38fc83a19 | |||
6195e6e540 | |||
d2e49a578a | |||
8cee271d91 | |||
05e71d800d | |||
294e40987c | |||
98ac550582 | |||
c84146f761 | |||
8f5e73e7f6 | |||
cec09d6e0f | |||
6ca47776b1 | |||
d28f12650d | |||
9d2560c065 | |||
9166cb844c | |||
4517da8b3d | |||
3daef8835f | |||
4756b614db | |||
971125f434 | |||
5233a7960b | |||
0197faa345 | |||
5839002d3c | |||
ea305e701c | |||
43cabd5a62 | |||
b499c581d0 | |||
5fd792084c | |||
6b305a59d7 | |||
d2a8129a20 | |||
8134c4bcc3 | |||
83385a638f | |||
baf240c27d | |||
a9d0e298b3 | |||
fa99b32cad | |||
c97f22254a | |||
ecc269ae37 | |||
603d84c03b | |||
e974145390 | |||
e19a2e81cd | |||
98644d2e2f | |||
e4d776c921 | |||
0d22026d81 | |||
c3f9cf2e5e | |||
c45d7b19f8 | |||
60dae66fd1 | |||
49cfa7c50d | |||
084100c557 | |||
a0fe904d6c | |||
2ab74d5f7a | |||
3d59481c9d | |||
a6043713c9 | |||
692c22d94c | |||
6ced2ac625 | |||
576c76f158 | |||
ff40093b83 | |||
061f196afc | |||
9dc0377a77 | |||
35e84fade2 | |||
4e8291bb14 | |||
8ef5530145 | |||
9f081ee5ed | |||
f8da075e2f | |||
24b079937c | |||
bed82ccb1e | |||
aa6f69881d | |||
d6012dd334 | |||
eec0966902 | |||
e9639a9b98 | |||
645f206821 | |||
370ebe95a8 | |||
a64c867c98 | |||
57e5efe554 | |||
cdfafa6a3b | |||
8df932f60a | |||
5db8dc4373 | |||
7a22b9daca | |||
49838d3808 | |||
1ffd0463bd | |||
7e0986f5d3 | |||
37c1c7a841 | |||
c8861a613b | |||
e9f2fcc3bf | |||
4981aef6c9 | |||
05fdf2ca38 | |||
8af2406e51 | |||
3af3ced9f5 | |||
915a821e12 | |||
b35c87b4d6 | |||
fdd53faa62 | |||
4f0fe50d0a | |||
341d1cbb4b | |||
aaa2f73332 | |||
cf2f13f629 | |||
2a4571a752 | |||
84680a5793 | |||
5d8219dba1 | |||
87a5774ce6 | |||
6d59bf0b43 | |||
451176350f | |||
e5ed273561 | |||
a565b20c30 | |||
cdd1f3240c | |||
5e0ff7ffa7 | |||
e39c13f9f8 | |||
d3eb1420c1 | |||
8f1e166f88 | |||
1627cc51b6 | |||
f35b2e8304 | |||
820574addf | |||
0e205a96d9 | |||
7b32822a32 | |||
fb79b29fa2 | |||
d50f957b2e | |||
5de7265797 | |||
13db191cc6 | |||
d2ee41eace | |||
1f818e291e | |||
607ac75200 | |||
0cf00f5fbf | |||
b04a523645 | |||
5455cdc00e | |||
293e76e8cc | |||
5a870ff3d6 | |||
67d23bcd9e | |||
d8e53f1f78 | |||
c2e80ffddd | |||
eb8601d2ac | |||
9a446de39e | |||
a0b76af476 | |||
fe6a8acb12 | |||
fd6cd027fc | |||
900d07ae77 | |||
30948764c6 | |||
34ea520910 | |||
23f1283399 | |||
6b823a06eb | |||
29d6b63382 | |||
60ccfeaf39 | |||
8dbb044f0b | |||
39a25de657 | |||
eafd193306 | |||
ec6be592cb | |||
bb4a758182 | |||
e4d5b6854c | |||
ffc6c8fa45 | |||
15a27c4607 | |||
548b1ac34f | |||
1b05d9051b | |||
6b9801b7f2 | |||
77fee14469 | |||
10524de915 | |||
619d3f9a45 | |||
b49b6263d3 | |||
7b4ddfe7e5 | |||
4cc2834027 | |||
f47ecce302 | |||
ee0b3cd654 | |||
18bd2e4d1d | |||
8e8e400eb8 | |||
0650ab3e9c | |||
c3f69e0b0c | |||
64cf4835cf | |||
37b5eafb42 | |||
627b92a611 | |||
1fe29f7da0 | |||
c21d249e75 | |||
3e1a18e2e1 | |||
d399e8e64e | |||
72d15c0c34 | |||
a13984babc | |||
8c800ed66e | |||
90a6060978 | |||
76c4c3acc5 | |||
c9713e83b9 | |||
3ae6dac93b | |||
86d4757595 | |||
b21b5fa4c0 | |||
12e54f5cfc | |||
fce2e066b0 | |||
79aa2a06cd | |||
83bf3f21d5 | |||
1e1fa989d9 | |||
b92f37ae77 | |||
ea9563282f | |||
8d643901cd | |||
bd390aac46 | |||
96b24c071e | |||
7c63a2c148 | |||
b6c9946cd9 | |||
69e5d4f1cd | |||
839f24113a | |||
b44f8f0117 | |||
8583a4c187 | |||
391948eb27 | |||
2f0fa12da4 | |||
df3bbbd763 | |||
847d14aa33 | |||
01f07fbe03 | |||
18c9babaef | |||
de79477a1f | |||
185e20fe1a | |||
e13f9ec3a3 | |||
b29168f894 | |||
9e2aa4d2e9 | |||
e0e6a5d6e0 | |||
ba6866c509 | |||
589320a4bb | |||
689cfdfcf6 | |||
ddf87f226f | |||
b9ea4521d1 | |||
fcdcd439ac | |||
e3b1ee2b2f | |||
b41adf3d55 | |||
c72a434f70 | |||
05fee51dc8 | |||
d78b2785fe | |||
b10652b0bb | |||
18b670ceec | |||
7b9b3b2b07 | |||
6d9b3beddb | |||
80eeb563e7 | |||
5f0a4ebbfd | |||
b6cfc8eae5 | |||
333e168b77 | |||
3de3873429 | |||
2b38523557 | |||
5bc28cd188 | |||
4254221f77 | |||
ddfc7d754a | |||
af72939279 | |||
16ba012e57 | |||
7490c37673 | |||
fb4d9f23d1 | |||
2e8f1d5b0e | |||
38cac7bde5 | |||
2636700acc | |||
7db1657bd5 | |||
6d7c6ce9cf | |||
c38d40ab46 | |||
49f0784271 | |||
eb3f6e25e6 | |||
c3d91c35bf | |||
7f910fd34d | |||
7dd027742c | |||
8c96767b37 | |||
b7e8ecbb54 | |||
70f2e1cc89 | |||
3156cd24b8 | |||
0153287b81 | |||
3095fe05b2 | |||
06293fe85e | |||
74ddb685f1 | |||
68b132db6b | |||
cb2292bc41 | |||
e31cf198e2 | |||
aad8888eab | |||
32eb67ed95 | |||
87f267e55d | |||
e1c834734d | |||
3e9e99c24a | |||
abce1aa5ed | |||
7355310b53 | |||
23a2993e84 | |||
f037ec1f12 | |||
0ef45e30ff | |||
c997a50f27 | |||
ea3cfcadde | |||
a03e06f132 | |||
dc8cb52396 | |||
244aaec67b | |||
2088aecfb6 | |||
27c22d988b | |||
1b1d607430 | |||
acbead5efb | |||
98d9b71d50 | |||
a2841e1ca8 | |||
d198b662b0 | |||
7e37870ce6 | |||
51985d6a7c | |||
08252a504e | |||
0d9a76a12f | |||
cf9c145628 | |||
5b0960b26b | |||
5377574b86 | |||
1487887f74 | |||
cce626d687 | |||
34046aae4b | |||
934b19045a | |||
a502df7f11 | |||
efa2f54c74 | |||
fb79782dad | |||
04e1bb1a7b | |||
7024c07a32 | |||
4749d2cefc | |||
f694963376 | |||
f3fe0a4b81 | |||
17b80372c8 | |||
215c2a1f63 | |||
d699cfffdd | |||
cec1881959 | |||
640eca56f4 | |||
99c3e52230 | |||
b044299ff6 | |||
cf62007567 | |||
acf76d08b6 | |||
3324a9576e | |||
7dd21761f6 | |||
a79ee805eb | |||
0a6f669cc1 | |||
04d58b444b | |||
98304c3bd0 | |||
d5a7f1af1e | |||
c65dd396f5 | |||
f15ebadbe1 | |||
7258c0a3bc | |||
da2eb621b0 | |||
543e897a0f | |||
6b8b8e59c7 | |||
4db4921fc2 | |||
d79ce0ec1f | |||
cead940f9d | |||
6016953788 | |||
4b6eb4a39d | |||
262fd63909 | |||
72b25299d4 | |||
f5b78714ce | |||
1ebd0a2d30 | |||
013ab7f669 | |||
e46cade6b6 | |||
44afe6a7e1 | |||
0794bc7b35 | |||
1126eb7a6a | |||
69b3f37456 | |||
4293fc90a7 | |||
b79f8672a9 | |||
555b932518 | |||
a87505b0aa | |||
be3ac77e83 |
61
.dotter/global.toml
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
[helpers]
|
||||||
|
|
||||||
|
[default]
|
||||||
|
depends = []
|
||||||
|
|
||||||
|
[manjaro.files]
|
||||||
|
manjaro = "~"
|
||||||
|
|
||||||
|
[mc.files]
|
||||||
|
mc = "~/.config/mc"
|
||||||
|
|
||||||
|
[vim.files]
|
||||||
|
# type symbolic prevents interpreting '{{' as template
|
||||||
|
"vim/.vimrc" = { target = "~/.vimrc", type = "symbolic" }
|
||||||
|
|
||||||
|
[nvim.files]
|
||||||
|
"vim/init.vim" = { target = "~/.config/nvim/init.vim", type = "symbolic" }
|
||||||
|
|
||||||
|
[i3.files]
|
||||||
|
"i3/i3" = "~/.config/i3"
|
||||||
|
"i3/i3blocks" = { target = "~/.config/i3blocks", type = "symbolic" }
|
||||||
|
"i3/rofi" = "~/.config/rofi"
|
||||||
|
"i3/i3-scrot.conf" = "~/.config/i3-scrot.conf"
|
||||||
|
"i3/i3status-rust" = "~/.config/i3status-rust"
|
||||||
|
"i3/.profile" = "~/.profile"
|
||||||
|
|
||||||
|
[i3.variables]
|
||||||
|
monitor-primary = "not-specified"
|
||||||
|
monitor-secondary = "not-specified"
|
||||||
|
screenlayout-script = "echo screenlayout-script not specified"
|
||||||
|
bar-font-size = 15
|
||||||
|
tray-output = "tray_output primary"
|
||||||
|
|
||||||
|
[emacs.files]
|
||||||
|
"emacs/doom" = "~/.config/doom"
|
||||||
|
# "emacs/spacemacs/.spacemacs" = "~/.spacemacs"
|
||||||
|
# "emacs/chemacs/.emacs-profiles.el" = "~/.emacs-profiles.el"
|
||||||
|
|
||||||
|
[alacritty.files]
|
||||||
|
alacritty = "~/.config/alacritty"
|
||||||
|
|
||||||
|
[starship.files]
|
||||||
|
starship = "~/.config/"
|
||||||
|
|
||||||
|
[zsh.files]
|
||||||
|
"zsh/.zshrc" = "~/.zshrc"
|
||||||
|
"zsh/custom-plugins" = "~/.oh-my-zsh/custom"
|
||||||
|
|
||||||
|
[polybar.files]
|
||||||
|
polybar = "~/.config/polybar"
|
||||||
|
|
||||||
|
[leftwm.files]
|
||||||
|
leftwm = "~/.config/leftwm"
|
||||||
|
|
||||||
|
[xmonad.files]
|
||||||
|
xmonad = "~/.xmonad"
|
||||||
|
|
||||||
|
[nix.files]
|
||||||
|
"direnvrc" = "~/.config/direnv/direnvrc"
|
||||||
|
"nix/configuration.nix" = "/etc/nixos/configuration.nix"
|
||||||
|
"nix/flake.nix" = "/etc/nixos/flake.nix"
|
6
.dotter/kardorf.toml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
[i3.variables]
|
||||||
|
monitor-primary = "DVI-D-0"
|
||||||
|
monitor-secondary = "DVI-D-1"
|
||||||
|
screenlayout-script = "~/.screenlayout/2desktop-dvi.sh"
|
||||||
|
bar-font-size = 15
|
||||||
|
tray-output = "tray_output DVI-D-1"
|
4
.dotter/laptop-at-home.toml
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
[i3.variables]
|
||||||
|
monitor-primary = "HDMI-1"
|
||||||
|
monitor-secondary = "eDP-1"
|
||||||
|
screenlayout-script = "~/.screenlayout/laptop-at-home.sh"
|
5
.dotter/laptop.toml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
[i3.variables]
|
||||||
|
monitor-primary = "HDMI-1"
|
||||||
|
monitor-secondary = "eDP-1"
|
||||||
|
tray-output = "tray_output eDP-1"
|
||||||
|
screenlayout-script = "$scripts/display-layoutpicker"
|
2
.dotter/local.kardorf.toml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
includes = [".dotter/kardorf.toml"]
|
||||||
|
packages = ["i3", "emacs", "alacritty", "zsh", "starship", "nix"]
|
2
.dotter/local.laptop.toml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
includes = [".dotter/laptop.toml"]
|
||||||
|
packages = []
|
57
.gitea/workflows/update-flake.yaml
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
name: Update Nix Flake
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: "30 0 * * *" # daily run
|
||||||
|
workflow_dispatch: {}
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
update-flake:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
token: "${{ gitea.token }}"
|
||||||
|
fetch-depth: 0
|
||||||
|
ref: flake-updates
|
||||||
|
|
||||||
|
- name: Git config
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
git config user.name "Gitea Actions"
|
||||||
|
git config user.email "actions@gitea.local"
|
||||||
|
|
||||||
|
- name: Rebase from master branch
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
commits_ahead=$(git rev-list --count HEAD..origin/master)
|
||||||
|
echo "Commits ahead: $commits_ahead"
|
||||||
|
git log --oneline -5
|
||||||
|
echo "----------"
|
||||||
|
git log --oneline -5 origin/master
|
||||||
|
echo .
|
||||||
|
|
||||||
|
if [ $commits_ahead -ne 0 ]
|
||||||
|
then
|
||||||
|
git rebase -X theirs origin/master
|
||||||
|
git push --force-with-lease origin flake-updates
|
||||||
|
else
|
||||||
|
echo "Rebase not necessary"
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Set up Nix
|
||||||
|
uses: cachix/install-nix-action@v31
|
||||||
|
|
||||||
|
- name: Update Flake
|
||||||
|
run: nix flake update
|
||||||
|
|
||||||
|
- name: Commit and push changes
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
git add flake.lock
|
||||||
|
git status
|
||||||
|
git diff --cached --quiet && echo "No changes to commit." && exit 0
|
||||||
|
|
||||||
|
git commit -m "Update flake.lock $(date -I)"
|
||||||
|
git push --force-with-lease origin flake-updates
|
5
.gitignore
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
.dotter/cache.toml
|
||||||
|
.dotter/cache
|
||||||
|
.dotter/local.toml
|
||||||
|
|
||||||
|
nix/result
|
25
.sops.yaml
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
keys:
|
||||||
|
- &primary age1ee5udznhadk6m7jtglu4709rep080yjyd2ukzdl8jma4mm92y3psv0slpg
|
||||||
|
- &aspi-ssh age1q8lc5340gz5xw2f57nglrss68wv0j0hf36py2pdtrl6ky3yrq9qqk0njr4
|
||||||
|
- &pianonix-ssh age1hsmfz8fjxu83sax9lr487h8xr6cyge0apdq4zpge4c8jpcjj2cksj825ct
|
||||||
|
- &builder-ssh age1kw4kmdm45zprvdkrrpvgq966l7585vhusmum083qlwnr0xxgd3uqatcyja
|
||||||
|
creation_rules:
|
||||||
|
- path_regex: secrets/secrets.yaml$
|
||||||
|
key_groups:
|
||||||
|
- age:
|
||||||
|
- *primary
|
||||||
|
- *aspi-ssh
|
||||||
|
- *pianonix-ssh
|
||||||
|
|
||||||
|
- path_regex: secrets/secrets-builder.yaml$
|
||||||
|
key_groups:
|
||||||
|
- age:
|
||||||
|
- *primary
|
||||||
|
- *builder-ssh
|
||||||
|
|
||||||
|
- path_regex: secrets/.+
|
||||||
|
key_groups:
|
||||||
|
- age:
|
||||||
|
- *primary
|
||||||
|
- *aspi-ssh
|
||||||
|
- *pianonix-ssh
|
33
Readme.org
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
#+title: My dotfiles
|
||||||
|
|
||||||
|
My dotfiles for which I am using =nix=.
|
||||||
|
The structure is managed by [[https://snowfall.org/guides/lib/quickstart/][Snowfall lib]]
|
||||||
|
|
||||||
|
* Machine selection
|
||||||
|
=home-manager= automatically searches for =user= or =user@hostname= config in the flake, so specify one of those or you will have to manually specify them:
|
||||||
|
=home-manager switch --flake .#user@hostname=
|
||||||
|
|
||||||
|
* Manual symlinks
|
||||||
|
[[file:laptop-nix.conf]] was manually symlinked to file:/etc/nix/nix.conf
|
||||||
|
and [[file:flake.nix]] was symlinked to file:~/.config/home-manager/flake.nix
|
||||||
|
|
||||||
|
For deployment!!
|
||||||
|
|
||||||
|
* Secrets management with sops
|
||||||
|
Full documentation here: https://github.com/Mic92/sops-nix
|
||||||
|
|
||||||
|
** Edit secrets
|
||||||
|
#+begin_src sh
|
||||||
|
sops edit secrets/secrets.yaml
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
** Authorize new device
|
||||||
|
- Generate public key from ssh -> Private age key generation not needed
|
||||||
|
#+begin_src sh
|
||||||
|
ssh-to-age < /etc/ssh/ssh_host_ed25519_key
|
||||||
|
#+end_src
|
||||||
|
- Add age public key to file:.sops.yaml
|
||||||
|
- Update keys
|
||||||
|
#+begin_src sh
|
||||||
|
sops updatekeys secrets/*
|
||||||
|
#+end_src
|
16
dependencies
@ -1,16 +0,0 @@
|
|||||||
dunst
|
|
||||||
element-desktop
|
|
||||||
feh
|
|
||||||
firefox
|
|
||||||
i3exit
|
|
||||||
i3-scrot
|
|
||||||
i3-wm
|
|
||||||
libqalculate
|
|
||||||
nextcloud
|
|
||||||
pavucontrol
|
|
||||||
rofi
|
|
||||||
stow
|
|
||||||
telegram-desktop
|
|
||||||
thunderbird
|
|
||||||
xclip
|
|
||||||
xwacomcalibrate
|
|
@ -1,145 +0,0 @@
|
|||||||
;;; $DOOMDIR/config.el -*- lexical-binding: t; -*-
|
|
||||||
|
|
||||||
;; Place your private configuration here! Remember, you do not need to run 'doom
|
|
||||||
;; sync' after modifying this file!
|
|
||||||
|
|
||||||
|
|
||||||
;; Some functionality uses this to identify you, e.g. GPG configuration, email
|
|
||||||
;; clients, file templates and snippets.
|
|
||||||
(setq user-full-name "Julian Mutter"
|
|
||||||
user-mail-address "julian.mutter@comumail.de")
|
|
||||||
|
|
||||||
;; Doom exposes five (optional) variables for controlling fonts in Doom. Here
|
|
||||||
;; are the three important ones:
|
|
||||||
;;
|
|
||||||
;; + `doom-font'
|
|
||||||
;; + `doom-variable-pitch-font'
|
|
||||||
;; + `doom-big-font' -- used for `doom-big-font-mode'; use this for
|
|
||||||
;; presentations or streaming.
|
|
||||||
;;
|
|
||||||
;; They all accept either a font-spec, font string ("Input Mono-12"), or xlfd
|
|
||||||
;; font string. You generally only need these two:
|
|
||||||
;; (setq doom-font (font-spec :family "monospace" :size 13 :weight 'semi-light)
|
|
||||||
;; doom-variable-pitch-font (font-spec :family "sans" :size 13))
|
|
||||||
(setq doom-font (font-spec :family "Source Code Pro" :size 13))
|
|
||||||
|
|
||||||
;; There are two ways to load a theme. Both assume the theme is installed and
|
|
||||||
;; available. You can either set `doom-theme' or manually load a theme with the
|
|
||||||
;; `load-theme' function. This is the default:
|
|
||||||
(setq doom-theme 'doom-one)
|
|
||||||
|
|
||||||
;; If you use `org' and don't want your org files in the default location below,
|
|
||||||
;; change `org-directory'. It must be set before org loads!
|
|
||||||
(setq org-directory "~/org")
|
|
||||||
|
|
||||||
;; This determines the style of line numbers in effect. If set to `nil', line
|
|
||||||
;; numbers are disabled. For relative line numbers, set this to `relative'.
|
|
||||||
(setq display-line-numbers-type 'relative)
|
|
||||||
|
|
||||||
|
|
||||||
;; Here are some additional functions/macros that could help you configure Doom:
|
|
||||||
;;
|
|
||||||
;; - `load!' for loading external *.el files relative to this one
|
|
||||||
;; - `use-package!' for configuring packages
|
|
||||||
;; - `after!' for running code after a package has loaded
|
|
||||||
;; - `add-load-path!' for adding directories to the `load-path', relative to
|
|
||||||
;; this file. Emacs searches the `load-path' when you load packages with
|
|
||||||
;; `require' or `use-package'.
|
|
||||||
;; - `map!' for binding new keys
|
|
||||||
;;
|
|
||||||
;; To get information about any of these functions/macros, move the cursor over
|
|
||||||
;; the highlighted symbol at press 'K' (non-evil users must press 'C-c c k').
|
|
||||||
;; This will open documentation for it, including demos of how they are used.
|
|
||||||
;;
|
|
||||||
;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how
|
|
||||||
;; they are implemented.
|
|
||||||
|
|
||||||
;; Open external terminal
|
|
||||||
;; (map! :map doom-leader-open-map :desc "Open" "t" (cmd! (call-process-shell-command "terminal&" nil 0)))
|
|
||||||
(map! :leader :desc "Open external terminal" "o t" (cmd! (call-process-shell-command "terminal&" nil 0)))
|
|
||||||
|
|
||||||
;; Remap font scaling keybindings to make more sense
|
|
||||||
(map! :desc "Increase font size" :n "C-+" #'text-scale-increase)
|
|
||||||
(map! :desc "Decrease font size" :n "C--" #'text-scale-decrease)
|
|
||||||
(map! :desc "Reset font size" :n "C-=" #'doom/reset-font-size)
|
|
||||||
|
|
||||||
|
|
||||||
;; Org-mode custom keybindings
|
|
||||||
;; (map! :map org-mode-map :nvi "C-k" #'org-backward-element)
|
|
||||||
;; (map! :map org-mode-map :nvi "C-j" #'org-forward-element)
|
|
||||||
;; (map! :map org-mode-map :nvi "C-h" #'org-up-element)
|
|
||||||
;; (map! :map org-mode-map :nvi "C-l" #'org-down-element)
|
|
||||||
|
|
||||||
|
|
||||||
;; Spell checking settings
|
|
||||||
;; TODO make toggling of spell checking ('SPC t s') use flyspell-mode in text modes and flyspell-prog-mode in programming modes (see hooks below)
|
|
||||||
;; Removing hooks for automatic spell checking set here: https://github.com/hlissner/doom-emacs/blob/develop/modules/checkers/spell/config.el
|
|
||||||
(remove-hook! '(org-mode-hook
|
|
||||||
markdown-mode-hook
|
|
||||||
TeX-mode-hook
|
|
||||||
rst-mode-hook
|
|
||||||
mu4e-compose-mode-hook
|
|
||||||
message-mode-hook
|
|
||||||
git-commit-mode-hook)
|
|
||||||
#'flyspell-mode)
|
|
||||||
|
|
||||||
(remove-hook! '(yaml-mode-hook
|
|
||||||
conf-mode-hook
|
|
||||||
prog-mode-hook)
|
|
||||||
#'flyspell-prog-mode)
|
|
||||||
|
|
||||||
(setq ispell-dictionary "english")
|
|
||||||
|
|
||||||
(map! :map doom-leader-toggle-map :desc "Toggle dictionary" "d" #'fd-switch-dictionary)
|
|
||||||
|
|
||||||
(defun fd-switch-dictionary()
|
|
||||||
(interactive)
|
|
||||||
(let* ((dic ispell-current-dictionary)
|
|
||||||
(change (if (string= dic "german") "english" "german")))
|
|
||||||
(ispell-change-dictionary change)
|
|
||||||
(message "Dictionary switched from %s to %s" dic change)
|
|
||||||
))
|
|
||||||
|
|
||||||
;; (autoload 'matlab-mode "matlab" "Matlab Editing Mode" t)
|
|
||||||
;; (add-to-list
|
|
||||||
;; 'auto-mode-alist
|
|
||||||
;; '("\\.m$" . matlab-mode))
|
|
||||||
;; (setq matlab-indent-function t)
|
|
||||||
;; (setq matlab-shell-command "/urs/local/bin/matlab")
|
|
||||||
|
|
||||||
;; (setq org-agenda-files (list "~/org"))
|
|
||||||
;; (custom-set-variables
|
|
||||||
;; '(org-directory "~/org")
|
|
||||||
;; '(org-agenda-files (list org-directory)))
|
|
||||||
|
|
||||||
;; (add-to-list 'org-agenda-files "~/org/anothertest.org" 'append)
|
|
||||||
|
|
||||||
;; Adding my org-agenda files
|
|
||||||
(after! org
|
|
||||||
(setq org-agenda-files (expand-file-name "org-agenda-files" doom-private-dir)))
|
|
||||||
|
|
||||||
(map! :map cdlatex-mode-map
|
|
||||||
:i "TAB" #'cdlatex-tab)
|
|
||||||
|
|
||||||
(map! :desc "Open external terminal" :nv "g C" #'toggle-word-case)
|
|
||||||
|
|
||||||
(defun toggle-word-case ()
|
|
||||||
"Toggle the case of current word or text selection."
|
|
||||||
|
|
||||||
(interactive)
|
|
||||||
(let (
|
|
||||||
(deactivate-mark nil)
|
|
||||||
$p1 $p2)
|
|
||||||
(if (use-region-p)
|
|
||||||
(setq $p1 (region-beginning) $p2 (region-end))
|
|
||||||
(save-excursion
|
|
||||||
(skip-chars-backward "[:alpha:]")
|
|
||||||
(setq $p1 (point))
|
|
||||||
(skip-chars-forward "[:alpha:]")
|
|
||||||
(setq $p2 (point))))
|
|
||||||
(let ((first-char-prop (get-char-code-property (char-after $p1) 'general-category)))
|
|
||||||
(cond ((string= "Ll" first-char-prop) ; Lower case
|
|
||||||
(upcase-region $p1 (+ $p1 1)))
|
|
||||||
((string= "Lu" first-char-prop) ; Upper case
|
|
||||||
(downcase-region $p1 (+ $p1 1)))
|
|
||||||
(t (message "Word does not start with a alphabetic character"))))))
|
|
@ -1,13 +0,0 @@
|
|||||||
(custom-set-variables
|
|
||||||
;; custom-set-variables was added by Custom.
|
|
||||||
;; If you edit it by hand, you could mess it up, so be careful.
|
|
||||||
;; Your init file should contain only one such instance.
|
|
||||||
;; If there is more than one, they won't work right.
|
|
||||||
'(org-agenda-files '("~/org-tests.org"))
|
|
||||||
'(package-selected-packages '(matlab-mode)))
|
|
||||||
(custom-set-faces
|
|
||||||
;; custom-set-faces was added by Custom.
|
|
||||||
;; If you edit it by hand, you could mess it up, so be careful.
|
|
||||||
;; Your init file should contain only one such instance.
|
|
||||||
;; If there is more than one, they won't work right.
|
|
||||||
)
|
|
@ -1,188 +0,0 @@
|
|||||||
;;; init.el -*- lexical-binding: t; -*-
|
|
||||||
|
|
||||||
;; This file controls what Doom modules are enabled and what order they load
|
|
||||||
;; in. Remember to run 'doom sync' after modifying it!
|
|
||||||
|
|
||||||
;; NOTE Press 'SPC h d h' (or 'C-h d h' for non-vim users) to access Doom's
|
|
||||||
;; documentation. There you'll find a "Module Index" link where you'll find
|
|
||||||
;; a comprehensive list of Doom's modules and what flags they support.
|
|
||||||
|
|
||||||
;; NOTE Move your cursor over a module's name (or its flags) and press 'K' (or
|
|
||||||
;; 'C-c c k' for non-vim users) to view its documentation. This works on
|
|
||||||
;; flags as well (those symbols that start with a plus).
|
|
||||||
;;
|
|
||||||
;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its
|
|
||||||
;; directory (for easy access to its source code).
|
|
||||||
|
|
||||||
(doom! :input
|
|
||||||
;;chinese
|
|
||||||
;;japanese
|
|
||||||
;;layout ; auie,ctsrnm is the superior home row
|
|
||||||
|
|
||||||
:completion
|
|
||||||
company ; the ultimate code completion backend
|
|
||||||
;;helm ; the *other* search engine for love and life
|
|
||||||
;;ido ; the other *other* search engine...
|
|
||||||
ivy ; a search engine for love and life
|
|
||||||
|
|
||||||
:ui
|
|
||||||
;;deft ; notational velocity for Emacs
|
|
||||||
doom ; what makes DOOM look the way it does
|
|
||||||
doom-dashboard ; a nifty splash screen for Emacs
|
|
||||||
doom-quit ; DOOM quit-message prompts when you quit Emacs
|
|
||||||
;;(emoji +unicode) ; 🙂
|
|
||||||
;;fill-column ; a `fill-column' indicator
|
|
||||||
hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
|
|
||||||
;;hydra
|
|
||||||
;;indent-guides ; highlighted indent columns
|
|
||||||
;;ligatures ; ligatures and symbols to make your code pretty again
|
|
||||||
;;minimap ; show a map of the code on the side
|
|
||||||
modeline ; snazzy, Atom-inspired modeline, plus API
|
|
||||||
;;nav-flash ; blink cursor line after big motions
|
|
||||||
neotree ; a project drawer, like NERDTree for vim
|
|
||||||
ophints ; highlight the region an operation acts on
|
|
||||||
(popup +defaults) ; tame sudden yet inevitable temporary windows
|
|
||||||
;;tabs ; a tab bar for Emacs
|
|
||||||
;; treemacs ; a project drawer, like neotree but cooler
|
|
||||||
;;unicode ; extended unicode support for various languages
|
|
||||||
vc-gutter ; vcs diff in the fringe
|
|
||||||
vi-tilde-fringe ; fringe tildes to mark beyond EOB
|
|
||||||
;;window-select ; visually switch windows
|
|
||||||
workspaces ; tab emulation, persistence & separate workspaces
|
|
||||||
;;zen ; distraction-free coding or writing
|
|
||||||
|
|
||||||
:editor
|
|
||||||
(evil +everywhere); come to the dark side, we have cookies
|
|
||||||
file-templates ; auto-snippets for empty files
|
|
||||||
fold ; (nigh) universal code folding
|
|
||||||
;;(format +onsave) ; automated prettiness
|
|
||||||
;;god ; run Emacs commands without modifier keys
|
|
||||||
;;lispy ; vim for lisp, for people who don't like vim
|
|
||||||
;;multiple-cursors ; editing in many places at once
|
|
||||||
;;objed ; text object editing for the innocent
|
|
||||||
;;parinfer ; turn lisp into python, sort of
|
|
||||||
;;rotate-text ; cycle region at point between text candidates
|
|
||||||
snippets ; my elves. They type so I don't have to
|
|
||||||
;;word-wrap ; soft wrapping with language-aware indent
|
|
||||||
|
|
||||||
:emacs
|
|
||||||
dired ; making dired pretty [functional]
|
|
||||||
electric ; smarter, keyword-based electric-indent
|
|
||||||
;;ibuffer ; interactive buffer management
|
|
||||||
undo ; persistent, smarter undo for your inevitable mistakes
|
|
||||||
vc ; version-control and Emacs, sitting in a tree
|
|
||||||
|
|
||||||
:term
|
|
||||||
;;eshell ; the elisp shell that works everywhere
|
|
||||||
;;shell ; simple shell REPL for Emacs
|
|
||||||
;;term ; basic terminal emulator for Emacs
|
|
||||||
;;vterm ; the best terminal emulation in Emacs
|
|
||||||
|
|
||||||
:checkers
|
|
||||||
syntax ; tasing you for every semicolon you forget
|
|
||||||
(spell +flyspell +everywhere) ; tasing you for misspelling mispelling
|
|
||||||
;;grammar ; tasing grammar mistake every you make
|
|
||||||
|
|
||||||
:tools
|
|
||||||
;;ansible
|
|
||||||
;;debugger ; FIXME stepping through code, to help you add bugs
|
|
||||||
;;direnv
|
|
||||||
;;docker
|
|
||||||
;;editorconfig ; let someone else argue about tabs vs spaces
|
|
||||||
;;ein ; tame Jupyter notebooks with emacs
|
|
||||||
(eval +overlay) ; run code, run (also, repls)
|
|
||||||
;;gist ; interacting with github gists
|
|
||||||
lookup ; navigate your code and its documentation
|
|
||||||
lsp
|
|
||||||
magit ; a git porcelain for Emacs
|
|
||||||
;;make ; run make tasks from Emacs
|
|
||||||
;;pass ; password manager for nerds
|
|
||||||
;;pdf ; pdf enhancements
|
|
||||||
;;prodigy ; FIXME managing external services & code builders
|
|
||||||
;;rgb ; creating color strings
|
|
||||||
;;taskrunner ; taskrunner for all your projects
|
|
||||||
;;terraform ; infrastructure as code
|
|
||||||
;;tmux ; an API for interacting with tmux
|
|
||||||
;;upload ; map local to remote projects via ssh/ftp
|
|
||||||
|
|
||||||
:os
|
|
||||||
(:if IS-MAC macos) ; improve compatibility with macOS
|
|
||||||
;;tty ; improve the terminal Emacs experience
|
|
||||||
|
|
||||||
:lang
|
|
||||||
;;agda ; types of types of types of types...
|
|
||||||
;;beancount ; mind the GAAP
|
|
||||||
(cc +lsp) ; C > C++ == 1
|
|
||||||
;;clojure ; java with a lisp
|
|
||||||
;;common-lisp ; if you've seen one lisp, you've seen them all
|
|
||||||
;;coq ; proofs-as-programs
|
|
||||||
;;crystal ; ruby at the speed of c
|
|
||||||
;;csharp ; unity, .NET, and mono shenanigans
|
|
||||||
;;data ; config/data formats
|
|
||||||
;;(dart +flutter) ; paint ui and not much else
|
|
||||||
;;elixir ; erlang done right
|
|
||||||
;;elm ; care for a cup of TEA?
|
|
||||||
emacs-lisp ; drown in parentheses
|
|
||||||
;;erlang ; an elegant language for a more civilized age
|
|
||||||
;;ess ; emacs speaks statistics
|
|
||||||
;;factor
|
|
||||||
;;faust ; dsp, but you get to keep your soul
|
|
||||||
;;fsharp ; ML stands for Microsoft's Language
|
|
||||||
;;fstar ; (dependent) types and (monadic) effects and Z3
|
|
||||||
;;gdscript ; the language you waited for
|
|
||||||
;;(go +lsp) ; the hipster dialect
|
|
||||||
;;(haskell +dante) ; a language that's lazier than I am
|
|
||||||
;;hy ; readability of scheme w/ speed of python
|
|
||||||
;;idris ; a language you can depend on
|
|
||||||
;;json ; At least it ain't XML
|
|
||||||
;;(java +meghanada) ; the poster child for carpal tunnel syndrome
|
|
||||||
;;javascript ; all(hope(abandon(ye(who(enter(here))))))
|
|
||||||
;; julia ; a better, faster MATLAB
|
|
||||||
;;kotlin ; a better, slicker Java(Script)
|
|
||||||
(latex +cdlatex) ; writing papers in Emacs has never been so fun
|
|
||||||
;;lean ; for folks with too much to prove
|
|
||||||
;;ledger ; be audit you can be
|
|
||||||
;;lua ; one-based indices? one-based indices
|
|
||||||
markdown ; writing docs for people to ignore
|
|
||||||
;;nim ; python + lisp at the speed of c
|
|
||||||
;;nix ; I hereby declare "nix geht mehr!"
|
|
||||||
;;ocaml ; an objective camel
|
|
||||||
org ; organize your plain life in plain text
|
|
||||||
;;php ; perl's insecure younger brother
|
|
||||||
;;plantuml ; diagrams for confusing people more
|
|
||||||
;;purescript ; javascript, but functional
|
|
||||||
(python +lsp) ; beautiful is better than ugly
|
|
||||||
;;qt ; the 'cutest' gui framework ever
|
|
||||||
;;racket ; a DSL for DSLs
|
|
||||||
;;raku ; the artist formerly known as perl6
|
|
||||||
;;rest ; Emacs as a REST client
|
|
||||||
;;rst ; ReST in peace
|
|
||||||
;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"}
|
|
||||||
rust ; Fe2O3.unwrap().unwrap().unwrap().unwrap()
|
|
||||||
;;scala ; java, but good
|
|
||||||
;;(scheme +guile) ; a fully conniving family of lisps
|
|
||||||
sh ; she sells {ba,z,fi}sh shells on the C xor
|
|
||||||
;;sml
|
|
||||||
;;solidity ; do you need a blockchain? No.
|
|
||||||
;;swift ; who asked for emoji variables?
|
|
||||||
;;terra ; Earth and Moon in alignment for performance.
|
|
||||||
;;web ; the tubes
|
|
||||||
;;yaml ; JSON, but readable
|
|
||||||
;;zig ; C, but simpler
|
|
||||||
|
|
||||||
:email
|
|
||||||
;;(mu4e +gmail)
|
|
||||||
;;notmuch
|
|
||||||
;;(wanderlust +gmail)
|
|
||||||
|
|
||||||
:app
|
|
||||||
;;calendar
|
|
||||||
;;emms
|
|
||||||
;;everywhere ; *leave* Emacs!? You must be joking
|
|
||||||
;;irc ; how neckbeards socialize
|
|
||||||
;;(rss +org) ; emacs as an RSS reader
|
|
||||||
;;twitter ; twitter client https://twitter.com/vnought
|
|
||||||
|
|
||||||
:config
|
|
||||||
;;literate
|
|
||||||
(default +bindings +smartparens))
|
|
@ -1,50 +0,0 @@
|
|||||||
;; -*- no-byte-compile: t; -*-
|
|
||||||
;;; $DOOMDIR/packages.el
|
|
||||||
|
|
||||||
;; To install a package with Doom you must declare them here and run 'doom sync'
|
|
||||||
;; on the command line, then restart Emacs for the changes to take effect -- or
|
|
||||||
;; use 'M-x doom/reload'.
|
|
||||||
|
|
||||||
|
|
||||||
;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror:
|
|
||||||
;(package! some-package)
|
|
||||||
|
|
||||||
;; To install a package directly from a remote git repo, you must specify a
|
|
||||||
;; `:recipe'. You'll find documentation on what `:recipe' accepts here:
|
|
||||||
;; https://github.com/raxod502/straight.el#the-recipe-format
|
|
||||||
;(package! another-package
|
|
||||||
; :recipe (:host github :repo "username/repo"))
|
|
||||||
|
|
||||||
;; If the package you are trying to install does not contain a PACKAGENAME.el
|
|
||||||
;; file, or is located in a subdirectory of the repo, you'll need to specify
|
|
||||||
;; `:files' in the `:recipe':
|
|
||||||
;(package! this-package
|
|
||||||
; :recipe (:host github :repo "username/repo"
|
|
||||||
; :files ("some-file.el" "src/lisp/*.el")))
|
|
||||||
|
|
||||||
;; If you'd like to disable a package included with Doom, you can do so here
|
|
||||||
;; with the `:disable' property:
|
|
||||||
;(package! builtin-package :disable t)
|
|
||||||
|
|
||||||
;; You can override the recipe of a built in package without having to specify
|
|
||||||
;; all the properties for `:recipe'. These will inherit the rest of its recipe
|
|
||||||
;; from Doom or MELPA/ELPA/Emacsmirror:
|
|
||||||
;(package! builtin-package :recipe (:nonrecursive t))
|
|
||||||
;(package! builtin-package-2 :recipe (:repo "myfork/package"))
|
|
||||||
|
|
||||||
;; Specify a `:branch' to install a package from a particular branch or tag.
|
|
||||||
;; This is required for some packages whose default branch isn't 'master' (which
|
|
||||||
;; our package manager can't deal with; see raxod502/straight.el#279)
|
|
||||||
;(package! builtin-package :recipe (:branch "develop"))
|
|
||||||
|
|
||||||
;; Use `:pin' to specify a particular commit to install.
|
|
||||||
;(package! builtin-package :pin "1a2b3c4d5e")
|
|
||||||
|
|
||||||
|
|
||||||
;; Doom's packages are pinned to a specific commit and updated from release to
|
|
||||||
;; release. The `unpin!' macro allows you to unpin single packages...
|
|
||||||
;(unpin! pinned-package)
|
|
||||||
;; ...or multiple packages
|
|
||||||
;(unpin! pinned-package another-pinned-package)
|
|
||||||
;; ...Or *all* packages (NOT RECOMMENDED; will likely break things)
|
|
||||||
;(unpin! t)
|
|
1487
flake.lock
generated
Normal file
151
flake.nix
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
{
|
||||||
|
description = "Home Manager configuration of julian";
|
||||||
|
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11";
|
||||||
|
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||||
|
|
||||||
|
deploy-rs.url = "github:serokell/deploy-rs";
|
||||||
|
|
||||||
|
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
|
||||||
|
|
||||||
|
home-manager = {
|
||||||
|
url = "github:nix-community/home-manager/release-24.11";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
|
snowfall-lib = {
|
||||||
|
url = "github:snowfallorg/lib";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
|
disko = {
|
||||||
|
url = "github:nix-community/disko";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
|
alacritty-theme = {
|
||||||
|
url = "github:alacritty/alacritty-theme";
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
yazi-flavors = {
|
||||||
|
url = "github:yazi-rs/flavors";
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
nixvim = {
|
||||||
|
url = "github:nix-community/nixvim/nixos-24.11";
|
||||||
|
# If using a stable channel you can use `url = "github:nix-community/nixvim/nixos-<version>"`
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
|
nix-matlab.url = "gitlab:doronbehar/nix-matlab";
|
||||||
|
nix-matlab.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
|
||||||
|
sops-nix.url = "github:Mic92/sops-nix";
|
||||||
|
sops-nix.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
|
||||||
|
hyprland.url = "github:hyprwm/Hyprland?submodules=1";
|
||||||
|
# hyprland.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
|
||||||
|
hyprland-plugins = {
|
||||||
|
url = "github:hyprwm/hyprland-plugins";
|
||||||
|
inputs.hyprland.follows = "hyprland";
|
||||||
|
};
|
||||||
|
|
||||||
|
nix-colors.url = "github:Misterio77/nix-colors";
|
||||||
|
|
||||||
|
nix-topology.url = "github:oddlama/nix-topology";
|
||||||
|
nix-topology.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
|
||||||
|
nix-ld.url = "github:Mic92/nix-ld";
|
||||||
|
nix-ld.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
|
||||||
|
## My projects
|
||||||
|
sheet-organizer.url = "git+https://gitlab.julian-mutter.de/julian/sheet-organizer";
|
||||||
|
sheet-organizer.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
|
||||||
|
music-reader.url = "git+https://gitlab.julian-mutter.de/julian/music-reader";
|
||||||
|
music-reader.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs =
|
||||||
|
inputs:
|
||||||
|
inputs.snowfall-lib.mkFlake {
|
||||||
|
inherit inputs;
|
||||||
|
# Must always be ./.
|
||||||
|
src = ./.;
|
||||||
|
|
||||||
|
# Add overlays for the `nixpkgs` channel.
|
||||||
|
overlays = with inputs; [
|
||||||
|
nix-matlab.overlay
|
||||||
|
nix-topology.overlays.default
|
||||||
|
];
|
||||||
|
|
||||||
|
snowfall = {
|
||||||
|
# The root of the snowfall config
|
||||||
|
root = ./.;
|
||||||
|
# lib, package and overlay namespace
|
||||||
|
namespace = "frajul"; # defaults to "internal"
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
name = "Julian's dotfiles";
|
||||||
|
title = "Julian's dotfiles";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# The attribute set specified here will be passed directly to NixPkgs when
|
||||||
|
# instantiating the package set.
|
||||||
|
channels-config = {
|
||||||
|
# Allow unfree packages.
|
||||||
|
allowUnfree = true;
|
||||||
|
nvidia.acceptLicense = true;
|
||||||
|
|
||||||
|
# Allow certain insecure packages
|
||||||
|
permittedInsecurePackages = [ "olm-3.2.16" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
systems.modules.nixos = with inputs; [
|
||||||
|
nix-topology.nixosModules.default
|
||||||
|
sops-nix.nixosModules.sops
|
||||||
|
disko.nixosModules.disko
|
||||||
|
];
|
||||||
|
systems.hosts.pianonix.modules = with inputs; [ nixos-hardware.nixosModules.raspberry-pi-4 ];
|
||||||
|
|
||||||
|
# topology =
|
||||||
|
# with inputs;
|
||||||
|
# let
|
||||||
|
# host = self.nixosConfigurations.${builtins.head (builtins.attrNames self.nixosConfigurations)};
|
||||||
|
# in
|
||||||
|
# import nix-topology {
|
||||||
|
# inherit (host) pkgs; # Only this package set must include nix-topology.overlays.default
|
||||||
|
# modules = [
|
||||||
|
# (import ./topology { inherit (host) config; })
|
||||||
|
# { inherit (self) nixosConfigurations; }
|
||||||
|
# ];
|
||||||
|
# };
|
||||||
|
}
|
||||||
|
// {
|
||||||
|
# deploy-rs node configuration
|
||||||
|
deploy.nodes.pianonix = {
|
||||||
|
hostname = "pianonix.local";
|
||||||
|
profiles.system = {
|
||||||
|
sshUser = "root";
|
||||||
|
user = "root";
|
||||||
|
path = inputs.deploy-rs.lib.aarch64-linux.activate.nixos inputs.self.nixosConfigurations.pianonix;
|
||||||
|
confirmTimeout = 90; # default: 30s; raspberrypi takes a little longer restarting services
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
deploy.nodes.builder = {
|
||||||
|
hostname = "builder.julian-mutter.de";
|
||||||
|
profiles.system = {
|
||||||
|
sshUser = "root";
|
||||||
|
user = "root";
|
||||||
|
path = inputs.deploy-rs.lib.x86_64-linux.activate.nixos inputs.self.nixosConfigurations.builder;
|
||||||
|
remoteBuild = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
71
homes/x86_64-linux/julian@aspi/default.nix
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
{
|
||||||
|
# Snowfall Lib provides a customized `lib` instance with access to your flake's library
|
||||||
|
# as well as the libraries available from your flake's inputs.
|
||||||
|
lib,
|
||||||
|
# An instance of `pkgs` with your overlays and packages applied is also available.
|
||||||
|
pkgs,
|
||||||
|
# You also have access to your flake's inputs.
|
||||||
|
inputs,
|
||||||
|
|
||||||
|
# Additional metadata is provided by Snowfall Lib.
|
||||||
|
namespace, # The namespace used for your flake, defaulting to "internal" if not set.
|
||||||
|
home, # The home architecture for this host (eg. `x86_64-linux`).
|
||||||
|
target, # The Snowfall Lib target for this home (eg. `x86_64-home`).
|
||||||
|
format, # A normalized name for the home target (eg. `home`).
|
||||||
|
virtual, # A boolean to determine whether this home is a virtual target using nixos-generators.
|
||||||
|
host, # The host name for this home.
|
||||||
|
|
||||||
|
# All other arguments come from the home home.
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
home.username = "julian";
|
||||||
|
home.homeDirectory = "/home/julian";
|
||||||
|
|
||||||
|
modules = {
|
||||||
|
non-nixos.is-nixos = true;
|
||||||
|
shell = {
|
||||||
|
# zsh.enable = true;
|
||||||
|
fish.enable = true;
|
||||||
|
direnv.enable = true;
|
||||||
|
};
|
||||||
|
topgrade.enable = true;
|
||||||
|
neovim.enable = true;
|
||||||
|
kitty = {
|
||||||
|
enable = true;
|
||||||
|
mkDefault = true;
|
||||||
|
};
|
||||||
|
wezterm = {
|
||||||
|
enable = true;
|
||||||
|
mkDefault = false;
|
||||||
|
};
|
||||||
|
alacritty = {
|
||||||
|
enable = true;
|
||||||
|
mkDefault = false;
|
||||||
|
};
|
||||||
|
yazi.enable = true;
|
||||||
|
emacs.enable = true;
|
||||||
|
|
||||||
|
i3.enable = true;
|
||||||
|
|
||||||
|
# hyprland.enable = true;
|
||||||
|
nix-helper.enable = true;
|
||||||
|
|
||||||
|
desktop.enable = true;
|
||||||
|
fonts.enable = true;
|
||||||
|
|
||||||
|
suites = {
|
||||||
|
cli.enable = true;
|
||||||
|
desktop.enable = true;
|
||||||
|
development.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Let Home Manager install and manage itself.
|
||||||
|
programs.home-manager.enable = true;
|
||||||
|
|
||||||
|
# ======================== DO NOT CHANGE THIS ========================
|
||||||
|
home.stateVersion = "23.11";
|
||||||
|
# ======================== DO NOT CHANGE THIS ========================
|
||||||
|
}
|
45
homes/x86_64-linux/julian@aspi/mimeapps.nix
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
# Manage mime-types via home-manager. Sadly the file gets overwritten by some applications and also not all of the desktop file paths are correct
|
||||||
|
# Use from home-manager like this:
|
||||||
|
#
|
||||||
|
# xdg.mimeApps.enable = true;
|
||||||
|
# xdg.mimeApps.defaultApplications = import ./mimeapps.nix {
|
||||||
|
# inherit pkgs;
|
||||||
|
# inherit lib;
|
||||||
|
# };
|
||||||
|
|
||||||
|
{ lib, pkgs, ... }:
|
||||||
|
let
|
||||||
|
package-names = with pkgs; {
|
||||||
|
"x-scheme-handler/tg" = telegram-desktop;
|
||||||
|
"x-scheme-handler/mailto" = thunderbird;
|
||||||
|
"message/rfc822" = thunderbird;
|
||||||
|
"x-scheme-handler/mid" = thunderbird;
|
||||||
|
"x-scheme-handler/webcal" = thunderbird;
|
||||||
|
"text/calendar" = thunderbird;
|
||||||
|
"application/x-extension-ics" = thunderbird;
|
||||||
|
"x-scheme-handler/webcals" = thunderbird;
|
||||||
|
"application/zip" = mate.engrampa;
|
||||||
|
"text/plain" = xfce.mousepad;
|
||||||
|
"image/jpeg" = nomacs;
|
||||||
|
"application/pdf" = evince;
|
||||||
|
"text/html" = firefox;
|
||||||
|
"x-scheme-handler/http" = firefox;
|
||||||
|
"x-scheme-handler/https" = firefox;
|
||||||
|
"x-scheme-handler/chrome" = firefox;
|
||||||
|
"application/x-extension-htm" = firefox;
|
||||||
|
"application/x-extension-html" = firefox;
|
||||||
|
"application/x-extension-shtml" = firefox;
|
||||||
|
"application/xhtml+xml" = firefox;
|
||||||
|
"application/x-extension-xhtml" = firefox;
|
||||||
|
"application/x-extension-xht" = firefox;
|
||||||
|
"image/svg+xml" = inkscape;
|
||||||
|
"image/png" = nomacs;
|
||||||
|
"x-scheme-handler/eclipse+command" = dbeaver-bin;
|
||||||
|
"video/mp4" = vlc;
|
||||||
|
"audio/mpeg" = vlc;
|
||||||
|
"inode/directory" = pcmanfm;
|
||||||
|
};
|
||||||
|
in
|
||||||
|
lib.mapAttrs (mimeType: package: [
|
||||||
|
"${package}/share/applications/${package.pname}.desktop"
|
||||||
|
]) package-names
|
57
homes/x86_64-linux/julian@kardorf/default.nix
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
{
|
||||||
|
# Snowfall Lib provides a customized `lib` instance with access to your flake's library
|
||||||
|
# as well as the libraries available from your flake's inputs.
|
||||||
|
lib,
|
||||||
|
# An instance of `pkgs` with your overlays and packages applied is also available.
|
||||||
|
pkgs,
|
||||||
|
# You also have access to your flake's inputs.
|
||||||
|
inputs,
|
||||||
|
|
||||||
|
# Additional metadata is provided by Snowfall Lib.
|
||||||
|
namespace, # The namespace used for your flake, defaulting to "internal" if not set.
|
||||||
|
home, # The home architecture for this host (eg. `x86_64-linux`).
|
||||||
|
target, # The Snowfall Lib target for this home (eg. `x86_64-home`).
|
||||||
|
format, # A normalized name for the home target (eg. `home`).
|
||||||
|
virtual, # A boolean to determine whether this home is a virtual target using nixos-generators.
|
||||||
|
host, # The host name for this home.
|
||||||
|
|
||||||
|
# All other arguments come from the home home.
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
home.username = "julian";
|
||||||
|
home.homeDirectory = "/home/julian";
|
||||||
|
|
||||||
|
modules = {
|
||||||
|
non-nixos.is-nixos = true;
|
||||||
|
shell = {
|
||||||
|
fish.enable = true;
|
||||||
|
direnv.enable = true;
|
||||||
|
};
|
||||||
|
topgrade.enable = true;
|
||||||
|
neovim.enable = true;
|
||||||
|
# alacritty.enable = true;
|
||||||
|
kitty.enable = true;
|
||||||
|
yazi.enable = true;
|
||||||
|
emacs.enable = true;
|
||||||
|
i3.enable = true;
|
||||||
|
nix-helper.enable = true;
|
||||||
|
|
||||||
|
desktop.enable = true;
|
||||||
|
fonts.enable = true;
|
||||||
|
|
||||||
|
suites = {
|
||||||
|
cli.enable = true;
|
||||||
|
desktop.enable = true;
|
||||||
|
development.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Let Home Manager install and manage itself.
|
||||||
|
programs.home-manager.enable = true;
|
||||||
|
|
||||||
|
# ======================== DO NOT CHANGE THIS ========================
|
||||||
|
home.stateVersion = "23.11";
|
||||||
|
# ======================== DO NOT CHANGE THIS ========================
|
||||||
|
}
|
70
homes/x86_64-linux/julian@pianonix/default.nix
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
{
|
||||||
|
# Snowfall Lib provides a customized `lib` instance with access to your flake's library
|
||||||
|
# as well as the libraries available from your flake's inputs.
|
||||||
|
lib,
|
||||||
|
# An instance of `pkgs` with your overlays and packages applied is also available.
|
||||||
|
pkgs,
|
||||||
|
# You also have access to your flake's inputs.
|
||||||
|
inputs,
|
||||||
|
|
||||||
|
# Additional metadata is provided by Snowfall Lib.
|
||||||
|
namespace, # The namespace used for your flake, defaulting to "internal" if not set.
|
||||||
|
home,
|
||||||
|
target, # The Snowfall Lib target for this home (eg. `x86_64-home`).
|
||||||
|
format, # A normalized name for the home target (eg. `home`).
|
||||||
|
virtual, # A boolean to determine whether this home is a virtual target using nixos-generators.
|
||||||
|
host, # The host name for this home.
|
||||||
|
|
||||||
|
# All other arguments come from the home home.
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}@arguments:
|
||||||
|
{
|
||||||
|
home.username = "julian";
|
||||||
|
home.homeDirectory = "/home/julian";
|
||||||
|
|
||||||
|
modules = {
|
||||||
|
non-nixos.is-nixos = true;
|
||||||
|
|
||||||
|
shell = {
|
||||||
|
fish.enable = true;
|
||||||
|
};
|
||||||
|
yazi.enable = true;
|
||||||
|
topgrade.enable = true;
|
||||||
|
neovim.enable = true;
|
||||||
|
wezterm.enable = true;
|
||||||
|
nix-helper.enable = true;
|
||||||
|
|
||||||
|
desktop.enable = true;
|
||||||
|
fonts.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
services.syncthing.tray.enable = true;
|
||||||
|
services.syncthing.tray.command = "syncthingtray --wait"; # Wait for tray to become available
|
||||||
|
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
music-reader
|
||||||
|
sheet-organizer
|
||||||
|
|
||||||
|
xournalpp
|
||||||
|
musescore
|
||||||
|
|
||||||
|
onboard
|
||||||
|
];
|
||||||
|
|
||||||
|
# Autostart link
|
||||||
|
home.file = {
|
||||||
|
".config/autostart/sheet-organizer.desktop".source =
|
||||||
|
"${pkgs.sheet-organizer}/share/applications/sheet-organizer.desktop";
|
||||||
|
".config/sheet-organizer/config.toml".text = ''
|
||||||
|
working_directory = "/home/julian/Klavier"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
# Let Home Manager install and manage itself.
|
||||||
|
programs.home-manager.enable = true;
|
||||||
|
|
||||||
|
# ======================== DO NOT CHANGE THIS ========================
|
||||||
|
home.stateVersion = "23.11";
|
||||||
|
# ======================== DO NOT CHANGE THIS ========================
|
||||||
|
}
|
53
homes/x86_64-linux/julian@v3ms/default.nix
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
{
|
||||||
|
# Snowfall Lib provides a customized `lib` instance with access to your flake's library
|
||||||
|
# as well as the libraries available from your flake's inputs.
|
||||||
|
lib,
|
||||||
|
# An instance of `pkgs` with your overlays and packages applied is also available.
|
||||||
|
pkgs,
|
||||||
|
# You also have access to your flake's inputs.
|
||||||
|
inputs,
|
||||||
|
|
||||||
|
# Additional metadata is provided by Snowfall Lib.
|
||||||
|
namespace, # The namespace used for your flake, defaulting to "internal" if not set.
|
||||||
|
home, # The home architecture for this host (eg. `x86_64-linux`).
|
||||||
|
target, # The Snowfall Lib target for this home (eg. `x86_64-home`).
|
||||||
|
format, # A normalized name for the home target (eg. `home`).
|
||||||
|
virtual, # A boolean to determine whether this home is a virtual target using nixos-generators.
|
||||||
|
host, # The host name for this home.
|
||||||
|
|
||||||
|
# All other arguments come from the home home.
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
home.username = "julian";
|
||||||
|
home.homeDirectory = "/home/julian";
|
||||||
|
|
||||||
|
modules = {
|
||||||
|
non-nixos.is-nixos = false;
|
||||||
|
shell = {
|
||||||
|
fish.enable = true;
|
||||||
|
direnv.enable = true;
|
||||||
|
};
|
||||||
|
topgrade.enable = true;
|
||||||
|
neovim.enable = true;
|
||||||
|
yazi.enable = true;
|
||||||
|
emacs.enable = true;
|
||||||
|
|
||||||
|
nix-helper.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
home.packages =
|
||||||
|
lib.lists.concatMap (packages-list-file: import packages-list-file { inherit pkgs; })
|
||||||
|
[
|
||||||
|
./fonts.nix
|
||||||
|
./packages.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
# Let Home Manager install and manage itself.
|
||||||
|
programs.home-manager.enable = true;
|
||||||
|
|
||||||
|
# ======================== DO NOT CHANGE THIS ========================
|
||||||
|
home.stateVersion = "23.11";
|
||||||
|
# ======================== DO NOT CHANGE THIS ========================
|
||||||
|
}
|
15
homes/x86_64-linux/julian@v3ms/fonts.nix
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
|
||||||
|
with pkgs;
|
||||||
|
[
|
||||||
|
(nerdfonts.override { fonts = [ "FiraCode" ]; })
|
||||||
|
font-awesome
|
||||||
|
dejavu_fonts
|
||||||
|
noto-fonts
|
||||||
|
noto-fonts-cjk-sans
|
||||||
|
noto-fonts-emoji
|
||||||
|
liberation_ttf
|
||||||
|
fira-code
|
||||||
|
fira-code-symbols
|
||||||
|
source-code-pro
|
||||||
|
]
|
44
homes/x86_64-linux/julian@v3ms/packages.nix
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
|
||||||
|
with pkgs;
|
||||||
|
[
|
||||||
|
# Rust setup
|
||||||
|
rustc
|
||||||
|
rustfmt
|
||||||
|
cargo
|
||||||
|
clippy
|
||||||
|
rust-analyzer
|
||||||
|
|
||||||
|
typst
|
||||||
|
tree-sitter-grammars.tree-sitter-typst
|
||||||
|
|
||||||
|
# Further tools
|
||||||
|
cntr # nix debugger
|
||||||
|
|
||||||
|
lazygit
|
||||||
|
shellcheck
|
||||||
|
lazygit
|
||||||
|
git
|
||||||
|
mc
|
||||||
|
tree
|
||||||
|
bat
|
||||||
|
ripgrep
|
||||||
|
fd
|
||||||
|
fzf
|
||||||
|
topgrade
|
||||||
|
htop
|
||||||
|
killall
|
||||||
|
findutils
|
||||||
|
jq
|
||||||
|
ffmpeg
|
||||||
|
julia-bin
|
||||||
|
|
||||||
|
poppler_utils # Pdf utils including pdfimages
|
||||||
|
sage
|
||||||
|
|
||||||
|
pkg-config # Often needed to build something
|
||||||
|
|
||||||
|
devbox # reproducible dev envs based on nix
|
||||||
|
|
||||||
|
mysql80
|
||||||
|
]
|
@ -1,431 +0,0 @@
|
|||||||
[global]
|
|
||||||
### Display ###
|
|
||||||
|
|
||||||
# Which monitor should the notifications be displayed on.
|
|
||||||
monitor = 0
|
|
||||||
|
|
||||||
# Display notification on focused monitor. Possible modes are:
|
|
||||||
# mouse: follow mouse pointer
|
|
||||||
# keyboard: follow window with keyboard focus
|
|
||||||
# none: don't follow anything
|
|
||||||
#
|
|
||||||
# "keyboard" needs a window manager that exports the
|
|
||||||
# _NET_ACTIVE_WINDOW property.
|
|
||||||
# This should be the case for almost all modern window managers.
|
|
||||||
#
|
|
||||||
# If this option is set to mouse or keyboard, the monitor option
|
|
||||||
# will be ignored.
|
|
||||||
follow = keyboard #mouse
|
|
||||||
|
|
||||||
# The geometry of the window:
|
|
||||||
# [{width}]x{height}[+/-{x}+/-{y}]
|
|
||||||
# The geometry of the message window.
|
|
||||||
# The height is measured in number of notifications everything else
|
|
||||||
# in pixels. If the width is omitted but the height is given
|
|
||||||
# ("-geometry x2"), the message window expands over the whole screen
|
|
||||||
# (dmenu-like). If width is 0, the window expands to the longest
|
|
||||||
# message displayed. A positive x is measured from the left, a
|
|
||||||
# negative from the right side of the screen. Y is measured from
|
|
||||||
# the top and down respectively.
|
|
||||||
# The width can be negative. In this case the actual width is the
|
|
||||||
# screen width minus the width defined in within the geometry option.
|
|
||||||
geometry = "300x5-30+20"
|
|
||||||
|
|
||||||
# Show how many messages are currently hidden (because of geometry).
|
|
||||||
indicate_hidden = yes
|
|
||||||
|
|
||||||
# Shrink window if it's smaller than the width. Will be ignored if
|
|
||||||
# width is 0.
|
|
||||||
shrink = no
|
|
||||||
|
|
||||||
# The transparency of the window. Range: [0; 100].
|
|
||||||
# This option will only work if a compositing window manager is
|
|
||||||
# present (e.g. xcompmgr, compiz, etc.).
|
|
||||||
transparency = 0
|
|
||||||
|
|
||||||
# The height of the entire notification. If the height is smaller
|
|
||||||
# than the font height and padding combined, it will be raised
|
|
||||||
# to the font height and padding.
|
|
||||||
notification_height = 0
|
|
||||||
|
|
||||||
# Draw a line of "separator_height" pixel height between two
|
|
||||||
# notifications.
|
|
||||||
# Set to 0 to disable.
|
|
||||||
separator_height = 2
|
|
||||||
|
|
||||||
# Padding between text and separator.
|
|
||||||
padding = 8
|
|
||||||
|
|
||||||
# Horizontal padding.
|
|
||||||
horizontal_padding = 8
|
|
||||||
|
|
||||||
# Defines width in pixels of frame around the notification window.
|
|
||||||
# Set to 0 to disable.
|
|
||||||
frame_width = 3
|
|
||||||
|
|
||||||
# Defines color of the frame around the notification window.
|
|
||||||
frame_color = "#aaaaaa"
|
|
||||||
|
|
||||||
# Define a color for the separator.
|
|
||||||
# possible values are:
|
|
||||||
# * auto: dunst tries to find a color fitting to the background;
|
|
||||||
# * foreground: use the same color as the foreground;
|
|
||||||
# * frame: use the same color as the frame;
|
|
||||||
# * anything else will be interpreted as a X color.
|
|
||||||
separator_color = frame
|
|
||||||
|
|
||||||
# Sort messages by urgency.
|
|
||||||
sort = yes
|
|
||||||
|
|
||||||
# Don't remove messages, if the user is idle (no mouse or keyboard input)
|
|
||||||
# for longer than idle_threshold seconds.
|
|
||||||
# Set to 0 to disable.
|
|
||||||
# A client can set the 'transient' hint to bypass this. See the rules
|
|
||||||
# section for how to disable this if necessary
|
|
||||||
idle_threshold = 120
|
|
||||||
|
|
||||||
### Text ###
|
|
||||||
|
|
||||||
font = Monospace 12
|
|
||||||
|
|
||||||
# The spacing between lines. If the height is smaller than the
|
|
||||||
# font height, it will get raised to the font height.
|
|
||||||
line_height = 0
|
|
||||||
|
|
||||||
# Possible values are:
|
|
||||||
# full: Allow a small subset of html markup in notifications:
|
|
||||||
# <b>bold</b>
|
|
||||||
# <i>italic</i>
|
|
||||||
# <s>strikethrough</s>
|
|
||||||
# <u>underline</u>
|
|
||||||
#
|
|
||||||
# For a complete reference see
|
|
||||||
# <https://developer.gnome.org/pango/stable/pango-Markup.html>.
|
|
||||||
#
|
|
||||||
# strip: This setting is provided for compatibility with some broken
|
|
||||||
# clients that send markup even though it's not enabled on the
|
|
||||||
# server. Dunst will try to strip the markup but the parsing is
|
|
||||||
# simplistic so using this option outside of matching rules for
|
|
||||||
# specific applications *IS GREATLY DISCOURAGED*.
|
|
||||||
#
|
|
||||||
# no: Disable markup parsing, incoming notifications will be treated as
|
|
||||||
# plain text. Dunst will not advertise that it has the body-markup
|
|
||||||
# capability if this is set as a global setting.
|
|
||||||
#
|
|
||||||
# It's important to note that markup inside the format option will be parsed
|
|
||||||
# regardless of what this is set to.
|
|
||||||
markup = full
|
|
||||||
|
|
||||||
# The format of the message. Possible variables are:
|
|
||||||
# %a appname
|
|
||||||
# %s summary
|
|
||||||
# %b body
|
|
||||||
# %i iconname (including its path)
|
|
||||||
# %I iconname (without its path)
|
|
||||||
# %p progress value if set ([ 0%] to [100%]) or nothing
|
|
||||||
# %n progress value if set without any extra characters
|
|
||||||
# %% Literal %
|
|
||||||
# Markup is allowed
|
|
||||||
format = "<b>%s</b>\n%b"
|
|
||||||
|
|
||||||
# Alignment of message text.
|
|
||||||
# Possible values are "left", "center" and "right".
|
|
||||||
alignment = left
|
|
||||||
|
|
||||||
# Vertical alignment of message text and icon.
|
|
||||||
# Possible values are "top", "center" and "bottom".
|
|
||||||
vertical_alignment = center
|
|
||||||
|
|
||||||
# Show age of message if message is older than show_age_threshold
|
|
||||||
# seconds.
|
|
||||||
# Set to -1 to disable.
|
|
||||||
show_age_threshold = 60
|
|
||||||
|
|
||||||
# Split notifications into multiple lines if they don't fit into
|
|
||||||
# geometry.
|
|
||||||
word_wrap = yes
|
|
||||||
|
|
||||||
# When word_wrap is set to no, specify where to make an ellipsis in long lines.
|
|
||||||
# Possible values are "start", "middle" and "end".
|
|
||||||
ellipsize = middle
|
|
||||||
|
|
||||||
# Ignore newlines '\n' in notifications.
|
|
||||||
ignore_newline = no
|
|
||||||
|
|
||||||
# Stack together notifications with the same content
|
|
||||||
stack_duplicates = true
|
|
||||||
|
|
||||||
# Hide the count of stacked notifications with the same content
|
|
||||||
hide_duplicate_count = false
|
|
||||||
|
|
||||||
# Display indicators for URLs (U) and actions (A).
|
|
||||||
show_indicators = yes
|
|
||||||
|
|
||||||
### Icons ###
|
|
||||||
|
|
||||||
# Align icons left/right/off
|
|
||||||
icon_position = left
|
|
||||||
|
|
||||||
# Scale small icons up to this size, set to 0 to disable. Helpful
|
|
||||||
# for e.g. small files or high-dpi screens. In case of conflict,
|
|
||||||
# max_icon_size takes precedence over this.
|
|
||||||
min_icon_size = 0
|
|
||||||
|
|
||||||
# Scale larger icons down to this size, set to 0 to disable
|
|
||||||
max_icon_size = 32
|
|
||||||
|
|
||||||
# Paths to default icons.
|
|
||||||
icon_path = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/
|
|
||||||
|
|
||||||
### History ###
|
|
||||||
|
|
||||||
# Should a notification popped up from history be sticky or timeout
|
|
||||||
# as if it would normally do.
|
|
||||||
sticky_history = yes
|
|
||||||
|
|
||||||
# Maximum amount of notifications kept in history
|
|
||||||
history_length = 20
|
|
||||||
|
|
||||||
### Misc/Advanced ###
|
|
||||||
|
|
||||||
# dmenu path.
|
|
||||||
dmenu = /usr/bin/dmenu -p dunst:
|
|
||||||
|
|
||||||
# Browser for opening urls in context menu.
|
|
||||||
browser = /usr/bin/firefox -new-tab
|
|
||||||
|
|
||||||
# Always run rule-defined scripts, even if the notification is suppressed
|
|
||||||
always_run_script = true
|
|
||||||
|
|
||||||
# Define the title of the windows spawned by dunst
|
|
||||||
title = Dunst
|
|
||||||
|
|
||||||
# Define the class of the windows spawned by dunst
|
|
||||||
class = Dunst
|
|
||||||
|
|
||||||
# Print a notification on startup.
|
|
||||||
# This is mainly for error detection, since dbus (re-)starts dunst
|
|
||||||
# automatically after a crash.
|
|
||||||
startup_notification = false
|
|
||||||
|
|
||||||
# Manage dunst's desire for talking
|
|
||||||
# Can be one of the following values:
|
|
||||||
# crit: Critical features. Dunst aborts
|
|
||||||
# warn: Only non-fatal warnings
|
|
||||||
# mesg: Important Messages
|
|
||||||
# info: all unimportant stuff
|
|
||||||
# debug: all less than unimportant stuff
|
|
||||||
verbosity = mesg
|
|
||||||
|
|
||||||
# Define the corner radius of the notification window
|
|
||||||
# in pixel size. If the radius is 0, you have no rounded
|
|
||||||
# corners.
|
|
||||||
# The radius will be automatically lowered if it exceeds half of the
|
|
||||||
# notification height to avoid clipping text and/or icons.
|
|
||||||
corner_radius = 0
|
|
||||||
|
|
||||||
# Ignore the dbus closeNotification message.
|
|
||||||
# Useful to enforce the timeout set by dunst configuration. Without this
|
|
||||||
# parameter, an application may close the notification sent before the
|
|
||||||
# user defined timeout.
|
|
||||||
ignore_dbusclose = false
|
|
||||||
|
|
||||||
### Legacy
|
|
||||||
|
|
||||||
# Use the Xinerama extension instead of RandR for multi-monitor support.
|
|
||||||
# This setting is provided for compatibility with older nVidia drivers that
|
|
||||||
# do not support RandR and using it on systems that support RandR is highly
|
|
||||||
# discouraged.
|
|
||||||
#
|
|
||||||
# By enabling this setting dunst will not be able to detect when a monitor
|
|
||||||
# is connected or disconnected which might break follow mode if the screen
|
|
||||||
# layout changes.
|
|
||||||
force_xinerama = false
|
|
||||||
|
|
||||||
### mouse
|
|
||||||
|
|
||||||
# Defines list of actions for each mouse event
|
|
||||||
# Possible values are:
|
|
||||||
# * none: Don't do anything.
|
|
||||||
# * do_action: If the notification has exactly one action, or one is marked as default,
|
|
||||||
# invoke it. If there are multiple and no default, open the context menu.
|
|
||||||
# * close_current: Close current notification.
|
|
||||||
# * close_all: Close all notifications.
|
|
||||||
# These values can be strung together for each mouse event, and
|
|
||||||
# will be executed in sequence.
|
|
||||||
mouse_left_click = do_action, close_current
|
|
||||||
mouse_middle_click = do_action, close_current
|
|
||||||
mouse_right_click = close_all
|
|
||||||
|
|
||||||
# Experimental features that may or may not work correctly. Do not expect them
|
|
||||||
# to have a consistent behaviour across releases.
|
|
||||||
[experimental]
|
|
||||||
# Calculate the dpi to use on a per-monitor basis.
|
|
||||||
# If this setting is enabled the Xft.dpi value will be ignored and instead
|
|
||||||
# dunst will attempt to calculate an appropriate dpi value for each monitor
|
|
||||||
# using the resolution and physical size. This might be useful in setups
|
|
||||||
# where there are multiple screens with very different dpi values.
|
|
||||||
per_monitor_dpi = false
|
|
||||||
|
|
||||||
[shortcuts]
|
|
||||||
|
|
||||||
# Shortcuts are specified as [modifier+][modifier+]...key
|
|
||||||
# Available modifiers are "ctrl", "mod1" (the alt-key), "mod2",
|
|
||||||
# "mod3" and "mod4" (windows-key).
|
|
||||||
# Xev might be helpful to find names for keys.
|
|
||||||
|
|
||||||
# Close notification.
|
|
||||||
close = ctrl+period
|
|
||||||
|
|
||||||
# Close all notifications.
|
|
||||||
close_all = ctrl+shift+period
|
|
||||||
|
|
||||||
# Redisplay last message(s).
|
|
||||||
# On the US keyboard layout "grave" is normally above TAB and left
|
|
||||||
# of "1". Make sure this key actually exists on your keyboard layout,
|
|
||||||
# e.g. check output of 'xmodmap -pke'
|
|
||||||
history = ctrl+shift+space
|
|
||||||
|
|
||||||
# Context menu.
|
|
||||||
context = ctrl+space
|
|
||||||
|
|
||||||
[urgency_low]
|
|
||||||
# IMPORTANT: colors have to be defined in quotation marks.
|
|
||||||
# Otherwise the "#" and following would be interpreted as a comment.
|
|
||||||
background = "#222222"
|
|
||||||
foreground = "#888888"
|
|
||||||
timeout = 10
|
|
||||||
# Icon for notifications with low urgency, uncomment to enable
|
|
||||||
#icon = /path/to/icon
|
|
||||||
|
|
||||||
[urgency_normal]
|
|
||||||
background = "#285577"
|
|
||||||
foreground = "#ffffff"
|
|
||||||
timeout = 10
|
|
||||||
# Icon for notifications with normal urgency, uncomment to enable
|
|
||||||
#icon = /path/to/icon
|
|
||||||
|
|
||||||
[urgency_critical]
|
|
||||||
background = "#900000"
|
|
||||||
foreground = "#ffffff"
|
|
||||||
frame_color = "#ff0000"
|
|
||||||
timeout = 0
|
|
||||||
# Icon for notifications with critical urgency, uncomment to enable
|
|
||||||
#icon = /path/to/icon
|
|
||||||
|
|
||||||
# Every section that isn't one of the above is interpreted as a rules to
|
|
||||||
# override settings for certain messages.
|
|
||||||
#
|
|
||||||
# Messages can be matched by
|
|
||||||
# appname (discouraged, see desktop_entry)
|
|
||||||
# body
|
|
||||||
# category
|
|
||||||
# desktop_entry
|
|
||||||
# icon
|
|
||||||
# match_transient
|
|
||||||
# msg_urgency
|
|
||||||
# stack_tag
|
|
||||||
# summary
|
|
||||||
#
|
|
||||||
# and you can override the
|
|
||||||
# background
|
|
||||||
# foreground
|
|
||||||
# format
|
|
||||||
# frame_color
|
|
||||||
# fullscreen
|
|
||||||
# new_icon
|
|
||||||
# set_stack_tag
|
|
||||||
# set_transient
|
|
||||||
# timeout
|
|
||||||
# urgency
|
|
||||||
#
|
|
||||||
# Shell-like globbing will get expanded.
|
|
||||||
#
|
|
||||||
# Instead of the appname filter, it's recommended to use the desktop_entry filter.
|
|
||||||
# GLib based applications export their desktop-entry name. In comparison to the appname,
|
|
||||||
# the desktop-entry won't get localized.
|
|
||||||
#
|
|
||||||
# SCRIPTING
|
|
||||||
# You can specify a script that gets run when the rule matches by
|
|
||||||
# setting the "script" option.
|
|
||||||
# The script will be called as follows:
|
|
||||||
# script appname summary body icon urgency
|
|
||||||
# where urgency can be "LOW", "NORMAL" or "CRITICAL".
|
|
||||||
#
|
|
||||||
# NOTE: if you don't want a notification to be displayed, set the format
|
|
||||||
# to "".
|
|
||||||
# NOTE: It might be helpful to run dunst -print in a terminal in order
|
|
||||||
# to find fitting options for rules.
|
|
||||||
|
|
||||||
# Disable the transient hint so that idle_threshold cannot be bypassed from the
|
|
||||||
# client
|
|
||||||
#[transient_disable]
|
|
||||||
# match_transient = yes
|
|
||||||
# set_transient = no
|
|
||||||
#
|
|
||||||
# Make the handling of transient notifications more strict by making them not
|
|
||||||
# be placed in history.
|
|
||||||
#[transient_history_ignore]
|
|
||||||
# match_transient = yes
|
|
||||||
# history_ignore = yes
|
|
||||||
|
|
||||||
# fullscreen values
|
|
||||||
# show: show the notifications, regardless if there is a fullscreen window opened
|
|
||||||
# delay: displays the new notification, if there is no fullscreen window active
|
|
||||||
# If the notification is already drawn, it won't get undrawn.
|
|
||||||
# pushback: same as delay, but when switching into fullscreen, the notification will get
|
|
||||||
# withdrawn from screen again and will get delayed like a new notification
|
|
||||||
#[fullscreen_delay_everything]
|
|
||||||
# fullscreen = delay
|
|
||||||
#[fullscreen_show_critical]
|
|
||||||
# msg_urgency = critical
|
|
||||||
# fullscreen = show
|
|
||||||
|
|
||||||
#[espeak]
|
|
||||||
# summary = "*"
|
|
||||||
# script = dunst_espeak.sh
|
|
||||||
|
|
||||||
#[script-test]
|
|
||||||
# summary = "*script*"
|
|
||||||
# script = dunst_test.sh
|
|
||||||
|
|
||||||
#[ignore]
|
|
||||||
# # This notification will not be displayed
|
|
||||||
# summary = "foobar"
|
|
||||||
# format = ""
|
|
||||||
|
|
||||||
#[history-ignore]
|
|
||||||
# # This notification will not be saved in history
|
|
||||||
# summary = "foobar"
|
|
||||||
# history_ignore = yes
|
|
||||||
|
|
||||||
#[skip-display]
|
|
||||||
# # This notification will not be displayed, but will be included in the history
|
|
||||||
# summary = "foobar"
|
|
||||||
# skip_display = yes
|
|
||||||
|
|
||||||
#[signed_on]
|
|
||||||
# appname = Pidgin
|
|
||||||
# summary = "*signed on*"
|
|
||||||
# urgency = low
|
|
||||||
#
|
|
||||||
#[signed_off]
|
|
||||||
# appname = Pidgin
|
|
||||||
# summary = *signed off*
|
|
||||||
# urgency = low
|
|
||||||
#
|
|
||||||
#[says]
|
|
||||||
# appname = Pidgin
|
|
||||||
# summary = *says*
|
|
||||||
# urgency = critical
|
|
||||||
#
|
|
||||||
#[twitter]
|
|
||||||
# appname = Pidgin
|
|
||||||
# summary = *twitter.com*
|
|
||||||
# urgency = normal
|
|
||||||
#
|
|
||||||
#[stack-volumes]
|
|
||||||
# appname = "some_volume_notifiers"
|
|
||||||
# set_stack_tag = "volume"
|
|
||||||
#
|
|
||||||
# vim: ft=cfg
|
|
@ -1 +0,0 @@
|
|||||||
scrot_dir=/home/julian/Pictures/screenshots
|
|
@ -1,326 +0,0 @@
|
|||||||
# This file has been auto-generated by i3-config-wizard(1).
|
|
||||||
# It will not be overwritten, so edit it as you like.
|
|
||||||
#
|
|
||||||
# Should you change your keyboard layout some time, delete
|
|
||||||
# this file and re-run i3-config-wizard(1).
|
|
||||||
#
|
|
||||||
|
|
||||||
# i3 config file (v4)
|
|
||||||
#
|
|
||||||
# Please see https://i3wm.org/docs/userguide.html for a complete reference!
|
|
||||||
|
|
||||||
set $mod Mod4
|
|
||||||
|
|
||||||
# Font for window titles. Will also be used by the bar unless a different font
|
|
||||||
# is used in the bar {} block below.
|
|
||||||
font pango:monospace 12
|
|
||||||
|
|
||||||
# This font is widely installed, provides lots of unicode glyphs, right-to-left
|
|
||||||
# text rendering and scalability on retina/hidpi displays (thanks to pango).
|
|
||||||
#font pango:DejaVu Sans Mono 12
|
|
||||||
|
|
||||||
# The combination of xss-lock, nm-applet and pactl is a popular choice, so
|
|
||||||
# they are included here as an example. Modify as you see fit.
|
|
||||||
|
|
||||||
# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the
|
|
||||||
# screen before suspend. Use loginctl lock-session to lock your screen.
|
|
||||||
exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork
|
|
||||||
|
|
||||||
# NetworkManager is the most popular way to manage wireless networks on Linux,
|
|
||||||
# and nm-applet is a desktop environment-independent system tray GUI for it.
|
|
||||||
# exec --no-startup-id nm-applet
|
|
||||||
|
|
||||||
# Use pactl to adjust volume in PulseAudio.
|
|
||||||
set $refresh_i3status killall -SIGUSR1 i3status
|
|
||||||
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
|
|
||||||
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status
|
|
||||||
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
|
|
||||||
bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status
|
|
||||||
|
|
||||||
# Use Mouse+$mod to drag floating windows to their wanted position
|
|
||||||
floating_modifier $mod
|
|
||||||
|
|
||||||
# start a terminal
|
|
||||||
bindsym $mod+Return exec xfce4-terminal
|
|
||||||
|
|
||||||
# kill focused window
|
|
||||||
bindsym $mod+Shift+q kill
|
|
||||||
bindsym $mod+q kill
|
|
||||||
bindsym $mod+Shift+x kill
|
|
||||||
bindsym $mod+x kill
|
|
||||||
# for x button in laptop (produces alt+f4)
|
|
||||||
bindsym Mod1+F4 kill
|
|
||||||
|
|
||||||
# start dmenu (a program launcher)
|
|
||||||
bindsym $mod+d exec rofi -show run #dmenu_recency -i
|
|
||||||
# There also is the (new) i3-dmenu-desktop which only displays applications
|
|
||||||
# shipping a .desktop file. It is a wrapper around dmenu, so you need that
|
|
||||||
# installed.
|
|
||||||
# bindsym $mod+d exec --no-startup-id i3-dmenu-desktop
|
|
||||||
|
|
||||||
# change focus
|
|
||||||
bindsym $mod+h focus left
|
|
||||||
bindsym $mod+j focus down
|
|
||||||
bindsym $mod+k focus up
|
|
||||||
bindsym $mod+l focus right
|
|
||||||
|
|
||||||
# alternatively, you can use the cursor keys:
|
|
||||||
bindsym $mod+Left focus left
|
|
||||||
bindsym $mod+Down focus down
|
|
||||||
bindsym $mod+Up focus up
|
|
||||||
bindsym $mod+Right focus right
|
|
||||||
|
|
||||||
# move focused window
|
|
||||||
bindsym $mod+Shift+h move left
|
|
||||||
bindsym $mod+Shift+j move down
|
|
||||||
bindsym $mod+Shift+k move up
|
|
||||||
bindsym $mod+Shift+l move right
|
|
||||||
|
|
||||||
# alternatively, you can use the cursor keys:
|
|
||||||
bindsym $mod+Shift+Left move left
|
|
||||||
bindsym $mod+Shift+Down move down
|
|
||||||
bindsym $mod+Shift+Up move up
|
|
||||||
bindsym $mod+Shift+Right move right
|
|
||||||
|
|
||||||
# split in horizontal orientation
|
|
||||||
bindsym $mod+Shift+v split h
|
|
||||||
|
|
||||||
# split in vertical orientation
|
|
||||||
bindsym $mod+v split v
|
|
||||||
|
|
||||||
# enter fullscreen mode for the focused container
|
|
||||||
bindsym $mod+f fullscreen toggle
|
|
||||||
|
|
||||||
# change container layout (stacked, tabbed, toggle split)
|
|
||||||
bindsym $mod+Shift+w layout stacking
|
|
||||||
bindsym $mod+w layout tabbed
|
|
||||||
bindsym $mod+e layout toggle split
|
|
||||||
|
|
||||||
# toggle tiling / floating
|
|
||||||
bindsym $mod+Shift+space floating toggle
|
|
||||||
|
|
||||||
# change focus between tiling / floating windows
|
|
||||||
bindsym $mod+space focus mode_toggle
|
|
||||||
|
|
||||||
# focus the parent container
|
|
||||||
bindsym $mod+a focus parent
|
|
||||||
|
|
||||||
# focus the child container
|
|
||||||
#bindsym $mod+d focus child
|
|
||||||
|
|
||||||
# Define names for default workspaces for which we configure key bindings later on.
|
|
||||||
# We use variables to avoid repeating the names in multiple places.
|
|
||||||
set $ws1 "1"
|
|
||||||
set $ws2 "2"
|
|
||||||
set $ws3 "3"
|
|
||||||
set $ws4 "4"
|
|
||||||
set $ws5 "5"
|
|
||||||
set $ws6 "6"
|
|
||||||
set $ws7 "7"
|
|
||||||
set $ws8 "8"
|
|
||||||
set $ws9 "9"
|
|
||||||
set $ws10 "10"
|
|
||||||
|
|
||||||
# switch to workspace
|
|
||||||
bindsym $mod+1 workspace number $ws1
|
|
||||||
bindsym $mod+2 workspace number $ws2
|
|
||||||
bindsym $mod+3 workspace number $ws3
|
|
||||||
bindsym $mod+4 workspace number $ws4
|
|
||||||
bindsym $mod+5 workspace number $ws5
|
|
||||||
bindsym $mod+6 workspace number $ws6
|
|
||||||
bindsym $mod+7 workspace number $ws7
|
|
||||||
bindsym $mod+8 workspace number $ws8
|
|
||||||
bindsym $mod+9 workspace number $ws9
|
|
||||||
bindsym $mod+0 workspace number $ws10
|
|
||||||
|
|
||||||
# move focused container to workspace
|
|
||||||
bindsym $mod+Ctrl+1 move container to workspace number $ws1
|
|
||||||
bindsym $mod+Ctrl+2 move container to workspace number $ws2
|
|
||||||
bindsym $mod+Ctrl+3 move container to workspace number $ws3
|
|
||||||
bindsym $mod+Ctrl+4 move container to workspace number $ws4
|
|
||||||
bindsym $mod+Ctrl+5 move container to workspace number $ws5
|
|
||||||
bindsym $mod+Ctrl+6 move container to workspace number $ws6
|
|
||||||
bindsym $mod+Ctrl+7 move container to workspace number $ws7
|
|
||||||
bindsym $mod+Ctrl+8 move container to workspace number $ws8
|
|
||||||
bindsym $mod+Ctrl+9 move container to workspace number $ws9
|
|
||||||
bindsym $mod+Ctrl+0 move container to workspace number $ws10
|
|
||||||
|
|
||||||
# move focused container to workspace and follow
|
|
||||||
bindsym $mod+Shift+1 move container to workspace number $ws1; workspace $ws1
|
|
||||||
bindsym $mod+Shift+2 move container to workspace number $ws2; workspace $ws2
|
|
||||||
bindsym $mod+Shift+3 move container to workspace number $ws3; workspace $ws3
|
|
||||||
bindsym $mod+Shift+4 move container to workspace number $ws4; workspace $ws4
|
|
||||||
bindsym $mod+Shift+5 move container to workspace number $ws5; workspace $ws5
|
|
||||||
bindsym $mod+Shift+6 move container to workspace number $ws6; workspace $ws6
|
|
||||||
bindsym $mod+Shift+7 move container to workspace number $ws7; workspace $ws7
|
|
||||||
bindsym $mod+Shift+8 move container to workspace number $ws8; workspace $ws8
|
|
||||||
bindsym $mod+Shift+9 move container to workspace number $ws9; workspace $ws9
|
|
||||||
bindsym $mod+Shift+0 move container to workspace number $ws10; workspace $ws10
|
|
||||||
|
|
||||||
# Monitor config
|
|
||||||
set $monitor_left DVI-D-0
|
|
||||||
set $monitor_right DVI-D-1
|
|
||||||
|
|
||||||
workspace $ws1 output $monitor_left
|
|
||||||
workspace $ws2 output $monitor_left
|
|
||||||
workspace $ws3 output $monitor_left
|
|
||||||
workspace $ws4 output $monitor_left
|
|
||||||
workspace $ws5 output $monitor_left
|
|
||||||
workspace $ws6 output $monitor_right
|
|
||||||
workspace $ws7 output $monitor_right
|
|
||||||
workspace $ws8 output $monitor_right
|
|
||||||
workspace $ws9 output $monitor_right
|
|
||||||
workspace $ws10 output $monitor_right
|
|
||||||
|
|
||||||
# reload the configuration file
|
|
||||||
#bindsym $mod+Shift+c reload
|
|
||||||
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
|
|
||||||
bindsym $mod+Shift+r restart
|
|
||||||
# exit i3 (logs you out of your X session)
|
|
||||||
#bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'"
|
|
||||||
|
|
||||||
# resize window (you can also use the mouse for that)
|
|
||||||
mode "resize" {
|
|
||||||
# These bindings trigger as soon as you enter the resize mode
|
|
||||||
|
|
||||||
# Pressing left will shrink the window’s width.
|
|
||||||
# Pressing right will grow the window’s width.
|
|
||||||
# Pressing up will shrink the window’s height.
|
|
||||||
# Pressing down will grow the window’s height.
|
|
||||||
bindsym h resize shrink width 10 px or 10 ppt
|
|
||||||
bindsym j resize grow height 10 px or 10 ppt
|
|
||||||
bindsym k resize shrink height 10 px or 10 ppt
|
|
||||||
bindsym l resize grow width 10 px or 10 ppt
|
|
||||||
|
|
||||||
# same bindings, but for the arrow keys
|
|
||||||
bindsym Left resize shrink width 10 px or 10 ppt
|
|
||||||
bindsym Down resize grow height 10 px or 10 ppt
|
|
||||||
bindsym Up resize shrink height 10 px or 10 ppt
|
|
||||||
bindsym Right resize grow width 10 px or 10 ppt
|
|
||||||
|
|
||||||
# back to normal: Enter or Escape or $mod+r
|
|
||||||
bindsym Return mode "default"
|
|
||||||
bindsym Escape mode "default"
|
|
||||||
bindsym $mod+r mode "default"
|
|
||||||
}
|
|
||||||
|
|
||||||
bindsym $mod+r mode "resize"
|
|
||||||
|
|
||||||
# Start i3bar to display a workspace bar (plus the system information i3status
|
|
||||||
# finds out, if available)
|
|
||||||
bar {
|
|
||||||
status_command i3blocks
|
|
||||||
tray_output $monitor_left
|
|
||||||
position top
|
|
||||||
i3bar_command i3bar --transparency
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
set $mode_system System (l) lock, (e) logout, (r) reboot, (s) shutdown
|
|
||||||
mode "$mode_system" {
|
|
||||||
bindsym l exec --no-startup-id i3lock, mode "default"
|
|
||||||
bindsym e exec --no-startup-id i3exit logout, mode "default"
|
|
||||||
bindsym r exec --no-startup-id i3exit reboot, mode "default"
|
|
||||||
bindsym s exec --no-startup-id i3exit shutdown, mode "default"
|
|
||||||
|
|
||||||
# back to normal: Enter or Escape
|
|
||||||
bindsym Return mode "default"
|
|
||||||
bindsym Escape mode "default"
|
|
||||||
}
|
|
||||||
bindsym $mod+Shift+e mode "$mode_system"
|
|
||||||
|
|
||||||
set $mode_screenshot_file Screenshot to file (w) Active window, (s) Selection, (d) Desktop
|
|
||||||
mode "$mode_screenshot_file" {
|
|
||||||
bindsym w exec --no-startup-id "i3-scrot -w", mode "default"
|
|
||||||
bindsym --release s exec --no-startup-id "i3-scrot -s", mode "default"
|
|
||||||
bindsym d exec --no-startup-id "i3-scrot -d", mode "default"
|
|
||||||
bindsym --release Return exec --no-startup-id "i3-scrot -s", mode "default"
|
|
||||||
|
|
||||||
#back to normal: Escape
|
|
||||||
bindsym Escape mode "default"
|
|
||||||
}
|
|
||||||
bindsym $mod+Shift+Print mode "$mode_screenshot_file"
|
|
||||||
|
|
||||||
set $mode_screenshot_clipboard Screenshot to clipboard (w) Active window, (s) Selection, (d) Desktop
|
|
||||||
mode "$mode_screenshot_clipboard" {
|
|
||||||
bindsym w exec --no-startup-id "i3-scrot -wc", mode "default"
|
|
||||||
bindsym --release s exec --no-startup-id "i3-scrot -sc", mode "default"
|
|
||||||
bindsym d exec --no-startup-id "i3-scrot -dc", mode "default"
|
|
||||||
bindsym --release Return exec --no-startup-id "i3-scrot -sc", mode "default"
|
|
||||||
|
|
||||||
# back to normal: Escape
|
|
||||||
bindsym Escape mode "default"
|
|
||||||
}
|
|
||||||
bindsym $mod+Print mode "$mode_screenshot_clipboard"
|
|
||||||
|
|
||||||
bindsym $mod+Ctrl+Right move workspace to output right
|
|
||||||
bindsym $mod+Ctrl+Left move workspace to output right
|
|
||||||
|
|
||||||
bindsym $mod+c exec xfce4-terminal --role floating --hide-scrollbar --title Calculator -e qalc
|
|
||||||
bindsym $mod+p exec xwacomcalibrate
|
|
||||||
bindsym $mod+t exec thunar
|
|
||||||
bindsym $mod+m exec xfce4-terminal -x mc
|
|
||||||
bindsym $mod+Shift+c exec jupyter-calculator
|
|
||||||
bindsym $mod+b exec firefox
|
|
||||||
bindsym $mod+s exec pavucontrol
|
|
||||||
|
|
||||||
workspace_auto_back_and_forth yes
|
|
||||||
|
|
||||||
########## Window settings ##########
|
|
||||||
default_border normal
|
|
||||||
default_floating_border normal
|
|
||||||
|
|
||||||
assign [class="firefox" title="Mozilla Firefox$"] workspace $ws1
|
|
||||||
assign [class="TelegramDesktop"] workspace $ws9
|
|
||||||
assign [class="Signal"] workspace $ws9
|
|
||||||
assign [class="Rocket.Chat"] workspace $ws9
|
|
||||||
assign [class="Element"] workspace $ws9
|
|
||||||
assign [class="Thunderbird"] workspace $ws10
|
|
||||||
assign [class="zoom"] workspace $ws5
|
|
||||||
|
|
||||||
for_window [class="firefox"] focus
|
|
||||||
#for_window [class="Thunderbird"] focus
|
|
||||||
for_window [class="TelegramDesktop"] no_focus
|
|
||||||
for_window [class="Rocket.Chat"] no_focus
|
|
||||||
for_window [class="Element"] no_focus
|
|
||||||
|
|
||||||
#for_window [class="Thunderbird"] focus
|
|
||||||
|
|
||||||
for_window [title="Manjaro Settings Manager"] floating enable
|
|
||||||
for_window [class="Pamac-manager"] floating enable
|
|
||||||
for_window [class="Pamac-updater"] floating enable
|
|
||||||
#for_window [class="zoom" title="Chat"] floating enable
|
|
||||||
#for_window [class="Thunderbird" instance="Msgcompose"] floating enable
|
|
||||||
#
|
|
||||||
for_window [window_role=floating] floating enable
|
|
||||||
|
|
||||||
########## Autostart applications ##########
|
|
||||||
exec --no-startup-id "i3-msg 'workspace 9; append_layout ~/.config/i3/workspace-chat.json'"
|
|
||||||
|
|
||||||
exec firefox
|
|
||||||
exec thunderbird
|
|
||||||
exec chat.rocket.RocketChat no_focus
|
|
||||||
exec element-desktop no_focus
|
|
||||||
exec telegram-desktop no_focus
|
|
||||||
|
|
||||||
exec --no-startup-id nm-applet
|
|
||||||
exec --no-startup-id xfce4-power-manager
|
|
||||||
exec --no-startup-id nextcloud
|
|
||||||
# Authentication agent
|
|
||||||
exec --no-startup-id /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
|
|
||||||
# Notify about software updates
|
|
||||||
exec --no-startup-id pamac-tray
|
|
||||||
# Notify about kernel updates
|
|
||||||
exec --no-startup-id msm_notifier
|
|
||||||
# Audio
|
|
||||||
exec --no-startup-id start-pulseaudio-x11
|
|
||||||
# Background
|
|
||||||
#exec --no-startup-id feh --randomize --bg-fill /home/julian/Pictures/Hintergrundbilder/*
|
|
||||||
exec --no-startup-id feh --bg-fill /home/julian/Pictures/Hintergrundbilder/space.jpg
|
|
||||||
# Notifications
|
|
||||||
exec --no-startup-id dunst -config /home/julian/.config/dunst/dunstrc
|
|
||||||
|
|
||||||
# Default workspaces at startup (no need because autostart applications get always focused)
|
|
||||||
#exec --no-startup-id i3-msg workspace $ws1
|
|
||||||
exec --no-startup-id i3-msg workspace $ws10
|
|
||||||
|
|
@ -1,104 +0,0 @@
|
|||||||
// vim:ts=4:sw=4:et
|
|
||||||
{
|
|
||||||
"border": "none",
|
|
||||||
"current_border_width": 2,
|
|
||||||
"floating": "auto_off",
|
|
||||||
"geometry": {
|
|
||||||
"height": 1026,
|
|
||||||
"width": 560,
|
|
||||||
"x": 1680,
|
|
||||||
"y": 24
|
|
||||||
},
|
|
||||||
"marks": [],
|
|
||||||
"name": "Telegram",
|
|
||||||
"percent": 0.5,
|
|
||||||
"swallows": [
|
|
||||||
{
|
|
||||||
"class": "^TelegramDesktop$",
|
|
||||||
"instance": "^telegram\\-desktop$"
|
|
||||||
// "title": "^Telegram\\ \\(18\\)$"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"type": "con"
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
// splitv split container with 2 children
|
|
||||||
"border": "normal",
|
|
||||||
"floating": "auto_off",
|
|
||||||
"layout": "splitv",
|
|
||||||
"marks": [],
|
|
||||||
"percent": 0.5,
|
|
||||||
"type": "con",
|
|
||||||
"nodes": [
|
|
||||||
{
|
|
||||||
// splith split container with 1 children
|
|
||||||
"border": "normal",
|
|
||||||
"floating": "auto_off",
|
|
||||||
"layout": "splith",
|
|
||||||
"marks": [],
|
|
||||||
"percent": 0.5,
|
|
||||||
"type": "con",
|
|
||||||
"nodes": [
|
|
||||||
{
|
|
||||||
// splith split container with 1 children
|
|
||||||
"border": "normal",
|
|
||||||
"floating": "auto_off",
|
|
||||||
"layout": "splith",
|
|
||||||
"marks": [],
|
|
||||||
"percent": 1,
|
|
||||||
"type": "con",
|
|
||||||
"nodes": [
|
|
||||||
{
|
|
||||||
"border": "normal",
|
|
||||||
"current_border_width": 2,
|
|
||||||
"floating": "auto_off",
|
|
||||||
"geometry": {
|
|
||||||
"height": 1002,
|
|
||||||
"width": 800,
|
|
||||||
"x": 2242,
|
|
||||||
"y": 46
|
|
||||||
},
|
|
||||||
"marks": [],
|
|
||||||
"name": "Element",
|
|
||||||
"percent": 1,
|
|
||||||
"swallows": [
|
|
||||||
{
|
|
||||||
"class": "^Element$",
|
|
||||||
"instance": "^element$"
|
|
||||||
// "title": "^Element\\ \\|\\ Skipper$",
|
|
||||||
// "window_role": "^browser\\-window$"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"type": "con"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"border": "normal",
|
|
||||||
"current_border_width": 2,
|
|
||||||
"floating": "auto_off",
|
|
||||||
"geometry": {
|
|
||||||
"height": 715,
|
|
||||||
"width": 1366,
|
|
||||||
"x": 183,
|
|
||||||
"y": 396
|
|
||||||
},
|
|
||||||
"marks": [],
|
|
||||||
"name": "Rocket Chat",
|
|
||||||
"percent": 0.5,
|
|
||||||
"swallows": [
|
|
||||||
{
|
|
||||||
"class": "^Rocket\\.Chat$",
|
|
||||||
"instance": "^rocket\\.chat$"
|
|
||||||
// "title": "^Chat\\ der\\ Uni\\ Würzburg$",
|
|
||||||
// "window_role": "^browser\\-window$"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"type": "con"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
@ -1,30 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
NONE="None"
|
|
||||||
|
|
||||||
get_current_activity() {
|
|
||||||
activity=$(hamster current)
|
|
||||||
if [ "$activity" = "No activity" ]; then
|
|
||||||
echo $NONE
|
|
||||||
else
|
|
||||||
IFS=' '
|
|
||||||
read -ra ADDR <<< "$activity"
|
|
||||||
echo "${ADDR[2]}"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
case "$BLOCK_BUTTON" in
|
|
||||||
1|2|3)
|
|
||||||
current_activity=$(get_current_activity)
|
|
||||||
if [ "$current_activity" = "$NONE" ]; then
|
|
||||||
hamster start "Comu@Work#Flexibill App"
|
|
||||||
else
|
|
||||||
hamster stop
|
|
||||||
fi
|
|
||||||
esac
|
|
||||||
|
|
||||||
current_activity=$(get_current_activity)
|
|
||||||
|
|
||||||
echo "$LABEL $current_activity"
|
|
||||||
echo "$LABEL $current_activity"
|
|
@ -1,793 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
#
|
|
||||||
# battery-plus
|
|
||||||
#
|
|
||||||
# An enhanced battery status indicator for i3blocks.
|
|
||||||
#
|
|
||||||
# Requires:
|
|
||||||
# awk (POSIX compatible)
|
|
||||||
# bc
|
|
||||||
# upower
|
|
||||||
#
|
|
||||||
# Recommended:
|
|
||||||
# fonts-font-awesome or fonts-hack
|
|
||||||
#
|
|
||||||
# Optional:
|
|
||||||
# notify-send or dunstify -- for notifications
|
|
||||||
# zenity -- for dialogs
|
|
||||||
#
|
|
||||||
# Copyright (c) 2018 Beau Hastings. All rights reserved.
|
|
||||||
# License: GNU General Public License v2
|
|
||||||
#
|
|
||||||
# Author: Beau Hastings <beau@saweet.net>
|
|
||||||
# URL: https://github.com/hastinbe/i3blocks-battery-plus
|
|
||||||
|
|
||||||
_PERCENT="%"
|
|
||||||
|
|
||||||
# Hide the battery status if fully-charged,
|
|
||||||
_HIDE_IF_CHARGED=${_HIDE_IF_CHARGED:-false}
|
|
||||||
|
|
||||||
# Color the battery symbol using gradient.
|
|
||||||
_USE_BATT_GRADIENT=${_USE_BATT_GRADIENT:-false}
|
|
||||||
|
|
||||||
# Only show symbols.
|
|
||||||
_SYMBOLS_ONLY=${_SYMBOLS_ONLY:-false}
|
|
||||||
|
|
||||||
# Hide the battery percentage
|
|
||||||
_HIDE_PERCENTAGE=${_HIDE_PERCENTAGE:-false}
|
|
||||||
|
|
||||||
# Hide the battery time remaining
|
|
||||||
_HIDE_TIME_REMAINING=${_HIDE_TIME_REMAINING:-true}
|
|
||||||
|
|
||||||
# Hide the time to charge the battery to full
|
|
||||||
_HIDE_TIME_TO_FULL=${_HIDE_TIME_TO_FULL:-true}
|
|
||||||
|
|
||||||
# Show the direction of change for the battery's percentage
|
|
||||||
_SHOW_CHARGE_DIRECTION=${_SHOW_CHARGE_DIRECTION:-true}
|
|
||||||
|
|
||||||
# Show an alert symbol when the battery capacity drops to the given percent (0=disable).
|
|
||||||
_CAPACITY_ALERT=${_CAPACITY_ALERT:-75}
|
|
||||||
|
|
||||||
# Action to take when the battery level reaches critical.
|
|
||||||
_CRITICAL_ACTION=${_CRITICAL_ACTION:-"notify"}
|
|
||||||
|
|
||||||
# Action to take when the battery level reaches low.
|
|
||||||
_LOW_ACTION=${_LOW_ACTION:-"notify"}
|
|
||||||
|
|
||||||
# Method to use for notifications
|
|
||||||
_NOTIFY_PROGRAM=${_NOTIFY_PROGRAM:-"notify-send"}
|
|
||||||
|
|
||||||
# The duration, in milliseconds, for the notification to appear on screen.
|
|
||||||
_NOTIFY_EXPIRES="1500"
|
|
||||||
|
|
||||||
# Minimum time in seconds between notifications to prevent spam.
|
|
||||||
_NOTIFY_THROTTLE=${_NOTIFY_THROTTLE:-120}
|
|
||||||
|
|
||||||
# Colors
|
|
||||||
_COLOR_FULLY_CHARGED=${_COLOR_FULLY_CHARGED:-""}
|
|
||||||
_COLOR_CHARGING=${_COLOR_CHARGING:-"yellow"}
|
|
||||||
_COLOR_DISCHARGING=${_COLOR_CHARGING:-"yellow"}
|
|
||||||
_COLOR_PENDING=${_COLOR_PENDING:-"blue"}
|
|
||||||
_COLOR_ERROR=${_COLOR_ERROR:-"red"}
|
|
||||||
_COLOR_BATTERY=${_COLOR_BATTERY:-"white"}
|
|
||||||
_COLOR_ALERT=${_COLOR_ALERT:-"orange"}
|
|
||||||
_COLOR_DIRECTIONAL_UP=${_COLOR_DIRECTIONAL_UP:-"green"}
|
|
||||||
_COLOR_DIRECTIONAL_DOWN=${_COLOR_DIRECTIONAL_DOWN:-"red"}
|
|
||||||
_COLOR_GRADIENT_START=${_COLOR_GRADIENT_START:-"#FF0000"}
|
|
||||||
_COLOR_GRADIENT_END=${_COLOR_GRADIENT_END:-"#00FF00"}
|
|
||||||
|
|
||||||
# Symbols
|
|
||||||
_SYMBOL_FULLY_CHARGED=${_SYMBOL_FULLY_CHARGED:-""}
|
|
||||||
_SYMBOL_CHARGING=${_SYMBOL_CHARGING:-""}
|
|
||||||
_SYMBOL_DISCHARGING=${_SYMBOL_DISCHARGING:-""}
|
|
||||||
_SYMBOL_UNKNOWN=${_SYMBOL_UNKNOWN:-""}
|
|
||||||
_SYMBOL_PENDING=${_SYMBOL_PENDING:-""}
|
|
||||||
_SYMBOL_ERROR=${_SYMBOL_ERROR:-""}
|
|
||||||
_SYMBOL_ALERT=${_SYMBOL_ALERT:-""}
|
|
||||||
_SYMBOL_BATT_100=${_SYMBOL_BATT_100:-""}
|
|
||||||
_SYMBOL_BATT_75=${_SYMBOL_BATT_75:-""}
|
|
||||||
_SYMBOL_BATT_50=${_SYMBOL_BATT_50:-""}
|
|
||||||
_SYMBOL_BATT_25=${_SYMBOL_BATT_25:-""}
|
|
||||||
_SYMBOL_BATT_0=${_SYMBOL_BATT_0:-""}
|
|
||||||
_SYMBOL_DIRECTION_UP=${_SYMBOL_DIRECTION_UP:-"↑"}
|
|
||||||
_SYMBOL_DIRECTION_DOWN=${_SYMBOL_DIRECTION_DOWN:-"↓"}
|
|
||||||
|
|
||||||
# Get a the system's temporary files directory.
|
|
||||||
#
|
|
||||||
# Notes:
|
|
||||||
# Executes a dry-run so we don't create a file.
|
|
||||||
# Linux doesn't require the template option, but MacOSX does.
|
|
||||||
#
|
|
||||||
# Returns:
|
|
||||||
# The path to the temporary directory.
|
|
||||||
get_temp_dir() {
|
|
||||||
echo $(dirname $(mktemp -ut "battery-plus.XXX"))
|
|
||||||
}
|
|
||||||
|
|
||||||
# Output text wrapped in a span element
|
|
||||||
#
|
|
||||||
# Options:
|
|
||||||
# -c <color> To specify a text color
|
|
||||||
#
|
|
||||||
# Arguments:
|
|
||||||
# $1 or $3 - String to encapsulate within a span
|
|
||||||
span() {
|
|
||||||
local -A attribs
|
|
||||||
local text="$*"
|
|
||||||
|
|
||||||
if [ -n "$FONT" ]; then attribs[font]="$FONT"; fi
|
|
||||||
|
|
||||||
if [ "$1" = "-c" ]; then
|
|
||||||
attribs[color]="$2"
|
|
||||||
text="${*:3}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "<span$(build_attribs attribs)>$text</span>"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Builds html element attributes
|
|
||||||
#
|
|
||||||
# Arguments:
|
|
||||||
# $1 - An associative array of attribute-value pairs
|
|
||||||
build_attribs() {
|
|
||||||
local -n array=$1
|
|
||||||
for k in "${!array[@]}"; do
|
|
||||||
echo -n " $k='${array[$k]}'"
|
|
||||||
done
|
|
||||||
echo
|
|
||||||
}
|
|
||||||
|
|
||||||
# Interpolate between 2 RGB colors
|
|
||||||
#
|
|
||||||
# Arguments:
|
|
||||||
# $1 - Color to interpolate from, as a hex triplet prefixed with #
|
|
||||||
# $2 - Color to interpolate to, as a hex triplet prefixed with #
|
|
||||||
# $3 - Amount of steps needed to get from start to end color
|
|
||||||
interpolate_rgb() {
|
|
||||||
local -i steps=$3
|
|
||||||
local -a colors
|
|
||||||
local color1=$1
|
|
||||||
local color2=$2
|
|
||||||
local reversed=false
|
|
||||||
|
|
||||||
if (( 0x${color1:1:5} > 0x${color2:1:5} )); then
|
|
||||||
color1=$2
|
|
||||||
color2=$1
|
|
||||||
reversed=true
|
|
||||||
fi
|
|
||||||
|
|
||||||
printf -v startR "%d" 0x${color1:1:2}
|
|
||||||
printf -v startG "%d" 0x${color1:3:2}
|
|
||||||
printf -v startB "%d" 0x${color1:5:2}
|
|
||||||
printf -v endR "%d" 0x${color2:1:2}
|
|
||||||
printf -v endG "%d" 0x${color2:3:2}
|
|
||||||
printf -v endB "%d" 0x${color2:5:2}
|
|
||||||
|
|
||||||
stepR=$(( ($endR - $startR) / $steps ))
|
|
||||||
stepG=$(( ($endG - $startG) / $steps ))
|
|
||||||
stepB=$(( ($endB - $startB) / $steps ))
|
|
||||||
|
|
||||||
for i in $(seq 0 $steps); do
|
|
||||||
local -i R=$(( $startR + ($stepR * $i) ))
|
|
||||||
local -i G=$(( $startG + ($stepG * $i) ))
|
|
||||||
local -i B=$(( $startB + ($stepB * $i) ))
|
|
||||||
|
|
||||||
colors+=( "$(printf "#%02x%02x%02x\n" $R $G $B)" )
|
|
||||||
done
|
|
||||||
colors+=( "$(printf "#%02x%02x%02x\n" $endR $endG $endB)" )
|
|
||||||
|
|
||||||
if $reversed; then
|
|
||||||
reverse colors colors_reversed
|
|
||||||
echo "${colors_reversed[@]}"
|
|
||||||
else
|
|
||||||
echo "${colors[@]}"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Reverse an array
|
|
||||||
#
|
|
||||||
# Arguments:
|
|
||||||
# $1 - Array to reverse
|
|
||||||
# $2 - Destination array
|
|
||||||
reverse() {
|
|
||||||
local -n arr="$1" rev="$2"
|
|
||||||
for i in "${arr[@]}"
|
|
||||||
do
|
|
||||||
rev=("$i" "${rev[@]}")
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
min() {
|
|
||||||
echo "if ($1 < $2) $1 else $2" | bc
|
|
||||||
}
|
|
||||||
|
|
||||||
max() {
|
|
||||||
echo "if ($1 > $2) $1 else $2" | bc
|
|
||||||
}
|
|
||||||
|
|
||||||
clamp() {
|
|
||||||
echo $(min $(max $1 $2) $3)
|
|
||||||
}
|
|
||||||
|
|
||||||
# Retrieve an item from the provided lookup table based on the percentage of a number
|
|
||||||
#
|
|
||||||
# Arguments:
|
|
||||||
# $1 - A number
|
|
||||||
# $2 - Number to get a percentage of
|
|
||||||
# $3 - An array of potential values
|
|
||||||
plookup() {
|
|
||||||
if [ -z "$2" -o -z "$3" ]; then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
local table=( ${@:3} )
|
|
||||||
local number2=${2%.*}
|
|
||||||
local number1=$(min ${1%.*} $number2)
|
|
||||||
local percent_max=$(( $number1 * $number2 / 100 ))
|
|
||||||
local index=$(( $percent_max * ${#table[@]} / 100 ))
|
|
||||||
|
|
||||||
index=$(clamp $index 0 $(( ${#table[@]} - 1 )) )
|
|
||||||
|
|
||||||
echo ${table[$index]}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Get battery status.
|
|
||||||
#
|
|
||||||
# Returns:
|
|
||||||
# The battery's status or state.
|
|
||||||
get_battery_status() {
|
|
||||||
echo "$__UPOWER_INFO" | awk -W posix '$1 == "state:" {print $2}'
|
|
||||||
}
|
|
||||||
|
|
||||||
# Get battery warning level.
|
|
||||||
#
|
|
||||||
# Returns:
|
|
||||||
# The battery's warning level.
|
|
||||||
get_battery_warning_level() {
|
|
||||||
echo "$__UPOWER_INFO" | awk -W posix '$1 == "warning-level:" {print $2}'
|
|
||||||
}
|
|
||||||
|
|
||||||
# Get battery percentage.
|
|
||||||
#
|
|
||||||
# Returns:
|
|
||||||
# The battery's percentage, without the %.
|
|
||||||
get_battery_percent() {
|
|
||||||
echo "$__UPOWER_INFO" | awk -W posix '$1 == "percentage:" { gsub("%","",$2); print $2}'
|
|
||||||
}
|
|
||||||
|
|
||||||
# Get battery capacity.
|
|
||||||
#
|
|
||||||
# Returns:
|
|
||||||
# The battery's capcity, without the %.
|
|
||||||
get_battery_capacity() {
|
|
||||||
echo "$__UPOWER_INFO" | awk -W posix '$1 == "capacity:" { gsub("%","",$2); print $2}'
|
|
||||||
}
|
|
||||||
|
|
||||||
# Get battery time left.
|
|
||||||
#
|
|
||||||
# Returns:
|
|
||||||
# The battery's time left.
|
|
||||||
get_time_to_empty() {
|
|
||||||
echo "$__UPOWER_INFO" | awk -W posix -F':' '/time to empty:/{print $2}' | xargs
|
|
||||||
}
|
|
||||||
|
|
||||||
# Get the time remaining until the battery is fully charged.
|
|
||||||
#
|
|
||||||
# Returns:
|
|
||||||
# The time remaining until battery is fully charged.
|
|
||||||
get_time_to_full() {
|
|
||||||
echo "$__UPOWER_INFO" | awk -W posix -F':' '/time to full:/{print $2}' | xargs
|
|
||||||
}
|
|
||||||
|
|
||||||
# Get symbol for the given battery percentage.
|
|
||||||
#
|
|
||||||
# Arguments:
|
|
||||||
# $percent (int) Battery percentage.
|
|
||||||
#
|
|
||||||
# Returns:
|
|
||||||
# The battery symbol.
|
|
||||||
get_battery_charge_symbol() {
|
|
||||||
local percent="$1"
|
|
||||||
local symbol
|
|
||||||
|
|
||||||
if [ "$battery_percentage" -ge 90 ]; then symbol="$_SYMBOL_BATT_100"
|
|
||||||
elif [ "$battery_percentage" -ge 70 ]; then symbol="$_SYMBOL_BATT_75"
|
|
||||||
elif [ "$battery_percentage" -ge 40 ]; then symbol="$_SYMBOL_BATT_50"
|
|
||||||
elif [ "$battery_percentage" -ge 20 ]; then symbol="$_SYMBOL_BATT_25"
|
|
||||||
else symbol="$_SYMBOL_BATT_0"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "$symbol"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Get battery status symbol.
|
|
||||||
#
|
|
||||||
# Returns:
|
|
||||||
# An symbol name, following the Symbol Naming Specification
|
|
||||||
get_battery_status_symbol() {
|
|
||||||
echo "$__UPOWER_INFO" | awk -W posix '$1 == "symbol-name:" {print $2}'
|
|
||||||
}
|
|
||||||
|
|
||||||
# Get color for the given battery percentage.
|
|
||||||
#
|
|
||||||
# Arguments:
|
|
||||||
# $percent (int) Battery percentage.
|
|
||||||
#
|
|
||||||
# Returns:
|
|
||||||
# The color to use for the given battery percentage.
|
|
||||||
get_percentage_color() {
|
|
||||||
local colors=( $(interpolate_rgb "$_COLOR_GRADIENT_START" "$_COLOR_GRADIENT_END" 8) )
|
|
||||||
echo $(plookup $1 100 ${colors[@]})
|
|
||||||
}
|
|
||||||
|
|
||||||
# Determines whether or not we can send a notification.
|
|
||||||
#
|
|
||||||
# Returns:
|
|
||||||
# 0 on false, 1 on true.
|
|
||||||
can_notify() {
|
|
||||||
local -i now=$(date +"%s")
|
|
||||||
local -i last=$(get_last_notify_time)
|
|
||||||
|
|
||||||
if [ -z "$last" ]; then return 0; fi
|
|
||||||
|
|
||||||
local -i diff=$(($now - $last))
|
|
||||||
|
|
||||||
[ $diff -gt $_NOTIFY_THROTTLE ]
|
|
||||||
}
|
|
||||||
|
|
||||||
# Get the last time we sent a notification.
|
|
||||||
#
|
|
||||||
# Returns:
|
|
||||||
# Time in seconds since the Epoch.
|
|
||||||
get_last_notify_time() {
|
|
||||||
if [ -f "$TMP_NOTIFY" ]; then
|
|
||||||
echo $(stat -c '%Y' "$TMP_NOTIFY")
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Save the last time we sent a notification.
|
|
||||||
save_last_notify_time() {
|
|
||||||
touch -m "$TMP_NOTIFY"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Display the charging indicator.
|
|
||||||
#
|
|
||||||
# Returns:
|
|
||||||
# The charging indicator.
|
|
||||||
display_batt_charging() {
|
|
||||||
if [ -n "$_SYMBOL_CHARGING" ]; then
|
|
||||||
echo -n "$(span -c "${_COLOR_CHARGING}" "$_SYMBOL_CHARGING") "
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "$colored_battery_symbol"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Display the discharging indicator.
|
|
||||||
#
|
|
||||||
# Returns:
|
|
||||||
# The discharging indicator.
|
|
||||||
display_batt_discharging() {
|
|
||||||
if [ -n "$_SYMBOL_DISCHARGING" ]; then
|
|
||||||
echo -n "$(span -c "${_COLOR_DISCHARGING}" "$_SYMBOL_DISCHARGING") "
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "$battery_charge_symbol"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Display the pending charge indicator.
|
|
||||||
#
|
|
||||||
# Returns:
|
|
||||||
# The pending charge indicator.
|
|
||||||
display_batt_pending_charge() {
|
|
||||||
if [ -n "$_SYMBOL_PENDING" ]; then
|
|
||||||
echo -n "$(span -c "${_COLOR_PENDING}" "$_SYMBOL_PENDING") "
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$_SYMBOL_CHARGING" ]; then
|
|
||||||
echo -n "$(span -c "${_COLOR_CHARGING}" "$_SYMBOL_CHARGING") "
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "${battery_charge_symbol}"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Display the pending discharge indicator.
|
|
||||||
#
|
|
||||||
# Returns:
|
|
||||||
# The pending discharge indicator.
|
|
||||||
display_batt_pending_discharge() {
|
|
||||||
if [ -n "$_SYMBOL_PENDING" ]; then
|
|
||||||
echo -n "$(span -c "${_COLOR_PENDING}" "$_SYMBOL_PENDING") "
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$_SYMBOL_DISCHARGING" ]; then
|
|
||||||
echo -n "$(span -c "${_COLOR_DISCHARGING}" "$_SYMBOL_DISCHARGING") "
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "$colored_battery_symbol"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Display the empty battery indicator.
|
|
||||||
#
|
|
||||||
# Returns:
|
|
||||||
# The empty battery indicator.
|
|
||||||
display_batt_empty() {
|
|
||||||
echo "$battery_charge_symbol"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Display the fully charged indicator.
|
|
||||||
#
|
|
||||||
# Returns:
|
|
||||||
# The fully-charged indicator.
|
|
||||||
display_batt_fully_charged() {
|
|
||||||
if [ -n "$_SYMBOL_FULLY_CHARGED" ]; then
|
|
||||||
echo -n "$(span -c "${_COLOR_FULLY_CHARGED}" "$_SYMBOL_FULLY_CHARGED") "
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "$battery_charge_symbol"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Display the unknown battery indicator.
|
|
||||||
#
|
|
||||||
# Returns:
|
|
||||||
# The unknonw battery indicator.
|
|
||||||
display_batt_unknown() {
|
|
||||||
if [ -n "$_SYMBOL_UNKNOWN" ]; then
|
|
||||||
echo -n "$(span "$_SYMBOL_UNKNOWN") "
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "$(get_battery_charge_symbol 0)"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Display the battery error indicator.
|
|
||||||
#
|
|
||||||
# Returns:
|
|
||||||
# The battery error indicator.
|
|
||||||
display_batt_error() {
|
|
||||||
echo "$(span -c "${_COLOR_ERROR}" "$_SYMBOL_ERROR" "$_SYMBOL_BATT_0")"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Display the battery percentage.
|
|
||||||
#
|
|
||||||
# Returns:
|
|
||||||
# The battery percentage, or nothing if disabled.
|
|
||||||
display_percentage() {
|
|
||||||
if ! [ $_SYMBOLS_ONLY = true -o $_HIDE_PERCENTAGE = true ]; then
|
|
||||||
echo -n " $(span -c "${percentage_color}" "${battery_percentage:---}${_PERCENT}")"
|
|
||||||
|
|
||||||
if [ "$status" = "charging" ] && $_SHOW_CHARGE_DIRECTION; then
|
|
||||||
echo -n "$(span -c "${_COLOR_DIRECTIONAL_UP}" "${_SYMBOL_DIRECTION_UP}")"
|
|
||||||
elif [ "$status" = "discharging" ] && $_SHOW_CHARGE_DIRECTION; then
|
|
||||||
echo -n "$(span -c "${_COLOR_DIRECTIONAL_DOWN}" "${_SYMBOL_DIRECTION_DOWN}")"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Display the battery time remaining.
|
|
||||||
#
|
|
||||||
# Arguments:
|
|
||||||
# $force (bool) Force display.
|
|
||||||
#
|
|
||||||
# Returns:
|
|
||||||
# The time remaining, or nothing if disabled.
|
|
||||||
display_time_remaining() {
|
|
||||||
local force=${1:-false}
|
|
||||||
|
|
||||||
if [ $force = true ] || ! [ $_SYMBOLS_ONLY = true -o $_HIDE_TIME_REMAINING = true ]; then
|
|
||||||
time_to_empty=$(get_time_to_empty "$battery_info")
|
|
||||||
if [ -n "$time_to_empty" ]; then
|
|
||||||
echo "$time_to_empty"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Display the battery time to fully charge.
|
|
||||||
#
|
|
||||||
# Arguments:
|
|
||||||
# $force (bool) Force display.
|
|
||||||
#
|
|
||||||
# Returns:
|
|
||||||
# The time to fully charge, or nothing if disabled.
|
|
||||||
display_time_to_full() {
|
|
||||||
local force=${1:-false}
|
|
||||||
|
|
||||||
if [ $force = true ] || ! [ $_SYMBOLS_ONLY = true -o $_HIDE_TIME_TO_FULL = true ]; then
|
|
||||||
time_to_full=$(get_time_to_full "$battery_info")
|
|
||||||
if [ -n "$time_to_full" ]; then
|
|
||||||
echo "$time_to_full"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Displays an array of segments.
|
|
||||||
#
|
|
||||||
# Arguments:
|
|
||||||
# $segments (array) The an array of segments.
|
|
||||||
#
|
|
||||||
# Returns:
|
|
||||||
# Each segment after another, followed by a newline.
|
|
||||||
display_segments() {
|
|
||||||
local -a segments="$@"
|
|
||||||
|
|
||||||
for segment in "${segments[@]}"; do
|
|
||||||
if [ -n "$segment" ]; then
|
|
||||||
echo -n "$segment"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
echo
|
|
||||||
}
|
|
||||||
|
|
||||||
# Colors text using either the first or second color
|
|
||||||
#
|
|
||||||
# Arguments:
|
|
||||||
# $1 - Text
|
|
||||||
# $2 - Color to use if toggle is false
|
|
||||||
# $3 - Color to use if toggle is true
|
|
||||||
# $4 - A boolean used to toggle between colors
|
|
||||||
#
|
|
||||||
# Returns:
|
|
||||||
# The colored text
|
|
||||||
multicolor() {
|
|
||||||
local color="$2"
|
|
||||||
local toggle=$4
|
|
||||||
|
|
||||||
if $toggle && [ -n "$3" ]; then
|
|
||||||
color="$3"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$color" ]; then
|
|
||||||
echo "$(span -c "$color" "$1")"
|
|
||||||
else
|
|
||||||
echo "$(span "$1")"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Display a notification.
|
|
||||||
#
|
|
||||||
# Arguments:
|
|
||||||
# $text (string) The notification text.
|
|
||||||
# $symbol (string) Name of an symbol.
|
|
||||||
# $type (string) The type of notification.
|
|
||||||
# $force (string) Force the notification, ignoring any throttle.
|
|
||||||
# $rest (string) Any additional options to pass to the command.
|
|
||||||
notify() {
|
|
||||||
local text="$1"
|
|
||||||
local symbol="$2"
|
|
||||||
local type="$3"
|
|
||||||
local force="$4"
|
|
||||||
local rest="${@:5}"
|
|
||||||
local command
|
|
||||||
|
|
||||||
if [ -z "$text" ] || ! $force && ! $(can_notify); then return; fi
|
|
||||||
|
|
||||||
if [ "$_NOTIFY_PROGRAM" = "dunstify" ]; then
|
|
||||||
command="dunstify -r 1001"
|
|
||||||
elif [ "$_NOTIFY_PROGRAM" = "notify-send" ]; then
|
|
||||||
command="notify-send"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$_NOTIFY_EXPIRES" ]; then command="$command -t $_NOTIFY_EXPIRES"; fi
|
|
||||||
if [ -n "$symbol" ]; then command="$command -i $symbol"; fi
|
|
||||||
if [ -n "$type" ]; then command="$command -u $type"; fi
|
|
||||||
|
|
||||||
command="$command $rest \"$text\""
|
|
||||||
if eval $command; then
|
|
||||||
save_last_notify_time
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Display a dialog.
|
|
||||||
#
|
|
||||||
# Arguments:
|
|
||||||
# $text (string) The dialog text.
|
|
||||||
# $symbol (string) Name of an symbol.
|
|
||||||
# $type (string) The type of dialog.
|
|
||||||
# $rest (string) Any additional options to pass to the command.
|
|
||||||
dialog() {
|
|
||||||
local text="$1"
|
|
||||||
local symbol="$2"
|
|
||||||
local type="$3"
|
|
||||||
local rest="${@:4}"
|
|
||||||
|
|
||||||
if [ -z "$text" ]; then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
command="zenity"
|
|
||||||
|
|
||||||
if [ -n "$symbol" ]; then command="$command --symbol-name=\"$symbol\""; fi
|
|
||||||
if [ -n "$type" ]; then command="$command --${type}"; fi
|
|
||||||
|
|
||||||
command="$command --text=\"$text\" $rest"
|
|
||||||
eval $command
|
|
||||||
}
|
|
||||||
|
|
||||||
# Display program usage.
|
|
||||||
usage() {
|
|
||||||
echo -e "Usage: $0 [options]
|
|
||||||
Display the battery status using upower for i3blocks.\n
|
|
||||||
Options:
|
|
||||||
-a <none|notify>\taction to take when battery is low
|
|
||||||
-A <color>\t\tcolor of the alert symbol
|
|
||||||
-B <color>\t\tcolor of the battery symbol
|
|
||||||
-c <capacity>\t\tset battery capacity alert percentage (0=disable)
|
|
||||||
-C <color>\t\tcolor of the charging symbol
|
|
||||||
-d\t\t\tshow the direction of change for the battery's percentage
|
|
||||||
-D <color>\t\tcolor of the discharging symbol
|
|
||||||
-e <millseconds>\texpiration time of notifications (Ubuntu's Notify OSD and GNOME Shell both ignore this parameter.)
|
|
||||||
-E <color>\t\tcolor of the battery error symbol
|
|
||||||
-f <font>\t\tfont for text and symbols
|
|
||||||
-F <color>\t\tcolor of the fully-charged symbol
|
|
||||||
-G\t\t\tcolor the battery symbol according to battery percentage
|
|
||||||
-h\t\t\tdisplay this help and exit
|
|
||||||
-H\t\t\tsuppress displaying if battery is fully-charged
|
|
||||||
-i <color>\t\tcolor gradient start color
|
|
||||||
-I\t\t\tonly display symbols
|
|
||||||
-j <color>\t\tcolor gradient end color
|
|
||||||
-J <symbol>\t\tsymbol for a battery 100% charged
|
|
||||||
-k\t\t\thide the battery percentage
|
|
||||||
-K <symbol>\t\tsymbol for a battery 75% charged
|
|
||||||
-l <none|notify>\taction to take when the battery level reaches critical
|
|
||||||
-L <symbol>\t\tsymbol to indicate there is an alert
|
|
||||||
-M <symbol>\t\tsymbol for a battery 50% charged
|
|
||||||
-n <program>\t\ta libnotify compatible notification program
|
|
||||||
-N <color>\t\tcolor of the battery charge decreasing indicator
|
|
||||||
-O <symbol>\t\tsymbol for a battery with no/low charge
|
|
||||||
-p <symbol>\t\tsymbol to use for the percent sign
|
|
||||||
-P <color>\t\tcolor of the pending charge symbol
|
|
||||||
-Q <symbol>\t\tsymbol for a battery 25% charged
|
|
||||||
-r\t\t\thide the battery time remaining
|
|
||||||
-R <symbol>\t\tsymbol to indicate the battery state is undefined
|
|
||||||
-S <symbol>\t\tsymbol to indicate battery is fully charged
|
|
||||||
-t <seconds>\t\tminimum time in seconds between notifications to prevent spam
|
|
||||||
-T <symbol>\t\tsymbol to indicate the battery is charging
|
|
||||||
-u\t\t\thide the time to charge the battery to full
|
|
||||||
-U <color>\t\tcolor of the battery charge increasing indicator
|
|
||||||
-V <symbol>\t\tsymbol to indicate the battery state is unknown
|
|
||||||
-W <symbol>\t\tsymbol to indicate battery charge is increasing
|
|
||||||
-X <symbol>\t\tsymbol to indicate the battery state is pending
|
|
||||||
-Y <symbol>\t\tsymbol to indicate the battery is discharging
|
|
||||||
-Z <symbol>\t\tsymbol to indicate battery charge is decreasing
|
|
||||||
" 1>&2
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
###############################################################################
|
|
||||||
|
|
||||||
declare -a long_segments
|
|
||||||
declare -a short_segments
|
|
||||||
|
|
||||||
__UPOWER_INFO=$(upower --show-info "/org/freedesktop/UPower/devices/battery_${BLOCK_INSTANCE:-BAT0}")
|
|
||||||
TMP_NOTIFY="$(get_temp_dir)/battery-plus.last_notify"
|
|
||||||
|
|
||||||
while getopts "a:A:B:c:C:dD:e:E:F:GhHi:Ij:J:kK:l:L:M:n:N:O:p:P:Q:rR:S:t:T:uU:V:W:X:Y:Z:" o; do
|
|
||||||
case "$o" in
|
|
||||||
a) _LOW_ACTION="${OPTARG}" ;;
|
|
||||||
A) _COLOR_ALERT="${OPTARG}" ;;
|
|
||||||
B) _COLOR_BATTERY="${OPTARG}" ;;
|
|
||||||
c) _CAPACITY_ALERT="${OPTARG}" ;;
|
|
||||||
C) _COLOR_CHARGING="${OPTARG}" ;;
|
|
||||||
d) _SHOW_CHARGE_DIRECTION=true ;;
|
|
||||||
D) _COLOR_DISCHARGING="${OPTARG}" ;;
|
|
||||||
e) _NOTIFY_EXPIRES="${OPTARG}" ;;
|
|
||||||
E) _COLOR_ERROR="${OPTARG}" ;;
|
|
||||||
F) _COLOR_FULLY_CHARGED="${OPTARG}" ;;
|
|
||||||
G) _USE_BATT_GRADIENT=true ;;
|
|
||||||
h | *) usage ;;
|
|
||||||
H) _HIDE_IF_CHARGED=true ;;
|
|
||||||
i) _COLOR_GRADIENT_START="${OPTARG}" ;;
|
|
||||||
I) _SYMBOLS_ONLY=true ;;
|
|
||||||
j) _COLOR_GRADIENT_END="${OPTARG}" ;;
|
|
||||||
J) _SYMBOL_BATT_100="${OPTARG}" ;;
|
|
||||||
k) _HIDE_PERCENTAGE=true ;;
|
|
||||||
K) _SYMBOL_BATT_75="${OPTARG}" ;;
|
|
||||||
l) _CRITICAL_ACTION="${OPTARG}" ;;
|
|
||||||
L) _SYMBOL_ALERT="${OPTARG}" ;;
|
|
||||||
M) _SYMBOL_BATT_50="${OPTARG}" ;;
|
|
||||||
n) _NOTIFY_PROGRAM="${OPTARG}" ;;
|
|
||||||
N) _COLOR_DIRECTIONAL_DOWN="${OPTARG}" ;;
|
|
||||||
O) _SYMBOL_BATT_0="${OPTARG}" ;;
|
|
||||||
p) _PERCENT="${OPTARG}" ;;
|
|
||||||
P) _COLOR_PENDING="${OPTARG}" ;;
|
|
||||||
Q) _SYMBOL_BATT_25="${OPTARG}" ;;
|
|
||||||
r) _HIDE_TIME_REMAINING=true ;;
|
|
||||||
R) _SYMBOL_ERROR="${OPTARG}" ;;
|
|
||||||
S) _SYMBOL_FULLY_CHARGED="${OPTARG}" ;;
|
|
||||||
t) _NOTIFY_THROTTLE="${OPTARG}" ;;
|
|
||||||
T) _SYMBOL_CHARGING="${OPTARG}" ;;
|
|
||||||
u) _HIDE_TIME_TO_FULL=true ;;
|
|
||||||
U) _COLOR_DIRECTIONAL_UP="${OPTARG}" ;;
|
|
||||||
V) _SYMBOL_UNKNOWN="${OPTARG}" ;;
|
|
||||||
W) _SYMBOL_DIRECTION_UP="${OPTARG}" ;;
|
|
||||||
X) _SYMBOL_PENDING="${OPTARG}" ;;
|
|
||||||
Y) _SYMBOL_DISCHARGING="${OPTARG}" ;;
|
|
||||||
Z) _SYMBOL_DIRECTION_DOWN="${OPTARG}" ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
shift $((OPTIND-1)) # Shift off options and optional --
|
|
||||||
|
|
||||||
battery_percentage=$(get_battery_percent)
|
|
||||||
percentage_color=$(get_percentage_color "$battery_percentage")
|
|
||||||
capacity=$(get_battery_capacity)
|
|
||||||
battery_charge_symbol=$(get_battery_charge_symbol "$battery_percentage")
|
|
||||||
battery_status_symbol=$(get_battery_status_symbol)
|
|
||||||
colored_battery_symbol=$(multicolor "$battery_charge_symbol" "$_COLOR_BATTERY" "$percentage_color" $_USE_BATT_GRADIENT)
|
|
||||||
warning_level=$(get_battery_warning_level)
|
|
||||||
|
|
||||||
# Handle battery warning levels
|
|
||||||
case "$warning_level" in
|
|
||||||
critical)
|
|
||||||
case "$_CRITICAL_ACTION" in
|
|
||||||
notify) $(notify "$(span "Your battery level is ${warning_level}!")" "$battery_status_symbol" "critical" false "-c device") ;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
low)
|
|
||||||
case "$_LOW_ACTION" in
|
|
||||||
notify) $(notify "$(span "Your battery level is ${warning_level}")" "$battery_status_symbol" "normal" false "-c device") ;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# Displayable alerts
|
|
||||||
if [ "$_CAPACITY_ALERT" -gt 0 ] && [ "${capacity%.*}" -le $_CAPACITY_ALERT ]; then
|
|
||||||
CAPACITY_TRIGGERED=true
|
|
||||||
long_segments+=( "$(span -c "$_COLOR_ALERT" "$_SYMBOL_ALERT") " )
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Battery statuses
|
|
||||||
status=$(get_battery_status)
|
|
||||||
case "$status" in
|
|
||||||
charging) long_segments+=( "$(display_batt_charging)" ) ;;
|
|
||||||
discharging) long_segments+=( "$(display_batt_discharging)" ) ;;
|
|
||||||
empty) long_segments+=( "$(display_batt_empty)" ) ;;
|
|
||||||
fully-charged)
|
|
||||||
if $_HIDE_IF_CHARGED; then
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
long_segments+=( "$(display_batt_fully_charged)" )
|
|
||||||
;;
|
|
||||||
pending-charge) long_segments+=( "$(display_batt_pending_charge)" ) ;;
|
|
||||||
pending-discharge) long_segments+=( "$(display_batt_pending_discharge)" ) ;;
|
|
||||||
unknown) long_segments+=( "$(display_batt_unknown)" ) ;;
|
|
||||||
*) long_segments+=( "$(display_batt_error)" ) ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# Since long_segments contains no text at this point, lets use it for the short_text
|
|
||||||
short_segments=( "${long_segments[@]}" )
|
|
||||||
|
|
||||||
# Append all text segments
|
|
||||||
long_segments+=( "$(display_percentage)" )
|
|
||||||
if [ -n "$(display_time_remaining)" ]; then
|
|
||||||
long_segments+=( "($(display_time_remaining))" )
|
|
||||||
fi
|
|
||||||
if [ -n "$(display_time_to_full)" ]; then
|
|
||||||
long_segments+=( "($(display_time_to_full))" )
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Display the block long_text
|
|
||||||
display_segments ${long_segments[@]}
|
|
||||||
|
|
||||||
# Display the block short_text
|
|
||||||
display_segments ${short_segments[@]}
|
|
||||||
|
|
||||||
# Handle click events
|
|
||||||
case $BLOCK_BUTTON in
|
|
||||||
1)
|
|
||||||
if [ -n "$CAPACITY_TRIGGERED" ]; then
|
|
||||||
$(dialog "$(span "Your battery capacity has reduced to ${capacity%.*}${_PERCENT}!")" "battery-caution" "warning" "--no-wrap")
|
|
||||||
else
|
|
||||||
if [ "$status" = "discharging" ]; then
|
|
||||||
$(notify "$(span "$(display_time_remaining true) remaining")" "alarm-symbolic" "normal" true "-c device")
|
|
||||||
elif [ "$status" = "charging" ]; then
|
|
||||||
$(notify "$(span "$(display_time_to_full true) until fully charged")" "alarm-symbolic" "normal" true "-c device")
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
if [ -n "$battery_percentage" ] && [ "$battery_percentage" -le 5 ]; then
|
|
||||||
exit 33
|
|
||||||
fi
|
|
@ -1,35 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
DATEFMT=${DATEFMT:-"+%a %d.%m.%Y %H:%M:%S"}
|
|
||||||
SHORTFMT=${SHORTFMT:-"+%H:%M:%S"}
|
|
||||||
|
|
||||||
OPTIND=1
|
|
||||||
while getopts ":f:" opt; do
|
|
||||||
case $opt in
|
|
||||||
f) DATEFMT="$OPTARG" ;;
|
|
||||||
\?)
|
|
||||||
echo "Invalid option: -$OPTARG" >&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
:)
|
|
||||||
echo "Option -$OPTARG requires an argument." >&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
case "$BLOCK_BUTTON" in
|
|
||||||
1|2|3)
|
|
||||||
# Try to focus Thunderbird
|
|
||||||
i3-msg -q [class="Thunderbird" instance="Mail"] focus
|
|
||||||
if [ $? == 2 ]
|
|
||||||
then
|
|
||||||
# Open Thunderbird if it was not open
|
|
||||||
i3-msg -q "exec thunderbird -mail -calendar"
|
|
||||||
else
|
|
||||||
# Open calendar
|
|
||||||
xdotool key --clearmodifiers --delay 5 ctrl+shift+c
|
|
||||||
fi
|
|
||||||
esac
|
|
||||||
echo "$LABEL$(date "$DATEFMT")"
|
|
||||||
echo "$LABEL$(date "$SHORTFMT")"
|
|
@ -1,35 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
DATEFMT=${DATEFMT:-"+%a %d.%m.%Y %H:%M:%S"}
|
|
||||||
SHORTFMT=${SHORTFMT:-"+%H:%M:%S"}
|
|
||||||
|
|
||||||
OPTIND=1
|
|
||||||
while getopts ":f:" opt; do
|
|
||||||
case $opt in
|
|
||||||
f) DATEFMT="$OPTARG" ;;
|
|
||||||
\?)
|
|
||||||
echo "Invalid option: -$OPTARG" >&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
:)
|
|
||||||
echo "Option -$OPTARG requires an argument." >&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
case "$BLOCK_BUTTON" in
|
|
||||||
1|2|3)
|
|
||||||
# Try to focus Thunderbird
|
|
||||||
i3-msg -q [class="Thunderbird" instance="Mail"] focus
|
|
||||||
if [ $? == 2 ]
|
|
||||||
then
|
|
||||||
# Open Thunderbird if it was not open
|
|
||||||
i3-msg -q "exec thunderbird -mail -calendar"
|
|
||||||
else
|
|
||||||
# Open calendar
|
|
||||||
xdotool key --clearmodifiers --delay 5 ctrl+shift+c
|
|
||||||
fi
|
|
||||||
esac
|
|
||||||
echo "$LABEL$(date "$DATEFMT")"
|
|
||||||
echo "$LABEL$(date "$SHORTFMT")"
|
|
@ -1,30 +0,0 @@
|
|||||||
# i3blocks configuration file
|
|
||||||
#
|
|
||||||
# The i3blocks man page describes the usage of the binary,
|
|
||||||
# and its website describes the configuration:
|
|
||||||
#
|
|
||||||
# https://vivien.github.io/i3blocks
|
|
||||||
|
|
||||||
# Sources:
|
|
||||||
# https://github.com/hastinbe/i3blocks-battery-plus
|
|
||||||
# https://github.com/zakariaGatter/i3blocks-gate
|
|
||||||
|
|
||||||
# Global properties
|
|
||||||
separator=true
|
|
||||||
separator_block_width=15
|
|
||||||
|
|
||||||
[activity]
|
|
||||||
command=./activity
|
|
||||||
interval=10
|
|
||||||
LABEL=
|
|
||||||
|
|
||||||
[volume]
|
|
||||||
command=./volume
|
|
||||||
LABEL=
|
|
||||||
interval=10
|
|
||||||
signal=10
|
|
||||||
|
|
||||||
[calendar]
|
|
||||||
command=./calendar
|
|
||||||
interval=1
|
|
||||||
|
|
@ -1,462 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
# Zakaria Barkouk ( Zakaria.gatter@gmail.com)
|
|
||||||
|
|
||||||
#---------------------#
|
|
||||||
# SHOW CPU INFO (TOP) #
|
|
||||||
#---------------------#
|
|
||||||
_BLOCK_1_(){ #{{{
|
|
||||||
mpstat | awk '/all/{print "'"${1:-} "'"$4}'
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#--------------------#
|
|
||||||
# SHOW ALL CPUS INFO #
|
|
||||||
#--------------------#
|
|
||||||
_BLOCK_2_(){ #{{{
|
|
||||||
mpstat -P ALL | awk -v icon=${1:-} 'BEGIN{printf "%s ", icon} {
|
|
||||||
if($3 ~ /^[0-9]/){
|
|
||||||
printf "%s ", $4
|
|
||||||
}
|
|
||||||
}'
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#--------------------------#
|
|
||||||
# SHOW MEMORY USAGE (FREE) #
|
|
||||||
#--------------------------#
|
|
||||||
_BLOCK_3_(){ #{{{
|
|
||||||
free -h | awk '/^Mem:/{print "'"${1:-} "'"$3}'
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#------------------------#
|
|
||||||
# SHOW SWAP USAGE (FREE) #
|
|
||||||
#------------------------#
|
|
||||||
_BLOCK_4_(){ #{{{
|
|
||||||
free -h | awk '/^Swap:/{print "'"${1:-}"' "$3}'
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#---------------------------#
|
|
||||||
# SHOW DATE AND TIME (DATE) #
|
|
||||||
#---------------------------#
|
|
||||||
_BLOCK_5_(){ #{{{
|
|
||||||
date +"${1:-} %R %D"
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#----------------------------#
|
|
||||||
# SHOW BATTERY STATUS (ACPI) #
|
|
||||||
#----------------------------#
|
|
||||||
_BLOCK_6_(){ #{{{
|
|
||||||
Bat=$(acpi | awk '{gsub(",|%","",$4); print $4}');
|
|
||||||
adapt=$(acpi -a | awk '{print $3}');
|
|
||||||
|
|
||||||
if [ "$adapt" = "on-line" -a -n "$Bat" ];then
|
|
||||||
icon0=" "
|
|
||||||
icon1=" "
|
|
||||||
icon2=" "
|
|
||||||
icon3=" "
|
|
||||||
icon4=" "
|
|
||||||
elif [ "$adapt" = "on-line" ];then
|
|
||||||
icon0=""
|
|
||||||
icon1=""
|
|
||||||
icon2=""
|
|
||||||
icon3=""
|
|
||||||
icon4=""
|
|
||||||
else
|
|
||||||
icon0=""
|
|
||||||
icon1=""
|
|
||||||
icon2=""
|
|
||||||
icon3=""
|
|
||||||
icon4=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
[ -z "$Bat" ] && echo "$icon0 $adapt" && return
|
|
||||||
[ "$Bat" -gt "100" ] && echo "$icon4 Full"
|
|
||||||
[ "$Bat" -gt "90" ] && echo "$icon3 $Bat%"
|
|
||||||
[ "$Bat" -gt "60" ] && echo "$icon2 $Bat%"
|
|
||||||
[ "$Bat" -gt "30" ] && echo "$icon1 $Bat%"
|
|
||||||
[ "$Bat" -lt "30" ] && echo "$icon0 $Bat%"
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#----------------------#
|
|
||||||
# SHOW DISK USAGE (DF) #
|
|
||||||
#----------------------#
|
|
||||||
_BLOCK_7_() { #{{{
|
|
||||||
df -h "${1:-/}" | awk '/\/dev\//{print "'"${2:-}"' "$3-G"/"$2}'
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#----------------------#
|
|
||||||
# SHOW KEYBOARD LAYOUT #
|
|
||||||
#----------------------#
|
|
||||||
_BLOCK_8_() { #{{{
|
|
||||||
awk -F '"' '/XKBLAYOUT/{print "'"${1:-} "'"$2}' /etc/default/keyboard
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#----------------------#
|
|
||||||
# SHOW SYSTEM LANGUAGE #
|
|
||||||
#----------------------#
|
|
||||||
_BLOCK_9_(){ #{{{
|
|
||||||
echo "${1:-} ${LANG/.UTF-8/}"
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#------------------------------#
|
|
||||||
# SHOW MACHINE UPTIME (UPTIME) #
|
|
||||||
#------------------------------#
|
|
||||||
_BLOCK_10_() { #{{{
|
|
||||||
uptime | awk '{sub(",","",$4); print "'"${1:- } "'"$3 " " $4}'
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#----------------------#
|
|
||||||
# SHOW TRASH SIZE (DU) #
|
|
||||||
#----------------------#
|
|
||||||
_BLOCK_11_() { #{{{
|
|
||||||
[ -d "$HOME/.local/share/Trash/files" ] && {
|
|
||||||
du -hc $HOME/.local/share/Trash/files | awk '/total$/{print "'"${1:-} "'"$1}'
|
|
||||||
} || {
|
|
||||||
echo "${1:-} ---"
|
|
||||||
}
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#-------------------#
|
|
||||||
# SHOW WINDOW USAGE #
|
|
||||||
#-------------------#
|
|
||||||
_BLOCK_12_() { #{{{
|
|
||||||
focus=$(xprop -id `xprop -root | awk '/^_NET_ACTIVE_WINDOW/{print $5}'` | awk -F '"' '/^WM_NAME/{print $2}')
|
|
||||||
if [ -z "$focus" ];then
|
|
||||||
echo "${1:-} Welcome"
|
|
||||||
else
|
|
||||||
[ "${#focus}" -gt "${2:-30}" ] && echo "${1:-} ${focus::${2:-30}} ..." || echo "${1:-} $focus"
|
|
||||||
fi
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#-----------------------------------------#
|
|
||||||
# SHOW MOCP PLAYING SONG AND STATUS (MOC) #
|
|
||||||
#-----------------------------------------#
|
|
||||||
_BLOCK_13_() { # {{{
|
|
||||||
Title=$(mocp -Q %title)
|
|
||||||
F_Title=$(basename `mocp -Q %file | tr " " "_"`)
|
|
||||||
Status=$(mocp -Q %state)
|
|
||||||
|
|
||||||
if [ "$Status" != "PLAY" ];then
|
|
||||||
echo "${1:-} Pause"
|
|
||||||
elif [ -z "$Title" ];then
|
|
||||||
echo "${1:-} ${F_Title::30}"
|
|
||||||
else
|
|
||||||
echo "${1:-} $Title"
|
|
||||||
fi
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#------------------------------------------------------#
|
|
||||||
# SHOW MPD PLAYING SONG AND STATUS (MPD; NCMPCCP, MPC) #
|
|
||||||
#------------------------------------------------------#
|
|
||||||
_BLOCK_14_() { #{{{
|
|
||||||
local NCMP=$(mpc | awk '/^\[playing\]/{print $1}')
|
|
||||||
|
|
||||||
if [ "$NCMP" = "[playing]" ];then
|
|
||||||
echo "${1:-} $(basename $(mpc current)) "
|
|
||||||
else
|
|
||||||
echo "${1:-} Pause "
|
|
||||||
fi
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#-------------------------#
|
|
||||||
# SHOW CPU TEMP (XSENSER) #
|
|
||||||
#-------------------------#
|
|
||||||
_BLOCK_15_() { #{{{
|
|
||||||
sensors | awk '/^CPU/{gsub("\+",""); print "'"${1:-} "'"$2}'
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#-------------------------#
|
|
||||||
# SHOW GPU TEMP (XSENSER) #
|
|
||||||
#-------------------------#
|
|
||||||
_BLOCK_16_() { #{{{
|
|
||||||
sensors | awk '/^GPU/{gsub("\+",""); print "'"${1:-} "'"$2}' | tail -1
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#----------------------------------#
|
|
||||||
# SHOW TOUCHPAD STATUS (SYSCLIENT) #
|
|
||||||
#----------------------------------#
|
|
||||||
_BLOCK_17_() { #{{{
|
|
||||||
[ "$(synclient -l | awk '/Touchpad/{print $3}')" = "0" ] && echo "${1:-} Enable" || echo "${1:-} Disable"
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#---------------------------#
|
|
||||||
# SHOW VOLUME STATUS (ALSA) #
|
|
||||||
#---------------------------#
|
|
||||||
_BLOCK_18_() { #{{{
|
|
||||||
local Vol=$(amixer get Master | awk '/Mono:/{gsub("\[|\%|\]",""); print $4}')
|
|
||||||
local Mute=$(amixer get Master | awk '/Mono:/{gsub("\[|\]",""); print $6}')
|
|
||||||
|
|
||||||
if [ "$Mute" = "off" ];then
|
|
||||||
echo -e " --"
|
|
||||||
else
|
|
||||||
if [ "$Vol" -gt "60" ];then
|
|
||||||
echo -e " $Vol%"
|
|
||||||
elif [ "$Vol" -gt "30" ];then
|
|
||||||
echo -e " $Vol%"
|
|
||||||
elif [ "$Vol" -lt "30" ];then
|
|
||||||
echo -e " $Vol%"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#----------------------------------------------#
|
|
||||||
# SHOW WIFI INFO ; IP ; CONNECTED NAME (NMCLI) #
|
|
||||||
#----------------------------------------------#
|
|
||||||
_BLOCK_19_() { #{{{
|
|
||||||
while read -a W ;do
|
|
||||||
[ "${W[2]}" = "connected" ] && {
|
|
||||||
_ip=$(nmcli device show ${W[0]} | awk '/^IP4.ADDRESS/{print $NF}')
|
|
||||||
_name=$(nmcli device show ${W[0]} | awk '/^GENERAL.CONNECTION:/{$1=""; print $0}')
|
|
||||||
echo -n "${1:-} ${_ip%/*} (${_name} )"
|
|
||||||
} || {
|
|
||||||
echo -n "${1:-} ---"
|
|
||||||
}
|
|
||||||
done< <(nmcli d | grep -w "wifi")
|
|
||||||
echo -e ""
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#-------------------------------------------#
|
|
||||||
# SHOW ETHERNET INFO ; IP ; CONNECTED NAME #
|
|
||||||
#-------------------------------------------#
|
|
||||||
_BLOCK_20_() { #{{{
|
|
||||||
while read -a W ;do
|
|
||||||
[ "${W[2]}" = "connected" ] && {
|
|
||||||
_ip=$(nmcli device show ${W[0]} | awk '/^IP4.ADDRESS/{print $NF}')
|
|
||||||
_name=$(nmcli device show ${W[0]} | awk '/^GENERAL.CONNECTION:/{$1=""; print $0}')
|
|
||||||
echo -n "${1:-} ${_ip%/*} (${_name} ) "
|
|
||||||
} || {
|
|
||||||
echo -n "${1:-} ---"
|
|
||||||
}
|
|
||||||
done< <(nmcli d | grep "ethernet")
|
|
||||||
echo -e ""
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
|
|
||||||
#-----------------------------------------------#
|
|
||||||
# SHOW WIFI INFO ; IP6 ; CONNECTED NAME (NMCLI) #
|
|
||||||
#-----------------------------------------------#
|
|
||||||
_BLOCK_21_() { #{{{
|
|
||||||
while read -a W ;do
|
|
||||||
[ "${W[2]}" = "connected" ] && {
|
|
||||||
_ip=$(nmcli device show ${W[0]} | awk '/^IP6.ADDRESS/{print $NF}')
|
|
||||||
_name=$(nmcli device show ${W[0]} | awk '/^GENERAL.CONNECTION:/{$1=""; print $0}')
|
|
||||||
echo -n "${1:-} ${_ip%/*} (${_name} ) "
|
|
||||||
} || {
|
|
||||||
echo -n "${1:-} ---"
|
|
||||||
}
|
|
||||||
done< <(nmcli d | grep "wifi")
|
|
||||||
echo -e ""
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#--------------------------------------------#
|
|
||||||
# SHOW ETHERNET INFO ; IP6 ; CONNECTED NAME #
|
|
||||||
#--------------------------------------------#
|
|
||||||
_BLOCK_22_() { #{{{
|
|
||||||
while read -a W ;do
|
|
||||||
[ "${W[2]}" = "connected" ] && {
|
|
||||||
_ip=$(nmcli device show ${W[0]} | awk '/^IP6.ADDRESS/{print $NF}')
|
|
||||||
_name=$(nmcli device show ${W[0]} | awk '/^GENERAL.CONNECTION:/{$1=""; print $0}')
|
|
||||||
echo -n "${1:-} ${_ip%/*} (${_name} ) "
|
|
||||||
} || {
|
|
||||||
echo -n "${1:-} ---"
|
|
||||||
}
|
|
||||||
done< <(nmcli d | grep "ethernet")
|
|
||||||
echo -e ""
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#-------------------------------#
|
|
||||||
# SHOW PROSSES USE BY THIS USER #
|
|
||||||
#-------------------------------#
|
|
||||||
_BLOCK_23_() { #{{{
|
|
||||||
echo "${1:-} $(ps -U $USER | wc -l)"
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#---------------------#
|
|
||||||
# SHOW SYSTEM KERENEL #
|
|
||||||
#---------------------#
|
|
||||||
_BLOCK_24_() { #{{{
|
|
||||||
echo "${1:-} $(uname -r)"
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#-----------------------------#
|
|
||||||
# SHOW USB PLUG IN UR COMPUTE #
|
|
||||||
#-----------------------------#
|
|
||||||
_BLOCK_25_() { #{{{
|
|
||||||
echo "${1:-} $(lsblk -l -o 'TRAN' | grep -c "usb")"
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#---------------------------------------#
|
|
||||||
# SHOW TOTAL PKGS INSTALL IN YOUR SYSTE #
|
|
||||||
#---------------------------------------#
|
|
||||||
_BLOCK_26_() { #{{{
|
|
||||||
echo "${1:-} $(dpkg -l | grep -c "^ii")"
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#--------------------------------------------#
|
|
||||||
# CHECK IF THERE IS ANY UPDATE IN UR SYSTEM #
|
|
||||||
#--------------------------------------------#
|
|
||||||
_BLOCK_27_() { #{{{
|
|
||||||
local U_PKGS=$(apt-get -s -o APT::Get::Show-User-Simulation-Note=0 dist-upgrade | grep "^\s\s" | wc -w);
|
|
||||||
echo "${1:-} $U_PKGS"
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#-----------------#
|
|
||||||
# SHOW UFW STATUS #
|
|
||||||
#-----------------#
|
|
||||||
_BLOCK_28_() { #{{{
|
|
||||||
[ "$(systemctl status ufw | awk '/Active:/{print $2}')" == "active" ] && echo "${1:-} On" || echo "${1:-} Off"
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#-------------------------#
|
|
||||||
# SHOW NUMBER LOCK STATUS #
|
|
||||||
#-------------------------#
|
|
||||||
_BLOCK_29_() { #{{{
|
|
||||||
[ "$(xset -q | awk '/00:/{print $8}')" == "on" ] && echo "${1:-} On" || echo "${1:-} Off"
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#-----------------------#
|
|
||||||
# SHOW BLUETOOTH STATUS #
|
|
||||||
#-----------------------#
|
|
||||||
_BLOCK_30_() { #{{{
|
|
||||||
[ "$(systemctl status bluetooth.target | awk '/Active:/{print $2}')" == "active" ] && echo "${1:-} On" || echo "${1:-} Off"
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#------------------------#
|
|
||||||
# SHOW CAPS LOCK STATUS #
|
|
||||||
#------------------------#
|
|
||||||
_BLOCK_31_() { #{{{
|
|
||||||
[ "$(xset -q | awk '/00:/{print $4}')" == "on" ] && echo "${1:-} On" || echo "${1:-} Off"
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#-----------------------------#
|
|
||||||
# DISPLAY X SCREENSAVER STATE #
|
|
||||||
#-----------------------------#
|
|
||||||
_BLOCK_32_() { #{{{
|
|
||||||
[ "$(xdg-screensaver status)" != "enabled" ] && echo "${1:-} Off" || echo "${1:-} On"
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#--------------------------------#
|
|
||||||
# CALCULE MOUNT POINTS ON SYSTEM #
|
|
||||||
#--------------------------------#
|
|
||||||
_BLOCK_33_() { #{{{
|
|
||||||
echo "${1:-} $(cat /proc/mounts | grep -c "^/dev/sd*") "
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#-------------------------#
|
|
||||||
# SHOW CMUS PLAYING SONG #
|
|
||||||
#-------------------------#
|
|
||||||
_BLOCK_34_() { #{{{
|
|
||||||
local CMUS_P=$(cmus-remote -Q | awk '/^status/{print $2}')
|
|
||||||
local CMUS_F=$(cmus-remote -Q | awk '/^file/{$1=""; print $2}')
|
|
||||||
|
|
||||||
if [ "$CMUS_P" = "Playing" ];then
|
|
||||||
echo "${1:-} $(basename $CMUS_F)"
|
|
||||||
else
|
|
||||||
echo "${1:-} Pause"
|
|
||||||
fi
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#----------------------#
|
|
||||||
# SHOW APPARMOR STATUS #
|
|
||||||
#----------------------#
|
|
||||||
_BLOCK_35_() { #{{{
|
|
||||||
[ "$(aa-enabled)" = "Yes" ] && {
|
|
||||||
echo "${1:-} On"
|
|
||||||
}||{
|
|
||||||
echo "${1:-} Off"
|
|
||||||
}
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#-----------------------------#
|
|
||||||
# SHOW TOTAL PACKAGES IN ARCH #
|
|
||||||
#-----------------------------#{{{
|
|
||||||
_BLOCK_36_(){
|
|
||||||
echo "${1:-} $(pacman -Q | grep -c "*")"
|
|
||||||
}
|
|
||||||
#}}}
|
|
||||||
|
|
||||||
#--------------------#
|
|
||||||
# SHOW I3 WORKSPACES #
|
|
||||||
#--------------------#
|
|
||||||
_BLOCK_37_() { #{{{
|
|
||||||
i3-msg -t get_workspaces | awk -F , '{
|
|
||||||
for(i=1;i<=NF;i++){
|
|
||||||
if($i~"name"){
|
|
||||||
gsub("\"name\":|\"","",$i)
|
|
||||||
WK=$i
|
|
||||||
}
|
|
||||||
if($i~"focused"){
|
|
||||||
gsub("\"focused\":","",$i)
|
|
||||||
WKF=$i
|
|
||||||
}
|
|
||||||
if($i~"urgent"){
|
|
||||||
gsub("\"urgent\":|\]|\}","",$i)
|
|
||||||
if($i=="false" && WKF=="true"){
|
|
||||||
printf "%s ", WK
|
|
||||||
}
|
|
||||||
if($i=="false" && WKF=="false"){
|
|
||||||
printf"[%s] ", WK
|
|
||||||
}
|
|
||||||
if($i=="true" && WKF=="false"){
|
|
||||||
printf "[*%s] ", WK
|
|
||||||
}
|
|
||||||
if($i=="true" && WKF=="true"){
|
|
||||||
printf "*%s ", WK
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}'
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#-----------------#
|
|
||||||
# SHOW USER NAME #
|
|
||||||
#-----------------#
|
|
||||||
_BLOCK_38_(){ #{{{
|
|
||||||
echo -e "${1:-} $USER"
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#-------------------#
|
|
||||||
# SHOW VOLUME PULSE #
|
|
||||||
#-------------------#
|
|
||||||
_BLOCK_39_(){
|
|
||||||
local Vol=$(pactl list sinks | awk '/Volume: front/{print $5-"%"}')
|
|
||||||
local Mute=$(amixer get Master | awk '/Mono:/{gsub("\[|\]",""); print $6}')
|
|
||||||
|
|
||||||
if [ "$Mute" = "off" ];then
|
|
||||||
echo -e " --"
|
|
||||||
else
|
|
||||||
if [ "$Vol" -gt "60" ];then
|
|
||||||
echo -e " $Vol%"
|
|
||||||
elif [ "$Vol" -gt "30" ];then
|
|
||||||
echo -e " $Vol%"
|
|
||||||
elif [ "$Vol" -lt "30" ];then
|
|
||||||
echo -e " $Vol%"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
#------------------------#
|
|
||||||
# USAGE AND HELP DIALOG #
|
|
||||||
#------------------------#
|
|
||||||
_USAGE_(){ #{{{
|
|
||||||
echo -e "
|
|
||||||
i3b-gate : is a all in one collaction of small script
|
|
||||||
show you useful unformation about your system
|
|
||||||
|
|
||||||
There is 39 deffirent script to use
|
|
||||||
for more information you can see the 'README' file
|
|
||||||
or visite 'https://gitlab.com/zakariagatter/i3blocks-gate'
|
|
||||||
|
|
||||||
SYNTAX :
|
|
||||||
i3b-gate [NUMBER] ...
|
|
||||||
"
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
#----------------#
|
|
||||||
# MAIN ARGUMENT #
|
|
||||||
#----------------#
|
|
||||||
if [ "$1" -gt "39" ] || [ -z "$1" ] ;then
|
|
||||||
_USAGE_
|
|
||||||
elif [ "$1" = "-h" ]; then
|
|
||||||
_USAGE_
|
|
||||||
else
|
|
||||||
eval $(echo "_BLOCK_$1_ $2 $3")
|
|
||||||
fi
|
|
@ -1,26 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
get_current_layout () {
|
|
||||||
setxkbmap -print | grep -q dvorak
|
|
||||||
if [ "$?" -eq "0" ]; then
|
|
||||||
echo dvorak
|
|
||||||
else
|
|
||||||
echo qwertz
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
case "$BLOCK_BUTTON" in
|
|
||||||
1|2|3)
|
|
||||||
# Switch layout
|
|
||||||
current_layout=$(get_current_layout)
|
|
||||||
if [ $current_layout == dvorak ]; then
|
|
||||||
setxkbmap -layout de
|
|
||||||
else
|
|
||||||
setxkbmap -layout de -variant dvorak
|
|
||||||
fi
|
|
||||||
esac
|
|
||||||
|
|
||||||
current_layout=$(get_current_layout)
|
|
||||||
|
|
||||||
echo "$LABEL $current_layout"
|
|
||||||
echo "$LABEL $current_layout"
|
|
@ -1,91 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
# Copyright (C) 2014 Julien Bonjean <julien@bonjean.info>
|
|
||||||
# Copyright (C) 2014 Alexander Keller <github@nycroth.com>
|
|
||||||
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
#------------------------------------------------------------------------
|
|
||||||
|
|
||||||
# The second parameter overrides the mixer selection
|
|
||||||
# For PulseAudio users, eventually use "pulse"
|
|
||||||
# For Jack/Jack2 users, use "jackplug"
|
|
||||||
# For ALSA users, you may use "default" for your primary card
|
|
||||||
# or you may use hw:# where # is the number of the card desired
|
|
||||||
if [[ -z "$MIXER" ]] ; then
|
|
||||||
MIXER="default"
|
|
||||||
if command -v pulseaudio >/dev/null 2>&1 && pulseaudio --check ; then
|
|
||||||
# pulseaudio is running, but not all installations use "pulse"
|
|
||||||
if amixer -D pulse info >/dev/null 2>&1 ; then
|
|
||||||
MIXER="pulse"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
[ -n "$(lsmod | grep jack)" ] && MIXER="jackplug"
|
|
||||||
MIXER="${2:-$MIXER}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# The instance option sets the control to report and configure
|
|
||||||
# This defaults to the first control of your selected mixer
|
|
||||||
# For a list of the available, use `amixer -D $Your_Mixer scontrols`
|
|
||||||
if [[ -z "$SCONTROL" ]] ; then
|
|
||||||
SCONTROL="${BLOCK_INSTANCE:-$(amixer -D $MIXER scontrols |
|
|
||||||
sed -n "s/Simple mixer control '\([^']*\)',0/\1/p" |
|
|
||||||
head -n1
|
|
||||||
)}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# The first parameter sets the step to change the volume by (and units to display)
|
|
||||||
# This may be in in % or dB (eg. 5% or 3dB)
|
|
||||||
if [[ -z "$STEP" ]] ; then
|
|
||||||
STEP="${1:-5%}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# AMIXER(1):
|
|
||||||
# "Use the mapped volume for evaluating the percentage representation like alsamixer, to be
|
|
||||||
# more natural for human ear."
|
|
||||||
NATURAL_MAPPING=${NATURAL_MAPPING:-0}
|
|
||||||
if [[ "$NATURAL_MAPPING" != "0" ]] ; then
|
|
||||||
AMIXER_PARAMS="-M"
|
|
||||||
fi
|
|
||||||
|
|
||||||
#------------------------------------------------------------------------
|
|
||||||
|
|
||||||
capability() { # Return "Capture" if the device is a capture device
|
|
||||||
amixer $AMIXER_PARAMS -D $MIXER get $SCONTROL |
|
|
||||||
sed -n "s/ Capabilities:.*cvolume.*/Capture/p"
|
|
||||||
}
|
|
||||||
|
|
||||||
volume() {
|
|
||||||
amixer $AMIXER_PARAMS -D $MIXER get $SCONTROL $(capability)
|
|
||||||
}
|
|
||||||
|
|
||||||
format() {
|
|
||||||
|
|
||||||
perl_filter='if (/.*\[(\d+%)\] (\[(-?\d+.\d+dB)\] )?\[(on|off)\]/)'
|
|
||||||
perl_filter+='{CORE::say $4 eq "off" ? "MUTE" : "'
|
|
||||||
# If dB was selected, print that instead
|
|
||||||
perl_filter+=$([[ $STEP = *dB ]] && echo '$3' || echo '$1')
|
|
||||||
perl_filter+='"; exit}'
|
|
||||||
output=$(perl -ne "$perl_filter")
|
|
||||||
echo "$LABEL $output"
|
|
||||||
}
|
|
||||||
|
|
||||||
#------------------------------------------------------------------------
|
|
||||||
|
|
||||||
case $BLOCK_BUTTON in
|
|
||||||
1|2|3) pavucontrol ;; # right click, open gui
|
|
||||||
4) amixer $AMIXER_PARAMS -q -D $MIXER sset $SCONTROL $(capability) ${STEP}+ unmute ;; # scroll up, increase
|
|
||||||
5) amixer $AMIXER_PARAMS -q -D $MIXER sset $SCONTROL $(capability) ${STEP}- unmute ;; # scroll down, decrease
|
|
||||||
esac
|
|
||||||
|
|
||||||
volume | format
|
|
12
laptop-nix.conf
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
build-users-group = nixbld
|
||||||
|
|
||||||
|
experimental-features = nix-command flakes
|
||||||
|
|
||||||
|
builders-use-substitutes = true
|
||||||
|
trusted-substituters = ssh://192.168.3.118
|
||||||
|
substituters = ssh://192.168.3.118 https://cache.nixos.org https://nix-community.cachix.org
|
||||||
|
trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=
|
||||||
|
builders = ssh://192.168.3.118 x86_64-linux,aarch64-linux - 16 2 kvm,big-parallel,nixos-test
|
||||||
|
|
||||||
|
extra-platforms = aarch64-linux
|
||||||
|
extra-sandbox-paths = /usr/bin/qemu-aarch64-static
|
15
lib/module/default.nix
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
{ lib, ... }:
|
||||||
|
with lib;
|
||||||
|
rec {
|
||||||
|
mkOpt =
|
||||||
|
type: default: description:
|
||||||
|
mkOption { inherit type default description; };
|
||||||
|
|
||||||
|
mkOpt' = type: default: mkOpt type default null;
|
||||||
|
|
||||||
|
mkBoolOpt = mkOpt types.bool;
|
||||||
|
|
||||||
|
mkBoolOpt' = mkOpt' types.bool;
|
||||||
|
|
||||||
|
mkEnableOpt = mkBoolOpt' false;
|
||||||
|
}
|
3
modules/home/alacritty/alacritty.toml
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import = [
|
||||||
|
"~/.config/alacritty/theme/themes/smoooooth.toml"
|
||||||
|
]
|
41
modules/home/alacritty/default.nix
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
# Snowfall Lib provides a customized `lib` instance with access to your flake's library
|
||||||
|
# as well as the libraries available from your flake's inputs.
|
||||||
|
lib,
|
||||||
|
# An instance of `pkgs` with your overlays and packages applied is also available.
|
||||||
|
pkgs,
|
||||||
|
# You also have access to your flake's inputs.
|
||||||
|
inputs,
|
||||||
|
|
||||||
|
# Additional metadata is provided by Snowfall Lib.
|
||||||
|
system, # The system architecture for this host (eg. `x86_64-linux`).
|
||||||
|
target, # The Snowfall Lib target for this system (eg. `x86_64-iso`).
|
||||||
|
format, # A normalized name for the system target (eg. `iso`).
|
||||||
|
virtual, # A boolean to determine whether this system is a virtual target using nixos-generators.
|
||||||
|
systems, # An attribute map of your defined hosts.
|
||||||
|
|
||||||
|
# All other arguments come from the module system.
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.modules.alacritty;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.alacritty = {
|
||||||
|
enable = lib.mkOption { default = false; };
|
||||||
|
mkDefault = lib.mkOption { default = true; };
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
home.packages = with pkgs; [ (lib.mkIf config.modules.non-nixos.is-nixos alacritty) ];
|
||||||
|
|
||||||
|
home.file = {
|
||||||
|
".config/alacritty/theme".source = "${inputs.alacritty-theme}";
|
||||||
|
".config/alacritty/alacritty.toml".source = ./alacritty.toml;
|
||||||
|
};
|
||||||
|
|
||||||
|
home.sessionVariables.TERMINAL = lib.mkIf cfg.mkDefault "alacritty";
|
||||||
|
};
|
||||||
|
}
|
39
modules/home/desktop/default.nix
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
options,
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
inherit (inputs.nix-colors.lib-contrib { inherit pkgs; }) gtkThemeFromScheme;
|
||||||
|
cfg = config.modules.desktop;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.desktop =
|
||||||
|
with lib.frajul;
|
||||||
|
with lib.types;
|
||||||
|
{
|
||||||
|
colorscheme = mkOpt str "catppuccin-mocha" "Theme to use for the desktop";
|
||||||
|
enable = mkBoolOpt false "Enable desktop";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Do not make conditional, just toggle things on and off
|
||||||
|
imports = [ inputs.nix-colors.homeManagerModules.default ];
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
# home.sessionVariables.GTK_THEME = "Catppuccin-Mocha-Compact-Blue-dark";
|
||||||
|
gtk = {
|
||||||
|
enable = true;
|
||||||
|
theme = {
|
||||||
|
name = inputs.nix-colors.colorschemes.${cfg.colorscheme}.slug;
|
||||||
|
package = gtkThemeFromScheme { scheme = inputs.nix-colors.colorschemes.${cfg.colorscheme}; };
|
||||||
|
};
|
||||||
|
iconTheme = {
|
||||||
|
name = "Papirus-Dark";
|
||||||
|
package = pkgs.papirus-icon-theme;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
BIN
modules/home/desktop/wallpapers/32j4hjkl4j4hkl.png
Normal file
After Width: | Height: | Size: 182 KiB |
BIN
modules/home/desktop/wallpapers/Bridge.jpg
Normal file
After Width: | Height: | Size: 177 KiB |
BIN
modules/home/desktop/wallpapers/astronaut.png
Normal file
After Width: | Height: | Size: 823 KiB |
BIN
modules/home/desktop/wallpapers/astronaut_ultra.png
Normal file
After Width: | Height: | Size: 759 KiB |
BIN
modules/home/desktop/wallpapers/babel.png
Normal file
After Width: | Height: | Size: 1.6 MiB |
BIN
modules/home/desktop/wallpapers/blockwavemoon.png
Normal file
After Width: | Height: | Size: 1024 KiB |
BIN
modules/home/desktop/wallpapers/cat_Japanese_Neon.png
Normal file
After Width: | Height: | Size: 2.8 MiB |
BIN
modules/home/desktop/wallpapers/cat_leaves.png
Normal file
After Width: | Height: | Size: 1.3 MiB |
BIN
modules/home/desktop/wallpapers/colorful-planets.jpg
Normal file
After Width: | Height: | Size: 1.6 MiB |
BIN
modules/home/desktop/wallpapers/finalizer.png
Normal file
After Width: | Height: | Size: 499 KiB |
BIN
modules/home/desktop/wallpapers/gruv-material.png
Normal file
After Width: | Height: | Size: 607 KiB |
BIN
modules/home/desktop/wallpapers/ign-0002.png
Normal file
After Width: | Height: | Size: 1.2 MiB |
BIN
modules/home/desktop/wallpapers/ign-0008.png
Normal file
After Width: | Height: | Size: 719 KiB |
BIN
modules/home/desktop/wallpapers/ign-0011.png
Normal file
After Width: | Height: | Size: 464 KiB |
BIN
modules/home/desktop/wallpapers/ign_car.png
Normal file
After Width: | Height: | Size: 831 KiB |
BIN
modules/home/desktop/wallpapers/ign_city.png
Normal file
After Width: | Height: | Size: 159 KiB |
BIN
modules/home/desktop/wallpapers/ign_cityRainOther.png
Normal file
After Width: | Height: | Size: 354 KiB |
BIN
modules/home/desktop/wallpapers/ign_herakles.png
Normal file
After Width: | Height: | Size: 861 KiB |
BIN
modules/home/desktop/wallpapers/ign_stuff.png
Normal file
After Width: | Height: | Size: 98 KiB |
BIN
modules/home/desktop/wallpapers/ign_unsplash16.png
Normal file
After Width: | Height: | Size: 1.0 MiB |
BIN
modules/home/desktop/wallpapers/koi2.png
Normal file
After Width: | Height: | Size: 267 KiB |
After Width: | Height: | Size: 239 KiB |
BIN
modules/home/desktop/wallpapers/nord_buildings.png
Normal file
After Width: | Height: | Size: 299 KiB |
BIN
modules/home/desktop/wallpapers/outer-space.png
Normal file
After Width: | Height: | Size: 10 MiB |
BIN
modules/home/desktop/wallpapers/platform.jpg
Normal file
After Width: | Height: | Size: 2.7 MiB |
BIN
modules/home/desktop/wallpapers/result2.png
Normal file
After Width: | Height: | Size: 126 KiB |
BIN
modules/home/desktop/wallpapers/result5.png
Normal file
After Width: | Height: | Size: 537 KiB |
BIN
modules/home/desktop/wallpapers/rolly.png
Normal file
After Width: | Height: | Size: 1.6 MiB |
BIN
modules/home/desktop/wallpapers/rose_pine_contourline.png
Normal file
After Width: | Height: | Size: 4.0 MiB |
BIN
modules/home/desktop/wallpapers/rose_pine_shape.png
Normal file
After Width: | Height: | Size: 261 KiB |
BIN
modules/home/desktop/wallpapers/shiny-colors.png
Normal file
After Width: | Height: | Size: 269 KiB |
BIN
modules/home/desktop/wallpapers/skullcat.png
Normal file
After Width: | Height: | Size: 1.2 MiB |
BIN
modules/home/desktop/wallpapers/space324dhsj.png
Normal file
After Width: | Height: | Size: 216 KiB |
BIN
modules/home/desktop/wallpapers/spiral.jpg
Normal file
After Width: | Height: | Size: 342 KiB |
BIN
modules/home/desktop/wallpapers/spooky_spill.jpg
Normal file
After Width: | Height: | Size: 412 KiB |
BIN
modules/home/desktop/wallpapers/wallpaper.jpg
Normal file
After Width: | Height: | Size: 595 KiB |
36
modules/home/direnv/default.nix
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
# Snowfall Lib provides a customized `lib` instance with access to your flake's library
|
||||||
|
# as well as the libraries available from your flake's inputs.
|
||||||
|
lib,
|
||||||
|
# An instance of `pkgs` with your overlays and packages applied is also available.
|
||||||
|
pkgs,
|
||||||
|
# You also have access to your flake's inputs.
|
||||||
|
inputs,
|
||||||
|
|
||||||
|
# Additional metadata is provided by Snowfall Lib.
|
||||||
|
system, # The system architecture for this host (eg. `x86_64-linux`).
|
||||||
|
target, # The Snowfall Lib target for this system (eg. `x86_64-iso`).
|
||||||
|
format, # A normalized name for the system target (eg. `iso`).
|
||||||
|
virtual, # A boolean to determine whether this system is a virtual target using nixos-generators.
|
||||||
|
systems, # An attribute map of your defined hosts.
|
||||||
|
|
||||||
|
# All other arguments come from the module system.
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.modules.shell.direnv;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.shell.direnv = {
|
||||||
|
enable = lib.mkOption { default = false; };
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
programs.direnv = {
|
||||||
|
enable = true;
|
||||||
|
nix-direnv.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
96
modules/home/emacs/default.nix
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
{
|
||||||
|
# Snowfall Lib provides a customized `lib` instance with access to your flake's library
|
||||||
|
# as well as the libraries available from your flake's inputs.
|
||||||
|
lib,
|
||||||
|
# An instance of `pkgs` with your overlays and packages applied is also available.
|
||||||
|
pkgs,
|
||||||
|
# You also have access to your flake's inputs.
|
||||||
|
inputs,
|
||||||
|
|
||||||
|
# Additional metadata is provided by Snowfall Lib.
|
||||||
|
system, # The system architecture for this host (eg. `x86_64-linux`).
|
||||||
|
target, # The Snowfall Lib target for this system (eg. `x86_64-iso`).
|
||||||
|
format, # A normalized name for the system target (eg. `iso`).
|
||||||
|
virtual, # A boolean to determine whether this system is a virtual target using nixos-generators.
|
||||||
|
systems, # An attribute map of your defined hosts.
|
||||||
|
|
||||||
|
# All other arguments come from the module system.
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.modules.emacs;
|
||||||
|
doomRepoUrl = "https://github.com/doomemacs/doomemacs";
|
||||||
|
configRepoUrl = "https://gitlab.julian-mutter.de/julian/emacs-config";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.emacs = {
|
||||||
|
enable = mkOption { default = false; };
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
home.sessionPath = [ "/home/julian/.config/emacs/bin" ];
|
||||||
|
|
||||||
|
home.packages =
|
||||||
|
with pkgs;
|
||||||
|
[
|
||||||
|
binutils # native-comp needs 'as', provided by this
|
||||||
|
|
||||||
|
## Doom dependencies
|
||||||
|
git
|
||||||
|
(ripgrep.override { withPCRE2 = true; })
|
||||||
|
|
||||||
|
## Optional dependencies
|
||||||
|
fd # faster projectile indexing
|
||||||
|
imagemagick # for image-dired
|
||||||
|
zstd # for undo-fu-session/undo-tree compression
|
||||||
|
|
||||||
|
## Module dependencies
|
||||||
|
(aspellWithDicts (
|
||||||
|
ds: with ds; [
|
||||||
|
en
|
||||||
|
en-computers
|
||||||
|
en-science
|
||||||
|
de
|
||||||
|
]
|
||||||
|
))
|
||||||
|
|
||||||
|
hunspell
|
||||||
|
hunspellDicts.de_DE
|
||||||
|
hunspellDicts.en_US
|
||||||
|
|
||||||
|
sqlite
|
||||||
|
|
||||||
|
# Code formatters for use with doom emacs
|
||||||
|
nixfmt-rfc-style # nix
|
||||||
|
nixd # nix lsp
|
||||||
|
dockfmt # docker
|
||||||
|
google-java-format # java
|
||||||
|
black # python
|
||||||
|
rustfmt # rust
|
||||||
|
shfmt
|
||||||
|
pyright
|
||||||
|
clang-tools # c++ lsp etc
|
||||||
|
ltex-ls # latex languagetool
|
||||||
|
|
||||||
|
graphviz
|
||||||
|
# Lsps for use with doom emacs
|
||||||
|
# neocmakelsp # cmake
|
||||||
|
|
||||||
|
emacs-all-the-icons-fonts
|
||||||
|
]
|
||||||
|
++ lib.optional config.modules.non-nixos.is-nixos emacs;
|
||||||
|
|
||||||
|
home.activation.installDoomEmacs = lib.home-manager.hm.dag.entryAfter [ "writeBoundary" ] ''
|
||||||
|
if [ ! -d "/home/julian/.config/emacs" ]; then
|
||||||
|
$DRY_RUN_CMD ${pkgs.git}/bin/git clone --depth=1 --single-branch "${doomRepoUrl}" "/home/julian/.config/emacs"
|
||||||
|
fi
|
||||||
|
if [ ! -d "/home/julian/.config/doom" ]; then
|
||||||
|
$DRY_RUN_CMD ${pkgs.git}/bin/git clone "${configRepoUrl}" "/home/julian/.config/doom"
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
80
modules/home/fish/default.nix
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
{
|
||||||
|
# Snowfall Lib provides a customized `lib` instance with access to your flake's library
|
||||||
|
# as well as the libraries available from your flake's inputs.
|
||||||
|
lib,
|
||||||
|
# An instance of `pkgs` with your overlays and packages applied is also available.
|
||||||
|
pkgs,
|
||||||
|
# You also have access to your flake's inputs.
|
||||||
|
inputs,
|
||||||
|
|
||||||
|
# Additional metadata is provided by Snowfall Lib.
|
||||||
|
system, # The system architecture for this host (eg. `x86_64-linux`).
|
||||||
|
target, # The Snowfall Lib target for this system (eg. `x86_64-iso`).
|
||||||
|
format, # A normalized name for the system target (eg. `iso`).
|
||||||
|
virtual, # A boolean to determine whether this system is a virtual target using nixos-generators.
|
||||||
|
systems, # An attribute map of your defined hosts.
|
||||||
|
|
||||||
|
# All other arguments come from the module system.
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.modules.shell.fish;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.shell.fish = {
|
||||||
|
enable = mkOption { default = false; };
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
|
||||||
|
home.file = {
|
||||||
|
".config/starship.toml".source = ./starship.toml;
|
||||||
|
".config/fish/conf.d/last-working-dir.fish".source = ./last-working-dir.fish;
|
||||||
|
};
|
||||||
|
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
starship
|
||||||
|
lazygit
|
||||||
|
];
|
||||||
|
|
||||||
|
home.shellAliases = {
|
||||||
|
g = "lazygit";
|
||||||
|
ls = "ls --color";
|
||||||
|
la = "ls -Alh --color";
|
||||||
|
grep = "grep --color";
|
||||||
|
conf = "edit-config";
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.starship = {
|
||||||
|
enable = true;
|
||||||
|
enableFishIntegration = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.fish = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
interactiveShellInit = "set fish_greeting"; # Disable default greeting
|
||||||
|
|
||||||
|
functions = {
|
||||||
|
mkcd = ''
|
||||||
|
mkdir $argv
|
||||||
|
cd $argv
|
||||||
|
'';
|
||||||
|
run = ''
|
||||||
|
nix run nixpkgs#"$argv[1]" -- $argv[2..-1]
|
||||||
|
'';
|
||||||
|
shell = ''
|
||||||
|
set args
|
||||||
|
for arg in $argv
|
||||||
|
set args $args nixpkgs#$arg
|
||||||
|
end
|
||||||
|
nix shell $args
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
7
modules/home/fish/last-working-dir.fish
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
function lwd
|
||||||
|
cd $LAST_WORKING_DIR
|
||||||
|
end
|
||||||
|
|
||||||
|
function __onpwd --on-variable PWD
|
||||||
|
set --universal LAST_WORKING_DIR $PWD
|
||||||
|
end
|
14
modules/home/fish/starship.toml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# newline between shell prompts
|
||||||
|
add_newline = false
|
||||||
|
#format = "$all$directory$character"
|
||||||
|
|
||||||
|
[line_break]
|
||||||
|
disabled = true
|
||||||
|
|
||||||
|
[directory]
|
||||||
|
fish_style_pwd_dir_length = 1
|
||||||
|
|
||||||
|
[status]
|
||||||
|
map_symbol = true
|
||||||
|
format = '[$symbol$status $common_meaning$signal_name$maybe_int]($style) '
|
||||||
|
disabled = false
|
48
modules/home/fonts/default.nix
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
{
|
||||||
|
# Snowfall Lib provides a customized `lib` instance with access to your flake's library
|
||||||
|
# as well as the libraries available from your flake's inputs.
|
||||||
|
lib,
|
||||||
|
# An instance of `pkgs` with your overlays and packages applied is also available.
|
||||||
|
pkgs,
|
||||||
|
# You also have access to your flake's inputs.
|
||||||
|
inputs,
|
||||||
|
|
||||||
|
# Additional metadata is provided by Snowfall Lib.
|
||||||
|
system, # The system architecture for this host (eg. `x86_64-linux`).
|
||||||
|
target, # The Snowfall Lib target for this system (eg. `x86_64-iso`).
|
||||||
|
format, # A normalized name for the system target (eg. `iso`).
|
||||||
|
virtual, # A boolean to determine whether this system is a virtual target using nixos-generators.
|
||||||
|
systems, # An attribute map of your defined hosts.
|
||||||
|
|
||||||
|
# All other arguments come from the module system.
|
||||||
|
config,
|
||||||
|
host,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.modules.fonts;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.fonts = {
|
||||||
|
enable = mkOption { default = false; };
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
fonts.fontconfig.enable = true; # required to autoload fonts from packages
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
(nerdfonts.override { fonts = [ "FiraCode" ]; })
|
||||||
|
font-awesome
|
||||||
|
dejavu_fonts
|
||||||
|
noto-fonts
|
||||||
|
noto-fonts-cjk-sans
|
||||||
|
noto-fonts-emoji
|
||||||
|
liberation_ttf
|
||||||
|
fira-code
|
||||||
|
fira-code-symbols
|
||||||
|
source-code-pro
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
41
modules/home/gammastep/default.nix
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
# Snowfall Lib provides a customized `lib` instance with access to your flake's library
|
||||||
|
# as well as the libraries available from your flake's inputs.
|
||||||
|
lib,
|
||||||
|
# An instance of `pkgs` with your overlays and packages applied is also available.
|
||||||
|
pkgs,
|
||||||
|
# You also have access to your flake's inputs.
|
||||||
|
inputs,
|
||||||
|
|
||||||
|
# Additional metadata is provided by Snowfall Lib.
|
||||||
|
system, # The system architecture for this host (eg. `x86_64-linux`).
|
||||||
|
target, # The Snowfall Lib target for this system (eg. `x86_64-iso`).
|
||||||
|
format, # A normalized name for the system target (eg. `iso`).
|
||||||
|
virtual, # A boolean to determine whether this system is a virtual target using nixos-generators.
|
||||||
|
systems, # An attribute map of your defined hosts.
|
||||||
|
|
||||||
|
# All other arguments come from the module system.
|
||||||
|
config,
|
||||||
|
host,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.modules.gammastep;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.gammastep = {
|
||||||
|
enable = mkOption { default = false; };
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
services.gammastep = {
|
||||||
|
enable = true;
|
||||||
|
latitude = 47.92;
|
||||||
|
longitude = 10.12;
|
||||||
|
provider = "manual";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
311
modules/home/hyprland/default.nix
Normal file
@ -0,0 +1,311 @@
|
|||||||
|
{
|
||||||
|
# Snowfall Lib provides a customized `lib` instance with access to your flake's library
|
||||||
|
# as well as the libraries available from your flake's inputs.
|
||||||
|
lib,
|
||||||
|
# An instance of `pkgs` with your overlays and packages applied is also available.
|
||||||
|
pkgs,
|
||||||
|
# You also have access to your flake's inputs.
|
||||||
|
inputs,
|
||||||
|
|
||||||
|
# Additional metadata is provided by Snowfall Lib.
|
||||||
|
namespace, # The namespace used for your flake, defaulting to "internal" if not set.
|
||||||
|
system, # The system architecture for this host (eg. `x86_64-linux`).
|
||||||
|
target, # The Snowfall Lib target for this system (eg. `x86_64-iso`).
|
||||||
|
format, # A normalized name for the system target (eg. `iso`).
|
||||||
|
virtual, # A boolean to determine whether this system is a virtual target using nixos-generators.
|
||||||
|
systems, # An attribute map of your defined hosts.
|
||||||
|
|
||||||
|
# All other arguments come from the module system.
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.modules.hyprland;
|
||||||
|
inherit (inputs.nix-colors.colorschemes.${builtins.toString config.modules.desktop.colorscheme})
|
||||||
|
palette
|
||||||
|
;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.hyprland = with lib.frajul; {
|
||||||
|
enable = mkBoolOpt false "Enable or disable the hyprland window manager.";
|
||||||
|
};
|
||||||
|
|
||||||
|
imports = [ inputs.hyprland.homeManagerModules.default ];
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
modules.desktop.addons = {
|
||||||
|
waybar.enable = true;
|
||||||
|
wofi.enable = true;
|
||||||
|
mako.enable = true;
|
||||||
|
hyprlock.enable = true;
|
||||||
|
wlogout.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
# hyprpicker # TODO
|
||||||
|
# hyprcursor # TODO
|
||||||
|
brightnessctl
|
||||||
|
# grimblast
|
||||||
|
frajul.hyprshot-gui
|
||||||
|
];
|
||||||
|
|
||||||
|
# services.hypridle = {
|
||||||
|
# enable = true;
|
||||||
|
# settings = {
|
||||||
|
# general = {
|
||||||
|
# after_sleep_cmd = "hyprctl dispatch dpms on";
|
||||||
|
# ignore_dbus_inhibit = false;
|
||||||
|
# lock_cmd = "hyprlock";
|
||||||
|
# };
|
||||||
|
|
||||||
|
# listener = [
|
||||||
|
# {
|
||||||
|
# timeout = 300; # 5min
|
||||||
|
# on-timeout = "brightnessctl -s set 10"; # set monitor backlight to minimum, avoid 0 on OLED monitor.
|
||||||
|
# on-resume = "brightnessctl -r"; # monitor backlight restore.
|
||||||
|
# }
|
||||||
|
|
||||||
|
# {
|
||||||
|
# timeout = 360; # 6min
|
||||||
|
# on-timeout = "hyprlock"; # lock screen when timeout has passed
|
||||||
|
# }
|
||||||
|
|
||||||
|
# {
|
||||||
|
# timeout = 600; # 10min
|
||||||
|
# on-timeout = "hyprctl dispatch dpms off"; # screen off when timeout has passed
|
||||||
|
# on-resume = "hyprctl dispatch dpms on"; # screen on when activity is detected after timeout has fired.
|
||||||
|
# }
|
||||||
|
# ];
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
|
||||||
|
# services.hypridle.enable = true; # can be configured
|
||||||
|
|
||||||
|
services.network-manager-applet.enable = true;
|
||||||
|
|
||||||
|
wayland.windowManager.hyprland = {
|
||||||
|
# Whether to enable Hyprland wayland compositor
|
||||||
|
enable = true;
|
||||||
|
package = inputs.hyprland.packages."${pkgs.system}".hyprland; # does only work with nixos-unstable
|
||||||
|
|
||||||
|
# The hyprland package to use (simplifies use of plugins)
|
||||||
|
# package = inputs.hyprland.packages.${pkgs.system}.hyprland;
|
||||||
|
# Whether to enable XWayland
|
||||||
|
xwayland.enable = true;
|
||||||
|
|
||||||
|
# Optional
|
||||||
|
# Whether to enable hyprland-session.target on hyprland startup
|
||||||
|
systemd.enable = true;
|
||||||
|
# Make PATH available to systemd services
|
||||||
|
systemd.variables = [ "--all" ];
|
||||||
|
|
||||||
|
plugins = [
|
||||||
|
inputs.hyprland-plugins.packages.${pkgs.system}.hyprbars # does only work with nixos-unstable
|
||||||
|
# hyprlandPlugins.hyprbars
|
||||||
|
];
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
"$mod" = "SUPER";
|
||||||
|
|
||||||
|
# Monitors
|
||||||
|
monitor = ",preferred,auto,auto";
|
||||||
|
|
||||||
|
# Autostart
|
||||||
|
exec-once = [ "firefox" ];
|
||||||
|
|
||||||
|
# Look and Feel
|
||||||
|
general = {
|
||||||
|
gaps_in = 5;
|
||||||
|
gaps_out = 5;
|
||||||
|
|
||||||
|
layout = "dwindle";
|
||||||
|
|
||||||
|
"col.active_border" = "0xff${palette.base0C} 0xff${palette.base0D} 270deg";
|
||||||
|
"col.inactive_border" = "0xff${palette.base00}";
|
||||||
|
};
|
||||||
|
|
||||||
|
decoration = {
|
||||||
|
# power saving
|
||||||
|
blur.enabled = false;
|
||||||
|
# power saving
|
||||||
|
drop_shadow = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Dwindle layout
|
||||||
|
dwindle = {
|
||||||
|
pseudotile = true; # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
|
||||||
|
preserve_split = true; # You probably want this
|
||||||
|
no_gaps_when_only = 2; # with border
|
||||||
|
};
|
||||||
|
|
||||||
|
# Master layout
|
||||||
|
master = {
|
||||||
|
new_status = "slave";
|
||||||
|
no_gaps_when_only = 2; # with border
|
||||||
|
mfact = 0.5; # Do not make master bigger
|
||||||
|
};
|
||||||
|
|
||||||
|
misc = {
|
||||||
|
# disable auto polling for config file changes
|
||||||
|
disable_autoreload = true;
|
||||||
|
|
||||||
|
force_default_wallpaper = 0;
|
||||||
|
|
||||||
|
# we do, in fact, want direct scanout
|
||||||
|
# no_direct_scanout = false;
|
||||||
|
vfr = true; # power saving
|
||||||
|
};
|
||||||
|
|
||||||
|
# Input
|
||||||
|
input = {
|
||||||
|
kb_layout = "de";
|
||||||
|
natural_scroll = false;
|
||||||
|
follow_mouse = 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Window rules
|
||||||
|
windowrulev2 = [
|
||||||
|
"suppressevent maximize, class:.*"
|
||||||
|
"workspace 1, class:firefox"
|
||||||
|
"workspace 9, class:nheko"
|
||||||
|
"workspace 9, class:org.telegram.desktop"
|
||||||
|
"workspace 10, class:thunderbird"
|
||||||
|
"float, class:qalculate-gtk"
|
||||||
|
"tile, class:MATLAB, title:MATLAB"
|
||||||
|
];
|
||||||
|
|
||||||
|
# Workspace rules
|
||||||
|
workspace = [
|
||||||
|
"1, monitor:HDMI-A-1"
|
||||||
|
"2, monitor:HDMI-A-1"
|
||||||
|
"3, monitor:HDMI-A-1"
|
||||||
|
"4, monitor:HDMI-A-1"
|
||||||
|
"5, monitor:HDMI-A-1"
|
||||||
|
"6, monitor:eDP-1"
|
||||||
|
"7, monitor:eDP-1"
|
||||||
|
"8, monitor:eDP-1"
|
||||||
|
"9, monitor:eDP-1"
|
||||||
|
"10, monitor:eDP-1"
|
||||||
|
];
|
||||||
|
|
||||||
|
# Mouse binds
|
||||||
|
bindm = [
|
||||||
|
"$mod, mouse:272, movewindow" # leftclick
|
||||||
|
"$mod, mouse:273, resizewindow" # rightclick
|
||||||
|
];
|
||||||
|
|
||||||
|
# binds
|
||||||
|
bind = [
|
||||||
|
# compositor commands
|
||||||
|
"$mod, Space, focuswindow, floating"
|
||||||
|
"$mod SHIFT, Space, togglefloating,"
|
||||||
|
"$mod, F, fullscreen,"
|
||||||
|
"$mod, X, killactive,"
|
||||||
|
|
||||||
|
"$mod, O, togglesplit," # dwindle
|
||||||
|
|
||||||
|
# opening applications
|
||||||
|
"$mod, D, exec, wofi --show drun,run"
|
||||||
|
"$mod, E, exec, pcmanfm"
|
||||||
|
"$mod, Return, exec, kitty"
|
||||||
|
"$mod, B, exec, firefox"
|
||||||
|
"$mod, C, exec, qalculate-gtk"
|
||||||
|
|
||||||
|
# other commands
|
||||||
|
"$mod SHIFT, E, exec, wlogout -p layer-shell"
|
||||||
|
"$mod, Escape, exec, wlogout -p layer-shell"
|
||||||
|
"$mod, TAB, exec, hyprlock"
|
||||||
|
"$mod SHIFT, R, exec, hyprctl reload"
|
||||||
|
", Print, exec, hyprshot-gui"
|
||||||
|
|
||||||
|
# "$mod SHIFT, E, exec, pkill Hyprland"
|
||||||
|
# "$mod, G, togglegroup,"
|
||||||
|
# "$mod SHIFT, N, changegroupactive, f"
|
||||||
|
# "$mod SHIFT, P, changegroupactive, b"
|
||||||
|
# "$mod ALT, ,resizeactive,"
|
||||||
|
|
||||||
|
# media keys
|
||||||
|
", XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+"
|
||||||
|
", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"
|
||||||
|
", XF86AudioPlay, exec, playerctl play-pause"
|
||||||
|
", XF86AudioPause, exec, playerctl pause"
|
||||||
|
", XF86AudioStop, exec, playerctl stop"
|
||||||
|
", XF86AudioNext, exec, playerctl next"
|
||||||
|
", XF86AudioPrev, exec, playerctl previous"
|
||||||
|
", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
|
||||||
|
", XF86MonBrightnessUp, exec, brightnessctl --class backlight set 5%+"
|
||||||
|
", XF86MonBrightnessDown, exec, brightnessctl --class backlight set 5%-"
|
||||||
|
|
||||||
|
# move focus
|
||||||
|
"$mod, left, movefocus, l"
|
||||||
|
"$mod, H, movefocus, l"
|
||||||
|
"$mod, right, movefocus, r"
|
||||||
|
"$mod, L, movefocus, r"
|
||||||
|
"$mod, up, movefocus, u"
|
||||||
|
"$mod, K, movefocus, u"
|
||||||
|
"$mod, down, movefocus, d"
|
||||||
|
"$mod, J, movefocus, d"
|
||||||
|
|
||||||
|
# move window
|
||||||
|
"$mod SHIFT, left, movewindow, l"
|
||||||
|
"$mod SHIFT, H, movewindow, l"
|
||||||
|
"$mod SHIFT, right, movewindow, r"
|
||||||
|
"$mod SHIFT, L, movewindow, r"
|
||||||
|
"$mod SHIFT, up, movewindow, u"
|
||||||
|
"$mod SHIFT, K, movewindow, u"
|
||||||
|
"$mod SHIFT, down, movewindow, d"
|
||||||
|
"$mod SHIFT, J, movewindow, d"
|
||||||
|
|
||||||
|
# Switch workspaces with mainMod + [0-9]
|
||||||
|
"$mod, 1, workspace, 1"
|
||||||
|
"$mod, 2, workspace, 2"
|
||||||
|
"$mod, 3, workspace, 3"
|
||||||
|
"$mod, 4, workspace, 4"
|
||||||
|
"$mod, 5, workspace, 5"
|
||||||
|
"$mod, 6, workspace, 6"
|
||||||
|
"$mod, 7, workspace, 7"
|
||||||
|
"$mod, 8, workspace, 8"
|
||||||
|
"$mod, 9, workspace, 9"
|
||||||
|
"$mod, 0, workspace, 10"
|
||||||
|
|
||||||
|
# Move active window to a workspace with mainMod + SHIFT + [0-9]
|
||||||
|
"$mod SHIFT, 1, movetoworkspace, 1"
|
||||||
|
"$mod SHIFT, 2, movetoworkspace, 2"
|
||||||
|
"$mod SHIFT, 3, movetoworkspace, 3"
|
||||||
|
"$mod SHIFT, 4, movetoworkspace, 4"
|
||||||
|
"$mod SHIFT, 5, movetoworkspace, 5"
|
||||||
|
"$mod SHIFT, 6, movetoworkspace, 6"
|
||||||
|
"$mod SHIFT, 7, movetoworkspace, 7"
|
||||||
|
"$mod SHIFT, 8, movetoworkspace, 8"
|
||||||
|
"$mod SHIFT, 9, movetoworkspace, 9"
|
||||||
|
"$mod SHIFT, 0, movetoworkspace, 10"
|
||||||
|
|
||||||
|
# Move active window to a workspace without following with mainMod + CTRL + [0-9]
|
||||||
|
"$mod CTRL, 1, movetoworkspacesilent, 1"
|
||||||
|
"$mod CTRL, 2, movetoworkspacesilent, 2"
|
||||||
|
"$mod CTRL, 3, movetoworkspacesilent, 3"
|
||||||
|
"$mod CTRL, 4, movetoworkspacesilent, 4"
|
||||||
|
"$mod CTRL, 5, movetoworkspacesilent, 5"
|
||||||
|
"$mod CTRL, 6, movetoworkspacesilent, 6"
|
||||||
|
"$mod CTRL, 7, movetoworkspacesilent, 7"
|
||||||
|
"$mod CTRL, 8, movetoworkspacesilent, 8"
|
||||||
|
"$mod CTRL, 9, movetoworkspacesilent, 9"
|
||||||
|
"$mod CTRL, 0, movetoworkspacesilent, 10"
|
||||||
|
];
|
||||||
|
|
||||||
|
plugin = {
|
||||||
|
hyprbars = {
|
||||||
|
bar_text_size = 10;
|
||||||
|
bar_height = 16;
|
||||||
|
bar_text_font = "Ubuntu Nerd Font";
|
||||||
|
bar_precedence_over_border = true;
|
||||||
|
bar_color = "rgb(${palette.base01})";
|
||||||
|
|
||||||
|
hyprbars-button = [ "rgb(${palette.base03}), 14, , hyprctl dispatch killactive" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
57
modules/home/hyprland/hyprlock/default.nix
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
{
|
||||||
|
options,
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
cfg = config.modules.desktop.addons.hyprlock;
|
||||||
|
inherit (inputs.nix-colors.colorschemes.${builtins.toString config.modules.desktop.colorscheme})
|
||||||
|
palette
|
||||||
|
;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.desktop.addons.hyprlock =
|
||||||
|
with lib.frajul;
|
||||||
|
with lib.types;
|
||||||
|
{
|
||||||
|
enable = mkBoolOpt false "Enable or disable the hyprlock screen locker.";
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
programs.hyprlock.enable = true;
|
||||||
|
programs.hyprlock.settings = {
|
||||||
|
general = {
|
||||||
|
disable_loading_bar = true;
|
||||||
|
hide_cursor = true;
|
||||||
|
ignore_empty_input = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
background = [
|
||||||
|
{
|
||||||
|
color = "#${palette.base00}";
|
||||||
|
# path = "screenshot";
|
||||||
|
# blur_passes = 3;
|
||||||
|
# blur_size = 8;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
input-field = [
|
||||||
|
{
|
||||||
|
size = "200, 50";
|
||||||
|
position = "0, -80";
|
||||||
|
monitor = "";
|
||||||
|
dots_center = true;
|
||||||
|
fade_on_empty = false;
|
||||||
|
font_color = "#${palette.base0B}";
|
||||||
|
inner_color = "#${palette.base01}";
|
||||||
|
outer_color = "#${palette.base05}";
|
||||||
|
outline_thickness = 5;
|
||||||
|
placeholder_text = "Password...";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
39
modules/home/hyprland/mako/default.nix
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
options,
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
cfg = config.modules.desktop.addons.mako;
|
||||||
|
inherit (inputs.nix-colors.colorschemes.${builtins.toString config.modules.desktop.colorscheme})
|
||||||
|
palette
|
||||||
|
;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.desktop.addons.mako =
|
||||||
|
with lib.frajul;
|
||||||
|
with lib.types;
|
||||||
|
{
|
||||||
|
enable = mkBoolOpt false "Enable or disable mako";
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
home.packages = with pkgs; [ libnotify ];
|
||||||
|
|
||||||
|
services.mako = {
|
||||||
|
enable = true;
|
||||||
|
defaultTimeout = 5000; # milliseconds, can be overwritten by notification sender
|
||||||
|
backgroundColor = "#${palette.base00}";
|
||||||
|
textColor = "#${palette.base05}";
|
||||||
|
borderColor = "#${palette.base0D}";
|
||||||
|
progressColor = "over #${palette.base02}";
|
||||||
|
extraConfig = ''
|
||||||
|
[urgency=high]
|
||||||
|
border-color=#${palette.base09}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
96
modules/home/hyprland/waybar/config.json
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
{
|
||||||
|
"layer": "top",
|
||||||
|
"position": "bottom",
|
||||||
|
"mode": "dock",
|
||||||
|
"exclusive": true,
|
||||||
|
"passtrough": true,
|
||||||
|
"height": 16,
|
||||||
|
|
||||||
|
"modules-left": [
|
||||||
|
"hyprland/workspaces"
|
||||||
|
],
|
||||||
|
|
||||||
|
"modules-center": [],
|
||||||
|
|
||||||
|
"modules-right": ["idle_inhibitor", "disk", "cpu", "memory", "pulseaudio", "battery", "clock", "tray"],
|
||||||
|
|
||||||
|
"hyprland/workspaces": {
|
||||||
|
"on-scroll-up": "hyprctl dispatch workspace m+1",
|
||||||
|
"on-scroll-down": "hyprctl dispatch workspace m-1",
|
||||||
|
"all-outputs": false,
|
||||||
|
"on-click": "activate",
|
||||||
|
"format": "{icon}",
|
||||||
|
"format-icons": {
|
||||||
|
"1": "1",
|
||||||
|
"2": "2",
|
||||||
|
"3": "3",
|
||||||
|
"4": "4",
|
||||||
|
"5": "5",
|
||||||
|
"6": "6",
|
||||||
|
"7": "7",
|
||||||
|
"8": "8",
|
||||||
|
"9": "9",
|
||||||
|
"10": "10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"idle_inhibitor": {
|
||||||
|
"format": "{icon}",
|
||||||
|
"format-icons": {
|
||||||
|
"activated": "",
|
||||||
|
"deactivated": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"disk": {
|
||||||
|
"interval": 30,
|
||||||
|
"format": "Free: {percentage_free}% ({free})",
|
||||||
|
"path": "/",
|
||||||
|
"unit": "GB"
|
||||||
|
},
|
||||||
|
|
||||||
|
"cpu": {
|
||||||
|
"format": " {usage}%"
|
||||||
|
},
|
||||||
|
|
||||||
|
"memory": {
|
||||||
|
"format": " {}%"
|
||||||
|
},
|
||||||
|
|
||||||
|
"pulseaudio": {
|
||||||
|
"format": "{icon} {volume}%",
|
||||||
|
"format-muted": "<big></big>",
|
||||||
|
"format-icons": {
|
||||||
|
"headphone": "",
|
||||||
|
"default": ["", "", ""]
|
||||||
|
},
|
||||||
|
"scroll-step": 5.0,
|
||||||
|
"max-volume": 200,
|
||||||
|
"on-click": "pulseaudio-popup",
|
||||||
|
"on-click-right": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
|
||||||
|
},
|
||||||
|
|
||||||
|
"battery": {
|
||||||
|
"states": {
|
||||||
|
"warning": 30,
|
||||||
|
"critical": 15
|
||||||
|
},
|
||||||
|
"format": "{icon} {capacity}% ({time})",
|
||||||
|
"format-charging": " {capacity}% ({time})",
|
||||||
|
"format-plugged": " {capacity}% ({time})",
|
||||||
|
"format-full": "{icon} ",
|
||||||
|
"format-icons": ["", "", "", "", ""]
|
||||||
|
},
|
||||||
|
|
||||||
|
"clock": {
|
||||||
|
"tooltip-format": "{calendar}",
|
||||||
|
"format": "{:%a %d.%m %H:%M:%S}",
|
||||||
|
"interval": 1
|
||||||
|
},
|
||||||
|
|
||||||
|
"tray": {
|
||||||
|
"icon-size": 20,
|
||||||
|
"tooltip": false,
|
||||||
|
"spacing": 10
|
||||||
|
}
|
||||||
|
}
|
49
modules/home/hyprland/waybar/default.nix
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
{
|
||||||
|
options,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with lib;
|
||||||
|
with lib.frajul;
|
||||||
|
let
|
||||||
|
cfg = config.modules.desktop.addons.waybar;
|
||||||
|
inherit (inputs.nix-colors.colorschemes.${builtins.toString config.modules.desktop.colorscheme})
|
||||||
|
palette
|
||||||
|
;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.desktop.addons.waybar = with types; {
|
||||||
|
enable = mkBoolOpt false "Enable or disable waybar";
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
programs.waybar = {
|
||||||
|
enable = true;
|
||||||
|
systemd.enable = true;
|
||||||
|
settings.mainBar = builtins.fromJSON (builtins.readFile ./config.json);
|
||||||
|
};
|
||||||
|
|
||||||
|
xdg.configFile."waybar/style.css".source = ./style.css;
|
||||||
|
xdg.configFile."waybar/theme.css".text = ''
|
||||||
|
/*
|
||||||
|
bg - background
|
||||||
|
fg - foreground
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Main Colors */
|
||||||
|
@define-color background #${palette.base00};
|
||||||
|
@define-color foreground #${palette.base05};
|
||||||
|
|
||||||
|
/* Workspace Button Colors */
|
||||||
|
@define-color hover-bg #${palette.base01};
|
||||||
|
@define-color hover-fg #${palette.base05};
|
||||||
|
@define-color active-bg #${palette.base02};
|
||||||
|
@define-color active-fg #${palette.base0A};
|
||||||
|
@define-color urgent-bg #${palette.base08};
|
||||||
|
@define-color urgent-fg #${palette.base00};
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
94
modules/home/hyprland/waybar/style.css
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
* {
|
||||||
|
/* `otf-font-awesome` is required to be installed for icons */
|
||||||
|
font-family: JetBrainsMono Nerd Font;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This imports the base16 colors */
|
||||||
|
@import "theme.css";
|
||||||
|
|
||||||
|
/* Main Background */
|
||||||
|
window#waybar { background: @background; }
|
||||||
|
|
||||||
|
/* Tooltip Styling */
|
||||||
|
tooltip {
|
||||||
|
color: @foreground;
|
||||||
|
background: @background;
|
||||||
|
border: solid;
|
||||||
|
border-width: 1.5px;
|
||||||
|
border-radius: 7px;
|
||||||
|
border-color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Workspace Button */
|
||||||
|
#workspaces button {
|
||||||
|
color: @foreground;
|
||||||
|
border-radius: 5px;
|
||||||
|
box-shadow: none;
|
||||||
|
margin-top: 2px;
|
||||||
|
margin-bottom: 2px;
|
||||||
|
margin-left: 0px;
|
||||||
|
margin-right: 0px;
|
||||||
|
padding: 0px;
|
||||||
|
padding-right: 2px;
|
||||||
|
padding-left: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Opened workspaces (also on other screen) */
|
||||||
|
#workspaces button.visible{
|
||||||
|
color: @active-fg;
|
||||||
|
background: @hover-bg;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Active Workspace Button */
|
||||||
|
#workspaces button.active {
|
||||||
|
color: @active-fg;
|
||||||
|
background: @active-bg;
|
||||||
|
box-shadow: 0px 0px 2px 1px rgba(0, 0, 0, 1);
|
||||||
|
margin-right: 2px;
|
||||||
|
margin-left: 2px;
|
||||||
|
padding-right: 6px;
|
||||||
|
padding-left: 6px;
|
||||||
|
transition: all 0.4s cubic-bezier(.55,-0.68,.48,1.682);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hover Effect for Workspace Buttons */
|
||||||
|
#workspaces button.inactive:hover {
|
||||||
|
color: @hover-fg;
|
||||||
|
background: @hover-bg;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Urgent Workspace Buttons */
|
||||||
|
#workspaces button.urgent {
|
||||||
|
color: @urgent-fg;
|
||||||
|
background: @urgent-bg;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* General Module Styling */
|
||||||
|
#idle_inhibitor,
|
||||||
|
#disk,
|
||||||
|
#cpu,
|
||||||
|
#memory,
|
||||||
|
#pulseaudio,
|
||||||
|
#battery,
|
||||||
|
#clock,
|
||||||
|
#tray {
|
||||||
|
color: @foreground;
|
||||||
|
padding: 0 10px;
|
||||||
|
margin-top: 0px;
|
||||||
|
margin-bottom: 0px;
|
||||||
|
margin-right: 2px;
|
||||||
|
margin-left: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* #battery.warning { */
|
||||||
|
/* color: #${palette.base08}; */
|
||||||
|
/* } */
|
||||||
|
|
||||||
|
/* #pulseaudio.muted { */
|
||||||
|
/* color: #${palette.base08}; */
|
||||||
|
/* padding-right: 16px; */
|
||||||
|
/* } */
|
50
modules/home/hyprland/wlogout/default.nix
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
{
|
||||||
|
options,
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
cfg = config.modules.desktop.addons.wlogout;
|
||||||
|
inherit (inputs.nix-colors.colorschemes.${builtins.toString config.modules.desktop.colorscheme})
|
||||||
|
palette
|
||||||
|
;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.desktop.addons.wlogout =
|
||||||
|
with lib.frajul;
|
||||||
|
with lib.types;
|
||||||
|
{
|
||||||
|
enable = mkBoolOpt false "Enable or disable wlogout.";
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
home.packages = with pkgs; [ wlogout ];
|
||||||
|
|
||||||
|
# xdg.configFile."wlogout/style.css".text = ''
|
||||||
|
# * {
|
||||||
|
# all: unset;
|
||||||
|
# font-family: JetBrains Mono Nerd Font;
|
||||||
|
# }
|
||||||
|
|
||||||
|
# window {
|
||||||
|
# background-color: #${palette.base00};
|
||||||
|
# }
|
||||||
|
|
||||||
|
# button {
|
||||||
|
# color: #${palette.base01};
|
||||||
|
# font-size: 64px;
|
||||||
|
# background-color: rgba(0,0,0,0);
|
||||||
|
# outline-style: none;
|
||||||
|
# margin: 5px;
|
||||||
|
# }
|
||||||
|
|
||||||
|
# button:focus, button:active, button:hover {
|
||||||
|
# color: #${palette.base0D};
|
||||||
|
# transition: ease 0.4s;
|
||||||
|
# }
|
||||||
|
# '';
|
||||||
|
};
|
||||||
|
}
|
15
modules/home/hyprland/wofi/config
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
width=900
|
||||||
|
height=600
|
||||||
|
location=center
|
||||||
|
show=drun,run
|
||||||
|
prompt=Search...
|
||||||
|
filter_rate=100
|
||||||
|
allow_markup=true
|
||||||
|
no_actions=true
|
||||||
|
halign=fill
|
||||||
|
orientation=vertical
|
||||||
|
content_halign=fill
|
||||||
|
insensitive=true
|
||||||
|
allow_images=true
|
||||||
|
image_size=35
|
||||||
|
gtk_dark=true
|
97
modules/home/hyprland/wofi/default.nix
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
{
|
||||||
|
options,
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
cfg = config.modules.desktop.addons.wofi;
|
||||||
|
inherit (inputs.nix-colors.colorschemes.${builtins.toString config.modules.desktop.colorscheme})
|
||||||
|
palette
|
||||||
|
;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.desktop.addons.wofi =
|
||||||
|
with lib.frajul;
|
||||||
|
with lib.types;
|
||||||
|
{
|
||||||
|
enable = mkBoolOpt false "Enable or disable the wofi run launcher.";
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
home.packages = with pkgs; [ wofi ];
|
||||||
|
|
||||||
|
xdg.configFile."wofi/config".source = ./config;
|
||||||
|
xdg.configFile."wofi/style.css".text = ''
|
||||||
|
window {
|
||||||
|
margin: 5px;
|
||||||
|
border: 5px solid #181926;
|
||||||
|
background-color: #${palette.base00};
|
||||||
|
border-radius: 15px;
|
||||||
|
font-family: "JetBrainsMono";
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#input {
|
||||||
|
all: unset;
|
||||||
|
min-height: 36px;
|
||||||
|
padding: 4px 10px;
|
||||||
|
margin: 4px;
|
||||||
|
border: none;
|
||||||
|
color: #${palette.base05};
|
||||||
|
font-weight: bold;
|
||||||
|
background-color: #${palette.base01};
|
||||||
|
outline: none;
|
||||||
|
border-radius: 15px;
|
||||||
|
margin: 10px;
|
||||||
|
margin-bottom: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#inner-box {
|
||||||
|
margin: 4px;
|
||||||
|
padding: 10px;
|
||||||
|
font-weight: bold;
|
||||||
|
border-radius: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#outer-box {
|
||||||
|
margin: 0px;
|
||||||
|
padding: 3px;
|
||||||
|
border: none;
|
||||||
|
border-radius: 15px;
|
||||||
|
border: 5px solid #${palette.base01};
|
||||||
|
}
|
||||||
|
|
||||||
|
#scroll {
|
||||||
|
margin-top: 5px;
|
||||||
|
border: none;
|
||||||
|
border-radius: 15px;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#text:selected {
|
||||||
|
color: #${palette.base01};
|
||||||
|
margin: 0px 0px;
|
||||||
|
border: none;
|
||||||
|
border-radius: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#entry {
|
||||||
|
margin: 0px 0px;
|
||||||
|
border: none;
|
||||||
|
border-radius: 15px;
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
#entry:selected {
|
||||||
|
margin: 0px 0px;
|
||||||
|
border: none;
|
||||||
|
border-radius: 15px;
|
||||||
|
background: #${palette.base0D};
|
||||||
|
background-size: 400% 400%;
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
79
modules/home/i3/default.nix
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
{
|
||||||
|
# Snowfall Lib provides a customized `lib` instance with access to your flake's library
|
||||||
|
# as well as the libraries available from your flake's inputs.
|
||||||
|
lib,
|
||||||
|
# An instance of `pkgs` with your overlays and packages applied is also available.
|
||||||
|
pkgs,
|
||||||
|
# You also have access to your flake's inputs.
|
||||||
|
inputs,
|
||||||
|
|
||||||
|
# Additional metadata is provided by Snowfall Lib.
|
||||||
|
system, # The system architecture for this host (eg. `x86_64-linux`).
|
||||||
|
target, # The Snowfall Lib target for this system (eg. `x86_64-iso`).
|
||||||
|
format, # A normalized name for the system target (eg. `iso`).
|
||||||
|
virtual, # A boolean to determine whether this system is a virtual target using nixos-generators.
|
||||||
|
systems, # An attribute map of your defined hosts.
|
||||||
|
|
||||||
|
# All other arguments come from the module system.
|
||||||
|
config,
|
||||||
|
host,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.modules.i3;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.i3 = {
|
||||||
|
enable = mkOption { default = false; };
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
modules.rofi.enable = true;
|
||||||
|
|
||||||
|
services.dunst.enable = true;
|
||||||
|
|
||||||
|
programs = {
|
||||||
|
i3status-rust = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
nitrogen
|
||||||
|
xfce.xfce4-screenshooter
|
||||||
|
pulseaudio # For pactl commands
|
||||||
|
];
|
||||||
|
xsession.enable = true; # Give gui programs access to sessionVariables
|
||||||
|
# Prevent screen from going blank (check these settings with `xset q`)
|
||||||
|
# And disable bell sound (b)
|
||||||
|
xsession.initExtra = ''
|
||||||
|
${pkgs.xorg.xset}/bin/xset s off
|
||||||
|
${pkgs.xorg.xset}/bin/xset -dpms
|
||||||
|
${pkgs.xorg.xset}/bin/xset b off
|
||||||
|
'';
|
||||||
|
xsession.windowManager.i3 = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.i3-gaps;
|
||||||
|
};
|
||||||
|
|
||||||
|
xsession.importedVariables = [ ];
|
||||||
|
|
||||||
|
# Overwrite default home-manager config file
|
||||||
|
xdg.configFile."i3/config".source = lib.mkForce (
|
||||||
|
if host == "kardorf" then ./i3/config-kardorf else ./i3/config
|
||||||
|
);
|
||||||
|
|
||||||
|
home.file = {
|
||||||
|
".config/i3/scripts" = {
|
||||||
|
source = ./i3/scripts;
|
||||||
|
recursive = true;
|
||||||
|
};
|
||||||
|
".config/i3/workspace-messaging.json".source = ./i3/workspace-chat-element-tele.json;
|
||||||
|
".config/i3status-rust/config.toml".source = ./i3status-rust/config.toml;
|
||||||
|
};
|
||||||
|
|
||||||
|
home.sessionPath = [ "/home/julian/.config/i3/scripts" ];
|
||||||
|
};
|
||||||
|
}
|
1
modules/home/i3/i3-scrot.conf
Normal file
@ -0,0 +1 @@
|
|||||||
|
scrot_dir=~/Pictures/screenshots
|
314
modules/home/i3/i3/config
Normal file
@ -0,0 +1,314 @@
|
|||||||
|
# i3 config file (v4)
|
||||||
|
#
|
||||||
|
# Please see https://i3wm.org/docs/userguide.html for a complete reference!
|
||||||
|
|
||||||
|
set $mod Mod4
|
||||||
|
set $scripts /home/julian/.config/i3/scripts
|
||||||
|
set $lock "i3lock --ignore-empty-password --color=000000"
|
||||||
|
|
||||||
|
# Font for window titles
|
||||||
|
font pango:FuraCode Nerd Font 12
|
||||||
|
|
||||||
|
# xss-lock grabs a logind suspend inhibit lock and will use $lock to lock the
|
||||||
|
# screen before suspend. Use loginctl lock-session to lock your screen.
|
||||||
|
# exec --no-startup-id xss-lock --transfer-sleep-lock -- $lock --nofork
|
||||||
|
|
||||||
|
# Screen brightness controls
|
||||||
|
bindsym XF86MonBrightnessUp exec "brightnessctl set 5%+"
|
||||||
|
bindsym XF86MonBrightnessDown exec "brightnessctl set 5%-"
|
||||||
|
|
||||||
|
# Use pactl to adjust volume in PulseAudio.
|
||||||
|
# set $refresh_i3status killall -SIGUSR1 i3status
|
||||||
|
set $refresh_i3blocks pkill -RTMIN+1 i3blocks
|
||||||
|
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3blocks
|
||||||
|
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3blocks
|
||||||
|
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3blocks
|
||||||
|
bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3blocks
|
||||||
|
|
||||||
|
# Use Mouse+$mod to drag floating windows to their wanted position
|
||||||
|
floating_modifier $mod
|
||||||
|
|
||||||
|
# start a terminal
|
||||||
|
bindsym $mod+Return exec $TERMINAL
|
||||||
|
|
||||||
|
# kill focused window
|
||||||
|
bindsym $mod+Shift+q kill
|
||||||
|
bindsym $mod+x kill
|
||||||
|
|
||||||
|
# Simulates alt+f4
|
||||||
|
bindsym Mod1+F4 kill
|
||||||
|
|
||||||
|
# start program launcher
|
||||||
|
bindsym $mod+d exec rofi -show run
|
||||||
|
|
||||||
|
# change focus
|
||||||
|
bindsym $mod+h focus left
|
||||||
|
bindsym $mod+j focus down
|
||||||
|
bindsym $mod+k focus up
|
||||||
|
bindsym $mod+l focus right
|
||||||
|
|
||||||
|
# alternatively, you can use the cursor keys:
|
||||||
|
bindsym $mod+Left focus left
|
||||||
|
bindsym $mod+Down focus down
|
||||||
|
bindsym $mod+Up focus up
|
||||||
|
bindsym $mod+Right focus right
|
||||||
|
|
||||||
|
# move focused window
|
||||||
|
bindsym $mod+Shift+h move left
|
||||||
|
bindsym $mod+Shift+j move down
|
||||||
|
bindsym $mod+Shift+k move up
|
||||||
|
bindsym $mod+Shift+l move right
|
||||||
|
|
||||||
|
# alternatively, you can use the cursor keys:
|
||||||
|
bindsym $mod+Shift+Left move left
|
||||||
|
bindsym $mod+Shift+Down move down
|
||||||
|
bindsym $mod+Shift+Up move up
|
||||||
|
bindsym $mod+Shift+Right move right
|
||||||
|
|
||||||
|
# split in horizontal / vertical orientation
|
||||||
|
bindsym $mod+Shift+v split h
|
||||||
|
bindsym $mod+v split v
|
||||||
|
|
||||||
|
# enter fullscreen mode for the focused container
|
||||||
|
bindsym $mod+f fullscreen toggle
|
||||||
|
|
||||||
|
# change container layout (stacked, tabbed, toggle split)
|
||||||
|
# bindsym $mod+Shift+w layout stacking
|
||||||
|
# bindsym $mod+w layout tabbed
|
||||||
|
# bindsym $mod+e layout toggle split
|
||||||
|
|
||||||
|
# toggle tiling / floating
|
||||||
|
bindsym $mod+Shift+space floating toggle
|
||||||
|
|
||||||
|
# change focus between tiling / floating windows
|
||||||
|
bindsym $mod+space focus mode_toggle
|
||||||
|
|
||||||
|
# focus the parent container
|
||||||
|
bindsym $mod+a focus parent
|
||||||
|
|
||||||
|
# focus the child container
|
||||||
|
#bindsym $mod+d focus child
|
||||||
|
|
||||||
|
# The middle button over a titlebar kills the window
|
||||||
|
bindsym --release button2 kill
|
||||||
|
|
||||||
|
# Define names for default workspaces for which we configure key bindings later on.
|
||||||
|
# We use variables to avoid repeating the names in multiple places.
|
||||||
|
set $ws1 "1"
|
||||||
|
set $ws2 "2"
|
||||||
|
set $ws3 "3"
|
||||||
|
set $ws4 "4"
|
||||||
|
set $ws5 "5"
|
||||||
|
set $ws6 "6"
|
||||||
|
set $ws7 "7"
|
||||||
|
set $ws8 "8"
|
||||||
|
set $ws9 "9"
|
||||||
|
set $ws10 "10"
|
||||||
|
|
||||||
|
# switch to workspace
|
||||||
|
bindsym $mod+1 workspace number $ws1
|
||||||
|
bindsym $mod+2 workspace number $ws2
|
||||||
|
bindsym $mod+3 workspace number $ws3
|
||||||
|
bindsym $mod+4 workspace number $ws4
|
||||||
|
bindsym $mod+5 workspace number $ws5
|
||||||
|
bindsym $mod+6 workspace number $ws6
|
||||||
|
bindsym $mod+7 workspace number $ws7
|
||||||
|
bindsym $mod+8 workspace number $ws8
|
||||||
|
bindsym $mod+9 workspace number $ws9
|
||||||
|
bindsym $mod+0 workspace number $ws10
|
||||||
|
|
||||||
|
# move focused container to workspace
|
||||||
|
bindsym $mod+Ctrl+1 move container to workspace number $ws1
|
||||||
|
bindsym $mod+Ctrl+2 move container to workspace number $ws2
|
||||||
|
bindsym $mod+Ctrl+3 move container to workspace number $ws3
|
||||||
|
bindsym $mod+Ctrl+4 move container to workspace number $ws4
|
||||||
|
bindsym $mod+Ctrl+5 move container to workspace number $ws5
|
||||||
|
bindsym $mod+Ctrl+6 move container to workspace number $ws6
|
||||||
|
bindsym $mod+Ctrl+7 move container to workspace number $ws7
|
||||||
|
bindsym $mod+Ctrl+8 move container to workspace number $ws8
|
||||||
|
bindsym $mod+Ctrl+9 move container to workspace number $ws9
|
||||||
|
bindsym $mod+Ctrl+0 move container to workspace number $ws10
|
||||||
|
|
||||||
|
# move focused container to workspace and follow
|
||||||
|
bindsym $mod+Shift+1 move container to workspace number $ws1; workspace $ws1
|
||||||
|
bindsym $mod+Shift+2 move container to workspace number $ws2; workspace $ws2
|
||||||
|
bindsym $mod+Shift+3 move container to workspace number $ws3; workspace $ws3
|
||||||
|
bindsym $mod+Shift+4 move container to workspace number $ws4; workspace $ws4
|
||||||
|
bindsym $mod+Shift+5 move container to workspace number $ws5; workspace $ws5
|
||||||
|
bindsym $mod+Shift+6 move container to workspace number $ws6; workspace $ws6
|
||||||
|
bindsym $mod+Shift+7 move container to workspace number $ws7; workspace $ws7
|
||||||
|
bindsym $mod+Shift+8 move container to workspace number $ws8; workspace $ws8
|
||||||
|
bindsym $mod+Shift+9 move container to workspace number $ws9; workspace $ws9
|
||||||
|
bindsym $mod+Shift+0 move container to workspace number $ws10; workspace $ws10
|
||||||
|
|
||||||
|
# Monitor config
|
||||||
|
set $monitor_left "HDMI-1"
|
||||||
|
set $monitor_right "eDP-1"
|
||||||
|
|
||||||
|
workspace $ws1 output $monitor_left
|
||||||
|
workspace $ws2 output $monitor_left
|
||||||
|
workspace $ws3 output $monitor_left
|
||||||
|
workspace $ws4 output $monitor_left
|
||||||
|
workspace $ws5 output $monitor_left
|
||||||
|
workspace $ws6 output $monitor_right
|
||||||
|
workspace $ws7 output $monitor_right
|
||||||
|
workspace $ws8 output $monitor_right
|
||||||
|
workspace $ws9 output $monitor_right
|
||||||
|
workspace $ws10 output $monitor_right
|
||||||
|
|
||||||
|
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
|
||||||
|
bindsym $mod+Shift+r restart
|
||||||
|
|
||||||
|
# resize window (you can also use the mouse for that)
|
||||||
|
mode "resize" {
|
||||||
|
# Pressing left will shrink the window’s width.
|
||||||
|
# Pressing right will grow the window’s width.
|
||||||
|
# Pressing up will shrink the window’s height.
|
||||||
|
# Pressing down will grow the window’s height.
|
||||||
|
bindsym h resize shrink width 10 px or 10 ppt
|
||||||
|
bindsym j resize grow height 10 px or 10 ppt
|
||||||
|
bindsym k resize shrink height 10 px or 10 ppt
|
||||||
|
bindsym l resize grow width 10 px or 10 ppt
|
||||||
|
|
||||||
|
# same bindings, but for the arrow keys
|
||||||
|
bindsym Left resize shrink width 10 px or 10 ppt
|
||||||
|
bindsym Down resize grow height 10 px or 10 ppt
|
||||||
|
bindsym Up resize shrink height 10 px or 10 ppt
|
||||||
|
bindsym Right resize grow width 10 px or 10 ppt
|
||||||
|
|
||||||
|
# back to normal: Enter or Escape or $mod+r
|
||||||
|
bindsym Return mode "default"
|
||||||
|
bindsym Escape mode "default"
|
||||||
|
bindsym $mod+r mode "default"
|
||||||
|
}
|
||||||
|
|
||||||
|
bindsym $mod+r mode "resize"
|
||||||
|
|
||||||
|
bar {
|
||||||
|
font pango:DejaVu Sans Mono, Font Awesome 15
|
||||||
|
status_command i3status-rs
|
||||||
|
position bottom
|
||||||
|
|
||||||
|
tray_output eDP-1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
set $mode_system System (l) lock, (e) logout, (r) reboot, (s) shutdown
|
||||||
|
mode "$mode_system" {
|
||||||
|
bindsym l exec --no-startup-id $lock, mode "default"
|
||||||
|
# logout
|
||||||
|
bindsym e exec --no-startup-id i3-msg exit, mode "default"
|
||||||
|
bindsym r exec --no-startup-id systemctl reboot, mode "default"
|
||||||
|
bindsym s exec --no-startup-id systemctl poweroff, mode "default"
|
||||||
|
bindsym h exec --no-startup-id $lock && systemctl hibernate, mode "default"
|
||||||
|
bindsym Shift+s exec --no-startup-id $lock && systemctl suspend, mode "default"
|
||||||
|
|
||||||
|
# back to normal: Enter or Escape
|
||||||
|
bindsym Return mode "default"
|
||||||
|
bindsym Escape mode "default"
|
||||||
|
}
|
||||||
|
bindsym $mod+Shift+e mode "$mode_system"
|
||||||
|
|
||||||
|
bindsym $mod+Tab exec --no-startup-id $lock
|
||||||
|
|
||||||
|
bindsym $mod+Print exec --no-startup-id "xfce4-screenshooter"
|
||||||
|
|
||||||
|
bindsym $mod+c exec qalculate-gtk
|
||||||
|
bindsym $mod+Shift+p exec xwacomcalibrate
|
||||||
|
bindsym $mod+e exec pcmanfm
|
||||||
|
bindsym $mod+b exec firefox
|
||||||
|
bindsym $mod+p exec $scripts/display-toggle-mirror
|
||||||
|
|
||||||
|
workspace_auto_back_and_forth yes
|
||||||
|
|
||||||
|
# default_border pixel
|
||||||
|
default_border normal
|
||||||
|
default_floating_border normal
|
||||||
|
hide_edge_borders smart
|
||||||
|
|
||||||
|
show_marks no
|
||||||
|
|
||||||
|
# switch to workspace with urgent window automatically
|
||||||
|
for_window [urgent=latest] focus
|
||||||
|
|
||||||
|
focus_on_window_activation focus
|
||||||
|
|
||||||
|
assign [class="firefox" title="Mozilla Firefox$"] workspace $ws1
|
||||||
|
assign [class="TelegramDesktop"] workspace $ws9
|
||||||
|
assign [class="Signal"] workspace $ws9
|
||||||
|
assign [class="Rocket.Chat"] workspace $ws9
|
||||||
|
assign [class="Element"] workspace $ws9
|
||||||
|
assign [class="SchildiChat"] workspace $ws9
|
||||||
|
assign [class="nheko"] workspace $ws9
|
||||||
|
assign [class="thunderbird"] workspace $ws10
|
||||||
|
# assign [class="zoom"] workspace $ws5
|
||||||
|
assign [class="Zotero"] workspace $ws8
|
||||||
|
|
||||||
|
for_window [class="firefox" urgent="latest"] focus
|
||||||
|
|
||||||
|
for_window [title="Manjaro Settings Manager"] floating enable
|
||||||
|
for_window [class="pamac-manager"] floating enable
|
||||||
|
for_window [class="Pamac-updater"] floating enable
|
||||||
|
for_window [class="Qalculate-gtk"] floating enable
|
||||||
|
for_window [class="Gcolor3"] floating enable
|
||||||
|
#for_window [class="zoom" title="Chat"] floating enable
|
||||||
|
#for_window [class="Thunderbird" instance="Msgcompose"] floating enable
|
||||||
|
#
|
||||||
|
for_window [window_role=floating] floating enable
|
||||||
|
|
||||||
|
for_window [class="Viewnior"] border normal
|
||||||
|
|
||||||
|
########## Autostart applications ##########
|
||||||
|
exec firefox
|
||||||
|
|
||||||
|
# exec --no-startup-id nm-applet
|
||||||
|
# exec --no-startup-id blueman-applet
|
||||||
|
# exec --no-startup-id nextcloud --background
|
||||||
|
# exec --no-startup-id xfce4-screensaver
|
||||||
|
# exec --no-startup-id /usr/bin/emacs --daemon
|
||||||
|
|
||||||
|
# Authentication agent
|
||||||
|
# exec --no-startup-id /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
|
||||||
|
# exec --no-startup-id /usr/bin/env gnome-keyring-daemon --start
|
||||||
|
|
||||||
|
# Notify about software updates
|
||||||
|
# exec --no-startup-id pamac-tray
|
||||||
|
# exec --no-startup-id clipit
|
||||||
|
# exec --no-startup-id xfce4-clipman
|
||||||
|
|
||||||
|
# Notify about kernel updates
|
||||||
|
# exec --no-startup-id msm_notifier
|
||||||
|
|
||||||
|
# Audio
|
||||||
|
# exec --no-startup-id start-pulseaudio-x11
|
||||||
|
# exec --no-startup-id pa-applet
|
||||||
|
|
||||||
|
# Background
|
||||||
|
exec --no-startup-id nitrogen --restore
|
||||||
|
|
||||||
|
# Adjust display temperature
|
||||||
|
# exec --no-startup-id redshift
|
||||||
|
|
||||||
|
# Notifications
|
||||||
|
# exec --no-startup-id /usr/lib/xfce4/notifyd/xfce4-notifyd
|
||||||
|
|
||||||
|
# exec --no-startup-id xautolock -time 10 -locker blurlock
|
||||||
|
# exec_always --no-startup-id ff-theme-util
|
||||||
|
# exec_always --no-startup-id fix_xcursor
|
||||||
|
|
||||||
|
exec_always --no-startup-id "$scripts/display-layoutpicker"
|
||||||
|
|
||||||
|
|
||||||
|
#############################
|
||||||
|
### settings for i3-gaps: ###
|
||||||
|
#############################
|
||||||
|
|
||||||
|
# Set inner/outer gaps
|
||||||
|
gaps inner 8
|
||||||
|
gaps outer -2
|
||||||
|
|
||||||
|
# Smart gaps (gaps used if only more than one container on the workspace)
|
||||||
|
smart_gaps on
|
||||||
|
|
||||||
|
# Smart borders (draw borders around container only if it is not the only container on this workspace)
|
||||||
|
smart_borders on
|
314
modules/home/i3/i3/config-kardorf
Normal file
@ -0,0 +1,314 @@
|
|||||||
|
# i3 config file (v4)
|
||||||
|
#
|
||||||
|
# Please see https://i3wm.org/docs/userguide.html for a complete reference!
|
||||||
|
|
||||||
|
set $mod Mod4
|
||||||
|
set $scripts ~/.config/i3/scripts
|
||||||
|
set $lock "i3lock --ignore-empty-password --color=000000"
|
||||||
|
|
||||||
|
# Font for window titles
|
||||||
|
font pango:FuraCode Nerd Font 12
|
||||||
|
|
||||||
|
# xss-lock grabs a logind suspend inhibit lock and will use $lock to lock the
|
||||||
|
# screen before suspend. Use loginctl lock-session to lock your screen.
|
||||||
|
exec --no-startup-id xss-lock --transfer-sleep-lock -- $lock --nofork
|
||||||
|
|
||||||
|
# Screen brightness controls
|
||||||
|
# bindsym XF86MonBrightnessUp exec "xbacklight -inc 10; notify-send 'brightness up'"
|
||||||
|
# bindsym XF86MonBrightnessDown exec "xbacklight -dec 10; notify-send 'brightness down'"
|
||||||
|
|
||||||
|
# Use pactl to adjust volume in PulseAudio.
|
||||||
|
# set $refresh_i3status killall -SIGUSR1 i3status
|
||||||
|
set $refresh_i3blocks pkill -RTMIN+1 i3blocks
|
||||||
|
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3blocks
|
||||||
|
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3blocks
|
||||||
|
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3blocks
|
||||||
|
bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3blocks
|
||||||
|
|
||||||
|
# Use Mouse+$mod to drag floating windows to their wanted position
|
||||||
|
floating_modifier $mod
|
||||||
|
|
||||||
|
# start a terminal
|
||||||
|
bindsym $mod+Return exec kitty
|
||||||
|
|
||||||
|
# kill focused window
|
||||||
|
bindsym $mod+Shift+q kill
|
||||||
|
bindsym $mod+x kill
|
||||||
|
|
||||||
|
# Simulates alt+f4
|
||||||
|
bindsym Mod1+F4 kill
|
||||||
|
|
||||||
|
# start program launcher
|
||||||
|
bindsym $mod+d exec rofi -show run
|
||||||
|
|
||||||
|
# change focus
|
||||||
|
bindsym $mod+h focus left
|
||||||
|
bindsym $mod+j focus down
|
||||||
|
bindsym $mod+k focus up
|
||||||
|
bindsym $mod+l focus right
|
||||||
|
|
||||||
|
# alternatively, you can use the cursor keys:
|
||||||
|
bindsym $mod+Left focus left
|
||||||
|
bindsym $mod+Down focus down
|
||||||
|
bindsym $mod+Up focus up
|
||||||
|
bindsym $mod+Right focus right
|
||||||
|
|
||||||
|
# move focused window
|
||||||
|
bindsym $mod+Shift+h move left
|
||||||
|
bindsym $mod+Shift+j move down
|
||||||
|
bindsym $mod+Shift+k move up
|
||||||
|
bindsym $mod+Shift+l move right
|
||||||
|
|
||||||
|
# alternatively, you can use the cursor keys:
|
||||||
|
bindsym $mod+Shift+Left move left
|
||||||
|
bindsym $mod+Shift+Down move down
|
||||||
|
bindsym $mod+Shift+Up move up
|
||||||
|
bindsym $mod+Shift+Right move right
|
||||||
|
|
||||||
|
# split in horizontal / vertical orientation
|
||||||
|
bindsym $mod+Shift+v split h
|
||||||
|
bindsym $mod+v split v
|
||||||
|
|
||||||
|
# enter fullscreen mode for the focused container
|
||||||
|
bindsym $mod+f fullscreen toggle
|
||||||
|
|
||||||
|
# change container layout (stacked, tabbed, toggle split)
|
||||||
|
# bindsym $mod+Shift+w layout stacking
|
||||||
|
# bindsym $mod+w layout tabbed
|
||||||
|
# bindsym $mod+e layout toggle split
|
||||||
|
|
||||||
|
# toggle tiling / floating
|
||||||
|
bindsym $mod+Shift+space floating toggle
|
||||||
|
|
||||||
|
# change focus between tiling / floating windows
|
||||||
|
bindsym $mod+space focus mode_toggle
|
||||||
|
|
||||||
|
# focus the parent container
|
||||||
|
bindsym $mod+a focus parent
|
||||||
|
|
||||||
|
# focus the child container
|
||||||
|
#bindsym $mod+d focus child
|
||||||
|
|
||||||
|
# The middle button over a titlebar kills the window
|
||||||
|
bindsym --release button2 kill
|
||||||
|
|
||||||
|
# Define names for default workspaces for which we configure key bindings later on.
|
||||||
|
# We use variables to avoid repeating the names in multiple places.
|
||||||
|
set $ws1 "1"
|
||||||
|
set $ws2 "2"
|
||||||
|
set $ws3 "3"
|
||||||
|
set $ws4 "4"
|
||||||
|
set $ws5 "5"
|
||||||
|
set $ws6 "6"
|
||||||
|
set $ws7 "7"
|
||||||
|
set $ws8 "8"
|
||||||
|
set $ws9 "9"
|
||||||
|
set $ws10 "10"
|
||||||
|
|
||||||
|
# switch to workspace
|
||||||
|
bindsym $mod+1 workspace number $ws1
|
||||||
|
bindsym $mod+2 workspace number $ws2
|
||||||
|
bindsym $mod+3 workspace number $ws3
|
||||||
|
bindsym $mod+4 workspace number $ws4
|
||||||
|
bindsym $mod+5 workspace number $ws5
|
||||||
|
bindsym $mod+6 workspace number $ws6
|
||||||
|
bindsym $mod+7 workspace number $ws7
|
||||||
|
bindsym $mod+8 workspace number $ws8
|
||||||
|
bindsym $mod+9 workspace number $ws9
|
||||||
|
bindsym $mod+0 workspace number $ws10
|
||||||
|
|
||||||
|
# move focused container to workspace
|
||||||
|
bindsym $mod+Ctrl+1 move container to workspace number $ws1
|
||||||
|
bindsym $mod+Ctrl+2 move container to workspace number $ws2
|
||||||
|
bindsym $mod+Ctrl+3 move container to workspace number $ws3
|
||||||
|
bindsym $mod+Ctrl+4 move container to workspace number $ws4
|
||||||
|
bindsym $mod+Ctrl+5 move container to workspace number $ws5
|
||||||
|
bindsym $mod+Ctrl+6 move container to workspace number $ws6
|
||||||
|
bindsym $mod+Ctrl+7 move container to workspace number $ws7
|
||||||
|
bindsym $mod+Ctrl+8 move container to workspace number $ws8
|
||||||
|
bindsym $mod+Ctrl+9 move container to workspace number $ws9
|
||||||
|
bindsym $mod+Ctrl+0 move container to workspace number $ws10
|
||||||
|
|
||||||
|
# move focused container to workspace and follow
|
||||||
|
bindsym $mod+Shift+1 move container to workspace number $ws1; workspace $ws1
|
||||||
|
bindsym $mod+Shift+2 move container to workspace number $ws2; workspace $ws2
|
||||||
|
bindsym $mod+Shift+3 move container to workspace number $ws3; workspace $ws3
|
||||||
|
bindsym $mod+Shift+4 move container to workspace number $ws4; workspace $ws4
|
||||||
|
bindsym $mod+Shift+5 move container to workspace number $ws5; workspace $ws5
|
||||||
|
bindsym $mod+Shift+6 move container to workspace number $ws6; workspace $ws6
|
||||||
|
bindsym $mod+Shift+7 move container to workspace number $ws7; workspace $ws7
|
||||||
|
bindsym $mod+Shift+8 move container to workspace number $ws8; workspace $ws8
|
||||||
|
bindsym $mod+Shift+9 move container to workspace number $ws9; workspace $ws9
|
||||||
|
bindsym $mod+Shift+0 move container to workspace number $ws10; workspace $ws10
|
||||||
|
|
||||||
|
# Monitor config
|
||||||
|
set $monitor_left "DVI-D-0"
|
||||||
|
set $monitor_right "DVI-D-1"
|
||||||
|
|
||||||
|
workspace $ws1 output $monitor_left
|
||||||
|
workspace $ws2 output $monitor_left
|
||||||
|
workspace $ws3 output $monitor_left
|
||||||
|
workspace $ws4 output $monitor_left
|
||||||
|
workspace $ws5 output $monitor_left
|
||||||
|
workspace $ws6 output $monitor_right
|
||||||
|
workspace $ws7 output $monitor_right
|
||||||
|
workspace $ws8 output $monitor_right
|
||||||
|
workspace $ws9 output $monitor_right
|
||||||
|
workspace $ws10 output $monitor_right
|
||||||
|
|
||||||
|
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
|
||||||
|
bindsym $mod+Shift+r restart
|
||||||
|
|
||||||
|
# resize window (you can also use the mouse for that)
|
||||||
|
mode "resize" {
|
||||||
|
# Pressing left will shrink the window’s width.
|
||||||
|
# Pressing right will grow the window’s width.
|
||||||
|
# Pressing up will shrink the window’s height.
|
||||||
|
# Pressing down will grow the window’s height.
|
||||||
|
bindsym h resize shrink width 10 px or 10 ppt
|
||||||
|
bindsym j resize grow height 10 px or 10 ppt
|
||||||
|
bindsym k resize shrink height 10 px or 10 ppt
|
||||||
|
bindsym l resize grow width 10 px or 10 ppt
|
||||||
|
|
||||||
|
# same bindings, but for the arrow keys
|
||||||
|
bindsym Left resize shrink width 10 px or 10 ppt
|
||||||
|
bindsym Down resize grow height 10 px or 10 ppt
|
||||||
|
bindsym Up resize shrink height 10 px or 10 ppt
|
||||||
|
bindsym Right resize grow width 10 px or 10 ppt
|
||||||
|
|
||||||
|
# back to normal: Enter or Escape or $mod+r
|
||||||
|
bindsym Return mode "default"
|
||||||
|
bindsym Escape mode "default"
|
||||||
|
bindsym $mod+r mode "default"
|
||||||
|
}
|
||||||
|
|
||||||
|
bindsym $mod+r mode "resize"
|
||||||
|
|
||||||
|
bar {
|
||||||
|
font pango:DejaVu Sans Mono, Font Awesome 15
|
||||||
|
status_command i3status-rs
|
||||||
|
position bottom
|
||||||
|
|
||||||
|
tray_output DVI-D-0
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
set $mode_system System (l) lock, (e) logout, (r) reboot, (s) shutdown
|
||||||
|
mode "$mode_system" {
|
||||||
|
bindsym l exec --no-startup-id $lock, mode "default"
|
||||||
|
bindsym e exec --no-startup-id i3-msg exit, mode "default" # logout
|
||||||
|
bindsym r exec --no-startup-id systemctl reboot, mode "default"
|
||||||
|
bindsym s exec --no-startup-id systemctl poweroff, mode "default"
|
||||||
|
bindsym h exec --no-startup-id $lock && systemctl hibernate, mode "default"
|
||||||
|
bindsym Shift+s exec --no-startup-id $lock && systemctl suspend, mode "default"
|
||||||
|
|
||||||
|
# back to normal: Enter or Escape
|
||||||
|
bindsym Return mode "default"
|
||||||
|
bindsym Escape mode "default"
|
||||||
|
}
|
||||||
|
bindsym $mod+Shift+e mode "$mode_system"
|
||||||
|
|
||||||
|
bindsym $mod+Tab exec --no-startup-id $lock
|
||||||
|
|
||||||
|
bindsym $mod+Print exec --no-startup-id "xfce4-screenshooter"
|
||||||
|
|
||||||
|
bindsym $mod+c exec qalculate-gtk
|
||||||
|
bindsym $mod+Shift+p exec xwacomcalibrate
|
||||||
|
bindsym $mod+e exec pcmanfm
|
||||||
|
bindsym $mod+Shift+c exec $scripts/jupyter-calculator
|
||||||
|
bindsym $mod+b exec firefox
|
||||||
|
bindsym $mod+p exec $scripts/display-toggle-mirror
|
||||||
|
|
||||||
|
workspace_auto_back_and_forth yes
|
||||||
|
|
||||||
|
# default_border pixel
|
||||||
|
default_border normal
|
||||||
|
default_floating_border normal
|
||||||
|
hide_edge_borders smart
|
||||||
|
|
||||||
|
show_marks no
|
||||||
|
|
||||||
|
# switch to workspace with urgent window automatically
|
||||||
|
for_window [urgent=latest] focus
|
||||||
|
|
||||||
|
focus_on_window_activation focus
|
||||||
|
|
||||||
|
assign [class="firefox" title="Mozilla Firefox$"] workspace $ws1
|
||||||
|
assign [class="TelegramDesktop"] workspace $ws9
|
||||||
|
assign [class="Signal"] workspace $ws9
|
||||||
|
assign [class="Rocket.Chat"] workspace $ws9
|
||||||
|
assign [class="Element"] workspace $ws9
|
||||||
|
assign [class="SchildiChat"] workspace $ws9
|
||||||
|
assign [class="thunderbird"] workspace $ws10
|
||||||
|
# assign [class="zoom"] workspace $ws5
|
||||||
|
assign [class="Zotero"] workspace $ws8
|
||||||
|
|
||||||
|
for_window [class="firefox" urgent="latest"] focus
|
||||||
|
|
||||||
|
for_window [title="Manjaro Settings Manager"] floating enable
|
||||||
|
for_window [class="pamac-manager"] floating enable
|
||||||
|
for_window [class="Pamac-updater"] floating enable
|
||||||
|
for_window [class="Qalculate-gtk"] floating enable
|
||||||
|
for_window [class="Gcolor3"] floating enable
|
||||||
|
#for_window [class="zoom" title="Chat"] floating enable
|
||||||
|
#for_window [class="Thunderbird" instance="Msgcompose"] floating enable
|
||||||
|
#
|
||||||
|
for_window [window_role=floating] floating enable
|
||||||
|
|
||||||
|
for_window [class="Viewnior"] border normal
|
||||||
|
|
||||||
|
########## Autostart applications ##########
|
||||||
|
exec firefox
|
||||||
|
|
||||||
|
exec --no-startup-id nm-applet
|
||||||
|
exec --no-startup-id blueman-applet
|
||||||
|
exec --no-startup-id xfce4-power-manager
|
||||||
|
exec --no-startup-id nextcloud --background
|
||||||
|
# exec --no-startup-id xfce4-screensaver
|
||||||
|
# exec --no-startup-id /usr/bin/emacs --daemon
|
||||||
|
|
||||||
|
# Authentication agent
|
||||||
|
exec --no-startup-id /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
|
||||||
|
exec --no-startup-id /usr/bin/env gnome-keyring-daemon --start
|
||||||
|
|
||||||
|
# Notify about software updates
|
||||||
|
exec --no-startup-id pamac-tray
|
||||||
|
exec --no-startup-id clipit
|
||||||
|
# exec --no-startup-id xfce4-clipman
|
||||||
|
|
||||||
|
# Notify about kernel updates
|
||||||
|
exec --no-startup-id msm_notifier
|
||||||
|
|
||||||
|
# Audio
|
||||||
|
exec --no-startup-id start-pulseaudio-x11
|
||||||
|
exec --no-startup-id pa-applet
|
||||||
|
|
||||||
|
# Background
|
||||||
|
exec --no-startup-id nitrogen --restore
|
||||||
|
|
||||||
|
# Adjust display temperature
|
||||||
|
exec --no-startup-id redshift
|
||||||
|
|
||||||
|
# Notifications
|
||||||
|
exec --no-startup-id /usr/lib/xfce4/notifyd/xfce4-notifyd
|
||||||
|
|
||||||
|
# exec --no-startup-id xautolock -time 10 -locker blurlock
|
||||||
|
exec_always --no-startup-id ff-theme-util
|
||||||
|
exec_always --no-startup-id fix_xcursor
|
||||||
|
|
||||||
|
exec_always --no-startup-id "$scripts/display-layoutpicker"
|
||||||
|
|
||||||
|
|
||||||
|
#############################
|
||||||
|
### settings for i3-gaps: ###
|
||||||
|
#############################
|
||||||
|
|
||||||
|
# Set inner/outer gaps
|
||||||
|
gaps inner 8
|
||||||
|
gaps outer -2
|
||||||
|
|
||||||
|
# Smart gaps (gaps used if only more than one container on the workspace)
|
||||||
|
smart_gaps on
|
||||||
|
|
||||||
|
# Smart borders (draw borders around container only if it is not the only container on this workspace)
|
||||||
|
smart_borders on
|
@ -44,7 +44,7 @@ bindsym $mod+z exec --no-startup-id morc_menu
|
|||||||
|
|
||||||
#exec --no-startup-id volumeicon
|
#exec --no-startup-id volumeicon
|
||||||
#bindsym $mod+Ctrl+m exec terminal -e 'alsamixer'
|
#bindsym $mod+Ctrl+m exec terminal -e 'alsamixer'
|
||||||
exec --no-startup-id pulseaudio
|
exec --no-startup-id start-pulseaudio-x11
|
||||||
exec --no-startup-id pa-applet
|
exec --no-startup-id pa-applet
|
||||||
bindsym $mod+Ctrl+m exec pavucontrol
|
bindsym $mod+Ctrl+m exec pavucontrol
|
||||||
|
|
||||||
@ -224,11 +224,8 @@ bindsym $mod+Shift+c reload
|
|||||||
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
|
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
|
||||||
bindsym $mod+Shift+r restart
|
bindsym $mod+Shift+r restart
|
||||||
|
|
||||||
# exit i3 (logs you out of your X session)
|
|
||||||
bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'"
|
|
||||||
|
|
||||||
# Set shut down, restart and locking features
|
# Set shut down, restart and locking features
|
||||||
bindsym $mod+0 mode "$mode_system"
|
bindsym $mod+Shift+e mode "$mode_system"
|
||||||
set $mode_system (l)ock, (e)xit, switch_(u)ser, (s)uspend, (h)ibernate, (r)eboot, (Shift+s)hutdown
|
set $mode_system (l)ock, (e)xit, switch_(u)ser, (s)uspend, (h)ibernate, (r)eboot, (Shift+s)hutdown
|
||||||
mode "$mode_system" {
|
mode "$mode_system" {
|
||||||
bindsym l exec --no-startup-id i3exit lock, mode "default"
|
bindsym l exec --no-startup-id i3exit lock, mode "default"
|
||||||
@ -279,7 +276,7 @@ exec --no-startup-id nm-applet
|
|||||||
exec --no-startup-id xfce4-power-manager
|
exec --no-startup-id xfce4-power-manager
|
||||||
exec --no-startup-id pamac-tray
|
exec --no-startup-id pamac-tray
|
||||||
exec --no-startup-id clipit
|
exec --no-startup-id clipit
|
||||||
# exec --no-startup-id blueman-applet
|
exec --no-startup-id blueman-applet
|
||||||
# exec_always --no-startup-id sbxkb
|
# exec_always --no-startup-id sbxkb
|
||||||
exec --no-startup-id start_conky_maia
|
exec --no-startup-id start_conky_maia
|
||||||
# exec --no-startup-id start_conky_green
|
# exec --no-startup-id start_conky_green
|
11
modules/home/i3/i3/scripts/display-layoutpicker
Executable file
@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
xrandr | grep -q "HDMI-1 connected"
|
||||||
|
|
||||||
|
if [ "$?" -eq "0" ]; then
|
||||||
|
echo "Two screens available"
|
||||||
|
~/.screenlayout/twoscreens.sh
|
||||||
|
else
|
||||||
|
echo "Only one screen available"
|
||||||
|
~/.screenlayout/onescreen.sh
|
||||||
|
fi
|