Yessiest
2 years ago
6 changed files with 245 additions and 24 deletions
-
31desktop.conf
-
47libs/parser_test.lua
-
82libs/parsers.lua
-
16libs/utils.lua
-
67modules/binds.lua
-
26modules/global.lua
@ -0,0 +1,31 @@ |
|||
# Global variables |
|||
[global] |
|||
terminal = "$HOME/.local/bin/st" |
|||
browser = "prime-run librewolf" |
|||
modkey = "Mod4" |
|||
theme = "reno98" |
|||
shell = "zsh" |
|||
|
|||
# Keybindings |
|||
# Format: <modifier>(+<modifier>+...)+<key> = "<command or :internal.function>" |
|||
# "modkey" as modifier will be substituted for modkey variable in [global] |
|||
[keys] |
|||
modkey+Up = ":root.client_next" |
|||
modkey+Down = ":root.client_previous" |
|||
modkey+Control+Up = ":root.screen_next" |
|||
modkey+Control+Down = ":root.screen_previous" |
|||
modkey+Tab = ":root.client_swap" |
|||
modkey+Return = ":root.spawn_terminal" |
|||
modkey+Shift+Return = ":root.spawn_browser" |
|||
|
|||
# Client keys only work if a focused client exists |
|||
modkey+Shift+c = ":client.kill" |
|||
modkey+t = ":client.cycle_screen" |
|||
modkey+o = ":client.ontop" |
|||
modkey+b = ":client.below" |
|||
modkey+f = ":client.fullscreen" |
|||
modkey+n = ":client.minimize" |
|||
modkey+m = ":client.maximize" |
|||
|
|||
# Custom keys |
|||
modkey+v = "notify-send test" |
@ -0,0 +1,47 @@ |
|||
-- This file is part of Reno desktop. |
|||
-- |
|||
-- Reno desktop is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. |
|||
-- |
|||
-- Reno desktop is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. |
|||
-- |
|||
-- You should have received a copy of the GNU General Public License along with Reno desktop. If not, see <https://www.gnu.org/licenses/>. |
|||
|
|||
local parsers = require("parsers") |
|||
-- Conf parser |
|||
local data = [[ |
|||
# Global variables |
|||
[global] |
|||
terminal = "$HOME/.local/bin/st" |
|||
browser = "prime-run librewolf" |
|||
modkey = "Mod4" |
|||
theme = "reno98" |
|||
shell = "zsh" |
|||
|
|||
# Keybindings |
|||
# Format: <modifier>(+<modifier>+...)+<key> = "<command or :internal.function>" |
|||
# "modkey" as modifier will be substituted for modkey variable in [global] |
|||
[keys] |
|||
modkey+Up = ":root.client_next" |
|||
modkey+Down = ":root.client_previous" |
|||
modkey+Control+Up = ":root.screen_next" |
|||
modkey+Control+Down = ":root.screen_previous" |
|||
modkey+Tab = ":root.client_swap" |
|||
modkey+Return = ":root.spawn_terminal" |
|||
modkey+Shift+Return = ":root.spawn_browser" |
|||
|
|||
# Client keys only work if a focused client exists |
|||
modkey+Shift+c = ":client.kill" |
|||
modkey+t = ":client.cycle_screen" |
|||
modkey+o = ":client.ontop" |
|||
modkey+b = ":client.below" |
|||
modkey+f = ":client.fullscreen" |
|||
modkey+n = ":client.minimize" |
|||
modkey+m = ":client.maximize" |
|||
|
|||
]] |
|||
for k,v in pairs(parsers.conf(data)) do |
|||
print("Block: ["..k.."]") |
|||
for kk,vv in pairs(v) do |
|||
print(kk,vv) |
|||
end |
|||
end |
@ -0,0 +1,82 @@ |
|||
-- This file is part of Reno desktop. |
|||
-- |
|||
-- Reno desktop is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. |
|||
-- |
|||
-- Reno desktop is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. |
|||
-- |
|||
-- You should have received a copy of the GNU General Public License along with Reno desktop. If not, see <https://www.gnu.org/licenses/>. |
|||
|
|||
-- Various utilitiy parsers |
|||
local parsers = {} |
|||
|
|||
local function split_strings(text) |
|||
-- probably the cleanest function to split by strings i've written |
|||
local split = {} |
|||
while text:find("\"") do |
|||
local strstart = text:find("\"") |
|||
while text:sub(strstart-1,strstart-1) == "\\" do |
|||
strstart = text:find("\"",strstart+1) |
|||
end |
|||
local strend = text:find("\"",strstart+1) |
|||
while text:sub(strend-1,strend-1) == "\\" do |
|||
strend = text:find("\"",strend+1) |
|||
end |
|||
if not strend then |
|||
return nil, "String not closed at "..strstart |
|||
end |
|||
local before_string = text:sub(1,strstart-1) |
|||
local string = text:sub(strstart,strend):gsub("\\\"","\"") |
|||
text = text:sub(strend+1,-1) |
|||
table.insert(split,before_string) |
|||
table.insert(split,string) |
|||
end |
|||
table.insert(split,text) |
|||
return split |
|||
end |
|||
|
|||
parsers.conf = function(cfgtext) |
|||
cfgtext = cfgtext:gsub("#[^\n]*","") |
|||
local split_by_strings,err = split_strings(cfgtext) |
|||
if not split_by_strings then |
|||
error(err) |
|||
end |
|||
local struct = {global = {}} |
|||
local block = "global" |
|||
local last_string_key = nil |
|||
local err |
|||
for k,v in pairs(split_by_strings) do |
|||
if not v:match("^\".*\"$") then |
|||
v:gsub("[^\n]*",function(line) |
|||
-- Nothing |
|||
if line:match("^%s*$") then |
|||
return |
|||
end |
|||
-- Namespace block |
|||
if line:match("^%s*%[[^%]]-%]%s*$") then |
|||
block = line:match("%[([^%]]-)%]") |
|||
struct[block] = {} |
|||
return |
|||
end |
|||
-- String/Multiline string assignment |
|||
if line:match("^%s*[^=]-%s*=%s*$") then |
|||
last_string_key = line:match("^%s*([^=]-)%s*=%s*$") |
|||
return |
|||
end |
|||
-- Number/boolean assignment |
|||
local key,value = line:match("^%s*([^=]-)%s*=%s*(.-)%s*$") |
|||
-- number |
|||
if value:match("^[%d%.]*$") then |
|||
value = tonumber(value) |
|||
-- bool |
|||
elseif (value:lower() == "yes") or (value:lower() == "no") then |
|||
value = (value:lower() == "yes") |
|||
end |
|||
struct[block][key] = value |
|||
end) |
|||
else |
|||
struct[block][last_string_key] = v:sub(2,-2) |
|||
end |
|||
end |
|||
return struct |
|||
end |
|||
return parsers |
@ -0,0 +1,16 @@ |
|||
-- This file is part of Reno desktop. |
|||
-- |
|||
-- Reno desktop is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. |
|||
-- |
|||
-- Reno desktop is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. |
|||
-- |
|||
-- You should have received a copy of the GNU General Public License along with Reno desktop. If not, see <https://www.gnu.org/licenses/>. |
|||
|
|||
-- Various utilities that are not included into awesomewm |
|||
local utils = {} |
|||
utils.substitute_env = function(str) |
|||
return str:gsub("$[%w_]+",function(var) |
|||
return os.getenv(var:sub(2,-1)) or "" |
|||
end) |
|||
end |
|||
return utils |
Write
Preview
Loading…
Cancel
Save
Reference in new issue