Skip to content
This repository has been archived by the owner on Aug 30, 2024. It is now read-only.

Commit

Permalink
Merge pull request #2 from flick0/main
Browse files Browse the repository at this point in the history
add some parser functionality (parse blocks and group them into global, input, general, etc...)
  • Loading branch information
NotAShelf authored Nov 7, 2022
2 parents 075b31e + 13c4e47 commit 8d7cf9d
Show file tree
Hide file tree
Showing 6 changed files with 717 additions and 247 deletions.
5 changes: 3 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@

module notashelf.dev/hyprkeys

go 1.19
go 1.19

require github.com/oleiade/reflections v1.0.1 // indirect
8 changes: 8 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/oleiade/reflections v1.0.1 h1:D1XO3LVEYroYskEsoSiGItp9RUxG6jWnCVvrqH0HHQM=
github.com/oleiade/reflections v1.0.1/go.mod h1:rdFxbxq4QXVZWj0F+e9jqjDkc7dbp97vkRixKo2JR60=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
83 changes: 52 additions & 31 deletions hyprkeys.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,14 @@ package main

import (
"bufio"
"encoding/json"
"fmt"
"io/ioutil"
"os"
"regexp"
"strings"

parser "notashelf.dev/hyprkeys/util/parser"
)

// Read Hyprland configuration file and return lines that start with bind= and bindm=
Expand Down Expand Up @@ -123,45 +127,62 @@ func keybindsToMarkdown(kbKeybinds, mKeybinds []string) []string {
func main() {
kbKeybinds, mKeybinds, variables, variableMap := readHyprlandConfig()

// If --verbose is passed as an argument, print the keybinds
// to the terminal
if len(os.Args) > 1 && os.Args[1] == "--verbose" {
for _, keybind := range kbKeybinds {
fmt.Println(keybind)
if len(os.Args) > 1 {

}
for _, keybind := range mKeybinds {
println(keybind)
}
}
// If --verbose is passed as an argument, print the keybinds
// to the terminal
if os.Args[1] == "--verbose" {
for _, keybind := range kbKeybinds {
fmt.Println(keybind)

// If --markdown is passed as an argument, print the keybinds
// as a markdown table
if len(os.Args) > 1 && os.Args[1] == "--markdown" {
markdown := keybindsToMarkdown(kbKeybinds, mKeybinds)
println("| Keybind | Dispatcher | Command |")
println("|---------|------------|---------|")
for _, row := range markdown {
println(row)
}
for _, keybind := range mKeybinds {
println(keybind)
}
}
}

if len(os.Args) > 1 && os.Args[1] == "--variables" {
for _, variable := range variables {
println(variable)
// If --markdown is passed as an argument, print the keybinds
// as a markdown table
if os.Args[1] == "--markdown" {
markdown := keybindsToMarkdown(kbKeybinds, mKeybinds)
println("| Keybind | Dispatcher | Command |")
println("|---------|------------|---------|")
for _, row := range markdown {
println(row)
}
}

// Now we replace the variables in the markdown table with their values
// and print the table if --markdown is also passed as an argument
markdown := keybindsToMarkdown(kbKeybinds, mKeybinds)
println("| Keybind | Dispatcher | Command |")
println("|---------|------------|---------|")
for _, row := range markdown {
for key, value := range variableMap {
if os.Args[1] == "--variables" {
for _, variable := range variables {
println(variable)
}

// Now we replace the variables in the markdown table with their values
// and print the table if --markdown is also passed as an argument
markdown := keybindsToMarkdown(kbKeybinds, mKeybinds)
println("| Keybind | Dispatcher | Command |")
println("|---------|------------|---------|")
for _, row := range markdown {
for key, value := range variableMap {

row = strings.ReplaceAll(row, key, value)
}
println(row)
}
}

row = strings.ReplaceAll(row, key, value)
if os.Args[1] == "--blocks" {
file, err := ioutil.ReadFile("test/hyprland.conf")
if err != nil {
panic(err)
}
content := string(file)
config := parser.Parse(content)
data, err := json.MarshalIndent(config, "", " ")
if err != nil {
fmt.Println(err)
}
println(row)
fmt.Printf("%s\n", data)
}
}
}
168 changes: 153 additions & 15 deletions test/hyprland.conf
Original file line number Diff line number Diff line change
@@ -1,20 +1,158 @@
$var1=var1
$var2=var2
$var3=var3
$var4=var4
# This is an example Hyprland config file.
#
# Refer to the wiki for more information.

$MODKEY=SUPER
#
# Please note not all available settings / options are set here.
# For a full list, see the wiki
#

bind=MOD, L, exec, nospace
bind=, L, exec, space
# See https://wiki.hyprland.org/Configuring/Monitors/
monitor=,preferred,auto,1

bindm=SUPER,mouse:420,movewindow
bindm=, mouse:69, resizewindow

bind=$MODKEY,L,exec,$var1
bind=$MODKEY, R, exec, $var2
bind=,R,exec,$var3
bind=, R, exec, $var3
# See https://wiki.hyprland.org/Configuring/Keywords/ for more

bindlm=, mouse:69, resizewindow2
bindlrfuckme=, mouse:69, resizewindow2
# Execute your favorite apps at launch
# exec-once = waybar & hyprpaper & firefox

# Source a file (multi-file configs)
# source = ~/.config/hypr/myColors.conf

# For all categories, see https://wiki.hyprland.org/Configuring/Variables/
input {
kb_layout = us
kb_variant =
kb_model =
kb_options =
kb_rules =

follow_mouse = 1

touchpad {
natural_scroll = no
}

sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
}

general {
# See https://wiki.hyprland.org/Configuring/Variables/ for more

gaps_in = 5
gaps_out = 20
border_size = 2
col.active_border = rgba(1affffee)
col.inactive_border = rgba(595959aa)

layout = dwindle
}

decoration {
# See https://wiki.hyprland.org/Configuring/Variables/ for more

rounding = 10
blur = yes
blur_size = 3
blur_passes = 1
blur_new_optimizations = on

drop_shadow = yes
shadow_range = 4
shadow_render_power = 3
col.shadow = rgba(1a1a1aee)
}

animations {
enabled = yes

# Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more

bezier = myBezier, 0.05, 0.9, 0.1, 1.05

animation = windows, 1, 7, myBezier
animation = windowsOut, 1, 7, default, popin 80%
animation = border, 1, 10, default
animation = fade, 1, 7, default
animation = workspaces, 1, 6, default
}

dwindle {
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
preserve_split = yes # you probably want this
}

master {
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
new_is_master = true
}

gestures {
# See https://wiki.hyprland.org/Configuring/Variables/ for more
workspace_swipe = off
}

# Example per-device config
# See https://wiki.hyprland.org/Configuring/Keywords/#executing for more
device:epic mouse V1 {
sensitivity = -0.5
}

# Example windowrule v1
# windowrule = float, ^(kitty)$
# Example windowrule v2
# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more


# See https://wiki.hyprland.org/Configuring/Keywords/ for more
$mainMod = SUPER

# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
bind = $mainMod, Q, exec, kitty
bind = $mainMod, C, killactive,
bind = $mainMod, M, exit,
bind = $mainMod, E, exec, dolphin
bind = $mainMod, V, togglefloating,
bind = $mainMod, R, exec, wofi --show drun
bind = $mainMod, P, pseudo, # dwindle
bind = $mainMod, J, togglesplit, # dwindle

# Move focus with mainMod + arrow keys
bind = $mainMod, left, movefocus, l
bind = $mainMod, right, movefocus, r
bind = $mainMod, up, movefocus, u
bind = $mainMod, down, movefocus, d

# Switch workspaces with mainMod + [0-9]
bind = $mainMod, 1, workspace, 1
bind = $mainMod, 2, workspace, 2
bind = $mainMod, 3, workspace, 3
bind = $mainMod, 4, workspace, 4
bind = $mainMod, 5, workspace, 5
bind = $mainMod, 6, workspace, 6
bind = $mainMod, 7, workspace, 7
bind = $mainMod, 8, workspace, 8
bind = $mainMod, 9, workspace, 9
bind = $mainMod, 0, workspace, 10

# Move active window to a workspace with mainMod + SHIFT + [0-9]
bind = $mainMod SHIFT, 1, movetoworkspace, 1
bind = $mainMod SHIFT, 2, movetoworkspace, 2
bind = $mainMod SHIFT, 3, movetoworkspace, 3
bind = $mainMod SHIFT, 4, movetoworkspace, 4
bind = $mainMod SHIFT, 5, movetoworkspace, 5
bind = $mainMod SHIFT, 6, movetoworkspace, 6
bind = $mainMod SHIFT, 7, movetoworkspace, 7
bind = $mainMod SHIFT, 8, movetoworkspace, 8
bind = $mainMod SHIFT, 9, movetoworkspace, 9
bind = $mainMod SHIFT, 0, movetoworkspace, 10

# Scroll through existing workspaces with mainMod + scroll
bind = $mainMod, mouse_down, workspace, e+1
bind = $mainMod, mouse_up, workspace, e-1

# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow
Loading

0 comments on commit 8d7cf9d

Please sign in to comment.