Compare commits
276 Commits
77694e9aa0
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
fe9d2ed6ea
|
|||
|
18d79b2efe
|
|||
|
1280086985
|
|||
|
90063ae6c5
|
|||
|
cc5a4ebbe6
|
|||
|
270a89b26a
|
|||
|
20efa66147
|
|||
|
9d4d6430d3
|
|||
|
ff914431e6
|
|||
|
84ea4de4fd
|
|||
|
28d0955175
|
|||
|
ccaff4902a
|
|||
|
284cfdae35
|
|||
|
fd4cabeebd
|
|||
|
2df3c35f5c
|
|||
|
ae9d929183
|
|||
|
86741cf0dc
|
|||
|
4088f199d5
|
|||
|
566861ee28
|
|||
|
bff574afd2
|
|||
|
1cb7eba76b
|
|||
|
8ea0f40e88
|
|||
|
9a1f111fac
|
|||
|
3cf2870437
|
|||
|
3c2a0c0ef9
|
|||
|
640207c305
|
|||
|
92460b57d4
|
|||
|
a463f2ba0a
|
|||
|
639d4029e5
|
|||
|
6c25f19639
|
|||
|
ebc95e422f
|
|||
|
9c00b684d0
|
|||
|
e04e874549
|
|||
|
1993e13e1c
|
|||
|
46e92dd821
|
|||
|
b8bdd37cbc
|
|||
|
2e5e276b61
|
|||
|
39719850cb
|
|||
|
2641e6af09
|
|||
|
e8e9114a90
|
|||
|
3c449f97fe
|
|||
|
9daced8c68
|
|||
|
749fda9b83
|
|||
|
c2e3f1f848
|
|||
|
92a0d923b4
|
|||
|
acc226a21d
|
|||
|
fc30673d4b
|
|||
|
a060958a93
|
|||
|
3d5b029ed9
|
|||
|
a52285b412
|
|||
|
d794c6e108
|
|||
|
f79e499237
|
|||
|
d399669bab
|
|||
|
a7340a4fdd
|
|||
|
a99244a97b
|
|||
|
c3c5808b07
|
|||
|
de6dd6c789
|
|||
|
08c152d1f7
|
|||
|
dbe0c491bb
|
|||
|
c4c80945e8
|
|||
|
7b0833252a
|
|||
|
00ee413240
|
|||
|
47d63fedb4
|
|||
|
17034d3d9d
|
|||
|
9ffe84d760
|
|||
|
05dcd7067b
|
|||
|
a4766fec55
|
|||
|
1e6e2cb09d
|
|||
|
4e2c08c71c
|
|||
|
440ebe4a5d
|
|||
|
3073990aa2
|
|||
|
6efe53acad
|
|||
|
670fbe1380
|
|||
|
9dedfe3f5b
|
|||
|
2e72a658c8
|
|||
|
88972553e6
|
|||
|
1cb1b64f59
|
|||
|
cf2b55878a
|
|||
|
f2f5db5cfc
|
|||
|
a021fed2d5
|
|||
|
bbd13e4072
|
|||
|
0e9cfbde92
|
|||
|
94a3a274dd
|
|||
|
1e09261192
|
|||
|
13e4332af2
|
|||
|
f9401e0b12
|
|||
|
89a248a03c
|
|||
|
b3309591dc
|
|||
|
d6b802f059
|
|||
|
511d0f8f38
|
|||
|
45c046ce23
|
|||
|
5173238e01
|
|||
|
627de377b4
|
|||
|
00b00407b6
|
|||
|
ac9e161129
|
|||
|
494ecac073
|
|||
|
a3232ccfd9
|
|||
|
b4c419d852
|
|||
|
20e89e938f
|
|||
|
4abe217eed
|
|||
|
e201a060e6
|
|||
|
e3289051ef
|
|||
|
2f4f9cb30d
|
|||
|
0c0a2363f6
|
|||
|
46a05e7226
|
|||
|
a500b1eaec
|
|||
|
29a1990a8d
|
|||
|
a10f3d0479
|
|||
|
86101c7cca
|
|||
|
97c74e22c0
|
|||
|
696c7cff3e
|
|||
|
3b301d3bb6
|
|||
|
a0d774da82
|
|||
|
cb35ae2d73
|
|||
|
81cd095d08
|
|||
|
f790423cca
|
|||
|
70f7fae3af
|
|||
|
04117fb5a9
|
|||
|
93c3e1cdae
|
|||
|
7e10020cc3
|
|||
|
daca7f41ff
|
|||
|
a55dec76db
|
|||
|
b6ce065c83
|
|||
|
a389169420
|
|||
|
ad6d235132
|
|||
|
f6772efd86
|
|||
|
b4d27af37a
|
|||
|
5918d9d756
|
|||
|
a1fbe5d2f8
|
|||
|
aeefc83ac6
|
|||
|
a226f325d3
|
|||
|
0e4c6c6c4b
|
|||
|
b810990611
|
|||
|
d7caf48eb9
|
|||
|
3d3dcc6123
|
|||
|
ff6365ba8c
|
|||
|
bc03b083ef
|
|||
|
d9f20bc035
|
|||
|
66c6ec5071
|
|||
|
46fc2b62d2
|
|||
|
07b888da3b
|
|||
|
f06fab1ec6
|
|||
|
6a0619d159
|
|||
|
8dbb4373be
|
|||
|
68807c16f3
|
|||
|
5f41c8e71d
|
|||
|
02137f0c4a
|
|||
|
31f33ea658
|
|||
|
724c27724f
|
|||
|
987f8593ba
|
|||
|
b3312d539e
|
|||
|
a27ce0ddf0
|
|||
|
843348a096
|
|||
|
e47c31d637
|
|||
|
8475732f42
|
|||
|
ff0da86024
|
|||
|
afc81645ff
|
|||
|
c9c8832054
|
|||
|
edb534baa1
|
|||
|
85e212d1f9
|
|||
|
5b31a3fab8
|
|||
|
5f7166b01e
|
|||
|
50f5cc94d0
|
|||
|
54d6b097e4
|
|||
|
1b24386366
|
|||
|
883795148a
|
|||
|
ab41c4810b
|
|||
|
0b055fef80
|
|||
|
febef82271
|
|||
|
9017ccf4ef
|
|||
|
429d050d1e
|
|||
|
2134e947fd
|
|||
|
a509efdecd
|
|||
|
2161f9f3a6
|
|||
|
1ceaaf7f3f
|
|||
|
d6c7f2ccdb
|
|||
|
e4cd19b77e
|
|||
|
f7a60d4679
|
|||
|
b3011c2825
|
|||
|
77231c8a20
|
|||
|
06266f2a2e
|
|||
|
0130f0fabd
|
|||
|
4ab766b657
|
|||
|
6992442453
|
|||
|
24f32a7589
|
|||
|
0b6a673a8c
|
|||
|
5f5c845dc4
|
|||
|
baf6d0fc26
|
|||
|
02f2170993
|
|||
|
47235d5040
|
|||
|
90c42309c0
|
|||
|
30f9c68aaf
|
|||
|
9481df90ea
|
|||
|
36bfdfc6a8
|
|||
|
1c15014511
|
|||
|
4258623f54
|
|||
|
4b85da9a1e
|
|||
|
e31224fa62
|
|||
|
ffd96a277d
|
|||
|
8ab46ec051
|
|||
|
54c0f11d80
|
|||
|
6fffa0177b
|
|||
|
e5a2527f81
|
|||
|
1214534726
|
|||
|
af2c327eb7
|
|||
|
d855a29b76
|
|||
|
4f8d4b19f3
|
|||
|
ce95e15824
|
|||
|
3363d9eb77
|
|||
|
b723c1a591
|
|||
|
d6917c0f49
|
|||
|
6c030a639a
|
|||
|
92eaa4e194
|
|||
|
63d778f84d
|
|||
|
4a528bf34e
|
|||
|
51e84faa27
|
|||
|
c7e83b5497
|
|||
|
a697a3045e
|
|||
|
d590aa219c
|
|||
|
ad6160204d
|
|||
|
74303bbf02
|
|||
|
b518e078d9
|
|||
|
8022fff67e
|
|||
|
a570ebbc07
|
|||
|
f97d6f6bbb
|
|||
|
8eea0cc0d7
|
|||
|
fc3a0db80b
|
|||
|
5a41ad8355
|
|||
|
06e1ae50c2
|
|||
|
78c6365f0b
|
|||
|
2a652f06fd
|
|||
|
00edb760ea
|
|||
|
0402c048a3
|
|||
|
cdddacbecb
|
|||
|
d8f6399394
|
|||
|
3c6fdaeff2
|
|||
|
82de5a00de
|
|||
|
5abc354bc5
|
|||
|
590ac77ca0
|
|||
|
ece05b7bf3
|
|||
|
d5cbecbfe0
|
|||
|
39d16eee5f
|
|||
|
248a93b4b6
|
|||
|
6ce7200739
|
|||
|
ffd0a3bbeb
|
|||
|
da8ee0d20a
|
|||
|
cac91b95a7
|
|||
|
36cb18bff4
|
|||
|
430d287e5c
|
|||
|
2e188238a6
|
|||
|
2e3be809d9
|
|||
|
490db564ce
|
|||
|
3c4ba3d898
|
|||
|
65ad09cc64
|
|||
|
8656b7c982
|
|||
|
738404ac60
|
|||
|
dfecd1c5f9
|
|||
|
a97fb2eb64
|
|||
|
6dedcc140b
|
|||
|
6f585993bc
|
|||
|
e70ca0f65c
|
|||
|
48900cc391
|
|||
|
0c838facdf
|
|||
|
fa2356f326
|
|||
|
9859cec8b0
|
|||
|
d87719a476
|
|||
|
2ac463bf17
|
|||
|
f902b6fc92
|
|||
|
fdcea0b0b4
|
|||
|
40c7a02110
|
|||
|
d68f406ae8
|
|||
|
d378016e10
|
|||
|
4ff8781b52
|
|||
|
4868f26dad
|
|||
|
12d8e434b9
|
|||
|
12c9adeb36
|
@@ -10,7 +10,7 @@ alias df df -H $*
|
||||
alias du du -ch $*
|
||||
|
||||
alias grep grep --color=auto $*
|
||||
alias ls exa -halg@ --group-directories-first --git $*
|
||||
alias lsl exa -halg@ --group-directories-first --git $*
|
||||
alias lns ln -si $*
|
||||
alias mkdir mkdir -p $*
|
||||
|
||||
@@ -52,7 +52,5 @@ alias exti exit
|
||||
alias exi exit
|
||||
alias clean clear
|
||||
|
||||
alias vi find-file
|
||||
alias vim find-file
|
||||
alias ed find-file
|
||||
alias nano find-file
|
||||
alias less view-file $1
|
||||
alias bat view-file $1
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
function cnew -d "Create new C11 project"
|
||||
if count $argv > /dev/null
|
||||
set projname ""
|
||||
for item in $argv
|
||||
switch "$item"
|
||||
case -h --help
|
||||
man ~/dev/fishfunctions/cnew.man
|
||||
return 0
|
||||
case '*'
|
||||
set projname $item
|
||||
end
|
||||
end
|
||||
if [ "$projname" = "" ]
|
||||
echo "Missing argument: PROJECT"
|
||||
return -1
|
||||
end
|
||||
cp -r ~/dotfiles/dev/templateC $argv[1]
|
||||
cd $argv[1]
|
||||
sed -i "s/PROJECTNAME/$argv[1]/g" CMakeLists.txt
|
||||
sed -i "s/PROJECTNAME/$argv[1]/g" README.org
|
||||
sed -i "s/CPROJECTNAME/$argv[1]/g" doc/Doxyfile
|
||||
git init
|
||||
git add .
|
||||
git commit -m "initial commit"
|
||||
cd ..
|
||||
else
|
||||
echo "Missing argument: PROJECT"
|
||||
return -1
|
||||
end
|
||||
end
|
||||
complete -c cppnew -s h -l help -d 'Print Help'
|
||||
@@ -1,49 +0,0 @@
|
||||
function cppnew -d "Create new C++17 project" --argument-names 'projectname'
|
||||
if count $argv > /dev/null
|
||||
set conanproj "false"
|
||||
set projname ""
|
||||
set conanprojname ""
|
||||
for item in $argv
|
||||
switch "$item"
|
||||
case -c --conan
|
||||
set conanproj "true"
|
||||
set conanprojname $value
|
||||
case -h --help
|
||||
man ~/dev/fishfunctions/cppnew.man
|
||||
return 0
|
||||
case '*'
|
||||
set projname $item
|
||||
end
|
||||
end
|
||||
if [ "$projname" = "" ]
|
||||
if [ "$conanprojname" = "" ]
|
||||
echo "Missing argument: PROJECT"
|
||||
return -1
|
||||
end
|
||||
end
|
||||
if [ "$projname" = "" ]
|
||||
set projname $conanprojname
|
||||
end
|
||||
if [ "$conanproj" = "true" ]
|
||||
cp -r ~/dotfiles/dev/conan-project $projname
|
||||
else
|
||||
cp -r ~/dotfiles/dev/templateC++ $projname
|
||||
end
|
||||
cd $projname
|
||||
sed -i "s/PROJECTNAME/$projname/g" README.org
|
||||
sed -i "s/PROJECTNAME/$projname/g" CMakeLists.txt
|
||||
if [ "$conanproj" = "true" ]
|
||||
sed -i "s/PROJECTNAME/$projname/g" conanfile.py
|
||||
end
|
||||
sed -i "s/CPPPROJECTNAME/$projname/g" doc/Doxyfile
|
||||
git init
|
||||
git add .
|
||||
git commit -m "initial commit"
|
||||
cd ..
|
||||
else
|
||||
echo "Missing argument: PROJECT"
|
||||
return -1
|
||||
end
|
||||
end
|
||||
complete -c cppnew -s c -l conan -d 'Conan Project'
|
||||
complete -c cppnew -s h -l help -d 'Print Help'
|
||||
@@ -1,4 +0,0 @@
|
||||
function mkcd -d "Create directory and cd to it"
|
||||
mkdir -p $argv[1]
|
||||
cd $argv[1]
|
||||
end
|
||||
@@ -1,22 +0,0 @@
|
||||
function rainymood
|
||||
set volume 50
|
||||
getopts $argv | while read -l key option
|
||||
switch $key
|
||||
case v
|
||||
set volume $option
|
||||
case volume
|
||||
set volume $option
|
||||
end
|
||||
end
|
||||
if [ "$volume" != "" ]
|
||||
set FILE (math (random) % 4)
|
||||
set URL "https://rainymood.com/audio1112/$FILE.ogg"
|
||||
mpv $URL --force-window=no --volume=$volume; and rainymood
|
||||
else
|
||||
echo "Missing value after -v/--volume option."
|
||||
echo "Usage example:"
|
||||
printf "\trainymood -v50\n\trainymood --volume 50\n"
|
||||
return 1
|
||||
end
|
||||
end
|
||||
complete -c rainymood -s v -l volume -d 'Volume of the rain (0-100)'
|
||||
@@ -1,120 +1,132 @@
|
||||
# -*- indent-tabs-mode: t; -*-
|
||||
|
||||
[user]
|
||||
email = lucien@phundrak.com
|
||||
name = Lucien Cartier-Tilet
|
||||
signingkey = BD7789E705CB8DCA
|
||||
email = lucien@phundrak.com
|
||||
name = Lucien Cartier-Tilet
|
||||
signingkey = BD7789E705CB8DCA
|
||||
|
||||
[core]
|
||||
editor = emacsclient -c -a emacs
|
||||
whitespace = fix,-indent-with-non-tab,trailing-space
|
||||
excludesfile = /home/phundrak/dotfiles/.gitignore_global
|
||||
[web]
|
||||
browser = firefox
|
||||
[color]
|
||||
ui = auto
|
||||
[alias]
|
||||
a = add --all
|
||||
####
|
||||
b = branch
|
||||
####
|
||||
c = commit -S
|
||||
ca = commit -a
|
||||
cm = commit -m
|
||||
cam = commit -am
|
||||
####
|
||||
co = checkout
|
||||
cob = checkout -b
|
||||
####
|
||||
cl = clone
|
||||
cl1 = clone --depth=1
|
||||
####
|
||||
d = diff -w
|
||||
####
|
||||
l = log --oneline --graph --decorate
|
||||
####
|
||||
ps = push
|
||||
psf = push -f
|
||||
pso = push origin
|
||||
psfo = push -f origin
|
||||
psom = push origin master
|
||||
psfom = push -f origin master
|
||||
####
|
||||
pl = pull
|
||||
pb = pull --rebase
|
||||
####
|
||||
re = reset
|
||||
reh = reset --hard
|
||||
rehh = reset --hard HEAD
|
||||
####
|
||||
r = remote
|
||||
ra = remote add
|
||||
rr = remote rm
|
||||
###
|
||||
rmf = rm -f
|
||||
rmrf = rm -r -f
|
||||
####
|
||||
s = status
|
||||
sm = submodule
|
||||
sms = submodule status
|
||||
sma = submodule add
|
||||
smu = submodule update
|
||||
smui = submodule update --init
|
||||
smuir = submodule update --init --recursive
|
||||
####
|
||||
staged = diff --cached
|
||||
####
|
||||
sc = stash clear
|
||||
sp = stash pop
|
||||
sw = stash show
|
||||
####
|
||||
pushall = !git remote | xargs -L1 git push
|
||||
psl = !git remote | xargs -L1 git push
|
||||
pullall = !git remote | xargs -L1 git pull
|
||||
pll = !git remote | xargs -L1 git pull
|
||||
####
|
||||
u = reset --
|
||||
unstage = reset --
|
||||
[sendemail]
|
||||
smtpserver = mail.phundrak.com
|
||||
smtpuser = lucien@phundrak.com
|
||||
smtpencryption = tls
|
||||
smtpserverport = 587
|
||||
[magithub]
|
||||
online = true
|
||||
[magithub "status"]
|
||||
includeStatusHeader = true
|
||||
includePullRequestsSection = true
|
||||
includeIssuesSection = true
|
||||
[gpg]
|
||||
program = gpg2
|
||||
[mergetool.ediff]
|
||||
cmd = emacs --eval \" (progn (defun ediff-write-merge-buffer () (let ((file ediff-merge-store-file)) (set-buffer ediff-buffer-C) (write-region (point-min) (point-max) file) (message \\\"Merge buffer saved in: %s\\\" file) (set-buffer-modified-p nil) (sit-for 1))) (setq ediff-quit-hook 'kill-emacs ediff-quit-merge-hook 'ediff-write-merge-buffer) (ediff-merge-files-with-ancestor \\\"$LOCAL\\\" \\\"$REMOTE\\\" \\\"$BASE\\\" nil \\\"$MERGED\\\"))\"
|
||||
[merge]
|
||||
tool = ediff
|
||||
[github]
|
||||
user = phundrak
|
||||
[commit]
|
||||
gpgsign = true
|
||||
editor = emacsclient -c -a emacs
|
||||
whitespace = fix,-indent-with-non-tab,trailing-space
|
||||
excludesfile = /home/phundrak/.gitignore_global
|
||||
|
||||
[pull]
|
||||
rebase = false
|
||||
rebase = true
|
||||
|
||||
[init]
|
||||
defaultBranch = main
|
||||
defaultBranch = main
|
||||
|
||||
[pager]
|
||||
diff = delta
|
||||
log = delta
|
||||
reflog = delta
|
||||
show = delta
|
||||
[color]
|
||||
ui = auto
|
||||
|
||||
[interactive]
|
||||
diffFilter = delta --color-only
|
||||
[web]
|
||||
browser = firefox
|
||||
|
||||
[delta]
|
||||
features = side-by-side line-numbers decorations
|
||||
whitespace-error-style = 22 reverse
|
||||
[alias]
|
||||
a = add --all
|
||||
aca = !git add --all && git commit --amend
|
||||
acan = !git add --all && git commit --amend --no-edit
|
||||
b = branch
|
||||
bd = branch -d
|
||||
bdd = branch -D
|
||||
c = commit -S
|
||||
ca = commit -Sa
|
||||
can = commit -Sa --no-edit
|
||||
cm = commit -Sm
|
||||
cam = commit -Sam
|
||||
co = checkout
|
||||
cob = checkout -b
|
||||
cod = checkout develop
|
||||
cl = clone
|
||||
cl1 = clone --depth 1
|
||||
f = fetch
|
||||
fp = fetch --prune
|
||||
ps = push
|
||||
psf = push --force-with-lease
|
||||
pso = push origin
|
||||
psfo = push --force-with-lease origin
|
||||
pushall = !git remote | xargs -L1 git push
|
||||
psl = !git remote | xargs -L1 git push
|
||||
pullall = !git remote | xargs -L1 git pull
|
||||
pll = !git remote | xargs -L1 git pull
|
||||
pl = pull
|
||||
pb = pull --rebase
|
||||
r = rebase
|
||||
ra = rebase --abort
|
||||
rc = rebase --continue
|
||||
rd = rebase develop
|
||||
ri = rebase -i
|
||||
rmf = rm -f
|
||||
rmd = rm -r
|
||||
rmdf = rm -rf
|
||||
sm = submodule
|
||||
sms = submodule status
|
||||
sma = submodule add
|
||||
smu = submodule update
|
||||
smui = submodule update --init
|
||||
smuir = submodule update --init --recursive
|
||||
st = stash
|
||||
stc = stash clear
|
||||
stp = stash pop
|
||||
stw = stash show
|
||||
u = reset --
|
||||
unstage = reset --
|
||||
d = diff -w
|
||||
l = log --oneline --graph --decorate
|
||||
s = status
|
||||
staged = diff --cached
|
||||
upstream = !git push -u origin HEAD
|
||||
|
||||
[delta "decorations"]
|
||||
commit-decoration-style = bold yellow box ul
|
||||
file-style = bold yellow ul
|
||||
file-decoration-style = none
|
||||
[sendemail]
|
||||
smtpserver = mail.phundrak.com
|
||||
smtpuser = lucien@phundrak.com
|
||||
smtpencryption = tls
|
||||
smtpserverport = 587
|
||||
|
||||
[credentials "smtp://lucien@phundrak.com@mail.phundrak.com:587"]
|
||||
helper = "pass Email/lucien@phundrak.com | head -n1 | tr -d '\n'"
|
||||
helper = "secret-tool lookup password email_lucien-phundrak-com"
|
||||
|
||||
[magithub]
|
||||
online = true
|
||||
[magithub "status"]
|
||||
includeStatusHeader = true
|
||||
includePullRequestsSection = true
|
||||
includeIssuesSection = true
|
||||
|
||||
[gpg]
|
||||
program = gpg2
|
||||
[commit]
|
||||
gpgsign = true
|
||||
|
||||
[merge]
|
||||
tool = ediff
|
||||
|
||||
[mergetool.ediff]
|
||||
cmd = emacs --eval \" (progn (defun ediff-write-merge-buffer () (let ((file ediff-merge-store-file)) (set-buffer ediff-buffer-C) (write-region (point-min) (point-max) file) (message \\\"Merge buffer saved in: %s\\\" file) (set-buffer-modified-p nil) (sit-for 1))) (setq ediff-quit-hook 'kill-emacs ediff-quit-merge-hook 'ediff-write-merge-buffer) (ediff-merge-files-with-ancestor \\\"$LOCAL\\\" \\\"$REMOTE\\\" \\\"$BASE\\\" nil \\\"$MERGED\\\"))\"
|
||||
|
||||
[pager]
|
||||
diff = delta
|
||||
log = delta
|
||||
reflog = delta
|
||||
show = delta
|
||||
|
||||
[delta]
|
||||
features = side-by-side line-numbers decorations
|
||||
whitespace-error-style = 22 reverse
|
||||
|
||||
[delta "decorations"]
|
||||
commit-decoration-style = bold yellow box ul
|
||||
file-style = bold yellow ul
|
||||
file-decoration-style = none
|
||||
|
||||
[interactive]
|
||||
diffFilter = delta --color-only
|
||||
|
||||
[github]
|
||||
user = phundrak
|
||||
|
||||
[filter "lfs"]
|
||||
required = true
|
||||
clean = git-lfs clean -- %f
|
||||
smudge = git-lfs smudge -- %f
|
||||
process = git-lfs filter-process
|
||||
|
||||
@@ -404,7 +404,8 @@ initial_window_height 400
|
||||
#: suffix of "c" on the width/height values to have them interpreted
|
||||
#: as number of cells instead of pixels.
|
||||
|
||||
enabled_layouts *
|
||||
# enabled_layouts *
|
||||
enabled_layouts fat,fat:mirrored=true,tall,tall:mirrored=true
|
||||
|
||||
#: The enabled window layouts. A comma separated list of layout names.
|
||||
#: The special value all means all layouts. The first listed layout
|
||||
|
||||
@@ -21,8 +21,8 @@ audio/x-mod=mpv.desktop;
|
||||
audio/x-wav=mpv.desktop;
|
||||
image/bmp=nsxiv.desktop;nomacs.desktop;
|
||||
image/gif=nsxiv.desktop;nomacs.desktop;
|
||||
image/jpeg=nsxiv.desktop;nomacs.desktop;
|
||||
image/png=nsxiv.desktop;nomacs.desktop;
|
||||
image/jpeg=nsxiv.desktop;nomacs.desktop;com.github.weclaw1.ImageRoll.desktop;
|
||||
image/png=nsxiv.desktop;nomacs.desktop;com.github.weclaw1.ImageRoll.desktop;
|
||||
image/svg+xml=nsxiv.desktop;emacsclient.desktop;nomacs.desktop;org.nomacs.ImageLounge.desktop;org.inkscape.Inkscape.desktop;
|
||||
image/vnd.djvu+multipage=org.pwmt.zathura.desktop;
|
||||
image/webp=nsxiv.desktop;nomacs.desktop;
|
||||
@@ -51,6 +51,8 @@ x-scheme-handler/https=firefox.desktop;
|
||||
x-scheme-handler/mailto=mu4e.desktop
|
||||
application/vnd.openxmlformats-officedocument.wordprocessingml.document=libreoffice-writer.desktop;
|
||||
audio/x-ms-wma=mpv.desktop;
|
||||
application/x-mobipocket-ebook=FBReader.desktop;
|
||||
application/json=emacsclient.desktop;
|
||||
|
||||
[Default Applications]
|
||||
application/epub+zip=emacsclient.desktop
|
||||
@@ -62,14 +64,14 @@ application/xml=emacsclient.desktop
|
||||
audio/mpeg=mpv.desktop
|
||||
audio/x-mod=mpv.desktop
|
||||
audio/x-wav=mpv.desktop
|
||||
image/bmp=nsxiv.desktop
|
||||
image/gif=nsxiv.desktop
|
||||
image/jpeg=nsxiv.desktop
|
||||
image/png=nsxiv.desktop
|
||||
image/svg+xml=nsxiv.desktop
|
||||
image/bmp=com.github.weclaw1.ImageRoll.desktop
|
||||
image/gif=com.github.weclaw1.ImageRoll.desktop
|
||||
image/jpeg=com.github.weclaw1.ImageRoll.desktop
|
||||
image/png=com.github.weclaw1.ImageRoll.desktop
|
||||
image/svg+xml=com.github.weclaw1.ImageRoll.desktop
|
||||
image/vnd.djvu+multipage=org.pwmt.zathura.desktop
|
||||
image/webp=nsxiv.desktop
|
||||
image/x-canon-cr2=nsxiv.desktop
|
||||
image/webp=com.github.weclaw1.ImageRoll.desktop
|
||||
image/x-canon-cr2=com.github.weclaw1.ImageRoll.desktop
|
||||
inode/directory=nemo.desktop
|
||||
text/csv=emacsclient.desktop
|
||||
text/html=firefox.desktop
|
||||
@@ -93,3 +95,9 @@ x-scheme-handler/unknown=firefox.desktop
|
||||
application/vnd.openxmlformats-officedocument.wordprocessingml.document=libreoffice-writer.desktop
|
||||
x-scheme-handler/discord-693493612754763907=discord-693493612754763907.desktop
|
||||
audio/x-ms-wma=mpv.desktop
|
||||
x-scheme-handler/flashpoint=flashpoint-launcher.desktop
|
||||
x-scheme-handler/msteams=teams.desktop
|
||||
application/x-mobipocket-ebook=FBReader.desktop
|
||||
application/json=emacsclient.desktop
|
||||
modrinth=modrinth-app-handler.desktop
|
||||
x-scheme-handler/heroic=heroic.desktop
|
||||
|
||||
423
.config/newm/config.py
Normal file
@@ -0,0 +1,423 @@
|
||||
from __future__ import annotations
|
||||
from typing import Callable, Any
|
||||
|
||||
import os
|
||||
import time
|
||||
import logging
|
||||
import psutil
|
||||
import subprocess
|
||||
import dbus
|
||||
import docker
|
||||
|
||||
docker_client = docker.from_env()
|
||||
|
||||
from newm.layout import Layout
|
||||
from newm.helper import BacklightManager, WobRunner, PaCtl
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
debug_windows = False
|
||||
|
||||
|
||||
def run_shell(command: str):
|
||||
"""Run a shell command asynchronously
|
||||
If the shell command doesn't already end with "&", add it.
|
||||
"""
|
||||
if not command.endswith("&"):
|
||||
command = command + " &"
|
||||
os.system(command)
|
||||
|
||||
|
||||
def command_is_running(command: str):
|
||||
for proc in psutil.process_iter():
|
||||
try:
|
||||
cmdline = proc.cmdline()
|
||||
except psutil.NoSuchProcess:
|
||||
continue
|
||||
if command in cmdline[0]:
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def on_reconfigure():
|
||||
run_shell('notify-send newm "Reloaded config"')
|
||||
|
||||
|
||||
def on_startup():
|
||||
run_shell("mpc stop")
|
||||
run_shell("dunst")
|
||||
run_shell("pactl load-module module-switch-on-connect")
|
||||
run_shell("xfce-polkit")
|
||||
run_shell("kdeconnectd")
|
||||
os.system(
|
||||
"systemctl --user import-environment DISPLAY \
|
||||
WAYLAND_DISPLAY XDG_CURRENT_DESKTOP"
|
||||
)
|
||||
os.system(
|
||||
"dbus-update-activation-environment && \
|
||||
dbus-update-activation-environment --systemd DISPLAY \
|
||||
WAYLAND_DISPLAY XDG_CURRENT_DESKTOP"
|
||||
)
|
||||
|
||||
|
||||
with open("{}/.cache/wallpaper".format(os.environ["HOME"])) as wp_cache:
|
||||
background = {
|
||||
"path": wp_cache.read().strip(),
|
||||
"anim": True,
|
||||
}
|
||||
|
||||
pywm = {
|
||||
"xkb_layout": "fr",
|
||||
"xkb_variant": "bepo_afnor",
|
||||
"xkb_options": "caps:ctrl_modifier",
|
||||
"enable_xwayland": True,
|
||||
"natural_scroll": False,
|
||||
"focus_follows_mouse": True,
|
||||
"encourage_csd": False,
|
||||
}
|
||||
|
||||
outputs = [
|
||||
{"name": "eDP-1", "mHz": 120_000},
|
||||
{
|
||||
"name": "HDMI-A-1",
|
||||
"pos_x": -2560,
|
||||
"pos_y": 0,
|
||||
"width": 2560,
|
||||
"height": 1080,
|
||||
},
|
||||
]
|
||||
|
||||
wob_runner = WobRunner("wob -a bottom -M 100")
|
||||
backlight_manager = BacklightManager(anim_time=1.0, bar_display=wob_runner)
|
||||
kbdlight_manager = BacklightManager(
|
||||
args="--device='*::kbd_backlight'", anim_time=1.0, bar_display=wob_runner
|
||||
)
|
||||
|
||||
|
||||
def synchronous_update() -> None:
|
||||
backlight_manager.update()
|
||||
kbdlight_manager.update()
|
||||
|
||||
|
||||
def rules(m_view):
|
||||
blur_apps = ("kitty", "wofi", "rofi", "emacsclient", "emacs")
|
||||
float_apps = ("Rofi", "xfce-polkit")
|
||||
nonfloat_apps = ("discord", "Discord")
|
||||
m_rules = {}
|
||||
if m_view.app_id in blur_apps:
|
||||
m_rules.update({"blur": {"radius": 6, "passes": 2}})
|
||||
if m_view.app_id in float_apps:
|
||||
m_rules.update({"float": True})
|
||||
if m_view.app_id in nonfloat_apps:
|
||||
m_rules.update({"float": False})
|
||||
if debug_windows:
|
||||
with open("/tmp/newm_windows.txt", "a", encoding="utf-8") as file:
|
||||
file.write(f"{str(m_view.app_id)}\t{m_rules}\n")
|
||||
return m_rules
|
||||
|
||||
|
||||
pactl = PaCtl(0, wob_runner)
|
||||
|
||||
focus = {
|
||||
"animate_on_change": False,
|
||||
"distance": 6,
|
||||
"width": 2,
|
||||
"color": "#5E81ACDD",
|
||||
"anim_time": 0.1,
|
||||
}
|
||||
|
||||
view = {
|
||||
"corner_radius": 8,
|
||||
"padding": 20,
|
||||
"rules": rules,
|
||||
"floating_min_size": False,
|
||||
}
|
||||
|
||||
|
||||
leader: str = "L-Spc "
|
||||
|
||||
|
||||
def key_bindings(layout: Layout) -> list[tuple[str, Callable[[], Any]]]:
|
||||
return [
|
||||
("L-Return", lambda: os.system("kitty &")),
|
||||
(leader + "a r b", lambda: run_shell("bluetooth-connect")),
|
||||
(
|
||||
leader + "a r r",
|
||||
lambda: run_shell("rofi -combi-modi drun,window -show combi"),
|
||||
),
|
||||
(leader + "a b", lambda: run_shell("firefox")),
|
||||
(leader + "a d", lambda: run_shell("discord")),
|
||||
(leader + "a e", lambda: run_shell("emacsclient -c")),
|
||||
(leader + "l", layout.ensure_locked),
|
||||
(leader + "w f", layout.toggle_fullscreen),
|
||||
(leader + "w v", layout.toggle_focused_view_floating),
|
||||
(leader + "w +", lambda: layout.basic_scale(1)),
|
||||
(leader + "w -", lambda: layout.basic_scale(-1)),
|
||||
("L-o", layout.move_workspace),
|
||||
("L-O", layout.move_workspace),
|
||||
(leader + "w c", lambda: layout.move(-1, 0)),
|
||||
(leader + "w t", lambda: layout.move(0, 1)),
|
||||
(leader + "w s", lambda: layout.move(0, -1)),
|
||||
(leader + "w r", lambda: layout.move(1, 0)),
|
||||
(leader + "w n", lambda: layout.move_in_stack(1)),
|
||||
("L-Tab", lambda: layout.move_in_stack(1)),
|
||||
(leader + "w p", lambda: layout.move_in_stack(-1)),
|
||||
(leader + "w C", lambda: layout.move_focused_view(-1, 0)),
|
||||
(leader + "w T", lambda: layout.move_focused_view(0, 1)),
|
||||
(leader + "w S", lambda: layout.move_focused_view(0, -1)),
|
||||
(leader + "w R", lambda: layout.move_focused_view(1, 0)),
|
||||
(leader + "b d", layout.close_focused_view),
|
||||
(leader + "q l", lambda: layout.ensure_locked(dim=False)),
|
||||
(leader + "q q", layout.terminate),
|
||||
(leader + "u", layout.update_config),
|
||||
("L-c", lambda: layout.move(-1, 0)),
|
||||
("L-t", lambda: layout.move(0, 1)),
|
||||
("L-s", lambda: layout.move(0, -1)),
|
||||
("L-r", lambda: layout.move(1, 0)),
|
||||
("L-plus", lambda: layout.basic_scale(-1)),
|
||||
("L-minus", lambda: layout.basic_scale(1)),
|
||||
("L-C", lambda: layout.move_focused_view(-1, 0)),
|
||||
("L-T", lambda: layout.move_focused_view(0, 1)),
|
||||
("L-S", lambda: layout.move_focused_view(0, -1)),
|
||||
("L-R", lambda: layout.move_focused_view(1, 0)),
|
||||
(leader + "w r c", lambda: layout.resize_focused_view(-1, 0)),
|
||||
(leader + "w r t", lambda: layout.resize_focused_view(0, 1)),
|
||||
(leader + "w r s", lambda: layout.resize_focused_view(0, -1)),
|
||||
(leader + "w r r", lambda: layout.resize_focused_view(1, 0)),
|
||||
("L-", lambda: layout.toggle_overview(only_active_workspace=True)),
|
||||
(
|
||||
"XF86MonBrightnessUp",
|
||||
lambda: backlight_manager.set(backlight_manager.get() + 0.1),
|
||||
),
|
||||
(
|
||||
"XF86MonBrightnessDown",
|
||||
lambda: backlight_manager.set(backlight_manager.get() - 0.1),
|
||||
),
|
||||
(
|
||||
"XF86KbdBrightnessUp",
|
||||
lambda: kbdlight_manager.set(kbdlight_manager.get() + 0.1),
|
||||
),
|
||||
(
|
||||
"XF86KbdBrightnessDown",
|
||||
lambda: kbdlight_manager.set(kbdlight_manager.get() - 0.1),
|
||||
),
|
||||
("XF86AudioPlay", lambda: run_shell("playerctl play-pause")),
|
||||
("XF86AudioPause", lambda: run_shell("playerctl pause")),
|
||||
("XF86AudioStop", lambda: run_shell("playerctl stop")),
|
||||
("XF86AudioPrev", lambda: run_shell("playerctl previous")),
|
||||
("XF86AudioNext", lambda: run_shell("playerctl next")),
|
||||
("XF86AudioForward", lambda: run_shell("playerctl position +1")),
|
||||
("XF86AudioRewind", lambda: run_shell("playerctl position -1")),
|
||||
("XF86AudioRaiseVolume", lambda: pactl.volume_adj(5)),
|
||||
("XF86AudioLowerVolume", lambda: pactl.volume_adj(-5)),
|
||||
("XF86AudioMute", pactl.mute),
|
||||
("Print", lambda: run_shell("env XDG_CURRENT_DESKTOP=Sway flameshot gui")),
|
||||
]
|
||||
|
||||
|
||||
battery_icons = {
|
||||
100: {True: "", False: ""},
|
||||
90: {True: "", False: ""},
|
||||
80: {True: "", False: ""},
|
||||
70: {True: "", False: ""},
|
||||
60: {True: "", False: ""},
|
||||
50: {True: "", False: ""},
|
||||
40: {True: "", False: ""},
|
||||
30: {True: "", False: ""},
|
||||
20: {True: "", False: ""},
|
||||
10: {True: "", False: ""},
|
||||
0: {True: "", False: ""},
|
||||
}
|
||||
|
||||
|
||||
def battery_status() -> str:
|
||||
battery = psutil.sensors_battery()
|
||||
percent = format(battery.percent, ".1f")
|
||||
minutes = battery.secsleft // 60
|
||||
remaining = "{0:0>2}:{1:0>2}".format(minutes // 60, minutes % 60)
|
||||
icon = battery_icons[(int(float(percent)) // 10) * 10][battery.power_plugged]
|
||||
return f"{icon} {percent}% ({remaining})"
|
||||
|
||||
|
||||
def unread_emails() -> str:
|
||||
unread = subprocess.run(
|
||||
["mu", "find", "flag:unread AND (maildir:/Inbox OR maildir:/Junk)"],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
check=True,
|
||||
).stdout
|
||||
nbr_unread: int = len(str(unread).strip().split("\n"))
|
||||
return f" {nbr_unread}"
|
||||
|
||||
|
||||
def cpu_usage() -> str:
|
||||
cpu: str = format(psutil.cpu_percent(interval=1), ".1f")
|
||||
return f" {cpu}%"
|
||||
|
||||
|
||||
def mem_usage() -> str:
|
||||
mem: str = format(psutil.virtual_memory().percent, ".1f")
|
||||
return f" {mem}%"
|
||||
|
||||
|
||||
def get_bluetooth_devices() -> str:
|
||||
import xml.etree.ElementTree as ET
|
||||
|
||||
bus = dbus.SystemBus()
|
||||
service_name = "org.bluez"
|
||||
|
||||
# Verify if bluetooth is turned on
|
||||
proxy = bus.get_object(service_name, "/org/bluez/hci0")
|
||||
props = dbus.Interface(proxy, "org.freedesktop.DBus.Properties")
|
||||
if not props.Get("org.bluez.Adapter1", "Powered"):
|
||||
return ""
|
||||
|
||||
# Grab all known devices
|
||||
bt_intro_iface = dbus.Interface(proxy, "org.freedesktop.DBus.Introspectable")
|
||||
bt_intro = str(bt_intro_iface.Introspect())
|
||||
root_node = ET.fromstring(bt_intro)
|
||||
known_devices = [n.get("name") for n in root_node.findall("node")]
|
||||
|
||||
# Check if all devices are connected
|
||||
counter = 0
|
||||
for device in known_devices:
|
||||
object_path = f"/org/bluez/hci0/{device}"
|
||||
proxy = bus.get_object(service_name, object_path)
|
||||
props = dbus.Interface(proxy, "org.freedesktop.DBus.Properties")
|
||||
if props.Get("org.bluez.Device1", "Connected"):
|
||||
counter = counter + 1
|
||||
return f" {counter}"
|
||||
|
||||
|
||||
def get_wifi_name(iface) -> str:
|
||||
bus = dbus.SystemBus()
|
||||
service_name = "org.freedesktop.NetworkManager"
|
||||
proxy = bus.get_object(service_name, "/org/freedesktop/NetworkManager/Settings")
|
||||
|
||||
# Get the device object path based on interface name
|
||||
proxy = bus.get_object(service_name, "/org/freedesktop/NetworkManager")
|
||||
nm = dbus.Interface(proxy, "org.freedesktop.NetworkManager")
|
||||
devpath = nm.GetDeviceByIpIface(iface)
|
||||
|
||||
# Get a proxy to the wifi device and get the active access point's object path
|
||||
proxy = bus.get_object(service_name, devpath)
|
||||
props = dbus.Interface(proxy, "org.freedesktop.DBus.Properties")
|
||||
active_ap_path = props.Get(
|
||||
"org.freedesktop.NetworkManager.Device.Wireless", "ActiveAccessPoint"
|
||||
)
|
||||
if active_ap_path == "/":
|
||||
return ""
|
||||
|
||||
# Get the active access point's SSID and BSSID
|
||||
ap_proxy = bus.get_object(service_name, active_ap_path)
|
||||
ap_props = dbus.Interface(ap_proxy, "org.freedesktop.DBus.Properties")
|
||||
raw_ssid = ap_props.Get("org.freedesktop.NetworkManager.AccessPoint", "Ssid")
|
||||
ssid = b"".join([bytes([v]) for v in raw_ssid]).decode("utf-8")
|
||||
return ssid
|
||||
|
||||
|
||||
def get_local_address(wifi_iface, eth_iface) -> str:
|
||||
if_addrs = psutil.net_if_addrs()
|
||||
wifi = if_addrs.get(wifi_iface)
|
||||
eth = if_addrs.get(eth_iface)
|
||||
wifi_addr = wifi[0].address if wifi else ""
|
||||
eth_addr = eth[0].address if eth else ""
|
||||
wifi_addr = wifi_addr if not ":" in wifi_addr else ""
|
||||
eth_addr = eth_addr if not ":" in eth_addr else ""
|
||||
return wifi_addr or eth_addr
|
||||
|
||||
|
||||
def get_network() -> str:
|
||||
wifi_interface = "wlp8s0"
|
||||
eth_interface = "enp9s0f1"
|
||||
network_name = get_wifi_name(wifi_interface)
|
||||
network_name = f" {network_name}" if network_name else " eth"
|
||||
addr = get_local_address(wifi_interface, eth_interface)
|
||||
return f"{network_name} ({addr})" if addr else "睊 disconnected"
|
||||
|
||||
|
||||
def get_playerctl_bus():
|
||||
bus = dbus.SessionBus()
|
||||
service_name = "org.mpris.MediaPlayer2.playerctld"
|
||||
service_props = "org.mpris.MediaPlayer2.Player"
|
||||
proxy = bus.get_object(service_name, "/org/mpris/MediaPlayer2")
|
||||
return (service_props, proxy)
|
||||
|
||||
|
||||
def get_currently_playing():
|
||||
(service_props, proxy) = get_playerctl_bus()
|
||||
props = dbus.Interface(proxy, "org.freedesktop.DBus.Properties")
|
||||
metadata = props.Get(service_props, "Metadata")
|
||||
status = str(props.Get(service_props, "PlaybackStatus"))
|
||||
if status != "Playing":
|
||||
return ""
|
||||
artist = ", ".join(metadata.get("xesam:artist"))
|
||||
title = metadata.get("xesam:title")
|
||||
return f" {artist} — {title}"
|
||||
|
||||
|
||||
def display_docker() -> str:
|
||||
containers = docker_client.containers.list(sparse=True)
|
||||
return f" {len(containers)}"
|
||||
|
||||
|
||||
def get_time() -> str:
|
||||
return time.strftime("%a %Y-%m-%d %X")
|
||||
|
||||
|
||||
def bar_text() -> str:
|
||||
return " | ".join(
|
||||
[
|
||||
f
|
||||
for f in [
|
||||
get_currently_playing(),
|
||||
# get_network(),
|
||||
display_docker(),
|
||||
# get_bluetooth_devices(),
|
||||
unread_emails(),
|
||||
cpu_usage(),
|
||||
mem_usage(),
|
||||
get_time(),
|
||||
battery_status(),
|
||||
]
|
||||
if f
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
def max_width(strings: list[str]) -> int:
|
||||
r_max_width: int = 0
|
||||
for s in strings:
|
||||
if len(s) > r_max_width:
|
||||
r_max_width = len(s)
|
||||
return r_max_width
|
||||
|
||||
|
||||
panels = {
|
||||
"lock": {
|
||||
"cmd": "kitty -e newm-panel-basic lock",
|
||||
},
|
||||
"launcher": {"cmd": "kitty -e newm-panel-basic launcher"},
|
||||
"top_bar": {
|
||||
"native": {
|
||||
"font": "JetBrainsMono Nerd Font",
|
||||
"enabled": True,
|
||||
"texts": lambda: [
|
||||
bar_text(),
|
||||
],
|
||||
},
|
||||
},
|
||||
"bottom_bar": {
|
||||
"native": {
|
||||
"enabled": False,
|
||||
"texts": lambda: ["newm", "powered by pywm"],
|
||||
"color": (0.5, 0.5, 0.5, 0.1),
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
energy = {
|
||||
"idle_callback": backlight_manager.callback,
|
||||
"idle_times": [5 * 60, 30 * 60, 24 * 60 * 60],
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
# pylint: disable=C0111
|
||||
from qutebrowser.config.configfiles import ConfigAPI # noqa: F401
|
||||
from qutebrowser.config.config import ConfigContainer # noqa: F401
|
||||
|
||||
config: ConfigAPI = config # noqa: F821 pylint: disable=E0602,C0103
|
||||
c: ConfigContainer = c # noqa: F821 pylint: disable=E0602,C0103
|
||||
|
||||
@@ -19,19 +20,19 @@ c.content.autoplay = False
|
||||
# Type: List of Url
|
||||
c.content.blocking.adblock.lists = [
|
||||
# AdBlock sources
|
||||
'https://easylist.to/easylist/easylist.txt',
|
||||
'https://easylist.to/easylist/easyprivacy.txt'
|
||||
"https://easylist.to/easylist/easylist.txt",
|
||||
"https://easylist.to/easylist/easyprivacy.txt"
|
||||
# uBlock sources
|
||||
'https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/annoyances.txt',
|
||||
'https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/badlists.txt',
|
||||
'https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/badware.txt',
|
||||
'https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/filters.txt',
|
||||
'https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/filters-2020.txt',
|
||||
'https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/filters-2021.txt',
|
||||
'https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/lan-block.txt',
|
||||
'https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/privacy.txt',
|
||||
'https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/resource-abuse.txt',
|
||||
'https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/unbreak.txt',
|
||||
"https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/annoyances.txt",
|
||||
"https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/badlists.txt",
|
||||
"https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/badware.txt",
|
||||
"https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/filters.txt",
|
||||
"https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/filters-2020.txt",
|
||||
"https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/filters-2021.txt",
|
||||
"https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/lan-block.txt",
|
||||
"https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/privacy.txt",
|
||||
"https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/resource-abuse.txt",
|
||||
"https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/unbreak.txt",
|
||||
]
|
||||
|
||||
# Enable the ad/host blocker
|
||||
@@ -55,7 +56,7 @@ c.content.blocking.hosts.block_subdomains = True
|
||||
# if it exists.
|
||||
# Type: List of Url
|
||||
c.content.blocking.hosts.lists = [
|
||||
'https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts',
|
||||
"https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts",
|
||||
]
|
||||
|
||||
# Which method of blocking ads should be used. Support for Adblock Plus
|
||||
@@ -69,7 +70,7 @@ c.content.blocking.hosts.lists = [
|
||||
# - adblock: Use Brave's ABP-style adblocker
|
||||
# - hosts: Use hosts blocking
|
||||
# - both: Use both hosts blocking and Brave's ABP-style adblocker
|
||||
c.content.blocking.method = 'auto'
|
||||
c.content.blocking.method = "auto"
|
||||
|
||||
# A list of patterns that should always be loaded, despite being blocked
|
||||
# by the ad-/host-blocker. Local domains are always exempt from
|
||||
@@ -133,7 +134,7 @@ c.content.canvas_reading = True
|
||||
# - no-3rdparty: Accept cookies from the same origin only. This is known to break some sites, such as GMail.
|
||||
# - no-unknown-3rdparty: Accept cookies from the same origin only, unless a cookie is already set for the domain. On QtWebEngine, this is the same as no-3rdparty.
|
||||
# - never: Don't accept cookies at all.
|
||||
c.content.cookies.accept = 'all'
|
||||
c.content.cookies.accept = "all"
|
||||
|
||||
# Store cookies.
|
||||
# Type: Bool
|
||||
@@ -142,7 +143,7 @@ c.content.cookies.store = True
|
||||
# Default encoding to use for websites. The encoding must be a string
|
||||
# describing an encoding such as _utf-8_, _iso-8859-1_, etc.
|
||||
# Type: String
|
||||
c.content.default_encoding = 'utf-8'
|
||||
c.content.default_encoding = "utf-8"
|
||||
|
||||
# Allow websites to share screen content.
|
||||
# Type: BoolAsk
|
||||
@@ -150,7 +151,7 @@ c.content.default_encoding = 'utf-8'
|
||||
# - true
|
||||
# - false
|
||||
# - ask
|
||||
c.content.desktop_capture = 'ask'
|
||||
c.content.desktop_capture = "ask"
|
||||
|
||||
# Try to pre-fetch DNS entries to speed up browsing.
|
||||
# Type: Bool
|
||||
@@ -177,7 +178,7 @@ c.content.fullscreen.window = True
|
||||
# - true
|
||||
# - false
|
||||
# - ask
|
||||
c.content.geolocation = 'ask'
|
||||
c.content.geolocation = "ask"
|
||||
|
||||
# Value to send in the `Accept-Language` header. Note that the value
|
||||
# read from JavaScript is always the global value.
|
||||
@@ -206,7 +207,7 @@ c.content.headers.do_not_track = True
|
||||
# - always: Always send the Referer.
|
||||
# - never: Never send the Referer. This is not recommended, as some sites may break.
|
||||
# - same-domain: Only send the Referer for the same domain. This will still protect your privacy, but shouldn't break any sites. With QtWebEngine, the referer will still be sent for other domains, but with stripped path information.
|
||||
c.content.headers.referer = 'same-domain'
|
||||
c.content.headers.referer = "same-domain"
|
||||
|
||||
# User agent to send. The following placeholders are defined: *
|
||||
# `{os_info}`: Something like "X11; Linux x86_64". * `{webkit_version}`:
|
||||
@@ -222,7 +223,7 @@ c.content.headers.referer = 'same-domain'
|
||||
# between 5.12 and 5.14 (inclusive), changing the value exposed to
|
||||
# JavaScript requires a restart.
|
||||
# Type: FormatString
|
||||
c.content.headers.user_agent = 'Mozilla/5.0 ({os_info}) AppleWebKit/{webkit_version} (KHTML, like Gecko) {qt_key}/{qt_version} {upstream_browser_key}/{upstream_browser_version} Safari/{webkit_version}'
|
||||
c.content.headers.user_agent = "Mozilla/5.0 ({os_info}) AppleWebKit/{webkit_version} (KHTML, like Gecko) {qt_key}/{qt_version} {upstream_browser_key}/{upstream_browser_version} Safari/{webkit_version}"
|
||||
|
||||
# Enable hyperlink auditing (`<a ping>`).
|
||||
# Type: Bool
|
||||
@@ -236,12 +237,6 @@ c.content.images = True
|
||||
# Type: Bool
|
||||
c.content.javascript.alert = True
|
||||
|
||||
# Allow JavaScript to read from or write to the clipboard. With
|
||||
# QtWebEngine, writing the clipboard as response to a user interaction
|
||||
# is always allowed.
|
||||
# Type: Bool
|
||||
c.content.javascript.can_access_clipboard = False
|
||||
|
||||
# Allow JavaScript to close tabs.
|
||||
# Type: Bool
|
||||
c.content.javascript.can_close_tabs = False
|
||||
@@ -295,7 +290,7 @@ c.content.local_storage = True
|
||||
# - true
|
||||
# - false
|
||||
# - ask
|
||||
c.content.media.audio_capture = 'ask'
|
||||
c.content.media.audio_capture = "ask"
|
||||
|
||||
# Allow websites to record audio and video.
|
||||
# Type: BoolAsk
|
||||
@@ -303,7 +298,7 @@ c.content.media.audio_capture = 'ask'
|
||||
# - true
|
||||
# - false
|
||||
# - ask
|
||||
c.content.media.audio_video_capture = 'ask'
|
||||
c.content.media.audio_video_capture = "ask"
|
||||
|
||||
# Allow websites to record video.
|
||||
# Type: BoolAsk
|
||||
@@ -311,7 +306,7 @@ c.content.media.audio_video_capture = 'ask'
|
||||
# - true
|
||||
# - false
|
||||
# - ask
|
||||
c.content.media.video_capture = 'ask'
|
||||
c.content.media.video_capture = "ask"
|
||||
|
||||
# Allow websites to lock your mouse pointer.
|
||||
# Type: BoolAsk
|
||||
@@ -319,7 +314,7 @@ c.content.media.video_capture = 'ask'
|
||||
# - true
|
||||
# - false
|
||||
# - ask
|
||||
c.content.mouse_lock = 'ask'
|
||||
c.content.mouse_lock = "ask"
|
||||
|
||||
# Automatically mute tabs. Note that if the `:tab-mute` command is used,
|
||||
# the mute status for the affected tab is now controlled manually, and
|
||||
@@ -337,7 +332,7 @@ c.content.netrc_file = None
|
||||
# - true
|
||||
# - false
|
||||
# - ask
|
||||
c.content.notifications.enabled = 'ask'
|
||||
c.content.notifications.enabled = "ask"
|
||||
|
||||
# What notification presenter to use for web notifications. Note that
|
||||
# not all implementations support all features of notifications: - With
|
||||
@@ -357,7 +352,7 @@ c.content.notifications.enabled = 'ask'
|
||||
# - systray: Use a notification presenter based on a systray icon. Falls back to `libnotify` or `messages` if not systray is available. This is a reimplementation of the `qt` setting value, but with the possibility to switch to it at runtime.
|
||||
# - messages: Show notifications as qutebrowser messages. Most notification features aren't available.
|
||||
# - herbe: (experimental!) Show notifications using herbe (github.com/dudik/herbe). Most notification features aren't available.
|
||||
c.content.notifications.presenter = 'auto'
|
||||
c.content.notifications.presenter = "auto"
|
||||
|
||||
# Whether to show the origin URL for notifications. Note that URL
|
||||
# patterns with this setting only get matched against the origin part of
|
||||
@@ -379,7 +374,7 @@ c.content.pdfjs = True
|
||||
# - true
|
||||
# - false
|
||||
# - ask
|
||||
c.content.persistent_storage = 'ask'
|
||||
c.content.persistent_storage = "ask"
|
||||
|
||||
# Enable plugins in Web pages.
|
||||
# Type: Bool
|
||||
@@ -411,7 +406,7 @@ c.content.private_browsing = False
|
||||
# Valid values:
|
||||
# - system: Use the system wide proxy.
|
||||
# - none: Don't use any proxy
|
||||
c.content.proxy = 'system'
|
||||
c.content.proxy = "system"
|
||||
|
||||
# Send DNS requests over the configured proxy.
|
||||
# Type: Bool
|
||||
@@ -424,7 +419,7 @@ c.content.proxy_dns_requests = True
|
||||
# - true
|
||||
# - false
|
||||
# - ask
|
||||
c.content.register_protocol_handler = 'ask'
|
||||
c.content.register_protocol_handler = "ask"
|
||||
|
||||
# Enable quirks (such as faked user agent headers) needed to get
|
||||
# specific sites to work properly.
|
||||
@@ -448,7 +443,7 @@ c.content.site_specific_quirks.enabled = True
|
||||
# - js-object-fromentries
|
||||
# - misc-krunker
|
||||
# - misc-mathml-darkmode
|
||||
c.content.site_specific_quirks.skip = ['js-string-replaceall']
|
||||
c.content.site_specific_quirks.skip = ["js-string-replaceall"]
|
||||
|
||||
# How to proceed on TLS certificate errors.
|
||||
# Type: String
|
||||
@@ -457,7 +452,7 @@ c.content.site_specific_quirks.skip = ['js-string-replaceall']
|
||||
# - ask-block-thirdparty: Ask how to proceed for normal page loads, but silently block resource loads.
|
||||
# - block: Automatically block loading on certificate errors.
|
||||
# - load-insecurely: Force loading pages despite certificate errors. This is *insecure* and should be avoided. Instead of using this, consider fixing the underlying issue or importing a self-signed certificate via `certutil` (or Chromium) instead.
|
||||
c.content.tls.certificate_errors = 'ask'
|
||||
c.content.tls.certificate_errors = "ask"
|
||||
|
||||
# How navigation requests to URLs with unknown schemes are handled.
|
||||
# Type: String
|
||||
@@ -465,7 +460,7 @@ c.content.tls.certificate_errors = 'ask'
|
||||
# - disallow: Disallows all navigation requests to URLs with unknown schemes.
|
||||
# - allow-from-user-interaction: Allows navigation requests to URLs with unknown schemes that are issued from user-interaction (like a mouse-click), whereas other navigation requests (for example from JavaScript) are suppressed.
|
||||
# - allow-all: Allows all navigation requests to URLs with unknown schemes.
|
||||
c.content.unknown_url_scheme_policy = 'allow-from-user-interaction'
|
||||
c.content.unknown_url_scheme_policy = "allow-from-user-interaction"
|
||||
|
||||
# List of user stylesheet filenames to use.
|
||||
# Type: List of File, or File
|
||||
@@ -482,7 +477,7 @@ c.content.webgl = True
|
||||
# - default-public-and-private-interfaces: WebRTC should only use the default route used by http. This also exposes the associated default private address. Default route is the route chosen by the OS on a multi-homed endpoint.
|
||||
# - default-public-interface-only: WebRTC should only use the default route used by http. This doesn't expose any local addresses.
|
||||
# - disable-non-proxied-udp: WebRTC should only use TCP to contact peers or servers unless the proxy server supports UDP. This doesn't expose any local addresses either.
|
||||
c.content.webrtc_ip_handling_policy = 'all-interfaces'
|
||||
c.content.webrtc_ip_handling_policy = "all-interfaces"
|
||||
|
||||
# Monitor load requests for cross-site scripting attempts. Suspicious
|
||||
# scripts will be blocked and reported in the devtools JavaScript
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
# pylint: disable=C0111
|
||||
from qutebrowser.config.configfiles import ConfigAPI # noqa: F401
|
||||
from qutebrowser.config.config import ConfigContainer # noqa: F401
|
||||
|
||||
config: ConfigAPI = config # noqa: F821 pylint: disable=E0602,C0103
|
||||
c: ConfigContainer = c # noqa: F821 pylint: disable=E0602,C0103
|
||||
|
||||
@@ -8,354 +9,385 @@ c: ConfigContainer = c # noqa: F821 pylint: disable=E0602,C0103
|
||||
# config.bind(',d', 'spawn ytdl {url}')
|
||||
|
||||
# bookmarks
|
||||
config.bind(',ba', 'bookmark-add')
|
||||
config.bind(',bb', 'set-cmd-text -s :bookmark-load')
|
||||
config.bind(',bl', 'bookmark-list')
|
||||
config.bind(',bj', 'bookmark-list --jump')
|
||||
config.bind(',bt', 'set-cmd-text -s :bookmark-load -t')
|
||||
config.bind(',bw', 'set-cmd-text -s :bookmark-load -w')
|
||||
config.bind(',bql', 'set-cmd-text -s :quickmark-load')
|
||||
config.bind(',bqL', 'set-cmd-text -s :quickmark-load -t')
|
||||
config.bind(',bqs', 'quickmark-save')
|
||||
config.bind(',bqw', 'set-cmd-text -s :quickmark-load -w')
|
||||
config.bind(",ba", "bookmark-add")
|
||||
config.bind(",bb", "cmd-set-text -s :bookmark-load")
|
||||
config.bind(",bl", "bookmark-list")
|
||||
config.bind(",bj", "bookmark-list --jump")
|
||||
config.bind(",bt", "cmd-set-text -s :bookmark-load -t")
|
||||
config.bind(",bw", "cmd-set-text -s :bookmark-load -w")
|
||||
config.bind(",bql", "cmd-set-text -s :quickmark-load")
|
||||
config.bind(",bqL", "cmd-set-text -s :quickmark-load -t")
|
||||
config.bind(",bqs", "quickmark-save")
|
||||
config.bind(",bqw", "cmd-set-text -s :quickmark-load -w")
|
||||
|
||||
# config cycle
|
||||
config.bind(',cCH', 'config-cycle -p -u *://*.{url:host}/* content.cookies.accept all no-3rdparty never ;; reload')
|
||||
config.bind(',cCh', 'config-cycle -p -u *://{url:host}/* content.cookies.accept all no-3rdparty never ;; reload')
|
||||
config.bind(',cCu', 'config-cycle -p -u {url} content.cookies.accept all no-3rdparty never ;; reload')
|
||||
config.bind(',cIH', 'config-cycle -p -u *://*.{url:host}/* content.images ;; reload')
|
||||
config.bind(',cIh', 'config-cycle -p -u *://{url:host}/* content.images ;; reload')
|
||||
config.bind(',cIu', 'config-cycle -p -u {url} content.images ;; reload')
|
||||
config.bind(',cPH', 'config-cycle -p -u *://*.{url:host}/* content.plugins ;; reload')
|
||||
config.bind(',cPh', 'config-cycle -p -u *://{url:host}/* content.plugins ;; reload')
|
||||
config.bind(',cPu', 'config-cycle -p -u {url} content.plugins ;; reload')
|
||||
config.bind(',cSH', 'config-cycle -p -u *://*.{url:host}/* content.javascript.enabled ;; reload')
|
||||
config.bind(',cSh', 'config-cycle -p -u *://{url:host}/* content.javascript.enabled ;; reload')
|
||||
config.bind(',cSu', 'config-cycle -p -u {url} content.javascript.enabled ;; reload')
|
||||
config.bind(',ccH', 'config-cycle -p -t -u *://*.{url:host}/* content.cookies.accept all no-3rdparty never ;; reload')
|
||||
config.bind(',cch', 'config-cycle -p -t -u *://{url:host}/* content.cookies.accept all no-3rdparty never ;; reload')
|
||||
config.bind(',ccu', 'config-cycle -p -t -u {url} content.cookies.accept all no-3rdparty never ;; reload')
|
||||
config.bind(',ch', 'back -t')
|
||||
config.bind(',ciH', 'config-cycle -p -t -u *://*.{url:host}/* content.images ;; reload')
|
||||
config.bind(',cih', 'config-cycle -p -t -u *://{url:host}/* content.images ;; reload')
|
||||
config.bind(',ciu', 'config-cycle -p -t -u {url} content.images ;; reload')
|
||||
config.bind(',cl', 'forward -t')
|
||||
config.bind(',cpH', 'config-cycle -p -t -u *://*.{url:host}/* content.plugins ;; reload')
|
||||
config.bind(',cph', 'config-cycle -p -t -u *://{url:host}/* content.plugins ;; reload')
|
||||
config.bind(',cpu', 'config-cycle -p -t -u {url} content.plugins ;; reload')
|
||||
config.bind(',csH', 'config-cycle -p -t -u *://*.{url:host}/* content.javascript.enabled ;; reload')
|
||||
config.bind(',csh', 'config-cycle -p -t -u *://{url:host}/* content.javascript.enabled ;; reload')
|
||||
config.bind(',csu', 'config-cycle -p -t -u {url} content.javascript.enabled ;; reload')
|
||||
config.bind(
|
||||
",cCH",
|
||||
"config-cycle -p -u *://*.{url:host}/* content.cookies.accept all no-3rdparty never ;; reload",
|
||||
)
|
||||
config.bind(
|
||||
",cCh",
|
||||
"config-cycle -p -u *://{url:host}/* content.cookies.accept all no-3rdparty never ;; reload",
|
||||
)
|
||||
config.bind(
|
||||
",cCu",
|
||||
"config-cycle -p -u {url} content.cookies.accept all no-3rdparty never ;; reload",
|
||||
)
|
||||
config.bind(",cIH", "config-cycle -p -u *://*.{url:host}/* content.images ;; reload")
|
||||
config.bind(",cIh", "config-cycle -p -u *://{url:host}/* content.images ;; reload")
|
||||
config.bind(",cIu", "config-cycle -p -u {url} content.images ;; reload")
|
||||
config.bind(",cPH", "config-cycle -p -u *://*.{url:host}/* content.plugins ;; reload")
|
||||
config.bind(",cPh", "config-cycle -p -u *://{url:host}/* content.plugins ;; reload")
|
||||
config.bind(",cPu", "config-cycle -p -u {url} content.plugins ;; reload")
|
||||
config.bind(
|
||||
",cSH", "config-cycle -p -u *://*.{url:host}/* content.javascript.enabled ;; reload"
|
||||
)
|
||||
config.bind(
|
||||
",cSh", "config-cycle -p -u *://{url:host}/* content.javascript.enabled ;; reload"
|
||||
)
|
||||
config.bind(",cSu", "config-cycle -p -u {url} content.javascript.enabled ;; reload")
|
||||
config.bind(
|
||||
",ccH",
|
||||
"config-cycle -p -t -u *://*.{url:host}/* content.cookies.accept all no-3rdparty never ;; reload",
|
||||
)
|
||||
config.bind(
|
||||
",cch",
|
||||
"config-cycle -p -t -u *://{url:host}/* content.cookies.accept all no-3rdparty never ;; reload",
|
||||
)
|
||||
config.bind(
|
||||
",ccu",
|
||||
"config-cycle -p -t -u {url} content.cookies.accept all no-3rdparty never ;; reload",
|
||||
)
|
||||
config.bind(",ch", "back -t")
|
||||
config.bind(",ciH", "config-cycle -p -t -u *://*.{url:host}/* content.images ;; reload")
|
||||
config.bind(",cih", "config-cycle -p -t -u *://{url:host}/* content.images ;; reload")
|
||||
config.bind(",ciu", "config-cycle -p -t -u {url} content.images ;; reload")
|
||||
config.bind(",cl", "forward -t")
|
||||
config.bind(
|
||||
",cpH", "config-cycle -p -t -u *://*.{url:host}/* content.plugins ;; reload"
|
||||
)
|
||||
config.bind(",cph", "config-cycle -p -t -u *://{url:host}/* content.plugins ;; reload")
|
||||
config.bind(",cpu", "config-cycle -p -t -u {url} content.plugins ;; reload")
|
||||
config.bind(
|
||||
",csH",
|
||||
"config-cycle -p -t -u *://*.{url:host}/* content.javascript.enabled ;; reload",
|
||||
)
|
||||
config.bind(
|
||||
",csh",
|
||||
"config-cycle -p -t -u *://{url:host}/* content.javascript.enabled ;; reload",
|
||||
)
|
||||
config.bind(",csu", "config-cycle -p -t -u {url} content.javascript.enabled ;; reload")
|
||||
|
||||
# downloads
|
||||
config.bind(',da', 'download-cancel')
|
||||
config.bind(',dd', 'download')
|
||||
config.bind(',dc', 'download-clear')
|
||||
config.bind(',dy', 'spawn ytdl {url}')
|
||||
config.bind(",da", "download-cancel")
|
||||
config.bind(",dd", "download")
|
||||
config.bind(",dc", "download-clear")
|
||||
config.bind(",dy", "spawn ytdl {url}")
|
||||
|
||||
# dev tools
|
||||
config.bind(',Dd', 'devtools')
|
||||
config.bind(',Df', 'devtools-focus')
|
||||
config.bind(',Dc', 'devtools left')
|
||||
config.bind(',Dt', 'devtools bottom')
|
||||
config.bind(',Ds', 'devtools top')
|
||||
config.bind(',Dr', 'devtools right')
|
||||
config.bind(',Dw', 'devtools window')
|
||||
config.bind(",Dd", "devtools")
|
||||
config.bind(",Df", "devtools-focus")
|
||||
config.bind(",Dc", "devtools left")
|
||||
config.bind(",Dt", "devtools bottom")
|
||||
config.bind(",Ds", "devtools top")
|
||||
config.bind(",Dr", "devtools right")
|
||||
config.bind(",Dw", "devtools window")
|
||||
|
||||
# save
|
||||
config.bind('fs', 'save')
|
||||
config.bind("fs", "save")
|
||||
|
||||
# hints
|
||||
config.bind(',hd', 'hint links download')
|
||||
config.bind(',hh', 'hint')
|
||||
config.bind(',hH', 'hint all hover')
|
||||
config.bind(',hii', 'hint images')
|
||||
config.bind(',hiI', 'hint images tab')
|
||||
config.bind(',hIi', 'hint inputs')
|
||||
config.bind(',hIf', 'hint inputs --first')
|
||||
config.bind(',hO', 'hint links fill :open -t -r {hint-url}')
|
||||
config.bind(',ho', 'hint links fill :open {hint-url}')
|
||||
config.bind(',hR', 'hint --rapid links window')
|
||||
config.bind(',hr', 'hint --rapid links tab-bg')
|
||||
config.bind(',htb', 'hint all tab-bg')
|
||||
config.bind(',htf', 'hint all tab-fg')
|
||||
config.bind(',htt', 'hint all tab')
|
||||
config.bind(',hw', 'hint all window')
|
||||
config.bind(',hy', 'hint links yank')
|
||||
config.bind(',hY', 'hint links yank-primary')
|
||||
config.bind(",hd", "hint links download")
|
||||
config.bind(",hh", "hint")
|
||||
config.bind(",hH", "hint all hover")
|
||||
config.bind(",hii", "hint images")
|
||||
config.bind(",hiI", "hint images tab")
|
||||
config.bind(",hIi", "hint inputs")
|
||||
config.bind(",hIf", "hint inputs --first")
|
||||
config.bind(",hO", "hint links fill :open -t -r {hint-url}")
|
||||
config.bind(",ho", "hint links fill :open {hint-url}")
|
||||
config.bind(",hR", "hint --rapid links window")
|
||||
config.bind(",hr", "hint --rapid links tab-bg")
|
||||
config.bind(",htb", "hint all tab-bg")
|
||||
config.bind(",htf", "hint all tab-fg")
|
||||
config.bind(",htt", "hint all tab")
|
||||
config.bind(",hw", "hint all window")
|
||||
config.bind(",hy", "hint links yank")
|
||||
config.bind(",hY", "hint links yank-primary")
|
||||
# Bindings for hint mode
|
||||
config.bind('<Ctrl-B>', 'hint all tab-bg', mode='hint')
|
||||
config.bind('<Ctrl-F>', 'hint links', mode='hint')
|
||||
config.bind('<Ctrl-R>', 'hint --rapid links tab-bg', mode='hint')
|
||||
config.bind('<Escape>', 'mode-leave', mode='hint')
|
||||
config.bind('<Return>', 'hint-follow', mode='hint')
|
||||
config.bind("<Ctrl-B>", "hint all tab-bg", mode="hint")
|
||||
config.bind("<Ctrl-F>", "hint links", mode="hint")
|
||||
config.bind("<Ctrl-R>", "hint --rapid links tab-bg", mode="hint")
|
||||
config.bind("<Escape>", "mode-leave", mode="hint")
|
||||
config.bind("<Return>", "hint-follow", mode="hint")
|
||||
|
||||
# Move
|
||||
config.bind('<Ctrl-PgDown>', 'tab-next')
|
||||
config.bind('<Ctrl-C>', 'back -w')
|
||||
config.bind('<Ctrl-R>', 'forward -w')
|
||||
config.bind('<Ctrl-h>', 'home')
|
||||
config.bind('T', 'tab-next')
|
||||
config.bind('S', 'tab-prev')
|
||||
config.bind('C', 'back')
|
||||
config.bind('R', 'forward')
|
||||
config.bind("<Ctrl-PgDown>", "tab-next")
|
||||
config.bind("<Ctrl-C>", "back -w")
|
||||
config.bind("<Ctrl-R>", "forward -w")
|
||||
config.bind("<Ctrl-h>", "home")
|
||||
config.bind("T", "tab-next")
|
||||
config.bind("S", "tab-prev")
|
||||
config.bind("C", "back")
|
||||
config.bind("R", "forward")
|
||||
|
||||
# cmd
|
||||
config.bind(',sb', 'set-cmd-text -s :bind')
|
||||
config.bind(',st', 'set-cmd-text -s :set -t')
|
||||
config.bind(',ss', 'set')
|
||||
config.bind(',sS', 'set-cmd-text -s :set')
|
||||
config.bind(",sb", "cmd-set-text -s :bind")
|
||||
config.bind(",st", "cmd-set-text -s :set -t")
|
||||
config.bind(",ss", "set")
|
||||
config.bind(",sS", "cmd-set-text -s :set")
|
||||
|
||||
# open
|
||||
config.bind('<Ctrl-N>', 'open -w')
|
||||
config.bind('<Ctrl-Shift-N>', 'open -p')
|
||||
config.bind('<Ctrl-T>', 'open -t')
|
||||
config.bind(',ob', 'set-cmd-text -s :open -b')
|
||||
config.bind(',oB', 'set-cmd-text :open -b -r {url:pretty}')
|
||||
config.bind(',oP', 'set-cmd-text :open -t -r {url:pretty}')
|
||||
config.bind(',ott', 'open -t')
|
||||
config.bind(',otT', 'set-cmd-text -s :open -t')
|
||||
config.bind(',ow', 'set-cmd-text -s :open -w')
|
||||
config.bind(',oW', 'set-cmd-text :open -w {url:pretty}')
|
||||
config.bind(',occ', 'open -- {clipboard}')
|
||||
config.bind(',ocC', 'open -t -- {clipboard}')
|
||||
config.bind(',ocp', 'open -- {primary}')
|
||||
config.bind(',ocP', 'open -t -- {primary}')
|
||||
config.bind(',ocw', 'open -w -- {clipboard}')
|
||||
config.bind(',ocW', 'open -w -- {primary}')
|
||||
config.bind('o', 'set-cmd-text -s :open')
|
||||
config.bind('O', 'set-cmd-text :open {url:pretty}')
|
||||
config.bind("<Ctrl-N>", "open -w")
|
||||
config.bind("<Ctrl-Shift-N>", "open -p")
|
||||
config.bind("<Ctrl-T>", "open -t")
|
||||
config.bind(",ob", "cmd-set-text -s :open -b")
|
||||
config.bind(",oB", "cmd-set-text :open -b -r {url:pretty}")
|
||||
config.bind(",oP", "cmd-set-text :open -t -r {url:pretty}")
|
||||
config.bind(",ott", "open -t")
|
||||
config.bind(",otT", "cmd-set-text -s :open -t")
|
||||
config.bind(",ow", "cmd-set-text -s :open -w")
|
||||
config.bind(",oW", "cmd-set-text :open -w {url:pretty}")
|
||||
config.bind(",occ", "open -- {clipboard}")
|
||||
config.bind(",ocC", "open -t -- {clipboard}")
|
||||
config.bind(",ocp", "open -- {primary}")
|
||||
config.bind(",ocP", "open -t -- {primary}")
|
||||
config.bind(",ocw", "open -w -- {clipboard}")
|
||||
config.bind(",ocW", "open -w -- {primary}")
|
||||
config.bind("o", "cmd-set-text -s :open")
|
||||
config.bind("O", "cmd-set-text :open {url:pretty}")
|
||||
|
||||
# tabs
|
||||
config.bind('<Alt-1>', 'tab-focus 1')
|
||||
config.bind('<Alt-2>', 'tab-focus 2')
|
||||
config.bind('<Alt-3>', 'tab-focus 3')
|
||||
config.bind('<Alt-4>', 'tab-focus 4')
|
||||
config.bind('<Alt-5>', 'tab-focus 5')
|
||||
config.bind('<Alt-6>', 'tab-focus 6')
|
||||
config.bind('<Alt-7>', 'tab-focus 7')
|
||||
config.bind('<Alt-8>', 'tab-focus 8')
|
||||
config.bind('<Alt-9>', 'tab-focus -1')
|
||||
config.bind('<Alt-m>', 'tab-mute')
|
||||
config.bind('<Ctrl-Tab>', 'tab-focus last')
|
||||
config.bind('<Ctrl-W>', 'tab-close')
|
||||
config.bind(',tT', 'tab-move +')
|
||||
config.bind(',tS', 'tab-move -')
|
||||
config.bind(',tn', 'tab-next')
|
||||
config.bind(',tp', 'tab-prev')
|
||||
config.bind(',t«', 'tab-focus -1')
|
||||
config.bind(',t»', 'tab-focus 1')
|
||||
config.bind(',tC', 'tab-clone')
|
||||
config.bind(',tD', 'tab-only')
|
||||
config.bind(',td', 'tab-close')
|
||||
config.bind(',tf', 'set-cmd-text -sr :tab-focus')
|
||||
config.bind(',tg', 'tab-give')
|
||||
config.bind(',tl', 'tab-focus last')
|
||||
config.bind(',tm', 'tab-move')
|
||||
config.bind(',tP', 'tab-pin')
|
||||
config.bind(',ts', 'set-cmd-text -s :tab-select')
|
||||
config.bind("<Alt-1>", "tab-focus 1")
|
||||
config.bind("<Alt-2>", "tab-focus 2")
|
||||
config.bind("<Alt-3>", "tab-focus 3")
|
||||
config.bind("<Alt-4>", "tab-focus 4")
|
||||
config.bind("<Alt-5>", "tab-focus 5")
|
||||
config.bind("<Alt-6>", "tab-focus 6")
|
||||
config.bind("<Alt-7>", "tab-focus 7")
|
||||
config.bind("<Alt-8>", "tab-focus 8")
|
||||
config.bind("<Alt-9>", "tab-focus -1")
|
||||
config.bind("<Alt-m>", "tab-mute")
|
||||
config.bind("<Ctrl-Tab>", "tab-focus last")
|
||||
config.bind("<Ctrl-W>", "tab-close")
|
||||
config.bind(",tT", "tab-move +")
|
||||
config.bind(",tS", "tab-move -")
|
||||
config.bind(",tn", "tab-next")
|
||||
config.bind(",tp", "tab-prev")
|
||||
config.bind(",t«", "tab-focus -1")
|
||||
config.bind(",t»", "tab-focus 1")
|
||||
config.bind(",tC", "tab-clone")
|
||||
config.bind(",tD", "tab-only")
|
||||
config.bind(",td", "tab-close")
|
||||
config.bind(",tf", "cmd-set-text -sr :tab-focus")
|
||||
config.bind(",tg", "tab-give")
|
||||
config.bind(",tl", "tab-focus last")
|
||||
config.bind(",tm", "tab-move")
|
||||
config.bind(",tP", "tab-pin")
|
||||
config.bind(",ts", "cmd-set-text -s :tab-select")
|
||||
|
||||
# scoll
|
||||
config.bind('G', 'scroll-to-perc')
|
||||
config.bind('gg', 'scroll-to-perc 0')
|
||||
config.bind('c', 'scroll left')
|
||||
config.bind('t', 'scroll down')
|
||||
config.bind('s', 'scroll up')
|
||||
config.bind('r', 'scroll right')
|
||||
config.bind('<Ctrl-F>', 'scroll-page 0 1')
|
||||
config.bind('<Ctrl-B>', 'scroll-page 0 -1')
|
||||
config.bind('<Ctrl-D>', 'scroll-page 0 0.5')
|
||||
config.bind('<Ctrl-U>', 'scroll-page 0 -0.5')
|
||||
config.bind("G", "scroll-to-perc")
|
||||
config.bind("gg", "scroll-to-perc 0")
|
||||
config.bind("c", "scroll left")
|
||||
config.bind("t", "scroll down")
|
||||
config.bind("s", "scroll up")
|
||||
config.bind("r", "scroll right")
|
||||
config.bind("<Ctrl-F>", "scroll-page 0 1")
|
||||
config.bind("<Ctrl-B>", "scroll-page 0 -1")
|
||||
config.bind("<Ctrl-D>", "scroll-page 0 0.5")
|
||||
config.bind("<Ctrl-U>", "scroll-page 0 -0.5")
|
||||
|
||||
# navigate
|
||||
config.bind(',nd', 'navigate decrement')
|
||||
config.bind(',ni', 'navigate increment')
|
||||
config.bind(',nn', 'navigate prev')
|
||||
config.bind(',nN', 'navigate next -t')
|
||||
config.bind(',np', 'navigate next')
|
||||
config.bind(',nP', 'navigate prev -t')
|
||||
config.bind(',nu', 'navigate up')
|
||||
config.bind(',nU', 'navigate up -t')
|
||||
config.bind(",nd", "navigate decrement")
|
||||
config.bind(",ni", "navigate increment")
|
||||
config.bind(",nn", "navigate prev")
|
||||
config.bind(",nN", "navigate next -t")
|
||||
config.bind(",np", "navigate next")
|
||||
config.bind(",nP", "navigate prev -t")
|
||||
config.bind(",nu", "navigate up")
|
||||
config.bind(",nU", "navigate up -t")
|
||||
|
||||
# search
|
||||
config.bind('n', 'search-next')
|
||||
config.bind('N', 'search-prev')
|
||||
config.bind("n", "search-next")
|
||||
config.bind("N", "search-prev")
|
||||
|
||||
# print
|
||||
config.bind('<Ctrl-Alt-p>', 'print')
|
||||
config.bind("<Ctrl-Alt-p>", "print")
|
||||
|
||||
config.bind(',qq', 'quit')
|
||||
config.bind(',qs', 'quit --save')
|
||||
config.bind(',qw', 'close')
|
||||
config.bind('<Ctrl-Q>', 'quit')
|
||||
config.bind(",qq", "quit")
|
||||
config.bind(",qs", "quit --save")
|
||||
config.bind(",qw", "close")
|
||||
config.bind("<Ctrl-Q>", "quit")
|
||||
|
||||
# reload
|
||||
config.bind(',rr', 'reload')
|
||||
config.bind(',rR', 'reload -f')
|
||||
config.bind('<F5>', 'reload')
|
||||
config.bind('<Ctrl-F5>', 'reload -f')
|
||||
config.bind(",rr", "reload")
|
||||
config.bind(",rR", "reload -f")
|
||||
config.bind("<F5>", "reload")
|
||||
config.bind("<Ctrl-F5>", "reload -f")
|
||||
|
||||
# view
|
||||
config.bind(',vh', 'history')
|
||||
config.bind(',vs', 'view-source')
|
||||
config.bind(",vh", "history")
|
||||
config.bind(",vs", "view-source")
|
||||
config.bind(",vm", "spawn mpv {url}")
|
||||
|
||||
# yank
|
||||
config.bind('yd', 'yank domain')
|
||||
config.bind('yD', 'yank domain -s')
|
||||
config.bind('yi', 'yank inline [{title}]({url})')
|
||||
config.bind('yI', 'yank inline [{title}]({url}) -s')
|
||||
config.bind('yp', 'yank pretty-url')
|
||||
config.bind('yP', 'yank pretty-url -s')
|
||||
config.bind('yt', 'yank title')
|
||||
config.bind('yT', 'yank title -s')
|
||||
config.bind('yy', 'yank')
|
||||
config.bind('yY', 'yank -s')
|
||||
config.bind("yd", "yank domain")
|
||||
config.bind("yD", "yank domain -s")
|
||||
config.bind("yi", "yank inline [{title}]({url})")
|
||||
config.bind("yI", "yank inline [{title}]({url}) -s")
|
||||
config.bind("yp", "yank pretty-url")
|
||||
config.bind("yP", "yank pretty-url -s")
|
||||
config.bind("yt", "yank title")
|
||||
config.bind("yT", "yank title -s")
|
||||
config.bind("yy", "yank")
|
||||
config.bind("yY", "yank -s")
|
||||
|
||||
config.bind('<Escape>', 'clear-keychain ;; search ;; fullscreen --leave')
|
||||
config.bind("<Escape>", "clear-keychain ;; search ;; fullscreen --leave")
|
||||
|
||||
config.bind('+', 'zoom-in')
|
||||
config.bind('-', 'zoom-out')
|
||||
config.bind('=', 'zoom')
|
||||
config.bind("+", "zoom-in")
|
||||
config.bind("-", "zoom-out")
|
||||
config.bind("=", "zoom")
|
||||
|
||||
config.bind('?', 'set-cmd-text ?')
|
||||
config.bind('/', 'set-cmd-text /')
|
||||
config.bind(':', 'set-cmd-text :')
|
||||
config.bind('.', 'repeat-command')
|
||||
config.bind("?", "cmd-set-text ?")
|
||||
config.bind("/", "cmd-set-text /")
|
||||
config.bind(":", "cmd-set-text :")
|
||||
config.bind(".", "repeat-command")
|
||||
|
||||
config.bind('<Ctrl-Shift-Tab>', 'nop')
|
||||
config.bind('<Ctrl-s>', 'stop')
|
||||
config.bind('<F11>', 'fullscreen')
|
||||
config.bind("<Ctrl-Shift-Tab>", "nop")
|
||||
config.bind("<Ctrl-s>", "stop")
|
||||
config.bind("<F11>", "fullscreen")
|
||||
|
||||
config.bind('<Return>', 'selection-follow')
|
||||
config.bind('<Ctrl-Return>', 'selection-follow -t')
|
||||
config.bind("<Return>", "selection-follow")
|
||||
config.bind("<Ctrl-Return>", "selection-follow -t")
|
||||
|
||||
config.bind('<back>', 'back')
|
||||
config.bind('<forward>', 'forward')
|
||||
config.bind("<back>", "back")
|
||||
config.bind("<forward>", "forward")
|
||||
|
||||
|
||||
config.bind('<Ctrl-V>', 'mode-enter passthrough')
|
||||
config.bind("'", 'mode-enter jump_mark')
|
||||
config.bind('v', 'mode-enter caret')
|
||||
config.bind('V', 'mode-enter caret ;; selection-toggle --line')
|
||||
config.bind('`', 'mode-enter set_mark')
|
||||
config.bind('i', 'mode-enter insert')
|
||||
config.bind("<Ctrl-V>", "mode-enter passthrough")
|
||||
config.bind("'", "mode-enter jump_mark")
|
||||
config.bind("v", "mode-enter caret")
|
||||
config.bind("V", "mode-enter caret ;; selection-toggle --line")
|
||||
config.bind("`", "mode-enter set_mark")
|
||||
config.bind("i", "mode-enter insert")
|
||||
|
||||
config.bind('q', 'macro-record')
|
||||
config.bind('@', 'macro-run')
|
||||
config.bind("q", "macro-record")
|
||||
config.bind("@", "macro-run")
|
||||
|
||||
config.bind('U', 'undo -w')
|
||||
config.bind('<Ctrl-Shift-T>', 'undo')
|
||||
config.bind('u', 'undo')
|
||||
config.bind("U", "undo -w")
|
||||
config.bind("<Ctrl-Shift-T>", "undo")
|
||||
config.bind("u", "undo")
|
||||
|
||||
# Bindings for caret mode
|
||||
config.bind('C', 'scroll left', mode='caret')
|
||||
config.bind('T', 'scroll down', mode='caret')
|
||||
config.bind('S', 'scroll up', mode='caret')
|
||||
config.bind('R', 'scroll right', mode='caret')
|
||||
config.bind('c', 'move-to-prev-char', mode='caret')
|
||||
config.bind('t', 'move-to-next-line', mode='caret')
|
||||
config.bind('s', 'move-to-prev-line', mode='caret')
|
||||
config.bind('r', 'move-to-next-char', mode='caret')
|
||||
config.bind("C", "scroll left", mode="caret")
|
||||
config.bind("T", "scroll down", mode="caret")
|
||||
config.bind("S", "scroll up", mode="caret")
|
||||
config.bind("R", "scroll right", mode="caret")
|
||||
config.bind("c", "move-to-prev-char", mode="caret")
|
||||
config.bind("t", "move-to-next-line", mode="caret")
|
||||
config.bind("s", "move-to-prev-line", mode="caret")
|
||||
config.bind("r", "move-to-next-char", mode="caret")
|
||||
|
||||
config.bind('$', 'move-to-end-of-line', mode='caret')
|
||||
config.bind('0', 'move-to-start-of-line', mode='caret')
|
||||
config.bind('<Ctrl-Space>', 'selection-drop', mode='caret')
|
||||
config.bind('<Escape>', 'mode-leave', mode='caret')
|
||||
config.bind('<Return>', 'yank selection', mode='caret')
|
||||
config.bind('<Space>', 'selection-toggle', mode='caret')
|
||||
config.bind('v', 'selection-toggle', mode='caret')
|
||||
config.bind('V', 'selection-toggle --line', mode='caret')
|
||||
config.bind('y', 'yank selection', mode='caret')
|
||||
config.bind('Y', 'yank selection -s', mode='caret')
|
||||
config.bind('[', 'move-to-start-of-prev-block', mode='caret')
|
||||
config.bind(']', 'move-to-start-of-next-block', mode='caret')
|
||||
config.bind('{', 'move-to-end-of-prev-block', mode='caret')
|
||||
config.bind('}', 'move-to-end-of-next-block', mode='caret')
|
||||
config.bind('b', 'move-to-prev-word', mode='caret')
|
||||
config.bind('e', 'move-to-end-of-word', mode='caret')
|
||||
config.bind('gg', 'move-to-start-of-document', mode='caret')
|
||||
config.bind('G', 'move-to-end-of-document', mode='caret')
|
||||
config.bind('n', 'mode-enter normal', mode='caret')
|
||||
config.bind('o', 'selection-reverse', mode='caret')
|
||||
config.bind('w', 'move-to-next-word', mode='caret')
|
||||
config.bind("$", "move-to-end-of-line", mode="caret")
|
||||
config.bind("0", "move-to-start-of-line", mode="caret")
|
||||
config.bind("<Ctrl-Space>", "selection-drop", mode="caret")
|
||||
config.bind("<Escape>", "mode-leave", mode="caret")
|
||||
config.bind("<Return>", "yank selection", mode="caret")
|
||||
config.bind("<Space>", "selection-toggle", mode="caret")
|
||||
config.bind("v", "selection-toggle", mode="caret")
|
||||
config.bind("V", "selection-toggle --line", mode="caret")
|
||||
config.bind("y", "yank selection", mode="caret")
|
||||
config.bind("Y", "yank selection -s", mode="caret")
|
||||
config.bind("[", "move-to-start-of-prev-block", mode="caret")
|
||||
config.bind("]", "move-to-start-of-next-block", mode="caret")
|
||||
config.bind("{", "move-to-end-of-prev-block", mode="caret")
|
||||
config.bind("}", "move-to-end-of-next-block", mode="caret")
|
||||
config.bind("b", "move-to-prev-word", mode="caret")
|
||||
config.bind("e", "move-to-end-of-word", mode="caret")
|
||||
config.bind("gg", "move-to-start-of-document", mode="caret")
|
||||
config.bind("G", "move-to-end-of-document", mode="caret")
|
||||
config.bind("n", "mode-enter normal", mode="caret")
|
||||
config.bind("o", "selection-reverse", mode="caret")
|
||||
config.bind("w", "move-to-next-word", mode="caret")
|
||||
|
||||
# Bindings for command mode
|
||||
config.bind('<Alt-B>', 'rl-backward-word', mode='command')
|
||||
config.bind('<Alt-Backspace>', 'rl-backward-kill-word', mode='command')
|
||||
config.bind('<Alt-D>', 'rl-kill-word', mode='command')
|
||||
config.bind('<Alt-F>', 'rl-forward-word', mode='command')
|
||||
config.bind('<Ctrl-?>', 'rl-delete-char', mode='command')
|
||||
config.bind('<Ctrl-A>', 'rl-beginning-of-line', mode='command')
|
||||
config.bind('<Ctrl-B>', 'rl-backward-char', mode='command')
|
||||
config.bind('<Ctrl-C>', 'completion-item-yank', mode='command')
|
||||
config.bind('<Ctrl-D>', 'completion-item-del', mode='command')
|
||||
config.bind('<Ctrl-E>', 'rl-end-of-line', mode='command')
|
||||
config.bind('<Ctrl-F>', 'rl-forward-char', mode='command')
|
||||
config.bind('<Ctrl-H>', 'rl-backward-delete-char', mode='command')
|
||||
config.bind('<Ctrl-K>', 'rl-kill-line', mode='command')
|
||||
config.bind('<Ctrl-N>', 'command-history-next', mode='command')
|
||||
config.bind('<Ctrl-P>', 'command-history-prev', mode='command')
|
||||
config.bind('<Ctrl-Return>', 'command-accept --rapid', mode='command')
|
||||
config.bind('<Ctrl-Shift-C>', 'completion-item-yank --sel', mode='command')
|
||||
config.bind('<Ctrl-Shift-Tab>', 'completion-item-focus prev-category', mode='command')
|
||||
config.bind('<Ctrl-Tab>', 'completion-item-focus next-category', mode='command')
|
||||
config.bind('<Ctrl-U>', 'rl-unix-line-discard', mode='command')
|
||||
config.bind('<Ctrl-W>', 'rl-unix-word-rubout', mode='command')
|
||||
config.bind('<Ctrl-Y>', 'rl-yank', mode='command')
|
||||
config.bind('<Down>', 'completion-item-focus --history next', mode='command')
|
||||
config.bind('<Escape>', 'mode-leave', mode='command')
|
||||
config.bind('<PgDown>', 'completion-item-focus next-page', mode='command')
|
||||
config.bind('<PgUp>', 'completion-item-focus prev-page', mode='command')
|
||||
config.bind('<Return>', 'command-accept', mode='command')
|
||||
config.bind('<Shift-Delete>', 'completion-item-del', mode='command')
|
||||
config.bind('<Shift-Tab>', 'completion-item-focus prev', mode='command')
|
||||
config.bind('<Tab>', 'completion-item-focus next', mode='command')
|
||||
config.bind('<Up>', 'completion-item-focus --history prev', mode='command')
|
||||
config.bind("<Alt-B>", "rl-backward-word", mode="command")
|
||||
config.bind("<Alt-Backspace>", "rl-backward-kill-word", mode="command")
|
||||
config.bind("<Alt-D>", "rl-kill-word", mode="command")
|
||||
config.bind("<Alt-F>", "rl-forward-word", mode="command")
|
||||
config.bind("<Ctrl-?>", "rl-delete-char", mode="command")
|
||||
config.bind("<Ctrl-A>", "rl-beginning-of-line", mode="command")
|
||||
config.bind("<Ctrl-B>", "rl-backward-char", mode="command")
|
||||
config.bind("<Ctrl-C>", "completion-item-yank", mode="command")
|
||||
config.bind("<Ctrl-D>", "completion-item-del", mode="command")
|
||||
config.bind("<Ctrl-E>", "rl-end-of-line", mode="command")
|
||||
config.bind("<Ctrl-F>", "rl-forward-char", mode="command")
|
||||
config.bind("<Ctrl-H>", "rl-backward-delete-char", mode="command")
|
||||
config.bind("<Ctrl-K>", "rl-kill-line", mode="command")
|
||||
config.bind("<Ctrl-N>", "command-history-next", mode="command")
|
||||
config.bind("<Ctrl-P>", "command-history-prev", mode="command")
|
||||
config.bind("<Ctrl-Return>", "command-accept --rapid", mode="command")
|
||||
config.bind("<Ctrl-Shift-C>", "completion-item-yank --sel", mode="command")
|
||||
config.bind("<Ctrl-Shift-Tab>", "completion-item-focus prev-category", mode="command")
|
||||
config.bind("<Ctrl-Tab>", "completion-item-focus next-category", mode="command")
|
||||
config.bind("<Ctrl-U>", "rl-unix-line-discard", mode="command")
|
||||
config.bind("<Ctrl-W>", "rl-unix-word-rubout", mode="command")
|
||||
config.bind("<Ctrl-Y>", "rl-yank", mode="command")
|
||||
config.bind("<Down>", "completion-item-focus --history next", mode="command")
|
||||
config.bind("<Escape>", "mode-leave", mode="command")
|
||||
config.bind("<PgDown>", "completion-item-focus next-page", mode="command")
|
||||
config.bind("<PgUp>", "completion-item-focus prev-page", mode="command")
|
||||
config.bind("<Return>", "command-accept", mode="command")
|
||||
config.bind("<Shift-Delete>", "completion-item-del", mode="command")
|
||||
config.bind("<Shift-Tab>", "completion-item-focus prev", mode="command")
|
||||
config.bind("<Tab>", "completion-item-focus next", mode="command")
|
||||
config.bind("<Up>", "completion-item-focus --history prev", mode="command")
|
||||
|
||||
# Bindings for insert mode
|
||||
config.bind('<Ctrl-E>', 'edit-text', mode='insert')
|
||||
config.bind('<Escape>', 'mode-leave', mode='insert')
|
||||
config.bind('<Shift-Escape>', 'fake-key <Escape>', mode='insert')
|
||||
config.bind('<Shift-Ins>', 'insert-text -- {primary}', mode='insert')
|
||||
config.bind("<Ctrl-E>", "edit-text", mode="insert")
|
||||
config.bind("<Escape>", "mode-leave", mode="insert")
|
||||
config.bind("<Shift-Escape>", "fake-key <Escape>", mode="insert")
|
||||
config.bind("<Shift-Ins>", "insert-text -- {primary}", mode="insert")
|
||||
|
||||
# Bindings for passthrough mode
|
||||
config.bind('<Shift-Escape>', 'mode-leave', mode='passthrough')
|
||||
config.bind("<Shift-Escape>", "mode-leave", mode="passthrough")
|
||||
|
||||
# Bindings for prompt mode
|
||||
config.bind('<Alt-B>', 'rl-backward-word', mode='prompt')
|
||||
config.bind('<Alt-Backspace>', 'rl-backward-kill-word', mode='prompt')
|
||||
config.bind('<Alt-D>', 'rl-kill-word', mode='prompt')
|
||||
config.bind('<Alt-F>', 'rl-forward-word', mode='prompt')
|
||||
config.bind('<Alt-Shift-Y>', 'prompt-yank --sel', mode='prompt')
|
||||
config.bind('<Alt-Y>', 'prompt-yank', mode='prompt')
|
||||
config.bind('<Ctrl-?>', 'rl-delete-char', mode='prompt')
|
||||
config.bind('<Ctrl-A>', 'rl-beginning-of-line', mode='prompt')
|
||||
config.bind('<Ctrl-B>', 'rl-backward-char', mode='prompt')
|
||||
config.bind('<Ctrl-E>', 'rl-end-of-line', mode='prompt')
|
||||
config.bind('<Ctrl-F>', 'rl-forward-char', mode='prompt')
|
||||
config.bind('<Ctrl-H>', 'rl-backward-delete-char', mode='prompt')
|
||||
config.bind('<Ctrl-K>', 'rl-kill-line', mode='prompt')
|
||||
config.bind('<Ctrl-P>', 'prompt-open-download --pdfjs', mode='prompt')
|
||||
config.bind('<Ctrl-U>', 'rl-unix-line-discard', mode='prompt')
|
||||
config.bind('<Ctrl-W>', 'rl-unix-word-rubout', mode='prompt')
|
||||
config.bind('<Ctrl-X>', 'prompt-open-download', mode='prompt')
|
||||
config.bind('<Ctrl-Y>', 'rl-yank', mode='prompt')
|
||||
config.bind('<Down>', 'prompt-item-focus next', mode='prompt')
|
||||
config.bind('<Escape>', 'mode-leave', mode='prompt')
|
||||
config.bind('<Return>', 'prompt-accept', mode='prompt')
|
||||
config.bind('<Shift-Tab>', 'prompt-item-focus prev', mode='prompt')
|
||||
config.bind('<Tab>', 'prompt-item-focus next', mode='prompt')
|
||||
config.bind('<Up>', 'prompt-item-focus prev', mode='prompt')
|
||||
config.bind("<Alt-B>", "rl-backward-word", mode="prompt")
|
||||
config.bind("<Alt-Backspace>", "rl-backward-kill-word", mode="prompt")
|
||||
config.bind("<Alt-D>", "rl-kill-word", mode="prompt")
|
||||
config.bind("<Alt-F>", "rl-forward-word", mode="prompt")
|
||||
config.bind("<Alt-Shift-Y>", "prompt-yank --sel", mode="prompt")
|
||||
config.bind("<Alt-Y>", "prompt-yank", mode="prompt")
|
||||
config.bind("<Ctrl-?>", "rl-delete-char", mode="prompt")
|
||||
config.bind("<Ctrl-A>", "rl-beginning-of-line", mode="prompt")
|
||||
config.bind("<Ctrl-B>", "rl-backward-char", mode="prompt")
|
||||
config.bind("<Ctrl-E>", "rl-end-of-line", mode="prompt")
|
||||
config.bind("<Ctrl-F>", "rl-forward-char", mode="prompt")
|
||||
config.bind("<Ctrl-H>", "rl-backward-delete-char", mode="prompt")
|
||||
config.bind("<Ctrl-K>", "rl-kill-line", mode="prompt")
|
||||
config.bind("<Ctrl-P>", "prompt-open-download --pdfjs", mode="prompt")
|
||||
config.bind("<Ctrl-U>", "rl-unix-line-discard", mode="prompt")
|
||||
config.bind("<Ctrl-W>", "rl-unix-word-rubout", mode="prompt")
|
||||
config.bind("<Ctrl-X>", "prompt-open-download", mode="prompt")
|
||||
config.bind("<Ctrl-Y>", "rl-yank", mode="prompt")
|
||||
config.bind("<Down>", "prompt-item-focus next", mode="prompt")
|
||||
config.bind("<Escape>", "mode-leave", mode="prompt")
|
||||
config.bind("<Return>", "prompt-accept", mode="prompt")
|
||||
config.bind("<Shift-Tab>", "prompt-item-focus prev", mode="prompt")
|
||||
config.bind("<Tab>", "prompt-item-focus next", mode="prompt")
|
||||
config.bind("<Up>", "prompt-item-focus prev", mode="prompt")
|
||||
|
||||
# Bindings for register mode
|
||||
config.bind('<Escape>', 'mode-leave', mode='register')
|
||||
config.bind("<Escape>", "mode-leave", mode="register")
|
||||
|
||||
# Bindings for yesno mode
|
||||
config.bind('<Alt-Shift-Y>', 'prompt-yank --sel', mode='yesno')
|
||||
config.bind('<Alt-Y>', 'prompt-yank', mode='yesno')
|
||||
config.bind('<Escape>', 'mode-leave', mode='yesno')
|
||||
config.bind('<Return>', 'prompt-accept', mode='yesno')
|
||||
config.bind('N', 'prompt-accept --save no', mode='yesno')
|
||||
config.bind('Y', 'prompt-accept --save yes', mode='yesno')
|
||||
config.bind('n', 'prompt-accept no', mode='yesno')
|
||||
config.bind('y', 'prompt-accept yes', mode='yesno')
|
||||
config.bind("<Alt-Shift-Y>", "prompt-yank --sel", mode="yesno")
|
||||
config.bind("<Alt-Y>", "prompt-yank", mode="yesno")
|
||||
config.bind("<Escape>", "mode-leave", mode="yesno")
|
||||
config.bind("<Return>", "prompt-accept", mode="yesno")
|
||||
config.bind("N", "prompt-accept --save no", mode="yesno")
|
||||
config.bind("Y", "prompt-accept --save yes", mode="yesno")
|
||||
config.bind("n", "prompt-accept no", mode="yesno")
|
||||
config.bind("y", "prompt-accept yes", mode="yesno")
|
||||
|
||||
@@ -3,6 +3,6 @@
|
||||
configuration {
|
||||
show-icons: true;
|
||||
sidebar-mode: false;
|
||||
modi: "window,ssh,drun,combi";
|
||||
modi: "ssh,drun,combi";
|
||||
}
|
||||
@theme "nord"
|
||||
|
||||
303
.config/sway/config
Normal file
@@ -0,0 +1,303 @@
|
||||
set $nord0 #2E3440
|
||||
set $nord1 #3B4252
|
||||
set $nord2 #434C5E
|
||||
set $nord3 #4C566A
|
||||
set $nord4 #D8DEE9
|
||||
set $nord5 #E5E9F0
|
||||
set $nord6 #ECEFF4
|
||||
set $nord7 #8FBCBB
|
||||
set $nord8 #88C0D0
|
||||
set $nord9 #81A1C1
|
||||
set $nord10 #5E81AC
|
||||
set $nord11 #BF616A
|
||||
set $nord12 #D08770
|
||||
set $nord13 #EBCB8B
|
||||
set $nord14 #A3BE8C
|
||||
set $nord15 #B48EAD
|
||||
set $bg $nord3
|
||||
set $fg $nord5
|
||||
|
||||
|
||||
set $mod Mod4
|
||||
set $left c
|
||||
set $down t
|
||||
set $up s
|
||||
set $right r
|
||||
set $term kitty
|
||||
set $menu "rofi -combi-modi drun -show combi"
|
||||
|
||||
output eDP-1 {
|
||||
mode 1920x1080@120Hz
|
||||
position 2560,0
|
||||
bg /home/phundrak/Pictures/Wallpapers/nord/spacemars.jpg fill
|
||||
}
|
||||
|
||||
output HDMI-A-1 {
|
||||
mode 2560x1080@60Hz
|
||||
position 0,0
|
||||
bg /home/phundrak/Pictures/Wallpapers/nord/spacemars.jpg fill
|
||||
}
|
||||
|
||||
exec swayidle -w \
|
||||
timeout 600 'swaymsg "output * power off"' resume 'swaymsg "output * power on"' \
|
||||
timeout 601 'plock' \
|
||||
before-sleep 'playerctl pause' \
|
||||
before-sleep 'plock'
|
||||
|
||||
input "2:14:ETPS/2_Elantech_Touchpad" {
|
||||
dwt enabled
|
||||
tap enabled
|
||||
natural_scroll disabled
|
||||
middle_emulation enabled
|
||||
}
|
||||
|
||||
input "1267:12642:ELAN0412:00_04F3:3162_Touchpad" {
|
||||
dwt enabled
|
||||
tap enabled
|
||||
natural_scroll disabled
|
||||
middle_emulation enabled
|
||||
}
|
||||
|
||||
input "1386:792:Wacom_USB_Bamboo_PAD_Finger" {
|
||||
dwt enabled
|
||||
tap enabled
|
||||
middle_emulation enabled
|
||||
}
|
||||
|
||||
input "1386:792:Wacom_USB_Bamboo_PAD_Pen" {
|
||||
map_to_output HDMI-A-1
|
||||
}
|
||||
|
||||
input * {
|
||||
xkb_layout "fr"
|
||||
xkb_variant "bepo_afnor"
|
||||
xkb_options "caps:ctrl_modifier"
|
||||
}
|
||||
|
||||
input type:keyboard xkb_numlock enabled
|
||||
|
||||
|
||||
mode "resize" {
|
||||
bindsym $left resize shrink width 10px
|
||||
bindsym $down resize grow height 10px
|
||||
bindsym $up resize shrink height 10px
|
||||
bindsym $right resize grow width 10px
|
||||
|
||||
bindsym Return mode "default"
|
||||
bindsym Escape mode "default"
|
||||
bindsym Ctrl+g mode "default"
|
||||
bindsym q mode "default"
|
||||
}
|
||||
|
||||
mode "buffers" {
|
||||
bindsym d kill; mode "default"
|
||||
|
||||
bindsym Return mode "default"
|
||||
bindsym Escape mode "default"
|
||||
bindsym Ctrl+g mode "default"
|
||||
bindsym q mode "default"
|
||||
}
|
||||
|
||||
mode "rofi" {
|
||||
bindsym a exec awiki; mode "default"
|
||||
bindsym b exec bluetooth-connect; mode "default"
|
||||
bindsym e exec rofi-emoji; mode "default"
|
||||
bindsym r exec $menu; mode "default"
|
||||
bindsym s exec rofi -show ssh; mode "default"
|
||||
bindsym y exec ytplay; mode "default"
|
||||
bindsym Shift+y exec rofi-ytdl; mode "default"
|
||||
|
||||
bindsym Return mode "default"
|
||||
bindsym Escape mode "default"
|
||||
bindsym Ctrl+g mode "default"
|
||||
bindsym q mode "default"
|
||||
}
|
||||
|
||||
mode "apps" {
|
||||
bindsym b exec firefox; mode "default"
|
||||
bindsym Shift+b exec qutebrowser; mode "default"
|
||||
bindsym d exec discord; mode "default"
|
||||
bindsym e exec emacsclient -c; mode "default"
|
||||
bindsym g exec gimp; mode "default"
|
||||
bindsym n exec nemo; mode "default"
|
||||
bindsym r mode "rofi"
|
||||
|
||||
bindsym Return mode "default"
|
||||
bindsym Escape mode "default"
|
||||
bindsym Ctrl+g mode "default"
|
||||
bindsym q mode "default"
|
||||
}
|
||||
|
||||
mode "windows" {
|
||||
bindsym period mode "resize"
|
||||
|
||||
bindsym $left focus left; mode "default"
|
||||
bindsym $right focus right; mode "default"
|
||||
bindsym $up focus up; mode "default"
|
||||
bindsym $down focus down; mode "default"
|
||||
bindsym Shift+$left move left; mode "default"
|
||||
bindsym Shift+$right move right; mode "default"
|
||||
bindsym Shift+$up move up; mode "default"
|
||||
bindsym Shift+$down move down; mode "default"
|
||||
bindsym Ctrl+$left move workspace to output left; mode "default"
|
||||
bindsym Ctrl+$right move workspace to output right; mode "default"
|
||||
bindsym Ctrl+$up move workspace to output up; mode "default"
|
||||
bindsym Ctrl+$down move workspace to output down; mode "default"
|
||||
|
||||
bindsym slash splith; mode "default"
|
||||
bindsym minus splitv; mode "default"
|
||||
|
||||
bindsym a focus parent; mode "default"
|
||||
bindsym d kill; mode "default"
|
||||
bindsym f fullscreen; mode "default"
|
||||
bindsym Shift+f floating toggle; mode "default"
|
||||
bindsym Space focus mode_toggle; mode "default"
|
||||
|
||||
bindsym e layout toggle split; mode "default"
|
||||
bindsym i layout tabbed; mode "default"
|
||||
bindsym u layout stacking; mode "default"
|
||||
|
||||
bindsym Return mode "default"
|
||||
bindsym Escape mode "default"
|
||||
bindsym Ctrl+g mode "default"
|
||||
bindsym q mode "default"
|
||||
}
|
||||
|
||||
mode "sway" {
|
||||
bindsym r reload
|
||||
bindsym q exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -B 'Yes, exit sway' 'swaymsg exit'
|
||||
|
||||
bindsym Return mode "default"
|
||||
bindsym Escape mode "default"
|
||||
bindsym Ctrl+g mode "default"
|
||||
}
|
||||
|
||||
mode "leader" {
|
||||
bindsym minus move scratchpad; mode "default"
|
||||
bindsym plus scratchpad show; mode "default"
|
||||
|
||||
bindsym a mode "apps"
|
||||
bindsym b mode "buffers"
|
||||
bindsym l exec "plock"; mode "default"
|
||||
bindsym q mode "sway"
|
||||
bindsym w mode "windows"
|
||||
|
||||
bindsym Return mode "default"
|
||||
bindsym Escape mode "default"
|
||||
bindsym Ctrl+g mode "default"
|
||||
}
|
||||
|
||||
bindsym $mod+$left focus left
|
||||
bindsym $mod+$right focus right
|
||||
bindsym $mod+$up focus up
|
||||
bindsym $mod+$down focus down
|
||||
bindgesture swipe:3:left focus left
|
||||
bindgesture swipe:3:right focus right
|
||||
bindgesture swipe:3:up focus up
|
||||
bindgesture swipe:3:down focus down
|
||||
bindsym Shift+$mod+$left move left
|
||||
bindsym Shift+$mod+$right move right
|
||||
bindsym Shift+$mod+$up move up
|
||||
bindsym Shift+$mod+$down move down
|
||||
bindgesture swipe:4:left move left
|
||||
bindgesture swipe:4:right move right
|
||||
bindgesture swipe:4:up move up
|
||||
bindgesture swipe:4:down move down
|
||||
|
||||
mode "screenshot" {
|
||||
bindsym Print exec "screenshot"; mode "default"
|
||||
bindsym c exec "screenshot -c"; mode "default"
|
||||
bindsym s exec "screenshot -s"; mode "default"
|
||||
bindsym g exec "screenshot -g"; mode "default"
|
||||
bindsym d exec "screenshot -d 3"; mode "default"
|
||||
bindsym Shift+s exec "screenshot -sc"; mode "default"
|
||||
|
||||
bindsym Return mode "default"
|
||||
bindsym Escape mode "default"
|
||||
bindsym Ctrl+g mode "default"
|
||||
bindsym q mode "default"
|
||||
}
|
||||
|
||||
bindsym $mod+Space mode "leader"
|
||||
bindsym $mod+Return exec $term
|
||||
bindsym $mod+d exec $menu
|
||||
bindsym Print mode "screenshot"
|
||||
bindsym $mod+Print exec "screenshot -c"
|
||||
|
||||
bindsym $mod+quotedbl workspace number 1
|
||||
bindsym $mod+guillemotleft workspace number 2
|
||||
bindsym $mod+guillemotright workspace number 3
|
||||
bindsym $mod+parenleft workspace number 4
|
||||
bindsym $mod+parenright workspace number 5
|
||||
bindsym $mod+at workspace number 6
|
||||
bindsym $mod+plus workspace number 7
|
||||
bindsym $mod+minus workspace number 8
|
||||
bindsym $mod+slash workspace number 9
|
||||
bindsym $mod+asterisk workspace number 0
|
||||
|
||||
bindsym $mod+Shift+quotedbl move container to workspace number 1
|
||||
bindsym $mod+Shift+guillemotleft move container to workspace number 2
|
||||
bindsym $mod+Shift+guillemotright move container to workspace number 3
|
||||
bindsym $mod+Shift+parenleft move container to workspace number 4
|
||||
bindsym $mod+Shift+parenright move container to workspace number 5
|
||||
bindsym $mod+Shift+at move container to workspace number 6
|
||||
bindsym $mod+Shift+plus move container to workspace number 7
|
||||
bindsym $mod+Shift+minus move container to workspace number 8
|
||||
bindsym $mod+Shift+slash move container to workspace number 9
|
||||
bindsym $mod+Shift+asterisk move container to workspace number 0
|
||||
|
||||
bindsym --locked XF86AudioPlay exec playerctl play-pause
|
||||
bindsym --locked XF86AudioPause exec playerctl pause
|
||||
bindsym --locked XF86AudioStop exec playerctl stop
|
||||
bindsym --locked XF86AudioPrev exec playerctl previous
|
||||
bindsym --locked XF86AudioNext exec playerctl next
|
||||
bindsym --locked XF86AudioForward exec playerctl position +1
|
||||
bindsym --locked XF86AudioRewind exec playerctl position -1
|
||||
bindsym --locked XF86AudioRaiseVolume exec pamixer -i 2
|
||||
bindsym --locked XF86AudioLowerVolume exec pamixer -d 2
|
||||
bindsym XF86MonBrightnessUp exec xbacklight -perceived -inc 2
|
||||
bindsym XF86MonBrightnessDown exec xbacklight -perceived -dec 2
|
||||
bindsym XF86KbdBrightnessUp exec xbacklight -perceived -inc 2
|
||||
bindsym XF86KbdBrightnessDown exec xbacklight -perceived -dec 2
|
||||
|
||||
floating_modifier $mod normal
|
||||
|
||||
gaps outer 15px
|
||||
gaps inner 20px
|
||||
default_border pixel 2
|
||||
smart_borders on
|
||||
|
||||
# class border background text indicator child_border
|
||||
client.urgent $nord11 $nord11 $nord6 $nord11 $nord1
|
||||
client.focused $nord3 $nord3 $nord5 $nord3 $nord3
|
||||
client.focused_inactive $nord2 $nord2 $nord5 $nord2 $nord2
|
||||
client.unfocused $nord0 $nord0 $nord4 $nord0 $nord0
|
||||
client.placeholder $nord7 $nord7 $nord6 $nord7 nord7
|
||||
|
||||
#
|
||||
# Status Bar:
|
||||
#
|
||||
# Read `man 5 sway-bar` for more information about this section.
|
||||
bar {
|
||||
position top
|
||||
|
||||
# When the status_command prints a new line to stdout, swaybar updates.
|
||||
# The default just shows the current date and time.
|
||||
height 20
|
||||
status_command while swaybar-cmd; do sleep 1; done
|
||||
font FantasqueSansMono Nerd Font Mono 10
|
||||
|
||||
colors {
|
||||
statusline $nord5
|
||||
background $nord3
|
||||
|
||||
# border bg text
|
||||
focused_workspace $nord10 $nord10 $nord5
|
||||
active_workspace $nord9 $nord9 $nord5
|
||||
inactive_workspace $nord7 $nord7 $nord5
|
||||
urgent_workspace $nord11 $nord11 $nord6
|
||||
binding_mode $nord14 $nord14 $nord6
|
||||
}
|
||||
}
|
||||
|
||||
include /etc/sway/config.d/*
|
||||
@@ -1,6 +1,7 @@
|
||||
[Unit]
|
||||
Description=MPRIS implementation for MPD
|
||||
Requires=mpd.service
|
||||
After=mpd.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
[misc]
|
||||
# Don't ask for confirmations
|
||||
#assume_yes = true
|
||||
|
||||
|
||||
@@ -131,12 +131,10 @@ graphviz \
|
||||
hugo \
|
||||
javascript-typescript-langserver \
|
||||
js-beautify \
|
||||
libxft-bgra \
|
||||
linux-headers \
|
||||
lldb \
|
||||
meson \
|
||||
mupdf-tools \
|
||||
nodejs-vmd \
|
||||
npm \
|
||||
pacman-contrib \
|
||||
pandoc-bin \
|
||||
@@ -212,7 +210,7 @@ pass \
|
||||
pdfpc \
|
||||
ripgrep \
|
||||
rsync \
|
||||
scrot \
|
||||
flameshot \
|
||||
tealdeer \
|
||||
tmux \
|
||||
tree \
|
||||
@@ -245,10 +243,10 @@ for pkg in $APPSPKG
|
||||
paru -S --skipreview --needed $pkg
|
||||
end
|
||||
|
||||
cd /home/phundrak/Documents/code/PKGBUILDs/emacs && makepkg -si; cd ..
|
||||
cd /home/phundrak/Documents/code/PKGBUILDs/nsxiv && makepkg -si; cd ..
|
||||
cd /home/phundrak/Documents/code/PKGBUILDs/pumopm-git && makepkg -si; cd ..
|
||||
cd /home/phundrak/Documents/code/PKGBUILDs/sent && makepkg -si; cd ..
|
||||
cd /home/phundrak/Documents/code/PKGBUILDs/emacs && makepkg -si && cd
|
||||
cd /home/phundrak/Documents/code/PKGBUILDs/nsxiv && makepkg -si && cd
|
||||
cd /home/phundrak/Documents/code/PKGBUILDs/pumopm-git && makepkg -si && cd
|
||||
cd /home/phundrak/Documents/code/PKGBUILDs/sent && makepkg -si && cd
|
||||
|
||||
mkdir -p $HOME/.config/fish
|
||||
mkdir -p $HOME/.config/gtk-2.0
|
||||
@@ -297,11 +295,6 @@ emacs -q --batch --eval '(require \'ob-tangle)' \
|
||||
--eval '(setq org-confirm-babel-evaluate nil)' \
|
||||
--eval '(org-babel-tangle-file "~/org/config/picom.org")'
|
||||
|
||||
printf '\n\n==== Tangling rustfmt.org\n\n' && \
|
||||
emacs -q --batch --eval '(require \'ob-tangle)' \
|
||||
--eval '(setq org-confirm-babel-evaluate nil)' \
|
||||
--eval '(org-babel-tangle-file "~/org/config/rustfmt.org")'
|
||||
|
||||
printf '\n\n==== Tangling stumpwm.org\n\n' && \
|
||||
emacs -q --batch --eval '(require \'ob-tangle)' \
|
||||
--eval '(setq org-confirm-babel-evaluate nil)' \
|
||||
@@ -316,7 +309,6 @@ if test "$USER" = 'phundrak'
|
||||
|
||||
printf "\n# Update yadm’s remotes #######################################################\n\n"
|
||||
yadm remote set-url origin git@labs.phundrak.com:phundrak/dotfiles.git
|
||||
yadm remote add github git@github.com:phundrak/dotfiles.git
|
||||
|
||||
printf "\n# Decrypt encrypted dotfiles ##################################################\n\n"
|
||||
yadm decrypt
|
||||
@@ -379,10 +371,9 @@ rustup default stable
|
||||
rustup toolchain install nightly
|
||||
|
||||
printf "\n# Add rust utilities ##########################################################\n\n"
|
||||
cargo install rustfmt racer
|
||||
cargo install rustfmt
|
||||
|
||||
rustup component add rust-src
|
||||
rustup component add rls
|
||||
rustup component add clippy
|
||||
|
||||
printf "\n# Installing fisher ###########################################################\n\n"
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
.authinfo.gpg
|
||||
.ssh/*
|
||||
.config/fish/private.fish
|
||||
.config/isync/mbsyncrc
|
||||
.local/share/gnupg/*
|
||||
.mailrc
|
||||
.mbsyncrc
|
||||
.profile.private
|
||||
.ssh/*
|
||||
org/*.org
|
||||
org/roam/*
|
||||
|
||||
37
.drone.yml
@@ -1,37 +0,0 @@
|
||||
kind: pipeline
|
||||
name: default
|
||||
|
||||
steps:
|
||||
- name: build
|
||||
image: silex/emacs:alpine
|
||||
commands:
|
||||
- emacs -Q --script export.el
|
||||
when:
|
||||
branch:
|
||||
- master
|
||||
event:
|
||||
exclude:
|
||||
- pull_request
|
||||
|
||||
- name: deploy
|
||||
image: appleboy/drone-scp
|
||||
settings:
|
||||
host:
|
||||
from_secret: ssh_host
|
||||
target:
|
||||
from_secret: ssh_target
|
||||
source:
|
||||
- org/config/*
|
||||
strip_components: 2
|
||||
username:
|
||||
from_secret: ssh_username
|
||||
password:
|
||||
from_secret: ssh_password
|
||||
port:
|
||||
from_secret: ssh_port
|
||||
when:
|
||||
branch:
|
||||
- master
|
||||
event:
|
||||
exclude:
|
||||
- pull_request
|
||||
1
.gitattributes
vendored
@@ -1 +0,0 @@
|
||||
*.org linguist-detectable=true
|
||||
15
.gitea/workflows/test.yaml
Normal file
@@ -0,0 +1,15 @@
|
||||
jobs:
|
||||
Explore-Gitea-Actions:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- run: echo "🎉 The job was automatically triggered by a ${{ gitea.event_name }} event."
|
||||
- run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by Gitea!"
|
||||
- run: echo "🔎 The name of your branch is ${{ gitea.ref }} and your repository is ${{ gitea.repository }}."
|
||||
- name: Check out repository code
|
||||
uses: actions/checkout@v3
|
||||
- run: echo "💡 The ${{ gitea.repository }} repository has been cloned to the runner."
|
||||
- run: echo "🖥️ The workflow is now ready to test your code on the runner."
|
||||
- name: List files in the repository
|
||||
run: |
|
||||
ls ${{ gitea.workspace }}
|
||||
- run: echo "🍏 This job's status is ${{ job.status }}."
|
||||
105
.profile
Executable file
@@ -0,0 +1,105 @@
|
||||
#!/bin/sh
|
||||
# shellcheck source=/dev/null
|
||||
. "$HOME"/.profile.private
|
||||
|
||||
export EMAIL=lucien@phundrak.com
|
||||
export NAME="Lucien Cartier-Tilet"
|
||||
|
||||
export XDG_CACHE_HOME="$HOME"/.cache
|
||||
export XDG_CONFIG_HOME="$HOME"/.config
|
||||
export XDG_DATA_HOME="$HOME"/.local/share
|
||||
export XDG_STATE_HOME="$HOME"/.local/state
|
||||
|
||||
SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
|
||||
export SSH_AUTH_SOCK
|
||||
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":/usr/local/lib
|
||||
export LSP_USE_PLISTS=true
|
||||
export DIFFPROG=ediff
|
||||
export SUDO_ASKPASS="$HOME"/.local/bin/askpass
|
||||
export MANPAGER=less
|
||||
|
||||
export DART_SDK=/opt/dart-sdk/bin
|
||||
export ANDROID_HOME="$HOME"/Android/Sdk
|
||||
export CHROME_EXECUTABLE=/usr/bin/chromium
|
||||
|
||||
LESS_TERMCAP_mb=$(printf '\e[1;32m')
|
||||
export LESS_TERMCAP_mb
|
||||
LESS_TERMCAP_md=$(printf '\e[1;32m')
|
||||
export LESS_TERMCAP_md
|
||||
LESS_TERMCAP_me=$(printf '\e[0m')
|
||||
export LESS_TERMCAP_me
|
||||
LESS_TERMCAP_se=$(printf '\e[0m')
|
||||
export LESS_TERMCAP_se
|
||||
LESS_TERMCAP_so=$(printf '\e[01;33m')
|
||||
export LESS_TERMCAP_so
|
||||
LESS_TERMCAP_ue=$(printf '\e[0m')
|
||||
export LESS_TERMCAP_ue
|
||||
LESS_TERMCAP_us=$(printf '\e[1;4;31m')
|
||||
export LESS_TERMCAP_us
|
||||
|
||||
export BROWSER=firefox
|
||||
|
||||
export EDITOR="emacsclient -c"
|
||||
export VISUAL="emacsclient -c"
|
||||
|
||||
export GTK_THEME=Nordic
|
||||
export GTK_ICON_THEME="Flat-Remix-Dark"
|
||||
|
||||
export __GL_SHADER_DISK_CACHE_PATH="$XDG_CACHE_HOME"/nv
|
||||
export _JAVA_OPTIONS="-Djava.util.prefs.userRoot=${XDG_CONFIG_HOME}/java -Djavafx.cachedir=${XDG_CACHE_HOME}/openjfx"
|
||||
export _Z_DATA="$XDG_DATA_HOME"/z
|
||||
export BUNDLE_USER_CACHE="$XDG_CACHE_HOME"/bundle
|
||||
export BUNDLE_USER_CONFIG="$XDG_CONFIG_HOME"/bundle
|
||||
export BUNDLE_USER_PLUGIN="$XDG_DATA_HOME"/bundle
|
||||
export CARGO_HOME="$XDG_DATA_HOME"/cargo
|
||||
export CUDA_CACHE_PATH="$XDG_CACHE_HOME"/nv
|
||||
export DENO_DIR="$HOME"/.config/deno
|
||||
export DENO_INSTALL_ROOT="$HOME"/.local/bin/deno
|
||||
export DOCKER_CONFIG="$XDG_CONFIG_HOME"/docker
|
||||
export GEM_HOME="$XDG_DATA_HOME"/gem
|
||||
export GEM_SPEC_CACHE="$XDG_CACHE_HOME"/gem
|
||||
export GNUPGHOME="$XDG_DATA_HOME"/gnupg
|
||||
export GOPATH="$XDG_DATA_HOME"/go
|
||||
export GTK2_RC_FILES="$XDG_CONFIG_HOME"/gtk-2.0/gtkrc
|
||||
export HISTFILE="$XDG_STATE_HOME/bash/history"
|
||||
export ICEAUTHORITY="$XDG_CACHE_HOME"/ICEauthority
|
||||
export LESSHISTFILE="$XDG_CACHE_HOME"/less/history
|
||||
export MBSYNCRC="$XDG_CONFIG_HOME"/isync/mbsyncrc
|
||||
export MPLAYER_HOME="$XDG_CONFIG_HOME"/mplayer
|
||||
export MYPY_CACHE_DIR="$XDG_CACHE_HOME"/mypy
|
||||
export NPM_CONFIG_USERCONFIG="$XDG_CONFIG_HOME"/npm/npmrc
|
||||
export NUGET_PACKAGES="$XDG_CACHE_HOME"/NuGetPackages
|
||||
export NVM_DIR="$XDG_DATA_HOME"/nvm
|
||||
export PARALLEL_HOME="$XDG_CONFIG_HOME"/parallel
|
||||
export PASSWORD_STORE_DIR="$XDG_DATA_HOME"/pass
|
||||
export PKG_CACHE_PATH="$XDG_CACHE_HOME"/pkg-cache
|
||||
export PSQL_HISTORY="$XDG_DATA_HOME/psql_history"
|
||||
export PYENV_ROOT="$XDG_DATA_HOME"/pyenv
|
||||
export PYLINTHOME="$XDG_CACHE_HOME"/pylint
|
||||
export PYTHONSTARTUP="$HOME"/python/pythonrc
|
||||
export RUSTUP_HOME="$XDG_DATA_HOME"/rustup
|
||||
export SQLITE_HISTORY="$XDG_CACHE_HOME"/sqlite_history
|
||||
export TERMINFO="$XDG_DATA_HOME"/terminfo
|
||||
export TERMINFO_DIRS="$XDG_DATA_HOME"/terminfo:/usr/share/terminfo
|
||||
export TEXMFVAR="$XDG_CACHE_HOME"/texlive/texmf-var
|
||||
export W3M_DIR="$XDG_DATA_HOME"/w3m
|
||||
export WINEPREFIX="$XDG_DATA_HOME"/wine
|
||||
export XAUTHORITY="$XDG_RUNTIME_DIR"/Xauthority
|
||||
export XCOMPOSEFILE="$XDG_CONFIG_HOME"/X11/xcompose
|
||||
export XCURSOR_PATH=/usr/share/icons:$XDG_DATA_HOME/icons
|
||||
export GRADLE_USER_HOME="$XDG_DATA_HOME"/gradle
|
||||
export DOTNET_CLI_HOME="$XDG_DATA_HOME"/dotnet
|
||||
export CUDA_CACHE_PATH="$XDG_CACHE_HOME"/nv
|
||||
export ANDROID_USER_HOME="$XDG_DATA_HOME"/android
|
||||
|
||||
PATH="/usr/lib/xfce-polkit/:$PATH"
|
||||
PATH="$HOME/.cabal/bin:$PATH"
|
||||
PATH="$GEM_HOME/ruby/2.6.0/bin:$PATH"
|
||||
PATH="$GEM_HOME/ruby/3.0.0/bin:$PATH"
|
||||
PATH="$GOPATH/bin:$PATH"
|
||||
PATH="${CARGO_HOME}/bin:$PATH"
|
||||
PATH="$HOME/Android/Sdk/tools/bin:$PATH"
|
||||
PATH="$HOME/.local/bin:$PATH"
|
||||
PATH="$HOME/.config/plover/plugins/linux/bin:$PATH"
|
||||
PATH="$HOME/.nix-profile/bin:$PATH"
|
||||
export PATH
|
||||
@@ -1,350 +0,0 @@
|
||||
# Maintainer: Lucien Cartier-Tilet <https://aur.archlinux.org/users/phundrak>
|
||||
|
||||
################################################################################
|
||||
# CAVEAT LECTOR: This PKGBUILD is highly opinionated. I give you
|
||||
# enough rope to hang yourself, but by default it
|
||||
# only enables the features I use.
|
||||
#
|
||||
# TLDR: yaourt users, cry me a river.
|
||||
#
|
||||
# Everyone else: do not update blindly this PKGBUILD. At least
|
||||
# make sure to compare and understand the changes.
|
||||
#
|
||||
################################################################################
|
||||
|
||||
################################################################################
|
||||
# Assign "YES" to the variable you want enabled; empty or any other value
|
||||
# for NO.
|
||||
#
|
||||
# Where you read experimental, replace with foobar.
|
||||
# =================================================
|
||||
#
|
||||
################################################################################
|
||||
CHECK= # Run tests. May fail, this is developement after all.
|
||||
CLANG= # Use clang.
|
||||
GOLD="YES" # Use the gold linker.
|
||||
LTO="YES" # Enable link-time optimization. Still experimental.
|
||||
JIT="YES" # Enable native just-in-time compilation. libgccjit is in AUR.
|
||||
# This compiles only performance critical elisp files.
|
||||
#
|
||||
# To compile all site-lisp on demand (repos/AUR packages,
|
||||
# ELPA, MELPA, whatever), add
|
||||
# (setq comp-deferred-compilation t)
|
||||
# to your .emacs file.
|
||||
AOT="YES" # Compile all elisp files.
|
||||
CLI= # CLI only binary.
|
||||
GPM= # Mouse support in Linux console using gpmd.
|
||||
NOTKIT= # Use no toolkit widgets. Like B&W Twm (001d sk00l).
|
||||
# Bitmap fonts only, 1337!
|
||||
PGTK= # Use native GTK3 build. Supports Wayland, yay!
|
||||
GTK3= # GTK3 old windowing interface.
|
||||
LUCID= # Use the lucid, a.k.a athena, toolkit. Like XEmacs, sorta.
|
||||
#
|
||||
# Read https://wiki.archlinux.org/index.php/X_resources
|
||||
# https://en.wikipedia.org/wiki/X_resources
|
||||
# and https://www.emacswiki.org/emacs/XftGnuEmacs
|
||||
# for some tips on using outline fonts with
|
||||
# Xft, if you choose no toolkit or Lucid.
|
||||
XI2="YES" # Use Xinput2 support.
|
||||
# https://www.x.org/releases/X11R7.7/doc/inputproto/XI2proto.txt
|
||||
ALSA= # Linux sound support.
|
||||
NOCAIRO= # Disable here.
|
||||
XWIDGETS="YES" # Use GTK+ widgets pulled from webkit2gtk. Usable.
|
||||
DOCS_HTML="YES" # Generate and install html documentation.
|
||||
DOCS_PDF="YES" # Generate and install pdf documentation.
|
||||
NOGZ="YES" # Don't compress .el files.
|
||||
################################################################################
|
||||
|
||||
################################################################################
|
||||
if [[ $CLI == "YES" ]] ; then
|
||||
pkgname="emacs-nox-phundrak-git"
|
||||
else
|
||||
pkgname="emacs-phundrak-git"
|
||||
fi
|
||||
pkgver=29.0.50.158942
|
||||
pkgrel=1
|
||||
pkgdesc="GNU Emacs. Development master branch with Phundrak’s tweaks."
|
||||
arch=('x86_64')
|
||||
url="http://www.gnu.org/software/emacs/"
|
||||
license=('GPL3')
|
||||
depends_nox=('gnutls' 'libxml2' 'jansson')
|
||||
depends=("${depends_nox[@]}" 'harfbuzz')
|
||||
makedepends=('git')
|
||||
b2sums=('SKIP')
|
||||
provides=('emacs')
|
||||
replaces=('emacs')
|
||||
# source=("emacs-git::git://git.savannah.gnu.org/emacs.git")
|
||||
source=("emacs-git::git+https://git.savannah.gnu.org/git/emacs.git")
|
||||
b2sums=('SKIP')
|
||||
b2sums=('SKIP')
|
||||
b2sums=('SKIP')
|
||||
OPTIONS=(strip docs !libtool !staticlibs emptydirs zipman purge !debug)
|
||||
install=emacs-git.install
|
||||
|
||||
################################################################################
|
||||
|
||||
################################################################################
|
||||
|
||||
CFLAGS+=" -O2 -march=native -mtune=native"
|
||||
CXXFLAGS+=" -O2 -march=native -mtune=native"
|
||||
|
||||
if [[ $GOLD == "YES" && ! $CLANG == "YES" ]]; then
|
||||
export LD=/usr/bin/ld.gold
|
||||
export CFLAGS+=" -fuse-ld=gold";
|
||||
export CXXFLAGS+=" -fuse-ld=gold";
|
||||
elif [[ $GOLD == "YES" && $CLANG == "YES" ]]; then
|
||||
echo "";
|
||||
echo "Clang rather uses its own linker.";
|
||||
echo "";
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
if [[ $CLANG == "YES" ]]; then
|
||||
export CC="/usr/bin/clang" ;
|
||||
export CXX="/usr/bin/clang++" ;
|
||||
export CPP="/usr/bin/clang -E" ;
|
||||
export LD="/usr/bin/lld" ;
|
||||
export AR="/usr/bin/llvm-ar" ;
|
||||
export AS="/usr/bin/llvm-as" ;
|
||||
export CCFLAGS+=' -fuse-ld=lld' ;
|
||||
export CXXFLAGS+=' -fuse-ld=lld' ;
|
||||
makedepends+=( 'clang' 'lld' 'llvm') ;
|
||||
fi
|
||||
|
||||
if [[ $JIT == "YES" ]]; then
|
||||
if [[ $CLI == "YES" ]]; then
|
||||
depends_nox+=( 'libgccjit' );
|
||||
else
|
||||
depends+=( 'libgccjit' );
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ ! $CLI == "YES" ]]; then
|
||||
depends+=( 'libxi' );
|
||||
fi
|
||||
|
||||
if [[ $CLI == "YES" ]]; then
|
||||
depends=("${depends_nox[@]}");
|
||||
elif [[ $NOTKIT == "YES" ]]; then
|
||||
depends+=( 'dbus' 'hicolor-icon-theme' 'libxinerama' 'libxrandr' 'lcms2' 'librsvg' 'libxfixes' 'libxi' 'libsm' 'xcb-util' 'libxcb' );
|
||||
makedepends+=( 'xorgproto' );
|
||||
elif [[ $LUCID == "YES" ]]; then
|
||||
depends+=( 'dbus' 'hicolor-icon-theme' 'libxinerama' 'libxfixes' 'lcms2' 'librsvg' 'xaw3d' 'libxrandr' 'libxi' 'libsm' 'xcb-util' 'libxcb' );
|
||||
makedepends+=( 'xorgproto' );
|
||||
elif [[ $GTK3 == "YES" ]]; then
|
||||
depends+=( 'gtk3' 'libsm' 'xcb-util' 'libxcb' );
|
||||
makedepends+=( 'xorgproto' 'libxi' );
|
||||
elif [[ $PGTK == "YES" ]]; then
|
||||
depends+=( 'gtk3' 'libsm' 'xcb-util' 'libxcb' );
|
||||
makedepends+=( 'xorgproto' 'libxi' );
|
||||
fi
|
||||
|
||||
if [[ ! $NOX == "YES" ]] && [[ ! $CLI == "YES" ]]; then
|
||||
depends+=( 'libjpeg-turbo' 'libpng' 'giflib' 'libwebp' 'libtiff' 'libxpm');
|
||||
elif [[ $CLI == "YES" ]]; then
|
||||
depends+=();
|
||||
fi
|
||||
|
||||
if [[ $ALSA == "YES" ]]; then
|
||||
if [[ $CLI == "YES" ]]; then
|
||||
depends_nox+=( 'alsa-lib' );
|
||||
else
|
||||
depends+=( 'alsa-lib' );
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ ! $NOCAIRO == "YES" ]] && [[ ! $CLI == "YES" ]] && [[ ! $PGTK == "YES" ]] ; then
|
||||
depends+=( 'cairo' );
|
||||
fi
|
||||
|
||||
if [[ $XWIDGETS == "YES" ]]; then
|
||||
if [[ $LUCID == "YES" ]] || [[ $NOTKIT == "YES" ]] || [[ $CLI == "YES" ]]; then
|
||||
echo "";
|
||||
echo "";
|
||||
echo "Xwidgets support **requires** GTK+3!!!";
|
||||
echo "";
|
||||
echo "";
|
||||
exit 1;
|
||||
else
|
||||
depends+=( 'webkit2gtk' );
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ $GPM == "YES" ]]; then
|
||||
if [[ $CLI == "YES" ]]; then
|
||||
depends_nox+=( 'gpm' );
|
||||
else
|
||||
depends+=( 'gpm' );
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ $DOCS_PDF == "YES" ]] && [[ ! -d '/usr/local/texlive' ]]; then
|
||||
makedepends+=( 'texlive-core' );
|
||||
fi
|
||||
################################################################################
|
||||
|
||||
################################################################################
|
||||
pkgver() {
|
||||
cd "$srcdir/emacs-git"
|
||||
|
||||
printf "%s.%s" \
|
||||
$(grep AC_INIT configure.ac | \
|
||||
awk -F',' '{ gsub("[ \\[\\]]","",$2); print $2 }') \
|
||||
$(git rev-list --count HEAD)
|
||||
}
|
||||
|
||||
# There is no need to run autogen.sh after first checkout.
|
||||
# Doing so, breaks incremental compilation.
|
||||
prepare() {
|
||||
cd "$srcdir/emacs-git"
|
||||
[[ -x configure ]] || ( ./autogen.sh git && ./autogen.sh autoconf )
|
||||
mkdir -p "$srcdir/emacs-git/build"
|
||||
}
|
||||
|
||||
if [[ $CHECK == "YES" ]]; then
|
||||
check() {
|
||||
cd "$srcdir/emacs-git/build"
|
||||
make check
|
||||
}
|
||||
fi
|
||||
|
||||
build() {
|
||||
cd "$srcdir/emacs-git/build"
|
||||
|
||||
local _conf=(
|
||||
--prefix=/usr
|
||||
--sysconfdir=/etc
|
||||
--libexecdir=/usr/lib
|
||||
--localstatedir=/var
|
||||
--mandir=/usr/share/man
|
||||
--with-gameuser=:games
|
||||
--with-modules
|
||||
--without-libotf
|
||||
--without-m17n-flt
|
||||
# Beware https://debbugs.gnu.org/cgi/bugreport.cgi?bug=25228
|
||||
# dconf and gconf break font settings you set in ~/.emacs.
|
||||
# If you insist you'll need to read that bug report in *full*.
|
||||
# Good luck!
|
||||
--without-gconf
|
||||
)
|
||||
|
||||
################################################################################
|
||||
|
||||
################################################################################
|
||||
|
||||
if [[ $CLANG == "YES" ]]; then
|
||||
_conf+=( '--enable-autodepend' );
|
||||
fi
|
||||
|
||||
if [[ $LTO == "YES" ]]; then
|
||||
_conf+=( '--enable-link-time-optimization' );
|
||||
fi
|
||||
|
||||
if [[ $JIT == "YES" ]]; then
|
||||
_conf+=( '--with-native-compilation' );
|
||||
fi
|
||||
|
||||
if [[ $XI2 == "YES" ]]; then
|
||||
_conf+=( '--with-xinput2' );
|
||||
fi
|
||||
|
||||
if [[ $CLI == "YES" ]]; then
|
||||
_conf+=( '--without-x' '--with-x-toolkit=no' '--without-xft' '--without-lcms2' '--without-rsvg' '--without-jpeg' '--without-gif' '--without-tiff' '--without-png' );
|
||||
elif [[ $NOTKIT == "YES" ]]; then
|
||||
_conf+=( '--with-x-toolkit=no' '--without-toolkit-scroll-bars' '--without-xft' '--without-xaw3d' );
|
||||
elif [[ $LUCID == "YES" ]]; then
|
||||
_conf+=( '--with-x-toolkit=lucid' '--with-xft' '--with-xaw3d' );
|
||||
elif [[ $GTK3 == "YES" ]]; then
|
||||
_conf+=( '--with-x-toolkit=gtk3' '--without-xaw3d' );
|
||||
elif [[ $PGTK == "YES" ]]; then
|
||||
_conf+=( '--with-pgtk' '--without-xaw3d' );
|
||||
fi
|
||||
|
||||
if [[ ! $PGTK == "YES" ]]; then
|
||||
_conf+=( '--without-gsettings' ) :
|
||||
fi
|
||||
|
||||
if [[ $NOCAIRO == "YES" || $CLI == "YES" || $NOTKIT == "YES" || $LUCID == "YES" ]]; then
|
||||
_conf+=( '--without-cairo' );
|
||||
fi
|
||||
|
||||
if [[ $ALSA == "YES" ]]; then
|
||||
_conf+=( '--with-sound=alsa' );
|
||||
else
|
||||
_conf+=( '--with-sound=no' );
|
||||
fi
|
||||
|
||||
if [[ $XWIDGETS == "YES" ]]; then
|
||||
_conf+=( '--with-xwidgets' );
|
||||
fi
|
||||
|
||||
if [[ $GPM == "YES" ]]; then
|
||||
true
|
||||
else
|
||||
_conf+=( '--without-gpm' );
|
||||
fi
|
||||
|
||||
if [[ $NOGZ == "YES" ]]; then
|
||||
_conf+=( '--without-compress-install' );
|
||||
fi
|
||||
|
||||
# ctags/etags may be provided by other packages, e.g, universal-ctags
|
||||
_conf+=('--program-transform-name=s/\([ec]tags\)/\1.emacs/')
|
||||
|
||||
################################################################################
|
||||
|
||||
################################################################################
|
||||
|
||||
../configure "${_conf[@]}"
|
||||
|
||||
# Using "make" instead of "make bootstrap" enables incremental
|
||||
# compiling. Less time recompiling. Yay! But you may
|
||||
# need to use bootstrap sometimes to unbreak the build.
|
||||
# Just add it to the command line.
|
||||
#
|
||||
# Please note that incremental compilation implies that you
|
||||
# are reusing your src directory!
|
||||
#
|
||||
if [[ $JIT == "YES" ]] && [[ $AOT == "YES" ]]; then
|
||||
make NATIVE_FULL_AOT=1
|
||||
else
|
||||
make
|
||||
fi
|
||||
|
||||
# You may need to run this if 'loaddefs.el' files become corrupt.
|
||||
#cd "$srcdir/emacs-git/lisp"
|
||||
#make autoloads
|
||||
#cd ../build
|
||||
|
||||
# Optional documentation formats.
|
||||
if [[ $DOCS_HTML == "YES" ]]; then
|
||||
make html;
|
||||
fi
|
||||
if [[ $DOCS_PDF == "YES" ]]; then
|
||||
make pdf;
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
package() {
|
||||
cd "$srcdir/emacs-git/build"
|
||||
|
||||
make DESTDIR="$pkgdir/" install
|
||||
|
||||
# Install optional documentation formats
|
||||
if [[ $DOCS_HTML == "YES" ]]; then make DESTDIR="$pkgdir/" install-html; fi
|
||||
if [[ $DOCS_PDF == "YES" ]]; then make DESTDIR="$pkgdir/" install-pdf; fi
|
||||
|
||||
# fix user/root permissions on usr/share files
|
||||
find "$pkgdir"/usr/share/emacs/ | xargs chown root:root
|
||||
|
||||
# fix permssions on /var/games
|
||||
mkdir -p "$pkgdir"/var/games/emacs
|
||||
chmod 775 "$pkgdir"/var/games
|
||||
chmod 775 "$pkgdir"/var/games/emacs
|
||||
chown -R root:games "$pkgdir"/var/games
|
||||
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# vim:set ft=bash ts=2 sw=2 et:
|
||||
50
README.org
@@ -3,49 +3,31 @@
|
||||
#+EMAIL: lucien@phundrak.com
|
||||
#+CREATOR: Lucien Cartier-Tilet
|
||||
#+LANGUAGE: en
|
||||
#+OPTIONS: auto-id:t H:4 broken_links:mark email:t ^:{}
|
||||
#+OPTIONS: H:4 broken_links:mark email:t ^:{}
|
||||
#+KEYWORDS: dotfiles linux emacs configuration phundrak drakpa
|
||||
|
||||
#+html: <a href="https://www.gnu.org/software/emacs/"><img src="https://img.shields.io/badge/Emacs-28.0.91-blueviolet.svg?style=flat-square&logo=GNU%20Emacs&logoColor=white" /></a>
|
||||
#+html: <a href="https://orgmode.org/"><img src="https://img.shields.io/badge/Org%20mode-litterate%20config-success?logo=Org&logoColor=white&style=flat-square"/></a>
|
||||
#+html: <a href="https://archlinux.org/"><img src="https://img.shields.io/badge/OS-Arch%20Linux-10A0CC?logo=Arch%20Linux&logoColor=white&style=flat-square"/></a>
|
||||
#+html: <a href="https://config.phundrak.com"><img src="https://img.shields.io/badge/dynamic/json?label=Online%20documentation&query=%24%5B%3A1%5D.status&url=https%3A%2F%2Fdrone.phundrak.com%2Fapi%2Frepos%2Fphundrak%2Fdotfiles%2Fbuilds&style=flat-square&logo=buffer" /></a>
|
||||
|
||||
* Presentation
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Presentation-e5605995
|
||||
:END:
|
||||
This repository is where I keep most of my configuration files. With what is
|
||||
stored here, anyone can recreate a working desktop configuration similar to my
|
||||
daily one.
|
||||
This repository is where I keep most of my configuration files. With
|
||||
what is stored here, anyone can recreate a working desktop
|
||||
configuration similar to my daily one.
|
||||
|
||||
My dotfiles are managed by [[https://yadm.io/][yadm]], and although I don’t use its alternate files
|
||||
features (which is pretty neat btw), it allows me to painlessly manage my
|
||||
dotfiles right where they are and not in a separate Git repository somewhere
|
||||
with everything symlinked. Another advantage of yadm is it will automatically
|
||||
execute (with your authorization, of course) my homemade bootstrap when my
|
||||
dotfiles are cloned through yadm.
|
||||
My dotfiles are managed by [[https://yadm.io/][yadm]], and although I don’t use its
|
||||
alternate files features (which is pretty neat btw), it allows me to
|
||||
painlessly manage my dotfiles right where they are and not in a
|
||||
separate Git repository somewhere with everything symlinked. Another
|
||||
advantage of yadm is it will automatically execute (with your
|
||||
authorization, of course) my homemade bootstrap when my dotfiles are
|
||||
cloned through yadm.
|
||||
|
||||
* Where’s the config file for X?
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Where’s_the_config_file_for_X?-7b214c4a
|
||||
:END:
|
||||
As you may have noticed, I am striving for a 100% amount of configuration
|
||||
files exported from Org files, that is, through literary programming. This is
|
||||
still very much a work in progress though. Most of what you need can be found
|
||||
in my [[file:org/config/index.org][index.org]] file and in its folder.
|
||||
|
||||
* Some more info please?
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Some_more_info_please?-f54ae73a
|
||||
:END:
|
||||
Everything you need to know is in my [[file:org/config/]] folder, and my Org files
|
||||
are also available in web format on my website [[https://config.phundrak.com/][config.phundrak.com]].
|
||||
* A lot of things are missing!
|
||||
Yep, a lot of things are not in this repository but over at
|
||||
[[https://config.phundrak.com][config.phundrak.com]]. This is where I store all my litterate config.
|
||||
You can check out its own repo over at
|
||||
[[https://labs.phundrak.com/phundrak/config.phundrak.com][labs.phundrak.com/phundrak/config.phundrak.com]].
|
||||
|
||||
* Neat, what’s the license?
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Neat,_what’s_the_license?-399aa236
|
||||
:END:
|
||||
All of my dotfiles (and my dotfiles only) are available under the GNU GPLv3
|
||||
Licence. Please consult [[file:LICENCE.md]] for more information. In short: you
|
||||
are free to access, edit and redistribute all of my dotfiles under the same
|
||||
|
||||
32
code/PKGBUILDs/NextcloudTalk/PKGBUILD
Normal file
@@ -0,0 +1,32 @@
|
||||
# Maintainer: Lucien Cartier-Tilet <lucien@phundrak.com>
|
||||
_pkgname=nextcloud-talk
|
||||
pkgname="${_pkgname}-bin"
|
||||
pkgver=0.10.0
|
||||
_dirname="Nextcloud Talk-linux-x64"
|
||||
_archivename="${_dirname// /.}-${pkgver}"
|
||||
pkgrel=1
|
||||
pkgdesc="Nextcloud Talk Desktop Client Preview"
|
||||
arch=('x86_64')
|
||||
url="https://github.com/nextcloud/talk-desktop"
|
||||
makedepend=('unzip')
|
||||
license=('AGPL-3.0')
|
||||
provides=('nextcloud-talk')
|
||||
source=("https://github.com/nextcloud-releases/talk-desktop/releases/download/v${pkgver}/${_archivename}.zip"
|
||||
nextcloud-talk.desktop )
|
||||
sha256sums=('3b1c1620665078069491ff86395d87727c91da8153a9842e9206c4b2f7f020dd'
|
||||
'2fba0d3e869145cbdfcd24c104d196ee8857a05950b7a59b47f025f39e9e5214')
|
||||
|
||||
package() {
|
||||
cd "$srcdir"
|
||||
mkdir -p "${pkgdir}/usr/share/applications/"
|
||||
install -Dm644 "${_pkgname}.desktop" "${pkgdir}/usr/share/applications/"
|
||||
cd "$_dirname"
|
||||
mkdir -p "${pkgdir}/usr/share-licenses/${_pkgname}"
|
||||
install -Dm644 LICENSE "${pkgdir}/usr/share-licenses/${_pkgname}"
|
||||
install -Dm644 LICENSES.chromium.html "${pkgdir}/usr/share-licenses/${_pkgname}"
|
||||
mkdir -p "${pkgdir}/opt/nextcloud-talk"
|
||||
mv "Nextcloud Talk" nextcloud-talk
|
||||
mv * "${pkgdir}/opt/nextcloud-talk/"
|
||||
}
|
||||
|
||||
# vim:set ts=2 sw=2 et:
|
||||
9
code/PKGBUILDs/NextcloudTalk/nextcloud-talk.desktop
Normal file
@@ -0,0 +1,9 @@
|
||||
[Desktop Entry]
|
||||
Name=Nextcloud Talk
|
||||
Version=0.7.0
|
||||
Type=Application
|
||||
Exec=/opt/nextcloud-talk/nextcloud-talk
|
||||
StartupNotify=true
|
||||
Terminal=false
|
||||
Categories=Network
|
||||
Keywords=Nextcloud
|
||||
@@ -1,6 +1,6 @@
|
||||
# Maintainer: Lucien Cartier-Tilet <lucien@phundrak.com>
|
||||
pkgname=Wonderdraft
|
||||
pkgver=1.1.6.1
|
||||
pkgver=1.1.7.3
|
||||
pkgrel=1
|
||||
epoch=
|
||||
pkgdesc=""
|
||||
@@ -19,7 +19,7 @@ options=(!strip docs !libtool !staticlibs emptydirs zipman purge !debug)
|
||||
install=
|
||||
changelog=
|
||||
source=($pkgname-$pkgver-Linux64.zip)
|
||||
sha512sums=('27b0a56c95efe99c2b3cadb10c4e70186591bef0793d58b1acff99f8dfc789806ae7821adcdfc10af1c46e4801a8fe753380913ea4aeb4fb8030fe7cf80ea090')
|
||||
sha512sums=('4eaff01dad549223265cca10c3f9bf9cdbee4542b6a4afbf513fd655a47238e2d757c36d8ed7ffe16a19879f6d41739ee1e722ebc120507cde3b39250ae22c9c')
|
||||
noextract=()
|
||||
|
||||
package() {
|
||||
28
code/PKGBUILDs/appwrite-cli/PKGBUILD
Normal file
@@ -0,0 +1,28 @@
|
||||
# Maintainer: Lucien Cartier-Tilet <lucien@phundrak.com>
|
||||
|
||||
_pkgname=appwrite-cli
|
||||
_orgname=appwrite
|
||||
_ghpkgname=sdk-for-cli
|
||||
pkgname="nodejs-${_pkgname}"
|
||||
pkgver=4.1.0
|
||||
pkgrel=1
|
||||
pkgdesc="Command-line tool for building and testing Emacs Lisp packages"
|
||||
url="https://github.com/${_orgname}/${_ghpkgname}"
|
||||
license=("BSD-3-Clause")
|
||||
arch=("any")
|
||||
depends=("nodejs")
|
||||
makedepends=("npm")
|
||||
source=("https://registry.npmjs.org/${_pkgname}/-/${_pkgname}-${pkgver}.tgz")
|
||||
sha256sums=('83f35fcc7c54fec519791e4bc28f2c6913971357a055eb9113cbaa7259f3edc4')
|
||||
noextract=("$_pkgname-$pkgver.tgz")
|
||||
|
||||
prepare() {
|
||||
tar xzf "$_pkgname-$pkgver.tgz"
|
||||
}
|
||||
|
||||
package() {
|
||||
npm i --location=global --cache "${srcdir}/npm-cache" --prefix "$pkgdir/usr" "$srcdir/$_pkgname-$pkgver.tgz"
|
||||
install -Dm644 package/LICENSE.md "$pkgdir/usr/share/licenses/$_pkgname/COPYING"
|
||||
}
|
||||
|
||||
# vim:set ts=2 sw=2 et:
|
||||
27
code/PKGBUILDs/eask/PKGBUILD
Normal file
@@ -0,0 +1,27 @@
|
||||
# Maintainer: Lucien Cartier-Tilet <lucien@phundrak.com>
|
||||
|
||||
_pkgname=eask
|
||||
_orgname=emacs-eask
|
||||
_nodepkgname=cli
|
||||
pkgname="nodejs-${_pkgname}"
|
||||
pkgver=0.9.3
|
||||
pkgrel=1
|
||||
pkgdesc="Command-line tool for building and testing Emacs Lisp packages"
|
||||
url="https://github.com/${_orgname}/${_pkgname}"
|
||||
license=("GPL3")
|
||||
arch=("any")
|
||||
depends=("nodejs")
|
||||
makedepends=("npm")
|
||||
source=("https://registry.npmjs.org/@${_orgname}/${_nodepkgname}/-/${_nodepkgname}-${pkgver}.tgz")
|
||||
sha256sums=('1f3d948d89544c7680f882c9dee72f121a500947a42aa14b785ac949f729a3d0')
|
||||
noextract=("$_pkgname-$pkgver.tgz")
|
||||
|
||||
prepare() {
|
||||
tar xf "$_nodepkgname-$pkgver.tgz" package/COPYING
|
||||
}
|
||||
|
||||
package() {
|
||||
npm i --location=global --cache "${srcdir}/npm-cache" --prefix "$pkgdir/usr" "$srcdir/$_nodepkgname-$pkgver.tgz"
|
||||
install -Dm644 package/COPYING "$pkgdir/usr/share/licenses/${_pkgname}/COPYING"
|
||||
install -Dm644 package/README.md "$pkgdir/usr/share/doc/${_pkgname}/README.md"
|
||||
}
|
||||
@@ -3,19 +3,19 @@
|
||||
|
||||
_pkgname=nsxiv
|
||||
pkgname="${_pkgname}-bepo-git"
|
||||
pkgver=29.r13.g6922d5d
|
||||
pkgver=31.r19.gc03ec39
|
||||
pkgrel=1
|
||||
pkgdesc='New Simple X Image Viewer'
|
||||
arch=('x86_64')
|
||||
license=('GPL2')
|
||||
conflicts=("$_pkgname" "${_pkgname}-git")
|
||||
provides=('sxiv')
|
||||
url="https://github.com/${_pkgname}/${_pkgname}"
|
||||
url="https://codeberg.org/${_pkgname}/${_pkgname}"
|
||||
depends=('imlib2' 'desktop-file-utils' 'xdg-utils' 'hicolor-icon-theme' 'libexif' 'libxft' 'giflib' 'libwebp')
|
||||
makedepends=(git)
|
||||
source=("${_pkgname}::git+$url" config.h)
|
||||
sha512sums=('SKIP'
|
||||
'fc4d8327b2de66f90af245d8670c4fd0169ba172fcdd0344d3ba6d72b13f54583b7042b4f7bfc891645675c3a0771c0144a6c0486a8380af93b7d090f990c6aa')
|
||||
b2sums=('SKIP'
|
||||
'657b40dab4ed27e2d1402feb4fcd2dd225504c2e3a619da08cf87e36405d18a161a64939374670626e896c03a553a718f93b1bf54703f2d30dcdb27e082d6c21')
|
||||
|
||||
pkgver() {
|
||||
cd "$srcdir/${_pkgname}"
|
||||
@@ -1,4 +1,4 @@
|
||||
#ifdef _WINDOW_CONFIG
|
||||
#ifdef INCLUDE_WINDOW_CONFIG
|
||||
|
||||
/* default window dimensions (overwritten via -g option): */
|
||||
static const int WIN_WIDTH = 800;
|
||||
@@ -14,26 +14,13 @@ static const char *DEFAULT_MARK_COLOR = NULL; /* NULL means it will default to
|
||||
static const char *DEFAULT_BAR_BG = NULL; /* NULL means it will default to window background */
|
||||
static const char *DEFAULT_BAR_FG = NULL; /* NULL means it will default to window foreground */
|
||||
static const char *DEFAULT_FONT = "monospace-8";
|
||||
#endif
|
||||
|
||||
/* if true, statusbar appears on top of the window */
|
||||
static const bool TOP_STATUSBAR = false;
|
||||
#endif /* HAVE_LIBFONTS */
|
||||
|
||||
#endif
|
||||
#ifdef _TITLE_CONFIG
|
||||
|
||||
/* default title prefix */
|
||||
static const char *TITLE_PREFIX = "nsxiv - ";
|
||||
|
||||
/* default title suffixmode, available options are:
|
||||
* SUFFIX_EMPTY
|
||||
* SUFFIX_BASENAME
|
||||
* SUFFIX_FULLPATH
|
||||
*/
|
||||
static const suffixmode_t TITLE_SUFFIXMODE = SUFFIX_BASENAME;
|
||||
|
||||
#endif
|
||||
#ifdef _IMAGE_CONFIG
|
||||
#ifdef INCLUDE_IMAGE_CONFIG
|
||||
|
||||
/* levels (in percent) to use when zooming via '-' and '+':
|
||||
* (first/last value is used as min/max zoom level)
|
||||
@@ -46,36 +33,45 @@ static const float zoom_levels[] = {
|
||||
/* default slideshow delay (in sec, overwritten via -S option): */
|
||||
static const int SLIDESHOW_DELAY = 5;
|
||||
|
||||
/* gamma correction: the user-visible ranges [-GAMMA_RANGE, 0] and
|
||||
* (0, GAMMA_RANGE] are mapped to the ranges [0, 1], and (1, GAMMA_MAX].
|
||||
/* color correction: the user-visible ranges [-CC_STEPS, 0] and
|
||||
* (0, CC_STEPS] are mapped to the ranges [0, 1], and (1, *_MAX].
|
||||
* Higher step count will have higher granulairy.
|
||||
*/
|
||||
static const double GAMMA_MAX = 10.0;
|
||||
static const int GAMMA_RANGE = 32;
|
||||
static const int CC_STEPS = 32;
|
||||
static const double GAMMA_MAX = 10.0;
|
||||
static const double BRIGHTNESS_MAX = 2.0;
|
||||
static const double CONTRAST_MAX = 4.0;
|
||||
|
||||
/* command i_scroll pans image 1/PAN_FRACTION of screen width/height */
|
||||
static const int PAN_FRACTION = 5;
|
||||
|
||||
/* if false, pixelate images at zoom level != 100%,
|
||||
* toggled with 'a' key binding
|
||||
*/
|
||||
static const bool ANTI_ALIAS = true;
|
||||
|
||||
/* if true, use a checkerboard background for alpha layer,
|
||||
* toggled with 'A' key binding
|
||||
*/
|
||||
static const bool ALPHA_LAYER = false;
|
||||
|
||||
/* percentage of memory to use for imlib2's cache size.
|
||||
* 3 means use 3% of total memory which is about 245MiB on 8GiB machine.
|
||||
* 0 or less means disable cache.
|
||||
* 100 means use all available memory (but not above CACHE_SIZE_LIMIT).
|
||||
*
|
||||
* NOTE: higher cache size means better image reloading performance, but also
|
||||
* higher memory usage.
|
||||
*/
|
||||
static const int CACHE_SIZE_MEM_PERCENTAGE = 3; /* use 3% of total memory for cache */
|
||||
static const int CACHE_SIZE_LIMIT = 256 * 1024 * 1024; /* but not above 256MiB */
|
||||
static const int CACHE_SIZE_FALLBACK = 32 * 1024 * 1024; /* fallback to 32MiB if we can't determine total memory */
|
||||
|
||||
#endif
|
||||
#ifdef _THUMBS_CONFIG
|
||||
#ifdef INCLUDE_OPTIONS_CONFIG
|
||||
|
||||
/* if false, pixelate images at zoom level != 100%,
|
||||
* toggled with 'a' key binding (overwritten via `--anti-alias` option)
|
||||
*/
|
||||
static const bool ANTI_ALIAS = true;
|
||||
|
||||
/* if true, use a checkerboard background for alpha layer,
|
||||
* toggled with 'A' key binding (overwritten via `--alpha-layer` option)
|
||||
*/
|
||||
static const bool ALPHA_LAYER = false;
|
||||
|
||||
#endif
|
||||
#ifdef INCLUDE_THUMBS_CONFIG
|
||||
|
||||
/* thumbnail sizes in pixels (width == height): */
|
||||
static const int thumb_sizes[] = { 32, 64, 96, 128, 160 };
|
||||
@@ -84,7 +80,7 @@ static const int thumb_sizes[] = { 32, 64, 96, 128, 160 };
|
||||
static const int THUMB_SIZE = 3;
|
||||
|
||||
#endif
|
||||
#ifdef _MAPPINGS_CONFIG
|
||||
#ifdef INCLUDE_MAPPINGS_CONFIG
|
||||
|
||||
/* these modifiers will be used when processing keybindings */
|
||||
static const unsigned int USED_MODMASK = ShiftMask | ControlMask | Mod1Mask;
|
||||
@@ -1,58 +0,0 @@
|
||||
---
|
||||
AlignAfterOpenBracket: Align
|
||||
AlignConsecutiveAssignments: 'true'
|
||||
AlignEscapedNewlines: Left
|
||||
AlignOperands: 'true'
|
||||
AlignTrailingComments: 'true'
|
||||
AllowAllParametersOfDeclarationOnNextLine: 'true'
|
||||
AllowShortBlocksOnASingleLine: 'true'
|
||||
AllowShortCaseLabelsOnASingleLine: 'true'
|
||||
AllowShortFunctionsOnASingleLine: Empty
|
||||
AllowShortIfStatementsOnASingleLine: 'false'
|
||||
AllowShortLoopsOnASingleLine: 'false'
|
||||
AlwaysBreakAfterReturnType: None
|
||||
AlwaysBreakBeforeMultilineStrings: 'false'
|
||||
AlwaysBreakTemplateDeclarations: 'true'
|
||||
BinPackArguments: 'true'
|
||||
BinPackParameters: 'true'
|
||||
BreakAfterJavaFieldAnnotations: 'true'
|
||||
BreakBeforeBinaryOperators: All
|
||||
BreakBeforeBraces: Linux
|
||||
BreakBeforeInheritanceComma: 'false'
|
||||
BreakBeforeTernaryOperators: 'true'
|
||||
BreakConstructorInitializers: BeforeColon
|
||||
BreakStringLiterals: 'true'
|
||||
ColumnLimit: '80'
|
||||
CompactNamespaces: 'false'
|
||||
ConstructorInitializerAllOnOneLineOrOnePerLine: 'false'
|
||||
Cpp11BracedListStyle: 'true'
|
||||
FixNamespaceComments: 'true'
|
||||
IncludeBlocks: Regroup
|
||||
IndentCaseLabels: 'false'
|
||||
IndentPPDirectives: AfterHash
|
||||
IndentWrappedFunctionNames: 'false'
|
||||
JavaScriptQuotes: Leave
|
||||
JavaScriptWrapImports: 'true'
|
||||
KeepEmptyLinesAtTheStartOfBlocks: 'false'
|
||||
Language: Cpp
|
||||
MaxEmptyLinesToKeep: '1'
|
||||
NamespaceIndentation: Inner
|
||||
PointerAlignment: Right
|
||||
ReflowComments: 'true'
|
||||
SortIncludes: 'true'
|
||||
SortUsingDeclarations: 'true'
|
||||
SpaceAfterCStyleCast: 'false'
|
||||
SpaceAfterTemplateKeyword: 'false'
|
||||
SpaceBeforeAssignmentOperators: 'true'
|
||||
SpaceBeforeParens: ControlStatements
|
||||
SpaceInEmptyParentheses: 'false'
|
||||
SpacesBeforeTrailingComments: '2'
|
||||
SpacesInAngles: 'false'
|
||||
SpacesInCStyleCastParentheses: 'false'
|
||||
SpacesInContainerLiterals: 'false'
|
||||
SpacesInParentheses: 'false'
|
||||
SpacesInSquareBrackets: 'false'
|
||||
Standard: Cpp11
|
||||
UseTab: ForIndentation
|
||||
|
||||
...
|
||||
179
dev/conan-project/.gitignore
vendored
@@ -1,179 +0,0 @@
|
||||
# Created by https://www.gitignore.io/api/c,c++,ninja,macos,linux,cmake,windows,visualstudiocode
|
||||
# Edit at https://www.gitignore.io/?templates=c,c++,ninja,macos,linux,cmake,windows,visualstudiocode
|
||||
|
||||
### C ###
|
||||
# Prerequisites
|
||||
*.d
|
||||
|
||||
# Object files
|
||||
*.o
|
||||
*.ko
|
||||
*.obj
|
||||
*.elf
|
||||
|
||||
# Linker output
|
||||
*.ilk
|
||||
*.map
|
||||
*.exp
|
||||
|
||||
# Precompiled Headers
|
||||
*.gch
|
||||
*.pch
|
||||
|
||||
# Libraries
|
||||
*.lib
|
||||
*.a
|
||||
*.la
|
||||
*.lo
|
||||
|
||||
# Shared objects (inc. Windows DLLs)
|
||||
*.dll
|
||||
*.so
|
||||
*.so.*
|
||||
*.dylib
|
||||
|
||||
# Executables
|
||||
*.exe
|
||||
*.out
|
||||
*.app
|
||||
*.i*86
|
||||
*.x86_64
|
||||
*.hex
|
||||
|
||||
# Debug files
|
||||
*.dSYM/
|
||||
*.su
|
||||
*.idb
|
||||
*.pdb
|
||||
|
||||
# Kernel Module Compile Results
|
||||
*.mod*
|
||||
*.cmd
|
||||
.tmp_versions/
|
||||
modules.order
|
||||
Module.symvers
|
||||
Mkfile.old
|
||||
dkms.conf
|
||||
|
||||
### C++ ###
|
||||
# Prerequisites
|
||||
|
||||
# Compiled Object files
|
||||
*.slo
|
||||
|
||||
# Precompiled Headers
|
||||
|
||||
# Compiled Dynamic libraries
|
||||
|
||||
# Fortran module files
|
||||
*.mod
|
||||
*.smod
|
||||
|
||||
# Compiled Static libraries
|
||||
*.lai
|
||||
|
||||
# Executables
|
||||
|
||||
### CMake ###
|
||||
CMakeLists.txt.user
|
||||
CMakeCache.txt
|
||||
CMakeFiles
|
||||
CMakeScripts
|
||||
Testing
|
||||
Makefile
|
||||
cmake_install.cmake
|
||||
install_manifest.txt
|
||||
compile_commands.json
|
||||
CTestTestfile.cmake
|
||||
_deps
|
||||
|
||||
### CMake Patch ###
|
||||
# External projects
|
||||
*-prefix/
|
||||
|
||||
### Linux ###
|
||||
*~
|
||||
|
||||
# temporary files which can be created if a process still has a handle open of a deleted file
|
||||
.fuse_hidden*
|
||||
|
||||
# KDE directory preferences
|
||||
.directory
|
||||
|
||||
# Linux trash folder which might appear on any partition or disk
|
||||
.Trash-*
|
||||
|
||||
# .nfs files are created when an open file is removed but is still being accessed
|
||||
.nfs*
|
||||
|
||||
### macOS ###
|
||||
# General
|
||||
.DS_Store
|
||||
.AppleDouble
|
||||
.LSOverride
|
||||
|
||||
# Icon must end with two \r
|
||||
Icon
|
||||
|
||||
# Thumbnails
|
||||
._*
|
||||
|
||||
# Files that might appear in the root of a volume
|
||||
.DocumentRevisions-V100
|
||||
.fseventsd
|
||||
.Spotlight-V100
|
||||
.TemporaryItems
|
||||
.Trashes
|
||||
.VolumeIcon.icns
|
||||
.com.apple.timemachine.donotpresent
|
||||
|
||||
# Directories potentially created on remote AFP share
|
||||
.AppleDB
|
||||
.AppleDesktop
|
||||
Network Trash Folder
|
||||
Temporary Items
|
||||
.apdisk
|
||||
|
||||
### Ninja ###
|
||||
.ninja_deps
|
||||
.ninja_log
|
||||
|
||||
### VisualStudioCode ###
|
||||
.vscode/*
|
||||
!.vscode/settings.json
|
||||
!.vscode/tasks.json
|
||||
!.vscode/launch.json
|
||||
!.vscode/extensions.json
|
||||
|
||||
### VisualStudioCode Patch ###
|
||||
# Ignore all local history of files
|
||||
.history
|
||||
|
||||
### Windows ###
|
||||
# Windows thumbnail cache files
|
||||
Thumbs.db
|
||||
ehthumbs.db
|
||||
ehthumbs_vista.db
|
||||
|
||||
# Dump file
|
||||
*.stackdump
|
||||
|
||||
# Folder config file
|
||||
[Dd]esktop.ini
|
||||
|
||||
# Recycle Bin used on file shares
|
||||
$RECYCLE.BIN/
|
||||
|
||||
# Windows Installer files
|
||||
*.cab
|
||||
*.msi
|
||||
*.msix
|
||||
*.msm
|
||||
*.msp
|
||||
|
||||
# Windows shortcuts
|
||||
*.lnk
|
||||
|
||||
# End of https://www.gitignore.io/api/c,c++,ninja,macos,linux,cmake,windows,visualstudiocode
|
||||
|
||||
build
|
||||
@@ -1,56 +0,0 @@
|
||||
cmake_minimum_required(VERSION 3.14)
|
||||
|
||||
project("PROJECTNAME"
|
||||
VERSION 0.1
|
||||
DESCRIPTION "Description of PROJECTNAME"
|
||||
HOMEPAGE_URL "https://labs.phundrak.fr/phundrak/PROJECTNAME"
|
||||
LANGUAGES CXX)
|
||||
|
||||
set(CMAKE_CXX_COMPILER /usr/bin/clang++)
|
||||
file(GLOB SRC_FILES "src/*.cc")
|
||||
|
||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
|
||||
|
||||
include(functions)
|
||||
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
|
||||
conan_basic_setup()
|
||||
|
||||
enable_cxx_compiler_flag_if_supported("-Wall")
|
||||
enable_cxx_compiler_flag_if_supported("-pedantic")
|
||||
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
enable_cxx_compiler_flag_if_supported("-g")
|
||||
else()
|
||||
enable_cxx_compiler_flag_if_supported("-O3")
|
||||
enable_cxx_compiler_flag_if_supported("-flto")
|
||||
endif()
|
||||
|
||||
# include_directories(<PUBLIC HEADER DIRECTORIES>)
|
||||
|
||||
# Main software
|
||||
set(TGT PROJECTNAME)
|
||||
add_executable(${TGT} ${SRC_FILES})
|
||||
target_compile_features(${TGT} PRIVATE cxx_std_17)
|
||||
target_include_directories(${TGT} PRIVATE include/PROJECTNAME)
|
||||
target_link_libraries(${TGT} ${CONAN_LIBS})
|
||||
|
||||
# Tests, -DTESTS=True to activate
|
||||
if(TESTS)
|
||||
set(TESTTGT PROJECTNAME-tests)
|
||||
file(GLOB TEST_FILES "tests/tests.cc")
|
||||
add_executable(${TESTTGT} ${TEST_FILES})
|
||||
target_compile_features(${TESTTGT} PRIVATE cxx_std_17)
|
||||
target_include_directories(${TESTTGT} PRIVATE include/PROJECTNAME)
|
||||
target_link_libraries(${TESTTGT} ${CONAN_LIBS})
|
||||
endif()
|
||||
|
||||
# OS specific instructions.
|
||||
if(APPLE)
|
||||
elseif(WIN32)
|
||||
# Windows developer environment specific instructions.
|
||||
if(MINGW)
|
||||
elseif(MSYS)
|
||||
elseif(CYGWIN)
|
||||
endif()
|
||||
elseif(UNIX)
|
||||
else()
|
||||
endif()
|
||||
@@ -1,21 +0,0 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2019 Jinsoo Heo
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -1,60 +0,0 @@
|
||||
[[http://spacemacs.org][file:https://cdn.rawgit.com/syl20bnr/spacemacs/442d025779da2f62fc86c2082703697714db6514/assets/spacemacs-badge.svg]]
|
||||
|
||||
* PROJECTNAME
|
||||
|
||||
PROJECTNAME is a C++17 project written for and built with CMake and Ninja.
|
||||
|
||||
* How to build PROJECTNAME
|
||||
|
||||
You will ned to have Ninja and Conan installed. To install Ninja, install the
|
||||
appropriate package offered by your package manager (~ninja-build~ on Debian,
|
||||
~ninja~ on Arch Linux and Void Linux), and to install conan, use ~pip~.
|
||||
#+begin_src shell
|
||||
pip install --user conan
|
||||
#+end_src
|
||||
|
||||
This project is built with conan, ninja and cmake using clang-7 for C++17. To
|
||||
use it, first install clang-7 and lldb 7, then run this:
|
||||
#+begin_src shell
|
||||
conan profile new default --detect
|
||||
conan profile update settings.compiler=clang default
|
||||
conan profile update settings.compiler.version=7.0 default
|
||||
conan profile update settings.compiler.libcxx=libstdc++11 default
|
||||
conan profile update env.CC=/bin/clang default
|
||||
conan profile update env.CXX=/bin/clang++ default
|
||||
#+end_src
|
||||
If you do not wish to overwrite your ~default~ profile, you can instead create a
|
||||
new one, for instance ~clang~. To do so, write the name of your new profile (in
|
||||
this example ~clang~) instead of ~default~ in the commands shown above.
|
||||
|
||||
Then, To build and run the program, go to the root of the project and run this:
|
||||
#+begin_src shell
|
||||
mkdir build && cd build
|
||||
conan install .. --build missing
|
||||
cmake -DCMAKE_CXX_COMPILER=clang++ .. -G Ninja
|
||||
cmake --build .
|
||||
#+end_src
|
||||
If you want to use another profile than your default one, you should run the
|
||||
following line instead of the second line:
|
||||
#+begin_src shell
|
||||
conan install .. --build missing --profile <your_profile>
|
||||
#+end_src
|
||||
If you wish to build the project’s tests in addition to the project itself, you
|
||||
can add the option ~-DTESTS=True~ to the first ~cmake~ command to build the
|
||||
project’s tests too.
|
||||
#+begin_src shell
|
||||
cmake -DCMAKE_CXX_COMPILER=clang++ -DTESTS=True .. -G Ninja
|
||||
#+end_src
|
||||
|
||||
If you do not wish to build your project with Ninja but with another generator,
|
||||
such as Unix Makefiles, simply replace ~Ninja~ in the second to last ~cmake~
|
||||
command with the name of your generator. For instance:
|
||||
#+begin_src shell
|
||||
cmake -DCMAKE_CXX_COMPILER=clang++ .. -G "Unix Makefiles"
|
||||
#+end_src
|
||||
You can still build your project by running ~cmake --build .~ or by running
|
||||
~make~ manually.
|
||||
|
||||
* Credits
|
||||
|
||||
Awesome C++ Template by [[https://github.com/devkoriel/AwesomeCppTemplate][devkoriel]].
|
||||
@@ -1,12 +0,0 @@
|
||||
INCLUDE(CheckCXXCompilerFlag)
|
||||
|
||||
function(enable_cxx_compiler_flag_if_supported flag)
|
||||
string(FIND "${CMAKE_CXX_FLAGS}" "${flag}" flag_already_set)
|
||||
if(flag_already_set EQUAL -1)
|
||||
check_cxx_compiler_flag("${flag}" flag_supported)
|
||||
if(flag_supported)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}" PARENT_SCOPE)
|
||||
endif()
|
||||
unset(flag_supported CACHE)
|
||||
endif()
|
||||
endfunction()
|
||||
@@ -1,16 +0,0 @@
|
||||
from conans import ConanFile, CMake
|
||||
|
||||
|
||||
class PROJECTNAMEConan(ConanFile):
|
||||
settings = "os", "compiler", "build_type", "arch"
|
||||
requires = "gtest/1.8.1@bincrafters/stable"
|
||||
generators = "cmake", "gcc", "txt"
|
||||
|
||||
def imports(self):
|
||||
self.copy("*.dll", dst="bin", src="bin") # From bin to bin
|
||||
self.copy("*.dylib*", dst="bin", src="lib") # From lib to bin
|
||||
|
||||
def build(self):
|
||||
cmake = CMake(self)
|
||||
cmake.configure()
|
||||
cmake.build()
|
||||
@@ -1,6 +0,0 @@
|
||||
#include <iostream>
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
std::cout << "Hello World!" << std::endl;
|
||||
return 0;
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
#include "Poco/MD5Engine.h"
|
||||
#include "Poco/DigestStream.h"
|
||||
|
||||
#include "class.hpp"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
Poco::MD5Engine md5;
|
||||
Poco::DigestOutputStream ds(md5);
|
||||
ds << "abcdefghijklmnopqrstuvwxyz";
|
||||
ds.close();
|
||||
std::cout << Poco::DigestEngine::digestToHex(md5.digest()) << std::endl;
|
||||
return 0;
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
TEST(SquareRootTest, PositiveNos) {
|
||||
ASSERT_EQ(6, 2 * 3);
|
||||
ASSERT_EQ(6, -2 * -3);
|
||||
}
|
||||
|
||||
TEST(SquareRootTest, NegativeNos) {
|
||||
ASSERT_EQ(-6, -2 * 3);
|
||||
ASSERT_EQ(-6, 2 * -3);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
testing::InitGoogleTest(&argc, argv);
|
||||
return RUN_ALL_TESTS();
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
.\" Automatically generated by Pandoc 2.5
|
||||
.\"
|
||||
.TH "cnew" "" "" "" ""
|
||||
.hy
|
||||
.SH NAME
|
||||
.PP
|
||||
\f[B]cnew\f[R] \- New C11 Project
|
||||
.SH SYNOPSIS
|
||||
.PP
|
||||
cnew PROJECT
|
||||
.SH DESCRIPTION
|
||||
.PP
|
||||
Creates a new C11 CMake\-based project named PROJECT.
|
||||
.SH REPORTING BUGS
|
||||
.PP
|
||||
Git repository available at
|
||||
<https://labs.phundrak.fr/phundrak/dotfiles>.
|
||||
.SH Copyright
|
||||
.PP
|
||||
Copyright Lucien \[dq]Phundrak\[dq] Cartier Tilet 2019\-2020.
|
||||
Licence GPLv3+: GNU GPL version 3 or later
|
||||
<https://gnu.org/licenses/gpl.html>.
|
||||
This is free software: you are free to change and redistribute it.
|
||||
There is NO WARRANTY, to the extent permitted by law.
|
||||
.SH AUTHORS
|
||||
Lucien \[dq]Phundrak\[dq] Cartier Tilet.
|
||||
@@ -1,16 +0,0 @@
|
||||
#+TITLE: cnew
|
||||
#+AUTHOR: Lucien "Phundrak" Cartier Tilet
|
||||
* NAME
|
||||
*{{{title}}}* - New C11 Project
|
||||
|
||||
* SYNOPSIS
|
||||
{{{title}}} PROJECT
|
||||
|
||||
* DESCRIPTION
|
||||
Creates a new C11 CMake-based project named PROJECT.
|
||||
|
||||
* REPORTING BUGS
|
||||
Git repository available at [[https://labs.phundrak.fr/phundrak/dotfiles]].
|
||||
|
||||
* Copyright
|
||||
Copyright {{{author}}} 2019-2020. Licence GPLv3+: GNU GPL version 3 or later [[https://gnu.org/licenses/gpl.html]]. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.
|
||||
@@ -1,30 +0,0 @@
|
||||
.\" Automatically generated by Pandoc 2.5
|
||||
.\"
|
||||
.TH "cppnew" "" "" "" ""
|
||||
.hy
|
||||
.SH NAME
|
||||
.PP
|
||||
\f[B]cppnew\f[R] \- New C++17 Project
|
||||
.SH SYNOPSIS
|
||||
.PP
|
||||
cppnew [\-c, \[en]connan] PROJECT
|
||||
.SH DESCRIPTION
|
||||
.PP
|
||||
Creates a new C++17 project named PROJECT, either CMake\-based only or
|
||||
CMake and Conan\-based.
|
||||
.TP
|
||||
.B \f[C]\-c\f[R], \f[C]\-\-connan\f[R]
|
||||
Creates a Conan\-based project
|
||||
.SH REPORTING BUGS
|
||||
.PP
|
||||
Git repository available at
|
||||
<https://labs.phundrak.fr/phundrak/dotfiles>.
|
||||
.SH Copyright
|
||||
.PP
|
||||
Copyright Lucien \[dq]Phundrak\[dq] Cartier Tilet 2019\-2020.
|
||||
Licence GPLv3+: GNU GPL version 3 or later
|
||||
<https://gnu.org/licenses/gpl.html>.
|
||||
This is free software: you are free to change and redistribute it.
|
||||
There is NO WARRANTY, to the extent permitted by law.
|
||||
.SH AUTHORS
|
||||
Lucien \[dq]Phundrak\[dq] Cartier Tilet.
|
||||
@@ -1,18 +0,0 @@
|
||||
#+TITLE: cppnew
|
||||
#+AUTHOR: Lucien "Phundrak" Cartier Tilet
|
||||
* NAME
|
||||
*{{{title}}}* - New C++17 Project
|
||||
|
||||
* SYNOPSIS
|
||||
{{{title}}} [-c, --connan] PROJECT
|
||||
|
||||
* DESCRIPTION
|
||||
Creates a new C++17 project named PROJECT, either CMake-based only or CMake and Conan-based.
|
||||
|
||||
- ~-c~, ~--connan~ :: Creates a Conan-based project
|
||||
|
||||
* REPORTING BUGS
|
||||
Git repository available at [[https://labs.phundrak.fr/phundrak/dotfiles]].
|
||||
|
||||
* Copyright
|
||||
Copyright {{{author}}} 2019-2020. Licence GPLv3+: GNU GPL version 3 or later [[https://gnu.org/licenses/gpl.html]]. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.
|
||||
@@ -1,58 +0,0 @@
|
||||
---
|
||||
AlignAfterOpenBracket: Align
|
||||
AlignConsecutiveAssignments: 'true'
|
||||
AlignEscapedNewlines: Left
|
||||
AlignOperands: 'true'
|
||||
AlignTrailingComments: 'true'
|
||||
AllowAllParametersOfDeclarationOnNextLine: 'true'
|
||||
AllowShortBlocksOnASingleLine: 'true'
|
||||
AllowShortCaseLabelsOnASingleLine: 'true'
|
||||
AllowShortFunctionsOnASingleLine: Empty
|
||||
AllowShortIfStatementsOnASingleLine: 'false'
|
||||
AllowShortLoopsOnASingleLine: 'false'
|
||||
AlwaysBreakAfterReturnType: None
|
||||
AlwaysBreakBeforeMultilineStrings: 'false'
|
||||
AlwaysBreakTemplateDeclarations: 'true'
|
||||
BinPackArguments: 'true'
|
||||
BinPackParameters: 'true'
|
||||
BreakAfterJavaFieldAnnotations: 'true'
|
||||
BreakBeforeBinaryOperators: All
|
||||
BreakBeforeBraces: Linux
|
||||
BreakBeforeInheritanceComma: 'false'
|
||||
BreakBeforeTernaryOperators: 'true'
|
||||
BreakConstructorInitializers: BeforeColon
|
||||
BreakStringLiterals: 'true'
|
||||
ColumnLimit: '80'
|
||||
CompactNamespaces: 'false'
|
||||
ConstructorInitializerAllOnOneLineOrOnePerLine: 'false'
|
||||
Cpp11BracedListStyle: 'true'
|
||||
FixNamespaceComments: 'true'
|
||||
IncludeBlocks: Regroup
|
||||
IndentCaseLabels: 'false'
|
||||
IndentPPDirectives: AfterHash
|
||||
IndentWrappedFunctionNames: 'false'
|
||||
JavaScriptQuotes: Leave
|
||||
JavaScriptWrapImports: 'true'
|
||||
KeepEmptyLinesAtTheStartOfBlocks: 'false'
|
||||
Language: Cpp
|
||||
MaxEmptyLinesToKeep: '1'
|
||||
NamespaceIndentation: Inner
|
||||
PointerAlignment: Right
|
||||
ReflowComments: 'true'
|
||||
SortIncludes: 'true'
|
||||
SortUsingDeclarations: 'true'
|
||||
SpaceAfterCStyleCast: 'false'
|
||||
SpaceAfterTemplateKeyword: 'false'
|
||||
SpaceBeforeAssignmentOperators: 'true'
|
||||
SpaceBeforeParens: ControlStatements
|
||||
SpaceInEmptyParentheses: 'false'
|
||||
SpacesBeforeTrailingComments: '2'
|
||||
SpacesInAngles: 'false'
|
||||
SpacesInCStyleCastParentheses: 'false'
|
||||
SpacesInContainerLiterals: 'false'
|
||||
SpacesInParentheses: 'false'
|
||||
SpacesInSquareBrackets: 'false'
|
||||
Standard: Cpp11
|
||||
UseTab: ForIndentation
|
||||
|
||||
...
|
||||
4
dev/templateC++/.gitignore
vendored
@@ -1,4 +0,0 @@
|
||||
bin
|
||||
build
|
||||
debug
|
||||
!.gitignore
|
||||
@@ -1,26 +0,0 @@
|
||||
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
|
||||
set(CMAKE_LEGACY_CYGWIN_WIN32 0)
|
||||
|
||||
project("PROJECTNAME")
|
||||
|
||||
set(TGT "PROJECTNAME")
|
||||
set(${TGT}_VERSION_MAJOR 0)
|
||||
set(${TGT}_VERSION_MINOR 1)
|
||||
|
||||
set(CXX_COVERAGE_COMPILE_FLAGS "-pedantic -Wall -Wextra -Wold-style-cast -Woverloaded-virtual -Wfloat-equal -Wwrite-strings -Wpointer-arith -Wcast-qual -Wcast-align -Wconversion -Wsign-conversion -Wshadow -Weffc++ -Wredundant-decls -Wdouble-promotion -Winit-self -Wswitch-default -Wswitch-enum -Wundef -Winline -Wunused -Wnon-virtual-dtor")
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "${CXX_COVERAGE_COMPILE_FLAGS} -DDebug -g -pg")
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "${CXX_COVERAGE_COMPILE_FLAGS} -O3 -flto")
|
||||
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED YES)
|
||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "../bin/")
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "../debug/")
|
||||
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX_COVERAGE_COMPILE_FLAGS}")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${CXX_COVERAGE_COMPILE_FLAGS}")
|
||||
|
||||
include_directories(include)
|
||||
file(GLOB SOURCES "src/*.cc")
|
||||
add_executable(${TGT} ${SOURCES})
|
||||
@@ -1,12 +0,0 @@
|
||||
release:
|
||||
@mkdir -p build bin
|
||||
@cd build && cmake -DCMAKE_BUILD_TYPE=Release .. && make
|
||||
|
||||
debug:
|
||||
@mkdir -p build debug
|
||||
@cd build && cmake -DCMAKE_BUILD_TYPE=Debug .. && make
|
||||
|
||||
clean:
|
||||
@rm -rf bin
|
||||
@rm -rf build
|
||||
@rm -rf debug
|
||||
@@ -1,14 +0,0 @@
|
||||
[[http://spacemacs.org][file:https://cdn.rawgit.com/syl20bnr/spacemacs/442d025779da2f62fc86c2082703697714db6514/assets/spacemacs-badge.svg]]
|
||||
|
||||
* PROJECTNAME
|
||||
|
||||
PROJECTNAME is a C++17 project written for and built with CMake.
|
||||
|
||||
* How to build PROJECTNAME
|
||||
|
||||
You can directly run either ~make~ or ~make release~ to compile the release
|
||||
version of the binaries which will be generated in ~bin/~. If you wish to
|
||||
compile its debug version instead, run ~make debug~ to generate the binaries in
|
||||
the ~debug/~ directory. Once you have ran ~make~ at the root of the project, you
|
||||
can recompile the project from the ~build/~ directory if you wish to avoid to
|
||||
re-run CMake.
|
||||
@@ -1,6 +0,0 @@
|
||||
#include <iostream>
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
std::cout << "Hello World!" << std::endl;
|
||||
return 0;
|
||||
}
|
||||
@@ -1,58 +0,0 @@
|
||||
---
|
||||
AlignAfterOpenBracket: Align
|
||||
AlignConsecutiveAssignments: 'true'
|
||||
AlignEscapedNewlines: Left
|
||||
AlignOperands: 'true'
|
||||
AlignTrailingComments: 'true'
|
||||
AllowAllParametersOfDeclarationOnNextLine: 'true'
|
||||
AllowShortBlocksOnASingleLine: 'true'
|
||||
AllowShortCaseLabelsOnASingleLine: 'true'
|
||||
AllowShortFunctionsOnASingleLine: Empty
|
||||
AllowShortIfStatementsOnASingleLine: 'false'
|
||||
AllowShortLoopsOnASingleLine: 'false'
|
||||
AlwaysBreakAfterReturnType: None
|
||||
AlwaysBreakBeforeMultilineStrings: 'false'
|
||||
AlwaysBreakTemplateDeclarations: 'true'
|
||||
BinPackArguments: 'true'
|
||||
BinPackParameters: 'true'
|
||||
BreakAfterJavaFieldAnnotations: 'true'
|
||||
BreakBeforeBinaryOperators: All
|
||||
BreakBeforeBraces: Linux
|
||||
BreakBeforeInheritanceComma: 'false'
|
||||
BreakBeforeTernaryOperators: 'true'
|
||||
BreakConstructorInitializers: BeforeColon
|
||||
BreakStringLiterals: 'true'
|
||||
ColumnLimit: '80'
|
||||
CompactNamespaces: 'false'
|
||||
ConstructorInitializerAllOnOneLineOrOnePerLine: 'false'
|
||||
Cpp11BracedListStyle: 'true'
|
||||
FixNamespaceComments: 'true'
|
||||
IncludeBlocks: Regroup
|
||||
IndentCaseLabels: 'false'
|
||||
IndentPPDirectives: AfterHash
|
||||
IndentWrappedFunctionNames: 'false'
|
||||
JavaScriptQuotes: Leave
|
||||
JavaScriptWrapImports: 'true'
|
||||
KeepEmptyLinesAtTheStartOfBlocks: 'false'
|
||||
Language: Cpp
|
||||
MaxEmptyLinesToKeep: '1'
|
||||
NamespaceIndentation: Inner
|
||||
PointerAlignment: Right
|
||||
ReflowComments: 'true'
|
||||
SortIncludes: 'true'
|
||||
SortUsingDeclarations: 'true'
|
||||
SpaceAfterCStyleCast: 'false'
|
||||
SpaceAfterTemplateKeyword: 'false'
|
||||
SpaceBeforeAssignmentOperators: 'true'
|
||||
SpaceBeforeParens: ControlStatements
|
||||
SpaceInEmptyParentheses: 'false'
|
||||
SpacesBeforeTrailingComments: '2'
|
||||
SpacesInAngles: 'false'
|
||||
SpacesInCStyleCastParentheses: 'false'
|
||||
SpacesInContainerLiterals: 'false'
|
||||
SpacesInParentheses: 'false'
|
||||
SpacesInSquareBrackets: 'false'
|
||||
Standard: Cpp11
|
||||
UseTab: ForIndentation
|
||||
|
||||
...
|
||||
4
dev/templateC/.gitignore
vendored
@@ -1,4 +0,0 @@
|
||||
bin
|
||||
build
|
||||
debug
|
||||
!.gitignore
|
||||
@@ -1,74 +0,0 @@
|
||||
cmake_minimum_required(VERSION 3.10)
|
||||
|
||||
project("PROJECTNAME"
|
||||
VERSION 0.1
|
||||
DESCRIPTION "Description of PROJECTNAME"
|
||||
HOMEPAGE_URL "https://labs.phundrak.fr/phundrak/PROJECTNAME"
|
||||
LANGUAGES C)
|
||||
|
||||
set(CMAKE_C_COMPILER /usr/bin/clang)
|
||||
file(GLOB SRC_FILES "src/*.c")
|
||||
|
||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
|
||||
include(functions)
|
||||
|
||||
enable_c_compiler_flag_if_supported("-Wall")
|
||||
enable_c_compiler_flag_if_supported("-pedantic")
|
||||
enable_c_compiler_flag_if_supported("-Wextra")
|
||||
enable_c_compiler_flag_if_supported("-Wfloat-equal")
|
||||
enable_c_compiler_flag_if_supported("-Wwrite-strings")
|
||||
enable_c_compiler_flag_if_supported("-Wpointer-arith")
|
||||
enable_c_compiler_flag_if_supported("-Wcast-qual")
|
||||
enable_c_compiler_flag_if_supported("-Wcast-align")
|
||||
enable_c_compiler_flag_if_supported("-Wconversion")
|
||||
enable_c_compiler_flag_if_supported("-Wshadow")
|
||||
enable_c_compiler_flag_if_supported("-Wreduntant-decls")
|
||||
enable_c_compiler_flag_if_supported("-Wdouble-promotion")
|
||||
enable_c_compiler_flag_if_supported("-Winit-self")
|
||||
enable_c_compiler_flag_if_supported("-Wswitch-default")
|
||||
enable_c_compiler_flag_if_supported("-Wswitch-enum")
|
||||
enable_c_compiler_flag_if_supported("-Wundef")
|
||||
enable_c_compiler_flag_if_supported("-Winline")
|
||||
enable_c_compiler_flag_if_supported("-Wpedantic")
|
||||
enable_c_compiler_flag_if_supported("-Wsign-conversion")
|
||||
enable_c_compiler_flag_if_supported("-Wnull-dereference")
|
||||
enable_c_compiler_flag_if_supported("-Wuseless-cast")
|
||||
enable_c_compiler_flag_if_supported("-Wformat=2")
|
||||
enable_c_compiler_flag_if_supported("-Wlifetime")
|
||||
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
enable_c_compiler_flag_if_supported("-g")
|
||||
else()
|
||||
enable_c_compiler_flag_if_supported("-O3")
|
||||
enable_c_compiler_flag_if_supported("-flto")
|
||||
endif()
|
||||
|
||||
# include_directories(<PUBLIC HEADER DIRECTORIES>)
|
||||
|
||||
# Main software
|
||||
set(TGT PROJECTNAME)
|
||||
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/build/bin)
|
||||
add_executable(${TGT} ${SRC_FILES})
|
||||
target_compile_features(${TGT} PRIVATE c_std_11)
|
||||
target_include_directories(${TGT} PRIVATE include/PROJECTNAME)
|
||||
#target_link_libraries(${TGT})
|
||||
|
||||
# Tests, -DTESTS=True to activate
|
||||
if(TESTS)
|
||||
set(TESTTGT PROJECTNAME-tests)
|
||||
file(GLOB TEST_FILES "tests/tests.c")
|
||||
add_executable(${TESTTGT} ${TEST_FILES})
|
||||
set_property(TARGET ${TESTTGT} PROPERTY C_STANDARD 11)
|
||||
target_include_directories(${TESTTGT} PRIVATE include/PROJECTNAME)
|
||||
endif()
|
||||
|
||||
# OS specific instructions.
|
||||
if(APPLE)
|
||||
elseif(WIN32)
|
||||
# Windows developer environment specific instructions.
|
||||
if(MINGW)
|
||||
elseif(MSYS)
|
||||
elseif(CYGWIN)
|
||||
endif()
|
||||
elseif(UNIX)
|
||||
else()
|
||||
endif()
|
||||
@@ -1,12 +0,0 @@
|
||||
release:
|
||||
@mkdir -p build bin
|
||||
@cd build && cmake -DCMAKE_BUILD_TYPE=Release .. && make
|
||||
|
||||
debug:
|
||||
@mkdir -p build debug
|
||||
@cd build && cmake -DCMAKE_BUILD_TYPE=Debug .. && make
|
||||
|
||||
clean:
|
||||
@rm -rf bin
|
||||
@rm -rf build
|
||||
@rm -rf debug
|
||||
@@ -1,14 +0,0 @@
|
||||
[[http://spacemacs.org][file:https://cdn.rawgit.com/syl20bnr/spacemacs/442d025779da2f62fc86c2082703697714db6514/assets/spacemacs-badge.svg]]
|
||||
|
||||
* PROJECTNAME
|
||||
|
||||
PROJECTNAME is a C11 project written for and built with CMake.
|
||||
|
||||
* How to build PROJECTNAME
|
||||
|
||||
You can directly run either ~make~ or ~make release~ to compile the release
|
||||
version of the binaries which will be generated in ~bin/~. If you wish to
|
||||
compile its debug version instead, run ~make debug~ to generate the binaries in
|
||||
the ~debug/~ directory. Once you have ran ~make~ at the root of the project, you
|
||||
can recompile the project from the ~build/~ directory if you wish to avoid to
|
||||
re-run CMake.
|
||||
@@ -1,12 +0,0 @@
|
||||
INCLUDE(CheckCCompilerFlag)
|
||||
|
||||
function(enable_c_compiler_flag_if_supported flag)
|
||||
string(FIND "${CMAKE_C_FLAGS}" "${flag}" flag_already_set)
|
||||
if(flag_already_set EQUAL -1)
|
||||
check_c_compiler_flag("${flag}" flag_supported)
|
||||
if(flag_supported)
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}" PARENT_SCOPE)
|
||||
endif()
|
||||
unset(flag_supported CACHE)
|
||||
endif()
|
||||
endfunction()
|
||||
@@ -1,6 +0,0 @@
|
||||
#include <stdio.h>
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
printf("Hello World!\n");
|
||||
return 0;
|
||||
}
|
||||
28
export.el
@@ -1,28 +0,0 @@
|
||||
#!/usr/bin/env -S emacs -Q --script
|
||||
|
||||
(require 'package)
|
||||
(require 'org)
|
||||
(require 'ox-html)
|
||||
|
||||
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))
|
||||
(package-initialize)
|
||||
(package-refresh-contents)
|
||||
(package-install 'htmlize)
|
||||
|
||||
(setq org-confirm-babel-evaluate nil
|
||||
org-html-validation-link nil
|
||||
make-backup-files nil)
|
||||
|
||||
(defun export-and-clean (directory)
|
||||
(progn (mapc (lambda (file)
|
||||
(progn (message (concat "=====================\n"
|
||||
"Exporting "
|
||||
file
|
||||
"\n"
|
||||
"=====================\n"))
|
||||
(with-current-buffer (find-file file)
|
||||
(org-html-export-to-html))))
|
||||
(directory-files directory t (regexp-quote ".org")))))
|
||||
|
||||
(dolist (dir '("org/config/" "org/config/Deprecated/" "org/config/WIP"))
|
||||
(export-and-clean dir))
|
||||
@@ -1,2 +0,0 @@
|
||||
((org-mode . ((org-confirm-babel-evaluate . nil)
|
||||
(org-latex-reference-command . "\\ref{%s}"))))
|
||||
@@ -1,827 +0,0 @@
|
||||
#+TITLE: i3 config
|
||||
#+setupfile: ../headers
|
||||
#+OPTIONS: auto-id:t
|
||||
#+HTML_HEAD_EXTRA: <meta name="description" content="Phundrak's i3 config" />
|
||||
#+HTML_HEAD_EXTRA: <meta property="og:title" content="Phundrak's i3 config" />
|
||||
#+HTML_HEAD_EXTRA: <meta property="og:description" content="Description of the i3 config file of Phundrak" />
|
||||
#+PROPERTY: header-args :noweb yes :exports code :tangle ~/.config/i3/config
|
||||
#+PROPERTY: header-args:emacs-lisp :exports none :tangle no
|
||||
|
||||
* Presentation
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Presentation-9c7a53bf
|
||||
:END:
|
||||
#+begin_center
|
||||
*Before proceeding, be aware that I deprecated this i3 config on August 22nd, 2020, meaning I won’t update it anymore unless I use it again some day in the future. I will keep it on my website though.*
|
||||
#+end_center
|
||||
|
||||
=i3= is a window manager for GNU/Linux which automatically tiles windows in workspaces. This configuration was ade to automatically handle some tasks such as which software allowed where, autostart, and launching software with shortcuts.
|
||||
|
||||
It is to be noted I am using [[https://github.com/Airblader/i3][Airblader’s fork of i3]], =i3-gaps=. Some configuration will not work with =i3=.
|
||||
|
||||
#+BEGIN_SRC conf :exports none
|
||||
# -*- mode: conf -*-
|
||||
#+END_SRC
|
||||
|
||||
* Screenshots
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Screenshots-51f1cef3
|
||||
:END:
|
||||
#+CAPTION: Desktop with Neofetch in the terminal
|
||||
[[./img/neofetch.png.webp]]
|
||||
|
||||
#+CAPTION: Desktop with Emacs opened
|
||||
[[./img/emacs.png.webp]]
|
||||
|
||||
#+CAPTION: Desktop with Rofi
|
||||
[[./img/rofi.png.webp]]
|
||||
|
||||
* Variables declaration
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Variables_declaration-0ebc9a21
|
||||
:END:
|
||||
** Global
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Variables_declaration-Global-1cf1bfe4
|
||||
:END:
|
||||
The first I do is declaring the modifier key and the alt key —I don’t find the names =Mod1= and =Mod4= to be explicit enough. This will map =$mod= to the Super key (or as some people unfortunately call it, the /Windows/ key) and =$alt= to the Alt key.
|
||||
|
||||
Let’s also bind the =$up=, =$down=, =$left= and =$right= variables to respectively the up, down, left, and right arrows on the keyboard. Why bind them to variables? If I ever want to modify the arrow keys to some other keys, like =é=, =a=, =u=, and =i= (the equivalent of =wqsd= on the bépo layout) or =c=, =t=, =s=, and =r= (the equivalent of =hjkl= on the bépo layout), I will just have to modify these four lines.
|
||||
|
||||
I’ll also set the =$term= variable. A lot of shortcuts in my i3 config rely on the terminal emulator itself to launch commands in the terminal, and thus call the terminal itself. If I ever need to move from my current terminal, I will just have to change the name of the executable here.
|
||||
|
||||
#+NAME: variable-table
|
||||
| variable | value |
|
||||
|----------+-------|
|
||||
| $mod | Mod4 |
|
||||
| $alt | Mod1 |
|
||||
| $up | Up |
|
||||
| $down | Down |
|
||||
| $left | Left |
|
||||
| $right | Right |
|
||||
| $term | st |
|
||||
|
||||
#+NAME: variable-sh
|
||||
| variable | value |
|
||||
|-------------+--------------------------------------------------------------------------|
|
||||
| $exiti3 | i3-nagbar -t warning -m 'Leave i3?' -b 'Yes' 'i3-msg exit' |
|
||||
| $lockscreen | Lucien Cartier-Tilet\n(Phuntsok Drak-pa)\n+33 (0)6 83 90 56 89 |
|
||||
| $rofiexec | rofi -combi-modi 'window,drun' -show combi -mohh combi -m -1 -show-icons |
|
||||
| $mail | emacsclient -c -e '(mu4e)' -n |
|
||||
| $ec | emacsclient -c -n |
|
||||
| $walset | wal -i ~/Pictures/Wallpapers -o wal-set |
|
||||
|
||||
Variables will be set like so.
|
||||
#+BEGIN_SRC conf :tangle no
|
||||
set $term st
|
||||
#+END_SRC
|
||||
|
||||
#+NAME: generate-variables
|
||||
#+BEGIN_SRC emacs-lisp :var variables=variable-table :cache yes
|
||||
(mapconcat (lambda (x) (format "set %s %s" (car x) (cadr x)))
|
||||
variables
|
||||
"\n")
|
||||
#+END_SRC
|
||||
|
||||
#+RESULTS[48079cbd7e6dbf2003fe5ae87216bd38f638b6f8]: generate-variables
|
||||
: set $mod Mod4
|
||||
: set $alt Mod1
|
||||
: set $up Up
|
||||
: set $down Down
|
||||
: set $left Left
|
||||
: set $right Right
|
||||
: set $term st
|
||||
|
||||
Finally, some variables hold some long strings for commands I don’t want to have to type multiple times.
|
||||
#+NAME: generate-variables2
|
||||
#+BEGIN_SRC emacs-lisp :var variables=variable-sh :cache yes
|
||||
(mapconcat (lambda (x) (format "set %s \"%s\"" (car x) (cadr x)))
|
||||
variables
|
||||
"\n")
|
||||
#+END_SRC
|
||||
|
||||
#+RESULTS[c901e3e31c500859661650e86a6b63aef286acbe]: generate-variables2
|
||||
: set $exiti3 "i3-nagbar -t warning -m 'Leave i3?' -b 'Yes' 'i3-msg exit'"
|
||||
: set $lockscreen "Lucien Cartier-Tilet\n(Phuntsok Drak-pa)\n+33 (0)6 83 90 56 89"
|
||||
: set $rofiexec "rofi -combi-modi 'window,drun' -show combi -mohh combi -m -1 -show-icons"
|
||||
: set $mail "emacsclient -c -e '(mu4e)' -n"
|
||||
: set $ec "emacsclient -c -n"
|
||||
: set $walset "wal -i ~/Pictures/Wallpapers -o wal-set"
|
||||
|
||||
Here is the configuration:
|
||||
#+BEGIN_SRC conf :noweb yes
|
||||
<<generate-variables()>>
|
||||
<<generate-variables2()>>
|
||||
#+END_SRC
|
||||
|
||||
Now comes the font for the window tiles. Honestly, this setting is useless since we do not see it, but let’s set it anyway.
|
||||
#+BEGIN_SRC conf
|
||||
font Fira Sans Book:style=Book:pixelsize=10
|
||||
#+END_SRC
|
||||
|
||||
** Floating windows
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Variables_declaration-Floating_windows-897d0c3b
|
||||
:END:
|
||||
Floating windows are windows that are not tiled with other windows, but rather are free to go anywhere on your screen, with any size. A bit like what you would get with any other non-tiling window manager or desktop environment (though most of them support minimal tiling features).
|
||||
|
||||
Let’s declare our floading modyfier. With floating windows, you can move them around by clicking on the window’s borders; but since we don’t have any with this config, we will have instead to press the floating modifier while clicking on the window (anywhere on the window is fine) to move them around.
|
||||
|
||||
Here is the configuration:
|
||||
#+BEGIN_SRC conf
|
||||
floating_modifier $mod
|
||||
#+END_SRC
|
||||
|
||||
* i3 global settings
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: i3_global_settings-1b863d93
|
||||
:END:
|
||||
Some settings affect i3 globally, such as its aspect or how it handles the mouse. Hence, here are some settings I set in my configuration.
|
||||
|
||||
** Mouse settings
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: i3_global_settings-Mouse_settings-4630241d
|
||||
:END:
|
||||
First of all, I do not want i3 to warp my mouse each time I change windows; my mouse stays where it is.
|
||||
#+BEGIN_SRC conf
|
||||
mouse_warping none
|
||||
#+END_SRC
|
||||
|
||||
I also to not want the window focus to follow my mouse, because sometimes I will just knock my physical mouse out of the way of my hand, and when I do that the software mouse will most likely end up in another window I do not want to focus.
|
||||
#+BEGIN_SRC conf
|
||||
focus_follows_mouse no
|
||||
#+END_SRC
|
||||
|
||||
** Popup handling
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: i3_global_settings-Popup_handling-51b6ed8d
|
||||
:END:
|
||||
While in fullscreen, some software might generate a popup. In that case, I want to be aware of that, and any popup will make me leave fullscreen in order to be presented with said popup.
|
||||
#+BEGIN_SRC conf
|
||||
popup_during_fullscreen leave_fullscreen
|
||||
#+END_SRC
|
||||
|
||||
** Behavior of workspace changes
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: i3_global_settings-Behavior_of_workspace_changes-00202985
|
||||
:END:
|
||||
When changing workspace as described below, we often want to go back to the previous workspace we were working on, but we might not remember immediately which one it was, or we might still have our fingers ready to fire the shortcut which made us make the first workspace change. Hence, if we type the same workspace change shortcut, instead of doing nothing it will bring us back to the previous workspace we were on.
|
||||
#+BEGIN_SRC conf
|
||||
workspace_auto_back_and_forth yes
|
||||
#+END_SRC
|
||||
|
||||
** Gaps and window appearance
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: i3_global_settings-Gaps_and_window_appearance-749e9f7b
|
||||
:END:
|
||||
As mentioned in at the beginning of this document, I am using i3-gaps, which brings spacing (gaps) between windows to i3.
|
||||
|
||||
First, I want space around my windows only when there are several containers on the same screen, otherwise they will be maximized.
|
||||
#+BEGIN_SRC conf
|
||||
smart_gaps on
|
||||
#+END_SRC
|
||||
|
||||
I also do not want to see any window border, so I will be turning this setting off.
|
||||
#+BEGIN_SRC conf
|
||||
smart_borders on
|
||||
#+END_SRC
|
||||
|
||||
By the way, the default border is invisible, since it is zero pixels wide.
|
||||
#+BEGIN_SRC conf
|
||||
default_border pixel 0
|
||||
#+END_SRC
|
||||
|
||||
Then comes the size of these gaps. I made the outer gap negative so the space between my windows and the border of my screens is smaller than the gap between my containers.
|
||||
#+BEGIN_SRC conf
|
||||
gaps inner 20
|
||||
gaps outer -10
|
||||
#+END_SRC
|
||||
|
||||
Some parameters are also available when it comes to the colors i3 uses. Honestly, we won’t see these colors much, so let’s simply keep the default values.
|
||||
#+BEGIN_SRC conf
|
||||
set_from_resource $fg i3wm.color7 #f0f0f0
|
||||
set_from_resource $bg i3wm.color2 #f0f0f0
|
||||
|
||||
# class border backgr. text indicator child_border
|
||||
client.focused $bg $bg $fg $bg $bg
|
||||
client.focused_inactive $bg $bg $fg $bg $bg
|
||||
client.unfocused $bg $bg $fg $bg $bg
|
||||
client.urgent $bg $bg $fg $bg $bg
|
||||
client.placeholder $bg $bg $fg $bg $bg
|
||||
#+END_SRC
|
||||
|
||||
* Assigning windows to workspaces
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Assigning_windows_to_workspaces-e59f61e5
|
||||
:END:
|
||||
I decided to bind some windows to some workspaces in order to have a better organization of my desktop.
|
||||
#+NAME: assignment-table
|
||||
| Application | Class | Workspace |
|
||||
|-------------+-------------+-----------|
|
||||
| Emacs | Emacs | 2 |
|
||||
| Chromium | Chromium | 3 |
|
||||
| Firefox | firefox | 3 |
|
||||
| Nemo | Nemo | 4 |
|
||||
| Wonderdraft | Godot | 5 |
|
||||
| Gimp | Gimp* | 6 |
|
||||
| Gnome Boxes | gnome-boxes | 8 |
|
||||
| Steam | Steam | 9 |
|
||||
| Discord | discord | 10 |
|
||||
|
||||
The class table is used in the assignment in the i3 config file. For instance, Gimp’s assignment will look like this:
|
||||
#+BEGIN_SRC conf :tangle no
|
||||
assign [class="Gimp*"] 6
|
||||
#+END_SRC
|
||||
|
||||
#+NAME: generate-workspaces
|
||||
#+BEGIN_SRC emacs-lisp :var workspaces=assignment-table :cache yes
|
||||
(mapconcat (lambda (x) (format "assign [class=\"%s\"] %s" (cadr x) (caddr x)))
|
||||
workspaces
|
||||
"\n")
|
||||
#+END_SRC
|
||||
|
||||
#+RESULTS[0995341b013e50227edf78257ab502e46a30bc9a]: generate-workspaces
|
||||
: assign [class="Emacs"] 2
|
||||
: assign [class="Chromium"] 3
|
||||
: assign [class="firefox"] 3
|
||||
: assign [class="Nemo"] 4
|
||||
: assign [class="Godot"] 5
|
||||
: assign [class="Gimp*"] 6
|
||||
: assign [class="gnome-boxes"] 8
|
||||
: assign [class="Steam"] 9
|
||||
: assign [class="discord"] 10
|
||||
|
||||
Here is the configuration:
|
||||
#+BEGIN_SRC conf :noweb yes
|
||||
<<generate-workspaces()>>
|
||||
#+END_SRC
|
||||
|
||||
And although this is not specifically assigning a window to a workspace, I also want to have the tenth workspace assigned to a specific output in case I have two screens — and since this is the case when I am using only one computer, Marpa, I will be using some EmacsLisp in order to generate a different configuration file from this org file depending on the name of the machine.
|
||||
#+NAME: ws10-output-edp1
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
(if (string= system-name "Marpa")
|
||||
"workspace 10 output eDP-1"
|
||||
"")
|
||||
#+END_SRC
|
||||
|
||||
Now I’ll call the above code as a noweb reference that should be executed.
|
||||
#+BEGIN_SRC conf
|
||||
<<ws10-output-edp1()>>
|
||||
#+END_SRC
|
||||
|
||||
* Shortcuts
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Shortcuts-9c7074d3
|
||||
:END:
|
||||
I use *A LOT* of shortcuts when it comes to my workflow. Like, all the time. So, expect this chapter to be a bit long, and I’ll try to make it readable still.
|
||||
|
||||
Shortcuts are set like so:
|
||||
#+BEGIN_SRC conf :tangle no
|
||||
bindsym shortcut command
|
||||
#+END_SRC
|
||||
|
||||
#+NAME: generate-shortcuts
|
||||
#+BEGIN_SRC emacs-lisp :exports none :var table=[] :tangle no
|
||||
(mapconcat (lambda (x) (format "bindsym %s %s" (car x) (cadr x)))
|
||||
table
|
||||
"\n")
|
||||
#+END_SRC
|
||||
|
||||
** Terminal shortcuts
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Shortcuts-Terminal_shortcuts-514ecdbe
|
||||
:END:
|
||||
I have a couple of shortcuts which are related to my terminal. For instance, ~$mod+Return~ opens a regular terminal instance while ~$mod+$alt+M~ opens an SSH instance on my Mila host.
|
||||
#+NAME: terminal-shortcuts
|
||||
| shortcut | command | What it does |
|
||||
|-------------------+----------------------+--------------------------------------------------|
|
||||
| $mod+Return | exec $term | Opens a regular terminal console |
|
||||
| $mod+$alt+Return | split h;; exec $term | Opens a terminal console below the current one |
|
||||
| $mod+Shift+Return | split v;; exec $term | Opens a terminal on the right of the current one |
|
||||
| $mod+$alt+m | exec $term ssh Mila | Opens an SSH instance in my Mila host |
|
||||
| $mod+$alt+n | exec $term ssh Naro | Opens an SSH instance in my Naro host |
|
||||
| $mod+Shift+h | exec $term htop | Opens a terminal with ~htop~ |
|
||||
|
||||
Here is the configuration:
|
||||
#+BEGIN_SRC conf
|
||||
<<generate-shortcuts(table=terminal-shortcuts)>>
|
||||
#+END_SRC
|
||||
|
||||
** i3 shortcuts
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Shortcuts-i3_shortcuts-369039ae
|
||||
:END:
|
||||
A couple of shortcuts are dedicated to i3 itself.
|
||||
#+NAME: i3-sh
|
||||
| shortcut | command | what it does |
|
||||
|--------------+---------------------------------+----------------------------------|
|
||||
| $mod+Shift+c | exec yadm alt && i3-msg reload | Reload the i3 configuration file |
|
||||
| $mod+Shift+r | exec yadm alt && i3-msg restart | Restart i3 inplace |
|
||||
| $mod+Shift+e | exec $exiti3 | Quit i3 |
|
||||
|
||||
And although this is not really an i3 shortcut per se, I add here the shortcut for launching pywal, which will set one of my wallpapers as the wallpaper and will generate my system’s color configuration from it.
|
||||
#+NAME: wal-sh
|
||||
| shortcut | command | what it does |
|
||||
|----------+--------------+--------------------------------------------------------------|
|
||||
| $mod+w | exec $walset | Set a random wallpaper and generates a color profile from it |
|
||||
|
||||
We also have some shortcuts to lock our screen, sleep, hibernate and shut down our computer.
|
||||
#+NAME: computer-sh
|
||||
| shortcut | command | what it does |
|
||||
|---------------+----------------------------+------------------------|
|
||||
| $mod+l | exec i3lock -fol | Lock the screen |
|
||||
| $mod+$alt+h | exec "systemctl suspend" | Suspend the computer |
|
||||
| $mod+Ctrl+h | exec "systemctl hibernate" | Hibernate the computer |
|
||||
| $mod+Shift+F4 | exec poweroff | Power off the computer |
|
||||
|
||||
Here is the configuration:
|
||||
#+BEGIN_SRC conf
|
||||
<<generate-shortcuts(table=i3-sh)>>
|
||||
<<generate-shortcuts(table=wal-sh)>>
|
||||
<<generate-shortcuts(table=computer-sh)>>
|
||||
#+END_SRC
|
||||
|
||||
** Window and workspace management
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Shortcuts-Window_and_workspace_management-a384b8f8
|
||||
:END:
|
||||
*** Managing how windows will split
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Shortcuts-Window_and_workspace_management-Managing_how_windows_will_split-5a22ae31
|
||||
:END:
|
||||
It is possible to indicate to i3 how windows interact with one another, and especially how they are organized by spawning new windows either to the right or below the current window.
|
||||
#+NAME: split-win-sh
|
||||
| shortcuts | command | what it does |
|
||||
|-----------+---------+--------------------------------------------------------|
|
||||
| $mod+h | split h | Next window to spawn will spawn below the current one |
|
||||
| $mod+v | split v | Next window to spawn will spawn beside the current one |
|
||||
|
||||
Here is the configuration:
|
||||
#+BEGIN_SRC conf
|
||||
<<generate-shortcuts(table=split-win-sh)>>
|
||||
#+END_SRC
|
||||
|
||||
*** Focus windows
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Shortcuts-Window_and_workspace_management-Focus_windows-69a00ae9
|
||||
:END:
|
||||
To change window focus, you can use one of the following shortcuts:
|
||||
#+NAME: window-focus-sh
|
||||
| shortcut | command | what it does |
|
||||
|-------------+-------------+-------------------------------------------|
|
||||
| $mod+$left | focus left | Focus the window left of the current one |
|
||||
| $mod+$down | focus down | Focus the window down of the current one |
|
||||
| $mod+$up | focus up | Focus the window up of the current one |
|
||||
| $mod+$right | focus right | Focus the windof right of the current one |
|
||||
|
||||
Here is the configuration:
|
||||
#+BEGIN_SRC conf
|
||||
<<generate-shortcuts(table=window-focus-sh)>>
|
||||
#+END_SRC
|
||||
|
||||
*** Focus workspaces
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Shortcuts-Window_and_workspace_management-Focus_workspaces-9f4bee74
|
||||
:END:
|
||||
Just like windows, it is also possible to change focus between workspaces, because let’s be honest, most people won’t have ten screens to display all ten workspaces at the same time, and frankly that would be impractical.
|
||||
#+NAME: ws-focus-sh
|
||||
| shortcut | window | what it does |
|
||||
|----------+--------------+-------------------------|
|
||||
| $mod+1 | workspace 1 | Focus first workspace |
|
||||
| $mod+2 | workspace 2 | Focus second workspace |
|
||||
| $mod+3 | workspace 3 | Focus third workspace |
|
||||
| $mod+4 | workspace 4 | Focus fourth workspace |
|
||||
| $mod+5 | workspace 5 | Focus fifth workspace |
|
||||
| $mod+6 | workspace 6 | Focus sixth workspace |
|
||||
| $mod+7 | workspace 7 | Focus seventh workspace |
|
||||
| $mod+8 | workspace 8 | Focus eighth workspace |
|
||||
| $mod+9 | workspace 9 | Focus ninth workspace |
|
||||
| $mod+0 | workspace 10 | Focus tenth workspace |
|
||||
|
||||
Here is the configuration:
|
||||
#+BEGIN_SRC conf
|
||||
<<generate-shortcuts(table=ws-focus-sh)>>
|
||||
#+END_SRC
|
||||
|
||||
*** Moving windows
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Shortcuts-Window_and_workspace_management-Moving_windows-d8c90ac2
|
||||
:END:
|
||||
To move windows, a couple of shortcuts are available:
|
||||
#+NAME: window-move-sh
|
||||
| shortcut | command | what it does |
|
||||
|-------------------+------------+-------------------------------|
|
||||
| $mod+Shift+$left | move left | Move the focused window left |
|
||||
| $mod+Shift+$down | move down | Move the focused window down |
|
||||
| $mod+Shift+$up | move up | Move the focused window up |
|
||||
| $mod+Shift+$right | move right | Move the focused window right |
|
||||
|
||||
Here is the configuration:
|
||||
#+BEGIN_SRC conf
|
||||
<<generate-shortcuts(table=window-move-sh)>>
|
||||
#+END_SRC
|
||||
|
||||
*** Moving containers
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Shortcuts-Window_and_workspace_management-Moving_containers-b97cf4ae
|
||||
:END:
|
||||
To move containers between the available screens, you have the following shortcuts:
|
||||
#+NAME: containers-move-sh
|
||||
| shortcut | command | what it does |
|
||||
|------------------+--------------------------------+------------------------------------------------------------|
|
||||
| $mod+Ctrl+$left | move container to output left | Moves the container to the screen left of the current one |
|
||||
| $mod+Ctrl+$down | move container to output down | Moves the container to the screen down of the current one |
|
||||
| $mod+Ctrl+$up | move container to output up | Moves the container to the screen above the current one |
|
||||
| $mod+Ctrl+$right | move container to output right | Moves the container to the screen right of the current one |
|
||||
|
||||
You can also send containers to other workspaces by their number.
|
||||
#+NAME: containers-ws-sh
|
||||
| shortcut | command | what it does |
|
||||
|--------------+--------------------------------+--------------------------------------------|
|
||||
| $mod+Shift+1 | move container to workspace 1 | Move current container to the workspace 1 |
|
||||
| $mod+Shift+2 | move container to workspace 2 | Move current container to the workspace 2 |
|
||||
| $mod+Shift+3 | move container to workspace 3 | Move current container to the workspace 3 |
|
||||
| $mod+Shift+4 | move container to workspace 4 | Move current container to the workspace 4 |
|
||||
| $mod+Shift+5 | move container to workspace 5 | Move current container to the workspace 5 |
|
||||
| $mod+Shift+6 | move container to workspace 6 | Move current container to the workspace 6 |
|
||||
| $mod+Shift+7 | move container to workspace 7 | Move current container to the workspace 7 |
|
||||
| $mod+Shift+8 | move container to workspace 8 | Move current container to the workspace 8 |
|
||||
| $mod+Shift+9 | move container to workspace 9 | Move current container to the workspace 9 |
|
||||
| $mod+Shift+0 | move container to workspace 10 | Move current container to the workspace 10 |
|
||||
|
||||
Here is the configuration:
|
||||
#+BEGIN_SRC conf
|
||||
<<generate-shortcuts(table=containers-move-sh)>>
|
||||
<<generate-shortcuts(table=containers-ws-sh)>>
|
||||
#+END_SRC
|
||||
|
||||
*** Moving workspaces
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Shortcuts-Window_and_workspace_management-Moving_workspaces-a71d7b54
|
||||
:END:
|
||||
|
||||
It is also possible to move workspaces. The related shortcuts available are the following:
|
||||
|
||||
#+NAME: workspace-move-sh
|
||||
| shortcut | command | what it does |
|
||||
|------------------------+--------------------------------+------------------------------------------------------------|
|
||||
| $mod+Ctrl+Shift+$left | move workspace to output left | Moves the workspace to the screen left of the current one |
|
||||
| $mod+Ctrl+Shift+$down | move workspace to output down | Moves the workspace to the screen down of the current one |
|
||||
| $mod+Ctrl+Shift+$up | move workspace to output up | Moves the workspace to the screen above the current one |
|
||||
| $mod+Ctrl+Shift+$right | move workspace to output right | Moves the workspace to the screen right of the current one |
|
||||
|
||||
Here is the configuration:
|
||||
#+BEGIN_SRC conf
|
||||
<<generate-shortcuts(table=workspace-move-sh)>>
|
||||
#+END_SRC
|
||||
|
||||
*** Close windows
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Shortcuts-Window_and_workspace_management-Close_windows-5e521a48
|
||||
:END:
|
||||
To close windows, we have two main shortcuts: Alt+F4 and mod+q. The first one is here due to habits, but I don’t really use it anymore due to my main keyboard which doesn’t have any easy access to the functions keys, hence mod+q.
|
||||
#+NAME: close-win-sh
|
||||
| shortcut | command | what it does |
|
||||
|----------+---------+-------------------------|
|
||||
| $mod+q | kill | kill the current window |
|
||||
| $alt+F4 | kill | kill the current window |
|
||||
|
||||
Here is the configuration:
|
||||
#+BEGIN_SRC conf
|
||||
<<generate-shortcuts(table=close-win-sh)>>
|
||||
#+END_SRC
|
||||
|
||||
*** Manage the size of the current window
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Shortcuts-Window_and_workspace_management-Manage_the_size_of_the_current_window-11afa914
|
||||
:END:
|
||||
It is possible to change the size of the current window, even if it is a floating one. The first shortcut that might interest you is $mod+f which switches your current window to fullscreen. But to resize a window, you will need to enter the ~resize~ mode.
|
||||
#+NAME: size-win-sh
|
||||
| shortcut | command | what it does |
|
||||
|----------+-------------------+---------------------------------------------------|
|
||||
| $mod+f | fullscreen toggle | Puts the current window in fullscreen or exits it |
|
||||
| $mod+r | mode "resize" | Enter resize mode |
|
||||
|
||||
When it comes to modes, they are defined as follows:
|
||||
#+BEGIN_SRC conf :tangle no
|
||||
mode "nameofyourmode" {
|
||||
here go your shortcuts
|
||||
}
|
||||
#+END_SRC
|
||||
|
||||
So, all the following shortcuts will be inserted in a mode called ~resize~. Note that not only are the resizing shortcuts bound to the arrow keys, they are also bound to ~ctsr~, which is the bépo equivalent of ~hjkl~.
|
||||
#+NAME: resize-win-sh
|
||||
| shortcut | command | what it does |
|
||||
|----------+-------------------------------------+-------------------------------------------|
|
||||
| $right | resize grow width 20 px or 10 ppt | Increase the width of the current window |
|
||||
| r | resize grow width 20 px or 10 ppt | Increase the width of the current window |
|
||||
| $left | resize shrink width 10 px or 5 ppt | Decrease the width of the current window |
|
||||
| c | resize shrink width 10 px or 5 ppt | Decrease the width of the current window |
|
||||
| $down | resize grow height 10 px or 5 ppt | Increase the height of the current window |
|
||||
| t | resize grow height 10 px or 5 ppt | Increase the height of the current window |
|
||||
| $up | resize shrink height 10 px or 5 ppt | Decrease the height of the current window |
|
||||
| s | resize shrink height 10 px or 5 ppt | Decrease the height of the current window |
|
||||
| Return | mode "default" | Return to the default mode |
|
||||
| Escape | mode "default" | Return to the default mode |
|
||||
If you prefer, you can think of these shortcuts not as increasing or decreasing the width or height of the current window, but rather as how the bottom or right limit of the windows will be moved relative to the top left corner.
|
||||
|
||||
Here is the configuration:
|
||||
#+BEGIN_SRC conf
|
||||
<<generate-shortcuts(table=size-win-sh)>>
|
||||
mode "resize" {
|
||||
<<generate-shortcuts(table=resize-win-sh)>>
|
||||
}
|
||||
#+END_SRC
|
||||
|
||||
*** Manage floating windows
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Shortcuts-Window_and_workspace_management-Manage_floating_windows-9206f4da
|
||||
:END:
|
||||
As said above, your windows can be floating windows instead of being tiled like they are by default. For this too we have a couple of shortcuts:
|
||||
#+NAME: float-win-sh
|
||||
| shortcut | command | what it does |
|
||||
|------------------+----------------------+------------------------------------------------------|
|
||||
| $mod+Shift+space | floating toggle | Toggles the window between tiled and floating mode |
|
||||
| $mod+space | focus mode_toggle | Toggles the focus between tiled and floating windows |
|
||||
| $mod+Ctrl+c | move position center | Centers the focused floating window |
|
||||
If you want to move around your floating window, you can do it with your mouse while holding down the floating modifier declared [[#Variables_declaration-Floating_windows-897d0c3b][here]].
|
||||
|
||||
Here is the configuration:
|
||||
#+BEGIN_SRC conf
|
||||
<<generate-shortcuts(table=float-win-sh)>>
|
||||
#+END_SRC
|
||||
|
||||
*** Scratchpad and window display
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Shortcuts-Window_and_workspace_management-Scratchpad_and_window_display-10d8d1f4
|
||||
:END:
|
||||
You can think of i3’s scratchpad as some sort of extra workspace in which you can hide your windows you are not using, or as if you want to reduce a window to the taskbar of other window managers or desktop environments. You have basically two shortcuts for the scratchpad: one that sends the current window to the scratchpad, and one that cicles through the windows sent to the scratchpad and shows them to you sequencially. If you go through all of them, they will be hidden again. You can get a window out of the scratchpad by tiling it to the current workspace with the shortcut described above.
|
||||
|
||||
You also have the possibility of making a floating window a sticky window. This means not only will it show on all workspaces, it will also be on top of every other window. It can be useful if you have some notes you want to keep an eye on for instance.
|
||||
#+NAME: scratchpad-sh
|
||||
| shortcut | command | what it does |
|
||||
|--------------+-----------------+------------------------------------------------------|
|
||||
| $mod+Shift+s | move scratchpad | Sends the current window to the scratchpad |
|
||||
| $mod+s | scratchpad show | Shows and cycles through windows from the scratchpad |
|
||||
| $mod+Ctrl+s | sticky toggle | Toggles sticky mode on current window |
|
||||
|
||||
Here is the configuration:
|
||||
#+BEGIN_SRC conf
|
||||
<<generate-shortcuts(table=scratchpad-sh)>>
|
||||
#+END_SRC
|
||||
|
||||
*** Gaps management
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Shortcuts-Window_and_workspace_management-Gaps_management-33979213
|
||||
:END:
|
||||
It is possible to dynamically change the gaps between containers if we want to change a bit the appearance of i3. For that, we obviously have some shortcuts.
|
||||
#+NAME: gaps-resize-sh
|
||||
| shortcut | command | what it does |
|
||||
|-------------------+-----------------------------------------------+-----------------------------|
|
||||
| $mod+g | gaps inner current plus 5 | Increase the inner gap size |
|
||||
| $mod+Shift+g | gaps inner current minus 5 | Decrease the inner gap size |
|
||||
| $mod+Ctrl+g | gaps outer current plus 5 | Increase the outer gap size |
|
||||
| $mod+Ctrl+Shift+g | gaps outer current minus 5 | Decrease the outer gap size |
|
||||
| $mod+$alt+g | gaps inner all set 20; gaps outer all set -10 | Reset gaps |
|
||||
|
||||
Here is the corresponding configuration:
|
||||
#+BEGIN_SRC conf
|
||||
<<generate-shortcuts(table=gaps-resize-sh)>>
|
||||
#+END_SRC
|
||||
|
||||
** Launching software
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Shortcuts-Launching_software-0e088e69
|
||||
:END:
|
||||
A big part of my i3 shortcuts though are related to launching various software. I’ll try to sort them by category here, but do take a look even at categories which you might not be interested in, they might actually have something useful for you.
|
||||
|
||||
*** Software and command launcher
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Shortcuts-Launching_software-Software_and_command_launcher-a3f5863e
|
||||
:END:
|
||||
These commands will allow the user to launch applications which provide ~.desktop~ files or user-defined ~.desktop~ files, as well as commands with the help of rofi.
|
||||
#+NAME: launcher-sh
|
||||
| shortcut | command | what it does |
|
||||
|--------------+---------------------------------------+-------------------------------------------------------|
|
||||
| $mod+Shift+d | exec --no-startup-id j4-dmenu-desktop | Launch a registered application |
|
||||
| $mod+d | exec --no-startup-id $rofiexec | Launch a terminal command or a registered application |
|
||||
|
||||
Here is the configuration:
|
||||
#+BEGIN_SRC conf
|
||||
<<generate-shortcuts(table=launcher-sh)>>
|
||||
#+END_SRC
|
||||
|
||||
*** Internet software
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Shortcuts-Launching_software-Internet_software-a0524cd8
|
||||
:END:
|
||||
I have a couple of Internet-related software I can launch easily.
|
||||
#+NAME: internet-sh
|
||||
| shortcut | command | what it does |
|
||||
|--------------+---------------------+-----------------------------|
|
||||
| $mod+b | exec firefox | Launch browser |
|
||||
| $mod+m | exec $mail | Launch Gnus, my mail client |
|
||||
| Ctrl+Shift+d | exec discord-canary | Launch Discord |
|
||||
|
||||
Hence this configuration:
|
||||
#+BEGIN_SRC conf
|
||||
<<generate-shortcuts(table=internet-sh)>>
|
||||
#+END_SRC
|
||||
|
||||
*** Screenshots
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Shortcuts-Launching_software-Screenshots-41e41c88
|
||||
:END:
|
||||
A couple of shortcuts are available for taking screenshots.
|
||||
#+NAME: screenshot-sh
|
||||
| shortcut | command | what it does |
|
||||
|-------------+-----------------------------------+----------------------------------------------------------|
|
||||
| Print | exec --no-startup-id scrot | Takes a screenshot of the entire desktop |
|
||||
| Ctrl+Print | exec --no-startup-id "scrot -s" | Takes a screenshot of a region or the selected window |
|
||||
| Shift+Print | exec --no-startup-id "scrot -d 3" | takes a screenshot of the desktop three in three seconds |
|
||||
|
||||
This gives us this configuration:
|
||||
#+BEGIN_SRC conf
|
||||
<<generate-shortcuts(table=screenshot-sh)>>
|
||||
#+END_SRC
|
||||
|
||||
*** Screen brightness
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Shortcuts-Launching_software-Screen_brightness-6855d53f
|
||||
:END:
|
||||
Here we have four commands for managing our screen’s brightness (this is useful for laptops, not so much with desktops), and two of them are actually duplicates of the other two in case a laptop doesn’t have dedicated keys or we are using a keyboard which doesn’t provide them.
|
||||
#+NAME: brightness-sh
|
||||
| shortcut | command | what it does |
|
||||
|-----------------------+------------------------+---------------------------------------|
|
||||
| XF86MonBrightnessUp | exec xbacklight -inc 5 | Increase the brightness of the screen |
|
||||
| $mod+$alt+Next | exec xbacklight -inc 5 | Increase the brightness of the screen |
|
||||
| XF86MonBrightnessDown | exec xbacklight -dec 5 | Decrease the brightness of the screen |
|
||||
| $mod+$alt+Prev | exec xbacklight -dec 5 | Decrease the brightness of the screen |
|
||||
|
||||
This gives us this configuration:
|
||||
#+BEGIN_SRC conf
|
||||
<<generate-shortcuts(table=brightness-sh)>>
|
||||
#+END_SRC
|
||||
|
||||
*** Media control
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Shortcuts-Launching_software-Media_control-18ad2815
|
||||
:END:
|
||||
Some shortcuts are dedicated to media control, especially when it comes to controlling music. All of these media control shortcuts will be calls to ~mpc~ which will in turn send commands to ~mpd~, which is the music server I use on my computers.
|
||||
#+NAME: media-sh
|
||||
| shortcut | command | what it does |
|
||||
|---------------------------+--------------------+--------------------------------|
|
||||
| XF86AudioNext | exec mpc next | Forward to the next track |
|
||||
| $alt+XF86AudioRaiseVolume | exec mpc next | Forward to the next track |
|
||||
| $mod+Next | exec mpc next | Forward to the next track |
|
||||
| XF86AudioPrev | exec mpc prev | Backward to the previous track |
|
||||
| $alt+XF86AudioLowerVolume | exec mpc prev | Backward to the previous track |
|
||||
| $mod+Prior | exec mpc prev | Backward to the previous track |
|
||||
| XF86AudioPlay | exec mpc toggle | Play or pause the music |
|
||||
| $mod+p | exec mpc toggle | Play or pause the music |
|
||||
| $mod+$alt+p | exec mpc stop | Completely stop the music |
|
||||
| XF86AudioStop | exec mpc stop | Completely stop the music |
|
||||
| $alt+XF86AudioPlay | exec mpc stop | Completely stop the music |
|
||||
| $mod+$alt+7 | exec mpc volume +5 | Increase the volume from mpd |
|
||||
| $mod+$alt+8 | exec mpc volume -5 | Decrease the volume from mpd |
|
||||
|
||||
We also have two shortcuts for launching ncmpcpp, my mpd frontend, either with the playlist open by default, or the visualizes open.
|
||||
#+NAME: ncmpcpp-sh
|
||||
| shortcut | command | what it does |
|
||||
|--------------+-----------------------------------+----------------------------------|
|
||||
| $mod+Shift+n | exec $term ncmpcpp -q | Launch ncmpcpp’s playlist editor |
|
||||
| $mod+Shift+v | exec $term ncmpcpp -qs visualizer | Launch ncmpcpp’s visualizer |
|
||||
|
||||
We also have more general shortcuts, like how to manipulate the general volume level.
|
||||
#+NAME: volume-sh
|
||||
| shortcut | command | what it does |
|
||||
|----------------------+----------------------------------------+----------------------|
|
||||
| XF86AudioMute | exec "amixer set Master 1+ toggle" | Mute or unmute audio |
|
||||
| Ctrl+$mod+Prior | exec "amixer -q set Master 2%+ unmute" | Raise volume |
|
||||
| XF86AudioRaiseVolume | exec "amixer -q set Master 2%+ unmute" | Raise volume |
|
||||
| Ctrl+$mod+Next | exec "amixer -q set Master 2%- unmute" | Reduce volume |
|
||||
| XF86AudioLowerVolume | exec "amixer -q set Master 2%- unmute" | Reduce volume |
|
||||
|
||||
This gives us this configuration:
|
||||
#+BEGIN_SRC conf
|
||||
<<generate-shortcuts(table=media-sh)>>
|
||||
<<generate-shortcuts(table=ncmpcpp-sh)>>
|
||||
<<generate-shortcuts(table=volume-sh)>>
|
||||
#+END_SRC
|
||||
|
||||
*** Rofi utilities
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Shortcuts-Launching_software-Rofi_utilities-b8eb5b95
|
||||
:END:
|
||||
We also have some utilities I’ve written and which are interfaced with rofi. Here are said shortcuts.
|
||||
#+NAME: rofi-sh
|
||||
| shortcut | command | what it does |
|
||||
|-------------------+-----------------------+-----------------------------------------------------------------------|
|
||||
| $mod+Shift+p | exec rofi-pass --type | Types the selected password available from ~pass~ where the cursor is |
|
||||
| $mod+Ctrl+Shift+p | exec rofi-pass | Copies in the clipboard the selected password from ~pass~ for 45 sec |
|
||||
| $mod+Ctrl+m | exec rofi-mount | Volume mounting helper |
|
||||
| $mod+Ctrl+u | exec rofi-umount | Volume unmounting helper |
|
||||
| $mod+$alt+e | exec rofi-emoji | Emoji picker, copies it in the clipboard |
|
||||
| $mod+Ctrl+w | exec wacom-setup | Sets my Wacom Bamboo tablet as being active on the selected screen |
|
||||
| $mod+Shift+w | exec connect-wifi | Connect to an available WiFi network |
|
||||
|
||||
This gives us the following configuration:
|
||||
#+BEGIN_SRC conf
|
||||
<<generate-shortcuts(table=rofi-sh)>>
|
||||
#+END_SRC
|
||||
|
||||
*** Miscellaneous
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Shortcuts-Launching_software-Miscellaneous-7ec80fea
|
||||
:END:
|
||||
And last but not least, I have some other shortcuts for various software, some of them which I use quite a lot like the shortcut for launching Emacs.
|
||||
#+NAME: misc-sh
|
||||
| shortcut | command | what it does |
|
||||
|-------------+------------------+---------------------------------|
|
||||
| $mod+e | exec $ec | Launch Emacs client |
|
||||
| $mod+n | exec nemo | Launch Nemo (file manager) |
|
||||
| $mod+$alt+c | exec speedcrunch | Launch Speedcrunch (calculator) |
|
||||
| $mod+F3 | exec arandr | Launch arandr |
|
||||
|
||||
This gives us the following configuration:
|
||||
#+BEGIN_SRC conf
|
||||
<<generate-shortcuts(table=misc-sh)>>
|
||||
#+END_SRC
|
||||
|
||||
*** Screen management
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Shortcuts-Launching_software-Screen_management-f9b35bf2
|
||||
:END:
|
||||
Additionally, we have a shortcut for entering presentation mode on the additional screen of the computer; on my main computer, Mila, the additional screen is HDMI-1, while it is VGA1 on my travel laptop. We’ll use some Emacs Lisp to determine on the configuration file export which screens names to use.
|
||||
#+NAME: hostname-screen-management
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
(cond ((string= system-name "Marpa") "bindsym $mod+Ctrl+p xrandr --output HDMI-1 --mode 1024x768 --right-of eDP-1")
|
||||
((string= system-name "gampo") "bindsym $mod+Ctrl+p xrandr --output VGA1 --mode 1024x768 --right-of LVDS1"))
|
||||
#+END_SRC
|
||||
|
||||
Now, we just have to call this Emacs Lisp code as a noweb reference and execute it.
|
||||
#+BEGIN_SRC conf :noweb yes
|
||||
<<hostname-screen-management()>>
|
||||
#+END_SRC
|
||||
|
||||
* Software autolaunch
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Software_autolaunch-ccee82f6
|
||||
:END:
|
||||
When i3 is launched, I want it to also launch some software automatically. Here is what we will launch:
|
||||
#+NAME: autolaunch
|
||||
| always execute it? | command | what it is |
|
||||
|--------------------+-------------------------------------------+----------------------------------------|
|
||||
| no | /usr/lib/xfce-polkit/xfce-polkit | Launch the XFCE Polkit |
|
||||
| no | picom --experimental-backends -e 1 | Launch picom |
|
||||
| no | xss-lock -- lock | Launch power management |
|
||||
| no | numlockx on | Activate NumLock |
|
||||
| no | dunst -config ~/.config/dunst/dunstrc | Launch notification manager |
|
||||
| no | nm-applet | NetworkManager system tray |
|
||||
| yes | wal -i "$(< "${HOME}/.cache/wal/wal")" | Sets the wallpaper from last session |
|
||||
| no | xrdb $HOME/.Xresources | Load Xresources files |
|
||||
| yes | polybar-launch | Launch polybar |
|
||||
| no | mpc stop | Stop music from mpd |
|
||||
| no | mpd_discord_richpresence --no-idle --fork | Launch mpd status sharing with Discord |
|
||||
|
||||
#+NAME: generate-autolaunch
|
||||
#+BEGIN_SRC emacs-lisp :exports none :cache yes :var table=autolaunch
|
||||
(mapconcat (lambda (x)
|
||||
(format (concat (if (string= (car x)
|
||||
"yes")
|
||||
"exec_always"
|
||||
"exec")
|
||||
" --no-startup-id %s")
|
||||
(cadr x)))
|
||||
table
|
||||
"\n")
|
||||
#+END_SRC
|
||||
|
||||
#+RESULTS[283577fe2e66b30c936b7fcf142713d285db8da6]: generate-autolaunch
|
||||
#+begin_example
|
||||
exec_always --no-startup-id wal -i "$(< "${HOME}/.cache/wal/wal")"
|
||||
exec --no-startup-id xss-lock -- i3lock -fol
|
||||
exec --no-startup-id dunst -config ~/.config/dunst/dunstrc
|
||||
exec --no-startup-id xrdb $HOME/.Xresources
|
||||
exec --no-startup-id compton -F --opengl --config ~/.config/compton.conf -e 1
|
||||
exec_always --no-startup-id polybar-launch
|
||||
exec_always --no-startup-id enable_touch
|
||||
exec --no-startup-id syndaemon -i 1.0 -t -k
|
||||
exec --no-startup-id mpc stop
|
||||
exec --no-startup-id mpd_discord_richpresence --no-idle --fork
|
||||
exec --no-startup-id nm-applet
|
||||
exec --no-startup-id numlockx on
|
||||
#+end_example
|
||||
|
||||
My travel laptop has a fingerprint reader which can be used as an authentification method when the root password is asked. Let’s launch our policy kit manager if that is the case:
|
||||
#+NAME: fingerprint-thinkpad
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
(if (string= system-name "gampo")
|
||||
"exec --no-startup-id /usr/lib/mate-polkit/polkit-mate-authentication-agent-1"
|
||||
"")
|
||||
#+END_SRC
|
||||
|
||||
#+BEGIN_SRC conf
|
||||
<<fingerprint-thinkpad()>>
|
||||
<<generate-autolaunch()>>
|
||||
#+END_SRC
|
||||
|
Before Width: | Height: | Size: 392 KiB |
|
Before Width: | Height: | Size: 91 KiB |
|
Before Width: | Height: | Size: 3.0 MiB |
|
Before Width: | Height: | Size: 179 KiB |
|
Before Width: | Height: | Size: 2.8 MiB |
|
Before Width: | Height: | Size: 160 KiB |
@@ -1,117 +0,0 @@
|
||||
#+TITLE: Nano configuration
|
||||
#+setupfile: ../headers
|
||||
#+OPTIONS: auto-id:t
|
||||
#+HTML_HEAD_EXTRA: <meta name="description" content="Phundrak's nano configuration" />
|
||||
#+HTML_HEAD_EXTRA: <meta property="og:title" content="Phundrak's nano configuration" />
|
||||
#+HTML_HEAD_EXTRA: <meta property="og:description" content="Description of the nano configuration of Phundrak" />
|
||||
#+PROPERTY: header-args :tangle ~/.config/nano/nanorc
|
||||
|
||||
* Introduction
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Introduction-7e535842
|
||||
:END:
|
||||
#+begin_center
|
||||
*Before proceeding, be aware that I deprecated this nano config on August 28th, 2020, meaning I won’t update it anymore unless I use it again some day in the future. I will keep it on my website though.*
|
||||
#+end_center
|
||||
|
||||
I nowadays rarely use Nano as a text editor, since I mainly rely on Emacs for all sorts of tasks, including quick file editing. However, at times, Emacs won’t work or won’t be available, and I therefore need a lightweight, fast and reliable text editor: Nano. And despite Nano being a simple piece of software, it does offer some customization I cannot refuse. Here is how I configured it:
|
||||
|
||||
* Configuration
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Configuration-b55668a7
|
||||
:END:
|
||||
When saving a file, create a backup file by adding a tilde (=~=) to the file's name. And make and keep not just one backup file, but make and keep a uniquely numbered one every time a file is saved — when backups are enabled with =set backup= or =--backup= or =-B=. The uniquely numbered files are stored in the directory =~/.cache/nano/backups/=.
|
||||
#+BEGIN_SRC conf
|
||||
set backup
|
||||
set backupdir /home/phundrak/.cache/nano/backups/
|
||||
#+END_SRC
|
||||
|
||||
Save a file by default in Unix format. This overrides nano's default behavior of saving a file in the format that it had. (This option has no effect when you also use =set noconvert=.)
|
||||
#+BEGIN_SRC conf
|
||||
set unix
|
||||
#+END_SRC
|
||||
|
||||
** Keys behavior
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Configuration-Keys_behavior-c665fa36
|
||||
:END:
|
||||
Make the Home key smarter. When Home is pressed anywhere but at the very beginning of non-whitespace characters on a line, the cursor will jump to that beginning (either forwards or backwards). If the cursor is already at that position, it will jump to the true beginning of the line.
|
||||
#+BEGIN_SRC conf
|
||||
set smarthome
|
||||
#+END_SRC
|
||||
|
||||
** Search
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Configuration-Search-6e458076
|
||||
:END:
|
||||
Do case-unsensitive searches by default.
|
||||
#+BEGIN_SRC conf
|
||||
unset casesensitive
|
||||
#+END_SRC
|
||||
|
||||
Do regular-expression searches by default. Regular expressions in =nano= are of the extended type (ERE).
|
||||
#+BEGIN_SRC conf
|
||||
set regexp
|
||||
#+END_SRC
|
||||
|
||||
** Visual settings
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Configuration-Visual_settings-9952f2ae
|
||||
:END:
|
||||
Use bold instead of reverse video for the title bar, status bar, key combos, function tags, line numbers, and selected text. This can be overridden by setting the options =titlecolor=, =statuscolor=, =keycolor=, =functioncolor=, =numbercolor=, and =selectedcolor=.
|
||||
#+BEGIN_SRC conf
|
||||
set boldtext
|
||||
#+END_SRC
|
||||
|
||||
Enable soft line wrapping for easier viewing of very long lines.
|
||||
#+BEGIN_SRC conf
|
||||
set softwrap
|
||||
#+END_SRC
|
||||
|
||||
When soft line wrapping is enabled, make it wrap lines at blank characters (tabs and spaces) instead of always at the edge of the screen.
|
||||
#+BEGIN_SRC conf
|
||||
set atblanks
|
||||
#+END_SRC
|
||||
|
||||
Display line numbers to the left of the text area.
|
||||
#+BEGIN_SRC conf
|
||||
set linenumbers
|
||||
#+END_SRC
|
||||
|
||||
Constantly display the cursor position in the status bar. This overrides the option =quickblank=.
|
||||
#+BEGIN_SRC conf
|
||||
set constantshow
|
||||
#+END_SRC
|
||||
|
||||
** Whitespace settings
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Configuration-Whitespace_settings-8cef9cd7
|
||||
:END:
|
||||
Convert typed tabs to spaces. Sue me.
|
||||
#+BEGIN_SRC conf
|
||||
set tabstospaces
|
||||
#+END_SRC
|
||||
|
||||
Use a tab size of a certain amount of columns. The value of number must be greater than 0. The default value is 8.
|
||||
#+BEGIN_SRC conf
|
||||
set tabsize 2
|
||||
#+END_SRC
|
||||
|
||||
Automatically indent a newly created line to the same number of tabs and/or spaces as the previous line (or as the next line if the previous line is the beginning of a paragraph).
|
||||
#+BEGIN_SRC conf
|
||||
set autoindent
|
||||
#+END_SRC
|
||||
|
||||
Remove trailing whitespace from wrapped lines when automatic hard-wrapping occurs or when text is justified.
|
||||
#+BEGIN_SRC conf
|
||||
set trimblanks
|
||||
#+END_SRC
|
||||
|
||||
** Included configuration file
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Configuration-Included_configuration_file-70b0f35b
|
||||
:END:
|
||||
Nano gives the opportunity to include some files located elsewhere. This is why I added [[https://github.com/scopatz/nanorc][this repo]] as a submodule of my dotfiles so I can access a lot of them at the same time. Since the submodule is cloned in =~/.config/nanorc=, we can add only one line to include all of the =.nanorc= files.
|
||||
#+BEGIN_SRC conf
|
||||
include ~/.config/nano/nano-syntax/*.nanorc
|
||||
#+END_SRC
|
||||
@@ -1,858 +0,0 @@
|
||||
#+TITLE: Polybar config
|
||||
#+setupfile: ../headers
|
||||
#+OPTIONS: auto-id:t
|
||||
#+HTML_HEAD_EXTRA: <meta name="description" content="Phundrak's polybar config" />
|
||||
#+HTML_HEAD_EXTRA: <meta property="og:title" content="Phundrak's polybar config" />
|
||||
#+HTML_HEAD_EXTRA: <meta property="og:description" content="Description of the polybar config file of Phundrak" />
|
||||
#+PROPERTY: header-args :exports none
|
||||
#+PROPERTY: header-args:emacs-lisp :tangle no :exports none
|
||||
#+PROPERTY: header-args:conf-windows :tangle ~/.config/polybar/config :noweb yes :exports code :mkdirp yes
|
||||
|
||||
* Presentation
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Presentation-4e723f32
|
||||
:END:
|
||||
#+begin_center
|
||||
*Before proceeding, be aware that I deprecated this polybar config on August 22nd, 2020, meaning I won’t update it anymore unless I use it again some day in the future. I will keep it on my website though.*
|
||||
#+end_center
|
||||
|
||||
Polybar is a desktop utility for displaying various information in form of bars for GNU/Linux systems. It is often used as a replacement for native bars available in window managers, such as i3. In my case, I use two instances of polybar in order to get two bars displayed on each screen. The information displayed is either related to i3 itself, or it is system information, such as CPU or disk usage. More information will be given and explained below.
|
||||
|
||||
If you want to learn more about how to configure Polybar, you can go to its [[https://github.com/jaagr/polybar][official repository on Github]].
|
||||
|
||||
#+BEGIN_EXPORT latex
|
||||
Be aware that this PDF documents suffers from a couple of issues with some characters such as emojis. If you wish to see everything correctly, I would suggest you to take a look at the online HTML version of this document.
|
||||
#+END_EXPORT
|
||||
|
||||
* General settings
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: General_settings-e02fb78c
|
||||
:END:
|
||||
Some general settings are available for Polybar, and they are declared under
|
||||
the ~[settings]~ section.
|
||||
#+BEGIN_SRC conf-windows
|
||||
[settings]
|
||||
#+END_SRC
|
||||
Only one setting is used in this configuration though: the ability to relauch
|
||||
polybar on a configuration file rewrite.
|
||||
#+BEGIN_SRC conf-windows
|
||||
screenchange-reload = true
|
||||
#+END_SRC
|
||||
|
||||
Some global settings are also available in order to adjust the
|
||||
~_NET_WM_STRUT_PARTIAL~ top and bottom values:
|
||||
#+BEGIN_SRC conf-windows
|
||||
[global/wm]
|
||||
margin-top = 32
|
||||
margin-bottom = 22
|
||||
#+END_SRC
|
||||
|
||||
* Colors declaration for polybar
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Colors_declaration_for_polybar-75ee0b65
|
||||
:END:
|
||||
#+BEGIN_SRC conf-windows :exports none
|
||||
; -*- mode: conf-windows -*-
|
||||
#+END_SRC
|
||||
Like most status bars available, we can declare custom colors to be used in polybar. This part of the configuration file is declared with the following header:
|
||||
#+BEGIN_SRC conf-windows
|
||||
[colors]
|
||||
#+END_SRC
|
||||
As I use pywal as a color scheme generator based on the color of my wallpaper, I need to tell polybar to fetch the colors it will use from xrdb. If such color cannot be used, other colors will be used as fallback colors. First, let’s declare our default background and foreground colors with their alternative option.
|
||||
#+BEGIN_SRC conf-windows
|
||||
background = ${xrdb:color1:#50000000}
|
||||
background-alt = ${xrdb:color2:#444}
|
||||
foreground = ${xrdb:color7:#dfdfdf}
|
||||
foreground-alt = ${xrdb:color6:#555}
|
||||
#+END_SRC
|
||||
Now, we can also declare our primary and secondary colors.
|
||||
#+BEGIN_SRC conf-windows
|
||||
primary = #ffb52a
|
||||
secondary = #e60053
|
||||
#+END_SRC
|
||||
Polybar is also aware of alerts sent by window managers such as i3 when a window opens in an unfocused workspace. For that, let’s declare an alert color.
|
||||
#+BEGIN_SRC conf-windows
|
||||
alert = #bd2c40
|
||||
#+END_SRC
|
||||
|
||||
* Declaration of the bars
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Declaration_of_the_bars-a95135a3
|
||||
:END:
|
||||
It is possible in i3 to declare as many bars as we wish, and each of these bars will be named. Naming the bar is done in its module declaration like so:
|
||||
#+BEGIN_SRC conf-windows :tangle no
|
||||
[bar/nameofthebar]
|
||||
#+END_SRC
|
||||
In my configuration, I use two of such bars, one atop of my screen, and one at the bottom.
|
||||
|
||||
** Top bar declaration
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Declaration_of_the_bars-Top_bar_declaration-fc0cd977
|
||||
:END:
|
||||
As unimaginative as it might seem, I went for a rather explicit name for my bars. The top one is simply named ~top~, as shown below.
|
||||
#+BEGIN_SRC conf-windows
|
||||
[bar/top]
|
||||
#+END_SRC
|
||||
|
||||
*** Positioning
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Declaration_of_the_bars-Top_bar_declaration-Positioning-2505760c
|
||||
:END:
|
||||
We need to set on which screen the bar is to be displayed. Indeed, it is possible to display a bar on only one specific screen if we wish to. Actually, it is even the default behavior of polybar, but as we will see later with the launching script, it is possible to launch bars on multiple outputs at the same time. Here, we simply get the value of the variable ~monitor~ from the launch environment.
|
||||
#+NAME: monitor-bar
|
||||
#+BEGIN_SRC conf-windows
|
||||
monitor = ${env:MONITOR}
|
||||
#+END_SRC
|
||||
We have a few position-related variables that need to be set. We can specify whether or not we want our bar at the bottom of the screen —which is the default behavior of polybar—, its width, its height, the radius for the rounding of its corners and whether the bar should be centered or not. In my case, my bars are rather small height-wise, and it occupies most of the width of my screens. There is some gaps between this bar and the border of the screen, but this is due to a border around the bar itself which acts not only on the width of the bar itself, but also on its height.
|
||||
#+BEGIN_SRC conf-windows
|
||||
bottom = false
|
||||
border-size = 5
|
||||
<<position-bar-top>>
|
||||
#+END_SRC
|
||||
#+NAME: position-bar-top
|
||||
#+BEGIN_SRC conf-windows :exports none :tangle no
|
||||
width = 100%
|
||||
height = 22
|
||||
radius = 10.0
|
||||
fixed-center = true
|
||||
#+END_SRC
|
||||
We also want to add some padding to our bar so our modules are not too close to its edges, especially due to the rounding of the top bar.
|
||||
#+NAME: padding-bar
|
||||
#+BEGIN_SRC conf-windows
|
||||
padding-left = 2
|
||||
padding-right = 4
|
||||
#+END_SRC
|
||||
Each module will have some padding around it, so that modules aren’t glued together and instead have some room to breathe. The padding on the left is a bit less than the padding on the right for aesthetic reasons.
|
||||
#+NAME: module-margin-bar
|
||||
#+BEGIN_SRC conf-windows
|
||||
module-margin-left = 1
|
||||
module-margin-right = 2
|
||||
#+END_SRC
|
||||
The top bar doesn’t include any system tray, so let’s disable that.
|
||||
#+BEGIN_SRC conf-windows
|
||||
tray-position = none
|
||||
#+END_SRC
|
||||
|
||||
*** Colors and display
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Declaration_of_the_bars-Top_bar_declaration-Colors_and_display-30f12652
|
||||
:END:
|
||||
As explained above, we declared some global variables when it comes to colors, and this is where they will be used. The bar’s background will be of the same color as the main background color declared earlier, and the same goes for the foreground.
|
||||
#+NAME: bar-colors
|
||||
#+BEGIN_SRC conf-windows
|
||||
background = ${colors.background}
|
||||
foreground = ${colors.foreground}
|
||||
#+END_SRC
|
||||
|
||||
If we wanted, we could also declare a default color for the underlines under the various modules that will be included in the bar, but in our case this variable is unused. So we will simply add this commented line as a memento this is possible, but it won’t have any effect with this current configuration of polybar. Same goes for the border around the bar, it is a useless variable in this configuration since we want the border to be transparent.
|
||||
#+NAME: line-border-color
|
||||
#+BEGIN_SRC conf-windows
|
||||
line-color = #f00
|
||||
; border-color = #00000000
|
||||
#+END_SRC
|
||||
|
||||
Although the variable for the default line color is not used, we still have to set the default width of the underline of our modules. By default, their underline will be three pixels thick.
|
||||
#+NAME: line-size-bar
|
||||
#+BEGIN_SRC conf-windows
|
||||
line-size = 3
|
||||
#+END_SRC
|
||||
|
||||
*** Fonts and locale
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Declaration_of_the_bars-Top_bar_declaration-Fonts_and_locale-70a25466
|
||||
:END:
|
||||
Now we can chose which font fill be used in order to display text in this bar, as well as the locale we want. The locale will be useful for displaying information such as date and time, which is a module we will have in this top bar. First, the declaration of the locale is done like so:
|
||||
#+NAME: locale-bar
|
||||
#+BEGIN_SRC conf-windows
|
||||
locale = ja_JP.UTF-8
|
||||
#+END_SRC
|
||||
Now, we can declare the fonts we want to use in Polybar. It is possible to declare several of them, the first one is the one which gets the absolute priority, and the next ones with a larger index are fallback fonts. Font declaration accepts the fontconfig format as well as possible offset[fn:1]. Five fonts are used in my polybar config:
|
||||
#+NAME: fonts-polybar
|
||||
| Font | fontconfig | Vertical offset | Why it’s used |
|
||||
|--------------+----------------------------------------------------+-----------------+-----------------------|
|
||||
| Fira Sans | Fira Sans Book:style=Book:pixelsize=10 | 1 | Text display |
|
||||
| IPA Mincho | IPAMincho:style=regular:pixelsize=6 | 0 | Japanese text display |
|
||||
| Unifont | unifont:fontformat=truetype:size=6:antialias=false | 0 | Fallback font |
|
||||
| NotoEmoji | NotoEmoji:style=Book:scale=16 | 0 | Emoji display |
|
||||
| Siji | Siji:pixelsize=8 | 0 | Symbol display |
|
||||
| Default font | fixed:pixelsize=8 | 0 | Fallback font |
|
||||
#+NAME: font-ws-config
|
||||
#+HEADER: :var text="font"
|
||||
#+BEGIN_SRC emacs-lisp :var table=fonts-polybar[,1:2] :cache yes
|
||||
(setq counter 0)
|
||||
(mapconcat (lambda (font)
|
||||
(setq counter (+ 1 counter))
|
||||
(format "%s-%d = %s;%s"
|
||||
text
|
||||
(- counter 1)
|
||||
(nth 0 font)
|
||||
(nth 1 font)))
|
||||
table
|
||||
"\n")
|
||||
#+END_SRC
|
||||
|
||||
#+RESULTS[53fd99d75f6b08e96288fd2a62b455d7ef8b1754]: font-ws-config
|
||||
: font-0 = Fira Sans Book:style=Book:pixelsize=10;1
|
||||
: font-1 = IPAMincho:style=regular:pixelsize=6;0
|
||||
: font-2 = unifont:fontformat=truetype:size=6:antialias=false;0
|
||||
: font-3 = NotoEmoji:style=Book:scale=16;0
|
||||
: font-4 = Siji:pixelsize=8;0
|
||||
: font-5 = fixed:pixelsize=8;0
|
||||
|
||||
Here’s the font configuration:
|
||||
#+BEGIN_SRC conf-windows
|
||||
<<font-ws-config(text="font",table=fonts-polybar)>>
|
||||
#+END_SRC
|
||||
Note that only Fira Sans get a small offset due to the size of the font and the height of the bar itself.
|
||||
|
||||
*** Modules
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Declaration_of_the_bars-Top_bar_declaration-Modules-18979638
|
||||
:END:
|
||||
Finally, arguably one of the most important parts of our bar configuration: the module selection. Modules can be positioned in three different parts of our bar: to the right, in middle or to the left. On the left, we want our workspace indicator for i3. In the middle, we’ll get the title of the focused window, and to the left we’ll have the date and time.
|
||||
#+NAME: modules-generate
|
||||
#+BEGIN_SRC emacs-lisp :var table=top-modules :results value :cache yes
|
||||
(setq right '()
|
||||
center '()
|
||||
left '())
|
||||
(dolist (module table)
|
||||
(let* ((module-name (nth 0 module))
|
||||
(module-layout (nth 1 module)))
|
||||
(message "%S" module-layout)
|
||||
(add-to-list (cond
|
||||
((string= "left" module-layout) 'left)
|
||||
((string= "center" module-layout) 'center)
|
||||
(t 'right))
|
||||
module-name)))
|
||||
(concat (concat "modules-left = "
|
||||
(mapconcat #'identity left " ")
|
||||
"\n")
|
||||
(concat "modules-center = "
|
||||
(mapconcat #'identity center " ")
|
||||
"\n")
|
||||
(concat "modules-right = "
|
||||
(mapconcat #'identity right " ")
|
||||
"\n"))
|
||||
#+END_SRC
|
||||
|
||||
#+RESULTS[90b932dc0fd32501e1513f14059b92de09a7b59e]: modules-generate
|
||||
: modules-left = i3
|
||||
: modules-center = xwindow
|
||||
: modules-right = date
|
||||
|
||||
Here is the list of modules used:
|
||||
#+NAME: top-modules
|
||||
| Module name | Position | Brief description |
|
||||
|-------------+----------+----------------------------|
|
||||
| i3 | left | i3 workspace indicator |
|
||||
| xwindow | center | Name of the focused window |
|
||||
| date | right | Date and time |
|
||||
|
||||
#+BEGIN_SRC conf-windows :cache yes
|
||||
<<modules-generate(table=top-modules)>>
|
||||
#+END_SRC
|
||||
|
||||
Each module will be described in details later in this document.
|
||||
|
||||
** Bottom bar declaration
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Declaration_of_the_bars-Bottom_bar_declaration-8504b5ec
|
||||
:END:
|
||||
As described above, we will once again have to declare our bar with an equally unimaginative but explicit name.
|
||||
#+BEGIN_SRC conf-windows
|
||||
[bar/bottom]
|
||||
#+END_SRC
|
||||
|
||||
*** Positioning
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Declaration_of_the_bars-Bottom_bar_declaration-Positioning-b1883756
|
||||
:END:
|
||||
The variables are the same as above, but two of them will be slightly modified:
|
||||
#+BEGIN_SRC conf-windows
|
||||
bottom = true
|
||||
border-size = 0
|
||||
<<position-bar-bottom>>
|
||||
#+END_SRC
|
||||
|
||||
#+NAME: position-bar-bottom
|
||||
#+BEGIN_SRC conf-windows :exports none :tangle no
|
||||
width = 100%
|
||||
height = 22
|
||||
radius = 0.0
|
||||
fixed-center = true
|
||||
#+END_SRC
|
||||
When it comes to the bottom bar, I prefer to have it fit my outputs, without any margin around it. And of course, I have to declare it as being at the bottom of the screen, hence these modifications. As regards the padding of our modules, their own margins, and the screen output, they aren’t modified.
|
||||
#+BEGIN_SRC conf-windows
|
||||
<<padding-bar>>
|
||||
<<module-margin-bar>>
|
||||
<<monitor-bar>>
|
||||
#+END_SRC
|
||||
However, we do display the system tray on this bottom bar at its right. It has no padding and it is not detached from the bar (this allows the bar to be displayed under the icons of the system tray), and their maximum size was chosen so they are well visible without being too big.
|
||||
#+BEGIN_SRC conf-windows
|
||||
tray-position = right
|
||||
tray-padding = 0
|
||||
tray-detached = false
|
||||
tray-maxsize = 15
|
||||
#+END_SRC
|
||||
|
||||
*** Colors and display
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Declaration_of_the_bars-Bottom_bar_declaration-Colors_and_display-854aae82
|
||||
:END:
|
||||
Nothing changes from the top bar, all the variables stay with the same values. See [[#Declaration_of_the_bars-Bottom_bar_declaration-Colors_and_display-854aae82][Colors and display]] of the top bar for more information.
|
||||
#+BEGIN_SRC conf-windows
|
||||
<<bar-colors>>
|
||||
<<line-border-color>>
|
||||
<<line-size-bar>>
|
||||
#+END_SRC
|
||||
|
||||
*** Fonts and locale
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Declaration_of_the_bars-Bottom_bar_declaration-Fonts_and_locale-67459d62
|
||||
:END:
|
||||
Again, nothing changes from the top bar, so for more info on what’s going on, see [[#Declaration_of_the_bars-Top_bar_declaration-Fonts_and_locale-70a25466][Fonts and locale]] of the top bar.
|
||||
#+BEGIN_SRC conf-windows
|
||||
<<locale-bar>>
|
||||
<<font-ws-config(text="font",table=fonts-polybar)>>
|
||||
#+END_SRC
|
||||
|
||||
*** Modules
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Declaration_of_the_bars-Bottom_bar_declaration-Modules-702b21fc
|
||||
:END:
|
||||
Now, we can get to something interesting again: modules. This bar has a lot more modules than the top bar. Here is the list of the modules we have on the bottom bar:
|
||||
#+NAME: table-modules-bottom
|
||||
| Module name | Position | Brief description |
|
||||
|----------------+----------+---------------------------------|
|
||||
| mpd | left | MPD status indicator |
|
||||
| filesystem | right | Free storage in our filesystem |
|
||||
| wlan | right | Name of the active WiFi network |
|
||||
| eth | right | Local address on Ethernet |
|
||||
| volume | right | System volume |
|
||||
| backlight-acpi | right | Screen backlight |
|
||||
| cpu | right | CPU usage |
|
||||
| memory | right | RAM usage |
|
||||
| temperature | right | CPU temperature |
|
||||
| custom-battery | right | Battery usage |
|
||||
Here’s the corresponding configuration:
|
||||
#+ATTR_LATEX: :options breaklines
|
||||
#+BEGIN_SRC conf-windows
|
||||
<<modules-generate(table=table-modules-bottom)>>
|
||||
#+END_SRC
|
||||
All these modules will be explained below.
|
||||
|
||||
As you may have noticed, no modules will be displayed in the middle of this bar.
|
||||
|
||||
* Modules
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Modules-2e1a51bc
|
||||
:END:
|
||||
Before we begin to describe the different modules, I would like to point out something that will be repeated multiple times if I don’t talk about it right now: for each module, it is possible to declare the foreground and background color of the prefix of the modules, as well as the underline color and the padding of the module. I like these parameters to be rather consistent, so the code block you will see below will often be reused. The colors refer to the colors declared earlier, and the padding is minimal.
|
||||
#+NAME: mod-prefix-col
|
||||
#+BEGIN_SRC conf-windows :tangle no
|
||||
format-prefix-foreground = ${colors.foreground-alt}
|
||||
format-prefix-underline = ${colors.secondary}
|
||||
format-underline = ${colors.secondary}
|
||||
format-padding = 1
|
||||
#+END_SRC
|
||||
|
||||
** Hardware
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Modules-Hardware-26426ebd
|
||||
:END:
|
||||
*** Battery
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Modules-Hardware-Battery-299f2e42
|
||||
:END:
|
||||
This module allows the user to get a battery widget among the polybar modules that will also send a notification to the user if the battery level drops below a certain value. This module relies on ~polybar-another-battery~ ([[https://github.com/drdeimos/polybar_another_battery][link]]) and its generated binary ~polybar-ab~ which should be in the ~$PATH~.
|
||||
|
||||
The first line of the module declaration lets the user name the module however they want. In this case, the name is ~custom-battery~.
|
||||
#+BEGIN_SRC conf-windows
|
||||
[module/custom-battery]
|
||||
#+END_SRC
|
||||
Since it is not a core module, we have to declare it as a custom script so polybar knows what to do with it.
|
||||
#+BEGIN_SRC conf-windows
|
||||
type = custom/script
|
||||
#+END_SRC
|
||||
We now can specify the script execution, and whether or not the script will be continuously outputting something. In our case, the answer to this last question is yes.
|
||||
#+BEGIN_SRC conf-windows
|
||||
exec = polybar-ab -polybar -thr 10
|
||||
tail = true
|
||||
#+END_SRC
|
||||
The ~-thr 10~ specifies the threshold for polybar-ab at which it should warn the user about the battery level of the computer.
|
||||
|
||||
Of course, users on desktop computers won’t need this module which is aimed at laptop users. Feel free to remove it if you do not need it.
|
||||
|
||||
*** Filesystem
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Modules-Hardware-Filesystem-26f0a3c6
|
||||
:END:
|
||||
This module allows to display information about our filesystem, including (and this is what I use this module for) displaying the used space and remaining space on different mount points. This module is an internal module to polybar, so let’s declare it as such:
|
||||
#+BEGIN_SRC conf-windows
|
||||
[module/filesystem]
|
||||
type = internal/fs
|
||||
#+END_SRC
|
||||
We can specify how often the filesystem is to be checked with the variable ~interval~. I prefer it not to check it too often in order to not ping too often my drives, but I want it to be often enough so it is somewhat responsive. This is why I settled on a 20 seconds interval.
|
||||
#+BEGIN_SRC conf-windows
|
||||
interval = 20
|
||||
#+END_SRC
|
||||
We now have to indicate where our different filesystems are mounted. In the case of my main computer /Marpa/, I have two partitions, the root partition and the home partition. But on my travel laptop, I only have the root partition, hence the usage of the below Elisp code that determines based on the computer it is running whether or not the second mount point to my home partition should be included.
|
||||
#+NAME: include-home-partition
|
||||
#+BEGIN_SRC emacs-lisp :tangle no :exports code
|
||||
(if (string= system-name "Marpa")
|
||||
"mount-1 = /home")
|
||||
#+END_SRC
|
||||
|
||||
#+BEGIN_SRC conf-windows
|
||||
mount-0 = /
|
||||
<<include-home-partition()>>
|
||||
#+END_SRC
|
||||
Now we can set the format of our module. There are two mains formats, one for mounted and one for unmounted mountpoints. For both, we’ll simply use their label.
|
||||
#+BEGIN_SRC conf-windows
|
||||
format-mounted = <label-mounted>
|
||||
format-unmounted = <label-unmounted>
|
||||
#+END_SRC
|
||||
When it comes to the mounted partition, we want to display the name of the mountpoint and how used it is, both in terms of gigabytes and percentage.
|
||||
#+BEGIN_SRC conf-windows
|
||||
label-mounted = 💽 %mountpoint%: %used%/%total% (%percentage_used%%)
|
||||
label-mounted-foreground = ${colors.foreground}
|
||||
label-mounted-underline = ${colors.secondary}
|
||||
#+END_SRC
|
||||
If the volume is unmounted (which should be worrying considering the mountpoints chosen), then we’ll simply have a message telling us about that, and the foreground color will use the alternative foreground color described earlier.
|
||||
#+BEGIN_SRC conf-windows
|
||||
label-unmounted = %mountpoint% not mounted
|
||||
label-unmounted-foreground = ${colors.foreground-alt}
|
||||
#+END_SRC
|
||||
|
||||
*** Xbacklight
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Modules-Hardware-Xbacklight-2901c504
|
||||
:END:
|
||||
This module is used in order to display the level of brightness of a screen. It is not used by itself, but rather by other modules, such as [[#Modules-Hardware-ACPI_backlight-9eaeaa79][ACPI backlight]]. First of all, this module is an internal module for xbacklight. It will also display the brightness percentage, prefixed by a sun emoji. Lastly, it will be underlined by a green line.
|
||||
#+BEGIN_SRC conf-windows
|
||||
[module/xbacklight]
|
||||
type = internal/xbacklight
|
||||
format = <label>
|
||||
label = %percentage%%
|
||||
format-prefix = "🌞 "
|
||||
format-underline = #9f78e1
|
||||
#+END_SRC
|
||||
|
||||
*** ACPI backlight
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Modules-Hardware-ACPI_backlight-9eaeaa79
|
||||
:END:
|
||||
This module indicates the backlight level of a screen thanks to the ACPI Linux module. There isn’t much to tell about the module itself other than it inherits the module described above, [[#Modules-Hardware-Xbacklight-2901c504][xbacklight]]. It also sets which driver should be used, in this case the ~intel_backlight~ driver.
|
||||
#+BEGIN_SRC conf-windows
|
||||
[module/backlight-acpi]
|
||||
inherit = module/xbacklight
|
||||
type = internal/backlight
|
||||
card = intel_backlight
|
||||
#+END_SRC
|
||||
|
||||
*** CPU
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Modules-Hardware-CPU-365dcb98
|
||||
:END:
|
||||
This module indicates how much of the CPU is being used. As shown below, I made it so we can see the load on each core. The first thing to do is to declare the module as an internal module dedicated to the CPU.
|
||||
#+BEGIN_SRC conf-windows
|
||||
[module/cpu]
|
||||
type = internal/cpu
|
||||
#+END_SRC
|
||||
|
||||
Now, we can set the refresh rate in seconds of the module. I like it at two seconds:
|
||||
#+BEGIN_SRC conf-windows
|
||||
interval = 2
|
||||
#+END_SRC
|
||||
|
||||
Now, let’s declare what will be displayed. The format will be a computer emoji followed by ramp characters.
|
||||
#+BEGIN_SRC conf-windows
|
||||
format = <label> <ramp-coreload>
|
||||
format-prefix = "💻 "
|
||||
label = %percentage%%
|
||||
ramp-coreload-0 = ▁
|
||||
ramp-coreload-1 = ▂
|
||||
ramp-coreload-2 = ▃
|
||||
ramp-coreload-3 = ▄
|
||||
ramp-coreload-4 = ▅
|
||||
ramp-coreload-5 = ▆
|
||||
ramp-coreload-6 = ▇
|
||||
ramp-coreload-7 = █
|
||||
#+END_SRC
|
||||
|
||||
Finally, this module will be underlined in red.
|
||||
#+BEGIN_SRC conf-windows
|
||||
format-underline = #f90000
|
||||
#+END_SRC
|
||||
|
||||
*** Memory
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Modules-Hardware-Memory-2f2f9475
|
||||
:END:
|
||||
Similarly to the CPU module, it is possible for Polybar to display the RAM load of the computer. As above, let’s declare this module as an internal module to Polybar:
|
||||
#+BEGIN_SRC conf-windows
|
||||
[module/memory]
|
||||
type = internal/memory
|
||||
#+END_SRC
|
||||
|
||||
As the CPU module still, the refresh rate will be of two seconds.
|
||||
#+BEGIN_SRC conf-windows
|
||||
interval = 2
|
||||
#+END_SRC
|
||||
|
||||
Its format will be the percentage of used RAM, prefixed by a disk emoji.
|
||||
#+BEGIN_SRC conf-windows
|
||||
format = <label>
|
||||
format-prefix = "💿 "
|
||||
label = %gb_used%
|
||||
#+END_SRC
|
||||
|
||||
Lastly, it will be underlined in green.
|
||||
#+BEGIN_SRC conf-windows
|
||||
format-underline = #4bffdc
|
||||
#+END_SRC
|
||||
|
||||
*** Wlan
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Modules-Hardware-Wlan-3457f36b
|
||||
:END:
|
||||
It is possible for Polybar to display the name of the current WiFi network the computer is connected to. For that, we first need to declare the Wlan module as an internal module of Polybar.
|
||||
#+BEGIN_SRC conf-windows
|
||||
[module/wlan]
|
||||
type = internal/network
|
||||
#+END_SRC
|
||||
|
||||
Now, we should set the name of the interface. As this depends on the hardware I am using, I am going to rely on the machine’s hostname and on some Elisp code to get this setting right.
|
||||
#+NAME: name-wlan-interface
|
||||
#+BEGIN_SRC emacs-lisp :exports code :tangle no
|
||||
(cond ((string= system-name "Marpa") "wlp8s0")
|
||||
((string= system-name "gampo") "wlp3s0"))
|
||||
#+END_SRC
|
||||
|
||||
#+BEGIN_SRC conf-windows
|
||||
interface = <<name-wlan-interface()>>
|
||||
#+END_SRC
|
||||
|
||||
The name of the current WiFi network will be refreshed every three seconds.
|
||||
#+BEGIN_SRC conf-windows
|
||||
interval = 3.0
|
||||
#+END_SRC
|
||||
|
||||
The format of the module when connected to a network will the the display of the antenna emoji, followed by the name of the network. When disconnected, the module will simply be empty.
|
||||
#+BEGIN_SRC conf-windows
|
||||
format-connected = <label-connected>
|
||||
format-connected-prefix = "📶 "
|
||||
label-connected = %essid%
|
||||
#+END_SRC
|
||||
|
||||
*** Ethernet
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Modules-Hardware-Ethernet-dc749304
|
||||
:END:
|
||||
Just like any other module, the ethernet module has to be declared as an internal module.
|
||||
#+BEGIN_SRC conf-windows
|
||||
[module/eth]
|
||||
type = internal/network
|
||||
#+END_SRC
|
||||
|
||||
And just like the Wlan module, it requires an interface which can vary depending on the machine I am using, hence this piece of Elisp:
|
||||
#+NAME: name-eth-interface
|
||||
#+BEGIN_SRC emacs-lisp :exports code :tangle no
|
||||
(cond ((string= system-name "Marpa") "enp9s0")
|
||||
((string= system-name "gampo") "enp0s25"))
|
||||
#+END_SRC
|
||||
|
||||
#+BEGIN_SRC conf-windows
|
||||
interface = <<name-eth-interface()>>
|
||||
#+END_SRC
|
||||
|
||||
The format of this module will be the local address of the computer on the network, and it will be prefixed by a desktop computer emoji. Meanwhile, when disconnected, the module won’t be visible.
|
||||
#+BEGIN_SRC conf-windows
|
||||
format-connected = <<label-connected>>
|
||||
format-connected-prefix = "🖥 "
|
||||
label-connected = %local_ip%
|
||||
format-disconnected =
|
||||
#+END_SRC
|
||||
|
||||
The module will be underlined in green.
|
||||
#+BEGIN_SRC conf-windows
|
||||
format-connected-underline = #55aa55
|
||||
#+END_SRC
|
||||
|
||||
*** Volume
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Modules-Hardware-Volume-ebf9f7a4
|
||||
:END:
|
||||
The volume module in Polybar is linked to its internal bindings to ALSA. Let’s declare it accordingly.
|
||||
#+BEGIN_SRC conf-windows
|
||||
[module/volume]
|
||||
type = internal/alsa
|
||||
#+END_SRC
|
||||
|
||||
Its format is quite simple: if the audio is not muted, it is then prefixed with a speaker emoji, followed by the volume percentage.
|
||||
#+BEGIN_SRC conf-windows
|
||||
format-volume = <label-volume>
|
||||
format-volume-prefix = "🔈 "
|
||||
label-volume = %percentage%%
|
||||
#+END_SRC
|
||||
|
||||
If the audio is muted, then the only thing the user will see is the muted speaker emoji followed by the text “muted”.
|
||||
#+BEGIN_SRC conf-windows
|
||||
format-muted-prefix = "🔇 "
|
||||
label-muted = muted
|
||||
#+END_SRC
|
||||
|
||||
In any case, it will be underlined in green.
|
||||
#+BEGIN_SRC conf-windows
|
||||
format-volume-underline = #55aa55
|
||||
#+END_SRC
|
||||
|
||||
*** Temperature
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Modules-Hardware-Temperature-a9f08cde
|
||||
:END:
|
||||
The temperature module checks the temperature of the CPU, and warns the user above a certain threshold of heat, in my case if my CPU is above 60°C.
|
||||
#+BEGIN_SRC conf-windows
|
||||
[module/temperature]
|
||||
type = internal/temperature
|
||||
thermal-zone = 0
|
||||
warn-temperature = 60
|
||||
#+END_SRC
|
||||
|
||||
The format of the module is the thermometer emoji followed by the temperature of the CPU. If the CPU becomes too hot, the text will change color for the secondary foreground color.
|
||||
#+BEGIN_SRC conf-windows
|
||||
format = <label>
|
||||
format-underline = #f50a4d
|
||||
format-warn = <label-warn>
|
||||
format-warn-underline = ${self.format-underline}
|
||||
format-prefix = "🌡 "
|
||||
format-warn-prefix = "🌡 "
|
||||
|
||||
label = %temperature-c%
|
||||
label-warn = %temperature-c%
|
||||
label-warn-foreground = ${colors.secondary}
|
||||
#+END_SRC
|
||||
|
||||
** Software
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Modules-Software-f6529189
|
||||
:END:
|
||||
*** Window title
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Modules-Software-Window_title-3f931641
|
||||
:END:
|
||||
This module’s aim is to simply provide the name of the currently focused window given by Xorg. This module is an internal module to polybar, that is to say it is built-in, and is of the type ~xwindow~. So, let’s declare the module accordingly, including the piece of common code declared at the beginning of the chapter:
|
||||
#+BEGIN_SRC conf-windows
|
||||
[module/xwindow]
|
||||
type = internal/xwindow
|
||||
<<mod-prefix-col>>
|
||||
#+END_SRC
|
||||
|
||||
Now we can take care of the label, which is the actual text that will be displayed. In our case, we want the label to be the title of the current X window, hence the value of ~label~, and we don’t want it to be too long, though I’m not sure I’ve often seen window titles longer than 70 characters.
|
||||
#+BEGIN_SRC conf-windows
|
||||
label = %title%
|
||||
label-maxlen = 70
|
||||
#+END_SRC
|
||||
|
||||
*** i3
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Modules-Software-i3-db36ddfb
|
||||
:END:
|
||||
Now comes the module for i3 interaction. Thanks to this module, it is possible to show which workspaces are active and focused, and it is possible to change workspaces by clicking on the ones displayed in the bar. First, let’s declare it; it is an internal module by the way.
|
||||
#+BEGIN_SRC conf-windows
|
||||
[module/i3]
|
||||
type = internal/i3
|
||||
#+END_SRC
|
||||
|
||||
Now, let’s display only the workspaces that are on the current output. This means if a workspace is either inactive or on another screen or output, it won’t be displayed.
|
||||
#+BEGIN_SRC conf-windows
|
||||
pin-workspaces = true
|
||||
#+END_SRC
|
||||
|
||||
We also want our workspaces to be sorted by number rather than by output.
|
||||
#+BEGIN_SRC conf-windows
|
||||
index-sort = true
|
||||
#+END_SRC
|
||||
|
||||
I don’t want to be able to scroll through the workspaces when my mouse is hovering the module: when it happens, most of the time it was done accidentally. So let’s deactivate that. However, I sometimes like to click on them to switch from one another, so we’ll keep that activated.
|
||||
#+BEGIN_SRC conf-windows
|
||||
enable-scroll = false
|
||||
wrapping-scroll = false
|
||||
reverse-scroll = false
|
||||
enable-click = true
|
||||
#+END_SRC
|
||||
|
||||
This parameters splits the workspaces’ name on ~:~. Let’s deactivate that.
|
||||
#+BEGIN_SRC conf-windows
|
||||
strip-wsnumbers = false
|
||||
#+END_SRC
|
||||
|
||||
An on the topic of workspaces’ name, ~fuzzy-match~ allows the user to use fuzzy search for workspaces’ name when we will be applying custom names below. Not really useful since I only use the default workspaces’ name, but it’s good to have it enabled by default.
|
||||
#+BEGIN_SRC conf-windows
|
||||
fuzzy-match = true
|
||||
#+END_SRC
|
||||
|
||||
The label format is described first by its label, but also by one of its three possible modes: focused, visible or unfocused. These will be discussed later, but for now let’s simply set our format.
|
||||
#+begin_src conf-windows
|
||||
format = <label-state> <label-mode>
|
||||
#+end_src
|
||||
|
||||
We also wand to set the label mode to be whichever mode the workspace described by polybar is in. This label will also have a padding of 2 pixels, and the text will be written in white.
|
||||
#+begin_src conf-windows
|
||||
label-mode = %mode%
|
||||
label-mode-padding = 2
|
||||
label-mode-foreground = #000
|
||||
#+end_src
|
||||
|
||||
**** Workspace icons
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Modules-Software-i3-Workspace_icons-89237191
|
||||
:END:
|
||||
Now, let’s name our workspaces. We can give them whatever name we want them to have, but I just like the aesthetics of Japanese characters, so let’s go with the kanji equivalent of the number of the workspaces.
|
||||
#+NAME: ws-names
|
||||
| workspace number | name |
|
||||
|------------------+------|
|
||||
| 1 | 一 |
|
||||
| 2 | 二 |
|
||||
| 3 | 三 |
|
||||
| 4 | 四 |
|
||||
| 5 | 五 |
|
||||
| 6 | 六 |
|
||||
| 7 | 七 |
|
||||
| 8 | 八 |
|
||||
| 9 | 九 |
|
||||
| 0 | 十 |
|
||||
|
||||
Here are the corresponding configuration lines:
|
||||
#+BEGIN_SRC conf-windows
|
||||
<<font-ws-config(text="ws",table=ws-names)>>
|
||||
#+END_SRC
|
||||
|
||||
In case we create a workspace which isn’t named from ~0~ to ~9~, I want it to appear as is.
|
||||
#+begin_src conf-windows
|
||||
ws-icon-default = %index%
|
||||
#+end_src
|
||||
|
||||
**** Focused workspaces
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Modules-Software-i3-Focused_workspaces-0ca3b93d
|
||||
:END:
|
||||
Now we can define the label itself. First, we will need to define the label when the workspace is focused. We’ll simply take the alternative background for the focused label, and the underline will be defined from Xrdb’s 8th color, with yellow as the fallback color. It will also have a two pixels padding. The text itself will be the dynamic icons declared above.
|
||||
#+begin_src conf-windows
|
||||
label-focused = %icon%
|
||||
label-focused-background = ${colors.background-alt}
|
||||
label-focused-underline = ${xrdb:color8:#ffff00}
|
||||
label-focused-padding = 2
|
||||
#+end_src
|
||||
|
||||
**** Visible workspaces
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Modules-Software-i3-Visible_workspaces-4be78e50
|
||||
:END:
|
||||
The ~visible~ label is related to the ~focused~ labels since it is describing workspaces that can be seen, but are not currently focused, i.e. a workspace that appears on another screen than the one currently used so it is visible, but it isn’t focused. The difference with the ~unfocused~ workspaces is that the latter are neither focused nor visible. As you can see, we are simply using all of the declarations from above for the focused labels so we can ensure they appear the same way the focused labels do.
|
||||
#+begin_src conf-windows
|
||||
label-visible = ${self.label-focused}
|
||||
label-visible-background = ${self.label-focused-background}
|
||||
label-visible-underline = ${self.label-focused-underline}
|
||||
label-visible-padding = ${self.label-focused-padding}
|
||||
#+end_src
|
||||
|
||||
**** Unfocused workspaces
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Modules-Software-i3-Unfocused_workspaces-13063042
|
||||
:END:
|
||||
When it comes to the unfocused label, there won’t be any custom background or underline, so we’ll just copy the two remaining lines from the focused labels for unfocused labels.
|
||||
#+begin_src conf-windows
|
||||
label-unfocused = %icon%
|
||||
label-unfocused-padding = 2
|
||||
#+end_src
|
||||
|
||||
**** Urgent workspaces
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Modules-Software-i3-Urgent_workspaces-ed2bd93c
|
||||
:END:
|
||||
Lastly, we get our urgent workspaces: workspaces in which most of the time it’s just a popup that appeared or a software that finally launched itself while working on something else on another workspace. To make it a bit more unique, let’s declare its background as being the color 0 from xrdb, with some dark red as the fallback color. And as the other labels, the text will be the icon and it will have a two pixels padding.
|
||||
#+begin_src conf-windows
|
||||
label-urgent = %icon%
|
||||
label-urgent-background = ${xrdb:color0:#bd2c40}
|
||||
label-urgent-padding = 2
|
||||
#+end_src
|
||||
|
||||
*** Mpd
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Modules-Software-Mpd-4b1ec78e
|
||||
:END:
|
||||
Mpd is a music server for GNU/Linux systems that interfaces will several front-ends, including ncmpcpp (the main one I use), ncmpcpp and mpc. It also interfaces with polybar thanks to some built in commands.
|
||||
|
||||
First, let’s declare our module as an internal module.
|
||||
#+BEGIN_SRC conf-windows
|
||||
[module/mpd]
|
||||
type = internal/mpd
|
||||
#+END_SRC
|
||||
|
||||
The next thing we want to do is set the label for the module: we will display both the title and the name of the artist of the song playing. The maximum length will be 70 characters.
|
||||
#+BEGIN_SRC conf-windows
|
||||
label-song = %title% - %artist%
|
||||
label-song-maxlen = 70
|
||||
label-song-ellipsis = true
|
||||
#+END_SRC
|
||||
|
||||
While Mpd is online, the format of the module should be the control icons and then the song label.
|
||||
#+BEGIN_SRC conf-windows
|
||||
format-online = <icon-prev> <toggle> <icon-next> <label-song>
|
||||
icon-prev = ⏭
|
||||
icon-stop = ⏹
|
||||
icon-play = ▶
|
||||
icon-pause = ⏸
|
||||
icon-next = ⏭
|
||||
#+END_SRC
|
||||
|
||||
If Mpd is offline, then I would like to display a short messages that tells the user so.
|
||||
#+BEGIN_SRC conf-windows
|
||||
format-offline = <label-offline>
|
||||
label-offline = 🎵 mpd is offline
|
||||
#+END_SRC
|
||||
|
||||
*** Date
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Modules-Software-Date-f7338626
|
||||
:END:
|
||||
This module is really simple: it gives the current date. It is an internal module, and as declared below, it updates every second:
|
||||
#+BEGIN_SRC conf-windows
|
||||
[module/date]
|
||||
type = internal/date
|
||||
interval = 1
|
||||
#+END_SRC
|
||||
|
||||
The main date and time format is the standard one, following the ISO-8601 standard.
|
||||
#+BEGIN_SRC conf-windows
|
||||
date = %Y-%m-%d
|
||||
time = %H-%M-%S
|
||||
#+END_SRC
|
||||
|
||||
It also has an alternative format which I occasionally use, which displays the date and time in the Japanese format.
|
||||
#+BEGIN_SRC conf-windows
|
||||
date-alt = %A %d, %B
|
||||
time-alt = %H:%M:%S
|
||||
#+END_SRC
|
||||
|
||||
The format is quite simple: a clock emoji preceding the date and time.
|
||||
#+BEGIN_SRC conf-windows
|
||||
format-prefix = "🕑 "
|
||||
label = %date% %time%
|
||||
#+END_SRC
|
||||
|
||||
This module is underlined in blue:
|
||||
#+BEGIN_SRC conf-windows
|
||||
format-underline = #0a6cf5
|
||||
#+END_SRC
|
||||
|
||||
* Footnotes
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Footnotes-62d05520
|
||||
:END:
|
||||
|
||||
[fn:1] [[https://github.com/polybar/polybar/wiki/Fonts][https://github.com/polybar/polybar/wiki/Fonts]]
|
||||
|
||||
# LocalWords: Siji pixelsize Fira Mincho IPAMincho Unifont unifont fontformat
|
||||
# LocalWords: truetype antialias xwindow wlan eth acpi cpu
|
||||
@@ -1 +0,0 @@
|
||||
/home/phundrak/LICENSE.md
|
||||
|
Before Width: | Height: | Size: 218 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 188 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 144 KiB |
|
Before Width: | Height: | Size: 14 KiB |
@@ -1,56 +0,0 @@
|
||||
#+title: Ncmpcpp Configuration
|
||||
#+setupfile: ../headers
|
||||
#+OPTIONS: auto-id:t
|
||||
#+HTML_HEAD_EXTRA: <meta name="description" content="Phundrak’s ncmpcpp Configuration" />
|
||||
#+HTML_HEAD_EXTRA: <meta property="og:title" content="Phundrak’s ncmpcpp Configuration" />
|
||||
#+HTML_HEAD_EXTRA: <meta property="og:description" content="Description of the ncmpcpp configuration of Phundrak" />
|
||||
#+PROPERTY: header-args :tangle ~/.config/ncmpcpp/config2 :exports code
|
||||
|
||||
* Introduction
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Introduction-3e61ecfc
|
||||
:END:
|
||||
Ncmpcpp is a TUI front-end for MPD, with an UI very similar to Ncmpc. This is
|
||||
my main MPD front-end after my i3 shortcuts. You can find below some
|
||||
screenshots of how my current ncmpcpp configuration looks like.
|
||||
|
||||
[[file:img/ncmpcpp-queue.png]]
|
||||
|
||||
[[file:img/ncmpcpp-directory.png]]
|
||||
|
||||
[[file:img/ncmpcpp-visualizer.png]]
|
||||
|
||||
* Core Ncmpcpp settings
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Core_Ncmpcpp_settings-8cacae18
|
||||
:END:
|
||||
#+BEGIN_SRC conf :exports none
|
||||
# -*- mode: conf -*-
|
||||
#+END_SRC
|
||||
|
||||
** Directories
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Core_Ncmpcpp_settings-Directories-28092c92
|
||||
:END:
|
||||
Ncmpcpp has two vital directories: the lyrics directory, and its own configuration directory. The configuration for ncmpcpp is generally either in ~$HOME/.ncmpcpp/~ or in ~$XDG_CONFIG_HOME/ncmpcpp/~.
|
||||
#+BEGIN_SRC conf
|
||||
ncmpcpp_directory = ~/.config/ncmpcpp
|
||||
#+END_SRC
|
||||
|
||||
When it comes to the lyrics, be sure to set the directory to the same directory pointed at by Mpd.
|
||||
#+BEGIN_SRC conf
|
||||
lyrics_directory = ~/.lyrics
|
||||
#+END_SRC
|
||||
|
||||
** MPD
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Core_Ncmpcpp_settings-MPD-a2a7452e
|
||||
:END:
|
||||
These settings tell ncmpcpp how to communicate with Mpd. Once again, be sure to follow your own MPD settings. In my case, I am connecting to my local MPD server, hence the ~localhost~ value of the variable below, and I did not change the default port of MPD. My music is located at =~/Music=, and ncmpcpp should connect pretty much immediately, although I allow a five seconds timeout before ncmpcpp treats it as an error. Also, no crossfade please.
|
||||
#+BEGIN_SRC conf
|
||||
mpd_host = localhost
|
||||
mpd_port = 6600
|
||||
mpd_music_dir = ~/Music
|
||||
mpd_connection_timeout = 5
|
||||
mpd_crossfade_time = 0
|
||||
#+END_SRC
|
||||
2030
org/config/bin.org
@@ -1,796 +0,0 @@
|
||||
#+title: Desktop settings
|
||||
#+setupfile: headers
|
||||
#+options: auto-id:t
|
||||
#+html_head: <meta name="description" content="Phundrak’s Emacs Configuration" />
|
||||
#+html_head: <meta property="og:title" content="Phundrak’s Emacs Configuration" />
|
||||
#+html_head: <meta property="og:description" content="Phundrak’s Emacs Configuration Detailed" />
|
||||
#+property: header-args:emacs-lisp :mkdirp yes :lexical t :exports code
|
||||
#+property: header-args:emacs-lisp+ :tangle ~/.emacs.d/desktop.el
|
||||
#+property: header-args:emacs-lisp+ :mkdirp yes :noweb no-export
|
||||
#+property: header-args:lisp :mkdirp :tangle ~/.stumpwm.d/desktop.lisp :noweb yes
|
||||
|
||||
* Introduction
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Introduction-w831x4a0l9j0
|
||||
:END:
|
||||
Many settings formerly present in this website’s index are related to
|
||||
my desktop settings, while some others are not.
|
||||
|
||||
# Also, since I switched to StumpWM, many of my keybinds from Emacs need
|
||||
# to be kept up to date with my StumpWM keybinds, and /vice versa/. This
|
||||
# document aims to regroup all settings related to the desktop in order
|
||||
# to have an easier time managing them.
|
||||
|
||||
* Common Emacs and StumpWM settings :noexport:
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Common-Emacs-and-StumpWM-settings-neseiaa0l9j0
|
||||
:END:
|
||||
Both Emacs and StumpWM work on the same principle of keychords
|
||||
powering a function or command. With both of them I have a prefix key,
|
||||
~SPC~ in the case of Emacs (or ~C-SPC~ when in insert-mode, see the
|
||||
relevant config) and ~s-SPC~ in the case of StumpWM. That means I can
|
||||
give them the same keychord following this, for instance ~w/~ to create
|
||||
a new vertically split frame to the right of the current one.
|
||||
|
||||
All the keybinds will be presented in the form of tables, with on the
|
||||
first column the keychord following the leader key, on the second
|
||||
column the EmacsLisp function to be called, and on the third the
|
||||
StumpWM command. If one of the ELisp or StumpWM case’s is empty, it
|
||||
means there is no equivalence. If it’s ~nil~, then it means it is a
|
||||
prefix key. The fourth column is for now reserved for Emacs’ which-key
|
||||
so I can give it a better name. If its value is ~nil~, then it should
|
||||
not show up. Hopefully this can be implemented someday in StumpWM.
|
||||
|
||||
** Generating Code :noexport:
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Common-Emacs-and-StumpWM-settings-Generating-Code-ngnclyk0l9j0
|
||||
:END:
|
||||
*** Elisp
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Common-Emacs-and-StumpWM-settings-Generating-Code-Elisp-oeqclyk0l9j0
|
||||
:END:
|
||||
#+name: emacs-keybinds-gen
|
||||
#+header: :var keymap=emacs-stumpwm-media-control
|
||||
#+begin_src emacs-lisp :exports none :tangle no :wrap "src emacs-lisp :tangle no"
|
||||
(mapconcat (lambda (keybind)
|
||||
(let* ((keychord (replace-regexp-in-string (rx (or (seq line-start "~")
|
||||
(seq "~" line-end)))
|
||||
""
|
||||
(car keybind)))
|
||||
(function (replace-regexp-in-string (rx (or (seq line-start "~")
|
||||
(seq "~" line-end)))
|
||||
""
|
||||
(nth 1 keybind)))
|
||||
(which (nth 3 keybind)))
|
||||
(format "\"%s\" %s"
|
||||
keychord
|
||||
(if (string= "nil" function)
|
||||
(format "%S"
|
||||
`(:ignore :which-key ,which))
|
||||
(if (string= "" which)
|
||||
(concat "#'" function)
|
||||
(format "%S"
|
||||
`'(,(intern function) :which-key ,which)))))))
|
||||
(seq-filter (lambda (elem)
|
||||
(not (string= "" (nth 1 elem))))
|
||||
keymap)
|
||||
"\n")
|
||||
#+end_src
|
||||
|
||||
#+RESULTS: emacs-keybinds-gen
|
||||
#+begin_src emacs-lisp :tangle no
|
||||
"m" (:ignore :which-key "media")
|
||||
"m«" #'emms-player-mpd-previous
|
||||
"m»" #'emms-player-mpd-next
|
||||
"ma" '(hydra-media/body :which-key "MPD add")
|
||||
"mb" (:ignore :which-key "browse")
|
||||
"mba" #'emms-browse-by-artist
|
||||
"mbA" #'emms-browse-by-album
|
||||
"mbg" #'emms-browse-by-genre
|
||||
"mbp" #'emms-playlists-mode-go
|
||||
"mbs" #'emms-smart-browse
|
||||
"mby" #'emms-browse-by-year
|
||||
"mc" #'emms-player-mpd-clear
|
||||
"mp" #'emms-player-toggle-pause
|
||||
"ms" #'emms-player-mpd-show
|
||||
"mu" (:ignore :which-key "update")
|
||||
"mum" #'emms-player-mpd-update-all
|
||||
"muc" #'emms-cache-set-from-mpd-all
|
||||
#+end_src
|
||||
|
||||
#+name: emacs-hydra-keybinds-gen
|
||||
#+header: :var keymap=emacs-stumpwm-resize-frame
|
||||
#+begin_src emacs-lisp :exports none :tangle no :wrap "src emacs-lisp :tangle no"
|
||||
(mapconcat (lambda (keybind)
|
||||
(let ((keychord (replace-regexp-in-string "^~\\|~$"
|
||||
""
|
||||
(car keybind)))
|
||||
(function (replace-regexp-in-string "^~\\|~$"
|
||||
""
|
||||
(nth 1 keybind)))
|
||||
(which (nth 3 keybind)))
|
||||
(format "%S" (if (string= "" which)
|
||||
`(,keychord ,(intern function))
|
||||
`(,keychord ,(intern function) ,which)))))
|
||||
keymap
|
||||
"\n")
|
||||
#+end_src
|
||||
|
||||
#+RESULTS: emacs-hydra-keybinds-gen
|
||||
#+begin_src emacs-lisp :tangle no
|
||||
("c" shrink-window-horizontally)
|
||||
("t" enlarge-window)
|
||||
("s" shrink-window)
|
||||
("r" enlarge-window-horizontally)
|
||||
#+end_src
|
||||
|
||||
*** Lisp
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Common-Emacs-and-StumpWM-settings-Generating-Code-Lisp-qntclyk0l9j0
|
||||
:END:
|
||||
#+name: stumpwm-filter-keybinds
|
||||
#+begin_src emacs-lisp :exports none :tangle no
|
||||
(let ((no-tilde (lambda (string)
|
||||
(replace-regexp-in-string "^~\\|~$" "" string))))
|
||||
(seq-filter (lambda (elem)
|
||||
(= 1 (length (car elem))))
|
||||
(mapcar (lambda (elem)
|
||||
`(,(replace-regexp-in-string (format "^%s" prefix) "" (car elem))
|
||||
.
|
||||
,(cdr elem)))
|
||||
(seq-filter (lambda (elem)
|
||||
(and (not (string= "" (cdr elem)))
|
||||
(not (string= prefix (car elem)))
|
||||
(string-prefix-p prefix (car elem))))
|
||||
(mapcar (lambda (elem)
|
||||
(let ((keychord (apply no-tilde (list (car elem))))
|
||||
(function (apply no-tilde (list (nth 2 elem)))))
|
||||
`(,keychord . ,function)))
|
||||
keymap)))))
|
||||
#+end_src
|
||||
|
||||
#+name: stumpwm-keybinds-gen
|
||||
#+header: :var keymap=emacs-stumpwm-media-control keymap-name="my-mpd-add-map" prefix="m"
|
||||
#+begin_src emacs-lisp :exports none :tangle no :wrap "src lisp :tangle no" :noweb yes
|
||||
(require 'seq)
|
||||
(format "(defvar *%s*
|
||||
(let %S
|
||||
%s
|
||||
m))"
|
||||
keymap-name
|
||||
`((m (make-sparse-keymap)))
|
||||
(mapconcat (lambda (keybind)
|
||||
(let ((keychord (replace-regexp-in-string (format "^%s" prefix)
|
||||
""
|
||||
(car keybind)))
|
||||
(function (cdr keybind)))
|
||||
(format "%S" `(define-key m (kbd ,keychord) ,function))))
|
||||
<<stumpwm-filter-keybinds>>
|
||||
"\n "))
|
||||
#+end_src
|
||||
|
||||
#+RESULTS: stumpwm-keybinds-gen
|
||||
#+begin_src lisp :tangle no
|
||||
(defvar *my-mpd-add-map*
|
||||
(let ((m (make-sparse-keymap)))
|
||||
(define-key m (kbd ".") "media-interactive")
|
||||
(define-key m (kbd "«") "mpd-prev")
|
||||
(define-key m (kbd "»") "mpd-next")
|
||||
(define-key m (kbd "a") "'*my-mpd-add-keymap*")
|
||||
(define-key m (kbd "b") "'*my-mpd-browse-keymap*")
|
||||
(define-key m (kbd "c") "mpd-clear")
|
||||
(define-key m (kbd "p") "mpd-toggle-pause")
|
||||
m))
|
||||
#+end_src
|
||||
|
||||
#+name: stumpwm-interactive-keybinds-gen
|
||||
#+header: :var keymap=emacs-stumpwm-resize-frame prefix=""
|
||||
#+header: :wrap "src lisp :exports none"
|
||||
#+begin_src emacs-lisp :noweb yes
|
||||
(format "(%s)"
|
||||
(mapconcat (lambda (keybind)
|
||||
(let ((keychord (car keybind))
|
||||
(function (cdr keybind)))
|
||||
(format "%S" `((kbd ,keychord) ,function))))
|
||||
<<stumpwm-filter-keybinds>>
|
||||
"\n "))
|
||||
#+end_src
|
||||
|
||||
#+RESULTS: stumpwm-interactive-keybinds-gen
|
||||
#+begin_src lisp :exports none
|
||||
(((kbd "c") "resize-direction left")
|
||||
((kbd "t") "resize-direction down")
|
||||
((kbd "s") "resize-direction up")
|
||||
((kbd "r") "resize-direction right"))
|
||||
#+end_src
|
||||
|
||||
#+name: stumpwm-interactive-gen
|
||||
#+header: :var keymap=emacs-stumpwm-resize-frame keymap-name="my-mpd-add-map" prefix=""
|
||||
#+begin_src emacs-lisp :exports none :tangle no :wrap "src lisp :tangle no"
|
||||
(format "%S"
|
||||
`(define-interactive-keymap ,(intern keymap-name)
|
||||
(:exit-on '((kbd "RET")
|
||||
(kbd "ESC")
|
||||
(kbd "C-g")
|
||||
(kbd "q")))
|
||||
,@
|
||||
<<stumpwm-interactive-keybinds-gen>>
|
||||
))
|
||||
#+end_src
|
||||
|
||||
#+RESULTS: stumpwm-interactive-gen
|
||||
#+begin_src lisp :tangle no
|
||||
(define-interactive-keymap my-mpd-add-map (:exit-on '((kbd "RET") (kbd "ESC") (kbd "C-g") (kbd "q"))) ((kbd "c") "resize-direction left" (kbd "t") "resize-direction down" (kbd "s") "resize-direction up" (kbd "r") "resize-direction right"))
|
||||
#+end_src
|
||||
|
||||
** Frames Management
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Common-Emacs-and-StumpWM-settings-Frames-Management-5zhea5c0l9j0
|
||||
:END:
|
||||
In StumpWM, I’ll consider my various windows the same as Emacs’
|
||||
buffers.
|
||||
#+name: emacs-stumpwm-frames-management
|
||||
| Keychord | Emacs | StumpWM | which-key |
|
||||
|----------+---------------------------+-------------------------+-----------|
|
||||
| ~b~ | ~nil~ | ~'*my-buffers-keymap*~ | buffers |
|
||||
| ~bb~ | ~buflers-switch-buffer~ | ~windowlist~ | |
|
||||
| ~bB~ | ~bury-buffer~ | | |
|
||||
| ~bd~ | ~kill-this-buffer~ | ~delete-window~ | |
|
||||
| ~bD~ | ~kill-buffer~ | ~window-window-and-frame~ | |
|
||||
| ~bh~ | ~dashboard-refresh-buffer~ | | |
|
||||
| ~bk~ | | ~kill-window~ | |
|
||||
| ~bl~ | ~bufler~ | | |
|
||||
| ~bm~ | ~switch-to-messages-buffer~ | | |
|
||||
| ~bn~ | ~evil-next-buffer~ | ~next~ | |
|
||||
| ~bp~ | ~evil-prev-buffer~ | ~prev~ | |
|
||||
| ~br~ | ~counsel-buffer-or-recentf~ | | |
|
||||
| ~bs~ | ~switch-to-scratch-buffer~ | | |
|
||||
|
||||
EmacsLisp code:
|
||||
#+begin_src emacs-lisp
|
||||
(phundrak/leader-key
|
||||
<<emacs-keybinds-gen(keymap=emacs-stumpwm-frames-management)>>
|
||||
)
|
||||
#+end_src
|
||||
|
||||
StumpWM’s Lisp code:
|
||||
#+begin_src lisp
|
||||
<<stumpwm-keybinds-gen(keymap=emacs-stumpwm-frames-management, keymap-name="my-buffers-keymap", prefix="b")>>
|
||||
(define-key *root-map (kbd "b") '*my-buffers-keymap*)
|
||||
#+end_src
|
||||
|
||||
** Window Management
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Common-Emacs-and-StumpWM-settings-Window-Management-8kt59fa0l9j0
|
||||
:END:
|
||||
The following allows to have an interactive keymap for resizing the
|
||||
current frame. In Emacs, it will be translated as a hydra while in
|
||||
StumpWM it will be an interactive keymap.
|
||||
#+name: emacs-stumpwm-resize-frame
|
||||
| Keychord | Emacs | StumpWM | which-key |
|
||||
|----------+-----------------------------+------------------------+-----------|
|
||||
| ~c~ | ~shrink-window-horizontally~ | ~resize-direction left~ | |
|
||||
| ~t~ | ~enlarge-window~ | ~resize-direction down~ | |
|
||||
| ~s~ | ~shrink-window~ | ~resize-direction up~ | |
|
||||
| ~r~ | ~enlarge-window-horizontally~ | ~resize-direction right~ | |
|
||||
|
||||
This translates into the following hydra in EmacsLisp:
|
||||
#+begin_src emacs-lisp
|
||||
(defhydra windows-adjust-size ()
|
||||
"
|
||||
^Zoom^ ^Other
|
||||
^^^^^^^-----------------------------------------
|
||||
[_t_/_s_] shrink/enlarge vertically [_q_] quit
|
||||
[_c_/_r_] shrink/enlarge horizontally
|
||||
"
|
||||
<<emacs-hydra-keybinds-gen(keymap=emacs-stumpwm-resize-frame)>>
|
||||
("q" nil :exit t))
|
||||
#+end_src
|
||||
|
||||
While the following Lisp code is used with StumpWM.
|
||||
#+begin_src lisp
|
||||
(define-interactive-keymap (iresize tile-group) (:on-enter #'setup-iresize
|
||||
:on-exit #'resize-unhide
|
||||
:abort-if #'abort-resize-p
|
||||
:exit-on '((kbd "RET")
|
||||
(kbd "ESC")
|
||||
(kbd "C-g")
|
||||
(kbd "q")))
|
||||
<<stumpwm-interactive-keybinds-gen(keymap=emacs-stumpwm-resize-frame)>>
|
||||
)
|
||||
#+end_src
|
||||
|
||||
Below you will find my window management keybinds.
|
||||
#+name: emacs-stump-window-management
|
||||
| Keychord | Emacs | StumpWM | which-key |
|
||||
|----------+-------------------------------+--------------------------+------------------|
|
||||
| ~w~ | ~nil~ | ~'*my-windows-keymap*~ | windows |
|
||||
| ~w.~ | ~windows-adjust-size/body~ | ~iresize~ | resize windows |
|
||||
| ~w-~ | ~split-window-below-and-focus~ | ~vsplit-and-focus~ | |
|
||||
| ~w+~ | | ~balance-frames~ | |
|
||||
| ~wv~ | ~split-window-below~ | ~vsplit~ | |
|
||||
| ~wV~ | | ~vsplit-equally~ | |
|
||||
| ~w/~ | ~split-window-right-and-focus~ | ~hsplit-and-focus~ | |
|
||||
| ~wh~ | ~split-window-right~ | ~hsplit~ | |
|
||||
| ~wH~ | | ~hsplit-equally~ | |
|
||||
| ~wc~ | ~evil-window-left~ | ~move-focus left~ | |
|
||||
| ~wt~ | ~evil-window-down~ | ~move-focus down~ | |
|
||||
| ~ws~ | ~evil-window-up~ | ~move-focus up~ | |
|
||||
| ~wr~ | ~evil-window-right~ | ~move-focus right~ | |
|
||||
| ~wC~ | | ~move-window left~ | |
|
||||
| ~wT~ | | ~move-window down~ | |
|
||||
| ~wS~ | | ~move-window up~ | |
|
||||
| ~wR~ | | ~move-window right~ | |
|
||||
| ~w C-c~ | | ~exchange-direction right~ | |
|
||||
| ~w C-s~ | | ~exchange-direction down~ | |
|
||||
| ~w C-t~ | | ~exchange-direction up~ | |
|
||||
| ~w C-r~ | | ~exchange-direction right~ | |
|
||||
| ~wb~ | ~kill-buffer-and-delete-window~ | | |
|
||||
| ~we~ | ~winum-select-window-by-number~ | ~expose~ | |
|
||||
| ~wf~ | | ~fullscreen~ | |
|
||||
| ~wF~ | | ~'*my-floating-keymap*~ | floating windows |
|
||||
| ~wFf~ | | ~float-this~ | |
|
||||
| ~wFF~ | | ~flatten-floats~ | |
|
||||
| ~wFu~ | | ~unfloat-this~ | |
|
||||
| ~wi~ | | ~info~ | |
|
||||
| ~wd~ | ~delete-window~ | ~remove-split~ | |
|
||||
| ~wD~ | ~delete-other-windows~ | ~only~ | |
|
||||
| ~wm~ | | ~meta~ | |
|
||||
| ~wo~ | ~other-window~ | ~other-window~ | |
|
||||
| ~ws~ | | ~sibling~ | |
|
||||
| ~wu~ | | ~next-urgent~ | |
|
||||
| ~wU~ | | ~unmaximize~ | |
|
||||
| ~ww~ | ~nil~ | | writeroom |
|
||||
| ~ww.~ | ~writeroom-buffer-width/body~ | | |
|
||||
| ~www~ | ~writeroom-mode~ | | |
|
||||
|
||||
** Media Control
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Common-Emacs-and-StumpWM-settings-Media-Control-r56g2hc0l9j0
|
||||
:END:
|
||||
#+name: emacs-stumpwm-media-interactive
|
||||
| Keychord | Emacs | StumpWM | which-key |
|
||||
|----------+-------------------------------------------------------------+-----------------+-----------|
|
||||
| ~c~ | ~emms-player-mpd-previous~ | ~mpd-prev~ | |
|
||||
| ~t~ | ~(shell-command-and-echo "mpc volume -2" "mpc volume" "mpc")~ | ~mpd-volume-down~ | |
|
||||
| ~s~ | ~(shell-command-and-echo "mpc volume +2" "mpc volume" "mpc")~ | ~mpd-volume-up~ | |
|
||||
| ~r~ | ~emms-player-mpd-next~ | ~mpd-next~ | |
|
||||
| ~s~ | ~emms-player-mpd-stop~ | ~mpd-stop~ | |
|
||||
|
||||
#+name: emacs-stumpwm-general-media
|
||||
| Keychord | Emacs | StumpWM | which-key |
|
||||
|----------+-------+--------------------------------------+----------------|
|
||||
| ~c~ | | ~exec xbacklight -dec 2~ | backlight down |
|
||||
| ~t~ | | ~exec amixer -q set Master 2%- unmute~ | volume down |
|
||||
| ~s~ | | ~exec amixer -q set Master 2%+ unmute~ | volume up |
|
||||
| ~r~ | | ~exec xbacklight -inc 2~ | backlight up |
|
||||
| ~m~ | | ~exec amixer -q set Master 1+ toggle~ | toggle mute |
|
||||
|
||||
#+name: emacs-stumpwm-media-control
|
||||
| Keychord | Emacs | StumpWM | which-key |
|
||||
|----------+-----------------------------+---------------------------+-----------|
|
||||
| ~m~ | ~nil~ | ~'*my-media-keymap*~ | media |
|
||||
| ~m.~ | | ~media-interactive~ | |
|
||||
| ~m«~ | ~emms-player-mpd-previous~ | ~mpd-prev~ | |
|
||||
| ~m»~ | ~emms-player-mpd-next~ | ~mpd-next~ | |
|
||||
| ~ma~ | ~hydra-media/body~ | ~'*my-mpd-add-keymap*~ | MPD add |
|
||||
| ~maa~ | | ~mpd-serach-and-add-artist~ | |
|
||||
| ~maA~ | | ~mpd-serach-and-add-album~ | |
|
||||
| ~maf~ | | ~mpd-search-and-add-file~ | |
|
||||
| ~maF~ | | ~mpd-add-file~ | |
|
||||
| ~mag~ | | ~mpd-search-and-add-genre~ | |
|
||||
| ~mat~ | | ~mpd-search-and-add-title~ | |
|
||||
| ~mb~ | ~nil~ | ~'*my-mpd-browse-keymap*~ | browse |
|
||||
| ~mba~ | ~emms-browse-by-artist~ | ~mpd-browse-artists~ | |
|
||||
| ~mbA~ | ~emms-browse-by-album~ | ~mpd-browse-albums~ | |
|
||||
| ~mbg~ | ~emms-browse-by-genre~ | ~mpd-browse-genres~ | |
|
||||
| ~mbp~ | ~emms-playlists-mode-go~ | ~mpd-browse-playlist~ | |
|
||||
| ~mbs~ | ~emms-smart-browse~ | | |
|
||||
| ~mbt~ | | ~mpd-browse-tracks~ | |
|
||||
| ~mby~ | ~emms-browse-by-year~ | | |
|
||||
| ~mc~ | ~emms-player-mpd-clear~ | ~mpd-clear~ | |
|
||||
| ~mp~ | ~emms-player-toggle-pause~ | ~mpd-toggle-pause~ | |
|
||||
| ~ms~ | ~emms-player-mpd-show~ | | |
|
||||
| ~mu~ | ~nil~ | | update |
|
||||
| ~mum~ | ~emms-player-mpd-update-all~ | | |
|
||||
| ~muc~ | ~emms-cache-set-from-mpd-all~ | | |
|
||||
|
||||
* Theme and graphical tweaks
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Theme-and-graphical-tweaks-ukp6gbc0l9j0
|
||||
:END:
|
||||
** GTK Settings
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Theme-and-graphical-tweaks-GTK-Settings-2307gbc0l9j0
|
||||
:END:
|
||||
*** GTK2
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Theme-and-graphical-tweaks-GTK-Settings-GTK2-fq77gbc0l9j0
|
||||
:END:
|
||||
**** General configuration
|
||||
:PROPERTIES:
|
||||
:HEADER-ARGS: :mkdirp yes :tangle ~/.config/gtk-2.0/gtkrc
|
||||
:CUSTOM_ID: Theme-and-graphical-tweaks-GTK-Settings-GTK2-General-configuration-xod7gbc0l9j0
|
||||
:END:
|
||||
This file is tangled at ~$HOME/.config/gtk-2.0/gtkrc~. This is an
|
||||
equivalent for the GTK3 configuration file you will see below, and it
|
||||
shares most of its settings. First, let’s select the Nordic theme for
|
||||
GTK2. Let’s also set the icon theme.
|
||||
#+BEGIN_SRC conf-unix
|
||||
# -*- mode: unix-config -*-
|
||||
gtk-theme-name="Nordic"
|
||||
gtk-icon-theme-name="Flat-Remix-Dark"
|
||||
#+END_SRC
|
||||
|
||||
#+BEGIN_SRC conf-unix
|
||||
gtk-xft-antialias=1
|
||||
gtk-xft-hinting=1
|
||||
gtk-xft-hintstyle="hintslight"
|
||||
#+END_SRC
|
||||
|
||||
This changes the shortcuts in menu, let’s also make the menus snappier.
|
||||
#+BEGIN_SRC conf-unix
|
||||
gtk-can-change-accels=1
|
||||
gtk-menu-bar-popup-delay=0
|
||||
gtk-menu-popdown-delay=0
|
||||
gtk-menu-popup-delay=0
|
||||
#+END_SRC
|
||||
|
||||
**** Filechooser
|
||||
:PROPERTIES:
|
||||
:HEADER-ARGS: :mkdirp yes :tangle ~/.config/gtk-2.0/gtkfilechooser.ini
|
||||
:CUSTOM_ID: Theme-and-graphical-tweaks-GTK-Settings-GTK2-Filechooser-nmh7gbc0l9j0
|
||||
:END:
|
||||
#+BEGIN_SRC conf-unix
|
||||
[Filechooser Settings]
|
||||
#+END_SRC
|
||||
|
||||
The first option alows me to open the file chooser in the current working
|
||||
directory:
|
||||
#+BEGIN_SRC conf-unix
|
||||
StartupMode=cwd
|
||||
#+END_SRC
|
||||
|
||||
Next, setting the location mode to ~path-bar~ will show the path as buttons that
|
||||
can be clicked rather than the full path.
|
||||
#+BEGIN_SRC conf-unix
|
||||
LocationMode=path-bar
|
||||
#+END_SRC
|
||||
|
||||
With this configuration, by default we won’t see hidden files.
|
||||
#+BEGIN_SRC conf-unix
|
||||
ShowHidden=true
|
||||
#+END_SRC
|
||||
|
||||
And we'll also see the size of the visible files.
|
||||
#+BEGIN_SRC conf-unix
|
||||
ShowSizeColumn=true
|
||||
#+END_SRC
|
||||
|
||||
Now, let’s choose the geometry of our file picker. These two first lines set
|
||||
where the file picker appears:
|
||||
#+BEGIN_SRC conf-unix
|
||||
GeometryX=566
|
||||
GeometryY=202
|
||||
#+END_SRC
|
||||
|
||||
And these two describe the size of the window:
|
||||
#+BEGIN_SRC conf-unix
|
||||
GeometryWidth=800
|
||||
GeometryHeight=400
|
||||
#+END_SRC
|
||||
|
||||
With these two lines, we set how our files are sorted: by name, and in the
|
||||
ascending order.
|
||||
#+BEGIN_SRC conf-unix
|
||||
SortColumn=name
|
||||
SortOrder=ascending
|
||||
#+END_SRC
|
||||
|
||||
Our default view mode is a list of files:
|
||||
#+BEGIN_SRC conf-unix
|
||||
ViewMode=list-view
|
||||
#+END_SRC
|
||||
|
||||
And finally, setting our icon view scale to ~-1~ sets the icon view to the max
|
||||
size.
|
||||
#+BEGIN_SRC conf-unix
|
||||
IconViewScale=-1
|
||||
#+END_SRC
|
||||
|
||||
*** GTK3
|
||||
:PROPERTIES:
|
||||
:HEADER-ARGS: :mkdirp yes :tangle ~/.config/gtk-3.0/settings.ini
|
||||
:CUSTOM_ID: Theme-and-graphical-tweaks-GTK-Settings-GTK3-ojl7gbc0l9j0
|
||||
:END:
|
||||
The following file helps me choosing the aspect of various GTK+ 3 software,
|
||||
including their theme and icons. First, let’s declare the header:
|
||||
#+BEGIN_SRC conf-unix
|
||||
[Settings]
|
||||
#+END_SRC
|
||||
|
||||
Now, let’s hint to GTK that I prefer dark themes. This can have an influence
|
||||
also on some websites that can detect this preference and therefore set their
|
||||
own theme to dark by themselves.
|
||||
#+BEGIN_SRC conf-unix
|
||||
gtk-application-prefer-dark-theme = true
|
||||
#+END_SRC
|
||||
|
||||
Next, the icon theme is the Flat Remix Dark icon theme:
|
||||
#+BEGIN_SRC conf-unix
|
||||
gtk-icon-theme-name = Flat-Remix-Dark
|
||||
#+END_SRC
|
||||
|
||||
Now, the general theme for GTK3 is Nordic.
|
||||
#+BEGIN_SRC conf-unix
|
||||
gtk-theme-name = Nordic
|
||||
#+END_SRC
|
||||
|
||||
#+BEGIN_SRC conf-unix
|
||||
gtk-can-change-accels=1
|
||||
gtk-menu-bar-popup-delay=0
|
||||
gtk-menu-popdown-delay=0
|
||||
gtk-menu-popup-delay=0
|
||||
#+END_SRC
|
||||
|
||||
#+BEGIN_SRC conf-unix
|
||||
gtk-xft-antialias=1
|
||||
gtk-xft-hinting=1
|
||||
gtk-xft-hintstyle=hintslight
|
||||
# gtk-xft-rgba=rgb
|
||||
#+END_SRC
|
||||
|
||||
Since window decorations are handled by my WMs, I will leave this variable
|
||||
empty.
|
||||
#+BEGIN_SRC conf-unix
|
||||
gtk-decoration-layout=
|
||||
#+END_SRC
|
||||
|
||||
** Picom (Compton)
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Theme-and-graphical-tweaks-Picom-Compton-uko7gbc0l9j0
|
||||
:END:
|
||||
Picom is a standalone compositor for Xorg, and the successor to
|
||||
Compton, itself successor to xcompmgr-dana, itself a fork of xcompmgr.
|
||||
You can find my Picom configuration [[file:picom.org][here]].
|
||||
|
||||
** Xresources
|
||||
:PROPERTIES:
|
||||
:HEADER-ARGS: :mkdirp yes :tangle ~/.config/X11/Xresources :exports code
|
||||
:CUSTOM_ID: Theme-and-graphical-tweaks-Xresources-4dr7gbc0l9j0
|
||||
:END:
|
||||
The main body in my Xresources declaration is the declaration of my
|
||||
color theme. It is based on the [[https://www.nordtheme.com/][Nord]] theme, from their [[https://github.com/arcticicestudio/nord-xresources/][Git repository]].
|
||||
#+BEGIN_SRC conf
|
||||
#define nord0 #2E3440
|
||||
#define nord1 #3B4252
|
||||
#define nord2 #434C5E
|
||||
#define nord3 #4C566A
|
||||
#define nord4 #D8DEE9
|
||||
#define nord5 #E5E9F0
|
||||
#define nord6 #ECEFF4
|
||||
#define nord7 #8FBCBB
|
||||
#define nord8 #88C0D0
|
||||
#define nord9 #81A1C1
|
||||
#define nord10 #5E81AC
|
||||
#define nord11 #BF616A
|
||||
#define nord12 #D08770
|
||||
#define nord13 #EBCB8B
|
||||
#define nord14 #A3BE8C
|
||||
#define nord15 #B48EAD
|
||||
|
||||
,*.foreground: nord4
|
||||
,*.background: nord0
|
||||
,*.cursorColor: nord4
|
||||
,*fading: 35
|
||||
,*fadeColor: nord3
|
||||
|
||||
,*.color0: nord1
|
||||
,*.color1: nord11
|
||||
,*.color2: nord14
|
||||
,*.color3: nord13
|
||||
,*.color4: nord9
|
||||
,*.color5: nord15
|
||||
,*.color6: nord8
|
||||
,*.color7: nord5
|
||||
,*.color8: nord3
|
||||
,*.color9: nord11
|
||||
,*.color10: nord14
|
||||
,*.color11: nord13
|
||||
,*.color12: nord9
|
||||
,*.color13: nord15
|
||||
,*.color14: nord7
|
||||
,*.color15: nord6
|
||||
#+END_SRC
|
||||
|
||||
* Gpg configuration
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Gpg-configuration-6i2ip6l0m9j0
|
||||
:END:
|
||||
#+begin_src conf :tangle ~/.gnupg/gpg.conf
|
||||
keyserver hkp://keys.gnupg.net
|
||||
keyserver-options auto-key-retrieve
|
||||
keyserver hkp://pgp.mit.edu:11371
|
||||
#+end_src
|
||||
|
||||
* Email signature
|
||||
:PROPERTIES:
|
||||
:HEADER-ARGS: :mkdirp yes :tangle ~/.signature
|
||||
:CUSTOM_ID: Email-signature-jnn75ac0l9j0
|
||||
:END:
|
||||
This file gets inserted automatically at the end of my emails.
|
||||
#+BEGIN_SRC text
|
||||
Lucien “Phundrak” Cartier-Tilet
|
||||
https://phundrak.com (Français)
|
||||
https://phundrak.com/en (English)
|
||||
Sent from GNU/Emacs
|
||||
#+END_SRC
|
||||
|
||||
* ~.desktop~ files for custom applications
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: -desktop-files-for-custom-applications-cksiyhg0m9j0
|
||||
:END:
|
||||
Some software I use are not packaged (yet) on my system. Therefore, in
|
||||
order to make them available in ~rofi~, I need to write a ~.desktop~ file
|
||||
so I can launch them.
|
||||
|
||||
** Emacs
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: -desktop-files-for-custom-applications-Emacs-6e9actg0m9j0
|
||||
:END:
|
||||
Emacs does have a default ~.desktop~ file, but I want to override it so
|
||||
I can just “open with Emacs” from other software (such as Nemo) and it
|
||||
will instead open with ~emacsclient~.
|
||||
#+begin_src conf-desktop :tangle ~/.local/share/applications/emacs.desktop
|
||||
[Desktop Entry]
|
||||
Name=Emacs
|
||||
GenericName=Text Editor
|
||||
Comment=Edit text
|
||||
MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++;
|
||||
Exec=emacsclient -c %F
|
||||
Icon=emacs
|
||||
Type=Application
|
||||
Terminal=false
|
||||
Categories=Development;TextEditor;
|
||||
StartupWMClass=Emacs
|
||||
Keywords=Text;Editor;
|
||||
#+end_src
|
||||
|
||||
I also have ~mu4e.desktop~ which is used to set my default email client.
|
||||
It relies on ~emacsmail~ defined in [[file:bin.org::#Emacsmail-afffb7cd][this document]].
|
||||
#+begin_src conf-desktop :tangle ~/.local/share/applications/mu4e.desktop
|
||||
[Desktop Entry]
|
||||
Name=Mu4e
|
||||
GenericName=Mu4e
|
||||
Comment=Maildir Utils for Emacs
|
||||
MimeType=x-scheme-handler/mailto;
|
||||
Exec=/home/phundrak/.local/bin/emacsmail %U
|
||||
Icon=emacs
|
||||
Type=Application
|
||||
Terminal=false
|
||||
Categories=Network;Email;TextEditor
|
||||
StartupWMClass=Gnus
|
||||
Keywords=Text;Editor;
|
||||
#+end_src
|
||||
|
||||
Then I also have ~org-protocol.desktop~ so I can capture elements from
|
||||
other software, mainly web pages from Firefox through the [[https://github.com/sprig/org-capture-extension][org-capture
|
||||
extension]].
|
||||
#+begin_src conf-desktop :tangle ~/.local/share/applications/org-protocol.desktop
|
||||
[Desktop Entry]
|
||||
Name=org-protocol
|
||||
Exec=emacsclient %u
|
||||
Type=Application
|
||||
Terminal=false
|
||||
Categories=System;
|
||||
MimeType=x-scheme-handler/org-protocol;
|
||||
#+end_src
|
||||
|
||||
** FlowScape
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: -desktop-files-for-custom-applications-FlowScape-7zelglg0m9j0
|
||||
:END:
|
||||
[[https://pixelforest.itch.io/flowscape][FlowScape]] is a nice 3D compositing software I sometimes use to create
|
||||
landscapes. I always install it in =~/.local/opt/Flowscape=, so the
|
||||
~.desktop~ file is relatively straightforward.
|
||||
#+begin_src conf-desktop :tangle ~/.local/share/applications/FlowScape.desktop
|
||||
[Desktop Entry]
|
||||
Version=1.5
|
||||
Name=FlowScape
|
||||
Comment=Create gorgeous 3D landscapes with ease.
|
||||
Exec=/usr/bin/prime-run /home/phundrak/.local/opt/FlowScape/FlowScape.x86_64
|
||||
Path=/home/phundrak/.local/opt/FlowScape
|
||||
Icon=/home/phundrak/.local/opt/FlowScape/icon.jpg
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Categories=Graphics
|
||||
#+end_src
|
||||
|
||||
** macOS
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: -desktop-files-for-custom-applications-macOS-yb1dmyg0m9j0
|
||||
:END:
|
||||
You did not read wrong! Yes I have an entry for macOS, but this is for
|
||||
a virtual machine located in ~~/VMs/macOS~.
|
||||
#+begin_src conf-desktop :tangle ~/.local/share/applications/macos.desktop
|
||||
[Desktop Entry]
|
||||
Version=1
|
||||
Name=macOS
|
||||
Comment=macOS in a virtual machine
|
||||
Exec=/usr/bin/prime-run /home/phundrak/VMs/macOS/basic.sh
|
||||
Path=/home/phundrak/VMs/macOS
|
||||
Icon=/home/phundrak/VMs/macOS/macOS.png
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Categories=Development
|
||||
#+end_src
|
||||
|
||||
** Minecraft
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: -desktop-files-for-custom-applications-Minecraft-tds7ddh0m9j0
|
||||
:END:
|
||||
Yup, I play Minecraft. And yes, it does have a default ~.desktop~ file,
|
||||
but this one overrides it so it launches automatically Minecraft with
|
||||
[[https://wiki.archlinux.org/title/PRIME][prime-run]] so my GPU is used.
|
||||
#+begin_src conf-desktop :tangle ~/.local/share/applications/minecraft-launcher.desktop
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
Version=1.0
|
||||
Name=Minecraft Launcher (Nvidia)
|
||||
Comment=Official Minecraft Launcher
|
||||
Exec=/usr/bin/prime-run /usr/bin/minecraft-launcher
|
||||
Path=/usr/bin/
|
||||
Icon=minecraft-launcher
|
||||
Terminal=false
|
||||
Categories=Game;Application;
|
||||
#+end_src
|
||||
|
||||
** OtherWorldMapper
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: -desktop-files-for-custom-applications-OtherWorldMapper-rnh4omg0m9j0
|
||||
:END:
|
||||
OtherWorldMapper is a map creation software. It is always installed in
|
||||
~~/.local/opt/OtherWorldMapper~.
|
||||
#+begin_src conf-desktop :tangle ~/.local/share/applications/OWM.desktop
|
||||
[Desktop Entry]
|
||||
Version=1.0.4
|
||||
Name=OtherWorldMapper
|
||||
Comment=OtherWorldMapper is a powerful yet intuitive fantasy map creation tool.
|
||||
Exec=/usr/bin/prime-run /home/phundrak/.local/opt/OtherWorldMapper/OWM
|
||||
Path=/home/phundrak/.local/opt/OtherWorldMapper
|
||||
Icon=/home/phundrak/.local/opt/OtherWorldMapper/owm.ico
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Categories=Graphics
|
||||
#+end_src
|
||||
|
||||
** YouTube ~.desktop~ files
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: -desktop-files-for-custom-applications-YouTube-desktop-files-0pw918h0m9j0
|
||||
:END:
|
||||
The first ~.desktop~ file related to YouTube is ~ytdl.desktop~ which runs
|
||||
~ytdl~ defined in [[file:bin.org::#ytdl-a-youtube-dl-wrapper-03bd63e0][this document]].
|
||||
#+begin_src conf-desktop :tangle ~/.local/share/applications/ytdl.desktop
|
||||
[Desktop Entry]
|
||||
Version=0.3
|
||||
Name=YTDL
|
||||
Comment=YouTube (and more) video downloader
|
||||
Exec=/home/phundrak/.local/bin/rofi-ytdl
|
||||
Path=/home/phundrak/.local/bin
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Categories=Network;Video
|
||||
#+end_src
|
||||
|
||||
There is also ~ytplay.desktop~ for ~ytplay~ defined in [[file:bin.org::#Media-youtube-dl-wrappers-ytplay-z6ka39h0m9j0][this document]].
|
||||
#+begin_src conf-desktop
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
Version=1.0
|
||||
Name=ytplay (YouTube in mpv)
|
||||
Comment=Play YouTube videos in mpv
|
||||
Exec=/home/phundrak/.local/bin/ytplay
|
||||
Path=/home/phundrak/.local/bin
|
||||
Terminal=false
|
||||
Categories=Media
|
||||
#+end_src
|
||||
8469
org/config/emacs.org
@@ -1,814 +0,0 @@
|
||||
#+TITLE: Fish config
|
||||
#+setupfile: headers
|
||||
#+OPTIONS: auto-id:t
|
||||
#+HTML_HEAD_EXTRA: <meta name="description" content="Phundrak's fish config" />
|
||||
#+HTML_HEAD_EXTRA: <meta property="og:title" content="Phundrak's fish config" />
|
||||
#+HTML_HEAD_EXTRA: <meta property="og:description" content="Description of the fish config file of Phundrak" />
|
||||
#+PROPERTY: header-args:fish :mkdirp :tangle ~/.config/fish/config.fish :exports code :noweb yes
|
||||
#+PROPERTY: header-args :exports code :tangle no
|
||||
|
||||
* Presentation
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Presentation-340195eb
|
||||
:END:
|
||||
The file present in =~/.config/fish/config.fish= is the configuration file for
|
||||
the [[https://fishshell.com/][fish shell]]. It contains custom functions, environment variables and
|
||||
abbreviations.
|
||||
|
||||
Just in case, we might need sometimes to declare the fish function =fish_title=
|
||||
as =true=, so let’s do so.
|
||||
#+BEGIN_SRC fish
|
||||
function fish_title
|
||||
true
|
||||
end
|
||||
#+END_SRC
|
||||
|
||||
* Fish from within Emacs
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Fish_from_within_Emacs-360c0a74
|
||||
:END:
|
||||
I sometimes call fish from within emacs, with =M-x ansi-term=. In this case, the
|
||||
variable =TERM= needs to have the value =eterm-color=.
|
||||
#+BEGIN_SRC fish
|
||||
if test -n "$EMACS"
|
||||
set -x TERM eterm-color
|
||||
end
|
||||
#+END_SRC
|
||||
|
||||
* Global variables
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Global_variables-1c84df8b
|
||||
:END:
|
||||
In order to keep some other code clean, I set the ~$BROWSER~ variable so I don’t
|
||||
have to call my web browser directly but rather with this variable.
|
||||
#+BEGIN_SRC fish
|
||||
set -gx BROWSER firefox
|
||||
#+END_SRC
|
||||
|
||||
Sometimes, software will rely on =SUDO_ASKPASS= to get a GUI from which it can
|
||||
get the sudo password. So, let’s declare it.
|
||||
#+BEGIN_SRC fish
|
||||
set -gx SUDO_ASKPASS ~/.local/bin/askpass
|
||||
#+END_SRC
|
||||
|
||||
In general, I prefer using ~bat~ to ~less~, although the former relies on the
|
||||
latter, but ~bat~ provides nice wrapping around ~less~, including syntax
|
||||
highlighting. Let’s set the manpager to bat then:
|
||||
#+BEGIN_SRC fish
|
||||
set -x MANPAGER "sh -c 'col -bx | bat -l man -p'"
|
||||
#+END_SRC
|
||||
|
||||
~XMODIFIERS~ is set to nothing as to not impede Emacs’ inputs.
|
||||
#+begin_src fish
|
||||
set -x XMODIFIERS
|
||||
#+end_src
|
||||
|
||||
Let’s start the Gnome keyring daemon. It will return a variable which must be set.
|
||||
#+begin_src fish
|
||||
if test -n "$DESKTOP_SESSION"
|
||||
set -x (gnome-keyring-daemon --start | string split "=")
|
||||
end
|
||||
#+end_src
|
||||
|
||||
** XDG user directories
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Global-variables-XDG-user-directories-ata8fwf0bhj0
|
||||
:END:
|
||||
There’s a couple of XDG user directories that are not set, let’s fix
|
||||
that.
|
||||
#+begin_src fish
|
||||
set -x XDG_CACHE_HOME $HOME/.cache
|
||||
set -x XDG_CONFIG_HOME $HOME/.config
|
||||
set -x XDG_DATA_HOME $HOME/.local/share
|
||||
set -x XDG_STATE_HOME $HOME/.local/state
|
||||
#+end_src
|
||||
|
||||
Now, let's clean the ~$HOME~ directory. Be aware it will require quite a
|
||||
few lines.
|
||||
#+begin_src fish
|
||||
set -x HISTFILE "$XDG_STATE_HOME"/bash/history
|
||||
set -x _Z_DATA "$XDG_DATA_HOME"/z
|
||||
set -x XAUTHORITY "$XDG_RUNTIME_DIR"/Xauthority
|
||||
set -x WINEPREFIX "$XDG_DATA_HOME"/wine
|
||||
set -x TEXMFVAR "$XDG_CACHE_HOME"/texlive/texmf-var
|
||||
set -x RUSTUP_HOME "$XDG_DATA_HOME"/rustup
|
||||
set -x BUNDLE_USER_CONFIG "$XDG_CONFIG_HOME"/bundle
|
||||
set -x BUNDLE_USER_CACHE "$XDG_CACHE_HOME"/bundle
|
||||
set -x BUNDLE_USER_PLUGIN "$XDG_DATA_HOME"/bundle
|
||||
set -x PYLINTHOME "$XDG_CACHE_HOME"/pylint
|
||||
set -x PYENV_ROOT "$XDG_DATA_HOME"/pyenv
|
||||
set -x PASSWORD_STORE_DIR "$XDG_DATA_HOME"/pass
|
||||
set -x PARALLEL_HOME "$XDG_CONFIG_HOME"/parallel
|
||||
set -x _JAVA_OPTIONS -Djava.util.prefs.userRoot="$XDG_CONFIG_HOME"/java
|
||||
set -x NVM_DIR "$XDG_DATA_HOME"/nvm
|
||||
set -x CUDA_CACHE_PATH "$XDG_CACHE_HOME"/nv
|
||||
set -x __GL_SHADER_DISK_CACHE_PATH "$XDG_CACHE_HOME"/nv
|
||||
set -x NUGET_PACKAGES "$XDG_CACHE_HOME"/NuGetPackages
|
||||
set -x NPM_CONFIG_USERCONFIG "$XDG_CONFIG_HOME"/npm/npmrc
|
||||
set -x TERMINFO "$XDG_DATA_HOME"/terminfo
|
||||
set -x TERMINFO_DIRS "$XDG_DATA_HOME"/terminfo:/usr/share/terminfo
|
||||
set -x MPLAYER_HOME "$XDG_CONFIG_HOME"/mplayer
|
||||
set -x ICEAUTHORITY "$XDG_CACHE_HOME"/ICEauthority
|
||||
set -x LESSHISTFILE "$XDG_CACHE_HOME"/less/history
|
||||
set -x GTK2_RC_FILES "$XDG_CONFIG_HOME"/gtk-2.0/gtkrc
|
||||
set -x GOPATH "$XDG_DATA_HOME"/go
|
||||
set -x GNUPGHOME "$XDG_DATA_HOME"/gnupg
|
||||
set -x GEM_HOME "$XDG_DATA_HOME"/gem
|
||||
set -x GEM_SPEC_CACHE "$XDG_CACHE_HOME"/gem
|
||||
set -x DOCKER_CONFIG "$XDG_CONFIG_HOME"/docker
|
||||
set -x CARGO_HOME "$XDG_DATA_HOME"/cargo
|
||||
#+end_src
|
||||
|
||||
** Development
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Global_variables-Development-76b3ff13
|
||||
:END:
|
||||
Now, let’s declare our editor of choice, EmacsClient; not Emacs itself since it
|
||||
will most often be just quick edits, nothing too heavy, if it is called from the
|
||||
~EDITOR~ variable (from Git, for example), or from the ~VISUAL~ variable.
|
||||
#+BEGIN_SRC fish
|
||||
set -gx EDITOR emacsclient -c
|
||||
set -gx VISUAL emacsclient -c
|
||||
#+END_SRC
|
||||
|
||||
We also need to set the path to the Dart SDK.
|
||||
#+BEGIN_SRC fish
|
||||
set -gx DART_SDK /opt/dart-sdk/bin
|
||||
#+END_SRC
|
||||
|
||||
And we also need to specify where the Android SDK it located.
|
||||
#+BEGIN_SRC fish
|
||||
set -gx ANDROID_HOME $HOME/Android/Sdk
|
||||
#+END_SRC
|
||||
|
||||
Still related to Dart and Flutter development,
|
||||
#+BEGIN_SRC fish
|
||||
set -gx CHROME_EXECUTABLE /usr/bin/chromium
|
||||
#+END_SRC
|
||||
|
||||
Next, we have two variables from Deno, the Node.js destroyer. Its base directory
|
||||
will be set in my XDG config directory, and its binaries will be located in my
|
||||
local binaries directory (see below).
|
||||
#+BEGIN_SRC fish
|
||||
set -gx DENO_DIR $HOME/.config/deno
|
||||
set -gx DENO_INSTALL_ROOT $HOME/.local/bin/deno
|
||||
#+END_SRC
|
||||
|
||||
Finally, some development packages require the =PKG_CONFIG_PATH= to be set, so
|
||||
let’s do so.
|
||||
#+BEGIN_SRC fish
|
||||
set -gx PKG_CONFIG_PATH /usr/local/lib/pkgconfig/ $PKG_CONFIG_PATH
|
||||
#+END_SRC
|
||||
|
||||
** ~$PATH~
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Global_variables-$PATH-e1320303
|
||||
:END:
|
||||
A variable available with the fish shell is ~fish_user_paths~ which lists custom
|
||||
paths to binaries specified by the user. Using this variable ensures they are
|
||||
included in the ~$PATH~ variable only once without the need to set it directly.
|
||||
For instance, my ~PATH~ variable needs Rust’s Cargo’s binaries, Go’s binaries,
|
||||
my own executables, and some more.
|
||||
|
||||
#+NAME: extra-paths
|
||||
| additional path | what it leads to |
|
||||
|--------------------------+---------------------------------------------------|
|
||||
| node_modules/.bin | The current directory’s NPM binaries if it exists |
|
||||
| $HOME/.local/bin | Custom executables, see [[file:bin.org]] |
|
||||
| $GOPATH/bin | Go binaries and executables |
|
||||
| $CARGO_HOME/bin | Rust binaries and executables |
|
||||
| $GEM_HOME/ruby/3.0.0/bin | Ruby 3.0 binaries and executables |
|
||||
| $GEM_HOME/ruby/2.6.0/bin | Ruby 2.6 binaries and executables |
|
||||
| $HOME/.cabal/bin | Haskel binaries |
|
||||
| /usr/lib/xfce-polkit | Path to XFCE’s PolKit |
|
||||
|
||||
#+NAME: generate-extra-paths
|
||||
#+BEGIN_SRC emacs-lisp :var paths=extra-paths[,0] :exports none :cache yes
|
||||
(mapconcat #'identity
|
||||
paths " \\\n")
|
||||
#+END_SRC
|
||||
|
||||
#+RESULTS[5dedcba52b12f9026e90c3b1b91a65d60c139ede]: generate-extra-paths
|
||||
: node_modules/.bin \
|
||||
: $HOME/.local/bin \
|
||||
: $GOPATH/bin \
|
||||
: $CARGO_HOME/bin \
|
||||
: $GEM_HOME/ruby/3.0.0/bin \
|
||||
: $GEM_HOME/ruby/2.6.0/bin \
|
||||
: $HOME/.cabal/bin \
|
||||
: /usr/lib/xfce-polkit
|
||||
|
||||
So, let’s set our user paths:
|
||||
#+BEGIN_SRC fish :noweb yes
|
||||
set -g fish_user_paths \
|
||||
<<generate-extra-paths()>>
|
||||
#+END_SRC
|
||||
|
||||
* Tramp remote access
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Tramp_remote_access-72aedec2
|
||||
:END:
|
||||
When accessing from a remote machine our computer from Emacs, tramp needs a
|
||||
precise shell appearance: a simple =$= followed by a space after which to put
|
||||
the commands it needs to execute, and nothing else. Due to this, let’s
|
||||
deactivate and redefine some of the functions defining the appearance of fish.
|
||||
#+BEGIN_SRC fish
|
||||
if test "$TERM" = "dumb"
|
||||
function fish_prompt
|
||||
echo "\$ "
|
||||
end
|
||||
function fish_right_prompt; end
|
||||
function fish_greeting; end
|
||||
function fish_title; end
|
||||
end
|
||||
#+END_SRC
|
||||
|
||||
* Regular fish shell appearance
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Regular_fish_shell_appearance-c3e532e1
|
||||
:END:
|
||||
Now, there is only one function I modify when it comes to the appearance of fish
|
||||
when I’m the one using it: the ~fish_greeting~ function. I use it to display the output of [[https://labs.phundrak.com/phundrak/pumo-system-info][a utility I wrote]].
|
||||
#+BEGIN_SRC fish
|
||||
function fish_greeting
|
||||
which pumo-system-info 2&> /dev/null && pumo-system-info
|
||||
end
|
||||
#+END_SRC
|
||||
|
||||
For my fish prompt, I use [[https://starship.rs][starship]], a shell-agnostic prompt. Let’s load it:
|
||||
#+begin_src fish
|
||||
starship init fish | source
|
||||
#+end_src
|
||||
|
||||
* Setting up external tools
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Setting-up-external-tools-2r4b97p0bbj0
|
||||
:END:
|
||||
** Starship configuration
|
||||
:PROPERTIES:
|
||||
:header-args:toml: :tangle ~/.config/starship.toml
|
||||
:CUSTOM_ID: Starship-configuration-lpz4tz410bj0
|
||||
:END:
|
||||
As mentioned above, starship is a shell-agnostic prompt, written in Rust and which can be configured separately from the shell. I decided to configure it here though, since fish is the only shell I use which is compatible with starship.
|
||||
|
||||
First I’ll modify the default format variable, removing the modules I don’t need.
|
||||
#+begin_src toml
|
||||
format = """
|
||||
$username\
|
||||
$hostname\
|
||||
$shlvl\
|
||||
$singularity\
|
||||
$kubernetes\
|
||||
$directory\
|
||||
$vcsh\
|
||||
$git_branch\
|
||||
$git_commit\
|
||||
$git_state\
|
||||
$git_metrics\
|
||||
$git_status\
|
||||
$hg_branch\
|
||||
$docker_context\
|
||||
$package\
|
||||
$cmake\
|
||||
$dart\
|
||||
$deno\
|
||||
$lua\
|
||||
$nodejs\
|
||||
$python\
|
||||
$rlang\
|
||||
$rust\
|
||||
$scala\
|
||||
$zig\
|
||||
$memory_usage\
|
||||
$env_var\
|
||||
$custom\
|
||||
$cmd_duration\
|
||||
$line_break\
|
||||
$jobs\
|
||||
$battery\
|
||||
$time\
|
||||
$status\
|
||||
$shell\
|
||||
$character"""
|
||||
#+end_src
|
||||
|
||||
I want starship to be able to detect Lisp files, be it CommonLisp or EmacsLisp. Unfortunately, it seems nerd-font doesn’t have any symbol for either language, so I’m just using a lambda character.
|
||||
#+begin_src toml
|
||||
[custom.lisp]
|
||||
extensions = ["lisp", "el"]
|
||||
symbol = "λ "
|
||||
style = "bold green"
|
||||
#+end_src
|
||||
|
||||
Finally, let’s disable all modules I don’t need.
|
||||
#+begin_src toml
|
||||
[cobol]
|
||||
disable = true
|
||||
[dotnet]
|
||||
disable = true
|
||||
[elixir]
|
||||
disable = true
|
||||
[elm]
|
||||
disable = true
|
||||
[erlang]
|
||||
disable = true
|
||||
[golang]
|
||||
disable = true
|
||||
[helm]
|
||||
disable = true
|
||||
[java]
|
||||
disable = true
|
||||
[julia]
|
||||
disable = true
|
||||
[kotlin]
|
||||
disable = true
|
||||
[nim]
|
||||
disable = true
|
||||
[ocaml]
|
||||
disable = true
|
||||
[perl]
|
||||
disable = true
|
||||
[php]
|
||||
disable = true
|
||||
[pulumi]
|
||||
disable = true
|
||||
[purescript]
|
||||
disable = true
|
||||
[red]
|
||||
disable = true
|
||||
[ruby]
|
||||
disable = true
|
||||
[swift]
|
||||
disable = true
|
||||
[terraform]
|
||||
disable = true
|
||||
[vlang]
|
||||
disable = true
|
||||
[vagrant]
|
||||
disable = true
|
||||
[nix_shell]
|
||||
disable = true
|
||||
[conda]
|
||||
disable = true
|
||||
[aws]
|
||||
disable = true
|
||||
[gcloud]
|
||||
disable = true
|
||||
[openstack]
|
||||
disable = true
|
||||
[crystal]
|
||||
disable = true
|
||||
#+end_src
|
||||
|
||||
** Loading ~zoxide~
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Setting-up-external-tools-Loading-zoxide-y97b97p0bbj0
|
||||
:END:
|
||||
~zoxide~ is a smarter ~cd~ command, accessible through ~z~. It can be loaded like so:
|
||||
#+begin_src fish
|
||||
zoxide init fish | source
|
||||
#+end_src
|
||||
|
||||
* Abbreviations
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Abbreviations-97537716
|
||||
:END:
|
||||
#+NAME: generate-abbr
|
||||
#+BEGIN_SRC emacs-lisp :var table=[] :exports none :tangle no
|
||||
(replace-regexp-in-string "\\\\vert[{}]*"
|
||||
"|"
|
||||
(mapconcat (lambda (x) (format "abbr %s '%s'" (car x) (cadr x)))
|
||||
table
|
||||
"\n")
|
||||
t t)
|
||||
#+END_SRC
|
||||
|
||||
Abbreviations are a great way to keep correctly track of which commands are run
|
||||
in the shell without polluting the history of the shell with obscure commands.
|
||||
When typing an abbreviation, fish will replace it with replace it with its
|
||||
expanded equivalent. Below are some of the abbreviations I use. Be aware some of
|
||||
them that invoke GUI programs can be invoked through ~devour~ which will make
|
||||
the terminal disappear while the program runs, and once the GUI program exists
|
||||
the terminal window will come back.
|
||||
|
||||
** System monitoring
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Abbreviations-System_monitoring-bd909755
|
||||
:END:
|
||||
Here I have some abbreviations which are quite useful when performing some
|
||||
system monitoring. With =df=, we can get an overview of our filesystem usage,
|
||||
while with =diskspace= we get some more precise information. =meminfo= is a call
|
||||
to =free= with sane defaults, and similar to =meminfo=, we also have
|
||||
=gpumeminfo= so we can get a quick look at the memory-related logs of our X
|
||||
session. I also declared =cpuinfo= an alias of =lscpu= in order to keep
|
||||
consistent with =meminfo=. =pscpu= gives us information on what the CPU is
|
||||
running right now, and =pscpu10= limits that to the top 10 threads. Similarly,
|
||||
=psmem= gives us information on the memory usage of the current threads, and
|
||||
=psmem10= only the ten most important threads in terms of memory usage.
|
||||
#+NAME: mgmt-abbr
|
||||
| abbreviation | command |
|
||||
|--------------+--------------------------------------------|
|
||||
| df | df -H |
|
||||
| diskspace | sudo df -h \vert grep -E "sd\vert{}lv\vert{}Size" |
|
||||
| du | du -ch |
|
||||
| meminfo | free -m -l -t |
|
||||
| gpumeminfo | grep -i --color memory /var/log/Xorg.0.log |
|
||||
| cpuinfo | lscpu |
|
||||
| pscpu | ps auxf \vert sort -nr -k 3 |
|
||||
| pscpu10 | ps auxf \vert sort -nr -k 3 \vert head -10 |
|
||||
| psmem | ps auxf \vert sort -nr -k 4 |
|
||||
| psmem10 | ps auxf \vert sort -nr -k 4 \vert head -10 |
|
||||
|
||||
#+begin_SRC fish
|
||||
<<generate-abbr(table=mgmt-abbr)>>
|
||||
#+END_SRC
|
||||
|
||||
** System management (packages and services)
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Abbreviations-System_management_(packages_and_services)-7249fbb7
|
||||
:END:
|
||||
I added some of these abbreviations due to how often I have to write the whole
|
||||
thing.
|
||||
|
||||
*** Package management
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Abbreviations-System_management_(packages_and_services)-Package_management-efbcdf0f
|
||||
:END:
|
||||
The first command is =remove= which removes a package from my system, as well as
|
||||
its dependencies no longer needed. =p=. =pacman='s or =paru='s. This is why I
|
||||
simply type =purge=. And if I want to simply seach among the =pacman= repos, I
|
||||
can type =search=. Otherwise, if I want to include AUR results, I’ll use =paru=.
|
||||
|
||||
#+NAME: pm-abbr
|
||||
| abbreviation | command |
|
||||
|--------------+------------------|
|
||||
| remove | sudo pacman -Rsc |
|
||||
| purge | paru -Sc |
|
||||
|
||||
#+BEGIN_SRC fish
|
||||
<<generate-abbr(table=pm-abbr)>>
|
||||
#+END_SRC
|
||||
|
||||
*** Service management
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Abbreviations-System_management_(packages_and_services)-Service_management-8c5ae482
|
||||
:END:
|
||||
I don’t have the muscle memory of =systemctl=. So instead, I simply type =c=
|
||||
when I want to do something user service related. And if I want to manipulate
|
||||
system services, I can instead type a simple capital =S=.
|
||||
#+NAME: service-abbr
|
||||
| abbreviation | command |
|
||||
|--------------+------------------|
|
||||
| s | systemctl |
|
||||
| suser | systemctl --user |
|
||||
|
||||
#+BEGIN_SRC fish
|
||||
<<generate-abbr(table=service-abbr)>>
|
||||
#+END_SRC
|
||||
|
||||
** Development
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Abbreviations-Development-d6050ca4
|
||||
:END:
|
||||
A good amount of these commands are development related, especially when it
|
||||
comes to compilation or Docker.
|
||||
|
||||
*** CMake
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Abbreviations-Development-CMake-f2951675
|
||||
:END:
|
||||
I have the following abbreviations so I can quickly run CMake and create a
|
||||
configuration for debug or release profiles.
|
||||
#+NAME: abbr-cmake
|
||||
| abbreviation | command |
|
||||
|--------------+----------------------------------|
|
||||
| cdebug | cmake -DCMAKE_BUILD_TYPE=Debug |
|
||||
| crelease | cmake -DCMAKE_BUILD_TYPE=Release |
|
||||
|
||||
Here is the corresponding fish configuration:
|
||||
#+BEGIN_SRC fish
|
||||
<<generate-abbr(table=abbr-cmake)>>
|
||||
#+END_SRC
|
||||
|
||||
*** Docker
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Abbreviations-Development-Docker-2d0a1288
|
||||
:END:
|
||||
And of course, when it comes to Docker Compose, I don't have time to write the
|
||||
full command, so I use these instead.
|
||||
#+NAME: abbr-docker
|
||||
| abbreviation | command |
|
||||
|--------------+------------------------------|
|
||||
| dc | docker-compose |
|
||||
| dcb | docker-compose build |
|
||||
| dcd | docker-compose down |
|
||||
| dcl | docker-compose logs |
|
||||
| dcp | docker-compose pull |
|
||||
| dcr | docker-compose run --rm |
|
||||
| dcu | docker-compose up |
|
||||
| dcub | docker-compose up --build |
|
||||
| dcud | docker-compose up -d |
|
||||
| dcudb | docker-compose up -d --build |
|
||||
|
||||
Here is the corresponding fish configuration:
|
||||
#+BEGIN_SRC fish
|
||||
<<generate-abbr(table=abbr-docker)>>
|
||||
#+END_SRC
|
||||
|
||||
*** Text editors
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Abbreviations-Development-Text_editors-5a23df47
|
||||
:END:
|
||||
I greatly prefer to use Emacsclient as my main text editor; Emacs has basically
|
||||
all I need. So, it's only normal I have an abbreviation to launch a new instance
|
||||
of it. If launched in the terminal, I’ll usually want Emacs to be displayed in
|
||||
CLI mode and not in GUI mode, otherwise I would invoke it with my WM’s shortcut.
|
||||
In case we want to launch Emacs in GUI mode anyways, ~egui~ is available too.
|
||||
|
||||
#+NAME: abbr-text-ed
|
||||
| abbreviation | command |
|
||||
|--------------+-----------------------|
|
||||
| e | emacsclient -c -nw |
|
||||
| egui | devour emacsclient -c |
|
||||
|
||||
Here is the corresponding fish configuration:
|
||||
#+BEGIN_SRC fish :noweb yes
|
||||
<<generate-abbr(table=abbr-text-ed)>>
|
||||
#+END_SRC
|
||||
|
||||
*** Compilation
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Abbreviations-Development-Compilation-dd066050
|
||||
:END:
|
||||
By default, I set ~clang~, ~clang++~, ~gcc~ and ~g++~ to the latest standard and
|
||||
with the ~-Wall~ flag activated.
|
||||
#+NAME: abbr-comp
|
||||
| abbreviation | command |
|
||||
|--------------+----------------------|
|
||||
| clang | clang -Wall |
|
||||
| clang++ | clang++ -Wall |
|
||||
| g++ | g++ -Wall -std=c++20 |
|
||||
| gcc | gcc -Wall -std=c18 |
|
||||
|
||||
Here is the corresponding fish configuration:
|
||||
#+BEGIN_SRC fish
|
||||
<<generate-abbr(table=abbr-comp)>>
|
||||
#+END_SRC
|
||||
|
||||
*** Git
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Abbreviations-Development-Git-5e5055c1
|
||||
:END:
|
||||
And let's face it: we all at one point just wanted to commit our code without
|
||||
thinking about the message, to just get over with it. Don't worry, I got you
|
||||
covered.
|
||||
#+NAME: abbr-git
|
||||
| abbreviation | command |
|
||||
|--------------+-----------------------------------------------------|
|
||||
| randcommit | git commit -m (curl -s whatthecommit.com/index.txt) |
|
||||
|
||||
Here is the corresponding fish configuration:
|
||||
#+BEGIN_SRC fish
|
||||
<<generate-abbr(table=abbr-git)>>
|
||||
#+END_SRC
|
||||
|
||||
** LaTeX
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Abbreviations-LaTeX-76865eb9
|
||||
:END:
|
||||
Yes, although I use org-mode, I still have some use for LaTeX, especially when
|
||||
it comes to PDF exports of my org files. Hence why I use the LaTeX package
|
||||
manager. It is recommended to use ~tllocalmgr~ instead of ~tlmgr~, but I can
|
||||
never remember the command, and the latter is faster to type, so time for an
|
||||
abbreviation. Same goes for ~texhash~ which must be run as sudo.
|
||||
#+NAME: latex-abbr
|
||||
| abbreviation | command |
|
||||
|--------------+--------------|
|
||||
| tlmgr | tllocalmgr |
|
||||
| texhash | sudo texhash |
|
||||
|
||||
Here is the corresponding fish configuration:
|
||||
#+BEGIN_SRC fish
|
||||
<<generate-abbr(table=latex-abbr)>>
|
||||
#+END_SRC
|
||||
|
||||
** Some security measures
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Abbreviations-Some_security_measures-489cb521
|
||||
:END:
|
||||
Some commands can be quite dangerous when not used properly, which is why I
|
||||
added default flags and options so I can get warnings before things get ugly.
|
||||
The =-i= and =-I= add prompts in case we might not want to do what we asked the
|
||||
shell to do. Notice =lns= which creates symlinks, =rmd= which removes
|
||||
directories, =rmf= which forces deletion, and =rmdf= which forces the delition
|
||||
of a directory. Notice also the =--preserve-root= which will prevent me from
|
||||
accidentally removing the root folder. I added the same option to =chgrp=,
|
||||
=chmod=, and =chown=.
|
||||
#+NAME: sec-abbr
|
||||
| abbreviation | command |
|
||||
|--------------+---------------------------|
|
||||
| cp | cp -i |
|
||||
| rsync | rsync -ruvtEhl --progress |
|
||||
| ln | ln -i |
|
||||
| lns | ln -si |
|
||||
| mv | mv -i |
|
||||
| rm | rm -Iv |
|
||||
| rmd | rm --preserve-root -Irv |
|
||||
| rmdf | rm --preserve-root -Irfv |
|
||||
| rmf | rm --preserve-root -Ifv |
|
||||
| chgrp | chgrp --preserve-root -v |
|
||||
| chmod | chmod --preserve-root -v |
|
||||
| chown | chown --preserve-root -v |
|
||||
|
||||
Here is the corresponding fish configuration:
|
||||
#+BEGIN_SRC fish
|
||||
<<generate-abbr(table=sec-abbr)>>
|
||||
#+END_SRC
|
||||
|
||||
** Typos
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Abbreviations-Typos-370bbb27
|
||||
:END:
|
||||
Let's admit it, we all make typos from time to time in the shell, and some are
|
||||
recurrent enough we make abbreviations or aliases of the correct command. Well,
|
||||
I have some of my abbreviations which were make exactly because of this.
|
||||
Sometimes for some reasons, my brain makes me write ~clean~ instead of ~clear~.
|
||||
So, let's just replace the former by the latter. I'm also very bad at typing
|
||||
~exit~. And sometimes I suck at typing ~htop~.
|
||||
#+NAME: typo-abbr
|
||||
| abbreviation | command |
|
||||
|--------------+---------|
|
||||
| clean | clear |
|
||||
| exi | exit |
|
||||
| exti | exit |
|
||||
| hotp | htop |
|
||||
|
||||
Here is the corresponding fish configuration:
|
||||
#+BEGIN_SRC fish
|
||||
<<generate-abbr(table=typo-abbr)>>
|
||||
#+END_SRC
|
||||
|
||||
** Misc
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Abbreviations-Misc-c2631eb6
|
||||
:END:
|
||||
Finally, some miscellaneous abbreviations that don't really fit into any of the
|
||||
above categories.
|
||||
|
||||
*** Media
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Abbreviations-Misc-Media-e4b85d56
|
||||
:END:
|
||||
Here you will find various commands related to media in general. the first one
|
||||
is a command to play some chillhop from the [[https://www.youtube.com/user/Chillhopdotcom][Chillhop YouTube channel]]'s
|
||||
livestream.
|
||||
#+BEGIN_SRC fish
|
||||
abbr chill 'mpv --force-window=no --no-video "https://www.youtube.com/user/Chillhopdotcom/live" &'
|
||||
#+END_SRC
|
||||
|
||||
When it comes to mpv, I do not want to force it to open a graphical window if
|
||||
for example I want to listen to an audio file. I also do not want any border on
|
||||
that window. So, I declared this abbreviation.
|
||||
#+BEGIN_SRC fish
|
||||
abbr mpv 'mpv --no-border --force-window=no'
|
||||
#+END_SRC
|
||||
|
||||
When I want to download a song from YouTube, I'll just use the command ~flac
|
||||
videoIdentifier~ to get it through ~youtube-dl~.
|
||||
#+BEGIN_SRC fish
|
||||
abbr flac 'youtube-dl -x --audio-format flac --audio-quality 0 -o "~/Music/%(uploader)s/%(title)s.%(ext)s"'
|
||||
#+END_SRC
|
||||
|
||||
Some sane default options for [[https://github.com/nsxiv/nsxiv][~nsxiv~]]. This includes playing GIFs and
|
||||
not displaying the filename below. Nsxiv will also open in fullscreen
|
||||
and will fit the displayed image to the frame.
|
||||
#+BEGIN_SRC fish
|
||||
abbr nsxiv 'nsxiv -abfs f'
|
||||
abbr sxiv 'nsxiv -abfs f' # old habits die hard
|
||||
#+END_SRC
|
||||
|
||||
Finally, let's declare the following abbreviation that will launch an mpv
|
||||
instance displaying my webcam:
|
||||
#+BEGIN_SRC fish
|
||||
abbr webcam 'devour mpv --demuxer-lavf-format=video4linux2 --demuxer-lavf-o-set=input_format=mjpeg av://v4l2:/dev/video0'
|
||||
#+END_SRC
|
||||
|
||||
*** Sudo
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Abbreviations-Misc-Sudo-aef0214a
|
||||
:END:
|
||||
First, I make it so that ~sudo~ comes with the ~-A~ switch in order to call my
|
||||
custom graphical script for getting my password (see [[file:bin.org::#Askpass-d0d7a8c0][askpass]]). I also made it so
|
||||
~please~ is an equivalent to ~sudo -A~ as a joke.
|
||||
#+BEGIN_SRC fish
|
||||
abbr please 'sudo -A'
|
||||
#+END_SRC
|
||||
|
||||
*** History
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Abbreviations-Misc-History-a2124b23
|
||||
:END:
|
||||
I find it more intuitive and faster to just write ~hist~ instead of ~history~,
|
||||
so let's declare that.
|
||||
#+BEGIN_SRC fish
|
||||
abbr hist history
|
||||
#+END_SRC
|
||||
|
||||
*** Compression
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Abbreviations-Misc-Compression-4fd4ffef
|
||||
:END:
|
||||
It seems it's just like many other people, but I cannot for the life of me
|
||||
remember the syntax of ~tar~. So, I made the following abbreviations, and one
|
||||
day hopefully, after seeing the abbreviations' expansion over and over I'll
|
||||
remember the command like I did for the abbreviation of ~remove~ (see [[#Abbreviations-System_management_(packages_and_services)-Package_management-efbcdf0f][Package
|
||||
management]]).
|
||||
#+NAME: tar-abbr
|
||||
| abbreviation | command |
|
||||
|--------------+-----------|
|
||||
| compress | tar -czf |
|
||||
| untar | tar -xvzf |
|
||||
|
||||
#+BEGIN_SRC fish
|
||||
<<generate-abbr(table=tar-abbr)>>
|
||||
#+END_SRC
|
||||
|
||||
*** exa
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Abbreviations-Misc-exa-e1b528b9
|
||||
:END:
|
||||
#+NAME: exa-abbr
|
||||
| abbreviation | command |
|
||||
|--------------+--------------------------------------------|
|
||||
| exa | exa -halg@ --group-directories-first --git |
|
||||
| lsl | exa -halg@ --group-directories-first --git |
|
||||
|
||||
#+BEGIN_SRC fish
|
||||
<<generate-abbr(table=exa-abbr)>>
|
||||
#+END_SRC
|
||||
|
||||
*** Network Management
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Abbreviations-Misc-Network_Management-0b7fc91d
|
||||
:END:
|
||||
First, we have just =nmcli= with sane default options, that is a pretty output
|
||||
with colors.
|
||||
#+BEGIN_SRC fish
|
||||
abbr nmcli 'nmcli -p -c auto'
|
||||
#+END_SRC
|
||||
|
||||
*** NordVPN
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Abbreviations-Misc-NordVPN-09438638
|
||||
:END:
|
||||
Next, we have some NordVPN-related shortcuts. The first one is a simple
|
||||
abbreviation to =nordvpn=. The second one is a shortcut to connect to a server,
|
||||
and to disconnect from the current server. I also have a couple of shortcuts to
|
||||
quickly connect to some preselected countries, mainly France, Germany, Japan and
|
||||
the US.
|
||||
#+NAME: nordvpn-abbr
|
||||
| abbreviation | command |
|
||||
|--------------+-------------------------|
|
||||
| n | nordvpn |
|
||||
| nc | nordvpn c |
|
||||
| nd | nordvpn d |
|
||||
| ncf | nordvpn c France |
|
||||
| ncg | nordvpn c Germany |
|
||||
| ncj | nordvpn c Japan |
|
||||
| ncu | nordvpn c United_States |
|
||||
|
||||
#+BEGIN_SRC fish
|
||||
<<generate-abbr(table=nordvpn-abbr)>>
|
||||
#+END_SRC
|
||||
|
||||
*** Wget
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Abbreviations-Misc-Wget-27f4bebf
|
||||
:END:
|
||||
By default, continue a download that was interupted.
|
||||
#+BEGIN_SRC fish
|
||||
abbr wget 'wget --hsts-file="$XDG_DATA_HOME/wget-hsts" -c'
|
||||
#+END_SRC
|
||||
|
||||
* Last thing before we’re done
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Last-thing-before-we-re-done-670f1461
|
||||
:END:
|
||||
For some reason, Fish began searching for packages when I enter a command name
|
||||
wrong. For instance, if I type ~vim~, I get something like this:
|
||||
#+BEGIN_SRC text :tangle no
|
||||
$ vim
|
||||
fish: Unknown command: vim
|
||||
usr/bin/vim is owned by extra/gvim 8.2.2653-1
|
||||
usr/bin/vim is owned by extra/vim 8.2.2653-1
|
||||
#+END_SRC
|
||||
|
||||
But I don’t want that, it slows down my shell. So, in order to fix that, we need
|
||||
the following lines:
|
||||
#+BEGIN_SRC fish
|
||||
function fish_command_not_found
|
||||
__fish_default_command_not_found_handler $argv
|
||||
end
|
||||
#+END_SRC
|
||||
|
||||
Tadah! No more package suggestions from fish!
|
||||
@@ -1,52 +0,0 @@
|
||||
# -*- mode: org -*-
|
||||
#+AUTHOR: Lucien Cartier-Tilet
|
||||
#+EMAIL: lucien@phundrak.com
|
||||
#+CREATOR: Lucien Cartier-Tilet
|
||||
#+LANGUAGE: en
|
||||
#+startup: overview noalign noinlineimages hideblocks
|
||||
|
||||
# ### ORG OPTIONS ##############################################################
|
||||
|
||||
#+OPTIONS: H:4 broken_links:mark email:t ^:{}
|
||||
#+KEYWORDS: dotfiles, linux, emacs, configuration, phundrak, drakpa
|
||||
|
||||
# ### LaTeX #############################################################
|
||||
|
||||
#+latex_class: article
|
||||
#+latex_class_options: [a4paper]
|
||||
#+latex_header: \input{headers.tex}
|
||||
|
||||
# ### HTML #############################################################
|
||||
|
||||
#+HTML_DOCTYPE: html5
|
||||
#+HTML_HEAD: <meta property="og:image" content="https://cdn.phundrak.com/img/rich_preview.png" />
|
||||
#+HTML_HEAD: <meta name="twitter:card" content="summary" />
|
||||
#+HTML_HEAD: <meta name="twitter:site" content="@phundrak" />
|
||||
#+HTML_HEAD: <meta name="twitter:creator" content="@phundrak" />
|
||||
#+HTML_HEAD: <link rel="stylesheet" href="https://config.phundrak.com//style/main.css"/>
|
||||
#+HTML_HEAD: <link rel="shortcut icon" href="https://cdn.phundrak.com/img/mahakala-128x128.png" type="img/png" media="screen" />
|
||||
#+HTML_HEAD: <link rel="shortcut icon" href="https://cdn.phundrak.com/img/favicon.ico" type="image/x-icon" media="screen" />
|
||||
#+HTML_HEAD: <script defer src="https://config.phundrak.com/dart/main.dart.js"></script>
|
||||
|
||||
#+html_head: <!-- Matomo -->
|
||||
#+html_head: <script>
|
||||
#+html_head: var _paq = window._paq = window._paq || [];
|
||||
#+html_head: /* tracker methods like "setCustomDimension" should be called before "trackPageView" */
|
||||
#+html_head: _paq.push(["setDocumentTitle", document.domain + "/" + document.title]);
|
||||
#+html_head: _paq.push(["setCookieDomain", "*.conlang.phundrak.com"]);
|
||||
#+html_head: _paq.push(["setDomains", ["*.conlang.phundrak.com","*.config.phundrak.com","*.langue.phundrak.com","*.phundrak.com"]]);
|
||||
#+html_head: _paq.push(["enableCrossDomainLinking"]);
|
||||
#+html_head: _paq.push(['trackPageView']);
|
||||
#+html_head: _paq.push(['enableLinkTracking']);
|
||||
#+html_head: (function() {
|
||||
#+html_head: var u="//matomo.phundrak.com/";
|
||||
#+html_head: _paq.push(['setTrackerUrl', u+'matomo.php']);
|
||||
#+html_head: _paq.push(['setSiteId', '5']);
|
||||
#+html_head: var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
||||
#+html_head: g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
|
||||
#+html_head: })();
|
||||
#+html_head: </script>
|
||||
#+html_head: <!-- End Matomo Code -->
|
||||
|
||||
# ### MACROS ############################################################
|
||||
#+MACRO: newline @@latex:\hspace{0pt}\\@@ @@html:<br>@@
|
||||
@@ -1,15 +0,0 @@
|
||||
% LaTeX headers
|
||||
\usepackage[total={17cm,24cm}]{geometry}
|
||||
\usepackage{xltxtra}
|
||||
\setmainfont{Charis SIL}
|
||||
\usepackage{indentfirst}
|
||||
\usepackage{enumitem}
|
||||
\usepackage{hyperref}
|
||||
\usepackage{xcolor}
|
||||
\hypersetup{colorlinks=true,linkbordercolor=red,linkcolor=blue,pdfborderstyle={/S/U/W 1}}
|
||||
\usepackage{newunicodechar}
|
||||
\newunicodechar{’}{'}
|
||||
\newunicodechar{…}{\ldots}
|
||||
\newunicodechar{ }{~}
|
||||
\newunicodechar{ }{~}
|
||||
\usepackage{glossaries}
|
||||
|
Before Width: | Height: | Size: 323 KiB |
|
Before Width: | Height: | Size: 4.3 MiB |
|
Before Width: | Height: | Size: 114 KiB |
|
Before Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 415 KiB |
|
Before Width: | Height: | Size: 82 KiB |
|
Before Width: | Height: | Size: 395 KiB |
@@ -1,230 +0,0 @@
|
||||
# -*- org-confirm-babel-evaluate: nil -*-
|
||||
#+TITLE: Phundrak’s dotfiles
|
||||
#+setupfile: headers
|
||||
#+OPTIONS: auto-id:t
|
||||
#+HTML_HEAD_EXTRA: <meta name="description" content="Phundrak's dotfiles" />
|
||||
#+HTML_HEAD_EXTRA: <meta property="og:title" content="Phundrak's dotfiles" />
|
||||
#+HTML_HEAD_EXTRA: <meta property="og:description" content="Description of the dotfiles of Phundrak" />
|
||||
|
||||
* Presentation
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Presentation-981f2f04
|
||||
:END:
|
||||
This is my collection of dotfiles for my daily GNU/Linux environment, tweaked to
|
||||
my liking. If you wish to get the same setup as mine, follow the instructions
|
||||
below.
|
||||
|
||||
For starters, here is the link to all the pages on my website that you might
|
||||
find interesting. I’ll describe them in more details below.
|
||||
#+include: sitemap.org
|
||||
|
||||
As you can see, I personally use [[https://fishshell.com/][fish]] as my shell of choice, and [[https://www.gnu.org/software/emacs/][Emacs]]
|
||||
29.0 as my main text editor.
|
||||
|
||||
When it comes to my graphical UI, I do not have any desktop
|
||||
environment. Instead, I have a tiling window managers, [[https://stumpwm.github.io/][StumpWM]]. I used
|
||||
to use [[https://github.com/Airblader/i3][i3-gaps]], an [[https://i3wm.org/][i3]] fork by [[https://github.com/Airblader/i3][Airblader]], with which I used [[https://polybar.github.io/][Polybar]] as
|
||||
well as [[https://github.com/dylanaraps/pywal][pywal]] to define my system’s color scheme, and then I used
|
||||
[[file:Deprecated/awesome.org][Awesome]]. But now, as said above, I prefer to use StumpWM. It has a
|
||||
built-in status bar (called a mode-line, like in Emacs) which I use,
|
||||
and I settled on the dark [[https://www.nordtheme.com/][Nord theme]] for pretty much everything I use.
|
||||
|
||||
Finally, you can find my configuration for my ErgodoxEZ keyboard [[https://configure.ergodox-ez.com/ergodox-ez/layouts/5WrVw/latest/0][here]]. It is
|
||||
optimized for usage with the Bépo layout set as a software layout. It has also a
|
||||
layer set to emulate a Qwerty layout when using the Bépo software layout due to
|
||||
some games that do not offer to remap keys (I’m looking at you, Among Us).
|
||||
|
||||
* Features
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Features-5ab2a2c0
|
||||
:END:
|
||||
- Emacs configuration perfectly tailored for my own use
|
||||
- Beautiful and comfy StumpWM configuration
|
||||
- And enough information below to get basically the same distro
|
||||
install as I have on computer.
|
||||
|
||||
Most of the org files you will find in this repos are the actual
|
||||
source code of much of my config files. For instance, the bootstrap
|
||||
found in [[file:bootstrap.org][bootstrap.org]] exports almost all of its code snippets to
|
||||
~$HOME/.config/yadm/bootstrap~ thanks to =M-x org-babel-tangle= from
|
||||
within Emacs. Below I will also present and comment some of my short
|
||||
config files which do not deserve to have a full org file dedicated to
|
||||
them.
|
||||
|
||||
** Tiling Window Managers
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Features-Tiling_Window_Managers-da221e37
|
||||
:END:
|
||||
*** StumpWM
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Features-Tiling-Window-Managers-StumpWM-u9kdbd6137j0
|
||||
:END:
|
||||
StumpWM is the tiling window manager I use at the moment. It is
|
||||
written and configured in Common Lisp, which I enjoy a lot since it
|
||||
has a syntax quite close to Elisp, the Lisp dialect used in Emacs. I’m
|
||||
currently still in the process of figuring out my config, so please
|
||||
consider it as a kind of work in progress. You can find the
|
||||
configuration [[file:stumpwm.org][here]].
|
||||
|
||||
*** AwesomeWM (Deprecated)
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Features-Tiling_Window_Managers-AwesomeWM-2eac61a9
|
||||
:END:
|
||||
AwesomeWM is the TWM I used for quite some time after switching from
|
||||
i3. This is an automatic tiling window manager written and configured
|
||||
mostly in Lua, with its core written in C (this is originally a dwm
|
||||
fork). My configuration for it is documented in detail in its
|
||||
corresponding document, which you can find [[file:Deprecated/awesome.org][here]].
|
||||
|
||||
*** i3 configuration (Deprecated)
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Features-Tiling_Window_Managers-i3_configuration-9c92e43c
|
||||
:END:
|
||||
The i3 configuration is detailed in its corresponding README which you
|
||||
can find [[file:Deprecated/i3.org][here]]. Be aware I do not use i3 anymore, and I will not update
|
||||
it until I may someday use it again. This was deprecated on August
|
||||
22nd, 2020.
|
||||
|
||||
**** Polybar config (Deprecated)
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Features-Polybar_config_(Deprecated)-c8f95774
|
||||
:END:
|
||||
My annotated polybar config can be found [[file:Deprecated/polybar.org][here]], if you wish to use it.
|
||||
Be aware I do not use polybar anymore, and I will not update it until
|
||||
I may someday use it again. This was deprecated on August 22nd, 2020.
|
||||
|
||||
** Text and source code editing
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Features-Text_and_source_code_editing-63cc66d5
|
||||
:END:
|
||||
*** Emacs configuration
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Features-Text_and_source_code_editing-Emacs_configuration-ef937102
|
||||
:END:
|
||||
Emacs is my main text editor, which I use for almost everything.
|
||||
Because, you know…
|
||||
#+begin_quote
|
||||
Emacs is a great operating system, it just lacks a good text editor.
|
||||
#+end_quote
|
||||
|
||||
My current configuration is a vanilla config, meaning I do not rely on
|
||||
another configuration or framework such as Spacemacs or DoomEmacs to
|
||||
configure Emacs. You can find its configuration [[file:emacs.org][here]].
|
||||
|
||||
I used to use a Spacemacs-based configuration, however I deprecated it
|
||||
on October 20th 2021. You can find it [[file:Deprecated/spacemacs.org][here]].
|
||||
|
||||
*** Nano (deprecated)
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Features-Text_and_source_code_editing-Nano-a9d4839f
|
||||
:END:
|
||||
Although it is a very simple piece of software, nano does offer some
|
||||
customization. Mine can be found in my [[file:Deprecated/nano.org][nano.org]] file. Be aware I do
|
||||
not use nano anymore, and I will not update it until I may someday use
|
||||
it again. This was deprecated on August 28th, 2020.
|
||||
|
||||
*** Rustfmt
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Features-Text_and_source_code_editing-Rustfmt-2c4ac0b3
|
||||
:END:
|
||||
You can find my Rustfmt configuration [[file:rustfmt.org][here]].
|
||||
|
||||
** Custom scripts in =PATH=
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Features-Custom_scripts_in_=PATH=-043e8c8e
|
||||
:END:
|
||||
I have written some scripts that help me daily accomplish some simple
|
||||
tasks, like mounting and unmounting a drive or Android device, an
|
||||
emoji picker, a utility to set up my Wacom tablet, and so on. You can
|
||||
find them stored in my [[file:bin.org][bin.org]] file along with their detailed
|
||||
explanation in the README placed in the same folder —which is actually
|
||||
their source code once the org-mode file gets tangled.
|
||||
|
||||
** Terminal configuration
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Features-Terminal-configuration-9662b145
|
||||
:END:
|
||||
*** Fish configuration with useful abbreviations
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Features-Fish_configuration_with_useful_abbreviations-c71ffba0
|
||||
:END:
|
||||
You can also find in my Fish shell configuration in my [[file:fish.org][fish.org]] file,
|
||||
which contains my usual abbreviations.
|
||||
|
||||
*** Tmux configuration
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Features-Tmux_configuration-ce76e030
|
||||
:END:
|
||||
You can find my tmux configuration in [[file:tmux.org][tmux.org]]. It depends on the submodule
|
||||
[[https://github.com/gpakosz/.tmux.git][.tmux]] by [[https://pempek.net/][Gregory Pakosz]].
|
||||
|
||||
** And some minor configuration files
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Features-And_some_minor_configuration_files-d5cec319
|
||||
:END:
|
||||
*** Global gitignore
|
||||
:PROPERTIES:
|
||||
:HEADER-ARGS: :mkdirp yes :tangle ~/.gitignore_global
|
||||
:CUSTOM_ID: Features-And_some_minor_configuration_files-Global_gitignore-42467108
|
||||
:END:
|
||||
Sometimes, there are some lines that always reappear in gitignores.
|
||||
So, instead of always adding them, let git now that some elements are
|
||||
to be ignored by default, hence the ~$HOME/.gitignore_global~ file.
|
||||
First, we don’t want nano’s backup files.
|
||||
#+BEGIN_SRC fundamental
|
||||
,*~
|
||||
#+END_SRC
|
||||
|
||||
And object files and output binaries generated by =gcc= and the likes aren’t
|
||||
welcome either.
|
||||
#+BEGIN_SRC fundamental
|
||||
,*.out
|
||||
,*.o
|
||||
#+END_SRC
|
||||
|
||||
*** Paru
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Features-And-some-minor-configuration-files-Paru-1f3ef49e
|
||||
:END:
|
||||
~paru~ is an AUR helper for Arch Linux which aims to be a replacement for ~yay~.
|
||||
A couple of the options you will see below aim at restoring the behavior of
|
||||
~yay~ in ~paru~. I also activated the sudo loop so I don’t have to enter my
|
||||
password if one package takes too much time to compile and/or compress. I know
|
||||
it can be a security issue if someone ever get access to my computer while paru
|
||||
is running, but if it ever happens it will be already concerning enough they
|
||||
managed to. I also make use of [[file:bin.org::#Emacs-stuff-Dired-2eeca9da][my custom script dired]] so I can use Emacs’ Dired
|
||||
as the file manager for ~paru~.
|
||||
#+BEGIN_SRC conf :tangle ~/.config/paru/paru.conf :mkdirp yes
|
||||
[options]
|
||||
BottomUp
|
||||
Devel
|
||||
DevelSuffixes = -git -cvs -svn -bzr -darcs -always
|
||||
NewsOnUpgrade
|
||||
PgpFetch
|
||||
Provides
|
||||
RemoveMake
|
||||
SudoLoop
|
||||
UpgradeMenu
|
||||
|
||||
[bin]
|
||||
FileManager = dired
|
||||
#+END_SRC
|
||||
|
||||
* Installation
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Installation-9ec2ae86
|
||||
:END:
|
||||
For an installation walkthrough of my Arch Linux installation, check
|
||||
out my [[file:bootstrap.org][bootstrap]] file where I walk you through the first manual steps
|
||||
and through the bootstrap you can execute to automatically take care
|
||||
of a lot of elements.
|
||||
|
||||
* License
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: License-48911096
|
||||
:END:
|
||||
All of my dotfiles (and my dotfiles only) are available under the GNU
|
||||
GPLv3 License. Please consult [[https://labs.phundrak.com/phundrak/dotfiles/src/branch/master/LICENSE.md][the license file]] for more information.
|
||||
In short: you are free to access, edit and redistribute all of my
|
||||
dotfiles under the same license and as allowed by the license, and if
|
||||
you fuck up something, it’s your own responsibility.
|
||||