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