mirror of
https://github.com/mintycube/dotfiles.git
synced 2024-10-22 14:05:41 +02:00
Use slock instead of i3lock-color
This commit is contained in:
parent
d990a93487
commit
49aa67c833
@ -1,15 +1,15 @@
|
|||||||
return {
|
return {
|
||||||
-- great_slash = {
|
great_slash = {
|
||||||
-- [[⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⣀⣀⡀⠀⠀]],
|
[[⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⣀⣀⡀⠀⠀]],
|
||||||
-- [[⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠠⣀⣠⣶⣶⣶⣿⣿⣿⣟⠟⠉⠁ ⠉⠀]],
|
[[⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠠⣀⣠⣶⣶⣶⣿⣿⣿⣟⠟⠉⠁ ⠉⠀]],
|
||||||
-- [[⠀⠀⠀⠀⠀⠀⠀⢀⣀⣤⣵⣶⣿⣿⣿⡿⣟⢿⡝⠙⠀⠤⠤⣤⣤⡶⠂⠀]],
|
[[⠀⠀⠀⠀⠀⠀⠀⢀⣀⣤⣵⣶⣿⣿⣿⡿⣟⢿⡝⠙⠀⠤⠤⣤⣤⡶⠂⠀]],
|
||||||
-- [[⠀⠀⠀⠀⢀⠴⣪⣾⣿⣿⣿⣿⣿⢿⡿⠃⢿⢸⣧⡍⠭⣭⣿⡿⠋⠀⠀⠀]],
|
[[⠀⠀⠀⠀⢀⠴⣪⣾⣿⣿⣿⣿⣿⢿⡿⠃⢿⢸⣧⡍⠭⣭⣿⡿⠋⠀⠀⠀]],
|
||||||
-- [[⠀⠀⠀⢀⣵⣿⣿⣿⣿⣿⢯⠟⡵⠋ ⢠⢾⣿⣿⣿⡤⣼⢏⣠⣀⠀⠀⠀]],
|
[[⠀⠀⠀⢀⣵⣿⣿⣿⣿⣿⢯⠟⡵⠋ ⢠⢾⣿⣿⣿⡤⣼⢏⣠⣀⠀⠀⠀]],
|
||||||
-- [[⠀⢠⣰⣻⣿⣿⣿⣾⣿⣧⢡⣘⠁⠀⠀⠘⣄⣻⣿⣿⣷⣿⣿⡿⠍⠁⠀⠀]],
|
[[⠀⢠⣰⣻⣿⣿⣿⣾⣿⣧⢡⣘⠁⠀⠀⠘⣄⣻⣿⣿⣷⣿⣿⡿⠍⠁⠀⠀]],
|
||||||
-- [[⠀⡇⡿⣿⣿⣿⡿⣿⡻⣿⣜⢄⣶⣤⣀⠀⠀⠀⠈⠛⢻⣟⠫⠉⠀⠀⠀⠀]],
|
[[⠀⡇⡿⣿⣿⣿⡿⣿⡻⣿⣜⢄⣶⣤⣀⠀⠀⠀⠈⠛⢻⣟⠫⠉⠀⠀⠀⠀]],
|
||||||
-- [[⠀⠣⡻⣌⡻⠿⣿⣮⣽⣿⣶⣾⣿⣳⠶⠖⠬⠍⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀]],
|
[[⠀⠣⡻⣌⡻⠿⣿⣮⣽⣿⣶⣾⣿⣳⠶⠖⠬⠍⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀]],
|
||||||
-- [[⠀⠀⠈⠀⠉⠉⠙⠛⠛⠒⠓⠒⠀⠀⠀⠒⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]],
|
[[⠀⠀⠈⠀⠉⠉⠙⠛⠛⠒⠓⠒⠀⠀⠀⠒⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]],
|
||||||
-- },
|
},
|
||||||
-- mothwing = {
|
-- mothwing = {
|
||||||
-- [[⠀⠀⠀⠀⢠⣶⡦⠀⣠⣤⣤⣤⣀⠀⠀⠀⠀]],
|
-- [[⠀⠀⠀⠀⢠⣶⡦⠀⣠⣤⣤⣤⣀⠀⠀⠀⠀]],
|
||||||
-- [[⠀⠀⠀⠀⢸⣿⣧⣾⣿⣣⠄⣹⣿⠟⢆⠀⠀]],
|
-- [[⠀⠀⠀⠀⢸⣿⣧⣾⣿⣣⠄⣹⣿⠟⢆⠀⠀]],
|
||||||
@ -23,33 +23,33 @@ return {
|
|||||||
-- [[⠘⠀⡢⠁⠀⠀⠀⠋⠋⠀⠀⢰⡘⠰⠇⠀⠀]],
|
-- [[⠘⠀⡢⠁⠀⠀⠀⠋⠋⠀⠀⢰⡘⠰⠇⠀⠀]],
|
||||||
-- [[ ⠸⠁⠀⠀⠀⠀]],
|
-- [[ ⠸⠁⠀⠀⠀⠀]],
|
||||||
-- },
|
-- },
|
||||||
-- radiance = {
|
radiance = {
|
||||||
-- [[⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠀⡇⠀⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]],
|
[[⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠀⡇⠀⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]],
|
||||||
-- [[⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢇⠀⠃⢀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]],
|
[[⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢇⠀⠃⢀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]],
|
||||||
-- [[⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⠷⣷⢷⣴⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]],
|
[[⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⠷⣷⢷⣴⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]],
|
||||||
-- [[⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣧⣅⣂⣧⣾⣷⣇⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]],
|
[[⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣧⣅⣂⣧⣾⣷⣇⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]],
|
||||||
-- [[⠀⠀⠀⠀⢀⠀⠀⠀⢀⢠⢐⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡷⠑⢆⣠⠀⠀⠀⠀⠀⠀⠀⠀]],
|
[[⠀⠀⠀⠀⢀⠀⠀⠀⢀⢠⢐⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡷⠑⢆⣠⠀⠀⠀⠀⠀⠀⠀⠀]],
|
||||||
-- [[⠀⠀⠢⢦⣀⣴⣾⣿⣭⣶⠵⠩⡿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡛⣘⠿⣿⣷⠶⠿⠦⠴⠠⡀⠀]],
|
[[⠀⠀⠢⢦⣀⣴⣾⣿⣭⣶⠵⠩⡿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡛⣘⠿⣿⣷⠶⠿⠦⠴⠠⡀⠀]],
|
||||||
-- [[⠀⠀⢀⣀⣘⣩⣙⣫⣭⣶⡿⣫⣪⣭⢛⠿⣿⣿⡿⠋⣩⣝⢶⣝⡿⣶⣭⣓⡦⢍⠂⠄⠀⠀]],
|
[[⠀⠀⢀⣀⣘⣩⣙⣫⣭⣶⡿⣫⣪⣭⢛⠿⣿⣿⡿⠋⣩⣝⢶⣝⡿⣶⣭⣓⡦⢍⠂⠄⠀⠀]],
|
||||||
-- [[⠀⠀⠀⠐⠋⠩⢭⣉⣩⣵⢞⣵⡿⠁⠊⢀⣻⣿⡁⠉⡪⡻⣷⣝⢿⣶⡝⠭⡙⠓⠤⠀⠀⠀]],
|
[[⠀⠀⠀⠐⠋⠩⢭⣉⣩⣵⢞⣵⡿⠁⠊⢀⣻⣿⡁⠉⡪⡻⣷⣝⢿⣶⡝⠭⡙⠓⠤⠀⠀⠀]],
|
||||||
-- [[⠀⠀⠀⠀⠈⠉⠉⢉⢉⠠⠟⠉⠂⠀⠀⠠⣭⢩⡤⠀⠁⠰⠈⠙⠷⡈⠙⢆⠀⠆⠀⠀⠀⠀]],
|
[[⠀⠀⠀⠀⠈⠉⠉⢉⢉⠠⠟⠉⠂⠀⠀⠠⣭⢩⡤⠀⠁⠰⠈⠙⠷⡈⠙⢆⠀⠆⠀⠀⠀⠀]],
|
||||||
-- [[⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠟⠸⢓⠀⠀⠀⠀⠀⠀⠑⠀⠀⠀⠀⠀⠀⠀⠀]],
|
[[⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠟⠸⢓⠀⠀⠀⠀⠀⠀⠑⠀⠀⠀⠀⠀⠀⠀⠀]],
|
||||||
-- [[⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⢠⣸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]],
|
[[⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⢠⣸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]],
|
||||||
-- [[⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣾⠸⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]],
|
[[⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣾⠸⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]],
|
||||||
-- [[⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠛⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]],
|
[[⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠛⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]],
|
||||||
-- [[⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]],
|
[[⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]],
|
||||||
-- [[⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]],
|
[[⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]],
|
||||||
-- },
|
},
|
||||||
-- suckless = {
|
suckless = {
|
||||||
-- [[ ]],
|
[[ ]],
|
||||||
-- [[ ]],
|
[[ ]],
|
||||||
-- [[ ]],
|
[[ ]],
|
||||||
-- [[ ]],
|
[[ ]],
|
||||||
-- [[ ▀ ]],
|
[[ ▀ ]],
|
||||||
-- [[█▀█▄█▀█▀█▀█]],
|
[[█▀█▄█▀█▀█▀█]],
|
||||||
-- [[ ]],
|
[[ ]],
|
||||||
-- [[ ]],
|
[[ ]],
|
||||||
-- },
|
},
|
||||||
-- venom = {
|
-- venom = {
|
||||||
-- [[⠀⠀⢰⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡄⠀]],
|
-- [[⠀⠀⢰⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡄⠀]],
|
||||||
-- [[⠀⠀⣾⣧⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣼⡇⠀]],
|
-- [[⠀⠀⣾⣧⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣼⡇⠀]],
|
||||||
@ -278,20 +278,20 @@ return {
|
|||||||
-- [[ ██████ █████████████████████ ████ █████ █████ ████ ██████ ]],
|
-- [[ ██████ █████████████████████ ████ █████ █████ ████ ██████ ]],
|
||||||
-- [[ ]],
|
-- [[ ]],
|
||||||
-- },
|
-- },
|
||||||
-- galaxy = {
|
galaxy = {
|
||||||
-- [[ ⠀⠀⢀⣀⣀⡀⠒⠒⠦⣄⡀⠀⠀⠀⠀⠀⠀⠀]],
|
[[ ⠀⠀⢀⣀⣀⡀⠒⠒⠦⣄⡀⠀⠀⠀⠀⠀⠀⠀]],
|
||||||
-- [[⠀⠀⠀⠀⠀⢀⣤⣶⡾⠿⠿⠿⠿⣿⣿⣶⣦⣄⠙⠷⣤⡀⠀⠀⠀⠀]],
|
[[⠀⠀⠀⠀⠀⢀⣤⣶⡾⠿⠿⠿⠿⣿⣿⣶⣦⣄⠙⠷⣤⡀⠀⠀⠀⠀]],
|
||||||
-- [[⠀⠀⠀⣠⡾⠛⠉⠀⠀⠀⠀⠀⠀⠀⠈⠙⠻⣿⣷⣄⠘⢿⡄⠀⠀⠀]],
|
[[⠀⠀⠀⣠⡾⠛⠉⠀⠀⠀⠀⠀⠀⠀⠈⠙⠻⣿⣷⣄⠘⢿⡄⠀⠀⠀]],
|
||||||
-- [[⠀⢀⡾⠋⠀⠀⠀⠀⠀⠀⠀⠀⠐⠂⠠⢄⡀⠈⢿⣿⣧⠈⢿⡄⠀⠀]],
|
[[⠀⢀⡾⠋⠀⠀⠀⠀⠀⠀⠀⠀⠐⠂⠠⢄⡀⠈⢿⣿⣧⠈⢿⡄⠀⠀]],
|
||||||
-- [[⢀⠏⠀⠀⠀⢀⠄⣀⣴⣾⠿⠛⠛⠛⠷⣦⡙⢦⠀⢻⣿⡆⠘⡇⠀⠀]],
|
[[⢀⠏⠀⠀⠀⢀⠄⣀⣴⣾⠿⠛⠛⠛⠷⣦⡙⢦⠀⢻⣿⡆⠘⡇⠀⠀]],
|
||||||
-- [[⠀⠀⠀⠀⡐⢁⣴⡿⠋⢀⠠⣠⠤⠒⠲⡜⣧⢸⠄⢸⣿⡇⠀⡇⠀⠀]],
|
[[⠀⠀⠀⠀⡐⢁⣴⡿⠋⢀⠠⣠⠤⠒⠲⡜⣧⢸⠄⢸⣿⡇⠀⡇⠀⠀]],
|
||||||
-- [[⠀⠀⠀⡼⠀⣾⡿⠁⣠⢃⡞⢁⢔⣆⠔⣰⠏⡼⠀⣸⣿⠃⢸⠃⠀⠀]],
|
[[⠀⠀⠀⡼⠀⣾⡿⠁⣠⢃⡞⢁⢔⣆⠔⣰⠏⡼⠀⣸⣿⠃⢸⠃⠀⠀]],
|
||||||
-- [[⠀⠀⢰⡇⢸⣿⡇⠀⡇⢸⡇⣇⣀⣠⠔⠫⠊⠀⣰⣿⠏⡠⠃⠀⠀⢀]],
|
[[⠀⠀⢰⡇⢸⣿⡇⠀⡇⢸⡇⣇⣀⣠⠔⠫⠊⠀⣰⣿⠏⡠⠃⠀⠀⢀]],
|
||||||
-- [[⠀⠀⢸⡇⠸⣿⣷⠀⢳⡈⢿⣦⣀⣀⣀⣠⣴⣾⠟⠁⠀⠀⠀⠀⢀⡎]],
|
[[⠀⠀⢸⡇⠸⣿⣷⠀⢳⡈⢿⣦⣀⣀⣀⣠⣴⣾⠟⠁⠀⠀⠀⠀⢀⡎]],
|
||||||
-- [[⠀⠀⠘⣷⠀⢻⣿⣧⠀⠙⠢⠌⢉⣛⠛⠋⠉⠀⠀⠀⠀⠀⠀⣠⠎⠀]],
|
[[⠀⠀⠘⣷⠀⢻⣿⣧⠀⠙⠢⠌⢉⣛⠛⠋⠉⠀⠀⠀⠀⠀⠀⣠⠎⠀]],
|
||||||
-- [[⠀⠀⠀⠹⣧⡀⠻⣿⣷⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⡾⠃⠀⠀]],
|
[[⠀⠀⠀⠹⣧⡀⠻⣿⣷⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⡾⠃⠀⠀]],
|
||||||
-- [[⠀⠀⠀⠀⠈⠻⣤⡈⠻⢿⣿⣷⣦⣤⣤⣤⣤⣤⣴⡾⠛⠉⠀⠀⠀⠀]],
|
[[⠀⠀⠀⠀⠈⠻⣤⡈⠻⢿⣿⣷⣦⣤⣤⣤⣤⣤⣴⡾⠛⠉⠀⠀⠀⠀]],
|
||||||
-- [[⠀⠀⠀⠀⠀⠀⠈⠙⠶⢤⣈⣉⠛⠛⠛⠛⠋⠉⠀⠀⠀⠀⠀⠀⠀⠀]],
|
[[⠀⠀⠀⠀⠀⠀⠈⠙⠶⢤⣈⣉⠛⠛⠛⠛⠋⠉⠀⠀⠀⠀⠀⠀⠀⠀]],
|
||||||
-- [[⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]],
|
[[⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]],
|
||||||
-- },
|
},
|
||||||
}
|
}
|
||||||
|
@ -91,6 +91,7 @@ recompile("~/.config/suckless/dwm/config.h")
|
|||||||
recompile("~/.config/suckless/dmenu/config.h")
|
recompile("~/.config/suckless/dmenu/config.h")
|
||||||
recompile("~/.config/suckless/st/config.h")
|
recompile("~/.config/suckless/st/config.h")
|
||||||
recompile("~/.config/suckless/dwmblocks/config.h")
|
recompile("~/.config/suckless/dwmblocks/config.h")
|
||||||
|
recompile("~/.config/suckless/slock/config.h")
|
||||||
|
|
||||||
--[[ Close nvim if toggleterm or Outline is the last buffer ]]
|
--[[ Close nvim if toggleterm or Outline is the last buffer ]]
|
||||||
vim.api.nvim_create_autocmd({ "BufEnter" }, {
|
vim.api.nvim_create_autocmd({ "BufEnter" }, {
|
||||||
|
@ -367,27 +367,6 @@ return {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
|
||||||
"mikavilpas/yazi.nvim",
|
|
||||||
enabled = false,
|
|
||||||
dependencies = {
|
|
||||||
"nvim-lua/plenary.nvim",
|
|
||||||
},
|
|
||||||
event = "VeryLazy",
|
|
||||||
keys = {
|
|
||||||
{
|
|
||||||
"<leader><space>",
|
|
||||||
function()
|
|
||||||
require("yazi").yazi()
|
|
||||||
end,
|
|
||||||
{ desc = "Open the file manager" },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
opts = {
|
|
||||||
open_for_directories = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- gitsigns
|
-- gitsigns
|
||||||
{
|
{
|
||||||
"lewis6991/gitsigns.nvim",
|
"lewis6991/gitsigns.nvim",
|
||||||
|
2
.config/suckless/slock/.gitignore
vendored
Normal file
2
.config/suckless/slock/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
slock
|
||||||
|
*.o
|
25
.config/suckless/slock/LICENSE
Normal file
25
.config/suckless/slock/LICENSE
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
MIT/X Consortium License
|
||||||
|
|
||||||
|
© 2015-2016 Markus Teich <markus.teich@stusta.mhn.de>
|
||||||
|
© 2014 Dimitris Papastamos <sin@2f30.org>
|
||||||
|
© 2006-2014 Anselm R Garbe <anselm@garbe.us>
|
||||||
|
© 2014-2016 Laslo Hunhold <dev@frign.de>
|
||||||
|
© 2016-2023 Hiltjo Posthuma <hiltjo@codemadness.org>
|
||||||
|
|
||||||
|
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.
|
47
.config/suckless/slock/Makefile
Normal file
47
.config/suckless/slock/Makefile
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
# slock - simple screen locker
|
||||||
|
# See LICENSE file for copyright and license details.
|
||||||
|
|
||||||
|
include config.mk
|
||||||
|
|
||||||
|
SRC = slock.c ${COMPATSRC}
|
||||||
|
OBJ = ${SRC:.c=.o}
|
||||||
|
|
||||||
|
all: slock
|
||||||
|
|
||||||
|
.c.o:
|
||||||
|
${CC} -c ${CFLAGS} $<
|
||||||
|
|
||||||
|
${OBJ}: config.h config.mk arg.h util.h
|
||||||
|
|
||||||
|
config.h:
|
||||||
|
cp config.def.h $@
|
||||||
|
|
||||||
|
slock: ${OBJ}
|
||||||
|
${CC} -o $@ ${OBJ} ${LDFLAGS}
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f slock ${OBJ} slock-${VERSION}.tar.gz
|
||||||
|
|
||||||
|
dist: clean
|
||||||
|
mkdir -p slock-${VERSION}
|
||||||
|
cp -R LICENSE Makefile README slock.1 config.mk \
|
||||||
|
${SRC} config.def.h arg.h util.h slock-${VERSION}
|
||||||
|
tar -cf slock-${VERSION}.tar slock-${VERSION}
|
||||||
|
gzip slock-${VERSION}.tar
|
||||||
|
rm -rf slock-${VERSION}
|
||||||
|
|
||||||
|
install: all
|
||||||
|
mkdir -p ${DESTDIR}${PREFIX}/bin
|
||||||
|
cp -f slock ${DESTDIR}${PREFIX}/bin
|
||||||
|
chmod 755 ${DESTDIR}${PREFIX}/bin/slock
|
||||||
|
chmod u+s ${DESTDIR}${PREFIX}/bin/slock
|
||||||
|
echo installing manual page to ${DESTDIR}${MANPREFIX}/man1
|
||||||
|
mkdir -p ${DESTDIR}${MANPREFIX}/man1
|
||||||
|
sed "s/VERSION/${VERSION}/g" <slock.1 >${DESTDIR}${MANPREFIX}/man1/slock.1
|
||||||
|
chmod 644 ${DESTDIR}${MANPREFIX}/man1/slock.1
|
||||||
|
|
||||||
|
uninstall:
|
||||||
|
rm -f ${DESTDIR}${PREFIX}/bin/slock
|
||||||
|
rm -f ${DESTDIR}${MANPREFIX}/man1/slock.1
|
||||||
|
|
||||||
|
.PHONY: all clean dist install uninstall
|
12
.config/suckless/slock/README.md
Normal file
12
.config/suckless/slock/README.md
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
# slock - simple screen locker
|
||||||
|
|
||||||
|
This build of slock was generated using [slock-flexipatch](https://github.com/bakkeby/st-flexipatch.git) and finalized by [flexipatch-finalizer](https://github.com/bakkeby/flexipatch-finalizer).
|
||||||
|
|
||||||
|
## Patches
|
||||||
|
|
||||||
|
- blur pixelated screen [link](https://tools.suckless.org/slock/patches/blur-pixelated-screen)
|
||||||
|
- controlclear [link](https://tools.suckless.org/slock/patches/control-clear)
|
||||||
|
- dpms [link](https://tools.suckless.org/slock/patches/dpms)
|
||||||
|
- dwm logo [link](https://tools.suckless.org/slock/patches/failure-command)
|
||||||
|
- mediakeys [link](https://tools.suckless.org/slock/patches/mediakeys)
|
||||||
|
- xresources [link](https://tools.suckless.org/slock/patches/xresources)
|
65
.config/suckless/slock/arg.h
Normal file
65
.config/suckless/slock/arg.h
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
/*
|
||||||
|
* Copy me if you can.
|
||||||
|
* by 20h
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef ARG_H__
|
||||||
|
#define ARG_H__
|
||||||
|
|
||||||
|
extern char *argv0;
|
||||||
|
|
||||||
|
/* use main(int argc, char *argv[]) */
|
||||||
|
#define ARGBEGIN for (argv0 = *argv, argv++, argc--;\
|
||||||
|
argv[0] && argv[0][0] == '-'\
|
||||||
|
&& argv[0][1];\
|
||||||
|
argc--, argv++) {\
|
||||||
|
char argc_;\
|
||||||
|
char **argv_;\
|
||||||
|
int brk_;\
|
||||||
|
if (argv[0][1] == '-' && argv[0][2] == '\0') {\
|
||||||
|
argv++;\
|
||||||
|
argc--;\
|
||||||
|
break;\
|
||||||
|
}\
|
||||||
|
for (brk_ = 0, argv[0]++, argv_ = argv;\
|
||||||
|
argv[0][0] && !brk_;\
|
||||||
|
argv[0]++) {\
|
||||||
|
if (argv_ != argv)\
|
||||||
|
break;\
|
||||||
|
argc_ = argv[0][0];\
|
||||||
|
switch (argc_)
|
||||||
|
|
||||||
|
/* Handles obsolete -NUM syntax */
|
||||||
|
#define ARGNUM case '0':\
|
||||||
|
case '1':\
|
||||||
|
case '2':\
|
||||||
|
case '3':\
|
||||||
|
case '4':\
|
||||||
|
case '5':\
|
||||||
|
case '6':\
|
||||||
|
case '7':\
|
||||||
|
case '8':\
|
||||||
|
case '9'
|
||||||
|
|
||||||
|
#define ARGEND }\
|
||||||
|
}
|
||||||
|
|
||||||
|
#define ARGC() argc_
|
||||||
|
|
||||||
|
#define ARGNUMF() (brk_ = 1, estrtonum(argv[0], 0, INT_MAX))
|
||||||
|
|
||||||
|
#define EARGF(x) ((argv[0][1] == '\0' && argv[1] == NULL)?\
|
||||||
|
((x), abort(), (char *)0) :\
|
||||||
|
(brk_ = 1, (argv[0][1] != '\0')?\
|
||||||
|
(&argv[0][1]) :\
|
||||||
|
(argc--, argv++, argv[0])))
|
||||||
|
|
||||||
|
#define ARGF() ((argv[0][1] == '\0' && argv[1] == NULL)?\
|
||||||
|
(char *)0 :\
|
||||||
|
(brk_ = 1, (argv[0][1] != '\0')?\
|
||||||
|
(&argv[0][1]) :\
|
||||||
|
(argc--, argv++, argv[0])))
|
||||||
|
|
||||||
|
#define LNGARG() &argv[0][0]
|
||||||
|
|
||||||
|
#endif
|
51
.config/suckless/slock/config.h
Normal file
51
.config/suckless/slock/config.h
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
// user and group to drop privileges to
|
||||||
|
static const char *user = "nobody";
|
||||||
|
static const char *group = "nobody"; // use "nobody" for arch
|
||||||
|
|
||||||
|
static const char *colorname[NUMCOLS] = {
|
||||||
|
[INIT] = "black", // after initialization
|
||||||
|
[INPUT] = "#005577", // during input
|
||||||
|
[FAILED] = "#CC3333", // wrong password
|
||||||
|
};
|
||||||
|
|
||||||
|
// insert grid pattern with scale 1:1, the size can be changed with logosize
|
||||||
|
static const int logosize = 8;
|
||||||
|
static const int logow =
|
||||||
|
12; // grid width and height for right center alignment*/
|
||||||
|
static const int logoh = 6;
|
||||||
|
|
||||||
|
static XRectangle rectangles[] = {
|
||||||
|
// x y w h
|
||||||
|
{ 0, 3, 1, 3 },
|
||||||
|
{ 1, 3, 2, 1 },
|
||||||
|
{ 0, 5, 8, 1 },
|
||||||
|
{ 3, 0, 1, 5 },
|
||||||
|
{ 5, 3, 1, 2 },
|
||||||
|
{ 7, 3, 1, 2 },
|
||||||
|
{ 8, 3, 4, 1 },
|
||||||
|
{ 9, 4, 1, 2 },
|
||||||
|
{ 11, 4, 1, 2 },
|
||||||
|
};
|
||||||
|
|
||||||
|
// Xresources preferences to load at startup
|
||||||
|
ResourcePref resources[] = {
|
||||||
|
{"locked", STRING, &colorname[INIT]},
|
||||||
|
{"input", STRING, &colorname[INPUT]},
|
||||||
|
{"failed", STRING, &colorname[FAILED]},
|
||||||
|
};
|
||||||
|
|
||||||
|
// treat a cleared input like a wrong password (color)
|
||||||
|
static const int failonclear = 1;
|
||||||
|
|
||||||
|
// Enable blur
|
||||||
|
#define BLUR
|
||||||
|
static const int blurRadius = 5; // Set blur radius
|
||||||
|
// Enable Pixelation
|
||||||
|
// #define PIXELATION
|
||||||
|
static const int pixelSize = 10; // Set pixelation radius
|
||||||
|
|
||||||
|
// allow control key to trigger fail on clear
|
||||||
|
static const int controlkeyclear = 1;
|
||||||
|
|
||||||
|
// time in seconds before the monitor shuts down
|
||||||
|
static const int monitortime = 5;
|
45
.config/suckless/slock/config.mk
Normal file
45
.config/suckless/slock/config.mk
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
# slock version
|
||||||
|
VERSION = 1.4
|
||||||
|
|
||||||
|
# Customize below to fit your system
|
||||||
|
|
||||||
|
# paths
|
||||||
|
PREFIX = /usr/local
|
||||||
|
MANPREFIX = ${PREFIX}/share/man
|
||||||
|
|
||||||
|
X11INC = /usr/X11R6/include
|
||||||
|
X11LIB = /usr/X11R6/lib
|
||||||
|
|
||||||
|
# Uncomment for BSD
|
||||||
|
#BSD=-D_BSD_SOURCE
|
||||||
|
|
||||||
|
# Uncomment for NetBSD
|
||||||
|
#NETBSD=-D_NETBSD_SOURCE
|
||||||
|
|
||||||
|
# Uncomment for message patch / MESSAGE_PATCH / COLORMESSAGE_PATCH / DWM_LOGO_PATCH
|
||||||
|
XINERAMA=-lXinerama
|
||||||
|
XINERAMAFLAGS = -DXINERAMA
|
||||||
|
|
||||||
|
# Uncomment for pam auth patch / PAMAUTH_PATCH
|
||||||
|
#PAM=-lpam
|
||||||
|
|
||||||
|
# Uncomment for blur pixelated screen and background image patches / BLUR_PIXELATED_SCREEN_PATCH, BACKGROUND_IMAGE_PATCH
|
||||||
|
IMLIB=-lImlib2
|
||||||
|
|
||||||
|
# includes and libs
|
||||||
|
INCS = -I. -I/usr/include -I${X11INC}
|
||||||
|
LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11 -lXext -lXrandr ${XINERAMA} ${PAM} ${IMLIB}
|
||||||
|
|
||||||
|
# flags
|
||||||
|
CPPFLAGS = -DVERSION=\"${VERSION}\" -D_DEFAULT_SOURCE -DHAVE_SHADOW_H ${XINERAMAFLAGS} ${BSD} ${NETBSD}
|
||||||
|
CFLAGS = -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS}
|
||||||
|
LDFLAGS = -s ${LIBS}
|
||||||
|
COMPATSRC = explicit_bzero.c
|
||||||
|
|
||||||
|
# On OpenBSD and Darwin remove -lcrypt from LIBS
|
||||||
|
#LIBS = -L/usr/lib -lc -L${X11LIB} -lX11 -lXext -lXrandr
|
||||||
|
# On *BSD remove -DHAVE_SHADOW_H from CPPFLAGS
|
||||||
|
# On NetBSD add -D_NETBSD_SOURCE to CPPFLAGS
|
||||||
|
#CPPFLAGS = -DVERSION=\"${VERSION}\" -D_BSD_SOURCE -D_NETBSD_SOURCE
|
||||||
|
# On OpenBSD set COMPATSRC to empty
|
||||||
|
#COMPATSRC =
|
19
.config/suckless/slock/explicit_bzero.c
Normal file
19
.config/suckless/slock/explicit_bzero.c
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/* $OpenBSD: explicit_bzero.c,v 1.3 2014/06/21 02:34:26 matthew Exp $ */
|
||||||
|
/*
|
||||||
|
* Public domain.
|
||||||
|
* Written by Matthew Dempsky.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
__attribute__((weak)) void
|
||||||
|
__explicit_bzero_hook(void *buf, size_t len)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
explicit_bzero(void *buf, size_t len)
|
||||||
|
{
|
||||||
|
memset(buf, 0, len);
|
||||||
|
__explicit_bzero_hook(buf, len);
|
||||||
|
}
|
70
.config/suckless/slock/patch/blur_pixelated_screen.c
Normal file
70
.config/suckless/slock/patch/blur_pixelated_screen.c
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
#include <Imlib2.h>
|
||||||
|
|
||||||
|
Imlib_Image image;
|
||||||
|
|
||||||
|
void
|
||||||
|
render_lock_image(Display *dpy, struct lock *lock, Imlib_Image image)
|
||||||
|
{
|
||||||
|
if (image) {
|
||||||
|
lock->bgmap = XCreatePixmap(dpy, lock->root, DisplayWidth(dpy, lock->screen), DisplayHeight(dpy, lock->screen), DefaultDepth(dpy, lock->screen));
|
||||||
|
imlib_context_set_image(image);
|
||||||
|
imlib_context_set_display(dpy);
|
||||||
|
imlib_context_set_visual(DefaultVisual(dpy, lock->screen));
|
||||||
|
imlib_context_set_colormap(DefaultColormap(dpy, lock->screen));
|
||||||
|
imlib_context_set_drawable(lock->bgmap);
|
||||||
|
imlib_render_image_on_drawable(0, 0);
|
||||||
|
imlib_free_image();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
create_lock_image(Display *dpy)
|
||||||
|
{
|
||||||
|
/* Create screenshot Image */
|
||||||
|
Screen *scr = ScreenOfDisplay(dpy, DefaultScreen(dpy));
|
||||||
|
image = imlib_create_image(scr->width,scr->height);
|
||||||
|
imlib_context_set_image(image);
|
||||||
|
imlib_context_set_display(dpy);
|
||||||
|
imlib_context_set_visual(DefaultVisual(dpy,0));
|
||||||
|
imlib_context_set_drawable(RootWindow(dpy,XScreenNumberOfScreen(scr)));
|
||||||
|
imlib_copy_drawable_to_image(0,0,0,scr->width,scr->height,0,0,1);
|
||||||
|
|
||||||
|
#ifdef BLUR
|
||||||
|
/* Blur function */
|
||||||
|
imlib_image_blur(blurRadius);
|
||||||
|
#endif // BLUR
|
||||||
|
|
||||||
|
#ifdef PIXELATION
|
||||||
|
/* Pixelation */
|
||||||
|
int width = scr->width;
|
||||||
|
int height = scr->height;
|
||||||
|
|
||||||
|
for (int y = 0; y < height; y += pixelSize) {
|
||||||
|
for (int x = 0; x < width; x += pixelSize) {
|
||||||
|
int red = 0;
|
||||||
|
int green = 0;
|
||||||
|
int blue = 0;
|
||||||
|
|
||||||
|
Imlib_Color pixel;
|
||||||
|
Imlib_Color* pp;
|
||||||
|
pp = &pixel;
|
||||||
|
for (int j = 0; j < pixelSize && j < height; j++) {
|
||||||
|
for (int i = 0; i < pixelSize && i < width; i++) {
|
||||||
|
imlib_image_query_pixel(x + i, y + j, pp);
|
||||||
|
red += pixel.red;
|
||||||
|
green += pixel.green;
|
||||||
|
blue += pixel.blue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
red /= (pixelSize * pixelSize);
|
||||||
|
green /= (pixelSize * pixelSize);
|
||||||
|
blue /= (pixelSize * pixelSize);
|
||||||
|
imlib_context_set_color(red, green, blue, pixel.alpha);
|
||||||
|
imlib_image_fill_rectangle(x, y, pixelSize, pixelSize);
|
||||||
|
red = 0;
|
||||||
|
green = 0;
|
||||||
|
blue = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
4
.config/suckless/slock/patch/blur_pixelated_screen.h
Normal file
4
.config/suckless/slock/patch/blur_pixelated_screen.h
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
#include <Imlib2.h>
|
||||||
|
|
||||||
|
static void create_lock_image(Display *dpy);
|
||||||
|
static void render_lock_image(Display *dpy, struct lock *lock, Imlib_Image image);
|
24
.config/suckless/slock/patch/dwmlogo.c
Normal file
24
.config/suckless/slock/patch/dwmlogo.c
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
static void
|
||||||
|
resizerectangles(struct lock *lock)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < LENGTH(rectangles); i++){
|
||||||
|
lock->rectangles[i].x = (rectangles[i].x * logosize)
|
||||||
|
+ lock->xoff + ((lock->mw) / 2) - (logow / 2 * logosize);
|
||||||
|
lock->rectangles[i].y = (rectangles[i].y * logosize)
|
||||||
|
+ lock->yoff + ((lock->mh) / 2) - (logoh / 2 * logosize);
|
||||||
|
lock->rectangles[i].width = rectangles[i].width * logosize;
|
||||||
|
lock->rectangles[i].height = rectangles[i].height * logosize;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
drawlogo(Display *dpy, struct lock *lock, int color)
|
||||||
|
{
|
||||||
|
lock->drawable = lock->bgmap;
|
||||||
|
XSetForeground(dpy, lock->gc, lock->colors[color]);
|
||||||
|
XFillRectangles(dpy, lock->drawable, lock->gc, lock->rectangles, LENGTH(rectangles));
|
||||||
|
XCopyArea(dpy, lock->drawable, lock->win, lock->gc, 0, 0, lock->x, lock->y, 0, 0);
|
||||||
|
XSync(dpy, False);
|
||||||
|
}
|
2
.config/suckless/slock/patch/dwmlogo.h
Normal file
2
.config/suckless/slock/patch/dwmlogo.h
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
static void resizerectangles(struct lock *lock);
|
||||||
|
static void drawlogo(Display *dpy, struct lock *lock, int color);
|
6
.config/suckless/slock/patch/include.c
Normal file
6
.config/suckless/slock/patch/include.c
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
/* Patches */
|
||||||
|
#include "blur_pixelated_screen.c"
|
||||||
|
|
||||||
|
#include "dwmlogo.c"
|
||||||
|
|
||||||
|
#include "xresources.c"
|
5
.config/suckless/slock/patch/include.h
Normal file
5
.config/suckless/slock/patch/include.h
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
/* Patches */
|
||||||
|
#include "blur_pixelated_screen.h"
|
||||||
|
|
||||||
|
#include "dwmlogo.h"
|
||||||
|
|
53
.config/suckless/slock/patch/xresources.c
Normal file
53
.config/suckless/slock/patch/xresources.c
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
#include <X11/Xresource.h>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
resource_load(XrmDatabase db, char *name, enum resource_type rtype, void *dst)
|
||||||
|
{
|
||||||
|
char **sdst = dst;
|
||||||
|
int *idst = dst;
|
||||||
|
float *fdst = dst;
|
||||||
|
|
||||||
|
char fullname[256];
|
||||||
|
char fullclass[256];
|
||||||
|
char *type;
|
||||||
|
XrmValue ret;
|
||||||
|
|
||||||
|
snprintf(fullname, sizeof(fullname), "%s.%s", "slock", name);
|
||||||
|
snprintf(fullclass, sizeof(fullclass), "%s.%s", "Slock", name);
|
||||||
|
fullname[sizeof(fullname) - 1] = fullclass[sizeof(fullclass) - 1] = '\0';
|
||||||
|
|
||||||
|
XrmGetResource(db, fullname, fullclass, &type, &ret);
|
||||||
|
if (ret.addr == NULL || strncmp("String", type, 64))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
switch (rtype) {
|
||||||
|
case STRING:
|
||||||
|
*sdst = ret.addr;
|
||||||
|
break;
|
||||||
|
case INTEGER:
|
||||||
|
*idst = strtoul(ret.addr, NULL, 10);
|
||||||
|
break;
|
||||||
|
case FLOAT:
|
||||||
|
*fdst = strtof(ret.addr, NULL);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
config_init(Display *dpy)
|
||||||
|
{
|
||||||
|
char *resm;
|
||||||
|
XrmDatabase db;
|
||||||
|
ResourcePref *p;
|
||||||
|
|
||||||
|
XrmInitialize();
|
||||||
|
resm = XResourceManagerString(dpy);
|
||||||
|
if (!resm)
|
||||||
|
return;
|
||||||
|
|
||||||
|
db = XrmGetStringDatabase(resm);
|
||||||
|
for (p = resources; p < resources + LENGTH(resources); p++)
|
||||||
|
resource_load(db, p->name, p->type, p->dst);
|
||||||
|
}
|
45
.config/suckless/slock/slock.1
Normal file
45
.config/suckless/slock/slock.1
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
.Dd October 6, 2023
|
||||||
|
.Dt SLOCK 1
|
||||||
|
.Os
|
||||||
|
.Sh NAME
|
||||||
|
.Nm slock
|
||||||
|
.Nd simple X screen locker
|
||||||
|
.Sh SYNOPSIS
|
||||||
|
.Nm
|
||||||
|
.Op Fl v
|
||||||
|
.Op Ar cmd Op Ar arg ...
|
||||||
|
.Sh DESCRIPTION
|
||||||
|
.Nm
|
||||||
|
is a simple X screen locker.
|
||||||
|
If provided,
|
||||||
|
.Ar cmd
|
||||||
|
is executed after the screen has been locked.
|
||||||
|
.Pp
|
||||||
|
The options are as follows:
|
||||||
|
.Bl -tag -width Ds
|
||||||
|
.It Fl v
|
||||||
|
Print version information to stdout and exit.
|
||||||
|
.El
|
||||||
|
.Sh EXIT STATUS
|
||||||
|
.Ex -std
|
||||||
|
.Sh EXAMPLES
|
||||||
|
$
|
||||||
|
.Nm
|
||||||
|
/usr/sbin/s2ram
|
||||||
|
.Sh SECURITY CONSIDERATIONS
|
||||||
|
To make sure a locked screen can not be bypassed by switching VTs
|
||||||
|
or killing the X server with Ctrl+Alt+Backspace, it is recommended
|
||||||
|
to disable both in
|
||||||
|
.Xr xorg.conf 5
|
||||||
|
for maximum security:
|
||||||
|
.Bd -literal
|
||||||
|
Section "ServerFlags"
|
||||||
|
Option "DontVTSwitch" "True"
|
||||||
|
Option "DontZap" "True"
|
||||||
|
EndSection
|
||||||
|
.Ed
|
||||||
|
.Sh CUSTOMIZATION
|
||||||
|
.Nm
|
||||||
|
can be customized by creating a custom config.h from config.def.h and
|
||||||
|
(re)compiling the source code.
|
||||||
|
This keeps it fast, secure and simple.
|
497
.config/suckless/slock/slock.c
Normal file
497
.config/suckless/slock/slock.c
Normal file
@ -0,0 +1,497 @@
|
|||||||
|
/* See LICENSE file for license details. */
|
||||||
|
#define _XOPEN_SOURCE 500
|
||||||
|
#define LENGTH(X) (sizeof X / sizeof X[0])
|
||||||
|
#if HAVE_SHADOW_H
|
||||||
|
#include <shadow.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <grp.h>
|
||||||
|
#include <pwd.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <X11/extensions/Xrandr.h>
|
||||||
|
#include <X11/keysym.h>
|
||||||
|
#include <X11/Xlib.h>
|
||||||
|
#include <X11/Xutil.h>
|
||||||
|
|
||||||
|
#include <X11/XF86keysym.h>
|
||||||
|
#include <X11/extensions/dpms.h>
|
||||||
|
#ifdef XINERAMA
|
||||||
|
#include <X11/extensions/Xinerama.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "arg.h"
|
||||||
|
#include "util.h"
|
||||||
|
|
||||||
|
char *argv0;
|
||||||
|
|
||||||
|
enum {
|
||||||
|
INIT,
|
||||||
|
INPUT,
|
||||||
|
FAILED,
|
||||||
|
NUMCOLS
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Xresources preferences */
|
||||||
|
enum resource_type {
|
||||||
|
STRING = 0,
|
||||||
|
INTEGER = 1,
|
||||||
|
FLOAT = 2
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char *name;
|
||||||
|
enum resource_type type;
|
||||||
|
void *dst;
|
||||||
|
} ResourcePref;
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
struct lock {
|
||||||
|
int screen;
|
||||||
|
Window root, win;
|
||||||
|
Pixmap pmap;
|
||||||
|
Pixmap bgmap;
|
||||||
|
unsigned long colors[NUMCOLS];
|
||||||
|
unsigned int x, y;
|
||||||
|
unsigned int xoff, yoff, mw, mh;
|
||||||
|
Drawable drawable;
|
||||||
|
GC gc;
|
||||||
|
XRectangle rectangles[LENGTH(rectangles)];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct xrandr {
|
||||||
|
int active;
|
||||||
|
int evbase;
|
||||||
|
int errbase;
|
||||||
|
};
|
||||||
|
|
||||||
|
#include "patch/include.h"
|
||||||
|
|
||||||
|
static void
|
||||||
|
die(const char *errstr, ...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
|
||||||
|
va_start(ap, errstr);
|
||||||
|
vfprintf(stderr, errstr, ap);
|
||||||
|
va_end(ap);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "patch/include.c"
|
||||||
|
|
||||||
|
#ifdef __linux__
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <linux/oom.h>
|
||||||
|
|
||||||
|
static void
|
||||||
|
dontkillme(void)
|
||||||
|
{
|
||||||
|
FILE *f;
|
||||||
|
const char oomfile[] = "/proc/self/oom_score_adj";
|
||||||
|
|
||||||
|
if (!(f = fopen(oomfile, "w"))) {
|
||||||
|
if (errno == ENOENT)
|
||||||
|
return;
|
||||||
|
die("slock: fopen %s: %s\n", oomfile, strerror(errno));
|
||||||
|
}
|
||||||
|
fprintf(f, "%d", OOM_SCORE_ADJ_MIN);
|
||||||
|
if (fclose(f)) {
|
||||||
|
if (errno == EACCES)
|
||||||
|
die("slock: unable to disable OOM killer. "
|
||||||
|
"Make sure to suid or sgid slock.\n");
|
||||||
|
else
|
||||||
|
die("slock: fclose %s: %s\n", oomfile, strerror(errno));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
gethash(void)
|
||||||
|
{
|
||||||
|
const char *hash;
|
||||||
|
struct passwd *pw;
|
||||||
|
|
||||||
|
/* Check if the current user has a password entry */
|
||||||
|
errno = 0;
|
||||||
|
if (!(pw = getpwuid(getuid()))) {
|
||||||
|
if (errno)
|
||||||
|
die("slock: getpwuid: %s\n", strerror(errno));
|
||||||
|
else
|
||||||
|
die("slock: cannot retrieve password entry\n");
|
||||||
|
}
|
||||||
|
hash = pw->pw_passwd;
|
||||||
|
|
||||||
|
#if HAVE_SHADOW_H
|
||||||
|
if (!strcmp(hash, "x")) {
|
||||||
|
struct spwd *sp;
|
||||||
|
if (!(sp = getspnam(pw->pw_name)))
|
||||||
|
die("slock: getspnam: cannot retrieve shadow entry. "
|
||||||
|
"Make sure to suid or sgid slock.\n");
|
||||||
|
hash = sp->sp_pwdp;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
if (!strcmp(hash, "*")) {
|
||||||
|
#ifdef __OpenBSD__
|
||||||
|
if (!(pw = getpwuid_shadow(getuid())))
|
||||||
|
die("slock: getpwnam_shadow: cannot retrieve shadow entry. "
|
||||||
|
"Make sure to suid or sgid slock.\n");
|
||||||
|
hash = pw->pw_passwd;
|
||||||
|
#else
|
||||||
|
die("slock: getpwuid: cannot retrieve shadow entry. "
|
||||||
|
"Make sure to suid or sgid slock.\n");
|
||||||
|
#endif /* __OpenBSD__ */
|
||||||
|
}
|
||||||
|
#endif /* HAVE_SHADOW_H */
|
||||||
|
|
||||||
|
return hash;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
|
||||||
|
const char *hash)
|
||||||
|
{
|
||||||
|
XRRScreenChangeNotifyEvent *rre;
|
||||||
|
char buf[32], passwd[256], *inputhash;
|
||||||
|
int num, screen, running, failure, oldc;
|
||||||
|
unsigned int len, color;
|
||||||
|
KeySym ksym;
|
||||||
|
XEvent ev;
|
||||||
|
|
||||||
|
len = 0;
|
||||||
|
running = 1;
|
||||||
|
failure = 0;
|
||||||
|
oldc = INIT;
|
||||||
|
|
||||||
|
while (running && !XNextEvent(dpy, &ev))
|
||||||
|
{
|
||||||
|
if (ev.type == KeyPress) {
|
||||||
|
explicit_bzero(&buf, sizeof(buf));
|
||||||
|
num = XLookupString(&ev.xkey, buf, sizeof(buf), &ksym, 0);
|
||||||
|
if (IsKeypadKey(ksym)) {
|
||||||
|
if (ksym == XK_KP_Enter)
|
||||||
|
ksym = XK_Return;
|
||||||
|
else if (ksym >= XK_KP_0 && ksym <= XK_KP_9)
|
||||||
|
ksym = (ksym - XK_KP_0) + XK_0;
|
||||||
|
}
|
||||||
|
if (IsFunctionKey(ksym) ||
|
||||||
|
IsKeypadKey(ksym) ||
|
||||||
|
IsMiscFunctionKey(ksym) ||
|
||||||
|
IsPFKey(ksym) ||
|
||||||
|
IsPrivateKeypadKey(ksym))
|
||||||
|
continue;
|
||||||
|
switch (ksym) {
|
||||||
|
case XK_Return:
|
||||||
|
passwd[len] = '\0';
|
||||||
|
errno = 0;
|
||||||
|
|
||||||
|
if (!(inputhash = crypt(passwd, hash)))
|
||||||
|
fprintf(stderr, "slock: crypt: %s\n", strerror(errno));
|
||||||
|
else
|
||||||
|
running = !!strcmp(inputhash, hash);
|
||||||
|
if (running) {
|
||||||
|
XBell(dpy, 100);
|
||||||
|
failure = 1;
|
||||||
|
}
|
||||||
|
explicit_bzero(&passwd, sizeof(passwd));
|
||||||
|
len = 0;
|
||||||
|
break;
|
||||||
|
case XK_Escape:
|
||||||
|
explicit_bzero(&passwd, sizeof(passwd));
|
||||||
|
len = 0;
|
||||||
|
break;
|
||||||
|
case XK_BackSpace:
|
||||||
|
if (len)
|
||||||
|
passwd[--len] = '\0';
|
||||||
|
break;
|
||||||
|
case XF86XK_AudioLowerVolume:
|
||||||
|
case XF86XK_AudioMute:
|
||||||
|
case XF86XK_AudioRaiseVolume:
|
||||||
|
case XF86XK_AudioPlay:
|
||||||
|
case XF86XK_AudioStop:
|
||||||
|
case XF86XK_AudioPrev:
|
||||||
|
case XF86XK_AudioNext:
|
||||||
|
XSendEvent(dpy, DefaultRootWindow(dpy), True, KeyPressMask, &ev);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if (controlkeyclear && iscntrl((int)buf[0]))
|
||||||
|
continue;
|
||||||
|
if (num && (len + num < sizeof(passwd)))
|
||||||
|
{
|
||||||
|
memcpy(passwd + len, buf, num);
|
||||||
|
len += num;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
color = len ? INPUT : ((failure || failonclear) ? FAILED : INIT);
|
||||||
|
if (running && oldc != color) {
|
||||||
|
for (screen = 0; screen < nscreens; screen++) {
|
||||||
|
drawlogo(dpy, locks[screen], color);
|
||||||
|
}
|
||||||
|
oldc = color;
|
||||||
|
}
|
||||||
|
} else if (rr->active && ev.type == rr->evbase + RRScreenChangeNotify) {
|
||||||
|
rre = (XRRScreenChangeNotifyEvent*)&ev;
|
||||||
|
for (screen = 0; screen < nscreens; screen++) {
|
||||||
|
if (locks[screen]->win == rre->window) {
|
||||||
|
if (rre->rotation == RR_Rotate_90 ||
|
||||||
|
rre->rotation == RR_Rotate_270)
|
||||||
|
XResizeWindow(dpy, locks[screen]->win,
|
||||||
|
rre->height, rre->width);
|
||||||
|
else
|
||||||
|
XResizeWindow(dpy, locks[screen]->win,
|
||||||
|
rre->width, rre->height);
|
||||||
|
XClearWindow(dpy, locks[screen]->win);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (screen = 0; screen < nscreens; screen++)
|
||||||
|
XRaiseWindow(dpy, locks[screen]->win);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct lock *
|
||||||
|
lockscreen(Display *dpy, struct xrandr *rr, int screen)
|
||||||
|
{
|
||||||
|
char curs[] = {0, 0, 0, 0, 0, 0, 0, 0};
|
||||||
|
int i, ptgrab, kbgrab;
|
||||||
|
struct lock *lock;
|
||||||
|
XColor color, dummy;
|
||||||
|
XSetWindowAttributes wa;
|
||||||
|
Cursor invisible;
|
||||||
|
#ifdef XINERAMA
|
||||||
|
XineramaScreenInfo *info;
|
||||||
|
int n;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (dpy == NULL || screen < 0 || !(lock = malloc(sizeof(struct lock))))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
lock->screen = screen;
|
||||||
|
lock->root = RootWindow(dpy, lock->screen);
|
||||||
|
|
||||||
|
render_lock_image(dpy, lock, image);
|
||||||
|
|
||||||
|
for (i = 0; i < NUMCOLS; i++) {
|
||||||
|
XAllocNamedColor(dpy, DefaultColormap(dpy, lock->screen),
|
||||||
|
colorname[i], &color, &dummy);
|
||||||
|
lock->colors[i] = color.pixel;
|
||||||
|
}
|
||||||
|
|
||||||
|
lock->x = DisplayWidth(dpy, lock->screen);
|
||||||
|
lock->y = DisplayHeight(dpy, lock->screen);
|
||||||
|
#ifdef XINERAMA
|
||||||
|
if ((info = XineramaQueryScreens(dpy, &n))) {
|
||||||
|
lock->xoff = info[0].x_org;
|
||||||
|
lock->yoff = info[0].y_org;
|
||||||
|
lock->mw = info[0].width;
|
||||||
|
lock->mh = info[0].height;
|
||||||
|
} else
|
||||||
|
#endif // XINERAMA
|
||||||
|
{
|
||||||
|
lock->xoff = lock->yoff = 0;
|
||||||
|
lock->mw = lock->x;
|
||||||
|
lock->mh = lock->y;
|
||||||
|
}
|
||||||
|
lock->drawable = XCreatePixmap(dpy, lock->root, lock->x, lock->y, DefaultDepth(dpy, screen));
|
||||||
|
lock->gc = XCreateGC(dpy, lock->root, 0, NULL);
|
||||||
|
XSetLineAttributes(dpy, lock->gc, 1, LineSolid, CapButt, JoinMiter);
|
||||||
|
|
||||||
|
/* init */
|
||||||
|
wa.override_redirect = 1;
|
||||||
|
lock->win = XCreateWindow(dpy, lock->root, 0, 0,
|
||||||
|
lock->x,
|
||||||
|
lock->y,
|
||||||
|
0, DefaultDepth(dpy, lock->screen),
|
||||||
|
CopyFromParent,
|
||||||
|
DefaultVisual(dpy, lock->screen),
|
||||||
|
CWOverrideRedirect | CWBackPixel, &wa);
|
||||||
|
if (lock->bgmap)
|
||||||
|
XSetWindowBackgroundPixmap(dpy, lock->win, lock->bgmap);
|
||||||
|
lock->pmap = XCreateBitmapFromData(dpy, lock->win, curs, 8, 8);
|
||||||
|
invisible = XCreatePixmapCursor(dpy, lock->pmap, lock->pmap,
|
||||||
|
&color, &color, 0, 0);
|
||||||
|
XDefineCursor(dpy, lock->win, invisible);
|
||||||
|
|
||||||
|
resizerectangles(lock);
|
||||||
|
|
||||||
|
/* Try to grab mouse pointer *and* keyboard for 600ms, else fail the lock */
|
||||||
|
for (i = 0, ptgrab = kbgrab = -1; i < 6; i++) {
|
||||||
|
if (ptgrab != GrabSuccess) {
|
||||||
|
ptgrab = XGrabPointer(dpy, lock->root, False,
|
||||||
|
ButtonPressMask | ButtonReleaseMask |
|
||||||
|
PointerMotionMask, GrabModeAsync,
|
||||||
|
GrabModeAsync, None,
|
||||||
|
invisible,
|
||||||
|
CurrentTime);
|
||||||
|
}
|
||||||
|
if (kbgrab != GrabSuccess) {
|
||||||
|
kbgrab = XGrabKeyboard(dpy, lock->root, True,
|
||||||
|
GrabModeAsync, GrabModeAsync, CurrentTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* input is grabbed: we can lock the screen */
|
||||||
|
if (ptgrab == GrabSuccess && kbgrab == GrabSuccess) {
|
||||||
|
XMapRaised(dpy, lock->win);
|
||||||
|
if (rr->active)
|
||||||
|
XRRSelectInput(dpy, lock->win, RRScreenChangeNotifyMask);
|
||||||
|
|
||||||
|
XSelectInput(dpy, lock->root, SubstructureNotifyMask);
|
||||||
|
drawlogo(dpy, lock, INIT);
|
||||||
|
return lock;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* retry on AlreadyGrabbed but fail on other errors */
|
||||||
|
if ((ptgrab != AlreadyGrabbed && ptgrab != GrabSuccess) ||
|
||||||
|
(kbgrab != AlreadyGrabbed && kbgrab != GrabSuccess))
|
||||||
|
break;
|
||||||
|
|
||||||
|
usleep(100000);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* we couldn't grab all input: fail out */
|
||||||
|
if (ptgrab != GrabSuccess)
|
||||||
|
fprintf(stderr, "slock: unable to grab mouse pointer for screen %d\n",
|
||||||
|
screen);
|
||||||
|
if (kbgrab != GrabSuccess)
|
||||||
|
fprintf(stderr, "slock: unable to grab keyboard for screen %d\n",
|
||||||
|
screen);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
usage(void)
|
||||||
|
{
|
||||||
|
die("usage: slock [-v] [cmd [arg ...]]\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char **argv) {
|
||||||
|
struct xrandr rr;
|
||||||
|
struct lock **locks;
|
||||||
|
struct passwd *pwd;
|
||||||
|
struct group *grp;
|
||||||
|
uid_t duid;
|
||||||
|
gid_t dgid;
|
||||||
|
const char *hash;
|
||||||
|
Display *dpy;
|
||||||
|
int s, nlocks, nscreens;
|
||||||
|
CARD16 standby, suspend, off;
|
||||||
|
ARGBEGIN {
|
||||||
|
case 'v':
|
||||||
|
puts("slock-"VERSION);
|
||||||
|
return 0;
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
|
} ARGEND
|
||||||
|
|
||||||
|
/* validate drop-user and -group */
|
||||||
|
errno = 0;
|
||||||
|
if (!(pwd = getpwnam(user)))
|
||||||
|
die("slock: getpwnam %s: %s\n", user,
|
||||||
|
errno ? strerror(errno) : "user entry not found");
|
||||||
|
duid = pwd->pw_uid;
|
||||||
|
errno = 0;
|
||||||
|
if (!(grp = getgrnam(group)))
|
||||||
|
die("slock: getgrnam %s: %s\n", group,
|
||||||
|
errno ? strerror(errno) : "group entry not found");
|
||||||
|
dgid = grp->gr_gid;
|
||||||
|
|
||||||
|
#ifdef __linux__
|
||||||
|
dontkillme();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
hash = gethash();
|
||||||
|
errno = 0;
|
||||||
|
if (!crypt("", hash))
|
||||||
|
die("slock: crypt: %s\n", strerror(errno));
|
||||||
|
|
||||||
|
if (!(dpy = XOpenDisplay(NULL)))
|
||||||
|
die("slock: cannot open display\n");
|
||||||
|
|
||||||
|
/* drop privileges */
|
||||||
|
if (setgroups(0, NULL) < 0)
|
||||||
|
die("slock: setgroups: %s\n", strerror(errno));
|
||||||
|
if (setgid(dgid) < 0)
|
||||||
|
die("slock: setgid: %s\n", strerror(errno));
|
||||||
|
if (setuid(duid) < 0)
|
||||||
|
die("slock: setuid: %s\n", strerror(errno));
|
||||||
|
|
||||||
|
config_init(dpy);
|
||||||
|
|
||||||
|
create_lock_image(dpy);
|
||||||
|
|
||||||
|
/* check for Xrandr support */
|
||||||
|
rr.active = XRRQueryExtension(dpy, &rr.evbase, &rr.errbase);
|
||||||
|
|
||||||
|
/* get number of screens in display "dpy" and blank them */
|
||||||
|
nscreens = ScreenCount(dpy);
|
||||||
|
if (!(locks = calloc(nscreens, sizeof(struct lock *))))
|
||||||
|
die("slock: out of memory\n");
|
||||||
|
for (nlocks = 0, s = 0; s < nscreens; s++) {
|
||||||
|
if ((locks[s] = lockscreen(dpy, &rr, s)) != NULL) {
|
||||||
|
nlocks++;
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
XSync(dpy, 0);
|
||||||
|
|
||||||
|
/* did we manage to lock everything? */
|
||||||
|
if (nlocks != nscreens)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
/* DPMS magic to disable the monitor */
|
||||||
|
if (!DPMSCapable(dpy))
|
||||||
|
die("slock: DPMSCapable failed\n");
|
||||||
|
if (!DPMSEnable(dpy))
|
||||||
|
die("slock: DPMSEnable failed\n");
|
||||||
|
if (!DPMSGetTimeouts(dpy, &standby, &suspend, &off))
|
||||||
|
die("slock: DPMSGetTimeouts failed\n");
|
||||||
|
if (!standby || !suspend || !off)
|
||||||
|
die("slock: at least one DPMS variable is zero\n");
|
||||||
|
if (!DPMSSetTimeouts(dpy, monitortime, monitortime, monitortime))
|
||||||
|
die("slock: DPMSSetTimeouts failed\n");
|
||||||
|
|
||||||
|
XSync(dpy, 0);
|
||||||
|
|
||||||
|
/* run post-lock command */
|
||||||
|
if (argc > 0) {
|
||||||
|
switch (fork()) {
|
||||||
|
case -1:
|
||||||
|
die("slock: fork failed: %s\n", strerror(errno));
|
||||||
|
case 0:
|
||||||
|
if (close(ConnectionNumber(dpy)) < 0)
|
||||||
|
die("slock: close: %s\n", strerror(errno));
|
||||||
|
execvp(argv[0], argv);
|
||||||
|
fprintf(stderr, "slock: execvp %s: %s\n", argv[0], strerror(errno));
|
||||||
|
_exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* everything is now blank. Wait for the correct password */
|
||||||
|
readpw(dpy, &rr, locks, nscreens, hash);
|
||||||
|
/* reset DPMS values to inital ones */
|
||||||
|
DPMSSetTimeouts(dpy, standby, suspend, off);
|
||||||
|
XSync(dpy, 0);
|
||||||
|
|
||||||
|
for (nlocks = 0, s = 0; s < nscreens; s++) {
|
||||||
|
XFreePixmap(dpy, locks[s]->drawable);
|
||||||
|
XFreeGC(dpy, locks[s]->gc);
|
||||||
|
}
|
||||||
|
|
||||||
|
XSync(dpy, 0);
|
||||||
|
XCloseDisplay(dpy);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
2
.config/suckless/slock/util.h
Normal file
2
.config/suckless/slock/util.h
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
#undef explicit_bzero
|
||||||
|
void explicit_bzero(void *, size_t);
|
5
.config/x11/xrdb/slock/ashes
Normal file
5
.config/x11/xrdb/slock/ashes
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
! vim: filetype=xdefaults
|
||||||
|
|
||||||
|
slock.locked: #141f21
|
||||||
|
slock.input: #415C6A
|
||||||
|
slock.failed: #ADB3BA
|
5
.config/x11/xrdb/slock/tokyonight
Normal file
5
.config/x11/xrdb/slock/tokyonight
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
! vim: filetype=xdefaults
|
||||||
|
|
||||||
|
slock.locked: #414868
|
||||||
|
slock.input: #7aa2f7
|
||||||
|
slock.failed: #f7768e
|
@ -39,5 +39,10 @@ dmenu.font: JetBrainsMono Nerd Font:style:medium:size=10
|
|||||||
! █
|
! █
|
||||||
! ███▄█▄█▀█▀█
|
! ███▄█▄█▀█▀█
|
||||||
|
|
||||||
! Choices: oxocarbon
|
! Choices: oxocarbon, tokyonight
|
||||||
#include "xrdb/dwm/tokyonight"
|
#include "xrdb/dwm/tokyonight"
|
||||||
|
|
||||||
|
! ▄▄█ ▄▄ ▄▄ █ ▄
|
||||||
|
! ▄█ █▄██▄█▄▄█▀▄
|
||||||
|
! Choices: tokyonight, ashes
|
||||||
|
#include "xrdb/slock/ashes"
|
||||||
|
@ -5,6 +5,7 @@ configs=(
|
|||||||
"$XDG_CONFIG_HOME/suckless/dwm/config.h"
|
"$XDG_CONFIG_HOME/suckless/dwm/config.h"
|
||||||
"$XDG_CONFIG_HOME/suckless/dwmblocks/config.h"
|
"$XDG_CONFIG_HOME/suckless/dwmblocks/config.h"
|
||||||
"$XDG_CONFIG_HOME/suckless/st/config.h"
|
"$XDG_CONFIG_HOME/suckless/st/config.h"
|
||||||
|
"$XDG_CONFIG_HOME/suckless/slock/config.h"
|
||||||
"$XDG_CONFIG_HOME/x11/xresources"
|
"$XDG_CONFIG_HOME/x11/xresources"
|
||||||
"$XDG_CONFIG_HOME/nvim/lua"
|
"$XDG_CONFIG_HOME/nvim/lua"
|
||||||
"$XDG_CONFIG_HOME/zsh/.zshrc"
|
"$XDG_CONFIG_HOME/zsh/.zshrc"
|
||||||
|
@ -10,7 +10,7 @@ options=(
|
|||||||
)
|
)
|
||||||
|
|
||||||
commands=(
|
commands=(
|
||||||
"lock"
|
"slock"
|
||||||
"renew-dwm"
|
"renew-dwm"
|
||||||
"kill -TERM $(pidof -s dwm)"
|
"kill -TERM $(pidof -s dwm)"
|
||||||
"systemctl poweroff -i"
|
"systemctl poweroff -i"
|
||||||
|
@ -9,9 +9,9 @@ DEPS := $(OBJS:.o=.d)
|
|||||||
EXEC := main
|
EXEC := main
|
||||||
all: compile_msg build
|
all: compile_msg build
|
||||||
compile_msg:
|
compile_msg:
|
||||||
@echo -e "\e[33m Compile: $(SRCS)\e[0m"
|
@echo -e "\e[34m Compile: $(SRCS)\e[0m"
|
||||||
$(EXEC): $(OBJS)
|
$(EXEC): $(OBJS)
|
||||||
@echo -e "\n\e[33m Link: $(EXEC)\e[0m"
|
@echo -e "\n\e[34m Link: $(EXEC)\e[0m"
|
||||||
$(CXX) $(CXXFLAGS) $(OBJS) -o $(EXEC)
|
$(CXX) $(CXXFLAGS) $(OBJS) -o $(EXEC)
|
||||||
build: $(EXEC)
|
build: $(EXEC)
|
||||||
$(BUILDDIR)/%.o: $(SRCDIR)/%.cpp
|
$(BUILDDIR)/%.o: $(SRCDIR)/%.cpp
|
||||||
@ -19,7 +19,7 @@ $(BUILDDIR)/%.o: $(SRCDIR)/%.cpp
|
|||||||
$(CXX) $(CXXFLAGS) -I$(INCDIR) -MMD -MP -c $< -o $@
|
$(CXX) $(CXXFLAGS) -I$(INCDIR) -MMD -MP -c $< -o $@
|
||||||
-include $(DEPS)
|
-include $(DEPS)
|
||||||
run: $(EXEC)
|
run: $(EXEC)
|
||||||
@echo -e "\n\e[33m Execute : $(EXEC)\e[0m"
|
@echo -e "\n\e[34m Execute : $(EXEC)\e[0m"
|
||||||
./$(EXEC)
|
./$(EXEC)
|
||||||
clean:
|
clean:
|
||||||
rm -rf $(BUILDDIR) $(EXEC)
|
rm -rf $(BUILDDIR) $(EXEC)
|
||||||
|
42
README.md
42
README.md
@ -2,25 +2,27 @@
|
|||||||
|
|
||||||
<img src="./images/screenshot.png" alt="screenshot" align="right" width="400px">
|
<img src="./images/screenshot.png" alt="screenshot" align="right" width="400px">
|
||||||
|
|
||||||
These dotfiles are meant to be used after installing [LARBS](https://github.com/LukeSmithxyz/LARBS).
|
These dotfiles are meant to be used after installing [LARBS](https=//github.com/LukeSmithxyz/LARBS).
|
||||||
Here are some details about this setup:
|
Here are some details about this setup
|
||||||
|
|
||||||
- **OS**: EndeavourOS
|
- **OS** = EndeavourOS
|
||||||
- **Login Manager**: None
|
- **Login Manager** = None
|
||||||
- **WM**: [dwm](https://github.com/mintycube/dotfiles/tree/main/.config/suckless/dwm)
|
- **WM** = [dwm](https://github.com/mintycube/dotfiles/tree/main/.config/suckless/dwm)
|
||||||
- **Bar**: [dwmblocks](https://github.com/mintycube/dotfiles/tree/main/.config/suckless/dwmblocks)
|
- **Bar** = [dwmblocks](https://github.com/mintycube/dotfiles/tree/main/.config/suckless/dwmblocks)
|
||||||
- **Compositor**: [picom](https://github.com/yshui/picom)
|
- **LockScreen** = [slock](https://github.com/mintycube/dotfiles/tree/main/.config/suckless/slock)
|
||||||
|
- **Compositor** = [picom](https://github.com/yshui/picom)
|
||||||
|
- **Resolution** = 1366x768
|
||||||
- **Cursor-theme** = [Bibata-Modern-Ice](https://github.com/ful1e5/Bibata_Cursor)
|
- **Cursor-theme** = [Bibata-Modern-Ice](https://github.com/ful1e5/Bibata_Cursor)
|
||||||
- **Shell**: [zsh](https://wiki.archlinux.org/index.php/Zsh) + [zsh4humans](https://github.com/romkatv/zsh4humans)
|
- **Shell** = [zsh](https://wiki.archlinux.org/index.php/Zsh) + [zsh4humans](https://github.com/romkatv/zsh4humans)
|
||||||
- **Terminal**: [st](https://github.com/mintycube/dotfiles/tree/main/.config/suckless/st)
|
- **Terminal** = [st](https://github.com/mintycube/dotfiles/tree/main/.config/suckless/st)
|
||||||
- **Font**: JetBrainsMono Nerd Font
|
- **Font** = JetBrainsMono Nerd Font
|
||||||
- **Editor**: [Neovim](https://github.com/mintycube/dotfiles/tree/dwm/.config/nvim)
|
- **Editor** = [Neovim](https://github.com/mintycube/dotfiles/tree/dwm/.config/nvim)
|
||||||
- **File Manager**: [lf](https://github.com/gokcehan/lf) + [ctpv](https://github.com/NikitaIvanovV/ctpv)
|
- **File Manager** = [lf](https://github.com/gokcehan/lf) + [ctpv](https://github.com/NikitaIvanovV/ctpv)
|
||||||
- **Browser**: Firefox
|
- **Browser** = Firefox
|
||||||
- **Menu**: [dmenu](https://github.com/mintycube/dotfiles/tree/main/.config/suckless/dmenu)
|
- **Menu** = [dmenu](https://github.com/mintycube/dotfiles/tree/main/.config/suckless/dmenu)
|
||||||
- **Image-viewer** = [nsxiv](https://github.com/nsxiv/nsxiv)
|
- **Image-viewer** = [nsxiv](https=//github.com/nsxiv/nsxiv)
|
||||||
- **Music-player** = [mpd](https://github.com/MusicPlayerDaemon/MPD) + [ncmpcpp](https://github.com/ncmpcpp/ncmpcpp)
|
- **Music-player** = [mpd](https=//github.com/MusicPlayerDaemon/MPD) + [ncmpcpp](https://github.com/ncmpcpp/ncmpcpp)
|
||||||
- **Pdf-viewer** = [zathura](https://github.com/pwmt/zathura)
|
- **Pdf-viewer** = [zathura](https=//github.com/pwmt/zathura)
|
||||||
- **Calculator** = [qalculate-gtk](https://github.com/Qalculate/qalculate-gtk)
|
- **Calculator** = [qalculate-gtk](https=//github.com/Qalculate/qalculate-gtk)
|
||||||
- **Networkmanager** = [dmenu](https://github.com/firecat53/networkmanager-dmenu)
|
- **Networkmanager** = [dmenu](https=//github.com/firecat53/networkmanager-dmenu)
|
||||||
- **Notification Client** = [dunst](https://github.com/dunst-project/dunst)
|
- **Notification Client** = [dunst](https=//github.com/dunst-project/dunst)
|
||||||
|
Loading…
Reference in New Issue
Block a user