Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
X
ximperconf
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Ximper Linux
ximperconf
Commits
632abb4d
Verified
Commit
632abb4d
authored
Jan 10, 2026
by
Kirill Unitsaev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
hyprland/vars: use HyprlandManager
parent
ac10bb4e
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
30 additions
and
168 deletions
+30
-168
keyboard-actions.go
hyprland/keyboard-actions.go
+8
-6
var-actions.go
hyprland/var-actions.go
+22
-162
No files found.
hyprland/keyboard-actions.go
View file @
632abb4d
...
...
@@ -31,23 +31,25 @@ func HyprlandGetKeyboardLayouts() (string, error) {
func
HyprlandSyncSystemLayouts
(
ctx
context
.
Context
,
cmd
*
cli
.
Command
)
error
{
force
:=
cmd
.
Bool
(
"force"
)
sysLayouts
,
err
:=
HyprlandGetKeyboardLayouts
(
)
manager
,
err
:=
GetHyprlandManager
(
ctx
)
if
err
!=
nil
{
return
fmt
.
Errorf
(
"не удалось получить системные раскладки: %w"
,
err
)
return
err
}
hyprLayouts
,
err
:=
HyprlandVarGet
(
"kb_layout"
)
sysLayouts
,
err
:=
HyprlandGetKeyboardLayouts
(
)
if
err
!=
nil
{
return
fmt
.
Errorf
(
"не удалось получить
kb_layout из Hyprland
: %w"
,
err
)
return
fmt
.
Errorf
(
"не удалось получить
системные раскладки
: %w"
,
err
)
}
hyprLayouts
:=
manager
.
GetVar
(
"kb_layout"
)
if
force
||
hyprLayouts
==
""
{
if
_
,
err
:=
HyprlandVarSet
(
"kb_layout"
,
sysLayouts
);
err
!=
nil
{
if
_
,
err
:=
manager
.
SetVar
(
"kb_layout"
,
sysLayouts
);
err
!=
nil
{
return
fmt
.
Errorf
(
"не удалось обновить kb_layout в Hyprland: %w"
,
err
)
}
color
.
Green
(
"Раскладка обновлена!"
)
}
else
{
color
.
Red
(
"Раскладка уже установлена, используйте '--force' для принудительного обновления.
"
)
return
fmt
.
Errorf
(
"раскладка уже установлена, используйте '--force' для принудительного обновления
"
)
}
return
nil
...
...
hyprland/var-actions.go
View file @
632abb4d
...
...
@@ -6,10 +6,8 @@ import (
"ximperconf/ui"
"ximperconf/utils"
"bufio"
"fmt"
"os"
"path/filepath"
"regexp"
"strings"
...
...
@@ -17,70 +15,26 @@ import (
"github.com/urfave/cli/v3"
)
var
(
reVarLine
=
regexp
.
MustCompile
(
`^\s*\$([A-Za-z0-9_]+)\s*=\s*(.*)`
)
)
func
hyprlandVarList
()
([]
string
,
error
)
{
if
!
utils
.
FileExists
(
config
.
Env
.
Hyprland
.
Config
)
{
color
.
Red
(
"Конфигурация не найдена: %s"
,
config
.
Env
.
Hyprland
.
Config
)
return
nil
,
nil
}
f
,
err
:=
os
.
Open
(
config
.
Env
.
Hyprland
.
Config
)
func
HyprlandVarListCommand
(
ctx
context
.
Context
,
cmd
*
cli
.
Command
)
error
{
manager
,
err
:=
GetHyprlandManager
(
ctx
)
if
err
!=
nil
{
return
nil
,
err
return
err
}
defer
f
.
Close
()
var
vars
[]
string
sc
:=
bufio
.
NewScanner
(
f
)
for
sc
.
Scan
()
{
line
:=
sc
.
Text
()
if
m
:=
reVarLine
.
FindStringSubmatch
(
line
);
m
!=
nil
{
vars
=
append
(
vars
,
m
[
1
])
}
for
_
,
v
:=
range
manager
.
Vars
{
fmt
.
Println
(
v
.
Name
)
}
return
vars
,
nil
}
func
HyprlandVarListCommand
(
ctx
context
.
Context
,
cmd
*
cli
.
Command
)
error
{
vars
,
_
:=
hyprlandVarList
()
fmt
.
Println
(
strings
.
Join
(
vars
,
"
\n
"
))
return
nil
}
func
hyprlandVarInfo
()
(
map
[
string
]
string
,
error
)
{
if
!
utils
.
FileExists
(
config
.
Env
.
Hyprland
.
Config
)
{
color
.
Red
(
"Конфигурация не найдена: %s"
,
config
.
Env
.
Hyprland
.
Config
)
os
.
Exit
(
1
)
}
f
,
err
:=
os
.
Open
(
config
.
Env
.
Hyprland
.
Config
)
func
HyprlandVarInfoCommand
(
ctx
context
.
Context
,
cmd
*
cli
.
Command
)
error
{
manager
,
err
:=
GetHyprlandManager
(
ctx
)
if
err
!=
nil
{
return
nil
,
err
return
err
}
defer
f
.
Close
()
vars
:=
make
(
map
[
string
]
string
)
sc
:=
bufio
.
NewScanner
(
f
)
for
sc
.
Scan
()
{
line
:=
sc
.
Text
()
if
m
:=
reVarLine
.
FindStringSubmatch
(
line
);
m
!=
nil
{
name
:=
m
[
1
]
value
:=
strings
.
TrimSpace
(
m
[
2
])
if
idx
:=
strings
.
Index
(
value
,
"#"
);
idx
!=
-
1
{
value
=
strings
.
TrimSpace
(
value
[
:
idx
])
}
vars
[
name
]
=
value
}
}
return
vars
,
nil
}
func
HyprlandVarInfoCommand
(
ctx
context
.
Context
,
cmd
*
cli
.
Command
)
error
{
info
,
_
:=
hyprlandVarInfo
()
info
:=
manager
.
GetVarList
()
if
len
(
info
)
==
0
{
color
.
Yellow
(
"Нет переменных в конфигурации"
)
...
...
@@ -88,13 +42,13 @@ func HyprlandVarInfoCommand(ctx context.Context, cmd *cli.Command) error {
}
items
:=
make
([]
ui
.
TreeItem
,
0
,
len
(
info
))
for
name
,
value
:=
range
info
{
desc
:=
value
for
_
,
v
:=
range
info
{
desc
:=
v
.
V
alue
if
desc
==
""
{
desc
=
"<empty>"
}
items
=
append
(
items
,
ui
.
TreeItem
{
Name
:
n
ame
,
Name
:
v
.
N
ame
,
Status
:
ui
.
StatusNo
,
Description
:
desc
,
})
...
...
@@ -111,122 +65,28 @@ func HyprlandVarInfoCommand(ctx context.Context, cmd *cli.Command) error {
return
nil
}
func
HyprlandVarGet
(
name
string
)
(
string
,
error
)
{
if
name
==
""
{
return
""
,
fmt
.
Errorf
(
"укажите имя переменной"
)
}
if
!
regexp
.
MustCompile
(
`^[A-Za-z_][A-Za-z0-9_]*$`
)
.
MatchString
(
name
)
{
return
""
,
fmt
.
Errorf
(
"недопустимое имя переменной: %s"
,
name
)
}
if
!
utils
.
FileExists
(
config
.
Env
.
Hyprland
.
Config
)
{
return
""
,
fmt
.
Errorf
(
"конфигурация не найдена: %s"
,
config
.
Env
.
Hyprland
.
Config
)
}
f
,
err
:=
os
.
Open
(
config
.
Env
.
Hyprland
.
Config
)
if
err
!=
nil
{
return
""
,
err
}
defer
f
.
Close
()
sc
:=
bufio
.
NewScanner
(
f
)
for
sc
.
Scan
()
{
line
:=
sc
.
Text
()
if
m
:=
reVarLine
.
FindStringSubmatch
(
line
);
m
!=
nil
&&
m
[
1
]
==
name
{
value
:=
strings
.
TrimSpace
(
m
[
2
])
if
idx
:=
strings
.
Index
(
value
,
"#"
);
idx
!=
-
1
{
value
=
strings
.
TrimSpace
(
value
[
:
idx
])
}
return
value
,
nil
}
}
return
""
,
fmt
.
Errorf
(
"переменная %s не найдена"
,
name
)
}
func
HyprlandVarGetCommand
(
ctx
context
.
Context
,
cmd
*
cli
.
Command
)
error
{
info
,
err
:=
HyprlandVarGet
(
cmd
.
Args
()
.
Get
(
0
)
)
v
:=
cmd
.
Args
()
.
Get
(
0
)
manager
,
err
:=
GetHyprlandManager
(
ctx
)
if
err
!=
nil
{
color
.
Red
(
err
.
Error
())
return
err
}
info
:=
manager
.
GetVar
(
v
)
if
info
==
""
{
return
fmt
.
Errorf
(
"переменная '%s' не установлена"
,
v
)
}
fmt
.
Println
(
info
)
return
nil
}
func
HyprlandVarSet
(
name
,
newValue
string
)
(
string
,
error
)
{
if
name
==
""
{
return
""
,
fmt
.
Errorf
(
"укажите имя переменной"
)
}
if
newValue
==
""
{
return
""
,
fmt
.
Errorf
(
"укажите новое значение"
)
}
if
!
regexp
.
MustCompile
(
`^[A-Za-z_][A-Za-z0-9_]*$`
)
.
MatchString
(
name
)
{
return
""
,
fmt
.
Errorf
(
"недопустимое имя переменной: %s"
,
name
)
}
path
:=
config
.
Env
.
Hyprland
.
Config
if
!
utils
.
FileExists
(
path
)
{
_
=
os
.
MkdirAll
(
filepath
.
Dir
(
path
),
0755
)
_
=
os
.
WriteFile
(
path
,
[]
byte
{},
0644
)
}
data
,
err
:=
os
.
ReadFile
(
path
)
if
err
!=
nil
{
return
""
,
err
}
lines
:=
strings
.
Split
(
string
(
data
),
"
\n
"
)
changed
:=
false
msg
:=
""
re
:=
regexp
.
MustCompile
(
`^\s*\$`
+
regexp
.
QuoteMeta
(
name
)
+
`\s*=`
)
for
i
,
l
:=
range
lines
{
if
re
.
MatchString
(
l
)
{
lines
[
i
]
=
fmt
.
Sprintf
(
"$%s = %s"
,
name
,
newValue
)
changed
=
true
msg
=
fmt
.
Sprintf
(
"Переменная %s обновлена: %s"
,
name
,
newValue
)
}
}
if
!
changed
{
var
insertAt
=
-
1
for
i
,
l
:=
range
lines
{
if
strings
.
Contains
(
l
,
"ПЕРЕМЕННЫЕ"
)
&&
strings
.
Contains
(
l
,
"VARS"
)
{
insertAt
=
i
+
1
break
}
}
if
insertAt
>=
0
{
// вставим после блока
before
:=
append
([]
string
{},
lines
[
:
insertAt
]
...
)
after
:=
append
([]
string
{
fmt
.
Sprintf
(
"$%s = %s"
,
name
,
newValue
)},
lines
[
insertAt
:
]
...
)
lines
=
append
(
before
,
after
...
)
msg
=
fmt
.
Sprintf
(
"Переменная %s добавлена: %s"
,
name
,
newValue
)
}
else
{
// создаём блок VARS
lines
=
append
(
lines
,
""
,
"#---------- ПЕРЕМЕННЫЕ ---- VARS"
,
fmt
.
Sprintf
(
"$%s = %s"
,
name
,
newValue
),
)
msg
=
fmt
.
Sprintf
(
"Блок VARS создан, переменная %s добавлена: %s"
,
name
,
newValue
)
}
}
err
=
os
.
WriteFile
(
path
,
[]
byte
(
strings
.
Join
(
lines
,
"
\n
"
)),
0644
)
func
HyprlandVarSetCommand
(
ctx
context
.
Context
,
cmd
*
cli
.
Command
)
error
{
manager
,
err
:=
GetHyprlandManager
(
ctx
)
if
err
!=
nil
{
return
""
,
err
return
err
}
return
msg
,
nil
}
func
HyprlandVarSetCommand
(
ctx
context
.
Context
,
cmd
*
cli
.
Command
)
error
{
msg
,
err
:=
HyprlandVarSet
(
cmd
.
Args
()
.
Get
(
0
),
cmd
.
Args
()
.
Get
(
1
))
msg
,
err
:=
manager
.
SetVar
(
cmd
.
Args
()
.
Get
(
0
),
cmd
.
Args
()
.
Get
(
1
))
if
err
!=
nil
{
color
.
Red
(
err
.
Error
())
return
err
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment