testing ags again-.-
@@ -1,15 +0,0 @@
|
||||
|
||||
# Starter Config
|
||||
|
||||
if suggestions don't work, first make sure
|
||||
you have TypeScript LSP working in your editor
|
||||
|
||||
if you do not want typechecking only suggestions
|
||||
|
||||
```json
|
||||
// tsconfig.json
|
||||
"checkJs": false
|
||||
```
|
||||
|
||||
types are symlinked to:
|
||||
/home/cnst/.local/share/com.github.Aylur.ags/types
|
||||
1
home/core/gui/ags/assets/icons/ai-openai-symbolic.svg
Normal file
@@ -0,0 +1 @@
|
||||
openai-symbolic.svg
|
||||
54
home/core/gui/ags/assets/icons/ai-oxygen-symbolic.svg
Normal file
@@ -0,0 +1,54 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="20"
|
||||
height="20"
|
||||
viewBox="0 0 20 20"
|
||||
fill="none"
|
||||
version="1.1"
|
||||
id="svg9"
|
||||
sodipodi:docname="oxygen.svg"
|
||||
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs9" />
|
||||
<sodipodi:namedview
|
||||
id="namedview9"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="7.6782609"
|
||||
inkscape:cx="-11.916761"
|
||||
inkscape:cy="11.786523"
|
||||
inkscape:window-width="1627"
|
||||
inkscape:window-height="1028"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg9" />
|
||||
<g
|
||||
id="g9"
|
||||
transform="translate(0.7158741,-0.307456)">
|
||||
<path
|
||||
d="m 12.821126,8.892686 c 0,2.99523 -2.42813,5.42337 -5.4233602,5.42337 -2.99523,0 -5.42334,-2.42814 -5.42334,-5.42337 0,-2.99523 2.42811,-5.42334 5.42334,-5.42334 2.9952302,0 5.4233602,2.42811 5.4233602,5.42334 z"
|
||||
fill="white"
|
||||
id="path7"
|
||||
style="fill:#000000" />
|
||||
<path
|
||||
d="m 16.593826,4.412536 c 0,1.04182 -0.8445,1.88638 -1.8863,1.88638 -1.0419,0 -1.8864,-0.84456 -1.8864,-1.88638 0,-1.041819 0.8445,-1.88638 1.8864,-1.88638 1.0418,0 1.8863,0.844561 1.8863,1.88638 z"
|
||||
fill="white"
|
||||
id="path8"
|
||||
style="fill:#000000" />
|
||||
<path
|
||||
d="m 16.593826,15.495056 c 0,1.4325 -1.1612,2.5937 -2.5937,2.5937 -1.4325,0 -2.5938,-1.1612 -2.5938,-2.5937 0,-1.4325 1.1613,-2.5938 2.5938,-2.5938 1.4325,0 2.5937,1.1613 2.5937,2.5938 z"
|
||||
fill="white"
|
||||
id="path9"
|
||||
style="fill:#000000" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.9 KiB |
BIN
home/core/gui/ags/assets/icons/ai-zukijourney.png
Normal file
|
After Width: | Height: | Size: 306 KiB |
113
home/core/gui/ags/assets/icons/arch-symbolic.svg
Normal file
@@ -0,0 +1,113 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
version="1.0"
|
||||
width="20"
|
||||
height="19.999941"
|
||||
id="svg2424"
|
||||
sodipodi:docname="archlinux-logo-black-scalable.f931920e6cdb.svg"
|
||||
viewBox="0 0 166.18749 166.187"
|
||||
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="16.650008"
|
||||
inkscape:cx="13.093087"
|
||||
inkscape:cy="16.366359"
|
||||
inkscape:window-width="1340"
|
||||
inkscape:window-height="768"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g2424" />
|
||||
<defs
|
||||
id="defs2426">
|
||||
<linearGradient
|
||||
x1="112.49854"
|
||||
y1="6.1372099"
|
||||
x2="112.49853"
|
||||
y2="129.3468"
|
||||
id="path1082_2_"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(287,-83)">
|
||||
<stop
|
||||
id="stop193"
|
||||
style="stop-color:#ffffff;stop-opacity:0"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop195"
|
||||
style="stop-color:#ffffff;stop-opacity:0.27450982"
|
||||
offset="1" />
|
||||
<midPointStop
|
||||
offset="0"
|
||||
style="stop-color:#FFFFFF"
|
||||
id="midPointStop197" />
|
||||
<midPointStop
|
||||
offset="0.5"
|
||||
style="stop-color:#FFFFFF"
|
||||
id="midPointStop199" />
|
||||
<midPointStop
|
||||
offset="1"
|
||||
style="stop-color:#000000"
|
||||
id="midPointStop201" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="541.33502"
|
||||
y1="104.50665"
|
||||
x2="606.91248"
|
||||
y2="303.14029"
|
||||
id="linearGradient2544"
|
||||
xlink:href="#path1082_2_"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-0.3937741,0,0,0.393752,357.51969,122.00151)" />
|
||||
<linearGradient
|
||||
id="linearGradient3388">
|
||||
<stop
|
||||
id="stop3390"
|
||||
style="stop-color:#000000;stop-opacity:0"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop3392"
|
||||
style="stop-color:#000000;stop-opacity:0.37113401"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="490.72305"
|
||||
y1="237.72447"
|
||||
x2="490.72305"
|
||||
y2="183.9644"
|
||||
id="linearGradient4416"
|
||||
xlink:href="#linearGradient3388"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.749107,0,0,0.749107,-35.459862,91.44108)" />
|
||||
</defs>
|
||||
<g
|
||||
transform="translate(-57.527313,-146.42741)"
|
||||
id="layer1">
|
||||
<g
|
||||
transform="matrix(0.8746356,0,0,0.8746356,14.730518,23.408954)"
|
||||
id="g2424"
|
||||
style="fill:#000000">
|
||||
<g
|
||||
transform="matrix(0.6378586,0,0,0.6378586,36.486487,2.17139)"
|
||||
id="g2809"
|
||||
style="fill:#000000;fill-opacity:1" />
|
||||
<path
|
||||
d="m 143.91698,140.65081 c -8.45709,20.73453 -13.55799,34.29734 -22.97385,54.41552 5.7731,6.11948 12.85931,13.24593 24.36729,21.29458 -12.37221,-5.09109 -20.81157,-10.20242 -27.11844,-15.50646 -12.0505,25.14523 -30.930177,60.96349 -69.243121,129.80406 30.112687,-17.38458 53.455511,-28.10236 75.209891,-32.19198 -0.93414,-4.01773 -1.46524,-8.36369 -1.42916,-12.89823 l 0.0357,-0.96469 c 0.47781,-19.2924 10.51371,-34.12825 22.40218,-33.12093 11.88848,1.00732 21.12927,17.4729 20.65146,36.76531 -0.0899,3.63022 -0.49934,7.12245 -1.21479,10.36146 21.51819,4.20934 44.61141,14.89968 74.31666,32.04906 -5.85729,-10.78369 -11.08544,-20.5044 -16.07812,-29.7624 -7.86429,-6.09535 -16.06714,-14.02847 -32.79938,-22.61656 11.50078,2.98839 19.73519,6.43619 26.15375,10.29 -50.76203,-94.51003 -54.87267,-107.06846 -72.2801,-147.91874 z"
|
||||
id="path2518"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.14333" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.1 KiB |
318
home/core/gui/ags/assets/icons/cachyos-symbolic.svg
Normal file
@@ -0,0 +1,318 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
id="SVGRoot"
|
||||
width="20"
|
||||
height="20"
|
||||
version="1.1"
|
||||
viewBox="0 0 17.921003 17.921002"
|
||||
sodipodi:docname="cachyos-symbolic.svg"
|
||||
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview30"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="32"
|
||||
inkscape:cx="10.671875"
|
||||
inkscape:cy="11.234375"
|
||||
inkscape:window-width="1687"
|
||||
inkscape:window-height="1028"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="SVGRoot" />
|
||||
<defs
|
||||
id="defs6">
|
||||
<linearGradient
|
||||
id="linearGradient939"
|
||||
x1="237.19"
|
||||
x2="237.07001"
|
||||
y1="296.20001"
|
||||
y2="304.07999"
|
||||
gradientTransform="matrix(0.04476,0,0,0.044679,-8.5042241,-4.351186)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
xlink:href="#linearGradient937" />
|
||||
<linearGradient
|
||||
id="linearGradient937">
|
||||
<stop
|
||||
stop-color="#001313"
|
||||
offset="0"
|
||||
id="stop1" />
|
||||
<stop
|
||||
stop-color="#001313"
|
||||
stop-opacity="0"
|
||||
offset="1"
|
||||
id="stop2" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5185"
|
||||
x1="994.81"
|
||||
x2="982.34003"
|
||||
y1="1533.3"
|
||||
y2="1556.8"
|
||||
gradientTransform="matrix(0.084141,0,0,0.083989,-76.242924,-126.39098)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
xlink:href="#linearGradient4353" />
|
||||
<linearGradient
|
||||
id="linearGradient4353">
|
||||
<stop
|
||||
stop-color="#020202"
|
||||
offset="0"
|
||||
id="stop3" />
|
||||
<stop
|
||||
stop-color="#020202"
|
||||
stop-opacity="0"
|
||||
offset="1"
|
||||
id="stop4" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient9102"
|
||||
x1="1022.5"
|
||||
x2="1018.6"
|
||||
y1="1582.4"
|
||||
y2="1575.6"
|
||||
gradientTransform="matrix(0.086381,0,0,0.081808,-79.103924,-124.69099)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
xlink:href="#linearGradient4353" />
|
||||
<linearGradient
|
||||
id="linearGradient11890"
|
||||
x1="940.42999"
|
||||
x2="930.59003"
|
||||
y1="1612.5"
|
||||
y2="1594.5"
|
||||
gradientTransform="matrix(0.084141,0,0,0.083989,-76.242924,-126.39098)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
xlink:href="#linearGradient4353" />
|
||||
<linearGradient
|
||||
id="linearGradient11670"
|
||||
x1="965.59998"
|
||||
x2="951.65997"
|
||||
y1="1571.4"
|
||||
y2="1571.3"
|
||||
gradientTransform="matrix(0.084141,0,0,0.083989,-76.242924,-126.39098)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
xlink:href="#linearGradient4353" />
|
||||
<linearGradient
|
||||
id="linearGradient13770"
|
||||
x1="946.22998"
|
||||
x2="961.37"
|
||||
y1="1655.9"
|
||||
y2="1655.8"
|
||||
gradientTransform="matrix(0.084141,0,0,0.083989,-76.242924,-126.39098)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
xlink:href="#linearGradient4353" />
|
||||
<linearGradient
|
||||
id="linearGradient2816"
|
||||
x1="366.14999"
|
||||
x2="350.92001"
|
||||
y1="427.32001"
|
||||
y2="419.64001"
|
||||
gradientTransform="matrix(0.04476,0,0,0.044679,-10.832924,-4.155886)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
xlink:href="#linearGradient937" />
|
||||
<linearGradient
|
||||
id="linearGradient12421"
|
||||
x1="936.34003"
|
||||
x2="933.38"
|
||||
y1="1628.8"
|
||||
y2="1623"
|
||||
gradientTransform="matrix(0.084141,0,0,0.083989,-76.242924,-126.39098)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
xlink:href="#linearGradient4353" />
|
||||
<linearGradient
|
||||
id="linearGradient13391"
|
||||
x1="950.33002"
|
||||
x2="941.96997"
|
||||
y1="1618.6"
|
||||
y2="1645.8"
|
||||
gradientTransform="matrix(0.084141,0,0,0.083989,-76.242924,-126.39098)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
xlink:href="#linearGradient4353" />
|
||||
<linearGradient
|
||||
id="linearGradient13599"
|
||||
x1="1008.2"
|
||||
x2="1015.7"
|
||||
y1="1681.3"
|
||||
y2="1668.4"
|
||||
gradientTransform="matrix(0.084141,0,0,0.083989,-77.884838,-124.43841)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
xlink:href="#linearGradient4353" />
|
||||
<linearGradient
|
||||
id="linearGradient18175"
|
||||
x1="1148.3"
|
||||
x2="1145.4"
|
||||
y1="1585.5"
|
||||
y2="1630"
|
||||
gradientTransform="matrix(0.34992,0,0,0.34992,-282.87,-491.67)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
xlink:href="#linearGradient18299" />
|
||||
<linearGradient
|
||||
id="linearGradient18299">
|
||||
<stop
|
||||
stop-color="#008066"
|
||||
stop-opacity="0"
|
||||
offset="0"
|
||||
id="stop5" />
|
||||
<stop
|
||||
stop-color="#0fc"
|
||||
offset="1"
|
||||
id="stop6" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient18632"
|
||||
x1="1148.3"
|
||||
x2="1145.4"
|
||||
y1="1585.5"
|
||||
y2="1630"
|
||||
gradientTransform="matrix(0.26565,0,0,0.26565,-211.15,-375.49)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
xlink:href="#linearGradient18299" />
|
||||
<linearGradient
|
||||
id="linearGradient18659"
|
||||
x1="1148.3"
|
||||
x2="1145.4"
|
||||
y1="1585.5"
|
||||
y2="1630"
|
||||
gradientTransform="matrix(0.13679,0,0,0.13679,-53.624,-195.03)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
xlink:href="#linearGradient18299" />
|
||||
<linearGradient
|
||||
id="linearGradient3254"
|
||||
x1="348.04999"
|
||||
x2="361.20999"
|
||||
y1="194.78"
|
||||
y2="187.24001"
|
||||
gradientTransform="matrix(0.04476,0,0,0.044679,-10.832924,-4.155886)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
xlink:href="#linearGradient937" />
|
||||
</defs>
|
||||
<circle
|
||||
cx="87.449997"
|
||||
cy="87.449997"
|
||||
r="87.449997"
|
||||
opacity="0"
|
||||
stroke-width="0.27971"
|
||||
id="circle6" />
|
||||
<path
|
||||
d="m 4.0610759,2.168314 6.5887001,3.6879 2.1127,-3.6528 z"
|
||||
fill="#00aa88"
|
||||
id="path7"
|
||||
style="fill:#000000" />
|
||||
<path
|
||||
d="m 6.1499759,12.423014 -1.9125,3.7456 h 8.5747001 l 2.1664,-3.7456 z"
|
||||
fill="#00aa88"
|
||||
id="path8"
|
||||
style="fill:#7a7a7a;fill-opacity:0.68506807" />
|
||||
<path
|
||||
d="m 4.0610759,2.168314 6.5887001,3.6879 H 6.1237759 l -1.8859,3.2605 1.9121,3.306 -1.9125,3.7456 -4.13689997,-7.1525 3.96049997,-6.8475"
|
||||
fill="#00ccff"
|
||||
id="path9"
|
||||
style="fill:#7a7a7a;fill-opacity:0.69262218" />
|
||||
<path
|
||||
d="m 6.0909759,5.821714 6.7111001,-3.7832 -2.169,3.5579 z"
|
||||
fill="url(#linearGradient9102)"
|
||||
id="path12"
|
||||
style="fill:url(#linearGradient9102)" />
|
||||
<path
|
||||
d="m 6.1236759,5.856214 6.6388001,-3.6528 -2.1127,3.6528 z"
|
||||
fill="#00aa88"
|
||||
id="path13"
|
||||
style="fill:#000000" />
|
||||
<path
|
||||
d="m 0.10057593,9.015814 6.02309997,-3.1596 -1.8859,3.2605 z"
|
||||
fill="#00aa88"
|
||||
id="path14"
|
||||
style="fill:#1a1a1a" />
|
||||
<path
|
||||
d="m 6.1236759,5.856214 -2.0626,-3.6879 0.17673,6.9484 z"
|
||||
fill="#00aa88"
|
||||
id="path16"
|
||||
style="fill:#1a1a1a" />
|
||||
<path
|
||||
d="m 4.2378759,9.116714 -3.1586,1.5811 3.1583,5.4705 z"
|
||||
fill="#00aa88"
|
||||
id="path19"
|
||||
style="fill:#1a1a1a" />
|
||||
<path
|
||||
d="m 1.0792259,10.698014 5.0708,1.7248 -1.9121,-3.306 z"
|
||||
fill="#00aa88"
|
||||
id="path23"
|
||||
style="fill:#1a1a1a" />
|
||||
<g
|
||||
transform="matrix(0.14699,0,0,0.14672,-0.75949407,-0.14715599)"
|
||||
id="g26"
|
||||
style="fill:#1a1a1a">
|
||||
<circle
|
||||
cx="117.95"
|
||||
cy="75.441002"
|
||||
r="9.6893997"
|
||||
fill="#00ccff"
|
||||
id="circle25"
|
||||
style="fill:#1a1a1a" />
|
||||
<circle
|
||||
cx="118.08"
|
||||
cy="75.341003"
|
||||
r="9.6893997"
|
||||
fill="url(#linearGradient18175)"
|
||||
id="circle26"
|
||||
style="fill:#1a1a1a" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.14699,0,0,0.14672,-0.11248407,-0.47061599)"
|
||||
id="g28"
|
||||
style="fill:#1a1a1a">
|
||||
<circle
|
||||
cx="93.138"
|
||||
cy="55.044998"
|
||||
r="7.3558998"
|
||||
fill="#00ccff"
|
||||
id="circle27"
|
||||
style="fill:#1a1a1a" />
|
||||
<circle
|
||||
cx="93.238998"
|
||||
cy="54.969002"
|
||||
r="7.3558998"
|
||||
fill="url(#linearGradient18632)"
|
||||
id="circle28"
|
||||
style="fill:#1a1a1a" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.14699,0,0,0.14672,-0.08243407,-0.04714599)"
|
||||
id="g30"
|
||||
style="fill:#000000">
|
||||
<circle
|
||||
cx="103.06"
|
||||
cy="26.657"
|
||||
r="3.7876999"
|
||||
fill="#00ccff"
|
||||
id="circle29"
|
||||
style="fill:#000000" />
|
||||
<circle
|
||||
cx="103.11"
|
||||
cy="26.618"
|
||||
r="3.7876999"
|
||||
fill="url(#linearGradient18659)"
|
||||
id="circle30"
|
||||
style="fill:#000000" />
|
||||
</g>
|
||||
<path
|
||||
d="m 6.1236759,5.856214 -2.0626,-3.6879 0.52544,-0.0074 1.9387,3.4465 z"
|
||||
fill="url(#linearGradient3254)"
|
||||
id="path30"
|
||||
style="fill:url(#linearGradient3254)" />
|
||||
<path
|
||||
d="M 12.808567,16.168211 6.1524738,12.428132 4.2457352,16.165572 Z"
|
||||
fill="#00ccff"
|
||||
id="path17"
|
||||
style="fill:#1a1a1a;fill-opacity:1"
|
||||
sodipodi:nodetypes="cccc" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.0 KiB |
10
home/core/gui/ags/assets/icons/cloudflare-dns-symbolic.svg
Normal file
@@ -0,0 +1,10 @@
|
||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_26_18)">
|
||||
<path d="M3 7.06015V4.74436C4.12 4.69624 4.90412 4.62466 5.35237 4.52962C6.06664 4.37804 6.64769 4.07549 7.09553 3.62195C7.40205 3.31158 7.63448 2.89754 7.7928 2.37985C7.8839 2.06947 7.92946 1.8387 7.92946 1.68752H10.9001V19H7.25588V7.06015H3ZM12.4228 5.65444V4.52962L15.0783 1H16.1879V4.64211H17V5.65444H16.1879V7.05594H15.0084V5.65444H12.4228ZM14.9823 2.53985L13.4031 4.64511H15.0102V2.53985H14.9823Z" fill="black"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_26_18">
|
||||
<rect width="20" height="20" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 660 B |
65
home/core/gui/ags/assets/icons/crosshair-symbolic.svg
Normal file
@@ -0,0 +1,65 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
|
||||
<svg
|
||||
fill="#000000"
|
||||
width="20"
|
||||
height="20"
|
||||
viewBox="0 0 380.95238 380.95238"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="crosshair-symbolic.svg"
|
||||
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="35"
|
||||
inkscape:cx="10.371429"
|
||||
inkscape:cy="7.9571429"
|
||||
inkscape:window-width="1430"
|
||||
inkscape:window-height="1028"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<title
|
||||
id="title1">ionicons-v5_logos</title>
|
||||
<metadata
|
||||
id="metadata1">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:title>ionicons-v5_logos</dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<rect
|
||||
style="fill:#000000;stroke-width:23.0377"
|
||||
id="rect1"
|
||||
width="380.95239"
|
||||
height="57.142857"
|
||||
x="-3.5527137e-15"
|
||||
y="161.90475" />
|
||||
<rect
|
||||
style="fill:#000000;stroke-width:23.0451;stroke-dasharray:none"
|
||||
id="rect1-5"
|
||||
width="57.142857"
|
||||
height="380.95239"
|
||||
x="161.90475"
|
||||
y="0" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.8 KiB |
91
home/core/gui/ags/assets/icons/debian-symbolic.svg
Normal file
@@ -0,0 +1,91 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
|
||||
<svg
|
||||
width="20"
|
||||
height="20"
|
||||
viewBox="-30.5 0 317.00242 317.00243"
|
||||
version="1.1"
|
||||
preserveAspectRatio="xMidYMid"
|
||||
id="svg12"
|
||||
sodipodi:docname="debian-symbolic.svg"
|
||||
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs12" />
|
||||
<sodipodi:namedview
|
||||
id="namedview12"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="17.5"
|
||||
inkscape:cx="13.742857"
|
||||
inkscape:cy="12.628571"
|
||||
inkscape:window-width="1295"
|
||||
inkscape:window-height="867"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg12" />
|
||||
<g
|
||||
fill="#A80030"
|
||||
id="g12"
|
||||
style="fill:#1a1a1a"
|
||||
transform="translate(0.05835351,0.0538775)">
|
||||
<path
|
||||
d="m 152.79662,167.42537 c -5.25095,0.0731 0.9935,2.70583 7.84865,3.76069 1.8935,-1.47856 3.61167,-2.97466 5.14283,-4.42984 -4.26913,1.04609 -8.61424,1.06947 -12.99148,0.66915"
|
||||
id="path1"
|
||||
style="fill:#1a1a1a" />
|
||||
<path
|
||||
d="m 180.9799,160.40073 c 3.12661,-4.31588 5.40581,-9.04086 6.20938,-13.92654 -0.70129,3.4831 -2.59187,6.4899 -4.3714,9.66326 -9.81521,6.18016 -0.92337,-3.67011 -0.006,-7.41328 -10.55448,13.2837 -1.44934,7.96554 -1.83213,11.67656"
|
||||
id="path2"
|
||||
style="fill:#1a1a1a" />
|
||||
<path
|
||||
d="m 191.38244,133.33075 c 0.63409,-9.45579 -1.86135,-6.46652 -2.69999,-2.85777 0.9789,0.50844 1.75324,6.66522 2.69999,2.85777"
|
||||
id="path3"
|
||||
style="fill:#1a1a1a" />
|
||||
<path
|
||||
d="m 132.88569,4.0879643 c 2.80225,0.5025946 6.05451,0.8883068 5.59867,1.5574589 3.06524,-0.6720742 3.76069,-1.2915513 -5.59867,-1.5574589"
|
||||
id="path4"
|
||||
style="fill:#1a1a1a" />
|
||||
<path
|
||||
d="m 138.48436,5.6454232 -1.98116,0.4090887 1.84382,-0.1636355 0.13734,-0.2454532"
|
||||
id="path5"
|
||||
style="fill:#1a1a1a" />
|
||||
<path
|
||||
d="m 225.86569,136.91612 c 0.31266,8.49151 -2.48375,12.61162 -5.00549,19.90509 l -4.53796,2.26752 c -3.71394,7.21165 0.35941,4.57887 -2.29967,10.31487 -5.79737,5.15452 -17.59373,16.12979 -21.36903,17.13205 -2.75551,-0.0614 1.86719,-3.25225 2.47206,-4.50289 -7.76099,5.32984 -6.22691,8.0006 -18.09633,11.23824 l -0.34772,-0.77142 c -29.27322,13.77168 -69.93663,-13.52038 -69.40189,-50.75913 -0.31266,2.36394 -0.88831,1.77369 -1.537,2.7292 -1.51071,-19.15996 8.848,-38.40465 26.31901,-46.262078 17.08821,-8.459369 37.12187,-4.987959 49.36238,6.419768 -6.72366,-8.807092 -20.1067,-18.14308 -35.96765,-17.269383 -15.53661,0.245453 -30.07094,10.1191 -34.92156,20.837223 -7.9597,5.01133 -8.88307,19.31775 -12.351558,21.93592 -4.666532,34.29623 8.777878,49.11401 31.520278,66.54411 3.57953,2.41362 1.00811,2.77888 1.49318,4.61685 -7.55646,-3.53861 -14.4759,-8.88014 -20.16515,-15.41972 3.01849,4.41816 6.27659,8.71359 10.48728,12.08857 -7.12399,-2.41362 -16.64115,-17.26354 -19.42003,-17.8684 12.28143,21.98851 49.827,38.56245 69.48663,30.33976 -9.09638,0.33604 -20.65313,0.18702 -30.8745,-3.59121 -4.29251,-2.20908 -10.13079,-6.78503 -9.08761,-7.64119 26.83037,10.02267 54.54612,7.59151 77.7619,-11.0191 5.90549,-4.59932 12.3574,-12.4246 14.22168,-12.53272 -2.8081,4.22238 0.47921,2.03083 -1.67727,5.75938 5.88504,-9.49085 -2.5568,-3.86296 6.08374,-16.38984 l 3.19089,4.39478 c -1.18636,-7.87788 9.78306,-17.44471 8.66975,-29.90438 2.5159,-3.81037 2.80811,4.09965 0.13734,12.86584 3.70517,-9.72462 0.97597,-11.28793 1.92856,-19.31191 1.02857,2.69707 2.37856,5.56361 3.07109,8.4097 -2.41362,-9.39735 2.47791,-15.82589 3.68764,-21.28722 -1.1922,-0.52889 -3.72563,4.15517 -4.3042,-6.94574 0.0847,-4.8214 1.34123,-2.52759 1.82629,-3.71394 -0.94675,-0.54351 -3.4305,-4.23991 -4.9412,-11.328836 1.09577,-1.665575 2.9279,4.318806 4.41815,4.564256 -0.95843,-5.636653 -2.6094,-9.935006 -2.67661,-14.259657 -4.35387,-9.0993 -1.53992,1.212656 -5.07269,-3.906796 -4.63439,-14.45544 3.84543,-3.354527 4.41815,-9.923322 7.02464,10.177541 11.03079,25.950835 12.86876,32.484565 -1.40259,-7.965545 -3.67011,-15.68271 -6.4373,-23.148578 2.13311,0.897073 -3.43634,-16.389844 2.77304,-4.941206 -6.63308,-24.40506 -28.38783,-47.208829 -48.40103,-57.909419 2.44869,2.241221 5.54023,5.055166 4.42984,5.496398 -9.95254,-5.925941 -8.20223,-6.387627 -9.62819,-8.891834 -8.10872,-3.299008 -8.64054,0.265908 -14.01129,0.0058 -15.28238,-8.105755 -18.22782,-7.243747 -32.2917,-12.32229 l 0.63993,2.9892691 c -10.12494,-3.3720592 -11.79636,1.279863 -22.73948,0.011688 -0.66623,-0.520127 3.50647,-1.8818077 6.93989,-2.3814803 -9.7889,1.2915513 -9.33014,-1.9285607 -18.90866,0.3564916 2.36103,-1.656809 4.85647,-2.7525822 7.37529,-4.1610159 -7.98308,0.4850622 -19.05769,4.6460781 -15.63888,0.8620082 C 96.316085,8.9298206 73.190888,17.085295 60.214012,29.25276 L 59.804924,26.526476 C 53.858528,33.665073 33.874548,47.845838 32.282025,57.091242 l -1.589602,0.371102 C 27.59796,62.7016 25.596347,68.63923 23.141816,74.030433 19.09476,80.926499 17.21003,76.683665 17.785676,77.764828 9.8259803,93.903375 5.8724309,107.46466 2.4565407,118.58603 4.8906182,122.224 2.514982,140.48688 3.4354314,155.10304 -0.56194899,227.28965 54.098137,297.37822 113.84553,313.5606 c 8.75742,3.13245 21.78105,3.01264 32.85859,3.33407 -13.07039,-3.73732 -14.75934,-1.98116 -27.49076,-6.41977 -9.18404,-4.32465 -11.19734,-9.26293 -17.70185,-14.90836 l 2.57434,4.54965 c -12.757724,-4.51458 -7.419118,-5.58698 -17.798281,-8.8743 l 2.74966,-3.59121 c -4.134717,-0.31266 -10.951887,-6.96912 -12.816162,-10.65384 l -4.523352,0.17825 C 66.26268,270.46895 63.366917,265.63586 63.577306,261.8927 l -1.461031,2.60356 c -1.656809,-2.84317 -19.995669,-25.15019 -10.481436,-19.95768 -1.767847,-1.6159 -4.117185,-2.62986 -6.665222,-7.2584 l 1.937326,-2.21493 c -4.57887,-5.89087 -8.427226,-13.44148 -8.135019,-15.95737 2.442843,3.299 4.137639,3.91556 5.814902,4.47952 -11.562598,-28.68881 -12.211295,-1.58084 -20.968714,-29.20309 l 1.852587,-0.14902 c -1.420122,-2.13895 -2.28213,-4.46199 -3.424657,-6.7412 l 0.80649,-8.03567 c -8.324954,-9.62527 -2.328884,-40.9264 -1.127916,-58.09351 0.832787,-6.9808 6.948662,-14.41161 11.600585,-26.064789 l -2.8344,-0.487985 c 5.417502,-9.449947 30.932945,-37.951737 42.749763,-36.484862 5.724319,-7.191194 -1.136683,-0.0263 -2.255832,-1.837977 12.573631,-13.011941 16.527181,-9.192806 25.012848,-11.533378 9.1519,-5.432112 -7.854502,2.118495 -3.51524,-2.071741 15.82004,-4.041212 11.21195,-9.186962 31.85047,-11.23825 2.17694,1.238955 -5.05224,1.913951 -6.86684,3.521085 13.18142,-6.448991 41.71243,-4.982116 60.24414,3.579525 21.50346,10.04897 45.66306,39.75465 46.61565,67.704172 l 1.08409,0.2922 c -0.54935,11.10968 1.70064,23.95799 -2.19739,35.76019 l 2.65323,-5.58698"
|
||||
id="path6"
|
||||
style="fill:#1a1a1a" />
|
||||
<path
|
||||
d="m 95.483297,174.6341 -0.736359,3.68179 c 3.450955,4.68699 6.188932,9.76553 10.595392,13.4298 -3.17043,-6.18893 -5.525615,-8.74573 -9.859033,-17.11159"
|
||||
id="path7"
|
||||
style="fill:#1a1a1a" />
|
||||
<path
|
||||
d="m 103.64169,174.31267 c -1.82629,-2.01915 -2.90745,-4.4503 -4.117181,-6.87269 1.157141,4.25744 3.526931,7.91586 5.733081,11.63565 l -1.6159,-4.76296"
|
||||
id="path8"
|
||||
style="fill:#1a1a1a" />
|
||||
<path
|
||||
d="m 248.00323,142.93557 -0.77142,1.9344 c -1.41428,10.04605 -4.46784,19.98691 -9.14898,29.20309 5.17205,-9.72462 8.51781,-20.36093 9.9204,-31.13749"
|
||||
id="path9"
|
||||
style="fill:#1a1a1a" />
|
||||
<path
|
||||
d="M 133.92302,1.5691471 C 137.47332,0.26882968 142.65122,0.85616408 146.41775,0 141.50869,0.4120107 136.623,0.65746388 131.79868,1.279863 l 2.12434,0.2892841"
|
||||
id="path10"
|
||||
style="fill:#1a1a1a" />
|
||||
<path
|
||||
d="m 9.2824769,67.847351 c 0.8181771,7.573984 -5.6980203,10.513578 1.4434981,5.519774 3.827901,-8.623004 -1.4960952,-2.38148 -1.4434981,-5.519774"
|
||||
id="path11"
|
||||
style="fill:#1a1a1a" />
|
||||
<path
|
||||
d="M 0.89031567,102.9004 C 2.5354364,97.85108 2.8334867,94.81798 3.46173,91.895919 -1.084998,97.707899 1.3695338,98.946854 0.89031567,102.9004"
|
||||
id="path12"
|
||||
style="fill:#1a1a1a" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.3 KiB |
96
home/core/gui/ags/assets/icons/endeavouros-symbolic.svg
Normal file
@@ -0,0 +1,96 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="20mm"
|
||||
height="20mm"
|
||||
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
|
||||
sodipodi:docname="EndeavourOS Logo.svg"
|
||||
version="1.1"
|
||||
viewBox="0 0 48.231007 48.231007"
|
||||
id="svg8"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<defs
|
||||
id="defs8" />
|
||||
<sodipodi:namedview
|
||||
id="cvfa"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:current-layer="g3"
|
||||
inkscape:cx="52.728754"
|
||||
inkscape:cy="60.739468"
|
||||
inkscape:document-rotation="0"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-height="1028"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:window-width="1316"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:zoom="4.930896"
|
||||
pagecolor="#ffffff"
|
||||
showgrid="false"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1" />
|
||||
<title
|
||||
id="title1">EndeavourOS Logo</title>
|
||||
<metadata
|
||||
id="metadata1">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>EndeavourOS Logo</dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
transform="translate(-66.790568,-123.01834)"
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="Layer 1"
|
||||
id="g8">
|
||||
<g
|
||||
transform="translate(76.2,-12.7)"
|
||||
id="g7">
|
||||
<g
|
||||
transform="matrix(1.47,0,0,1.47,-519,105)"
|
||||
id="g6">
|
||||
<g
|
||||
transform="matrix(0.963,0,0,0.983,13.5,0.76)"
|
||||
id="g5">
|
||||
<g
|
||||
transform="matrix(0.678,0,0,0.678,452,49.2)"
|
||||
id="g3">
|
||||
<g
|
||||
id="g9"
|
||||
transform="translate(6.8384014e-4,3.6851185)">
|
||||
<path
|
||||
d="m -127,-42.3 c 4.57,6.45 23.8,31.4 10.7,36.6 -6.12,2.81 -34,-1.65 -33.6,-0.921 -2,3.28 -3.59,5.92 -3.59,5.92 0,0 21.5,0.967 38.1,-1.27 23.7,-3.18 -4.88,-33.5 -11.6,-40.3 z"
|
||||
style="fill:#333333;fill-opacity:0.7;stroke-width:0.585"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1" />
|
||||
<path
|
||||
d="m -127,-42.3 c -1.52,0.209 -29.4,34.5 -29.4,34.5 0,0 2.01,0.57 6.58,1.23 1.48,-1.15 22.3,-36.2 22.9,-35.7 -0.0107,-0.0141 -0.028,-0.0193 -0.0522,-0.016 z"
|
||||
style="fill:#333333;fill-opacity:0.7;stroke-width:0.585"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path2" />
|
||||
<path
|
||||
d="m -127,-42.3 c -0.96,-0.156 -22.9,35.7 -22.9,35.7 0,0 19.9,2.1 28.1,1.96 23.1,-0.39 0.176,-30.6 -5.16,-37.7 -0.007,-0.007 -0.0151,-0.0108 -0.0248,-0.0124 z"
|
||||
style="fill:#1a1a1a;stroke-width:0.585"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.3 KiB |
38
home/core/gui/ags/assets/icons/fedora-symbolic.svg
Normal file
@@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 448.00288 448.00288"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="Fa-Team-Fontawesome-Brands-FontAwesome-Brands-Fedora.svg"
|
||||
width="19.999744"
|
||||
height="19.999744"
|
||||
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="13.671875"
|
||||
inkscape:cx="19.2"
|
||||
inkscape:cy="17.664"
|
||||
inkscape:window-width="1313"
|
||||
inkscape:window-height="908"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<!--! Font Awesome Free 6.2.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. -->
|
||||
<path
|
||||
d="M 0.0413,223.8 C 0.1219,100.2 100.3,0 224,0 347.7,0 448,100.3 448,224 448,347.7 347.8,447.9 224.1,448 H 50.93 C 22.84,448 0.0832,425.3 0.0416,397.2 H 0 V 223.8 Z M 342.6,160.7 c 0,-39.7 -35.6,-68.5 -73.2,-68.5 -34.9,0 -65.8,26.3 -70.1,59.9 -0.2,3.8 -0.4,5 -0.4,8.5 -0.1,21.1 0,42.8 -0.8,64.4 0.9,26.1 1,52.1 0,76.6 0,27.1 -19.4,45.5 -44.7,45.5 -25.3,0 -45.8,-20.2 -45.8,-45.5 0.5,-27.7 22.6,-45.3 48.5,-46.1 h 0.2 l 26.3,-0.2 V 218 l -26.3,0.2 c -47.1,-0.4 -84.58,36.5 -85.94,83.4 0,45.6 37.54,82.9 83.04,82.9 43,0 78.7,-33.6 82.6,-75.6 l 0.2,-53.5 32.6,-0.3 c 25.3,0.2 25,-37.8 -0.2,-37.3 l -32.4,0.3 c 0,-6.4 0.1,-12.8 0.1,-19.2 0.1,-12.7 0.1,-25.4 -0.1,-38.2 0.1,-16.5 15.8,-31.2 33.2,-31.2 17.5,0 35.9,8.7 35.9,31.2 0,3.2 -0.1,5.1 -0.3,6.3 -1.9,10.5 5.2,20.4 15.7,21.9 10.6,1.5 20.2,-6.1 21.2,-16.6 0.6,-4.2 0.7,-7.9 0.7,-11.6 z"
|
||||
id="path1" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
52
home/core/gui/ags/assets/icons/flatpak-symbolic.svg
Normal file
@@ -0,0 +1,52 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
role="img"
|
||||
viewBox="0 0 24.000009 24.000009"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="flatpak_logo_icon_248537.svg"
|
||||
width="20"
|
||||
height="20"
|
||||
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="18.229167"
|
||||
inkscape:cx="11.190857"
|
||||
inkscape:cy="11.766857"
|
||||
inkscape:window-width="1164"
|
||||
inkscape:window-height="648"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<title
|
||||
id="title1">Flatpak</title>
|
||||
<path
|
||||
d="m 12.000004,7.3336774e-5 c -0.556,0 -1.110999,0.143999993226 -1.609999,0.431999993226 L 2.7870046,4.8220733 a 3.217,3.217 0 0 0 -1.61,2.788 v 8.7799997 c 0,1.151 0.612,2.212 1.61,2.788 l 7.6030004,4.39 a 3.217,3.217 0 0 0 3.219999,0 l 7.603,-4.39 a 3.217,3.217 0 0 0 1.61,-2.788 V 7.6100733 a 3.217,3.217 0 0 0 -1.61,-2.788 l -7.603,-4.38999997 a 3.218,3.218 0 0 0 -1.61,-0.431999993226 z m 0,2.357999963226 c 0.15,0 0.299,0.039 0.431,0.115 l 7.604,4.39 c 0.132,0.077 0.24,0.187 0.315,0.316 l -8.35,4.8209997 v 9.642 a 0.863,0.863 0 0 1 -0.431,-0.116 l -7.6039994,-4.39 a 0.866,0.866 0 0 1 -0.431,-0.746 V 7.6100733 c 0,-0.153 0.041,-0.302 0.116,-0.43 l 8.3499994,4.8199997 z"
|
||||
id="path1" />
|
||||
<metadata
|
||||
id="metadata1">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:title>Flatpak</dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
40
home/core/gui/ags/assets/icons/github-symbolic.svg
Normal file
@@ -0,0 +1,40 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="98"
|
||||
height="96"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="github-symbolic.svg"
|
||||
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="2.4081633"
|
||||
inkscape:cx="32.597458"
|
||||
inkscape:cy="46.716102"
|
||||
inkscape:window-width="1339"
|
||||
inkscape:window-height="1028"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
clip-rule="evenodd"
|
||||
d="M48.854 0C21.839 0 0 22 0 49.217c0 21.756 13.993 40.172 33.405 46.69 2.427.49 3.316-1.059 3.316-2.362 0-1.141-.08-5.052-.08-9.127-13.59 2.934-16.42-5.867-16.42-5.867-2.184-5.704-5.42-7.17-5.42-7.17-4.448-3.015.324-3.015.324-3.015 4.934.326 7.523 5.052 7.523 5.052 4.367 7.496 11.404 5.378 14.235 4.074.404-3.178 1.699-5.378 3.074-6.6-10.839-1.141-22.243-5.378-22.243-24.283 0-5.378 1.94-9.778 5.014-13.2-.485-1.222-2.184-6.275.486-13.038 0 0 4.125-1.304 13.426 5.052a46.97 46.97 0 0 1 12.214-1.63c4.125 0 8.33.571 12.213 1.63 9.302-6.356 13.427-5.052 13.427-5.052 2.67 6.763.97 11.816.485 13.038 3.155 3.422 5.015 7.822 5.015 13.2 0 18.905-11.404 23.06-22.324 24.283 1.78 1.548 3.316 4.481 3.316 9.126 0 6.6-.08 11.897-.08 13.526 0 1.304.89 2.853 3.316 2.364 19.412-6.52 33.405-24.935 33.405-46.691C97.707 22 75.788 0 48.854 0z"
|
||||
fill="#fff"
|
||||
id="path1"
|
||||
style="fill:#000000" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.9 KiB |
56
home/core/gui/ags/assets/icons/google-gemini-symbolic.svg
Normal file
@@ -0,0 +1,56 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
|
||||
<svg
|
||||
fill="#000000"
|
||||
width="20"
|
||||
height="20"
|
||||
viewBox="0 0 380.95238 380.95238"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="google-gemini-symbolic.svg"
|
||||
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="17.5"
|
||||
inkscape:cx="10.828571"
|
||||
inkscape:cy="16.971429"
|
||||
inkscape:window-width="1351"
|
||||
inkscape:window-height="981"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<title
|
||||
id="title1">ionicons-v5_logos</title>
|
||||
<path
|
||||
d="m 190.47617,352.20814 v 0 0 C 177.81956,268.68717 112.26524,203.13276 28.744252,190.4762 v 0 0 C 112.26524,177.81957 177.81956,112.26522 190.47617,28.744235 v 0 0 c 12.65659,83.520985 78.2109,149.075335 161.73196,161.731965 v 0 0 c -83.52106,12.65656 -149.07537,78.21097 -161.73196,161.73194 z"
|
||||
fill="#076eff"
|
||||
id="path19"
|
||||
style="fill:#000000;stroke-width:4.44566" />
|
||||
<metadata
|
||||
id="metadata1">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:title>ionicons-v5_logos</dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.9 KiB |
113
home/core/gui/ags/assets/icons/linux-symbolic.svg
Normal file
|
After Width: | Height: | Size: 16 KiB |
77
home/core/gui/ags/assets/icons/nixos-symbolic.svg
Normal file
@@ -0,0 +1,77 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
height="20"
|
||||
width="19.999744"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
sodipodi:docname="nixos-symbolic.svg"
|
||||
viewBox="0 0 512.00001 512.00656"
|
||||
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs8" />
|
||||
<sodipodi:namedview
|
||||
id="namedview8"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="27.34375"
|
||||
inkscape:cx="8.832"
|
||||
inkscape:cy="15.817143"
|
||||
inkscape:window-width="1075"
|
||||
inkscape:window-height="1028"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg8" />
|
||||
<g
|
||||
fill-rule="evenodd"
|
||||
transform="matrix(1.2756532,0,0,-1.2756532,9.0810546e-6,478.03773)"
|
||||
id="g8"
|
||||
style="fill:#000000">
|
||||
<path
|
||||
d="m 122.453,169.761 97.758,-169.34 -44.926,-0.422 -26.101,45.496 -26.286,-45.25 -22.32,0.008 -11.433,19.75 37.449,64.394 -26.582,46.258 z"
|
||||
fill="#5277c3"
|
||||
id="path1"
|
||||
style="fill:#000000" />
|
||||
<path
|
||||
d="M 157.738,239.515 59.961,70.183 37.133,108.882 63.484,154.229 11.152,154.366 0,173.702 l 11.391,19.777 74.488,-0.234 26.769,46.152 z"
|
||||
fill="#7ebae4"
|
||||
id="path2"
|
||||
style="fill:#000000" />
|
||||
<path
|
||||
d="M 165.238,104.155 360.77,104.143 338.672,65.026 286.223,65.171 312.27,19.784 301.102,0.456 278.277,0.429 241.238,65.058 187.883,65.167 Z"
|
||||
fill="#7ebae4"
|
||||
id="path3"
|
||||
style="fill:#000000" />
|
||||
<path
|
||||
d="m 279.043,178.35 -97.758,169.34 44.926,0.422 26.101,-45.496 26.286,45.254 22.32,-0.008 11.434,-19.754 -37.45,-64.39 26.582,-46.262 z"
|
||||
fill="#7ebae4"
|
||||
id="path4"
|
||||
style="fill:#000000" />
|
||||
<g
|
||||
fill="#5277c3"
|
||||
id="g7"
|
||||
style="fill:#000000">
|
||||
<path
|
||||
d="m 122.453,169.761 97.758,-169.34 -44.926,-0.422 -26.101,45.496 -26.286,-45.25 -22.32,0.008 -11.433,19.75 37.449,64.394 -26.582,46.258 z"
|
||||
id="path5"
|
||||
style="fill:#000000" />
|
||||
<path
|
||||
d="m 236,244.386 -195.535,0.011 22.101,39.118 52.45,-0.149 -26.047,45.391 11.168,19.328 22.82,0.023 37.043,-64.625 53.352,-0.109 z"
|
||||
id="path6"
|
||||
style="fill:#000000" />
|
||||
<path
|
||||
d="m 243.625,108.636 97.777,169.328 22.825,-38.696 -26.348,-45.351 52.332,-0.137 11.152,-19.336 -11.39,-19.777 -74.489,0.238 -26.769,-46.152 z"
|
||||
id="path7"
|
||||
style="fill:#000000" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.7 KiB |
60
home/core/gui/ags/assets/icons/ollama-symbolic.svg
Normal file
@@ -0,0 +1,60 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="20"
|
||||
height="20.000149"
|
||||
viewBox="0 0 853.78869 853.79504"
|
||||
fill="none"
|
||||
version="1.1"
|
||||
id="svg5"
|
||||
sodipodi:docname="ollama-symbolic.svg"
|
||||
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs5" />
|
||||
<sodipodi:namedview
|
||||
id="namedview5"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
showguides="false"
|
||||
inkscape:zoom="23.606557"
|
||||
inkscape:cx="13.004861"
|
||||
inkscape:cy="9.8065973"
|
||||
inkscape:window-width="1374"
|
||||
inkscape:window-height="848"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg5" />
|
||||
<g
|
||||
id="g5"
|
||||
transform="translate(103.8943,1.5259608e-5)">
|
||||
<path
|
||||
d="M 140.629,0.23994313 C 132.66,1.5272641 123.097,5.6956941 116.354,10.845014 c -20.413,15.5091 -36.2287,48.4278 -42.9105,89.437996 -2.5133,15.509 -4.2297,37.026 -4.2297,53.455 0,19.371 2.2681,44.136 5.5171,61.239 0.7356,3.801 1.1034,7.173 0.7969,7.418 -0.2452,0.245 -3.249,2.697 -6.6206,5.394 -11.5245,9.195 -24.7043,23.356 -33.7768,36.291 -17.4095,24.704 -28.6888898,52.78 -33.4090698,83.185 -1.83902799,12.015 -2.32943599,36.29 -0.85821199,48.305 3.24895199,27.708 11.58588179,51.125 25.86898179,72.581 l 4.6589,6.927 -1.3486,2.268 c -9.563,16.061 -17.716,39.294 -21.5166498,61.607 -3.00375,17.655 -3.37156,22.375 -3.37156,46.037 0,23.847 0.30651,28.567 3.12635,45.057 3.3715598,19.739 10.2372598,40.642 17.8998598,54.558 2.5134,4.536 8.6435,13.976 9.3791,14.467 0.2452,0.122 -0.4904,2.39 -1.6551,5.026 -8.8274,19.31 -16.3674,44.995 -19.4938,66.635 -2.2068,14.834 -2.5133,19.616 -2.5133,35.248 0,19.922 1.1034,29.608 5.2719,45.485 l 0.613,2.329 H 44.019 70.3172 l -1.7165,-3.249 c -10.605,-19.616 -11.5858,-56.029 -2.452,-92.38 4.1685,-16.797 8.8887,-29.118 17.716,-46.099 l 5.2719,-10.298 v -6.314 c 0,-5.885 -0.1226,-6.559 -2.0229,-10.421 -1.4713,-2.943 -3.4329,-5.456 -6.9271,-8.889 -5.9462,-5.762 -10.2372,-11.831 -13.6701,-19.31 -15.08,-32.735 -18.0225,-81.346 -7.4174,-122.786 4.4137,-17.287 11.7085,-32.673 19.3711,-41.071 5.2106,-5.763 7.9078,-12.199 7.9078,-18.881 0,-6.927 -2.452,-12.628 -7.9691,-18.574 -15.8157,-16.919 -25.5625,-37.517 -29.0567,-61.485 -4.9654,-34.145 4.0459,-71.355 24.5204,-100.84 20.0455,-28.935 48.1824,-47.509 79.6304,-52.474 7.049,-1.165 20.229,-0.981 27.585,0.368 8.031,1.41 13.057,0.98 18.207,-1.472 6.375,-3.003 9.563,-6.743 13.302,-15.325 3.31,-7.662 5.885,-11.831 12.812,-20.474 8.337,-10.36 16.367,-17.41 29.24,-25.931 14.713,-9.624 31.448,-16.612 48.122,-19.984 6.068,-1.226 8.888,-1.41 20.229,-1.41 11.341,0 14.161,0.184 20.229,1.41 24.459,4.966 48.735,17.594 68.106,35.493 4.168,3.862 14.16,16.245 17.348,21.395 1.226,2.022 3.372,6.314 4.72,9.501 3.739,8.582 6.927,12.322 13.302,15.325 4.966,2.391 10.176,2.882 17.9,1.594 12.199,-2.084 21.578,-1.9 33.532,0.552 40.704,8.214 76.136,41.746 91.829,86.68 13.67,39.416 9.808,80.672 -10.544,112.18 -3.433,5.334 -6.866,9.625 -11.831,14.897 -10.728,11.463 -10.728,25.685 -0.061,37.455 17.532,19.187 28.505,66.389 25.194,108.012 -2.206,27.463 -9.256,52.045 -18.942,65.96 -1.716,2.452 -5.271,6.62 -7.969,9.195 -3.494,3.433 -5.455,5.946 -6.927,8.889 -1.9,3.862 -2.023,4.536 -2.023,10.421 v 6.314 l 5.272,10.298 c 8.828,16.981 13.548,29.302 17.716,46.099 9.012,35.861 8.215,71.538 -2.084,91.829 -0.858,1.716 -1.594,3.31 -1.594,3.494 0,0.184 11.709,0.306 26.053,0.306 h 25.992 l 0.674,-2.636 c 0.368,-1.409 0.981,-3.555 1.287,-4.781 0.675,-2.697 2.023,-10.666 3.127,-18.329 1.042,-7.724 1.042,-36.168 0,-44.75 -3.923,-31.141 -10.483,-55.845 -21.21,-79.201 -1.165,-2.636 -1.901,-4.904 -1.656,-5.026 0.307,-0.184 2.023,-2.636 3.862,-5.395 13.364,-20.229 21.578,-45.669 25.747,-79.262 1.103,-9.257 1.103,-49.041 0,-57.93 -2.943,-22.926 -6.498,-38.497 -12.383,-54.251 -2.452,-6.559 -8.95,-20.413 -11.708,-24.888 l -1.349,-2.268 4.659,-6.927 c 14.283,-21.456 22.62,-44.873 25.869,-72.581 1.471,-12.015 0.981,-36.29 -0.858,-48.305 -4.782,-30.467 -16,-58.42 -33.409,-83.185 -9.073,-12.935 -22.253,-27.096 -33.777,-36.291 -3.372,-2.697 -6.376,-5.149 -6.621,-5.394 -0.306,-0.245 0.062,-3.617 0.797,-7.418 7.418,-38.681 7.172,-86.924 -0.613,-124.624596 -6.743,-32.8573 -19.003,-58.9716 -34.819,-74.0516 C 523.209,4.2857941 510.336,-0.86349287 494.888,0.11732413 459.456,2.2015541 430.89,42.966714 419.61,107.21001 c -1.839,10.36 -3.432,22.498 -3.432,25.808 0,1.287 -0.246,2.329 -0.552,2.329 -0.307,0 -2.697,-1.226 -5.272,-2.758 -27.34,-16.184 -57.746,-24.827 -87.354,-24.827 -29.608,0 -60.014,8.643 -87.354,24.827 -2.575,1.532 -4.965,2.758 -5.272,2.758 -0.306,0 -0.552,-1.042 -0.552,-2.329 0,-3.433 -1.655,-15.938 -3.432,-25.808 C 216.152,49.525914 192.674,11.335414 161.472,1.7111341 157.181,0.42381313 144.982,-0.43436787 140.629,0.23994313 Z M 151.051,50.139014 c 8.827,6.9883 18.635,26.9724 24.275,49.3473 1.042,4.045696 2.145,8.704696 2.452,10.420696 0.245,1.656 0.919,5.395 1.471,8.276 2.391,12.996 3.494,27.034 3.617,44.137 l 0.061,16.858 -4.23,6.252 -4.229,6.314 h -9.87 c -11.524,0 -22.988,1.472 -33.961,4.414 -3.923,0.981 -7.724,1.962 -8.459,2.146 -1.165,0.245 -1.349,-0.123 -2.023,-5.15 -3.617,-27.279 -3.433,-57.5 0.552,-82.634 4.413,-28.014096 14.712,-53.392696 24.765,-60.871396 2.391,-1.7778 2.82,-1.7165 5.579,0.4904 z m 349.538,-0.4292 c 6.069,4.475 12.751,16.3674 17.716,31.57 9.992,30.405196 12.812,72.151196 7.54,111.874196 -0.674,5.027 -0.858,5.395 -2.023,5.15 -0.735,-0.184 -4.536,-1.165 -8.459,-2.146 -10.973,-2.942 -22.437,-4.414 -33.961,-4.414 h -9.87 l -4.229,-6.314 -4.23,-6.252 0.061,-16.858 c 0.123,-23.785 2.33,-42.359 7.601,-63.017596 5.579,-22.191 15.448,-42.1751 24.214,-49.1634 2.759,-2.2069 3.188,-2.2682 5.64,-0.4292 z"
|
||||
fill="#000000"
|
||||
id="path1" />
|
||||
<path
|
||||
d="m 313.498,358.23701 c -13.303,1.288 -16.919,1.778 -23.295,3.066 -10.36,2.145 -24.214,6.927 -33.838,11.647 -33.47,16.367 -56.519,43.646 -63.569,75.216 -1.41,6.253 -1.594,8.337 -1.594,18.881 0,10.421 0.184,12.689 1.533,18.635 9.379,41.256 47.385,71.723 96.549,77.301 10.666,1.165 56.765,1.165 67.431,0 39.478,-4.475 73.439,-25.869 88.703,-55.907 4.045,-8.03 6.007,-13.241 7.846,-21.394 1.349,-5.946 1.533,-8.214 1.533,-18.635 0,-10.544 -0.184,-12.628 -1.594,-18.881 -10.238,-45.853 -54.742,-81.959 -109.3,-88.825 -7.111,-0.858 -25.746,-1.594 -30.405,-1.104 z m 22.926,33.348 c 18.207,1.962 36.536,8.46 51.248,18.268 7.908,5.272 19.065,16.306 23.846,23.54 5.885,8.949 9.256,18.083 10.789,29.179 0.674,5.088 0.307,8.95 -1.533,17.164 -2.881,12.26 -11.831,25.072 -23.907,34.022 -5.64,4.107 -17.348,10.054 -24.52,12.383 -13.609,4.352 -22.498,5.149 -54.252,4.904 -20.719,-0.184 -24.398,-0.368 -30.344,-1.471 -20.29,-3.801 -36.351,-11.893 -47.998,-24.214 -9.441,-9.931 -13.732,-19.003 -16.061,-33.654 -1.042,-6.805 0.919,-18.084 4.904,-27.586 4.843,-11.586 17.348,-25.991 29.731,-34.267 14.344,-9.563 33.225,-16.367 50.573,-18.206 6.682,-0.736 20.842,-0.736 27.524,-0.062 z"
|
||||
fill="#000000"
|
||||
id="path2" />
|
||||
<path
|
||||
d="m 299.584,436.33601 c -4.659,2.513 -7.908,8.888 -6.927,13.608 1.103,5.088 5.578,10.238 12.566,14.468 3.74,2.268 3.985,2.574 4.169,4.842 0.122,1.349 -0.368,5.211 -1.042,8.644 -0.736,3.371 -1.288,6.927 -1.288,7.908 0.062,2.636 2.514,6.927 5.088,9.011 2.269,1.839 2.698,1.9 9.073,2.084 5.824,0.184 7.05,0.061 9.379,-1.042 6.008,-2.943 7.54,-8.337 5.333,-18.697 -1.839,-8.643 -1.471,-9.992 3.127,-12.628 4.842,-2.82 9.992,-7.785 11.524,-11.157 2.943,-6.436 0.245,-13.731 -6.253,-17.103 -1.593,-0.797 -3.555,-1.164 -6.436,-1.164 -4.475,0 -7.356,1.042 -12.628,4.413 l -3.004,1.901 -1.9,-1.165 c -7.785,-4.598 -9.195,-5.149 -13.916,-5.088 -3.371,0 -5.21,0.306 -6.865,1.165 z"
|
||||
fill="#000000"
|
||||
id="path3" />
|
||||
<path
|
||||
d="m 150.744,365.16501 c -10.85,3.433 -18.942,11.402 -23.11,22.743 -2.023,5.395 -3.004,13.916 -2.146,18.513 2.023,10.973 11.034,20.965 21.272,23.724 12.873,3.371 22.497,1.164 31.018,-7.295 4.965,-4.843 7.663,-9.073 10.36,-15.939 1.961,-4.842 2.084,-5.7 2.084,-12.566 l 0.061,-7.356 -2.574,-5.272 c -4.108,-8.337 -11.525,-14.529 -20.107,-16.797 -4.843,-1.226 -12.628,-1.164 -16.858,0.245 z"
|
||||
fill="#000000"
|
||||
id="path4" />
|
||||
<path
|
||||
d="m 478.153,364.98201 c -8.398,2.268 -15.877,8.52 -19.862,16.735 l -2.574,5.272 0.061,7.356 c 0,6.866 0.123,7.724 2.084,12.566 2.698,6.866 5.395,11.096 10.36,15.939 8.521,8.459 18.145,10.666 31.019,7.295 7.417,-1.962 14.834,-8.215 18.39,-15.51 3.065,-6.191 3.8,-10.666 2.82,-17.716 -2.268,-16.122 -11.709,-27.83 -25.747,-31.937 -4.107,-1.226 -12.076,-1.226 -16.551,0 z"
|
||||
fill="#000000"
|
||||
id="path5" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.8 KiB |
38
home/core/gui/ags/assets/icons/openai-symbolic.svg
Normal file
@@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 322.58065 322.58064"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="openai-symbolic.svg"
|
||||
width="20"
|
||||
height="20"
|
||||
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="30.935922"
|
||||
inkscape:cx="9.0348044"
|
||||
inkscape:cy="14.917933"
|
||||
inkscape:window-width="1183"
|
||||
inkscape:window-height="1028"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<path
|
||||
d="m 298.66868,131.77215 c 7.30439,-21.92321 4.7891,-45.939129 -6.89187,-65.880296 C 274.21007,35.30601 238.89549,19.570397 204.40593,26.975391 189.0627,9.6903649 167.01876,-0.13936259 143.90833,0.0014933 108.65412,-0.07899576 77.374064,22.618921 66.528162,56.162739 43.880552,60.800921 24.33177,74.977058 12.892261,95.069141 -4.8052718,125.57449 -0.77075743,164.02814 22.872905,190.18709 c -7.304382,21.92321 -4.789099,45.93913 6.891877,65.8803 17.566738,30.58585 52.881316,46.32146 87.370878,38.91646 15.33316,17.28503 37.38717,27.11476 60.49759,26.96384 35.27433,0.0905 66.56446,-22.62749 77.41036,-56.20149 22.64761,-4.63818 42.19639,-18.81432 53.6359,-38.9064 17.67741,-30.50536 13.63284,-68.92883 -10.00077,-95.08777 z M 177.65337,300.90986 c -14.11577,0.0201 -27.78885,-4.91989 -38.62469,-13.96485 0.493,-0.26159 1.34819,-0.73446 1.90156,-1.07654 l 64.10954,-37.02497 c 3.27993,-1.86131 5.29215,-5.35253 5.27203,-9.12545 v -90.37916 l 27.09463,15.64506 c 0.29178,0.14086 0.48294,0.42257 0.52318,0.74453 v 74.84477 c -0.0402,33.28222 -26.99402,60.26618 -60.27625,60.33661 z M 48.025738,245.54345 c -7.072976,-12.21422 -9.618443,-26.53121 -7.19371,-40.42564 0.472874,0.28171 1.307948,0.79483 1.901554,1.13691 l 64.109538,37.02497 c 3.24974,1.90155 7.2742,1.90155 10.534,0 l 78.26556,-45.19461 v 31.29012 c 0.0201,0.32196 -0.1308,0.63386 -0.38232,0.83508 l -64.80376,37.41735 c -28.86539,16.62099 -65.72938,6.74096 -82.4208,-22.08418 z M 31.153218,105.60314 c 7.042793,-12.234331 18.160346,-21.591185 31.400797,-26.450712 0,0.553362 -0.03018,1.529292 -0.03018,2.213449 v 74.059993 c -0.02012,3.76287 1.992105,7.25408 5.261973,9.11539 l 78.265542,45.18455 -27.09463,15.64506 c -0.27165,0.1811 -0.61373,0.21129 -0.91556,0.0805 L 53.227344,188.00382 C 24.42232,171.32247 14.542287,134.46853 31.143157,105.6132 Z m 222.612632,51.80478 -78.26556,-45.19461 27.09463,-15.634999 c 0.27165,-0.181101 0.61373,-0.211284 0.91557,-0.08049 l 64.81382,37.417349 c 28.85533,16.6713 38.74542,53.5856 22.07412,82.44093 -7.05285,12.21421 -18.16034,21.57107 -31.39073,26.44066 V 166.5233 c 0.0302,-3.76286 -1.97199,-7.24401 -5.23179,-9.11538 z m 26.96383,-40.58661 c -0.47287,-0.29178 -1.30794,-0.79483 -1.90155,-1.13691 L 214.71859,78.659433 c -3.24975,-1.901555 -7.2742,-1.901555 -10.53401,0 L 125.91903,123.85404 V 92.563919 c -0.0201,-0.321957 0.13079,-0.633852 0.38232,-0.835074 l 64.80376,-37.387171 c 28.86539,-16.651176 65.76963,-6.74096 82.41074,22.134493 7.03273,12.194093 9.5782,26.470833 7.19371,40.345143 z M 111.18953,172.59017 84.08484,156.94511 c -0.291773,-0.14086 -0.482934,-0.42257 -0.523179,-0.74453 V 81.355816 c 0.02012,-33.322473 27.054379,-60.326555 60.376859,-60.306432 14.09564,0 27.73854,4.950077 38.57438,13.964853 -0.493,0.261589 -1.33813,0.734462 -1.90155,1.076541 l -64.10954,37.02497 c -3.27993,1.86131 -5.29216,5.342462 -5.27204,9.115387 l -0.0402,90.338915 z m 14.71943,-31.73282 34.86183,-20.13232 34.86183,20.12226 v 40.2546 l -34.86183,20.12226 -34.86183,-20.12226 z"
|
||||
id="path1"
|
||||
style="stroke-width:1.00611" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.0 KiB |
39
home/core/gui/ags/assets/icons/openrouter-symbolic.svg
Normal file
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
version="1.1"
|
||||
width="20.000015"
|
||||
height="20"
|
||||
id="svg1"
|
||||
sodipodi:docname="openrouter-symbolic.svg"
|
||||
viewBox="0 0 47.999998 47.999962"
|
||||
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="19.666667"
|
||||
inkscape:cx="6.7118644"
|
||||
inkscape:cy="10.805085"
|
||||
inkscape:window-width="1908"
|
||||
inkscape:window-height="1028"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<path
|
||||
d="m 32.999999,2.9999808 c 3.980422,0.5880984 6.862472,1.8203168 10.3125,3.875 0.883008,0.5130469 1.766016,1.0260937 2.675781,1.5546875 0.663867,0.5182031 1.327735,1.0364062 2.011719,1.5703125 0,0.9900002 0,1.9800002 0,3.0000002 -2.311036,1.335928 -4.623718,2.668844 -6.9375,4 -0.659355,0.381562 -1.318711,0.763125 -1.998047,1.15625 -4.951172,2.84375 -4.951172,2.84375 -6.064453,2.84375 0,-1.65 0,-3.3 0,-5 -6.609294,1.004133 -10.792298,2.789518 -16,7 3.696448,3.823912 6.292078,6.155833 11.6875,6.625 0.808242,0.07477 1.616484,0.149531 2.449219,0.226562 0.614883,0.04898 1.229765,0.09797 1.863281,0.148438 0,-0.99 0,-1.98 0,-3 4.062255,0.578231 6.847624,1.891177 10.3125,4.0625 0.883008,0.547852 1.766016,1.095703 2.675781,1.660156 0.663867,0.421524 1.327735,0.843047 2.011719,1.277344 -1.156668,3.470003 -1.857267,3.847015 -4.875,5.6875 -0.698672,0.436992 -1.397344,0.873984 -2.117188,1.324219 -2.007812,0.988281 -2.007812,0.988281 -5.007812,0.988281 0,0.66 0,1.32 0,2 -0.99,0.33 -1.98,0.66 -3,1 0,-1.32 0,-2.64 0,-4 C 32.359335,40.962601 31.718671,40.925211 31.058593,40.8867 22.287404,40.220037 16.393127,37.373973 9.2226552,32.429668 6.2608222,30.524517 3.2830902,29.257335 -8.4473381e-7,27.999981 c 0,-3.3 0,-6.6 0,-10 C 1.6232682,17.32911 3.2486752,16.663411 4.8749992,15.999981 c 0.904922,-0.37125 1.809844,-0.7425 2.742188,-1.125 2.382812,-0.875 2.382812,-0.875 4.3828118,-0.875 0,-0.66 0,-1.32 0,-2 0.99,0 1.98,0 3,0 0,-0.66 0,-1.32 0,-2.0000002 6.284532,-3.3279791 10.886587,-4.4516452 18,-4 0,-0.99 0,-1.98 0,-3 z"
|
||||
fill="#93a2b8"
|
||||
id="path1"
|
||||
style="fill:#000000" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
85
home/core/gui/ags/assets/icons/ubuntu-symbolic.svg
Normal file
@@ -0,0 +1,85 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
|
||||
<svg
|
||||
fill="#000000"
|
||||
height="20.000002"
|
||||
width="20"
|
||||
version="1.1"
|
||||
id="Capa_1"
|
||||
viewBox="0 0 493.42511 493.42516"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="ubuntu-logo-svgrepo-com.svg"
|
||||
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||
id="defs9" /><sodipodi:namedview
|
||||
id="namedview9"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="12.374369"
|
||||
inkscape:cx="24.76894"
|
||||
inkscape:cy="15.515943"
|
||||
inkscape:window-width="1415"
|
||||
inkscape:window-height="753"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Capa_1" />
|
||||
<g
|
||||
id="ubuntu"
|
||||
transform="translate(5.5573583e-4,0.00107926)">
|
||||
<g
|
||||
id="g2">
|
||||
<g
|
||||
id="g1">
|
||||
<path
|
||||
d="m 168.839,241.198 c 0,-38.117 17.894,-72.05 45.685,-93.896 L 171.988,79.22 c -35.648,25.603 -62.472,62.66 -75.127,105.796 19.811,12.751 32.949,35.031 32.949,60.353 0,24.424 -12.143,45.957 -30.783,58.918 13.606,40.86 40.12,75.838 74.706,100.113 l 39.559,-70.358 c -27.105,-21.838 -44.453,-55.318 -44.453,-92.844 z"
|
||||
id="path1" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g3">
|
||||
<path
|
||||
d="m 109.704,245.368 c 0,28.484 -23.132,51.592 -51.609,51.592 -28.491,0 -51.606,-23.107 -51.606,-51.592 0,-28.47 23.115,-51.577 51.606,-51.577 28.477,0 51.609,23.107 51.609,51.577 z"
|
||||
id="path2" />
|
||||
</g>
|
||||
<g
|
||||
id="g5">
|
||||
<g
|
||||
id="g4">
|
||||
<path
|
||||
d="m 399.494,370.126 c 12.002,0 23.301,2.936 33.23,8.149 30.924,-32.591 50.906,-75.595 54.211,-123.228 l -80.148,-1.551 c -6.171,60.111 -56.954,106.941 -118.677,106.941 -17.084,0 -33.388,-3.594 -48.101,-10.093 l -39.841,69.704 c 26.56,13.069 56.376,20.411 87.941,20.411 13.622,0 26.981,-1.379 39.854,-4.006 2.746,-37.072 33.717,-66.327 71.531,-66.327 z"
|
||||
id="path3" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g6">
|
||||
<path
|
||||
d="m 451.071,441.847 c 0,28.478 -23.084,51.576 -51.577,51.576 -28.493,0 -51.594,-23.098 -51.594,-51.576 0,-28.5 23.101,-51.592 51.594,-51.592 28.493,0 51.577,23.092 51.577,51.592 z"
|
||||
id="path5" />
|
||||
</g>
|
||||
<g
|
||||
id="g8">
|
||||
<g
|
||||
id="g7">
|
||||
<path
|
||||
d="m 438.211,110.152 c -11.677,8.269 -25.968,13.163 -41.399,13.163 -39.637,0 -71.73,-32.102 -71.73,-71.715 0,-2.104 0.094,-4.139 0.25,-6.181 -12.05,-2.307 -24.503,-3.491 -37.222,-3.491 -31.859,0 -61.988,7.498 -88.689,20.777 l 39.607,69.75 c 14.979,-6.748 31.593,-10.544 49.082,-10.544 61.177,0 111.601,46.074 118.491,105.414 l 80.147,-2.447 C 483.209,181.12 465.487,141.372 438.211,110.152 Z"
|
||||
id="path6" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g9">
|
||||
<path
|
||||
d="m 448.374,51.601 c 0,28.492 -23.038,51.592 -51.561,51.592 -28.491,0 -51.592,-23.1 -51.592,-51.592 C 345.22,23.107 368.321,0 396.812,0 c 28.523,0 51.562,23.107 51.562,51.601 z"
|
||||
id="path8" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.1 KiB |
@@ -0,0 +1,339 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Lesser General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program 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 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program 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 this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License.
|
||||
95
home/core/gui/ags/assets/themes/sourceviewtheme-light.xml
Normal file
@@ -0,0 +1,95 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<style-scheme id="custom-light" _name="Custom" version="1.0">
|
||||
<author>end_4</author>
|
||||
<_description>Catppuccin port but very random</_description>
|
||||
|
||||
<style name="bracket-match" background="#E3E6EB" bold="true"/>
|
||||
<style name="bracket-mismatch" background="#E3E6EB" underline="true"/>
|
||||
<style name="c:preprocessor" foreground="#DF8E1D"/>
|
||||
<style name="css:at-rules" foreground="#8839EF"/>
|
||||
<style name="css:color" foreground="#DF8E1D"/>
|
||||
<style name="css:keyword" foreground="#256BF5"/>
|
||||
<style name="current-line" background="#E3E6EB"/>
|
||||
<style name="cursor" foreground="#DC8A78"/>
|
||||
<style name="def:base-n-integer" foreground="#DF8E1D"/>
|
||||
<style name="def:boolean" foreground="#DF8E1D"/>
|
||||
<style name="def:builtin" foreground="#DF8E1D"/>
|
||||
<style name="def:character" foreground="#DF8E1D"/>
|
||||
<style name="def:comment" foreground="#9DA1B1"/>
|
||||
<style name="def:complex" foreground="#DF8E1D"/>
|
||||
<style name="def:decimal" foreground="#DF8E1D"/>
|
||||
<style name="def:doc-comment" foreground="#9DA1B1"/>
|
||||
<style name="def:doc-comment-element" foreground="#9DA1B1"/>
|
||||
<style name="def:error" foreground="#D53055" background="#EAEDF2"/>
|
||||
<style name="def:floating-point" foreground="#DF8E1D"/>
|
||||
<style name="def:function" foreground="#256BF5"/>
|
||||
<style name="def:identifier" foreground="#000000"/>
|
||||
<style name="def:keyword" foreground="#8839EF"/>
|
||||
<style name="def:note" foreground="#9DA1B1"/>
|
||||
<style name="def:number" foreground="#FE640B"/>
|
||||
<style name="def:operator" foreground="#8839EF"/>
|
||||
<style name="def:preprocessor" foreground="#256BF5"/>
|
||||
<style name="def:reserved" foreground="#8839EF"/>
|
||||
<style name="def:shebang" foreground="#9DA1B1"/>
|
||||
<style name="def:special-char" foreground="#256BF5"/>
|
||||
<style name="def:special-constant" foreground="#DF8E1D"/>
|
||||
<style name="def:statement" foreground="#8839EF"/>
|
||||
<style name="def:string" foreground="#4AA537"/>
|
||||
<style name="def:type" foreground="#256BF5" italic="true"/>
|
||||
<style name="diff:added-line" foreground="#282D32" background="#ACF2BD"/>
|
||||
<style name="diff:changed-line" foreground="#282D32" background="#F1F2C3"/>
|
||||
<style name="diff:location" foreground="#9DA1B1"/>
|
||||
<style name="diff:removed-line" foreground="#282D32" background="#FFEEF0"/>
|
||||
<style name="draw-spaces" foreground="#3b3a32"/>
|
||||
<style name="html:dtd" foreground="#4AA537"/>
|
||||
<style name="html:tag" foreground="#8839EF"/>
|
||||
<style name="js:function" foreground="#256BF5"/>
|
||||
<style name="line-numbers" foreground="#9699AA" background="#EAEDF2"/>
|
||||
<style name="perl:builtin" foreground="#256BF5"/>
|
||||
<style name="perl:include-statement" foreground="#8839EF"/>
|
||||
<style name="perl:special-variable" foreground="#DF8E1D"/>
|
||||
<style name="perl:variable" foreground="#000000"/>
|
||||
<style name="php:string" foreground="#4AA537"/>
|
||||
<style name="python:builtin-constant" foreground="#8839EF"/>
|
||||
<style name="python:builtin-function" foreground="#256BF5"/>
|
||||
<style name="python:module-handler" foreground="#8839EF"/>
|
||||
<style name="python:special-variable" foreground="#8839EF"/>
|
||||
<style name="ruby:attribute-definition" foreground="#8839EF"/>
|
||||
<style name="ruby:builtin" foreground="#000000"/>
|
||||
<style name="ruby:class-variable" foreground="#000000"/>
|
||||
<style name="ruby:constant" foreground="#000000"/>
|
||||
<style name="ruby:global-variable" foreground="#256BF5"/>
|
||||
<style name="ruby:instance-variable" foreground="#000000"/>
|
||||
<style name="ruby:module-handler" foreground="#8839EF"/>
|
||||
<style name="ruby:predefined-variable" foreground="#DF8E1D"/>
|
||||
<style name="ruby:regex" foreground="#f6aa11"/>
|
||||
<style name="ruby:special-variable" foreground="#8839EF"/>
|
||||
<style name="ruby:symbol" foreground="#DF8E1D"/>
|
||||
<style name="rubyonrails:attribute-definition" foreground="#8839EF"/>
|
||||
<style name="rubyonrails:block-parameter" foreground="#fd971f" italic="true"/>
|
||||
<style name="rubyonrails:builtin" foreground="#000000"/>
|
||||
<style name="rubyonrails:class-inherit" foreground="#256BF5" underline="true" italic="true"/>
|
||||
<style name="rubyonrails:class-name" foreground="#256BF5"/>
|
||||
<style name="rubyonrails:class-variable" foreground="#000000"/>
|
||||
<style name="rubyonrails:complex-interpolation" foreground="#DF8E1D"/>
|
||||
<style name="rubyonrails:constant" foreground="#000000"/>
|
||||
<style name="rubyonrails:global-variable" foreground="#256BF5"/>
|
||||
<style name="rubyonrails:instance-variable" foreground="#000000"/>
|
||||
<style name="rubyonrails:module-handler" foreground="#8839EF"/>
|
||||
<style name="rubyonrails:module-name" foreground="#256BF5"/>
|
||||
<style name="rubyonrails:predefined-variable" foreground="#DF8E1D"/>
|
||||
<style name="rubyonrails:rails" foreground="#000000"/>
|
||||
<style name="rubyonrails:regex" foreground="#f6aa11"/>
|
||||
<style name="rubyonrails:simple-interpolation" foreground="#DF8E1D"/>
|
||||
<style name="rubyonrails:special-variable" foreground="#8839EF"/>
|
||||
<style name="rubyonrails:symbol" foreground="#DF8E1D"/>
|
||||
<style name="search-match" background="#E3E6EB" bold="true" underline="true"/>
|
||||
<style name="selection" foreground="#f8f8f2" background="#444444"/>
|
||||
<style name="text" foreground="#f8f8f2" background="#222222"/>
|
||||
<style name="xml:attribute-name" foreground="#256BF5"/>
|
||||
<style name="xml:element-name" foreground="#8839EF"/>
|
||||
<style name="xml:entity" foreground="#c8cecc"/>
|
||||
<style name="xml:namespace" foreground="#8839EF"/>
|
||||
<style name="xml:tag" foreground="#8839EF"/>
|
||||
|
||||
</style-scheme>
|
||||
120
home/core/gui/ags/assets/themes/sourceviewtheme.xml
Normal file
@@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Copyright (C) 2014 Leo Iannacone <info@leoiannacone.com>
|
||||
|
||||
This file was generated from a textmate theme named Monokai Extended
|
||||
with tm2gtksw2 tool. (Alexandre da Silva)
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
This library 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, write to the
|
||||
Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA.
|
||||
-->
|
||||
|
||||
<!-- MODIFIED -->
|
||||
|
||||
<style-scheme id="custom" _name="Custom" version="1.0">
|
||||
<author>Leo Iannacone</author>
|
||||
<_description>Based on SublimeText Monokai Extended - Generated with tm2gtksw2</_description>
|
||||
|
||||
<style name="bracket-match" background="#333333" bold="true"/>
|
||||
<style name="bracket-mismatch" background="#333333" underline="true"/>
|
||||
<style name="c:preprocessor" foreground="#be84ff"/>
|
||||
<style name="css:at-rules" foreground="#f92672"/>
|
||||
<style name="css:color" foreground="#be84ff"/>
|
||||
<style name="css:keyword" foreground="#66d9ef"/>
|
||||
<style name="current-line" background="#333333"/>
|
||||
<style name="cursor" foreground="#f8f8f0"/>
|
||||
<style name="def:base-n-integer" foreground="#be84ff"/>
|
||||
<style name="def:boolean" foreground="#be84ff"/>
|
||||
<style name="def:builtin" foreground="#be84ff"/>
|
||||
<style name="def:character" foreground="#be84ff"/>
|
||||
<style name="def:comment" foreground="#75715e"/>
|
||||
<style name="def:complex" foreground="#be84ff"/>
|
||||
<style name="def:decimal" foreground="#be84ff"/>
|
||||
<style name="def:doc-comment" foreground="#75715e"/>
|
||||
<style name="def:doc-comment-element" foreground="#75715e"/>
|
||||
<style name="def:error" foreground="#f8f8f0" background="#f92672"/>
|
||||
<style name="def:floating-point" foreground="#be84ff"/>
|
||||
<style name="def:function" foreground="#a6e22e"/>
|
||||
<style name="def:identifier" foreground="#ffffff"/>
|
||||
<style name="def:keyword" foreground="#f92672"/>
|
||||
<style name="def:note" foreground="#75715e"/>
|
||||
<style name="def:number" foreground="#be84ff"/>
|
||||
<style name="def:operator" foreground="#f92672"/>
|
||||
<style name="def:preprocessor" foreground="#66d9ef"/>
|
||||
<style name="def:reserved" foreground="#f92672"/>
|
||||
<style name="def:shebang" foreground="#75715e"/>
|
||||
<style name="def:special-char" foreground="#66d9ef"/>
|
||||
<style name="def:special-constant" foreground="#be84ff"/>
|
||||
<style name="def:statement" foreground="#f92672"/>
|
||||
<style name="def:string" foreground="#e6db74"/>
|
||||
<style name="def:type" foreground="#66d9ef" italic="true"/>
|
||||
<style name="diff:added-line" foreground="#a6e22e"/>
|
||||
<style name="diff:changed-line" foreground="#e6db74"/>
|
||||
<style name="diff:location" foreground="#75715e"/>
|
||||
<style name="diff:removed-line" foreground="#f92672"/>
|
||||
<style name="draw-spaces" foreground="#3b3a32"/>
|
||||
<style name="html:dtd" foreground="#e6db74"/>
|
||||
<style name="html:tag" foreground="#f92672"/>
|
||||
<style name="js:function" foreground="#66d9ef"/>
|
||||
<style name="line-numbers" foreground="#bebeba" background="#333333"/>
|
||||
<style name="perl:builtin" foreground="#a6e22e"/>
|
||||
<style name="perl:include-statement" foreground="#f92672"/>
|
||||
<style name="perl:special-variable" foreground="#be84ff"/>
|
||||
<style name="perl:variable" foreground="#ffffff"/>
|
||||
<style name="php:string" foreground="#e6db74"/>
|
||||
<style name="python:builtin-constant" foreground="#f92672"/>
|
||||
<style name="python:builtin-function" foreground="#a6e22e"/>
|
||||
<style name="python:module-handler" foreground="#f92672"/>
|
||||
<style name="python:special-variable" foreground="#f92672"/>
|
||||
<style name="ruby:attribute-definition" foreground="#f92672"/>
|
||||
<style name="ruby:builtin" foreground="#ffffff"/>
|
||||
<style name="ruby:class-variable" foreground="#ffffff"/>
|
||||
<style name="ruby:constant" foreground="#ffffff"/>
|
||||
<style name="ruby:global-variable" foreground="#a6e22e"/>
|
||||
<style name="ruby:instance-variable" foreground="#ffffff"/>
|
||||
<style name="ruby:module-handler" foreground="#f92672"/>
|
||||
<style name="ruby:predefined-variable" foreground="#be84ff"/>
|
||||
<style name="ruby:regex" foreground="#f6aa11"/>
|
||||
<style name="ruby:special-variable" foreground="#f92672"/>
|
||||
<style name="ruby:symbol" foreground="#be84ff"/>
|
||||
<style name="rubyonrails:attribute-definition" foreground="#f92672"/>
|
||||
<style name="rubyonrails:block-parameter" foreground="#fd971f" italic="true"/>
|
||||
<style name="rubyonrails:builtin" foreground="#ffffff"/>
|
||||
<style name="rubyonrails:class-inherit" foreground="#a6e22e" underline="true" italic="true"/>
|
||||
<style name="rubyonrails:class-name" foreground="#66d9ef"/>
|
||||
<style name="rubyonrails:class-variable" foreground="#ffffff"/>
|
||||
<style name="rubyonrails:complex-interpolation" foreground="#be84ff"/>
|
||||
<style name="rubyonrails:constant" foreground="#ffffff"/>
|
||||
<style name="rubyonrails:global-variable" foreground="#a6e22e"/>
|
||||
<style name="rubyonrails:instance-variable" foreground="#ffffff"/>
|
||||
<style name="rubyonrails:module-handler" foreground="#f92672"/>
|
||||
<style name="rubyonrails:module-name" foreground="#66d9ef"/>
|
||||
<style name="rubyonrails:predefined-variable" foreground="#be84ff"/>
|
||||
<style name="rubyonrails:rails" foreground="#ffffff"/>
|
||||
<style name="rubyonrails:regex" foreground="#f6aa11"/>
|
||||
<style name="rubyonrails:simple-interpolation" foreground="#be84ff"/>
|
||||
<style name="rubyonrails:special-variable" foreground="#f92672"/>
|
||||
<style name="rubyonrails:symbol" foreground="#be84ff"/>
|
||||
<style name="search-match" background="#333333" bold="true" underline="true"/>
|
||||
<style name="selection" foreground="#f8f8f2" background="#444444"/>
|
||||
<style name="text" foreground="#f8f8f2" background="#222222"/>
|
||||
<style name="xml:attribute-name" foreground="#a6e22e"/>
|
||||
<style name="xml:element-name" foreground="#f92672"/>
|
||||
<style name="xml:entity" foreground="#c8cecc"/>
|
||||
<style name="xml:namespace" foreground="#f92672"/>
|
||||
<style name="xml:tag" foreground="#f92672"/>
|
||||
|
||||
|
||||
</style-scheme>
|
||||
@@ -1,45 +1,92 @@
|
||||
import { App, Audio, Notifications, Utils } from "./imports.js";
|
||||
import Bar from "./windows/bar/main.js";
|
||||
import Music from "./windows/music/main.js";
|
||||
import NotificationPopup from "./windows/notifications/popups.js";
|
||||
import Osd from "./windows/osd/main.js";
|
||||
import SystemMenu from "./windows/system-menu/main.js";
|
||||
"use strict";
|
||||
// Import
|
||||
import Gdk from "gi://Gdk";
|
||||
import GLib from "gi://GLib";
|
||||
import App from "resource:///com/github/Aylur/ags/app.js";
|
||||
import * as Utils from "resource:///com/github/Aylur/ags/utils.js";
|
||||
// Stuff
|
||||
import userOptions from "./modules/.configuration/user_options.js";
|
||||
import {
|
||||
firstRunWelcome,
|
||||
startBatteryWarningService,
|
||||
} from "./services/messages.js";
|
||||
import { startAutoDarkModeService } from "./services/darkmode.js";
|
||||
// Widgets
|
||||
import {
|
||||
Bar,
|
||||
BarCornerTopleft,
|
||||
BarCornerTopright,
|
||||
} from "./modules/bar/main.js";
|
||||
import Cheatsheet from "./modules/cheatsheet/main.js";
|
||||
// import DesktopBackground from './modules/desktopbackground/main.js';
|
||||
import Dock from "./modules/dock/main.js";
|
||||
import Corner from "./modules/screencorners/main.js";
|
||||
import Crosshair from "./modules/crosshair/main.js";
|
||||
import Indicator from "./modules/indicators/main.js";
|
||||
import Osk from "./modules/onscreenkeyboard/main.js";
|
||||
import Overview from "./modules/overview/main.js";
|
||||
import Session from "./modules/session/main.js";
|
||||
import SideLeft from "./modules/sideleft/main.js";
|
||||
import SideRight from "./modules/sideright/main.js";
|
||||
import { COMPILED_STYLE_DIR } from "./init.js";
|
||||
|
||||
const scss = App.configDir + "/style.scss";
|
||||
const css = App.configDir + "/style.css";
|
||||
const range = (length, start = 1) =>
|
||||
Array.from({ length }, (_, i) => i + start);
|
||||
function forMonitors(widget) {
|
||||
const n = Gdk.Display.get_default()?.get_n_monitors() || 1;
|
||||
return range(n, 0).map(widget).flat(1);
|
||||
}
|
||||
function forMonitorsAsync(widget) {
|
||||
const n = Gdk.Display.get_default()?.get_n_monitors() || 1;
|
||||
return range(n, 0).forEach((n) => widget(n).catch(print));
|
||||
}
|
||||
|
||||
Utils.exec(`sass ${scss} ${css}`);
|
||||
// Start stuff
|
||||
handleStyles(true);
|
||||
startAutoDarkModeService().catch(print);
|
||||
firstRunWelcome().catch(print);
|
||||
startBatteryWarningService().catch(print);
|
||||
|
||||
App.connect("config-parsed", () => print("config parsed"));
|
||||
const Windows = () => [
|
||||
// forMonitors(DesktopBackground),
|
||||
forMonitors(Crosshair),
|
||||
Overview(),
|
||||
forMonitors(Indicator),
|
||||
forMonitors(Cheatsheet),
|
||||
SideLeft(),
|
||||
SideRight(),
|
||||
forMonitors(Osk),
|
||||
forMonitors(Session),
|
||||
...(userOptions.dock.enabled ? [forMonitors(Dock)] : []),
|
||||
...(userOptions.appearance.fakeScreenRounding !== 0
|
||||
? [
|
||||
forMonitors((id) => Corner(id, "top left", true)),
|
||||
forMonitors((id) => Corner(id, "top right", true)),
|
||||
]
|
||||
: []),
|
||||
forMonitors((id) =>
|
||||
Corner(id, "bottom left", userOptions.appearance.fakeScreenRounding !== 0),
|
||||
),
|
||||
forMonitors((id) =>
|
||||
Corner(id, "bottom right", userOptions.appearance.fakeScreenRounding !== 0),
|
||||
),
|
||||
forMonitors(BarCornerTopleft),
|
||||
forMonitors(BarCornerTopright),
|
||||
];
|
||||
|
||||
const CLOSE_ANIM_TIME = 210; // Longer than actual anim time to make sure widgets animate fully
|
||||
const closeWindowDelays = {}; // For animations
|
||||
for (let i = 0; i < (Gdk.Display.get_default()?.get_n_monitors() || 1); i++) {
|
||||
closeWindowDelays[`osk${i}`] = CLOSE_ANIM_TIME;
|
||||
}
|
||||
|
||||
App.config({
|
||||
style: css,
|
||||
closeWindowDelay: {
|
||||
"system-menu": 200,
|
||||
},
|
||||
css: `${COMPILED_STYLE_DIR}/style.css`,
|
||||
stackTraceOnError: true,
|
||||
closeWindowDelay: closeWindowDelays,
|
||||
windows: Windows().flat(1),
|
||||
});
|
||||
|
||||
Notifications.popupTimeout = 5000;
|
||||
Notifications.forceTimeout = false;
|
||||
Notifications.cacheActions = true;
|
||||
Audio.maxStreamVolume = 1;
|
||||
|
||||
function reloadCss() {
|
||||
console.log("scss change detected");
|
||||
Utils.exec(`sass ${scss} ${css}`);
|
||||
App.resetCss();
|
||||
App.applyCss(css);
|
||||
}
|
||||
|
||||
Utils.monitorFile(`${App.configDir}/style`, reloadCss);
|
||||
|
||||
/**
|
||||
* @param {import("types/widgets/window.js").Window[]} windows
|
||||
*/
|
||||
function addWindows(windows) {
|
||||
windows.forEach((win) => App.addWindow(win));
|
||||
}
|
||||
|
||||
addWindows([Bar(), Music(), Osd(), SystemMenu(), NotificationPopup()]);
|
||||
|
||||
export {};
|
||||
// Stuff that don't need to be toggled. And they're async so ugh...
|
||||
forMonitorsAsync(Bar);
|
||||
// Bar().catch(print); // Use this to debug the bar. Single monitor only.
|
||||
|
||||
22
home/core/gui/ags/config_overviewOnly.js
Normal file
@@ -0,0 +1,22 @@
|
||||
// Want only the overview from my config? this is what you're looking for!
|
||||
// Remember to install: `dart-sass`, `ags`, `material-symbols`, and `xorg-xrandr`
|
||||
// To launch this, run the following
|
||||
// ags -c ~/.config/ags/config_overviewOnly.js
|
||||
// To toggle the overview, run:
|
||||
// ags -t overview
|
||||
// You might wanna add that as a keybind (in hyprland.conf)
|
||||
// bind = Super, Tab, exec, ags -t overview
|
||||
|
||||
// Import
|
||||
import App from "resource:///com/github/Aylur/ags/app.js";
|
||||
// Widgets
|
||||
import Overview from "./modules/overview/main.js";
|
||||
import { COMPILED_STYLE_DIR } from "./init.js";
|
||||
|
||||
handleStyles(true);
|
||||
|
||||
App.config({
|
||||
css: `${COMPILED_STYLE_DIR}/style.css`,
|
||||
stackTraceOnError: true,
|
||||
windows: [Overview()],
|
||||
});
|
||||
@@ -1,51 +0,0 @@
|
||||
{
|
||||
inputs,
|
||||
pkgs,
|
||||
lib,
|
||||
config,
|
||||
...
|
||||
}: let
|
||||
requiredDeps = with pkgs; [
|
||||
bash
|
||||
coreutils
|
||||
dart-sass
|
||||
gawk
|
||||
imagemagick
|
||||
procps
|
||||
ripgrep
|
||||
util-linux
|
||||
];
|
||||
|
||||
guiDeps = with pkgs; [
|
||||
gnome.gnome-control-center
|
||||
mission-center
|
||||
overskride
|
||||
wlogout
|
||||
];
|
||||
|
||||
dependencies = requiredDeps ++ guiDeps;
|
||||
|
||||
cfg = config.programs.ags;
|
||||
in {
|
||||
imports = [
|
||||
inputs.ags.homeManagerModules.default
|
||||
];
|
||||
|
||||
programs.ags.enable = true;
|
||||
|
||||
systemd.user.services.ags = {
|
||||
Unit = {
|
||||
Description = "Aylur's Gtk Shell";
|
||||
PartOf = [
|
||||
"tray.target"
|
||||
"graphical-session.target"
|
||||
];
|
||||
};
|
||||
Service = {
|
||||
Environment = "PATH=/run/wrappers/bin:${lib.makeBinPath dependencies}";
|
||||
ExecStart = "${cfg.package}/bin/ags";
|
||||
Restart = "on-failure";
|
||||
};
|
||||
Install.WantedBy = ["graphical-session.target"];
|
||||
};
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"typescript": {},
|
||||
"excludes": ["**/node_modules"],
|
||||
"plugins": ["https://plugins.dprint.dev/typescript-0.88.10.wasm"]
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
// Required components
|
||||
import GLib from "gi://GLib";
|
||||
import App from "resource:///com/github/Aylur/ags/app.js";
|
||||
import Service from "resource:///com/github/Aylur/ags/service.js";
|
||||
import * as Utils from "resource:///com/github/Aylur/ags/utils.js";
|
||||
import Variable from "resource:///com/github/Aylur/ags/variable.js";
|
||||
import Widget from "resource:///com/github/Aylur/ags/widget.js";
|
||||
|
||||
// Services
|
||||
import Audio from "resource:///com/github/Aylur/ags/service/audio.js";
|
||||
import Battery from "resource:///com/github/Aylur/ags/service/battery.js";
|
||||
import Bluetooth from "resource:///com/github/Aylur/ags/service/bluetooth.js";
|
||||
import Hyprland from "resource:///com/github/Aylur/ags/service/hyprland.js";
|
||||
import Mpris from "resource:///com/github/Aylur/ags/service/mpris.js";
|
||||
import Network from "resource:///com/github/Aylur/ags/service/network.js";
|
||||
import Notifications from "resource:///com/github/Aylur/ags/service/notifications.js";
|
||||
import SystemTray from "resource:///com/github/Aylur/ags/service/systemtray.js";
|
||||
|
||||
import Icons from "./utils/icons.js";
|
||||
|
||||
export {
|
||||
App,
|
||||
Audio,
|
||||
Battery,
|
||||
Bluetooth,
|
||||
GLib,
|
||||
Hyprland,
|
||||
Icons,
|
||||
Mpris,
|
||||
Network,
|
||||
Notifications,
|
||||
Service,
|
||||
SystemTray,
|
||||
Utils,
|
||||
Variable,
|
||||
Widget,
|
||||
};
|
||||
39
home/core/gui/ags/init.js
Normal file
@@ -0,0 +1,39 @@
|
||||
import GLib from "gi://GLib";
|
||||
import App from "resource:///com/github/Aylur/ags/app.js";
|
||||
import * as Utils from "resource:///com/github/Aylur/ags/utils.js";
|
||||
import { darkMode } from "./modules/.miscutils/system.js";
|
||||
|
||||
export const COMPILED_STYLE_DIR = `${GLib.get_user_cache_dir()}/ags/user/generated`;
|
||||
|
||||
globalThis["handleStyles"] = (resetMusic) => {
|
||||
// Reset
|
||||
Utils.exec(`mkdir -p "${GLib.get_user_state_dir()}/ags/scss"`);
|
||||
if (resetMusic) {
|
||||
Utils.exec(
|
||||
`bash -c 'echo "" > ${GLib.get_user_state_dir()}/ags/scss/_musicwal.scss'`,
|
||||
); // reset music styles
|
||||
Utils.exec(
|
||||
`bash -c 'echo "" > ${GLib.get_user_state_dir()}/ags/scss/_musicmaterial.scss'`,
|
||||
); // reset music styles
|
||||
}
|
||||
// Generate overrides
|
||||
let lightdark = darkMode.value ? "dark" : "light";
|
||||
Utils.writeFileSync(
|
||||
`@mixin symbolic-icon {
|
||||
-gtk-icon-theme: '${userOptions.icons.symbolicIconTheme[lightdark]}';
|
||||
}
|
||||
`,
|
||||
`${GLib.get_user_state_dir()}/ags/scss/_lib_mixins_overrides.scss`,
|
||||
);
|
||||
// Compile and apply
|
||||
async function applyStyle() {
|
||||
Utils.exec(`mkdir -p ${COMPILED_STYLE_DIR}`);
|
||||
Utils.exec(
|
||||
`sass -I "${GLib.get_user_state_dir()}/ags/scss" -I "${App.configDir}/scss/fallback" "${App.configDir}/scss/main.scss" "${COMPILED_STYLE_DIR}/style.css"`,
|
||||
);
|
||||
App.resetCss();
|
||||
App.applyCss(`${COMPILED_STYLE_DIR}/style.css`);
|
||||
console.log("[LOG] Styles loaded");
|
||||
}
|
||||
applyStyle().catch(print);
|
||||
};
|
||||
@@ -1,79 +0,0 @@
|
||||
import { Service, Utils } from "../imports.js";
|
||||
import Gio from "gi://Gio";
|
||||
import GLib from "gi://GLib";
|
||||
|
||||
const clamp = (num, min, max) => Math.min(Math.max(num, min), max);
|
||||
|
||||
class BrightnessService extends Service {
|
||||
static {
|
||||
Service.register(
|
||||
this,
|
||||
{ "screen-changed": ["float"] },
|
||||
{ "screen-value": ["float", "rw"] },
|
||||
);
|
||||
}
|
||||
|
||||
#screenValue = 0;
|
||||
|
||||
#interface = Utils.exec("sh -c 'ls -w1 /sys/class/backlight | head -1'");
|
||||
#path = `/sys/class/backlight/${this.#interface}`;
|
||||
#brightness = `${this.#path}/brightness`;
|
||||
|
||||
#max = Number(Utils.readFile(`${this.#path}/max_brightness`));
|
||||
|
||||
get screen_value() {
|
||||
return this.#screenValue;
|
||||
}
|
||||
|
||||
set screen_value(percent) {
|
||||
percent = clamp(percent, 0, 1);
|
||||
this.#screenValue = percent;
|
||||
|
||||
const file = Gio.File.new_for_path(this.#brightness);
|
||||
const string = `${Math.round(percent * this.#max)}`;
|
||||
|
||||
new Promise((resolve, _) => {
|
||||
file.replace_contents_bytes_async(
|
||||
new GLib.Bytes(new TextEncoder().encode(string)),
|
||||
null,
|
||||
false,
|
||||
Gio.FileCreateFlags.NONE,
|
||||
null,
|
||||
(self, res) => {
|
||||
try {
|
||||
self.replace_contents_finish(res);
|
||||
resolve(self);
|
||||
} catch (error) {
|
||||
print(error);
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this.#updateScreenValue();
|
||||
Utils.monitorFile(this.#brightness, () => this.#onChange());
|
||||
}
|
||||
|
||||
#updateScreenValue() {
|
||||
this.#screenValue = Number(Utils.readFile(this.#brightness)) / this.#max;
|
||||
}
|
||||
|
||||
#onChange() {
|
||||
this.#updateScreenValue();
|
||||
|
||||
this.notify("screen-value");
|
||||
this.emit("screen-changed", this.#screenValue);
|
||||
}
|
||||
|
||||
connectWidget(widget, callback, event = "screen-changed") {
|
||||
super.connectWidget(widget, callback, event);
|
||||
}
|
||||
}
|
||||
|
||||
const service = new BrightnessService();
|
||||
|
||||
export default service;
|
||||
@@ -1,65 +0,0 @@
|
||||
import { Audio, Icons, Service, Utils } from "../imports.js";
|
||||
import { audioIcon, micIcon } from "../utils/audio.js";
|
||||
import Brightness from "./brightness.js";
|
||||
|
||||
class Indicator extends Service {
|
||||
static {
|
||||
Service.register(this, {
|
||||
popup: ["jsobject", "boolean"],
|
||||
});
|
||||
}
|
||||
|
||||
#delay = 1500;
|
||||
#count = 0;
|
||||
|
||||
popup(value, label, icon, showProgress = true) {
|
||||
const props = {
|
||||
value,
|
||||
label,
|
||||
icon,
|
||||
showProgress,
|
||||
};
|
||||
this.emit("popup", props, true);
|
||||
this.#count++;
|
||||
Utils.timeout(this.#delay, () => {
|
||||
this.#count--;
|
||||
|
||||
if (this.#count === 0) {
|
||||
this.emit("popup", props, false);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
bluetooth(addr) {
|
||||
this.popup(0, getBluetoothDevice(addr), Icons.bluetooth.active, false);
|
||||
}
|
||||
|
||||
speaker() {
|
||||
this.popup(
|
||||
Audio.speaker?.volume ?? 0,
|
||||
Audio.speaker?.description ?? "",
|
||||
audioIcon(),
|
||||
);
|
||||
}
|
||||
|
||||
mic() {
|
||||
this.popup(
|
||||
Audio.microphone?.volume || 0,
|
||||
Audio.microphone?.description || "",
|
||||
micIcon(),
|
||||
);
|
||||
}
|
||||
|
||||
display() {
|
||||
// brightness is async, so lets wait a bit
|
||||
Utils.timeout(10, () =>
|
||||
this.popup(Brightness.screenValue, "Brightness", Icons.brightness),
|
||||
);
|
||||
}
|
||||
|
||||
connect(event = "popup", callback) {
|
||||
return super.connect(event, callback);
|
||||
}
|
||||
}
|
||||
|
||||
export default new Indicator();
|
||||
@@ -1,13 +0,0 @@
|
||||
/* style aggregator */
|
||||
|
||||
/* setup */
|
||||
@import "style/prelude";
|
||||
@import "style/colors";
|
||||
@import "style/general";
|
||||
|
||||
/* modules & windows */
|
||||
@import "style/bar";
|
||||
@import "style/music";
|
||||
@import "style/osd";
|
||||
@import "style/system-menu";
|
||||
@import "style/notifications";
|
||||
@@ -1,134 +0,0 @@
|
||||
.bar {
|
||||
background: $bar-bg;
|
||||
min-height: 32px;
|
||||
|
||||
.module {
|
||||
margin: 0 0.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
/* workspaces */
|
||||
.bar .workspaces {
|
||||
margin: 0.2rem 0.5rem;
|
||||
|
||||
button {
|
||||
background: rgba(0, 0, 0, 0.3);
|
||||
border-radius: 2rem;
|
||||
margin: 0.7rem 0.2rem;
|
||||
min-width: 1rem;
|
||||
transition: 100ms linear;
|
||||
}
|
||||
|
||||
.focused {
|
||||
min-width: 2rem;
|
||||
}
|
||||
|
||||
.monitor0 {
|
||||
background: $red;
|
||||
}
|
||||
|
||||
.monitor1 {
|
||||
background: $yellow;
|
||||
}
|
||||
|
||||
.monitor2 {
|
||||
background: $green;
|
||||
}
|
||||
|
||||
.monitor3 {
|
||||
background: $blue;
|
||||
}
|
||||
}
|
||||
|
||||
/* music */
|
||||
.bar .music {
|
||||
&>box {
|
||||
@include animate;
|
||||
border-radius: $round2;
|
||||
margin: 0.4rem;
|
||||
}
|
||||
|
||||
&.active>box {
|
||||
background: $surface;
|
||||
}
|
||||
|
||||
.cover {
|
||||
background-size: cover;
|
||||
background-position: center;
|
||||
border-radius: 50%;
|
||||
min-width: 2rem;
|
||||
min-height: 2rem;
|
||||
}
|
||||
}
|
||||
|
||||
/* tray */
|
||||
.tray button {
|
||||
@include button;
|
||||
background: none;
|
||||
margin: 0.5rem 0;
|
||||
|
||||
&:not(:last-child) {
|
||||
margin-right: 0.3rem;
|
||||
}
|
||||
|
||||
&.active {
|
||||
background: $surface;
|
||||
}
|
||||
}
|
||||
|
||||
menu {
|
||||
background: $tooltip-bg;
|
||||
border-radius: $round;
|
||||
|
||||
separator {
|
||||
background-color: $surface;
|
||||
}
|
||||
|
||||
menuitem {
|
||||
@include button;
|
||||
border-radius: 0;
|
||||
padding: 0.4rem 0.7rem;
|
||||
|
||||
&:first-child {
|
||||
border-radius: $round $round 0 0;
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
border-radius: 0 0 $round $round;
|
||||
}
|
||||
|
||||
&:only-child {
|
||||
border-radius: $round;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* system-info */
|
||||
.bar .system-info {
|
||||
margin: 0 0.2rem;
|
||||
|
||||
&>box {
|
||||
margin: 0 0.3rem;
|
||||
}
|
||||
|
||||
.type {
|
||||
font-size: 0.55rem;
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
.value {
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
}
|
||||
|
||||
.system-menu-toggler {
|
||||
box {
|
||||
@include animate;
|
||||
margin: 0.4rem 0;
|
||||
border-radius: $round2;
|
||||
}
|
||||
|
||||
&.active box {
|
||||
background: $surface;
|
||||
}
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
$red: #f38ba8;
|
||||
$yellow: #f9e2af;
|
||||
$green: #a6e3a1;
|
||||
$blue: #89b4fa;
|
||||
|
||||
$tooltip-bg: #000000;
|
||||
$fg: #ffffff;
|
||||
$bg: rgba(0, 0, 0, 0.3);
|
||||
$bar-bg: rgba(0, 0, 0, 0.21);
|
||||
|
||||
$surface: rgba(255, 255, 255, 0.15);
|
||||
$overlay: rgba(255, 255, 255, 0.7);
|
||||
|
||||
$accent: #9d5b7a;
|
||||
|
||||
/* buttons */
|
||||
$button-enabled: $accent;
|
||||
$button-enabled-hover: adjust_color($button-enabled, $lightness: -10%);
|
||||
|
||||
$button-disabled: $surface;
|
||||
$button-disabled-hover: adjust_color($button-disabled, $alpha: +0.1);
|
||||
|
||||
* {
|
||||
text-shadow: 0 2px 3px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
@mixin border {
|
||||
// border: 1px solid rgba(0, 0, 0, 0.1);
|
||||
box-shadow:
|
||||
// inset 0 0 0 1px rgba(255, 255, 255, 0.1),
|
||||
0 3px 5px 1px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
$red: #f38ba8;
|
||||
$yellow: #f9e2af;
|
||||
$green: #a6e3a1;
|
||||
$blue: #89b4fa;
|
||||
|
||||
$tooltip-bg: #ffffff;
|
||||
$fg: #000000;
|
||||
$bg: rgba(255, 255, 255, 0.5);
|
||||
$bar-bg: rgba(255, 255, 255, 0.3);
|
||||
|
||||
$surface: rgba(255, 255, 255, 0.3);
|
||||
$overlay: rgba(0, 0, 0, 0.5);
|
||||
|
||||
$accent: #ddbaef;
|
||||
|
||||
/* buttons */
|
||||
$button-enabled: $accent;
|
||||
$button-enabled-hover: adjust_color($button-enabled, $lightness: -10%);
|
||||
|
||||
$button-disabled: $surface;
|
||||
$button-disabled-hover: adjust_color($button-disabled, $alpha: +0.1);
|
||||
|
||||
* {
|
||||
text-shadow: 0 2px 3px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
@mixin border {
|
||||
// border: 1px solid rgba(0, 0, 0, 0.1);
|
||||
box-shadow:
|
||||
// inset 0 0 0 1px rgba(255, 255, 255, 0.1),
|
||||
0 3px 5px 1px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
$red: #f38ba8;
|
||||
$yellow: #f9e2af;
|
||||
$green: #a6e3a1;
|
||||
$blue: #89b4fa;
|
||||
|
||||
$tooltip-bg: #000000;
|
||||
$fg: #ffffff;
|
||||
$bg: rgba(0, 0, 0, 0.3);
|
||||
$bar-bg: rgba(0, 0, 0, 0.21);
|
||||
|
||||
$surface: rgba(255, 255, 255, 0.15);
|
||||
$overlay: rgba(255, 255, 255, 0.7);
|
||||
|
||||
$accent: #9d5b7a;
|
||||
|
||||
/* buttons */
|
||||
$button-enabled: $accent;
|
||||
$button-enabled-hover: adjust_color($button-enabled, $lightness: -10%);
|
||||
|
||||
$button-disabled: $surface;
|
||||
$button-disabled-hover: adjust_color($button-disabled, $alpha: +0.1);
|
||||
|
||||
* {
|
||||
text-shadow: 0 2px 3px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
@mixin border {
|
||||
// border: 1px solid rgba(0, 0, 0, 0.1);
|
||||
box-shadow:
|
||||
// inset 0 0 0 1px rgba(255, 255, 255, 0.1),
|
||||
0 3px 5px 1px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
@@ -1,100 +0,0 @@
|
||||
/* general styles */
|
||||
|
||||
$round: 8px;
|
||||
$round2: calc($round * 2);
|
||||
$margin: 0.4rem;
|
||||
$padding: 0.4rem;
|
||||
$border-width: 2px;
|
||||
$scale: 0.5rem;
|
||||
|
||||
@mixin animate {
|
||||
transition: 200ms;
|
||||
}
|
||||
|
||||
* {
|
||||
color: $fg;
|
||||
}
|
||||
|
||||
/* mixins */
|
||||
@mixin window-rounding {
|
||||
border-radius: $round2;
|
||||
}
|
||||
|
||||
@mixin rounding {
|
||||
border-radius: calc($round2 - $padding - $border-width);
|
||||
}
|
||||
|
||||
@mixin window-box {
|
||||
@include rounding;
|
||||
|
||||
background: $surface;
|
||||
box-shadow: 0 1px 5px -5px rgba(0, 0, 0, 0.5);
|
||||
margin: $margin;
|
||||
padding: $padding;
|
||||
}
|
||||
|
||||
@mixin window {
|
||||
@include border;
|
||||
@include window-rounding;
|
||||
|
||||
background: $bg;
|
||||
margin: 5px 10px 15px;
|
||||
padding: $padding;
|
||||
}
|
||||
|
||||
tooltip {
|
||||
background: $tooltip-bg;
|
||||
box-shadow:
|
||||
inset 0 0 0 1px rgba(255, 255, 255, 0.1),
|
||||
0 0 rgba(0, 0, 0, 0.4);
|
||||
border-radius: $round;
|
||||
}
|
||||
|
||||
/* scales & progress bars */
|
||||
scale,
|
||||
progressbar {
|
||||
trough {
|
||||
background-color: $surface;
|
||||
border-radius: $scale;
|
||||
min-width: calc($scale * 10);
|
||||
padding: 0 calc($scale / 2);
|
||||
}
|
||||
|
||||
highlight,
|
||||
progress {
|
||||
background: $overlay;
|
||||
border-radius: $scale;
|
||||
margin: 0 calc(0px - $scale / 2);
|
||||
min-height: $scale;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin button-active {
|
||||
@include animate;
|
||||
background: $button-enabled;
|
||||
border-radius: 5rem;
|
||||
padding: 0.4rem;
|
||||
|
||||
&:hover {
|
||||
background: $button-enabled-hover;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin button {
|
||||
@include animate;
|
||||
background: $button-disabled;
|
||||
border-radius: 5rem;
|
||||
padding: 0.4rem;
|
||||
|
||||
&:hover {
|
||||
background: $button-disabled-hover;
|
||||
}
|
||||
}
|
||||
|
||||
.button {
|
||||
@include button-active;
|
||||
}
|
||||
|
||||
.button.disabled {
|
||||
@include button;
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
.music.window {
|
||||
@include window;
|
||||
|
||||
.cover {
|
||||
background-position: center;
|
||||
background-size: cover;
|
||||
border-radius: $round;
|
||||
box-shadow: 0 1px 2px -1px $bg;
|
||||
margin: 0.4rem;
|
||||
min-height: 13rem;
|
||||
min-width: 13rem;
|
||||
}
|
||||
}
|
||||
|
||||
.music.window .info {
|
||||
margin: 0.5rem;
|
||||
|
||||
label,
|
||||
scale {
|
||||
margin: 0.3rem 0;
|
||||
}
|
||||
|
||||
label.position,
|
||||
label.length {
|
||||
font-size: 0.8rem;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
scale {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.title {
|
||||
font-size: 1.5rem;
|
||||
font-weight: bold;
|
||||
min-width: 14rem;
|
||||
}
|
||||
}
|
||||
|
||||
.music.window .controls {
|
||||
button {
|
||||
margin: 0 0.2rem;
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
.music.window .player-info {
|
||||
margin-bottom: 0;
|
||||
|
||||
.player-icon {
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
}
|
||||
@@ -1,57 +0,0 @@
|
||||
.notification {
|
||||
@include window;
|
||||
margin: 5px 5px 5px 10px;
|
||||
|
||||
min-width: 25rem;
|
||||
|
||||
border-radius: $round2;
|
||||
background-color: $bg;
|
||||
|
||||
&.critical {
|
||||
border: 1px solid red;
|
||||
}
|
||||
}
|
||||
|
||||
.notifications widget:last-child .notification {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.notification .icon {
|
||||
image {
|
||||
font-size: 5rem;
|
||||
margin: 0.5rem;
|
||||
min-height: 5rem;
|
||||
min-width: 5rem;
|
||||
}
|
||||
|
||||
>box {
|
||||
border-radius: $round;
|
||||
margin: 0.5rem;
|
||||
min-height: 5rem;
|
||||
min-width: 5rem;
|
||||
}
|
||||
}
|
||||
|
||||
.notification .actions .action-button {
|
||||
@include window-box;
|
||||
@include animate;
|
||||
padding: 0.5rem 0;
|
||||
|
||||
&:hover {
|
||||
background: $button-disabled-hover;
|
||||
}
|
||||
}
|
||||
|
||||
.notification .text {
|
||||
margin: 0.5rem;
|
||||
|
||||
.title {
|
||||
margin-bottom: 0.2rem;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.body {
|
||||
color: rgba(255, 255, 255, 0.7);
|
||||
font-weight: 500;
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
.osd {
|
||||
@include window;
|
||||
padding: 0;
|
||||
margin-bottom: 2rem;
|
||||
|
||||
image {
|
||||
margin-left: 1rem;
|
||||
color: rgba(0, 0, 0, 0.6);
|
||||
}
|
||||
|
||||
progressbar trough {
|
||||
border-radius: 16px;
|
||||
background: none;
|
||||
min-width: 12.5rem;
|
||||
min-height: 2.5rem;
|
||||
}
|
||||
|
||||
progressbar progress {
|
||||
border-radius: 0;
|
||||
border-radius: 16px;
|
||||
min-height: 2.5rem;
|
||||
}
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
/* get rid of GTK theme's styles and set defaults */
|
||||
* {
|
||||
all: unset;
|
||||
font-family: Inter, Roboto, sans-serif;
|
||||
}
|
||||
@@ -1,77 +0,0 @@
|
||||
/* general */
|
||||
.system-menu {
|
||||
@include window;
|
||||
margin-top: 4px;
|
||||
margin-right: 4px;
|
||||
|
||||
&>box {
|
||||
@include window-box;
|
||||
}
|
||||
}
|
||||
|
||||
/* toggles */
|
||||
.system-menu .toggle {
|
||||
min-width: 20rem;
|
||||
|
||||
&:not(:last-child) {
|
||||
margin-bottom: 0.3rem;
|
||||
}
|
||||
|
||||
.button {
|
||||
margin-right: 0.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
/* power profiles */
|
||||
.system-menu .power-profiles {
|
||||
padding: 0;
|
||||
|
||||
.current-profile {
|
||||
padding: 0.3rem;
|
||||
}
|
||||
|
||||
image,
|
||||
label {
|
||||
margin: 0.3rem;
|
||||
}
|
||||
|
||||
.options {
|
||||
padding: 0;
|
||||
|
||||
widget {
|
||||
@include button;
|
||||
border-radius: 0;
|
||||
|
||||
&:last-child {
|
||||
border-radius: 0 0 $round $round;
|
||||
}
|
||||
|
||||
box {
|
||||
padding: 0.3rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* sliders */
|
||||
.system-menu .sliders {
|
||||
image {
|
||||
margin: 0.3rem;
|
||||
}
|
||||
|
||||
scale {
|
||||
margin: 0 0.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
.system-menu .battery-box {
|
||||
|
||||
image,
|
||||
label {
|
||||
margin: 0 0.3rem;
|
||||
}
|
||||
|
||||
.time {
|
||||
color: rgba(255, 255, 255, 0.7);
|
||||
}
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "ES2022",
|
||||
"module": "ES2022",
|
||||
"lib": [
|
||||
"ES2022"
|
||||
],
|
||||
"allowJs": true,
|
||||
"checkJs": true,
|
||||
"strict": true,
|
||||
"noImplicitAny": false,
|
||||
"baseUrl": ".",
|
||||
"typeRoots": [
|
||||
"./types"
|
||||
],
|
||||
"skipLibCheck": true
|
||||
}
|
||||
}
|
||||
8
home/core/gui/ags/user_options.js
Normal file
@@ -0,0 +1,8 @@
|
||||
// For every option, see ~/.config/ags/modules/.configuration/user_options.js
|
||||
// (vscode users ctrl+click this: file://./modules/.configuration/user_options.js)
|
||||
// (vim users: `:vsp` to split window, move cursor to this path, press `gf`. `Ctrl-w` twice to switch between)
|
||||
// options listed in this file will override the default ones in the above file
|
||||
|
||||
const userConfigOptions = {};
|
||||
|
||||
export default userConfigOptions;
|
||||
@@ -1,30 +0,0 @@
|
||||
import { Audio, Icons } from "../imports.js";
|
||||
|
||||
export const audioIcon = () => {
|
||||
if (Audio.speaker?.stream.isMuted) return Icons.volume.muted;
|
||||
|
||||
const vol = Audio.speaker?.volume * 100;
|
||||
const icon = [
|
||||
[101, "overamplified"],
|
||||
[67, "high"],
|
||||
[34, "medium"],
|
||||
[1, "low"],
|
||||
[0, "muted"],
|
||||
].find(([threshold]) => threshold <= vol)[1];
|
||||
|
||||
return Icons.volume[icon];
|
||||
};
|
||||
|
||||
export const micIcon = () => {
|
||||
if (Audio.microphone?.stream.isMuted) return Icons.microphone.muted;
|
||||
|
||||
const vol = Audio.microphone?.volume * 100;
|
||||
const icon = [
|
||||
[67, "high"],
|
||||
[34, "medium"],
|
||||
[1, "low"],
|
||||
[0, "muted"],
|
||||
].find(([threshold]) => threshold <= vol)[1];
|
||||
|
||||
return Icons.microphone[icon];
|
||||
};
|
||||
@@ -1,22 +0,0 @@
|
||||
import { Battery } from "../imports.js";
|
||||
|
||||
export const toTime = (time) => {
|
||||
const MINUTE = 60;
|
||||
const HOUR = MINUTE * 60;
|
||||
|
||||
if (time > 24 * HOUR) return "";
|
||||
|
||||
const hours = Math.round(time / HOUR);
|
||||
const minutes = Math.round((time - hours * HOUR) / MINUTE);
|
||||
|
||||
const hoursDisplay = hours > 0 ? `${hours}h ` : "";
|
||||
const minutesDisplay = minutes > 0 ? `${minutes}m ` : "";
|
||||
|
||||
return `${hoursDisplay}${minutesDisplay}`;
|
||||
};
|
||||
|
||||
export const batteryTime = () => {
|
||||
return Battery.timeRemaining > 0 && toTime(Battery.timeRemaining) != ""
|
||||
? `${toTime(Battery.timeRemaining)}remaining`
|
||||
: "";
|
||||
};
|
||||
@@ -1,27 +0,0 @@
|
||||
import { Bluetooth, Icons } from "../imports.js";
|
||||
|
||||
export const getBluetoothDevice = (addr) =>
|
||||
Bluetooth.getDevice(addr).alias ?? Bluetooth.getDevice(addr).name;
|
||||
|
||||
export const getBluetoothIcon = (connected) => {
|
||||
if (!Bluetooth.enabled) return Icons.bluetooth.disabled;
|
||||
if (connected.length > 0) return Icons.bluetooth.active;
|
||||
return Icons.bluetooth.disconnected;
|
||||
};
|
||||
|
||||
export const getBluetoothText = (connected) => {
|
||||
if (!Bluetooth.enabled) return "Bluetooth off";
|
||||
|
||||
if (connected.length > 0) {
|
||||
const dev = Bluetooth.getDevice(connected[0].address);
|
||||
let battery_str = "";
|
||||
|
||||
if (dev.battery_percentage > 0) {
|
||||
battery_str += ` ${dev.battery_percentage}%`;
|
||||
}
|
||||
|
||||
return dev.name + battery_str;
|
||||
}
|
||||
|
||||
return "Bluetooth on";
|
||||
};
|
||||
@@ -1,107 +0,0 @@
|
||||
import { Hyprland } from "../imports.js";
|
||||
|
||||
export let DEFAULT_MONITOR;
|
||||
const connID = Hyprland.connect("notify::workspaces", () => {
|
||||
Hyprland.disconnect(connID);
|
||||
|
||||
DEFAULT_MONITOR = {
|
||||
name: Hyprland.monitors[0].name,
|
||||
id: Hyprland.monitors[0].id,
|
||||
};
|
||||
});
|
||||
|
||||
export const changeWorkspace = (ws) =>
|
||||
Hyprland.messageAsync(`dispatch workspace ${ws}`);
|
||||
|
||||
export const focusedSwitch = (self) => {
|
||||
const id = Hyprland.active.workspace.id;
|
||||
if (self.lastFocused == id) return;
|
||||
|
||||
self.children[self.lastFocused - 1].toggleClassName("focused", false);
|
||||
self.children[id - 1].toggleClassName("focused", true);
|
||||
self.lastFocused = id;
|
||||
};
|
||||
|
||||
export const added = (self, name) => {
|
||||
if (!name) return;
|
||||
const ws = Hyprland.workspaces.find((e) => e.name == name);
|
||||
const id = ws?.id ?? Number(name);
|
||||
const child = self.children[id - 1];
|
||||
|
||||
child.monitor = {
|
||||
name: ws?.monitor ?? DEFAULT_MONITOR.name,
|
||||
id: ws?.monitorID ?? DEFAULT_MONITOR.id,
|
||||
};
|
||||
|
||||
child.active = true;
|
||||
child.toggleClassName(`monitor${child.monitor.id}`, true);
|
||||
|
||||
// if this id is bigger than the last biggest id, visibilise all other ws before it
|
||||
if (id > self.biggestId) {
|
||||
for (let i = self.biggestId; i <= id; i++) {
|
||||
self.children[i - 1].visible = true;
|
||||
}
|
||||
self.biggestId = id;
|
||||
}
|
||||
};
|
||||
|
||||
const makeInvisible = (self, id) => {
|
||||
if (id <= 1) return;
|
||||
|
||||
const child = self.children[id - 1];
|
||||
if (child.active) {
|
||||
self.biggestId = id;
|
||||
return;
|
||||
}
|
||||
|
||||
child.visible = false;
|
||||
makeInvisible(self, id - 1);
|
||||
};
|
||||
|
||||
export const removed = (self, name) => {
|
||||
if (!name) return;
|
||||
|
||||
const id = Number(name);
|
||||
const child = self.children[id - 1];
|
||||
|
||||
child.toggleClassName(`monitor${child.monitor.id}`, false);
|
||||
child.active = false;
|
||||
|
||||
// if this id is the biggest id, unvisibilise it and all other inactives until the next active before it
|
||||
if (id == self.biggestId) {
|
||||
makeInvisible(self, id);
|
||||
}
|
||||
};
|
||||
|
||||
export const moveWorkspace = (self, data) => {
|
||||
const [id, name] = data.split(",");
|
||||
|
||||
const child = self.children[id - 1];
|
||||
|
||||
// remove previous monitor class
|
||||
child.toggleClassName(`monitor${child.monitor.id}`, false);
|
||||
|
||||
// add new monitor and class
|
||||
const monitor = Hyprland.monitors.find((e) => e.name == name);
|
||||
|
||||
child.monitor = {
|
||||
name,
|
||||
id: monitor?.id ?? DEFAULT_MONITOR.id,
|
||||
};
|
||||
|
||||
print(`child ${id}: monitor ${name} ${child.monitor.id}`);
|
||||
child.toggleClassName(`monitor${child.monitor.id}`, true);
|
||||
};
|
||||
|
||||
export const sortWorkspaces = () => {
|
||||
return Hyprland.workspaces
|
||||
.sort((x, y) => {
|
||||
return x.id - y.id;
|
||||
})
|
||||
.filter((x) => {
|
||||
return x.name.indexOf("special") == -1;
|
||||
});
|
||||
};
|
||||
|
||||
export const getLastWorkspaceId = () => sortWorkspaces().slice(-1)[0].id;
|
||||
export const workspaceActive = (id) => sortWorkspaces().some((e) => e.id == id);
|
||||
@@ -1,35 +0,0 @@
|
||||
export default {
|
||||
bluetooth: {
|
||||
active: "bluetooth-active-symbolic",
|
||||
disabled: "bluetooth-disabled-symbolic",
|
||||
disconnected: "bluetooth-disconnected-symbolic",
|
||||
},
|
||||
|
||||
brightness: "display-brightness-symbolic",
|
||||
|
||||
media: {
|
||||
play: "media-playback-start-symbolic",
|
||||
pause: "media-playback-pause-symbolic",
|
||||
next: "media-skip-forward-symbolic",
|
||||
previous: "media-skip-backward-symbolic",
|
||||
|
||||
player: "multimedia-player-symbolic",
|
||||
},
|
||||
|
||||
volume: {
|
||||
muted: "audio-volume-muted-symbolic",
|
||||
low: "audio-volume-low-symbolic",
|
||||
medium: "audio-volume-medium-symbolic",
|
||||
high: "audio-volume-high-symbolic",
|
||||
overamplified: "audio-volume-overamplified-symbolic",
|
||||
},
|
||||
|
||||
microphone: {
|
||||
muted: "microphone-sensitivity-muted-symbolic",
|
||||
low: "microphone-sensitivity-low-symbolic",
|
||||
medium: "microphone-sensitivity-medium-symbolic",
|
||||
high: "microphone-sensitivity-high-symbolic",
|
||||
},
|
||||
|
||||
powerButton: "system-shutdown-symbolic",
|
||||
};
|
||||
@@ -1,46 +0,0 @@
|
||||
import { Icons, Utils } from "../imports.js";
|
||||
import GLib from "gi://GLib";
|
||||
|
||||
export const findPlayer = (players) => {
|
||||
// try to get the first active player
|
||||
const activePlayer = players.find((p) => p.playBackStatus == "Playing");
|
||||
if (activePlayer != null) return activePlayer;
|
||||
|
||||
// otherwise get the first "working" player
|
||||
for (const p of players) {
|
||||
if (p.title != "undefined") return p;
|
||||
}
|
||||
};
|
||||
|
||||
export const mprisStateIcon = (status) => {
|
||||
const state = status == "Playing" ? "pause" : "play";
|
||||
return Icons.media[state];
|
||||
};
|
||||
|
||||
export const MEDIA_CACHE_PATH = Utils.CACHE_DIR + "/media";
|
||||
export const blurredPath = MEDIA_CACHE_PATH + "/blurred";
|
||||
|
||||
export const generateBackground = (cover_path) => {
|
||||
const url = cover_path;
|
||||
if (!url) return "";
|
||||
|
||||
const makeBg = (bg) => `background: center/cover url('${bg}')`;
|
||||
|
||||
const blurred = blurredPath + url.substring(MEDIA_CACHE_PATH.length);
|
||||
|
||||
if (GLib.file_test(blurred, GLib.FileTest.EXISTS)) {
|
||||
return makeBg(blurred);
|
||||
}
|
||||
|
||||
Utils.ensureDirectory(blurredPath);
|
||||
Utils.exec(`convert ${url} -blur 0x22 ${blurred}`);
|
||||
|
||||
return makeBg(blurred);
|
||||
};
|
||||
|
||||
export function lengthStr(length) {
|
||||
const min = Math.floor(length / 60);
|
||||
const sec = Math.floor(length % 60);
|
||||
const sec0 = sec < 10 ? "0" : "";
|
||||
return `${min}:${sec0}${sec}`;
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
import { Network } from "../imports.js";
|
||||
|
||||
export const getNetIcon = () => {
|
||||
if (Network.connectivity == "none") return "";
|
||||
if (Network.primary == "wired") return "network-wired";
|
||||
|
||||
return Network.wifi.icon_name;
|
||||
};
|
||||
|
||||
export const getNetText = () => {
|
||||
// no connection
|
||||
if (Network.connectivity == "none") return "No connection";
|
||||
|
||||
// wired
|
||||
if (Network.primary == "wired") return "Wired";
|
||||
|
||||
// wifi
|
||||
const wifi = Network.wifi;
|
||||
switch (wifi.internet) {
|
||||
case "connected":
|
||||
return wifi.ssid;
|
||||
case "connecting":
|
||||
return "Connecting";
|
||||
case "disconnected":
|
||||
return "Disconnected";
|
||||
}
|
||||
};
|
||||
@@ -1,46 +0,0 @@
|
||||
import App from "resource:///com/github/Aylur/ags/app.js";
|
||||
import { Widget } from "../imports.js";
|
||||
const { Box, Revealer, Window } = Widget;
|
||||
|
||||
export default ({
|
||||
name,
|
||||
child,
|
||||
revealerSetup = null,
|
||||
transition = "crossfade",
|
||||
transitionDuration = 200,
|
||||
...props
|
||||
}) => {
|
||||
const window = Window({
|
||||
name,
|
||||
popup: false,
|
||||
focusable: false,
|
||||
visible: false,
|
||||
...props,
|
||||
|
||||
setup: (self) => (self.getChild = () => child),
|
||||
|
||||
child: Box({
|
||||
css: `
|
||||
min-height: 1px;
|
||||
min-width: 1px;
|
||||
padding: 1px;
|
||||
`,
|
||||
child: Revealer({
|
||||
transition,
|
||||
transitionDuration,
|
||||
child: child,
|
||||
|
||||
setup:
|
||||
revealerSetup ??
|
||||
((self) =>
|
||||
self.hook(App, (self, currentName, visible) => {
|
||||
if (currentName === name) {
|
||||
self.reveal_child = visible;
|
||||
}
|
||||
})),
|
||||
}),
|
||||
}),
|
||||
});
|
||||
|
||||
return window;
|
||||
};
|
||||
58
home/core/gui/ags/variables.js
Normal file
@@ -0,0 +1,58 @@
|
||||
const { Gdk, Gtk } = imports.gi;
|
||||
import App from "resource:///com/github/Aylur/ags/app.js";
|
||||
import Variable from "resource:///com/github/Aylur/ags/variable.js";
|
||||
import Mpris from "resource:///com/github/Aylur/ags/service/mpris.js";
|
||||
import * as Utils from "resource:///com/github/Aylur/ags/utils.js";
|
||||
const { exec, execAsync } = Utils;
|
||||
|
||||
Gtk.IconTheme.get_default().append_search_path(`${App.configDir}/assets/icons`);
|
||||
|
||||
// Global vars for external control (through keybinds)
|
||||
export const showMusicControls = Variable(false, {});
|
||||
export const showColorScheme = Variable(false, {});
|
||||
globalThis["openMusicControls"] = showMusicControls;
|
||||
globalThis["openColorScheme"] = showColorScheme;
|
||||
globalThis["mpris"] = Mpris;
|
||||
|
||||
// Mode switching
|
||||
export const currentShellMode = Variable("normal", {}); // normal, focus
|
||||
globalThis["currentMode"] = currentShellMode;
|
||||
globalThis["cycleMode"] = () => {
|
||||
if (currentShellMode.value === "normal") {
|
||||
currentShellMode.value = "focus";
|
||||
} else if (currentShellMode.value === "focus") {
|
||||
currentShellMode.value = "nothing";
|
||||
} else {
|
||||
currentShellMode.value = "normal";
|
||||
}
|
||||
};
|
||||
|
||||
// Window controls
|
||||
const range = (length, start = 1) =>
|
||||
Array.from({ length }, (_, i) => i + start);
|
||||
globalThis["toggleWindowOnAllMonitors"] = (name) => {
|
||||
range(Gdk.Display.get_default()?.get_n_monitors() || 1, 0).forEach((id) => {
|
||||
App.toggleWindow(`${name}${id}`);
|
||||
});
|
||||
};
|
||||
globalThis["closeWindowOnAllMonitors"] = (name) => {
|
||||
range(Gdk.Display.get_default()?.get_n_monitors() || 1, 0).forEach((id) => {
|
||||
App.closeWindow(`${name}${id}`);
|
||||
});
|
||||
};
|
||||
globalThis["openWindowOnAllMonitors"] = (name) => {
|
||||
range(Gdk.Display.get_default()?.get_n_monitors() || 1, 0).forEach((id) => {
|
||||
App.openWindow(`${name}${id}`);
|
||||
});
|
||||
};
|
||||
|
||||
globalThis["closeEverything"] = () => {
|
||||
const numMonitors = Gdk.Display.get_default()?.get_n_monitors() || 1;
|
||||
for (let i = 0; i < numMonitors; i++) {
|
||||
App.closeWindow(`cheatsheet${i}`);
|
||||
App.closeWindow(`session${i}`);
|
||||
}
|
||||
App.closeWindow("sideleft");
|
||||
App.closeWindow("sideright");
|
||||
App.closeWindow("overview");
|
||||
};
|
||||
@@ -1,62 +0,0 @@
|
||||
import { App, Widget } from "../../imports.js";
|
||||
import Battery from "./modules/battery.js";
|
||||
import Bluetooth from "./modules/bluetooth.js";
|
||||
import Date from "./modules/date.js";
|
||||
import Music from "./modules/music.js";
|
||||
import Net from "./modules/net.js";
|
||||
import CpuRam from "./modules/cpu_ram.js";
|
||||
import Tray from "./modules/tray.js";
|
||||
import Workspaces from "./modules/workspaces.js";
|
||||
|
||||
const SystemInfo = () =>
|
||||
Widget.EventBox({
|
||||
className: "system-menu-toggler",
|
||||
onPrimaryClick: () => App.toggleWindow("system-menu"),
|
||||
|
||||
child: Widget.Box({
|
||||
children: [Net(), Bluetooth(), Battery()],
|
||||
}),
|
||||
}).hook(App, (self, window, visible) => {
|
||||
if (window === "system-menu") {
|
||||
self.toggleClassName("active", visible);
|
||||
}
|
||||
});
|
||||
|
||||
const Start = () =>
|
||||
Widget.Box({
|
||||
hexpand: true,
|
||||
hpack: "start",
|
||||
children: [
|
||||
Workspaces(),
|
||||
// Indicators
|
||||
],
|
||||
});
|
||||
|
||||
const Center = () =>
|
||||
Widget.Box({
|
||||
children: [Music()],
|
||||
});
|
||||
|
||||
const End = () =>
|
||||
Widget.Box({
|
||||
hexpand: true,
|
||||
hpack: "end",
|
||||
|
||||
children: [Tray(), CpuRam(), SystemInfo(), Date()],
|
||||
});
|
||||
|
||||
export default () =>
|
||||
Widget.Window({
|
||||
monitor: 0,
|
||||
name: `bar`,
|
||||
anchor: ["top", "left", "right"],
|
||||
exclusivity: "exclusive",
|
||||
|
||||
child: Widget.CenterBox({
|
||||
className: "bar",
|
||||
|
||||
startWidget: Start(),
|
||||
centerWidget: Center(),
|
||||
endWidget: End(),
|
||||
}),
|
||||
});
|
||||
@@ -1,6 +0,0 @@
|
||||
import { Battery, Widget } from "../../../imports.js";
|
||||
|
||||
export default () =>
|
||||
Widget.Icon({ className: "battery module" })
|
||||
.bind("icon", Battery, "icon-name")
|
||||
.bind("tooltip-text", Battery, "percent", (p) => `Battery on ${p}%`);
|
||||
@@ -1,10 +0,0 @@
|
||||
import { Bluetooth, Widget } from "../../../imports.js";
|
||||
import {
|
||||
getBluetoothIcon,
|
||||
getBluetoothText,
|
||||
} from "../../../utils/bluetooth.js";
|
||||
|
||||
export default () =>
|
||||
Widget.Icon({ className: "bluetooth module" })
|
||||
.bind("icon", Bluetooth, "connected-devices", getBluetoothIcon)
|
||||
.bind("tooltip-text", Bluetooth, "connected-devices", getBluetoothText);
|
||||
@@ -1,70 +0,0 @@
|
||||
import { Utils, Widget } from "../../../imports.js";
|
||||
|
||||
const Indicator = (props) =>
|
||||
Widget.Box({
|
||||
vertical: true,
|
||||
vexpand: true,
|
||||
vpack: "center",
|
||||
|
||||
children: [
|
||||
Widget.Label({
|
||||
className: "type",
|
||||
label: props.type,
|
||||
}),
|
||||
Widget.Label({ className: "value" }).poll(2000, props.poll),
|
||||
],
|
||||
}).poll(2000, props.boxpoll);
|
||||
|
||||
const cpu = {
|
||||
type: "CPU",
|
||||
|
||||
poll: (self) =>
|
||||
Utils.execAsync([
|
||||
"sh",
|
||||
"-c",
|
||||
`top -bn1 | rg '%Cpu' | tail -1 | awk '{print 100-$8}'`,
|
||||
])
|
||||
.then((r) => (self.label = Math.round(Number(r)) + "%"))
|
||||
.catch((err) => print(err)),
|
||||
|
||||
boxpoll: (self) =>
|
||||
Utils.execAsync(["sh", "-c", "lscpu --parse=MHZ"])
|
||||
.then((r) => {
|
||||
const mhz = r.split("\n").slice(4);
|
||||
const freq = mhz.reduce((acc, e) => acc + Number(e), 0) / mhz.length;
|
||||
self.tooltipText = Math.round(freq) + " MHz";
|
||||
})
|
||||
.catch((err) => print(err)),
|
||||
};
|
||||
|
||||
const ram = {
|
||||
type: "MEM",
|
||||
poll: (self) =>
|
||||
Utils.execAsync([
|
||||
"sh",
|
||||
"-c",
|
||||
`free | tail -2 | head -1 | awk '{print $3/$2*100}'`,
|
||||
])
|
||||
.then((r) => (self.label = Math.round(Number(r)) + "%"))
|
||||
.catch((err) => print(err)),
|
||||
|
||||
boxpoll: (self) =>
|
||||
Utils.execAsync([
|
||||
"sh",
|
||||
"-c",
|
||||
"free --si -h | tail -2 | head -1 | awk '{print $3}'",
|
||||
])
|
||||
.then((r) => (self.tooltipText = r))
|
||||
.catch((err) => print(err)),
|
||||
};
|
||||
|
||||
export default () =>
|
||||
Widget.EventBox({
|
||||
onPrimaryClick: () => Utils.execAsync(["missioncenter"]),
|
||||
|
||||
child: Widget.Box({
|
||||
className: "system-info module",
|
||||
|
||||
children: [Indicator(cpu), Indicator(ram)],
|
||||
}),
|
||||
});
|
||||
@@ -1,10 +0,0 @@
|
||||
import { Utils, Widget } from "../../../imports.js";
|
||||
|
||||
export default () =>
|
||||
Widget.EventBox({
|
||||
child: Widget.Label({ className: "date module" }).poll(1000, (self) =>
|
||||
Utils.execAsync(["date", "+%a %b %d %H:%M"]).then(
|
||||
(r) => (self.label = r),
|
||||
),
|
||||
),
|
||||
});
|
||||
@@ -1,40 +0,0 @@
|
||||
import { Mpris, Widget } from "../../../imports.js";
|
||||
import App from "resource:///com/github/Aylur/ags/app.js";
|
||||
import { findPlayer } from "../../../utils/mpris.js";
|
||||
|
||||
const Cover = (player) =>
|
||||
Widget.Box({ className: "cover" }).bind(
|
||||
"css",
|
||||
player,
|
||||
"cover-path",
|
||||
(cover) => `background-image: url('${cover ?? ""}');`,
|
||||
);
|
||||
|
||||
const Title = (player) =>
|
||||
Widget.Label({ className: "title module" }).bind(
|
||||
"label",
|
||||
player,
|
||||
"track-title",
|
||||
(title) => ((title ?? "") == "Unknown title" ? "" : title),
|
||||
);
|
||||
|
||||
export const MusicBox = (player) =>
|
||||
Widget.Box({
|
||||
children: [Cover(player), Title(player)],
|
||||
});
|
||||
|
||||
export default () =>
|
||||
Widget.EventBox({
|
||||
className: "music",
|
||||
onPrimaryClick: () => App.toggleWindow("music"),
|
||||
})
|
||||
.hook(App, (self, window, visible) => {
|
||||
if (window === "music") {
|
||||
self.toggleClassName("active", visible);
|
||||
}
|
||||
})
|
||||
.bind("visible", Mpris, "players", (p) => p.length > 0)
|
||||
.bind("child", Mpris, "players", (players) => {
|
||||
if (players.length == 0) return Widget.Box();
|
||||
return MusicBox(findPlayer(players));
|
||||
});
|
||||
@@ -1,7 +0,0 @@
|
||||
import { Network, Widget } from "../../../imports.js";
|
||||
import { getNetIcon, getNetText } from "../../../utils/net.js";
|
||||
|
||||
export default () =>
|
||||
Widget.Icon({ className: "net module" })
|
||||
.bind("icon", Network, "connectivity", getNetIcon)
|
||||
.bind("tooltip-text", Network, "connectivity", getNetText);
|
||||
@@ -1,47 +0,0 @@
|
||||
import { SystemTray, Widget } from "../../../imports.js";
|
||||
import Gdk from "gi://Gdk?version=3.0";
|
||||
|
||||
const Item = (item) =>
|
||||
Widget.Button({
|
||||
child: Widget.Icon().bind("icon", item, "icon"),
|
||||
|
||||
onPrimaryClick: (_, ev) => {
|
||||
try {
|
||||
item.activate(ev);
|
||||
} catch (err) {
|
||||
print(err);
|
||||
}
|
||||
},
|
||||
|
||||
setup: (self) => {
|
||||
const id = item.menu?.connect("popped-up", (menu) => {
|
||||
self.toggleClassName("active");
|
||||
menu.connect("notify::visible", (menu) => {
|
||||
self.toggleClassName("active", menu.visible);
|
||||
});
|
||||
menu.disconnect(id);
|
||||
});
|
||||
|
||||
if (id) {
|
||||
self.connect("destroy", () => item.menu?.disconnect(id));
|
||||
}
|
||||
|
||||
self.bind("tooltip-markup", item, "tooltip-markup");
|
||||
},
|
||||
|
||||
onSecondaryClick: (btn) =>
|
||||
item.menu?.popup_at_widget(
|
||||
btn,
|
||||
Gdk.Gravity.SOUTH,
|
||||
Gdk.Gravity.NORTH,
|
||||
null,
|
||||
),
|
||||
});
|
||||
|
||||
export default () =>
|
||||
Widget.Box({ className: "tray module" }).bind(
|
||||
"children",
|
||||
SystemTray,
|
||||
"items",
|
||||
(items) => items.map(Item),
|
||||
);
|
||||
@@ -1,72 +0,0 @@
|
||||
import { Hyprland, Widget } from "../../../imports.js";
|
||||
import {
|
||||
added,
|
||||
changeWorkspace,
|
||||
DEFAULT_MONITOR,
|
||||
focusedSwitch,
|
||||
getLastWorkspaceId,
|
||||
moveWorkspace,
|
||||
removed,
|
||||
workspaceActive,
|
||||
} from "../../../utils/hyprland.js";
|
||||
|
||||
globalThis.hyprland = Hyprland;
|
||||
|
||||
const makeWorkspaces = () =>
|
||||
[...Array(10)].map((_, i) => {
|
||||
const id = i + 1;
|
||||
|
||||
return Widget.Button({
|
||||
onPrimaryClick: () => changeWorkspace(id),
|
||||
|
||||
visible: getLastWorkspaceId() >= id,
|
||||
|
||||
setup: (self) => {
|
||||
const ws = Hyprland.getWorkspace(id);
|
||||
self.id = id;
|
||||
self.active = workspaceActive(id);
|
||||
self.monitor = DEFAULT_MONITOR;
|
||||
|
||||
if (self.active) {
|
||||
self.monitor = {
|
||||
name: ws?.monitor ?? DEFAULT_MONITOR.name,
|
||||
id: ws?.monitorID ?? DEFAULT_MONITOR.id,
|
||||
};
|
||||
self.toggleClassName(`monitor${self.monitor.id}`, true);
|
||||
}
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
export default () =>
|
||||
Widget.EventBox({
|
||||
onScrollUp: () => changeWorkspace("+1"),
|
||||
onScrollDown: () => changeWorkspace("-1"),
|
||||
|
||||
child: Widget.Box({
|
||||
className: "workspaces module",
|
||||
|
||||
// The Hyprland service is ready later than ags is done parsing the config,
|
||||
// so only build the widget when we receive a signal from it.
|
||||
setup: (self) => {
|
||||
const connID = Hyprland.connect("notify::workspaces", () => {
|
||||
Hyprland.disconnect(connID);
|
||||
|
||||
self.children = makeWorkspaces();
|
||||
self.lastFocused = Hyprland.active.workspace.id;
|
||||
self.biggestId = getLastWorkspaceId();
|
||||
self
|
||||
.hook(Hyprland.active.workspace, focusedSwitch)
|
||||
.hook(Hyprland, added, "workspace-added")
|
||||
.hook(Hyprland, removed, "workspace-removed")
|
||||
.hook(
|
||||
Hyprland,
|
||||
(self, name, data) => {
|
||||
if (name === "moveworkspace") moveWorkspace(self, data);
|
||||
},
|
||||
"event",
|
||||
);
|
||||
});
|
||||
},
|
||||
}),
|
||||
});
|
||||
29
home/core/gui/ags/windows/music/controls.js
vendored
@@ -1,29 +0,0 @@
|
||||
import { Icons, Widget } from "../../imports.js";
|
||||
import { mprisStateIcon } from "../../utils/mpris.js";
|
||||
|
||||
export default (player) =>
|
||||
Widget.CenterBox({
|
||||
className: "controls",
|
||||
hpack: "center",
|
||||
|
||||
startWidget: Widget.Button({
|
||||
onClicked: () => player.previous(),
|
||||
child: Widget.Icon(Icons.media.previous),
|
||||
}),
|
||||
|
||||
centerWidget: Widget.Button({
|
||||
onClicked: () => player.playPause(),
|
||||
|
||||
child: Widget.Icon().bind(
|
||||
"icon",
|
||||
player,
|
||||
"play-back-status",
|
||||
mprisStateIcon,
|
||||
),
|
||||
}),
|
||||
|
||||
endWidget: Widget.Button({
|
||||
onClicked: () => player.next(),
|
||||
child: Widget.Icon(Icons.media.next),
|
||||
}),
|
||||
});
|
||||
@@ -1,9 +0,0 @@
|
||||
import { Widget } from "../../imports.js";
|
||||
|
||||
export default (player) =>
|
||||
Widget.Box({ className: "cover" }).bind(
|
||||
"css",
|
||||
player,
|
||||
"cover-path",
|
||||
(cover) => `background-image: url('${cover ?? ""}')`,
|
||||
);
|
||||
@@ -1,43 +0,0 @@
|
||||
import { Mpris, Widget } from "../../imports.js";
|
||||
import { findPlayer, generateBackground } from "../../utils/mpris.js";
|
||||
import PopupWindow from "../../utils/popup_window.js";
|
||||
|
||||
import Cover from "./cover.js";
|
||||
import { Artists, Title } from "./title_artists.js";
|
||||
import TimeInfo from "./time_info.js";
|
||||
import Controls from "./controls.js";
|
||||
import PlayerInfo from "./player_info.js";
|
||||
|
||||
const Info = (player) =>
|
||||
Widget.Box({
|
||||
className: "info",
|
||||
vertical: true,
|
||||
vexpand: false,
|
||||
hexpand: false,
|
||||
homogeneous: true,
|
||||
|
||||
children: [
|
||||
PlayerInfo(player),
|
||||
Title(player),
|
||||
Artists(player),
|
||||
Controls(player),
|
||||
TimeInfo(player),
|
||||
],
|
||||
});
|
||||
|
||||
const MusicBox = (player) =>
|
||||
Widget.Box({
|
||||
className: "music window",
|
||||
children: [Cover(player), Info(player)],
|
||||
}).bind("css", player, "cover-path", generateBackground);
|
||||
|
||||
export default () =>
|
||||
PopupWindow({
|
||||
monitor: 0,
|
||||
anchor: ["top"],
|
||||
name: "music",
|
||||
child: Widget.Box(),
|
||||
}).bind("child", Mpris, "players", (players) => {
|
||||
if (players.length == 0) return Widget.Box();
|
||||
return MusicBox(findPlayer(players));
|
||||
});
|
||||
@@ -1,21 +0,0 @@
|
||||
import { Icons, Utils, Widget } from "../../imports.js";
|
||||
|
||||
export default (player) =>
|
||||
Widget.Box({
|
||||
className: "player-info",
|
||||
vexpand: true,
|
||||
vpack: "start",
|
||||
|
||||
children: [
|
||||
Widget.Icon({
|
||||
hexpand: true,
|
||||
hpack: "end",
|
||||
className: "player-icon",
|
||||
tooltipText: player.identity ?? "",
|
||||
}).bind("icon", player, "entry", (entry) => {
|
||||
// the Spotify icon is called spotify-client
|
||||
if (entry == "spotify") entry = "spotify-client";
|
||||
return Utils.lookUpIcon(entry ?? "") ? entry : Icons.media.player;
|
||||
}),
|
||||
],
|
||||
});
|
||||
@@ -1,68 +0,0 @@
|
||||
import { Widget } from "../../imports.js";
|
||||
import { lengthStr } from "../../utils/mpris.js";
|
||||
|
||||
export const PositionLabel = (player) =>
|
||||
Widget.Label({
|
||||
className: "position",
|
||||
hexpand: true,
|
||||
xalign: 0,
|
||||
|
||||
setup: (self) => {
|
||||
const update = (_, time) => {
|
||||
player.length > 0
|
||||
? (self.label = lengthStr(time || player.position))
|
||||
: (self.visible = !!player);
|
||||
};
|
||||
|
||||
self.hook(player, update, "position").poll(1000, update);
|
||||
},
|
||||
});
|
||||
|
||||
export const LengthLabel = (player) =>
|
||||
Widget.Label({
|
||||
className: "length",
|
||||
hexpand: true,
|
||||
xalign: 1,
|
||||
})
|
||||
.bind("visible", player, "length", (length) => length > 0)
|
||||
.bind("label", player, "length", (length) => lengthStr(length));
|
||||
|
||||
export const Position = (player) =>
|
||||
Widget.Slider({
|
||||
className: "position",
|
||||
draw_value: false,
|
||||
|
||||
onChange: ({ value }) => (player.position = player.length * value),
|
||||
|
||||
setup: (self) => {
|
||||
const update = () => {
|
||||
if (self.dragging) return;
|
||||
|
||||
self.visible = player.length > 0;
|
||||
|
||||
if (player.length > 0) {
|
||||
self.value = player.position / player.length;
|
||||
}
|
||||
};
|
||||
|
||||
self
|
||||
.hook(player, update)
|
||||
.hook(player, update, "position")
|
||||
.poll(1000, update);
|
||||
},
|
||||
});
|
||||
|
||||
export default (player) =>
|
||||
Widget.Box({
|
||||
vertical: true,
|
||||
vexpand: true,
|
||||
vpack: "end",
|
||||
|
||||
children: [
|
||||
Widget.Box({
|
||||
hexpand: true,
|
||||
children: [PositionLabel(player), LengthLabel(player)],
|
||||
}),
|
||||
Position(player),
|
||||
],
|
||||
});
|
||||
@@ -1,32 +0,0 @@
|
||||
import { Widget } from "../../imports.js";
|
||||
|
||||
export const Title = (player) =>
|
||||
Widget.Scrollable({
|
||||
className: "title",
|
||||
vscroll: "never",
|
||||
hscroll: "automatic",
|
||||
|
||||
child: Widget.Label({
|
||||
className: "title",
|
||||
label: "Nothing playing",
|
||||
}).bind(
|
||||
"label",
|
||||
player,
|
||||
"track-title",
|
||||
(title) => title ?? "Nothing playing",
|
||||
),
|
||||
});
|
||||
|
||||
export const Artists = (player) =>
|
||||
Widget.Scrollable({
|
||||
className: "artists",
|
||||
vscroll: "never",
|
||||
hscroll: "automatic",
|
||||
|
||||
child: Widget.Label({ className: "artists" }).bind(
|
||||
"label",
|
||||
player,
|
||||
"track-artists",
|
||||
(artists) => artists.join(", ") ?? "",
|
||||
),
|
||||
});
|
||||
@@ -1,139 +0,0 @@
|
||||
import { Hyprland, Notifications, Utils, Widget } from "../../imports.js";
|
||||
|
||||
const closeAll = () => {
|
||||
Notifications.popups.map((n) => n.dismiss());
|
||||
};
|
||||
|
||||
/** @param {import("types/service/notifications").Notification} n */
|
||||
const NotificationIcon = ({ app_entry, app_icon, image }) => {
|
||||
if (image) {
|
||||
return Widget.Box({
|
||||
css: `
|
||||
background-image: url("${image}");
|
||||
background-size: contain;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
`,
|
||||
});
|
||||
}
|
||||
|
||||
if (Utils.lookUpIcon(app_icon)) {
|
||||
return Widget.Icon(app_icon);
|
||||
}
|
||||
|
||||
if (app_entry && Utils.lookUpIcon(app_entry)) {
|
||||
return Widget.Icon(app_entry);
|
||||
}
|
||||
|
||||
return null;
|
||||
};
|
||||
|
||||
/** @param {import('types/service/notifications').Notification} n */
|
||||
export const Notification = (n) => {
|
||||
const icon = Widget.Box({
|
||||
vpack: "start",
|
||||
class_name: "icon",
|
||||
// @ts-ignore
|
||||
setup: (self) => {
|
||||
let icon = NotificationIcon(n);
|
||||
if (icon !== null) {
|
||||
self.child = icon;
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
const title = Widget.Label({
|
||||
class_name: "title",
|
||||
xalign: 0,
|
||||
justification: "left",
|
||||
hexpand: true,
|
||||
max_width_chars: 24,
|
||||
truncate: "end",
|
||||
wrap: true,
|
||||
label: n.summary,
|
||||
use_markup: true,
|
||||
});
|
||||
|
||||
const body = Widget.Label({
|
||||
class_name: "body",
|
||||
hexpand: true,
|
||||
use_markup: true,
|
||||
xalign: 0,
|
||||
justification: "left",
|
||||
max_width_chars: 100,
|
||||
wrap: true,
|
||||
label: n.body,
|
||||
});
|
||||
|
||||
const actions = Widget.Box({
|
||||
class_name: "actions",
|
||||
children: n.actions
|
||||
.filter(({ id }) => id != "default")
|
||||
.map(({ id, label }) =>
|
||||
Widget.Button({
|
||||
class_name: "action-button",
|
||||
on_clicked: () => n.invoke(id),
|
||||
hexpand: true,
|
||||
child: Widget.Label(label),
|
||||
}),
|
||||
),
|
||||
});
|
||||
|
||||
return Widget.EventBox({
|
||||
on_primary_click: () => {
|
||||
if (n.actions.length > 0) n.invoke(n.actions[0].id);
|
||||
},
|
||||
on_middle_click: closeAll,
|
||||
on_secondary_click: () => n.dismiss(),
|
||||
child: Widget.Box({
|
||||
class_name: `notification ${n.urgency}`,
|
||||
vertical: true,
|
||||
|
||||
children: [
|
||||
Widget.Box({
|
||||
class_name: "info",
|
||||
children: [
|
||||
icon,
|
||||
Widget.Box({
|
||||
vertical: true,
|
||||
class_name: "text",
|
||||
vpack: "center",
|
||||
|
||||
setup: (self) => {
|
||||
if (n.body.length > 0) {
|
||||
self.children = [title, body];
|
||||
} else {
|
||||
self.children = [title];
|
||||
}
|
||||
},
|
||||
}),
|
||||
],
|
||||
}),
|
||||
actions,
|
||||
],
|
||||
}),
|
||||
});
|
||||
};
|
||||
|
||||
let lastMonitor;
|
||||
export const notificationPopup = () =>
|
||||
Widget.Window({
|
||||
name: "notifications",
|
||||
anchor: ["top", "right"],
|
||||
child: Widget.Box({
|
||||
css: "padding: 1px;",
|
||||
class_name: "notifications",
|
||||
vertical: true,
|
||||
// @ts-ignore
|
||||
children: Notifications.bind("popups").transform((popups) => {
|
||||
return popups.map(Notification);
|
||||
}),
|
||||
}),
|
||||
}).hook(Hyprland.active, (self) => {
|
||||
// prevent useless resets
|
||||
if (lastMonitor === Hyprland.active.monitor) return;
|
||||
|
||||
self.monitor = Hyprland.active.monitor.id;
|
||||
});
|
||||
|
||||
export default notificationPopup;
|
||||
@@ -1,86 +0,0 @@
|
||||
import App from "resource:///com/github/Aylur/ags/app.js";
|
||||
import { Audio, Hyprland, Widget } from "../../imports.js";
|
||||
|
||||
import Brightness from "../../services/brightness.js";
|
||||
import Indicators from "../../services/osd.js";
|
||||
import PopupWindow from "../../utils/popup_window.js";
|
||||
|
||||
// connections
|
||||
Audio.connect("speaker-changed", () =>
|
||||
Audio.speaker.connect("changed", () => {
|
||||
if (!App.getWindow("system-menu")?.visible) {
|
||||
Indicators.speaker();
|
||||
}
|
||||
}),
|
||||
);
|
||||
Audio.connect("microphone-changed", () =>
|
||||
Audio.microphone.connect("changed", () => Indicators.mic()),
|
||||
);
|
||||
|
||||
Brightness.connect("screen-changed", () => {
|
||||
if (!App.getWindow("system-menu")?.visible) {
|
||||
Indicators.display();
|
||||
}
|
||||
});
|
||||
|
||||
let lastMonitor;
|
||||
|
||||
const child = () =>
|
||||
Widget.Box({
|
||||
className: "osd",
|
||||
|
||||
children: [
|
||||
Widget.Overlay({
|
||||
hexpand: true,
|
||||
visible: false,
|
||||
passThrough: true,
|
||||
|
||||
child: Widget.ProgressBar({
|
||||
hexpand: true,
|
||||
vertical: false,
|
||||
}).hook(Indicators, (self, props) => {
|
||||
self.value = props?.value ?? 0;
|
||||
self.visible = props?.showProgress ?? false;
|
||||
}),
|
||||
|
||||
overlays: [
|
||||
Widget.Box({
|
||||
hexpand: true,
|
||||
|
||||
children: [
|
||||
Widget.Icon().hook(
|
||||
Indicators,
|
||||
(self, props) => (self.icon = props?.icon ?? ""),
|
||||
),
|
||||
Widget.Box({
|
||||
hexpand: true,
|
||||
}),
|
||||
],
|
||||
}),
|
||||
],
|
||||
}),
|
||||
],
|
||||
});
|
||||
|
||||
export default () =>
|
||||
PopupWindow({
|
||||
name: "osd",
|
||||
monitor: 0,
|
||||
layer: "overlay",
|
||||
child: child(),
|
||||
click_through: true,
|
||||
anchor: ["bottom"],
|
||||
revealerSetup: (self) =>
|
||||
self.hook(Indicators, (revealer, _, visible) => {
|
||||
revealer.reveal_child = visible;
|
||||
}),
|
||||
})
|
||||
.hook(Hyprland.active, (self) => {
|
||||
// prevent useless resets
|
||||
if (lastMonitor === Hyprland.active.monitor) return;
|
||||
|
||||
self.monitor = Hyprland.active.monitor.id;
|
||||
})
|
||||
.hook(Indicators, (win, _, visible) => {
|
||||
win.visible = visible;
|
||||
});
|
||||
@@ -1,52 +0,0 @@
|
||||
import { App, Battery, Icons, Utils, Widget } from "../../imports.js";
|
||||
import { batteryTime } from "../../utils/battery.js";
|
||||
|
||||
const batteryEnergy = () => {
|
||||
return Battery.energyRate > 0.1 ? `${Battery.energyRate.toFixed(1)} W ` : "";
|
||||
};
|
||||
|
||||
const BatteryIcon = () =>
|
||||
Widget.Icon()
|
||||
.bind("icon", Battery, "percent", () => Battery.iconName)
|
||||
.bind("tooltip-text", Battery, "energy-rate", batteryEnergy);
|
||||
|
||||
const BatteryPercent = () =>
|
||||
Widget.Label().bind("label", Battery, "percent", (percent) => `${percent}%`);
|
||||
|
||||
const BatteryTime = () =>
|
||||
Widget.Label({
|
||||
className: "time",
|
||||
vexpand: true,
|
||||
vpack: "center",
|
||||
})
|
||||
.bind("label", Battery, "charging", batteryTime)
|
||||
.bind("label", Battery, "energy-rate", batteryTime);
|
||||
|
||||
const BatteryBox = () =>
|
||||
Widget.Box({
|
||||
className: "battery-box",
|
||||
visible: Battery.available,
|
||||
|
||||
children: [BatteryIcon(), BatteryPercent(), BatteryTime()],
|
||||
});
|
||||
|
||||
const PowerButton = () =>
|
||||
Widget.Button({
|
||||
className: "button disabled",
|
||||
hexpand: true,
|
||||
hpack: "end",
|
||||
|
||||
onPrimaryClick: () => {
|
||||
App.toggleWindow("system-menu");
|
||||
Utils.exec("wlogout");
|
||||
},
|
||||
|
||||
child: Widget.Icon(Icons.powerButton),
|
||||
});
|
||||
|
||||
export default () =>
|
||||
Widget.Box({
|
||||
className: "battery-info",
|
||||
|
||||
children: [BatteryBox(), PowerButton()],
|
||||
});
|
||||
@@ -1,22 +0,0 @@
|
||||
import { Widget } from "../../imports.js";
|
||||
import PopupWindow from "../../utils/popup_window.js";
|
||||
|
||||
import Toggles from "./toggles.js";
|
||||
import Sliders from "./sliders.js";
|
||||
import BatteryInfo from "./battery_info.js";
|
||||
|
||||
const SystemMenuBox = () =>
|
||||
Widget.Box({
|
||||
className: "system-menu",
|
||||
vertical: true,
|
||||
|
||||
children: [Toggles(), Sliders(), BatteryInfo()],
|
||||
});
|
||||
|
||||
export default () =>
|
||||
PopupWindow({
|
||||
monitor: 0,
|
||||
anchor: ["top", "right"],
|
||||
name: "system-menu",
|
||||
child: SystemMenuBox(),
|
||||
});
|
||||
@@ -1,74 +0,0 @@
|
||||
import { App, Audio, Icons, Utils, Widget } from "../../imports.js";
|
||||
import Brightness from "../../services/brightness.js";
|
||||
import { audioIcon } from "../../utils/audio.js";
|
||||
|
||||
const Slider = (args) =>
|
||||
Widget.Box({
|
||||
...(args.props ?? {}),
|
||||
className: args.name,
|
||||
|
||||
children: [
|
||||
Widget.Button({
|
||||
onPrimaryClick: args.icon.action ?? null,
|
||||
child: Widget.Icon({
|
||||
icon: args.icon.icon ?? "",
|
||||
setup: args.icon.setup,
|
||||
}),
|
||||
}),
|
||||
Widget.Slider({
|
||||
drawValue: false,
|
||||
hexpand: true,
|
||||
setup: args.slider.setup,
|
||||
onChange: args.slider.onChange ?? null,
|
||||
}),
|
||||
],
|
||||
});
|
||||
|
||||
const vol = () => {
|
||||
return {
|
||||
name: "volume",
|
||||
icon: {
|
||||
icon: "",
|
||||
action: () => {
|
||||
App.toggleWindow("system-menu");
|
||||
Utils.execAsync("pwvucontrol");
|
||||
},
|
||||
setup: (self) =>
|
||||
self
|
||||
.bind("icon", Audio.speaker, "volume", audioIcon)
|
||||
.bind("icon", Audio.speaker.stream, "is-muted", audioIcon),
|
||||
},
|
||||
slider: {
|
||||
setup: (self) => self.bind("value", Audio.speaker, "volume"),
|
||||
onChange: ({ value }) => (Audio.speaker.volume = value),
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
const brightness = () => {
|
||||
return {
|
||||
name: "brightness",
|
||||
icon: {
|
||||
icon: Icons.brightness,
|
||||
},
|
||||
slider: {
|
||||
setup: (self) => self.bind("value", Brightness, "screen-value"),
|
||||
onChange: ({ value }) => (Brightness.screenValue = value),
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
export default () =>
|
||||
Widget.Box({
|
||||
className: "sliders",
|
||||
vertical: true,
|
||||
|
||||
// The Audio service is ready later than ags is done parsing the config,
|
||||
// so only build the widget when we receive a signal from it.
|
||||
setup: (self) => {
|
||||
const connID = Audio.connect("notify::speaker", () => {
|
||||
Audio.disconnect(connID);
|
||||
self.children = [Slider(vol()), Slider(brightness())];
|
||||
});
|
||||
},
|
||||
});
|
||||
@@ -1,102 +0,0 @@
|
||||
import { App, Bluetooth, Network, Utils, Widget } from "../../imports.js";
|
||||
|
||||
import { getNetIcon, getNetText } from "../../utils/net.js";
|
||||
import { getBluetoothIcon, getBluetoothText } from "../../utils/bluetooth.js";
|
||||
|
||||
const Toggle = (args) =>
|
||||
Widget.Box({
|
||||
...(args.props ?? {}),
|
||||
className: `toggle ${args.name}`,
|
||||
hexpand: true,
|
||||
hpack: "start",
|
||||
|
||||
children: [
|
||||
Widget.Button({
|
||||
className: "button",
|
||||
|
||||
child: Widget.Icon({
|
||||
setup: args.icon.setup,
|
||||
}),
|
||||
setup: args.icon.buttonSetup,
|
||||
}),
|
||||
Widget.Button({
|
||||
hexpand: true,
|
||||
child: Widget.Label({
|
||||
hpack: "start",
|
||||
setup: args.label.setup,
|
||||
}),
|
||||
setup: args.label.buttonSetup,
|
||||
}),
|
||||
],
|
||||
});
|
||||
|
||||
const net = {
|
||||
name: "net",
|
||||
icon: {
|
||||
setup: (self) =>
|
||||
self
|
||||
.bind("icon", Network, "connectivity", getNetIcon)
|
||||
.bind("icon", Network.wifi, "icon-name", getNetIcon),
|
||||
|
||||
buttonSetup: (self) => {
|
||||
self.onPrimaryClick = () => Network.toggleWifi();
|
||||
self.hook(
|
||||
Network,
|
||||
(btn) =>
|
||||
btn.toggleClassName("disabled", Network.connectivity != "full"),
|
||||
"notify::connectivity",
|
||||
);
|
||||
},
|
||||
},
|
||||
label: {
|
||||
setup: (self) =>
|
||||
self
|
||||
.bind("label", Network, "connectivity", () => getNetText())
|
||||
.bind("label", Network.wifi, "ssid", () => getNetText()),
|
||||
|
||||
buttonSetup: (self) => {
|
||||
self.onPrimaryClick = () => {
|
||||
App.toggleWindow("system-menu");
|
||||
Utils.execAsync([
|
||||
"sh",
|
||||
"-c",
|
||||
"XDG_CURRENT_DESKTOP=GNOME gnome-control-center",
|
||||
]);
|
||||
};
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
const bt = {
|
||||
name: "bluetooth",
|
||||
icon: {
|
||||
setup: (self) =>
|
||||
self.bind("icon", Bluetooth, "connected-devices", getBluetoothIcon),
|
||||
buttonSetup: (self) => {
|
||||
self.onPrimaryClick = () => Bluetooth.toggle();
|
||||
self.hook(
|
||||
Bluetooth,
|
||||
(btn) => btn.toggleClassName("disabled", !Bluetooth.enabled),
|
||||
"notify::enabled",
|
||||
);
|
||||
},
|
||||
},
|
||||
label: {
|
||||
setup: (self) =>
|
||||
self.bind("label", Bluetooth, "connected-devices", getBluetoothText),
|
||||
buttonSetup: (self) => {
|
||||
self.onPrimaryClick = () => {
|
||||
App.toggleWindow("system-menu");
|
||||
Utils.execAsync("overskride");
|
||||
};
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export default () =>
|
||||
Widget.Box({
|
||||
className: "toggles",
|
||||
vertical: true,
|
||||
|
||||
children: [Toggle(net), Toggle(bt)],
|
||||
});
|
||||